@sapui5/sap.fe.templates 1.148.3 → 1.150.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 +2 -5
- package/src/sap/fe/templates/ListReport/Component.js +2 -5
- package/src/sap/fe/templates/ListReport/ExtensionAPI.js +84 -14
- package/src/sap/fe/templates/ListReport/ExtensionAPI.ts +88 -13
- package/src/sap/fe/templates/ListReport/LRMessageStrip.js +41 -1
- package/src/sap/fe/templates/ListReport/LRMessageStrip.ts +43 -0
- package/src/sap/fe/templates/ListReport/ListReportController.controller.js +87 -11
- package/src/sap/fe/templates/ListReport/ListReportController.controller.ts +74 -2
- package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.js +4 -7
- package/src/sap/fe/templates/ListReport/manifest.json +1 -1
- package/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation.js +12 -6
- package/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation.ts +14 -6
- package/src/sap/fe/templates/ListReport/overrides/ViewState.js +7 -1
- package/src/sap/fe/templates/ListReport/overrides/ViewState.ts +5 -0
- package/src/sap/fe/templates/ListReport/view/fragments/Table.fragment.xml +1 -0
- package/src/sap/fe/templates/ListReport/view/fragments/VariantManagement.fragment.xml +1 -0
- package/src/sap/fe/templates/ObjectPage/Component.js +12 -15
- package/src/sap/fe/templates/ObjectPage/ExtensionAPI.js +3 -7
- package/src/sap/fe/templates/ObjectPage/ObjectPage.view.xml +3 -2
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +105 -83
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.ts +88 -80
- package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.js +5 -18
- package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.ts +2 -15
- package/src/sap/fe/templates/ObjectPage/components/CollaborationDraft.js +28 -3
- package/src/sap/fe/templates/ObjectPage/components/CollaborationDraft.tsx +29 -1
- package/src/sap/fe/templates/ObjectPage/controls/StashableHBox.js +2 -5
- package/src/sap/fe/templates/ObjectPage/controls/StashableVBox.js +2 -5
- package/src/sap/fe/templates/ObjectPage/controls/SubSectionBlock.js +3 -6
- package/src/sap/fe/templates/ObjectPage/manifest.json +1 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderForm.fragment.xml +1 -0
- package/src/sap/fe/templates/ObjectPage/view/fragments/SectionContent.fragment.xml +0 -4
- package/src/sap/fe/templates/ObjectPage/view/fragments/SectionFormContent.fragment.xml +0 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/SectionMoreFormContent.fragment.xml +0 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/Table.fragment.xml +1 -0
- package/src/sap/fe/templates/library.js +1 -1
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2026 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/MessageHandler", "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/MessageHandler", "./overrides/Share", "./overrides/ViewState"], function (Log, ObjectPath, ClassSupport, CommonUtils, PageController, IntentBasedNavigation, InternalIntentBasedNavigation, InternalRouting, KPIManagement, MessageHandler, Placeholder, Share, SideEffects, ViewState, EditState, MessageStrip, ResourceModelHelper, StableIdHelper, CoreLibrary, ChartUtils, FilterUtils, SelectionVariant, ExtensionAPI, SideEffectsOverride, TableScroller, Device, InvisibleMessage, library, OverrideExecution, StateUtil, hasher, ListReportTemplating, IntentBasedNavigationOverride, MessageHandlerOverride, 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/MessageHandler", "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/VariantManagement", "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/MessageHandler", "./overrides/Share", "./overrides/ViewState"], function (Log, ObjectPath, ClassSupport, CommonUtils, PageController, IntentBasedNavigation, InternalIntentBasedNavigation, InternalRouting, KPIManagement, MessageHandler, Placeholder, Share, SideEffects, ViewState, EditState, MessageStrip, ResourceModelHelper, StableIdHelper, CoreLibrary, VariantManagementBB, ChartUtils, FilterUtils, SelectionVariant, ExtensionAPI, SideEffectsOverride, TableScroller, Device, InvisibleMessage, library, OverrideExecution, StateUtil, hasher, ListReportTemplating, IntentBasedNavigationOverride, MessageHandlerOverride, ShareOverrides, ViewStateOverrides) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
|
-
var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _dec17, _dec18,
|
|
8
|
+
var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec0, _dec1, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _dec17, _dec18, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9;
|
|
9
9
|
var InvisibleMessageMode = library.InvisibleMessageMode;
|
|
10
10
|
var getResourceModel = ResourceModelHelper.getResourceModel;
|
|
11
11
|
var usingExtension = ClassSupport.usingExtension;
|
|
@@ -19,6 +19,9 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSup
|
|
|
19
19
|
function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
|
|
20
20
|
function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, ("value" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }
|
|
21
21
|
function _initializerWarningHelper(r, e) { throw Error("Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform."); }
|
|
22
|
+
const {
|
|
23
|
+
VariantType
|
|
24
|
+
} = VariantManagementBB;
|
|
22
25
|
const TemplateContentView = CoreLibrary.TemplateContentView,
|
|
23
26
|
InitialLoadMode = CoreLibrary.InitialLoadMode;
|
|
24
27
|
|
|
@@ -35,12 +38,9 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSup
|
|
|
35
38
|
getEntitySet: function () {
|
|
36
39
|
return this.base.getCurrentEntitySet();
|
|
37
40
|
}
|
|
38
|
-
})), _dec4 = usingExtension(SideEffects.override(SideEffectsOverride)), _dec5 = usingExtension(IntentBasedNavigation.override(IntentBasedNavigationOverride)), _dec6 = usingExtension(Share.override(ShareOverrides)), _dec7 = usingExtension(ViewState.override(ViewStateOverrides)), _dec8 = usingExtension(KPIManagement), _dec9 = usingExtension(Placeholder),
|
|
39
|
-
function ListReportController() {
|
|
41
|
+
})), _dec4 = usingExtension(SideEffects.override(SideEffectsOverride)), _dec5 = usingExtension(IntentBasedNavigation.override(IntentBasedNavigationOverride)), _dec6 = usingExtension(Share.override(ShareOverrides)), _dec7 = usingExtension(ViewState.override(ViewStateOverrides)), _dec8 = usingExtension(KPIManagement), _dec9 = usingExtension(Placeholder), _dec0 = usingExtension(MessageHandler.override(MessageHandlerOverride)), _dec1 = publicExtension(), _dec10 = finalExtension(), _dec11 = privateExtension(), _dec12 = extensible("After"), _dec13 = publicExtension(), _dec14 = extensible(OverrideExecution.After), _dec15 = publicExtension(), _dec16 = extensible(OverrideExecution.After), _dec17 = publicExtension(), _dec18 = extensible(OverrideExecution.After), _dec(_class = (_class2 = /*#__PURE__*/function (_PageController) {
|
|
42
|
+
function ListReportController(...args) {
|
|
40
43
|
var _this;
|
|
41
|
-
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
42
|
-
args[_key] = arguments[_key];
|
|
43
|
-
}
|
|
44
44
|
_this = _PageController.call(this, ...args) || this;
|
|
45
45
|
_initializerDefineProperty(_this, "_routing", _descriptor, _this);
|
|
46
46
|
_initializerDefineProperty(_this, "_intentBasedNavigation", _descriptor2, _this);
|
|
@@ -133,11 +133,15 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSup
|
|
|
133
133
|
}
|
|
134
134
|
}, 0);
|
|
135
135
|
},
|
|
136
|
-
onVariantSaved() {
|
|
136
|
+
onVariantSaved(event) {
|
|
137
137
|
//TODO: Should remove this setTimeOut once Variant Management provides an api to fetch the current variant key on save!!!
|
|
138
138
|
setTimeout(() => {
|
|
139
139
|
this.getExtensionAPI().updateAppState();
|
|
140
140
|
}, 1000);
|
|
141
|
+
this.trackVariantSavedTelemetry(event);
|
|
142
|
+
},
|
|
143
|
+
onVariantManaged(event) {
|
|
144
|
+
this.trackVariantManagedTelemetry(event);
|
|
141
145
|
},
|
|
142
146
|
onSearch() {
|
|
143
147
|
const oFilterBar = this._getFilterBarControl(); // onsearch is called only if the filterbar exists
|
|
@@ -949,6 +953,78 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSup
|
|
|
949
953
|
if (event.getParameter("visible")) {
|
|
950
954
|
this.setShowFooter(event.getParameter("visible"));
|
|
951
955
|
}
|
|
956
|
+
}
|
|
957
|
+
|
|
958
|
+
/**
|
|
959
|
+
* Tracks telemetry when a new variant is saved.
|
|
960
|
+
* @param event The save event.
|
|
961
|
+
*/;
|
|
962
|
+
_proto.trackVariantSavedTelemetry = async function trackVariantSavedTelemetry(event) {
|
|
963
|
+
if (event.getParameter("overwrite")) {
|
|
964
|
+
return;
|
|
965
|
+
}
|
|
966
|
+
if (!(await this.getAppComponent()?.getTelemetryService()?.isEnabled())) {
|
|
967
|
+
return;
|
|
968
|
+
}
|
|
969
|
+
const vmMode = this.getView().getViewData().variantManagement;
|
|
970
|
+
if (vmMode === "Page") {
|
|
971
|
+
const variantManagement = this.getView().byId("fe::PageVariantManagement");
|
|
972
|
+
if (variantManagement) {
|
|
973
|
+
this.fireTelemetry(variantManagement.getVariants().length, VariantType.PAGE);
|
|
974
|
+
}
|
|
975
|
+
} else {
|
|
976
|
+
const source = event.getSource();
|
|
977
|
+
const filterBarVM = this._getFilterBarVariantControl();
|
|
978
|
+
if (source === filterBarVM) {
|
|
979
|
+
this.fireTelemetry(filterBarVM?.getVariants().length ?? 0, VariantType.FILTER);
|
|
980
|
+
} else if (source.isA("sap.fe.macros.Table")) {
|
|
981
|
+
const tableAPI = source;
|
|
982
|
+
this.fireTelemetry(tableAPI?.getContent?.()?.getVariant?.()?.getVariants?.()?.length ?? 0, VariantType.TABLE);
|
|
983
|
+
}
|
|
984
|
+
}
|
|
985
|
+
}
|
|
986
|
+
|
|
987
|
+
/**
|
|
988
|
+
* Tracks telemetry when variants are managed (e.g. deleted).
|
|
989
|
+
* @param event The manage event.
|
|
990
|
+
*/;
|
|
991
|
+
_proto.trackVariantManagedTelemetry = async function trackVariantManagedTelemetry(event) {
|
|
992
|
+
const deletedCount = (event.getParameter("deleted") ?? []).length;
|
|
993
|
+
// The manage dialog can be closed without deleting any variants (e.g. rename or reorder only)
|
|
994
|
+
if (deletedCount === 0) {
|
|
995
|
+
return;
|
|
996
|
+
}
|
|
997
|
+
if (!(await this.getAppComponent()?.getTelemetryService()?.isEnabled())) {
|
|
998
|
+
return;
|
|
999
|
+
}
|
|
1000
|
+
const vmMode = this.getView().getViewData().variantManagement;
|
|
1001
|
+
if (vmMode === "Page") {
|
|
1002
|
+
this.fireTelemetry(deletedCount, VariantType.PAGE);
|
|
1003
|
+
} else {
|
|
1004
|
+
const source = event.getSource();
|
|
1005
|
+
const filterBarVM = this._getFilterBarVariantControl();
|
|
1006
|
+
if (source === filterBarVM) {
|
|
1007
|
+
this.fireTelemetry(deletedCount, VariantType.FILTER);
|
|
1008
|
+
} else if (source.isA("sap.fe.macros.Table")) {
|
|
1009
|
+
this.fireTelemetry(deletedCount, VariantType.TABLE);
|
|
1010
|
+
}
|
|
1011
|
+
}
|
|
1012
|
+
}
|
|
1013
|
+
|
|
1014
|
+
/**
|
|
1015
|
+
* Stores a FE.Variant telemetry event.
|
|
1016
|
+
* @param countVariants Number of variants affected by the action.
|
|
1017
|
+
* @param variantType The variant type discriminator.
|
|
1018
|
+
*/;
|
|
1019
|
+
_proto.fireTelemetry = function fireTelemetry(countVariants, variantType) {
|
|
1020
|
+
const telemetryEvent = {
|
|
1021
|
+
type: "FE.Variant",
|
|
1022
|
+
parameters: {
|
|
1023
|
+
countVariants,
|
|
1024
|
+
variantType
|
|
1025
|
+
}
|
|
1026
|
+
};
|
|
1027
|
+
this.getAppComponent()?.getTelemetryService()?.storeAction(telemetryEvent);
|
|
952
1028
|
};
|
|
953
1029
|
return ListReportController;
|
|
954
1030
|
}(PageController), _descriptor = _applyDecoratedDescriptor(_class2.prototype, "_routing", [_dec2], {
|
|
@@ -991,12 +1067,12 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSup
|
|
|
991
1067
|
enumerable: true,
|
|
992
1068
|
writable: true,
|
|
993
1069
|
initializer: null
|
|
994
|
-
}), _descriptor9 = _applyDecoratedDescriptor(_class2.prototype, "messageHandler", [
|
|
1070
|
+
}), _descriptor9 = _applyDecoratedDescriptor(_class2.prototype, "messageHandler", [_dec0], {
|
|
995
1071
|
configurable: true,
|
|
996
1072
|
enumerable: true,
|
|
997
1073
|
writable: true,
|
|
998
1074
|
initializer: null
|
|
999
|
-
}), _applyDecoratedDescriptor(_class2.prototype, "getExtensionAPI", [
|
|
1075
|
+
}), _applyDecoratedDescriptor(_class2.prototype, "getExtensionAPI", [_dec1, _dec10], Object.getOwnPropertyDescriptor(_class2.prototype, "getExtensionAPI"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onPageReady", [_dec11, _dec12], Object.getOwnPropertyDescriptor(_class2.prototype, "onPageReady"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onViewNeedsRefresh", [_dec13, _dec14], Object.getOwnPropertyDescriptor(_class2.prototype, "onViewNeedsRefresh"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onPendingFilters", [_dec15, _dec16], Object.getOwnPropertyDescriptor(_class2.prototype, "onPendingFilters"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onAfterClear", [_dec17, _dec18], Object.getOwnPropertyDescriptor(_class2.prototype, "onAfterClear"), _class2.prototype), _class2)) || _class);
|
|
1000
1076
|
return ListReportController;
|
|
1001
1077
|
}, false);
|
|
1002
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUZW1wbGF0ZUNvbnRlbnRWaWV3IiwiQ29yZUxpYnJhcnkiLCJJbml0aWFsTG9hZE1vZGUiLCJMaXN0UmVwb3J0Q29udHJvbGxlciIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwidXNpbmdFeHRlbnNpb24iLCJJbnRlcm5hbFJvdXRpbmciLCJvdmVycmlkZSIsIm9uQWZ0ZXJCaW5kaW5nIiwiZ2V0VmlldyIsImdldENvbnRyb2xsZXIiLCJfb25BZnRlckJpbmRpbmciLCJfZGVjMyIsIkludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0RW50aXR5U2V0IiwiYmFzZSIsImdldEN1cnJlbnRFbnRpdHlTZXQiLCJfZGVjNCIsIlNpZGVFZmZlY3RzIiwiU2lkZUVmZmVjdHNPdmVycmlkZSIsIl9kZWM1IiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUiLCJfZGVjNiIsIlNoYXJlIiwiU2hhcmVPdmVycmlkZXMiLCJfZGVjNyIsIlZpZXdTdGF0ZSIsIlZpZXdTdGF0ZU92ZXJyaWRlcyIsIl9kZWM4IiwiS1BJTWFuYWdlbWVudCIsIl9kZWM5IiwiUGxhY2Vob2xkZXIiLCJfZGVjMTAiLCJNZXNzYWdlSGFuZGxlciIsIk1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUiLCJfZGVjMTEiLCJwdWJsaWNFeHRlbnNpb24iLCJfZGVjMTIiLCJmaW5hbEV4dGVuc2lvbiIsIl9kZWMxMyIsInByaXZhdGVFeHRlbnNpb24iLCJfZGVjMTQiLCJleHRlbnNpYmxlIiwiX2RlYzE1IiwiX2RlYzE2IiwiT3ZlcnJpZGVFeGVjdXRpb24iLCJBZnRlciIsIl9kZWMxNyIsIl9kZWMxOCIsIl9kZWMxOSIsIl9kZWMyMCIsIl9jbGFzcyIsIl9jbGFzczIiLCJfUGFnZUNvbnRyb2xsZXIiLCJfdGhpcyIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfZGVzY3JpcHRvcjIiLCJfZGVzY3JpcHRvcjMiLCJfZGVzY3JpcHRvcjQiLCJfZGVzY3JpcHRvcjUiLCJfZGVzY3JpcHRvcjYiLCJfZGVzY3JpcHRvcjciLCJfZGVzY3JpcHRvcjgiLCJfZGVzY3JpcHRvcjkiLCJmb3JtYXR0ZXJzIiwic2V0QUxQQ29udHJvbE1lc3NhZ2VTdHJpcCIsImFJZ25vcmVkRmllbGRzIiwiYklzQ2hhcnQiLCJvQXBwbHlTdXBwb3J0ZWQiLCJzVGV4dCIsIm9GaWx0ZXJCYXIiLCJfZ2V0RmlsdGVyQmFyQ29udHJvbCIsImlzQXJyYXkiLCJhSWdub3JlZExhYmVscyIsIk1lc3NhZ2VTdHJpcCIsImdldExhYmVscyIsImRhdGEiLCJnZXRSZXNvdXJjZU1vZGVsIiwiYklzU2VhcmNoSWdub3JlZCIsImVuYWJsZVNlYXJjaCIsImdldEFMUFRleHQiLCJnZXRUZXh0IiwiaGFuZGxlcnMiLCJvbkZpbHRlckxheW91dFN3aXRjaCIsIm9FdmVudCIsImN1cnJlbnRLZXkiLCJnZXRTb3VyY2UiLCJzZWxlY3RlZEtleSIsImlzQWlMYXlvdXQiLCJjb250cm9sVmFyaWFudENvbnRyb2xzIiwiX2dldENvbnRyb2xWYXJpYW50TWFuYWdlbWVudENvbnRyb2xzIiwiZmlsdGVyQmFyVk0iLCJfZ2V0RmlsdGVyQmFyVmFyaWFudENvbnRyb2wiLCJ0YWJsZVZNIiwiX2dldFRhYmxlIiwiZ2V0VmFyaWFudCIsInN1cHBvcnRlZE9uQWlMYXlvdXQiLCJTZXQiLCJmaWx0ZXIiLCJ2bSIsImZvckVhY2giLCJ2YXJpYW50Q29udHJvbCIsImlzVmlzaWJsZSIsImhhcyIsInNldFZpc2libGUiLCJvbklubGluZUVkaXRTYXZlIiwiaW5saW5lRWRpdEZsb3ciLCJpbmxpbmVFZGl0U2F2ZSIsIm9uRmlsdGVyU2VhcmNoIiwiZmlsdGVyQmFyQVBJIiwiZ2V0UGFyZW50IiwidHJpZ2dlclNlYXJjaCIsIm9uRmlsdGVyc0NoYW5nZWQiLCJvSW50ZXJuYWxNb2RlbENvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsIm9uUGVuZGluZ0ZpbHRlcnMiLCJnZXRQYXJhbWV0ZXIiLCJzZXRQcm9wZXJ0eSIsIl9zdG9yZUZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQiLCJvblZhcmlhbnRTZWxlY3RlZCIsInBhcmFtZXRlcnMiLCJnZXRQYXJhbWV0ZXJzIiwidmFyaWFudE1hbmFnZW1lbnQiLCJvcmlnaW5hbFNvdXJjZSIsImN1cnJlbnRWYXJpYW50S2V5IiwibXVsdGlNb2RlQ29udHJvbCIsIl9nZXRNdWx0aU1vZGVDb250cm9sIiwiaXNBIiwiaW52YWxpZGF0ZUNvbnRlbnQiLCJzZXRGcmVlemVDb250ZW50Iiwic2V0VGltZW91dCIsImZpbHRlckJhciIsImR5bmFtaWNQYWdlIiwiX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbCIsImZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZCIsImdldEZpbHRlckl0ZW1zIiwiZmluZCIsImZpbHRlckl0ZW0iLCJnZXRSZXF1aXJlZCIsImdldENvbmRpdGlvbnMiLCJzZXRIZWFkZXJFeHBhbmRlZCIsIl9zaG91bGRBdXRvVHJpZ2dlclNlYXJjaCIsIl9nZXRBcHBseUF1dG9tYXRpY2FsbHlPblZhcmlhbnQiLCJnZXRFeHRlbnNpb25BUEkiLCJ1cGRhdGVBcHBTdGF0ZSIsIm9uVmFyaWFudFNhdmVkIiwib25TZWFyY2giLCJvTWRjQ2hhcnQiLCJnZXRDaGFydENvbnRyb2wiLCJiSGlkZURyYWZ0IiwiRmlsdGVyVXRpbHMiLCJnZXRFZGl0U3RhdGVJc0hpZGVEcmFmdCIsIl91cGRhdGVBTFBOb3RBcHBsaWNhYmxlRmllbGRzIiwib1BhZ2VJbnRlcm5hbE1vZGVsQ29udGV4dCIsInNUZW1wbGF0ZUNvbnRlbnRWaWV3IiwiZ2V0UHJvcGVydHkiLCJnZXRQYXRoIiwiQ2hhcnQiLCJoYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzIiwiVGFibGUiLCJoYXNQZW5kaW5nVGFibGVDaGFuZ2VzIiwiRGV2aWNlIiwic3lzdGVtIiwiZGVza3RvcCIsImdldEhlYWRlckV4cGFuZGVkIiwiU3RhdGVVdGlsIiwicmV0cmlldmVFeHRlcm5hbFN0YXRlIiwidGhlbiIsIm9FeHRlcm5hbFN0YXRlIiwiZmlsdGVyQmFyQ29uZGl0aW9ucyIsImNhdGNoIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJwaG9uZSIsIm9EeW5hbWljUGFnZSIsIl9pc0luaXRMb2FkRW5hYmxlZCIsInNldEZpbHRlclRvZ2dsZVZpc2liaWxpdHkiLCJvbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQiLCJvQ29udHJvbGxlciIsInNPdXRib3VuZFRhcmdldCIsIm9Db250ZXh0Iiwic0NyZWF0ZVBhdGgiLCJfaW50ZW50QmFzZWROYXZpZ2F0aW9uIiwib25DaGFydFNlbGVjdGlvbkNoYW5nZWQiLCJnZXRDb250ZW50Iiwib1RhYmxlIiwiYURhdGEiLCJDaGFydFV0aWxzIiwic2V0Q2hhcnRGaWx0ZXJzIiwicmViaW5kIiwib25TZWdtZW50ZWRCdXR0b25QcmVzc2VkIiwia2V5Iiwib0NoYXJ0IiwiX3VwZGF0ZVRhYmxlIiwiX3VwZGF0ZUNoYXJ0IiwiSHlicmlkIiwiZm9jdXNIYW5kbGluZ0ZvclNlZ21lbnRlZEJ1dHRvbiIsIm9uRHluYW1pY1BhZ2VUaXRsZVN0YXRlQ2hhbmdlZCIsImV2ZW50IiwiSW52aXNpYmxlTWVzc2FnZSIsImdldEluc3RhbmNlIiwiYW5ub3VuY2UiLCJnZXRBc3NpZ25lZEZpbHRlcnNUZXh0IiwiZmlsdGVyc1RleHQiLCJJbnZpc2libGVNZXNzYWdlTW9kZSIsIkFzc2VydGl2ZSIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiZXh0ZW5zaW9uQVBJIiwiRXh0ZW5zaW9uQVBJIiwib25Jbml0IiwiUGFnZUNvbnRyb2xsZXIiLCJhcHBseSIsImdldE93bmVyQ29tcG9uZW50IiwidWlNb2RlbENvbnRleHQiLCJfaGFzTXVsdGlWaXN1YWxpemF0aW9ucyIsImFscENvbnRlbnRWaWV3IiwiX2dldERlZmF1bHRQYXRoIiwiZ2V0QXBwQ29tcG9uZW50IiwiZ2V0Um91dGVyUHJveHkiLCJ3YWl0Rm9yUm91dGVNYXRjaEJlZm9yZU5hdmlnYXRpb24iLCJfc2V0SW5pdExvYWQiLCJpc0VkaXRhYmxlIiwib25CZWZvcmVSZW5kZXJpbmciLCJkeW5taWNQYWdlSGVhZGVyVGl0bGUiLCJnZXRUaXRsZSIsImJyZWFkY3J1bWJzQkIiLCJnZXRCcmVhZGNydW1icyIsInNldEJyZWFkY3J1bWJMaW5rcyIsIm9uRXhpdCIsImRlc3Ryb3kiLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsInBhZ2VSZWFkeSIsIndhaXRGb3IiLCJfYXBwbHlBcHBTdGF0ZSIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsIndhaXRGb3JFZGl0Q2xlYW51cCIsImFUYWJsZXMiLCJfZ2V0Q29udHJvbHMiLCJ1cGRhdGVBY3Rpb25zIiwiRWRpdFN0YXRlIiwiaXNFZGl0U3RhdGVEaXJ0eSIsIm1vZGVsIiwiZ2V0TW9kZWwiLCJlZGl0RmxvdyIsInRlcm1pbmF0ZURyYWZ0U2Vzc2lvbiIsInRhYmxlIiwib1RhYmxlQmluZGluZyIsImdldFJvd0JpbmRpbmciLCJ0YWJsZUFQSSIsIkNvbW1vblV0aWxzIiwiZ2V0Um91dGluZ1NlcnZpY2UiLCJ3YWl0Rm9yQmluZGluZ0NsZWFudXAiLCJhdHRhY2hFdmVudE9uY2UiLCJfdXBkYXRlVGFibGVBY3Rpb25zIiwiZ2V0VGFibGVEZWZpbml0aW9uIiwiY29udHJvbCIsInR5cGUiLCJyZXNldENoYW5nZXMiLCJyZWZyZXNoIiwiZSIsIndhcm5pbmciLCJzZXRFZGl0U3RhdGVQcm9jZXNzZWQiLCJlbnZpcm9ubWVudENhcGFiaWxpdGllcyIsImdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiaXNJbnNpZ2h0c0VuYWJsZWQiLCJvblBhZ2VSZWFkeSIsIm1QYXJhbWV0ZXJzIiwiZm9yY2VGb2N1cyIsIl9zZXRJbml0aWFsRm9jdXMiLCJnZXRTaGVsbFNlcnZpY2VzIiwic2V0QmFja05hdmlnYXRpb24iLCJ1bmRlZmluZWQiLCJvblZpZXdOZWVkc1JlZnJlc2giLCJzbGljZSIsIm9uQWZ0ZXJDbGVhciIsImFJQk5BY3Rpb25zIiwiZ2V0SUJOQWN0aW9ucyIsInVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5IiwidXBkYXRlTWVudUJ1dHRvblZpc2libGl0eSIsIl9zY3JvbGxUYWJsZXNUb1JvdyIsInNSb3dQYXRoIiwiVGFibGVTY3JvbGxlciIsInNjcm9sbFRhYmxlVG9Sb3ciLCJfZm9jdXNTaWxlbnQiLCJmaWx0ZXJGaWVsZCIsImZvY3VzSW5mbyIsImdldEZvY3VzSW5mbyIsInRhcmdldEluZm8iLCJzaWxlbnQiLCJmb2N1cyIsIl9mb2N1c1doZW5IZWFkZXJFeHBhbmRlZCIsIm9GaWx0ZXJJdGVtIiwiYmFzaWNTZWFyY2hGaWVsZCIsImdldEJhc2ljU2VhcmNoRmllbGQiLCJmaWVsZFRvRm9jdXMiLCJpc0ZvY3VzYWJsZSIsImJ5SWQiLCJfZ2V0RmlsdGVyQmFyQ29udHJvbElkIiwic2V0Rm9jdXNPbkVtcGhhc2l6ZWRIZWFkZXJBY3Rpb24iLCJ0aXRsZSIsImFjdGlvbnMiLCJnZXRBY3Rpb25zIiwiZW1waGFzaXplZEJ1dHRvbiIsImdldFR5cGUiLCJnZXRWaXNpYmxlIiwiZ2V0RW5hYmxlZCIsInJvb3RWaWV3Q29udHJvbGxlciIsImlzRmNsRW5hYmxlZCIsImdldFZpc2libGVWaWV3cyIsImlzSGVhZGVyRXhwYW5kZWQiLCJfaXNGaWx0ZXJCYXJIaWRkZW5Vc2VkIiwid2hlbkluaXRpYWxpemVkIiwiZ2V0U2hvd01lc3NhZ2VzIiwic2V0U2hvd01lc3NhZ2VzIiwiZm9jdXNSb3ciLCJpbmZvIiwiX2dldEJyb3dzZXJUaXRsZSIsIl9wYWdlVGl0bGVJbmZvcm1hdGlvbiIsIlByb21pc2UiLCJyZXNvbHZlIiwiX2dldFBhZ2VUaXRsZUluZm9ybWF0aW9uIiwib01hbmlmZXN0RW50cnkiLCJnZXRNYW5pZmVzdEVudHJ5Iiwic3VidGl0bGUiLCJzdWJUaXRsZSIsImludGVudCIsImljb24iLCJfZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sSWQiLCJfZ2V0QWRhcHRhdGlvbkZpbHRlckJhckNvbnRyb2wiLCJhZGFwdGF0aW9uRmlsdGVyQmFyIiwiZ2V0SW5idWlsdEZpbHRlciIsImdldEFwcFN0YXRlSGFuZGxlciIsImFwcGx5QXBwU3RhdGUiLCJlbmFibGVSZXF1ZXN0cyIsIl9pc0ZpbHRlckJhckhpZGRlbiIsIl9pc011bHRpTW9kZSIsInNldENvdW50c091dERhdGVkIiwiY29udHJvbFZhcmlhbnRJZHMiLCJfZ2V0UGFnZU1vZGVsIiwidmFyaWFudENvbnRyb2xzIiwidmFyaWFudElkQXJyYXkiLCJzcGxpdCIsInZhcmlhbnRJZCIsInRyaW0iLCJwdXNoIiwiX2dldFNlZ21lbnRlZEJ1dHRvbiIsImNvbnRlbnRTd2l0Y2hlciIsIiRzZWdtZW50ZWRCdXR0b24iLCJjdXJyZW50IiwiX2dldENvbnRyb2xGcm9tUGFnZU1vZGVsUHJvcGVydHkiLCJzUGF0aCIsImNvbnRyb2xJZCIsIl9nZXRWaXN1YWxGaWx0ZXJCYXJDb250cm9sIiwic1Zpc3VhbEZpbHRlckJhcklkIiwiU3RhYmxlSWRIZWxwZXIiLCJnZW5lcmF0ZSIsIl9nZXRJY29uVGFiQmFyIiwib0NvbnRyb2wiLCJnZXRTZWxlY3RlZElubmVyQ29udHJvbCIsImNvbnRlbnQiLCJzS2V5IiwiYUNvbnRyb2xzIiwib1RhYk11bHRpTW9kZSIsImdldEl0ZW1zIiwib0l0ZW0iLCJnZXRLZXkiLCJpbmNsdWRlcyIsImRlZmF1bHRQYXRoIiwiTGlzdFJlcG9ydFRlbXBsYXRpbmciLCJnZXREZWZhdWx0UGF0aCIsImluaXRMb2FkTW9kZSIsImdldFZpZXdEYXRhIiwiaW5pdGlhbExvYWQiLCJFbmFibGVkIiwiX2Rpc2FibGVJbml0TG9hZCIsIl9hcHBseUF1dG9tYXRpY2FsbHlPblN0YW5kYXJkVmFyaWFudCIsInZhcmlhbnRNYW5hZ2VtZW50SWQiLCJnZXRWYXJpYW50QmFja1JlZmVyZW5jZSIsImdldERhdGEiLCJyZWdpc3RlckFwcGx5QXV0b21hdGljYWxseU9uU3RhbmRhcmRWYXJpYW50IiwiYmluZCIsIl9zZXRTaGFyZU1vZGVsIiwiZm5HZXRVc2VyIiwiT2JqZWN0UGF0aCIsImdldCIsIm9TaGFyZUluZm8iLCJib29rbWFya1RpdGxlIiwiZG9jdW1lbnQiLCJib29rbWFya0N1c3RvbVVybCIsInNIYXNoIiwiaGFzaGVyIiwiZ2V0SGFzaCIsIndpbmRvdyIsImxvY2F0aW9uIiwiaHJlZiIsImlzU2hhcmVJbkphbUFjdGl2ZSIsImlzSmFtQWN0aXZlIiwib1RlbXBsYXRlUHJpdmF0ZU1vZGVsIiwibUNhY2hlIiwiaWdub3JlZEZpZWxkcyIsImFDaGFydHMiLCJzQ2hhcnRFbnRpdHlQYXRoIiwic0NoYXJ0RW50aXR5U2V0Iiwic0NhY2hlS2V5IiwiZ2V0Tm90QXBwbGljYWJsZUZpbHRlcnMiLCJoaWRlRmlsdGVyQmFyIiwidXNlSGlkZGVuRmlsdGVyQmFyIiwidmFyaWFudHMiLCJnZXRWYXJpYW50cyIsImN1cnJlbnRWYXJpYW50IiwidmFyaWFudCIsIm9WTSIsIkF1dG8iLCJnZXRTdGFuZGFyZFZhcmlhbnRLZXkiLCJnZXRDdXJyZW50VmFyaWFudEtleSIsIm9Db25kaXRpb25zIiwic3RhcnRzV2l0aCIsInN0YW5kYXJkVmFyaWFudCIsImdldEV4ZWN1dGVPblNlbGVjdCIsImlzVGFibGVCb3VuZCIsIm9Jbm5lckNoYXJ0IiwiZ2V0Q29udHJvbERlbGVnYXRlIiwiX2dldENoYXJ0IiwiaXNCb3VuZCIsImdldEJpbmRpbmdJbmZvIiwiYnV0dG9uVmlzaWJsZSIsImdldFNlZ21lbnRlZEJ1dHRvbiIsInNlZ21lbnRlZEJ1dHRvbiIsImV2ZW50RGVsZWdhdGUiLCJvbkFmdGVyUmVuZGVyaW5nIiwicmVtb3ZlRXZlbnREZWxlZ2F0ZSIsImFkZEV2ZW50RGVsZWdhdGUiLCJzdiIsImdldFNlbGVjdGlvblZhcmlhbnQiLCJlcnIiLCJtZXNzYWdlIiwiRXJyb3IiLCJTdHJpbmciLCJnZXRGaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50IiwiU2VsZWN0aW9uVmFyaWFudCIsImhhbmRsZU1lc3NhZ2VCdXR0b25WaXNpYmlsaXR5Iiwic2V0U2hvd0Zvb3RlciIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciIsIk9iamVjdCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiTGlzdFJlcG9ydENvbnRyb2xsZXIuY29udHJvbGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBPYmplY3RQYXRoIGZyb20gXCJzYXAvYmFzZS91dGlsL09iamVjdFBhdGhcIjtcbmltcG9ydCB0eXBlIER5bmFtaWNQYWdlIGZyb20gXCJzYXAvZi9EeW5hbWljUGFnZVwiO1xuaW1wb3J0IHR5cGUgeyBEeW5hbWljUGFnZVRpdGxlJFN0YXRlQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL2YvRHluYW1pY1BhZ2VUaXRsZVwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIGV4dGVuc2libGUsIGZpbmFsRXh0ZW5zaW9uLCBwcml2YXRlRXh0ZW5zaW9uLCBwdWJsaWNFeHRlbnNpb24sIHVzaW5nRXh0ZW5zaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IEludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxSb3V0aW5nIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbFJvdXRpbmdcIjtcbmltcG9ydCBLUElNYW5hZ2VtZW50IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9LUElNYW5hZ2VtZW50XCI7XG5pbXBvcnQgTWVzc2FnZUhhbmRsZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgUGxhY2Vob2xkZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BsYWNlaG9sZGVyXCI7XG5pbXBvcnQgU2hhcmUgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1NoYXJlXCI7XG5pbXBvcnQgU2lkZUVmZmVjdHMgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1NpZGVFZmZlY3RzXCI7XG5pbXBvcnQgVmlld1N0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9WaWV3U3RhdGVcIjtcbmltcG9ydCB0eXBlIHsgTGlzdFJlcG9ydERlZmluaXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy90ZW1wbGF0ZXMvTGlzdFJlcG9ydENvbnZlcnRlclwiO1xuaW1wb3J0IEVkaXRTdGF0ZSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9FZGl0U3RhdGVcIjtcbmltcG9ydCBNZXNzYWdlU3RyaXAgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTWVzc2FnZVN0cmlwXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGdldFJlc291cmNlTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgKiBhcyBTdGFibGVJZEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IENvcmVMaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSB7IFRpdGxlSW5mb3JtYXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvcm9vdFZpZXcvUm9vdFZpZXdCYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgQnJlYWRjcnVtYnMgZnJvbSBcInNhcC9mZS9tYWNyb3MvQnJlYWRjcnVtYnNcIjtcbmltcG9ydCB0eXBlIENoYXJ0VHlwZSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9DaGFydFwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL0ZpbHRlckJhclwiO1xuaW1wb3J0IHR5cGUgTWFjcm9BUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvTWFjcm9BUElcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2VCdXR0b24gZnJvbSBcInNhcC9mZS9tYWNyb3MvTWVzc2FnZUJ1dHRvblwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvVGFibGVcIjtcbmltcG9ydCB0eXBlIENoYXJ0RGVsZWdhdGUgZnJvbSBcInNhcC9mZS9tYWNyb3MvY2hhcnQvQ2hhcnREZWxlZ2F0ZVwiO1xuaW1wb3J0IENoYXJ0VXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvY2hhcnQvQ2hhcnRVdGlsc1wiO1xuaW1wb3J0IHR5cGUgQ29udGVudFN3aXRjaGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRlbnRTd2l0Y2hlci9Db250ZW50U3dpdGNoZXJcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jb250cm9scy9GaWx0ZXJCYXJcIjtcbmltcG9ydCBGaWx0ZXJVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXIvRmlsdGVyVXRpbHNcIjtcbmltcG9ydCBTZWxlY3Rpb25WYXJpYW50IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9TZWxlY3Rpb25WYXJpYW50XCI7XG5pbXBvcnQgRXh0ZW5zaW9uQVBJIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL0xpc3RSZXBvcnQvRXh0ZW5zaW9uQVBJXCI7XG5pbXBvcnQgdHlwZSBNdWx0aXBsZU1vZGVDb250cm9sIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL0xpc3RSZXBvcnQvY29udHJvbHMvTXVsdGlwbGVNb2RlQ29udHJvbFwiO1xuaW1wb3J0IFNpZGVFZmZlY3RzT3ZlcnJpZGUgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvTGlzdFJlcG9ydC9vdmVycmlkZXMvU2lkZUVmZmVjdHNcIjtcbmltcG9ydCBUYWJsZVNjcm9sbGVyIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL1RhYmxlU2Nyb2xsZXJcIjtcbmltcG9ydCB0eXBlIEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgdHlwZSBJY29uVGFiQmFyIGZyb20gXCJzYXAvbS9JY29uVGFiQmFyXCI7XG5pbXBvcnQgdHlwZSBUYWJDb250YWluZXJJdGVtIGZyb20gXCJzYXAvbS9UYWJDb250YWluZXJJdGVtXCI7XG5pbXBvcnQgRGV2aWNlIGZyb20gXCJzYXAvdWkvRGV2aWNlXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBJbnZpc2libGVNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9JbnZpc2libGVNZXNzYWdlXCI7XG5pbXBvcnQgeyBJbnZpc2libGVNZXNzYWdlTW9kZSB9IGZyb20gXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgT3ZlcnJpZGVFeGVjdXRpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9PdmVycmlkZUV4ZWN1dGlvblwiO1xuaW1wb3J0IHR5cGUgVmFyaWFudE1hbmFnZW1lbnQgZnJvbSBcInNhcC91aS9mbC92YXJpYW50cy9WYXJpYW50TWFuYWdlbWVudFwiO1xuaW1wb3J0IHR5cGUgeyBWYXJpYW50TWFuYWdlbWVudCRTZWxlY3RFdmVudCB9IGZyb20gXCJzYXAvdWkvZmwvdmFyaWFudHMvVmFyaWFudE1hbmFnZW1lbnRcIjtcbmltcG9ydCB0eXBlIENoYXJ0IGZyb20gXCJzYXAvdWkvbWRjL0NoYXJ0XCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJGaWVsZCBmcm9tIFwic2FwL3VpL21kYy9GaWx0ZXJGaWVsZFwiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyQmFyQmFzZSRGaWx0ZXJzQ2hhbmdlZEV2ZW50IH0gZnJvbSBcInNhcC91aS9tZGMvZmlsdGVyYmFyL0ZpbHRlckJhckJhc2VcIjtcbmltcG9ydCBTdGF0ZVV0aWwgZnJvbSBcInNhcC91aS9tZGMvcDEzbi9TdGF0ZVV0aWxcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCBoYXNoZXIgZnJvbSBcInNhcC91aS90aGlyZHBhcnR5L2hhc2hlclwiO1xuaW1wb3J0IHR5cGUgeyBUaXRsZUFkZGl0aW9uYWxJbmZvIH0gZnJvbSBcInNhcC91c2hlbGwvdWk1c2VydmljZS9TaGVsbFVJU2VydmljZVwiO1xuaW1wb3J0ICogYXMgTGlzdFJlcG9ydFRlbXBsYXRpbmcgZnJvbSBcIi4vTGlzdFJlcG9ydFRlbXBsYXRpbmdcIjtcbmltcG9ydCBJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgTWVzc2FnZUhhbmRsZXJPdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCBTaGFyZU92ZXJyaWRlcyBmcm9tIFwiLi9vdmVycmlkZXMvU2hhcmVcIjtcbmltcG9ydCBWaWV3U3RhdGVPdmVycmlkZXMgZnJvbSBcIi4vb3ZlcnJpZGVzL1ZpZXdTdGF0ZVwiO1xuXG5jb25zdCBUZW1wbGF0ZUNvbnRlbnRWaWV3ID0gQ29yZUxpYnJhcnkuVGVtcGxhdGVDb250ZW50Vmlldyxcblx0SW5pdGlhbExvYWRNb2RlID0gQ29yZUxpYnJhcnkuSW5pdGlhbExvYWRNb2RlO1xuXG4vKipcbiAqIENvbnRyb2xsZXIgY2xhc3MgZm9yIHRoZSBsaXN0IHJlcG9ydCBwYWdlLCB1c2VkIGluc2lkZSBhbiBTQVAgRmlvcmkgZWxlbWVudHMgYXBwbGljYXRpb24uXG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKiBAcHVibGljXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydC5MaXN0UmVwb3J0Q29udHJvbGxlclwiKVxuY2xhc3MgTGlzdFJlcG9ydENvbnRyb2xsZXIgZXh0ZW5kcyBQYWdlQ29udHJvbGxlciB7XG5cdEB1c2luZ0V4dGVuc2lvbihcblx0XHRJbnRlcm5hbFJvdXRpbmcub3ZlcnJpZGUoe1xuXHRcdFx0b25BZnRlckJpbmRpbmc6IGZ1bmN0aW9uICh0aGlzOiBJbnRlcm5hbFJvdXRpbmcpIHtcblx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcikuX29uQWZ0ZXJCaW5kaW5nKCk7XG5cdFx0XHR9XG5cdFx0fSlcblx0KVxuXHRfcm91dGluZyE6IEludGVybmFsUm91dGluZztcblxuXHRAdXNpbmdFeHRlbnNpb24oXG5cdFx0SW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24ub3ZlcnJpZGUoe1xuXHRcdFx0Z2V0RW50aXR5U2V0OiBmdW5jdGlvbiAodGhpczogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdFx0cmV0dXJuICh0aGlzLmJhc2UgYXMgTGlzdFJlcG9ydENvbnRyb2xsZXIpLmdldEN1cnJlbnRFbnRpdHlTZXQoKTtcblx0XHRcdH1cblx0XHR9KVxuXHQpXG5cdF9pbnRlbnRCYXNlZE5hdmlnYXRpb24hOiBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbjtcblxuXHRAdXNpbmdFeHRlbnNpb24oU2lkZUVmZmVjdHMub3ZlcnJpZGUoU2lkZUVmZmVjdHNPdmVycmlkZSkpXG5cdHNpZGVFZmZlY3RzITogU2lkZUVmZmVjdHM7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKEludGVudEJhc2VkTmF2aWdhdGlvbi5vdmVycmlkZShJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSkpXG5cdGludGVudEJhc2VkTmF2aWdhdGlvbiE6IEludGVudEJhc2VkTmF2aWdhdGlvbjtcblxuXHRAdXNpbmdFeHRlbnNpb24oU2hhcmUub3ZlcnJpZGUoU2hhcmVPdmVycmlkZXMpKVxuXHRzaGFyZSE6IFNoYXJlO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihWaWV3U3RhdGUub3ZlcnJpZGUoVmlld1N0YXRlT3ZlcnJpZGVzKSlcblx0dmlld1N0YXRlITogVmlld1N0YXRlO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihLUElNYW5hZ2VtZW50KVxuXHRrcGlNYW5hZ2VtZW50ITogS1BJTWFuYWdlbWVudDtcblxuXHRAdXNpbmdFeHRlbnNpb24oUGxhY2Vob2xkZXIpXG5cdHBsYWNlaG9sZGVyITogUGxhY2Vob2xkZXI7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKE1lc3NhZ2VIYW5kbGVyLm92ZXJyaWRlKE1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUpKVxuXHRtZXNzYWdlSGFuZGxlciE6IE1lc3NhZ2VIYW5kbGVyO1xuXG5cdHByb3RlY3RlZCBleHRlbnNpb25BUEk/OiBFeHRlbnNpb25BUEk7XG5cblx0cHJpdmF0ZSBmaWx0ZXJCYXJDb25kaXRpb25zPzogdW5rbm93bjtcblxuXHRwcml2YXRlIGhhc1BlbmRpbmdDaGFydENoYW5nZXM/OiBib29sZWFuO1xuXG5cdHByaXZhdGUgaGFzUGVuZGluZ1RhYmxlQ2hhbmdlcz86IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgZXh0ZW5zaW9uIEFQSSBmb3IgdGhlIGN1cnJlbnQgcGFnZS5cblx0ICogQHB1YmxpY1xuXHQgKiBAcmV0dXJucyBUaGUgZXh0ZW5zaW9uIEFQSS5cblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRFeHRlbnNpb25BUEkoKTogRXh0ZW5zaW9uQVBJIHtcblx0XHRpZiAoIXRoaXMuZXh0ZW5zaW9uQVBJKSB7XG5cdFx0XHR0aGlzLmV4dGVuc2lvbkFQSSA9IG5ldyBFeHRlbnNpb25BUEkodGhpcyk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmV4dGVuc2lvbkFQSTtcblx0fVxuXG5cdG9uSW5pdCgpOiB2b2lkIHtcblx0XHRQYWdlQ29udHJvbGxlci5wcm90b3R5cGUub25Jbml0LmFwcGx5KHRoaXMpO1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0T3duZXJDb21wb25lbnQoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IHVpTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRPd25lckNvbXBvbmVudCgpLmdldEJpbmRpbmdDb250ZXh0KFwidWlcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3QgZmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdGlmIChmaWx0ZXJCYXIpIHtcblx0XHRcdHRoaXMuX3N0b3JlRmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudChmaWx0ZXJCYXIsIG9JbnRlcm5hbE1vZGVsQ29udGV4dCk7XG5cdFx0fVxuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImhhc1BlbmRpbmdGaWx0ZXJzXCIsIHRydWUpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImhpZGVEcmFmdEluZm9cIiwgZmFsc2UpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInVvbVwiLCB7fSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwic2NhbGVmYWN0b3JcIiwge30pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInNjYWxlZmFjdG9yTnVtYmVyXCIsIHt9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJjdXJyZW5jeVwiLCB7fSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaXNJbnNpZ2h0c1N1cHBvcnRlZFwiLCBmYWxzZSk7XG5cblx0XHRpZiAodGhpcy5faGFzTXVsdGlWaXN1YWxpemF0aW9ucygpKSB7XG5cdFx0XHRsZXQgYWxwQ29udGVudFZpZXcgPSB0aGlzLl9nZXREZWZhdWx0UGF0aCgpO1xuXHRcdFx0aWYgKCFEZXZpY2Uuc3lzdGVtLmRlc2t0b3AgJiYgYWxwQ29udGVudFZpZXcgPT09IFRlbXBsYXRlQ29udGVudFZpZXcuSHlicmlkKSB7XG5cdFx0XHRcdGFscENvbnRlbnRWaWV3ID0gVGVtcGxhdGVDb250ZW50Vmlldy5DaGFydDtcblx0XHRcdH1cblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImFscENvbnRlbnRWaWV3XCIsIGFscENvbnRlbnRWaWV3KTtcblx0XHR9XG5cblx0XHQvLyBTdG9yZSBjb25kaXRpb25zIGZyb20gZmlsdGVyIGJhclxuXHRcdC8vIHRoaXMgaXMgbGF0ZXIgdXNlZCBiZWZvcmUgbmF2aWdhdGlvbiB0byBnZXQgY29uZGl0aW9ucyBhcHBsaWVkIG9uIHRoZSBmaWx0ZXIgYmFyXG5cdFx0dGhpcy5maWx0ZXJCYXJDb25kaXRpb25zID0ge307XG5cblx0XHQvLyBBcyBBcHBTdGF0ZUhhbmRsZXIuYXBwbHlBcHBTdGF0ZSB0cmlnZ2VycyBhIG5hdmlnYXRpb24gd2Ugd2FudCB0byBtYWtlIHN1cmUgaXQgd2lsbFxuXHRcdC8vIGhhcHBlbiBhZnRlciB0aGUgcm91dGVNYXRjaCBldmVudCBoYXMgYmVlbiBwcm9jZXNzZWQgKG90aGVyd2lzZSB0aGUgcm91dGVyIGdldHMgYnJva2VuKVxuXHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um91dGVyUHJveHkoKS53YWl0Rm9yUm91dGVNYXRjaEJlZm9yZU5hdmlnYXRpb24oKTtcblxuXHRcdC8vIENvbmZpZ3VyZSB0aGUgaW5pdGlhbCBsb2FkIHNldHRpbmdzXG5cdFx0dGhpcy5fc2V0SW5pdExvYWQoKTtcblx0XHR1aU1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcIlwiLCB7IGlzRWRpdGFibGU6IGZhbHNlIH0pO1xuXHR9XG5cblx0b25CZWZvcmVSZW5kZXJpbmcoKTogdm9pZCB7XG5cdFx0UGFnZUNvbnRyb2xsZXIucHJvdG90eXBlLm9uQmVmb3JlUmVuZGVyaW5nLmFwcGx5KHRoaXMpO1xuXHRcdGNvbnN0IGR5bmFtaWNQYWdlID0gdGhpcy5fZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sKCk7XG5cdFx0Y29uc3QgZHlubWljUGFnZUhlYWRlclRpdGxlID0gZHluYW1pY1BhZ2U/LmdldFRpdGxlKCk7XG5cdFx0Y29uc3QgYnJlYWRjcnVtYnNCQiA9IGR5bm1pY1BhZ2VIZWFkZXJUaXRsZS5nZXRCcmVhZGNydW1icygpIGFzIEJyZWFkY3J1bWJzIHwgdW5kZWZpbmVkO1xuXHRcdGlmIChicmVhZGNydW1ic0JCKSB7XG5cdFx0XHRicmVhZGNydW1ic0JCLnNldEJyZWFkY3J1bWJMaW5rcyhcIlwiKTtcblx0XHR9XG5cdH1cblxuXHRvbkV4aXQoKTogdm9pZCB7XG5cdFx0ZGVsZXRlIHRoaXMuZmlsdGVyQmFyQ29uZGl0aW9ucztcblx0XHRpZiAodGhpcy5leHRlbnNpb25BUEkpIHtcblx0XHRcdHRoaXMuZXh0ZW5zaW9uQVBJLmRlc3Ryb3koKTtcblx0XHR9XG5cdFx0ZGVsZXRlIHRoaXMuZXh0ZW5zaW9uQVBJO1xuXHR9XG5cblx0YXN5bmMgX29uQWZ0ZXJCaW5kaW5nKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRpZiAoIWludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiaW5pdGlhbFZhcmlhbnRBcHBsaWVkXCIpKSB7XG5cdFx0XHR0aGlzLnBhZ2VSZWFkeS53YWl0Rm9yKHRoaXMuX2FwcGx5QXBwU3RhdGUoKSk7XG5cdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImluaXRpYWxWYXJpYW50QXBwbGllZFwiLCB0cnVlKTtcblx0XHR9XG5cdFx0YXdhaXQgdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb290Vmlld0NvbnRyb2xsZXIoKS53YWl0Rm9yRWRpdENsZWFudXAoKTtcblx0XHRjb25zdCBhVGFibGVzID0gdGhpcy5fZ2V0Q29udHJvbHMoXCJ0YWJsZVwiKSBhcyBUYWJsZVtdO1xuXHRcdGxldCB1cGRhdGVBY3Rpb25zID0gdHJ1ZTtcblx0XHRpZiAoRWRpdFN0YXRlLmlzRWRpdFN0YXRlRGlydHkoKSkge1xuXHRcdFx0Ly8gVGVybWluYXRlIGFueSBsaW5nZXJpbmcgQUJBUCBkcmFmdCBzZXNzaW9uIHdoZW4gcmV0dXJuaW5nIGZyb20gYW4gZWRpdCBzZXNzaW9uXG5cdFx0XHQvLyBUaGlzIGhhbmRsZXMgdGhlIGNhc2Ugd2hlcmUgdGhlIHVzZXIgbmF2aWdhdGVzIGJhY2sgdmlhIGJyb3dzZXIgYmFjayBidXR0b24sXG5cdFx0XHQvLyB3aGljaCBkb2Vzbid0IHRyaWdnZXIgdGhlIGRyYWZ0IGRhdGEgbG9zcyBkaWFsb2dcblx0XHRcdGNvbnN0IG1vZGVsOiBPRGF0YU1vZGVsID0gdGhpcy5nZXRNb2RlbCgpO1xuXHRcdFx0aWYgKG1vZGVsKSB7XG5cdFx0XHRcdHRoaXMuZWRpdEZsb3cudGVybWluYXRlRHJhZnRTZXNzaW9uKG1vZGVsKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpPy5pbnZhbGlkYXRlQ29udGVudCgpO1xuXHRcdFx0Y29uc3QgdGFibGUgPSB0aGlzLl9nZXRUYWJsZSgpO1xuXHRcdFx0Y29uc3Qgb1RhYmxlQmluZGluZyA9IHRhYmxlPy5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0XHRpZiAob1RhYmxlQmluZGluZykge1xuXHRcdFx0XHR1cGRhdGVBY3Rpb25zID0gZmFsc2U7XG5cdFx0XHRcdGNvbnN0IHRhYmxlQVBJID0gdGFibGU/LmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdFx0XHQvLyBVcGRhdGUgdGhlIHRhYmxlIGNvbnRlbnQgdXNpbmcgc2lkZSBlZmZlY3RzIChsaXN0QmluZGluZy5yZWZyZXNoIGRvZXNuJ3Qga2VlcCBleHBhbnNpb24gc3RhdGVzIGluIGEgVHJlZVRhYmxlKVxuXHRcdFx0XHRDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy5nZXRWaWV3KCkpXG5cdFx0XHRcdFx0LmdldFJvdXRpbmdTZXJ2aWNlKClcblx0XHRcdFx0XHQud2FpdEZvckJpbmRpbmdDbGVhbnVwKClcblx0XHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0XHRvVGFibGVCaW5kaW5nLmF0dGFjaEV2ZW50T25jZShcImRhdGFSZWNlaXZlZFwiLCAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuX3VwZGF0ZVRhYmxlQWN0aW9ucyhhVGFibGVzKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0aWYgKHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdFx0XHRcdFx0XHQvLyBBcyB0aGUgcmVmcmVzaCBvbiBhIFRyZWVUYWJsZSB1c2VzIHNpZGUtZWZmZWN0cywgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHBlbmRpbmcgY2hhbmdlc1xuXHRcdFx0XHRcdFx0XHQvLyBiZWZvcmUgdGhlIHNpZGUtZWZmZWN0cyBhcmUgcXVlcmllZCAoZS5nLiBmYWlsZWQgUEFUQ0ggcXVlcmllcyB0aGF0IHdvdWxkIGJlIHJlc2VudCB0b2dldGhlciB3aXRoIHNpZGUgZWZmZWN0cyBHRVQpXG5cdFx0XHRcdFx0XHRcdHRoaXMuZ2V0TW9kZWwoKS5yZXNldENoYW5nZXMoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRhYmxlQVBJLnJlZnJlc2goKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdFx0TG9nLndhcm5pbmcoXCJFcnJvciB3aGlsZSB3YWl0aW5nIHJlZnJlc2hpbmcgTGlzdFJlcG9ydCB0YWJsZVwiLCBlKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdEVkaXRTdGF0ZS5zZXRFZGl0U3RhdGVQcm9jZXNzZWQoKTtcblx0XHR9XG5cblx0XHRpZiAodXBkYXRlQWN0aW9ucykge1xuXHRcdFx0dGhpcy5fdXBkYXRlVGFibGVBY3Rpb25zKGFUYWJsZXMpO1xuXHRcdH1cblx0XHRjb25zdCBlbnZpcm9ubWVudENhcGFiaWxpdGllcyA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLmdldFZpZXcoKSkuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKTtcblx0XHRlbnZpcm9ubWVudENhcGFiaWxpdGllc1xuXHRcdFx0LmlzSW5zaWdodHNFbmFibGVkKClcblx0XHRcdC50aGVuKChpc0luc2lnaHRzRW5hYmxlZDogYm9vbGVhbikgPT4ge1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImlzSW5zaWdodHNTdXBwb3J0ZWRcIiwgaXNJbnNpZ2h0c0VuYWJsZWQpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKChlcnJvcjogdW5rbm93bikgPT4ge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBjaGVja2luZyBpZiBpbnNpZ2h0cyBhcmUgZW5hYmxlZFwiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRmb3JtYXR0ZXJzID0ge1xuXHRcdHNldEFMUENvbnRyb2xNZXNzYWdlU3RyaXAoXG5cdFx0XHR0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlcixcblx0XHRcdGFJZ25vcmVkRmllbGRzOiBzdHJpbmdbXSxcblx0XHRcdGJJc0NoYXJ0OiBib29sZWFuIHwgc3RyaW5nLFxuXHRcdFx0b0FwcGx5U3VwcG9ydGVkPzogeyBlbmFibGVTZWFyY2g6IGJvb2xlYW4gfVxuXHRcdCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0XHRsZXQgc1RleHQgPSBcIlwiO1xuXHRcdFx0YklzQ2hhcnQgPSBiSXNDaGFydCA9PT0gXCJ0cnVlXCIgfHwgYklzQ2hhcnQgPT09IHRydWU7XG5cdFx0XHRjb25zdCBvRmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdFx0aWYgKG9GaWx0ZXJCYXIgJiYgQXJyYXkuaXNBcnJheShhSWdub3JlZEZpZWxkcykgJiYgYUlnbm9yZWRGaWVsZHMubGVuZ3RoID4gMCAmJiBiSXNDaGFydCkge1xuXHRcdFx0XHRjb25zdCBhSWdub3JlZExhYmVscyA9IE1lc3NhZ2VTdHJpcC5nZXRMYWJlbHMoXG5cdFx0XHRcdFx0YUlnbm9yZWRGaWVsZHMsXG5cdFx0XHRcdFx0b0ZpbHRlckJhci5kYXRhKFwiZW50aXR5VHlwZVwiKSxcblx0XHRcdFx0XHRvRmlsdGVyQmFyLFxuXHRcdFx0XHRcdGdldFJlc291cmNlTW9kZWwob0ZpbHRlckJhcilcblx0XHRcdFx0KTtcblx0XHRcdFx0Y29uc3QgYklzU2VhcmNoSWdub3JlZCA9ICFvQXBwbHlTdXBwb3J0ZWQ/LmVuYWJsZVNlYXJjaDtcblx0XHRcdFx0c1RleHQgPSBiSXNDaGFydFxuXHRcdFx0XHRcdD8gTWVzc2FnZVN0cmlwLmdldEFMUFRleHQoYUlnbm9yZWRMYWJlbHMsIG9GaWx0ZXJCYXIsIGJJc1NlYXJjaElnbm9yZWQpXG5cdFx0XHRcdFx0OiBNZXNzYWdlU3RyaXAuZ2V0VGV4dChhSWdub3JlZExhYmVscywgb0ZpbHRlckJhciwgXCJcIik7XG5cdFx0XHRcdHJldHVybiBzVGV4dDtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShcIkFmdGVyXCIpXG5cdGFzeW5jIG9uUGFnZVJlYWR5KG1QYXJhbWV0ZXJzOiB7IGZvcmNlRm9jdXM/OiBib29sZWFuIH0pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAobVBhcmFtZXRlcnMuZm9yY2VGb2N1cykge1xuXHRcdFx0dGhpcy5fc2V0SW5pdGlhbEZvY3VzKCk7XG5cdFx0fVxuXHRcdC8vIFJlbW92ZSB0aGUgaGFuZGxlciBvbiBiYWNrIG5hdmlnYXRpb24gdGhhdCBkaXNwbGF5cyBEcmFmdCBjb25maXJtYXRpb25cblx0XHRhd2FpdCB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFNoZWxsU2VydmljZXMoKS5zZXRCYWNrTmF2aWdhdGlvbih1bmRlZmluZWQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCBjYWxsZWQgd2hlbiB0aGUgY29udGVudCBvZiBhIGN1c3RvbSB2aWV3IHVzZWQgaW4gYSBsaXN0IHJlcG9ydCBuZWVkcyB0byBiZSByZWZyZXNoZWQuXG5cdCAqIFRoaXMgaGFwcGVucyBlaXRoZXIgd2hlbiB0aGVyZSBpcyBhIGNoYW5nZSBvbiB0aGUgRmlsdGVyQmFyIGFuZCB0aGUgc2VhcmNoIGlzIHRyaWdnZXJlZCxcblx0ICogb3Igd2hlbiBhIHRhYiB3aXRoIGN1c3RvbSBjb250ZW50IGlzIHNlbGVjdGVkLFxuXHQgKiBvciB3aGVuIHRoZSB2aWV3IGlzIGZvcmNlZCB0byBiZSByZWZyZXNoZWQgdGhyb3VnaCB0aGUgRXh0ZW5zaW9uIEFQSSBmb3IgdGhlIGxpc3QgcmVwb3J0J3MgcHVibGljIG1ldGhvZCBzZXRUYWJDb250ZW50VG9CZVJlZnJlc2hlZE9uTmV4dE9wZW5pbmcuXG5cdCAqIFRoaXMgbWV0aG9kIGNhbiBiZSBvdmVyd3JpdHRlbiBieSB0aGUgY29udHJvbGxlciBleHRlbnNpb24gZm9yIGN1c3RvbWl6YXRpb24uXG5cdCAqIEBwYXJhbSBtUGFyYW1ldGVycyBNYXAgY29udGFpbmluZyB0aGUgZmlsdGVyIGNvbmRpdGlvbnMgb2YgdGhlIEZpbHRlckJhciwgdGhlIGN1cnJlbnRUYWJJRCxcblx0ICogYW5kIHRoZSB2aWV3IHJlZnJlc2ggY2F1c2Ugc3VjaCBhcyB0YWJDaGFuZ2VkLCBzZWFyY2gsIG9yIGZvcmNlZFJlZnJlc2guXG5cdCAqIFNlZSB0aGUgZm9sbG93aW5nIGV4YW1wbGUgb2YgYSBtYXA6XG5cdCAqIDxjb2RlPjxwcmU+XG5cdCAqIFx0e1xuXHQgKiBcdFx0ZmlsdGVyQ29uZGl0aW9uczoge1xuXHQgKiBcdFx0XHRDb3VudHJ5OiBbXG5cdCAqIFx0XHRcdFx0e1xuXHQgKiBcdFx0XHRcdFx0b3BlcmF0b3I6IFwiRVFcIlxuXHQgKlx0XHRcdFx0XHR2YWxpZGF0ZWQ6IFwiTm90VmFsaWRhdGVkXCJcblx0ICpcdFx0XHRcdFx0dmFsdWVzOiBbXCJHZXJtYW55XCIsIC4uLl1cblx0ICogXHRcdFx0XHR9LFxuXHQgKiBcdFx0XHRcdC4uLlxuXHQgKiBcdFx0XHRdXG5cdCAqIFx0XHRcdC4uLlxuXHQgKiBcdFx0fSxcblx0ICpcdFx0Y3VycmVudFRhYklkOiBcImZlOjpDdXN0b21UYWI6OnRhYjFcIixcblx0ICpcdFx0cmVmcmVzaENhdXNlOiBcInRhYkNoYW5nZWRcIiB8IFwic2VhcmNoXCIgfCBcImZvcmNlZFJlZnJlc2hcIlxuXHQgKlx0fVxuXHQgKiA8L3ByZT48L2NvZGU+XG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRvblZpZXdOZWVkc1JlZnJlc2gobVBhcmFtZXRlcnM6IHVua25vd24pOiB2b2lkIHtcblx0XHQvKiBUbyBiZSBvdmVycmlkZW4gKi9cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgY2FsbGVkIHdoZW4gYSBmaWx0ZXIgb3Igc2VhcmNoIHZhbHVlIGhhcyBiZWVuIGNoYW5nZWQgaW4gdGhlIEZpbHRlckJhcixcblx0ICogYnV0IGhhcyBub3QgYmVlbiB2YWxpZGF0ZWQgeWV0IGJ5IHRoZSBlbmQgdXNlciB3aXRoIHRoZSAnR28nIG9yICdTZWFyY2gnIGJ1dHRvbi5cblx0ICogVHlwaWNhbGx5LCB0aGUgY29udGVudCBvZiB0aGUgY3VycmVudCB0YWIgaXMgZ3JleWVkIG91dCB1bnRpbCB0aGUgZmlsdGVycyBhcmUgdmFsaWRhdGVkLlxuXHQgKiBUaGlzIG1ldGhvZCBjYW4gYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIGZvciBjdXN0b21pemF0aW9uLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdG9uUGVuZGluZ0ZpbHRlcnMoKTogdm9pZCB7XG5cdFx0LyogVG8gYmUgb3ZlcnJpZGVuICovXG5cdH1cblxuXHRnZXRDdXJyZW50RW50aXR5U2V0KCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldFRhYmxlKCk/LmRhdGEoXCJ0YXJnZXRDb2xsZWN0aW9uUGF0aFwiKS5zbGljZSgxKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgY2FsbGVkIHdoZW4gdGhlICdDbGVhcicgYnV0dG9uIG9uIHRoZSBGaWx0ZXJCYXIgaXMgcHJlc3NlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRvbkFmdGVyQ2xlYXIoKTogdm9pZCB7XG5cdFx0LyogVG8gYmUgb3ZlcnJpZGVuICovXG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaW5pdGlhdGVzIHRoZSB1cGRhdGUgb2YgdGhlIGVuYWJsZWQgc3RhdGUgb2YgdGhlIERhdGFGaWVsZEZvckFjdGlvbiBhbmQgdGhlIHZpc2libGUgc3RhdGUgb2YgdGhlIERhdGFGaWVsZEZvcklCTiBidXR0b25zLlxuXHQgKiBAcGFyYW0gYVRhYmxlcyBBcnJheSBvZiB0YWJsZXMgaW4gdGhlIGxpc3QgcmVwb3J0XG5cdCAqL1xuXHRfdXBkYXRlVGFibGVBY3Rpb25zKGFUYWJsZXM6IFRhYmxlW10pOiB2b2lkIHtcblx0XHRsZXQgYUlCTkFjdGlvbnM6IFVJNUVsZW1lbnRbXSA9IFtdO1xuXHRcdGFUYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAob1RhYmxlKSB7XG5cdFx0XHRhSUJOQWN0aW9ucyA9IENvbW1vblV0aWxzLmdldElCTkFjdGlvbnMob1RhYmxlLCBhSUJOQWN0aW9ucyk7XG5cdFx0fSk7XG5cdFx0Q29tbW9uVXRpbHMudXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkoYUlCTkFjdGlvbnMsIHRoaXMuZ2V0VmlldygpKTtcblx0XHRDb21tb25VdGlscy51cGRhdGVNZW51QnV0dG9uVmlzaWJsaXR5KGFJQk5BY3Rpb25zKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBzY3JvbGxzIHRvIGEgc3BlY2lmaWMgcm93IG9uIGFsbCB0aGUgYXZhaWxhYmxlIHRhYmxlcy5cblx0ICogQHBhcmFtIHNSb3dQYXRoIFRoZSBwYXRoIG9mIHRoZSB0YWJsZSByb3cgY29udGV4dCB0byBiZSBzY3JvbGxlZCB0b1xuXHQgKi9cblx0X3Njcm9sbFRhYmxlc1RvUm93KHNSb3dQYXRoOiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLl9nZXRDb250cm9scyhcInRhYmxlXCIpLmZvckVhY2goZnVuY3Rpb24gKG9UYWJsZTogQ29udHJvbCkge1xuXHRcdFx0VGFibGVTY3JvbGxlci5zY3JvbGxUYWJsZVRvUm93KG9UYWJsZSBhcyBUYWJsZSwgc1Jvd1BhdGgpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgYSBzaWxlbnQgZm9jdXMgb24gdGhlIGZpbHRlciBmaWVsZC4gU3VwcHJlc3NlcyB0aGUgb3BlbmluZyBvZiB0aGUgdHlwZS1haGVhZCBwb3B1cC5cblx0ICogQHBhcmFtIGZpbHRlckZpZWxkIFRoZSBmaWVsZCB3aGVyZSB0aGUgZm9jdXMgc2hvdWxkIGJlIHNldCBhZnRlciB0aGUgaW5pdGlhbCBsb2FkXG5cdCAqL1xuXHRfZm9jdXNTaWxlbnQoZmlsdGVyRmllbGQ6IEZpbHRlckZpZWxkKTogdm9pZCB7XG5cdFx0Y29uc3QgZm9jdXNJbmZvID0gZmlsdGVyRmllbGQuZ2V0Rm9jdXNJbmZvKCkgYXMgeyB0YXJnZXRJbmZvOiBvYmplY3QgfTtcblx0XHRmb2N1c0luZm8udGFyZ2V0SW5mbyA9IHsgc2lsZW50OiB0cnVlIH07XG5cdFx0ZmlsdGVyRmllbGQuZm9jdXMoZm9jdXNJbmZvKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBmb2N1cyB3aGVuIHRoZSBoZWFkZXIgaXMgZXhwYW5kZWQuXG5cdCAqIFRoZSBwcmlvcml0aWVzIGFyZTogKDEpIGZpcnN0IGVtcHR5IG1hbmRhdG9yeSBmaWx0ZXIgZmllbGQsICgyKSBzZWFyY2ggZmllbGQgaWYgZm9jdXNhYmxlIG9yIGZpcnN0IGZpbHRlciBmaWVsZCwgYW5kICgzKSBHbyBidXR0b24uXG5cdCAqIEBwYXJhbSBmaWx0ZXJCYXIgVGhlIGZpbHRlciBiYXIgY29udHJvbC5cblx0ICovXG5cdHByaXZhdGUgX2ZvY3VzV2hlbkhlYWRlckV4cGFuZGVkKGZpbHRlckJhcjogRmlsdGVyQmFyKTogdm9pZCB7XG5cdFx0Y29uc3QgZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkID0gZmlsdGVyQmFyLmdldEZpbHRlckl0ZW1zKCkuZmluZChmdW5jdGlvbiAob0ZpbHRlckl0ZW06IEZpbHRlckZpZWxkKSB7XG5cdFx0XHRyZXR1cm4gb0ZpbHRlckl0ZW0uZ2V0UmVxdWlyZWQoKSAmJiBvRmlsdGVySXRlbS5nZXRDb25kaXRpb25zKCkubGVuZ3RoID09PSAwO1xuXHRcdH0pO1xuXHRcdC8vRm9jdXNpbmcgb24gdGhlIGZpcnN0IGVtcHR5IG1hbmRhdG9yeSBmaWx0ZXIgZmllbGQsIG9yIG9uIHRoZSBmaXJzdCBmaWx0ZXIgZmllbGQgaWYgdGhlIHRhYmxlIGRhdGEgaXMgbG9hZGVkXG5cdFx0Ly8gRG8gYSBcInNpbGVudFwiIGZvY3VzIGZvciBGaWx0ZXJGaWVsZCwgYnkgYWRkaW5nIHRoZSBzaWxlbnQgYXR0cmlidXRlLiBUaGUgc2lsZW50IGF0dHJpYnV0ZSBzdXBwcmVzc2VzIHR5cGVhaGVhZCBvcGVuaW5nLlxuXHRcdGlmIChmaXJzdEVtcHR5TWFuZGF0b3J5RmllbGQpIHtcblx0XHRcdGlmIChmaXJzdEVtcHR5TWFuZGF0b3J5RmllbGQuaXNBPEZpbHRlckZpZWxkPihcInNhcC51aS5tZGMuRmlsdGVyRmllbGRcIikpIHtcblx0XHRcdFx0dGhpcy5fZm9jdXNTaWxlbnQoZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdChmaXJzdEVtcHR5TWFuZGF0b3J5RmllbGQgYXMgQ29udHJvbCkuZm9jdXMoKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHRoaXMuX2lzSW5pdExvYWRFbmFibGVkKCkgJiYgZmlsdGVyQmFyLmdldEZpbHRlckl0ZW1zKCkubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly8gSWYgdGhlcmUgaXMgbm8gZW1wdHkgbWFuZGF0b3J5IGZpbHRlciBmaWVsZCwgc2V0IHNpbGVudCBmb2N1cyBvbiBzZWFyY2ggZmllbGQgKGlmIGZvY3VzYWJsZSksIG90aGVyd2lzZSBvbiBmaXJzdCBmaWx0ZXIgZmllbGRcblx0XHRcdGNvbnN0IGJhc2ljU2VhcmNoRmllbGQgPSBmaWx0ZXJCYXIuZ2V0QmFzaWNTZWFyY2hGaWVsZCgpO1xuXHRcdFx0Y29uc3QgZmllbGRUb0ZvY3VzID0gYmFzaWNTZWFyY2hGaWVsZD8uaXNGb2N1c2FibGUoKSA/IGJhc2ljU2VhcmNoRmllbGQgOiBmaWx0ZXJCYXIuZ2V0RmlsdGVySXRlbXMoKVswXTtcblx0XHRcdGlmIChmaWVsZFRvRm9jdXMuaXNBPEZpbHRlckZpZWxkPihcInNhcC51aS5tZGMuRmlsdGVyRmllbGRcIikpIHtcblx0XHRcdFx0dGhpcy5fZm9jdXNTaWxlbnQoZmllbGRUb0ZvY3VzKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdChmaWVsZFRvRm9jdXMgYXMgQ29udHJvbCkuZm9jdXMoKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly9Gb2N1c2luZyBvbiB0aGUgR28gYnV0dG9uXG5cdFx0XHR0aGlzLmdldFZpZXcoKS5ieUlkKGAke3RoaXMuX2dldEZpbHRlckJhckNvbnRyb2xJZCgpfS1idG5TZWFyY2hgKT8uZm9jdXMoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVHJpZXMgdG8gZm9jdXMgdGhlIGVtcGhhc2l6ZWQgKHByaW1hcnkpIGhlYWRlciBhY3Rpb24gaW4gdGhlIER5bmFtaWNQYWdlVGl0bGUgYWN0aW9ucy5cblx0ICogVGhpcyBpcyB1c2VkIHdoZW4gbm8gRmlsdGVyQmFyIGlzIHJlbmRlcmVkIHNvIHRoYXQgdGhlIGZpcnN0IGFjdGlvbmFibGUgY29udHJvbCByZWNlaXZlcyBmb2N1cy5cblx0ICogQHJldHVybnMgVHJ1ZSBpZiBhbiBlbXBoYXNpemVkIGFuZCBmb2N1c2FibGUgYWN0aW9uIGlzIGZvdW5kIGFuZCBmb2N1c2VkXG5cdCAqL1xuXHRwcml2YXRlIHNldEZvY3VzT25FbXBoYXNpemVkSGVhZGVyQWN0aW9uKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGR5bmFtaWNQYWdlID0gdGhpcy5fZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sKCk7XG5cdFx0Y29uc3QgdGl0bGUgPSBkeW5hbWljUGFnZS5nZXRUaXRsZSgpO1xuXHRcdGNvbnN0IGFjdGlvbnMgPSB0aXRsZS5nZXRBY3Rpb25zKCk7XG5cdFx0Y29uc3QgZW1waGFzaXplZEJ1dHRvbiA9IGFjdGlvbnMuZmluZCgoY29udHJvbCkgPT4ge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0Y29udHJvbCAmJlxuXHRcdFx0XHRjb250cm9sLmlzQT8uKFwic2FwLm0uQnV0dG9uXCIpICYmXG5cdFx0XHRcdChjb250cm9sIGFzIEJ1dHRvbikuZ2V0VHlwZSgpID09PSBcIkVtcGhhc2l6ZWRcIiAmJlxuXHRcdFx0XHRjb250cm9sLmdldFZpc2libGUoKSAmJlxuXHRcdFx0XHQoY29udHJvbCBhcyBCdXR0b24pLmdldEVuYWJsZWQoKSAhPT0gZmFsc2Vcblx0XHRcdCk7XG5cdFx0fSk7XG5cdFx0aWYgKGVtcGhhc2l6ZWRCdXR0b24pIHtcblx0XHRcdGVtcGhhc2l6ZWRCdXR0b24uZm9jdXMoKTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgaW5pdGlhbCBmb2N1cyBpbiB0aGUgTGlzdFJlcG9ydCBiYXNlZCBvbiB0aGUgVVggZm9jdXMgcnVsZXMuXG5cdCAqL1xuXHRhc3luYyBfc2V0SW5pdGlhbEZvY3VzKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8vIEluIEZDTCwgd2hlbiBuYXZpZ2F0aW5nIGZvcndhcmQgdG8gYW4gT2JqZWN0IFBhZ2UgKGUuZy4gYWZ0ZXIgQ3JlYXRlKSwgdGhlIHJvdXRlTWF0Y2hlZCBldmVudFxuXHRcdC8vIGZpcmVzIGZpcnN0IGZvciB0aGUgcGFyZW50IHJvdXRlIChMUiBvbmx5KSBiZWZvcmUgdGhlIGNoaWxkIHJvdXRlIChMUitPUCkuIFRoaXMgY2F1c2VzXG5cdFx0Ly8gb25QYWdlUmVhZHkgdG8gYmUgY2FsbGVkIG9uIHRoZSBMUiB3aXRoIGZvcmNlRm9jdXM9dHJ1ZSwgc3RlYWxpbmcgZm9jdXMgZnJvbSB0aGUgT1AuXG5cdFx0Ly8gR3VhcmQ6IHNraXAgZm9jdXMgaWYgdGhlIEZDTCBpcyBzaG93aW5nIG1vcmUgdGhhbiBvbmUgY29sdW1uIChkZWVwZXIgcGFnZSBpcyB2aXNpYmxlKS5cblx0XHRjb25zdCByb290Vmlld0NvbnRyb2xsZXIgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvb3RWaWV3Q29udHJvbGxlcigpO1xuXHRcdGlmIChyb290Vmlld0NvbnRyb2xsZXIuaXNGY2xFbmFibGVkKCkgJiYgcm9vdFZpZXdDb250cm9sbGVyLmdldFZpc2libGVWaWV3cygpLmxlbmd0aCA+IDEpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgZHluYW1pY1BhZ2UgPSB0aGlzLl9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2woKSxcblx0XHRcdGlzSGVhZGVyRXhwYW5kZWQgPSBkeW5hbWljUGFnZS5nZXRIZWFkZXJFeHBhbmRlZCgpLFxuXHRcdFx0ZmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpIGFzIEZpbHRlckJhcjtcblx0XHRpZiAoZmlsdGVyQmFyICYmICF0aGlzLl9pc0ZpbHRlckJhckhpZGRlblVzZWQoKSkge1xuXHRcdFx0Ly9FbmFibGluZyBtYW5kYXRvcnkgZmlsdGVyIGZpZWxkcyBtZXNzYWdlIGRpYWxvZ1xuXHRcdFx0YXdhaXQgZmlsdGVyQmFyLndoZW5Jbml0aWFsaXplZCgpO1xuXHRcdFx0aWYgKCFmaWx0ZXJCYXIuZ2V0U2hvd01lc3NhZ2VzKCkpIHtcblx0XHRcdFx0ZmlsdGVyQmFyLnNldFNob3dNZXNzYWdlcyh0cnVlKTtcblx0XHRcdH1cblx0XHRcdGlmIChpc0hlYWRlckV4cGFuZGVkKSB7XG5cdFx0XHRcdHRoaXMuX2ZvY3VzV2hlbkhlYWRlckV4cGFuZGVkKGZpbHRlckJhcik7XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMuX2lzSW5pdExvYWRFbmFibGVkKCkpIHtcblx0XHRcdFx0YXdhaXQgdGhpcy5fZ2V0VGFibGUoKVxuXHRcdFx0XHRcdD8uZm9jdXNSb3coMClcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0XHRpZiAoZXJyb3IpIHtcblx0XHRcdFx0XHRcdFx0Ly8gaWYgdGhlcmUgaXMgbm8gZXJyb3IgaXQgY2FuIGp1c3QgYmUgdGhhdCB0aGVyZSBhcmUgbm8gbGluZXMgdG8gZm9jdXNcblx0XHRcdFx0XHRcdFx0TG9nLmluZm8oXCJFcnJvciB3aGlsZSBzZXR0aW5nIGluaXRpYWwgZm9jdXMgb24gdGhlIHRhYmxlIFwiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBObyBGaWx0ZXJCYXIgcmVuZGVyZWQ6IGZvY3VzIHRoZSBlbXBoYXNpemVkIChwcmltYXJ5KSBoZWFkZXIgYWN0aW9uIGlmIGF2YWlsYWJsZVxuXHRcdFx0aWYgKHRoaXMuc2V0Rm9jdXNPbkVtcGhhc2l6ZWRIZWFkZXJBY3Rpb24oKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRhd2FpdCB0aGlzLl9nZXRUYWJsZSgpXG5cdFx0XHRcdD8uZm9jdXNSb3coMClcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdGlmIChlcnJvcikge1xuXHRcdFx0XHRcdFx0Ly8gaWYgdGhlcmUgaXMgbm8gZXJyb3IgaXQgY2FuIGp1c3QgYmUgdGhhdCB0aGVyZSBhcmUgbm8gbGluZXMgdG8gZm9jdXNcblx0XHRcdFx0XHRcdExvZy5pbmZvKFwiRXJyb3Igd2hpbGUgc2V0dGluZyBpbml0aWFsIGZvY3VzIG9uIHRoZSB0YWJsZSBcIiwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBPdmVycmlkZSB0byBnZXQgdGhlIGJyb3dzZXIgdGl0bGUgb2YgdGhlIExSIHBhZ2UuXG5cdCAqIEBwYXJhbSBfcGFnZVRpdGxlSW5mb3JtYXRpb24gUHJlc2VudCBwYWdlIHRpdGxlIGluZm9ybWF0aW9uXG5cdCAqIEByZXR1cm5zIFRpdGxlIGluZm9ybWF0aW9uIHRvIGJlIHVzZWQgYnkgc2hlbGwgc2VydmljZXMgZm9yIGJyb3dzZXIgdGl0bGVcblx0ICovXG5cdGFzeW5jIF9nZXRCcm93c2VyVGl0bGUoX3BhZ2VUaXRsZUluZm9ybWF0aW9uOiBUaXRsZUluZm9ybWF0aW9uKTogUHJvbWlzZTxUaXRsZUFkZGl0aW9uYWxJbmZvIHwgdW5kZWZpbmVkPiB7XG5cdFx0Ly8gV2Ugc2hhbGwgZmFsbGJhY2sgdG8gZGVmYXVsIGFwcCB0aXRsZSBpbiBjYXNlIG9mIGxpc3QgcmVwb3J0LlxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcblx0fVxuXG5cdGFzeW5jIF9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbigpOiBQcm9taXNlPHsgdGl0bGU/OiBzdHJpbmc7IHN1YnRpdGxlOiBzdHJpbmc7IGludGVudDogc3RyaW5nOyBpY29uOiBzdHJpbmcgfT4ge1xuXHRcdGNvbnN0IG9NYW5pZmVzdEVudHJ5ID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLmFwcFwiKTtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcblx0XHRcdHRpdGxlOiBvTWFuaWZlc3RFbnRyeS50aXRsZSxcblx0XHRcdHN1YnRpdGxlOiBvTWFuaWZlc3RFbnRyeS5zdWJUaXRsZSB8fCBcIlwiLFxuXHRcdFx0aW50ZW50OiBcIlwiLFxuXHRcdFx0aWNvbjogXCJcIlxuXHRcdH0pO1xuXHR9XG5cblx0X2dldEZpbHRlckJhckNvbnRyb2woKTogRmlsdGVyQmFyIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuYnlJZCh0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sSWQoKSkgYXMgRmlsdGVyQmFyIHwgdW5kZWZpbmVkO1xuXHR9XG5cblx0X2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbCgpOiBEeW5hbWljUGFnZSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQodGhpcy5fZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sSWQoKSkgYXMgRHluYW1pY1BhZ2U7XG5cdH1cblxuXHRfZ2V0QWRhcHRhdGlvbkZpbHRlckJhckNvbnRyb2woKTogQ29udHJvbCB8IHVuZGVmaW5lZCB7XG5cdFx0Ly8gSWYgdGhlIGFkYXB0YXRpb24gZmlsdGVyIGJhciBpcyBwYXJ0IG9mIHRoZSBET00gdHJlZSwgdGhlIFwiQWRhcHQgRmlsdGVyXCIgZGlhbG9nIGlzIG9wZW4sXG5cdFx0Ly8gYW5kIHdlIHJldHVybiB0aGUgYWRhcHRhdGlvbiBmaWx0ZXIgYmFyIGFzIGFuIGFjdGl2ZSBjb250cm9sICh2aXNpYmxlIGZvciB0aGUgdXNlcilcblx0XHRjb25zdCBhZGFwdGF0aW9uRmlsdGVyQmFyID0gKHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKSBhcyB7IGdldEluYnVpbHRGaWx0ZXI/OiBGdW5jdGlvbiB9KS5nZXRJbmJ1aWx0RmlsdGVyPy4oKTtcblx0XHRyZXR1cm4gYWRhcHRhdGlvbkZpbHRlckJhcj8uZ2V0UGFyZW50KCkgPyBhZGFwdGF0aW9uRmlsdGVyQmFyIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0YXN5bmMgX2FwcGx5QXBwU3RhdGUoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0YXdhaXQgdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRBcHBTdGF0ZUhhbmRsZXIoKS5hcHBseUFwcFN0YXRlKHRoaXMuZ2V0VmlldygpKTtcblx0XHRjb25zdCBvRmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdGlmIChvRmlsdGVyQmFyKSB7XG5cdFx0XHRvRmlsdGVyQmFyLmVuYWJsZVJlcXVlc3RzKHRydWUpO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5faXNGaWx0ZXJCYXJIaWRkZW4oKSkge1xuXHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImhhc1BlbmRpbmdGaWx0ZXJzXCIsIGZhbHNlKTtcblx0XHRcdGlmICh0aGlzLl9pc011bHRpTW9kZSgpKSB7XG5cdFx0XHRcdHRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKS5zZXRDb3VudHNPdXREYXRlZCh0cnVlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyBhbGwgY29udHJvbC1sZXZlbCB2YXJpYW50IG1hbmFnZW1lbnQgY29udHJvbHMgKEZpbHRlckJhciwgVGFibGVzLCBDaGFydHMpLlxuXHQgKiBUaGlzIGlzIG9ubHkgYXBwbGljYWJsZSB3aGVuIHZhcmlhbnQgbWFuYWdlbWVudCBpcyBzZXQgdG8gXCJDb250cm9sXCIgbW9kZS5cblx0ICogQHJldHVybnMgQXJyYXkgb2YgVmFyaWFudE1hbmFnZW1lbnQgY29udHJvbHMsIG9yIGVtcHR5IGFycmF5IGlmIGNvbnRyb2wgdmFyaWFudCBJRHMgZG9uJ3QgZXhpc3Rcblx0ICovXG5cdF9nZXRDb250cm9sVmFyaWFudE1hbmFnZW1lbnRDb250cm9scygpOiBWYXJpYW50TWFuYWdlbWVudFtdIHtcblx0XHRjb25zdCBjb250cm9sVmFyaWFudElkcyA9IHRoaXMuX2dldFBhZ2VNb2RlbCgpPy5nZXRQcm9wZXJ0eShcIi92YXJpYW50TWFuYWdlbWVudC9jb250cm9sVmFyaWFudElkc1wiKTtcblxuXHRcdGlmICghY29udHJvbFZhcmlhbnRJZHMpIHtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cblx0XHRjb25zdCB2YXJpYW50Q29udHJvbHM6IFZhcmlhbnRNYW5hZ2VtZW50W10gPSBbXTtcblx0XHRjb25zdCB2YXJpYW50SWRBcnJheSA9IGNvbnRyb2xWYXJpYW50SWRzLnNwbGl0KFwiLFwiKTtcblxuXHRcdHZhcmlhbnRJZEFycmF5LmZvckVhY2goKHZhcmlhbnRJZDogc3RyaW5nKSA9PiB7XG5cdFx0XHRjb25zdCB2YXJpYW50Q29udHJvbCA9IHRoaXMuZ2V0VmlldygpLmJ5SWQodmFyaWFudElkLnRyaW0oKSkgYXMgVmFyaWFudE1hbmFnZW1lbnQ7XG5cdFx0XHRpZiAodmFyaWFudENvbnRyb2wpIHtcblx0XHRcdFx0dmFyaWFudENvbnRyb2xzLnB1c2godmFyaWFudENvbnRyb2wpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHZhcmlhbnRDb250cm9scztcblx0fVxuXG5cdF9nZXRTZWdtZW50ZWRCdXR0b24oKTogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgY29udGVudFN3aXRjaGVyID0gdGhpcy5nZXRWaWV3KCkuYnlJZChcImZlOjpDb250ZW50U3dpdGNoZXJcIikgYXMgVUk1RWxlbWVudCAmIHsgJHNlZ21lbnRlZEJ1dHRvbj86IHsgY3VycmVudD86IFVJNUVsZW1lbnQgfSB9O1xuXHRcdHJldHVybiBjb250ZW50U3dpdGNoZXI/LiRzZWdtZW50ZWRCdXR0b24/LmN1cnJlbnQ7XG5cdH1cblxuXHRfZ2V0Q29udHJvbEZyb21QYWdlTW9kZWxQcm9wZXJ0eShzUGF0aDogc3RyaW5nKTogQ29udHJvbCB8IE1hY3JvQVBJIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBjb250cm9sSWQgPSB0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0UHJvcGVydHkoc1BhdGgpO1xuXHRcdHJldHVybiBjb250cm9sSWQgPyAodGhpcy5nZXRWaWV3KCkuYnlJZChjb250cm9sSWQpIGFzIENvbnRyb2wpIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0X2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbElkKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldFBhZ2VNb2RlbCgpPy5nZXRQcm9wZXJ0eShcIi9keW5hbWljTGlzdFJlcG9ydElkXCIpIHx8IFwiXCI7XG5cdH1cblxuXHRfZ2V0RmlsdGVyQmFyQ29udHJvbElkKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldFBhZ2VNb2RlbCgpPy5nZXRQcm9wZXJ0eShcIi9maWx0ZXJCYXJJZFwiKSB8fCBcIlwiO1xuXHR9XG5cblx0Z2V0Q2hhcnRDb250cm9sKCk6IENvbnRyb2wgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLl9nZXRDb250cm9sRnJvbVBhZ2VNb2RlbFByb3BlcnR5KFwiL3NpbmdsZUNoYXJ0SWRcIikgYXMgQ2hhcnRUeXBlO1xuXHR9XG5cblx0X2dldFZpc3VhbEZpbHRlckJhckNvbnRyb2woKTogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgc1Zpc3VhbEZpbHRlckJhcklkID0gU3RhYmxlSWRIZWxwZXIuZ2VuZXJhdGUoW1widmlzdWFsRmlsdGVyXCIsIHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2xJZCgpXSk7XG5cdFx0cmV0dXJuIHNWaXN1YWxGaWx0ZXJCYXJJZCA/IHRoaXMuZ2V0VmlldygpLmJ5SWQoc1Zpc3VhbEZpbHRlckJhcklkKSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdF9nZXRGaWx0ZXJCYXJWYXJpYW50Q29udHJvbCgpOiBWYXJpYW50TWFuYWdlbWVudCB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldENvbnRyb2xGcm9tUGFnZU1vZGVsUHJvcGVydHkoXCIvdmFyaWFudE1hbmFnZW1lbnQvaWRcIikgYXMgVmFyaWFudE1hbmFnZW1lbnQgfCB1bmRlZmluZWQ7XG5cdH1cblxuXHRfZ2V0TXVsdGlNb2RlQ29udHJvbCgpOiBNdWx0aXBsZU1vZGVDb250cm9sIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuYnlJZChcImZlOjpUYWJNdWx0aXBsZU1vZGU6OkNvbnRyb2xcIikgYXMgTXVsdGlwbGVNb2RlQ29udHJvbDtcblx0fVxuXG5cdF9nZXRJY29uVGFiQmFyKCk6IEljb25UYWJCYXIge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5ieUlkKFwiZmU6OlRhYk11bHRpcGxlTW9kZVwiKSBhcyBJY29uVGFiQmFyO1xuXHR9XG5cblx0X2dldFRhYmxlKCk6IFRhYmxlIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAodGhpcy5faXNNdWx0aU1vZGUoKSkge1xuXHRcdFx0Y29uc3Qgb0NvbnRyb2wgPSB0aGlzLl9nZXRNdWx0aU1vZGVDb250cm9sKCk/LmdldFNlbGVjdGVkSW5uZXJDb250cm9sKCk/LmNvbnRlbnQ7XG5cdFx0XHRyZXR1cm4gb0NvbnRyb2w/LmlzQShcInNhcC51aS5tZGMuVGFibGVcIikgPyAob0NvbnRyb2wgYXMgVGFibGUpIDogdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fZ2V0Q29udHJvbEZyb21QYWdlTW9kZWxQcm9wZXJ0eShcIi9zaW5nbGVUYWJsZUlkXCIpIGFzIFRhYmxlIHwgdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXG5cdF9nZXRDb250cm9scyhzS2V5Pzogc3RyaW5nKTogQ29udHJvbFtdIHtcblx0XHRpZiAodGhpcy5faXNNdWx0aU1vZGUoKSkge1xuXHRcdFx0Y29uc3QgYUNvbnRyb2xzOiBDb250cm9sW10gPSBbXTtcblx0XHRcdGNvbnN0IG9UYWJNdWx0aU1vZGUgPSB0aGlzLl9nZXRNdWx0aU1vZGVDb250cm9sKCkuY29udGVudDtcblx0XHRcdG9UYWJNdWx0aU1vZGUuZ2V0SXRlbXMoKS5mb3JFYWNoKChvSXRlbTogdW5rbm93bikgPT4ge1xuXHRcdFx0XHRjb25zdCBvQ29udHJvbCA9IHRoaXMuZ2V0VmlldygpLmJ5SWQoKG9JdGVtIGFzIFRhYkNvbnRhaW5lckl0ZW0pLmdldEtleSgpKSBhcyBDb250cm9sO1xuXHRcdFx0XHRpZiAob0NvbnRyb2wgJiYgc0tleSkge1xuXHRcdFx0XHRcdGlmICgob0l0ZW0gYXMgVGFiQ29udGFpbmVySXRlbSkuZ2V0S2V5KCkuaW5jbHVkZXMoYGZlOjoke3NLZXl9YCkpIHtcblx0XHRcdFx0XHRcdGFDb250cm9scy5wdXNoKG9Db250cm9sKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAob0NvbnRyb2wgIT09IHVuZGVmaW5lZCAmJiBvQ29udHJvbCAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdGFDb250cm9scy5wdXNoKG9Db250cm9sKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gYUNvbnRyb2xzO1xuXHRcdH0gZWxzZSBpZiAoc0tleSA9PT0gXCJDaGFydFwiKSB7XG5cdFx0XHRjb25zdCBvQ2hhcnQgPSB0aGlzLmdldENoYXJ0Q29udHJvbCgpO1xuXHRcdFx0cmV0dXJuIG9DaGFydCA/IFtvQ2hhcnRdIDogW107XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IG9UYWJsZSA9IHRoaXMuX2dldFRhYmxlKCk7XG5cdFx0XHRyZXR1cm4gb1RhYmxlID8gW29UYWJsZV0gOiBbXTtcblx0XHR9XG5cdH1cblxuXHRfZ2V0RGVmYXVsdFBhdGgoKTogc3RyaW5nIHtcblx0XHRjb25zdCBkZWZhdWx0UGF0aCA9IExpc3RSZXBvcnRUZW1wbGF0aW5nLmdldERlZmF1bHRQYXRoKHRoaXMuX2dldFBhZ2VNb2RlbCgpPy5nZXRQcm9wZXJ0eShcIi92aWV3c1wiKSB8fCBbXSk7XG5cdFx0c3dpdGNoIChkZWZhdWx0UGF0aCkge1xuXHRcdFx0Y2FzZSBcInByaW1hcnlcIjpcblx0XHRcdFx0cmV0dXJuIFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQ7XG5cdFx0XHRjYXNlIFwic2Vjb25kYXJ5XCI6XG5cdFx0XHRcdHJldHVybiBUZW1wbGF0ZUNvbnRlbnRWaWV3LlRhYmxlO1xuXHRcdFx0Y2FzZSBcImJvdGhcIjpcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBUZW1wbGF0ZUNvbnRlbnRWaWV3Lkh5YnJpZDtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGtub3cgaWYgTGlzdFJlcG9ydCBpcyBjb25maWd1cmVkIHdpdGggTXVsdGlwbGUgVGFibGUgbW9kZS5cblx0ICogQHJldHVybnMgSXMgTXVsdGlwbGUgVGFibGUgbW9kZSBzZXQ/XG5cdCAqL1xuXHRfaXNNdWx0aU1vZGUoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuICEhdGhpcy5fZ2V0UGFnZU1vZGVsKCk/LmdldFByb3BlcnR5KFwiL211bHRpVmlld3NDb250cm9sXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBrbm93IGlmIExpc3RSZXBvcnQgaXMgY29uZmlndXJlZCB0byBsb2FkIGRhdGEgYXQgc3RhcnQgdXAuXG5cdCAqIEByZXR1cm5zIElzIEluaXRMb2FkIGVuYWJsZWQ/XG5cdCAqL1xuXHRfaXNJbml0TG9hZEVuYWJsZWQoKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgaW5pdExvYWRNb2RlID0gdGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS5pbml0aWFsTG9hZDtcblx0XHRyZXR1cm4gaW5pdExvYWRNb2RlID09PSBJbml0aWFsTG9hZE1vZGUuRW5hYmxlZDtcblx0fVxuXG5cdF9oYXNNdWx0aVZpc3VhbGl6YXRpb25zKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0UHJvcGVydHkoXCIvaGFzTXVsdGlWaXN1YWxpemF0aW9uc1wiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gc3VzcGVuZCBzZWFyY2ggb24gdGhlIGZpbHRlciBiYXIuIFRoZSBpbml0aWFsIGxvYWRpbmcgb2YgZGF0YSBpcyBkaXNhYmxlZCBiYXNlZCBvbiB0aGUgbWFuaWZlc3QgY29uZmlndXJhdGlvbiBJbml0TG9hZCAtIERpc2FibGVkL0F1dG8uXG5cdCAqIEl0IGlzIGVuYWJsZWQgbGF0ZXIgd2hlbiB0aGUgdmlldyBzdGF0ZSBpcyBzZXQsIHdoZW4gaXQgaXMgcG9zc2libGUgdG8gcmVhbGl6ZSBpZiB0aGVyZSBhcmUgZGVmYXVsdCBmaWx0ZXJzLlxuXHQgKi9cblx0X2Rpc2FibGVJbml0TG9hZCgpOiB2b2lkIHtcblx0XHRjb25zdCBmaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdFx0Ly8gY2hlY2sgZm9yIGZpbHRlciBiYXIgaGlkZGVuXG5cdFx0aWYgKGZpbHRlckJhcikge1xuXHRcdFx0ZmlsdGVyQmFyLmVuYWJsZVJlcXVlc3RzKGZhbHNlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIGNhbGxlZCBieSBmbGV4IHRvIGRldGVybWluZSBpZiB0aGUgYXBwbHlBdXRvbWF0aWNhbGx5IHNldHRpbmcgb24gdGhlIHZhcmlhbnQgaXMgdmFsaWQuXG5cdCAqIENhbGxlZCBvbmx5IGZvciBTdGFuZGFyZCBWYXJpYW50IGFuZCBvbmx5IHdoZW4gdGhlcmUgaXMgZGlzcGxheSB0ZXh0IHNldCBmb3IgYXBwbHlBdXRvbWF0aWNhbGx5IChGRSBvbmx5IHNldHMgaXQgZm9yIEF1dG8pLlxuXHQgKiBAcmV0dXJucyBCb29sZWFuIHRydWUgaWYgZGF0YSBzaG91bGQgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHksIGZhbHNlIG90aGVyd2lzZVxuXHQgKi9cblx0X2FwcGx5QXV0b21hdGljYWxseU9uU3RhbmRhcmRWYXJpYW50KCk6IGJvb2xlYW4ge1xuXHRcdC8vIFdlIGFsd2F5cyByZXR1cm4gZmFsc2UgYW5kIHRha2UgY2FyZSBvZiBpdCB3aGVuIHZpZXcgc3RhdGUgaXMgc2V0XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbmZpZ3VyZSB0aGUgc2V0dGluZ3MgZm9yIGluaXRpYWwgbG9hZCBiYXNlZCBvblxuXHQgKiAtIG1hbmlmZXN0IHNldHRpbmcgaW5pdExvYWQgLSBFbmFibGVkL0Rpc2FibGVkL0F1dG9cblx0ICogLSB1c2VyJ3Mgc2V0dGluZyBvZiBhcHBseUF1dG9tYXRpY2FsbHkgb24gdmFyaWFudFxuXHQgKiAtIGlmIHRoZXJlIGFyZSBkZWZhdWx0IGZpbHRlcnNcblx0ICogV2UgZGlzYWJsZSB0aGUgZmlsdGVyIGJhciBzZWFyY2ggYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5hYmxlIGl0IHdoZW4gdmlldyBzdGF0ZSBpcyBzZXQuXG5cdCAqL1xuXHRfc2V0SW5pdExvYWQoKTogdm9pZCB7XG5cdFx0Ly8gaWYgaW5pdExvYWQgaXMgRGlzYWJsZWQgb3IgQXV0bywgc3dpdGNoIG9mZiBmaWx0ZXIgYmFyIHNlYXJjaCB0ZW1wb3JhcmlseSBhdCBzdGFydFxuXHRcdGlmICghdGhpcy5faXNJbml0TG9hZEVuYWJsZWQoKSkge1xuXHRcdFx0dGhpcy5fZGlzYWJsZUluaXRMb2FkKCk7XG5cdFx0fVxuXHRcdC8vIHNldCBob29rIGZvciBmbGV4IGZvciB3aGVuIHN0YW5kYXJkIHZhcmlhbnQgaXMgc2V0IChhdCBzdGFydCBvciBieSB1c2VyIGF0IHJ1bnRpbWUpXG5cdFx0Ly8gcmVxdWlyZWQgdG8gb3ZlcnJpZGUgdGhlIHVzZXIgc2V0dGluZyAnYXBwbHkgYXV0b21hdGljYWxseScgYmVoYXZpb3VyIGlmIHRoZXJlIGFyZSBubyBmaWx0ZXJzXG5cdFx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnRJZCA9IExpc3RSZXBvcnRUZW1wbGF0aW5nLmdldFZhcmlhbnRCYWNrUmVmZXJlbmNlKFxuXHRcdFx0dGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSxcblx0XHRcdHRoaXMuX2dldFBhZ2VNb2RlbCgpPy5nZXREYXRhKCkgYXMgTGlzdFJlcG9ydERlZmluaXRpb25cblx0XHQpO1xuXHRcdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50ID0gdmFyaWFudE1hbmFnZW1lbnRJZCAmJiAodGhpcy5nZXRWaWV3KCkuYnlJZCh2YXJpYW50TWFuYWdlbWVudElkKSBhcyBWYXJpYW50TWFuYWdlbWVudCk7XG5cdFx0aWYgKHZhcmlhbnRNYW5hZ2VtZW50KSB7XG5cdFx0XHQoXG5cdFx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50IGFzIHsgcmVnaXN0ZXJBcHBseUF1dG9tYXRpY2FsbHlPblN0YW5kYXJkVmFyaWFudD86IEZ1bmN0aW9uIH1cblx0XHRcdCk/LnJlZ2lzdGVyQXBwbHlBdXRvbWF0aWNhbGx5T25TdGFuZGFyZFZhcmlhbnQ/Lih0aGlzLl9hcHBseUF1dG9tYXRpY2FsbHlPblN0YW5kYXJkVmFyaWFudC5iaW5kKHRoaXMpKTtcblx0XHR9XG5cdH1cblxuXHRfc2V0U2hhcmVNb2RlbCgpOiB2b2lkIHtcblx0XHQvLyBUT0RPOiBkZWFjdGl2YXRlZCBmb3Igbm93IC0gY3VycmVudGx5IHRoZXJlIGlzIG5vIF90ZW1wbFByaXYgYW55bW9yZSwgdG8gYmUgZGlzY3Vzc2VkXG5cdFx0Ly8gdGhpcyBtZXRob2QgaXMgY3VycmVudGx5IG5vdCBjYWxsZWQgYW55bW9yZSBmcm9tIHRoZSBpbml0IG1ldGhvZFxuXG5cdFx0Y29uc3QgZm5HZXRVc2VyID0gT2JqZWN0UGF0aC5nZXQoXCJzYXAudXNoZWxsLkNvbnRhaW5lci5nZXRVc2VyXCIpO1xuXHRcdC8vdmFyIG9NYW5pZmVzdCA9IHRoaXMuZ2V0T3duZXJDb21wb25lbnQoKS5nZXRBcHBDb21wb25lbnQoKS5nZXRNZXRhZGF0YSgpLmdldE1hbmlmZXN0RW50cnkoXCJzYXAudWlcIik7XG5cdFx0Ly92YXIgc0Jvb2ttYXJrSWNvbiA9IChvTWFuaWZlc3QgJiYgb01hbmlmZXN0Lmljb25zICYmIG9NYW5pZmVzdC5pY29ucy5pY29uKSB8fCBcIlwiO1xuXG5cdFx0Ly9zaGFyZU1vZGVsOiBIb2xkcyBhbGwgdGhlIHNoYXJpbmcgcmVsZXZhbnQgaW5mb3JtYXRpb24gYW5kIGluZm8gdXNlZCBpbiBYTUwgdmlld1xuXHRcdGNvbnN0IG9TaGFyZUluZm8gPSB7XG5cdFx0XHRib29rbWFya1RpdGxlOiBkb2N1bWVudC50aXRsZSwgLy9UbyBuYW1lIHRoZSBib29rbWFyayBhY2NvcmRpbmcgdG8gdGhlIGFwcCB0aXRsZS5cblx0XHRcdGJvb2ttYXJrQ3VzdG9tVXJsOiBmdW5jdGlvbiAoKTogc3RyaW5nIHtcblx0XHRcdFx0Y29uc3Qgc0hhc2ggPSBoYXNoZXIuZ2V0SGFzaCgpO1xuXHRcdFx0XHRyZXR1cm4gc0hhc2ggPyBgIyR7c0hhc2h9YCA6IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuXHRcdFx0fSxcblx0XHRcdC8qXG5cdFx0XHRcdFx0XHRcdFRvIGJlIGFjdGl2YXRlZCBvbmNlIHRoZSBGTFAgc2hvd3MgdGhlIGNvdW50IC0gc2VlIGNvbW1lbnQgYWJvdmVcblx0XHRcdFx0XHRcdFx0Ym9va21hcmtTZXJ2aWNlVXJsOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHQvL3ZhciBvVGFibGUgPSBvVGFibGUuZ2V0SW5uZXJUYWJsZSgpOyBvVGFibGUgaXMgYWxyZWFkeSB0aGUgc2FwLmZlIHRhYmxlIChidXQgbm90IHRoZSBpbm5lciBvbmUpXG5cdFx0XHRcdFx0XHRcdFx0Ly8gd2Ugc2hvdWxkIHVzZSB0YWJsZS5nZXRMaXN0QmluZGluZ0luZm8gaW5zdGVhZCBvZiB0aGUgYmluZGluZ1xuXHRcdFx0XHRcdFx0XHRcdHZhciBvQmluZGluZyA9IG9UYWJsZS5nZXRCaW5kaW5nKFwicm93c1wiKSB8fCBvVGFibGUuZ2V0QmluZGluZyhcIml0ZW1zXCIpO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBvQmluZGluZyA/IGZuR2V0RG93bmxvYWRVcmwob0JpbmRpbmcpIDogXCJcIjtcblx0XHRcdFx0XHRcdFx0fSwqL1xuXHRcdFx0aXNTaGFyZUluSmFtQWN0aXZlOiAhIWZuR2V0VXNlciAmJiBmbkdldFVzZXIoKS5pc0phbUFjdGl2ZSgpXG5cdFx0fTtcblxuXHRcdGNvbnN0IG9UZW1wbGF0ZVByaXZhdGVNb2RlbCA9IHRoaXMuZ2V0T3duZXJDb21wb25lbnQoKS5nZXRNb2RlbChcIl90ZW1wbFByaXZcIikgYXMgSlNPTk1vZGVsO1xuXHRcdG9UZW1wbGF0ZVByaXZhdGVNb2RlbC5zZXRQcm9wZXJ0eShcIi9saXN0UmVwb3J0L3NoYXJlXCIsIG9TaGFyZUluZm8pO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byB1cGRhdGUgdGhlIGxvY2FsIFVJIG1vZGVsIG9mIHRoZSBwYWdlIHdpdGggdGhlIGZpZWxkcyB0aGF0IGFyZSBub3QgYXBwbGljYWJsZSB0byB0aGUgZmlsdGVyIGJhciAodGhpcyBpcyBzcGVjaWZpYyB0byB0aGUgQUxQIHNjZW5hcmlvKS5cblx0ICogQHBhcmFtIG9JbnRlcm5hbE1vZGVsQ29udGV4dCBUaGUgaW50ZXJuYWwgbW9kZWwgY29udGV4dFxuXHQgKiBAcGFyYW0gb0ZpbHRlckJhciBNREMgZmlsdGVyIGJhclxuXHQgKi9cblx0X3VwZGF0ZUFMUE5vdEFwcGxpY2FibGVGaWVsZHMob0ludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dCwgb0ZpbHRlckJhcjogRmlsdGVyQmFyKTogdm9pZCB7XG5cdFx0Y29uc3QgbUNhY2hlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fTtcblx0XHRjb25zdCBpZ25vcmVkRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fSxcblx0XHRcdGFUYWJsZXMgPSB0aGlzLl9nZXRDb250cm9scyhcInRhYmxlXCIpLFxuXHRcdFx0YUNoYXJ0cyA9IHRoaXMuX2dldENvbnRyb2xzKFwiQ2hhcnRcIik7XG5cblx0XHRpZiAoIWFUYWJsZXMubGVuZ3RoIHx8ICFhQ2hhcnRzLmxlbmd0aCkge1xuXHRcdFx0Ly8gSWYgdGhlcmUncyBub3QgYSB0YWJsZSBhbmQgYSBjaGFydCwgd2UncmUgbm90IGluIHRoZSBBTFAgY2FzZVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEZvciB0aGUgbW9tZW50LCB0aGVyZSdzIG5vdGhpbmcgZm9yIHRhYmxlcy4uLlxuXHRcdGFDaGFydHMuZm9yRWFjaChmdW5jdGlvbiAob0NoYXJ0KSB7XG5cdFx0XHRjb25zdCBzQ2hhcnRFbnRpdHlQYXRoID0gb0NoYXJ0LmRhdGEoXCJ0YXJnZXRDb2xsZWN0aW9uUGF0aFwiKSxcblx0XHRcdFx0c0NoYXJ0RW50aXR5U2V0ID0gc0NoYXJ0RW50aXR5UGF0aC5zbGljZSgxKSxcblx0XHRcdFx0c0NhY2hlS2V5ID0gYCR7c0NoYXJ0RW50aXR5U2V0fUNoYXJ0YDtcblx0XHRcdGlmICghbUNhY2hlW3NDYWNoZUtleV0pIHtcblx0XHRcdFx0bUNhY2hlW3NDYWNoZUtleV0gPSBGaWx0ZXJVdGlscy5nZXROb3RBcHBsaWNhYmxlRmlsdGVycyhvRmlsdGVyQmFyLCBvQ2hhcnQpO1xuXHRcdFx0fVxuXHRcdFx0aWdub3JlZEZpZWxkc1tzQ2FjaGVLZXldID0gbUNhY2hlW3NDYWNoZUtleV07XG5cdFx0fSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY29udHJvbHMvaWdub3JlZEZpZWxkc1wiLCBpZ25vcmVkRmllbGRzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQcm92aWRlcyB0aGUgc2V0dGluZyB3aGV0aGVyIEZpbHRlckJhciBpcyBoaWRkZW4gYmFzZWQgb24gdGhlIG1hbmlmZXN0IHNldHRpbmcgJ2hpZGVGaWx0ZXJCYXInLlxuXHQgKiBTaG91bGQgYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIF9pc0ZpbHRlckJhckhpZGRlblVzZWQgYXMgaXQgbWF5IGhhdmUgb3ZlcnJpZGRlbiB0aGlzIHNldHRpbmcuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIEZpbHRlckJhciBpcyBoaWRkZW4sIGZhbHNlIGlmIHVua25vd25cblx0ICovXG5cdF9pc0ZpbHRlckJhckhpZGRlbigpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS5oaWRlRmlsdGVyQmFyIHx8IGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFByb3ZpZGVzIHRoZSBzZXR0aW5nIHdoZXRoZXIgRmlsdGVyQmFyIGlzIGhpZGRlbiBidXQgc3RpbGwgZXhpc3RzIGJhc2VkIG9uIHRoZSBtYW5pZmVzdCBzZXR0aW5nICd1c2VIaWRkZW5GaWx0ZXJCYXInLlxuXHQgKiBTaG91bGQgYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIF9pc0ZpbHRlckJhckhpZGRlbiBhcyBpdCBjYW4gYWxzbyBoaWRlIHRoZSBGaWx0ZXJCYXIuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIEZpbHRlckJhciBpcyBoaWRkZW4sIGZhbHNlIGlmIHVua25vd25cblx0ICovXG5cdF9pc0ZpbHRlckJhckhpZGRlblVzZWQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkudXNlSGlkZGVuRmlsdGVyQmFyIHx8IGZhbHNlO1xuXHR9XG5cblx0X2dldEFwcGx5QXV0b21hdGljYWxseU9uVmFyaWFudCh2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnQsIGtleTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCk6IEJvb2xlYW4ge1xuXHRcdGlmICghdmFyaWFudE1hbmFnZW1lbnQgfHwgIWtleSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRjb25zdCB2YXJpYW50cyA9IHZhcmlhbnRNYW5hZ2VtZW50LmdldFZhcmlhbnRzKCk7XG5cdFx0Y29uc3QgY3VycmVudFZhcmlhbnQgPSB2YXJpYW50cy5maW5kKGZ1bmN0aW9uICh2YXJpYW50KSB7XG5cdFx0XHRyZXR1cm4gdmFyaWFudCAmJiB2YXJpYW50LmdldEtleSgpID09PSBrZXk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIChjdXJyZW50VmFyaWFudCAmJiBjdXJyZW50VmFyaWFudC5nZXRQcm9wZXJ0eShcImV4ZWN1dGVPblNlbGVjdFwiKSkgfHwgZmFsc2U7XG5cdH1cblxuXHRfc2hvdWxkQXV0b1RyaWdnZXJTZWFyY2gob1ZNOiBWYXJpYW50TWFuYWdlbWVudCB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcblx0XHRpZiAoXG5cdFx0XHR0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpLmluaXRpYWxMb2FkID09PSBJbml0aWFsTG9hZE1vZGUuQXV0byAmJlxuXHRcdFx0KCFvVk0gfHwgb1ZNLmdldFN0YW5kYXJkVmFyaWFudEtleSgpID09PSBvVk0uZ2V0Q3VycmVudFZhcmlhbnRLZXkoKSlcblx0XHQpIHtcblx0XHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdFx0XHRpZiAob0ZpbHRlckJhcikge1xuXHRcdFx0XHRjb25zdCBvQ29uZGl0aW9ucyA9IG9GaWx0ZXJCYXIuZ2V0Q29uZGl0aW9ucygpO1xuXHRcdFx0XHRmb3IgKGNvbnN0IHNLZXkgaW4gb0NvbmRpdGlvbnMpIHtcblx0XHRcdFx0XHQvLyBpZ25vcmUgZmlsdGVycyBzdGFydGluZyB3aXRoICQgKGUuZy4gJHNlYXJjaCwgJGVkaXRTdGF0ZSlcblx0XHRcdFx0XHRpZiAob1ZNICYmICFzS2V5LnN0YXJ0c1dpdGgoXCIkXCIpICYmIEFycmF5LmlzQXJyYXkob0NvbmRpdGlvbnNbc0tleV0pICYmIG9Db25kaXRpb25zW3NLZXldLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0Ly8gbG9hZCBkYXRhIGFzIHBlciB1c2VyJ3Mgc2V0dGluZyBvZiBhcHBseUF1dG9tYXRpY2FsbHkgb24gdGhlIHZhcmlhbnRcblx0XHRcdFx0XHRcdGNvbnN0IHN0YW5kYXJkVmFyaWFudCA9IG9WTS5nZXRWYXJpYW50cygpLmZpbmQoKHZhcmlhbnQpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhcmlhbnQuZ2V0S2V5KCkgPT09IG9WTS5nZXRDdXJyZW50VmFyaWFudEtleSgpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc3RhbmRhcmRWYXJpYW50ICYmIHN0YW5kYXJkVmFyaWFudC5nZXRFeGVjdXRlT25TZWxlY3QoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0X3VwZGF0ZVRhYmxlKG9UYWJsZTogVGFibGUpOiB2b2lkIHtcblx0XHRpZiAoIW9UYWJsZS5pc1RhYmxlQm91bmQoKSB8fCB0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMpIHtcblx0XHRcdG9UYWJsZS5yZWJpbmQoKTtcblx0XHRcdHRoaXMuaGFzUGVuZGluZ0NoYXJ0Q2hhbmdlcyA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdF91cGRhdGVDaGFydChvQ2hhcnQ6IENoYXJ0KTogdm9pZCB7XG5cdFx0Y29uc3Qgb0lubmVyQ2hhcnQgPSAob0NoYXJ0LmdldENvbnRyb2xEZWxlZ2F0ZSgpIGFzIHR5cGVvZiBDaGFydERlbGVnYXRlKS5fZ2V0Q2hhcnQob0NoYXJ0KTtcblx0XHRpZiAoIShvSW5uZXJDaGFydCAmJiBvSW5uZXJDaGFydC5pc0JvdW5kKFwiZGF0YVwiKSkgfHwgdGhpcy5oYXNQZW5kaW5nVGFibGVDaGFuZ2VzKSB7XG5cdFx0XHQob0NoYXJ0LmdldENvbnRyb2xEZWxlZ2F0ZSgpIGFzIHR5cGVvZiBDaGFydERlbGVnYXRlKS5yZWJpbmQob0NoYXJ0LCBvSW5uZXJDaGFydC5nZXRCaW5kaW5nSW5mbyhcImRhdGFcIikpO1xuXHRcdFx0dGhpcy5oYXNQZW5kaW5nVGFibGVDaGFuZ2VzID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmlsdGVyIHRvZ2dsZSBidXR0b24uXG5cdCAqIEBwYXJhbSBidXR0b25WaXNpYmxlIEZpbHRlciB0b2dnbGUgYnV0dG9uIHZpc2liaWxpdHlcblx0ICovXG5cdHNldEZpbHRlclRvZ2dsZVZpc2liaWxpdHkoYnV0dG9uVmlzaWJsZTogYm9vbGVhbik6IHZvaWQge1xuXHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRmaWx0ZXJCYXI/LmdldFNlZ21lbnRlZEJ1dHRvbigpPy5zZXRWaXNpYmxlKGJ1dHRvblZpc2libGUpO1xuXHR9XG5cblx0aGFuZGxlcnMgPSB7XG5cdFx0b25GaWx0ZXJMYXlvdXRTd2l0Y2godGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIG9FdmVudDogVUk1RXZlbnQ8e30sIENvbnRlbnRTd2l0Y2hlcj4pOiB2b2lkIHtcblx0XHRcdGNvbnN0IGN1cnJlbnRLZXkgPSBvRXZlbnQuZ2V0U291cmNlKCkuc2VsZWN0ZWRLZXk7XG5cdFx0XHRjb25zdCBpc0FpTGF5b3V0ID0gY3VycmVudEtleSA9PT0gXCJhaVwiO1xuXHRcdFx0Y29uc3QgY29udHJvbFZhcmlhbnRDb250cm9scyA9IHRoaXMuX2dldENvbnRyb2xWYXJpYW50TWFuYWdlbWVudENvbnRyb2xzKCk7XG5cdFx0XHRpZiAoY29udHJvbFZhcmlhbnRDb250cm9scy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdC8vIEFkZCBtb3JlIGNvbnRyb2xzIGhlcmUgYXMgdGhlIEFJIGxheW91dCBnYWlucyBzdXBwb3J0IGZvciB0aGVtXG5cdFx0XHRcdGNvbnN0IGZpbHRlckJhclZNID0gdGhpcy5fZ2V0RmlsdGVyQmFyVmFyaWFudENvbnRyb2woKTtcblx0XHRcdFx0Y29uc3QgdGFibGVWTSA9IHRoaXMuX2dldFRhYmxlKCk/LmdldFZhcmlhbnQoKTtcblx0XHRcdFx0Y29uc3Qgc3VwcG9ydGVkT25BaUxheW91dCA9IG5ldyBTZXQ8VmFyaWFudE1hbmFnZW1lbnQ+KFtmaWx0ZXJCYXJWTSwgdGFibGVWTV0uZmlsdGVyKCh2bSkgPT4gISF2bSkpO1xuXHRcdFx0XHRjb250cm9sVmFyaWFudENvbnRyb2xzLmZvckVhY2goKHZhcmlhbnRDb250cm9sKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgaXNWaXNpYmxlID0gIWlzQWlMYXlvdXQgfHwgc3VwcG9ydGVkT25BaUxheW91dC5oYXModmFyaWFudENvbnRyb2wpO1xuXHRcdFx0XHRcdHZhcmlhbnRDb250cm9sLnNldFZpc2libGUoaXNWaXNpYmxlKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRvbklubGluZUVkaXRTYXZlKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyKTogdm9pZCB7XG5cdFx0XHR0aGlzLmlubGluZUVkaXRGbG93LmlubGluZUVkaXRTYXZlKCk7XG5cdFx0fSxcblx0XHRvbkZpbHRlclNlYXJjaCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0Y29uc3QgZmlsdGVyQmFyQVBJID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpIS5nZXRQYXJlbnQoKSBhcyBGaWx0ZXJCYXJBUEk7XG5cdFx0XHRmaWx0ZXJCYXJBUEkudHJpZ2dlclNlYXJjaCgpO1xuXHRcdH0sXG5cdFx0b25GaWx0ZXJzQ2hhbmdlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgb0V2ZW50OiBGaWx0ZXJCYXJCYXNlJEZpbHRlcnNDaGFuZ2VkRXZlbnQpOiB2b2lkIHtcblx0XHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdFx0XHRpZiAob0ZpbHRlckJhcikge1xuXHRcdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHQvLyBQZW5kaW5nIGZpbHRlcnMgaW50byBGaWx0ZXJCYXIgdG8gYmUgdXNlZCBmb3IgY3VzdG9tIHZpZXdzXG5cdFx0XHRcdHRoaXMub25QZW5kaW5nRmlsdGVycygpO1xuXG5cdFx0XHRcdGlmIChvSW50ZXJuYWxNb2RlbENvbnRleHQgJiYgb0V2ZW50LmdldFBhcmFtZXRlcihcImNvbmRpdGlvbnNCYXNlZFwiKSkge1xuXHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImhhc1BlbmRpbmdGaWx0ZXJzXCIsIHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvSW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRcdFx0XHR0aGlzLl9zdG9yZUZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQob0ZpbHRlckJhciwgb0ludGVybmFsTW9kZWxDb250ZXh0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0b25WYXJpYW50U2VsZWN0ZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIG9FdmVudDogVmFyaWFudE1hbmFnZW1lbnQkU2VsZWN0RXZlbnQpOiB2b2lkIHtcblx0XHRcdGNvbnN0IHBhcmFtZXRlcnMgPSAob0V2ZW50IGFzIFVJNUV2ZW50KS5nZXRQYXJhbWV0ZXJzKCkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cdFx0XHRjb25zdCB2YXJpYW50TWFuYWdlbWVudCA9IHBhcmFtZXRlcnMub3JpZ2luYWxTb3VyY2UgYXMgVmFyaWFudE1hbmFnZW1lbnQ7XG5cdFx0XHRjb25zdCBjdXJyZW50VmFyaWFudEtleSA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJrZXlcIik7XG5cdFx0XHRjb25zdCBtdWx0aU1vZGVDb250cm9sID0gdGhpcy5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpO1xuXG5cdFx0XHRpZiAobXVsdGlNb2RlQ29udHJvbCAmJiAhdmFyaWFudE1hbmFnZW1lbnQ/LmdldFBhcmVudCgpPy5pc0EoXCJzYXAudWkubWRjLkFjdGlvblRvb2xiYXJcIikpIHtcblx0XHRcdFx0Ly9Ob3QgYSBDb250cm9sIFZhcmlhbnRcblx0XHRcdFx0bXVsdGlNb2RlQ29udHJvbD8uaW52YWxpZGF0ZUNvbnRlbnQoKTtcblx0XHRcdFx0bXVsdGlNb2RlQ29udHJvbD8uc2V0RnJlZXplQ29udGVudCh0cnVlKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gc2V0VGltZW91dCBjYXVzZSB0aGUgdmFyaWFudCBuZWVkcyB0byBiZSBhcHBsaWVkIGJlZm9yZSBqdWRnaW5nIHRoZSBhdXRvIHNlYXJjaCBvciB1cGRhdGluZyB0aGUgYXBwIHN0YXRlXG5cdFx0XHRzZXRUaW1lb3V0KCgpOiB2b2lkID0+IHtcblx0XHRcdFx0Y29uc3QgZmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdFx0XHRjb25zdCBkeW5hbWljUGFnZSA9IHRoaXMuX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbCgpO1xuXHRcdFx0XHRjb25zdCBmaXJzdEVtcHR5TWFuZGF0b3J5RmllbGQgPSBmaWx0ZXJCYXI/LmdldEZpbHRlckl0ZW1zKCkuZmluZChmdW5jdGlvbiAoZmlsdGVySXRlbSkge1xuXHRcdFx0XHRcdHJldHVybiBmaWx0ZXJJdGVtLmdldFJlcXVpcmVkKCkgJiYgZmlsdGVySXRlbS5nZXRDb25kaXRpb25zKCkubGVuZ3RoID09PSAwO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKGZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZCkge1xuXHRcdFx0XHRcdGR5bmFtaWNQYWdlLnNldEhlYWRlckV4cGFuZGVkKHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0aGlzLl9zaG91bGRBdXRvVHJpZ2dlclNlYXJjaCh2YXJpYW50TWFuYWdlbWVudCkpIHtcblx0XHRcdFx0XHQvLyB0aGUgYXBwIHN0YXRlIHdpbGwgYmUgdXBkYXRlZCB2aWEgb25TZWFyY2ggaGFuZGxlclxuXHRcdFx0XHRcdGNvbnN0IGZpbHRlckJhckFQSSA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKSEuZ2V0UGFyZW50KCkgYXMgRmlsdGVyQmFyQVBJO1xuXHRcdFx0XHRcdGZpbHRlckJhckFQSS50cmlnZ2VyU2VhcmNoKCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoIXRoaXMuX2dldEFwcGx5QXV0b21hdGljYWxseU9uVmFyaWFudCh2YXJpYW50TWFuYWdlbWVudCwgY3VycmVudFZhcmlhbnRLZXkpKSB7XG5cdFx0XHRcdFx0bXVsdGlNb2RlQ29udHJvbD8uc2V0RnJlZXplQ29udGVudChmYWxzZSk7XG5cdFx0XHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0XHRcdGR5bmFtaWNQYWdlLnNldEhlYWRlckV4cGFuZGVkKHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LCAwKTtcblx0XHR9LFxuXHRcdG9uVmFyaWFudFNhdmVkKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyKTogdm9pZCB7XG5cdFx0XHQvL1RPRE86IFNob3VsZCByZW1vdmUgdGhpcyBzZXRUaW1lT3V0IG9uY2UgVmFyaWFudCBNYW5hZ2VtZW50IHByb3ZpZGVzIGFuIGFwaSB0byBmZXRjaCB0aGUgY3VycmVudCB2YXJpYW50IGtleSBvbiBzYXZlISEhXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0fSwgMTAwMCk7XG5cdFx0fSxcblx0XHRvblNlYXJjaCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0Y29uc3Qgb0ZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKSBhcyBGaWx0ZXJCYXI7IC8vIG9uc2VhcmNoIGlzIGNhbGxlZCBvbmx5IGlmIHRoZSBmaWx0ZXJiYXIgZXhpc3RzXG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0Y29uc3Qgb01kY0NoYXJ0ID0gdGhpcy5nZXRDaGFydENvbnRyb2woKTtcblx0XHRcdGNvbnN0IGJIaWRlRHJhZnQgPSBGaWx0ZXJVdGlscy5nZXRFZGl0U3RhdGVJc0hpZGVEcmFmdChvRmlsdGVyQmFyLmdldENvbmRpdGlvbnMoKSk7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoYXNQZW5kaW5nRmlsdGVyc1wiLCBmYWxzZSk7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoaWRlRHJhZnRJbmZvXCIsIGJIaWRlRHJhZnQpO1xuXHRcdFx0Y29uc3QgZHluYW1pY1BhZ2UgPSB0aGlzLl9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2woKTtcblx0XHRcdGlmICghdGhpcy5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpKSB7XG5cdFx0XHRcdHRoaXMuX3VwZGF0ZUFMUE5vdEFwcGxpY2FibGVGaWVsZHMob0ludGVybmFsTW9kZWxDb250ZXh0LCBvRmlsdGVyQmFyKTtcblx0XHRcdH1cblx0XHRcdGlmIChvTWRjQ2hhcnQpIHtcblx0XHRcdFx0Ly8gZGlzYWJsZSBib3VuZCBhY3Rpb25zIFRPRE86IHRoaXMgY2xlYXJzIGV2ZXJ5dGhpbmcgZm9yIHRoZSBjaGFydD9cblx0XHRcdFx0KG9NZGNDaGFydC5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0KS5zZXRQcm9wZXJ0eShcIlwiLCB7fSk7XG5cblx0XHRcdFx0Y29uc3Qgb1BhZ2VJbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9NZGNDaGFydC5nZXRCaW5kaW5nQ29udGV4dChcInBhZ2VJbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdFx0Y29uc3Qgc1RlbXBsYXRlQ29udGVudFZpZXcgPSBvUGFnZUludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KGAke29QYWdlSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UGF0aCgpfS9hbHBDb250ZW50Vmlld2ApO1xuXHRcdFx0XHRpZiAoc1RlbXBsYXRlQ29udGVudFZpZXcgPT09IFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQpIHtcblx0XHRcdFx0XHR0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChzVGVtcGxhdGVDb250ZW50VmlldyA9PT0gVGVtcGxhdGVDb250ZW50Vmlldy5UYWJsZSkge1xuXHRcdFx0XHRcdHRoaXMuaGFzUGVuZGluZ1RhYmxlQ2hhbmdlcyA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly9sb2dpYyBmb3IgZXhwYW5zaW9uIG9yIGNvbGxhcHNlIG9mIGZpbHRlciBiYXIgc3RhcnRzXG5cdFx0XHRpZiAoIURldmljZS5zeXN0ZW0uZGVza3RvcCAmJiBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJzZWFyY2hUcmlnZ2VyZWRCeUluaXRpYWxMb2FkXCIpID09PSB0cnVlKSB7XG5cdFx0XHRcdGlmIChkeW5hbWljUGFnZS5nZXRIZWFkZXJFeHBhbmRlZCgpICE9PSBmYWxzZSkge1xuXHRcdFx0XHRcdGR5bmFtaWNQYWdlLnNldEhlYWRlckV4cGFuZGVkKGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvL3NldHRpbmcgaXQgdG8gZmFsc2Ugc28gdGhhdCBmdXJ0aGVyIHNlYXJjaCBvciAnR28nIHRyaWdnZXJzIHdvbid0IGNvbGxhcHNlIHRoZSBmaWx0ZXIgYmFyXG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInNlYXJjaFRyaWdnZXJlZEJ5SW5pdGlhbExvYWRcIiwgZmFsc2UpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBzdG9yZSBmaWx0ZXIgYmFyIGNvbmRpdGlvbnMgdG8gdXNlIGxhdGVyIHdoaWxlIG5hdmlnYXRpb25cblx0XHRcdFN0YXRlVXRpbC5yZXRyaWV2ZUV4dGVybmFsU3RhdGUob0ZpbHRlckJhcilcblx0XHRcdFx0LnRoZW4oKG9FeHRlcm5hbFN0YXRlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5maWx0ZXJCYXJDb25kaXRpb25zID0gb0V4dGVybmFsU3RhdGUuZmlsdGVyO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXRyaWV2aW5nIHRoZSBleHRlcm5hbCBzdGF0ZVwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdGlmIChEZXZpY2Uuc3lzdGVtLnBob25lKSB7XG5cdFx0XHRcdGNvbnN0IG9EeW5hbWljUGFnZSA9IHRoaXMuX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbCgpO1xuXHRcdFx0XHRpZiAoIXRoaXMuX2lzSW5pdExvYWRFbmFibGVkKCkpIHtcblx0XHRcdFx0XHRvRHluYW1pY1BhZ2Uuc2V0SGVhZGVyRXhwYW5kZWQodHJ1ZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0b0R5bmFtaWNQYWdlLnNldEhlYWRlckV4cGFuZGVkKGZhbHNlKTtcblx0XHRcdFx0XHR0aGlzLnNldEZpbHRlclRvZ2dsZVZpc2liaWxpdHkoZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBUcmlnZ2VycyBhbiBvdXRib3VuZCBuYXZpZ2F0aW9uIHdoZW4gYSB1c2VyIGNob29zZXMgdGhlIGNoZXZyb24uXG5cdFx0ICogQHBhcmFtIG9Db250cm9sbGVyXG5cdFx0ICogQHBhcmFtIHNPdXRib3VuZFRhcmdldCBOYW1lIG9mIHRoZSBvdXRib3VuZCB0YXJnZXQgKG5lZWRzIHRvIGJlIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0KVxuXHRcdCAqIEBwYXJhbSBvQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IGNvbnRhaW5zIHRoZSBkYXRhIGZvciB0aGUgdGFyZ2V0IGFwcFxuXHRcdCAqIEBwYXJhbSBzQ3JlYXRlUGF0aCBDcmVhdGUgcGF0aCB3aGVuIHRoZSBjaGV2cm9uIGlzIGNyZWF0ZWQuXG5cdFx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCBpcyByZXNvbHZlZCBvbmNlIHRoZSBuYXZpZ2F0aW9uIGlzIHRyaWdnZXJlZFxuXHRcdCAqIEBmaW5hbFxuXHRcdCAqL1xuXHRcdGFzeW5jIG9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZChcblx0XHRcdG9Db250cm9sbGVyOiBMaXN0UmVwb3J0Q29udHJvbGxlcixcblx0XHRcdHNPdXRib3VuZFRhcmdldDogc3RyaW5nLFxuXHRcdFx0b0NvbnRleHQ6IENvbnRleHQsXG5cdFx0XHRzQ3JlYXRlUGF0aDogc3RyaW5nXG5cdFx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0XHRyZXR1cm4gb0NvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5vbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQob0NvbnRyb2xsZXIsIHNPdXRib3VuZFRhcmdldCwgb0NvbnRleHQsIHNDcmVhdGVQYXRoKTtcblx0XHR9LFxuXHRcdG9uQ2hhcnRTZWxlY3Rpb25DaGFuZ2VkKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLCBvRXZlbnQ6IFVJNUV2ZW50PHsgZGF0YTogdW5rbm93biB9LCBDaGFydFR5cGU+KTogdm9pZCB7XG5cdFx0XHRjb25zdCBvTWRjQ2hhcnQgPSBvRXZlbnQuZ2V0U291cmNlKCkuZ2V0Q29udGVudCgpIGFzIENoYXJ0LFxuXHRcdFx0XHRvVGFibGUgPSB0aGlzLl9nZXRUYWJsZSgpLFxuXHRcdFx0XHRhRGF0YSA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJkYXRhXCIpLFxuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0aWYgKGFEYXRhKSB7XG5cdFx0XHRcdENoYXJ0VXRpbHMuc2V0Q2hhcnRGaWx0ZXJzKG9NZGNDaGFydCk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBzVGVtcGxhdGVDb250ZW50VmlldyA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShgJHtvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UGF0aCgpfS9hbHBDb250ZW50Vmlld2ApO1xuXHRcdFx0aWYgKHNUZW1wbGF0ZUNvbnRlbnRWaWV3ID09PSBUZW1wbGF0ZUNvbnRlbnRWaWV3LkNoYXJ0KSB7XG5cdFx0XHRcdHRoaXMuaGFzUGVuZGluZ0NoYXJ0Q2hhbmdlcyA9IHRydWU7XG5cdFx0XHR9IGVsc2UgaWYgKG9UYWJsZSkge1xuXHRcdFx0XHRvVGFibGUucmViaW5kKCk7XG5cdFx0XHRcdHRoaXMuaGFzUGVuZGluZ0NoYXJ0Q2hhbmdlcyA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0b25TZWdtZW50ZWRCdXR0b25QcmVzc2VkKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLCBvRXZlbnQ6IFVJNUV2ZW50KTogdm9pZCB7XG5cdFx0XHRjb25zdCBzZWxlY3RlZEtleTogc3RyaW5nID1cblx0XHRcdFx0KG9FdmVudC5nZXRQYXJhbWV0ZXJzKCkgYXMgeyBzZWxlY3RlZEtleTogc3RyaW5nIH0pLnNlbGVjdGVkS2V5IHx8IChvRXZlbnQuZ2V0UGFyYW1ldGVycygpIGFzIHsga2V5OiBzdHJpbmcgfSkua2V5O1xuXHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImFscENvbnRlbnRWaWV3XCIsIHNlbGVjdGVkS2V5KTtcblx0XHRcdGNvbnN0IG9DaGFydCA9IHRoaXMuZ2V0Q2hhcnRDb250cm9sKCk7XG5cdFx0XHRjb25zdCBvVGFibGUgPSB0aGlzLl9nZXRUYWJsZSgpO1xuXG5cdFx0XHRzd2l0Y2ggKHNlbGVjdGVkS2V5KSB7XG5cdFx0XHRcdGNhc2UgVGVtcGxhdGVDb250ZW50Vmlldy5UYWJsZTpcblx0XHRcdFx0XHRpZiAob1RhYmxlKSB7XG5cdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVUYWJsZShvVGFibGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBUZW1wbGF0ZUNvbnRlbnRWaWV3LkNoYXJ0OlxuXHRcdFx0XHRcdGlmIChvQ2hhcnQpIHtcblx0XHRcdFx0XHRcdHRoaXMuX3VwZGF0ZUNoYXJ0KG9DaGFydCBhcyBDaGFydCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFRlbXBsYXRlQ29udGVudFZpZXcuSHlicmlkOlxuXHRcdFx0XHRcdGlmIChvVGFibGUpIHtcblx0XHRcdFx0XHRcdHRoaXMuX3VwZGF0ZVRhYmxlKG9UYWJsZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChvQ2hhcnQpIHtcblx0XHRcdFx0XHRcdHRoaXMuX3VwZGF0ZUNoYXJ0KG9DaGFydCBhcyBDaGFydCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0Ly8gc2V0VGltZW91dCBjYXVzZSB0aGUgdmFyaWFudCBuZWVkcyB0byBiZSBhcHBsaWVkIGJlZm9yZSBqdWRnaW5nIHRoZSBhdXRvIHNlYXJjaCBvciB1cGRhdGluZyB0aGUgYXBwIHN0YXRlXG5cdFx0XHR0aGlzLmZvY3VzSGFuZGxpbmdGb3JTZWdtZW50ZWRCdXR0b24oKTtcblx0XHR9LFxuXHRcdG9uRHluYW1pY1BhZ2VUaXRsZVN0YXRlQ2hhbmdlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgZXZlbnQ6IER5bmFtaWNQYWdlVGl0bGUkU3RhdGVDaGFuZ2VFdmVudCk6IHZvaWQge1xuXHRcdFx0Y29uc3QgZmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdFx0aWYgKGZpbHRlckJhcikge1xuXHRcdFx0XHR0aGlzLnNldEZpbHRlclRvZ2dsZVZpc2liaWxpdHkoISFldmVudC5nZXRQYXJhbWV0ZXIoXCJpc0V4cGFuZGVkXCIpKTtcblx0XHRcdFx0aWYgKGV2ZW50LmdldFBhcmFtZXRlcihcImlzRXhwYW5kZWRcIikgPT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0SW52aXNpYmxlTWVzc2FnZS5nZXRJbnN0YW5jZSgpLmFubm91bmNlKFxuXHRcdFx0XHRcdFx0ZmlsdGVyQmFyLmdldEFzc2lnbmVkRmlsdGVyc1RleHQoKS5maWx0ZXJzVGV4dCBhcyBzdHJpbmcsXG5cdFx0XHRcdFx0XHRJbnZpc2libGVNZXNzYWdlTW9kZS5Bc3NlcnRpdmVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIGZvY3VzIGZvciB0aGUgc2VnbWVudGVkIGJ1dHRvbi5cblx0ICovXG5cdGZvY3VzSGFuZGxpbmdGb3JTZWdtZW50ZWRCdXR0b24oKTogdm9pZCB7XG5cdFx0Y29uc3Qgc2VnbWVudGVkQnV0dG9uID0gdGhpcy5fZ2V0U2VnbWVudGVkQnV0dG9uKCk7XG5cdFx0aWYgKHNlZ21lbnRlZEJ1dHRvbikge1xuXHRcdFx0Y29uc3QgZXZlbnREZWxlZ2F0ZSA9IHtcblx0XHRcdFx0b25BZnRlclJlbmRlcmluZzogKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdHNlZ21lbnRlZEJ1dHRvbi5mb2N1cygpO1xuXHRcdFx0XHRcdHNlZ21lbnRlZEJ1dHRvbi5yZW1vdmVFdmVudERlbGVnYXRlKGV2ZW50RGVsZWdhdGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0c2VnbWVudGVkQnV0dG9uLmFkZEV2ZW50RGVsZWdhdGUoZXZlbnREZWxlZ2F0ZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byB1cGRhdGUgdGhlIGxvY2FsIFVJIG1vZGVsIG9mIHRoZSBwYWdlIHdpdGggdGhlIFNlbGVjdGlvbiBWYXJpYW50LlxuXHQgKiBAcGFyYW0gZmlsdGVyQmFyIE1EQyBmaWx0ZXIgYmFyXG5cdCAqIEBwYXJhbSBpbnRlcm5hbE1vZGVsQ29udGV4dCBUaGUgaW50ZXJuYWwgbW9kZWwgY29udGV4dFxuXHQgKi9cblx0YXN5bmMgX3N0b3JlRmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudChmaWx0ZXJCYXI6IEZpbHRlckJhciwgaW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGZpbHRlckJhckFQSSA9IGZpbHRlckJhci5nZXRQYXJlbnQoKSBhcyBGaWx0ZXJCYXJBUEk7XG5cdFx0XHRjb25zdCBzdiA9IGF3YWl0IGZpbHRlckJhckFQSS5nZXRTZWxlY3Rpb25WYXJpYW50KCk7XG5cdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImZpbHRlckJhclNlbGVjdGlvblZhcmlhbnRcIiwgc3YpO1xuXHRcdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcblx0XHRcdExvZy5lcnJvcihgRkUgOiBFcnJvciBmZXRjaGluZyBzZWxlY3Rpb24gdmFyaWFudCBvbiBmaWx0ZXIgY2hhbmdlOiAke21lc3NhZ2V9YCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBnZXQgdGhlIFNlbGVjdGlvbiBWYXJpYW50IGZyb20gaW50ZXJuYWwgbW9kZWwuXG5cdCAqIEByZXR1cm5zIFNlbGVjdGlvblZhcmlhbnRcblx0ICovXG5cdGdldEZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQoKTogU2VsZWN0aW9uVmFyaWFudCB7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRcdHJldHVybiAoaW50ZXJuYWxNb2RlbENvbnRleHQ/LmdldFByb3BlcnR5KFwiZmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudFwiKSBhcyBTZWxlY3Rpb25WYXJpYW50KSB8fCBuZXcgU2VsZWN0aW9uVmFyaWFudCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIG1lc3NhZ2UgYnV0dG9uIGluIHRoZSBmb290ZXIgaW4gY2FzZSB0aGVyZSBpcyBpbmxpbmUgZWRpdC5cblx0ICogQHBhcmFtIGV2ZW50XG5cdCAqL1xuXHRoYW5kbGVNZXNzYWdlQnV0dG9uVmlzaWJpbGl0eShldmVudDogVUk1RXZlbnQ8eyB2aXNpYmxlOiBib29sZWFuIH0sIE1lc3NhZ2VCdXR0b24+KTogdm9pZCB7XG5cdFx0aWYgKGV2ZW50LmdldFBhcmFtZXRlcihcInZpc2libGVcIikpIHtcblx0XHRcdHRoaXMuc2V0U2hvd0Zvb3RlcihldmVudC5nZXRQYXJhbWV0ZXIoXCJ2aXNpYmxlXCIpKTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGlzdFJlcG9ydENvbnRyb2xsZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQW9FQSxNQUFNQSxtQkFBbUIsR0FBR0MsV0FBVyxDQUFDRCxtQkFBbUI7SUFDMURFLGVBQWUsR0FBR0QsV0FBVyxDQUFDQyxlQUFlOztFQUU5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBSkEsSUFNTUMsb0JBQW9CLElBQUFDLElBQUEsR0FEekJDLGNBQWMsQ0FBQyxrREFBa0QsQ0FBQyxFQUFBQyxLQUFBLEdBRWpFQyxjQUFjLENBQ2RDLGVBQWUsQ0FBQ0MsUUFBUSxDQUFDO0lBQ3hCQyxjQUFjLEVBQUUsU0FBQUEsQ0FBQSxFQUFpQztNQUMvQyxJQUFJLENBQUNDLE9BQU8sQ0FBQyxDQUFDLENBQUNDLGFBQWEsQ0FBQyxDQUFDLENBQTBCQyxlQUFlLENBQUMsQ0FBQztJQUMzRTtFQUNELENBQUMsQ0FDRixDQUFDLEVBQUFDLEtBQUEsR0FHQVAsY0FBYyxDQUNkUSw2QkFBNkIsQ0FBQ04sUUFBUSxDQUFDO0lBQ3RDTyxZQUFZ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
|
|
1078
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJWYXJpYW50VHlwZSIsIlZhcmlhbnRNYW5hZ2VtZW50QkIiLCJUZW1wbGF0ZUNvbnRlbnRWaWV3IiwiQ29yZUxpYnJhcnkiLCJJbml0aWFsTG9hZE1vZGUiLCJMaXN0UmVwb3J0Q29udHJvbGxlciIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwidXNpbmdFeHRlbnNpb24iLCJJbnRlcm5hbFJvdXRpbmciLCJvdmVycmlkZSIsIm9uQWZ0ZXJCaW5kaW5nIiwiZ2V0VmlldyIsImdldENvbnRyb2xsZXIiLCJfb25BZnRlckJpbmRpbmciLCJfZGVjMyIsIkludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0RW50aXR5U2V0IiwiYmFzZSIsImdldEN1cnJlbnRFbnRpdHlTZXQiLCJfZGVjNCIsIlNpZGVFZmZlY3RzIiwiU2lkZUVmZmVjdHNPdmVycmlkZSIsIl9kZWM1IiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUiLCJfZGVjNiIsIlNoYXJlIiwiU2hhcmVPdmVycmlkZXMiLCJfZGVjNyIsIlZpZXdTdGF0ZSIsIlZpZXdTdGF0ZU92ZXJyaWRlcyIsIl9kZWM4IiwiS1BJTWFuYWdlbWVudCIsIl9kZWM5IiwiUGxhY2Vob2xkZXIiLCJfZGVjMCIsIk1lc3NhZ2VIYW5kbGVyIiwiTWVzc2FnZUhhbmRsZXJPdmVycmlkZSIsIl9kZWMxIiwicHVibGljRXh0ZW5zaW9uIiwiX2RlYzEwIiwiZmluYWxFeHRlbnNpb24iLCJfZGVjMTEiLCJwcml2YXRlRXh0ZW5zaW9uIiwiX2RlYzEyIiwiZXh0ZW5zaWJsZSIsIl9kZWMxMyIsIl9kZWMxNCIsIk92ZXJyaWRlRXhlY3V0aW9uIiwiQWZ0ZXIiLCJfZGVjMTUiLCJfZGVjMTYiLCJfZGVjMTciLCJfZGVjMTgiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX1BhZ2VDb250cm9sbGVyIiwiYXJncyIsIl90aGlzIiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfZGVzY3JpcHRvcjIiLCJfZGVzY3JpcHRvcjMiLCJfZGVzY3JpcHRvcjQiLCJfZGVzY3JpcHRvcjUiLCJfZGVzY3JpcHRvcjYiLCJfZGVzY3JpcHRvcjciLCJfZGVzY3JpcHRvcjgiLCJfZGVzY3JpcHRvcjkiLCJmb3JtYXR0ZXJzIiwic2V0QUxQQ29udHJvbE1lc3NhZ2VTdHJpcCIsImFJZ25vcmVkRmllbGRzIiwiYklzQ2hhcnQiLCJvQXBwbHlTdXBwb3J0ZWQiLCJzVGV4dCIsIm9GaWx0ZXJCYXIiLCJfZ2V0RmlsdGVyQmFyQ29udHJvbCIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsImFJZ25vcmVkTGFiZWxzIiwiTWVzc2FnZVN0cmlwIiwiZ2V0TGFiZWxzIiwiZGF0YSIsImdldFJlc291cmNlTW9kZWwiLCJiSXNTZWFyY2hJZ25vcmVkIiwiZW5hYmxlU2VhcmNoIiwiZ2V0QUxQVGV4dCIsImdldFRleHQiLCJoYW5kbGVycyIsIm9uRmlsdGVyTGF5b3V0U3dpdGNoIiwib0V2ZW50IiwiY3VycmVudEtleSIsImdldFNvdXJjZSIsInNlbGVjdGVkS2V5IiwiaXNBaUxheW91dCIsImNvbnRyb2xWYXJpYW50Q29udHJvbHMiLCJfZ2V0Q29udHJvbFZhcmlhbnRNYW5hZ2VtZW50Q29udHJvbHMiLCJmaWx0ZXJCYXJWTSIsIl9nZXRGaWx0ZXJCYXJWYXJpYW50Q29udHJvbCIsInRhYmxlVk0iLCJfZ2V0VGFibGUiLCJnZXRWYXJpYW50Iiwic3VwcG9ydGVkT25BaUxheW91dCIsIlNldCIsImZpbHRlciIsInZtIiwiZm9yRWFjaCIsInZhcmlhbnRDb250cm9sIiwiaXNWaXNpYmxlIiwiaGFzIiwic2V0VmlzaWJsZSIsIm9uSW5saW5lRWRpdFNhdmUiLCJpbmxpbmVFZGl0RmxvdyIsImlubGluZUVkaXRTYXZlIiwib25GaWx0ZXJTZWFyY2giLCJmaWx0ZXJCYXJBUEkiLCJnZXRQYXJlbnQiLCJ0cmlnZ2VyU2VhcmNoIiwib25GaWx0ZXJzQ2hhbmdlZCIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwib25QZW5kaW5nRmlsdGVycyIsImdldFBhcmFtZXRlciIsInNldFByb3BlcnR5IiwiX3N0b3JlRmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudCIsIm9uVmFyaWFudFNlbGVjdGVkIiwicGFyYW1ldGVycyIsImdldFBhcmFtZXRlcnMiLCJ2YXJpYW50TWFuYWdlbWVudCIsIm9yaWdpbmFsU291cmNlIiwiY3VycmVudFZhcmlhbnRLZXkiLCJtdWx0aU1vZGVDb250cm9sIiwiX2dldE11bHRpTW9kZUNvbnRyb2wiLCJpc0EiLCJpbnZhbGlkYXRlQ29udGVudCIsInNldEZyZWV6ZUNvbnRlbnQiLCJzZXRUaW1lb3V0IiwiZmlsdGVyQmFyIiwiZHluYW1pY1BhZ2UiLCJfZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sIiwiZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkIiwiZ2V0RmlsdGVySXRlbXMiLCJmaW5kIiwiZmlsdGVySXRlbSIsImdldFJlcXVpcmVkIiwiZ2V0Q29uZGl0aW9ucyIsInNldEhlYWRlckV4cGFuZGVkIiwiX3Nob3VsZEF1dG9UcmlnZ2VyU2VhcmNoIiwiX2dldEFwcGx5QXV0b21hdGljYWxseU9uVmFyaWFudCIsImdldEV4dGVuc2lvbkFQSSIsInVwZGF0ZUFwcFN0YXRlIiwib25WYXJpYW50U2F2ZWQiLCJldmVudCIsInRyYWNrVmFyaWFudFNhdmVkVGVsZW1ldHJ5Iiwib25WYXJpYW50TWFuYWdlZCIsInRyYWNrVmFyaWFudE1hbmFnZWRUZWxlbWV0cnkiLCJvblNlYXJjaCIsIm9NZGNDaGFydCIsImdldENoYXJ0Q29udHJvbCIsImJIaWRlRHJhZnQiLCJGaWx0ZXJVdGlscyIsImdldEVkaXRTdGF0ZUlzSGlkZURyYWZ0IiwiX3VwZGF0ZUFMUE5vdEFwcGxpY2FibGVGaWVsZHMiLCJvUGFnZUludGVybmFsTW9kZWxDb250ZXh0Iiwic1RlbXBsYXRlQ29udGVudFZpZXciLCJnZXRQcm9wZXJ0eSIsImdldFBhdGgiLCJDaGFydCIsImhhc1BlbmRpbmdDaGFydENoYW5nZXMiLCJUYWJsZSIsImhhc1BlbmRpbmdUYWJsZUNoYW5nZXMiLCJEZXZpY2UiLCJzeXN0ZW0iLCJkZXNrdG9wIiwiZ2V0SGVhZGVyRXhwYW5kZWQiLCJTdGF0ZVV0aWwiLCJyZXRyaWV2ZUV4dGVybmFsU3RhdGUiLCJ0aGVuIiwib0V4dGVybmFsU3RhdGUiLCJmaWx0ZXJCYXJDb25kaXRpb25zIiwiY2F0Y2giLCJvRXJyb3IiLCJMb2ciLCJlcnJvciIsInBob25lIiwib0R5bmFtaWNQYWdlIiwiX2lzSW5pdExvYWRFbmFibGVkIiwic2V0RmlsdGVyVG9nZ2xlVmlzaWJpbGl0eSIsIm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZCIsIm9Db250cm9sbGVyIiwic091dGJvdW5kVGFyZ2V0Iiwib0NvbnRleHQiLCJzQ3JlYXRlUGF0aCIsIl9pbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJvbkNoYXJ0U2VsZWN0aW9uQ2hhbmdlZCIsImdldENvbnRlbnQiLCJvVGFibGUiLCJhRGF0YSIsIkNoYXJ0VXRpbHMiLCJzZXRDaGFydEZpbHRlcnMiLCJyZWJpbmQiLCJvblNlZ21lbnRlZEJ1dHRvblByZXNzZWQiLCJrZXkiLCJvQ2hhcnQiLCJfdXBkYXRlVGFibGUiLCJfdXBkYXRlQ2hhcnQiLCJIeWJyaWQiLCJmb2N1c0hhbmRsaW5nRm9yU2VnbWVudGVkQnV0dG9uIiwib25EeW5hbWljUGFnZVRpdGxlU3RhdGVDaGFuZ2VkIiwiSW52aXNpYmxlTWVzc2FnZSIsImdldEluc3RhbmNlIiwiYW5ub3VuY2UiLCJnZXRBc3NpZ25lZEZpbHRlcnNUZXh0IiwiZmlsdGVyc1RleHQiLCJJbnZpc2libGVNZXNzYWdlTW9kZSIsIkFzc2VydGl2ZSIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiZXh0ZW5zaW9uQVBJIiwiRXh0ZW5zaW9uQVBJIiwib25Jbml0IiwiUGFnZUNvbnRyb2xsZXIiLCJhcHBseSIsImdldE93bmVyQ29tcG9uZW50IiwidWlNb2RlbENvbnRleHQiLCJfaGFzTXVsdGlWaXN1YWxpemF0aW9ucyIsImFscENvbnRlbnRWaWV3IiwiX2dldERlZmF1bHRQYXRoIiwiZ2V0QXBwQ29tcG9uZW50IiwiZ2V0Um91dGVyUHJveHkiLCJ3YWl0Rm9yUm91dGVNYXRjaEJlZm9yZU5hdmlnYXRpb24iLCJfc2V0SW5pdExvYWQiLCJpc0VkaXRhYmxlIiwib25CZWZvcmVSZW5kZXJpbmciLCJkeW5taWNQYWdlSGVhZGVyVGl0bGUiLCJnZXRUaXRsZSIsImJyZWFkY3J1bWJzQkIiLCJnZXRCcmVhZGNydW1icyIsInNldEJyZWFkY3J1bWJMaW5rcyIsIm9uRXhpdCIsImRlc3Ryb3kiLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsInBhZ2VSZWFkeSIsIndhaXRGb3IiLCJfYXBwbHlBcHBTdGF0ZSIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsIndhaXRGb3JFZGl0Q2xlYW51cCIsImFUYWJsZXMiLCJfZ2V0Q29udHJvbHMiLCJ1cGRhdGVBY3Rpb25zIiwiRWRpdFN0YXRlIiwiaXNFZGl0U3RhdGVEaXJ0eSIsIm1vZGVsIiwiZ2V0TW9kZWwiLCJlZGl0RmxvdyIsInRlcm1pbmF0ZURyYWZ0U2Vzc2lvbiIsInRhYmxlIiwib1RhYmxlQmluZGluZyIsImdldFJvd0JpbmRpbmciLCJ0YWJsZUFQSSIsIkNvbW1vblV0aWxzIiwiZ2V0Um91dGluZ1NlcnZpY2UiLCJ3YWl0Rm9yQmluZGluZ0NsZWFudXAiLCJhdHRhY2hFdmVudE9uY2UiLCJfdXBkYXRlVGFibGVBY3Rpb25zIiwiZ2V0VGFibGVEZWZpbml0aW9uIiwiY29udHJvbCIsInR5cGUiLCJyZXNldENoYW5nZXMiLCJyZWZyZXNoIiwiZSIsIndhcm5pbmciLCJzZXRFZGl0U3RhdGVQcm9jZXNzZWQiLCJlbnZpcm9ubWVudENhcGFiaWxpdGllcyIsImdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiaXNJbnNpZ2h0c0VuYWJsZWQiLCJvblBhZ2VSZWFkeSIsIm1QYXJhbWV0ZXJzIiwiZm9yY2VGb2N1cyIsIl9zZXRJbml0aWFsRm9jdXMiLCJnZXRTaGVsbFNlcnZpY2VzIiwic2V0QmFja05hdmlnYXRpb24iLCJ1bmRlZmluZWQiLCJvblZpZXdOZWVkc1JlZnJlc2giLCJzbGljZSIsIm9uQWZ0ZXJDbGVhciIsImFJQk5BY3Rpb25zIiwiZ2V0SUJOQWN0aW9ucyIsInVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5IiwidXBkYXRlTWVudUJ1dHRvblZpc2libGl0eSIsIl9zY3JvbGxUYWJsZXNUb1JvdyIsInNSb3dQYXRoIiwiVGFibGVTY3JvbGxlciIsInNjcm9sbFRhYmxlVG9Sb3ciLCJfZm9jdXNTaWxlbnQiLCJmaWx0ZXJGaWVsZCIsImZvY3VzSW5mbyIsImdldEZvY3VzSW5mbyIsInRhcmdldEluZm8iLCJzaWxlbnQiLCJmb2N1cyIsIl9mb2N1c1doZW5IZWFkZXJFeHBhbmRlZCIsIm9GaWx0ZXJJdGVtIiwiYmFzaWNTZWFyY2hGaWVsZCIsImdldEJhc2ljU2VhcmNoRmllbGQiLCJmaWVsZFRvRm9jdXMiLCJpc0ZvY3VzYWJsZSIsImJ5SWQiLCJfZ2V0RmlsdGVyQmFyQ29udHJvbElkIiwic2V0Rm9jdXNPbkVtcGhhc2l6ZWRIZWFkZXJBY3Rpb24iLCJ0aXRsZSIsImFjdGlvbnMiLCJnZXRBY3Rpb25zIiwiZW1waGFzaXplZEJ1dHRvbiIsImdldFR5cGUiLCJnZXRWaXNpYmxlIiwiZ2V0RW5hYmxlZCIsInJvb3RWaWV3Q29udHJvbGxlciIsImlzRmNsRW5hYmxlZCIsImdldFZpc2libGVWaWV3cyIsImlzSGVhZGVyRXhwYW5kZWQiLCJfaXNGaWx0ZXJCYXJIaWRkZW5Vc2VkIiwid2hlbkluaXRpYWxpemVkIiwiZ2V0U2hvd01lc3NhZ2VzIiwic2V0U2hvd01lc3NhZ2VzIiwiZm9jdXNSb3ciLCJpbmZvIiwiX2dldEJyb3dzZXJUaXRsZSIsIl9wYWdlVGl0bGVJbmZvcm1hdGlvbiIsIlByb21pc2UiLCJyZXNvbHZlIiwiX2dldFBhZ2VUaXRsZUluZm9ybWF0aW9uIiwib01hbmlmZXN0RW50cnkiLCJnZXRNYW5pZmVzdEVudHJ5Iiwic3VidGl0bGUiLCJzdWJUaXRsZSIsImludGVudCIsImljb24iLCJfZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sSWQiLCJfZ2V0QWRhcHRhdGlvbkZpbHRlckJhckNvbnRyb2wiLCJhZGFwdGF0aW9uRmlsdGVyQmFyIiwiZ2V0SW5idWlsdEZpbHRlciIsImdldEFwcFN0YXRlSGFuZGxlciIsImFwcGx5QXBwU3RhdGUiLCJlbmFibGVSZXF1ZXN0cyIsIl9pc0ZpbHRlckJhckhpZGRlbiIsIl9pc011bHRpTW9kZSIsInNldENvdW50c091dERhdGVkIiwiY29udHJvbFZhcmlhbnRJZHMiLCJfZ2V0UGFnZU1vZGVsIiwidmFyaWFudENvbnRyb2xzIiwidmFyaWFudElkQXJyYXkiLCJzcGxpdCIsInZhcmlhbnRJZCIsInRyaW0iLCJwdXNoIiwiX2dldFNlZ21lbnRlZEJ1dHRvbiIsImNvbnRlbnRTd2l0Y2hlciIsIiRzZWdtZW50ZWRCdXR0b24iLCJjdXJyZW50IiwiX2dldENvbnRyb2xGcm9tUGFnZU1vZGVsUHJvcGVydHkiLCJzUGF0aCIsImNvbnRyb2xJZCIsIl9nZXRWaXN1YWxGaWx0ZXJCYXJDb250cm9sIiwic1Zpc3VhbEZpbHRlckJhcklkIiwiU3RhYmxlSWRIZWxwZXIiLCJnZW5lcmF0ZSIsIl9nZXRJY29uVGFiQmFyIiwib0NvbnRyb2wiLCJnZXRTZWxlY3RlZElubmVyQ29udHJvbCIsImNvbnRlbnQiLCJzS2V5IiwiYUNvbnRyb2xzIiwib1RhYk11bHRpTW9kZSIsImdldEl0ZW1zIiwib0l0ZW0iLCJnZXRLZXkiLCJpbmNsdWRlcyIsImRlZmF1bHRQYXRoIiwiTGlzdFJlcG9ydFRlbXBsYXRpbmciLCJnZXREZWZhdWx0UGF0aCIsImluaXRMb2FkTW9kZSIsImdldFZpZXdEYXRhIiwiaW5pdGlhbExvYWQiLCJFbmFibGVkIiwiX2Rpc2FibGVJbml0TG9hZCIsIl9hcHBseUF1dG9tYXRpY2FsbHlPblN0YW5kYXJkVmFyaWFudCIsInZhcmlhbnRNYW5hZ2VtZW50SWQiLCJnZXRWYXJpYW50QmFja1JlZmVyZW5jZSIsImdldERhdGEiLCJyZWdpc3RlckFwcGx5QXV0b21hdGljYWxseU9uU3RhbmRhcmRWYXJpYW50IiwiYmluZCIsIl9zZXRTaGFyZU1vZGVsIiwiZm5HZXRVc2VyIiwiT2JqZWN0UGF0aCIsImdldCIsIm9TaGFyZUluZm8iLCJib29rbWFya1RpdGxlIiwiZG9jdW1lbnQiLCJib29rbWFya0N1c3RvbVVybCIsInNIYXNoIiwiaGFzaGVyIiwiZ2V0SGFzaCIsIndpbmRvdyIsImxvY2F0aW9uIiwiaHJlZiIsImlzU2hhcmVJbkphbUFjdGl2ZSIsImlzSmFtQWN0aXZlIiwib1RlbXBsYXRlUHJpdmF0ZU1vZGVsIiwibUNhY2hlIiwiaWdub3JlZEZpZWxkcyIsImFDaGFydHMiLCJzQ2hhcnRFbnRpdHlQYXRoIiwic0NoYXJ0RW50aXR5U2V0Iiwic0NhY2hlS2V5IiwiZ2V0Tm90QXBwbGljYWJsZUZpbHRlcnMiLCJoaWRlRmlsdGVyQmFyIiwidXNlSGlkZGVuRmlsdGVyQmFyIiwidmFyaWFudHMiLCJnZXRWYXJpYW50cyIsImN1cnJlbnRWYXJpYW50IiwidmFyaWFudCIsIm9WTSIsIkF1dG8iLCJnZXRTdGFuZGFyZFZhcmlhbnRLZXkiLCJnZXRDdXJyZW50VmFyaWFudEtleSIsIm9Db25kaXRpb25zIiwic3RhcnRzV2l0aCIsInN0YW5kYXJkVmFyaWFudCIsImdldEV4ZWN1dGVPblNlbGVjdCIsImlzVGFibGVCb3VuZCIsIm9Jbm5lckNoYXJ0IiwiZ2V0Q29udHJvbERlbGVnYXRlIiwiX2dldENoYXJ0IiwiaXNCb3VuZCIsImdldEJpbmRpbmdJbmZvIiwiYnV0dG9uVmlzaWJsZSIsImdldFNlZ21lbnRlZEJ1dHRvbiIsInNlZ21lbnRlZEJ1dHRvbiIsImV2ZW50RGVsZWdhdGUiLCJvbkFmdGVyUmVuZGVyaW5nIiwicmVtb3ZlRXZlbnREZWxlZ2F0ZSIsImFkZEV2ZW50RGVsZWdhdGUiLCJzdiIsImdldFNlbGVjdGlvblZhcmlhbnQiLCJlcnIiLCJtZXNzYWdlIiwiRXJyb3IiLCJTdHJpbmciLCJnZXRGaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50IiwiU2VsZWN0aW9uVmFyaWFudCIsImhhbmRsZU1lc3NhZ2VCdXR0b25WaXNpYmlsaXR5Iiwic2V0U2hvd0Zvb3RlciIsImdldFRlbGVtZXRyeVNlcnZpY2UiLCJpc0VuYWJsZWQiLCJ2bU1vZGUiLCJmaXJlVGVsZW1ldHJ5IiwiUEFHRSIsInNvdXJjZSIsIkZJTFRFUiIsIlRBQkxFIiwiZGVsZXRlZENvdW50IiwiY291bnRWYXJpYW50cyIsInZhcmlhbnRUeXBlIiwidGVsZW1ldHJ5RXZlbnQiLCJzdG9yZUFjdGlvbiIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciIsIk9iamVjdCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiTGlzdFJlcG9ydENvbnRyb2xsZXIuY29udHJvbGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBPYmplY3RQYXRoIGZyb20gXCJzYXAvYmFzZS91dGlsL09iamVjdFBhdGhcIjtcbmltcG9ydCB0eXBlIER5bmFtaWNQYWdlIGZyb20gXCJzYXAvZi9EeW5hbWljUGFnZVwiO1xuaW1wb3J0IHR5cGUgeyBEeW5hbWljUGFnZVRpdGxlJFN0YXRlQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL2YvRHluYW1pY1BhZ2VUaXRsZVwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIGV4dGVuc2libGUsIGZpbmFsRXh0ZW5zaW9uLCBwcml2YXRlRXh0ZW5zaW9uLCBwdWJsaWNFeHRlbnNpb24sIHVzaW5nRXh0ZW5zaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IEludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxSb3V0aW5nIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbFJvdXRpbmdcIjtcbmltcG9ydCBLUElNYW5hZ2VtZW50IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9LUElNYW5hZ2VtZW50XCI7XG5pbXBvcnQgTWVzc2FnZUhhbmRsZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgUGxhY2Vob2xkZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BsYWNlaG9sZGVyXCI7XG5pbXBvcnQgU2hhcmUgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1NoYXJlXCI7XG5pbXBvcnQgU2lkZUVmZmVjdHMgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1NpZGVFZmZlY3RzXCI7XG5pbXBvcnQgVmlld1N0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9WaWV3U3RhdGVcIjtcbmltcG9ydCB0eXBlIHsgTGlzdFJlcG9ydERlZmluaXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy90ZW1wbGF0ZXMvTGlzdFJlcG9ydENvbnZlcnRlclwiO1xuaW1wb3J0IEVkaXRTdGF0ZSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9FZGl0U3RhdGVcIjtcbmltcG9ydCBNZXNzYWdlU3RyaXAgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTWVzc2FnZVN0cmlwXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGdldFJlc291cmNlTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgKiBhcyBTdGFibGVJZEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IENvcmVMaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSB7IFRpdGxlSW5mb3JtYXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvcm9vdFZpZXcvUm9vdFZpZXdCYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgeyBUZWxlbWV0cnlWYXJpYW50RXZlbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvVGVsZW1ldHJ5U2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIEJyZWFkY3J1bWJzIGZyb20gXCJzYXAvZmUvbWFjcm9zL0JyZWFkY3J1bWJzXCI7XG5pbXBvcnQgdHlwZSBDaGFydFR5cGUgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ2hhcnRcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhckFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9GaWx0ZXJCYXJcIjtcbmltcG9ydCB0eXBlIE1hY3JvQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL01hY3JvQVBJXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlQnV0dG9uIGZyb20gXCJzYXAvZmUvbWFjcm9zL01lc3NhZ2VCdXR0b25cIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL1RhYmxlXCI7XG5pbXBvcnQgVmFyaWFudE1hbmFnZW1lbnRCQiBmcm9tIFwic2FwL2ZlL21hY3Jvcy9WYXJpYW50TWFuYWdlbWVudFwiO1xuaW1wb3J0IHR5cGUgQ2hhcnREZWxlZ2F0ZSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jaGFydC9DaGFydERlbGVnYXRlXCI7XG5pbXBvcnQgQ2hhcnRVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jaGFydC9DaGFydFV0aWxzXCI7XG5pbXBvcnQgdHlwZSBDb250ZW50U3dpdGNoZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udGVudFN3aXRjaGVyL0NvbnRlbnRTd2l0Y2hlclwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL0ZpbHRlckJhclwiO1xuaW1wb3J0IEZpbHRlclV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlci9GaWx0ZXJVdGlsc1wiO1xuaW1wb3J0IFNlbGVjdGlvblZhcmlhbnQgZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uL1NlbGVjdGlvblZhcmlhbnRcIjtcbmltcG9ydCBFeHRlbnNpb25BUEkgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvTGlzdFJlcG9ydC9FeHRlbnNpb25BUElcIjtcbmltcG9ydCB0eXBlIE11bHRpcGxlTW9kZUNvbnRyb2wgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvTGlzdFJlcG9ydC9jb250cm9scy9NdWx0aXBsZU1vZGVDb250cm9sXCI7XG5pbXBvcnQgU2lkZUVmZmVjdHNPdmVycmlkZSBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9MaXN0UmVwb3J0L292ZXJyaWRlcy9TaWRlRWZmZWN0c1wiO1xuaW1wb3J0IFRhYmxlU2Nyb2xsZXIgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvVGFibGVTY3JvbGxlclwiO1xuaW1wb3J0IHR5cGUgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCB0eXBlIEljb25UYWJCYXIgZnJvbSBcInNhcC9tL0ljb25UYWJCYXJcIjtcbmltcG9ydCB0eXBlIFRhYkNvbnRhaW5lckl0ZW0gZnJvbSBcInNhcC9tL1RhYkNvbnRhaW5lckl0ZW1cIjtcbmltcG9ydCBEZXZpY2UgZnJvbSBcInNhcC91aS9EZXZpY2VcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IEludmlzaWJsZU1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL0ludmlzaWJsZU1lc3NhZ2VcIjtcbmltcG9ydCB7IEludmlzaWJsZU1lc3NhZ2VNb2RlIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBWYXJpYW50TWFuYWdlbWVudCBmcm9tIFwic2FwL3VpL2ZsL3ZhcmlhbnRzL1ZhcmlhbnRNYW5hZ2VtZW50XCI7XG5pbXBvcnQgdHlwZSB7IFZhcmlhbnRNYW5hZ2VtZW50JFNlbGVjdEV2ZW50IH0gZnJvbSBcInNhcC91aS9mbC92YXJpYW50cy9WYXJpYW50TWFuYWdlbWVudFwiO1xuaW1wb3J0IHR5cGUgQ2hhcnQgZnJvbSBcInNhcC91aS9tZGMvQ2hhcnRcIjtcbmltcG9ydCB0eXBlIEZpbHRlckZpZWxkIGZyb20gXCJzYXAvdWkvbWRjL0ZpbHRlckZpZWxkXCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBGaWx0ZXJCYXJCYXNlJEZpbHRlcnNDaGFuZ2VkRXZlbnQgfSBmcm9tIFwic2FwL3VpL21kYy9maWx0ZXJiYXIvRmlsdGVyQmFyQmFzZVwiO1xuaW1wb3J0IFN0YXRlVXRpbCBmcm9tIFwic2FwL3VpL21kYy9wMTNuL1N0YXRlVXRpbFwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IGhhc2hlciBmcm9tIFwic2FwL3VpL3RoaXJkcGFydHkvaGFzaGVyXCI7XG5pbXBvcnQgdHlwZSB7IFRpdGxlQWRkaXRpb25hbEluZm8gfSBmcm9tIFwic2FwL3VzaGVsbC91aTVzZXJ2aWNlL1NoZWxsVUlTZXJ2aWNlXCI7XG5pbXBvcnQgKiBhcyBMaXN0UmVwb3J0VGVtcGxhdGluZyBmcm9tIFwiLi9MaXN0UmVwb3J0VGVtcGxhdGluZ1wiO1xuaW1wb3J0IEludGVudEJhc2VkTmF2aWdhdGlvbk92ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9JbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBNZXNzYWdlSGFuZGxlck92ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IFNoYXJlT3ZlcnJpZGVzIGZyb20gXCIuL292ZXJyaWRlcy9TaGFyZVwiO1xuaW1wb3J0IFZpZXdTdGF0ZU92ZXJyaWRlcyBmcm9tIFwiLi9vdmVycmlkZXMvVmlld1N0YXRlXCI7XG5jb25zdCB7IFZhcmlhbnRUeXBlIH0gPSBWYXJpYW50TWFuYWdlbWVudEJCO1xuY29uc3QgVGVtcGxhdGVDb250ZW50VmlldyA9IENvcmVMaWJyYXJ5LlRlbXBsYXRlQ29udGVudFZpZXcsXG5cdEluaXRpYWxMb2FkTW9kZSA9IENvcmVMaWJyYXJ5LkluaXRpYWxMb2FkTW9kZTtcblxuLyoqXG4gKiBDb250cm9sbGVyIGNsYXNzIGZvciB0aGUgbGlzdCByZXBvcnQgcGFnZSwgdXNlZCBpbnNpZGUgYW4gU0FQIEZpb3JpIGVsZW1lbnRzIGFwcGxpY2F0aW9uLlxuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQHB1YmxpY1xuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUudGVtcGxhdGVzLkxpc3RSZXBvcnQuTGlzdFJlcG9ydENvbnRyb2xsZXJcIilcbmNsYXNzIExpc3RSZXBvcnRDb250cm9sbGVyIGV4dGVuZHMgUGFnZUNvbnRyb2xsZXIge1xuXHRAdXNpbmdFeHRlbnNpb24oXG5cdFx0SW50ZXJuYWxSb3V0aW5nLm92ZXJyaWRlKHtcblx0XHRcdG9uQWZ0ZXJCaW5kaW5nOiBmdW5jdGlvbiAodGhpczogSW50ZXJuYWxSb3V0aW5nKSB7XG5cdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgTGlzdFJlcG9ydENvbnRyb2xsZXIpLl9vbkFmdGVyQmluZGluZygpO1xuXHRcdFx0fVxuXHRcdH0pXG5cdClcblx0X3JvdXRpbmchOiBJbnRlcm5hbFJvdXRpbmc7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFxuXHRcdEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uLm92ZXJyaWRlKHtcblx0XHRcdGdldEVudGl0eVNldDogZnVuY3Rpb24gKHRoaXM6IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uKSB7XG5cdFx0XHRcdHJldHVybiAodGhpcy5iYXNlIGFzIExpc3RSZXBvcnRDb250cm9sbGVyKS5nZXRDdXJyZW50RW50aXR5U2V0KCk7XG5cdFx0XHR9XG5cdFx0fSlcblx0KVxuXHRfaW50ZW50QmFzZWROYXZpZ2F0aW9uITogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFNpZGVFZmZlY3RzLm92ZXJyaWRlKFNpZGVFZmZlY3RzT3ZlcnJpZGUpKVxuXHRzaWRlRWZmZWN0cyE6IFNpZGVFZmZlY3RzO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihJbnRlbnRCYXNlZE5hdmlnYXRpb24ub3ZlcnJpZGUoSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUpKVxuXHRpbnRlbnRCYXNlZE5hdmlnYXRpb24hOiBJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFNoYXJlLm92ZXJyaWRlKFNoYXJlT3ZlcnJpZGVzKSlcblx0c2hhcmUhOiBTaGFyZTtcblxuXHRAdXNpbmdFeHRlbnNpb24oVmlld1N0YXRlLm92ZXJyaWRlKFZpZXdTdGF0ZU92ZXJyaWRlcykpXG5cdHZpZXdTdGF0ZSE6IFZpZXdTdGF0ZTtcblxuXHRAdXNpbmdFeHRlbnNpb24oS1BJTWFuYWdlbWVudClcblx0a3BpTWFuYWdlbWVudCE6IEtQSU1hbmFnZW1lbnQ7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFBsYWNlaG9sZGVyKVxuXHRwbGFjZWhvbGRlciE6IFBsYWNlaG9sZGVyO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihNZXNzYWdlSGFuZGxlci5vdmVycmlkZShNZXNzYWdlSGFuZGxlck92ZXJyaWRlKSlcblx0bWVzc2FnZUhhbmRsZXIhOiBNZXNzYWdlSGFuZGxlcjtcblxuXHRwcm90ZWN0ZWQgZXh0ZW5zaW9uQVBJPzogRXh0ZW5zaW9uQVBJO1xuXG5cdHByaXZhdGUgZmlsdGVyQmFyQ29uZGl0aW9ucz86IHVua25vd247XG5cblx0cHJpdmF0ZSBoYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzPzogYm9vbGVhbjtcblxuXHRwcml2YXRlIGhhc1BlbmRpbmdUYWJsZUNoYW5nZXM/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGV4dGVuc2lvbiBBUEkgZm9yIHRoZSBjdXJyZW50IHBhZ2UuXG5cdCAqIEBwdWJsaWNcblx0ICogQHJldHVybnMgVGhlIGV4dGVuc2lvbiBBUEkuXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Z2V0RXh0ZW5zaW9uQVBJKCk6IEV4dGVuc2lvbkFQSSB7XG5cdFx0aWYgKCF0aGlzLmV4dGVuc2lvbkFQSSkge1xuXHRcdFx0dGhpcy5leHRlbnNpb25BUEkgPSBuZXcgRXh0ZW5zaW9uQVBJKHRoaXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5leHRlbnNpb25BUEk7XG5cdH1cblxuXHRvbkluaXQoKTogdm9pZCB7XG5cdFx0UGFnZUNvbnRyb2xsZXIucHJvdG90eXBlLm9uSW5pdC5hcHBseSh0aGlzKTtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldE93bmVyQ29tcG9uZW50KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCB1aU1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0T3duZXJDb21wb25lbnQoKS5nZXRCaW5kaW5nQ29udGV4dChcInVpXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRpZiAoZmlsdGVyQmFyKSB7XG5cdFx0XHR0aGlzLl9zdG9yZUZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQoZmlsdGVyQmFyLCBvSW50ZXJuYWxNb2RlbENvbnRleHQpO1xuXHRcdH1cblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoYXNQZW5kaW5nRmlsdGVyc1wiLCB0cnVlKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoaWRlRHJhZnRJbmZvXCIsIGZhbHNlKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJ1b21cIiwge30pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInNjYWxlZmFjdG9yXCIsIHt9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzY2FsZWZhY3Rvck51bWJlclwiLCB7fSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3VycmVuY3lcIiwge30pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImlzSW5zaWdodHNTdXBwb3J0ZWRcIiwgZmFsc2UpO1xuXG5cdFx0aWYgKHRoaXMuX2hhc011bHRpVmlzdWFsaXphdGlvbnMoKSkge1xuXHRcdFx0bGV0IGFscENvbnRlbnRWaWV3ID0gdGhpcy5fZ2V0RGVmYXVsdFBhdGgoKTtcblx0XHRcdGlmICghRGV2aWNlLnN5c3RlbS5kZXNrdG9wICYmIGFscENvbnRlbnRWaWV3ID09PSBUZW1wbGF0ZUNvbnRlbnRWaWV3Lkh5YnJpZCkge1xuXHRcdFx0XHRhbHBDb250ZW50VmlldyA9IFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQ7XG5cdFx0XHR9XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJhbHBDb250ZW50Vmlld1wiLCBhbHBDb250ZW50Vmlldyk7XG5cdFx0fVxuXG5cdFx0Ly8gU3RvcmUgY29uZGl0aW9ucyBmcm9tIGZpbHRlciBiYXJcblx0XHQvLyB0aGlzIGlzIGxhdGVyIHVzZWQgYmVmb3JlIG5hdmlnYXRpb24gdG8gZ2V0IGNvbmRpdGlvbnMgYXBwbGllZCBvbiB0aGUgZmlsdGVyIGJhclxuXHRcdHRoaXMuZmlsdGVyQmFyQ29uZGl0aW9ucyA9IHt9O1xuXG5cdFx0Ly8gQXMgQXBwU3RhdGVIYW5kbGVyLmFwcGx5QXBwU3RhdGUgdHJpZ2dlcnMgYSBuYXZpZ2F0aW9uIHdlIHdhbnQgdG8gbWFrZSBzdXJlIGl0IHdpbGxcblx0XHQvLyBoYXBwZW4gYWZ0ZXIgdGhlIHJvdXRlTWF0Y2ggZXZlbnQgaGFzIGJlZW4gcHJvY2Vzc2VkIChvdGhlcndpc2UgdGhlIHJvdXRlciBnZXRzIGJyb2tlbilcblx0XHR0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRlclByb3h5KCkud2FpdEZvclJvdXRlTWF0Y2hCZWZvcmVOYXZpZ2F0aW9uKCk7XG5cblx0XHQvLyBDb25maWd1cmUgdGhlIGluaXRpYWwgbG9hZCBzZXR0aW5nc1xuXHRcdHRoaXMuX3NldEluaXRMb2FkKCk7XG5cdFx0dWlNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJcIiwgeyBpc0VkaXRhYmxlOiBmYWxzZSB9KTtcblx0fVxuXG5cdG9uQmVmb3JlUmVuZGVyaW5nKCk6IHZvaWQge1xuXHRcdFBhZ2VDb250cm9sbGVyLnByb3RvdHlwZS5vbkJlZm9yZVJlbmRlcmluZy5hcHBseSh0aGlzKTtcblx0XHRjb25zdCBkeW5hbWljUGFnZSA9IHRoaXMuX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbCgpO1xuXHRcdGNvbnN0IGR5bm1pY1BhZ2VIZWFkZXJUaXRsZSA9IGR5bmFtaWNQYWdlPy5nZXRUaXRsZSgpO1xuXHRcdGNvbnN0IGJyZWFkY3J1bWJzQkIgPSBkeW5taWNQYWdlSGVhZGVyVGl0bGUuZ2V0QnJlYWRjcnVtYnMoKSBhcyBCcmVhZGNydW1icyB8IHVuZGVmaW5lZDtcblx0XHRpZiAoYnJlYWRjcnVtYnNCQikge1xuXHRcdFx0YnJlYWRjcnVtYnNCQi5zZXRCcmVhZGNydW1iTGlua3MoXCJcIik7XG5cdFx0fVxuXHR9XG5cblx0b25FeGl0KCk6IHZvaWQge1xuXHRcdGRlbGV0ZSB0aGlzLmZpbHRlckJhckNvbmRpdGlvbnM7XG5cdFx0aWYgKHRoaXMuZXh0ZW5zaW9uQVBJKSB7XG5cdFx0XHR0aGlzLmV4dGVuc2lvbkFQSS5kZXN0cm95KCk7XG5cdFx0fVxuXHRcdGRlbGV0ZSB0aGlzLmV4dGVuc2lvbkFQSTtcblx0fVxuXG5cdGFzeW5jIF9vbkFmdGVyQmluZGluZygpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0aWYgKCFpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImluaXRpYWxWYXJpYW50QXBwbGllZFwiKSkge1xuXHRcdFx0dGhpcy5wYWdlUmVhZHkud2FpdEZvcih0aGlzLl9hcHBseUFwcFN0YXRlKCkpO1xuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJpbml0aWFsVmFyaWFudEFwcGxpZWRcIiwgdHJ1ZSk7XG5cdFx0fVxuXHRcdGF3YWl0IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkud2FpdEZvckVkaXRDbGVhbnVwKCk7XG5cdFx0Y29uc3QgYVRhYmxlcyA9IHRoaXMuX2dldENvbnRyb2xzKFwidGFibGVcIikgYXMgVGFibGVbXTtcblx0XHRsZXQgdXBkYXRlQWN0aW9ucyA9IHRydWU7XG5cdFx0aWYgKEVkaXRTdGF0ZS5pc0VkaXRTdGF0ZURpcnR5KCkpIHtcblx0XHRcdC8vIFRlcm1pbmF0ZSBhbnkgbGluZ2VyaW5nIEFCQVAgZHJhZnQgc2Vzc2lvbiB3aGVuIHJldHVybmluZyBmcm9tIGFuIGVkaXQgc2Vzc2lvblxuXHRcdFx0Ly8gVGhpcyBoYW5kbGVzIHRoZSBjYXNlIHdoZXJlIHRoZSB1c2VyIG5hdmlnYXRlcyBiYWNrIHZpYSBicm93c2VyIGJhY2sgYnV0dG9uLFxuXHRcdFx0Ly8gd2hpY2ggZG9lc24ndCB0cmlnZ2VyIHRoZSBkcmFmdCBkYXRhIGxvc3MgZGlhbG9nXG5cdFx0XHRjb25zdCBtb2RlbDogT0RhdGFNb2RlbCA9IHRoaXMuZ2V0TW9kZWwoKTtcblx0XHRcdGlmIChtb2RlbCkge1xuXHRcdFx0XHR0aGlzLmVkaXRGbG93LnRlcm1pbmF0ZURyYWZ0U2Vzc2lvbihtb2RlbCk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKT8uaW52YWxpZGF0ZUNvbnRlbnQoKTtcblx0XHRcdGNvbnN0IHRhYmxlID0gdGhpcy5fZ2V0VGFibGUoKTtcblx0XHRcdGNvbnN0IG9UYWJsZUJpbmRpbmcgPSB0YWJsZT8uZ2V0Um93QmluZGluZygpO1xuXHRcdFx0aWYgKG9UYWJsZUJpbmRpbmcpIHtcblx0XHRcdFx0dXBkYXRlQWN0aW9ucyA9IGZhbHNlO1xuXHRcdFx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlPy5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRcdFx0Ly8gVXBkYXRlIHRoZSB0YWJsZSBjb250ZW50IHVzaW5nIHNpZGUgZWZmZWN0cyAobGlzdEJpbmRpbmcucmVmcmVzaCBkb2Vzbid0IGtlZXAgZXhwYW5zaW9uIHN0YXRlcyBpbiBhIFRyZWVUYWJsZSlcblx0XHRcdFx0Q29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuZ2V0VmlldygpKVxuXHRcdFx0XHRcdC5nZXRSb3V0aW5nU2VydmljZSgpXG5cdFx0XHRcdFx0LndhaXRGb3JCaW5kaW5nQ2xlYW51cCgpXG5cdFx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0b1RhYmxlQmluZGluZy5hdHRhY2hFdmVudE9uY2UoXCJkYXRhUmVjZWl2ZWRcIiwgKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVUYWJsZUFjdGlvbnMoYVRhYmxlcyk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGlmICh0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLnR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRcdFx0XHRcdFx0Ly8gQXMgdGhlIHJlZnJlc2ggb24gYSBUcmVlVGFibGUgdXNlcyBzaWRlLWVmZmVjdHMsIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBwZW5kaW5nIGNoYW5nZXNcblx0XHRcdFx0XHRcdFx0Ly8gYmVmb3JlIHRoZSBzaWRlLWVmZmVjdHMgYXJlIHF1ZXJpZWQgKGUuZy4gZmFpbGVkIFBBVENIIHF1ZXJpZXMgdGhhdCB3b3VsZCBiZSByZXNlbnQgdG9nZXRoZXIgd2l0aCBzaWRlIGVmZmVjdHMgR0VUKVxuXHRcdFx0XHRcdFx0XHR0aGlzLmdldE1vZGVsKCkucmVzZXRDaGFuZ2VzKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR0YWJsZUFQSS5yZWZyZXNoKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRcdExvZy53YXJuaW5nKFwiRXJyb3Igd2hpbGUgd2FpdGluZyByZWZyZXNoaW5nIExpc3RSZXBvcnQgdGFibGVcIiwgZSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRFZGl0U3RhdGUuc2V0RWRpdFN0YXRlUHJvY2Vzc2VkKCk7XG5cdFx0fVxuXG5cdFx0aWYgKHVwZGF0ZUFjdGlvbnMpIHtcblx0XHRcdHRoaXMuX3VwZGF0ZVRhYmxlQWN0aW9ucyhhVGFibGVzKTtcblx0XHR9XG5cdFx0Y29uc3QgZW52aXJvbm1lbnRDYXBhYmlsaXRpZXMgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy5nZXRWaWV3KCkpLmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCk7XG5cdFx0ZW52aXJvbm1lbnRDYXBhYmlsaXRpZXNcblx0XHRcdC5pc0luc2lnaHRzRW5hYmxlZCgpXG5cdFx0XHQudGhlbigoaXNJbnNpZ2h0c0VuYWJsZWQ6IGJvb2xlYW4pID0+IHtcblx0XHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJpc0luc2lnaHRzU3VwcG9ydGVkXCIsIGlzSW5zaWdodHNFbmFibGVkKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaCgoZXJyb3I6IHVua25vd24pID0+IHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgY2hlY2tpbmcgaWYgaW5zaWdodHMgYXJlIGVuYWJsZWRcIiwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0Zm9ybWF0dGVycyA9IHtcblx0XHRzZXRBTFBDb250cm9sTWVzc2FnZVN0cmlwKFxuXHRcdFx0dGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsXG5cdFx0XHRhSWdub3JlZEZpZWxkczogc3RyaW5nW10sXG5cdFx0XHRiSXNDaGFydDogYm9vbGVhbiB8IHN0cmluZyxcblx0XHRcdG9BcHBseVN1cHBvcnRlZD86IHsgZW5hYmxlU2VhcmNoOiBib29sZWFuIH1cblx0XHQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdFx0bGV0IHNUZXh0ID0gXCJcIjtcblx0XHRcdGJJc0NoYXJ0ID0gYklzQ2hhcnQgPT09IFwidHJ1ZVwiIHx8IGJJc0NoYXJ0ID09PSB0cnVlO1xuXHRcdFx0Y29uc3Qgb0ZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRcdGlmIChvRmlsdGVyQmFyICYmIEFycmF5LmlzQXJyYXkoYUlnbm9yZWRGaWVsZHMpICYmIGFJZ25vcmVkRmllbGRzLmxlbmd0aCA+IDAgJiYgYklzQ2hhcnQpIHtcblx0XHRcdFx0Y29uc3QgYUlnbm9yZWRMYWJlbHMgPSBNZXNzYWdlU3RyaXAuZ2V0TGFiZWxzKFxuXHRcdFx0XHRcdGFJZ25vcmVkRmllbGRzLFxuXHRcdFx0XHRcdG9GaWx0ZXJCYXIuZGF0YShcImVudGl0eVR5cGVcIiksXG5cdFx0XHRcdFx0b0ZpbHRlckJhcixcblx0XHRcdFx0XHRnZXRSZXNvdXJjZU1vZGVsKG9GaWx0ZXJCYXIpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IGJJc1NlYXJjaElnbm9yZWQgPSAhb0FwcGx5U3VwcG9ydGVkPy5lbmFibGVTZWFyY2g7XG5cdFx0XHRcdHNUZXh0ID0gYklzQ2hhcnRcblx0XHRcdFx0XHQ/IE1lc3NhZ2VTdHJpcC5nZXRBTFBUZXh0KGFJZ25vcmVkTGFiZWxzLCBvRmlsdGVyQmFyLCBiSXNTZWFyY2hJZ25vcmVkKVxuXHRcdFx0XHRcdDogTWVzc2FnZVN0cmlwLmdldFRleHQoYUlnbm9yZWRMYWJlbHMsIG9GaWx0ZXJCYXIsIFwiXCIpO1xuXHRcdFx0XHRyZXR1cm4gc1RleHQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdEBwcml2YXRlRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoXCJBZnRlclwiKVxuXHRhc3luYyBvblBhZ2VSZWFkeShtUGFyYW1ldGVyczogeyBmb3JjZUZvY3VzPzogYm9vbGVhbiB9KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKG1QYXJhbWV0ZXJzLmZvcmNlRm9jdXMpIHtcblx0XHRcdHRoaXMuX3NldEluaXRpYWxGb2N1cygpO1xuXHRcdH1cblx0XHQvLyBSZW1vdmUgdGhlIGhhbmRsZXIgb24gYmFjayBuYXZpZ2F0aW9uIHRoYXQgZGlzcGxheXMgRHJhZnQgY29uZmlybWF0aW9uXG5cdFx0YXdhaXQgdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRTaGVsbFNlcnZpY2VzKCkuc2V0QmFja05hdmlnYXRpb24odW5kZWZpbmVkKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgY2FsbGVkIHdoZW4gdGhlIGNvbnRlbnQgb2YgYSBjdXN0b20gdmlldyB1c2VkIGluIGEgbGlzdCByZXBvcnQgbmVlZHMgdG8gYmUgcmVmcmVzaGVkLlxuXHQgKiBUaGlzIGhhcHBlbnMgZWl0aGVyIHdoZW4gdGhlcmUgaXMgYSBjaGFuZ2Ugb24gdGhlIEZpbHRlckJhciBhbmQgdGhlIHNlYXJjaCBpcyB0cmlnZ2VyZWQsXG5cdCAqIG9yIHdoZW4gYSB0YWIgd2l0aCBjdXN0b20gY29udGVudCBpcyBzZWxlY3RlZCxcblx0ICogb3Igd2hlbiB0aGUgdmlldyBpcyBmb3JjZWQgdG8gYmUgcmVmcmVzaGVkIHRocm91Z2ggdGhlIEV4dGVuc2lvbiBBUEkgZm9yIHRoZSBsaXN0IHJlcG9ydCdzIHB1YmxpYyBtZXRob2Qgc2V0VGFiQ29udGVudFRvQmVSZWZyZXNoZWRPbk5leHRPcGVuaW5nLlxuXHQgKiBUaGlzIG1ldGhvZCBjYW4gYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIGZvciBjdXN0b21pemF0aW9uLlxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMgTWFwIGNvbnRhaW5pbmcgdGhlIGZpbHRlciBjb25kaXRpb25zIG9mIHRoZSBGaWx0ZXJCYXIsIHRoZSBjdXJyZW50VGFiSUQsXG5cdCAqIGFuZCB0aGUgdmlldyByZWZyZXNoIGNhdXNlIHN1Y2ggYXMgdGFiQ2hhbmdlZCwgc2VhcmNoLCBvciBmb3JjZWRSZWZyZXNoLlxuXHQgKiBTZWUgdGhlIGZvbGxvd2luZyBleGFtcGxlIG9mIGEgbWFwOlxuXHQgKiA8Y29kZT48cHJlPlxuXHQgKiBcdHtcblx0ICogXHRcdGZpbHRlckNvbmRpdGlvbnM6IHtcblx0ICogXHRcdFx0Q291bnRyeTogW1xuXHQgKiBcdFx0XHRcdHtcblx0ICogXHRcdFx0XHRcdG9wZXJhdG9yOiBcIkVRXCJcblx0ICpcdFx0XHRcdFx0dmFsaWRhdGVkOiBcIk5vdFZhbGlkYXRlZFwiXG5cdCAqXHRcdFx0XHRcdHZhbHVlczogW1wiR2VybWFueVwiLCAuLi5dXG5cdCAqIFx0XHRcdFx0fSxcblx0ICogXHRcdFx0XHQuLi5cblx0ICogXHRcdFx0XVxuXHQgKiBcdFx0XHQuLi5cblx0ICogXHRcdH0sXG5cdCAqXHRcdGN1cnJlbnRUYWJJZDogXCJmZTo6Q3VzdG9tVGFiOjp0YWIxXCIsXG5cdCAqXHRcdHJlZnJlc2hDYXVzZTogXCJ0YWJDaGFuZ2VkXCIgfCBcInNlYXJjaFwiIHwgXCJmb3JjZWRSZWZyZXNoXCJcblx0ICpcdH1cblx0ICogPC9wcmU+PC9jb2RlPlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0b25WaWV3TmVlZHNSZWZyZXNoKG1QYXJhbWV0ZXJzOiB1bmtub3duKTogdm9pZCB7XG5cdFx0LyogVG8gYmUgb3ZlcnJpZGVuICovXG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIGNhbGxlZCB3aGVuIGEgZmlsdGVyIG9yIHNlYXJjaCB2YWx1ZSBoYXMgYmVlbiBjaGFuZ2VkIGluIHRoZSBGaWx0ZXJCYXIsXG5cdCAqIGJ1dCBoYXMgbm90IGJlZW4gdmFsaWRhdGVkIHlldCBieSB0aGUgZW5kIHVzZXIgd2l0aCB0aGUgJ0dvJyBvciAnU2VhcmNoJyBidXR0b24uXG5cdCAqIFR5cGljYWxseSwgdGhlIGNvbnRlbnQgb2YgdGhlIGN1cnJlbnQgdGFiIGlzIGdyZXllZCBvdXQgdW50aWwgdGhlIGZpbHRlcnMgYXJlIHZhbGlkYXRlZC5cblx0ICogVGhpcyBtZXRob2QgY2FuIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBjb250cm9sbGVyIGV4dGVuc2lvbiBmb3IgY3VzdG9taXphdGlvbi5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRvblBlbmRpbmdGaWx0ZXJzKCk6IHZvaWQge1xuXHRcdC8qIFRvIGJlIG92ZXJyaWRlbiAqL1xuXHR9XG5cblx0Z2V0Q3VycmVudEVudGl0eVNldCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLl9nZXRUYWJsZSgpPy5kYXRhKFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIikuc2xpY2UoMSk7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIGNhbGxlZCB3aGVuIHRoZSAnQ2xlYXInIGJ1dHRvbiBvbiB0aGUgRmlsdGVyQmFyIGlzIHByZXNzZWQuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0b25BZnRlckNsZWFyKCk6IHZvaWQge1xuXHRcdC8qIFRvIGJlIG92ZXJyaWRlbiAqL1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGluaXRpYXRlcyB0aGUgdXBkYXRlIG9mIHRoZSBlbmFibGVkIHN0YXRlIG9mIHRoZSBEYXRhRmllbGRGb3JBY3Rpb24gYW5kIHRoZSB2aXNpYmxlIHN0YXRlIG9mIHRoZSBEYXRhRmllbGRGb3JJQk4gYnV0dG9ucy5cblx0ICogQHBhcmFtIGFUYWJsZXMgQXJyYXkgb2YgdGFibGVzIGluIHRoZSBsaXN0IHJlcG9ydFxuXHQgKi9cblx0X3VwZGF0ZVRhYmxlQWN0aW9ucyhhVGFibGVzOiBUYWJsZVtdKTogdm9pZCB7XG5cdFx0bGV0IGFJQk5BY3Rpb25zOiBVSTVFbGVtZW50W10gPSBbXTtcblx0XHRhVGFibGVzLmZvckVhY2goZnVuY3Rpb24gKG9UYWJsZSkge1xuXHRcdFx0YUlCTkFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9UYWJsZSwgYUlCTkFjdGlvbnMpO1xuXHRcdH0pO1xuXHRcdENvbW1vblV0aWxzLnVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5KGFJQk5BY3Rpb25zLCB0aGlzLmdldFZpZXcoKSk7XG5cdFx0Q29tbW9uVXRpbHMudXBkYXRlTWVudUJ1dHRvblZpc2libGl0eShhSUJOQWN0aW9ucyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2Qgc2Nyb2xscyB0byBhIHNwZWNpZmljIHJvdyBvbiBhbGwgdGhlIGF2YWlsYWJsZSB0YWJsZXMuXG5cdCAqIEBwYXJhbSBzUm93UGF0aCBUaGUgcGF0aCBvZiB0aGUgdGFibGUgcm93IGNvbnRleHQgdG8gYmUgc2Nyb2xsZWQgdG9cblx0ICovXG5cdF9zY3JvbGxUYWJsZXNUb1JvdyhzUm93UGF0aDogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5fZ2V0Q29udHJvbHMoXCJ0YWJsZVwiKS5mb3JFYWNoKGZ1bmN0aW9uIChvVGFibGU6IENvbnRyb2wpIHtcblx0XHRcdFRhYmxlU2Nyb2xsZXIuc2Nyb2xsVGFibGVUb1JvdyhvVGFibGUgYXMgVGFibGUsIHNSb3dQYXRoKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIGEgc2lsZW50IGZvY3VzIG9uIHRoZSBmaWx0ZXIgZmllbGQuIFN1cHByZXNzZXMgdGhlIG9wZW5pbmcgb2YgdGhlIHR5cGUtYWhlYWQgcG9wdXAuXG5cdCAqIEBwYXJhbSBmaWx0ZXJGaWVsZCBUaGUgZmllbGQgd2hlcmUgdGhlIGZvY3VzIHNob3VsZCBiZSBzZXQgYWZ0ZXIgdGhlIGluaXRpYWwgbG9hZFxuXHQgKi9cblx0X2ZvY3VzU2lsZW50KGZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCk6IHZvaWQge1xuXHRcdGNvbnN0IGZvY3VzSW5mbyA9IGZpbHRlckZpZWxkLmdldEZvY3VzSW5mbygpIGFzIHsgdGFyZ2V0SW5mbzogb2JqZWN0IH07XG5cdFx0Zm9jdXNJbmZvLnRhcmdldEluZm8gPSB7IHNpbGVudDogdHJ1ZSB9O1xuXHRcdGZpbHRlckZpZWxkLmZvY3VzKGZvY3VzSW5mbyk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgZm9jdXMgd2hlbiB0aGUgaGVhZGVyIGlzIGV4cGFuZGVkLlxuXHQgKiBUaGUgcHJpb3JpdGllcyBhcmU6ICgxKSBmaXJzdCBlbXB0eSBtYW5kYXRvcnkgZmlsdGVyIGZpZWxkLCAoMikgc2VhcmNoIGZpZWxkIGlmIGZvY3VzYWJsZSBvciBmaXJzdCBmaWx0ZXIgZmllbGQsIGFuZCAoMykgR28gYnV0dG9uLlxuXHQgKiBAcGFyYW0gZmlsdGVyQmFyIFRoZSBmaWx0ZXIgYmFyIGNvbnRyb2wuXG5cdCAqL1xuXHRwcml2YXRlIF9mb2N1c1doZW5IZWFkZXJFeHBhbmRlZChmaWx0ZXJCYXI6IEZpbHRlckJhcik6IHZvaWQge1xuXHRcdGNvbnN0IGZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZCA9IGZpbHRlckJhci5nZXRGaWx0ZXJJdGVtcygpLmZpbmQoZnVuY3Rpb24gKG9GaWx0ZXJJdGVtOiBGaWx0ZXJGaWVsZCkge1xuXHRcdFx0cmV0dXJuIG9GaWx0ZXJJdGVtLmdldFJlcXVpcmVkKCkgJiYgb0ZpbHRlckl0ZW0uZ2V0Q29uZGl0aW9ucygpLmxlbmd0aCA9PT0gMDtcblx0XHR9KTtcblx0XHQvL0ZvY3VzaW5nIG9uIHRoZSBmaXJzdCBlbXB0eSBtYW5kYXRvcnkgZmlsdGVyIGZpZWxkLCBvciBvbiB0aGUgZmlyc3QgZmlsdGVyIGZpZWxkIGlmIHRoZSB0YWJsZSBkYXRhIGlzIGxvYWRlZFxuXHRcdC8vIERvIGEgXCJzaWxlbnRcIiBmb2N1cyBmb3IgRmlsdGVyRmllbGQsIGJ5IGFkZGluZyB0aGUgc2lsZW50IGF0dHJpYnV0ZS4gVGhlIHNpbGVudCBhdHRyaWJ1dGUgc3VwcHJlc3NlcyB0eXBlYWhlYWQgb3BlbmluZy5cblx0XHRpZiAoZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkKSB7XG5cdFx0XHRpZiAoZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkLmlzQTxGaWx0ZXJGaWVsZD4oXCJzYXAudWkubWRjLkZpbHRlckZpZWxkXCIpKSB7XG5cdFx0XHRcdHRoaXMuX2ZvY3VzU2lsZW50KGZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQoZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkIGFzIENvbnRyb2wpLmZvY3VzKCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0aGlzLl9pc0luaXRMb2FkRW5hYmxlZCgpICYmIGZpbHRlckJhci5nZXRGaWx0ZXJJdGVtcygpLmxlbmd0aCA+IDApIHtcblx0XHRcdC8vIElmIHRoZXJlIGlzIG5vIGVtcHR5IG1hbmRhdG9yeSBmaWx0ZXIgZmllbGQsIHNldCBzaWxlbnQgZm9jdXMgb24gc2VhcmNoIGZpZWxkIChpZiBmb2N1c2FibGUpLCBvdGhlcndpc2Ugb24gZmlyc3QgZmlsdGVyIGZpZWxkXG5cdFx0XHRjb25zdCBiYXNpY1NlYXJjaEZpZWxkID0gZmlsdGVyQmFyLmdldEJhc2ljU2VhcmNoRmllbGQoKTtcblx0XHRcdGNvbnN0IGZpZWxkVG9Gb2N1cyA9IGJhc2ljU2VhcmNoRmllbGQ/LmlzRm9jdXNhYmxlKCkgPyBiYXNpY1NlYXJjaEZpZWxkIDogZmlsdGVyQmFyLmdldEZpbHRlckl0ZW1zKClbMF07XG5cdFx0XHRpZiAoZmllbGRUb0ZvY3VzLmlzQTxGaWx0ZXJGaWVsZD4oXCJzYXAudWkubWRjLkZpbHRlckZpZWxkXCIpKSB7XG5cdFx0XHRcdHRoaXMuX2ZvY3VzU2lsZW50KGZpZWxkVG9Gb2N1cyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQoZmllbGRUb0ZvY3VzIGFzIENvbnRyb2wpLmZvY3VzKCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vRm9jdXNpbmcgb24gdGhlIEdvIGJ1dHRvblxuXHRcdFx0dGhpcy5nZXRWaWV3KCkuYnlJZChgJHt0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sSWQoKX0tYnRuU2VhcmNoYCk/LmZvY3VzKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRyaWVzIHRvIGZvY3VzIHRoZSBlbXBoYXNpemVkIChwcmltYXJ5KSBoZWFkZXIgYWN0aW9uIGluIHRoZSBEeW5hbWljUGFnZVRpdGxlIGFjdGlvbnMuXG5cdCAqIFRoaXMgaXMgdXNlZCB3aGVuIG5vIEZpbHRlckJhciBpcyByZW5kZXJlZCBzbyB0aGF0IHRoZSBmaXJzdCBhY3Rpb25hYmxlIGNvbnRyb2wgcmVjZWl2ZXMgZm9jdXMuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgYW4gZW1waGFzaXplZCBhbmQgZm9jdXNhYmxlIGFjdGlvbiBpcyBmb3VuZCBhbmQgZm9jdXNlZFxuXHQgKi9cblx0cHJpdmF0ZSBzZXRGb2N1c09uRW1waGFzaXplZEhlYWRlckFjdGlvbigpOiBib29sZWFuIHtcblx0XHRjb25zdCBkeW5hbWljUGFnZSA9IHRoaXMuX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbCgpO1xuXHRcdGNvbnN0IHRpdGxlID0gZHluYW1pY1BhZ2UuZ2V0VGl0bGUoKTtcblx0XHRjb25zdCBhY3Rpb25zID0gdGl0bGUuZ2V0QWN0aW9ucygpO1xuXHRcdGNvbnN0IGVtcGhhc2l6ZWRCdXR0b24gPSBhY3Rpb25zLmZpbmQoKGNvbnRyb2wpID0+IHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGNvbnRyb2wgJiZcblx0XHRcdFx0Y29udHJvbC5pc0E/LihcInNhcC5tLkJ1dHRvblwiKSAmJlxuXHRcdFx0XHQoY29udHJvbCBhcyBCdXR0b24pLmdldFR5cGUoKSA9PT0gXCJFbXBoYXNpemVkXCIgJiZcblx0XHRcdFx0Y29udHJvbC5nZXRWaXNpYmxlKCkgJiZcblx0XHRcdFx0KGNvbnRyb2wgYXMgQnV0dG9uKS5nZXRFbmFibGVkKCkgIT09IGZhbHNlXG5cdFx0XHQpO1xuXHRcdH0pO1xuXHRcdGlmIChlbXBoYXNpemVkQnV0dG9uKSB7XG5cdFx0XHRlbXBoYXNpemVkQnV0dG9uLmZvY3VzKCk7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGluaXRpYWwgZm9jdXMgaW4gdGhlIExpc3RSZXBvcnQgYmFzZWQgb24gdGhlIFVYIGZvY3VzIHJ1bGVzLlxuXHQgKi9cblx0YXN5bmMgX3NldEluaXRpYWxGb2N1cygpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHQvLyBJbiBGQ0wsIHdoZW4gbmF2aWdhdGluZyBmb3J3YXJkIHRvIGFuIE9iamVjdCBQYWdlIChlLmcuIGFmdGVyIENyZWF0ZSksIHRoZSByb3V0ZU1hdGNoZWQgZXZlbnRcblx0XHQvLyBmaXJlcyBmaXJzdCBmb3IgdGhlIHBhcmVudCByb3V0ZSAoTFIgb25seSkgYmVmb3JlIHRoZSBjaGlsZCByb3V0ZSAoTFIrT1ApLiBUaGlzIGNhdXNlc1xuXHRcdC8vIG9uUGFnZVJlYWR5IHRvIGJlIGNhbGxlZCBvbiB0aGUgTFIgd2l0aCBmb3JjZUZvY3VzPXRydWUsIHN0ZWFsaW5nIGZvY3VzIGZyb20gdGhlIE9QLlxuXHRcdC8vIEd1YXJkOiBza2lwIGZvY3VzIGlmIHRoZSBGQ0wgaXMgc2hvd2luZyBtb3JlIHRoYW4gb25lIGNvbHVtbiAoZGVlcGVyIHBhZ2UgaXMgdmlzaWJsZSkuXG5cdFx0Y29uc3Qgcm9vdFZpZXdDb250cm9sbGVyID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb290Vmlld0NvbnRyb2xsZXIoKTtcblx0XHRpZiAocm9vdFZpZXdDb250cm9sbGVyLmlzRmNsRW5hYmxlZCgpICYmIHJvb3RWaWV3Q29udHJvbGxlci5nZXRWaXNpYmxlVmlld3MoKS5sZW5ndGggPiAxKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IGR5bmFtaWNQYWdlID0gdGhpcy5fZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sKCksXG5cdFx0XHRpc0hlYWRlckV4cGFuZGVkID0gZHluYW1pY1BhZ2UuZ2V0SGVhZGVyRXhwYW5kZWQoKSxcblx0XHRcdGZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKSBhcyBGaWx0ZXJCYXI7XG5cdFx0aWYgKGZpbHRlckJhciAmJiAhdGhpcy5faXNGaWx0ZXJCYXJIaWRkZW5Vc2VkKCkpIHtcblx0XHRcdC8vRW5hYmxpbmcgbWFuZGF0b3J5IGZpbHRlciBmaWVsZHMgbWVzc2FnZSBkaWFsb2dcblx0XHRcdGF3YWl0IGZpbHRlckJhci53aGVuSW5pdGlhbGl6ZWQoKTtcblx0XHRcdGlmICghZmlsdGVyQmFyLmdldFNob3dNZXNzYWdlcygpKSB7XG5cdFx0XHRcdGZpbHRlckJhci5zZXRTaG93TWVzc2FnZXModHJ1ZSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoaXNIZWFkZXJFeHBhbmRlZCkge1xuXHRcdFx0XHR0aGlzLl9mb2N1c1doZW5IZWFkZXJFeHBhbmRlZChmaWx0ZXJCYXIpO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLl9pc0luaXRMb2FkRW5hYmxlZCgpKSB7XG5cdFx0XHRcdGF3YWl0IHRoaXMuX2dldFRhYmxlKClcblx0XHRcdFx0XHQ/LmZvY3VzUm93KDApXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdFx0aWYgKGVycm9yKSB7XG5cdFx0XHRcdFx0XHRcdC8vIGlmIHRoZXJlIGlzIG5vIGVycm9yIGl0IGNhbiBqdXN0IGJlIHRoYXQgdGhlcmUgYXJlIG5vIGxpbmVzIHRvIGZvY3VzXG5cdFx0XHRcdFx0XHRcdExvZy5pbmZvKFwiRXJyb3Igd2hpbGUgc2V0dGluZyBpbml0aWFsIGZvY3VzIG9uIHRoZSB0YWJsZSBcIiwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gTm8gRmlsdGVyQmFyIHJlbmRlcmVkOiBmb2N1cyB0aGUgZW1waGFzaXplZCAocHJpbWFyeSkgaGVhZGVyIGFjdGlvbiBpZiBhdmFpbGFibGVcblx0XHRcdGlmICh0aGlzLnNldEZvY3VzT25FbXBoYXNpemVkSGVhZGVyQWN0aW9uKCkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0YXdhaXQgdGhpcy5fZ2V0VGFibGUoKVxuXHRcdFx0XHQ/LmZvY3VzUm93KDApXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0XHRpZiAoZXJyb3IpIHtcblx0XHRcdFx0XHRcdC8vIGlmIHRoZXJlIGlzIG5vIGVycm9yIGl0IGNhbiBqdXN0IGJlIHRoYXQgdGhlcmUgYXJlIG5vIGxpbmVzIHRvIGZvY3VzXG5cdFx0XHRcdFx0XHRMb2cuaW5mbyhcIkVycm9yIHdoaWxlIHNldHRpbmcgaW5pdGlhbCBmb2N1cyBvbiB0aGUgdGFibGUgXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogT3ZlcnJpZGUgdG8gZ2V0IHRoZSBicm93c2VyIHRpdGxlIG9mIHRoZSBMUiBwYWdlLlxuXHQgKiBAcGFyYW0gX3BhZ2VUaXRsZUluZm9ybWF0aW9uIFByZXNlbnQgcGFnZSB0aXRsZSBpbmZvcm1hdGlvblxuXHQgKiBAcmV0dXJucyBUaXRsZSBpbmZvcm1hdGlvbiB0byBiZSB1c2VkIGJ5IHNoZWxsIHNlcnZpY2VzIGZvciBicm93c2VyIHRpdGxlXG5cdCAqL1xuXHRhc3luYyBfZ2V0QnJvd3NlclRpdGxlKF9wYWdlVGl0bGVJbmZvcm1hdGlvbjogVGl0bGVJbmZvcm1hdGlvbik6IFByb21pc2U8VGl0bGVBZGRpdGlvbmFsSW5mbyB8IHVuZGVmaW5lZD4ge1xuXHRcdC8vIFdlIHNoYWxsIGZhbGxiYWNrIHRvIGRlZmF1bCBhcHAgdGl0bGUgaW4gY2FzZSBvZiBsaXN0IHJlcG9ydC5cblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG5cdH1cblxuXHRhc3luYyBfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24oKTogUHJvbWlzZTx7IHRpdGxlPzogc3RyaW5nOyBzdWJ0aXRsZTogc3RyaW5nOyBpbnRlbnQ6IHN0cmluZzsgaWNvbjogc3RyaW5nIH0+IHtcblx0XHRjb25zdCBvTWFuaWZlc3RFbnRyeSA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC5hcHBcIik7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG5cdFx0XHR0aXRsZTogb01hbmlmZXN0RW50cnkudGl0bGUsXG5cdFx0XHRzdWJ0aXRsZTogb01hbmlmZXN0RW50cnkuc3ViVGl0bGUgfHwgXCJcIixcblx0XHRcdGludGVudDogXCJcIixcblx0XHRcdGljb246IFwiXCJcblx0XHR9KTtcblx0fVxuXG5cdF9nZXRGaWx0ZXJCYXJDb250cm9sKCk6IEZpbHRlckJhciB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQodGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbElkKCkpIGFzIEZpbHRlckJhciB8IHVuZGVmaW5lZDtcblx0fVxuXG5cdF9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2woKTogRHluYW1pY1BhZ2Uge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5ieUlkKHRoaXMuX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbElkKCkpIGFzIER5bmFtaWNQYWdlO1xuXHR9XG5cblx0X2dldEFkYXB0YXRpb25GaWx0ZXJCYXJDb250cm9sKCk6IENvbnRyb2wgfCB1bmRlZmluZWQge1xuXHRcdC8vIElmIHRoZSBhZGFwdGF0aW9uIGZpbHRlciBiYXIgaXMgcGFydCBvZiB0aGUgRE9NIHRyZWUsIHRoZSBcIkFkYXB0IEZpbHRlclwiIGRpYWxvZyBpcyBvcGVuLFxuXHRcdC8vIGFuZCB3ZSByZXR1cm4gdGhlIGFkYXB0YXRpb24gZmlsdGVyIGJhciBhcyBhbiBhY3RpdmUgY29udHJvbCAodmlzaWJsZSBmb3IgdGhlIHVzZXIpXG5cdFx0Y29uc3QgYWRhcHRhdGlvbkZpbHRlckJhciA9ICh0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCkgYXMgeyBnZXRJbmJ1aWx0RmlsdGVyPzogRnVuY3Rpb24gfSkuZ2V0SW5idWlsdEZpbHRlcj8uKCk7XG5cdFx0cmV0dXJuIGFkYXB0YXRpb25GaWx0ZXJCYXI/LmdldFBhcmVudCgpID8gYWRhcHRhdGlvbkZpbHRlckJhciA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdGFzeW5jIF9hcHBseUFwcFN0YXRlKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGF3YWl0IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0QXBwU3RhdGVIYW5kbGVyKCkuYXBwbHlBcHBTdGF0ZSh0aGlzLmdldFZpZXcoKSk7XG5cdFx0Y29uc3Qgb0ZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRpZiAob0ZpbHRlckJhcikge1xuXHRcdFx0b0ZpbHRlckJhci5lbmFibGVSZXF1ZXN0cyh0cnVlKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMuX2lzRmlsdGVyQmFySGlkZGVuKCkpIHtcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoYXNQZW5kaW5nRmlsdGVyc1wiLCBmYWxzZSk7XG5cdFx0XHRpZiAodGhpcy5faXNNdWx0aU1vZGUoKSkge1xuXHRcdFx0XHR0aGlzLl9nZXRNdWx0aU1vZGVDb250cm9sKCkuc2V0Q291bnRzT3V0RGF0ZWQodHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgYWxsIGNvbnRyb2wtbGV2ZWwgdmFyaWFudCBtYW5hZ2VtZW50IGNvbnRyb2xzIChGaWx0ZXJCYXIsIFRhYmxlcywgQ2hhcnRzKS5cblx0ICogVGhpcyBpcyBvbmx5IGFwcGxpY2FibGUgd2hlbiB2YXJpYW50IG1hbmFnZW1lbnQgaXMgc2V0IHRvIFwiQ29udHJvbFwiIG1vZGUuXG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIFZhcmlhbnRNYW5hZ2VtZW50IGNvbnRyb2xzLCBvciBlbXB0eSBhcnJheSBpZiBjb250cm9sIHZhcmlhbnQgSURzIGRvbid0IGV4aXN0XG5cdCAqL1xuXHRfZ2V0Q29udHJvbFZhcmlhbnRNYW5hZ2VtZW50Q29udHJvbHMoKTogVmFyaWFudE1hbmFnZW1lbnRbXSB7XG5cdFx0Y29uc3QgY29udHJvbFZhcmlhbnRJZHMgPSB0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0UHJvcGVydHkoXCIvdmFyaWFudE1hbmFnZW1lbnQvY29udHJvbFZhcmlhbnRJZHNcIik7XG5cblx0XHRpZiAoIWNvbnRyb2xWYXJpYW50SWRzKSB7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fVxuXG5cdFx0Y29uc3QgdmFyaWFudENvbnRyb2xzOiBWYXJpYW50TWFuYWdlbWVudFtdID0gW107XG5cdFx0Y29uc3QgdmFyaWFudElkQXJyYXkgPSBjb250cm9sVmFyaWFudElkcy5zcGxpdChcIixcIik7XG5cblx0XHR2YXJpYW50SWRBcnJheS5mb3JFYWNoKCh2YXJpYW50SWQ6IHN0cmluZykgPT4ge1xuXHRcdFx0Y29uc3QgdmFyaWFudENvbnRyb2wgPSB0aGlzLmdldFZpZXcoKS5ieUlkKHZhcmlhbnRJZC50cmltKCkpIGFzIFZhcmlhbnRNYW5hZ2VtZW50O1xuXHRcdFx0aWYgKHZhcmlhbnRDb250cm9sKSB7XG5cdFx0XHRcdHZhcmlhbnRDb250cm9scy5wdXNoKHZhcmlhbnRDb250cm9sKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHJldHVybiB2YXJpYW50Q29udHJvbHM7XG5cdH1cblxuXHRfZ2V0U2VnbWVudGVkQnV0dG9uKCk6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGNvbnRlbnRTd2l0Y2hlciA9IHRoaXMuZ2V0VmlldygpLmJ5SWQoXCJmZTo6Q29udGVudFN3aXRjaGVyXCIpIGFzIFVJNUVsZW1lbnQgJiB7ICRzZWdtZW50ZWRCdXR0b24/OiB7IGN1cnJlbnQ/OiBVSTVFbGVtZW50IH0gfTtcblx0XHRyZXR1cm4gY29udGVudFN3aXRjaGVyPy4kc2VnbWVudGVkQnV0dG9uPy5jdXJyZW50O1xuXHR9XG5cblx0X2dldENvbnRyb2xGcm9tUGFnZU1vZGVsUHJvcGVydHkoc1BhdGg6IHN0cmluZyk6IENvbnRyb2wgfCBNYWNyb0FQSSB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgY29udHJvbElkID0gdGhpcy5fZ2V0UGFnZU1vZGVsKCk/LmdldFByb3BlcnR5KHNQYXRoKTtcblx0XHRyZXR1cm4gY29udHJvbElkID8gKHRoaXMuZ2V0VmlldygpLmJ5SWQoY29udHJvbElkKSBhcyBDb250cm9sKSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdF9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2xJZCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0UHJvcGVydHkoXCIvZHluYW1pY0xpc3RSZXBvcnRJZFwiKSB8fCBcIlwiO1xuXHR9XG5cblx0X2dldEZpbHRlckJhckNvbnRyb2xJZCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0UHJvcGVydHkoXCIvZmlsdGVyQmFySWRcIikgfHwgXCJcIjtcblx0fVxuXG5cdGdldENoYXJ0Q29udHJvbCgpOiBDb250cm9sIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0Q29udHJvbEZyb21QYWdlTW9kZWxQcm9wZXJ0eShcIi9zaW5nbGVDaGFydElkXCIpIGFzIENoYXJ0VHlwZTtcblx0fVxuXG5cdF9nZXRWaXN1YWxGaWx0ZXJCYXJDb250cm9sKCk6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IHNWaXN1YWxGaWx0ZXJCYXJJZCA9IFN0YWJsZUlkSGVscGVyLmdlbmVyYXRlKFtcInZpc3VhbEZpbHRlclwiLCB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sSWQoKV0pO1xuXHRcdHJldHVybiBzVmlzdWFsRmlsdGVyQmFySWQgPyB0aGlzLmdldFZpZXcoKS5ieUlkKHNWaXN1YWxGaWx0ZXJCYXJJZCkgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHRfZ2V0RmlsdGVyQmFyVmFyaWFudENvbnRyb2woKTogVmFyaWFudE1hbmFnZW1lbnQgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLl9nZXRDb250cm9sRnJvbVBhZ2VNb2RlbFByb3BlcnR5KFwiL3ZhcmlhbnRNYW5hZ2VtZW50L2lkXCIpIGFzIFZhcmlhbnRNYW5hZ2VtZW50IHwgdW5kZWZpbmVkO1xuXHR9XG5cblx0X2dldE11bHRpTW9kZUNvbnRyb2woKTogTXVsdGlwbGVNb2RlQ29udHJvbCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQoXCJmZTo6VGFiTXVsdGlwbGVNb2RlOjpDb250cm9sXCIpIGFzIE11bHRpcGxlTW9kZUNvbnRyb2w7XG5cdH1cblxuXHRfZ2V0SWNvblRhYkJhcigpOiBJY29uVGFiQmFyIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuYnlJZChcImZlOjpUYWJNdWx0aXBsZU1vZGVcIikgYXMgSWNvblRhYkJhcjtcblx0fVxuXG5cdF9nZXRUYWJsZSgpOiBUYWJsZSB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHRoaXMuX2lzTXVsdGlNb2RlKCkpIHtcblx0XHRcdGNvbnN0IG9Db250cm9sID0gdGhpcy5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpPy5nZXRTZWxlY3RlZElubmVyQ29udHJvbCgpPy5jb250ZW50O1xuXHRcdFx0cmV0dXJuIG9Db250cm9sPy5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpID8gKG9Db250cm9sIGFzIFRhYmxlKSA6IHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2dldENvbnRyb2xGcm9tUGFnZU1vZGVsUHJvcGVydHkoXCIvc2luZ2xlVGFibGVJZFwiKSBhcyBUYWJsZSB8IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblxuXHRfZ2V0Q29udHJvbHMoc0tleT86IHN0cmluZyk6IENvbnRyb2xbXSB7XG5cdFx0aWYgKHRoaXMuX2lzTXVsdGlNb2RlKCkpIHtcblx0XHRcdGNvbnN0IGFDb250cm9sczogQ29udHJvbFtdID0gW107XG5cdFx0XHRjb25zdCBvVGFiTXVsdGlNb2RlID0gdGhpcy5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpLmNvbnRlbnQ7XG5cdFx0XHRvVGFiTXVsdGlNb2RlLmdldEl0ZW1zKCkuZm9yRWFjaCgob0l0ZW06IHVua25vd24pID0+IHtcblx0XHRcdFx0Y29uc3Qgb0NvbnRyb2wgPSB0aGlzLmdldFZpZXcoKS5ieUlkKChvSXRlbSBhcyBUYWJDb250YWluZXJJdGVtKS5nZXRLZXkoKSkgYXMgQ29udHJvbDtcblx0XHRcdFx0aWYgKG9Db250cm9sICYmIHNLZXkpIHtcblx0XHRcdFx0XHRpZiAoKG9JdGVtIGFzIFRhYkNvbnRhaW5lckl0ZW0pLmdldEtleSgpLmluY2x1ZGVzKGBmZTo6JHtzS2V5fWApKSB7XG5cdFx0XHRcdFx0XHRhQ29udHJvbHMucHVzaChvQ29udHJvbCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKG9Db250cm9sICE9PSB1bmRlZmluZWQgJiYgb0NvbnRyb2wgIT09IG51bGwpIHtcblx0XHRcdFx0XHRhQ29udHJvbHMucHVzaChvQ29udHJvbCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIGFDb250cm9scztcblx0XHR9IGVsc2UgaWYgKHNLZXkgPT09IFwiQ2hhcnRcIikge1xuXHRcdFx0Y29uc3Qgb0NoYXJ0ID0gdGhpcy5nZXRDaGFydENvbnRyb2woKTtcblx0XHRcdHJldHVybiBvQ2hhcnQgPyBbb0NoYXJ0XSA6IFtdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBvVGFibGUgPSB0aGlzLl9nZXRUYWJsZSgpO1xuXHRcdFx0cmV0dXJuIG9UYWJsZSA/IFtvVGFibGVdIDogW107XG5cdFx0fVxuXHR9XG5cblx0X2dldERlZmF1bHRQYXRoKCk6IHN0cmluZyB7XG5cdFx0Y29uc3QgZGVmYXVsdFBhdGggPSBMaXN0UmVwb3J0VGVtcGxhdGluZy5nZXREZWZhdWx0UGF0aCh0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0UHJvcGVydHkoXCIvdmlld3NcIikgfHwgW10pO1xuXHRcdHN3aXRjaCAoZGVmYXVsdFBhdGgpIHtcblx0XHRcdGNhc2UgXCJwcmltYXJ5XCI6XG5cdFx0XHRcdHJldHVybiBUZW1wbGF0ZUNvbnRlbnRWaWV3LkNoYXJ0O1xuXHRcdFx0Y2FzZSBcInNlY29uZGFyeVwiOlxuXHRcdFx0XHRyZXR1cm4gVGVtcGxhdGVDb250ZW50Vmlldy5UYWJsZTtcblx0XHRcdGNhc2UgXCJib3RoXCI6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gVGVtcGxhdGVDb250ZW50Vmlldy5IeWJyaWQ7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBrbm93IGlmIExpc3RSZXBvcnQgaXMgY29uZmlndXJlZCB3aXRoIE11bHRpcGxlIFRhYmxlIG1vZGUuXG5cdCAqIEByZXR1cm5zIElzIE11bHRpcGxlIFRhYmxlIG1vZGUgc2V0P1xuXHQgKi9cblx0X2lzTXVsdGlNb2RlKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAhIXRoaXMuX2dldFBhZ2VNb2RlbCgpPy5nZXRQcm9wZXJ0eShcIi9tdWx0aVZpZXdzQ29udHJvbFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8ga25vdyBpZiBMaXN0UmVwb3J0IGlzIGNvbmZpZ3VyZWQgdG8gbG9hZCBkYXRhIGF0IHN0YXJ0IHVwLlxuXHQgKiBAcmV0dXJucyBJcyBJbml0TG9hZCBlbmFibGVkP1xuXHQgKi9cblx0X2lzSW5pdExvYWRFbmFibGVkKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGluaXRMb2FkTW9kZSA9IHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkuaW5pdGlhbExvYWQ7XG5cdFx0cmV0dXJuIGluaXRMb2FkTW9kZSA9PT0gSW5pdGlhbExvYWRNb2RlLkVuYWJsZWQ7XG5cdH1cblxuXHRfaGFzTXVsdGlWaXN1YWxpemF0aW9ucygpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0UGFnZU1vZGVsKCk/LmdldFByb3BlcnR5KFwiL2hhc011bHRpVmlzdWFsaXphdGlvbnNcIik7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHN1c3BlbmQgc2VhcmNoIG9uIHRoZSBmaWx0ZXIgYmFyLiBUaGUgaW5pdGlhbCBsb2FkaW5nIG9mIGRhdGEgaXMgZGlzYWJsZWQgYmFzZWQgb24gdGhlIG1hbmlmZXN0IGNvbmZpZ3VyYXRpb24gSW5pdExvYWQgLSBEaXNhYmxlZC9BdXRvLlxuXHQgKiBJdCBpcyBlbmFibGVkIGxhdGVyIHdoZW4gdGhlIHZpZXcgc3RhdGUgaXMgc2V0LCB3aGVuIGl0IGlzIHBvc3NpYmxlIHRvIHJlYWxpemUgaWYgdGhlcmUgYXJlIGRlZmF1bHQgZmlsdGVycy5cblx0ICovXG5cdF9kaXNhYmxlSW5pdExvYWQoKTogdm9pZCB7XG5cdFx0Y29uc3QgZmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdC8vIGNoZWNrIGZvciBmaWx0ZXIgYmFyIGhpZGRlblxuXHRcdGlmIChmaWx0ZXJCYXIpIHtcblx0XHRcdGZpbHRlckJhci5lbmFibGVSZXF1ZXN0cyhmYWxzZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCBjYWxsZWQgYnkgZmxleCB0byBkZXRlcm1pbmUgaWYgdGhlIGFwcGx5QXV0b21hdGljYWxseSBzZXR0aW5nIG9uIHRoZSB2YXJpYW50IGlzIHZhbGlkLlxuXHQgKiBDYWxsZWQgb25seSBmb3IgU3RhbmRhcmQgVmFyaWFudCBhbmQgb25seSB3aGVuIHRoZXJlIGlzIGRpc3BsYXkgdGV4dCBzZXQgZm9yIGFwcGx5QXV0b21hdGljYWxseSAoRkUgb25seSBzZXRzIGl0IGZvciBBdXRvKS5cblx0ICogQHJldHVybnMgQm9vbGVhbiB0cnVlIGlmIGRhdGEgc2hvdWxkIGJlIGxvYWRlZCBhdXRvbWF0aWNhbGx5LCBmYWxzZSBvdGhlcndpc2Vcblx0ICovXG5cdF9hcHBseUF1dG9tYXRpY2FsbHlPblN0YW5kYXJkVmFyaWFudCgpOiBib29sZWFuIHtcblx0XHQvLyBXZSBhbHdheXMgcmV0dXJuIGZhbHNlIGFuZCB0YWtlIGNhcmUgb2YgaXQgd2hlbiB2aWV3IHN0YXRlIGlzIHNldFxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb25maWd1cmUgdGhlIHNldHRpbmdzIGZvciBpbml0aWFsIGxvYWQgYmFzZWQgb25cblx0ICogLSBtYW5pZmVzdCBzZXR0aW5nIGluaXRMb2FkIC0gRW5hYmxlZC9EaXNhYmxlZC9BdXRvXG5cdCAqIC0gdXNlcidzIHNldHRpbmcgb2YgYXBwbHlBdXRvbWF0aWNhbGx5IG9uIHZhcmlhbnRcblx0ICogLSBpZiB0aGVyZSBhcmUgZGVmYXVsdCBmaWx0ZXJzXG5cdCAqIFdlIGRpc2FibGUgdGhlIGZpbHRlciBiYXIgc2VhcmNoIGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuYWJsZSBpdCB3aGVuIHZpZXcgc3RhdGUgaXMgc2V0LlxuXHQgKi9cblx0X3NldEluaXRMb2FkKCk6IHZvaWQge1xuXHRcdC8vIGlmIGluaXRMb2FkIGlzIERpc2FibGVkIG9yIEF1dG8sIHN3aXRjaCBvZmYgZmlsdGVyIGJhciBzZWFyY2ggdGVtcG9yYXJpbHkgYXQgc3RhcnRcblx0XHRpZiAoIXRoaXMuX2lzSW5pdExvYWRFbmFibGVkKCkpIHtcblx0XHRcdHRoaXMuX2Rpc2FibGVJbml0TG9hZCgpO1xuXHRcdH1cblx0XHQvLyBzZXQgaG9vayBmb3IgZmxleCBmb3Igd2hlbiBzdGFuZGFyZCB2YXJpYW50IGlzIHNldCAoYXQgc3RhcnQgb3IgYnkgdXNlciBhdCBydW50aW1lKVxuXHRcdC8vIHJlcXVpcmVkIHRvIG92ZXJyaWRlIHRoZSB1c2VyIHNldHRpbmcgJ2FwcGx5IGF1dG9tYXRpY2FsbHknIGJlaGF2aW91ciBpZiB0aGVyZSBhcmUgbm8gZmlsdGVyc1xuXHRcdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50SWQgPSBMaXN0UmVwb3J0VGVtcGxhdGluZy5nZXRWYXJpYW50QmFja1JlZmVyZW5jZShcblx0XHRcdHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCksXG5cdFx0XHR0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0RGF0YSgpIGFzIExpc3RSZXBvcnREZWZpbml0aW9uXG5cdFx0KTtcblx0XHRjb25zdCB2YXJpYW50TWFuYWdlbWVudCA9IHZhcmlhbnRNYW5hZ2VtZW50SWQgJiYgKHRoaXMuZ2V0VmlldygpLmJ5SWQodmFyaWFudE1hbmFnZW1lbnRJZCkgYXMgVmFyaWFudE1hbmFnZW1lbnQpO1xuXHRcdGlmICh2YXJpYW50TWFuYWdlbWVudCkge1xuXHRcdFx0KFxuXHRcdFx0XHR2YXJpYW50TWFuYWdlbWVudCBhcyB7IHJlZ2lzdGVyQXBwbHlBdXRvbWF0aWNhbGx5T25TdGFuZGFyZFZhcmlhbnQ/OiBGdW5jdGlvbiB9XG5cdFx0XHQpPy5yZWdpc3RlckFwcGx5QXV0b21hdGljYWxseU9uU3RhbmRhcmRWYXJpYW50Py4odGhpcy5fYXBwbHlBdXRvbWF0aWNhbGx5T25TdGFuZGFyZFZhcmlhbnQuYmluZCh0aGlzKSk7XG5cdFx0fVxuXHR9XG5cblx0X3NldFNoYXJlTW9kZWwoKTogdm9pZCB7XG5cdFx0Ly8gVE9ETzogZGVhY3RpdmF0ZWQgZm9yIG5vdyAtIGN1cnJlbnRseSB0aGVyZSBpcyBubyBfdGVtcGxQcml2IGFueW1vcmUsIHRvIGJlIGRpc2N1c3NlZFxuXHRcdC8vIHRoaXMgbWV0aG9kIGlzIGN1cnJlbnRseSBub3QgY2FsbGVkIGFueW1vcmUgZnJvbSB0aGUgaW5pdCBtZXRob2RcblxuXHRcdGNvbnN0IGZuR2V0VXNlciA9IE9iamVjdFBhdGguZ2V0KFwic2FwLnVzaGVsbC5Db250YWluZXIuZ2V0VXNlclwiKTtcblx0XHQvL3ZhciBvTWFuaWZlc3QgPSB0aGlzLmdldE93bmVyQ29tcG9uZW50KCkuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TWV0YWRhdGEoKS5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLnVpXCIpO1xuXHRcdC8vdmFyIHNCb29rbWFya0ljb24gPSAob01hbmlmZXN0ICYmIG9NYW5pZmVzdC5pY29ucyAmJiBvTWFuaWZlc3QuaWNvbnMuaWNvbikgfHwgXCJcIjtcblxuXHRcdC8vc2hhcmVNb2RlbDogSG9sZHMgYWxsIHRoZSBzaGFyaW5nIHJlbGV2YW50IGluZm9ybWF0aW9uIGFuZCBpbmZvIHVzZWQgaW4gWE1MIHZpZXdcblx0XHRjb25zdCBvU2hhcmVJbmZvID0ge1xuXHRcdFx0Ym9va21hcmtUaXRsZTogZG9jdW1lbnQudGl0bGUsIC8vVG8gbmFtZSB0aGUgYm9va21hcmsgYWNjb3JkaW5nIHRvIHRoZSBhcHAgdGl0bGUuXG5cdFx0XHRib29rbWFya0N1c3RvbVVybDogZnVuY3Rpb24gKCk6IHN0cmluZyB7XG5cdFx0XHRcdGNvbnN0IHNIYXNoID0gaGFzaGVyLmdldEhhc2goKTtcblx0XHRcdFx0cmV0dXJuIHNIYXNoID8gYCMke3NIYXNofWAgOiB3aW5kb3cubG9jYXRpb24uaHJlZjtcblx0XHRcdH0sXG5cdFx0XHQvKlxuXHRcdFx0XHRcdFx0XHRUbyBiZSBhY3RpdmF0ZWQgb25jZSB0aGUgRkxQIHNob3dzIHRoZSBjb3VudCAtIHNlZSBjb21tZW50IGFib3ZlXG5cdFx0XHRcdFx0XHRcdGJvb2ttYXJrU2VydmljZVVybDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly92YXIgb1RhYmxlID0gb1RhYmxlLmdldElubmVyVGFibGUoKTsgb1RhYmxlIGlzIGFscmVhZHkgdGhlIHNhcC5mZSB0YWJsZSAoYnV0IG5vdCB0aGUgaW5uZXIgb25lKVxuXHRcdFx0XHRcdFx0XHRcdC8vIHdlIHNob3VsZCB1c2UgdGFibGUuZ2V0TGlzdEJpbmRpbmdJbmZvIGluc3RlYWQgb2YgdGhlIGJpbmRpbmdcblx0XHRcdFx0XHRcdFx0XHR2YXIgb0JpbmRpbmcgPSBvVGFibGUuZ2V0QmluZGluZyhcInJvd3NcIikgfHwgb1RhYmxlLmdldEJpbmRpbmcoXCJpdGVtc1wiKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gb0JpbmRpbmcgPyBmbkdldERvd25sb2FkVXJsKG9CaW5kaW5nKSA6IFwiXCI7XG5cdFx0XHRcdFx0XHRcdH0sKi9cblx0XHRcdGlzU2hhcmVJbkphbUFjdGl2ZTogISFmbkdldFVzZXIgJiYgZm5HZXRVc2VyKCkuaXNKYW1BY3RpdmUoKVxuXHRcdH07XG5cblx0XHRjb25zdCBvVGVtcGxhdGVQcml2YXRlTW9kZWwgPSB0aGlzLmdldE93bmVyQ29tcG9uZW50KCkuZ2V0TW9kZWwoXCJfdGVtcGxQcml2XCIpIGFzIEpTT05Nb2RlbDtcblx0XHRvVGVtcGxhdGVQcml2YXRlTW9kZWwuc2V0UHJvcGVydHkoXCIvbGlzdFJlcG9ydC9zaGFyZVwiLCBvU2hhcmVJbmZvKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gdXBkYXRlIHRoZSBsb2NhbCBVSSBtb2RlbCBvZiB0aGUgcGFnZSB3aXRoIHRoZSBmaWVsZHMgdGhhdCBhcmUgbm90IGFwcGxpY2FibGUgdG8gdGhlIGZpbHRlciBiYXIgKHRoaXMgaXMgc3BlY2lmaWMgdG8gdGhlIEFMUCBzY2VuYXJpbykuXG5cdCAqIEBwYXJhbSBvSW50ZXJuYWxNb2RlbENvbnRleHQgVGhlIGludGVybmFsIG1vZGVsIGNvbnRleHRcblx0ICogQHBhcmFtIG9GaWx0ZXJCYXIgTURDIGZpbHRlciBiYXJcblx0ICovXG5cdF91cGRhdGVBTFBOb3RBcHBsaWNhYmxlRmllbGRzKG9JbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsIG9GaWx0ZXJCYXI6IEZpbHRlckJhcik6IHZvaWQge1xuXHRcdGNvbnN0IG1DYWNoZTogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge307XG5cdFx0Y29uc3QgaWdub3JlZEZpZWxkczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge30sXG5cdFx0XHRhVGFibGVzID0gdGhpcy5fZ2V0Q29udHJvbHMoXCJ0YWJsZVwiKSxcblx0XHRcdGFDaGFydHMgPSB0aGlzLl9nZXRDb250cm9scyhcIkNoYXJ0XCIpO1xuXG5cdFx0aWYgKCFhVGFibGVzLmxlbmd0aCB8fCAhYUNoYXJ0cy5sZW5ndGgpIHtcblx0XHRcdC8vIElmIHRoZXJlJ3Mgbm90IGEgdGFibGUgYW5kIGEgY2hhcnQsIHdlJ3JlIG5vdCBpbiB0aGUgQUxQIGNhc2Vcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBGb3IgdGhlIG1vbWVudCwgdGhlcmUncyBub3RoaW5nIGZvciB0YWJsZXMuLi5cblx0XHRhQ2hhcnRzLmZvckVhY2goZnVuY3Rpb24gKG9DaGFydCkge1xuXHRcdFx0Y29uc3Qgc0NoYXJ0RW50aXR5UGF0aCA9IG9DaGFydC5kYXRhKFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIiksXG5cdFx0XHRcdHNDaGFydEVudGl0eVNldCA9IHNDaGFydEVudGl0eVBhdGguc2xpY2UoMSksXG5cdFx0XHRcdHNDYWNoZUtleSA9IGAke3NDaGFydEVudGl0eVNldH1DaGFydGA7XG5cdFx0XHRpZiAoIW1DYWNoZVtzQ2FjaGVLZXldKSB7XG5cdFx0XHRcdG1DYWNoZVtzQ2FjaGVLZXldID0gRmlsdGVyVXRpbHMuZ2V0Tm90QXBwbGljYWJsZUZpbHRlcnMob0ZpbHRlckJhciwgb0NoYXJ0KTtcblx0XHRcdH1cblx0XHRcdGlnbm9yZWRGaWVsZHNbc0NhY2hlS2V5XSA9IG1DYWNoZVtzQ2FjaGVLZXldO1xuXHRcdH0pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImNvbnRyb2xzL2lnbm9yZWRGaWVsZHNcIiwgaWdub3JlZEZpZWxkcyk7XG5cdH1cblxuXHQvKipcblx0ICogUHJvdmlkZXMgdGhlIHNldHRpbmcgd2hldGhlciBGaWx0ZXJCYXIgaXMgaGlkZGVuIGJhc2VkIG9uIHRoZSBtYW5pZmVzdCBzZXR0aW5nICdoaWRlRmlsdGVyQmFyJy5cblx0ICogU2hvdWxkIGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBfaXNGaWx0ZXJCYXJIaWRkZW5Vc2VkIGFzIGl0IG1heSBoYXZlIG92ZXJyaWRkZW4gdGhpcyBzZXR0aW5nLlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBGaWx0ZXJCYXIgaXMgaGlkZGVuLCBmYWxzZSBpZiB1bmtub3duXG5cdCAqL1xuXHRfaXNGaWx0ZXJCYXJIaWRkZW4oKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkuaGlkZUZpbHRlckJhciB8fCBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQcm92aWRlcyB0aGUgc2V0dGluZyB3aGV0aGVyIEZpbHRlckJhciBpcyBoaWRkZW4gYnV0IHN0aWxsIGV4aXN0cyBiYXNlZCBvbiB0aGUgbWFuaWZlc3Qgc2V0dGluZyAndXNlSGlkZGVuRmlsdGVyQmFyJy5cblx0ICogU2hvdWxkIGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBfaXNGaWx0ZXJCYXJIaWRkZW4gYXMgaXQgY2FuIGFsc28gaGlkZSB0aGUgRmlsdGVyQmFyLlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBGaWx0ZXJCYXIgaXMgaGlkZGVuLCBmYWxzZSBpZiB1bmtub3duXG5cdCAqL1xuXHRfaXNGaWx0ZXJCYXJIaWRkZW5Vc2VkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpLnVzZUhpZGRlbkZpbHRlckJhciB8fCBmYWxzZTtcblx0fVxuXG5cdF9nZXRBcHBseUF1dG9tYXRpY2FsbHlPblZhcmlhbnQodmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50LCBrZXk6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwpOiBCb29sZWFuIHtcblx0XHRpZiAoIXZhcmlhbnRNYW5hZ2VtZW50IHx8ICFrZXkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0Y29uc3QgdmFyaWFudHMgPSB2YXJpYW50TWFuYWdlbWVudC5nZXRWYXJpYW50cygpO1xuXHRcdGNvbnN0IGN1cnJlbnRWYXJpYW50ID0gdmFyaWFudHMuZmluZChmdW5jdGlvbiAodmFyaWFudCkge1xuXHRcdFx0cmV0dXJuIHZhcmlhbnQgJiYgdmFyaWFudC5nZXRLZXkoKSA9PT0ga2V5O1xuXHRcdH0pO1xuXHRcdHJldHVybiAoY3VycmVudFZhcmlhbnQgJiYgY3VycmVudFZhcmlhbnQuZ2V0UHJvcGVydHkoXCJleGVjdXRlT25TZWxlY3RcIikpIHx8IGZhbHNlO1xuXHR9XG5cblx0X3Nob3VsZEF1dG9UcmlnZ2VyU2VhcmNoKG9WTTogVmFyaWFudE1hbmFnZW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG5cdFx0aWYgKFxuXHRcdFx0dGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS5pbml0aWFsTG9hZCA9PT0gSW5pdGlhbExvYWRNb2RlLkF1dG8gJiZcblx0XHRcdCghb1ZNIHx8IG9WTS5nZXRTdGFuZGFyZFZhcmlhbnRLZXkoKSA9PT0gb1ZNLmdldEN1cnJlbnRWYXJpYW50S2V5KCkpXG5cdFx0KSB7XG5cdFx0XHRjb25zdCBvRmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdFx0aWYgKG9GaWx0ZXJCYXIpIHtcblx0XHRcdFx0Y29uc3Qgb0NvbmRpdGlvbnMgPSBvRmlsdGVyQmFyLmdldENvbmRpdGlvbnMoKTtcblx0XHRcdFx0Zm9yIChjb25zdCBzS2V5IGluIG9Db25kaXRpb25zKSB7XG5cdFx0XHRcdFx0Ly8gaWdub3JlIGZpbHRlcnMgc3RhcnRpbmcgd2l0aCAkIChlLmcuICRzZWFyY2gsICRlZGl0U3RhdGUpXG5cdFx0XHRcdFx0aWYgKG9WTSAmJiAhc0tleS5zdGFydHNXaXRoKFwiJFwiKSAmJiBBcnJheS5pc0FycmF5KG9Db25kaXRpb25zW3NLZXldKSAmJiBvQ29uZGl0aW9uc1tzS2V5XS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdC8vIGxvYWQgZGF0YSBhcyBwZXIgdXNlcidzIHNldHRpbmcgb2YgYXBwbHlBdXRvbWF0aWNhbGx5IG9uIHRoZSB2YXJpYW50XG5cdFx0XHRcdFx0XHRjb25zdCBzdGFuZGFyZFZhcmlhbnQgPSBvVk0uZ2V0VmFyaWFudHMoKS5maW5kKCh2YXJpYW50KSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2YXJpYW50LmdldEtleSgpID09PSBvVk0uZ2V0Q3VycmVudFZhcmlhbnRLZXkoKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHN0YW5kYXJkVmFyaWFudCAmJiBzdGFuZGFyZFZhcmlhbnQuZ2V0RXhlY3V0ZU9uU2VsZWN0KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdF91cGRhdGVUYWJsZShvVGFibGU6IFRhYmxlKTogdm9pZCB7XG5cdFx0aWYgKCFvVGFibGUuaXNUYWJsZUJvdW5kKCkgfHwgdGhpcy5oYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzKSB7XG5cdFx0XHRvVGFibGUucmViaW5kKCk7XG5cdFx0XHR0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRfdXBkYXRlQ2hhcnQob0NoYXJ0OiBDaGFydCk6IHZvaWQge1xuXHRcdGNvbnN0IG9Jbm5lckNoYXJ0ID0gKG9DaGFydC5nZXRDb250cm9sRGVsZWdhdGUoKSBhcyB0eXBlb2YgQ2hhcnREZWxlZ2F0ZSkuX2dldENoYXJ0KG9DaGFydCk7XG5cdFx0aWYgKCEob0lubmVyQ2hhcnQgJiYgb0lubmVyQ2hhcnQuaXNCb3VuZChcImRhdGFcIikpIHx8IHRoaXMuaGFzUGVuZGluZ1RhYmxlQ2hhbmdlcykge1xuXHRcdFx0KG9DaGFydC5nZXRDb250cm9sRGVsZWdhdGUoKSBhcyB0eXBlb2YgQ2hhcnREZWxlZ2F0ZSkucmViaW5kKG9DaGFydCwgb0lubmVyQ2hhcnQuZ2V0QmluZGluZ0luZm8oXCJkYXRhXCIpKTtcblx0XHRcdHRoaXMuaGFzUGVuZGluZ1RhYmxlQ2hhbmdlcyA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZpbHRlciB0b2dnbGUgYnV0dG9uLlxuXHQgKiBAcGFyYW0gYnV0dG9uVmlzaWJsZSBGaWx0ZXIgdG9nZ2xlIGJ1dHRvbiB2aXNpYmlsaXR5XG5cdCAqL1xuXHRzZXRGaWx0ZXJUb2dnbGVWaXNpYmlsaXR5KGJ1dHRvblZpc2libGU6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRjb25zdCBmaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdFx0ZmlsdGVyQmFyPy5nZXRTZWdtZW50ZWRCdXR0b24oKT8uc2V0VmlzaWJsZShidXR0b25WaXNpYmxlKTtcblx0fVxuXG5cdGhhbmRsZXJzID0ge1xuXHRcdG9uRmlsdGVyTGF5b3V0U3dpdGNoKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLCBvRXZlbnQ6IFVJNUV2ZW50PHt9LCBDb250ZW50U3dpdGNoZXI+KTogdm9pZCB7XG5cdFx0XHRjb25zdCBjdXJyZW50S2V5ID0gb0V2ZW50LmdldFNvdXJjZSgpLnNlbGVjdGVkS2V5O1xuXHRcdFx0Y29uc3QgaXNBaUxheW91dCA9IGN1cnJlbnRLZXkgPT09IFwiYWlcIjtcblx0XHRcdGNvbnN0IGNvbnRyb2xWYXJpYW50Q29udHJvbHMgPSB0aGlzLl9nZXRDb250cm9sVmFyaWFudE1hbmFnZW1lbnRDb250cm9scygpO1xuXHRcdFx0aWYgKGNvbnRyb2xWYXJpYW50Q29udHJvbHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHQvLyBBZGQgbW9yZSBjb250cm9scyBoZXJlIGFzIHRoZSBBSSBsYXlvdXQgZ2FpbnMgc3VwcG9ydCBmb3IgdGhlbVxuXHRcdFx0XHRjb25zdCBmaWx0ZXJCYXJWTSA9IHRoaXMuX2dldEZpbHRlckJhclZhcmlhbnRDb250cm9sKCk7XG5cdFx0XHRcdGNvbnN0IHRhYmxlVk0gPSB0aGlzLl9nZXRUYWJsZSgpPy5nZXRWYXJpYW50KCk7XG5cdFx0XHRcdGNvbnN0IHN1cHBvcnRlZE9uQWlMYXlvdXQgPSBuZXcgU2V0PFZhcmlhbnRNYW5hZ2VtZW50PihbZmlsdGVyQmFyVk0sIHRhYmxlVk1dLmZpbHRlcigodm0pID0+ICEhdm0pKTtcblx0XHRcdFx0Y29udHJvbFZhcmlhbnRDb250cm9scy5mb3JFYWNoKCh2YXJpYW50Q29udHJvbCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGlzVmlzaWJsZSA9ICFpc0FpTGF5b3V0IHx8IHN1cHBvcnRlZE9uQWlMYXlvdXQuaGFzKHZhcmlhbnRDb250cm9sKTtcblx0XHRcdFx0XHR2YXJpYW50Q29udHJvbC5zZXRWaXNpYmxlKGlzVmlzaWJsZSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0b25JbmxpbmVFZGl0U2F2ZSh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0dGhpcy5pbmxpbmVFZGl0Rmxvdy5pbmxpbmVFZGl0U2F2ZSgpO1xuXHRcdH0sXG5cdFx0b25GaWx0ZXJTZWFyY2godGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIpOiB2b2lkIHtcblx0XHRcdGNvbnN0IGZpbHRlckJhckFQSSA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKSEuZ2V0UGFyZW50KCkgYXMgRmlsdGVyQmFyQVBJO1xuXHRcdFx0ZmlsdGVyQmFyQVBJLnRyaWdnZXJTZWFyY2goKTtcblx0XHR9LFxuXHRcdG9uRmlsdGVyc0NoYW5nZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIG9FdmVudDogRmlsdGVyQmFyQmFzZSRGaWx0ZXJzQ2hhbmdlZEV2ZW50KTogdm9pZCB7XG5cdFx0XHRjb25zdCBvRmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdFx0aWYgKG9GaWx0ZXJCYXIpIHtcblx0XHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCB8IHVuZGVmaW5lZDtcblx0XHRcdFx0Ly8gUGVuZGluZyBmaWx0ZXJzIGludG8gRmlsdGVyQmFyIHRvIGJlIHVzZWQgZm9yIGN1c3RvbSB2aWV3c1xuXHRcdFx0XHR0aGlzLm9uUGVuZGluZ0ZpbHRlcnMoKTtcblxuXHRcdFx0XHRpZiAob0ludGVybmFsTW9kZWxDb250ZXh0ICYmIG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJjb25kaXRpb25zQmFzZWRcIikpIHtcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoYXNQZW5kaW5nRmlsdGVyc1wiLCB0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob0ludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHRcdFx0dGhpcy5fc3RvcmVGaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50KG9GaWx0ZXJCYXIsIG9JbnRlcm5hbE1vZGVsQ29udGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdG9uVmFyaWFudFNlbGVjdGVkKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLCBvRXZlbnQ6IFZhcmlhbnRNYW5hZ2VtZW50JFNlbGVjdEV2ZW50KTogdm9pZCB7XG5cdFx0XHRjb25zdCBwYXJhbWV0ZXJzID0gKG9FdmVudCBhcyBVSTVFdmVudCkuZ2V0UGFyYW1ldGVycygpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRcdFx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQgPSBwYXJhbWV0ZXJzLm9yaWdpbmFsU291cmNlIGFzIFZhcmlhbnRNYW5hZ2VtZW50O1xuXHRcdFx0Y29uc3QgY3VycmVudFZhcmlhbnRLZXkgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwia2V5XCIpO1xuXHRcdFx0Y29uc3QgbXVsdGlNb2RlQ29udHJvbCA9IHRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKTtcblxuXHRcdFx0aWYgKG11bHRpTW9kZUNvbnRyb2wgJiYgIXZhcmlhbnRNYW5hZ2VtZW50Py5nZXRQYXJlbnQoKT8uaXNBKFwic2FwLnVpLm1kYy5BY3Rpb25Ub29sYmFyXCIpKSB7XG5cdFx0XHRcdC8vTm90IGEgQ29udHJvbCBWYXJpYW50XG5cdFx0XHRcdG11bHRpTW9kZUNvbnRyb2w/LmludmFsaWRhdGVDb250ZW50KCk7XG5cdFx0XHRcdG11bHRpTW9kZUNvbnRyb2w/LnNldEZyZWV6ZUNvbnRlbnQodHJ1ZSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIHNldFRpbWVvdXQgY2F1c2UgdGhlIHZhcmlhbnQgbmVlZHMgdG8gYmUgYXBwbGllZCBiZWZvcmUganVkZ2luZyB0aGUgYXV0byBzZWFyY2ggb3IgdXBkYXRpbmcgdGhlIGFwcCBzdGF0ZVxuXHRcdFx0c2V0VGltZW91dCgoKTogdm9pZCA9PiB7XG5cdFx0XHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRcdFx0Y29uc3QgZHluYW1pY1BhZ2UgPSB0aGlzLl9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2woKTtcblx0XHRcdFx0Y29uc3QgZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkID0gZmlsdGVyQmFyPy5nZXRGaWx0ZXJJdGVtcygpLmZpbmQoZnVuY3Rpb24gKGZpbHRlckl0ZW0pIHtcblx0XHRcdFx0XHRyZXR1cm4gZmlsdGVySXRlbS5nZXRSZXF1aXJlZCgpICYmIGZpbHRlckl0ZW0uZ2V0Q29uZGl0aW9ucygpLmxlbmd0aCA9PT0gMDtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmIChmaXJzdEVtcHR5TWFuZGF0b3J5RmllbGQpIHtcblx0XHRcdFx0XHRkeW5hbWljUGFnZS5zZXRIZWFkZXJFeHBhbmRlZCh0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodGhpcy5fc2hvdWxkQXV0b1RyaWdnZXJTZWFyY2godmFyaWFudE1hbmFnZW1lbnQpKSB7XG5cdFx0XHRcdFx0Ly8gdGhlIGFwcCBzdGF0ZSB3aWxsIGJlIHVwZGF0ZWQgdmlhIG9uU2VhcmNoIGhhbmRsZXJcblx0XHRcdFx0XHRjb25zdCBmaWx0ZXJCYXJBUEkgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCkhLmdldFBhcmVudCgpIGFzIEZpbHRlckJhckFQSTtcblx0XHRcdFx0XHRmaWx0ZXJCYXJBUEkudHJpZ2dlclNlYXJjaCgpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCF0aGlzLl9nZXRBcHBseUF1dG9tYXRpY2FsbHlPblZhcmlhbnQodmFyaWFudE1hbmFnZW1lbnQsIGN1cnJlbnRWYXJpYW50S2V5KSkge1xuXHRcdFx0XHRcdG11bHRpTW9kZUNvbnRyb2w/LnNldEZyZWV6ZUNvbnRlbnQoZmFsc2UpO1xuXHRcdFx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdFx0XHRkeW5hbWljUGFnZS5zZXRIZWFkZXJFeHBhbmRlZCh0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSwgMCk7XG5cdFx0fSxcblx0XHRvblZhcmlhbnRTYXZlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgZXZlbnQ6IFVJNUV2ZW50PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pik6IHZvaWQge1xuXHRcdFx0Ly9UT0RPOiBTaG91bGQgcmVtb3ZlIHRoaXMgc2V0VGltZU91dCBvbmNlIFZhcmlhbnQgTWFuYWdlbWVudCBwcm92aWRlcyBhbiBhcGkgdG8gZmV0Y2ggdGhlIGN1cnJlbnQgdmFyaWFudCBrZXkgb24gc2F2ZSEhIVxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdH0sIDEwMDApO1xuXHRcdFx0dGhpcy50cmFja1ZhcmlhbnRTYXZlZFRlbGVtZXRyeShldmVudCk7XG5cdFx0fSxcblx0XHRvblZhcmlhbnRNYW5hZ2VkKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLCBldmVudDogVUk1RXZlbnQ8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KTogdm9pZCB7XG5cdFx0XHR0aGlzLnRyYWNrVmFyaWFudE1hbmFnZWRUZWxlbWV0cnkoZXZlbnQpO1xuXHRcdH0sXG5cdFx0b25TZWFyY2godGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIpOiB2b2lkIHtcblx0XHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCkgYXMgRmlsdGVyQmFyOyAvLyBvbnNlYXJjaCBpcyBjYWxsZWQgb25seSBpZiB0aGUgZmlsdGVyYmFyIGV4aXN0c1xuXHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdGNvbnN0IG9NZGNDaGFydCA9IHRoaXMuZ2V0Q2hhcnRDb250cm9sKCk7XG5cdFx0XHRjb25zdCBiSGlkZURyYWZ0ID0gRmlsdGVyVXRpbHMuZ2V0RWRpdFN0YXRlSXNIaWRlRHJhZnQob0ZpbHRlckJhci5nZXRDb25kaXRpb25zKCkpO1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaGFzUGVuZGluZ0ZpbHRlcnNcIiwgZmFsc2UpO1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaGlkZURyYWZ0SW5mb1wiLCBiSGlkZURyYWZ0KTtcblx0XHRcdGNvbnN0IGR5bmFtaWNQYWdlID0gdGhpcy5fZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sKCk7XG5cdFx0XHRpZiAoIXRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKSkge1xuXHRcdFx0XHR0aGlzLl91cGRhdGVBTFBOb3RBcHBsaWNhYmxlRmllbGRzKG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgb0ZpbHRlckJhcik7XG5cdFx0XHR9XG5cdFx0XHRpZiAob01kY0NoYXJ0KSB7XG5cdFx0XHRcdC8vIGRpc2FibGUgYm91bmQgYWN0aW9ucyBUT0RPOiB0aGlzIGNsZWFycyBldmVyeXRoaW5nIGZvciB0aGUgY2hhcnQ/XG5cdFx0XHRcdChvTWRjQ2hhcnQuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCkuc2V0UHJvcGVydHkoXCJcIiwge30pO1xuXG5cdFx0XHRcdGNvbnN0IG9QYWdlSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvTWRjQ2hhcnQuZ2V0QmluZGluZ0NvbnRleHQoXCJwYWdlSW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRcdGNvbnN0IHNUZW1wbGF0ZUNvbnRlbnRWaWV3ID0gb1BhZ2VJbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShgJHtvUGFnZUludGVybmFsTW9kZWxDb250ZXh0LmdldFBhdGgoKX0vYWxwQ29udGVudFZpZXdgKTtcblx0XHRcdFx0aWYgKHNUZW1wbGF0ZUNvbnRlbnRWaWV3ID09PSBUZW1wbGF0ZUNvbnRlbnRWaWV3LkNoYXJ0KSB7XG5cdFx0XHRcdFx0dGhpcy5oYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoc1RlbXBsYXRlQ29udGVudFZpZXcgPT09IFRlbXBsYXRlQ29udGVudFZpZXcuVGFibGUpIHtcblx0XHRcdFx0XHR0aGlzLmhhc1BlbmRpbmdUYWJsZUNoYW5nZXMgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vbG9naWMgZm9yIGV4cGFuc2lvbiBvciBjb2xsYXBzZSBvZiBmaWx0ZXIgYmFyIHN0YXJ0c1xuXHRcdFx0aWYgKCFEZXZpY2Uuc3lzdGVtLmRlc2t0b3AgJiYgb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwic2VhcmNoVHJpZ2dlcmVkQnlJbml0aWFsTG9hZFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRpZiAoZHluYW1pY1BhZ2UuZ2V0SGVhZGVyRXhwYW5kZWQoKSAhPT0gZmFsc2UpIHtcblx0XHRcdFx0XHRkeW5hbWljUGFnZS5zZXRIZWFkZXJFeHBhbmRlZChmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly9zZXR0aW5nIGl0IHRvIGZhbHNlIHNvIHRoYXQgZnVydGhlciBzZWFyY2ggb3IgJ0dvJyB0cmlnZ2VycyB3b24ndCBjb2xsYXBzZSB0aGUgZmlsdGVyIGJhclxuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzZWFyY2hUcmlnZ2VyZWRCeUluaXRpYWxMb2FkXCIsIGZhbHNlKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gc3RvcmUgZmlsdGVyIGJhciBjb25kaXRpb25zIHRvIHVzZSBsYXRlciB3aGlsZSBuYXZpZ2F0aW9uXG5cdFx0XHRTdGF0ZVV0aWwucmV0cmlldmVFeHRlcm5hbFN0YXRlKG9GaWx0ZXJCYXIpXG5cdFx0XHRcdC50aGVuKChvRXh0ZXJuYWxTdGF0ZSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuZmlsdGVyQmFyQ29uZGl0aW9ucyA9IG9FeHRlcm5hbFN0YXRlLmZpbHRlcjtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmV0cmlldmluZyB0aGUgZXh0ZXJuYWwgc3RhdGVcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRpZiAoRGV2aWNlLnN5c3RlbS5waG9uZSkge1xuXHRcdFx0XHRjb25zdCBvRHluYW1pY1BhZ2UgPSB0aGlzLl9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2woKTtcblx0XHRcdFx0aWYgKCF0aGlzLl9pc0luaXRMb2FkRW5hYmxlZCgpKSB7XG5cdFx0XHRcdFx0b0R5bmFtaWNQYWdlLnNldEhlYWRlckV4cGFuZGVkKHRydWUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG9EeW5hbWljUGFnZS5zZXRIZWFkZXJFeHBhbmRlZChmYWxzZSk7XG5cdFx0XHRcdFx0dGhpcy5zZXRGaWx0ZXJUb2dnbGVWaXNpYmlsaXR5KGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogVHJpZ2dlcnMgYW4gb3V0Ym91bmQgbmF2aWdhdGlvbiB3aGVuIGEgdXNlciBjaG9vc2VzIHRoZSBjaGV2cm9uLlxuXHRcdCAqIEBwYXJhbSBvQ29udHJvbGxlclxuXHRcdCAqIEBwYXJhbSBzT3V0Ym91bmRUYXJnZXQgTmFtZSBvZiB0aGUgb3V0Ym91bmQgdGFyZ2V0IChuZWVkcyB0byBiZSBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdClcblx0XHQgKiBAcGFyYW0gb0NvbnRleHQgVGhlIGNvbnRleHQgdGhhdCBjb250YWlucyB0aGUgZGF0YSBmb3IgdGhlIHRhcmdldCBhcHBcblx0XHQgKiBAcGFyYW0gc0NyZWF0ZVBhdGggQ3JlYXRlIHBhdGggd2hlbiB0aGUgY2hldnJvbiBpcyBjcmVhdGVkLlxuXHRcdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggaXMgcmVzb2x2ZWQgb25jZSB0aGUgbmF2aWdhdGlvbiBpcyB0cmlnZ2VyZWRcblx0XHQgKiBAZmluYWxcblx0XHQgKi9cblx0XHRhc3luYyBvbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQoXG5cdFx0XHRvQ29udHJvbGxlcjogTGlzdFJlcG9ydENvbnRyb2xsZXIsXG5cdFx0XHRzT3V0Ym91bmRUYXJnZXQ6IHN0cmluZyxcblx0XHRcdG9Db250ZXh0OiBDb250ZXh0LFxuXHRcdFx0c0NyZWF0ZVBhdGg6IHN0cmluZ1xuXHRcdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdFx0cmV0dXJuIG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ub25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kKG9Db250cm9sbGVyLCBzT3V0Ym91bmRUYXJnZXQsIG9Db250ZXh0LCBzQ3JlYXRlUGF0aCk7XG5cdFx0fSxcblx0XHRvbkNoYXJ0U2VsZWN0aW9uQ2hhbmdlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgb0V2ZW50OiBVSTVFdmVudDx7IGRhdGE6IHVua25vd24gfSwgQ2hhcnRUeXBlPik6IHZvaWQge1xuXHRcdFx0Y29uc3Qgb01kY0NoYXJ0ID0gb0V2ZW50LmdldFNvdXJjZSgpLmdldENvbnRlbnQoKSBhcyBDaGFydCxcblx0XHRcdFx0b1RhYmxlID0gdGhpcy5fZ2V0VGFibGUoKSxcblx0XHRcdFx0YURhdGEgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiZGF0YVwiKSxcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdGlmIChhRGF0YSkge1xuXHRcdFx0XHRDaGFydFV0aWxzLnNldENoYXJ0RmlsdGVycyhvTWRjQ2hhcnQpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgc1RlbXBsYXRlQ29udGVudFZpZXcgPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoYCR7b0ludGVybmFsTW9kZWxDb250ZXh0LmdldFBhdGgoKX0vYWxwQ29udGVudFZpZXdgKTtcblx0XHRcdGlmIChzVGVtcGxhdGVDb250ZW50VmlldyA9PT0gVGVtcGxhdGVDb250ZW50Vmlldy5DaGFydCkge1xuXHRcdFx0XHR0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMgPSB0cnVlO1xuXHRcdFx0fSBlbHNlIGlmIChvVGFibGUpIHtcblx0XHRcdFx0b1RhYmxlLnJlYmluZCgpO1xuXHRcdFx0XHR0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMgPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdG9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgb0V2ZW50OiBVSTVFdmVudCk6IHZvaWQge1xuXHRcdFx0Y29uc3Qgc2VsZWN0ZWRLZXk6IHN0cmluZyA9XG5cdFx0XHRcdChvRXZlbnQuZ2V0UGFyYW1ldGVycygpIGFzIHsgc2VsZWN0ZWRLZXk6IHN0cmluZyB9KS5zZWxlY3RlZEtleSB8fCAob0V2ZW50LmdldFBhcmFtZXRlcnMoKSBhcyB7IGtleTogc3RyaW5nIH0pLmtleTtcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJhbHBDb250ZW50Vmlld1wiLCBzZWxlY3RlZEtleSk7XG5cdFx0XHRjb25zdCBvQ2hhcnQgPSB0aGlzLmdldENoYXJ0Q29udHJvbCgpO1xuXHRcdFx0Y29uc3Qgb1RhYmxlID0gdGhpcy5fZ2V0VGFibGUoKTtcblxuXHRcdFx0c3dpdGNoIChzZWxlY3RlZEtleSkge1xuXHRcdFx0XHRjYXNlIFRlbXBsYXRlQ29udGVudFZpZXcuVGFibGU6XG5cdFx0XHRcdFx0aWYgKG9UYWJsZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5fdXBkYXRlVGFibGUob1RhYmxlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgVGVtcGxhdGVDb250ZW50Vmlldy5DaGFydDpcblx0XHRcdFx0XHRpZiAob0NoYXJ0KSB7XG5cdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVDaGFydChvQ2hhcnQgYXMgQ2hhcnQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBUZW1wbGF0ZUNvbnRlbnRWaWV3Lkh5YnJpZDpcblx0XHRcdFx0XHRpZiAob1RhYmxlKSB7XG5cdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVUYWJsZShvVGFibGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAob0NoYXJ0KSB7XG5cdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVDaGFydChvQ2hhcnQgYXMgQ2hhcnQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdC8vIHNldFRpbWVvdXQgY2F1c2UgdGhlIHZhcmlhbnQgbmVlZHMgdG8gYmUgYXBwbGllZCBiZWZvcmUganVkZ2luZyB0aGUgYXV0byBzZWFyY2ggb3IgdXBkYXRpbmcgdGhlIGFwcCBzdGF0ZVxuXHRcdFx0dGhpcy5mb2N1c0hhbmRsaW5nRm9yU2VnbWVudGVkQnV0dG9uKCk7XG5cdFx0fSxcblx0XHRvbkR5bmFtaWNQYWdlVGl0bGVTdGF0ZUNoYW5nZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIGV2ZW50OiBEeW5hbWljUGFnZVRpdGxlJFN0YXRlQ2hhbmdlRXZlbnQpOiB2b2lkIHtcblx0XHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRcdGlmIChmaWx0ZXJCYXIpIHtcblx0XHRcdFx0dGhpcy5zZXRGaWx0ZXJUb2dnbGVWaXNpYmlsaXR5KCEhZXZlbnQuZ2V0UGFyYW1ldGVyKFwiaXNFeHBhbmRlZFwiKSk7XG5cdFx0XHRcdGlmIChldmVudC5nZXRQYXJhbWV0ZXIoXCJpc0V4cGFuZGVkXCIpID09PSBmYWxzZSkge1xuXHRcdFx0XHRcdEludmlzaWJsZU1lc3NhZ2UuZ2V0SW5zdGFuY2UoKS5hbm5vdW5jZShcblx0XHRcdFx0XHRcdGZpbHRlckJhci5nZXRBc3NpZ25lZEZpbHRlcnNUZXh0KCkuZmlsdGVyc1RleHQgYXMgc3RyaW5nLFxuXHRcdFx0XHRcdFx0SW52aXNpYmxlTWVzc2FnZU1vZGUuQXNzZXJ0aXZlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHQvKipcblx0ICogSGFuZGxlcyBmb2N1cyBmb3IgdGhlIHNlZ21lbnRlZCBidXR0b24uXG5cdCAqL1xuXHRmb2N1c0hhbmRsaW5nRm9yU2VnbWVudGVkQnV0dG9uKCk6IHZvaWQge1xuXHRcdGNvbnN0IHNlZ21lbnRlZEJ1dHRvbiA9IHRoaXMuX2dldFNlZ21lbnRlZEJ1dHRvbigpO1xuXHRcdGlmIChzZWdtZW50ZWRCdXR0b24pIHtcblx0XHRcdGNvbnN0IGV2ZW50RGVsZWdhdGUgPSB7XG5cdFx0XHRcdG9uQWZ0ZXJSZW5kZXJpbmc6ICgpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRzZWdtZW50ZWRCdXR0b24uZm9jdXMoKTtcblx0XHRcdFx0XHRzZWdtZW50ZWRCdXR0b24ucmVtb3ZlRXZlbnREZWxlZ2F0ZShldmVudERlbGVnYXRlKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdHNlZ21lbnRlZEJ1dHRvbi5hZGRFdmVudERlbGVnYXRlKGV2ZW50RGVsZWdhdGUpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gdXBkYXRlIHRoZSBsb2NhbCBVSSBtb2RlbCBvZiB0aGUgcGFnZSB3aXRoIHRoZSBTZWxlY3Rpb24gVmFyaWFudC5cblx0ICogQHBhcmFtIGZpbHRlckJhciBNREMgZmlsdGVyIGJhclxuXHQgKiBAcGFyYW0gaW50ZXJuYWxNb2RlbENvbnRleHQgVGhlIGludGVybmFsIG1vZGVsIGNvbnRleHRcblx0ICovXG5cdGFzeW5jIF9zdG9yZUZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQoZmlsdGVyQmFyOiBGaWx0ZXJCYXIsIGludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBmaWx0ZXJCYXJBUEkgPSBmaWx0ZXJCYXIuZ2V0UGFyZW50KCkgYXMgRmlsdGVyQmFyQVBJO1xuXHRcdFx0Y29uc3Qgc3YgPSBhd2FpdCBmaWx0ZXJCYXJBUEkuZ2V0U2VsZWN0aW9uVmFyaWFudCgpO1xuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJmaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50XCIsIHN2KTtcblx0XHR9IGNhdGNoIChlcnI6IHVua25vd24pIHtcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG5cdFx0XHRMb2cuZXJyb3IoYEZFIDogRXJyb3IgZmV0Y2hpbmcgc2VsZWN0aW9uIHZhcmlhbnQgb24gZmlsdGVyIGNoYW5nZTogJHttZXNzYWdlfWApO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZ2V0IHRoZSBTZWxlY3Rpb24gVmFyaWFudCBmcm9tIGludGVybmFsIG1vZGVsLlxuXHQgKiBAcmV0dXJucyBTZWxlY3Rpb25WYXJpYW50XG5cdCAqL1xuXHRnZXRGaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50KCk6IFNlbGVjdGlvblZhcmlhbnQge1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCB8IHVuZGVmaW5lZDtcblx0XHRyZXR1cm4gKGludGVybmFsTW9kZWxDb250ZXh0Py5nZXRQcm9wZXJ0eShcImZpbHRlckJhclNlbGVjdGlvblZhcmlhbnRcIikgYXMgU2VsZWN0aW9uVmFyaWFudCkgfHwgbmV3IFNlbGVjdGlvblZhcmlhbnQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBtZXNzYWdlIGJ1dHRvbiBpbiB0aGUgZm9vdGVyIGluIGNhc2UgdGhlcmUgaXMgaW5saW5lIGVkaXQuXG5cdCAqIEBwYXJhbSBldmVudFxuXHQgKi9cblx0aGFuZGxlTWVzc2FnZUJ1dHRvblZpc2liaWxpdHkoZXZlbnQ6IFVJNUV2ZW50PHsgdmlzaWJsZTogYm9vbGVhbiB9LCBNZXNzYWdlQnV0dG9uPik6IHZvaWQge1xuXHRcdGlmIChldmVudC5nZXRQYXJhbWV0ZXIoXCJ2aXNpYmxlXCIpKSB7XG5cdFx0XHR0aGlzLnNldFNob3dGb290ZXIoZXZlbnQuZ2V0UGFyYW1ldGVyKFwidmlzaWJsZVwiKSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRyYWNrcyB0ZWxlbWV0cnkgd2hlbiBhIG5ldyB2YXJpYW50IGlzIHNhdmVkLlxuXHQgKiBAcGFyYW0gZXZlbnQgVGhlIHNhdmUgZXZlbnQuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIHRyYWNrVmFyaWFudFNhdmVkVGVsZW1ldHJ5KGV2ZW50OiBVSTVFdmVudDxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAoZXZlbnQuZ2V0UGFyYW1ldGVyKFwib3ZlcndyaXRlXCIpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICghKGF3YWl0IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk/LmdldFRlbGVtZXRyeVNlcnZpY2UoKT8uaXNFbmFibGVkKCkpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHZtTW9kZSA9IHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkudmFyaWFudE1hbmFnZW1lbnQ7XG5cdFx0aWYgKHZtTW9kZSA9PT0gXCJQYWdlXCIpIHtcblx0XHRcdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50ID0gdGhpcy5nZXRWaWV3KCkuYnlJZChcImZlOjpQYWdlVmFyaWFudE1hbmFnZW1lbnRcIikgYXMgVmFyaWFudE1hbmFnZW1lbnQgfCB1bmRlZmluZWQ7XG5cdFx0XHRpZiAodmFyaWFudE1hbmFnZW1lbnQpIHtcblx0XHRcdFx0dGhpcy5maXJlVGVsZW1ldHJ5KHZhcmlhbnRNYW5hZ2VtZW50LmdldFZhcmlhbnRzKCkubGVuZ3RoLCBWYXJpYW50VHlwZS5QQUdFKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3Qgc291cmNlID0gZXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0XHRjb25zdCBmaWx0ZXJCYXJWTSA9IHRoaXMuX2dldEZpbHRlckJhclZhcmlhbnRDb250cm9sKCk7XG5cdFx0XHRpZiAoc291cmNlID09PSBmaWx0ZXJCYXJWTSkge1xuXHRcdFx0XHR0aGlzLmZpcmVUZWxlbWV0cnkoZmlsdGVyQmFyVk0/LmdldFZhcmlhbnRzKCkubGVuZ3RoID8/IDAsIFZhcmlhbnRUeXBlLkZJTFRFUik7XG5cdFx0XHR9IGVsc2UgaWYgKHNvdXJjZS5pc0EoXCJzYXAuZmUubWFjcm9zLlRhYmxlXCIpKSB7XG5cdFx0XHRcdGNvbnN0IHRhYmxlQVBJID0gc291cmNlIGFzIHVua25vd24gYXMgVGFibGVBUEk7XG5cdFx0XHRcdHRoaXMuZmlyZVRlbGVtZXRyeSh0YWJsZUFQST8uZ2V0Q29udGVudD8uKCk/LmdldFZhcmlhbnQ/LigpPy5nZXRWYXJpYW50cz8uKCk/Lmxlbmd0aCA/PyAwLCBWYXJpYW50VHlwZS5UQUJMRSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRyYWNrcyB0ZWxlbWV0cnkgd2hlbiB2YXJpYW50cyBhcmUgbWFuYWdlZCAoZS5nLiBkZWxldGVkKS5cblx0ICogQHBhcmFtIGV2ZW50IFRoZSBtYW5hZ2UgZXZlbnQuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIHRyYWNrVmFyaWFudE1hbmFnZWRUZWxlbWV0cnkoZXZlbnQ6IFVJNUV2ZW50PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGRlbGV0ZWRDb3VudDogbnVtYmVyID0gKChldmVudC5nZXRQYXJhbWV0ZXIoXCJkZWxldGVkXCIpIGFzIHN0cmluZ1tdIHwgdW5kZWZpbmVkKSA/PyBbXSkubGVuZ3RoO1xuXHRcdC8vIFRoZSBtYW5hZ2UgZGlhbG9nIGNhbiBiZSBjbG9zZWQgd2l0aG91dCBkZWxldGluZyBhbnkgdmFyaWFudHMgKGUuZy4gcmVuYW1lIG9yIHJlb3JkZXIgb25seSlcblx0XHRpZiAoZGVsZXRlZENvdW50ID09PSAwKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICghKGF3YWl0IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk/LmdldFRlbGVtZXRyeVNlcnZpY2UoKT8uaXNFbmFibGVkKCkpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHZtTW9kZSA9IHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkudmFyaWFudE1hbmFnZW1lbnQ7XG5cdFx0aWYgKHZtTW9kZSA9PT0gXCJQYWdlXCIpIHtcblx0XHRcdHRoaXMuZmlyZVRlbGVtZXRyeShkZWxldGVkQ291bnQsIFZhcmlhbnRUeXBlLlBBR0UpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBzb3VyY2UgPSBldmVudC5nZXRTb3VyY2UoKTtcblx0XHRcdGNvbnN0IGZpbHRlckJhclZNID0gdGhpcy5fZ2V0RmlsdGVyQmFyVmFyaWFudENvbnRyb2woKTtcblx0XHRcdGlmIChzb3VyY2UgPT09IGZpbHRlckJhclZNKSB7XG5cdFx0XHRcdHRoaXMuZmlyZVRlbGVtZXRyeShkZWxldGVkQ291bnQsIFZhcmlhbnRUeXBlLkZJTFRFUik7XG5cdFx0XHR9IGVsc2UgaWYgKHNvdXJjZS5pc0EoXCJzYXAuZmUubWFjcm9zLlRhYmxlXCIpKSB7XG5cdFx0XHRcdHRoaXMuZmlyZVRlbGVtZXRyeShkZWxldGVkQ291bnQsIFZhcmlhbnRUeXBlLlRBQkxFKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU3RvcmVzIGEgRkUuVmFyaWFudCB0ZWxlbWV0cnkgZXZlbnQuXG5cdCAqIEBwYXJhbSBjb3VudFZhcmlhbnRzIE51bWJlciBvZiB2YXJpYW50cyBhZmZlY3RlZCBieSB0aGUgYWN0aW9uLlxuXHQgKiBAcGFyYW0gdmFyaWFudFR5cGUgVGhlIHZhcmlhbnQgdHlwZSBkaXNjcmltaW5hdG9yLlxuXHQgKi9cblx0cHJpdmF0ZSBmaXJlVGVsZW1ldHJ5KGNvdW50VmFyaWFudHM6IG51bWJlciwgdmFyaWFudFR5cGU6IFRlbGVtZXRyeVZhcmlhbnRFdmVudFtcInBhcmFtZXRlcnNcIl1bXCJ2YXJpYW50VHlwZVwiXSk6IHZvaWQge1xuXHRcdGNvbnN0IHRlbGVtZXRyeUV2ZW50OiBUZWxlbWV0cnlWYXJpYW50RXZlbnQgPSB7IHR5cGU6IFwiRkUuVmFyaWFudFwiLCBwYXJhbWV0ZXJzOiB7IGNvdW50VmFyaWFudHMsIHZhcmlhbnRUeXBlIH0gfTtcblx0XHR0aGlzLmdldEFwcENvbXBvbmVudCgpPy5nZXRUZWxlbWV0cnlTZXJ2aWNlKCk/LnN0b3JlQWN0aW9uKHRlbGVtZXRyeUV2ZW50KTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBMaXN0UmVwb3J0Q29udHJvbGxlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBcUVBLE1BQU07SUFBRUE7RUFBWSxDQUFDLEdBQUdDLG1CQUFtQjtFQUMzQyxNQUFNQyxtQkFBbUIsR0FBR0MsV0FBVyxDQUFDRCxtQkFBbUI7SUFDMURFLGVBQWUsR0FBR0QsV0FBVyxDQUFDQyxlQUFlOztFQUU5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBSkEsSUFNTUMsb0JBQW9CLElBQUFDLElBQUEsR0FEekJDLGNBQWMsQ0FBQyxrREFBa0QsQ0FBQyxFQUFBQyxLQUFBLEdBRWpFQyxjQUFjLENBQ2RDLGVBQWUsQ0FBQ0MsUUFBUSxDQUFDO0lBQ3hCQyxjQUFjLEVBQUUsU0FBQUEsQ0FBQSxFQUFpQztNQUMvQyxJQUFJLENBQUNDLE9BQU8sQ0FBQyxDQUFDLENBQUNDLGFBQWEsQ0FBQyxDQUFDLENBQTBCQyxlQUFlLENBQUMsQ0FBQztJQUMzRTtFQUNELENBQUMsQ0FDRixDQUFDLEVBQUFDLEtBQUEsR0FHQVAsY0FBYyxDQUNkUSw2QkFBNkIsQ0FBQ04sUUFBUSxDQUFDO0lBQ3RDTyxZQUFZLEVBQUUsU0FBQUEsQ0FBQSxFQUErQztNQUM1RCxPQUFRLElBQUksQ0FBQ0MsSUFBSSxDQUEwQkMsbUJBQW1CLENBQUMsQ0FBQztJQUNqRTtFQUNELENBQUMsQ0FDRixDQUFDLEVBQUFDLEtBQUEsR0FHQVosY0FBYyxDQUFDYSxXQUFXLENBQUNYLFFBQVEsQ0FBQ1ksbUJBQW1CLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBR3pEZixjQUFjLENBQUNnQixxQkFBcUIsQ0FBQ2QsUUFBUSxDQUFDZSw2QkFBNkIsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHN0VsQixjQUFjLENBQUNtQixLQUFLLENBQUNqQixRQUFRLENBQUNrQixjQUFjLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBRzlDckIsY0FBYyxDQUFDc0IsU0FBUyxDQUFDcEIsUUFBUSxDQUFDcUIsa0JBQWtCLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBR3REeEIsY0FBYyxDQUFDeUIsYUFBYSxDQUFDLEVBQUFDLEtBQUEsR0FHN0IxQixjQUFjLENBQUMyQixXQUFXLENBQUMsRUFBQUMsS0FBQSxHQUczQjVCLGNBQWMsQ0FBQzZCLGNBQWMsQ0FBQzNCLFFBQVEsQ0FBQzRCLHNCQUFzQixDQUFDLENBQUMsRUFBQUMsS0FBQSxHQWdCL0RDLGVBQWUsQ0FBQyxDQUFDLEVBQUFDLE1BQUEsR0FDakJDLGNBQWMsQ0FBQyxDQUFDLEVBQUFDLE1BQUEsR0F1SmhCQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUFDLE1BQUEsR0FDbEJDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBQUMsTUFBQSxHQXFDbkJQLGVBQWUsQ0FBQyxDQUFDLEVBQUFRLE1BQUEsR0FDakJGLFVBQVUsQ0FBQ0csaUJBQWlCLENBQUNDLEtBQUssQ0FBQyxFQUFBQyxNQUFBLEdBYW5DWCxlQUFlLENBQUMsQ0FBQyxFQUFBWSxNQUFBLEdBQ2pCTixVQUFVLENBQUNHLGlCQUFpQixDQUFDQyxLQUFLLENBQUMsRUFBQUcsTUFBQSxHQWFuQ2IsZUFBZSxDQUFDLENBQUMsRUFBQWMsTUFBQSxHQUNqQlIsVUFBVSxDQUFDRyxpQkFBaUIsQ0FBQ0MsS0FBSyxDQUFDLEVBQUE3QyxJQUFBLENBQUFrRCxNQUFBLElBQUFDLE9BQUEsMEJBQUFDLGVBQUE7SUFBQSxTQUFBckQscUJBQUEsR0FBQXNELElBQUE7TUFBQSxJQUFBQyxLQUFBO01BQUFBLEtBQUEsR0FBQUYsZUFBQSxDQUFBRyxJQUFBLFVBQUFGLElBQUE7TUFBQUcsMEJBQUEsQ0FBQUYsS0FBQSxjQUFBRyxXQUFBLEVBQUFILEtBQUE7TUFBQUUsMEJBQUEsQ0FBQUYsS0FBQSw0QkFBQUksWUFBQSxFQUFBSixLQUFBO01BQUFFLDBCQUFBLENBQUFGLEtBQUEsaUJBQUFLLFlBQUEsRUFBQUwsS0FBQTtNQUFBRSwwQkFBQSxDQUFBRixLQUFBLDJCQUFBTSxZQUFBLEVBQUFOLEtBQUE7TUFBQUUsMEJBQUEsQ0FBQUYsS0FBQSxXQUFBTyxZQUFBLEVBQUFQLEtBQUE7TUFBQUUsMEJBQUEsQ0FBQUYsS0FBQSxlQUFBUSxZQUFBLEVBQUFSLEtBQUE7TUFBQUUsMEJBQUEsQ0FBQUYsS0FBQSxtQkFBQVMsWUFBQSxFQUFBVCxLQUFBO01BQUFFLDBCQUFBLENBQUFGLEtBQUEsaUJBQUFVLFlBQUEsRUFBQVYsS0FBQTtNQUFBRSwwQkFBQSxDQUFBRixLQUFBLG9CQUFBVyxZQUFBLEVBQUFYLEtBQUE7TUFBQUEsS0FBQSxDQTdGcENZLFVBQVUsR0FBRztRQUNaQyx5QkFBeUJBLENBRXhCQyxjQUF3QixFQUN4QkMsUUFBMEIsRUFDMUJDLGVBQTJDLEVBQ3RCO1VBQ3JCLElBQUlDLEtBQUssR0FBRyxFQUFFO1VBQ2RGLFFBQVEsR0FBR0EsUUFBUSxLQUFLLE1BQU0sSUFBSUEsUUFBUSxLQUFLLElBQUk7VUFDbkQsTUFBTUcsVUFBVSxHQUFHLElBQUksQ0FBQ0Msb0JBQW9CLENBQUMsQ0FBQztVQUM5QyxJQUFJRCxVQUFVLElBQUlFLEtBQUssQ0FBQ0MsT0FBTyxDQUFDUCxjQUFjLENBQUMsSUFBSUEsY0FBYyxDQUFDUSxNQUFNLEdBQUcsQ0FBQyxJQUFJUCxRQUFRLEVBQUU7WUFDekYsTUFBTVEsY0FBYyxHQUFHQyxZQUFZLENBQUNDLFNBQVMsQ0FDNUNYLGNBQWMsRUFDZEksVUFBVSxDQUFDUSxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCUixVQUFVLEVBQ1ZTLGdCQUFnQixDQUFDVCxVQUFVLENBQzVCLENBQUM7WUFDRCxNQUFNVSxnQkFBZ0IsR0FBRyxDQUFDWixlQUFlLEVBQUVhLFlBQVk7WUFDdkRaLEtBQUssR0FBR0YsUUFBUSxHQUNiUyxZQUFZLENBQUNNLFVBQVUsQ0FBQ1AsY0FBYyxFQUFFTCxVQUFVLEVBQUVVLGdCQUFnQixDQUFDLEdBQ3JFSixZQUFZLENBQUNPLE9BQU8sQ0FBQ1IsY0FBYyxFQUFFTCxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQ3ZELE9BQU9ELEtBQUs7VUFDYjtRQUNEO01BQ0QsQ0FBQztNQUFBakIsS0FBQSxDQWdrQkRnQyxRQUFRLEdBQUc7UUFDVkMsb0JBQW9CQSxDQUE2QkMsTUFBcUMsRUFBUTtVQUM3RixNQUFNQyxVQUFVLEdBQUdELE1BQU0sQ0FBQ0UsU0FBUyxDQUFDLENBQUMsQ0FBQ0MsV0FBVztVQUNqRCxNQUFNQyxVQUFVLEdBQUdILFVBQVUsS0FBSyxJQUFJO1VBQ3RDLE1BQU1JLHNCQUFzQixHQUFHLElBQUksQ0FBQ0Msb0NBQW9DLENBQUMsQ0FBQztVQUMxRSxJQUFJRCxzQkFBc0IsQ0FBQ2pCLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdEM7WUFDQSxNQUFNbUIsV0FBVyxHQUFHLElBQUksQ0FBQ0MsMkJBQTJCLENBQUMsQ0FBQztZQUN0RCxNQUFNQyxPQUFPLEdBQUcsSUFBSSxDQUFDQyxTQUFTLENBQUMsQ0FBQyxFQUFFQyxVQUFVLENBQUMsQ0FBQztZQUM5QyxNQUFNQyxtQkFBbUIsR0FBRyxJQUFJQyxHQUFHLENBQW9CLENBQUNOLFdBQVcsRUFBRUUsT0FBTyxDQUFDLENBQUNLLE1BQU0sQ0FBRUMsRUFBRSxJQUFLLENBQUMsQ0FBQ0EsRUFBRSxDQUFDLENBQUM7WUFDbkdWLHNCQUFzQixDQUFDVyxPQUFPLENBQUVDLGNBQWMsSUFBSztjQUNsRCxNQUFNQyxTQUFTLEdBQUcsQ0FBQ2QsVUFBVSxJQUFJUSxtQkFBbUIsQ0FBQ08sR0FBRyxDQUFDRixjQUFjLENBQUM7Y0FDeEVBLGNBQWMsQ0FBQ0csVUFBVSxDQUFDRixTQUFTLENBQUM7WUFDckMsQ0FBQyxDQUFDO1VBQ0g7UUFDRCxDQUFDO1FBQ0RHLGdCQUFnQkEsQ0FBQSxFQUFtQztVQUNsRCxJQUFJLENBQUNDLGNBQWMsQ0FBQ0MsY0FBYyxDQUFDLENBQUM7UUFDckMsQ0FBQztRQUNEQyxjQUFjQSxDQUFBLEVBQW1DO1VBQ2hELE1BQU1DLFlBQVksR0FBRyxJQUFJLENBQUN4QyxvQkFBb0IsQ0FBQyxDQUFDLENBQUV5QyxTQUFTLENBQUMsQ0FBaUI7VUFDN0VELFlBQVksQ0FBQ0UsYUFBYSxDQUFDLENBQUM7UUFDN0IsQ0FBQztRQUNEQyxnQkFBZ0JBLENBQTZCNUIsTUFBeUMsRUFBUTtVQUM3RixNQUFNaEIsVUFBVSxHQUFHLElBQUksQ0FBQ0Msb0JBQW9CLENBQUMsQ0FBQztVQUM5QyxJQUFJRCxVQUFVLEVBQUU7WUFDZixNQUFNNkMscUJBQXFCLEdBQUcsSUFBSSxDQUFDOUcsT0FBTyxDQUFDLENBQUMsQ0FBQytHLGlCQUFpQixDQUFDLFVBQVUsQ0FBcUM7WUFDOUc7WUFDQSxJQUFJLENBQUNDLGdCQUFnQixDQUFDLENBQUM7WUFFdkIsSUFBSUYscUJBQXFCLElBQUk3QixNQUFNLENBQUNnQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsRUFBRTtjQUNwRUgscUJBQXFCLENBQUNJLFdBQVcsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUM7WUFDN0Q7WUFDQSxJQUFJSixxQkFBcUIsRUFBRTtjQUMxQixJQUFJLENBQUNLLCtCQUErQixDQUFDbEQsVUFBVSxFQUFFNkMscUJBQXFCLENBQUM7WUFDeEU7VUFDRDtRQUNELENBQUM7UUFDRE0saUJBQWlCQSxDQUE2Qm5DLE1BQXFDLEVBQVE7VUFDMUYsTUFBTW9DLFVBQVUsR0FBSXBDLE1BQU0sQ0FBY3FDLGFBQWEsQ0FBQyxDQUE0QjtVQUNsRixNQUFNQyxpQkFBaUIsR0FBR0YsVUFBVSxDQUFDRyxjQUFtQztVQUN4RSxNQUFNQyxpQkFBaUIsR0FBR3hDLE1BQU0sQ0FBQ2dDLFlBQVksQ0FBQyxLQUFLLENBQUM7VUFDcEQsTUFBTVMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDQyxvQkFBb0IsQ0FBQyxDQUFDO1VBRXBELElBQUlELGdCQUFnQixJQUFJLENBQUNILGlCQUFpQixFQUFFWixTQUFTLENBQUMsQ0FBQyxFQUFFaUIsR0FBRyxDQUFDLDBCQUEwQixDQUFDLEVBQUU7WUFDekY7WUFDQUYsZ0JBQWdCLEVBQUVHLGlCQUFpQixDQUFDLENBQUM7WUFDckNILGdCQUFnQixFQUFFSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7VUFDekM7O1VBRUE7VUFDQUMsVUFBVSxDQUFDLE1BQVk7WUFDdEIsTUFBTUMsU0FBUyxHQUFHLElBQUksQ0FBQzlELG9CQUFvQixDQUFDLENBQUM7WUFDN0MsTUFBTStELFdBQVcsR0FBRyxJQUFJLENBQUNDLDRCQUE0QixDQUFDLENBQUM7WUFDdkQsTUFBTUMsd0JBQXdCLEdBQUdILFNBQVMsRUFBRUksY0FBYyxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLFVBQVVDLFVBQVUsRUFBRTtjQUN2RixPQUFPQSxVQUFVLENBQUNDLFdBQVcsQ0FBQyxDQUFDLElBQUlELFVBQVUsQ0FBQ0UsYUFBYSxDQUFDLENBQUMsQ0FBQ25FLE1BQU0sS0FBSyxDQUFDO1lBQzNFLENBQUMsQ0FBQztZQUNGLElBQUk4RCx3QkFBd0IsRUFBRTtjQUM3QkYsV0FBVyxDQUFDUSxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7WUFDcEM7WUFDQSxJQUFJLElBQUksQ0FBQ0Msd0JBQXdCLENBQUNuQixpQkFBaUIsQ0FBQyxFQUFFO2NBQ3JEO2NBQ0EsTUFBTWIsWUFBWSxHQUFHLElBQUksQ0FBQ3hDLG9CQUFvQixDQUFDLENBQUMsQ0FBRXlDLFNBQVMsQ0FBQyxDQUFpQjtjQUM3RUQsWUFBWSxDQUFDRSxhQUFhLENBQUMsQ0FBQztZQUM3QixDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQytCLCtCQUErQixDQUFDcEIsaUJBQWlCLEVBQUVFLGlCQUFpQixDQUFDLEVBQUU7Y0FDdkZDLGdCQUFnQixFQUFFSSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7Y0FDekMsSUFBSSxDQUFDYyxlQUFlLENBQUMsQ0FBQyxDQUFDQyxjQUFjLENBQUMsQ0FBQztjQUN2Q1osV0FBVyxDQUFDUSxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7WUFDcEM7VUFDRCxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ04sQ0FBQztRQUNESyxjQUFjQSxDQUE2QkMsS0FBd0MsRUFBUTtVQUMxRjtVQUNBaEIsVUFBVSxDQUFDLE1BQU07WUFDaEIsSUFBSSxDQUFDYSxlQUFlLENBQUMsQ0FBQyxDQUFDQyxjQUFjLENBQUMsQ0FBQztVQUN4QyxDQUFDLEVBQUUsSUFBSSxDQUFDO1VBQ1IsSUFBSSxDQUFDRywwQkFBMEIsQ0FBQ0QsS0FBSyxDQUFDO1FBQ3ZDLENBQUM7UUFDREUsZ0JBQWdCQSxDQUE2QkYsS0FBd0MsRUFBUTtVQUM1RixJQUFJLENBQUNHLDRCQUE0QixDQUFDSCxLQUFLLENBQUM7UUFDekMsQ0FBQztRQUNESSxRQUFRQSxDQUFBLEVBQW1DO1VBQzFDLE1BQU1sRixVQUFVLEdBQUcsSUFBSSxDQUFDQyxvQkFBb0IsQ0FBQyxDQUFjLENBQUMsQ0FBQztVQUM3RCxNQUFNNEMscUJBQXFCLEdBQUcsSUFBSSxDQUFDOUcsT0FBTyxDQUFDLENBQUMsQ0FBQytHLGlCQUFpQixDQUFDLFVBQVUsQ0FBeUI7VUFDbEcsTUFBTXFDLFNBQVMsR0FBRyxJQUFJLENBQUNDLGVBQWUsQ0FBQyxDQUFDO1VBQ3hDLE1BQU1DLFVBQVUsR0FBR0MsV0FBVyxDQUFDQyx1QkFBdUIsQ0FBQ3ZGLFVBQVUsQ0FBQ3VFLGFBQWEsQ0FBQyxDQUFDLENBQUM7VUFDbEYxQixxQkFBcUIsQ0FBQ0ksV0FBVyxDQUFDLG1CQUFtQixFQUFFLEtBQUssQ0FBQztVQUM3REoscUJBQXFCLENBQUNJLFdBQVcsQ0FBQyxlQUFlLEVBQUVvQyxVQUFVLENBQUM7VUFDOUQsTUFBTXJCLFdBQVcsR0FBRyxJQUFJLENBQUNDLDRCQUE0QixDQUFDLENBQUM7VUFDdkQsSUFBSSxDQUFDLElBQUksQ0FBQ1Asb0JBQW9CLENBQUMsQ0FBQyxFQUFFO1lBQ2pDLElBQUksQ0FBQzhCLDZCQUE2QixDQUFDM0MscUJBQXFCLEVBQUU3QyxVQUFVLENBQUM7VUFDdEU7VUFDQSxJQUFJbUYsU0FBUyxFQUFFO1lBQ2Q7WUFDQ0EsU0FBUyxDQUFDckMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQTBCRyxXQUFXLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRXJGLE1BQU13Qyx5QkFBeUIsR0FBR04sU0FBUyxDQUFDckMsaUJBQWlCLENBQUMsY0FBYyxDQUF5QjtZQUNyRyxNQUFNNEMsb0JBQW9CLEdBQUdELHlCQUF5QixDQUFDRSxXQUFXLENBQUMsR0FBR0YseUJBQXlCLENBQUNHLE9BQU8sQ0FBQyxDQUFDLGlCQUFpQixDQUFDO1lBQzNILElBQUlGLG9CQUFvQixLQUFLdEssbUJBQW1CLENBQUN5SyxLQUFLLEVBQUU7Y0FDdkQsSUFBSSxDQUFDQyxzQkFBc0IsR0FBRyxJQUFJO1lBQ25DO1lBQ0EsSUFBSUosb0JBQW9CLEtBQUt0SyxtQkFBbUIsQ0FBQzJLLEtBQUssRUFBRTtjQUN2RCxJQUFJLENBQUNDLHNCQUFzQixHQUFHLElBQUk7WUFDbkM7VUFDRDs7VUFFQTtVQUNBLElBQUksQ0FBQ0MsTUFBTSxDQUFDQyxNQUFNLENBQUNDLE9BQU8sSUFBSXRELHFCQUFxQixDQUFDOEMsV0FBVyxDQUFDLDhCQUE4QixDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ3pHLElBQUkzQixXQUFXLENBQUNvQyxpQkFBaUIsQ0FBQyxDQUFDLEtBQUssS0FBSyxFQUFFO2NBQzlDcEMsV0FBVyxDQUFDUSxpQkFBaUIsQ0FBQyxLQUFLLENBQUM7WUFDckM7WUFDQTtZQUNBM0IscUJBQXFCLENBQUNJLFdBQVcsQ0FBQyw4QkFBOEIsRUFBRSxLQUFLLENBQUM7VUFDekU7O1VBRUE7VUFDQW9ELFNBQVMsQ0FBQ0MscUJBQXFCLENBQUN0RyxVQUFVLENBQUMsQ0FDekN1RyxJQUFJLENBQUVDLGNBQWMsSUFBSztZQUN6QixJQUFJLENBQUNDLG1CQUFtQixHQUFHRCxjQUFjLENBQUMxRSxNQUFNO1lBQ2hEO1VBQ0QsQ0FBQyxDQUFDLENBQ0Q0RSxLQUFLLENBQUMsVUFBVUMsTUFBZSxFQUFFO1lBQ2pDQyxHQUFHLENBQUNDLEtBQUssQ0FBQywyQ0FBMkMsRUFBRUYsTUFBZ0IsQ0FBQztVQUN6RSxDQUFDLENBQUM7VUFFSCxJQUFJVixNQUFNLENBQUNDLE1BQU0sQ0FBQ1ksS0FBSyxFQUFFO1lBQ3hCLE1BQU1DLFlBQVksR0FBRyxJQUFJLENBQUM5Qyw0QkFBNEIsQ0FBQyxDQUFDO1lBQ3hELElBQUksQ0FBQyxJQUFJLENBQUMrQyxrQkFBa0IsQ0FBQyxDQUFDLEVBQUU7Y0FDL0JELFlBQVksQ0FBQ3ZDLGlCQUFpQixDQUFDLElBQUksQ0FBQztZQUNyQyxDQUFDLE1BQU07Y0FDTnVDLFlBQVksQ0FBQ3ZDLGlCQUFpQixDQUFDLEtBQUssQ0FBQztjQUNyQyxJQUFJLENBQUN5Qyx5QkFBeUIsQ0FBQyxLQUFLLENBQUM7WUFDdEM7VUFDRDtRQUNELENBQUM7UUFDRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7UUFDRSxNQUFNQyw4QkFBOEJBLENBQ25DQyxXQUFpQyxFQUNqQ0MsZUFBdUIsRUFDdkJDLFFBQWlCLEVBQ2pCQyxXQUFtQixFQUNIO1VBQ2hCLE9BQU9ILFdBQVcsQ0FBQ0ksc0JBQXNCLENBQUNMLDhCQUE4QixDQUFDQyxXQUFXLEVBQUVDLGVBQWUsRUFBRUMsUUFBUSxFQUFFQyxXQUFXLENBQUM7UUFDOUgsQ0FBQztRQUNERSx1QkFBdUJBLENBQTZCeEcsTUFBOEMsRUFBUTtVQUN6RyxNQUFNbUUsU0FBUyxHQUFHbkUsTUFBTSxDQUFDRSxTQUFTLENBQUMsQ0FBQyxDQUFDdUcsVUFBVSxDQUFDLENBQVU7WUFDekRDLE1BQU0sR0FBRyxJQUFJLENBQUNoRyxTQUFTLENBQUMsQ0FBQztZQUN6QmlHLEtBQUssR0FBRzNHLE1BQU0sQ0FBQ2dDLFlBQVksQ0FBQyxNQUFNLENBQUM7WUFDbkNILHFCQUFxQixHQUFHLElBQUksQ0FBQzlHLE9BQU8sQ0FBQyxDQUFDLENBQUMrRyxpQkFBaUIsQ0FBQyxVQUFVLENBQXlCO1VBQzdGLElBQUk2RSxLQUFLLEVBQUU7WUFDVkMsVUFBVSxDQUFDQyxlQUFlLENBQUMxQyxTQUFTLENBQUM7VUFDdEM7VUFDQSxNQUFNTyxvQkFBb0IsR0FBRzdDLHFCQUFxQixDQUFDOEMsV0FBVyxDQUFDLEdBQUc5QyxxQkFBcUIsQ0FBQytDLE9BQU8sQ0FBQyxDQUFDLGlCQUFpQixDQUFDO1VBQ25ILElBQUlGLG9CQUFvQixLQUFLdEssbUJBQW1CLENBQUN5SyxLQUFLLEVBQUU7WUFDdkQsSUFBSSxDQUFDQyxzQkFBc0IsR0FBRyxJQUFJO1VBQ25DLENBQUMsTUFBTSxJQUFJNEIsTUFBTSxFQUFFO1lBQ2xCQSxNQUFNLENBQUNJLE1BQU0sQ0FBQyxDQUFDO1lBQ2YsSUFBSSxDQUFDaEMsc0JBQXNCLEdBQUcsS0FBSztVQUNwQztRQUNELENBQUM7UUFDRGlDLHdCQUF3QkEsQ0FBNkIvRyxNQUFnQixFQUFRO1VBQzVFLE1BQU1HLFdBQW1CLEdBQ3ZCSCxNQUFNLENBQUNxQyxhQUFhLENBQUMsQ0FBQyxDQUE2QmxDLFdBQVcsSUFBS0gsTUFBTSxDQUFDcUMsYUFBYSxDQUFDLENBQUMsQ0FBcUIyRSxHQUFHO1VBQ25ILE1BQU1uRixxQkFBcUIsR0FBRyxJQUFJLENBQUM5RyxPQUFPLENBQUMsQ0FBQyxDQUFDK0csaUJBQWlCLENBQUMsVUFBVSxDQUF5QjtVQUNsR0QscUJBQXFCLENBQUNJLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRTlCLFdBQVcsQ0FBQztVQUNoRSxNQUFNOEcsTUFBTSxHQUFHLElBQUksQ0FBQzdDLGVBQWUsQ0FBQyxDQUFDO1VBQ3JDLE1BQU1zQyxNQUFNLEdBQUcsSUFBSSxDQUFDaEcsU0FBUyxDQUFDLENBQUM7VUFFL0IsUUFBUVAsV0FBVztZQUNsQixLQUFLL0YsbUJBQW1CLENBQUMySyxLQUFLO2NBQzdCLElBQUkyQixNQUFNLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDUSxZQUFZLENBQUNSLE1BQU0sQ0FBQztjQUMxQjtjQUNBO1lBQ0QsS0FBS3RNLG1CQUFtQixDQUFDeUssS0FBSztjQUM3QixJQUFJb0MsTUFBTSxFQUFFO2dCQUNYLElBQUksQ0FBQ0UsWUFBWSxDQUFDRixNQUFlLENBQUM7Y0FDbkM7Y0FDQTtZQUNELEtBQUs3TSxtQkFBbUIsQ0FBQ2dOLE1BQU07Y0FDOUIsSUFBSVYsTUFBTSxFQUFFO2dCQUNYLElBQUksQ0FBQ1EsWUFBWSxDQUFDUixNQUFNLENBQUM7Y0FDMUI7Y0FDQSxJQUFJTyxNQUFNLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDRSxZQUFZLENBQUNGLE1BQWUsQ0FBQztjQUNuQztjQUNBO1lBQ0Q7Y0FDQztVQUNGO1VBQ0EsSUFBSSxDQUFDdEQsZUFBZSxDQUFDLENBQUMsQ0FBQ0MsY0FBYyxDQUFDLENBQUM7VUFDdkM7VUFDQSxJQUFJLENBQUN5RCwrQkFBK0IsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7UUFDREMsOEJBQThCQSxDQUE2QnhELEtBQXdDLEVBQVE7VUFDMUcsTUFBTWYsU0FBUyxHQUFHLElBQUksQ0FBQzlELG9CQUFvQixDQUFDLENBQUM7VUFDN0MsSUFBSThELFNBQVMsRUFBRTtZQUNkLElBQUksQ0FBQ2tELHlCQUF5QixDQUFDLENBQUMsQ0FBQ25DLEtBQUssQ0FBQzlCLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNsRSxJQUFJOEIsS0FBSyxDQUFDOUIsWUFBWSxDQUFDLFlBQVksQ0FBQyxLQUFLLEtBQUssRUFBRTtjQUMvQ3VGLGdCQUFnQixDQUFDQyxXQUFXLENBQUMsQ0FBQyxDQUFDQyxRQUFRLENBQ3RDMUUsU0FBUyxDQUFDMkUsc0JBQXNCLENBQUMsQ0FBQyxDQUFDQyxXQUFXLEVBQzlDQyxvQkFBb0IsQ0FBQ0MsU0FDdEIsQ0FBQztZQUNGO1VBQ0Q7UUFDRDtNQUNELENBQUM7TUFBQSxPQUFBL0osS0FBQTtJQUFBO0lBQUFnSyxjQUFBLENBQUF2TixvQkFBQSxFQUFBcUQsZUFBQTtJQUFBLElBQUFtSyxNQUFBLEdBQUF4TixvQkFBQSxDQUFBeU4sU0FBQTtJQWo3QkQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtJQUpDRCxNQUFBLENBT0FwRSxlQUFlLEdBRmYsU0FFQUEsZUFBZUEsQ0FBQSxFQUFpQjtNQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDc0UsWUFBWSxFQUFFO1FBQ3ZCLElBQUksQ0FBQ0EsWUFBWSxHQUFHLElBQUlDLFlBQVksQ0FBQyxJQUFJLENBQUM7TUFDM0M7TUFDQSxPQUFPLElBQUksQ0FBQ0QsWUFBWTtJQUN6QixDQUFDO0lBQUFGLE1BQUEsQ0FFREksTUFBTSxHQUFOLFNBQUFBLE1BQU1BLENBQUEsRUFBUztNQUNkQyxjQUFjLENBQUNKLFNBQVMsQ0FBQ0csTUFBTSxDQUFDRSxLQUFLLENBQUMsSUFBSSxDQUFDO01BQzNDLE1BQU14RyxxQkFBcUIsR0FBRyxJQUFJLENBQUN5RyxpQkFBaUIsQ0FBQyxDQUFDLENBQUN4RyxpQkFBaUIsQ0FBQyxVQUFVLENBQXlCO01BQzVHLE1BQU15RyxjQUFjLEdBQUcsSUFBSSxDQUFDRCxpQkFBaUIsQ0FBQyxDQUFDLENBQUN4RyxpQkFBaUIsQ0FBQyxJQUFJLENBQXlCO01BQy9GLE1BQU1pQixTQUFTLEdBQUcsSUFBSSxDQUFDOUQsb0JBQW9CLENBQUMsQ0FBQztNQUM3QyxJQUFJOEQsU0FBUyxFQUFFO1FBQ2QsSUFBSSxDQUFDYiwrQkFBK0IsQ0FBQ2EsU0FBUyxFQUFFbEIscUJBQXFCLENBQUM7TUFDdkU7TUFDQUEscUJBQXFCLENBQUNJLFdBQVcsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUM7TUFDNURKLHFCQUFxQixDQUFDSSxXQUFXLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQztNQUN6REoscUJBQXFCLENBQUNJLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7TUFDNUNKLHFCQUFxQixDQUFDSSxXQUFXLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO01BQ3BESixxQkFBcUIsQ0FBQ0ksV0FBVyxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxDQUFDO01BQzFESixxQkFBcUIsQ0FBQ0ksV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztNQUNqREoscUJBQXFCLENBQUNJLFdBQVcsQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLENBQUM7TUFFL0QsSUFBSSxJQUFJLENBQUN1Ryx1QkFBdUIsQ0FBQyxDQUFDLEVBQUU7UUFDbkMsSUFBSUMsY0FBYyxHQUFHLElBQUksQ0FBQ0MsZUFBZSxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDekQsTUFBTSxDQUFDQyxNQUFNLENBQUNDLE9BQU8sSUFBSXNELGNBQWMsS0FBS3JPLG1CQUFtQixDQUFDZ04sTUFBTSxFQUFFO1VBQzVFcUIsY0FBYyxHQUFHck8sbUJBQW1CLENBQUN5SyxLQUFLO1FBQzNDO1FBQ0FoRCxxQkFBcUIsQ0FBQ0ksV0FBVyxDQUFDLGdCQUFnQixFQUFFd0csY0FBYyxDQUFDO01BQ3BFOztNQUVBO01BQ0E7TUFDQSxJQUFJLENBQUNoRCxtQkFBbUIsR0FBRyxDQUFDLENBQUM7O01BRTdCO01BQ0E7TUFDQSxJQUFJLENBQUNrRCxlQUFlLENBQUMsQ0FBQyxDQUFDQyxjQUFjLENBQUMsQ0FBQyxDQUFDQyxpQ0FBaUMsQ0FBQyxDQUFDOztNQUUzRTtNQUNBLElBQUksQ0FBQ0MsWUFBWSxDQUFDLENBQUM7TUFDbkJQLGNBQWMsQ0FBQ3RHLFdBQVcsQ0FBQyxFQUFFLEVBQUU7UUFBRThHLFVBQVUsRUFBRTtNQUFNLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBQUFoQixNQUFBLENBRURpQixpQkFBaUIsR0FBakIsU0FBQUEsaUJBQWlCQSxDQUFBLEVBQVM7TUFDekJaLGNBQWMsQ0FBQ0osU0FBUyxDQUFDZ0IsaUJBQWlCLENBQUNYLEtBQUssQ0FBQyxJQUFJLENBQUM7TUFDdEQsTUFBTXJGLFdBQVcsR0FBRyxJQUFJLENBQUNDLDRCQUE0QixDQUFDLENBQUM7TUFDdkQsTUFBTWdHLHFCQUFxQixHQUFHakcsV0FBVyxFQUFFa0csUUFBUSxDQUFDLENBQUM7TUFDckQsTUFBTUMsYUFBYSxHQUFHRixxQkFBcUIsQ0FBQ0csY0FBYyxDQUFDLENBQTRCO01BQ3ZGLElBQUlELGFBQWEsRUFBRTtRQUNsQkEsYUFBYSxDQUFDRSxrQkFBa0IsQ0FBQyxFQUFFLENBQUM7TUFDckM7SUFDRCxDQUFDO0lBQUF0QixNQUFBLENBRUR1QixNQUFNLEdBQU4sU0FBQUEsTUFBTUEsQ0FBQSxFQUFTO01BQ2QsT0FBTyxJQUFJLENBQUM3RCxtQkFBbUI7TUFDL0IsSUFBSSxJQUFJLENBQUN3QyxZQUFZLEVBQUU7UUFDdEIsSUFBSSxDQUFDQSxZQUFZLENBQUNzQixPQUFPLENBQUMsQ0FBQztNQUM1QjtNQUNBLE9BQU8sSUFBSSxDQUFDdEIsWUFBWTtJQUN6QixDQUFDO0lBQUFGLE1BQUEsQ0FFSzlNLGVBQWUsR0FBckIsZUFBTUEsZUFBZUEsQ0FBQSxFQUFrQjtNQUN0QyxNQUFNdU8sb0JBQW9CLEdBQUcsSUFBSSxDQUFDek8sT0FBTyxDQUFDLENBQUMsQ0FBQytHLGlCQUFpQixDQUFDLFVBQVUsQ0FBeUI7TUFDakcsSUFBSSxDQUFDMEgsb0JBQW9CLENBQUM3RSxXQUFXLENBQUMsdUJBQXVCLENBQUMsRUFBRTtRQUMvRCxJQUFJLENBQUM4RSxTQUFTLENBQUNDLE9BQU8sQ0FBQyxJQUFJLENBQUNDLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFDN0NILG9CQUFvQixDQUFDdkgsV0FBVyxDQUFDLHVCQUF1QixFQUFFLElBQUksQ0FBQztNQUNoRTtNQUNBLE1BQU0sSUFBSSxDQUFDMEcsZUFBZSxDQUFDLENBQUMsQ0FBQ2lCLHFCQUFxQixDQUFDLENBQUMsQ0FBQ0Msa0JBQWtCLENBQUMsQ0FBQztNQUN6RSxNQUFNQyxPQUFPLEdBQUcsSUFBSSxDQUFDQyxZQUFZLENBQUMsT0FBTyxDQUFZO01BQ3JELElBQUlDLGFBQWEsR0FBRyxJQUFJO01BQ3hCLElBQUlDLFNBQVMsQ0FBQ0MsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFO1FBQ2pDO1FBQ0E7UUFDQTtRQUNBLE1BQU1DLEtBQWlCLEdBQUcsSUFBSSxDQUFDQyxRQUFRLENBQUMsQ0FBQztRQUN6QyxJQUFJRCxLQUFLLEVBQUU7VUFDVixJQUFJLENBQUNFLFFBQVEsQ0FBQ0MscUJBQXFCLENBQUNILEtBQUssQ0FBQztRQUMzQztRQUVBLElBQUksQ0FBQ3pILG9CQUFvQixDQUFDLENBQUMsRUFBRUUsaUJBQWlCLENBQUMsQ0FBQztRQUNoRCxNQUFNMkgsS0FBSyxHQUFHLElBQUksQ0FBQzdKLFNBQVMsQ0FBQyxDQUFDO1FBQzlCLE1BQU04SixhQUFhLEdBQUdELEtBQUssRUFBRUUsYUFBYSxDQUFDLENBQUM7UUFDNUMsSUFBSUQsYUFBYSxFQUFFO1VBQ2xCUixhQUFhLEdBQUcsS0FBSztVQUNyQixNQUFNVSxRQUFRLEdBQUdILEtBQUssRUFBRTdJLFNBQVMsQ0FBQyxDQUFhO1VBQy9DO1VBQ0FpSixXQUFXLENBQUNoQyxlQUFlLENBQUMsSUFBSSxDQUFDNU4sT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUN6QzZQLGlCQUFpQixDQUFDLENBQUMsQ0FDbkJDLHFCQUFxQixDQUFDLENBQUMsQ0FDdkJ0RixJQUFJLENBQUMsTUFBTTtZQUNYaUYsYUFBYSxDQUFDTSxlQUFlLENBQUMsY0FBYyxFQUFFLE1BQU07Y0FDbkQsSUFBSSxDQUFDQyxtQkFBbUIsQ0FBQ2pCLE9BQU8sQ0FBQztZQUNsQyxDQUFDLENBQUM7WUFDRixJQUFJWSxRQUFRLENBQUNNLGtCQUFrQixDQUFDLENBQUMsQ0FBQ0MsT0FBTyxDQUFDQyxJQUFJLEtBQUssV0FBVyxFQUFFO2NBQy9EO2NBQ0E7Y0FDQSxJQUFJLENBQUNkLFFBQVEsQ0FBQyxDQUFDLENBQUNlLFlBQVksQ0FBQyxDQUFDO1lBQy9CO1lBQ0FULFFBQVEsQ0FBQ1UsT0FBTyxDQUFDLENBQUM7WUFDbEI7VUFDRCxDQUFDLENBQUMsQ0FDRDFGLEtBQUssQ0FBRTJGLENBQUMsSUFBSztZQUNiekYsR0FBRyxDQUFDMEYsT0FBTyxDQUFDLGlEQUFpRCxFQUFFRCxDQUFDLENBQUM7VUFDbEUsQ0FBQyxDQUFDO1FBQ0o7UUFDQXBCLFNBQVMsQ0FBQ3NCLHFCQUFxQixDQUFDLENBQUM7TUFDbEM7TUFFQSxJQUFJdkIsYUFBYSxFQUFFO1FBQ2xCLElBQUksQ0FBQ2UsbUJBQW1CLENBQUNqQixPQUFPLENBQUM7TUFDbEM7TUFDQSxNQUFNMEIsdUJBQXVCLEdBQUdiLFdBQVcsQ0FBQ2hDLGVBQWUsQ0FBQyxJQUFJLENBQUM1TixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMwUSwwQkFBMEIsQ0FBQyxDQUFDO01BQ3hHRCx1QkFBdUIsQ0FDckJFLGlCQUFpQixDQUFDLENBQUMsQ0FDbkJuRyxJQUFJLENBQUVtRyxpQkFBMEIsSUFBSztRQUNyQ2xDLG9CQUFvQixDQUFDdkgsV0FBVyxDQUFDLHFCQUFxQixFQUFFeUosaUJBQWlCLENBQUM7UUFDMUU7TUFDRCxDQUFDLENBQUMsQ0FDRGhHLEtBQUssQ0FBRUcsS0FBYyxJQUFLO1FBQzFCRCxHQUFHLENBQUNDLEtBQUssQ0FBQyw4Q0FBOEMsRUFBRUEsS0FBZSxDQUFDO01BQzNFLENBQUMsQ0FBQztJQUNKLENBQUM7SUFBQWtDLE1BQUEsQ0E4Qks0RCxXQUFXLEdBRmpCLGVBRU1BLFdBQVdBLENBQUNDLFdBQXFDLEVBQWlCO01BQ3ZFLElBQUlBLFdBQVcsQ0FBQ0MsVUFBVSxFQUFFO1FBQzNCLElBQUksQ0FBQ0MsZ0JBQWdCLENBQUMsQ0FBQztNQUN4QjtNQUNBO01BQ0EsTUFBTSxJQUFJLENBQUNuRCxlQUFlLENBQUMsQ0FBQyxDQUFDb0QsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDQyxpQkFBaUIsQ0FBQ0MsU0FBUyxDQUFDO0lBQzdFOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BM0JDO0lBQUFsRSxNQUFBO0lBOEJBO0lBQ0FtRSxrQkFBa0IsR0FIbEIsU0FHQUEsa0JBQWtCQSxDQUFDTixXQUFvQixFQUFRO01BQzlDO0lBQUE7O0lBR0Q7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FOQztJQUFBN0QsTUFBQSxDQVNBaEcsZ0JBQWdCLEdBRmhCLFNBRUFBLGdCQUFnQkEsQ0FBQSxFQUFTO01BQ3hCO0lBQUEsQ0FDQTtJQUFBZ0csTUFBQSxDQUVEek0sbUJBQW1CLEdBQW5CLFNBQUFBLG1CQUFtQkEsQ0FBQSxFQUFXO01BQzdCLE9BQU8sSUFBSSxDQUFDb0YsU0FBUyxDQUFDLENBQUMsRUFBRWxCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDMk0sS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMvRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUFwRSxNQUFBLENBTUFxRSxZQUFZLEdBRlosU0FFQUEsWUFBWUEsQ0FBQSxFQUFTO01BQ3BCO0lBQUE7O0lBR0Q7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBckUsTUFBQSxDQUlBZ0QsbUJBQW1CLEdBQW5CLFNBQUFBLG1CQUFtQkEsQ0FBQ2pCLE9BQWdCLEVBQVE7TUFDM0MsSUFBSXVDLFdBQXlCLEdBQUcsRUFBRTtNQUNsQ3ZDLE9BQU8sQ0FBQzlJLE9BQU8sQ0FBQyxVQUFVMEYsTUFBTSxFQUFFO1FBQ2pDMkYsV0FBVyxHQUFHMUIsV0FBVyxDQUFDMkIsYUFBYSxDQUFDNUYsTUFBTSxFQUFFMkYsV0FBVyxDQUFDO01BQzdELENBQUMsQ0FBQztNQUNGMUIsV0FBVyxDQUFDNEIsc0NBQXNDLENBQUNGLFdBQVcsRUFBRSxJQUFJLENBQUN0UixPQUFPLENBQUMsQ0FBQyxDQUFDO01BQy9FNFAsV0FBVyxDQUFDNkIseUJBQXlCLENBQUNILFdBQVcsQ0FBQztJQUNuRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUF0RSxNQUFBLENBSUEwRSxrQkFBa0IsR0FBbEIsU0FBQUEsa0JBQWtCQSxDQUFDQyxRQUFnQixFQUFRO01BQzFDLElBQUksQ0FBQzNDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQy9JLE9BQU8sQ0FBQyxVQUFVMEYsTUFBZSxFQUFFO1FBQzdEaUcsYUFBYSxDQUFDQyxnQkFBZ0IsQ0FBQ2xHLE1BQU0sRUFBV2dHLFFBQVEsQ0FBQztNQUMxRCxDQUFDLENBQUM7SUFDSDs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUEzRSxNQUFBLENBSUE4RSxZQUFZLEdBQVosU0FBQUEsWUFBWUEsQ0FBQ0MsV0FBd0IsRUFBUTtNQUM1QyxNQUFNQyxTQUFTLEdBQUdELFdBQVcsQ0FBQ0UsWUFBWSxDQUFDLENBQTJCO01BQ3RFRCxTQUFTLENBQUNFLFVBQVUsR0FBRztRQUFFQyxNQUFNLEVBQUU7TUFBSyxDQUFDO01BQ3ZDSixXQUFXLENBQUNLLEtBQUssQ0FBQ0osU0FBUyxDQUFDO0lBQzdCOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBaEYsTUFBQSxDQUtRcUYsd0JBQXdCLEdBQWhDLFNBQVFBLHdCQUF3QkEsQ0FBQ3JLLFNBQW9CLEVBQVE7TUFDNUQsTUFBTUcsd0JBQXdCLEdBQUdILFNBQVMsQ0FBQ0ksY0FBYyxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLFVBQVVpSyxXQUF3QixFQUFFO1FBQ3BHLE9BQU9BLFdBQVcsQ0FBQy9KLFdBQVcsQ0FBQyxDQUFDLElBQUkrSixXQUFXLENBQUM5SixhQUFhLENBQUMsQ0FBQyxDQUFDbkUsTUFBTSxLQUFLLENBQUM7TUFDN0UsQ0FBQyxDQUFDO01BQ0Y7TUFDQTtNQUNBLElBQUk4RCx3QkFBd0IsRUFBRTtRQUM3QixJQUFJQSx3QkFBd0IsQ0FBQ1AsR0FBRyxDQUFjLHdCQUF3QixDQUFDLEVBQUU7VUFDeEUsSUFBSSxDQUFDa0ssWUFBWSxDQUFDM0osd0JBQXdCLENBQUM7UUFDNUMsQ0FBQyxNQUFNO1VBQ0xBLHdCQUF3QixDQUFhaUssS0FBSyxDQUFDLENBQUM7UUFDOUM7TUFDRCxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUNuSCxrQkFBa0IsQ0FBQyxDQUFDLElBQUlqRCxTQUFTLENBQUNJLGNBQWMsQ0FBQyxDQUFDLENBQUMvRCxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQzlFO1FBQ0EsTUFBTWtPLGdCQUFnQixHQUFHdkssU0FBUyxDQUFDd0ssbUJBQW1CLENBQUMsQ0FBQztRQUN4RCxNQUFNQyxZQUFZLEdBQUdGLGdCQUFnQixFQUFFRyxXQUFXLENBQUMsQ0FBQyxHQUFHSCxnQkFBZ0IsR0FBR3ZLLFNBQVMsQ0FBQ0ksY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkcsSUFBSXFLLFlBQVksQ0FBQzdLLEdBQUcsQ0FBYyx3QkFBd0IsQ0FBQyxFQUFFO1VBQzVELElBQUksQ0FBQ2tLLFlBQVksQ0FBQ1csWUFBWSxDQUFDO1FBQ2hDLENBQUMsTUFBTTtVQUNMQSxZQUFZLENBQWFMLEtBQUssQ0FBQyxDQUFDO1FBQ2xDO01BQ0QsQ0FBQyxNQUFNO1FBQ047UUFDQSxJQUFJLENBQUNwUyxPQUFPLENBQUMsQ0FBQyxDQUFDMlMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDQyxzQkFBc0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUFFUixLQUFLLENBQUMsQ0FBQztNQUMzRTtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBcEYsTUFBQSxDQUtRNkYsZ0NBQWdDLEdBQXhDLFNBQVFBLGdDQUFnQ0EsQ0FBQSxFQUFZO01BQ25ELE1BQU01SyxXQUFXLEdBQUcsSUFBSSxDQUFDQyw0QkFBNEIsQ0FBQyxDQUFDO01BQ3ZELE1BQU00SyxLQUFLLEdBQUc3SyxXQUFXLENBQUNrRyxRQUFRLENBQUMsQ0FBQztNQUNwQyxNQUFNNEUsT0FBTyxHQUFHRCxLQUFLLENBQUNFLFVBQVUsQ0FBQyxDQUFDO01BQ2xDLE1BQU1DLGdCQUFnQixHQUFHRixPQUFPLENBQUMxSyxJQUFJLENBQUU2SCxPQUFPLElBQUs7UUFDbEQsT0FDQ0EsT0FBTyxJQUNQQSxPQUFPLENBQUN0SSxHQUFHLEdBQUcsY0FBYyxDQUFDLElBQzVCc0ksT0FBTyxDQUFZZ0QsT0FBTyxDQUFDLENBQUMsS0FBSyxZQUFZLElBQzlDaEQsT0FBTyxDQUFDaUQsVUFBVSxDQUFDLENBQUMsSUFDbkJqRCxPQUFPLENBQVlrRCxVQUFVLENBQUMsQ0FBQyxLQUFLLEtBQUs7TUFFNUMsQ0FBQyxDQUFDO01BQ0YsSUFBSUgsZ0JBQWdCLEVBQUU7UUFDckJBLGdCQUFnQixDQUFDYixLQUFLLENBQUMsQ0FBQztRQUN4QixPQUFPLElBQUk7TUFDWjtNQUNBLE9BQU8sS0FBSztJQUNiOztJQUVBO0FBQ0Q7QUFDQSxPQUZDO0lBQUFwRixNQUFBLENBR00rRCxnQkFBZ0IsR0FBdEIsZUFBTUEsZ0JBQWdCQSxDQUFBLEVBQWtCO01BQ3ZDO01BQ0E7TUFDQTtNQUNBO01BQ0EsTUFBTXNDLGtCQUFrQixHQUFHLElBQUksQ0FBQ3pGLGVBQWUsQ0FBQyxDQUFDLENBQUNpQixxQkFBcUIsQ0FBQyxDQUFDO01BQ3pFLElBQUl3RSxrQkFBa0IsQ0FBQ0MsWUFBWSxDQUFDLENBQUMsSUFBSUQsa0JBQWtCLENBQUNFLGVBQWUsQ0FBQyxDQUFDLENBQUNsUCxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ3pGO01BQ0Q7TUFDQSxNQUFNNEQsV0FBVyxHQUFHLElBQUksQ0FBQ0MsNEJBQTRCLENBQUMsQ0FBQztRQUN0RHNMLGdCQUFnQixHQUFHdkwsV0FBVyxDQUFDb0MsaUJBQWlCLENBQUMsQ0FBQztRQUNsRHJDLFNBQVMsR0FBRyxJQUFJLENBQUM5RCxvQkFBb0IsQ0FBQyxDQUFjO01BQ3JELElBQUk4RCxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUN5TCxzQkFBc0IsQ0FBQyxDQUFDLEVBQUU7UUFDaEQ7UUFDQSxNQUFNekwsU0FBUyxDQUFDMEwsZUFBZSxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDMUwsU0FBUyxDQUFDMkwsZUFBZSxDQUFDLENBQUMsRUFBRTtVQUNqQzNMLFNBQVMsQ0FBQzRMLGVBQWUsQ0FBQyxJQUFJLENBQUM7UUFDaEM7UUFDQSxJQUFJSixnQkFBZ0IsRUFBRTtVQUNyQixJQUFJLENBQUNuQix3QkFBd0IsQ0FBQ3JLLFNBQVMsQ0FBQztRQUN6QyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUNpRCxrQkFBa0IsQ0FBQyxDQUFDLEVBQUU7VUFDckMsTUFBTSxJQUFJLENBQUN0RixTQUFTLENBQUMsQ0FBQyxFQUNuQmtPLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FDWmxKLEtBQUssQ0FBQyxVQUFVRyxLQUFjLEVBQUU7WUFDaEMsSUFBSUEsS0FBSyxFQUFFO2NBQ1Y7Y0FDQUQsR0FBRyxDQUFDaUosSUFBSSxDQUFDLGlEQUFpRCxFQUFFaEosS0FBZSxDQUFDO1lBQzdFO1VBQ0QsQ0FBQyxDQUFDO1FBQ0o7TUFDRCxDQUFDLE1BQU07UUFDTjtRQUNBLElBQUksSUFBSSxDQUFDK0gsZ0NBQWdDLENBQUMsQ0FBQyxFQUFFO1VBQzVDO1FBQ0Q7UUFDQSxNQUFNLElBQUksQ0FBQ2xOLFNBQVMsQ0FBQyxDQUFDLEVBQ25Ca08sUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUNabEosS0FBSyxDQUFDLFVBQVVHLEtBQWMsRUFBRTtVQUNoQyxJQUFJQSxLQUFLLEVBQUU7WUFDVjtZQUNBRCxHQUFHLENBQUNpSixJQUFJLENBQUMsaURBQWlELEVBQUVoSixLQUFlLENBQUM7VUFDN0U7UUFDRCxDQUFDLENBQUM7TUFDSjtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBa0MsTUFBQSxDQUtNK0csZ0JBQWdCLEdBQXRCLGVBQU1BLGdCQUFnQkEsQ0FBQ0MscUJBQXVDLEVBQTRDO01BQ3pHO01BQ0EsT0FBT0MsT0FBTyxDQUFDQyxPQUFPLENBQUNoRCxTQUFTLENBQUM7SUFDbEMsQ0FBQztJQUFBbEUsTUFBQSxDQUVLbUgsd0JBQXdCLEdBQTlCLGVBQU1BLHdCQUF3QkEsQ0FBQSxFQUFnRjtNQUM3RyxNQUFNQyxjQUFjLEdBQUcsSUFBSSxDQUFDeEcsZUFBZSxDQUFDLENBQUMsQ0FBQ3lHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQztNQUN6RSxPQUFPSixPQUFPLENBQUNDLE9BQU8sQ0FBQztRQUN0QnBCLEtBQUssRUFBRXNCLGNBQWMsQ0FBQ3RCLEtBQUs7UUFDM0J3QixRQUFRLEVBQUVGLGNBQWMsQ0FBQ0csUUFBUSxJQUFJLEVBQUU7UUFDdkNDLE1BQU0sRUFBRSxFQUFFO1FBQ1ZDLElBQUksRUFBRTtNQUNQLENBQUMsQ0FBQztJQUNILENBQUM7SUFBQXpILE1BQUEsQ0FFRDlJLG9CQUFvQixHQUFwQixTQUFBQSxvQkFBb0JBLENBQUEsRUFBMEI7TUFDN0MsT0FBTyxJQUFJLENBQUNsRSxPQUFPLENBQUMsQ0FBQyxDQUFDMlMsSUFBSSxDQUFDLElBQUksQ0FBQ0Msc0JBQXNCLENBQUMsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFBQTVGLE1BQUEsQ0FFRDlFLDRCQUE0QixHQUE1QixTQUFBQSw0QkFBNEJBLENBQUEsRUFBZ0I7TUFDM0MsT0FBTyxJQUFJLENBQUNsSSxPQUFPLENBQUMsQ0FBQyxDQUFDMlMsSUFBSSxDQUFDLElBQUksQ0FBQytCLDhCQUE4QixDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBQUExSCxNQUFBLENBRUQySCw4QkFBOEIsR0FBOUIsU0FBQUEsOEJBQThCQSxDQUFBLEVBQXdCO01BQ3JEO01BQ0E7TUFDQSxNQUFNQyxtQkFBbUIsR0FBSSxJQUFJLENBQUMxUSxvQkFBb0IsQ0FBQyxDQUFDLENBQXFDMlEsZ0JBQWdCLEdBQUcsQ0FBQztNQUNqSCxPQUFPRCxtQkFBbUIsRUFBRWpPLFNBQVMsQ0FBQyxDQUFDLEdBQUdpTyxtQkFBbUIsR0FBRzFELFNBQVM7SUFDMUUsQ0FBQztJQUFBbEUsTUFBQSxDQUVLNEIsY0FBYyxHQUFwQixlQUFNQSxjQUFjQSxDQUFBLEVBQWtCO01BQ3JDLE1BQU0sSUFBSSxDQUFDaEIsZUFBZSxDQUFDLENBQUMsQ0FBQ2tILGtCQUFrQixDQUFDLENBQUMsQ0FBQ0MsYUFBYSxDQUFDLElBQUksQ0FBQy9VLE9BQU8sQ0FBQyxDQUFDLENBQUM7TUFDL0UsTUFBTWlFLFVBQVUsR0FBRyxJQUFJLENBQUNDLG9CQUFvQixDQUFDLENBQUM7TUFDOUMsSUFBSUQsVUFBVSxFQUFFO1FBQ2ZBLFVBQVUsQ0FBQytRLGNBQWMsQ0FBQyxJQUFJLENBQUM7TUFDaEMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDQyxrQkFBa0IsQ0FBQyxDQUFDLEVBQUU7UUFDckMsTUFBTW5PLHFCQUFxQixHQUFHLElBQUksQ0FBQzlHLE9BQU8sQ0FBQyxDQUFDLENBQUMrRyxpQkFBaUIsQ0FBQyxVQUFVLENBQXlCO1FBQ2xHRCxxQkFBcUIsQ0FBQ0ksV0FBVyxDQUFDLG1CQUFtQixFQUFFLEtBQUssQ0FBQztRQUM3RCxJQUFJLElBQUksQ0FBQ2dPLFlBQVksQ0FBQyxDQUFDLEVBQUU7VUFDeEIsSUFBSSxDQUFDdk4sb0JBQW9CLENBQUMsQ0FBQyxDQUFDd04saUJBQWlCLENBQUMsSUFBSSxDQUFDO1FBQ3BEO01BQ0Q7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQW5JLE1BQUEsQ0FLQXpILG9DQUFvQyxHQUFwQyxTQUFBQSxvQ0FBb0NBLENBQUEsRUFBd0I7TUFDM0QsTUFBTTZQLGlCQUFpQixHQUFHLElBQUksQ0FBQ0MsYUFBYSxDQUFDLENBQUMsRUFBRXpMLFdBQVcsQ0FBQyxzQ0FBc0MsQ0FBQztNQUVuRyxJQUFJLENBQUN3TCxpQkFBaUIsRUFBRTtRQUN2QixPQUFPLEVBQUU7TUFDVjtNQUVBLE1BQU1FLGVBQW9DLEdBQUcsRUFBRTtNQUMvQyxNQUFNQyxjQUFjLEdBQUdILGlCQUFpQixDQUFDSSxLQUFLLENBQUMsR0FBRyxDQUFDO01BRW5ERCxjQUFjLENBQUN0UCxPQUFPLENBQUV3UCxTQUFpQixJQUFLO1FBQzdDLE1BQU12UCxjQUFjLEdBQUcsSUFBSSxDQUFDbEcsT0FBTyxDQUFDLENBQUMsQ0FBQzJTLElBQUksQ0FBQzhDLFNBQVMsQ0FBQ0MsSUFBSSxDQUFDLENBQUMsQ0FBc0I7UUFDakYsSUFBSXhQLGNBQWMsRUFBRTtVQUNuQm9QLGVBQWUsQ0FBQ0ssSUFBSSxDQUFDelAsY0FBYyxDQUFDO1FBQ3JDO01BQ0QsQ0FBQyxDQUFDO01BRUYsT0FBT29QLGVBQWU7SUFDdkIsQ0FBQztJQUFBdEksTUFBQSxDQUVENEksbUJBQW1CLEdBQW5CLFNBQUFBLG1CQUFtQkEsQ0FBQSxFQUEyQjtNQUM3QyxNQUFNQyxlQUFlLEdBQUcsSUFBSSxDQUFDN1YsT0FBTyxDQUFDLENBQUMsQ0FBQzJTLElBQUksQ0FBQyxxQkFBcUIsQ0FBaUU7TUFDbEksT0FBT2tELGVBQWUsRUFBRUMsZ0JBQWdCLEVBQUVDLE9BQU87SUFDbEQsQ0FBQztJQUFBL0ksTUFBQSxDQUVEZ0osZ0NBQWdDLEdBQWhDLFNBQUFBLGdDQUFnQ0EsQ0FBQ0MsS0FBYSxFQUFrQztNQUMvRSxNQUFNQyxTQUFTLEdBQUcsSUFBSSxDQUFDYixhQUFhLENBQUMsQ0FBQyxFQUFFekwsV0FBVyxDQUFDcU0sS0FBSyxDQUFDO01BQzFELE9BQU9DLFNBQVMsR0FBSSxJQUFJLENBQUNsVyxPQUFPLENBQUMsQ0FBQyxDQUFDMlMsSUFBSSxDQUFDdUQsU0FBUyxDQUFDLEdBQWVoRixTQUFTO0lBQzNFLENBQUM7SUFBQWxFLE1BQUEsQ0FFRDBILDhCQUE4QixHQUE5QixTQUFBQSw4QkFBOEJBLENBQUEsRUFBVztNQUN4QyxPQUFPLElBQUksQ0FBQ1csYUFBYSxDQUFDLENBQUMsRUFBRXpMLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUU7SUFDdkUsQ0FBQztJQUFBb0QsTUFBQSxDQUVENEYsc0JBQXNCLEdBQXRCLFNBQUFBLHNCQUFzQkEsQ0FBQSxFQUFXO01BQ2hDLE9BQU8sSUFBSSxDQUFDeUMsYUFBYSxDQUFDLENBQUMsRUFBRXpMLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFO0lBQy9ELENBQUM7SUFBQW9ELE1BQUEsQ0FFRDNELGVBQWUsR0FBZixTQUFBQSxlQUFlQSxDQUFBLEVBQXdCO01BQ3RDLE9BQU8sSUFBSSxDQUFDMk0sZ0NBQWdDLENBQUMsZ0JBQWdCLENBQUM7SUFDL0QsQ0FBQztJQUFBaEosTUFBQSxDQUVEbUosMEJBQTBCLEdBQTFCLFNBQUFBLDBCQUEwQkEsQ0FBQSxFQUEyQjtNQUNwRCxNQUFNQyxrQkFBa0IsR0FBR0MsY0FBYyxDQUFDQyxRQUFRLENBQUMsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDMUQsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDbkcsT0FBT3dELGtCQUFrQixHQUFHLElBQUksQ0FBQ3BXLE9BQU8sQ0FBQyxDQUFDLENBQUMyUyxJQUFJLENBQUN5RCxrQkFBa0IsQ0FBQyxHQUFHbEYsU0FBUztJQUNoRixDQUFDO0lBQUFsRSxNQUFBLENBRUR2SCwyQkFBMkIsR0FBM0IsU0FBQUEsMkJBQTJCQSxDQUFBLEVBQWtDO01BQzVELE9BQU8sSUFBSSxDQUFDdVEsZ0NBQWdDLENBQUMsdUJBQXVCLENBQUM7SUFDdEUsQ0FBQztJQUFBaEosTUFBQSxDQUVEckYsb0JBQW9CLEdBQXBCLFNBQUFBLG9CQUFvQkEsQ0FBQSxFQUF3QjtNQUMzQyxPQUFPLElBQUksQ0FBQzNILE9BQU8sQ0FBQyxDQUFDLENBQUMyUyxJQUFJLENBQUMsOEJBQThCLENBQUM7SUFDM0QsQ0FBQztJQUFBM0YsTUFBQSxDQUVEdUosY0FBYyxHQUFkLFNBQUFBLGNBQWNBLENBQUEsRUFBZTtNQUM1QixPQUFPLElBQUksQ0FBQ3ZXLE9BQU8sQ0FBQyxDQUFDLENBQUMyUyxJQUFJLENBQUMscUJBQXFCLENBQUM7SUFDbEQsQ0FBQztJQUFBM0YsTUFBQSxDQUVEckgsU0FBUyxHQUFULFNBQUFBLFNBQVNBLENBQUEsRUFBc0I7TUFDOUIsSUFBSSxJQUFJLENBQUN1UCxZQUFZLENBQUMsQ0FBQyxFQUFFO1FBQ3hCLE1BQU1zQixRQUFRLEdBQUcsSUFBSSxDQUFDN08sb0JBQW9CLENBQUMsQ0FBQyxFQUFFOE8sdUJBQXVCLENBQUMsQ0FBQyxFQUFFQyxPQUFPO1FBQ2hGLE9BQU9GLFFBQVEsRUFBRTVPLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFJNE8sUUFBUSxHQUFhdEYsU0FBUztNQUMzRSxDQUFDLE1BQU07UUFDTixPQUFPLElBQUksQ0FBQzhFLGdDQUFnQyxDQUFDLGdCQUFnQixDQUFDO01BQy9EO0lBQ0QsQ0FBQztJQUFBaEosTUFBQSxDQUVEZ0MsWUFBWSxHQUFaLFNBQUFBLFlBQVlBLENBQUMySCxJQUFhLEVBQWE7TUFDdEMsSUFBSSxJQUFJLENBQUN6QixZQUFZLENBQUMsQ0FBQyxFQUFFO1FBQ3hCLE1BQU0wQixTQUFvQixHQUFHLEVBQUU7UUFDL0IsTUFBTUMsYUFBYSxHQUFHLElBQUksQ0FBQ2xQLG9CQUFvQixDQUFDLENBQUMsQ0FBQytPLE9BQU87UUFDekRHLGFBQWEsQ0FBQ0MsUUFBUSxDQUFDLENBQUMsQ0FBQzdRLE9BQU8sQ0FBRThRLEtBQWMsSUFBSztVQUNwRCxNQUFNUCxRQUFRLEdBQUcsSUFBSSxDQUFDeFcsT0FBTyxDQUFDLENBQUMsQ0FBQzJTLElBQUksQ0FBRW9FLEtBQUssQ0FBc0JDLE1BQU0sQ0FBQyxDQUFDLENBQVk7VUFDckYsSUFBSVIsUUFBUSxJQUFJRyxJQUFJLEVBQUU7WUFDckIsSUFBS0ksS0FBSyxDQUFzQkMsTUFBTSxDQUFDLENBQUMsQ0FBQ0MsUUFBUSxDQUFDLE9BQU9OLElBQUksRUFBRSxDQUFDLEVBQUU7Y0FDakVDLFNBQVMsQ0FBQ2pCLElBQUksQ0FBQ2EsUUFBUSxDQUFDO1lBQ3pCO1VBQ0QsQ0FBQyxNQUFNLElBQUlBLFFBQVEsS0FBS3RGLFNBQVMsSUFBSXNGLFFBQVEsS0FBSyxJQUFJLEVBQUU7WUFDdkRJLFNBQVMsQ0FBQ2pCLElBQUksQ0FBQ2EsUUFBUSxDQUFDO1VBQ3pCO1FBQ0QsQ0FBQyxDQUFDO1FBQ0YsT0FBT0ksU0FBUztNQUNqQixDQUFDLE1BQU0sSUFBSUQsSUFBSSxLQUFLLE9BQU8sRUFBRTtRQUM1QixNQUFNekssTUFBTSxHQUFHLElBQUksQ0FBQzdDLGVBQWUsQ0FBQyxDQUFDO1FBQ3JDLE9BQU82QyxNQUFNLEdBQUcsQ0FBQ0EsTUFBTSxDQUFDLEdBQUcsRUFBRTtNQUM5QixDQUFDLE1BQU07UUFDTixNQUFNUCxNQUFNLEdBQUcsSUFBSSxDQUFDaEcsU0FBUyxDQUFDLENBQUM7UUFDL0IsT0FBT2dHLE1BQU0sR0FBRyxDQUFDQSxNQUFNLENBQUMsR0FBRyxFQUFFO01BQzlCO0lBQ0QsQ0FBQztJQUFBcUIsTUFBQSxDQUVEVyxlQUFlLEdBQWYsU0FBQUEsZUFBZUEsQ0FBQSxFQUFXO01BQ3pCLE1BQU11SixXQUFXLEdBQUdDLG9CQUFvQixDQUFDQyxjQUFjLENBQUMsSUFBSSxDQUFDL0IsYUFBYSxDQUFDLENBQUMsRUFBRXpMLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7TUFDMUcsUUFBUXNOLFdBQVc7UUFDbEIsS0FBSyxTQUFTO1VBQ2IsT0FBTzdYLG1CQUFtQixDQUFDeUssS0FBSztRQUNqQyxLQUFLLFdBQVc7VUFDZixPQUFPekssbUJBQW1CLENBQUMySyxLQUFLO1FBQ2pDLEtBQUssTUFBTTtRQUNYO1VBQ0MsT0FBTzNLLG1CQUFtQixDQUFDZ04sTUFBTTtNQUNuQztJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQVcsTUFBQSxDQUlBa0ksWUFBWSxHQUFaLFNBQUFBLFlBQVlBLENBQUEsRUFBWTtNQUN2QixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUNHLGFBQWEsQ0FBQyxDQUFDLEVBQUV6TCxXQUFXLENBQUMsb0JBQW9CLENBQUM7SUFDakU7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBb0QsTUFBQSxDQUlBL0Isa0JBQWtCLEdBQWxCLFNBQUFBLGtCQUFrQkEsQ0FBQSxFQUFZO01BQzdCLE1BQU1vTSxZQUFZLEdBQUcsSUFBSSxDQUFDclgsT0FBTyxDQUFDLENBQUMsQ0FBQ3NYLFdBQVcsQ0FBQyxDQUFDLENBQUNDLFdBQVc7TUFDN0QsT0FBT0YsWUFBWSxLQUFLOVgsZUFBZSxDQUFDaVksT0FBTztJQUNoRCxDQUFDO0lBQUF4SyxNQUFBLENBRURTLHVCQUF1QixHQUF2QixTQUFBQSx1QkFBdUJBLENBQUEsRUFBWTtNQUNsQyxPQUFPLElBQUksQ0FBQzRILGFBQWEsQ0FBQyxDQUFDLEVBQUV6TCxXQUFXLENBQUMseUJBQXlCLENBQUM7SUFDcEU7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBb0QsTUFBQSxDQUlBeUssZ0JBQWdCLEdBQWhCLFNBQUFBLGdCQUFnQkEsQ0FBQSxFQUFTO01BQ3hCLE1BQU16UCxTQUFTLEdBQUcsSUFBSSxDQUFDOUQsb0JBQW9CLENBQUMsQ0FBQztNQUM3QztNQUNBLElBQUk4RCxTQUFTLEVBQUU7UUFDZEEsU0FBUyxDQUFDZ04sY0FBYyxDQUFDLEtBQUssQ0FBQztNQUNoQztJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBaEksTUFBQSxDQUtBMEssb0NBQW9DLEdBQXBDLFNBQUFBLG9DQUFvQ0EsQ0FBQSxFQUFZO01BQy9DO01BQ0EsT0FBTyxLQUFLO0lBQ2I7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FOQztJQUFBMUssTUFBQSxDQU9BZSxZQUFZLEdBQVosU0FBQUEsWUFBWUEsQ0FBQSxFQUFTO01BQ3BCO01BQ0EsSUFBSSxDQUFDLElBQUksQ0FBQzlDLGtCQUFrQixDQUFDLENBQUMsRUFBRTtRQUMvQixJQUFJLENBQUN3TSxnQkFBZ0IsQ0FBQyxDQUFDO01BQ3hCO01BQ0E7TUFDQTtNQUNBLE1BQU1FLG1CQUFtQixHQUFHUixvQkFBb0IsQ0FBQ1MsdUJBQXVCLENBQ3ZFLElBQUksQ0FBQzVYLE9BQU8sQ0FBQyxDQUFDLENBQUNzWCxXQUFXLENBQUMsQ0FBQyxFQUM1QixJQUFJLENBQUNqQyxhQUFhLENBQUMsQ0FBQyxFQUFFd0MsT0FBTyxDQUFDLENBQy9CLENBQUM7TUFDRCxNQUFNdFEsaUJBQWlCLEdBQUdvUSxtQkFBbUIsSUFBSyxJQUFJLENBQUMzWCxPQUFPLENBQUMsQ0FBQyxDQUFDMlMsSUFBSSxDQUFDZ0YsbUJBQW1CLENBQXVCO01BQ2hILElBQUlwUSxpQkFBaUIsRUFBRTtRQUVyQkEsaUJBQWlCLEVBQ2Z1USwyQ0FBMkMsR0FBRyxJQUFJLENBQUNKLG9DQUFvQyxDQUFDSyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDdkc7SUFDRCxDQUFDO0lBQUEvSyxNQUFBLENBRURnTCxjQUFjLEdBQWQsU0FBQUEsY0FBY0EsQ0FBQSxFQUFTO01BQ3RCO01BQ0E7O01BRUEsTUFBTUMsU0FBUyxHQUFHQyxVQUFVLENBQUNDLEdBQUcsQ0FBQyw4QkFBOEIsQ0FBQztNQUNoRTtNQUNBOztNQUVBO01BQ0EsTUFBTUMsVUFBVSxHQUFHO1FBQ2xCQyxhQUFhLEVBQUVDLFFBQVEsQ0FBQ3hGLEtBQUs7UUFBRTtRQUMvQnlGLGlCQUFpQixFQUFFLFNBQUFBLENBQUEsRUFBb0I7VUFDdEMsTUFBTUMsS0FBSyxHQUFHQyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxDQUFDO1VBQzlCLE9BQU9GLEtBQUssR0FBRyxJQUFJQSxLQUFLLEVBQUUsR0FBR0csTUFBTSxDQUFDQyxRQUFRLENBQUNDLElBQUk7UUFDbEQsQ0FBQztRQUNEO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7UUFDR0Msa0JBQWtCLEVBQUUsQ0FBQyxDQUFDYixTQUFTLElBQUlBLFNBQVMsQ0FBQyxDQUFDLENBQUNjLFdBQVcsQ0FBQztNQUM1RCxDQUFDO01BRUQsTUFBTUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDekwsaUJBQWlCLENBQUMsQ0FBQyxDQUFDOEIsUUFBUSxDQUFDLFlBQVksQ0FBYztNQUMxRjJKLHFCQUFxQixDQUFDOVIsV0FBVyxDQUFDLG1CQUFtQixFQUFFa1IsVUFBVSxDQUFDO0lBQ25FOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBcEwsTUFBQSxDQUtBdkQsNkJBQTZCLEdBQTdCLFNBQUFBLDZCQUE2QkEsQ0FBQzNDLHFCQUEyQyxFQUFFN0MsVUFBcUIsRUFBUTtNQUN2RyxNQUFNZ1YsTUFBZ0MsR0FBRyxDQUFDLENBQUM7TUFDM0MsTUFBTUMsYUFBdUMsR0FBRyxDQUFDLENBQUM7UUFDakRuSyxPQUFPLEdBQUcsSUFBSSxDQUFDQyxZQUFZLENBQUMsT0FBTyxDQUFDO1FBQ3BDbUssT0FBTyxHQUFHLElBQUksQ0FBQ25LLFlBQVksQ0FBQyxPQUFPLENBQUM7TUFFckMsSUFBSSxDQUFDRCxPQUFPLENBQUMxSyxNQUFNLElBQUksQ0FBQzhVLE9BQU8sQ0FBQzlVLE1BQU0sRUFBRTtRQUN2QztRQUNBO01BQ0Q7O01BRUE7TUFDQThVLE9BQU8sQ0FBQ2xULE9BQU8sQ0FBQyxVQUFVaUcsTUFBTSxFQUFFO1FBQ2pDLE1BQU1rTixnQkFBZ0IsR0FBR2xOLE1BQU0sQ0FBQ3pILElBQUksQ0FBQyxzQkFBc0IsQ0FBQztVQUMzRDRVLGVBQWUsR0FBR0QsZ0JBQWdCLENBQUNoSSxLQUFLLENBQUMsQ0FBQyxDQUFDO1VBQzNDa0ksU0FBUyxHQUFHLEdBQUdELGVBQWUsT0FBTztRQUN0QyxJQUFJLENBQUNKLE1BQU0sQ0FBQ0ssU0FBUyxDQUFDLEVBQUU7VUFDdkJMLE1BQU0sQ0FBQ0ssU0FBUyxDQUFDLEdBQUcvUCxXQUFXLENBQUNnUSx1QkFBdUIsQ0FBQ3RWLFVBQVUsRUFBRWlJLE1BQU0sQ0FBQztRQUM1RTtRQUNBZ04sYUFBYSxDQUFDSSxTQUFTLENBQUMsR0FBR0wsTUFBTSxDQUFDSyxTQUFTLENBQUM7TUFDN0MsQ0FBQyxDQUFDO01BQ0Z4UyxxQkFBcUIsQ0FBQ0ksV0FBVyxDQUFDLHdCQUF3QixFQUFFZ1MsYUFBYSxDQUFDO0lBQzNFOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBbE0sTUFBQSxDQUtBaUksa0JBQWtCLEdBQWxCLFNBQUFBLGtCQUFrQkEsQ0FBQSxFQUFZO01BQzdCLE9BQU8sSUFBSSxDQUFDalYsT0FBTyxDQUFDLENBQUMsQ0FBQ3NYLFdBQVcsQ0FBQyxDQUFDLENBQUNrQyxhQUFhLElBQUksS0FBSztJQUMzRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQXhNLE1BQUEsQ0FLQXlHLHNCQUFzQixHQUF0QixTQUFBQSxzQkFBc0JBLENBQUEsRUFBWTtNQUNqQyxPQUFPLElBQUksQ0FBQ3pULE9BQU8sQ0FBQyxDQUFDLENBQUNzWCxXQUFXLENBQUMsQ0FBQyxDQUFDbUMsa0JBQWtCLElBQUksS0FBSztJQUNoRSxDQUFDO0lBQUF6TSxNQUFBLENBRURyRSwrQkFBK0IsR0FBL0IsU0FBQUEsK0JBQStCQSxDQUFDcEIsaUJBQW9DLEVBQUUwRSxHQUE4QixFQUFXO01BQzlHLElBQUksQ0FBQzFFLGlCQUFpQixJQUFJLENBQUMwRSxHQUFHLEVBQUU7UUFDL0IsT0FBTyxLQUFLO01BQ2I7TUFDQSxNQUFNeU4sUUFBUSxHQUFHblMsaUJBQWlCLENBQUNvUyxXQUFXLENBQUMsQ0FBQztNQUNoRCxNQUFNQyxjQUFjLEdBQUdGLFFBQVEsQ0FBQ3JSLElBQUksQ0FBQyxVQUFVd1IsT0FBTyxFQUFFO1FBQ3ZELE9BQU9BLE9BQU8sSUFBSUEsT0FBTyxDQUFDN0MsTUFBTSxDQUFDLENBQUMsS0FBSy9LLEdBQUc7TUFDM0MsQ0FBQyxDQUFDO01BQ0YsT0FBUTJOLGNBQWMsSUFBSUEsY0FBYyxDQUFDaFEsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUssS0FBSztJQUNsRixDQUFDO0lBQUFvRCxNQUFBLENBRUR0RSx3QkFBd0IsR0FBeEIsU0FBQUEsd0JBQXdCQSxDQUFDb1IsR0FBeUMsRUFBVztNQUM1RSxJQUNDLElBQUksQ0FBQzlaLE9BQU8sQ0FBQyxDQUFDLENBQUNzWCxXQUFXLENBQUMsQ0FBQyxDQUFDQyxXQUFXLEtBQUtoWSxlQUFlLENBQUN3YSxJQUFJLEtBQ2hFLENBQUNELEdBQUcsSUFBSUEsR0FBRyxDQUFDRSxxQkFBcUIsQ0FBQyxDQUFDLEtBQUtGLEdBQUcsQ0FBQ0csb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEVBQ25FO1FBQ0QsTUFBTWhXLFVBQVUsR0FBRyxJQUFJLENBQUNDLG9CQUFvQixDQUFDLENBQUM7UUFDOUMsSUFBSUQsVUFBVSxFQUFFO1VBQ2YsTUFBTWlXLFdBQVcsR0FBR2pXLFVBQVUsQ0FBQ3VFLGFBQWEsQ0FBQyxDQUFDO1VBQzlDLEtBQUssTUFBTW1PLElBQUksSUFBSXVELFdBQVcsRUFBRTtZQUMvQjtZQUNBLElBQUlKLEdBQUcsSUFBSSxDQUFDbkQsSUFBSSxDQUFDd0QsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJaFcsS0FBSyxDQUFDQyxPQUFPLENBQUM4VixXQUFXLENBQUN2RCxJQUFJLENBQUMsQ0FBQyxJQUFJdUQsV0FBVyxDQUFDdkQsSUFBSSxDQUFDLENBQUN0UyxNQUFNLEVBQUU7Y0FDakc7Y0FDQSxNQUFNK1YsZUFBZSxHQUFHTixHQUFHLENBQUNILFdBQVcsQ0FBQyxDQUFDLENBQUN0UixJQUFJLENBQUV3UixPQUFPLElBQUs7Z0JBQzNELE9BQU9BLE9BQU8sQ0FBQzdDLE1BQU0sQ0FBQyxDQUFDLEtBQUs4QyxHQUFHLENBQUNHLG9CQUFvQixDQUFDLENBQUM7Y0FDdkQsQ0FBQyxDQUFDO2NBQ0YsT0FBT0csZUFBZSxJQUFJQSxlQUFlLENBQUNDLGtCQUFrQixDQUFDLENBQUM7WUFDL0Q7VUFDRDtRQUNEO01BQ0Q7TUFDQSxPQUFPLEtBQUs7SUFDYixDQUFDO0lBQUFyTixNQUFBLENBRURiLFlBQVksR0FBWixTQUFBQSxZQUFZQSxDQUFDUixNQUFhLEVBQVE7TUFDakMsSUFBSSxDQUFDQSxNQUFNLENBQUMyTyxZQUFZLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQ3ZRLHNCQUFzQixFQUFFO1FBQzFENEIsTUFBTSxDQUFDSSxNQUFNLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQ2hDLHNCQUFzQixHQUFHLEtBQUs7TUFDcEM7SUFDRCxDQUFDO0lBQUFpRCxNQUFBLENBRURaLFlBQVksR0FBWixTQUFBQSxZQUFZQSxDQUFDRixNQUFhLEVBQVE7TUFDakMsTUFBTXFPLFdBQVcsR0FBSXJPLE1BQU0sQ0FBQ3NPLGtCQUFrQixDQUFDLENBQUMsQ0FBMEJDLFNBQVMsQ0FBQ3ZPLE1BQU0sQ0FBQztNQUMzRixJQUFJLEVBQUVxTyxXQUFXLElBQUlBLFdBQVcsQ0FBQ0csT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDelEsc0JBQXNCLEVBQUU7UUFDaEZpQyxNQUFNLENBQUNzTyxrQkFBa0IsQ0FBQyxDQUFDLENBQTBCek8sTUFBTSxDQUFDRyxNQUFNLEVBQUVxTyxXQUFXLENBQUNJLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4RyxJQUFJLENBQUMxUSxzQkFBc0IsR0FBRyxLQUFLO01BQ3BDO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBK0MsTUFBQSxDQUlBOUIseUJBQXlCLEdBQXpCLFNBQUFBLHlCQUF5QkEsQ0FBQzBQLGFBQXNCLEVBQVE7TUFDdkQsTUFBTTVTLFNBQVMsR0FBRyxJQUFJLENBQUM5RCxvQkFBb0IsQ0FBQyxDQUFDO01BQzdDOEQsU0FBUyxFQUFFNlMsa0JBQWtCLENBQUMsQ0FBQyxFQUFFeFUsVUFBVSxDQUFDdVUsYUFBYSxDQUFDO0lBQzNELENBQUM7SUEwTkQ7QUFDRDtBQUNBO0lBRkM1TixNQUFBLENBR0FWLCtCQUErQixHQUEvQixTQUFBQSwrQkFBK0JBLENBQUEsRUFBUztNQUN2QyxNQUFNd08sZUFBZSxHQUFHLElBQUksQ0FBQ2xGLG1CQUFtQixDQUFDLENBQUM7TUFDbEQsSUFBSWtGLGVBQWUsRUFBRTtRQUNwQixNQUFNQyxhQUFhLEdBQUc7VUFDckJDLGdCQUFnQixFQUFFQSxDQUFBLEtBQVk7WUFDN0JGLGVBQWUsQ0FBQzFJLEtBQUssQ0FBQyxDQUFDO1lBQ3ZCMEksZUFBZSxDQUFDRyxtQkFBbUIsQ0FBQ0YsYUFBYSxDQUFDO1VBQ25EO1FBQ0QsQ0FBQztRQUNERCxlQUFlLENBQUNJLGdCQUFnQixDQUFDSCxhQUFhLENBQUM7TUFDaEQ7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQS9OLE1BQUEsQ0FLTTdGLCtCQUErQixHQUFyQyxlQUFNQSwrQkFBK0JBLENBQUNhLFNBQW9CLEVBQUV5RyxvQkFBMEMsRUFBaUI7TUFDdEgsSUFBSTtRQUNILE1BQU0vSCxZQUFZLEdBQUdzQixTQUFTLENBQUNyQixTQUFTLENBQUMsQ0FBaUI7UUFDMUQsTUFBTXdVLEVBQUUsR0FBRyxNQUFNelUsWUFBWSxDQUFDMFUsbUJBQW1CLENBQUMsQ0FBQztRQUNuRDNNLG9CQUFvQixDQUFDdkgsV0FBVyxDQUFDLDJCQUEyQixFQUFFaVUsRUFBRSxDQUFDO01BQ2xFLENBQUMsQ0FBQyxPQUFPRSxHQUFZLEVBQUU7UUFDdEIsTUFBTUMsT0FBTyxHQUFHRCxHQUFHLFlBQVlFLEtBQUssR0FBR0YsR0FBRyxDQUFDQyxPQUFPLEdBQUdFLE1BQU0sQ0FBQ0gsR0FBRyxDQUFDO1FBQ2hFeFEsR0FBRyxDQUFDQyxLQUFLLENBQUMsMkRBQTJEd1EsT0FBTyxFQUFFLENBQUM7TUFDaEY7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUF0TyxNQUFBLENBSUF5Tyw0QkFBNEIsR0FBNUIsU0FBQUEsNEJBQTRCQSxDQUFBLEVBQXFCO01BQ2hELE1BQU1oTixvQkFBb0IsR0FBRyxJQUFJLENBQUN6TyxPQUFPLENBQUMsQ0FBQyxDQUFDK0csaUJBQWlCLENBQUMsVUFBVSxDQUFxQztNQUM3RyxPQUFRMEgsb0JBQW9CLEVBQUU3RSxXQUFXLENBQUMsMkJBQTJCLENBQUMsSUFBeUIsSUFBSThSLGdCQUFnQixDQUFDLENBQUM7SUFDdEg7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBMU8sTUFBQSxDQUlBMk8sNkJBQTZCLEdBQTdCLFNBQUFBLDZCQUE2QkEsQ0FBQzVTLEtBQW9ELEVBQVE7TUFDekYsSUFBSUEsS0FBSyxDQUFDOUIsWUFBWSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1FBQ2xDLElBQUksQ0FBQzJVLGFBQWEsQ0FBQzdTLEtBQUssQ0FBQzlCLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztNQUNsRDtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQStGLE1BQUEsQ0FJY2hFLDBCQUEwQixHQUF4QyxlQUFjQSwwQkFBMEJBLENBQUNELEtBQXdDLEVBQWlCO01BQ2pHLElBQUlBLEtBQUssQ0FBQzlCLFlBQVksQ0FBQyxXQUFXLENBQUMsRUFBRTtRQUNwQztNQUNEO01BQ0EsSUFBSSxFQUFFLE1BQU0sSUFBSSxDQUFDMkcsZUFBZSxDQUFDLENBQUMsRUFBRWlPLG1CQUFtQixDQUFDLENBQUMsRUFBRUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3hFO01BQ0Q7TUFDQSxNQUFNQyxNQUFNLEdBQUcsSUFBSSxDQUFDL2IsT0FBTyxDQUFDLENBQUMsQ0FBQ3NYLFdBQVcsQ0FBQyxDQUFDLENBQUMvUCxpQkFBaUI7TUFDN0QsSUFBSXdVLE1BQU0sS0FBSyxNQUFNLEVBQUU7UUFDdEIsTUFBTXhVLGlCQUFpQixHQUFHLElBQUksQ0FBQ3ZILE9BQU8sQ0FBQyxDQUFDLENBQUMyUyxJQUFJLENBQUMsMkJBQTJCLENBQWtDO1FBQzNHLElBQUlwTCxpQkFBaUIsRUFBRTtVQUN0QixJQUFJLENBQUN5VSxhQUFhLENBQUN6VSxpQkFBaUIsQ0FBQ29TLFdBQVcsQ0FBQyxDQUFDLENBQUN0VixNQUFNLEVBQUVsRixXQUFXLENBQUM4YyxJQUFJLENBQUM7UUFDN0U7TUFDRCxDQUFDLE1BQU07UUFDTixNQUFNQyxNQUFNLEdBQUduVCxLQUFLLENBQUM1RCxTQUFTLENBQUMsQ0FBQztRQUNoQyxNQUFNSyxXQUFXLEdBQUcsSUFBSSxDQUFDQywyQkFBMkIsQ0FBQyxDQUFDO1FBQ3RELElBQUl5VyxNQUFNLEtBQUsxVyxXQUFXLEVBQUU7VUFDM0IsSUFBSSxDQUFDd1csYUFBYSxDQUFDeFcsV0FBVyxFQUFFbVUsV0FBVyxDQUFDLENBQUMsQ0FBQ3RWLE1BQU0sSUFBSSxDQUFDLEVBQUVsRixXQUFXLENBQUNnZCxNQUFNLENBQUM7UUFDL0UsQ0FBQyxNQUFNLElBQUlELE1BQU0sQ0FBQ3RVLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFO1VBQzdDLE1BQU0rSCxRQUFRLEdBQUd1TSxNQUE2QjtVQUM5QyxJQUFJLENBQUNGLGFBQWEsQ0FBQ3JNLFFBQVEsRUFBRWpFLFVBQVUsR0FBRyxDQUFDLEVBQUU5RixVQUFVLEdBQUcsQ0FBQyxFQUFFK1QsV0FBVyxHQUFHLENBQUMsRUFBRXRWLE1BQU0sSUFBSSxDQUFDLEVBQUVsRixXQUFXLENBQUNpZCxLQUFLLENBQUM7UUFDOUc7TUFDRDtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQXBQLE1BQUEsQ0FJYzlELDRCQUE0QixHQUExQyxlQUFjQSw0QkFBNEJBLENBQUNILEtBQXdDLEVBQWlCO01BQ25HLE1BQU1zVCxZQUFvQixHQUFHLENBQUV0VCxLQUFLLENBQUM5QixZQUFZLENBQUMsU0FBUyxDQUFDLElBQTZCLEVBQUUsRUFBRTVDLE1BQU07TUFDbkc7TUFDQSxJQUFJZ1ksWUFBWSxLQUFLLENBQUMsRUFBRTtRQUN2QjtNQUNEO01BQ0EsSUFBSSxFQUFFLE1BQU0sSUFBSSxDQUFDek8sZUFBZSxDQUFDLENBQUMsRUFBRWlPLG1CQUFtQixDQUFDLENBQUMsRUFBRUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3hFO01BQ0Q7TUFDQSxNQUFNQyxNQUFNLEdBQUcsSUFBSSxDQUFDL2IsT0FBTyxDQUFDLENBQUMsQ0FBQ3NYLFdBQVcsQ0FBQyxDQUFDLENBQUMvUCxpQkFBaUI7TUFDN0QsSUFBSXdVLE1BQU0sS0FBSyxNQUFNLEVBQUU7UUFDdEIsSUFBSSxDQUFDQyxhQUFhLENBQUNLLFlBQVksRUFBRWxkLFdBQVcsQ0FBQzhjLElBQUksQ0FBQztNQUNuRCxDQUFDLE1BQU07UUFDTixNQUFNQyxNQUFNLEdBQUduVCxLQUFLLENBQUM1RCxTQUFTLENBQUMsQ0FBQztRQUNoQyxNQUFNSyxXQUFXLEdBQUcsSUFBSSxDQUFDQywyQkFBMkIsQ0FBQyxDQUFDO1FBQ3RELElBQUl5VyxNQUFNLEtBQUsxVyxXQUFXLEVBQUU7VUFDM0IsSUFBSSxDQUFDd1csYUFBYSxDQUFDSyxZQUFZLEVBQUVsZCxXQUFXLENBQUNnZCxNQUFNLENBQUM7UUFDckQsQ0FBQyxNQUFNLElBQUlELE1BQU0sQ0FBQ3RVLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFO1VBQzdDLElBQUksQ0FBQ29VLGFBQWEsQ0FBQ0ssWUFBWSxFQUFFbGQsV0FBVyxDQUFDaWQsS0FBSyxDQUFDO1FBQ3BEO01BQ0Q7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQXBQLE1BQUEsQ0FLUWdQLGFBQWEsR0FBckIsU0FBUUEsYUFBYUEsQ0FBQ00sYUFBcUIsRUFBRUMsV0FBK0QsRUFBUTtNQUNuSCxNQUFNQyxjQUFxQyxHQUFHO1FBQUVyTSxJQUFJLEVBQUUsWUFBWTtRQUFFOUksVUFBVSxFQUFFO1VBQUVpVixhQUFhO1VBQUVDO1FBQVk7TUFBRSxDQUFDO01BQ2hILElBQUksQ0FBQzNPLGVBQWUsQ0FBQyxDQUFDLEVBQUVpTyxtQkFBbUIsQ0FBQyxDQUFDLEVBQUVZLFdBQVcsQ0FBQ0QsY0FBYyxDQUFDO0lBQzNFLENBQUM7SUFBQSxPQUFBaGQsb0JBQUE7RUFBQSxFQXRsQ2lDNk4sY0FBYyxHQUFBbkssV0FBQSxHQUFBd1oseUJBQUEsQ0FBQTlaLE9BQUEsQ0FBQXFLLFNBQUEsZUFBQXROLEtBQUE7SUFBQWdkLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBM1osWUFBQSxHQUFBdVoseUJBQUEsQ0FBQTlaLE9BQUEsQ0FBQXFLLFNBQUEsNkJBQUE5TSxLQUFBO0lBQUF3YyxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQTFaLFlBQUEsR0FBQXNaLHlCQUFBLENBQUE5WixPQUFBLENBQUFxSyxTQUFBLGtCQUFBek0sS0FBQTtJQUFBbWMsWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUF6WixZQUFBLEdBQUFxWix5QkFBQSxDQUFBOVosT0FBQSxDQUFBcUssU0FBQSw0QkFBQXRNLEtBQUE7SUFBQWdjLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBeFosWUFBQSxHQUFBb1oseUJBQUEsQ0FBQTlaLE9BQUEsQ0FBQXFLLFNBQUEsWUFBQW5NLEtBQUE7SUFBQTZiLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBdlosWUFBQSxHQUFBbVoseUJBQUEsQ0FBQTlaLE9BQUEsQ0FBQXFLLFNBQUEsZ0JBQUFoTSxLQUFBO0lBQUEwYixZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQXRaLFlBQUEsR0FBQWtaLHlCQUFBLENBQUE5WixPQUFBLENBQUFxSyxTQUFBLG9CQUFBN0wsS0FBQTtJQUFBdWIsWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUFyWixZQUFBLEdBQUFpWix5QkFBQSxDQUFBOVosT0FBQSxDQUFBcUssU0FBQSxrQkFBQTNMLEtBQUE7SUFBQXFiLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBcFosWUFBQSxHQUFBZ1oseUJBQUEsQ0FBQTlaLE9BQUEsQ0FBQXFLLFNBQUEscUJBQUF6TCxLQUFBO0lBQUFtYixZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQUoseUJBQUEsQ0FBQTlaLE9BQUEsQ0FBQXFLLFNBQUEsc0JBQUF0TCxLQUFBLEVBQUFFLE1BQUEsR0FBQWtiLE1BQUEsQ0FBQUMsd0JBQUEsQ0FBQXBhLE9BQUEsQ0FBQXFLLFNBQUEsc0JBQUFySyxPQUFBLENBQUFxSyxTQUFBLEdBQUF5UCx5QkFBQSxDQUFBOVosT0FBQSxDQUFBcUssU0FBQSxrQkFBQWxMLE1BQUEsRUFBQUUsTUFBQSxHQUFBOGEsTUFBQSxDQUFBQyx3QkFBQSxDQUFBcGEsT0FBQSxDQUFBcUssU0FBQSxrQkFBQXJLLE9BQUEsQ0FBQXFLLFNBQUEsR0FBQXlQLHlCQUFBLENBQUE5WixPQUFBLENBQUFxSyxTQUFBLHlCQUFBOUssTUFBQSxFQUFBQyxNQUFBLEdBQUEyYSxNQUFBLENBQUFDLHdCQUFBLENBQUFwYSxPQUFBLENBQUFxSyxTQUFBLHlCQUFBckssT0FBQSxDQUFBcUssU0FBQSxHQUFBeVAseUJBQUEsQ0FBQTlaLE9BQUEsQ0FBQXFLLFNBQUEsdUJBQUExSyxNQUFBLEVBQUFDLE1BQUEsR0FBQXVhLE1BQUEsQ0FBQUMsd0JBQUEsQ0FBQXBhLE9BQUEsQ0FBQXFLLFNBQUEsdUJBQUFySyxPQUFBLENBQUFxSyxTQUFBLEdBQUF5UCx5QkFBQSxDQUFBOVosT0FBQSxDQUFBcUssU0FBQSxtQkFBQXhLLE1BQUEsRUFBQUMsTUFBQSxHQUFBcWEsTUFBQSxDQUFBQyx3QkFBQSxDQUFBcGEsT0FBQSxDQUFBcUssU0FBQSxtQkFBQXJLLE9BQUEsQ0FBQXFLLFNBQUEsR0FBQXJLLE9BQUEsTUFBQUQsTUFBQTtFQUFBLE9BeWxDbENuRCxvQkFBb0I7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
|