@sapui5/sap.fe.templates 1.138.0 → 1.140.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/templates/.library +1 -1
- package/src/sap/fe/templates/AnalyticalListPage/manifest.json +1 -1
- package/src/sap/fe/templates/ListComponent.js +4 -1
- package/src/sap/fe/templates/ListComponent.ts +4 -0
- package/src/sap/fe/templates/ListReport/ListReport.view.xml +93 -62
- package/src/sap/fe/templates/ListReport/ListReportController.controller.js +57 -5
- package/src/sap/fe/templates/ListReport/ListReportController.controller.ts +58 -4
- package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.js +36 -8
- package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.ts +25 -11
- package/src/sap/fe/templates/ListReport/designtime/ListReport.designtime.js +3 -1
- package/src/sap/fe/templates/ListReport/designtime/ListReport.designtime.ts +2 -0
- package/src/sap/fe/templates/ListReport/manifest.json +1 -1
- package/src/sap/fe/templates/ObjectPage/Component.js +17 -22
- package/src/sap/fe/templates/ObjectPage/Component.ts +9 -9
- package/src/sap/fe/templates/ObjectPage/ObjectPage.view.xml +4 -5
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +11 -54
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.ts +13 -56
- package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.js +21 -17
- package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.ts +19 -14
- package/src/sap/fe/templates/ObjectPage/card/BaseCardContentProvider.js +1 -2
- package/src/sap/fe/templates/ObjectPage/card/BaseCardContentProvider.ts +0 -1
- package/src/sap/fe/templates/ObjectPage/card/Generator.js +1 -2
- package/src/sap/fe/templates/ObjectPage/card/Generator.ts +0 -1
- package/src/sap/fe/templates/ObjectPage/card/facets/HeaderContent.js +1 -2
- package/src/sap/fe/templates/ObjectPage/card/facets/HeaderContent.ts +0 -1
- package/src/sap/fe/templates/ObjectPage/card/facets/HeaderTitle.js +1 -2
- package/src/sap/fe/templates/ObjectPage/card/facets/HeaderTitle.ts +0 -1
- package/src/sap/fe/templates/ObjectPage/components/CollaborationDraft.js +16 -6
- package/src/sap/fe/templates/ObjectPage/components/CollaborationDraft.tsx +15 -5
- package/src/sap/fe/templates/ObjectPage/components/DraftToggle.js +30 -15
- package/src/sap/fe/templates/ObjectPage/components/DraftToggle.tsx +14 -4
- package/src/sap/fe/templates/ObjectPage/designtime/ObjectPage.designtime.js +3 -1
- package/src/sap/fe/templates/ObjectPage/designtime/ObjectPage.designtime.ts +2 -0
- package/src/sap/fe/templates/ObjectPage/manifest.json +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/MessageHandler.js +15 -1
- package/src/sap/fe/templates/ObjectPage/overrides/MessageHandler.ts +16 -0
- package/src/sap/fe/templates/ObjectPage/view/fragments/Actions.fragment.xml +25 -6
- package/src/sap/fe/templates/ObjectPage/view/fragments/Heading.fragment.xml +2 -2
- package/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderForm.fragment.xml +7 -2
- package/src/sap/fe/templates/library.js +1 -1
- package/src/sap/fe/templates/messagebundle.properties +5 -6
- package/src/sap/fe/templates/messagebundle_ar.properties +2 -2
- package/src/sap/fe/templates/messagebundle_bg.properties +2 -2
- package/src/sap/fe/templates/messagebundle_ca.properties +1 -1
- package/src/sap/fe/templates/messagebundle_cnr.properties +2 -2
- package/src/sap/fe/templates/messagebundle_cs.properties +1 -1
- package/src/sap/fe/templates/messagebundle_da.properties +2 -2
- package/src/sap/fe/templates/messagebundle_de.properties +1 -1
- package/src/sap/fe/templates/messagebundle_en.properties +2 -2
- package/src/sap/fe/templates/messagebundle_en_GB.properties +2 -2
- package/src/sap/fe/templates/messagebundle_en_US_saprigi.properties +2 -4
- package/src/sap/fe/templates/messagebundle_es.properties +2 -2
- package/src/sap/fe/templates/messagebundle_es_MX.properties +1 -1
- package/src/sap/fe/templates/messagebundle_et.properties +1 -1
- package/src/sap/fe/templates/messagebundle_fi.properties +2 -2
- package/src/sap/fe/templates/messagebundle_fr.properties +1 -1
- package/src/sap/fe/templates/messagebundle_fr_CA.properties +3 -3
- package/src/sap/fe/templates/messagebundle_hi.properties +1 -1
- package/src/sap/fe/templates/messagebundle_hr.properties +2 -2
- package/src/sap/fe/templates/messagebundle_hu.properties +2 -2
- package/src/sap/fe/templates/messagebundle_id.properties +1 -1
- package/src/sap/fe/templates/messagebundle_it.properties +2 -2
- package/src/sap/fe/templates/messagebundle_ja.properties +1 -1
- package/src/sap/fe/templates/messagebundle_kk.properties +1 -1
- package/src/sap/fe/templates/messagebundle_ko.properties +1 -1
- package/src/sap/fe/templates/messagebundle_lt.properties +1 -1
- package/src/sap/fe/templates/messagebundle_lv.properties +2 -2
- package/src/sap/fe/templates/messagebundle_mk.properties +1 -1
- package/src/sap/fe/templates/messagebundle_no.properties +1 -1
- package/src/sap/fe/templates/messagebundle_pl.properties +1 -1
- package/src/sap/fe/templates/messagebundle_pt.properties +1 -1
- package/src/sap/fe/templates/messagebundle_pt_PT.properties +1 -1
- package/src/sap/fe/templates/messagebundle_ro.properties +1 -1
- package/src/sap/fe/templates/messagebundle_sh.properties +2 -2
- package/src/sap/fe/templates/messagebundle_sk.properties +2 -2
- package/src/sap/fe/templates/messagebundle_sl.properties +1 -1
- package/src/sap/fe/templates/messagebundle_sr.properties +2 -2
- package/src/sap/fe/templates/messagebundle_sv.properties +1 -1
- package/src/sap/fe/templates/messagebundle_th.properties +2 -2
- package/src/sap/fe/templates/messagebundle_tr.properties +1 -1
- package/src/sap/fe/templates/messagebundle_uk.properties +1 -1
- package/src/sap/fe/templates/messagebundle_vi.properties +1 -1
- package/src/sap/fe/templates/messagebundle_zh_CN.properties +1 -1
- package/src/sap/fe/templates/messagebundle_zh_TW.properties +1 -1
|
@@ -2,11 +2,12 @@
|
|
|
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/ObjectPath", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUtils", "sap/fe/core/PageController", "sap/fe/core/controllerextensions/IntentBasedNavigation", "sap/fe/core/controllerextensions/InternalIntentBasedNavigation", "sap/fe/core/controllerextensions/InternalRouting", "sap/fe/core/controllerextensions/KPIManagement", "sap/fe/core/controllerextensions/Placeholder", "sap/fe/core/controllerextensions/Share", "sap/fe/core/controllerextensions/SideEffects", "sap/fe/core/controllerextensions/ViewState", "sap/fe/core/helpers/EditState", "sap/fe/core/helpers/MessageStrip", "sap/fe/core/helpers/ResourceModelHelper", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/library", "sap/fe/macros/chart/ChartUtils", "sap/fe/macros/filter/FilterUtils", "sap/fe/navigation/SelectionVariant", "sap/fe/templates/ListReport/ExtensionAPI", "sap/fe/templates/ListReport/overrides/SideEffects", "sap/fe/templates/TableScroller", "sap/ui/Device", "sap/ui/core/InvisibleMessage", "sap/ui/core/library", "sap/ui/core/mvc/OverrideExecution", "sap/ui/mdc/p13n/StateUtil", "sap/ui/thirdparty/hasher", "./ListReportTemplating", "./overrides/IntentBasedNavigation", "./overrides/Share", "./overrides/ViewState"], function (Log, ObjectPath, ClassSupport, CommonUtils, PageController, IntentBasedNavigation, InternalIntentBasedNavigation, InternalRouting, KPIManagement, Placeholder, Share, SideEffects, ViewState, EditState, MessageStrip, ResourceModelHelper, StableIdHelper, CoreLibrary, ChartUtils, FilterUtils, SelectionVariant, ExtensionAPI, SideEffectsOverride, TableScroller, Device, InvisibleMessage, library, OverrideExecution, StateUtil, hasher, ListReportTemplating, IntentBasedNavigationOverride, ShareOverrides, ViewStateOverrides) {
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUtils", "sap/fe/core/PageController", "sap/fe/core/controllerextensions/IntentBasedNavigation", "sap/fe/core/controllerextensions/InternalIntentBasedNavigation", "sap/fe/core/controllerextensions/InternalRouting", "sap/fe/core/controllerextensions/KPIManagement", "sap/fe/core/controllerextensions/Placeholder", "sap/fe/core/controllerextensions/Share", "sap/fe/core/controllerextensions/SideEffects", "sap/fe/core/controllerextensions/ViewState", "sap/fe/core/helpers/EditState", "sap/fe/core/helpers/MessageStrip", "sap/fe/core/helpers/ResourceModelHelper", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/library", "sap/fe/macros/chart/ChartUtils", "sap/fe/macros/filter/FilterUtils", "sap/fe/navigation/SelectionVariant", "sap/fe/templates/ListReport/ExtensionAPI", "sap/fe/templates/ListReport/overrides/SideEffects", "sap/fe/templates/TableScroller", "sap/ui/Device", "sap/ui/core/Element", "sap/ui/core/InvisibleMessage", "sap/ui/core/library", "sap/ui/core/mvc/OverrideExecution", "sap/ui/mdc/p13n/StateUtil", "sap/ui/thirdparty/hasher", "./ListReportTemplating", "./overrides/IntentBasedNavigation", "./overrides/Share", "./overrides/ViewState"], function (Log, ObjectPath, ClassSupport, CommonUtils, PageController, IntentBasedNavigation, InternalIntentBasedNavigation, InternalRouting, KPIManagement, Placeholder, Share, SideEffects, ViewState, EditState, MessageStrip, ResourceModelHelper, StableIdHelper, CoreLibrary, ChartUtils, FilterUtils, SelectionVariant, ExtensionAPI, SideEffectsOverride, TableScroller, Device, UI5Element, InvisibleMessage, library, OverrideExecution, StateUtil, hasher, ListReportTemplating, IntentBasedNavigationOverride, ShareOverrides, ViewStateOverrides) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _dec17, _dec18, _dec19, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8;
|
|
9
9
|
var InvisibleMessageMode = library.InvisibleMessageMode;
|
|
10
|
+
var generate = StableIdHelper.generate;
|
|
10
11
|
var getResourceModel = ResourceModelHelper.getResourceModel;
|
|
11
12
|
var usingExtension = ClassSupport.usingExtension;
|
|
12
13
|
var publicExtension = ClassSupport.publicExtension;
|
|
@@ -233,6 +234,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSup
|
|
|
233
234
|
break;
|
|
234
235
|
}
|
|
235
236
|
this.getExtensionAPI().updateAppState();
|
|
237
|
+
// setTimeout cause the variant needs to be applied before judging the auto search or updating the app state
|
|
238
|
+
this.focusHandlingForSegmentedButton(selectedKey);
|
|
236
239
|
},
|
|
237
240
|
onDynamicPageTitleStateChanged(event) {
|
|
238
241
|
const filterBar = this._getFilterBarControl();
|
|
@@ -302,6 +305,15 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSup
|
|
|
302
305
|
model: "ui"
|
|
303
306
|
});
|
|
304
307
|
};
|
|
308
|
+
_proto.onBeforeRendering = function onBeforeRendering() {
|
|
309
|
+
PageController.prototype.onBeforeRendering.apply(this);
|
|
310
|
+
const dynamicPage = this._getDynamicListReportControl();
|
|
311
|
+
const dynmicPageHeaderTitle = dynamicPage?.getTitle();
|
|
312
|
+
const breadcrumbsBB = dynmicPageHeaderTitle.getBreadcrumbs();
|
|
313
|
+
if (breadcrumbsBB) {
|
|
314
|
+
breadcrumbsBB.setBreadcrumbLinks("");
|
|
315
|
+
}
|
|
316
|
+
};
|
|
305
317
|
_proto.onExit = function onExit() {
|
|
306
318
|
delete this.filterBarConditions;
|
|
307
319
|
if (this.extensionAPI) {
|
|
@@ -527,7 +539,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSup
|
|
|
527
539
|
await this.getAppComponent().getAppStateHandler().applyAppState(viewId, this.getView());
|
|
528
540
|
const oFilterBar = this._getFilterBarControl();
|
|
529
541
|
if (oFilterBar) {
|
|
530
|
-
oFilterBar.
|
|
542
|
+
oFilterBar.enableRequests(true);
|
|
531
543
|
} else if (this._isFilterBarHidden()) {
|
|
532
544
|
const oInternalModelContext = this.getView().getBindingContext("internal");
|
|
533
545
|
oInternalModelContext.setProperty("hasPendingFilters", false);
|
|
@@ -638,7 +650,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSup
|
|
|
638
650
|
const filterBar = this._getFilterBarControl();
|
|
639
651
|
// check for filter bar hidden
|
|
640
652
|
if (filterBar) {
|
|
641
|
-
filterBar.
|
|
653
|
+
filterBar.enableRequests(false);
|
|
642
654
|
}
|
|
643
655
|
}
|
|
644
656
|
|
|
@@ -798,11 +810,51 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSup
|
|
|
798
810
|
const filterBar = this._getFilterBarControl();
|
|
799
811
|
filterBar?.getSegmentedButton()?.setVisible(buttonVisible);
|
|
800
812
|
};
|
|
813
|
+
/**
|
|
814
|
+
* Handles focus for the segmented button based on the selected key.
|
|
815
|
+
* @param selectedKey The key representing the selected template content view
|
|
816
|
+
*/
|
|
817
|
+
_proto.focusHandlingForSegmentedButton = function focusHandlingForSegmentedButton(selectedKey) {
|
|
818
|
+
const oChart = this.getChartControl();
|
|
819
|
+
const oTable = this._getTable();
|
|
820
|
+
let segmentedButtonId;
|
|
821
|
+
switch (selectedKey) {
|
|
822
|
+
case TemplateContentView.Table:
|
|
823
|
+
segmentedButtonId = generate([oTable?.getId(), "SegmentedButton", "TemplateContentView"]);
|
|
824
|
+
this.addFocusDelegate(segmentedButtonId);
|
|
825
|
+
break;
|
|
826
|
+
case TemplateContentView.Chart:
|
|
827
|
+
case TemplateContentView.Hybrid:
|
|
828
|
+
segmentedButtonId = generate([oChart?.getId(), "SegmentedButton", "TemplateContentView"]);
|
|
829
|
+
this.addFocusDelegate(segmentedButtonId);
|
|
830
|
+
break;
|
|
831
|
+
default:
|
|
832
|
+
break;
|
|
833
|
+
}
|
|
834
|
+
}
|
|
835
|
+
|
|
836
|
+
/**
|
|
837
|
+
* Adds an event delegate to a control and sets focus on it.
|
|
838
|
+
* @param segmentedButtonId The control to which the event delegate will be added.
|
|
839
|
+
*/;
|
|
840
|
+
_proto.addFocusDelegate = function addFocusDelegate(segmentedButtonId) {
|
|
841
|
+
const segmentedButton = UI5Element.getElementById(segmentedButtonId);
|
|
842
|
+
if (segmentedButton) {
|
|
843
|
+
const eventDelegate = {
|
|
844
|
+
onAfterRendering: () => {
|
|
845
|
+
segmentedButton.focus();
|
|
846
|
+
segmentedButton.removeEventDelegate(eventDelegate);
|
|
847
|
+
}
|
|
848
|
+
};
|
|
849
|
+
segmentedButton.addEventDelegate(eventDelegate);
|
|
850
|
+
}
|
|
851
|
+
}
|
|
852
|
+
|
|
801
853
|
/**
|
|
802
854
|
* Method to update the local UI model of the page with the Selection Variant.
|
|
803
855
|
* @param filterBar MDC filter bar
|
|
804
856
|
* @param internalModelContext The internal model context
|
|
805
|
-
|
|
857
|
+
*/;
|
|
806
858
|
_proto._storeFilterBarSelectionVariant = async function _storeFilterBarSelectionVariant(filterBar, internalModelContext) {
|
|
807
859
|
try {
|
|
808
860
|
const filterBarAPI = filterBar.getParent();
|
|
@@ -866,4 +918,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSup
|
|
|
866
918
|
}), _applyDecoratedDescriptor(_class2.prototype, "getExtensionAPI", [_dec10, _dec11], Object.getOwnPropertyDescriptor(_class2.prototype, "getExtensionAPI"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onPageReady", [_dec12, _dec13], Object.getOwnPropertyDescriptor(_class2.prototype, "onPageReady"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onViewNeedsRefresh", [_dec14, _dec15], Object.getOwnPropertyDescriptor(_class2.prototype, "onViewNeedsRefresh"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onPendingFilters", [_dec16, _dec17], Object.getOwnPropertyDescriptor(_class2.prototype, "onPendingFilters"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onAfterClear", [_dec18, _dec19], Object.getOwnPropertyDescriptor(_class2.prototype, "onAfterClear"), _class2.prototype), _class2)) || _class);
|
|
867
919
|
return ListReportController;
|
|
868
920
|
}, false);
|
|
869
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUZW1wbGF0ZUNvbnRlbnRWaWV3IiwiQ29yZUxpYnJhcnkiLCJJbml0aWFsTG9hZE1vZGUiLCJMaXN0UmVwb3J0Q29udHJvbGxlciIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwidXNpbmdFeHRlbnNpb24iLCJJbnRlcm5hbFJvdXRpbmciLCJvdmVycmlkZSIsIm9uQWZ0ZXJCaW5kaW5nIiwiZ2V0VmlldyIsImdldENvbnRyb2xsZXIiLCJfb25BZnRlckJpbmRpbmciLCJfZGVjMyIsIkludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0RW50aXR5U2V0IiwiYmFzZSIsImdldEN1cnJlbnRFbnRpdHlTZXQiLCJfZGVjNCIsIlNpZGVFZmZlY3RzIiwiU2lkZUVmZmVjdHNPdmVycmlkZSIsIl9kZWM1IiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUiLCJfZGVjNiIsIlNoYXJlIiwiU2hhcmVPdmVycmlkZXMiLCJfZGVjNyIsIlZpZXdTdGF0ZSIsIlZpZXdTdGF0ZU92ZXJyaWRlcyIsIl9kZWM4IiwiS1BJTWFuYWdlbWVudCIsIl9kZWM5IiwiUGxhY2Vob2xkZXIiLCJfZGVjMTAiLCJwdWJsaWNFeHRlbnNpb24iLCJfZGVjMTEiLCJmaW5hbEV4dGVuc2lvbiIsIl9kZWMxMiIsInByaXZhdGVFeHRlbnNpb24iLCJfZGVjMTMiLCJleHRlbnNpYmxlIiwiX2RlYzE0IiwiX2RlYzE1IiwiT3ZlcnJpZGVFeGVjdXRpb24iLCJBZnRlciIsIl9kZWMxNiIsIl9kZWMxNyIsIl9kZWMxOCIsIl9kZWMxOSIsIl9jbGFzcyIsIl9jbGFzczIiLCJfUGFnZUNvbnRyb2xsZXIiLCJfdGhpcyIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfZGVzY3JpcHRvcjIiLCJfZGVzY3JpcHRvcjMiLCJfZGVzY3JpcHRvcjQiLCJfZGVzY3JpcHRvcjUiLCJfZGVzY3JpcHRvcjYiLCJfZGVzY3JpcHRvcjciLCJfZGVzY3JpcHRvcjgiLCJmb3JtYXR0ZXJzIiwic2V0QUxQQ29udHJvbE1lc3NhZ2VTdHJpcCIsImFJZ25vcmVkRmllbGRzIiwiYklzQ2hhcnQiLCJvQXBwbHlTdXBwb3J0ZWQiLCJzVGV4dCIsIm9GaWx0ZXJCYXIiLCJfZ2V0RmlsdGVyQmFyQ29udHJvbCIsImlzQXJyYXkiLCJhSWdub3JlZExhYmVscyIsIk1lc3NhZ2VTdHJpcCIsImdldExhYmVscyIsImRhdGEiLCJnZXRSZXNvdXJjZU1vZGVsIiwiYklzU2VhcmNoSWdub3JlZCIsImVuYWJsZVNlYXJjaCIsImdldEFMUFRleHQiLCJnZXRUZXh0IiwiaGFuZGxlcnMiLCJvbklubGluZUVkaXRTYXZlIiwiaW5saW5lRWRpdEZsb3ciLCJpbmxpbmVFZGl0U2F2ZSIsIm9uRmlsdGVyU2VhcmNoIiwiZmlsdGVyQmFyQVBJIiwiZ2V0UGFyZW50IiwidHJpZ2dlclNlYXJjaCIsIm9uRmlsdGVyc0NoYW5nZWQiLCJvRXZlbnQiLCJvSW50ZXJuYWxNb2RlbENvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsIm9uUGVuZGluZ0ZpbHRlcnMiLCJnZXRQYXJhbWV0ZXIiLCJzZXRQcm9wZXJ0eSIsIl9zdG9yZUZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQiLCJvblZhcmlhbnRTZWxlY3RlZCIsInBhcmFtZXRlcnMiLCJnZXRQYXJhbWV0ZXJzIiwidmFyaWFudE1hbmFnZW1lbnQiLCJvcmlnaW5hbFNvdXJjZSIsImN1cnJlbnRWYXJpYW50S2V5IiwibXVsdGlNb2RlQ29udHJvbCIsIl9nZXRNdWx0aU1vZGVDb250cm9sIiwiaXNBIiwiaW52YWxpZGF0ZUNvbnRlbnQiLCJzZXRGcmVlemVDb250ZW50Iiwic2V0VGltZW91dCIsImZpbHRlckJhciIsImR5bmFtaWNQYWdlIiwiX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbCIsImZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZCIsImdldEZpbHRlckl0ZW1zIiwiZmluZCIsImZpbHRlckl0ZW0iLCJnZXRSZXF1aXJlZCIsImdldENvbmRpdGlvbnMiLCJzZXRIZWFkZXJFeHBhbmRlZCIsIl9zaG91bGRBdXRvVHJpZ2dlclNlYXJjaCIsIl9nZXRBcHBseUF1dG9tYXRpY2FsbHlPblZhcmlhbnQiLCJnZXRFeHRlbnNpb25BUEkiLCJ1cGRhdGVBcHBTdGF0ZSIsIm9uVmFyaWFudFNhdmVkIiwib25TZWFyY2giLCJvTWRjQ2hhcnQiLCJnZXRDaGFydENvbnRyb2wiLCJiSGlkZURyYWZ0IiwiRmlsdGVyVXRpbHMiLCJnZXRFZGl0U3RhdGVJc0hpZGVEcmFmdCIsIl91cGRhdGVBTFBOb3RBcHBsaWNhYmxlRmllbGRzIiwib1BhZ2VJbnRlcm5hbE1vZGVsQ29udGV4dCIsInNUZW1wbGF0ZUNvbnRlbnRWaWV3IiwiZ2V0UHJvcGVydHkiLCJnZXRQYXRoIiwiQ2hhcnQiLCJoYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzIiwiVGFibGUiLCJoYXNQZW5kaW5nVGFibGVDaGFuZ2VzIiwiRGV2aWNlIiwic3lzdGVtIiwiZGVza3RvcCIsImdldEhlYWRlckV4cGFuZGVkIiwiU3RhdGVVdGlsIiwicmV0cmlldmVFeHRlcm5hbFN0YXRlIiwidGhlbiIsIm9FeHRlcm5hbFN0YXRlIiwiZmlsdGVyQmFyQ29uZGl0aW9ucyIsImZpbHRlciIsImNhdGNoIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJnZXRWaWV3RGF0YSIsImxpdmVNb2RlIiwicGhvbmUiLCJvRHluYW1pY1BhZ2UiLCJfaXNJbml0TG9hZEVuYWJsZWQiLCJzZXRGaWx0ZXJUb2dnbGVWaXNpYmlsaXR5Iiwib25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kIiwib0NvbnRyb2xsZXIiLCJzT3V0Ym91bmRUYXJnZXQiLCJvQ29udGV4dCIsInNDcmVhdGVQYXRoIiwiX2ludGVudEJhc2VkTmF2aWdhdGlvbiIsIm9uQ2hhcnRTZWxlY3Rpb25DaGFuZ2VkIiwiZ2V0U291cmNlIiwiZ2V0Q29udGVudCIsIm9UYWJsZSIsIl9nZXRUYWJsZSIsImFEYXRhIiwiQ2hhcnRVdGlscyIsInNldENoYXJ0RmlsdGVycyIsInJlYmluZCIsIm9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZCIsInNlbGVjdGVkS2V5Iiwia2V5Iiwib0NoYXJ0IiwiX3VwZGF0ZVRhYmxlIiwiX3VwZGF0ZUNoYXJ0IiwiSHlicmlkIiwib25EeW5hbWljUGFnZVRpdGxlU3RhdGVDaGFuZ2VkIiwiZXZlbnQiLCJJbnZpc2libGVNZXNzYWdlIiwiZ2V0SW5zdGFuY2UiLCJhbm5vdW5jZSIsImdldEFzc2lnbmVkRmlsdGVyc1RleHQiLCJmaWx0ZXJzVGV4dCIsIkludmlzaWJsZU1lc3NhZ2VNb2RlIiwiQXNzZXJ0aXZlIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJleHRlbnNpb25BUEkiLCJFeHRlbnNpb25BUEkiLCJvbkluaXQiLCJQYWdlQ29udHJvbGxlciIsImFwcGx5IiwiX2hhc011bHRpVmlzdWFsaXphdGlvbnMiLCJhbHBDb250ZW50VmlldyIsIl9nZXREZWZhdWx0UGF0aCIsImdldEFwcENvbXBvbmVudCIsImdldFJvdXRlclByb3h5Iiwid2FpdEZvclJvdXRlTWF0Y2hCZWZvcmVOYXZpZ2F0aW9uIiwiX3NldEluaXRMb2FkIiwidmlldyIsInVpTW9kZWwiLCJnZXRNb2RlbCIsInBhdGgiLCJnZXRJZCIsImlzRWRpdGFibGUiLCJiaW5kRWxlbWVudCIsIm1vZGVsIiwib25FeGl0IiwiZGVzdHJveSIsImFUYWJsZXMiLCJfZ2V0Q29udHJvbHMiLCJ1cGRhdGVBY3Rpb25zIiwiRWRpdFN0YXRlIiwiaXNFZGl0U3RhdGVEaXJ0eSIsInRhYmxlIiwib1RhYmxlQmluZGluZyIsImdldFJvd0JpbmRpbmciLCJ0YWJsZUFQSSIsIkNvbW1vblV0aWxzIiwiZ2V0Um91dGluZ1NlcnZpY2UiLCJ3YWl0Rm9yQmluZGluZ0NsZWFudXAiLCJhdHRhY2hFdmVudE9uY2UiLCJfdXBkYXRlVGFibGVBY3Rpb25zIiwiZ2V0VGFibGVEZWZpbml0aW9uIiwiY29udHJvbCIsInR5cGUiLCJyZXNldENoYW5nZXMiLCJyZWZyZXNoIiwiZSIsIndhcm5pbmciLCJzZXRFZGl0U3RhdGVQcm9jZXNzZWQiLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsInZpZXdJZCIsInBhZ2VSZWFkeSIsIndhaXRGb3IiLCJfYXBwbHlBcHBTdGF0ZSIsImVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJpc0luc2lnaHRzRW5hYmxlZCIsIm9uUGFnZVJlYWR5IiwibVBhcmFtZXRlcnMiLCJmb3JjZUZvY3VzIiwiX3NldEluaXRpYWxGb2N1cyIsImdldFNoZWxsU2VydmljZXMiLCJzZXRCYWNrTmF2aWdhdGlvbiIsInVuZGVmaW5lZCIsIm9uVmlld05lZWRzUmVmcmVzaCIsInNsaWNlIiwib25BZnRlckNsZWFyIiwiYUlCTkFjdGlvbnMiLCJmb3JFYWNoIiwiZ2V0SUJOQWN0aW9ucyIsInVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5IiwidXBkYXRlTWVudUJ1dHRvblZpc2libGl0eSIsIl9zY3JvbGxUYWJsZXNUb1JvdyIsInNSb3dQYXRoIiwiVGFibGVTY3JvbGxlciIsInNjcm9sbFRhYmxlVG9Sb3ciLCJfZm9jdXNTaWxlbnQiLCJmaWx0ZXJGaWVsZCIsImZvY3VzSW5mbyIsImdldEZvY3VzSW5mbyIsInRhcmdldEluZm8iLCJzaWxlbnQiLCJmb2N1cyIsImlzSGVhZGVyRXhwYW5kZWQiLCJfaXNGaWx0ZXJCYXJIaWRkZW5Vc2VkIiwiZ2V0U2hvd01lc3NhZ2VzIiwic2V0U2hvd01lc3NhZ2VzIiwib0ZpbHRlckl0ZW0iLCJmaWVsZFRvRm9jdXMiLCJieUlkIiwiX2dldEZpbHRlckJhckNvbnRyb2xJZCIsImZvY3VzUm93IiwiX2dldFBhZ2VUaXRsZUluZm9ybWF0aW9uIiwib01hbmlmZXN0RW50cnkiLCJnZXRNYW5pZmVzdEVudHJ5IiwidGl0bGUiLCJzdWJ0aXRsZSIsInN1YlRpdGxlIiwiaW50ZW50IiwiaWNvbiIsIl9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2xJZCIsIl9nZXRBZGFwdGF0aW9uRmlsdGVyQmFyQ29udHJvbCIsImFkYXB0YXRpb25GaWx0ZXJCYXIiLCJnZXRJbmJ1aWx0RmlsdGVyIiwiZ2V0QXBwU3RhdGVIYW5kbGVyIiwiYXBwbHlBcHBTdGF0ZSIsInNldFN1c3BlbmRTZWxlY3Rpb24iLCJfaXNGaWx0ZXJCYXJIaWRkZW4iLCJfaXNNdWx0aU1vZGUiLCJzZXRDb3VudHNPdXREYXRlZCIsIl9nZXRTZWdtZW50ZWRCdXR0b24iLCJzQ29udHJvbCIsInNTZWdtZW50ZWRCdXR0b25JZCIsIl9nZXRDb250cm9sRnJvbVBhZ2VNb2RlbFByb3BlcnR5Iiwic1BhdGgiLCJjb250cm9sSWQiLCJfZ2V0UGFnZU1vZGVsIiwiX2dldFZpc3VhbEZpbHRlckJhckNvbnRyb2wiLCJzVmlzdWFsRmlsdGVyQmFySWQiLCJTdGFibGVJZEhlbHBlciIsImdlbmVyYXRlIiwiX2dldEZpbHRlckJhclZhcmlhbnRDb250cm9sIiwiX2dldEljb25UYWJCYXIiLCJvQ29udHJvbCIsImdldFNlbGVjdGVkSW5uZXJDb250cm9sIiwiY29udGVudCIsInNLZXkiLCJhQ29udHJvbHMiLCJvVGFiTXVsdGlNb2RlIiwiZ2V0SXRlbXMiLCJvSXRlbSIsImdldEtleSIsImluY2x1ZGVzIiwicHVzaCIsImRlZmF1bHRQYXRoIiwiTGlzdFJlcG9ydFRlbXBsYXRpbmciLCJnZXREZWZhdWx0UGF0aCIsImluaXRMb2FkTW9kZSIsImluaXRpYWxMb2FkIiwiRW5hYmxlZCIsIl9kaXNhYmxlSW5pdExvYWQiLCJfYXBwbHlBdXRvbWF0aWNhbGx5T25TdGFuZGFyZFZhcmlhbnQiLCJ2YXJpYW50TWFuYWdlbWVudElkIiwiZ2V0VmFyaWFudEJhY2tSZWZlcmVuY2UiLCJnZXREYXRhIiwicmVnaXN0ZXJBcHBseUF1dG9tYXRpY2FsbHlPblN0YW5kYXJkVmFyaWFudCIsImJpbmQiLCJfc2V0U2hhcmVNb2RlbCIsImZuR2V0VXNlciIsIk9iamVjdFBhdGgiLCJnZXQiLCJvU2hhcmVJbmZvIiwiYm9va21hcmtUaXRsZSIsImRvY3VtZW50IiwiYm9va21hcmtDdXN0b21VcmwiLCJzSGFzaCIsImhhc2hlciIsImdldEhhc2giLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhyZWYiLCJpc1NoYXJlSW5KYW1BY3RpdmUiLCJpc0phbUFjdGl2ZSIsIm9UZW1wbGF0ZVByaXZhdGVNb2RlbCIsImdldE93bmVyQ29tcG9uZW50IiwibUNhY2hlIiwiaWdub3JlZEZpZWxkcyIsImFDaGFydHMiLCJzQ2hhcnRFbnRpdHlQYXRoIiwic0NoYXJ0RW50aXR5U2V0Iiwic0NhY2hlS2V5IiwiZ2V0Tm90QXBwbGljYWJsZUZpbHRlcnMiLCJoaWRlRmlsdGVyQmFyIiwidXNlSGlkZGVuRmlsdGVyQmFyIiwidmFyaWFudHMiLCJnZXRWYXJpYW50cyIsImN1cnJlbnRWYXJpYW50IiwidmFyaWFudCIsIm9WTSIsIkF1dG8iLCJnZXRTdGFuZGFyZFZhcmlhbnRLZXkiLCJnZXRDdXJyZW50VmFyaWFudEtleSIsIm9Db25kaXRpb25zIiwic3RhcnRzV2l0aCIsInN0YW5kYXJkVmFyaWFudCIsImdldEV4ZWN1dGVPblNlbGVjdCIsImlzVGFibGVCb3VuZCIsIm9Jbm5lckNoYXJ0IiwiZ2V0Q29udHJvbERlbGVnYXRlIiwiX2dldENoYXJ0IiwiaXNCb3VuZCIsImdldEJpbmRpbmdJbmZvIiwiYnV0dG9uVmlzaWJsZSIsImdldFNlZ21lbnRlZEJ1dHRvbiIsInNldFZpc2libGUiLCJzdiIsImdldFNlbGVjdGlvblZhcmlhbnQiLCJlcnIiLCJtZXNzYWdlIiwiRXJyb3IiLCJTdHJpbmciLCJnZXRGaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50IiwiU2VsZWN0aW9uVmFyaWFudCIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciIsIk9iamVjdCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiTGlzdFJlcG9ydENvbnRyb2xsZXIuY29udHJvbGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBPYmplY3RQYXRoIGZyb20gXCJzYXAvYmFzZS91dGlsL09iamVjdFBhdGhcIjtcbmltcG9ydCB0eXBlIER5bmFtaWNQYWdlIGZyb20gXCJzYXAvZi9EeW5hbWljUGFnZVwiO1xuaW1wb3J0IHR5cGUgeyBEeW5hbWljUGFnZVRpdGxlJFN0YXRlQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL2YvRHluYW1pY1BhZ2VUaXRsZVwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIGV4dGVuc2libGUsIGZpbmFsRXh0ZW5zaW9uLCBwcml2YXRlRXh0ZW5zaW9uLCBwdWJsaWNFeHRlbnNpb24sIHVzaW5nRXh0ZW5zaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IEludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxSb3V0aW5nIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbFJvdXRpbmdcIjtcbmltcG9ydCBLUElNYW5hZ2VtZW50IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9LUElNYW5hZ2VtZW50XCI7XG5pbXBvcnQgUGxhY2Vob2xkZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BsYWNlaG9sZGVyXCI7XG5pbXBvcnQgU2hhcmUgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1NoYXJlXCI7XG5pbXBvcnQgU2lkZUVmZmVjdHMgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1NpZGVFZmZlY3RzXCI7XG5pbXBvcnQgVmlld1N0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9WaWV3U3RhdGVcIjtcbmltcG9ydCB0eXBlIHsgTGlzdFJlcG9ydERlZmluaXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy90ZW1wbGF0ZXMvTGlzdFJlcG9ydENvbnZlcnRlclwiO1xuaW1wb3J0IEVkaXRTdGF0ZSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9FZGl0U3RhdGVcIjtcbmltcG9ydCBNZXNzYWdlU3RyaXAgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTWVzc2FnZVN0cmlwXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGdldFJlc291cmNlTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgKiBhcyBTdGFibGVJZEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IENvcmVMaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSBDaGFydFR5cGUgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ2hhcnRcIjtcbmltcG9ydCB0eXBlIE1hY3JvQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL01hY3JvQVBJXCI7XG5pbXBvcnQgdHlwZSBDaGFydERlbGVnYXRlIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NoYXJ0L0NoYXJ0RGVsZWdhdGVcIjtcbmltcG9ydCBDaGFydFV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NoYXJ0L0NoYXJ0VXRpbHNcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jb250cm9scy9GaWx0ZXJCYXJcIjtcbmltcG9ydCBGaWx0ZXJVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXIvRmlsdGVyVXRpbHNcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhckFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXJCYXIvRmlsdGVyQmFyQVBJXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IFNlbGVjdGlvblZhcmlhbnQgZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uL1NlbGVjdGlvblZhcmlhbnRcIjtcbmltcG9ydCBFeHRlbnNpb25BUEkgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvTGlzdFJlcG9ydC9FeHRlbnNpb25BUElcIjtcbmltcG9ydCB0eXBlIE11bHRpcGxlTW9kZUNvbnRyb2wgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvTGlzdFJlcG9ydC9jb250cm9scy9NdWx0aXBsZU1vZGVDb250cm9sXCI7XG5pbXBvcnQgU2lkZUVmZmVjdHNPdmVycmlkZSBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9MaXN0UmVwb3J0L292ZXJyaWRlcy9TaWRlRWZmZWN0c1wiO1xuaW1wb3J0IFRhYmxlU2Nyb2xsZXIgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvVGFibGVTY3JvbGxlclwiO1xuaW1wb3J0IHR5cGUgSWNvblRhYkJhciBmcm9tIFwic2FwL20vSWNvblRhYkJhclwiO1xuaW1wb3J0IHR5cGUgVGFiQ29udGFpbmVySXRlbSBmcm9tIFwic2FwL20vVGFiQ29udGFpbmVySXRlbVwiO1xuaW1wb3J0IERldmljZSBmcm9tIFwic2FwL3VpL0RldmljZVwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgSW52aXNpYmxlTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvSW52aXNpYmxlTWVzc2FnZVwiO1xuaW1wb3J0IHsgSW52aXNpYmxlTWVzc2FnZU1vZGUgfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIFZhcmlhbnRNYW5hZ2VtZW50IGZyb20gXCJzYXAvdWkvZmwvdmFyaWFudHMvVmFyaWFudE1hbmFnZW1lbnRcIjtcbmltcG9ydCB0eXBlIHsgVmFyaWFudE1hbmFnZW1lbnQkU2VsZWN0RXZlbnQgfSBmcm9tIFwic2FwL3VpL2ZsL3ZhcmlhbnRzL1ZhcmlhbnRNYW5hZ2VtZW50XCI7XG5pbXBvcnQgdHlwZSBDaGFydCBmcm9tIFwic2FwL3VpL21kYy9DaGFydFwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyRmllbGQgZnJvbSBcInNhcC91aS9tZGMvRmlsdGVyRmllbGRcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlckJhckJhc2UkRmlsdGVyc0NoYW5nZWRFdmVudCB9IGZyb20gXCJzYXAvdWkvbWRjL2ZpbHRlcmJhci9GaWx0ZXJCYXJCYXNlXCI7XG5pbXBvcnQgU3RhdGVVdGlsIGZyb20gXCJzYXAvdWkvbWRjL3AxM24vU3RhdGVVdGlsXCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCBoYXNoZXIgZnJvbSBcInNhcC91aS90aGlyZHBhcnR5L2hhc2hlclwiO1xuaW1wb3J0ICogYXMgTGlzdFJlcG9ydFRlbXBsYXRpbmcgZnJvbSBcIi4vTGlzdFJlcG9ydFRlbXBsYXRpbmdcIjtcbmltcG9ydCBJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgU2hhcmVPdmVycmlkZXMgZnJvbSBcIi4vb3ZlcnJpZGVzL1NoYXJlXCI7XG5pbXBvcnQgVmlld1N0YXRlT3ZlcnJpZGVzIGZyb20gXCIuL292ZXJyaWRlcy9WaWV3U3RhdGVcIjtcblxuY29uc3QgVGVtcGxhdGVDb250ZW50VmlldyA9IENvcmVMaWJyYXJ5LlRlbXBsYXRlQ29udGVudFZpZXcsXG5cdEluaXRpYWxMb2FkTW9kZSA9IENvcmVMaWJyYXJ5LkluaXRpYWxMb2FkTW9kZTtcblxuLyoqXG4gKiBDb250cm9sbGVyIGNsYXNzIGZvciB0aGUgbGlzdCByZXBvcnQgcGFnZSwgdXNlZCBpbnNpZGUgYW4gU0FQIEZpb3JpIGVsZW1lbnRzIGFwcGxpY2F0aW9uLlxuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQHB1YmxpY1xuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUudGVtcGxhdGVzLkxpc3RSZXBvcnQuTGlzdFJlcG9ydENvbnRyb2xsZXJcIilcbmNsYXNzIExpc3RSZXBvcnRDb250cm9sbGVyIGV4dGVuZHMgUGFnZUNvbnRyb2xsZXIge1xuXHRAdXNpbmdFeHRlbnNpb24oXG5cdFx0SW50ZXJuYWxSb3V0aW5nLm92ZXJyaWRlKHtcblx0XHRcdG9uQWZ0ZXJCaW5kaW5nOiBmdW5jdGlvbiAodGhpczogSW50ZXJuYWxSb3V0aW5nKSB7XG5cdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgTGlzdFJlcG9ydENvbnRyb2xsZXIpLl9vbkFmdGVyQmluZGluZygpO1xuXHRcdFx0fVxuXHRcdH0pXG5cdClcblx0X3JvdXRpbmchOiBJbnRlcm5hbFJvdXRpbmc7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFxuXHRcdEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uLm92ZXJyaWRlKHtcblx0XHRcdGdldEVudGl0eVNldDogZnVuY3Rpb24gKHRoaXM6IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uKSB7XG5cdFx0XHRcdHJldHVybiAodGhpcy5iYXNlIGFzIExpc3RSZXBvcnRDb250cm9sbGVyKS5nZXRDdXJyZW50RW50aXR5U2V0KCk7XG5cdFx0XHR9XG5cdFx0fSlcblx0KVxuXHRfaW50ZW50QmFzZWROYXZpZ2F0aW9uITogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFNpZGVFZmZlY3RzLm92ZXJyaWRlKFNpZGVFZmZlY3RzT3ZlcnJpZGUpKVxuXHRfc2lkZUVmZmVjdHMhOiBTaWRlRWZmZWN0cztcblxuXHRAdXNpbmdFeHRlbnNpb24oSW50ZW50QmFzZWROYXZpZ2F0aW9uLm92ZXJyaWRlKEludGVudEJhc2VkTmF2aWdhdGlvbk92ZXJyaWRlKSlcblx0aW50ZW50QmFzZWROYXZpZ2F0aW9uITogSW50ZW50QmFzZWROYXZpZ2F0aW9uO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihTaGFyZS5vdmVycmlkZShTaGFyZU92ZXJyaWRlcykpXG5cdHNoYXJlITogU2hhcmU7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFZpZXdTdGF0ZS5vdmVycmlkZShWaWV3U3RhdGVPdmVycmlkZXMpKVxuXHR2aWV3U3RhdGUhOiBWaWV3U3RhdGU7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKEtQSU1hbmFnZW1lbnQpXG5cdGtwaU1hbmFnZW1lbnQhOiBLUElNYW5hZ2VtZW50O1xuXG5cdEB1c2luZ0V4dGVuc2lvbihQbGFjZWhvbGRlcilcblx0cGxhY2Vob2xkZXIhOiBQbGFjZWhvbGRlcjtcblxuXHRwcm90ZWN0ZWQgZXh0ZW5zaW9uQVBJPzogRXh0ZW5zaW9uQVBJO1xuXG5cdHByaXZhdGUgZmlsdGVyQmFyQ29uZGl0aW9ucz86IHVua25vd247XG5cblx0cHJpdmF0ZSBoYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzPzogYm9vbGVhbjtcblxuXHRwcml2YXRlIGhhc1BlbmRpbmdUYWJsZUNoYW5nZXM/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGV4dGVuc2lvbiBBUEkgZm9yIHRoZSBjdXJyZW50IHBhZ2UuXG5cdCAqIEBwdWJsaWNcblx0ICogQHJldHVybnMgVGhlIGV4dGVuc2lvbiBBUEkuXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Z2V0RXh0ZW5zaW9uQVBJKCk6IEV4dGVuc2lvbkFQSSB7XG5cdFx0aWYgKCF0aGlzLmV4dGVuc2lvbkFQSSkge1xuXHRcdFx0dGhpcy5leHRlbnNpb25BUEkgPSBuZXcgRXh0ZW5zaW9uQVBJKHRoaXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5leHRlbnNpb25BUEk7XG5cdH1cblxuXHRvbkluaXQoKTogdm9pZCB7XG5cdFx0UGFnZUNvbnRyb2xsZXIucHJvdG90eXBlLm9uSW5pdC5hcHBseSh0aGlzKTtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRpZiAoZmlsdGVyQmFyKSB7XG5cdFx0XHR0aGlzLl9zdG9yZUZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQoZmlsdGVyQmFyLCBvSW50ZXJuYWxNb2RlbENvbnRleHQpO1xuXHRcdH1cblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoYXNQZW5kaW5nRmlsdGVyc1wiLCB0cnVlKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoaWRlRHJhZnRJbmZvXCIsIGZhbHNlKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJ1b21cIiwge30pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInNjYWxlZmFjdG9yXCIsIHt9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzY2FsZWZhY3Rvck51bWJlclwiLCB7fSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3VycmVuY3lcIiwge30pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImlzSW5zaWdodHNTdXBwb3J0ZWRcIiwgZmFsc2UpO1xuXG5cdFx0aWYgKHRoaXMuX2hhc011bHRpVmlzdWFsaXphdGlvbnMoKSkge1xuXHRcdFx0bGV0IGFscENvbnRlbnRWaWV3ID0gdGhpcy5fZ2V0RGVmYXVsdFBhdGgoKTtcblx0XHRcdGlmICghRGV2aWNlLnN5c3RlbS5kZXNrdG9wICYmIGFscENvbnRlbnRWaWV3ID09PSBUZW1wbGF0ZUNvbnRlbnRWaWV3Lkh5YnJpZCkge1xuXHRcdFx0XHRhbHBDb250ZW50VmlldyA9IFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQ7XG5cdFx0XHR9XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJhbHBDb250ZW50Vmlld1wiLCBhbHBDb250ZW50Vmlldyk7XG5cdFx0fVxuXG5cdFx0Ly8gU3RvcmUgY29uZGl0aW9ucyBmcm9tIGZpbHRlciBiYXJcblx0XHQvLyB0aGlzIGlzIGxhdGVyIHVzZWQgYmVmb3JlIG5hdmlnYXRpb24gdG8gZ2V0IGNvbmRpdGlvbnMgYXBwbGllZCBvbiB0aGUgZmlsdGVyIGJhclxuXHRcdHRoaXMuZmlsdGVyQmFyQ29uZGl0aW9ucyA9IHt9O1xuXG5cdFx0Ly8gQXMgQXBwU3RhdGVIYW5kbGVyLmFwcGx5QXBwU3RhdGUgdHJpZ2dlcnMgYSBuYXZpZ2F0aW9uIHdlIHdhbnQgdG8gbWFrZSBzdXJlIGl0IHdpbGxcblx0XHQvLyBoYXBwZW4gYWZ0ZXIgdGhlIHJvdXRlTWF0Y2ggZXZlbnQgaGFzIGJlZW4gcHJvY2Vzc2VkIChvdGhlcndpc2UgdGhlIHJvdXRlciBnZXRzIGJyb2tlbilcblx0XHR0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRlclByb3h5KCkud2FpdEZvclJvdXRlTWF0Y2hCZWZvcmVOYXZpZ2F0aW9uKCk7XG5cblx0XHQvLyBDb25maWd1cmUgdGhlIGluaXRpYWwgbG9hZCBzZXR0aW5nc1xuXHRcdHRoaXMuX3NldEluaXRMb2FkKCk7XG5cdFx0Y29uc3QgdmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IHVpTW9kZWwgPSB2aWV3LmdldE1vZGVsKFwidWlcIik7XG5cdFx0Y29uc3QgcGF0aCA9IGAvJHt2aWV3LmdldElkKCl9YDtcblx0XHR1aU1vZGVsLnNldFByb3BlcnR5KHBhdGgsIHsgaXNFZGl0YWJsZTogZmFsc2UgfSk7XG5cdFx0dmlldy5iaW5kRWxlbWVudCh7IHBhdGgsIG1vZGVsOiBcInVpXCIgfSk7XG5cdH1cblxuXHRvbkV4aXQoKTogdm9pZCB7XG5cdFx0ZGVsZXRlIHRoaXMuZmlsdGVyQmFyQ29uZGl0aW9ucztcblx0XHRpZiAodGhpcy5leHRlbnNpb25BUEkpIHtcblx0XHRcdHRoaXMuZXh0ZW5zaW9uQVBJLmRlc3Ryb3koKTtcblx0XHR9XG5cdFx0ZGVsZXRlIHRoaXMuZXh0ZW5zaW9uQVBJO1xuXHR9XG5cblx0X29uQWZ0ZXJCaW5kaW5nKCk6IHZvaWQge1xuXHRcdGNvbnN0IGFUYWJsZXMgPSB0aGlzLl9nZXRDb250cm9scyhcInRhYmxlXCIpIGFzIFRhYmxlW107XG5cdFx0bGV0IHVwZGF0ZUFjdGlvbnMgPSB0cnVlO1xuXHRcdGlmIChFZGl0U3RhdGUuaXNFZGl0U3RhdGVEaXJ0eSgpKSB7XG5cdFx0XHR0aGlzLl9nZXRNdWx0aU1vZGVDb250cm9sKCk/LmludmFsaWRhdGVDb250ZW50KCk7XG5cdFx0XHRjb25zdCB0YWJsZSA9IHRoaXMuX2dldFRhYmxlKCk7XG5cdFx0XHRjb25zdCBvVGFibGVCaW5kaW5nID0gdGFibGU/LmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdGlmIChvVGFibGVCaW5kaW5nKSB7XG5cdFx0XHRcdHVwZGF0ZUFjdGlvbnMgPSBmYWxzZTtcblx0XHRcdFx0Y29uc3QgdGFibGVBUEkgPSB0YWJsZT8uZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cblx0XHRcdFx0Ly8gVXBkYXRlIHRoZSB0YWJsZSBjb250ZW50IHVzaW5nIHNpZGUgZWZmZWN0cyAobGlzdEJpbmRpbmcucmVmcmVzaCBkb2Vzbid0IGtlZXAgZXhwYW5zaW9uIHN0YXRlcyBpbiBhIFRyZWVUYWJsZSlcblx0XHRcdFx0Q29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuZ2V0VmlldygpKVxuXHRcdFx0XHRcdC5nZXRSb3V0aW5nU2VydmljZSgpXG5cdFx0XHRcdFx0LndhaXRGb3JCaW5kaW5nQ2xlYW51cCgpXG5cdFx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0b1RhYmxlQmluZGluZy5hdHRhY2hFdmVudE9uY2UoXCJkYXRhUmVjZWl2ZWRcIiwgKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVUYWJsZUFjdGlvbnMoYVRhYmxlcyk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGlmICh0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLnR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRcdFx0XHRcdFx0Ly8gQXMgdGhlIHJlZnJlc2ggb24gYSBUcmVlVGFibGUgdXNlcyBzaWRlLWVmZmVjdHMsIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBwZW5kaW5nIGNoYW5nZXNcblx0XHRcdFx0XHRcdFx0Ly8gYmVmb3JlIHRoZSBzaWRlLWVmZmVjdHMgYXJlIHF1ZXJpZWQgKGUuZy4gZmFpbGVkIFBBVENIIHF1ZXJpZXMgdGhhdCB3b3VsZCBiZSByZXNlbnQgdG9nZXRoZXIgd2l0aCBzaWRlIGVmZmVjdHMgR0VUKVxuXHRcdFx0XHRcdFx0XHR0aGlzLmdldE1vZGVsKCkucmVzZXRDaGFuZ2VzKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR0YWJsZUFQSS5yZWZyZXNoKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRcdExvZy53YXJuaW5nKFwiRXJyb3Igd2hpbGUgd2FpdGluZyByZWZyZXNoaW5nIExpc3RSZXBvcnQgdGFibGVcIiwgZSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRFZGl0U3RhdGUuc2V0RWRpdFN0YXRlUHJvY2Vzc2VkKCk7XG5cdFx0fVxuXG5cdFx0aWYgKHVwZGF0ZUFjdGlvbnMpIHtcblx0XHRcdHRoaXMuX3VwZGF0ZVRhYmxlQWN0aW9ucyhhVGFibGVzKTtcblx0XHR9XG5cblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0aWYgKCFpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImluaXRpYWxWYXJpYW50QXBwbGllZFwiKSkge1xuXHRcdFx0Y29uc3Qgdmlld0lkID0gdGhpcy5nZXRWaWV3KCkuZ2V0SWQoKTtcblx0XHRcdHRoaXMucGFnZVJlYWR5LndhaXRGb3IodGhpcy5fYXBwbHlBcHBTdGF0ZSh2aWV3SWQpKTtcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaW5pdGlhbFZhcmlhbnRBcHBsaWVkXCIsIHRydWUpO1xuXHRcdH1cblx0XHRjb25zdCBlbnZpcm9ubWVudENhcGFiaWxpdGllcyA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLmdldFZpZXcoKSkuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKTtcblx0XHRlbnZpcm9ubWVudENhcGFiaWxpdGllc1xuXHRcdFx0LmlzSW5zaWdodHNFbmFibGVkKClcblx0XHRcdC50aGVuKChpc0luc2lnaHRzRW5hYmxlZDogYm9vbGVhbikgPT4ge1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImlzSW5zaWdodHNTdXBwb3J0ZWRcIiwgaXNJbnNpZ2h0c0VuYWJsZWQpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKChlcnJvcjogdW5rbm93bikgPT4ge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBjaGVja2luZyBpZiBpbnNpZ2h0cyBhcmUgZW5hYmxlZFwiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRmb3JtYXR0ZXJzID0ge1xuXHRcdHNldEFMUENvbnRyb2xNZXNzYWdlU3RyaXAoXG5cdFx0XHR0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlcixcblx0XHRcdGFJZ25vcmVkRmllbGRzOiBzdHJpbmdbXSxcblx0XHRcdGJJc0NoYXJ0OiBib29sZWFuIHwgc3RyaW5nLFxuXHRcdFx0b0FwcGx5U3VwcG9ydGVkPzogeyBlbmFibGVTZWFyY2g6IGJvb2xlYW4gfVxuXHRcdCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0XHRsZXQgc1RleHQgPSBcIlwiO1xuXHRcdFx0YklzQ2hhcnQgPSBiSXNDaGFydCA9PT0gXCJ0cnVlXCIgfHwgYklzQ2hhcnQgPT09IHRydWU7XG5cdFx0XHRjb25zdCBvRmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdFx0aWYgKG9GaWx0ZXJCYXIgJiYgQXJyYXkuaXNBcnJheShhSWdub3JlZEZpZWxkcykgJiYgYUlnbm9yZWRGaWVsZHMubGVuZ3RoID4gMCAmJiBiSXNDaGFydCkge1xuXHRcdFx0XHRjb25zdCBhSWdub3JlZExhYmVscyA9IE1lc3NhZ2VTdHJpcC5nZXRMYWJlbHMoXG5cdFx0XHRcdFx0YUlnbm9yZWRGaWVsZHMsXG5cdFx0XHRcdFx0b0ZpbHRlckJhci5kYXRhKFwiZW50aXR5VHlwZVwiKSxcblx0XHRcdFx0XHRvRmlsdGVyQmFyLFxuXHRcdFx0XHRcdGdldFJlc291cmNlTW9kZWwob0ZpbHRlckJhcilcblx0XHRcdFx0KTtcblx0XHRcdFx0Y29uc3QgYklzU2VhcmNoSWdub3JlZCA9ICFvQXBwbHlTdXBwb3J0ZWQ/LmVuYWJsZVNlYXJjaDtcblx0XHRcdFx0c1RleHQgPSBiSXNDaGFydFxuXHRcdFx0XHRcdD8gTWVzc2FnZVN0cmlwLmdldEFMUFRleHQoYUlnbm9yZWRMYWJlbHMsIG9GaWx0ZXJCYXIsIGJJc1NlYXJjaElnbm9yZWQpXG5cdFx0XHRcdFx0OiBNZXNzYWdlU3RyaXAuZ2V0VGV4dChhSWdub3JlZExhYmVscywgb0ZpbHRlckJhciwgXCJcIik7XG5cdFx0XHRcdHJldHVybiBzVGV4dDtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShcIkFmdGVyXCIpXG5cdGFzeW5jIG9uUGFnZVJlYWR5KG1QYXJhbWV0ZXJzOiB7IGZvcmNlRm9jdXM/OiBib29sZWFuIH0pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAobVBhcmFtZXRlcnMuZm9yY2VGb2N1cykge1xuXHRcdFx0dGhpcy5fc2V0SW5pdGlhbEZvY3VzKCk7XG5cdFx0fVxuXHRcdC8vIFJlbW92ZSB0aGUgaGFuZGxlciBvbiBiYWNrIG5hdmlnYXRpb24gdGhhdCBkaXNwbGF5cyBEcmFmdCBjb25maXJtYXRpb25cblx0XHRhd2FpdCB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFNoZWxsU2VydmljZXMoKS5zZXRCYWNrTmF2aWdhdGlvbih1bmRlZmluZWQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCBjYWxsZWQgd2hlbiB0aGUgY29udGVudCBvZiBhIGN1c3RvbSB2aWV3IHVzZWQgaW4gYSBsaXN0IHJlcG9ydCBuZWVkcyB0byBiZSByZWZyZXNoZWQuXG5cdCAqIFRoaXMgaGFwcGVucyBlaXRoZXIgd2hlbiB0aGVyZSBpcyBhIGNoYW5nZSBvbiB0aGUgRmlsdGVyQmFyIGFuZCB0aGUgc2VhcmNoIGlzIHRyaWdnZXJlZCxcblx0ICogb3Igd2hlbiBhIHRhYiB3aXRoIGN1c3RvbSBjb250ZW50IGlzIHNlbGVjdGVkLFxuXHQgKiBvciB3aGVuIHRoZSB2aWV3IGlzIGZvcmNlZCB0byBiZSByZWZyZXNoZWQgdGhyb3VnaCB0aGUgRXh0ZW5zaW9uIEFQSSBmb3IgdGhlIGxpc3QgcmVwb3J0J3MgcHVibGljIG1ldGhvZCBzZXRUYWJDb250ZW50VG9CZVJlZnJlc2hlZE9uTmV4dE9wZW5pbmcuXG5cdCAqIFRoaXMgbWV0aG9kIGNhbiBiZSBvdmVyd3JpdHRlbiBieSB0aGUgY29udHJvbGxlciBleHRlbnNpb24gaW4gY2FzZSBvZiBjdXN0b21pemF0aW9uLlxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMgTWFwIGNvbnRhaW5pbmcgdGhlIGZpbHRlciBjb25kaXRpb25zIG9mIHRoZSBGaWx0ZXJCYXIsIHRoZSBjdXJyZW50VGFiSURcblx0ICogYW5kIHRoZSB2aWV3IHJlZnJlc2ggY2F1c2UgKHRhYkNoYW5nZWQsIHNlYXJjaCBvciBmb3JjZWRSZWZyZXNoKS5cblx0ICogVGhlIG1hcCBsb29rcyBsaWtlIHRoaXM6XG5cdCAqIDxjb2RlPjxwcmU+XG5cdCAqIFx0e1xuXHQgKiBcdFx0ZmlsdGVyQ29uZGl0aW9uczoge1xuXHQgKiBcdFx0XHRDb3VudHJ5OiBbXG5cdCAqIFx0XHRcdFx0e1xuXHQgKiBcdFx0XHRcdFx0b3BlcmF0b3I6IFwiRVFcIlxuXHQgKlx0XHRcdFx0XHR2YWxpZGF0ZWQ6IFwiTm90VmFsaWRhdGVkXCJcblx0ICpcdFx0XHRcdFx0dmFsdWVzOiBbXCJHZXJtYW55XCIsIC4uLl1cblx0ICogXHRcdFx0XHR9LFxuXHQgKiBcdFx0XHRcdC4uLlxuXHQgKiBcdFx0XHRdXG5cdCAqIFx0XHRcdC4uLlxuXHQgKiBcdFx0fSxcblx0ICpcdFx0Y3VycmVudFRhYklkOiBcImZlOjpDdXN0b21UYWI6OnRhYjFcIixcblx0ICpcdFx0cmVmcmVzaENhdXNlOiBcInRhYkNoYW5nZWRcIiB8IFwic2VhcmNoXCIgfCBcImZvcmNlZFJlZnJlc2hcIlxuXHQgKlx0fVxuXHQgKiA8L3ByZT48L2NvZGU+XG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRvblZpZXdOZWVkc1JlZnJlc2gobVBhcmFtZXRlcnM6IHVua25vd24pOiB2b2lkIHtcblx0XHQvKiBUbyBiZSBvdmVycmlkZW4gKi9cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgY2FsbGVkIHdoZW4gYSBmaWx0ZXIgb3Igc2VhcmNoIHZhbHVlIGhhcyBiZWVuIGNoYW5nZWQgaW4gdGhlIEZpbHRlckJhcixcblx0ICogYnV0IGhhcyBub3QgYmVlbiB2YWxpZGF0ZWQgeWV0IGJ5IHRoZSBlbmQgdXNlciAod2l0aCB0aGUgJ0dvJyBvciAnU2VhcmNoJyBidXR0b24pLlxuXHQgKiBUeXBpY2FsbHksIHRoZSBjb250ZW50IG9mIHRoZSBjdXJyZW50IHRhYiBpcyBncmV5ZWQgb3V0IHVudGlsIHRoZSBmaWx0ZXJzIGFyZSB2YWxpZGF0ZWQuXG5cdCAqIFRoaXMgbWV0aG9kIGNhbiBiZSBvdmVyd3JpdHRlbiBieSB0aGUgY29udHJvbGxlciBleHRlbnNpb24gaW4gY2FzZSBvZiBjdXN0b21pemF0aW9uLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdG9uUGVuZGluZ0ZpbHRlcnMoKTogdm9pZCB7XG5cdFx0LyogVG8gYmUgb3ZlcnJpZGVuICovXG5cdH1cblxuXHRnZXRDdXJyZW50RW50aXR5U2V0KCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldFRhYmxlKCk/LmRhdGEoXCJ0YXJnZXRDb2xsZWN0aW9uUGF0aFwiKS5zbGljZSgxKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgY2FsbGVkIHdoZW4gdGhlICdDbGVhcicgYnV0dG9uIG9uIHRoZSBGaWx0ZXJCYXIgaXMgcHJlc3NlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRvbkFmdGVyQ2xlYXIoKTogdm9pZCB7XG5cdFx0LyogVG8gYmUgb3ZlcnJpZGVuICovXG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaW5pdGlhdGVzIHRoZSB1cGRhdGUgb2YgdGhlIGVuYWJsZWQgc3RhdGUgb2YgdGhlIERhdGFGaWVsZEZvckFjdGlvbiBhbmQgdGhlIHZpc2libGUgc3RhdGUgb2YgdGhlIERhdGFGaWVsZEZvcklCTiBidXR0b25zLlxuXHQgKiBAcGFyYW0gYVRhYmxlcyBBcnJheSBvZiB0YWJsZXMgaW4gdGhlIGxpc3QgcmVwb3J0XG5cdCAqL1xuXHRfdXBkYXRlVGFibGVBY3Rpb25zKGFUYWJsZXM6IFRhYmxlW10pOiB2b2lkIHtcblx0XHRsZXQgYUlCTkFjdGlvbnM6IFVJNUVsZW1lbnRbXSA9IFtdO1xuXHRcdGFUYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAob1RhYmxlKSB7XG5cdFx0XHRhSUJOQWN0aW9ucyA9IENvbW1vblV0aWxzLmdldElCTkFjdGlvbnMob1RhYmxlLCBhSUJOQWN0aW9ucyk7XG5cdFx0fSk7XG5cdFx0Q29tbW9uVXRpbHMudXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkoYUlCTkFjdGlvbnMsIHRoaXMuZ2V0VmlldygpKTtcblx0XHRDb21tb25VdGlscy51cGRhdGVNZW51QnV0dG9uVmlzaWJsaXR5KGFJQk5BY3Rpb25zKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBzY3JvbGxzIHRvIGEgc3BlY2lmaWMgcm93IG9uIGFsbCB0aGUgYXZhaWxhYmxlIHRhYmxlcy5cblx0ICogQHBhcmFtIHNSb3dQYXRoIFRoZSBwYXRoIG9mIHRoZSB0YWJsZSByb3cgY29udGV4dCB0byBiZSBzY3JvbGxlZCB0b1xuXHQgKi9cblx0X3Njcm9sbFRhYmxlc1RvUm93KHNSb3dQYXRoOiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLl9nZXRDb250cm9scyhcInRhYmxlXCIpLmZvckVhY2goZnVuY3Rpb24gKG9UYWJsZTogQ29udHJvbCkge1xuXHRcdFx0VGFibGVTY3JvbGxlci5zY3JvbGxUYWJsZVRvUm93KG9UYWJsZSBhcyBUYWJsZSwgc1Jvd1BhdGgpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgYSBzaWxlbnQgZm9jdXMgb24gdGhlIGZpbHRlciBmaWVsZC4gU3VwcHJlc3NlcyB0aGUgb3BlbmluZyBvZiB0aGUgdHlwZS1haGVhZCBwb3B1cC5cblx0ICogQHBhcmFtIGZpbHRlckZpZWxkIFRoZSBmaWVsZCB3aGVyZSB0aGUgZm9jdXMgc2hvdWxkIGJlIHNldCBhZnRlciB0aGUgaW5pdGlhbCBsb2FkXG5cdCAqL1xuXHRfZm9jdXNTaWxlbnQoZmlsdGVyRmllbGQ6IEZpbHRlckZpZWxkKTogdm9pZCB7XG5cdFx0Y29uc3QgZm9jdXNJbmZvID0gZmlsdGVyRmllbGQuZ2V0Rm9jdXNJbmZvKCkgYXMgeyB0YXJnZXRJbmZvOiBvYmplY3QgfTtcblx0XHRmb2N1c0luZm8udGFyZ2V0SW5mbyA9IHsgc2lsZW50OiB0cnVlIH07XG5cdFx0ZmlsdGVyRmllbGQuZm9jdXMoZm9jdXNJbmZvKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBpbml0aWFsIGZvY3VzIGluIGEgbGlzdCByZXBvcnQgYmFzZWQgb24gdGhlIFVzZXIgRXhwZXJpZW5jZSBndWlkZWxpbmVzLlxuXHQgKlxuXHQgKi9cblx0X3NldEluaXRpYWxGb2N1cygpOiB2b2lkIHtcblx0XHRjb25zdCBkeW5hbWljUGFnZSA9IHRoaXMuX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbCgpLFxuXHRcdFx0aXNIZWFkZXJFeHBhbmRlZCA9IGR5bmFtaWNQYWdlLmdldEhlYWRlckV4cGFuZGVkKCksXG5cdFx0XHRmaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCkgYXMgRmlsdGVyQmFyO1xuXHRcdGlmIChmaWx0ZXJCYXIgJiYgIXRoaXMuX2lzRmlsdGVyQmFySGlkZGVuVXNlZCgpKSB7XG5cdFx0XHQvL0VuYWJsaW5nIG1hbmRhdG9yeSBmaWx0ZXIgZmllbGRzIG1lc3NhZ2UgZGlhbG9nXG5cdFx0XHRpZiAoIWZpbHRlckJhci5nZXRTaG93TWVzc2FnZXMoKSkge1xuXHRcdFx0XHRmaWx0ZXJCYXIuc2V0U2hvd01lc3NhZ2VzKHRydWUpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGlzSGVhZGVyRXhwYW5kZWQpIHtcblx0XHRcdFx0Y29uc3QgZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkID0gZmlsdGVyQmFyLmdldEZpbHRlckl0ZW1zKCkuZmluZChmdW5jdGlvbiAob0ZpbHRlckl0ZW06IEZpbHRlckZpZWxkKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9GaWx0ZXJJdGVtLmdldFJlcXVpcmVkKCkgJiYgb0ZpbHRlckl0ZW0uZ2V0Q29uZGl0aW9ucygpLmxlbmd0aCA9PT0gMDtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdC8vRm9jdXNpbmcgb24gdGhlIGZpcnN0IGVtcHR5IG1hbmRhdG9yeSBmaWx0ZXIgZmllbGQsIG9yIG9uIHRoZSBmaXJzdCBmaWx0ZXIgZmllbGQgaWYgdGhlIHRhYmxlIGRhdGEgaXMgbG9hZGVkXG5cdFx0XHRcdC8vIERvIGEgXCJzaWxlbnRcIiBmb2N1cyBmb3IgRmlsdGVyRmllbGQsIGJ5IGFkZGluZyB0aGUgc2lsZW50IGF0dHJpYnV0ZS4gVGhlIHNpbGVudCBhdHRyaWJ1dGUgc3VwcHJlc3NlcyB0eXBlYWhlYWQgb3BlbmluZy5cblx0XHRcdFx0aWYgKGZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZCkge1xuXHRcdFx0XHRcdGlmIChmaXJzdEVtcHR5TWFuZGF0b3J5RmllbGQuaXNBPEZpbHRlckZpZWxkPihcInNhcC51aS5tZGMuRmlsdGVyRmllbGRcIikpIHtcblx0XHRcdFx0XHRcdHRoaXMuX2ZvY3VzU2lsZW50KGZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdChmaXJzdEVtcHR5TWFuZGF0b3J5RmllbGQgYXMgQ29udHJvbCkuZm9jdXMoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAodGhpcy5faXNJbml0TG9hZEVuYWJsZWQoKSAmJiBmaWx0ZXJCYXIuZ2V0RmlsdGVySXRlbXMoKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0Ly8gQWRkIGNoZWNrIGZvciBhdmFpbGFibGUgZmlsdGVySXRlbXNcblx0XHRcdFx0XHRjb25zdCBmaWVsZFRvRm9jdXMgPSBmaWx0ZXJCYXIuZ2V0RmlsdGVySXRlbXMoKVswXTtcblx0XHRcdFx0XHRpZiAoZmllbGRUb0ZvY3VzLmlzQTxGaWx0ZXJGaWVsZD4oXCJzYXAudWkubWRjLkZpbHRlckZpZWxkXCIpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLl9mb2N1c1NpbGVudChmaWVsZFRvRm9jdXMpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQoZmllbGRUb0ZvY3VzIGFzIENvbnRyb2wpLmZvY3VzKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vRm9jdXNpbmcgb24gdGhlIEdvIGJ1dHRvblxuXHRcdFx0XHRcdHRoaXMuZ2V0VmlldygpLmJ5SWQoYCR7dGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbElkKCl9LWJ0blNlYXJjaGApPy5mb2N1cygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMuX2lzSW5pdExvYWRFbmFibGVkKCkpIHtcblx0XHRcdFx0dGhpcy5fZ2V0VGFibGUoKVxuXHRcdFx0XHRcdD8uZm9jdXNSb3coMClcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBzZXR0aW5nIGluaXRpYWwgZm9jdXMgb24gdGhlIHRhYmxlIFwiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl9nZXRUYWJsZSgpXG5cdFx0XHRcdD8uZm9jdXNSb3coMClcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHNldHRpbmcgaW5pdGlhbCBmb2N1cyBvbiB0aGUgdGFibGUgXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdF9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbigpOiB7IHRpdGxlPzogc3RyaW5nOyBzdWJ0aXRsZTogc3RyaW5nOyBpbnRlbnQ6IHN0cmluZzsgaWNvbjogc3RyaW5nIH0ge1xuXHRcdGNvbnN0IG9NYW5pZmVzdEVudHJ5ID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLmFwcFwiKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dGl0bGU6IG9NYW5pZmVzdEVudHJ5LnRpdGxlLFxuXHRcdFx0c3VidGl0bGU6IG9NYW5pZmVzdEVudHJ5LnN1YlRpdGxlIHx8IFwiXCIsXG5cdFx0XHRpbnRlbnQ6IFwiXCIsXG5cdFx0XHRpY29uOiBcIlwiXG5cdFx0fTtcblx0fVxuXG5cdF9nZXRGaWx0ZXJCYXJDb250cm9sKCk6IEZpbHRlckJhciB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQodGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbElkKCkpIGFzIEZpbHRlckJhciB8IHVuZGVmaW5lZDtcblx0fVxuXG5cdF9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2woKTogRHluYW1pY1BhZ2Uge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5ieUlkKHRoaXMuX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbElkKCkpIGFzIER5bmFtaWNQYWdlO1xuXHR9XG5cblx0X2dldEFkYXB0YXRpb25GaWx0ZXJCYXJDb250cm9sKCk6IENvbnRyb2wge1xuXHRcdC8vIElmIHRoZSBhZGFwdGF0aW9uIGZpbHRlciBiYXIgaXMgcGFydCBvZiB0aGUgRE9NIHRyZWUsIHRoZSBcIkFkYXB0IEZpbHRlclwiIGRpYWxvZyBpcyBvcGVuLFxuXHRcdC8vIGFuZCB3ZSByZXR1cm4gdGhlIGFkYXB0YXRpb24gZmlsdGVyIGJhciBhcyBhbiBhY3RpdmUgY29udHJvbCAodmlzaWJsZSBmb3IgdGhlIHVzZXIpXG5cdFx0Y29uc3QgYWRhcHRhdGlvbkZpbHRlckJhciA9ICh0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCkgYXMgeyBnZXRJbmJ1aWx0RmlsdGVyPzogRnVuY3Rpb24gfSkuZ2V0SW5idWlsdEZpbHRlcj8uKCk7XG5cdFx0cmV0dXJuIGFkYXB0YXRpb25GaWx0ZXJCYXI/LmdldFBhcmVudCgpID8gYWRhcHRhdGlvbkZpbHRlckJhciA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdGFzeW5jIF9hcHBseUFwcFN0YXRlKHZpZXdJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0YXdhaXQgdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRBcHBTdGF0ZUhhbmRsZXIoKS5hcHBseUFwcFN0YXRlKHZpZXdJZCwgdGhpcy5nZXRWaWV3KCkpO1xuXHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdFx0aWYgKG9GaWx0ZXJCYXIpIHtcblx0XHRcdG9GaWx0ZXJCYXIuc2V0U3VzcGVuZFNlbGVjdGlvbihmYWxzZSk7XG5cdFx0fSBlbHNlIGlmICh0aGlzLl9pc0ZpbHRlckJhckhpZGRlbigpKSB7XG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaGFzUGVuZGluZ0ZpbHRlcnNcIiwgZmFsc2UpO1xuXHRcdFx0aWYgKHRoaXMuX2lzTXVsdGlNb2RlKCkpIHtcblx0XHRcdFx0dGhpcy5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpLnNldENvdW50c091dERhdGVkKHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9nZXRTZWdtZW50ZWRCdXR0b24oc0NvbnRyb2w6IHN0cmluZyk6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IHNTZWdtZW50ZWRCdXR0b25JZCA9IChzQ29udHJvbCA9PT0gXCJDaGFydFwiID8gdGhpcy5nZXRDaGFydENvbnRyb2woKSA6IHRoaXMuX2dldFRhYmxlKCkpPy5kYXRhKFwic2VnbWVudGVkQnV0dG9uSWRcIik7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQoc1NlZ21lbnRlZEJ1dHRvbklkKTtcblx0fVxuXG5cdF9nZXRDb250cm9sRnJvbVBhZ2VNb2RlbFByb3BlcnR5KHNQYXRoOiBzdHJpbmcpOiBDb250cm9sIHwgTWFjcm9BUEkgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGNvbnRyb2xJZCA9IHRoaXMuX2dldFBhZ2VNb2RlbCgpPy5nZXRQcm9wZXJ0eShzUGF0aCk7XG5cdFx0cmV0dXJuIGNvbnRyb2xJZCA/ICh0aGlzLmdldFZpZXcoKS5ieUlkKGNvbnRyb2xJZCkgYXMgQ29udHJvbCkgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHRfZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sSWQoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0UGFnZU1vZGVsKCk/LmdldFByb3BlcnR5KFwiL2R5bmFtaWNMaXN0UmVwb3J0SWRcIikgfHwgXCJcIjtcblx0fVxuXG5cdF9nZXRGaWx0ZXJCYXJDb250cm9sSWQoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0UGFnZU1vZGVsKCk/LmdldFByb3BlcnR5KFwiL2ZpbHRlckJhcklkXCIpIHx8IFwiXCI7XG5cdH1cblxuXHRnZXRDaGFydENvbnRyb2woKTogQ29udHJvbCB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldENvbnRyb2xGcm9tUGFnZU1vZGVsUHJvcGVydHkoXCIvc2luZ2xlQ2hhcnRJZFwiKSBhcyBDaGFydFR5cGU7XG5cdH1cblxuXHRfZ2V0VmlzdWFsRmlsdGVyQmFyQ29udHJvbCgpOiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBzVmlzdWFsRmlsdGVyQmFySWQgPSBTdGFibGVJZEhlbHBlci5nZW5lcmF0ZShbXCJ2aXN1YWxGaWx0ZXJcIiwgdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbElkKCldKTtcblx0XHRyZXR1cm4gc1Zpc3VhbEZpbHRlckJhcklkID8gdGhpcy5nZXRWaWV3KCkuYnlJZChzVmlzdWFsRmlsdGVyQmFySWQpIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0X2dldEZpbHRlckJhclZhcmlhbnRDb250cm9sKCk6IFZhcmlhbnRNYW5hZ2VtZW50IHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0Q29udHJvbEZyb21QYWdlTW9kZWxQcm9wZXJ0eShcIi92YXJpYW50TWFuYWdlbWVudC9pZFwiKSBhcyBWYXJpYW50TWFuYWdlbWVudDtcblx0fVxuXG5cdF9nZXRNdWx0aU1vZGVDb250cm9sKCk6IE11bHRpcGxlTW9kZUNvbnRyb2wge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5ieUlkKFwiZmU6OlRhYk11bHRpcGxlTW9kZTo6Q29udHJvbFwiKSBhcyBNdWx0aXBsZU1vZGVDb250cm9sO1xuXHR9XG5cblx0X2dldEljb25UYWJCYXIoKTogSWNvblRhYkJhciB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQoXCJmZTo6VGFiTXVsdGlwbGVNb2RlXCIpIGFzIEljb25UYWJCYXI7XG5cdH1cblxuXHRfZ2V0VGFibGUoKTogVGFibGUgfCB1bmRlZmluZWQge1xuXHRcdGlmICh0aGlzLl9pc011bHRpTW9kZSgpKSB7XG5cdFx0XHRjb25zdCBvQ29udHJvbCA9IHRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKT8uZ2V0U2VsZWN0ZWRJbm5lckNvbnRyb2woKT8uY29udGVudDtcblx0XHRcdHJldHVybiBvQ29udHJvbD8uaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSA/IChvQ29udHJvbCBhcyBUYWJsZSkgOiB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0aGlzLl9nZXRDb250cm9sRnJvbVBhZ2VNb2RlbFByb3BlcnR5KFwiL3NpbmdsZVRhYmxlSWRcIikgYXMgVGFibGUgfCB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cblx0X2dldENvbnRyb2xzKHNLZXk/OiBzdHJpbmcpOiBDb250cm9sW10ge1xuXHRcdGlmICh0aGlzLl9pc011bHRpTW9kZSgpKSB7XG5cdFx0XHRjb25zdCBhQ29udHJvbHM6IENvbnRyb2xbXSA9IFtdO1xuXHRcdFx0Y29uc3Qgb1RhYk11bHRpTW9kZSA9IHRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKS5jb250ZW50O1xuXHRcdFx0b1RhYk11bHRpTW9kZS5nZXRJdGVtcygpLmZvckVhY2goKG9JdGVtOiB1bmtub3duKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9Db250cm9sID0gdGhpcy5nZXRWaWV3KCkuYnlJZCgob0l0ZW0gYXMgVGFiQ29udGFpbmVySXRlbSkuZ2V0S2V5KCkpIGFzIENvbnRyb2w7XG5cdFx0XHRcdGlmIChvQ29udHJvbCAmJiBzS2V5KSB7XG5cdFx0XHRcdFx0aWYgKChvSXRlbSBhcyBUYWJDb250YWluZXJJdGVtKS5nZXRLZXkoKS5pbmNsdWRlcyhgZmU6OiR7c0tleX1gKSkge1xuXHRcdFx0XHRcdFx0YUNvbnRyb2xzLnB1c2gob0NvbnRyb2wpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChvQ29udHJvbCAhPT0gdW5kZWZpbmVkICYmIG9Db250cm9sICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0YUNvbnRyb2xzLnB1c2gob0NvbnRyb2wpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBhQ29udHJvbHM7XG5cdFx0fSBlbHNlIGlmIChzS2V5ID09PSBcIkNoYXJ0XCIpIHtcblx0XHRcdGNvbnN0IG9DaGFydCA9IHRoaXMuZ2V0Q2hhcnRDb250cm9sKCk7XG5cdFx0XHRyZXR1cm4gb0NoYXJ0ID8gW29DaGFydF0gOiBbXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3Qgb1RhYmxlID0gdGhpcy5fZ2V0VGFibGUoKTtcblx0XHRcdHJldHVybiBvVGFibGUgPyBbb1RhYmxlXSA6IFtdO1xuXHRcdH1cblx0fVxuXG5cdF9nZXREZWZhdWx0UGF0aCgpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGRlZmF1bHRQYXRoID0gTGlzdFJlcG9ydFRlbXBsYXRpbmcuZ2V0RGVmYXVsdFBhdGgodGhpcy5fZ2V0UGFnZU1vZGVsKCk/LmdldFByb3BlcnR5KFwiL3ZpZXdzXCIpIHx8IFtdKTtcblx0XHRzd2l0Y2ggKGRlZmF1bHRQYXRoKSB7XG5cdFx0XHRjYXNlIFwicHJpbWFyeVwiOlxuXHRcdFx0XHRyZXR1cm4gVGVtcGxhdGVDb250ZW50Vmlldy5DaGFydDtcblx0XHRcdGNhc2UgXCJzZWNvbmRhcnlcIjpcblx0XHRcdFx0cmV0dXJuIFRlbXBsYXRlQ29udGVudFZpZXcuVGFibGU7XG5cdFx0XHRjYXNlIFwiYm90aFwiOlxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIFRlbXBsYXRlQ29udGVudFZpZXcuSHlicmlkO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8ga25vdyBpZiBMaXN0UmVwb3J0IGlzIGNvbmZpZ3VyZWQgd2l0aCBNdWx0aXBsZSBUYWJsZSBtb2RlLlxuXHQgKiBAcmV0dXJucyBJcyBNdWx0aXBsZSBUYWJsZSBtb2RlIHNldD9cblx0ICovXG5cdF9pc011bHRpTW9kZSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gISF0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0UHJvcGVydHkoXCIvbXVsdGlWaWV3c0NvbnRyb2xcIik7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGtub3cgaWYgTGlzdFJlcG9ydCBpcyBjb25maWd1cmVkIHRvIGxvYWQgZGF0YSBhdCBzdGFydCB1cC5cblx0ICogQHJldHVybnMgSXMgSW5pdExvYWQgZW5hYmxlZD9cblx0ICovXG5cdF9pc0luaXRMb2FkRW5hYmxlZCgpOiBib29sZWFuIHtcblx0XHRjb25zdCBpbml0TG9hZE1vZGUgPSB0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpLmluaXRpYWxMb2FkO1xuXHRcdHJldHVybiBpbml0TG9hZE1vZGUgPT09IEluaXRpYWxMb2FkTW9kZS5FbmFibGVkO1xuXHR9XG5cblx0X2hhc011bHRpVmlzdWFsaXphdGlvbnMoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldFBhZ2VNb2RlbCgpPy5nZXRQcm9wZXJ0eShcIi9oYXNNdWx0aVZpc3VhbGl6YXRpb25zXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBzdXNwZW5kIHNlYXJjaCBvbiB0aGUgZmlsdGVyIGJhci4gVGhlIGluaXRpYWwgbG9hZGluZyBvZiBkYXRhIGlzIGRpc2FibGVkIGJhc2VkIG9uIHRoZSBtYW5pZmVzdCBjb25maWd1cmF0aW9uIEluaXRMb2FkIC0gRGlzYWJsZWQvQXV0by5cblx0ICogSXQgaXMgZW5hYmxlZCBsYXRlciB3aGVuIHRoZSB2aWV3IHN0YXRlIGlzIHNldCwgd2hlbiBpdCBpcyBwb3NzaWJsZSB0byByZWFsaXplIGlmIHRoZXJlIGFyZSBkZWZhdWx0IGZpbHRlcnMuXG5cdCAqL1xuXHRfZGlzYWJsZUluaXRMb2FkKCk6IHZvaWQge1xuXHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHQvLyBjaGVjayBmb3IgZmlsdGVyIGJhciBoaWRkZW5cblx0XHRpZiAoZmlsdGVyQmFyKSB7XG5cdFx0XHRmaWx0ZXJCYXIuc2V0U3VzcGVuZFNlbGVjdGlvbih0cnVlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIGNhbGxlZCBieSBmbGV4IHRvIGRldGVybWluZSBpZiB0aGUgYXBwbHlBdXRvbWF0aWNhbGx5IHNldHRpbmcgb24gdGhlIHZhcmlhbnQgaXMgdmFsaWQuXG5cdCAqIENhbGxlZCBvbmx5IGZvciBTdGFuZGFyZCBWYXJpYW50IGFuZCBvbmx5IHdoZW4gdGhlcmUgaXMgZGlzcGxheSB0ZXh0IHNldCBmb3IgYXBwbHlBdXRvbWF0aWNhbGx5IChGRSBvbmx5IHNldHMgaXQgZm9yIEF1dG8pLlxuXHQgKiBAcmV0dXJucyBCb29sZWFuIHRydWUgaWYgZGF0YSBzaG91bGQgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHksIGZhbHNlIG90aGVyd2lzZVxuXHQgKi9cblx0X2FwcGx5QXV0b21hdGljYWxseU9uU3RhbmRhcmRWYXJpYW50KCk6IGJvb2xlYW4ge1xuXHRcdC8vIFdlIGFsd2F5cyByZXR1cm4gZmFsc2UgYW5kIHRha2UgY2FyZSBvZiBpdCB3aGVuIHZpZXcgc3RhdGUgaXMgc2V0XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbmZpZ3VyZSB0aGUgc2V0dGluZ3MgZm9yIGluaXRpYWwgbG9hZCBiYXNlZCBvblxuXHQgKiAtIG1hbmlmZXN0IHNldHRpbmcgaW5pdExvYWQgLSBFbmFibGVkL0Rpc2FibGVkL0F1dG9cblx0ICogLSB1c2VyJ3Mgc2V0dGluZyBvZiBhcHBseUF1dG9tYXRpY2FsbHkgb24gdmFyaWFudFxuXHQgKiAtIGlmIHRoZXJlIGFyZSBkZWZhdWx0IGZpbHRlcnNcblx0ICogV2UgZGlzYWJsZSB0aGUgZmlsdGVyIGJhciBzZWFyY2ggYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5hYmxlIGl0IHdoZW4gdmlldyBzdGF0ZSBpcyBzZXQuXG5cdCAqL1xuXHRfc2V0SW5pdExvYWQoKTogdm9pZCB7XG5cdFx0Ly8gaWYgaW5pdExvYWQgaXMgRGlzYWJsZWQgb3IgQXV0bywgc3dpdGNoIG9mZiBmaWx0ZXIgYmFyIHNlYXJjaCB0ZW1wb3JhcmlseSBhdCBzdGFydFxuXHRcdGlmICghdGhpcy5faXNJbml0TG9hZEVuYWJsZWQoKSkge1xuXHRcdFx0dGhpcy5fZGlzYWJsZUluaXRMb2FkKCk7XG5cdFx0fVxuXHRcdC8vIHNldCBob29rIGZvciBmbGV4IGZvciB3aGVuIHN0YW5kYXJkIHZhcmlhbnQgaXMgc2V0IChhdCBzdGFydCBvciBieSB1c2VyIGF0IHJ1bnRpbWUpXG5cdFx0Ly8gcmVxdWlyZWQgdG8gb3ZlcnJpZGUgdGhlIHVzZXIgc2V0dGluZyAnYXBwbHkgYXV0b21hdGljYWxseScgYmVoYXZpb3VyIGlmIHRoZXJlIGFyZSBubyBmaWx0ZXJzXG5cdFx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnRJZCA9IExpc3RSZXBvcnRUZW1wbGF0aW5nLmdldFZhcmlhbnRCYWNrUmVmZXJlbmNlKFxuXHRcdFx0dGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSxcblx0XHRcdHRoaXMuX2dldFBhZ2VNb2RlbCgpPy5nZXREYXRhKCkgYXMgTGlzdFJlcG9ydERlZmluaXRpb25cblx0XHQpO1xuXHRcdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50ID0gdmFyaWFudE1hbmFnZW1lbnRJZCAmJiAodGhpcy5nZXRWaWV3KCkuYnlJZCh2YXJpYW50TWFuYWdlbWVudElkKSBhcyBWYXJpYW50TWFuYWdlbWVudCk7XG5cdFx0aWYgKHZhcmlhbnRNYW5hZ2VtZW50KSB7XG5cdFx0XHQoXG5cdFx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50IGFzIHsgcmVnaXN0ZXJBcHBseUF1dG9tYXRpY2FsbHlPblN0YW5kYXJkVmFyaWFudD86IEZ1bmN0aW9uIH1cblx0XHRcdCk/LnJlZ2lzdGVyQXBwbHlBdXRvbWF0aWNhbGx5T25TdGFuZGFyZFZhcmlhbnQ/Lih0aGlzLl9hcHBseUF1dG9tYXRpY2FsbHlPblN0YW5kYXJkVmFyaWFudC5iaW5kKHRoaXMpKTtcblx0XHR9XG5cdH1cblxuXHRfc2V0U2hhcmVNb2RlbCgpOiB2b2lkIHtcblx0XHQvLyBUT0RPOiBkZWFjdGl2YXRlZCBmb3Igbm93IC0gY3VycmVudGx5IHRoZXJlIGlzIG5vIF90ZW1wbFByaXYgYW55bW9yZSwgdG8gYmUgZGlzY3Vzc2VkXG5cdFx0Ly8gdGhpcyBtZXRob2QgaXMgY3VycmVudGx5IG5vdCBjYWxsZWQgYW55bW9yZSBmcm9tIHRoZSBpbml0IG1ldGhvZFxuXG5cdFx0Y29uc3QgZm5HZXRVc2VyID0gT2JqZWN0UGF0aC5nZXQoXCJzYXAudXNoZWxsLkNvbnRhaW5lci5nZXRVc2VyXCIpO1xuXHRcdC8vdmFyIG9NYW5pZmVzdCA9IHRoaXMuZ2V0T3duZXJDb21wb25lbnQoKS5nZXRBcHBDb21wb25lbnQoKS5nZXRNZXRhZGF0YSgpLmdldE1hbmlmZXN0RW50cnkoXCJzYXAudWlcIik7XG5cdFx0Ly92YXIgc0Jvb2ttYXJrSWNvbiA9IChvTWFuaWZlc3QgJiYgb01hbmlmZXN0Lmljb25zICYmIG9NYW5pZmVzdC5pY29ucy5pY29uKSB8fCBcIlwiO1xuXG5cdFx0Ly9zaGFyZU1vZGVsOiBIb2xkcyBhbGwgdGhlIHNoYXJpbmcgcmVsZXZhbnQgaW5mb3JtYXRpb24gYW5kIGluZm8gdXNlZCBpbiBYTUwgdmlld1xuXHRcdGNvbnN0IG9TaGFyZUluZm8gPSB7XG5cdFx0XHRib29rbWFya1RpdGxlOiBkb2N1bWVudC50aXRsZSwgLy9UbyBuYW1lIHRoZSBib29rbWFyayBhY2NvcmRpbmcgdG8gdGhlIGFwcCB0aXRsZS5cblx0XHRcdGJvb2ttYXJrQ3VzdG9tVXJsOiBmdW5jdGlvbiAoKTogc3RyaW5nIHtcblx0XHRcdFx0Y29uc3Qgc0hhc2ggPSBoYXNoZXIuZ2V0SGFzaCgpO1xuXHRcdFx0XHRyZXR1cm4gc0hhc2ggPyBgIyR7c0hhc2h9YCA6IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuXHRcdFx0fSxcblx0XHRcdC8qXG5cdFx0XHRcdFx0XHRcdFRvIGJlIGFjdGl2YXRlZCBvbmNlIHRoZSBGTFAgc2hvd3MgdGhlIGNvdW50IC0gc2VlIGNvbW1lbnQgYWJvdmVcblx0XHRcdFx0XHRcdFx0Ym9va21hcmtTZXJ2aWNlVXJsOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHQvL3ZhciBvVGFibGUgPSBvVGFibGUuZ2V0SW5uZXJUYWJsZSgpOyBvVGFibGUgaXMgYWxyZWFkeSB0aGUgc2FwLmZlIHRhYmxlIChidXQgbm90IHRoZSBpbm5lciBvbmUpXG5cdFx0XHRcdFx0XHRcdFx0Ly8gd2Ugc2hvdWxkIHVzZSB0YWJsZS5nZXRMaXN0QmluZGluZ0luZm8gaW5zdGVhZCBvZiB0aGUgYmluZGluZ1xuXHRcdFx0XHRcdFx0XHRcdHZhciBvQmluZGluZyA9IG9UYWJsZS5nZXRCaW5kaW5nKFwicm93c1wiKSB8fCBvVGFibGUuZ2V0QmluZGluZyhcIml0ZW1zXCIpO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBvQmluZGluZyA/IGZuR2V0RG93bmxvYWRVcmwob0JpbmRpbmcpIDogXCJcIjtcblx0XHRcdFx0XHRcdFx0fSwqL1xuXHRcdFx0aXNTaGFyZUluSmFtQWN0aXZlOiAhIWZuR2V0VXNlciAmJiBmbkdldFVzZXIoKS5pc0phbUFjdGl2ZSgpXG5cdFx0fTtcblxuXHRcdGNvbnN0IG9UZW1wbGF0ZVByaXZhdGVNb2RlbCA9IHRoaXMuZ2V0T3duZXJDb21wb25lbnQoKS5nZXRNb2RlbChcIl90ZW1wbFByaXZcIikgYXMgSlNPTk1vZGVsO1xuXHRcdG9UZW1wbGF0ZVByaXZhdGVNb2RlbC5zZXRQcm9wZXJ0eShcIi9saXN0UmVwb3J0L3NoYXJlXCIsIG9TaGFyZUluZm8pO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byB1cGRhdGUgdGhlIGxvY2FsIFVJIG1vZGVsIG9mIHRoZSBwYWdlIHdpdGggdGhlIGZpZWxkcyB0aGF0IGFyZSBub3QgYXBwbGljYWJsZSB0byB0aGUgZmlsdGVyIGJhciAodGhpcyBpcyBzcGVjaWZpYyB0byB0aGUgQUxQIHNjZW5hcmlvKS5cblx0ICogQHBhcmFtIG9JbnRlcm5hbE1vZGVsQ29udGV4dCBUaGUgaW50ZXJuYWwgbW9kZWwgY29udGV4dFxuXHQgKiBAcGFyYW0gb0ZpbHRlckJhciBNREMgZmlsdGVyIGJhclxuXHQgKi9cblx0X3VwZGF0ZUFMUE5vdEFwcGxpY2FibGVGaWVsZHMob0ludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dCwgb0ZpbHRlckJhcjogRmlsdGVyQmFyKTogdm9pZCB7XG5cdFx0Y29uc3QgbUNhY2hlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fTtcblx0XHRjb25zdCBpZ25vcmVkRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fSxcblx0XHRcdGFUYWJsZXMgPSB0aGlzLl9nZXRDb250cm9scyhcInRhYmxlXCIpLFxuXHRcdFx0YUNoYXJ0cyA9IHRoaXMuX2dldENvbnRyb2xzKFwiQ2hhcnRcIik7XG5cblx0XHRpZiAoIWFUYWJsZXMubGVuZ3RoIHx8ICFhQ2hhcnRzLmxlbmd0aCkge1xuXHRcdFx0Ly8gSWYgdGhlcmUncyBub3QgYSB0YWJsZSBhbmQgYSBjaGFydCwgd2UncmUgbm90IGluIHRoZSBBTFAgY2FzZVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEZvciB0aGUgbW9tZW50LCB0aGVyZSdzIG5vdGhpbmcgZm9yIHRhYmxlcy4uLlxuXHRcdGFDaGFydHMuZm9yRWFjaChmdW5jdGlvbiAob0NoYXJ0KSB7XG5cdFx0XHRjb25zdCBzQ2hhcnRFbnRpdHlQYXRoID0gb0NoYXJ0LmRhdGEoXCJ0YXJnZXRDb2xsZWN0aW9uUGF0aFwiKSxcblx0XHRcdFx0c0NoYXJ0RW50aXR5U2V0ID0gc0NoYXJ0RW50aXR5UGF0aC5zbGljZSgxKSxcblx0XHRcdFx0c0NhY2hlS2V5ID0gYCR7c0NoYXJ0RW50aXR5U2V0fUNoYXJ0YDtcblx0XHRcdGlmICghbUNhY2hlW3NDYWNoZUtleV0pIHtcblx0XHRcdFx0bUNhY2hlW3NDYWNoZUtleV0gPSBGaWx0ZXJVdGlscy5nZXROb3RBcHBsaWNhYmxlRmlsdGVycyhvRmlsdGVyQmFyLCBvQ2hhcnQpO1xuXHRcdFx0fVxuXHRcdFx0aWdub3JlZEZpZWxkc1tzQ2FjaGVLZXldID0gbUNhY2hlW3NDYWNoZUtleV07XG5cdFx0fSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY29udHJvbHMvaWdub3JlZEZpZWxkc1wiLCBpZ25vcmVkRmllbGRzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQcm92aWRlcyB0aGUgc2V0dGluZyB3aGV0aGVyIEZpbHRlckJhciBpcyBoaWRkZW4gYmFzZWQgb24gdGhlIG1hbmlmZXN0IHNldHRpbmcgJ2hpZGVGaWx0ZXJCYXInLlxuXHQgKiBTaG91bGQgYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIF9pc0ZpbHRlckJhckhpZGRlblVzZWQgYXMgaXQgbWF5IGhhdmUgb3ZlcnJpZGRlbiB0aGlzIHNldHRpbmcuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIEZpbHRlckJhciBpcyBoaWRkZW4sIGZhbHNlIGlmIHVua25vd25cblx0ICovXG5cdF9pc0ZpbHRlckJhckhpZGRlbigpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS5oaWRlRmlsdGVyQmFyIHx8IGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFByb3ZpZGVzIHRoZSBzZXR0aW5nIHdoZXRoZXIgRmlsdGVyQmFyIGlzIGhpZGRlbiBidXQgc3RpbGwgZXhpc3RzIGJhc2VkIG9uIHRoZSBtYW5pZmVzdCBzZXR0aW5nICd1c2VIaWRkZW5GaWx0ZXJCYXInLlxuXHQgKiBTaG91bGQgYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIF9pc0ZpbHRlckJhckhpZGRlbiBhcyBpdCBjYW4gYWxzbyBoaWRlIHRoZSBGaWx0ZXJCYXIuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIEZpbHRlckJhciBpcyBoaWRkZW4sIGZhbHNlIGlmIHVua25vd25cblx0ICovXG5cdF9pc0ZpbHRlckJhckhpZGRlblVzZWQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkudXNlSGlkZGVuRmlsdGVyQmFyIHx8IGZhbHNlO1xuXHR9XG5cblx0X2dldEFwcGx5QXV0b21hdGljYWxseU9uVmFyaWFudCh2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnQsIGtleTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCk6IEJvb2xlYW4ge1xuXHRcdGlmICghdmFyaWFudE1hbmFnZW1lbnQgfHwgIWtleSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRjb25zdCB2YXJpYW50cyA9IHZhcmlhbnRNYW5hZ2VtZW50LmdldFZhcmlhbnRzKCk7XG5cdFx0Y29uc3QgY3VycmVudFZhcmlhbnQgPSB2YXJpYW50cy5maW5kKGZ1bmN0aW9uICh2YXJpYW50KSB7XG5cdFx0XHRyZXR1cm4gdmFyaWFudCAmJiB2YXJpYW50LmdldEtleSgpID09PSBrZXk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIChjdXJyZW50VmFyaWFudCAmJiBjdXJyZW50VmFyaWFudC5nZXRQcm9wZXJ0eShcImV4ZWN1dGVPblNlbGVjdFwiKSkgfHwgZmFsc2U7XG5cdH1cblxuXHRfc2hvdWxkQXV0b1RyaWdnZXJTZWFyY2gob1ZNOiBWYXJpYW50TWFuYWdlbWVudCB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcblx0XHRpZiAoXG5cdFx0XHR0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpLmluaXRpYWxMb2FkID09PSBJbml0aWFsTG9hZE1vZGUuQXV0byAmJlxuXHRcdFx0KCFvVk0gfHwgb1ZNLmdldFN0YW5kYXJkVmFyaWFudEtleSgpID09PSBvVk0uZ2V0Q3VycmVudFZhcmlhbnRLZXkoKSlcblx0XHQpIHtcblx0XHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdFx0XHRpZiAob0ZpbHRlckJhcikge1xuXHRcdFx0XHRjb25zdCBvQ29uZGl0aW9ucyA9IG9GaWx0ZXJCYXIuZ2V0Q29uZGl0aW9ucygpO1xuXHRcdFx0XHRmb3IgKGNvbnN0IHNLZXkgaW4gb0NvbmRpdGlvbnMpIHtcblx0XHRcdFx0XHQvLyBpZ25vcmUgZmlsdGVycyBzdGFydGluZyB3aXRoICQgKGUuZy4gJHNlYXJjaCwgJGVkaXRTdGF0ZSlcblx0XHRcdFx0XHRpZiAob1ZNICYmICFzS2V5LnN0YXJ0c1dpdGgoXCIkXCIpICYmIEFycmF5LmlzQXJyYXkob0NvbmRpdGlvbnNbc0tleV0pICYmIG9Db25kaXRpb25zW3NLZXldLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0Ly8gbG9hZCBkYXRhIGFzIHBlciB1c2VyJ3Mgc2V0dGluZyBvZiBhcHBseUF1dG9tYXRpY2FsbHkgb24gdGhlIHZhcmlhbnRcblx0XHRcdFx0XHRcdGNvbnN0IHN0YW5kYXJkVmFyaWFudCA9IG9WTS5nZXRWYXJpYW50cygpLmZpbmQoKHZhcmlhbnQpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhcmlhbnQuZ2V0S2V5KCkgPT09IG9WTS5nZXRDdXJyZW50VmFyaWFudEtleSgpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc3RhbmRhcmRWYXJpYW50ICYmIHN0YW5kYXJkVmFyaWFudC5nZXRFeGVjdXRlT25TZWxlY3QoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0X3VwZGF0ZVRhYmxlKG9UYWJsZTogVGFibGUpOiB2b2lkIHtcblx0XHRpZiAoIW9UYWJsZS5pc1RhYmxlQm91bmQoKSB8fCB0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMpIHtcblx0XHRcdG9UYWJsZS5yZWJpbmQoKTtcblx0XHRcdHRoaXMuaGFzUGVuZGluZ0NoYXJ0Q2hhbmdlcyA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdF91cGRhdGVDaGFydChvQ2hhcnQ6IENoYXJ0KTogdm9pZCB7XG5cdFx0Y29uc3Qgb0lubmVyQ2hhcnQgPSAob0NoYXJ0LmdldENvbnRyb2xEZWxlZ2F0ZSgpIGFzIHR5cGVvZiBDaGFydERlbGVnYXRlKS5fZ2V0Q2hhcnQob0NoYXJ0KTtcblx0XHRpZiAoIShvSW5uZXJDaGFydCAmJiBvSW5uZXJDaGFydC5pc0JvdW5kKFwiZGF0YVwiKSkgfHwgdGhpcy5oYXNQZW5kaW5nVGFibGVDaGFuZ2VzKSB7XG5cdFx0XHQob0NoYXJ0LmdldENvbnRyb2xEZWxlZ2F0ZSgpIGFzIHR5cGVvZiBDaGFydERlbGVnYXRlKS5yZWJpbmQob0NoYXJ0LCBvSW5uZXJDaGFydC5nZXRCaW5kaW5nSW5mbyhcImRhdGFcIikpO1xuXHRcdFx0dGhpcy5oYXNQZW5kaW5nVGFibGVDaGFuZ2VzID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmlsdGVyIHRvZ2dsZSBidXR0b24uXG5cdCAqIEBwYXJhbSBidXR0b25WaXNpYmxlIEZpbHRlciB0b2dnbGUgYnV0dG9uIHZpc2liaWxpdHlcblx0ICovXG5cdHNldEZpbHRlclRvZ2dsZVZpc2liaWxpdHkoYnV0dG9uVmlzaWJsZTogYm9vbGVhbik6IHZvaWQge1xuXHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRmaWx0ZXJCYXI/LmdldFNlZ21lbnRlZEJ1dHRvbigpPy5zZXRWaXNpYmxlKGJ1dHRvblZpc2libGUpO1xuXHR9XG5cblx0aGFuZGxlcnMgPSB7XG5cdFx0b25JbmxpbmVFZGl0U2F2ZSh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0dGhpcy5pbmxpbmVFZGl0Rmxvdy5pbmxpbmVFZGl0U2F2ZSgpO1xuXHRcdH0sXG5cdFx0b25GaWx0ZXJTZWFyY2godGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIpOiB2b2lkIHtcblx0XHRcdGNvbnN0IGZpbHRlckJhckFQSSA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKSEuZ2V0UGFyZW50KCkgYXMgRmlsdGVyQmFyQVBJO1xuXHRcdFx0ZmlsdGVyQmFyQVBJLnRyaWdnZXJTZWFyY2goKTtcblx0XHR9LFxuXHRcdG9uRmlsdGVyc0NoYW5nZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIG9FdmVudDogRmlsdGVyQmFyQmFzZSRGaWx0ZXJzQ2hhbmdlZEV2ZW50KTogdm9pZCB7XG5cdFx0XHRjb25zdCBvRmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdFx0aWYgKG9GaWx0ZXJCYXIpIHtcblx0XHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCB8IHVuZGVmaW5lZDtcblx0XHRcdFx0Ly8gUGVuZGluZyBmaWx0ZXJzIGludG8gRmlsdGVyQmFyIHRvIGJlIHVzZWQgZm9yIGN1c3RvbSB2aWV3c1xuXHRcdFx0XHR0aGlzLm9uUGVuZGluZ0ZpbHRlcnMoKTtcblxuXHRcdFx0XHRpZiAob0ludGVybmFsTW9kZWxDb250ZXh0ICYmIG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJjb25kaXRpb25zQmFzZWRcIikpIHtcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoYXNQZW5kaW5nRmlsdGVyc1wiLCB0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob0ludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHRcdFx0dGhpcy5fc3RvcmVGaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50KG9GaWx0ZXJCYXIsIG9JbnRlcm5hbE1vZGVsQ29udGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdG9uVmFyaWFudFNlbGVjdGVkKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLCBvRXZlbnQ6IFZhcmlhbnRNYW5hZ2VtZW50JFNlbGVjdEV2ZW50KTogdm9pZCB7XG5cdFx0XHRjb25zdCBwYXJhbWV0ZXJzID0gKG9FdmVudCBhcyBVSTVFdmVudCkuZ2V0UGFyYW1ldGVycygpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRcdFx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQgPSBwYXJhbWV0ZXJzLm9yaWdpbmFsU291cmNlIGFzIFZhcmlhbnRNYW5hZ2VtZW50O1xuXHRcdFx0Y29uc3QgY3VycmVudFZhcmlhbnRLZXkgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwia2V5XCIpO1xuXHRcdFx0Y29uc3QgbXVsdGlNb2RlQ29udHJvbCA9IHRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKTtcblxuXHRcdFx0aWYgKG11bHRpTW9kZUNvbnRyb2wgJiYgIXZhcmlhbnRNYW5hZ2VtZW50Py5nZXRQYXJlbnQoKT8uaXNBKFwic2FwLnVpLm1kYy5BY3Rpb25Ub29sYmFyXCIpKSB7XG5cdFx0XHRcdC8vTm90IGEgQ29udHJvbCBWYXJpYW50XG5cdFx0XHRcdG11bHRpTW9kZUNvbnRyb2w/LmludmFsaWRhdGVDb250ZW50KCk7XG5cdFx0XHRcdG11bHRpTW9kZUNvbnRyb2w/LnNldEZyZWV6ZUNvbnRlbnQodHJ1ZSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIHNldFRpbWVvdXQgY2F1c2UgdGhlIHZhcmlhbnQgbmVlZHMgdG8gYmUgYXBwbGllZCBiZWZvcmUganVkZ2luZyB0aGUgYXV0byBzZWFyY2ggb3IgdXBkYXRpbmcgdGhlIGFwcCBzdGF0ZVxuXHRcdFx0c2V0VGltZW91dCgoKTogdm9pZCA9PiB7XG5cdFx0XHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRcdFx0Y29uc3QgZHluYW1pY1BhZ2UgPSB0aGlzLl9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2woKTtcblx0XHRcdFx0Y29uc3QgZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkID0gZmlsdGVyQmFyPy5nZXRGaWx0ZXJJdGVtcygpLmZpbmQoZnVuY3Rpb24gKGZpbHRlckl0ZW0pIHtcblx0XHRcdFx0XHRyZXR1cm4gZmlsdGVySXRlbS5nZXRSZXF1aXJlZCgpICYmIGZpbHRlckl0ZW0uZ2V0Q29uZGl0aW9ucygpLmxlbmd0aCA9PT0gMDtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmIChmaXJzdEVtcHR5TWFuZGF0b3J5RmllbGQpIHtcblx0XHRcdFx0XHRkeW5hbWljUGFnZS5zZXRIZWFkZXJFeHBhbmRlZCh0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodGhpcy5fc2hvdWxkQXV0b1RyaWdnZXJTZWFyY2godmFyaWFudE1hbmFnZW1lbnQpKSB7XG5cdFx0XHRcdFx0Ly8gdGhlIGFwcCBzdGF0ZSB3aWxsIGJlIHVwZGF0ZWQgdmlhIG9uU2VhcmNoIGhhbmRsZXJcblx0XHRcdFx0XHRjb25zdCBmaWx0ZXJCYXJBUEkgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCkhLmdldFBhcmVudCgpIGFzIEZpbHRlckJhckFQSTtcblx0XHRcdFx0XHRmaWx0ZXJCYXJBUEkudHJpZ2dlclNlYXJjaCgpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCF0aGlzLl9nZXRBcHBseUF1dG9tYXRpY2FsbHlPblZhcmlhbnQodmFyaWFudE1hbmFnZW1lbnQsIGN1cnJlbnRWYXJpYW50S2V5KSkge1xuXHRcdFx0XHRcdG11bHRpTW9kZUNvbnRyb2w/LnNldEZyZWV6ZUNvbnRlbnQoZmFsc2UpO1xuXHRcdFx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdFx0XHRkeW5hbWljUGFnZS5zZXRIZWFkZXJFeHBhbmRlZCh0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSwgMCk7XG5cdFx0fSxcblx0XHRvblZhcmlhbnRTYXZlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0Ly9UT0RPOiBTaG91bGQgcmVtb3ZlIHRoaXMgc2V0VGltZU91dCBvbmNlIFZhcmlhbnQgTWFuYWdlbWVudCBwcm92aWRlcyBhbiBhcGkgdG8gZmV0Y2ggdGhlIGN1cnJlbnQgdmFyaWFudCBrZXkgb24gc2F2ZSEhIVxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdH0sIDEwMDApO1xuXHRcdH0sXG5cdFx0b25TZWFyY2godGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIpOiB2b2lkIHtcblx0XHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCkgYXMgRmlsdGVyQmFyOyAvLyBvbnNlYXJjaCBpcyBjYWxsZWQgb25seSBpZiB0aGUgZmlsdGVyYmFyIGV4aXN0c1xuXHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdGNvbnN0IG9NZGNDaGFydCA9IHRoaXMuZ2V0Q2hhcnRDb250cm9sKCk7XG5cdFx0XHRjb25zdCBiSGlkZURyYWZ0ID0gRmlsdGVyVXRpbHMuZ2V0RWRpdFN0YXRlSXNIaWRlRHJhZnQob0ZpbHRlckJhci5nZXRDb25kaXRpb25zKCkpO1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaGFzUGVuZGluZ0ZpbHRlcnNcIiwgZmFsc2UpO1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaGlkZURyYWZ0SW5mb1wiLCBiSGlkZURyYWZ0KTtcblx0XHRcdGNvbnN0IGR5bmFtaWNQYWdlID0gdGhpcy5fZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sKCk7XG5cdFx0XHRpZiAoIXRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKSkge1xuXHRcdFx0XHR0aGlzLl91cGRhdGVBTFBOb3RBcHBsaWNhYmxlRmllbGRzKG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgb0ZpbHRlckJhcik7XG5cdFx0XHR9XG5cdFx0XHRpZiAob01kY0NoYXJ0KSB7XG5cdFx0XHRcdC8vIGRpc2FibGUgYm91bmQgYWN0aW9ucyBUT0RPOiB0aGlzIGNsZWFycyBldmVyeXRoaW5nIGZvciB0aGUgY2hhcnQ/XG5cdFx0XHRcdChvTWRjQ2hhcnQuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCkuc2V0UHJvcGVydHkoXCJcIiwge30pO1xuXG5cdFx0XHRcdGNvbnN0IG9QYWdlSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvTWRjQ2hhcnQuZ2V0QmluZGluZ0NvbnRleHQoXCJwYWdlSW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRcdGNvbnN0IHNUZW1wbGF0ZUNvbnRlbnRWaWV3ID0gb1BhZ2VJbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShgJHtvUGFnZUludGVybmFsTW9kZWxDb250ZXh0LmdldFBhdGgoKX0vYWxwQ29udGVudFZpZXdgKTtcblx0XHRcdFx0aWYgKHNUZW1wbGF0ZUNvbnRlbnRWaWV3ID09PSBUZW1wbGF0ZUNvbnRlbnRWaWV3LkNoYXJ0KSB7XG5cdFx0XHRcdFx0dGhpcy5oYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoc1RlbXBsYXRlQ29udGVudFZpZXcgPT09IFRlbXBsYXRlQ29udGVudFZpZXcuVGFibGUpIHtcblx0XHRcdFx0XHR0aGlzLmhhc1BlbmRpbmdUYWJsZUNoYW5nZXMgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vbG9naWMgZm9yIGV4cGFuc2lvbiBvciBjb2xsYXBzZSBvZiBmaWx0ZXIgYmFyIHN0YXJ0c1xuXHRcdFx0aWYgKCFEZXZpY2Uuc3lzdGVtLmRlc2t0b3AgJiYgb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwic2VhcmNoVHJpZ2dlcmVkQnlJbml0aWFsTG9hZFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRpZiAoZHluYW1pY1BhZ2UuZ2V0SGVhZGVyRXhwYW5kZWQoKSAhPT0gZmFsc2UpIHtcblx0XHRcdFx0XHRkeW5hbWljUGFnZS5zZXRIZWFkZXJFeHBhbmRlZChmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly9zZXR0aW5nIGl0IHRvIGZhbHNlIHNvIHRoYXQgZnVydGhlciBzZWFyY2ggb3IgJ0dvJyB0cmlnZ2VycyB3b24ndCBjb2xsYXBzZSB0aGUgZmlsdGVyIGJhclxuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzZWFyY2hUcmlnZ2VyZWRCeUluaXRpYWxMb2FkXCIsIGZhbHNlKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gc3RvcmUgZmlsdGVyIGJhciBjb25kaXRpb25zIHRvIHVzZSBsYXRlciB3aGlsZSBuYXZpZ2F0aW9uXG5cdFx0XHRTdGF0ZVV0aWwucmV0cmlldmVFeHRlcm5hbFN0YXRlKG9GaWx0ZXJCYXIpXG5cdFx0XHRcdC50aGVuKChvRXh0ZXJuYWxTdGF0ZSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuZmlsdGVyQmFyQ29uZGl0aW9ucyA9IG9FeHRlcm5hbFN0YXRlLmZpbHRlcjtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmV0cmlldmluZyB0aGUgZXh0ZXJuYWwgc3RhdGVcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0aWYgKHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkubGl2ZU1vZGUgPT09IGZhbHNlKSB7XG5cdFx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKERldmljZS5zeXN0ZW0ucGhvbmUpIHtcblx0XHRcdFx0Y29uc3Qgb0R5bmFtaWNQYWdlID0gdGhpcy5fZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sKCk7XG5cdFx0XHRcdGlmICghdGhpcy5faXNJbml0TG9hZEVuYWJsZWQoKSkge1xuXHRcdFx0XHRcdG9EeW5hbWljUGFnZS5zZXRIZWFkZXJFeHBhbmRlZCh0cnVlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRvRHluYW1pY1BhZ2Uuc2V0SGVhZGVyRXhwYW5kZWQoZmFsc2UpO1xuXHRcdFx0XHRcdHRoaXMuc2V0RmlsdGVyVG9nZ2xlVmlzaWJpbGl0eShmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIFRyaWdnZXJzIGFuIG91dGJvdW5kIG5hdmlnYXRpb24gd2hlbiBhIHVzZXIgY2hvb3NlcyB0aGUgY2hldnJvbi5cblx0XHQgKiBAcGFyYW0gb0NvbnRyb2xsZXJcblx0XHQgKiBAcGFyYW0gc091dGJvdW5kVGFyZ2V0IE5hbWUgb2YgdGhlIG91dGJvdW5kIHRhcmdldCAobmVlZHMgdG8gYmUgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QpXG5cdFx0ICogQHBhcmFtIG9Db250ZXh0IFRoZSBjb250ZXh0IHRoYXQgY29udGFpbnMgdGhlIGRhdGEgZm9yIHRoZSB0YXJnZXQgYXBwXG5cdFx0ICogQHBhcmFtIHNDcmVhdGVQYXRoIENyZWF0ZSBwYXRoIHdoZW4gdGhlIGNoZXZyb24gaXMgY3JlYXRlZC5cblx0XHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIG9uY2UgdGhlIG5hdmlnYXRpb24gaXMgdHJpZ2dlcmVkXG5cdFx0ICogQGZpbmFsXG5cdFx0ICovXG5cdFx0YXN5bmMgb25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kKFxuXHRcdFx0b0NvbnRyb2xsZXI6IExpc3RSZXBvcnRDb250cm9sbGVyLFxuXHRcdFx0c091dGJvdW5kVGFyZ2V0OiBzdHJpbmcsXG5cdFx0XHRvQ29udGV4dDogQ29udGV4dCxcblx0XHRcdHNDcmVhdGVQYXRoOiBzdHJpbmdcblx0XHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRcdHJldHVybiBvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZChvQ29udHJvbGxlciwgc091dGJvdW5kVGFyZ2V0LCBvQ29udGV4dCwgc0NyZWF0ZVBhdGgpO1xuXHRcdH0sXG5cdFx0b25DaGFydFNlbGVjdGlvbkNoYW5nZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIG9FdmVudDogVUk1RXZlbnQ8eyBkYXRhOiB1bmtub3duIH0sIENoYXJ0VHlwZT4pOiB2b2lkIHtcblx0XHRcdGNvbnN0IG9NZGNDaGFydCA9IG9FdmVudC5nZXRTb3VyY2UoKS5nZXRDb250ZW50KCkgYXMgQ2hhcnQsXG5cdFx0XHRcdG9UYWJsZSA9IHRoaXMuX2dldFRhYmxlKCksXG5cdFx0XHRcdGFEYXRhID0gb0V2ZW50LmdldFBhcmFtZXRlcihcImRhdGFcIiksXG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRpZiAoYURhdGEpIHtcblx0XHRcdFx0Q2hhcnRVdGlscy5zZXRDaGFydEZpbHRlcnMob01kY0NoYXJ0KTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHNUZW1wbGF0ZUNvbnRlbnRWaWV3ID0gb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KGAke29JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQYXRoKCl9L2FscENvbnRlbnRWaWV3YCk7XG5cdFx0XHRpZiAoc1RlbXBsYXRlQ29udGVudFZpZXcgPT09IFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQpIHtcblx0XHRcdFx0dGhpcy5oYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAob1RhYmxlKSB7XG5cdFx0XHRcdG9UYWJsZS5yZWJpbmQoKTtcblx0XHRcdFx0dGhpcy5oYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRvblNlZ21lbnRlZEJ1dHRvblByZXNzZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIG9FdmVudDogVUk1RXZlbnQpOiB2b2lkIHtcblx0XHRcdGNvbnN0IHNlbGVjdGVkS2V5OiBzdHJpbmcgPVxuXHRcdFx0XHQob0V2ZW50LmdldFBhcmFtZXRlcnMoKSBhcyB7IHNlbGVjdGVkS2V5OiBzdHJpbmcgfSkuc2VsZWN0ZWRLZXkgfHwgKG9FdmVudC5nZXRQYXJhbWV0ZXJzKCkgYXMgeyBrZXk6IHN0cmluZyB9KS5rZXk7XG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiYWxwQ29udGVudFZpZXdcIiwgc2VsZWN0ZWRLZXkpO1xuXHRcdFx0Y29uc3Qgb0NoYXJ0ID0gdGhpcy5nZXRDaGFydENvbnRyb2woKTtcblx0XHRcdGNvbnN0IG9UYWJsZSA9IHRoaXMuX2dldFRhYmxlKCk7XG5cblx0XHRcdHN3aXRjaCAoc2VsZWN0ZWRLZXkpIHtcblx0XHRcdFx0Y2FzZSBUZW1wbGF0ZUNvbnRlbnRWaWV3LlRhYmxlOlxuXHRcdFx0XHRcdGlmIChvVGFibGUpIHtcblx0XHRcdFx0XHRcdHRoaXMuX3VwZGF0ZVRhYmxlKG9UYWJsZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQ6XG5cdFx0XHRcdFx0aWYgKG9DaGFydCkge1xuXHRcdFx0XHRcdFx0dGhpcy5fdXBkYXRlQ2hhcnQob0NoYXJ0IGFzIENoYXJ0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgVGVtcGxhdGVDb250ZW50Vmlldy5IeWJyaWQ6XG5cdFx0XHRcdFx0aWYgKG9UYWJsZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5fdXBkYXRlVGFibGUob1RhYmxlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKG9DaGFydCkge1xuXHRcdFx0XHRcdFx0dGhpcy5fdXBkYXRlQ2hhcnQob0NoYXJ0IGFzIENoYXJ0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0fSxcblx0XHRvbkR5bmFtaWNQYWdlVGl0bGVTdGF0ZUNoYW5nZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIGV2ZW50OiBEeW5hbWljUGFnZVRpdGxlJFN0YXRlQ2hhbmdlRXZlbnQpOiB2b2lkIHtcblx0XHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRcdGlmIChmaWx0ZXJCYXIpIHtcblx0XHRcdFx0dGhpcy5zZXRGaWx0ZXJUb2dnbGVWaXNpYmlsaXR5KCEhZXZlbnQuZ2V0UGFyYW1ldGVyKFwiaXNFeHBhbmRlZFwiKSk7XG5cdFx0XHRcdGlmIChldmVudC5nZXRQYXJhbWV0ZXIoXCJpc0V4cGFuZGVkXCIpID09PSBmYWxzZSkge1xuXHRcdFx0XHRcdEludmlzaWJsZU1lc3NhZ2UuZ2V0SW5zdGFuY2UoKS5hbm5vdW5jZShcblx0XHRcdFx0XHRcdGZpbHRlckJhci5nZXRBc3NpZ25lZEZpbHRlcnNUZXh0KCkuZmlsdGVyc1RleHQgYXMgc3RyaW5nLFxuXHRcdFx0XHRcdFx0SW52aXNpYmxlTWVzc2FnZU1vZGUuQXNzZXJ0aXZlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHVwZGF0ZSB0aGUgbG9jYWwgVUkgbW9kZWwgb2YgdGhlIHBhZ2Ugd2l0aCB0aGUgU2VsZWN0aW9uIFZhcmlhbnQuXG5cdCAqIEBwYXJhbSBmaWx0ZXJCYXIgTURDIGZpbHRlciBiYXJcblx0ICogQHBhcmFtIGludGVybmFsTW9kZWxDb250ZXh0IFRoZSBpbnRlcm5hbCBtb2RlbCBjb250ZXh0XG5cdCAqL1xuXHRhc3luYyBfc3RvcmVGaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50KGZpbHRlckJhcjogRmlsdGVyQmFyLCBpbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgZmlsdGVyQmFyQVBJID0gZmlsdGVyQmFyLmdldFBhcmVudCgpIGFzIEZpbHRlckJhckFQSTtcblx0XHRcdGNvbnN0IHN2ID0gYXdhaXQgZmlsdGVyQmFyQVBJLmdldFNlbGVjdGlvblZhcmlhbnQoKTtcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudFwiLCBzdik7XG5cdFx0fSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG5cdFx0XHRjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuXHRcdFx0TG9nLmVycm9yKGBGRSA6IEVycm9yIGZldGNoaW5nIHNlbGVjdGlvbiB2YXJpYW50IG9uIGZpbHRlciBjaGFuZ2U6ICR7bWVzc2FnZX1gKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCB0aGUgU2VsZWN0aW9uIFZhcmlhbnQgZnJvbSBpbnRlcm5hbCBtb2RlbC5cblx0ICogQHJldHVybnMgU2VsZWN0aW9uVmFyaWFudFxuXHQgKi9cblx0Z2V0RmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudCgpOiBTZWxlY3Rpb25WYXJpYW50IHtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdFx0cmV0dXJuIChpbnRlcm5hbE1vZGVsQ29udGV4dD8uZ2V0UHJvcGVydHkoXCJmaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50XCIpIGFzIFNlbGVjdGlvblZhcmlhbnQpIHx8IG5ldyBTZWxlY3Rpb25WYXJpYW50KCk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGlzdFJlcG9ydENvbnRyb2xsZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQTJEQSxNQUFNQSxtQkFBbUIsR0FBR0MsV0FBVyxDQUFDRCxtQkFBbUI7SUFDMURFLGVBQWUsR0FBR0QsV0FBVyxDQUFDQyxlQUFlOztFQUU5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBSkEsSUFNTUMsb0JBQW9CLElBQUFDLElBQUEsR0FEekJDLGNBQWMsQ0FBQyxrREFBa0QsQ0FBQyxFQUFBQyxLQUFBLEdBRWpFQyxjQUFjLENBQ2RDLGVBQWUsQ0FBQ0MsUUFBUSxDQUFDO0lBQ3hCQyxjQUFjLEVBQUUsU0FBQUEsQ0FBQSxFQUFpQztNQUMvQyxJQUFJLENBQUNDLE9BQU8sQ0FBQyxDQUFDLENBQUNDLGFBQWEsQ0FBQyxDQUFDLENBQTBCQyxlQUFlLENBQUMsQ0FBQztJQUMzRTtFQUNELENBQUMsQ0FDRixDQUFDLEVBQUFDLEtBQUEsR0FH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
|
|
921
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUZW1wbGF0ZUNvbnRlbnRWaWV3IiwiQ29yZUxpYnJhcnkiLCJJbml0aWFsTG9hZE1vZGUiLCJMaXN0UmVwb3J0Q29udHJvbGxlciIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwidXNpbmdFeHRlbnNpb24iLCJJbnRlcm5hbFJvdXRpbmciLCJvdmVycmlkZSIsIm9uQWZ0ZXJCaW5kaW5nIiwiZ2V0VmlldyIsImdldENvbnRyb2xsZXIiLCJfb25BZnRlckJpbmRpbmciLCJfZGVjMyIsIkludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0RW50aXR5U2V0IiwiYmFzZSIsImdldEN1cnJlbnRFbnRpdHlTZXQiLCJfZGVjNCIsIlNpZGVFZmZlY3RzIiwiU2lkZUVmZmVjdHNPdmVycmlkZSIsIl9kZWM1IiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUiLCJfZGVjNiIsIlNoYXJlIiwiU2hhcmVPdmVycmlkZXMiLCJfZGVjNyIsIlZpZXdTdGF0ZSIsIlZpZXdTdGF0ZU92ZXJyaWRlcyIsIl9kZWM4IiwiS1BJTWFuYWdlbWVudCIsIl9kZWM5IiwiUGxhY2Vob2xkZXIiLCJfZGVjMTAiLCJwdWJsaWNFeHRlbnNpb24iLCJfZGVjMTEiLCJmaW5hbEV4dGVuc2lvbiIsIl9kZWMxMiIsInByaXZhdGVFeHRlbnNpb24iLCJfZGVjMTMiLCJleHRlbnNpYmxlIiwiX2RlYzE0IiwiX2RlYzE1IiwiT3ZlcnJpZGVFeGVjdXRpb24iLCJBZnRlciIsIl9kZWMxNiIsIl9kZWMxNyIsIl9kZWMxOCIsIl9kZWMxOSIsIl9jbGFzcyIsIl9jbGFzczIiLCJfUGFnZUNvbnRyb2xsZXIiLCJfdGhpcyIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfZGVzY3JpcHRvcjIiLCJfZGVzY3JpcHRvcjMiLCJfZGVzY3JpcHRvcjQiLCJfZGVzY3JpcHRvcjUiLCJfZGVzY3JpcHRvcjYiLCJfZGVzY3JpcHRvcjciLCJfZGVzY3JpcHRvcjgiLCJmb3JtYXR0ZXJzIiwic2V0QUxQQ29udHJvbE1lc3NhZ2VTdHJpcCIsImFJZ25vcmVkRmllbGRzIiwiYklzQ2hhcnQiLCJvQXBwbHlTdXBwb3J0ZWQiLCJzVGV4dCIsIm9GaWx0ZXJCYXIiLCJfZ2V0RmlsdGVyQmFyQ29udHJvbCIsImlzQXJyYXkiLCJhSWdub3JlZExhYmVscyIsIk1lc3NhZ2VTdHJpcCIsImdldExhYmVscyIsImRhdGEiLCJnZXRSZXNvdXJjZU1vZGVsIiwiYklzU2VhcmNoSWdub3JlZCIsImVuYWJsZVNlYXJjaCIsImdldEFMUFRleHQiLCJnZXRUZXh0IiwiaGFuZGxlcnMiLCJvbklubGluZUVkaXRTYXZlIiwiaW5saW5lRWRpdEZsb3ciLCJpbmxpbmVFZGl0U2F2ZSIsIm9uRmlsdGVyU2VhcmNoIiwiZmlsdGVyQmFyQVBJIiwiZ2V0UGFyZW50IiwidHJpZ2dlclNlYXJjaCIsIm9uRmlsdGVyc0NoYW5nZWQiLCJvRXZlbnQiLCJvSW50ZXJuYWxNb2RlbENvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsIm9uUGVuZGluZ0ZpbHRlcnMiLCJnZXRQYXJhbWV0ZXIiLCJzZXRQcm9wZXJ0eSIsIl9zdG9yZUZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQiLCJvblZhcmlhbnRTZWxlY3RlZCIsInBhcmFtZXRlcnMiLCJnZXRQYXJhbWV0ZXJzIiwidmFyaWFudE1hbmFnZW1lbnQiLCJvcmlnaW5hbFNvdXJjZSIsImN1cnJlbnRWYXJpYW50S2V5IiwibXVsdGlNb2RlQ29udHJvbCIsIl9nZXRNdWx0aU1vZGVDb250cm9sIiwiaXNBIiwiaW52YWxpZGF0ZUNvbnRlbnQiLCJzZXRGcmVlemVDb250ZW50Iiwic2V0VGltZW91dCIsImZpbHRlckJhciIsImR5bmFtaWNQYWdlIiwiX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbCIsImZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZCIsImdldEZpbHRlckl0ZW1zIiwiZmluZCIsImZpbHRlckl0ZW0iLCJnZXRSZXF1aXJlZCIsImdldENvbmRpdGlvbnMiLCJzZXRIZWFkZXJFeHBhbmRlZCIsIl9zaG91bGRBdXRvVHJpZ2dlclNlYXJjaCIsIl9nZXRBcHBseUF1dG9tYXRpY2FsbHlPblZhcmlhbnQiLCJnZXRFeHRlbnNpb25BUEkiLCJ1cGRhdGVBcHBTdGF0ZSIsIm9uVmFyaWFudFNhdmVkIiwib25TZWFyY2giLCJvTWRjQ2hhcnQiLCJnZXRDaGFydENvbnRyb2wiLCJiSGlkZURyYWZ0IiwiRmlsdGVyVXRpbHMiLCJnZXRFZGl0U3RhdGVJc0hpZGVEcmFmdCIsIl91cGRhdGVBTFBOb3RBcHBsaWNhYmxlRmllbGRzIiwib1BhZ2VJbnRlcm5hbE1vZGVsQ29udGV4dCIsInNUZW1wbGF0ZUNvbnRlbnRWaWV3IiwiZ2V0UHJvcGVydHkiLCJnZXRQYXRoIiwiQ2hhcnQiLCJoYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzIiwiVGFibGUiLCJoYXNQZW5kaW5nVGFibGVDaGFuZ2VzIiwiRGV2aWNlIiwic3lzdGVtIiwiZGVza3RvcCIsImdldEhlYWRlckV4cGFuZGVkIiwiU3RhdGVVdGlsIiwicmV0cmlldmVFeHRlcm5hbFN0YXRlIiwidGhlbiIsIm9FeHRlcm5hbFN0YXRlIiwiZmlsdGVyQmFyQ29uZGl0aW9ucyIsImZpbHRlciIsImNhdGNoIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJnZXRWaWV3RGF0YSIsImxpdmVNb2RlIiwicGhvbmUiLCJvRHluYW1pY1BhZ2UiLCJfaXNJbml0TG9hZEVuYWJsZWQiLCJzZXRGaWx0ZXJUb2dnbGVWaXNpYmlsaXR5Iiwib25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kIiwib0NvbnRyb2xsZXIiLCJzT3V0Ym91bmRUYXJnZXQiLCJvQ29udGV4dCIsInNDcmVhdGVQYXRoIiwiX2ludGVudEJhc2VkTmF2aWdhdGlvbiIsIm9uQ2hhcnRTZWxlY3Rpb25DaGFuZ2VkIiwiZ2V0U291cmNlIiwiZ2V0Q29udGVudCIsIm9UYWJsZSIsIl9nZXRUYWJsZSIsImFEYXRhIiwiQ2hhcnRVdGlscyIsInNldENoYXJ0RmlsdGVycyIsInJlYmluZCIsIm9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZCIsInNlbGVjdGVkS2V5Iiwia2V5Iiwib0NoYXJ0IiwiX3VwZGF0ZVRhYmxlIiwiX3VwZGF0ZUNoYXJ0IiwiSHlicmlkIiwiZm9jdXNIYW5kbGluZ0ZvclNlZ21lbnRlZEJ1dHRvbiIsIm9uRHluYW1pY1BhZ2VUaXRsZVN0YXRlQ2hhbmdlZCIsImV2ZW50IiwiSW52aXNpYmxlTWVzc2FnZSIsImdldEluc3RhbmNlIiwiYW5ub3VuY2UiLCJnZXRBc3NpZ25lZEZpbHRlcnNUZXh0IiwiZmlsdGVyc1RleHQiLCJJbnZpc2libGVNZXNzYWdlTW9kZSIsIkFzc2VydGl2ZSIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiZXh0ZW5zaW9uQVBJIiwiRXh0ZW5zaW9uQVBJIiwib25Jbml0IiwiUGFnZUNvbnRyb2xsZXIiLCJhcHBseSIsIl9oYXNNdWx0aVZpc3VhbGl6YXRpb25zIiwiYWxwQ29udGVudFZpZXciLCJfZ2V0RGVmYXVsdFBhdGgiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRSb3V0ZXJQcm94eSIsIndhaXRGb3JSb3V0ZU1hdGNoQmVmb3JlTmF2aWdhdGlvbiIsIl9zZXRJbml0TG9hZCIsInZpZXciLCJ1aU1vZGVsIiwiZ2V0TW9kZWwiLCJwYXRoIiwiZ2V0SWQiLCJpc0VkaXRhYmxlIiwiYmluZEVsZW1lbnQiLCJtb2RlbCIsIm9uQmVmb3JlUmVuZGVyaW5nIiwiZHlubWljUGFnZUhlYWRlclRpdGxlIiwiZ2V0VGl0bGUiLCJicmVhZGNydW1ic0JCIiwiZ2V0QnJlYWRjcnVtYnMiLCJzZXRCcmVhZGNydW1iTGlua3MiLCJvbkV4aXQiLCJkZXN0cm95IiwiYVRhYmxlcyIsIl9nZXRDb250cm9scyIsInVwZGF0ZUFjdGlvbnMiLCJFZGl0U3RhdGUiLCJpc0VkaXRTdGF0ZURpcnR5IiwidGFibGUiLCJvVGFibGVCaW5kaW5nIiwiZ2V0Um93QmluZGluZyIsInRhYmxlQVBJIiwiQ29tbW9uVXRpbHMiLCJnZXRSb3V0aW5nU2VydmljZSIsIndhaXRGb3JCaW5kaW5nQ2xlYW51cCIsImF0dGFjaEV2ZW50T25jZSIsIl91cGRhdGVUYWJsZUFjdGlvbnMiLCJnZXRUYWJsZURlZmluaXRpb24iLCJjb250cm9sIiwidHlwZSIsInJlc2V0Q2hhbmdlcyIsInJlZnJlc2giLCJlIiwid2FybmluZyIsInNldEVkaXRTdGF0ZVByb2Nlc3NlZCIsImludGVybmFsTW9kZWxDb250ZXh0Iiwidmlld0lkIiwicGFnZVJlYWR5Iiwid2FpdEZvciIsIl9hcHBseUFwcFN0YXRlIiwiZW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJnZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcyIsImlzSW5zaWdodHNFbmFibGVkIiwib25QYWdlUmVhZHkiLCJtUGFyYW1ldGVycyIsImZvcmNlRm9jdXMiLCJfc2V0SW5pdGlhbEZvY3VzIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsInNldEJhY2tOYXZpZ2F0aW9uIiwidW5kZWZpbmVkIiwib25WaWV3TmVlZHNSZWZyZXNoIiwic2xpY2UiLCJvbkFmdGVyQ2xlYXIiLCJhSUJOQWN0aW9ucyIsImZvckVhY2giLCJnZXRJQk5BY3Rpb25zIiwidXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkiLCJ1cGRhdGVNZW51QnV0dG9uVmlzaWJsaXR5IiwiX3Njcm9sbFRhYmxlc1RvUm93Iiwic1Jvd1BhdGgiLCJUYWJsZVNjcm9sbGVyIiwic2Nyb2xsVGFibGVUb1JvdyIsIl9mb2N1c1NpbGVudCIsImZpbHRlckZpZWxkIiwiZm9jdXNJbmZvIiwiZ2V0Rm9jdXNJbmZvIiwidGFyZ2V0SW5mbyIsInNpbGVudCIsImZvY3VzIiwiaXNIZWFkZXJFeHBhbmRlZCIsIl9pc0ZpbHRlckJhckhpZGRlblVzZWQiLCJnZXRTaG93TWVzc2FnZXMiLCJzZXRTaG93TWVzc2FnZXMiLCJvRmlsdGVySXRlbSIsImZpZWxkVG9Gb2N1cyIsImJ5SWQiLCJfZ2V0RmlsdGVyQmFyQ29udHJvbElkIiwiZm9jdXNSb3ciLCJfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24iLCJvTWFuaWZlc3RFbnRyeSIsImdldE1hbmlmZXN0RW50cnkiLCJ0aXRsZSIsInN1YnRpdGxlIiwic3ViVGl0bGUiLCJpbnRlbnQiLCJpY29uIiwiX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbElkIiwiX2dldEFkYXB0YXRpb25GaWx0ZXJCYXJDb250cm9sIiwiYWRhcHRhdGlvbkZpbHRlckJhciIsImdldEluYnVpbHRGaWx0ZXIiLCJnZXRBcHBTdGF0ZUhhbmRsZXIiLCJhcHBseUFwcFN0YXRlIiwiZW5hYmxlUmVxdWVzdHMiLCJfaXNGaWx0ZXJCYXJIaWRkZW4iLCJfaXNNdWx0aU1vZGUiLCJzZXRDb3VudHNPdXREYXRlZCIsIl9nZXRTZWdtZW50ZWRCdXR0b24iLCJzQ29udHJvbCIsInNTZWdtZW50ZWRCdXR0b25JZCIsIl9nZXRDb250cm9sRnJvbVBhZ2VNb2RlbFByb3BlcnR5Iiwic1BhdGgiLCJjb250cm9sSWQiLCJfZ2V0UGFnZU1vZGVsIiwiX2dldFZpc3VhbEZpbHRlckJhckNvbnRyb2wiLCJzVmlzdWFsRmlsdGVyQmFySWQiLCJTdGFibGVJZEhlbHBlciIsImdlbmVyYXRlIiwiX2dldEZpbHRlckJhclZhcmlhbnRDb250cm9sIiwiX2dldEljb25UYWJCYXIiLCJvQ29udHJvbCIsImdldFNlbGVjdGVkSW5uZXJDb250cm9sIiwiY29udGVudCIsInNLZXkiLCJhQ29udHJvbHMiLCJvVGFiTXVsdGlNb2RlIiwiZ2V0SXRlbXMiLCJvSXRlbSIsImdldEtleSIsImluY2x1ZGVzIiwicHVzaCIsImRlZmF1bHRQYXRoIiwiTGlzdFJlcG9ydFRlbXBsYXRpbmciLCJnZXREZWZhdWx0UGF0aCIsImluaXRMb2FkTW9kZSIsImluaXRpYWxMb2FkIiwiRW5hYmxlZCIsIl9kaXNhYmxlSW5pdExvYWQiLCJfYXBwbHlBdXRvbWF0aWNhbGx5T25TdGFuZGFyZFZhcmlhbnQiLCJ2YXJpYW50TWFuYWdlbWVudElkIiwiZ2V0VmFyaWFudEJhY2tSZWZlcmVuY2UiLCJnZXREYXRhIiwicmVnaXN0ZXJBcHBseUF1dG9tYXRpY2FsbHlPblN0YW5kYXJkVmFyaWFudCIsImJpbmQiLCJfc2V0U2hhcmVNb2RlbCIsImZuR2V0VXNlciIsIk9iamVjdFBhdGgiLCJnZXQiLCJvU2hhcmVJbmZvIiwiYm9va21hcmtUaXRsZSIsImRvY3VtZW50IiwiYm9va21hcmtDdXN0b21VcmwiLCJzSGFzaCIsImhhc2hlciIsImdldEhhc2giLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhyZWYiLCJpc1NoYXJlSW5KYW1BY3RpdmUiLCJpc0phbUFjdGl2ZSIsIm9UZW1wbGF0ZVByaXZhdGVNb2RlbCIsImdldE93bmVyQ29tcG9uZW50IiwibUNhY2hlIiwiaWdub3JlZEZpZWxkcyIsImFDaGFydHMiLCJzQ2hhcnRFbnRpdHlQYXRoIiwic0NoYXJ0RW50aXR5U2V0Iiwic0NhY2hlS2V5IiwiZ2V0Tm90QXBwbGljYWJsZUZpbHRlcnMiLCJoaWRlRmlsdGVyQmFyIiwidXNlSGlkZGVuRmlsdGVyQmFyIiwidmFyaWFudHMiLCJnZXRWYXJpYW50cyIsImN1cnJlbnRWYXJpYW50IiwidmFyaWFudCIsIm9WTSIsIkF1dG8iLCJnZXRTdGFuZGFyZFZhcmlhbnRLZXkiLCJnZXRDdXJyZW50VmFyaWFudEtleSIsIm9Db25kaXRpb25zIiwic3RhcnRzV2l0aCIsInN0YW5kYXJkVmFyaWFudCIsImdldEV4ZWN1dGVPblNlbGVjdCIsImlzVGFibGVCb3VuZCIsIm9Jbm5lckNoYXJ0IiwiZ2V0Q29udHJvbERlbGVnYXRlIiwiX2dldENoYXJ0IiwiaXNCb3VuZCIsImdldEJpbmRpbmdJbmZvIiwiYnV0dG9uVmlzaWJsZSIsImdldFNlZ21lbnRlZEJ1dHRvbiIsInNldFZpc2libGUiLCJzZWdtZW50ZWRCdXR0b25JZCIsImFkZEZvY3VzRGVsZWdhdGUiLCJzZWdtZW50ZWRCdXR0b24iLCJVSTVFbGVtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJldmVudERlbGVnYXRlIiwib25BZnRlclJlbmRlcmluZyIsInJlbW92ZUV2ZW50RGVsZWdhdGUiLCJhZGRFdmVudERlbGVnYXRlIiwic3YiLCJnZXRTZWxlY3Rpb25WYXJpYW50IiwiZXJyIiwibWVzc2FnZSIsIkVycm9yIiwiU3RyaW5nIiwiZ2V0RmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudCIsIlNlbGVjdGlvblZhcmlhbnQiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkxpc3RSZXBvcnRDb250cm9sbGVyLmNvbnRyb2xsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgT2JqZWN0UGF0aCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9PYmplY3RQYXRoXCI7XG5pbXBvcnQgdHlwZSBEeW5hbWljUGFnZSBmcm9tIFwic2FwL2YvRHluYW1pY1BhZ2VcIjtcbmltcG9ydCB0eXBlIHsgRHluYW1pY1BhZ2VUaXRsZSRTdGF0ZUNoYW5nZUV2ZW50IH0gZnJvbSBcInNhcC9mL0R5bmFtaWNQYWdlVGl0bGVcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLGV4dGVuc2libGUsZmluYWxFeHRlbnNpb24scHJpdmF0ZUV4dGVuc2lvbixwdWJsaWNFeHRlbnNpb24sdXNpbmdFeHRlbnNpb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgSW50ZW50QmFzZWROYXZpZ2F0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBJbnRlcm5hbFJvdXRpbmcgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsUm91dGluZ1wiO1xuaW1wb3J0IEtQSU1hbmFnZW1lbnQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0tQSU1hbmFnZW1lbnRcIjtcbmltcG9ydCBQbGFjZWhvbGRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvUGxhY2Vob2xkZXJcIjtcbmltcG9ydCBTaGFyZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvU2hhcmVcIjtcbmltcG9ydCBTaWRlRWZmZWN0cyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvU2lkZUVmZmVjdHNcIjtcbmltcG9ydCBWaWV3U3RhdGUgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1ZpZXdTdGF0ZVwiO1xuaW1wb3J0IHR5cGUgeyBMaXN0UmVwb3J0RGVmaW5pdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL3RlbXBsYXRlcy9MaXN0UmVwb3J0Q29udmVydGVyXCI7XG5pbXBvcnQgRWRpdFN0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0VkaXRTdGF0ZVwiO1xuaW1wb3J0IE1lc3NhZ2VTdHJpcCBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXNzYWdlU3RyaXBcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCAqIGFzIFN0YWJsZUlkSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgQ29yZUxpYnJhcnkgZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIEJyZWFkY3J1bWJzIGZyb20gXCJzYXAvZmUvbWFjcm9zL0JyZWFkY3J1bWJzXCI7XG5pbXBvcnQgdHlwZSBDaGFydFR5cGUgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ2hhcnRcIjtcbmltcG9ydCB0eXBlIE1hY3JvQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL01hY3JvQVBJXCI7XG5pbXBvcnQgdHlwZSBDaGFydERlbGVnYXRlIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NoYXJ0L0NoYXJ0RGVsZWdhdGVcIjtcbmltcG9ydCBDaGFydFV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NoYXJ0L0NoYXJ0VXRpbHNcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jb250cm9scy9GaWx0ZXJCYXJcIjtcbmltcG9ydCBGaWx0ZXJVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXIvRmlsdGVyVXRpbHNcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhckFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXJCYXIvRmlsdGVyQmFyQVBJXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IFNlbGVjdGlvblZhcmlhbnQgZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uL1NlbGVjdGlvblZhcmlhbnRcIjtcbmltcG9ydCBFeHRlbnNpb25BUEkgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvTGlzdFJlcG9ydC9FeHRlbnNpb25BUElcIjtcbmltcG9ydCB0eXBlIE11bHRpcGxlTW9kZUNvbnRyb2wgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvTGlzdFJlcG9ydC9jb250cm9scy9NdWx0aXBsZU1vZGVDb250cm9sXCI7XG5pbXBvcnQgU2lkZUVmZmVjdHNPdmVycmlkZSBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9MaXN0UmVwb3J0L292ZXJyaWRlcy9TaWRlRWZmZWN0c1wiO1xuaW1wb3J0IFRhYmxlU2Nyb2xsZXIgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvVGFibGVTY3JvbGxlclwiO1xuaW1wb3J0IHR5cGUgSWNvblRhYkJhciBmcm9tIFwic2FwL20vSWNvblRhYkJhclwiO1xuaW1wb3J0IHR5cGUgVGFiQ29udGFpbmVySXRlbSBmcm9tIFwic2FwL20vVGFiQ29udGFpbmVySXRlbVwiO1xuaW1wb3J0IERldmljZSBmcm9tIFwic2FwL3VpL0RldmljZVwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IEludmlzaWJsZU1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL0ludmlzaWJsZU1lc3NhZ2VcIjtcbmltcG9ydCB7IEludmlzaWJsZU1lc3NhZ2VNb2RlIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBWYXJpYW50TWFuYWdlbWVudCBmcm9tIFwic2FwL3VpL2ZsL3ZhcmlhbnRzL1ZhcmlhbnRNYW5hZ2VtZW50XCI7XG5pbXBvcnQgdHlwZSB7IFZhcmlhbnRNYW5hZ2VtZW50JFNlbGVjdEV2ZW50IH0gZnJvbSBcInNhcC91aS9mbC92YXJpYW50cy9WYXJpYW50TWFuYWdlbWVudFwiO1xuaW1wb3J0IHR5cGUgQ2hhcnQgZnJvbSBcInNhcC91aS9tZGMvQ2hhcnRcIjtcbmltcG9ydCB0eXBlIEZpbHRlckZpZWxkIGZyb20gXCJzYXAvdWkvbWRjL0ZpbHRlckZpZWxkXCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBGaWx0ZXJCYXJCYXNlJEZpbHRlcnNDaGFuZ2VkRXZlbnQgfSBmcm9tIFwic2FwL3VpL21kYy9maWx0ZXJiYXIvRmlsdGVyQmFyQmFzZVwiO1xuaW1wb3J0IFN0YXRlVXRpbCBmcm9tIFwic2FwL3VpL21kYy9wMTNuL1N0YXRlVXRpbFwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgaGFzaGVyIGZyb20gXCJzYXAvdWkvdGhpcmRwYXJ0eS9oYXNoZXJcIjtcbmltcG9ydCAqIGFzIExpc3RSZXBvcnRUZW1wbGF0aW5nIGZyb20gXCIuL0xpc3RSZXBvcnRUZW1wbGF0aW5nXCI7XG5pbXBvcnQgSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL0ludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IFNoYXJlT3ZlcnJpZGVzIGZyb20gXCIuL292ZXJyaWRlcy9TaGFyZVwiO1xuaW1wb3J0IFZpZXdTdGF0ZU92ZXJyaWRlcyBmcm9tIFwiLi9vdmVycmlkZXMvVmlld1N0YXRlXCI7XG5cbmNvbnN0IFRlbXBsYXRlQ29udGVudFZpZXcgPSBDb3JlTGlicmFyeS5UZW1wbGF0ZUNvbnRlbnRWaWV3LFxuXHRJbml0aWFsTG9hZE1vZGUgPSBDb3JlTGlicmFyeS5Jbml0aWFsTG9hZE1vZGU7XG5cbi8qKlxuICogQ29udHJvbGxlciBjbGFzcyBmb3IgdGhlIGxpc3QgcmVwb3J0IHBhZ2UsIHVzZWQgaW5zaWRlIGFuIFNBUCBGaW9yaSBlbGVtZW50cyBhcHBsaWNhdGlvbi5cbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBwdWJsaWNcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLnRlbXBsYXRlcy5MaXN0UmVwb3J0Lkxpc3RSZXBvcnRDb250cm9sbGVyXCIpXG5jbGFzcyBMaXN0UmVwb3J0Q29udHJvbGxlciBleHRlbmRzIFBhZ2VDb250cm9sbGVyIHtcblx0QHVzaW5nRXh0ZW5zaW9uKFxuXHRcdEludGVybmFsUm91dGluZy5vdmVycmlkZSh7XG5cdFx0XHRvbkFmdGVyQmluZGluZzogZnVuY3Rpb24gKHRoaXM6IEludGVybmFsUm91dGluZykge1xuXHRcdFx0XHQodGhpcy5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIExpc3RSZXBvcnRDb250cm9sbGVyKS5fb25BZnRlckJpbmRpbmcoKTtcblx0XHRcdH1cblx0XHR9KVxuXHQpXG5cdF9yb3V0aW5nITogSW50ZXJuYWxSb3V0aW5nO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihcblx0XHRJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbi5vdmVycmlkZSh7XG5cdFx0XHRnZXRFbnRpdHlTZXQ6IGZ1bmN0aW9uICh0aGlzOiBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbikge1xuXHRcdFx0XHRyZXR1cm4gKHRoaXMuYmFzZSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcikuZ2V0Q3VycmVudEVudGl0eVNldCgpO1xuXHRcdFx0fVxuXHRcdH0pXG5cdClcblx0X2ludGVudEJhc2VkTmF2aWdhdGlvbiE6IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihTaWRlRWZmZWN0cy5vdmVycmlkZShTaWRlRWZmZWN0c092ZXJyaWRlKSlcblx0X3NpZGVFZmZlY3RzITogU2lkZUVmZmVjdHM7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKEludGVudEJhc2VkTmF2aWdhdGlvbi5vdmVycmlkZShJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSkpXG5cdGludGVudEJhc2VkTmF2aWdhdGlvbiE6IEludGVudEJhc2VkTmF2aWdhdGlvbjtcblxuXHRAdXNpbmdFeHRlbnNpb24oU2hhcmUub3ZlcnJpZGUoU2hhcmVPdmVycmlkZXMpKVxuXHRzaGFyZSE6IFNoYXJlO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihWaWV3U3RhdGUub3ZlcnJpZGUoVmlld1N0YXRlT3ZlcnJpZGVzKSlcblx0dmlld1N0YXRlITogVmlld1N0YXRlO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihLUElNYW5hZ2VtZW50KVxuXHRrcGlNYW5hZ2VtZW50ITogS1BJTWFuYWdlbWVudDtcblxuXHRAdXNpbmdFeHRlbnNpb24oUGxhY2Vob2xkZXIpXG5cdHBsYWNlaG9sZGVyITogUGxhY2Vob2xkZXI7XG5cblx0cHJvdGVjdGVkIGV4dGVuc2lvbkFQST86IEV4dGVuc2lvbkFQSTtcblxuXHRwcml2YXRlIGZpbHRlckJhckNvbmRpdGlvbnM/OiB1bmtub3duO1xuXG5cdHByaXZhdGUgaGFzUGVuZGluZ0NoYXJ0Q2hhbmdlcz86IGJvb2xlYW47XG5cblx0cHJpdmF0ZSBoYXNQZW5kaW5nVGFibGVDaGFuZ2VzPzogYm9vbGVhbjtcblxuXHQvKipcblx0ICogR2V0IHRoZSBleHRlbnNpb24gQVBJIGZvciB0aGUgY3VycmVudCBwYWdlLlxuXHQgKiBAcHVibGljXG5cdCAqIEByZXR1cm5zIFRoZSBleHRlbnNpb24gQVBJLlxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldEV4dGVuc2lvbkFQSSgpOiBFeHRlbnNpb25BUEkge1xuXHRcdGlmICghdGhpcy5leHRlbnNpb25BUEkpIHtcblx0XHRcdHRoaXMuZXh0ZW5zaW9uQVBJID0gbmV3IEV4dGVuc2lvbkFQSSh0aGlzKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZXh0ZW5zaW9uQVBJO1xuXHR9XG5cblx0b25Jbml0KCk6IHZvaWQge1xuXHRcdFBhZ2VDb250cm9sbGVyLnByb3RvdHlwZS5vbkluaXQuYXBwbHkodGhpcyk7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBmaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdFx0aWYgKGZpbHRlckJhcikge1xuXHRcdFx0dGhpcy5fc3RvcmVGaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50KGZpbHRlckJhciwgb0ludGVybmFsTW9kZWxDb250ZXh0KTtcblx0XHR9XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaGFzUGVuZGluZ0ZpbHRlcnNcIiwgdHJ1ZSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaGlkZURyYWZ0SW5mb1wiLCBmYWxzZSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwidW9tXCIsIHt9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzY2FsZWZhY3RvclwiLCB7fSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwic2NhbGVmYWN0b3JOdW1iZXJcIiwge30pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImN1cnJlbmN5XCIsIHt9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJpc0luc2lnaHRzU3VwcG9ydGVkXCIsIGZhbHNlKTtcblxuXHRcdGlmICh0aGlzLl9oYXNNdWx0aVZpc3VhbGl6YXRpb25zKCkpIHtcblx0XHRcdGxldCBhbHBDb250ZW50VmlldyA9IHRoaXMuX2dldERlZmF1bHRQYXRoKCk7XG5cdFx0XHRpZiAoIURldmljZS5zeXN0ZW0uZGVza3RvcCAmJiBhbHBDb250ZW50VmlldyA9PT0gVGVtcGxhdGVDb250ZW50Vmlldy5IeWJyaWQpIHtcblx0XHRcdFx0YWxwQ29udGVudFZpZXcgPSBUZW1wbGF0ZUNvbnRlbnRWaWV3LkNoYXJ0O1xuXHRcdFx0fVxuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiYWxwQ29udGVudFZpZXdcIiwgYWxwQ29udGVudFZpZXcpO1xuXHRcdH1cblxuXHRcdC8vIFN0b3JlIGNvbmRpdGlvbnMgZnJvbSBmaWx0ZXIgYmFyXG5cdFx0Ly8gdGhpcyBpcyBsYXRlciB1c2VkIGJlZm9yZSBuYXZpZ2F0aW9uIHRvIGdldCBjb25kaXRpb25zIGFwcGxpZWQgb24gdGhlIGZpbHRlciBiYXJcblx0XHR0aGlzLmZpbHRlckJhckNvbmRpdGlvbnMgPSB7fTtcblxuXHRcdC8vIEFzIEFwcFN0YXRlSGFuZGxlci5hcHBseUFwcFN0YXRlIHRyaWdnZXJzIGEgbmF2aWdhdGlvbiB3ZSB3YW50IHRvIG1ha2Ugc3VyZSBpdCB3aWxsXG5cdFx0Ly8gaGFwcGVuIGFmdGVyIHRoZSByb3V0ZU1hdGNoIGV2ZW50IGhhcyBiZWVuIHByb2Nlc3NlZCAob3RoZXJ3aXNlIHRoZSByb3V0ZXIgZ2V0cyBicm9rZW4pXG5cdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb3V0ZXJQcm94eSgpLndhaXRGb3JSb3V0ZU1hdGNoQmVmb3JlTmF2aWdhdGlvbigpO1xuXG5cdFx0Ly8gQ29uZmlndXJlIHRoZSBpbml0aWFsIGxvYWQgc2V0dGluZ3Ncblx0XHR0aGlzLl9zZXRJbml0TG9hZCgpO1xuXHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCB1aU1vZGVsID0gdmlldy5nZXRNb2RlbChcInVpXCIpO1xuXHRcdGNvbnN0IHBhdGggPSBgLyR7dmlldy5nZXRJZCgpfWA7XG5cdFx0dWlNb2RlbC5zZXRQcm9wZXJ0eShwYXRoLCB7IGlzRWRpdGFibGU6IGZhbHNlIH0pO1xuXHRcdHZpZXcuYmluZEVsZW1lbnQoeyBwYXRoLCBtb2RlbDogXCJ1aVwiIH0pO1xuXHR9XG5cblx0b25CZWZvcmVSZW5kZXJpbmcoKTogdm9pZCB7XG5cdFx0UGFnZUNvbnRyb2xsZXIucHJvdG90eXBlLm9uQmVmb3JlUmVuZGVyaW5nLmFwcGx5KHRoaXMpO1xuXHRcdGNvbnN0IGR5bmFtaWNQYWdlID0gdGhpcy5fZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sKCk7XG5cdFx0Y29uc3QgZHlubWljUGFnZUhlYWRlclRpdGxlID0gZHluYW1pY1BhZ2U/LmdldFRpdGxlKCk7XG5cdFx0Y29uc3QgYnJlYWRjcnVtYnNCQiA9IGR5bm1pY1BhZ2VIZWFkZXJUaXRsZS5nZXRCcmVhZGNydW1icygpIGFzIEJyZWFkY3J1bWJzIHwgdW5kZWZpbmVkO1xuXHRcdGlmIChicmVhZGNydW1ic0JCKSB7XG5cdFx0XHRicmVhZGNydW1ic0JCLnNldEJyZWFkY3J1bWJMaW5rcyhcIlwiKTtcblx0XHR9XG5cdH1cblxuXHRvbkV4aXQoKTogdm9pZCB7XG5cdFx0ZGVsZXRlIHRoaXMuZmlsdGVyQmFyQ29uZGl0aW9ucztcblx0XHRpZiAodGhpcy5leHRlbnNpb25BUEkpIHtcblx0XHRcdHRoaXMuZXh0ZW5zaW9uQVBJLmRlc3Ryb3koKTtcblx0XHR9XG5cdFx0ZGVsZXRlIHRoaXMuZXh0ZW5zaW9uQVBJO1xuXHR9XG5cblx0X29uQWZ0ZXJCaW5kaW5nKCk6IHZvaWQge1xuXHRcdGNvbnN0IGFUYWJsZXMgPSB0aGlzLl9nZXRDb250cm9scyhcInRhYmxlXCIpIGFzIFRhYmxlW107XG5cdFx0bGV0IHVwZGF0ZUFjdGlvbnMgPSB0cnVlO1xuXHRcdGlmIChFZGl0U3RhdGUuaXNFZGl0U3RhdGVEaXJ0eSgpKSB7XG5cdFx0XHR0aGlzLl9nZXRNdWx0aU1vZGVDb250cm9sKCk/LmludmFsaWRhdGVDb250ZW50KCk7XG5cdFx0XHRjb25zdCB0YWJsZSA9IHRoaXMuX2dldFRhYmxlKCk7XG5cdFx0XHRjb25zdCBvVGFibGVCaW5kaW5nID0gdGFibGU/LmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdGlmIChvVGFibGVCaW5kaW5nKSB7XG5cdFx0XHRcdHVwZGF0ZUFjdGlvbnMgPSBmYWxzZTtcblx0XHRcdFx0Y29uc3QgdGFibGVBUEkgPSB0YWJsZT8uZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cblx0XHRcdFx0Ly8gVXBkYXRlIHRoZSB0YWJsZSBjb250ZW50IHVzaW5nIHNpZGUgZWZmZWN0cyAobGlzdEJpbmRpbmcucmVmcmVzaCBkb2Vzbid0IGtlZXAgZXhwYW5zaW9uIHN0YXRlcyBpbiBhIFRyZWVUYWJsZSlcblx0XHRcdFx0Q29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuZ2V0VmlldygpKVxuXHRcdFx0XHRcdC5nZXRSb3V0aW5nU2VydmljZSgpXG5cdFx0XHRcdFx0LndhaXRGb3JCaW5kaW5nQ2xlYW51cCgpXG5cdFx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0b1RhYmxlQmluZGluZy5hdHRhY2hFdmVudE9uY2UoXCJkYXRhUmVjZWl2ZWRcIiwgKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVUYWJsZUFjdGlvbnMoYVRhYmxlcyk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGlmICh0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLnR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRcdFx0XHRcdFx0Ly8gQXMgdGhlIHJlZnJlc2ggb24gYSBUcmVlVGFibGUgdXNlcyBzaWRlLWVmZmVjdHMsIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBwZW5kaW5nIGNoYW5nZXNcblx0XHRcdFx0XHRcdFx0Ly8gYmVmb3JlIHRoZSBzaWRlLWVmZmVjdHMgYXJlIHF1ZXJpZWQgKGUuZy4gZmFpbGVkIFBBVENIIHF1ZXJpZXMgdGhhdCB3b3VsZCBiZSByZXNlbnQgdG9nZXRoZXIgd2l0aCBzaWRlIGVmZmVjdHMgR0VUKVxuXHRcdFx0XHRcdFx0XHR0aGlzLmdldE1vZGVsKCkucmVzZXRDaGFuZ2VzKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR0YWJsZUFQSS5yZWZyZXNoKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRcdExvZy53YXJuaW5nKFwiRXJyb3Igd2hpbGUgd2FpdGluZyByZWZyZXNoaW5nIExpc3RSZXBvcnQgdGFibGVcIiwgZSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRFZGl0U3RhdGUuc2V0RWRpdFN0YXRlUHJvY2Vzc2VkKCk7XG5cdFx0fVxuXG5cdFx0aWYgKHVwZGF0ZUFjdGlvbnMpIHtcblx0XHRcdHRoaXMuX3VwZGF0ZVRhYmxlQWN0aW9ucyhhVGFibGVzKTtcblx0XHR9XG5cblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0aWYgKCFpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImluaXRpYWxWYXJpYW50QXBwbGllZFwiKSkge1xuXHRcdFx0Y29uc3Qgdmlld0lkID0gdGhpcy5nZXRWaWV3KCkuZ2V0SWQoKTtcblx0XHRcdHRoaXMucGFnZVJlYWR5LndhaXRGb3IodGhpcy5fYXBwbHlBcHBTdGF0ZSh2aWV3SWQpKTtcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaW5pdGlhbFZhcmlhbnRBcHBsaWVkXCIsIHRydWUpO1xuXHRcdH1cblx0XHRjb25zdCBlbnZpcm9ubWVudENhcGFiaWxpdGllcyA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLmdldFZpZXcoKSkuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKTtcblx0XHRlbnZpcm9ubWVudENhcGFiaWxpdGllc1xuXHRcdFx0LmlzSW5zaWdodHNFbmFibGVkKClcblx0XHRcdC50aGVuKChpc0luc2lnaHRzRW5hYmxlZDogYm9vbGVhbikgPT4ge1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImlzSW5zaWdodHNTdXBwb3J0ZWRcIiwgaXNJbnNpZ2h0c0VuYWJsZWQpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKChlcnJvcjogdW5rbm93bikgPT4ge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBjaGVja2luZyBpZiBpbnNpZ2h0cyBhcmUgZW5hYmxlZFwiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRmb3JtYXR0ZXJzID0ge1xuXHRcdHNldEFMUENvbnRyb2xNZXNzYWdlU3RyaXAoXG5cdFx0XHR0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlcixcblx0XHRcdGFJZ25vcmVkRmllbGRzOiBzdHJpbmdbXSxcblx0XHRcdGJJc0NoYXJ0OiBib29sZWFuIHwgc3RyaW5nLFxuXHRcdFx0b0FwcGx5U3VwcG9ydGVkPzogeyBlbmFibGVTZWFyY2g6IGJvb2xlYW4gfVxuXHRcdCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0XHRsZXQgc1RleHQgPSBcIlwiO1xuXHRcdFx0YklzQ2hhcnQgPSBiSXNDaGFydCA9PT0gXCJ0cnVlXCIgfHwgYklzQ2hhcnQgPT09IHRydWU7XG5cdFx0XHRjb25zdCBvRmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdFx0aWYgKG9GaWx0ZXJCYXIgJiYgQXJyYXkuaXNBcnJheShhSWdub3JlZEZpZWxkcykgJiYgYUlnbm9yZWRGaWVsZHMubGVuZ3RoID4gMCAmJiBiSXNDaGFydCkge1xuXHRcdFx0XHRjb25zdCBhSWdub3JlZExhYmVscyA9IE1lc3NhZ2VTdHJpcC5nZXRMYWJlbHMoXG5cdFx0XHRcdFx0YUlnbm9yZWRGaWVsZHMsXG5cdFx0XHRcdFx0b0ZpbHRlckJhci5kYXRhKFwiZW50aXR5VHlwZVwiKSxcblx0XHRcdFx0XHRvRmlsdGVyQmFyLFxuXHRcdFx0XHRcdGdldFJlc291cmNlTW9kZWwob0ZpbHRlckJhcilcblx0XHRcdFx0KTtcblx0XHRcdFx0Y29uc3QgYklzU2VhcmNoSWdub3JlZCA9ICFvQXBwbHlTdXBwb3J0ZWQ/LmVuYWJsZVNlYXJjaDtcblx0XHRcdFx0c1RleHQgPSBiSXNDaGFydFxuXHRcdFx0XHRcdD8gTWVzc2FnZVN0cmlwLmdldEFMUFRleHQoYUlnbm9yZWRMYWJlbHMsIG9GaWx0ZXJCYXIsIGJJc1NlYXJjaElnbm9yZWQpXG5cdFx0XHRcdFx0OiBNZXNzYWdlU3RyaXAuZ2V0VGV4dChhSWdub3JlZExhYmVscywgb0ZpbHRlckJhciwgXCJcIik7XG5cdFx0XHRcdHJldHVybiBzVGV4dDtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShcIkFmdGVyXCIpXG5cdGFzeW5jIG9uUGFnZVJlYWR5KG1QYXJhbWV0ZXJzOiB7IGZvcmNlRm9jdXM/OiBib29sZWFuIH0pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAobVBhcmFtZXRlcnMuZm9yY2VGb2N1cykge1xuXHRcdFx0dGhpcy5fc2V0SW5pdGlhbEZvY3VzKCk7XG5cdFx0fVxuXHRcdC8vIFJlbW92ZSB0aGUgaGFuZGxlciBvbiBiYWNrIG5hdmlnYXRpb24gdGhhdCBkaXNwbGF5cyBEcmFmdCBjb25maXJtYXRpb25cblx0XHRhd2FpdCB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFNoZWxsU2VydmljZXMoKS5zZXRCYWNrTmF2aWdhdGlvbih1bmRlZmluZWQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCBjYWxsZWQgd2hlbiB0aGUgY29udGVudCBvZiBhIGN1c3RvbSB2aWV3IHVzZWQgaW4gYSBsaXN0IHJlcG9ydCBuZWVkcyB0byBiZSByZWZyZXNoZWQuXG5cdCAqIFRoaXMgaGFwcGVucyBlaXRoZXIgd2hlbiB0aGVyZSBpcyBhIGNoYW5nZSBvbiB0aGUgRmlsdGVyQmFyIGFuZCB0aGUgc2VhcmNoIGlzIHRyaWdnZXJlZCxcblx0ICogb3Igd2hlbiBhIHRhYiB3aXRoIGN1c3RvbSBjb250ZW50IGlzIHNlbGVjdGVkLFxuXHQgKiBvciB3aGVuIHRoZSB2aWV3IGlzIGZvcmNlZCB0byBiZSByZWZyZXNoZWQgdGhyb3VnaCB0aGUgRXh0ZW5zaW9uIEFQSSBmb3IgdGhlIGxpc3QgcmVwb3J0J3MgcHVibGljIG1ldGhvZCBzZXRUYWJDb250ZW50VG9CZVJlZnJlc2hlZE9uTmV4dE9wZW5pbmcuXG5cdCAqIFRoaXMgbWV0aG9kIGNhbiBiZSBvdmVyd3JpdHRlbiBieSB0aGUgY29udHJvbGxlciBleHRlbnNpb24gaW4gY2FzZSBvZiBjdXN0b21pemF0aW9uLlxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMgTWFwIGNvbnRhaW5pbmcgdGhlIGZpbHRlciBjb25kaXRpb25zIG9mIHRoZSBGaWx0ZXJCYXIsIHRoZSBjdXJyZW50VGFiSURcblx0ICogYW5kIHRoZSB2aWV3IHJlZnJlc2ggY2F1c2UgKHRhYkNoYW5nZWQsIHNlYXJjaCBvciBmb3JjZWRSZWZyZXNoKS5cblx0ICogVGhlIG1hcCBsb29rcyBsaWtlIHRoaXM6XG5cdCAqIDxjb2RlPjxwcmU+XG5cdCAqIFx0e1xuXHQgKiBcdFx0ZmlsdGVyQ29uZGl0aW9uczoge1xuXHQgKiBcdFx0XHRDb3VudHJ5OiBbXG5cdCAqIFx0XHRcdFx0e1xuXHQgKiBcdFx0XHRcdFx0b3BlcmF0b3I6IFwiRVFcIlxuXHQgKlx0XHRcdFx0XHR2YWxpZGF0ZWQ6IFwiTm90VmFsaWRhdGVkXCJcblx0ICpcdFx0XHRcdFx0dmFsdWVzOiBbXCJHZXJtYW55XCIsIC4uLl1cblx0ICogXHRcdFx0XHR9LFxuXHQgKiBcdFx0XHRcdC4uLlxuXHQgKiBcdFx0XHRdXG5cdCAqIFx0XHRcdC4uLlxuXHQgKiBcdFx0fSxcblx0ICpcdFx0Y3VycmVudFRhYklkOiBcImZlOjpDdXN0b21UYWI6OnRhYjFcIixcblx0ICpcdFx0cmVmcmVzaENhdXNlOiBcInRhYkNoYW5nZWRcIiB8IFwic2VhcmNoXCIgfCBcImZvcmNlZFJlZnJlc2hcIlxuXHQgKlx0fVxuXHQgKiA8L3ByZT48L2NvZGU+XG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRvblZpZXdOZWVkc1JlZnJlc2gobVBhcmFtZXRlcnM6IHVua25vd24pOiB2b2lkIHtcblx0XHQvKiBUbyBiZSBvdmVycmlkZW4gKi9cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgY2FsbGVkIHdoZW4gYSBmaWx0ZXIgb3Igc2VhcmNoIHZhbHVlIGhhcyBiZWVuIGNoYW5nZWQgaW4gdGhlIEZpbHRlckJhcixcblx0ICogYnV0IGhhcyBub3QgYmVlbiB2YWxpZGF0ZWQgeWV0IGJ5IHRoZSBlbmQgdXNlciAod2l0aCB0aGUgJ0dvJyBvciAnU2VhcmNoJyBidXR0b24pLlxuXHQgKiBUeXBpY2FsbHksIHRoZSBjb250ZW50IG9mIHRoZSBjdXJyZW50IHRhYiBpcyBncmV5ZWQgb3V0IHVudGlsIHRoZSBmaWx0ZXJzIGFyZSB2YWxpZGF0ZWQuXG5cdCAqIFRoaXMgbWV0aG9kIGNhbiBiZSBvdmVyd3JpdHRlbiBieSB0aGUgY29udHJvbGxlciBleHRlbnNpb24gaW4gY2FzZSBvZiBjdXN0b21pemF0aW9uLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdG9uUGVuZGluZ0ZpbHRlcnMoKTogdm9pZCB7XG5cdFx0LyogVG8gYmUgb3ZlcnJpZGVuICovXG5cdH1cblxuXHRnZXRDdXJyZW50RW50aXR5U2V0KCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldFRhYmxlKCk/LmRhdGEoXCJ0YXJnZXRDb2xsZWN0aW9uUGF0aFwiKS5zbGljZSgxKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgY2FsbGVkIHdoZW4gdGhlICdDbGVhcicgYnV0dG9uIG9uIHRoZSBGaWx0ZXJCYXIgaXMgcHJlc3NlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRvbkFmdGVyQ2xlYXIoKTogdm9pZCB7XG5cdFx0LyogVG8gYmUgb3ZlcnJpZGVuICovXG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaW5pdGlhdGVzIHRoZSB1cGRhdGUgb2YgdGhlIGVuYWJsZWQgc3RhdGUgb2YgdGhlIERhdGFGaWVsZEZvckFjdGlvbiBhbmQgdGhlIHZpc2libGUgc3RhdGUgb2YgdGhlIERhdGFGaWVsZEZvcklCTiBidXR0b25zLlxuXHQgKiBAcGFyYW0gYVRhYmxlcyBBcnJheSBvZiB0YWJsZXMgaW4gdGhlIGxpc3QgcmVwb3J0XG5cdCAqL1xuXHRfdXBkYXRlVGFibGVBY3Rpb25zKGFUYWJsZXM6IFRhYmxlW10pOiB2b2lkIHtcblx0XHRsZXQgYUlCTkFjdGlvbnM6IFVJNUVsZW1lbnRbXSA9IFtdO1xuXHRcdGFUYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAob1RhYmxlKSB7XG5cdFx0XHRhSUJOQWN0aW9ucyA9IENvbW1vblV0aWxzLmdldElCTkFjdGlvbnMob1RhYmxlLCBhSUJOQWN0aW9ucyk7XG5cdFx0fSk7XG5cdFx0Q29tbW9uVXRpbHMudXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkoYUlCTkFjdGlvbnMsIHRoaXMuZ2V0VmlldygpKTtcblx0XHRDb21tb25VdGlscy51cGRhdGVNZW51QnV0dG9uVmlzaWJsaXR5KGFJQk5BY3Rpb25zKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBzY3JvbGxzIHRvIGEgc3BlY2lmaWMgcm93IG9uIGFsbCB0aGUgYXZhaWxhYmxlIHRhYmxlcy5cblx0ICogQHBhcmFtIHNSb3dQYXRoIFRoZSBwYXRoIG9mIHRoZSB0YWJsZSByb3cgY29udGV4dCB0byBiZSBzY3JvbGxlZCB0b1xuXHQgKi9cblx0X3Njcm9sbFRhYmxlc1RvUm93KHNSb3dQYXRoOiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLl9nZXRDb250cm9scyhcInRhYmxlXCIpLmZvckVhY2goZnVuY3Rpb24gKG9UYWJsZTogQ29udHJvbCkge1xuXHRcdFx0VGFibGVTY3JvbGxlci5zY3JvbGxUYWJsZVRvUm93KG9UYWJsZSBhcyBUYWJsZSwgc1Jvd1BhdGgpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgYSBzaWxlbnQgZm9jdXMgb24gdGhlIGZpbHRlciBmaWVsZC4gU3VwcHJlc3NlcyB0aGUgb3BlbmluZyBvZiB0aGUgdHlwZS1haGVhZCBwb3B1cC5cblx0ICogQHBhcmFtIGZpbHRlckZpZWxkIFRoZSBmaWVsZCB3aGVyZSB0aGUgZm9jdXMgc2hvdWxkIGJlIHNldCBhZnRlciB0aGUgaW5pdGlhbCBsb2FkXG5cdCAqL1xuXHRfZm9jdXNTaWxlbnQoZmlsdGVyRmllbGQ6IEZpbHRlckZpZWxkKTogdm9pZCB7XG5cdFx0Y29uc3QgZm9jdXNJbmZvID0gZmlsdGVyRmllbGQuZ2V0Rm9jdXNJbmZvKCkgYXMgeyB0YXJnZXRJbmZvOiBvYmplY3QgfTtcblx0XHRmb2N1c0luZm8udGFyZ2V0SW5mbyA9IHsgc2lsZW50OiB0cnVlIH07XG5cdFx0ZmlsdGVyRmllbGQuZm9jdXMoZm9jdXNJbmZvKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBpbml0aWFsIGZvY3VzIGluIGEgbGlzdCByZXBvcnQgYmFzZWQgb24gdGhlIFVzZXIgRXhwZXJpZW5jZSBndWlkZWxpbmVzLlxuXHQgKlxuXHQgKi9cblx0X3NldEluaXRpYWxGb2N1cygpOiB2b2lkIHtcblx0XHRjb25zdCBkeW5hbWljUGFnZSA9IHRoaXMuX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbCgpLFxuXHRcdFx0aXNIZWFkZXJFeHBhbmRlZCA9IGR5bmFtaWNQYWdlLmdldEhlYWRlckV4cGFuZGVkKCksXG5cdFx0XHRmaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCkgYXMgRmlsdGVyQmFyO1xuXHRcdGlmIChmaWx0ZXJCYXIgJiYgIXRoaXMuX2lzRmlsdGVyQmFySGlkZGVuVXNlZCgpKSB7XG5cdFx0XHQvL0VuYWJsaW5nIG1hbmRhdG9yeSBmaWx0ZXIgZmllbGRzIG1lc3NhZ2UgZGlhbG9nXG5cdFx0XHRpZiAoIWZpbHRlckJhci5nZXRTaG93TWVzc2FnZXMoKSkge1xuXHRcdFx0XHRmaWx0ZXJCYXIuc2V0U2hvd01lc3NhZ2VzKHRydWUpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGlzSGVhZGVyRXhwYW5kZWQpIHtcblx0XHRcdFx0Y29uc3QgZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkID0gZmlsdGVyQmFyLmdldEZpbHRlckl0ZW1zKCkuZmluZChmdW5jdGlvbiAob0ZpbHRlckl0ZW06IEZpbHRlckZpZWxkKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9GaWx0ZXJJdGVtLmdldFJlcXVpcmVkKCkgJiYgb0ZpbHRlckl0ZW0uZ2V0Q29uZGl0aW9ucygpLmxlbmd0aCA9PT0gMDtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdC8vRm9jdXNpbmcgb24gdGhlIGZpcnN0IGVtcHR5IG1hbmRhdG9yeSBmaWx0ZXIgZmllbGQsIG9yIG9uIHRoZSBmaXJzdCBmaWx0ZXIgZmllbGQgaWYgdGhlIHRhYmxlIGRhdGEgaXMgbG9hZGVkXG5cdFx0XHRcdC8vIERvIGEgXCJzaWxlbnRcIiBmb2N1cyBmb3IgRmlsdGVyRmllbGQsIGJ5IGFkZGluZyB0aGUgc2lsZW50IGF0dHJpYnV0ZS4gVGhlIHNpbGVudCBhdHRyaWJ1dGUgc3VwcHJlc3NlcyB0eXBlYWhlYWQgb3BlbmluZy5cblx0XHRcdFx0aWYgKGZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZCkge1xuXHRcdFx0XHRcdGlmIChmaXJzdEVtcHR5TWFuZGF0b3J5RmllbGQuaXNBPEZpbHRlckZpZWxkPihcInNhcC51aS5tZGMuRmlsdGVyRmllbGRcIikpIHtcblx0XHRcdFx0XHRcdHRoaXMuX2ZvY3VzU2lsZW50KGZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdChmaXJzdEVtcHR5TWFuZGF0b3J5RmllbGQgYXMgQ29udHJvbCkuZm9jdXMoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAodGhpcy5faXNJbml0TG9hZEVuYWJsZWQoKSAmJiBmaWx0ZXJCYXIuZ2V0RmlsdGVySXRlbXMoKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0Ly8gQWRkIGNoZWNrIGZvciBhdmFpbGFibGUgZmlsdGVySXRlbXNcblx0XHRcdFx0XHRjb25zdCBmaWVsZFRvRm9jdXMgPSBmaWx0ZXJCYXIuZ2V0RmlsdGVySXRlbXMoKVswXTtcblx0XHRcdFx0XHRpZiAoZmllbGRUb0ZvY3VzLmlzQTxGaWx0ZXJGaWVsZD4oXCJzYXAudWkubWRjLkZpbHRlckZpZWxkXCIpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLl9mb2N1c1NpbGVudChmaWVsZFRvRm9jdXMpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQoZmllbGRUb0ZvY3VzIGFzIENvbnRyb2wpLmZvY3VzKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vRm9jdXNpbmcgb24gdGhlIEdvIGJ1dHRvblxuXHRcdFx0XHRcdHRoaXMuZ2V0VmlldygpLmJ5SWQoYCR7dGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbElkKCl9LWJ0blNlYXJjaGApPy5mb2N1cygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMuX2lzSW5pdExvYWRFbmFibGVkKCkpIHtcblx0XHRcdFx0dGhpcy5fZ2V0VGFibGUoKVxuXHRcdFx0XHRcdD8uZm9jdXNSb3coMClcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBzZXR0aW5nIGluaXRpYWwgZm9jdXMgb24gdGhlIHRhYmxlIFwiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl9nZXRUYWJsZSgpXG5cdFx0XHRcdD8uZm9jdXNSb3coMClcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHNldHRpbmcgaW5pdGlhbCBmb2N1cyBvbiB0aGUgdGFibGUgXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdF9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbigpOiB7IHRpdGxlPzogc3RyaW5nOyBzdWJ0aXRsZTogc3RyaW5nOyBpbnRlbnQ6IHN0cmluZzsgaWNvbjogc3RyaW5nIH0ge1xuXHRcdGNvbnN0IG9NYW5pZmVzdEVudHJ5ID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLmFwcFwiKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dGl0bGU6IG9NYW5pZmVzdEVudHJ5LnRpdGxlLFxuXHRcdFx0c3VidGl0bGU6IG9NYW5pZmVzdEVudHJ5LnN1YlRpdGxlIHx8IFwiXCIsXG5cdFx0XHRpbnRlbnQ6IFwiXCIsXG5cdFx0XHRpY29uOiBcIlwiXG5cdFx0fTtcblx0fVxuXG5cdF9nZXRGaWx0ZXJCYXJDb250cm9sKCk6IEZpbHRlckJhciB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQodGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbElkKCkpIGFzIEZpbHRlckJhciB8IHVuZGVmaW5lZDtcblx0fVxuXG5cdF9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2woKTogRHluYW1pY1BhZ2Uge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5ieUlkKHRoaXMuX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbElkKCkpIGFzIER5bmFtaWNQYWdlO1xuXHR9XG5cblx0X2dldEFkYXB0YXRpb25GaWx0ZXJCYXJDb250cm9sKCk6IENvbnRyb2wge1xuXHRcdC8vIElmIHRoZSBhZGFwdGF0aW9uIGZpbHRlciBiYXIgaXMgcGFydCBvZiB0aGUgRE9NIHRyZWUsIHRoZSBcIkFkYXB0IEZpbHRlclwiIGRpYWxvZyBpcyBvcGVuLFxuXHRcdC8vIGFuZCB3ZSByZXR1cm4gdGhlIGFkYXB0YXRpb24gZmlsdGVyIGJhciBhcyBhbiBhY3RpdmUgY29udHJvbCAodmlzaWJsZSBmb3IgdGhlIHVzZXIpXG5cdFx0Y29uc3QgYWRhcHRhdGlvbkZpbHRlckJhciA9ICh0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCkgYXMgeyBnZXRJbmJ1aWx0RmlsdGVyPzogRnVuY3Rpb24gfSkuZ2V0SW5idWlsdEZpbHRlcj8uKCk7XG5cdFx0cmV0dXJuIGFkYXB0YXRpb25GaWx0ZXJCYXI/LmdldFBhcmVudCgpID8gYWRhcHRhdGlvbkZpbHRlckJhciA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdGFzeW5jIF9hcHBseUFwcFN0YXRlKHZpZXdJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0YXdhaXQgdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRBcHBTdGF0ZUhhbmRsZXIoKS5hcHBseUFwcFN0YXRlKHZpZXdJZCwgdGhpcy5nZXRWaWV3KCkpO1xuXHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdFx0aWYgKG9GaWx0ZXJCYXIpIHtcblx0XHRcdG9GaWx0ZXJCYXIuZW5hYmxlUmVxdWVzdHModHJ1ZSk7XG5cdFx0fSBlbHNlIGlmICh0aGlzLl9pc0ZpbHRlckJhckhpZGRlbigpKSB7XG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaGFzUGVuZGluZ0ZpbHRlcnNcIiwgZmFsc2UpO1xuXHRcdFx0aWYgKHRoaXMuX2lzTXVsdGlNb2RlKCkpIHtcblx0XHRcdFx0dGhpcy5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpLnNldENvdW50c091dERhdGVkKHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9nZXRTZWdtZW50ZWRCdXR0b24oc0NvbnRyb2w6IHN0cmluZyk6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IHNTZWdtZW50ZWRCdXR0b25JZCA9IChzQ29udHJvbCA9PT0gXCJDaGFydFwiID8gdGhpcy5nZXRDaGFydENvbnRyb2woKSA6IHRoaXMuX2dldFRhYmxlKCkpPy5kYXRhKFwic2VnbWVudGVkQnV0dG9uSWRcIik7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQoc1NlZ21lbnRlZEJ1dHRvbklkKTtcblx0fVxuXG5cdF9nZXRDb250cm9sRnJvbVBhZ2VNb2RlbFByb3BlcnR5KHNQYXRoOiBzdHJpbmcpOiBDb250cm9sIHwgTWFjcm9BUEkgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGNvbnRyb2xJZCA9IHRoaXMuX2dldFBhZ2VNb2RlbCgpPy5nZXRQcm9wZXJ0eShzUGF0aCk7XG5cdFx0cmV0dXJuIGNvbnRyb2xJZCA/ICh0aGlzLmdldFZpZXcoKS5ieUlkKGNvbnRyb2xJZCkgYXMgQ29udHJvbCkgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHRfZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sSWQoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0UGFnZU1vZGVsKCk/LmdldFByb3BlcnR5KFwiL2R5bmFtaWNMaXN0UmVwb3J0SWRcIikgfHwgXCJcIjtcblx0fVxuXG5cdF9nZXRGaWx0ZXJCYXJDb250cm9sSWQoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0UGFnZU1vZGVsKCk/LmdldFByb3BlcnR5KFwiL2ZpbHRlckJhcklkXCIpIHx8IFwiXCI7XG5cdH1cblxuXHRnZXRDaGFydENvbnRyb2woKTogQ29udHJvbCB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldENvbnRyb2xGcm9tUGFnZU1vZGVsUHJvcGVydHkoXCIvc2luZ2xlQ2hhcnRJZFwiKSBhcyBDaGFydFR5cGU7XG5cdH1cblxuXHRfZ2V0VmlzdWFsRmlsdGVyQmFyQ29udHJvbCgpOiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBzVmlzdWFsRmlsdGVyQmFySWQgPSBTdGFibGVJZEhlbHBlci5nZW5lcmF0ZShbXCJ2aXN1YWxGaWx0ZXJcIiwgdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbElkKCldKTtcblx0XHRyZXR1cm4gc1Zpc3VhbEZpbHRlckJhcklkID8gdGhpcy5nZXRWaWV3KCkuYnlJZChzVmlzdWFsRmlsdGVyQmFySWQpIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0X2dldEZpbHRlckJhclZhcmlhbnRDb250cm9sKCk6IFZhcmlhbnRNYW5hZ2VtZW50IHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0Q29udHJvbEZyb21QYWdlTW9kZWxQcm9wZXJ0eShcIi92YXJpYW50TWFuYWdlbWVudC9pZFwiKSBhcyBWYXJpYW50TWFuYWdlbWVudDtcblx0fVxuXG5cdF9nZXRNdWx0aU1vZGVDb250cm9sKCk6IE11bHRpcGxlTW9kZUNvbnRyb2wge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5ieUlkKFwiZmU6OlRhYk11bHRpcGxlTW9kZTo6Q29udHJvbFwiKSBhcyBNdWx0aXBsZU1vZGVDb250cm9sO1xuXHR9XG5cblx0X2dldEljb25UYWJCYXIoKTogSWNvblRhYkJhciB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQoXCJmZTo6VGFiTXVsdGlwbGVNb2RlXCIpIGFzIEljb25UYWJCYXI7XG5cdH1cblxuXHRfZ2V0VGFibGUoKTogVGFibGUgfCB1bmRlZmluZWQge1xuXHRcdGlmICh0aGlzLl9pc011bHRpTW9kZSgpKSB7XG5cdFx0XHRjb25zdCBvQ29udHJvbCA9IHRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKT8uZ2V0U2VsZWN0ZWRJbm5lckNvbnRyb2woKT8uY29udGVudDtcblx0XHRcdHJldHVybiBvQ29udHJvbD8uaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSA/IChvQ29udHJvbCBhcyBUYWJsZSkgOiB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0aGlzLl9nZXRDb250cm9sRnJvbVBhZ2VNb2RlbFByb3BlcnR5KFwiL3NpbmdsZVRhYmxlSWRcIikgYXMgVGFibGUgfCB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cblx0X2dldENvbnRyb2xzKHNLZXk/OiBzdHJpbmcpOiBDb250cm9sW10ge1xuXHRcdGlmICh0aGlzLl9pc011bHRpTW9kZSgpKSB7XG5cdFx0XHRjb25zdCBhQ29udHJvbHM6IENvbnRyb2xbXSA9IFtdO1xuXHRcdFx0Y29uc3Qgb1RhYk11bHRpTW9kZSA9IHRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKS5jb250ZW50O1xuXHRcdFx0b1RhYk11bHRpTW9kZS5nZXRJdGVtcygpLmZvckVhY2goKG9JdGVtOiB1bmtub3duKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9Db250cm9sID0gdGhpcy5nZXRWaWV3KCkuYnlJZCgob0l0ZW0gYXMgVGFiQ29udGFpbmVySXRlbSkuZ2V0S2V5KCkpIGFzIENvbnRyb2w7XG5cdFx0XHRcdGlmIChvQ29udHJvbCAmJiBzS2V5KSB7XG5cdFx0XHRcdFx0aWYgKChvSXRlbSBhcyBUYWJDb250YWluZXJJdGVtKS5nZXRLZXkoKS5pbmNsdWRlcyhgZmU6OiR7c0tleX1gKSkge1xuXHRcdFx0XHRcdFx0YUNvbnRyb2xzLnB1c2gob0NvbnRyb2wpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChvQ29udHJvbCAhPT0gdW5kZWZpbmVkICYmIG9Db250cm9sICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0YUNvbnRyb2xzLnB1c2gob0NvbnRyb2wpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBhQ29udHJvbHM7XG5cdFx0fSBlbHNlIGlmIChzS2V5ID09PSBcIkNoYXJ0XCIpIHtcblx0XHRcdGNvbnN0IG9DaGFydCA9IHRoaXMuZ2V0Q2hhcnRDb250cm9sKCk7XG5cdFx0XHRyZXR1cm4gb0NoYXJ0ID8gW29DaGFydF0gOiBbXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3Qgb1RhYmxlID0gdGhpcy5fZ2V0VGFibGUoKTtcblx0XHRcdHJldHVybiBvVGFibGUgPyBbb1RhYmxlXSA6IFtdO1xuXHRcdH1cblx0fVxuXG5cdF9nZXREZWZhdWx0UGF0aCgpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGRlZmF1bHRQYXRoID0gTGlzdFJlcG9ydFRlbXBsYXRpbmcuZ2V0RGVmYXVsdFBhdGgodGhpcy5fZ2V0UGFnZU1vZGVsKCk/LmdldFByb3BlcnR5KFwiL3ZpZXdzXCIpIHx8IFtdKTtcblx0XHRzd2l0Y2ggKGRlZmF1bHRQYXRoKSB7XG5cdFx0XHRjYXNlIFwicHJpbWFyeVwiOlxuXHRcdFx0XHRyZXR1cm4gVGVtcGxhdGVDb250ZW50Vmlldy5DaGFydDtcblx0XHRcdGNhc2UgXCJzZWNvbmRhcnlcIjpcblx0XHRcdFx0cmV0dXJuIFRlbXBsYXRlQ29udGVudFZpZXcuVGFibGU7XG5cdFx0XHRjYXNlIFwiYm90aFwiOlxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIFRlbXBsYXRlQ29udGVudFZpZXcuSHlicmlkO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8ga25vdyBpZiBMaXN0UmVwb3J0IGlzIGNvbmZpZ3VyZWQgd2l0aCBNdWx0aXBsZSBUYWJsZSBtb2RlLlxuXHQgKiBAcmV0dXJucyBJcyBNdWx0aXBsZSBUYWJsZSBtb2RlIHNldD9cblx0ICovXG5cdF9pc011bHRpTW9kZSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gISF0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0UHJvcGVydHkoXCIvbXVsdGlWaWV3c0NvbnRyb2xcIik7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGtub3cgaWYgTGlzdFJlcG9ydCBpcyBjb25maWd1cmVkIHRvIGxvYWQgZGF0YSBhdCBzdGFydCB1cC5cblx0ICogQHJldHVybnMgSXMgSW5pdExvYWQgZW5hYmxlZD9cblx0ICovXG5cdF9pc0luaXRMb2FkRW5hYmxlZCgpOiBib29sZWFuIHtcblx0XHRjb25zdCBpbml0TG9hZE1vZGUgPSB0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpLmluaXRpYWxMb2FkO1xuXHRcdHJldHVybiBpbml0TG9hZE1vZGUgPT09IEluaXRpYWxMb2FkTW9kZS5FbmFibGVkO1xuXHR9XG5cblx0X2hhc011bHRpVmlzdWFsaXphdGlvbnMoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldFBhZ2VNb2RlbCgpPy5nZXRQcm9wZXJ0eShcIi9oYXNNdWx0aVZpc3VhbGl6YXRpb25zXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBzdXNwZW5kIHNlYXJjaCBvbiB0aGUgZmlsdGVyIGJhci4gVGhlIGluaXRpYWwgbG9hZGluZyBvZiBkYXRhIGlzIGRpc2FibGVkIGJhc2VkIG9uIHRoZSBtYW5pZmVzdCBjb25maWd1cmF0aW9uIEluaXRMb2FkIC0gRGlzYWJsZWQvQXV0by5cblx0ICogSXQgaXMgZW5hYmxlZCBsYXRlciB3aGVuIHRoZSB2aWV3IHN0YXRlIGlzIHNldCwgd2hlbiBpdCBpcyBwb3NzaWJsZSB0byByZWFsaXplIGlmIHRoZXJlIGFyZSBkZWZhdWx0IGZpbHRlcnMuXG5cdCAqL1xuXHRfZGlzYWJsZUluaXRMb2FkKCk6IHZvaWQge1xuXHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHQvLyBjaGVjayBmb3IgZmlsdGVyIGJhciBoaWRkZW5cblx0XHRpZiAoZmlsdGVyQmFyKSB7XG5cdFx0XHRmaWx0ZXJCYXIuZW5hYmxlUmVxdWVzdHMoZmFsc2UpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgY2FsbGVkIGJ5IGZsZXggdG8gZGV0ZXJtaW5lIGlmIHRoZSBhcHBseUF1dG9tYXRpY2FsbHkgc2V0dGluZyBvbiB0aGUgdmFyaWFudCBpcyB2YWxpZC5cblx0ICogQ2FsbGVkIG9ubHkgZm9yIFN0YW5kYXJkIFZhcmlhbnQgYW5kIG9ubHkgd2hlbiB0aGVyZSBpcyBkaXNwbGF5IHRleHQgc2V0IGZvciBhcHBseUF1dG9tYXRpY2FsbHkgKEZFIG9ubHkgc2V0cyBpdCBmb3IgQXV0bykuXG5cdCAqIEByZXR1cm5zIEJvb2xlYW4gdHJ1ZSBpZiBkYXRhIHNob3VsZCBiZSBsb2FkZWQgYXV0b21hdGljYWxseSwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRfYXBwbHlBdXRvbWF0aWNhbGx5T25TdGFuZGFyZFZhcmlhbnQoKTogYm9vbGVhbiB7XG5cdFx0Ly8gV2UgYWx3YXlzIHJldHVybiBmYWxzZSBhbmQgdGFrZSBjYXJlIG9mIGl0IHdoZW4gdmlldyBzdGF0ZSBpcyBzZXRcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ29uZmlndXJlIHRoZSBzZXR0aW5ncyBmb3IgaW5pdGlhbCBsb2FkIGJhc2VkIG9uXG5cdCAqIC0gbWFuaWZlc3Qgc2V0dGluZyBpbml0TG9hZCAtIEVuYWJsZWQvRGlzYWJsZWQvQXV0b1xuXHQgKiAtIHVzZXIncyBzZXR0aW5nIG9mIGFwcGx5QXV0b21hdGljYWxseSBvbiB2YXJpYW50XG5cdCAqIC0gaWYgdGhlcmUgYXJlIGRlZmF1bHQgZmlsdGVyc1xuXHQgKiBXZSBkaXNhYmxlIHRoZSBmaWx0ZXIgYmFyIHNlYXJjaCBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmFibGUgaXQgd2hlbiB2aWV3IHN0YXRlIGlzIHNldC5cblx0ICovXG5cdF9zZXRJbml0TG9hZCgpOiB2b2lkIHtcblx0XHQvLyBpZiBpbml0TG9hZCBpcyBEaXNhYmxlZCBvciBBdXRvLCBzd2l0Y2ggb2ZmIGZpbHRlciBiYXIgc2VhcmNoIHRlbXBvcmFyaWx5IGF0IHN0YXJ0XG5cdFx0aWYgKCF0aGlzLl9pc0luaXRMb2FkRW5hYmxlZCgpKSB7XG5cdFx0XHR0aGlzLl9kaXNhYmxlSW5pdExvYWQoKTtcblx0XHR9XG5cdFx0Ly8gc2V0IGhvb2sgZm9yIGZsZXggZm9yIHdoZW4gc3RhbmRhcmQgdmFyaWFudCBpcyBzZXQgKGF0IHN0YXJ0IG9yIGJ5IHVzZXIgYXQgcnVudGltZSlcblx0XHQvLyByZXF1aXJlZCB0byBvdmVycmlkZSB0aGUgdXNlciBzZXR0aW5nICdhcHBseSBhdXRvbWF0aWNhbGx5JyBiZWhhdmlvdXIgaWYgdGhlcmUgYXJlIG5vIGZpbHRlcnNcblx0XHRjb25zdCB2YXJpYW50TWFuYWdlbWVudElkID0gTGlzdFJlcG9ydFRlbXBsYXRpbmcuZ2V0VmFyaWFudEJhY2tSZWZlcmVuY2UoXG5cdFx0XHR0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpLFxuXHRcdFx0dGhpcy5fZ2V0UGFnZU1vZGVsKCk/LmdldERhdGEoKSBhcyBMaXN0UmVwb3J0RGVmaW5pdGlvblxuXHRcdCk7XG5cdFx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQgPSB2YXJpYW50TWFuYWdlbWVudElkICYmICh0aGlzLmdldFZpZXcoKS5ieUlkKHZhcmlhbnRNYW5hZ2VtZW50SWQpIGFzIFZhcmlhbnRNYW5hZ2VtZW50KTtcblx0XHRpZiAodmFyaWFudE1hbmFnZW1lbnQpIHtcblx0XHRcdChcblx0XHRcdFx0dmFyaWFudE1hbmFnZW1lbnQgYXMgeyByZWdpc3RlckFwcGx5QXV0b21hdGljYWxseU9uU3RhbmRhcmRWYXJpYW50PzogRnVuY3Rpb24gfVxuXHRcdFx0KT8ucmVnaXN0ZXJBcHBseUF1dG9tYXRpY2FsbHlPblN0YW5kYXJkVmFyaWFudD8uKHRoaXMuX2FwcGx5QXV0b21hdGljYWxseU9uU3RhbmRhcmRWYXJpYW50LmJpbmQodGhpcykpO1xuXHRcdH1cblx0fVxuXG5cdF9zZXRTaGFyZU1vZGVsKCk6IHZvaWQge1xuXHRcdC8vIFRPRE86IGRlYWN0aXZhdGVkIGZvciBub3cgLSBjdXJyZW50bHkgdGhlcmUgaXMgbm8gX3RlbXBsUHJpdiBhbnltb3JlLCB0byBiZSBkaXNjdXNzZWRcblx0XHQvLyB0aGlzIG1ldGhvZCBpcyBjdXJyZW50bHkgbm90IGNhbGxlZCBhbnltb3JlIGZyb20gdGhlIGluaXQgbWV0aG9kXG5cblx0XHRjb25zdCBmbkdldFVzZXIgPSBPYmplY3RQYXRoLmdldChcInNhcC51c2hlbGwuQ29udGFpbmVyLmdldFVzZXJcIik7XG5cdFx0Ly92YXIgb01hbmlmZXN0ID0gdGhpcy5nZXRPd25lckNvbXBvbmVudCgpLmdldEFwcENvbXBvbmVudCgpLmdldE1ldGFkYXRhKCkuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC51aVwiKTtcblx0XHQvL3ZhciBzQm9va21hcmtJY29uID0gKG9NYW5pZmVzdCAmJiBvTWFuaWZlc3QuaWNvbnMgJiYgb01hbmlmZXN0Lmljb25zLmljb24pIHx8IFwiXCI7XG5cblx0XHQvL3NoYXJlTW9kZWw6IEhvbGRzIGFsbCB0aGUgc2hhcmluZyByZWxldmFudCBpbmZvcm1hdGlvbiBhbmQgaW5mbyB1c2VkIGluIFhNTCB2aWV3XG5cdFx0Y29uc3Qgb1NoYXJlSW5mbyA9IHtcblx0XHRcdGJvb2ttYXJrVGl0bGU6IGRvY3VtZW50LnRpdGxlLCAvL1RvIG5hbWUgdGhlIGJvb2ttYXJrIGFjY29yZGluZyB0byB0aGUgYXBwIHRpdGxlLlxuXHRcdFx0Ym9va21hcmtDdXN0b21Vcmw6IGZ1bmN0aW9uICgpOiBzdHJpbmcge1xuXHRcdFx0XHRjb25zdCBzSGFzaCA9IGhhc2hlci5nZXRIYXNoKCk7XG5cdFx0XHRcdHJldHVybiBzSGFzaCA/IGAjJHtzSGFzaH1gIDogd2luZG93LmxvY2F0aW9uLmhyZWY7XG5cdFx0XHR9LFxuXHRcdFx0Lypcblx0XHRcdFx0XHRcdFx0VG8gYmUgYWN0aXZhdGVkIG9uY2UgdGhlIEZMUCBzaG93cyB0aGUgY291bnQgLSBzZWUgY29tbWVudCBhYm92ZVxuXHRcdFx0XHRcdFx0XHRib29rbWFya1NlcnZpY2VVcmw6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdC8vdmFyIG9UYWJsZSA9IG9UYWJsZS5nZXRJbm5lclRhYmxlKCk7IG9UYWJsZSBpcyBhbHJlYWR5IHRoZSBzYXAuZmUgdGFibGUgKGJ1dCBub3QgdGhlIGlubmVyIG9uZSlcblx0XHRcdFx0XHRcdFx0XHQvLyB3ZSBzaG91bGQgdXNlIHRhYmxlLmdldExpc3RCaW5kaW5nSW5mbyBpbnN0ZWFkIG9mIHRoZSBiaW5kaW5nXG5cdFx0XHRcdFx0XHRcdFx0dmFyIG9CaW5kaW5nID0gb1RhYmxlLmdldEJpbmRpbmcoXCJyb3dzXCIpIHx8IG9UYWJsZS5nZXRCaW5kaW5nKFwiaXRlbXNcIik7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG9CaW5kaW5nID8gZm5HZXREb3dubG9hZFVybChvQmluZGluZykgOiBcIlwiO1xuXHRcdFx0XHRcdFx0XHR9LCovXG5cdFx0XHRpc1NoYXJlSW5KYW1BY3RpdmU6ICEhZm5HZXRVc2VyICYmIGZuR2V0VXNlcigpLmlzSmFtQWN0aXZlKClcblx0XHR9O1xuXG5cdFx0Y29uc3Qgb1RlbXBsYXRlUHJpdmF0ZU1vZGVsID0gdGhpcy5nZXRPd25lckNvbXBvbmVudCgpLmdldE1vZGVsKFwiX3RlbXBsUHJpdlwiKSBhcyBKU09OTW9kZWw7XG5cdFx0b1RlbXBsYXRlUHJpdmF0ZU1vZGVsLnNldFByb3BlcnR5KFwiL2xpc3RSZXBvcnQvc2hhcmVcIiwgb1NoYXJlSW5mbyk7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHVwZGF0ZSB0aGUgbG9jYWwgVUkgbW9kZWwgb2YgdGhlIHBhZ2Ugd2l0aCB0aGUgZmllbGRzIHRoYXQgYXJlIG5vdCBhcHBsaWNhYmxlIHRvIHRoZSBmaWx0ZXIgYmFyICh0aGlzIGlzIHNwZWNpZmljIHRvIHRoZSBBTFAgc2NlbmFyaW8pLlxuXHQgKiBAcGFyYW0gb0ludGVybmFsTW9kZWxDb250ZXh0IFRoZSBpbnRlcm5hbCBtb2RlbCBjb250ZXh0XG5cdCAqIEBwYXJhbSBvRmlsdGVyQmFyIE1EQyBmaWx0ZXIgYmFyXG5cdCAqL1xuXHRfdXBkYXRlQUxQTm90QXBwbGljYWJsZUZpZWxkcyhvSW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0LCBvRmlsdGVyQmFyOiBGaWx0ZXJCYXIpOiB2b2lkIHtcblx0XHRjb25zdCBtQ2FjaGU6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xuXHRcdGNvbnN0IGlnbm9yZWRGaWVsZHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9LFxuXHRcdFx0YVRhYmxlcyA9IHRoaXMuX2dldENvbnRyb2xzKFwidGFibGVcIiksXG5cdFx0XHRhQ2hhcnRzID0gdGhpcy5fZ2V0Q29udHJvbHMoXCJDaGFydFwiKTtcblxuXHRcdGlmICghYVRhYmxlcy5sZW5ndGggfHwgIWFDaGFydHMubGVuZ3RoKSB7XG5cdFx0XHQvLyBJZiB0aGVyZSdzIG5vdCBhIHRhYmxlIGFuZCBhIGNoYXJ0LCB3ZSdyZSBub3QgaW4gdGhlIEFMUCBjYXNlXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRm9yIHRoZSBtb21lbnQsIHRoZXJlJ3Mgbm90aGluZyBmb3IgdGFibGVzLi4uXG5cdFx0YUNoYXJ0cy5mb3JFYWNoKGZ1bmN0aW9uIChvQ2hhcnQpIHtcblx0XHRcdGNvbnN0IHNDaGFydEVudGl0eVBhdGggPSBvQ2hhcnQuZGF0YShcInRhcmdldENvbGxlY3Rpb25QYXRoXCIpLFxuXHRcdFx0XHRzQ2hhcnRFbnRpdHlTZXQgPSBzQ2hhcnRFbnRpdHlQYXRoLnNsaWNlKDEpLFxuXHRcdFx0XHRzQ2FjaGVLZXkgPSBgJHtzQ2hhcnRFbnRpdHlTZXR9Q2hhcnRgO1xuXHRcdFx0aWYgKCFtQ2FjaGVbc0NhY2hlS2V5XSkge1xuXHRcdFx0XHRtQ2FjaGVbc0NhY2hlS2V5XSA9IEZpbHRlclV0aWxzLmdldE5vdEFwcGxpY2FibGVGaWx0ZXJzKG9GaWx0ZXJCYXIsIG9DaGFydCk7XG5cdFx0XHR9XG5cdFx0XHRpZ25vcmVkRmllbGRzW3NDYWNoZUtleV0gPSBtQ2FjaGVbc0NhY2hlS2V5XTtcblx0XHR9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJjb250cm9scy9pZ25vcmVkRmllbGRzXCIsIGlnbm9yZWRGaWVsZHMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFByb3ZpZGVzIHRoZSBzZXR0aW5nIHdoZXRoZXIgRmlsdGVyQmFyIGlzIGhpZGRlbiBiYXNlZCBvbiB0aGUgbWFuaWZlc3Qgc2V0dGluZyAnaGlkZUZpbHRlckJhcicuXG5cdCAqIFNob3VsZCBiZSB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggX2lzRmlsdGVyQmFySGlkZGVuVXNlZCBhcyBpdCBtYXkgaGF2ZSBvdmVycmlkZGVuIHRoaXMgc2V0dGluZy5cblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgRmlsdGVyQmFyIGlzIGhpZGRlbiwgZmFsc2UgaWYgdW5rbm93blxuXHQgKi9cblx0X2lzRmlsdGVyQmFySGlkZGVuKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpLmhpZGVGaWx0ZXJCYXIgfHwgZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogUHJvdmlkZXMgdGhlIHNldHRpbmcgd2hldGhlciBGaWx0ZXJCYXIgaXMgaGlkZGVuIGJ1dCBzdGlsbCBleGlzdHMgYmFzZWQgb24gdGhlIG1hbmlmZXN0IHNldHRpbmcgJ3VzZUhpZGRlbkZpbHRlckJhcicuXG5cdCAqIFNob3VsZCBiZSB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggX2lzRmlsdGVyQmFySGlkZGVuIGFzIGl0IGNhbiBhbHNvIGhpZGUgdGhlIEZpbHRlckJhci5cblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgRmlsdGVyQmFyIGlzIGhpZGRlbiwgZmFsc2UgaWYgdW5rbm93blxuXHQgKi9cblx0X2lzRmlsdGVyQmFySGlkZGVuVXNlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS51c2VIaWRkZW5GaWx0ZXJCYXIgfHwgZmFsc2U7XG5cdH1cblxuXHRfZ2V0QXBwbHlBdXRvbWF0aWNhbGx5T25WYXJpYW50KHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudCwga2V5OiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsKTogQm9vbGVhbiB7XG5cdFx0aWYgKCF2YXJpYW50TWFuYWdlbWVudCB8fCAha2V5KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGNvbnN0IHZhcmlhbnRzID0gdmFyaWFudE1hbmFnZW1lbnQuZ2V0VmFyaWFudHMoKTtcblx0XHRjb25zdCBjdXJyZW50VmFyaWFudCA9IHZhcmlhbnRzLmZpbmQoZnVuY3Rpb24gKHZhcmlhbnQpIHtcblx0XHRcdHJldHVybiB2YXJpYW50ICYmIHZhcmlhbnQuZ2V0S2V5KCkgPT09IGtleTtcblx0XHR9KTtcblx0XHRyZXR1cm4gKGN1cnJlbnRWYXJpYW50ICYmIGN1cnJlbnRWYXJpYW50LmdldFByb3BlcnR5KFwiZXhlY3V0ZU9uU2VsZWN0XCIpKSB8fCBmYWxzZTtcblx0fVxuXG5cdF9zaG91bGRBdXRvVHJpZ2dlclNlYXJjaChvVk06IFZhcmlhbnRNYW5hZ2VtZW50IHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuXHRcdGlmIChcblx0XHRcdHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkuaW5pdGlhbExvYWQgPT09IEluaXRpYWxMb2FkTW9kZS5BdXRvICYmXG5cdFx0XHQoIW9WTSB8fCBvVk0uZ2V0U3RhbmRhcmRWYXJpYW50S2V5KCkgPT09IG9WTS5nZXRDdXJyZW50VmFyaWFudEtleSgpKVxuXHRcdCkge1xuXHRcdFx0Y29uc3Qgb0ZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRcdGlmIChvRmlsdGVyQmFyKSB7XG5cdFx0XHRcdGNvbnN0IG9Db25kaXRpb25zID0gb0ZpbHRlckJhci5nZXRDb25kaXRpb25zKCk7XG5cdFx0XHRcdGZvciAoY29uc3Qgc0tleSBpbiBvQ29uZGl0aW9ucykge1xuXHRcdFx0XHRcdC8vIGlnbm9yZSBmaWx0ZXJzIHN0YXJ0aW5nIHdpdGggJCAoZS5nLiAkc2VhcmNoLCAkZWRpdFN0YXRlKVxuXHRcdFx0XHRcdGlmIChvVk0gJiYgIXNLZXkuc3RhcnRzV2l0aChcIiRcIikgJiYgQXJyYXkuaXNBcnJheShvQ29uZGl0aW9uc1tzS2V5XSkgJiYgb0NvbmRpdGlvbnNbc0tleV0ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHQvLyBsb2FkIGRhdGEgYXMgcGVyIHVzZXIncyBzZXR0aW5nIG9mIGFwcGx5QXV0b21hdGljYWxseSBvbiB0aGUgdmFyaWFudFxuXHRcdFx0XHRcdFx0Y29uc3Qgc3RhbmRhcmRWYXJpYW50ID0gb1ZNLmdldFZhcmlhbnRzKCkuZmluZCgodmFyaWFudCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdmFyaWFudC5nZXRLZXkoKSA9PT0gb1ZNLmdldEN1cnJlbnRWYXJpYW50S2V5KCk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdHJldHVybiBzdGFuZGFyZFZhcmlhbnQgJiYgc3RhbmRhcmRWYXJpYW50LmdldEV4ZWN1dGVPblNlbGVjdCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRfdXBkYXRlVGFibGUob1RhYmxlOiBUYWJsZSk6IHZvaWQge1xuXHRcdGlmICghb1RhYmxlLmlzVGFibGVCb3VuZCgpIHx8IHRoaXMuaGFzUGVuZGluZ0NoYXJ0Q2hhbmdlcykge1xuXHRcdFx0b1RhYmxlLnJlYmluZCgpO1xuXHRcdFx0dGhpcy5oYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0X3VwZGF0ZUNoYXJ0KG9DaGFydDogQ2hhcnQpOiB2b2lkIHtcblx0XHRjb25zdCBvSW5uZXJDaGFydCA9IChvQ2hhcnQuZ2V0Q29udHJvbERlbGVnYXRlKCkgYXMgdHlwZW9mIENoYXJ0RGVsZWdhdGUpLl9nZXRDaGFydChvQ2hhcnQpO1xuXHRcdGlmICghKG9Jbm5lckNoYXJ0ICYmIG9Jbm5lckNoYXJ0LmlzQm91bmQoXCJkYXRhXCIpKSB8fCB0aGlzLmhhc1BlbmRpbmdUYWJsZUNoYW5nZXMpIHtcblx0XHRcdChvQ2hhcnQuZ2V0Q29udHJvbERlbGVnYXRlKCkgYXMgdHlwZW9mIENoYXJ0RGVsZWdhdGUpLnJlYmluZChvQ2hhcnQsIG9Jbm5lckNoYXJ0LmdldEJpbmRpbmdJbmZvKFwiZGF0YVwiKSk7XG5cdFx0XHR0aGlzLmhhc1BlbmRpbmdUYWJsZUNoYW5nZXMgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmaWx0ZXIgdG9nZ2xlIGJ1dHRvbi5cblx0ICogQHBhcmFtIGJ1dHRvblZpc2libGUgRmlsdGVyIHRvZ2dsZSBidXR0b24gdmlzaWJpbGl0eVxuXHQgKi9cblx0c2V0RmlsdGVyVG9nZ2xlVmlzaWJpbGl0eShidXR0b25WaXNpYmxlOiBib29sZWFuKTogdm9pZCB7XG5cdFx0Y29uc3QgZmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdGZpbHRlckJhcj8uZ2V0U2VnbWVudGVkQnV0dG9uKCk/LnNldFZpc2libGUoYnV0dG9uVmlzaWJsZSk7XG5cdH1cblxuXHRoYW5kbGVycyA9IHtcblx0XHRvbklubGluZUVkaXRTYXZlKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyKTogdm9pZCB7XG5cdFx0XHR0aGlzLmlubGluZUVkaXRGbG93LmlubGluZUVkaXRTYXZlKCk7XG5cdFx0fSxcblx0XHRvbkZpbHRlclNlYXJjaCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0Y29uc3QgZmlsdGVyQmFyQVBJID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpIS5nZXRQYXJlbnQoKSBhcyBGaWx0ZXJCYXJBUEk7XG5cdFx0XHRmaWx0ZXJCYXJBUEkudHJpZ2dlclNlYXJjaCgpO1xuXHRcdH0sXG5cdFx0b25GaWx0ZXJzQ2hhbmdlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgb0V2ZW50OiBGaWx0ZXJCYXJCYXNlJEZpbHRlcnNDaGFuZ2VkRXZlbnQpOiB2b2lkIHtcblx0XHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdFx0XHRpZiAob0ZpbHRlckJhcikge1xuXHRcdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHQvLyBQZW5kaW5nIGZpbHRlcnMgaW50byBGaWx0ZXJCYXIgdG8gYmUgdXNlZCBmb3IgY3VzdG9tIHZpZXdzXG5cdFx0XHRcdHRoaXMub25QZW5kaW5nRmlsdGVycygpO1xuXG5cdFx0XHRcdGlmIChvSW50ZXJuYWxNb2RlbENvbnRleHQgJiYgb0V2ZW50LmdldFBhcmFtZXRlcihcImNvbmRpdGlvbnNCYXNlZFwiKSkge1xuXHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImhhc1BlbmRpbmdGaWx0ZXJzXCIsIHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvSW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRcdFx0XHR0aGlzLl9zdG9yZUZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQob0ZpbHRlckJhciwgb0ludGVybmFsTW9kZWxDb250ZXh0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0b25WYXJpYW50U2VsZWN0ZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIG9FdmVudDogVmFyaWFudE1hbmFnZW1lbnQkU2VsZWN0RXZlbnQpOiB2b2lkIHtcblx0XHRcdGNvbnN0IHBhcmFtZXRlcnMgPSAob0V2ZW50IGFzIFVJNUV2ZW50KS5nZXRQYXJhbWV0ZXJzKCkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cdFx0XHRjb25zdCB2YXJpYW50TWFuYWdlbWVudCA9IHBhcmFtZXRlcnMub3JpZ2luYWxTb3VyY2UgYXMgVmFyaWFudE1hbmFnZW1lbnQ7XG5cdFx0XHRjb25zdCBjdXJyZW50VmFyaWFudEtleSA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJrZXlcIik7XG5cdFx0XHRjb25zdCBtdWx0aU1vZGVDb250cm9sID0gdGhpcy5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpO1xuXG5cdFx0XHRpZiAobXVsdGlNb2RlQ29udHJvbCAmJiAhdmFyaWFudE1hbmFnZW1lbnQ/LmdldFBhcmVudCgpPy5pc0EoXCJzYXAudWkubWRjLkFjdGlvblRvb2xiYXJcIikpIHtcblx0XHRcdFx0Ly9Ob3QgYSBDb250cm9sIFZhcmlhbnRcblx0XHRcdFx0bXVsdGlNb2RlQ29udHJvbD8uaW52YWxpZGF0ZUNvbnRlbnQoKTtcblx0XHRcdFx0bXVsdGlNb2RlQ29udHJvbD8uc2V0RnJlZXplQ29udGVudCh0cnVlKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gc2V0VGltZW91dCBjYXVzZSB0aGUgdmFyaWFudCBuZWVkcyB0byBiZSBhcHBsaWVkIGJlZm9yZSBqdWRnaW5nIHRoZSBhdXRvIHNlYXJjaCBvciB1cGRhdGluZyB0aGUgYXBwIHN0YXRlXG5cdFx0XHRzZXRUaW1lb3V0KCgpOiB2b2lkID0+IHtcblx0XHRcdFx0Y29uc3QgZmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdFx0XHRjb25zdCBkeW5hbWljUGFnZSA9IHRoaXMuX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbCgpO1xuXHRcdFx0XHRjb25zdCBmaXJzdEVtcHR5TWFuZGF0b3J5RmllbGQgPSBmaWx0ZXJCYXI/LmdldEZpbHRlckl0ZW1zKCkuZmluZChmdW5jdGlvbiAoZmlsdGVySXRlbSkge1xuXHRcdFx0XHRcdHJldHVybiBmaWx0ZXJJdGVtLmdldFJlcXVpcmVkKCkgJiYgZmlsdGVySXRlbS5nZXRDb25kaXRpb25zKCkubGVuZ3RoID09PSAwO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKGZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZCkge1xuXHRcdFx0XHRcdGR5bmFtaWNQYWdlLnNldEhlYWRlckV4cGFuZGVkKHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0aGlzLl9zaG91bGRBdXRvVHJpZ2dlclNlYXJjaCh2YXJpYW50TWFuYWdlbWVudCkpIHtcblx0XHRcdFx0XHQvLyB0aGUgYXBwIHN0YXRlIHdpbGwgYmUgdXBkYXRlZCB2aWEgb25TZWFyY2ggaGFuZGxlclxuXHRcdFx0XHRcdGNvbnN0IGZpbHRlckJhckFQSSA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKSEuZ2V0UGFyZW50KCkgYXMgRmlsdGVyQmFyQVBJO1xuXHRcdFx0XHRcdGZpbHRlckJhckFQSS50cmlnZ2VyU2VhcmNoKCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoIXRoaXMuX2dldEFwcGx5QXV0b21hdGljYWxseU9uVmFyaWFudCh2YXJpYW50TWFuYWdlbWVudCwgY3VycmVudFZhcmlhbnRLZXkpKSB7XG5cdFx0XHRcdFx0bXVsdGlNb2RlQ29udHJvbD8uc2V0RnJlZXplQ29udGVudChmYWxzZSk7XG5cdFx0XHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0XHRcdGR5bmFtaWNQYWdlLnNldEhlYWRlckV4cGFuZGVkKHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LCAwKTtcblx0XHR9LFxuXHRcdG9uVmFyaWFudFNhdmVkKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyKTogdm9pZCB7XG5cdFx0XHQvL1RPRE86IFNob3VsZCByZW1vdmUgdGhpcyBzZXRUaW1lT3V0IG9uY2UgVmFyaWFudCBNYW5hZ2VtZW50IHByb3ZpZGVzIGFuIGFwaSB0byBmZXRjaCB0aGUgY3VycmVudCB2YXJpYW50IGtleSBvbiBzYXZlISEhXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0fSwgMTAwMCk7XG5cdFx0fSxcblx0XHRvblNlYXJjaCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0Y29uc3Qgb0ZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKSBhcyBGaWx0ZXJCYXI7IC8vIG9uc2VhcmNoIGlzIGNhbGxlZCBvbmx5IGlmIHRoZSBmaWx0ZXJiYXIgZXhpc3RzXG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0Y29uc3Qgb01kY0NoYXJ0ID0gdGhpcy5nZXRDaGFydENvbnRyb2woKTtcblx0XHRcdGNvbnN0IGJIaWRlRHJhZnQgPSBGaWx0ZXJVdGlscy5nZXRFZGl0U3RhdGVJc0hpZGVEcmFmdChvRmlsdGVyQmFyLmdldENvbmRpdGlvbnMoKSk7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoYXNQZW5kaW5nRmlsdGVyc1wiLCBmYWxzZSk7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoaWRlRHJhZnRJbmZvXCIsIGJIaWRlRHJhZnQpO1xuXHRcdFx0Y29uc3QgZHluYW1pY1BhZ2UgPSB0aGlzLl9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2woKTtcblx0XHRcdGlmICghdGhpcy5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpKSB7XG5cdFx0XHRcdHRoaXMuX3VwZGF0ZUFMUE5vdEFwcGxpY2FibGVGaWVsZHMob0ludGVybmFsTW9kZWxDb250ZXh0LCBvRmlsdGVyQmFyKTtcblx0XHRcdH1cblx0XHRcdGlmIChvTWRjQ2hhcnQpIHtcblx0XHRcdFx0Ly8gZGlzYWJsZSBib3VuZCBhY3Rpb25zIFRPRE86IHRoaXMgY2xlYXJzIGV2ZXJ5dGhpbmcgZm9yIHRoZSBjaGFydD9cblx0XHRcdFx0KG9NZGNDaGFydC5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0KS5zZXRQcm9wZXJ0eShcIlwiLCB7fSk7XG5cblx0XHRcdFx0Y29uc3Qgb1BhZ2VJbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9NZGNDaGFydC5nZXRCaW5kaW5nQ29udGV4dChcInBhZ2VJbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdFx0Y29uc3Qgc1RlbXBsYXRlQ29udGVudFZpZXcgPSBvUGFnZUludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KGAke29QYWdlSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UGF0aCgpfS9hbHBDb250ZW50Vmlld2ApO1xuXHRcdFx0XHRpZiAoc1RlbXBsYXRlQ29udGVudFZpZXcgPT09IFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQpIHtcblx0XHRcdFx0XHR0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChzVGVtcGxhdGVDb250ZW50VmlldyA9PT0gVGVtcGxhdGVDb250ZW50Vmlldy5UYWJsZSkge1xuXHRcdFx0XHRcdHRoaXMuaGFzUGVuZGluZ1RhYmxlQ2hhbmdlcyA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly9sb2dpYyBmb3IgZXhwYW5zaW9uIG9yIGNvbGxhcHNlIG9mIGZpbHRlciBiYXIgc3RhcnRzXG5cdFx0XHRpZiAoIURldmljZS5zeXN0ZW0uZGVza3RvcCAmJiBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJzZWFyY2hUcmlnZ2VyZWRCeUluaXRpYWxMb2FkXCIpID09PSB0cnVlKSB7XG5cdFx0XHRcdGlmIChkeW5hbWljUGFnZS5nZXRIZWFkZXJFeHBhbmRlZCgpICE9PSBmYWxzZSkge1xuXHRcdFx0XHRcdGR5bmFtaWNQYWdlLnNldEhlYWRlckV4cGFuZGVkKGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvL3NldHRpbmcgaXQgdG8gZmFsc2Ugc28gdGhhdCBmdXJ0aGVyIHNlYXJjaCBvciAnR28nIHRyaWdnZXJzIHdvbid0IGNvbGxhcHNlIHRoZSBmaWx0ZXIgYmFyXG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInNlYXJjaFRyaWdnZXJlZEJ5SW5pdGlhbExvYWRcIiwgZmFsc2UpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBzdG9yZSBmaWx0ZXIgYmFyIGNvbmRpdGlvbnMgdG8gdXNlIGxhdGVyIHdoaWxlIG5hdmlnYXRpb25cblx0XHRcdFN0YXRlVXRpbC5yZXRyaWV2ZUV4dGVybmFsU3RhdGUob0ZpbHRlckJhcilcblx0XHRcdFx0LnRoZW4oKG9FeHRlcm5hbFN0YXRlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5maWx0ZXJCYXJDb25kaXRpb25zID0gb0V4dGVybmFsU3RhdGUuZmlsdGVyO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXRyaWV2aW5nIHRoZSBleHRlcm5hbCBzdGF0ZVwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRpZiAodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS5saXZlTW9kZSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoRGV2aWNlLnN5c3RlbS5waG9uZSkge1xuXHRcdFx0XHRjb25zdCBvRHluYW1pY1BhZ2UgPSB0aGlzLl9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2woKTtcblx0XHRcdFx0aWYgKCF0aGlzLl9pc0luaXRMb2FkRW5hYmxlZCgpKSB7XG5cdFx0XHRcdFx0b0R5bmFtaWNQYWdlLnNldEhlYWRlckV4cGFuZGVkKHRydWUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG9EeW5hbWljUGFnZS5zZXRIZWFkZXJFeHBhbmRlZChmYWxzZSk7XG5cdFx0XHRcdFx0dGhpcy5zZXRGaWx0ZXJUb2dnbGVWaXNpYmlsaXR5KGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogVHJpZ2dlcnMgYW4gb3V0Ym91bmQgbmF2aWdhdGlvbiB3aGVuIGEgdXNlciBjaG9vc2VzIHRoZSBjaGV2cm9uLlxuXHRcdCAqIEBwYXJhbSBvQ29udHJvbGxlclxuXHRcdCAqIEBwYXJhbSBzT3V0Ym91bmRUYXJnZXQgTmFtZSBvZiB0aGUgb3V0Ym91bmQgdGFyZ2V0IChuZWVkcyB0byBiZSBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdClcblx0XHQgKiBAcGFyYW0gb0NvbnRleHQgVGhlIGNvbnRleHQgdGhhdCBjb250YWlucyB0aGUgZGF0YSBmb3IgdGhlIHRhcmdldCBhcHBcblx0XHQgKiBAcGFyYW0gc0NyZWF0ZVBhdGggQ3JlYXRlIHBhdGggd2hlbiB0aGUgY2hldnJvbiBpcyBjcmVhdGVkLlxuXHRcdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggaXMgcmVzb2x2ZWQgb25jZSB0aGUgbmF2aWdhdGlvbiBpcyB0cmlnZ2VyZWRcblx0XHQgKiBAZmluYWxcblx0XHQgKi9cblx0XHRhc3luYyBvbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQoXG5cdFx0XHRvQ29udHJvbGxlcjogTGlzdFJlcG9ydENvbnRyb2xsZXIsXG5cdFx0XHRzT3V0Ym91bmRUYXJnZXQ6IHN0cmluZyxcblx0XHRcdG9Db250ZXh0OiBDb250ZXh0LFxuXHRcdFx0c0NyZWF0ZVBhdGg6IHN0cmluZ1xuXHRcdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdFx0cmV0dXJuIG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ub25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kKG9Db250cm9sbGVyLCBzT3V0Ym91bmRUYXJnZXQsIG9Db250ZXh0LCBzQ3JlYXRlUGF0aCk7XG5cdFx0fSxcblx0XHRvbkNoYXJ0U2VsZWN0aW9uQ2hhbmdlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgb0V2ZW50OiBVSTVFdmVudDx7IGRhdGE6IHVua25vd24gfSwgQ2hhcnRUeXBlPik6IHZvaWQge1xuXHRcdFx0Y29uc3Qgb01kY0NoYXJ0ID0gb0V2ZW50LmdldFNvdXJjZSgpLmdldENvbnRlbnQoKSBhcyBDaGFydCxcblx0XHRcdFx0b1RhYmxlID0gdGhpcy5fZ2V0VGFibGUoKSxcblx0XHRcdFx0YURhdGEgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiZGF0YVwiKSxcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdGlmIChhRGF0YSkge1xuXHRcdFx0XHRDaGFydFV0aWxzLnNldENoYXJ0RmlsdGVycyhvTWRjQ2hhcnQpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgc1RlbXBsYXRlQ29udGVudFZpZXcgPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoYCR7b0ludGVybmFsTW9kZWxDb250ZXh0LmdldFBhdGgoKX0vYWxwQ29udGVudFZpZXdgKTtcblx0XHRcdGlmIChzVGVtcGxhdGVDb250ZW50VmlldyA9PT0gVGVtcGxhdGVDb250ZW50Vmlldy5DaGFydCkge1xuXHRcdFx0XHR0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMgPSB0cnVlO1xuXHRcdFx0fSBlbHNlIGlmIChvVGFibGUpIHtcblx0XHRcdFx0b1RhYmxlLnJlYmluZCgpO1xuXHRcdFx0XHR0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMgPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdG9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgb0V2ZW50OiBVSTVFdmVudCk6IHZvaWQge1xuXHRcdFx0Y29uc3Qgc2VsZWN0ZWRLZXk6IHN0cmluZyA9XG5cdFx0XHRcdChvRXZlbnQuZ2V0UGFyYW1ldGVycygpIGFzIHsgc2VsZWN0ZWRLZXk6IHN0cmluZyB9KS5zZWxlY3RlZEtleSB8fCAob0V2ZW50LmdldFBhcmFtZXRlcnMoKSBhcyB7IGtleTogc3RyaW5nIH0pLmtleTtcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJhbHBDb250ZW50Vmlld1wiLCBzZWxlY3RlZEtleSk7XG5cdFx0XHRjb25zdCBvQ2hhcnQgPSB0aGlzLmdldENoYXJ0Q29udHJvbCgpO1xuXHRcdFx0Y29uc3Qgb1RhYmxlID0gdGhpcy5fZ2V0VGFibGUoKTtcblxuXHRcdFx0c3dpdGNoIChzZWxlY3RlZEtleSkge1xuXHRcdFx0XHRjYXNlIFRlbXBsYXRlQ29udGVudFZpZXcuVGFibGU6XG5cdFx0XHRcdFx0aWYgKG9UYWJsZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5fdXBkYXRlVGFibGUob1RhYmxlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgVGVtcGxhdGVDb250ZW50Vmlldy5DaGFydDpcblx0XHRcdFx0XHRpZiAob0NoYXJ0KSB7XG5cdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVDaGFydChvQ2hhcnQgYXMgQ2hhcnQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBUZW1wbGF0ZUNvbnRlbnRWaWV3Lkh5YnJpZDpcblx0XHRcdFx0XHRpZiAob1RhYmxlKSB7XG5cdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVUYWJsZShvVGFibGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAob0NoYXJ0KSB7XG5cdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVDaGFydChvQ2hhcnQgYXMgQ2hhcnQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdC8vIHNldFRpbWVvdXQgY2F1c2UgdGhlIHZhcmlhbnQgbmVlZHMgdG8gYmUgYXBwbGllZCBiZWZvcmUganVkZ2luZyB0aGUgYXV0byBzZWFyY2ggb3IgdXBkYXRpbmcgdGhlIGFwcCBzdGF0ZVxuXHRcdFx0dGhpcy5mb2N1c0hhbmRsaW5nRm9yU2VnbWVudGVkQnV0dG9uKHNlbGVjdGVkS2V5KTtcblx0XHR9LFxuXHRcdG9uRHluYW1pY1BhZ2VUaXRsZVN0YXRlQ2hhbmdlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgZXZlbnQ6IER5bmFtaWNQYWdlVGl0bGUkU3RhdGVDaGFuZ2VFdmVudCk6IHZvaWQge1xuXHRcdFx0Y29uc3QgZmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdFx0aWYgKGZpbHRlckJhcikge1xuXHRcdFx0XHR0aGlzLnNldEZpbHRlclRvZ2dsZVZpc2liaWxpdHkoISFldmVudC5nZXRQYXJhbWV0ZXIoXCJpc0V4cGFuZGVkXCIpKTtcblx0XHRcdFx0aWYgKGV2ZW50LmdldFBhcmFtZXRlcihcImlzRXhwYW5kZWRcIikgPT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0SW52aXNpYmxlTWVzc2FnZS5nZXRJbnN0YW5jZSgpLmFubm91bmNlKFxuXHRcdFx0XHRcdFx0ZmlsdGVyQmFyLmdldEFzc2lnbmVkRmlsdGVyc1RleHQoKS5maWx0ZXJzVGV4dCBhcyBzdHJpbmcsXG5cdFx0XHRcdFx0XHRJbnZpc2libGVNZXNzYWdlTW9kZS5Bc3NlcnRpdmVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIGZvY3VzIGZvciB0aGUgc2VnbWVudGVkIGJ1dHRvbiBiYXNlZCBvbiB0aGUgc2VsZWN0ZWQga2V5LlxuXHQgKiBAcGFyYW0gc2VsZWN0ZWRLZXkgVGhlIGtleSByZXByZXNlbnRpbmcgdGhlIHNlbGVjdGVkIHRlbXBsYXRlIGNvbnRlbnQgdmlld1xuXHQgKi9cblx0Zm9jdXNIYW5kbGluZ0ZvclNlZ21lbnRlZEJ1dHRvbihzZWxlY3RlZEtleTogc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc3Qgb0NoYXJ0ID0gdGhpcy5nZXRDaGFydENvbnRyb2woKTtcblx0XHRjb25zdCBvVGFibGUgPSB0aGlzLl9nZXRUYWJsZSgpO1xuXHRcdGxldCBzZWdtZW50ZWRCdXR0b25JZDogc3RyaW5nO1xuXHRcdHN3aXRjaCAoc2VsZWN0ZWRLZXkpIHtcblx0XHRcdGNhc2UgVGVtcGxhdGVDb250ZW50Vmlldy5UYWJsZTpcblx0XHRcdFx0c2VnbWVudGVkQnV0dG9uSWQgPSBnZW5lcmF0ZShbb1RhYmxlPy5nZXRJZCgpLCBcIlNlZ21lbnRlZEJ1dHRvblwiLCBcIlRlbXBsYXRlQ29udGVudFZpZXdcIl0pO1xuXHRcdFx0XHR0aGlzLmFkZEZvY3VzRGVsZWdhdGUoc2VnbWVudGVkQnV0dG9uSWQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVGVtcGxhdGVDb250ZW50Vmlldy5DaGFydDpcblx0XHRcdGNhc2UgVGVtcGxhdGVDb250ZW50Vmlldy5IeWJyaWQ6XG5cdFx0XHRcdHNlZ21lbnRlZEJ1dHRvbklkID0gZ2VuZXJhdGUoW29DaGFydD8uZ2V0SWQoKSwgXCJTZWdtZW50ZWRCdXR0b25cIiwgXCJUZW1wbGF0ZUNvbnRlbnRWaWV3XCJdKTtcblx0XHRcdFx0dGhpcy5hZGRGb2N1c0RlbGVnYXRlKHNlZ21lbnRlZEJ1dHRvbklkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBhbiBldmVudCBkZWxlZ2F0ZSB0byBhIGNvbnRyb2wgYW5kIHNldHMgZm9jdXMgb24gaXQuXG5cdCAqIEBwYXJhbSBzZWdtZW50ZWRCdXR0b25JZCBUaGUgY29udHJvbCB0byB3aGljaCB0aGUgZXZlbnQgZGVsZWdhdGUgd2lsbCBiZSBhZGRlZC5cblx0ICovXG5cdGFkZEZvY3VzRGVsZWdhdGUoc2VnbWVudGVkQnV0dG9uSWQ6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IHNlZ21lbnRlZEJ1dHRvbiA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2VnbWVudGVkQnV0dG9uSWQpO1xuXHRcdGlmIChzZWdtZW50ZWRCdXR0b24pIHtcblx0XHRcdGNvbnN0IGV2ZW50RGVsZWdhdGUgPSB7XG5cdFx0XHRcdG9uQWZ0ZXJSZW5kZXJpbmc6ICgpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRzZWdtZW50ZWRCdXR0b24uZm9jdXMoKTtcblx0XHRcdFx0XHRzZWdtZW50ZWRCdXR0b24ucmVtb3ZlRXZlbnREZWxlZ2F0ZShldmVudERlbGVnYXRlKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdHNlZ21lbnRlZEJ1dHRvbi5hZGRFdmVudERlbGVnYXRlKGV2ZW50RGVsZWdhdGUpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gdXBkYXRlIHRoZSBsb2NhbCBVSSBtb2RlbCBvZiB0aGUgcGFnZSB3aXRoIHRoZSBTZWxlY3Rpb24gVmFyaWFudC5cblx0ICogQHBhcmFtIGZpbHRlckJhciBNREMgZmlsdGVyIGJhclxuXHQgKiBAcGFyYW0gaW50ZXJuYWxNb2RlbENvbnRleHQgVGhlIGludGVybmFsIG1vZGVsIGNvbnRleHRcblx0ICovXG5cdGFzeW5jIF9zdG9yZUZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQoZmlsdGVyQmFyOiBGaWx0ZXJCYXIsIGludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBmaWx0ZXJCYXJBUEkgPSBmaWx0ZXJCYXIuZ2V0UGFyZW50KCkgYXMgRmlsdGVyQmFyQVBJO1xuXHRcdFx0Y29uc3Qgc3YgPSBhd2FpdCBmaWx0ZXJCYXJBUEkuZ2V0U2VsZWN0aW9uVmFyaWFudCgpO1xuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJmaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50XCIsIHN2KTtcblx0XHR9IGNhdGNoIChlcnI6IHVua25vd24pIHtcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG5cdFx0XHRMb2cuZXJyb3IoYEZFIDogRXJyb3IgZmV0Y2hpbmcgc2VsZWN0aW9uIHZhcmlhbnQgb24gZmlsdGVyIGNoYW5nZTogJHttZXNzYWdlfWApO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZ2V0IHRoZSBTZWxlY3Rpb24gVmFyaWFudCBmcm9tIGludGVybmFsIG1vZGVsLlxuXHQgKiBAcmV0dXJucyBTZWxlY3Rpb25WYXJpYW50XG5cdCAqL1xuXHRnZXRGaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50KCk6IFNlbGVjdGlvblZhcmlhbnQge1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCB8IHVuZGVmaW5lZDtcblx0XHRyZXR1cm4gKGludGVybmFsTW9kZWxDb250ZXh0Py5nZXRQcm9wZXJ0eShcImZpbHRlckJhclNlbGVjdGlvblZhcmlhbnRcIikgYXMgU2VsZWN0aW9uVmFyaWFudCkgfHwgbmV3IFNlbGVjdGlvblZhcmlhbnQoKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBMaXN0UmVwb3J0Q29udHJvbGxlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQTZEQSxNQUFNQSxtQkFBbUIsR0FBR0MsV0FBVyxDQUFDRCxtQkFBbUI7SUFDMURFLGVBQWUsR0FBR0QsV0FBVyxDQUFDQyxlQUFlOztFQUU5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBSkEsSUFNTUMsb0JBQW9CLElBQUFDLElBQUEsR0FEekJDLGNBQWMsQ0FBQyxrREFBa0QsQ0FBQyxFQUFBQyxLQUFBLEdBRWpFQyxjQUFjLENBQ2RDLGVBQWUsQ0FBQ0MsUUFBUSxDQUFDO0lBQ3hCQyxjQUFjLEVBQUUsU0FBQUEsQ0FBQSxFQUFpQztNQUMvQyxJQUFJLENBQUNDLE9BQU8sQ0FBQyxDQUFDLENBQUNDLGFBQWEsQ0FBQyxDQUFDLENBQTBCQyxlQUFlLENBQUMsQ0FBQztJQUMzRTtFQUNELENBQUMsQ0FDRixDQUFDLEVBQUFDLEtBQUEsR0FHQVAsY0FBYyxDQUNkUSw2QkFBNkIsQ0FBQ04sUUFBUSxDQUFDO0lBQ3RDTyxZQUFZLEVBQUUsU0FBQUEsQ0FBQSxFQUErQztNQUM1RCxPQUFRLElBQUksQ0FBQ0MsSUFBSSxDQUEwQkMsbUJBQW1CLENBQUMsQ0FBQztJQUNqRTtFQUNELENBQUMsQ0FDRixDQUFDLEVBQUFDLEtBQUEsR0FHQVosY0FBYyxDQUFDYSxXQUFXLENBQUNYLFFBQVEsQ0FBQ1ksbUJBQW1CLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBR3pEZixjQUFjLENBQUNnQixxQkFBcUIsQ0FB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
|