@sapui5/sap.fe.macros 1.140.0 → 1.141.1
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/Chart.js +53 -2
- package/src/sap/fe/macros/Chart.tsx +55 -0
- package/src/sap/fe/macros/CollaborativeDraftHandler.js +230 -0
- package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +218 -0
- package/src/sap/fe/macros/CommonHelper.js +59 -15
- package/src/sap/fe/macros/CommonHelper.ts +65 -14
- package/src/sap/fe/macros/ConditionalSwitch.js +174 -0
- package/src/sap/fe/macros/ConditionalSwitch.tsx +141 -0
- package/src/sap/fe/macros/ConditionalSwitchProperty.js +78 -0
- package/src/sap/fe/macros/ConditionalSwitchProperty.tsx +62 -0
- package/src/sap/fe/macros/Field.js +14 -10
- package/src/sap/fe/macros/Field.ts +15 -12
- package/src/sap/fe/macros/MacroAPI.js +9 -4
- package/src/sap/fe/macros/MacroAPI.ts +9 -4
- package/src/sap/fe/macros/MultiValueField.js +10 -5
- package/src/sap/fe/macros/MultiValueField.tsx +7 -1
- package/src/sap/fe/macros/Page.js +5 -7
- package/src/sap/fe/macros/Page.tsx +4 -6
- package/src/sap/fe/macros/Paginator.js +9 -4
- package/src/sap/fe/macros/Paginator.tsx +12 -3
- package/src/sap/fe/macros/RichTextEditor.js +3 -2
- package/src/sap/fe/macros/RichTextEditor.tsx +2 -1
- package/src/sap/fe/macros/Status.js +38 -13
- package/src/sap/fe/macros/Status.tsx +26 -6
- package/src/sap/fe/macros/ai/EasyFillDialog.js +11 -17
- package/src/sap/fe/macros/ai/EasyFillDialog.tsx +11 -16
- package/src/sap/fe/macros/ai/EasyFilterBar.js +195 -55
- package/src/sap/fe/macros/ai/EasyFilterBar.tsx +234 -57
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +76 -33
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +89 -40
- package/src/sap/fe/macros/chart/Chart.js +2 -2
- package/src/sap/fe/macros/chart/Chart.tsx +1 -1
- package/src/sap/fe/macros/chart/MdcChartTemplate.js +4 -2
- package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +4 -1
- package/src/sap/fe/macros/contentSwitcher/ContentSwitcher.js +9 -2
- package/src/sap/fe/macros/contentSwitcher/ContentSwitcher.tsx +8 -0
- package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +5 -1
- package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +4 -0
- package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.js +2 -2
- package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.ts +1 -1
- package/src/sap/fe/macros/controls/FilterBar.js +14 -5
- package/src/sap/fe/macros/controls/FilterBar.ts +3 -0
- package/src/sap/fe/macros/controls/RadioButtons.js +61 -38
- package/src/sap/fe/macros/controls/RadioButtons.tsx +39 -18
- package/src/sap/fe/macros/controls/Section.js +4 -3
- package/src/sap/fe/macros/controls/Section.ts +3 -2
- package/src/sap/fe/macros/controls/section/SubSection.js +63 -8
- package/src/sap/fe/macros/controls/section/SubSection.ts +67 -1
- package/src/sap/fe/macros/field/Field.js +2 -2
- package/src/sap/fe/macros/field/Field.tsx +1 -1
- package/src/sap/fe/macros/field/FieldFormatOptions.js +25 -2
- package/src/sap/fe/macros/field/FieldFormatOptions.ts +13 -0
- package/src/sap/fe/macros/field/FieldHelper.js +2 -2
- package/src/sap/fe/macros/field/FieldHelper.ts +1 -4
- package/src/sap/fe/macros/field/FieldTemplating.js +3 -3
- package/src/sap/fe/macros/field/FieldTemplating.ts +4 -2
- package/src/sap/fe/macros/filter/FilterUtils.js +232 -2
- package/src/sap/fe/macros/filter/FilterUtils.ts +290 -4
- package/src/sap/fe/macros/filterBar/FilterBar.block.js +5 -3
- package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +4 -2
- package/src/sap/fe/macros/filterBar/FilterBar.js +2 -2
- package/src/sap/fe/macros/filterBar/FilterBar.tsx +1 -1
- package/src/sap/fe/macros/filterBar/FilterBarAPI.js +63 -27
- package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +49 -3
- package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +5 -3
- package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +5 -2
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +7 -2
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +6 -1
- package/src/sap/fe/macros/form/Form.block.js +7 -8
- package/src/sap/fe/macros/form/Form.block.ts +4 -6
- package/src/sap/fe/macros/form/FormContainer.block.js +555 -4
- package/src/sap/fe/macros/form/FormContainer.block.ts +665 -6
- package/src/sap/fe/macros/form/FormContainer.fragment.xml +1 -0
- package/src/sap/fe/macros/form/FormDelegate.js +6 -9
- package/src/sap/fe/macros/form/FormDelegate.ts +5 -8
- package/src/sap/fe/macros/internal/DataPoint.js +3 -2
- package/src/sap/fe/macros/internal/DataPoint.tsx +10 -1
- package/src/sap/fe/macros/internal/FilterField.block.js +16 -8
- package/src/sap/fe/macros/internal/FilterField.block.ts +11 -7
- package/src/sap/fe/macros/internal/field/DisplayStyle.js +7 -1
- package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +8 -0
- package/src/sap/fe/macros/internal/field/EditStyle.js +21 -4
- package/src/sap/fe/macros/internal/field/EditStyle.tsx +18 -4
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +3 -2
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +4 -1
- package/src/sap/fe/macros/internal/filterField/FilterFieldTemplate.fragment.xml +1 -0
- package/src/sap/fe/macros/internal/helpers/ActionHelper.js +36 -5
- package/src/sap/fe/macros/internal/helpers/ActionHelper.ts +34 -4
- package/src/sap/fe/macros/library.js +1 -1
- package/src/sap/fe/macros/mdc/adapter/StateFilterToSelectionVariant.js +2 -1
- package/src/sap/fe/macros/mdc/adapter/StateFilterToSelectionVariant.ts +1 -0
- package/src/sap/fe/macros/messagebundle.properties +20 -2
- package/src/sap/fe/macros/messagebundle_ar.properties +1 -1
- package/src/sap/fe/macros/messagebundle_bg.properties +1 -1
- package/src/sap/fe/macros/messagebundle_ca.properties +1 -1
- package/src/sap/fe/macros/messagebundle_cnr.properties +1 -1
- package/src/sap/fe/macros/messagebundle_cs.properties +1 -1
- package/src/sap/fe/macros/messagebundle_cy.properties +1 -1
- package/src/sap/fe/macros/messagebundle_da.properties +1 -1
- package/src/sap/fe/macros/messagebundle_de.properties +4 -4
- package/src/sap/fe/macros/messagebundle_el.properties +1 -1
- package/src/sap/fe/macros/messagebundle_en.properties +1 -1
- package/src/sap/fe/macros/messagebundle_en_GB.properties +1 -1
- package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +1 -1
- package/src/sap/fe/macros/messagebundle_es.properties +2 -2
- package/src/sap/fe/macros/messagebundle_es_MX.properties +1 -1
- package/src/sap/fe/macros/messagebundle_et.properties +1 -1
- package/src/sap/fe/macros/messagebundle_fi.properties +1 -1
- package/src/sap/fe/macros/messagebundle_fr.properties +1 -1
- package/src/sap/fe/macros/messagebundle_fr_CA.properties +1 -1
- package/src/sap/fe/macros/messagebundle_hi.properties +1 -1
- package/src/sap/fe/macros/messagebundle_hr.properties +1 -1
- package/src/sap/fe/macros/messagebundle_hu.properties +1 -1
- package/src/sap/fe/macros/messagebundle_id.properties +5 -5
- package/src/sap/fe/macros/messagebundle_it.properties +1 -1
- package/src/sap/fe/macros/messagebundle_iw.properties +1 -1
- package/src/sap/fe/macros/messagebundle_ja.properties +5 -5
- package/src/sap/fe/macros/messagebundle_kk.properties +1 -1
- package/src/sap/fe/macros/messagebundle_ko.properties +2 -2
- package/src/sap/fe/macros/messagebundle_lt.properties +2 -2
- package/src/sap/fe/macros/messagebundle_lv.properties +1 -1
- package/src/sap/fe/macros/messagebundle_mk.properties +2 -2
- package/src/sap/fe/macros/messagebundle_ms.properties +1 -1
- package/src/sap/fe/macros/messagebundle_nl.properties +1 -1
- package/src/sap/fe/macros/messagebundle_no.properties +1 -1
- package/src/sap/fe/macros/messagebundle_pl.properties +1 -1
- package/src/sap/fe/macros/messagebundle_pt.properties +1 -1
- package/src/sap/fe/macros/messagebundle_pt_PT.properties +1 -1
- package/src/sap/fe/macros/messagebundle_ro.properties +1 -1
- package/src/sap/fe/macros/messagebundle_ru.properties +1 -1
- package/src/sap/fe/macros/messagebundle_sh.properties +1 -1
- package/src/sap/fe/macros/messagebundle_sk.properties +1 -1
- package/src/sap/fe/macros/messagebundle_sl.properties +1 -1
- package/src/sap/fe/macros/messagebundle_sr.properties +1 -1
- package/src/sap/fe/macros/messagebundle_sv.properties +1 -1
- package/src/sap/fe/macros/messagebundle_th.properties +1 -1
- package/src/sap/fe/macros/messagebundle_tr.properties +1 -1
- package/src/sap/fe/macros/messagebundle_uk.properties +1 -1
- package/src/sap/fe/macros/messagebundle_vi.properties +2 -2
- package/src/sap/fe/macros/messagebundle_zh_CN.properties +1 -1
- package/src/sap/fe/macros/messagebundle_zh_TW.properties +1 -1
- package/src/sap/fe/macros/messages/MessageButton.js +1 -1
- package/src/sap/fe/macros/messages/MessageButton.ts +2 -2
- package/src/sap/fe/macros/messages/MessagePopover.js +3 -1
- package/src/sap/fe/macros/messages/MessagePopover.ts +2 -0
- package/src/sap/fe/macros/microchart/MicroChart.js +2 -2
- package/src/sap/fe/macros/microchart/MicroChart.tsx +1 -1
- package/src/sap/fe/macros/microchart/MicroChartHelper.js +2 -2
- package/src/sap/fe/macros/microchart/MicroChartHelper.tsx +1 -1
- package/src/sap/fe/macros/table/ActionsTemplating.js +4 -8
- package/src/sap/fe/macros/table/ActionsTemplating.tsx +5 -8
- package/src/sap/fe/macros/table/BasicSearch.js +1 -1
- package/src/sap/fe/macros/table/BasicSearch.ts +2 -1
- package/src/sap/fe/macros/table/Column.js +14 -2
- package/src/sap/fe/macros/table/Column.ts +7 -0
- package/src/sap/fe/macros/table/ColumnExportSettings.js +83 -15
- package/src/sap/fe/macros/table/ColumnExportSettings.ts +44 -0
- package/src/sap/fe/macros/table/ColumnOverride.js +14 -2
- package/src/sap/fe/macros/table/ColumnOverride.ts +7 -0
- package/src/sap/fe/macros/table/MdcTableTemplate.js +5 -5
- package/src/sap/fe/macros/table/MdcTableTemplate.tsx +15 -9
- package/src/sap/fe/macros/table/QuickFilterSelector.js +12 -3
- package/src/sap/fe/macros/table/QuickFilterSelector.tsx +15 -2
- package/src/sap/fe/macros/table/Table.block.js +188 -147
- package/src/sap/fe/macros/table/Table.block.tsx +41 -11
- package/src/sap/fe/macros/table/Table.js +16 -10
- package/src/sap/fe/macros/table/Table.tsx +16 -10
- package/src/sap/fe/macros/table/TableAPI.js +224 -184
- package/src/sap/fe/macros/table/TableAPI.ts +63 -19
- package/src/sap/fe/macros/table/TableEventHandlerProvider.js +6 -6
- package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +5 -4
- package/src/sap/fe/macros/table/TableHelper.js +2 -2
- package/src/sap/fe/macros/table/TableHelper.ts +1 -1
- package/src/sap/fe/macros/table/TreeTable.js +16 -10
- package/src/sap/fe/macros/table/TreeTable.tsx +16 -10
- package/src/sap/fe/macros/table/Utils.js +3 -2
- package/src/sap/fe/macros/table/Utils.ts +7 -2
- package/src/sap/fe/macros/table/delegates/TableDelegate.js +69 -33
- package/src/sap/fe/macros/table/delegates/TableDelegate.ts +75 -32
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +10 -10
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +11 -9
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +14 -12
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +11 -10
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +34 -4
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +45 -2
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +55 -12
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +71 -9
- package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +53 -2
- package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +55 -0
- package/src/sap/fe/macros/table/mixin/TableExport.js +22 -3
- package/src/sap/fe/macros/table/mixin/TableExport.ts +25 -4
- package/src/sap/fe/macros/table/mixin/TableSharing.js +3 -2
- package/src/sap/fe/macros/table/mixin/TableSharing.ts +4 -3
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +27 -10
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +31 -13
- package/src/sap/fe/macros/visualfilters/VisualFilter.js +5 -3
- package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +3 -1
|
@@ -2,14 +2,15 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2025 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUtils", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers/PromiseKeeper", "sap/fe/core/library", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/macros/MacroAPI", "sap/fe/macros/filter/FilterUtils", "sap/fe/macros/filterBar/SemanticDateOperators", "sap/fe/macros/mdc/adapter/StateHelper", "sap/fe/navigation/SelectionVariant", "sap/fe/navigation/library", "sap/ui/core/Element", "sap/ui/fl/apply/api/ControlVariantApplyAPI", "sap/ui/mdc/enums/FieldEditMode", "sap/ui/mdc/p13n/StateUtil", "sap/ui/thirdparty/jquery", "./mixin/FilterBarAPIStateHandler"], function (Log, merge, ClassSupport, CommonUtils, MetaModelConverter, PromiseKeeper, library, DataModelPathHelper, MacroAPI, FilterUtils, SemanticDateOperators, stateHelper, SelectionVariant, navigationLibrary, UI5Element, ControlVariantApplyAPI, FieldEditMode, StateUtil, jQuery, FilterBarAPIStateHandler) {
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport", "sap/fe/base/HookSupport", "sap/fe/core/CommonUtils", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers/PromiseKeeper", "sap/fe/core/library", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/macros/MacroAPI", "sap/fe/macros/filter/FilterUtils", "sap/fe/macros/filterBar/SemanticDateOperators", "sap/fe/macros/mdc/adapter/StateHelper", "sap/fe/navigation/SelectionVariant", "sap/fe/navigation/library", "sap/ui/core/Element", "sap/ui/fl/apply/api/ControlVariantApplyAPI", "sap/ui/mdc/enums/FieldEditMode", "sap/ui/mdc/p13n/StateUtil", "sap/ui/thirdparty/jquery", "./mixin/FilterBarAPIStateHandler"], function (Log, merge, ClassSupport, HookSupport, CommonUtils, MetaModelConverter, PromiseKeeper, library, DataModelPathHelper, MacroAPI, FilterUtils, SemanticDateOperators, stateHelper, SelectionVariant, navigationLibrary, UI5Element, ControlVariantApplyAPI, FieldEditMode, StateUtil, jQuery, FilterBarAPIStateHandler) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
|
-
var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _dec17, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor10, _descriptor11, _descriptor12, _descriptor13;
|
|
8
|
+
var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _dec17, _dec18, _dec19, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor10, _descriptor11, _descriptor12, _descriptor13;
|
|
9
9
|
var NavType = navigationLibrary.NavType;
|
|
10
10
|
var getContextRelativeTargetObjectPath = DataModelPathHelper.getContextRelativeTargetObjectPath;
|
|
11
11
|
var InitialLoadMode = library.InitialLoadMode;
|
|
12
12
|
var getInvolvedDataModelObjects = MetaModelConverter.getInvolvedDataModelObjects;
|
|
13
|
+
var controllerExtensionHandler = HookSupport.controllerExtensionHandler;
|
|
13
14
|
var xmlEventHandler = ClassSupport.xmlEventHandler;
|
|
14
15
|
var property = ClassSupport.property;
|
|
15
16
|
var mixin = ClassSupport.mixin;
|
|
@@ -19,8 +20,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
19
20
|
function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }
|
|
20
21
|
function _inheritsLoose(t, o) { t.prototype = Object.create(o.prototype), t.prototype.constructor = t, _setPrototypeOf(t, o); }
|
|
21
22
|
function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
|
|
22
|
-
function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, ("value" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }
|
|
23
23
|
function _initializerWarningHelper(r, e) { throw Error("Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform."); }
|
|
24
|
+
function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, ("value" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }
|
|
24
25
|
// Track telemetry content for the filterBar
|
|
25
26
|
let FilterBarTelemetry = /*#__PURE__*/function () {
|
|
26
27
|
function FilterBarTelemetry(filterBarAPI) {
|
|
@@ -79,6 +80,11 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
79
80
|
}(VariantManagementType || {});
|
|
80
81
|
const DISPLAY_CURRENCY_PROPERTY_NAME = "DisplayCurrency";
|
|
81
82
|
const P_DISPLAY_CURRENCY_PROPERTY_NAME = "P_DisplayCurrency";
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* The key type includes 'boolean' to support legacy scenarios where 'dataLoaded' may be present at the parent level as a boolean,
|
|
86
|
+
* as well as at instance level as an object with a 'dataLoaded' property. This ensures compatibility with both usages.
|
|
87
|
+
*/
|
|
82
88
|
/**
|
|
83
89
|
* Building block for creating a FilterBar based on the metadata provided by OData V4.
|
|
84
90
|
* {@link demo:sap/fe/core/fpmExplorer/index.html#/buildingBlocks/filterBar/filterBarDefault Overview of Building Blocks}
|
|
@@ -95,37 +101,38 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
95
101
|
*/
|
|
96
102
|
let FilterBarAPI = (_dec = defineUI5Class("sap.fe.macros.filterBar.FilterBarAPI", {
|
|
97
103
|
returnTypes: ["sap.ui.core.Control"]
|
|
98
|
-
}), _dec2 = mixin(FilterBarAPIStateHandler), _dec3 = property({
|
|
104
|
+
}), _dec2 = mixin(FilterBarAPIStateHandler), _dec3 = controllerExtensionHandler("viewState", "retrieveAdditionalStates"), _dec4 = controllerExtensionHandler("viewState", "applyAdditionalStates"), _dec5 = property({
|
|
99
105
|
type: "string"
|
|
100
|
-
}),
|
|
106
|
+
}), _dec6 = property({
|
|
101
107
|
type: "string",
|
|
102
108
|
expectedAnnotations: ["com.sap.vocabularies.UI.v1.SelectionFields"],
|
|
103
109
|
expectedTypes: ["EntitySet", "EntityType"]
|
|
104
|
-
}),
|
|
110
|
+
}), _dec7 = property({
|
|
105
111
|
type: "string",
|
|
106
112
|
expectedTypes: ["EntitySet", "EntityType", "NavigationProperty"]
|
|
107
|
-
}),
|
|
113
|
+
}), _dec8 = property({
|
|
108
114
|
type: "boolean",
|
|
109
115
|
defaultValue: false
|
|
110
|
-
}),
|
|
116
|
+
}), _dec9 = property({
|
|
111
117
|
type: "boolean",
|
|
112
118
|
defaultValue: true
|
|
113
|
-
}),
|
|
119
|
+
}), _dec10 = property({
|
|
114
120
|
type: "boolean",
|
|
115
121
|
defaultValue: true
|
|
116
|
-
}),
|
|
122
|
+
}), _dec11 = property({
|
|
117
123
|
type: "boolean",
|
|
118
124
|
defaultValue: false
|
|
119
|
-
}),
|
|
125
|
+
}), _dec12 = aggregation({
|
|
120
126
|
type: "sap.fe.macros.filterBar.FilterField",
|
|
121
127
|
multiple: true
|
|
122
|
-
}),
|
|
128
|
+
}), _dec13 = event(), _dec14 = event(), _dec15 = event(), _dec16 = event(), _dec17 = event(), _dec18 = xmlEventHandler(), _dec19 = xmlEventHandler(), _dec(_class = _dec2(_class = (_class2 = /*#__PURE__*/function (_MacroAPI) {
|
|
123
129
|
function FilterBarAPI(props, others) {
|
|
124
130
|
var _this;
|
|
125
131
|
_this = _MacroAPI.call(this, props, others) || this;
|
|
126
132
|
_this.initialControlState = {};
|
|
127
133
|
_this._initialStatePromise = new PromiseKeeper();
|
|
128
134
|
_this._bSearchTriggered = false;
|
|
135
|
+
_this._hasPendingFilters = true;
|
|
129
136
|
/**
|
|
130
137
|
* The identifier of the FilterBar control.
|
|
131
138
|
*/
|
|
@@ -199,6 +206,27 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
199
206
|
}
|
|
200
207
|
_inheritsLoose(FilterBarAPI, _MacroAPI);
|
|
201
208
|
var _proto2 = FilterBarAPI.prototype;
|
|
209
|
+
_proto2.retrieveAdditionalStates = function retrieveAdditionalStates(additionalStates) {
|
|
210
|
+
additionalStates[this.getId()] = {
|
|
211
|
+
dataLoaded: !this._hasPendingFilters
|
|
212
|
+
};
|
|
213
|
+
};
|
|
214
|
+
_proto2.applyAdditionalStates = function applyAdditionalStates(additionalStates) {
|
|
215
|
+
const instanceState = additionalStates[this.getId()];
|
|
216
|
+
let instanceDataLoaded;
|
|
217
|
+
if (typeof instanceState === "object" && instanceState !== null) {
|
|
218
|
+
instanceDataLoaded = instanceState.dataLoaded;
|
|
219
|
+
} else {
|
|
220
|
+
instanceDataLoaded = undefined;
|
|
221
|
+
}
|
|
222
|
+
const parentDataLoaded = "dataLoaded" in additionalStates && typeof additionalStates.dataLoaded === "boolean" ? additionalStates.dataLoaded : undefined;
|
|
223
|
+
if (parentDataLoaded === true || instanceDataLoaded === true) {
|
|
224
|
+
this.triggerSearch();
|
|
225
|
+
}
|
|
226
|
+
if (parentDataLoaded === false || instanceDataLoaded === false) {
|
|
227
|
+
this.content._bSearchTriggered = false;
|
|
228
|
+
}
|
|
229
|
+
};
|
|
202
230
|
_proto2.waitForInitialState = async function waitForInitialState() {
|
|
203
231
|
return this._initialStatePromise.promise;
|
|
204
232
|
};
|
|
@@ -579,6 +607,10 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
579
607
|
this.fireEvent("search", merge({
|
|
580
608
|
reason: eventParameters.reason
|
|
581
609
|
}, preparedEventParameters));
|
|
610
|
+
this._hasPendingFilters = false;
|
|
611
|
+
if (!this.liveMode) {
|
|
612
|
+
this.getPageController()?.getExtensionAPI().updateAppState();
|
|
613
|
+
}
|
|
582
614
|
}
|
|
583
615
|
};
|
|
584
616
|
_proto2.handleFilterChanged = function handleFilterChanged(oEvent) {
|
|
@@ -592,6 +624,10 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
592
624
|
conditions: oConditions
|
|
593
625
|
}, oEventParameters));
|
|
594
626
|
this.fireEvent("filterChanged", eventParameters);
|
|
627
|
+
// Set hasPendingFilters to true only if conditionsBased is true
|
|
628
|
+
if (oEventParameters?.conditionsBased) {
|
|
629
|
+
this._hasPendingFilters = true;
|
|
630
|
+
}
|
|
595
631
|
}
|
|
596
632
|
};
|
|
597
633
|
_proto2._getFilterBarReason = function _getFilterBarReason(filterBar) {
|
|
@@ -932,72 +968,72 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
932
968
|
return this.content?.getAssignedFiltersText()?.filtersText;
|
|
933
969
|
};
|
|
934
970
|
return FilterBarAPI;
|
|
935
|
-
}(MacroAPI), _descriptor = _applyDecoratedDescriptor(_class2.prototype, "id", [
|
|
971
|
+
}(MacroAPI), _applyDecoratedDescriptor(_class2.prototype, "retrieveAdditionalStates", [_dec3], Object.getOwnPropertyDescriptor(_class2.prototype, "retrieveAdditionalStates"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "applyAdditionalStates", [_dec4], Object.getOwnPropertyDescriptor(_class2.prototype, "applyAdditionalStates"), _class2.prototype), _descriptor = _applyDecoratedDescriptor(_class2.prototype, "id", [_dec5], {
|
|
936
972
|
configurable: true,
|
|
937
973
|
enumerable: true,
|
|
938
974
|
writable: true,
|
|
939
975
|
initializer: null
|
|
940
|
-
}), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "metaPath", [
|
|
976
|
+
}), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "metaPath", [_dec6], {
|
|
941
977
|
configurable: true,
|
|
942
978
|
enumerable: true,
|
|
943
979
|
writable: true,
|
|
944
980
|
initializer: null
|
|
945
|
-
}), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, "contextPath", [
|
|
981
|
+
}), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, "contextPath", [_dec7], {
|
|
946
982
|
configurable: true,
|
|
947
983
|
enumerable: true,
|
|
948
984
|
writable: true,
|
|
949
985
|
initializer: null
|
|
950
|
-
}), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, "liveMode", [
|
|
986
|
+
}), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, "liveMode", [_dec8], {
|
|
951
987
|
configurable: true,
|
|
952
988
|
enumerable: true,
|
|
953
989
|
writable: true,
|
|
954
990
|
initializer: null
|
|
955
|
-
}), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, "visible", [
|
|
991
|
+
}), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, "visible", [_dec9], {
|
|
956
992
|
configurable: true,
|
|
957
993
|
enumerable: true,
|
|
958
994
|
writable: true,
|
|
959
995
|
initializer: null
|
|
960
|
-
}), _descriptor6 = _applyDecoratedDescriptor(_class2.prototype, "showMessages", [
|
|
996
|
+
}), _descriptor6 = _applyDecoratedDescriptor(_class2.prototype, "showMessages", [_dec10], {
|
|
961
997
|
configurable: true,
|
|
962
998
|
enumerable: true,
|
|
963
999
|
writable: true,
|
|
964
1000
|
initializer: null
|
|
965
|
-
}), _descriptor7 = _applyDecoratedDescriptor(_class2.prototype, "showClearButton", [
|
|
1001
|
+
}), _descriptor7 = _applyDecoratedDescriptor(_class2.prototype, "showClearButton", [_dec11], {
|
|
966
1002
|
configurable: true,
|
|
967
1003
|
enumerable: true,
|
|
968
1004
|
writable: true,
|
|
969
1005
|
initializer: null
|
|
970
|
-
}), _descriptor8 = _applyDecoratedDescriptor(_class2.prototype, "filterFields", [
|
|
1006
|
+
}), _descriptor8 = _applyDecoratedDescriptor(_class2.prototype, "filterFields", [_dec12], {
|
|
971
1007
|
configurable: true,
|
|
972
1008
|
enumerable: true,
|
|
973
1009
|
writable: true,
|
|
974
1010
|
initializer: null
|
|
975
|
-
}), _descriptor9 = _applyDecoratedDescriptor(_class2.prototype, "search", [
|
|
1011
|
+
}), _descriptor9 = _applyDecoratedDescriptor(_class2.prototype, "search", [_dec13], {
|
|
976
1012
|
configurable: true,
|
|
977
1013
|
enumerable: true,
|
|
978
1014
|
writable: true,
|
|
979
1015
|
initializer: null
|
|
980
|
-
}), _descriptor10 = _applyDecoratedDescriptor(_class2.prototype, "internalSearch", [
|
|
1016
|
+
}), _descriptor10 = _applyDecoratedDescriptor(_class2.prototype, "internalSearch", [_dec14], {
|
|
981
1017
|
configurable: true,
|
|
982
1018
|
enumerable: true,
|
|
983
1019
|
writable: true,
|
|
984
1020
|
initializer: null
|
|
985
|
-
}), _descriptor11 = _applyDecoratedDescriptor(_class2.prototype, "filterChanged", [
|
|
1021
|
+
}), _descriptor11 = _applyDecoratedDescriptor(_class2.prototype, "filterChanged", [_dec15], {
|
|
986
1022
|
configurable: true,
|
|
987
1023
|
enumerable: true,
|
|
988
1024
|
writable: true,
|
|
989
1025
|
initializer: null
|
|
990
|
-
}), _descriptor12 = _applyDecoratedDescriptor(_class2.prototype, "afterClear", [
|
|
1026
|
+
}), _descriptor12 = _applyDecoratedDescriptor(_class2.prototype, "afterClear", [_dec16], {
|
|
991
1027
|
configurable: true,
|
|
992
1028
|
enumerable: true,
|
|
993
1029
|
writable: true,
|
|
994
1030
|
initializer: null
|
|
995
|
-
}), _descriptor13 = _applyDecoratedDescriptor(_class2.prototype, "internalFilterChanged", [
|
|
1031
|
+
}), _descriptor13 = _applyDecoratedDescriptor(_class2.prototype, "internalFilterChanged", [_dec17], {
|
|
996
1032
|
configurable: true,
|
|
997
1033
|
enumerable: true,
|
|
998
1034
|
writable: true,
|
|
999
1035
|
initializer: null
|
|
1000
|
-
}), _applyDecoratedDescriptor(_class2.prototype, "handleSearch", [
|
|
1036
|
+
}), _applyDecoratedDescriptor(_class2.prototype, "handleSearch", [_dec18], Object.getOwnPropertyDescriptor(_class2.prototype, "handleSearch"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "handleFilterChanged", [_dec19], Object.getOwnPropertyDescriptor(_class2.prototype, "handleFilterChanged"), _class2.prototype), _class2)) || _class) || _class);
|
|
1001
1037
|
return FilterBarAPI;
|
|
1002
1038
|
}, false);
|
|
1003
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWx0ZXJCYXJUZWxlbWV0cnkiLCJmaWx0ZXJCYXJBUEkiLCJjb3VudEZpbHRlckFjdGlvbnMiLCJjb3VudFZhcmlhbnRGaWx0ZXJzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwib25GaWx0ZXJzQ2hhbmdlZCIsInJlYXNvbiIsIm9uU2VhcmNoIiwiZXZlbnRQYXJhbWV0ZXJzIiwiY29uZGl0aW9ucyIsImZpbHRlck5hbWVzIiwiZ2V0RmlsdGVyTmFtZXNGcm9tQ29uZGl0aW9ucyIsImdldFBhZ2VDb250cm9sbGVyIiwidGVsZW1ldHJ5Iiwic3RvcmVBY3Rpb24iLCJ0eXBlIiwicGFyYW1ldGVycyIsImNvdW50RmlsdGVycyIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJ2YXJpYW50TGF5ZXIiLCJnZXRWYXJpYW50IiwibGF5ZXIiLCJhdXRvTG9hZCIsInNlYXJjaFVzZWQiLCIkc2VhcmNoIiwiZm9yRWFjaCIsImNvbmRpdGlvbiIsIlZhcmlhbnRNYW5hZ2VtZW50VHlwZSIsIkRJU1BMQVlfQ1VSUkVOQ1lfUFJPUEVSVFlfTkFNRSIsIlBfRElTUExBWV9DVVJSRU5DWV9QUk9QRVJUWV9OQU1FIiwiRmlsdGVyQmFyQVBJIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwicmV0dXJuVHlwZXMiLCJfZGVjMiIsIm1peGluIiwiRmlsdGVyQmFyQVBJU3RhdGVIYW5kbGVyIiwiX2RlYzMiLCJwcm9wZXJ0eSIsIl9kZWM0IiwiZXhwZWN0ZWRBbm5vdGF0aW9ucyIsImV4cGVjdGVkVHlwZXMiLCJfZGVjNSIsIl9kZWM2IiwiZGVmYXVsdFZhbHVlIiwiX2RlYzciLCJfZGVjOCIsIl9kZWM5IiwiX2RlYzEwIiwiYWdncmVnYXRpb24iLCJtdWx0aXBsZSIsIl9kZWMxMSIsImV2ZW50IiwiX2RlYzEyIiwiX2RlYzEzIiwiX2RlYzE0IiwiX2RlYzE1IiwiX2RlYzE2IiwieG1sRXZlbnRIYW5kbGVyIiwiX2RlYzE3IiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9NYWNyb0FQSSIsInByb3BzIiwib3RoZXJzIiwiX3RoaXMiLCJjYWxsIiwiaW5pdGlhbENvbnRyb2xTdGF0ZSIsIl9pbml0aWFsU3RhdGVQcm9taXNlIiwiUHJvbWlzZUtlZXBlciIsIl9iU2VhcmNoVHJpZ2dlcmVkIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9kZXNjcmlwdG9yMyIsIl9kZXNjcmlwdG9yNCIsIl9kZXNjcmlwdG9yNSIsIl9kZXNjcmlwdG9yNiIsIl9kZXNjcmlwdG9yNyIsIl9kZXNjcmlwdG9yOCIsIl9kZXNjcmlwdG9yOSIsIl9kZXNjcmlwdG9yMTAiLCJfZGVzY3JpcHRvcjExIiwiX2Rlc2NyaXB0b3IxMiIsIl9kZXNjcmlwdG9yMTMiLCJhdHRhY2hTdGF0ZUNoYW5nZUhhbmRsZXIiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90bzIiLCJ3YWl0Rm9ySW5pdGlhbFN0YXRlIiwicHJvbWlzZSIsImdldENvbnRyb2xTdGF0ZSIsImNvbnRyb2xTdGF0ZSIsImZ1bGxTdGF0ZSIsImluaXRpYWxTdGF0ZSIsImlzU2VhcmNoVHJpZ2dlcmVkQnlJbml0aWFsTG9hZCIsIm5hdmlnYXRpb25UeXBlIiwiY29udHJvbGxlciIsInZpZXciLCJnZXRWaWV3Iiwidmlld0RhdGEiLCJnZXRWaWV3RGF0YSIsInZhcmlhbnRNYW5hZ2VtZW50IiwiQ29udHJvbCIsIl9nZXRGaWx0ZXJCYXJWYXJpYW50Q29udHJvbCIsImJ5SWQiLCJjdXJyZW50VmFyaWFudEtleSIsImdldEN1cnJlbnRWYXJpYW50S2V5IiwiTmF2VHlwZSIsInhBcHBTdGF0ZSIsImluaXRpYWxMb2FkIiwiSW5pdGlhbExvYWRNb2RlIiwiRW5hYmxlZCIsIl9zaG91bGRBdXRvVHJpZ2dlclNlYXJjaCIsIl9nZXRGaWx0ZXJCYXJWTSIsIl9nZXRBcHBseUF1dG9tYXRpY2FsbHlPblZhcmlhbnQiLCJfYXBwbHlTZWxlY3Rpb25WYXJpYW50IiwibmF2aWdhdGlvblBhcmFtZXRlciIsImZpbHRlclZhcmlhbnRBcHBsaWVkIiwiZmlsdGVyQmFyIiwiZ2V0Q29udGVudCIsInNlbGVjdGlvblZhcmlhbnQiLCJzdiIsInNlbGVjdGlvblZhcmlhbnREZWZhdWx0cyIsInN2RGVmYXVsdHMiLCJyZXF1aXJlc1N0YW5kYXJkVmFyaWFudCIsIlByb21pc2UiLCJyZXNvbHZlIiwic2hvdWxkQXBwbHlBcHBTdGF0ZSIsIl9hY3RpdmF0ZVZhcmlhbnRBbmREZXRlcm1pbmVBcHBseUFwcFN0YXRlIiwiX2FkZERlZmF1bHREaXNwbGF5Q3VycmVuY3lUb1NWIiwic3ZEZWZhdWx0c0FyZVByZXNlbnQiLCJnZXRTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcyIsInN0ZFZhcmlhbnRJc0RlZmF1bHRWYXJpYW50IiwiZ2V0RGVmYXVsdFZhcmlhbnRLZXkiLCJnZXRTdGFuZGFyZFZhcmlhbnRLZXkiLCJ1c2VGTFBEZWZhdWx0VmFsdWVzIiwiZ2V0UGFyZW50Iiwic3ZUb1NldCIsIl9nZXRBZGp1c3RlZFNWIiwic2V0U2VsZWN0aW9uVmFyaWFudCIsIl9lbmFibGVGaWx0ZXJCYXIiLCJmaWx0ZXJCYXJDb250cm9sIiwicHJldmVudEluaXRpYWxTZWFyY2giLCJmbk9uU2VhcmNoIiwiZ2V0U3VzcGVuZFNlbGVjdGlvbiIsImF0dGFjaEV2ZW50T25jZSIsImVuYWJsZVJlcXVlc3RzIiwiYXBwU3RhdGVTViIsImFkanVzdGVkU1YiLCJTZWxlY3Rpb25WYXJpYW50IiwidG9KU09OT2JqZWN0IiwiYWxyZWFkeUFwcGxpZWRTViIsImdldFNlbGVjdGlvblZhcmlhbnQiLCJhcHBsaWVkU2VsT3B0TmFtZXMiLCJyZWR1Y2UiLCJzdkNvcHkiLCJzZWxPcHRpb25OYW1lIiwic3ZTZWxPcHRzIiwiZ2V0U2VsZWN0T3B0aW9uIiwic2VsZWN0T3B0aW9ucyIsIm1hc3NBZGRTZWxlY3RPcHRpb24iLCJfcHJldmVudEluaXRpYWxTZWFyY2giLCJhVmFyaWFudHMiLCJnZXRWYXJpYW50cyIsIm9DdXJyZW50VmFyaWFudCIsImZpbmQiLCJpdGVtIiwiZ2V0S2V5IiwiZXhlY3V0ZU9uU2VsZWN0IiwiaXNFbXB0eSIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiY29udGV4dFBhdGgiLCJlbnRpdHlTZXQiLCJtZXRhQ29udGV4dCIsImdldE1ldGFDb250ZXh0IiwiZGF0YU1vZGVsT2JqZWN0UGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImRpc3BsYXlDdXJyZW5jeVByb3BlcnR5TmFtZSIsImdldERpc3BsYXlDdXJyZW5jeVByb3BlcnR5TmFtZSIsImRpc3BsYXlDdXJyZW5jeUlzTWFuZGF0b3J5IiwiX2NoZWNrSWZEaXNwbGF5Q3VycmVuY3lJc1JlcXVpcmVkIiwic3ZPcHRpb25zIiwiZGVmYXVsdFNWT3B0aW9ucyIsImRpc3BsYXlDdXJyZW5jeURlZmF1bHRFeGlzdHMiLCJub1NWRGlzcGxheUN1cnJlbmN5RXhpc3RzIiwiZGlzcGxheUN1cnJlbmN5U2VsZWN0T3B0aW9uIiwic2lnbiIsIm9wdGlvbiIsImxvdyIsImhpZ2giLCJhZGRTZWxlY3RPcHRpb24iLCJpc1BhcmFtZXRlcml6ZWQiLCJzdGFydGluZ0VudGl0eVNldCIsImVudGl0eVR5cGUiLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIlJlc3VsdENvbnRleHQiLCJlbnRpdHlQcm9wZXJ0aWVzIiwic29tZSIsInBhcmFtZXRlciIsIm5hbWUiLCJfdHlwZSIsInVuZGVmaW5lZCIsInJlcXVpcmVkUHJvcGVydGllcyIsIkNhcGFiaWxpdGllcyIsIkZpbHRlclJlc3RyaWN0aW9ucyIsIlJlcXVpcmVkUHJvcGVydGllcyIsInJlcXVpcmVkUHJvcGVydHkiLCJ2YWx1ZSIsInJlcVN0ZFZhcmlhbnQiLCJ2YXJpYW50S2V5IiwiZ2V0SWQiLCJDb250cm9sVmFyaWFudEFwcGx5QVBJIiwiYWN0aXZhdGVWYXJpYW50IiwiZWxlbWVudCIsInZhcmlhbnRSZWZlcmVuY2UiLCJQYWdlIiwiZ2V0Q29udHJvbGxlciIsIk5vbmUiLCJoYW5kbGVWYXJpYW50SWRQYXNzZWRWaWFVUkxQYXJhbXMiLCJvVXJsUGFyYW1zIiwiYVBhZ2VWYXJpYW50SWQiLCJhRmlsdGVyQmFyVmFyaWFudElkIiwiYVRhYmxlVmFyaWFudElkIiwiYUNoYXJ0VmFyaWFudElkIiwib1ZhcmlhbnRJRHMiLCJzUGFnZVZhcmlhbnRJZCIsInNGaWx0ZXJCYXJWYXJpYW50SWQiLCJzVGFibGVWYXJpYW50SWQiLCJzQ2hhcnRWYXJpYW50SWQiLCJfaGFuZGxlQ29udHJvbFZhcmlhbnRJZCIsIm9WTSIsIm9WaWV3IiwiYVByb21pc2VzIiwic1ZhcmlhbnRNYW5hZ2VtZW50IiwiX2hhbmRsZVBhZ2VWYXJpYW50SWQiLCJfaGFuZGxlRmlsdGVyQmFyVmFyaWFudENvbnRyb2xJZCIsImFsbCIsIm9WYXJpYW50IiwiX2ZpbmRBbmRQdXNoVmFyaWFudFRvUHJvbWlzZSIsInNWYXJpYW50SWQiLCJiRmlsdGVyVmFyaWFudEFwcGxpZWQiLCJrZXkiLCJwdXNoIiwiX2FwcGx5Q29udHJvbFZhcmlhbnQiLCJzVmFyaWFudElEIiwiYXJndW1lbnRzIiwic1ZhcmlhbnRSZWZlcmVuY2UiLCJfY2hlY2tJZlZhcmlhbnRJZElzQXZhaWxhYmxlIiwidGhlbiIsImJJc0NvbnRyb2xTdGF0ZVZhcmlhbnRBdmFpbGFibGUiLCJTdGF0ZVV0aWwiLCJkZXRhY2hTdGF0ZUNoYW5nZSIsInN0YXRlQ2hhbmdlSGFuZGxlciIsImF0dGFjaFN0YXRlQ2hhbmdlIiwib0V2ZW50IiwiY29udHJvbCIsImdldFBhcmFtZXRlciIsImlzQSIsImhhbmRsZVN0YXRlQ2hhbmdlIiwiaGFuZGxlU2VhcmNoIiwib0ZpbHRlckJhciIsImdldFNvdXJjZSIsImdldFBhcmFtZXRlcnMiLCJnZXRGaWx0ZXJDb25kaXRpb25zIiwicHJlcGFyZWRFdmVudFBhcmFtZXRlcnMiLCJfcHJlcGFyZUV2ZW50UGFyYW1ldGVycyIsImZpcmVFdmVudCIsIm1lcmdlIiwiaGFuZGxlRmlsdGVyQ2hhbmdlZCIsIm9FdmVudFBhcmFtZXRlcnMiLCJvQ29uZGl0aW9ucyIsIl9nZXRGaWx0ZXJCYXJSZWFzb24iLCJfc1JlYXNvbiIsImZpbHRlcnMiLCJzZWFyY2giLCJGaWx0ZXJVdGlscyIsImdldEZpbHRlcnMiLCJzZXRGaWx0ZXJWYWx1ZXMiLCJzQ29uZGl0aW9uUGF0aCIsInNPcGVyYXRvciIsInZWYWx1ZXMiLCJjb250ZW50IiwiZ2V0QWN0aXZlRmlsdGVyc1RleHQiLCJnZXRBc3NpZ25lZEZpbHRlcnNUZXh0IiwiZmlsdGVyc1RleHQiLCJ0cmlnZ2VyU2VhcmNoIiwid2FpdEZvckluaXRpYWxpemF0aW9uIiwiZXJyIiwibWVzc2FnZSIsIkVycm9yIiwiU3RyaW5nIiwiTG9nIiwiZXJyb3IiLCJpc1NlbWFudGljRGF0ZUZpbHRlckFwcGxpZWQiLCJTZW1hbnRpY0RhdGVPcGVyYXRvcnMiLCJoYXNTZW1hbnRpY0RhdGVPcGVyYXRpb25zIiwiZ2V0Q29uZGl0aW9ucyIsInN0YXRlSGVscGVyIiwiYXBwQ29tcG9uZW50IiwiQ29tbW9uVXRpbHMiLCJnZXRBcHBDb21wb25lbnQiLCJuYXZpZ2F0aW9uU2VydmljZSIsImdldE5hdmlnYXRpb25TZXJ2aWNlIiwiZGF0YU1vZGVsT2JqZWN0IiwiZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGgiLCJtZXRhUGF0aCIsInRhcmdldEVudGl0eVNldCIsInNDb250ZXh0VXJsIiwiY29uc3RydWN0Q29udGV4dFVybCIsInNldEZpbHRlckNvbnRleHRVcmwiLCJnZXRNYW5kYXRvcnlGaWx0ZXJQcm9wZXJ0eU5hbWVzIiwiZ2V0UHJvcGVydHlJbmZvU2V0IiwiZmlsdGVyIiwiZmlsdGVyUHJvcCIsInJlcXVpcmVkIiwibWFwIiwicmVxdWlyZWRQcm9wIiwiY29uZGl0aW9uUGF0aCIsImRhdGEiLCJBcnJheSIsImlzQXJyYXkiLCJKU09OIiwicGFyc2UiLCJjdXJyZW50VmFyaWFudCIsInZhcmlhbnRNb2RlbCIsInZhcmlhbnRCYWNrUmVmZXJlbmNlIiwiZ2V0VmFyaWFudEJhY2tyZWZlcmVuY2UiLCJnZXRDdXJyZW50VmFyaWFudFJlZmVyZW5jZSIsImUiLCJkZWJ1ZyIsInNldEZpbHRlckZpZWxkVmlzaWJsZSIsInZpc2libGUiLCJhcHBseUV4dGVybmFsU3RhdGUiLCJpdGVtcyIsImdldEZpbHRlckZpZWxkVmlzaWJsZSIsInN0YXRlIiwicmV0cmlldmVFeHRlcm5hbFN0YXRlIiwiZ2V0VmFyaWFudE1hbmFnZW1lbnQiLCJ2YXJpYW50QmFja3JlZmVyZW5jZSIsIlVJNUVsZW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImlkIiwic2V0VmFyaWFudEJhY2tSZWZlcmVuY2UiLCJ2YXJpYW50IiwiaXNMaXZlTW9kZSIsImdldExpdmVNb2RlIiwic2V0VmFyaWFudEJhY2tyZWZlcmVuY2UiLCJzZXRDdXJyZW50VmFyaWFudEtleSIsInNldEZpbHRlckZpZWxkRW5hYmxlZCIsImVuYWJsZWQiLCJzZXREYXRhIiwiZmlsdGVyRmllbGRzIiwiZWRpdE1vZGUiLCJGaWVsZEVkaXRNb2RlIiwiRWRpdGFibGUiLCJEaXNhYmxlZCIsImdldEZpbHRlckZpZWxkRW5hYmxlZCIsImdldFByb3BlcnR5IiwiY29udmVydFNlbGVjdGlvblZhcmlhbnRUb1N0YXRlRmlsdGVycyIsInByZWZpbGxEZXNjcmlwdGlvbnMiLCJfY2xlYXJGaWx0ZXJWYWx1ZXNXaXRoT3B0aW9ucyIsIm9wdGlvbnMiLCJyZXN1bHQiLCJzZXRTZWxlY3Rpb25WYXJpYW50VG9NZGNDb250cm9sIiwiYXBwbHlTdGF0ZVJlc3VsdCIsImRpZmZTdGF0ZSIsImdldEV4dGVuc2lvbkFQSSIsInVwZGF0ZUFwcFN0YXRlIiwiZ2V0Q29uZGl0aW9uUGF0aCIsInByb3BlcnR5UGF0aCIsInByb3BlcnR5VGFyZ2V0T2JqZWN0UGF0aCIsImdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JQcm9wZXJ0eSIsImdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJzaG93RmlsdGVyRmllbGQiLCJ0YXJnZXRGaWx0ZXJGaWVsZCIsIm9wZW5WYWx1ZUhlbHBGb3JGaWx0ZXJGaWVsZCIsImlucHV0VmFsdWUiLCJyZWplY3QiLCJmaWx0ZXJGaWVsZCIsImdldEZpbHRlckl0ZW1zIiwiZ2V0UHJvcGVydHlLZXkiLCJ2YWx1ZUhlbHAiLCJnZXRWYWx1ZUhlbHAiLCJfb0ZvY3VzSW5mbyIsInRhcmdldEluZm8iLCJzaWxlbnQiLCJvbmZvY3VzaW4iLCJqUXVlcnkiLCJFdmVudCIsInNldFRpbWVvdXQiLCJnZXRBZ2dyZWdhdGlvbiIsImZpcmVWYWx1ZUhlbHBSZXF1ZXN0IiwiZnJvbUtleWJvYXJkIiwiX3VzZXJJbnB1dFZhbHVlIiwiZ2V0Q29sbGFwc2VkRmlsdGVyc1RleHQiLCJNYWNyb0FQSSIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRmlsdGVyQmFyQVBJLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW50aXR5U2V0LCBQcm9wZXJ0eSwgUHJvcGVydHlQYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0aWVzT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBhZ2dyZWdhdGlvbiwgZGVmaW5lVUk1Q2xhc3MsIGV2ZW50LCBtaXhpbiwgcHJvcGVydHksIHhtbEV2ZW50SGFuZGxlciB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgQ29udHJvbFN0YXRlLCBMZWdhY3lGaWx0ZXJCYXJTdGF0ZSwgTmF2aWdhdGlvblBhcmFtZXRlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9WaWV3U3RhdGVcIjtcbmltcG9ydCB7IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IFByb21pc2VLZWVwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUHJvbWlzZUtlZXBlclwiO1xuaW1wb3J0IHsgSW5pdGlhbExvYWRNb2RlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgTWFjcm9BUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvTWFjcm9BUElcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jb250cm9scy9GaWx0ZXJCYXJcIjtcbmltcG9ydCB0eXBlIHsgSUZpbHRlckNvbnRyb2wgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXIvRmlsdGVyVXRpbHNcIjtcbmltcG9ydCBGaWx0ZXJVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXIvRmlsdGVyVXRpbHNcIjtcbmltcG9ydCB0eXBlIEZpbHRlckZpZWxkIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlckJhci9GaWx0ZXJGaWVsZFwiO1xuaW1wb3J0IFNlbWFudGljRGF0ZU9wZXJhdG9ycyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXJCYXIvU2VtYW50aWNEYXRlT3BlcmF0b3JzXCI7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2xQcm9wZXJ0eUluZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9tZGMvYWRhcHRlci9TdGF0ZUhlbHBlclwiO1xuaW1wb3J0IHN0YXRlSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL21kYy9hZGFwdGVyL1N0YXRlSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsQmluZGluZ0luZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9VdGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBFeHRlcm5hbFN0YXRlVHlwZSB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL3ZhbHVlaGVscC9WYWx1ZUhlbHBEZWxlZ2F0ZVwiO1xuaW1wb3J0IFNlbGVjdGlvblZhcmlhbnQgZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uL1NlbGVjdGlvblZhcmlhbnRcIjtcbmltcG9ydCB7IE5hdlR5cGUgfSBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIExpc3RSZXBvcnRDb250cm9sbGVyIH0gZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvTGlzdFJlcG9ydC9MaXN0UmVwb3J0Q29udHJvbGxlci5jb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBJbnB1dCBmcm9tIFwic2FwL20vSW5wdXRcIjtcbmltcG9ydCB0eXBlIHsgSW5wdXQkVmFsdWVIZWxwUmVxdWVzdEV2ZW50UGFyYW1ldGVycyB9IGZyb20gXCJzYXAvbS9JbnB1dFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIEV2ZW50LCBkZWZhdWx0IGFzIFVJNUV2ZW50IH0gZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSB7ICRDb250cm9sU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgQ29udHJvbFZhcmlhbnRBcHBseUFQSSBmcm9tIFwic2FwL3VpL2ZsL2FwcGx5L2FwaS9Db250cm9sVmFyaWFudEFwcGx5QVBJXCI7XG5pbXBvcnQgdHlwZSBWYXJpYW50TWFuYWdlbWVudCBmcm9tIFwic2FwL3VpL2ZsL3ZhcmlhbnRzL1ZhcmlhbnRNYW5hZ2VtZW50XCI7XG5pbXBvcnQgdHlwZSBWYXJpYW50TW9kZWwgZnJvbSBcInNhcC91aS9mbC92YXJpYW50cy9WYXJpYW50TW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgVmFyaWFudERhdGEgfSBmcm9tIFwic2FwL3VpL2ZsL3ZhcmlhbnRzL1ZhcmlhbnRNb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL21kYy9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBWYWx1ZUhlbHAgZnJvbSBcInNhcC91aS9tZGMvVmFsdWVIZWxwXCI7XG5pbXBvcnQgdHlwZSB7IENvbmRpdGlvbk9iamVjdCB9IGZyb20gXCJzYXAvdWkvbWRjL2NvbmRpdGlvbi9Db25kaXRpb25cIjtcbmltcG9ydCBGaWVsZEVkaXRNb2RlIGZyb20gXCJzYXAvdWkvbWRjL2VudW1zL0ZpZWxkRWRpdE1vZGVcIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyQmFyQmFzZSRTZWFyY2hFdmVudCB9IGZyb20gXCJzYXAvdWkvbWRjL2ZpbHRlcmJhci9GaWx0ZXJCYXJCYXNlXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlciBhcyBTdGF0ZVV0aWxGaWx0ZXIgfSBmcm9tIFwic2FwL3VpL21kYy9wMTNuL1N0YXRlVXRpbFwiO1xuaW1wb3J0IFN0YXRlVXRpbCBmcm9tIFwic2FwL3VpL21kYy9wMTNuL1N0YXRlVXRpbFwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBNZXRhTW9kZWwsIGRlZmF1bHQgYXMgT0RhdGFNZXRhTW9kZWwgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgalF1ZXJ5IGZyb20gXCJzYXAvdWkvdGhpcmRwYXJ0eS9qcXVlcnlcIjtcbmltcG9ydCBGaWx0ZXJCYXJBUElTdGF0ZUhhbmRsZXIgZnJvbSBcIi4vbWl4aW4vRmlsdGVyQmFyQVBJU3RhdGVIYW5kbGVyXCI7XG5cbi8vIFRyYWNrIHRlbGVtZXRyeSBjb250ZW50IGZvciB0aGUgZmlsdGVyQmFyXG5jbGFzcyBGaWx0ZXJCYXJUZWxlbWV0cnkge1xuXHRwcml2YXRlIGNvdW50RmlsdGVyQWN0aW9ucyA9IDA7XG5cblx0cHJpdmF0ZSBjb3VudFZhcmlhbnRGaWx0ZXJzID0gMDtcblxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGZpbHRlckJhckFQSTogRmlsdGVyQmFyQVBJKSB7fVxuXG5cdG9uRmlsdGVyc0NoYW5nZWQocmVhc29uPzogc3RyaW5nKTogdm9pZCB7XG5cdFx0aWYgKHJlYXNvbiA9PT0gXCJWYXJpYW50XCIpIHtcblx0XHRcdHRoaXMuY291bnRWYXJpYW50RmlsdGVycysrO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmNvdW50RmlsdGVyQWN0aW9ucysrO1xuXHRcdH1cblx0fVxuXG5cdG9uU2VhcmNoKGV2ZW50UGFyYW1ldGVyczogeyByZWFzb24/OiBzdHJpbmcgfSwgY29uZGl0aW9uczogUmVjb3JkPHN0cmluZywgQ29uZGl0aW9uT2JqZWN0W10+KTogdm9pZCB7XG5cdFx0Y29uc3QgZmlsdGVyTmFtZXMgPSB0aGlzLmdldEZpbHRlck5hbWVzRnJvbUNvbmRpdGlvbnMoY29uZGl0aW9ucyk7XG5cdFx0dGhpcy5maWx0ZXJCYXJBUEkuZ2V0UGFnZUNvbnRyb2xsZXIoKT8udGVsZW1ldHJ5LnN0b3JlQWN0aW9uKHtcblx0XHRcdHR5cGU6IFwiRkUuRmlsdGVyQmFyU2VhcmNoXCIsXG5cdFx0XHRwYXJhbWV0ZXJzOiB7XG5cdFx0XHRcdGNvdW50RmlsdGVyQWN0aW9uczogdGhpcy5jb3VudEZpbHRlckFjdGlvbnMsIC8vICBIb3cgbWFueSBmaWx0ZXJDaGFuZ2VkIGFjdGlvbnMgYXJlIHBlcmZvcm1lZFxuXHRcdFx0XHRjb3VudEZpbHRlcnM6IE9iamVjdC5rZXlzKGNvbmRpdGlvbnMpLmxlbmd0aCwgLy8gSG93IG1hbnkgZGlmZmVyZW50IGZpbHRlcnMgYXJlIGFwcGxpZWRcblx0XHRcdFx0Y291bnRWYXJpYW50RmlsdGVyczogdGhpcy5jb3VudFZhcmlhbnRGaWx0ZXJzLCAvLyBIb3cgbWFueSBmaWx0ZXIgYmVsb25nIHRvIGEgdmFyaWFudFxuXHRcdFx0XHR2YXJpYW50TGF5ZXI6IHRoaXMuZmlsdGVyQmFyQVBJLmdldFZhcmlhbnQoKT8ubGF5ZXIgPz8gXCJOb25lXCIsIC8vIHwgXCJTQVBcIiB8IFwiQ3VzdG9tXCI7IC8vIFR5cGUgb2YgdmFyaWFudFxuXHRcdFx0XHRhdXRvTG9hZDogZXZlbnRQYXJhbWV0ZXJzLnJlYXNvbiA9PT0gXCJWYXJpYW50XCIsIC8vIElzIHRoZSBmaWx0ZXIgYXV0b21hdGljYWxseSBleGVjdXRlZFxuXHRcdFx0XHRzZWFyY2hVc2VkOiBjb25kaXRpb25zLiRzZWFyY2ggPyAhIU9iamVjdC5rZXlzKGNvbmRpdGlvbnMuJHNlYXJjaCkubGVuZ3RoIDogZmFsc2UsIC8vIFdhcyB0aGUgc2VhcmNoIGZpZWxkIGluIHRoZSBmaWx0ZXJiYXIgdXNlZD9cblx0XHRcdFx0ZmlsdGVyTmFtZXM6IGZpbHRlck5hbWVzIC8vIFByb3BlcnR5IG5hbWVzIG9mIHRoZSBmaWx0ZXJzXG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Ly8gUmVzZXQgdGhlIGNvdW50XG5cdFx0dGhpcy5jb3VudEZpbHRlckFjdGlvbnMgPSAwO1xuXHRcdHRoaXMuY291bnRWYXJpYW50RmlsdGVycyA9IDA7XG5cdH1cblxuXHRnZXRGaWx0ZXJOYW1lc0Zyb21Db25kaXRpb25zKGNvbmRpdGlvbnM6IFJlY29yZDxzdHJpbmcsIENvbmRpdGlvbk9iamVjdFtdPik6IHN0cmluZyB7XG5cdFx0bGV0IGZpbHRlck5hbWVzID0gXCJcIjtcblx0XHRPYmplY3Qua2V5cyhjb25kaXRpb25zKS5mb3JFYWNoKChjb25kaXRpb24pID0+IHtcblx0XHRcdGlmIChjb25kaXRpb24gIT0gXCIkc2VhcmNoXCIpIHtcblx0XHRcdFx0ZmlsdGVyTmFtZXMgKz0gY29uZGl0aW9uICsgXCI7XCI7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGZpbHRlck5hbWVzO1xuXHR9XG59XG5cbmV4cG9ydCB0eXBlIEZpbHRlckJhclN0YXRlID0ge1xuXHRpbm5lclN0YXRlPzoge1xuXHRcdGZpbHRlcj86IFJlY29yZDxzdHJpbmcsIENvbmRpdGlvbk9iamVjdFtdPjtcblx0XHRpbml0aWFsU3RhdGU/OiBMZWdhY3lGaWx0ZXJCYXJTdGF0ZTtcblx0XHRmdWxsU3RhdGU/OiBMZWdhY3lGaWx0ZXJCYXJTdGF0ZTtcblx0fTtcbn07XG5cbnR5cGUgVmFyaWFudElEcyA9IHtcblx0c1BhZ2VWYXJpYW50SWQ6IHN0cmluZztcblx0c0ZpbHRlckJhclZhcmlhbnRJZDogc3RyaW5nO1xuXHRzVGFibGVWYXJpYW50SWQ6IHN0cmluZztcblx0c0NoYXJ0VmFyaWFudElkOiBzdHJpbmc7XG59O1xuXG50eXBlIFZhcmlhbnRPYmplY3QgPSB7XG5cdGF1dGhvcjogc3RyaW5nO1xuXHRjaGFuZ2U6IGJvb2xlYW47XG5cdGNvbnRleHRzOiBvYmplY3Q7XG5cdGV4ZWN1dGVPblNlbGVjdDogYm9vbGVhbjtcblx0ZmF2b3JpdGU6IGJvb2xlYW47XG5cdGtleTogc3RyaW5nO1xuXHRvcmlnaW5hbENvbnRleHRzOiBvYmplY3Q7XG5cdG9yaWdpbmFsRXhlY3V0ZU9uU2VsZWN0OiBib29sZWFuO1xuXHRvcmlnaW5hbEZhdm9yaXRlOiBib29sZWFuO1xuXHRvcmlnaW5hbFRpdGxlOiBzdHJpbmc7XG5cdG9yaWdpbmFsVmlzaWJsZTogYm9vbGVhbjtcblx0cmVtb3ZlOiBib29sZWFuO1xuXHRyZW5hbWU6IGJvb2xlYW47XG5cdHNoYXJpbmc6IHN0cmluZztcblx0dGl0bGU6IHN0cmluZztcblx0dmlzaWJsZTogYm9vbGVhbjtcbn07XG5cbmVudW0gVmFyaWFudE1hbmFnZW1lbnRUeXBlIHtcblx0Q29udHJvbCA9IFwiQ29udHJvbFwiLFxuXHRQYWdlID0gXCJQYWdlXCIsXG5cdE5vbmUgPSBcIk5vbmVcIlxufVxuXG5jb25zdCBESVNQTEFZX0NVUlJFTkNZX1BST1BFUlRZX05BTUUgPSBcIkRpc3BsYXlDdXJyZW5jeVwiO1xuY29uc3QgUF9ESVNQTEFZX0NVUlJFTkNZX1BST1BFUlRZX05BTUUgPSBcIlBfRGlzcGxheUN1cnJlbmN5XCI7XG5cbnR5cGUgTFJWaWV3RGF0YSA9IHtcblx0Y29udHJvbENvbmZpZ3VyYXRpb24/OiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG5cdGVudGl0eVNldD86IHN0cmluZztcblx0Y29udGV4dFBhdGg/OiBzdHJpbmc7XG5cdHZhcmlhbnRNYW5hZ2VtZW50PzogYm9vbGVhbiB8IHN0cmluZztcbn07XG5cbmludGVyZmFjZSBGaWx0ZXJCYXJBUEkgZXh0ZW5kcyBGaWx0ZXJCYXJBUElTdGF0ZUhhbmRsZXIge31cblxuLyoqXG4gKiBCdWlsZGluZyBibG9jayBmb3IgY3JlYXRpbmcgYSBGaWx0ZXJCYXIgYmFzZWQgb24gdGhlIG1ldGFkYXRhIHByb3ZpZGVkIGJ5IE9EYXRhIFY0LlxuICoge0BsaW5rIGRlbW86c2FwL2ZlL2NvcmUvZnBtRXhwbG9yZXIvaW5kZXguaHRtbCMvYnVpbGRpbmdCbG9ja3MvZmlsdGVyQmFyL2ZpbHRlckJhckRlZmF1bHQgT3ZlcnZpZXcgb2YgQnVpbGRpbmcgQmxvY2tzfVxuICogPGJyPlxuICogVXN1YWxseSwgYSBTZWxlY3Rpb25GaWVsZHMgYW5ub3RhdGlvbiBpcyBleHBlY3RlZC5cbiAqXG4gKlxuICogVXNhZ2UgZXhhbXBsZTpcbiAqIDxwcmU+XG4gKiAmbHQ7bWFjcm9zOkZpbHRlckJhciBpZD1cIk15RmlsdGVyQmFyXCIgbWV0YVBhdGg9XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uRmllbGRzXCIgLyZndDtcbiAqIDwvcHJlPlxuICogQGFsaWFzIHNhcC5mZS5tYWNyb3MuRmlsdGVyQmFyXG4gKiBAcHVibGljXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5tYWNyb3MuZmlsdGVyQmFyLkZpbHRlckJhckFQSVwiLCB7XG5cdHJldHVyblR5cGVzOiBbXCJzYXAudWkuY29yZS5Db250cm9sXCJdXG59KVxuQG1peGluKEZpbHRlckJhckFQSVN0YXRlSGFuZGxlcilcbmNsYXNzIEZpbHRlckJhckFQSSBleHRlbmRzIE1hY3JvQVBJIHtcblx0aW5pdGlhbENvbnRyb2xTdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuXHRfaW5pdGlhbFN0YXRlUHJvbWlzZTogUHJvbWlzZUtlZXBlcjx2b2lkPiA9IG5ldyBQcm9taXNlS2VlcGVyKCk7XG5cblx0X2JTZWFyY2hUcmlnZ2VyZWQgPSBmYWxzZTtcblxuXHRhc3luYyB3YWl0Rm9ySW5pdGlhbFN0YXRlKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLl9pbml0aWFsU3RhdGVQcm9taXNlLnByb21pc2U7XG5cdH1cblxuXHRnZXRDb250cm9sU3RhdGUoY29udHJvbFN0YXRlOiBDb250cm9sU3RhdGUpOiBDb250cm9sU3RhdGUge1xuXHRcdGNvbnN0IGluaXRpYWxDb250cm9sU3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gdGhpcy5pbml0aWFsQ29udHJvbFN0YXRlO1xuXHRcdGlmIChjb250cm9sU3RhdGUpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGZ1bGxTdGF0ZTogY29udHJvbFN0YXRlIGFzIG9iamVjdCxcblx0XHRcdFx0aW5pdGlhbFN0YXRlOiBpbml0aWFsQ29udHJvbFN0YXRlIGFzIG9iamVjdFxuXHRcdFx0fTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbnRyb2xTdGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHdoZXRoZXIgU2VhcmNoIGNhbiBiZSB0cmlnZ2VyZWQgYXQgaW5pdGlhbCBsb2FkIG9mIHRoZSBhcHBsaWNhdGlvbiBvciBub3QuXG5cdCAqIEBwYXJhbSBuYXZpZ2F0aW9uVHlwZSBOYXZpZ2F0aW9uIFR5cGUgZHVyaW5nIHRoZSBsb2FkIG9mIHRoZSBhcHBsaWNhdGlvblxuXHQgKiBAcmV0dXJucyBBIEJvb2xlYW4gZGV0ZXJtaW5pbmcgd2hldGhlciBTZWFyY2ggY2FuIGJlIHRyaWdnZXJlZCBvciBub3Rcblx0ICovXG5cdGlzU2VhcmNoVHJpZ2dlcmVkQnlJbml0aWFsTG9hZChuYXZpZ2F0aW9uVHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgY29udHJvbGxlciA9IHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcixcblx0XHRcdHZpZXcgPSBjb250cm9sbGVyLmdldFZpZXcoKSxcblx0XHRcdHZpZXdEYXRhID0gdmlldy5nZXRWaWV3RGF0YSgpO1xuXHRcdGxldCBpc1NlYXJjaFRyaWdnZXJlZEJ5SW5pdGlhbExvYWQgPSBmYWxzZSxcblx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50O1xuXHRcdC8vIERldGVybWluaW5nIHdoZXRoZXIgaXQncyBDb250cm9sIHZhcmlhbnRNYW5hZ2VtZW50IG9yIFBhZ2UgdmFyaWFudE1hbmFnZW1lbnRcblx0XHRpZiAodmlld0RhdGEudmFyaWFudE1hbmFnZW1lbnQgPT09IFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Db250cm9sKSB7XG5cdFx0XHR2YXJpYW50TWFuYWdlbWVudCA9IGNvbnRyb2xsZXIuX2dldEZpbHRlckJhclZhcmlhbnRDb250cm9sKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50ID0gdmlldy5ieUlkKFwiZmU6OlBhZ2VWYXJpYW50TWFuYWdlbWVudFwiKSBhcyBWYXJpYW50TWFuYWdlbWVudDtcblx0XHR9XG5cdFx0Y29uc3QgY3VycmVudFZhcmlhbnRLZXkgPSB2YXJpYW50TWFuYWdlbWVudD8uZ2V0Q3VycmVudFZhcmlhbnRLZXkoKTtcblx0XHQvL1RoZSBjaGVjayBzaGFsbCBoYXBwZW4gZm9yICdpbnRpYWwgbG9hZCcgYW5kICdBcHBseSBBdXRvbWF0aWNhbGx5JyBmb3IgY29sbGFwc2luZyB0aGUgaGVhZGVyIG9yXG5cdFx0Ly8gYWx3YXlzIGJlIGNvbGxhcHNlZCBpZiBuYXZUeXBlIGlzIHhBcHBTdGF0ZVxuXHRcdC8vIGluaXRpYWxMb2FkIEF1dG8gb3IgRGlzYWJsZWRcblx0XHRpZiAobmF2aWdhdGlvblR5cGUgPT09IE5hdlR5cGUueEFwcFN0YXRlKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGVsc2UgaWYgKHZhcmlhbnRNYW5hZ2VtZW50ICYmIHZpZXdEYXRhLmluaXRpYWxMb2FkICE9PSBJbml0aWFsTG9hZE1vZGUuRW5hYmxlZCkge1xuXHRcdFx0Ly8gSGVhZGVyIGlzIGNvbGxhcHNlZCBpZiBwcmVzZXQgZmlsdGVycyBhcmUgc2V0IGZvciBpbml0aWFsIGxvYWQgQXV0bywgSGVhZGVyIHNoYWxsIHJlbWFpbiBleHBhbmRlZCBpZiBpbml0aWFsIGxvYWQgaXMgQXV0byB3aXRob3V0IHByZXNldCBmaWx0ZXJzIG9yIGludGlhbCBsb2FkIGlzIGRpc2FibGVkXG5cdFx0XHRpZiAoY29udHJvbGxlci5fc2hvdWxkQXV0b1RyaWdnZXJTZWFyY2godGhpcy5fZ2V0RmlsdGVyQmFyVk0odmlldykpKSB7XG5cdFx0XHRcdGlzU2VhcmNoVHJpZ2dlcmVkQnlJbml0aWFsTG9hZCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIGluaXRpYWxMb2FkIEVuYWJsZWRcblx0XHRlbHNlIGlmIChcblx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50ICYmXG5cdFx0XHR2aWV3RGF0YS5pbml0aWFsTG9hZCA9PT0gSW5pdGlhbExvYWRNb2RlLkVuYWJsZWQgJiZcblx0XHRcdGNvbnRyb2xsZXIuX2dldEFwcGx5QXV0b21hdGljYWxseU9uVmFyaWFudCh2YXJpYW50TWFuYWdlbWVudCwgY3VycmVudFZhcmlhbnRLZXkpXG5cdFx0KSB7XG5cdFx0XHRpc1NlYXJjaFRyaWdnZXJlZEJ5SW5pdGlhbExvYWQgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gaXNTZWFyY2hUcmlnZ2VyZWRCeUluaXRpYWxMb2FkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFwcGx5IFNlbGVjdGlvbiBWYXJpYW50IGZyb20gTmF2aWdhdGlvbiBQYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSB2aWV3IFZpZXcgb2YgdGhlIExSIGZpbHRlciBiYXJcblx0ICogQHBhcmFtIG5hdmlnYXRpb25QYXJhbWV0ZXIgU2VsZWN0aW9uIFZhcmlhbnQgdG8gYXBwbHkgZnJvbSBhcHBTdGF0ZVxuXHQgKiBAcGFyYW0gZmlsdGVyVmFyaWFudEFwcGxpZWQgSXMgYSBmaWx0ZXIgdmFyaWFudCBhbGFyZWFkeSBhcHBsaWVkXG5cdCAqIEByZXR1cm5zIFByb21pc2UgZm9yIGFzeW5jaHJvbm91cyBoYW5kbGluZ1xuXHQgKi9cblx0YXN5bmMgX2FwcGx5U2VsZWN0aW9uVmFyaWFudCh2aWV3OiBWaWV3LCBuYXZpZ2F0aW9uUGFyYW1ldGVyOiBOYXZpZ2F0aW9uUGFyYW1ldGVyLCBmaWx0ZXJWYXJpYW50QXBwbGllZDogYm9vbGVhbik6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuZ2V0Q29udGVudCgpIGFzIEZpbHRlckJhcjtcblx0XHRjb25zdCB7IHNlbGVjdGlvblZhcmlhbnQ6IHN2LCBzZWxlY3Rpb25WYXJpYW50RGVmYXVsdHM6IHN2RGVmYXVsdHMsIHJlcXVpcmVzU3RhbmRhcmRWYXJpYW50ID0gZmFsc2UgfSA9IG5hdmlnYXRpb25QYXJhbWV0ZXI7XG5cblx0XHRpZiAoIWZpbHRlckJhciB8fCAhc3YpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9XG5cdFx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQgPSB0aGlzLl9nZXRGaWx0ZXJCYXJWTSh2aWV3KSBhcyBWYXJpYW50TWFuYWdlbWVudDtcblx0XHRjb25zdCBzaG91bGRBcHBseUFwcFN0YXRlID0gYXdhaXQgdGhpcy5fYWN0aXZhdGVWYXJpYW50QW5kRGV0ZXJtaW5lQXBwbHlBcHBTdGF0ZShcblx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50LFxuXHRcdFx0cmVxdWlyZXNTdGFuZGFyZFZhcmlhbnQsXG5cdFx0XHRmaWx0ZXJWYXJpYW50QXBwbGllZFxuXHRcdCk7XG5cdFx0aWYgKHNob3VsZEFwcGx5QXBwU3RhdGUpIHtcblx0XHRcdHRoaXMuX2FkZERlZmF1bHREaXNwbGF5Q3VycmVuY3lUb1NWKHZpZXcsIHN2LCBzdkRlZmF1bHRzKTtcblxuXHRcdFx0Ly8gY2hlY2sgaWYgRkxQIGRlZmF1bHQgdmFsdWVzIGFyZSB0aGVyZSBhbmQgaXMgaXQgc3RhbmRhcmQgdmFyaWFudFxuXHRcdFx0Y29uc3Qgc3ZEZWZhdWx0c0FyZVByZXNlbnQgPSBzdkRlZmF1bHRzID8gc3ZEZWZhdWx0cy5nZXRTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcygpLmxlbmd0aCA+IDAgOiBmYWxzZTtcblx0XHRcdGNvbnN0IHN0ZFZhcmlhbnRJc0RlZmF1bHRWYXJpYW50ID1cblx0XHRcdFx0dmFyaWFudE1hbmFnZW1lbnQgJiYgdmFyaWFudE1hbmFnZW1lbnQuZ2V0RGVmYXVsdFZhcmlhbnRLZXkoKSA9PT0gdmFyaWFudE1hbmFnZW1lbnQuZ2V0U3RhbmRhcmRWYXJpYW50S2V5KCk7XG5cdFx0XHRjb25zdCB1c2VGTFBEZWZhdWx0VmFsdWVzOiBib29sZWFuID0gc3ZEZWZhdWx0c0FyZVByZXNlbnQgJiYgKHN0ZFZhcmlhbnRJc0RlZmF1bHRWYXJpYW50IHx8ICF2YXJpYW50TWFuYWdlbWVudCk7XG5cblx0XHRcdGNvbnN0IGZpbHRlckJhckFQSSA9IGZpbHRlckJhci5nZXRQYXJlbnQoKSBhcyBGaWx0ZXJCYXJBUEk7XG5cdFx0XHRsZXQgc3ZUb1NldDogU2VsZWN0aW9uVmFyaWFudCA9IHN2O1xuXHRcdFx0aWYgKGZpbHRlclZhcmlhbnRBcHBsaWVkIHx8IHVzZUZMUERlZmF1bHRWYWx1ZXMpIHtcblx0XHRcdFx0c3ZUb1NldCA9IGF3YWl0IHRoaXMuX2dldEFkanVzdGVkU1Yoc3YsIHVzZUZMUERlZmF1bHRWYWx1ZXMpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZpbHRlckJhckFQSS5zZXRTZWxlY3Rpb25WYXJpYW50KHN2VG9TZXQsIHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdF9lbmFibGVGaWx0ZXJCYXIoZmlsdGVyQmFyQ29udHJvbDogRmlsdGVyQmFyLCBwcmV2ZW50SW5pdGlhbFNlYXJjaDogYm9vbGVhbik6IHZvaWQge1xuXHRcdGNvbnN0IGZpbHRlckJhckFQSSA9IGZpbHRlckJhckNvbnRyb2wuZ2V0UGFyZW50KCkgYXMgRmlsdGVyQmFyQVBJO1xuXHRcdGNvbnN0IGZuT25TZWFyY2ggPSAoKTogdm9pZCA9PiB7XG5cdFx0XHR0aGlzLl9iU2VhcmNoVHJpZ2dlcmVkID0gIXByZXZlbnRJbml0aWFsU2VhcmNoO1xuXHRcdH07XG5cblx0XHQvLyByZXNldCB0aGUgc3VzcGVuZCBzZWxlY3Rpb24gb24gZmlsdGVyIGJhciB0byBhbGxvdyBsb2FkaW5nIG9mIGRhdGEgd2hlbiBuZWVkZWQgKHdhcyBzZXQgb24gTFIgSW5pdClcblx0XHRpZiAoZmlsdGVyQmFyQ29udHJvbC5nZXRTdXNwZW5kU2VsZWN0aW9uKCkpIHtcblx0XHRcdC8vIE9ubHkgaWYgc2VhcmNoIGlzIGZpcmVkIHdlIHNldCBfYlNlYXJjaFRyaWdnZXJlZC5cblx0XHRcdC8vIElmIHRoZXJlIHdhcyBhbiBlcnJvciBkdWUgdG8gcmVxdWlyZWQgZmlsdGVyZmllbGRzIGVtcHR5IG9yIG90aGVyIGlzc3VlcyB3ZSBza2lwIHNldHRpbmcgX2JTZWFyY2hUcmlnZ2VyZWQuXG5cdFx0XHRmaWx0ZXJCYXJBUEkuYXR0YWNoRXZlbnRPbmNlKFwic2VhcmNoXCIsIGZuT25TZWFyY2gpO1xuXHRcdFx0ZmlsdGVyQmFyQ29udHJvbC5lbmFibGVSZXF1ZXN0cyh0cnVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gc2VhcmNoIG1pZ2h0IGFscmVhZHkgYmUgdHJpZ2dlcmVkLlxuXHRcdFx0Zm5PblNlYXJjaCgpO1xuXHRcdH1cblx0fVxuXG5cdGFzeW5jIF9nZXRBZGp1c3RlZFNWKGFwcFN0YXRlU1Y6IFNlbGVjdGlvblZhcmlhbnQsIHVzZUZMUERlZmF1bHRWYWx1ZXM6IGJvb2xlYW4pOiBQcm9taXNlPFNlbGVjdGlvblZhcmlhbnQ+IHtcblx0XHRsZXQgYWRqdXN0ZWRTViA9IG5ldyBTZWxlY3Rpb25WYXJpYW50KGFwcFN0YXRlU1YudG9KU09OT2JqZWN0KCkpO1xuXHRcdGNvbnN0IGFscmVhZHlBcHBsaWVkU1YgPSBhd2FpdCB0aGlzLmdldFNlbGVjdGlvblZhcmlhbnQoKTtcblx0XHRjb25zdCBhcHBsaWVkU2VsT3B0TmFtZXMgPSBhbHJlYWR5QXBwbGllZFNWPy5nZXRTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcygpIHx8IFtdO1xuXHRcdGlmIChhcHBsaWVkU2VsT3B0TmFtZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly8gV2UgbWVyZ2UgJ2FwcGxpZWQgU1YnIGFuZCAnYXBwU3RhdGUgU1YnIGJhc2VkIG9uICd1c2VGTFBEZWZhdWx0VmFsdWVzJy5cblx0XHRcdGFkanVzdGVkU1YgPSBhcHBsaWVkU2VsT3B0TmFtZXMucmVkdWNlKChzdkNvcHk6IFNlbGVjdGlvblZhcmlhbnQsIHNlbE9wdGlvbk5hbWUpID0+IHtcblx0XHRcdFx0Ly8gKGFwcFN0YXRlU1YgPSBhZGp1c3RlZFNWID0gc3ZDb3B5KVxuXHRcdFx0XHRjb25zdCBzdlNlbE9wdHMgPSBzdkNvcHkuZ2V0U2VsZWN0T3B0aW9uKHNlbE9wdGlvbk5hbWUpO1xuXHRcdFx0XHQvLyBJZiB1c2VGTFBEZWZhdWx0VmFsdWVzID0gdHJ1ZSwgbWVhbnMgKGFwcFN0YXRlU1YgPSBzdkRlZmF1bHRzKVxuXHRcdFx0XHRpZiAoKHVzZUZMUERlZmF1bHRWYWx1ZXMgJiYgIXN2U2VsT3B0cz8ubGVuZ3RoKSB8fCAhdXNlRkxQRGVmYXVsdFZhbHVlcykge1xuXHRcdFx0XHRcdC8vIGlmIGRlZmF1bHQgU1YgbmVlZHMgdG8gYmUgdXNlZCwgdGhlbiBzZWxlY3Qgb3B0aW9ucyBmcm9tIGRlZmF1bHQgc2VsZWN0IG9wdGlvbnMgdGFrZSBwcmlvcml0eS5cblx0XHRcdFx0XHQvLyBlbHNlIHdlIG1lcmdlIGJvdGg6IGFscmVhZHkgYXBwbGllZCBTViBhbmQgU1YgZnJvbSBuYXZQYXJhbXMuXG5cdFx0XHRcdFx0Y29uc3Qgc2VsZWN0T3B0aW9ucyA9IGFscmVhZHlBcHBsaWVkU1YuZ2V0U2VsZWN0T3B0aW9uKHNlbE9wdGlvbk5hbWUpO1xuXHRcdFx0XHRcdHN2Q29weS5tYXNzQWRkU2VsZWN0T3B0aW9uKHNlbE9wdGlvbk5hbWUsIHNlbGVjdE9wdGlvbnMgfHwgW10pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBzdkNvcHk7XG5cdFx0XHR9LCBhZGp1c3RlZFNWKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYWRqdXN0ZWRTVjtcblx0fVxuXG5cdF9wcmV2ZW50SW5pdGlhbFNlYXJjaCh2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnQpOiBib29sZWFuIHtcblx0XHRpZiAoIXZhcmlhbnRNYW5hZ2VtZW50KSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0Y29uc3QgYVZhcmlhbnRzID0gdmFyaWFudE1hbmFnZW1lbnQuZ2V0VmFyaWFudHMoKTtcblx0XHRjb25zdCBvQ3VycmVudFZhcmlhbnQgPSBhVmFyaWFudHMuZmluZChmdW5jdGlvbiAoaXRlbSk6IGJvb2xlYW4ge1xuXHRcdFx0cmV0dXJuIGl0ZW0uZ2V0S2V5KCkgPT09IHZhcmlhbnRNYW5hZ2VtZW50LmdldEN1cnJlbnRWYXJpYW50S2V5KCk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuICFvQ3VycmVudFZhcmlhbnQuZXhlY3V0ZU9uU2VsZWN0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBEaXNwbGF5Q3VycmVuY3kgdG8gU1YgaWYgaXQgaXMgbWFuZGF0b3J5IGFuZCBleGlzdHMgaW4gU1YgZGVmYXVsdHMuXG5cdCAqIEBwYXJhbSB2aWV3IFZpZXcgb2YgdGhlIExSIGZpbHRlciBiYXJcblx0ICogQHBhcmFtIHN2IFNlbGVjdGlvbiBWYXJpYW50IHRvIGFwcGx5XG5cdCAqIEBwYXJhbSBzdkRlZmF1bHRzIFNlbGVjdGlvbiBWYXJpYW50IGRlZmF1bHRzXG5cdCAqL1xuXHRfYWRkRGVmYXVsdERpc3BsYXlDdXJyZW5jeVRvU1YodmlldzogVmlldywgc3Y6IFNlbGVjdGlvblZhcmlhbnQsIHN2RGVmYXVsdHM/OiBTZWxlY3Rpb25WYXJpYW50KTogdm9pZCB7XG5cdFx0aWYgKCFzdkRlZmF1bHRzIHx8IHN2RGVmYXVsdHM/LmlzRW1wdHkoKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHZpZXdEYXRhID0gdmlldy5nZXRWaWV3RGF0YSgpIGFzIExSVmlld0RhdGEsXG5cdFx0XHRtZXRhTW9kZWwgPSB2aWV3LmdldE1vZGVsKCk/LmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0Y29udGV4dFBhdGggPSB2aWV3RGF0YS5jb250ZXh0UGF0aCB8fCBgLyR7dmlld0RhdGEuZW50aXR5U2V0fWAsXG5cdFx0XHRtZXRhQ29udGV4dCA9IG1ldGFNb2RlbC5nZXRNZXRhQ29udGV4dChjb250ZXh0UGF0aCksXG5cdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPE1ldGFNb2RlbD4gPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YUNvbnRleHQpO1xuXG5cdFx0Ly8gZ2V0RGlzcGxheUN1cnJlbmN5UHJvcGVydHlOYW1lIGFscmVhZHkgYXBwbGllcyB0aGUgaXNQYXJhbWV0ZXJpemVkIGxvZ2ljXG5cdFx0Y29uc3QgZGlzcGxheUN1cnJlbmN5UHJvcGVydHlOYW1lID0gdGhpcy5nZXREaXNwbGF5Q3VycmVuY3lQcm9wZXJ0eU5hbWUoZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdFx0Y29uc3QgZGlzcGxheUN1cnJlbmN5SXNNYW5kYXRvcnkgPSB0aGlzLl9jaGVja0lmRGlzcGxheUN1cnJlbmN5SXNSZXF1aXJlZChkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0XHRpZiAoIWRpc3BsYXlDdXJyZW5jeUlzTWFuZGF0b3J5KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc3ZPcHRpb25zID0gc3YuZ2V0U2VsZWN0T3B0aW9uKGRpc3BsYXlDdXJyZW5jeVByb3BlcnR5TmFtZSkgfHwgW10sXG5cdFx0XHRkZWZhdWx0U1ZPcHRpb25zID0gc3ZEZWZhdWx0cy5nZXRTZWxlY3RPcHRpb24oZGlzcGxheUN1cnJlbmN5UHJvcGVydHlOYW1lKSB8fCBbXSxcblx0XHRcdGRpc3BsYXlDdXJyZW5jeURlZmF1bHRFeGlzdHMgPSBkZWZhdWx0U1ZPcHRpb25zLmxlbmd0aCA+IDAsXG5cdFx0XHRub1NWRGlzcGxheUN1cnJlbmN5RXhpc3RzID0gc3ZPcHRpb25zLmxlbmd0aCA9PT0gMDtcblxuXHRcdGlmIChub1NWRGlzcGxheUN1cnJlbmN5RXhpc3RzICYmIGRpc3BsYXlDdXJyZW5jeURlZmF1bHRFeGlzdHMpIHtcblx0XHRcdGNvbnN0IGRpc3BsYXlDdXJyZW5jeVNlbGVjdE9wdGlvbiA9IGRlZmF1bHRTVk9wdGlvbnNbMF0sXG5cdFx0XHRcdHNpZ24gPSBkaXNwbGF5Q3VycmVuY3lTZWxlY3RPcHRpb25bXCJTaWduXCJdLFxuXHRcdFx0XHRvcHRpb24gPSBkaXNwbGF5Q3VycmVuY3lTZWxlY3RPcHRpb25bXCJPcHRpb25cIl0sXG5cdFx0XHRcdGxvdyA9IGRpc3BsYXlDdXJyZW5jeVNlbGVjdE9wdGlvbltcIkxvd1wiXSxcblx0XHRcdFx0aGlnaCA9IGRpc3BsYXlDdXJyZW5jeVNlbGVjdE9wdGlvbltcIkhpZ2hcIl07XG5cblx0XHRcdHN2LmFkZFNlbGVjdE9wdGlvbihkaXNwbGF5Q3VycmVuY3lQcm9wZXJ0eU5hbWUsIHNpZ24sIG9wdGlvbiwgbG93LCBoaWdoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBkYXRhIG1vZGVsIG9iamVjdCBwYXRoIGlzIHBhcmFtZXRlcml6ZWQuXG5cdCAqIExvb2tzIGZvciBhIFJlc3VsdENvbnRleHQgYW5ub3RhdGlvbiBpbiB0aGUgc3RhcnRpbmcgZW50aXR5J3MgdHlwZVxuXHQgKiBhbmQgZW5zdXJlcyB0aGVyZSdzIG5vIHRhcmdldCBlbnRpdHkgc2V0LlxuXHQgKiBAcGFyYW0gZGF0YU1vZGVsT2JqZWN0UGF0aCBUaGUgcGF0aCB0byBjaGVjay5cblx0ICogQHJldHVybnMgVHJ1ZSBpZiBpdCdzIHBhcmFtZXRlcml6ZWQsIGZhbHNlIG90aGVyd2lzZS5cblx0ICovXG5cdHByaXZhdGUgaXNQYXJhbWV0ZXJpemVkKGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8TWV0YU1vZGVsPik6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAhIWRhdGFNb2RlbE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQuZW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uUmVzdWx0Q29udGV4dDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBkaXNwbGF5IGN1cnJlbmN5IHByb3BlcnR5IG5hbWUgYmFzZWQgb24gdGhlIGVudGl0eSB0eXBlJ3MgcGFyYW1ldGVyaXphdGlvbi5cblx0ICogVXNlcyB0aGUgaXNQYXJhbWV0ZXJpemVkIG1ldGhvZCB0byBkZWNpZGUgd2hpY2ggcHJvcGVydHkgbmFtZSB0byByZXR1cm4uXG5cdCAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxuXHQgKiBAcmV0dXJucyBUaGUgYXBwcm9wcmlhdGUgZGlzcGxheSBjdXJyZW5jeSBwcm9wZXJ0eSBuYW1lLlxuXHQgKi9cblx0Z2V0RGlzcGxheUN1cnJlbmN5UHJvcGVydHlOYW1lKGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8TWV0YU1vZGVsPik6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuaXNQYXJhbWV0ZXJpemVkKGRhdGFNb2RlbE9iamVjdFBhdGgpID8gUF9ESVNQTEFZX0NVUlJFTkNZX1BST1BFUlRZX05BTUUgOiBESVNQTEFZX0NVUlJFTkNZX1BST1BFUlRZX05BTUU7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIERpc3BsYXlDdXJyZW5jeSBpcyBtYW5kYXRvcnkgZm9yIGZpbHRlcmluZy5cblx0ICogQHBhcmFtIGRhdGFNb2RlbE9iamVjdFBhdGhcblx0ICogQHJldHVybnMgQm9vbGVhblxuXHQgKi9cblx0X2NoZWNrSWZEaXNwbGF5Q3VycmVuY3lJc1JlcXVpcmVkKGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8TWV0YU1vZGVsPik6IGJvb2xlYW4ge1xuXHRcdGxldCBkaXNwbGF5Q3VycmVuY3lJc01hbmRhdG9yeSA9IGZhbHNlO1xuXG5cdFx0aWYgKHRoaXMuaXNQYXJhbWV0ZXJpemVkKGRhdGFNb2RlbE9iamVjdFBhdGgpKSB7XG5cdFx0XHRkaXNwbGF5Q3VycmVuY3lJc01hbmRhdG9yeSA9IGRhdGFNb2RlbE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQuZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLnNvbWUoXG5cdFx0XHRcdChwYXJhbWV0ZXI6IFByb3BlcnR5KTogYm9vbGVhbiA9PiBwYXJhbWV0ZXIubmFtZSA9PT0gUF9ESVNQTEFZX0NVUlJFTkNZX1BST1BFUlRZX05BTUVcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGVudGl0eVNldDogRW50aXR5U2V0IHwgdW5kZWZpbmVkID1cblx0XHRcdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0Ll90eXBlID09PSBcIkVudGl0eVNldFwiID8gZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldCA6IHVuZGVmaW5lZCxcblx0XHRcdFx0cmVxdWlyZWRQcm9wZXJ0aWVzID0gZW50aXR5U2V0Py5hbm5vdGF0aW9ucy5DYXBhYmlsaXRpZXM/LkZpbHRlclJlc3RyaWN0aW9ucz8uUmVxdWlyZWRQcm9wZXJ0aWVzID8/IFtdO1xuXHRcdFx0ZGlzcGxheUN1cnJlbmN5SXNNYW5kYXRvcnkgPSByZXF1aXJlZFByb3BlcnRpZXMuc29tZShcblx0XHRcdFx0KHJlcXVpcmVkUHJvcGVydHk6IFByb3BlcnR5UGF0aCkgPT4gcmVxdWlyZWRQcm9wZXJ0eS52YWx1ZSA9PT0gRElTUExBWV9DVVJSRU5DWV9QUk9QRVJUWV9OQU1FXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gZGlzcGxheUN1cnJlbmN5SXNNYW5kYXRvcnk7XG5cdH1cblxuXHQvKipcblx0ICogQWN0aXZhdGUgdmFyaWFudCBmcm9tIHZhcmlhbnQgbWFuYWdlbWVudCBhbmQgcmV0dXJuIGlmIGFwcFN0YXRlIG5lZWRzIHRvIGJlIGFwcGxpZWQuXG5cdCAqIEBwYXJhbSB2YXJpYW50TWFuYWdlbWVudCBWYXJpYW50TWFuYWdlbWVudCB1c2VkIGJ5IGZpbHRlciBiYXJcblx0ICogQHBhcmFtIHJlcVN0ZFZhcmlhbnQgSWYgc3RhbmRhcmQgdmFyaWFudCBpcyByZXF1aXJlZCB0byBiZSB1c2VkXG5cdCAqIEBwYXJhbSBmaWx0ZXJWYXJpYW50QXBwbGllZCBJcyBhIGZpbHRlciB2YXJpYW50IGFscmVhZHkgYXBwbGllZFxuXHQgKiBAcmV0dXJucyBQcm9taXNlIGZvciBhc3luY2hyb25vdXMgaGFuZGxpbmdcblx0ICovXG5cdGFzeW5jIF9hY3RpdmF0ZVZhcmlhbnRBbmREZXRlcm1pbmVBcHBseUFwcFN0YXRlKFxuXHRcdHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudCB8IHVuZGVmaW5lZCxcblx0XHRyZXFTdGRWYXJpYW50OiBib29sZWFuLFxuXHRcdGZpbHRlclZhcmlhbnRBcHBsaWVkOiBib29sZWFuXG5cdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGlmICh2YXJpYW50TWFuYWdlbWVudCAmJiAhZmlsdGVyVmFyaWFudEFwcGxpZWQpIHtcblx0XHRcdGxldCB2YXJpYW50S2V5ID0gcmVxU3RkVmFyaWFudCA/IHZhcmlhbnRNYW5hZ2VtZW50LmdldFN0YW5kYXJkVmFyaWFudEtleSgpIDogdmFyaWFudE1hbmFnZW1lbnQuZ2V0RGVmYXVsdFZhcmlhbnRLZXkoKTtcblx0XHRcdGlmICh2YXJpYW50S2V5ID09PSBudWxsKSB7XG5cdFx0XHRcdHZhcmlhbnRLZXkgPSB2YXJpYW50TWFuYWdlbWVudC5nZXRJZCgpO1xuXHRcdFx0fVxuXHRcdFx0YXdhaXQgQ29udHJvbFZhcmlhbnRBcHBseUFQSS5hY3RpdmF0ZVZhcmlhbnQoe1xuXHRcdFx0XHRlbGVtZW50OiB2YXJpYW50TWFuYWdlbWVudCxcblx0XHRcdFx0dmFyaWFudFJlZmVyZW5jZTogdmFyaWFudEtleVxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gcmVxU3RkVmFyaWFudCB8fCB2YXJpYW50TWFuYWdlbWVudC5nZXREZWZhdWx0VmFyaWFudEtleSgpID09PSB2YXJpYW50TWFuYWdlbWVudC5nZXRTdGFuZGFyZFZhcmlhbnRLZXkoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBWYXJpYW50IG1hbmFnZW1lbnQgdXNlZCBieSBmaWx0ZXIgYmFyLlxuXHQgKiBAcGFyYW0gdmlldyBWaWV3IG9mIHRoZSBMUiBmaWx0ZXIgYmFyXG5cdCAqIEByZXR1cm5zIFZhcmlhbnRNYW5hZ2VtZW50IGlmIHVzZWRcblx0ICovXG5cdF9nZXRGaWx0ZXJCYXJWTSh2aWV3OiBWaWV3KTogVmFyaWFudE1hbmFnZW1lbnQgfCB1bmRlZmluZWQge1xuXHRcdGxldCB2YXJpYW50TWFuYWdlbWVudDtcblx0XHRjb25zdCB2aWV3RGF0YSA9IHZpZXcuZ2V0Vmlld0RhdGEoKSBhcyBMUlZpZXdEYXRhO1xuXHRcdHN3aXRjaCAodmlld0RhdGEudmFyaWFudE1hbmFnZW1lbnQpIHtcblx0XHRcdGNhc2UgVmFyaWFudE1hbmFnZW1lbnRUeXBlLlBhZ2U6XG5cdFx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50ID0gdmlldy5ieUlkKFwiZmU6OlBhZ2VWYXJpYW50TWFuYWdlbWVudFwiKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Db250cm9sOlxuXHRcdFx0XHR2YXJpYW50TWFuYWdlbWVudCA9ICh2aWV3LmdldENvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcikuX2dldEZpbHRlckJhclZhcmlhbnRDb250cm9sKCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBWYXJpYW50TWFuYWdlbWVudFR5cGUuTm9uZTpcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFyaWFudE1hbmFnZW1lbnQgYXMgVmFyaWFudE1hbmFnZW1lbnQgfCB1bmRlZmluZWQ7XG5cdH1cblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3JlcXVpcmUtYXdhaXRcblx0YXN5bmMgaGFuZGxlVmFyaWFudElkUGFzc2VkVmlhVVJMUGFyYW1zKG9VcmxQYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBQcm9taXNlPHVua25vd24+IHtcblx0XHRjb25zdCBhUGFnZVZhcmlhbnRJZCA9IG9VcmxQYXJhbXNbXCJzYXAtdWktZmUtdmFyaWFudC1pZFwiXSxcblx0XHRcdGFGaWx0ZXJCYXJWYXJpYW50SWQgPSBvVXJsUGFyYW1zW1wic2FwLXVpLWZlLWZpbHRlcmJhci12YXJpYW50LWlkXCJdLFxuXHRcdFx0YVRhYmxlVmFyaWFudElkID0gb1VybFBhcmFtc1tcInNhcC11aS1mZS10YWJsZS12YXJpYW50LWlkXCJdLFxuXHRcdFx0YUNoYXJ0VmFyaWFudElkID0gb1VybFBhcmFtc1tcInNhcC11aS1mZS1jaGFydC12YXJpYW50LWlkXCJdO1xuXHRcdGxldCBvVmFyaWFudElEczogVmFyaWFudElEcyB8IHVuZGVmaW5lZDtcblx0XHRpZiAoYVBhZ2VWYXJpYW50SWQgfHwgYUZpbHRlckJhclZhcmlhbnRJZCB8fCBhVGFibGVWYXJpYW50SWQgfHwgYUNoYXJ0VmFyaWFudElkKSB7XG5cdFx0XHRvVmFyaWFudElEcyA9IHtcblx0XHRcdFx0c1BhZ2VWYXJpYW50SWQ6IGFQYWdlVmFyaWFudElkICYmIGFQYWdlVmFyaWFudElkWzBdLFxuXHRcdFx0XHRzRmlsdGVyQmFyVmFyaWFudElkOiBhRmlsdGVyQmFyVmFyaWFudElkICYmIGFGaWx0ZXJCYXJWYXJpYW50SWRbMF0sXG5cdFx0XHRcdHNUYWJsZVZhcmlhbnRJZDogYVRhYmxlVmFyaWFudElkICYmIGFUYWJsZVZhcmlhbnRJZFswXSxcblx0XHRcdFx0c0NoYXJ0VmFyaWFudElkOiBhQ2hhcnRWYXJpYW50SWQgJiYgYUNoYXJ0VmFyaWFudElkWzBdXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5faGFuZGxlQ29udHJvbFZhcmlhbnRJZChvVmFyaWFudElEcyk7XG5cdH1cblxuXHRhc3luYyBfaGFuZGxlQ29udHJvbFZhcmlhbnRJZChvVmFyaWFudElEczogVmFyaWFudElEcyB8IHVuZGVmaW5lZCk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdGxldCBvVk06IFZhcmlhbnRNYW5hZ2VtZW50O1xuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRQYWdlQ29udHJvbGxlcigpPy5nZXRWaWV3KCksXG5cdFx0XHRhUHJvbWlzZXM6IFByb21pc2U8Ym9vbGVhbj5bXSA9IFtdO1xuXHRcdGNvbnN0IHNWYXJpYW50TWFuYWdlbWVudCA9IG9WaWV3LmdldFZpZXdEYXRhKCkudmFyaWFudE1hbmFnZW1lbnQ7XG5cdFx0aWYgKG9WYXJpYW50SURzICYmIG9WYXJpYW50SURzLnNQYWdlVmFyaWFudElkICYmIHNWYXJpYW50TWFuYWdlbWVudCA9PT0gXCJQYWdlXCIpIHtcblx0XHRcdG9WTSA9IG9WaWV3LmJ5SWQoXCJmZTo6UGFnZVZhcmlhbnRNYW5hZ2VtZW50XCIpIGFzIFZhcmlhbnRNYW5hZ2VtZW50O1xuXHRcdFx0dGhpcy5faGFuZGxlUGFnZVZhcmlhbnRJZChvVmFyaWFudElEcywgb1ZNLCBhUHJvbWlzZXMpO1xuXHRcdH0gZWxzZSBpZiAob1ZhcmlhbnRJRHMgJiYgc1ZhcmlhbnRNYW5hZ2VtZW50ID09PSBcIkNvbnRyb2xcIikge1xuXHRcdFx0aWYgKG9WYXJpYW50SURzLnNGaWx0ZXJCYXJWYXJpYW50SWQpIHtcblx0XHRcdFx0b1ZNID0gKG9WaWV3LmdldENvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcikuX2dldEZpbHRlckJhclZhcmlhbnRDb250cm9sKCkhO1xuXHRcdFx0XHR0aGlzLl9oYW5kbGVGaWx0ZXJCYXJWYXJpYW50Q29udHJvbElkKG9WYXJpYW50SURzLCBvVk0sIGFQcm9taXNlcyk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLmFsbChhUHJvbWlzZXMpO1xuXHR9XG5cblx0Lypcblx0ICogSGFuZGxlcyBwYWdlIGxldmVsIHZhcmlhbnQgYW5kIHBhc3NlcyB0aGUgdmFyaWFudCB0byB0aGUgZnVuY3Rpb24gdGhhdCBwdXNoZXMgdGhlIHByb21pc2UgdG8gdGhlIHByb21pc2UgYXJyYXlcblx0ICpcblx0ICogQHBhcmFtIG9WYXJpbmF0SURzIGNvbnRhaW5zIGFuIG9iamVjdCBvZiBhbGwgdmFyaWFudCBJRHNcblx0ICogQHBhcmFtIG9WTSBjb250YWlucyB0aGUgdmFpcmFudCBtYW5hZ2VtZW50IG9iamVjdCBmb3IgdGhlIHBhZ2UgdmFyaWFudFxuXHQgKiBAcGFyYW0gYVByb21pc2VzIGlzIGFuIGFycmF5IG9mIGFsbCBwcm9taXNlc1xuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2hhbmRsZVBhZ2VWYXJpYW50SWQob1ZhcmlhbnRJRHM6IFZhcmlhbnRJRHMsIG9WTTogVmFyaWFudE1hbmFnZW1lbnQsIGFQcm9taXNlczogUHJvbWlzZTxib29sZWFuPltdKTogdm9pZCB7XG5cdFx0b1ZNLmdldFZhcmlhbnRzKCk/LmZvckVhY2goKG9WYXJpYW50OiBWYXJpYW50T2JqZWN0KSA9PiB7XG5cdFx0XHR0aGlzLl9maW5kQW5kUHVzaFZhcmlhbnRUb1Byb21pc2Uob1ZhcmlhbnQsIG9WYXJpYW50SURzLnNQYWdlVmFyaWFudElkLCBvVk0sIGFQcm9taXNlcywgdHJ1ZSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKlxuXHQgKiBIYW5kbGVzIGNvbnRyb2wgbGV2ZWwgdmFyaWFudCBmb3IgZmlsdGVyIGJhciBhbmQgcGFzc2VzIHRoZSB2YXJpYW50IHRvIHRoZSBmdW5jdGlvbiB0aGF0IHB1c2hlcyB0aGUgcHJvbWlzZSB0byB0aGUgcHJvbWlzZSBhcnJheVxuXHQgKlxuXHQgKiBAcGFyYW0gb1ZhcmluYXRJRHMgY29udGFpbnMgYW4gb2JqZWN0IG9mIGFsbCB2YXJpYW50IElEc1xuXHQgKiBAcGFyYW0gb1ZNIGNvbnRhaW5zIHRoZSB2YWlyYW50IG1hbmFnZW1lbnQgb2JqZWN0IGZvciB0aGUgZmlsdGVyIGJhclxuXHQgKiBAcGFyYW0gYVByb21pc2VzIGlzIGFuIGFycmF5IG9mIGFsbCBwcm9taXNlc1xuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblxuXHRfaGFuZGxlRmlsdGVyQmFyVmFyaWFudENvbnRyb2xJZChvVmFyaWFudElEczogVmFyaWFudElEcywgb1ZNOiBWYXJpYW50TWFuYWdlbWVudCwgYVByb21pc2VzOiBQcm9taXNlPGJvb2xlYW4+W10pOiB2b2lkIHtcblx0XHRpZiAob1ZNKSB7XG5cdFx0XHRvVk0uZ2V0VmFyaWFudHMoKS5mb3JFYWNoKChvVmFyaWFudDogVmFyaWFudE9iamVjdCkgPT4ge1xuXHRcdFx0XHR0aGlzLl9maW5kQW5kUHVzaFZhcmlhbnRUb1Byb21pc2Uob1ZhcmlhbnQsIG9WYXJpYW50SURzLnNGaWx0ZXJCYXJWYXJpYW50SWQsIG9WTSwgYVByb21pc2VzLCB0cnVlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qXG5cdCAqIE1hdGNoZXMgdGhlIHZhcmlhbnQgSUQgcHJvdmlkZWQgaW4gdGhlIHVybCB0byB0aGUgYXZhaWxhYmxlIHZhaXJhbnQgSURzIGFuZCBwdXNoZXMgdGhlIGFwcHJvcHJpYXRlIHByb21pc2UgdG8gdGhlIHByb21pc2UgYXJyYXlcblx0ICpcblx0ICogQHBhcmFtIG9WYXJpYW50IGlzIGFuIG9iamVjdCBmb3IgYSBzcGVjaWZpYyB2YXJpYW50XG5cdCAqIEBwYXJhbSBzVmFyaWFudElkIGlzIHRoZSB2YXJpYW50IElEIHByb3ZpZGVkIGluIHRoZSB1cmxcblx0ICogQHBhcmFtIG9WTSBpcyB0aGUgdmFyaWFudCBtYW5hZ2VtZW50IG9iamVjdCBmb3IgdGhlIHNwZWNmaWMgdmFyaWFudFxuXHQgKiBAcGFyYW0gYVByb21pc2VzIGlzIGFuIGFycmF5IG9mIHByb21pc2VzXG5cdCAqIEBwYXJhbSBiRmlsdGVyVmFyaWFudEFwcGxpZWQgaXMgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIHdoaWNoIGlzIHNldCB0byB0dXJlIGluIGNhc2UgdGhlIGZpbHRlciB2YXJpYW50IGlzIGFwcGxpZWRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9maW5kQW5kUHVzaFZhcmlhbnRUb1Byb21pc2UoXG5cdFx0Ly9UaGlzIGZ1bmN0aW9uIGZpbmRzIHRoZSBzdWl0YWJsZSB2YXJpYW50IGZvciB0aGUgdmFyaWFudElEIHByb3ZpZGVkIGluIHRoZSB1cmwgYW5kIHB1c2hlcyB0aGVtIHRvIHRoZSBwcm9taXNlIGFycmF5XG5cdFx0b1ZhcmlhbnQ6IFZhcmlhbnRPYmplY3QsXG5cdFx0c1ZhcmlhbnRJZDogc3RyaW5nLFxuXHRcdG9WTTogVmFyaWFudE1hbmFnZW1lbnQsXG5cdFx0YVByb21pc2VzOiBQcm9taXNlPGJvb2xlYW4+W10sXG5cdFx0YkZpbHRlclZhcmlhbnRBcHBsaWVkPzogYm9vbGVhblxuXHQpOiB2b2lkIHtcblx0XHRpZiAob1ZhcmlhbnQua2V5ID09PSBzVmFyaWFudElkKSB7XG5cdFx0XHRhUHJvbWlzZXMucHVzaCh0aGlzLl9hcHBseUNvbnRyb2xWYXJpYW50KG9WTSwgc1ZhcmlhbnRJZCwgYkZpbHRlclZhcmlhbnRBcHBsaWVkKSk7XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgX2FwcGx5Q29udHJvbFZhcmlhbnQob1ZhcmlhbnQ6IFZhcmlhbnRNYW5hZ2VtZW50LCBzVmFyaWFudElEOiBzdHJpbmcsIGJGaWx0ZXJWYXJpYW50QXBwbGllZCA9IGZhbHNlKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0Y29uc3Qgc1ZhcmlhbnRSZWZlcmVuY2UgPSB0aGlzLl9jaGVja0lmVmFyaWFudElkSXNBdmFpbGFibGUob1ZhcmlhbnQsIHNWYXJpYW50SUQpID8gc1ZhcmlhbnRJRCA6IG9WYXJpYW50LmdldFN0YW5kYXJkVmFyaWFudEtleSgpO1xuXHRcdGNvbnN0IG9WTSA9IENvbnRyb2xWYXJpYW50QXBwbHlBUEkuYWN0aXZhdGVWYXJpYW50KHtcblx0XHRcdGVsZW1lbnQ6IG9WYXJpYW50LFxuXHRcdFx0dmFyaWFudFJlZmVyZW5jZTogc1ZhcmlhbnRSZWZlcmVuY2Vcblx0XHR9KTtcblx0XHRyZXR1cm4gb1ZNLnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIGJGaWx0ZXJWYXJpYW50QXBwbGllZDtcblx0XHR9KTtcblx0fVxuXG5cdF9jaGVja0lmVmFyaWFudElkSXNBdmFpbGFibGUob1ZNOiBWYXJpYW50TWFuYWdlbWVudCwgc1ZhcmlhbnRJZDogc3RyaW5nIHwgbnVsbCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGFWYXJpYW50cyA9IG9WTS5nZXRWYXJpYW50cygpO1xuXHRcdGxldCBiSXNDb250cm9sU3RhdGVWYXJpYW50QXZhaWxhYmxlID0gZmFsc2U7XG5cdFx0YVZhcmlhbnRzLmZvckVhY2goZnVuY3Rpb24gKG9WYXJpYW50KSB7XG5cdFx0XHRpZiAob1ZhcmlhbnQuZ2V0S2V5KCkgPT09IHNWYXJpYW50SWQpIHtcblx0XHRcdFx0YklzQ29udHJvbFN0YXRlVmFyaWFudEF2YWlsYWJsZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGJJc0NvbnRyb2xTdGF0ZVZhcmlhbnRBdmFpbGFibGU7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIEZpbHRlckJhciBjb250cm9sLlxuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRpZCE6IHN0cmluZztcblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgcmVsYXRpdmUgcGF0aCBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIG1ldGFtb2RlbCwgYmFzZWQgb24gdGhlIGN1cnJlbnQgY29udGV4dFBhdGguXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRleHBlY3RlZEFubm90YXRpb25zOiBbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25GaWVsZHNcIl0sXG5cdFx0ZXhwZWN0ZWRUeXBlczogW1wiRW50aXR5U2V0XCIsIFwiRW50aXR5VHlwZVwiXVxuXHR9KVxuXHRtZXRhUGF0aCE6IHN0cmluZztcblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgcGF0aCBvZiB0aGUgY29udGV4dCB1c2VkIGluIHRoZSBjdXJyZW50IHBhZ2Ugb3IgYmxvY2suXG5cdCAqIFRoaXMgc2V0dGluZyBpcyBkZWZpbmVkIGJ5IHRoZSBmcmFtZXdvcmsuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRleHBlY3RlZFR5cGVzOiBbXCJFbnRpdHlTZXRcIiwgXCJFbnRpdHlUeXBlXCIsIFwiTmF2aWdhdGlvblByb3BlcnR5XCJdXG5cdH0pXG5cdGNvbnRleHRQYXRoITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBJZiB0cnVlLCB0aGUgc2VhcmNoIGlzIHRyaWdnZXJlZCBhdXRvbWF0aWNhbGx5IHdoZW4gYSBmaWx0ZXIgdmFsdWUgaXMgY2hhbmdlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcblx0bGl2ZU1vZGU/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBQYXJhbWV0ZXIgd2hpY2ggc2V0cyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgRmlsdGVyQmFyIGJ1aWxkaW5nIGJsb2NrXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IHRydWUgfSlcblx0dmlzaWJsZT86IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIERpc3BsYXlzIHBvc3NpYmxlIGVycm9ycyBkdXJpbmcgdGhlIHNlYXJjaCBpbiBhIG1lc3NhZ2UgYm94XG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IHRydWUgfSlcblx0c2hvd01lc3NhZ2VzPzogYm9vbGVhbjtcblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgJ0NsZWFyJyBidXR0b24gb24gdGhlIEZpbHRlckJhci5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcblx0c2hvd0NsZWFyQnV0dG9uPzogYm9vbGVhbjtcblxuXHQvKipcblx0ICogQWdncmVnYXRlIGZpbHRlciBmaWVsZHMgb2YgdGhlIEZpbHRlckJhciBidWlsZGluZyBibG9ja1xuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC5mZS5tYWNyb3MuZmlsdGVyQmFyLkZpbHRlckZpZWxkXCIsIG11bHRpcGxlOiB0cnVlIH0pXG5cdGZpbHRlckZpZWxkcz86IEZpbHRlckZpZWxkW107XG5cblx0Y29udGVudCE6IEZpbHRlckJhcjtcblxuXHQvKipcblx0ICogVGhpcyBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSAnR28nIGJ1dHRvbiBpcyBwcmVzc2VkIG9yIGFmdGVyIGEgY29uZGl0aW9uIGNoYW5nZS5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QGV2ZW50KClcblx0c2VhcmNoITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIHdoZW4gdGhlICdHbycgYnV0dG9uIGlzIHByZXNzZWQgb3IgYWZ0ZXIgYSBjb25kaXRpb24gY2hhbmdlLiBUaGlzIGlzIG9ubHkgaW50ZXJuYWxseSB1c2VkIGJ5IHNhcC5mZSAoRmlvcmkgZWxlbWVudHMpIGFuZFxuXHQgKiBleHBvc2VzIHBhcmFtZXRlcnMgZnJvbSBpbnRlcm5hbCBNREMtRmlsdGVyQmFyIHNlYXJjaCBldmVudFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0QGV2ZW50KClcblx0aW50ZXJuYWxTZWFyY2ghOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgYWZ0ZXIgZWl0aGVyIGEgZmlsdGVyIHZhbHVlIG9yIHRoZSB2aXNpYmlsaXR5IG9mIGEgZmlsdGVyIGl0ZW0gaGFzIGJlZW4gY2hhbmdlZC4gVGhlIGV2ZW50IGNvbnRhaW5zIGNvbmRpdGlvbnMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycy5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QGV2ZW50KClcblx0ZmlsdGVyQ2hhbmdlZCE6IHN0cmluZztcblxuXHQvKipcblx0ICogVGhpcyBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSAnQ2xlYXInIGJ1dHRvbiBpcyBwcmVzc2VkLiBUaGlzIGlzIG9ubHkgcG9zc2libGUgd2hlbiB0aGUgJ0NsZWFyJyBidXR0b24gaXMgZW5hYmxlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QGV2ZW50KClcblx0YWZ0ZXJDbGVhciE6IHN0cmluZztcblxuXHQvKipcblx0ICogVGhpcyBldmVudCBpcyBmaXJlZCBhZnRlciBlaXRoZXIgYSBmaWx0ZXIgdmFsdWUgb3IgdGhlIHZpc2liaWxpdHkgb2YgYSBmaWx0ZXIgaXRlbSBoYXMgYmVlbiBjaGFuZ2VkLiBUaGUgZXZlbnQgY29udGFpbnMgY29uZGl0aW9ucyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzLlxuXHQgKiBUaGlzIGlzIHVzZWQgaW50ZXJuYWxseSBvbmx5IGJ5IHNhcC5mZSAoRmlvcmkgRWxlbWVudHMpLiBUaGlzIGV4cG9zZXMgcGFyYW1ldGVycyBmcm9tIHRoZSBNREMtRmlsdGVyQmFyIGZpbHRlckNoYW5nZWQgZXZlbnQgdGhhdCBpcyB1c2VkIGJ5IHNhcC5mZSBpbiBzb21lIGNhc2VzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0QGV2ZW50KClcblx0aW50ZXJuYWxGaWx0ZXJDaGFuZ2VkITogc3RyaW5nO1xuXG5cdHByaXZhdGUgdGVsZW1ldHJ5PzogRmlsdGVyQmFyVGVsZW1ldHJ5O1xuXG5cdGNvbnN0cnVjdG9yKHByb3BzPzogJENvbnRyb2xTZXR0aW5ncyAmIFByb3BlcnRpZXNPZjxGaWx0ZXJCYXJBUEk+LCBvdGhlcnM/OiAkQ29udHJvbFNldHRpbmdzKSB7XG5cdFx0c3VwZXIocHJvcHMsIG90aGVycyk7XG5cdFx0dGhpcy50ZWxlbWV0cnkgPSBuZXcgRmlsdGVyQmFyVGVsZW1ldHJ5KHRoaXMpO1xuXHRcdHRoaXMuYXR0YWNoU3RhdGVDaGFuZ2VIYW5kbGVyKCk7XG5cdH1cblxuXHRwcml2YXRlIGF0dGFjaFN0YXRlQ2hhbmdlSGFuZGxlcigpOiB2b2lkIHtcblx0XHRTdGF0ZVV0aWwuZGV0YWNoU3RhdGVDaGFuZ2UodGhpcy5zdGF0ZUNoYW5nZUhhbmRsZXIpO1xuXHRcdFN0YXRlVXRpbC5hdHRhY2hTdGF0ZUNoYW5nZSh0aGlzLnN0YXRlQ2hhbmdlSGFuZGxlcik7XG5cdH1cblxuXHRzdGF0ZUNoYW5nZUhhbmRsZXIob0V2ZW50OiBFdmVudDx7IGNvbnRyb2w6IENvbnRyb2wgfT4pOiB2b2lkIHtcblx0XHRjb25zdCBjb250cm9sID0gb0V2ZW50LmdldFBhcmFtZXRlcihcImNvbnRyb2xcIik7XG5cdFx0aWYgKGNvbnRyb2wuaXNBPEZpbHRlckJhcj4oXCJzYXAudWkubWRjLkZpbHRlckJhclwiKSkge1xuXHRcdFx0Y29uc3QgZmlsdGVyQmFyQVBJID0gY29udHJvbC5nZXRQYXJlbnQoKSBhcyB1bmtub3duIGFzIHsgaGFuZGxlU3RhdGVDaGFuZ2U/OiBGdW5jdGlvbiB9O1xuXHRcdFx0aWYgKGZpbHRlckJhckFQST8uaGFuZGxlU3RhdGVDaGFuZ2UpIHtcblx0XHRcdFx0ZmlsdGVyQmFyQVBJLmhhbmRsZVN0YXRlQ2hhbmdlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0QHhtbEV2ZW50SGFuZGxlcigpXG5cdGhhbmRsZVNlYXJjaChvRXZlbnQ6IEZpbHRlckJhckJhc2UkU2VhcmNoRXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCBvRmlsdGVyQmFyID0gb0V2ZW50LmdldFNvdXJjZSgpIGFzIEZpbHRlckJhciB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBldmVudFBhcmFtZXRlcnMgPSBvRXZlbnQuZ2V0UGFyYW1ldGVycygpO1xuXHRcdGlmIChvRmlsdGVyQmFyKSB7XG5cdFx0XHRjb25zdCBjb25kaXRpb25zID0gKG9GaWx0ZXJCYXIuZ2V0RmlsdGVyQ29uZGl0aW9ucygpID8/IHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCBDb25kaXRpb25PYmplY3RbXT47XG5cdFx0XHRjb25zdCBwcmVwYXJlZEV2ZW50UGFyYW1ldGVycyA9IHRoaXMuX3ByZXBhcmVFdmVudFBhcmFtZXRlcnMob0ZpbHRlckJhcik7XG5cdFx0XHR0aGlzLnRlbGVtZXRyeT8ub25TZWFyY2goZXZlbnRQYXJhbWV0ZXJzLCBjb25kaXRpb25zKTtcblx0XHRcdHRoaXMuZmlyZUV2ZW50KFwiaW50ZXJuYWxTZWFyY2hcIiwgbWVyZ2UoeyBjb25kaXRpb25zOiBjb25kaXRpb25zIH0sIGV2ZW50UGFyYW1ldGVycykpO1xuXHRcdFx0dGhpcy5maXJlRXZlbnQoXCJzZWFyY2hcIiwgbWVyZ2UoeyByZWFzb246IGV2ZW50UGFyYW1ldGVycy5yZWFzb24gfSwgcHJlcGFyZWRFdmVudFBhcmFtZXRlcnMpKTtcblx0XHR9XG5cdH1cblxuXHRAeG1sRXZlbnRIYW5kbGVyKClcblx0aGFuZGxlRmlsdGVyQ2hhbmdlZChvRXZlbnQ6IFVJNUV2ZW50KTogdm9pZCB7XG5cdFx0Y29uc3QgZmlsdGVyQmFyID0gb0V2ZW50LmdldFNvdXJjZSgpIGFzIEZpbHRlckJhciB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBvRXZlbnRQYXJhbWV0ZXJzID0gb0V2ZW50LmdldFBhcmFtZXRlcnMoKTtcblx0XHRpZiAoZmlsdGVyQmFyKSB7XG5cdFx0XHRjb25zdCBvQ29uZGl0aW9ucyA9IGZpbHRlckJhci5nZXRGaWx0ZXJDb25kaXRpb25zKCk7XG5cdFx0XHRjb25zdCBldmVudFBhcmFtZXRlcnM6IG9iamVjdCA9IHRoaXMuX3ByZXBhcmVFdmVudFBhcmFtZXRlcnMoZmlsdGVyQmFyKTtcblx0XHRcdHRoaXMudGVsZW1ldHJ5Py5vbkZpbHRlcnNDaGFuZ2VkKHRoaXMuX2dldEZpbHRlckJhclJlYXNvbihmaWx0ZXJCYXIpKTtcblx0XHRcdHRoaXMuZmlyZUV2ZW50KFwiaW50ZXJuYWxGaWx0ZXJDaGFuZ2VkXCIsIG1lcmdlKHsgY29uZGl0aW9uczogb0NvbmRpdGlvbnMgfSwgb0V2ZW50UGFyYW1ldGVycykpO1xuXHRcdFx0dGhpcy5maXJlRXZlbnQoXCJmaWx0ZXJDaGFuZ2VkXCIsIGV2ZW50UGFyYW1ldGVycyk7XG5cdFx0fVxuXHR9XG5cblx0X2dldEZpbHRlckJhclJlYXNvbihmaWx0ZXJCYXI6IEZpbHRlckJhciAmIHsgX3NSZWFzb24/OiBzdHJpbmcgfSk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGZpbHRlckJhcj8uX3NSZWFzb24gPz8gXCJcIjtcblx0fVxuXG5cdF9wcmVwYXJlRXZlbnRQYXJhbWV0ZXJzKG9GaWx0ZXJCYXI6IEZpbHRlckJhcik6IFBhcnRpYWw8SW50ZXJuYWxCaW5kaW5nSW5mbz4ge1xuXHRcdGNvbnN0IHsgcGFyYW1ldGVycywgZmlsdGVycywgc2VhcmNoIH0gPSBGaWx0ZXJVdGlscy5nZXRGaWx0ZXJzKG9GaWx0ZXJCYXIgYXMgdW5rbm93biBhcyBJRmlsdGVyQ29udHJvbCkgfHwge307XG5cblx0XHRyZXR1cm4geyBwYXJhbWV0ZXJzLCBmaWx0ZXJzLCBzZWFyY2ggfTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIGZpbHRlciB2YWx1ZXMgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eSBpbiB0aGUgZmlsdGVyIGJhci5cblx0ICogVGhlIGZpbHRlciB2YWx1ZXMgY2FuIGJlIGVpdGhlciBhIHNpbmdsZSB2YWx1ZSBvciBhbiBhcnJheSBvZiB2YWx1ZXMuXG5cdCAqIEVhY2ggZmlsdGVyIHZhbHVlIG11c3QgYmUgcmVwcmVzZW50ZWQgYXMgYSBwcmltaXRpdmUgdmFsdWUuXG5cdCAqIEBwYXJhbSBzQ29uZGl0aW9uUGF0aCBUaGUgcGF0aCB0byB0aGUgcHJvcGVydHkgYXMgYSBjb25kaXRpb24gcGF0aFxuXHQgKiBAcGFyYW0gW3NPcGVyYXRvcl0gVGhlIG9wZXJhdG9yIHRvIGJlIHVzZWQgKG9wdGlvbmFsKSAtIGlmIG5vdCBzZXQsIHRoZSBkZWZhdWx0IG9wZXJhdG9yIChFUSkgd2lsbCBiZSB1c2VkXG5cdCAqIEBwYXJhbSB2VmFsdWVzIFRoZSB2YWx1ZXMgdG8gYmUgYXBwbGllZFxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgZm9yIGFzeW5jaHJvbm91cyBoYW5kbGluZ1xuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhc3luYyBzZXRGaWx0ZXJWYWx1ZXMoXG5cdFx0c0NvbmRpdGlvblBhdGg6IHN0cmluZyxcblx0XHRzT3BlcmF0b3I6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHR2VmFsdWVzPzogdW5kZWZpbmVkIHwgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IHN0cmluZ1tdIHwgbnVtYmVyW10gfCBib29sZWFuW11cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuXHRcdFx0dlZhbHVlcyA9IHNPcGVyYXRvcjtcblx0XHRcdHJldHVybiBGaWx0ZXJVdGlscy5zZXRGaWx0ZXJWYWx1ZXModGhpcy5jb250ZW50LCBzQ29uZGl0aW9uUGF0aCwgdlZhbHVlcyk7XG5cdFx0fVxuXHRcdHJldHVybiBGaWx0ZXJVdGlscy5zZXRGaWx0ZXJWYWx1ZXModGhpcy5jb250ZW50LCBzQ29uZGl0aW9uUGF0aCwgc09wZXJhdG9yLCB2VmFsdWVzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIEFjdGl2ZSBGaWx0ZXJzIFRleHQgU3VtbWFyeSBmb3IgdGhlIGZpbHRlciBiYXIuXG5cdCAqIEByZXR1cm5zIEFjdGl2ZSBmaWx0ZXJzIHN1bW1hcnkgYXMgdGV4dFxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRnZXRBY3RpdmVGaWx0ZXJzVGV4dCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLmNvbnRlbnQ/LmdldEFzc2lnbmVkRmlsdGVyc1RleHQoKT8uZmlsdGVyc1RleHQgfHwgXCJcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBQcm92aWRlcyBhbGwgdGhlIGZpbHRlcnMgdGhhdCBhcmUgY3VycmVudGx5IGFjdGl2ZVxuXHQgKiBhbG9uZyB3aXRoIHRoZSBzZWFyY2ggZXhwcmVzc2lvbi5cblx0ICogQHJldHVybnMgQW4gYXJyYXkgb2YgYWN0aXZlIGZpbHRlcnMgYW5kIHRoZSBzZWFyY2ggZXhwcmVzc2lvbi5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0Z2V0RmlsdGVycygpOiBvYmplY3Qge1xuXHRcdHJldHVybiBGaWx0ZXJVdGlscy5nZXRGaWx0ZXJzKHRoaXMuY29udGVudCBhcyBJRmlsdGVyQ29udHJvbCkgfHwge307XG5cdH1cblxuXHQvKipcblx0ICogVHJpZ2dlcnMgdGhlIEFQSSBzZWFyY2ggb24gdGhlIGZpbHRlciBiYXIuXG5cdCAqIEByZXR1cm5zIFJldHVybnMgYSBwcm9taXNlIHdoaWNoIHJlc29sdmVzIGlmIGZpbHRlciBnbyBpcyB0cmlnZ2VyZWQgc3VjY2Vzc2Z1bGx5OyBvdGhlcndpc2UgZ2V0cyByZWplY3RlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgdHJpZ2dlclNlYXJjaCgpOiBQcm9taXNlPG9iamVjdCB8IHVuZGVmaW5lZD4ge1xuXHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuY29udGVudDtcblx0XHR0cnkge1xuXHRcdFx0aWYgKGZpbHRlckJhcikge1xuXHRcdFx0XHRhd2FpdCBmaWx0ZXJCYXIud2FpdEZvckluaXRpYWxpemF0aW9uKCk7XG5cdFx0XHRcdHJldHVybiBhd2FpdCBmaWx0ZXJCYXIudHJpZ2dlclNlYXJjaCgpO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcblx0XHRcdExvZy5lcnJvcihgRkUgOiBCdWlsZGluZ2Jsb2NrIDogRmlsdGVyQmFyIDogJHttZXNzYWdlfWApO1xuXHRcdFx0dGhyb3cgRXJyb3IobWVzc2FnZSk7XG5cdFx0fVxuXHR9XG5cblx0aXNTZW1hbnRpY0RhdGVGaWx0ZXJBcHBsaWVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBTZW1hbnRpY0RhdGVPcGVyYXRvcnMuaGFzU2VtYW50aWNEYXRlT3BlcmF0aW9ucyh0aGlzLmNvbnRlbnQuZ2V0Q29uZGl0aW9ucygpLCBmYWxzZSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBzZWxlY3Rpb24gdmFyaWFudCBmcm9tIHRoZSBmaWx0ZXIgYmFyLlxuXHQgKiBOb3RlOiBUaGlzIG1ldGhvZCByZXR1cm5zIGFsbCB0aGUgZmlsdGVyIHZhbHVlcyB0aGF0IGFyZSBzZXQgaW4gdGhlIGZpbHRlciBiYXIsIGluY2x1ZGluZyB0aGUgdGV4dCBmcm9tIHRoZSBzZWFyY2ggZmllbGQgKHdpdGggJHNlYXJjaCBhcyB0aGUgcHJvcGVydHkgbmFtZSkuIEhvd2V2ZXIsIGl0IGRvZXNuJ3QgcmV0dXJuIGFueSBmaWx0ZXIgZmllbGQgY29uZGl0aW9uIHRoYXQgdXNlcyBhIGN1c3RvbSBvcGVyYXRvci5cblx0ICogQHJldHVybnMgQSBwcm9taXNlIHdoaWNoIHJlc29sdmVzIHdpdGggYSB7QGxpbmsgc2FwLmZlLm5hdmlnYXRpb24uU2VsZWN0aW9uVmFyaWFudH1cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgZ2V0U2VsZWN0aW9uVmFyaWFudCgpOiBQcm9taXNlPFNlbGVjdGlvblZhcmlhbnQ+IHtcblx0XHRjb25zdCBzZWxlY3Rpb25WYXJpYW50ID0gYXdhaXQgc3RhdGVIZWxwZXIuZ2V0U2VsZWN0aW9uVmFyaWFudCh0aGlzLmdldENvbnRlbnQoKSk7XG5cdFx0Y29uc3QgY29udHJvbGxlciA9IHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcjtcblx0XHRpZiAoY29udHJvbGxlciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCB2aWV3ID0gY29udHJvbGxlcj8uZ2V0VmlldygpLFxuXHRcdFx0XHRhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodmlldyksXG5cdFx0XHRcdG5hdmlnYXRpb25TZXJ2aWNlID0gYXBwQ29tcG9uZW50Py5nZXROYXZpZ2F0aW9uU2VydmljZSgpLFxuXHRcdFx0XHRkYXRhTW9kZWxPYmplY3QgPSB0aGlzLmdldERhdGFNb2RlbE9iamVjdEZvck1ldGFQYXRoKHRoaXMubWV0YVBhdGgpO1xuXHRcdFx0aWYgKGRhdGFNb2RlbE9iamVjdD8udGFyZ2V0RW50aXR5U2V0Py5uYW1lKSB7XG5cdFx0XHRcdGNvbnN0IHNDb250ZXh0VXJsID1cblx0XHRcdFx0XHRkYXRhTW9kZWxPYmplY3Q/LnRhcmdldEVudGl0eVNldD8ubmFtZSAmJlxuXHRcdFx0XHRcdG5hdmlnYXRpb25TZXJ2aWNlPy5jb25zdHJ1Y3RDb250ZXh0VXJsKGRhdGFNb2RlbE9iamVjdD8udGFyZ2V0RW50aXR5U2V0Py5uYW1lLCB2aWV3LmdldE1vZGVsKCkpO1xuXHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50LnNldEZpbHRlckNvbnRleHRVcmwoc0NvbnRleHRVcmwpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gc2VsZWN0aW9uVmFyaWFudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGxpc3Qgb2YgbWFuZGF0b3J5IGZpbHRlciBwcm9wZXJ0eSBuYW1lcy5cblx0ICogQHJldHVybnMgVGhlIGxpc3Qgb2YgbWFuZGF0b3J5IGZpbHRlciBwcm9wZXJ0eSBuYW1lc1xuXHQgKi9cblx0Z2V0TWFuZGF0b3J5RmlsdGVyUHJvcGVydHlOYW1lcygpOiBzdHJpbmdbXSB7XG5cdFx0cmV0dXJuICh0aGlzLmNvbnRlbnQuZ2V0UHJvcGVydHlJbmZvU2V0KCkgYXMgQ29udHJvbFByb3BlcnR5SW5mb1tdKVxuXHRcdFx0LmZpbHRlcihmdW5jdGlvbiAoZmlsdGVyUHJvcCkge1xuXHRcdFx0XHRyZXR1cm4gZmlsdGVyUHJvcC5yZXF1aXJlZDtcblx0XHRcdH0pXG5cdFx0XHQubWFwKGZ1bmN0aW9uIChyZXF1aXJlZFByb3ApIHtcblx0XHRcdFx0cmV0dXJuIHJlcXVpcmVkUHJvcC5jb25kaXRpb25QYXRoO1xuXHRcdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBmaWx0ZXIgYmFyIHBhcmFtZXRlcnMgZm9yIGEgcGFyYW1ldGVyaXplZCBzZXJ2aWNlLlxuXHQgKiBAcmV0dXJucyBBcnJheSBvZiBwYXJhbWV0ZXJzIGNvbmZpZ3VyZWQgaW4gYSBwYXJhbWV0ZXJpemVkIHNlcnZpY2Vcblx0ICovXG5cblx0Z2V0UGFyYW1ldGVycygpOiBzdHJpbmdbXSB7XG5cdFx0Y29uc3QgZmlsdGVyQmFyID0gdGhpcy5jb250ZW50O1xuXHRcdGNvbnN0IHBhcmFtZXRlcnMgPSBmaWx0ZXJCYXIuZGF0YShcInBhcmFtZXRlcnNcIik7XG5cdFx0aWYgKHBhcmFtZXRlcnMpIHtcblx0XHRcdHJldHVybiBBcnJheS5pc0FycmF5KHBhcmFtZXRlcnMpID8gcGFyYW1ldGVycyA6IEpTT04ucGFyc2UocGFyYW1ldGVycyk7XG5cdFx0fVxuXHRcdHJldHVybiBbXTtcblx0fVxuXG5cdGdldFZhcmlhbnQoKTogVmFyaWFudERhdGEgfCB1bmRlZmluZWQge1xuXHRcdGxldCBjdXJyZW50VmFyaWFudDtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgdmFyaWFudE1vZGVsID0gdGhpcy5nZXRNb2RlbChcIiRGbGV4VmFyaWFudHNcIikgYXMgVmFyaWFudE1vZGVsIHwgdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgdmFyaWFudEJhY2tSZWZlcmVuY2UgPSB0aGlzLmNvbnRlbnQuZ2V0VmFyaWFudEJhY2tyZWZlcmVuY2UoKTtcblxuXHRcdFx0aWYgKHZhcmlhbnRNb2RlbCAmJiB2YXJpYW50QmFja1JlZmVyZW5jZSkge1xuXHRcdFx0XHRjdXJyZW50VmFyaWFudCA9IHZhcmlhbnRNb2RlbC5nZXRWYXJpYW50KHZhcmlhbnRNb2RlbC5nZXRDdXJyZW50VmFyaWFudFJlZmVyZW5jZSh2YXJpYW50QmFja1JlZmVyZW5jZSkpO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdExvZy5kZWJ1ZyhcIkNvdWxkbid0IGZldGNoIHZhcmlhbnQgXCIsIGUgYXMgc3RyaW5nKTtcblx0XHR9XG5cdFx0cmV0dXJuIGN1cnJlbnRWYXJpYW50O1xuXHR9XG5cblx0LyoqXG5cdCAqIFNob3dzIG9yIGhpZGVzIGFueSBmaWx0ZXIgZmllbGQgZnJvbSB0aGUgZmlsdGVyIGJhci5cblx0ICogVGhlIHByb3BlcnR5IHdpbGwgbm90IGJlIGhpZGRlbiBpbnNpZGUgdGhlIGFkYXB0YXRpb24gZGlhbG9nIGFuZCBtYXkgYmUgcmUtYWRkZWQuXG5cdCAqIEBwYXJhbSBjb25kaXRpb25QYXRoIFRoZSBwYXRoIHRvIHRoZSBwcm9wZXJ0eSBhcyBhIGNvbmRpdGlvbiBwYXRoXG5cdCAqIEBwYXJhbSB2aXNpYmxlIFdoZXRoZXIgaXQgc2hvdWxkIGJlIHNob3duIG9yIGhpZGRlblxuXHQgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSByZXNvbHZpbmcgb25jZSB0aGUgY2hhbmdlIGluIHZpc2liaWxpdHkgd2FzIGFwcGxpZWRcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgc2V0RmlsdGVyRmllbGRWaXNpYmxlKGNvbmRpdGlvblBhdGg6IHN0cmluZywgdmlzaWJsZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGF3YWl0IFN0YXRlVXRpbC5hcHBseUV4dGVybmFsU3RhdGUodGhpcy5jb250ZW50LCB7IGl0ZW1zOiBbeyBuYW1lOiBjb25kaXRpb25QYXRoLCB2aXNpYmxlIH1dIH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHZpc2liaWxpdHkgb2YgYSBmaWx0ZXIgZmllbGQuXG5cdCAqIEBwYXJhbSBjb25kaXRpb25QYXRoIFRoZSBwYXRoIHRvIHRoZSBwcm9wZXJ0eSBhcyBhIGNvbmRpdGlvbiBwYXRoXG5cdCAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gY2hlY2sgd2hldGhlciB0aGUgZmlsdGVyIGZpZWxkIGlzIHZpc2libGUgb3Igbm90LlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhc3luYyBnZXRGaWx0ZXJGaWVsZFZpc2libGUoY29uZGl0aW9uUGF0aDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0Y29uc3Qgc3RhdGU6IEV4dGVybmFsU3RhdGVUeXBlID0gYXdhaXQgU3RhdGVVdGlsLnJldHJpZXZlRXh0ZXJuYWxTdGF0ZSh0aGlzLmNvbnRlbnQpO1xuXHRcdHJldHVybiAhIXN0YXRlLml0ZW1zLmZpbmQoKGl0ZW0pID0+IGl0ZW0ubmFtZSA9PT0gY29uZGl0aW9uUGF0aCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgYXNzb2NpYXRlZCB2YXJpYW50IG1hbmFnZW1lbnQuXG5cdCAqIEByZXR1cm5zIFRoZSB7QGxpbmsgc2FwLnVpLmZsLnZhcmlhbnRzLlZhcmlhbnRNYW5hZ2VtZW50fSBjb250cm9sIGFzc29jaWF0ZWQgd2l0aCB0aGUgZmlsdGVyIGJhci5cblx0ICovXG5cdGdldFZhcmlhbnRNYW5hZ2VtZW50KCk6IFZhcmlhbnRNYW5hZ2VtZW50IHtcblx0XHRjb25zdCB2YXJpYW50QmFja3JlZmVyZW5jZSA9IHRoaXMuY29udGVudC5nZXRWYXJpYW50QmFja3JlZmVyZW5jZSgpO1xuXHRcdGlmICh2YXJpYW50QmFja3JlZmVyZW5jZSkge1xuXHRcdFx0cmV0dXJuIFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQodmFyaWFudEJhY2tyZWZlcmVuY2UpIGFzIFZhcmlhbnRNYW5hZ2VtZW50O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYFZhcmlhbnQgYmFjayByZWZlcmVuY2Ugbm90IGRlZmluZWQgb24gdGhlIGZpbHRlciBiYXIgJHt0aGlzLmlkfWApO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSB2YXJpYW50IGJhY2sgcmVmZXJlbmNlIGFzc29jaWF0aW9uIGZvciB0aGlzIGluc3RhbmNlLlxuXHQgKiBAcGFyYW0gdmFyaWFudCBUaGUgYFZhcmlhbnRNYW5hZ2VtZW50YCBpbnN0YW5jZSB0byBzZXQgYXMgdGhlIGJhY2sgcmVmZXJlbmNlLlxuXHQgKi9cblx0c2V0VmFyaWFudEJhY2tSZWZlcmVuY2UodmFyaWFudDogVmFyaWFudE1hbmFnZW1lbnQpOiB2b2lkIHtcblx0XHRjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCkgYXMgRmlsdGVyQmFyO1xuXHRcdGNvbnN0IGlzTGl2ZU1vZGUgPSBjb250ZW50Py5nZXRMaXZlTW9kZT8uKCk7XG5cdFx0aWYgKCFpc0xpdmVNb2RlKSB7XG5cdFx0XHR0aGlzLmNvbnRlbnQuc2V0VmFyaWFudEJhY2tyZWZlcmVuY2UodmFyaWFudCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGtleSBvZiB0aGUgY3VycmVudCB2YXJpYW50IGluIHRoZSBhc3NvY2lhdGVkIHZhcmlhbnQgbWFuYWdlbWVudC5cblx0ICogQHJldHVybnMgS2V5IG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgdmFyaWFudC4gSW4gY2FzZSB0aGUgbW9kZWwgaXMgbm90IHlldCBzZXQsIGBudWxsYCB3aWxsIGJlIHJldHVybmVkLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRnZXRDdXJyZW50VmFyaWFudEtleSgpOiBzdHJpbmcgfCBudWxsIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWYXJpYW50TWFuYWdlbWVudCgpLmdldEN1cnJlbnRWYXJpYW50S2V5KCk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgbmV3IHNlbGVjdGVkIHZhcmlhbnQgaW4gdGhlIGFzc29jaWF0ZWQgdmFyaWFudCBtYW5hZ2VtZW50LlxuXHQgKiBAcGFyYW0ga2V5IEtleSBvZiB0aGUgdmFyaWFudCB0aGF0IHNob3VsZCBiZSBzZWxlY3RlZC4gSWYgdGhlIHBhc3NlZCBrZXkgZG9lc24ndCBpZGVudGlmeSBhIHZhcmlhbnQsIGl0IHdpbGwgYmUgaWdub3JlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0c2V0Q3VycmVudFZhcmlhbnRLZXkoa2V5OiBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zdCB2YXJpYW50TWFuYWdlbWVudCA9IHRoaXMuZ2V0VmFyaWFudE1hbmFnZW1lbnQoKTtcblx0XHR2YXJpYW50TWFuYWdlbWVudC5zZXRDdXJyZW50VmFyaWFudEtleShrZXkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGVuYWJsZW1lbnQgb2YgdGhlIGZpZWxkLlxuXHQgKiBAcGFyYW0gbmFtZSBOYW1lIG9mIHRoZSBmaWVsZCB0aGF0IHNob3VsZCBiZSBlbmFibGVkIG9yIGRpc2FibGVkLlxuXHQgKiBAcGFyYW0gZW5hYmxlZCBXaGV0aGVyIHRoZSBmaWVsZCBzaG91bGQgYmUgZW5hYmxlZCBvciBkaXNhYmxlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0c2V0RmlsdGVyRmllbGRFbmFibGVkKG5hbWU6IHN0cmluZywgZW5hYmxlZDogYm9vbGVhbik6IHZvaWQge1xuXHRcdCh0aGlzLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsKS5zZXREYXRhKFxuXHRcdFx0e1xuXHRcdFx0XHRbdGhpcy5jb250ZW50LmRhdGEoXCJsb2NhbElkXCIpXToge1xuXHRcdFx0XHRcdGZpbHRlckZpZWxkczogeyBbbmFtZV06IHsgZWRpdE1vZGU6IGVuYWJsZWQgPyBGaWVsZEVkaXRNb2RlLkVkaXRhYmxlIDogRmllbGRFZGl0TW9kZS5EaXNhYmxlZCB9IH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHRydWVcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgd2hldGhlciB0aGUgZmllbGQgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC5cblx0ICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgZmllbGQuXG5cdCAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGZpbHRlckZpZWxkIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGdldEZpbHRlckZpZWxkRW5hYmxlZChuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gKHRoaXMuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWwpLmdldFByb3BlcnR5KGAvJHt0aGlzLmNvbnRlbnQuZGF0YShcImxvY2FsSWRcIil9L2ZpbHRlckZpZWxkcy8ke25hbWV9L2VkaXRNb2RlYCkgPT09XG5cdFx0XHRGaWVsZEVkaXRNb2RlLkRpc2FibGVkXG5cdFx0XHQ/IGZhbHNlXG5cdFx0XHQ6IHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydCB7QGxpbmsgc2FwLmZlLm5hdmlnYXRpb24uU2VsZWN0aW9uVmFyaWFudH0gdG8gY29uZGl0aW9ucy5cblx0ICogQHBhcmFtIHNlbGVjdGlvblZhcmlhbnQgVGhlIHNlbGVjdGlvbiB2YXJpYW50IHRvIGFwcGx5IHRvIHRoZSBmaWx0ZXIgYmFyLlxuXHQgKiBAcGFyYW0gcHJlZmlsbERlc2NyaXB0aW9ucyBJZiB0cnVlLCB3ZSB0cnkgdG8gZmluZCB0aGUgYXNzb2NpYXRlZCBUZXh0IHZhbHVlIGZvciBlYWNoIHByb3BlcnR5IGluIHRoZSBzZWxlY3Rpb25WYXJpYW50ICh0byBhdm9pZCBmZXRjaGluZyBpdCBmcm9tIHRoZSBzZXJ2ZXIpXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSByZXNvbHZpbmcgdG8gY29uZGl0aW9uc1xuXHQgKi9cblx0YXN5bmMgY29udmVydFNlbGVjdGlvblZhcmlhbnRUb1N0YXRlRmlsdGVycyhcblx0XHRzZWxlY3Rpb25WYXJpYW50OiBTZWxlY3Rpb25WYXJpYW50LFxuXHRcdHByZWZpbGxEZXNjcmlwdGlvbnM6IGJvb2xlYW5cblx0KTogUHJvbWlzZTxTdGF0ZVV0aWxGaWx0ZXI+IHtcblx0XHRyZXR1cm4gc3RhdGVIZWxwZXIuY29udmVydFNlbGVjdGlvblZhcmlhbnRUb1N0YXRlRmlsdGVycyhcblx0XHRcdHRoaXMuY29udGVudCxcblx0XHRcdHNlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRwcmVmaWxsRGVzY3JpcHRpb25zLFxuXHRcdFx0dGhpcy5jb250ZW50Py5nZXRNb2RlbCgpXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbGVhcnMgYWxsIGlucHV0IHZhbHVlcyBvZiB2aXNpYmxlIGZpbHRlciBmaWVsZHMgaW4gdGhlIGZpbHRlciBiYXIgd2l0aCBmbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgdG8gY2xlYXIgRWRpdCBGaWx0ZXIgb3Igbm90LlxuXHQgKiBAcGFyYW0gZmlsdGVyQmFyIFRoZSBmaWx0ZXIgYmFyIHRoYXQgY29udGFpbnMgdGhlIGZpbHRlciBmaWVsZFxuXHQgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciBmaWx0ZXJpbmcgb24gdGhlIGZpbHRlciBiYXJcblx0ICogQHBhcmFtIG9wdGlvbnMuY2xlYXJFZGl0RmlsdGVyIFdoZXRoZXIgdG8gY2xlYXIgdGhlIGVkaXQgZmlsdGVyIG9yIGxldCBpdCBiZSBkZWZhdWx0IHZhbHVlICdBbGwnIGluc3RlYWRcblx0ICovXG5cdGFzeW5jIF9jbGVhckZpbHRlclZhbHVlc1dpdGhPcHRpb25zKGZpbHRlckJhcjogRmlsdGVyQmFyLCBvcHRpb25zPzogeyBjbGVhckVkaXRGaWx0ZXI6IGJvb2xlYW4gfSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGF3YWl0IHN0YXRlSGVscGVyLl9jbGVhckZpbHRlclZhbHVlc1dpdGhPcHRpb25zKGZpbHRlckJhciwgb3B0aW9ucyk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB7QGxpbmsgc2FwLmZlLm5hdmlnYXRpb24uU2VsZWN0aW9uVmFyaWFudH0gdG8gdGhlIGZpbHRlciBiYXIuIE5vdGU6IHNldFNlbGVjdGlvblZhcmlhbnQgd2lsbCBjbGVhciBleGlzdGluZyBmaWx0ZXJzIGFuZCB0aGVuIGFwcGx5IHRoZSBTZWxlY3Rpb25WYXJpYW50IHZhbHVlcy5cblx0ICogTm90ZTogVGhpcyBtZXRob2QgY2Fubm90IHNldCB0aGUgc2VhcmNoIGZpZWxkIHRleHQgb3IgYW55IGZpbHRlciBmaWVsZCBjb25kaXRpb24gdGhhdCByZWxpZXMgb24gYSBjdXN0b20gb3BlcmF0b3IuXG5cdCAqIEBwYXJhbSBzZWxlY3Rpb25WYXJpYW50IFRoZSB7QGxpbmsgc2FwLmZlLm5hdmlnYXRpb24uU2VsZWN0aW9uVmFyaWFudH0gdG8gYXBwbHkgdG8gdGhlIGZpbHRlciBiYXJcblx0ICogQHBhcmFtIHByZWZpbGxEZXNjcmlwdGlvbnMgT3B0aW9uYWwuIElmIHRydWUsIHdlIHdpbGwgdXNlIHRoZSBhc3NvY2lhdGVkIHRleHQgcHJvcGVydHkgdmFsdWVzIChpZiB0aGV5J3JlIGF2YWlsYWJsZSBpbiB0aGUgc2VsZWN0aW9uVmFyaWFudCkgdG8gZGlzcGxheSB0aGUgZmlsdGVyIHZhbHVlIGRlc2NyaXB0aW9ucywgaW5zdGVhZCBvZiBsb2FkaW5nIHRoZW0gZnJvbSB0aGUgYmFja2VuZFxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgZm9yIGFzeW5jaHJvbm91cyBoYW5kbGluZ1xuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhc3luYyBzZXRTZWxlY3Rpb25WYXJpYW50KHNlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQsIHByZWZpbGxEZXNjcmlwdGlvbnMgPSBmYWxzZSk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSBhcyBGaWx0ZXJCYXIgfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgaXNMaXZlTW9kZSA9IGNvbnRlbnQgJiYgY29udGVudD8uZ2V0TGl2ZU1vZGU/LigpO1xuXHRcdGxldCByZXN1bHQ6IHsgZGlmZlN0YXRlOiBFeHRlcm5hbFN0YXRlVHlwZTsgYXBwbHlTdGF0ZVJlc3VsdDogdW5rbm93biB9IHwgdW5kZWZpbmVkO1xuXHRcdGlmIChpc0xpdmVNb2RlKSB7XG5cdFx0XHRjb250ZW50LmVuYWJsZVJlcXVlc3RzKGZhbHNlKTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJlc3VsdCA9IGF3YWl0IHN0YXRlSGVscGVyLnNldFNlbGVjdGlvblZhcmlhbnRUb01kY0NvbnRyb2wodGhpcy5nZXRDb250ZW50KCksIHNlbGVjdGlvblZhcmlhbnQsIHByZWZpbGxEZXNjcmlwdGlvbnMpO1xuXHRcdFx0cmV0dXJuIHJlc3VsdD8uYXBwbHlTdGF0ZVJlc3VsdDtcblx0XHR9IGNhdGNoIChlcnI6IHVua25vd24pIHtcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG5cdFx0XHRMb2cuZXJyb3IoYEZFIDogQnVpbGRpbmdibG9jayA6IEZpbHRlckJhciA6ICR7bWVzc2FnZX1gKTtcblx0XHRcdHRocm93IEVycm9yKG1lc3NhZ2UpO1xuXHRcdH0gZmluYWxseSB7XG5cdFx0XHRpZiAoaXNMaXZlTW9kZSkge1xuXHRcdFx0XHRjb250ZW50LmVuYWJsZVJlcXVlc3RzKHRydWUsIHJlc3VsdD8uZGlmZlN0YXRlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2FsbGVkIGJ5IHRoZSBNREMgc3RhdGUgdXRpbCB3aGVuIHRoZSBzdGF0ZSBmb3IgdGhpcyBjb250cm9sJ3MgY2hpbGQgaGFzIGNoYW5nZWQuXG5cdCAqL1xuXHRoYW5kbGVTdGF0ZUNoYW5nZSgpOiB2b2lkIHtcblx0XHR0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk/LmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdH1cblxuXHRwcml2YXRlIGdldENvbmRpdGlvblBhdGgocHJvcGVydHlQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHByb3BlcnR5VGFyZ2V0T2JqZWN0UGF0aCA9IEZpbHRlclV0aWxzLmdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JQcm9wZXJ0eSh0aGlzLmNvbnRlbnQsIHByb3BlcnR5UGF0aCk7XG5cdFx0cmV0dXJuIChcblx0XHRcdChwcm9wZXJ0eVRhcmdldE9iamVjdFBhdGggPyBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKHByb3BlcnR5VGFyZ2V0T2JqZWN0UGF0aCwgZmFsc2UsIHRydWUpIDogdW5kZWZpbmVkKSA/P1xuXHRcdFx0cHJvcGVydHlQYXRoXG5cdFx0KTtcblx0fVxuXG5cdGFzeW5jIHNob3dGaWx0ZXJGaWVsZChuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzdGF0ZTogRXh0ZXJuYWxTdGF0ZVR5cGUgPSBhd2FpdCBTdGF0ZVV0aWwucmV0cmlldmVFeHRlcm5hbFN0YXRlKHRoaXMuY29udGVudCk7XG5cdFx0Y29uc3QgY29uZGl0aW9uUGF0aCA9IHRoaXMuZ2V0Q29uZGl0aW9uUGF0aChuYW1lKTtcblx0XHRjb25zdCB0YXJnZXRGaWx0ZXJGaWVsZCA9ICEhc3RhdGUuaXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS5uYW1lID09PSBjb25kaXRpb25QYXRoKTtcblx0XHRpZiAoIXRhcmdldEZpbHRlckZpZWxkKSB7XG5cdFx0XHRzdGF0ZS5pdGVtcy5wdXNoKHsgbmFtZTogY29uZGl0aW9uUGF0aCB9KTtcblx0XHR9XG5cdFx0YXdhaXQgU3RhdGVVdGlsLmFwcGx5RXh0ZXJuYWxTdGF0ZSh0aGlzLmNvbnRlbnQsIHN0YXRlKTtcblx0fVxuXG5cdGFzeW5jIG9wZW5WYWx1ZUhlbHBGb3JGaWx0ZXJGaWVsZChuYW1lOiBzdHJpbmcsIGlucHV0VmFsdWU/OiBzdHJpbmcpOiBQcm9taXNlPENvbmRpdGlvbk9iamVjdFtdPiB7XG5cdFx0Y29uc3QgY29uZGl0aW9uUGF0aCA9IHRoaXMuZ2V0Q29uZGl0aW9uUGF0aChuYW1lKTtcblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCBmaWx0ZXJGaWVsZCA9IHRoaXMuY29udGVudC5nZXRGaWx0ZXJJdGVtcygpLmZpbmQoKGl0ZW0pID0+IGl0ZW0uZ2V0UHJvcGVydHlLZXkoKSA9PT0gY29uZGl0aW9uUGF0aCk7XG5cdFx0XHRjb25zdCB2YWx1ZUhlbHAgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKGZpbHRlckZpZWxkPy5nZXRWYWx1ZUhlbHAoKSkgYXMgVmFsdWVIZWxwIHwgdW5kZWZpbmVkO1xuXHRcdFx0aWYgKCF2YWx1ZUhlbHAgfHwgIWZpbHRlckZpZWxkKSB7XG5cdFx0XHRcdHJlamVjdChuZXcgRXJyb3IoYFZhbHVlSGVscCBmb3IgZmlsdGVyIGZpZWxkICR7bmFtZX0gbm90IGZvdW5kYCkpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHZhbHVlSGVscC5hdHRhY2hFdmVudE9uY2UoXCJjbG9zZWRcIiwgKCkgPT4ge1xuXHRcdFx0XHRyZXNvbHZlKHZhbHVlSGVscC5nZXRDb25kaXRpb25zKCkgYXMgQ29uZGl0aW9uT2JqZWN0W10pO1xuXHRcdFx0fSk7XG5cblx0XHRcdChmaWx0ZXJGaWVsZCBhcyB1bmtub3duIGFzIHsgX29Gb2N1c0luZm86IG9iamVjdCB9KS5fb0ZvY3VzSW5mbyA9IHsgdGFyZ2V0SW5mbzogeyBzaWxlbnQ6IHRydWUgfSB9O1xuXHRcdFx0KGZpbHRlckZpZWxkIGFzIHVua25vd24gYXMgeyBvbmZvY3VzaW4/OiBGdW5jdGlvbiB9KS5vbmZvY3VzaW4/LihuZXcgalF1ZXJ5LkV2ZW50KFwiZm9jdXNpblwiKSk7XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0KGZpbHRlckZpZWxkLmdldEFnZ3JlZ2F0aW9uKFwiX2NvbnRlbnRcIikgYXMgSW5wdXRbXSlbMF0uZmlyZVZhbHVlSGVscFJlcXVlc3Qoe1xuXHRcdFx0XHRcdGZyb21LZXlib2FyZDogdHJ1ZSxcblx0XHRcdFx0XHRfdXNlcklucHV0VmFsdWU6IGlucHV0VmFsdWVcblx0XHRcdFx0fSBhcyB1bmtub3duIGFzIElucHV0JFZhbHVlSGVscFJlcXVlc3RFdmVudFBhcmFtZXRlcnMpO1xuXHRcdFx0fSwgMjAwKTtcblx0XHR9KTtcblx0fVxuXG5cdGdldENvbGxhcHNlZEZpbHRlcnNUZXh0KCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuY29udGVudD8uZ2V0QXNzaWduZWRGaWx0ZXJzVGV4dCgpPy5maWx0ZXJzVGV4dDtcblx0fVxufVxuZXhwb3J0IGRlZmF1bHQgRmlsdGVyQmFyQVBJO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQStDQTtFQUFBLElBQ01BLGtCQUFrQjtJQUt2QixTQUFBQSxtQkFBNkJDLFlBQTBCLEVBQUU7TUFBQSxLQUpqREMsa0JBQWtCLEdBQUcsQ0FBQztNQUFBLEtBRXRCQyxtQkFBbUIsR0FBRyxDQUFDO01BQUEsS0FFRkYsWUFBMEIsR0FBMUJBLFlBQTBC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
|
|
1039
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWx0ZXJCYXJUZWxlbWV0cnkiLCJmaWx0ZXJCYXJBUEkiLCJjb3VudEZpbHRlckFjdGlvbnMiLCJjb3VudFZhcmlhbnRGaWx0ZXJzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwib25GaWx0ZXJzQ2hhbmdlZCIsInJlYXNvbiIsIm9uU2VhcmNoIiwiZXZlbnRQYXJhbWV0ZXJzIiwiY29uZGl0aW9ucyIsImZpbHRlck5hbWVzIiwiZ2V0RmlsdGVyTmFtZXNGcm9tQ29uZGl0aW9ucyIsImdldFBhZ2VDb250cm9sbGVyIiwidGVsZW1ldHJ5Iiwic3RvcmVBY3Rpb24iLCJ0eXBlIiwicGFyYW1ldGVycyIsImNvdW50RmlsdGVycyIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJ2YXJpYW50TGF5ZXIiLCJnZXRWYXJpYW50IiwibGF5ZXIiLCJhdXRvTG9hZCIsInNlYXJjaFVzZWQiLCIkc2VhcmNoIiwiZm9yRWFjaCIsImNvbmRpdGlvbiIsIlZhcmlhbnRNYW5hZ2VtZW50VHlwZSIsIkRJU1BMQVlfQ1VSUkVOQ1lfUFJPUEVSVFlfTkFNRSIsIlBfRElTUExBWV9DVVJSRU5DWV9QUk9QRVJUWV9OQU1FIiwiRmlsdGVyQmFyQVBJIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwicmV0dXJuVHlwZXMiLCJfZGVjMiIsIm1peGluIiwiRmlsdGVyQmFyQVBJU3RhdGVIYW5kbGVyIiwiX2RlYzMiLCJjb250cm9sbGVyRXh0ZW5zaW9uSGFuZGxlciIsIl9kZWM0IiwiX2RlYzUiLCJwcm9wZXJ0eSIsIl9kZWM2IiwiZXhwZWN0ZWRBbm5vdGF0aW9ucyIsImV4cGVjdGVkVHlwZXMiLCJfZGVjNyIsIl9kZWM4IiwiZGVmYXVsdFZhbHVlIiwiX2RlYzkiLCJfZGVjMTAiLCJfZGVjMTEiLCJfZGVjMTIiLCJhZ2dyZWdhdGlvbiIsIm11bHRpcGxlIiwiX2RlYzEzIiwiZXZlbnQiLCJfZGVjMTQiLCJfZGVjMTUiLCJfZGVjMTYiLCJfZGVjMTciLCJfZGVjMTgiLCJ4bWxFdmVudEhhbmRsZXIiLCJfZGVjMTkiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX01hY3JvQVBJIiwicHJvcHMiLCJvdGhlcnMiLCJfdGhpcyIsImNhbGwiLCJpbml0aWFsQ29udHJvbFN0YXRlIiwiX2luaXRpYWxTdGF0ZVByb21pc2UiLCJQcm9taXNlS2VlcGVyIiwiX2JTZWFyY2hUcmlnZ2VyZWQiLCJfaGFzUGVuZGluZ0ZpbHRlcnMiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiX2Rlc2NyaXB0b3I3IiwiX2Rlc2NyaXB0b3I4IiwiX2Rlc2NyaXB0b3I5IiwiX2Rlc2NyaXB0b3IxMCIsIl9kZXNjcmlwdG9yMTEiLCJfZGVzY3JpcHRvcjEyIiwiX2Rlc2NyaXB0b3IxMyIsImF0dGFjaFN0YXRlQ2hhbmdlSGFuZGxlciIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvMiIsInJldHJpZXZlQWRkaXRpb25hbFN0YXRlcyIsImFkZGl0aW9uYWxTdGF0ZXMiLCJnZXRJZCIsImRhdGFMb2FkZWQiLCJhcHBseUFkZGl0aW9uYWxTdGF0ZXMiLCJpbnN0YW5jZVN0YXRlIiwiaW5zdGFuY2VEYXRhTG9hZGVkIiwidW5kZWZpbmVkIiwicGFyZW50RGF0YUxvYWRlZCIsInRyaWdnZXJTZWFyY2giLCJjb250ZW50Iiwid2FpdEZvckluaXRpYWxTdGF0ZSIsInByb21pc2UiLCJnZXRDb250cm9sU3RhdGUiLCJjb250cm9sU3RhdGUiLCJmdWxsU3RhdGUiLCJpbml0aWFsU3RhdGUiLCJpc1NlYXJjaFRyaWdnZXJlZEJ5SW5pdGlhbExvYWQiLCJuYXZpZ2F0aW9uVHlwZSIsImNvbnRyb2xsZXIiLCJ2aWV3IiwiZ2V0VmlldyIsInZpZXdEYXRhIiwiZ2V0Vmlld0RhdGEiLCJ2YXJpYW50TWFuYWdlbWVudCIsIkNvbnRyb2wiLCJfZ2V0RmlsdGVyQmFyVmFyaWFudENvbnRyb2wiLCJieUlkIiwiY3VycmVudFZhcmlhbnRLZXkiLCJnZXRDdXJyZW50VmFyaWFudEtleSIsIk5hdlR5cGUiLCJ4QXBwU3RhdGUiLCJpbml0aWFsTG9hZCIsIkluaXRpYWxMb2FkTW9kZSIsIkVuYWJsZWQiLCJfc2hvdWxkQXV0b1RyaWdnZXJTZWFyY2giLCJfZ2V0RmlsdGVyQmFyVk0iLCJfZ2V0QXBwbHlBdXRvbWF0aWNhbGx5T25WYXJpYW50IiwiX2FwcGx5U2VsZWN0aW9uVmFyaWFudCIsIm5hdmlnYXRpb25QYXJhbWV0ZXIiLCJmaWx0ZXJWYXJpYW50QXBwbGllZCIsImZpbHRlckJhciIsImdldENvbnRlbnQiLCJzZWxlY3Rpb25WYXJpYW50Iiwic3YiLCJzZWxlY3Rpb25WYXJpYW50RGVmYXVsdHMiLCJzdkRlZmF1bHRzIiwicmVxdWlyZXNTdGFuZGFyZFZhcmlhbnQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInNob3VsZEFwcGx5QXBwU3RhdGUiLCJfYWN0aXZhdGVWYXJpYW50QW5kRGV0ZXJtaW5lQXBwbHlBcHBTdGF0ZSIsIl9hZGREZWZhdWx0RGlzcGxheUN1cnJlbmN5VG9TViIsInN2RGVmYXVsdHNBcmVQcmVzZW50IiwiZ2V0U2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMiLCJzdGRWYXJpYW50SXNEZWZhdWx0VmFyaWFudCIsImdldERlZmF1bHRWYXJpYW50S2V5IiwiZ2V0U3RhbmRhcmRWYXJpYW50S2V5IiwidXNlRkxQRGVmYXVsdFZhbHVlcyIsImdldFBhcmVudCIsInN2VG9TZXQiLCJfZ2V0QWRqdXN0ZWRTViIsInNldFNlbGVjdGlvblZhcmlhbnQiLCJfZW5hYmxlRmlsdGVyQmFyIiwiZmlsdGVyQmFyQ29udHJvbCIsInByZXZlbnRJbml0aWFsU2VhcmNoIiwiZm5PblNlYXJjaCIsImdldFN1c3BlbmRTZWxlY3Rpb24iLCJhdHRhY2hFdmVudE9uY2UiLCJlbmFibGVSZXF1ZXN0cyIsImFwcFN0YXRlU1YiLCJhZGp1c3RlZFNWIiwiU2VsZWN0aW9uVmFyaWFudCIsInRvSlNPTk9iamVjdCIsImFscmVhZHlBcHBsaWVkU1YiLCJnZXRTZWxlY3Rpb25WYXJpYW50IiwiYXBwbGllZFNlbE9wdE5hbWVzIiwicmVkdWNlIiwic3ZDb3B5Iiwic2VsT3B0aW9uTmFtZSIsInN2U2VsT3B0cyIsImdldFNlbGVjdE9wdGlvbiIsInNlbGVjdE9wdGlvbnMiLCJtYXNzQWRkU2VsZWN0T3B0aW9uIiwiX3ByZXZlbnRJbml0aWFsU2VhcmNoIiwiYVZhcmlhbnRzIiwiZ2V0VmFyaWFudHMiLCJvQ3VycmVudFZhcmlhbnQiLCJmaW5kIiwiaXRlbSIsImdldEtleSIsImV4ZWN1dGVPblNlbGVjdCIsImlzRW1wdHkiLCJtZXRhTW9kZWwiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsImNvbnRleHRQYXRoIiwiZW50aXR5U2V0IiwibWV0YUNvbnRleHQiLCJnZXRNZXRhQ29udGV4dCIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJkaXNwbGF5Q3VycmVuY3lQcm9wZXJ0eU5hbWUiLCJnZXREaXNwbGF5Q3VycmVuY3lQcm9wZXJ0eU5hbWUiLCJkaXNwbGF5Q3VycmVuY3lJc01hbmRhdG9yeSIsIl9jaGVja0lmRGlzcGxheUN1cnJlbmN5SXNSZXF1aXJlZCIsInN2T3B0aW9ucyIsImRlZmF1bHRTVk9wdGlvbnMiLCJkaXNwbGF5Q3VycmVuY3lEZWZhdWx0RXhpc3RzIiwibm9TVkRpc3BsYXlDdXJyZW5jeUV4aXN0cyIsImRpc3BsYXlDdXJyZW5jeVNlbGVjdE9wdGlvbiIsInNpZ24iLCJvcHRpb24iLCJsb3ciLCJoaWdoIiwiYWRkU2VsZWN0T3B0aW9uIiwiaXNQYXJhbWV0ZXJpemVkIiwic3RhcnRpbmdFbnRpdHlTZXQiLCJlbnRpdHlUeXBlIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJSZXN1bHRDb250ZXh0IiwiZW50aXR5UHJvcGVydGllcyIsInNvbWUiLCJwYXJhbWV0ZXIiLCJuYW1lIiwiX3R5cGUiLCJyZXF1aXJlZFByb3BlcnRpZXMiLCJDYXBhYmlsaXRpZXMiLCJGaWx0ZXJSZXN0cmljdGlvbnMiLCJSZXF1aXJlZFByb3BlcnRpZXMiLCJyZXF1aXJlZFByb3BlcnR5IiwidmFsdWUiLCJyZXFTdGRWYXJpYW50IiwidmFyaWFudEtleSIsIkNvbnRyb2xWYXJpYW50QXBwbHlBUEkiLCJhY3RpdmF0ZVZhcmlhbnQiLCJlbGVtZW50IiwidmFyaWFudFJlZmVyZW5jZSIsIlBhZ2UiLCJnZXRDb250cm9sbGVyIiwiTm9uZSIsImhhbmRsZVZhcmlhbnRJZFBhc3NlZFZpYVVSTFBhcmFtcyIsIm9VcmxQYXJhbXMiLCJhUGFnZVZhcmlhbnRJZCIsImFGaWx0ZXJCYXJWYXJpYW50SWQiLCJhVGFibGVWYXJpYW50SWQiLCJhQ2hhcnRWYXJpYW50SWQiLCJvVmFyaWFudElEcyIsInNQYWdlVmFyaWFudElkIiwic0ZpbHRlckJhclZhcmlhbnRJZCIsInNUYWJsZVZhcmlhbnRJZCIsInNDaGFydFZhcmlhbnRJZCIsIl9oYW5kbGVDb250cm9sVmFyaWFudElkIiwib1ZNIiwib1ZpZXciLCJhUHJvbWlzZXMiLCJzVmFyaWFudE1hbmFnZW1lbnQiLCJfaGFuZGxlUGFnZVZhcmlhbnRJZCIsIl9oYW5kbGVGaWx0ZXJCYXJWYXJpYW50Q29udHJvbElkIiwiYWxsIiwib1ZhcmlhbnQiLCJfZmluZEFuZFB1c2hWYXJpYW50VG9Qcm9taXNlIiwic1ZhcmlhbnRJZCIsImJGaWx0ZXJWYXJpYW50QXBwbGllZCIsImtleSIsInB1c2giLCJfYXBwbHlDb250cm9sVmFyaWFudCIsInNWYXJpYW50SUQiLCJhcmd1bWVudHMiLCJzVmFyaWFudFJlZmVyZW5jZSIsIl9jaGVja0lmVmFyaWFudElkSXNBdmFpbGFibGUiLCJ0aGVuIiwiYklzQ29udHJvbFN0YXRlVmFyaWFudEF2YWlsYWJsZSIsIlN0YXRlVXRpbCIsImRldGFjaFN0YXRlQ2hhbmdlIiwic3RhdGVDaGFuZ2VIYW5kbGVyIiwiYXR0YWNoU3RhdGVDaGFuZ2UiLCJvRXZlbnQiLCJjb250cm9sIiwiZ2V0UGFyYW1ldGVyIiwiaXNBIiwiaGFuZGxlU3RhdGVDaGFuZ2UiLCJoYW5kbGVTZWFyY2giLCJvRmlsdGVyQmFyIiwiZ2V0U291cmNlIiwiZ2V0UGFyYW1ldGVycyIsImdldEZpbHRlckNvbmRpdGlvbnMiLCJwcmVwYXJlZEV2ZW50UGFyYW1ldGVycyIsIl9wcmVwYXJlRXZlbnRQYXJhbWV0ZXJzIiwiZmlyZUV2ZW50IiwibWVyZ2UiLCJsaXZlTW9kZSIsImdldEV4dGVuc2lvbkFQSSIsInVwZGF0ZUFwcFN0YXRlIiwiaGFuZGxlRmlsdGVyQ2hhbmdlZCIsIm9FdmVudFBhcmFtZXRlcnMiLCJvQ29uZGl0aW9ucyIsIl9nZXRGaWx0ZXJCYXJSZWFzb24iLCJjb25kaXRpb25zQmFzZWQiLCJfc1JlYXNvbiIsImZpbHRlcnMiLCJzZWFyY2giLCJGaWx0ZXJVdGlscyIsImdldEZpbHRlcnMiLCJzZXRGaWx0ZXJWYWx1ZXMiLCJzQ29uZGl0aW9uUGF0aCIsInNPcGVyYXRvciIsInZWYWx1ZXMiLCJnZXRBY3RpdmVGaWx0ZXJzVGV4dCIsImdldEFzc2lnbmVkRmlsdGVyc1RleHQiLCJmaWx0ZXJzVGV4dCIsIndhaXRGb3JJbml0aWFsaXphdGlvbiIsImVyciIsIm1lc3NhZ2UiLCJFcnJvciIsIlN0cmluZyIsIkxvZyIsImVycm9yIiwiaXNTZW1hbnRpY0RhdGVGaWx0ZXJBcHBsaWVkIiwiU2VtYW50aWNEYXRlT3BlcmF0b3JzIiwiaGFzU2VtYW50aWNEYXRlT3BlcmF0aW9ucyIsImdldENvbmRpdGlvbnMiLCJzdGF0ZUhlbHBlciIsImFwcENvbXBvbmVudCIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50IiwibmF2aWdhdGlvblNlcnZpY2UiLCJnZXROYXZpZ2F0aW9uU2VydmljZSIsImRhdGFNb2RlbE9iamVjdCIsImdldERhdGFNb2RlbE9iamVjdEZvck1ldGFQYXRoIiwibWV0YVBhdGgiLCJ0YXJnZXRFbnRpdHlTZXQiLCJzQ29udGV4dFVybCIsImNvbnN0cnVjdENvbnRleHRVcmwiLCJzZXRGaWx0ZXJDb250ZXh0VXJsIiwiZ2V0TWFuZGF0b3J5RmlsdGVyUHJvcGVydHlOYW1lcyIsImdldFByb3BlcnR5SW5mb1NldCIsImZpbHRlciIsImZpbHRlclByb3AiLCJyZXF1aXJlZCIsIm1hcCIsInJlcXVpcmVkUHJvcCIsImNvbmRpdGlvblBhdGgiLCJkYXRhIiwiQXJyYXkiLCJpc0FycmF5IiwiSlNPTiIsInBhcnNlIiwiY3VycmVudFZhcmlhbnQiLCJ2YXJpYW50TW9kZWwiLCJ2YXJpYW50QmFja1JlZmVyZW5jZSIsImdldFZhcmlhbnRCYWNrcmVmZXJlbmNlIiwiZ2V0Q3VycmVudFZhcmlhbnRSZWZlcmVuY2UiLCJlIiwiZGVidWciLCJzZXRGaWx0ZXJGaWVsZFZpc2libGUiLCJ2aXNpYmxlIiwiYXBwbHlFeHRlcm5hbFN0YXRlIiwiaXRlbXMiLCJnZXRGaWx0ZXJGaWVsZFZpc2libGUiLCJzdGF0ZSIsInJldHJpZXZlRXh0ZXJuYWxTdGF0ZSIsImdldFZhcmlhbnRNYW5hZ2VtZW50IiwidmFyaWFudEJhY2tyZWZlcmVuY2UiLCJVSTVFbGVtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJpZCIsInNldFZhcmlhbnRCYWNrUmVmZXJlbmNlIiwidmFyaWFudCIsImlzTGl2ZU1vZGUiLCJnZXRMaXZlTW9kZSIsInNldFZhcmlhbnRCYWNrcmVmZXJlbmNlIiwic2V0Q3VycmVudFZhcmlhbnRLZXkiLCJzZXRGaWx0ZXJGaWVsZEVuYWJsZWQiLCJlbmFibGVkIiwic2V0RGF0YSIsImZpbHRlckZpZWxkcyIsImVkaXRNb2RlIiwiRmllbGRFZGl0TW9kZSIsIkVkaXRhYmxlIiwiRGlzYWJsZWQiLCJnZXRGaWx0ZXJGaWVsZEVuYWJsZWQiLCJnZXRQcm9wZXJ0eSIsImNvbnZlcnRTZWxlY3Rpb25WYXJpYW50VG9TdGF0ZUZpbHRlcnMiLCJwcmVmaWxsRGVzY3JpcHRpb25zIiwiX2NsZWFyRmlsdGVyVmFsdWVzV2l0aE9wdGlvbnMiLCJvcHRpb25zIiwicmVzdWx0Iiwic2V0U2VsZWN0aW9uVmFyaWFudFRvTWRjQ29udHJvbCIsImFwcGx5U3RhdGVSZXN1bHQiLCJkaWZmU3RhdGUiLCJnZXRDb25kaXRpb25QYXRoIiwicHJvcGVydHlQYXRoIiwicHJvcGVydHlUYXJnZXRPYmplY3RQYXRoIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclByb3BlcnR5IiwiZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCIsInNob3dGaWx0ZXJGaWVsZCIsInRhcmdldEZpbHRlckZpZWxkIiwib3BlblZhbHVlSGVscEZvckZpbHRlckZpZWxkIiwiaW5wdXRWYWx1ZSIsInJlamVjdCIsImZpbHRlckZpZWxkIiwiZ2V0RmlsdGVySXRlbXMiLCJnZXRQcm9wZXJ0eUtleSIsInZhbHVlSGVscCIsImdldFZhbHVlSGVscCIsIl9vRm9jdXNJbmZvIiwidGFyZ2V0SW5mbyIsInNpbGVudCIsIm9uZm9jdXNpbiIsImpRdWVyeSIsIkV2ZW50Iiwic2V0VGltZW91dCIsImdldEFnZ3JlZ2F0aW9uIiwiZmlyZVZhbHVlSGVscFJlcXVlc3QiLCJmcm9tS2V5Ym9hcmQiLCJfdXNlcklucHV0VmFsdWUiLCJnZXRDb2xsYXBzZWRGaWx0ZXJzVGV4dCIsIk1hY3JvQVBJIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGaWx0ZXJCYXJBUEkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXQsIFByb3BlcnR5LCBQcm9wZXJ0eVBhdGggfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IG1lcmdlIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnRpZXNPZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IGFnZ3JlZ2F0aW9uLCBkZWZpbmVVSTVDbGFzcywgZXZlbnQsIG1peGluLCBwcm9wZXJ0eSwgeG1sRXZlbnRIYW5kbGVyIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgY29udHJvbGxlckV4dGVuc2lvbkhhbmRsZXIgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvSG9va1N1cHBvcnRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgQ29udHJvbFN0YXRlLCBMZWdhY3lGaWx0ZXJCYXJTdGF0ZSwgTmF2aWdhdGlvblBhcmFtZXRlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9WaWV3U3RhdGVcIjtcbmltcG9ydCB7IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IFByb21pc2VLZWVwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUHJvbWlzZUtlZXBlclwiO1xuaW1wb3J0IHsgSW5pdGlhbExvYWRNb2RlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgTWFjcm9BUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvTWFjcm9BUElcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jb250cm9scy9GaWx0ZXJCYXJcIjtcbmltcG9ydCB0eXBlIHsgSUZpbHRlckNvbnRyb2wgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXIvRmlsdGVyVXRpbHNcIjtcbmltcG9ydCBGaWx0ZXJVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXIvRmlsdGVyVXRpbHNcIjtcbmltcG9ydCB0eXBlIEZpbHRlckZpZWxkIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlckJhci9GaWx0ZXJGaWVsZFwiO1xuaW1wb3J0IFNlbWFudGljRGF0ZU9wZXJhdG9ycyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXJCYXIvU2VtYW50aWNEYXRlT3BlcmF0b3JzXCI7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2xQcm9wZXJ0eUluZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9tZGMvYWRhcHRlci9TdGF0ZUhlbHBlclwiO1xuaW1wb3J0IHN0YXRlSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL21kYy9hZGFwdGVyL1N0YXRlSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsQmluZGluZ0luZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9VdGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBFeHRlcm5hbFN0YXRlVHlwZSB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL3ZhbHVlaGVscC9WYWx1ZUhlbHBEZWxlZ2F0ZVwiO1xuaW1wb3J0IFNlbGVjdGlvblZhcmlhbnQgZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uL1NlbGVjdGlvblZhcmlhbnRcIjtcbmltcG9ydCB7IE5hdlR5cGUgfSBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIExpc3RSZXBvcnRDb250cm9sbGVyIH0gZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvTGlzdFJlcG9ydC9MaXN0UmVwb3J0Q29udHJvbGxlci5jb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBJbnB1dCBmcm9tIFwic2FwL20vSW5wdXRcIjtcbmltcG9ydCB0eXBlIHsgSW5wdXQkVmFsdWVIZWxwUmVxdWVzdEV2ZW50UGFyYW1ldGVycyB9IGZyb20gXCJzYXAvbS9JbnB1dFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIEV2ZW50IH0gZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSB7ICRDb250cm9sU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgQ29udHJvbFZhcmlhbnRBcHBseUFQSSBmcm9tIFwic2FwL3VpL2ZsL2FwcGx5L2FwaS9Db250cm9sVmFyaWFudEFwcGx5QVBJXCI7XG5pbXBvcnQgdHlwZSBWYXJpYW50TWFuYWdlbWVudCBmcm9tIFwic2FwL3VpL2ZsL3ZhcmlhbnRzL1ZhcmlhbnRNYW5hZ2VtZW50XCI7XG5pbXBvcnQgdHlwZSBWYXJpYW50TW9kZWwgZnJvbSBcInNhcC91aS9mbC92YXJpYW50cy9WYXJpYW50TW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgVmFyaWFudERhdGEgfSBmcm9tIFwic2FwL3VpL2ZsL3ZhcmlhbnRzL1ZhcmlhbnRNb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL21kYy9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBWYWx1ZUhlbHAgZnJvbSBcInNhcC91aS9tZGMvVmFsdWVIZWxwXCI7XG5pbXBvcnQgdHlwZSB7IENvbmRpdGlvbk9iamVjdCB9IGZyb20gXCJzYXAvdWkvbWRjL2NvbmRpdGlvbi9Db25kaXRpb25cIjtcbmltcG9ydCBGaWVsZEVkaXRNb2RlIGZyb20gXCJzYXAvdWkvbWRjL2VudW1zL0ZpZWxkRWRpdE1vZGVcIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyQmFyQmFzZSRGaWx0ZXJzQ2hhbmdlZEV2ZW50LCBGaWx0ZXJCYXJCYXNlJFNlYXJjaEV2ZW50IH0gZnJvbSBcInNhcC91aS9tZGMvZmlsdGVyYmFyL0ZpbHRlckJhckJhc2VcIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyIGFzIFN0YXRlVXRpbEZpbHRlciB9IGZyb20gXCJzYXAvdWkvbWRjL3AxM24vU3RhdGVVdGlsXCI7XG5pbXBvcnQgU3RhdGVVdGlsIGZyb20gXCJzYXAvdWkvbWRjL3AxM24vU3RhdGVVdGlsXCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE1ldGFNb2RlbCwgZGVmYXVsdCBhcyBPRGF0YU1ldGFNb2RlbCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBqUXVlcnkgZnJvbSBcInNhcC91aS90aGlyZHBhcnR5L2pxdWVyeVwiO1xuaW1wb3J0IEZpbHRlckJhckFQSVN0YXRlSGFuZGxlciBmcm9tIFwiLi9taXhpbi9GaWx0ZXJCYXJBUElTdGF0ZUhhbmRsZXJcIjtcblxuLy8gVHJhY2sgdGVsZW1ldHJ5IGNvbnRlbnQgZm9yIHRoZSBmaWx0ZXJCYXJcbmNsYXNzIEZpbHRlckJhclRlbGVtZXRyeSB7XG5cdHByaXZhdGUgY291bnRGaWx0ZXJBY3Rpb25zID0gMDtcblxuXHRwcml2YXRlIGNvdW50VmFyaWFudEZpbHRlcnMgPSAwO1xuXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZmlsdGVyQmFyQVBJOiBGaWx0ZXJCYXJBUEkpIHt9XG5cblx0b25GaWx0ZXJzQ2hhbmdlZChyZWFzb24/OiBzdHJpbmcpOiB2b2lkIHtcblx0XHRpZiAocmVhc29uID09PSBcIlZhcmlhbnRcIikge1xuXHRcdFx0dGhpcy5jb3VudFZhcmlhbnRGaWx0ZXJzKys7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuY291bnRGaWx0ZXJBY3Rpb25zKys7XG5cdFx0fVxuXHR9XG5cblx0b25TZWFyY2goZXZlbnRQYXJhbWV0ZXJzOiB7IHJlYXNvbj86IHN0cmluZyB9LCBjb25kaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBDb25kaXRpb25PYmplY3RbXT4pOiB2b2lkIHtcblx0XHRjb25zdCBmaWx0ZXJOYW1lcyA9IHRoaXMuZ2V0RmlsdGVyTmFtZXNGcm9tQ29uZGl0aW9ucyhjb25kaXRpb25zKTtcblx0XHR0aGlzLmZpbHRlckJhckFQSS5nZXRQYWdlQ29udHJvbGxlcigpPy50ZWxlbWV0cnkuc3RvcmVBY3Rpb24oe1xuXHRcdFx0dHlwZTogXCJGRS5GaWx0ZXJCYXJTZWFyY2hcIixcblx0XHRcdHBhcmFtZXRlcnM6IHtcblx0XHRcdFx0Y291bnRGaWx0ZXJBY3Rpb25zOiB0aGlzLmNvdW50RmlsdGVyQWN0aW9ucywgLy8gIEhvdyBtYW55IGZpbHRlckNoYW5nZWQgYWN0aW9ucyBhcmUgcGVyZm9ybWVkXG5cdFx0XHRcdGNvdW50RmlsdGVyczogT2JqZWN0LmtleXMoY29uZGl0aW9ucykubGVuZ3RoLCAvLyBIb3cgbWFueSBkaWZmZXJlbnQgZmlsdGVycyBhcmUgYXBwbGllZFxuXHRcdFx0XHRjb3VudFZhcmlhbnRGaWx0ZXJzOiB0aGlzLmNvdW50VmFyaWFudEZpbHRlcnMsIC8vIEhvdyBtYW55IGZpbHRlciBiZWxvbmcgdG8gYSB2YXJpYW50XG5cdFx0XHRcdHZhcmlhbnRMYXllcjogdGhpcy5maWx0ZXJCYXJBUEkuZ2V0VmFyaWFudCgpPy5sYXllciA/PyBcIk5vbmVcIiwgLy8gfCBcIlNBUFwiIHwgXCJDdXN0b21cIjsgLy8gVHlwZSBvZiB2YXJpYW50XG5cdFx0XHRcdGF1dG9Mb2FkOiBldmVudFBhcmFtZXRlcnMucmVhc29uID09PSBcIlZhcmlhbnRcIiwgLy8gSXMgdGhlIGZpbHRlciBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkXG5cdFx0XHRcdHNlYXJjaFVzZWQ6IGNvbmRpdGlvbnMuJHNlYXJjaCA/ICEhT2JqZWN0LmtleXMoY29uZGl0aW9ucy4kc2VhcmNoKS5sZW5ndGggOiBmYWxzZSwgLy8gV2FzIHRoZSBzZWFyY2ggZmllbGQgaW4gdGhlIGZpbHRlcmJhciB1c2VkP1xuXHRcdFx0XHRmaWx0ZXJOYW1lczogZmlsdGVyTmFtZXMgLy8gUHJvcGVydHkgbmFtZXMgb2YgdGhlIGZpbHRlcnNcblx0XHRcdH1cblx0XHR9KTtcblx0XHQvLyBSZXNldCB0aGUgY291bnRcblx0XHR0aGlzLmNvdW50RmlsdGVyQWN0aW9ucyA9IDA7XG5cdFx0dGhpcy5jb3VudFZhcmlhbnRGaWx0ZXJzID0gMDtcblx0fVxuXG5cdGdldEZpbHRlck5hbWVzRnJvbUNvbmRpdGlvbnMoY29uZGl0aW9uczogUmVjb3JkPHN0cmluZywgQ29uZGl0aW9uT2JqZWN0W10+KTogc3RyaW5nIHtcblx0XHRsZXQgZmlsdGVyTmFtZXMgPSBcIlwiO1xuXHRcdE9iamVjdC5rZXlzKGNvbmRpdGlvbnMpLmZvckVhY2goKGNvbmRpdGlvbikgPT4ge1xuXHRcdFx0aWYgKGNvbmRpdGlvbiAhPSBcIiRzZWFyY2hcIikge1xuXHRcdFx0XHRmaWx0ZXJOYW1lcyArPSBjb25kaXRpb24gKyBcIjtcIjtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gZmlsdGVyTmFtZXM7XG5cdH1cbn1cblxuZXhwb3J0IHR5cGUgRmlsdGVyQmFyU3RhdGUgPSB7XG5cdGlubmVyU3RhdGU/OiB7XG5cdFx0ZmlsdGVyPzogUmVjb3JkPHN0cmluZywgQ29uZGl0aW9uT2JqZWN0W10+O1xuXHRcdGluaXRpYWxTdGF0ZT86IExlZ2FjeUZpbHRlckJhclN0YXRlO1xuXHRcdGZ1bGxTdGF0ZT86IExlZ2FjeUZpbHRlckJhclN0YXRlO1xuXHR9O1xufTtcblxudHlwZSBWYXJpYW50SURzID0ge1xuXHRzUGFnZVZhcmlhbnRJZDogc3RyaW5nO1xuXHRzRmlsdGVyQmFyVmFyaWFudElkOiBzdHJpbmc7XG5cdHNUYWJsZVZhcmlhbnRJZDogc3RyaW5nO1xuXHRzQ2hhcnRWYXJpYW50SWQ6IHN0cmluZztcbn07XG5cbnR5cGUgVmFyaWFudE9iamVjdCA9IHtcblx0YXV0aG9yOiBzdHJpbmc7XG5cdGNoYW5nZTogYm9vbGVhbjtcblx0Y29udGV4dHM6IG9iamVjdDtcblx0ZXhlY3V0ZU9uU2VsZWN0OiBib29sZWFuO1xuXHRmYXZvcml0ZTogYm9vbGVhbjtcblx0a2V5OiBzdHJpbmc7XG5cdG9yaWdpbmFsQ29udGV4dHM6IG9iamVjdDtcblx0b3JpZ2luYWxFeGVjdXRlT25TZWxlY3Q6IGJvb2xlYW47XG5cdG9yaWdpbmFsRmF2b3JpdGU6IGJvb2xlYW47XG5cdG9yaWdpbmFsVGl0bGU6IHN0cmluZztcblx0b3JpZ2luYWxWaXNpYmxlOiBib29sZWFuO1xuXHRyZW1vdmU6IGJvb2xlYW47XG5cdHJlbmFtZTogYm9vbGVhbjtcblx0c2hhcmluZzogc3RyaW5nO1xuXHR0aXRsZTogc3RyaW5nO1xuXHR2aXNpYmxlOiBib29sZWFuO1xufTtcblxuZW51bSBWYXJpYW50TWFuYWdlbWVudFR5cGUge1xuXHRDb250cm9sID0gXCJDb250cm9sXCIsXG5cdFBhZ2UgPSBcIlBhZ2VcIixcblx0Tm9uZSA9IFwiTm9uZVwiXG59XG5cbmNvbnN0IERJU1BMQVlfQ1VSUkVOQ1lfUFJPUEVSVFlfTkFNRSA9IFwiRGlzcGxheUN1cnJlbmN5XCI7XG5jb25zdCBQX0RJU1BMQVlfQ1VSUkVOQ1lfUFJPUEVSVFlfTkFNRSA9IFwiUF9EaXNwbGF5Q3VycmVuY3lcIjtcblxudHlwZSBMUlZpZXdEYXRhID0ge1xuXHRjb250cm9sQ29uZmlndXJhdGlvbj86IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pjtcblx0ZW50aXR5U2V0Pzogc3RyaW5nO1xuXHRjb250ZXh0UGF0aD86IHN0cmluZztcblx0dmFyaWFudE1hbmFnZW1lbnQ/OiBib29sZWFuIHwgc3RyaW5nO1xufTtcblxuLyoqXG4gKiBUaGUga2V5IHR5cGUgaW5jbHVkZXMgJ2Jvb2xlYW4nIHRvIHN1cHBvcnQgbGVnYWN5IHNjZW5hcmlvcyB3aGVyZSAnZGF0YUxvYWRlZCcgbWF5IGJlIHByZXNlbnQgYXQgdGhlIHBhcmVudCBsZXZlbCBhcyBhIGJvb2xlYW4sXG4gKiBhcyB3ZWxsIGFzIGF0IGluc3RhbmNlIGxldmVsIGFzIGFuIG9iamVjdCB3aXRoIGEgJ2RhdGFMb2FkZWQnIHByb3BlcnR5LiBUaGlzIGVuc3VyZXMgY29tcGF0aWJpbGl0eSB3aXRoIGJvdGggdXNhZ2VzLlxuICovXG50eXBlIEFkZGl0aW9uYWxTdGF0ZXMgPSB7XG5cdGRhdGFMb2FkZWQ/OiBib29sZWFuO1xuXHRba2V5OiBzdHJpbmddOiB7IGRhdGFMb2FkZWQ/OiBib29sZWFuIH0gfCBib29sZWFuIHwgdW5kZWZpbmVkO1xufTtcblxuaW50ZXJmYWNlIEZpbHRlckJhckFQSSBleHRlbmRzIEZpbHRlckJhckFQSVN0YXRlSGFuZGxlciB7fVxuXG4vKipcbiAqIEJ1aWxkaW5nIGJsb2NrIGZvciBjcmVhdGluZyBhIEZpbHRlckJhciBiYXNlZCBvbiB0aGUgbWV0YWRhdGEgcHJvdmlkZWQgYnkgT0RhdGEgVjQuXG4gKiB7QGxpbmsgZGVtbzpzYXAvZmUvY29yZS9mcG1FeHBsb3Jlci9pbmRleC5odG1sIy9idWlsZGluZ0Jsb2Nrcy9maWx0ZXJCYXIvZmlsdGVyQmFyRGVmYXVsdCBPdmVydmlldyBvZiBCdWlsZGluZyBCbG9ja3N9XG4gKiA8YnI+XG4gKiBVc3VhbGx5LCBhIFNlbGVjdGlvbkZpZWxkcyBhbm5vdGF0aW9uIGlzIGV4cGVjdGVkLlxuICpcbiAqXG4gKiBVc2FnZSBleGFtcGxlOlxuICogPHByZT5cbiAqICZsdDttYWNyb3M6RmlsdGVyQmFyIGlkPVwiTXlGaWx0ZXJCYXJcIiBtZXRhUGF0aD1cIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25GaWVsZHNcIiAvJmd0O1xuICogPC9wcmU+XG4gKiBAYWxpYXMgc2FwLmZlLm1hY3Jvcy5GaWx0ZXJCYXJcbiAqIEBwdWJsaWNcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLm1hY3Jvcy5maWx0ZXJCYXIuRmlsdGVyQmFyQVBJXCIsIHtcblx0cmV0dXJuVHlwZXM6IFtcInNhcC51aS5jb3JlLkNvbnRyb2xcIl1cbn0pXG5AbWl4aW4oRmlsdGVyQmFyQVBJU3RhdGVIYW5kbGVyKVxuY2xhc3MgRmlsdGVyQmFyQVBJIGV4dGVuZHMgTWFjcm9BUEkge1xuXHRpbml0aWFsQ29udHJvbFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG5cdF9pbml0aWFsU3RhdGVQcm9taXNlOiBQcm9taXNlS2VlcGVyPHZvaWQ+ID0gbmV3IFByb21pc2VLZWVwZXIoKTtcblxuXHRfYlNlYXJjaFRyaWdnZXJlZCA9IGZhbHNlO1xuXG5cdHByaXZhdGUgX2hhc1BlbmRpbmdGaWx0ZXJzID0gdHJ1ZTtcblxuXHRAY29udHJvbGxlckV4dGVuc2lvbkhhbmRsZXIoXCJ2aWV3U3RhdGVcIiwgXCJyZXRyaWV2ZUFkZGl0aW9uYWxTdGF0ZXNcIilcblx0cHVibGljIHJldHJpZXZlQWRkaXRpb25hbFN0YXRlcyhhZGRpdGlvbmFsU3RhdGVzOiBBZGRpdGlvbmFsU3RhdGVzKTogdm9pZCB7XG5cdFx0YWRkaXRpb25hbFN0YXRlc1t0aGlzLmdldElkKCldID0geyBkYXRhTG9hZGVkOiAhdGhpcy5faGFzUGVuZGluZ0ZpbHRlcnMgfTtcblx0fVxuXG5cdEBjb250cm9sbGVyRXh0ZW5zaW9uSGFuZGxlcihcInZpZXdTdGF0ZVwiLCBcImFwcGx5QWRkaXRpb25hbFN0YXRlc1wiKVxuXHRwdWJsaWMgYXBwbHlBZGRpdGlvbmFsU3RhdGVzKGFkZGl0aW9uYWxTdGF0ZXM6IEFkZGl0aW9uYWxTdGF0ZXMpOiB2b2lkIHtcblx0XHRjb25zdCBpbnN0YW5jZVN0YXRlID0gYWRkaXRpb25hbFN0YXRlc1t0aGlzLmdldElkKCldO1xuXHRcdGxldCBpbnN0YW5jZURhdGFMb2FkZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cdFx0aWYgKHR5cGVvZiBpbnN0YW5jZVN0YXRlID09PSBcIm9iamVjdFwiICYmIGluc3RhbmNlU3RhdGUgIT09IG51bGwpIHtcblx0XHRcdGluc3RhbmNlRGF0YUxvYWRlZCA9IGluc3RhbmNlU3RhdGUuZGF0YUxvYWRlZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aW5zdGFuY2VEYXRhTG9hZGVkID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdGNvbnN0IHBhcmVudERhdGFMb2FkZWQgPVxuXHRcdFx0XCJkYXRhTG9hZGVkXCIgaW4gYWRkaXRpb25hbFN0YXRlcyAmJiB0eXBlb2YgYWRkaXRpb25hbFN0YXRlcy5kYXRhTG9hZGVkID09PSBcImJvb2xlYW5cIiA/IGFkZGl0aW9uYWxTdGF0ZXMuZGF0YUxvYWRlZCA6IHVuZGVmaW5lZDtcblxuXHRcdGlmIChwYXJlbnREYXRhTG9hZGVkID09PSB0cnVlIHx8IGluc3RhbmNlRGF0YUxvYWRlZCA9PT0gdHJ1ZSkge1xuXHRcdFx0dGhpcy50cmlnZ2VyU2VhcmNoKCk7XG5cdFx0fVxuXHRcdGlmIChwYXJlbnREYXRhTG9hZGVkID09PSBmYWxzZSB8fCBpbnN0YW5jZURhdGFMb2FkZWQgPT09IGZhbHNlKSB7XG5cdFx0XHQodGhpcy5jb250ZW50IGFzIHsgX2JTZWFyY2hUcmlnZ2VyZWQ/OiBib29sZWFuIH0pLl9iU2VhcmNoVHJpZ2dlcmVkID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgd2FpdEZvckluaXRpYWxTdGF0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5faW5pdGlhbFN0YXRlUHJvbWlzZS5wcm9taXNlO1xuXHR9XG5cblx0Z2V0Q29udHJvbFN0YXRlKGNvbnRyb2xTdGF0ZTogQ29udHJvbFN0YXRlKTogQ29udHJvbFN0YXRlIHtcblx0XHRjb25zdCBpbml0aWFsQ29udHJvbFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHRoaXMuaW5pdGlhbENvbnRyb2xTdGF0ZTtcblx0XHRpZiAoY29udHJvbFN0YXRlKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRmdWxsU3RhdGU6IGNvbnRyb2xTdGF0ZSBhcyBvYmplY3QsXG5cdFx0XHRcdGluaXRpYWxTdGF0ZTogaW5pdGlhbENvbnRyb2xTdGF0ZSBhcyBvYmplY3Rcblx0XHRcdH07XG5cdFx0fVxuXHRcdHJldHVybiBjb250cm9sU3RhdGU7XG5cdH1cblxuXHQvKipcblx0ICogRGV0ZXJtaW5lcyB3aGV0aGVyIFNlYXJjaCBjYW4gYmUgdHJpZ2dlcmVkIGF0IGluaXRpYWwgbG9hZCBvZiB0aGUgYXBwbGljYXRpb24gb3Igbm90LlxuXHQgKiBAcGFyYW0gbmF2aWdhdGlvblR5cGUgTmF2aWdhdGlvbiBUeXBlIGR1cmluZyB0aGUgbG9hZCBvZiB0aGUgYXBwbGljYXRpb25cblx0ICogQHJldHVybnMgQSBCb29sZWFuIGRldGVybWluaW5nIHdoZXRoZXIgU2VhcmNoIGNhbiBiZSB0cmlnZ2VyZWQgb3Igbm90XG5cdCAqL1xuXHRpc1NlYXJjaFRyaWdnZXJlZEJ5SW5pdGlhbExvYWQobmF2aWdhdGlvblR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB0aGlzLmdldFBhZ2VDb250cm9sbGVyKCkgYXMgTGlzdFJlcG9ydENvbnRyb2xsZXIsXG5cdFx0XHR2aWV3ID0gY29udHJvbGxlci5nZXRWaWV3KCksXG5cdFx0XHR2aWV3RGF0YSA9IHZpZXcuZ2V0Vmlld0RhdGEoKTtcblx0XHRsZXQgaXNTZWFyY2hUcmlnZ2VyZWRCeUluaXRpYWxMb2FkID0gZmFsc2UsXG5cdFx0XHR2YXJpYW50TWFuYWdlbWVudDtcblx0XHQvLyBEZXRlcm1pbmluZyB3aGV0aGVyIGl0J3MgQ29udHJvbCB2YXJpYW50TWFuYWdlbWVudCBvciBQYWdlIHZhcmlhbnRNYW5hZ2VtZW50XG5cdFx0aWYgKHZpZXdEYXRhLnZhcmlhbnRNYW5hZ2VtZW50ID09PSBWYXJpYW50TWFuYWdlbWVudFR5cGUuQ29udHJvbCkge1xuXHRcdFx0dmFyaWFudE1hbmFnZW1lbnQgPSBjb250cm9sbGVyLl9nZXRGaWx0ZXJCYXJWYXJpYW50Q29udHJvbCgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YXJpYW50TWFuYWdlbWVudCA9IHZpZXcuYnlJZChcImZlOjpQYWdlVmFyaWFudE1hbmFnZW1lbnRcIikgYXMgVmFyaWFudE1hbmFnZW1lbnQ7XG5cdFx0fVxuXHRcdGNvbnN0IGN1cnJlbnRWYXJpYW50S2V5ID0gdmFyaWFudE1hbmFnZW1lbnQ/LmdldEN1cnJlbnRWYXJpYW50S2V5KCk7XG5cdFx0Ly9UaGUgY2hlY2sgc2hhbGwgaGFwcGVuIGZvciAnaW50aWFsIGxvYWQnIGFuZCAnQXBwbHkgQXV0b21hdGljYWxseScgZm9yIGNvbGxhcHNpbmcgdGhlIGhlYWRlciBvclxuXHRcdC8vIGFsd2F5cyBiZSBjb2xsYXBzZWQgaWYgbmF2VHlwZSBpcyB4QXBwU3RhdGVcblx0XHQvLyBpbml0aWFsTG9hZCBBdXRvIG9yIERpc2FibGVkXG5cdFx0aWYgKG5hdmlnYXRpb25UeXBlID09PSBOYXZUeXBlLnhBcHBTdGF0ZSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSBlbHNlIGlmICh2YXJpYW50TWFuYWdlbWVudCAmJiB2aWV3RGF0YS5pbml0aWFsTG9hZCAhPT0gSW5pdGlhbExvYWRNb2RlLkVuYWJsZWQpIHtcblx0XHRcdC8vIEhlYWRlciBpcyBjb2xsYXBzZWQgaWYgcHJlc2V0IGZpbHRlcnMgYXJlIHNldCBmb3IgaW5pdGlhbCBsb2FkIEF1dG8sIEhlYWRlciBzaGFsbCByZW1haW4gZXhwYW5kZWQgaWYgaW5pdGlhbCBsb2FkIGlzIEF1dG8gd2l0aG91dCBwcmVzZXQgZmlsdGVycyBvciBpbnRpYWwgbG9hZCBpcyBkaXNhYmxlZFxuXHRcdFx0aWYgKGNvbnRyb2xsZXIuX3Nob3VsZEF1dG9UcmlnZ2VyU2VhcmNoKHRoaXMuX2dldEZpbHRlckJhclZNKHZpZXcpKSkge1xuXHRcdFx0XHRpc1NlYXJjaFRyaWdnZXJlZEJ5SW5pdGlhbExvYWQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyBpbml0aWFsTG9hZCBFbmFibGVkXG5cdFx0ZWxzZSBpZiAoXG5cdFx0XHR2YXJpYW50TWFuYWdlbWVudCAmJlxuXHRcdFx0dmlld0RhdGEuaW5pdGlhbExvYWQgPT09IEluaXRpYWxMb2FkTW9kZS5FbmFibGVkICYmXG5cdFx0XHRjb250cm9sbGVyLl9nZXRBcHBseUF1dG9tYXRpY2FsbHlPblZhcmlhbnQodmFyaWFudE1hbmFnZW1lbnQsIGN1cnJlbnRWYXJpYW50S2V5KVxuXHRcdCkge1xuXHRcdFx0aXNTZWFyY2hUcmlnZ2VyZWRCeUluaXRpYWxMb2FkID0gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGlzU2VhcmNoVHJpZ2dlcmVkQnlJbml0aWFsTG9hZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBcHBseSBTZWxlY3Rpb24gVmFyaWFudCBmcm9tIE5hdmlnYXRpb24gUGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gdmlldyBWaWV3IG9mIHRoZSBMUiBmaWx0ZXIgYmFyXG5cdCAqIEBwYXJhbSBuYXZpZ2F0aW9uUGFyYW1ldGVyIFNlbGVjdGlvbiBWYXJpYW50IHRvIGFwcGx5IGZyb20gYXBwU3RhdGVcblx0ICogQHBhcmFtIGZpbHRlclZhcmlhbnRBcHBsaWVkIElzIGEgZmlsdGVyIHZhcmlhbnQgYWxhcmVhZHkgYXBwbGllZFxuXHQgKiBAcmV0dXJucyBQcm9taXNlIGZvciBhc3luY2hyb25vdXMgaGFuZGxpbmdcblx0ICovXG5cdGFzeW5jIF9hcHBseVNlbGVjdGlvblZhcmlhbnQodmlldzogVmlldywgbmF2aWdhdGlvblBhcmFtZXRlcjogTmF2aWdhdGlvblBhcmFtZXRlciwgZmlsdGVyVmFyaWFudEFwcGxpZWQ6IGJvb2xlYW4pOiBQcm9taXNlPHVua25vd24+IHtcblx0XHRjb25zdCBmaWx0ZXJCYXIgPSB0aGlzLmdldENvbnRlbnQoKSBhcyBGaWx0ZXJCYXI7XG5cdFx0Y29uc3QgeyBzZWxlY3Rpb25WYXJpYW50OiBzdiwgc2VsZWN0aW9uVmFyaWFudERlZmF1bHRzOiBzdkRlZmF1bHRzLCByZXF1aXJlc1N0YW5kYXJkVmFyaWFudCA9IGZhbHNlIH0gPSBuYXZpZ2F0aW9uUGFyYW1ldGVyO1xuXG5cdFx0aWYgKCFmaWx0ZXJCYXIgfHwgIXN2KSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXHRcdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50ID0gdGhpcy5fZ2V0RmlsdGVyQmFyVk0odmlldykgYXMgVmFyaWFudE1hbmFnZW1lbnQ7XG5cdFx0Y29uc3Qgc2hvdWxkQXBwbHlBcHBTdGF0ZSA9IGF3YWl0IHRoaXMuX2FjdGl2YXRlVmFyaWFudEFuZERldGVybWluZUFwcGx5QXBwU3RhdGUoXG5cdFx0XHR2YXJpYW50TWFuYWdlbWVudCxcblx0XHRcdHJlcXVpcmVzU3RhbmRhcmRWYXJpYW50LFxuXHRcdFx0ZmlsdGVyVmFyaWFudEFwcGxpZWRcblx0XHQpO1xuXHRcdGlmIChzaG91bGRBcHBseUFwcFN0YXRlKSB7XG5cdFx0XHR0aGlzLl9hZGREZWZhdWx0RGlzcGxheUN1cnJlbmN5VG9TVih2aWV3LCBzdiwgc3ZEZWZhdWx0cyk7XG5cblx0XHRcdC8vIGNoZWNrIGlmIEZMUCBkZWZhdWx0IHZhbHVlcyBhcmUgdGhlcmUgYW5kIGlzIGl0IHN0YW5kYXJkIHZhcmlhbnRcblx0XHRcdGNvbnN0IHN2RGVmYXVsdHNBcmVQcmVzZW50ID0gc3ZEZWZhdWx0cyA/IHN2RGVmYXVsdHMuZ2V0U2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMoKS5sZW5ndGggPiAwIDogZmFsc2U7XG5cdFx0XHRjb25zdCBzdGRWYXJpYW50SXNEZWZhdWx0VmFyaWFudCA9XG5cdFx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50ICYmIHZhcmlhbnRNYW5hZ2VtZW50LmdldERlZmF1bHRWYXJpYW50S2V5KCkgPT09IHZhcmlhbnRNYW5hZ2VtZW50LmdldFN0YW5kYXJkVmFyaWFudEtleSgpO1xuXHRcdFx0Y29uc3QgdXNlRkxQRGVmYXVsdFZhbHVlczogYm9vbGVhbiA9IHN2RGVmYXVsdHNBcmVQcmVzZW50ICYmIChzdGRWYXJpYW50SXNEZWZhdWx0VmFyaWFudCB8fCAhdmFyaWFudE1hbmFnZW1lbnQpO1xuXG5cdFx0XHRjb25zdCBmaWx0ZXJCYXJBUEkgPSBmaWx0ZXJCYXIuZ2V0UGFyZW50KCkgYXMgRmlsdGVyQmFyQVBJO1xuXHRcdFx0bGV0IHN2VG9TZXQ6IFNlbGVjdGlvblZhcmlhbnQgPSBzdjtcblx0XHRcdGlmIChmaWx0ZXJWYXJpYW50QXBwbGllZCB8fCB1c2VGTFBEZWZhdWx0VmFsdWVzKSB7XG5cdFx0XHRcdHN2VG9TZXQgPSBhd2FpdCB0aGlzLl9nZXRBZGp1c3RlZFNWKHN2LCB1c2VGTFBEZWZhdWx0VmFsdWVzKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmaWx0ZXJCYXJBUEkuc2V0U2VsZWN0aW9uVmFyaWFudChzdlRvU2V0LCB0cnVlKTtcblx0XHR9XG5cdH1cblxuXHRfZW5hYmxlRmlsdGVyQmFyKGZpbHRlckJhckNvbnRyb2w6IEZpbHRlckJhciwgcHJldmVudEluaXRpYWxTZWFyY2g6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRjb25zdCBmaWx0ZXJCYXJBUEkgPSBmaWx0ZXJCYXJDb250cm9sLmdldFBhcmVudCgpIGFzIEZpbHRlckJhckFQSTtcblx0XHRjb25zdCBmbk9uU2VhcmNoID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0dGhpcy5fYlNlYXJjaFRyaWdnZXJlZCA9ICFwcmV2ZW50SW5pdGlhbFNlYXJjaDtcblx0XHR9O1xuXG5cdFx0Ly8gcmVzZXQgdGhlIHN1c3BlbmQgc2VsZWN0aW9uIG9uIGZpbHRlciBiYXIgdG8gYWxsb3cgbG9hZGluZyBvZiBkYXRhIHdoZW4gbmVlZGVkICh3YXMgc2V0IG9uIExSIEluaXQpXG5cdFx0aWYgKGZpbHRlckJhckNvbnRyb2wuZ2V0U3VzcGVuZFNlbGVjdGlvbigpKSB7XG5cdFx0XHQvLyBPbmx5IGlmIHNlYXJjaCBpcyBmaXJlZCB3ZSBzZXQgX2JTZWFyY2hUcmlnZ2VyZWQuXG5cdFx0XHQvLyBJZiB0aGVyZSB3YXMgYW4gZXJyb3IgZHVlIHRvIHJlcXVpcmVkIGZpbHRlcmZpZWxkcyBlbXB0eSBvciBvdGhlciBpc3N1ZXMgd2Ugc2tpcCBzZXR0aW5nIF9iU2VhcmNoVHJpZ2dlcmVkLlxuXHRcdFx0ZmlsdGVyQmFyQVBJLmF0dGFjaEV2ZW50T25jZShcInNlYXJjaFwiLCBmbk9uU2VhcmNoKTtcblx0XHRcdGZpbHRlckJhckNvbnRyb2wuZW5hYmxlUmVxdWVzdHModHJ1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIHNlYXJjaCBtaWdodCBhbHJlYWR5IGJlIHRyaWdnZXJlZC5cblx0XHRcdGZuT25TZWFyY2goKTtcblx0XHR9XG5cdH1cblxuXHRhc3luYyBfZ2V0QWRqdXN0ZWRTVihhcHBTdGF0ZVNWOiBTZWxlY3Rpb25WYXJpYW50LCB1c2VGTFBEZWZhdWx0VmFsdWVzOiBib29sZWFuKTogUHJvbWlzZTxTZWxlY3Rpb25WYXJpYW50PiB7XG5cdFx0bGV0IGFkanVzdGVkU1YgPSBuZXcgU2VsZWN0aW9uVmFyaWFudChhcHBTdGF0ZVNWLnRvSlNPTk9iamVjdCgpKTtcblx0XHRjb25zdCBhbHJlYWR5QXBwbGllZFNWID0gYXdhaXQgdGhpcy5nZXRTZWxlY3Rpb25WYXJpYW50KCk7XG5cdFx0Y29uc3QgYXBwbGllZFNlbE9wdE5hbWVzID0gYWxyZWFkeUFwcGxpZWRTVj8uZ2V0U2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMoKSB8fCBbXTtcblx0XHRpZiAoYXBwbGllZFNlbE9wdE5hbWVzLmxlbmd0aCA+IDApIHtcblx0XHRcdC8vIFdlIG1lcmdlICdhcHBsaWVkIFNWJyBhbmQgJ2FwcFN0YXRlIFNWJyBiYXNlZCBvbiAndXNlRkxQRGVmYXVsdFZhbHVlcycuXG5cdFx0XHRhZGp1c3RlZFNWID0gYXBwbGllZFNlbE9wdE5hbWVzLnJlZHVjZSgoc3ZDb3B5OiBTZWxlY3Rpb25WYXJpYW50LCBzZWxPcHRpb25OYW1lKSA9PiB7XG5cdFx0XHRcdC8vIChhcHBTdGF0ZVNWID0gYWRqdXN0ZWRTViA9IHN2Q29weSlcblx0XHRcdFx0Y29uc3Qgc3ZTZWxPcHRzID0gc3ZDb3B5LmdldFNlbGVjdE9wdGlvbihzZWxPcHRpb25OYW1lKTtcblx0XHRcdFx0Ly8gSWYgdXNlRkxQRGVmYXVsdFZhbHVlcyA9IHRydWUsIG1lYW5zIChhcHBTdGF0ZVNWID0gc3ZEZWZhdWx0cylcblx0XHRcdFx0aWYgKCh1c2VGTFBEZWZhdWx0VmFsdWVzICYmICFzdlNlbE9wdHM/Lmxlbmd0aCkgfHwgIXVzZUZMUERlZmF1bHRWYWx1ZXMpIHtcblx0XHRcdFx0XHQvLyBpZiBkZWZhdWx0IFNWIG5lZWRzIHRvIGJlIHVzZWQsIHRoZW4gc2VsZWN0IG9wdGlvbnMgZnJvbSBkZWZhdWx0IHNlbGVjdCBvcHRpb25zIHRha2UgcHJpb3JpdHkuXG5cdFx0XHRcdFx0Ly8gZWxzZSB3ZSBtZXJnZSBib3RoOiBhbHJlYWR5IGFwcGxpZWQgU1YgYW5kIFNWIGZyb20gbmF2UGFyYW1zLlxuXHRcdFx0XHRcdGNvbnN0IHNlbGVjdE9wdGlvbnMgPSBhbHJlYWR5QXBwbGllZFNWLmdldFNlbGVjdE9wdGlvbihzZWxPcHRpb25OYW1lKTtcblx0XHRcdFx0XHRzdkNvcHkubWFzc0FkZFNlbGVjdE9wdGlvbihzZWxPcHRpb25OYW1lLCBzZWxlY3RPcHRpb25zIHx8IFtdKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gc3ZDb3B5O1xuXHRcdFx0fSwgYWRqdXN0ZWRTVik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGFkanVzdGVkU1Y7XG5cdH1cblxuXHRfcHJldmVudEluaXRpYWxTZWFyY2godmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50KTogYm9vbGVhbiB7XG5cdFx0aWYgKCF2YXJpYW50TWFuYWdlbWVudCkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGNvbnN0IGFWYXJpYW50cyA9IHZhcmlhbnRNYW5hZ2VtZW50LmdldFZhcmlhbnRzKCk7XG5cdFx0Y29uc3Qgb0N1cnJlbnRWYXJpYW50ID0gYVZhcmlhbnRzLmZpbmQoZnVuY3Rpb24gKGl0ZW0pOiBib29sZWFuIHtcblx0XHRcdHJldHVybiBpdGVtLmdldEtleSgpID09PSB2YXJpYW50TWFuYWdlbWVudC5nZXRDdXJyZW50VmFyaWFudEtleSgpO1xuXHRcdH0pO1xuXHRcdHJldHVybiAhb0N1cnJlbnRWYXJpYW50LmV4ZWN1dGVPblNlbGVjdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgRGlzcGxheUN1cnJlbmN5IHRvIFNWIGlmIGl0IGlzIG1hbmRhdG9yeSBhbmQgZXhpc3RzIGluIFNWIGRlZmF1bHRzLlxuXHQgKiBAcGFyYW0gdmlldyBWaWV3IG9mIHRoZSBMUiBmaWx0ZXIgYmFyXG5cdCAqIEBwYXJhbSBzdiBTZWxlY3Rpb24gVmFyaWFudCB0byBhcHBseVxuXHQgKiBAcGFyYW0gc3ZEZWZhdWx0cyBTZWxlY3Rpb24gVmFyaWFudCBkZWZhdWx0c1xuXHQgKi9cblx0X2FkZERlZmF1bHREaXNwbGF5Q3VycmVuY3lUb1NWKHZpZXc6IFZpZXcsIHN2OiBTZWxlY3Rpb25WYXJpYW50LCBzdkRlZmF1bHRzPzogU2VsZWN0aW9uVmFyaWFudCk6IHZvaWQge1xuXHRcdGlmICghc3ZEZWZhdWx0cyB8fCBzdkRlZmF1bHRzPy5pc0VtcHR5KCkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCB2aWV3RGF0YSA9IHZpZXcuZ2V0Vmlld0RhdGEoKSBhcyBMUlZpZXdEYXRhLFxuXHRcdFx0bWV0YU1vZGVsID0gdmlldy5nZXRNb2RlbCgpPy5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCxcblx0XHRcdGNvbnRleHRQYXRoID0gdmlld0RhdGEuY29udGV4dFBhdGggfHwgYC8ke3ZpZXdEYXRhLmVudGl0eVNldH1gLFxuXHRcdFx0bWV0YUNvbnRleHQgPSBtZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQoY29udGV4dFBhdGgpLFxuXHRcdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxNZXRhTW9kZWw+ID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFDb250ZXh0KTtcblxuXHRcdC8vIGdldERpc3BsYXlDdXJyZW5jeVByb3BlcnR5TmFtZSBhbHJlYWR5IGFwcGxpZXMgdGhlIGlzUGFyYW1ldGVyaXplZCBsb2dpY1xuXHRcdGNvbnN0IGRpc3BsYXlDdXJyZW5jeVByb3BlcnR5TmFtZSA9IHRoaXMuZ2V0RGlzcGxheUN1cnJlbmN5UHJvcGVydHlOYW1lKGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRcdGNvbnN0IGRpc3BsYXlDdXJyZW5jeUlzTWFuZGF0b3J5ID0gdGhpcy5fY2hlY2tJZkRpc3BsYXlDdXJyZW5jeUlzUmVxdWlyZWQoZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdFx0aWYgKCFkaXNwbGF5Q3VycmVuY3lJc01hbmRhdG9yeSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHN2T3B0aW9ucyA9IHN2LmdldFNlbGVjdE9wdGlvbihkaXNwbGF5Q3VycmVuY3lQcm9wZXJ0eU5hbWUpIHx8IFtdLFxuXHRcdFx0ZGVmYXVsdFNWT3B0aW9ucyA9IHN2RGVmYXVsdHMuZ2V0U2VsZWN0T3B0aW9uKGRpc3BsYXlDdXJyZW5jeVByb3BlcnR5TmFtZSkgfHwgW10sXG5cdFx0XHRkaXNwbGF5Q3VycmVuY3lEZWZhdWx0RXhpc3RzID0gZGVmYXVsdFNWT3B0aW9ucy5sZW5ndGggPiAwLFxuXHRcdFx0bm9TVkRpc3BsYXlDdXJyZW5jeUV4aXN0cyA9IHN2T3B0aW9ucy5sZW5ndGggPT09IDA7XG5cblx0XHRpZiAobm9TVkRpc3BsYXlDdXJyZW5jeUV4aXN0cyAmJiBkaXNwbGF5Q3VycmVuY3lEZWZhdWx0RXhpc3RzKSB7XG5cdFx0XHRjb25zdCBkaXNwbGF5Q3VycmVuY3lTZWxlY3RPcHRpb24gPSBkZWZhdWx0U1ZPcHRpb25zWzBdLFxuXHRcdFx0XHRzaWduID0gZGlzcGxheUN1cnJlbmN5U2VsZWN0T3B0aW9uW1wiU2lnblwiXSxcblx0XHRcdFx0b3B0aW9uID0gZGlzcGxheUN1cnJlbmN5U2VsZWN0T3B0aW9uW1wiT3B0aW9uXCJdLFxuXHRcdFx0XHRsb3cgPSBkaXNwbGF5Q3VycmVuY3lTZWxlY3RPcHRpb25bXCJMb3dcIl0sXG5cdFx0XHRcdGhpZ2ggPSBkaXNwbGF5Q3VycmVuY3lTZWxlY3RPcHRpb25bXCJIaWdoXCJdO1xuXG5cdFx0XHRzdi5hZGRTZWxlY3RPcHRpb24oZGlzcGxheUN1cnJlbmN5UHJvcGVydHlOYW1lLCBzaWduLCBvcHRpb24sIGxvdywgaGlnaCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB0aGUgZGF0YSBtb2RlbCBvYmplY3QgcGF0aCBpcyBwYXJhbWV0ZXJpemVkLlxuXHQgKiBMb29rcyBmb3IgYSBSZXN1bHRDb250ZXh0IGFubm90YXRpb24gaW4gdGhlIHN0YXJ0aW5nIGVudGl0eSdzIHR5cGVcblx0ICogYW5kIGVuc3VyZXMgdGhlcmUncyBubyB0YXJnZXQgZW50aXR5IHNldC5cblx0ICogQHBhcmFtIGRhdGFNb2RlbE9iamVjdFBhdGggVGhlIHBhdGggdG8gY2hlY2suXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgaXQncyBwYXJhbWV0ZXJpemVkLCBmYWxzZSBvdGhlcndpc2UuXG5cdCAqL1xuXHRwcml2YXRlIGlzUGFyYW1ldGVyaXplZChkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPE1ldGFNb2RlbD4pOiBib29sZWFuIHtcblx0XHRyZXR1cm4gISFkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0LmVudGl0eVR5cGU/LmFubm90YXRpb25zPy5Db21tb24/LlJlc3VsdENvbnRleHQ7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgZGlzcGxheSBjdXJyZW5jeSBwcm9wZXJ0eSBuYW1lIGJhc2VkIG9uIHRoZSBlbnRpdHkgdHlwZSdzIHBhcmFtZXRlcml6YXRpb24uXG5cdCAqIFVzZXMgdGhlIGlzUGFyYW1ldGVyaXplZCBtZXRob2QgdG8gZGVjaWRlIHdoaWNoIHByb3BlcnR5IG5hbWUgdG8gcmV0dXJuLlxuXHQgKiBAcGFyYW0gZGF0YU1vZGVsT2JqZWN0UGF0aCBUaGUgcGF0aCB0byBjaGVjay5cblx0ICogQHJldHVybnMgVGhlIGFwcHJvcHJpYXRlIGRpc3BsYXkgY3VycmVuY3kgcHJvcGVydHkgbmFtZS5cblx0ICovXG5cdGdldERpc3BsYXlDdXJyZW5jeVByb3BlcnR5TmFtZShkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPE1ldGFNb2RlbD4pOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLmlzUGFyYW1ldGVyaXplZChkYXRhTW9kZWxPYmplY3RQYXRoKSA/IFBfRElTUExBWV9DVVJSRU5DWV9QUk9QRVJUWV9OQU1FIDogRElTUExBWV9DVVJSRU5DWV9QUk9QRVJUWV9OQU1FO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBEaXNwbGF5Q3VycmVuY3kgaXMgbWFuZGF0b3J5IGZvciBmaWx0ZXJpbmcuXG5cdCAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoXG5cdCAqIEByZXR1cm5zIEJvb2xlYW5cblx0ICovXG5cdF9jaGVja0lmRGlzcGxheUN1cnJlbmN5SXNSZXF1aXJlZChkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPE1ldGFNb2RlbD4pOiBib29sZWFuIHtcblx0XHRsZXQgZGlzcGxheUN1cnJlbmN5SXNNYW5kYXRvcnkgPSBmYWxzZTtcblxuXHRcdGlmICh0aGlzLmlzUGFyYW1ldGVyaXplZChkYXRhTW9kZWxPYmplY3RQYXRoKSkge1xuXHRcdFx0ZGlzcGxheUN1cnJlbmN5SXNNYW5kYXRvcnkgPSBkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0LmVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5zb21lKFxuXHRcdFx0XHQocGFyYW1ldGVyOiBQcm9wZXJ0eSk6IGJvb2xlYW4gPT4gcGFyYW1ldGVyLm5hbWUgPT09IFBfRElTUExBWV9DVVJSRU5DWV9QUk9QRVJUWV9OQU1FXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBlbnRpdHlTZXQ6IEVudGl0eVNldCB8IHVuZGVmaW5lZCA9XG5cdFx0XHRcdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldC5fdHlwZSA9PT0gXCJFbnRpdHlTZXRcIiA/IGRhdGFNb2RlbE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQgOiB1bmRlZmluZWQsXG5cdFx0XHRcdHJlcXVpcmVkUHJvcGVydGllcyA9IGVudGl0eVNldD8uYW5ub3RhdGlvbnMuQ2FwYWJpbGl0aWVzPy5GaWx0ZXJSZXN0cmljdGlvbnM/LlJlcXVpcmVkUHJvcGVydGllcyA/PyBbXTtcblx0XHRcdGRpc3BsYXlDdXJyZW5jeUlzTWFuZGF0b3J5ID0gcmVxdWlyZWRQcm9wZXJ0aWVzLnNvbWUoXG5cdFx0XHRcdChyZXF1aXJlZFByb3BlcnR5OiBQcm9wZXJ0eVBhdGgpID0+IHJlcXVpcmVkUHJvcGVydHkudmFsdWUgPT09IERJU1BMQVlfQ1VSUkVOQ1lfUFJPUEVSVFlfTkFNRVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIGRpc3BsYXlDdXJyZW5jeUlzTWFuZGF0b3J5O1xuXHR9XG5cblx0LyoqXG5cdCAqIEFjdGl2YXRlIHZhcmlhbnQgZnJvbSB2YXJpYW50IG1hbmFnZW1lbnQgYW5kIHJldHVybiBpZiBhcHBTdGF0ZSBuZWVkcyB0byBiZSBhcHBsaWVkLlxuXHQgKiBAcGFyYW0gdmFyaWFudE1hbmFnZW1lbnQgVmFyaWFudE1hbmFnZW1lbnQgdXNlZCBieSBmaWx0ZXIgYmFyXG5cdCAqIEBwYXJhbSByZXFTdGRWYXJpYW50IElmIHN0YW5kYXJkIHZhcmlhbnQgaXMgcmVxdWlyZWQgdG8gYmUgdXNlZFxuXHQgKiBAcGFyYW0gZmlsdGVyVmFyaWFudEFwcGxpZWQgSXMgYSBmaWx0ZXIgdmFyaWFudCBhbHJlYWR5IGFwcGxpZWRcblx0ICogQHJldHVybnMgUHJvbWlzZSBmb3IgYXN5bmNocm9ub3VzIGhhbmRsaW5nXG5cdCAqL1xuXHRhc3luYyBfYWN0aXZhdGVWYXJpYW50QW5kRGV0ZXJtaW5lQXBwbHlBcHBTdGF0ZShcblx0XHR2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnQgfCB1bmRlZmluZWQsXG5cdFx0cmVxU3RkVmFyaWFudDogYm9vbGVhbixcblx0XHRmaWx0ZXJWYXJpYW50QXBwbGllZDogYm9vbGVhblxuXHQpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRpZiAodmFyaWFudE1hbmFnZW1lbnQgJiYgIWZpbHRlclZhcmlhbnRBcHBsaWVkKSB7XG5cdFx0XHRsZXQgdmFyaWFudEtleSA9IHJlcVN0ZFZhcmlhbnQgPyB2YXJpYW50TWFuYWdlbWVudC5nZXRTdGFuZGFyZFZhcmlhbnRLZXkoKSA6IHZhcmlhbnRNYW5hZ2VtZW50LmdldERlZmF1bHRWYXJpYW50S2V5KCk7XG5cdFx0XHRpZiAodmFyaWFudEtleSA9PT0gbnVsbCkge1xuXHRcdFx0XHR2YXJpYW50S2V5ID0gdmFyaWFudE1hbmFnZW1lbnQuZ2V0SWQoKTtcblx0XHRcdH1cblx0XHRcdGF3YWl0IENvbnRyb2xWYXJpYW50QXBwbHlBUEkuYWN0aXZhdGVWYXJpYW50KHtcblx0XHRcdFx0ZWxlbWVudDogdmFyaWFudE1hbmFnZW1lbnQsXG5cdFx0XHRcdHZhcmlhbnRSZWZlcmVuY2U6IHZhcmlhbnRLZXlcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIHJlcVN0ZFZhcmlhbnQgfHwgdmFyaWFudE1hbmFnZW1lbnQuZ2V0RGVmYXVsdFZhcmlhbnRLZXkoKSA9PT0gdmFyaWFudE1hbmFnZW1lbnQuZ2V0U3RhbmRhcmRWYXJpYW50S2V5KCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogVmFyaWFudCBtYW5hZ2VtZW50IHVzZWQgYnkgZmlsdGVyIGJhci5cblx0ICogQHBhcmFtIHZpZXcgVmlldyBvZiB0aGUgTFIgZmlsdGVyIGJhclxuXHQgKiBAcmV0dXJucyBWYXJpYW50TWFuYWdlbWVudCBpZiB1c2VkXG5cdCAqL1xuXHRfZ2V0RmlsdGVyQmFyVk0odmlldzogVmlldyk6IFZhcmlhbnRNYW5hZ2VtZW50IHwgdW5kZWZpbmVkIHtcblx0XHRsZXQgdmFyaWFudE1hbmFnZW1lbnQ7XG5cdFx0Y29uc3Qgdmlld0RhdGEgPSB2aWV3LmdldFZpZXdEYXRhKCkgYXMgTFJWaWV3RGF0YTtcblx0XHRzd2l0Y2ggKHZpZXdEYXRhLnZhcmlhbnRNYW5hZ2VtZW50KSB7XG5cdFx0XHRjYXNlIFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5QYWdlOlxuXHRcdFx0XHR2YXJpYW50TWFuYWdlbWVudCA9IHZpZXcuYnlJZChcImZlOjpQYWdlVmFyaWFudE1hbmFnZW1lbnRcIik7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBWYXJpYW50TWFuYWdlbWVudFR5cGUuQ29udHJvbDpcblx0XHRcdFx0dmFyaWFudE1hbmFnZW1lbnQgPSAodmlldy5nZXRDb250cm9sbGVyKCkgYXMgTGlzdFJlcG9ydENvbnRyb2xsZXIpLl9nZXRGaWx0ZXJCYXJWYXJpYW50Q29udHJvbCgpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVmFyaWFudE1hbmFnZW1lbnRUeXBlLk5vbmU6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0cmV0dXJuIHZhcmlhbnRNYW5hZ2VtZW50IGFzIFZhcmlhbnRNYW5hZ2VtZW50IHwgdW5kZWZpbmVkO1xuXHR9XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXF1aXJlLWF3YWl0XG5cdGFzeW5jIGhhbmRsZVZhcmlhbnRJZFBhc3NlZFZpYVVSTFBhcmFtcyhvVXJsUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0Y29uc3QgYVBhZ2VWYXJpYW50SWQgPSBvVXJsUGFyYW1zW1wic2FwLXVpLWZlLXZhcmlhbnQtaWRcIl0sXG5cdFx0XHRhRmlsdGVyQmFyVmFyaWFudElkID0gb1VybFBhcmFtc1tcInNhcC11aS1mZS1maWx0ZXJiYXItdmFyaWFudC1pZFwiXSxcblx0XHRcdGFUYWJsZVZhcmlhbnRJZCA9IG9VcmxQYXJhbXNbXCJzYXAtdWktZmUtdGFibGUtdmFyaWFudC1pZFwiXSxcblx0XHRcdGFDaGFydFZhcmlhbnRJZCA9IG9VcmxQYXJhbXNbXCJzYXAtdWktZmUtY2hhcnQtdmFyaWFudC1pZFwiXTtcblx0XHRsZXQgb1ZhcmlhbnRJRHM6IFZhcmlhbnRJRHMgfCB1bmRlZmluZWQ7XG5cdFx0aWYgKGFQYWdlVmFyaWFudElkIHx8IGFGaWx0ZXJCYXJWYXJpYW50SWQgfHwgYVRhYmxlVmFyaWFudElkIHx8IGFDaGFydFZhcmlhbnRJZCkge1xuXHRcdFx0b1ZhcmlhbnRJRHMgPSB7XG5cdFx0XHRcdHNQYWdlVmFyaWFudElkOiBhUGFnZVZhcmlhbnRJZCAmJiBhUGFnZVZhcmlhbnRJZFswXSxcblx0XHRcdFx0c0ZpbHRlckJhclZhcmlhbnRJZDogYUZpbHRlckJhclZhcmlhbnRJZCAmJiBhRmlsdGVyQmFyVmFyaWFudElkWzBdLFxuXHRcdFx0XHRzVGFibGVWYXJpYW50SWQ6IGFUYWJsZVZhcmlhbnRJZCAmJiBhVGFibGVWYXJpYW50SWRbMF0sXG5cdFx0XHRcdHNDaGFydFZhcmlhbnRJZDogYUNoYXJ0VmFyaWFudElkICYmIGFDaGFydFZhcmlhbnRJZFswXVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuX2hhbmRsZUNvbnRyb2xWYXJpYW50SWQob1ZhcmlhbnRJRHMpO1xuXHR9XG5cblx0YXN5bmMgX2hhbmRsZUNvbnRyb2xWYXJpYW50SWQob1ZhcmlhbnRJRHM6IFZhcmlhbnRJRHMgfCB1bmRlZmluZWQpOiBQcm9taXNlPHVua25vd24+IHtcblx0XHRsZXQgb1ZNOiBWYXJpYW50TWFuYWdlbWVudDtcblx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKT8uZ2V0VmlldygpLFxuXHRcdFx0YVByb21pc2VzOiBQcm9taXNlPGJvb2xlYW4+W10gPSBbXTtcblx0XHRjb25zdCBzVmFyaWFudE1hbmFnZW1lbnQgPSBvVmlldy5nZXRWaWV3RGF0YSgpLnZhcmlhbnRNYW5hZ2VtZW50O1xuXHRcdGlmIChvVmFyaWFudElEcyAmJiBvVmFyaWFudElEcy5zUGFnZVZhcmlhbnRJZCAmJiBzVmFyaWFudE1hbmFnZW1lbnQgPT09IFwiUGFnZVwiKSB7XG5cdFx0XHRvVk0gPSBvVmlldy5ieUlkKFwiZmU6OlBhZ2VWYXJpYW50TWFuYWdlbWVudFwiKSBhcyBWYXJpYW50TWFuYWdlbWVudDtcblx0XHRcdHRoaXMuX2hhbmRsZVBhZ2VWYXJpYW50SWQob1ZhcmlhbnRJRHMsIG9WTSwgYVByb21pc2VzKTtcblx0XHR9IGVsc2UgaWYgKG9WYXJpYW50SURzICYmIHNWYXJpYW50TWFuYWdlbWVudCA9PT0gXCJDb250cm9sXCIpIHtcblx0XHRcdGlmIChvVmFyaWFudElEcy5zRmlsdGVyQmFyVmFyaWFudElkKSB7XG5cdFx0XHRcdG9WTSA9IChvVmlldy5nZXRDb250cm9sbGVyKCkgYXMgTGlzdFJlcG9ydENvbnRyb2xsZXIpLl9nZXRGaWx0ZXJCYXJWYXJpYW50Q29udHJvbCgpITtcblx0XHRcdFx0dGhpcy5faGFuZGxlRmlsdGVyQmFyVmFyaWFudENvbnRyb2xJZChvVmFyaWFudElEcywgb1ZNLCBhUHJvbWlzZXMpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoYVByb21pc2VzKTtcblx0fVxuXG5cdC8qXG5cdCAqIEhhbmRsZXMgcGFnZSBsZXZlbCB2YXJpYW50IGFuZCBwYXNzZXMgdGhlIHZhcmlhbnQgdG8gdGhlIGZ1bmN0aW9uIHRoYXQgcHVzaGVzIHRoZSBwcm9taXNlIHRvIHRoZSBwcm9taXNlIGFycmF5XG5cdCAqXG5cdCAqIEBwYXJhbSBvVmFyaW5hdElEcyBjb250YWlucyBhbiBvYmplY3Qgb2YgYWxsIHZhcmlhbnQgSURzXG5cdCAqIEBwYXJhbSBvVk0gY29udGFpbnMgdGhlIHZhaXJhbnQgbWFuYWdlbWVudCBvYmplY3QgZm9yIHRoZSBwYWdlIHZhcmlhbnRcblx0ICogQHBhcmFtIGFQcm9taXNlcyBpcyBhbiBhcnJheSBvZiBhbGwgcHJvbWlzZXNcblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9oYW5kbGVQYWdlVmFyaWFudElkKG9WYXJpYW50SURzOiBWYXJpYW50SURzLCBvVk06IFZhcmlhbnRNYW5hZ2VtZW50LCBhUHJvbWlzZXM6IFByb21pc2U8Ym9vbGVhbj5bXSk6IHZvaWQge1xuXHRcdG9WTS5nZXRWYXJpYW50cygpPy5mb3JFYWNoKChvVmFyaWFudDogVmFyaWFudE9iamVjdCkgPT4ge1xuXHRcdFx0dGhpcy5fZmluZEFuZFB1c2hWYXJpYW50VG9Qcm9taXNlKG9WYXJpYW50LCBvVmFyaWFudElEcy5zUGFnZVZhcmlhbnRJZCwgb1ZNLCBhUHJvbWlzZXMsIHRydWUpO1xuXHRcdH0pO1xuXHR9XG5cblx0Lypcblx0ICogSGFuZGxlcyBjb250cm9sIGxldmVsIHZhcmlhbnQgZm9yIGZpbHRlciBiYXIgYW5kIHBhc3NlcyB0aGUgdmFyaWFudCB0byB0aGUgZnVuY3Rpb24gdGhhdCBwdXNoZXMgdGhlIHByb21pc2UgdG8gdGhlIHByb21pc2UgYXJyYXlcblx0ICpcblx0ICogQHBhcmFtIG9WYXJpbmF0SURzIGNvbnRhaW5zIGFuIG9iamVjdCBvZiBhbGwgdmFyaWFudCBJRHNcblx0ICogQHBhcmFtIG9WTSBjb250YWlucyB0aGUgdmFpcmFudCBtYW5hZ2VtZW50IG9iamVjdCBmb3IgdGhlIGZpbHRlciBiYXJcblx0ICogQHBhcmFtIGFQcm9taXNlcyBpcyBhbiBhcnJheSBvZiBhbGwgcHJvbWlzZXNcblx0ICogQHByaXZhdGVcblx0ICovXG5cblx0X2hhbmRsZUZpbHRlckJhclZhcmlhbnRDb250cm9sSWQob1ZhcmlhbnRJRHM6IFZhcmlhbnRJRHMsIG9WTTogVmFyaWFudE1hbmFnZW1lbnQsIGFQcm9taXNlczogUHJvbWlzZTxib29sZWFuPltdKTogdm9pZCB7XG5cdFx0aWYgKG9WTSkge1xuXHRcdFx0b1ZNLmdldFZhcmlhbnRzKCkuZm9yRWFjaCgob1ZhcmlhbnQ6IFZhcmlhbnRPYmplY3QpID0+IHtcblx0XHRcdFx0dGhpcy5fZmluZEFuZFB1c2hWYXJpYW50VG9Qcm9taXNlKG9WYXJpYW50LCBvVmFyaWFudElEcy5zRmlsdGVyQmFyVmFyaWFudElkLCBvVk0sIGFQcm9taXNlcywgdHJ1ZSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKlxuXHQgKiBNYXRjaGVzIHRoZSB2YXJpYW50IElEIHByb3ZpZGVkIGluIHRoZSB1cmwgdG8gdGhlIGF2YWlsYWJsZSB2YWlyYW50IElEcyBhbmQgcHVzaGVzIHRoZSBhcHByb3ByaWF0ZSBwcm9taXNlIHRvIHRoZSBwcm9taXNlIGFycmF5XG5cdCAqXG5cdCAqIEBwYXJhbSBvVmFyaWFudCBpcyBhbiBvYmplY3QgZm9yIGEgc3BlY2lmaWMgdmFyaWFudFxuXHQgKiBAcGFyYW0gc1ZhcmlhbnRJZCBpcyB0aGUgdmFyaWFudCBJRCBwcm92aWRlZCBpbiB0aGUgdXJsXG5cdCAqIEBwYXJhbSBvVk0gaXMgdGhlIHZhcmlhbnQgbWFuYWdlbWVudCBvYmplY3QgZm9yIHRoZSBzcGVjZmljIHZhcmlhbnRcblx0ICogQHBhcmFtIGFQcm9taXNlcyBpcyBhbiBhcnJheSBvZiBwcm9taXNlc1xuXHQgKiBAcGFyYW0gYkZpbHRlclZhcmlhbnRBcHBsaWVkIGlzIGFuIG9wdGlvbmFsIHBhcmFtZXRlciB3aGljaCBpcyBzZXQgdG8gdHVyZSBpbiBjYXNlIHRoZSBmaWx0ZXIgdmFyaWFudCBpcyBhcHBsaWVkXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZmluZEFuZFB1c2hWYXJpYW50VG9Qcm9taXNlKFxuXHRcdC8vVGhpcyBmdW5jdGlvbiBmaW5kcyB0aGUgc3VpdGFibGUgdmFyaWFudCBmb3IgdGhlIHZhcmlhbnRJRCBwcm92aWRlZCBpbiB0aGUgdXJsIGFuZCBwdXNoZXMgdGhlbSB0byB0aGUgcHJvbWlzZSBhcnJheVxuXHRcdG9WYXJpYW50OiBWYXJpYW50T2JqZWN0LFxuXHRcdHNWYXJpYW50SWQ6IHN0cmluZyxcblx0XHRvVk06IFZhcmlhbnRNYW5hZ2VtZW50LFxuXHRcdGFQcm9taXNlczogUHJvbWlzZTxib29sZWFuPltdLFxuXHRcdGJGaWx0ZXJWYXJpYW50QXBwbGllZD86IGJvb2xlYW5cblx0KTogdm9pZCB7XG5cdFx0aWYgKG9WYXJpYW50LmtleSA9PT0gc1ZhcmlhbnRJZCkge1xuXHRcdFx0YVByb21pc2VzLnB1c2godGhpcy5fYXBwbHlDb250cm9sVmFyaWFudChvVk0sIHNWYXJpYW50SWQsIGJGaWx0ZXJWYXJpYW50QXBwbGllZCkpO1xuXHRcdH1cblx0fVxuXG5cdGFzeW5jIF9hcHBseUNvbnRyb2xWYXJpYW50KG9WYXJpYW50OiBWYXJpYW50TWFuYWdlbWVudCwgc1ZhcmlhbnRJRDogc3RyaW5nLCBiRmlsdGVyVmFyaWFudEFwcGxpZWQgPSBmYWxzZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGNvbnN0IHNWYXJpYW50UmVmZXJlbmNlID0gdGhpcy5fY2hlY2tJZlZhcmlhbnRJZElzQXZhaWxhYmxlKG9WYXJpYW50LCBzVmFyaWFudElEKSA/IHNWYXJpYW50SUQgOiBvVmFyaWFudC5nZXRTdGFuZGFyZFZhcmlhbnRLZXkoKTtcblx0XHRjb25zdCBvVk0gPSBDb250cm9sVmFyaWFudEFwcGx5QVBJLmFjdGl2YXRlVmFyaWFudCh7XG5cdFx0XHRlbGVtZW50OiBvVmFyaWFudCxcblx0XHRcdHZhcmlhbnRSZWZlcmVuY2U6IHNWYXJpYW50UmVmZXJlbmNlXG5cdFx0fSk7XG5cdFx0cmV0dXJuIG9WTS50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBiRmlsdGVyVmFyaWFudEFwcGxpZWQ7XG5cdFx0fSk7XG5cdH1cblxuXHRfY2hlY2tJZlZhcmlhbnRJZElzQXZhaWxhYmxlKG9WTTogVmFyaWFudE1hbmFnZW1lbnQsIHNWYXJpYW50SWQ6IHN0cmluZyB8IG51bGwpOiBib29sZWFuIHtcblx0XHRjb25zdCBhVmFyaWFudHMgPSBvVk0uZ2V0VmFyaWFudHMoKTtcblx0XHRsZXQgYklzQ29udHJvbFN0YXRlVmFyaWFudEF2YWlsYWJsZSA9IGZhbHNlO1xuXHRcdGFWYXJpYW50cy5mb3JFYWNoKGZ1bmN0aW9uIChvVmFyaWFudCkge1xuXHRcdFx0aWYgKG9WYXJpYW50LmdldEtleSgpID09PSBzVmFyaWFudElkKSB7XG5cdFx0XHRcdGJJc0NvbnRyb2xTdGF0ZVZhcmlhbnRBdmFpbGFibGUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBiSXNDb250cm9sU3RhdGVWYXJpYW50QXZhaWxhYmxlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBGaWx0ZXJCYXIgY29udHJvbC5cblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0aWQhOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIERlZmluZXMgdGhlIHJlbGF0aXZlIHBhdGggb2YgdGhlIHByb3BlcnR5IGluIHRoZSBtZXRhbW9kZWwsIGJhc2VkIG9uIHRoZSBjdXJyZW50IGNvbnRleHRQYXRoLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCIsXG5cdFx0ZXhwZWN0ZWRBbm5vdGF0aW9uczogW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uRmllbGRzXCJdLFxuXHRcdGV4cGVjdGVkVHlwZXM6IFtcIkVudGl0eVNldFwiLCBcIkVudGl0eVR5cGVcIl1cblx0fSlcblx0bWV0YVBhdGghOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIERlZmluZXMgdGhlIHBhdGggb2YgdGhlIGNvbnRleHQgdXNlZCBpbiB0aGUgY3VycmVudCBwYWdlIG9yIGJsb2NrLlxuXHQgKiBUaGlzIHNldHRpbmcgaXMgZGVmaW5lZCBieSB0aGUgZnJhbWV3b3JrLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCIsXG5cdFx0ZXhwZWN0ZWRUeXBlczogW1wiRW50aXR5U2V0XCIsIFwiRW50aXR5VHlwZVwiLCBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiXVxuXHR9KVxuXHRjb250ZXh0UGF0aCE6IHN0cmluZztcblxuXHQvKipcblx0ICogSWYgdHJ1ZSwgdGhlIHNlYXJjaCBpcyB0cmlnZ2VyZWQgYXV0b21hdGljYWxseSB3aGVuIGEgZmlsdGVyIHZhbHVlIGlzIGNoYW5nZWQuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pXG5cdGxpdmVNb2RlPzogYm9vbGVhbjtcblxuXHQvKipcblx0ICogUGFyYW1ldGVyIHdoaWNoIHNldHMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIEZpbHRlckJhciBidWlsZGluZyBibG9ja1xuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiwgZGVmYXVsdFZhbHVlOiB0cnVlIH0pXG5cdHZpc2libGU/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBEaXNwbGF5cyBwb3NzaWJsZSBlcnJvcnMgZHVyaW5nIHRoZSBzZWFyY2ggaW4gYSBtZXNzYWdlIGJveFxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiwgZGVmYXVsdFZhbHVlOiB0cnVlIH0pXG5cdHNob3dNZXNzYWdlcz86IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlICdDbGVhcicgYnV0dG9uIG9uIHRoZSBGaWx0ZXJCYXIuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pXG5cdHNob3dDbGVhckJ1dHRvbj86IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIEFnZ3JlZ2F0ZSBmaWx0ZXIgZmllbGRzIG9mIHRoZSBGaWx0ZXJCYXIgYnVpbGRpbmcgYmxvY2tcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QGFnZ3JlZ2F0aW9uKHsgdHlwZTogXCJzYXAuZmUubWFjcm9zLmZpbHRlckJhci5GaWx0ZXJGaWVsZFwiLCBtdWx0aXBsZTogdHJ1ZSB9KVxuXHRmaWx0ZXJGaWVsZHM/OiBGaWx0ZXJGaWVsZFtdO1xuXG5cdGNvbnRlbnQhOiBGaWx0ZXJCYXI7XG5cblx0LyoqXG5cdCAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgJ0dvJyBidXR0b24gaXMgcHJlc3NlZCBvciBhZnRlciBhIGNvbmRpdGlvbiBjaGFuZ2UuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBldmVudCgpXG5cdHNlYXJjaCE6IHN0cmluZztcblxuXHQvKipcblx0ICogVGhpcyBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSAnR28nIGJ1dHRvbiBpcyBwcmVzc2VkIG9yIGFmdGVyIGEgY29uZGl0aW9uIGNoYW5nZS4gVGhpcyBpcyBvbmx5IGludGVybmFsbHkgdXNlZCBieSBzYXAuZmUgKEZpb3JpIGVsZW1lbnRzKSBhbmRcblx0ICogZXhwb3NlcyBwYXJhbWV0ZXJzIGZyb20gaW50ZXJuYWwgTURDLUZpbHRlckJhciBzZWFyY2ggZXZlbnRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdEBldmVudCgpXG5cdGludGVybmFsU2VhcmNoITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIGFmdGVyIGVpdGhlciBhIGZpbHRlciB2YWx1ZSBvciB0aGUgdmlzaWJpbGl0eSBvZiBhIGZpbHRlciBpdGVtIGhhcyBiZWVuIGNoYW5nZWQuIFRoZSBldmVudCBjb250YWlucyBjb25kaXRpb25zIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBldmVudCgpXG5cdGZpbHRlckNoYW5nZWQhOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgJ0NsZWFyJyBidXR0b24gaXMgcHJlc3NlZC4gVGhpcyBpcyBvbmx5IHBvc3NpYmxlIHdoZW4gdGhlICdDbGVhcicgYnV0dG9uIGlzIGVuYWJsZWQuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBldmVudCgpXG5cdGFmdGVyQ2xlYXIhOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgYWZ0ZXIgZWl0aGVyIGEgZmlsdGVyIHZhbHVlIG9yIHRoZSB2aXNpYmlsaXR5IG9mIGEgZmlsdGVyIGl0ZW0gaGFzIGJlZW4gY2hhbmdlZC4gVGhlIGV2ZW50IGNvbnRhaW5zIGNvbmRpdGlvbnMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycy5cblx0ICogVGhpcyBpcyB1c2VkIGludGVybmFsbHkgb25seSBieSBzYXAuZmUgKEZpb3JpIEVsZW1lbnRzKS4gVGhpcyBleHBvc2VzIHBhcmFtZXRlcnMgZnJvbSB0aGUgTURDLUZpbHRlckJhciBmaWx0ZXJDaGFuZ2VkIGV2ZW50IHRoYXQgaXMgdXNlZCBieSBzYXAuZmUgaW4gc29tZSBjYXNlcy5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdEBldmVudCgpXG5cdGludGVybmFsRmlsdGVyQ2hhbmdlZCE6IHN0cmluZztcblxuXHRwcml2YXRlIHRlbGVtZXRyeT86IEZpbHRlckJhclRlbGVtZXRyeTtcblxuXHRjb25zdHJ1Y3Rvcihwcm9wcz86ICRDb250cm9sU2V0dGluZ3MgJiBQcm9wZXJ0aWVzT2Y8RmlsdGVyQmFyQVBJPiwgb3RoZXJzPzogJENvbnRyb2xTZXR0aW5ncykge1xuXHRcdHN1cGVyKHByb3BzLCBvdGhlcnMpO1xuXHRcdHRoaXMudGVsZW1ldHJ5ID0gbmV3IEZpbHRlckJhclRlbGVtZXRyeSh0aGlzKTtcblx0XHR0aGlzLmF0dGFjaFN0YXRlQ2hhbmdlSGFuZGxlcigpO1xuXHR9XG5cblx0cHJpdmF0ZSBhdHRhY2hTdGF0ZUNoYW5nZUhhbmRsZXIoKTogdm9pZCB7XG5cdFx0U3RhdGVVdGlsLmRldGFjaFN0YXRlQ2hhbmdlKHRoaXMuc3RhdGVDaGFuZ2VIYW5kbGVyKTtcblx0XHRTdGF0ZVV0aWwuYXR0YWNoU3RhdGVDaGFuZ2UodGhpcy5zdGF0ZUNoYW5nZUhhbmRsZXIpO1xuXHR9XG5cblx0c3RhdGVDaGFuZ2VIYW5kbGVyKG9FdmVudDogRXZlbnQ8eyBjb250cm9sOiBDb250cm9sIH0+KTogdm9pZCB7XG5cdFx0Y29uc3QgY29udHJvbCA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJjb250cm9sXCIpO1xuXHRcdGlmIChjb250cm9sLmlzQTxGaWx0ZXJCYXI+KFwic2FwLnVpLm1kYy5GaWx0ZXJCYXJcIikpIHtcblx0XHRcdGNvbnN0IGZpbHRlckJhckFQSSA9IGNvbnRyb2wuZ2V0UGFyZW50KCkgYXMgdW5rbm93biBhcyB7IGhhbmRsZVN0YXRlQ2hhbmdlPzogRnVuY3Rpb24gfTtcblx0XHRcdGlmIChmaWx0ZXJCYXJBUEk/LmhhbmRsZVN0YXRlQ2hhbmdlKSB7XG5cdFx0XHRcdGZpbHRlckJhckFQSS5oYW5kbGVTdGF0ZUNoYW5nZSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdEB4bWxFdmVudEhhbmRsZXIoKVxuXHRoYW5kbGVTZWFyY2gob0V2ZW50OiBGaWx0ZXJCYXJCYXNlJFNlYXJjaEV2ZW50KTogdm9pZCB7XG5cdFx0Y29uc3Qgb0ZpbHRlckJhciA9IG9FdmVudC5nZXRTb3VyY2UoKSBhcyBGaWx0ZXJCYXIgfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgZXZlbnRQYXJhbWV0ZXJzID0gb0V2ZW50LmdldFBhcmFtZXRlcnMoKTtcblx0XHRpZiAob0ZpbHRlckJhcikge1xuXHRcdFx0Y29uc3QgY29uZGl0aW9ucyA9IChvRmlsdGVyQmFyLmdldEZpbHRlckNvbmRpdGlvbnMoKSA/PyB7fSkgYXMgUmVjb3JkPHN0cmluZywgQ29uZGl0aW9uT2JqZWN0W10+O1xuXHRcdFx0Y29uc3QgcHJlcGFyZWRFdmVudFBhcmFtZXRlcnMgPSB0aGlzLl9wcmVwYXJlRXZlbnRQYXJhbWV0ZXJzKG9GaWx0ZXJCYXIpO1xuXHRcdFx0dGhpcy50ZWxlbWV0cnk/Lm9uU2VhcmNoKGV2ZW50UGFyYW1ldGVycywgY29uZGl0aW9ucyk7XG5cdFx0XHR0aGlzLmZpcmVFdmVudChcImludGVybmFsU2VhcmNoXCIsIG1lcmdlKHsgY29uZGl0aW9uczogY29uZGl0aW9ucyB9LCBldmVudFBhcmFtZXRlcnMpKTtcblx0XHRcdHRoaXMuZmlyZUV2ZW50KFwic2VhcmNoXCIsIG1lcmdlKHsgcmVhc29uOiBldmVudFBhcmFtZXRlcnMucmVhc29uIH0sIHByZXBhcmVkRXZlbnRQYXJhbWV0ZXJzKSk7XG5cdFx0XHR0aGlzLl9oYXNQZW5kaW5nRmlsdGVycyA9IGZhbHNlO1xuXHRcdFx0aWYgKCF0aGlzLmxpdmVNb2RlKSB7XG5cdFx0XHRcdHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKT8uZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRAeG1sRXZlbnRIYW5kbGVyKClcblx0aGFuZGxlRmlsdGVyQ2hhbmdlZChvRXZlbnQ6IEZpbHRlckJhckJhc2UkRmlsdGVyc0NoYW5nZWRFdmVudCk6IHZvaWQge1xuXHRcdGNvbnN0IGZpbHRlckJhciA9IG9FdmVudC5nZXRTb3VyY2UoKSBhcyBGaWx0ZXJCYXIgfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3Qgb0V2ZW50UGFyYW1ldGVycyA9IG9FdmVudC5nZXRQYXJhbWV0ZXJzKCk7XG5cdFx0aWYgKGZpbHRlckJhcikge1xuXHRcdFx0Y29uc3Qgb0NvbmRpdGlvbnMgPSBmaWx0ZXJCYXIuZ2V0RmlsdGVyQ29uZGl0aW9ucygpO1xuXHRcdFx0Y29uc3QgZXZlbnRQYXJhbWV0ZXJzOiBvYmplY3QgPSB0aGlzLl9wcmVwYXJlRXZlbnRQYXJhbWV0ZXJzKGZpbHRlckJhcik7XG5cdFx0XHR0aGlzLnRlbGVtZXRyeT8ub25GaWx0ZXJzQ2hhbmdlZCh0aGlzLl9nZXRGaWx0ZXJCYXJSZWFzb24oZmlsdGVyQmFyKSk7XG5cdFx0XHR0aGlzLmZpcmVFdmVudChcImludGVybmFsRmlsdGVyQ2hhbmdlZFwiLCBtZXJnZSh7IGNvbmRpdGlvbnM6IG9Db25kaXRpb25zIH0sIG9FdmVudFBhcmFtZXRlcnMpKTtcblx0XHRcdHRoaXMuZmlyZUV2ZW50KFwiZmlsdGVyQ2hhbmdlZFwiLCBldmVudFBhcmFtZXRlcnMpO1xuXHRcdFx0Ly8gU2V0IGhhc1BlbmRpbmdGaWx0ZXJzIHRvIHRydWUgb25seSBpZiBjb25kaXRpb25zQmFzZWQgaXMgdHJ1ZVxuXHRcdFx0aWYgKG9FdmVudFBhcmFtZXRlcnM/LmNvbmRpdGlvbnNCYXNlZCkge1xuXHRcdFx0XHR0aGlzLl9oYXNQZW5kaW5nRmlsdGVycyA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X2dldEZpbHRlckJhclJlYXNvbihmaWx0ZXJCYXI6IEZpbHRlckJhciAmIHsgX3NSZWFzb24/OiBzdHJpbmcgfSk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGZpbHRlckJhcj8uX3NSZWFzb24gPz8gXCJcIjtcblx0fVxuXG5cdF9wcmVwYXJlRXZlbnRQYXJhbWV0ZXJzKG9GaWx0ZXJCYXI6IEZpbHRlckJhcik6IFBhcnRpYWw8SW50ZXJuYWxCaW5kaW5nSW5mbz4ge1xuXHRcdGNvbnN0IHsgcGFyYW1ldGVycywgZmlsdGVycywgc2VhcmNoIH0gPSBGaWx0ZXJVdGlscy5nZXRGaWx0ZXJzKG9GaWx0ZXJCYXIgYXMgdW5rbm93biBhcyBJRmlsdGVyQ29udHJvbCkgfHwge307XG5cblx0XHRyZXR1cm4geyBwYXJhbWV0ZXJzLCBmaWx0ZXJzLCBzZWFyY2ggfTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIGZpbHRlciB2YWx1ZXMgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eSBpbiB0aGUgZmlsdGVyIGJhci5cblx0ICogVGhlIGZpbHRlciB2YWx1ZXMgY2FuIGJlIGVpdGhlciBhIHNpbmdsZSB2YWx1ZSBvciBhbiBhcnJheSBvZiB2YWx1ZXMuXG5cdCAqIEVhY2ggZmlsdGVyIHZhbHVlIG11c3QgYmUgcmVwcmVzZW50ZWQgYXMgYSBwcmltaXRpdmUgdmFsdWUuXG5cdCAqIEBwYXJhbSBzQ29uZGl0aW9uUGF0aCBUaGUgcGF0aCB0byB0aGUgcHJvcGVydHkgYXMgYSBjb25kaXRpb24gcGF0aFxuXHQgKiBAcGFyYW0gW3NPcGVyYXRvcl0gVGhlIG9wZXJhdG9yIHRvIGJlIHVzZWQgKG9wdGlvbmFsKSAtIGlmIG5vdCBzZXQsIHRoZSBkZWZhdWx0IG9wZXJhdG9yIChFUSkgd2lsbCBiZSB1c2VkXG5cdCAqIEBwYXJhbSB2VmFsdWVzIFRoZSB2YWx1ZXMgdG8gYmUgYXBwbGllZFxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgZm9yIGFzeW5jaHJvbm91cyBoYW5kbGluZ1xuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhc3luYyBzZXRGaWx0ZXJWYWx1ZXMoXG5cdFx0c0NvbmRpdGlvblBhdGg6IHN0cmluZyxcblx0XHRzT3BlcmF0b3I6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHR2VmFsdWVzPzogdW5kZWZpbmVkIHwgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IHN0cmluZ1tdIHwgbnVtYmVyW10gfCBib29sZWFuW11cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuXHRcdFx0dlZhbHVlcyA9IHNPcGVyYXRvcjtcblx0XHRcdHJldHVybiBGaWx0ZXJVdGlscy5zZXRGaWx0ZXJWYWx1ZXModGhpcy5jb250ZW50LCBzQ29uZGl0aW9uUGF0aCwgdlZhbHVlcyk7XG5cdFx0fVxuXHRcdHJldHVybiBGaWx0ZXJVdGlscy5zZXRGaWx0ZXJWYWx1ZXModGhpcy5jb250ZW50LCBzQ29uZGl0aW9uUGF0aCwgc09wZXJhdG9yLCB2VmFsdWVzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIEFjdGl2ZSBGaWx0ZXJzIFRleHQgU3VtbWFyeSBmb3IgdGhlIGZpbHRlciBiYXIuXG5cdCAqIEByZXR1cm5zIEFjdGl2ZSBmaWx0ZXJzIHN1bW1hcnkgYXMgdGV4dFxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRnZXRBY3RpdmVGaWx0ZXJzVGV4dCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLmNvbnRlbnQ/LmdldEFzc2lnbmVkRmlsdGVyc1RleHQoKT8uZmlsdGVyc1RleHQgfHwgXCJcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBQcm92aWRlcyBhbGwgdGhlIGZpbHRlcnMgdGhhdCBhcmUgY3VycmVudGx5IGFjdGl2ZVxuXHQgKiBhbG9uZyB3aXRoIHRoZSBzZWFyY2ggZXhwcmVzc2lvbi5cblx0ICogQHJldHVybnMgQW4gYXJyYXkgb2YgYWN0aXZlIGZpbHRlcnMgYW5kIHRoZSBzZWFyY2ggZXhwcmVzc2lvbi5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0Z2V0RmlsdGVycygpOiBvYmplY3Qge1xuXHRcdHJldHVybiBGaWx0ZXJVdGlscy5nZXRGaWx0ZXJzKHRoaXMuY29udGVudCBhcyBJRmlsdGVyQ29udHJvbCkgfHwge307XG5cdH1cblxuXHQvKipcblx0ICogVHJpZ2dlcnMgdGhlIEFQSSBzZWFyY2ggb24gdGhlIGZpbHRlciBiYXIuXG5cdCAqIEByZXR1cm5zIFJldHVybnMgYSBwcm9taXNlIHdoaWNoIHJlc29sdmVzIGlmIGZpbHRlciBnbyBpcyB0cmlnZ2VyZWQgc3VjY2Vzc2Z1bGx5OyBvdGhlcndpc2UgZ2V0cyByZWplY3RlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgdHJpZ2dlclNlYXJjaCgpOiBQcm9taXNlPG9iamVjdCB8IHVuZGVmaW5lZD4ge1xuXHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuY29udGVudDtcblx0XHR0cnkge1xuXHRcdFx0aWYgKGZpbHRlckJhcikge1xuXHRcdFx0XHRhd2FpdCBmaWx0ZXJCYXIud2FpdEZvckluaXRpYWxpemF0aW9uKCk7XG5cdFx0XHRcdHJldHVybiBhd2FpdCBmaWx0ZXJCYXIudHJpZ2dlclNlYXJjaCgpO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcblx0XHRcdExvZy5lcnJvcihgRkUgOiBCdWlsZGluZ2Jsb2NrIDogRmlsdGVyQmFyIDogJHttZXNzYWdlfWApO1xuXHRcdFx0dGhyb3cgRXJyb3IobWVzc2FnZSk7XG5cdFx0fVxuXHR9XG5cblx0aXNTZW1hbnRpY0RhdGVGaWx0ZXJBcHBsaWVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBTZW1hbnRpY0RhdGVPcGVyYXRvcnMuaGFzU2VtYW50aWNEYXRlT3BlcmF0aW9ucyh0aGlzLmNvbnRlbnQuZ2V0Q29uZGl0aW9ucygpLCBmYWxzZSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBzZWxlY3Rpb24gdmFyaWFudCBmcm9tIHRoZSBmaWx0ZXIgYmFyLlxuXHQgKiBOb3RlOiBUaGlzIG1ldGhvZCByZXR1cm5zIGFsbCB0aGUgZmlsdGVyIHZhbHVlcyB0aGF0IGFyZSBzZXQgaW4gdGhlIGZpbHRlciBiYXIsIGluY2x1ZGluZyB0aGUgdGV4dCBmcm9tIHRoZSBzZWFyY2ggZmllbGQgKHdpdGggJHNlYXJjaCBhcyB0aGUgcHJvcGVydHkgbmFtZSkuIEhvd2V2ZXIsIGl0IGRvZXNuJ3QgcmV0dXJuIGFueSBmaWx0ZXIgZmllbGQgY29uZGl0aW9uIHRoYXQgdXNlcyBhIGN1c3RvbSBvcGVyYXRvci5cblx0ICogQHJldHVybnMgQSBwcm9taXNlIHdoaWNoIHJlc29sdmVzIHdpdGggYSB7QGxpbmsgc2FwLmZlLm5hdmlnYXRpb24uU2VsZWN0aW9uVmFyaWFudH1cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgZ2V0U2VsZWN0aW9uVmFyaWFudCgpOiBQcm9taXNlPFNlbGVjdGlvblZhcmlhbnQ+IHtcblx0XHRjb25zdCBzZWxlY3Rpb25WYXJpYW50ID0gYXdhaXQgc3RhdGVIZWxwZXIuZ2V0U2VsZWN0aW9uVmFyaWFudCh0aGlzLmdldENvbnRlbnQoKSk7XG5cdFx0Y29uc3QgY29udHJvbGxlciA9IHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcjtcblx0XHRpZiAoY29udHJvbGxlciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCB2aWV3ID0gY29udHJvbGxlcj8uZ2V0VmlldygpLFxuXHRcdFx0XHRhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodmlldyksXG5cdFx0XHRcdG5hdmlnYXRpb25TZXJ2aWNlID0gYXBwQ29tcG9uZW50Py5nZXROYXZpZ2F0aW9uU2VydmljZSgpLFxuXHRcdFx0XHRkYXRhTW9kZWxPYmplY3QgPSB0aGlzLmdldERhdGFNb2RlbE9iamVjdEZvck1ldGFQYXRoKHRoaXMubWV0YVBhdGgpO1xuXHRcdFx0aWYgKGRhdGFNb2RlbE9iamVjdD8udGFyZ2V0RW50aXR5U2V0Py5uYW1lKSB7XG5cdFx0XHRcdGNvbnN0IHNDb250ZXh0VXJsID1cblx0XHRcdFx0XHRkYXRhTW9kZWxPYmplY3Q/LnRhcmdldEVudGl0eVNldD8ubmFtZSAmJlxuXHRcdFx0XHRcdG5hdmlnYXRpb25TZXJ2aWNlPy5jb25zdHJ1Y3RDb250ZXh0VXJsKGRhdGFNb2RlbE9iamVjdD8udGFyZ2V0RW50aXR5U2V0Py5uYW1lLCB2aWV3LmdldE1vZGVsKCkpO1xuXHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50LnNldEZpbHRlckNvbnRleHRVcmwoc0NvbnRleHRVcmwpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gc2VsZWN0aW9uVmFyaWFudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGxpc3Qgb2YgbWFuZGF0b3J5IGZpbHRlciBwcm9wZXJ0eSBuYW1lcy5cblx0ICogQHJldHVybnMgVGhlIGxpc3Qgb2YgbWFuZGF0b3J5IGZpbHRlciBwcm9wZXJ0eSBuYW1lc1xuXHQgKi9cblx0Z2V0TWFuZGF0b3J5RmlsdGVyUHJvcGVydHlOYW1lcygpOiBzdHJpbmdbXSB7XG5cdFx0cmV0dXJuICh0aGlzLmNvbnRlbnQuZ2V0UHJvcGVydHlJbmZvU2V0KCkgYXMgQ29udHJvbFByb3BlcnR5SW5mb1tdKVxuXHRcdFx0LmZpbHRlcihmdW5jdGlvbiAoZmlsdGVyUHJvcCkge1xuXHRcdFx0XHRyZXR1cm4gZmlsdGVyUHJvcC5yZXF1aXJlZDtcblx0XHRcdH0pXG5cdFx0XHQubWFwKGZ1bmN0aW9uIChyZXF1aXJlZFByb3ApIHtcblx0XHRcdFx0cmV0dXJuIHJlcXVpcmVkUHJvcC5jb25kaXRpb25QYXRoO1xuXHRcdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBmaWx0ZXIgYmFyIHBhcmFtZXRlcnMgZm9yIGEgcGFyYW1ldGVyaXplZCBzZXJ2aWNlLlxuXHQgKiBAcmV0dXJucyBBcnJheSBvZiBwYXJhbWV0ZXJzIGNvbmZpZ3VyZWQgaW4gYSBwYXJhbWV0ZXJpemVkIHNlcnZpY2Vcblx0ICovXG5cblx0Z2V0UGFyYW1ldGVycygpOiBzdHJpbmdbXSB7XG5cdFx0Y29uc3QgZmlsdGVyQmFyID0gdGhpcy5jb250ZW50O1xuXHRcdGNvbnN0IHBhcmFtZXRlcnMgPSBmaWx0ZXJCYXIuZGF0YShcInBhcmFtZXRlcnNcIik7XG5cdFx0aWYgKHBhcmFtZXRlcnMpIHtcblx0XHRcdHJldHVybiBBcnJheS5pc0FycmF5KHBhcmFtZXRlcnMpID8gcGFyYW1ldGVycyA6IEpTT04ucGFyc2UocGFyYW1ldGVycyk7XG5cdFx0fVxuXHRcdHJldHVybiBbXTtcblx0fVxuXG5cdGdldFZhcmlhbnQoKTogVmFyaWFudERhdGEgfCB1bmRlZmluZWQge1xuXHRcdGxldCBjdXJyZW50VmFyaWFudDtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgdmFyaWFudE1vZGVsID0gdGhpcy5nZXRNb2RlbChcIiRGbGV4VmFyaWFudHNcIikgYXMgVmFyaWFudE1vZGVsIHwgdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgdmFyaWFudEJhY2tSZWZlcmVuY2UgPSB0aGlzLmNvbnRlbnQuZ2V0VmFyaWFudEJhY2tyZWZlcmVuY2UoKTtcblxuXHRcdFx0aWYgKHZhcmlhbnRNb2RlbCAmJiB2YXJpYW50QmFja1JlZmVyZW5jZSkge1xuXHRcdFx0XHRjdXJyZW50VmFyaWFudCA9IHZhcmlhbnRNb2RlbC5nZXRWYXJpYW50KHZhcmlhbnRNb2RlbC5nZXRDdXJyZW50VmFyaWFudFJlZmVyZW5jZSh2YXJpYW50QmFja1JlZmVyZW5jZSkpO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdExvZy5kZWJ1ZyhcIkNvdWxkbid0IGZldGNoIHZhcmlhbnQgXCIsIGUgYXMgc3RyaW5nKTtcblx0XHR9XG5cdFx0cmV0dXJuIGN1cnJlbnRWYXJpYW50O1xuXHR9XG5cblx0LyoqXG5cdCAqIFNob3dzIG9yIGhpZGVzIGFueSBmaWx0ZXIgZmllbGQgZnJvbSB0aGUgZmlsdGVyIGJhci5cblx0ICogVGhlIHByb3BlcnR5IHdpbGwgbm90IGJlIGhpZGRlbiBpbnNpZGUgdGhlIGFkYXB0YXRpb24gZGlhbG9nIGFuZCBtYXkgYmUgcmUtYWRkZWQuXG5cdCAqIEBwYXJhbSBjb25kaXRpb25QYXRoIFRoZSBwYXRoIHRvIHRoZSBwcm9wZXJ0eSBhcyBhIGNvbmRpdGlvbiBwYXRoXG5cdCAqIEBwYXJhbSB2aXNpYmxlIFdoZXRoZXIgaXQgc2hvdWxkIGJlIHNob3duIG9yIGhpZGRlblxuXHQgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSByZXNvbHZpbmcgb25jZSB0aGUgY2hhbmdlIGluIHZpc2liaWxpdHkgd2FzIGFwcGxpZWRcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgc2V0RmlsdGVyRmllbGRWaXNpYmxlKGNvbmRpdGlvblBhdGg6IHN0cmluZywgdmlzaWJsZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGF3YWl0IFN0YXRlVXRpbC5hcHBseUV4dGVybmFsU3RhdGUodGhpcy5jb250ZW50LCB7IGl0ZW1zOiBbeyBuYW1lOiBjb25kaXRpb25QYXRoLCB2aXNpYmxlIH1dIH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHZpc2liaWxpdHkgb2YgYSBmaWx0ZXIgZmllbGQuXG5cdCAqIEBwYXJhbSBjb25kaXRpb25QYXRoIFRoZSBwYXRoIHRvIHRoZSBwcm9wZXJ0eSBhcyBhIGNvbmRpdGlvbiBwYXRoXG5cdCAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gY2hlY2sgd2hldGhlciB0aGUgZmlsdGVyIGZpZWxkIGlzIHZpc2libGUgb3Igbm90LlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhc3luYyBnZXRGaWx0ZXJGaWVsZFZpc2libGUoY29uZGl0aW9uUGF0aDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0Y29uc3Qgc3RhdGU6IEV4dGVybmFsU3RhdGVUeXBlID0gYXdhaXQgU3RhdGVVdGlsLnJldHJpZXZlRXh0ZXJuYWxTdGF0ZSh0aGlzLmNvbnRlbnQpO1xuXHRcdHJldHVybiAhIXN0YXRlLml0ZW1zLmZpbmQoKGl0ZW0pID0+IGl0ZW0ubmFtZSA9PT0gY29uZGl0aW9uUGF0aCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgYXNzb2NpYXRlZCB2YXJpYW50IG1hbmFnZW1lbnQuXG5cdCAqIEByZXR1cm5zIFRoZSB7QGxpbmsgc2FwLnVpLmZsLnZhcmlhbnRzLlZhcmlhbnRNYW5hZ2VtZW50fSBjb250cm9sIGFzc29jaWF0ZWQgd2l0aCB0aGUgZmlsdGVyIGJhci5cblx0ICovXG5cdGdldFZhcmlhbnRNYW5hZ2VtZW50KCk6IFZhcmlhbnRNYW5hZ2VtZW50IHtcblx0XHRjb25zdCB2YXJpYW50QmFja3JlZmVyZW5jZSA9IHRoaXMuY29udGVudC5nZXRWYXJpYW50QmFja3JlZmVyZW5jZSgpO1xuXHRcdGlmICh2YXJpYW50QmFja3JlZmVyZW5jZSkge1xuXHRcdFx0cmV0dXJuIFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQodmFyaWFudEJhY2tyZWZlcmVuY2UpIGFzIFZhcmlhbnRNYW5hZ2VtZW50O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYFZhcmlhbnQgYmFjayByZWZlcmVuY2Ugbm90IGRlZmluZWQgb24gdGhlIGZpbHRlciBiYXIgJHt0aGlzLmlkfWApO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSB2YXJpYW50IGJhY2sgcmVmZXJlbmNlIGFzc29jaWF0aW9uIGZvciB0aGlzIGluc3RhbmNlLlxuXHQgKiBAcGFyYW0gdmFyaWFudCBUaGUgYFZhcmlhbnRNYW5hZ2VtZW50YCBpbnN0YW5jZSB0byBzZXQgYXMgdGhlIGJhY2sgcmVmZXJlbmNlLlxuXHQgKi9cblx0c2V0VmFyaWFudEJhY2tSZWZlcmVuY2UodmFyaWFudDogVmFyaWFudE1hbmFnZW1lbnQpOiB2b2lkIHtcblx0XHRjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCkgYXMgRmlsdGVyQmFyO1xuXHRcdGNvbnN0IGlzTGl2ZU1vZGUgPSBjb250ZW50Py5nZXRMaXZlTW9kZT8uKCk7XG5cdFx0aWYgKCFpc0xpdmVNb2RlKSB7XG5cdFx0XHR0aGlzLmNvbnRlbnQuc2V0VmFyaWFudEJhY2tyZWZlcmVuY2UodmFyaWFudCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGtleSBvZiB0aGUgY3VycmVudCB2YXJpYW50IGluIHRoZSBhc3NvY2lhdGVkIHZhcmlhbnQgbWFuYWdlbWVudC5cblx0ICogQHJldHVybnMgS2V5IG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgdmFyaWFudC4gSW4gY2FzZSB0aGUgbW9kZWwgaXMgbm90IHlldCBzZXQsIGBudWxsYCB3aWxsIGJlIHJldHVybmVkLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRnZXRDdXJyZW50VmFyaWFudEtleSgpOiBzdHJpbmcgfCBudWxsIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWYXJpYW50TWFuYWdlbWVudCgpLmdldEN1cnJlbnRWYXJpYW50S2V5KCk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgbmV3IHNlbGVjdGVkIHZhcmlhbnQgaW4gdGhlIGFzc29jaWF0ZWQgdmFyaWFudCBtYW5hZ2VtZW50LlxuXHQgKiBAcGFyYW0ga2V5IEtleSBvZiB0aGUgdmFyaWFudCB0aGF0IHNob3VsZCBiZSBzZWxlY3RlZC4gSWYgdGhlIHBhc3NlZCBrZXkgZG9lc24ndCBpZGVudGlmeSBhIHZhcmlhbnQsIGl0IHdpbGwgYmUgaWdub3JlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0c2V0Q3VycmVudFZhcmlhbnRLZXkoa2V5OiBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zdCB2YXJpYW50TWFuYWdlbWVudCA9IHRoaXMuZ2V0VmFyaWFudE1hbmFnZW1lbnQoKTtcblx0XHR2YXJpYW50TWFuYWdlbWVudC5zZXRDdXJyZW50VmFyaWFudEtleShrZXkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGVuYWJsZW1lbnQgb2YgdGhlIGZpZWxkLlxuXHQgKiBAcGFyYW0gbmFtZSBOYW1lIG9mIHRoZSBmaWVsZCB0aGF0IHNob3VsZCBiZSBlbmFibGVkIG9yIGRpc2FibGVkLlxuXHQgKiBAcGFyYW0gZW5hYmxlZCBXaGV0aGVyIHRoZSBmaWVsZCBzaG91bGQgYmUgZW5hYmxlZCBvciBkaXNhYmxlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0c2V0RmlsdGVyRmllbGRFbmFibGVkKG5hbWU6IHN0cmluZywgZW5hYmxlZDogYm9vbGVhbik6IHZvaWQge1xuXHRcdCh0aGlzLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsKS5zZXREYXRhKFxuXHRcdFx0e1xuXHRcdFx0XHRbdGhpcy5jb250ZW50LmRhdGEoXCJsb2NhbElkXCIpXToge1xuXHRcdFx0XHRcdGZpbHRlckZpZWxkczogeyBbbmFtZV06IHsgZWRpdE1vZGU6IGVuYWJsZWQgPyBGaWVsZEVkaXRNb2RlLkVkaXRhYmxlIDogRmllbGRFZGl0TW9kZS5EaXNhYmxlZCB9IH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHRydWVcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgd2hldGhlciB0aGUgZmllbGQgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC5cblx0ICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgZmllbGQuXG5cdCAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGZpbHRlckZpZWxkIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGdldEZpbHRlckZpZWxkRW5hYmxlZChuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gKHRoaXMuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWwpLmdldFByb3BlcnR5KGAvJHt0aGlzLmNvbnRlbnQuZGF0YShcImxvY2FsSWRcIil9L2ZpbHRlckZpZWxkcy8ke25hbWV9L2VkaXRNb2RlYCkgPT09XG5cdFx0XHRGaWVsZEVkaXRNb2RlLkRpc2FibGVkXG5cdFx0XHQ/IGZhbHNlXG5cdFx0XHQ6IHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydCB7QGxpbmsgc2FwLmZlLm5hdmlnYXRpb24uU2VsZWN0aW9uVmFyaWFudH0gdG8gY29uZGl0aW9ucy5cblx0ICogQHBhcmFtIHNlbGVjdGlvblZhcmlhbnQgVGhlIHNlbGVjdGlvbiB2YXJpYW50IHRvIGFwcGx5IHRvIHRoZSBmaWx0ZXIgYmFyLlxuXHQgKiBAcGFyYW0gcHJlZmlsbERlc2NyaXB0aW9ucyBJZiB0cnVlLCB3ZSB0cnkgdG8gZmluZCB0aGUgYXNzb2NpYXRlZCBUZXh0IHZhbHVlIGZvciBlYWNoIHByb3BlcnR5IGluIHRoZSBzZWxlY3Rpb25WYXJpYW50ICh0byBhdm9pZCBmZXRjaGluZyBpdCBmcm9tIHRoZSBzZXJ2ZXIpXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSByZXNvbHZpbmcgdG8gY29uZGl0aW9uc1xuXHQgKi9cblx0YXN5bmMgY29udmVydFNlbGVjdGlvblZhcmlhbnRUb1N0YXRlRmlsdGVycyhcblx0XHRzZWxlY3Rpb25WYXJpYW50OiBTZWxlY3Rpb25WYXJpYW50LFxuXHRcdHByZWZpbGxEZXNjcmlwdGlvbnM6IGJvb2xlYW5cblx0KTogUHJvbWlzZTxTdGF0ZVV0aWxGaWx0ZXI+IHtcblx0XHRyZXR1cm4gc3RhdGVIZWxwZXIuY29udmVydFNlbGVjdGlvblZhcmlhbnRUb1N0YXRlRmlsdGVycyhcblx0XHRcdHRoaXMuY29udGVudCxcblx0XHRcdHNlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRwcmVmaWxsRGVzY3JpcHRpb25zLFxuXHRcdFx0dGhpcy5jb250ZW50Py5nZXRNb2RlbCgpXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbGVhcnMgYWxsIGlucHV0IHZhbHVlcyBvZiB2aXNpYmxlIGZpbHRlciBmaWVsZHMgaW4gdGhlIGZpbHRlciBiYXIgd2l0aCBmbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgdG8gY2xlYXIgRWRpdCBGaWx0ZXIgb3Igbm90LlxuXHQgKiBAcGFyYW0gZmlsdGVyQmFyIFRoZSBmaWx0ZXIgYmFyIHRoYXQgY29udGFpbnMgdGhlIGZpbHRlciBmaWVsZFxuXHQgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciBmaWx0ZXJpbmcgb24gdGhlIGZpbHRlciBiYXJcblx0ICogQHBhcmFtIG9wdGlvbnMuY2xlYXJFZGl0RmlsdGVyIFdoZXRoZXIgdG8gY2xlYXIgdGhlIGVkaXQgZmlsdGVyIG9yIGxldCBpdCBiZSBkZWZhdWx0IHZhbHVlICdBbGwnIGluc3RlYWRcblx0ICovXG5cdGFzeW5jIF9jbGVhckZpbHRlclZhbHVlc1dpdGhPcHRpb25zKGZpbHRlckJhcjogRmlsdGVyQmFyLCBvcHRpb25zPzogeyBjbGVhckVkaXRGaWx0ZXI6IGJvb2xlYW4gfSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGF3YWl0IHN0YXRlSGVscGVyLl9jbGVhckZpbHRlclZhbHVlc1dpdGhPcHRpb25zKGZpbHRlckJhciwgb3B0aW9ucyk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB7QGxpbmsgc2FwLmZlLm5hdmlnYXRpb24uU2VsZWN0aW9uVmFyaWFudH0gdG8gdGhlIGZpbHRlciBiYXIuIE5vdGU6IHNldFNlbGVjdGlvblZhcmlhbnQgd2lsbCBjbGVhciBleGlzdGluZyBmaWx0ZXJzIGFuZCB0aGVuIGFwcGx5IHRoZSBTZWxlY3Rpb25WYXJpYW50IHZhbHVlcy5cblx0ICogTm90ZTogVGhpcyBtZXRob2QgY2Fubm90IHNldCB0aGUgc2VhcmNoIGZpZWxkIHRleHQgb3IgYW55IGZpbHRlciBmaWVsZCBjb25kaXRpb24gdGhhdCByZWxpZXMgb24gYSBjdXN0b20gb3BlcmF0b3IuXG5cdCAqIEBwYXJhbSBzZWxlY3Rpb25WYXJpYW50IFRoZSB7QGxpbmsgc2FwLmZlLm5hdmlnYXRpb24uU2VsZWN0aW9uVmFyaWFudH0gdG8gYXBwbHkgdG8gdGhlIGZpbHRlciBiYXJcblx0ICogQHBhcmFtIHByZWZpbGxEZXNjcmlwdGlvbnMgT3B0aW9uYWwuIElmIHRydWUsIHdlIHdpbGwgdXNlIHRoZSBhc3NvY2lhdGVkIHRleHQgcHJvcGVydHkgdmFsdWVzIChpZiB0aGV5J3JlIGF2YWlsYWJsZSBpbiB0aGUgc2VsZWN0aW9uVmFyaWFudCkgdG8gZGlzcGxheSB0aGUgZmlsdGVyIHZhbHVlIGRlc2NyaXB0aW9ucywgaW5zdGVhZCBvZiBsb2FkaW5nIHRoZW0gZnJvbSB0aGUgYmFja2VuZFxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgZm9yIGFzeW5jaHJvbm91cyBoYW5kbGluZ1xuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhc3luYyBzZXRTZWxlY3Rpb25WYXJpYW50KHNlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQsIHByZWZpbGxEZXNjcmlwdGlvbnMgPSBmYWxzZSk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSBhcyBGaWx0ZXJCYXIgfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgaXNMaXZlTW9kZSA9IGNvbnRlbnQgJiYgY29udGVudD8uZ2V0TGl2ZU1vZGU/LigpO1xuXHRcdGxldCByZXN1bHQ6IHsgZGlmZlN0YXRlOiBFeHRlcm5hbFN0YXRlVHlwZTsgYXBwbHlTdGF0ZVJlc3VsdDogdW5rbm93biB9IHwgdW5kZWZpbmVkO1xuXHRcdGlmIChpc0xpdmVNb2RlKSB7XG5cdFx0XHRjb250ZW50LmVuYWJsZVJlcXVlc3RzKGZhbHNlKTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJlc3VsdCA9IGF3YWl0IHN0YXRlSGVscGVyLnNldFNlbGVjdGlvblZhcmlhbnRUb01kY0NvbnRyb2wodGhpcy5nZXRDb250ZW50KCksIHNlbGVjdGlvblZhcmlhbnQsIHByZWZpbGxEZXNjcmlwdGlvbnMpO1xuXHRcdFx0cmV0dXJuIHJlc3VsdD8uYXBwbHlTdGF0ZVJlc3VsdDtcblx0XHR9IGNhdGNoIChlcnI6IHVua25vd24pIHtcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG5cdFx0XHRMb2cuZXJyb3IoYEZFIDogQnVpbGRpbmdibG9jayA6IEZpbHRlckJhciA6ICR7bWVzc2FnZX1gKTtcblx0XHRcdHRocm93IEVycm9yKG1lc3NhZ2UpO1xuXHRcdH0gZmluYWxseSB7XG5cdFx0XHRpZiAoaXNMaXZlTW9kZSkge1xuXHRcdFx0XHRjb250ZW50LmVuYWJsZVJlcXVlc3RzKHRydWUsIHJlc3VsdD8uZGlmZlN0YXRlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2FsbGVkIGJ5IHRoZSBNREMgc3RhdGUgdXRpbCB3aGVuIHRoZSBzdGF0ZSBmb3IgdGhpcyBjb250cm9sJ3MgY2hpbGQgaGFzIGNoYW5nZWQuXG5cdCAqL1xuXHRoYW5kbGVTdGF0ZUNoYW5nZSgpOiB2b2lkIHtcblx0XHR0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk/LmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdH1cblxuXHRwcml2YXRlIGdldENvbmRpdGlvblBhdGgocHJvcGVydHlQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHByb3BlcnR5VGFyZ2V0T2JqZWN0UGF0aCA9IEZpbHRlclV0aWxzLmdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JQcm9wZXJ0eSh0aGlzLmNvbnRlbnQsIHByb3BlcnR5UGF0aCk7XG5cdFx0cmV0dXJuIChcblx0XHRcdChwcm9wZXJ0eVRhcmdldE9iamVjdFBhdGggPyBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKHByb3BlcnR5VGFyZ2V0T2JqZWN0UGF0aCwgZmFsc2UsIHRydWUpIDogdW5kZWZpbmVkKSA/P1xuXHRcdFx0cHJvcGVydHlQYXRoXG5cdFx0KTtcblx0fVxuXG5cdGFzeW5jIHNob3dGaWx0ZXJGaWVsZChuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzdGF0ZTogRXh0ZXJuYWxTdGF0ZVR5cGUgPSBhd2FpdCBTdGF0ZVV0aWwucmV0cmlldmVFeHRlcm5hbFN0YXRlKHRoaXMuY29udGVudCk7XG5cdFx0Y29uc3QgY29uZGl0aW9uUGF0aCA9IHRoaXMuZ2V0Q29uZGl0aW9uUGF0aChuYW1lKTtcblx0XHRjb25zdCB0YXJnZXRGaWx0ZXJGaWVsZCA9ICEhc3RhdGUuaXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS5uYW1lID09PSBjb25kaXRpb25QYXRoKTtcblx0XHRpZiAoIXRhcmdldEZpbHRlckZpZWxkKSB7XG5cdFx0XHRzdGF0ZS5pdGVtcy5wdXNoKHsgbmFtZTogY29uZGl0aW9uUGF0aCB9KTtcblx0XHR9XG5cdFx0YXdhaXQgU3RhdGVVdGlsLmFwcGx5RXh0ZXJuYWxTdGF0ZSh0aGlzLmNvbnRlbnQsIHN0YXRlKTtcblx0fVxuXG5cdGFzeW5jIG9wZW5WYWx1ZUhlbHBGb3JGaWx0ZXJGaWVsZChuYW1lOiBzdHJpbmcsIGlucHV0VmFsdWU/OiBzdHJpbmcpOiBQcm9taXNlPENvbmRpdGlvbk9iamVjdFtdPiB7XG5cdFx0Y29uc3QgY29uZGl0aW9uUGF0aCA9IHRoaXMuZ2V0Q29uZGl0aW9uUGF0aChuYW1lKTtcblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCBmaWx0ZXJGaWVsZCA9IHRoaXMuY29udGVudC5nZXRGaWx0ZXJJdGVtcygpLmZpbmQoKGl0ZW0pID0+IGl0ZW0uZ2V0UHJvcGVydHlLZXkoKSA9PT0gY29uZGl0aW9uUGF0aCk7XG5cdFx0XHRjb25zdCB2YWx1ZUhlbHAgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKGZpbHRlckZpZWxkPy5nZXRWYWx1ZUhlbHAoKSkgYXMgVmFsdWVIZWxwIHwgdW5kZWZpbmVkO1xuXHRcdFx0aWYgKCF2YWx1ZUhlbHAgfHwgIWZpbHRlckZpZWxkKSB7XG5cdFx0XHRcdHJlamVjdChuZXcgRXJyb3IoYFZhbHVlSGVscCBmb3IgZmlsdGVyIGZpZWxkICR7bmFtZX0gbm90IGZvdW5kYCkpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHZhbHVlSGVscC5hdHRhY2hFdmVudE9uY2UoXCJjbG9zZWRcIiwgKCkgPT4ge1xuXHRcdFx0XHRyZXNvbHZlKHZhbHVlSGVscC5nZXRDb25kaXRpb25zKCkgYXMgQ29uZGl0aW9uT2JqZWN0W10pO1xuXHRcdFx0fSk7XG5cblx0XHRcdChmaWx0ZXJGaWVsZCBhcyB1bmtub3duIGFzIHsgX29Gb2N1c0luZm86IG9iamVjdCB9KS5fb0ZvY3VzSW5mbyA9IHsgdGFyZ2V0SW5mbzogeyBzaWxlbnQ6IHRydWUgfSB9O1xuXHRcdFx0KGZpbHRlckZpZWxkIGFzIHVua25vd24gYXMgeyBvbmZvY3VzaW4/OiBGdW5jdGlvbiB9KS5vbmZvY3VzaW4/LihuZXcgalF1ZXJ5LkV2ZW50KFwiZm9jdXNpblwiKSk7XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0KGZpbHRlckZpZWxkLmdldEFnZ3JlZ2F0aW9uKFwiX2NvbnRlbnRcIikgYXMgSW5wdXRbXSlbMF0uZmlyZVZhbHVlSGVscFJlcXVlc3Qoe1xuXHRcdFx0XHRcdGZyb21LZXlib2FyZDogdHJ1ZSxcblx0XHRcdFx0XHRfdXNlcklucHV0VmFsdWU6IGlucHV0VmFsdWVcblx0XHRcdFx0fSBhcyB1bmtub3duIGFzIElucHV0JFZhbHVlSGVscFJlcXVlc3RFdmVudFBhcmFtZXRlcnMpO1xuXHRcdFx0fSwgMjAwKTtcblx0XHR9KTtcblx0fVxuXG5cdGdldENvbGxhcHNlZEZpbHRlcnNUZXh0KCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuY29udGVudD8uZ2V0QXNzaWduZWRGaWx0ZXJzVGV4dCgpPy5maWx0ZXJzVGV4dDtcblx0fVxufVxuZXhwb3J0IGRlZmF1bHQgRmlsdGVyQmFyQVBJO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFnREE7RUFBQSxJQUNNQSxrQkFBa0I7SUFLdkIsU0FBQUEsbUJBQTZCQyxZQUEwQixFQUFFO01BQUEsS0FKakRDLGtCQUFrQixHQUFHLENBQUM7TUFBQSxLQUV0QkMsbUJBQW1CLEdBQUcsQ0FBQztNQUFBLEtBRUZGLFlBQTBCLEdBQTFCQSxZQUEwQjtJQUFHO0lBQUMsSUFBQUcsTUFBQSxHQUFBSixrQkFBQSxDQUFBSyxTQUFBO0lBQUFELE1BQUEsQ0FFM0RFLGdCQUFnQixHQUFoQixTQUFBQSxnQkFBZ0JBLENBQUNDLE1BQWUsRUFBUTtNQUN2QyxJQUFJQSxNQUFNLEtBQUssU0FBUyxFQUFFO1FBQ3pCLElBQUksQ0FBQ0osbUJBQW1CLEVBQUU7TUFDM0IsQ0FBQyxNQUFNO1FBQ04sSUFBSSxDQUFDRCxrQkFBa0IsRUFBRTtNQUMxQjtJQUNELENBQUM7SUFBQUUsTUFBQSxDQUVESSxRQUFRLEdBQVIsU0FBQUEsUUFBUUEsQ0FBQ0MsZUFBb0MsRUFBRUMsVUFBNkMsRUFBUTtNQUNuRyxNQUFNQyxXQUFXLEdBQUcsSUFBSSxDQUFDQyw0QkFBNEIsQ0FBQ0YsVUFBVSxDQUFDO01BQ2pFLElBQUksQ0FBQ1QsWUFBWSxDQUFDWSxpQkFBaUIsQ0FBQyxDQUFDLEVBQUVDLFNBQVMsQ0FBQ0MsV0FBVyxDQUFDO1FBQzVEQyxJQUFJLEVBQUUsb0JBQW9CO1FBQzFCQyxVQUFVLEVBQUU7VUFDWGYs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
|