@sapui5/sap.fe.macros 1.141.2 → 1.143.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 +1 -1
- package/src/sap/fe/macros/.library +1 -1
- package/src/sap/fe/macros/Breadcrumbs.js +4 -10
- package/src/sap/fe/macros/Breadcrumbs.tsx +2 -8
- package/src/sap/fe/macros/Chart.js +34 -23
- package/src/sap/fe/macros/Chart.tsx +25 -11
- package/src/sap/fe/macros/CollaborativeDraftHandler.js +47 -36
- package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +50 -31
- package/src/sap/fe/macros/CollectionBindingInfo.js +8 -2
- package/src/sap/fe/macros/CollectionBindingInfo.ts +11 -6
- package/src/sap/fe/macros/CommonHelper.js +14 -24
- package/src/sap/fe/macros/CommonHelper.ts +18 -25
- package/src/sap/fe/macros/ConditionalSwitch.js +1 -2
- package/src/sap/fe/macros/ConditionalSwitch.tsx +0 -1
- package/src/sap/fe/macros/ConditionalSwitchProperty.js +1 -3
- package/src/sap/fe/macros/ConditionalSwitchProperty.tsx +0 -2
- package/src/sap/fe/macros/Field.js +34 -17
- package/src/sap/fe/macros/Field.ts +64 -32
- package/src/sap/fe/macros/FooterContent.js +7 -3
- package/src/sap/fe/macros/FooterContent.tsx +8 -13
- package/src/sap/fe/macros/KPITag.js +6 -6
- package/src/sap/fe/macros/KPITag.tsx +8 -6
- package/src/sap/fe/macros/MacroAPI.js +4 -3
- package/src/sap/fe/macros/MacroAPI.ts +3 -3
- package/src/sap/fe/macros/MessageButton.js +4 -3
- package/src/sap/fe/macros/MessageButton.tsx +7 -3
- package/src/sap/fe/macros/MicroChart.js +12 -7
- package/src/sap/fe/macros/MicroChart.tsx +9 -3
- package/src/sap/fe/macros/MultiValueField.js +22 -36
- package/src/sap/fe/macros/MultiValueField.tsx +34 -66
- package/src/sap/fe/macros/RichTextEditor.js +3 -4
- package/src/sap/fe/macros/RichTextEditor.tsx +2 -3
- package/src/sap/fe/macros/Share.js +7 -7
- package/src/sap/fe/macros/Share.tsx +9 -6
- package/src/sap/fe/macros/Status.js +39 -11
- package/src/sap/fe/macros/Status.tsx +25 -5
- package/src/sap/fe/macros/ValueHelp.js +5 -2
- package/src/sap/fe/macros/ValueHelp.tsx +5 -0
- package/src/sap/fe/macros/ai/EasyFillDialog.js +2 -1
- package/src/sap/fe/macros/ai/EasyFillDialog.tsx +1 -0
- package/src/sap/fe/macros/ai/EasyFilterBar.js +7 -34
- package/src/sap/fe/macros/ai/EasyFilterBar.tsx +6 -35
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +31 -7
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +33 -6
- package/src/sap/fe/macros/ai/SummarizationButton.js +6 -4
- package/src/sap/fe/macros/ai/SummarizationButton.tsx +5 -3
- package/src/sap/fe/macros/chart/Action.js +25 -2
- package/src/sap/fe/macros/chart/Action.ts +13 -0
- package/src/sap/fe/macros/chart/ActionGroup.js +25 -2
- package/src/sap/fe/macros/chart/ActionGroup.ts +13 -0
- package/src/sap/fe/macros/chart/ChartDelegate.js +29 -8
- package/src/sap/fe/macros/chart/ChartDelegate.ts +46 -14
- package/src/sap/fe/macros/chart/MdcChartTemplate.js +58 -12
- package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +75 -13
- package/src/sap/fe/macros/chart/OverflowGroup.js +62 -0
- package/src/sap/fe/macros/chart/OverflowGroup.ts +22 -0
- package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +7 -7
- package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +3 -2
- package/src/sap/fe/macros/controls/FileWrapper.js +11 -5
- package/src/sap/fe/macros/controls/FileWrapper.ts +10 -4
- package/src/sap/fe/macros/controls/FilterBar.js +39 -3
- package/src/sap/fe/macros/controls/FilterBar.ts +42 -1
- package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +3 -1
- package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -0
- package/src/sap/fe/macros/controls/RadioButtons.js +18 -5
- package/src/sap/fe/macros/controls/RadioButtons.tsx +10 -1
- package/src/sap/fe/macros/coreUI/CreateDialog.js +3 -3
- package/src/sap/fe/macros/coreUI/CreateDialog.tsx +2 -2
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +40 -12
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +48 -9
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +4 -2
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +3 -1
- package/src/sap/fe/macros/field/FieldFormatOptions.js +4 -4
- package/src/sap/fe/macros/field/FieldFormatOptions.ts +2 -2
- package/src/sap/fe/macros/field/FieldHelper.js +4 -3
- package/src/sap/fe/macros/field/FieldHelper.ts +7 -1
- package/src/sap/fe/macros/field/FieldRuntime.js +44 -9
- package/src/sap/fe/macros/field/FieldRuntime.ts +72 -8
- package/src/sap/fe/macros/field/FieldRuntimeHelper.js +3 -34
- package/src/sap/fe/macros/field/FieldRuntimeHelper.ts +28 -53
- package/src/sap/fe/macros/field/FieldTemplating.js +5 -4
- package/src/sap/fe/macros/field/FieldTemplating.ts +6 -4
- package/src/sap/fe/macros/filter/FilterFieldHelper.js +6 -4
- package/src/sap/fe/macros/filter/FilterFieldHelper.ts +7 -2
- package/src/sap/fe/macros/filter/FilterUtils.js +130 -40
- package/src/sap/fe/macros/filter/FilterUtils.ts +167 -45
- package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.js +2 -2
- package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.ts +1 -1
- package/src/sap/fe/macros/filterBar/FilterBar.block.js +4 -3
- package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +19 -8
- package/src/sap/fe/macros/filterBar/FilterBarAPI.js +15 -9
- package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +36 -17
- package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +21 -10
- package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +81 -63
- package/src/sap/fe/macros/filterBar/UOMValidationDelegate.js +376 -0
- package/src/sap/fe/macros/filterBar/UOMValidationDelegate.ts +463 -0
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +4 -3
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +3 -2
- package/src/sap/fe/macros/form/Form.block.js +27 -2
- package/src/sap/fe/macros/form/Form.block.ts +31 -11
- package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -3
- package/src/sap/fe/macros/form/FormContainer.block.js +110 -63
- package/src/sap/fe/macros/form/FormContainer.block.ts +121 -64
- package/src/sap/fe/macros/formatters/TableFormatter.js +13 -10
- package/src/sap/fe/macros/formatters/TableFormatter.ts +11 -9
- package/src/sap/fe/macros/formatters/VisualFilterFormatter.js +6 -4
- package/src/sap/fe/macros/formatters/VisualFilterFormatter.ts +5 -5
- package/src/sap/fe/macros/inlineEdit/InlineEdit.js +5 -5
- package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +4 -4
- package/src/sap/fe/macros/insights/InsightsService.js +3 -2
- package/src/sap/fe/macros/insights/InsightsService.ts +2 -1
- package/src/sap/fe/macros/internal/DataPoint.js +7 -8
- package/src/sap/fe/macros/internal/DataPoint.tsx +6 -9
- package/src/sap/fe/macros/internal/field/DisplayStyle.js +8 -6
- package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +7 -8
- package/src/sap/fe/macros/internal/field/EditStyle.js +9 -20
- package/src/sap/fe/macros/internal/field/EditStyle.tsx +17 -41
- package/src/sap/fe/macros/internal/field/FieldBlockStructure.js +2 -2
- package/src/sap/fe/macros/internal/field/FieldBlockStructure.tsx +1 -1
- package/src/sap/fe/macros/internal/field/FieldStructure.js +1 -2
- package/src/sap/fe/macros/internal/field/FieldStructure.tsx +0 -2
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +7 -7
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +17 -11
- package/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +6 -2
- package/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +5 -1
- package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.js +9 -6
- package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.ts +7 -5
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +6 -6
- package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +5 -2
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +2 -2
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +2 -1
- package/src/sap/fe/macros/library.js +5 -6
- package/src/sap/fe/macros/{library.ts → library.tsx} +3 -1
- package/src/sap/fe/macros/mdc/adapter/StateHelper.js +15 -5
- package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +21 -5
- package/src/sap/fe/macros/messagebundle.properties +13 -5
- package/src/sap/fe/macros/messagebundle_ar.properties +12 -3
- package/src/sap/fe/macros/messagebundle_bg.properties +13 -4
- package/src/sap/fe/macros/messagebundle_ca.properties +12 -3
- package/src/sap/fe/macros/messagebundle_cnr.properties +12 -3
- package/src/sap/fe/macros/messagebundle_cs.properties +11 -2
- package/src/sap/fe/macros/messagebundle_cy.properties +12 -3
- package/src/sap/fe/macros/messagebundle_da.properties +12 -3
- package/src/sap/fe/macros/messagebundle_de.properties +16 -7
- package/src/sap/fe/macros/messagebundle_el.properties +13 -4
- package/src/sap/fe/macros/messagebundle_en.properties +13 -4
- package/src/sap/fe/macros/messagebundle_en_GB.properties +13 -4
- package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +13 -4
- package/src/sap/fe/macros/messagebundle_es.properties +12 -3
- package/src/sap/fe/macros/messagebundle_es_MX.properties +12 -3
- package/src/sap/fe/macros/messagebundle_et.properties +12 -3
- package/src/sap/fe/macros/messagebundle_fi.properties +12 -3
- package/src/sap/fe/macros/messagebundle_fr.properties +12 -3
- package/src/sap/fe/macros/messagebundle_fr_CA.properties +12 -3
- package/src/sap/fe/macros/messagebundle_hi.properties +12 -3
- package/src/sap/fe/macros/messagebundle_hr.properties +13 -4
- package/src/sap/fe/macros/messagebundle_hu.properties +12 -3
- package/src/sap/fe/macros/messagebundle_id.properties +18 -9
- package/src/sap/fe/macros/messagebundle_it.properties +12 -3
- package/src/sap/fe/macros/messagebundle_iw.properties +12 -3
- package/src/sap/fe/macros/messagebundle_ja.properties +12 -3
- package/src/sap/fe/macros/messagebundle_kk.properties +11 -2
- package/src/sap/fe/macros/messagebundle_ko.properties +13 -4
- package/src/sap/fe/macros/messagebundle_lt.properties +12 -3
- package/src/sap/fe/macros/messagebundle_lv.properties +12 -3
- package/src/sap/fe/macros/messagebundle_mk.properties +12 -3
- package/src/sap/fe/macros/messagebundle_ms.properties +12 -3
- package/src/sap/fe/macros/messagebundle_nl.properties +12 -3
- package/src/sap/fe/macros/messagebundle_no.properties +12 -3
- package/src/sap/fe/macros/messagebundle_pl.properties +12 -3
- package/src/sap/fe/macros/messagebundle_pt.properties +12 -3
- package/src/sap/fe/macros/messagebundle_pt_PT.properties +12 -3
- package/src/sap/fe/macros/messagebundle_ro.properties +13 -4
- package/src/sap/fe/macros/messagebundle_ru.properties +12 -3
- package/src/sap/fe/macros/messagebundle_sh.properties +12 -3
- package/src/sap/fe/macros/messagebundle_sk.properties +12 -3
- package/src/sap/fe/macros/messagebundle_sl.properties +13 -4
- package/src/sap/fe/macros/messagebundle_sr.properties +12 -3
- package/src/sap/fe/macros/messagebundle_sv.properties +12 -3
- package/src/sap/fe/macros/messagebundle_th.properties +11 -2
- package/src/sap/fe/macros/messagebundle_tr.properties +12 -3
- package/src/sap/fe/macros/messagebundle_uk.properties +12 -3
- package/src/sap/fe/macros/messagebundle_vi.properties +13 -4
- package/src/sap/fe/macros/messagebundle_zh_CN.properties +12 -3
- package/src/sap/fe/macros/messagebundle_zh_TW.properties +12 -3
- package/src/sap/fe/macros/messages/MessageButton.js +21 -12
- package/src/sap/fe/macros/messages/MessageButton.ts +21 -11
- package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.js +7 -3
- package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.ts +8 -2
- package/src/sap/fe/macros/quickView/QuickView.js +5 -4
- package/src/sap/fe/macros/quickView/QuickView.tsx +10 -3
- package/src/sap/fe/macros/richtexteditor/ButtonGroup.js +2 -2
- package/src/sap/fe/macros/richtexteditor/ButtonGroup.ts +2 -2
- package/src/sap/fe/macros/table/Action.js +21 -5
- package/src/sap/fe/macros/table/Action.ts +14 -4
- package/src/sap/fe/macros/table/ActionGroup.js +15 -2
- package/src/sap/fe/macros/table/ActionGroup.ts +8 -0
- package/src/sap/fe/macros/table/ActionGroupOverride.js +14 -2
- package/src/sap/fe/macros/table/ActionGroupOverride.ts +7 -0
- package/src/sap/fe/macros/table/ActionOverride.js +14 -2
- package/src/sap/fe/macros/table/ActionOverride.ts +7 -0
- package/src/sap/fe/macros/table/ActionsTemplating.js +16 -2
- package/src/sap/fe/macros/table/ActionsTemplating.tsx +15 -0
- package/src/sap/fe/macros/table/Column.js +3 -2
- package/src/sap/fe/macros/table/Column.ts +1 -1
- package/src/sap/fe/macros/table/MdcTableTemplate.js +96 -18
- package/src/sap/fe/macros/table/MdcTableTemplate.tsx +136 -17
- package/src/sap/fe/macros/table/OverflowGroups.js +59 -0
- package/src/sap/fe/macros/table/OverflowGroups.ts +27 -0
- package/src/sap/fe/macros/table/Table.block.js +74 -30
- package/src/sap/fe/macros/table/Table.block.tsx +77 -14
- package/src/sap/fe/macros/table/TableAPI.js +175 -132
- package/src/sap/fe/macros/table/TableAPI.ts +67 -30
- package/src/sap/fe/macros/table/TableDefinition.js +20 -3
- package/src/sap/fe/macros/table/TableDefinition.ts +18 -2
- package/src/sap/fe/macros/table/TableEventHandlerProvider.js +6 -3
- package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +12 -9
- package/src/sap/fe/macros/table/TableHelper.js +5 -2
- package/src/sap/fe/macros/table/TableHelper.ts +5 -2
- package/src/sap/fe/macros/table/TableRuntime.js +25 -13
- package/src/sap/fe/macros/table/TableRuntime.ts +31 -17
- package/src/sap/fe/macros/table/TableSizeHelper.js +4 -4
- package/src/sap/fe/macros/table/TableSizeHelper.ts +6 -11
- package/src/sap/fe/macros/table/Utils.js +9 -3
- package/src/sap/fe/macros/table/Utils.ts +14 -8
- package/src/sap/fe/macros/table/delegates/TableDelegate.js +72 -29
- package/src/sap/fe/macros/table/delegates/TableDelegate.ts +114 -123
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +41 -15
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +41 -22
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +15 -6
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +14 -5
- package/src/sap/fe/macros/table/massEdit/MassEditField.js +1 -1
- package/src/sap/fe/macros/table/massEdit/MassEditField.tsx +3 -6
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -3
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +3 -2
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +42 -14
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +49 -19
- package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +7 -9
- package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +7 -8
- package/src/sap/fe/macros/table/mixin/TableExport.js +1 -1
- package/src/sap/fe/macros/table/mixin/TableExport.ts +3 -3
- package/src/sap/fe/macros/table/mixin/TableHierarchy.js +3 -4
- package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +2 -3
- package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.js +5 -4
- package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.ts +6 -3
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +17 -10
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +24 -9
- package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.js +4 -4
- package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.ts +3 -3
- package/src/sap/fe/macros/visualfilters/VisualFilter.js +20 -2
- package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +28 -6
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +6 -3
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +4 -3
- package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.js +3 -3
- package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.tsx +10 -4
- package/src/sap/fe/macros/visualfilters/fragments/InteractiveDonutChart.fragment.xml +1 -1
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2025 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport", "sap/fe/base/HookSupport", "sap/fe/core/CommonUtils", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers/PromiseKeeper", "sap/fe/core/library", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/macros/MacroAPI", "sap/fe/macros/filter/FilterUtils", "sap/fe/macros/filterBar/SemanticDateOperators", "sap/fe/macros/mdc/adapter/StateHelper", "sap/fe/navigation/SelectionVariant", "sap/fe/navigation/library", "sap/ui/core/Element", "sap/ui/fl/apply/api/ControlVariantApplyAPI", "sap/ui/mdc/enums/FieldEditMode", "sap/ui/mdc/p13n/StateUtil", "sap/ui/thirdparty/jquery", "./mixin/FilterBarAPIStateHandler"], function (Log, merge, ClassSupport, HookSupport, CommonUtils, MetaModelConverter, PromiseKeeper, library, DataModelPathHelper, MacroAPI, FilterUtils, SemanticDateOperators, stateHelper, SelectionVariant, navigationLibrary, UI5Element, ControlVariantApplyAPI, FieldEditMode, StateUtil, jQuery, FilterBarAPIStateHandler) {
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport", "sap/fe/base/HookSupport", "sap/fe/core/CommonUtils", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers/PromiseKeeper", "sap/fe/core/library", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/macros/MacroAPI", "sap/fe/macros/filter/FilterUtils", "sap/fe/macros/filterBar/SemanticDateOperators", "sap/fe/macros/mdc/adapter/StateHelper", "sap/fe/navigation/SelectionVariant", "sap/fe/navigation/library", "sap/ui/core/Element", "sap/ui/fl/apply/api/ControlVariantApplyAPI", "sap/ui/mdc/enums/FieldEditMode", "sap/ui/mdc/p13n/StateUtil", "sap/ui/thirdparty/jquery", "./UOMValidationDelegate", "./mixin/FilterBarAPIStateHandler"], function (Log, merge, ClassSupport, HookSupport, CommonUtils, MetaModelConverter, PromiseKeeper, library, DataModelPathHelper, MacroAPI, FilterUtils, SemanticDateOperators, stateHelper, SelectionVariant, navigationLibrary, UI5Element, ControlVariantApplyAPI, FieldEditMode, StateUtil, jQuery, UOMValidationDelegate, FilterBarAPIStateHandler) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _dec17, _dec18, _dec19, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor10, _descriptor11, _descriptor12, _descriptor13;
|
|
@@ -179,7 +179,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
179
179
|
*/
|
|
180
180
|
_initializerDefineProperty(_this, "search", _descriptor9, _this);
|
|
181
181
|
/**
|
|
182
|
-
* This event is fired when the 'Go' button is pressed or after a condition change. This is only internally
|
|
182
|
+
* This event is fired when the 'Go' button is pressed or after a condition change. This is only used internally by sap.fe (SAP Fiori elements) and
|
|
183
183
|
* exposes parameters from internal MDC-FilterBar search event
|
|
184
184
|
* @private
|
|
185
185
|
*/
|
|
@@ -196,7 +196,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
196
196
|
_initializerDefineProperty(_this, "afterClear", _descriptor12, _this);
|
|
197
197
|
/**
|
|
198
198
|
* This event is fired after either a filter value or the visibility of a filter item has been changed. The event contains conditions that will be used as filters.
|
|
199
|
-
* This is used internally
|
|
199
|
+
* This is only used internally by sap.fe (SAP Fiori elements). This exposes parameters from the MDC-FilterBar filterChanged event that is used by sap.fe.
|
|
200
200
|
* @private
|
|
201
201
|
*/
|
|
202
202
|
_initializerDefineProperty(_this, "internalFilterChanged", _descriptor13, _this);
|
|
@@ -308,7 +308,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
308
308
|
if (filterVariantApplied || useFLPDefaultValues) {
|
|
309
309
|
svToSet = await this._getAdjustedSV(sv, useFLPDefaultValues);
|
|
310
310
|
}
|
|
311
|
-
return filterBarAPI.setSelectionVariant(svToSet, true);
|
|
311
|
+
return filterBarAPI.setSelectionVariant(svToSet, true, true);
|
|
312
312
|
}
|
|
313
313
|
};
|
|
314
314
|
_proto2._enableFilterBar = function _enableFilterBar(filterBarControl, preventInitialSearch) {
|
|
@@ -595,6 +595,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
595
595
|
}
|
|
596
596
|
};
|
|
597
597
|
_proto2.handleSearch = function handleSearch(oEvent) {
|
|
598
|
+
this.getPageController()?.inlineEditFlow?.inlineEditDiscard();
|
|
598
599
|
const oFilterBar = oEvent.getSource();
|
|
599
600
|
const eventParameters = oEvent.getParameters();
|
|
600
601
|
if (oFilterBar) {
|
|
@@ -613,10 +614,13 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
613
614
|
}
|
|
614
615
|
}
|
|
615
616
|
};
|
|
616
|
-
_proto2.handleFilterChanged = function handleFilterChanged(oEvent) {
|
|
617
|
+
_proto2.handleFilterChanged = async function handleFilterChanged(oEvent) {
|
|
617
618
|
const filterBar = oEvent.getSource();
|
|
618
619
|
const oEventParameters = oEvent.getParameters();
|
|
619
620
|
if (filterBar) {
|
|
621
|
+
if (!filterBar.getLiveMode()) {
|
|
622
|
+
await UOMValidationDelegate.validateAllUOMFields(filterBar, "filterChange");
|
|
623
|
+
}
|
|
620
624
|
const oConditions = filterBar.getFilterConditions();
|
|
621
625
|
const eventParameters = this._prepareEventParameters(filterBar);
|
|
622
626
|
this.telemetry?.onFiltersChanged(this._getFilterBarReason(filterBar));
|
|
@@ -846,7 +850,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
846
850
|
* @public
|
|
847
851
|
*/;
|
|
848
852
|
_proto2.setFilterFieldEnabled = function setFilterFieldEnabled(name, enabled) {
|
|
849
|
-
this.
|
|
853
|
+
this.getInternalModel()?.setData({
|
|
850
854
|
[this.content.data("localId")]: {
|
|
851
855
|
filterFields: {
|
|
852
856
|
[name]: {
|
|
@@ -864,7 +868,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
864
868
|
* @public
|
|
865
869
|
*/;
|
|
866
870
|
_proto2.getFilterFieldEnabled = function getFilterFieldEnabled(name) {
|
|
867
|
-
return this.
|
|
871
|
+
return this.getInternalModel()?.getProperty(`/${this.content.data("localId")}/filterFields/${name}/editMode`) === FieldEditMode.Disabled ? false : true;
|
|
868
872
|
}
|
|
869
873
|
|
|
870
874
|
/**
|
|
@@ -892,11 +896,13 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
892
896
|
* Note: This method cannot set the search field text or any filter field condition that relies on a custom operator.
|
|
893
897
|
* @param selectionVariant The {@link sap.fe.navigation.SelectionVariant} to apply to the filter bar
|
|
894
898
|
* @param prefillDescriptions Optional. If true, we will use the associated text property values (if they're available in the selectionVariant) to display the filter value descriptions, instead of loading them from the backend
|
|
899
|
+
* @param fromNavigationParameters PRIVATE
|
|
895
900
|
* @returns A promise for asynchronous handling
|
|
896
901
|
* @public
|
|
897
902
|
*/;
|
|
898
903
|
_proto2.setSelectionVariant = async function setSelectionVariant(selectionVariant) {
|
|
899
904
|
let prefillDescriptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
905
|
+
let fromNavigationParameters = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
900
906
|
const content = this.getContent();
|
|
901
907
|
const isLiveMode = content && content?.getLiveMode?.();
|
|
902
908
|
let result;
|
|
@@ -904,7 +910,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
904
910
|
content.enableRequests(false);
|
|
905
911
|
}
|
|
906
912
|
try {
|
|
907
|
-
result = await stateHelper.setSelectionVariantToMdcControl(this.getContent(), selectionVariant, prefillDescriptions);
|
|
913
|
+
result = await stateHelper.setSelectionVariantToMdcControl(this.getContent(), selectionVariant, prefillDescriptions, fromNavigationParameters);
|
|
908
914
|
return result?.applyStateResult;
|
|
909
915
|
} catch (err) {
|
|
910
916
|
const message = err instanceof Error ? err.message : String(err);
|
|
@@ -1036,4 +1042,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
1036
1042
|
}), _applyDecoratedDescriptor(_class2.prototype, "handleSearch", [_dec18], Object.getOwnPropertyDescriptor(_class2.prototype, "handleSearch"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "handleFilterChanged", [_dec19], Object.getOwnPropertyDescriptor(_class2.prototype, "handleFilterChanged"), _class2.prototype), _class2)) || _class) || _class);
|
|
1037
1043
|
return FilterBarAPI;
|
|
1038
1044
|
}, false);
|
|
1039
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWx0ZXJCYXJUZWxlbWV0cnkiLCJmaWx0ZXJCYXJBUEkiLCJjb3VudEZpbHRlckFjdGlvbnMiLCJjb3VudFZhcmlhbnRGaWx0ZXJzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwib25GaWx0ZXJzQ2hhbmdlZCIsInJlYXNvbiIsIm9uU2VhcmNoIiwiZXZlbnRQYXJhbWV0ZXJzIiwiY29uZGl0aW9ucyIsImZpbHRlck5hbWVzIiwiZ2V0RmlsdGVyTmFtZXNGcm9tQ29uZGl0aW9ucyIsImdldFBhZ2VDb250cm9sbGVyIiwidGVsZW1ldHJ5Iiwic3RvcmVBY3Rpb24iLCJ0eXBlIiwicGFyYW1ldGVycyIsImNvdW50RmlsdGVycyIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJ2YXJpYW50TGF5ZXIiLCJnZXRWYXJpYW50IiwibGF5ZXIiLCJhdXRvTG9hZCIsInNlYXJjaFVzZWQiLCIkc2VhcmNoIiwiZm9yRWFjaCIsImNvbmRpdGlvbiIsIlZhcmlhbnRNYW5hZ2VtZW50VHlwZSIsIkRJU1BMQVlfQ1VSUkVOQ1lfUFJPUEVSVFlfTkFNRSIsIlBfRElTUExBWV9DVVJSRU5DWV9QUk9QRVJUWV9OQU1FIiwiRmlsdGVyQmFyQVBJIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwicmV0dXJuVHlwZXMiLCJfZGVjMiIsIm1peGluIiwiRmlsdGVyQmFyQVBJU3RhdGVIYW5kbGVyIiwiX2RlYzMiLCJjb250cm9sbGVyRXh0ZW5zaW9uSGFuZGxlciIsIl9kZWM0IiwiX2RlYzUiLCJwcm9wZXJ0eSIsIl9kZWM2IiwiZXhwZWN0ZWRBbm5vdGF0aW9ucyIsImV4cGVjdGVkVHlwZXMiLCJfZGVjNyIsIl9kZWM4IiwiZGVmYXVsdFZhbHVlIiwiX2RlYzkiLCJfZGVjMTAiLCJfZGVjMTEiLCJfZGVjMTIiLCJhZ2dyZWdhdGlvbiIsIm11bHRpcGxlIiwiX2RlYzEzIiwiZXZlbnQiLCJfZGVjMTQiLCJfZGVjMTUiLCJfZGVjMTYiLCJfZGVjMTciLCJfZGVjMTgiLCJ4bWxFdmVudEhhbmRsZXIiLCJfZGVjMTkiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX01hY3JvQVBJIiwicHJvcHMiLCJvdGhlcnMiLCJfdGhpcyIsImNhbGwiLCJpbml0aWFsQ29udHJvbFN0YXRlIiwiX2luaXRpYWxTdGF0ZVByb21pc2UiLCJQcm9taXNlS2VlcGVyIiwiX2JTZWFyY2hUcmlnZ2VyZWQiLCJfaGFzUGVuZGluZ0ZpbHRlcnMiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiX2Rlc2NyaXB0b3I3IiwiX2Rlc2NyaXB0b3I4IiwiX2Rlc2NyaXB0b3I5IiwiX2Rlc2NyaXB0b3IxMCIsIl9kZXNjcmlwdG9yMTEiLCJfZGVzY3JpcHRvcjEyIiwiX2Rlc2NyaXB0b3IxMyIsImF0dGFjaFN0YXRlQ2hhbmdlSGFuZGxlciIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvMiIsInJldHJpZXZlQWRkaXRpb25hbFN0YXRlcyIsImFkZGl0aW9uYWxTdGF0ZXMiLCJnZXRJZCIsImRhdGFMb2FkZWQiLCJhcHBseUFkZGl0aW9uYWxTdGF0ZXMiLCJpbnN0YW5jZVN0YXRlIiwiaW5zdGFuY2VEYXRhTG9hZGVkIiwidW5kZWZpbmVkIiwicGFyZW50RGF0YUxvYWRlZCIsInRyaWdnZXJTZWFyY2giLCJjb250ZW50Iiwid2FpdEZvckluaXRpYWxTdGF0ZSIsInByb21pc2UiLCJnZXRDb250cm9sU3RhdGUiLCJjb250cm9sU3RhdGUiLCJmdWxsU3RhdGUiLCJpbml0aWFsU3RhdGUiLCJpc1NlYXJjaFRyaWdnZXJlZEJ5SW5pdGlhbExvYWQiLCJuYXZpZ2F0aW9uVHlwZSIsImNvbnRyb2xsZXIiLCJ2aWV3IiwiZ2V0VmlldyIsInZpZXdEYXRhIiwiZ2V0Vmlld0RhdGEiLCJ2YXJpYW50TWFuYWdlbWVudCIsIkNvbnRyb2wiLCJfZ2V0RmlsdGVyQmFyVmFyaWFudENvbnRyb2wiLCJieUlkIiwiY3VycmVudFZhcmlhbnRLZXkiLCJnZXRDdXJyZW50VmFyaWFudEtleSIsIk5hdlR5cGUiLCJ4QXBwU3RhdGUiLCJpbml0aWFsTG9hZCIsIkluaXRpYWxMb2FkTW9kZSIsIkVuYWJsZWQiLCJfc2hvdWxkQXV0b1RyaWdnZXJTZWFyY2giLCJfZ2V0RmlsdGVyQmFyVk0iLCJfZ2V0QXBwbHlBdXRvbWF0aWNhbGx5T25WYXJpYW50IiwiX2FwcGx5U2VsZWN0aW9uVmFyaWFudCIsIm5hdmlnYXRpb25QYXJhbWV0ZXIiLCJmaWx0ZXJWYXJpYW50QXBwbGllZCIsImZpbHRlckJhciIsImdldENvbnRlbnQiLCJzZWxlY3Rpb25WYXJpYW50Iiwic3YiLCJzZWxlY3Rpb25WYXJpYW50RGVmYXVsdHMiLCJzdkRlZmF1bHRzIiwicmVxdWlyZXNTdGFuZGFyZFZhcmlhbnQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInNob3VsZEFwcGx5QXBwU3RhdGUiLCJfYWN0aXZhdGVWYXJpYW50QW5kRGV0ZXJtaW5lQXBwbHlBcHBTdGF0ZSIsIl9hZGREZWZhdWx0RGlzcGxheUN1cnJlbmN5VG9TViIsInN2RGVmYXVsdHNBcmVQcmVzZW50IiwiZ2V0U2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMiLCJzdGRWYXJpYW50SXNEZWZhdWx0VmFyaWFudCIsImdldERlZmF1bHRWYXJpYW50S2V5IiwiZ2V0U3RhbmRhcmRWYXJpYW50S2V5IiwidXNlRkxQRGVmYXVsdFZhbHVlcyIsImdldFBhcmVudCIsInN2VG9TZXQiLCJfZ2V0QWRqdXN0ZWRTViIsInNldFNlbGVjdGlvblZhcmlhbnQiLCJfZW5hYmxlRmlsdGVyQmFyIiwiZmlsdGVyQmFyQ29udHJvbCIsInByZXZlbnRJbml0aWFsU2VhcmNoIiwiZm5PblNlYXJjaCIsImdldFN1c3BlbmRTZWxlY3Rpb24iLCJhdHRhY2hFdmVudE9uY2UiLCJlbmFibGVSZXF1ZXN0cyIsImFwcFN0YXRlU1YiLCJhZGp1c3RlZFNWIiwiU2VsZWN0aW9uVmFyaWFudCIsInRvSlNPTk9iamVjdCIsImFscmVhZHlBcHBsaWVkU1YiLCJnZXRTZWxlY3Rpb25WYXJpYW50IiwiYXBwbGllZFNlbE9wdE5hbWVzIiwicmVkdWNlIiwic3ZDb3B5Iiwic2VsT3B0aW9uTmFtZSIsInN2U2VsT3B0cyIsImdldFNlbGVjdE9wdGlvbiIsInNlbGVjdE9wdGlvbnMiLCJtYXNzQWRkU2VsZWN0T3B0aW9uIiwiX3ByZXZlbnRJbml0aWFsU2VhcmNoIiwiYVZhcmlhbnRzIiwiZ2V0VmFyaWFudHMiLCJvQ3VycmVudFZhcmlhbnQiLCJmaW5kIiwiaXRlbSIsImdldEtleSIsImV4ZWN1dGVPblNlbGVjdCIsImlzRW1wdHkiLCJtZXRhTW9kZWwiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsImNvbnRleHRQYXRoIiwiZW50aXR5U2V0IiwibWV0YUNvbnRleHQiLCJnZXRNZXRhQ29udGV4dCIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJkaXNwbGF5Q3VycmVuY3lQcm9wZXJ0eU5hbWUiLCJnZXREaXNwbGF5Q3VycmVuY3lQcm9wZXJ0eU5hbWUiLCJkaXNwbGF5Q3VycmVuY3lJc01hbmRhdG9yeSIsIl9jaGVja0lmRGlzcGxheUN1cnJlbmN5SXNSZXF1aXJlZCIsInN2T3B0aW9ucyIsImRlZmF1bHRTVk9wdGlvbnMiLCJkaXNwbGF5Q3VycmVuY3lEZWZhdWx0RXhpc3RzIiwibm9TVkRpc3BsYXlDdXJyZW5jeUV4aXN0cyIsImRpc3BsYXlDdXJyZW5jeVNlbGVjdE9wdGlvbiIsInNpZ24iLCJvcHRpb24iLCJsb3ciLCJoaWdoIiwiYWRkU2VsZWN0T3B0aW9uIiwiaXNQYXJhbWV0ZXJpemVkIiwic3RhcnRpbmdFbnRpdHlTZXQiLCJlbnRpdHlUeXBlIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJSZXN1bHRDb250ZXh0IiwiZW50aXR5UHJvcGVydGllcyIsInNvbWUiLCJwYXJhbWV0ZXIiLCJuYW1lIiwiX3R5cGUiLCJyZXF1aXJlZFByb3BlcnRpZXMiLCJDYXBhYmlsaXRpZXMiLCJGaWx0ZXJSZXN0cmljdGlvbnMiLCJSZXF1aXJlZFByb3BlcnRpZXMiLCJyZXF1aXJlZFByb3BlcnR5IiwidmFsdWUiLCJyZXFTdGRWYXJpYW50IiwidmFyaWFudEtleSIsIkNvbnRyb2xWYXJpYW50QXBwbHlBUEkiLCJhY3RpdmF0ZVZhcmlhbnQiLCJlbGVtZW50IiwidmFyaWFudFJlZmVyZW5jZSIsIlBhZ2UiLCJnZXRDb250cm9sbGVyIiwiTm9uZSIsImhhbmRsZVZhcmlhbnRJZFBhc3NlZFZpYVVSTFBhcmFtcyIsIm9VcmxQYXJhbXMiLCJhUGFnZVZhcmlhbnRJZCIsImFGaWx0ZXJCYXJWYXJpYW50SWQiLCJhVGFibGVWYXJpYW50SWQiLCJhQ2hhcnRWYXJpYW50SWQiLCJvVmFyaWFudElEcyIsInNQYWdlVmFyaWFudElkIiwic0ZpbHRlckJhclZhcmlhbnRJZCIsInNUYWJsZVZhcmlhbnRJZCIsInNDaGFydFZhcmlhbnRJZCIsIl9oYW5kbGVDb250cm9sVmFyaWFudElkIiwib1ZNIiwib1ZpZXciLCJhUHJvbWlzZXMiLCJzVmFyaWFudE1hbmFnZW1lbnQiLCJfaGFuZGxlUGFnZVZhcmlhbnRJZCIsIl9oYW5kbGVGaWx0ZXJCYXJWYXJpYW50Q29udHJvbElkIiwiYWxsIiwib1ZhcmlhbnQiLCJfZmluZEFuZFB1c2hWYXJpYW50VG9Qcm9taXNlIiwic1ZhcmlhbnRJZCIsImJGaWx0ZXJWYXJpYW50QXBwbGllZCIsImtleSIsInB1c2giLCJfYXBwbHlDb250cm9sVmFyaWFudCIsInNWYXJpYW50SUQiLCJhcmd1bWVudHMiLCJzVmFyaWFudFJlZmVyZW5jZSIsIl9jaGVja0lmVmFyaWFudElkSXNBdmFpbGFibGUiLCJ0aGVuIiwiYklzQ29udHJvbFN0YXRlVmFyaWFudEF2YWlsYWJsZSIsIlN0YXRlVXRpbCIsImRldGFjaFN0YXRlQ2hhbmdlIiwic3RhdGVDaGFuZ2VIYW5kbGVyIiwiYXR0YWNoU3RhdGVDaGFuZ2UiLCJvRXZlbnQiLCJjb250cm9sIiwiZ2V0UGFyYW1ldGVyIiwiaXNBIiwiaGFuZGxlU3RhdGVDaGFuZ2UiLCJoYW5kbGVTZWFyY2giLCJvRmlsdGVyQmFyIiwiZ2V0U291cmNlIiwiZ2V0UGFyYW1ldGVycyIsImdldEZpbHRlckNvbmRpdGlvbnMiLCJwcmVwYXJlZEV2ZW50UGFyYW1ldGVycyIsIl9wcmVwYXJlRXZlbnRQYXJhbWV0ZXJzIiwiZmlyZUV2ZW50IiwibWVyZ2UiLCJsaXZlTW9kZSIsImdldEV4dGVuc2lvbkFQSSIsInVwZGF0ZUFwcFN0YXRlIiwiaGFuZGxlRmlsdGVyQ2hhbmdlZCIsIm9FdmVudFBhcmFtZXRlcnMiLCJvQ29uZGl0aW9ucyIsIl9nZXRGaWx0ZXJCYXJSZWFzb24iLCJjb25kaXRpb25zQmFzZWQiLCJfc1JlYXNvbiIsImZpbHRlcnMiLCJzZWFyY2giLCJGaWx0ZXJVdGlscyIsImdldEZpbHRlcnMiLCJzZXRGaWx0ZXJWYWx1ZXMiLCJzQ29uZGl0aW9uUGF0aCIsInNPcGVyYXRvciIsInZWYWx1ZXMiLCJnZXRBY3RpdmVGaWx0ZXJzVGV4dCIsImdldEFzc2lnbmVkRmlsdGVyc1RleHQiLCJmaWx0ZXJzVGV4dCIsIndhaXRGb3JJbml0aWFsaXphdGlvbiIsImVyciIsIm1lc3NhZ2UiLCJFcnJvciIsIlN0cmluZyIsIkxvZyIsImVycm9yIiwiaXNTZW1hbnRpY0RhdGVGaWx0ZXJBcHBsaWVkIiwiU2VtYW50aWNEYXRlT3BlcmF0b3JzIiwiaGFzU2VtYW50aWNEYXRlT3BlcmF0aW9ucyIsImdldENvbmRpdGlvbnMiLCJzdGF0ZUhlbHBlciIsImFwcENvbXBvbmVudCIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50IiwibmF2aWdhdGlvblNlcnZpY2UiLCJnZXROYXZpZ2F0aW9uU2VydmljZSIsImRhdGFNb2RlbE9iamVjdCIsImdldERhdGFNb2RlbE9iamVjdEZvck1ldGFQYXRoIiwibWV0YVBhdGgiLCJ0YXJnZXRFbnRpdHlTZXQiLCJzQ29udGV4dFVybCIsImNvbnN0cnVjdENvbnRleHRVcmwiLCJzZXRGaWx0ZXJDb250ZXh0VXJsIiwiZ2V0TWFuZGF0b3J5RmlsdGVyUHJvcGVydHlOYW1lcyIsImdldFByb3BlcnR5SW5mb1NldCIsImZpbHRlciIsImZpbHRlclByb3AiLCJyZXF1aXJlZCIsIm1hcCIsInJlcXVpcmVkUHJvcCIsImNvbmRpdGlvblBhdGgiLCJkYXRhIiwiQXJyYXkiLCJpc0FycmF5IiwiSlNPTiIsInBhcnNlIiwiY3VycmVudFZhcmlhbnQiLCJ2YXJpYW50TW9kZWwiLCJ2YXJpYW50QmFja1JlZmVyZW5jZSIsImdldFZhcmlhbnRCYWNrcmVmZXJlbmNlIiwiZ2V0Q3VycmVudFZhcmlhbnRSZWZlcmVuY2UiLCJlIiwiZGVidWciLCJzZXRGaWx0ZXJGaWVsZFZpc2libGUiLCJ2aXNpYmxlIiwiYXBwbHlFeHRlcm5hbFN0YXRlIiwiaXRlbXMiLCJnZXRGaWx0ZXJGaWVsZFZpc2libGUiLCJzdGF0ZSIsInJldHJpZXZlRXh0ZXJuYWxTdGF0ZSIsImdldFZhcmlhbnRNYW5hZ2VtZW50IiwidmFyaWFudEJhY2tyZWZlcmVuY2UiLCJVSTVFbGVtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJpZCIsInNldFZhcmlhbnRCYWNrUmVmZXJlbmNlIiwidmFyaWFudCIsImlzTGl2ZU1vZGUiLCJnZXRMaXZlTW9kZSIsInNldFZhcmlhbnRCYWNrcmVmZXJlbmNlIiwic2V0Q3VycmVudFZhcmlhbnRLZXkiLCJzZXRGaWx0ZXJGaWVsZEVuYWJsZWQiLCJlbmFibGVkIiwic2V0RGF0YSIsImZpbHRlckZpZWxkcyIsImVkaXRNb2RlIiwiRmllbGRFZGl0TW9kZSIsIkVkaXRhYmxlIiwiRGlzYWJsZWQiLCJnZXRGaWx0ZXJGaWVsZEVuYWJsZWQiLCJnZXRQcm9wZXJ0eSIsImNvbnZlcnRTZWxlY3Rpb25WYXJpYW50VG9TdGF0ZUZpbHRlcnMiLCJwcmVmaWxsRGVzY3JpcHRpb25zIiwiX2NsZWFyRmlsdGVyVmFsdWVzV2l0aE9wdGlvbnMiLCJvcHRpb25zIiwicmVzdWx0Iiwic2V0U2VsZWN0aW9uVmFyaWFudFRvTWRjQ29udHJvbCIsImFwcGx5U3RhdGVSZXN1bHQiLCJkaWZmU3RhdGUiLCJnZXRDb25kaXRpb25QYXRoIiwicHJvcGVydHlQYXRoIiwicHJvcGVydHlUYXJnZXRPYmplY3RQYXRoIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclByb3BlcnR5IiwiZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCIsInNob3dGaWx0ZXJGaWVsZCIsInRhcmdldEZpbHRlckZpZWxkIiwib3BlblZhbHVlSGVscEZvckZpbHRlckZpZWxkIiwiaW5wdXRWYWx1ZSIsInJlamVjdCIsImZpbHRlckZpZWxkIiwiZ2V0RmlsdGVySXRlbXMiLCJnZXRQcm9wZXJ0eUtleSIsInZhbHVlSGVscCIsImdldFZhbHVlSGVscCIsIl9vRm9jdXNJbmZvIiwidGFyZ2V0SW5mbyIsInNpbGVudCIsIm9uZm9jdXNpbiIsImpRdWVyeSIsIkV2ZW50Iiwic2V0VGltZW91dCIsImdldEFnZ3JlZ2F0aW9uIiwiZmlyZVZhbHVlSGVscFJlcXVlc3QiLCJmcm9tS2V5Ym9hcmQiLCJfdXNlcklucHV0VmFsdWUiLCJnZXRDb2xsYXBzZWRGaWx0ZXJzVGV4dCIsIk1hY3JvQVBJIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGaWx0ZXJCYXJBUEkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXQsIFByb3BlcnR5LCBQcm9wZXJ0eVBhdGggfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IG1lcmdlIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnRpZXNPZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IGFnZ3JlZ2F0aW9uLCBkZWZpbmVVSTVDbGFzcywgZXZlbnQsIG1peGluLCBwcm9wZXJ0eSwgeG1sRXZlbnRIYW5kbGVyIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgY29udHJvbGxlckV4dGVuc2lvbkhhbmRsZXIgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvSG9va1N1cHBvcnRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgQ29udHJvbFN0YXRlLCBMZWdhY3lGaWx0ZXJCYXJTdGF0ZSwgTmF2aWdhdGlvblBhcmFtZXRlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9WaWV3U3RhdGVcIjtcbmltcG9ydCB7IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IFByb21pc2VLZWVwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUHJvbWlzZUtlZXBlclwiO1xuaW1wb3J0IHsgSW5pdGlhbExvYWRNb2RlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgTWFjcm9BUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvTWFjcm9BUElcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jb250cm9scy9GaWx0ZXJCYXJcIjtcbmltcG9ydCB0eXBlIHsgSUZpbHRlckNvbnRyb2wgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXIvRmlsdGVyVXRpbHNcIjtcbmltcG9ydCBGaWx0ZXJVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXIvRmlsdGVyVXRpbHNcIjtcbmltcG9ydCB0eXBlIEZpbHRlckZpZWxkIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlckJhci9GaWx0ZXJGaWVsZFwiO1xuaW1wb3J0IFNlbWFudGljRGF0ZU9wZXJhdG9ycyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXJCYXIvU2VtYW50aWNEYXRlT3BlcmF0b3JzXCI7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2xQcm9wZXJ0eUluZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9tZGMvYWRhcHRlci9TdGF0ZUhlbHBlclwiO1xuaW1wb3J0IHN0YXRlSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL21kYy9hZGFwdGVyL1N0YXRlSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsQmluZGluZ0luZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9VdGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBFeHRlcm5hbFN0YXRlVHlwZSB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL3ZhbHVlaGVscC9WYWx1ZUhlbHBEZWxlZ2F0ZVwiO1xuaW1wb3J0IFNlbGVjdGlvblZhcmlhbnQgZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uL1NlbGVjdGlvblZhcmlhbnRcIjtcbmltcG9ydCB7IE5hdlR5cGUgfSBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIExpc3RSZXBvcnRDb250cm9sbGVyIH0gZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvTGlzdFJlcG9ydC9MaXN0UmVwb3J0Q29udHJvbGxlci5jb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBJbnB1dCBmcm9tIFwic2FwL20vSW5wdXRcIjtcbmltcG9ydCB0eXBlIHsgSW5wdXQkVmFsdWVIZWxwUmVxdWVzdEV2ZW50UGFyYW1ldGVycyB9IGZyb20gXCJzYXAvbS9JbnB1dFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIEV2ZW50IH0gZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSB7ICRDb250cm9sU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgQ29udHJvbFZhcmlhbnRBcHBseUFQSSBmcm9tIFwic2FwL3VpL2ZsL2FwcGx5L2FwaS9Db250cm9sVmFyaWFudEFwcGx5QVBJXCI7XG5pbXBvcnQgdHlwZSBWYXJpYW50TWFuYWdlbWVudCBmcm9tIFwic2FwL3VpL2ZsL3ZhcmlhbnRzL1ZhcmlhbnRNYW5hZ2VtZW50XCI7XG5pbXBvcnQgdHlwZSBWYXJpYW50TW9kZWwgZnJvbSBcInNhcC91aS9mbC92YXJpYW50cy9WYXJpYW50TW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgVmFyaWFudERhdGEgfSBmcm9tIFwic2FwL3VpL2ZsL3ZhcmlhbnRzL1ZhcmlhbnRNb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL21kYy9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBWYWx1ZUhlbHAgZnJvbSBcInNhcC91aS9tZGMvVmFsdWVIZWxwXCI7XG5pbXBvcnQgdHlwZSB7IENvbmRpdGlvbk9iamVjdCB9IGZyb20gXCJzYXAvdWkvbWRjL2NvbmRpdGlvbi9Db25kaXRpb25cIjtcbmltcG9ydCBGaWVsZEVkaXRNb2RlIGZyb20gXCJzYXAvdWkvbWRjL2VudW1zL0ZpZWxkRWRpdE1vZGVcIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyQmFyQmFzZSRGaWx0ZXJzQ2hhbmdlZEV2ZW50LCBGaWx0ZXJCYXJCYXNlJFNlYXJjaEV2ZW50IH0gZnJvbSBcInNhcC91aS9tZGMvZmlsdGVyYmFyL0ZpbHRlckJhckJhc2VcIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyIGFzIFN0YXRlVXRpbEZpbHRlciB9IGZyb20gXCJzYXAvdWkvbWRjL3AxM24vU3RhdGVVdGlsXCI7XG5pbXBvcnQgU3RhdGVVdGlsIGZyb20gXCJzYXAvdWkvbWRjL3AxM24vU3RhdGVVdGlsXCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE1ldGFNb2RlbCwgZGVmYXVsdCBhcyBPRGF0YU1ldGFNb2RlbCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBqUXVlcnkgZnJvbSBcInNhcC91aS90aGlyZHBhcnR5L2pxdWVyeVwiO1xuaW1wb3J0IEZpbHRlckJhckFQSVN0YXRlSGFuZGxlciBmcm9tIFwiLi9taXhpbi9GaWx0ZXJCYXJBUElTdGF0ZUhhbmRsZXJcIjtcblxuLy8gVHJhY2sgdGVsZW1ldHJ5IGNvbnRlbnQgZm9yIHRoZSBmaWx0ZXJCYXJcbmNsYXNzIEZpbHRlckJhclRlbGVtZXRyeSB7XG5cdHByaXZhdGUgY291bnRGaWx0ZXJBY3Rpb25zID0gMDtcblxuXHRwcml2YXRlIGNvdW50VmFyaWFudEZpbHRlcnMgPSAwO1xuXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZmlsdGVyQmFyQVBJOiBGaWx0ZXJCYXJBUEkpIHt9XG5cblx0b25GaWx0ZXJzQ2hhbmdlZChyZWFzb24/OiBzdHJpbmcpOiB2b2lkIHtcblx0XHRpZiAocmVhc29uID09PSBcIlZhcmlhbnRcIikge1xuXHRcdFx0dGhpcy5jb3VudFZhcmlhbnRGaWx0ZXJzKys7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuY291bnRGaWx0ZXJBY3Rpb25zKys7XG5cdFx0fVxuXHR9XG5cblx0b25TZWFyY2goZXZlbnRQYXJhbWV0ZXJzOiB7IHJlYXNvbj86IHN0cmluZyB9LCBjb25kaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBDb25kaXRpb25PYmplY3RbXT4pOiB2b2lkIHtcblx0XHRjb25zdCBmaWx0ZXJOYW1lcyA9IHRoaXMuZ2V0RmlsdGVyTmFtZXNGcm9tQ29uZGl0aW9ucyhjb25kaXRpb25zKTtcblx0XHR0aGlzLmZpbHRlckJhckFQSS5nZXRQYWdlQ29udHJvbGxlcigpPy50ZWxlbWV0cnkuc3RvcmVBY3Rpb24oe1xuXHRcdFx0dHlwZTogXCJGRS5GaWx0ZXJCYXJTZWFyY2hcIixcblx0XHRcdHBhcmFtZXRlcnM6IHtcblx0XHRcdFx0Y291bnRGaWx0ZXJBY3Rpb25zOiB0aGlzLmNvdW50RmlsdGVyQWN0aW9ucywgLy8gIEhvdyBtYW55IGZpbHRlckNoYW5nZWQgYWN0aW9ucyBhcmUgcGVyZm9ybWVkXG5cdFx0XHRcdGNvdW50RmlsdGVyczogT2JqZWN0LmtleXMoY29uZGl0aW9ucykubGVuZ3RoLCAvLyBIb3cgbWFueSBkaWZmZXJlbnQgZmlsdGVycyBhcmUgYXBwbGllZFxuXHRcdFx0XHRjb3VudFZhcmlhbnRGaWx0ZXJzOiB0aGlzLmNvdW50VmFyaWFudEZpbHRlcnMsIC8vIEhvdyBtYW55IGZpbHRlciBiZWxvbmcgdG8gYSB2YXJpYW50XG5cdFx0XHRcdHZhcmlhbnRMYXllcjogdGhpcy5maWx0ZXJCYXJBUEkuZ2V0VmFyaWFudCgpPy5sYXllciA/PyBcIk5vbmVcIiwgLy8gfCBcIlNBUFwiIHwgXCJDdXN0b21cIjsgLy8gVHlwZSBvZiB2YXJpYW50XG5cdFx0XHRcdGF1dG9Mb2FkOiBldmVudFBhcmFtZXRlcnMucmVhc29uID09PSBcIlZhcmlhbnRcIiwgLy8gSXMgdGhlIGZpbHRlciBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkXG5cdFx0XHRcdHNlYXJjaFVzZWQ6IGNvbmRpdGlvbnMuJHNlYXJjaCA/ICEhT2JqZWN0LmtleXMoY29uZGl0aW9ucy4kc2VhcmNoKS5sZW5ndGggOiBmYWxzZSwgLy8gV2FzIHRoZSBzZWFyY2ggZmllbGQgaW4gdGhlIGZpbHRlcmJhciB1c2VkP1xuXHRcdFx0XHRmaWx0ZXJOYW1lczogZmlsdGVyTmFtZXMgLy8gUHJvcGVydHkgbmFtZXMgb2YgdGhlIGZpbHRlcnNcblx0XHRcdH1cblx0XHR9KTtcblx0XHQvLyBSZXNldCB0aGUgY291bnRcblx0XHR0aGlzLmNvdW50RmlsdGVyQWN0aW9ucyA9IDA7XG5cdFx0dGhpcy5jb3VudFZhcmlhbnRGaWx0ZXJzID0gMDtcblx0fVxuXG5cdGdldEZpbHRlck5hbWVzRnJvbUNvbmRpdGlvbnMoY29uZGl0aW9uczogUmVjb3JkPHN0cmluZywgQ29uZGl0aW9uT2JqZWN0W10+KTogc3RyaW5nIHtcblx0XHRsZXQgZmlsdGVyTmFtZXMgPSBcIlwiO1xuXHRcdE9iamVjdC5rZXlzKGNvbmRpdGlvbnMpLmZvckVhY2goKGNvbmRpdGlvbikgPT4ge1xuXHRcdFx0aWYgKGNvbmRpdGlvbiAhPSBcIiRzZWFyY2hcIikge1xuXHRcdFx0XHRmaWx0ZXJOYW1lcyArPSBjb25kaXRpb24gKyBcIjtcIjtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gZmlsdGVyTmFtZXM7XG5cdH1cbn1cblxuZXhwb3J0IHR5cGUgRmlsdGVyQmFyU3RhdGUgPSB7XG5cdGlubmVyU3RhdGU/OiB7XG5cdFx0ZmlsdGVyPzogUmVjb3JkPHN0cmluZywgQ29uZGl0aW9uT2JqZWN0W10+O1xuXHRcdGluaXRpYWxTdGF0ZT86IExlZ2FjeUZpbHRlckJhclN0YXRlO1xuXHRcdGZ1bGxTdGF0ZT86IExlZ2FjeUZpbHRlckJhclN0YXRlO1xuXHR9O1xufTtcblxudHlwZSBWYXJpYW50SURzID0ge1xuXHRzUGFnZVZhcmlhbnRJZDogc3RyaW5nO1xuXHRzRmlsdGVyQmFyVmFyaWFudElkOiBzdHJpbmc7XG5cdHNUYWJsZVZhcmlhbnRJZDogc3RyaW5nO1xuXHRzQ2hhcnRWYXJpYW50SWQ6IHN0cmluZztcbn07XG5cbnR5cGUgVmFyaWFudE9iamVjdCA9IHtcblx0YXV0aG9yOiBzdHJpbmc7XG5cdGNoYW5nZTogYm9vbGVhbjtcblx0Y29udGV4dHM6IG9iamVjdDtcblx0ZXhlY3V0ZU9uU2VsZWN0OiBib29sZWFuO1xuXHRmYXZvcml0ZTogYm9vbGVhbjtcblx0a2V5OiBzdHJpbmc7XG5cdG9yaWdpbmFsQ29udGV4dHM6IG9iamVjdDtcblx0b3JpZ2luYWxFeGVjdXRlT25TZWxlY3Q6IGJvb2xlYW47XG5cdG9yaWdpbmFsRmF2b3JpdGU6IGJvb2xlYW47XG5cdG9yaWdpbmFsVGl0bGU6IHN0cmluZztcblx0b3JpZ2luYWxWaXNpYmxlOiBib29sZWFuO1xuXHRyZW1vdmU6IGJvb2xlYW47XG5cdHJlbmFtZTogYm9vbGVhbjtcblx0c2hhcmluZzogc3RyaW5nO1xuXHR0aXRsZTogc3RyaW5nO1xuXHR2aXNpYmxlOiBib29sZWFuO1xufTtcblxuZW51bSBWYXJpYW50TWFuYWdlbWVudFR5cGUge1xuXHRDb250cm9sID0gXCJDb250cm9sXCIsXG5cdFBhZ2UgPSBcIlBhZ2VcIixcblx0Tm9uZSA9IFwiTm9uZVwiXG59XG5cbmNvbnN0IERJU1BMQVlfQ1VSUkVOQ1lfUFJPUEVSVFlfTkFNRSA9IFwiRGlzcGxheUN1cnJlbmN5XCI7XG5jb25zdCBQX0RJU1BMQVlfQ1VSUkVOQ1lfUFJPUEVSVFlfTkFNRSA9IFwiUF9EaXNwbGF5Q3VycmVuY3lcIjtcblxudHlwZSBMUlZpZXdEYXRhID0ge1xuXHRjb250cm9sQ29uZmlndXJhdGlvbj86IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pjtcblx0ZW50aXR5U2V0Pzogc3RyaW5nO1xuXHRjb250ZXh0UGF0aD86IHN0cmluZztcblx0dmFyaWFudE1hbmFnZW1lbnQ/OiBib29sZWFuIHwgc3RyaW5nO1xufTtcblxuLyoqXG4gKiBUaGUga2V5IHR5cGUgaW5jbHVkZXMgJ2Jvb2xlYW4nIHRvIHN1cHBvcnQgbGVnYWN5IHNjZW5hcmlvcyB3aGVyZSAnZGF0YUxvYWRlZCcgbWF5IGJlIHByZXNlbnQgYXQgdGhlIHBhcmVudCBsZXZlbCBhcyBhIGJvb2xlYW4sXG4gKiBhcyB3ZWxsIGFzIGF0IGluc3RhbmNlIGxldmVsIGFzIGFuIG9iamVjdCB3aXRoIGEgJ2RhdGFMb2FkZWQnIHByb3BlcnR5LiBUaGlzIGVuc3VyZXMgY29tcGF0aWJpbGl0eSB3aXRoIGJvdGggdXNhZ2VzLlxuICovXG50eXBlIEFkZGl0aW9uYWxTdGF0ZXMgPSB7XG5cdGRhdGFMb2FkZWQ/OiBib29sZWFuO1xuXHRba2V5OiBzdHJpbmddOiB7IGRhdGFMb2FkZWQ/OiBib29sZWFuIH0gfCBib29sZWFuIHwgdW5kZWZpbmVkO1xufTtcblxuaW50ZXJmYWNlIEZpbHRlckJhckFQSSBleHRlbmRzIEZpbHRlckJhckFQSVN0YXRlSGFuZGxlciB7fVxuXG4vKipcbiAqIEJ1aWxkaW5nIGJsb2NrIGZvciBjcmVhdGluZyBhIEZpbHRlckJhciBiYXNlZCBvbiB0aGUgbWV0YWRhdGEgcHJvdmlkZWQgYnkgT0RhdGEgVjQuXG4gKiB7QGxpbmsgZGVtbzpzYXAvZmUvY29yZS9mcG1FeHBsb3Jlci9pbmRleC5odG1sIy9idWlsZGluZ0Jsb2Nrcy9maWx0ZXJCYXIvZmlsdGVyQmFyRGVmYXVsdCBPdmVydmlldyBvZiBCdWlsZGluZyBCbG9ja3N9XG4gKiA8YnI+XG4gKiBVc3VhbGx5LCBhIFNlbGVjdGlvbkZpZWxkcyBhbm5vdGF0aW9uIGlzIGV4cGVjdGVkLlxuICpcbiAqXG4gKiBVc2FnZSBleGFtcGxlOlxuICogPHByZT5cbiAqICZsdDttYWNyb3M6RmlsdGVyQmFyIGlkPVwiTXlGaWx0ZXJCYXJcIiBtZXRhUGF0aD1cIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25GaWVsZHNcIiAvJmd0O1xuICogPC9wcmU+XG4gKiBAYWxpYXMgc2FwLmZlLm1hY3Jvcy5GaWx0ZXJCYXJcbiAqIEBwdWJsaWNcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLm1hY3Jvcy5maWx0ZXJCYXIuRmlsdGVyQmFyQVBJXCIsIHtcblx0cmV0dXJuVHlwZXM6IFtcInNhcC51aS5jb3JlLkNvbnRyb2xcIl1cbn0pXG5AbWl4aW4oRmlsdGVyQmFyQVBJU3RhdGVIYW5kbGVyKVxuY2xhc3MgRmlsdGVyQmFyQVBJIGV4dGVuZHMgTWFjcm9BUEkge1xuXHRpbml0aWFsQ29udHJvbFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG5cdF9pbml0aWFsU3RhdGVQcm9taXNlOiBQcm9taXNlS2VlcGVyPHZvaWQ+ID0gbmV3IFByb21pc2VLZWVwZXIoKTtcblxuXHRfYlNlYXJjaFRyaWdnZXJlZCA9IGZhbHNlO1xuXG5cdHByaXZhdGUgX2hhc1BlbmRpbmdGaWx0ZXJzID0gdHJ1ZTtcblxuXHRAY29udHJvbGxlckV4dGVuc2lvbkhhbmRsZXIoXCJ2aWV3U3RhdGVcIiwgXCJyZXRyaWV2ZUFkZGl0aW9uYWxTdGF0ZXNcIilcblx0cHVibGljIHJldHJpZXZlQWRkaXRpb25hbFN0YXRlcyhhZGRpdGlvbmFsU3RhdGVzOiBBZGRpdGlvbmFsU3RhdGVzKTogdm9pZCB7XG5cdFx0YWRkaXRpb25hbFN0YXRlc1t0aGlzLmdldElkKCldID0geyBkYXRhTG9hZGVkOiAhdGhpcy5faGFzUGVuZGluZ0ZpbHRlcnMgfTtcblx0fVxuXG5cdEBjb250cm9sbGVyRXh0ZW5zaW9uSGFuZGxlcihcInZpZXdTdGF0ZVwiLCBcImFwcGx5QWRkaXRpb25hbFN0YXRlc1wiKVxuXHRwdWJsaWMgYXBwbHlBZGRpdGlvbmFsU3RhdGVzKGFkZGl0aW9uYWxTdGF0ZXM6IEFkZGl0aW9uYWxTdGF0ZXMpOiB2b2lkIHtcblx0XHRjb25zdCBpbnN0YW5jZVN0YXRlID0gYWRkaXRpb25hbFN0YXRlc1t0aGlzLmdldElkKCldO1xuXHRcdGxldCBpbnN0YW5jZURhdGFMb2FkZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cdFx0aWYgKHR5cGVvZiBpbnN0YW5jZVN0YXRlID09PSBcIm9iamVjdFwiICYmIGluc3RhbmNlU3RhdGUgIT09IG51bGwpIHtcblx0XHRcdGluc3RhbmNlRGF0YUxvYWRlZCA9IGluc3RhbmNlU3RhdGUuZGF0YUxvYWRlZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aW5zdGFuY2VEYXRhTG9hZGVkID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdGNvbnN0IHBhcmVudERhdGFMb2FkZWQgPVxuXHRcdFx0XCJkYXRhTG9hZGVkXCIgaW4gYWRkaXRpb25hbFN0YXRlcyAmJiB0eXBlb2YgYWRkaXRpb25hbFN0YXRlcy5kYXRhTG9hZGVkID09PSBcImJvb2xlYW5cIiA/IGFkZGl0aW9uYWxTdGF0ZXMuZGF0YUxvYWRlZCA6IHVuZGVmaW5lZDtcblxuXHRcdGlmIChwYXJlbnREYXRhTG9hZGVkID09PSB0cnVlIHx8IGluc3RhbmNlRGF0YUxvYWRlZCA9PT0gdHJ1ZSkge1xuXHRcdFx0dGhpcy50cmlnZ2VyU2VhcmNoKCk7XG5cdFx0fVxuXHRcdGlmIChwYXJlbnREYXRhTG9hZGVkID09PSBmYWxzZSB8fCBpbnN0YW5jZURhdGFMb2FkZWQgPT09IGZhbHNlKSB7XG5cdFx0XHQodGhpcy5jb250ZW50IGFzIHsgX2JTZWFyY2hUcmlnZ2VyZWQ/OiBib29sZWFuIH0pLl9iU2VhcmNoVHJpZ2dlcmVkID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgd2FpdEZvckluaXRpYWxTdGF0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5faW5pdGlhbFN0YXRlUHJvbWlzZS5wcm9taXNlO1xuXHR9XG5cblx0Z2V0Q29udHJvbFN0YXRlKGNvbnRyb2xTdGF0ZTogQ29udHJvbFN0YXRlKTogQ29udHJvbFN0YXRlIHtcblx0XHRjb25zdCBpbml0aWFsQ29udHJvbFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHRoaXMuaW5pdGlhbENvbnRyb2xTdGF0ZTtcblx0XHRpZiAoY29udHJvbFN0YXRlKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRmdWxsU3RhdGU6IGNvbnRyb2xTdGF0ZSBhcyBvYmplY3QsXG5cdFx0XHRcdGluaXRpYWxTdGF0ZTogaW5pdGlhbENvbnRyb2xTdGF0ZSBhcyBvYmplY3Rcblx0XHRcdH07XG5cdFx0fVxuXHRcdHJldHVybiBjb250cm9sU3RhdGU7XG5cdH1cblxuXHQvKipcblx0ICogRGV0ZXJtaW5lcyB3aGV0aGVyIFNlYXJjaCBjYW4gYmUgdHJpZ2dlcmVkIGF0IGluaXRpYWwgbG9hZCBvZiB0aGUgYXBwbGljYXRpb24gb3Igbm90LlxuXHQgKiBAcGFyYW0gbmF2aWdhdGlvblR5cGUgTmF2aWdhdGlvbiBUeXBlIGR1cmluZyB0aGUgbG9hZCBvZiB0aGUgYXBwbGljYXRpb25cblx0ICogQHJldHVybnMgQSBCb29sZWFuIGRldGVybWluaW5nIHdoZXRoZXIgU2VhcmNoIGNhbiBiZSB0cmlnZ2VyZWQgb3Igbm90XG5cdCAqL1xuXHRpc1NlYXJjaFRyaWdnZXJlZEJ5SW5pdGlhbExvYWQobmF2aWdhdGlvblR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB0aGlzLmdldFBhZ2VDb250cm9sbGVyKCkgYXMgTGlzdFJlcG9ydENvbnRyb2xsZXIsXG5cdFx0XHR2aWV3ID0gY29udHJvbGxlci5nZXRWaWV3KCksXG5cdFx0XHR2aWV3RGF0YSA9IHZpZXcuZ2V0Vmlld0RhdGEoKTtcblx0XHRsZXQgaXNTZWFyY2hUcmlnZ2VyZWRCeUluaXRpYWxMb2FkID0gZmFsc2UsXG5cdFx0XHR2YXJpYW50TWFuYWdlbWVudDtcblx0XHQvLyBEZXRlcm1pbmluZyB3aGV0aGVyIGl0J3MgQ29udHJvbCB2YXJpYW50TWFuYWdlbWVudCBvciBQYWdlIHZhcmlhbnRNYW5hZ2VtZW50XG5cdFx0aWYgKHZpZXdEYXRhLnZhcmlhbnRNYW5hZ2VtZW50ID09PSBWYXJpYW50TWFuYWdlbWVudFR5cGUuQ29udHJvbCkge1xuXHRcdFx0dmFyaWFudE1hbmFnZW1lbnQgPSBjb250cm9sbGVyLl9nZXRGaWx0ZXJCYXJWYXJpYW50Q29udHJvbCgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YXJpYW50TWFuYWdlbWVudCA9IHZpZXcuYnlJZChcImZlOjpQYWdlVmFyaWFudE1hbmFnZW1lbnRcIikgYXMgVmFyaWFudE1hbmFnZW1lbnQ7XG5cdFx0fVxuXHRcdGNvbnN0IGN1cnJlbnRWYXJpYW50S2V5ID0gdmFyaWFudE1hbmFnZW1lbnQ/LmdldEN1cnJlbnRWYXJpYW50S2V5KCk7XG5cdFx0Ly9UaGUgY2hlY2sgc2hhbGwgaGFwcGVuIGZvciAnaW50aWFsIGxvYWQnIGFuZCAnQXBwbHkgQXV0b21hdGljYWxseScgZm9yIGNvbGxhcHNpbmcgdGhlIGhlYWRlciBvclxuXHRcdC8vIGFsd2F5cyBiZSBjb2xsYXBzZWQgaWYgbmF2VHlwZSBpcyB4QXBwU3RhdGVcblx0XHQvLyBpbml0aWFsTG9hZCBBdXRvIG9yIERpc2FibGVkXG5cdFx0aWYgKG5hdmlnYXRpb25UeXBlID09PSBOYXZUeXBlLnhBcHBTdGF0ZSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSBlbHNlIGlmICh2YXJpYW50TWFuYWdlbWVudCAmJiB2aWV3RGF0YS5pbml0aWFsTG9hZCAhPT0gSW5pdGlhbExvYWRNb2RlLkVuYWJsZWQpIHtcblx0XHRcdC8vIEhlYWRlciBpcyBjb2xsYXBzZWQgaWYgcHJlc2V0IGZpbHRlcnMgYXJlIHNldCBmb3IgaW5pdGlhbCBsb2FkIEF1dG8sIEhlYWRlciBzaGFsbCByZW1haW4gZXhwYW5kZWQgaWYgaW5pdGlhbCBsb2FkIGlzIEF1dG8gd2l0aG91dCBwcmVzZXQgZmlsdGVycyBvciBpbnRpYWwgbG9hZCBpcyBkaXNhYmxlZFxuXHRcdFx0aWYgKGNvbnRyb2xsZXIuX3Nob3VsZEF1dG9UcmlnZ2VyU2VhcmNoKHRoaXMuX2dldEZpbHRlckJhclZNKHZpZXcpKSkge1xuXHRcdFx0XHRpc1NlYXJjaFRyaWdnZXJlZEJ5SW5pdGlhbExvYWQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyBpbml0aWFsTG9hZCBFbmFibGVkXG5cdFx0ZWxzZSBpZiAoXG5cdFx0XHR2YXJpYW50TWFuYWdlbWVudCAmJlxuXHRcdFx0dmlld0RhdGEuaW5pdGlhbExvYWQgPT09IEluaXRpYWxMb2FkTW9kZS5FbmFibGVkICYmXG5cdFx0XHRjb250cm9sbGVyLl9nZXRBcHBseUF1dG9tYXRpY2FsbHlPblZhcmlhbnQodmFyaWFudE1hbmFnZW1lbnQsIGN1cnJlbnRWYXJpYW50S2V5KVxuXHRcdCkge1xuXHRcdFx0aXNTZWFyY2hUcmlnZ2VyZWRCeUluaXRpYWxMb2FkID0gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGlzU2VhcmNoVHJpZ2dlcmVkQnlJbml0aWFsTG9hZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBcHBseSBTZWxlY3Rpb24gVmFyaWFudCBmcm9tIE5hdmlnYXRpb24gUGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gdmlldyBWaWV3IG9mIHRoZSBMUiBmaWx0ZXIgYmFyXG5cdCAqIEBwYXJhbSBuYXZpZ2F0aW9uUGFyYW1ldGVyIFNlbGVjdGlvbiBWYXJpYW50IHRvIGFwcGx5IGZyb20gYXBwU3RhdGVcblx0ICogQHBhcmFtIGZpbHRlclZhcmlhbnRBcHBsaWVkIElzIGEgZmlsdGVyIHZhcmlhbnQgYWxhcmVhZHkgYXBwbGllZFxuXHQgKiBAcmV0dXJucyBQcm9taXNlIGZvciBhc3luY2hyb25vdXMgaGFuZGxpbmdcblx0ICovXG5cdGFzeW5jIF9hcHBseVNlbGVjdGlvblZhcmlhbnQodmlldzogVmlldywgbmF2aWdhdGlvblBhcmFtZXRlcjogTmF2aWdhdGlvblBhcmFtZXRlciwgZmlsdGVyVmFyaWFudEFwcGxpZWQ6IGJvb2xlYW4pOiBQcm9taXNlPHVua25vd24+IHtcblx0XHRjb25zdCBmaWx0ZXJCYXIgPSB0aGlzLmdldENvbnRlbnQoKSBhcyBGaWx0ZXJCYXI7XG5cdFx0Y29uc3QgeyBzZWxlY3Rpb25WYXJpYW50OiBzdiwgc2VsZWN0aW9uVmFyaWFudERlZmF1bHRzOiBzdkRlZmF1bHRzLCByZXF1aXJlc1N0YW5kYXJkVmFyaWFudCA9IGZhbHNlIH0gPSBuYXZpZ2F0aW9uUGFyYW1ldGVyO1xuXG5cdFx0aWYgKCFmaWx0ZXJCYXIgfHwgIXN2KSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXHRcdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50ID0gdGhpcy5fZ2V0RmlsdGVyQmFyVk0odmlldykgYXMgVmFyaWFudE1hbmFnZW1lbnQ7XG5cdFx0Y29uc3Qgc2hvdWxkQXBwbHlBcHBTdGF0ZSA9IGF3YWl0IHRoaXMuX2FjdGl2YXRlVmFyaWFudEFuZERldGVybWluZUFwcGx5QXBwU3RhdGUoXG5cdFx0XHR2YXJpYW50TWFuYWdlbWVudCxcblx0XHRcdHJlcXVpcmVzU3RhbmRhcmRWYXJpYW50LFxuXHRcdFx0ZmlsdGVyVmFyaWFudEFwcGxpZWRcblx0XHQpO1xuXHRcdGlmIChzaG91bGRBcHBseUFwcFN0YXRlKSB7XG5cdFx0XHR0aGlzLl9hZGREZWZhdWx0RGlzcGxheUN1cnJlbmN5VG9TVih2aWV3LCBzdiwgc3ZEZWZhdWx0cyk7XG5cblx0XHRcdC8vIGNoZWNrIGlmIEZMUCBkZWZhdWx0IHZhbHVlcyBhcmUgdGhlcmUgYW5kIGlzIGl0IHN0YW5kYXJkIHZhcmlhbnRcblx0XHRcdGNvbnN0IHN2RGVmYXVsdHNBcmVQcmVzZW50ID0gc3ZEZWZhdWx0cyA/IHN2RGVmYXVsdHMuZ2V0U2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMoKS5sZW5ndGggPiAwIDogZmFsc2U7XG5cdFx0XHRjb25zdCBzdGRWYXJpYW50SXNEZWZhdWx0VmFyaWFudCA9XG5cdFx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50ICYmIHZhcmlhbnRNYW5hZ2VtZW50LmdldERlZmF1bHRWYXJpYW50S2V5KCkgPT09IHZhcmlhbnRNYW5hZ2VtZW50LmdldFN0YW5kYXJkVmFyaWFudEtleSgpO1xuXHRcdFx0Y29uc3QgdXNlRkxQRGVmYXVsdFZhbHVlczogYm9vbGVhbiA9IHN2RGVmYXVsdHNBcmVQcmVzZW50ICYmIChzdGRWYXJpYW50SXNEZWZhdWx0VmFyaWFudCB8fCAhdmFyaWFudE1hbmFnZW1lbnQpO1xuXG5cdFx0XHRjb25zdCBmaWx0ZXJCYXJBUEkgPSBmaWx0ZXJCYXIuZ2V0UGFyZW50KCkgYXMgRmlsdGVyQmFyQVBJO1xuXHRcdFx0bGV0IHN2VG9TZXQ6IFNlbGVjdGlvblZhcmlhbnQgPSBzdjtcblx0XHRcdGlmIChmaWx0ZXJWYXJpYW50QXBwbGllZCB8fCB1c2VGTFBEZWZhdWx0VmFsdWVzKSB7XG5cdFx0XHRcdHN2VG9TZXQgPSBhd2FpdCB0aGlzLl9nZXRBZGp1c3RlZFNWKHN2LCB1c2VGTFBEZWZhdWx0VmFsdWVzKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmaWx0ZXJCYXJBUEkuc2V0U2VsZWN0aW9uVmFyaWFudChzdlRvU2V0LCB0cnVlKTtcblx0XHR9XG5cdH1cblxuXHRfZW5hYmxlRmlsdGVyQmFyKGZpbHRlckJhckNvbnRyb2w6IEZpbHRlckJhciwgcHJldmVudEluaXRpYWxTZWFyY2g6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRjb25zdCBmaWx0ZXJCYXJBUEkgPSBmaWx0ZXJCYXJDb250cm9sLmdldFBhcmVudCgpIGFzIEZpbHRlckJhckFQSTtcblx0XHRjb25zdCBmbk9uU2VhcmNoID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0dGhpcy5fYlNlYXJjaFRyaWdnZXJlZCA9ICFwcmV2ZW50SW5pdGlhbFNlYXJjaDtcblx0XHR9O1xuXG5cdFx0Ly8gcmVzZXQgdGhlIHN1c3BlbmQgc2VsZWN0aW9uIG9uIGZpbHRlciBiYXIgdG8gYWxsb3cgbG9hZGluZyBvZiBkYXRhIHdoZW4gbmVlZGVkICh3YXMgc2V0IG9uIExSIEluaXQpXG5cdFx0aWYgKGZpbHRlckJhckNvbnRyb2wuZ2V0U3VzcGVuZFNlbGVjdGlvbigpKSB7XG5cdFx0XHQvLyBPbmx5IGlmIHNlYXJjaCBpcyBmaXJlZCB3ZSBzZXQgX2JTZWFyY2hUcmlnZ2VyZWQuXG5cdFx0XHQvLyBJZiB0aGVyZSB3YXMgYW4gZXJyb3IgZHVlIHRvIHJlcXVpcmVkIGZpbHRlcmZpZWxkcyBlbXB0eSBvciBvdGhlciBpc3N1ZXMgd2Ugc2tpcCBzZXR0aW5nIF9iU2VhcmNoVHJpZ2dlcmVkLlxuXHRcdFx0ZmlsdGVyQmFyQVBJLmF0dGFjaEV2ZW50T25jZShcInNlYXJjaFwiLCBmbk9uU2VhcmNoKTtcblx0XHRcdGZpbHRlckJhckNvbnRyb2wuZW5hYmxlUmVxdWVzdHModHJ1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIHNlYXJjaCBtaWdodCBhbHJlYWR5IGJlIHRyaWdnZXJlZC5cblx0XHRcdGZuT25TZWFyY2goKTtcblx0XHR9XG5cdH1cblxuXHRhc3luYyBfZ2V0QWRqdXN0ZWRTVihhcHBTdGF0ZVNWOiBTZWxlY3Rpb25WYXJpYW50LCB1c2VGTFBEZWZhdWx0VmFsdWVzOiBib29sZWFuKTogUHJvbWlzZTxTZWxlY3Rpb25WYXJpYW50PiB7XG5cdFx0bGV0IGFkanVzdGVkU1YgPSBuZXcgU2VsZWN0aW9uVmFyaWFudChhcHBTdGF0ZVNWLnRvSlNPTk9iamVjdCgpKTtcblx0XHRjb25zdCBhbHJlYWR5QXBwbGllZFNWID0gYXdhaXQgdGhpcy5nZXRTZWxlY3Rpb25WYXJpYW50KCk7XG5cdFx0Y29uc3QgYXBwbGllZFNlbE9wdE5hbWVzID0gYWxyZWFkeUFwcGxpZWRTVj8uZ2V0U2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMoKSB8fCBbXTtcblx0XHRpZiAoYXBwbGllZFNlbE9wdE5hbWVzLmxlbmd0aCA+IDApIHtcblx0XHRcdC8vIFdlIG1lcmdlICdhcHBsaWVkIFNWJyBhbmQgJ2FwcFN0YXRlIFNWJyBiYXNlZCBvbiAndXNlRkxQRGVmYXVsdFZhbHVlcycuXG5cdFx0XHRhZGp1c3RlZFNWID0gYXBwbGllZFNlbE9wdE5hbWVzLnJlZHVjZSgoc3ZDb3B5OiBTZWxlY3Rpb25WYXJpYW50LCBzZWxPcHRpb25OYW1lKSA9PiB7XG5cdFx0XHRcdC8vIChhcHBTdGF0ZVNWID0gYWRqdXN0ZWRTViA9IHN2Q29weSlcblx0XHRcdFx0Y29uc3Qgc3ZTZWxPcHRzID0gc3ZDb3B5LmdldFNlbGVjdE9wdGlvbihzZWxPcHRpb25OYW1lKTtcblx0XHRcdFx0Ly8gSWYgdXNlRkxQRGVmYXVsdFZhbHVlcyA9IHRydWUsIG1lYW5zIChhcHBTdGF0ZVNWID0gc3ZEZWZhdWx0cylcblx0XHRcdFx0aWYgKCh1c2VGTFBEZWZhdWx0VmFsdWVzICYmICFzdlNlbE9wdHM/Lmxlbmd0aCkgfHwgIXVzZUZMUERlZmF1bHRWYWx1ZXMpIHtcblx0XHRcdFx0XHQvLyBpZiBkZWZhdWx0IFNWIG5lZWRzIHRvIGJlIHVzZWQsIHRoZW4gc2VsZWN0IG9wdGlvbnMgZnJvbSBkZWZhdWx0IHNlbGVjdCBvcHRpb25zIHRha2UgcHJpb3JpdHkuXG5cdFx0XHRcdFx0Ly8gZWxzZSB3ZSBtZXJnZSBib3RoOiBhbHJlYWR5IGFwcGxpZWQgU1YgYW5kIFNWIGZyb20gbmF2UGFyYW1zLlxuXHRcdFx0XHRcdGNvbnN0IHNlbGVjdE9wdGlvbnMgPSBhbHJlYWR5QXBwbGllZFNWLmdldFNlbGVjdE9wdGlvbihzZWxPcHRpb25OYW1lKTtcblx0XHRcdFx0XHRzdkNvcHkubWFzc0FkZFNlbGVjdE9wdGlvbihzZWxPcHRpb25OYW1lLCBzZWxlY3RPcHRpb25zIHx8IFtdKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gc3ZDb3B5O1xuXHRcdFx0fSwgYWRqdXN0ZWRTVik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGFkanVzdGVkU1Y7XG5cdH1cblxuXHRfcHJldmVudEluaXRpYWxTZWFyY2godmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50KTogYm9vbGVhbiB7XG5cdFx0aWYgKCF2YXJpYW50TWFuYWdlbWVudCkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGNvbnN0IGFWYXJpYW50cyA9IHZhcmlhbnRNYW5hZ2VtZW50LmdldFZhcmlhbnRzKCk7XG5cdFx0Y29uc3Qgb0N1cnJlbnRWYXJpYW50ID0gYVZhcmlhbnRzLmZpbmQoZnVuY3Rpb24gKGl0ZW0pOiBib29sZWFuIHtcblx0XHRcdHJldHVybiBpdGVtLmdldEtleSgpID09PSB2YXJpYW50TWFuYWdlbWVudC5nZXRDdXJyZW50VmFyaWFudEtleSgpO1xuXHRcdH0pO1xuXHRcdHJldHVybiAhb0N1cnJlbnRWYXJpYW50LmV4ZWN1dGVPblNlbGVjdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgRGlzcGxheUN1cnJlbmN5IHRvIFNWIGlmIGl0IGlzIG1hbmRhdG9yeSBhbmQgZXhpc3RzIGluIFNWIGRlZmF1bHRzLlxuXHQgKiBAcGFyYW0gdmlldyBWaWV3IG9mIHRoZSBMUiBmaWx0ZXIgYmFyXG5cdCAqIEBwYXJhbSBzdiBTZWxlY3Rpb24gVmFyaWFudCB0byBhcHBseVxuXHQgKiBAcGFyYW0gc3ZEZWZhdWx0cyBTZWxlY3Rpb24gVmFyaWFudCBkZWZhdWx0c1xuXHQgKi9cblx0X2FkZERlZmF1bHREaXNwbGF5Q3VycmVuY3lUb1NWKHZpZXc6IFZpZXcsIHN2OiBTZWxlY3Rpb25WYXJpYW50LCBzdkRlZmF1bHRzPzogU2VsZWN0aW9uVmFyaWFudCk6IHZvaWQge1xuXHRcdGlmICghc3ZEZWZhdWx0cyB8fCBzdkRlZmF1bHRzPy5pc0VtcHR5KCkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCB2aWV3RGF0YSA9IHZpZXcuZ2V0Vmlld0RhdGEoKSBhcyBMUlZpZXdEYXRhLFxuXHRcdFx0bWV0YU1vZGVsID0gdmlldy5nZXRNb2RlbCgpPy5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCxcblx0XHRcdGNvbnRleHRQYXRoID0gdmlld0RhdGEuY29udGV4dFBhdGggfHwgYC8ke3ZpZXdEYXRhLmVudGl0eVNldH1gLFxuXHRcdFx0bWV0YUNvbnRleHQgPSBtZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQoY29udGV4dFBhdGgpLFxuXHRcdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxNZXRhTW9kZWw+ID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFDb250ZXh0KTtcblxuXHRcdC8vIGdldERpc3BsYXlDdXJyZW5jeVByb3BlcnR5TmFtZSBhbHJlYWR5IGFwcGxpZXMgdGhlIGlzUGFyYW1ldGVyaXplZCBsb2dpY1xuXHRcdGNvbnN0IGRpc3BsYXlDdXJyZW5jeVByb3BlcnR5TmFtZSA9IHRoaXMuZ2V0RGlzcGxheUN1cnJlbmN5UHJvcGVydHlOYW1lKGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRcdGNvbnN0IGRpc3BsYXlDdXJyZW5jeUlzTWFuZGF0b3J5ID0gdGhpcy5fY2hlY2tJZkRpc3BsYXlDdXJyZW5jeUlzUmVxdWlyZWQoZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdFx0aWYgKCFkaXNwbGF5Q3VycmVuY3lJc01hbmRhdG9yeSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHN2T3B0aW9ucyA9IHN2LmdldFNlbGVjdE9wdGlvbihkaXNwbGF5Q3VycmVuY3lQcm9wZXJ0eU5hbWUpIHx8IFtdLFxuXHRcdFx0ZGVmYXVsdFNWT3B0aW9ucyA9IHN2RGVmYXVsdHMuZ2V0U2VsZWN0T3B0aW9uKGRpc3BsYXlDdXJyZW5jeVByb3BlcnR5TmFtZSkgfHwgW10sXG5cdFx0XHRkaXNwbGF5Q3VycmVuY3lEZWZhdWx0RXhpc3RzID0gZGVmYXVsdFNWT3B0aW9ucy5sZW5ndGggPiAwLFxuXHRcdFx0bm9TVkRpc3BsYXlDdXJyZW5jeUV4aXN0cyA9IHN2T3B0aW9ucy5sZW5ndGggPT09IDA7XG5cblx0XHRpZiAobm9TVkRpc3BsYXlDdXJyZW5jeUV4aXN0cyAmJiBkaXNwbGF5Q3VycmVuY3lEZWZhdWx0RXhpc3RzKSB7XG5cdFx0XHRjb25zdCBkaXNwbGF5Q3VycmVuY3lTZWxlY3RPcHRpb24gPSBkZWZhdWx0U1ZPcHRpb25zWzBdLFxuXHRcdFx0XHRzaWduID0gZGlzcGxheUN1cnJlbmN5U2VsZWN0T3B0aW9uW1wiU2lnblwiXSxcblx0XHRcdFx0b3B0aW9uID0gZGlzcGxheUN1cnJlbmN5U2VsZWN0T3B0aW9uW1wiT3B0aW9uXCJdLFxuXHRcdFx0XHRsb3cgPSBkaXNwbGF5Q3VycmVuY3lTZWxlY3RPcHRpb25bXCJMb3dcIl0sXG5cdFx0XHRcdGhpZ2ggPSBkaXNwbGF5Q3VycmVuY3lTZWxlY3RPcHRpb25bXCJIaWdoXCJdO1xuXG5cdFx0XHRzdi5hZGRTZWxlY3RPcHRpb24oZGlzcGxheUN1cnJlbmN5UHJvcGVydHlOYW1lLCBzaWduLCBvcHRpb24sIGxvdywgaGlnaCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB0aGUgZGF0YSBtb2RlbCBvYmplY3QgcGF0aCBpcyBwYXJhbWV0ZXJpemVkLlxuXHQgKiBMb29rcyBmb3IgYSBSZXN1bHRDb250ZXh0IGFubm90YXRpb24gaW4gdGhlIHN0YXJ0aW5nIGVudGl0eSdzIHR5cGVcblx0ICogYW5kIGVuc3VyZXMgdGhlcmUncyBubyB0YXJnZXQgZW50aXR5IHNldC5cblx0ICogQHBhcmFtIGRhdGFNb2RlbE9iamVjdFBhdGggVGhlIHBhdGggdG8gY2hlY2suXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgaXQncyBwYXJhbWV0ZXJpemVkLCBmYWxzZSBvdGhlcndpc2UuXG5cdCAqL1xuXHRwcml2YXRlIGlzUGFyYW1ldGVyaXplZChkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPE1ldGFNb2RlbD4pOiBib29sZWFuIHtcblx0XHRyZXR1cm4gISFkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0LmVudGl0eVR5cGU/LmFubm90YXRpb25zPy5Db21tb24/LlJlc3VsdENvbnRleHQ7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgZGlzcGxheSBjdXJyZW5jeSBwcm9wZXJ0eSBuYW1lIGJhc2VkIG9uIHRoZSBlbnRpdHkgdHlwZSdzIHBhcmFtZXRlcml6YXRpb24uXG5cdCAqIFVzZXMgdGhlIGlzUGFyYW1ldGVyaXplZCBtZXRob2QgdG8gZGVjaWRlIHdoaWNoIHByb3BlcnR5IG5hbWUgdG8gcmV0dXJuLlxuXHQgKiBAcGFyYW0gZGF0YU1vZGVsT2JqZWN0UGF0aCBUaGUgcGF0aCB0byBjaGVjay5cblx0ICogQHJldHVybnMgVGhlIGFwcHJvcHJpYXRlIGRpc3BsYXkgY3VycmVuY3kgcHJvcGVydHkgbmFtZS5cblx0ICovXG5cdGdldERpc3BsYXlDdXJyZW5jeVByb3BlcnR5TmFtZShkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPE1ldGFNb2RlbD4pOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLmlzUGFyYW1ldGVyaXplZChkYXRhTW9kZWxPYmplY3RQYXRoKSA/IFBfRElTUExBWV9DVVJSRU5DWV9QUk9QRVJUWV9OQU1FIDogRElTUExBWV9DVVJSRU5DWV9QUk9QRVJUWV9OQU1FO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBEaXNwbGF5Q3VycmVuY3kgaXMgbWFuZGF0b3J5IGZvciBmaWx0ZXJpbmcuXG5cdCAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoXG5cdCAqIEByZXR1cm5zIEJvb2xlYW5cblx0ICovXG5cdF9jaGVja0lmRGlzcGxheUN1cnJlbmN5SXNSZXF1aXJlZChkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPE1ldGFNb2RlbD4pOiBib29sZWFuIHtcblx0XHRsZXQgZGlzcGxheUN1cnJlbmN5SXNNYW5kYXRvcnkgPSBmYWxzZTtcblxuXHRcdGlmICh0aGlzLmlzUGFyYW1ldGVyaXplZChkYXRhTW9kZWxPYmplY3RQYXRoKSkge1xuXHRcdFx0ZGlzcGxheUN1cnJlbmN5SXNNYW5kYXRvcnkgPSBkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0LmVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5zb21lKFxuXHRcdFx0XHQocGFyYW1ldGVyOiBQcm9wZXJ0eSk6IGJvb2xlYW4gPT4gcGFyYW1ldGVyLm5hbWUgPT09IFBfRElTUExBWV9DVVJSRU5DWV9QUk9QRVJUWV9OQU1FXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBlbnRpdHlTZXQ6IEVudGl0eVNldCB8IHVuZGVmaW5lZCA9XG5cdFx0XHRcdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldC5fdHlwZSA9PT0gXCJFbnRpdHlTZXRcIiA/IGRhdGFNb2RlbE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQgOiB1bmRlZmluZWQsXG5cdFx0XHRcdHJlcXVpcmVkUHJvcGVydGllcyA9IGVudGl0eVNldD8uYW5ub3RhdGlvbnMuQ2FwYWJpbGl0aWVzPy5GaWx0ZXJSZXN0cmljdGlvbnM/LlJlcXVpcmVkUHJvcGVydGllcyA/PyBbXTtcblx0XHRcdGRpc3BsYXlDdXJyZW5jeUlzTWFuZGF0b3J5ID0gcmVxdWlyZWRQcm9wZXJ0aWVzLnNvbWUoXG5cdFx0XHRcdChyZXF1aXJlZFByb3BlcnR5OiBQcm9wZXJ0eVBhdGgpID0+IHJlcXVpcmVkUHJvcGVydHkudmFsdWUgPT09IERJU1BMQVlfQ1VSUkVOQ1lfUFJPUEVSVFlfTkFNRVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIGRpc3BsYXlDdXJyZW5jeUlzTWFuZGF0b3J5O1xuXHR9XG5cblx0LyoqXG5cdCAqIEFjdGl2YXRlIHZhcmlhbnQgZnJvbSB2YXJpYW50IG1hbmFnZW1lbnQgYW5kIHJldHVybiBpZiBhcHBTdGF0ZSBuZWVkcyB0byBiZSBhcHBsaWVkLlxuXHQgKiBAcGFyYW0gdmFyaWFudE1hbmFnZW1lbnQgVmFyaWFudE1hbmFnZW1lbnQgdXNlZCBieSBmaWx0ZXIgYmFyXG5cdCAqIEBwYXJhbSByZXFTdGRWYXJpYW50IElmIHN0YW5kYXJkIHZhcmlhbnQgaXMgcmVxdWlyZWQgdG8gYmUgdXNlZFxuXHQgKiBAcGFyYW0gZmlsdGVyVmFyaWFudEFwcGxpZWQgSXMgYSBmaWx0ZXIgdmFyaWFudCBhbHJlYWR5IGFwcGxpZWRcblx0ICogQHJldHVybnMgUHJvbWlzZSBmb3IgYXN5bmNocm9ub3VzIGhhbmRsaW5nXG5cdCAqL1xuXHRhc3luYyBfYWN0aXZhdGVWYXJpYW50QW5kRGV0ZXJtaW5lQXBwbHlBcHBTdGF0ZShcblx0XHR2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnQgfCB1bmRlZmluZWQsXG5cdFx0cmVxU3RkVmFyaWFudDogYm9vbGVhbixcblx0XHRmaWx0ZXJWYXJpYW50QXBwbGllZDogYm9vbGVhblxuXHQpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRpZiAodmFyaWFudE1hbmFnZW1lbnQgJiYgIWZpbHRlclZhcmlhbnRBcHBsaWVkKSB7XG5cdFx0XHRsZXQgdmFyaWFudEtleSA9IHJlcVN0ZFZhcmlhbnQgPyB2YXJpYW50TWFuYWdlbWVudC5nZXRTdGFuZGFyZFZhcmlhbnRLZXkoKSA6IHZhcmlhbnRNYW5hZ2VtZW50LmdldERlZmF1bHRWYXJpYW50S2V5KCk7XG5cdFx0XHRpZiAodmFyaWFudEtleSA9PT0gbnVsbCkge1xuXHRcdFx0XHR2YXJpYW50S2V5ID0gdmFyaWFudE1hbmFnZW1lbnQuZ2V0SWQoKTtcblx0XHRcdH1cblx0XHRcdGF3YWl0IENvbnRyb2xWYXJpYW50QXBwbHlBUEkuYWN0aXZhdGVWYXJpYW50KHtcblx0XHRcdFx0ZWxlbWVudDogdmFyaWFudE1hbmFnZW1lbnQsXG5cdFx0XHRcdHZhcmlhbnRSZWZlcmVuY2U6IHZhcmlhbnRLZXlcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIHJlcVN0ZFZhcmlhbnQgfHwgdmFyaWFudE1hbmFnZW1lbnQuZ2V0RGVmYXVsdFZhcmlhbnRLZXkoKSA9PT0gdmFyaWFudE1hbmFnZW1lbnQuZ2V0U3RhbmRhcmRWYXJpYW50S2V5KCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogVmFyaWFudCBtYW5hZ2VtZW50IHVzZWQgYnkgZmlsdGVyIGJhci5cblx0ICogQHBhcmFtIHZpZXcgVmlldyBvZiB0aGUgTFIgZmlsdGVyIGJhclxuXHQgKiBAcmV0dXJucyBWYXJpYW50TWFuYWdlbWVudCBpZiB1c2VkXG5cdCAqL1xuXHRfZ2V0RmlsdGVyQmFyVk0odmlldzogVmlldyk6IFZhcmlhbnRNYW5hZ2VtZW50IHwgdW5kZWZpbmVkIHtcblx0XHRsZXQgdmFyaWFudE1hbmFnZW1lbnQ7XG5cdFx0Y29uc3Qgdmlld0RhdGEgPSB2aWV3LmdldFZpZXdEYXRhKCkgYXMgTFJWaWV3RGF0YTtcblx0XHRzd2l0Y2ggKHZpZXdEYXRhLnZhcmlhbnRNYW5hZ2VtZW50KSB7XG5cdFx0XHRjYXNlIFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5QYWdlOlxuXHRcdFx0XHR2YXJpYW50TWFuYWdlbWVudCA9IHZpZXcuYnlJZChcImZlOjpQYWdlVmFyaWFudE1hbmFnZW1lbnRcIik7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBWYXJpYW50TWFuYWdlbWVudFR5cGUuQ29udHJvbDpcblx0XHRcdFx0dmFyaWFudE1hbmFnZW1lbnQgPSAodmlldy5nZXRDb250cm9sbGVyKCkgYXMgTGlzdFJlcG9ydENvbnRyb2xsZXIpLl9nZXRGaWx0ZXJCYXJWYXJpYW50Q29udHJvbCgpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVmFyaWFudE1hbmFnZW1lbnRUeXBlLk5vbmU6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0cmV0dXJuIHZhcmlhbnRNYW5hZ2VtZW50IGFzIFZhcmlhbnRNYW5hZ2VtZW50IHwgdW5kZWZpbmVkO1xuXHR9XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXF1aXJlLWF3YWl0XG5cdGFzeW5jIGhhbmRsZVZhcmlhbnRJZFBhc3NlZFZpYVVSTFBhcmFtcyhvVXJsUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0Y29uc3QgYVBhZ2VWYXJpYW50SWQgPSBvVXJsUGFyYW1zW1wic2FwLXVpLWZlLXZhcmlhbnQtaWRcIl0sXG5cdFx0XHRhRmlsdGVyQmFyVmFyaWFudElkID0gb1VybFBhcmFtc1tcInNhcC11aS1mZS1maWx0ZXJiYXItdmFyaWFudC1pZFwiXSxcblx0XHRcdGFUYWJsZVZhcmlhbnRJZCA9IG9VcmxQYXJhbXNbXCJzYXAtdWktZmUtdGFibGUtdmFyaWFudC1pZFwiXSxcblx0XHRcdGFDaGFydFZhcmlhbnRJZCA9IG9VcmxQYXJhbXNbXCJzYXAtdWktZmUtY2hhcnQtdmFyaWFudC1pZFwiXTtcblx0XHRsZXQgb1ZhcmlhbnRJRHM6IFZhcmlhbnRJRHMgfCB1bmRlZmluZWQ7XG5cdFx0aWYgKGFQYWdlVmFyaWFudElkIHx8IGFGaWx0ZXJCYXJWYXJpYW50SWQgfHwgYVRhYmxlVmFyaWFudElkIHx8IGFDaGFydFZhcmlhbnRJZCkge1xuXHRcdFx0b1ZhcmlhbnRJRHMgPSB7XG5cdFx0XHRcdHNQYWdlVmFyaWFudElkOiBhUGFnZVZhcmlhbnRJZCAmJiBhUGFnZVZhcmlhbnRJZFswXSxcblx0XHRcdFx0c0ZpbHRlckJhclZhcmlhbnRJZDogYUZpbHRlckJhclZhcmlhbnRJZCAmJiBhRmlsdGVyQmFyVmFyaWFudElkWzBdLFxuXHRcdFx0XHRzVGFibGVWYXJpYW50SWQ6IGFUYWJsZVZhcmlhbnRJZCAmJiBhVGFibGVWYXJpYW50SWRbMF0sXG5cdFx0XHRcdHNDaGFydFZhcmlhbnRJZDogYUNoYXJ0VmFyaWFudElkICYmIGFDaGFydFZhcmlhbnRJZFswXVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuX2hhbmRsZUNvbnRyb2xWYXJpYW50SWQob1ZhcmlhbnRJRHMpO1xuXHR9XG5cblx0YXN5bmMgX2hhbmRsZUNvbnRyb2xWYXJpYW50SWQob1ZhcmlhbnRJRHM6IFZhcmlhbnRJRHMgfCB1bmRlZmluZWQpOiBQcm9taXNlPHVua25vd24+IHtcblx0XHRsZXQgb1ZNOiBWYXJpYW50TWFuYWdlbWVudDtcblx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKT8uZ2V0VmlldygpLFxuXHRcdFx0YVByb21pc2VzOiBQcm9taXNlPGJvb2xlYW4+W10gPSBbXTtcblx0XHRjb25zdCBzVmFyaWFudE1hbmFnZW1lbnQgPSBvVmlldy5nZXRWaWV3RGF0YSgpLnZhcmlhbnRNYW5hZ2VtZW50O1xuXHRcdGlmIChvVmFyaWFudElEcyAmJiBvVmFyaWFudElEcy5zUGFnZVZhcmlhbnRJZCAmJiBzVmFyaWFudE1hbmFnZW1lbnQgPT09IFwiUGFnZVwiKSB7XG5cdFx0XHRvVk0gPSBvVmlldy5ieUlkKFwiZmU6OlBhZ2VWYXJpYW50TWFuYWdlbWVudFwiKSBhcyBWYXJpYW50TWFuYWdlbWVudDtcblx0XHRcdHRoaXMuX2hhbmRsZVBhZ2VWYXJpYW50SWQob1ZhcmlhbnRJRHMsIG9WTSwgYVByb21pc2VzKTtcblx0XHR9IGVsc2UgaWYgKG9WYXJpYW50SURzICYmIHNWYXJpYW50TWFuYWdlbWVudCA9PT0gXCJDb250cm9sXCIpIHtcblx0XHRcdGlmIChvVmFyaWFudElEcy5zRmlsdGVyQmFyVmFyaWFudElkKSB7XG5cdFx0XHRcdG9WTSA9IChvVmlldy5nZXRDb250cm9sbGVyKCkgYXMgTGlzdFJlcG9ydENvbnRyb2xsZXIpLl9nZXRGaWx0ZXJCYXJWYXJpYW50Q29udHJvbCgpITtcblx0XHRcdFx0dGhpcy5faGFuZGxlRmlsdGVyQmFyVmFyaWFudENvbnRyb2xJZChvVmFyaWFudElEcywgb1ZNLCBhUHJvbWlzZXMpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoYVByb21pc2VzKTtcblx0fVxuXG5cdC8qXG5cdCAqIEhhbmRsZXMgcGFnZSBsZXZlbCB2YXJpYW50IGFuZCBwYXNzZXMgdGhlIHZhcmlhbnQgdG8gdGhlIGZ1bmN0aW9uIHRoYXQgcHVzaGVzIHRoZSBwcm9taXNlIHRvIHRoZSBwcm9taXNlIGFycmF5XG5cdCAqXG5cdCAqIEBwYXJhbSBvVmFyaW5hdElEcyBjb250YWlucyBhbiBvYmplY3Qgb2YgYWxsIHZhcmlhbnQgSURzXG5cdCAqIEBwYXJhbSBvVk0gY29udGFpbnMgdGhlIHZhaXJhbnQgbWFuYWdlbWVudCBvYmplY3QgZm9yIHRoZSBwYWdlIHZhcmlhbnRcblx0ICogQHBhcmFtIGFQcm9taXNlcyBpcyBhbiBhcnJheSBvZiBhbGwgcHJvbWlzZXNcblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9oYW5kbGVQYWdlVmFyaWFudElkKG9WYXJpYW50SURzOiBWYXJpYW50SURzLCBvVk06IFZhcmlhbnRNYW5hZ2VtZW50LCBhUHJvbWlzZXM6IFByb21pc2U8Ym9vbGVhbj5bXSk6IHZvaWQge1xuXHRcdG9WTS5nZXRWYXJpYW50cygpPy5mb3JFYWNoKChvVmFyaWFudDogVmFyaWFudE9iamVjdCkgPT4ge1xuXHRcdFx0dGhpcy5fZmluZEFuZFB1c2hWYXJpYW50VG9Qcm9taXNlKG9WYXJpYW50LCBvVmFyaWFudElEcy5zUGFnZVZhcmlhbnRJZCwgb1ZNLCBhUHJvbWlzZXMsIHRydWUpO1xuXHRcdH0pO1xuXHR9XG5cblx0Lypcblx0ICogSGFuZGxlcyBjb250cm9sIGxldmVsIHZhcmlhbnQgZm9yIGZpbHRlciBiYXIgYW5kIHBhc3NlcyB0aGUgdmFyaWFudCB0byB0aGUgZnVuY3Rpb24gdGhhdCBwdXNoZXMgdGhlIHByb21pc2UgdG8gdGhlIHByb21pc2UgYXJyYXlcblx0ICpcblx0ICogQHBhcmFtIG9WYXJpbmF0SURzIGNvbnRhaW5zIGFuIG9iamVjdCBvZiBhbGwgdmFyaWFudCBJRHNcblx0ICogQHBhcmFtIG9WTSBjb250YWlucyB0aGUgdmFpcmFudCBtYW5hZ2VtZW50IG9iamVjdCBmb3IgdGhlIGZpbHRlciBiYXJcblx0ICogQHBhcmFtIGFQcm9taXNlcyBpcyBhbiBhcnJheSBvZiBhbGwgcHJvbWlzZXNcblx0ICogQHByaXZhdGVcblx0ICovXG5cblx0X2hhbmRsZUZpbHRlckJhclZhcmlhbnRDb250cm9sSWQob1ZhcmlhbnRJRHM6IFZhcmlhbnRJRHMsIG9WTTogVmFyaWFudE1hbmFnZW1lbnQsIGFQcm9taXNlczogUHJvbWlzZTxib29sZWFuPltdKTogdm9pZCB7XG5cdFx0aWYgKG9WTSkge1xuXHRcdFx0b1ZNLmdldFZhcmlhbnRzKCkuZm9yRWFjaCgob1ZhcmlhbnQ6IFZhcmlhbnRPYmplY3QpID0+IHtcblx0XHRcdFx0dGhpcy5fZmluZEFuZFB1c2hWYXJpYW50VG9Qcm9taXNlKG9WYXJpYW50LCBvVmFyaWFudElEcy5zRmlsdGVyQmFyVmFyaWFudElkLCBvVk0sIGFQcm9taXNlcywgdHJ1ZSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKlxuXHQgKiBNYXRjaGVzIHRoZSB2YXJpYW50IElEIHByb3ZpZGVkIGluIHRoZSB1cmwgdG8gdGhlIGF2YWlsYWJsZSB2YWlyYW50IElEcyBhbmQgcHVzaGVzIHRoZSBhcHByb3ByaWF0ZSBwcm9taXNlIHRvIHRoZSBwcm9taXNlIGFycmF5XG5cdCAqXG5cdCAqIEBwYXJhbSBvVmFyaWFudCBpcyBhbiBvYmplY3QgZm9yIGEgc3BlY2lmaWMgdmFyaWFudFxuXHQgKiBAcGFyYW0gc1ZhcmlhbnRJZCBpcyB0aGUgdmFyaWFudCBJRCBwcm92aWRlZCBpbiB0aGUgdXJsXG5cdCAqIEBwYXJhbSBvVk0gaXMgdGhlIHZhcmlhbnQgbWFuYWdlbWVudCBvYmplY3QgZm9yIHRoZSBzcGVjZmljIHZhcmlhbnRcblx0ICogQHBhcmFtIGFQcm9taXNlcyBpcyBhbiBhcnJheSBvZiBwcm9taXNlc1xuXHQgKiBAcGFyYW0gYkZpbHRlclZhcmlhbnRBcHBsaWVkIGlzIGFuIG9wdGlvbmFsIHBhcmFtZXRlciB3aGljaCBpcyBzZXQgdG8gdHVyZSBpbiBjYXNlIHRoZSBmaWx0ZXIgdmFyaWFudCBpcyBhcHBsaWVkXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZmluZEFuZFB1c2hWYXJpYW50VG9Qcm9taXNlKFxuXHRcdC8vVGhpcyBmdW5jdGlvbiBmaW5kcyB0aGUgc3VpdGFibGUgdmFyaWFudCBmb3IgdGhlIHZhcmlhbnRJRCBwcm92aWRlZCBpbiB0aGUgdXJsIGFuZCBwdXNoZXMgdGhlbSB0byB0aGUgcHJvbWlzZSBhcnJheVxuXHRcdG9WYXJpYW50OiBWYXJpYW50T2JqZWN0LFxuXHRcdHNWYXJpYW50SWQ6IHN0cmluZyxcblx0XHRvVk06IFZhcmlhbnRNYW5hZ2VtZW50LFxuXHRcdGFQcm9taXNlczogUHJvbWlzZTxib29sZWFuPltdLFxuXHRcdGJGaWx0ZXJWYXJpYW50QXBwbGllZD86IGJvb2xlYW5cblx0KTogdm9pZCB7XG5cdFx0aWYgKG9WYXJpYW50LmtleSA9PT0gc1ZhcmlhbnRJZCkge1xuXHRcdFx0YVByb21pc2VzLnB1c2godGhpcy5fYXBwbHlDb250cm9sVmFyaWFudChvVk0sIHNWYXJpYW50SWQsIGJGaWx0ZXJWYXJpYW50QXBwbGllZCkpO1xuXHRcdH1cblx0fVxuXG5cdGFzeW5jIF9hcHBseUNvbnRyb2xWYXJpYW50KG9WYXJpYW50OiBWYXJpYW50TWFuYWdlbWVudCwgc1ZhcmlhbnRJRDogc3RyaW5nLCBiRmlsdGVyVmFyaWFudEFwcGxpZWQgPSBmYWxzZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGNvbnN0IHNWYXJpYW50UmVmZXJlbmNlID0gdGhpcy5fY2hlY2tJZlZhcmlhbnRJZElzQXZhaWxhYmxlKG9WYXJpYW50LCBzVmFyaWFudElEKSA/IHNWYXJpYW50SUQgOiBvVmFyaWFudC5nZXRTdGFuZGFyZFZhcmlhbnRLZXkoKTtcblx0XHRjb25zdCBvVk0gPSBDb250cm9sVmFyaWFudEFwcGx5QVBJLmFjdGl2YXRlVmFyaWFudCh7XG5cdFx0XHRlbGVtZW50OiBvVmFyaWFudCxcblx0XHRcdHZhcmlhbnRSZWZlcmVuY2U6IHNWYXJpYW50UmVmZXJlbmNlXG5cdFx0fSk7XG5cdFx0cmV0dXJuIG9WTS50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBiRmlsdGVyVmFyaWFudEFwcGxpZWQ7XG5cdFx0fSk7XG5cdH1cblxuXHRfY2hlY2tJZlZhcmlhbnRJZElzQXZhaWxhYmxlKG9WTTogVmFyaWFudE1hbmFnZW1lbnQsIHNWYXJpYW50SWQ6IHN0cmluZyB8IG51bGwpOiBib29sZWFuIHtcblx0XHRjb25zdCBhVmFyaWFudHMgPSBvVk0uZ2V0VmFyaWFudHMoKTtcblx0XHRsZXQgYklzQ29udHJvbFN0YXRlVmFyaWFudEF2YWlsYWJsZSA9IGZhbHNlO1xuXHRcdGFWYXJpYW50cy5mb3JFYWNoKGZ1bmN0aW9uIChvVmFyaWFudCkge1xuXHRcdFx0aWYgKG9WYXJpYW50LmdldEtleSgpID09PSBzVmFyaWFudElkKSB7XG5cdFx0XHRcdGJJc0NvbnRyb2xTdGF0ZVZhcmlhbnRBdmFpbGFibGUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBiSXNDb250cm9sU3RhdGVWYXJpYW50QXZhaWxhYmxlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBGaWx0ZXJCYXIgY29udHJvbC5cblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0aWQhOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIERlZmluZXMgdGhlIHJlbGF0aXZlIHBhdGggb2YgdGhlIHByb3BlcnR5IGluIHRoZSBtZXRhbW9kZWwsIGJhc2VkIG9uIHRoZSBjdXJyZW50IGNvbnRleHRQYXRoLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCIsXG5cdFx0ZXhwZWN0ZWRBbm5vdGF0aW9uczogW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uRmllbGRzXCJdLFxuXHRcdGV4cGVjdGVkVHlwZXM6IFtcIkVudGl0eVNldFwiLCBcIkVudGl0eVR5cGVcIl1cblx0fSlcblx0bWV0YVBhdGghOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIERlZmluZXMgdGhlIHBhdGggb2YgdGhlIGNvbnRleHQgdXNlZCBpbiB0aGUgY3VycmVudCBwYWdlIG9yIGJsb2NrLlxuXHQgKiBUaGlzIHNldHRpbmcgaXMgZGVmaW5lZCBieSB0aGUgZnJhbWV3b3JrLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCIsXG5cdFx0ZXhwZWN0ZWRUeXBlczogW1wiRW50aXR5U2V0XCIsIFwiRW50aXR5VHlwZVwiLCBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiXVxuXHR9KVxuXHRjb250ZXh0UGF0aCE6IHN0cmluZztcblxuXHQvKipcblx0ICogSWYgdHJ1ZSwgdGhlIHNlYXJjaCBpcyB0cmlnZ2VyZWQgYXV0b21hdGljYWxseSB3aGVuIGEgZmlsdGVyIHZhbHVlIGlzIGNoYW5nZWQuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pXG5cdGxpdmVNb2RlPzogYm9vbGVhbjtcblxuXHQvKipcblx0ICogUGFyYW1ldGVyIHdoaWNoIHNldHMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIEZpbHRlckJhciBidWlsZGluZyBibG9ja1xuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiwgZGVmYXVsdFZhbHVlOiB0cnVlIH0pXG5cdHZpc2libGU/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBEaXNwbGF5cyBwb3NzaWJsZSBlcnJvcnMgZHVyaW5nIHRoZSBzZWFyY2ggaW4gYSBtZXNzYWdlIGJveFxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiwgZGVmYXVsdFZhbHVlOiB0cnVlIH0pXG5cdHNob3dNZXNzYWdlcz86IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlICdDbGVhcicgYnV0dG9uIG9uIHRoZSBGaWx0ZXJCYXIuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pXG5cdHNob3dDbGVhckJ1dHRvbj86IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIEFnZ3JlZ2F0ZSBmaWx0ZXIgZmllbGRzIG9mIHRoZSBGaWx0ZXJCYXIgYnVpbGRpbmcgYmxvY2tcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QGFnZ3JlZ2F0aW9uKHsgdHlwZTogXCJzYXAuZmUubWFjcm9zLmZpbHRlckJhci5GaWx0ZXJGaWVsZFwiLCBtdWx0aXBsZTogdHJ1ZSB9KVxuXHRmaWx0ZXJGaWVsZHM/OiBGaWx0ZXJGaWVsZFtdO1xuXG5cdGNvbnRlbnQhOiBGaWx0ZXJCYXI7XG5cblx0LyoqXG5cdCAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgJ0dvJyBidXR0b24gaXMgcHJlc3NlZCBvciBhZnRlciBhIGNvbmRpdGlvbiBjaGFuZ2UuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBldmVudCgpXG5cdHNlYXJjaCE6IHN0cmluZztcblxuXHQvKipcblx0ICogVGhpcyBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSAnR28nIGJ1dHRvbiBpcyBwcmVzc2VkIG9yIGFmdGVyIGEgY29uZGl0aW9uIGNoYW5nZS4gVGhpcyBpcyBvbmx5IGludGVybmFsbHkgdXNlZCBieSBzYXAuZmUgKEZpb3JpIGVsZW1lbnRzKSBhbmRcblx0ICogZXhwb3NlcyBwYXJhbWV0ZXJzIGZyb20gaW50ZXJuYWwgTURDLUZpbHRlckJhciBzZWFyY2ggZXZlbnRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdEBldmVudCgpXG5cdGludGVybmFsU2VhcmNoITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIGFmdGVyIGVpdGhlciBhIGZpbHRlciB2YWx1ZSBvciB0aGUgdmlzaWJpbGl0eSBvZiBhIGZpbHRlciBpdGVtIGhhcyBiZWVuIGNoYW5nZWQuIFRoZSBldmVudCBjb250YWlucyBjb25kaXRpb25zIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBldmVudCgpXG5cdGZpbHRlckNoYW5nZWQhOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgJ0NsZWFyJyBidXR0b24gaXMgcHJlc3NlZC4gVGhpcyBpcyBvbmx5IHBvc3NpYmxlIHdoZW4gdGhlICdDbGVhcicgYnV0dG9uIGlzIGVuYWJsZWQuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBldmVudCgpXG5cdGFmdGVyQ2xlYXIhOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgYWZ0ZXIgZWl0aGVyIGEgZmlsdGVyIHZhbHVlIG9yIHRoZSB2aXNpYmlsaXR5IG9mIGEgZmlsdGVyIGl0ZW0gaGFzIGJlZW4gY2hhbmdlZC4gVGhlIGV2ZW50IGNvbnRhaW5zIGNvbmRpdGlvbnMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycy5cblx0ICogVGhpcyBpcyB1c2VkIGludGVybmFsbHkgb25seSBieSBzYXAuZmUgKEZpb3JpIEVsZW1lbnRzKS4gVGhpcyBleHBvc2VzIHBhcmFtZXRlcnMgZnJvbSB0aGUgTURDLUZpbHRlckJhciBmaWx0ZXJDaGFuZ2VkIGV2ZW50IHRoYXQgaXMgdXNlZCBieSBzYXAuZmUgaW4gc29tZSBjYXNlcy5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdEBldmVudCgpXG5cdGludGVybmFsRmlsdGVyQ2hhbmdlZCE6IHN0cmluZztcblxuXHRwcml2YXRlIHRlbGVtZXRyeT86IEZpbHRlckJhclRlbGVtZXRyeTtcblxuXHRjb25zdHJ1Y3Rvcihwcm9wcz86ICRDb250cm9sU2V0dGluZ3MgJiBQcm9wZXJ0aWVzT2Y8RmlsdGVyQmFyQVBJPiwgb3RoZXJzPzogJENvbnRyb2xTZXR0aW5ncykge1xuXHRcdHN1cGVyKHByb3BzLCBvdGhlcnMpO1xuXHRcdHRoaXMudGVsZW1ldHJ5ID0gbmV3IEZpbHRlckJhclRlbGVtZXRyeSh0aGlzKTtcblx0XHR0aGlzLmF0dGFjaFN0YXRlQ2hhbmdlSGFuZGxlcigpO1xuXHR9XG5cblx0cHJpdmF0ZSBhdHRhY2hTdGF0ZUNoYW5nZUhhbmRsZXIoKTogdm9pZCB7XG5cdFx0U3RhdGVVdGlsLmRldGFjaFN0YXRlQ2hhbmdlKHRoaXMuc3RhdGVDaGFuZ2VIYW5kbGVyKTtcblx0XHRTdGF0ZVV0aWwuYXR0YWNoU3RhdGVDaGFuZ2UodGhpcy5zdGF0ZUNoYW5nZUhhbmRsZXIpO1xuXHR9XG5cblx0c3RhdGVDaGFuZ2VIYW5kbGVyKG9FdmVudDogRXZlbnQ8eyBjb250cm9sOiBDb250cm9sIH0+KTogdm9pZCB7XG5cdFx0Y29uc3QgY29udHJvbCA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJjb250cm9sXCIpO1xuXHRcdGlmIChjb250cm9sLmlzQTxGaWx0ZXJCYXI+KFwic2FwLnVpLm1kYy5GaWx0ZXJCYXJcIikpIHtcblx0XHRcdGNvbnN0IGZpbHRlckJhckFQSSA9IGNvbnRyb2wuZ2V0UGFyZW50KCkgYXMgdW5rbm93biBhcyB7IGhhbmRsZVN0YXRlQ2hhbmdlPzogRnVuY3Rpb24gfTtcblx0XHRcdGlmIChmaWx0ZXJCYXJBUEk/LmhhbmRsZVN0YXRlQ2hhbmdlKSB7XG5cdFx0XHRcdGZpbHRlckJhckFQSS5oYW5kbGVTdGF0ZUNoYW5nZSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdEB4bWxFdmVudEhhbmRsZXIoKVxuXHRoYW5kbGVTZWFyY2gob0V2ZW50OiBGaWx0ZXJCYXJCYXNlJFNlYXJjaEV2ZW50KTogdm9pZCB7XG5cdFx0Y29uc3Qgb0ZpbHRlckJhciA9IG9FdmVudC5nZXRTb3VyY2UoKSBhcyBGaWx0ZXJCYXIgfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgZXZlbnRQYXJhbWV0ZXJzID0gb0V2ZW50LmdldFBhcmFtZXRlcnMoKTtcblx0XHRpZiAob0ZpbHRlckJhcikge1xuXHRcdFx0Y29uc3QgY29uZGl0aW9ucyA9IChvRmlsdGVyQmFyLmdldEZpbHRlckNvbmRpdGlvbnMoKSA/PyB7fSkgYXMgUmVjb3JkPHN0cmluZywgQ29uZGl0aW9uT2JqZWN0W10+O1xuXHRcdFx0Y29uc3QgcHJlcGFyZWRFdmVudFBhcmFtZXRlcnMgPSB0aGlzLl9wcmVwYXJlRXZlbnRQYXJhbWV0ZXJzKG9GaWx0ZXJCYXIpO1xuXHRcdFx0dGhpcy50ZWxlbWV0cnk/Lm9uU2VhcmNoKGV2ZW50UGFyYW1ldGVycywgY29uZGl0aW9ucyk7XG5cdFx0XHR0aGlzLmZpcmVFdmVudChcImludGVybmFsU2VhcmNoXCIsIG1lcmdlKHsgY29uZGl0aW9uczogY29uZGl0aW9ucyB9LCBldmVudFBhcmFtZXRlcnMpKTtcblx0XHRcdHRoaXMuZmlyZUV2ZW50KFwic2VhcmNoXCIsIG1lcmdlKHsgcmVhc29uOiBldmVudFBhcmFtZXRlcnMucmVhc29uIH0sIHByZXBhcmVkRXZlbnRQYXJhbWV0ZXJzKSk7XG5cdFx0XHR0aGlzLl9oYXNQZW5kaW5nRmlsdGVycyA9IGZhbHNlO1xuXHRcdFx0aWYgKCF0aGlzLmxpdmVNb2RlKSB7XG5cdFx0XHRcdHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKT8uZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRAeG1sRXZlbnRIYW5kbGVyKClcblx0aGFuZGxlRmlsdGVyQ2hhbmdlZChvRXZlbnQ6IEZpbHRlckJhckJhc2UkRmlsdGVyc0NoYW5nZWRFdmVudCk6IHZvaWQge1xuXHRcdGNvbnN0IGZpbHRlckJhciA9IG9FdmVudC5nZXRTb3VyY2UoKSBhcyBGaWx0ZXJCYXIgfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3Qgb0V2ZW50UGFyYW1ldGVycyA9IG9FdmVudC5nZXRQYXJhbWV0ZXJzKCk7XG5cdFx0aWYgKGZpbHRlckJhcikge1xuXHRcdFx0Y29uc3Qgb0NvbmRpdGlvbnMgPSBmaWx0ZXJCYXIuZ2V0RmlsdGVyQ29uZGl0aW9ucygpO1xuXHRcdFx0Y29uc3QgZXZlbnRQYXJhbWV0ZXJzOiBvYmplY3QgPSB0aGlzLl9wcmVwYXJlRXZlbnRQYXJhbWV0ZXJzKGZpbHRlckJhcik7XG5cdFx0XHR0aGlzLnRlbGVtZXRyeT8ub25GaWx0ZXJzQ2hhbmdlZCh0aGlzLl9nZXRGaWx0ZXJCYXJSZWFzb24oZmlsdGVyQmFyKSk7XG5cdFx0XHR0aGlzLmZpcmVFdmVudChcImludGVybmFsRmlsdGVyQ2hhbmdlZFwiLCBtZXJnZSh7IGNvbmRpdGlvbnM6IG9Db25kaXRpb25zIH0sIG9FdmVudFBhcmFtZXRlcnMpKTtcblx0XHRcdHRoaXMuZmlyZUV2ZW50KFwiZmlsdGVyQ2hhbmdlZFwiLCBldmVudFBhcmFtZXRlcnMpO1xuXHRcdFx0Ly8gU2V0IGhhc1BlbmRpbmdGaWx0ZXJzIHRvIHRydWUgb25seSBpZiBjb25kaXRpb25zQmFzZWQgaXMgdHJ1ZVxuXHRcdFx0aWYgKG9FdmVudFBhcmFtZXRlcnM/LmNvbmRpdGlvbnNCYXNlZCkge1xuXHRcdFx0XHR0aGlzLl9oYXNQZW5kaW5nRmlsdGVycyA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X2dldEZpbHRlckJhclJlYXNvbihmaWx0ZXJCYXI6IEZpbHRlckJhciAmIHsgX3NSZWFzb24/OiBzdHJpbmcgfSk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGZpbHRlckJhcj8uX3NSZWFzb24gPz8gXCJcIjtcblx0fVxuXG5cdF9wcmVwYXJlRXZlbnRQYXJhbWV0ZXJzKG9GaWx0ZXJCYXI6IEZpbHRlckJhcik6IFBhcnRpYWw8SW50ZXJuYWxCaW5kaW5nSW5mbz4ge1xuXHRcdGNvbnN0IHsgcGFyYW1ldGVycywgZmlsdGVycywgc2VhcmNoIH0gPSBGaWx0ZXJVdGlscy5nZXRGaWx0ZXJzKG9GaWx0ZXJCYXIgYXMgdW5rbm93biBhcyBJRmlsdGVyQ29udHJvbCkgfHwge307XG5cblx0XHRyZXR1cm4geyBwYXJhbWV0ZXJzLCBmaWx0ZXJzLCBzZWFyY2ggfTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIGZpbHRlciB2YWx1ZXMgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eSBpbiB0aGUgZmlsdGVyIGJhci5cblx0ICogVGhlIGZpbHRlciB2YWx1ZXMgY2FuIGJlIGVpdGhlciBhIHNpbmdsZSB2YWx1ZSBvciBhbiBhcnJheSBvZiB2YWx1ZXMuXG5cdCAqIEVhY2ggZmlsdGVyIHZhbHVlIG11c3QgYmUgcmVwcmVzZW50ZWQgYXMgYSBwcmltaXRpdmUgdmFsdWUuXG5cdCAqIEBwYXJhbSBzQ29uZGl0aW9uUGF0aCBUaGUgcGF0aCB0byB0aGUgcHJvcGVydHkgYXMgYSBjb25kaXRpb24gcGF0aFxuXHQgKiBAcGFyYW0gW3NPcGVyYXRvcl0gVGhlIG9wZXJhdG9yIHRvIGJlIHVzZWQgKG9wdGlvbmFsKSAtIGlmIG5vdCBzZXQsIHRoZSBkZWZhdWx0IG9wZXJhdG9yIChFUSkgd2lsbCBiZSB1c2VkXG5cdCAqIEBwYXJhbSB2VmFsdWVzIFRoZSB2YWx1ZXMgdG8gYmUgYXBwbGllZFxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgZm9yIGFzeW5jaHJvbm91cyBoYW5kbGluZ1xuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhc3luYyBzZXRGaWx0ZXJWYWx1ZXMoXG5cdFx0c0NvbmRpdGlvblBhdGg6IHN0cmluZyxcblx0XHRzT3BlcmF0b3I6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHR2VmFsdWVzPzogdW5kZWZpbmVkIHwgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IHN0cmluZ1tdIHwgbnVtYmVyW10gfCBib29sZWFuW11cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuXHRcdFx0dlZhbHVlcyA9IHNPcGVyYXRvcjtcblx0XHRcdHJldHVybiBGaWx0ZXJVdGlscy5zZXRGaWx0ZXJWYWx1ZXModGhpcy5jb250ZW50LCBzQ29uZGl0aW9uUGF0aCwgdlZhbHVlcyk7XG5cdFx0fVxuXHRcdHJldHVybiBGaWx0ZXJVdGlscy5zZXRGaWx0ZXJWYWx1ZXModGhpcy5jb250ZW50LCBzQ29uZGl0aW9uUGF0aCwgc09wZXJhdG9yLCB2VmFsdWVzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIEFjdGl2ZSBGaWx0ZXJzIFRleHQgU3VtbWFyeSBmb3IgdGhlIGZpbHRlciBiYXIuXG5cdCAqIEByZXR1cm5zIEFjdGl2ZSBmaWx0ZXJzIHN1bW1hcnkgYXMgdGV4dFxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRnZXRBY3RpdmVGaWx0ZXJzVGV4dCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLmNvbnRlbnQ/LmdldEFzc2lnbmVkRmlsdGVyc1RleHQoKT8uZmlsdGVyc1RleHQgfHwgXCJcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBQcm92aWRlcyBhbGwgdGhlIGZpbHRlcnMgdGhhdCBhcmUgY3VycmVudGx5IGFjdGl2ZVxuXHQgKiBhbG9uZyB3aXRoIHRoZSBzZWFyY2ggZXhwcmVzc2lvbi5cblx0ICogQHJldHVybnMgQW4gYXJyYXkgb2YgYWN0aXZlIGZpbHRlcnMgYW5kIHRoZSBzZWFyY2ggZXhwcmVzc2lvbi5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0Z2V0RmlsdGVycygpOiBvYmplY3Qge1xuXHRcdHJldHVybiBGaWx0ZXJVdGlscy5nZXRGaWx0ZXJzKHRoaXMuY29udGVudCBhcyBJRmlsdGVyQ29udHJvbCkgfHwge307XG5cdH1cblxuXHQvKipcblx0ICogVHJpZ2dlcnMgdGhlIEFQSSBzZWFyY2ggb24gdGhlIGZpbHRlciBiYXIuXG5cdCAqIEByZXR1cm5zIFJldHVybnMgYSBwcm9taXNlIHdoaWNoIHJlc29sdmVzIGlmIGZpbHRlciBnbyBpcyB0cmlnZ2VyZWQgc3VjY2Vzc2Z1bGx5OyBvdGhlcndpc2UgZ2V0cyByZWplY3RlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgdHJpZ2dlclNlYXJjaCgpOiBQcm9taXNlPG9iamVjdCB8IHVuZGVmaW5lZD4ge1xuXHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuY29udGVudDtcblx0XHR0cnkge1xuXHRcdFx0aWYgKGZpbHRlckJhcikge1xuXHRcdFx0XHRhd2FpdCBmaWx0ZXJCYXIud2FpdEZvckluaXRpYWxpemF0aW9uKCk7XG5cdFx0XHRcdHJldHVybiBhd2FpdCBmaWx0ZXJCYXIudHJpZ2dlclNlYXJjaCgpO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcblx0XHRcdExvZy5lcnJvcihgRkUgOiBCdWlsZGluZ2Jsb2NrIDogRmlsdGVyQmFyIDogJHttZXNzYWdlfWApO1xuXHRcdFx0dGhyb3cgRXJyb3IobWVzc2FnZSk7XG5cdFx0fVxuXHR9XG5cblx0aXNTZW1hbnRpY0RhdGVGaWx0ZXJBcHBsaWVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBTZW1hbnRpY0RhdGVPcGVyYXRvcnMuaGFzU2VtYW50aWNEYXRlT3BlcmF0aW9ucyh0aGlzLmNvbnRlbnQuZ2V0Q29uZGl0aW9ucygpLCBmYWxzZSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBzZWxlY3Rpb24gdmFyaWFudCBmcm9tIHRoZSBmaWx0ZXIgYmFyLlxuXHQgKiBOb3RlOiBUaGlzIG1ldGhvZCByZXR1cm5zIGFsbCB0aGUgZmlsdGVyIHZhbHVlcyB0aGF0IGFyZSBzZXQgaW4gdGhlIGZpbHRlciBiYXIsIGluY2x1ZGluZyB0aGUgdGV4dCBmcm9tIHRoZSBzZWFyY2ggZmllbGQgKHdpdGggJHNlYXJjaCBhcyB0aGUgcHJvcGVydHkgbmFtZSkuIEhvd2V2ZXIsIGl0IGRvZXNuJ3QgcmV0dXJuIGFueSBmaWx0ZXIgZmllbGQgY29uZGl0aW9uIHRoYXQgdXNlcyBhIGN1c3RvbSBvcGVyYXRvci5cblx0ICogQHJldHVybnMgQSBwcm9taXNlIHdoaWNoIHJlc29sdmVzIHdpdGggYSB7QGxpbmsgc2FwLmZlLm5hdmlnYXRpb24uU2VsZWN0aW9uVmFyaWFudH1cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgZ2V0U2VsZWN0aW9uVmFyaWFudCgpOiBQcm9taXNlPFNlbGVjdGlvblZhcmlhbnQ+IHtcblx0XHRjb25zdCBzZWxlY3Rpb25WYXJpYW50ID0gYXdhaXQgc3RhdGVIZWxwZXIuZ2V0U2VsZWN0aW9uVmFyaWFudCh0aGlzLmdldENvbnRlbnQoKSk7XG5cdFx0Y29uc3QgY29udHJvbGxlciA9IHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcjtcblx0XHRpZiAoY29udHJvbGxlciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCB2aWV3ID0gY29udHJvbGxlcj8uZ2V0VmlldygpLFxuXHRcdFx0XHRhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodmlldyksXG5cdFx0XHRcdG5hdmlnYXRpb25TZXJ2aWNlID0gYXBwQ29tcG9uZW50Py5nZXROYXZpZ2F0aW9uU2VydmljZSgpLFxuXHRcdFx0XHRkYXRhTW9kZWxPYmplY3QgPSB0aGlzLmdldERhdGFNb2RlbE9iamVjdEZvck1ldGFQYXRoKHRoaXMubWV0YVBhdGgpO1xuXHRcdFx0aWYgKGRhdGFNb2RlbE9iamVjdD8udGFyZ2V0RW50aXR5U2V0Py5uYW1lKSB7XG5cdFx0XHRcdGNvbnN0IHNDb250ZXh0VXJsID1cblx0XHRcdFx0XHRkYXRhTW9kZWxPYmplY3Q/LnRhcmdldEVudGl0eVNldD8ubmFtZSAmJlxuXHRcdFx0XHRcdG5hdmlnYXRpb25TZXJ2aWNlPy5jb25zdHJ1Y3RDb250ZXh0VXJsKGRhdGFNb2RlbE9iamVjdD8udGFyZ2V0RW50aXR5U2V0Py5uYW1lLCB2aWV3LmdldE1vZGVsKCkpO1xuXHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50LnNldEZpbHRlckNvbnRleHRVcmwoc0NvbnRleHRVcmwpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gc2VsZWN0aW9uVmFyaWFudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGxpc3Qgb2YgbWFuZGF0b3J5IGZpbHRlciBwcm9wZXJ0eSBuYW1lcy5cblx0ICogQHJldHVybnMgVGhlIGxpc3Qgb2YgbWFuZGF0b3J5IGZpbHRlciBwcm9wZXJ0eSBuYW1lc1xuXHQgKi9cblx0Z2V0TWFuZGF0b3J5RmlsdGVyUHJvcGVydHlOYW1lcygpOiBzdHJpbmdbXSB7XG5cdFx0cmV0dXJuICh0aGlzLmNvbnRlbnQuZ2V0UHJvcGVydHlJbmZvU2V0KCkgYXMgQ29udHJvbFByb3BlcnR5SW5mb1tdKVxuXHRcdFx0LmZpbHRlcihmdW5jdGlvbiAoZmlsdGVyUHJvcCkge1xuXHRcdFx0XHRyZXR1cm4gZmlsdGVyUHJvcC5yZXF1aXJlZDtcblx0XHRcdH0pXG5cdFx0XHQubWFwKGZ1bmN0aW9uIChyZXF1aXJlZFByb3ApIHtcblx0XHRcdFx0cmV0dXJuIHJlcXVpcmVkUHJvcC5jb25kaXRpb25QYXRoO1xuXHRcdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBmaWx0ZXIgYmFyIHBhcmFtZXRlcnMgZm9yIGEgcGFyYW1ldGVyaXplZCBzZXJ2aWNlLlxuXHQgKiBAcmV0dXJucyBBcnJheSBvZiBwYXJhbWV0ZXJzIGNvbmZpZ3VyZWQgaW4gYSBwYXJhbWV0ZXJpemVkIHNlcnZpY2Vcblx0ICovXG5cblx0Z2V0UGFyYW1ldGVycygpOiBzdHJpbmdbXSB7XG5cdFx0Y29uc3QgZmlsdGVyQmFyID0gdGhpcy5jb250ZW50O1xuXHRcdGNvbnN0IHBhcmFtZXRlcnMgPSBmaWx0ZXJCYXIuZGF0YShcInBhcmFtZXRlcnNcIik7XG5cdFx0aWYgKHBhcmFtZXRlcnMpIHtcblx0XHRcdHJldHVybiBBcnJheS5pc0FycmF5KHBhcmFtZXRlcnMpID8gcGFyYW1ldGVycyA6IEpTT04ucGFyc2UocGFyYW1ldGVycyk7XG5cdFx0fVxuXHRcdHJldHVybiBbXTtcblx0fVxuXG5cdGdldFZhcmlhbnQoKTogVmFyaWFudERhdGEgfCB1bmRlZmluZWQge1xuXHRcdGxldCBjdXJyZW50VmFyaWFudDtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgdmFyaWFudE1vZGVsID0gdGhpcy5nZXRNb2RlbChcIiRGbGV4VmFyaWFudHNcIikgYXMgVmFyaWFudE1vZGVsIHwgdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgdmFyaWFudEJhY2tSZWZlcmVuY2UgPSB0aGlzLmNvbnRlbnQuZ2V0VmFyaWFudEJhY2tyZWZlcmVuY2UoKTtcblxuXHRcdFx0aWYgKHZhcmlhbnRNb2RlbCAmJiB2YXJpYW50QmFja1JlZmVyZW5jZSkge1xuXHRcdFx0XHRjdXJyZW50VmFyaWFudCA9IHZhcmlhbnRNb2RlbC5nZXRWYXJpYW50KHZhcmlhbnRNb2RlbC5nZXRDdXJyZW50VmFyaWFudFJlZmVyZW5jZSh2YXJpYW50QmFja1JlZmVyZW5jZSkpO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdExvZy5kZWJ1ZyhcIkNvdWxkbid0IGZldGNoIHZhcmlhbnQgXCIsIGUgYXMgc3RyaW5nKTtcblx0XHR9XG5cdFx0cmV0dXJuIGN1cnJlbnRWYXJpYW50O1xuXHR9XG5cblx0LyoqXG5cdCAqIFNob3dzIG9yIGhpZGVzIGFueSBmaWx0ZXIgZmllbGQgZnJvbSB0aGUgZmlsdGVyIGJhci5cblx0ICogVGhlIHByb3BlcnR5IHdpbGwgbm90IGJlIGhpZGRlbiBpbnNpZGUgdGhlIGFkYXB0YXRpb24gZGlhbG9nIGFuZCBtYXkgYmUgcmUtYWRkZWQuXG5cdCAqIEBwYXJhbSBjb25kaXRpb25QYXRoIFRoZSBwYXRoIHRvIHRoZSBwcm9wZXJ0eSBhcyBhIGNvbmRpdGlvbiBwYXRoXG5cdCAqIEBwYXJhbSB2aXNpYmxlIFdoZXRoZXIgaXQgc2hvdWxkIGJlIHNob3duIG9yIGhpZGRlblxuXHQgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSByZXNvbHZpbmcgb25jZSB0aGUgY2hhbmdlIGluIHZpc2liaWxpdHkgd2FzIGFwcGxpZWRcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgc2V0RmlsdGVyRmllbGRWaXNpYmxlKGNvbmRpdGlvblBhdGg6IHN0cmluZywgdmlzaWJsZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGF3YWl0IFN0YXRlVXRpbC5hcHBseUV4dGVybmFsU3RhdGUodGhpcy5jb250ZW50LCB7IGl0ZW1zOiBbeyBuYW1lOiBjb25kaXRpb25QYXRoLCB2aXNpYmxlIH1dIH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHZpc2liaWxpdHkgb2YgYSBmaWx0ZXIgZmllbGQuXG5cdCAqIEBwYXJhbSBjb25kaXRpb25QYXRoIFRoZSBwYXRoIHRvIHRoZSBwcm9wZXJ0eSBhcyBhIGNvbmRpdGlvbiBwYXRoXG5cdCAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gY2hlY2sgd2hldGhlciB0aGUgZmlsdGVyIGZpZWxkIGlzIHZpc2libGUgb3Igbm90LlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhc3luYyBnZXRGaWx0ZXJGaWVsZFZpc2libGUoY29uZGl0aW9uUGF0aDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0Y29uc3Qgc3RhdGU6IEV4dGVybmFsU3RhdGVUeXBlID0gYXdhaXQgU3RhdGVVdGlsLnJldHJpZXZlRXh0ZXJuYWxTdGF0ZSh0aGlzLmNvbnRlbnQpO1xuXHRcdHJldHVybiAhIXN0YXRlLml0ZW1zLmZpbmQoKGl0ZW0pID0+IGl0ZW0ubmFtZSA9PT0gY29uZGl0aW9uUGF0aCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgYXNzb2NpYXRlZCB2YXJpYW50IG1hbmFnZW1lbnQuXG5cdCAqIEByZXR1cm5zIFRoZSB7QGxpbmsgc2FwLnVpLmZsLnZhcmlhbnRzLlZhcmlhbnRNYW5hZ2VtZW50fSBjb250cm9sIGFzc29jaWF0ZWQgd2l0aCB0aGUgZmlsdGVyIGJhci5cblx0ICovXG5cdGdldFZhcmlhbnRNYW5hZ2VtZW50KCk6IFZhcmlhbnRNYW5hZ2VtZW50IHtcblx0XHRjb25zdCB2YXJpYW50QmFja3JlZmVyZW5jZSA9IHRoaXMuY29udGVudC5nZXRWYXJpYW50QmFja3JlZmVyZW5jZSgpO1xuXHRcdGlmICh2YXJpYW50QmFja3JlZmVyZW5jZSkge1xuXHRcdFx0cmV0dXJuIFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQodmFyaWFudEJhY2tyZWZlcmVuY2UpIGFzIFZhcmlhbnRNYW5hZ2VtZW50O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYFZhcmlhbnQgYmFjayByZWZlcmVuY2Ugbm90IGRlZmluZWQgb24gdGhlIGZpbHRlciBiYXIgJHt0aGlzLmlkfWApO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSB2YXJpYW50IGJhY2sgcmVmZXJlbmNlIGFzc29jaWF0aW9uIGZvciB0aGlzIGluc3RhbmNlLlxuXHQgKiBAcGFyYW0gdmFyaWFudCBUaGUgYFZhcmlhbnRNYW5hZ2VtZW50YCBpbnN0YW5jZSB0byBzZXQgYXMgdGhlIGJhY2sgcmVmZXJlbmNlLlxuXHQgKi9cblx0c2V0VmFyaWFudEJhY2tSZWZlcmVuY2UodmFyaWFudDogVmFyaWFudE1hbmFnZW1lbnQpOiB2b2lkIHtcblx0XHRjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCkgYXMgRmlsdGVyQmFyO1xuXHRcdGNvbnN0IGlzTGl2ZU1vZGUgPSBjb250ZW50Py5nZXRMaXZlTW9kZT8uKCk7XG5cdFx0aWYgKCFpc0xpdmVNb2RlKSB7XG5cdFx0XHR0aGlzLmNvbnRlbnQuc2V0VmFyaWFudEJhY2tyZWZlcmVuY2UodmFyaWFudCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGtleSBvZiB0aGUgY3VycmVudCB2YXJpYW50IGluIHRoZSBhc3NvY2lhdGVkIHZhcmlhbnQgbWFuYWdlbWVudC5cblx0ICogQHJldHVybnMgS2V5IG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgdmFyaWFudC4gSW4gY2FzZSB0aGUgbW9kZWwgaXMgbm90IHlldCBzZXQsIGBudWxsYCB3aWxsIGJlIHJldHVybmVkLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRnZXRDdXJyZW50VmFyaWFudEtleSgpOiBzdHJpbmcgfCBudWxsIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWYXJpYW50TWFuYWdlbWVudCgpLmdldEN1cnJlbnRWYXJpYW50S2V5KCk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgbmV3IHNlbGVjdGVkIHZhcmlhbnQgaW4gdGhlIGFzc29jaWF0ZWQgdmFyaWFudCBtYW5hZ2VtZW50LlxuXHQgKiBAcGFyYW0ga2V5IEtleSBvZiB0aGUgdmFyaWFudCB0aGF0IHNob3VsZCBiZSBzZWxlY3RlZC4gSWYgdGhlIHBhc3NlZCBrZXkgZG9lc24ndCBpZGVudGlmeSBhIHZhcmlhbnQsIGl0IHdpbGwgYmUgaWdub3JlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0c2V0Q3VycmVudFZhcmlhbnRLZXkoa2V5OiBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zdCB2YXJpYW50TWFuYWdlbWVudCA9IHRoaXMuZ2V0VmFyaWFudE1hbmFnZW1lbnQoKTtcblx0XHR2YXJpYW50TWFuYWdlbWVudC5zZXRDdXJyZW50VmFyaWFudEtleShrZXkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGVuYWJsZW1lbnQgb2YgdGhlIGZpZWxkLlxuXHQgKiBAcGFyYW0gbmFtZSBOYW1lIG9mIHRoZSBmaWVsZCB0aGF0IHNob3VsZCBiZSBlbmFibGVkIG9yIGRpc2FibGVkLlxuXHQgKiBAcGFyYW0gZW5hYmxlZCBXaGV0aGVyIHRoZSBmaWVsZCBzaG91bGQgYmUgZW5hYmxlZCBvciBkaXNhYmxlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0c2V0RmlsdGVyRmllbGRFbmFibGVkKG5hbWU6IHN0cmluZywgZW5hYmxlZDogYm9vbGVhbik6IHZvaWQge1xuXHRcdCh0aGlzLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsKS5zZXREYXRhKFxuXHRcdFx0e1xuXHRcdFx0XHRbdGhpcy5jb250ZW50LmRhdGEoXCJsb2NhbElkXCIpXToge1xuXHRcdFx0XHRcdGZpbHRlckZpZWxkczogeyBbbmFtZV06IHsgZWRpdE1vZGU6IGVuYWJsZWQgPyBGaWVsZEVkaXRNb2RlLkVkaXRhYmxlIDogRmllbGRFZGl0TW9kZS5EaXNhYmxlZCB9IH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHRydWVcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgd2hldGhlciB0aGUgZmllbGQgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC5cblx0ICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgZmllbGQuXG5cdCAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGZpbHRlckZpZWxkIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGdldEZpbHRlckZpZWxkRW5hYmxlZChuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gKHRoaXMuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWwpLmdldFByb3BlcnR5KGAvJHt0aGlzLmNvbnRlbnQuZGF0YShcImxvY2FsSWRcIil9L2ZpbHRlckZpZWxkcy8ke25hbWV9L2VkaXRNb2RlYCkgPT09XG5cdFx0XHRGaWVsZEVkaXRNb2RlLkRpc2FibGVkXG5cdFx0XHQ/IGZhbHNlXG5cdFx0XHQ6IHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydCB7QGxpbmsgc2FwLmZlLm5hdmlnYXRpb24uU2VsZWN0aW9uVmFyaWFudH0gdG8gY29uZGl0aW9ucy5cblx0ICogQHBhcmFtIHNlbGVjdGlvblZhcmlhbnQgVGhlIHNlbGVjdGlvbiB2YXJpYW50IHRvIGFwcGx5IHRvIHRoZSBmaWx0ZXIgYmFyLlxuXHQgKiBAcGFyYW0gcHJlZmlsbERlc2NyaXB0aW9ucyBJZiB0cnVlLCB3ZSB0cnkgdG8gZmluZCB0aGUgYXNzb2NpYXRlZCBUZXh0IHZhbHVlIGZvciBlYWNoIHByb3BlcnR5IGluIHRoZSBzZWxlY3Rpb25WYXJpYW50ICh0byBhdm9pZCBmZXRjaGluZyBpdCBmcm9tIHRoZSBzZXJ2ZXIpXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSByZXNvbHZpbmcgdG8gY29uZGl0aW9uc1xuXHQgKi9cblx0YXN5bmMgY29udmVydFNlbGVjdGlvblZhcmlhbnRUb1N0YXRlRmlsdGVycyhcblx0XHRzZWxlY3Rpb25WYXJpYW50OiBTZWxlY3Rpb25WYXJpYW50LFxuXHRcdHByZWZpbGxEZXNjcmlwdGlvbnM6IGJvb2xlYW5cblx0KTogUHJvbWlzZTxTdGF0ZVV0aWxGaWx0ZXI+IHtcblx0XHRyZXR1cm4gc3RhdGVIZWxwZXIuY29udmVydFNlbGVjdGlvblZhcmlhbnRUb1N0YXRlRmlsdGVycyhcblx0XHRcdHRoaXMuY29udGVudCxcblx0XHRcdHNlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRwcmVmaWxsRGVzY3JpcHRpb25zLFxuXHRcdFx0dGhpcy5jb250ZW50Py5nZXRNb2RlbCgpXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbGVhcnMgYWxsIGlucHV0IHZhbHVlcyBvZiB2aXNpYmxlIGZpbHRlciBmaWVsZHMgaW4gdGhlIGZpbHRlciBiYXIgd2l0aCBmbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgdG8gY2xlYXIgRWRpdCBGaWx0ZXIgb3Igbm90LlxuXHQgKiBAcGFyYW0gZmlsdGVyQmFyIFRoZSBmaWx0ZXIgYmFyIHRoYXQgY29udGFpbnMgdGhlIGZpbHRlciBmaWVsZFxuXHQgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciBmaWx0ZXJpbmcgb24gdGhlIGZpbHRlciBiYXJcblx0ICogQHBhcmFtIG9wdGlvbnMuY2xlYXJFZGl0RmlsdGVyIFdoZXRoZXIgdG8gY2xlYXIgdGhlIGVkaXQgZmlsdGVyIG9yIGxldCBpdCBiZSBkZWZhdWx0IHZhbHVlICdBbGwnIGluc3RlYWRcblx0ICovXG5cdGFzeW5jIF9jbGVhckZpbHRlclZhbHVlc1dpdGhPcHRpb25zKGZpbHRlckJhcjogRmlsdGVyQmFyLCBvcHRpb25zPzogeyBjbGVhckVkaXRGaWx0ZXI6IGJvb2xlYW4gfSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGF3YWl0IHN0YXRlSGVscGVyLl9jbGVhckZpbHRlclZhbHVlc1dpdGhPcHRpb25zKGZpbHRlckJhciwgb3B0aW9ucyk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB7QGxpbmsgc2FwLmZlLm5hdmlnYXRpb24uU2VsZWN0aW9uVmFyaWFudH0gdG8gdGhlIGZpbHRlciBiYXIuIE5vdGU6IHNldFNlbGVjdGlvblZhcmlhbnQgd2lsbCBjbGVhciBleGlzdGluZyBmaWx0ZXJzIGFuZCB0aGVuIGFwcGx5IHRoZSBTZWxlY3Rpb25WYXJpYW50IHZhbHVlcy5cblx0ICogTm90ZTogVGhpcyBtZXRob2QgY2Fubm90IHNldCB0aGUgc2VhcmNoIGZpZWxkIHRleHQgb3IgYW55IGZpbHRlciBmaWVsZCBjb25kaXRpb24gdGhhdCByZWxpZXMgb24gYSBjdXN0b20gb3BlcmF0b3IuXG5cdCAqIEBwYXJhbSBzZWxlY3Rpb25WYXJpYW50IFRoZSB7QGxpbmsgc2FwLmZlLm5hdmlnYXRpb24uU2VsZWN0aW9uVmFyaWFudH0gdG8gYXBwbHkgdG8gdGhlIGZpbHRlciBiYXJcblx0ICogQHBhcmFtIHByZWZpbGxEZXNjcmlwdGlvbnMgT3B0aW9uYWwuIElmIHRydWUsIHdlIHdpbGwgdXNlIHRoZSBhc3NvY2lhdGVkIHRleHQgcHJvcGVydHkgdmFsdWVzIChpZiB0aGV5J3JlIGF2YWlsYWJsZSBpbiB0aGUgc2VsZWN0aW9uVmFyaWFudCkgdG8gZGlzcGxheSB0aGUgZmlsdGVyIHZhbHVlIGRlc2NyaXB0aW9ucywgaW5zdGVhZCBvZiBsb2FkaW5nIHRoZW0gZnJvbSB0aGUgYmFja2VuZFxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgZm9yIGFzeW5jaHJvbm91cyBoYW5kbGluZ1xuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhc3luYyBzZXRTZWxlY3Rpb25WYXJpYW50KHNlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQsIHByZWZpbGxEZXNjcmlwdGlvbnMgPSBmYWxzZSk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSBhcyBGaWx0ZXJCYXIgfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgaXNMaXZlTW9kZSA9IGNvbnRlbnQgJiYgY29udGVudD8uZ2V0TGl2ZU1vZGU/LigpO1xuXHRcdGxldCByZXN1bHQ6IHsgZGlmZlN0YXRlOiBFeHRlcm5hbFN0YXRlVHlwZTsgYXBwbHlTdGF0ZVJlc3VsdDogdW5rbm93biB9IHwgdW5kZWZpbmVkO1xuXHRcdGlmIChpc0xpdmVNb2RlKSB7XG5cdFx0XHRjb250ZW50LmVuYWJsZVJlcXVlc3RzKGZhbHNlKTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJlc3VsdCA9IGF3YWl0IHN0YXRlSGVscGVyLnNldFNlbGVjdGlvblZhcmlhbnRUb01kY0NvbnRyb2wodGhpcy5nZXRDb250ZW50KCksIHNlbGVjdGlvblZhcmlhbnQsIHByZWZpbGxEZXNjcmlwdGlvbnMpO1xuXHRcdFx0cmV0dXJuIHJlc3VsdD8uYXBwbHlTdGF0ZVJlc3VsdDtcblx0XHR9IGNhdGNoIChlcnI6IHVua25vd24pIHtcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG5cdFx0XHRMb2cuZXJyb3IoYEZFIDogQnVpbGRpbmdibG9jayA6IEZpbHRlckJhciA6ICR7bWVzc2FnZX1gKTtcblx0XHRcdHRocm93IEVycm9yKG1lc3NhZ2UpO1xuXHRcdH0gZmluYWxseSB7XG5cdFx0XHRpZiAoaXNMaXZlTW9kZSkge1xuXHRcdFx0XHRjb250ZW50LmVuYWJsZVJlcXVlc3RzKHRydWUsIHJlc3VsdD8uZGlmZlN0YXRlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2FsbGVkIGJ5IHRoZSBNREMgc3RhdGUgdXRpbCB3aGVuIHRoZSBzdGF0ZSBmb3IgdGhpcyBjb250cm9sJ3MgY2hpbGQgaGFzIGNoYW5nZWQuXG5cdCAqL1xuXHRoYW5kbGVTdGF0ZUNoYW5nZSgpOiB2b2lkIHtcblx0XHR0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk/LmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdH1cblxuXHRwcml2YXRlIGdldENvbmRpdGlvblBhdGgocHJvcGVydHlQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHByb3BlcnR5VGFyZ2V0T2JqZWN0UGF0aCA9IEZpbHRlclV0aWxzLmdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JQcm9wZXJ0eSh0aGlzLmNvbnRlbnQsIHByb3BlcnR5UGF0aCk7XG5cdFx0cmV0dXJuIChcblx0XHRcdChwcm9wZXJ0eVRhcmdldE9iamVjdFBhdGggPyBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKHByb3BlcnR5VGFyZ2V0T2JqZWN0UGF0aCwgZmFsc2UsIHRydWUpIDogdW5kZWZpbmVkKSA/P1xuXHRcdFx0cHJvcGVydHlQYXRoXG5cdFx0KTtcblx0fVxuXG5cdGFzeW5jIHNob3dGaWx0ZXJGaWVsZChuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzdGF0ZTogRXh0ZXJuYWxTdGF0ZVR5cGUgPSBhd2FpdCBTdGF0ZVV0aWwucmV0cmlldmVFeHRlcm5hbFN0YXRlKHRoaXMuY29udGVudCk7XG5cdFx0Y29uc3QgY29uZGl0aW9uUGF0aCA9IHRoaXMuZ2V0Q29uZGl0aW9uUGF0aChuYW1lKTtcblx0XHRjb25zdCB0YXJnZXRGaWx0ZXJGaWVsZCA9ICEhc3RhdGUuaXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS5uYW1lID09PSBjb25kaXRpb25QYXRoKTtcblx0XHRpZiAoIXRhcmdldEZpbHRlckZpZWxkKSB7XG5cdFx0XHRzdGF0ZS5pdGVtcy5wdXNoKHsgbmFtZTogY29uZGl0aW9uUGF0aCB9KTtcblx0XHR9XG5cdFx0YXdhaXQgU3RhdGVVdGlsLmFwcGx5RXh0ZXJuYWxTdGF0ZSh0aGlzLmNvbnRlbnQsIHN0YXRlKTtcblx0fVxuXG5cdGFzeW5jIG9wZW5WYWx1ZUhlbHBGb3JGaWx0ZXJGaWVsZChuYW1lOiBzdHJpbmcsIGlucHV0VmFsdWU/OiBzdHJpbmcpOiBQcm9taXNlPENvbmRpdGlvbk9iamVjdFtdPiB7XG5cdFx0Y29uc3QgY29uZGl0aW9uUGF0aCA9IHRoaXMuZ2V0Q29uZGl0aW9uUGF0aChuYW1lKTtcblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCBmaWx0ZXJGaWVsZCA9IHRoaXMuY29udGVudC5nZXRGaWx0ZXJJdGVtcygpLmZpbmQoKGl0ZW0pID0+IGl0ZW0uZ2V0UHJvcGVydHlLZXkoKSA9PT0gY29uZGl0aW9uUGF0aCk7XG5cdFx0XHRjb25zdCB2YWx1ZUhlbHAgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKGZpbHRlckZpZWxkPy5nZXRWYWx1ZUhlbHAoKSkgYXMgVmFsdWVIZWxwIHwgdW5kZWZpbmVkO1xuXHRcdFx0aWYgKCF2YWx1ZUhlbHAgfHwgIWZpbHRlckZpZWxkKSB7XG5cdFx0XHRcdHJlamVjdChuZXcgRXJyb3IoYFZhbHVlSGVscCBmb3IgZmlsdGVyIGZpZWxkICR7bmFtZX0gbm90IGZvdW5kYCkpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHZhbHVlSGVscC5hdHRhY2hFdmVudE9uY2UoXCJjbG9zZWRcIiwgKCkgPT4ge1xuXHRcdFx0XHRyZXNvbHZlKHZhbHVlSGVscC5nZXRDb25kaXRpb25zKCkgYXMgQ29uZGl0aW9uT2JqZWN0W10pO1xuXHRcdFx0fSk7XG5cblx0XHRcdChmaWx0ZXJGaWVsZCBhcyB1bmtub3duIGFzIHsgX29Gb2N1c0luZm86IG9iamVjdCB9KS5fb0ZvY3VzSW5mbyA9IHsgdGFyZ2V0SW5mbzogeyBzaWxlbnQ6IHRydWUgfSB9O1xuXHRcdFx0KGZpbHRlckZpZWxkIGFzIHVua25vd24gYXMgeyBvbmZvY3VzaW4/OiBGdW5jdGlvbiB9KS5vbmZvY3VzaW4/LihuZXcgalF1ZXJ5LkV2ZW50KFwiZm9jdXNpblwiKSk7XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0KGZpbHRlckZpZWxkLmdldEFnZ3JlZ2F0aW9uKFwiX2NvbnRlbnRcIikgYXMgSW5wdXRbXSlbMF0uZmlyZVZhbHVlSGVscFJlcXVlc3Qoe1xuXHRcdFx0XHRcdGZyb21LZXlib2FyZDogdHJ1ZSxcblx0XHRcdFx0XHRfdXNlcklucHV0VmFsdWU6IGlucHV0VmFsdWVcblx0XHRcdFx0fSBhcyB1bmtub3duIGFzIElucHV0JFZhbHVlSGVscFJlcXVlc3RFdmVudFBhcmFtZXRlcnMpO1xuXHRcdFx0fSwgMjAwKTtcblx0XHR9KTtcblx0fVxuXG5cdGdldENvbGxhcHNlZEZpbHRlcnNUZXh0KCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuY29udGVudD8uZ2V0QXNzaWduZWRGaWx0ZXJzVGV4dCgpPy5maWx0ZXJzVGV4dDtcblx0fVxufVxuZXhwb3J0IGRlZmF1bHQgRmlsdGVyQmFyQVBJO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFnREE7RUFBQSxJQUNNQSxrQkFBa0I7SUFLdkIsU0FBQUEsbUJBQTZCQyxZQUEwQixFQUFFO01BQUEsS0FKakRDLGtCQUFrQixHQUFHLENBQUM7TUFBQSxLQUV0QkMsbUJBQW1CLEdBQUcsQ0FBQztNQUFBLEtBRUZGLFlBQTBCLEdBQTFCQSxZQUEwQjtJQUFHO0lBQUMsSUFBQUcsTUFBQSxHQUFBSixrQkFBQSxDQUFBSyxTQUFBO0lBQUFELE1BQUEsQ0FFM0RFLGdCQUFnQixHQUFoQixTQUFBQSxnQkFBZ0JBLENBQUNDLE1BQWUsRUFBUTtNQUN2QyxJQUFJQSxNQUFNLEtBQUssU0FBUyxFQUFFO1FBQ3pCLElBQUksQ0FBQ0osbUJBQW1CLEVBQUU7TUFDM0IsQ0FBQyxNQUFNO1FBQ04sSUFBSSxDQUFDRCxrQkFBa0IsRUFBRTtNQUMxQjtJQUNELENBQUM7SUFBQUUsTUFBQSxDQUVESSxRQUFRLEdBQVIsU0FBQUEsUUFBUUEsQ0FBQ0MsZUFBb0MsRUFBRUMsVUFBNkMsRUFBUTtNQUNuRyxNQUFNQyxXQUFXLEdBQUcsSUFBSSxDQUFDQyw0QkFBNEIsQ0FBQ0YsVUFBVSxDQUFDO01BQ2pFLElBQUksQ0FBQ1QsWUFBWSxDQUFDWSxpQkFBaUIsQ0FBQyxDQUFDLEVBQUVDLFNBQVMsQ0FBQ0MsV0FBVyxDQUFDO1FBQzVEQyxJQUFJLEVBQUUsb0JBQW9CO1FBQzFCQyxVQUFVLEVBQUU7VUFDWGYs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
|
|
1045
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWx0ZXJCYXJUZWxlbWV0cnkiLCJmaWx0ZXJCYXJBUEkiLCJjb3VudEZpbHRlckFjdGlvbnMiLCJjb3VudFZhcmlhbnRGaWx0ZXJzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwib25GaWx0ZXJzQ2hhbmdlZCIsInJlYXNvbiIsIm9uU2VhcmNoIiwiZXZlbnRQYXJhbWV0ZXJzIiwiY29uZGl0aW9ucyIsImZpbHRlck5hbWVzIiwiZ2V0RmlsdGVyTmFtZXNGcm9tQ29uZGl0aW9ucyIsImdldFBhZ2VDb250cm9sbGVyIiwidGVsZW1ldHJ5Iiwic3RvcmVBY3Rpb24iLCJ0eXBlIiwicGFyYW1ldGVycyIsImNvdW50RmlsdGVycyIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJ2YXJpYW50TGF5ZXIiLCJnZXRWYXJpYW50IiwibGF5ZXIiLCJhdXRvTG9hZCIsInNlYXJjaFVzZWQiLCIkc2VhcmNoIiwiZm9yRWFjaCIsImNvbmRpdGlvbiIsIlZhcmlhbnRNYW5hZ2VtZW50VHlwZSIsIkRJU1BMQVlfQ1VSUkVOQ1lfUFJPUEVSVFlfTkFNRSIsIlBfRElTUExBWV9DVVJSRU5DWV9QUk9QRVJUWV9OQU1FIiwiRmlsdGVyQmFyQVBJIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwicmV0dXJuVHlwZXMiLCJfZGVjMiIsIm1peGluIiwiRmlsdGVyQmFyQVBJU3RhdGVIYW5kbGVyIiwiX2RlYzMiLCJjb250cm9sbGVyRXh0ZW5zaW9uSGFuZGxlciIsIl9kZWM0IiwiX2RlYzUiLCJwcm9wZXJ0eSIsIl9kZWM2IiwiZXhwZWN0ZWRBbm5vdGF0aW9ucyIsImV4cGVjdGVkVHlwZXMiLCJfZGVjNyIsIl9kZWM4IiwiZGVmYXVsdFZhbHVlIiwiX2RlYzkiLCJfZGVjMTAiLCJfZGVjMTEiLCJfZGVjMTIiLCJhZ2dyZWdhdGlvbiIsIm11bHRpcGxlIiwiX2RlYzEzIiwiZXZlbnQiLCJfZGVjMTQiLCJfZGVjMTUiLCJfZGVjMTYiLCJfZGVjMTciLCJfZGVjMTgiLCJ4bWxFdmVudEhhbmRsZXIiLCJfZGVjMTkiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX01hY3JvQVBJIiwicHJvcHMiLCJvdGhlcnMiLCJfdGhpcyIsImNhbGwiLCJpbml0aWFsQ29udHJvbFN0YXRlIiwiX2luaXRpYWxTdGF0ZVByb21pc2UiLCJQcm9taXNlS2VlcGVyIiwiX2JTZWFyY2hUcmlnZ2VyZWQiLCJfaGFzUGVuZGluZ0ZpbHRlcnMiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiX2Rlc2NyaXB0b3I3IiwiX2Rlc2NyaXB0b3I4IiwiX2Rlc2NyaXB0b3I5IiwiX2Rlc2NyaXB0b3IxMCIsIl9kZXNjcmlwdG9yMTEiLCJfZGVzY3JpcHRvcjEyIiwiX2Rlc2NyaXB0b3IxMyIsImF0dGFjaFN0YXRlQ2hhbmdlSGFuZGxlciIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvMiIsInJldHJpZXZlQWRkaXRpb25hbFN0YXRlcyIsImFkZGl0aW9uYWxTdGF0ZXMiLCJnZXRJZCIsImRhdGFMb2FkZWQiLCJhcHBseUFkZGl0aW9uYWxTdGF0ZXMiLCJpbnN0YW5jZVN0YXRlIiwiaW5zdGFuY2VEYXRhTG9hZGVkIiwidW5kZWZpbmVkIiwicGFyZW50RGF0YUxvYWRlZCIsInRyaWdnZXJTZWFyY2giLCJjb250ZW50Iiwid2FpdEZvckluaXRpYWxTdGF0ZSIsInByb21pc2UiLCJnZXRDb250cm9sU3RhdGUiLCJjb250cm9sU3RhdGUiLCJmdWxsU3RhdGUiLCJpbml0aWFsU3RhdGUiLCJpc1NlYXJjaFRyaWdnZXJlZEJ5SW5pdGlhbExvYWQiLCJuYXZpZ2F0aW9uVHlwZSIsImNvbnRyb2xsZXIiLCJ2aWV3IiwiZ2V0VmlldyIsInZpZXdEYXRhIiwiZ2V0Vmlld0RhdGEiLCJ2YXJpYW50TWFuYWdlbWVudCIsIkNvbnRyb2wiLCJfZ2V0RmlsdGVyQmFyVmFyaWFudENvbnRyb2wiLCJieUlkIiwiY3VycmVudFZhcmlhbnRLZXkiLCJnZXRDdXJyZW50VmFyaWFudEtleSIsIk5hdlR5cGUiLCJ4QXBwU3RhdGUiLCJpbml0aWFsTG9hZCIsIkluaXRpYWxMb2FkTW9kZSIsIkVuYWJsZWQiLCJfc2hvdWxkQXV0b1RyaWdnZXJTZWFyY2giLCJfZ2V0RmlsdGVyQmFyVk0iLCJfZ2V0QXBwbHlBdXRvbWF0aWNhbGx5T25WYXJpYW50IiwiX2FwcGx5U2VsZWN0aW9uVmFyaWFudCIsIm5hdmlnYXRpb25QYXJhbWV0ZXIiLCJmaWx0ZXJWYXJpYW50QXBwbGllZCIsImZpbHRlckJhciIsImdldENvbnRlbnQiLCJzZWxlY3Rpb25WYXJpYW50Iiwic3YiLCJzZWxlY3Rpb25WYXJpYW50RGVmYXVsdHMiLCJzdkRlZmF1bHRzIiwicmVxdWlyZXNTdGFuZGFyZFZhcmlhbnQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInNob3VsZEFwcGx5QXBwU3RhdGUiLCJfYWN0aXZhdGVWYXJpYW50QW5kRGV0ZXJtaW5lQXBwbHlBcHBTdGF0ZSIsIl9hZGREZWZhdWx0RGlzcGxheUN1cnJlbmN5VG9TViIsInN2RGVmYXVsdHNBcmVQcmVzZW50IiwiZ2V0U2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMiLCJzdGRWYXJpYW50SXNEZWZhdWx0VmFyaWFudCIsImdldERlZmF1bHRWYXJpYW50S2V5IiwiZ2V0U3RhbmRhcmRWYXJpYW50S2V5IiwidXNlRkxQRGVmYXVsdFZhbHVlcyIsImdldFBhcmVudCIsInN2VG9TZXQiLCJfZ2V0QWRqdXN0ZWRTViIsInNldFNlbGVjdGlvblZhcmlhbnQiLCJfZW5hYmxlRmlsdGVyQmFyIiwiZmlsdGVyQmFyQ29udHJvbCIsInByZXZlbnRJbml0aWFsU2VhcmNoIiwiZm5PblNlYXJjaCIsImdldFN1c3BlbmRTZWxlY3Rpb24iLCJhdHRhY2hFdmVudE9uY2UiLCJlbmFibGVSZXF1ZXN0cyIsImFwcFN0YXRlU1YiLCJhZGp1c3RlZFNWIiwiU2VsZWN0aW9uVmFyaWFudCIsInRvSlNPTk9iamVjdCIsImFscmVhZHlBcHBsaWVkU1YiLCJnZXRTZWxlY3Rpb25WYXJpYW50IiwiYXBwbGllZFNlbE9wdE5hbWVzIiwicmVkdWNlIiwic3ZDb3B5Iiwic2VsT3B0aW9uTmFtZSIsInN2U2VsT3B0cyIsImdldFNlbGVjdE9wdGlvbiIsInNlbGVjdE9wdGlvbnMiLCJtYXNzQWRkU2VsZWN0T3B0aW9uIiwiX3ByZXZlbnRJbml0aWFsU2VhcmNoIiwiYVZhcmlhbnRzIiwiZ2V0VmFyaWFudHMiLCJvQ3VycmVudFZhcmlhbnQiLCJmaW5kIiwiaXRlbSIsImdldEtleSIsImV4ZWN1dGVPblNlbGVjdCIsImlzRW1wdHkiLCJtZXRhTW9kZWwiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsImNvbnRleHRQYXRoIiwiZW50aXR5U2V0IiwibWV0YUNvbnRleHQiLCJnZXRNZXRhQ29udGV4dCIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJkaXNwbGF5Q3VycmVuY3lQcm9wZXJ0eU5hbWUiLCJnZXREaXNwbGF5Q3VycmVuY3lQcm9wZXJ0eU5hbWUiLCJkaXNwbGF5Q3VycmVuY3lJc01hbmRhdG9yeSIsIl9jaGVja0lmRGlzcGxheUN1cnJlbmN5SXNSZXF1aXJlZCIsInN2T3B0aW9ucyIsImRlZmF1bHRTVk9wdGlvbnMiLCJkaXNwbGF5Q3VycmVuY3lEZWZhdWx0RXhpc3RzIiwibm9TVkRpc3BsYXlDdXJyZW5jeUV4aXN0cyIsImRpc3BsYXlDdXJyZW5jeVNlbGVjdE9wdGlvbiIsInNpZ24iLCJvcHRpb24iLCJsb3ciLCJoaWdoIiwiYWRkU2VsZWN0T3B0aW9uIiwiaXNQYXJhbWV0ZXJpemVkIiwic3RhcnRpbmdFbnRpdHlTZXQiLCJlbnRpdHlUeXBlIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJSZXN1bHRDb250ZXh0IiwiZW50aXR5UHJvcGVydGllcyIsInNvbWUiLCJwYXJhbWV0ZXIiLCJuYW1lIiwiX3R5cGUiLCJyZXF1aXJlZFByb3BlcnRpZXMiLCJDYXBhYmlsaXRpZXMiLCJGaWx0ZXJSZXN0cmljdGlvbnMiLCJSZXF1aXJlZFByb3BlcnRpZXMiLCJyZXF1aXJlZFByb3BlcnR5IiwidmFsdWUiLCJyZXFTdGRWYXJpYW50IiwidmFyaWFudEtleSIsIkNvbnRyb2xWYXJpYW50QXBwbHlBUEkiLCJhY3RpdmF0ZVZhcmlhbnQiLCJlbGVtZW50IiwidmFyaWFudFJlZmVyZW5jZSIsIlBhZ2UiLCJnZXRDb250cm9sbGVyIiwiTm9uZSIsImhhbmRsZVZhcmlhbnRJZFBhc3NlZFZpYVVSTFBhcmFtcyIsIm9VcmxQYXJhbXMiLCJhUGFnZVZhcmlhbnRJZCIsImFGaWx0ZXJCYXJWYXJpYW50SWQiLCJhVGFibGVWYXJpYW50SWQiLCJhQ2hhcnRWYXJpYW50SWQiLCJvVmFyaWFudElEcyIsInNQYWdlVmFyaWFudElkIiwic0ZpbHRlckJhclZhcmlhbnRJZCIsInNUYWJsZVZhcmlhbnRJZCIsInNDaGFydFZhcmlhbnRJZCIsIl9oYW5kbGVDb250cm9sVmFyaWFudElkIiwib1ZNIiwib1ZpZXciLCJhUHJvbWlzZXMiLCJzVmFyaWFudE1hbmFnZW1lbnQiLCJfaGFuZGxlUGFnZVZhcmlhbnRJZCIsIl9oYW5kbGVGaWx0ZXJCYXJWYXJpYW50Q29udHJvbElkIiwiYWxsIiwib1ZhcmlhbnQiLCJfZmluZEFuZFB1c2hWYXJpYW50VG9Qcm9taXNlIiwic1ZhcmlhbnRJZCIsImJGaWx0ZXJWYXJpYW50QXBwbGllZCIsImtleSIsInB1c2giLCJfYXBwbHlDb250cm9sVmFyaWFudCIsInNWYXJpYW50SUQiLCJhcmd1bWVudHMiLCJzVmFyaWFudFJlZmVyZW5jZSIsIl9jaGVja0lmVmFyaWFudElkSXNBdmFpbGFibGUiLCJ0aGVuIiwiYklzQ29udHJvbFN0YXRlVmFyaWFudEF2YWlsYWJsZSIsIlN0YXRlVXRpbCIsImRldGFjaFN0YXRlQ2hhbmdlIiwic3RhdGVDaGFuZ2VIYW5kbGVyIiwiYXR0YWNoU3RhdGVDaGFuZ2UiLCJvRXZlbnQiLCJjb250cm9sIiwiZ2V0UGFyYW1ldGVyIiwiaXNBIiwiaGFuZGxlU3RhdGVDaGFuZ2UiLCJoYW5kbGVTZWFyY2giLCJpbmxpbmVFZGl0RmxvdyIsImlubGluZUVkaXREaXNjYXJkIiwib0ZpbHRlckJhciIsImdldFNvdXJjZSIsImdldFBhcmFtZXRlcnMiLCJnZXRGaWx0ZXJDb25kaXRpb25zIiwicHJlcGFyZWRFdmVudFBhcmFtZXRlcnMiLCJfcHJlcGFyZUV2ZW50UGFyYW1ldGVycyIsImZpcmVFdmVudCIsIm1lcmdlIiwibGl2ZU1vZGUiLCJnZXRFeHRlbnNpb25BUEkiLCJ1cGRhdGVBcHBTdGF0ZSIsImhhbmRsZUZpbHRlckNoYW5nZWQiLCJvRXZlbnRQYXJhbWV0ZXJzIiwiZ2V0TGl2ZU1vZGUiLCJVT01WYWxpZGF0aW9uRGVsZWdhdGUiLCJ2YWxpZGF0ZUFsbFVPTUZpZWxkcyIsIm9Db25kaXRpb25zIiwiX2dldEZpbHRlckJhclJlYXNvbiIsImNvbmRpdGlvbnNCYXNlZCIsIl9zUmVhc29uIiwiZmlsdGVycyIsInNlYXJjaCIsIkZpbHRlclV0aWxzIiwiZ2V0RmlsdGVycyIsInNldEZpbHRlclZhbHVlcyIsInNDb25kaXRpb25QYXRoIiwic09wZXJhdG9yIiwidlZhbHVlcyIsImdldEFjdGl2ZUZpbHRlcnNUZXh0IiwiZ2V0QXNzaWduZWRGaWx0ZXJzVGV4dCIsImZpbHRlcnNUZXh0Iiwid2FpdEZvckluaXRpYWxpemF0aW9uIiwiZXJyIiwibWVzc2FnZSIsIkVycm9yIiwiU3RyaW5nIiwiTG9nIiwiZXJyb3IiLCJpc1NlbWFudGljRGF0ZUZpbHRlckFwcGxpZWQiLCJTZW1hbnRpY0RhdGVPcGVyYXRvcnMiLCJoYXNTZW1hbnRpY0RhdGVPcGVyYXRpb25zIiwiZ2V0Q29uZGl0aW9ucyIsInN0YXRlSGVscGVyIiwiYXBwQ29tcG9uZW50IiwiQ29tbW9uVXRpbHMiLCJnZXRBcHBDb21wb25lbnQiLCJuYXZpZ2F0aW9uU2VydmljZSIsImdldE5hdmlnYXRpb25TZXJ2aWNlIiwiZGF0YU1vZGVsT2JqZWN0IiwiZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGgiLCJtZXRhUGF0aCIsInRhcmdldEVudGl0eVNldCIsInNDb250ZXh0VXJsIiwiY29uc3RydWN0Q29udGV4dFVybCIsInNldEZpbHRlckNvbnRleHRVcmwiLCJnZXRNYW5kYXRvcnlGaWx0ZXJQcm9wZXJ0eU5hbWVzIiwiZ2V0UHJvcGVydHlJbmZvU2V0IiwiZmlsdGVyIiwiZmlsdGVyUHJvcCIsInJlcXVpcmVkIiwibWFwIiwicmVxdWlyZWRQcm9wIiwiY29uZGl0aW9uUGF0aCIsImRhdGEiLCJBcnJheSIsImlzQXJyYXkiLCJKU09OIiwicGFyc2UiLCJjdXJyZW50VmFyaWFudCIsInZhcmlhbnRNb2RlbCIsInZhcmlhbnRCYWNrUmVmZXJlbmNlIiwiZ2V0VmFyaWFudEJhY2tyZWZlcmVuY2UiLCJnZXRDdXJyZW50VmFyaWFudFJlZmVyZW5jZSIsImUiLCJkZWJ1ZyIsInNldEZpbHRlckZpZWxkVmlzaWJsZSIsInZpc2libGUiLCJhcHBseUV4dGVybmFsU3RhdGUiLCJpdGVtcyIsImdldEZpbHRlckZpZWxkVmlzaWJsZSIsInN0YXRlIiwicmV0cmlldmVFeHRlcm5hbFN0YXRlIiwiZ2V0VmFyaWFudE1hbmFnZW1lbnQiLCJ2YXJpYW50QmFja3JlZmVyZW5jZSIsIlVJNUVsZW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImlkIiwic2V0VmFyaWFudEJhY2tSZWZlcmVuY2UiLCJ2YXJpYW50IiwiaXNMaXZlTW9kZSIsInNldFZhcmlhbnRCYWNrcmVmZXJlbmNlIiwic2V0Q3VycmVudFZhcmlhbnRLZXkiLCJzZXRGaWx0ZXJGaWVsZEVuYWJsZWQiLCJlbmFibGVkIiwiZ2V0SW50ZXJuYWxNb2RlbCIsInNldERhdGEiLCJmaWx0ZXJGaWVsZHMiLCJlZGl0TW9kZSIsIkZpZWxkRWRpdE1vZGUiLCJFZGl0YWJsZSIsIkRpc2FibGVkIiwiZ2V0RmlsdGVyRmllbGRFbmFibGVkIiwiZ2V0UHJvcGVydHkiLCJjb252ZXJ0U2VsZWN0aW9uVmFyaWFudFRvU3RhdGVGaWx0ZXJzIiwicHJlZmlsbERlc2NyaXB0aW9ucyIsIl9jbGVhckZpbHRlclZhbHVlc1dpdGhPcHRpb25zIiwib3B0aW9ucyIsImZyb21OYXZpZ2F0aW9uUGFyYW1ldGVycyIsInJlc3VsdCIsInNldFNlbGVjdGlvblZhcmlhbnRUb01kY0NvbnRyb2wiLCJhcHBseVN0YXRlUmVzdWx0IiwiZGlmZlN0YXRlIiwiZ2V0Q29uZGl0aW9uUGF0aCIsInByb3BlcnR5UGF0aCIsInByb3BlcnR5VGFyZ2V0T2JqZWN0UGF0aCIsImdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JQcm9wZXJ0eSIsImdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJzaG93RmlsdGVyRmllbGQiLCJ0YXJnZXRGaWx0ZXJGaWVsZCIsIm9wZW5WYWx1ZUhlbHBGb3JGaWx0ZXJGaWVsZCIsImlucHV0VmFsdWUiLCJyZWplY3QiLCJmaWx0ZXJGaWVsZCIsImdldEZpbHRlckl0ZW1zIiwiZ2V0UHJvcGVydHlLZXkiLCJ2YWx1ZUhlbHAiLCJnZXRWYWx1ZUhlbHAiLCJfb0ZvY3VzSW5mbyIsInRhcmdldEluZm8iLCJzaWxlbnQiLCJvbmZvY3VzaW4iLCJqUXVlcnkiLCJFdmVudCIsInNldFRpbWVvdXQiLCJnZXRBZ2dyZWdhdGlvbiIsImZpcmVWYWx1ZUhlbHBSZXF1ZXN0IiwiZnJvbUtleWJvYXJkIiwiX3VzZXJJbnB1dFZhbHVlIiwiZ2V0Q29sbGFwc2VkRmlsdGVyc1RleHQiLCJNYWNyb0FQSSIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRmlsdGVyQmFyQVBJLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW50aXR5U2V0LCBQcm9wZXJ0eSwgUHJvcGVydHlQYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IHR5cGUgeyBFdmVudHNPZiwgUHJvcGVydGllc09mIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgYWdncmVnYXRpb24sIGRlZmluZVVJNUNsYXNzLCBldmVudCwgbWl4aW4sIHByb3BlcnR5LCB4bWxFdmVudEhhbmRsZXIgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBjb250cm9sbGVyRXh0ZW5zaW9uSGFuZGxlciB9IGZyb20gXCJzYXAvZmUvYmFzZS9Ib29rU3VwcG9ydFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sU3RhdGUsIExlZ2FjeUZpbHRlckJhclN0YXRlLCBOYXZpZ2F0aW9uUGFyYW1ldGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1ZpZXdTdGF0ZVwiO1xuaW1wb3J0IHsgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgUHJvbWlzZUtlZXBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Qcm9taXNlS2VlcGVyXCI7XG5pbXBvcnQgeyBJbml0aWFsTG9hZE1vZGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCBNYWNyb0FQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9NYWNyb0FQSVwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL0ZpbHRlckJhclwiO1xuaW1wb3J0IHR5cGUgeyBJRmlsdGVyQ29udHJvbCB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlci9GaWx0ZXJVdGlsc1wiO1xuaW1wb3J0IEZpbHRlclV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlci9GaWx0ZXJVdGlsc1wiO1xuaW1wb3J0IHR5cGUgRmlsdGVyRmllbGQgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyQmFyL0ZpbHRlckZpZWxkXCI7XG5pbXBvcnQgU2VtYW50aWNEYXRlT3BlcmF0b3JzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlckJhci9TZW1hbnRpY0RhdGVPcGVyYXRvcnNcIjtcbmltcG9ydCB0eXBlIHsgQ29udHJvbFByb3BlcnR5SW5mbyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL21kYy9hZGFwdGVyL1N0YXRlSGVscGVyXCI7XG5pbXBvcnQgc3RhdGVIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvbWRjL2FkYXB0ZXIvU3RhdGVIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxCaW5kaW5nSW5mbyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1V0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IEV4dGVybmFsU3RhdGVUeXBlIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvdmFsdWVoZWxwL1ZhbHVlSGVscERlbGVnYXRlXCI7XG5pbXBvcnQgU2VsZWN0aW9uVmFyaWFudCBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vU2VsZWN0aW9uVmFyaWFudFwiO1xuaW1wb3J0IHsgTmF2VHlwZSB9IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgTGlzdFJlcG9ydENvbnRyb2xsZXIgfSBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9MaXN0UmVwb3J0L0xpc3RSZXBvcnRDb250cm9sbGVyLmNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIElucHV0IGZyb20gXCJzYXAvbS9JbnB1dFwiO1xuaW1wb3J0IHR5cGUgeyBJbnB1dCRWYWx1ZUhlbHBSZXF1ZXN0RXZlbnRQYXJhbWV0ZXJzIH0gZnJvbSBcInNhcC9tL0lucHV0XCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIHsgJENvbnRyb2xTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCBDb250cm9sVmFyaWFudEFwcGx5QVBJIGZyb20gXCJzYXAvdWkvZmwvYXBwbHkvYXBpL0NvbnRyb2xWYXJpYW50QXBwbHlBUElcIjtcbmltcG9ydCB0eXBlIFZhcmlhbnRNYW5hZ2VtZW50IGZyb20gXCJzYXAvdWkvZmwvdmFyaWFudHMvVmFyaWFudE1hbmFnZW1lbnRcIjtcbmltcG9ydCB0eXBlIFZhcmlhbnRNb2RlbCBmcm9tIFwic2FwL3VpL2ZsL3ZhcmlhbnRzL1ZhcmlhbnRNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBWYXJpYW50RGF0YSB9IGZyb20gXCJzYXAvdWkvZmwvdmFyaWFudHMvVmFyaWFudE1vZGVsXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvbWRjL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIFZhbHVlSGVscCBmcm9tIFwic2FwL3VpL21kYy9WYWx1ZUhlbHBcIjtcbmltcG9ydCB0eXBlIHsgQ29uZGl0aW9uT2JqZWN0IH0gZnJvbSBcInNhcC91aS9tZGMvY29uZGl0aW9uL0NvbmRpdGlvblwiO1xuaW1wb3J0IEZpZWxkRWRpdE1vZGUgZnJvbSBcInNhcC91aS9tZGMvZW51bXMvRmllbGRFZGl0TW9kZVwiO1xuaW1wb3J0IHR5cGUge1xuXHRGaWx0ZXJCYXJCYXNlJEZpbHRlcnNDaGFuZ2VkRXZlbnQsXG5cdEZpbHRlckJhckJhc2UkRmlsdGVyc0NoYW5nZWRFdmVudFBhcmFtZXRlcnMsXG5cdEZpbHRlckJhckJhc2UkU2VhcmNoRXZlbnRcbn0gZnJvbSBcInNhcC91aS9tZGMvZmlsdGVyYmFyL0ZpbHRlckJhckJhc2VcIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyIGFzIFN0YXRlVXRpbEZpbHRlciB9IGZyb20gXCJzYXAvdWkvbWRjL3AxM24vU3RhdGVVdGlsXCI7XG5pbXBvcnQgU3RhdGVVdGlsIGZyb20gXCJzYXAvdWkvbWRjL3AxM24vU3RhdGVVdGlsXCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgTWV0YU1vZGVsLCBkZWZhdWx0IGFzIE9EYXRhTWV0YU1vZGVsIH0gZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IGpRdWVyeSBmcm9tIFwic2FwL3VpL3RoaXJkcGFydHkvanF1ZXJ5XCI7XG5pbXBvcnQgdHlwZSB7IEV2ZW50SGFuZGxlciB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi8uLi90eXBlcy9leHRlbnNpb25fdHlwZXNcIjtcbmltcG9ydCBVT01WYWxpZGF0aW9uRGVsZWdhdGUgZnJvbSBcIi4vVU9NVmFsaWRhdGlvbkRlbGVnYXRlXCI7XG5pbXBvcnQgRmlsdGVyQmFyQVBJU3RhdGVIYW5kbGVyIGZyb20gXCIuL21peGluL0ZpbHRlckJhckFQSVN0YXRlSGFuZGxlclwiO1xuXG4vLyBUcmFjayB0ZWxlbWV0cnkgY29udGVudCBmb3IgdGhlIGZpbHRlckJhclxuY2xhc3MgRmlsdGVyQmFyVGVsZW1ldHJ5IHtcblx0cHJpdmF0ZSBjb3VudEZpbHRlckFjdGlvbnMgPSAwO1xuXG5cdHByaXZhdGUgY291bnRWYXJpYW50RmlsdGVycyA9IDA7XG5cblx0Y29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBmaWx0ZXJCYXJBUEk6IEZpbHRlckJhckFQSSkge31cblxuXHRvbkZpbHRlcnNDaGFuZ2VkKHJlYXNvbj86IHN0cmluZyk6IHZvaWQge1xuXHRcdGlmIChyZWFzb24gPT09IFwiVmFyaWFudFwiKSB7XG5cdFx0XHR0aGlzLmNvdW50VmFyaWFudEZpbHRlcnMrKztcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5jb3VudEZpbHRlckFjdGlvbnMrKztcblx0XHR9XG5cdH1cblxuXHRvblNlYXJjaChldmVudFBhcmFtZXRlcnM6IHsgcmVhc29uPzogc3RyaW5nIH0sIGNvbmRpdGlvbnM6IFJlY29yZDxzdHJpbmcsIENvbmRpdGlvbk9iamVjdFtdPik6IHZvaWQge1xuXHRcdGNvbnN0IGZpbHRlck5hbWVzID0gdGhpcy5nZXRGaWx0ZXJOYW1lc0Zyb21Db25kaXRpb25zKGNvbmRpdGlvbnMpO1xuXHRcdHRoaXMuZmlsdGVyQmFyQVBJLmdldFBhZ2VDb250cm9sbGVyKCk/LnRlbGVtZXRyeS5zdG9yZUFjdGlvbih7XG5cdFx0XHR0eXBlOiBcIkZFLkZpbHRlckJhclNlYXJjaFwiLFxuXHRcdFx0cGFyYW1ldGVyczoge1xuXHRcdFx0XHRjb3VudEZpbHRlckFjdGlvbnM6IHRoaXMuY291bnRGaWx0ZXJBY3Rpb25zLCAvLyAgSG93IG1hbnkgZmlsdGVyQ2hhbmdlZCBhY3Rpb25zIGFyZSBwZXJmb3JtZWRcblx0XHRcdFx0Y291bnRGaWx0ZXJzOiBPYmplY3Qua2V5cyhjb25kaXRpb25zKS5sZW5ndGgsIC8vIEhvdyBtYW55IGRpZmZlcmVudCBmaWx0ZXJzIGFyZSBhcHBsaWVkXG5cdFx0XHRcdGNvdW50VmFyaWFudEZpbHRlcnM6IHRoaXMuY291bnRWYXJpYW50RmlsdGVycywgLy8gSG93IG1hbnkgZmlsdGVyIGJlbG9uZyB0byBhIHZhcmlhbnRcblx0XHRcdFx0dmFyaWFudExheWVyOiB0aGlzLmZpbHRlckJhckFQSS5nZXRWYXJpYW50KCk/LmxheWVyID8/IFwiTm9uZVwiLCAvLyB8IFwiU0FQXCIgfCBcIkN1c3RvbVwiOyAvLyBUeXBlIG9mIHZhcmlhbnRcblx0XHRcdFx0YXV0b0xvYWQ6IGV2ZW50UGFyYW1ldGVycy5yZWFzb24gPT09IFwiVmFyaWFudFwiLCAvLyBJcyB0aGUgZmlsdGVyIGF1dG9tYXRpY2FsbHkgZXhlY3V0ZWRcblx0XHRcdFx0c2VhcmNoVXNlZDogY29uZGl0aW9ucy4kc2VhcmNoID8gISFPYmplY3Qua2V5cyhjb25kaXRpb25zLiRzZWFyY2gpLmxlbmd0aCA6IGZhbHNlLCAvLyBXYXMgdGhlIHNlYXJjaCBmaWVsZCBpbiB0aGUgZmlsdGVyYmFyIHVzZWQ/XG5cdFx0XHRcdGZpbHRlck5hbWVzOiBmaWx0ZXJOYW1lcyAvLyBQcm9wZXJ0eSBuYW1lcyBvZiB0aGUgZmlsdGVyc1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdC8vIFJlc2V0IHRoZSBjb3VudFxuXHRcdHRoaXMuY291bnRGaWx0ZXJBY3Rpb25zID0gMDtcblx0XHR0aGlzLmNvdW50VmFyaWFudEZpbHRlcnMgPSAwO1xuXHR9XG5cblx0Z2V0RmlsdGVyTmFtZXNGcm9tQ29uZGl0aW9ucyhjb25kaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBDb25kaXRpb25PYmplY3RbXT4pOiBzdHJpbmcge1xuXHRcdGxldCBmaWx0ZXJOYW1lcyA9IFwiXCI7XG5cdFx0T2JqZWN0LmtleXMoY29uZGl0aW9ucykuZm9yRWFjaCgoY29uZGl0aW9uKSA9PiB7XG5cdFx0XHRpZiAoY29uZGl0aW9uICE9IFwiJHNlYXJjaFwiKSB7XG5cdFx0XHRcdGZpbHRlck5hbWVzICs9IGNvbmRpdGlvbiArIFwiO1wiO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBmaWx0ZXJOYW1lcztcblx0fVxufVxuXG5leHBvcnQgdHlwZSBGaWx0ZXJCYXJTdGF0ZSA9IHtcblx0aW5uZXJTdGF0ZT86IHtcblx0XHRmaWx0ZXI/OiBSZWNvcmQ8c3RyaW5nLCBDb25kaXRpb25PYmplY3RbXT47XG5cdFx0aW5pdGlhbFN0YXRlPzogTGVnYWN5RmlsdGVyQmFyU3RhdGU7XG5cdFx0ZnVsbFN0YXRlPzogTGVnYWN5RmlsdGVyQmFyU3RhdGU7XG5cdH07XG59O1xuXG50eXBlIFZhcmlhbnRJRHMgPSB7XG5cdHNQYWdlVmFyaWFudElkOiBzdHJpbmc7XG5cdHNGaWx0ZXJCYXJWYXJpYW50SWQ6IHN0cmluZztcblx0c1RhYmxlVmFyaWFudElkOiBzdHJpbmc7XG5cdHNDaGFydFZhcmlhbnRJZDogc3RyaW5nO1xufTtcblxudHlwZSBWYXJpYW50T2JqZWN0ID0ge1xuXHRhdXRob3I6IHN0cmluZztcblx0Y2hhbmdlOiBib29sZWFuO1xuXHRjb250ZXh0czogb2JqZWN0O1xuXHRleGVjdXRlT25TZWxlY3Q6IGJvb2xlYW47XG5cdGZhdm9yaXRlOiBib29sZWFuO1xuXHRrZXk6IHN0cmluZztcblx0b3JpZ2luYWxDb250ZXh0czogb2JqZWN0O1xuXHRvcmlnaW5hbEV4ZWN1dGVPblNlbGVjdDogYm9vbGVhbjtcblx0b3JpZ2luYWxGYXZvcml0ZTogYm9vbGVhbjtcblx0b3JpZ2luYWxUaXRsZTogc3RyaW5nO1xuXHRvcmlnaW5hbFZpc2libGU6IGJvb2xlYW47XG5cdHJlbW92ZTogYm9vbGVhbjtcblx0cmVuYW1lOiBib29sZWFuO1xuXHRzaGFyaW5nOiBzdHJpbmc7XG5cdHRpdGxlOiBzdHJpbmc7XG5cdHZpc2libGU6IGJvb2xlYW47XG59O1xuXG5lbnVtIFZhcmlhbnRNYW5hZ2VtZW50VHlwZSB7XG5cdENvbnRyb2wgPSBcIkNvbnRyb2xcIixcblx0UGFnZSA9IFwiUGFnZVwiLFxuXHROb25lID0gXCJOb25lXCJcbn1cblxuY29uc3QgRElTUExBWV9DVVJSRU5DWV9QUk9QRVJUWV9OQU1FID0gXCJEaXNwbGF5Q3VycmVuY3lcIjtcbmNvbnN0IFBfRElTUExBWV9DVVJSRU5DWV9QUk9QRVJUWV9OQU1FID0gXCJQX0Rpc3BsYXlDdXJyZW5jeVwiO1xuXG50eXBlIExSVmlld0RhdGEgPSB7XG5cdGNvbnRyb2xDb25maWd1cmF0aW9uPzogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuXHRlbnRpdHlTZXQ/OiBzdHJpbmc7XG5cdGNvbnRleHRQYXRoPzogc3RyaW5nO1xuXHR2YXJpYW50TWFuYWdlbWVudD86IGJvb2xlYW4gfCBzdHJpbmc7XG59O1xuXG4vKipcbiAqIFRoZSBrZXkgdHlwZSBpbmNsdWRlcyAnYm9vbGVhbicgdG8gc3VwcG9ydCBsZWdhY3kgc2NlbmFyaW9zIHdoZXJlICdkYXRhTG9hZGVkJyBtYXkgYmUgcHJlc2VudCBhdCB0aGUgcGFyZW50IGxldmVsIGFzIGEgYm9vbGVhbixcbiAqIGFzIHdlbGwgYXMgYXQgaW5zdGFuY2UgbGV2ZWwgYXMgYW4gb2JqZWN0IHdpdGggYSAnZGF0YUxvYWRlZCcgcHJvcGVydHkuIFRoaXMgZW5zdXJlcyBjb21wYXRpYmlsaXR5IHdpdGggYm90aCB1c2FnZXMuXG4gKi9cbnR5cGUgQWRkaXRpb25hbFN0YXRlcyA9IHtcblx0ZGF0YUxvYWRlZD86IGJvb2xlYW47XG5cdFtrZXk6IHN0cmluZ106IHsgZGF0YUxvYWRlZD86IGJvb2xlYW4gfSB8IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59O1xuXG5pbnRlcmZhY2UgRmlsdGVyQmFyQVBJIGV4dGVuZHMgRmlsdGVyQmFyQVBJU3RhdGVIYW5kbGVyIHt9XG5cbi8qKlxuICogQnVpbGRpbmcgYmxvY2sgZm9yIGNyZWF0aW5nIGEgRmlsdGVyQmFyIGJhc2VkIG9uIHRoZSBtZXRhZGF0YSBwcm92aWRlZCBieSBPRGF0YSBWNC5cbiAqIHtAbGluayBkZW1vOnNhcC9mZS9jb3JlL2ZwbUV4cGxvcmVyL2luZGV4Lmh0bWwjL2J1aWxkaW5nQmxvY2tzL2ZpbHRlckJhci9maWx0ZXJCYXJEZWZhdWx0IE92ZXJ2aWV3IG9mIEJ1aWxkaW5nIEJsb2Nrc31cbiAqIDxicj5cbiAqIFVzdWFsbHksIGEgU2VsZWN0aW9uRmllbGRzIGFubm90YXRpb24gaXMgZXhwZWN0ZWQuXG4gKlxuICpcbiAqIFVzYWdlIGV4YW1wbGU6XG4gKiA8cHJlPlxuICogJmx0O21hY3JvczpGaWx0ZXJCYXIgaWQ9XCJNeUZpbHRlckJhclwiIG1ldGFQYXRoPVwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlNlbGVjdGlvbkZpZWxkc1wiIC8mZ3Q7XG4gKiA8L3ByZT5cbiAqIEBhbGlhcyBzYXAuZmUubWFjcm9zLkZpbHRlckJhclxuICogQHB1YmxpY1xuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUubWFjcm9zLmZpbHRlckJhci5GaWx0ZXJCYXJBUElcIiwge1xuXHRyZXR1cm5UeXBlczogW1wic2FwLnVpLmNvcmUuQ29udHJvbFwiXVxufSlcbkBtaXhpbihGaWx0ZXJCYXJBUElTdGF0ZUhhbmRsZXIpXG5jbGFzcyBGaWx0ZXJCYXJBUEkgZXh0ZW5kcyBNYWNyb0FQSSB7XG5cdGluaXRpYWxDb250cm9sU3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cblx0X2luaXRpYWxTdGF0ZVByb21pc2U6IFByb21pc2VLZWVwZXI8dm9pZD4gPSBuZXcgUHJvbWlzZUtlZXBlcigpO1xuXG5cdF9iU2VhcmNoVHJpZ2dlcmVkID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBfaGFzUGVuZGluZ0ZpbHRlcnMgPSB0cnVlO1xuXG5cdEBjb250cm9sbGVyRXh0ZW5zaW9uSGFuZGxlcihcInZpZXdTdGF0ZVwiLCBcInJldHJpZXZlQWRkaXRpb25hbFN0YXRlc1wiKVxuXHRwdWJsaWMgcmV0cmlldmVBZGRpdGlvbmFsU3RhdGVzKGFkZGl0aW9uYWxTdGF0ZXM6IEFkZGl0aW9uYWxTdGF0ZXMpOiB2b2lkIHtcblx0XHRhZGRpdGlvbmFsU3RhdGVzW3RoaXMuZ2V0SWQoKV0gPSB7IGRhdGFMb2FkZWQ6ICF0aGlzLl9oYXNQZW5kaW5nRmlsdGVycyB9O1xuXHR9XG5cblx0QGNvbnRyb2xsZXJFeHRlbnNpb25IYW5kbGVyKFwidmlld1N0YXRlXCIsIFwiYXBwbHlBZGRpdGlvbmFsU3RhdGVzXCIpXG5cdHB1YmxpYyBhcHBseUFkZGl0aW9uYWxTdGF0ZXMoYWRkaXRpb25hbFN0YXRlczogQWRkaXRpb25hbFN0YXRlcyk6IHZvaWQge1xuXHRcdGNvbnN0IGluc3RhbmNlU3RhdGUgPSBhZGRpdGlvbmFsU3RhdGVzW3RoaXMuZ2V0SWQoKV07XG5cdFx0bGV0IGluc3RhbmNlRGF0YUxvYWRlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblx0XHRpZiAodHlwZW9mIGluc3RhbmNlU3RhdGUgPT09IFwib2JqZWN0XCIgJiYgaW5zdGFuY2VTdGF0ZSAhPT0gbnVsbCkge1xuXHRcdFx0aW5zdGFuY2VEYXRhTG9hZGVkID0gaW5zdGFuY2VTdGF0ZS5kYXRhTG9hZGVkO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpbnN0YW5jZURhdGFMb2FkZWQgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcGFyZW50RGF0YUxvYWRlZCA9XG5cdFx0XHRcImRhdGFMb2FkZWRcIiBpbiBhZGRpdGlvbmFsU3RhdGVzICYmIHR5cGVvZiBhZGRpdGlvbmFsU3RhdGVzLmRhdGFMb2FkZWQgPT09IFwiYm9vbGVhblwiID8gYWRkaXRpb25hbFN0YXRlcy5kYXRhTG9hZGVkIDogdW5kZWZpbmVkO1xuXG5cdFx0aWYgKHBhcmVudERhdGFMb2FkZWQgPT09IHRydWUgfHwgaW5zdGFuY2VEYXRhTG9hZGVkID09PSB0cnVlKSB7XG5cdFx0XHR0aGlzLnRyaWdnZXJTZWFyY2goKTtcblx0XHR9XG5cdFx0aWYgKHBhcmVudERhdGFMb2FkZWQgPT09IGZhbHNlIHx8IGluc3RhbmNlRGF0YUxvYWRlZCA9PT0gZmFsc2UpIHtcblx0XHRcdCh0aGlzLmNvbnRlbnQgYXMgeyBfYlNlYXJjaFRyaWdnZXJlZD86IGJvb2xlYW4gfSkuX2JTZWFyY2hUcmlnZ2VyZWQgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRhc3luYyB3YWl0Rm9ySW5pdGlhbFN0YXRlKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLl9pbml0aWFsU3RhdGVQcm9taXNlLnByb21pc2U7XG5cdH1cblxuXHRnZXRDb250cm9sU3RhdGUoY29udHJvbFN0YXRlOiBDb250cm9sU3RhdGUpOiBDb250cm9sU3RhdGUge1xuXHRcdGNvbnN0IGluaXRpYWxDb250cm9sU3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gdGhpcy5pbml0aWFsQ29udHJvbFN0YXRlO1xuXHRcdGlmIChjb250cm9sU3RhdGUpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGZ1bGxTdGF0ZTogY29udHJvbFN0YXRlIGFzIG9iamVjdCxcblx0XHRcdFx0aW5pdGlhbFN0YXRlOiBpbml0aWFsQ29udHJvbFN0YXRlIGFzIG9iamVjdFxuXHRcdFx0fTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbnRyb2xTdGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHdoZXRoZXIgU2VhcmNoIGNhbiBiZSB0cmlnZ2VyZWQgYXQgaW5pdGlhbCBsb2FkIG9mIHRoZSBhcHBsaWNhdGlvbiBvciBub3QuXG5cdCAqIEBwYXJhbSBuYXZpZ2F0aW9uVHlwZSBOYXZpZ2F0aW9uIFR5cGUgZHVyaW5nIHRoZSBsb2FkIG9mIHRoZSBhcHBsaWNhdGlvblxuXHQgKiBAcmV0dXJucyBBIEJvb2xlYW4gZGV0ZXJtaW5pbmcgd2hldGhlciBTZWFyY2ggY2FuIGJlIHRyaWdnZXJlZCBvciBub3Rcblx0ICovXG5cdGlzU2VhcmNoVHJpZ2dlcmVkQnlJbml0aWFsTG9hZChuYXZpZ2F0aW9uVHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgY29udHJvbGxlciA9IHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcixcblx0XHRcdHZpZXcgPSBjb250cm9sbGVyLmdldFZpZXcoKSxcblx0XHRcdHZpZXdEYXRhID0gdmlldy5nZXRWaWV3RGF0YSgpO1xuXHRcdGxldCBpc1NlYXJjaFRyaWdnZXJlZEJ5SW5pdGlhbExvYWQgPSBmYWxzZSxcblx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50O1xuXHRcdC8vIERldGVybWluaW5nIHdoZXRoZXIgaXQncyBDb250cm9sIHZhcmlhbnRNYW5hZ2VtZW50IG9yIFBhZ2UgdmFyaWFudE1hbmFnZW1lbnRcblx0XHRpZiAodmlld0RhdGEudmFyaWFudE1hbmFnZW1lbnQgPT09IFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Db250cm9sKSB7XG5cdFx0XHR2YXJpYW50TWFuYWdlbWVudCA9IGNvbnRyb2xsZXIuX2dldEZpbHRlckJhclZhcmlhbnRDb250cm9sKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50ID0gdmlldy5ieUlkKFwiZmU6OlBhZ2VWYXJpYW50TWFuYWdlbWVudFwiKSBhcyBWYXJpYW50TWFuYWdlbWVudDtcblx0XHR9XG5cdFx0Y29uc3QgY3VycmVudFZhcmlhbnRLZXkgPSB2YXJpYW50TWFuYWdlbWVudD8uZ2V0Q3VycmVudFZhcmlhbnRLZXkoKTtcblx0XHQvL1RoZSBjaGVjayBzaGFsbCBoYXBwZW4gZm9yICdpbnRpYWwgbG9hZCcgYW5kICdBcHBseSBBdXRvbWF0aWNhbGx5JyBmb3IgY29sbGFwc2luZyB0aGUgaGVhZGVyIG9yXG5cdFx0Ly8gYWx3YXlzIGJlIGNvbGxhcHNlZCBpZiBuYXZUeXBlIGlzIHhBcHBTdGF0ZVxuXHRcdC8vIGluaXRpYWxMb2FkIEF1dG8gb3IgRGlzYWJsZWRcblx0XHRpZiAobmF2aWdhdGlvblR5cGUgPT09IE5hdlR5cGUueEFwcFN0YXRlKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGVsc2UgaWYgKHZhcmlhbnRNYW5hZ2VtZW50ICYmIHZpZXdEYXRhLmluaXRpYWxMb2FkICE9PSBJbml0aWFsTG9hZE1vZGUuRW5hYmxlZCkge1xuXHRcdFx0Ly8gSGVhZGVyIGlzIGNvbGxhcHNlZCBpZiBwcmVzZXQgZmlsdGVycyBhcmUgc2V0IGZvciBpbml0aWFsIGxvYWQgQXV0bywgSGVhZGVyIHNoYWxsIHJlbWFpbiBleHBhbmRlZCBpZiBpbml0aWFsIGxvYWQgaXMgQXV0byB3aXRob3V0IHByZXNldCBmaWx0ZXJzIG9yIGludGlhbCBsb2FkIGlzIGRpc2FibGVkXG5cdFx0XHRpZiAoY29udHJvbGxlci5fc2hvdWxkQXV0b1RyaWdnZXJTZWFyY2godGhpcy5fZ2V0RmlsdGVyQmFyVk0odmlldykpKSB7XG5cdFx0XHRcdGlzU2VhcmNoVHJpZ2dlcmVkQnlJbml0aWFsTG9hZCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIGluaXRpYWxMb2FkIEVuYWJsZWRcblx0XHRlbHNlIGlmIChcblx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50ICYmXG5cdFx0XHR2aWV3RGF0YS5pbml0aWFsTG9hZCA9PT0gSW5pdGlhbExvYWRNb2RlLkVuYWJsZWQgJiZcblx0XHRcdGNvbnRyb2xsZXIuX2dldEFwcGx5QXV0b21hdGljYWxseU9uVmFyaWFudCh2YXJpYW50TWFuYWdlbWVudCwgY3VycmVudFZhcmlhbnRLZXkpXG5cdFx0KSB7XG5cdFx0XHRpc1NlYXJjaFRyaWdnZXJlZEJ5SW5pdGlhbExvYWQgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gaXNTZWFyY2hUcmlnZ2VyZWRCeUluaXRpYWxMb2FkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFwcGx5IFNlbGVjdGlvbiBWYXJpYW50IGZyb20gTmF2aWdhdGlvbiBQYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSB2aWV3IFZpZXcgb2YgdGhlIExSIGZpbHRlciBiYXJcblx0ICogQHBhcmFtIG5hdmlnYXRpb25QYXJhbWV0ZXIgU2VsZWN0aW9uIFZhcmlhbnQgdG8gYXBwbHkgZnJvbSBhcHBTdGF0ZVxuXHQgKiBAcGFyYW0gZmlsdGVyVmFyaWFudEFwcGxpZWQgSXMgYSBmaWx0ZXIgdmFyaWFudCBhbGFyZWFkeSBhcHBsaWVkXG5cdCAqIEByZXR1cm5zIFByb21pc2UgZm9yIGFzeW5jaHJvbm91cyBoYW5kbGluZ1xuXHQgKi9cblx0YXN5bmMgX2FwcGx5U2VsZWN0aW9uVmFyaWFudCh2aWV3OiBWaWV3LCBuYXZpZ2F0aW9uUGFyYW1ldGVyOiBOYXZpZ2F0aW9uUGFyYW1ldGVyLCBmaWx0ZXJWYXJpYW50QXBwbGllZDogYm9vbGVhbik6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuZ2V0Q29udGVudCgpIGFzIEZpbHRlckJhcjtcblx0XHRjb25zdCB7IHNlbGVjdGlvblZhcmlhbnQ6IHN2LCBzZWxlY3Rpb25WYXJpYW50RGVmYXVsdHM6IHN2RGVmYXVsdHMsIHJlcXVpcmVzU3RhbmRhcmRWYXJpYW50ID0gZmFsc2UgfSA9IG5hdmlnYXRpb25QYXJhbWV0ZXI7XG5cblx0XHRpZiAoIWZpbHRlckJhciB8fCAhc3YpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9XG5cdFx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQgPSB0aGlzLl9nZXRGaWx0ZXJCYXJWTSh2aWV3KSBhcyBWYXJpYW50TWFuYWdlbWVudDtcblx0XHRjb25zdCBzaG91bGRBcHBseUFwcFN0YXRlID0gYXdhaXQgdGhpcy5fYWN0aXZhdGVWYXJpYW50QW5kRGV0ZXJtaW5lQXBwbHlBcHBTdGF0ZShcblx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50LFxuXHRcdFx0cmVxdWlyZXNTdGFuZGFyZFZhcmlhbnQsXG5cdFx0XHRmaWx0ZXJWYXJpYW50QXBwbGllZFxuXHRcdCk7XG5cdFx0aWYgKHNob3VsZEFwcGx5QXBwU3RhdGUpIHtcblx0XHRcdHRoaXMuX2FkZERlZmF1bHREaXNwbGF5Q3VycmVuY3lUb1NWKHZpZXcsIHN2LCBzdkRlZmF1bHRzKTtcblxuXHRcdFx0Ly8gY2hlY2sgaWYgRkxQIGRlZmF1bHQgdmFsdWVzIGFyZSB0aGVyZSBhbmQgaXMgaXQgc3RhbmRhcmQgdmFyaWFudFxuXHRcdFx0Y29uc3Qgc3ZEZWZhdWx0c0FyZVByZXNlbnQgPSBzdkRlZmF1bHRzID8gc3ZEZWZhdWx0cy5nZXRTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcygpLmxlbmd0aCA+IDAgOiBmYWxzZTtcblx0XHRcdGNvbnN0IHN0ZFZhcmlhbnRJc0RlZmF1bHRWYXJpYW50ID1cblx0XHRcdFx0dmFyaWFudE1hbmFnZW1lbnQgJiYgdmFyaWFudE1hbmFnZW1lbnQuZ2V0RGVmYXVsdFZhcmlhbnRLZXkoKSA9PT0gdmFyaWFudE1hbmFnZW1lbnQuZ2V0U3RhbmRhcmRWYXJpYW50S2V5KCk7XG5cdFx0XHRjb25zdCB1c2VGTFBEZWZhdWx0VmFsdWVzOiBib29sZWFuID0gc3ZEZWZhdWx0c0FyZVByZXNlbnQgJiYgKHN0ZFZhcmlhbnRJc0RlZmF1bHRWYXJpYW50IHx8ICF2YXJpYW50TWFuYWdlbWVudCk7XG5cblx0XHRcdGNvbnN0IGZpbHRlckJhckFQSSA9IGZpbHRlckJhci5nZXRQYXJlbnQoKSBhcyBGaWx0ZXJCYXJBUEk7XG5cdFx0XHRsZXQgc3ZUb1NldDogU2VsZWN0aW9uVmFyaWFudCA9IHN2O1xuXHRcdFx0aWYgKGZpbHRlclZhcmlhbnRBcHBsaWVkIHx8IHVzZUZMUERlZmF1bHRWYWx1ZXMpIHtcblx0XHRcdFx0c3ZUb1NldCA9IGF3YWl0IHRoaXMuX2dldEFkanVzdGVkU1Yoc3YsIHVzZUZMUERlZmF1bHRWYWx1ZXMpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZpbHRlckJhckFQSS5zZXRTZWxlY3Rpb25WYXJpYW50KHN2VG9TZXQsIHRydWUsIHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdF9lbmFibGVGaWx0ZXJCYXIoZmlsdGVyQmFyQ29udHJvbDogRmlsdGVyQmFyLCBwcmV2ZW50SW5pdGlhbFNlYXJjaDogYm9vbGVhbik6IHZvaWQge1xuXHRcdGNvbnN0IGZpbHRlckJhckFQSSA9IGZpbHRlckJhckNvbnRyb2wuZ2V0UGFyZW50KCkgYXMgRmlsdGVyQmFyQVBJO1xuXHRcdGNvbnN0IGZuT25TZWFyY2ggPSAoKTogdm9pZCA9PiB7XG5cdFx0XHR0aGlzLl9iU2VhcmNoVHJpZ2dlcmVkID0gIXByZXZlbnRJbml0aWFsU2VhcmNoO1xuXHRcdH07XG5cblx0XHQvLyByZXNldCB0aGUgc3VzcGVuZCBzZWxlY3Rpb24gb24gZmlsdGVyIGJhciB0byBhbGxvdyBsb2FkaW5nIG9mIGRhdGEgd2hlbiBuZWVkZWQgKHdhcyBzZXQgb24gTFIgSW5pdClcblx0XHRpZiAoZmlsdGVyQmFyQ29udHJvbC5nZXRTdXNwZW5kU2VsZWN0aW9uKCkpIHtcblx0XHRcdC8vIE9ubHkgaWYgc2VhcmNoIGlzIGZpcmVkIHdlIHNldCBfYlNlYXJjaFRyaWdnZXJlZC5cblx0XHRcdC8vIElmIHRoZXJlIHdhcyBhbiBlcnJvciBkdWUgdG8gcmVxdWlyZWQgZmlsdGVyZmllbGRzIGVtcHR5IG9yIG90aGVyIGlzc3VlcyB3ZSBza2lwIHNldHRpbmcgX2JTZWFyY2hUcmlnZ2VyZWQuXG5cdFx0XHRmaWx0ZXJCYXJBUEkuYXR0YWNoRXZlbnRPbmNlKFwic2VhcmNoXCIsIGZuT25TZWFyY2gpO1xuXHRcdFx0ZmlsdGVyQmFyQ29udHJvbC5lbmFibGVSZXF1ZXN0cyh0cnVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gc2VhcmNoIG1pZ2h0IGFscmVhZHkgYmUgdHJpZ2dlcmVkLlxuXHRcdFx0Zm5PblNlYXJjaCgpO1xuXHRcdH1cblx0fVxuXG5cdGFzeW5jIF9nZXRBZGp1c3RlZFNWKGFwcFN0YXRlU1Y6IFNlbGVjdGlvblZhcmlhbnQsIHVzZUZMUERlZmF1bHRWYWx1ZXM6IGJvb2xlYW4pOiBQcm9taXNlPFNlbGVjdGlvblZhcmlhbnQ+IHtcblx0XHRsZXQgYWRqdXN0ZWRTViA9IG5ldyBTZWxlY3Rpb25WYXJpYW50KGFwcFN0YXRlU1YudG9KU09OT2JqZWN0KCkpO1xuXHRcdGNvbnN0IGFscmVhZHlBcHBsaWVkU1YgPSBhd2FpdCB0aGlzLmdldFNlbGVjdGlvblZhcmlhbnQoKTtcblx0XHRjb25zdCBhcHBsaWVkU2VsT3B0TmFtZXMgPSBhbHJlYWR5QXBwbGllZFNWPy5nZXRTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcygpIHx8IFtdO1xuXHRcdGlmIChhcHBsaWVkU2VsT3B0TmFtZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly8gV2UgbWVyZ2UgJ2FwcGxpZWQgU1YnIGFuZCAnYXBwU3RhdGUgU1YnIGJhc2VkIG9uICd1c2VGTFBEZWZhdWx0VmFsdWVzJy5cblx0XHRcdGFkanVzdGVkU1YgPSBhcHBsaWVkU2VsT3B0TmFtZXMucmVkdWNlKChzdkNvcHk6IFNlbGVjdGlvblZhcmlhbnQsIHNlbE9wdGlvbk5hbWUpID0+IHtcblx0XHRcdFx0Ly8gKGFwcFN0YXRlU1YgPSBhZGp1c3RlZFNWID0gc3ZDb3B5KVxuXHRcdFx0XHRjb25zdCBzdlNlbE9wdHMgPSBzdkNvcHkuZ2V0U2VsZWN0T3B0aW9uKHNlbE9wdGlvbk5hbWUpO1xuXHRcdFx0XHQvLyBJZiB1c2VGTFBEZWZhdWx0VmFsdWVzID0gdHJ1ZSwgbWVhbnMgKGFwcFN0YXRlU1YgPSBzdkRlZmF1bHRzKVxuXHRcdFx0XHRpZiAoKHVzZUZMUERlZmF1bHRWYWx1ZXMgJiYgIXN2U2VsT3B0cz8ubGVuZ3RoKSB8fCAhdXNlRkxQRGVmYXVsdFZhbHVlcykge1xuXHRcdFx0XHRcdC8vIGlmIGRlZmF1bHQgU1YgbmVlZHMgdG8gYmUgdXNlZCwgdGhlbiBzZWxlY3Qgb3B0aW9ucyBmcm9tIGRlZmF1bHQgc2VsZWN0IG9wdGlvbnMgdGFrZSBwcmlvcml0eS5cblx0XHRcdFx0XHQvLyBlbHNlIHdlIG1lcmdlIGJvdGg6IGFscmVhZHkgYXBwbGllZCBTViBhbmQgU1YgZnJvbSBuYXZQYXJhbXMuXG5cdFx0XHRcdFx0Y29uc3Qgc2VsZWN0T3B0aW9ucyA9IGFscmVhZHlBcHBsaWVkU1YuZ2V0U2VsZWN0T3B0aW9uKHNlbE9wdGlvbk5hbWUpO1xuXHRcdFx0XHRcdHN2Q29weS5tYXNzQWRkU2VsZWN0T3B0aW9uKHNlbE9wdGlvbk5hbWUsIHNlbGVjdE9wdGlvbnMgfHwgW10pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBzdkNvcHk7XG5cdFx0XHR9LCBhZGp1c3RlZFNWKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYWRqdXN0ZWRTVjtcblx0fVxuXG5cdF9wcmV2ZW50SW5pdGlhbFNlYXJjaCh2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnQpOiBib29sZWFuIHtcblx0XHRpZiAoIXZhcmlhbnRNYW5hZ2VtZW50KSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0Y29uc3QgYVZhcmlhbnRzID0gdmFyaWFudE1hbmFnZW1lbnQuZ2V0VmFyaWFudHMoKTtcblx0XHRjb25zdCBvQ3VycmVudFZhcmlhbnQgPSBhVmFyaWFudHMuZmluZChmdW5jdGlvbiAoaXRlbSk6IGJvb2xlYW4ge1xuXHRcdFx0cmV0dXJuIGl0ZW0uZ2V0S2V5KCkgPT09IHZhcmlhbnRNYW5hZ2VtZW50LmdldEN1cnJlbnRWYXJpYW50S2V5KCk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuICFvQ3VycmVudFZhcmlhbnQuZXhlY3V0ZU9uU2VsZWN0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBEaXNwbGF5Q3VycmVuY3kgdG8gU1YgaWYgaXQgaXMgbWFuZGF0b3J5IGFuZCBleGlzdHMgaW4gU1YgZGVmYXVsdHMuXG5cdCAqIEBwYXJhbSB2aWV3IFZpZXcgb2YgdGhlIExSIGZpbHRlciBiYXJcblx0ICogQHBhcmFtIHN2IFNlbGVjdGlvbiBWYXJpYW50IHRvIGFwcGx5XG5cdCAqIEBwYXJhbSBzdkRlZmF1bHRzIFNlbGVjdGlvbiBWYXJpYW50IGRlZmF1bHRzXG5cdCAqL1xuXHRfYWRkRGVmYXVsdERpc3BsYXlDdXJyZW5jeVRvU1YodmlldzogVmlldywgc3Y6IFNlbGVjdGlvblZhcmlhbnQsIHN2RGVmYXVsdHM/OiBTZWxlY3Rpb25WYXJpYW50KTogdm9pZCB7XG5cdFx0aWYgKCFzdkRlZmF1bHRzIHx8IHN2RGVmYXVsdHM/LmlzRW1wdHkoKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHZpZXdEYXRhID0gdmlldy5nZXRWaWV3RGF0YSgpIGFzIExSVmlld0RhdGEsXG5cdFx0XHRtZXRhTW9kZWwgPSB2aWV3LmdldE1vZGVsKCk/LmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0Y29udGV4dFBhdGggPSB2aWV3RGF0YS5jb250ZXh0UGF0aCB8fCBgLyR7dmlld0RhdGEuZW50aXR5U2V0fWAsXG5cdFx0XHRtZXRhQ29udGV4dCA9IG1ldGFNb2RlbC5nZXRNZXRhQ29udGV4dChjb250ZXh0UGF0aCksXG5cdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPE1ldGFNb2RlbD4gPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YUNvbnRleHQpO1xuXG5cdFx0Ly8gZ2V0RGlzcGxheUN1cnJlbmN5UHJvcGVydHlOYW1lIGFscmVhZHkgYXBwbGllcyB0aGUgaXNQYXJhbWV0ZXJpemVkIGxvZ2ljXG5cdFx0Y29uc3QgZGlzcGxheUN1cnJlbmN5UHJvcGVydHlOYW1lID0gdGhpcy5nZXREaXNwbGF5Q3VycmVuY3lQcm9wZXJ0eU5hbWUoZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdFx0Y29uc3QgZGlzcGxheUN1cnJlbmN5SXNNYW5kYXRvcnkgPSB0aGlzLl9jaGVja0lmRGlzcGxheUN1cnJlbmN5SXNSZXF1aXJlZChkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0XHRpZiAoIWRpc3BsYXlDdXJyZW5jeUlzTWFuZGF0b3J5KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc3ZPcHRpb25zID0gc3YuZ2V0U2VsZWN0T3B0aW9uKGRpc3BsYXlDdXJyZW5jeVByb3BlcnR5TmFtZSkgfHwgW10sXG5cdFx0XHRkZWZhdWx0U1ZPcHRpb25zID0gc3ZEZWZhdWx0cy5nZXRTZWxlY3RPcHRpb24oZGlzcGxheUN1cnJlbmN5UHJvcGVydHlOYW1lKSB8fCBbXSxcblx0XHRcdGRpc3BsYXlDdXJyZW5jeURlZmF1bHRFeGlzdHMgPSBkZWZhdWx0U1ZPcHRpb25zLmxlbmd0aCA+IDAsXG5cdFx0XHRub1NWRGlzcGxheUN1cnJlbmN5RXhpc3RzID0gc3ZPcHRpb25zLmxlbmd0aCA9PT0gMDtcblxuXHRcdGlmIChub1NWRGlzcGxheUN1cnJlbmN5RXhpc3RzICYmIGRpc3BsYXlDdXJyZW5jeURlZmF1bHRFeGlzdHMpIHtcblx0XHRcdGNvbnN0IGRpc3BsYXlDdXJyZW5jeVNlbGVjdE9wdGlvbiA9IGRlZmF1bHRTVk9wdGlvbnNbMF0sXG5cdFx0XHRcdHNpZ24gPSBkaXNwbGF5Q3VycmVuY3lTZWxlY3RPcHRpb25bXCJTaWduXCJdLFxuXHRcdFx0XHRvcHRpb24gPSBkaXNwbGF5Q3VycmVuY3lTZWxlY3RPcHRpb25bXCJPcHRpb25cIl0sXG5cdFx0XHRcdGxvdyA9IGRpc3BsYXlDdXJyZW5jeVNlbGVjdE9wdGlvbltcIkxvd1wiXSxcblx0XHRcdFx0aGlnaCA9IGRpc3BsYXlDdXJyZW5jeVNlbGVjdE9wdGlvbltcIkhpZ2hcIl07XG5cblx0XHRcdHN2LmFkZFNlbGVjdE9wdGlvbihkaXNwbGF5Q3VycmVuY3lQcm9wZXJ0eU5hbWUsIHNpZ24sIG9wdGlvbiwgbG93LCBoaWdoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBkYXRhIG1vZGVsIG9iamVjdCBwYXRoIGlzIHBhcmFtZXRlcml6ZWQuXG5cdCAqIExvb2tzIGZvciBhIFJlc3VsdENvbnRleHQgYW5ub3RhdGlvbiBpbiB0aGUgc3RhcnRpbmcgZW50aXR5J3MgdHlwZVxuXHQgKiBhbmQgZW5zdXJlcyB0aGVyZSdzIG5vIHRhcmdldCBlbnRpdHkgc2V0LlxuXHQgKiBAcGFyYW0gZGF0YU1vZGVsT2JqZWN0UGF0aCBUaGUgcGF0aCB0byBjaGVjay5cblx0ICogQHJldHVybnMgVHJ1ZSBpZiBpdCdzIHBhcmFtZXRlcml6ZWQsIGZhbHNlIG90aGVyd2lzZS5cblx0ICovXG5cdHByaXZhdGUgaXNQYXJhbWV0ZXJpemVkKGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8TWV0YU1vZGVsPik6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAhIWRhdGFNb2RlbE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQuZW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uUmVzdWx0Q29udGV4dDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBkaXNwbGF5IGN1cnJlbmN5IHByb3BlcnR5IG5hbWUgYmFzZWQgb24gdGhlIGVudGl0eSB0eXBlJ3MgcGFyYW1ldGVyaXphdGlvbi5cblx0ICogVXNlcyB0aGUgaXNQYXJhbWV0ZXJpemVkIG1ldGhvZCB0byBkZWNpZGUgd2hpY2ggcHJvcGVydHkgbmFtZSB0byByZXR1cm4uXG5cdCAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxuXHQgKiBAcmV0dXJucyBUaGUgYXBwcm9wcmlhdGUgZGlzcGxheSBjdXJyZW5jeSBwcm9wZXJ0eSBuYW1lLlxuXHQgKi9cblx0Z2V0RGlzcGxheUN1cnJlbmN5UHJvcGVydHlOYW1lKGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8TWV0YU1vZGVsPik6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuaXNQYXJhbWV0ZXJpemVkKGRhdGFNb2RlbE9iamVjdFBhdGgpID8gUF9ESVNQTEFZX0NVUlJFTkNZX1BST1BFUlRZX05BTUUgOiBESVNQTEFZX0NVUlJFTkNZX1BST1BFUlRZX05BTUU7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIERpc3BsYXlDdXJyZW5jeSBpcyBtYW5kYXRvcnkgZm9yIGZpbHRlcmluZy5cblx0ICogQHBhcmFtIGRhdGFNb2RlbE9iamVjdFBhdGhcblx0ICogQHJldHVybnMgQm9vbGVhblxuXHQgKi9cblx0X2NoZWNrSWZEaXNwbGF5Q3VycmVuY3lJc1JlcXVpcmVkKGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8TWV0YU1vZGVsPik6IGJvb2xlYW4ge1xuXHRcdGxldCBkaXNwbGF5Q3VycmVuY3lJc01hbmRhdG9yeSA9IGZhbHNlO1xuXG5cdFx0aWYgKHRoaXMuaXNQYXJhbWV0ZXJpemVkKGRhdGFNb2RlbE9iamVjdFBhdGgpKSB7XG5cdFx0XHRkaXNwbGF5Q3VycmVuY3lJc01hbmRhdG9yeSA9IGRhdGFNb2RlbE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQuZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLnNvbWUoXG5cdFx0XHRcdChwYXJhbWV0ZXI6IFByb3BlcnR5KTogYm9vbGVhbiA9PiBwYXJhbWV0ZXIubmFtZSA9PT0gUF9ESVNQTEFZX0NVUlJFTkNZX1BST1BFUlRZX05BTUVcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGVudGl0eVNldDogRW50aXR5U2V0IHwgdW5kZWZpbmVkID1cblx0XHRcdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0Ll90eXBlID09PSBcIkVudGl0eVNldFwiID8gZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldCA6IHVuZGVmaW5lZCxcblx0XHRcdFx0cmVxdWlyZWRQcm9wZXJ0aWVzID0gZW50aXR5U2V0Py5hbm5vdGF0aW9ucy5DYXBhYmlsaXRpZXM/LkZpbHRlclJlc3RyaWN0aW9ucz8uUmVxdWlyZWRQcm9wZXJ0aWVzID8/IFtdO1xuXHRcdFx0ZGlzcGxheUN1cnJlbmN5SXNNYW5kYXRvcnkgPSByZXF1aXJlZFByb3BlcnRpZXMuc29tZShcblx0XHRcdFx0KHJlcXVpcmVkUHJvcGVydHk6IFByb3BlcnR5UGF0aCkgPT4gcmVxdWlyZWRQcm9wZXJ0eS52YWx1ZSA9PT0gRElTUExBWV9DVVJSRU5DWV9QUk9QRVJUWV9OQU1FXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gZGlzcGxheUN1cnJlbmN5SXNNYW5kYXRvcnk7XG5cdH1cblxuXHQvKipcblx0ICogQWN0aXZhdGUgdmFyaWFudCBmcm9tIHZhcmlhbnQgbWFuYWdlbWVudCBhbmQgcmV0dXJuIGlmIGFwcFN0YXRlIG5lZWRzIHRvIGJlIGFwcGxpZWQuXG5cdCAqIEBwYXJhbSB2YXJpYW50TWFuYWdlbWVudCBWYXJpYW50TWFuYWdlbWVudCB1c2VkIGJ5IGZpbHRlciBiYXJcblx0ICogQHBhcmFtIHJlcVN0ZFZhcmlhbnQgSWYgc3RhbmRhcmQgdmFyaWFudCBpcyByZXF1aXJlZCB0byBiZSB1c2VkXG5cdCAqIEBwYXJhbSBmaWx0ZXJWYXJpYW50QXBwbGllZCBJcyBhIGZpbHRlciB2YXJpYW50IGFscmVhZHkgYXBwbGllZFxuXHQgKiBAcmV0dXJucyBQcm9taXNlIGZvciBhc3luY2hyb25vdXMgaGFuZGxpbmdcblx0ICovXG5cdGFzeW5jIF9hY3RpdmF0ZVZhcmlhbnRBbmREZXRlcm1pbmVBcHBseUFwcFN0YXRlKFxuXHRcdHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudCB8IHVuZGVmaW5lZCxcblx0XHRyZXFTdGRWYXJpYW50OiBib29sZWFuLFxuXHRcdGZpbHRlclZhcmlhbnRBcHBsaWVkOiBib29sZWFuXG5cdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGlmICh2YXJpYW50TWFuYWdlbWVudCAmJiAhZmlsdGVyVmFyaWFudEFwcGxpZWQpIHtcblx0XHRcdGxldCB2YXJpYW50S2V5ID0gcmVxU3RkVmFyaWFudCA/IHZhcmlhbnRNYW5hZ2VtZW50LmdldFN0YW5kYXJkVmFyaWFudEtleSgpIDogdmFyaWFudE1hbmFnZW1lbnQuZ2V0RGVmYXVsdFZhcmlhbnRLZXkoKTtcblx0XHRcdGlmICh2YXJpYW50S2V5ID09PSBudWxsKSB7XG5cdFx0XHRcdHZhcmlhbnRLZXkgPSB2YXJpYW50TWFuYWdlbWVudC5nZXRJZCgpO1xuXHRcdFx0fVxuXHRcdFx0YXdhaXQgQ29udHJvbFZhcmlhbnRBcHBseUFQSS5hY3RpdmF0ZVZhcmlhbnQoe1xuXHRcdFx0XHRlbGVtZW50OiB2YXJpYW50TWFuYWdlbWVudCxcblx0XHRcdFx0dmFyaWFudFJlZmVyZW5jZTogdmFyaWFudEtleVxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gcmVxU3RkVmFyaWFudCB8fCB2YXJpYW50TWFuYWdlbWVudC5nZXREZWZhdWx0VmFyaWFudEtleSgpID09PSB2YXJpYW50TWFuYWdlbWVudC5nZXRTdGFuZGFyZFZhcmlhbnRLZXkoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBWYXJpYW50IG1hbmFnZW1lbnQgdXNlZCBieSBmaWx0ZXIgYmFyLlxuXHQgKiBAcGFyYW0gdmlldyBWaWV3IG9mIHRoZSBMUiBmaWx0ZXIgYmFyXG5cdCAqIEByZXR1cm5zIFZhcmlhbnRNYW5hZ2VtZW50IGlmIHVzZWRcblx0ICovXG5cdF9nZXRGaWx0ZXJCYXJWTSh2aWV3OiBWaWV3KTogVmFyaWFudE1hbmFnZW1lbnQgfCB1bmRlZmluZWQge1xuXHRcdGxldCB2YXJpYW50TWFuYWdlbWVudDtcblx0XHRjb25zdCB2aWV3RGF0YSA9IHZpZXcuZ2V0Vmlld0RhdGEoKSBhcyBMUlZpZXdEYXRhO1xuXHRcdHN3aXRjaCAodmlld0RhdGEudmFyaWFudE1hbmFnZW1lbnQpIHtcblx0XHRcdGNhc2UgVmFyaWFudE1hbmFnZW1lbnRUeXBlLlBhZ2U6XG5cdFx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50ID0gdmlldy5ieUlkKFwiZmU6OlBhZ2VWYXJpYW50TWFuYWdlbWVudFwiKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Db250cm9sOlxuXHRcdFx0XHR2YXJpYW50TWFuYWdlbWVudCA9ICh2aWV3LmdldENvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcikuX2dldEZpbHRlckJhclZhcmlhbnRDb250cm9sKCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBWYXJpYW50TWFuYWdlbWVudFR5cGUuTm9uZTpcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFyaWFudE1hbmFnZW1lbnQgYXMgVmFyaWFudE1hbmFnZW1lbnQgfCB1bmRlZmluZWQ7XG5cdH1cblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3JlcXVpcmUtYXdhaXRcblx0YXN5bmMgaGFuZGxlVmFyaWFudElkUGFzc2VkVmlhVVJMUGFyYW1zKG9VcmxQYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBQcm9taXNlPHVua25vd24+IHtcblx0XHRjb25zdCBhUGFnZVZhcmlhbnRJZCA9IG9VcmxQYXJhbXNbXCJzYXAtdWktZmUtdmFyaWFudC1pZFwiXSxcblx0XHRcdGFGaWx0ZXJCYXJWYXJpYW50SWQgPSBvVXJsUGFyYW1zW1wic2FwLXVpLWZlLWZpbHRlcmJhci12YXJpYW50LWlkXCJdLFxuXHRcdFx0YVRhYmxlVmFyaWFudElkID0gb1VybFBhcmFtc1tcInNhcC11aS1mZS10YWJsZS12YXJpYW50LWlkXCJdLFxuXHRcdFx0YUNoYXJ0VmFyaWFudElkID0gb1VybFBhcmFtc1tcInNhcC11aS1mZS1jaGFydC12YXJpYW50LWlkXCJdO1xuXHRcdGxldCBvVmFyaWFudElEczogVmFyaWFudElEcyB8IHVuZGVmaW5lZDtcblx0XHRpZiAoYVBhZ2VWYXJpYW50SWQgfHwgYUZpbHRlckJhclZhcmlhbnRJZCB8fCBhVGFibGVWYXJpYW50SWQgfHwgYUNoYXJ0VmFyaWFudElkKSB7XG5cdFx0XHRvVmFyaWFudElEcyA9IHtcblx0XHRcdFx0c1BhZ2VWYXJpYW50SWQ6IGFQYWdlVmFyaWFudElkICYmIGFQYWdlVmFyaWFudElkWzBdLFxuXHRcdFx0XHRzRmlsdGVyQmFyVmFyaWFudElkOiBhRmlsdGVyQmFyVmFyaWFudElkICYmIGFGaWx0ZXJCYXJWYXJpYW50SWRbMF0sXG5cdFx0XHRcdHNUYWJsZVZhcmlhbnRJZDogYVRhYmxlVmFyaWFudElkICYmIGFUYWJsZVZhcmlhbnRJZFswXSxcblx0XHRcdFx0c0NoYXJ0VmFyaWFudElkOiBhQ2hhcnRWYXJpYW50SWQgJiYgYUNoYXJ0VmFyaWFudElkWzBdXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5faGFuZGxlQ29udHJvbFZhcmlhbnRJZChvVmFyaWFudElEcyk7XG5cdH1cblxuXHRhc3luYyBfaGFuZGxlQ29udHJvbFZhcmlhbnRJZChvVmFyaWFudElEczogVmFyaWFudElEcyB8IHVuZGVmaW5lZCk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdGxldCBvVk06IFZhcmlhbnRNYW5hZ2VtZW50O1xuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRQYWdlQ29udHJvbGxlcigpPy5nZXRWaWV3KCksXG5cdFx0XHRhUHJvbWlzZXM6IFByb21pc2U8Ym9vbGVhbj5bXSA9IFtdO1xuXHRcdGNvbnN0IHNWYXJpYW50TWFuYWdlbWVudCA9IG9WaWV3LmdldFZpZXdEYXRhKCkudmFyaWFudE1hbmFnZW1lbnQ7XG5cdFx0aWYgKG9WYXJpYW50SURzICYmIG9WYXJpYW50SURzLnNQYWdlVmFyaWFudElkICYmIHNWYXJpYW50TWFuYWdlbWVudCA9PT0gXCJQYWdlXCIpIHtcblx0XHRcdG9WTSA9IG9WaWV3LmJ5SWQoXCJmZTo6UGFnZVZhcmlhbnRNYW5hZ2VtZW50XCIpIGFzIFZhcmlhbnRNYW5hZ2VtZW50O1xuXHRcdFx0dGhpcy5faGFuZGxlUGFnZVZhcmlhbnRJZChvVmFyaWFudElEcywgb1ZNLCBhUHJvbWlzZXMpO1xuXHRcdH0gZWxzZSBpZiAob1ZhcmlhbnRJRHMgJiYgc1ZhcmlhbnRNYW5hZ2VtZW50ID09PSBcIkNvbnRyb2xcIikge1xuXHRcdFx0aWYgKG9WYXJpYW50SURzLnNGaWx0ZXJCYXJWYXJpYW50SWQpIHtcblx0XHRcdFx0b1ZNID0gKG9WaWV3LmdldENvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcikuX2dldEZpbHRlckJhclZhcmlhbnRDb250cm9sKCkhO1xuXHRcdFx0XHR0aGlzLl9oYW5kbGVGaWx0ZXJCYXJWYXJpYW50Q29udHJvbElkKG9WYXJpYW50SURzLCBvVk0sIGFQcm9taXNlcyk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLmFsbChhUHJvbWlzZXMpO1xuXHR9XG5cblx0Lypcblx0ICogSGFuZGxlcyBwYWdlIGxldmVsIHZhcmlhbnQgYW5kIHBhc3NlcyB0aGUgdmFyaWFudCB0byB0aGUgZnVuY3Rpb24gdGhhdCBwdXNoZXMgdGhlIHByb21pc2UgdG8gdGhlIHByb21pc2UgYXJyYXlcblx0ICpcblx0ICogQHBhcmFtIG9WYXJpbmF0SURzIGNvbnRhaW5zIGFuIG9iamVjdCBvZiBhbGwgdmFyaWFudCBJRHNcblx0ICogQHBhcmFtIG9WTSBjb250YWlucyB0aGUgdmFpcmFudCBtYW5hZ2VtZW50IG9iamVjdCBmb3IgdGhlIHBhZ2UgdmFyaWFudFxuXHQgKiBAcGFyYW0gYVByb21pc2VzIGlzIGFuIGFycmF5IG9mIGFsbCBwcm9taXNlc1xuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2hhbmRsZVBhZ2VWYXJpYW50SWQob1ZhcmlhbnRJRHM6IFZhcmlhbnRJRHMsIG9WTTogVmFyaWFudE1hbmFnZW1lbnQsIGFQcm9taXNlczogUHJvbWlzZTxib29sZWFuPltdKTogdm9pZCB7XG5cdFx0b1ZNLmdldFZhcmlhbnRzKCk/LmZvckVhY2goKG9WYXJpYW50OiBWYXJpYW50T2JqZWN0KSA9PiB7XG5cdFx0XHR0aGlzLl9maW5kQW5kUHVzaFZhcmlhbnRUb1Byb21pc2Uob1ZhcmlhbnQsIG9WYXJpYW50SURzLnNQYWdlVmFyaWFudElkLCBvVk0sIGFQcm9taXNlcywgdHJ1ZSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKlxuXHQgKiBIYW5kbGVzIGNvbnRyb2wgbGV2ZWwgdmFyaWFudCBmb3IgZmlsdGVyIGJhciBhbmQgcGFzc2VzIHRoZSB2YXJpYW50IHRvIHRoZSBmdW5jdGlvbiB0aGF0IHB1c2hlcyB0aGUgcHJvbWlzZSB0byB0aGUgcHJvbWlzZSBhcnJheVxuXHQgKlxuXHQgKiBAcGFyYW0gb1ZhcmluYXRJRHMgY29udGFpbnMgYW4gb2JqZWN0IG9mIGFsbCB2YXJpYW50IElEc1xuXHQgKiBAcGFyYW0gb1ZNIGNvbnRhaW5zIHRoZSB2YWlyYW50IG1hbmFnZW1lbnQgb2JqZWN0IGZvciB0aGUgZmlsdGVyIGJhclxuXHQgKiBAcGFyYW0gYVByb21pc2VzIGlzIGFuIGFycmF5IG9mIGFsbCBwcm9taXNlc1xuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblxuXHRfaGFuZGxlRmlsdGVyQmFyVmFyaWFudENvbnRyb2xJZChvVmFyaWFudElEczogVmFyaWFudElEcywgb1ZNOiBWYXJpYW50TWFuYWdlbWVudCwgYVByb21pc2VzOiBQcm9taXNlPGJvb2xlYW4+W10pOiB2b2lkIHtcblx0XHRpZiAob1ZNKSB7XG5cdFx0XHRvVk0uZ2V0VmFyaWFudHMoKS5mb3JFYWNoKChvVmFyaWFudDogVmFyaWFudE9iamVjdCkgPT4ge1xuXHRcdFx0XHR0aGlzLl9maW5kQW5kUHVzaFZhcmlhbnRUb1Byb21pc2Uob1ZhcmlhbnQsIG9WYXJpYW50SURzLnNGaWx0ZXJCYXJWYXJpYW50SWQsIG9WTSwgYVByb21pc2VzLCB0cnVlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qXG5cdCAqIE1hdGNoZXMgdGhlIHZhcmlhbnQgSUQgcHJvdmlkZWQgaW4gdGhlIHVybCB0byB0aGUgYXZhaWxhYmxlIHZhaXJhbnQgSURzIGFuZCBwdXNoZXMgdGhlIGFwcHJvcHJpYXRlIHByb21pc2UgdG8gdGhlIHByb21pc2UgYXJyYXlcblx0ICpcblx0ICogQHBhcmFtIG9WYXJpYW50IGlzIGFuIG9iamVjdCBmb3IgYSBzcGVjaWZpYyB2YXJpYW50XG5cdCAqIEBwYXJhbSBzVmFyaWFudElkIGlzIHRoZSB2YXJpYW50IElEIHByb3ZpZGVkIGluIHRoZSB1cmxcblx0ICogQHBhcmFtIG9WTSBpcyB0aGUgdmFyaWFudCBtYW5hZ2VtZW50IG9iamVjdCBmb3IgdGhlIHNwZWNmaWMgdmFyaWFudFxuXHQgKiBAcGFyYW0gYVByb21pc2VzIGlzIGFuIGFycmF5IG9mIHByb21pc2VzXG5cdCAqIEBwYXJhbSBiRmlsdGVyVmFyaWFudEFwcGxpZWQgaXMgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIHdoaWNoIGlzIHNldCB0byB0dXJlIGluIGNhc2UgdGhlIGZpbHRlciB2YXJpYW50IGlzIGFwcGxpZWRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9maW5kQW5kUHVzaFZhcmlhbnRUb1Byb21pc2UoXG5cdFx0Ly9UaGlzIGZ1bmN0aW9uIGZpbmRzIHRoZSBzdWl0YWJsZSB2YXJpYW50IGZvciB0aGUgdmFyaWFudElEIHByb3ZpZGVkIGluIHRoZSB1cmwgYW5kIHB1c2hlcyB0aGVtIHRvIHRoZSBwcm9taXNlIGFycmF5XG5cdFx0b1ZhcmlhbnQ6IFZhcmlhbnRPYmplY3QsXG5cdFx0c1ZhcmlhbnRJZDogc3RyaW5nLFxuXHRcdG9WTTogVmFyaWFudE1hbmFnZW1lbnQsXG5cdFx0YVByb21pc2VzOiBQcm9taXNlPGJvb2xlYW4+W10sXG5cdFx0YkZpbHRlclZhcmlhbnRBcHBsaWVkPzogYm9vbGVhblxuXHQpOiB2b2lkIHtcblx0XHRpZiAob1ZhcmlhbnQua2V5ID09PSBzVmFyaWFudElkKSB7XG5cdFx0XHRhUHJvbWlzZXMucHVzaCh0aGlzLl9hcHBseUNvbnRyb2xWYXJpYW50KG9WTSwgc1ZhcmlhbnRJZCwgYkZpbHRlclZhcmlhbnRBcHBsaWVkKSk7XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgX2FwcGx5Q29udHJvbFZhcmlhbnQob1ZhcmlhbnQ6IFZhcmlhbnRNYW5hZ2VtZW50LCBzVmFyaWFudElEOiBzdHJpbmcsIGJGaWx0ZXJWYXJpYW50QXBwbGllZCA9IGZhbHNlKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0Y29uc3Qgc1ZhcmlhbnRSZWZlcmVuY2UgPSB0aGlzLl9jaGVja0lmVmFyaWFudElkSXNBdmFpbGFibGUob1ZhcmlhbnQsIHNWYXJpYW50SUQpID8gc1ZhcmlhbnRJRCA6IG9WYXJpYW50LmdldFN0YW5kYXJkVmFyaWFudEtleSgpO1xuXHRcdGNvbnN0IG9WTSA9IENvbnRyb2xWYXJpYW50QXBwbHlBUEkuYWN0aXZhdGVWYXJpYW50KHtcblx0XHRcdGVsZW1lbnQ6IG9WYXJpYW50LFxuXHRcdFx0dmFyaWFudFJlZmVyZW5jZTogc1ZhcmlhbnRSZWZlcmVuY2Vcblx0XHR9KTtcblx0XHRyZXR1cm4gb1ZNLnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIGJGaWx0ZXJWYXJpYW50QXBwbGllZDtcblx0XHR9KTtcblx0fVxuXG5cdF9jaGVja0lmVmFyaWFudElkSXNBdmFpbGFibGUob1ZNOiBWYXJpYW50TWFuYWdlbWVudCwgc1ZhcmlhbnRJZDogc3RyaW5nIHwgbnVsbCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGFWYXJpYW50cyA9IG9WTS5nZXRWYXJpYW50cygpO1xuXHRcdGxldCBiSXNDb250cm9sU3RhdGVWYXJpYW50QXZhaWxhYmxlID0gZmFsc2U7XG5cdFx0YVZhcmlhbnRzLmZvckVhY2goZnVuY3Rpb24gKG9WYXJpYW50KSB7XG5cdFx0XHRpZiAob1ZhcmlhbnQuZ2V0S2V5KCkgPT09IHNWYXJpYW50SWQpIHtcblx0XHRcdFx0YklzQ29udHJvbFN0YXRlVmFyaWFudEF2YWlsYWJsZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGJJc0NvbnRyb2xTdGF0ZVZhcmlhbnRBdmFpbGFibGU7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIEZpbHRlckJhciBjb250cm9sLlxuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRpZCE6IHN0cmluZztcblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgcmVsYXRpdmUgcGF0aCBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIG1ldGFtb2RlbCwgYmFzZWQgb24gdGhlIGN1cnJlbnQgY29udGV4dFBhdGguXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRleHBlY3RlZEFubm90YXRpb25zOiBbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25GaWVsZHNcIl0sXG5cdFx0ZXhwZWN0ZWRUeXBlczogW1wiRW50aXR5U2V0XCIsIFwiRW50aXR5VHlwZVwiXVxuXHR9KVxuXHRtZXRhUGF0aCE6IHN0cmluZztcblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgcGF0aCBvZiB0aGUgY29udGV4dCB1c2VkIGluIHRoZSBjdXJyZW50IHBhZ2Ugb3IgYmxvY2suXG5cdCAqIFRoaXMgc2V0dGluZyBpcyBkZWZpbmVkIGJ5IHRoZSBmcmFtZXdvcmsuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRleHBlY3RlZFR5cGVzOiBbXCJFbnRpdHlTZXRcIiwgXCJFbnRpdHlUeXBlXCIsIFwiTmF2aWdhdGlvblByb3BlcnR5XCJdXG5cdH0pXG5cdGNvbnRleHRQYXRoITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBJZiB0cnVlLCB0aGUgc2VhcmNoIGlzIHRyaWdnZXJlZCBhdXRvbWF0aWNhbGx5IHdoZW4gYSBmaWx0ZXIgdmFsdWUgaXMgY2hhbmdlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcblx0bGl2ZU1vZGU/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBQYXJhbWV0ZXIgd2hpY2ggc2V0cyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgRmlsdGVyQmFyIGJ1aWxkaW5nIGJsb2NrXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IHRydWUgfSlcblx0dmlzaWJsZT86IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIERpc3BsYXlzIHBvc3NpYmxlIGVycm9ycyBkdXJpbmcgdGhlIHNlYXJjaCBpbiBhIG1lc3NhZ2UgYm94XG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IHRydWUgfSlcblx0c2hvd01lc3NhZ2VzPzogYm9vbGVhbjtcblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgJ0NsZWFyJyBidXR0b24gb24gdGhlIEZpbHRlckJhci5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcblx0c2hvd0NsZWFyQnV0dG9uPzogYm9vbGVhbjtcblxuXHQvKipcblx0ICogQWdncmVnYXRlIGZpbHRlciBmaWVsZHMgb2YgdGhlIEZpbHRlckJhciBidWlsZGluZyBibG9ja1xuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC5mZS5tYWNyb3MuZmlsdGVyQmFyLkZpbHRlckZpZWxkXCIsIG11bHRpcGxlOiB0cnVlIH0pXG5cdGZpbHRlckZpZWxkcz86IEZpbHRlckZpZWxkW107XG5cblx0Y29udGVudCE6IEZpbHRlckJhcjtcblxuXHQvKipcblx0ICogVGhpcyBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSAnR28nIGJ1dHRvbiBpcyBwcmVzc2VkIG9yIGFmdGVyIGEgY29uZGl0aW9uIGNoYW5nZS5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QGV2ZW50KClcblx0c2VhcmNoITogRXZlbnRIYW5kbGVyPFVJNUV2ZW50PHt9LCBGaWx0ZXJCYXJBUEk+PjtcblxuXHQvKipcblx0ICogVGhpcyBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSAnR28nIGJ1dHRvbiBpcyBwcmVzc2VkIG9yIGFmdGVyIGEgY29uZGl0aW9uIGNoYW5nZS4gVGhpcyBpcyBvbmx5IHVzZWQgaW50ZXJuYWxseSBieSBzYXAuZmUgKFNBUCBGaW9yaSBlbGVtZW50cykgYW5kXG5cdCAqIGV4cG9zZXMgcGFyYW1ldGVycyBmcm9tIGludGVybmFsIE1EQy1GaWx0ZXJCYXIgc2VhcmNoIGV2ZW50XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRAZXZlbnQoKVxuXHRpbnRlcm5hbFNlYXJjaCE6IHN0cmluZztcblxuXHQvKipcblx0ICogVGhpcyBldmVudCBpcyBmaXJlZCBhZnRlciBlaXRoZXIgYSBmaWx0ZXIgdmFsdWUgb3IgdGhlIHZpc2liaWxpdHkgb2YgYSBmaWx0ZXIgaXRlbSBoYXMgYmVlbiBjaGFuZ2VkLiBUaGUgZXZlbnQgY29udGFpbnMgY29uZGl0aW9ucyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAZXZlbnQoKVxuXHRmaWx0ZXJDaGFuZ2VkITogRXZlbnRIYW5kbGVyPFVJNUV2ZW50PEZpbHRlckJhckJhc2UkRmlsdGVyc0NoYW5nZWRFdmVudFBhcmFtZXRlcnMsIEZpbHRlckJhckFQST4+O1xuXG5cdC8qKlxuXHQgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIHdoZW4gdGhlICdDbGVhcicgYnV0dG9uIGlzIHByZXNzZWQuIFRoaXMgaXMgb25seSBwb3NzaWJsZSB3aGVuIHRoZSAnQ2xlYXInIGJ1dHRvbiBpcyBlbmFibGVkLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAZXZlbnQoKVxuXHRhZnRlckNsZWFyITogRXZlbnRIYW5kbGVyPFVJNUV2ZW50PHt9LCBGaWx0ZXJCYXJBUEk+PjtcblxuXHQvKipcblx0ICogVGhpcyBldmVudCBpcyBmaXJlZCBhZnRlciBlaXRoZXIgYSBmaWx0ZXIgdmFsdWUgb3IgdGhlIHZpc2liaWxpdHkgb2YgYSBmaWx0ZXIgaXRlbSBoYXMgYmVlbiBjaGFuZ2VkLiBUaGUgZXZlbnQgY29udGFpbnMgY29uZGl0aW9ucyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzLlxuXHQgKiBUaGlzIGlzIG9ubHkgdXNlZCBpbnRlcm5hbGx5IGJ5IHNhcC5mZSAoU0FQIEZpb3JpIGVsZW1lbnRzKS4gVGhpcyBleHBvc2VzIHBhcmFtZXRlcnMgZnJvbSB0aGUgTURDLUZpbHRlckJhciBmaWx0ZXJDaGFuZ2VkIGV2ZW50IHRoYXQgaXMgdXNlZCBieSBzYXAuZmUuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRAZXZlbnQoKVxuXHRpbnRlcm5hbEZpbHRlckNoYW5nZWQhOiBzdHJpbmc7XG5cblx0cHJpdmF0ZSB0ZWxlbWV0cnk/OiBGaWx0ZXJCYXJUZWxlbWV0cnk7XG5cblx0Y29uc3RydWN0b3IocHJvcHM/OiAkQ29udHJvbFNldHRpbmdzICYgUHJvcGVydGllc09mPEZpbHRlckJhckFQST4gJiBFdmVudHNPZjxGaWx0ZXJCYXJBUEk+LCBvdGhlcnM/OiAkQ29udHJvbFNldHRpbmdzKSB7XG5cdFx0c3VwZXIocHJvcHMsIG90aGVycyk7XG5cdFx0dGhpcy50ZWxlbWV0cnkgPSBuZXcgRmlsdGVyQmFyVGVsZW1ldHJ5KHRoaXMpO1xuXHRcdHRoaXMuYXR0YWNoU3RhdGVDaGFuZ2VIYW5kbGVyKCk7XG5cdH1cblxuXHRwcml2YXRlIGF0dGFjaFN0YXRlQ2hhbmdlSGFuZGxlcigpOiB2b2lkIHtcblx0XHRTdGF0ZVV0aWwuZGV0YWNoU3RhdGVDaGFuZ2UodGhpcy5zdGF0ZUNoYW5nZUhhbmRsZXIpO1xuXHRcdFN0YXRlVXRpbC5hdHRhY2hTdGF0ZUNoYW5nZSh0aGlzLnN0YXRlQ2hhbmdlSGFuZGxlcik7XG5cdH1cblxuXHRzdGF0ZUNoYW5nZUhhbmRsZXIob0V2ZW50OiBVSTVFdmVudDx7IGNvbnRyb2w6IENvbnRyb2wgfT4pOiB2b2lkIHtcblx0XHRjb25zdCBjb250cm9sID0gb0V2ZW50LmdldFBhcmFtZXRlcihcImNvbnRyb2xcIik7XG5cdFx0aWYgKGNvbnRyb2wuaXNBPEZpbHRlckJhcj4oXCJzYXAudWkubWRjLkZpbHRlckJhclwiKSkge1xuXHRcdFx0Y29uc3QgZmlsdGVyQmFyQVBJID0gY29udHJvbC5nZXRQYXJlbnQoKSBhcyB1bmtub3duIGFzIHsgaGFuZGxlU3RhdGVDaGFuZ2U/OiBGdW5jdGlvbiB9O1xuXHRcdFx0aWYgKGZpbHRlckJhckFQST8uaGFuZGxlU3RhdGVDaGFuZ2UpIHtcblx0XHRcdFx0ZmlsdGVyQmFyQVBJLmhhbmRsZVN0YXRlQ2hhbmdlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0QHhtbEV2ZW50SGFuZGxlcigpXG5cdGhhbmRsZVNlYXJjaChvRXZlbnQ6IEZpbHRlckJhckJhc2UkU2VhcmNoRXZlbnQpOiB2b2lkIHtcblx0XHR0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk/LmlubGluZUVkaXRGbG93Py5pbmxpbmVFZGl0RGlzY2FyZCgpO1xuXHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSBvRXZlbnQuZ2V0U291cmNlKCkgYXMgRmlsdGVyQmFyIHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGV2ZW50UGFyYW1ldGVycyA9IG9FdmVudC5nZXRQYXJhbWV0ZXJzKCk7XG5cdFx0aWYgKG9GaWx0ZXJCYXIpIHtcblx0XHRcdGNvbnN0IGNvbmRpdGlvbnMgPSAob0ZpbHRlckJhci5nZXRGaWx0ZXJDb25kaXRpb25zKCkgPz8ge30pIGFzIFJlY29yZDxzdHJpbmcsIENvbmRpdGlvbk9iamVjdFtdPjtcblx0XHRcdGNvbnN0IHByZXBhcmVkRXZlbnRQYXJhbWV0ZXJzID0gdGhpcy5fcHJlcGFyZUV2ZW50UGFyYW1ldGVycyhvRmlsdGVyQmFyKTtcblx0XHRcdHRoaXMudGVsZW1ldHJ5Py5vblNlYXJjaChldmVudFBhcmFtZXRlcnMsIGNvbmRpdGlvbnMpO1xuXHRcdFx0dGhpcy5maXJlRXZlbnQoXCJpbnRlcm5hbFNlYXJjaFwiLCBtZXJnZSh7IGNvbmRpdGlvbnM6IGNvbmRpdGlvbnMgfSwgZXZlbnRQYXJhbWV0ZXJzKSk7XG5cdFx0XHR0aGlzLmZpcmVFdmVudChcInNlYXJjaFwiLCBtZXJnZSh7IHJlYXNvbjogZXZlbnRQYXJhbWV0ZXJzLnJlYXNvbiB9LCBwcmVwYXJlZEV2ZW50UGFyYW1ldGVycykpO1xuXHRcdFx0dGhpcy5faGFzUGVuZGluZ0ZpbHRlcnMgPSBmYWxzZTtcblx0XHRcdGlmICghdGhpcy5saXZlTW9kZSkge1xuXHRcdFx0XHR0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk/LmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0QHhtbEV2ZW50SGFuZGxlcigpXG5cdGFzeW5jIGhhbmRsZUZpbHRlckNoYW5nZWQob0V2ZW50OiBGaWx0ZXJCYXJCYXNlJEZpbHRlcnNDaGFuZ2VkRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBmaWx0ZXJCYXIgPSBvRXZlbnQuZ2V0U291cmNlKCkgYXMgRmlsdGVyQmFyIHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IG9FdmVudFBhcmFtZXRlcnMgPSBvRXZlbnQuZ2V0UGFyYW1ldGVycygpO1xuXHRcdGlmIChmaWx0ZXJCYXIpIHtcblx0XHRcdGlmICghZmlsdGVyQmFyLmdldExpdmVNb2RlKCkpIHtcblx0XHRcdFx0YXdhaXQgVU9NVmFsaWRhdGlvbkRlbGVnYXRlLnZhbGlkYXRlQWxsVU9NRmllbGRzKGZpbHRlckJhciwgXCJmaWx0ZXJDaGFuZ2VcIik7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBvQ29uZGl0aW9ucyA9IGZpbHRlckJhci5nZXRGaWx0ZXJDb25kaXRpb25zKCk7XG5cdFx0XHRjb25zdCBldmVudFBhcmFtZXRlcnM6IG9iamVjdCA9IHRoaXMuX3ByZXBhcmVFdmVudFBhcmFtZXRlcnMoZmlsdGVyQmFyKTtcblx0XHRcdHRoaXMudGVsZW1ldHJ5Py5vbkZpbHRlcnNDaGFuZ2VkKHRoaXMuX2dldEZpbHRlckJhclJlYXNvbihmaWx0ZXJCYXIpKTtcblx0XHRcdHRoaXMuZmlyZUV2ZW50KFwiaW50ZXJuYWxGaWx0ZXJDaGFuZ2VkXCIsIG1lcmdlKHsgY29uZGl0aW9uczogb0NvbmRpdGlvbnMgfSwgb0V2ZW50UGFyYW1ldGVycykpO1xuXHRcdFx0dGhpcy5maXJlRXZlbnQoXCJmaWx0ZXJDaGFuZ2VkXCIsIGV2ZW50UGFyYW1ldGVycyk7XG5cdFx0XHQvLyBTZXQgaGFzUGVuZGluZ0ZpbHRlcnMgdG8gdHJ1ZSBvbmx5IGlmIGNvbmRpdGlvbnNCYXNlZCBpcyB0cnVlXG5cdFx0XHRpZiAob0V2ZW50UGFyYW1ldGVycz8uY29uZGl0aW9uc0Jhc2VkKSB7XG5cdFx0XHRcdHRoaXMuX2hhc1BlbmRpbmdGaWx0ZXJzID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfZ2V0RmlsdGVyQmFyUmVhc29uKGZpbHRlckJhcjogRmlsdGVyQmFyICYgeyBfc1JlYXNvbj86IHN0cmluZyB9KTogc3RyaW5nIHtcblx0XHRyZXR1cm4gZmlsdGVyQmFyPy5fc1JlYXNvbiA/PyBcIlwiO1xuXHR9XG5cblx0X3ByZXBhcmVFdmVudFBhcmFtZXRlcnMob0ZpbHRlckJhcjogRmlsdGVyQmFyKTogUGFydGlhbDxJbnRlcm5hbEJpbmRpbmdJbmZvPiB7XG5cdFx0Y29uc3QgeyBwYXJhbWV0ZXJzLCBmaWx0ZXJzLCBzZWFyY2ggfSA9IEZpbHRlclV0aWxzLmdldEZpbHRlcnMob0ZpbHRlckJhciBhcyB1bmtub3duIGFzIElGaWx0ZXJDb250cm9sKSB8fCB7fTtcblxuXHRcdHJldHVybiB7IHBhcmFtZXRlcnMsIGZpbHRlcnMsIHNlYXJjaCB9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgZmlsdGVyIHZhbHVlcyBmb3IgdGhlIGdpdmVuIHByb3BlcnR5IGluIHRoZSBmaWx0ZXIgYmFyLlxuXHQgKiBUaGUgZmlsdGVyIHZhbHVlcyBjYW4gYmUgZWl0aGVyIGEgc2luZ2xlIHZhbHVlIG9yIGFuIGFycmF5IG9mIHZhbHVlcy5cblx0ICogRWFjaCBmaWx0ZXIgdmFsdWUgbXVzdCBiZSByZXByZXNlbnRlZCBhcyBhIHByaW1pdGl2ZSB2YWx1ZS5cblx0ICogQHBhcmFtIHNDb25kaXRpb25QYXRoIFRoZSBwYXRoIHRvIHRoZSBwcm9wZXJ0eSBhcyBhIGNvbmRpdGlvbiBwYXRoXG5cdCAqIEBwYXJhbSBbc09wZXJhdG9yXSBUaGUgb3BlcmF0b3IgdG8gYmUgdXNlZCAob3B0aW9uYWwpIC0gaWYgbm90IHNldCwgdGhlIGRlZmF1bHQgb3BlcmF0b3IgKEVRKSB3aWxsIGJlIHVzZWRcblx0ICogQHBhcmFtIHZWYWx1ZXMgVGhlIHZhbHVlcyB0byBiZSBhcHBsaWVkXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSBmb3IgYXN5bmNocm9ub3VzIGhhbmRsaW5nXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGFzeW5jIHNldEZpbHRlclZhbHVlcyhcblx0XHRzQ29uZGl0aW9uUGF0aDogc3RyaW5nLFxuXHRcdHNPcGVyYXRvcjogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdHZWYWx1ZXM/OiB1bmRlZmluZWQgfCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgc3RyaW5nW10gfCBudW1iZXJbXSB8IGJvb2xlYW5bXVxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG5cdFx0XHR2VmFsdWVzID0gc09wZXJhdG9yO1xuXHRcdFx0cmV0dXJuIEZpbHRlclV0aWxzLnNldEZpbHRlclZhbHVlcyh0aGlzLmNvbnRlbnQsIHNDb25kaXRpb25QYXRoLCB2VmFsdWVzKTtcblx0XHR9XG5cdFx0cmV0dXJuIEZpbHRlclV0aWxzLnNldEZpbHRlclZhbHVlcyh0aGlzLmNvbnRlbnQsIHNDb25kaXRpb25QYXRoLCBzT3BlcmF0b3IsIHZWYWx1ZXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgQWN0aXZlIEZpbHRlcnMgVGV4dCBTdW1tYXJ5IGZvciB0aGUgZmlsdGVyIGJhci5cblx0ICogQHJldHVybnMgQWN0aXZlIGZpbHRlcnMgc3VtbWFyeSBhcyB0ZXh0XG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGdldEFjdGl2ZUZpbHRlcnNUZXh0KCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuY29udGVudD8uZ2V0QXNzaWduZWRGaWx0ZXJzVGV4dCgpPy5maWx0ZXJzVGV4dCB8fCBcIlwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIFByb3ZpZGVzIGFsbCB0aGUgZmlsdGVycyB0aGF0IGFyZSBjdXJyZW50bHkgYWN0aXZlXG5cdCAqIGFsb25nIHdpdGggdGhlIHNlYXJjaCBleHByZXNzaW9uLlxuXHQgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBhY3RpdmUgZmlsdGVycyBhbmQgdGhlIHNlYXJjaCBleHByZXNzaW9uLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRnZXRGaWx0ZXJzKCk6IG9iamVjdCB7XG5cdFx0cmV0dXJuIEZpbHRlclV0aWxzLmdldEZpbHRlcnModGhpcy5jb250ZW50IGFzIElGaWx0ZXJDb250cm9sKSB8fCB7fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUcmlnZ2VycyB0aGUgQVBJIHNlYXJjaCBvbiB0aGUgZmlsdGVyIGJhci5cblx0ICogQHJldHVybnMgUmV0dXJucyBhIHByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgaWYgZmlsdGVyIGdvIGlzIHRyaWdnZXJlZCBzdWNjZXNzZnVsbHk7IG90aGVyd2lzZSBnZXRzIHJlamVjdGVkLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhc3luYyB0cmlnZ2VyU2VhcmNoKCk6IFByb21pc2U8b2JqZWN0IHwgdW5kZWZpbmVkPiB7XG5cdFx0Y29uc3QgZmlsdGVyQmFyID0gdGhpcy5jb250ZW50O1xuXHRcdHRyeSB7XG5cdFx0XHRpZiAoZmlsdGVyQmFyKSB7XG5cdFx0XHRcdGF3YWl0IGZpbHRlckJhci53YWl0Rm9ySW5pdGlhbGl6YXRpb24oKTtcblx0XHRcdFx0cmV0dXJuIGF3YWl0IGZpbHRlckJhci50cmlnZ2VyU2VhcmNoKCk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG5cdFx0XHRjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuXHRcdFx0TG9nLmVycm9yKGBGRSA6IEJ1aWxkaW5nYmxvY2sgOiBGaWx0ZXJCYXIgOiAke21lc3NhZ2V9YCk7XG5cdFx0XHR0aHJvdyBFcnJvcihtZXNzYWdlKTtcblx0XHR9XG5cdH1cblxuXHRpc1NlbWFudGljRGF0ZUZpbHRlckFwcGxpZWQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIFNlbWFudGljRGF0ZU9wZXJhdG9ycy5oYXNTZW1hbnRpY0RhdGVPcGVyYXRpb25zKHRoaXMuY29udGVudC5nZXRDb25kaXRpb25zKCksIGZhbHNlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHNlbGVjdGlvbiB2YXJpYW50IGZyb20gdGhlIGZpbHRlciBiYXIuXG5cdCAqIE5vdGU6IFRoaXMgbWV0aG9kIHJldHVybnMgYWxsIHRoZSBmaWx0ZXIgdmFsdWVzIHRoYXQgYXJlIHNldCBpbiB0aGUgZmlsdGVyIGJhciwgaW5jbHVkaW5nIHRoZSB0ZXh0IGZyb20gdGhlIHNlYXJjaCBmaWVsZCAod2l0aCAkc2VhcmNoIGFzIHRoZSBwcm9wZXJ0eSBuYW1lKS4gSG93ZXZlciwgaXQgZG9lc24ndCByZXR1cm4gYW55IGZpbHRlciBmaWVsZCBjb25kaXRpb24gdGhhdCB1c2VzIGEgY3VzdG9tIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgd2l0aCBhIHtAbGluayBzYXAuZmUubmF2aWdhdGlvbi5TZWxlY3Rpb25WYXJpYW50fVxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhc3luYyBnZXRTZWxlY3Rpb25WYXJpYW50KCk6IFByb21pc2U8U2VsZWN0aW9uVmFyaWFudD4ge1xuXHRcdGNvbnN0IHNlbGVjdGlvblZhcmlhbnQgPSBhd2FpdCBzdGF0ZUhlbHBlci5nZXRTZWxlY3Rpb25WYXJpYW50KHRoaXMuZ2V0Q29udGVudCgpKTtcblx0XHRjb25zdCBjb250cm9sbGVyID0gdGhpcy5nZXRQYWdlQ29udHJvbGxlcigpIGFzIExpc3RSZXBvcnRDb250cm9sbGVyO1xuXHRcdGlmIChjb250cm9sbGVyICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IHZpZXcgPSBjb250cm9sbGVyPy5nZXRWaWV3KCksXG5cdFx0XHRcdGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh2aWV3KSxcblx0XHRcdFx0bmF2aWdhdGlvblNlcnZpY2UgPSBhcHBDb21wb25lbnQ/LmdldE5hdmlnYXRpb25TZXJ2aWNlKCksXG5cdFx0XHRcdGRhdGFNb2RlbE9iamVjdCA9IHRoaXMuZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGgodGhpcy5tZXRhUGF0aCk7XG5cdFx0XHRpZiAoZGF0YU1vZGVsT2JqZWN0Py50YXJnZXRFbnRpdHlTZXQ/Lm5hbWUpIHtcblx0XHRcdFx0Y29uc3Qgc0NvbnRleHRVcmwgPVxuXHRcdFx0XHRcdGRhdGFNb2RlbE9iamVjdD8udGFyZ2V0RW50aXR5U2V0Py5uYW1lICYmXG5cdFx0XHRcdFx0bmF2aWdhdGlvblNlcnZpY2U/LmNvbnN0cnVjdENvbnRleHRVcmwoZGF0YU1vZGVsT2JqZWN0Py50YXJnZXRFbnRpdHlTZXQ/Lm5hbWUsIHZpZXcuZ2V0TW9kZWwoKSk7XG5cdFx0XHRcdHNlbGVjdGlvblZhcmlhbnQuc2V0RmlsdGVyQ29udGV4dFVybChzQ29udGV4dFVybCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBzZWxlY3Rpb25WYXJpYW50O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgbGlzdCBvZiBtYW5kYXRvcnkgZmlsdGVyIHByb3BlcnR5IG5hbWVzLlxuXHQgKiBAcmV0dXJucyBUaGUgbGlzdCBvZiBtYW5kYXRvcnkgZmlsdGVyIHByb3BlcnR5IG5hbWVzXG5cdCAqL1xuXHRnZXRNYW5kYXRvcnlGaWx0ZXJQcm9wZXJ0eU5hbWVzKCk6IHN0cmluZ1tdIHtcblx0XHRyZXR1cm4gKHRoaXMuY29udGVudC5nZXRQcm9wZXJ0eUluZm9TZXQoKSBhcyBDb250cm9sUHJvcGVydHlJbmZvW10pXG5cdFx0XHQuZmlsdGVyKGZ1bmN0aW9uIChmaWx0ZXJQcm9wKSB7XG5cdFx0XHRcdHJldHVybiBmaWx0ZXJQcm9wLnJlcXVpcmVkO1xuXHRcdFx0fSlcblx0XHRcdC5tYXAoZnVuY3Rpb24gKHJlcXVpcmVkUHJvcCkge1xuXHRcdFx0XHRyZXR1cm4gcmVxdWlyZWRQcm9wLmNvbmRpdGlvblBhdGg7XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGZpbHRlciBiYXIgcGFyYW1ldGVycyBmb3IgYSBwYXJhbWV0ZXJpemVkIHNlcnZpY2UuXG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIHBhcmFtZXRlcnMgY29uZmlndXJlZCBpbiBhIHBhcmFtZXRlcml6ZWQgc2VydmljZVxuXHQgKi9cblxuXHRnZXRQYXJhbWV0ZXJzKCk6IHN0cmluZ1tdIHtcblx0XHRjb25zdCBmaWx0ZXJCYXIgPSB0aGlzLmNvbnRlbnQ7XG5cdFx0Y29uc3QgcGFyYW1ldGVycyA9IGZpbHRlckJhci5kYXRhKFwicGFyYW1ldGVyc1wiKTtcblx0XHRpZiAocGFyYW1ldGVycykge1xuXHRcdFx0cmV0dXJuIEFycmF5LmlzQXJyYXkocGFyYW1ldGVycykgPyBwYXJhbWV0ZXJzIDogSlNPTi5wYXJzZShwYXJhbWV0ZXJzKTtcblx0XHR9XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cblx0Z2V0VmFyaWFudCgpOiBWYXJpYW50RGF0YSB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IGN1cnJlbnRWYXJpYW50O1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCB2YXJpYW50TW9kZWwgPSB0aGlzLmdldE1vZGVsKFwiJEZsZXhWYXJpYW50c1wiKSBhcyBWYXJpYW50TW9kZWwgfCB1bmRlZmluZWQ7XG5cdFx0XHRjb25zdCB2YXJpYW50QmFja1JlZmVyZW5jZSA9IHRoaXMuY29udGVudC5nZXRWYXJpYW50QmFja3JlZmVyZW5jZSgpO1xuXG5cdFx0XHRpZiAodmFyaWFudE1vZGVsICYmIHZhcmlhbnRCYWNrUmVmZXJlbmNlKSB7XG5cdFx0XHRcdGN1cnJlbnRWYXJpYW50ID0gdmFyaWFudE1vZGVsLmdldFZhcmlhbnQodmFyaWFudE1vZGVsLmdldEN1cnJlbnRWYXJpYW50UmVmZXJlbmNlKHZhcmlhbnRCYWNrUmVmZXJlbmNlKSk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0TG9nLmRlYnVnKFwiQ291bGRuJ3QgZmV0Y2ggdmFyaWFudCBcIiwgZSBhcyBzdHJpbmcpO1xuXHRcdH1cblx0XHRyZXR1cm4gY3VycmVudFZhcmlhbnQ7XG5cdH1cblxuXHQvKipcblx0ICogU2hvd3Mgb3IgaGlkZXMgYW55IGZpbHRlciBmaWVsZCBmcm9tIHRoZSBmaWx0ZXIgYmFyLlxuXHQgKiBUaGUgcHJvcGVydHkgd2lsbCBub3QgYmUgaGlkZGVuIGluc2lkZSB0aGUgYWRhcHRhdGlvbiBkaWFsb2cgYW5kIG1heSBiZSByZS1hZGRlZC5cblx0ICogQHBhcmFtIGNvbmRpdGlvblBhdGggVGhlIHBhdGggdG8gdGhlIHByb3BlcnR5IGFzIGEgY29uZGl0aW9uIHBhdGhcblx0ICogQHBhcmFtIHZpc2libGUgV2hldGhlciBpdCBzaG91bGQgYmUgc2hvd24gb3IgaGlkZGVuXG5cdCAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHJlc29sdmluZyBvbmNlIHRoZSBjaGFuZ2UgaW4gdmlzaWJpbGl0eSB3YXMgYXBwbGllZFxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhc3luYyBzZXRGaWx0ZXJGaWVsZFZpc2libGUoY29uZGl0aW9uUGF0aDogc3RyaW5nLCB2aXNpYmxlOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0YXdhaXQgU3RhdGVVdGlsLmFwcGx5RXh0ZXJuYWxTdGF0ZSh0aGlzLmNvbnRlbnQsIHsgaXRlbXM6IFt7IG5hbWU6IGNvbmRpdGlvblBhdGgsIHZpc2libGUgfV0gfSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgdmlzaWJpbGl0eSBvZiBhIGZpbHRlciBmaWVsZC5cblx0ICogQHBhcmFtIGNvbmRpdGlvblBhdGggVGhlIHBhdGggdG8gdGhlIHByb3BlcnR5IGFzIGEgY29uZGl0aW9uIHBhdGhcblx0ICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byBjaGVjayB3aGV0aGVyIHRoZSBmaWx0ZXIgZmllbGQgaXMgdmlzaWJsZSBvciBub3QuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGFzeW5jIGdldEZpbHRlckZpZWxkVmlzaWJsZShjb25kaXRpb25QYXRoOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRjb25zdCBzdGF0ZTogRXh0ZXJuYWxTdGF0ZVR5cGUgPSBhd2FpdCBTdGF0ZVV0aWwucmV0cmlldmVFeHRlcm5hbFN0YXRlKHRoaXMuY29udGVudCk7XG5cdFx0cmV0dXJuICEhc3RhdGUuaXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS5uYW1lID09PSBjb25kaXRpb25QYXRoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBhc3NvY2lhdGVkIHZhcmlhbnQgbWFuYWdlbWVudC5cblx0ICogQHJldHVybnMgVGhlIHtAbGluayBzYXAudWkuZmwudmFyaWFudHMuVmFyaWFudE1hbmFnZW1lbnR9IGNvbnRyb2wgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWx0ZXIgYmFyLlxuXHQgKi9cblx0Z2V0VmFyaWFudE1hbmFnZW1lbnQoKTogVmFyaWFudE1hbmFnZW1lbnQge1xuXHRcdGNvbnN0IHZhcmlhbnRCYWNrcmVmZXJlbmNlID0gdGhpcy5jb250ZW50LmdldFZhcmlhbnRCYWNrcmVmZXJlbmNlKCk7XG5cdFx0aWYgKHZhcmlhbnRCYWNrcmVmZXJlbmNlKSB7XG5cdFx0XHRyZXR1cm4gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZCh2YXJpYW50QmFja3JlZmVyZW5jZSkgYXMgVmFyaWFudE1hbmFnZW1lbnQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgVmFyaWFudCBiYWNrIHJlZmVyZW5jZSBub3QgZGVmaW5lZCBvbiB0aGUgZmlsdGVyIGJhciAke3RoaXMuaWR9YCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIHZhcmlhbnQgYmFjayByZWZlcmVuY2UgYXNzb2NpYXRpb24gZm9yIHRoaXMgaW5zdGFuY2UuXG5cdCAqIEBwYXJhbSB2YXJpYW50IFRoZSBgVmFyaWFudE1hbmFnZW1lbnRgIGluc3RhbmNlIHRvIHNldCBhcyB0aGUgYmFjayByZWZlcmVuY2UuXG5cdCAqL1xuXHRzZXRWYXJpYW50QmFja1JlZmVyZW5jZSh2YXJpYW50OiBWYXJpYW50TWFuYWdlbWVudCk6IHZvaWQge1xuXHRcdGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSBhcyBGaWx0ZXJCYXI7XG5cdFx0Y29uc3QgaXNMaXZlTW9kZSA9IGNvbnRlbnQ/LmdldExpdmVNb2RlPy4oKTtcblx0XHRpZiAoIWlzTGl2ZU1vZGUpIHtcblx0XHRcdHRoaXMuY29udGVudC5zZXRWYXJpYW50QmFja3JlZmVyZW5jZSh2YXJpYW50KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUga2V5IG9mIHRoZSBjdXJyZW50IHZhcmlhbnQgaW4gdGhlIGFzc29jaWF0ZWQgdmFyaWFudCBtYW5hZ2VtZW50LlxuXHQgKiBAcmV0dXJucyBLZXkgb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCB2YXJpYW50LiBJbiBjYXNlIHRoZSBtb2RlbCBpcyBub3QgeWV0IHNldCwgYG51bGxgIHdpbGwgYmUgcmV0dXJuZWQuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGdldEN1cnJlbnRWYXJpYW50S2V5KCk6IHN0cmluZyB8IG51bGwge1xuXHRcdHJldHVybiB0aGlzLmdldFZhcmlhbnRNYW5hZ2VtZW50KCkuZ2V0Q3VycmVudFZhcmlhbnRLZXkoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBuZXcgc2VsZWN0ZWQgdmFyaWFudCBpbiB0aGUgYXNzb2NpYXRlZCB2YXJpYW50IG1hbmFnZW1lbnQuXG5cdCAqIEBwYXJhbSBrZXkgS2V5IG9mIHRoZSB2YXJpYW50IHRoYXQgc2hvdWxkIGJlIHNlbGVjdGVkLiBJZiB0aGUgcGFzc2VkIGtleSBkb2Vzbid0IGlkZW50aWZ5IGEgdmFyaWFudCwgaXQgd2lsbCBiZSBpZ25vcmVkLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRzZXRDdXJyZW50VmFyaWFudEtleShrZXk6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50ID0gdGhpcy5nZXRWYXJpYW50TWFuYWdlbWVudCgpO1xuXHRcdHZhcmlhbnRNYW5hZ2VtZW50LnNldEN1cnJlbnRWYXJpYW50S2V5KGtleSk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgZW5hYmxlbWVudCBvZiB0aGUgZmllbGQuXG5cdCAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIGZpZWxkIHRoYXQgc2hvdWxkIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuXG5cdCAqIEBwYXJhbSBlbmFibGVkIFdoZXRoZXIgdGhlIGZpZWxkIHNob3VsZCBiZSBlbmFibGVkIG9yIGRpc2FibGVkLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRzZXRGaWx0ZXJGaWVsZEVuYWJsZWQobmFtZTogc3RyaW5nLCBlbmFibGVkOiBib29sZWFuKTogdm9pZCB7XG5cdFx0dGhpcy5nZXRJbnRlcm5hbE1vZGVsKCk/LnNldERhdGEoXG5cdFx0XHR7XG5cdFx0XHRcdFt0aGlzLmNvbnRlbnQuZGF0YShcImxvY2FsSWRcIildOiB7XG5cdFx0XHRcdFx0ZmlsdGVyRmllbGRzOiB7IFtuYW1lXTogeyBlZGl0TW9kZTogZW5hYmxlZCA/IEZpZWxkRWRpdE1vZGUuRWRpdGFibGUgOiBGaWVsZEVkaXRNb2RlLkRpc2FibGVkIH0gfVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0dHJ1ZVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBmaWVsZCBpcyBlbmFibGVkIG9yIGRpc2FibGVkLlxuXHQgKiBAcGFyYW0gbmFtZSBOYW1lIG9mIHRoZSBmaWVsZC5cblx0ICogQHJldHVybnMgV2hldGhlciB0aGUgZmlsdGVyRmllbGQgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0Z2V0RmlsdGVyRmllbGRFbmFibGVkKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmdldEludGVybmFsTW9kZWwoKT8uZ2V0UHJvcGVydHkoYC8ke3RoaXMuY29udGVudC5kYXRhKFwibG9jYWxJZFwiKX0vZmlsdGVyRmllbGRzLyR7bmFtZX0vZWRpdE1vZGVgKSA9PT1cblx0XHRcdEZpZWxkRWRpdE1vZGUuRGlzYWJsZWRcblx0XHRcdD8gZmFsc2Vcblx0XHRcdDogdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0IHtAbGluayBzYXAuZmUubmF2aWdhdGlvbi5TZWxlY3Rpb25WYXJpYW50fSB0byBjb25kaXRpb25zLlxuXHQgKiBAcGFyYW0gc2VsZWN0aW9uVmFyaWFudCBUaGUgc2VsZWN0aW9uIHZhcmlhbnQgdG8gYXBwbHkgdG8gdGhlIGZpbHRlciBiYXIuXG5cdCAqIEBwYXJhbSBwcmVmaWxsRGVzY3JpcHRpb25zIElmIHRydWUsIHdlIHRyeSB0byBmaW5kIHRoZSBhc3NvY2lhdGVkIFRleHQgdmFsdWUgZm9yIGVhY2ggcHJvcGVydHkgaW4gdGhlIHNlbGVjdGlvblZhcmlhbnQgKHRvIGF2b2lkIGZldGNoaW5nIGl0IGZyb20gdGhlIHNlcnZlcilcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHJlc29sdmluZyB0byBjb25kaXRpb25zXG5cdCAqL1xuXHRhc3luYyBjb252ZXJ0U2VsZWN0aW9uVmFyaWFudFRvU3RhdGVGaWx0ZXJzKFxuXHRcdHNlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQsXG5cdFx0cHJlZmlsbERlc2NyaXB0aW9uczogYm9vbGVhblxuXHQpOiBQcm9taXNlPFN0YXRlVXRpbEZpbHRlcj4ge1xuXHRcdHJldHVybiBzdGF0ZUhlbHBlci5jb252ZXJ0U2VsZWN0aW9uVmFyaWFudFRvU3RhdGVGaWx0ZXJzKFxuXHRcdFx0dGhpcy5jb250ZW50LFxuXHRcdFx0c2VsZWN0aW9uVmFyaWFudCxcblx0XHRcdHByZWZpbGxEZXNjcmlwdGlvbnMsXG5cdFx0XHR0aGlzLmNvbnRlbnQ/LmdldE1vZGVsKClcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENsZWFycyBhbGwgaW5wdXQgdmFsdWVzIG9mIHZpc2libGUgZmlsdGVyIGZpZWxkcyBpbiB0aGUgZmlsdGVyIGJhciB3aXRoIGZsYWcgdG8gaW5kaWNhdGUgd2hldGhlciB0byBjbGVhciBFZGl0IEZpbHRlciBvciBub3QuXG5cdCAqIEBwYXJhbSBmaWx0ZXJCYXIgVGhlIGZpbHRlciBiYXIgdGhhdCBjb250YWlucyB0aGUgZmlsdGVyIGZpZWxkXG5cdCAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIGZpbHRlcmluZyBvbiB0aGUgZmlsdGVyIGJhclxuXHQgKiBAcGFyYW0gb3B0aW9ucy5jbGVhckVkaXRGaWx0ZXIgV2hldGhlciB0byBjbGVhciB0aGUgZWRpdCBmaWx0ZXIgb3IgbGV0IGl0IGJlIGRlZmF1bHQgdmFsdWUgJ0FsbCcgaW5zdGVhZFxuXHQgKi9cblx0YXN5bmMgX2NsZWFyRmlsdGVyVmFsdWVzV2l0aE9wdGlvbnMoZmlsdGVyQmFyOiBGaWx0ZXJCYXIsIG9wdGlvbnM/OiB7IGNsZWFyRWRpdEZpbHRlcjogYm9vbGVhbiB9KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0YXdhaXQgc3RhdGVIZWxwZXIuX2NsZWFyRmlsdGVyVmFsdWVzV2l0aE9wdGlvbnMoZmlsdGVyQmFyLCBvcHRpb25zKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHtAbGluayBzYXAuZmUubmF2aWdhdGlvbi5TZWxlY3Rpb25WYXJpYW50fSB0byB0aGUgZmlsdGVyIGJhci4gTm90ZTogc2V0U2VsZWN0aW9uVmFyaWFudCB3aWxsIGNsZWFyIGV4aXN0aW5nIGZpbHRlcnMgYW5kIHRoZW4gYXBwbHkgdGhlIFNlbGVjdGlvblZhcmlhbnQgdmFsdWVzLlxuXHQgKiBOb3RlOiBUaGlzIG1ldGhvZCBjYW5ub3Qgc2V0IHRoZSBzZWFyY2ggZmllbGQgdGV4dCBvciBhbnkgZmlsdGVyIGZpZWxkIGNvbmRpdGlvbiB0aGF0IHJlbGllcyBvbiBhIGN1c3RvbSBvcGVyYXRvci5cblx0ICogQHBhcmFtIHNlbGVjdGlvblZhcmlhbnQgVGhlIHtAbGluayBzYXAuZmUubmF2aWdhdGlvbi5TZWxlY3Rpb25WYXJpYW50fSB0byBhcHBseSB0byB0aGUgZmlsdGVyIGJhclxuXHQgKiBAcGFyYW0gcHJlZmlsbERlc2NyaXB0aW9ucyBPcHRpb25hbC4gSWYgdHJ1ZSwgd2Ugd2lsbCB1c2UgdGhlIGFzc29jaWF0ZWQgdGV4dCBwcm9wZXJ0eSB2YWx1ZXMgKGlmIHRoZXkncmUgYXZhaWxhYmxlIGluIHRoZSBzZWxlY3Rpb25WYXJpYW50KSB0byBkaXNwbGF5IHRoZSBmaWx0ZXIgdmFsdWUgZGVzY3JpcHRpb25zLCBpbnN0ZWFkIG9mIGxvYWRpbmcgdGhlbSBmcm9tIHRoZSBiYWNrZW5kXG5cdCAqIEBwYXJhbSBmcm9tTmF2aWdhdGlvblBhcmFtZXRlcnMgUFJJVkFURVxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgZm9yIGFzeW5jaHJvbm91cyBoYW5kbGluZ1xuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhc3luYyBzZXRTZWxlY3Rpb25WYXJpYW50KFxuXHRcdHNlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQsXG5cdFx0cHJlZmlsbERlc2NyaXB0aW9ucyA9IGZhbHNlLFxuXHRcdGZyb21OYXZpZ2F0aW9uUGFyYW1ldGVycyA9IGZhbHNlXG5cdCk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSBhcyBGaWx0ZXJCYXIgfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgaXNMaXZlTW9kZSA9IGNvbnRlbnQgJiYgY29udGVudD8uZ2V0TGl2ZU1vZGU/LigpO1xuXHRcdGxldCByZXN1bHQ6IHsgZGlmZlN0YXRlOiBFeHRlcm5hbFN0YXRlVHlwZTsgYXBwbHlTdGF0ZVJlc3VsdDogdW5rbm93biB9IHwgdW5kZWZpbmVkO1xuXHRcdGlmIChpc0xpdmVNb2RlKSB7XG5cdFx0XHRjb250ZW50LmVuYWJsZVJlcXVlc3RzKGZhbHNlKTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJlc3VsdCA9IGF3YWl0IHN0YXRlSGVscGVyLnNldFNlbGVjdGlvblZhcmlhbnRUb01kY0NvbnRyb2woXG5cdFx0XHRcdHRoaXMuZ2V0Q29udGVudCgpLFxuXHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50LFxuXHRcdFx0XHRwcmVmaWxsRGVzY3JpcHRpb25zLFxuXHRcdFx0XHRmcm9tTmF2aWdhdGlvblBhcmFtZXRlcnNcblx0XHRcdCk7XG5cdFx0XHRyZXR1cm4gcmVzdWx0Py5hcHBseVN0YXRlUmVzdWx0O1xuXHRcdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcblx0XHRcdExvZy5lcnJvcihgRkUgOiBCdWlsZGluZ2Jsb2NrIDogRmlsdGVyQmFyIDogJHttZXNzYWdlfWApO1xuXHRcdFx0dGhyb3cgRXJyb3IobWVzc2FnZSk7XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdGlmIChpc0xpdmVNb2RlKSB7XG5cdFx0XHRcdGNvbnRlbnQuZW5hYmxlUmVxdWVzdHModHJ1ZSwgcmVzdWx0Py5kaWZmU3RhdGUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxsZWQgYnkgdGhlIE1EQyBzdGF0ZSB1dGlsIHdoZW4gdGhlIHN0YXRlIGZvciB0aGlzIGNvbnRyb2wncyBjaGlsZCBoYXMgY2hhbmdlZC5cblx0ICovXG5cdGhhbmRsZVN0YXRlQ2hhbmdlKCk6IHZvaWQge1xuXHRcdHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKT8uZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0Q29uZGl0aW9uUGF0aChwcm9wZXJ0eVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgcHJvcGVydHlUYXJnZXRPYmplY3RQYXRoID0gRmlsdGVyVXRpbHMuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclByb3BlcnR5KHRoaXMuY29udGVudCwgcHJvcGVydHlQYXRoKTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0KHByb3BlcnR5VGFyZ2V0T2JqZWN0UGF0aCA/IGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgocHJvcGVydHlUYXJnZXRPYmplY3RQYXRoLCBmYWxzZSwgdHJ1ZSkgOiB1bmRlZmluZWQpID8/XG5cdFx0XHRwcm9wZXJ0eVBhdGhcblx0XHQpO1xuXHR9XG5cblx0YXN5bmMgc2hvd0ZpbHRlckZpZWxkKG5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHN0YXRlOiBFeHRlcm5hbFN0YXRlVHlwZSA9IGF3YWl0IFN0YXRlVXRpbC5yZXRyaWV2ZUV4dGVybmFsU3RhdGUodGhpcy5jb250ZW50KTtcblx0XHRjb25zdCBjb25kaXRpb25QYXRoID0gdGhpcy5nZXRDb25kaXRpb25QYXRoKG5hbWUpO1xuXHRcdGNvbnN0IHRhcmdldEZpbHRlckZpZWxkID0gISFzdGF0ZS5pdGVtcy5maW5kKChpdGVtKSA9PiBpdGVtLm5hbWUgPT09IGNvbmRpdGlvblBhdGgpO1xuXHRcdGlmICghdGFyZ2V0RmlsdGVyRmllbGQpIHtcblx0XHRcdHN0YXRlLml0ZW1zLnB1c2goeyBuYW1lOiBjb25kaXRpb25QYXRoIH0pO1xuXHRcdH1cblx0XHRhd2FpdCBTdGF0ZVV0aWwuYXBwbHlFeHRlcm5hbFN0YXRlKHRoaXMuY29udGVudCwgc3RhdGUpO1xuXHR9XG5cblx0YXN5bmMgb3BlblZhbHVlSGVscEZvckZpbHRlckZpZWxkKG5hbWU6IHN0cmluZywgaW5wdXRWYWx1ZT86IHN0cmluZyk6IFByb21pc2U8Q29uZGl0aW9uT2JqZWN0W10+IHtcblx0XHRjb25zdCBjb25kaXRpb25QYXRoID0gdGhpcy5nZXRDb25kaXRpb25QYXRoKG5hbWUpO1xuXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IGZpbHRlckZpZWxkID0gdGhpcy5jb250ZW50LmdldEZpbHRlckl0ZW1zKCkuZmluZCgoaXRlbSkgPT4gaXRlbS5nZXRQcm9wZXJ0eUtleSgpID09PSBjb25kaXRpb25QYXRoKTtcblx0XHRcdGNvbnN0IHZhbHVlSGVscCA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmlsdGVyRmllbGQ/LmdldFZhbHVlSGVscCgpKSBhcyBWYWx1ZUhlbHAgfCB1bmRlZmluZWQ7XG5cdFx0XHRpZiAoIXZhbHVlSGVscCB8fCAhZmlsdGVyRmllbGQpIHtcblx0XHRcdFx0cmVqZWN0KG5ldyBFcnJvcihgVmFsdWVIZWxwIGZvciBmaWx0ZXIgZmllbGQgJHtuYW1lfSBub3QgZm91bmRgKSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0dmFsdWVIZWxwLmF0dGFjaEV2ZW50T25jZShcImNsb3NlZFwiLCAoKSA9PiB7XG5cdFx0XHRcdHJlc29sdmUodmFsdWVIZWxwLmdldENvbmRpdGlvbnMoKSBhcyBDb25kaXRpb25PYmplY3RbXSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0KGZpbHRlckZpZWxkIGFzIHVua25vd24gYXMgeyBfb0ZvY3VzSW5mbzogb2JqZWN0IH0pLl9vRm9jdXNJbmZvID0geyB0YXJnZXRJbmZvOiB7IHNpbGVudDogdHJ1ZSB9IH07XG5cdFx0XHQoZmlsdGVyRmllbGQgYXMgdW5rbm93biBhcyB7IG9uZm9jdXNpbj86IEZ1bmN0aW9uIH0pLm9uZm9jdXNpbj8uKG5ldyBqUXVlcnkuRXZlbnQoXCJmb2N1c2luXCIpKTtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHQoZmlsdGVyRmllbGQuZ2V0QWdncmVnYXRpb24oXCJfY29udGVudFwiKSBhcyBJbnB1dFtdKVswXS5maXJlVmFsdWVIZWxwUmVxdWVzdCh7XG5cdFx0XHRcdFx0ZnJvbUtleWJvYXJkOiB0cnVlLFxuXHRcdFx0XHRcdF91c2VySW5wdXRWYWx1ZTogaW5wdXRWYWx1ZVxuXHRcdFx0XHR9IGFzIHVua25vd24gYXMgSW5wdXQkVmFsdWVIZWxwUmVxdWVzdEV2ZW50UGFyYW1ldGVycyk7XG5cdFx0XHR9LCAyMDApO1xuXHRcdH0pO1xuXHR9XG5cblx0Z2V0Q29sbGFwc2VkRmlsdGVyc1RleHQoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5jb250ZW50Py5nZXRBc3NpZ25lZEZpbHRlcnNUZXh0KCk/LmZpbHRlcnNUZXh0O1xuXHR9XG59XG5leHBvcnQgZGVmYXVsdCBGaWx0ZXJCYXJBUEk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXFEQTtFQUFBLElBQ01BLGtCQUFrQjtJQUt2QixTQUFBQSxtQkFBNkJDLFlBQTBCLEVBQUU7TUFBQSxLQUpqREMsa0JBQWtCLEdBQUcsQ0FBQztNQUFBLEtBRXRCQyxtQkFBbUIsR0FBRyxDQUFDO01BQUEsS0FFRkYsWUFBMEIsR0FBMUJBLFlBQTBCO0lBQUc7SUFBQyxJQUFBRyxNQUFBLEdBQUFKLGtCQUFBLENBQUFLLFNBQUE7SUFBQUQsTUFBQSxDQUUzREUsZ0JBQWdCLEdBQWhCLFNBQUFBLGdCQUFnQkEsQ0FBQ0MsTUFBZSxFQUFRO01BQ3ZDLElBQUlBLE1BQU0sS0FBSyxTQUFTLEVBQUU7UUFDekIsSUFBSSxDQUFDSixtQkFBbUIsRUFBRTtNQUMzQixDQUFDLE1BQU07UUFDTixJQUFJLENBQUNELGtCQUFrQixFQUFFO01BQzFCO0lBQ0QsQ0FBQztJQUFBRSxNQUFBLENBRURJLFFBQVEsR0FBUixTQUFBQSxRQUFRQSxDQUFDQyxlQUFvQyxFQUFFQyxVQUE2QyxFQUFRO01BQ25HLE1BQU1DLFdBQVcsR0FBRyxJQUFJLENBQUNDLDRCQUE0QixDQUFDRixVQUFVLENBQUM7TUFDakUsSUFBSSxDQUFDVCxZQUFZLENBQUNZLGlCQUFpQixDQUFDLENBQUMsRUFBRUMsU0FBUyxDQUFDQyxXQUFXLENBQUM7UUFDNURDLElBQUksRUFBRSxvQkFBb0I7UUFDMUJDLFVBQVUsRUFBRTtVQUNYZixrQkFBa0IsRUFBRSxJQUFJLENBQUNBLGtCQUFrQjtVQUFFO1VBQzdDZ0IsWUFBWSxFQUFFQyxNQUFNLENBQUNDLElBQUksQ0FBQ1YsVUFBVSxDQUFDLENBQUNXLE1BQU07VUFBRTtVQUM5Q2xCLG1CQUFtQixFQUFFLElBQUksQ0FBQ0EsbUJBQW1CO1VBQUU7VUFDL0NtQixZQUFZLEVBQUUsSUFBSSxDQUFDckIsWUFBWSxDQUFDc0IsVUFBVSxDQUFDLENBQUMsRUFBRUMsS0FBSyxJQUFJLE1BQU07VUFBRTtVQUMvREMsUUFBUSxFQUFFaEIsZUFBZSxDQUFDRixNQUFNLEtBQUssU0FBUztVQUFFO1VBQ2hEbUIsVUFBVSxFQUFFaEIsVUFBVSxDQUFDaUIsT0FBTyxHQUFHLENBQUMsQ0FBQ1IsTUFBTSxDQUFDQyxJQUFJLENBQUNWLFVBQVUsQ0FBQ2lCLE9BQU8sQ0FBQyxDQUFDTixNQUFNLEdBQUcsS0FBSztVQUFFO1VBQ25GVixXQUFXLEVBQUVBLFdBQVcsQ0FBQztRQUMxQjtNQUNELENBQUMsQ0FBQztNQUNGO01BQ0EsSUFBSSxDQUFDVCxrQkFBa0IsR0FBRyxDQUFDO01BQzNCLElBQUksQ0FBQ0MsbUJBQW1CLEdBQUcsQ0FBQztJQUM3QixDQUFDO0lBQUFDLE1BQUEsQ0FFRFEsNEJBQTRCLEdBQTVCLFNBQUFBLDRCQUE0QkEsQ0FBQ0YsVUFBNkMsRUFBVTtNQUNuRixJQUFJQyxXQUFXLEdBQUcsRUFBRTtNQUNwQlEsTUFBTSxDQUFDQyxJQUFJLENBQUNWLFVBQVUsQ0FBQyxDQUFDa0IsT0FBTyxDQUFFQyxTQUFTLElBQUs7UUFDOUMsSUFBSUEsU0FBUyxJQUFJLFNBQVMsRUFBRTtVQUMzQmxCLFdBQVcsSUFBSWtCLFNBQVMsR0FBRyxHQUFHO1FBQy9CO01BQ0QsQ0FBQyxDQUFDO01BQ0YsT0FBT2xCLFdBQVc7SUFDbkIsQ0FBQztJQUFBLE9BQUFYLGtCQUFBO0VBQUE7RUFBQSxJQXFDRzhCLHFCQUFxQiwwQkFBckJBLHFCQUFxQjtJQUFyQkEscUJBQXFCO0lBQXJCQSxxQkFBcUI7SUFBckJBLHFCQUFxQjtJQUFBLE9BQXJCQSxxQkFBcUI7RUFBQSxFQUFyQkEscUJBQXFCO0VBTTFCLE1BQU1DLDhCQUE4QixHQUFHLGlCQUFpQjtFQUN4RCxNQUFNQyxnQ0FBZ0MsR0FBRyxtQkFBbUI7O0VBUzVEO0FBQ0E7QUFDQTtBQUNBO0VBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQWJBLElBa0JNQyxZQUFZLElBQUFDLElBQUEsR0FKakJDLGNBQWMsQ0FBQyxzQ0FBc0MsRUFBRTtJQUN2REMsV0FBVyxFQUFFLENBQUMscUJBQXFCO0VBQ3BDLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBQ0RDLEtBQUssQ0FBQ0Msd0JBQXdCLENBQUMsRUFBQUMsS0FBQSxHQVU5QkMsMEJBQTBCLENBQUMsV0FBVyxFQUFFLDBCQUEwQixDQUFDLEVBQUFDLEtBQUEsR0FLbkVELDBCQUEwQixDQUFDLFdBQVcsRUFBRSx1QkFBdUIsQ0FBQyxFQUFBRSxLQUFBLEdBNlpoRUMsUUFBUSxDQUFDO0lBQUU1QixJQUFJLEVBQUU7RUFBUyxDQUFDLENBQUMsRUFBQTZCLEtBQUEsR0FPNUJELFFBQVEsQ0FBQztJQUNUNUIsSUFBSSxFQUFFLFFBQVE7SUFDZDhCLG1CQUFtQixFQUFFLENBQUMsNENBQTRDLENBQUM7SUFDbkVDLGFBQWEsRUFBRSxDQUFDLFdBQVcsRUFBRSxZQUFZO0VBQzFDLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBUURKLFFBQVEsQ0FBQztJQUNUNUIsSUFBSSxFQUFFLFFBQVE7SUFDZCtCLGFBQWEsRUFBRSxDQUFDLFdBQVcsRUFBRSxZQUFZLEVBQUUsb0JBQW9CO0VBQ2hFLENBQUMsQ0FBQyxFQUFBRSxLQUFBLEdBT0RMLFFBQVEsQ0FBQztJQUFFNUIsSUFBSSxFQUFFLFNBQVM7SUFBRWtDLFlBQVksRUFBRTtFQUFNLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBT2xEUCxRQUFRLENBQUM7SUFBRTVCLElBQUksRUFBRSxTQUFTO0lBQUVrQyxZQUFZLEVBQUU7RUFBSyxDQUFDLENBQUMsRUFBQUUsTUFBQSxHQU9qRFIsUUFBUSxDQUFDO0lBQUU1QixJQUFJLEVBQUUsU0FBUztJQUFFa0MsWUFBWSxFQUFFO0VBQUssQ0FBQyxDQUFDLEVBQUFHLE1BQUEsR0FPakRULFFBQVEsQ0FBQztJQUFFNUIsSUFBSSxFQUFFLFNBQVM7SUFBRWtDLFlBQVksRUFBRTtFQUFNLENBQUMsQ0FBQyxFQUFBSSxNQUFBLEdBT2xEQyxXQUFXLENBQUM7SUFBRXZDLElBQUksRUFBRSxxQ0FBcUM7SUFBRXdDLFFBQVEsRUFBRTtFQUFLLENBQUMsQ0FBQyxFQUFBQyxNQUFBLEdBUzVFQyxLQUFLLENBQUMsQ0FBQyxFQUFBQyxNQUFBLEdBUVBELEtBQUssQ0FBQyxDQUFDLEVBQUFFLE1BQUEsR0FPUEYsS0FBSyxDQUFDLENBQUMsRUFBQUcsTUFBQSxHQU9QSCxLQUFLLENBQUMsQ0FBQyxFQUFBSSxNQUFBLEdBUVBKLEtBQUssQ0FBQyxDQUFDLEVBQUFLLE1BQUEsR0EwQlBDLGVBQWUsQ0FBQyxDQUFDLEVBQUFDLE1BQUEsR0FrQmpCRCxlQUFlLENBQUMsQ0FBQyxFQUFBOUIsSUFBQSxDQUFBZ0MsTUFBQSxHQUFBN0IsS0FBQSxDQUFBNkIsTUFBQSxJQUFBQyxPQUFBLDBCQUFBQyxTQUFBO0lBdkNsQixTQUFBbkMsYUFBWW9DLEtBQThFLEVBQUVDLE1BQXlCLEVBQUU7TUFBQSxJQUFBQyxLQUFBO01BQ3RIQSxLQUFBLEdBQUFILFNBQUEsQ0FBQUksSUFBQSxPQUFNSCxLQUFLLEVBQUVDLE1BQU0sQ0FBQztNQUFDQyxLQUFBLENBaGhCdEJFLG1CQUFtQixHQUE0QixDQUFDLENBQUM7TUFBQUYsS0FBQSxDQUVqREcsb0JBQW9CLEdBQXdCLElBQUlDLGFBQWEsQ0FBQyxDQUFDO01BQUFKLEtBQUEsQ0FFL0RLLGlCQUFpQixHQUFHLEtBQUs7TUFBQUwsS0FBQSxDQUVqQk0sa0JBQWtCLEdBQUcsSUFBSTtNQWlhakM7QUFDRDtBQUNBO01BRkNDLDBCQUFBLENBQUFQLEtBQUEsUUFBQVEsV0FBQSxFQUFBUixLQUFBO01BTUE7QUFDRDtBQUNBO0FBQ0E7TUFIQ08sMEJBQUEsQ0FBQVAsS0FBQSxjQUFBUyxZQUFBLEVBQUFULEtBQUE7TUFXQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO01BSkNPLDBCQUFBLENBQUFQLEtBQUEsaUJBQUFVLFlBQUEsRUFBQVYsS0FBQTtNQVdBO0FBQ0Q7QUFDQTtBQUNBO01BSENPLDBCQUFBLENBQUFQLEtBQUEsY0FBQVcsWUFBQSxFQUFBWCxLQUFBO01BT0E7QUFDRDtBQUNBO0FBQ0E7TUFIQ08sMEJBQUEsQ0FBQVAsS0FBQSxhQUFBWSxZQUFBLEVBQUFaLEtBQUE7TUFPQTtBQUNEO0FBQ0E7QUFDQTtNQUhDTywwQkFBQSxDQUFBUCxLQUFBLGtCQUFBYSxZQUFBLEVBQUFiLEtBQUE7TUFPQTtBQUNEO0FBQ0E7QUFDQTtNQUhDTywwQkFBQSxDQUFBUCxLQUFBLHFCQUFBYyxZQUFBLEVBQUFkLEtBQUE7TUFPQTtBQUNEO0FBQ0E7QUFDQTtNQUhDTywwQkFBQSxDQUFBUCxLQUFBLGtCQUFBZSxZQUFBLEVBQUFmLEtBQUE7TUFTQTtBQUNEO0FBQ0E7QUFDQTtNQUhDTywwQkFBQSxDQUFBUCxLQUFBLFlBQUFnQixZQUFBLEVBQUFoQixLQUFBO01BT0E7QUFDRDtBQUNBO0FBQ0E7QUFDQTtNQUpDTywwQkFBQSxDQUFBUCxLQUFBLG9CQUFBaUIsYUFBQSxFQUFBakIsS0FBQTtNQVFBO0FBQ0Q7QUFDQTtBQUNBO01BSENPLDBCQUFBLENBQUFQLEtBQUEsbUJBQUFrQixhQUFBLEVBQUFsQixLQUFBO01BT0E7QUFDRDtBQUNBO0FBQ0E7TUFIQ08sMEJBQUEsQ0FBQVAsS0FBQSxnQkFBQW1CLGFBQUEsRUFBQW5CLEtBQUE7TUFPQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO01BSkNPLDBCQUFBLENBQUFQLEtBQUEsMkJBQUFvQixhQUFBLEVBQUFwQixLQUFBO01BWUNBLEtBQUEsQ0FBS3pELFNBQVMsR0FBRyxJQUFJZCxrQkFBa0IsQ0FBQXVFLEtBQUssQ0FBQztNQUM3Q0EsS0FBQSxDQUFLcUIsd0JBQXdCLENBQUMsQ0FBQztNQUFDLE9BQUFyQixLQUFBO0lBQ2pDO0lBQUNzQixjQUFBLENBQUE1RCxZQUFBLEVBQUFtQyxTQUFBO0lBQUEsSUFBQTBCLE9BQUEsR0FBQTdELFlBQUEsQ0FBQTVCLFNBQUE7SUFBQXlGLE9BQUEsQ0ExZ0JNQyx3QkFBd0IsR0FEL0IsU0FDT0Esd0JBQXdCQSxDQUFDQyxnQkFBa0MsRUFBUTtNQUN6RUEsZ0JBQWdCLENBQUMsSUFBSSxDQUFDQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUc7UUFBRUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDckI7TUFBbUIsQ0FBQztJQUMxRSxDQUFDO0lBQUFpQixPQUFBLENBR01LLHFCQUFxQixHQUQ1QixTQUNPQSxxQkFBcUJBLENBQUNILGdCQUFrQyxFQUFRO01BQ3RFLE1BQU1JLGFBQWEsR0FBR0osZ0JBQWdCLENBQUMsSUFBSSxDQUFDQyxLQUFLLENBQUMsQ0FBQyxDQUFDO01BQ3BELElBQUlJLGtCQUF1QztNQUMzQyxJQUFJLE9BQU9ELGFBQWEsS0FBSyxRQUFRLElBQUlBLGFBQWEsS0FBSyxJQUFJLEVBQUU7UUFDaEVDLGtCQUFrQixHQUFHRCxhQUFhLENBQUNGLFVBQVU7TUFDOUMsQ0FBQyxNQUFNO1FBQ05HLGtCQUFrQixHQUFHQyxTQUFTO01BQy9CO01BRUEsTUFBTUMsZ0JBQWdCLEdBQ3JCLFlBQVksSUFBSVAsZ0JBQWdCLElBQUksT0FBT0EsZ0JBQWdCLENBQUNFLFVBQVUsS0FBSyxTQUFTLEdBQUdGLGdCQUFnQixDQUFDRSxVQUFVLEdBQUdJLFNBQVM7TUFFL0gsSUFBSUMsZ0JBQWdCLEtBQUssSUFBSSxJQUFJRixrQkFBa0IsS0FBSyxJQUFJLEVBQUU7UUFDN0QsSUFBSSxDQUFDRyxhQUFhLENBQUMsQ0FBQztNQUNyQjtNQUNBLElBQUlELGdCQUFnQixLQUFLLEtBQUssSUFBSUYsa0JBQWtCLEtBQUssS0FBSyxFQUFFO1FBQzlELElBQUksQ0FBQ0ksT0FBTyxDQUFxQzdCLGlCQUFpQixHQUFHLEtBQUs7TUFDNUU7SUFDRCxDQUFDO0lBQUFrQixPQUFBLENBRUtZLG1CQUFtQixHQUF6QixlQUFNQSxtQkFBbUJBLENBQUEsRUFBa0I7TUFDMUMsT0FBTyxJQUFJLENBQUNoQyxvQkFBb0IsQ0FBQ2lDLE9BQU87SUFDekMsQ0FBQztJQUFBYixPQUFBLENBRURjLGVBQWUsR0FBZixTQUFBQSxlQUFlQSxDQUFDQyxZQUEwQixFQUFnQjtNQUN6RCxNQUFNcEMsbUJBQTRDLEdBQUcsSUFBSSxDQUFDQSxtQkFBbUI7TUFDN0UsSUFBSW9DLFlBQVksRUFBRTtRQUNqQixPQUFPO1VBQ05DLFNBQVMsRUFBRUQsWUFBc0I7VUFDakNFLFlBQVksRUFBRXRDO1FBQ2YsQ0FBQztNQUNGO01BQ0EsT0FBT29DLFlBQVk7SUFDcEI7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUFmLE9BQUEsQ0FLQWtCLDhCQUE4QixHQUE5QixTQUFBQSw4QkFBOEJBLENBQUNDLGNBQXNCLEVBQVc7TUFDL0QsTUFBTUMsVUFBVSxHQUFHLElBQUksQ0FBQ3JHLGlCQUFpQixDQUFDLENBQXlCO1FBQ2xFc0csSUFBSSxHQUFHRCxVQUFVLENBQUNFLE9BQU8sQ0FBQyxDQUFDO1FBQzNCQyxRQUFRLEdBQUdGLElBQUksQ0FBQ0csV0FBVyxDQUFDLENBQUM7TUFDOUIsSUFBSU4sOEJBQThCLEdBQUcsS0FBSztRQUN6Q08saUJBQWlCO01BQ2xCO01BQ0EsSUFBSUYsUUFBUSxDQUFDRSxpQkFBaUIsS0FBS3pGLHFCQUFxQixDQUFDMEYsT0FBTyxFQUFFO1FBQ2pFRCxpQkFBaUIsR0FBR0wsVUFBVSxDQUFDTywyQkFBMkIsQ0FBQyxDQUFDO01BQzdELENBQUMsTUFBTTtRQUNORixpQkFBaUIsR0FBR0osSUFBSSxDQUFDTyxJQUFJLENBQUMsMkJBQTJCLENBQXNCO01BQ2hGO01BQ0EsTUFBTUMsaUJBQWlCLEdBQUdKLGlCQUFpQixFQUFFSyxvQkFBb0IsQ0FBQyxDQUFDO01BQ25FO01BQ0E7TUFDQTtNQUNBLElBQUlYLGNBQWMsS0FBS1ksT0FBTyxDQUFDQyxTQUFTLEVBQUU7UUFDekMsT0FBTyxJQUFJO01BQ1osQ0FBQyxNQUFNLElBQUlQLGlCQUFpQixJQUFJRixRQUFRLENBQUNVLFdBQVcsS0FBS0MsZUFBZSxDQUFDQyxPQUFPLEVBQUU7UUFDakY7UUFDQSxJQUFJZixVQUFVLENBQUNnQix3QkFBd0IsQ0FBQyxJQUFJLENBQUNDLGVBQWUsQ0FBQ2hCLElBQUksQ0FBQyxDQUFDLEVBQUU7VUFDcEVILDhCQUE4QixHQUFHLElBQUk7UUFDdEM7TUFDRDtNQUNBO01BQUEsS0FDSyxJQUNKTyxpQkFBaUIsSUFDakJGLFFBQVEsQ0FBQ1UsV0FBVyxLQUFLQyxlQUFlLENBQUNDLE9BQU8sSUFDaERmLFVBQVUsQ0FBQ2tCLCtCQUErQixDQUFDYixpQkFBaUIsRUFBRUksaUJBQWlCLENBQUMsRUFDL0U7UUFDRFgsOEJBQThCLEdBQUcsSUFBSTtNQUN0QztNQUNBLE9BQU9BLDhCQUE4QjtJQUN0Qzs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQU5DO0lBQUFsQixPQUFBLENBT011QyxzQkFBc0IsR0FBNUIsZUFBTUEsc0JBQXNCQSxDQUFDbEIsSUFBVSxFQUFFbUIsbUJBQXdDLEVBQUVDLG9CQUE2QixFQUFvQjtNQUNuSSxNQUFNQyxTQUFTLEdBQUcsSUFBSSxDQUFDQyxVQUFVLENBQUMsQ0FBYztNQUNoRCxNQUFNO1FBQUVDLGdCQUFnQixFQUFFQyxFQUFFO1FBQUVDLHdCQUF3QixFQUFFQyxVQUFVO1FBQUVDLHVCQUF1QixHQUFHO01BQU0sQ0FBQyxHQUFHUixtQkFBbUI7TUFFM0gsSUFBSSxDQUFDRSxTQUFTLElBQUksQ0FBQ0csRUFBRSxFQUFFO1FBQ3RCLE9BQU9JLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLENBQUM7TUFDekI7TUFDQSxNQUFNekIsaUJBQWlCLEdBQUcsSUFBSSxDQUFDWSxlQUFlLENBQUNoQixJQUFJLENBQXNCO01BQ3pFLE1BQU04QixtQkFBbUIsR0FBRyxNQUFNLElBQUksQ0FBQ0MseUNBQXlDLENBQy9FM0IsaUJBQWlCLEVBQ2pCdUIsdUJBQXVCLEVBQ3ZCUCxvQkFDRCxDQUFDO01BQ0QsSUFBSVUsbUJBQW1CLEVBQUU7UUFDeEIsSUFBSSxDQUFDRSw4QkFBOEIsQ0FBQ2hDLElBQUksRUFBRXdCLEVBQUUsRUFBRUUsVUFBVSxDQUFDOztRQUV6RDtRQUNBLE1BQU1PLG9CQUFvQixHQUFHUCxVQUFVLEdBQUdBLFVBQVUsQ0FBQ1EsNkJBQTZCLENBQUMsQ0FBQyxDQUFDaEksTUFBTSxHQUFHLENBQUMsR0FBRyxLQUFLO1FBQ3ZHLE1BQU1pSSwwQkFBMEIsR0FDL0IvQixpQkFBaUIsSUFBSUEsaUJBQWlCLENBQUNnQyxvQkFBb0IsQ0FBQyxDQUFDLEtBQUtoQyxpQkFBaUIsQ0FBQ2lDLHFCQUFxQixDQUFDLENBQUM7UUFDNUcsTUFBTUMsbUJBQTRCLEdBQUdMLG9CQUFvQixLQUFLRSwwQkFBMEIsSUFBSSxDQUFDL0IsaUJBQWlCLENBQUM7UUFFL0csTUFBTXRILFlBQVksR0FBR3VJLFNBQVMsQ0FBQ2tCLFNBQVMsQ0FBQyxDQUFpQjtRQUMxRCxJQUFJQyxPQUF5QixHQUFHaEIsRUFBRTtRQUNsQyxJQUFJSixvQkFBb0IsSUFBSWtCLG1CQUFtQixFQUFFO1VBQ2hERSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUNDLGNBQWMsQ0FBQ2pCLEVBQUUsRUFBRWMsbUJBQW1CLENBQUM7UUFDN0Q7UUFDQSxPQUFPeEosWUFBWSxDQUFDNEosbUJBQW1CLENBQUNGLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDO01BQzdEO0lBQ0QsQ0FBQztJQUFBN0QsT0FBQSxDQUVEZ0UsZ0JBQWdCLEdBQWhCLFNBQUFBLGdCQUFnQkEsQ0FBQ0MsZ0JBQTJCLEVBQUVDLG9CQUE2QixFQUFRO01BQ2xGLE1BQU0vSixZQUFZLEdBQUc4SixnQkFBZ0IsQ0FBQ0wsU0FBUyxDQUFDLENBQWlCO01BQ2pFLE1BQU1PLFVBQVUsR0FBR0EsQ0FBQSxLQUFZO1FBQzlCLElBQUksQ0FBQ3JGLGlCQUFpQixHQUFHLENBQUNvRixvQkFBb0I7TUFDL0MsQ0FBQzs7TUFFRDtNQUNBLElBQUlELGdCQUFnQixDQUFDRyxtQkFBbUIsQ0FBQyxDQUFDLEVBQUU7UUFDM0M7UUFDQTtRQUNBakssWUFBWSxDQUFDa0ssZUFBZSxDQUFDLFFBQVEsRUFBRUYsVUFBVSxDQUFDO1FBQ2xERixnQkFBZ0IsQ0FBQ0ssY0FBYyxDQUFDLElBQUksQ0FBQztNQUN0QyxDQUFDLE1BQU07UUFDTjtRQUNBSCxVQUFVLENBQUMsQ0FBQztNQUNiO0lBQ0QsQ0FBQztJQUFBbkUsT0FBQSxDQUVLOEQsY0FBYyxHQUFwQixlQUFNQSxjQUFjQSxDQUFDUyxVQUE0QixFQUFFWixtQkFBNEIsRUFBNkI7TUFDM0csSUFBSWEsVUFBVSxHQUFHLElBQUlDLGdCQUFnQixDQUFDRixVQUFVLENBQUNHLFlBQVksQ0FBQyxDQUFDLENBQUM7TUFDaEUsTUFBTUMsZ0JBQWdCLEdBQUcsTUFBTSxJQUFJLENBQUNDLG1CQUFtQixDQUFDLENBQUM7TUFDekQsTUFBTUMsa0JBQWtCLEdBQUdGLGdCQUFnQixFQUFFcEIsNkJBQTZCLENBQUMsQ0FBQyxJQUFJLEVBQUU7TUFDbEYsSUFBSXNCLGtCQUFrQixDQUFDdEosTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNsQztRQUNBaUosVUFBVSxHQUFHSyxrQkFBa0IsQ0FBQ0MsTUFBTSxDQUFDLENBQUNDLE1BQXdCLEVBQUVDLGFBQWEsS0FBSztVQUNuRjtVQUNBLE1BQU1DLFNBQVMsR0FBR0YsTUFBTSxDQUFDRyxlQUFlLENBQUNGLGFBQWEsQ0FBQztVQUN2RDtVQUNBLElBQUtyQixtQkFBbUIsSUFBSSxDQUFDc0IsU0FBUyxFQUFFMUosTUFBTSxJQUFLLENBQUNvSSxtQkFBbUIsRUFBRTtZQUN4RTtZQUNBO1lBQ0EsTUFBTXdCLGFBQWEsR0FBR1IsZ0JBQWdCLENBQUNPLGVBQWUsQ0FBQ0YsYUFBYSxDQUFDO1lBQ3JFRCxNQUFNLENBQUNLLG1CQUFtQixDQUFDSixhQUFhLEVBQUVHLGFBQWEsSUFBSSxFQUFFLENBQUM7VUFDL0Q7VUFDQSxPQUFPSixNQUFNO1FBQ2QsQ0FBQyxFQUFFUCxVQUFVLENBQUM7TUFDZjtNQUVBLE9BQU9BLFVBQVU7SUFDbEIsQ0FBQztJQUFBeEUsT0FBQSxDQUVEcUYscUJBQXFCLEdBQXJCLFNBQUFBLHFCQUFxQkEsQ0FBQzVELGlCQUFvQyxFQUFXO01BQ3BFLElBQUksQ0FBQ0EsaUJBQWlCLEVBQUU7UUFDdkIsT0FBTyxJQUFJO01BQ1o7TUFDQSxNQUFNNkQsU0FBUyxHQUFHN0QsaUJBQWlCLENBQUM4RCxXQUFXLENBQUMsQ0FBQztNQUNqRCxNQUFNQyxlQUFlLEdBQUdGLFNBQVMsQ0FBQ0csSUFBSSxDQUFDLFVBQVVDLElBQUksRUFBVztRQUMvRCxPQUFPQSxJQUFJLENBQUNDLE1BQU0sQ0FBQyxDQUFDLEtBQUtsRSxpQkFBaUIsQ0FBQ0ssb0JBQW9CLENBQUMsQ0FBQztNQUNsRSxDQUFDLENBQUM7TUFDRixPQUFPLENBQUMwRCxlQUFlLENBQUNJLGVBQWU7SUFDeEM7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTEM7SUFBQTVGLE9BQUEsQ0FNQXFELDhCQUE4QixHQUE5QixTQUFBQSw4QkFBOEJBLENBQUNoQyxJQUFVLEVBQUV3QixFQUFvQixFQUFFRSxVQUE2QixFQUFRO01BQ3JHLElBQUksQ0FBQ0EsVUFBVSxJQUFJQSxVQUFVLEVBQUU4QyxPQUFPLENBQUMsQ0FBQyxFQUFFO1FBQ3pDO01BQ0Q7TUFFQSxNQUFNdEUsUUFBUSxHQUFHRixJQUFJLENBQUNHLFdBQVcsQ0FBQyxDQUFlO1FBQ2hEc0UsU0FBUyxHQUFHekUsSUFBSSxDQUFDMEUsUUFBUSxDQUFDLENBQUMsRUFBRUMsWUFBWSxDQUFDLENBQW1CO1FBQzdEQyxXQUFXLEdBQUcxRSxRQUFRLENBQUMwRSxXQUFXLElBQUksSUFBSTFFLFFBQVEsQ0FBQzJFLFNBQVMsRUFBRTtRQUM5REMsV0FBVyxHQUFHTCxTQUFTLENBQUNNLGNBQWMsQ0FBQ0gsV0FBVyxDQUFDO1FBQ25ESSxtQkFBbUQsR0FBR0MsMkJBQTJCLENBQUNILFdBQVcsQ0FBQzs7TUFFL0Y7TUFDQSxNQUFNSSwyQkFBMkIsR0FBRyxJQUFJLENBQUNDLDhCQUE4QixDQUFDSCxtQkFBbUIsQ0FBQztNQUM1RixNQUFNSSwwQkFBMEIsR0FBRyxJQUFJLENBQUNDLGlDQUFpQyxDQUFDTCxtQkFBbUIsQ0FBQztNQUM5RixJQUFJLENBQUNJLDBCQUEwQixFQUFFO1FBQ2hDO01BQ0Q7TUFFQSxNQUFNRSxTQUFTLEdBQUc5RCxFQUFFLENBQUNxQyxlQUFlLENBQUNxQiwyQkFBMkIsQ0FBQyxJQUFJLEVBQUU7UUFDdEVLLGdCQUFnQixHQUFHN0QsVUFBVSxDQUFDbUMsZUFBZSxDQUFDcUIsMkJBQTJCLENBQUMsSUFBSSxFQUFFO1FBQ2hGTSw0QkFBNEIsR0FBR0QsZ0JBQWdCLENBQUNyTCxNQUFNLEdBQUcsQ0FBQztRQUMxRHVMLHlCQUF5QixHQUFHSCxTQUFTLENBQUNwTCxNQUFNLEtBQUssQ0FBQztNQUVuRCxJQUFJdUwseUJBQXlCLElBQUlELDRCQUE0QixFQUFFO1FBQzlELE1BQU1FLDJCQUEyQixHQUFHSCxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7VUFDdERJLElBQUksR0FBR0QsMkJBQTJCLENBQUMsTUFBTSxDQUFDO1VBQzFDRSxNQUFNLEdBQUdGLDJCQUEyQixDQUFDLFFBQVEsQ0FBQztVQUM5Q0csR0FBRyxHQUFHSCwyQkFBMkIsQ0FBQyxLQUFLLENBQUM7VUFDeENJLElBQUksR0FBR0osMkJBQTJCLENBQUMsTUFBTSxDQUFDO1FBRTNDbEUsRUFBRSxDQUFDdUUsZUFBZSxDQUFDYiwyQkFBMkIsRUFBRVMsSUFBSSxFQUFFQyxNQUFNLEVBQUVDLEdBQUcsRUFBRUMsSUFBSSxDQUFDO01BQ3pFO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FOQztJQUFBbkgsT0FBQSxDQU9RcUgsZUFBZSxHQUF2QixTQUFRQSxlQUFlQSxDQUFDaEIsbUJBQW1ELEVBQVc7TUFDckYsT0FBTyxDQUFDLENBQUNBLG1CQUFtQixDQUFDaUIsaUJBQWlCLENBQUNDLFVBQVUsRUFBRUMsV0FBVyxFQUFFQyxNQUFNLEVBQUVDLGFBQWE7SUFDOUY7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTEM7SUFBQTFILE9BQUEsQ0FNQXdHLDhCQUE4QixHQUE5QixTQUFBQSw4QkFBOEJBLENBQUNILG1CQUFtRCxFQUFVO01BQzNGLE9BQU8sSUFBSSxDQUFDZ0IsZUFBZSxDQUFDaEIsbUJBQW1CLENBQUMsR0FBR25LLGdDQUFnQyxHQUFHRCw4QkFBOEI7SUFDckg7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUErRCxPQUFBLENBS0EwRyxpQ0FBaUMsR0FBakMsU0FBQUEsaUNBQWlDQSxDQUFDTCxtQkFBbUQsRUFBVztNQUMvRixJQUFJSSwwQkFBMEIsR0FBRyxLQUFLO01BRXRDLElBQUksSUFBSSxDQUFDWSxlQUFlLENBQUNoQixtQkFBbUIsQ0FBQyxFQUFFO1FBQzlDSSwwQkFBMEIsR0FBR0osbUJBQW1CLENBQUNpQixpQkFBaUIsQ0FBQ0MsVUFBVSxDQUFDSSxnQkFBZ0IsQ0FBQ0MsSUFBSSxDQUNqR0MsU0FBbUIsSUFBY0EsU0FBUyxDQUFDQyxJQUFJLEtBQUs1TCxnQ0FDdEQsQ0FBQztNQUNGLENBQUMsTUFBTTtRQUNOLE1BQU1nSyxTQUFnQyxHQUNwQ0csbUJBQW1CLENBQUNpQixpQkFBaUIsQ0FBQ1MsS0FBSyxLQUFLLFdBQVcsR0FBRzFCLG1CQUFtQixDQUFDaUIsaUJBQWlCLEdBQUc5RyxTQUFTO1VBQ2hId0gsa0JBQWtCLEdBQUc5QixTQUFTLEVBQUVzQixXQUFXLENBQUNTLFlBQVksRUFBRUMsa0JBQWtCLEVBQUVDLGtCQUFrQixJQUFJLEVBQUU7UUFDdkcxQiwwQkFBMEIsR0FBR3VCLGtCQUFrQixDQUFDSixJQUFJLENBQ2xEUSxnQkFBOEIsSUFBS0EsZ0JBQWdCLENBQUNDLEtBQUssS0FBS3BNLDhCQUNoRSxDQUFDO01BQ0Y7TUFDQSxPQUFPd0ssMEJBQTBCO0lBQ2xDOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTkM7SUFBQXpHLE9BQUEsQ0FPTW9ELHlDQUF5QyxHQUEvQyxlQUFNQSx5Q0FBeUNBLENBQzlDM0IsaUJBQWdELEVBQ2hENkcsYUFBc0IsRUFDdEI3RixvQkFBNkIsRUFDVjtNQUNuQixJQUFJaEIsaUJBQWlCLElBQUksQ0FBQ2dCLG9CQUFvQixFQUFFO1FBQy9DLElBQUk4RixVQUFVLEdBQUdELGFBQWEsR0FBRzdHLGlCQUFpQixDQUFDaUMscUJBQXFCLENBQUMsQ0FBQyxHQUFHakMsaUJBQWlCLENBQUNnQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3JILElBQUk4RSxVQUFVLEtBQUssSUFBSSxFQUFFO1VBQ3hCQSxVQUFVLEdBQUc5RyxpQkFBaUIsQ0FBQ3RCLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDO1FBQ0EsTUFBTXFJLHNCQUFzQixDQUFDQyxlQUFlLENBQUM7VUFDNUNDLE9BQU8sRUFBRWpILGlCQUFpQjtVQUMxQmtILGdCQUFnQixFQUFFSjtRQUNuQixDQUFDLENBQUM7UUFDRixPQUFPRCxhQUFhLElBQUk3RyxpQkFBaUIsQ0FBQ2dDLG9CQUFvQixDQUFDLENBQUMsS0FBS2hDLGlCQUFpQixDQUFDaUMscUJBQXFCLENBQUMsQ0FBQztNQUMvRztNQUVBLE9BQU8sSUFBSTtJQUNaOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBMUQsT0FBQSxDQUtBcUMsZUFBZSxHQUFmLFNBQUFBLGVBQWVBLENBQUNoQixJQUFVLEVBQWlDO01BQzFELElBQUlJLGlCQUFpQjtNQUNyQixNQUFNRixRQUFRLEdBQUdGLElBQUksQ0FBQ0csV0FBVyxDQUFDLENBQWU7TUFDakQsUUFBUUQsUUFBUSxDQUFDRSxpQkFBaUI7UUFDakMsS0FBS3pGLHFCQUFxQixDQUFDNE0sSUFBSTtVQUM5Qm5ILGlCQUFpQixHQUFHSixJQUFJLENBQUNPLElBQUksQ0FBQywyQkFBMkIsQ0FBQztVQUMxRDtRQUNELEtBQUs1RixxQkFBcUIsQ0FBQzBGLE9BQU87VUFDakNELGlCQUFpQixHQUFJSixJQUFJLENBQUN3SCxhQUFhLENBQUMsQ0FBQyxDQUEwQmxILDJCQUEyQixDQUFDLENBQUM7VUFDaEc7UUFDRCxLQUFLM0YscUJBQXFCLENBQUM4TSxJQUFJO1FBQy9CO1VBQ0M7TUFDRjtNQUNBLE9BQU9ySCxpQkFBaUI7SUFDekI7O0lBRUE7SUFBQTtJQUFBekIsT0FBQSxDQUNNK0ksaUNBQWlDLEdBQXZDLGVBQU1BLGlDQUFpQ0EsQ0FBQ0MsVUFBa0MsRUFBb0I7TUFDN0YsTUFBTUMsY0FBYyxHQUFHRCxVQUFVLENBQUMsc0JBQXNCLENBQUM7UUFDeERFLG1CQUFtQixHQUFHRixVQUFVLENBQUMsZ0NBQWdDLENBQUM7UUFDbEVHLGVBQWUsR0FBR0gsVUFBVSxDQUFDLDRCQUE0QixDQUFDO1FBQzFESSxlQUFlLEdBQUdKLFVBQVUsQ0FBQyw0QkFBNEIsQ0FBQztNQUMzRCxJQUFJSyxXQUFtQztNQUN2QyxJQUFJSixjQUFjLElBQUlDLG1CQUFtQixJQUFJQyxlQUFlLElBQUlDLGVBQWUsRUFBRTtRQUNoRkMsV0FBVyxHQUFHO1VBQ2JDLGNBQWMsRUFBRUwsY0FBYyxJQUFJQSxjQUFjLENBQUMsQ0FBQyxDQUFDO1VBQ25ETSxtQkFBbUIsRUFBRUwsbUJBQW1CLElBQUlBLG1CQUFtQixDQUFDLENBQUMsQ0FBQztVQUNsRU0sZUFBZSxFQUFFTCxlQUFlLElBQUlBLGVBQWUsQ0FBQyxDQUFDLENBQUM7VUFDdERNLGVBQWUsRUFBRUwsZUFBZSxJQUFJQSxlQUFlLENBQUMsQ0FBQztRQUN0RCxDQUFDO01BQ0Y7TUFDQSxPQUFPLElBQUksQ0FBQ00sdUJBQXVCLENBQUNMLFdBQVcsQ0FBQztJQUNqRCxDQUFDO0lBQUFySixPQUFBLENBRUswSix1QkFBdUIsR0FBN0IsZUFBTUEsdUJBQXVCQSxDQUFDTCxXQUFtQyxFQUFvQjtNQUNwRixJQUFJTSxHQUFzQjtNQUMxQixNQUFNQyxLQUFLLEdBQUcsSUFBSSxDQUFDN08saUJBQWlCLENBQUMsQ0FBQyxFQUFFdUcsT0FBTyxDQUFDLENBQUM7UUFDaER1SSxTQUE2QixHQUFHLEVBQUU7TUFDbkMsTUFBTUMsa0JBQWtCLEdBQUdGLEtBQUssQ0FBQ3BJLFdBQVcsQ0FBQyxDQUFDLENBQUNDLGlCQUFpQjtNQUNoRSxJQUFJNEgsV0FBVyxJQUFJQSxXQUFXLENBQUNDLGNBQWMsSUFBSVEsa0JBQWtCLEtBQUssTUFBTSxFQUFFO1FBQy9FSCxHQUFHLEdBQUdDLEtBQUssQ0FBQ2hJLElBQUksQ0FBQywyQkFBMkIsQ0FBc0I7UUFDbEUsSUFBSSxDQUFDbUksb0JBQW9CLENBQUNWLFdBQVcsRUFBRU0sR0FBRyxFQUFFRSxTQUFTLENBQUM7TUFDdkQsQ0FBQyxNQUFNLElBQUlSLFdBQVcsSUFBSVMsa0JBQWtCLEtBQUssU0FBUyxFQUFFO1FBQzNELElBQUlULFdBQVcsQ0FBQ0UsbUJBQW1CLEVBQUU7VUFDcENJLEdBQUcsR0FBSUMsS0FBSyxDQUFDZixhQUFhLENBQUMsQ0FBQyxDQUEwQmxILDJCQUEyQixDQUFDLENBQUU7VUFDcEYsSUFBSSxDQUFDcUksZ0NBQWdDLENBQUNYLFdBQVcsRUFBRU0sR0FBRyxFQUFFRSxTQUFTLENBQUM7UUFDbkU7TUFDRDtNQUNBLE9BQU81RyxPQUFPLENBQUNnSCxHQUFHLENBQUNKLFNBQVMsQ0FBQztJQUM5Qjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BUEM7SUFBQTdKLE9BQUEsQ0FRQStKLG9CQUFvQixHQUFwQixTQUFBQSxvQkFBb0JBLENBQUNWLFdBQXVCLEVBQUVNLEdBQXNCLEVBQUVFLFNBQTZCLEVBQVE7TUFDMUdGLEdBQUcsQ0FBQ3BFLFdBQVcsQ0FBQyxDQUFDLEVBQUV6SixPQUFPLENBQUVvTyxRQUF1QixJQUFLO1FBQ3ZELElBQUksQ0FBQ0MsNEJBQTRCLENBQUNELFFBQVEsRUFBRWIsV0FBVyxDQUFDQyxjQUFjLEVBQUVLLEdBQUcsRUFBRUUsU0FBUyxFQUFFLElBQUksQ0FBQztNQUM5RixDQUFDLENBQUM7SUFDSDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BUEM7SUFBQTdKLE9BQUEsQ0FTQWdLLGdDQUFnQyxHQUFoQyxTQUFBQSxnQ0FBZ0NBLENBQUNYLFdBQXVCLEVBQUVNLEdBQXNCLEVBQUVFLFNBQTZCLEVBQVE7TUFDdEgsSUFBSUYsR0FBRyxFQUFFO1FBQ1JBLEdBQUcsQ0FBQ3BFLFdBQVcsQ0FBQyxDQUFDLENBQUN6SixPQUFPLENBQUVvTyxRQUF1QixJQUFLO1VBQ3RELElBQUksQ0FBQ0MsNEJBQTRCLENBQUNELFFBQVEsRUFBRWIsV0FBVyxDQUFDRSxtQkFBbUIsRUFBRUksR0FBRyxFQUFFRSxTQUFTLEVBQUUsSUFBSSxDQUFDO1FBQ25HLENBQUMsQ0FBQztNQUNIO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FUQztJQUFBN0osT0FBQSxDQVVBbUssNEJBQTRCLEdBQTVCLFNBQUFBLDRCQUE0QkE7SUFDM0I7SUFDQUQsUUFBdUIsRUFDdkJFLFVBQWtCLEVBQ2xCVCxHQUFzQixFQUN0QkUsU0FBNkIsRUFDN0JRLHFCQUErQixFQUN4QjtNQUNQLElBQUlILFFBQVEsQ0FBQ0ksR0FBRyxLQUFLRixVQUFVLEVBQUU7UUFDaENQLFNBQVMsQ0FBQ1UsSUFBSSxDQUFDLElBQUksQ0FBQ0Msb0JBQW9CLENBQUNiLEdBQUcsRUFBRVMsVUFBVSxFQUFFQyxxQkFBcUIsQ0FBQyxDQUFDO01BQ2xGO0lBQ0QsQ0FBQztJQUFBckssT0FBQSxDQUVLd0ssb0JBQW9CLEdBQTFCLGVBQU1BLG9CQUFvQkEsQ0FBQ04sUUFBMkIsRUFBRU8sVUFBa0IsRUFBbUQ7TUFBQSxJQUFqREoscUJBQXFCLEdBQUFLLFNBQUEsQ0FBQW5QLE1BQUEsUUFBQW1QLFNBQUEsUUFBQWxLLFNBQUEsR0FBQWtLLFNBQUEsTUFBRyxLQUFLO01BQ3hHLE1BQU1DLGlCQUFpQixHQUFHLElBQUksQ0FBQ0MsNEJBQTRCLENBQUNWLFFBQVEsRUFBRU8sVUFBVSxDQUFDLEdBQUdBLFVBQVUsR0FBR1AsUUFBUSxDQUFDeEcscUJBQXFCLENBQUMsQ0FBQztNQUNqSSxNQUFNaUcsR0FBRyxHQUFHbkIsc0JBQXNCLENBQUNDLGVBQWUsQ0FBQztRQUNsREMsT0FBTyxFQUFFd0IsUUFBUTtRQUNqQnZCLGdCQUFnQixFQUFFZ0M7TUFDbkIsQ0FBQyxDQUFDO01BQ0YsT0FBT2hCLEdBQUcsQ0FBQ2tCLElBQUksQ0FBQyxZQUFZO1FBQzNCLE9BQU9SLHFCQUFxQjtNQUM3QixDQUFDLENBQUM7SUFDSCxDQUFDO0lBQUFySyxPQUFBLENBRUQ0Syw0QkFBNEIsR0FBNUIsU0FBQUEsNEJBQTRCQSxDQUFDakIsR0FBc0IsRUFBRVMsVUFBeUIsRUFBVztNQUN4RixNQUFNOUUsU0FBUyxHQUFHcUUsR0FBRyxDQUFDcEUsV0FBVyxDQUFDLENBQUM7TUFDbkMsSUFBSXVGLCtCQUErQixHQUFHLEtBQUs7TUFDM0N4RixTQUFTLENBQUN4SixPQUFPLENBQUMsVUFBVW9PLFFBQVEsRUFBRTtRQUNyQyxJQUFJQSxRQUFRLENBQUN2RSxNQUFNLENBQUMsQ0FBQyxLQUFLeUUsVUFBVSxFQUFFO1VBQ3JDVSwrQkFBK0IsR0FBRyxJQUFJO1FBQ3ZDO01BQ0QsQ0FBQyxDQUFDO01BQ0YsT0FBT0EsK0JBQStCO0lBQ3ZDLENBQUM7SUFBQTlLLE9BQUEsQ0FnSE9GLHdCQUF3QixHQUFoQyxTQUFRQSx3QkFBd0JBLENBQUEsRUFBUztNQUN4Q2lMLFNBQVMsQ0FBQ0MsaUJBQWlCLENBQUMsSUFBSSxDQUFDQyxrQkFBa0IsQ0FBQztNQUNwREYsU0FBUyxDQUFDRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUNELGtCQUFrQixDQUFDO0lBQ3JELENBQUM7SUFBQWpMLE9BQUEsQ0FFRGlMLGtCQUFrQixHQUFsQixTQUFBQSxrQkFBa0JBLENBQUNFLE1BQXNDLEVBQVE7TUFDaEUsTUFBTUMsT0FBTyxHQUFHRCxNQUFNLENBQUNFLFlBQVksQ0FBQyxTQUFTLENBQUM7TUFDOUMsSUFBSUQsT0FBTyxDQUFDRSxHQUFHLENBQVksc0JBQXNCLENBQUMsRUFBRTtRQUNuRCxNQUFNblIsWUFBWSxHQUFHaVIsT0FBTyxDQUFDeEgsU0FBUyxDQUFDLENBQWdEO1FBQ3ZGLElBQUl6SixZQUFZLEVBQUVvUixpQkFBaUIsRUFBRTtVQUNwQ3BSLFlBQVksQ0FBQ29SLGlCQUFpQixDQUFDLENBQUM7UUFDakM7TUFDRDtJQUNELENBQUM7SUFBQXZMLE9BQUEsQ0FHRHdMLFlBQVksR0FEWixTQUNBQSxZQUFZQSxDQUFDTCxNQUFpQyxFQUFRO01BQ3JELElBQUksQ0FBQ3BRLGlCQUFpQixDQUFDLENBQUMsRUFBRTBRLGNBQWMsRUFBRUMsaUJBQWlCLENBQUMsQ0FBQztNQUM3RCxNQUFNQyxVQUFVLEdBQUdSLE1BQU0sQ0FBQ1MsU0FBUyxDQUFDLENBQTBCO01BQzlELE1BQU1qUixlQUFlLEdBQUd3USxNQUFNLENBQUNVLGFBQWEsQ0FBQyxDQUFDO01BQzlDLElBQUlGLFVBQVUsRUFBRTtRQUNmLE1BQU0vUSxVQUFVLEdBQUkrUSxVQUFVLENBQUNHLG1CQUFtQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQXVDO1FBQ2hHLE1BQU1DLHVCQUF1QixHQUFHLElBQUksQ0FBQ0MsdUJBQXVCLENBQUNMLFVBQVUsQ0FBQztRQUN4RSxJQUFJLENBQUMzUSxTQUFTLEVBQUVOLFFBQVEsQ0FBQ0MsZUFBZSxFQUFFQyxVQUFVLENBQUM7UUFDckQsSUFBSSxDQUFDcVIsU0FBUyxDQUFDLGdCQUFnQixFQUFFQyxLQUFLLENBQUM7VUFBRXRSLFVBQVUsRUFBRUE7UUFBVyxDQUFDLEVBQUVELGVBQWUsQ0FBQyxDQUFDO1FBQ3BGLElBQUksQ0FBQ3NSLFNBQVMsQ0FBQyxRQUFRLEVBQUVDLEtBQUssQ0FBQztVQUFFelIsTUFBTSxFQUFFRSxlQUFlLENBQUNGO1FBQU8sQ0FBQyxFQUFFc1IsdUJBQXVCLENBQUMsQ0FBQztRQUM1RixJQUFJLENBQUNoTixrQkFBa0IsR0FBRyxLQUFLO1FBQy9CLElBQUksQ0FBQyxJQUFJLENBQUNvTixRQUFRLEVBQUU7VUFDbkIsSUFBSSxDQUFDcFIsaUJBQWlCLENBQUMsQ0FBQyxFQUFFcVIsZUFBZSxDQUFDLENBQUMsQ0FBQ0MsY0FBYyxDQUFDLENBQUM7UUFDN0Q7TUFDRDtJQUNELENBQUM7SUFBQXJNLE9BQUEsQ0FHS3NNLG1CQUFtQixHQUR6QixlQUNNQSxtQkFBbUJBLENBQUNuQixNQUF5QyxFQUFpQjtNQUNuRixNQUFNekksU0FBUyxHQUFHeUksTUFBTSxDQUFDUyxTQUFTLENBQUMsQ0FBMEI7TUFDN0QsTUFBTVcsZ0JBQWdCLEdBQUdwQixNQUFNLENBQUNVLGFBQWEsQ0FBQyxDQUFDO01BQy9DLElBQUluSixTQUFTLEVBQUU7UUFDZCxJQUFJLENBQUNBLFNBQVMsQ0FBQzhKLFdBQVcsQ0FBQyxDQUFDLEVBQUU7VUFDN0IsTUFBTUMscUJBQXFCLENBQUNDLG9CQUFvQixDQUFDaEssU0FBUyxFQUFFLGNBQWMsQ0FBQztRQUM1RTtRQUNBLE1BQU1pSyxXQUFXLEdBQUdqSyxTQUFTLENBQUNvSixtQkFBbUIsQ0FBQyxDQUFDO1FBQ25ELE1BQU1uUixlQUF1QixHQUFHLElBQUksQ0FBQ3FSLHVCQUF1QixDQUFDdEosU0FBUyxDQUFDO1FBQ3ZFLElBQUksQ0FBQzFILFNBQVMsRUFBRVIsZ0JBQWdCLENBQUMsSUFBSSxDQUFDb1MsbUJBQW1CLENBQUNsSyxTQUFTLENBQUMsQ0FBQztRQUNyRSxJQUFJLENBQUN1SixTQUFTLENBQUMsdUJBQXVCLEVBQUVDLEtBQUssQ0FBQztVQUFFdFIsVUFBVSxFQUFFK1I7UUFBWSxDQUFDLEVBQUVKLGdCQUFnQixDQUFDLENBQUM7UUFDN0YsSUFBSSxDQUFDTixTQUFTLENBQUMsZUFBZSxFQUFFdFIsZUFBZSxDQUFDO1FBQ2hEO1FBQ0EsSUFBSTRSLGdCQUFnQixFQUFFTSxlQUFlLEVBQUU7VUFDdEMsSUFBSSxDQUFDOU4sa0JBQWtCLEdBQUcsSUFBSTtRQUMvQjtNQUNEO0lBQ0QsQ0FBQztJQUFBaUIsT0FBQSxDQUVENE0sbUJBQW1CLEdBQW5CLFNBQUFBLG1CQUFtQkEsQ0FBQ2xLLFNBQTRDLEVBQVU7TUFDekUsT0FBT0EsU0FBUyxFQUFFb0ssUUFBUSxJQUFJLEVBQUU7SUFDakMsQ0FBQztJQUFBOU0sT0FBQSxDQUVEZ00sdUJBQXVCLEdBQXZCLFNBQUFBLHVCQUF1QkEsQ0FBQ0wsVUFBcUIsRUFBZ0M7TUFDNUUsTUFBTTtRQUFFeFEsVUFBVTtRQUFFNFIsT0FBTztRQUFFQztNQUFPLENBQUMsR0FBR0MsV0FBVyxDQUFDQyxVQUFVLENBQUN2QixVQUF1QyxDQUFDLElBQUksQ0FBQyxDQUFDO01BRTdHLE9BQU87UUFBRXhRLFVBQVU7UUFBRTRSLE9BQU87UUFBRUM7TUFBTyxDQUFDO0lBQ3ZDOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BVEM7SUFBQWhOLE9BQUEsQ0FVTW1OLGVBQWUsR0FBckIsZUFBTUEsZUFBZUEsQ0FDcEJDLGNBQXNCLEVBQ3RCQyxTQUE2QixFQUM3QkMsT0FBaUYsRUFDakU7TUFDaEI7TUFDQTtNQUNBLElBQUk1QyxTQUFTLENBQUNuUCxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQzNCK1IsT0FBTyxHQUFHRCxTQUFTO1FBQ25CLE9BQU9KLFdBQVcsQ0FBQ0UsZUFBZSxDQUFDLElBQUksQ0FBQ3hNLE9BQU8sRUFBRXlNLGNBQWMsRUFBRUUsT0FBTyxDQUFDO01BQzFFO01BQ0EsT0FBT0wsV0FBVyxDQUFDRSxlQUFlLENBQUMsSUFBSSxDQUFDeE0sT0FBTyxFQUFFeU0sY0FBYyxFQUFFQyxTQUFTLEVBQUVDLE9BQU8sQ0FBQztJQUNyRjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQXROLE9BQUEsQ0FLQXVOLG9CQUFvQixHQUFwQixTQUFBQSxvQkFBb0JBLENBQUEsRUFBVztNQUM5QixPQUFPLElBQUksQ0FBQzVNLE9BQU8sRUFBRTZNLHNCQUFzQixDQUFDLENBQUMsRUFBRUMsV0FBVyxJQUFJLEVBQUU7SUFDakU7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTEM7SUFBQXpOLE9BQUEsQ0FNQWtOLFVBQVUsR0FBVixTQUFBQSxVQUFVQSxDQUFBLEVBQVc7TUFDcEIsT0FBT0QsV0FBVyxDQUFDQyxVQUFVLENBQUMsSUFBSSxDQUFDdk0sT0FBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwRTs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQVgsT0FBQSxDQUtNVSxhQUFhLEdBQW5CLGVBQU1BLGFBQWFBLENBQUEsRUFBZ0M7TUFDbEQsTUFBTWdDLFNBQVMsR0FBRyxJQUFJLENBQUMvQixPQUFPO01BQzlCLElBQUk7UUFDSCxJQUFJK0IsU0FBUyxFQUFFO1VBQ2QsTUFBTUEsU0FBUyxDQUFDZ0wscUJBQXFCLENBQUMsQ0FBQztVQUN2QyxPQUFPLE1BQU1oTCxTQUFTLENBQUNoQyxhQUFhLENBQUMsQ0FBQztRQUN2QztNQUNELENBQUMsQ0FBQyxPQUFPaU4sR0FBWSxFQUFFO1FBQ3RCLE1BQU1DLE9BQU8sR0FBR0QsR0FBRyxZQUFZRSxLQUFLLEdBQUdGLEdBQUcsQ0FBQ0MsT0FBTyxHQUFHRSxNQUFNLENBQUNILEdBQUcsQ0FBQztRQUNoRUksR0FBRyxDQUFDQyxLQUFLLENBQUMsb0NBQW9DSixPQUFPLEVBQUUsQ0FBQztRQUN4RCxNQUFNQyxLQUFLLENBQUNELE9BQU8sQ0FBQztNQUNyQjtJQUNELENBQUM7SUFBQTVOLE9BQUEsQ0FFRGlPLDJCQUEyQixHQUEzQixTQUFBQSwyQkFBMkJBLENBQUEsRUFBWTtNQUN0QyxPQUFPQyxxQkFBcUIsQ0FBQ0MseUJBQXlCLENBQUMsSUFBSSxDQUFDeE4sT0FBTyxDQUFDeU4sYUFBYSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUM7SUFDNUY7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTEM7SUFBQXBPLE9BQUEsQ0FNTTRFLG1CQUFtQixHQUF6QixlQUFNQSxtQkFBbUJBLENBQUEsRUFBOEI7TUFDdEQsTUFBTWhDLGdCQUFnQixHQUFHLE1BQU15TCxXQUFXLENBQUN6SixtQkFBbUIsQ0FBQyxJQUFJLENBQUNqQyxVQUFVLENBQUMsQ0FBQyxDQUFDO01BQ2pGLE1BQU12QixVQUFVLEdBQUcsSUFBSSxDQUFDckcsaUJBQWlCLENBQUMsQ0FBeUI7TUFDbkUsSUFBSXFHLFVBQVUsS0FBS1osU0FBUyxFQUFFO1FBQzdCLE1BQU1hLElBQUksR0FBR0QsVUFBVSxFQUFFRSxPQUFPLENBQUMsQ0FBQztVQUNqQ2dOLFlBQVksR0FBR0MsV0FBVyxDQUFDQyxlQUFlLENBQUNuTixJQUFJLENBQUM7VUFDaERvTixpQkFBaUIsR0FBR0gsWUFBWSxFQUFFSSxvQkFBb0IsQ0FBQyxDQUFDO1VBQ3hEQyxlQUFlLEdBQUcsSUFBSSxDQUFDQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUNDLFFBQVEsQ0FBQztRQUNwRSxJQUFJRixlQUFlLEVBQUVHLGVBQWUsRUFBRWhILElBQUksRUFBRTtVQUMzQyxNQUFNaUgsV0FBVyxHQUNoQkosZUFBZSxFQUFFRyxlQUFlLEVBQUVoSCxJQUFJLElBQ3RDMkcsaUJBQWlCLEVBQUVPLG1CQUFtQixDQUFDTCxlQUFlLEVBQUVHLGVBQWUsRUFBRWhILElBQUksRUFBRXpHLElBQUksQ0FBQzBFLFFBQVEsQ0FBQyxDQUFDLENBQUM7VUFDaEduRCxnQkFBZ0IsQ0FBQ3FNLG1CQUFtQixDQUFDRixXQUFXLENBQUM7UUFDbEQ7TUFDRDtNQUNBLE9BQU9uTSxnQkFBZ0I7SUFDeEI7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBNUMsT0FBQSxDQUlBa1AsK0JBQStCLEdBQS9CLFNBQUFBLCtCQUErQkEsQ0FBQSxFQUFhO01BQzNDLE9BQVEsSUFBSSxDQUFDdk8sT0FBTyxDQUFDd08sa0JBQWtCLENBQUMsQ0FBQyxDQUN2Q0MsTUFBTSxDQUFDLFVBQVVDLFVBQVUsRUFBRTtRQUM3QixPQUFPQSxVQUFVLENBQUNDLFFBQVE7TUFDM0IsQ0FBQyxDQUFDLENBQ0RDLEdBQUcsQ0FBQyxVQUFVQyxZQUFZLEVBQUU7UUFDNUIsT0FBT0EsWUFBWSxDQUFDQyxhQUFhO01BQ2xDLENBQUMsQ0FBQztJQUNKOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQXpQLE9BQUEsQ0FLQTZMLGFBQWEsR0FBYixTQUFBQSxhQUFhQSxDQUFBLEVBQWE7TUFDekIsTUFBTW5KLFNBQVMsR0FBRyxJQUFJLENBQUMvQixPQUFPO01BQzlCLE1BQU14RixVQUFVLEdBQUd1SCxTQUFTLENBQUNnTixJQUFJLENBQUMsWUFBWSxDQUFDO01BQy9DLElBQUl2VSxVQUFVLEVBQUU7UUFDZixPQUFPd1UsS0FBSyxDQUFDQyxPQUFPLENBQUN6VSxVQUFVLENBQUMsR0FBR0EsVUFBVSxHQUFHMFUsSUFBSSxDQUFDQyxLQUFLLENBQUMzVSxVQUFVLENBQUM7TUFDdkU7TUFDQSxPQUFPLEVBQUU7SUFDVixDQUFDO0lBQUE2RSxPQUFBLENBRUR2RSxVQUFVLEdBQVYsU0FBQUEsVUFBVUEsQ0FBQSxFQUE0QjtNQUNyQyxJQUFJc1UsY0FBYztNQUNsQixJQUFJO1FBQ0gsTUFBTUMsWUFBWSxHQUFHLElBQUksQ0FBQ2pLLFFBQVEsQ0FBQyxlQUFlLENBQTZCO1FBQy9FLE1BQU1rSyxvQkFBb0IsR0FBRyxJQUFJLENBQUN0UCxPQUFPLENBQUN1UCx1QkFBdUIsQ0FBQyxDQUFDO1FBRW5FLElBQUlGLFlBQVksSUFBSUMsb0JBQW9CLEVBQUU7VUFDekNGLGNBQWMsR0FBR0MsWUFBWSxDQUFDdlUsVUFBVSxDQUFDdVUsWUFBWSxDQUFDRywwQkFBMEIsQ0FBQ0Ysb0JBQW9CLENBQUMsQ0FBQztRQUN4RztNQUNELENBQUMsQ0FBQyxPQUFPRyxDQUFDLEVBQUU7UUFDWHJDLEdBQUcsQ0FBQ3NDLEtBQUssQ0FBQyx5QkFBeUIsRUFBRUQsQ0FBVyxDQUFDO01BQ2xEO01BQ0EsT0FBT0wsY0FBYztJQUN0Qjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BUEM7SUFBQS9QLE9BQUEsQ0FRTXNRLHFCQUFxQixHQUEzQixlQUFNQSxxQkFBcUJBLENBQUNiLGFBQXFCLEVBQUVjLE9BQWdCLEVBQWlCO01BQ25GLE1BQU14RixTQUFTLENBQUN5RixrQkFBa0IsQ0FBQyxJQUFJLENBQUM3UCxPQUFPLEVBQUU7UUFBRThQLEtBQUssRUFBRSxDQUFDO1VBQUUzSSxJQUFJLEVBQUUySCxhQUFhO1VBQUVjO1FBQVEsQ0FBQztNQUFFLENBQUMsQ0FBQztJQUNoRzs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBdlEsT0FBQSxDQU1NMFEscUJBQXFCLEdBQTNCLGVBQU1BLHFCQUFxQkEsQ0FBQ2pCLGFBQXFCLEVBQW9CO01BQ3BFLE1BQU1rQixLQUF3QixHQUFHLE1BQU01RixTQUFTLENBQUM2RixxQkFBcUIsQ0FBQyxJQUFJLENBQUNqUSxPQUFPLENBQUM7TUFDcEYsT0FBTyxDQUFDLENBQUNnUSxLQUFLLENBQUNGLEtBQUssQ0FBQ2hMLElBQUksQ0FBRUMsSUFBSSxJQUFLQSxJQUFJLENBQUNvQyxJQUFJLEtBQUsySCxhQUFhLENBQUM7SUFDakU7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBelAsT0FBQSxDQUlBNlEsb0JBQW9CLEdBQXBCLFNBQUFBLG9CQUFvQkEsQ0FBQSxFQUFzQjtNQUN6QyxNQUFNQyxvQkFBb0IsR0FBRyxJQUFJLENBQUNuUSxPQUFPLENBQUN1UCx1QkFBdUIsQ0FBQyxDQUFDO01BQ25FLElBQUlZLG9CQUFvQixFQUFFO1FBQ3pCLE9BQU9DLFVBQVUsQ0FBQ0MsY0FBYyxDQUFDRixvQkFBb0IsQ0FBQztNQUN2RCxDQUFDLE1BQU07UUFDTixNQUFNLElBQUlqRCxLQUFLLENBQUMsd0RBQXdELElBQUksQ0FBQ29ELEVBQUUsRUFBRSxDQUFDO01BQ25GO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBalIsT0FBQSxDQUlBa1IsdUJBQXVCLEdBQXZCLFNBQUFBLHVCQUF1QkEsQ0FBQ0MsT0FBMEIsRUFBUTtNQUN6RCxNQUFNeFEsT0FBTyxHQUFHLElBQUksQ0FBQ2dDLFVBQVUsQ0FBQyxDQUFjO01BQzlDLE1BQU15TyxVQUFVLEdBQUd6USxPQUFPLEVBQUU2TCxXQUFXLEdBQUcsQ0FBQztNQUMzQyxJQUFJLENBQUM0RSxVQUFVLEVBQUU7UUFDaEIsSUFBSSxDQUFDelEsT0FBTyxDQUFDMFEsdUJBQXVCLENBQUNGLE9BQU8sQ0FBQztNQUM5QztJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBblIsT0FBQSxDQUtBOEIsb0JBQW9CLEdBQXBCLFNBQUFBLG9CQUFvQkEsQ0FBQSxFQUFrQjtNQUNyQyxPQUFPLElBQUksQ0FBQytPLG9CQUFvQixDQUFDLENBQUMsQ0FBQy9PLG9CQUFvQixDQUFDLENBQUM7SUFDMUQ7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUE5QixPQUFBLENBS0FzUixvQkFBb0IsR0FBcEIsU0FBQUEsb0JBQW9CQSxDQUFDaEgsR0FBVyxFQUFRO01BQ3ZDLE1BQU03SSxpQkFBaUIsR0FBRyxJQUFJLENBQUNvUCxvQkFBb0IsQ0FBQyxDQUFDO01BQ3JEcFAsaUJBQWlCLENBQUM2UCxvQkFBb0IsQ0FBQ2hILEdBQUcsQ0FBQztJQUM1Qzs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBdEssT0FBQSxDQU1BdVIscUJBQXFCLEdBQXJCLFNBQUFBLHFCQUFxQkEsQ0FBQ3pKLElBQVksRUFBRTBKLE9BQWdCLEVBQVE7TUFDM0QsSUFBSSxDQUFDQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUVDLE9BQU8sQ0FDL0I7UUFDQyxDQUFDLElBQUksQ0FBQy9RLE9BQU8sQ0FBQytPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRztVQUMvQmlDLFlBQVksRUFBRTtZQUFFLENBQUM3SixJQUFJLEdBQUc7Y0FBRThKLFFBQVEsRUFBRUosT0FBTyxHQUFHSyxhQUFhLENBQUNDLFFBQVEsR0FBR0QsYUFBYSxDQUFDRTtZQUFTO1VBQUU7UUFDakc7TUFDRCxDQUFDLEVBQ0QsSUFDRCxDQUFDO0lBQ0Y7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTEM7SUFBQS9SLE9BQUEsQ0FNQWdTLHFCQUFxQixHQUFyQixTQUFBQSxxQkFBcUJBLENBQUNsSyxJQUFZLEVBQVc7TUFDNUMsT0FBTyxJQUFJLENBQUMySixnQkFBZ0IsQ0FBQyxDQUFDLEVBQUVRLFdBQVcsQ0FBQyxJQUFJLElBQUksQ0FBQ3RSLE9BQU8sQ0FBQytPLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCNUgsSUFBSSxXQUFXLENBQUMsS0FDNUcrSixhQUFhLENBQUNFLFFBQVEsR0FDcEIsS0FBSyxHQUNMLElBQUk7SUFDUjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBL1IsT0FBQSxDQU1Na1MscUNBQXFDLEdBQTNDLGVBQU1BLHFDQUFxQ0EsQ0FDMUN0UCxnQkFBa0MsRUFDbEN1UCxtQkFBNEIsRUFDRDtNQUMzQixPQUFPOUQsV0FBVyxDQUFDNkQscUNBQXFDLENBQ3ZELElBQUksQ0FBQ3ZSLE9BQU8sRUFDWmlDLGdCQUFnQixFQUNoQnVQLG1CQUFtQixFQUNuQixJQUFJLENBQUN4UixPQUFPLEVBQUVvRixRQUFRLENBQUMsQ0FDeEIsQ0FBQztJQUNGOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUxDO0lBQUEvRixPQUFBLENBTU1vUyw2QkFBNkIsR0FBbkMsZUFBTUEsNkJBQTZCQSxDQUFDMVAsU0FBb0IsRUFBRTJQLE9BQXNDLEVBQWlCO01BQ2hILE1BQU1oRSxXQUFXLENBQUMrRCw2QkFBNkIsQ0FBQzFQLFNBQVMsRUFBRTJQLE9BQU8sQ0FBQztJQUNwRTs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FSQztJQUFBclMsT0FBQSxDQVNNK0QsbUJBQW1CLEdBQXpCLGVBQU1BLG1CQUFtQkEsQ0FDeEJuQixnQkFBa0MsRUFHZjtNQUFBLElBRm5CdVAsbUJBQW1CLEdBQUF6SCxTQUFBLENBQUFuUCxNQUFBLFFBQUFtUCxTQUFBLFFBQUFsSyxTQUFBLEdBQUFrSyxTQUFBLE1BQUcsS0FBSztNQUFBLElBQzNCNEgsd0JBQXdCLEdBQUE1SCxTQUFBLENBQUFuUCxNQUFBLFFBQUFtUCxTQUFBLFFBQUFsSyxTQUFBLEdBQUFrSyxTQUFBLE1BQUcsS0FBSztNQUVoQyxNQUFNL0osT0FBTyxHQUFHLElBQUksQ0FBQ2dDLFVBQVUsQ0FBQyxDQUEwQjtNQUMxRCxNQUFNeU8sVUFBVSxHQUFHelEsT0FBTyxJQUFJQSxPQUFPLEVBQUU2TCxXQUFXLEdBQUcsQ0FBQztNQUN0RCxJQUFJK0YsTUFBK0U7TUFDbkYsSUFBSW5CLFVBQVUsRUFBRTtRQUNmelEsT0FBTyxDQUFDMkQsY0FBYyxDQUFDLEtBQUssQ0FBQztNQUM5QjtNQUNBLElBQUk7UUFDSGlPLE1BQU0sR0FBRyxNQUFNbEUsV0FBVyxDQUFDbUUsK0JBQStCLENBQ3pELElBQUksQ0FBQzdQLFVBQVUsQ0FBQyxDQUFDLEVBQ2pCQyxnQkFBZ0IsRUFDaEJ1UCxtQkFBbUIsRUFDbkJHLHdCQUNELENBQUM7UUFDRCxPQUFPQyxNQUFNLEVBQUVFLGdCQUFnQjtNQUNoQyxDQUFDLENBQUMsT0FBTzlFLEdBQVksRUFBRTtRQUN0QixNQUFNQyxPQUFPLEdBQUdELEdBQUcsWUFBWUUsS0FBSyxHQUFHRixHQUFHLENBQUNDLE9BQU8sR0FBR0UsTUFBTSxDQUFDSCxHQUFHLENBQUM7UUFDaEVJLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDLG9DQUFvQ0osT0FBTyxFQUFFLENBQUM7UUFDeEQsTUFBTUMsS0FBSyxDQUFDRCxPQUFPLENBQUM7TUFDckIsQ0FBQyxTQUFTO1FBQ1QsSUFBSXdELFVBQVUsRUFBRTtVQUNmelEsT0FBTyxDQUFDMkQsY0FBYyxDQUFDLElBQUksRUFBRWlPLE1BQU0sRUFBRUcsU0FBUyxDQUFDO1FBQ2hEO01BQ0Q7SUFDRDs7SUFFQTtBQUNEO0FBQ0EsT0FGQztJQUFBMVMsT0FBQSxDQUdBdUwsaUJBQWlCLEdBQWpCLFNBQUFBLGlCQUFpQkEsQ0FBQSxFQUFTO01BQ3pCLElBQUksQ0FBQ3hRLGlCQUFpQixDQUFDLENBQUMsRUFBRXFSLGVBQWUsQ0FBQyxDQUFDLENBQUNDLGNBQWMsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFBQXJNLE9BQUEsQ0FFTzJTLGdCQUFnQixHQUF4QixTQUFRQSxnQkFBZ0JBLENBQUNDLFlBQW9CLEVBQVU7TUFDdEQsTUFBTUMsd0JBQXdCLEdBQUc1RixXQUFXLENBQUM2RixpQ0FBaUMsQ0FBQyxJQUFJLENBQUNuUyxPQUFPLEVBQUVpUyxZQUFZLENBQUM7TUFDMUcsT0FDQyxDQUFDQyx3QkFBd0IsR0FBR0Usa0NBQWtDLENBQUNGLHdCQUF3QixFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBR3JTLFNBQVMsS0FDakhvUyxZQUFZO0lBRWQsQ0FBQztJQUFBNVMsT0FBQSxDQUVLZ1QsZUFBZSxHQUFyQixlQUFNQSxlQUFlQSxDQUFDbEwsSUFBWSxFQUFpQjtNQUNsRCxNQUFNNkksS0FBd0IsR0FBRyxNQUFNNUYsU0FBUyxDQUFDNkYscUJBQXFCLENBQUMsSUFBSSxDQUFDalEsT0FBTyxDQUFDO01BQ3BGLE1BQU04TyxhQUFhLEdBQUcsSUFBSSxDQUFDa0QsZ0JBQWdCLENBQUM3SyxJQUFJLENBQUM7TUFDakQsTUFBTW1MLGlCQUFpQixHQUFHLENBQUMsQ0FBQ3RDLEtBQUssQ0FBQ0YsS0FBSyxDQUFDaEwsSUFBSSxDQUFFQyxJQUFJLElBQUtBLElBQUksQ0FBQ29DLElBQUksS0FBSzJILGFBQWEsQ0FBQztNQUNuRixJQUFJLENBQUN3RCxpQkFBaUIsRUFBRTtRQUN2QnRDLEtBQUssQ0FBQ0YsS0FBSyxDQUFDbEcsSUFBSSxDQUFDO1VBQUV6QyxJQUFJLEVBQUUySDtRQUFjLENBQUMsQ0FBQztNQUMxQztNQUNBLE1BQU0xRSxTQUFTLENBQUN5RixrQkFBa0IsQ0FBQyxJQUFJLENBQUM3UCxPQUFPLEVBQUVnUSxLQUFLLENBQUM7SUFDeEQsQ0FBQztJQUFBM1EsT0FBQSxDQUVLa1QsMkJBQTJCLEdBQWpDLGVBQU1BLDJCQUEyQkEsQ0FBQ3BMLElBQVksRUFBRXFMLFVBQW1CLEVBQThCO01BQ2hHLE1BQU0xRCxhQUFhLEdBQUcsSUFBSSxDQUFDa0QsZ0JBQWdCLENBQUM3SyxJQUFJLENBQUM7TUFFakQsT0FBTyxJQUFJN0UsT0FBTyxDQUFDLENBQUNDLE9BQU8sRUFBRWtRLE1BQU0sS0FBSztRQUN2QyxNQUFNQyxXQUFXLEdBQUcsSUFBSSxDQUFDMVMsT0FBTyxDQUFDMlMsY0FBYyxDQUFDLENBQUMsQ0FBQzdOLElBQUksQ0FBRUMsSUFBSSxJQUFLQSxJQUFJLENBQUM2TixjQUFjLENBQUMsQ0FBQyxLQUFLOUQsYUFBYSxDQUFDO1FBQ3pHLE1BQU0rRCxTQUFTLEdBQUd6QyxVQUFVLENBQUNDLGNBQWMsQ0FBQ3FDLFdBQVcsRUFBRUksWUFBWSxDQUFDLENBQUMsQ0FBMEI7UUFDakcsSUFBSSxDQUFDRCxTQUFTLElBQUksQ0FBQ0gsV0FBVyxFQUFFO1VBQy9CRCxNQUFNLENBQUMsSUFBSXZGLEtBQUssQ0FBQyw4QkFBOEIvRixJQUFJLFlBQVksQ0FBQyxDQUFDO1VBQ2pFO1FBQ0Q7UUFFQTBMLFNBQVMsQ0FBQ25QLGVBQWUsQ0FBQyxRQUFRLEVBQUUsTUFBTTtVQUN6Q25CLE9BQU8sQ0FBQ3NRLFNBQVMsQ0FBQ3BGLGFBQWEsQ0FBQyxDQUFzQixDQUFDO1FBQ3hELENBQUMsQ0FBQztRQUVEaUYsV0FBVyxDQUF3Q0ssV0FBVyxHQUFHO1VBQUVDLFVBQVUsRUFBRTtZQUFFQyxNQUFNLEVBQUU7VUFBSztRQUFFLENBQUM7UUFDakdQLFdBQVcsQ0FBeUNRLFNBQVMsR0FBRyxJQUFJQyxNQUFNLENBQUNDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3RkMsVUFBVSxDQUFDLE1BQU07VUFDZlgsV0FBVyxDQUFDWSxjQUFjLENBQUMsVUFBVSxDQUFDLENBQWEsQ0FBQyxDQUFDLENBQUNDLG9CQUFvQixDQUFDO1lBQzNFQyxZQUFZLEVBQUUsSUFBSTtZQUNsQkMsZUFBZSxFQUFFakI7VUFDbEIsQ0FBcUQsQ0FBQztRQUN2RCxDQUFDLEVBQUUsR0FBRyxDQUFDO01BQ1IsQ0FBQyxDQUFDO0lBQ0gsQ0FBQztJQUFBblQsT0FBQSxDQUVEcVUsdUJBQXVCLEdBQXZCLFNBQUFBLHVCQUF1QkEsQ0FBQSxFQUFXO01BQ2pDLE9BQU8sSUFBSSxDQUFDMVQsT0FBTyxFQUFFNk0sc0JBQXNCLENBQUMsQ0FBQyxFQUFFQyxXQUFXO0lBQzNELENBQUM7SUFBQSxPQUFBdFIsWUFBQTtFQUFBLEVBbjdCeUJtWSxRQUFRLEdBQUFDLHlCQUFBLENBQUFsVyxPQUFBLENBQUE5RCxTQUFBLCtCQUFBbUMsS0FBQSxHQUFBckIsTUFBQSxDQUFBbVosd0JBQUEsQ0FBQW5XLE9BQUEsQ0FBQTlELFNBQUEsK0JBQUE4RCxPQUFBLENBQUE5RCxTQUFBLEdBQUFnYSx5QkFBQSxDQUFBbFcsT0FBQSxDQUFBOUQsU0FBQSw0QkFBQXFDLEtBQUEsR0FBQXZCLE1BQUEsQ0FBQW1aLHdCQUFBLENBQUFuVyxPQUFBLENBQUE5RCxTQUFBLDRCQUFBOEQsT0FBQSxDQUFBOUQsU0FBQSxHQUFBMEUsV0FBQSxHQUFBc1YseUJBQUEsQ0FBQWxXLE9BQUEsQ0FBQTlELFNBQUEsU0FBQXNDLEtBQUE7SUFBQTRYLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBMVYsWUFBQSxHQUFBcVYseUJBQUEsQ0FBQWxXLE9BQUEsQ0FBQTlELFNBQUEsZUFBQXdDLEtBQUE7SUFBQTBYLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBelYsWUFBQSxHQUFBb1YseUJBQUEsQ0FBQWxXLE9BQUEsQ0FBQTlELFNBQUEsa0JBQUEyQyxLQUFBO0lBQUF1WCxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQXhWLFlBQUEsR0FBQW1WLHlCQUFBLENBQUFsVyxPQUFBLENBQUE5RCxTQUFBLGVBQUE0QyxLQUFBO0lBQUFzWCxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQXZWLFlBQUEsR0FBQWtWLHlCQUFBLENBQUFsVyxPQUFBLENBQUE5RCxTQUFBLGNBQUE4QyxLQUFBO0lBQUFvWCxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQXRWLFlBQUEsR0FBQWlWLHlCQUFBLENBQUFsVyxPQUFBLENBQUE5RCxTQUFBLG1CQUFBK0MsTUFBQTtJQUFBbVgsWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUFyVixZQUFBLEdBQUFnVix5QkFBQSxDQUFBbFcsT0FBQSxDQUFBOUQsU0FBQSxzQkFBQWdELE1BQUE7SUFBQWtYLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBcFYsWUFBQSxHQUFBK1UseUJBQUEsQ0FBQWxXLE9BQUEsQ0FBQTlELFNBQUEsbUJBQUFpRCxNQUFBO0lBQUFpWCxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQW5WLFlBQUEsR0FBQThVLHlCQUFBLENBQUFsVyxPQUFBLENBQUE5RCxTQUFBLGFBQUFvRCxNQUFBO0lBQUE4VyxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQWxWLGFBQUEsR0FBQTZVLHlCQUFBLENBQUFsVyxPQUFBLENBQUE5RCxTQUFBLHFCQUFBc0QsTUFBQTtJQUFBNFcsWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUFqVixhQUFBLEdBQUE0VSx5QkFBQSxDQUFBbFcsT0FBQSxDQUFBOUQsU0FBQSxvQkFBQXVELE1BQUE7SUFBQTJXLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBaFYsYUFBQSxHQUFBMlUseUJBQUEsQ0FBQWxXLE9BQUEsQ0FBQTlELFNBQUEsaUJBQUF3RCxNQUFBO0lBQUEwVyxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQS9VLGFBQUEsR0FBQTBVLHlCQUFBLENBQUFsVyxPQUFBLENBQUE5RCxTQUFBLDRCQUFBeUQsTUFBQTtJQUFBeVcsWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUFMLHlCQUFBLENBQUFsVyxPQUFBLENBQUE5RCxTQUFBLG1CQUFBMEQsTUFBQSxHQUFBNUMsTUFBQSxDQUFBbVosd0JBQUEsQ0FBQW5XLE9BQUEsQ0FBQTlELFNBQUEsbUJBQUE4RCxPQUFBLENBQUE5RCxTQUFBLEdBQUFnYSx5QkFBQSxDQUFBbFcsT0FBQSxDQUFBOUQsU0FBQSwwQkFBQTRELE1BQUEsR0FBQTlDLE1BQUEsQ0FBQW1aLHdCQUFBLENBQUFuVyxPQUFBLENBQUE5RCxTQUFBLDBCQUFBOEQsT0FBQSxDQUFBOUQsU0FBQSxHQUFBOEQsT0FBQSxNQUFBRCxNQUFBLEtBQUFBLE1BQUE7RUFBQSxPQXE3QnBCakMsWUFBWTtBQUFBIiwiaWdub3JlTGlzdCI6W119
|