@sapui5/sap.fe.macros 1.141.0 → 1.142.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 +48 -31
- package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +51 -26
- 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/Field.js +30 -13
- package/src/sap/fe/macros/Field.ts +60 -30
- package/src/sap/fe/macros/FooterContent.js +5 -2
- package/src/sap/fe/macros/FooterContent.tsx +6 -3
- package/src/sap/fe/macros/KPITag.js +1 -1
- package/src/sap/fe/macros/KPITag.tsx +3 -1
- package/src/sap/fe/macros/MacroAPI.js +3 -2
- package/src/sap/fe/macros/MacroAPI.ts +2 -2
- package/src/sap/fe/macros/MessageButton.js +3 -2
- package/src/sap/fe/macros/MessageButton.tsx +5 -2
- package/src/sap/fe/macros/MicroChart.js +10 -6
- package/src/sap/fe/macros/MicroChart.tsx +8 -2
- 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/Status.js +35 -8
- package/src/sap/fe/macros/Status.tsx +23 -2
- package/src/sap/fe/macros/ValueHelp.js +5 -2
- package/src/sap/fe/macros/ValueHelp.tsx +5 -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/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 +8 -8
- package/src/sap/fe/macros/chart/ChartDelegate.ts +17 -12
- package/src/sap/fe/macros/chart/MdcChartTemplate.js +54 -11
- package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +70 -11
- 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/FilterBar.js +39 -3
- package/src/sap/fe/macros/controls/FilterBar.ts +42 -1
- 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 +2 -2
- package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +37 -9
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +45 -6
- 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 +3 -3
- package/src/sap/fe/macros/field/FieldFormatOptions.ts +1 -1
- 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 +38 -8
- package/src/sap/fe/macros/field/FieldRuntime.ts +65 -7
- 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 +100 -36
- package/src/sap/fe/macros/filter/FilterUtils.ts +127 -39
- 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 +10 -7
- package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +31 -16
- package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +4 -3
- package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +5 -2
- 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 +96 -65
- package/src/sap/fe/macros/form/FormContainer.block.ts +104 -65
- 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/library.js +3 -3
- package/src/sap/fe/macros/library.ts +2 -0
- 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 +7 -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 +12 -3
- 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/richtexteditor/ButtonGroup.js +2 -2
- package/src/sap/fe/macros/richtexteditor/ButtonGroup.ts +2 -2
- package/src/sap/fe/macros/table/Action.js +15 -2
- package/src/sap/fe/macros/table/Action.ts +11 -1
- 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/MdcTableTemplate.js +91 -10
- package/src/sap/fe/macros/table/MdcTableTemplate.tsx +131 -10
- 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 +70 -29
- package/src/sap/fe/macros/table/Table.block.tsx +65 -12
- package/src/sap/fe/macros/table/TableAPI.js +169 -131
- package/src/sap/fe/macros/table/TableAPI.ts +58 -28
- package/src/sap/fe/macros/table/TableDefinition.js +19 -2
- package/src/sap/fe/macros/table/TableDefinition.ts +17 -1
- package/src/sap/fe/macros/table/TableEventHandlerProvider.js +4 -3
- package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +8 -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 +2 -2
- package/src/sap/fe/macros/table/TableRuntime.ts +4 -6
- 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/delegates/TableDelegate.js +67 -26
- package/src/sap/fe/macros/table/delegates/TableDelegate.ts +108 -118
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +2 -2
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +1 -1
- 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/EmptyRowsHandler.js +6 -5
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +10 -4
- 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/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/fe/base/BindingToolkit", "sap/fe/core/CommonUtils", "sap/fe/core/converters/controls/Common/Action", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers/MetaModelFunction", "sap/fe/core/helpers/ModelHelper", "sap/fe/macros/filterBar/DefaultSemanticDateOperators", "sap/fe/macros/filterBar/ExtendedSemanticDateOperators", "sap/fe/macros/filterBar/SemanticDateOperators", "sap/m/library", "sap/ui/Device", "sap/ui/mdc/condition/FilterOperatorUtil", "sap/ui/mdc/enums/FieldEditMode", "sap/ui/mdc/odata/v4/TypeMap", "sap/ui/model/Context", "sap/ui/model/odata/v4/AnnotationHelper"], function (Log, BindingToolkit, CommonUtils, Action, MetaModelConverter, MetaModelFunction, ModelHelper, DefaultSemanticDateOperators, ExtendedSemanticDateOperators, SemanticDateOperators, mLibrary, Device, FilterOperatorUtil, FieldEditMode, TypeMap, Context, ODataModelAnnotationHelper) {
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/CommonUtils", "sap/fe/core/converters/controls/Common/Action", "sap/fe/core/converters/controls/Common/filter/FilterRestrictions", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers/MetaModelFunction", "sap/fe/core/helpers/ModelHelper", "sap/fe/macros/filterBar/DefaultSemanticDateOperators", "sap/fe/macros/filterBar/ExtendedSemanticDateOperators", "sap/fe/macros/filterBar/SemanticDateOperators", "sap/m/library", "sap/ui/Device", "sap/ui/mdc/condition/FilterOperatorUtil", "sap/ui/mdc/enums/FieldEditMode", "sap/ui/mdc/odata/v4/TypeMap", "sap/ui/model/Context", "sap/ui/model/odata/v4/AnnotationHelper"], function (Log, BindingToolkit, CommonUtils, Action, FilterRestrictions, MetaModelConverter, MetaModelFunction, ModelHelper, DefaultSemanticDateOperators, ExtendedSemanticDateOperators, SemanticDateOperators, mLibrary, Device, FilterOperatorUtil, FieldEditMode, TypeMap, Context, ODataModelAnnotationHelper) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var isPropertyFilterable = MetaModelFunction.isPropertyFilterable;
|
|
@@ -44,24 +44,20 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
|
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
/**
|
|
47
|
-
* Helper function to get Empty
|
|
47
|
+
* Helper function to get Empty operators with manifest configuration support.
|
|
48
48
|
* @param sType The field type
|
|
49
49
|
* @param oSettings The settings object containing operator configuration
|
|
50
|
+
* @param bSemanticDateRange Flag indicating if semantic date range is used
|
|
50
51
|
* @returns Array of Empty/NotEmpty operators if not excluded by manifest
|
|
51
52
|
*/
|
|
52
|
-
function _getEmptyOps(sType, oSettings) {
|
|
53
|
-
// Only return Empty
|
|
54
|
-
if (sType !== "Edm.Date" && sType !== "Edm.DateTimeOffset") {
|
|
53
|
+
function _getEmptyOps(sType, oSettings, bSemanticDateRange) {
|
|
54
|
+
// Only return Empty for date types
|
|
55
|
+
if (sType !== "Edm.Date" && sType !== "Edm.DateTimeOffset" || !bSemanticDateRange) {
|
|
55
56
|
return [];
|
|
56
57
|
}
|
|
57
58
|
const result = [];
|
|
58
|
-
|
|
59
|
-
// Check manifest configuration and add operators in correct order (NotEmpty first to match test expectations)
|
|
60
|
-
const notEmptyExcluded = _isOperatorExcludedByManifest("NotEmpty", oSettings);
|
|
59
|
+
// Check manifest configuration and add operators
|
|
61
60
|
const emptyExcluded = _isOperatorExcludedByManifest("Empty", oSettings);
|
|
62
|
-
if (!notEmptyExcluded) {
|
|
63
|
-
result.push("NotEmpty");
|
|
64
|
-
}
|
|
65
61
|
if (!emptyExcluded) {
|
|
66
62
|
result.push("Empty");
|
|
67
63
|
}
|
|
@@ -774,7 +770,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
|
|
|
774
770
|
* @returns An array of strings representing operators for filtering
|
|
775
771
|
*/
|
|
776
772
|
getOperatorsForProperty: function (sProperty, sEntitySetPath, oContext, sType, bUseSemanticDateRange, settings) {
|
|
777
|
-
const
|
|
773
|
+
const dataModel = MetaModelConverter.getInvolvedDataModelObjects(oContext.getContext(sEntitySetPath));
|
|
774
|
+
const oFilterRestrictions = FilterRestrictions.getFilterRestrictionsByDataModel(dataModel);
|
|
778
775
|
const aEqualsOps = ["EQ"];
|
|
779
776
|
const aSingleRangeOps = ["EQ", "GE", "LE", "LT", "GT", "BT", "NE", "NOTBT", "NOTLE", "NOTLT", "NOTGE", "NOTGT"];
|
|
780
777
|
const aSingleRangeDTBasicOps = ["EQ", "BT"];
|
|
@@ -785,8 +782,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
|
|
|
785
782
|
let aSemanticDateOps = [];
|
|
786
783
|
const oSettings = settings && typeof settings === "string" ? JSON.parse(settings).customData : settings;
|
|
787
784
|
|
|
788
|
-
// Initialize Empty
|
|
789
|
-
const emptyOps = _getEmptyOps(sType || "", oSettings);
|
|
785
|
+
// Initialize Empty operators based on field type and manifest settings
|
|
786
|
+
const emptyOps = _getEmptyOps(sType || "", oSettings, bSemanticDateRange);
|
|
790
787
|
if (oContext.getObject(`${sEntitySetPath}/@com.sap.vocabularies.Common.v1.ResultContext`) === true) {
|
|
791
788
|
return aEqualsOps;
|
|
792
789
|
}
|
|
@@ -815,14 +812,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
|
|
|
815
812
|
switch (sAllowedExpression) {
|
|
816
813
|
case "SingleValue":
|
|
817
814
|
const singleValueDateOps = DefaultSemanticDateOperators.getSingleValueDateOperations();
|
|
818
|
-
|
|
819
|
-
if (sType === "Edm.Date" && bSemanticDateRange) {
|
|
820
|
-
aSingleValueOps = [...singleValueDateOps, ...emptyOps];
|
|
821
|
-
} else if (sType === "Edm.Date" || sType === "Edm.DateTimeOffset") {
|
|
822
|
-
aSingleValueOps = [...aEqualsOps, ...emptyOps]; // ["EQ", "Empty", "NotEmpty"]
|
|
823
|
-
} else {
|
|
824
|
-
aSingleValueOps = aEqualsOps; // ["EQ"]
|
|
825
|
-
}
|
|
815
|
+
const aSingleValueOps = sType === "Edm.Date" && bSemanticDateRange ? singleValueDateOps : aEqualsOps;
|
|
826
816
|
restrictions = _getRestrictions(supportedOperators, aSingleValueOps);
|
|
827
817
|
break;
|
|
828
818
|
case "MultiValue":
|
|
@@ -865,7 +855,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
|
|
|
865
855
|
// In case AllowedExpressions is not provided for type Edm.Date then all the default
|
|
866
856
|
// operators for the type should be returned excluding semantic operators from the list.
|
|
867
857
|
const aDefaultOperators = _getDefaultOperators(propertyType);
|
|
868
|
-
const aMultiRangeOps = ["EQ", "GE", "LE", "LT", "GT", "BT", "NE", "NOTBT", "NOTLE", "NOTLT", "NOTGE", "NOTGT", "Empty"
|
|
858
|
+
const aMultiRangeOps = ["EQ", "GE", "LE", "LT", "GT", "BT", "NE", "NOTBT", "NOTLE", "NOTLT", "NOTGE", "NOTGT", "Empty"];
|
|
869
859
|
return _getRestrictions(aDefaultOperators, aMultiRangeOps);
|
|
870
860
|
},
|
|
871
861
|
getAIIcon: function () {
|
|
@@ -875,4 +865,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
|
|
|
875
865
|
CommonHelper.getSortConditions.requiresIContext = true;
|
|
876
866
|
return CommonHelper;
|
|
877
867
|
}, false);
|
|
878
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZ2V0UmVzdHJpY3Rpb25zIiwiYURlZmF1bHRPcHMiLCJhRXhwcmVzc2lvbk9wcyIsImZpbHRlciIsInNFbGVtZW50IiwiaW5jbHVkZXMiLCJfZ2V0RGVmYXVsdE9wZXJhdG9ycyIsInNQcm9wZXJ0eVR5cGUiLCJvRGF0YUNsYXNzIiwiVHlwZU1hcCIsImdldERhdGFUeXBlQ2xhc3NOYW1lIiwib0Jhc2VUeXBlIiwiZ2V0QmFzZVR5cGUiLCJGaWx0ZXJPcGVyYXRvclV0aWwiLCJnZXRPcGVyYXRvcnNGb3JUeXBlIiwiX2lzT3BlcmF0b3JFeGNsdWRlZEJ5TWFuaWZlc3QiLCJvcGVyYXRvck5hbWUiLCJvU2V0dGluZ3MiLCJvcGVyYXRvckNvbmZpZ3VyYXRpb24iLCJzb21lIiwiY29uZmlnIiwicGF0aCIsImVxdWFscyIsImV4Y2x1ZGUiLCJfZ2V0RW1wdHlPcHMiLCJzVHlwZSIsInJlc3VsdCIsIm5vdEVtcHR5RXhjbHVkZWQiLCJlbXB0eUV4Y2x1ZGVkIiwicHVzaCIsIlZhbHVlQ29sb3IiLCJtTGlicmFyeSIsIkNvbW1vbkhlbHBlciIsImdldFBhdGhUb0tleSIsIm9DdHgiLCJnZXRPYmplY3QiLCJnZXRQYXJhbWV0ZXJFZGl0TW9kZSIsInRhcmdldCIsIm9JbnRlcmZhY2UiLCJvTW9kZWwiLCJjb250ZXh0IiwiZ2V0TW9kZWwiLCJzUHJvcGVydHlQYXRoIiwiZ2V0UGF0aCIsIm9Bbm5vdGF0aW9ucyIsImZpZWxkQ29udHJvbCIsImltbXV0YWJsZSIsImNvbXB1dGVkIiwic0VkaXRNb2RlIiwiRmllbGRFZGl0TW9kZSIsIkVkaXRhYmxlIiwiUmVhZE9ubHkiLCIkRW51bU1lbWJlciIsIkRpc2FibGVkIiwiJFBhdGgiLCJnZXRNZXRhUGF0aCIsInVuZGVmaW5lZCIsImdldE1ldGFNb2RlbElkIiwiY29udmVydFR5cGVzIiwiZ2V0SWQiLCJpc0Rlc2t0b3AiLCJEZXZpY2UiLCJzeXN0ZW0iLCJkZXNrdG9wIiwiZ2V0VGFyZ2V0Q29sbGVjdGlvblBhdGgiLCJuYXZDb2xsZWN0aW9uIiwic1BhdGgiLCJtb2RlbCIsIm1ldGFNb2RlbCIsImlzQSIsImdldE1ldGFNb2RlbCIsImFQYXJ0cyIsInNwbGl0Iiwic1BhcnQiLCJlbnRpdHlTZXQiLCJsZW5ndGgiLCJuYXZpZ2F0aW9uQ29sbGVjdGlvbiIsInNsaWNlIiwiam9pbiIsImlzUHJvcGVydHlGaWx0ZXJhYmxlIiwib0RhdGFGaWVsZCIsInNraXBIaWRkZW5GaWx0ZXJzIiwic1Byb3BlcnR5TG9jYXRpb25QYXRoIiwiZ2V0TG9jYXRpb25Gb3JQcm9wZXJ0eVBhdGgiLCJzUHJvcGVydHkiLCJyZXBsYWNlIiwiJFR5cGUiLCJpTGVuZ3RoIiwic0NvbGxlY3Rpb25QYXRoIiwibGFzdEluZGV4T2YiLCJpbmRleE9mIiwiZ290b0FjdGlvblBhcmFtZXRlciIsIm9Db250ZXh0Iiwic1Byb3BlcnR5TmFtZSIsIkNvbW1vblV0aWxzIiwiZ2V0UGFyYW1ldGVyUGF0aCIsImdldEVudGl0eVNldE5hbWUiLCJvTWV0YU1vZGVsIiwic0VudGl0eVR5cGUiLCJvRW50aXR5Q29udGFpbmVyIiwia2V5IiwiZ2V0QWN0aW9uUGF0aCIsIm9BY3Rpb24iLCJiUmV0dXJuT25seVBhdGgiLCJzQWN0aW9uTmFtZSIsImJDaGVja1N0YXRpY1ZhbHVlIiwic0NvbnRleHRQYXRoIiwic0VudGl0eVR5cGVOYW1lIiwic0VudGl0eU5hbWUiLCJzQmluZGluZ1BhcmFtZXRlciIsImdldE5hdmlnYXRpb25Db250ZXh0IiwiT0RhdGFNb2RlbEFubm90YXRpb25IZWxwZXIiLCJnZXROYXZpZ2F0aW9uUGF0aCIsImJLZWVwUHJvcGVydHkiLCJiU3RhcnRzV2l0aEVudGl0eVR5cGUiLCJzdGFydHNXaXRoIiwicGFydCIsInNoaWZ0IiwicG9wIiwiZ2V0QWN0aW9uQ29udGV4dCIsImdldFBhdGhUb0JvdW5kQWN0aW9uT3ZlcmxvYWQiLCJhZGRTaW5nbGVRdW90ZXMiLCJzVmFsdWUiLCJiRXNjYXBlIiwiZXNjYXBlU2luZ2xlUXVvdGVzIiwiZ2VuZXJhdGVGdW5jdGlvbiIsInNGdW5jTmFtZSIsInNQYXJhbXMiLCJpIiwiYXJndW1lbnRzIiwic0Z1bmN0aW9uIiwiZ2V0SGVhZGVyRGF0YVBvaW50TGlua1Zpc2liaWxpdHkiLCJpc0NsaWNrYWJsZSIsImNvbXBpbGVFeHByZXNzaW9uIiwiaWZFbHNlIiwiY29uc3RhbnQiLCJlcXVhbCIsInBhdGhJbk1vZGVsIiwibm90RXF1YWwiLCJvYmplY3RUb1N0cmluZyIsIm9QYXJhbXMiLCJpTnVtYmVyT2ZLZXlzIiwiT2JqZWN0Iiwia2V5cyIsInNLZXkiLCJyZW1vdmVFc2NhcGVDaGFyYWN0ZXJzIiwic0V4cHJlc3Npb24iLCJzdHJpbmdpZnlPYmplY3QiLCJzU3RyaW5naWZpZWQiLCJvT2JqZWN0IiwiSlNPTiIsInBhcnNlIiwiQXJyYXkiLCJpc0FycmF5Iiwib1VJNU9iamVjdCIsInVpNW9iamVjdCIsImFzc2lnbiIsInN0cmluZ2lmeSIsIkxvZyIsImVycm9yIiwiRXJyb3IiLCJzdHJpbmdpZnlDdXN0b21EYXRhIiwidkRhdGEiLCJDb250ZXh0IiwicGFyc2VDdXN0b21EYXRhIiwiaGFzT3duUHJvcGVydHkiLCJnZXRDb250ZXh0UGF0aCIsIm9WYWx1ZSIsImdldFNvcnRDb25kaXRpb25zIiwib1ByZXNlbnRhdGlvblZhcmlhbnQiLCJzUHJlc2VudGF0aW9uVmFyaWFudFBhdGgiLCJfaXNQcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiIsIlNvcnRPcmRlciIsImFTb3J0Q29uZGl0aW9ucyIsInNvcnRlcnMiLCJzRW50aXR5UGF0aCIsImZvckVhY2giLCJvQ29uZGl0aW9uIiwib1NvcnRQcm9wZXJ0eSIsIm9Tb3J0ZXIiLCJEeW5hbWljUHJvcGVydHkiLCIkQW5ub3RhdGlvblBhdGgiLCJOYW1lIiwiUHJvcGVydHkiLCIkUHJvcGVydHlQYXRoIiwibmFtZSIsImRlc2NlbmRpbmciLCJEZXNjZW5kaW5nIiwiYW5ub3RhdGlvblBhdGgiLCJjcmVhdGVQcmVzZW50YXRpb25QYXRoQ29udGV4dCIsIm9QcmVzZW50YXRpb25Db250ZXh0IiwiYVBhdGhzIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJnZXRQcmVzc0hhbmRsZXJGb3JEYXRhRmllbGRGb3JJQk4iLCJzQ29udGV4dCIsImJOYXZpZ2F0ZVdpdGhDb25maXJtYXRpb25EaWFsb2ciLCJmb3JDb250ZXh0TWVudSIsIm1OYXZpZ2F0aW9uUGFyYW1ldGVycyIsIm5hdmlnYXRpb25Db250ZXh0cyIsIlJlcXVpcmVzQ29udGV4dCIsIklubGluZSIsImFwcGxpY2FibGVQcm9wZXJ0eSIsIm5vdEFwcGxpY2FibGVQcm9wZXJ0eSIsImFwcGxpY2FibGVDb250ZXh0cyIsIlNlbWFudGljT2JqZWN0IiwiQWN0aW9uIiwibm90QXBwbGljYWJsZUNvbnRleHRzIiwibGFiZWwiLCJMYWJlbCIsIk1hcHBpbmciLCJzZW1hbnRpY09iamVjdE1hcHBpbmciLCJnZXRFbnRpdHlTZXQiLCJNb2RlbEhlbHBlciIsImdldEVudGl0eVNldFBhdGgiLCJnZXRDcml0aWNhbGl0eUNhbGN1bGF0aW9uQmluZGluZyIsInNJbXByb3ZlbWVudERpcmVjdGlvbiIsInNEZXZpYXRpb25Mb3ciLCJzVG9sZXJhbmNlTG93Iiwic0FjY2VwdGFuY2VMb3ciLCJzQWNjZXB0YW5jZUhpZ2giLCJzVG9sZXJhbmNlSGlnaCIsInNEZXZpYXRpb25IaWdoIiwic0NyaXRpY2FsaXR5RXhwcmVzc2lvbiIsIk5ldXRyYWwiLCJJbmZpbml0eSIsIkdvb2QiLCJDcml0aWNhbCIsIndhcm5pbmciLCJnZXRNZWFzdXJlQXR0cmlidXRlSW5kZXgiLCJpTWVhc3VyZSIsIm9DaGFydEFubm90YXRpb25zIiwiaXNNaWNyb0NoYXJ0IiwiYU1lYXN1cmVzIiwic01lYXN1cmVQcm9wZXJ0eVBhdGgiLCJNZWFzdXJlcyIsInZhbHVlIiwiRHluYW1pY01lYXN1cmVzIiwiYk1lYXN1cmVBdHRyaWJ1dGVFeGlzdHMiLCJhTWVhc3VyZUF0dHJpYnV0ZXMiLCJNZWFzdXJlQXR0cmlidXRlcyIsImlNZWFzdXJlQXR0cmlidXRlIiwiZm5DaGVja01lYXN1cmUiLCJzTWVhc3VyZVBhdGgiLCJvTWVhc3VyZUF0dHJpYnV0ZSIsImluZGV4IiwiTWVhc3VyZSIsIkR5bmFtaWNNZWFzdXJlIiwiYmluZCIsImdldE1lYXN1cmVBdHRyaWJ1dGUiLCJzQ2hhcnRBbm5vdGF0aW9uUGF0aCIsInJlcXVlc3RPYmplY3QiLCJ0aGVuIiwic01lYXN1cmVBdHRyaWJ1dGVQYXRoIiwiRGF0YVBvaW50IiwiZ2V0TWVhc3VyZUF0dHJpYnV0ZUZvck1lYXN1cmUiLCJzdWJzdHJpbmciLCJpc0RyYWZ0UGFyZW50RW50aXR5Rm9yQ29udGFpbm1lbnQiLCJvVGFyZ2V0Q29sbGVjdGlvbkNvbnRhaW5zVGFyZ2V0Iiwib1RhYmxlTWV0YWRhdGEiLCJwYXJlbnRFbnRpdHlTZXQiLCJzUGFyZW50RW50aXR5U2V0UGF0aCIsIm9EcmFmdFJvb3QiLCJvRHJhZnROb2RlIiwiZ2V0RGF0YUZyb21UZW1wbGF0ZSIsImRhdGFFbGVtZW50Iiwic3BsaXRQYXRoIiwiZGF0YUtleSIsImNvbm5lY3RlZERhdGFQYXRoIiwiY29ubmVjdGVkT2JqZWN0IiwidGVtcGxhdGUiLCJUZW1wbGF0ZSIsInNwbGl0VGVtcCIsInRlbXBBcnJheSIsInRyaW0iLCJEYXRhIiwibm90TGFzdEluZGV4IiwiZWxlbWVudCIsImlzTGFzdEluZGV4IiwidGVtcGxhdGVJbmZvIiwibGFzdEluZGV4IiwiZ2V0RGVsaW1pdGVyIiwic2V0TWV0YU1vZGVsIiwiZ2V0UGFyYW1ldGVycyIsIm9QYXJhbWV0ZXJJbmZvIiwiZ2V0UGFyYW1ldGVySW5mbyIsInBhcmFtZXRlclByb3BlcnRpZXMiLCJidWlsZEFjdGlvbldyYXBwZXIiLCJvVGhpcyIsImFQYXJhbXMiLCJyZWYiLCJoYW5kbGVyTW9kdWxlIiwiaGFuZGxlck1ldGhvZCIsImlkIiwiaW50ZXJuYWxNb2RlbFBhdGgiLCJvQWRkaXRpb25hbFBhcmFtcyIsImNvbnRleHRzIiwiZm4iLCJnZXRIaWRkZW5QYXRoRXhwcmVzc2lvbiIsImRhdGFGaWVsZEFubm90YXRpb25zIiwiaGlkZGVuIiwiZ2V0T3BlcmF0b3JzRm9yUHJvcGVydHkiLCJzRW50aXR5U2V0UGF0aCIsImJVc2VTZW1hbnRpY0RhdGVSYW5nZSIsInNldHRpbmdzIiwib0ZpbHRlclJlc3RyaWN0aW9ucyIsImdldEZpbHRlclJlc3RyaWN0aW9uc0J5UGF0aCIsImFFcXVhbHNPcHMiLCJhU2luZ2xlUmFuZ2VPcHMiLCJhU2luZ2xlUmFuZ2VEVEJhc2ljT3BzIiwiYU11bHRpUmFuZ2VPcHMiLCJhU2VhcmNoRXhwcmVzc2lvbk9wcyIsImFCYXNpY1NlbWFudGljRGF0ZU9wcyIsIlNlbWFudGljRGF0ZU9wZXJhdG9ycyIsImdldEJhc2ljU2VtYW50aWNEYXRlT3BlcmF0aW9ucyIsImJTZW1hbnRpY0RhdGVSYW5nZSIsImFTZW1hbnRpY0RhdGVPcHMiLCJjdXN0b21EYXRhIiwiZW1wdHlPcHMiLCJnZXRGaWx0ZXJPcGVyYXRpb25zIiwiRGVmYXVsdFNlbWFudGljRGF0ZU9wZXJhdG9ycyIsImdldFNlbWFudGljRGF0ZU9wZXJhdGlvbnMiLCJhRGVmYXVsdE9wZXJhdG9ycyIsInN1cHBvcnRlZE9wZXJhdG9ycyIsImV4dGVuZGVkU2VtYW50aWNEYXRlT3BlcmF0b3JzIiwiRXh0ZW5kZWRTZW1hbnRpY0RhdGVPcGVyYXRvcnMiLCJyZXN0cmljdGlvbnMiLCJGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMiLCJzQWxsb3dlZEV4cHJlc3Npb24iLCJnZXRTcGVjaWZpY0FsbG93ZWRFeHByZXNzaW9uIiwic2luZ2xlVmFsdWVEYXRlT3BzIiwiZ2V0U2luZ2xlVmFsdWVEYXRlT3BlcmF0aW9ucyIsImFTaW5nbGVWYWx1ZU9wcyIsIm11bHRpVmFsdWVPcGVyYXRvcnMiLCJtdWx0aVJhbmdlT3BzIiwiY29uY2F0IiwiZ2V0T3BlcmF0b3JzRm9yRGF0ZVByb3BlcnR5IiwicHJvcGVydHlUeXBlIiwiZ2V0QUlJY29uIiwiYWlJY29uIiwicmVxdWlyZXNJQ29udGV4dCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQ29tbW9uSGVscGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcblx0Q2hhcnQsXG5cdENoYXJ0TWVhc3VyZUF0dHJpYnV0ZVR5cGUsXG5cdERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0RGF0YUZpZWxkVHlwZXMsXG5cdFByZXNlbnRhdGlvblZhcmlhbnRcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uLCBjb25zdGFudCwgZXF1YWwsIGZuLCBpZkVsc2UsIG5vdEVxdWFsLCBwYXRoSW5Nb2RlbCwgcmVmIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlclNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuXG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5UGF0aCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHsgYWlJY29uLCB0eXBlIEN1c3RvbUFjdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7IGNvbnZlcnRUeXBlcyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgaXNQcm9wZXJ0eUZpbHRlcmFibGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXRhTW9kZWxGdW5jdGlvblwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0ICogYXMgRGVmYXVsdFNlbWFudGljRGF0ZU9wZXJhdG9ycyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXJCYXIvRGVmYXVsdFNlbWFudGljRGF0ZU9wZXJhdG9yc1wiO1xuaW1wb3J0IEV4dGVuZGVkU2VtYW50aWNEYXRlT3BlcmF0b3JzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlckJhci9FeHRlbmRlZFNlbWFudGljRGF0ZU9wZXJhdG9yc1wiO1xuaW1wb3J0IFNlbWFudGljRGF0ZU9wZXJhdG9ycyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXJCYXIvU2VtYW50aWNEYXRlT3BlcmF0b3JzXCI7XG5pbXBvcnQgbUxpYnJhcnkgZnJvbSBcInNhcC9tL2xpYnJhcnlcIjtcbmltcG9ydCBEZXZpY2UgZnJvbSBcInNhcC91aS9EZXZpY2VcIjtcbmltcG9ydCBGaWx0ZXJPcGVyYXRvclV0aWwgZnJvbSBcInNhcC91aS9tZGMvY29uZGl0aW9uL0ZpbHRlck9wZXJhdG9yVXRpbFwiO1xuaW1wb3J0IEZpZWxkRWRpdE1vZGUgZnJvbSBcInNhcC91aS9tZGMvZW51bXMvRmllbGRFZGl0TW9kZVwiO1xuaW1wb3J0IFR5cGVNYXAgZnJvbSBcInNhcC91aS9tZGMvb2RhdGEvdjQvVHlwZU1hcFwiO1xuaW1wb3J0IENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgT0RhdGFNb2RlbEFubm90YXRpb25IZWxwZXIgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Bbm5vdGF0aW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBNZXRhTW9kZWxUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uL3R5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuXG50eXBlIE1ldGFNb2RlbE1lYXN1cmUgPSB7XG5cdCRQcm9wZXJ0eVBhdGg6IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIF9nZXRSZXN0cmljdGlvbnMoYURlZmF1bHRPcHM6IHN0cmluZ1tdLCBhRXhwcmVzc2lvbk9wczogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG5cdC8vIEZyb20gdGhlIGRlZmF1bHQgc2V0IG9mIE9wZXJhdG9ycyBmb3IgdGhlIEJhc2UgVHlwZSwgc2VsZWN0IHRob3NlIHRoYXQgYXJlIGRlZmluZWQgaW4gdGhlIEFsbG93ZWQgVmFsdWUuXG5cdC8vIEluIGNhc2UgdGhhdCBubyBvcGVyYXRvcnMgYXJlIGZvdW5kLCByZXR1cm4gdW5kZWZpbmVkIHNvIHRoYXQgdGhlIGRlZmF1bHQgc2V0IGlzIHVzZWQuXG5cdHJldHVybiBhRGVmYXVsdE9wcy5maWx0ZXIoZnVuY3Rpb24gKHNFbGVtZW50KSB7XG5cdFx0cmV0dXJuIGFFeHByZXNzaW9uT3BzLmluY2x1ZGVzKHNFbGVtZW50KTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIF9nZXREZWZhdWx0T3BlcmF0b3JzKHNQcm9wZXJ0eVR5cGU/OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG5cdC8vIG1kYyBkZWZpbmVzIHRoZSBmdWxsIHNldCBvZiBvcGVyYXRpb25zIHRoYXQgYXJlIG1lYW5pbmdmdWwgZm9yIGVhY2ggRWRtIFR5cGVcblx0Ly8gVE9ETyBSZXBsYWNlIHdpdGggbW9kZWwgLyBpbnRlcm5hbCB3YXkgb2YgcmV0cmlldmluZyB0aGUgYWN0dWFsIG1vZGVsIHR5cGUgdXNlZCBmb3IgdGhlIHByb3BlcnR5XG5cdGNvbnN0IG9EYXRhQ2xhc3MgPSBUeXBlTWFwLmdldERhdGFUeXBlQ2xhc3NOYW1lKHNQcm9wZXJ0eVR5cGUpO1xuXHQvLyBUT0RPIG5lZWQgdG8gcGFzcyBwcm9wZXIgZm9ybWF0T3B0aW9ucywgY29uc3RyYWludHMgaGVyZVxuXHRjb25zdCBvQmFzZVR5cGUgPSBUeXBlTWFwLmdldEJhc2VUeXBlKG9EYXRhQ2xhc3MsIHt9LCB7fSk7XG5cdHJldHVybiBGaWx0ZXJPcGVyYXRvclV0aWwuZ2V0T3BlcmF0b3JzRm9yVHlwZShvQmFzZVR5cGUpO1xufVxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpZiBhbiBvcGVyYXRvciBpcyBleGNsdWRlZCBieSBtYW5pZmVzdCBjb25maWd1cmF0aW9uLlxuICogQHBhcmFtIG9wZXJhdG9yTmFtZSBUaGUgb3BlcmF0b3IgbmFtZSB0byBjaGVja1xuICogQHBhcmFtIG9TZXR0aW5ncyBUaGUgc2V0dGluZ3Mgb2JqZWN0IGNvbnRhaW5pbmcgb3BlcmF0b3IgY29uZmlndXJhdGlvblxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgb3BlcmF0b3IgaXMgZXhjbHVkZWQsIGZhbHNlIG90aGVyd2lzZVxuICovXG5mdW5jdGlvbiBfaXNPcGVyYXRvckV4Y2x1ZGVkQnlNYW5pZmVzdChvcGVyYXRvck5hbWU6IHN0cmluZywgb1NldHRpbmdzOiBGaWx0ZXJTZXR0aW5ncyB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuXHRpZiAoIW9TZXR0aW5ncz8ub3BlcmF0b3JDb25maWd1cmF0aW9uKSByZXR1cm4gZmFsc2U7XG5cblx0cmV0dXJuIG9TZXR0aW5ncy5vcGVyYXRvckNvbmZpZ3VyYXRpb24uc29tZShcblx0XHQoY29uZmlnKSA9PiBjb25maWcucGF0aCA9PT0gXCJrZXlcIiAmJiBjb25maWcuZXF1YWxzID09PSBvcGVyYXRvck5hbWUgJiYgY29uZmlnLmV4Y2x1ZGUgPT09IHRydWVcblx0KTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IEVtcHR5L05vdEVtcHR5IG9wZXJhdG9ycyB3aXRoIG1hbmlmZXN0IGNvbmZpZ3VyYXRpb24gc3VwcG9ydC5cbiAqIEBwYXJhbSBzVHlwZSBUaGUgZmllbGQgdHlwZVxuICogQHBhcmFtIG9TZXR0aW5ncyBUaGUgc2V0dGluZ3Mgb2JqZWN0IGNvbnRhaW5pbmcgb3BlcmF0b3IgY29uZmlndXJhdGlvblxuICogQHJldHVybnMgQXJyYXkgb2YgRW1wdHkvTm90RW1wdHkgb3BlcmF0b3JzIGlmIG5vdCBleGNsdWRlZCBieSBtYW5pZmVzdFxuICovXG5mdW5jdGlvbiBfZ2V0RW1wdHlPcHMoc1R5cGU6IHN0cmluZywgb1NldHRpbmdzOiBGaWx0ZXJTZXR0aW5ncyB8IHVuZGVmaW5lZCk6IHN0cmluZ1tdIHtcblx0Ly8gT25seSByZXR1cm4gRW1wdHkvTm90RW1wdHkgZm9yIGRhdGUgdHlwZXNcblx0aWYgKHNUeXBlICE9PSBcIkVkbS5EYXRlXCIgJiYgc1R5cGUgIT09IFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCIpIHtcblx0XHRyZXR1cm4gW107XG5cdH1cblxuXHRjb25zdCByZXN1bHQ6IHN0cmluZ1tdID0gW107XG5cblx0Ly8gQ2hlY2sgbWFuaWZlc3QgY29uZmlndXJhdGlvbiBhbmQgYWRkIG9wZXJhdG9ycyBpbiBjb3JyZWN0IG9yZGVyIChOb3RFbXB0eSBmaXJzdCB0byBtYXRjaCB0ZXN0IGV4cGVjdGF0aW9ucylcblx0Y29uc3Qgbm90RW1wdHlFeGNsdWRlZCA9IF9pc09wZXJhdG9yRXhjbHVkZWRCeU1hbmlmZXN0KFwiTm90RW1wdHlcIiwgb1NldHRpbmdzKTtcblx0Y29uc3QgZW1wdHlFeGNsdWRlZCA9IF9pc09wZXJhdG9yRXhjbHVkZWRCeU1hbmlmZXN0KFwiRW1wdHlcIiwgb1NldHRpbmdzKTtcblxuXHRpZiAoIW5vdEVtcHR5RXhjbHVkZWQpIHtcblx0XHRyZXN1bHQucHVzaChcIk5vdEVtcHR5XCIpO1xuXHR9XG5cdGlmICghZW1wdHlFeGNsdWRlZCkge1xuXHRcdHJlc3VsdC5wdXNoKFwiRW1wdHlcIik7XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG5jb25zdCBWYWx1ZUNvbG9yID0gbUxpYnJhcnkuVmFsdWVDb2xvcjtcbmNvbnN0IENvbW1vbkhlbHBlciA9IHtcblx0Z2V0UGF0aFRvS2V5OiBmdW5jdGlvbiAob0N0eDogQ29udGV4dCk6IG9iamVjdCB7XG5cdFx0cmV0dXJuIG9DdHguZ2V0T2JqZWN0KCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIERldGVybWluZSBpZiBmaWVsZCBpcyBlZGl0YWJsZS5cblx0ICogQHBhcmFtIHRhcmdldCBUYXJnZXQgaW5zdGFuY2Vcblx0ICogQHBhcmFtIG9JbnRlcmZhY2UgSW50ZXJmYWNlIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEEgQmluZGluZyBFeHByZXNzaW9uIHRvIGRldGVybWluZSBpZiBhIGZpZWxkIHNob3VsZCBiZSBlZGl0YWJsZSBvciBub3QuXG5cdCAqL1xuXHRnZXRQYXJhbWV0ZXJFZGl0TW9kZTogZnVuY3Rpb24gKHRhcmdldDogb2JqZWN0LCBvSW50ZXJmYWNlOiBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2UpOiBzdHJpbmcge1xuXHRcdGNvbnN0IG9Nb2RlbCA9IG9JbnRlcmZhY2UuY29udGV4dC5nZXRNb2RlbCgpLFxuXHRcdFx0c1Byb3BlcnR5UGF0aCA9IG9JbnRlcmZhY2UuY29udGV4dC5nZXRQYXRoKCksXG5cdFx0XHRvQW5ub3RhdGlvbnMgPSBvTW9kZWwuZ2V0T2JqZWN0KGAke3NQcm9wZXJ0eVBhdGh9QGApLFxuXHRcdFx0ZmllbGRDb250cm9sID0gb0Fubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWVsZENvbnRyb2xcIl0sXG5cdFx0XHRpbW11dGFibGUgPSBvQW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkNvcmUuVjEuSW1tdXRhYmxlXCJdLFxuXHRcdFx0Y29tcHV0ZWQgPSBvQW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkNvcmUuVjEuQ29tcHV0ZWRcIl07XG5cblx0XHRsZXQgc0VkaXRNb2RlOiBGaWVsZEVkaXRNb2RlIHwgc3RyaW5nID0gRmllbGRFZGl0TW9kZS5FZGl0YWJsZTtcblxuXHRcdGlmIChpbW11dGFibGUgfHwgY29tcHV0ZWQpIHtcblx0XHRcdHNFZGl0TW9kZSA9IEZpZWxkRWRpdE1vZGUuUmVhZE9ubHk7XG5cdFx0fSBlbHNlIGlmIChmaWVsZENvbnRyb2wpIHtcblx0XHRcdGlmIChmaWVsZENvbnRyb2wuJEVudW1NZW1iZXIpIHtcblx0XHRcdFx0aWYgKGZpZWxkQ29udHJvbC4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmllbGRDb250cm9sVHlwZS9SZWFkT25seVwiKSB7XG5cdFx0XHRcdFx0c0VkaXRNb2RlID0gRmllbGRFZGl0TW9kZS5SZWFkT25seTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0ZmllbGRDb250cm9sLiRFbnVtTWVtYmVyID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWVsZENvbnRyb2xUeXBlL0luYXBwbGljYWJsZVwiIHx8XG5cdFx0XHRcdFx0ZmllbGRDb250cm9sLiRFbnVtTWVtYmVyID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWVsZENvbnRyb2xUeXBlL0hpZGRlblwiXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHNFZGl0TW9kZSA9IEZpZWxkRWRpdE1vZGUuRGlzYWJsZWQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChmaWVsZENvbnRyb2wuJFBhdGgpIHtcblx0XHRcdFx0c0VkaXRNb2RlID1cblx0XHRcdFx0XHRcIns9ICV7XCIgK1xuXHRcdFx0XHRcdGZpZWxkQ29udHJvbC4kUGF0aCArXG5cdFx0XHRcdFx0XCJ9IDwgMyA/ICgle1wiICtcblx0XHRcdFx0XHRmaWVsZENvbnRyb2wuJFBhdGggK1xuXHRcdFx0XHRcdFwifSA9PT0gMCA/ICdcIiArXG5cdFx0XHRcdFx0RmllbGRFZGl0TW9kZS5EaXNhYmxlZCArXG5cdFx0XHRcdFx0XCInIDogJ1wiICtcblx0XHRcdFx0XHRGaWVsZEVkaXRNb2RlLlJlYWRPbmx5ICtcblx0XHRcdFx0XHRcIicpIDogJ1wiICtcblx0XHRcdFx0XHRGaWVsZEVkaXRNb2RlLkVkaXRhYmxlICtcblx0XHRcdFx0XHRcIid9XCI7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHNFZGl0TW9kZTtcblx0fSxcblx0LyoqXG5cdCAqIEdldCB0aGUgY29tcGxldGUgbWV0YXBhdGggdG8gdGhlIHRhcmdldC5cblx0ICogQHBhcmFtIHRhcmdldFxuXHQgKiBAcGFyYW0gb0ludGVyZmFjZVxuXHQgKiBAcmV0dXJucyBUaGUgbWV0YXBhdGhcblx0ICovXG5cdGdldE1ldGFQYXRoOiBmdW5jdGlvbiAodGFyZ2V0OiB1bmtub3duLCBvSW50ZXJmYWNlOiBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2UpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiAob0ludGVyZmFjZSAmJiBvSW50ZXJmYWNlLmNvbnRleHQgJiYgb0ludGVyZmFjZS5jb250ZXh0LmdldFBhdGgoKSkgfHwgdW5kZWZpbmVkO1xuXHR9LFxuXHRnZXRNZXRhTW9kZWxJZDogZnVuY3Rpb24gKHRhcmdldDogQ29udGV4dCwgb0ludGVyZmFjZTogQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlKTogc3RyaW5nIHtcblx0XHRjb252ZXJ0VHlwZXMob0ludGVyZmFjZS5jb250ZXh0LmdldE1vZGVsKCkpO1xuXHRcdHJldHVybiBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0TW9kZWwoKS5nZXRJZCgpO1xuXHR9LFxuXHRpc0Rlc2t0b3A6IGZ1bmN0aW9uICgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gRGV2aWNlLnN5c3RlbS5kZXNrdG9wID09PSB0cnVlO1xuXHR9LFxuXHRnZXRUYXJnZXRDb2xsZWN0aW9uUGF0aDogZnVuY3Rpb24gKGNvbnRleHQ6IENvbnRleHQsIG5hdkNvbGxlY3Rpb24/OiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGxldCBzUGF0aCA9IGNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdGlmIChcblx0XHRcdChjb250ZXh0LmdldE9iamVjdChcIiRraW5kXCIpIGFzIHVua25vd24gYXMgc3RyaW5nKSA9PT0gXCJFbnRpdHlTZXRcIiB8fFxuXHRcdFx0KGNvbnRleHQuZ2V0T2JqZWN0KFwiJENvbnRhaW5zVGFyZ2V0XCIpIGFzIHVua25vd24gYXMgYm9vbGVhbikgPT09IHRydWVcblx0XHQpIHtcblx0XHRcdHJldHVybiBzUGF0aDtcblx0XHR9XG5cblx0XHRjb25zdCBtb2RlbCA9IGNvbnRleHQuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsIHwgT0RhdGFNZXRhTW9kZWw7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gbW9kZWwuaXNBPE9EYXRhTWV0YU1vZGVsPihcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YU1ldGFNb2RlbFwiKSA/IG1vZGVsIDogbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0c1BhdGggPSBtZXRhTW9kZWwuZ2V0TWV0YVBhdGgoc1BhdGgpO1xuXG5cdFx0Ly9TdXBwb3J0aW5nIHNQYXRoIG9mIGFueSBmb3JtYXQsIGVpdGhlciAnLzxlbnRpdHlTZXQ+LzxuYXZpZ2F0aW9uQ29sbGVjdGlvbj4nIDxPUj4gJy88ZW50aXR5U2V0Pi8kVHlwZS88bmF2aWdhdGlvbkNvbGxlY3Rpb24+J1xuXHRcdGNvbnN0IGFQYXJ0cyA9IHNQYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoZnVuY3Rpb24gKHNQYXJ0OiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRcdHJldHVybiAhIXNQYXJ0ICYmIHNQYXJ0ICE9IFwiJFR5cGVcIjtcblx0XHR9KTsgLy9maWx0ZXIgb3V0IGVtcHR5IHN0cmluZ3MgYW5kIHBhcnRzIHJlZmVycmluZyB0byAnJFR5cGUnXG5cdFx0Y29uc3QgZW50aXR5U2V0ID0gYC8ke2FQYXJ0c1swXX1gO1xuXHRcdGlmIChhUGFydHMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRyZXR1cm4gZW50aXR5U2V0O1xuXHRcdH1cblx0XHRjb25zdCBuYXZpZ2F0aW9uQ29sbGVjdGlvbiA9IG5hdkNvbGxlY3Rpb24gPT09IHVuZGVmaW5lZCA/IGFQYXJ0cy5zbGljZSgxKS5qb2luKFwiLyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nL1wiKSA6IG5hdkNvbGxlY3Rpb247XG5cdFx0cmV0dXJuIGAke2VudGl0eVNldH0vJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcvJHtuYXZpZ2F0aW9uQ29sbGVjdGlvbn1gOyAvLyB1c2VkIGluIGdvdG9UYXJnZXRFbnRpdHlTZXQgbWV0aG9kIGluIHRoZSBzYW1lIGZpbGVcblx0fSxcblxuXHRpc1Byb3BlcnR5RmlsdGVyYWJsZTogZnVuY3Rpb24gKFxuXHRcdGNvbnRleHQ6IENvbnRleHQsXG5cdFx0b0RhdGFGaWVsZD86IE1ldGFNb2RlbFR5cGU8RGF0YUZpZWxkVHlwZXM+LFxuXHRcdHNraXBIaWRkZW5GaWx0ZXJzPzogYm9vbGVhblxuXHQpOiBib29sZWFuIHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRcdGNvbnN0IG9Nb2RlbCA9IGNvbnRleHQuZ2V0TW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCxcblx0XHRcdHNQcm9wZXJ0eVBhdGggPSBjb250ZXh0LmdldFBhdGgoKSxcblx0XHRcdC8vIExvYWNhdGlvblBhdGggd291bGQgYmUgdGhlIHByZWZpeCBvZiBzUHJvcGVydHlQYXRoLCBleGFtcGxlOiBzUHJvcGVydHlQYXRoID0gJy9DdXN0b21lci9TZXQvTmFtZScgLT4gc1Byb3BlcnR5TG9jYXRpb25QYXRoID0gJy9DdXN0b21lci9TZXQnXG5cdFx0XHRzUHJvcGVydHlMb2NhdGlvblBhdGggPSBDb21tb25IZWxwZXIuZ2V0TG9jYXRpb25Gb3JQcm9wZXJ0eVBhdGgob01vZGVsLCBzUHJvcGVydHlQYXRoKSxcblx0XHRcdHNQcm9wZXJ0eSA9IHNQcm9wZXJ0eVBhdGgucmVwbGFjZShgJHtzUHJvcGVydHlMb2NhdGlvblBhdGh9L2AsIFwiXCIpO1xuXG5cdFx0aWYgKFxuXHRcdFx0b0RhdGFGaWVsZCAmJlxuXHRcdFx0KG9EYXRhRmllbGQuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQWN0aW9uXCIgfHxcblx0XHRcdFx0b0RhdGFGaWVsZC4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25cIilcblx0XHQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gaXNQcm9wZXJ0eUZpbHRlcmFibGUob01vZGVsLCBzUHJvcGVydHlMb2NhdGlvblBhdGgsIHNQcm9wZXJ0eSwgc2tpcEhpZGRlbkZpbHRlcnMpO1xuXHR9LFxuXG5cdGdldExvY2F0aW9uRm9yUHJvcGVydHlQYXRoOiBmdW5jdGlvbiAob01vZGVsOiBPRGF0YU1ldGFNb2RlbCwgc1Byb3BlcnR5UGF0aDogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRsZXQgaUxlbmd0aDtcblx0XHRsZXQgc0NvbGxlY3Rpb25QYXRoID0gc1Byb3BlcnR5UGF0aC5zbGljZSgwLCBzUHJvcGVydHlQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSk7XG5cdFx0aWYgKG9Nb2RlbC5nZXRPYmplY3QoYCR7c0NvbGxlY3Rpb25QYXRofS8ka2luZGApID09PSBcIkVudGl0eUNvbnRhaW5lclwiKSB7XG5cdFx0XHRpTGVuZ3RoID0gc0NvbGxlY3Rpb25QYXRoLmxlbmd0aCArIDE7XG5cdFx0XHRzQ29sbGVjdGlvblBhdGggPSBzUHJvcGVydHlQYXRoLnNsaWNlKGlMZW5ndGgsIHNQcm9wZXJ0eVBhdGguaW5kZXhPZihcIi9cIiwgaUxlbmd0aCkpO1xuXHRcdH1cblx0XHRyZXR1cm4gc0NvbGxlY3Rpb25QYXRoO1xuXHR9LFxuXHRnb3RvQWN0aW9uUGFyYW1ldGVyOiBmdW5jdGlvbiAob0NvbnRleHQ6IENvbnRleHQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHNQYXRoID0gb0NvbnRleHQuZ2V0UGF0aCgpLFxuXHRcdFx0c1Byb3BlcnR5TmFtZSA9IG9Db250ZXh0LmdldE9iamVjdChgJHtzUGF0aH0vJE5hbWVgKTtcblxuXHRcdHJldHVybiBDb21tb25VdGlscy5nZXRQYXJhbWV0ZXJQYXRoKHNQYXRoLCBzUHJvcGVydHlOYW1lKTtcblx0fSxcblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGVudGl0eSBzZXQgbmFtZSBmcm9tIHRoZSBlbnRpdHkgdHlwZSBuYW1lLlxuXHQgKiBAcGFyYW0gb01ldGFNb2RlbCBPRGF0YSB2NCBtZXRhbW9kZWwgaW5zdGFuY2Vcblx0ICogQHBhcmFtIHNFbnRpdHlUeXBlIEVudGl0eVR5cGUgb2YgdGhlIGFjdGlvbVxuXHQgKiBAcmV0dXJucyBUaGUgRW50aXR5U2V0IG9mIHRoZSBib3VuZCBhY3Rpb25cblx0ICogQHByaXZhdGVcblx0ICovXG5cdGdldEVudGl0eVNldE5hbWU6IGZ1bmN0aW9uIChvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgc0VudGl0eVR5cGU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgb0VudGl0eUNvbnRhaW5lciA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KFwiL1wiKTtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBvRW50aXR5Q29udGFpbmVyKSB7XG5cdFx0XHRpZiAodHlwZW9mIG9FbnRpdHlDb250YWluZXJba2V5XSA9PT0gXCJvYmplY3RcIiAmJiBvRW50aXR5Q29udGFpbmVyW2tleV0uJFR5cGUgPT09IHNFbnRpdHlUeXBlKSB7XG5cdFx0XHRcdHJldHVybiBrZXk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH0sXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBtZXRhbW9kZWwgcGF0aCBjb3JyZWN0bHkgZm9yIGJvdW5kIGFjdGlvbnMgaWYgdXNlZCB3aXRoIGJSZXR1cm5Pbmx5UGF0aCBhcyB0cnVlLFxuXHQgKiBlbHNlIHJldHVybnMgYW4gb2JqZWN0IHdoaWNoIGhhcyAzIHByb3BlcnRpZXMgcmVsYXRlZCB0byB0aGUgYWN0aW9uLiBUaGV5IGFyZSB0aGUgZW50aXR5IHNldCBuYW1lLFxuXHQgKiB0aGUgJFBhdGggdmFsdWUgb2YgdGhlIE9wZXJhdGlvbkF2YWlsYWJsZSBhbm5vdGF0aW9uIGFuZCB0aGUgYmluZGluZyBwYXJhbWV0ZXIgbmFtZS4gSWZcblx0ICogYkNoZWNrU3RhdGljVmFsdWUgaXMgdHJ1ZSwgcmV0dXJucyB0aGUgc3RhdGljIHZhbHVlIG9mIE9wZXJhdGlvbkF2YWlsYWJsZSBhbm5vdGF0aW9uLCBpZiBwcmVzZW50LlxuXHQgKiBlLmcuIGZvciBib3VuZCBhY3Rpb24gc29tZU5hbWVTcGFjZS5Tb21lQm91bmRBY3Rpb25cblx0ICogb2YgZW50aXR5IHNldCBTb21lRW50aXR5U2V0LCB0aGUgc3RyaW5nIFwiL1NvbWVFbnRpdHlTZXQvc29tZU5hbWVTcGFjZS5Tb21lQm91bmRBY3Rpb25cIiBpcyByZXR1cm5lZC5cblx0ICogQHBhcmFtIG9BY3Rpb24gVGhlIGNvbnRleHQgb2JqZWN0IG9mIHRoZSBhY3Rpb25cblx0ICogQHBhcmFtIGJSZXR1cm5Pbmx5UGF0aCBJZiBmYWxzZSwgYWRkaXRpb25hbCBpbmZvIGlzIHJldHVybmVkIGFsb25nIHdpdGggbWV0YW1vZGVsIHBhdGggdG8gdGhlIGJvdW5kIGFjdGlvblxuXHQgKiBAcGFyYW0gc0FjdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGJvdW5kIGFjdGlvbiBvZiB0aGUgZm9ybSBzb21lTmFtZVNwYWNlLlNvbWVCb3VuZEFjdGlvblxuXHQgKiBAcGFyYW0gYkNoZWNrU3RhdGljVmFsdWUgSWYgdHJ1ZSwgdGhlIHN0YXRpYyB2YWx1ZSBvZiBPcGVyYXRpb25BdmFpbGFibGUgaXMgcmV0dXJuZWQsIGlmIHByZXNlbnRcblx0ICogQHJldHVybnMgVGhlIHN0cmluZyBvciBvYmplY3QgYXMgc3BlY2lmaWVkIGJ5IGJSZXR1cm5Pbmx5UGF0aFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0Z2V0QWN0aW9uUGF0aDogZnVuY3Rpb24gKFxuXHRcdG9BY3Rpb246IENvbnRleHQsXG5cdFx0YlJldHVybk9ubHlQYXRoOiBib29sZWFuLFxuXHRcdHNBY3Rpb25OYW1lPzogc3RyaW5nLFxuXHRcdGJDaGVja1N0YXRpY1ZhbHVlPzogYm9vbGVhblxuXHQpOlxuXHRcdHwgc3RyaW5nXG5cdFx0fCB7XG5cdFx0XHRcdHNDb250ZXh0UGF0aDogc3RyaW5nO1xuXHRcdFx0XHRzUHJvcGVydHk6IHN0cmluZztcblx0XHRcdFx0c0JpbmRpbmdQYXJhbWV0ZXI6IHN0cmluZztcblx0XHQgIH0ge1xuXHRcdGxldCBzQ29udGV4dFBhdGggPSBvQWN0aW9uLmdldFBhdGgoKS5zcGxpdChcIi9AXCIpWzBdO1xuXG5cdFx0c0FjdGlvbk5hbWUgPSAhc0FjdGlvbk5hbWUgPyBvQWN0aW9uLmdldE9iamVjdChvQWN0aW9uLmdldFBhdGgoKSkgOiBzQWN0aW9uTmFtZTtcblxuXHRcdGlmIChzQWN0aW9uTmFtZSAmJiBzQWN0aW9uTmFtZS5pbmNsdWRlcyhcIihcIikpIHtcblx0XHRcdC8vIGFjdGlvbiBib3VuZCB0byBhbm90aGVyIGVudGl0eSB0eXBlXG5cdFx0XHRzQWN0aW9uTmFtZSA9IHNBY3Rpb25OYW1lLnNwbGl0KFwiKFwiKVswXTtcblx0XHR9IGVsc2UgaWYgKG9BY3Rpb24uZ2V0T2JqZWN0KHNDb250ZXh0UGF0aCkpIHtcblx0XHRcdC8vIFRPRE86IHRoaXMgbG9naWMgc291bmRzIHdyb25nLCB0byBiZSBjb3JyZWN0ZWRcblx0XHRcdGNvbnN0IHNFbnRpdHlUeXBlTmFtZSA9IG9BY3Rpb24uZ2V0T2JqZWN0KHNDb250ZXh0UGF0aCkuJFR5cGU7XG5cdFx0XHRjb25zdCBzRW50aXR5TmFtZSA9IHRoaXMuZ2V0RW50aXR5U2V0TmFtZShvQWN0aW9uLmdldE1vZGVsKCksIHNFbnRpdHlUeXBlTmFtZSk7XG5cdFx0XHRpZiAoc0VudGl0eU5hbWUpIHtcblx0XHRcdFx0c0NvbnRleHRQYXRoID0gYC8ke3NFbnRpdHlOYW1lfWA7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBzQ29udGV4dFBhdGg7XG5cdFx0fVxuXG5cdFx0aWYgKGJDaGVja1N0YXRpY1ZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gb0FjdGlvbi5nZXRPYmplY3QoYCR7c0NvbnRleHRQYXRofS8ke3NBY3Rpb25OYW1lfUBPcmcuT0RhdGEuQ29yZS5WMS5PcGVyYXRpb25BdmFpbGFibGVgKTtcblx0XHR9XG5cdFx0aWYgKGJSZXR1cm5Pbmx5UGF0aCkge1xuXHRcdFx0cmV0dXJuIGAke3NDb250ZXh0UGF0aH0vJHtzQWN0aW9uTmFtZX1gO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzQ29udGV4dFBhdGg6IHNDb250ZXh0UGF0aCxcblx0XHRcdFx0c1Byb3BlcnR5OiBvQWN0aW9uLmdldE9iamVjdChgJHtzQ29udGV4dFBhdGh9LyR7c0FjdGlvbk5hbWV9QE9yZy5PRGF0YS5Db3JlLlYxLk9wZXJhdGlvbkF2YWlsYWJsZS8kUGF0aGApLFxuXHRcdFx0XHRzQmluZGluZ1BhcmFtZXRlcjogb0FjdGlvbi5nZXRPYmplY3QoYCR7c0NvbnRleHRQYXRofS8ke3NBY3Rpb25OYW1lfS9AJHVpNS5vdmVybG9hZC8wLyRQYXJhbWV0ZXIvMC8kTmFtZWApXG5cdFx0XHR9O1xuXHRcdH1cblx0fSxcblxuXHRnZXROYXZpZ2F0aW9uQ29udGV4dDogZnVuY3Rpb24gKG9Db250ZXh0OiBDb250ZXh0KTogc3RyaW5nIHtcblx0XHRyZXR1cm4gT0RhdGFNb2RlbEFubm90YXRpb25IZWxwZXIuZ2V0TmF2aWdhdGlvblBhdGgob0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgcGF0aCB3aXRob3V0IHRoZSBlbnRpdHkgdHlwZSAocG90ZW50aWFsbHkgZmlyc3QpIGFuZCBwcm9wZXJ0eSAobGFzdCkgcGFydCAob3B0aW9uYWwpLlxuXHQgKiBUaGUgcmVzdWx0IGNhbiBiZSBhbiBlbXB0eSBzdHJpbmcgaWYgaXQgaXMgYSBzaW1wbGUgZGlyZWN0IHByb3BlcnR5LlxuXHQgKlxuXHQgKiBJZiBhbmQgb25seSBpZiB0aGUgZ2l2ZW4gcHJvcGVydHkgcGF0aCBzdGFydHMgd2l0aCBhIHNsYXNoICgvKSwgaXQgaXMgY29uc2lkZXJlZCB0aGF0IHRoZSBlbnRpdHkgdHlwZVxuXHQgKiBpcyBwYXJ0IG9mIHRoZSBwYXRoIGFuZCB3aWxsIGJlIHN0cmlwcGVkIGF3YXkuXG5cdCAqIEBwYXJhbSBzUHJvcGVydHlQYXRoXG5cdCAqIEBwYXJhbSBiS2VlcFByb3BlcnR5XG5cdCAqIEByZXR1cm5zIFRoZSBuYXZpZ2F0aW9uIHBhdGhcblx0ICovXG5cdGdldE5hdmlnYXRpb25QYXRoOiBmdW5jdGlvbiAoc1Byb3BlcnR5UGF0aDogc3RyaW5nLCBiS2VlcFByb3BlcnR5PzogYm9vbGVhbik6IHN0cmluZyB7XG5cdFx0Y29uc3QgYlN0YXJ0c1dpdGhFbnRpdHlUeXBlID0gc1Byb3BlcnR5UGF0aC5zdGFydHNXaXRoKFwiL1wiKTtcblx0XHRjb25zdCBhUGFydHMgPSBzUHJvcGVydHlQYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoZnVuY3Rpb24gKHBhcnQ6IHN0cmluZykge1xuXHRcdFx0cmV0dXJuICEhcGFydDtcblx0XHR9KTtcblx0XHRpZiAoYlN0YXJ0c1dpdGhFbnRpdHlUeXBlKSB7XG5cdFx0XHRhUGFydHMuc2hpZnQoKTtcblx0XHR9XG5cdFx0aWYgKCFiS2VlcFByb3BlcnR5KSB7XG5cdFx0XHRhUGFydHMucG9wKCk7XG5cdFx0fVxuXHRcdHJldHVybiBhUGFydHMuam9pbihcIi9cIik7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGNvcnJlY3QgbWV0YW1vZGVsIHBhdGggZm9yIGJvdW5kIGFjdGlvbnMuXG5cdCAqXG5cdCAqIFNpbmNlIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpcnJlc3BlY3RpdmUgb2YgdGhlIGFjdGlvbiB0eXBlLCB0aGlzIHdpbGwgYmUgYXBwbGllZCB0byB1bmJvdW5kIGFjdGlvbnMuXG5cdCAqIEluIHN1Y2ggYSBjYXNlLCBpZiBhbiBpbmNvcnJlY3QgcGF0aCBpcyByZXR1cm5lZCwgaXQgaXMgaWdub3JlZCBkdXJpbmcgdGVtcGxhdGluZy5cblx0ICpcblx0ICogRXhhbXBsZTogZm9yIHRoZSBib3VuZCBhY3Rpb24gc29tZU5hbWVTcGFjZS5Tb21lQm91bmRBY3Rpb24gb2YgZW50aXR5IHNldCBTb21lRW50aXR5U2V0LFxuXHQgKiB0aGUgc3RyaW5nIFwiL1NvbWVFbnRpdHlTZXQvc29tZU5hbWVTcGFjZS5Tb21lQm91bmRBY3Rpb25cIiBpcyByZXR1cm5lZC5cblx0ICogQHBhcmFtIG9BY3Rpb24gQ29udGV4dCBvYmplY3QgZm9yIHRoZSBhY3Rpb25cblx0ICogQHJldHVybnMgQ29ycmVjdCBtZXRhbW9kZWwgcGF0aCBmb3IgYm91bmQgYW5kIGluY29ycmVjdCBwYXRoIGZvciB1bmJvdW5kIGFjdGlvbnNcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGdldEFjdGlvbkNvbnRleHQ6IGZ1bmN0aW9uIChvQWN0aW9uOiBDb250ZXh0KTogc3RyaW5nIHtcblx0XHRyZXR1cm4gQ29tbW9uSGVscGVyLmdldEFjdGlvblBhdGgob0FjdGlvbiwgdHJ1ZSkgYXMgc3RyaW5nO1xuXHR9LFxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgbWV0YW1vZGVsIHBhdGggY29ycmVjdGx5IGZvciBvdmVybG9hZGVkIGJvdW5kIGFjdGlvbnMuIEZvciB1bmJvdW5kIGFjdGlvbnMsXG5cdCAqIHRoZSBpbmNvcnJlY3QgcGF0aCBpcyByZXR1cm5lZCwgYnV0IGlnbm9yZWQgZHVyaW5nIHRlbXBsYXRpbmcuXG5cdCAqIGUuZy4gZm9yIGJvdW5kIGFjdGlvbiBzb21lTmFtZVNwYWNlLlNvbWVCb3VuZEFjdGlvbiBvZiBlbnRpdHkgc2V0IFNvbWVFbnRpdHlTZXQsXG5cdCAqIHRoZSBzdHJpbmcgXCIvU29tZUVudGl0eVNldC9zb21lTmFtZVNwYWNlLlNvbWVCb3VuZEFjdGlvbi9AJHVpNS5vdmVybG9hZC8wXCIgaXMgcmV0dXJuZWQuXG5cdCAqIEBwYXJhbSBvQWN0aW9uIFRoZSBjb250ZXh0IG9iamVjdCBmb3IgdGhlIGFjdGlvblxuXHQgKiBAcmV0dXJucyBUaGUgY29ycmVjdCBtZXRhbW9kZWwgcGF0aCBmb3IgYm91bmQgYWN0aW9uIG92ZXJsb2FkIGFuZCBpbmNvcnJlY3QgcGF0aCBmb3IgdW5ib3VuZCBhY3Rpb25zXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRnZXRQYXRoVG9Cb3VuZEFjdGlvbk92ZXJsb2FkOiBmdW5jdGlvbiAob0FjdGlvbjogQ29udGV4dCk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgc1BhdGggPSBDb21tb25IZWxwZXIuZ2V0QWN0aW9uUGF0aChvQWN0aW9uLCB0cnVlKTtcblx0XHRyZXR1cm4gYCR7c1BhdGh9L0AkdWk1Lm92ZXJsb2FkLzBgO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBzdHJpbmcgd2l0aCBzaW5nbGUgcXVvdGVzLlxuXHQgKiBAcGFyYW0gc1ZhbHVlIFNvbWUgc3RyaW5nIHRoYXQgbmVlZHMgdG8gYmUgY29udmVydGVkIGludG8gc2luZ2xlIHF1b3Rlc1xuXHQgKiBAcGFyYW0gW2JFc2NhcGVdIFNob3VsZCB0aGUgc3RyaW5nIGJlIGVzY2FwZWQgYmVmb3JlaGFuZFxuXHQgKiBAcmV0dXJucyAtIFN0cmluZyB3aXRoIHNpbmdsZSBxdW90ZXNcblx0ICovXG5cdGFkZFNpbmdsZVF1b3RlczogZnVuY3Rpb24gKHNWYWx1ZTogc3RyaW5nLCBiRXNjYXBlPzogYm9vbGVhbik6IHN0cmluZyB7XG5cdFx0aWYgKGJFc2NhcGUgJiYgc1ZhbHVlKSB7XG5cdFx0XHRzVmFsdWUgPSB0aGlzLmVzY2FwZVNpbmdsZVF1b3RlcyhzVmFsdWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gYCcke3NWYWx1ZX0nYDtcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgc3RyaW5nIHdpdGggZXNjYXBlZCBzaW5nbGUgcXVvdGVzLlxuXHQgKiBAcGFyYW0gc1ZhbHVlIFNvbWUgc3RyaW5nIHRoYXQgbmVlZHMgZXNjYXBpbmcgb2Ygc2luZ2xlIHF1b3Rlc1xuXHQgKiBAcmV0dXJucyAtIFN0cmluZyB3aXRoIGVzY2FwZWQgc2luZ2xlIHF1b3Rlc1xuXHQgKi9cblx0ZXNjYXBlU2luZ2xlUXVvdGVzOiBmdW5jdGlvbiAoc1ZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdHJldHVybiBzVmFsdWUucmVwbGFjZSgvWyddL2csIFwiXFxcXCdcIik7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGZ1bmN0aW9uIHN0cmluZ1xuXHQgKiBUaGUgZmlyc3QgYXJndW1lbnQgb2YgZ2VuZXJhdGVGdW5jdGlvbiBpcyBuYW1lIG9mIHRoZSBnZW5lcmF0ZWQgZnVuY3Rpb24gc3RyaW5nLlxuXHQgKiBSZW1haW5pbmcgYXJndW1lbnRzIG9mIGdlbmVyYXRlRnVuY3Rpb24gYXJlIGFyZ3VtZW50cyBvZiB0aGUgbmV3bHkgZ2VuZXJhdGVkIGZ1bmN0aW9uIHN0cmluZy5cblx0ICogQHBhcmFtIHNGdW5jTmFtZSBTb21lIHN0cmluZyBmb3IgdGhlIGZ1bmN0aW9uIG5hbWVcblx0ICogQHBhcmFtIGFyZ3MgVGhlIHJlbWFpbmluZyBhcmd1bWVudHNcblx0ICogQHJldHVybnMgLSBGdW5jdGlvbiBzdHJpbmcgZGVwZW5kcyBvbiBhcmd1bWVudHMgcGFzc2VkXG5cdCAqL1xuXHRnZW5lcmF0ZUZ1bmN0aW9uOiBmdW5jdGlvbiAoc0Z1bmNOYW1lOiBzdHJpbmcsIC4uLmFyZ3M6IHN0cmluZ1tdKTogc3RyaW5nIHtcblx0XHRsZXQgc1BhcmFtcyA9IFwiXCI7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRzUGFyYW1zICs9IGFyZ3NbaV07XG5cdFx0XHRpZiAoaSA8IGFyZ3MubGVuZ3RoIC0gMSkge1xuXHRcdFx0XHRzUGFyYW1zICs9IFwiLCBcIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRsZXQgc0Z1bmN0aW9uID0gYCR7c0Z1bmNOYW1lfSgpYDtcblx0XHRpZiAoc1BhcmFtcykge1xuXHRcdFx0c0Z1bmN0aW9uID0gYCR7c0Z1bmNOYW1lfSgke3NQYXJhbXN9KWA7XG5cdFx0fVxuXHRcdHJldHVybiBzRnVuY3Rpb247XG5cdH0sXG5cdC8qXG5cdCAqIFJldHVybnMgdGhlIHZpc2liaWxpdHkgZXhwcmVzc2lvbiBmb3IgZGF0YXBvaW50IHRpdGxlL2xpbmtcblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbcGF0aF0gYW5ub3RhdGlvbiBwYXRoIG9mIGRhdGEgcG9pbnQgb3IgTWljcm9jaGFydFxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0NsaWNrYWJsZV0gdHJ1ZSBpZiBsaW5rIGlzIHZpc2libGVcblx0ICogQHJldHVybnMge0NvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9ufSB2aXNpYmlsaXR5RXhwIFVzZWQgdG8gZ2V0IHRoZSB2aXNpYmlsaXR5IGJpbmRpbmcgZm9yIERhdGFQb2ludHMgdGl0bGUgaW4gdGhlIEhlYWRlci5cblx0ICpcblx0ICovXG5cblx0Z2V0SGVhZGVyRGF0YVBvaW50TGlua1Zpc2liaWxpdHk6IGZ1bmN0aW9uIChwYXRoOiBzdHJpbmcsIGlzQ2xpY2thYmxlOiBib29sZWFuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdGlmRWxzZShcblx0XHRcdFx0Y29uc3RhbnQoaXNDbGlja2FibGUpLFxuXHRcdFx0XHRlcXVhbChwYXRoSW5Nb2RlbChgaXNIZWFkZXJEUExpbmtWaXNpYmxlLyR7cGF0aH1gLCBcImludGVybmFsXCIpLCB0cnVlKSxcblx0XHRcdFx0bm90RXF1YWwocGF0aEluTW9kZWwoYGlzSGVhZGVyRFBMaW5rVmlzaWJsZS8ke3BhdGh9YCwgXCJpbnRlcm5hbFwiKSwgdHJ1ZSlcblx0XHRcdClcblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBvYmplY3QgdG8gc3RyaW5nKGRpZmZlcmVudCBmcm9tIEpTT04uc3RyaW5naWZ5IG9yLnRvU3RyaW5nKS5cblx0ICogQHBhcmFtIG9QYXJhbXMgU29tZSBvYmplY3Rcblx0ICogQHJldHVybnMgLSBPYmplY3Qgc3RyaW5nXG5cdCAqL1xuXHRvYmplY3RUb1N0cmluZzogZnVuY3Rpb24gKG9QYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogc3RyaW5nIHtcblx0XHRsZXQgaU51bWJlck9mS2V5cyA9IE9iamVjdC5rZXlzKG9QYXJhbXMpLmxlbmd0aCxcblx0XHRcdHNQYXJhbXMgPSBcIlwiO1xuXG5cdFx0Zm9yIChjb25zdCBzS2V5IGluIG9QYXJhbXMpIHtcblx0XHRcdGxldCBzVmFsdWUgPSBvUGFyYW1zW3NLZXldO1xuXHRcdFx0aWYgKHNWYWx1ZSAmJiB0eXBlb2Ygc1ZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdHNWYWx1ZSA9IHRoaXMub2JqZWN0VG9TdHJpbmcoc1ZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcblx0XHRcdH1cblx0XHRcdHNQYXJhbXMgKz0gYCR7c0tleX06ICR7c1ZhbHVlfWA7XG5cdFx0XHRpZiAoaU51bWJlck9mS2V5cyA+IDEpIHtcblx0XHRcdFx0LS1pTnVtYmVyT2ZLZXlzO1xuXHRcdFx0XHRzUGFyYW1zICs9IFwiLCBcIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gYHsgJHtzUGFyYW1zfX1gO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIGVzY2FwZSBjaGFyYWN0ZXJzIChcXCkgZnJvbSBhbiBleHByZXNzaW9uLlxuXHQgKiBAcGFyYW0gc0V4cHJlc3Npb24gQW4gZXhwcmVzc2lvbiB3aXRoIGVzY2FwZSBjaGFyYWN0ZXJzXG5cdCAqIEByZXR1cm5zIEV4cHJlc3Npb24gc3RyaW5nIHdpdGhvdXQgZXNjYXBlIGNoYXJhY3RlcnMgb3IgdW5kZWZpbmVkXG5cdCAqL1xuXHRyZW1vdmVFc2NhcGVDaGFyYWN0ZXJzOiBmdW5jdGlvbiAoc0V4cHJlc3Npb24/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiBzRXhwcmVzc2lvbiA/IHNFeHByZXNzaW9uLnJlcGxhY2UoL1xcXFw/XFxcXChbe31dKS9nLCBcIiQxXCIpIDogdW5kZWZpbmVkO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNYWtlcyB1cGRhdGVzIHRvIGEgc3RyaW5naWZpZWQgb2JqZWN0IHNvIHRoYXQgaXQgd29ya3MgcHJvcGVybHkgaW4gYSB0ZW1wbGF0ZSBieSBhZGRpbmcgdWk1T2JqZWN0OnRydWUuXG5cdCAqIEBwYXJhbSBzU3RyaW5naWZpZWRcblx0ICogQHJldHVybnMgVGhlIHVwZGF0ZWQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvYmplY3Rcblx0ICovXG5cdHN0cmluZ2lmeU9iamVjdDogZnVuY3Rpb24gKHNTdHJpbmdpZmllZDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIXNTdHJpbmdpZmllZCB8fCBzU3RyaW5naWZpZWQgPT09IFwie31cIikge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3Qgb09iamVjdCA9IEpTT04ucGFyc2Uoc1N0cmluZ2lmaWVkKTtcblx0XHRcdGlmICh0eXBlb2Ygb09iamVjdCA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShvT2JqZWN0KSkge1xuXHRcdFx0XHRjb25zdCBvVUk1T2JqZWN0ID0ge1xuXHRcdFx0XHRcdHVpNW9iamVjdDogdHJ1ZVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRPYmplY3QuYXNzaWduKG9VSTVPYmplY3QsIG9PYmplY3QpO1xuXHRcdFx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkob1VJNU9iamVjdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBzVHlwZSA9IEFycmF5LmlzQXJyYXkob09iamVjdCkgPyBcIkFycmF5XCIgOiB0eXBlb2Ygb09iamVjdDtcblx0XHRcdFx0TG9nLmVycm9yKGBVbmV4cGVjdGVkIG9iamVjdCB0eXBlIGluIHN0cmluZ2lmeU9iamVjdCAoJHtzVHlwZX0pIC0gb25seSB3b3JrcyB3aXRoIG9iamVjdGApO1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJzdHJpbmdpZnlPYmplY3Qgb25seSB3b3JrcyB3aXRoIG9iamVjdHMhXCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogQ3JlYXRlIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBkYXRhLCB0YWtpbmcgY2FyZSB0aGF0IGl0IGlzIG5vdCB0cmVhdGVkIGFzIGEgYmluZGluZyBleHByZXNzaW9uLlxuXHQgKiBAcGFyYW0gdkRhdGEgVGhlIGRhdGEgdG8gc3RyaW5naWZ5XG5cdCAqIEByZXR1cm5zIFRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGEuXG5cdCAqL1xuXHRzdHJpbmdpZnlDdXN0b21EYXRhOiBmdW5jdGlvbiAodkRhdGE6IG9iamVjdCB8IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgb09iamVjdDogeyB1aTVvYmplY3Q6IHRydWU7IGN1c3RvbURhdGE/OiB1bmtub3duIH0gPSB7XG5cdFx0XHR1aTVvYmplY3Q6IHRydWVcblx0XHR9O1xuXHRcdG9PYmplY3RbXCJjdXN0b21EYXRhXCJdID0gdkRhdGEgaW5zdGFuY2VvZiBDb250ZXh0ID8gdkRhdGEuZ2V0T2JqZWN0KCkgOiB2RGF0YTtcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkob09iamVjdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFBhcnNlcyB0aGUgZ2l2ZW4gZGF0YSwgcG90ZW50aWFsbHkgdW53cmFwcyB0aGUgZGF0YS5cblx0ICogQHBhcmFtIHZEYXRhIFRoZSBkYXRhIHRvIHBhcnNlXG5cdCAqIEBwYXJhbSB2RGF0YS51aTVvYmplY3Rcblx0ICogQHBhcmFtIHZEYXRhLmN1c3RvbURhdGFcblx0ICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiB0aGUgZGF0YSBwYXJzaW5nXG5cdCAqL1xuXHRwYXJzZUN1c3RvbURhdGE6IGZ1bmN0aW9uICh2RGF0YT86IHN0cmluZyB8IHsgdWk1b2JqZWN0OiB0cnVlOyBjdXN0b21EYXRhPzogdW5rbm93biB9KTogdW5rbm93biB7XG5cdFx0dkRhdGEgPSB0eXBlb2YgdkRhdGEgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKHZEYXRhKSA6IHZEYXRhO1xuXHRcdGlmICh2RGF0YSAmJiB2RGF0YS5oYXNPd25Qcm9wZXJ0eShcImN1c3RvbURhdGFcIikpIHtcblx0XHRcdHJldHVybiAodkRhdGEgYXMgeyB1aTVvYmplY3Q6IHRydWU7IGN1c3RvbURhdGE/OiB1bmtub3duIH0pW1wiY3VzdG9tRGF0YVwiXTtcblx0XHR9XG5cdFx0cmV0dXJuIHZEYXRhO1xuXHR9LFxuXHRnZXRDb250ZXh0UGF0aDogZnVuY3Rpb24gKG9WYWx1ZTogdW5rbm93biwgb0ludGVyZmFjZTogQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlKTogc3RyaW5nIHtcblx0XHRjb25zdCBzUGF0aCA9IG9JbnRlcmZhY2UgJiYgb0ludGVyZmFjZS5jb250ZXh0ICYmIG9JbnRlcmZhY2UuY29udGV4dC5nZXRQYXRoKCk7XG5cdFx0cmV0dXJuIHNQYXRoW3NQYXRoLmxlbmd0aCAtIDFdID09PSBcIi9cIiA/IHNQYXRoLnNsaWNlKDAsIC0xKSA6IHNQYXRoO1xuXHR9LFxuXHQvKipcblx0ICogUmV0dXJucyBhIHN0cmluZ2lmaWVkIEpTT04gb2JqZWN0IGNvbnRhaW5pbmcgIFByZXNlbnRhdGlvbiBWYXJpYW50IHNvcnQgY29uZGl0aW9ucy5cblx0ICogQHBhcmFtIG9Db250ZXh0XG5cdCAqIEBwYXJhbSBvQ29udGV4dC5nZXRQYXRoXG5cdCAqIEBwYXJhbSBvQ29udGV4dC5nZXRNb2RlbFxuXHQgKiBAcGFyYW0gb1ByZXNlbnRhdGlvblZhcmlhbnQgUHJlc2VudGF0aW9uIHZhcmlhbnQgQW5ub3RhdGlvblxuXHQgKiBAcGFyYW0gc1ByZXNlbnRhdGlvblZhcmlhbnRQYXRoXG5cdCAqIEByZXR1cm5zIFN0cmluZ2lmaWVkIEpTT04gb2JqZWN0XG5cdCAqL1xuXHRnZXRTb3J0Q29uZGl0aW9uczogZnVuY3Rpb24gKFxuXHRcdG9Db250ZXh0OiB7IGdldFBhdGgobnVtOiBudW1iZXIpOiBzdHJpbmc7IGdldE1vZGVsKG51bTogbnVtYmVyKTogT0RhdGFNZXRhTW9kZWwgfSxcblx0XHRvUHJlc2VudGF0aW9uVmFyaWFudDogTWV0YU1vZGVsVHlwZTxQcmVzZW50YXRpb25WYXJpYW50Pixcblx0XHRzUHJlc2VudGF0aW9uVmFyaWFudFBhdGg6IHN0cmluZ1xuXHQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGlmIChcblx0XHRcdG9QcmVzZW50YXRpb25WYXJpYW50ICYmXG5cdFx0XHRDb21tb25IZWxwZXIuX2lzUHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24oc1ByZXNlbnRhdGlvblZhcmlhbnRQYXRoKSAmJlxuXHRcdFx0b1ByZXNlbnRhdGlvblZhcmlhbnQuU29ydE9yZGVyXG5cdFx0KSB7XG5cdFx0XHRjb25zdCBhU29ydENvbmRpdGlvbnM6IHsgc29ydGVyczogeyBuYW1lPzogc3RyaW5nOyBkZXNjZW5kaW5nPzogYm9vbGVhbiB9W10gfSA9IHtcblx0XHRcdFx0c29ydGVyczogW11cblx0XHRcdH07XG5cblx0XHRcdGNvbnN0IHNFbnRpdHlQYXRoID0gb0NvbnRleHQuZ2V0UGF0aCgwKS5zcGxpdChcIkBcIilbMF07XG5cdFx0XHRvUHJlc2VudGF0aW9uVmFyaWFudC5Tb3J0T3JkZXIuZm9yRWFjaChmdW5jdGlvbiAob0NvbmRpdGlvbiA9IHt9KSB7XG5cdFx0XHRcdGxldCBvU29ydFByb3BlcnR5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdGNvbnN0IG9Tb3J0ZXI6IHsgbmFtZT86IHN0cmluZzsgZGVzY2VuZGluZz86IGJvb2xlYW4gfSA9IHt9O1xuXHRcdFx0XHRpZiAob0NvbmRpdGlvbi5EeW5hbWljUHJvcGVydHkpIHtcblx0XHRcdFx0XHRvU29ydFByb3BlcnR5ID0gb0NvbnRleHQuZ2V0TW9kZWwoMCkuZ2V0T2JqZWN0KHNFbnRpdHlQYXRoICsgb0NvbmRpdGlvbi5EeW5hbWljUHJvcGVydHkuJEFubm90YXRpb25QYXRoKT8uTmFtZTtcblx0XHRcdFx0fSBlbHNlIGlmIChvQ29uZGl0aW9uLlByb3BlcnR5KSB7XG5cdFx0XHRcdFx0b1NvcnRQcm9wZXJ0eSA9IG9Db25kaXRpb24uUHJvcGVydHkuJFByb3BlcnR5UGF0aDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob1NvcnRQcm9wZXJ0eSkge1xuXHRcdFx0XHRcdG9Tb3J0ZXIubmFtZSA9IG9Tb3J0UHJvcGVydHk7XG5cdFx0XHRcdFx0b1NvcnRlci5kZXNjZW5kaW5nID0gISFvQ29uZGl0aW9uLkRlc2NlbmRpbmc7XG5cdFx0XHRcdFx0YVNvcnRDb25kaXRpb25zLnNvcnRlcnMucHVzaChvU29ydGVyKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJQbGVhc2UgZGVmaW5lIHRoZSByaWdodCBwYXRoIHRvIHRoZSBzb3J0IHByb3BlcnR5XCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShhU29ydENvbmRpdGlvbnMpO1xuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9LFxuXHRfaXNQcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogZnVuY3Rpb24gKGFubm90YXRpb25QYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0YW5ub3RhdGlvblBhdGguaW5jbHVkZXMoYEAke1VJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnR9YCkgfHxcblx0XHRcdGFubm90YXRpb25QYXRoLmluY2x1ZGVzKGBAJHtVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50fWApXG5cdFx0KTtcblx0fSxcblx0Y3JlYXRlUHJlc2VudGF0aW9uUGF0aENvbnRleHQ6IGZ1bmN0aW9uIChvUHJlc2VudGF0aW9uQ29udGV4dDogQ29udGV4dCk6IENvbnRleHQge1xuXHRcdGNvbnN0IGFQYXRocyA9IG9QcmVzZW50YXRpb25Db250ZXh0LmdldFBhdGgoKS5zcGxpdChcIkBcIikgfHwgW107XG5cdFx0Y29uc3Qgb01vZGVsID0gb1ByZXNlbnRhdGlvbkNvbnRleHQuZ2V0TW9kZWwoKTtcblx0XHRpZiAoYVBhdGhzLmxlbmd0aCAmJiBhUGF0aHNbYVBhdGhzLmxlbmd0aCAtIDFdLmluY2x1ZGVzKFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFwiKSkge1xuXHRcdFx0Y29uc3Qgc1BhdGggPSBvUHJlc2VudGF0aW9uQ29udGV4dC5nZXRQYXRoKCkuc3BsaXQoXCIvUHJlc2VudGF0aW9uVmFyaWFudFwiKVswXTtcblx0XHRcdHJldHVybiBvTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYCR7c1BhdGh9QHNhcHVpLm5hbWVgKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9Nb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHtvUHJlc2VudGF0aW9uQ29udGV4dC5nZXRQYXRoKCl9QHNhcHVpLm5hbWVgKTtcblx0fSxcblx0Z2V0UHJlc3NIYW5kbGVyRm9yRGF0YUZpZWxkRm9ySUJOOiBmdW5jdGlvbiAoXG5cdFx0b0RhdGFGaWVsZDogRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRcdHNDb250ZXh0Pzogc3RyaW5nLFxuXHRcdGJOYXZpZ2F0ZVdpdGhDb25maXJtYXRpb25EaWFsb2c/OiBib29sZWFuLFxuXHRcdGZvckNvbnRleHRNZW51ID0gZmFsc2Vcblx0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIW9EYXRhRmllbGQpIHJldHVybiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgbU5hdmlnYXRpb25QYXJhbWV0ZXJzOiB7XG5cdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHM/OiBzdHJpbmc7XG5cdFx0XHRsYWJlbD86IHN0cmluZztcblx0XHRcdGFwcGxpY2FibGVDb250ZXh0cz86IHN0cmluZztcblx0XHRcdG5vdEFwcGxpY2FibGVDb250ZXh0cz86IHN0cmluZztcblx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZz86IHN0cmluZztcblx0XHR9ID0ge1xuXHRcdFx0bmF2aWdhdGlvbkNvbnRleHRzOiBzQ29udGV4dCA/IHNDb250ZXh0IDogXCIkeyRzb3VyY2U+L30uZ2V0QmluZGluZ0NvbnRleHQoKVwiXG5cdFx0fTtcblx0XHRpZiAob0RhdGFGaWVsZC5SZXF1aXJlc0NvbnRleHQgJiYgIW9EYXRhRmllbGQuSW5saW5lICYmIGJOYXZpZ2F0ZVdpdGhDb25maXJtYXRpb25EaWFsb2cpIHtcblx0XHRcdGNvbnN0IGFwcGxpY2FibGVQcm9wZXJ0eSA9ICFmb3JDb250ZXh0TWVudSA/IFwiYUFwcGxpY2FibGVcIiA6IFwiYUFwcGxpY2FibGVGb3JDb250ZXh0TWVudVwiO1xuXHRcdFx0Y29uc3Qgbm90QXBwbGljYWJsZVByb3BlcnR5ID0gIWZvckNvbnRleHRNZW51ID8gXCJhTm90QXBwbGljYWJsZVwiIDogXCJhTm90QXBwbGljYWJsZUZvckNvbnRleHRNZW51XCI7XG5cdFx0XHRtTmF2aWdhdGlvblBhcmFtZXRlcnMuYXBwbGljYWJsZUNvbnRleHRzID0gYFxcJHtpbnRlcm5hbD5pYm4vJHtvRGF0YUZpZWxkLlNlbWFudGljT2JqZWN0fS0ke29EYXRhRmllbGQuQWN0aW9ufS8ke2FwcGxpY2FibGVQcm9wZXJ0eX0vfWA7XG5cdFx0XHRtTmF2aWdhdGlvblBhcmFtZXRlcnMubm90QXBwbGljYWJsZUNvbnRleHRzID0gYFxcJHtpbnRlcm5hbD5pYm4vJHtvRGF0YUZpZWxkLlNlbWFudGljT2JqZWN0fS0ke29EYXRhRmllbGQuQWN0aW9ufS8ke25vdEFwcGxpY2FibGVQcm9wZXJ0eX0vfWA7XG5cdFx0XHRtTmF2aWdhdGlvblBhcmFtZXRlcnMubGFiZWwgPSB0aGlzLmFkZFNpbmdsZVF1b3RlcyhvRGF0YUZpZWxkLkxhYmVsIGFzIHN0cmluZywgdHJ1ZSk7XG5cdFx0fVxuXHRcdGlmIChvRGF0YUZpZWxkLk1hcHBpbmcpIHtcblx0XHRcdG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5zZW1hbnRpY09iamVjdE1hcHBpbmcgPSB0aGlzLmFkZFNpbmdsZVF1b3RlcyhKU09OLnN0cmluZ2lmeShvRGF0YUZpZWxkLk1hcHBpbmcpKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZ2VuZXJhdGVGdW5jdGlvbihcblx0XHRcdGJOYXZpZ2F0ZVdpdGhDb25maXJtYXRpb25EaWFsb2cgPyBcIi5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlV2l0aENvbmZpcm1hdGlvbkRpYWxvZ1wiIDogXCIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZVwiLFxuXHRcdFx0dGhpcy5hZGRTaW5nbGVRdW90ZXMob0RhdGFGaWVsZC5TZW1hbnRpY09iamVjdCBhcyB1bmtub3duIGFzIHN0cmluZyksXG5cdFx0XHR0aGlzLmFkZFNpbmdsZVF1b3RlcyhvRGF0YUZpZWxkLkFjdGlvbiBhcyB1bmtub3duIGFzIHN0cmluZyksXG5cdFx0XHR0aGlzLm9iamVjdFRvU3RyaW5nKG1OYXZpZ2F0aW9uUGFyYW1ldGVycyksXG5cdFx0XHRcIiR7JHNvdXJjZT4vfVwiXG5cdFx0KTtcblx0fSxcblx0Z2V0RW50aXR5U2V0OiBmdW5jdGlvbiAob0NvbnRleHQ6IENvbnRleHQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHNQYXRoID0gb0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdHJldHVybiBNb2RlbEhlbHBlci5nZXRFbnRpdHlTZXRQYXRoKHNQYXRoKTtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGRvIHRoZSBjYWxjdWxhdGlvbiBvZiBjcml0aWNhbGl0eSBpbiBjYXNlIENyaXRpY2FsaXR5Q2FsY3VsYXRpb24gcHJlc2VudCBpbiB0aGUgYW5ub3RhdGlvblxuXHQgKlxuXHQgKiBUaGUgY2FsY3VsYXRpb24gaXMgZG9uZSBieSBjb21wYXJpbmcgYSB2YWx1ZSB0byB0aGUgdGhyZXNob2xkIHZhbHVlcyByZWxldmFudCBmb3IgdGhlIHNwZWNpZmllZCBpbXByb3ZlbWVudCBkaXJlY3Rpb24uXG5cdCAqIEZvciBpbXByb3ZlbWVudCBkaXJlY3Rpb24gVGFyZ2V0LCB0aGUgY3JpdGljYWxpdHkgaXMgY2FsY3VsYXRlZCB1c2luZyBib3RoIGxvdyBhbmQgaGlnaCB0aHJlc2hvbGQgdmFsdWVzLiBJdCB3aWxsIGJlXG5cdCAqXG5cdCAqIC0gUG9zaXRpdmUgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBBY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZSBhbmQgbG93ZXIgdGhhbiBvciBlcXVhbCB0byBBY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWVcblx0ICogLSBOZXV0cmFsIGlmIHRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSBhbmQgbG93ZXIgdGhhbiBBY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZSBPUiBncmVhdGVyIHRoYW4gQWNjZXB0YW5jZVJhbmdlSGlnaFZhbHVlIGFuZCBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIFRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlXG5cdCAqIC0gQ3JpdGljYWwgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBEZXZpYXRpb25SYW5nZUxvd1ZhbHVlIGFuZCBsb3dlciB0aGFuIFRvbGVyYW5jZVJhbmdlTG93VmFsdWUgT1IgZ3JlYXRlciB0aGFuIFRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlIGFuZCBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIERldmlhdGlvblJhbmdlSGlnaFZhbHVlXG5cdCAqIC0gTmVnYXRpdmUgaWYgdGhlIHZhbHVlIGlzIGxvd2VyIHRoYW4gRGV2aWF0aW9uUmFuZ2VMb3dWYWx1ZSBvciBncmVhdGVyIHRoYW4gRGV2aWF0aW9uUmFuZ2VIaWdoVmFsdWVcblx0ICpcblx0ICogRm9yIGltcHJvdmVtZW50IGRpcmVjdGlvbiBNaW5pbWl6ZSwgdGhlIGNyaXRpY2FsaXR5IGlzIGNhbGN1bGF0ZWQgdXNpbmcgdGhlIGhpZ2ggdGhyZXNob2xkIHZhbHVlcy4gSXQgaXNcblx0ICogLSBQb3NpdGl2ZSBpZiB0aGUgdmFsdWUgaXMgbG93ZXIgdGhhbiBvciBlcXVhbCB0byBBY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWVcblx0ICogLSBOZXV0cmFsIGlmIHRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gQWNjZXB0YW5jZVJhbmdlSGlnaFZhbHVlIGFuZCBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIFRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlXG5cdCAqIC0gQ3JpdGljYWwgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBUb2xlcmFuY2VSYW5nZUhpZ2hWYWx1ZSBhbmQgbG93ZXIgdGhhbiBvciBlcXVhbCB0byBEZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZVxuXHQgKiAtIE5lZ2F0aXZlIGlmIHRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gRGV2aWF0aW9uUmFuZ2VIaWdoVmFsdWVcblx0ICpcblx0ICogRm9yIGltcHJvdmVtZW50IGRpcmVjdGlvbiBNYXhpbWl6ZSwgdGhlIGNyaXRpY2FsaXR5IGlzIGNhbGN1bGF0ZWQgdXNpbmcgdGhlIGxvdyB0aHJlc2hvbGQgdmFsdWVzLiBJdCBpc1xuXHQgKlxuXHQgKiAtIFBvc2l0aXZlIGlmIHRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gQWNjZXB0YW5jZVJhbmdlTG93VmFsdWVcblx0ICogLSBOZXV0cmFsIGlmIHRoZSB2YWx1ZSBpcyBsZXNzIHRoYW4gQWNjZXB0YW5jZVJhbmdlTG93VmFsdWUgYW5kIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBUb2xlcmFuY2VSYW5nZUxvd1ZhbHVlXG5cdCAqIC0gQ3JpdGljYWwgaWYgdGhlIHZhbHVlIGlzIGxvd2VyIHRoYW4gVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSBhbmQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIERldmlhdGlvblJhbmdlTG93VmFsdWVcblx0ICogLSBOZWdhdGl2ZSBpZiB0aGUgdmFsdWUgaXMgbG93ZXIgdGhhbiBEZXZpYXRpb25SYW5nZUxvd1ZhbHVlXG5cdCAqXG5cdCAqIFRocmVzaG9sZHMgYXJlIG9wdGlvbmFsLiBGb3IgdW5hc3NpZ25lZCB2YWx1ZXMsIGRlZmF1bHRzIGFyZSBkZXRlcm1pbmVkIGluIHRoaXMgb3JkZXI6XG5cdCAqXG5cdCAqIC0gRm9yIERldmlhdGlvblJhbmdlLCBhbiBvbWl0dGVkIExvd1ZhbHVlIHRyYW5zbGF0ZXMgaW50byB0aGUgc21hbGxlc3QgcG9zc2libGUgbnVtYmVyICgtSU5GKSwgYW4gb21pdHRlZCBIaWdoVmFsdWUgdHJhbnNsYXRlcyBpbnRvIHRoZSBsYXJnZXN0IHBvc3NpYmxlIG51bWJlciAoK0lORilcblx0ICogLSBGb3IgVG9sZXJhbmNlUmFuZ2UsIGFuIG9taXR0ZWQgTG93VmFsdWUgd2lsbCBiZSBpbml0aWFsaXplZCB3aXRoIERldmlhdGlvblJhbmdlTG93VmFsdWUsIGFuIG9taXR0ZWQgSGlnaFZhbHVlIHdpbGwgYmUgaW5pdGlhbGl6ZWQgd2l0aCBEZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZVxuXHQgKiAtIEZvciBBY2NlcHRhbmNlUmFuZ2UsIGFuIG9taXR0ZWQgTG93VmFsdWUgd2lsbCBiZSBpbml0aWFsaXplZCB3aXRoIFRvbGVyYW5jZVJhbmdlTG93VmFsdWUsIGFuIG9taXR0ZWQgSGlnaFZhbHVlIHdpbGwgYmUgaW5pdGlhbGl6ZWQgd2l0aCBUb2xlcmFuY2VSYW5nZUhpZ2hWYWx1ZS5cblx0ICogQHBhcmFtIHNJbXByb3ZlbWVudERpcmVjdGlvbiBJbXByb3ZlbWVudERpcmVjdGlvbiB0byBiZSB1c2VkIGZvciBjcmVhdGluZyB0aGUgY3JpdGljYWxpdHkgYmluZGluZ1xuXHQgKiBAcGFyYW0gc1ZhbHVlIFZhbHVlIGZyb20gRGF0YXBvaW50IHRvIGJlIG1lYXN1cmVkXG5cdCAqIEBwYXJhbSBzRGV2aWF0aW9uTG93IEV4cHJlc3Npb25CaW5kaW5nIGZvciBMb3dlciBEZXZpYXRpb24gbGV2ZWxcblx0ICogQHBhcmFtIHNUb2xlcmFuY2VMb3cgRXhwcmVzc2lvbkJpbmRpbmcgZm9yIExvd2VyIFRvbGVyYW5jZSBsZXZlbFxuXHQgKiBAcGFyYW0gc0FjY2VwdGFuY2VMb3cgRXhwcmVzc2lvbkJpbmRpbmcgZm9yIExvd2VyIEFjY2VwdGFuY2UgbGV2ZWxcblx0ICogQHBhcmFtIHNBY2NlcHRhbmNlSGlnaCBFeHByZXNzaW9uQmluZGluZyBmb3IgSGlnaGVyIEFjY2VwdGFuY2UgbGV2ZWxcblx0ICogQHBhcmFtIHNUb2xlcmFuY2VIaWdoIEV4cHJlc3Npb25CaW5kaW5nIGZvciBIaWdoZXIgVG9sZXJhbmNlIGxldmVsXG5cdCAqIEBwYXJhbSBzRGV2aWF0aW9uSGlnaCBFeHByZXNzaW9uQmluZGluZyBmb3IgSGlnaGVyIERldmlhdGlvbiBsZXZlbFxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIGNyaXRpY2FsaXR5IGNhbGN1bGF0aW9uIGFzIGV4cHJlc3Npb24gYmluZGluZ1xuXHQgKi9cblx0Z2V0Q3JpdGljYWxpdHlDYWxjdWxhdGlvbkJpbmRpbmc6IGZ1bmN0aW9uIChcblx0XHRzSW1wcm92ZW1lbnREaXJlY3Rpb246IHN0cmluZyxcblx0XHRzVmFsdWU6IHN0cmluZyxcblx0XHRzRGV2aWF0aW9uTG93OiBzdHJpbmcgfCBudW1iZXIsXG5cdFx0c1RvbGVyYW5jZUxvdzogc3RyaW5nIHwgbnVtYmVyLFxuXHRcdHNBY2NlcHRhbmNlTG93OiBzdHJpbmcgfCBudW1iZXIsXG5cdFx0c0FjY2VwdGFuY2VIaWdoOiBzdHJpbmcgfCBudW1iZXIsXG5cdFx0c1RvbGVyYW5jZUhpZ2g6IHN0cmluZyB8IG51bWJlcixcblx0XHRzRGV2aWF0aW9uSGlnaDogc3RyaW5nIHwgbnVtYmVyXG5cdCk6IHN0cmluZyB7XG5cdFx0bGV0IHNDcml0aWNhbGl0eUV4cHJlc3Npb246IHR5cGVvZiBWYWx1ZUNvbG9yIHwgc3RyaW5nID0gVmFsdWVDb2xvci5OZXV0cmFsOyAvLyBEZWZhdWx0IENyaXRpY2FsaXR5IFN0YXRlXG5cblx0XHRzVmFsdWUgPSBgJSR7c1ZhbHVlfWA7XG5cblx0XHQvLyBTZXR0aW5nIFVuYXNzaWduZWQgVmFsdWVzXG5cdFx0c0RldmlhdGlvbkxvdyA9IHNEZXZpYXRpb25Mb3cgfHwgLUluZmluaXR5O1xuXHRcdHNUb2xlcmFuY2VMb3cgPSBzVG9sZXJhbmNlTG93IHx8IHNEZXZpYXRpb25Mb3c7XG5cdFx0c0FjY2VwdGFuY2VMb3cgPSBzQWNjZXB0YW5jZUxvdyB8fCBzVG9sZXJhbmNlTG93O1xuXHRcdHNEZXZpYXRpb25IaWdoID0gc0RldmlhdGlvbkhpZ2ggfHwgSW5maW5pdHk7XG5cdFx0c1RvbGVyYW5jZUhpZ2ggPSBzVG9sZXJhbmNlSGlnaCB8fCBzRGV2aWF0aW9uSGlnaDtcblx0XHRzQWNjZXB0YW5jZUhpZ2ggPSBzQWNjZXB0YW5jZUhpZ2ggfHwgc1RvbGVyYW5jZUhpZ2g7XG5cblx0XHQvLyBEZWFsaW5nIHdpdGggRGVjaW1hbCBhbmQgUGF0aCBiYXNlZCBiaW5nZGluZ3Ncblx0XHRzRGV2aWF0aW9uTG93ID0gc0RldmlhdGlvbkxvdyAmJiAoK3NEZXZpYXRpb25Mb3cgPyArc0RldmlhdGlvbkxvdyA6IGAlJHtzRGV2aWF0aW9uTG93fWApO1xuXHRcdHNUb2xlcmFuY2VMb3cgPSBzVG9sZXJhbmNlTG93ICYmICgrc1RvbGVyYW5jZUxvdyA/ICtzVG9sZXJhbmNlTG93IDogYCUke3NUb2xlcmFuY2VMb3d9YCk7XG5cdFx0c0FjY2VwdGFuY2VMb3cgPSBzQWNjZXB0YW5jZUxvdyAmJiAoK3NBY2NlcHRhbmNlTG93ID8gK3NBY2NlcHRhbmNlTG93IDogYCUke3NBY2NlcHRhbmNlTG93fWApO1xuXHRcdHNBY2NlcHRhbmNlSGlnaCA9IHNBY2NlcHRhbmNlSGlnaCAmJiAoK3NBY2NlcHRhbmNlSGlnaCA/ICtzQWNjZXB0YW5jZUhpZ2ggOiBgJSR7c0FjY2VwdGFuY2VIaWdofWApO1xuXHRcdHNUb2xlcmFuY2VIaWdoID0gc1RvbGVyYW5jZUhpZ2ggJiYgKCtzVG9sZXJhbmNlSGlnaCA/ICtzVG9sZXJhbmNlSGlnaCA6IGAlJHtzVG9sZXJhbmNlSGlnaH1gKTtcblx0XHRzRGV2aWF0aW9uSGlnaCA9IHNEZXZpYXRpb25IaWdoICYmICgrc0RldmlhdGlvbkhpZ2ggPyArc0RldmlhdGlvbkhpZ2ggOiBgJSR7c0RldmlhdGlvbkhpZ2h9YCk7XG5cblx0XHQvLyBDcmVhdGluZyBydW50aW1lIGV4cHJlc3Npb24gYmluZGluZyBmcm9tIGNyaXRpY2FsaXR5IGNhbGN1bGF0aW9uIGZvciBDcml0aWNhbGl0eSBTdGF0ZVxuXHRcdGlmIChzSW1wcm92ZW1lbnREaXJlY3Rpb24uaW5jbHVkZXMoXCJNaW5pbWl6ZVwiKSkge1xuXHRcdFx0c0NyaXRpY2FsaXR5RXhwcmVzc2lvbiA9XG5cdFx0XHRcdFwiez0gXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA8PSBcIiArXG5cdFx0XHRcdHNBY2NlcHRhbmNlSGlnaCArXG5cdFx0XHRcdFwiID8gJ1wiICtcblx0XHRcdFx0VmFsdWVDb2xvci5Hb29kICtcblx0XHRcdFx0XCInIDogXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA8PSBcIiArXG5cdFx0XHRcdHNUb2xlcmFuY2VIaWdoICtcblx0XHRcdFx0XCIgPyAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLk5ldXRyYWwgK1xuXHRcdFx0XHRcIicgOiBcIiArXG5cdFx0XHRcdFwiKFwiICtcblx0XHRcdFx0c0RldmlhdGlvbkhpZ2ggK1xuXHRcdFx0XHRcIiAmJiBcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiIDw9IFwiICtcblx0XHRcdFx0c0RldmlhdGlvbkhpZ2ggK1xuXHRcdFx0XHRcIikgPyAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLkNyaXRpY2FsICtcblx0XHRcdFx0XCInIDogJ1wiICtcblx0XHRcdFx0VmFsdWVDb2xvci5FcnJvciArXG5cdFx0XHRcdFwiJyB9XCI7XG5cdFx0fSBlbHNlIGlmIChzSW1wcm92ZW1lbnREaXJlY3Rpb24uaW5jbHVkZXMoXCJNYXhpbWl6ZVwiKSkge1xuXHRcdFx0c0NyaXRpY2FsaXR5RXhwcmVzc2lvbiA9XG5cdFx0XHRcdFwiez0gXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA+PSBcIiArXG5cdFx0XHRcdHNBY2NlcHRhbmNlTG93ICtcblx0XHRcdFx0XCIgPyAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLkdvb2QgK1xuXHRcdFx0XHRcIicgOiBcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiID49IFwiICtcblx0XHRcdFx0c1RvbGVyYW5jZUxvdyArXG5cdFx0XHRcdFwiID8gJ1wiICtcblx0XHRcdFx0VmFsdWVDb2xvci5OZXV0cmFsICtcblx0XHRcdFx0XCInIDogXCIgK1xuXHRcdFx0XHRcIihcIiArXG5cdFx0XHRcdHNEZXZpYXRpb25Mb3cgK1xuXHRcdFx0XHRcIiAmJiBcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiID49IFwiICtcblx0XHRcdFx0c0RldmlhdGlvbkxvdyArXG5cdFx0XHRcdFwiKSA/ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuQ3JpdGljYWwgK1xuXHRcdFx0XHRcIicgOiAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLkVycm9yICtcblx0XHRcdFx0XCInIH1cIjtcblx0XHR9IGVsc2UgaWYgKHNJbXByb3ZlbWVudERpcmVjdGlvbi5pbmNsdWRlcyhcIlRhcmdldFwiKSkge1xuXHRcdFx0c0NyaXRpY2FsaXR5RXhwcmVzc2lvbiA9XG5cdFx0XHRcdFwiez0gKFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPD0gXCIgK1xuXHRcdFx0XHRzQWNjZXB0YW5jZUhpZ2ggK1xuXHRcdFx0XHRcIiAmJiBcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiID49IFwiICtcblx0XHRcdFx0c0FjY2VwdGFuY2VMb3cgK1xuXHRcdFx0XHRcIikgPyAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLkdvb2QgK1xuXHRcdFx0XHRcIicgOiBcIiArXG5cdFx0XHRcdFwiKChcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiID49IFwiICtcblx0XHRcdFx0c1RvbGVyYW5jZUxvdyArXG5cdFx0XHRcdFwiICYmIFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPCBcIiArXG5cdFx0XHRcdHNBY2NlcHRhbmNlTG93ICtcblx0XHRcdFx0XCIpIHx8IChcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiID4gXCIgK1xuXHRcdFx0XHRzQWNjZXB0YW5jZUhpZ2ggK1xuXHRcdFx0XHRcIiAmJiBcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiIDw9IFwiICtcblx0XHRcdFx0c1RvbGVyYW5jZUhpZ2ggK1xuXHRcdFx0XHRcIikpID8gJ1wiICtcblx0XHRcdFx0VmFsdWVDb2xvci5OZXV0cmFsICtcblx0XHRcdFx0XCInIDogXCIgK1xuXHRcdFx0XHRcIigoXCIgK1xuXHRcdFx0XHRzRGV2aWF0aW9uTG93ICtcblx0XHRcdFx0XCIgJiYgKFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPj0gXCIgK1xuXHRcdFx0XHRzRGV2aWF0aW9uTG93ICtcblx0XHRcdFx0XCIpICYmIChcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiIDwgXCIgK1xuXHRcdFx0XHRzVG9sZXJhbmNlTG93ICtcblx0XHRcdFx0XCIpKSB8fCAoKFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPiBcIiArXG5cdFx0XHRcdHNUb2xlcmFuY2VIaWdoICtcblx0XHRcdFx0XCIpICYmIFwiICtcblx0XHRcdFx0c0RldmlhdGlvbkhpZ2ggK1xuXHRcdFx0XHRcIiAmJiAoXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA8PSBcIiArXG5cdFx0XHRcdHNEZXZpYXRpb25IaWdoICtcblx0XHRcdFx0XCIpKSkgPyAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLkNyaXRpY2FsICtcblx0XHRcdFx0XCInIDogJ1wiICtcblx0XHRcdFx0VmFsdWVDb2xvci5FcnJvciArXG5cdFx0XHRcdFwiJyB9XCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdExvZy53YXJuaW5nKFwiQ2FzZSBub3Qgc3VwcG9ydGVkLCByZXR1cm5pbmcgdGhlIGRlZmF1bHQgVmFsdWUgTmV1dHJhbFwiKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gc0NyaXRpY2FsaXR5RXhwcmVzc2lvbjtcblx0fSxcblx0LyoqXG5cdCAqIFRvIGZldGNoIG1lYXN1cmUgYXR0cmlidXRlIGluZGV4LlxuXHQgKiBAcGFyYW0gaU1lYXN1cmUgQ2hhcnQgQW5ub3RhdGlvbnNcblx0ICogQHBhcmFtIG9DaGFydEFubm90YXRpb25zIENoYXJ0IEFubm90YXRpb25zXG5cdCAqIEBwYXJhbSBpc01pY3JvQ2hhcnQgV2hldGhlciB0aGlzIGlzIGEgbWljcm8gY2hhcnRcblx0ICogQHJldHVybnMgTWVhc3VyZUF0dHJpYnV0ZSBpbmRleC5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdGdldE1lYXN1cmVBdHRyaWJ1dGVJbmRleDogZnVuY3Rpb24gKGlNZWFzdXJlOiBudW1iZXIsIG9DaGFydEFubm90YXRpb25zOiBNZXRhTW9kZWxUeXBlPENoYXJ0PiB8IENoYXJ0LCBpc01pY3JvQ2hhcnQ/OiBib29sZWFuKTogbnVtYmVyIHtcblx0XHRsZXQgYU1lYXN1cmVzLCBzTWVhc3VyZVByb3BlcnR5UGF0aDtcblx0XHRpZiAob0NoYXJ0QW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5sZW5ndGggJiYgb0NoYXJ0QW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5sZW5ndGggPiAwKSB7XG5cdFx0XHRhTWVhc3VyZXMgPSBvQ2hhcnRBbm5vdGF0aW9ucy5NZWFzdXJlcztcblx0XHRcdHNNZWFzdXJlUHJvcGVydHlQYXRoID0gaXNNaWNyb0NoYXJ0XG5cdFx0XHRcdD8gKGFNZWFzdXJlc1tpTWVhc3VyZV0gYXMgUHJvcGVydHlQYXRoKS52YWx1ZVxuXHRcdFx0XHQ6IChhTWVhc3VyZXNbaU1lYXN1cmVdIGFzIE1ldGFNb2RlbE1lYXN1cmUpLiRQcm9wZXJ0eVBhdGg7XG5cdFx0fSBlbHNlIGlmIChvQ2hhcnRBbm5vdGF0aW9ucz8uRHluYW1pY01lYXN1cmVzPy5sZW5ndGggJiYgb0NoYXJ0QW5ub3RhdGlvbnM/LkR5bmFtaWNNZWFzdXJlcz8ubGVuZ3RoID4gMCkge1xuXHRcdFx0YU1lYXN1cmVzID0gKG9DaGFydEFubm90YXRpb25zIGFzIE1ldGFNb2RlbFR5cGU8Q2hhcnQ+KS5EeW5hbWljTWVhc3VyZXM7XG5cdFx0XHRzTWVhc3VyZVByb3BlcnR5UGF0aCA9IGFNZWFzdXJlcz8uW2lNZWFzdXJlXS4kQW5ub3RhdGlvblBhdGg7XG5cdFx0fVxuXHRcdGxldCBiTWVhc3VyZUF0dHJpYnV0ZUV4aXN0cztcblx0XHRjb25zdCBhTWVhc3VyZUF0dHJpYnV0ZXMgPSBvQ2hhcnRBbm5vdGF0aW9ucy5NZWFzdXJlQXR0cmlidXRlcztcblx0XHRsZXQgaU1lYXN1cmVBdHRyaWJ1dGUgPSAtMTtcblx0XHRjb25zdCBmbkNoZWNrTWVhc3VyZSA9IGZ1bmN0aW9uIChcblx0XHRcdHNNZWFzdXJlUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdFx0b01lYXN1cmVBdHRyaWJ1dGU6IE1ldGFNb2RlbFR5cGU8Q2hhcnRNZWFzdXJlQXR0cmlidXRlVHlwZT4gfCBDaGFydE1lYXN1cmVBdHRyaWJ1dGVUeXBlLFxuXHRcdFx0aW5kZXg6IG51bWJlclxuXHRcdCk6IGJvb2xlYW4ge1xuXHRcdFx0aWYgKG9NZWFzdXJlQXR0cmlidXRlKSB7XG5cdFx0XHRcdGNvbnN0IHBhdGggPSBpc01pY3JvQ2hhcnRcblx0XHRcdFx0XHQ/IChvTWVhc3VyZUF0dHJpYnV0ZSBhcyBDaGFydE1lYXN1cmVBdHRyaWJ1dGVUeXBlKS5NZWFzdXJlPy52YWx1ZVxuXHRcdFx0XHRcdDogKG9NZWFzdXJlQXR0cmlidXRlIGFzIE1ldGFNb2RlbFR5cGU8Q2hhcnRNZWFzdXJlQXR0cmlidXRlVHlwZT4pLk1lYXN1cmU/LiRQcm9wZXJ0eVBhdGg7XG5cdFx0XHRcdGlmIChvTWVhc3VyZUF0dHJpYnV0ZS5NZWFzdXJlICYmIHBhdGggPT09IHNNZWFzdXJlUGF0aCkge1xuXHRcdFx0XHRcdGlNZWFzdXJlQXR0cmlidXRlID0gaW5kZXg7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0b01lYXN1cmVBdHRyaWJ1dGUuRHluYW1pY01lYXN1cmUgJiZcblx0XHRcdFx0XHQob01lYXN1cmVBdHRyaWJ1dGUgYXMgTWV0YU1vZGVsVHlwZTxDaGFydE1lYXN1cmVBdHRyaWJ1dGVUeXBlPik/LkR5bmFtaWNNZWFzdXJlPy4kQW5ub3RhdGlvblBhdGggPT09IHNNZWFzdXJlUGF0aFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRpTWVhc3VyZUF0dHJpYnV0ZSA9IGluZGV4O1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcblx0XHRpZiAoYU1lYXN1cmVBdHRyaWJ1dGVzKSB7XG5cdFx0XHRiTWVhc3VyZUF0dHJpYnV0ZUV4aXN0cyA9IGFNZWFzdXJlQXR0cmlidXRlcy5zb21lKGZuQ2hlY2tNZWFzdXJlLmJpbmQobnVsbCwgc01lYXN1cmVQcm9wZXJ0eVBhdGgpKTtcblx0XHR9XG5cdFx0cmV0dXJuIGJNZWFzdXJlQXR0cmlidXRlRXhpc3RzICYmIGlNZWFzdXJlQXR0cmlidXRlID4gLTEgPyBpTWVhc3VyZUF0dHJpYnV0ZSA6IC0xO1xuXHR9LFxuXG5cdGdldE1lYXN1cmVBdHRyaWJ1dGU6IGFzeW5jIGZ1bmN0aW9uIChvQ29udGV4dDogQ29udGV4dCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwsXG5cdFx0XHRzQ2hhcnRBbm5vdGF0aW9uUGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKTtcblx0XHRyZXR1cm4gb01ldGFNb2RlbC5yZXF1ZXN0T2JqZWN0KHNDaGFydEFubm90YXRpb25QYXRoKS50aGVuKGZ1bmN0aW9uIChvQ2hhcnRBbm5vdGF0aW9uczogTWV0YU1vZGVsVHlwZTxDaGFydD4pIHtcblx0XHRcdGNvbnN0IGFNZWFzdXJlQXR0cmlidXRlcyA9IG9DaGFydEFubm90YXRpb25zLk1lYXN1cmVBdHRyaWJ1dGVzLFxuXHRcdFx0XHRpTWVhc3VyZUF0dHJpYnV0ZSA9IENvbW1vbkhlbHBlci5nZXRNZWFzdXJlQXR0cmlidXRlSW5kZXgoMCwgb0NoYXJ0QW5ub3RhdGlvbnMpO1xuXHRcdFx0Y29uc3Qgc01lYXN1cmVBdHRyaWJ1dGVQYXRoID1cblx0XHRcdFx0aU1lYXN1cmVBdHRyaWJ1dGUgPiAtMSAmJiBhTWVhc3VyZUF0dHJpYnV0ZXM/LltpTWVhc3VyZUF0dHJpYnV0ZV0gJiYgYU1lYXN1cmVBdHRyaWJ1dGVzW2lNZWFzdXJlQXR0cmlidXRlXS5EYXRhUG9pbnRcblx0XHRcdFx0XHQ/IGAke3NDaGFydEFubm90YXRpb25QYXRofS9NZWFzdXJlQXR0cmlidXRlcy8ke2lNZWFzdXJlQXR0cmlidXRlfS9gXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRpZiAoc01lYXN1cmVBdHRyaWJ1dGVQYXRoID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0TG9nLndhcm5pbmcoXCJEYXRhUG9pbnQgbWlzc2luZyBmb3IgdGhlIG1lYXN1cmVcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gc01lYXN1cmVBdHRyaWJ1dGVQYXRoID8gYCR7c01lYXN1cmVBdHRyaWJ1dGVQYXRofURhdGFQb2ludC8kQW5ub3RhdGlvblBhdGgvYCA6IHNNZWFzdXJlQXR0cmlidXRlUGF0aDtcblx0XHR9KTtcblx0fSxcblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbWVhc3VyZUF0dHJpYnV0ZSBmb3IgdGhlIG1lYXN1cmUuXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IHRvIHRoZSBtZWFzdXJlIGFubm90YXRpb25cblx0ICogQHJldHVybnMgUGF0aCB0byB0aGUgbWVhc3VyZUF0dHJpYnV0ZSBvZiB0aGUgbWVhc3VyZVxuXHQgKi9cblx0Z2V0TWVhc3VyZUF0dHJpYnV0ZUZvck1lYXN1cmU6IGZ1bmN0aW9uIChvQ29udGV4dDogQ29udGV4dCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwsXG5cdFx0XHRzTWVhc3VyZVBhdGggPSBvQ29udGV4dC5nZXRQYXRoKCksXG5cdFx0XHRzQ2hhcnRBbm5vdGF0aW9uUGF0aCA9IHNNZWFzdXJlUGF0aC5zdWJzdHJpbmcoMCwgc01lYXN1cmVQYXRoLmxhc3RJbmRleE9mKFwiTWVhc3VyZVwiKSksXG5cdFx0XHRpTWVhc3VyZSA9IHNNZWFzdXJlUGF0aC5yZXBsYWNlKC8uKlxcLy8sIFwiXCIpO1xuXG5cdFx0Y29uc3Qgb0NoYXJ0QW5ub3RhdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzQ2hhcnRBbm5vdGF0aW9uUGF0aCk7XG5cdFx0Y29uc3QgYU1lYXN1cmVBdHRyaWJ1dGVzID0gb0NoYXJ0QW5ub3RhdGlvbnMuTWVhc3VyZUF0dHJpYnV0ZXMsXG5cdFx0XHRpTWVhc3VyZUF0dHJpYnV0ZSA9IENvbW1vbkhlbHBlci5nZXRNZWFzdXJlQXR0cmlidXRlSW5kZXgoaU1lYXN1cmUgYXMgdW5rbm93biBhcyBudW1iZXIsIG9DaGFydEFubm90YXRpb25zKTtcblx0XHRjb25zdCBzTWVhc3VyZUF0dHJpYnV0ZVBhdGggPVxuXHRcdFx0aU1lYXN1cmVBdHRyaWJ1dGUgPiAtMSAmJiBhTWVhc3VyZUF0dHJpYnV0ZXNbaU1lYXN1cmVBdHRyaWJ1dGVdICYmIGFNZWFzdXJlQXR0cmlidXRlc1tpTWVhc3VyZUF0dHJpYnV0ZV0uRGF0YVBvaW50XG5cdFx0XHRcdD8gYCR7c0NoYXJ0QW5ub3RhdGlvblBhdGh9TWVhc3VyZUF0dHJpYnV0ZXMvJHtpTWVhc3VyZUF0dHJpYnV0ZX0vYFxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRpZiAoc01lYXN1cmVBdHRyaWJ1dGVQYXRoID09PSB1bmRlZmluZWQpIHtcblx0XHRcdExvZy53YXJuaW5nKFwiRGF0YVBvaW50IG1pc3NpbmcgZm9yIHRoZSBtZWFzdXJlXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gc01lYXN1cmVBdHRyaWJ1dGVQYXRoID8gYCR7c01lYXN1cmVBdHRyaWJ1dGVQYXRofURhdGFQb2ludC8kQW5ub3RhdGlvblBhdGgvYCA6IHNNZWFzdXJlQXR0cmlidXRlUGF0aDtcblx0fSxcblx0LyoqXG5cdCAqIE1ldGhvZCB0byBkZXRlcm1pbmUgaWYgdGhlIGNvbnRhaW5lZCBuYXZpZ2F0aW9uIHByb3BlcnR5IGhhcyBhIGRyYWZ0IHJvb3Qvbm9kZSBwYXJlbnQgZW50aXR5U2V0LlxuXHQgKiBAcGFyYW0gb1RhcmdldENvbGxlY3Rpb25Db250YWluc1RhcmdldCBUYXJnZXQgY29sbGVjdGlvbiBoYXMgQ29udGFpbnNUYXJnZXQgcHJvcGVydHlcblx0ICogQHBhcmFtIG9UYWJsZU1ldGFkYXRhIFRhYmxlIG1ldGFkYXRhIGZvciB3aGljaCBkcmFmdCBzdXBwb3J0IHNoYWxsIGJlIGNoZWNrZWRcblx0ICogQHBhcmFtIG9UYWJsZU1ldGFkYXRhLnBhcmVudEVudGl0eVNldFxuXHQgKiBAcGFyYW0gb1RhYmxlTWV0YWRhdGEucGFyZW50RW50aXR5U2V0Lm9Nb2RlbFxuXHQgKiBAcGFyYW0gb1RhYmxlTWV0YWRhdGEucGFyZW50RW50aXR5U2V0LnNQYXRoXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSBpZiBkcmFmdFxuXHQgKi9cblx0aXNEcmFmdFBhcmVudEVudGl0eUZvckNvbnRhaW5tZW50OiBmdW5jdGlvbiAoXG5cdFx0b1RhcmdldENvbGxlY3Rpb25Db250YWluc1RhcmdldDogb2JqZWN0LFxuXHRcdG9UYWJsZU1ldGFkYXRhOiB7XG5cdFx0XHRwYXJlbnRFbnRpdHlTZXQ/OiB7XG5cdFx0XHRcdG9Nb2RlbDogT0RhdGFNZXRhTW9kZWw7XG5cdFx0XHRcdHNQYXRoPzogc3RyaW5nO1xuXHRcdFx0fTtcblx0XHR9XG5cdCk6IGJvb2xlYW4ge1xuXHRcdGlmIChvVGFyZ2V0Q29sbGVjdGlvbkNvbnRhaW5zVGFyZ2V0KSB7XG5cdFx0XHRpZiAob1RhYmxlTWV0YWRhdGEgJiYgb1RhYmxlTWV0YWRhdGEucGFyZW50RW50aXR5U2V0ICYmIG9UYWJsZU1ldGFkYXRhLnBhcmVudEVudGl0eVNldC5zUGF0aCkge1xuXHRcdFx0XHRjb25zdCBzUGFyZW50RW50aXR5U2V0UGF0aCA9IG9UYWJsZU1ldGFkYXRhLnBhcmVudEVudGl0eVNldC5zUGF0aDtcblx0XHRcdFx0Y29uc3Qgb0RyYWZ0Um9vdCA9IG9UYWJsZU1ldGFkYXRhLnBhcmVudEVudGl0eVNldC5vTW9kZWwuZ2V0T2JqZWN0KFxuXHRcdFx0XHRcdGAke3NQYXJlbnRFbnRpdHlTZXRQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290YFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBvRHJhZnROb2RlID0gb1RhYmxlTWV0YWRhdGEucGFyZW50RW50aXR5U2V0Lm9Nb2RlbC5nZXRPYmplY3QoXG5cdFx0XHRcdFx0YCR7c1BhcmVudEVudGl0eVNldFBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdE5vZGVgXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChvRHJhZnRSb290IHx8IG9EcmFmdE5vZGUpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBFbnN1cmVzIHRoZSBkYXRhIGlzIHByb2Nlc3NlZCBhcyBkZWZpbmVkIGluIHRoZSB0ZW1wbGF0ZS5cblx0ICogU2luY2UgdGhlIHByb3BlcnR5IERhdGEgaXMgb2YgdGhlIHR5cGUgJ29iamVjdCcsIGl0IG1heSBub3QgYmUgaW4gdGhlIHNhbWUgb3JkZXIgYXMgcmVxdWlyZWQgYnkgdGhlIHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZGF0YUVsZW1lbnQgVGhlIGRhdGEgdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkLlxuXHQgKiBAcmV0dXJucyBUaGUgY29ycmVjdCBwYXRoIGFjY29yZGluZyB0byB0aGUgdGVtcGxhdGUuXG5cdCAqL1xuXHRnZXREYXRhRnJvbVRlbXBsYXRlOiBmdW5jdGlvbiAoZGF0YUVsZW1lbnQ6IENvbnRleHQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHNwbGl0UGF0aCA9IGRhdGFFbGVtZW50LmdldFBhdGgoKS5zcGxpdChcIi9cIik7XG5cdFx0Y29uc3QgZGF0YUtleSA9IHNwbGl0UGF0aFtzcGxpdFBhdGgubGVuZ3RoIC0gMV07XG5cdFx0Y29uc3QgY29ubmVjdGVkRGF0YVBhdGggPSBgLyR7c3BsaXRQYXRoLnNsaWNlKDEsIC0yKS5qb2luKFwiL1wiKX0vQGA7XG5cdFx0Y29uc3QgY29ubmVjdGVkT2JqZWN0ID0gZGF0YUVsZW1lbnQuZ2V0T2JqZWN0KGNvbm5lY3RlZERhdGFQYXRoKTtcblx0XHRjb25zdCB0ZW1wbGF0ZSA9IGNvbm5lY3RlZE9iamVjdC5UZW1wbGF0ZTtcblx0XHRjb25zdCBzcGxpdFRlbXAgPSB0ZW1wbGF0ZS5zcGxpdChcIn1cIik7XG5cdFx0Y29uc3QgdGVtcEFycmF5ID0gW107XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzcGxpdFRlbXAubGVuZ3RoIC0gMTsgaSsrKSB7XG5cdFx0XHRjb25zdCBrZXkgPSBzcGxpdFRlbXBbaV0uc3BsaXQoXCJ7XCIpWzFdLnRyaW0oKTtcblx0XHRcdHRlbXBBcnJheS5wdXNoKGtleSk7XG5cdFx0fVxuXHRcdE9iamVjdC5rZXlzKGNvbm5lY3RlZE9iamVjdC5EYXRhKS5mb3JFYWNoKGZ1bmN0aW9uIChzS2V5OiBzdHJpbmcpIHtcblx0XHRcdGlmIChzS2V5LnN0YXJ0c1dpdGgoXCIkXCIpKSB7XG5cdFx0XHRcdGRlbGV0ZSBjb25uZWN0ZWRPYmplY3QuRGF0YVtzS2V5XTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRjb25zdCBpbmRleCA9IE9iamVjdC5rZXlzKGNvbm5lY3RlZE9iamVjdC5EYXRhKS5pbmRleE9mKGRhdGFLZXkpO1xuXHRcdHJldHVybiBgLyR7c3BsaXRQYXRoLnNsaWNlKDEsIC0yKS5qb2luKFwiL1wiKX0vRGF0YS8ke3RlbXBBcnJheVtpbmRleF19YDtcblx0fSxcblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBlbmQgb2YgdGhlIHRlbXBsYXRlIGhhcyBiZWVuIHJlYWNoZWQuXG5cdCAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBvZiB0aGUgY29ubmVjdGVkIGZpZWxkcy5cblx0ICogQHBhcmFtIHRhcmdldC5UZW1wbGF0ZVxuXHQgKiBAcGFyYW0gdGFyZ2V0LkRhdGFcblx0ICogQHBhcmFtIGVsZW1lbnQgVGhlIGVsZW1lbnQgdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkLlxuXHQgKiBAcmV0dXJucyBUcnVlIG9yIEZhbHNlIChkZXBlbmRpbmcgb24gdGhlIHRlbXBsYXRlIGluZGV4KS5cblx0ICovXG5cdG5vdExhc3RJbmRleDogZnVuY3Rpb24gKHRhcmdldDogeyBUZW1wbGF0ZTogc3RyaW5nOyBEYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9LCBlbGVtZW50OiBvYmplY3QpOiBib29sZWFuIHtcblx0XHRjb25zdCB0ZW1wbGF0ZSA9IHRhcmdldC5UZW1wbGF0ZTtcblx0XHRjb25zdCBzcGxpdFRlbXAgPSB0ZW1wbGF0ZS5zcGxpdChcIn1cIik7XG5cdFx0Y29uc3QgdGVtcEFycmF5OiBzdHJpbmdbXSA9IFtdO1xuXHRcdGxldCBpc0xhc3RJbmRleCA9IGZhbHNlO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgc3BsaXRUZW1wLmxlbmd0aCAtIDE7IGkrKykge1xuXHRcdFx0Y29uc3QgZGF0YUtleSA9IHNwbGl0VGVtcFtpXS5zcGxpdChcIntcIilbMV0udHJpbSgpO1xuXHRcdFx0dGVtcEFycmF5LnB1c2goZGF0YUtleSk7XG5cdFx0fVxuXG5cdFx0dGVtcEFycmF5LmZvckVhY2goZnVuY3Rpb24gKHRlbXBsYXRlSW5mbzogc3RyaW5nKSB7XG5cdFx0XHRjb25zdCBsYXN0SW5kZXggPSB0ZW1wQXJyYXkubGVuZ3RoIC0gMTtcblx0XHRcdGlmICh0YXJnZXQuRGF0YVt0ZW1wbGF0ZUluZm9dID09PSBlbGVtZW50ICYmIHRlbXBBcnJheS5pbmRleE9mKHRlbXBsYXRlSW5mbykgPCBsYXN0SW5kZXgpIHtcblx0XHRcdFx0aXNMYXN0SW5kZXggPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBpc0xhc3RJbmRleDtcblx0fSxcblxuXHQvKipcblx0ICogRGV0ZXJtaW5lcyB0aGUgZGVsaW1pdGVyIGZyb20gdGhlIHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gdGVtcGxhdGUgVGhlIHRlbXBsYXRlIHN0cmluZy5cblx0ICogQHJldHVybnMgVGhlIGRlbGltaXRlciBpbiB0aGUgdGVtcGxhdGUgc3RyaW5nLlxuXHQgKi9cblx0Z2V0RGVsaW1pdGVyOiBmdW5jdGlvbiAodGVtcGxhdGU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRlbXBsYXRlLnNwbGl0KFwifVwiKVsxXS5zcGxpdChcIntcIilbMF0udHJpbSgpO1xuXHR9LFxuXG5cdG9NZXRhTW9kZWw6IHVuZGVmaW5lZCBhcyBPRGF0YU1ldGFNb2RlbCB8IHVuZGVmaW5lZCxcblx0c2V0TWV0YU1vZGVsOiBmdW5jdGlvbiAob01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpOiB2b2lkIHtcblx0XHR0aGlzLm9NZXRhTW9kZWwgPSBvTWV0YU1vZGVsO1xuXHR9LFxuXG5cdGdldE1ldGFNb2RlbDogZnVuY3Rpb24gKCk6IE9EYXRhTWV0YU1vZGVsIHtcblx0XHRyZXR1cm4gdGhpcy5vTWV0YU1vZGVsITtcblx0fSxcblxuXHRnZXRQYXJhbWV0ZXJzOiBmdW5jdGlvbiAoc1BhdGg6IHN0cmluZywgbWV0YU1vZGVsPzogT0RhdGFNZXRhTW9kZWwpOiBzdHJpbmdbXSB7XG5cdFx0aWYgKG1ldGFNb2RlbCkge1xuXHRcdFx0Y29uc3Qgb1BhcmFtZXRlckluZm8gPSBDb21tb25VdGlscy5nZXRQYXJhbWV0ZXJJbmZvKG1ldGFNb2RlbCwgc1BhdGgpO1xuXHRcdFx0aWYgKG9QYXJhbWV0ZXJJbmZvLnBhcmFtZXRlclByb3BlcnRpZXMpIHtcblx0XHRcdFx0cmV0dXJuIE9iamVjdC5rZXlzKG9QYXJhbWV0ZXJJbmZvLnBhcmFtZXRlclByb3BlcnRpZXMpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gW107XG5cdH0sXG5cblx0LyoqXG5cdCAqIEJ1aWxkIGFuIGV4cHJlc3Npb24gY2FsbGluZyBhbiBhY3Rpb24gaGFuZGxlciB2aWEgdGhlIEZQTSBoZWxwZXIncyBhY3Rpb25XcmFwcGVyIGZ1bmN0aW9uXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSAnRlBNLmFjdGlvbldyYXBwZXIoKScgZnVuY3Rpb24gaXMgYXZhaWxhYmxlIGF0IHJ1bnRpbWUuXG5cdCAqIEBwYXJhbSBvQWN0aW9uIEFjdGlvbiBtZXRhZGF0YVxuXHQgKiBAcGFyYW0gb0FjdGlvbi5oYW5kbGVyTW9kdWxlIE1vZHVsZSBjb250YWluaW5nIHRoZSBhY3Rpb24gaGFuZGxlciBtZXRob2Rcblx0ICogQHBhcmFtIG9BY3Rpb24uaGFuZGxlck1ldGhvZCBBY3Rpb24gaGFuZGxlciBtZXRob2QgbmFtZVxuXHQgKiBAcGFyYW0gW29UaGlzXSBgdGhpc2AgKGlmIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBhIG1hY3JvKVxuXHQgKiBAcGFyYW0gb1RoaXMuaWQgVGhlIHRhYmxlJ3MgSURcblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuXHQgKiBAcmV0dXJucyBUaGUgYWN0aW9uIHdyYXBwZXIgYmluZGluZ1x0ZXhwcmVzc2lvblxuXHQgKi9cblx0YnVpbGRBY3Rpb25XcmFwcGVyOiBmdW5jdGlvbiAoXG5cdFx0b0FjdGlvbjogQ3VzdG9tQWN0aW9uLFxuXHRcdG9UaGlzOiB7IGlkPzogc3RyaW5nIH0gfCB1bmRlZmluZWQsXG5cdFx0Zm9yQ29udGV4dE1lbnUgPSBmYWxzZVxuXHQpOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdFx0Y29uc3QgYVBhcmFtczogdW5rbm93bltdID0gW3JlZihcIiRldmVudFwiKSwgb0FjdGlvbi5oYW5kbGVyTW9kdWxlLCBvQWN0aW9uLmhhbmRsZXJNZXRob2RdO1xuXG5cdFx0aWYgKG9UaGlzICYmIG9UaGlzLmlkKSB7XG5cdFx0XHRjb25zdCBpbnRlcm5hbE1vZGVsUGF0aCA9ICFmb3JDb250ZXh0TWVudSA/IFwiJHtpbnRlcm5hbD5zZWxlY3RlZENvbnRleHRzfVwiIDogXCIke2ludGVybmFsPmNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHN9XCI7XG5cdFx0XHRjb25zdCBvQWRkaXRpb25hbFBhcmFtcyA9IHsgY29udGV4dHM6IHJlZihpbnRlcm5hbE1vZGVsUGF0aCkgfTtcblx0XHRcdGFQYXJhbXMucHVzaChvQWRkaXRpb25hbFBhcmFtcyk7XG5cdFx0fVxuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihmbihcIkZQTS5hY3Rpb25XcmFwcGVyXCIsIGFQYXJhbXMpKTtcblx0fSxcblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHZhbHVlIHdoZXRoZXIgb3Igbm90IHRoZSBlbGVtZW50IHNob3VsZCBiZSB2aXNpYmxlIGRlcGVuZGluZyBvbiB0aGUgSGlkZGVuIGFubm90YXRpb24uXG5cdCAqIEl0IGlzIGludmVydGVkIGFzIHRoZSBVSSBlbGVtZW50cyBoYXZlIGEgdmlzaWJsZSBwcm9wZXJ0eSBpbnN0ZWFkIG9mIGEgaGlkZGVuIG9uZS5cblx0ICogQHBhcmFtIGRhdGFGaWVsZEFubm90YXRpb25zIFRoZSBkYXRhRmllbGQgb2JqZWN0XG5cdCAqIEByZXR1cm5zIEEgcGF0aCBvciBhIEJvb2xlYW5cblx0ICovXG5cdGdldEhpZGRlblBhdGhFeHByZXNzaW9uOiBmdW5jdGlvbiAoZGF0YUZpZWxkQW5ub3RhdGlvbnM6IFJlY29yZDxzdHJpbmcsIHsgJFBhdGg/OiBzdHJpbmcgfT4pOiBzdHJpbmcgfCBib29sZWFuIHtcblx0XHRpZiAoZGF0YUZpZWxkQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuXCJdICE9PSBudWxsKSB7XG5cdFx0XHRjb25zdCBoaWRkZW4gPSBkYXRhRmllbGRBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5cIl07XG5cdFx0XHRyZXR1cm4gdHlwZW9mIGhpZGRlbiA9PT0gXCJvYmplY3RcIiA/IFwiez0gISR7XCIgKyBoaWRkZW4uJFBhdGggKyBcIn0gfVwiIDogIWhpZGRlbjtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBmZXRjaCB0aGUgY29ycmVjdCBvcGVyYXRvcnMgYmFzZWQgb24gdGhlIGZpbHRlciByZXN0cmljdGlvbnMgdGhhdCBjYW4gYmUgYW5ub3RhdGVkIG9uIGFuIGVudGl0eSBzZXQgb3IgYSBuYXZpZ2F0aW9uIHByb3BlcnR5LlxuXHQgKiBXZSByZXR1cm4gdGhlIGNvcnJlY3Qgb3BlcmF0b3JzIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgcmVzdHJpY3Rpb24gYW5kIGFsc28gY2hlY2sgZm9yIHRoZSBvcGVyYXRvcnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QgdG8gaW5jbHVkZSBvciBleGNsdWRlIHRoZW0uXG5cdCAqIEBwYXJhbSBzUHJvcGVydHkgU3RyaW5nIG5hbWUgb2YgdGhlIHByb3BlcnR5XG5cdCAqIEBwYXJhbSBzRW50aXR5U2V0UGF0aCBTdHJpbmcgcGF0aCB0byB0aGUgZW50aXR5IHNldFxuXHQgKiBAcGFyYW0gb0NvbnRleHQgQ29udGV4dCB1c2VkIGR1cmluZyB0ZW1wbGF0aW5nXG5cdCAqIEBwYXJhbSBzVHlwZSBTdHJpbmcgZGF0YSB0eXBlIG9kIHRoZSBwcm9wZXJ0eSwgZm9yIGV4YW1wbGUgZWRtLkRhdGVcblx0ICogQHBhcmFtIGJVc2VTZW1hbnRpY0RhdGVSYW5nZSBCb29sZWFuIHBhc3NlZCBmcm9tIHRoZSBtYW5pZmVzdCBmb3Igc2VtYW50aWMgZGF0ZSByYW5nZVxuXHQgKiBAcGFyYW0gc2V0dGluZ3MgU3RyaW5naWZpZWQgb2JqZWN0IG9mIHRoZSBwcm9wZXJ0eSBzZXR0aW5ncyBvciBwcm9wZXJ0eSBzZXR0aW5ncyBhcyBhIHdob2xlXG5cdCAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHN0cmluZ3MgcmVwcmVzZW50aW5nIG9wZXJhdG9ycyBmb3IgZmlsdGVyaW5nXG5cdCAqL1xuXHRnZXRPcGVyYXRvcnNGb3JQcm9wZXJ0eTogZnVuY3Rpb24gKFxuXHRcdHNQcm9wZXJ0eTogc3RyaW5nLFxuXHRcdHNFbnRpdHlTZXRQYXRoOiBzdHJpbmcsXG5cdFx0b0NvbnRleHQ6IE9EYXRhTWV0YU1vZGVsLFxuXHRcdHNUeXBlPzogc3RyaW5nLFxuXHRcdGJVc2VTZW1hbnRpY0RhdGVSYW5nZT86IGJvb2xlYW4gfCBzdHJpbmcsXG5cdFx0c2V0dGluZ3M/OiBGaWx0ZXJTZXR0aW5ncyB8IHN0cmluZ1xuXHQpOiBzdHJpbmdbXSB7XG5cdFx0Y29uc3Qgb0ZpbHRlclJlc3RyaWN0aW9ucyA9IENvbW1vblV0aWxzLmdldEZpbHRlclJlc3RyaWN0aW9uc0J5UGF0aChzRW50aXR5U2V0UGF0aCwgb0NvbnRleHQpO1xuXHRcdGNvbnN0IGFFcXVhbHNPcHMgPSBbXCJFUVwiXTtcblx0XHRjb25zdCBhU2luZ2xlUmFuZ2VPcHMgPSBbXCJFUVwiLCBcIkdFXCIsIFwiTEVcIiwgXCJMVFwiLCBcIkdUXCIsIFwiQlRcIiwgXCJORVwiLCBcIk5PVEJUXCIsIFwiTk9UTEVcIiwgXCJOT1RMVFwiLCBcIk5PVEdFXCIsIFwiTk9UR1RcIl07XG5cdFx0Y29uc3QgYVNpbmdsZVJhbmdlRFRCYXNpY09wcyA9IFtcIkVRXCIsIFwiQlRcIl07XG5cdFx0Y29uc3QgYU11bHRpUmFuZ2VPcHMgPSBbXCJFUVwiLCBcIkdFXCIsIFwiTEVcIiwgXCJMVFwiLCBcIkdUXCIsIFwiQlRcIiwgXCJORVwiLCBcIk5PVEJUXCIsIFwiTk9UTEVcIiwgXCJOT1RMVFwiLCBcIk5PVEdFXCIsIFwiTk9UR1RcIl07XG5cdFx0Y29uc3QgYVNlYXJjaEV4cHJlc3Npb25PcHMgPSBbXCJDb250YWluc1wiLCBcIk5vdENvbnRhaW5zXCIsIFwiU3RhcnRzV2l0aFwiLCBcIk5vdFN0YXJ0c1dpdGhcIiwgXCJFbmRzV2l0aFwiLCBcIk5vdEVuZHNXaXRoXCJdO1xuXHRcdGNvbnN0IGFCYXNpY1NlbWFudGljRGF0ZU9wcyA9IFNlbWFudGljRGF0ZU9wZXJhdG9ycy5nZXRCYXNpY1NlbWFudGljRGF0ZU9wZXJhdGlvbnMoKTtcblx0XHRjb25zdCBiU2VtYW50aWNEYXRlUmFuZ2UgPSBiVXNlU2VtYW50aWNEYXRlUmFuZ2UgPT09IFwidHJ1ZVwiIHx8IGJVc2VTZW1hbnRpY0RhdGVSYW5nZSA9PT0gdHJ1ZTtcblx0XHRsZXQgYVNlbWFudGljRGF0ZU9wczogc3RyaW5nW10gPSBbXTtcblx0XHRjb25zdCBvU2V0dGluZ3MgPSBzZXR0aW5ncyAmJiB0eXBlb2Ygc2V0dGluZ3MgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKHNldHRpbmdzKS5jdXN0b21EYXRhIDogc2V0dGluZ3M7XG5cblx0XHQvLyBJbml0aWFsaXplIEVtcHR5L05vdEVtcHR5IG9wZXJhdG9ycyBiYXNlZCBvbiBmaWVsZCB0eXBlIGFuZCBtYW5pZmVzdCBzZXR0aW5nc1xuXHRcdGNvbnN0IGVtcHR5T3BzID0gX2dldEVtcHR5T3BzKHNUeXBlIHx8IFwiXCIsIG9TZXR0aW5ncyk7XG5cblx0XHRpZiAoKG9Db250ZXh0LmdldE9iamVjdChgJHtzRW50aXR5U2V0UGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZXN1bHRDb250ZXh0YCkgYXMgdW5rbm93bikgPT09IHRydWUpIHtcblx0XHRcdHJldHVybiBhRXF1YWxzT3BzO1xuXHRcdH1cblxuXHRcdGlmIChvU2V0dGluZ3MgJiYgb1NldHRpbmdzLm9wZXJhdG9yQ29uZmlndXJhdGlvbiAmJiBvU2V0dGluZ3Mub3BlcmF0b3JDb25maWd1cmF0aW9uLmxlbmd0aCA+IDApIHtcblx0XHRcdGFTZW1hbnRpY0RhdGVPcHMgPSBTZW1hbnRpY0RhdGVPcGVyYXRvcnMuZ2V0RmlsdGVyT3BlcmF0aW9ucyhvU2V0dGluZ3Mub3BlcmF0b3JDb25maWd1cmF0aW9uLCBzVHlwZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFTZW1hbnRpY0RhdGVPcHMgPSBEZWZhdWx0U2VtYW50aWNEYXRlT3BlcmF0b3JzLmdldFNlbWFudGljRGF0ZU9wZXJhdGlvbnMoc1R5cGUpO1xuXHRcdH1cblx0XHQvLyBHZXQgdGhlIGRlZmF1bHQgT3BlcmF0b3JzIGZvciB0aGlzIFByb3BlcnR5IFR5cGVcblx0XHRjb25zdCBhRGVmYXVsdE9wZXJhdG9ycyA9IF9nZXREZWZhdWx0T3BlcmF0b3JzKHNUeXBlKTtcblx0XHRsZXQgc3VwcG9ydGVkT3BlcmF0b3JzID0gYURlZmF1bHRPcGVyYXRvcnM7XG5cdFx0aWYgKGJTZW1hbnRpY0RhdGVSYW5nZSkge1xuXHRcdFx0Y29uc3QgZXh0ZW5kZWRTZW1hbnRpY0RhdGVPcGVyYXRvcnMgPSBFeHRlbmRlZFNlbWFudGljRGF0ZU9wZXJhdG9ycy5nZXRTZW1hbnRpY0RhdGVPcGVyYXRpb25zKCk7XG5cdFx0XHRzdXBwb3J0ZWRPcGVyYXRvcnMgPSBbLi4uYUJhc2ljU2VtYW50aWNEYXRlT3BzLCAuLi5hRGVmYXVsdE9wZXJhdG9ycywgLi4uZXh0ZW5kZWRTZW1hbnRpY0RhdGVPcGVyYXRvcnNdO1xuXHRcdH1cblxuXHRcdGxldCByZXN0cmljdGlvbnM6IHN0cmluZ1tdID0gW107XG5cblx0XHQvLyBJcyB0aGVyZSBhIEZpbHRlciBSZXN0cmljdGlvbiBkZWZpbmVkIGZvciB0aGlzIHByb3BlcnR5P1xuXHRcdGlmIChcblx0XHRcdG9GaWx0ZXJSZXN0cmljdGlvbnMgJiZcblx0XHRcdG9GaWx0ZXJSZXN0cmljdGlvbnMuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zICYmXG5cdFx0XHRvRmlsdGVyUmVzdHJpY3Rpb25zLkZpbHRlckFsbG93ZWRFeHByZXNzaW9uc1tzUHJvcGVydHldXG5cdFx0KSB7XG5cdFx0XHQvLyBFeHRlbmRpbmcgdGhlIGRlZmF1bHQgb3BlcmF0b3JzIGxpc3Qgd2l0aCBTZW1hbnRpYyBEYXRlIG9wdGlvbnMgREFURVJBTkdFLCBEQVRFLCBGUk9NIGFuZCBUT1xuXHRcdFx0Y29uc3Qgc0FsbG93ZWRFeHByZXNzaW9uID0gQ29tbW9uVXRpbHMuZ2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbihvRmlsdGVyUmVzdHJpY3Rpb25zLkZpbHRlckFsbG93ZWRFeHByZXNzaW9uc1tzUHJvcGVydHldKTtcblx0XHRcdC8vIEluIGNhc2UgbW9yZSB0aGFuIG9uZSBBbGxvd2VkIEV4cHJlc3Npb25zIGhhcyBiZWVuIGRlZmluZWQgZm9yIGEgcHJvcGVydHlcblx0XHRcdC8vIGNob29zZSB0aGUgbW9zdCByZXN0cmljdGl2ZSBBbGxvd2VkIEV4cHJlc3Npb25cblxuXHRcdFx0Ly8gTXVsdGlWYWx1ZSBoYXMgc2FtZSBPcGVyYXRvciBhcyBTaW5nbGVWYWx1ZSwgYnV0IHRoZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25lIChtYXhDb25kaXRpb25zKVxuXHRcdFx0c3dpdGNoIChzQWxsb3dlZEV4cHJlc3Npb24pIHtcblx0XHRcdFx0Y2FzZSBcIlNpbmdsZVZhbHVlXCI6XG5cdFx0XHRcdFx0Y29uc3Qgc2luZ2xlVmFsdWVEYXRlT3BzID0gRGVmYXVsdFNlbWFudGljRGF0ZU9wZXJhdG9ycy5nZXRTaW5nbGVWYWx1ZURhdGVPcGVyYXRpb25zKCk7XG5cdFx0XHRcdFx0bGV0IGFTaW5nbGVWYWx1ZU9wczogc3RyaW5nW107XG5cdFx0XHRcdFx0aWYgKHNUeXBlID09PSBcIkVkbS5EYXRlXCIgJiYgYlNlbWFudGljRGF0ZVJhbmdlKSB7XG5cdFx0XHRcdFx0XHRhU2luZ2xlVmFsdWVPcHMgPSBbLi4uc2luZ2xlVmFsdWVEYXRlT3BzLCAuLi5lbXB0eU9wc107XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChzVHlwZSA9PT0gXCJFZG0uRGF0ZVwiIHx8IHNUeXBlID09PSBcIkVkbS5EYXRlVGltZU9mZnNldFwiKSB7XG5cdFx0XHRcdFx0XHRhU2luZ2xlVmFsdWVPcHMgPSBbLi4uYUVxdWFsc09wcywgLi4uZW1wdHlPcHNdOyAvLyBbXCJFUVwiLCBcIkVtcHR5XCIsIFwiTm90RW1wdHlcIl1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0YVNpbmdsZVZhbHVlT3BzID0gYUVxdWFsc09wczsgLy8gW1wiRVFcIl1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmVzdHJpY3Rpb25zID0gX2dldFJlc3RyaWN0aW9ucyhzdXBwb3J0ZWRPcGVyYXRvcnMsIGFTaW5nbGVWYWx1ZU9wcyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJNdWx0aVZhbHVlXCI6XG5cdFx0XHRcdFx0Y29uc3QgbXVsdGlWYWx1ZU9wZXJhdG9ycyA9IFsuLi5hRXF1YWxzT3BzLCBcIkVtcHR5XCIsIFwiTm90RW1wdHlcIl07XG5cdFx0XHRcdFx0cmVzdHJpY3Rpb25zID0gX2dldFJlc3RyaWN0aW9ucyhzdXBwb3J0ZWRPcGVyYXRvcnMsIG11bHRpVmFsdWVPcGVyYXRvcnMpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiU2luZ2xlUmFuZ2VcIjpcblx0XHRcdFx0XHRsZXQgYUV4cHJlc3Npb25PcHM6IHN0cmluZ1tdO1xuXHRcdFx0XHRcdGlmIChiU2VtYW50aWNEYXRlUmFuZ2UgJiYgKHNUeXBlID09PSBcIkVkbS5EYXRlXCIgfHwgc1R5cGUgPT09IFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCIpKSB7XG5cdFx0XHRcdFx0XHQvLyBPbmx5IEVkbS5EYXRlIGFuZCBFZG0uRGF0ZVRpbWVPZmZzZXQgZ2V0IHNlbWFudGljIG9wZXJhdG9yc1xuXHRcdFx0XHRcdFx0YUV4cHJlc3Npb25PcHMgPSBbLi4uYVNlbWFudGljRGF0ZU9wcywgLi4uZW1wdHlPcHNdO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoc1R5cGUgPT09IFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCIpIHtcblx0XHRcdFx0XHRcdGFFeHByZXNzaW9uT3BzID0gWy4uLmFTaW5nbGVSYW5nZURUQmFzaWNPcHMsIC4uLmVtcHR5T3BzXTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKHNUeXBlID09PSBcIkVkbS5EYXRlXCIpIHtcblx0XHRcdFx0XHRcdGFFeHByZXNzaW9uT3BzID0gWy4uLmFTaW5nbGVSYW5nZU9wcywgLi4uZW1wdHlPcHNdO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRhRXhwcmVzc2lvbk9wcyA9IGFTaW5nbGVSYW5nZU9wcztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmVzdHJpY3Rpb25zID0gX2dldFJlc3RyaWN0aW9ucyhzdXBwb3J0ZWRPcGVyYXRvcnMsIGFFeHByZXNzaW9uT3BzKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIk11bHRpUmFuZ2VcIjpcblx0XHRcdFx0XHRjb25zdCBtdWx0aVJhbmdlT3BzID1cblx0XHRcdFx0XHRcdHNUeXBlID09PSBcIkVkbS5EYXRlXCIgfHwgc1R5cGUgPT09IFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCIgPyBbLi4uYU11bHRpUmFuZ2VPcHMsIC4uLmVtcHR5T3BzXSA6IGFNdWx0aVJhbmdlT3BzO1xuXHRcdFx0XHRcdHJlc3RyaWN0aW9ucyA9IF9nZXRSZXN0cmljdGlvbnMoc3VwcG9ydGVkT3BlcmF0b3JzLCBtdWx0aVJhbmdlT3BzKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIlNlYXJjaEV4cHJlc3Npb25cIjpcblx0XHRcdFx0XHRyZXN0cmljdGlvbnMgPSBfZ2V0UmVzdHJpY3Rpb25zKHN1cHBvcnRlZE9wZXJhdG9ycywgYVNlYXJjaEV4cHJlc3Npb25PcHMpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblwiOlxuXHRcdFx0XHRcdHJlc3RyaWN0aW9ucyA9IF9nZXRSZXN0cmljdGlvbnMoc3VwcG9ydGVkT3BlcmF0b3JzLCBhU2VhcmNoRXhwcmVzc2lvbk9wcy5jb25jYXQoYU11bHRpUmFuZ2VPcHMpKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdC8vIEluIGNhc2UgQWxsb3dlZEV4cHJlc3Npb25zIGlzIG5vdCByZWNvZ25pc2VkLCB1bmRlZmluZWQgaW4gcmV0dXJuIHJlc3VsdHMgaW4gdGhlIGRlZmF1bHQgc2V0IG9mXG5cdFx0XHQvLyBvcGVyYXRvcnMgZm9yIHRoZSB0eXBlLlxuXHRcdH1cblx0XHRyZXR1cm4gcmVzdHJpY3Rpb25zO1xuXHR9LFxuXHRnZXRPcGVyYXRvcnNGb3JEYXRlUHJvcGVydHk6IGZ1bmN0aW9uIChwcm9wZXJ0eVR5cGU6IHN0cmluZyk6IHN0cmluZ1tdIHtcblx0XHQvLyBJbiBjYXNlIEFsbG93ZWRFeHByZXNzaW9ucyBpcyBub3QgcHJvdmlkZWQgZm9yIHR5cGUgRWRtLkRhdGUgdGhlbiBhbGwgdGhlIGRlZmF1bHRcblx0XHQvLyBvcGVyYXRvcnMgZm9yIHRoZSB0eXBlIHNob3VsZCBiZSByZXR1cm5lZCBleGNsdWRpbmcgc2VtYW50aWMgb3BlcmF0b3JzIGZyb20gdGhlIGxpc3QuXG5cdFx0Y29uc3QgYURlZmF1bHRPcGVyYXRvcnMgPSBfZ2V0RGVmYXVsdE9wZXJhdG9ycyhwcm9wZXJ0eVR5cGUpO1xuXHRcdGNvbnN0IGFNdWx0aVJhbmdlT3BzID0gW1wiRVFcIiwgXCJHRVwiLCBcIkxFXCIsIFwiTFRcIiwgXCJHVFwiLCBcIkJUXCIsIFwiTkVcIiwgXCJOT1RCVFwiLCBcIk5PVExFXCIsIFwiTk9UTFRcIiwgXCJOT1RHRVwiLCBcIk5PVEdUXCIsIFwiRW1wdHlcIiwgXCJOb3RFbXB0eVwiXTtcblx0XHRyZXR1cm4gX2dldFJlc3RyaWN0aW9ucyhhRGVmYXVsdE9wZXJhdG9ycywgYU11bHRpUmFuZ2VPcHMpO1xuXHR9LFxuXHRnZXRBSUljb246IGZ1bmN0aW9uICgpOiBzdHJpbmcge1xuXHRcdHJldHVybiBhaUljb247XG5cdH1cbn07XG4oQ29tbW9uSGVscGVyLmdldFNvcnRDb25kaXRpb25zIGFzIHsgcmVxdWlyZXNJQ29udGV4dD86IGJvb2xlYW4gfSkucmVxdWlyZXNJQ29udGV4dCA9IHRydWU7XG5cbmV4cG9ydCBkZWZhdWx0IENvbW1vbkhlbHBlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBc0NBLFNBQVNBLGdCQUFnQkEsQ0FBQ0MsV0FBcUIsRUFBRUMsY0FBd0IsRUFBWTtJQUNwRjtJQUNBO0lBQ0EsT0FBT0QsV0FBVyxDQUFDRSxNQUFNLENBQUMsVUFBVUMsUUFBUSxFQUFFO01BQzdDLE9BQU9GLGNBQWMsQ0FBQ0csUUFBUSxDQUFDRCxRQUFRLENBQUM7SUFDekMsQ0FBQyxDQUFDO0VBQ0g7RUFFQSxTQUFTRSxvQkFBb0JBLENBQUNDLGFBQXNCLEVB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QkFBc0IsRUFBRSxHQUFHUyxRQUFRLENBQUM7WUFDMUQsQ0FBQyxNQUFNLElBQUlwUyxLQUFLLEtBQUssVUFBVSxFQUFFO2NBQ2hDdkIsY0FBYyxHQUFHLENBQUMsR0FBR2lULGVBQWUsRUFBRSxHQUFHVSxRQUFRLENBQUM7WUFDbkQsQ0FBQyxNQUFNO2NBQ04zVCxjQUFjLEdBQUdpVCxlQUFlO1lBQ2pDO1lBQ0FrQixZQUFZLEdBQUdyVSxnQkFBZ0IsQ0FBQ2tVLGtCQUFrQixFQUFFaFUsY0FBYyxDQUFDO1lBQ25FO1VBQ0QsS0FBSyxZQUFZO1lBQ2hCLE1BQU0yVSxhQUFhLEdBQ2xCcFQsS0FBSyxLQUFLLFVBQVUsSUFBSUEsS0FBSyxLQUFLLG9CQUFvQixHQUFHLENBQUMsR0FBRzRSLGNBQWMsRUFBRSxHQUFHUSxRQUFRLENBQUMsR0FBR1IsY0FBYztZQUMzR2dCLFlBQVksR0FBR3JVLGdCQUFnQixDQUFDa1Usa0JBQWtCLEVBQUVXLGFBQWEsQ0FBQztZQUNsRTtVQUNELEtBQUssa0JBQWtCO1lBQ3RCUixZQUFZLEdBQUdyVSxnQkFBZ0IsQ0FBQ2tVLGtCQUFrQixFQUFFWixvQkFBb0IsQ0FBQztZQUN6RTtVQUNELEtBQUssOEJBQThCO1lBQ2xDZSxZQUFZLEdBQUdyVSxnQkFBZ0IsQ0FBQ2tVLGtCQUFrQixFQUFFWixvQkFBb0IsQ0FBQ3dCLE1BQU0sQ0FBQ3pCLGNBQWMsQ0FBQyxDQUFDO1lBQ2hHO1VBQ0Q7WUFDQztRQUNGO1FBQ0E7UUFDQTtNQUNEO01BQ0EsT0FBT2dCLFlBQVk7SUFDcEIsQ0FBQztJQUNEVSwyQkFBMkIsRUFBRSxTQUFBQSxDQUFVQyxZQUFvQixFQUFZO01BQ3RFO01BQ0E7TUFDQSxNQUFNZixpQkFBaUIsR0FBRzNULG9CQUFvQixDQUFDMFUsWUFBWSxDQUFDO01BQzVELE1BQU0zQixjQUFjLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDO01BQ25JLE9BQU9yVCxnQkFBZ0IsQ0FBQ2lVLGlCQUFpQixFQUFFWixjQUFjLENBQUM7SUFDM0QsQ0FBQztJQUNENEIsU0FBUyxFQUFFLFNBQUFBLENBQUEsRUFBb0I7TUFDOUIsT0FBT0MsTUFBTTtJQUNkO0VBQ0QsQ0FBQztFQUNBbFQsWUFBWSxDQUFDd0ksaUJBQWlCLENBQW9DMkssZ0JBQWdCLEdBQUcsSUFBSTtFQUFDLE9BRTVFblQsWUFBWTtBQUFBIiwiaWdub3JlTGlzdCI6W119
|
|
868
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZ2V0UmVzdHJpY3Rpb25zIiwiYURlZmF1bHRPcHMiLCJhRXhwcmVzc2lvbk9wcyIsImZpbHRlciIsInNFbGVtZW50IiwiaW5jbHVkZXMiLCJfZ2V0RGVmYXVsdE9wZXJhdG9ycyIsInNQcm9wZXJ0eVR5cGUiLCJvRGF0YUNsYXNzIiwiVHlwZU1hcCIsImdldERhdGFUeXBlQ2xhc3NOYW1lIiwib0Jhc2VUeXBlIiwiZ2V0QmFzZVR5cGUiLCJGaWx0ZXJPcGVyYXRvclV0aWwiLCJnZXRPcGVyYXRvcnNGb3JUeXBlIiwiX2lzT3BlcmF0b3JFeGNsdWRlZEJ5TWFuaWZlc3QiLCJvcGVyYXRvck5hbWUiLCJvU2V0dGluZ3MiLCJvcGVyYXRvckNvbmZpZ3VyYXRpb24iLCJzb21lIiwiY29uZmlnIiwicGF0aCIsImVxdWFscyIsImV4Y2x1ZGUiLCJfZ2V0RW1wdHlPcHMiLCJzVHlwZSIsImJTZW1hbnRpY0RhdGVSYW5nZSIsInJlc3VsdCIsImVtcHR5RXhjbHVkZWQiLCJwdXNoIiwiVmFsdWVDb2xvciIsIm1MaWJyYXJ5IiwiQ29tbW9uSGVscGVyIiwiZ2V0UGF0aFRvS2V5Iiwib0N0eCIsImdldE9iamVjdCIsImdldFBhcmFtZXRlckVkaXRNb2RlIiwidGFyZ2V0Iiwib0ludGVyZmFjZSIsIm9Nb2RlbCIsImNvbnRleHQiLCJnZXRNb2RlbCIsInNQcm9wZXJ0eVBhdGgiLCJnZXRQYXRoIiwib0Fubm90YXRpb25zIiwiZmllbGRDb250cm9sIiwiaW1tdXRhYmxlIiwiY29tcHV0ZWQiLCJzRWRpdE1vZGUiLCJGaWVsZEVkaXRNb2RlIiwiRWRpdGFibGUiLCJSZWFkT25seSIsIiRFbnVtTWVtYmVyIiwiRGlzYWJsZWQiLCIkUGF0aCIsImdldE1ldGFQYXRoIiwidW5kZWZpbmVkIiwiZ2V0TWV0YU1vZGVsSWQiLCJjb252ZXJ0VHlwZXMiLCJnZXRJZCIsImlzRGVza3RvcCIsIkRldmljZSIsInN5c3RlbSIsImRlc2t0b3AiLCJnZXRUYXJnZXRDb2xsZWN0aW9uUGF0aCIsIm5hdkNvbGxlY3Rpb24iLCJzUGF0aCIsIm1vZGVsIiwibWV0YU1vZGVsIiwiaXNBIiwiZ2V0TWV0YU1vZGVsIiwiYVBhcnRzIiwic3BsaXQiLCJzUGFydCIsImVudGl0eVNldCIsImxlbmd0aCIsIm5hdmlnYXRpb25Db2xsZWN0aW9uIiwic2xpY2UiLCJqb2luIiwiaXNQcm9wZXJ0eUZpbHRlcmFibGUiLCJvRGF0YUZpZWxkIiwic2tpcEhpZGRlbkZpbHRlcnMiLCJzUHJvcGVydHlMb2NhdGlvblBhdGgiLCJnZXRMb2NhdGlvbkZvclByb3BlcnR5UGF0aCIsInNQcm9wZXJ0eSIsInJlcGxhY2UiLCIkVHlwZSIsImlMZW5ndGgiLCJzQ29sbGVjdGlvblBhdGgiLCJsYXN0SW5kZXhPZiIsImluZGV4T2YiLCJnb3RvQWN0aW9uUGFyYW1ldGVyIiwib0NvbnRleHQiLCJzUHJvcGVydHlOYW1lIiwiQ29tbW9uVXRpbHMiLCJnZXRQYXJhbWV0ZXJQYXRoIiwiZ2V0RW50aXR5U2V0TmFtZSIsIm9NZXRhTW9kZWwiLCJzRW50aXR5VHlwZSIsIm9FbnRpdHlDb250YWluZXIiLCJrZXkiLCJnZXRBY3Rpb25QYXRoIiwib0FjdGlvbiIsImJSZXR1cm5Pbmx5UGF0aCIsInNBY3Rpb25OYW1lIiwiYkNoZWNrU3RhdGljVmFsdWUiLCJzQ29udGV4dFBhdGgiLCJzRW50aXR5VHlwZU5hbWUiLCJzRW50aXR5TmFtZSIsInNCaW5kaW5nUGFyYW1ldGVyIiwiZ2V0TmF2aWdhdGlvbkNvbnRleHQiLCJPRGF0YU1vZGVsQW5ub3RhdGlvbkhlbHBlciIsImdldE5hdmlnYXRpb25QYXRoIiwiYktlZXBQcm9wZXJ0eSIsImJTdGFydHNXaXRoRW50aXR5VHlwZSIsInN0YXJ0c1dpdGgiLCJwYXJ0Iiwic2hpZnQiLCJwb3AiLCJnZXRBY3Rpb25Db250ZXh0IiwiZ2V0UGF0aFRvQm91bmRBY3Rpb25PdmVybG9hZCIsImFkZFNpbmdsZVF1b3RlcyIsInNWYWx1ZSIsImJFc2NhcGUiLCJlc2NhcGVTaW5nbGVRdW90ZXMiLCJnZW5lcmF0ZUZ1bmN0aW9uIiwic0Z1bmNOYW1lIiwic1BhcmFtcyIsImkiLCJhcmd1bWVudHMiLCJzRnVuY3Rpb24iLCJnZXRIZWFkZXJEYXRhUG9pbnRMaW5rVmlzaWJpbGl0eSIsImlzQ2xpY2thYmxlIiwiY29tcGlsZUV4cHJlc3Npb24iLCJpZkVsc2UiLCJjb25zdGFudCIsImVxdWFsIiwicGF0aEluTW9kZWwiLCJub3RFcXVhbCIsIm9iamVjdFRvU3RyaW5nIiwib1BhcmFtcyIsImlOdW1iZXJPZktleXMiLCJPYmplY3QiLCJrZXlzIiwic0tleSIsInJlbW92ZUVzY2FwZUNoYXJhY3RlcnMiLCJzRXhwcmVzc2lvbiIsInN0cmluZ2lmeU9iamVjdCIsInNTdHJpbmdpZmllZCIsIm9PYmplY3QiLCJKU09OIiwicGFyc2UiLCJBcnJheSIsImlzQXJyYXkiLCJvVUk1T2JqZWN0IiwidWk1b2JqZWN0IiwiYXNzaWduIiwic3RyaW5naWZ5IiwiTG9nIiwiZXJyb3IiLCJFcnJvciIsInN0cmluZ2lmeUN1c3RvbURhdGEiLCJ2RGF0YSIsIkNvbnRleHQiLCJwYXJzZUN1c3RvbURhdGEiLCJoYXNPd25Qcm9wZXJ0eSIsImdldENvbnRleHRQYXRoIiwib1ZhbHVlIiwiZ2V0U29ydENvbmRpdGlvbnMiLCJvUHJlc2VudGF0aW9uVmFyaWFudCIsInNQcmVzZW50YXRpb25WYXJpYW50UGF0aCIsIl9pc1ByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwiU29ydE9yZGVyIiwiYVNvcnRDb25kaXRpb25zIiwic29ydGVycyIsInNFbnRpdHlQYXRoIiwiZm9yRWFjaCIsIm9Db25kaXRpb24iLCJvU29ydFByb3BlcnR5Iiwib1NvcnRlciIsIkR5bmFtaWNQcm9wZXJ0eSIsIiRBbm5vdGF0aW9uUGF0aCIsIk5hbWUiLCJQcm9wZXJ0eSIsIiRQcm9wZXJ0eVBhdGgiLCJuYW1lIiwiZGVzY2VuZGluZyIsIkRlc2NlbmRpbmciLCJhbm5vdGF0aW9uUGF0aCIsImNyZWF0ZVByZXNlbnRhdGlvblBhdGhDb250ZXh0Iiwib1ByZXNlbnRhdGlvbkNvbnRleHQiLCJhUGF0aHMiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImdldFByZXNzSGFuZGxlckZvckRhdGFGaWVsZEZvcklCTiIsInNDb250ZXh0IiwiYk5hdmlnYXRlV2l0aENvbmZpcm1hdGlvbkRpYWxvZyIsImZvckNvbnRleHRNZW51IiwibU5hdmlnYXRpb25QYXJhbWV0ZXJzIiwibmF2aWdhdGlvbkNvbnRleHRzIiwiUmVxdWlyZXNDb250ZXh0IiwiSW5saW5lIiwiYXBwbGljYWJsZVByb3BlcnR5Iiwibm90QXBwbGljYWJsZVByb3BlcnR5IiwiYXBwbGljYWJsZUNvbnRleHRzIiwiU2VtYW50aWNPYmplY3QiLCJBY3Rpb24iLCJub3RBcHBsaWNhYmxlQ29udGV4dHMiLCJsYWJlbCIsIkxhYmVsIiwiTWFwcGluZyIsInNlbWFudGljT2JqZWN0TWFwcGluZyIsImdldEVudGl0eVNldCIsIk1vZGVsSGVscGVyIiwiZ2V0RW50aXR5U2V0UGF0aCIsImdldENyaXRpY2FsaXR5Q2FsY3VsYXRpb25CaW5kaW5nIiwic0ltcHJvdmVtZW50RGlyZWN0aW9uIiwic0RldmlhdGlvbkxvdyIsInNUb2xlcmFuY2VMb3ciLCJzQWNjZXB0YW5jZUxvdyIsInNBY2NlcHRhbmNlSGlnaCIsInNUb2xlcmFuY2VIaWdoIiwic0RldmlhdGlvbkhpZ2giLCJzQ3JpdGljYWxpdHlFeHByZXNzaW9uIiwiTmV1dHJhbCIsIkluZmluaXR5IiwiR29vZCIsIkNyaXRpY2FsIiwid2FybmluZyIsImdldE1lYXN1cmVBdHRyaWJ1dGVJbmRleCIsImlNZWFzdXJlIiwib0NoYXJ0QW5ub3RhdGlvbnMiLCJpc01pY3JvQ2hhcnQiLCJhTWVhc3VyZXMiLCJzTWVhc3VyZVByb3BlcnR5UGF0aCIsIk1lYXN1cmVzIiwidmFsdWUiLCJEeW5hbWljTWVhc3VyZXMiLCJiTWVhc3VyZUF0dHJpYnV0ZUV4aXN0cyIsImFNZWFzdXJlQXR0cmlidXRlcyIsIk1lYXN1cmVBdHRyaWJ1dGVzIiwiaU1lYXN1cmVBdHRyaWJ1dGUiLCJmbkNoZWNrTWVhc3VyZSIsInNNZWFzdXJlUGF0aCIsIm9NZWFzdXJlQXR0cmlidXRlIiwiaW5kZXgiLCJNZWFzdXJlIiwiRHluYW1pY01lYXN1cmUiLCJiaW5kIiwiZ2V0TWVhc3VyZUF0dHJpYnV0ZSIsInNDaGFydEFubm90YXRpb25QYXRoIiwicmVxdWVzdE9iamVjdCIsInRoZW4iLCJzTWVhc3VyZUF0dHJpYnV0ZVBhdGgiLCJEYXRhUG9pbnQiLCJnZXRNZWFzdXJlQXR0cmlidXRlRm9yTWVhc3VyZSIsInN1YnN0cmluZyIsImlzRHJhZnRQYXJlbnRFbnRpdHlGb3JDb250YWlubWVudCIsIm9UYXJnZXRDb2xsZWN0aW9uQ29udGFpbnNUYXJnZXQiLCJvVGFibGVNZXRhZGF0YSIsInBhcmVudEVudGl0eVNldCIsInNQYXJlbnRFbnRpdHlTZXRQYXRoIiwib0RyYWZ0Um9vdCIsIm9EcmFmdE5vZGUiLCJnZXREYXRhRnJvbVRlbXBsYXRlIiwiZGF0YUVsZW1lbnQiLCJzcGxpdFBhdGgiLCJkYXRhS2V5IiwiY29ubmVjdGVkRGF0YVBhdGgiLCJjb25uZWN0ZWRPYmplY3QiLCJ0ZW1wbGF0ZSIsIlRlbXBsYXRlIiwic3BsaXRUZW1wIiwidGVtcEFycmF5IiwidHJpbSIsIkRhdGEiLCJub3RMYXN0SW5kZXgiLCJlbGVtZW50IiwiaXNMYXN0SW5kZXgiLCJ0ZW1wbGF0ZUluZm8iLCJsYXN0SW5kZXgiLCJnZXREZWxpbWl0ZXIiLCJzZXRNZXRhTW9kZWwiLCJnZXRQYXJhbWV0ZXJzIiwib1BhcmFtZXRlckluZm8iLCJnZXRQYXJhbWV0ZXJJbmZvIiwicGFyYW1ldGVyUHJvcGVydGllcyIsImJ1aWxkQWN0aW9uV3JhcHBlciIsIm9UaGlzIiwiYVBhcmFtcyIsInJlZiIsImhhbmRsZXJNb2R1bGUiLCJoYW5kbGVyTWV0aG9kIiwiaWQiLCJpbnRlcm5hbE1vZGVsUGF0aCIsIm9BZGRpdGlvbmFsUGFyYW1zIiwiY29udGV4dHMiLCJmbiIsImdldEhpZGRlblBhdGhFeHByZXNzaW9uIiwiZGF0YUZpZWxkQW5ub3RhdGlvbnMiLCJoaWRkZW4iLCJnZXRPcGVyYXRvcnNGb3JQcm9wZXJ0eSIsInNFbnRpdHlTZXRQYXRoIiwiYlVzZVNlbWFudGljRGF0ZVJhbmdlIiwic2V0dGluZ3MiLCJkYXRhTW9kZWwiLCJNZXRhTW9kZWxDb252ZXJ0ZXIiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJnZXRDb250ZXh0Iiwib0ZpbHRlclJlc3RyaWN0aW9ucyIsIkZpbHRlclJlc3RyaWN0aW9ucyIsImdldEZpbHRlclJlc3RyaWN0aW9uc0J5RGF0YU1vZGVsIiwiYUVxdWFsc09wcyIsImFTaW5nbGVSYW5nZU9wcyIsImFTaW5nbGVSYW5nZURUQmFzaWNPcHMiLCJhTXVsdGlSYW5nZU9wcyIsImFTZWFyY2hFeHByZXNzaW9uT3BzIiwiYUJhc2ljU2VtYW50aWNEYXRlT3BzIiwiU2VtYW50aWNEYXRlT3BlcmF0b3JzIiwiZ2V0QmFzaWNTZW1hbnRpY0RhdGVPcGVyYXRpb25zIiwiYVNlbWFudGljRGF0ZU9wcyIsImN1c3RvbURhdGEiLCJlbXB0eU9wcyIsImdldEZpbHRlck9wZXJhdGlvbnMiLCJEZWZhdWx0U2VtYW50aWNEYXRlT3BlcmF0b3JzIiwiZ2V0U2VtYW50aWNEYXRlT3BlcmF0aW9ucyIsImFEZWZhdWx0T3BlcmF0b3JzIiwic3VwcG9ydGVkT3BlcmF0b3JzIiwiZXh0ZW5kZWRTZW1hbnRpY0RhdGVPcGVyYXRvcnMiLCJFeHRlbmRlZFNlbWFudGljRGF0ZU9wZXJhdG9ycyIsInJlc3RyaWN0aW9ucyIsIkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyIsInNBbGxvd2VkRXhwcmVzc2lvbiIsImdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb24iLCJzaW5nbGVWYWx1ZURhdGVPcHMiLCJnZXRTaW5nbGVWYWx1ZURhdGVPcGVyYXRpb25zIiwiYVNpbmdsZVZhbHVlT3BzIiwibXVsdGlWYWx1ZU9wZXJhdG9ycyIsIm11bHRpUmFuZ2VPcHMiLCJjb25jYXQiLCJnZXRPcGVyYXRvcnNGb3JEYXRlUHJvcGVydHkiLCJwcm9wZXJ0eVR5cGUiLCJnZXRBSUljb24iLCJhaUljb24iLCJyZXF1aXJlc0lDb250ZXh0Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJDb21tb25IZWxwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuXHRDaGFydCxcblx0Q2hhcnRNZWFzdXJlQXR0cmlidXRlVHlwZSxcblx0RGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHREYXRhRmllbGRUeXBlcyxcblx0UHJlc2VudGF0aW9uVmFyaWFudFxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgY29tcGlsZUV4cHJlc3Npb24sIGNvbnN0YW50LCBlcXVhbCwgZm4sIGlmRWxzZSwgbm90RXF1YWwsIHBhdGhJbk1vZGVsLCByZWYgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyU2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5cbmltcG9ydCB0eXBlIHsgUHJvcGVydHlQYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgeyBhaUljb24sIHR5cGUgQ3VzdG9tQWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IEZpbHRlclJlc3RyaWN0aW9ucyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vZmlsdGVyL0ZpbHRlclJlc3RyaWN0aW9uc1wiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgY29udmVydFR5cGVzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgeyBpc1Byb3BlcnR5RmlsdGVyYWJsZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01ldGFNb2RlbEZ1bmN0aW9uXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgKiBhcyBEZWZhdWx0U2VtYW50aWNEYXRlT3BlcmF0b3JzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlckJhci9EZWZhdWx0U2VtYW50aWNEYXRlT3BlcmF0b3JzXCI7XG5pbXBvcnQgRXh0ZW5kZWRTZW1hbnRpY0RhdGVPcGVyYXRvcnMgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyQmFyL0V4dGVuZGVkU2VtYW50aWNEYXRlT3BlcmF0b3JzXCI7XG5pbXBvcnQgU2VtYW50aWNEYXRlT3BlcmF0b3JzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlckJhci9TZW1hbnRpY0RhdGVPcGVyYXRvcnNcIjtcbmltcG9ydCBtTGlicmFyeSBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IERldmljZSBmcm9tIFwic2FwL3VpL0RldmljZVwiO1xuaW1wb3J0IEZpbHRlck9wZXJhdG9yVXRpbCBmcm9tIFwic2FwL3VpL21kYy9jb25kaXRpb24vRmlsdGVyT3BlcmF0b3JVdGlsXCI7XG5pbXBvcnQgRmllbGRFZGl0TW9kZSBmcm9tIFwic2FwL3VpL21kYy9lbnVtcy9GaWVsZEVkaXRNb2RlXCI7XG5pbXBvcnQgVHlwZU1hcCBmcm9tIFwic2FwL3VpL21kYy9vZGF0YS92NC9UeXBlTWFwXCI7XG5pbXBvcnQgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBPRGF0YU1vZGVsQW5ub3RhdGlvbkhlbHBlciBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0Fubm90YXRpb25IZWxwZXJcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vdHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5cbnR5cGUgTWV0YU1vZGVsTWVhc3VyZSA9IHtcblx0JFByb3BlcnR5UGF0aDogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gX2dldFJlc3RyaWN0aW9ucyhhRGVmYXVsdE9wczogc3RyaW5nW10sIGFFeHByZXNzaW9uT3BzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcblx0Ly8gRnJvbSB0aGUgZGVmYXVsdCBzZXQgb2YgT3BlcmF0b3JzIGZvciB0aGUgQmFzZSBUeXBlLCBzZWxlY3QgdGhvc2UgdGhhdCBhcmUgZGVmaW5lZCBpbiB0aGUgQWxsb3dlZCBWYWx1ZS5cblx0Ly8gSW4gY2FzZSB0aGF0IG5vIG9wZXJhdG9ycyBhcmUgZm91bmQsIHJldHVybiB1bmRlZmluZWQgc28gdGhhdCB0aGUgZGVmYXVsdCBzZXQgaXMgdXNlZC5cblx0cmV0dXJuIGFEZWZhdWx0T3BzLmZpbHRlcihmdW5jdGlvbiAoc0VsZW1lbnQpIHtcblx0XHRyZXR1cm4gYUV4cHJlc3Npb25PcHMuaW5jbHVkZXMoc0VsZW1lbnQpO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gX2dldERlZmF1bHRPcGVyYXRvcnMoc1Byb3BlcnR5VHlwZT86IHN0cmluZyk6IHN0cmluZ1tdIHtcblx0Ly8gbWRjIGRlZmluZXMgdGhlIGZ1bGwgc2V0IG9mIG9wZXJhdGlvbnMgdGhhdCBhcmUgbWVhbmluZ2Z1bCBmb3IgZWFjaCBFZG0gVHlwZVxuXHQvLyBUT0RPIFJlcGxhY2Ugd2l0aCBtb2RlbCAvIGludGVybmFsIHdheSBvZiByZXRyaWV2aW5nIHRoZSBhY3R1YWwgbW9kZWwgdHlwZSB1c2VkIGZvciB0aGUgcHJvcGVydHlcblx0Y29uc3Qgb0RhdGFDbGFzcyA9IFR5cGVNYXAuZ2V0RGF0YVR5cGVDbGFzc05hbWUoc1Byb3BlcnR5VHlwZSk7XG5cdC8vIFRPRE8gbmVlZCB0byBwYXNzIHByb3BlciBmb3JtYXRPcHRpb25zLCBjb25zdHJhaW50cyBoZXJlXG5cdGNvbnN0IG9CYXNlVHlwZSA9IFR5cGVNYXAuZ2V0QmFzZVR5cGUob0RhdGFDbGFzcywge30sIHt9KTtcblx0cmV0dXJuIEZpbHRlck9wZXJhdG9yVXRpbC5nZXRPcGVyYXRvcnNGb3JUeXBlKG9CYXNlVHlwZSk7XG59XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIGFuIG9wZXJhdG9yIGlzIGV4Y2x1ZGVkIGJ5IG1hbmlmZXN0IGNvbmZpZ3VyYXRpb24uXG4gKiBAcGFyYW0gb3BlcmF0b3JOYW1lIFRoZSBvcGVyYXRvciBuYW1lIHRvIGNoZWNrXG4gKiBAcGFyYW0gb1NldHRpbmdzIFRoZSBzZXR0aW5ncyBvYmplY3QgY29udGFpbmluZyBvcGVyYXRvciBjb25maWd1cmF0aW9uXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBvcGVyYXRvciBpcyBleGNsdWRlZCwgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmZ1bmN0aW9uIF9pc09wZXJhdG9yRXhjbHVkZWRCeU1hbmlmZXN0KG9wZXJhdG9yTmFtZTogc3RyaW5nLCBvU2V0dGluZ3M6IEZpbHRlclNldHRpbmdzIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG5cdGlmICghb1NldHRpbmdzPy5vcGVyYXRvckNvbmZpZ3VyYXRpb24pIHJldHVybiBmYWxzZTtcblxuXHRyZXR1cm4gb1NldHRpbmdzLm9wZXJhdG9yQ29uZmlndXJhdGlvbi5zb21lKFxuXHRcdChjb25maWcpID0+IGNvbmZpZy5wYXRoID09PSBcImtleVwiICYmIGNvbmZpZy5lcXVhbHMgPT09IG9wZXJhdG9yTmFtZSAmJiBjb25maWcuZXhjbHVkZSA9PT0gdHJ1ZVxuXHQpO1xufVxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBnZXQgRW1wdHkgb3BlcmF0b3JzIHdpdGggbWFuaWZlc3QgY29uZmlndXJhdGlvbiBzdXBwb3J0LlxuICogQHBhcmFtIHNUeXBlIFRoZSBmaWVsZCB0eXBlXG4gKiBAcGFyYW0gb1NldHRpbmdzIFRoZSBzZXR0aW5ncyBvYmplY3QgY29udGFpbmluZyBvcGVyYXRvciBjb25maWd1cmF0aW9uXG4gKiBAcGFyYW0gYlNlbWFudGljRGF0ZVJhbmdlIEZsYWcgaW5kaWNhdGluZyBpZiBzZW1hbnRpYyBkYXRlIHJhbmdlIGlzIHVzZWRcbiAqIEByZXR1cm5zIEFycmF5IG9mIEVtcHR5L05vdEVtcHR5IG9wZXJhdG9ycyBpZiBub3QgZXhjbHVkZWQgYnkgbWFuaWZlc3RcbiAqL1xuZnVuY3Rpb24gX2dldEVtcHR5T3BzKHNUeXBlOiBzdHJpbmcsIG9TZXR0aW5nczogRmlsdGVyU2V0dGluZ3MgfCB1bmRlZmluZWQsIGJTZW1hbnRpY0RhdGVSYW5nZTogYm9vbGVhbik6IHN0cmluZ1tdIHtcblx0Ly8gT25seSByZXR1cm4gRW1wdHkgZm9yIGRhdGUgdHlwZXNcblx0aWYgKChzVHlwZSAhPT0gXCJFZG0uRGF0ZVwiICYmIHNUeXBlICE9PSBcIkVkbS5EYXRlVGltZU9mZnNldFwiKSB8fCAhYlNlbWFudGljRGF0ZVJhbmdlKSB7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cdGNvbnN0IHJlc3VsdDogc3RyaW5nW10gPSBbXTtcblx0Ly8gQ2hlY2sgbWFuaWZlc3QgY29uZmlndXJhdGlvbiBhbmQgYWRkIG9wZXJhdG9yc1xuXHRjb25zdCBlbXB0eUV4Y2x1ZGVkID0gX2lzT3BlcmF0b3JFeGNsdWRlZEJ5TWFuaWZlc3QoXCJFbXB0eVwiLCBvU2V0dGluZ3MpO1xuXHRpZiAoIWVtcHR5RXhjbHVkZWQpIHtcblx0XHRyZXN1bHQucHVzaChcIkVtcHR5XCIpO1xuXHR9XG5cdHJldHVybiByZXN1bHQ7XG59XG5cbmNvbnN0IFZhbHVlQ29sb3IgPSBtTGlicmFyeS5WYWx1ZUNvbG9yO1xuY29uc3QgQ29tbW9uSGVscGVyID0ge1xuXHRnZXRQYXRoVG9LZXk6IGZ1bmN0aW9uIChvQ3R4OiBDb250ZXh0KTogb2JqZWN0IHtcblx0XHRyZXR1cm4gb0N0eC5nZXRPYmplY3QoKTtcblx0fSxcblxuXHQvKipcblx0ICogRGV0ZXJtaW5lIGlmIGZpZWxkIGlzIGVkaXRhYmxlLlxuXHQgKiBAcGFyYW0gdGFyZ2V0IFRhcmdldCBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gb0ludGVyZmFjZSBJbnRlcmZhY2UgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgQSBCaW5kaW5nIEV4cHJlc3Npb24gdG8gZGV0ZXJtaW5lIGlmIGEgZmllbGQgc2hvdWxkIGJlIGVkaXRhYmxlIG9yIG5vdC5cblx0ICovXG5cdGdldFBhcmFtZXRlckVkaXRNb2RlOiBmdW5jdGlvbiAodGFyZ2V0OiBvYmplY3QsIG9JbnRlcmZhY2U6IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgb01vZGVsID0gb0ludGVyZmFjZS5jb250ZXh0LmdldE1vZGVsKCksXG5cdFx0XHRzUHJvcGVydHlQYXRoID0gb0ludGVyZmFjZS5jb250ZXh0LmdldFBhdGgoKSxcblx0XHRcdG9Bbm5vdGF0aW9ucyA9IG9Nb2RlbC5nZXRPYmplY3QoYCR7c1Byb3BlcnR5UGF0aH1AYCksXG5cdFx0XHRmaWVsZENvbnRyb2wgPSBvQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpZWxkQ29udHJvbFwiXSxcblx0XHRcdGltbXV0YWJsZSA9IG9Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ29yZS5WMS5JbW11dGFibGVcIl0sXG5cdFx0XHRjb21wdXRlZCA9IG9Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ29yZS5WMS5Db21wdXRlZFwiXTtcblxuXHRcdGxldCBzRWRpdE1vZGU6IEZpZWxkRWRpdE1vZGUgfCBzdHJpbmcgPSBGaWVsZEVkaXRNb2RlLkVkaXRhYmxlO1xuXG5cdFx0aWYgKGltbXV0YWJsZSB8fCBjb21wdXRlZCkge1xuXHRcdFx0c0VkaXRNb2RlID0gRmllbGRFZGl0TW9kZS5SZWFkT25seTtcblx0XHR9IGVsc2UgaWYgKGZpZWxkQ29udHJvbCkge1xuXHRcdFx0aWYgKGZpZWxkQ29udHJvbC4kRW51bU1lbWJlcikge1xuXHRcdFx0XHRpZiAoZmllbGRDb250cm9sLiRFbnVtTWVtYmVyID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWVsZENvbnRyb2xUeXBlL1JlYWRPbmx5XCIpIHtcblx0XHRcdFx0XHRzRWRpdE1vZGUgPSBGaWVsZEVkaXRNb2RlLlJlYWRPbmx5O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRmaWVsZENvbnRyb2wuJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpZWxkQ29udHJvbFR5cGUvSW5hcHBsaWNhYmxlXCIgfHxcblx0XHRcdFx0XHRmaWVsZENvbnRyb2wuJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpZWxkQ29udHJvbFR5cGUvSGlkZGVuXCJcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0c0VkaXRNb2RlID0gRmllbGRFZGl0TW9kZS5EaXNhYmxlZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGZpZWxkQ29udHJvbC4kUGF0aCkge1xuXHRcdFx0XHRzRWRpdE1vZGUgPVxuXHRcdFx0XHRcdFwiez0gJXtcIiArXG5cdFx0XHRcdFx0ZmllbGRDb250cm9sLiRQYXRoICtcblx0XHRcdFx0XHRcIn0gPCAzID8gKCV7XCIgK1xuXHRcdFx0XHRcdGZpZWxkQ29udHJvbC4kUGF0aCArXG5cdFx0XHRcdFx0XCJ9ID09PSAwID8gJ1wiICtcblx0XHRcdFx0XHRGaWVsZEVkaXRNb2RlLkRpc2FibGVkICtcblx0XHRcdFx0XHRcIicgOiAnXCIgK1xuXHRcdFx0XHRcdEZpZWxkRWRpdE1vZGUuUmVhZE9ubHkgK1xuXHRcdFx0XHRcdFwiJykgOiAnXCIgK1xuXHRcdFx0XHRcdEZpZWxkRWRpdE1vZGUuRWRpdGFibGUgK1xuXHRcdFx0XHRcdFwiJ31cIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gc0VkaXRNb2RlO1xuXHR9LFxuXHQvKipcblx0ICogR2V0IHRoZSBjb21wbGV0ZSBtZXRhcGF0aCB0byB0aGUgdGFyZ2V0LlxuXHQgKiBAcGFyYW0gdGFyZ2V0XG5cdCAqIEBwYXJhbSBvSW50ZXJmYWNlXG5cdCAqIEByZXR1cm5zIFRoZSBtZXRhcGF0aFxuXHQgKi9cblx0Z2V0TWV0YVBhdGg6IGZ1bmN0aW9uICh0YXJnZXQ6IHVua25vd24sIG9JbnRlcmZhY2U6IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIChvSW50ZXJmYWNlICYmIG9JbnRlcmZhY2UuY29udGV4dCAmJiBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0UGF0aCgpKSB8fCB1bmRlZmluZWQ7XG5cdH0sXG5cdGdldE1ldGFNb2RlbElkOiBmdW5jdGlvbiAodGFyZ2V0OiBDb250ZXh0LCBvSW50ZXJmYWNlOiBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2UpOiBzdHJpbmcge1xuXHRcdGNvbnZlcnRUeXBlcyhvSW50ZXJmYWNlLmNvbnRleHQuZ2V0TW9kZWwoKSk7XG5cdFx0cmV0dXJuIG9JbnRlcmZhY2UuY29udGV4dC5nZXRNb2RlbCgpLmdldElkKCk7XG5cdH0sXG5cdGlzRGVza3RvcDogZnVuY3Rpb24gKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBEZXZpY2Uuc3lzdGVtLmRlc2t0b3AgPT09IHRydWU7XG5cdH0sXG5cdGdldFRhcmdldENvbGxlY3Rpb25QYXRoOiBmdW5jdGlvbiAoY29udGV4dDogQ29udGV4dCwgbmF2Q29sbGVjdGlvbj86IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0bGV0IHNQYXRoID0gY29udGV4dC5nZXRQYXRoKCk7XG5cdFx0aWYgKFxuXHRcdFx0KGNvbnRleHQuZ2V0T2JqZWN0KFwiJGtpbmRcIikgYXMgdW5rbm93biBhcyBzdHJpbmcpID09PSBcIkVudGl0eVNldFwiIHx8XG5cdFx0XHQoY29udGV4dC5nZXRPYmplY3QoXCIkQ29udGFpbnNUYXJnZXRcIikgYXMgdW5rbm93biBhcyBib29sZWFuKSA9PT0gdHJ1ZVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIHNQYXRoO1xuXHRcdH1cblxuXHRcdGNvbnN0IG1vZGVsID0gY29udGV4dC5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwgfCBPRGF0YU1ldGFNb2RlbDtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSBtb2RlbC5pc0E8T0RhdGFNZXRhTW9kZWw+KFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTWV0YU1vZGVsXCIpID8gbW9kZWwgOiBtb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0XHRzUGF0aCA9IG1ldGFNb2RlbC5nZXRNZXRhUGF0aChzUGF0aCk7XG5cblx0XHQvL1N1cHBvcnRpbmcgc1BhdGggb2YgYW55IGZvcm1hdCwgZWl0aGVyICcvPGVudGl0eVNldD4vPG5hdmlnYXRpb25Db2xsZWN0aW9uPicgPE9SPiAnLzxlbnRpdHlTZXQ+LyRUeXBlLzxuYXZpZ2F0aW9uQ29sbGVjdGlvbj4nXG5cdFx0Y29uc3QgYVBhcnRzID0gc1BhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihmdW5jdGlvbiAoc1BhcnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdFx0cmV0dXJuICEhc1BhcnQgJiYgc1BhcnQgIT0gXCIkVHlwZVwiO1xuXHRcdH0pOyAvL2ZpbHRlciBvdXQgZW1wdHkgc3RyaW5ncyBhbmQgcGFydHMgcmVmZXJyaW5nIHRvICckVHlwZSdcblx0XHRjb25zdCBlbnRpdHlTZXQgPSBgLyR7YVBhcnRzWzBdfWA7XG5cdFx0aWYgKGFQYXJ0cy5sZW5ndGggPT09IDEpIHtcblx0XHRcdHJldHVybiBlbnRpdHlTZXQ7XG5cdFx0fVxuXHRcdGNvbnN0IG5hdmlnYXRpb25Db2xsZWN0aW9uID0gbmF2Q29sbGVjdGlvbiA9PT0gdW5kZWZpbmVkID8gYVBhcnRzLnNsaWNlKDEpLmpvaW4oXCIvJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcvXCIpIDogbmF2Q29sbGVjdGlvbjtcblx0XHRyZXR1cm4gYCR7ZW50aXR5U2V0fS8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZy8ke25hdmlnYXRpb25Db2xsZWN0aW9ufWA7IC8vIHVzZWQgaW4gZ290b1RhcmdldEVudGl0eVNldCBtZXRob2QgaW4gdGhlIHNhbWUgZmlsZVxuXHR9LFxuXG5cdGlzUHJvcGVydHlGaWx0ZXJhYmxlOiBmdW5jdGlvbiAoXG5cdFx0Y29udGV4dDogQ29udGV4dCxcblx0XHRvRGF0YUZpZWxkPzogTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRUeXBlcz4sXG5cdFx0c2tpcEhpZGRlbkZpbHRlcnM/OiBib29sZWFuXG5cdCk6IGJvb2xlYW4gfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdFx0Y29uc3Qgb01vZGVsID0gY29udGV4dC5nZXRNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0c1Byb3BlcnR5UGF0aCA9IGNvbnRleHQuZ2V0UGF0aCgpLFxuXHRcdFx0Ly8gTG9hY2F0aW9uUGF0aCB3b3VsZCBiZSB0aGUgcHJlZml4IG9mIHNQcm9wZXJ0eVBhdGgsIGV4YW1wbGU6IHNQcm9wZXJ0eVBhdGggPSAnL0N1c3RvbWVyL1NldC9OYW1lJyAtPiBzUHJvcGVydHlMb2NhdGlvblBhdGggPSAnL0N1c3RvbWVyL1NldCdcblx0XHRcdHNQcm9wZXJ0eUxvY2F0aW9uUGF0aCA9IENvbW1vbkhlbHBlci5nZXRMb2NhdGlvbkZvclByb3BlcnR5UGF0aChvTW9kZWwsIHNQcm9wZXJ0eVBhdGgpLFxuXHRcdFx0c1Byb3BlcnR5ID0gc1Byb3BlcnR5UGF0aC5yZXBsYWNlKGAke3NQcm9wZXJ0eUxvY2F0aW9uUGF0aH0vYCwgXCJcIik7XG5cblx0XHRpZiAoXG5cdFx0XHRvRGF0YUZpZWxkICYmXG5cdFx0XHQob0RhdGFGaWVsZC4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb25cIiB8fFxuXHRcdFx0XHRvRGF0YUZpZWxkLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblwiKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiBpc1Byb3BlcnR5RmlsdGVyYWJsZShvTW9kZWwsIHNQcm9wZXJ0eUxvY2F0aW9uUGF0aCwgc1Byb3BlcnR5LCBza2lwSGlkZGVuRmlsdGVycyk7XG5cdH0sXG5cblx0Z2V0TG9jYXRpb25Gb3JQcm9wZXJ0eVBhdGg6IGZ1bmN0aW9uIChvTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzUHJvcGVydHlQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGxldCBpTGVuZ3RoO1xuXHRcdGxldCBzQ29sbGVjdGlvblBhdGggPSBzUHJvcGVydHlQYXRoLnNsaWNlKDAsIHNQcm9wZXJ0eVBhdGgubGFzdEluZGV4T2YoXCIvXCIpKTtcblx0XHRpZiAob01vZGVsLmdldE9iamVjdChgJHtzQ29sbGVjdGlvblBhdGh9LyRraW5kYCkgPT09IFwiRW50aXR5Q29udGFpbmVyXCIpIHtcblx0XHRcdGlMZW5ndGggPSBzQ29sbGVjdGlvblBhdGgubGVuZ3RoICsgMTtcblx0XHRcdHNDb2xsZWN0aW9uUGF0aCA9IHNQcm9wZXJ0eVBhdGguc2xpY2UoaUxlbmd0aCwgc1Byb3BlcnR5UGF0aC5pbmRleE9mKFwiL1wiLCBpTGVuZ3RoKSk7XG5cdFx0fVxuXHRcdHJldHVybiBzQ29sbGVjdGlvblBhdGg7XG5cdH0sXG5cdGdvdG9BY3Rpb25QYXJhbWV0ZXI6IGZ1bmN0aW9uIChvQ29udGV4dDogQ29udGV4dCk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgc1BhdGggPSBvQ29udGV4dC5nZXRQYXRoKCksXG5cdFx0XHRzUHJvcGVydHlOYW1lID0gb0NvbnRleHQuZ2V0T2JqZWN0KGAke3NQYXRofS8kTmFtZWApO1xuXG5cdFx0cmV0dXJuIENvbW1vblV0aWxzLmdldFBhcmFtZXRlclBhdGgoc1BhdGgsIHNQcm9wZXJ0eU5hbWUpO1xuXHR9LFxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgZW50aXR5IHNldCBuYW1lIGZyb20gdGhlIGVudGl0eSB0eXBlIG5hbWUuXG5cdCAqIEBwYXJhbSBvTWV0YU1vZGVsIE9EYXRhIHY0IG1ldGFtb2RlbCBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gc0VudGl0eVR5cGUgRW50aXR5VHlwZSBvZiB0aGUgYWN0aW9tXG5cdCAqIEByZXR1cm5zIFRoZSBFbnRpdHlTZXQgb2YgdGhlIGJvdW5kIGFjdGlvblxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0Z2V0RW50aXR5U2V0TmFtZTogZnVuY3Rpb24gKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzRW50aXR5VHlwZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBvRW50aXR5Q29udGFpbmVyID0gb01ldGFNb2RlbC5nZXRPYmplY3QoXCIvXCIpO1xuXHRcdGZvciAoY29uc3Qga2V5IGluIG9FbnRpdHlDb250YWluZXIpIHtcblx0XHRcdGlmICh0eXBlb2Ygb0VudGl0eUNvbnRhaW5lcltrZXldID09PSBcIm9iamVjdFwiICYmIG9FbnRpdHlDb250YWluZXJba2V5XS4kVHlwZSA9PT0gc0VudGl0eVR5cGUpIHtcblx0XHRcdFx0cmV0dXJuIGtleTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fSxcblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIG1ldGFtb2RlbCBwYXRoIGNvcnJlY3RseSBmb3IgYm91bmQgYWN0aW9ucyBpZiB1c2VkIHdpdGggYlJldHVybk9ubHlQYXRoIGFzIHRydWUsXG5cdCAqIGVsc2UgcmV0dXJucyBhbiBvYmplY3Qgd2hpY2ggaGFzIDMgcHJvcGVydGllcyByZWxhdGVkIHRvIHRoZSBhY3Rpb24uIFRoZXkgYXJlIHRoZSBlbnRpdHkgc2V0IG5hbWUsXG5cdCAqIHRoZSAkUGF0aCB2YWx1ZSBvZiB0aGUgT3BlcmF0aW9uQXZhaWxhYmxlIGFubm90YXRpb24gYW5kIHRoZSBiaW5kaW5nIHBhcmFtZXRlciBuYW1lLiBJZlxuXHQgKiBiQ2hlY2tTdGF0aWNWYWx1ZSBpcyB0cnVlLCByZXR1cm5zIHRoZSBzdGF0aWMgdmFsdWUgb2YgT3BlcmF0aW9uQXZhaWxhYmxlIGFubm90YXRpb24sIGlmIHByZXNlbnQuXG5cdCAqIGUuZy4gZm9yIGJvdW5kIGFjdGlvbiBzb21lTmFtZVNwYWNlLlNvbWVCb3VuZEFjdGlvblxuXHQgKiBvZiBlbnRpdHkgc2V0IFNvbWVFbnRpdHlTZXQsIHRoZSBzdHJpbmcgXCIvU29tZUVudGl0eVNldC9zb21lTmFtZVNwYWNlLlNvbWVCb3VuZEFjdGlvblwiIGlzIHJldHVybmVkLlxuXHQgKiBAcGFyYW0gb0FjdGlvbiBUaGUgY29udGV4dCBvYmplY3Qgb2YgdGhlIGFjdGlvblxuXHQgKiBAcGFyYW0gYlJldHVybk9ubHlQYXRoIElmIGZhbHNlLCBhZGRpdGlvbmFsIGluZm8gaXMgcmV0dXJuZWQgYWxvbmcgd2l0aCBtZXRhbW9kZWwgcGF0aCB0byB0aGUgYm91bmQgYWN0aW9uXG5cdCAqIEBwYXJhbSBzQWN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgYm91bmQgYWN0aW9uIG9mIHRoZSBmb3JtIHNvbWVOYW1lU3BhY2UuU29tZUJvdW5kQWN0aW9uXG5cdCAqIEBwYXJhbSBiQ2hlY2tTdGF0aWNWYWx1ZSBJZiB0cnVlLCB0aGUgc3RhdGljIHZhbHVlIG9mIE9wZXJhdGlvbkF2YWlsYWJsZSBpcyByZXR1cm5lZCwgaWYgcHJlc2VudFxuXHQgKiBAcmV0dXJucyBUaGUgc3RyaW5nIG9yIG9iamVjdCBhcyBzcGVjaWZpZWQgYnkgYlJldHVybk9ubHlQYXRoXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRnZXRBY3Rpb25QYXRoOiBmdW5jdGlvbiAoXG5cdFx0b0FjdGlvbjogQ29udGV4dCxcblx0XHRiUmV0dXJuT25seVBhdGg6IGJvb2xlYW4sXG5cdFx0c0FjdGlvbk5hbWU/OiBzdHJpbmcsXG5cdFx0YkNoZWNrU3RhdGljVmFsdWU/OiBib29sZWFuXG5cdCk6XG5cdFx0fCBzdHJpbmdcblx0XHR8IHtcblx0XHRcdFx0c0NvbnRleHRQYXRoOiBzdHJpbmc7XG5cdFx0XHRcdHNQcm9wZXJ0eTogc3RyaW5nO1xuXHRcdFx0XHRzQmluZGluZ1BhcmFtZXRlcjogc3RyaW5nO1xuXHRcdCAgfSB7XG5cdFx0bGV0IHNDb250ZXh0UGF0aCA9IG9BY3Rpb24uZ2V0UGF0aCgpLnNwbGl0KFwiL0BcIilbMF07XG5cblx0XHRzQWN0aW9uTmFtZSA9ICFzQWN0aW9uTmFtZSA/IG9BY3Rpb24uZ2V0T2JqZWN0KG9BY3Rpb24uZ2V0UGF0aCgpKSA6IHNBY3Rpb25OYW1lO1xuXG5cdFx0aWYgKHNBY3Rpb25OYW1lICYmIHNBY3Rpb25OYW1lLmluY2x1ZGVzKFwiKFwiKSkge1xuXHRcdFx0Ly8gYWN0aW9uIGJvdW5kIHRvIGFub3RoZXIgZW50aXR5IHR5cGVcblx0XHRcdHNBY3Rpb25OYW1lID0gc0FjdGlvbk5hbWUuc3BsaXQoXCIoXCIpWzBdO1xuXHRcdH0gZWxzZSBpZiAob0FjdGlvbi5nZXRPYmplY3Qoc0NvbnRleHRQYXRoKSkge1xuXHRcdFx0Ly8gVE9ETzogdGhpcyBsb2dpYyBzb3VuZHMgd3JvbmcsIHRvIGJlIGNvcnJlY3RlZFxuXHRcdFx0Y29uc3Qgc0VudGl0eVR5cGVOYW1lID0gb0FjdGlvbi5nZXRPYmplY3Qoc0NvbnRleHRQYXRoKS4kVHlwZTtcblx0XHRcdGNvbnN0IHNFbnRpdHlOYW1lID0gdGhpcy5nZXRFbnRpdHlTZXROYW1lKG9BY3Rpb24uZ2V0TW9kZWwoKSwgc0VudGl0eVR5cGVOYW1lKTtcblx0XHRcdGlmIChzRW50aXR5TmFtZSkge1xuXHRcdFx0XHRzQ29udGV4dFBhdGggPSBgLyR7c0VudGl0eU5hbWV9YDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHNDb250ZXh0UGF0aDtcblx0XHR9XG5cblx0XHRpZiAoYkNoZWNrU3RhdGljVmFsdWUpIHtcblx0XHRcdHJldHVybiBvQWN0aW9uLmdldE9iamVjdChgJHtzQ29udGV4dFBhdGh9LyR7c0FjdGlvbk5hbWV9QE9yZy5PRGF0YS5Db3JlLlYxLk9wZXJhdGlvbkF2YWlsYWJsZWApO1xuXHRcdH1cblx0XHRpZiAoYlJldHVybk9ubHlQYXRoKSB7XG5cdFx0XHRyZXR1cm4gYCR7c0NvbnRleHRQYXRofS8ke3NBY3Rpb25OYW1lfWA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNDb250ZXh0UGF0aDogc0NvbnRleHRQYXRoLFxuXHRcdFx0XHRzUHJvcGVydHk6IG9BY3Rpb24uZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aH0vJHtzQWN0aW9uTmFtZX1AT3JnLk9EYXRhLkNvcmUuVjEuT3BlcmF0aW9uQXZhaWxhYmxlLyRQYXRoYCksXG5cdFx0XHRcdHNCaW5kaW5nUGFyYW1ldGVyOiBvQWN0aW9uLmdldE9iamVjdChgJHtzQ29udGV4dFBhdGh9LyR7c0FjdGlvbk5hbWV9L0AkdWk1Lm92ZXJsb2FkLzAvJFBhcmFtZXRlci8wLyROYW1lYClcblx0XHRcdH07XG5cdFx0fVxuXHR9LFxuXG5cdGdldE5hdmlnYXRpb25Db250ZXh0OiBmdW5jdGlvbiAob0NvbnRleHQ6IENvbnRleHQpOiBzdHJpbmcge1xuXHRcdHJldHVybiBPRGF0YU1vZGVsQW5ub3RhdGlvbkhlbHBlci5nZXROYXZpZ2F0aW9uUGF0aChvQ29udGV4dC5nZXRQYXRoKCkpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBwYXRoIHdpdGhvdXQgdGhlIGVudGl0eSB0eXBlIChwb3RlbnRpYWxseSBmaXJzdCkgYW5kIHByb3BlcnR5IChsYXN0KSBwYXJ0IChvcHRpb25hbCkuXG5cdCAqIFRoZSByZXN1bHQgY2FuIGJlIGFuIGVtcHR5IHN0cmluZyBpZiBpdCBpcyBhIHNpbXBsZSBkaXJlY3QgcHJvcGVydHkuXG5cdCAqXG5cdCAqIElmIGFuZCBvbmx5IGlmIHRoZSBnaXZlbiBwcm9wZXJ0eSBwYXRoIHN0YXJ0cyB3aXRoIGEgc2xhc2ggKC8pLCBpdCBpcyBjb25zaWRlcmVkIHRoYXQgdGhlIGVudGl0eSB0eXBlXG5cdCAqIGlzIHBhcnQgb2YgdGhlIHBhdGggYW5kIHdpbGwgYmUgc3RyaXBwZWQgYXdheS5cblx0ICogQHBhcmFtIHNQcm9wZXJ0eVBhdGhcblx0ICogQHBhcmFtIGJLZWVwUHJvcGVydHlcblx0ICogQHJldHVybnMgVGhlIG5hdmlnYXRpb24gcGF0aFxuXHQgKi9cblx0Z2V0TmF2aWdhdGlvblBhdGg6IGZ1bmN0aW9uIChzUHJvcGVydHlQYXRoOiBzdHJpbmcsIGJLZWVwUHJvcGVydHk/OiBib29sZWFuKTogc3RyaW5nIHtcblx0XHRjb25zdCBiU3RhcnRzV2l0aEVudGl0eVR5cGUgPSBzUHJvcGVydHlQYXRoLnN0YXJ0c1dpdGgoXCIvXCIpO1xuXHRcdGNvbnN0IGFQYXJ0cyA9IHNQcm9wZXJ0eVBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihmdW5jdGlvbiAocGFydDogc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gISFwYXJ0O1xuXHRcdH0pO1xuXHRcdGlmIChiU3RhcnRzV2l0aEVudGl0eVR5cGUpIHtcblx0XHRcdGFQYXJ0cy5zaGlmdCgpO1xuXHRcdH1cblx0XHRpZiAoIWJLZWVwUHJvcGVydHkpIHtcblx0XHRcdGFQYXJ0cy5wb3AoKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFQYXJ0cy5qb2luKFwiL1wiKTtcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY29ycmVjdCBtZXRhbW9kZWwgcGF0aCBmb3IgYm91bmQgYWN0aW9ucy5cblx0ICpcblx0ICogU2luY2UgdGhpcyBtZXRob2QgaXMgY2FsbGVkIGlycmVzcGVjdGl2ZSBvZiB0aGUgYWN0aW9uIHR5cGUsIHRoaXMgd2lsbCBiZSBhcHBsaWVkIHRvIHVuYm91bmQgYWN0aW9ucy5cblx0ICogSW4gc3VjaCBhIGNhc2UsIGlmIGFuIGluY29ycmVjdCBwYXRoIGlzIHJldHVybmVkLCBpdCBpcyBpZ25vcmVkIGR1cmluZyB0ZW1wbGF0aW5nLlxuXHQgKlxuXHQgKiBFeGFtcGxlOiBmb3IgdGhlIGJvdW5kIGFjdGlvbiBzb21lTmFtZVNwYWNlLlNvbWVCb3VuZEFjdGlvbiBvZiBlbnRpdHkgc2V0IFNvbWVFbnRpdHlTZXQsXG5cdCAqIHRoZSBzdHJpbmcgXCIvU29tZUVudGl0eVNldC9zb21lTmFtZVNwYWNlLlNvbWVCb3VuZEFjdGlvblwiIGlzIHJldHVybmVkLlxuXHQgKiBAcGFyYW0gb0FjdGlvbiBDb250ZXh0IG9iamVjdCBmb3IgdGhlIGFjdGlvblxuXHQgKiBAcmV0dXJucyBDb3JyZWN0IG1ldGFtb2RlbCBwYXRoIGZvciBib3VuZCBhbmQgaW5jb3JyZWN0IHBhdGggZm9yIHVuYm91bmQgYWN0aW9uc1xuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0Z2V0QWN0aW9uQ29udGV4dDogZnVuY3Rpb24gKG9BY3Rpb246IENvbnRleHQpOiBzdHJpbmcge1xuXHRcdHJldHVybiBDb21tb25IZWxwZXIuZ2V0QWN0aW9uUGF0aChvQWN0aW9uLCB0cnVlKSBhcyBzdHJpbmc7XG5cdH0sXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBtZXRhbW9kZWwgcGF0aCBjb3JyZWN0bHkgZm9yIG92ZXJsb2FkZWQgYm91bmQgYWN0aW9ucy4gRm9yIHVuYm91bmQgYWN0aW9ucyxcblx0ICogdGhlIGluY29ycmVjdCBwYXRoIGlzIHJldHVybmVkLCBidXQgaWdub3JlZCBkdXJpbmcgdGVtcGxhdGluZy5cblx0ICogZS5nLiBmb3IgYm91bmQgYWN0aW9uIHNvbWVOYW1lU3BhY2UuU29tZUJvdW5kQWN0aW9uIG9mIGVudGl0eSBzZXQgU29tZUVudGl0eVNldCxcblx0ICogdGhlIHN0cmluZyBcIi9Tb21lRW50aXR5U2V0L3NvbWVOYW1lU3BhY2UuU29tZUJvdW5kQWN0aW9uL0AkdWk1Lm92ZXJsb2FkLzBcIiBpcyByZXR1cm5lZC5cblx0ICogQHBhcmFtIG9BY3Rpb24gVGhlIGNvbnRleHQgb2JqZWN0IGZvciB0aGUgYWN0aW9uXG5cdCAqIEByZXR1cm5zIFRoZSBjb3JyZWN0IG1ldGFtb2RlbCBwYXRoIGZvciBib3VuZCBhY3Rpb24gb3ZlcmxvYWQgYW5kIGluY29ycmVjdCBwYXRoIGZvciB1bmJvdW5kIGFjdGlvbnNcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGdldFBhdGhUb0JvdW5kQWN0aW9uT3ZlcmxvYWQ6IGZ1bmN0aW9uIChvQWN0aW9uOiBDb250ZXh0KTogc3RyaW5nIHtcblx0XHRjb25zdCBzUGF0aCA9IENvbW1vbkhlbHBlci5nZXRBY3Rpb25QYXRoKG9BY3Rpb24sIHRydWUpO1xuXHRcdHJldHVybiBgJHtzUGF0aH0vQCR1aTUub3ZlcmxvYWQvMGA7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHN0cmluZyB3aXRoIHNpbmdsZSBxdW90ZXMuXG5cdCAqIEBwYXJhbSBzVmFsdWUgU29tZSBzdHJpbmcgdGhhdCBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgaW50byBzaW5nbGUgcXVvdGVzXG5cdCAqIEBwYXJhbSBbYkVzY2FwZV0gU2hvdWxkIHRoZSBzdHJpbmcgYmUgZXNjYXBlZCBiZWZvcmVoYW5kXG5cdCAqIEByZXR1cm5zIC0gU3RyaW5nIHdpdGggc2luZ2xlIHF1b3Rlc1xuXHQgKi9cblx0YWRkU2luZ2xlUXVvdGVzOiBmdW5jdGlvbiAoc1ZhbHVlOiBzdHJpbmcsIGJFc2NhcGU/OiBib29sZWFuKTogc3RyaW5nIHtcblx0XHRpZiAoYkVzY2FwZSAmJiBzVmFsdWUpIHtcblx0XHRcdHNWYWx1ZSA9IHRoaXMuZXNjYXBlU2luZ2xlUXVvdGVzKHNWYWx1ZSk7XG5cdFx0fVxuXHRcdHJldHVybiBgJyR7c1ZhbHVlfSdgO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBzdHJpbmcgd2l0aCBlc2NhcGVkIHNpbmdsZSBxdW90ZXMuXG5cdCAqIEBwYXJhbSBzVmFsdWUgU29tZSBzdHJpbmcgdGhhdCBuZWVkcyBlc2NhcGluZyBvZiBzaW5nbGUgcXVvdGVzXG5cdCAqIEByZXR1cm5zIC0gU3RyaW5nIHdpdGggZXNjYXBlZCBzaW5nbGUgcXVvdGVzXG5cdCAqL1xuXHRlc2NhcGVTaW5nbGVRdW90ZXM6IGZ1bmN0aW9uIChzVmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHNWYWx1ZS5yZXBsYWNlKC9bJ10vZywgXCJcXFxcJ1wiKTtcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgZnVuY3Rpb24gc3RyaW5nXG5cdCAqIFRoZSBmaXJzdCBhcmd1bWVudCBvZiBnZW5lcmF0ZUZ1bmN0aW9uIGlzIG5hbWUgb2YgdGhlIGdlbmVyYXRlZCBmdW5jdGlvbiBzdHJpbmcuXG5cdCAqIFJlbWFpbmluZyBhcmd1bWVudHMgb2YgZ2VuZXJhdGVGdW5jdGlvbiBhcmUgYXJndW1lbnRzIG9mIHRoZSBuZXdseSBnZW5lcmF0ZWQgZnVuY3Rpb24gc3RyaW5nLlxuXHQgKiBAcGFyYW0gc0Z1bmNOYW1lIFNvbWUgc3RyaW5nIGZvciB0aGUgZnVuY3Rpb24gbmFtZVxuXHQgKiBAcGFyYW0gYXJncyBUaGUgcmVtYWluaW5nIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyAtIEZ1bmN0aW9uIHN0cmluZyBkZXBlbmRzIG9uIGFyZ3VtZW50cyBwYXNzZWRcblx0ICovXG5cdGdlbmVyYXRlRnVuY3Rpb246IGZ1bmN0aW9uIChzRnVuY05hbWU6IHN0cmluZywgLi4uYXJnczogc3RyaW5nW10pOiBzdHJpbmcge1xuXHRcdGxldCBzUGFyYW1zID0gXCJcIjtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdHNQYXJhbXMgKz0gYXJnc1tpXTtcblx0XHRcdGlmIChpIDwgYXJncy5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdHNQYXJhbXMgKz0gXCIsIFwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGxldCBzRnVuY3Rpb24gPSBgJHtzRnVuY05hbWV9KClgO1xuXHRcdGlmIChzUGFyYW1zKSB7XG5cdFx0XHRzRnVuY3Rpb24gPSBgJHtzRnVuY05hbWV9KCR7c1BhcmFtc30pYDtcblx0XHR9XG5cdFx0cmV0dXJuIHNGdW5jdGlvbjtcblx0fSxcblx0Lypcblx0ICogUmV0dXJucyB0aGUgdmlzaWJpbGl0eSBleHByZXNzaW9uIGZvciBkYXRhcG9pbnQgdGl0bGUvbGlua1xuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtzdHJpbmd9IFtwYXRoXSBhbm5vdGF0aW9uIHBhdGggb2YgZGF0YSBwb2ludCBvciBNaWNyb2NoYXJ0XG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzQ2xpY2thYmxlXSB0cnVlIGlmIGxpbmsgaXMgdmlzaWJsZVxuXHQgKiBAcmV0dXJucyB7Q29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb259IHZpc2liaWxpdHlFeHAgVXNlZCB0byBnZXQgdGhlIHZpc2liaWxpdHkgYmluZGluZyBmb3IgRGF0YVBvaW50cyB0aXRsZSBpbiB0aGUgSGVhZGVyLlxuXHQgKlxuXHQgKi9cblxuXHRnZXRIZWFkZXJEYXRhUG9pbnRMaW5rVmlzaWJpbGl0eTogZnVuY3Rpb24gKHBhdGg6IHN0cmluZywgaXNDbGlja2FibGU6IGJvb2xlYW4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRjb25zdGFudChpc0NsaWNrYWJsZSksXG5cdFx0XHRcdGVxdWFsKHBhdGhJbk1vZGVsKGBpc0hlYWRlckRQTGlua1Zpc2libGUvJHtwYXRofWAsIFwiaW50ZXJuYWxcIiksIHRydWUpLFxuXHRcdFx0XHRub3RFcXVhbChwYXRoSW5Nb2RlbChgaXNIZWFkZXJEUExpbmtWaXNpYmxlLyR7cGF0aH1gLCBcImludGVybmFsXCIpLCB0cnVlKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIG9iamVjdCB0byBzdHJpbmcoZGlmZmVyZW50IGZyb20gSlNPTi5zdHJpbmdpZnkgb3IudG9TdHJpbmcpLlxuXHQgKiBAcGFyYW0gb1BhcmFtcyBTb21lIG9iamVjdFxuXHQgKiBAcmV0dXJucyAtIE9iamVjdCBzdHJpbmdcblx0ICovXG5cdG9iamVjdFRvU3RyaW5nOiBmdW5jdGlvbiAob1BhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBzdHJpbmcge1xuXHRcdGxldCBpTnVtYmVyT2ZLZXlzID0gT2JqZWN0LmtleXMob1BhcmFtcykubGVuZ3RoLFxuXHRcdFx0c1BhcmFtcyA9IFwiXCI7XG5cblx0XHRmb3IgKGNvbnN0IHNLZXkgaW4gb1BhcmFtcykge1xuXHRcdFx0bGV0IHNWYWx1ZSA9IG9QYXJhbXNbc0tleV07XG5cdFx0XHRpZiAoc1ZhbHVlICYmIHR5cGVvZiBzVmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0c1ZhbHVlID0gdGhpcy5vYmplY3RUb1N0cmluZyhzVmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuXHRcdFx0fVxuXHRcdFx0c1BhcmFtcyArPSBgJHtzS2V5fTogJHtzVmFsdWV9YDtcblx0XHRcdGlmIChpTnVtYmVyT2ZLZXlzID4gMSkge1xuXHRcdFx0XHQtLWlOdW1iZXJPZktleXM7XG5cdFx0XHRcdHNQYXJhbXMgKz0gXCIsIFwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBgeyAke3NQYXJhbXN9fWA7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgZXNjYXBlIGNoYXJhY3RlcnMgKFxcKSBmcm9tIGFuIGV4cHJlc3Npb24uXG5cdCAqIEBwYXJhbSBzRXhwcmVzc2lvbiBBbiBleHByZXNzaW9uIHdpdGggZXNjYXBlIGNoYXJhY3RlcnNcblx0ICogQHJldHVybnMgRXhwcmVzc2lvbiBzdHJpbmcgd2l0aG91dCBlc2NhcGUgY2hhcmFjdGVycyBvciB1bmRlZmluZWRcblx0ICovXG5cdHJlbW92ZUVzY2FwZUNoYXJhY3RlcnM6IGZ1bmN0aW9uIChzRXhwcmVzc2lvbj86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHNFeHByZXNzaW9uID8gc0V4cHJlc3Npb24ucmVwbGFjZSgvXFxcXD9cXFxcKFt7fV0pL2csIFwiJDFcIikgOiB1bmRlZmluZWQ7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ha2VzIHVwZGF0ZXMgdG8gYSBzdHJpbmdpZmllZCBvYmplY3Qgc28gdGhhdCBpdCB3b3JrcyBwcm9wZXJseSBpbiBhIHRlbXBsYXRlIGJ5IGFkZGluZyB1aTVPYmplY3Q6dHJ1ZS5cblx0ICogQHBhcmFtIHNTdHJpbmdpZmllZFxuXHQgKiBAcmV0dXJucyBUaGUgdXBkYXRlZCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdFxuXHQgKi9cblx0c3RyaW5naWZ5T2JqZWN0OiBmdW5jdGlvbiAoc1N0cmluZ2lmaWVkOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGlmICghc1N0cmluZ2lmaWVkIHx8IHNTdHJpbmdpZmllZCA9PT0gXCJ7fVwiKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBvT2JqZWN0ID0gSlNPTi5wYXJzZShzU3RyaW5naWZpZWQpO1xuXHRcdFx0aWYgKHR5cGVvZiBvT2JqZWN0ID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KG9PYmplY3QpKSB7XG5cdFx0XHRcdGNvbnN0IG9VSTVPYmplY3QgPSB7XG5cdFx0XHRcdFx0dWk1b2JqZWN0OiB0cnVlXG5cdFx0XHRcdH07XG5cdFx0XHRcdE9iamVjdC5hc3NpZ24ob1VJNU9iamVjdCwgb09iamVjdCk7XG5cdFx0XHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShvVUk1T2JqZWN0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHNUeXBlID0gQXJyYXkuaXNBcnJheShvT2JqZWN0KSA/IFwiQXJyYXlcIiA6IHR5cGVvZiBvT2JqZWN0O1xuXHRcdFx0XHRMb2cuZXJyb3IoYFVuZXhwZWN0ZWQgb2JqZWN0IHR5cGUgaW4gc3RyaW5naWZ5T2JqZWN0ICgke3NUeXBlfSkgLSBvbmx5IHdvcmtzIHdpdGggb2JqZWN0YCk7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInN0cmluZ2lmeU9iamVjdCBvbmx5IHdvcmtzIHdpdGggb2JqZWN0cyFcIik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBDcmVhdGUgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRhdGEsIHRha2luZyBjYXJlIHRoYXQgaXQgaXMgbm90IHRyZWF0ZWQgYXMgYSBiaW5kaW5nIGV4cHJlc3Npb24uXG5cdCAqIEBwYXJhbSB2RGF0YSBUaGUgZGF0YSB0byBzdHJpbmdpZnlcblx0ICogQHJldHVybnMgVGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0YS5cblx0ICovXG5cdHN0cmluZ2lmeUN1c3RvbURhdGE6IGZ1bmN0aW9uICh2RGF0YTogb2JqZWN0IHwgc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcblx0XHRjb25zdCBvT2JqZWN0OiB7IHVpNW9iamVjdDogdHJ1ZTsgY3VzdG9tRGF0YT86IHVua25vd24gfSA9IHtcblx0XHRcdHVpNW9iamVjdDogdHJ1ZVxuXHRcdH07XG5cdFx0b09iamVjdFtcImN1c3RvbURhdGFcIl0gPSB2RGF0YSBpbnN0YW5jZW9mIENvbnRleHQgPyB2RGF0YS5nZXRPYmplY3QoKSA6IHZEYXRhO1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShvT2JqZWN0KTtcblx0fSxcblxuXHQvKipcblx0ICogUGFyc2VzIHRoZSBnaXZlbiBkYXRhLCBwb3RlbnRpYWxseSB1bndyYXBzIHRoZSBkYXRhLlxuXHQgKiBAcGFyYW0gdkRhdGEgVGhlIGRhdGEgdG8gcGFyc2Vcblx0ICogQHBhcmFtIHZEYXRhLnVpNW9iamVjdFxuXHQgKiBAcGFyYW0gdkRhdGEuY3VzdG9tRGF0YVxuXHQgKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIHRoZSBkYXRhIHBhcnNpbmdcblx0ICovXG5cdHBhcnNlQ3VzdG9tRGF0YTogZnVuY3Rpb24gKHZEYXRhPzogc3RyaW5nIHwgeyB1aTVvYmplY3Q6IHRydWU7IGN1c3RvbURhdGE/OiB1bmtub3duIH0pOiB1bmtub3duIHtcblx0XHR2RGF0YSA9IHR5cGVvZiB2RGF0YSA9PT0gXCJzdHJpbmdcIiA/IEpTT04ucGFyc2UodkRhdGEpIDogdkRhdGE7XG5cdFx0aWYgKHZEYXRhICYmIHZEYXRhLmhhc093blByb3BlcnR5KFwiY3VzdG9tRGF0YVwiKSkge1xuXHRcdFx0cmV0dXJuICh2RGF0YSBhcyB7IHVpNW9iamVjdDogdHJ1ZTsgY3VzdG9tRGF0YT86IHVua25vd24gfSlbXCJjdXN0b21EYXRhXCJdO1xuXHRcdH1cblx0XHRyZXR1cm4gdkRhdGE7XG5cdH0sXG5cdGdldENvbnRleHRQYXRoOiBmdW5jdGlvbiAob1ZhbHVlOiB1bmtub3duLCBvSW50ZXJmYWNlOiBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2UpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHNQYXRoID0gb0ludGVyZmFjZSAmJiBvSW50ZXJmYWNlLmNvbnRleHQgJiYgb0ludGVyZmFjZS5jb250ZXh0LmdldFBhdGgoKTtcblx0XHRyZXR1cm4gc1BhdGhbc1BhdGgubGVuZ3RoIC0gMV0gPT09IFwiL1wiID8gc1BhdGguc2xpY2UoMCwgLTEpIDogc1BhdGg7XG5cdH0sXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgc3RyaW5naWZpZWQgSlNPTiBvYmplY3QgY29udGFpbmluZyAgUHJlc2VudGF0aW9uIFZhcmlhbnQgc29ydCBjb25kaXRpb25zLlxuXHQgKiBAcGFyYW0gb0NvbnRleHRcblx0ICogQHBhcmFtIG9Db250ZXh0LmdldFBhdGhcblx0ICogQHBhcmFtIG9Db250ZXh0LmdldE1vZGVsXG5cdCAqIEBwYXJhbSBvUHJlc2VudGF0aW9uVmFyaWFudCBQcmVzZW50YXRpb24gdmFyaWFudCBBbm5vdGF0aW9uXG5cdCAqIEBwYXJhbSBzUHJlc2VudGF0aW9uVmFyaWFudFBhdGhcblx0ICogQHJldHVybnMgU3RyaW5naWZpZWQgSlNPTiBvYmplY3Rcblx0ICovXG5cdGdldFNvcnRDb25kaXRpb25zOiBmdW5jdGlvbiAoXG5cdFx0b0NvbnRleHQ6IHsgZ2V0UGF0aChudW06IG51bWJlcik6IHN0cmluZzsgZ2V0TW9kZWwobnVtOiBudW1iZXIpOiBPRGF0YU1ldGFNb2RlbCB9LFxuXHRcdG9QcmVzZW50YXRpb25WYXJpYW50OiBNZXRhTW9kZWxUeXBlPFByZXNlbnRhdGlvblZhcmlhbnQ+LFxuXHRcdHNQcmVzZW50YXRpb25WYXJpYW50UGF0aDogc3RyaW5nXG5cdCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKFxuXHRcdFx0b1ByZXNlbnRhdGlvblZhcmlhbnQgJiZcblx0XHRcdENvbW1vbkhlbHBlci5faXNQcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbihzUHJlc2VudGF0aW9uVmFyaWFudFBhdGgpICYmXG5cdFx0XHRvUHJlc2VudGF0aW9uVmFyaWFudC5Tb3J0T3JkZXJcblx0XHQpIHtcblx0XHRcdGNvbnN0IGFTb3J0Q29uZGl0aW9uczogeyBzb3J0ZXJzOiB7IG5hbWU/OiBzdHJpbmc7IGRlc2NlbmRpbmc/OiBib29sZWFuIH1bXSB9ID0ge1xuXHRcdFx0XHRzb3J0ZXJzOiBbXVxuXHRcdFx0fTtcblxuXHRcdFx0Y29uc3Qgc0VudGl0eVBhdGggPSBvQ29udGV4dC5nZXRQYXRoKDApLnNwbGl0KFwiQFwiKVswXTtcblx0XHRcdG9QcmVzZW50YXRpb25WYXJpYW50LlNvcnRPcmRlci5mb3JFYWNoKGZ1bmN0aW9uIChvQ29uZGl0aW9uID0ge30pIHtcblx0XHRcdFx0bGV0IG9Tb3J0UHJvcGVydHk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHRcdFx0Y29uc3Qgb1NvcnRlcjogeyBuYW1lPzogc3RyaW5nOyBkZXNjZW5kaW5nPzogYm9vbGVhbiB9ID0ge307XG5cdFx0XHRcdGlmIChvQ29uZGl0aW9uLkR5bmFtaWNQcm9wZXJ0eSkge1xuXHRcdFx0XHRcdG9Tb3J0UHJvcGVydHkgPSBvQ29udGV4dC5nZXRNb2RlbCgwKS5nZXRPYmplY3Qoc0VudGl0eVBhdGggKyBvQ29uZGl0aW9uLkR5bmFtaWNQcm9wZXJ0eS4kQW5ub3RhdGlvblBhdGgpPy5OYW1lO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG9Db25kaXRpb24uUHJvcGVydHkpIHtcblx0XHRcdFx0XHRvU29ydFByb3BlcnR5ID0gb0NvbmRpdGlvbi5Qcm9wZXJ0eS4kUHJvcGVydHlQYXRoO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvU29ydFByb3BlcnR5KSB7XG5cdFx0XHRcdFx0b1NvcnRlci5uYW1lID0gb1NvcnRQcm9wZXJ0eTtcblx0XHRcdFx0XHRvU29ydGVyLmRlc2NlbmRpbmcgPSAhIW9Db25kaXRpb24uRGVzY2VuZGluZztcblx0XHRcdFx0XHRhU29ydENvbmRpdGlvbnMuc29ydGVycy5wdXNoKG9Tb3J0ZXIpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIlBsZWFzZSBkZWZpbmUgdGhlIHJpZ2h0IHBhdGggdG8gdGhlIHNvcnQgcHJvcGVydHlcIik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KGFTb3J0Q29uZGl0aW9ucyk7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH0sXG5cdF9pc1ByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBmdW5jdGlvbiAoYW5ub3RhdGlvblBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAoXG5cdFx0XHRhbm5vdGF0aW9uUGF0aC5pbmNsdWRlcyhgQCR7VUlBbm5vdGF0aW9uVGVybXMuUHJlc2VudGF0aW9uVmFyaWFudH1gKSB8fFxuXHRcdFx0YW5ub3RhdGlvblBhdGguaW5jbHVkZXMoYEAke1VJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnR9YClcblx0XHQpO1xuXHR9LFxuXHRjcmVhdGVQcmVzZW50YXRpb25QYXRoQ29udGV4dDogZnVuY3Rpb24gKG9QcmVzZW50YXRpb25Db250ZXh0OiBDb250ZXh0KTogQ29udGV4dCB7XG5cdFx0Y29uc3QgYVBhdGhzID0gb1ByZXNlbnRhdGlvbkNvbnRleHQuZ2V0UGF0aCgpLnNwbGl0KFwiQFwiKSB8fCBbXTtcblx0XHRjb25zdCBvTW9kZWwgPSBvUHJlc2VudGF0aW9uQ29udGV4dC5nZXRNb2RlbCgpO1xuXHRcdGlmIChhUGF0aHMubGVuZ3RoICYmIGFQYXRoc1thUGF0aHMubGVuZ3RoIC0gMV0uaW5jbHVkZXMoXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50XCIpKSB7XG5cdFx0XHRjb25zdCBzUGF0aCA9IG9QcmVzZW50YXRpb25Db250ZXh0LmdldFBhdGgoKS5zcGxpdChcIi9QcmVzZW50YXRpb25WYXJpYW50XCIpWzBdO1xuXHRcdFx0cmV0dXJuIG9Nb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHtzUGF0aH1Ac2FwdWkubmFtZWApO1xuXHRcdH1cblx0XHRyZXR1cm4gb01vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAke29QcmVzZW50YXRpb25Db250ZXh0LmdldFBhdGgoKX1Ac2FwdWkubmFtZWApO1xuXHR9LFxuXHRnZXRQcmVzc0hhbmRsZXJGb3JEYXRhRmllbGRGb3JJQk46IGZ1bmN0aW9uIChcblx0XHRvRGF0YUZpZWxkOiBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdFx0c0NvbnRleHQ/OiBzdHJpbmcsXG5cdFx0Yk5hdmlnYXRlV2l0aENvbmZpcm1hdGlvbkRpYWxvZz86IGJvb2xlYW4sXG5cdFx0Zm9yQ29udGV4dE1lbnUgPSBmYWxzZVxuXHQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGlmICghb0RhdGFGaWVsZCkgcmV0dXJuIHVuZGVmaW5lZDtcblx0XHRjb25zdCBtTmF2aWdhdGlvblBhcmFtZXRlcnM6IHtcblx0XHRcdG5hdmlnYXRpb25Db250ZXh0cz86IHN0cmluZztcblx0XHRcdGxhYmVsPzogc3RyaW5nO1xuXHRcdFx0YXBwbGljYWJsZUNvbnRleHRzPzogc3RyaW5nO1xuXHRcdFx0bm90QXBwbGljYWJsZUNvbnRleHRzPzogc3RyaW5nO1xuXHRcdFx0c2VtYW50aWNPYmplY3RNYXBwaW5nPzogc3RyaW5nO1xuXHRcdH0gPSB7XG5cdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHM6IHNDb250ZXh0ID8gc0NvbnRleHQgOiBcIiR7JHNvdXJjZT4vfS5nZXRCaW5kaW5nQ29udGV4dCgpXCJcblx0XHR9O1xuXHRcdGlmIChvRGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dCAmJiAhb0RhdGFGaWVsZC5JbmxpbmUgJiYgYk5hdmlnYXRlV2l0aENvbmZpcm1hdGlvbkRpYWxvZykge1xuXHRcdFx0Y29uc3QgYXBwbGljYWJsZVByb3BlcnR5ID0gIWZvckNvbnRleHRNZW51ID8gXCJhQXBwbGljYWJsZVwiIDogXCJhQXBwbGljYWJsZUZvckNvbnRleHRNZW51XCI7XG5cdFx0XHRjb25zdCBub3RBcHBsaWNhYmxlUHJvcGVydHkgPSAhZm9yQ29udGV4dE1lbnUgPyBcImFOb3RBcHBsaWNhYmxlXCIgOiBcImFOb3RBcHBsaWNhYmxlRm9yQ29udGV4dE1lbnVcIjtcblx0XHRcdG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5hcHBsaWNhYmxlQ29udGV4dHMgPSBgXFwke2ludGVybmFsPmlibi8ke29EYXRhRmllbGQuU2VtYW50aWNPYmplY3R9LSR7b0RhdGFGaWVsZC5BY3Rpb259LyR7YXBwbGljYWJsZVByb3BlcnR5fS99YDtcblx0XHRcdG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5ub3RBcHBsaWNhYmxlQ29udGV4dHMgPSBgXFwke2ludGVybmFsPmlibi8ke29EYXRhRmllbGQuU2VtYW50aWNPYmplY3R9LSR7b0RhdGFGaWVsZC5BY3Rpb259LyR7bm90QXBwbGljYWJsZVByb3BlcnR5fS99YDtcblx0XHRcdG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5sYWJlbCA9IHRoaXMuYWRkU2luZ2xlUXVvdGVzKG9EYXRhRmllbGQuTGFiZWwgYXMgc3RyaW5nLCB0cnVlKTtcblx0XHR9XG5cdFx0aWYgKG9EYXRhRmllbGQuTWFwcGluZykge1xuXHRcdFx0bU5hdmlnYXRpb25QYXJhbWV0ZXJzLnNlbWFudGljT2JqZWN0TWFwcGluZyA9IHRoaXMuYWRkU2luZ2xlUXVvdGVzKEpTT04uc3RyaW5naWZ5KG9EYXRhRmllbGQuTWFwcGluZykpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5nZW5lcmF0ZUZ1bmN0aW9uKFxuXHRcdFx0Yk5hdmlnYXRlV2l0aENvbmZpcm1hdGlvbkRpYWxvZyA/IFwiLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ubmF2aWdhdGVXaXRoQ29uZmlybWF0aW9uRGlhbG9nXCIgOiBcIi5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlXCIsXG5cdFx0XHR0aGlzLmFkZFNpbmdsZVF1b3RlcyhvRGF0YUZpZWxkLlNlbWFudGljT2JqZWN0IGFzIHVua25vd24gYXMgc3RyaW5nKSxcblx0XHRcdHRoaXMuYWRkU2luZ2xlUXVvdGVzKG9EYXRhRmllbGQuQWN0aW9uIGFzIHVua25vd24gYXMgc3RyaW5nKSxcblx0XHRcdHRoaXMub2JqZWN0VG9TdHJpbmcobU5hdmlnYXRpb25QYXJhbWV0ZXJzKSxcblx0XHRcdFwiJHskc291cmNlPi99XCJcblx0XHQpO1xuXHR9LFxuXHRnZXRFbnRpdHlTZXQ6IGZ1bmN0aW9uIChvQ29udGV4dDogQ29udGV4dCk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgc1BhdGggPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0cmV0dXJuIE1vZGVsSGVscGVyLmdldEVudGl0eVNldFBhdGgoc1BhdGgpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZG8gdGhlIGNhbGN1bGF0aW9uIG9mIGNyaXRpY2FsaXR5IGluIGNhc2UgQ3JpdGljYWxpdHlDYWxjdWxhdGlvbiBwcmVzZW50IGluIHRoZSBhbm5vdGF0aW9uXG5cdCAqXG5cdCAqIFRoZSBjYWxjdWxhdGlvbiBpcyBkb25lIGJ5IGNvbXBhcmluZyBhIHZhbHVlIHRvIHRoZSB0aHJlc2hvbGQgdmFsdWVzIHJlbGV2YW50IGZvciB0aGUgc3BlY2lmaWVkIGltcHJvdmVtZW50IGRpcmVjdGlvbi5cblx0ICogRm9yIGltcHJvdmVtZW50IGRpcmVjdGlvbiBUYXJnZXQsIHRoZSBjcml0aWNhbGl0eSBpcyBjYWxjdWxhdGVkIHVzaW5nIGJvdGggbG93IGFuZCBoaWdoIHRocmVzaG9sZCB2YWx1ZXMuIEl0IHdpbGwgYmVcblx0ICpcblx0ICogLSBQb3NpdGl2ZSBpZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIEFjY2VwdGFuY2VSYW5nZUxvd1ZhbHVlIGFuZCBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIEFjY2VwdGFuY2VSYW5nZUhpZ2hWYWx1ZVxuXHQgKiAtIE5ldXRyYWwgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBUb2xlcmFuY2VSYW5nZUxvd1ZhbHVlIGFuZCBsb3dlciB0aGFuIEFjY2VwdGFuY2VSYW5nZUxvd1ZhbHVlIE9SIGdyZWF0ZXIgdGhhbiBBY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWUgYW5kIGxvd2VyIHRoYW4gb3IgZXF1YWwgdG8gVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWVcblx0ICogLSBDcml0aWNhbCBpZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIERldmlhdGlvblJhbmdlTG93VmFsdWUgYW5kIGxvd2VyIHRoYW4gVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSBPUiBncmVhdGVyIHRoYW4gVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWUgYW5kIGxvd2VyIHRoYW4gb3IgZXF1YWwgdG8gRGV2aWF0aW9uUmFuZ2VIaWdoVmFsdWVcblx0ICogLSBOZWdhdGl2ZSBpZiB0aGUgdmFsdWUgaXMgbG93ZXIgdGhhbiBEZXZpYXRpb25SYW5nZUxvd1ZhbHVlIG9yIGdyZWF0ZXIgdGhhbiBEZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZVxuXHQgKlxuXHQgKiBGb3IgaW1wcm92ZW1lbnQgZGlyZWN0aW9uIE1pbmltaXplLCB0aGUgY3JpdGljYWxpdHkgaXMgY2FsY3VsYXRlZCB1c2luZyB0aGUgaGlnaCB0aHJlc2hvbGQgdmFsdWVzLiBJdCBpc1xuXHQgKiAtIFBvc2l0aXZlIGlmIHRoZSB2YWx1ZSBpcyBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIEFjY2VwdGFuY2VSYW5nZUhpZ2hWYWx1ZVxuXHQgKiAtIE5ldXRyYWwgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBBY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWUgYW5kIGxvd2VyIHRoYW4gb3IgZXF1YWwgdG8gVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWVcblx0ICogLSBDcml0aWNhbCBpZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIFRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlIGFuZCBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIERldmlhdGlvblJhbmdlSGlnaFZhbHVlXG5cdCAqIC0gTmVnYXRpdmUgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBEZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZVxuXHQgKlxuXHQgKiBGb3IgaW1wcm92ZW1lbnQgZGlyZWN0aW9uIE1heGltaXplLCB0aGUgY3JpdGljYWxpdHkgaXMgY2FsY3VsYXRlZCB1c2luZyB0aGUgbG93IHRocmVzaG9sZCB2YWx1ZXMuIEl0IGlzXG5cdCAqXG5cdCAqIC0gUG9zaXRpdmUgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBBY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZVxuXHQgKiAtIE5ldXRyYWwgaWYgdGhlIHZhbHVlIGlzIGxlc3MgdGhhbiBBY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZSBhbmQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIFRvbGVyYW5jZVJhbmdlTG93VmFsdWVcblx0ICogLSBDcml0aWNhbCBpZiB0aGUgdmFsdWUgaXMgbG93ZXIgdGhhbiBUb2xlcmFuY2VSYW5nZUxvd1ZhbHVlIGFuZCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gRGV2aWF0aW9uUmFuZ2VMb3dWYWx1ZVxuXHQgKiAtIE5lZ2F0aXZlIGlmIHRoZSB2YWx1ZSBpcyBsb3dlciB0aGFuIERldmlhdGlvblJhbmdlTG93VmFsdWVcblx0ICpcblx0ICogVGhyZXNob2xkcyBhcmUgb3B0aW9uYWwuIEZvciB1bmFzc2lnbmVkIHZhbHVlcywgZGVmYXVsdHMgYXJlIGRldGVybWluZWQgaW4gdGhpcyBvcmRlcjpcblx0ICpcblx0ICogLSBGb3IgRGV2aWF0aW9uUmFuZ2UsIGFuIG9taXR0ZWQgTG93VmFsdWUgdHJhbnNsYXRlcyBpbnRvIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBudW1iZXIgKC1JTkYpLCBhbiBvbWl0dGVkIEhpZ2hWYWx1ZSB0cmFuc2xhdGVzIGludG8gdGhlIGxhcmdlc3QgcG9zc2libGUgbnVtYmVyICgrSU5GKVxuXHQgKiAtIEZvciBUb2xlcmFuY2VSYW5nZSwgYW4gb21pdHRlZCBMb3dWYWx1ZSB3aWxsIGJlIGluaXRpYWxpemVkIHdpdGggRGV2aWF0aW9uUmFuZ2VMb3dWYWx1ZSwgYW4gb21pdHRlZCBIaWdoVmFsdWUgd2lsbCBiZSBpbml0aWFsaXplZCB3aXRoIERldmlhdGlvblJhbmdlSGlnaFZhbHVlXG5cdCAqIC0gRm9yIEFjY2VwdGFuY2VSYW5nZSwgYW4gb21pdHRlZCBMb3dWYWx1ZSB3aWxsIGJlIGluaXRpYWxpemVkIHdpdGggVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSwgYW4gb21pdHRlZCBIaWdoVmFsdWUgd2lsbCBiZSBpbml0aWFsaXplZCB3aXRoIFRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlLlxuXHQgKiBAcGFyYW0gc0ltcHJvdmVtZW50RGlyZWN0aW9uIEltcHJvdmVtZW50RGlyZWN0aW9uIHRvIGJlIHVzZWQgZm9yIGNyZWF0aW5nIHRoZSBjcml0aWNhbGl0eSBiaW5kaW5nXG5cdCAqIEBwYXJhbSBzVmFsdWUgVmFsdWUgZnJvbSBEYXRhcG9pbnQgdG8gYmUgbWVhc3VyZWRcblx0ICogQHBhcmFtIHNEZXZpYXRpb25Mb3cgRXhwcmVzc2lvbkJpbmRpbmcgZm9yIExvd2VyIERldmlhdGlvbiBsZXZlbFxuXHQgKiBAcGFyYW0gc1RvbGVyYW5jZUxvdyBFeHByZXNzaW9uQmluZGluZyBmb3IgTG93ZXIgVG9sZXJhbmNlIGxldmVsXG5cdCAqIEBwYXJhbSBzQWNjZXB0YW5jZUxvdyBFeHByZXNzaW9uQmluZGluZyBmb3IgTG93ZXIgQWNjZXB0YW5jZSBsZXZlbFxuXHQgKiBAcGFyYW0gc0FjY2VwdGFuY2VIaWdoIEV4cHJlc3Npb25CaW5kaW5nIGZvciBIaWdoZXIgQWNjZXB0YW5jZSBsZXZlbFxuXHQgKiBAcGFyYW0gc1RvbGVyYW5jZUhpZ2ggRXhwcmVzc2lvbkJpbmRpbmcgZm9yIEhpZ2hlciBUb2xlcmFuY2UgbGV2ZWxcblx0ICogQHBhcmFtIHNEZXZpYXRpb25IaWdoIEV4cHJlc3Npb25CaW5kaW5nIGZvciBIaWdoZXIgRGV2aWF0aW9uIGxldmVsXG5cdCAqIEByZXR1cm5zIFJldHVybnMgY3JpdGljYWxpdHkgY2FsY3VsYXRpb24gYXMgZXhwcmVzc2lvbiBiaW5kaW5nXG5cdCAqL1xuXHRnZXRDcml0aWNhbGl0eUNhbGN1bGF0aW9uQmluZGluZzogZnVuY3Rpb24gKFxuXHRcdHNJbXByb3ZlbWVudERpcmVjdGlvbjogc3RyaW5nLFxuXHRcdHNWYWx1ZTogc3RyaW5nLFxuXHRcdHNEZXZpYXRpb25Mb3c6IHN0cmluZyB8IG51bWJlcixcblx0XHRzVG9sZXJhbmNlTG93OiBzdHJpbmcgfCBudW1iZXIsXG5cdFx0c0FjY2VwdGFuY2VMb3c6IHN0cmluZyB8IG51bWJlcixcblx0XHRzQWNjZXB0YW5jZUhpZ2g6IHN0cmluZyB8IG51bWJlcixcblx0XHRzVG9sZXJhbmNlSGlnaDogc3RyaW5nIHwgbnVtYmVyLFxuXHRcdHNEZXZpYXRpb25IaWdoOiBzdHJpbmcgfCBudW1iZXJcblx0KTogc3RyaW5nIHtcblx0XHRsZXQgc0NyaXRpY2FsaXR5RXhwcmVzc2lvbjogdHlwZW9mIFZhbHVlQ29sb3IgfCBzdHJpbmcgPSBWYWx1ZUNvbG9yLk5ldXRyYWw7IC8vIERlZmF1bHQgQ3JpdGljYWxpdHkgU3RhdGVcblxuXHRcdHNWYWx1ZSA9IGAlJHtzVmFsdWV9YDtcblxuXHRcdC8vIFNldHRpbmcgVW5hc3NpZ25lZCBWYWx1ZXNcblx0XHRzRGV2aWF0aW9uTG93ID0gc0RldmlhdGlvbkxvdyB8fCAtSW5maW5pdHk7XG5cdFx0c1RvbGVyYW5jZUxvdyA9IHNUb2xlcmFuY2VMb3cgfHwgc0RldmlhdGlvbkxvdztcblx0XHRzQWNjZXB0YW5jZUxvdyA9IHNBY2NlcHRhbmNlTG93IHx8IHNUb2xlcmFuY2VMb3c7XG5cdFx0c0RldmlhdGlvbkhpZ2ggPSBzRGV2aWF0aW9uSGlnaCB8fCBJbmZpbml0eTtcblx0XHRzVG9sZXJhbmNlSGlnaCA9IHNUb2xlcmFuY2VIaWdoIHx8IHNEZXZpYXRpb25IaWdoO1xuXHRcdHNBY2NlcHRhbmNlSGlnaCA9IHNBY2NlcHRhbmNlSGlnaCB8fCBzVG9sZXJhbmNlSGlnaDtcblxuXHRcdC8vIERlYWxpbmcgd2l0aCBEZWNpbWFsIGFuZCBQYXRoIGJhc2VkIGJpbmdkaW5nc1xuXHRcdHNEZXZpYXRpb25Mb3cgPSBzRGV2aWF0aW9uTG93ICYmICgrc0RldmlhdGlvbkxvdyA/ICtzRGV2aWF0aW9uTG93IDogYCUke3NEZXZpYXRpb25Mb3d9YCk7XG5cdFx0c1RvbGVyYW5jZUxvdyA9IHNUb2xlcmFuY2VMb3cgJiYgKCtzVG9sZXJhbmNlTG93ID8gK3NUb2xlcmFuY2VMb3cgOiBgJSR7c1RvbGVyYW5jZUxvd31gKTtcblx0XHRzQWNjZXB0YW5jZUxvdyA9IHNBY2NlcHRhbmNlTG93ICYmICgrc0FjY2VwdGFuY2VMb3cgPyArc0FjY2VwdGFuY2VMb3cgOiBgJSR7c0FjY2VwdGFuY2VMb3d9YCk7XG5cdFx0c0FjY2VwdGFuY2VIaWdoID0gc0FjY2VwdGFuY2VIaWdoICYmICgrc0FjY2VwdGFuY2VIaWdoID8gK3NBY2NlcHRhbmNlSGlnaCA6IGAlJHtzQWNjZXB0YW5jZUhpZ2h9YCk7XG5cdFx0c1RvbGVyYW5jZUhpZ2ggPSBzVG9sZXJhbmNlSGlnaCAmJiAoK3NUb2xlcmFuY2VIaWdoID8gK3NUb2xlcmFuY2VIaWdoIDogYCUke3NUb2xlcmFuY2VIaWdofWApO1xuXHRcdHNEZXZpYXRpb25IaWdoID0gc0RldmlhdGlvbkhpZ2ggJiYgKCtzRGV2aWF0aW9uSGlnaCA/ICtzRGV2aWF0aW9uSGlnaCA6IGAlJHtzRGV2aWF0aW9uSGlnaH1gKTtcblxuXHRcdC8vIENyZWF0aW5nIHJ1bnRpbWUgZXhwcmVzc2lvbiBiaW5kaW5nIGZyb20gY3JpdGljYWxpdHkgY2FsY3VsYXRpb24gZm9yIENyaXRpY2FsaXR5IFN0YXRlXG5cdFx0aWYgKHNJbXByb3ZlbWVudERpcmVjdGlvbi5pbmNsdWRlcyhcIk1pbmltaXplXCIpKSB7XG5cdFx0XHRzQ3JpdGljYWxpdHlFeHByZXNzaW9uID1cblx0XHRcdFx0XCJ7PSBcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiIDw9IFwiICtcblx0XHRcdFx0c0FjY2VwdGFuY2VIaWdoICtcblx0XHRcdFx0XCIgPyAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLkdvb2QgK1xuXHRcdFx0XHRcIicgOiBcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiIDw9IFwiICtcblx0XHRcdFx0c1RvbGVyYW5jZUhpZ2ggK1xuXHRcdFx0XHRcIiA/ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuTmV1dHJhbCArXG5cdFx0XHRcdFwiJyA6IFwiICtcblx0XHRcdFx0XCIoXCIgK1xuXHRcdFx0XHRzRGV2aWF0aW9uSGlnaCArXG5cdFx0XHRcdFwiICYmIFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPD0gXCIgK1xuXHRcdFx0XHRzRGV2aWF0aW9uSGlnaCArXG5cdFx0XHRcdFwiKSA/ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuQ3JpdGljYWwgK1xuXHRcdFx0XHRcIicgOiAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLkVycm9yICtcblx0XHRcdFx0XCInIH1cIjtcblx0XHR9IGVsc2UgaWYgKHNJbXByb3ZlbWVudERpcmVjdGlvbi5pbmNsdWRlcyhcIk1heGltaXplXCIpKSB7XG5cdFx0XHRzQ3JpdGljYWxpdHlFeHByZXNzaW9uID1cblx0XHRcdFx0XCJ7PSBcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiID49IFwiICtcblx0XHRcdFx0c0FjY2VwdGFuY2VMb3cgK1xuXHRcdFx0XHRcIiA/ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuR29vZCArXG5cdFx0XHRcdFwiJyA6IFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPj0gXCIgK1xuXHRcdFx0XHRzVG9sZXJhbmNlTG93ICtcblx0XHRcdFx0XCIgPyAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLk5ldXRyYWwgK1xuXHRcdFx0XHRcIicgOiBcIiArXG5cdFx0XHRcdFwiKFwiICtcblx0XHRcdFx0c0RldmlhdGlvbkxvdyArXG5cdFx0XHRcdFwiICYmIFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPj0gXCIgK1xuXHRcdFx0XHRzRGV2aWF0aW9uTG93ICtcblx0XHRcdFx0XCIpID8gJ1wiICtcblx0XHRcdFx0VmFsdWVDb2xvci5Dcml0aWNhbCArXG5cdFx0XHRcdFwiJyA6ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuRXJyb3IgK1xuXHRcdFx0XHRcIicgfVwiO1xuXHRcdH0gZWxzZSBpZiAoc0ltcHJvdmVtZW50RGlyZWN0aW9uLmluY2x1ZGVzKFwiVGFyZ2V0XCIpKSB7XG5cdFx0XHRzQ3JpdGljYWxpdHlFeHByZXNzaW9uID1cblx0XHRcdFx0XCJ7PSAoXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA8PSBcIiArXG5cdFx0XHRcdHNBY2NlcHRhbmNlSGlnaCArXG5cdFx0XHRcdFwiICYmIFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPj0gXCIgK1xuXHRcdFx0XHRzQWNjZXB0YW5jZUxvdyArXG5cdFx0XHRcdFwiKSA/ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuR29vZCArXG5cdFx0XHRcdFwiJyA6IFwiICtcblx0XHRcdFx0XCIoKFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPj0gXCIgK1xuXHRcdFx0XHRzVG9sZXJhbmNlTG93ICtcblx0XHRcdFx0XCIgJiYgXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA8IFwiICtcblx0XHRcdFx0c0FjY2VwdGFuY2VMb3cgK1xuXHRcdFx0XHRcIikgfHwgKFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPiBcIiArXG5cdFx0XHRcdHNBY2NlcHRhbmNlSGlnaCArXG5cdFx0XHRcdFwiICYmIFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPD0gXCIgK1xuXHRcdFx0XHRzVG9sZXJhbmNlSGlnaCArXG5cdFx0XHRcdFwiKSkgPyAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLk5ldXRyYWwgK1xuXHRcdFx0XHRcIicgOiBcIiArXG5cdFx0XHRcdFwiKChcIiArXG5cdFx0XHRcdHNEZXZpYXRpb25Mb3cgK1xuXHRcdFx0XHRcIiAmJiAoXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA+PSBcIiArXG5cdFx0XHRcdHNEZXZpYXRpb25Mb3cgK1xuXHRcdFx0XHRcIikgJiYgKFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPCBcIiArXG5cdFx0XHRcdHNUb2xlcmFuY2VMb3cgK1xuXHRcdFx0XHRcIikpIHx8ICgoXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA+IFwiICtcblx0XHRcdFx0c1RvbGVyYW5jZUhpZ2ggK1xuXHRcdFx0XHRcIikgJiYgXCIgK1xuXHRcdFx0XHRzRGV2aWF0aW9uSGlnaCArXG5cdFx0XHRcdFwiICYmIChcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiIDw9IFwiICtcblx0XHRcdFx0c0RldmlhdGlvbkhpZ2ggK1xuXHRcdFx0XHRcIikpKSA/ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuQ3JpdGljYWwgK1xuXHRcdFx0XHRcIicgOiAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLkVycm9yICtcblx0XHRcdFx0XCInIH1cIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0TG9nLndhcm5pbmcoXCJDYXNlIG5vdCBzdXBwb3J0ZWQsIHJldHVybmluZyB0aGUgZGVmYXVsdCBWYWx1ZSBOZXV0cmFsXCIpO1xuXHRcdH1cblxuXHRcdHJldHVybiBzQ3JpdGljYWxpdHlFeHByZXNzaW9uO1xuXHR9LFxuXHQvKipcblx0ICogVG8gZmV0Y2ggbWVhc3VyZSBhdHRyaWJ1dGUgaW5kZXguXG5cdCAqIEBwYXJhbSBpTWVhc3VyZSBDaGFydCBBbm5vdGF0aW9uc1xuXHQgKiBAcGFyYW0gb0NoYXJ0QW5ub3RhdGlvbnMgQ2hhcnQgQW5ub3RhdGlvbnNcblx0ICogQHBhcmFtIGlzTWljcm9DaGFydCBXaGV0aGVyIHRoaXMgaXMgYSBtaWNybyBjaGFydFxuXHQgKiBAcmV0dXJucyBNZWFzdXJlQXR0cmlidXRlIGluZGV4LlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0Z2V0TWVhc3VyZUF0dHJpYnV0ZUluZGV4OiBmdW5jdGlvbiAoaU1lYXN1cmU6IG51bWJlciwgb0NoYXJ0QW5ub3RhdGlvbnM6IE1ldGFNb2RlbFR5cGU8Q2hhcnQ+IHwgQ2hhcnQsIGlzTWljcm9DaGFydD86IGJvb2xlYW4pOiBudW1iZXIge1xuXHRcdGxldCBhTWVhc3VyZXMsIHNNZWFzdXJlUHJvcGVydHlQYXRoO1xuXHRcdGlmIChvQ2hhcnRBbm5vdGF0aW9ucz8uTWVhc3VyZXM/Lmxlbmd0aCAmJiBvQ2hhcnRBbm5vdGF0aW9ucz8uTWVhc3VyZXM/Lmxlbmd0aCA+IDApIHtcblx0XHRcdGFNZWFzdXJlcyA9IG9DaGFydEFubm90YXRpb25zLk1lYXN1cmVzO1xuXHRcdFx0c01lYXN1cmVQcm9wZXJ0eVBhdGggPSBpc01pY3JvQ2hhcnRcblx0XHRcdFx0PyAoYU1lYXN1cmVzW2lNZWFzdXJlXSBhcyBQcm9wZXJ0eVBhdGgpLnZhbHVlXG5cdFx0XHRcdDogKGFNZWFzdXJlc1tpTWVhc3VyZV0gYXMgTWV0YU1vZGVsTWVhc3VyZSkuJFByb3BlcnR5UGF0aDtcblx0XHR9IGVsc2UgaWYgKG9DaGFydEFubm90YXRpb25zPy5EeW5hbWljTWVhc3VyZXM/Lmxlbmd0aCAmJiBvQ2hhcnRBbm5vdGF0aW9ucz8uRHluYW1pY01lYXN1cmVzPy5sZW5ndGggPiAwKSB7XG5cdFx0XHRhTWVhc3VyZXMgPSAob0NoYXJ0QW5ub3RhdGlvbnMgYXMgTWV0YU1vZGVsVHlwZTxDaGFydD4pLkR5bmFtaWNNZWFzdXJlcztcblx0XHRcdHNNZWFzdXJlUHJvcGVydHlQYXRoID0gYU1lYXN1cmVzPy5baU1lYXN1cmVdLiRBbm5vdGF0aW9uUGF0aDtcblx0XHR9XG5cdFx0bGV0IGJNZWFzdXJlQXR0cmlidXRlRXhpc3RzO1xuXHRcdGNvbnN0IGFNZWFzdXJlQXR0cmlidXRlcyA9IG9DaGFydEFubm90YXRpb25zLk1lYXN1cmVBdHRyaWJ1dGVzO1xuXHRcdGxldCBpTWVhc3VyZUF0dHJpYnV0ZSA9IC0xO1xuXHRcdGNvbnN0IGZuQ2hlY2tNZWFzdXJlID0gZnVuY3Rpb24gKFxuXHRcdFx0c01lYXN1cmVQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0XHRvTWVhc3VyZUF0dHJpYnV0ZTogTWV0YU1vZGVsVHlwZTxDaGFydE1lYXN1cmVBdHRyaWJ1dGVUeXBlPiB8IENoYXJ0TWVhc3VyZUF0dHJpYnV0ZVR5cGUsXG5cdFx0XHRpbmRleDogbnVtYmVyXG5cdFx0KTogYm9vbGVhbiB7XG5cdFx0XHRpZiAob01lYXN1cmVBdHRyaWJ1dGUpIHtcblx0XHRcdFx0Y29uc3QgcGF0aCA9IGlzTWljcm9DaGFydFxuXHRcdFx0XHRcdD8gKG9NZWFzdXJlQXR0cmlidXRlIGFzIENoYXJ0TWVhc3VyZUF0dHJpYnV0ZVR5cGUpLk1lYXN1cmU/LnZhbHVlXG5cdFx0XHRcdFx0OiAob01lYXN1cmVBdHRyaWJ1dGUgYXMgTWV0YU1vZGVsVHlwZTxDaGFydE1lYXN1cmVBdHRyaWJ1dGVUeXBlPikuTWVhc3VyZT8uJFByb3BlcnR5UGF0aDtcblx0XHRcdFx0aWYgKG9NZWFzdXJlQXR0cmlidXRlLk1lYXN1cmUgJiYgcGF0aCA9PT0gc01lYXN1cmVQYXRoKSB7XG5cdFx0XHRcdFx0aU1lYXN1cmVBdHRyaWJ1dGUgPSBpbmRleDtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0XHRvTWVhc3VyZUF0dHJpYnV0ZS5EeW5hbWljTWVhc3VyZSAmJlxuXHRcdFx0XHRcdChvTWVhc3VyZUF0dHJpYnV0ZSBhcyBNZXRhTW9kZWxUeXBlPENoYXJ0TWVhc3VyZUF0dHJpYnV0ZVR5cGU+KT8uRHluYW1pY01lYXN1cmU/LiRBbm5vdGF0aW9uUGF0aCA9PT0gc01lYXN1cmVQYXRoXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGlNZWFzdXJlQXR0cmlidXRlID0gaW5kZXg7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xuXHRcdGlmIChhTWVhc3VyZUF0dHJpYnV0ZXMpIHtcblx0XHRcdGJNZWFzdXJlQXR0cmlidXRlRXhpc3RzID0gYU1lYXN1cmVBdHRyaWJ1dGVzLnNvbWUoZm5DaGVja01lYXN1cmUuYmluZChudWxsLCBzTWVhc3VyZVByb3BlcnR5UGF0aCkpO1xuXHRcdH1cblx0XHRyZXR1cm4gYk1lYXN1cmVBdHRyaWJ1dGVFeGlzdHMgJiYgaU1lYXN1cmVBdHRyaWJ1dGUgPiAtMSA/IGlNZWFzdXJlQXR0cmlidXRlIDogLTE7XG5cdH0sXG5cblx0Z2V0TWVhc3VyZUF0dHJpYnV0ZTogYXN5bmMgZnVuY3Rpb24gKG9Db250ZXh0OiBDb250ZXh0KTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCxcblx0XHRcdHNDaGFydEFubm90YXRpb25QYXRoID0gb0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdHJldHVybiBvTWV0YU1vZGVsLnJlcXVlc3RPYmplY3Qoc0NoYXJ0QW5ub3RhdGlvblBhdGgpLnRoZW4oZnVuY3Rpb24gKG9DaGFydEFubm90YXRpb25zOiBNZXRhTW9kZWxUeXBlPENoYXJ0Pikge1xuXHRcdFx0Y29uc3QgYU1lYXN1cmVBdHRyaWJ1dGVzID0gb0NoYXJ0QW5ub3RhdGlvbnMuTWVhc3VyZUF0dHJpYnV0ZXMsXG5cdFx0XHRcdGlNZWFzdXJlQXR0cmlidXRlID0gQ29tbW9uSGVscGVyLmdldE1lYXN1cmVBdHRyaWJ1dGVJbmRleCgwLCBvQ2hhcnRBbm5vdGF0aW9ucyk7XG5cdFx0XHRjb25zdCBzTWVhc3VyZUF0dHJpYnV0ZVBhdGggPVxuXHRcdFx0XHRpTWVhc3VyZUF0dHJpYnV0ZSA+IC0xICYmIGFNZWFzdXJlQXR0cmlidXRlcz8uW2lNZWFzdXJlQXR0cmlidXRlXSAmJiBhTWVhc3VyZUF0dHJpYnV0ZXNbaU1lYXN1cmVBdHRyaWJ1dGVdLkRhdGFQb2ludFxuXHRcdFx0XHRcdD8gYCR7c0NoYXJ0QW5ub3RhdGlvblBhdGh9L01lYXN1cmVBdHRyaWJ1dGVzLyR7aU1lYXN1cmVBdHRyaWJ1dGV9L2Bcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdGlmIChzTWVhc3VyZUF0dHJpYnV0ZVBhdGggPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRMb2cud2FybmluZyhcIkRhdGFQb2ludCBtaXNzaW5nIGZvciB0aGUgbWVhc3VyZVwiKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBzTWVhc3VyZUF0dHJpYnV0ZVBhdGggPyBgJHtzTWVhc3VyZUF0dHJpYnV0ZVBhdGh9RGF0YVBvaW50LyRBbm5vdGF0aW9uUGF0aC9gIDogc01lYXN1cmVBdHRyaWJ1dGVQYXRoO1xuXHRcdH0pO1xuXHR9LFxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBtZWFzdXJlQXR0cmlidXRlIGZvciB0aGUgbWVhc3VyZS5cblx0ICogQHBhcmFtIG9Db250ZXh0IENvbnRleHQgdG8gdGhlIG1lYXN1cmUgYW5ub3RhdGlvblxuXHQgKiBAcmV0dXJucyBQYXRoIHRvIHRoZSBtZWFzdXJlQXR0cmlidXRlIG9mIHRoZSBtZWFzdXJlXG5cdCAqL1xuXHRnZXRNZWFzdXJlQXR0cmlidXRlRm9yTWVhc3VyZTogZnVuY3Rpb24gKG9Db250ZXh0OiBDb250ZXh0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCxcblx0XHRcdHNNZWFzdXJlUGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKSxcblx0XHRcdHNDaGFydEFubm90YXRpb25QYXRoID0gc01lYXN1cmVQYXRoLnN1YnN0cmluZygwLCBzTWVhc3VyZVBhdGgubGFzdEluZGV4T2YoXCJNZWFzdXJlXCIpKSxcblx0XHRcdGlNZWFzdXJlID0gc01lYXN1cmVQYXRoLnJlcGxhY2UoLy4qXFwvLywgXCJcIik7XG5cblx0XHRjb25zdCBvQ2hhcnRBbm5vdGF0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNDaGFydEFubm90YXRpb25QYXRoKTtcblx0XHRjb25zdCBhTWVhc3VyZUF0dHJpYnV0ZXMgPSBvQ2hhcnRBbm5vdGF0aW9ucy5NZWFzdXJlQXR0cmlidXRlcyxcblx0XHRcdGlNZWFzdXJlQXR0cmlidXRlID0gQ29tbW9uSGVscGVyLmdldE1lYXN1cmVBdHRyaWJ1dGVJbmRleChpTWVhc3VyZSBhcyB1bmtub3duIGFzIG51bWJlciwgb0NoYXJ0QW5ub3RhdGlvbnMpO1xuXHRcdGNvbnN0IHNNZWFzdXJlQXR0cmlidXRlUGF0aCA9XG5cdFx0XHRpTWVhc3VyZUF0dHJpYnV0ZSA+IC0xICYmIGFNZWFzdXJlQXR0cmlidXRlc1tpTWVhc3VyZUF0dHJpYnV0ZV0gJiYgYU1lYXN1cmVBdHRyaWJ1dGVzW2lNZWFzdXJlQXR0cmlidXRlXS5EYXRhUG9pbnRcblx0XHRcdFx0PyBgJHtzQ2hhcnRBbm5vdGF0aW9uUGF0aH1NZWFzdXJlQXR0cmlidXRlcy8ke2lNZWFzdXJlQXR0cmlidXRlfS9gXG5cdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGlmIChzTWVhc3VyZUF0dHJpYnV0ZVBhdGggPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0TG9nLndhcm5pbmcoXCJEYXRhUG9pbnQgbWlzc2luZyBmb3IgdGhlIG1lYXN1cmVcIik7XG5cdFx0fVxuXHRcdHJldHVybiBzTWVhc3VyZUF0dHJpYnV0ZVBhdGggPyBgJHtzTWVhc3VyZUF0dHJpYnV0ZVBhdGh9RGF0YVBvaW50LyRBbm5vdGF0aW9uUGF0aC9gIDogc01lYXN1cmVBdHRyaWJ1dGVQYXRoO1xuXHR9LFxuXHQvKipcblx0ICogTWV0aG9kIHRvIGRldGVybWluZSBpZiB0aGUgY29udGFpbmVkIG5hdmlnYXRpb24gcHJvcGVydHkgaGFzIGEgZHJhZnQgcm9vdC9ub2RlIHBhcmVudCBlbnRpdHlTZXQuXG5cdCAqIEBwYXJhbSBvVGFyZ2V0Q29sbGVjdGlvbkNvbnRhaW5zVGFyZ2V0IFRhcmdldCBjb2xsZWN0aW9uIGhhcyBDb250YWluc1RhcmdldCBwcm9wZXJ0eVxuXHQgKiBAcGFyYW0gb1RhYmxlTWV0YWRhdGEgVGFibGUgbWV0YWRhdGEgZm9yIHdoaWNoIGRyYWZ0IHN1cHBvcnQgc2hhbGwgYmUgY2hlY2tlZFxuXHQgKiBAcGFyYW0gb1RhYmxlTWV0YWRhdGEucGFyZW50RW50aXR5U2V0XG5cdCAqIEBwYXJhbSBvVGFibGVNZXRhZGF0YS5wYXJlbnRFbnRpdHlTZXQub01vZGVsXG5cdCAqIEBwYXJhbSBvVGFibGVNZXRhZGF0YS5wYXJlbnRFbnRpdHlTZXQuc1BhdGhcblx0ICogQHJldHVybnMgUmV0dXJucyB0cnVlIGlmIGRyYWZ0XG5cdCAqL1xuXHRpc0RyYWZ0UGFyZW50RW50aXR5Rm9yQ29udGFpbm1lbnQ6IGZ1bmN0aW9uIChcblx0XHRvVGFyZ2V0Q29sbGVjdGlvbkNvbnRhaW5zVGFyZ2V0OiBvYmplY3QsXG5cdFx0b1RhYmxlTWV0YWRhdGE6IHtcblx0XHRcdHBhcmVudEVudGl0eVNldD86IHtcblx0XHRcdFx0b01vZGVsOiBPRGF0YU1ldGFNb2RlbDtcblx0XHRcdFx0c1BhdGg/OiBzdHJpbmc7XG5cdFx0XHR9O1xuXHRcdH1cblx0KTogYm9vbGVhbiB7XG5cdFx0aWYgKG9UYXJnZXRDb2xsZWN0aW9uQ29udGFpbnNUYXJnZXQpIHtcblx0XHRcdGlmIChvVGFibGVNZXRhZGF0YSAmJiBvVGFibGVNZXRhZGF0YS5wYXJlbnRFbnRpdHlTZXQgJiYgb1RhYmxlTWV0YWRhdGEucGFyZW50RW50aXR5U2V0LnNQYXRoKSB7XG5cdFx0XHRcdGNvbnN0IHNQYXJlbnRFbnRpdHlTZXRQYXRoID0gb1RhYmxlTWV0YWRhdGEucGFyZW50RW50aXR5U2V0LnNQYXRoO1xuXHRcdFx0XHRjb25zdCBvRHJhZnRSb290ID0gb1RhYmxlTWV0YWRhdGEucGFyZW50RW50aXR5U2V0Lm9Nb2RlbC5nZXRPYmplY3QoXG5cdFx0XHRcdFx0YCR7c1BhcmVudEVudGl0eVNldFBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3RgXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IG9EcmFmdE5vZGUgPSBvVGFibGVNZXRhZGF0YS5wYXJlbnRFbnRpdHlTZXQub01vZGVsLmdldE9iamVjdChcblx0XHRcdFx0XHRgJHtzUGFyZW50RW50aXR5U2V0UGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Tm9kZWBcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKG9EcmFmdFJvb3QgfHwgb0RyYWZ0Tm9kZSkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEVuc3VyZXMgdGhlIGRhdGEgaXMgcHJvY2Vzc2VkIGFzIGRlZmluZWQgaW4gdGhlIHRlbXBsYXRlLlxuXHQgKiBTaW5jZSB0aGUgcHJvcGVydHkgRGF0YSBpcyBvZiB0aGUgdHlwZSAnb2JqZWN0JywgaXQgbWF5IG5vdCBiZSBpbiB0aGUgc2FtZSBvcmRlciBhcyByZXF1aXJlZCBieSB0aGUgdGVtcGxhdGUuXG5cdCAqIEBwYXJhbSBkYXRhRWxlbWVudCBUaGUgZGF0YSB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyBwcm9jZXNzZWQuXG5cdCAqIEByZXR1cm5zIFRoZSBjb3JyZWN0IHBhdGggYWNjb3JkaW5nIHRvIHRoZSB0ZW1wbGF0ZS5cblx0ICovXG5cdGdldERhdGFGcm9tVGVtcGxhdGU6IGZ1bmN0aW9uIChkYXRhRWxlbWVudDogQ29udGV4dCk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgc3BsaXRQYXRoID0gZGF0YUVsZW1lbnQuZ2V0UGF0aCgpLnNwbGl0KFwiL1wiKTtcblx0XHRjb25zdCBkYXRhS2V5ID0gc3BsaXRQYXRoW3NwbGl0UGF0aC5sZW5ndGggLSAxXTtcblx0XHRjb25zdCBjb25uZWN0ZWREYXRhUGF0aCA9IGAvJHtzcGxpdFBhdGguc2xpY2UoMSwgLTIpLmpvaW4oXCIvXCIpfS9AYDtcblx0XHRjb25zdCBjb25uZWN0ZWRPYmplY3QgPSBkYXRhRWxlbWVudC5nZXRPYmplY3QoY29ubmVjdGVkRGF0YVBhdGgpO1xuXHRcdGNvbnN0IHRlbXBsYXRlID0gY29ubmVjdGVkT2JqZWN0LlRlbXBsYXRlO1xuXHRcdGNvbnN0IHNwbGl0VGVtcCA9IHRlbXBsYXRlLnNwbGl0KFwifVwiKTtcblx0XHRjb25zdCB0ZW1wQXJyYXkgPSBbXTtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHNwbGl0VGVtcC5sZW5ndGggLSAxOyBpKyspIHtcblx0XHRcdGNvbnN0IGtleSA9IHNwbGl0VGVtcFtpXS5zcGxpdChcIntcIilbMV0udHJpbSgpO1xuXHRcdFx0dGVtcEFycmF5LnB1c2goa2V5KTtcblx0XHR9XG5cdFx0T2JqZWN0LmtleXMoY29ubmVjdGVkT2JqZWN0LkRhdGEpLmZvckVhY2goZnVuY3Rpb24gKHNLZXk6IHN0cmluZykge1xuXHRcdFx0aWYgKHNLZXkuc3RhcnRzV2l0aChcIiRcIikpIHtcblx0XHRcdFx0ZGVsZXRlIGNvbm5lY3RlZE9iamVjdC5EYXRhW3NLZXldO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGNvbnN0IGluZGV4ID0gT2JqZWN0LmtleXMoY29ubmVjdGVkT2JqZWN0LkRhdGEpLmluZGV4T2YoZGF0YUtleSk7XG5cdFx0cmV0dXJuIGAvJHtzcGxpdFBhdGguc2xpY2UoMSwgLTIpLmpvaW4oXCIvXCIpfS9EYXRhLyR7dGVtcEFycmF5W2luZGV4XX1gO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdGhlIGVuZCBvZiB0aGUgdGVtcGxhdGUgaGFzIGJlZW4gcmVhY2hlZC5cblx0ICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IG9mIHRoZSBjb25uZWN0ZWQgZmllbGRzLlxuXHQgKiBAcGFyYW0gdGFyZ2V0LlRlbXBsYXRlXG5cdCAqIEBwYXJhbSB0YXJnZXQuRGF0YVxuXHQgKiBAcGFyYW0gZWxlbWVudCBUaGUgZWxlbWVudCB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyBwcm9jZXNzZWQuXG5cdCAqIEByZXR1cm5zIFRydWUgb3IgRmFsc2UgKGRlcGVuZGluZyBvbiB0aGUgdGVtcGxhdGUgaW5kZXgpLlxuXHQgKi9cblx0bm90TGFzdEluZGV4OiBmdW5jdGlvbiAodGFyZ2V0OiB7IFRlbXBsYXRlOiBzdHJpbmc7IERhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0sIGVsZW1lbnQ6IG9iamVjdCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHRlbXBsYXRlID0gdGFyZ2V0LlRlbXBsYXRlO1xuXHRcdGNvbnN0IHNwbGl0VGVtcCA9IHRlbXBsYXRlLnNwbGl0KFwifVwiKTtcblx0XHRjb25zdCB0ZW1wQXJyYXk6IHN0cmluZ1tdID0gW107XG5cdFx0bGV0IGlzTGFzdEluZGV4ID0gZmFsc2U7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzcGxpdFRlbXAubGVuZ3RoIC0gMTsgaSsrKSB7XG5cdFx0XHRjb25zdCBkYXRhS2V5ID0gc3BsaXRUZW1wW2ldLnNwbGl0KFwie1wiKVsxXS50cmltKCk7XG5cdFx0XHR0ZW1wQXJyYXkucHVzaChkYXRhS2V5KTtcblx0XHR9XG5cblx0XHR0ZW1wQXJyYXkuZm9yRWFjaChmdW5jdGlvbiAodGVtcGxhdGVJbmZvOiBzdHJpbmcpIHtcblx0XHRcdGNvbnN0IGxhc3RJbmRleCA9IHRlbXBBcnJheS5sZW5ndGggLSAxO1xuXHRcdFx0aWYgKHRhcmdldC5EYXRhW3RlbXBsYXRlSW5mb10gPT09IGVsZW1lbnQgJiYgdGVtcEFycmF5LmluZGV4T2YodGVtcGxhdGVJbmZvKSA8IGxhc3RJbmRleCkge1xuXHRcdFx0XHRpc0xhc3RJbmRleCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGlzTGFzdEluZGV4O1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHRoZSBkZWxpbWl0ZXIgZnJvbSB0aGUgdGVtcGxhdGUuXG5cdCAqIEBwYXJhbSB0ZW1wbGF0ZSBUaGUgdGVtcGxhdGUgc3RyaW5nLlxuXHQgKiBAcmV0dXJucyBUaGUgZGVsaW1pdGVyIGluIHRoZSB0ZW1wbGF0ZSBzdHJpbmcuXG5cdCAqL1xuXHRnZXREZWxpbWl0ZXI6IGZ1bmN0aW9uICh0ZW1wbGF0ZTogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGVtcGxhdGUuc3BsaXQoXCJ9XCIpWzFdLnNwbGl0KFwie1wiKVswXS50cmltKCk7XG5cdH0sXG5cblx0b01ldGFNb2RlbDogdW5kZWZpbmVkIGFzIE9EYXRhTWV0YU1vZGVsIHwgdW5kZWZpbmVkLFxuXHRzZXRNZXRhTW9kZWw6IGZ1bmN0aW9uIChvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCk6IHZvaWQge1xuXHRcdHRoaXMub01ldGFNb2RlbCA9IG9NZXRhTW9kZWw7XG5cdH0sXG5cblx0Z2V0TWV0YU1vZGVsOiBmdW5jdGlvbiAoKTogT0RhdGFNZXRhTW9kZWwge1xuXHRcdHJldHVybiB0aGlzLm9NZXRhTW9kZWwhO1xuXHR9LFxuXG5cdGdldFBhcmFtZXRlcnM6IGZ1bmN0aW9uIChzUGF0aDogc3RyaW5nLCBtZXRhTW9kZWw/OiBPRGF0YU1ldGFNb2RlbCk6IHN0cmluZ1tdIHtcblx0XHRpZiAobWV0YU1vZGVsKSB7XG5cdFx0XHRjb25zdCBvUGFyYW1ldGVySW5mbyA9IENvbW1vblV0aWxzLmdldFBhcmFtZXRlckluZm8obWV0YU1vZGVsLCBzUGF0aCk7XG5cdFx0XHRpZiAob1BhcmFtZXRlckluZm8ucGFyYW1ldGVyUHJvcGVydGllcykge1xuXHRcdFx0XHRyZXR1cm4gT2JqZWN0LmtleXMob1BhcmFtZXRlckluZm8ucGFyYW1ldGVyUHJvcGVydGllcyk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBbXTtcblx0fSxcblxuXHQvKipcblx0ICogQnVpbGQgYW4gZXhwcmVzc2lvbiBjYWxsaW5nIGFuIGFjdGlvbiBoYW5kbGVyIHZpYSB0aGUgRlBNIGhlbHBlcidzIGFjdGlvbldyYXBwZXIgZnVuY3Rpb25cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgdGhlICdGUE0uYWN0aW9uV3JhcHBlcigpJyBmdW5jdGlvbiBpcyBhdmFpbGFibGUgYXQgcnVudGltZS5cblx0ICogQHBhcmFtIG9BY3Rpb24gQWN0aW9uIG1ldGFkYXRhXG5cdCAqIEBwYXJhbSBvQWN0aW9uLmhhbmRsZXJNb2R1bGUgTW9kdWxlIGNvbnRhaW5pbmcgdGhlIGFjdGlvbiBoYW5kbGVyIG1ldGhvZFxuXHQgKiBAcGFyYW0gb0FjdGlvbi5oYW5kbGVyTWV0aG9kIEFjdGlvbiBoYW5kbGVyIG1ldGhvZCBuYW1lXG5cdCAqIEBwYXJhbSBbb1RoaXNdIGB0aGlzYCAoaWYgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGEgbWFjcm8pXG5cdCAqIEBwYXJhbSBvVGhpcy5pZCBUaGUgdGFibGUncyBJRFxuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG5cdCAqIEByZXR1cm5zIFRoZSBhY3Rpb24gd3JhcHBlciBiaW5kaW5nXHRleHByZXNzaW9uXG5cdCAqL1xuXHRidWlsZEFjdGlvbldyYXBwZXI6IGZ1bmN0aW9uIChcblx0XHRvQWN0aW9uOiBDdXN0b21BY3Rpb24sXG5cdFx0b1RoaXM6IHsgaWQ/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZCxcblx0XHRmb3JDb250ZXh0TWVudSA9IGZhbHNlXG5cdCk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0XHRjb25zdCBhUGFyYW1zOiB1bmtub3duW10gPSBbcmVmKFwiJGV2ZW50XCIpLCBvQWN0aW9uLmhhbmRsZXJNb2R1bGUsIG9BY3Rpb24uaGFuZGxlck1ldGhvZF07XG5cblx0XHRpZiAob1RoaXMgJiYgb1RoaXMuaWQpIHtcblx0XHRcdGNvbnN0IGludGVybmFsTW9kZWxQYXRoID0gIWZvckNvbnRleHRNZW51ID8gXCIke2ludGVybmFsPnNlbGVjdGVkQ29udGV4dHN9XCIgOiBcIiR7aW50ZXJuYWw+Y29udGV4dG1lbnUvc2VsZWN0ZWRDb250ZXh0c31cIjtcblx0XHRcdGNvbnN0IG9BZGRpdGlvbmFsUGFyYW1zID0geyBjb250ZXh0czogcmVmKGludGVybmFsTW9kZWxQYXRoKSB9O1xuXHRcdFx0YVBhcmFtcy5wdXNoKG9BZGRpdGlvbmFsUGFyYW1zKTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGZuKFwiRlBNLmFjdGlvbldyYXBwZXJcIiwgYVBhcmFtcykpO1xuXHR9LFxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgdmFsdWUgd2hldGhlciBvciBub3QgdGhlIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2libGUgZGVwZW5kaW5nIG9uIHRoZSBIaWRkZW4gYW5ub3RhdGlvbi5cblx0ICogSXQgaXMgaW52ZXJ0ZWQgYXMgdGhlIFVJIGVsZW1lbnRzIGhhdmUgYSB2aXNpYmxlIHByb3BlcnR5IGluc3RlYWQgb2YgYSBoaWRkZW4gb25lLlxuXHQgKiBAcGFyYW0gZGF0YUZpZWxkQW5ub3RhdGlvbnMgVGhlIGRhdGFGaWVsZCBvYmplY3Rcblx0ICogQHJldHVybnMgQSBwYXRoIG9yIGEgQm9vbGVhblxuXHQgKi9cblx0Z2V0SGlkZGVuUGF0aEV4cHJlc3Npb246IGZ1bmN0aW9uIChkYXRhRmllbGRBbm5vdGF0aW9uczogUmVjb3JkPHN0cmluZywgeyAkUGF0aD86IHN0cmluZyB9Pik6IHN0cmluZyB8IGJvb2xlYW4ge1xuXHRcdGlmIChkYXRhRmllbGRBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5cIl0gIT09IG51bGwpIHtcblx0XHRcdGNvbnN0IGhpZGRlbiA9IGRhdGFGaWVsZEFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlblwiXTtcblx0XHRcdHJldHVybiB0eXBlb2YgaGlkZGVuID09PSBcIm9iamVjdFwiID8gXCJ7PSAhJHtcIiArIGhpZGRlbi4kUGF0aCArIFwifSB9XCIgOiAhaGlkZGVuO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGZldGNoIHRoZSBjb3JyZWN0IG9wZXJhdG9ycyBiYXNlZCBvbiB0aGUgZmlsdGVyIHJlc3RyaWN0aW9ucyB0aGF0IGNhbiBiZSBhbm5vdGF0ZWQgb24gYW4gZW50aXR5IHNldCBvciBhIG5hdmlnYXRpb24gcHJvcGVydHkuXG5cdCAqIFdlIHJldHVybiB0aGUgY29ycmVjdCBvcGVyYXRvcnMgYmFzZWQgb24gdGhlIHNwZWNpZmllZCByZXN0cmljdGlvbiBhbmQgYWxzbyBjaGVjayBmb3IgdGhlIG9wZXJhdG9ycyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCB0byBpbmNsdWRlIG9yIGV4Y2x1ZGUgdGhlbS5cblx0ICogQHBhcmFtIHNQcm9wZXJ0eSBTdHJpbmcgbmFtZSBvZiB0aGUgcHJvcGVydHlcblx0ICogQHBhcmFtIHNFbnRpdHlTZXRQYXRoIFN0cmluZyBwYXRoIHRvIHRoZSBlbnRpdHkgc2V0XG5cdCAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IHVzZWQgZHVyaW5nIHRlbXBsYXRpbmdcblx0ICogQHBhcmFtIHNUeXBlIFN0cmluZyBkYXRhIHR5cGUgb2QgdGhlIHByb3BlcnR5LCBmb3IgZXhhbXBsZSBlZG0uRGF0ZVxuXHQgKiBAcGFyYW0gYlVzZVNlbWFudGljRGF0ZVJhbmdlIEJvb2xlYW4gcGFzc2VkIGZyb20gdGhlIG1hbmlmZXN0IGZvciBzZW1hbnRpYyBkYXRlIHJhbmdlXG5cdCAqIEBwYXJhbSBzZXR0aW5ncyBTdHJpbmdpZmllZCBvYmplY3Qgb2YgdGhlIHByb3BlcnR5IHNldHRpbmdzIG9yIHByb3BlcnR5IHNldHRpbmdzIGFzIGEgd2hvbGVcblx0ICogQHJldHVybnMgQW4gYXJyYXkgb2Ygc3RyaW5ncyByZXByZXNlbnRpbmcgb3BlcmF0b3JzIGZvciBmaWx0ZXJpbmdcblx0ICovXG5cdGdldE9wZXJhdG9yc0ZvclByb3BlcnR5OiBmdW5jdGlvbiAoXG5cdFx0c1Byb3BlcnR5OiBzdHJpbmcsXG5cdFx0c0VudGl0eVNldFBhdGg6IHN0cmluZyxcblx0XHRvQ29udGV4dDogT0RhdGFNZXRhTW9kZWwsXG5cdFx0c1R5cGU/OiBzdHJpbmcsXG5cdFx0YlVzZVNlbWFudGljRGF0ZVJhbmdlPzogYm9vbGVhbiB8IHN0cmluZyxcblx0XHRzZXR0aW5ncz86IEZpbHRlclNldHRpbmdzIHwgc3RyaW5nXG5cdCk6IHN0cmluZ1tdIHtcblx0XHRjb25zdCBkYXRhTW9kZWwgPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG9Db250ZXh0LmdldENvbnRleHQoc0VudGl0eVNldFBhdGgpKTtcblx0XHRjb25zdCBvRmlsdGVyUmVzdHJpY3Rpb25zID0gRmlsdGVyUmVzdHJpY3Rpb25zLmdldEZpbHRlclJlc3RyaWN0aW9uc0J5RGF0YU1vZGVsKFxuXHRcdFx0ZGF0YU1vZGVsIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuXHRcdCk7XG5cdFx0Y29uc3QgYUVxdWFsc09wcyA9IFtcIkVRXCJdO1xuXHRcdGNvbnN0IGFTaW5nbGVSYW5nZU9wcyA9IFtcIkVRXCIsIFwiR0VcIiwgXCJMRVwiLCBcIkxUXCIsIFwiR1RcIiwgXCJCVFwiLCBcIk5FXCIsIFwiTk9UQlRcIiwgXCJOT1RMRVwiLCBcIk5PVExUXCIsIFwiTk9UR0VcIiwgXCJOT1RHVFwiXTtcblx0XHRjb25zdCBhU2luZ2xlUmFuZ2VEVEJhc2ljT3BzID0gW1wiRVFcIiwgXCJCVFwiXTtcblx0XHRjb25zdCBhTXVsdGlSYW5nZU9wcyA9IFtcIkVRXCIsIFwiR0VcIiwgXCJMRVwiLCBcIkxUXCIsIFwiR1RcIiwgXCJCVFwiLCBcIk5FXCIsIFwiTk9UQlRcIiwgXCJOT1RMRVwiLCBcIk5PVExUXCIsIFwiTk9UR0VcIiwgXCJOT1RHVFwiXTtcblx0XHRjb25zdCBhU2VhcmNoRXhwcmVzc2lvbk9wcyA9IFtcIkNvbnRhaW5zXCIsIFwiTm90Q29udGFpbnNcIiwgXCJTdGFydHNXaXRoXCIsIFwiTm90U3RhcnRzV2l0aFwiLCBcIkVuZHNXaXRoXCIsIFwiTm90RW5kc1dpdGhcIl07XG5cdFx0Y29uc3QgYUJhc2ljU2VtYW50aWNEYXRlT3BzID0gU2VtYW50aWNEYXRlT3BlcmF0b3JzLmdldEJhc2ljU2VtYW50aWNEYXRlT3BlcmF0aW9ucygpO1xuXHRcdGNvbnN0IGJTZW1hbnRpY0RhdGVSYW5nZSA9IGJVc2VTZW1hbnRpY0RhdGVSYW5nZSA9PT0gXCJ0cnVlXCIgfHwgYlVzZVNlbWFudGljRGF0ZVJhbmdlID09PSB0cnVlO1xuXHRcdGxldCBhU2VtYW50aWNEYXRlT3BzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGNvbnN0IG9TZXR0aW5ncyA9IHNldHRpbmdzICYmIHR5cGVvZiBzZXR0aW5ncyA9PT0gXCJzdHJpbmdcIiA/IEpTT04ucGFyc2Uoc2V0dGluZ3MpLmN1c3RvbURhdGEgOiBzZXR0aW5ncztcblxuXHRcdC8vIEluaXRpYWxpemUgRW1wdHkgb3BlcmF0b3JzIGJhc2VkIG9uIGZpZWxkIHR5cGUgYW5kIG1hbmlmZXN0IHNldHRpbmdzXG5cdFx0Y29uc3QgZW1wdHlPcHMgPSBfZ2V0RW1wdHlPcHMoc1R5cGUgfHwgXCJcIiwgb1NldHRpbmdzLCBiU2VtYW50aWNEYXRlUmFuZ2UpO1xuXG5cdFx0aWYgKChvQ29udGV4dC5nZXRPYmplY3QoYCR7c0VudGl0eVNldFBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVzdWx0Q29udGV4dGApIGFzIHVua25vd24pID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm4gYUVxdWFsc09wcztcblx0XHR9XG5cblx0XHRpZiAob1NldHRpbmdzICYmIG9TZXR0aW5ncy5vcGVyYXRvckNvbmZpZ3VyYXRpb24gJiYgb1NldHRpbmdzLm9wZXJhdG9yQ29uZmlndXJhdGlvbi5sZW5ndGggPiAwKSB7XG5cdFx0XHRhU2VtYW50aWNEYXRlT3BzID0gU2VtYW50aWNEYXRlT3BlcmF0b3JzLmdldEZpbHRlck9wZXJhdGlvbnMob1NldHRpbmdzLm9wZXJhdG9yQ29uZmlndXJhdGlvbiwgc1R5cGUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhU2VtYW50aWNEYXRlT3BzID0gRGVmYXVsdFNlbWFudGljRGF0ZU9wZXJhdG9ycy5nZXRTZW1hbnRpY0RhdGVPcGVyYXRpb25zKHNUeXBlKTtcblx0XHR9XG5cdFx0Ly8gR2V0IHRoZSBkZWZhdWx0IE9wZXJhdG9ycyBmb3IgdGhpcyBQcm9wZXJ0eSBUeXBlXG5cdFx0Y29uc3QgYURlZmF1bHRPcGVyYXRvcnMgPSBfZ2V0RGVmYXVsdE9wZXJhdG9ycyhzVHlwZSk7XG5cdFx0bGV0IHN1cHBvcnRlZE9wZXJhdG9ycyA9IGFEZWZhdWx0T3BlcmF0b3JzO1xuXHRcdGlmIChiU2VtYW50aWNEYXRlUmFuZ2UpIHtcblx0XHRcdGNvbnN0IGV4dGVuZGVkU2VtYW50aWNEYXRlT3BlcmF0b3JzID0gRXh0ZW5kZWRTZW1hbnRpY0RhdGVPcGVyYXRvcnMuZ2V0U2VtYW50aWNEYXRlT3BlcmF0aW9ucygpO1xuXHRcdFx0c3VwcG9ydGVkT3BlcmF0b3JzID0gWy4uLmFCYXNpY1NlbWFudGljRGF0ZU9wcywgLi4uYURlZmF1bHRPcGVyYXRvcnMsIC4uLmV4dGVuZGVkU2VtYW50aWNEYXRlT3BlcmF0b3JzXTtcblx0XHR9XG5cblx0XHRsZXQgcmVzdHJpY3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuXG5cdFx0Ly8gSXMgdGhlcmUgYSBGaWx0ZXIgUmVzdHJpY3Rpb24gZGVmaW5lZCBmb3IgdGhpcyBwcm9wZXJ0eT9cblx0XHRpZiAoXG5cdFx0XHRvRmlsdGVyUmVzdHJpY3Rpb25zICYmXG5cdFx0XHRvRmlsdGVyUmVzdHJpY3Rpb25zLkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyAmJlxuXHRcdFx0b0ZpbHRlclJlc3RyaWN0aW9ucy5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnNbc1Byb3BlcnR5XVxuXHRcdCkge1xuXHRcdFx0Ly8gRXh0ZW5kaW5nIHRoZSBkZWZhdWx0IG9wZXJhdG9ycyBsaXN0IHdpdGggU2VtYW50aWMgRGF0ZSBvcHRpb25zIERBVEVSQU5HRSwgREFURSwgRlJPTSBhbmQgVE9cblx0XHRcdGNvbnN0IHNBbGxvd2VkRXhwcmVzc2lvbiA9IENvbW1vblV0aWxzLmdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb24ob0ZpbHRlclJlc3RyaWN0aW9ucy5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnNbc1Byb3BlcnR5XSk7XG5cdFx0XHQvLyBJbiBjYXNlIG1vcmUgdGhhbiBvbmUgQWxsb3dlZCBFeHByZXNzaW9ucyBoYXMgYmVlbiBkZWZpbmVkIGZvciBhIHByb3BlcnR5XG5cdFx0XHQvLyBjaG9vc2UgdGhlIG1vc3QgcmVzdHJpY3RpdmUgQWxsb3dlZCBFeHByZXNzaW9uXG5cblx0XHRcdC8vIE11bHRpVmFsdWUgaGFzIHNhbWUgT3BlcmF0b3IgYXMgU2luZ2xlVmFsdWUsIGJ1dCB0aGVyZSBjYW4gYmUgbW9yZSB0aGFuIG9uZSAobWF4Q29uZGl0aW9ucylcblx0XHRcdHN3aXRjaCAoc0FsbG93ZWRFeHByZXNzaW9uKSB7XG5cdFx0XHRcdGNhc2UgXCJTaW5nbGVWYWx1ZVwiOlxuXHRcdFx0XHRcdGNvbnN0IHNpbmdsZVZhbHVlRGF0ZU9wcyA9IERlZmF1bHRTZW1hbnRpY0RhdGVPcGVyYXRvcnMuZ2V0U2luZ2xlVmFsdWVEYXRlT3BlcmF0aW9ucygpO1xuXHRcdFx0XHRcdGNvbnN0IGFTaW5nbGVWYWx1ZU9wcyA9IHNUeXBlID09PSBcIkVkbS5EYXRlXCIgJiYgYlNlbWFudGljRGF0ZVJhbmdlID8gc2luZ2xlVmFsdWVEYXRlT3BzIDogYUVxdWFsc09wcztcblx0XHRcdFx0XHRyZXN0cmljdGlvbnMgPSBfZ2V0UmVzdHJpY3Rpb25zKHN1cHBvcnRlZE9wZXJhdG9ycywgYVNpbmdsZVZhbHVlT3BzKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIk11bHRpVmFsdWVcIjpcblx0XHRcdFx0XHRjb25zdCBtdWx0aVZhbHVlT3BlcmF0b3JzID0gWy4uLmFFcXVhbHNPcHMsIFwiRW1wdHlcIiwgXCJOb3RFbXB0eVwiXTtcblx0XHRcdFx0XHRyZXN0cmljdGlvbnMgPSBfZ2V0UmVzdHJpY3Rpb25zKHN1cHBvcnRlZE9wZXJhdG9ycywgbXVsdGlWYWx1ZU9wZXJhdG9ycyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJTaW5nbGVSYW5nZVwiOlxuXHRcdFx0XHRcdGxldCBhRXhwcmVzc2lvbk9wczogc3RyaW5nW107XG5cdFx0XHRcdFx0aWYgKGJTZW1hbnRpY0RhdGVSYW5nZSAmJiAoc1R5cGUgPT09IFwiRWRtLkRhdGVcIiB8fCBzVHlwZSA9PT0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIikpIHtcblx0XHRcdFx0XHRcdC8vIE9ubHkgRWRtLkRhdGUgYW5kIEVkbS5EYXRlVGltZU9mZnNldCBnZXQgc2VtYW50aWMgb3BlcmF0b3JzXG5cdFx0XHRcdFx0XHRhRXhwcmVzc2lvbk9wcyA9IFsuLi5hU2VtYW50aWNEYXRlT3BzLCAuLi5lbXB0eU9wc107XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChzVHlwZSA9PT0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIikge1xuXHRcdFx0XHRcdFx0YUV4cHJlc3Npb25PcHMgPSBbLi4uYVNpbmdsZVJhbmdlRFRCYXNpY09wcywgLi4uZW1wdHlPcHNdO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoc1R5cGUgPT09IFwiRWRtLkRhdGVcIikge1xuXHRcdFx0XHRcdFx0YUV4cHJlc3Npb25PcHMgPSBbLi4uYVNpbmdsZVJhbmdlT3BzLCAuLi5lbXB0eU9wc107XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGFFeHByZXNzaW9uT3BzID0gYVNpbmdsZVJhbmdlT3BzO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXN0cmljdGlvbnMgPSBfZ2V0UmVzdHJpY3Rpb25zKHN1cHBvcnRlZE9wZXJhdG9ycywgYUV4cHJlc3Npb25PcHMpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiTXVsdGlSYW5nZVwiOlxuXHRcdFx0XHRcdGNvbnN0IG11bHRpUmFuZ2VPcHMgPVxuXHRcdFx0XHRcdFx0c1R5cGUgPT09IFwiRWRtLkRhdGVcIiB8fCBzVHlwZSA9PT0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIiA/IFsuLi5hTXVsdGlSYW5nZU9wcywgLi4uZW1wdHlPcHNdIDogYU11bHRpUmFuZ2VPcHM7XG5cdFx0XHRcdFx0cmVzdHJpY3Rpb25zID0gX2dldFJlc3RyaWN0aW9ucyhzdXBwb3J0ZWRPcGVyYXRvcnMsIG11bHRpUmFuZ2VPcHMpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiU2VhcmNoRXhwcmVzc2lvblwiOlxuXHRcdFx0XHRcdHJlc3RyaWN0aW9ucyA9IF9nZXRSZXN0cmljdGlvbnMoc3VwcG9ydGVkT3BlcmF0b3JzLCBhU2VhcmNoRXhwcmVzc2lvbk9wcyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJNdWx0aVJhbmdlT3JTZWFyY2hFeHByZXNzaW9uXCI6XG5cdFx0XHRcdFx0cmVzdHJpY3Rpb25zID0gX2dldFJlc3RyaWN0aW9ucyhzdXBwb3J0ZWRPcGVyYXRvcnMsIGFTZWFyY2hFeHByZXNzaW9uT3BzLmNvbmNhdChhTXVsdGlSYW5nZU9wcykpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Ly8gSW4gY2FzZSBBbGxvd2VkRXhwcmVzc2lvbnMgaXMgbm90IHJlY29nbmlzZWQsIHVuZGVmaW5lZCBpbiByZXR1cm4gcmVzdWx0cyBpbiB0aGUgZGVmYXVsdCBzZXQgb2Zcblx0XHRcdC8vIG9wZXJhdG9ycyBmb3IgdGhlIHR5cGUuXG5cdFx0fVxuXHRcdHJldHVybiByZXN0cmljdGlvbnM7XG5cdH0sXG5cdGdldE9wZXJhdG9yc0ZvckRhdGVQcm9wZXJ0eTogZnVuY3Rpb24gKHByb3BlcnR5VHlwZTogc3RyaW5nKTogc3RyaW5nW10ge1xuXHRcdC8vIEluIGNhc2UgQWxsb3dlZEV4cHJlc3Npb25zIGlzIG5vdCBwcm92aWRlZCBmb3IgdHlwZSBFZG0uRGF0ZSB0aGVuIGFsbCB0aGUgZGVmYXVsdFxuXHRcdC8vIG9wZXJhdG9ycyBmb3IgdGhlIHR5cGUgc2hvdWxkIGJlIHJldHVybmVkIGV4Y2x1ZGluZyBzZW1hbnRpYyBvcGVyYXRvcnMgZnJvbSB0aGUgbGlzdC5cblx0XHRjb25zdCBhRGVmYXVsdE9wZXJhdG9ycyA9IF9nZXREZWZhdWx0T3BlcmF0b3JzKHByb3BlcnR5VHlwZSk7XG5cdFx0Y29uc3QgYU11bHRpUmFuZ2VPcHMgPSBbXCJFUVwiLCBcIkdFXCIsIFwiTEVcIiwgXCJMVFwiLCBcIkdUXCIsIFwiQlRcIiwgXCJORVwiLCBcIk5PVEJUXCIsIFwiTk9UTEVcIiwgXCJOT1RMVFwiLCBcIk5PVEdFXCIsIFwiTk9UR1RcIiwgXCJFbXB0eVwiXTtcblx0XHRyZXR1cm4gX2dldFJlc3RyaWN0aW9ucyhhRGVmYXVsdE9wZXJhdG9ycywgYU11bHRpUmFuZ2VPcHMpO1xuXHR9LFxuXHRnZXRBSUljb246IGZ1bmN0aW9uICgpOiBzdHJpbmcge1xuXHRcdHJldHVybiBhaUljb247XG5cdH1cbn07XG4oQ29tbW9uSGVscGVyLmdldFNvcnRDb25kaXRpb25zIGFzIHsgcmVxdWlyZXNJQ29udGV4dD86IGJvb2xlYW4gfSkucmVxdWlyZXNJQ29udGV4dCA9IHRydWU7XG5cbmV4cG9ydCBkZWZhdWx0IENvbW1vbkhlbHBlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBMENBLFNBQVNBLGdCQUFnQkEsQ0FBQ0MsV0FB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SyxLQUFLLFVBQVUsRUFBRTtjQUNoQ3ZCLGNBQWMsR0FBRyxDQUFDLEdBQUdzVCxlQUFlLEVBQUUsR0FBR1MsUUFBUSxDQUFDO1lBQ25ELENBQUMsTUFBTTtjQUNOL1QsY0FBYyxHQUFHc1QsZUFBZTtZQUNqQztZQUNBaUIsWUFBWSxHQUFHelUsZ0JBQWdCLENBQUNzVSxrQkFBa0IsRUFBRXBVLGNBQWMsQ0FBQztZQUNuRTtVQUNELEtBQUssWUFBWTtZQUNoQixNQUFNK1UsYUFBYSxHQUNsQnhULEtBQUssS0FBSyxVQUFVLElBQUlBLEtBQUssS0FBSyxvQkFBb0IsR0FBRyxDQUFDLEdBQUdpUyxjQUFjLEVBQUUsR0FBR08sUUFBUSxDQUFDLEdBQUdQLGNBQWM7WUFDM0dlLFlBQVksR0FBR3pVLGdCQUFnQixDQUFDc1Usa0JBQWtCLEVBQUVXLGFBQWEsQ0FBQztZQUNsRTtVQUNELEtBQUssa0JBQWtCO1lBQ3RCUixZQUFZLEdBQUd6VSxnQkFBZ0IsQ0FBQ3NVLGtCQUFrQixFQUFFWCxvQkFBb0IsQ0FBQztZQUN6RTtVQUNELEtBQUssOEJBQThCO1lBQ2xDYyxZQUFZLEdBQUd6VSxnQkFBZ0IsQ0FBQ3NVLGtCQUFrQixFQUFFWCxvQkFBb0IsQ0FBQ3VCLE1BQU0sQ0FBQ3hCLGNBQWMsQ0FBQyxDQUFDO1lBQ2hHO1VBQ0Q7WUFDQztRQUNGO1FBQ0E7UUFDQTtNQUNEO01BQ0EsT0FBT2UsWUFBWTtJQUNwQixDQUFDO0lBQ0RVLDJCQUEyQixFQUFFLFNBQUFBLENBQVVDLFlBQW9CLEVBQVk7TUFDdEU7TUFDQTtNQUNBLE1BQU1mLGlCQUFpQixHQUFHL1Qsb0JBQW9CLENBQUM4VSxZQUFZLENBQUM7TUFDNUQsTUFBTTFCLGNBQWMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQztNQUN2SCxPQUFPMVQsZ0JBQWdCLENBQUNxVSxpQkFBaUIsRUFBRVgsY0FBYyxDQUFDO0lBQzNELENBQUM7SUFDRDJCLFNBQVMsRUFBRSxTQUFBQSxDQUFBLEVBQW9CO01BQzlCLE9BQU9DLE1BQU07SUFDZDtFQUNELENBQUM7RUFDQXRULFlBQVksQ0FBQ3dJLGlCQUFpQixDQUFvQytLLGdCQUFnQixHQUFHLElBQUk7RUFBQyxPQUU1RXZULFlBQVk7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
|