@sapui5/sap.fe.core 1.141.2 → 1.143.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +4 -1
- package/src/sap/fe/core/ActionRuntime.js +78 -23
- package/src/sap/fe/core/ActionRuntime.ts +91 -35
- package/src/sap/fe/core/AppComponent.js +76 -6
- package/src/sap/fe/core/AppComponent.ts +91 -8
- package/src/sap/fe/core/AppStateHandler.js +7 -7
- package/src/sap/fe/core/AppStateHandler.ts +9 -8
- package/src/sap/fe/core/BaseController.js +8 -5
- package/src/sap/fe/core/BaseController.ts +6 -1
- package/src/sap/fe/core/CommonUtils.js +4 -123
- package/src/sap/fe/core/CommonUtils.ts +3 -172
- package/src/sap/fe/core/ExtensionAPI.js +3 -11
- package/src/sap/fe/core/ExtensionAPI.ts +3 -16
- package/src/sap/fe/core/PageController.js +64 -43
- package/src/sap/fe/core/PageController.ts +62 -47
- package/src/sap/fe/core/TemplateComponent.js +12 -1
- package/src/sap/fe/core/TemplateComponent.ts +16 -2
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +37 -24
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +47 -31
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +4 -0
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +4 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +3 -0
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +5 -3
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +5 -2
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +7 -5
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +22 -2
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +82 -44
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +92 -59
- package/src/sap/fe/core/controllerextensions/EditFlow.js +74 -48
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +87 -50
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +9 -7
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +17 -5
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +37 -18
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +49 -17
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +30 -15
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +32 -14
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +9 -10
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +10 -9
- package/src/sap/fe/core/controllerextensions/Paginator.js +2 -2
- package/src/sap/fe/core/controllerextensions/Paginator.ts +1 -1
- package/src/sap/fe/core/controllerextensions/Placeholder.js +10 -2
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +5 -1
- package/src/sap/fe/core/controllerextensions/Recommendations.js +3 -3
- package/src/sap/fe/core/controllerextensions/Recommendations.ts +2 -2
- package/src/sap/fe/core/controllerextensions/Routing.js +4 -4
- package/src/sap/fe/core/controllerextensions/Routing.ts +3 -6
- package/src/sap/fe/core/controllerextensions/Share.js +5 -5
- package/src/sap/fe/core/controllerextensions/Share.ts +4 -4
- package/src/sap/fe/core/controllerextensions/SideEffects.js +1 -1
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +17 -2
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +2 -2
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +3 -3
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +3 -2
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +49 -21
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +64 -24
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +37 -3
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +41 -8
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +10 -4
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +6 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +6 -7
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +5 -5
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.js +2 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.ts +1 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.js +2 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +1 -0
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +21 -15
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +18 -15
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +7 -6
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +8 -5
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +9 -4
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +10 -4
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +3 -2
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.tsx +2 -1
- package/src/sap/fe/core/converters/ManifestSettings.js +7 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +37 -0
- package/src/sap/fe/core/converters/ManifestWrapper.js +29 -9
- package/src/sap/fe/core/converters/ManifestWrapper.ts +29 -11
- package/src/sap/fe/core/converters/MetaModelConverter.js +1 -1
- package/src/sap/fe/core/converters/MetaModelConverter.ts +1 -1
- package/src/sap/fe/core/converters/annotations/DataField.js +46 -19
- package/src/sap/fe/core/converters/annotations/DataField.ts +93 -19
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +118 -39
- package/src/sap/fe/core/converters/controls/Common/Action.js +58 -21
- package/src/sap/fe/core/converters/controls/Common/Action.ts +72 -22
- package/src/sap/fe/core/converters/controls/Common/Chart.js +13 -3
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +20 -4
- package/src/sap/fe/core/converters/controls/Common/Form.js +18 -3
- package/src/sap/fe/core/converters/controls/Common/Form.ts +23 -1
- package/src/sap/fe/core/converters/controls/Common/Table.js +87 -22
- package/src/sap/fe/core/converters/controls/Common/Table.ts +112 -21
- package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.js +243 -0
- package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.ts +309 -0
- package/src/sap/fe/core/converters/controls/Common/table/Columns.js +142 -58
- package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +174 -79
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +7 -16
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +6 -17
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +16 -5
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +16 -5
- package/src/sap/fe/core/converters/helpers/Aggregation.js +12 -2
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +11 -1
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +27 -3
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +28 -1
- package/src/sap/fe/core/converters/helpers/ID.js +3 -1
- package/src/sap/fe/core/converters/helpers/ID.ts +1 -0
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +10 -5
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +13 -1
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +11 -3
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +12 -4
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +19 -8
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +18 -7
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +8 -3
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +7 -2
- package/src/sap/fe/core/flexibility/AppComponent.flexibility.js +55 -0
- package/src/sap/fe/core/flexibility/AppComponent.flexibility.ts +65 -0
- package/src/sap/fe/core/flexibility/XMLTools.js +71 -0
- package/src/sap/fe/core/flexibility/XMLTools.ts +61 -0
- package/src/sap/fe/core/fpm/manifest.json +2 -2
- package/src/sap/fe/core/helpers/AppStartupHelper.js +79 -25
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +92 -32
- package/src/sap/fe/core/helpers/DeleteHelper.js +13 -13
- package/src/sap/fe/core/helpers/DeleteHelper.ts +17 -15
- package/src/sap/fe/core/helpers/ManifestHelper.js +6 -3
- package/src/sap/fe/core/helpers/ManifestHelper.ts +3 -0
- package/src/sap/fe/core/helpers/MetaModelFunction.js +12 -3
- package/src/sap/fe/core/helpers/MetaModelFunction.ts +11 -3
- package/src/sap/fe/core/helpers/ModelHelper.js +47 -11
- package/src/sap/fe/core/helpers/ModelHelper.ts +62 -15
- package/src/sap/fe/core/helpers/PasteHelper.js +6 -2
- package/src/sap/fe/core/helpers/PasteHelper.ts +5 -7
- package/src/sap/fe/core/helpers/TypeGuards.js +12 -2
- package/src/sap/fe/core/helpers/TypeGuards.ts +10 -1
- package/src/sap/fe/core/helpers/WebSocket.js +6 -7
- package/src/sap/fe/core/helpers/WebSocket.ts +10 -6
- package/src/sap/fe/core/library.js +33 -3
- package/src/sap/fe/core/library.ts +31 -1
- package/src/sap/fe/core/messagebundle.properties +8 -1
- package/src/sap/fe/core/messagebundle_ar.properties +8 -1
- package/src/sap/fe/core/messagebundle_bg.properties +10 -3
- package/src/sap/fe/core/messagebundle_ca.properties +7 -0
- package/src/sap/fe/core/messagebundle_cnr.properties +7 -0
- package/src/sap/fe/core/messagebundle_cs.properties +7 -0
- package/src/sap/fe/core/messagebundle_cy.properties +8 -1
- package/src/sap/fe/core/messagebundle_da.properties +7 -0
- package/src/sap/fe/core/messagebundle_de.properties +7 -0
- package/src/sap/fe/core/messagebundle_el.properties +7 -0
- package/src/sap/fe/core/messagebundle_en.properties +8 -1
- package/src/sap/fe/core/messagebundle_en_GB.properties +7 -0
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +8 -1
- package/src/sap/fe/core/messagebundle_es.properties +8 -1
- package/src/sap/fe/core/messagebundle_es_MX.properties +7 -0
- package/src/sap/fe/core/messagebundle_et.properties +7 -0
- package/src/sap/fe/core/messagebundle_fi.properties +7 -0
- package/src/sap/fe/core/messagebundle_fr.properties +16 -9
- package/src/sap/fe/core/messagebundle_fr_CA.properties +7 -0
- package/src/sap/fe/core/messagebundle_hi.properties +8 -1
- package/src/sap/fe/core/messagebundle_hr.properties +7 -0
- package/src/sap/fe/core/messagebundle_hu.properties +7 -0
- package/src/sap/fe/core/messagebundle_id.properties +7 -0
- package/src/sap/fe/core/messagebundle_it.properties +7 -0
- package/src/sap/fe/core/messagebundle_iw.properties +7 -0
- package/src/sap/fe/core/messagebundle_ja.properties +8 -1
- package/src/sap/fe/core/messagebundle_kk.properties +7 -0
- package/src/sap/fe/core/messagebundle_ko.properties +7 -0
- package/src/sap/fe/core/messagebundle_lt.properties +7 -0
- package/src/sap/fe/core/messagebundle_lv.properties +7 -0
- package/src/sap/fe/core/messagebundle_mk.properties +7 -0
- package/src/sap/fe/core/messagebundle_ms.properties +7 -0
- package/src/sap/fe/core/messagebundle_nl.properties +7 -0
- package/src/sap/fe/core/messagebundle_no.properties +9 -2
- package/src/sap/fe/core/messagebundle_pl.properties +7 -0
- package/src/sap/fe/core/messagebundle_pt.properties +7 -0
- package/src/sap/fe/core/messagebundle_pt_PT.properties +7 -0
- package/src/sap/fe/core/messagebundle_ro.properties +7 -0
- package/src/sap/fe/core/messagebundle_ru.properties +7 -0
- package/src/sap/fe/core/messagebundle_sh.properties +7 -0
- package/src/sap/fe/core/messagebundle_sk.properties +7 -0
- package/src/sap/fe/core/messagebundle_sl.properties +7 -0
- package/src/sap/fe/core/messagebundle_sr.properties +7 -0
- package/src/sap/fe/core/messagebundle_sv.properties +7 -0
- package/src/sap/fe/core/messagebundle_th.properties +7 -0
- package/src/sap/fe/core/messagebundle_tr.properties +7 -0
- package/src/sap/fe/core/messagebundle_uk.properties +7 -0
- package/src/sap/fe/core/messagebundle_vi.properties +7 -0
- package/src/sap/fe/core/messagebundle_zh_CN.properties +8 -1
- package/src/sap/fe/core/messagebundle_zh_TW.properties +7 -0
- package/src/sap/fe/core/rootView/Fcl.controller.js +21 -7
- package/src/sap/fe/core/rootView/Fcl.controller.ts +22 -5
- package/src/sap/fe/core/rootView/NavContainer.controller.js +1 -1
- package/src/sap/fe/core/rootView/NavContainer.controller.ts +2 -1
- package/src/sap/fe/core/rootView/RootViewBaseController.js +96 -88
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +106 -96
- package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +1 -1
- package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.ts +9 -9
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +14 -10
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +15 -10
- package/src/sap/fe/core/services/RoutingServiceFactory.js +9 -4
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +13 -6
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +9 -7
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +13 -8
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +57 -5
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +69 -10
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +33 -15
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +31 -11
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +4 -5
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +4 -6
- package/src/sap/fe/core/templating/UIFormatters.js +17 -2
- package/src/sap/fe/core/templating/UIFormatters.ts +25 -1
- package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.js +10 -0
- package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.ts +369 -0
- package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.js +9 -0
- package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.ts +49 -0
- package/ui5.yaml +2 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2025 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/Log", "sap/base/util/
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/ConverterContext", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/helpers/TypeGuards", "sap/ui/Device", "sap/ui/core/Component", "sap/ui/core/Fragment", "sap/ui/core/XMLTemplateProcessor", "sap/ui/core/util/XMLPreprocessor", "sap/ui/model/Filter", "./controls/AnyElement", "./converters/helpers/SelectionVariantHelper"], function (Log, mergeObjects, ConverterContext, MetaModelConverter, ModelHelper, StableIdHelper, TypeGuards, Device, Component, Fragment, XMLTemplateProcessor, XMLPreprocessor, Filter, AnyElement, SelectionVariantHelper) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
function __ui5_require_async(path) {
|
|
@@ -38,7 +38,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
|
|
|
38
38
|
if (convertedSearchTerm === "" || convertedSearchTerm === " ") {
|
|
39
39
|
return undefined;
|
|
40
40
|
}
|
|
41
|
-
return convertedSearchTerm;
|
|
41
|
+
return convertedSearchTerm.trim();
|
|
42
42
|
}
|
|
43
43
|
async function waitForContextRequested(bindingContext) {
|
|
44
44
|
const model = bindingContext.getModel();
|
|
@@ -325,7 +325,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
|
|
|
325
325
|
}
|
|
326
326
|
function getCurrentPageView(oAppComponent) {
|
|
327
327
|
const rootViewController = oAppComponent.getRootViewController();
|
|
328
|
-
return rootViewController.isFclEnabled() ? rootViewController.getRightmostView() : CommonUtils.getTargetView(oAppComponent.getRootContainer().getCurrentPage());
|
|
328
|
+
return rootViewController.isFclEnabled() ? rootViewController.getRightmostView() : CommonUtils.getTargetView(oAppComponent.getRootContainer().getCurrentPage?.());
|
|
329
329
|
}
|
|
330
330
|
function getTargetView(oControl) {
|
|
331
331
|
if (oControl && oControl.isA("sap.ui.core.ComponentContainer")) {
|
|
@@ -764,124 +764,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
|
|
|
764
764
|
async function fnGetSemanticObjectPromise(oMetaModel, sPath, sQualifier) {
|
|
765
765
|
return CommonUtils.getSemanticObjectsFromPath(oMetaModel, sPath, sQualifier);
|
|
766
766
|
}
|
|
767
|
-
function getFilterAllowedExpression(oFilterRestrictionsAnnotation) {
|
|
768
|
-
const mAllowedExpressions = {};
|
|
769
|
-
if (oFilterRestrictionsAnnotation && oFilterRestrictionsAnnotation.FilterExpressionRestrictions !== undefined) {
|
|
770
|
-
oFilterRestrictionsAnnotation.FilterExpressionRestrictions.forEach(function (oProperty) {
|
|
771
|
-
if (oProperty.Property && oProperty.AllowedExpressions !== undefined) {
|
|
772
|
-
//SingleValue | MultiValue | SingleRange | MultiRange | SearchExpression | MultiRangeOrSearchExpression
|
|
773
|
-
if (mAllowedExpressions[oProperty.Property.$PropertyPath] !== undefined) {
|
|
774
|
-
mAllowedExpressions[oProperty.Property.$PropertyPath].push(oProperty.AllowedExpressions);
|
|
775
|
-
} else {
|
|
776
|
-
mAllowedExpressions[oProperty.Property.$PropertyPath] = [oProperty.AllowedExpressions];
|
|
777
|
-
}
|
|
778
|
-
}
|
|
779
|
-
});
|
|
780
|
-
}
|
|
781
|
-
return mAllowedExpressions;
|
|
782
|
-
}
|
|
783
|
-
function getFilterRestrictions(oFilterRestrictionsAnnotation, sRestriction) {
|
|
784
|
-
let aProps = [];
|
|
785
|
-
if (oFilterRestrictionsAnnotation && oFilterRestrictionsAnnotation[sRestriction]) {
|
|
786
|
-
aProps = oFilterRestrictionsAnnotation[sRestriction].map(function (oProperty) {
|
|
787
|
-
return oProperty.$PropertyPath;
|
|
788
|
-
});
|
|
789
|
-
}
|
|
790
|
-
return aProps;
|
|
791
|
-
}
|
|
792
|
-
function _fetchPropertiesForNavPath(paths, navPath, props) {
|
|
793
|
-
const navPathPrefix = navPath + "/";
|
|
794
|
-
return paths.reduce((outPaths, pathToCheck) => {
|
|
795
|
-
if (pathToCheck.startsWith(navPathPrefix)) {
|
|
796
|
-
const outPath = pathToCheck.replace(navPathPrefix, "");
|
|
797
|
-
if (!outPaths.includes(outPath)) {
|
|
798
|
-
outPaths.push(outPath);
|
|
799
|
-
}
|
|
800
|
-
}
|
|
801
|
-
return outPaths;
|
|
802
|
-
}, props);
|
|
803
|
-
}
|
|
804
|
-
function getFilterRestrictionsByPath(entityPath, oContext) {
|
|
805
|
-
// NOTE: For getting FilterAllowedExpressions please use 'getAllowedFilterExpressionForProperty' from 'sap/fe/core/converters/controls/ListReport/FilterField.ts'.
|
|
806
|
-
const oRet = {
|
|
807
|
-
RequiredProperties: [],
|
|
808
|
-
NonFilterableProperties: [],
|
|
809
|
-
FilterAllowedExpressions: {}
|
|
810
|
-
};
|
|
811
|
-
let oFilterRestrictions;
|
|
812
|
-
const navigationText = "$NavigationPropertyBinding";
|
|
813
|
-
const frTerm = "@Org.OData.Capabilities.V1.FilterRestrictions";
|
|
814
|
-
const entityTypePathParts = entityPath.replaceAll("%2F", "/").split("/").filter(ModelHelper.filterOutNavPropBinding);
|
|
815
|
-
const entityTypePath = `/${entityTypePathParts.join("/")}/`;
|
|
816
|
-
const entitySetPath = ModelHelper.getEntitySetPath(entityPath, oContext);
|
|
817
|
-
const entitySetPathParts = entitySetPath.split("/").filter(ModelHelper.filterOutNavPropBinding);
|
|
818
|
-
const isContainment = oContext.getObject(`${entityTypePath}$ContainsTarget`);
|
|
819
|
-
const containmentNavPath = !!isContainment && entityTypePathParts[entityTypePathParts.length - 1];
|
|
820
|
-
|
|
821
|
-
//LEAST PRIORITY - Filter restrictions directly at Entity Set
|
|
822
|
-
//e.g. FR in "NS.EntityContainer/SalesOrderManage" ContextPath: /SalesOrderManage
|
|
823
|
-
if (!isContainment) {
|
|
824
|
-
oFilterRestrictions = oContext.getObject(`${entitySetPath}${frTerm}`);
|
|
825
|
-
oRet.RequiredProperties = getFilterRestrictions(oFilterRestrictions, "RequiredProperties") || [];
|
|
826
|
-
const resultContextCheck = oContext.getObject(`${entityTypePath}@com.sap.vocabularies.Common.v1.ResultContext`);
|
|
827
|
-
if (!resultContextCheck) {
|
|
828
|
-
oRet.NonFilterableProperties = getFilterRestrictions(oFilterRestrictions, "NonFilterableProperties") || [];
|
|
829
|
-
}
|
|
830
|
-
//SingleValue | MultiValue | SingleRange | MultiRange | SearchExpression | MultiRangeOrSearchExpression
|
|
831
|
-
oRet.FilterAllowedExpressions = getFilterAllowedExpression(oFilterRestrictions) || {};
|
|
832
|
-
}
|
|
833
|
-
if (entityTypePathParts.length > 1) {
|
|
834
|
-
const navPath = isContainment ? containmentNavPath : entitySetPathParts[entitySetPathParts.length - 1];
|
|
835
|
-
// In case of containment we take entitySet provided as parent. And in case of normal we would remove the last navigation from entitySetPath.
|
|
836
|
-
const parentEntitySetPath = isContainment ? entitySetPath : `/${entitySetPathParts.slice(0, -1).join(`/${navigationText}/`)}`;
|
|
837
|
-
//THIRD HIGHEST PRIORITY - Reading property path restrictions - Annotation at main entity but directly on navigation property path
|
|
838
|
-
//e.g. Parent Customer with PropertyPath="Set/CityName" ContextPath: Customer/Set
|
|
839
|
-
const oParentRet = {
|
|
840
|
-
RequiredProperties: [],
|
|
841
|
-
NonFilterableProperties: [],
|
|
842
|
-
FilterAllowedExpressions: {}
|
|
843
|
-
};
|
|
844
|
-
if (!navPath.includes("%2F")) {
|
|
845
|
-
const oParentFR = oContext.getObject(`${parentEntitySetPath}${frTerm}`);
|
|
846
|
-
oRet.RequiredProperties = _fetchPropertiesForNavPath(getFilterRestrictions(oParentFR, "RequiredProperties") || [], navPath, oRet.RequiredProperties || []);
|
|
847
|
-
oRet.NonFilterableProperties = _fetchPropertiesForNavPath(getFilterRestrictions(oParentFR, "NonFilterableProperties") || [], navPath, oRet.NonFilterableProperties || []);
|
|
848
|
-
//SingleValue | MultiValue | SingleRange | MultiRange | SearchExpression | MultiRangeOrSearchExpression
|
|
849
|
-
const completeAllowedExps = getFilterAllowedExpression(oParentFR) || {};
|
|
850
|
-
oParentRet.FilterAllowedExpressions = Object.keys(completeAllowedExps).reduce((outProp, propPath) => {
|
|
851
|
-
if (propPath.startsWith(navPath + "/")) {
|
|
852
|
-
const outPropPath = propPath.replace(navPath + "/", "");
|
|
853
|
-
outProp[outPropPath] = completeAllowedExps[propPath];
|
|
854
|
-
}
|
|
855
|
-
return outProp;
|
|
856
|
-
}, {});
|
|
857
|
-
}
|
|
858
|
-
|
|
859
|
-
//SingleValue | MultiValue | SingleRange | MultiRange | SearchExpression | MultiRangeOrSearchExpression
|
|
860
|
-
oRet.FilterAllowedExpressions = mergeObjects({}, oRet.FilterAllowedExpressions || {}, oParentRet.FilterAllowedExpressions || {});
|
|
861
|
-
|
|
862
|
-
//SECOND HIGHEST priority - Navigation restrictions
|
|
863
|
-
//e.g. Parent "/Customer" with NavigationPropertyPath="Set" ContextPath: Customer/Set
|
|
864
|
-
const oNavRestrictions = MetaModelFunction.getNavigationRestrictions(oContext, parentEntitySetPath, navPath.replaceAll("%2F", "/"));
|
|
865
|
-
const oNavFilterRest = oNavRestrictions && oNavRestrictions["FilterRestrictions"];
|
|
866
|
-
const navResReqProps = getFilterRestrictions(oNavFilterRest, "RequiredProperties") || [];
|
|
867
|
-
oRet.RequiredProperties = uniqueSort(oRet.RequiredProperties.concat(navResReqProps));
|
|
868
|
-
const navNonFilterProps = getFilterRestrictions(oNavFilterRest, "NonFilterableProperties") || [];
|
|
869
|
-
oRet.NonFilterableProperties = uniqueSort(oRet.NonFilterableProperties.concat(navNonFilterProps));
|
|
870
|
-
//SingleValue | MultiValue | SingleRange | MultiRange | SearchExpression | MultiRangeOrSearchExpression
|
|
871
|
-
oRet.FilterAllowedExpressions = mergeObjects({}, oRet.FilterAllowedExpressions || {}, getFilterAllowedExpression(oNavFilterRest) || {});
|
|
872
|
-
|
|
873
|
-
//HIGHEST priority - Restrictions having target with navigation association entity
|
|
874
|
-
// e.g. FR in "CustomerParameters/Set" ContextPath: "Customer/Set"
|
|
875
|
-
const navAssociationEntityRest = oContext.getObject(`/${entityTypePathParts.join("/")}${frTerm}`);
|
|
876
|
-
const navAssocReqProps = getFilterRestrictions(navAssociationEntityRest, "RequiredProperties") || [];
|
|
877
|
-
oRet.RequiredProperties = uniqueSort(oRet.RequiredProperties.concat(navAssocReqProps));
|
|
878
|
-
const navAssocNonFilterProps = getFilterRestrictions(navAssociationEntityRest, "NonFilterableProperties") || [];
|
|
879
|
-
oRet.NonFilterableProperties = uniqueSort(oRet.NonFilterableProperties.concat(navAssocNonFilterProps));
|
|
880
|
-
//SingleValue | MultiValue | SingleRange | MultiRange | SearchExpression | MultiRangeOrSearchExpression
|
|
881
|
-
oRet.FilterAllowedExpressions = mergeObjects({}, oRet.FilterAllowedExpressions, getFilterAllowedExpression(navAssociationEntityRest) || {});
|
|
882
|
-
}
|
|
883
|
-
return oRet;
|
|
884
|
-
}
|
|
885
767
|
async function templateControlFragment(sFragmentName, oPreprocessorSettings, oInOptions, oModifier) {
|
|
886
768
|
const oOptions = oInOptions || {};
|
|
887
769
|
if (oModifier && typeof sFragmentName === "string") {
|
|
@@ -1161,7 +1043,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
|
|
|
1161
1043
|
getSemanticObjectPromise: fnGetSemanticObjectPromise,
|
|
1162
1044
|
getSemanticObjectsFromPath: fnGetSemanticObjectsFromPath,
|
|
1163
1045
|
waitForContextRequested: waitForContextRequested,
|
|
1164
|
-
getFilterRestrictionsByPath: getFilterRestrictionsByPath,
|
|
1165
1046
|
getSpecificAllowedExpression: getSpecificAllowedExpression,
|
|
1166
1047
|
getAdditionalParamsForCreate: getAdditionalParamsForCreate,
|
|
1167
1048
|
requestSingletonProperty: requestSingletonProperty,
|
|
@@ -1191,4 +1072,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
|
|
|
1191
1072
|
};
|
|
1192
1073
|
return CommonUtils;
|
|
1193
1074
|
}, false);
|
|
1194
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJub3JtYWxpemVTZWFyY2hUZXJtIiwic1NlYXJjaFRlcm0iLCJ1bmRlZmluZWQiLCJjb252ZXJ0ZWRTZWFyY2hUZXJtIiwicmVwbGFjZSIsIndhaXRGb3JDb250ZXh0UmVxdWVzdGVkIiwiYmluZGluZ0NvbnRleHQiLCJtb2RlbCIsImdldE1vZGVsIiwibWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiZW50aXR5UGF0aCIsImdldE1ldGFQYXRoIiwiZ2V0UGF0aCIsImRhdGFNb2RlbCIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImdldENvbnRleHQiLCJyZXF1ZXN0UHJvcGVydHkiLCJ0YXJnZXRFbnRpdHlUeXBlIiwia2V5cyIsIm5hbWUiLCJmbkhhc1RyYW5zaWVudENvbnRleHRzIiwib0xpc3RCaW5kaW5nIiwiYkhhc1RyYW5zaWVudENvbnRleHRzIiwiZ2V0Q3VycmVudENvbnRleHRzIiwiZm9yRWFjaCIsIm9Db250ZXh0IiwiaXNUcmFuc2llbnQiLCJfZ2V0U09JbnRlbnRzIiwib1NoZWxsU2VydmljZUhlbHBlciIsIm9PYmplY3RQYWdlTGF5b3V0Iiwib1NlbWFudGljT2JqZWN0Iiwib1BhcmFtIiwiZ2V0TGlua3MiLCJzZW1hbnRpY09iamVjdCIsInBhcmFtcyIsIl9jcmVhdGVNYXBwaW5ncyIsIm9NYXBwaW5nIiwiYVNPTWFwcGluZ3MiLCJhTWFwcGluZ0tleXMiLCJPYmplY3QiLCJvU2VtYW50aWNNYXBwaW5nIiwiZWxlbWVudCIsIkxvY2FsUHJvcGVydHkiLCIkUHJvcGVydHlQYXRoIiwiU2VtYW50aWNPYmplY3RQcm9wZXJ0eSIsInB1c2giLCJfZ2V0UmVsYXRlZEFwcHNNZW51SXRlbXMiLCJsaW5rR3JvdXAiLCJhRXhjbHVkZWRBY3Rpb25zIiwib1RhcmdldFBhcmFtcyIsImFJdGVtcyIsImFBbGxvd2VkQWN0aW9ucyIsImxpbmtzIiwib0xpbmsiLCJzSW50ZW50IiwiaW50ZW50Iiwic0FjdGlvbiIsInNwbGl0IiwiaW5jbHVkZXMiLCJ0ZXh0IiwidGFyZ2V0U2VtT2JqZWN0IiwidGFyZ2V0QWN0aW9uIiwidGFyZ2V0UGFyYW1zIiwiX2dldFJlbGF0ZWRJbnRlbnRzIiwib0FkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMiLCJvQmluZGluZ0NvbnRleHQiLCJhTWFuaWZlc3RTT0l0ZW1zIiwiYUxpbmtzIiwibGVuZ3RoIiwiYWxsb3dlZEFjdGlvbnMiLCJ1bmF2YWlsYWJsZUFjdGlvbnMiLCJtYXBwaW5nIiwibmF2aWdhdGlvbkNvbnRleHRzIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwiX2dldFJlbGF0ZWRJbnRlbnRzV2l0aFNlbWFudGljT2JqZWN0c0FuZEFjdGlvbiIsInNlbWFudGljT2JqZWN0QW5kQWN0aW9uIiwiYXBwQ29tcG9uZW50U09JdGVtcyIsImFjdGlvbnMiLCJhY3Rpb24iLCJleGNsdWRlZEFjdGlvbnMiLCJzb01hcHBpbmdzIiwidXBkYXRlUmVsYXRlQXBwc01vZGVsIiwib0VudHJ5IiwiYVNlbUtleXMiLCJvTWV0YU1vZGVsIiwib01ldGFQYXRoIiwiYXBwQ29tcG9uZW50IiwiZ2V0U2hlbGxTZXJ2aWNlcyIsInNDdXJyZW50U2VtT2JqIiwic0N1cnJlbnRBY3Rpb24iLCJvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyIsImFSZWxhdGVkQXBwc01lbnVJdGVtcyIsImFNYW5pZmVzdFNPS2V5cyIsImZuR2V0UGFyc2VTaGVsbEhhc2hBbmRHZXRMaW5rcyIsIm9QYXJzZWRVcmwiLCJwYXJzZVNoZWxsSGFzaCIsImRvY3VtZW50IiwibG9jYXRpb24iLCJoYXNoIiwic1NlbUtleSIsInZhbHVlIiwiYVRlY2huaWNhbEtleXMiLCJnZXRPYmplY3QiLCJrZXkiLCJzT2JqS2V5Iiwib01hbmlmZXN0RGF0YSIsImdldFRhcmdldFZpZXciLCJnZXRWaWV3RGF0YSIsInNlbWFudGljT2JqZWN0SW50ZW50cyIsImFkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMiLCJQcm9taXNlIiwicmVzb2x2ZSIsImNvbXBvbmVudERhdGEiLCJnZXRDb21wb25lbnREYXRhIiwiZmVFbnZpcm9ubWVudCIsImdldEludGVudCIsImludGVybmFsTW9kZWxDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJpc1NlbWFudGljT2JqZWN0SGFzU2FtZVRhcmdldEluTWFuaWZlc3QiLCJhQW5ub3RhdGlvbnNTT0l0ZW1zIiwic0VudGl0eVNldFBhdGgiLCJzRW50aXR5VHlwZVBhdGgiLCJvRW50aXR5U2V0QW5ub3RhdGlvbnMiLCJDb21tb25VdGlscyIsImdldFNlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMiLCJiSGFzRW50aXR5U2V0U08iLCJvRW50aXR5VHlwZUFubm90YXRpb25zIiwiYVVuYXZhaWxhYmxlQWN0aW9ucyIsImFNYXBwaW5ncyIsIl9yZWYiLCJzb0l0ZW1zIiwiY29uY2F0Iiwic2V0UHJvcGVydHkiLCJlcnJvciIsIkxvZyIsIl9nZXRTZW1hbnRpY09iamVjdEFubm90YXRpb25zIiwib0VudGl0eUFubm90YXRpb25zIiwic0Fubm90YXRpb25NYXBwaW5nVGVybSIsInNBbm5vdGF0aW9uQWN0aW9uVGVybSIsInNRdWFsaWZpZXIiLCJmblVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyIsInBhdGgiLCJzU2VtYW50aWNLZXlWb2NhYnVsYXJ5IiwicmVxdWVzdE9iamVjdCIsInRoZW4iLCJyZXF1ZXN0ZWRPYmplY3QiLCJjYXRjaCIsIm9FcnJvciIsImZuRmlyZUJ1dHRvblByZXNzIiwib0J1dHRvbiIsImlzQSIsImdldFZpc2libGUiLCJnZXRFbmFibGVkIiwiZmlyZVByZXNzIiwiZ2V0QXBwQ29tcG9uZW50Iiwib0NvbnRyb2wiLCJvT3duZXIiLCJDb21wb25lbnQiLCJnZXRPd25lckNvbXBvbmVudEZvciIsIkVycm9yIiwiZ2V0Q3VycmVudFBhZ2VWaWV3Iiwib0FwcENvbXBvbmVudCIsInJvb3RWaWV3Q29udHJvbGxlciIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsImlzRmNsRW5hYmxlZCIsImdldFJpZ2h0bW9zdFZpZXciLCJnZXRSb290Q29udGFpbmVyIiwiZ2V0Q3VycmVudFBhZ2UiLCJvQ29tcG9uZW50IiwiZ2V0Q29tcG9uZW50SW5zdGFuY2UiLCJnZXRSb290Q29udHJvbCIsImdldFBhcmVudCIsIl9mbkNoZWNrSXNNYXRjaCIsIm9PYmplY3QiLCJvS2V5c1RvQ2hlY2siLCJzS2V5IiwiZm5HZXRDb250ZXh0UGF0aFByb3BlcnRpZXMiLCJtZXRhTW9kZWxDb250ZXh0Iiwic0NvbnRleHRQYXRoIiwib0ZpbHRlciIsIm9FbnRpdHlUeXBlIiwib1Byb3BlcnRpZXMiLCJoYXNPd25Qcm9wZXJ0eSIsInRlc3QiLCIka2luZCIsImZuR2V0SUJOQWN0aW9ucyIsImFJQk5BY3Rpb25zIiwiYUFjdGlvbnMiLCJnZXRBY3Rpb25zIiwib0FjdGlvbiIsImdldEFjdGlvbiIsIm9NZW51IiwiZ2V0TWVudSIsImdldEl0ZW1zIiwib0l0ZW0iLCJkYXRhIiwiZm5VcGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eSIsIm9WaWV3Iiwib1BhcmFtcyIsImlzU3RpY2t5IiwiTW9kZWxIZWxwZXIiLCJpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJmbkdldExpbmtzIiwib0RhdGEiLCJhS2V5cyIsImluZGV4T2YiLCJvSUJOQWN0aW9uIiwic1NlbWFudGljT2JqZWN0IiwiYUxpbmsiLCJzZXRWaXNpYmxlIiwiZ2V0SWQiLCJzaGVsbE5hdmlnYXRpb25Ob3RBdmFpbGFibGUiLCJ1cGRhdGVNZW51QnV0dG9uVmlzaWJsaXR5IiwiSUJOQWN0aW9ucyIsIm1lbnVCdXR0b25XaXRoSUJOQWN0aW9uIiwiSUJOQWN0aW9uIiwibWVudUFjdGlvbiIsIm1lbnVJdGVtcyIsInZpc2libGVNZW51SXRlbXMiLCJmaWx0ZXIiLCJtZW51SXRlbSIsImdldEFjdGlvblBhdGgiLCJhY3Rpb25Db250ZXh0IiwiYlJldHVybk9ubHlQYXRoIiwiaW5BY3Rpb25OYW1lIiwiYkNoZWNrU3RhdGljVmFsdWUiLCJzQWN0aW9uTmFtZSIsInRvU3RyaW5nIiwic0VudGl0eVR5cGVOYW1lIiwiJFR5cGUiLCJzRW50aXR5TmFtZSIsImdldEVudGl0eVNldE5hbWUiLCJzUHJvcGVydHkiLCJzQmluZGluZ1BhcmFtZXRlciIsInNFbnRpdHlUeXBlIiwib0VudGl0eUNvbnRhaW5lciIsImNvbXB1dGVEaXNwbGF5TW9kZSIsIm9Qcm9wZXJ0eUFubm90YXRpb25zIiwib0NvbGxlY3Rpb25Bbm5vdGF0aW9ucyIsIm9UZXh0QW5ub3RhdGlvbiIsIm9UZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uIiwiJEVudW1NZW1iZXIiLCJfZ2V0RW50aXR5VHlwZSIsIl9yZXF1ZXN0T2JqZWN0Iiwib1NlbGVjdGVkQ29udGV4dCIsIm5CcmFja2V0SW5kZXgiLCJzVGFyZ2V0VHlwZSIsInNsaWNlIiwic0N1cnJlbnRUeXBlIiwiZ2V0QmluZGluZyIsIndhcm5pbmciLCJzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoIiwib1Byb21pc2UiLCJyZXF1ZXN0U2luZ2xldG9uUHJvcGVydHkiLCJ2UHJvcGVydHlWYWx1ZSIsInNldENvbnRleHRzQmFzZWRPbk9wZXJhdGlvbkF2YWlsYWJsZSIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsImFSZXF1ZXN0UHJvbWlzZXMiLCJmb3JDb250ZXh0TWVudSIsImFyZ3VtZW50cyIsImFsbCIsImFSZXN1bHRzIiwiYUFwcGxpY2FibGVDb250ZXh0cyIsImFOb3RBcHBsaWNhYmxlQ29udGV4dHMiLCJhUmVzdWx0Iiwic2V0RHluYW1pY0FjdGlvbkNvbnRleHRzIiwidHJhY2UiLCJhcHBsaWNhYmxlIiwibm90QXBwbGljYWJsZSIsImR5bmFtaWNBY3Rpb25QYXRoUHJlZml4IiwiaW50ZXJuYWxNb2RlbCIsImFwcGxpY2FibGVQcm9wZXJ0eSIsIm5vdEFwcGxpY2FibGVQcm9wZXJ0eSIsImdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb24iLCJhRXhwcmVzc2lvbnMiLCJhQWxsb3dlZEV4cHJlc3Npb25zUHJpb3JpdHkiLCJBbGxvd2VkRXhwcmVzc2lvbnNQcmlvIiwic29ydCIsImEiLCJiIiwiZ2V0T3BlcmF0b3JzRm9yR3VpZFByb3BlcnR5IiwiYWxsb3dlZE9wZXJhdG9yc0Zvckd1aWQiLCJnZXRQYXJhbWV0ZXJJbmZvIiwic1BhcmFtZXRlckNvbnRleHRQYXRoIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJiUmVzdWx0Q29udGV4dCIsIm9QYXJhbWV0ZXJJbmZvIiwiY29udGV4dFBhdGgiLCJwYXJhbWV0ZXJQcm9wZXJ0aWVzIiwiZ2V0Q29udGV4dFBhdGhQcm9wZXJ0aWVzIiwiYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQiLCJvU2VsZWN0aW9uVmFyaWFudCIsIm1QYWdlQ29udGV4dCIsIm9OYXZpZ2F0aW9uU2VydmljZSIsImdldE5hdmlnYXRpb25TZXJ2aWNlIiwibWl4QXR0cmlidXRlc0FuZFNlbGVjdGlvblZhcmlhbnQiLCJ0b0pTT05TdHJpbmciLCJpc1N0aWNreUVkaXRNb2RlIiwiYklzU3RpY2t5TW9kZSIsImJVSUVkaXRhYmxlIiwiZ2V0SXNFZGl0YWJsZSIsInNldFVzZXJEZWZhdWx0cyIsInBhcmFtZXRlcnMiLCJpc0FjdGlvbiIsImlzQ3JlYXRlIiwiYWN0aW9uRGVmYXVsdFZhbHVlcyIsIkJhc2VUeXBlIiwiX191aTVfcmVxdWlyZV9hc3luYyIsImRlZmF1bHQiLCJUeXBlTWFwIiwic3RhcnR1cFBhcmFtZXRlcnMiLCJzaGVsbFNlcnZpY2VzIiwic3RhcnR1cEFwcFN0YXRlIiwiZ2V0U3RhcnR1cEFwcFN0YXRlIiwic3RhcnR1cEFwcFN0YXRlRGF0YSIsImdldERhdGEiLCJleHRlbmRlZFBhcmFtZXRlcnMiLCJzZWxlY3Rpb25WYXJpYW50IiwiU2VsZWN0T3B0aW9ucyIsIm9QYXJhbWV0ZXIiLCJzUHJvcGVydHlOYW1lIiwic1BhcmFtZXRlck5hbWUiLCJwYXJhbWV0ZXJ0VHlwZSIsInR5cGUiLCJnZXRCYXNlVHlwZSIsIlN0cmluZyIsInR5cGVJbnN0YW5jZSIsImdldERhdGFUeXBlSW5zdGFuY2UiLCJwYXJzZVZhbHVlIiwib0V4dGVuZGVkUGFyYW1ldGVyIiwiUHJvcGVydHlOYW1lIiwib1JhbmdlIiwiUmFuZ2VzIiwiU2lnbiIsIk9wdGlvbiIsIkxvdyIsImdldEFkZGl0aW9uYWxQYXJhbXNGb3JDcmVhdGUiLCJvU3RhcnR1cFBhcmFtZXRlcnMiLCJvSW5ib3VuZFBhcmFtZXRlcnMiLCJvSW5ib3VuZHMiLCJhQ3JlYXRlUGFyYW1ldGVycyIsInNQYXJhbWV0ZXIiLCJ1c2VGb3JDcmVhdGUiLCJvUmV0Iiwic0NyZWF0ZVBhcmFtZXRlciIsImFWYWx1ZXMiLCJjcmVhdGUiLCJnZXRTZW1hbnRpY09iamVjdE1hcHBpbmciLCJvT3V0Ym91bmQiLCJhU2VtYW50aWNPYmplY3RNYXBwaW5nIiwiYVBhcmFtZXRlcnMiLCJzUGFyYW0iLCJmb3JtYXQiLCJnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJvVmlld0RhdGEiLCJvQ3Jvc3NOYXYiLCJvSGVhZGVyRmFjZXRJdGVtcyIsInNJZCIsIm9Db250cm9sQ29uZmlnIiwiY29udHJvbENvbmZpZ3VyYXRpb24iLCJjb25maWciLCJzT3V0Ym91bmQiLCJuYXZpZ2F0aW9uIiwidGFyZ2V0T3V0Ym91bmQiLCJvdXRib3VuZCIsImdlbmVyYXRlIiwic2V0U2VtYW50aWNPYmplY3RNYXBwaW5ncyIsInZNYXBwaW5ncyIsIm9NYXBwaW5ncyIsIkpTT04iLCJwYXJzZSIsInNMb2NhbFByb3BlcnR5Iiwic1NlbWFudGljT2JqZWN0UHJvcGVydHkiLCJvU2VsZWN0T3B0aW9uIiwiZ2V0U2VsZWN0T3B0aW9uIiwicmVtb3ZlU2VsZWN0T3B0aW9uIiwibWFzc0FkZFNlbGVjdE9wdGlvbiIsImZuR2V0U2VtYW50aWNPYmplY3RzRnJvbVBhdGgiLCJzUGF0aCIsImFTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucyIsImFTZW1hbnRpY09iamVjdEZvckdldExpbmtzIiwic2VtYW50aWNPYmplY3RQYXRoIiwic2VtYW50aWNPYmplY3RGb3JHZXRMaW5rcyIsImZuR2V0U2VtYW50aWNPYmplY3RQcm9taXNlIiwiZ2V0U2VtYW50aWNPYmplY3RzRnJvbVBhdGgiLCJnZXRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbiIsIm9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uIiwibUFsbG93ZWRFeHByZXNzaW9ucyIsIkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMiLCJvUHJvcGVydHkiLCJQcm9wZXJ0eSIsIkFsbG93ZWRFeHByZXNzaW9ucyIsImdldEZpbHRlclJlc3RyaWN0aW9ucyIsInNSZXN0cmljdGlvbiIsImFQcm9wcyIsIm1hcCIsIl9mZXRjaFByb3BlcnRpZXNGb3JOYXZQYXRoIiwicGF0aHMiLCJuYXZQYXRoIiwicHJvcHMiLCJuYXZQYXRoUHJlZml4IiwicmVkdWNlIiwib3V0UGF0aHMiLCJwYXRoVG9DaGVjayIsInN0YXJ0c1dpdGgiLCJvdXRQYXRoIiwiZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoIiwiUmVxdWlyZWRQcm9wZXJ0aWVzIiwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMiLCJGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMiLCJvRmlsdGVyUmVzdHJpY3Rpb25zIiwibmF2aWdhdGlvblRleHQiLCJmclRlcm0iLCJlbnRpdHlUeXBlUGF0aFBhcnRzIiwicmVwbGFjZUFsbCIsImZpbHRlck91dE5hdlByb3BCaW5kaW5nIiwiZW50aXR5VHlwZVBhdGgiLCJqb2luIiwiZW50aXR5U2V0UGF0aCIsImdldEVudGl0eVNldFBhdGgiLCJlbnRpdHlTZXRQYXRoUGFydHMiLCJpc0NvbnRhaW5tZW50IiwiY29udGFpbm1lbnROYXZQYXRoIiwicmVzdWx0Q29udGV4dENoZWNrIiwicGFyZW50RW50aXR5U2V0UGF0aCIsIm9QYXJlbnRSZXQiLCJvUGFyZW50RlIiLCJjb21wbGV0ZUFsbG93ZWRFeHBzIiwib3V0UHJvcCIsInByb3BQYXRoIiwib3V0UHJvcFBhdGgiLCJtZXJnZU9iamVjdHMiLCJvTmF2UmVzdHJpY3Rpb25zIiwiTWV0YU1vZGVsRnVuY3Rpb24iLCJnZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zIiwib05hdkZpbHRlclJlc3QiLCJuYXZSZXNSZXFQcm9wcyIsInVuaXF1ZVNvcnQiLCJuYXZOb25GaWx0ZXJQcm9wcyIsIm5hdkFzc29jaWF0aW9uRW50aXR5UmVzdCIsIm5hdkFzc29jUmVxUHJvcHMiLCJuYXZBc3NvY05vbkZpbHRlclByb3BzIiwidGVtcGxhdGVDb250cm9sRnJhZ21lbnQiLCJzRnJhZ21lbnROYW1lIiwib1ByZXByb2Nlc3NvclNldHRpbmdzIiwib0luT3B0aW9ucyIsIm9Nb2RpZmllciIsIm9PcHRpb25zIiwidmlldyIsIm9GcmFnbWVudCIsInRhcmdldHMiLCJmcmFnbWVudERhdGEiLCJYTUxUZW1wbGF0ZVByb2Nlc3NvciIsImxvYWRUZW1wbGF0ZSIsIlhNTFByZXByb2Nlc3NvciIsInByb2Nlc3MiLCJmaXJzdEVsZW1lbnRDaGlsZCIsImlzWE1MIiwib3duZXIiLCJydW5Bc093bmVyIiwiZm4iLCJjb250YWluaW5nVmlldyIsInZpZXdPd25lciIsImNvbnRyb2xsZXIiLCJGcmFnbWVudCIsImxvYWQiLCJpZCIsImRlZmluaXRpb24iLCJnZXRTaW5nbGV0b25QYXRoIiwicGFydHMiLCJCb29sZWFuIiwicHJvcGVydHlOYW1lIiwicG9wIiwibmF2aWdhdGlvblBhdGgiLCJlbnRpdHlTZXQiLCJzaW5nbGV0b25OYW1lIiwicmVzb2x2ZWRQYXRoIiwicHJvcGVydHlCaW5kaW5nIiwiYmluZFByb3BlcnR5IiwicmVxdWVzdFZhbHVlIiwiZ2V0UGFyYW1ldGVyUGF0aCIsInNDb250ZXh0IiwiYUFjdGlvbiIsIl9mbnRyYW5zbGF0ZWRUZXh0RnJvbUV4cEJpbmRpbmdTdHJpbmciLCJleHBCaW5kaW5nIiwiY29udHJvbCIsImFueVJlc291cmNlVGV4dCIsIkFueUVsZW1lbnQiLCJhbnlUZXh0IiwiYWRkRGVwZW5kZW50IiwicmVzdWx0VGV4dCIsImdldEFueVRleHQiLCJyZW1vdmVEZXBlbmRlbnQiLCJkZXN0cm95IiwiaXNTbWFsbERldmljZSIsIkRldmljZSIsInN5c3RlbSIsImRlc2t0b3AiLCJyZXNpemUiLCJ3aWR0aCIsImdldEZpbHRlcnNGcm9tQW5ub3RhdGlvbiIsImFubm90YXRpb25QYXRoIiwic3ZDb250ZXh0IiwiZ2V0TWV0YUNvbnRleHQiLCJwcm9wZXJ0eUZpbHRlcnMiLCJhbm5vdGF0aW9uIiwidGFyZ2V0T2JqZWN0IiwiaXNBbm5vdGF0aW9uT2ZUeXBlIiwiU2VsZWN0aW9uVmFyaWFudCIsInNlbGVjdE9wdGlvbiIsIiR0YXJnZXQiLCJwcm9wZXJ0eVR5cGUiLCJwcm9wZXJ0eVBhdGgiLCJqIiwicmFuZ2UiLCJnZXRSYW5nZURlZmluaXRpb24iLCJGaWx0ZXIiLCJvcGVyYXRvciIsInJhbmdlTG93IiwicmFuZ2VIaWdoIiwiZmlsdGVycyIsImFuZCIsImdldENvbnZlcnRlckNvbnRleHRGb3JQYXRoIiwic01ldGFQYXRoIiwic0VudGl0eVNldCIsIm9EaWFnbm9zdGljcyIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiQ29udmVydGVyQ29udGV4dCIsImNyZWF0ZUNvbnZlcnRlckNvbnRleHRGb3JNYWNybyIsImNyZWF0ZVJvb3RDb250ZXh0IiwicHJvZ3JhbW1pbmdNb2RlbCIsImJpbmRpbmdQYXJhbWV0ZXJzIiwicmVzdWx0IiwiZmluZE9yQ3JlYXRlUm9vdENvbnRleHQiLCJpc05ldyIsInJvb3RDb250ZXh0IiwiY29udGV4dCIsInVzZUNhY2hlIiwicm9vdENvbnRleHRQYXRoIiwiZ2V0RHJhZnRSb290UGF0aCIsImdldFN0aWNreVJvb3RQYXRoIiwic2ltcGxlUm9vdENvbnRleHQiLCJleGlzdGluZ0JpbmRpbmdDb250ZXh0T25QYWdlIiwiZ2V0SW5zdGFuY2VkVmlld3MiLCJmaW5kIiwicGFnZVZpZXciLCJnZXRQcm9wZXJ0eSIsImNyZWF0ZU5ld1Jvb3RDb250ZXh0IiwibWVzc2FnZXNQYXRoIiwiZ2V0TWVzc2FnZXNQYXRoIiwibmV3QmluZGluZ1BhcmFtZXRlcnMiLCIkc2VsZWN0IiwibmV3U2VsZWN0IiwiYmluZENvbnRleHQiLCJnZXRCb3VuZENvbnRleHQiLCJzb3VyY2UiLCJtYW5hZ2VkT2JqZWN0IiwiZ2V0VmlldyIsIklOTElORUVESVRfVVBEQVRFR1JPVVBJRCIsImZpcmVCdXR0b25QcmVzcyIsImhhc1RyYW5zaWVudENvbnRleHQiLCJ1cGRhdGVSZWxhdGVkQXBwc0RldGFpbHMiLCJ1cGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eSIsImdldElCTkFjdGlvbnMiLCJnZXRTZW1hbnRpY09iamVjdFByb21pc2UiLCJGaWx0ZXJSZXN0cmljdGlvbnMiLCJSRVFVSVJFRF9QUk9QRVJUSUVTIiwiTk9OX0ZJTFRFUkFCTEVfUFJPUEVSVElFUyIsIkFMTE9XRURfRVhQUkVTU0lPTlMiLCJnZXRSZWxhdGVkQXBwc01lbnVJdGVtcyIsImdldFRyYW5zbGF0ZWRUZXh0RnJvbUV4cEJpbmRpbmdTdHJpbmciXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkNvbW1vblV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQWN0aW9uUGFyYW1ldGVyIGFzIEVkbUFjdGlvblBhcmFtZXRlciB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgKiBhcyBFZG0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBGaWx0ZXJSZXN0cmljdGlvbnNUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9DYXBhYmlsaXRpZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0U2VtYW50aWNPYmplY3RNYXBwaW5nQWJzdHJhY3RUeXBlcyxcblx0U2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZVR5cGVzLFxuXHRTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHsgQ29tbW9uQW5ub3RhdGlvblRlcm1zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25cIjtcbmltcG9ydCB0eXBlIHsgU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCwgU2VsZWN0aW9uVmFyaWFudFR5cGUsIFRleHRBcnJhbmdlbWVudCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdW5pcXVlU29ydCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9hcnJheS91bmlxdWVTb3J0XCI7XG5pbXBvcnQgbWVyZ2VPYmplY3RzIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBDb21wb25lbnREYXRhIH0gZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIEV4dGVuc2lvbkFQSSBmcm9tIFwic2FwL2ZlL2NvcmUvRXh0ZW5zaW9uQVBJXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCAqIGFzIE1ldGFNb2RlbENvbnZlcnRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgeyBpc0Fubm90YXRpb25PZlR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSB7IElTaGVsbFNlcnZpY2VzIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1NoZWxsU2VydmljZXNGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSBEaWFnbm9zdGljcyBmcm9tIFwic2FwL2ZlL2NvcmUvc3VwcG9ydC9EaWFnbm9zdGljc1wiO1xuaW1wb3J0IHR5cGUgU2VsZWN0aW9uVmFyaWFudCBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vU2VsZWN0aW9uVmFyaWFudFwiO1xuaW1wb3J0IHR5cGUgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCB0eXBlIE1lbnVCdXR0b24gZnJvbSBcInNhcC9tL01lbnVCdXR0b25cIjtcbmltcG9ydCB0eXBlIE1lbnVJdGVtIGZyb20gXCJzYXAvbS9NZW51SXRlbVwiO1xuaW1wb3J0IHR5cGUgTmF2Q29udGFpbmVyIGZyb20gXCJzYXAvbS9OYXZDb250YWluZXJcIjtcbmltcG9ydCB0eXBlIE92ZXJmbG93VG9vbGJhckJ1dHRvbiBmcm9tIFwic2FwL20vT3ZlcmZsb3dUb29sYmFyQnV0dG9uXCI7XG5pbXBvcnQgRGV2aWNlIGZyb20gXCJzYXAvdWkvRGV2aWNlXCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCB0eXBlIENvbXBvbmVudENvbnRhaW5lciBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50Q29udGFpbmVyXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgRnJhZ21lbnQgZnJvbSBcInNhcC91aS9jb3JlL0ZyYWdtZW50XCI7XG5pbXBvcnQgWE1MVGVtcGxhdGVQcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL1hNTFRlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IFhNTFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9YTUxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBNRENDaGFydCB9IGZyb20gXCJzYXAvdWkvbWRjL0NoYXJ0XCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgQWN0aW9uVG9vbGJhckFjdGlvbiBmcm9tIFwic2FwL3VpL21kYy9hY3Rpb250b29sYmFyL0FjdGlvblRvb2xiYXJBY3Rpb25cIjtcbmltcG9ydCB0eXBlIE1EQ1RhYmxlIGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9jb250ZW50L01EQ1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IExpbmsgfSBmcm9tIFwic2FwL3VzaGVsbC9zZXJ2aWNlcy9OYXZpZ2F0aW9uXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlTGF5b3V0IGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlTGF5b3V0XCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlU3ViU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVN1YlNlY3Rpb25cIjtcbmltcG9ydCB0eXBlIHtcblx0RXhwYW5kUGF0aFR5cGUsXG5cdE1ldGFNb2RlbEVudGl0eVR5cGUsXG5cdE1ldGFNb2RlbEVudW0sXG5cdE1ldGFNb2RlbE5hdlByb3BlcnR5LFxuXHRNZXRhTW9kZWxQcm9wZXJ0eSxcblx0TWV0YU1vZGVsVHlwZVxufSBmcm9tIFwidHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRDb250ZXh0UGFyYW1ldGVycyB9IGZyb20gXCIuL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L2RyYWZ0XCI7XG5pbXBvcnQgQW55RWxlbWVudCBmcm9tIFwiLi9jb250cm9scy9BbnlFbGVtZW50XCI7XG5pbXBvcnQgeyBnZXRSYW5nZURlZmluaXRpb24gfSBmcm9tIFwiLi9jb252ZXJ0ZXJzL2hlbHBlcnMvU2VsZWN0aW9uVmFyaWFudEhlbHBlclwiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsRnVuY3Rpb24gZnJvbSBcIi4vaGVscGVycy9NZXRhTW9kZWxGdW5jdGlvblwiO1xuXG50eXBlIE15SW5ib3hJbnRlbnQgPSB7XG5cdHNlbWFudGljT2JqZWN0OiBzdHJpbmc7XG5cdGFjdGlvbjogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gbm9ybWFsaXplU2VhcmNoVGVybShzU2VhcmNoVGVybTogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKCFzU2VhcmNoVGVybSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvLyBjaGVja2luZyBmb3Igc2VhcmNoIHRlcm0gXCJPUlwiIGlzIHRvIGFsbG93IHRoZSBTRCBzcGVjaWZpYyBzZWFyY2ggZm9yIFNhbGVPcmRlclR5cGU9T1IgKE9SIGlzIGEgaGFuYSBrZXl3b3JkKVxuXHRpZiAoc1NlYXJjaFRlcm0gPT09IFwiT1JcIikge1xuXHRcdHJldHVybiAnXCInICsgc1NlYXJjaFRlcm0gKyAnXCInO1xuXHR9XG5cblx0Y29uc3QgY29udmVydGVkU2VhcmNoVGVybSA9IHNTZWFyY2hUZXJtLnJlcGxhY2UoL1tcIigpO10vZywgXCIgXCIpOyAvLyB0aGVzZSBhcmUgdGhlIHNwZWNpZmljIGNoYXJhY3RlcnMgdGhhdCBmYWlsIG9uIGJvdGgsIENBUCBhbmQgUkFQOiBcIigpO1xuXHRpZiAoY29udmVydGVkU2VhcmNoVGVybSA9PT0gXCJcIiB8fCBjb252ZXJ0ZWRTZWFyY2hUZXJtID09PSBcIiBcIikge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0cmV0dXJuIGNvbnZlcnRlZFNlYXJjaFRlcm07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JDb250ZXh0UmVxdWVzdGVkKGJpbmRpbmdDb250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IFByb21pc2U8dm9pZD4ge1xuXHRjb25zdCBtb2RlbCA9IGJpbmRpbmdDb250ZXh0LmdldE1vZGVsKCk7XG5cdGNvbnN0IG1ldGFNb2RlbCA9IG1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRjb25zdCBlbnRpdHlQYXRoID0gbWV0YU1vZGVsLmdldE1ldGFQYXRoKGJpbmRpbmdDb250ZXh0LmdldFBhdGgoKSk7XG5cdGNvbnN0IGRhdGFNb2RlbCA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YU1vZGVsLmdldENvbnRleHQoZW50aXR5UGF0aCkpO1xuXHRhd2FpdCBiaW5kaW5nQ29udGV4dC5yZXF1ZXN0UHJvcGVydHkoZGF0YU1vZGVsLnRhcmdldEVudGl0eVR5cGUua2V5c1swXT8ubmFtZSk7XG59XG5cbmZ1bmN0aW9uIGZuSGFzVHJhbnNpZW50Q29udGV4dHMob0xpc3RCaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nKTogYm9vbGVhbiB7XG5cdGxldCBiSGFzVHJhbnNpZW50Q29udGV4dHMgPSBmYWxzZTtcblx0aWYgKG9MaXN0QmluZGluZykge1xuXHRcdG9MaXN0QmluZGluZy5nZXRDdXJyZW50Q29udGV4dHMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvQ29udGV4dDogT0RhdGFWNENvbnRleHQpIHtcblx0XHRcdGlmIChvQ29udGV4dCAmJiBvQ29udGV4dC5pc1RyYW5zaWVudCgpKSB7XG5cdFx0XHRcdGJIYXNUcmFuc2llbnRDb250ZXh0cyA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGJIYXNUcmFuc2llbnRDb250ZXh0cztcbn1cblxuLy8gdGhlcmUgaXMgbm8gbmF2aWdhdGlvbiBpbiBlbnRpdHlTZXQgcGF0aCBhbmQgcHJvcGVydHkgcGF0aFxuXG5hc3luYyBmdW5jdGlvbiBfZ2V0U09JbnRlbnRzKFxuXHRvU2hlbGxTZXJ2aWNlSGVscGVyOiBJU2hlbGxTZXJ2aWNlcyxcblx0b09iamVjdFBhZ2VMYXlvdXQ6IE9iamVjdFBhZ2VMYXlvdXQsXG5cdG9TZW1hbnRpY09iamVjdDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRvUGFyYW06IG9iamVjdCB8IHVuZGVmaW5lZFxuKTogUHJvbWlzZTxMaW5rW11bXT4ge1xuXHRyZXR1cm4gb1NoZWxsU2VydmljZUhlbHBlci5nZXRMaW5rcyhbXG5cdFx0e1xuXHRcdFx0c2VtYW50aWNPYmplY3Q6IG9TZW1hbnRpY09iamVjdCxcblx0XHRcdHBhcmFtczogb1BhcmFtXG5cdFx0fVxuXHRdKTtcbn1cblxudHlwZSBTT01hcHBpbmcgPSB7IExvY2FsUHJvcGVydHk6IHsgJFByb3BlcnR5UGF0aDogc3RyaW5nIH07IFNlbWFudGljT2JqZWN0UHJvcGVydHk6IHVua25vd24gfTtcbi8vIFRPLURPIGFkZCB0aGlzIGFzIHBhcnQgb2YgYXBwbHlTZW1hbnRpY09iamVjdG1hcHBpbmdzIGxvZ2ljIGluIEludGVudEJhc2VkbmF2aWdhdGlvbiBjb250cm9sbGVyIGV4dGVuc2lvblxuZnVuY3Rpb24gX2NyZWF0ZU1hcHBpbmdzKG9NYXBwaW5nOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFNPTWFwcGluZ1tdIHtcblx0Y29uc3QgYVNPTWFwcGluZ3M6IFNPTWFwcGluZ1tdID0gW107XG5cdGNvbnN0IGFNYXBwaW5nS2V5cyA9IE9iamVjdC5rZXlzKG9NYXBwaW5nKTtcblx0bGV0IG9TZW1hbnRpY01hcHBpbmc6IFNPTWFwcGluZztcblx0Zm9yIChjb25zdCBlbGVtZW50IG9mIGFNYXBwaW5nS2V5cykge1xuXHRcdG9TZW1hbnRpY01hcHBpbmcgPSB7XG5cdFx0XHRMb2NhbFByb3BlcnR5OiB7XG5cdFx0XHRcdCRQcm9wZXJ0eVBhdGg6IGVsZW1lbnRcblx0XHRcdH0sXG5cdFx0XHRTZW1hbnRpY09iamVjdFByb3BlcnR5OiBvTWFwcGluZ1tlbGVtZW50XVxuXHRcdH07XG5cdFx0YVNPTWFwcGluZ3MucHVzaChvU2VtYW50aWNNYXBwaW5nKTtcblx0fVxuXG5cdHJldHVybiBhU09NYXBwaW5ncztcbn1cbnR5cGUgU2VtYW50aWNJdGVtID0ge1xuXHR0ZXh0OiBzdHJpbmc7XG5cdHRhcmdldFNlbU9iamVjdDogc3RyaW5nO1xuXHR0YXJnZXRBY3Rpb246IHN0cmluZztcblx0dGFyZ2V0UGFyYW1zOiB1bmtub3duO1xufTtcbi8qKlxuICogQHBhcmFtIGxpbmtHcm91cFxuICogQHBhcmFtIGFFeGNsdWRlZEFjdGlvbnNcbiAqIEBwYXJhbSBvVGFyZ2V0UGFyYW1zXG4gKiBAcGFyYW0gYUl0ZW1zXG4gKiBAcGFyYW0gYUFsbG93ZWRBY3Rpb25zXG4gKi9cbmZ1bmN0aW9uIF9nZXRSZWxhdGVkQXBwc01lbnVJdGVtcyhcblx0bGlua0dyb3VwOiBMaW5rW11bXSxcblx0YUV4Y2x1ZGVkQWN0aW9uczogdW5rbm93bltdLFxuXHRvVGFyZ2V0UGFyYW1zOiB1bmtub3duLFxuXHRhSXRlbXM6IFNlbWFudGljSXRlbVtdLFxuXHRhQWxsb3dlZEFjdGlvbnM/OiB1bmtub3duW11cbik6IHZvaWQge1xuXHRmb3IgKGNvbnN0IGxpbmtzIG9mIGxpbmtHcm91cCkge1xuXHRcdGZvciAoY29uc3Qgb0xpbmsgb2YgbGlua3MpIHtcblx0XHRcdGNvbnN0IHNJbnRlbnQgPSBvTGluay5pbnRlbnQ7XG5cdFx0XHRjb25zdCBzQWN0aW9uID0gc0ludGVudC5zcGxpdChcIi1cIilbMV0uc3BsaXQoXCI/XCIpWzBdO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQoYUFsbG93ZWRBY3Rpb25zICYmIGFBbGxvd2VkQWN0aW9ucy5pbmNsdWRlcyhzQWN0aW9uKSkgfHxcblx0XHRcdFx0KCFhQWxsb3dlZEFjdGlvbnMgJiYgYUV4Y2x1ZGVkQWN0aW9ucyAmJiAhYUV4Y2x1ZGVkQWN0aW9ucy5pbmNsdWRlcyhzQWN0aW9uKSlcblx0XHRcdCkge1xuXHRcdFx0XHRhSXRlbXMucHVzaCh7XG5cdFx0XHRcdFx0dGV4dDogb0xpbmsudGV4dCxcblx0XHRcdFx0XHR0YXJnZXRTZW1PYmplY3Q6IHNJbnRlbnQuc3BsaXQoXCIjXCIpWzFdLnNwbGl0KFwiLVwiKVswXSxcblx0XHRcdFx0XHR0YXJnZXRBY3Rpb246IHNBY3Rpb24uc3BsaXQoXCJ+XCIpWzBdLFxuXHRcdFx0XHRcdHRhcmdldFBhcmFtczogb1RhcmdldFBhcmFtc1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IHR5cGUgU2VtYW50aWNPYmplY3QgPSB7XG5cdGFsbG93ZWRBY3Rpb25zPzogdW5rbm93bltdO1xuXHR1bmF2YWlsYWJsZUFjdGlvbnM/OiB1bmtub3duW107XG5cdHNlbWFudGljT2JqZWN0OiBzdHJpbmc7XG5cdHBhdGg6IHN0cmluZztcblx0bWFwcGluZz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59O1xuXG5mdW5jdGlvbiBfZ2V0UmVsYXRlZEludGVudHMoXG5cdG9BZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzOiBTZW1hbnRpY09iamVjdCxcblx0b0JpbmRpbmdDb250ZXh0OiBDb250ZXh0LFxuXHRhTWFuaWZlc3RTT0l0ZW1zOiBTZW1hbnRpY0l0ZW1bXSxcblx0YUxpbmtzOiBMaW5rW11bXVxuKTogdm9pZCB7XG5cdGlmIChhTGlua3MgJiYgYUxpbmtzLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCBhQWxsb3dlZEFjdGlvbnMgPSBvQWRkaXRpb25hbFNlbWFudGljT2JqZWN0cy5hbGxvd2VkQWN0aW9ucyB8fCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgYUV4Y2x1ZGVkQWN0aW9ucyA9IG9BZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzLnVuYXZhaWxhYmxlQWN0aW9ucyA/IG9BZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzLnVuYXZhaWxhYmxlQWN0aW9ucyA6IFtdO1xuXHRcdGNvbnN0IGFTT01hcHBpbmdzID0gb0FkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMubWFwcGluZyA/IF9jcmVhdGVNYXBwaW5ncyhvQWRkaXRpb25hbFNlbWFudGljT2JqZWN0cy5tYXBwaW5nKSA6IFtdO1xuXHRcdGNvbnN0IG9UYXJnZXRQYXJhbXMgPSB7IG5hdmlnYXRpb25Db250ZXh0czogb0JpbmRpbmdDb250ZXh0LCBzZW1hbnRpY09iamVjdE1hcHBpbmc6IGFTT01hcHBpbmdzIH07XG5cdFx0X2dldFJlbGF0ZWRBcHBzTWVudUl0ZW1zKGFMaW5rcywgYUV4Y2x1ZGVkQWN0aW9ucywgb1RhcmdldFBhcmFtcywgYU1hbmlmZXN0U09JdGVtcywgYUFsbG93ZWRBY3Rpb25zKTtcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZmV0Y2hlcyB0aGUgcmVsYXRlZCBpbnRlbnRzIHdoZW4gc2VtYW50aWMgb2JqZWN0IGFuZCBhY3Rpb24gYXJlIHBhc3NlZCBmcm9tIGZlRW52aXJvbm1lbnQuZ2V0SW50ZW50KCkgb25seSBpbiBjYXNlIG9mIE15IEluYm94IGludGVncmF0aW9uLlxuICogQHBhcmFtIHNlbWFudGljT2JqZWN0QW5kQWN0aW9uIFRoaXMgc3BlY2lmaWVzIHRoZSBzZW1hbnRpYyBvYmplY3QgYW5kIGFjdGlvbiBmb3IgZmV0Y2hpbmcgdGhlIGludGVudHNcbiAqIEBwYXJhbSBvQmluZGluZ0NvbnRleHQgVGhpcyBzZXBjaWZpZXMgdGhlIGJpbmRpbmcgY29udGV4dCBmb3IgdXBkYXRpbmcgcmVsYXRlZCBhcHBzXG4gKiBAcGFyYW0gYXBwQ29tcG9uZW50U09JdGVtcyBUaGlzIGlzIGEgbGlzdCBvZiBzZW1hbnRpYyBpdGVtcyB1c2VkIGZvciB1cGRhdGluZyB0aGUgcmVsYXRlZCBhcHBzIGJ1dHRvblxuICogQHBhcmFtIGFMaW5rcyBUaGlzIGlzIGFuIGFycmF5IGNvbXByaXNpbmcgb2YgcmVsYXRlZCBpbnRlbnRzXG4gKi9cblxuZnVuY3Rpb24gX2dldFJlbGF0ZWRJbnRlbnRzV2l0aFNlbWFudGljT2JqZWN0c0FuZEFjdGlvbihcblx0c2VtYW50aWNPYmplY3RBbmRBY3Rpb246IE15SW5ib3hJbnRlbnQsXG5cdG9CaW5kaW5nQ29udGV4dDogQ29udGV4dCxcblx0YXBwQ29tcG9uZW50U09JdGVtczogU2VtYW50aWNJdGVtW10sXG5cdGFMaW5rczogTGlua1tdW11cbik6IHZvaWQge1xuXHRpZiAoYUxpbmtzLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCBhY3Rpb25zID0gW3NlbWFudGljT2JqZWN0QW5kQWN0aW9uLmFjdGlvbl07XG5cdFx0Y29uc3QgZXhjbHVkZWRBY3Rpb25zOiBbXSA9IFtdO1xuXHRcdGNvbnN0IHNvTWFwcGluZ3M6IFtdID0gW107XG5cdFx0Y29uc3QgdGFyZ2V0UGFyYW1zID0geyBuYXZpZ2F0aW9uQ29udGV4dHM6IG9CaW5kaW5nQ29udGV4dCwgc2VtYW50aWNPYmplY3RNYXBwaW5nOiBzb01hcHBpbmdzIH07XG5cdFx0X2dldFJlbGF0ZWRBcHBzTWVudUl0ZW1zKGFMaW5rcywgZXhjbHVkZWRBY3Rpb25zLCB0YXJnZXRQYXJhbXMsIGFwcENvbXBvbmVudFNPSXRlbXMsIGFjdGlvbnMpO1xuXHR9XG59XG5cbnR5cGUgU2VtYW50aWNPYmplY3RDb25maWcgPSB7XG5cdGFkZGl0aW9uYWxTZW1hbnRpY09iamVjdHM6IFJlY29yZDxzdHJpbmcsIFNlbWFudGljT2JqZWN0Pjtcbn07XG50eXBlIFJlbGF0ZWRBcHBzQ29uZmlnID0ge1xuXHR0ZXh0OiBzdHJpbmc7XG5cdHRhcmdldFNlbU9iamVjdDogc3RyaW5nO1xuXHR0YXJnZXRBY3Rpb246IHN0cmluZztcbn07XG5hc3luYyBmdW5jdGlvbiB1cGRhdGVSZWxhdGVBcHBzTW9kZWwoXG5cdG9CaW5kaW5nQ29udGV4dDogQ29udGV4dCxcblx0b0VudHJ5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCxcblx0b09iamVjdFBhZ2VMYXlvdXQ6IE9iamVjdFBhZ2VMYXlvdXQsXG5cdGFTZW1LZXlzOiB7ICRQcm9wZXJ0eVBhdGg6IHN0cmluZyB9W10sXG5cdG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRvTWV0YVBhdGg6IHN0cmluZyxcblx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnRcbik6IFByb21pc2U8UmVsYXRlZEFwcHNDb25maWdbXT4ge1xuXHRjb25zdCBvU2hlbGxTZXJ2aWNlSGVscGVyOiBJU2hlbGxTZXJ2aWNlcyA9IGFwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdGNvbnN0IG9QYXJhbTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0bGV0IHNDdXJyZW50U2VtT2JqID0gXCJcIixcblx0XHRzQ3VycmVudEFjdGlvbiA9IFwiXCI7XG5cdGxldCBvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucztcblx0bGV0IGFSZWxhdGVkQXBwc01lbnVJdGVtczogUmVsYXRlZEFwcHNDb25maWdbXSA9IFtdO1xuXHRsZXQgYUV4Y2x1ZGVkQWN0aW9uczogdW5rbm93bltdID0gW107XG5cdGxldCBhTWFuaWZlc3RTT0tleXM6IHN0cmluZ1tdO1xuXG5cdGFzeW5jIGZ1bmN0aW9uIGZuR2V0UGFyc2VTaGVsbEhhc2hBbmRHZXRMaW5rcygpOiBQcm9taXNlPExpbmtbXVtdPiB7XG5cdFx0Y29uc3Qgb1BhcnNlZFVybCA9IG9TaGVsbFNlcnZpY2VIZWxwZXIucGFyc2VTaGVsbEhhc2goZG9jdW1lbnQubG9jYXRpb24uaGFzaCk7XG5cdFx0c0N1cnJlbnRTZW1PYmogPSBvUGFyc2VkVXJsLnNlbWFudGljT2JqZWN0OyAvLyBDdXJyZW50IFNlbWFudGljIE9iamVjdFxuXHRcdHNDdXJyZW50QWN0aW9uID0gb1BhcnNlZFVybC5hY3Rpb247XG5cdFx0cmV0dXJuIF9nZXRTT0ludGVudHMob1NoZWxsU2VydmljZUhlbHBlciwgb09iamVjdFBhZ2VMYXlvdXQsIHNDdXJyZW50U2VtT2JqLCBvUGFyYW0pO1xuXHR9XG5cblx0dHJ5IHtcblx0XHRpZiAob0VudHJ5KSB7XG5cdFx0XHRpZiAoYVNlbUtleXMgJiYgYVNlbUtleXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgYVNlbUtleXMpIHtcblx0XHRcdFx0XHRjb25zdCBzU2VtS2V5ID0gZWxlbWVudC4kUHJvcGVydHlQYXRoO1xuXHRcdFx0XHRcdGlmICghb1BhcmFtW3NTZW1LZXldKSB7XG5cdFx0XHRcdFx0XHRvUGFyYW1bc1NlbUtleV0gPSB7IHZhbHVlOiBvRW50cnlbc1NlbUtleV0gfTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIGZhbGxiYWNrIHRvIFRlY2huaWNhbCBLZXlzIGlmIG5vIFNlbWFudGljIEtleSBpcyBwcmVzZW50XG5cdFx0XHRcdGNvbnN0IGFUZWNobmljYWxLZXlzID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7b01ldGFQYXRofS8kVHlwZS8kS2V5YCk7XG5cdFx0XHRcdGZvciAoY29uc3Qga2V5IGluIGFUZWNobmljYWxLZXlzKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc09iaktleSA9IGFUZWNobmljYWxLZXlzW2tleV07XG5cdFx0XHRcdFx0aWYgKCFvUGFyYW1bc09iaktleV0pIHtcblx0XHRcdFx0XHRcdG9QYXJhbVtzT2JqS2V5XSA9IHsgdmFsdWU6IG9FbnRyeVtzT2JqS2V5XSB9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyBMb2dpYyB0byByZWFkIGFkZGl0aW9uYWwgU08gZnJvbSBtYW5pZmVzdCBhbmQgdXBkYXRlZCByZWxhdGVkYXBwcyBtb2RlbFxuXG5cdFx0Y29uc3Qgb01hbmlmZXN0RGF0YSA9IGdldFRhcmdldFZpZXcob09iamVjdFBhZ2VMYXlvdXQpLmdldFZpZXdEYXRhKCkgYXMgU2VtYW50aWNPYmplY3RDb25maWc7XG5cdFx0Y29uc3QgYU1hbmlmZXN0U09JdGVtczogU2VtYW50aWNJdGVtW10gPSBbXTtcblx0XHRsZXQgc2VtYW50aWNPYmplY3RJbnRlbnRzO1xuXHRcdGlmIChvTWFuaWZlc3REYXRhLmFkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMpIHtcblx0XHRcdGFNYW5pZmVzdFNPS2V5cyA9IE9iamVjdC5rZXlzKG9NYW5pZmVzdERhdGEuYWRkaXRpb25hbFNlbWFudGljT2JqZWN0cyk7XG5cdFx0XHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgYU1hbmlmZXN0U09LZXlzKSB7XG5cdFx0XHRcdHNlbWFudGljT2JqZWN0SW50ZW50cyA9IGF3YWl0IFByb21pc2UucmVzb2x2ZShfZ2V0U09JbnRlbnRzKG9TaGVsbFNlcnZpY2VIZWxwZXIsIG9PYmplY3RQYWdlTGF5b3V0LCBlbGVtZW50LCBvUGFyYW0pKTtcblx0XHRcdFx0X2dldFJlbGF0ZWRJbnRlbnRzKFxuXHRcdFx0XHRcdG9NYW5pZmVzdERhdGEuYWRkaXRpb25hbFNlbWFudGljT2JqZWN0c1tlbGVtZW50XSxcblx0XHRcdFx0XHRvQmluZGluZ0NvbnRleHQsXG5cdFx0XHRcdFx0YU1hbmlmZXN0U09JdGVtcyxcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdEludGVudHNcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBhcHBDb21wb25lbnRTT0l0ZW1zIGlzIHVwZGF0ZWQgaW4gY2FzZSBvZiBNeSBJbmJveCBpbnRlZ3JhdGlvbiB3aGVuIHNlbWFudGljIG9iamVjdCBhbmQgYWN0aW9uIGFyZSBwYXNzZWQgZnJvbSBmZUVudmlyb25tZW50LmdldEludGVudCgpIG1ldGhvZFxuXHRcdC8vIEluIG90aGVyIGNhc2VzIGl0IHJlbWFpbnMgYXMgYW4gZW1wdHkgbGlzdFxuXHRcdC8vIFdlIGNvbmNhdCB0aGlzIGxpc3QgdG93YXJkcyB0aGUgZW5kIHdpdGggYU1hbmlmZXN0U09JdGVtc1xuXG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50U09JdGVtczogU2VtYW50aWNJdGVtW10gPSBbXTtcblx0XHRjb25zdCBjb21wb25lbnREYXRhOiBDb21wb25lbnREYXRhID0gYXBwQ29tcG9uZW50LmdldENvbXBvbmVudERhdGEoKTtcblx0XHRpZiAoY29tcG9uZW50RGF0YS5mZUVudmlyb25tZW50ICYmIGNvbXBvbmVudERhdGEuZmVFbnZpcm9ubWVudC5nZXRJbnRlbnQoKSkge1xuXHRcdFx0Y29uc3QgaW50ZW50OiBNeUluYm94SW50ZW50ID0gY29tcG9uZW50RGF0YS5mZUVudmlyb25tZW50LmdldEludGVudCgpO1xuXHRcdFx0c2VtYW50aWNPYmplY3RJbnRlbnRzID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKFxuXHRcdFx0XHRfZ2V0U09JbnRlbnRzKG9TaGVsbFNlcnZpY2VIZWxwZXIsIG9PYmplY3RQYWdlTGF5b3V0LCBpbnRlbnQuc2VtYW50aWNPYmplY3QsIG9QYXJhbSlcblx0XHRcdCk7XG5cdFx0XHRfZ2V0UmVsYXRlZEludGVudHNXaXRoU2VtYW50aWNPYmplY3RzQW5kQWN0aW9uKGludGVudCwgb0JpbmRpbmdDb250ZXh0LCBhcHBDb21wb25lbnRTT0l0ZW1zLCBzZW1hbnRpY09iamVjdEludGVudHMpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGludGVybmFsTW9kZWxDb250ZXh0ID0gb09iamVjdFBhZ2VMYXlvdXQuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBhTGlua3MgPSBhd2FpdCBmbkdldFBhcnNlU2hlbGxIYXNoQW5kR2V0TGlua3MoKTtcblx0XHRpZiAoYUxpbmtzKSB7XG5cdFx0XHRpZiAoYUxpbmtzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0bGV0IGlzU2VtYW50aWNPYmplY3RIYXNTYW1lVGFyZ2V0SW5NYW5pZmVzdCA9IGZhbHNlO1xuXHRcdFx0XHRjb25zdCBvVGFyZ2V0UGFyYW1zOiB7XG5cdFx0XHRcdFx0bmF2aWdhdGlvbkNvbnRleHRzPzogQ29udGV4dDtcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdE1hcHBpbmc/OiBNZXRhTW9kZWxUeXBlPFNlbWFudGljT2JqZWN0TWFwcGluZ0Fic3RyYWN0VHlwZXM+W107XG5cdFx0XHRcdH0gPSB7fTtcblx0XHRcdFx0Y29uc3QgYUFubm90YXRpb25zU09JdGVtczogU2VtYW50aWNJdGVtW10gPSBbXTtcblx0XHRcdFx0Y29uc3Qgc0VudGl0eVNldFBhdGggPSBgJHtvTWV0YVBhdGh9QGA7XG5cdFx0XHRcdGNvbnN0IHNFbnRpdHlUeXBlUGF0aCA9IGAke29NZXRhUGF0aH0vQGA7XG5cdFx0XHRcdGNvbnN0IG9FbnRpdHlTZXRBbm5vdGF0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNFbnRpdHlTZXRQYXRoKTtcblx0XHRcdFx0b1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMgPSBDb21tb25VdGlscy5nZXRTZW1hbnRpY09iamVjdEFubm90YXRpb25zKG9FbnRpdHlTZXRBbm5vdGF0aW9ucywgc0N1cnJlbnRTZW1PYmopO1xuXHRcdFx0XHRpZiAoIW9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmJIYXNFbnRpdHlTZXRTTykge1xuXHRcdFx0XHRcdGNvbnN0IG9FbnRpdHlUeXBlQW5ub3RhdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzRW50aXR5VHlwZVBhdGgpO1xuXHRcdFx0XHRcdG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zID0gQ29tbW9uVXRpbHMuZ2V0U2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyhvRW50aXR5VHlwZUFubm90YXRpb25zLCBzQ3VycmVudFNlbU9iaik7XG5cdFx0XHRcdH1cblx0XHRcdFx0YUV4Y2x1ZGVkQWN0aW9ucyA9IG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmFVbmF2YWlsYWJsZUFjdGlvbnM7XG5cdFx0XHRcdC8vU2tpcCBzYW1lIGFwcGxpY2F0aW9uIGZyb20gUmVsYXRlZCBBcHBzXG5cdFx0XHRcdGFFeGNsdWRlZEFjdGlvbnMucHVzaChzQ3VycmVudEFjdGlvbik7XG5cdFx0XHRcdG9UYXJnZXRQYXJhbXMubmF2aWdhdGlvbkNvbnRleHRzID0gb0JpbmRpbmdDb250ZXh0O1xuXHRcdFx0XHRvVGFyZ2V0UGFyYW1zLnNlbWFudGljT2JqZWN0TWFwcGluZyA9IG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmFNYXBwaW5ncztcblx0XHRcdFx0X2dldFJlbGF0ZWRBcHBzTWVudUl0ZW1zKGFMaW5rcywgYUV4Y2x1ZGVkQWN0aW9ucywgb1RhcmdldFBhcmFtcywgYUFubm90YXRpb25zU09JdGVtcyk7XG5cblx0XHRcdFx0YU1hbmlmZXN0U09JdGVtcy5mb3JFYWNoKGZ1bmN0aW9uICh7IHRhcmdldFNlbU9iamVjdCB9KSB7XG5cdFx0XHRcdFx0aWYgKGFBbm5vdGF0aW9uc1NPSXRlbXNbMF0/LnRhcmdldFNlbU9iamVjdCA9PT0gdGFyZ2V0U2VtT2JqZWN0KSB7XG5cdFx0XHRcdFx0XHRpc1NlbWFudGljT2JqZWN0SGFzU2FtZVRhcmdldEluTWFuaWZlc3QgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0Ly8gcmVtb3ZlIGFsbCBhY3Rpb25zIGZyb20gY3VycmVudCBoYXNoIGFwcGxpY2F0aW9uIGlmIG1hbmlmZXN0IGNvbnRhaW5zIGVtcHR5IGFsbG93ZWRBY3Rpb25zXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRvTWFuaWZlc3REYXRhLmFkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMgJiZcblx0XHRcdFx0XHRhQW5ub3RhdGlvbnNTT0l0ZW1zWzBdICYmXG5cdFx0XHRcdFx0b01hbmlmZXN0RGF0YS5hZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzW2FBbm5vdGF0aW9uc1NPSXRlbXNbMF0udGFyZ2V0U2VtT2JqZWN0XSAmJlxuXHRcdFx0XHRcdCEhb01hbmlmZXN0RGF0YS5hZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzW2FBbm5vdGF0aW9uc1NPSXRlbXNbMF0udGFyZ2V0U2VtT2JqZWN0XS5hbGxvd2VkQWN0aW9uc1xuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRpc1NlbWFudGljT2JqZWN0SGFzU2FtZVRhcmdldEluTWFuaWZlc3QgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHNvSXRlbXMgPSBhTWFuaWZlc3RTT0l0ZW1zLmNvbmNhdChhcHBDb21wb25lbnRTT0l0ZW1zKTtcblx0XHRcdFx0YVJlbGF0ZWRBcHBzTWVudUl0ZW1zID0gaXNTZW1hbnRpY09iamVjdEhhc1NhbWVUYXJnZXRJbk1hbmlmZXN0ID8gc29JdGVtcyA6IHNvSXRlbXMuY29uY2F0KGFBbm5vdGF0aW9uc1NPSXRlbXMpO1xuXHRcdFx0XHQvLyBJZiBubyBhcHAgaW4gbGlzdCwgcmVsYXRlZCBhcHBzIGJ1dHRvbiB3aWxsIGJlIGhpZGRlblxuXHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInJlbGF0ZWRBcHBzL3Zpc2liaWxpdHlcIiwgYVJlbGF0ZWRBcHBzTWVudUl0ZW1zLmxlbmd0aCA+IDApO1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInJlbGF0ZWRBcHBzL2l0ZW1zXCIsIGFSZWxhdGVkQXBwc01lbnVJdGVtcyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInJlbGF0ZWRBcHBzL3Zpc2liaWxpdHlcIiwgZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInJlbGF0ZWRBcHBzL3Zpc2liaWxpdHlcIiwgZmFsc2UpO1xuXHRcdH1cblx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgcmVhZCBsaW5rc1wiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHR9XG5cdHJldHVybiBhUmVsYXRlZEFwcHNNZW51SXRlbXM7XG59XG5cbmZ1bmN0aW9uIF9nZXRTZW1hbnRpY09iamVjdEFubm90YXRpb25zKFxuXHRvRW50aXR5QW5ub3RhdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRzQ3VycmVudFNlbU9iajogc3RyaW5nXG4pOiB7XG5cdGJIYXNFbnRpdHlTZXRTTzogYm9vbGVhbjtcblx0YUFsbG93ZWRBY3Rpb25zOiBzdHJpbmdbXTtcblx0YVVuYXZhaWxhYmxlQWN0aW9uczogTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucz5bXTtcblx0YU1hcHBpbmdzOiBNZXRhTW9kZWxUeXBlPFNlbWFudGljT2JqZWN0TWFwcGluZ0Fic3RyYWN0VHlwZXM+W107XG59IHtcblx0Y29uc3Qgb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMgPSB7XG5cdFx0Ykhhc0VudGl0eVNldFNPOiBmYWxzZSxcblx0XHRhQWxsb3dlZEFjdGlvbnM6IFtdLFxuXHRcdGFVbmF2YWlsYWJsZUFjdGlvbnM6IFtdIGFzIE1ldGFNb2RlbFR5cGU8U2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnM+W10sXG5cdFx0YU1hcHBpbmdzOiBbXSBhcyBNZXRhTW9kZWxUeXBlPFNlbWFudGljT2JqZWN0TWFwcGluZ0Fic3RyYWN0VHlwZXM+W11cblx0fTtcblx0bGV0IHNBbm5vdGF0aW9uTWFwcGluZ1Rlcm0sIHNBbm5vdGF0aW9uQWN0aW9uVGVybTtcblx0bGV0IHNRdWFsaWZpZXI7XG5cdGZvciAoY29uc3Qga2V5IGluIG9FbnRpdHlBbm5vdGF0aW9ucykge1xuXHRcdGlmIChrZXkuaW5jbHVkZXMoQ29tbW9uQW5ub3RhdGlvblRlcm1zLlNlbWFudGljT2JqZWN0KSAmJiBvRW50aXR5QW5ub3RhdGlvbnNba2V5XSA9PT0gc0N1cnJlbnRTZW1PYmopIHtcblx0XHRcdG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmJIYXNFbnRpdHlTZXRTTyA9IHRydWU7XG5cdFx0XHRzQW5ub3RhdGlvbk1hcHBpbmdUZXJtID0gYEAke0NvbW1vbkFubm90YXRpb25UZXJtcy5TZW1hbnRpY09iamVjdE1hcHBpbmd9YDtcblx0XHRcdHNBbm5vdGF0aW9uQWN0aW9uVGVybSA9IGBAJHtDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnN9YDtcblxuXHRcdFx0aWYgKGtleS5pbmNsdWRlcyhcIiNcIikpIHtcblx0XHRcdFx0c1F1YWxpZmllciA9IGtleS5zcGxpdChcIiNcIilbMV07XG5cdFx0XHRcdHNBbm5vdGF0aW9uTWFwcGluZ1Rlcm0gPSBgJHtzQW5ub3RhdGlvbk1hcHBpbmdUZXJtfSMke3NRdWFsaWZpZXJ9YDtcblx0XHRcdFx0c0Fubm90YXRpb25BY3Rpb25UZXJtID0gYCR7c0Fubm90YXRpb25BY3Rpb25UZXJtfSMke3NRdWFsaWZpZXJ9YDtcblx0XHRcdH1cblx0XHRcdGlmIChvRW50aXR5QW5ub3RhdGlvbnNbc0Fubm90YXRpb25NYXBwaW5nVGVybV0pIHtcblx0XHRcdFx0b1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYU1hcHBpbmdzID0gb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYU1hcHBpbmdzLmNvbmNhdChcblx0XHRcdFx0XHRvRW50aXR5QW5ub3RhdGlvbnNbc0Fubm90YXRpb25NYXBwaW5nVGVybV0gYXMgTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdE1hcHBpbmdBYnN0cmFjdFR5cGVzPlxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAob0VudGl0eUFubm90YXRpb25zW3NBbm5vdGF0aW9uQWN0aW9uVGVybV0pIHtcblx0XHRcdFx0b1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYVVuYXZhaWxhYmxlQWN0aW9ucyA9IG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmFVbmF2YWlsYWJsZUFjdGlvbnMuY29uY2F0KFxuXHRcdFx0XHRcdG9FbnRpdHlBbm5vdGF0aW9uc1tzQW5ub3RhdGlvbkFjdGlvblRlcm1dIGFzIE1ldGFNb2RlbFR5cGU8U2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnM+XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZuVXBkYXRlUmVsYXRlZEFwcHNEZXRhaWxzKG9PYmplY3RQYWdlTGF5b3V0OiBPYmplY3RQYWdlTGF5b3V0LCBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRjb25zdCBvTWV0YU1vZGVsID0gKG9PYmplY3RQYWdlTGF5b3V0LmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCk7XG5cdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IG9PYmplY3RQYWdlTGF5b3V0LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQ7XG5cdGNvbnN0IHBhdGggPSAob0JpbmRpbmdDb250ZXh0ICYmIG9CaW5kaW5nQ29udGV4dC5nZXRQYXRoKCkpIHx8IFwiXCI7XG5cdGNvbnN0IG9NZXRhUGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgocGF0aCk7XG5cdC8vIFNlbWFudGljIEtleSBWb2NhYnVsYXJ5XG5cdGNvbnN0IHNTZW1hbnRpY0tleVZvY2FidWxhcnkgPSBgJHtvTWV0YVBhdGh9L2AgKyBgQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY0tleWA7XG5cdC8vU2VtYW50aWMgS2V5c1xuXHRjb25zdCBhU2VtS2V5cyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNTZW1hbnRpY0tleVZvY2FidWxhcnkpO1xuXHQvLyBVbmF2YWlsYWJsZSBBY3Rpb25zXG5cdGNvbnN0IG9FbnRyeSA9IG9CaW5kaW5nQ29udGV4dD8uZ2V0T2JqZWN0KCk7XG5cdGlmICghb0VudHJ5ICYmIG9CaW5kaW5nQ29udGV4dCkge1xuXHRcdG9CaW5kaW5nQ29udGV4dFxuXHRcdFx0LnJlcXVlc3RPYmplY3QoKVxuXHRcdFx0LnRoZW4oYXN5bmMgZnVuY3Rpb24gKHJlcXVlc3RlZE9iamVjdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuIENvbW1vblV0aWxzLnVwZGF0ZVJlbGF0ZUFwcHNNb2RlbChcblx0XHRcdFx0XHRvQmluZGluZ0NvbnRleHQsXG5cdFx0XHRcdFx0cmVxdWVzdGVkT2JqZWN0LFxuXHRcdFx0XHRcdG9PYmplY3RQYWdlTGF5b3V0LFxuXHRcdFx0XHRcdGFTZW1LZXlzLFxuXHRcdFx0XHRcdG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0b01ldGFQYXRoLFxuXHRcdFx0XHRcdGFwcENvbXBvbmVudFxuXHRcdFx0XHQpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCB1cGRhdGUgdGhlIHJlbGF0ZWQgYXBwIGRldGFpbHNcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gQ29tbW9uVXRpbHMudXBkYXRlUmVsYXRlQXBwc01vZGVsKG9CaW5kaW5nQ29udGV4dCwgb0VudHJ5LCBvT2JqZWN0UGFnZUxheW91dCwgYVNlbUtleXMsIG9NZXRhTW9kZWwsIG9NZXRhUGF0aCwgYXBwQ29tcG9uZW50KTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSBvQnV0dG9uXG4gKi9cbmZ1bmN0aW9uIGZuRmlyZUJ1dHRvblByZXNzKG9CdXR0b24/OiBDb250cm9sKTogdm9pZCB7XG5cdGlmIChcblx0XHRvQnV0dG9uICYmXG5cdFx0b0J1dHRvbi5pc0E8QnV0dG9uIHwgT3ZlcmZsb3dUb29sYmFyQnV0dG9uPihbXCJzYXAubS5CdXR0b25cIiwgXCJzYXAubS5PdmVyZmxvd1Rvb2xiYXJCdXR0b25cIl0pICYmXG5cdFx0b0J1dHRvbi5nZXRWaXNpYmxlKCkgJiZcblx0XHRvQnV0dG9uLmdldEVuYWJsZWQoKVxuXHQpIHtcblx0XHRvQnV0dG9uLmZpcmVQcmVzcygpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldEFwcENvbXBvbmVudChvQ29udHJvbDogQ29udHJvbCB8IENvbXBvbmVudCk6IEFwcENvbXBvbmVudCB7XG5cdGlmIChvQ29udHJvbC5pc0E8QXBwQ29tcG9uZW50PihcInNhcC5mZS5jb3JlLkFwcENvbXBvbmVudFwiKSkge1xuXHRcdHJldHVybiBvQ29udHJvbDtcblx0fVxuXHRjb25zdCBvT3duZXIgPSBDb21wb25lbnQuZ2V0T3duZXJDb21wb25lbnRGb3Iob0NvbnRyb2wpO1xuXHRpZiAoIW9Pd25lcikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIlRoZXJlIHNob3VsZCBiZSBhIHNhcC5mZS5jb3JlLkFwcENvbXBvbmVudCBhcyBvd25lciBvZiB0aGUgY29udHJvbFwiKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gZ2V0QXBwQ29tcG9uZW50KG9Pd25lcik7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0Q3VycmVudFBhZ2VWaWV3KG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCk6IEZFVmlldyB7XG5cdGNvbnN0IHJvb3RWaWV3Q29udHJvbGxlciA9IG9BcHBDb21wb25lbnQuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCk7XG5cdHJldHVybiByb290Vmlld0NvbnRyb2xsZXIuaXNGY2xFbmFibGVkKClcblx0XHQ/IHJvb3RWaWV3Q29udHJvbGxlci5nZXRSaWdodG1vc3RWaWV3KClcblx0XHQ6IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcoKG9BcHBDb21wb25lbnQuZ2V0Um9vdENvbnRhaW5lcigpIGFzIE5hdkNvbnRhaW5lcikuZ2V0Q3VycmVudFBhZ2UoKSk7XG59XG5cbmZ1bmN0aW9uIGdldFRhcmdldFZpZXcob0NvbnRyb2w6IE1hbmFnZWRPYmplY3QgfCBudWxsKTogRkVWaWV3IHtcblx0aWYgKG9Db250cm9sICYmIG9Db250cm9sLmlzQTxDb21wb25lbnRDb250YWluZXI+KFwic2FwLnVpLmNvcmUuQ29tcG9uZW50Q29udGFpbmVyXCIpKSB7XG5cdFx0Y29uc3Qgb0NvbXBvbmVudCA9IG9Db250cm9sLmdldENvbXBvbmVudEluc3RhbmNlKCk7XG5cdFx0b0NvbnRyb2wgPSBvQ29tcG9uZW50ICYmIG9Db21wb25lbnQuZ2V0Um9vdENvbnRyb2woKTtcblx0fVxuXHR3aGlsZSAob0NvbnRyb2wgJiYgIW9Db250cm9sLmlzQTxGRVZpZXc+KFwic2FwLnVpLmNvcmUubXZjLlZpZXdcIikpIHtcblx0XHRvQ29udHJvbCA9IG9Db250cm9sLmdldFBhcmVudCgpO1xuXHR9XG5cdHJldHVybiBvQ29udHJvbCE7XG59XG5cbmZ1bmN0aW9uIF9mbkNoZWNrSXNNYXRjaChvT2JqZWN0OiBvYmplY3QsIG9LZXlzVG9DaGVjazogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBib29sZWFuIHtcblx0Zm9yIChjb25zdCBzS2V5IGluIG9LZXlzVG9DaGVjaykge1xuXHRcdGlmIChvS2V5c1RvQ2hlY2tbc0tleV0gIT09IG9PYmplY3Rbc0tleSBhcyBrZXlvZiB0eXBlb2Ygb09iamVjdF0pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGZuR2V0Q29udGV4dFBhdGhQcm9wZXJ0aWVzKFxuXHRtZXRhTW9kZWxDb250ZXh0OiBPRGF0YU1ldGFNb2RlbCxcblx0c0NvbnRleHRQYXRoOiBzdHJpbmcsXG5cdG9GaWx0ZXI/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogUmVjb3JkPHN0cmluZywgTWV0YU1vZGVsUHJvcGVydHk+IHwgUmVjb3JkPHN0cmluZywgTWV0YU1vZGVsTmF2UHJvcGVydHk+IHtcblx0Y29uc3Qgb0VudGl0eVR5cGU6IE1ldGFNb2RlbEVudGl0eVR5cGUgPSAobWV0YU1vZGVsQ29udGV4dC5nZXRPYmplY3QoYCR7c0NvbnRleHRQYXRofS9gKSB8fCB7fSkgYXMgTWV0YU1vZGVsRW50aXR5VHlwZSxcblx0XHRvUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgTWV0YU1vZGVsUHJvcGVydHk+IHwgUmVjb3JkPHN0cmluZywgTWV0YU1vZGVsTmF2UHJvcGVydHk+ID0ge307XG5cblx0Zm9yIChjb25zdCBzS2V5IGluIG9FbnRpdHlUeXBlKSB7XG5cdFx0aWYgKFxuXHRcdFx0b0VudGl0eVR5cGUuaGFzT3duUHJvcGVydHkoc0tleSkgJiZcblx0XHRcdCEvXlxcJC9pLnRlc3Qoc0tleSkgJiZcblx0XHRcdG9FbnRpdHlUeXBlW3NLZXldLiRraW5kICYmXG5cdFx0XHRfZm5DaGVja0lzTWF0Y2gob0VudGl0eVR5cGVbc0tleV0sIG9GaWx0ZXIgfHwgeyAka2luZDogXCJQcm9wZXJ0eVwiIH0pXG5cdFx0KSB7XG5cdFx0XHRvUHJvcGVydGllc1tzS2V5XSA9IG9FbnRpdHlUeXBlW3NLZXldO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb1Byb3BlcnRpZXM7XG59XG5cbmZ1bmN0aW9uIGZuR2V0SUJOQWN0aW9ucyhvQ29udHJvbDogVGFibGUgfCBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlIHwgT2JqZWN0UGFnZVN1YlNlY3Rpb24sIGFJQk5BY3Rpb25zOiBVSTVFbGVtZW50W10pOiBVSTVFbGVtZW50W10ge1xuXHRjb25zdCBhQWN0aW9ucyA9IG9Db250cm9sICYmIG9Db250cm9sLmdldEFjdGlvbnMoKTtcblx0aWYgKGFBY3Rpb25zKSB7XG5cdFx0YUFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAob0FjdGlvbikge1xuXHRcdFx0aWYgKG9BY3Rpb24uaXNBPEFjdGlvblRvb2xiYXJBY3Rpb24+KFwic2FwLnVpLm1kYy5hY3Rpb250b29sYmFyLkFjdGlvblRvb2xiYXJBY3Rpb25cIikpIHtcblx0XHRcdFx0b0FjdGlvbiA9IG9BY3Rpb24uZ2V0QWN0aW9uKCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAob0FjdGlvbi5pc0E8TWVudUJ1dHRvbj4oXCJzYXAubS5NZW51QnV0dG9uXCIpKSB7XG5cdFx0XHRcdGNvbnN0IG9NZW51ID0gb0FjdGlvbi5nZXRNZW51KCk7XG5cdFx0XHRcdGNvbnN0IGFJdGVtcyA9IG9NZW51LmdldEl0ZW1zKCk7XG5cdFx0XHRcdGFJdGVtcy5mb3JFYWNoKChvSXRlbSkgPT4ge1xuXHRcdFx0XHRcdGlmIChvSXRlbS5kYXRhKFwiSUJORGF0YVwiKSkge1xuXHRcdFx0XHRcdFx0YUlCTkFjdGlvbnMucHVzaChvSXRlbSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSBpZiAob0FjdGlvbi5kYXRhKFwiSUJORGF0YVwiKSkge1xuXHRcdFx0XHRhSUJOQWN0aW9ucy5wdXNoKG9BY3Rpb24pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBhSUJOQWN0aW9ucztcbn1cblxuYXN5bmMgZnVuY3Rpb24gZm5VcGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eShhSUJOQWN0aW9uczogVUk1RWxlbWVudFtdLCBvVmlldzogVmlldyk6IFByb21pc2U8dm9pZD4ge1xuXHRjb25zdCBvUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB7IHZhbHVlOiB1bmtub3duIH0+ID0ge307XG5cdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQob1ZpZXcpO1xuXHRjb25zdCBpc1N0aWNreSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCgob1ZpZXcuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKSk7XG5cdGNvbnN0IGZuR2V0TGlua3MgPSBmdW5jdGlvbiAob0RhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCk6IHZvaWQge1xuXHRcdGlmIChvRGF0YSkge1xuXHRcdFx0Y29uc3QgYUtleXMgPSBPYmplY3Qua2V5cyhvRGF0YSk7XG5cdFx0XHRhS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChzS2V5OiBzdHJpbmcpIHtcblx0XHRcdFx0aWYgKHNLZXkuaW5kZXhPZihcIl9cIikgIT09IDAgJiYgIXNLZXkuaW5jbHVkZXMoXCJvZGF0YS5jb250ZXh0XCIpKSB7XG5cdFx0XHRcdFx0b1BhcmFtc1tzS2V5XSA9IHsgdmFsdWU6IG9EYXRhW3NLZXldIH07XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRpZiAoYUlCTkFjdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRhSUJOQWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvSUJOQWN0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IHNTZW1hbnRpY09iamVjdCA9IG9JQk5BY3Rpb24uZGF0YShcIklCTkRhdGFcIikuc2VtYW50aWNPYmplY3Q7XG5cdFx0XHRcdGNvbnN0IHNBY3Rpb24gPSBvSUJOQWN0aW9uLmRhdGEoXCJJQk5EYXRhXCIpLmFjdGlvbjtcblx0XHRcdFx0b0FwcENvbXBvbmVudFxuXHRcdFx0XHRcdC5nZXRTaGVsbFNlcnZpY2VzKClcblx0XHRcdFx0XHQuZ2V0TGlua3MoW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogc1NlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRhY3Rpb246IHNBY3Rpb24sXG5cdFx0XHRcdFx0XHRcdHBhcmFtczogb1BhcmFtc1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdF0pXG5cdFx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKGFMaW5rKTogdm9pZCB7XG5cdFx0XHRcdFx0XHRpZiAob0lCTkFjdGlvbi5pc0E8Q29udHJvbD4oXCJzYXAudWkuY29yZS5Db250cm9sXCIpIHx8IG9JQk5BY3Rpb24uaXNBPE1lbnVJdGVtPihcInNhcC5tLk1lbnVJdGVtXCIpKSB7XG5cdFx0XHRcdFx0XHRcdG9JQk5BY3Rpb24uc2V0VmlzaWJsZShcblx0XHRcdFx0XHRcdFx0XHRvSUJOQWN0aW9uLmdldFZpc2libGUoKSAmJiBhTGluayAmJiBhTGluay5sZW5ndGggPT09IDEgJiYgYUxpbmtbMF0gJiYgYUxpbmtbMF0ubGVuZ3RoID09PSAxXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoaXNTdGlja3kpIHtcblx0XHRcdFx0XHRcdFx0KG9JQk5BY3Rpb24uZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCkuc2V0UHJvcGVydHkoXG5cdFx0XHRcdFx0XHRcdFx0b0lCTkFjdGlvbi5nZXRJZCgpLnNwbGl0KFwiLS1cIilbMV0sXG5cdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0c2hlbGxOYXZpZ2F0aW9uTm90QXZhaWxhYmxlOiAhKGFMaW5rICYmIGFMaW5rLmxlbmd0aCA9PT0gMSAmJiBhTGlua1swXSAmJiBhTGlua1swXS5sZW5ndGggPT09IDEpXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCByZXRyaWV2ZSB0aGUgbGlua3MgZnJvbSB0aGUgc2hlbGwgc2VydmljZVwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fTtcblx0aWYgKG9WaWV3ICYmIG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCkpIHtcblx0XHRyZXR1cm4gKG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQpXG5cdFx0XHQ/LnJlcXVlc3RPYmplY3QoKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKG9EYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXR1cm4gZm5HZXRMaW5rcyhvRGF0YSk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IHJldHJpZXZlIHRoZSBsaW5rcyBmcm9tIHRoZSBzaGVsbCBzZXJ2aWNlXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGZuR2V0TGlua3MoKTtcblx0fVxufVxuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIG1lbnUgYnV0dG9uIHZpc2liaWxpdHkgaWYgYWxsIHRoZSB1bmRlcmx5aW5nIHNlbGVjdGlvbiBidXR0b25zIGFyZSBoaWRkZW4uXG4gKiBAcGFyYW0gSUJOQWN0aW9uc1xuICovXG5mdW5jdGlvbiB1cGRhdGVNZW51QnV0dG9uVmlzaWJsaXR5KElCTkFjdGlvbnM6IFVJNUVsZW1lbnRbXSk6IHZvaWQge1xuXHRjb25zdCBtZW51QnV0dG9uV2l0aElCTkFjdGlvbjogTWVudUJ1dHRvbltdID0gW107XG5cdElCTkFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoSUJOQWN0aW9uKSB7XG5cdFx0aWYgKElCTkFjdGlvbi5pc0E8TWVudUJ1dHRvbj4oXCJzYXAubS5NZW51SXRlbVwiKSkge1xuXHRcdFx0bWVudUJ1dHRvbldpdGhJQk5BY3Rpb24ucHVzaChJQk5BY3Rpb24uZ2V0UGFyZW50KCk/LmdldFBhcmVudCgpPy5nZXRQYXJlbnQoKT8uZ2V0UGFyZW50KCk/LmdldFBhcmVudCgpIGFzIE1lbnVCdXR0b24pO1xuXHRcdH1cblx0fSk7XG5cdG1lbnVCdXR0b25XaXRoSUJOQWN0aW9uLmZvckVhY2goZnVuY3Rpb24gKG1lbnVBY3Rpb24pIHtcblx0XHRjb25zdCBtZW51SXRlbXMgPSBtZW51QWN0aW9uPy5nZXRNZW51KCkuZ2V0SXRlbXMoKTtcblx0XHRjb25zdCB2aXNpYmxlTWVudUl0ZW1zID0gbWVudUl0ZW1zLmZpbHRlcihmdW5jdGlvbiAobWVudUl0ZW0pIHtcblx0XHRcdHJldHVybiBtZW51SXRlbS5nZXRWaXNpYmxlKCk7XG5cdFx0fSk7XG5cdFx0aWYgKHZpc2libGVNZW51SXRlbXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRtZW51QWN0aW9uLnNldFZpc2libGUoZmFsc2UpO1xuXHRcdH1cblx0fSk7XG59XG5cbmZ1bmN0aW9uIGdldEFjdGlvblBhdGgoXG5cdGFjdGlvbkNvbnRleHQ6IENvbnRleHQsXG5cdGJSZXR1cm5Pbmx5UGF0aDogYm9vbGVhbixcblx0aW5BY3Rpb25OYW1lPzogc3RyaW5nLFxuXHRiQ2hlY2tTdGF0aWNWYWx1ZT86IGJvb2xlYW5cbik6XG5cdHwgc3RyaW5nXG5cdHwge1xuXHRcdFx0c0NvbnRleHRQYXRoOiBzdHJpbmc7XG5cdFx0XHRzUHJvcGVydHk6IHN0cmluZztcblx0XHRcdHNCaW5kaW5nUGFyYW1ldGVyOiBzdHJpbmc7XG5cdCAgfSB7XG5cdGNvbnN0IHNBY3Rpb25OYW1lOiBzdHJpbmcgPSAhaW5BY3Rpb25OYW1lID8gYWN0aW9uQ29udGV4dC5nZXRPYmplY3QoYWN0aW9uQ29udGV4dC5nZXRQYXRoKCkpLnRvU3RyaW5nKCkgOiBpbkFjdGlvbk5hbWU7XG5cdGxldCBzQ29udGV4dFBhdGggPSBhY3Rpb25Db250ZXh0LmdldFBhdGgoKS5zcGxpdChcIi9AXCIpWzBdO1xuXHRjb25zdCBzRW50aXR5VHlwZU5hbWUgPSAoYWN0aW9uQ29udGV4dC5nZXRPYmplY3Qoc0NvbnRleHRQYXRoKSBhcyBNZXRhTW9kZWxFbnRpdHlUeXBlKS4kVHlwZTtcblx0Y29uc3Qgc0VudGl0eU5hbWUgPSBnZXRFbnRpdHlTZXROYW1lKGFjdGlvbkNvbnRleHQuZ2V0TW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCwgc0VudGl0eVR5cGVOYW1lKTtcblx0aWYgKHNFbnRpdHlOYW1lKSB7XG5cdFx0c0NvbnRleHRQYXRoID0gYC8ke3NFbnRpdHlOYW1lfWA7XG5cdH1cblx0aWYgKGJDaGVja1N0YXRpY1ZhbHVlKSB7XG5cdFx0cmV0dXJuIGFjdGlvbkNvbnRleHQuZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aH0vJHtzQWN0aW9uTmFtZX1AT3JnLk9EYXRhLkNvcmUuVjEuT3BlcmF0aW9uQXZhaWxhYmxlYCk7XG5cdH1cblx0aWYgKGJSZXR1cm5Pbmx5UGF0aCkge1xuXHRcdHJldHVybiBgJHtzQ29udGV4dFBhdGh9LyR7c0FjdGlvbk5hbWV9YDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c0NvbnRleHRQYXRoOiBzQ29udGV4dFBhdGgsXG5cdFx0XHRzUHJvcGVydHk6IGFjdGlvbkNvbnRleHQuZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aH0vJHtzQWN0aW9uTmFtZX1AT3JnLk9EYXRhLkNvcmUuVjEuT3BlcmF0aW9uQXZhaWxhYmxlLyRQYXRoYCksXG5cdFx0XHRzQmluZGluZ1BhcmFtZXRlcjogYWN0aW9uQ29udGV4dC5nZXRPYmplY3QoYCR7c0NvbnRleHRQYXRofS8ke3NBY3Rpb25OYW1lfS9AJHVpNS5vdmVybG9hZC8wLyRQYXJhbWV0ZXIvMC8kTmFtZWApXG5cdFx0fTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRFbnRpdHlTZXROYW1lKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzRW50aXR5VHlwZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3Qgb0VudGl0eUNvbnRhaW5lciA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KFwiL1wiKTtcblx0Zm9yIChjb25zdCBrZXkgaW4gb0VudGl0eUNvbnRhaW5lcikge1xuXHRcdGlmICh0eXBlb2Ygb0VudGl0eUNvbnRhaW5lcltrZXldID09PSBcIm9iamVjdFwiICYmIG9FbnRpdHlDb250YWluZXJba2V5XS4kVHlwZSA9PT0gc0VudGl0eVR5cGUpIHtcblx0XHRcdHJldHVybiBrZXk7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVEaXNwbGF5TW9kZShcblx0b1Byb3BlcnR5QW5ub3RhdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRvQ29sbGVjdGlvbkFubm90YXRpb25zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IFwiRGVzY3JpcHRpb25cIiB8IFwiVmFsdWVEZXNjcmlwdGlvblwiIHwgXCJWYWx1ZVwiIHwgXCJEZXNjcmlwdGlvblZhbHVlXCIge1xuXHRjb25zdCBvVGV4dEFubm90YXRpb24gPSBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dFwiXSxcblx0XHRvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiA9IChvVGV4dEFubm90YXRpb24gJiZcblx0XHRcdCgob1Byb3BlcnR5QW5ub3RhdGlvbnMgJiZcblx0XHRcdFx0b1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50XCJdKSB8fFxuXHRcdFx0XHQob0NvbGxlY3Rpb25Bbm5vdGF0aW9ucyAmJlxuXHRcdFx0XHRcdG9Db2xsZWN0aW9uQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50XCJdKSkpIGFzIE1ldGFNb2RlbEVudW08VGV4dEFycmFuZ2VtZW50PjtcblxuXHRpZiAob1RleHRBcnJhbmdlbWVudEFubm90YXRpb24pIHtcblx0XHRpZiAob1RleHRBcnJhbmdlbWVudEFubm90YXRpb24uJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50VHlwZS9UZXh0T25seVwiKSB7XG5cdFx0XHRyZXR1cm4gXCJEZXNjcmlwdGlvblwiO1xuXHRcdH0gZWxzZSBpZiAob1RleHRBcnJhbmdlbWVudEFubm90YXRpb24uJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50VHlwZS9UZXh0TGFzdFwiKSB7XG5cdFx0XHRyZXR1cm4gXCJWYWx1ZURlc2NyaXB0aW9uXCI7XG5cdFx0fSBlbHNlIGlmIChvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbi4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRTZXBhcmF0ZVwiKSB7XG5cdFx0XHRyZXR1cm4gXCJWYWx1ZVwiO1xuXHRcdH1cblx0XHQvL0RlZmF1bHQgc2hvdWxkIGJlIFRleHRGaXJzdCBpZiB0aGVyZSBpcyBhIFRleHQgYW5ub3RhdGlvbiBhbmQgbmVpdGhlciBUZXh0T25seSBub3IgVGV4dExhc3QgYXJlIHNldFxuXHRcdHJldHVybiBcIkRlc2NyaXB0aW9uVmFsdWVcIjtcblx0fVxuXHRyZXR1cm4gb1RleHRBbm5vdGF0aW9uID8gXCJEZXNjcmlwdGlvblZhbHVlXCIgOiBcIlZhbHVlXCI7XG59XG5cbmZ1bmN0aW9uIF9nZXRFbnRpdHlUeXBlKG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRyZXR1cm4gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7b01ldGFNb2RlbC5nZXRNZXRhUGF0aChvQ29udGV4dC5nZXRQYXRoKCkpfS8kVHlwZWApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBfcmVxdWVzdE9iamVjdChzQWN0aW9uOiBzdHJpbmcsIG9TZWxlY3RlZENvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBzUHJvcGVydHk6IHN0cmluZyk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRsZXQgb0NvbnRleHQgPSBvU2VsZWN0ZWRDb250ZXh0O1xuXHRjb25zdCBuQnJhY2tldEluZGV4ID0gc0FjdGlvbi5pbmRleE9mKFwiKFwiKTtcblxuXHRpZiAobkJyYWNrZXRJbmRleCA+IC0xKSB7XG5cdFx0Y29uc3Qgc1RhcmdldFR5cGUgPSBzQWN0aW9uLnNsaWNlKG5CcmFja2V0SW5kZXggKyAxLCAtMSk7XG5cdFx0bGV0IHNDdXJyZW50VHlwZSA9IF9nZXRFbnRpdHlUeXBlKG9Db250ZXh0KTtcblxuXHRcdHdoaWxlIChzQ3VycmVudFR5cGUgIT09IHNUYXJnZXRUeXBlKSB7XG5cdFx0XHQvLyBGaW5kIHBhcmVudCBiaW5kaW5nIGNvbnRleHQgYW5kIHJldHJpZXZlIGVudGl0eSB0eXBlXG5cdFx0XHRvQ29udGV4dCA9IG9Db250ZXh0LmdldEJpbmRpbmcoKS5nZXRDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQ7XG5cdFx0XHRpZiAob0NvbnRleHQpIHtcblx0XHRcdFx0c0N1cnJlbnRUeXBlID0gX2dldEVudGl0eVR5cGUob0NvbnRleHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0TG9nLndhcm5pbmcoXCJDYW5ub3QgZGV0ZXJtaW5lIHRhcmdldCB0eXBlIHRvIHJlcXVlc3QgcHJvcGVydHkgdmFsdWUgZm9yIGJvdW5kIGFjdGlvbiBpbnZvY2F0aW9uXCIpO1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG9Db250ZXh0LnJlcXVlc3RPYmplY3Qoc1Byb3BlcnR5KTtcbn1cblxuZXhwb3J0IHR5cGUgX1JlcXVlc3RlZFByb3BlcnR5ID0ge1xuXHR2UHJvcGVydHlWYWx1ZTogdW5rbm93bjtcblx0b1NlbGVjdGVkQ29udGV4dDogQ29udGV4dDtcblx0c0FjdGlvbjogc3RyaW5nO1xuXHRzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoOiBzdHJpbmc7XG59O1xuYXN5bmMgZnVuY3Rpb24gcmVxdWVzdFByb3BlcnR5KFxuXHRvU2VsZWN0ZWRDb250ZXh0OiBPRGF0YVY0Q29udGV4dCxcblx0c0FjdGlvbjogc3RyaW5nLFxuXHRzUHJvcGVydHk6IHN0cmluZyxcblx0c0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aDogc3RyaW5nXG4pOiBQcm9taXNlPF9SZXF1ZXN0ZWRQcm9wZXJ0eT4ge1xuXHRjb25zdCBvUHJvbWlzZSA9XG5cdFx0c1Byb3BlcnR5ICYmIHNQcm9wZXJ0eS5pbmRleE9mKFwiL1wiKSA9PT0gMFxuXHRcdFx0PyByZXF1ZXN0U2luZ2xldG9uUHJvcGVydHkoc1Byb3BlcnR5LCBvU2VsZWN0ZWRDb250ZXh0LmdldE1vZGVsKCkpXG5cdFx0XHQ6IF9yZXF1ZXN0T2JqZWN0KHNBY3Rpb24sIG9TZWxlY3RlZENvbnRleHQsIHNQcm9wZXJ0eSk7XG5cblx0cmV0dXJuIG9Qcm9taXNlLnRoZW4oZnVuY3Rpb24gKHZQcm9wZXJ0eVZhbHVlOiB1bmtub3duKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHZQcm9wZXJ0eVZhbHVlOiB2UHJvcGVydHlWYWx1ZSxcblx0XHRcdG9TZWxlY3RlZENvbnRleHQ6IG9TZWxlY3RlZENvbnRleHQsXG5cdFx0XHRzQWN0aW9uOiBzQWN0aW9uLFxuXHRcdFx0c0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aDogc0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aFxuXHRcdH07XG5cdH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzZXRDb250ZXh0c0Jhc2VkT25PcGVyYXRpb25BdmFpbGFibGUoXG5cdG9JbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdGFSZXF1ZXN0UHJvbWlzZXM6IFByb21pc2U8X1JlcXVlc3RlZFByb3BlcnR5PltdLFxuXHRmb3JDb250ZXh0TWVudSA9IGZhbHNlXG4pOiBQcm9taXNlPHZvaWQ+IHtcblx0cmV0dXJuIFByb21pc2UuYWxsKGFSZXF1ZXN0UHJvbWlzZXMpXG5cdFx0LnRoZW4oZnVuY3Rpb24gKGFSZXN1bHRzKTogdm9pZCB7XG5cdFx0XHRpZiAoYVJlc3VsdHMubGVuZ3RoKSB7XG5cdFx0XHRcdGNvbnN0IGFBcHBsaWNhYmxlQ29udGV4dHM6IHVua25vd25bXSA9IFtdLFxuXHRcdFx0XHRcdGFOb3RBcHBsaWNhYmxlQ29udGV4dHM6IHVua25vd25bXSA9IFtdO1xuXHRcdFx0XHRhUmVzdWx0cy5mb3JFYWNoKGZ1bmN0aW9uIChhUmVzdWx0KSB7XG5cdFx0XHRcdFx0aWYgKGFSZXN1bHQpIHtcblx0XHRcdFx0XHRcdGlmIChhUmVzdWx0LnZQcm9wZXJ0eVZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRNb2RlbCgpLnNldFByb3BlcnR5KGFSZXN1bHQuc0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdGFBcHBsaWNhYmxlQ29udGV4dHMucHVzaChhUmVzdWx0Lm9TZWxlY3RlZENvbnRleHQpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0YU5vdEFwcGxpY2FibGVDb250ZXh0cy5wdXNoKGFSZXN1bHQub1NlbGVjdGVkQ29udGV4dCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0c2V0RHluYW1pY0FjdGlvbkNvbnRleHRzKFxuXHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdFx0XHRhUmVzdWx0c1swXS5zQWN0aW9uLFxuXHRcdFx0XHRcdGFBcHBsaWNhYmxlQ29udGV4dHMsXG5cdFx0XHRcdFx0YU5vdEFwcGxpY2FibGVDb250ZXh0cyxcblx0XHRcdFx0XHRmb3JDb250ZXh0TWVudVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH0pXG5cdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdExvZy50cmFjZShcIkNhbm5vdCByZXRyaWV2ZSBwcm9wZXJ0eSB2YWx1ZSBmcm9tIHBhdGhcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0fSk7XG59XG5cbi8qKlxuICogQHBhcmFtIGludGVybmFsTW9kZWxDb250ZXh0XG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYXBwbGljYWJsZVxuICogQHBhcmFtIG5vdEFwcGxpY2FibGVcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuICovXG5mdW5jdGlvbiBzZXREeW5hbWljQWN0aW9uQ29udGV4dHMoXG5cdGludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0YWN0aW9uOiBzdHJpbmcsXG5cdGFwcGxpY2FibGU6IHVua25vd25bXSxcblx0bm90QXBwbGljYWJsZTogdW5rbm93bltdLFxuXHRmb3JDb250ZXh0TWVudSA9IGZhbHNlXG4pOiB2b2lkIHtcblx0Y29uc3QgZHluYW1pY0FjdGlvblBhdGhQcmVmaXggPSBgJHtpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQYXRoKCl9L2R5bmFtaWNBY3Rpb25zLyR7YWN0aW9ufWAsXG5cdFx0aW50ZXJuYWxNb2RlbCA9IGludGVybmFsTW9kZWxDb250ZXh0LmdldE1vZGVsKCksXG5cdFx0YXBwbGljYWJsZVByb3BlcnR5ID0gIWZvckNvbnRleHRNZW51ID8gXCJhQXBwbGljYWJsZVwiIDogXCJhQXBwbGljYWJsZUZvckNvbnRleHRNZW51XCIsXG5cdFx0bm90QXBwbGljYWJsZVByb3BlcnR5ID0gIWZvckNvbnRleHRNZW51ID8gXCJhTm90QXBwbGljYWJsZVwiIDogXCJhTm90QXBwbGljYWJsZUZvckNvbnRleHRNZW51XCI7XG5cdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoYCR7ZHluYW1pY0FjdGlvblBhdGhQcmVmaXh9LyR7YXBwbGljYWJsZVByb3BlcnR5fWAsIGFwcGxpY2FibGUpO1xuXHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KGAke2R5bmFtaWNBY3Rpb25QYXRoUHJlZml4fS8ke25vdEFwcGxpY2FibGVQcm9wZXJ0eX1gLCBub3RBcHBsaWNhYmxlKTtcbn1cblxuZnVuY3Rpb24gZ2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbihhRXhwcmVzc2lvbnM6IHN0cmluZ1tdKTogc3RyaW5nIHtcblx0Y29uc3QgYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5ID0gQ29tbW9uVXRpbHMuQWxsb3dlZEV4cHJlc3Npb25zUHJpbztcblxuXHRhRXhwcmVzc2lvbnMuc29ydChmdW5jdGlvbiAoYTogc3RyaW5nLCBiOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5LmluZGV4T2YoYSkgLSBhQWxsb3dlZEV4cHJlc3Npb25zUHJpb3JpdHkuaW5kZXhPZihiKTtcblx0fSk7XG5cblx0cmV0dXJuIGFFeHByZXNzaW9uc1swXTtcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gcmV0dXJuIGFsbG93ZWQgb3BlcmF0b3JzIGZvciB0eXBlIEd1aWQuXG4gKiBAcmV0dXJucyBBbGxvd2VkIG9wZXJhdG9ycyBmb3IgdHlwZSBHdWlkXG4gKi9cbmZ1bmN0aW9uIGdldE9wZXJhdG9yc0Zvckd1aWRQcm9wZXJ0eSgpOiBzdHJpbmcge1xuXHRjb25zdCBhbGxvd2VkT3BlcmF0b3JzRm9yR3VpZCA9IFtcIkVRXCIsIFwiTkVcIl07XG5cdHJldHVybiBhbGxvd2VkT3BlcmF0b3JzRm9yR3VpZC50b1N0cmluZygpO1xufVxuXG50eXBlIFBhcmFtZXRlckluZm8gPSB7XG5cdGNvbnRleHRQYXRoPzogc3RyaW5nO1xuXHRwYXJhbWV0ZXJQcm9wZXJ0aWVzPzogUmVjb3JkPHN0cmluZywgTWV0YU1vZGVsUHJvcGVydHk+O1xufTtcbmZ1bmN0aW9uIGdldFBhcmFtZXRlckluZm8obWV0YU1vZGVsQ29udGV4dDogT0RhdGFNZXRhTW9kZWwsIHNDb250ZXh0UGF0aDogc3RyaW5nKTogUGFyYW1ldGVySW5mbyB7XG5cdGNvbnN0IHNQYXJhbWV0ZXJDb250ZXh0UGF0aCA9IHNDb250ZXh0UGF0aC5zdWJzdHJpbmcoMCwgc0NvbnRleHRQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSk7XG5cdGNvbnN0IGJSZXN1bHRDb250ZXh0ID0gbWV0YU1vZGVsQ29udGV4dC5nZXRPYmplY3QoYCR7c1BhcmFtZXRlckNvbnRleHRQYXRofS9AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlJlc3VsdENvbnRleHRgKTtcblx0Y29uc3Qgb1BhcmFtZXRlckluZm86IFBhcmFtZXRlckluZm8gPSB7fTtcblx0aWYgKGJSZXN1bHRDb250ZXh0ICYmIHNQYXJhbWV0ZXJDb250ZXh0UGF0aCAhPT0gc0NvbnRleHRQYXRoKSB7XG5cdFx0b1BhcmFtZXRlckluZm8uY29udGV4dFBhdGggPSBzUGFyYW1ldGVyQ29udGV4dFBhdGg7XG5cdFx0b1BhcmFtZXRlckluZm8ucGFyYW1ldGVyUHJvcGVydGllcyA9IENvbW1vblV0aWxzLmdldENvbnRleHRQYXRoUHJvcGVydGllcyhtZXRhTW9kZWxDb250ZXh0LCBzUGFyYW1ldGVyQ29udGV4dFBhdGgpIGFzIFJlY29yZDxcblx0XHRcdHN0cmluZyxcblx0XHRcdE1ldGFNb2RlbFByb3BlcnR5XG5cdFx0Pjtcblx0fVxuXHRyZXR1cm4gb1BhcmFtZXRlckluZm87XG59XG5cbnR5cGUgVmlld0RhdGEgPSB7XG5cdGNvbnRyb2xDb25maWd1cmF0aW9uPzogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xufTtcblxuZnVuY3Rpb24gYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQob1NlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQsIG1QYWdlQ29udGV4dDogdW5rbm93bltdLCBvVmlldzogVmlldyk6IFNlbGVjdGlvblZhcmlhbnQge1xuXHRjb25zdCBvQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KG9WaWV3KTtcblx0Y29uc3Qgb05hdmlnYXRpb25TZXJ2aWNlID0gb0FwcENvbXBvbmVudC5nZXROYXZpZ2F0aW9uU2VydmljZSgpO1xuXHRyZXR1cm4gb05hdmlnYXRpb25TZXJ2aWNlLm1peEF0dHJpYnV0ZXNBbmRTZWxlY3Rpb25WYXJpYW50KG1QYWdlQ29udGV4dCwgb1NlbGVjdGlvblZhcmlhbnQudG9KU09OU3RyaW5nKCkpO1xufVxuXG5mdW5jdGlvbiBpc1N0aWNreUVkaXRNb2RlKG9Db250cm9sOiBDb250cm9sKTogYm9vbGVhbiB7XG5cdGNvbnN0IGJJc1N0aWNreU1vZGUgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQoKG9Db250cm9sLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRjb25zdCBiVUlFZGl0YWJsZSA9IENvbW1vblV0aWxzLmdldElzRWRpdGFibGUob0NvbnRyb2wpO1xuXHRyZXR1cm4gYklzU3RpY2t5TW9kZSAmJiBiVUlFZGl0YWJsZTtcbn1cblxuZXhwb3J0IHR5cGUgVXNlckRlZmF1bHRQYXJhbWV0ZXIgPSBFZG1BY3Rpb25QYXJhbWV0ZXIgfCBDb250ZXh0O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgdXNlciBkZWZhdWx0cyBmcm9tIHRoZSBzdGFydHVwIGFwcCBzdGF0ZSAoaWYgYXZhaWxhYmxlKSBvciB0aGUgc3RhcnR1cCBwYXJhbWV0ZXIgYW5kIHNldHMgdGhlbSB0byBhIG1vZGVsLlxuICogQHBhcmFtIGFwcENvbXBvbmVudFxuICogQHBhcmFtIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBtb2RlbFxuICogQHBhcmFtIGlzQWN0aW9uXG4gKiBAcGFyYW0gaXNDcmVhdGVcbiAqIEBwYXJhbSBhY3Rpb25EZWZhdWx0VmFsdWVzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNldFVzZXJEZWZhdWx0cyhcblx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdHBhcmFtZXRlcnM6IFVzZXJEZWZhdWx0UGFyYW1ldGVyW10sXG5cdG1vZGVsOiBKU09OTW9kZWwgfCBPRGF0YVY0Q29udGV4dCxcblx0aXNBY3Rpb246IGJvb2xlYW4sXG5cdGlzQ3JlYXRlPzogYm9vbGVhbixcblx0YWN0aW9uRGVmYXVsdFZhbHVlcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4pOiBQcm9taXNlPHZvaWQ+IHtcblx0Y29uc3QgQmFzZVR5cGUgPSAoYXdhaXQgaW1wb3J0KFwic2FwL3VpL21kYy9lbnVtcy9CYXNlVHlwZVwiKSkuZGVmYXVsdDtcblx0Y29uc3QgVHlwZU1hcCA9IChhd2FpdCBpbXBvcnQoXCJzYXAvdWkvbWRjL29kYXRhL3Y0L1R5cGVNYXBcIikpLmRlZmF1bHQ7XG5cblx0Y29uc3QgY29tcG9uZW50RGF0YSA9IGFwcENvbXBvbmVudC5nZXRDb21wb25lbnREYXRhKCksXG5cdFx0c3RhcnR1cFBhcmFtZXRlcnMgPSAoY29tcG9uZW50RGF0YSAmJiBjb21wb25lbnREYXRhLnN0YXJ0dXBQYXJhbWV0ZXJzKSB8fCB7fSxcblx0XHRzaGVsbFNlcnZpY2VzID0gYXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKTtcblx0Y29uc3Qgc3RhcnR1cEFwcFN0YXRlID0gYXdhaXQgc2hlbGxTZXJ2aWNlcy5nZXRTdGFydHVwQXBwU3RhdGUoYXBwQ29tcG9uZW50KTtcblx0Y29uc3Qgc3RhcnR1cEFwcFN0YXRlRGF0YSA9IHN0YXJ0dXBBcHBTdGF0ZT8uZ2V0RGF0YSgpIHx8IHt9LFxuXHRcdGV4dGVuZGVkUGFyYW1ldGVycyA9IChzdGFydHVwQXBwU3RhdGVEYXRhLnNlbGVjdGlvblZhcmlhbnQgJiYgc3RhcnR1cEFwcFN0YXRlRGF0YS5zZWxlY3Rpb25WYXJpYW50LlNlbGVjdE9wdGlvbnMpIHx8IFtdO1xuXHRwYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24gKG9QYXJhbWV0ZXIpIHtcblx0XHRjb25zdCBzUHJvcGVydHlOYW1lID0gaXNBY3Rpb25cblx0XHRcdD8gYC8keyhvUGFyYW1ldGVyIGFzIHsgbmFtZTogc3RyaW5nIH0pLm5hbWV9YFxuXHRcdFx0OiAob1BhcmFtZXRlciBhcyBDb250ZXh0KS5nZXRQYXRoPy4oKS5zbGljZSgob1BhcmFtZXRlciBhcyBDb250ZXh0KS5nZXRQYXRoKCkubGFzdEluZGV4T2YoXCIvXCIpICsgMSk7XG5cdFx0Y29uc3Qgc1BhcmFtZXRlck5hbWUgPSBpc0FjdGlvbiA/IHNQcm9wZXJ0eU5hbWUuc2xpY2UoMSkgOiBzUHJvcGVydHlOYW1lO1xuXHRcdGlmIChhY3Rpb25EZWZhdWx0VmFsdWVzICYmIGlzQ3JlYXRlKSB7XG5cdFx0XHRpZiAoYWN0aW9uRGVmYXVsdFZhbHVlc1tzUGFyYW1ldGVyTmFtZV0pIHtcblx0XHRcdFx0bW9kZWwuc2V0UHJvcGVydHkoc1Byb3BlcnR5TmFtZSwgYWN0aW9uRGVmYXVsdFZhbHVlc1tzUGFyYW1ldGVyTmFtZV0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoc3RhcnR1cFBhcmFtZXRlcnNbc1BhcmFtZXRlck5hbWVdKSB7XG5cdFx0XHRjb25zdCBwYXJhbWV0ZXJ0VHlwZSA9IChcblx0XHRcdFx0b1BhcmFtZXRlciBhcyB7XG5cdFx0XHRcdFx0bmFtZTogc3RyaW5nO1xuXHRcdFx0XHRcdHR5cGU/OiBzdHJpbmc7XG5cdFx0XHRcdH1cblx0XHRcdCkudHlwZVxuXHRcdFx0XHQ/IFR5cGVNYXAuZ2V0QmFzZVR5cGUoXG5cdFx0XHRcdFx0XHQoXG5cdFx0XHRcdFx0XHRcdG9QYXJhbWV0ZXIgYXMge1xuXHRcdFx0XHRcdFx0XHRcdG5hbWU6IHN0cmluZztcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBzdHJpbmc7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdCkudHlwZVxuXHRcdFx0XHQgIClcblx0XHRcdFx0OiBCYXNlVHlwZS5TdHJpbmc7XG5cdFx0XHRjb25zdCB0eXBlSW5zdGFuY2UgPSBUeXBlTWFwLmdldERhdGFUeXBlSW5zdGFuY2UocGFyYW1ldGVydFR5cGUpO1xuXHRcdFx0bW9kZWwuc2V0UHJvcGVydHkoc1Byb3BlcnR5TmFtZSwgdHlwZUluc3RhbmNlLnBhcnNlVmFsdWUoc3RhcnR1cFBhcmFtZXRlcnNbc1BhcmFtZXRlck5hbWVdWzBdLCBcInN0cmluZ1wiKSk7XG5cdFx0fSBlbHNlIGlmIChleHRlbmRlZFBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0Zm9yIChjb25zdCBvRXh0ZW5kZWRQYXJhbWV0ZXIgb2YgZXh0ZW5kZWRQYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdGlmIChvRXh0ZW5kZWRQYXJhbWV0ZXIuUHJvcGVydHlOYW1lID09PSBzUGFyYW1ldGVyTmFtZSkge1xuXHRcdFx0XHRcdGNvbnN0IG9SYW5nZSA9IG9FeHRlbmRlZFBhcmFtZXRlci5SYW5nZXMubGVuZ3RoXG5cdFx0XHRcdFx0XHQ/IG9FeHRlbmRlZFBhcmFtZXRlci5SYW5nZXNbb0V4dGVuZGVkUGFyYW1ldGVyLlJhbmdlcy5sZW5ndGggLSAxXVxuXHRcdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0aWYgKG9SYW5nZSAmJiBvUmFuZ2UuU2lnbiA9PT0gXCJJXCIgJiYgb1JhbmdlLk9wdGlvbiA9PT0gXCJFUVwiKSB7XG5cdFx0XHRcdFx0XHRtb2RlbC5zZXRQcm9wZXJ0eShzUHJvcGVydHlOYW1lLCBvUmFuZ2UuTG93KTsgLy8gaGlnaCBpcyBpZ25vcmVkIHdoZW4gT3B0aW9uPUVRXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn1cblxuZXhwb3J0IHR5cGUgSW5ib3VuZFBhcmFtZXRlciA9IHtcblx0dXNlRm9yQ3JlYXRlOiBib29sZWFuO1xufTtcbmZ1bmN0aW9uIGdldEFkZGl0aW9uYWxQYXJhbXNGb3JDcmVhdGUoXG5cdG9TdGFydHVwUGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bltdPixcblx0b0luYm91bmRQYXJhbWV0ZXJzPzogUmVjb3JkPHN0cmluZywgSW5ib3VuZFBhcmFtZXRlcj5cbik6IHVua25vd24ge1xuXHRjb25zdCBvSW5ib3VuZHMgPSBvSW5ib3VuZFBhcmFtZXRlcnMsXG5cdFx0YUNyZWF0ZVBhcmFtZXRlcnMgPVxuXHRcdFx0b0luYm91bmRzICE9PSB1bmRlZmluZWRcblx0XHRcdFx0PyBPYmplY3Qua2V5cyhvSW5ib3VuZHMpLmZpbHRlcihmdW5jdGlvbiAoc1BhcmFtZXRlcjogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb0luYm91bmRzW3NQYXJhbWV0ZXJdLnVzZUZvckNyZWF0ZTtcblx0XHRcdFx0ICB9KVxuXHRcdFx0XHQ6IFtdO1xuXHRsZXQgb1JldDtcblx0Zm9yIChjb25zdCBlbGVtZW50IG9mIGFDcmVhdGVQYXJhbWV0ZXJzKSB7XG5cdFx0Y29uc3Qgc0NyZWF0ZVBhcmFtZXRlciA9IGVsZW1lbnQ7XG5cdFx0Y29uc3QgYVZhbHVlcyA9IG9TdGFydHVwUGFyYW1ldGVycyAmJiBvU3RhcnR1cFBhcmFtZXRlcnNbc0NyZWF0ZVBhcmFtZXRlcl07XG5cdFx0aWYgKGFWYWx1ZXMgJiYgYVZhbHVlcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdG9SZXQgPSBvUmV0IHx8IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cdFx0XHRvUmV0W3NDcmVhdGVQYXJhbWV0ZXJdID0gYVZhbHVlc1swXTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG9SZXQ7XG59XG50eXBlIE91dGJvdW5kUGFyYW1ldGVyID0ge1xuXHRwYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBPdXRib3VuZFBhcmFtZXRlclZhbHVlPjtcblx0c2VtYW50aWNPYmplY3Q/OiBzdHJpbmc7XG5cdGFjdGlvbj86IHN0cmluZztcbn07XG50eXBlIE91dGJvdW5kUGFyYW1ldGVyVmFsdWUgPSB7XG5cdHZhbHVlPzoge1xuXHRcdHZhbHVlPzogc3RyaW5nO1xuXHRcdGZvcm1hdD86IHN0cmluZztcblx0fTtcbn07XG5mdW5jdGlvbiBnZXRTZW1hbnRpY09iamVjdE1hcHBpbmcob091dGJvdW5kOiBPdXRib3VuZFBhcmFtZXRlcik6IE1ldGFNb2RlbFR5cGU8U2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZVR5cGVzPltdIHtcblx0Y29uc3QgYVNlbWFudGljT2JqZWN0TWFwcGluZzogTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlVHlwZXM+W10gPSBbXTtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9zdHJpY3QtYm9vbGVhbi1leHByZXNzaW9uc1xuXHRpZiAob091dGJvdW5kLnBhcmFtZXRlcnMpIHtcblx0XHRjb25zdCBhUGFyYW1ldGVycyA9IE9iamVjdC5rZXlzKG9PdXRib3VuZC5wYXJhbWV0ZXJzKSB8fCBbXTtcblx0XHRpZiAoYVBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0YVBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbiAoc1BhcmFtOiBzdHJpbmcpIHtcblx0XHRcdFx0Y29uc3Qgb01hcHBpbmcgPSBvT3V0Ym91bmQucGFyYW1ldGVyc1tzUGFyYW1dO1xuXHRcdFx0XHRpZiAob01hcHBpbmcudmFsdWUgJiYgb01hcHBpbmcudmFsdWUudmFsdWUgJiYgb01hcHBpbmcudmFsdWUuZm9ybWF0ID09PSBcImJpbmRpbmdcIikge1xuXHRcdFx0XHRcdC8vIHVzaW5nIHRoZSBmb3JtYXQgb2YgVUkuTWFwcGluZ1xuXHRcdFx0XHRcdGNvbnN0IG9TZW1hbnRpY01hcHBpbmcgPSB7XG5cdFx0XHRcdFx0XHRMb2NhbFByb3BlcnR5OiB7XG5cdFx0XHRcdFx0XHRcdCRQcm9wZXJ0eVBhdGg6IG9NYXBwaW5nLnZhbHVlLnZhbHVlXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0U2VtYW50aWNPYmplY3RQcm9wZXJ0eTogc1BhcmFtXG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdGlmIChhU2VtYW50aWNPYmplY3RNYXBwaW5nLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdC8vIFRvIGNoZWNrIGlmIHRoZSBzZW1hbnRpY09iamVjdCBNYXBwaW5nIGlzIGRvbmUgZm9yIHRoZSBzYW1lIGxvY2FsIHByb3BlcnR5IG1vcmUgdGhhdCBvbmNlIHRoZW4gZmlyc3Qgb25lIHdpbGwgYmUgY29uc2lkZXJlZFxuXHRcdFx0XHRcdFx0Zm9yIChjb25zdCBlbGVtZW50IG9mIGFTZW1hbnRpY09iamVjdE1hcHBpbmcpIHtcblx0XHRcdFx0XHRcdFx0aWYgKGVsZW1lbnQuTG9jYWxQcm9wZXJ0eT8uJFByb3BlcnR5UGF0aCAhPT0gb1NlbWFudGljTWFwcGluZy5Mb2NhbFByb3BlcnR5LiRQcm9wZXJ0eVBhdGgpIHtcblx0XHRcdFx0XHRcdFx0XHRhU2VtYW50aWNPYmplY3RNYXBwaW5nLnB1c2gob1NlbWFudGljTWFwcGluZyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0YVNlbWFudGljT2JqZWN0TWFwcGluZy5wdXNoKG9TZW1hbnRpY01hcHBpbmcpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBhU2VtYW50aWNPYmplY3RNYXBwaW5nO1xufVxuXG5mdW5jdGlvbiBnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24oXG5cdG9WaWV3RGF0YTogVmlld0RhdGEsXG5cdG9Dcm9zc05hdjogUmVjb3JkPHN0cmluZywgT3V0Ym91bmRQYXJhbWV0ZXI+XG4pOiBSZWNvcmQ8XG5cdHN0cmluZyxcblx0e1xuXHRcdHNlbWFudGljT2JqZWN0OiBzdHJpbmc7XG5cdFx0YWN0aW9uOiBzdHJpbmc7XG5cdFx0c2VtYW50aWNPYmplY3RNYXBwaW5nOiBNZXRhTW9kZWxUeXBlPFNlbWFudGljT2JqZWN0TWFwcGluZ1R5cGVUeXBlcz5bXTtcblx0fVxuPiB7XG5cdGNvbnN0IG9IZWFkZXJGYWNldEl0ZW1zOiBSZWNvcmQ8XG5cdFx0c3RyaW5nLFxuXHRcdHtcblx0XHRcdHNlbWFudGljT2JqZWN0OiBzdHJpbmc7XG5cdFx0XHRhY3Rpb246IHN0cmluZztcblx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZzogTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlVHlwZXM+W107XG5cdFx0fVxuXHQ+ID0ge307XG5cdGxldCBzSWQ7XG5cdGNvbnN0IG9Db250cm9sQ29uZmlnID0gb1ZpZXdEYXRhLmNvbnRyb2xDb25maWd1cmF0aW9uIGFzIFJlY29yZDxcblx0XHRzdHJpbmcsXG5cdFx0e1xuXHRcdFx0bmF2aWdhdGlvbj86IHtcblx0XHRcdFx0dGFyZ2V0T3V0Ym91bmQ/OiB7XG5cdFx0XHRcdFx0b3V0Ym91bmQ6IHN0cmluZztcblx0XHRcdFx0fTtcblx0XHRcdH07XG5cdFx0fVxuXHQ+O1xuXHRmb3IgKGNvbnN0IGNvbmZpZyBpbiBvQ29udHJvbENvbmZpZykge1xuXHRcdGlmIChjb25maWcuaW5jbHVkZXMoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YVBvaW50XCIpIHx8IGNvbmZpZy5pbmNsdWRlcyhcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5DaGFydFwiKSkge1xuXHRcdFx0Y29uc3Qgc091dGJvdW5kID0gb0NvbnRyb2xDb25maWdbY29uZmlnXS5uYXZpZ2F0aW9uPy50YXJnZXRPdXRib3VuZD8ub3V0Ym91bmQ7XG5cdFx0XHRpZiAoc091dGJvdW5kICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Y29uc3Qgb091dGJvdW5kID0gb0Nyb3NzTmF2W3NPdXRib3VuZF07XG5cdFx0XHRcdGlmIChvT3V0Ym91bmQuc2VtYW50aWNPYmplY3QgJiYgb091dGJvdW5kLmFjdGlvbikge1xuXHRcdFx0XHRcdGlmIChjb25maWcuaW5jbHVkZXMoXCJDaGFydFwiKSkge1xuXHRcdFx0XHRcdFx0c0lkID0gZ2VuZXJhdGUoW1wiZmVcIiwgXCJNaWNyb0NoYXJ0TGlua1wiLCBjb25maWddKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c0lkID0gZ2VuZXJhdGUoW1wiZmVcIiwgXCJIZWFkZXJEUExpbmtcIiwgY29uZmlnXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBDb21tb25VdGlscy5nZXRTZW1hbnRpY09iamVjdE1hcHBpbmcob091dGJvdW5kKTtcblx0XHRcdFx0XHRvSGVhZGVyRmFjZXRJdGVtc1tzSWRdID0ge1xuXHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IG9PdXRib3VuZC5zZW1hbnRpY09iamVjdCxcblx0XHRcdFx0XHRcdGFjdGlvbjogb091dGJvdW5kLmFjdGlvbixcblx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZzogYVNlbWFudGljT2JqZWN0TWFwcGluZ1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGBDcm9zcyBuYXZpZ2F0aW9uIG91dGJvdW5kIGlzIGNvbmZpZ3VyZWQgd2l0aG91dCBzZW1hbnRpYyBvYmplY3QgYW5kIGFjdGlvbiBmb3IgJHtzT3V0Ym91bmR9YCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIG9IZWFkZXJGYWNldEl0ZW1zO1xufVxuXG5mdW5jdGlvbiBzZXRTZW1hbnRpY09iamVjdE1hcHBpbmdzKG9TZWxlY3Rpb25WYXJpYW50OiBTZWxlY3Rpb25WYXJpYW50LCB2TWFwcGluZ3M6IHVua25vd24pOiBTZWxlY3Rpb25WYXJpYW50IHtcblx0Y29uc3Qgb01hcHBpbmdzID0gdHlwZW9mIHZNYXBwaW5ncyA9PT0gXCJzdHJpbmdcIiA/IEpTT04ucGFyc2Uodk1hcHBpbmdzKSA6IHZNYXBwaW5ncztcblx0Zm9yIChjb25zdCBlbGVtZW50IG9mIG9NYXBwaW5ncykge1xuXHRcdGNvbnN0IHNMb2NhbFByb3BlcnR5ID1cblx0XHRcdChlbGVtZW50W1wiTG9jYWxQcm9wZXJ0eVwiXSAmJiBlbGVtZW50W1wiTG9jYWxQcm9wZXJ0eVwiXVtcIiRQcm9wZXJ0eVBhdGhcIl0pIHx8XG5cdFx0XHQoZWxlbWVudFtcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTG9jYWxQcm9wZXJ0eVwiXSAmJiBlbGVtZW50W1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Mb2NhbFByb3BlcnR5XCJdW1wiJFBhdGhcIl0pO1xuXHRcdGNvbnN0IHNTZW1hbnRpY09iamVjdFByb3BlcnR5ID1cblx0XHRcdGVsZW1lbnRbXCJTZW1hbnRpY09iamVjdFByb3BlcnR5XCJdIHx8IGVsZW1lbnRbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljT2JqZWN0UHJvcGVydHlcIl07XG5cdFx0Y29uc3Qgb1NlbGVjdE9wdGlvbiA9IG9TZWxlY3Rpb25WYXJpYW50LmdldFNlbGVjdE9wdGlvbihzTG9jYWxQcm9wZXJ0eSk7XG5cdFx0aWYgKG9TZWxlY3RPcHRpb24pIHtcblx0XHRcdC8vQ3JlYXRlIGEgbmV3IFNlbGVjdE9wdGlvbiB3aXRoIHNTZW1hbnRpY09iamVjdFByb3BlcnR5IGFzIHRoZSBwcm9wZXJ0eSBOYW1lIGFuZCByZW1vdmUgdGhlIG9sZGVyIG9uZVxuXHRcdFx0b1NlbGVjdGlvblZhcmlhbnQucmVtb3ZlU2VsZWN0T3B0aW9uKHNMb2NhbFByb3BlcnR5KTtcblx0XHRcdG9TZWxlY3Rpb25WYXJpYW50Lm1hc3NBZGRTZWxlY3RPcHRpb24oc1NlbWFudGljT2JqZWN0UHJvcGVydHksIG9TZWxlY3RPcHRpb24pO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb1NlbGVjdGlvblZhcmlhbnQ7XG59XG5cbnR5cGUgU2VtYW50aWNPYmplY3RGcm9tUGF0aCA9IHtcblx0c2VtYW50aWNPYmplY3RQYXRoOiBzdHJpbmc7XG5cdHNlbWFudGljT2JqZWN0Rm9yR2V0TGlua3M6IHsgc2VtYW50aWNPYmplY3Q6IHN0cmluZyB9W107XG5cdHNlbWFudGljT2JqZWN0OiB7XG5cdFx0c2VtYW50aWNPYmplY3Q6IHsgJFBhdGg6IHN0cmluZyB9O1xuXHR9O1xuXHR1bmF2YWlsYWJsZUFjdGlvbnM6IHN0cmluZ1tdO1xufTtcbmFzeW5jIGZ1bmN0aW9uIGZuR2V0U2VtYW50aWNPYmplY3RzRnJvbVBhdGgoXG5cdG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRzUGF0aDogc3RyaW5nLFxuXHRzUXVhbGlmaWVyOiBzdHJpbmdcbik6IFByb21pc2U8U2VtYW50aWNPYmplY3RGcm9tUGF0aD4ge1xuXHRyZXR1cm4gbmV3IFByb21pc2U8U2VtYW50aWNPYmplY3RGcm9tUGF0aD4oZnVuY3Rpb24gKHJlc29sdmUpIHtcblx0XHRsZXQgc1NlbWFudGljT2JqZWN0LCBhU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnM7XG5cdFx0aWYgKHNRdWFsaWZpZXIgPT09IFwiXCIpIHtcblx0XHRcdHNTZW1hbnRpY09iamVjdCA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NQYXRofUAke0NvbW1vbkFubm90YXRpb25UZXJtcy5TZW1hbnRpY09iamVjdH1gKTtcblx0XHRcdGFTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NQYXRofUAke0NvbW1vbkFubm90YXRpb25UZXJtcy5TZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uc31gKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c1NlbWFudGljT2JqZWN0ID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c1BhdGh9QCR7Q29tbW9uQW5ub3RhdGlvblRlcm1zLlNlbWFudGljT2JqZWN0fSMke3NRdWFsaWZpZXJ9YCk7XG5cdFx0XHRhU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChcblx0XHRcdFx0YCR7c1BhdGh9QCR7Q29tbW9uQW5ub3RhdGlvblRlcm1zLlNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zfSMke3NRdWFsaWZpZXJ9YFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRjb25zdCBhU2VtYW50aWNPYmplY3RGb3JHZXRMaW5rcyA9IFt7IHNlbWFudGljT2JqZWN0OiBzU2VtYW50aWNPYmplY3QgfV07XG5cdFx0Y29uc3Qgb1NlbWFudGljT2JqZWN0ID0ge1xuXHRcdFx0c2VtYW50aWNPYmplY3Q6IHNTZW1hbnRpY09iamVjdFxuXHRcdH07XG5cdFx0cmVzb2x2ZSh7XG5cdFx0XHRzZW1hbnRpY09iamVjdFBhdGg6IHNQYXRoLFxuXHRcdFx0c2VtYW50aWNPYmplY3RGb3JHZXRMaW5rczogYVNlbWFudGljT2JqZWN0Rm9yR2V0TGlua3MsXG5cdFx0XHRzZW1hbnRpY09iamVjdDogb1NlbWFudGljT2JqZWN0LFxuXHRcdFx0dW5hdmFpbGFibGVBY3Rpb25zOiBhU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnNcblx0XHR9KTtcblx0fSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZuR2V0U2VtYW50aWNPYmplY3RQcm9taXNlKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzUGF0aDogc3RyaW5nLCBzUXVhbGlmaWVyOiBzdHJpbmcpOiBQcm9taXNlPFNlbWFudGljT2JqZWN0RnJvbVBhdGg+IHtcblx0cmV0dXJuIENvbW1vblV0aWxzLmdldFNlbWFudGljT2JqZWN0c0Zyb21QYXRoKG9NZXRhTW9kZWwsIHNQYXRoLCBzUXVhbGlmaWVyKTtcbn1cblxuZnVuY3Rpb24gZ2V0RmlsdGVyQWxsb3dlZEV4cHJlc3Npb24ob0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24/OiBNZXRhTW9kZWxUeXBlPEZpbHRlclJlc3RyaWN0aW9uc1R5cGU+KTogX0ZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyB7XG5cdGNvbnN0IG1BbGxvd2VkRXhwcmVzc2lvbnM6IF9GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMgPSB7fTtcblx0aWYgKG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uICYmIG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uLkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuXHRcdG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uLkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAob1Byb3BlcnR5KSB7XG5cdFx0XHRpZiAob1Byb3BlcnR5LlByb3BlcnR5ICYmIG9Qcm9wZXJ0eS5BbGxvd2VkRXhwcmVzc2lvbnMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHQvL1NpbmdsZVZhbHVlIHwgTXVsdGlWYWx1ZSB8IFNpbmdsZVJhbmdlIHwgTXVsdGlSYW5nZSB8IFNlYXJjaEV4cHJlc3Npb24gfCBNdWx0aVJhbmdlT3JTZWFyY2hFeHByZXNzaW9uXG5cdFx0XHRcdGlmIChtQWxsb3dlZEV4cHJlc3Npb25zW29Qcm9wZXJ0eS5Qcm9wZXJ0eS4kUHJvcGVydHlQYXRoXSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0bUFsbG93ZWRFeHByZXNzaW9uc1tvUHJvcGVydHkuUHJvcGVydHkuJFByb3BlcnR5UGF0aF0ucHVzaChvUHJvcGVydHkuQWxsb3dlZEV4cHJlc3Npb25zKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRtQWxsb3dlZEV4cHJlc3Npb25zW29Qcm9wZXJ0eS5Qcm9wZXJ0eS4kUHJvcGVydHlQYXRoXSA9IFtvUHJvcGVydHkuQWxsb3dlZEV4cHJlc3Npb25zXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBtQWxsb3dlZEV4cHJlc3Npb25zO1xufVxuZnVuY3Rpb24gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKFxuXHRvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbj86IE1ldGFNb2RlbFR5cGU8RmlsdGVyUmVzdHJpY3Rpb25zVHlwZT4sXG5cdHNSZXN0cmljdGlvbj86IFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIgfCBcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCJcbik6IHN0cmluZ1tdIHtcblx0bGV0IGFQcm9wczogc3RyaW5nW10gPSBbXTtcblx0aWYgKG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uICYmIG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uW3NSZXN0cmljdGlvbiBhcyBrZXlvZiBNZXRhTW9kZWxUeXBlPEZpbHRlclJlc3RyaWN0aW9uc1R5cGU+XSkge1xuXHRcdGFQcm9wcyA9IChcblx0XHRcdG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uW3NSZXN0cmljdGlvbiBhcyBrZXlvZiBNZXRhTW9kZWxUeXBlPEZpbHRlclJlc3RyaWN0aW9uc1R5cGU+XSBhcyBFeHBhbmRQYXRoVHlwZTxFZG0uUHJvcGVydHlQYXRoPltdXG5cdFx0KS5tYXAoZnVuY3Rpb24gKG9Qcm9wZXJ0eTogRXhwYW5kUGF0aFR5cGU8RWRtLlByb3BlcnR5UGF0aD4pIHtcblx0XHRcdHJldHVybiBvUHJvcGVydHkuJFByb3BlcnR5UGF0aDtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gYVByb3BzO1xufVxuXG5mdW5jdGlvbiBfZmV0Y2hQcm9wZXJ0aWVzRm9yTmF2UGF0aChwYXRoczogc3RyaW5nW10sIG5hdlBhdGg6IHN0cmluZywgcHJvcHM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuXHRjb25zdCBuYXZQYXRoUHJlZml4ID0gbmF2UGF0aCArIFwiL1wiO1xuXHRyZXR1cm4gcGF0aHMucmVkdWNlKChvdXRQYXRoczogc3RyaW5nW10sIHBhdGhUb0NoZWNrOiBzdHJpbmcpID0+IHtcblx0XHRpZiAocGF0aFRvQ2hlY2suc3RhcnRzV2l0aChuYXZQYXRoUHJlZml4KSkge1xuXHRcdFx0Y29uc3Qgb3V0UGF0aCA9IHBhdGhUb0NoZWNrLnJlcGxhY2UobmF2UGF0aFByZWZpeCwgXCJcIik7XG5cdFx0XHRpZiAoIW91dFBhdGhzLmluY2x1ZGVzKG91dFBhdGgpKSB7XG5cdFx0XHRcdG91dFBhdGhzLnB1c2gob3V0UGF0aCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvdXRQYXRocztcblx0fSwgcHJvcHMpO1xufVxudHlwZSBfRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zID0gUmVjb3JkPHN0cmluZywgc3RyaW5nW10+O1xuZXhwb3J0IHR5cGUgX0ZpbHRlclJlc3RyaWN0aW9ucyA9IHtcblx0UmVxdWlyZWRQcm9wZXJ0aWVzOiBzdHJpbmdbXTtcblx0Tm9uRmlsdGVyYWJsZVByb3BlcnRpZXM6IHN0cmluZ1tdO1xuXHRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnM6IF9GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnM7XG59O1xuZnVuY3Rpb24gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoKGVudGl0eVBhdGg6IHN0cmluZywgb0NvbnRleHQ6IE9EYXRhTWV0YU1vZGVsKTogX0ZpbHRlclJlc3RyaWN0aW9ucyB7XG5cdC8vIE5PVEU6IEZvciBnZXR0aW5nIEZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyBwbGVhc2UgdXNlICdnZXRBbGxvd2VkRmlsdGVyRXhwcmVzc2lvbkZvclByb3BlcnR5JyBmcm9tICdzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0xpc3RSZXBvcnQvRmlsdGVyRmllbGQudHMnLlxuXHRjb25zdCBvUmV0OiBfRmlsdGVyUmVzdHJpY3Rpb25zID0ge1xuXHRcdFJlcXVpcmVkUHJvcGVydGllczogW10sXG5cdFx0Tm9uRmlsdGVyYWJsZVByb3BlcnRpZXM6IFtdLFxuXHRcdEZpbHRlckFsbG93ZWRFeHByZXNzaW9uczoge31cblx0fTtcblx0bGV0IG9GaWx0ZXJSZXN0cmljdGlvbnM7XG5cdGNvbnN0IG5hdmlnYXRpb25UZXh0ID0gXCIkTmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1wiO1xuXHRjb25zdCBmclRlcm0gPSBcIkBPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkZpbHRlclJlc3RyaWN0aW9uc1wiO1xuXHRjb25zdCBlbnRpdHlUeXBlUGF0aFBhcnRzID0gZW50aXR5UGF0aC5yZXBsYWNlQWxsKFwiJTJGXCIsIFwiL1wiKS5zcGxpdChcIi9cIikuZmlsdGVyKE1vZGVsSGVscGVyLmZpbHRlck91dE5hdlByb3BCaW5kaW5nKTtcblx0Y29uc3QgZW50aXR5VHlwZVBhdGggPSBgLyR7ZW50aXR5VHlwZVBhdGhQYXJ0cy5qb2luKFwiL1wiKX0vYDtcblx0Y29uc3QgZW50aXR5U2V0UGF0aCA9IE1vZGVsSGVscGVyLmdldEVudGl0eVNldFBhdGgoZW50aXR5UGF0aCwgb0NvbnRleHQpO1xuXHRjb25zdCBlbnRpdHlTZXRQYXRoUGFydHMgPSBlbnRpdHlTZXRQYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoTW9kZWxIZWxwZXIuZmlsdGVyT3V0TmF2UHJvcEJpbmRpbmcpO1xuXHRjb25zdCBpc0NvbnRhaW5tZW50ID0gb0NvbnRleHQuZ2V0T2JqZWN0KGAke2VudGl0eVR5cGVQYXRofSRDb250YWluc1RhcmdldGApO1xuXHRjb25zdCBjb250YWlubWVudE5hdlBhdGggPSAhIWlzQ29udGFpbm1lbnQgJiYgZW50aXR5VHlwZVBhdGhQYXJ0c1tlbnRpdHlUeXBlUGF0aFBhcnRzLmxlbmd0aCAtIDFdO1xuXG5cdC8vTEVBU1QgUFJJT1JJVFkgLSBGaWx0ZXIgcmVzdHJpY3Rpb25zIGRpcmVjdGx5IGF0IEVudGl0eSBTZXRcblx0Ly9lLmcuIEZSIGluIFwiTlMuRW50aXR5Q29udGFpbmVyL1NhbGVzT3JkZXJNYW5hZ2VcIiBDb250ZXh0UGF0aDogL1NhbGVzT3JkZXJNYW5hZ2Vcblx0aWYgKCFpc0NvbnRhaW5tZW50KSB7XG5cdFx0b0ZpbHRlclJlc3RyaWN0aW9ucyA9IG9Db250ZXh0LmdldE9iamVjdChgJHtlbnRpdHlTZXRQYXRofSR7ZnJUZXJtfWApIGFzIE1ldGFNb2RlbFR5cGU8RmlsdGVyUmVzdHJpY3Rpb25zVHlwZT4gfCB1bmRlZmluZWQ7XG5cdFx0b1JldC5SZXF1aXJlZFByb3BlcnRpZXMgPSBnZXRGaWx0ZXJSZXN0cmljdGlvbnMob0ZpbHRlclJlc3RyaWN0aW9ucywgXCJSZXF1aXJlZFByb3BlcnRpZXNcIikgfHwgW107XG5cdFx0Y29uc3QgcmVzdWx0Q29udGV4dENoZWNrID0gb0NvbnRleHQuZ2V0T2JqZWN0KGAke2VudGl0eVR5cGVQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVzdWx0Q29udGV4dGApO1xuXHRcdGlmICghcmVzdWx0Q29udGV4dENoZWNrKSB7XG5cdFx0XHRvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9GaWx0ZXJSZXN0cmljdGlvbnMsIFwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXNcIikgfHwgW107XG5cdFx0fVxuXHRcdC8vU2luZ2xlVmFsdWUgfCBNdWx0aVZhbHVlIHwgU2luZ2xlUmFuZ2UgfCBNdWx0aVJhbmdlIHwgU2VhcmNoRXhwcmVzc2lvbiB8IE11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cblx0XHRvUmV0LkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyA9IGdldEZpbHRlckFsbG93ZWRFeHByZXNzaW9uKG9GaWx0ZXJSZXN0cmljdGlvbnMpIHx8IHt9O1xuXHR9XG5cblx0aWYgKGVudGl0eVR5cGVQYXRoUGFydHMubGVuZ3RoID4gMSkge1xuXHRcdGNvbnN0IG5hdlBhdGggPSBpc0NvbnRhaW5tZW50ID8gKGNvbnRhaW5tZW50TmF2UGF0aCBhcyBzdHJpbmcpIDogZW50aXR5U2V0UGF0aFBhcnRzW2VudGl0eVNldFBhdGhQYXJ0cy5sZW5ndGggLSAxXTtcblx0XHQvLyBJbiBjYXNlIG9mIGNvbnRhaW5tZW50IHdlIHRha2UgZW50aXR5U2V0IHByb3ZpZGVkIGFzIHBhcmVudC4gQW5kIGluIGNhc2Ugb2Ygbm9ybWFsIHdlIHdvdWxkIHJlbW92ZSB0aGUgbGFzdCBuYXZpZ2F0aW9uIGZyb20gZW50aXR5U2V0UGF0aC5cblx0XHRjb25zdCBwYXJlbnRFbnRpdHlTZXRQYXRoID0gaXNDb250YWlubWVudCA/IGVudGl0eVNldFBhdGggOiBgLyR7ZW50aXR5U2V0UGF0aFBhcnRzLnNsaWNlKDAsIC0xKS5qb2luKGAvJHtuYXZpZ2F0aW9uVGV4dH0vYCl9YDtcblx0XHQvL1RISVJEIEhJR0hFU1QgUFJJT1JJVFkgLSBSZWFkaW5nIHByb3BlcnR5IHBhdGggcmVzdHJpY3Rpb25zIC0gQW5ub3RhdGlvbiBhdCBtYWluIGVudGl0eSBidXQgZGlyZWN0bHkgb24gbmF2aWdhdGlvbiBwcm9wZXJ0eSBwYXRoXG5cdFx0Ly9lLmcuIFBhcmVudCBDdXN0b21lciB3aXRoIFByb3BlcnR5UGF0aD1cIlNldC9DaXR5TmFtZVwiIENvbnRleHRQYXRoOiBDdXN0b21lci9TZXRcblx0XHRjb25zdCBvUGFyZW50UmV0OiBfRmlsdGVyUmVzdHJpY3Rpb25zID0ge1xuXHRcdFx0UmVxdWlyZWRQcm9wZXJ0aWVzOiBbXSxcblx0XHRcdE5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzOiBbXSxcblx0XHRcdEZpbHRlckFsbG93ZWRFeHByZXNzaW9uczoge31cblx0XHR9O1xuXHRcdGlmICghbmF2UGF0aC5pbmNsdWRlcyhcIiUyRlwiKSkge1xuXHRcdFx0Y29uc3Qgb1BhcmVudEZSID0gb0NvbnRleHQuZ2V0T2JqZWN0KGAke3BhcmVudEVudGl0eVNldFBhdGh9JHtmclRlcm19YCkgYXMgTWV0YU1vZGVsVHlwZTxGaWx0ZXJSZXN0cmljdGlvbnNUeXBlPiB8IHVuZGVmaW5lZDtcblx0XHRcdG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzID0gX2ZldGNoUHJvcGVydGllc0Zvck5hdlBhdGgoXG5cdFx0XHRcdGdldEZpbHRlclJlc3RyaWN0aW9ucyhvUGFyZW50RlIsIFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIpIHx8IFtdLFxuXHRcdFx0XHRuYXZQYXRoLFxuXHRcdFx0XHRvUmV0LlJlcXVpcmVkUHJvcGVydGllcyB8fCBbXVxuXHRcdFx0KTtcblx0XHRcdG9SZXQuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMgPSBfZmV0Y2hQcm9wZXJ0aWVzRm9yTmF2UGF0aChcblx0XHRcdFx0Z2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9QYXJlbnRGUiwgXCJOb25GaWx0ZXJhYmxlUHJvcGVydGllc1wiKSB8fCBbXSxcblx0XHRcdFx0bmF2UGF0aCxcblx0XHRcdFx0b1JldC5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcyB8fCBbXVxuXHRcdFx0KTtcblx0XHRcdC8vU2luZ2xlVmFsdWUgfCBNdWx0aVZhbHVlIHwgU2luZ2xlUmFuZ2UgfCBNdWx0aVJhbmdlIHwgU2VhcmNoRXhwcmVzc2lvbiB8IE11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cblx0XHRcdGNvbnN0IGNvbXBsZXRlQWxsb3dlZEV4cHMgPSBnZXRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbihvUGFyZW50RlIpIHx8IHt9O1xuXHRcdFx0b1BhcmVudFJldC5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMgPSBPYmplY3Qua2V5cyhjb21wbGV0ZUFsbG93ZWRFeHBzKS5yZWR1Y2UoXG5cdFx0XHRcdChvdXRQcm9wOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4sIHByb3BQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRcdFx0XHRpZiAocHJvcFBhdGguc3RhcnRzV2l0aChuYXZQYXRoICsgXCIvXCIpKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvdXRQcm9wUGF0aCA9IHByb3BQYXRoLnJlcGxhY2UobmF2UGF0aCArIFwiL1wiLCBcIlwiKTtcblx0XHRcdFx0XHRcdG91dFByb3Bbb3V0UHJvcFBhdGhdID0gY29tcGxldGVBbGxvd2VkRXhwc1twcm9wUGF0aF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBvdXRQcm9wO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT5cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRcdG9SZXQuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zID0gbWVyZ2VPYmplY3RzKFxuXHRcdFx0e30sXG5cdFx0XHRvUmV0LkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyB8fCB7fSxcblx0XHRcdG9QYXJlbnRSZXQuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zIHx8IHt9XG5cdFx0KSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT47XG5cblx0XHQvL1NFQ09ORCBISUdIRVNUIHByaW9yaXR5IC0gTmF2aWdhdGlvbiByZXN0cmljdGlvbnNcblx0XHQvL2UuZy4gUGFyZW50IFwiL0N1c3RvbWVyXCIgd2l0aCBOYXZpZ2F0aW9uUHJvcGVydHlQYXRoPVwiU2V0XCIgQ29udGV4dFBhdGg6IEN1c3RvbWVyL1NldFxuXHRcdGNvbnN0IG9OYXZSZXN0cmljdGlvbnMgPSBNZXRhTW9kZWxGdW5jdGlvbi5nZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zKG9Db250ZXh0LCBwYXJlbnRFbnRpdHlTZXRQYXRoLCBuYXZQYXRoLnJlcGxhY2VBbGwoXCIlMkZcIiwgXCIvXCIpKTtcblx0XHRjb25zdCBvTmF2RmlsdGVyUmVzdCA9IG9OYXZSZXN0cmljdGlvbnMgJiYgKG9OYXZSZXN0cmljdGlvbnNbXCJGaWx0ZXJSZXN0cmljdGlvbnNcIl0gYXMgTWV0YU1vZGVsVHlwZTxGaWx0ZXJSZXN0cmljdGlvbnNUeXBlPik7XG5cdFx0Y29uc3QgbmF2UmVzUmVxUHJvcHMgPSBnZXRGaWx0ZXJSZXN0cmljdGlvbnMob05hdkZpbHRlclJlc3QsIFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIpIHx8IFtdO1xuXHRcdG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzID0gdW5pcXVlU29ydChvUmV0LlJlcXVpcmVkUHJvcGVydGllcy5jb25jYXQobmF2UmVzUmVxUHJvcHMpKTtcblx0XHRjb25zdCBuYXZOb25GaWx0ZXJQcm9wcyA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhvTmF2RmlsdGVyUmVzdCwgXCJOb25GaWx0ZXJhYmxlUHJvcGVydGllc1wiKSB8fCBbXTtcblx0XHRvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzID0gdW5pcXVlU29ydChvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzLmNvbmNhdChuYXZOb25GaWx0ZXJQcm9wcykpO1xuXHRcdC8vU2luZ2xlVmFsdWUgfCBNdWx0aVZhbHVlIHwgU2luZ2xlUmFuZ2UgfCBNdWx0aVJhbmdlIHwgU2VhcmNoRXhwcmVzc2lvbiB8IE11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cblx0XHRvUmV0LkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyA9IG1lcmdlT2JqZWN0cyhcblx0XHRcdHt9LFxuXHRcdFx0b1JldC5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMgfHwge30sXG5cdFx0XHRnZXRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbihvTmF2RmlsdGVyUmVzdCkgfHwge31cblx0XHQpIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPjtcblxuXHRcdC8vSElHSEVTVCBwcmlvcml0eSAtIFJlc3RyaWN0aW9ucyBoYXZpbmcgdGFyZ2V0IHdpdGggbmF2aWdhdGlvbiBhc3NvY2lhdGlvbiBlbnRpdHlcblx0XHQvLyBlLmcuIEZSIGluIFwiQ3VzdG9tZXJQYXJhbWV0ZXJzL1NldFwiIENvbnRleHRQYXRoOiBcIkN1c3RvbWVyL1NldFwiXG5cdFx0Y29uc3QgbmF2QXNzb2NpYXRpb25FbnRpdHlSZXN0ID0gb0NvbnRleHQuZ2V0T2JqZWN0KFxuXHRcdFx0YC8ke2VudGl0eVR5cGVQYXRoUGFydHMuam9pbihcIi9cIil9JHtmclRlcm19YFxuXHRcdCkgYXMgTWV0YU1vZGVsVHlwZTxGaWx0ZXJSZXN0cmljdGlvbnNUeXBlPjtcblx0XHRjb25zdCBuYXZBc3NvY1JlcVByb3BzID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG5hdkFzc29jaWF0aW9uRW50aXR5UmVzdCwgXCJSZXF1aXJlZFByb3BlcnRpZXNcIikgfHwgW107XG5cdFx0b1JldC5SZXF1aXJlZFByb3BlcnRpZXMgPSB1bmlxdWVTb3J0KG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzLmNvbmNhdChuYXZBc3NvY1JlcVByb3BzKSk7XG5cdFx0Y29uc3QgbmF2QXNzb2NOb25GaWx0ZXJQcm9wcyA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhuYXZBc3NvY2lhdGlvbkVudGl0eVJlc3QsIFwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXNcIikgfHwgW107XG5cdFx0b1JldC5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcyA9IHVuaXF1ZVNvcnQob1JldC5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcy5jb25jYXQobmF2QXNzb2NOb25GaWx0ZXJQcm9wcykpO1xuXHRcdC8vU2luZ2xlVmFsdWUgfCBNdWx0aVZhbHVlIHwgU2luZ2xlUmFuZ2UgfCBNdWx0aVJhbmdlIHwgU2VhcmNoRXhwcmVzc2lvbiB8IE11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cblx0XHRvUmV0LkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyA9IG1lcmdlT2JqZWN0cyhcblx0XHRcdHt9LFxuXHRcdFx0b1JldC5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMsXG5cdFx0XHRnZXRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbihuYXZBc3NvY2lhdGlvbkVudGl0eVJlc3QpIHx8IHt9XG5cdFx0KSBhcyBfRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zO1xuXHR9XG5cdHJldHVybiBvUmV0O1xufVxuXG5leHBvcnQgdHlwZSBQcmVwcm9jZXNzb3JTZXR0aW5ncyA9IHtcblx0YXBwQ29tcG9uZW50PzogQXBwQ29tcG9uZW50O1xuXHRiaW5kaW5nQ29udGV4dHM6IG9iamVjdDtcblx0bW9kZWxzOiBvYmplY3Q7XG59O1xuZXhwb3J0IHR5cGUgQmFzZVRyZWVNb2RpZmllciA9IHtcblx0dGVtcGxhdGVDb250cm9sRnJhZ21lbnQoXG5cdFx0c0ZyYWdtZW50TmFtZTogc3RyaW5nLFxuXHRcdG1QcmVwcm9jZXNzb3JTZXR0aW5nczogUHJlcHJvY2Vzc29yU2V0dGluZ3MsXG5cdFx0b1ZpZXc/OiBWaWV3XG5cdCk6IFByb21pc2U8VUk1RWxlbWVudFtdIHwgRWxlbWVudFtdPjtcblx0dGFyZ2V0czogc3RyaW5nO1xuXHRnZXRJZCh2Q29udHJvbDogVUk1RWxlbWVudCB8IEVsZW1lbnQpOiBzdHJpbmc7XG5cdGdldENvbnRyb2xUeXBlKG9Db250cm9sOiBVSTVFbGVtZW50IHwgRWxlbWVudCk6IHN0cmluZztcblx0Z2V0UHJvcGVydHk8VD4ob0NvbnRyb2w6IFVJNUVsZW1lbnQgfCBFbGVtZW50LCBzUHJvcGVydHlOYW1lOiBzdHJpbmcpOiBQcm9taXNlPFQ+O1xuXHRnZXRBZ2dyZWdhdGlvbihwYXJlbnQ6IFVJNUVsZW1lbnQgfCBFbGVtZW50LCBuYW1lOiBzdHJpbmcpOiBQcm9taXNlPFVJNUVsZW1lbnRbXSB8IEVsZW1lbnRbXT47XG5cdGluc2VydEFnZ3JlZ2F0aW9uKFxuXHRcdHBhcmVudDogVUk1RWxlbWVudCB8IEVsZW1lbnQsXG5cdFx0bmFtZTogc3RyaW5nLFxuXHRcdGNvbnRyb2w6IFVJNUVsZW1lbnQgfCBFbGVtZW50IHwgVUk1RWxlbWVudFtdIHwgRWxlbWVudFtdLFxuXHRcdGluZGV4PzogbnVtYmVyLFxuXHRcdHZpZXc/OiBFbGVtZW50LFxuXHRcdHNraXBBZGp1c3RJbmRleD86IGJvb2xlYW5cblx0KTogUHJvbWlzZTx2b2lkPjtcblx0c2V0UHJvcGVydHkob0NvbnRyb2w6IFVJNUVsZW1lbnQgfCBFbGVtZW50LCBzUHJvcGVydHlOYW1lOiBzdHJpbmcsIHZWYWx1ZTogdW5rbm93bik6IHZvaWQ7XG5cdGJ5U2VsZWN0b3Iob1NlbGVjdG9yOiBvYmplY3QsIG9BcHBDb21wb25lbnQ/OiBDb21wb25lbnQsIG9WaWV3PzogRWxlbWVudCk6IE1hbmFnZWRPYmplY3QgfCBFbGVtZW50O1xufTtcblxuYXN5bmMgZnVuY3Rpb24gdGVtcGxhdGVDb250cm9sRnJhZ21lbnQoXG5cdHNGcmFnbWVudE5hbWU6IHN0cmluZyB8IEVsZW1lbnQgfCBudWxsLFxuXHRvUHJlcHJvY2Vzc29yU2V0dGluZ3M6IFByZXByb2Nlc3NvclNldHRpbmdzLFxuXHRvSW5PcHRpb25zPzoge1xuXHRcdHZpZXc/OiBWaWV3O1xuXHRcdGlzWE1MPzogYm9vbGVhbjtcblx0XHRpZD86IHN0cmluZztcblx0XHRjb250cm9sbGVyPzogUGFnZUNvbnRyb2xsZXIgfCBFeHRlbnNpb25BUEk7XG5cdFx0Y29udGFpbmluZ1ZpZXc/OiBWaWV3O1xuXHRcdGNvbnRleHRQYXRoPzogc3RyaW5nO1xuXHR9LFxuXHRvTW9kaWZpZXI/OiBCYXNlVHJlZU1vZGlmaWVyXG4pOiBQcm9taXNlPEVsZW1lbnQgfCBVSTVFbGVtZW50IHwgRWxlbWVudFtdIHwgVUk1RWxlbWVudFtdPiB7XG5cdGNvbnN0IG9PcHRpb25zID0gb0luT3B0aW9ucyB8fCB7fTtcblx0aWYgKG9Nb2RpZmllciAmJiB0eXBlb2Ygc0ZyYWdtZW50TmFtZSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdHJldHVybiBvTW9kaWZpZXIudGVtcGxhdGVDb250cm9sRnJhZ21lbnQoc0ZyYWdtZW50TmFtZSwgb1ByZXByb2Nlc3NvclNldHRpbmdzLCBvT3B0aW9ucy52aWV3KS50aGVuKGZ1bmN0aW9uIChvRnJhZ21lbnQpIHtcblx0XHRcdC8vIFRoaXMgaXMgcmVxdWlyZWQgYXMgRmxleCByZXR1cm5zIGFuIEhUTUxDb2xsZWN0aW9uIGFzIHRlbXBsYXRpbmcgcmVzdWx0IGluIFhNTCB0aW1lLlxuXHRcdFx0cmV0dXJuIG9Nb2RpZmllci50YXJnZXRzID09PSBcInhtbFRyZWVcIiAmJiBvRnJhZ21lbnQubGVuZ3RoID4gMCA/IG9GcmFnbWVudFswXSA6IG9GcmFnbWVudDtcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRjb25zdCBmcmFnbWVudERhdGEgPVxuXHRcdFx0dHlwZW9mIHNGcmFnbWVudE5hbWUgPT09IFwic3RyaW5nXCIgPyBYTUxUZW1wbGF0ZVByb2Nlc3Nvci5sb2FkVGVtcGxhdGUoc0ZyYWdtZW50TmFtZSwgXCJmcmFnbWVudFwiKSA6IHNGcmFnbWVudE5hbWU7XG5cdFx0Y29uc3Qgb0ZyYWdtZW50ID0gYXdhaXQgWE1MUHJlcHJvY2Vzc29yLnByb2Nlc3MoZnJhZ21lbnREYXRhLCB7IG5hbWU6IHNGcmFnbWVudE5hbWUgfSwgb1ByZXByb2Nlc3NvclNldHRpbmdzKTtcblx0XHRjb25zdCBvQ29udHJvbCA9IG9GcmFnbWVudC5maXJzdEVsZW1lbnRDaGlsZDtcblx0XHRpZiAoISFvT3B0aW9ucy5pc1hNTCAmJiBvQ29udHJvbCkge1xuXHRcdFx0cmV0dXJuIG9Db250cm9sO1xuXHRcdH1cblx0XHRsZXQgb3duZXI6IHsgcnVuQXNPd25lcjogPFQ+KGZuOiAoKSA9PiBUKSA9PiBUIH0gPSBvUHJlcHJvY2Vzc29yU2V0dGluZ3MuYXBwQ29tcG9uZW50ID8/IHsgcnVuQXNPd25lcjogKGZuKSA9PiBmbigpIH07XG5cdFx0aWYgKG9PcHRpb25zLmNvbnRhaW5pbmdWaWV3KSB7XG5cdFx0XHRjb25zdCB2aWV3T3duZXIgPSBDb21wb25lbnQuZ2V0T3duZXJDb21wb25lbnRGb3Iob09wdGlvbnMuY29udGFpbmluZ1ZpZXcpO1xuXHRcdFx0aWYgKHZpZXdPd25lcikge1xuXHRcdFx0XHRvd25lciA9IHZpZXdPd25lcjtcblx0XHRcdH1cblx0XHR9XG5cdFx0bGV0IGNvbnRhaW5pbmdWaWV3OiBWaWV3IHwgdW5kZWZpbmVkO1xuXHRcdGlmIChvT3B0aW9ucy52aWV3ICYmICFvT3B0aW9ucy5jb250cm9sbGVyKSB7XG5cdFx0XHQvLyB0aGlzIGlzIG92ZXJhbGwgc3R1cGlkLCBpbiBjYXNlIHdlIGFyZSBjb21pbmcgZnJvbSB0aGUgZGVsZWdhdGUgd2l0aCBhbiB4bWwgbm9kZSBpbnN0ZWFkIG9mIGEgZnJhZ21lbnQgd2UgbmVlZCB0byBwYXNzIHRoZSBjb250YWluaW5nVmlldyBpbiB0aGVyZSAoZG9uZSBieSB0aGUgb01vZGlmaWVyIGNhbGwgZm9yIGluc3RhbmNlKVxuXHRcdFx0Ly8gQnV0IGluIG90aGVyIHJ1bnRpbWUgY2FzZSB3aGVyZSB3ZSBhcmUgaGVyZSB3ZSBuZWVkIHRvIG1haW50YWluIHRoZSBjb250cm9sbGVyIGFuZCB0aHVzIGNhbm5vdCBoYXZlIGEgY29udGFpbmluZ1ZpZXcuLi5cblx0XHRcdGNvbnRhaW5pbmdWaWV3ID0gb09wdGlvbnMudmlldztcblx0XHR9XG5cdFx0cmV0dXJuIG93bmVyLnJ1bkFzT3duZXIoYXN5bmMgKCkgPT4ge1xuXHRcdFx0cmV0dXJuIEZyYWdtZW50LmxvYWQoe1xuXHRcdFx0XHRpZDogb09wdGlvbnMuaWQsXG5cdFx0XHRcdHR5cGU6IFwiU0NPUEVERkVGUkFHTUVOVFwiLFxuXHRcdFx0XHRjb250ZXh0UGF0aDogb09wdGlvbnMuY29udGV4dFBhdGgsXG5cdFx0XHRcdGRlZmluaXRpb246IG9GcmFnbWVudCBhcyB1bmtub3duIGFzIHN0cmluZyxcblx0XHRcdFx0Y29udHJvbGxlcjogb09wdGlvbnMuY29udHJvbGxlcixcblx0XHRcdFx0Y29udGFpbmluZ1ZpZXc6IGNvbnRhaW5pbmdWaWV3XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRTaW5nbGV0b25QYXRoKHBhdGg6IHN0cmluZywgbWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHBhcnRzID0gcGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKEJvb2xlYW4pLFxuXHRcdHByb3BlcnR5TmFtZSA9IHBhcnRzLnBvcCgpISxcblx0XHRuYXZpZ2F0aW9uUGF0aCA9IHBhcnRzLmpvaW4oXCIvXCIpLFxuXHRcdGVudGl0eVNldCA9IG5hdmlnYXRpb25QYXRoICYmIG1ldGFNb2RlbC5nZXRPYmplY3QoYC8ke25hdmlnYXRpb25QYXRofWApO1xuXHRpZiAoZW50aXR5U2V0Py4ka2luZCA9PT0gXCJTaW5nbGV0b25cIikge1xuXHRcdGNvbnN0IHNpbmdsZXRvbk5hbWUgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTtcblx0XHRyZXR1cm4gYC8ke3NpbmdsZXRvbk5hbWV9LyR7cHJvcGVydHlOYW1lfWA7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVxdWVzdFNpbmdsZXRvblByb3BlcnR5KHBhdGg6IHN0cmluZywgbW9kZWw6IE9EYXRhTW9kZWwpOiBQcm9taXNlPHVua25vd24+IHtcblx0aWYgKCFwYXRoIHx8ICFtb2RlbCkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdH1cblx0Y29uc3QgbWV0YU1vZGVsID0gbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdC8vIEZpbmQgdGhlIHVuZGVybHlpbmcgZW50aXR5IHNldCBmcm9tIHRoZSBwcm9wZXJ0eSBwYXRoIGFuZCBjaGVjayB3aGV0aGVyIGl0IGlzIGEgc2luZ2xldG9uLlxuXHRjb25zdCByZXNvbHZlZFBhdGggPSBnZXRTaW5nbGV0b25QYXRoKHBhdGgsIG1ldGFNb2RlbCk7XG5cdGlmIChyZXNvbHZlZFBhdGgpIHtcblx0XHRjb25zdCBwcm9wZXJ0eUJpbmRpbmcgPSBtb2RlbC5iaW5kUHJvcGVydHkocmVzb2x2ZWRQYXRoKTtcblx0XHRyZXR1cm4gcHJvcGVydHlCaW5kaW5nLnJlcXVlc3RWYWx1ZSgpO1xuXHR9XG5cblx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbn1cblxuLy8gR2V0IHRoZSBwYXRoIGZvciBhY3Rpb24gcGFyYW1ldGVycyB0aGF0IGlzIG5lZWRlZCB0byByZWFkIHRoZSBhbm5vdGF0aW9uc1xuZnVuY3Rpb24gZ2V0UGFyYW1ldGVyUGF0aChzUGF0aDogc3RyaW5nLCBzUGFyYW1ldGVyOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRsZXQgc0NvbnRleHQ7XG5cdGlmIChzUGF0aC5pbmNsdWRlcyhcIkAkdWk1Lm92ZXJsb2FkXCIpKSB7XG5cdFx0c0NvbnRleHQgPSBzUGF0aC5zcGxpdChcIkAkdWk1Lm92ZXJsb2FkXCIpWzBdO1xuXHR9IGVsc2Uge1xuXHRcdC8vIEZvciBVbmJvdW5kIEFjdGlvbnMgaW4gQWN0aW9uIFBhcmFtZXRlciBEaWFsb2dzXG5cdFx0Y29uc3QgYUFjdGlvbiA9IHNQYXRoLnNwbGl0KFwiLzBcIilbMF0uc3BsaXQoXCIuXCIpO1xuXHRcdHNDb250ZXh0ID0gYC8ke2FBY3Rpb25bYUFjdGlvbi5sZW5ndGggLSAxXX0vYDtcblx0fVxuXHRyZXR1cm4gc0NvbnRleHQgKyBzUGFyYW1ldGVyO1xufVxuXG4vKipcbiAqIEdldCByZXNvbHZlZCBleHByZXNzaW9uIGJpbmRpbmcgdXNlZCBmb3IgdGV4dHMgYXQgcnVudGltZS5cbiAqIEBwYXJhbSBleHBCaW5kaW5nXG4gKiBAcGFyYW0gY29udHJvbFxuICogQHJldHVybnMgQSBzdHJpbmcgYWZ0ZXIgcmVzb2x1dGlvbi5cbiAqL1xuZnVuY3Rpb24gX2ZudHJhbnNsYXRlZFRleHRGcm9tRXhwQmluZGluZ1N0cmluZyhleHBCaW5kaW5nOiBzdHJpbmcsIGNvbnRyb2w6IENvbnRyb2wpOiBzdHJpbmcge1xuXHQvLyBUaGUgaWRlYSBoZXJlIGlzIHRvIGNyZWF0ZSBkdW1teSBlbGVtZW50IHdpdGggdGhlIGV4cHJlc2lvbiBiaW5kaW5nLlxuXHQvLyBBZGRpbmcgaXQgYXMgZGVwZW5kZW50IHRvIHRoZSB2aWV3L2NvbnRyb2wgd291bGQgcHJvcGFnYXRlIGFsbCB0aGUgbW9kZWxzIHRvIHRoZSBkdW1teSBlbGVtZW50IGFuZCByZXNvbHZlIHRoZSBiaW5kaW5nLlxuXHQvLyBXZSByZW1vdmUgdGhlIGR1bW15IGVsZW1lbnQgYWZ0ZXIgdGhhdCBhbmQgZGVzdHJveSBpdC5cblxuXHRjb25zdCBhbnlSZXNvdXJjZVRleHQgPSBuZXcgQW55RWxlbWVudCh7IGFueVRleHQ6IGV4cEJpbmRpbmcgfSk7XG5cdGNvbnRyb2wuYWRkRGVwZW5kZW50KGFueVJlc291cmNlVGV4dCk7XG5cdGNvbnN0IHJlc3VsdFRleHQgPSBhbnlSZXNvdXJjZVRleHQuZ2V0QW55VGV4dCgpO1xuXHRjb250cm9sLnJlbW92ZURlcGVuZGVudChhbnlSZXNvdXJjZVRleHQpO1xuXHRhbnlSZXNvdXJjZVRleHQuZGVzdHJveSgpO1xuXG5cdHJldHVybiByZXN1bHRUZXh0O1xufVxuLyoqXG4gKiBDaGVjayBpZiB0aGUgY3VycmVudCBkZXZpY2UgaGFzIGEgc21hbGwgc2NyZWVuLlxuICogQHJldHVybnMgQSBCb29sZWFuLlxuICovXG5mdW5jdGlvbiBpc1NtYWxsRGV2aWNlKCk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gIURldmljZS5zeXN0ZW0uZGVza3RvcCB8fCBEZXZpY2UucmVzaXplLndpZHRoIDw9IDMyMDtcbn1cblxuLyoqXG4gKiBQYXJzZXMgYSBTZWxlY3Rpb25WYXJpYW50IG9yIFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQgYW5ub3RhdGlvbiBhbmQgY3JlYXRlcyB0aGUgY29ycmVzcG9uZGluZyBmaWx0ZXJzLlxuICogQHBhcmFtIGNvbnRyb2wgTURDIENoYXJ0LCBNREMgVGFibGUgb3IgTXVsdGlWaWV3IGNvbnRyb2wgb24gd2hpY2ggdGhlIGZpbHRlcnMgYXJlIGFwcGxpZWRcbiAqIEBwYXJhbSBhbm5vdGF0aW9uUGF0aCBTZWxlY3Rpb25WYXJpYW50IG9yIFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQgYW5ub3RhdGlvblxuICogQHJldHVybnMgUmV0dXJucyBhbiBhcnJheSBvZiBmaWx0ZXJzLlxuICovXG5mdW5jdGlvbiBnZXRGaWx0ZXJzRnJvbUFubm90YXRpb24oY29udHJvbDogQ29udHJvbCB8IE1EQ0NoYXJ0IHwgTURDVGFibGUsIGFubm90YXRpb25QYXRoOiBzdHJpbmcpOiBGaWx0ZXJbXSB7XG5cdGNvbnN0IG1ldGFNb2RlbCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChjb250cm9sIGFzIENvbnRyb2wpLmdldE1ldGFNb2RlbCgpO1xuXHRjb25zdCBzdkNvbnRleHQgPSBtZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQoYCR7Y29udHJvbC5kYXRhKFwiZW50aXR5VHlwZVwiKX0ke2Fubm90YXRpb25QYXRofWApO1xuXHRjb25zdCBwcm9wZXJ0eUZpbHRlcnM6IFJlY29yZDxzdHJpbmcsIEZpbHRlcltdPiA9IHt9O1xuXHRsZXQgYW5ub3RhdGlvbiA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMoc3ZDb250ZXh0KS50YXJnZXRPYmplY3Q7XG5cblx0aWYgKGlzQW5ub3RhdGlvbk9mVHlwZTxTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50Pihhbm5vdGF0aW9uLCBVSUFubm90YXRpb25UeXBlcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50VHlwZSkpIHtcblx0XHRhbm5vdGF0aW9uID0gYW5ub3RhdGlvbi5TZWxlY3Rpb25WYXJpYW50O1xuXHR9XG5cblx0aWYgKCFhbm5vdGF0aW9uIHx8ICFpc0Fubm90YXRpb25PZlR5cGU8U2VsZWN0aW9uVmFyaWFudFR5cGU+KGFubm90YXRpb24sIFVJQW5ub3RhdGlvblR5cGVzLlNlbGVjdGlvblZhcmlhbnRUeXBlKSkge1xuXHRcdHJldHVybiBbXTtcblx0fVxuXG5cdChhbm5vdGF0aW9uLlNlbGVjdE9wdGlvbnMgfHwgW10pLmZvckVhY2goKHNlbGVjdE9wdGlvbikgPT4ge1xuXHRcdGlmIChzZWxlY3RPcHRpb24uUHJvcGVydHlOYW1lPy4kdGFyZ2V0ICYmIHNlbGVjdE9wdGlvbi5SYW5nZXM/Lmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5VHlwZSA9IHNlbGVjdE9wdGlvbi5Qcm9wZXJ0eU5hbWUuJHRhcmdldC50eXBlO1xuXHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoID0gc2VsZWN0T3B0aW9uLlByb3BlcnR5TmFtZS52YWx1ZTtcblx0XHRcdGZvciAoY29uc3QgaiBpbiBzZWxlY3RPcHRpb24uUmFuZ2VzKSB7XG5cdFx0XHRcdGNvbnN0IHJhbmdlID0gZ2V0UmFuZ2VEZWZpbml0aW9uKHNlbGVjdE9wdGlvbi5SYW5nZXNbal0sIHByb3BlcnR5VHlwZSk7XG5cdFx0XHRcdHByb3BlcnR5RmlsdGVyc1twcm9wZXJ0eVBhdGhdID0gKHByb3BlcnR5RmlsdGVyc1twcm9wZXJ0eVBhdGhdID8/IFtdKS5jb25jYXQoXG5cdFx0XHRcdFx0bmV3IEZpbHRlcihwcm9wZXJ0eVBhdGgsIHJhbmdlLm9wZXJhdG9yIGFzIEZpbHRlck9wZXJhdG9yLCByYW5nZS5yYW5nZUxvdywgcmFuZ2UucmFuZ2VIaWdoKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0Y29uc3QgZmlsdGVycyA9IFtdO1xuXHRmb3IgKGNvbnN0IHBhdGggaW4gcHJvcGVydHlGaWx0ZXJzKSB7XG5cdFx0ZmlsdGVycy5wdXNoKFxuXHRcdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRcdGZpbHRlcnM6IHByb3BlcnR5RmlsdGVyc1twYXRoXSxcblx0XHRcdFx0YW5kOiBmYWxzZVxuXHRcdFx0fSlcblx0XHQpO1xuXHR9XG5cdHJldHVybiBmaWx0ZXJzO1xufVxuXG5mdW5jdGlvbiBnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yUGF0aChcblx0c01ldGFQYXRoOiBzdHJpbmcsXG5cdG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRzRW50aXR5U2V0OiBzdHJpbmcsXG5cdG9EaWFnbm9zdGljczogRGlhZ25vc3RpY3Ncbik6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PiB7XG5cdGNvbnN0IG9Db250ZXh0ID0gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzTWV0YVBhdGgpIGFzIE9EYXRhVjRDb250ZXh0O1xuXHRyZXR1cm4gQ29udmVydGVyQ29udGV4dD8uY3JlYXRlQ29udmVydGVyQ29udGV4dEZvck1hY3JvKHNFbnRpdHlTZXQsIG9Db250ZXh0IHx8IG9NZXRhTW9kZWwsIG9EaWFnbm9zdGljcywgbWVyZ2VPYmplY3RzKTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBjb250ZXh0IG9mIHRoZSBEcmFmdFJvb3QgcGF0aC5cbiAqIElmIGEgdmlldyBoYXMgYmVlbiBjcmVhdGVkIHdpdGggdGhlIGRyYWZ0IFJvb3QgUGF0aCwgdGhpcyBtZXRob2QgcmV0dXJucyBpdHMgYmluZGluZ0NvbnRleHQuXG4gKiBXaGVyZSBubyB2aWV3IGlzIGZvdW5kIGEgbmV3IGNyZWF0ZWQgY29udGV4dCBpcyByZXR1cm5lZC5cbiAqIFRoZSBuZXcgY3JlYXRlZCBjb250ZXh0IHJlcXVlc3QgdGhlIGtleSBvZiB0aGUgZW50aXR5IGluIG9yZGVyIHRvIGdldCB0aGUgRXRhZyBvZiB0aGlzIGVudGl0eS5cbiAqIEBwYXJhbSBwcm9ncmFtbWluZ01vZGVsXG4gKiBAcGFyYW0gdmlld1xuICogQHBhcmFtIGFwcENvbXBvbmVudFxuICogQHBhcmFtIGJpbmRpbmdQYXJhbWV0ZXJzXG4gKiBAcmV0dXJucyBSZXR1cm5zIGEgUHJvbWlzZVxuICovXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVSb290Q29udGV4dChcblx0cHJvZ3JhbW1pbmdNb2RlbDogc3RyaW5nLFxuXHR2aWV3OiBWaWV3LFxuXHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0YmluZGluZ1BhcmFtZXRlcnM/OiBCaW5kQ29udGV4dFBhcmFtZXRlcnNcbik6IFByb21pc2U8Q29udGV4dCB8IHVuZGVmaW5lZD4ge1xuXHRjb25zdCByZXN1bHQgPSBmaW5kT3JDcmVhdGVSb290Q29udGV4dChcblx0XHR2aWV3LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQsXG5cdFx0cHJvZ3JhbW1pbmdNb2RlbCxcblx0XHR2aWV3LFxuXHRcdGFwcENvbXBvbmVudCxcblx0XHRiaW5kaW5nUGFyYW1ldGVycyxcblx0XHR0cnVlXG5cdCk7XG5cdGlmIChyZXN1bHQuaXNOZXcgJiYgcmVzdWx0LnJvb3RDb250ZXh0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRhd2FpdCBDb21tb25VdGlscy53YWl0Rm9yQ29udGV4dFJlcXVlc3RlZChyZXN1bHQucm9vdENvbnRleHQpO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdC5yb290Q29udGV4dDtcbn1cblxuLyoqXG4gKiBTeW5jIGZ1bmN0aW9uIHRvIGZpbmQgb3IgY3JlYXRlIGEgcm9vdCBjb250ZXh0IGZvciBhIGdpdmVuIGNvbnRleHQuXG4gKiBAcGFyYW0gY29udGV4dFxuICogQHBhcmFtIHByb2dyYW1taW5nTW9kZWxcbiAqIEBwYXJhbSB2aWV3XG4gKiBAcGFyYW0gYXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gYmluZGluZ1BhcmFtZXRlcnNcbiAqIEBwYXJhbSB1c2VDYWNoZVxuICogQHJldHVybnMgVGhlIGNvbnRleHQgYW5kIGEgYm9vbGVhbiB0byBzcGVjaWZ5IGlmIGEgbmV3IGNvbnRleHQgd2FzIGNyZWF0ZWRcbiAqL1xuZnVuY3Rpb24gZmluZE9yQ3JlYXRlUm9vdENvbnRleHQoXG5cdGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkIHwgbnVsbCxcblx0cHJvZ3JhbW1pbmdNb2RlbDogc3RyaW5nLFxuXHR2aWV3OiBWaWV3LFxuXHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0YmluZGluZ1BhcmFtZXRlcnM/OiBCaW5kQ29udGV4dFBhcmFtZXRlcnMsXG5cdHVzZUNhY2hlID0gZmFsc2Vcbik6IHsgcm9vdENvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkOyBpc05ldzogYm9vbGVhbiB9IHtcblx0aWYgKGNvbnRleHQpIHtcblx0XHRjb25zdCByb290Q29udGV4dFBhdGggPVxuXHRcdFx0cHJvZ3JhbW1pbmdNb2RlbCA9PT0gXCJEcmFmdFwiID8gTW9kZWxIZWxwZXIuZ2V0RHJhZnRSb290UGF0aChjb250ZXh0KSA6IE1vZGVsSGVscGVyLmdldFN0aWNreVJvb3RQYXRoKGNvbnRleHQpO1xuXHRcdGxldCBzaW1wbGVSb290Q29udGV4dDogT0RhdGFWNENvbnRleHQ7XG5cdFx0aWYgKHJvb3RDb250ZXh0UGF0aCkge1xuXHRcdFx0aWYgKGNvbnRleHQuZ2V0UGF0aCgpID09PSByb290Q29udGV4dFBhdGgpIHtcblx0XHRcdFx0cmV0dXJuIHsgcm9vdENvbnRleHQ6IGNvbnRleHQsIGlzTmV3OiBmYWxzZSB9O1xuXHRcdFx0fVxuXHRcdFx0Ly8gQ2hlY2sgaWYgYSB2aWV3IG1hdGNoZXMgd2l0aCB0aGUgZHJhZnQgcm9vdCBwYXRoLCBhbmQgaGFkIGFscmVhZHkgbG9hZGVkIGl0cyBjb250ZXh0XG5cdFx0XHRjb25zdCBleGlzdGluZ0JpbmRpbmdDb250ZXh0T25QYWdlID0gYXBwQ29tcG9uZW50XG5cdFx0XHRcdC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKVxuXHRcdFx0XHQuZ2V0SW5zdGFuY2VkVmlld3MoKVxuXHRcdFx0XHQuZmluZChcblx0XHRcdFx0XHQocGFnZVZpZXc6IFZpZXcpID0+XG5cdFx0XHRcdFx0XHRwYWdlVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCkgPT09IHJvb3RDb250ZXh0UGF0aCAmJlxuXHRcdFx0XHRcdFx0cGFnZVZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0T2JqZWN0KCkgIT09IHVuZGVmaW5lZFxuXHRcdFx0XHQpXG5cdFx0XHRcdD8uZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dDtcblx0XHRcdGlmIChleGlzdGluZ0JpbmRpbmdDb250ZXh0T25QYWdlKSB7XG5cdFx0XHRcdHJldHVybiB7IHJvb3RDb250ZXh0OiBleGlzdGluZ0JpbmRpbmdDb250ZXh0T25QYWdlLCBpc05ldzogZmFsc2UgfTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB2aWV3LmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsO1xuXHRcdFx0c2ltcGxlUm9vdENvbnRleHQgPSBpbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KFwiL3NpbXBsZVJvb3RDb250ZXh0XCIpO1xuXHRcdFx0aWYgKHVzZUNhY2hlICYmIHNpbXBsZVJvb3RDb250ZXh0Py5nZXRQYXRoKCkgPT09IHJvb3RDb250ZXh0UGF0aCkge1xuXHRcdFx0XHRyZXR1cm4geyByb290Q29udGV4dDogc2ltcGxlUm9vdENvbnRleHQsIGlzTmV3OiBmYWxzZSB9O1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgbW9kZWwgPSBjb250ZXh0LmdldE1vZGVsKCk7XG5cdFx0XHRzaW1wbGVSb290Q29udGV4dCA9IGNyZWF0ZU5ld1Jvb3RDb250ZXh0KG1vZGVsLCByb290Q29udGV4dFBhdGgsIGJpbmRpbmdQYXJhbWV0ZXJzKTtcblx0XHRcdC8vIFN0b3JlIHRoaXMgbmV3IGNyZWF0ZWQgY29udGV4dCB0byB1c2UgaXQgb24gdGhlIG5leHQgaXRlcmF0aW9uc1xuXHRcdFx0aWYgKHVzZUNhY2hlKSB7XG5cdFx0XHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvc2ltcGxlUm9vdENvbnRleHRcIiwgc2ltcGxlUm9vdENvbnRleHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4geyByb290Q29udGV4dDogc2ltcGxlUm9vdENvbnRleHQsIGlzTmV3OiB0cnVlIH07XG5cdFx0fVxuXHR9XG5cdHJldHVybiB7XG5cdFx0cm9vdENvbnRleHQ6IHVuZGVmaW5lZCxcblx0XHRpc05ldzogZmFsc2Vcblx0fTtcbn1cblxuLyoqXG4gKiBTeW5jIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyByb290IGNvbnRleHQgZm9yIGEgZ2l2ZW4gY29udGV4dC5cbiAqIEBwYXJhbSBtb2RlbCBUaGUgb0RhdGFNb2RlbFxuICogQHBhcmFtIHJvb3RDb250ZXh0UGF0aCBUaGUgcm9vdCBjb250ZXh0IHBhdGhcbiAqIEBwYXJhbSBiaW5kaW5nUGFyYW1ldGVycyBUaGUgYmluZGluZyBwYXJhbWV0ZXJzIHdoaWNoIGNhbiBiZSBPRGF0YSBxdWVyeSBvcHRpb25zXG4gKiBAcmV0dXJucyBUaGUgcm9vdCBjb250ZXh0XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU5ld1Jvb3RDb250ZXh0KG1vZGVsOiBPRGF0YU1vZGVsLCByb290Q29udGV4dFBhdGg6IHN0cmluZywgYmluZGluZ1BhcmFtZXRlcnM/OiBCaW5kQ29udGV4dFBhcmFtZXRlcnMpOiBPRGF0YVY0Q29udGV4dCB7XG5cdGNvbnN0IG1lc3NhZ2VzUGF0aCA9IE1vZGVsSGVscGVyLmdldE1lc3NhZ2VzUGF0aChtb2RlbC5nZXRNZXRhTW9kZWwoKSwgcm9vdENvbnRleHRQYXRoKTtcblx0Y29uc3QgbmV3QmluZGluZ1BhcmFtZXRlcnMgPSB7IC4uLihiaW5kaW5nUGFyYW1ldGVycyA/PyB7fSkgfTtcblx0aWYgKG1lc3NhZ2VzUGF0aCAmJiAoIW5ld0JpbmRpbmdQYXJhbWV0ZXJzLiRzZWxlY3QgfHwgbmV3QmluZGluZ1BhcmFtZXRlcnMuJHNlbGVjdC5pbmNsdWRlcyhtZXNzYWdlc1BhdGgpID09PSBmYWxzZSkpIHtcblx0XHRjb25zdCBuZXdTZWxlY3QgPSBuZXdCaW5kaW5nUGFyYW1ldGVycy4kc2VsZWN0Py5zcGxpdChcIixcIikgPz8gW107XG5cdFx0bmV3U2VsZWN0LnB1c2gobWVzc2FnZXNQYXRoKTtcblx0XHRuZXdCaW5kaW5nUGFyYW1ldGVycy4kc2VsZWN0ID0gbmV3U2VsZWN0LmpvaW4oXCIsXCIpO1xuXHR9XG5cdHJldHVybiBtb2RlbC5iaW5kQ29udGV4dChyb290Q29udGV4dFBhdGgsIHVuZGVmaW5lZCwgbmV3QmluZGluZ1BhcmFtZXRlcnMpLmdldEJvdW5kQ29udGV4dCgpO1xufVxuXG4vKipcbiAqIEhlbHBlciBtZXRob2QgdG8gZGV0ZXJtaW5lIGlmIHRoZSBzb3VyY2UgaXMgdG8gYmUgZGlzcGxheSBmb3IgdGhlIGVkaXRtb2RlIG9yIG5vdC5cbiAqIEBwYXJhbSBzb3VyY2VcbiAqIEByZXR1cm5zIElmIHRoZSBzb3VyY2UgaXMgdG8gYmUgZGlzcGxheWVkIGluIGVkaXQgbW9kZVxuICovXG5mdW5jdGlvbiBnZXRJc0VkaXRhYmxlKHNvdXJjZTogTWFuYWdlZE9iamVjdCB8IFBhZ2VDb250cm9sbGVyKTogYm9vbGVhbiB7XG5cdGNvbnN0IG1hbmFnZWRPYmplY3QgPSBzb3VyY2UuaXNBPFBhZ2VDb250cm9sbGVyPihcInNhcC5mZS5jb3JlLlBhZ2VDb250cm9sbGVyXCIpID8gc291cmNlLmdldFZpZXcoKSA6IHNvdXJjZTtcblx0cmV0dXJuIG1hbmFnZWRPYmplY3QuZ2V0QmluZGluZ0NvbnRleHQoXCJ1aVwiKT8uZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKTtcbn1cblxuY29uc3QgQ29tbW9uVXRpbHMgPSB7XG5cdElOTElORUVESVRfVVBEQVRFR1JPVVBJRDogXCJpbmxpbmVcIixcblx0ZmlyZUJ1dHRvblByZXNzOiBmbkZpcmVCdXR0b25QcmVzcyxcblx0Z2V0VGFyZ2V0VmlldzogZ2V0VGFyZ2V0Vmlldyxcblx0Z2V0Q3VycmVudFBhZ2VWaWV3OiBnZXRDdXJyZW50UGFnZVZpZXcsXG5cdGhhc1RyYW5zaWVudENvbnRleHQ6IGZuSGFzVHJhbnNpZW50Q29udGV4dHMsXG5cdHVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlsczogZm5VcGRhdGVSZWxhdGVkQXBwc0RldGFpbHMsXG5cdGdldEFwcENvbXBvbmVudDogZ2V0QXBwQ29tcG9uZW50LFxuXHRnZXRDb250ZXh0UGF0aFByb3BlcnRpZXM6IGZuR2V0Q29udGV4dFBhdGhQcm9wZXJ0aWVzLFxuXHRnZXRQYXJhbWV0ZXJJbmZvOiBnZXRQYXJhbWV0ZXJJbmZvLFxuXHR1cGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eTogZm5VcGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eSxcblx0Z2V0RW50aXR5U2V0TmFtZTogZ2V0RW50aXR5U2V0TmFtZSxcblx0Z2V0QWN0aW9uUGF0aDogZ2V0QWN0aW9uUGF0aCxcblx0Y29tcHV0ZURpc3BsYXlNb2RlOiBjb21wdXRlRGlzcGxheU1vZGUsXG5cdGlzU3RpY2t5RWRpdE1vZGU6IGlzU3RpY2t5RWRpdE1vZGUsXG5cdGdldE9wZXJhdG9yc0Zvckd1aWRQcm9wZXJ0eTogZ2V0T3BlcmF0b3JzRm9yR3VpZFByb3BlcnR5LFxuXHRhZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudDogYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQsXG5cdHNldFVzZXJEZWZhdWx0czogc2V0VXNlckRlZmF1bHRzLFxuXHRnZXRJQk5BY3Rpb25zOiBmbkdldElCTkFjdGlvbnMsXG5cdGdldEhlYWRlckZhY2V0SXRlbUNvbmZpZ0ZvckV4dGVybmFsTmF2aWdhdGlvbjogZ2V0SGVhZGVyRmFjZXRJdGVtQ29uZmlnRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uLFxuXHRnZXRTZW1hbnRpY09iamVjdE1hcHBpbmc6IGdldFNlbWFudGljT2JqZWN0TWFwcGluZyxcblx0c2V0U2VtYW50aWNPYmplY3RNYXBwaW5nczogc2V0U2VtYW50aWNPYmplY3RNYXBwaW5ncyxcblx0Z2V0U2VtYW50aWNPYmplY3RQcm9taXNlOiBmbkdldFNlbWFudGljT2JqZWN0UHJvbWlzZSxcblx0Z2V0U2VtYW50aWNPYmplY3RzRnJvbVBhdGg6IGZuR2V0U2VtYW50aWNPYmplY3RzRnJvbVBhdGgsXG5cdHdhaXRGb3JDb250ZXh0UmVxdWVzdGVkOiB3YWl0Rm9yQ29udGV4dFJlcXVlc3RlZCxcblx0Z2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoOiBnZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGgsXG5cdGdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb246IGdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb24sXG5cdGdldEFkZGl0aW9uYWxQYXJhbXNGb3JDcmVhdGU6IGdldEFkZGl0aW9uYWxQYXJhbXNGb3JDcmVhdGUsXG5cdHJlcXVlc3RTaW5nbGV0b25Qcm9wZXJ0eTogcmVxdWVzdFNpbmdsZXRvblByb3BlcnR5LFxuXHR0ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudDogdGVtcGxhdGVDb250cm9sRnJhZ21lbnQsXG5cdEZpbHRlclJlc3RyaWN0aW9uczoge1xuXHRcdFJFUVVJUkVEX1BST1BFUlRJRVM6IFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIsXG5cdFx0Tk9OX0ZJTFRFUkFCTEVfUFJPUEVSVElFUzogXCJOb25GaWx0ZXJhYmxlUHJvcGVydGllc1wiLFxuXHRcdEFMTE9XRURfRVhQUkVTU0lPTlM6IFwiRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zXCJcblx0fSxcblx0QWxsb3dlZEV4cHJlc3Npb25zUHJpbzogW1wiU2luZ2xlVmFsdWVcIiwgXCJNdWx0aVZhbHVlXCIsIFwiU2luZ2xlUmFuZ2VcIiwgXCJNdWx0aVJhbmdlXCIsIFwiU2VhcmNoRXhwcmVzc2lvblwiLCBcIk11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cIl0sXG5cdG5vcm1hbGl6ZVNlYXJjaFRlcm06IG5vcm1hbGl6ZVNlYXJjaFRlcm0sXG5cdHNldENvbnRleHRzQmFzZWRPbk9wZXJhdGlvbkF2YWlsYWJsZTogc2V0Q29udGV4dHNCYXNlZE9uT3BlcmF0aW9uQXZhaWxhYmxlLFxuXHRzZXREeW5hbWljQWN0aW9uQ29udGV4dHM6IHNldER5bmFtaWNBY3Rpb25Db250ZXh0cyxcblx0cmVxdWVzdFByb3BlcnR5OiByZXF1ZXN0UHJvcGVydHksXG5cdGdldFBhcmFtZXRlclBhdGg6IGdldFBhcmFtZXRlclBhdGgsXG5cdGdldFJlbGF0ZWRBcHBzTWVudUl0ZW1zOiBfZ2V0UmVsYXRlZEFwcHNNZW51SXRlbXMsXG5cdGdldFRyYW5zbGF0ZWRUZXh0RnJvbUV4cEJpbmRpbmdTdHJpbmc6IF9mbnRyYW5zbGF0ZWRUZXh0RnJvbUV4cEJpbmRpbmdTdHJpbmcsXG5cdHVwZGF0ZVJlbGF0ZUFwcHNNb2RlbDogdXBkYXRlUmVsYXRlQXBwc01vZGVsLFxuXHRnZXRTZW1hbnRpY09iamVjdEFubm90YXRpb25zOiBfZ2V0U2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyxcblx0Z2V0RmlsdGVyc0Zyb21Bbm5vdGF0aW9uOiBnZXRGaWx0ZXJzRnJvbUFubm90YXRpb24sXG5cdGNyZWF0ZVJvb3RDb250ZXh0OiBjcmVhdGVSb290Q29udGV4dCxcblx0ZmluZE9yQ3JlYXRlUm9vdENvbnRleHQsXG5cdHVwZGF0ZU1lbnVCdXR0b25WaXNpYmxpdHk6IHVwZGF0ZU1lbnVCdXR0b25WaXNpYmxpdHksXG5cdGlzU21hbGxEZXZpY2UsXG5cdGdldENvbnZlcnRlckNvbnRleHRGb3JQYXRoLFxuXHRnZXRJc0VkaXRhYmxlOiBnZXRJc0VkaXRhYmxlXG59O1xuXG5leHBvcnQgZGVmYXVsdCBDb21tb25VdGlscztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBOEVBLFNBQVNBLG1CQUFtQkEsQ0FBQ0MsV0FBK0IsRUFBc0I7SUFDakYsSUFBSSxDQUFDQSxXQUFXLEVBQUU7TUFDakIsT0FBT0MsU0FBUztJQUNqQjs7SUFFQTtJQUNBLElBQUlELFdBQVcsS0FBSyxJQUFJLEVBQUU7TUFDekIsT0FBTyxHQUFHLEdBQUdBLFdBQVcsR0FBRyxHQUFHO0lBQy9CO0lBRUEsTUFBTUUsbUJBQW1CLEdBQUdGLFdBQVcsQ0FBQ0csT0FBTyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLElBQUlELG1CQUFtQixLQUFLLEVBQUUsSUFBSUEsbUJBQW1CLEtBQUssR0FBRyxFQUFFO01BQzlELE9BQU9ELFNBQVM7SUFDakI7SUFDQSxPQUFPQyxtQkFBbUI7RUFDM0I7RUFFQSxlQUFlRSx1QkFBdUJBLENBQUNDLGNBQThCLEVBQWlCO0lBQ3JGLE1BQU1DLEtBQUssR0FBR0QsY0FBYyxDQUFDRSxRQUFRLENBQUMsQ0FBQztJQUN2QyxNQUFNQyxTQUFTLEdBQUdGLEtBQUssQ0FBQ0csWUFBWSxDQUFDLENBQUM7SUFDdEMsTUFBTUMsVUFBVSxHQUFHRixTQUFTLENBQUNHLFdBQVcsQ0FBQ04sY0FBYyxDQUFDTyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLE1BQU1DLFNBQVMsR0FBR0Msa0JBQWtCLENBQUNDLDJCQUEyQixDQUFDUCxTQUFTLENBQUNRLFVBQVUsQ0FBQ04sVUFBVSxDQUFDLENBQUM7SUFDbEcsTUFBTUwsY0FBYyxDQUFDWSxlQUFlLENBQUNKLFNBQVMsQ0FBQ0ssZ0JBQWdCLENBQUNDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRUMsSUFBSSxDQUFDO0VBQy9FO0VBRUEsU0FBU0Msc0JBQXNCQSxDQUFDQyxZQUE4QixFQUFXO0lBQ3hFLElBQUlDLHFCQUFxQixHQUFHLEtBQUs7SUFDakMsSUFBSUQsWUFBWSxFQUFFO01BQ2pCQSxZQUFZLENBQUNFLGtCQUFrQixDQUFDLENBQUMsQ0FBQ0MsT0FBTyxDQUFDLFVBQVVDLFFBQXdCLEVBQUU7UUFDN0UsSUFBSUEsUUFBUSxJQUFJQSxRQUFRLENBQUNDLFdBQVcsQ0FBQyxDQUFDLEVBQUU7VUFDdkNKLHFCQUFxQixHQUFHLElBQUk7UUFDN0I7TUFDRCxDQUFDLENBQUM7SUFDSDtJQUNBLE9BQU9BLHFCQUFxQjtFQUM3Qjs7RUFFQTs7RUFFQSxlQUFlSyxhQUFhQSxDQUMzQkMsbUJBQW1DLEVBQ25DQyxpQkFBbUMsRUFDbkNDLGVBQW1DLEVBQ25DQyxNQUEwQixFQUNOO0lBQ3BCLE9BQU9ILG1CQUFtQixDQUFDSSxRQUFRLENBQUMsQ0FDbkM7TUFDQ0MsY0FBYyxFQUFFSCxlQUFlO01BQy9CSSxNQUFNLEVBQUVIO0lBQ1QsQ0FBQyxDQUNELENBQUM7RUFDSDtFQUdBO0VBQ0EsU0FBU0ksZUFBZUEsQ0FBQ0MsUUFBaUMsRUFBZTtJQUN4RSxNQUFNQyxXQUF3QixHQUFHLEVBQUU7SUFDbkMsTUFBTUMsWUFBWSxHQUFHQyxNQUFNLENBQUNyQixJQUFJLENBQUNrQixRQUFRLENBQUM7SUFDMUMsSUFBSUksZ0JBQTJCO0lBQy9CLEtBQUssTUFBTUMsT0FBTyxJQUFJSCxZQUFZLEVBQUU7TUFDbkNFLGdCQUFnQixHQUFHO1FBQ2xCRSxhQUFhLEVBQUU7VUFDZEMsYUFBYSxFQUFFRjtRQUNoQixDQUFDO1FBQ0RHLHNCQUFzQixFQUFFUixRQUFRLENBQUNLLE9BQU87TUFDekMsQ0FBQztNQUNESixXQUFXLENBQUNRLElBQUksQ0FBQ0wsZ0JBQWdCLENBQUM7SUFDbkM7SUFFQSxPQUFPSCxXQUFXO0VBQ25CO0VBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTUyx3QkFBd0JBLENBQ2hDQyxTQUFtQixFQUNuQkMsZ0JBQTJCLEVBQzNCQyxhQUFzQixFQUN0QkMsTUFBc0IsRUFDdEJDLGVBQTJCLEVBQ3BCO0lBQ1AsS0FBSyxNQUFNQyxLQUFLLElBQUlMLFNBQVMsRUFBRTtNQUM5QixLQUFLLE1BQU1NLEtBQUssSUFBSUQsS0FBSyxFQUFFO1FBQzFCLE1BQU1FLE9BQU8sR0FBR0QsS0FBSyxDQUFDRSxNQUFNO1FBQzVCLE1BQU1DLE9BQU8sR0FBR0YsT0FBTyxDQUFDRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNBLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkQsSUFDRU4sZUFBZSxJQUFJQSxlQUFlLENBQUNPLFFBQVEsQ0FBQ0YsT0FBTyxDQUFDLElBQ3BELENBQUNMLGVBQWUsSUFBSUgsZ0JBQWdCLElBQUksQ0FBQ0EsZ0JBQWdCLENBQUNVLFFBQVEsQ0FBQ0YsT0FBTyxDQUFFLEVBQzVFO1VBQ0ROLE1BQU0sQ0FBQ0wsSUFBSSxDQUFDO1lBQ1hjLElBQUksRUFBRU4sS0FBSyxDQUFDTSxJQUFJO1lBQ2hCQyxlQUFlLEVBQUVOLE9BQU8sQ0FBQ0csS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDQSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BESSxZQUFZLEVBQUVMLE9BQU8sQ0FBQ0MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQ0ssWUFBWSxFQUFFYjtVQUNmLENBQUMsQ0FBQztRQUNIO01BQ0Q7SUFDRDtFQUNEO0VBVUEsU0FBU2Msa0JBQWtCQSxDQUMxQkMsMEJBQTBDLEVBQzFDQyxlQUF3QixFQUN4QkMsZ0JBQWdDLEVBQ2hDQyxNQUFnQixFQUNUO0lBQ1AsSUFBSUEsTUFBTSxJQUFJQSxNQUFNLENBQUNDLE1BQU0sR0FBRyxDQUFDLEVBQUU7TUFDaEMsTUFBTWpCLGVBQWUsR0FBR2EsMEJBQTBCLENBQUNLLGNBQWMsSUFBSXJFLFNBQVM7TUFDOUUsTUFBTWdELGdCQUFnQixHQUFHZ0IsMEJBQTBCLENBQUNNLGtCQUFrQixHQUFHTiwwQkFBMEIsQ0FBQ00sa0JBQWtCLEdBQUcsRUFBRTtNQUMzSCxNQUFNakMsV0FBVyxHQUFHMkIsMEJBQTBCLENBQUNPLE9BQU8sR0FBR3BDLGVBQWUsQ0FBQzZCLDBCQUEwQixDQUFDTyxPQUFPLENBQUMsR0FBRyxFQUFFO01BQ2pILE1BQU10QixhQUFhLEdBQUc7UUFBRXVCLGtCQUFrQixFQUFFUCxlQUFlO1FBQUVRLHFCQUFxQixFQUFFcEM7TUFBWSxDQUFDO01BQ2pHUyx3QkFBd0IsQ0FBQ3FCLE1BQU0sRUFBRW5CLGdCQUFnQixFQUFFQyxhQUFhLEVBQUVpQixnQkFBZ0IsRUFBRWYsZUFBZSxDQUFDO0lBQ3JHO0VBQ0Q7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0VBRUEsU0FBU3VCLDhDQUE4Q0EsQ0FDdERDLHVCQUFzQyxFQUN0Q1YsZUFBd0IsRUFDeEJXLG1CQUFtQyxFQUNuQ1QsTUFBZ0IsRUFDVDtJQUNQLElBQUlBLE1BQU0sQ0FBQ0MsTUFBTSxHQUFHLENBQUMsRUFBRTtNQUN0QixNQUFNUyxPQUFPLEdBQUcsQ0FBQ0YsdUJBQXVCLENBQUNHLE1BQU0sQ0FBQztNQUNoRCxNQUFNQyxlQUFtQixHQUFHLEVBQUU7TUFDOUIsTUFBTUMsVUFBYyxHQUFHLEVBQUU7TUFDekIsTUFBTWxCLFlBQVksR0FBRztRQUFFVSxrQkFBa0IsRUFBRVAsZUFBZTtRQUFFUSxxQkFBcUIsRUFBRU87TUFBVyxDQUFDO01BQy9GbEMsd0JBQXdCLENBQUNxQixNQUFNLEVBQUVZLGVBQWUsRUFBRWpCLFlBQVksRUFBRWMsbUJBQW1CLEVBQUVDLE9BQU8sQ0FBQztJQUM5RjtFQUNEO0VBVUEsZUFBZUkscUJBQXFCQSxDQUNuQ2hCLGVBQXdCLEVBQ3hCaUIsTUFBMkMsRUFDM0NyRCxpQkFBbUMsRUFDbkNzRCxRQUFxQyxFQUNyQ0MsVUFBMEIsRUFDMUJDLFNBQWlCLEVBQ2pCQyxZQUEwQixFQUNLO0lBQy9CLE1BQU0xRCxtQkFBbUMsR0FBRzBELFlBQVksQ0FBQ0MsZ0JBQWdCLENBQUMsQ0FBQztJQUMzRSxNQUFNeEQsTUFBK0IsR0FBRyxDQUFDLENBQUM7SUFDMUMsSUFBSXlELGNBQWMsR0FBRyxFQUFFO01BQ3RCQyxjQUFjLEdBQUcsRUFBRTtJQUNwQixJQUFJQywwQkFBMEI7SUFDOUIsSUFBSUMscUJBQTBDLEdBQUcsRUFBRTtJQUNuRCxJQUFJM0MsZ0JBQTJCLEdBQUcsRUFBRTtJQUNwQyxJQUFJNEMsZUFBeUI7SUFFN0IsZUFBZUMsOEJBQThCQSxDQUFBLEVBQXNCO01BQ2xFLE1BQU1DLFVBQVUsR0FBR2xFLG1CQUFtQixDQUFDbUUsY0FBYyxDQUFDQyxRQUFRLENBQUNDLFFBQVEsQ0FBQ0MsSUFBSSxDQUFDO01BQzdFVixjQUFjLEdBQUdNLFVBQVUsQ0FBQzdELGNBQWMsQ0FBQyxDQUFDO01BQzVDd0QsY0FBYyxHQUFHSyxVQUFVLENBQUNoQixNQUFNO01BQ2xDLE9BQU9uRCxhQUFhLENBQUNDLG1CQUFtQixFQUFFQyxpQkFBaUIsRUFBRTJELGNBQWMsRUFBRXpELE1BQU0sQ0FBQztJQUNyRjtJQUVBLElBQUk7TUFDSCxJQUFJbUQsTUFBTSxFQUFFO1FBQ1gsSUFBSUMsUUFBUSxJQUFJQSxRQUFRLENBQUNmLE1BQU0sR0FBRyxDQUFDLEVBQUU7VUFDcEMsS0FBSyxNQUFNM0IsT0FBTyxJQUFJMEMsUUFBUSxFQUFFO1lBQy9CLE1BQU1nQixPQUFPLEdBQUcxRCxPQUFPLENBQUNFLGFBQWE7WUFDckMsSUFBSSxDQUFDWixNQUFNLENBQUNvRSxPQUFPLENBQUMsRUFBRTtjQUNyQnBFLE1BQU0sQ0FBQ29FLE9BQU8sQ0FBQyxHQUFHO2dCQUFFQyxLQUFLLEVBQUVsQixNQUFNLENBQUNpQixPQUFPO2NBQUUsQ0FBQztZQUM3QztVQUNEO1FBQ0QsQ0FBQyxNQUFNO1VBQ047VUFDQSxNQUFNRSxjQUFjLEdBQUdqQixVQUFVLENBQUNrQixTQUFTLENBQUMsR0FBR2pCLFNBQVMsYUFBYSxDQUFDO1VBQ3RFLEtBQUssTUFBTWtCLEdBQUcsSUFBSUYsY0FBYyxFQUFFO1lBQ2pDLE1BQU1HLE9BQU8sR0FBR0gsY0FBYyxDQUFDRSxHQUFHLENBQUM7WUFDbkMsSUFBSSxDQUFDeEUsTUFBTSxDQUFDeUUsT0FBTyxDQUFDLEVBQUU7Y0FDckJ6RSxNQUFNLENBQUN5RSxPQUFPLENBQUMsR0FBRztnQkFBRUosS0FBSyxFQUFFbEIsTUFBTSxDQUFDc0IsT0FBTztjQUFFLENBQUM7WUFDN0M7VUFDRDtRQUNEO01BQ0Q7TUFDQTs7TUFFQSxNQUFNQyxhQUFhLEdBQUdDLGFBQWEsQ0FBQzdFLGlCQUFpQixDQUFDLENBQUM4RSxXQUFXLENBQUMsQ0FBeUI7TUFDNUYsTUFBTXpDLGdCQUFnQyxHQUFHLEVBQUU7TUFDM0MsSUFBSTBDLHFCQUFxQjtNQUN6QixJQUFJSCxhQUFhLENBQUNJLHlCQUF5QixFQUFFO1FBQzVDakIsZUFBZSxHQUFHckQsTUFBTSxDQUFDckIsSUFBSSxDQUFDdUYsYUFBYSxDQUFDSSx5QkFBeUIsQ0FBQztRQUN0RSxLQUFLLE1BQU1wRSxPQUFPLElBQUltRCxlQUFlLEVBQUU7VUFDdENnQixxQkFBcUIsR0FBRyxNQUFNRSxPQUFPLENBQUNDLE9BQU8sQ0FBQ3BGLGFBQWEsQ0FBQ0MsbUJBQW1CLEVBQUVDLGlCQUFpQixFQUFFWSxPQUFPLEVBQUVWLE1BQU0sQ0FBQyxDQUFDO1VBQ3JIZ0Msa0JBQWtCLENBQ2pCMEMsYUFBYSxDQUFDSSx5QkFBeUIsQ0FBQ3BFLE9BQU8sQ0FBQyxFQUNoRHdCLGVBQWUsRUFDZkMsZ0JBQWdCLEVBQ2hCMEMscUJBQ0QsQ0FBQztRQUNGO01BQ0Q7O01BRUE7TUFDQTtNQUNBOztNQUVBLE1BQU1oQyxtQkFBbUMsR0FBRyxFQUFFO01BQzlDLE1BQU1vQyxhQUE0QixHQUFHMUIsWUFBWSxDQUFDMkIsZ0JBQWdCLENBQUMsQ0FBQztNQUNwRSxJQUFJRCxhQUFhLENBQUNFLGFBQWEsSUFBSUYsYUFBYSxDQUFDRSxhQUFhLENBQUNDLFNBQVMsQ0FBQyxDQUFDLEVBQUU7UUFDM0UsTUFBTTVELE1BQXFCLEdBQUd5RCxhQUFhLENBQUNFLGFBQWEsQ0FBQ0MsU0FBUyxDQUFDLENBQUM7UUFDckVQLHFCQUFxQixHQUFHLE1BQU1FLE9BQU8sQ0FBQ0MsT0FBTyxDQUM1Q3BGLGFBQWEsQ0FBQ0MsbUJBQW1CLEVBQUVDLGlCQUFpQixFQUFFMEIsTUFBTSxDQUFDdEIsY0FBYyxFQUFFRixNQUFNLENBQ3BGLENBQUM7UUFDRDJDLDhDQUE4QyxDQUFDbkIsTUFBTSxFQUFFVSxlQUFlLEVBQUVXLG1CQUFtQixFQUFFZ0MscUJBQXFCLENBQUM7TUFDcEg7TUFFQSxNQUFNUSxvQkFBb0IsR0FBR3ZGLGlCQUFpQixDQUFDd0YsaUJBQWlCLENBQUMsVUFBVSxDQUF5QjtNQUNwRyxNQUFNbEQsTUFBTSxHQUFHLE1BQU0wQiw4QkFBOEIsQ0FBQyxDQUFDO01BQ3JELElBQUkxQixNQUFNLEVBQUU7UUFDWCxJQUFJQSxNQUFNLENBQUNDLE1BQU0sR0FBRyxDQUFDLEVBQUU7VUFDdEIsSUFBSWtELHVDQUF1QyxHQUFHLEtBQUs7VUFDbkQsTUFBTXJFLGFBR0wsR0FBRyxDQUFDLENBQUM7VUFDTixNQUFNc0UsbUJBQW1DLEdBQUcsRUFBRTtVQUM5QyxNQUFNQyxjQUFjLEdBQUcsR0FBR25DLFNBQVMsR0FBRztVQUN0QyxNQUFNb0MsZUFBZSxHQUFHLEdBQUdwQyxTQUFTLElBQUk7VUFDeEMsTUFBTXFDLHFCQUFxQixHQUFHdEMsVUFBVSxDQUFDa0IsU0FBUyxDQUFDa0IsY0FBYyxDQUFDO1VBQ2xFOUIsMEJBQTBCLEdBQUdpQyxXQUFXLENBQUNDLDRCQUE0QixDQUFDRixxQkFBcUIsRUFBRWxDLGNBQWMsQ0FBQztVQUM1RyxJQUFJLENBQUNFLDBCQUEwQixDQUFDbUMsZUFBZSxFQUFFO1lBQ2hELE1BQU1DLHNCQUFzQixHQUFHMUMsVUFBVSxDQUFDa0IsU0FBUyxDQUFDbUIsZUFBZSxDQUFDO1lBQ3BFL0IsMEJBQTBCLEdBQUdpQyxXQUFXLENBQUNDLDRCQUE0QixDQUFDRSxzQkFBc0IsRUFBRXRDLGNBQWMsQ0FBQztVQUM5RztVQUNBeEMsZ0JBQWdCLEdBQUcwQywwQkFBMEIsQ0FBQ3FDLG1CQUFtQjtVQUNqRTtVQUNBL0UsZ0JBQWdCLENBQUNILElBQUksQ0FBQzRDLGNBQWMsQ0FBQztVQUNyQ3hDLGFBQWEsQ0FBQ3VCLGtCQUFrQixHQUFHUCxlQUFlO1VBQ2xEaEIsYUFBYSxDQUFDd0IscUJBQXFCLEdBQUdpQiwwQkFBMEIsQ0FBQ3NDLFNBQVM7VUFDMUVsRix3QkFBd0IsQ0FBQ3FCLE1BQU0sRUFBRW5CLGdCQUFnQixFQUFFQyxhQUFhLEVBQUVzRSxtQkFBbUIsQ0FBQztVQUV0RnJELGdCQUFnQixDQUFDMUMsT0FBTyxDQUFDLFVBQUF5RyxJQUFBLEVBQStCO1lBQUEsSUFBckI7Y0FBRXJFO1lBQWdCLENBQUMsR0FBQXFFLElBQUE7WUFDckQsSUFBSVYsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEVBQUUzRCxlQUFlLEtBQUtBLGVBQWUsRUFBRTtjQUNoRTBELHVDQUF1QyxHQUFHLElBQUk7WUFDL0M7VUFDRCxDQUFDLENBQUM7O1VBRUY7VUFDQSxJQUNDYixhQUFhLENBQUNJLHlCQUF5QixJQUN2Q1UsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLElBQ3RCZCxhQUFhLENBQUNJLHlCQUF5QixDQUFDVSxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQzNELGVBQWUsQ0FBQyxJQUMvRSxDQUFDLENBQUM2QyxhQUFhLENBQUNJLHlCQUF5QixDQUFDVSxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQzNELGVBQWUsQ0FBQyxDQUFDUyxjQUFjLEVBQy9GO1lBQ0RpRCx1Q0FBdUMsR0FBRyxJQUFJO1VBQy9DO1VBQ0EsTUFBTVksT0FBTyxHQUFHaEUsZ0JBQWdCLENBQUNpRSxNQUFNLENBQUN2RCxtQkFBbUIsQ0FBQztVQUM1RGUscUJBQXFCLEdBQUcyQix1Q0FBdUMsR0FBR1ksT0FBTyxHQUFHQSxPQUFPLENBQUNDLE1BQU0sQ0FBQ1osbUJBQW1CLENBQUM7VUFDL0c7VUFDQUgsb0JBQW9CLENBQUNnQixXQUFXLENBQUMsd0JBQXdCLEVBQUV6QyxxQkFBcUIsQ0FBQ3ZCLE1BQU0sR0FBRyxDQUFDLENBQUM7VUFDNUZnRCxvQkFBb0IsQ0FBQ2dCLFdBQVcsQ0FBQyxtQkFBbUIsRUFBRXpDLHFCQUFxQixDQUFDO1FBQzdFLENBQUMsTUFBTTtVQUNOeUIsb0JBQW9CLENBQUNnQixXQUFXLENBQUMsd0JBQXdCLEVBQUUsS0FBSyxDQUFDO1FBQ2xFO01BQ0QsQ0FBQyxNQUFNO1FBQ05oQixvQkFBb0IsQ0FBQ2dCLFdBQVcsQ0FBQyx3QkFBd0IsRUFBRSxLQUFLLENBQUM7TUFDbEU7SUFDRCxDQUFDLENBQUMsT0FBT0MsS0FBYyxFQUFFO01BQ3hCQyxHQUFHLENBQUNELEtBQUssQ0FBQyxtQkFBbUIsRUFBRUEsS0FBZSxDQUFDO0lBQ2hEO0lBQ0EsT0FBTzFDLHFCQUFxQjtFQUM3QjtFQUVBLFNBQVM0Qyw2QkFBNkJBLENBQ3JDQyxrQkFBMkMsRUFDM0NoRCxjQUFzQixFQU1yQjtJQUNELE1BQU1FLDBCQUEwQixHQUFHO01BQ2xDbUMsZUFBZSxFQUFFLEtBQUs7TUFDdEIxRSxlQUFlLEVBQUUsRUFBRTtNQUNuQjRFLG1CQUFtQixFQUFFLEVBQXVEO01BQzVFQyxTQUFTLEVBQUU7SUFDWixDQUFDO0lBQ0QsSUFBSVMsc0JBQXNCLEVBQUVDLHFCQUFxQjtJQUNqRCxJQUFJQyxVQUFVO0lBQ2QsS0FBSyxNQUFNcEMsR0FBRyxJQUFJaUMsa0JBQWtCLEVBQUU7TUFDckMsSUFBSWpDLEdBQUcsQ0FBQzdDLFFBQVEsZ0RBQXFDLENBQUMsSUFBSThFLGtCQUFrQixDQUFDakMsR0FBRyxDQUFDLEtBQUtmLGNBQWMsRUFBRTtRQUNyR0UsMEJBQTBCLENBQUNtQyxlQUFlLEdBQUcsSUFBSTtRQUNqRFksc0JBQXNCLEdBQUcsNERBQWlEO1FBQzFFQyxxQkFBcUIsR0FBRyx1RUFBNEQ7UUFFcEYsSUFBSW5DLEdBQUcsQ0FBQzdDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtVQUN0QmlGLFVBQVUsR0FBR3BDLEdBQUcsQ0FBQzlDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFDOUJnRixzQkFBc0IsR0FBRyxHQUFHQSxzQkFBc0IsSUFBSUUsVUFBVSxFQUFFO1VBQ2xFRCxxQkFBcUIsR0FBRyxHQUFHQSxxQkFBcUIsSUFBSUMsVUFBVSxFQUFFO1FBQ2pFO1FBQ0EsSUFBSUgsa0JBQWtCLENBQUNDLHNCQUFzQixDQUFDLEVBQUU7VUFDL0MvQywwQkFBMEIsQ0FBQ3NDLFNBQVMsR0FBR3RDLDBCQUEwQixDQUFDc0MsU0FBUyxDQUFDRyxNQUFNLENBQ2pGSyxrQkFBa0IsQ0FBQ0Msc0JBQXNCLENBQzFDLENBQUM7UUFDRjtRQUVBLElBQUlELGtCQUFrQixDQUFDRSxxQkFBcUIsQ0FBQyxFQUFFO1VBQzlDaEQsMEJBQTBCLENBQUNxQyxtQkFBbUIsR0FBR3JDLDBCQUEwQixDQUFDcUMsbUJBQW1CLENBQUNJLE1BQU0sQ0FDckdLLGtCQUFrQixDQUFDRSxxQkFBcUIsQ0FDekMsQ0FBQztRQUNGO1FBRUE7TUFDRDtJQUNEO0lBQ0EsT0FBT2hELDBCQUEwQjtFQUNsQztFQUVBLGVBQWVrRCwwQkFBMEJBLENBQUMvRyxpQkFBbUMsRUFBRXlELFlBQTBCLEVBQW9CO0lBQzVILE1BQU1GLFVBQVUsR0FBSXZELGlCQUFpQixDQUFDdkIsUUFBUSxDQUFDLENBQUMsQ0FBZ0JFLFlBQVksQ0FBQyxDQUFDO0lBQzlFLE1BQU15RCxlQUFlLEdBQUdwQyxpQkFBaUIsQ0FBQ3dGLGlCQUFpQixDQUFDLENBQW1CO0lBQy9FLE1BQU13QixJQUFJLEdBQUk1RSxlQUFlLElBQUlBLGVBQWUsQ0FBQ3RELE9BQU8sQ0FBQyxDQUFDLElBQUssRUFBRTtJQUNqRSxNQUFNMEUsU0FBUyxHQUFHRCxVQUFVLENBQUMxRSxXQUFXLENBQUNtSSxJQUFJLENBQUM7SUFDOUM7SUFDQSxNQUFNQyxzQkFBc0IsR0FBRyxHQUFHekQsU0FBUyxHQUFHLEdBQUcsNkNBQTZDO0lBQzlGO0lBQ0EsTUFBTUYsUUFBUSxHQUFHQyxVQUFVLENBQUNrQixTQUFTLENBQUN3QyxzQkFBc0IsQ0FBQztJQUM3RDtJQUNBLE1BQU01RCxNQUFNLEdBQUdqQixlQUFlLEVBQUVxQyxTQUFTLENBQUMsQ0FBQztJQUMzQyxJQUFJLENBQUNwQixNQUFNLElBQUlqQixlQUFlLEVBQUU7TUFDL0JBLGVBQWUsQ0FDYjhFLGFBQWEsQ0FBQyxDQUFDLENBQ2ZDLElBQUksQ0FBQyxnQkFBZ0JDLGVBQW9ELEVBQUU7UUFDM0UsT0FBT3RCLFdBQVcsQ0FBQzFDLHFCQUFxQixDQUN2Q2hCLGVBQWUsRUFDZmdGLGVBQWUsRUFDZnBILGlCQUFpQixFQUNqQnNELFFBQVEsRUFDUkMsVUFBVSxFQUNWQyxTQUFTLEVBQ1RDLFlBQ0QsQ0FBQztNQUNGLENBQUMsQ0FBQyxDQUNENEQsS0FBSyxDQUFDLFVBQVVDLE1BQWUsRUFBRTtRQUNqQ2IsR0FBRyxDQUFDRCxLQUFLLENBQUMsdUNBQXVDLEVBQUVjLE1BQWdCLENBQUM7TUFDckUsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxNQUFNO01BQ04sT0FBT3hCLFdBQVcsQ0FBQzFDLHFCQUFxQixDQUFDaEIsZUFBZSxFQUFFaUIsTUFBTSxFQUFFckQsaUJBQWlCLEVBQUVzRCxRQUFRLEVBQUVDLFVBQVUsRUFBRUMsU0FBUyxFQUFFQyxZQUFZLENBQUM7SUFDcEk7RUFDRDs7RUFFQTtBQUNBO0FBQ0E7RUFDQSxTQUFTOEQsaUJBQWlCQSxDQUFDQyxPQUFpQixFQUFRO0lBQ25ELElBQ0NBLE9BQU8sSUFDUEEsT0FBTyxDQUFDQyxHQUFHLENBQWlDLENBQUMsY0FBYyxFQUFFLDZCQUE2QixDQUFDLENBQUMsSUFDNUZELE9BQU8sQ0FBQ0UsVUFBVSxDQUFDLENBQUMsSUFDcEJGLE9BQU8sQ0FBQ0csVUFBVSxDQUFDLENBQUMsRUFDbkI7TUFDREgsT0FBTyxDQUFDSSxTQUFTLENBQUMsQ0FBQztJQUNwQjtFQUNEO0VBRUEsU0FBU0MsZUFBZUEsQ0FBQ0MsUUFBNkIsRUFBZ0I7SUFDckUsSUFBSUEsUUFBUSxDQUFDTCxHQUFHLENBQWUsMEJBQTBCLENBQUMsRUFBRTtNQUMzRCxPQUFPSyxRQUFRO0lBQ2hCO0lBQ0EsTUFBTUMsTUFBTSxHQUFHQyxTQUFTLENBQUNDLG9CQUFvQixDQUFDSCxRQUFRLENBQUM7SUFDdkQsSUFBSSxDQUFDQyxNQUFNLEVBQUU7TUFDWixNQUFNLElBQUlHLEtBQUssQ0FBQyxvRUFBb0UsQ0FBQztJQUN0RixDQUFDLE1BQU07TUFDTixPQUFPTCxlQUFlLENBQUNFLE1BQU0sQ0FBQztJQUMvQjtFQUNEO0VBRUEsU0FBU0ksa0JBQWtCQSxDQUFDQyxhQUEyQixFQUFVO0lBQ2hFLE1BQU1DLGtCQUFrQixHQUFHRCxhQUFhLENBQUNFLHFCQUFxQixDQUFDLENBQUM7SUFDaEUsT0FBT0Qsa0JBQWtCLENBQUNFLFlBQVksQ0FBQyxDQUFDLEdBQ3JDRixrQkFBa0IsQ0FBQ0csZ0JBQWdCLENBQUMsQ0FBQyxHQUNyQzFDLFdBQVcsQ0FBQ2pCLGFBQWEsQ0FBRXVELGFBQWEsQ0FBQ0ssZ0JBQWdCLENBQUMsQ0FBQyxDQUFrQkMsY0FBYyxDQUFDLENBQUMsQ0FBQztFQUNsRztFQUVBLFNBQVM3RCxhQUFhQSxDQUFDaUQsUUFBOEIsRUFBVTtJQUM5RCxJQUFJQSxRQUFRLElBQUlBLFFBQVEsQ0FBQ0wsR0FBRyxDQUFxQixnQ0FBZ0MsQ0FBQyxFQUFFO01BQ25GLE1BQU1rQixVQUFVLEdBQUdiLFFBQVEsQ0FBQ2Msb0JBQW9CLENBQUMsQ0FBQztNQUNsRGQsUUFBUSxHQUFHYSxVQUFVLElBQUlBLFVBQVUsQ0FBQ0UsY0FBYyxDQUFDLENBQUM7SUFDckQ7SUFDQSxPQUFPZixRQUFRLElBQUksQ0FBQ0EsUUFBUSxDQUFDTCxHQUFHLENBQVMsc0JBQXNCLENBQUMsRUFBRTtNQUNqRUssUUFBUSxHQUFHQSxRQUFRLENBQUNnQixTQUFTLENBQUMsQ0FBQztJQUNoQztJQUNBLE9BQU9oQixRQUFRO0VBQ2hCO0VBRUEsU0FBU2lCLGVBQWVBLENBQUNDLE9BQWUsRUFBRUMsWUFBcUMsRUFBVztJQUN6RixLQUFLLE1BQU1DLElBQUksSUFBSUQsWUFBWSxFQUFFO01BQ2hDLElBQUlBLFlBQVksQ0FBQ0MsSUFBSSxDQUFDLEtBQUtGLE9BQU8sQ0FBQ0UsSUFBSSxDQUF5QixFQUFFO1FBQ2pFLE9BQU8sS0FBSztNQUNiO0lBQ0Q7SUFDQSxPQUFPLElBQUk7RUFDWjtFQUVBLFNBQVNDLDBCQUEwQkEsQ0FDbENDLGdCQUFnQyxFQUNoQ0MsWUFBb0IsRUFDcEJDLE9BQWlDLEVBQzBDO0lBQzNFLE1BQU1DLFdBQWdDLEdBQUlILGdCQUFnQixDQUFDM0UsU0FBUyxDQUFDLEdBQUc0RSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBeUI7TUFDckhHLFdBQXFGLEdBQUcsQ0FBQyxDQUFDO0lBRTNGLEtBQUssTUFBTU4sSUFBSSxJQUFJSyxXQUFXLEVBQUU7TUFDL0IsSUFDQ0EsV0FBVyxDQUFDRSxjQUFjLENBQUNQLElBQUksQ0FBQyxJQUNoQyxDQUFDLE1BQU0sQ0FBQ1EsSUFBSSxDQUFDUixJQUFJLENBQUMsSUFDbEJLLFdBQVcsQ0FBQ0wsSUFBSSxDQUFDLENBQUNTLEtBQUssSUFDdkJaLGVBQWUsQ0FBQ1EsV0FBVyxDQUFDTCxJQUFJLENBQUMsRUFBRUksT0FBTyxJQUFJO1FBQUVLLEtBQUssRUFBRTtNQUFXLENBQUMsQ0FBQyxFQUNuRTtRQUNESCxXQUFXLENBQUNOLElBQUksQ0FBQyxHQUFHSyxXQUFXLENBQUNMLElBQUksQ0FBQztNQUN0QztJQUNEO0lBQ0EsT0FBT00sV0FBVztFQUNuQjtFQUVBLFNBQVNJLGVBQWVBLENBQUM5QixRQUFxRSxFQUFFK0IsV0FBeUIsRUFBZ0I7SUFDeEksTUFBTUMsUUFBUSxHQUFHaEMsUUFBUSxJQUFJQSxRQUFRLENBQUNpQyxVQUFVLENBQUMsQ0FBQztJQUNsRCxJQUFJRCxRQUFRLEVBQUU7TUFDYkEsUUFBUSxDQUFDbkssT0FBTyxDQUFDLFVBQVVxSyxPQUFPLEVBQUU7UUFDbkMsSUFBSUEsT0FBTyxDQUFDdkMsR0FBRyxDQUFzQiw4Q0FBOEMsQ0FBQyxFQUFFO1VBQ3JGdUMsT0FBTyxHQUFHQSxPQUFPLENBQUNDLFNBQVMsQ0FBQyxDQUFDO1FBQzlCO1FBQ0EsSUFBSUQsT0FBTyxDQUFDdkMsR0FBRyxDQUFhLGtCQUFrQixDQUFDLEVBQUU7VUFDaEQsTUFBTXlDLEtBQUssR0FBR0YsT0FBTyxDQUFDRyxPQUFPLENBQUMsQ0FBQztVQUMvQixNQUFNOUksTUFBTSxHQUFHNkksS0FBSyxDQUFDRSxRQUFRLENBQUMsQ0FBQztVQUMvQi9JLE1BQU0sQ0FBQzFCLE9BQU8sQ0FBRTBLLEtBQUssSUFBSztZQUN6QixJQUFJQSxLQUFLLENBQUNDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRTtjQUMxQlQsV0FBVyxDQUFDN0ksSUFBSSxDQUFDcUosS0FBSyxDQUFDO1lBQ3hCO1VBQ0QsQ0FBQyxDQUFDO1FBQ0gsQ0FBQyxNQUFNLElBQUlMLE9BQU8sQ0FBQ00sSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1VBQ25DVCxXQUFXLENBQUM3SSxJQUFJLENBQUNnSixPQUFPLENBQUM7UUFDMUI7TUFDRCxDQUFDLENBQUM7SUFDSDtJQUNBLE9BQU9ILFdBQVc7RUFDbkI7RUFFQSxlQUFlVSx3Q0FBd0NBLENBQUNWLFdBQXlCLEVBQUVXLEtBQVcsRUFBaUI7SUFDOUcsTUFBTUMsT0FBMkMsR0FBRyxDQUFDLENBQUM7SUFDdEQsTUFBTXJDLGFBQWEsR0FBR3RDLFdBQVcsQ0FBQytCLGVBQWUsQ0FBQzJDLEtBQUssQ0FBQztJQUN4RCxNQUFNRSxRQUFRLEdBQUdDLFdBQVcsQ0FBQ0Msd0JBQXdCLENBQUVKLEtBQUssQ0FBQy9MLFFBQVEsQ0FBQyxDQUFDLENBQWdCRSxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQ3RHLE1BQU1rTSxVQUFVLEdBQUcsU0FBQUEsQ0FBVUMsS0FBMkMsRUFBUTtNQUMvRSxJQUFJQSxLQUFLLEVBQUU7UUFDVixNQUFNQyxLQUFLLEdBQUdySyxNQUFNLENBQUNyQixJQUFJLENBQUN5TCxLQUFLLENBQUM7UUFDaENDLEtBQUssQ0FBQ3BMLE9BQU8sQ0FBQyxVQUFVdUosSUFBWSxFQUFFO1VBQ3JDLElBQUlBLElBQUksQ0FBQzhCLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQzlCLElBQUksQ0FBQ3JILFFBQVEsQ0FBQyxlQUFlLENBQUMsRUFBRTtZQUMvRDRJLE9BQU8sQ0FBQ3ZCLElBQUksQ0FBQyxHQUFHO2NBQUUzRSxLQUFLLEVBQUV1RyxLQUFLLENBQUM1QixJQUFJO1lBQUUsQ0FBQztVQUN2QztRQUNELENBQUMsQ0FBQztNQUNIO01BQ0EsSUFBSVcsV0FBVyxDQUFDdEgsTUFBTSxFQUFFO1FBQ3ZCc0gsV0FBVyxDQUFDbEssT0FBTyxDQUFDLFVBQVVzTCxVQUFVLEVBQUU7VUFDekMsTUFBTUMsZUFBZSxHQUFHRCxVQUFVLENBQUNYLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQ2xLLGNBQWM7VUFDakUsTUFBTXVCLE9BQU8sR0FBR3NKLFVBQVUsQ0FBQ1gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDckgsTUFBTTtVQUNqRG1GLGFBQWEsQ0FDWDFFLGdCQUFnQixDQUFDLENBQUMsQ0FDbEJ2RCxRQUFRLENBQUMsQ0FDVDtZQUNDQyxjQUFjLEVBQUU4SyxlQUFlO1lBQy9CakksTUFBTSxFQUFFdEIsT0FBTztZQUNmdEIsTUFBTSxFQUFFb0s7VUFDVCxDQUFDLENBQ0QsQ0FBQyxDQUNEdEQsSUFBSSxDQUFDLFVBQVVnRSxLQUFLLEVBQVE7WUFDNUIsSUFBSUYsVUFBVSxDQUFDeEQsR0FBRyxDQUFVLHFCQUFxQixDQUFDLElBQUl3RCxVQUFVLENBQUN4RCxHQUFHLENBQVcsZ0JBQWdCLENBQUMsRUFBRTtjQUNqR3dELFVBQVUsQ0FBQ0csVUFBVSxDQUNwQkgsVUFBVSxDQUFDdkQsVUFBVSxDQUFDLENBQUMsSUFBSXlELEtBQUssSUFBSUEsS0FBSyxDQUFDNUksTUFBTSxLQUFLLENBQUMsSUFBSTRJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSUEsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDNUksTUFBTSxLQUFLLENBQzNGLENBQUM7WUFDRjtZQUNBLElBQUltSSxRQUFRLEVBQUU7Y0FDWk8sVUFBVSxDQUFDekYsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQTBCZSxXQUFXLENBQzdFMEUsVUFBVSxDQUFDSSxLQUFLLENBQUMsQ0FBQyxDQUFDekosS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNqQztnQkFDQzBKLDJCQUEyQixFQUFFLEVBQUVILEtBQUssSUFBSUEsS0FBSyxDQUFDNUksTUFBTSxLQUFLLENBQUMsSUFBSTRJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSUEsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDNUksTUFBTSxLQUFLLENBQUM7Y0FDaEcsQ0FDRCxDQUFDO1lBQ0Y7WUFDQTtVQUNELENBQUMsQ0FBQyxDQUNEOEUsS0FBSyxDQUFDLFVBQVVDLE1BQWUsRUFBRTtZQUNqQ2IsR0FBRyxDQUFDRCxLQUFLLENBQUMsa0RBQWtELEVBQUVjLE1BQWdCLENBQUM7VUFDaEYsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDO01BQ0g7SUFDRCxDQUFDO0lBQ0QsSUFBSWtELEtBQUssSUFBSUEsS0FBSyxDQUFDaEYsaUJBQWlCLENBQUMsQ0FBQyxFQUFFO01BQ3ZDLE9BQVFnRixLQUFLLENBQUNoRixpQkFBaUIsQ0FBQyxDQUFDLEVBQzlCMEIsYUFBYSxDQUFDLENBQUMsQ0FDaEJDLElBQUksQ0FBQyxVQUFVMkQsS0FBMEMsRUFBRTtRQUMzRCxPQUFPRCxVQUFVLENBQUNDLEtBQUssQ0FBQztNQUN6QixDQUFDLENBQUMsQ0FDRHpELEtBQUssQ0FBQyxVQUFVQyxNQUFlLEVBQUU7UUFDakNiLEdBQUcsQ0FBQ0QsS0FBSyxDQUFDLGtEQUFrRCxFQUFFYyxNQUFnQixDQUFDO01BQ2hGLENBQUMsQ0FBQztJQUNKLENBQUMsTUFBTTtNQUNOLE9BQU91RCxVQUFVLENBQUMsQ0FBQztJQUNwQjtFQUNEOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU1UseUJBQXlCQSxDQUFDQyxVQUF3QixFQUFRO0lBQ2xFLE1BQU1DLHVCQUFxQyxHQUFHLEVBQUU7SUFDaERELFVBQVUsQ0FBQzdMLE9BQU8sQ0FBQyxVQUFVK0wsU0FBUyxFQUFFO01BQ3ZDLElBQUlBLFNBQVMsQ0FBQ2pFLEdBQUcsQ0FBYSxnQkFBZ0IsQ0FBQyxFQUFFO1FBQ2hEZ0UsdUJBQXVCLENBQUN6SyxJQUFJLENBQUMwSyxTQUFTLENBQUM1QyxTQUFTLENBQUMsQ0FBQyxFQUFFQSxTQUFTLENBQUMsQ0FBQyxFQUFFQSxTQUFTLENBQUMsQ0FBQyxFQUFFQSxTQUFTLENBQUMsQ0FBQyxFQUFFQSxTQUFTLENBQUMsQ0FBZSxDQUFDO01BQ3RIO0lBQ0QsQ0FBQyxDQUFDO0lBQ0YyQyx1QkFBdUIsQ0FBQzlMLE9BQU8sQ0FBQyxVQUFVZ00sVUFBVSxFQUFFO01BQ3JELE1BQU1DLFNBQVMsR0FBR0QsVUFBVSxFQUFFeEIsT0FBTyxDQUFDLENBQUMsQ0FBQ0MsUUFBUSxDQUFDLENBQUM7TUFDbEQsTUFBTXlCLGdCQUFnQixHQUFHRCxTQUFTLENBQUNFLE1BQU0sQ0FBQyxVQUFVQyxRQUFRLEVBQUU7UUFDN0QsT0FBT0EsUUFBUSxDQUFDckUsVUFBVSxDQUFDLENBQUM7TUFDN0IsQ0FBQyxDQUFDO01BQ0YsSUFBSW1FLGdCQUFnQixDQUFDdEosTUFBTSxLQUFLLENBQUMsRUFBRTtRQUNsQ29KLFVBQVUsQ0FBQ1AsVUFBVSxDQUFDLEtBQUssQ0FBQztNQUM3QjtJQUNELENBQUMsQ0FBQztFQUNIO0VBRUEsU0FBU1ksYUFBYUEsQ0FDckJDLGFBQXNCLEVBQ3RCQyxlQUF3QixFQUN4QkMsWUFBcUIsRUFDckJDLGlCQUEyQixFQU92QjtJQUNKLE1BQU1DLFdBQW1CLEdBQUcsQ0FBQ0YsWUFBWSxHQUFHRixhQUFhLENBQUN4SCxTQUFTLENBQUN3SCxhQUFhLENBQUNuTixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUN3TixRQUFRLENBQUMsQ0FBQyxHQUFHSCxZQUFZO0lBQ3RILElBQUk5QyxZQUFZLEdBQUc0QyxhQUFhLENBQUNuTixPQUFPLENBQUMsQ0FBQyxDQUFDOEMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RCxNQUFNMkssZUFBZSxHQUFJTixhQUFhLENBQUN4SCxTQUFTLENBQUM0RSxZQUFZLENBQUMsQ0FBeUJtRCxLQUFLO0lBQzVGLE1BQU1DLFdBQVcsR0FBR0MsZ0JBQWdCLENBQUNULGFBQWEsQ0FBQ3hOLFFBQVEsQ0FBQyxDQUFDLEVBQW9COE4sZUFBZSxDQUFDO0lBQ2pHLElBQUlFLFdBQVcsRUFBRTtNQUNoQnBELFlBQVksR0FBRyxJQUFJb0QsV0FBVyxFQUFFO0lBQ2pDO0lBQ0EsSUFBSUwsaUJBQWlCLEVBQUU7TUFDdEIsT0FBT0gsYUFBYSxDQUFDeEgsU0FBUyxDQUFDLEdBQUc0RSxZQUFZLElBQUlnRCxXQUFXLHVDQUF1QyxDQUFDO0lBQ3RHO0lBQ0EsSUFBSUgsZUFBZSxFQUFFO01BQ3BCLE9BQU8sR0FBRzdDLFlBQVksSUFBSWdELFdBQVcsRUFBRTtJQUN4QyxDQUFDLE1BQU07TUFDTixPQUFPO1FBQ05oRCxZQUFZLEVBQUVBLFlBQVk7UUFDMUJzRCxTQUFTLEVBQUVWLGFBQWEsQ0FBQ3hILFNBQVMsQ0FBQyxHQUFHNEUsWUFBWSxJQUFJZ0QsV0FBVyw2Q0FBNkMsQ0FBQztRQUMvR08saUJBQWlCLEVBQUVYLGFBQWEsQ0FBQ3hILFNBQVMsQ0FBQyxHQUFHNEUsWUFBWSxJQUFJZ0QsV0FBVyxzQ0FBc0M7TUFDaEgsQ0FBQztJQUNGO0VBQ0Q7RUFFQSxTQUFTSyxnQkFBZ0JBLENBQUNuSixVQUEwQixFQUFFc0osV0FBbUIsRUFBc0I7SUFDOUYsTUFBTUMsZ0JBQWdCLEdBQUd2SixVQUFVLENBQUNrQixTQUFTLENBQUMsR0FBRyxDQUFDO0lBQ2xELEtBQUssTUFBTUMsR0FBRyxJQUFJb0ksZ0JBQWdCLEVBQUU7TUFDbkMsSUFBSSxPQUFPQSxnQkFBZ0IsQ0FBQ3BJLEdBQUcsQ0FBQyxLQUFLLFFBQVEsSUFBSW9JLGdCQUFnQixDQUFDcEksR0FBRyxDQUFDLENBQUM4SCxLQUFLLEtBQUtLLFdBQVcsRUFBRTtRQUM3RixPQUFPbkksR0FBRztNQUNYO0lBQ0Q7RUFDRDtFQUVBLFNBQVNxSSxrQkFBa0JBLENBQzFCQyxvQkFBNkMsRUFDN0NDLHNCQUFnRCxFQUNvQjtJQUNwRSxNQUFNQyxlQUFlLEdBQUdGLG9CQUFvQixDQUFDLHNDQUFzQyxDQUFDO01BQ25GRywwQkFBMEIsR0FBSUQsZUFBZSxLQUMxQ0Ysb0JBQW9CLElBQ3JCQSxvQkFBb0IsQ0FBQyxpRkFBaUYsQ0FBQyxJQUN0R0Msc0JBQXNCLElBQ3RCQSxzQkFBc0IsQ0FBQyw2Q0FBNkMsQ0FBRSxDQUFvQztJQUU5RyxJQUFJRSwwQkFBMEIsRUFBRTtNQUMvQixJQUFJQSwwQkFBMEIsQ0FBQ0MsV0FBVyxLQUFLLHlEQUF5RCxFQUFFO1FBQ3pHLE9BQU8sYUFBYTtNQUNyQixDQUFDLE1BQU0sSUFBSUQsMEJBQTBCLENBQUNDLFdBQVcsS0FBSyx5REFBeUQsRUFBRTtRQUNoSCxPQUFPLGtCQUFrQjtNQUMxQixDQUFDLE1BQU0sSUFBSUQsMEJBQTBCLENBQUNDLFdBQVcsS0FBSyw2REFBNkQsRUFBRTtRQUNwSCxPQUFPLE9BQU87TUFDZjtNQUNBO01BQ0EsT0FBTyxrQkFBa0I7SUFDMUI7SUFDQSxPQUFPRixlQUFlLEdBQUcsa0JBQWtCLEdBQUcsT0FBTztFQUN0RDtFQUVBLFNBQVNHLGNBQWNBLENBQUN6TixRQUF3QixFQUFzQjtJQUNyRSxNQUFNMkQsVUFBVSxHQUFHM0QsUUFBUSxDQUFDbkIsUUFBUSxDQUFDLENBQUMsQ0FBQ0UsWUFBWSxDQUFDLENBQUM7SUFDckQsT0FBTzRFLFVBQVUsQ0FBQ2tCLFNBQVMsQ0FBQyxHQUFHbEIsVUFBVSxDQUFDMUUsV0FBVyxDQUFDZSxRQUFRLENBQUNkLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0VBQ25GO0VBRUEsZUFBZXdPLGNBQWNBLENBQUMzTCxPQUFlLEVBQUU0TCxnQkFBZ0MsRUFBRVosU0FBaUIsRUFBb0I7SUFDckgsSUFBSS9NLFFBQVEsR0FBRzJOLGdCQUFnQjtJQUMvQixNQUFNQyxhQUFhLEdBQUc3TCxPQUFPLENBQUNxSixPQUFPLENBQUMsR0FBRyxDQUFDO0lBRTFDLElBQUl3QyxhQUFhLEdBQUcsQ0FBQyxDQUFDLEVBQUU7TUFDdkIsTUFBTUMsV0FBVyxHQUFHOUwsT0FBTyxDQUFDK0wsS0FBSyxDQUFDRixhQUFhLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO01BQ3hELElBQUlHLFlBQVksR0FBR04sY0FBYyxDQUFDek4sUUFBUSxDQUFDO01BRTNDLE9BQU8rTixZQUFZLEtBQUtGLFdBQVcsRUFBRTtRQUNwQztRQUNBN04sUUFBUSxHQUFHQSxRQUFRLENBQUNnTyxVQUFVLENBQUMsQ0FBQyxDQUFDMU8sVUFBVSxDQUFDLENBQW1CO1FBQy9ELElBQUlVLFFBQVEsRUFBRTtVQUNiK04sWUFBWSxHQUFHTixjQUFjLENBQUN6TixRQUFRLENBQUM7UUFDeEMsQ0FBQyxNQUFNO1VBQ042RyxHQUFHLENBQUNvSCxPQUFPLENBQUMsb0ZBQW9GLENBQUM7VUFDakcsT0FBTzVJLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDL0csU0FBUyxDQUFDO1FBQ2xDO01BQ0Q7SUFDRDtJQUVBLE9BQU95QixRQUFRLENBQUNzSCxhQUFhLENBQUN5RixTQUFTLENBQUM7RUFDekM7RUFRQSxlQUFleE4sZUFBZUEsQ0FDN0JvTyxnQkFBZ0MsRUFDaEM1TCxPQUFlLEVBQ2ZnTCxTQUFpQixFQUNqQm1CLHlCQUFpQyxFQUNIO0lBQzlCLE1BQU1DLFFBQVEsR0FDYnBCLFNBQVMsSUFBSUEsU0FBUyxDQUFDM0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FDdENnRCx3QkFBd0IsQ0FBQ3JCLFNBQVMsRUFBRVksZ0JBQWdCLENBQUM5TyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQ2hFNk8sY0FBYyxDQUFDM0wsT0FBTyxFQUFFNEwsZ0JBQWdCLEVBQUVaLFNBQVMsQ0FBQztJQUV4RCxPQUFPb0IsUUFBUSxDQUFDNUcsSUFBSSxDQUFDLFVBQVU4RyxjQUF1QixFQUFFO01BQ3ZELE9BQU87UUFDTkEsY0FBYyxFQUFFQSxjQUFjO1FBQzlCVixnQkFBZ0IsRUFBRUEsZ0JBQWdCO1FBQ2xDNUwsT0FBTyxFQUFFQSxPQUFPO1FBQ2hCbU0seUJBQXlCLEVBQUVBO01BQzVCLENBQUM7SUFDRixDQUFDLENBQUM7RUFDSDtFQUVBLGVBQWVJLG9DQUFvQ0EsQ0FDbERDLHFCQUEyQyxFQUMzQ0MsZ0JBQStDLEVBRS9CO0lBQUEsSUFEaEJDLGNBQWMsR0FBQUMsU0FBQSxDQUFBL0wsTUFBQSxRQUFBK0wsU0FBQSxRQUFBblEsU0FBQSxHQUFBbVEsU0FBQSxNQUFHLEtBQUs7SUFFdEIsT0FBT3JKLE9BQU8sQ0FBQ3NKLEdBQUcsQ0FBQ0gsZ0JBQWdCLENBQUMsQ0FDbENqSCxJQUFJLENBQUMsVUFBVXFILFFBQVEsRUFBUTtNQUMvQixJQUFJQSxRQUFRLENBQUNqTSxNQUFNLEVBQUU7UUFDcEIsTUFBTWtNLG1CQUE4QixHQUFHLEVBQUU7VUFDeENDLHNCQUFpQyxHQUFHLEVBQUU7UUFDdkNGLFFBQVEsQ0FBQzdPLE9BQU8sQ0FBQyxVQUFVZ1AsT0FBTyxFQUFFO1VBQ25DLElBQUlBLE9BQU8sRUFBRTtZQUNaLElBQUlBLE9BQU8sQ0FBQ1YsY0FBYyxFQUFFO2NBQzNCRSxxQkFBcUIsQ0FBQzFQLFFBQVEsQ0FBQyxDQUFDLENBQUM4SCxXQUFXLENBQUNvSSxPQUFPLENBQUNiLHlCQUF5QixFQUFFLElBQUksQ0FBQztjQUNyRlcsbUJBQW1CLENBQUN6TixJQUFJLENBQUMyTixPQUFPLENBQUNwQixnQkFBZ0IsQ0FBQztZQUNuRCxDQUFDLE1BQU07Y0FDTm1CLHNCQUFzQixDQUFDMU4sSUFBSSxDQUFDMk4sT0FBTyxDQUFDcEIsZ0JBQWdCLENBQUM7WUFDdEQ7VUFDRDtRQUNELENBQUMsQ0FBQztRQUNGcUIsd0JBQXdCLENBQ3ZCVCxxQkFBcUIsRUFDckJLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQzdNLE9BQU8sRUFDbkI4TSxtQkFBbUIsRUFDbkJDLHNCQUFzQixFQUN0QkwsY0FDRCxDQUFDO01BQ0Y7TUFDQTtJQUNELENBQUMsQ0FBQyxDQUNEaEgsS0FBSyxDQUFDLFVBQVVDLE1BQWUsRUFBRTtNQUNqQ2IsR0FBRyxDQUFDb0ksS0FBSyxDQUFDLDBDQUEwQyxFQUFFdkgsTUFBZ0IsQ0FBQztJQUN4RSxDQUFDLENBQUM7RUFDSjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNzSCx3QkFBd0JBLENBQ2hDckosb0JBQTBDLEVBQzFDdEMsTUFBYyxFQUNkNkwsVUFBcUIsRUFDckJDLGFBQXdCLEVBRWpCO0lBQUEsSUFEUFYsY0FBYyxHQUFBQyxTQUFBLENBQUEvTCxNQUFBLFFBQUErTCxTQUFBLFFBQUFuUSxTQUFBLEdBQUFtUSxTQUFBLE1BQUcsS0FBSztJQUV0QixNQUFNVSx1QkFBdUIsR0FBRyxHQUFHekosb0JBQW9CLENBQUN6RyxPQUFPLENBQUMsQ0FBQyxtQkFBbUJtRSxNQUFNLEVBQUU7TUFDM0ZnTSxhQUFhLEdBQUcxSixvQkFBb0IsQ0FBQzlHLFFBQVEsQ0FBQyxDQUFDO01BQy9DeVEsa0JBQWtCLEdBQUcsQ0FBQ2IsY0FBYyxHQUFHLGFBQWEsR0FBRywyQkFBMkI7TUFDbEZjLHFCQUFxQixHQUFHLENBQUNkLGNBQWMsR0FBRyxnQkFBZ0IsR0FBRyw4QkFBOEI7SUFDNUZZLGFBQWEsQ0FBQzFJLFdBQVcsQ0FBQyxHQUFHeUksdUJBQXVCLElBQUlFLGtCQUFrQixFQUFFLEVBQUVKLFVBQVUsQ0FBQztJQUN6RkcsYUFBYSxDQUFDMUksV0FBVyxDQUFDLEdBQUd5SSx1QkFBdUIsSUFBSUcscUJBQXFCLEVBQUUsRUFBRUosYUFBYSxDQUFDO0VBQ2hHO0VBRUEsU0FBU0ssNEJBQTRCQSxDQUFDQyxZQUFzQixFQUFVO0lBQ3JFLE1BQU1DLDJCQUEyQixHQUFHeEosV0FBVyxDQUFDeUosc0JBQXNCO0lBRXRFRixZQUFZLENBQUNHLElBQUksQ0FBQyxVQUFVQyxDQUFTLEVBQUVDLENBQVMsRUFBRTtNQUNqRCxPQUFPSiwyQkFBMkIsQ0FBQ3RFLE9BQU8sQ0FBQ3lFLENBQUMsQ0FBQyxHQUFHSCwyQkFBMkIsQ0FBQ3RFLE9BQU8sQ0FBQzBFLENBQUMsQ0FBQztJQUN2RixDQUFDLENBQUM7SUFFRixPQUFPTCxZQUFZLENBQUMsQ0FBQyxDQUFDO0VBQ3ZCOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU00sMkJBQTJCQSxDQUFBLEVBQVc7SUFDOUMsTUFBTUMsdUJBQXVCLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO0lBQzVDLE9BQU9BLHVCQUF1QixDQUFDdEQsUUFBUSxDQUFDLENBQUM7RUFDMUM7RUFNQSxTQUFTdUQsZ0JBQWdCQSxDQUFDekcsZ0JBQWdDLEVBQUVDLFlBQW9CLEVBQWlCO0lBQ2hHLE1BQU15RyxxQkFBcUIsR0FBR3pHLFlBQVksQ0FBQzBHLFNBQVMsQ0FBQyxDQUFDLEVBQUUxRyxZQUFZLENBQUMyRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEYsTUFBTUMsY0FBYyxHQUFHN0csZ0JBQWdCLENBQUMzRSxTQUFTLENBQUMsR0FBR3FMLHFCQUFxQixnREFBZ0QsQ0FBQztJQUMzSCxNQUFNSSxjQUE2QixHQUFHLENBQUMsQ0FBQztJQUN4QyxJQUFJRCxjQUFjLElBQUlILHFCQUFxQixLQUFLekcsWUFBWSxFQUFFO01BQzdENkcsY0FBYyxDQUFDQyxXQUFXLEdBQUdMLHFCQUFxQjtNQUNsREksY0FBYyxDQUFDRSxtQkFBbUIsR0FBR3RLLFdBQVcsQ0FBQ3VLLHdCQUF3QixDQUFDakgsZ0JBQWdCLEVBQUUwRyxxQkFBcUIsQ0FHaEg7SUFDRjtJQUNBLE9BQU9JLGNBQWM7RUFDdEI7RUFNQSxTQUFTSSxnQ0FBZ0NBLENBQUNDLGlCQUFtQyxFQUFFQyxZQUF1QixFQUFFaEcsS0FBVyxFQUFvQjtJQUN0SSxNQUFNcEMsYUFBYSxHQUFHdEMsV0FBVyxDQUFDK0IsZUFBZSxDQUFDMkMsS0FBSyxDQUFDO0lBQ3hELE1BQU1pRyxrQkFBa0IsR0FBR3JJLGFBQWEsQ0FBQ3NJLG9CQUFvQixDQUFDLENBQUM7SUFDL0QsT0FBT0Qsa0JBQWtCLENBQUNFLGdDQUFnQyxDQUFDSCxZQUFZLEVBQUVELGlCQUFpQixDQUFDSyxZQUFZLENBQUMsQ0FBQyxDQUFDO0VBQzNHO0VBRUEsU0FBU0MsZ0JBQWdCQSxDQUFDL0ksUUFBaUIsRUFBVztJQUNyRCxNQUFNZ0osYUFBYSxHQUFHbkcsV0FBVyxDQUFDQyx3QkFBd0IsQ0FBRTlDLFFBQVEsQ0FBQ3JKLFFBQVEsQ0FBQyxDQUFDLENBQWdCRSxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQzlHLE1BQU1vUyxXQUFXLEdBQUdqTCxXQUFXLENBQUNrTCxhQUFhLENBQUNsSixRQUFRLENBQUM7SUFDdkQsT0FBT2dKLGFBQWEsSUFBSUMsV0FBVztFQUNwQztFQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLGVBQWVFLGVBQWVBLENBQzdCeE4sWUFBMEIsRUFDMUJ5TixVQUFrQyxFQUNsQzFTLEtBQWlDLEVBQ2pDMlMsUUFBaUIsRUFDakJDLFFBQWtCLEVBQ2xCQyxtQkFBNkMsRUFDN0I7SUFDaEIsTUFBTUMsUUFBUSxHQUFHLENBQUMsTUFBTUMsbUJBQUEsQ0FBTywyQkFBMkIsQ0FBQyxFQUFFQyxPQUFPO0lBQ3BFLE1BQU1DLE9BQU8sR0FBRyxDQUFDLE1BQU1GLG1CQUFBLENBQU8sNkJBQTZCLENBQUMsRUFBRUMsT0FBTztJQUVyRSxNQUFNck0sYUFBYSxHQUFHMUIsWUFBWSxDQUFDMkIsZ0JBQWdCLENBQUMsQ0FBQztNQUNwRHNNLGlCQUFpQixHQUFJdk0sYUFBYSxJQUFJQSxhQUFhLENBQUN1TSxpQkFBaUIsSUFBSyxDQUFDLENBQUM7TUFDNUVDLGFBQWEsR0FBR2xPLFlBQVksQ0FBQ0MsZ0JBQWdCLENBQUMsQ0FBQztJQUNoRCxNQUFNa08sZUFBZSxHQUFHLE1BQU1ELGFBQWEsQ0FBQ0Usa0JBQWtCLENBQUNwTyxZQUFZLENBQUM7SUFDNUUsTUFBTXFPLG1CQUFtQixHQUFHRixlQUFlLEVBQUVHLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO01BQzNEQyxrQkFBa0IsR0FBSUYsbUJBQW1CLENBQUNHLGdCQUFnQixJQUFJSCxtQkFBbUIsQ0FBQ0csZ0JBQWdCLENBQUNDLGFBQWEsSUFBSyxFQUFFO0lBQ3hIaEIsVUFBVSxDQUFDdlIsT0FBTyxDQUFDLFVBQVV3UyxVQUFVLEVBQUU7TUFDeEMsTUFBTUMsYUFBYSxHQUFHakIsUUFBUSxHQUMzQixJQUFLZ0IsVUFBVSxDQUFzQjdTLElBQUksRUFBRSxHQUMxQzZTLFVBQVUsQ0FBYXJULE9BQU8sR0FBRyxDQUFDLENBQUM0TyxLQUFLLENBQUV5RSxVQUFVLENBQWFyVCxPQUFPLENBQUMsQ0FBQyxDQUFDa1IsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUNwRyxNQUFNcUMsY0FBYyxHQUFHbEIsUUFBUSxHQUFHaUIsYUFBYSxDQUFDMUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHMEUsYUFBYTtNQUN4RSxJQUFJZixtQkFBbUIsSUFBSUQsUUFBUSxFQUFFO1FBQ3BDLElBQUlDLG1CQUFtQixDQUFDZ0IsY0FBYyxDQUFDLEVBQUU7VUFDeEM3VCxLQUFLLENBQUMrSCxXQUFXLENBQUM2TCxhQUFhLEVBQUVmLG1CQUFtQixDQUFDZ0IsY0FBYyxDQUFDLENBQUM7UUFDdEU7TUFDRCxDQUFDLE1BQU0sSUFBSVgsaUJBQWlCLENBQUNXLGNBQWMsQ0FBQyxFQUFFO1FBQzdDLE1BQU1DLGNBQWMsR0FDbkJILFVBQVUsQ0FJVEksSUFBSSxHQUNIZCxPQUFPLENBQUNlLFdBQVcsQ0FFbEJMLFVBQVUsQ0FJVEksSUFDRixDQUFDLEdBQ0RqQixRQUFRLENBQUNtQixNQUFNO1FBQ2xCLE1BQU1DLFlBQVksR0FBR2pCLE9BQU8sQ0FBQ2tCLG1CQUFtQixDQUFDTCxjQUFjLENBQUM7UUFDaEU5VCxLQUFLLENBQUMrSCxXQUFXLENBQUM2TCxhQUFhLEVBQUVNLFlBQVksQ0FBQ0UsVUFBVSxDQUFDbEIsaUJBQWlCLENBQUNXLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO01BQzFHLENBQUMsTUFBTSxJQUFJTCxrQkFBa0IsQ0FBQ3pQLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDekMsS0FBSyxNQUFNc1Esa0JBQWtCLElBQUliLGtCQUFrQixFQUFFO1VBQ3BELElBQUlhLGtCQUFrQixDQUFDQyxZQUFZLEtBQUtULGNBQWMsRUFBRTtZQUN2RCxNQUFNVSxNQUFNLEdBQUdGLGtCQUFrQixDQUFDRyxNQUFNLENBQUN6USxNQUFNLEdBQzVDc1Esa0JBQWtCLENBQUNHLE1BQU0sQ0FBQ0gsa0JBQWtCLENBQUNHLE1BQU0sQ0FBQ3pRLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FDL0RwRSxTQUFTO1lBQ1osSUFBSTRVLE1BQU0sSUFBSUEsTUFBTSxDQUFDRSxJQUFJLEtBQUssR0FBRyxJQUFJRixNQUFNLENBQUNHLE1BQU0sS0FBSyxJQUFJLEVBQUU7Y0FDNUQxVSxLQUFLLENBQUMrSCxXQUFXLENBQUM2TCxhQUFhLEVBQUVXLE1BQU0sQ0FBQ0ksR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMvQztVQUNEO1FBQ0Q7TUFDRDtJQUNELENBQUMsQ0FBQztFQUNIO0VBS0EsU0FBU0MsNEJBQTRCQSxDQUNwQ0Msa0JBQTZDLEVBQzdDQyxrQkFBcUQsRUFDM0M7SUFDVixNQUFNQyxTQUFTLEdBQUdELGtCQUFrQjtNQUNuQ0UsaUJBQWlCLEdBQ2hCRCxTQUFTLEtBQUtwVixTQUFTLEdBQ3BCdUMsTUFBTSxDQUFDckIsSUFBSSxDQUFDa1UsU0FBUyxDQUFDLENBQUN6SCxNQUFNLENBQUMsVUFBVTJILFVBQWtCLEVBQUU7UUFDNUQsT0FBT0YsU0FBUyxDQUFDRSxVQUFVLENBQUMsQ0FBQ0MsWUFBWTtNQUN6QyxDQUFDLENBQUMsR0FDRixFQUFFO0lBQ1AsSUFBSUMsSUFBSTtJQUNSLEtBQUssTUFBTS9TLE9BQU8sSUFBSTRTLGlCQUFpQixFQUFFO01BQ3hDLE1BQU1JLGdCQUFnQixHQUFHaFQsT0FBTztNQUNoQyxNQUFNaVQsT0FBTyxHQUFHUixrQkFBa0IsSUFBSUEsa0JBQWtCLENBQUNPLGdCQUFnQixDQUFDO01BQzFFLElBQUlDLE9BQU8sSUFBSUEsT0FBTyxDQUFDdFIsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUNwQ29SLElBQUksR0FBR0EsSUFBSSxJQUFJalQsTUFBTSxDQUFDb1QsTUFBTSxDQUFDLElBQUksQ0FBQztRQUNsQ0gsSUFBSSxDQUFDQyxnQkFBZ0IsQ0FBQyxHQUFHQyxPQUFPLENBQUMsQ0FBQyxDQUFDO01BQ3BDO0lBQ0Q7SUFDQSxPQUFPRixJQUFJO0VBQ1o7RUFZQSxTQUFTSSx3QkFBd0JBLENBQUNDLFNBQTRCLEVBQW1EO0lBQ2hILE1BQU1DLHNCQUF1RSxHQUFHLEVBQUU7SUFDbEY7SUFDQSxJQUFJRCxTQUFTLENBQUM5QyxVQUFVLEVBQUU7TUFDekIsTUFBTWdELFdBQVcsR0FBR3hULE1BQU0sQ0FBQ3JCLElBQUksQ0FBQzJVLFNBQVMsQ0FBQzlDLFVBQVUsQ0FBQyxJQUFJLEVBQUU7TUFDM0QsSUFBSWdELFdBQVcsQ0FBQzNSLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDM0IyUixXQUFXLENBQUN2VSxPQUFPLENBQUMsVUFBVXdVLE1BQWMsRUFBRTtVQUM3QyxNQUFNNVQsUUFBUSxHQUFHeVQsU0FBUyxDQUFDOUMsVUFBVSxDQUFDaUQsTUFBTSxDQUFDO1VBQzdDLElBQUk1VCxRQUFRLENBQUNnRSxLQUFLLElBQUloRSxRQUFRLENBQUNnRSxLQUFLLENBQUNBLEtBQUssSUFBSWhFLFFBQVEsQ0FBQ2dFLEtBQUssQ0FBQzZQLE1BQU0sS0FBSyxTQUFTLEVBQUU7WUFDbEY7WUFDQSxNQUFNelQsZ0JBQWdCLEdBQUc7Y0FDeEJFLGFBQWEsRUFBRTtnQkFDZEMsYUFBYSxFQUFFUCxRQUFRLENBQUNnRSxLQUFLLENBQUNBO2NBQy9CLENBQUM7Y0FDRHhELHNCQUFzQixFQUFFb1Q7WUFDekIsQ0FBQztZQUVELElBQUlGLHNCQUFzQixDQUFDMVIsTUFBTSxHQUFHLENBQUMsRUFBRTtjQUN0QztjQUNBLEtBQUssTUFBTTNCLE9BQU8sSUFBSXFULHNCQUFzQixFQUFFO2dCQUM3QyxJQUFJclQsT0FBTyxDQUFDQyxhQUFhLEVBQUVDLGFBQWEsS0FBS0gsZ0JBQWdCLENBQUNFLGFBQWEsQ0FBQ0MsYUFBYSxFQUFFO2tCQUMxRm1ULHNCQUFzQixDQUFDalQsSUFBSSxDQUFDTCxnQkFBZ0IsQ0FBQztnQkFDOUM7Y0FDRDtZQUNELENBQUMsTUFBTTtjQUNOc1Qsc0JBQXNCLENBQUNqVCxJQUFJLENBQUNMLGdCQUFnQixDQUFDO1lBQzlDO1VBQ0Q7UUFDRCxDQUFDLENBQUM7TUFDSDtJQUNEO0lBQ0EsT0FBT3NULHNCQUFzQjtFQUM5QjtFQUVBLFNBQVNJLDZDQUE2Q0EsQ0FDckRDLFNBQW1CLEVBQ25CQyxTQUE0QyxFQVEzQztJQUNELE1BQU1DLGlCQU9MLEdBQUcsQ0FBQyxDQUFDO0lBQ04sSUFBSUMsR0FBRztJQUNQLE1BQU1DLGNBQWMsR0FBR0osU0FBUyxDQUFDSyxvQkFTaEM7SUFDRCxLQUFLLE1BQU1DLE1BQU0sSUFBSUYsY0FBYyxFQUFFO01BQ3BDLElBQUlFLE1BQU0sQ0FBQy9TLFFBQVEsQ0FBQyx1Q0FBdUMsQ0FBQyxJQUFJK1MsTUFBTSxDQUFDL1MsUUFBUSxDQUFDLG1DQUFtQyxDQUFDLEVBQUU7UUFDckgsTUFBTWdULFNBQVMsR0FBR0gsY0FBYyxDQUFDRSxNQUFNLENBQUMsQ0FBQ0UsVUFBVSxFQUFFQyxjQUFjLEVBQUVDLFFBQVE7UUFDN0UsSUFBSUgsU0FBUyxLQUFLMVcsU0FBUyxFQUFFO1VBQzVCLE1BQU02VixTQUFTLEdBQUdPLFNBQVMsQ0FBQ00sU0FBUyxDQUFDO1VBQ3RDLElBQUliLFNBQVMsQ0FBQzVULGNBQWMsSUFBSTRULFNBQVMsQ0FBQy9RLE1BQU0sRUFBRTtZQUNqRCxJQUFJMlIsTUFBTSxDQUFDL1MsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO2NBQzdCNFMsR0FBRyxHQUFHUSxRQUFRLENBQUMsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUVMLE1BQU0sQ0FBQyxDQUFDO1lBQ2pELENBQUMsTUFBTTtjQUNOSCxHQUFHLEdBQUdRLFFBQVEsQ0FBQyxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUVMLE1BQU0sQ0FBQyxDQUFDO1lBQy9DO1lBQ0EsTUFBTVgsc0JBQXNCLEdBQUduTyxXQUFXLENBQUNpTyx3QkFBd0IsQ0FBQ0MsU0FBUyxDQUFDO1lBQzlFUSxpQkFBaUIsQ0FBQ0MsR0FBRyxDQUFDLEdBQUc7Y0FDeEJyVSxjQUFjLEVBQUU0VCxTQUFTLENBQUM1VCxjQUFjO2NBQ3hDNkMsTUFBTSxFQUFFK1EsU0FBUyxDQUFDL1EsTUFBTTtjQUN4QkwscUJBQXFCLEVBQUVxUjtZQUN4QixDQUFDO1VBQ0YsQ0FBQyxNQUFNO1lBQ054TixHQUFHLENBQUNELEtBQUssQ0FBQyxrRkFBa0ZxTyxTQUFTLEVBQUUsQ0FBQztVQUN6RztRQUNEO01BQ0Q7SUFDRDtJQUNBLE9BQU9MLGlCQUFpQjtFQUN6QjtFQUVBLFNBQVNVLHlCQUF5QkEsQ0FBQzNFLGlCQUFtQyxFQUFFNEUsU0FBa0IsRUFBb0I7SUFDN0csTUFBTUMsU0FBUyxHQUFHLE9BQU9ELFNBQVMsS0FBSyxRQUFRLEdBQUdFLElBQUksQ0FBQ0MsS0FBSyxDQUFDSCxTQUFTLENBQUMsR0FBR0EsU0FBUztJQUNuRixLQUFLLE1BQU12VSxPQUFPLElBQUl3VSxTQUFTLEVBQUU7TUFDaEMsTUFBTUcsY0FBYyxHQUNsQjNVLE9BQU8sQ0FBQyxlQUFlLENBQUMsSUFBSUEsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUNyRUEsT0FBTyxDQUFDLCtDQUErQyxDQUFDLElBQUlBLE9BQU8sQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDLE9BQU8sQ0FBRTtNQUNoSSxNQUFNNFUsdUJBQXVCLEdBQzVCNVUsT0FBTyxDQUFDLHdCQUF3QixDQUFDLElBQUlBLE9BQU8sQ0FBQyx3REFBd0QsQ0FBQztNQUN2RyxNQUFNNlUsYUFBYSxHQUFHbEYsaUJBQWlCLENBQUNtRixlQUFlLENBQUNILGNBQWMsQ0FBQztNQUN2RSxJQUFJRSxhQUFhLEVBQUU7UUFDbEI7UUFDQWxGLGlCQUFpQixDQUFDb0Ysa0JBQWtCLENBQUNKLGNBQWMsQ0FBQztRQUNwRGhGLGlCQUFpQixDQUFDcUYsbUJBQW1CLENBQUNKLHVCQUF1QixFQUFFQyxhQUFhLENBQUM7TUFDOUU7SUFDRDtJQUNBLE9BQU9sRixpQkFBaUI7RUFDekI7RUFVQSxlQUFlc0YsNEJBQTRCQSxDQUMxQ3RTLFVBQTBCLEVBQzFCdVMsS0FBYSxFQUNiaFAsVUFBa0IsRUFDZ0I7SUFDbEMsT0FBTyxJQUFJN0IsT0FBTyxDQUF5QixVQUFVQyxPQUFPLEVBQUU7TUFDN0QsSUFBSWdHLGVBQWUsRUFBRTZLLGlDQUFpQztNQUN0RCxJQUFJalAsVUFBVSxLQUFLLEVBQUUsRUFBRTtRQUN0Qm9FLGVBQWUsR0FBRzNILFVBQVUsQ0FBQ2tCLFNBQVMsQ0FBQyxHQUFHcVIsS0FBSyxxREFBMEMsQ0FBQztRQUMxRkMsaUNBQWlDLEdBQUd4UyxVQUFVLENBQUNrQixTQUFTLENBQUMsR0FBR3FSLEtBQUssdUVBQTRELENBQUM7TUFDL0gsQ0FBQyxNQUFNO1FBQ041SyxlQUFlLEdBQUczSCxVQUFVLENBQUNrQixTQUFTLENBQUMsR0FBR3FSLEtBQUssdURBQTRDaFAsVUFBVSxFQUFFLENBQUM7UUFDeEdpUCxpQ0FBaUMsR0FBR3hTLFVBQVUsQ0FBQ2tCLFNBQVMsQ0FDdkQsR0FBR3FSLEtBQUsseUVBQThEaFAsVUFBVSxFQUNqRixDQUFDO01BQ0Y7TUFFQSxNQUFNa1AsMEJBQTBCLEdBQUcsQ0FBQztRQUFFNVYsY0FBYyxFQUFFOEs7TUFBZ0IsQ0FBQyxDQUFDO01BQ3hFLE1BQU1qTCxlQUFlLEdBQUc7UUFDdkJHLGNBQWMsRUFBRThLO01BQ2pCLENBQUM7TUFDRGhHLE9BQU8sQ0FBQztRQUNQK1Esa0JBQWtCLEVBQUVILEtBQUs7UUFDekJJLHlCQUF5QixFQUFFRiwwQkFBMEI7UUFDckQ1VixjQUFjLEVBQUVILGVBQWU7UUFDL0J3QyxrQkFBa0IsRUFBRXNUO01BQ3JCLENBQUMsQ0FBQztJQUNILENBQUMsQ0FBQztFQUNIO0VBRUEsZUFBZUksMEJBQTBCQSxDQUFDNVMsVUFBMEIsRUFBRXVTLEtBQWEsRUFBRWhQLFVBQWtCLEVBQW1DO0lBQ3pJLE9BQU9oQixXQUFXLENBQUNzUSwwQkFBMEIsQ0FBQzdTLFVBQVUsRUFBRXVTLEtBQUssRUFBRWhQLFVBQVUsQ0FBQztFQUM3RTtFQUVBLFNBQVN1UCwwQkFBMEJBLENBQUNDLDZCQUFxRSxFQUE2QjtJQUNySSxNQUFNQyxtQkFBOEMsR0FBRyxDQUFDLENBQUM7SUFDekQsSUFBSUQsNkJBQTZCLElBQUlBLDZCQUE2QixDQUFDRSw0QkFBNEIsS0FBS3JZLFNBQVMsRUFBRTtNQUM5R21ZLDZCQUE2QixDQUFDRSw0QkFBNEIsQ0FBQzdXLE9BQU8sQ0FBQyxVQUFVOFcsU0FBUyxFQUFFO1FBQ3ZGLElBQUlBLFNBQVMsQ0FBQ0MsUUFBUSxJQUFJRCxTQUFTLENBQUNFLGtCQUFrQixLQUFLeFksU0FBUyxFQUFFO1VBQ3JFO1VBQ0EsSUFBSW9ZLG1CQUFtQixDQUFDRSxTQUFTLENBQUNDLFFBQVEsQ0FBQzVWLGFBQWEsQ0FBQyxLQUFLM0MsU0FBUyxFQUFFO1lBQ3hFb1ksbUJBQW1CLENBQUNFLFNBQVMsQ0FBQ0MsUUFBUSxDQUFDNVYsYUFBYSxDQUFDLENBQUNFLElBQUksQ0FBQ3lWLFNBQVMsQ0FBQ0Usa0JBQWtCLENBQUM7VUFDekYsQ0FBQyxNQUFNO1lBQ05KLG1CQUFtQixDQUFDRSxTQUFTLENBQUNDLFFBQVEsQ0FBQzVWLGFBQWEsQ0FBQyxHQUFHLENBQUMyVixTQUFTLENBQUNFLGtCQUFrQixDQUFDO1VBQ3ZGO1FBQ0Q7TUFDRCxDQUFDLENBQUM7SUFDSDtJQUNBLE9BQU9KLG1CQUFtQjtFQUMzQjtFQUNBLFNBQVNLLHFCQUFxQkEsQ0FDN0JOLDZCQUFxRSxFQUNyRU8sWUFBK0QsRUFDcEQ7SUFDWCxJQUFJQyxNQUFnQixHQUFHLEVBQUU7SUFDekIsSUFBSVIsNkJBQTZCLElBQUlBLDZCQUE2QixDQUFDTyxZQUFZLENBQWdELEVBQUU7TUFDaElDLE1BQU0sR0FDTFIsNkJBQTZCLENBQUNPLFlBQVksQ0FBZ0QsQ0FDekZFLEdBQUcsQ0FBQyxVQUFVTixTQUEyQyxFQUFFO1FBQzVELE9BQU9BLFNBQVMsQ0FBQzNWLGFBQWE7TUFDL0IsQ0FBQyxDQUFDO0lBQ0g7SUFDQSxPQUFPZ1csTUFBTTtFQUNkO0VBRUEsU0FBU0UsMEJBQTBCQSxDQUFDQyxLQUFlLEVBQUVDLE9BQWUsRUFBRUMsS0FBZSxFQUFZO0lBQ2hHLE1BQU1DLGFBQWEsR0FBR0YsT0FBTyxHQUFHLEdBQUc7SUFDbkMsT0FBT0QsS0FBSyxDQUFDSSxNQUFNLENBQUMsQ0FBQ0MsUUFBa0IsRUFBRUMsV0FBbUIsS0FBSztNQUNoRSxJQUFJQSxXQUFXLENBQUNDLFVBQVUsQ0FBQ0osYUFBYSxDQUFDLEVBQUU7UUFDMUMsTUFBTUssT0FBTyxHQUFHRixXQUFXLENBQUNsWixPQUFPLENBQUMrWSxhQUFhLEVBQUUsRUFBRSxDQUFDO1FBQ3RELElBQUksQ0FBQ0UsUUFBUSxDQUFDelYsUUFBUSxDQUFDNFYsT0FBTyxDQUFDLEVBQUU7VUFDaENILFFBQVEsQ0FBQ3RXLElBQUksQ0FBQ3lXLE9BQU8sQ0FBQztRQUN2QjtNQUNEO01BQ0EsT0FBT0gsUUFBUTtJQUNoQixDQUFDLEVBQUVILEtBQUssQ0FBQztFQUNWO0VBT0EsU0FBU08sMkJBQTJCQSxDQUFDOVksVUFBa0IsRUFBRWdCLFFBQXdCLEVBQXVCO0lBQ3ZHO0lBQ0EsTUFBTStULElBQXlCLEdBQUc7TUFDakNnRSxrQkFBa0IsRUFBRSxFQUFFO01BQ3RCQyx1QkFBdUIsRUFBRSxFQUFFO01BQzNCQyx3QkFBd0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFDRCxJQUFJQyxtQkFBbUI7SUFDdkIsTUFBTUMsY0FBYyxHQUFHLDRCQUE0QjtJQUNuRCxNQUFNQyxNQUFNLEdBQUcsK0NBQStDO0lBQzlELE1BQU1DLG1CQUFtQixHQUFHclosVUFBVSxDQUFDc1osVUFBVSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQ3RXLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQ2tLLE1BQU0sQ0FBQ25CLFdBQVcsQ0FBQ3dOLHVCQUF1QixDQUFDO0lBQ3BILE1BQU1DLGNBQWMsR0FBRyxJQUFJSCxtQkFBbUIsQ0FBQ0ksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHO0lBQzNELE1BQU1DLGFBQWEsR0FBRzNOLFdBQVcsQ0FBQzROLGdCQUFnQixDQUFDM1osVUFBVSxFQUFFZ0IsUUFBUSxDQUFDO0lBQ3hFLE1BQU00WSxrQkFBa0IsR0FBR0YsYUFBYSxDQUFDMVcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDa0ssTUFBTSxDQUFDbkIsV0FBVyxDQUFDd04sdUJBQXVCLENBQUM7SUFDL0YsTUFBTU0sYUFBYSxHQUFHN1ksUUFBUSxDQUFDNkUsU0FBUyxDQUFDLEdBQUcyVCxjQUFjLGlCQUFpQixDQUFDO0lBQzVFLE1BQU1NLGtCQUFrQixHQUFHLENBQUMsQ0FBQ0QsYUFBYSxJQUFJUixtQkFBbUIsQ0FBQ0EsbUJBQW1CLENBQUMxVixNQUFNLEdBQUcsQ0FBQyxDQUFDOztJQUVqRztJQUNBO0lBQ0EsSUFBSSxDQUFDa1csYUFBYSxFQUFFO01BQ25CWCxtQkFBbUIsR0FBR2xZLFFBQVEsQ0FBQzZFLFNBQVMsQ0FBQyxHQUFHNlQsYUFBYSxHQUFHTixNQUFNLEVBQUUsQ0FBc0Q7TUFDMUhyRSxJQUFJLENBQUNnRSxrQkFBa0IsR0FBR2YscUJBQXFCLENBQUNrQixtQkFBbUIsRUFBRSxvQkFBb0IsQ0FBQyxJQUFJLEVBQUU7TUFDaEcsTUFBTWEsa0JBQWtCLEdBQUcvWSxRQUFRLENBQUM2RSxTQUFTLENBQUMsR0FBRzJULGNBQWMsK0NBQStDLENBQUM7TUFDL0csSUFBSSxDQUFDTyxrQkFBa0IsRUFBRTtRQUN4QmhGLElBQUksQ0FBQ2lFLHVCQUF1QixHQUFHaEIscUJBQXFCLENBQUNrQixtQkFBbUIsRUFBRSx5QkFBeUIsQ0FBQyxJQUFJLEVBQUU7TUFDM0c7TUFDQTtNQUNBbkUsSUFBSSxDQUFDa0Usd0JBQXdCLEdBQUd4QiwwQkFBMEIsQ0FBQ3lCLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RGO0lBRUEsSUFBSUcsbUJBQW1CLENBQUMxVixNQUFNLEdBQUcsQ0FBQyxFQUFFO01BQ25DLE1BQU0yVSxPQUFPLEdBQUd1QixhQUFhLEdBQUlDLGtCQUFrQixHQUFjRixrQkFBa0IsQ0FBQ0Esa0JBQWtCLENBQUNqVyxNQUFNLEdBQUcsQ0FBQyxDQUFDO01BQ2xIO01BQ0EsTUFBTXFXLG1CQUFtQixHQUFHSCxhQUFhLEdBQUdILGFBQWEsR0FBRyxJQUFJRSxrQkFBa0IsQ0FBQzlLLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzJLLElBQUksQ0FBQyxJQUFJTixjQUFjLEdBQUcsQ0FBQyxFQUFFO01BQzdIO01BQ0E7TUFDQSxNQUFNYyxVQUErQixHQUFHO1FBQ3ZDbEIsa0JBQWtCLEVBQUUsRUFBRTtRQUN0QkMsdUJBQXVCLEVBQUUsRUFBRTtRQUMzQkMsd0JBQXdCLEVBQUUsQ0FBQztNQUM1QixDQUFDO01BQ0QsSUFBSSxDQUFDWCxPQUFPLENBQUNyVixRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDN0IsTUFBTWlYLFNBQVMsR0FBR2xaLFFBQVEsQ0FBQzZFLFNBQVMsQ0FBQyxHQUFHbVUsbUJBQW1CLEdBQUdaLE1BQU0sRUFBRSxDQUFzRDtRQUM1SHJFLElBQUksQ0FBQ2dFLGtCQUFrQixHQUFHWCwwQkFBMEIsQ0FDbkRKLHFCQUFxQixDQUFDa0MsU0FBUyxFQUFFLG9CQUFvQixDQUFDLElBQUksRUFBRSxFQUM1RDVCLE9BQU8sRUFDUHZELElBQUksQ0FBQ2dFLGtCQUFrQixJQUFJLEVBQzVCLENBQUM7UUFDRGhFLElBQUksQ0FBQ2lFLHVCQUF1QixHQUFHWiwwQkFBMEIsQ0FDeERKLHFCQUFxQixDQUFDa0MsU0FBUyxFQUFFLHlCQUF5QixDQUFDLElBQUksRUFBRSxFQUNqRTVCLE9BQU8sRUFDUHZELElBQUksQ0FBQ2lFLHVCQUF1QixJQUFJLEVBQ2pDLENBQUM7UUFDRDtRQUNBLE1BQU1tQixtQkFBbUIsR0FBRzFDLDBCQUEwQixDQUFDeUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZFRCxVQUFVLENBQUNoQix3QkFBd0IsR0FBR25YLE1BQU0sQ0FBQ3JCLElBQUksQ0FBQzBaLG1CQUFtQixDQUFDLENBQUMxQixNQUFNLENBQzVFLENBQUMyQixPQUFpQyxFQUFFQyxRQUFnQixLQUFLO1VBQ3hELElBQUlBLFFBQVEsQ0FBQ3pCLFVBQVUsQ0FBQ04sT0FBTyxHQUFHLEdBQUcsQ0FBQyxFQUFFO1lBQ3ZDLE1BQU1nQyxXQUFXLEdBQUdELFFBQVEsQ0FBQzVhLE9BQU8sQ0FBQzZZLE9BQU8sR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQ3ZEOEIsT0FBTyxDQUFDRSxXQUFXLENBQUMsR0FBR0gsbUJBQW1CLENBQUNFLFFBQVEsQ0FBQztVQUNyRDtVQUNBLE9BQU9ELE9BQU87UUFDZixDQUFDLEVBQ0QsQ0FBQyxDQUNGLENBQUM7TUFDRjs7TUFFQTtNQUNBckYsSUFBSSxDQUFDa0Usd0JBQXdCLEdBQUdzQixZQUFZLENBQzNDLENBQUMsQ0FBQyxFQUNGeEYsSUFBSSxDQUFDa0Usd0JBQXdCLElBQUksQ0FBQyxDQUFDLEVBQ25DZ0IsVUFBVSxDQUFDaEIsd0JBQXdCLElBQUksQ0FBQyxDQUN6QyxDQUE2Qjs7TUFFN0I7TUFDQTtNQUNBLE1BQU11QixnQkFBZ0IsR0FBR0MsaUJBQWlCLENBQUNDLHlCQUF5QixDQUFDMVosUUFBUSxFQUFFZ1osbUJBQW1CLEVBQUUxQixPQUFPLENBQUNnQixVQUFVLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO01BQ25JLE1BQU1xQixjQUFjLEdBQUdILGdCQUFnQixJQUFLQSxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBMkM7TUFDNUgsTUFBTUksY0FBYyxHQUFHNUMscUJBQXFCLENBQUMyQyxjQUFjLEVBQUUsb0JBQW9CLENBQUMsSUFBSSxFQUFFO01BQ3hGNUYsSUFBSSxDQUFDZ0Usa0JBQWtCLEdBQUc4QixVQUFVLENBQUM5RixJQUFJLENBQUNnRSxrQkFBa0IsQ0FBQ3JSLE1BQU0sQ0FBQ2tULGNBQWMsQ0FBQyxDQUFDO01BQ3BGLE1BQU1FLGlCQUFpQixHQUFHOUMscUJBQXFCLENBQUMyQyxjQUFjLEVBQUUseUJBQXlCLENBQUMsSUFBSSxFQUFFO01BQ2hHNUYsSUFBSSxDQUFDaUUsdUJBQXVCLEdBQUc2QixVQUFVLENBQUM5RixJQUFJLENBQUNpRSx1QkFBdUIsQ0FBQ3RSLE1BQU0sQ0FBQ29ULGlCQUFpQixDQUFDLENBQUM7TUFDakc7TUFDQS9GLElBQUksQ0FBQ2tFLHdCQUF3QixHQUFHc0IsWUFBWSxDQUMzQyxDQUFDLENBQUMsRUFDRnhGLElBQUksQ0FBQ2tFLHdCQUF3QixJQUFJLENBQUMsQ0FBQyxFQUNuQ3hCLDBCQUEwQixDQUFDa0QsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUNoRCxDQUE2Qjs7TUFFN0I7TUFDQTtNQUNBLE1BQU1JLHdCQUF3QixHQUFHL1osUUFBUSxDQUFDNkUsU0FBUyxDQUNsRCxJQUFJd1QsbUJBQW1CLENBQUNJLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBR0wsTUFBTSxFQUMzQyxDQUEwQztNQUMxQyxNQUFNNEIsZ0JBQWdCLEdBQUdoRCxxQkFBcUIsQ0FBQytDLHdCQUF3QixFQUFFLG9CQUFvQixDQUFDLElBQUksRUFBRTtNQUNwR2hHLElBQUksQ0FBQ2dFLGtCQUFrQixHQUFHOEIsVUFBVSxDQUFDOUYsSUFBSSxDQUFDZ0Usa0JBQWtCLENBQUNyUixNQUFNLENBQUNzVCxnQkFBZ0IsQ0FBQyxDQUFDO01BQ3RGLE1BQU1DLHNCQUFzQixHQUFHakQscUJBQXFCLENBQUMrQyx3QkFBd0IsRUFBRSx5QkFBeUIsQ0FBQyxJQUFJLEVBQUU7TUFDL0doRyxJQUFJLENBQUNpRSx1QkFBdUIsR0FBRzZCLFVBQVUsQ0FBQzlGLElBQUksQ0FBQ2lFLHVCQUF1QixDQUFDdFIsTUFBTSxDQUFDdVQsc0JBQXNCLENBQUMsQ0FBQztNQUN0RztNQUNBbEcsSUFBSSxDQUFDa0Usd0JBQXdCLEdBQUdzQixZQUFZLENBQzNDLENBQUMsQ0FBQyxFQUNGeEYsSUFBSSxDQUFDa0Usd0JBQXdCLEVBQzdCeEIsMEJBQTBCLENBQUNzRCx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FDMUQsQ0FBOEI7SUFDL0I7SUFDQSxPQUFPaEcsSUFBSTtFQUNaO0VBOEJBLGVBQWVtRyx1QkFBdUJBLENBQ3JDQyxhQUFzQyxFQUN0Q0MscUJBQTJDLEVBQzNDQyxVQU9DLEVBQ0RDLFNBQTRCLEVBQytCO0lBQzNELE1BQU1DLFFBQVEsR0FBR0YsVUFBVSxJQUFJLENBQUMsQ0FBQztJQUNqQyxJQUFJQyxTQUFTLElBQUksT0FBT0gsYUFBYSxLQUFLLFFBQVEsRUFBRTtNQUNuRCxPQUFPRyxTQUFTLENBQUNKLHVCQUF1QixDQUFDQyxhQUFhLEVBQUVDLHFCQUFxQixFQUFFRyxRQUFRLENBQUNDLElBQUksQ0FBQyxDQUFDalQsSUFBSSxDQUFDLFVBQVVrVCxTQUFTLEVBQUU7UUFDdkg7UUFDQSxPQUFPSCxTQUFTLENBQUNJLE9BQU8sS0FBSyxTQUFTLElBQUlELFNBQVMsQ0FBQzlYLE1BQU0sR0FBRyxDQUFDLEdBQUc4WCxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUdBLFNBQVM7TUFDMUYsQ0FBQyxDQUFDO0lBQ0gsQ0FBQyxNQUFNO01BQ04sTUFBTUUsWUFBWSxHQUNqQixPQUFPUixhQUFhLEtBQUssUUFBUSxHQUFHUyxvQkFBb0IsQ0FBQ0MsWUFBWSxDQUFDVixhQUFhLEVBQUUsVUFBVSxDQUFDLEdBQUdBLGFBQWE7TUFDakgsTUFBTU0sU0FBUyxHQUFHLE1BQU1LLGVBQWUsQ0FBQ0MsT0FBTyxDQUFDSixZQUFZLEVBQUU7UUFBRWpiLElBQUksRUFBRXlhO01BQWMsQ0FBQyxFQUFFQyxxQkFBcUIsQ0FBQztNQUM3RyxNQUFNbFMsUUFBUSxHQUFHdVMsU0FBUyxDQUFDTyxpQkFBaUI7TUFDNUMsSUFBSSxDQUFDLENBQUNULFFBQVEsQ0FBQ1UsS0FBSyxJQUFJL1MsUUFBUSxFQUFFO1FBQ2pDLE9BQU9BLFFBQVE7TUFDaEI7TUFDQSxJQUFJZ1QsS0FBNEMsR0FBR2QscUJBQXFCLENBQUN2VyxZQUFZLElBQUk7UUFBRXNYLFVBQVUsRUFBR0MsRUFBRSxJQUFLQSxFQUFFLENBQUM7TUFBRSxDQUFDO01BQ3JILElBQUliLFFBQVEsQ0FBQ2MsY0FBYyxFQUFFO1FBQzVCLE1BQU1DLFNBQVMsR0FBR2xULFNBQVMsQ0FBQ0Msb0JBQW9CLENBQUNrUyxRQUFRLENBQUNjLGNBQWMsQ0FBQztRQUN6RSxJQUFJQyxTQUFTLEVBQUU7VUFDZEosS0FBSyxHQUFHSSxTQUFTO1FBQ2xCO01BQ0Q7TUFDQSxJQUFJRCxjQUFnQztNQUNwQyxJQUFJZCxRQUFRLENBQUNDLElBQUksSUFBSSxDQUFDRCxRQUFRLENBQUNnQixVQUFVLEVBQUU7UUFDMUM7UUFDQTtRQUNBRixjQUFjLEdBQUdkLFFBQVEsQ0FBQ0MsSUFBSTtNQUMvQjtNQUNBLE9BQU9VLEtBQUssQ0FBQ0MsVUFBVSxDQUFDLFlBQVk7UUFDbkMsT0FBT0ssUUFBUSxDQUFDQyxJQUFJLENBQUM7VUFDcEJDLEVBQUUsRUFBRW5CLFFBQVEsQ0FBQ21CLEVBQUU7VUFDZi9JLElBQUksRUFBRSxrQkFBa0I7VUFDeEJwQyxXQUFXLEVBQUVnSyxRQUFRLENBQUNoSyxXQUFXO1VBQ2pDb0wsVUFBVSxFQUFFbEIsU0FBOEI7VUFDMUNjLFVBQVUsRUFBRWhCLFFBQVEsQ0FBQ2dCLFVBQVU7VUFDL0JGLGNBQWMsRUFBRUE7UUFDakIsQ0FBQyxDQUFDO01BQ0gsQ0FBQyxDQUFDO0lBQ0g7RUFDRDtFQUVBLFNBQVNPLGdCQUFnQkEsQ0FBQ3hVLElBQVksRUFBRXRJLFNBQXlCLEVBQXNCO0lBQ3RGLE1BQU0rYyxLQUFLLEdBQUd6VSxJQUFJLENBQUNwRixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUNrSyxNQUFNLENBQUM0UCxPQUFPLENBQUM7TUFDNUNDLFlBQVksR0FBR0YsS0FBSyxDQUFDRyxHQUFHLENBQUMsQ0FBRTtNQUMzQkMsY0FBYyxHQUFHSixLQUFLLENBQUNwRCxJQUFJLENBQUMsR0FBRyxDQUFDO01BQ2hDeUQsU0FBUyxHQUFHRCxjQUFjLElBQUluZCxTQUFTLENBQUMrRixTQUFTLENBQUMsSUFBSW9YLGNBQWMsRUFBRSxDQUFDO0lBQ3hFLElBQUlDLFNBQVMsRUFBRW5TLEtBQUssS0FBSyxXQUFXLEVBQUU7TUFDckMsTUFBTW9TLGFBQWEsR0FBR04sS0FBSyxDQUFDQSxLQUFLLENBQUNsWixNQUFNLEdBQUcsQ0FBQyxDQUFDO01BQzdDLE9BQU8sSUFBSXdaLGFBQWEsSUFBSUosWUFBWSxFQUFFO0lBQzNDO0lBQ0EsT0FBT3hkLFNBQVM7RUFDakI7RUFFQSxlQUFlNlAsd0JBQXdCQSxDQUFDaEgsSUFBWSxFQUFFeEksS0FBaUIsRUFBb0I7SUFDMUYsSUFBSSxDQUFDd0ksSUFBSSxJQUFJLENBQUN4SSxLQUFLLEVBQUU7TUFDcEIsT0FBT3lHLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLElBQUksQ0FBQztJQUM3QjtJQUNBLE1BQU14RyxTQUFTLEdBQUdGLEtBQUssQ0FBQ0csWUFBWSxDQUFDLENBQUM7SUFDdEM7SUFDQSxNQUFNcWQsWUFBWSxHQUFHUixnQkFBZ0IsQ0FBQ3hVLElBQUksRUFBRXRJLFNBQVMsQ0FBQztJQUN0RCxJQUFJc2QsWUFBWSxFQUFFO01BQ2pCLE1BQU1DLGVBQWUsR0FBR3pkLEtBQUssQ0FBQzBkLFlBQVksQ0FBQ0YsWUFBWSxDQUFDO01BQ3hELE9BQU9DLGVBQWUsQ0FBQ0UsWUFBWSxDQUFDLENBQUM7SUFDdEM7SUFFQSxPQUFPbFgsT0FBTyxDQUFDQyxPQUFPLENBQUMsSUFBSSxDQUFDO0VBQzdCOztFQUVBO0VBQ0EsU0FBU2tYLGdCQUFnQkEsQ0FBQ3RHLEtBQWEsRUFBRXJDLFVBQWtCLEVBQVU7SUFDcEUsSUFBSTRJLFFBQVE7SUFDWixJQUFJdkcsS0FBSyxDQUFDalUsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEVBQUU7TUFDckN3YSxRQUFRLEdBQUd2RyxLQUFLLENBQUNsVSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUMsQ0FBQyxNQUFNO01BQ047TUFDQSxNQUFNMGEsT0FBTyxHQUFHeEcsS0FBSyxDQUFDbFUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDQSxLQUFLLENBQUMsR0FBRyxDQUFDO01BQy9DeWEsUUFBUSxHQUFHLElBQUlDLE9BQU8sQ0FBQ0EsT0FBTyxDQUFDL1osTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHO0lBQzlDO0lBQ0EsT0FBTzhaLFFBQVEsR0FBRzVJLFVBQVU7RUFDN0I7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBUzhJLHFDQUFxQ0EsQ0FBQ0MsVUFBa0IsRUFBRUMsT0FBZ0IsRUFBVTtJQUM1RjtJQUNBO0lBQ0E7O0lBRUEsTUFBTUMsZUFBZSxHQUFHLElBQUlDLFVBQVUsQ0FBQztNQUFFQyxPQUFPLEVBQUVKO0lBQVcsQ0FBQyxDQUFDO0lBQy9EQyxPQUFPLENBQUNJLFlBQVksQ0FBQ0gsZUFBZSxDQUFDO0lBQ3JDLE1BQU1JLFVBQVUsR0FBR0osZUFBZSxDQUFDSyxVQUFVLENBQUMsQ0FBQztJQUMvQ04sT0FBTyxDQUFDTyxlQUFlLENBQUNOLGVBQWUsQ0FBQztJQUN4Q0EsZUFBZSxDQUFDTyxPQUFPLENBQUMsQ0FBQztJQUV6QixPQUFPSCxVQUFVO0VBQ2xCO0VBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTSSxhQUFhQSxDQUFBLEVBQVk7SUFDakMsT0FBTyxDQUFDQyxNQUFNLENBQUNDLE1BQU0sQ0FBQ0MsT0FBTyxJQUFJRixNQUFNLENBQUNHLE1BQU0sQ0FBQ0MsS0FBSyxJQUFJLEdBQUc7RUFDNUQ7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU0Msd0JBQXdCQSxDQUFDZixPQUFzQyxFQUFFZ0IsY0FBc0IsRUFBWTtJQUMzRyxNQUFNL2UsU0FBUyxHQUFHb0gsV0FBVyxDQUFDK0IsZUFBZSxDQUFDNFUsT0FBa0IsQ0FBQyxDQUFDOWQsWUFBWSxDQUFDLENBQUM7SUFDaEYsTUFBTStlLFNBQVMsR0FBR2hmLFNBQVMsQ0FBQ2lmLGNBQWMsQ0FBQyxHQUFHbEIsT0FBTyxDQUFDblMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHbVQsY0FBYyxFQUFFLENBQUM7SUFDNUYsTUFBTUcsZUFBeUMsR0FBRyxDQUFDLENBQUM7SUFDcEQsSUFBSUMsVUFBVSxHQUFHN2Usa0JBQWtCLENBQUNDLDJCQUEyQixDQUFDeWUsU0FBUyxDQUFDLENBQUNJLFlBQVk7SUFFdkYsSUFBSUMsa0JBQWtCLENBQStCRixVQUFVLCtEQUFvRCxDQUFDLEVBQUU7TUFDckhBLFVBQVUsR0FBR0EsVUFBVSxDQUFDRyxnQkFBZ0I7SUFDekM7SUFFQSxJQUFJLENBQUNILFVBQVUsSUFBSSxDQUFDRSxrQkFBa0IsQ0FBdUJGLFVBQVUsbURBQXdDLENBQUMsRUFBRTtNQUNqSCxPQUFPLEVBQUU7SUFDVjtJQUVBLENBQUNBLFVBQVUsQ0FBQzNMLGFBQWEsSUFBSSxFQUFFLEVBQUV2UyxPQUFPLENBQUVzZSxZQUFZLElBQUs7TUFDMUQsSUFBSUEsWUFBWSxDQUFDbkwsWUFBWSxFQUFFb0wsT0FBTyxJQUFJRCxZQUFZLENBQUNqTCxNQUFNLEVBQUV6USxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQzFFLE1BQU00YixZQUFZLEdBQUdGLFlBQVksQ0FBQ25MLFlBQVksQ0FBQ29MLE9BQU8sQ0FBQzNMLElBQUk7UUFDM0QsTUFBTTZMLFlBQVksR0FBR0gsWUFBWSxDQUFDbkwsWUFBWSxDQUFDdk8sS0FBSztRQUNwRCxLQUFLLE1BQU04WixDQUFDLElBQUlKLFlBQVksQ0FBQ2pMLE1BQU0sRUFBRTtVQUNwQyxNQUFNc0wsS0FBSyxHQUFHQyxrQkFBa0IsQ0FBQ04sWUFBWSxDQUFDakwsTUFBTSxDQUFDcUwsQ0FBQyxDQUFDLEVBQUVGLFlBQVksQ0FBQztVQUN0RVAsZUFBZSxDQUFDUSxZQUFZLENBQUMsR0FBRyxDQUFDUixlQUFlLENBQUNRLFlBQVksQ0FBQyxJQUFJLEVBQUUsRUFBRTlYLE1BQU0sQ0FDM0UsSUFBSWtZLE1BQU0sQ0FBQ0osWUFBWSxFQUFFRSxLQUFLLENBQUNHLFFBQVEsRUFBb0JILEtBQUssQ0FBQ0ksUUFBUSxFQUFFSixLQUFLLENBQUNLLFNBQVMsQ0FDM0YsQ0FBQztRQUNGO01BQ0Q7SUFDRCxDQUFDLENBQUM7SUFFRixNQUFNQyxPQUFPLEdBQUcsRUFBRTtJQUNsQixLQUFLLE1BQU01WCxJQUFJLElBQUk0VyxlQUFlLEVBQUU7TUFDbkNnQixPQUFPLENBQUM1ZCxJQUFJLENBQ1gsSUFBSXdkLE1BQU0sQ0FBQztRQUNWSSxPQUFPLEVBQUVoQixlQUFlLENBQUM1VyxJQUFJLENBQUM7UUFDOUI2WCxHQUFHLEVBQUU7TUFDTixDQUFDLENBQ0YsQ0FBQztJQUNGO0lBQ0EsT0FBT0QsT0FBTztFQUNmO0VBRUEsU0FBU0UsMEJBQTBCQSxDQUNsQ0MsU0FBaUIsRUFDakJ4YixVQUEwQixFQUMxQnliLFVBQWtCLEVBQ2xCQyxZQUF5QixFQUNpQjtJQUMxQyxNQUFNcmYsUUFBUSxHQUFHMkQsVUFBVSxDQUFDMmIsb0JBQW9CLENBQUNILFNBQVMsQ0FBbUI7SUFDN0UsT0FBT0ksZ0JBQWdCLEVBQUVDLDhCQUE4QixDQUFDSixVQUFVLEVBQUVwZixRQUFRLElBQUkyRCxVQUFVLEVBQUUwYixZQUFZLEVBQUU5RixZQUFZLENBQUM7RUFDeEg7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLGVBQWVrRyxpQkFBaUJBLENBQy9CQyxnQkFBd0IsRUFDeEJsRixJQUFVLEVBQ1YzVyxZQUEwQixFQUMxQjhiLGlCQUF5QyxFQUNWO0lBQy9CLE1BQU1DLE1BQU0sR0FBR0MsdUJBQXVCLENBQ3JDckYsSUFBSSxDQUFDNVUsaUJBQWlCLENBQUMsQ0FBQyxFQUN4QjhaLGdCQUFnQixFQUNoQmxGLElBQUksRUFDSjNXLFlBQVksRUFDWjhiLGlCQUFpQixFQUNqQixJQUNELENBQUM7SUFDRCxJQUFJQyxNQUFNLENBQUNFLEtBQUssSUFBSUYsTUFBTSxDQUFDRyxXQUFXLEtBQUt4aEIsU0FBUyxFQUFFO01BQ3JELE1BQU0ySCxXQUFXLENBQUN4SCx1QkFBdUIsQ0FBQ2toQixNQUFNLENBQUNHLFdBQVcsQ0FBQztJQUM5RDtJQUVBLE9BQU9ILE1BQU0sQ0FBQ0csV0FBVztFQUMxQjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNGLHVCQUF1QkEsQ0FDL0JHLE9BQTBDLEVBQzFDTixnQkFBd0IsRUFDeEJsRixJQUFVLEVBQ1YzVyxZQUEwQixFQUMxQjhiLGlCQUF5QyxFQUVxQjtJQUFBLElBRDlETSxRQUFRLEdBQUF2UixTQUFBLENBQUEvTCxNQUFBLFFBQUErTCxTQUFBLFFBQUFuUSxTQUFBLEdBQUFtUSxTQUFBLE1BQUcsS0FBSztJQUVoQixJQUFJc1IsT0FBTyxFQUFFO01BQ1osTUFBTUUsZUFBZSxHQUNwQlIsZ0JBQWdCLEtBQUssT0FBTyxHQUFHM1UsV0FBVyxDQUFDb1YsZ0JBQWdCLENBQUNILE9BQU8sQ0FBQyxHQUFHalYsV0FBVyxDQUFDcVYsaUJBQWlCLENBQUNKLE9BQU8sQ0FBQztNQUM5RyxJQUFJSyxpQkFBaUM7TUFDckMsSUFBSUgsZUFBZSxFQUFFO1FBQ3BCLElBQUlGLE9BQU8sQ0FBQzlnQixPQUFPLENBQUMsQ0FBQyxLQUFLZ2hCLGVBQWUsRUFBRTtVQUMxQyxPQUFPO1lBQUVILFdBQVcsRUFBRUMsT0FBTztZQUFFRixLQUFLLEVBQUU7VUFBTSxDQUFDO1FBQzlDO1FBQ0E7UUFDQSxNQUFNUSw0QkFBNEIsR0FBR3pjLFlBQVksQ0FDL0M2RSxxQkFBcUIsQ0FBQyxDQUFDLENBQ3ZCNlgsaUJBQWlCLENBQUMsQ0FBQyxDQUNuQkMsSUFBSSxDQUNIQyxRQUFjLElBQ2RBLFFBQVEsQ0FBQzdhLGlCQUFpQixDQUFDLENBQUMsRUFBRTFHLE9BQU8sQ0FBQyxDQUFDLEtBQUtnaEIsZUFBZSxJQUMzRE8sUUFBUSxDQUFDN2EsaUJBQWlCLENBQUMsQ0FBQyxFQUFFZixTQUFTLENBQUMsQ0FBQyxLQUFLdEcsU0FDaEQsQ0FBQyxFQUNDcUgsaUJBQWlCLENBQUMsQ0FBbUI7UUFDeEMsSUFBSTBhLDRCQUE0QixFQUFFO1VBQ2pDLE9BQU87WUFBRVAsV0FBVyxFQUFFTyw0QkFBNEI7WUFBRVIsS0FBSyxFQUFFO1VBQU0sQ0FBQztRQUNuRTtRQUNBLE1BQU16USxhQUFhLEdBQUdtTCxJQUFJLENBQUMzYixRQUFRLENBQUMsVUFBVSxDQUFjO1FBQzVEd2hCLGlCQUFpQixHQUFHaFIsYUFBYSxDQUFDcVIsV0FBVyxDQUFDLG9CQUFvQixDQUFDO1FBQ25FLElBQUlULFFBQVEsSUFBSUksaUJBQWlCLEVBQUVuaEIsT0FBTyxDQUFDLENBQUMsS0FBS2doQixlQUFlLEVBQUU7VUFDakUsT0FBTztZQUFFSCxXQUFXLEVBQUVNLGlCQUFpQjtZQUFFUCxLQUFLLEVBQUU7VUFBTSxDQUFDO1FBQ3hEO1FBQ0EsTUFBTWxoQixLQUFLLEdBQUdvaEIsT0FBTyxDQUFDbmhCLFFBQVEsQ0FBQyxDQUFDO1FBQ2hDd2hCLGlCQUFpQixHQUFHTSxvQkFBb0IsQ0FBQy9oQixLQUFLLEVBQUVzaEIsZUFBZSxFQUFFUCxpQkFBaUIsQ0FBQztRQUNuRjtRQUNBLElBQUlNLFFBQVEsRUFBRTtVQUNiNVEsYUFBYSxDQUFDMUksV0FBVyxDQUFDLG9CQUFvQixFQUFFMFosaUJBQWlCLENBQUM7UUFDbkU7UUFFQSxPQUFPO1VBQUVOLFdBQVcsRUFBRU0saUJBQWlCO1VBQUVQLEtBQUssRUFBRTtRQUFLLENBQUM7TUFDdkQ7SUFDRDtJQUNBLE9BQU87TUFDTkMsV0FBVyxFQUFFeGhCLFNBQVM7TUFDdEJ1aEIsS0FBSyxFQUFFO0lBQ1IsQ0FBQztFQUNGOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU2Esb0JBQW9CQSxDQUFDL2hCLEtBQWlCLEVBQUVzaEIsZUFBdUIsRUFBRVAsaUJBQXlDLEVBQWtCO0lBQ3BJLE1BQU1pQixZQUFZLEdBQUc3VixXQUFXLENBQUM4VixlQUFlLENBQUNqaUIsS0FBSyxDQUFDRyxZQUFZLENBQUMsQ0FBQyxFQUFFbWhCLGVBQWUsQ0FBQztJQUN2RixNQUFNWSxvQkFBb0IsR0FBRztNQUFFLElBQUluQixpQkFBaUIsSUFBSSxDQUFDLENBQUM7SUFBRSxDQUFDO0lBQzdELElBQUlpQixZQUFZLEtBQUssQ0FBQ0Usb0JBQW9CLENBQUNDLE9BQU8sSUFBSUQsb0JBQW9CLENBQUNDLE9BQU8sQ0FBQzllLFFBQVEsQ0FBQzJlLFlBQVksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO01BQ3JILE1BQU1JLFNBQVMsR0FBR0Ysb0JBQW9CLENBQUNDLE9BQU8sRUFBRS9lLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFO01BQ2hFZ2YsU0FBUyxDQUFDNWYsSUFBSSxDQUFDd2YsWUFBWSxDQUFDO01BQzVCRSxvQkFBb0IsQ0FBQ0MsT0FBTyxHQUFHQyxTQUFTLENBQUN2SSxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ25EO0lBQ0EsT0FBTzdaLEtBQUssQ0FBQ3FpQixXQUFXLENBQUNmLGVBQWUsRUFBRTNoQixTQUFTLEVBQUV1aUIsb0JBQW9CLENBQUMsQ0FBQ0ksZUFBZSxDQUFDLENBQUM7RUFDN0Y7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVM5UCxhQUFhQSxDQUFDK1AsTUFBc0MsRUFBVztJQUN2RSxNQUFNQyxhQUFhLEdBQUdELE1BQU0sQ0FBQ3RaLEdBQUcsQ0FBaUIsNEJBQTRCLENBQUMsR0FBR3NaLE1BQU0sQ0FBQ0UsT0FBTyxDQUFDLENBQUMsR0FBR0YsTUFBTTtJQUMxRyxPQUFPQyxhQUFhLENBQUN4YixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRThhLFdBQVcsQ0FBQyxhQUFhLENBQUM7RUFDekU7RUFFQSxNQUFNeGEsV0FBVyxHQUFHO0lBQ25Cb2Isd0JBQXdCLEVBQUUsUUFBUTtJQUNsQ0MsZUFBZSxFQUFFNVosaUJBQWlCO0lBQ2xDMUMsYUFBYSxFQUFFQSxhQUFhO0lBQzVCc0Qsa0JBQWtCLEVBQUVBLGtCQUFrQjtJQUN0Q2laLG1CQUFtQixFQUFFN2hCLHNCQUFzQjtJQUMzQzhoQix3QkFBd0IsRUFBRXRhLDBCQUEwQjtJQUNwRGMsZUFBZSxFQUFFQSxlQUFlO0lBQ2hDd0ksd0JBQXdCLEVBQUVsSCwwQkFBMEI7SUFDcEQwRyxnQkFBZ0IsRUFBRUEsZ0JBQWdCO0lBQ2xDeVIsc0NBQXNDLEVBQUUvVyx3Q0FBd0M7SUFDaEZtQyxnQkFBZ0IsRUFBRUEsZ0JBQWdCO0lBQ2xDVixhQUFhLEVBQUVBLGFBQWE7SUFDNUJlLGtCQUFrQixFQUFFQSxrQkFBa0I7SUFDdEM4RCxnQkFBZ0IsRUFBRUEsZ0JBQWdCO0lBQ2xDbEIsMkJBQTJCLEVBQUVBLDJCQUEyQjtJQUN4RFcsZ0NBQWdDLEVBQUVBLGdDQUFnQztJQUNsRVcsZUFBZSxFQUFFQSxlQUFlO0lBQ2hDc1EsYUFBYSxFQUFFM1gsZUFBZTtJQUM5QnlLLDZDQUE2QyxFQUFFQSw2Q0FBNkM7SUFDNUZOLHdCQUF3QixFQUFFQSx3QkFBd0I7SUFDbERtQix5QkFBeUIsRUFBRUEseUJBQXlCO0lBQ3BEc00sd0JBQXdCLEVBQUVyTCwwQkFBMEI7SUFDcERDLDBCQUEwQixFQUFFUCw0QkFBNEI7SUFDeER2WCx1QkFBdUIsRUFBRUEsdUJBQXVCO0lBQ2hEb1osMkJBQTJCLEVBQUVBLDJCQUEyQjtJQUN4RHRJLDRCQUE0QixFQUFFQSw0QkFBNEI7SUFDMURnRSw0QkFBNEIsRUFBRUEsNEJBQTRCO0lBQzFEcEYsd0JBQXdCLEVBQUVBLHdCQUF3QjtJQUNsRDhMLHVCQUF1QixFQUFFQSx1QkFBdUI7SUFDaEQySCxrQkFBa0IsRUFBRTtNQUNuQkMsbUJBQW1CLEVBQUUsb0JBQW9CO01BQ3pDQyx5QkFBeUIsRUFBRSx5QkFBeUI7TUFDcERDLG1CQUFtQixFQUFFO0lBQ3RCLENBQUM7SUFDRHJTLHNCQUFzQixFQUFFLENBQUMsYUFBYSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLDhCQUE4QixDQUFDO0lBQ3RJdFIsbUJBQW1CLEVBQUVBLG1CQUFtQjtJQUN4Q2lRLG9DQUFvQyxFQUFFQSxvQ0FBb0M7SUFDMUVVLHdCQUF3QixFQUFFQSx3QkFBd0I7SUFDbER6UCxlQUFlLEVBQUVBLGVBQWU7SUFDaENpZCxnQkFBZ0IsRUFBRUEsZ0JBQWdCO0lBQ2xDeUYsdUJBQXVCLEVBQUU1Z0Isd0JBQXdCO0lBQ2pENmdCLHFDQUFxQyxFQUFFdkYscUNBQXFDO0lBQzVFbloscUJBQXFCLEVBQUVBLHFCQUFxQjtJQUM1QzJDLDRCQUE0QixFQUFFVyw2QkFBNkI7SUFDM0Q4Vyx3QkFBd0IsRUFBRUEsd0JBQXdCO0lBQ2xENkIsaUJBQWlCLEVBQUVBLGlCQUFpQjtJQUNwQ0ksdUJBQXVCO0lBQ3ZCbFUseUJBQXlCLEVBQUVBLHlCQUF5QjtJQUNwRDJSLGFBQWE7SUFDYjRCLDBCQUEwQjtJQUMxQjlOLGFBQWEsRUFBRUE7RUFDaEIsQ0FBQztFQUFDLE9BRWFsTCxXQUFXO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
1075
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJub3JtYWxpemVTZWFyY2hUZXJtIiwic1NlYXJjaFRlcm0iLCJ1bmRlZmluZWQiLCJjb252ZXJ0ZWRTZWFyY2hUZXJtIiwicmVwbGFjZSIsInRyaW0iLCJ3YWl0Rm9yQ29udGV4dFJlcXVlc3RlZCIsImJpbmRpbmdDb250ZXh0IiwibW9kZWwiLCJnZXRNb2RlbCIsIm1ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsImVudGl0eVBhdGgiLCJnZXRNZXRhUGF0aCIsImdldFBhdGgiLCJkYXRhTW9kZWwiLCJNZXRhTW9kZWxDb252ZXJ0ZXIiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJnZXRDb250ZXh0IiwicmVxdWVzdFByb3BlcnR5IiwidGFyZ2V0RW50aXR5VHlwZSIsImtleXMiLCJuYW1lIiwiZm5IYXNUcmFuc2llbnRDb250ZXh0cyIsIm9MaXN0QmluZGluZyIsImJIYXNUcmFuc2llbnRDb250ZXh0cyIsImdldEN1cnJlbnRDb250ZXh0cyIsImZvckVhY2giLCJvQ29udGV4dCIsImlzVHJhbnNpZW50IiwiX2dldFNPSW50ZW50cyIsIm9TaGVsbFNlcnZpY2VIZWxwZXIiLCJvT2JqZWN0UGFnZUxheW91dCIsIm9TZW1hbnRpY09iamVjdCIsIm9QYXJhbSIsImdldExpbmtzIiwic2VtYW50aWNPYmplY3QiLCJwYXJhbXMiLCJfY3JlYXRlTWFwcGluZ3MiLCJvTWFwcGluZyIsImFTT01hcHBpbmdzIiwiYU1hcHBpbmdLZXlzIiwiT2JqZWN0Iiwib1NlbWFudGljTWFwcGluZyIsImVsZW1lbnQiLCJMb2NhbFByb3BlcnR5IiwiJFByb3BlcnR5UGF0aCIsIlNlbWFudGljT2JqZWN0UHJvcGVydHkiLCJwdXNoIiwiX2dldFJlbGF0ZWRBcHBzTWVudUl0ZW1zIiwibGlua0dyb3VwIiwiYUV4Y2x1ZGVkQWN0aW9ucyIsIm9UYXJnZXRQYXJhbXMiLCJhSXRlbXMiLCJhQWxsb3dlZEFjdGlvbnMiLCJsaW5rcyIsIm9MaW5rIiwic0ludGVudCIsImludGVudCIsInNBY3Rpb24iLCJzcGxpdCIsImluY2x1ZGVzIiwidGV4dCIsInRhcmdldFNlbU9iamVjdCIsInRhcmdldEFjdGlvbiIsInRhcmdldFBhcmFtcyIsIl9nZXRSZWxhdGVkSW50ZW50cyIsIm9BZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzIiwib0JpbmRpbmdDb250ZXh0IiwiYU1hbmlmZXN0U09JdGVtcyIsImFMaW5rcyIsImxlbmd0aCIsImFsbG93ZWRBY3Rpb25zIiwidW5hdmFpbGFibGVBY3Rpb25zIiwibWFwcGluZyIsIm5hdmlnYXRpb25Db250ZXh0cyIsInNlbWFudGljT2JqZWN0TWFwcGluZyIsIl9nZXRSZWxhdGVkSW50ZW50c1dpdGhTZW1hbnRpY09iamVjdHNBbmRBY3Rpb24iLCJzZW1hbnRpY09iamVjdEFuZEFjdGlvbiIsImFwcENvbXBvbmVudFNPSXRlbXMiLCJhY3Rpb25zIiwiYWN0aW9uIiwiZXhjbHVkZWRBY3Rpb25zIiwic29NYXBwaW5ncyIsInVwZGF0ZVJlbGF0ZUFwcHNNb2RlbCIsIm9FbnRyeSIsImFTZW1LZXlzIiwib01ldGFNb2RlbCIsIm9NZXRhUGF0aCIsImFwcENvbXBvbmVudCIsImdldFNoZWxsU2VydmljZXMiLCJzQ3VycmVudFNlbU9iaiIsInNDdXJyZW50QWN0aW9uIiwib1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMiLCJhUmVsYXRlZEFwcHNNZW51SXRlbXMiLCJhTWFuaWZlc3RTT0tleXMiLCJmbkdldFBhcnNlU2hlbGxIYXNoQW5kR2V0TGlua3MiLCJvUGFyc2VkVXJsIiwicGFyc2VTaGVsbEhhc2giLCJkb2N1bWVudCIsImxvY2F0aW9uIiwiaGFzaCIsInNTZW1LZXkiLCJ2YWx1ZSIsImFUZWNobmljYWxLZXlzIiwiZ2V0T2JqZWN0Iiwia2V5Iiwic09iaktleSIsIm9NYW5pZmVzdERhdGEiLCJnZXRUYXJnZXRWaWV3IiwiZ2V0Vmlld0RhdGEiLCJzZW1hbnRpY09iamVjdEludGVudHMiLCJhZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJjb21wb25lbnREYXRhIiwiZ2V0Q29tcG9uZW50RGF0YSIsImZlRW52aXJvbm1lbnQiLCJnZXRJbnRlbnQiLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0IiwiaXNTZW1hbnRpY09iamVjdEhhc1NhbWVUYXJnZXRJbk1hbmlmZXN0IiwiYUFubm90YXRpb25zU09JdGVtcyIsInNFbnRpdHlTZXRQYXRoIiwic0VudGl0eVR5cGVQYXRoIiwib0VudGl0eVNldEFubm90YXRpb25zIiwiQ29tbW9uVXRpbHMiLCJnZXRTZW1hbnRpY09iamVjdEFubm90YXRpb25zIiwiYkhhc0VudGl0eVNldFNPIiwib0VudGl0eVR5cGVBbm5vdGF0aW9ucyIsImFVbmF2YWlsYWJsZUFjdGlvbnMiLCJhTWFwcGluZ3MiLCJfcmVmIiwic29JdGVtcyIsImNvbmNhdCIsInNldFByb3BlcnR5IiwiZXJyb3IiLCJMb2ciLCJfZ2V0U2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyIsIm9FbnRpdHlBbm5vdGF0aW9ucyIsInNBbm5vdGF0aW9uTWFwcGluZ1Rlcm0iLCJzQW5ub3RhdGlvbkFjdGlvblRlcm0iLCJzUXVhbGlmaWVyIiwiZm5VcGRhdGVSZWxhdGVkQXBwc0RldGFpbHMiLCJwYXRoIiwic1NlbWFudGljS2V5Vm9jYWJ1bGFyeSIsInJlcXVlc3RPYmplY3QiLCJ0aGVuIiwicmVxdWVzdGVkT2JqZWN0IiwiY2F0Y2giLCJvRXJyb3IiLCJmbkZpcmVCdXR0b25QcmVzcyIsIm9CdXR0b24iLCJpc0EiLCJnZXRWaXNpYmxlIiwiZ2V0RW5hYmxlZCIsImZpcmVQcmVzcyIsImdldEFwcENvbXBvbmVudCIsIm9Db250cm9sIiwib093bmVyIiwiQ29tcG9uZW50IiwiZ2V0T3duZXJDb21wb25lbnRGb3IiLCJFcnJvciIsImdldEN1cnJlbnRQYWdlVmlldyIsIm9BcHBDb21wb25lbnQiLCJyb290Vmlld0NvbnRyb2xsZXIiLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJpc0ZjbEVuYWJsZWQiLCJnZXRSaWdodG1vc3RWaWV3IiwiZ2V0Um9vdENvbnRhaW5lciIsImdldEN1cnJlbnRQYWdlIiwib0NvbXBvbmVudCIsImdldENvbXBvbmVudEluc3RhbmNlIiwiZ2V0Um9vdENvbnRyb2wiLCJnZXRQYXJlbnQiLCJfZm5DaGVja0lzTWF0Y2giLCJvT2JqZWN0Iiwib0tleXNUb0NoZWNrIiwic0tleSIsImZuR2V0Q29udGV4dFBhdGhQcm9wZXJ0aWVzIiwibWV0YU1vZGVsQ29udGV4dCIsInNDb250ZXh0UGF0aCIsIm9GaWx0ZXIiLCJvRW50aXR5VHlwZSIsIm9Qcm9wZXJ0aWVzIiwiaGFzT3duUHJvcGVydHkiLCJ0ZXN0IiwiJGtpbmQiLCJmbkdldElCTkFjdGlvbnMiLCJhSUJOQWN0aW9ucyIsImFBY3Rpb25zIiwiZ2V0QWN0aW9ucyIsIm9BY3Rpb24iLCJnZXRBY3Rpb24iLCJvTWVudSIsImdldE1lbnUiLCJnZXRJdGVtcyIsIm9JdGVtIiwiZGF0YSIsImZuVXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkiLCJvVmlldyIsIm9QYXJhbXMiLCJpc1N0aWNreSIsIk1vZGVsSGVscGVyIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiZm5HZXRMaW5rcyIsIm9EYXRhIiwiYUtleXMiLCJpbmRleE9mIiwib0lCTkFjdGlvbiIsInNTZW1hbnRpY09iamVjdCIsImFMaW5rIiwic2V0VmlzaWJsZSIsImdldElkIiwic2hlbGxOYXZpZ2F0aW9uTm90QXZhaWxhYmxlIiwidXBkYXRlTWVudUJ1dHRvblZpc2libGl0eSIsIklCTkFjdGlvbnMiLCJtZW51QnV0dG9uV2l0aElCTkFjdGlvbiIsIklCTkFjdGlvbiIsIm1lbnVBY3Rpb24iLCJtZW51SXRlbXMiLCJ2aXNpYmxlTWVudUl0ZW1zIiwiZmlsdGVyIiwibWVudUl0ZW0iLCJnZXRBY3Rpb25QYXRoIiwiYWN0aW9uQ29udGV4dCIsImJSZXR1cm5Pbmx5UGF0aCIsImluQWN0aW9uTmFtZSIsImJDaGVja1N0YXRpY1ZhbHVlIiwic0FjdGlvbk5hbWUiLCJ0b1N0cmluZyIsInNFbnRpdHlUeXBlTmFtZSIsIiRUeXBlIiwic0VudGl0eU5hbWUiLCJnZXRFbnRpdHlTZXROYW1lIiwic1Byb3BlcnR5Iiwic0JpbmRpbmdQYXJhbWV0ZXIiLCJzRW50aXR5VHlwZSIsIm9FbnRpdHlDb250YWluZXIiLCJjb21wdXRlRGlzcGxheU1vZGUiLCJvUHJvcGVydHlBbm5vdGF0aW9ucyIsIm9Db2xsZWN0aW9uQW5ub3RhdGlvbnMiLCJvVGV4dEFubm90YXRpb24iLCJvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiIsIiRFbnVtTWVtYmVyIiwiX2dldEVudGl0eVR5cGUiLCJfcmVxdWVzdE9iamVjdCIsIm9TZWxlY3RlZENvbnRleHQiLCJuQnJhY2tldEluZGV4Iiwic1RhcmdldFR5cGUiLCJzbGljZSIsInNDdXJyZW50VHlwZSIsImdldEJpbmRpbmciLCJ3YXJuaW5nIiwic0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCIsIm9Qcm9taXNlIiwicmVxdWVzdFNpbmdsZXRvblByb3BlcnR5IiwidlByb3BlcnR5VmFsdWUiLCJzZXRDb250ZXh0c0Jhc2VkT25PcGVyYXRpb25BdmFpbGFibGUiLCJvSW50ZXJuYWxNb2RlbENvbnRleHQiLCJhUmVxdWVzdFByb21pc2VzIiwiZm9yQ29udGV4dE1lbnUiLCJhcmd1bWVudHMiLCJhbGwiLCJhUmVzdWx0cyIsImFBcHBsaWNhYmxlQ29udGV4dHMiLCJhTm90QXBwbGljYWJsZUNvbnRleHRzIiwiYVJlc3VsdCIsInNldER5bmFtaWNBY3Rpb25Db250ZXh0cyIsInRyYWNlIiwiYXBwbGljYWJsZSIsIm5vdEFwcGxpY2FibGUiLCJkeW5hbWljQWN0aW9uUGF0aFByZWZpeCIsImludGVybmFsTW9kZWwiLCJhcHBsaWNhYmxlUHJvcGVydHkiLCJub3RBcHBsaWNhYmxlUHJvcGVydHkiLCJnZXRTcGVjaWZpY0FsbG93ZWRFeHByZXNzaW9uIiwiYUV4cHJlc3Npb25zIiwiYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5IiwiQWxsb3dlZEV4cHJlc3Npb25zUHJpbyIsInNvcnQiLCJhIiwiYiIsImdldE9wZXJhdG9yc0Zvckd1aWRQcm9wZXJ0eSIsImFsbG93ZWRPcGVyYXRvcnNGb3JHdWlkIiwiZ2V0UGFyYW1ldGVySW5mbyIsInNQYXJhbWV0ZXJDb250ZXh0UGF0aCIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwiYlJlc3VsdENvbnRleHQiLCJvUGFyYW1ldGVySW5mbyIsImNvbnRleHRQYXRoIiwicGFyYW1ldGVyUHJvcGVydGllcyIsImdldENvbnRleHRQYXRoUHJvcGVydGllcyIsImFkZFBhZ2VDb250ZXh0VG9TZWxlY3Rpb25WYXJpYW50Iiwib1NlbGVjdGlvblZhcmlhbnQiLCJtUGFnZUNvbnRleHQiLCJvTmF2aWdhdGlvblNlcnZpY2UiLCJnZXROYXZpZ2F0aW9uU2VydmljZSIsIm1peEF0dHJpYnV0ZXNBbmRTZWxlY3Rpb25WYXJpYW50IiwidG9KU09OU3RyaW5nIiwiaXNTdGlja3lFZGl0TW9kZSIsImJJc1N0aWNreU1vZGUiLCJiVUlFZGl0YWJsZSIsImdldElzRWRpdGFibGUiLCJzZXRVc2VyRGVmYXVsdHMiLCJwYXJhbWV0ZXJzIiwiaXNBY3Rpb24iLCJpc0NyZWF0ZSIsImFjdGlvbkRlZmF1bHRWYWx1ZXMiLCJCYXNlVHlwZSIsIl9fdWk1X3JlcXVpcmVfYXN5bmMiLCJkZWZhdWx0IiwiVHlwZU1hcCIsInN0YXJ0dXBQYXJhbWV0ZXJzIiwic2hlbGxTZXJ2aWNlcyIsInN0YXJ0dXBBcHBTdGF0ZSIsImdldFN0YXJ0dXBBcHBTdGF0ZSIsInN0YXJ0dXBBcHBTdGF0ZURhdGEiLCJnZXREYXRhIiwiZXh0ZW5kZWRQYXJhbWV0ZXJzIiwic2VsZWN0aW9uVmFyaWFudCIsIlNlbGVjdE9wdGlvbnMiLCJvUGFyYW1ldGVyIiwic1Byb3BlcnR5TmFtZSIsInNQYXJhbWV0ZXJOYW1lIiwicGFyYW1ldGVydFR5cGUiLCJ0eXBlIiwiZ2V0QmFzZVR5cGUiLCJTdHJpbmciLCJ0eXBlSW5zdGFuY2UiLCJnZXREYXRhVHlwZUluc3RhbmNlIiwicGFyc2VWYWx1ZSIsIm9FeHRlbmRlZFBhcmFtZXRlciIsIlByb3BlcnR5TmFtZSIsIm9SYW5nZSIsIlJhbmdlcyIsIlNpZ24iLCJPcHRpb24iLCJMb3ciLCJnZXRBZGRpdGlvbmFsUGFyYW1zRm9yQ3JlYXRlIiwib1N0YXJ0dXBQYXJhbWV0ZXJzIiwib0luYm91bmRQYXJhbWV0ZXJzIiwib0luYm91bmRzIiwiYUNyZWF0ZVBhcmFtZXRlcnMiLCJzUGFyYW1ldGVyIiwidXNlRm9yQ3JlYXRlIiwib1JldCIsInNDcmVhdGVQYXJhbWV0ZXIiLCJhVmFsdWVzIiwiY3JlYXRlIiwiZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nIiwib091dGJvdW5kIiwiYVNlbWFudGljT2JqZWN0TWFwcGluZyIsImFQYXJhbWV0ZXJzIiwic1BhcmFtIiwiZm9ybWF0IiwiZ2V0SGVhZGVyRmFjZXRJdGVtQ29uZmlnRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uIiwib1ZpZXdEYXRhIiwib0Nyb3NzTmF2Iiwib0hlYWRlckZhY2V0SXRlbXMiLCJzSWQiLCJvQ29udHJvbENvbmZpZyIsImNvbnRyb2xDb25maWd1cmF0aW9uIiwiY29uZmlnIiwic091dGJvdW5kIiwibmF2aWdhdGlvbiIsInRhcmdldE91dGJvdW5kIiwib3V0Ym91bmQiLCJnZW5lcmF0ZSIsInNldFNlbWFudGljT2JqZWN0TWFwcGluZ3MiLCJ2TWFwcGluZ3MiLCJvTWFwcGluZ3MiLCJKU09OIiwicGFyc2UiLCJzTG9jYWxQcm9wZXJ0eSIsInNTZW1hbnRpY09iamVjdFByb3BlcnR5Iiwib1NlbGVjdE9wdGlvbiIsImdldFNlbGVjdE9wdGlvbiIsInJlbW92ZVNlbGVjdE9wdGlvbiIsIm1hc3NBZGRTZWxlY3RPcHRpb24iLCJmbkdldFNlbWFudGljT2JqZWN0c0Zyb21QYXRoIiwic1BhdGgiLCJhU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMiLCJhU2VtYW50aWNPYmplY3RGb3JHZXRMaW5rcyIsInNlbWFudGljT2JqZWN0UGF0aCIsInNlbWFudGljT2JqZWN0Rm9yR2V0TGlua3MiLCJmbkdldFNlbWFudGljT2JqZWN0UHJvbWlzZSIsImdldFNlbWFudGljT2JqZWN0c0Zyb21QYXRoIiwidGVtcGxhdGVDb250cm9sRnJhZ21lbnQiLCJzRnJhZ21lbnROYW1lIiwib1ByZXByb2Nlc3NvclNldHRpbmdzIiwib0luT3B0aW9ucyIsIm9Nb2RpZmllciIsIm9PcHRpb25zIiwidmlldyIsIm9GcmFnbWVudCIsInRhcmdldHMiLCJmcmFnbWVudERhdGEiLCJYTUxUZW1wbGF0ZVByb2Nlc3NvciIsImxvYWRUZW1wbGF0ZSIsIlhNTFByZXByb2Nlc3NvciIsInByb2Nlc3MiLCJmaXJzdEVsZW1lbnRDaGlsZCIsImlzWE1MIiwib3duZXIiLCJydW5Bc093bmVyIiwiZm4iLCJjb250YWluaW5nVmlldyIsInZpZXdPd25lciIsImNvbnRyb2xsZXIiLCJGcmFnbWVudCIsImxvYWQiLCJpZCIsImRlZmluaXRpb24iLCJnZXRTaW5nbGV0b25QYXRoIiwicGFydHMiLCJCb29sZWFuIiwicHJvcGVydHlOYW1lIiwicG9wIiwibmF2aWdhdGlvblBhdGgiLCJqb2luIiwiZW50aXR5U2V0Iiwic2luZ2xldG9uTmFtZSIsInJlc29sdmVkUGF0aCIsInByb3BlcnR5QmluZGluZyIsImJpbmRQcm9wZXJ0eSIsInJlcXVlc3RWYWx1ZSIsImdldFBhcmFtZXRlclBhdGgiLCJzQ29udGV4dCIsImFBY3Rpb24iLCJfZm50cmFuc2xhdGVkVGV4dEZyb21FeHBCaW5kaW5nU3RyaW5nIiwiZXhwQmluZGluZyIsImNvbnRyb2wiLCJhbnlSZXNvdXJjZVRleHQiLCJBbnlFbGVtZW50IiwiYW55VGV4dCIsImFkZERlcGVuZGVudCIsInJlc3VsdFRleHQiLCJnZXRBbnlUZXh0IiwicmVtb3ZlRGVwZW5kZW50IiwiZGVzdHJveSIsImlzU21hbGxEZXZpY2UiLCJEZXZpY2UiLCJzeXN0ZW0iLCJkZXNrdG9wIiwicmVzaXplIiwid2lkdGgiLCJnZXRGaWx0ZXJzRnJvbUFubm90YXRpb24iLCJhbm5vdGF0aW9uUGF0aCIsInN2Q29udGV4dCIsImdldE1ldGFDb250ZXh0IiwicHJvcGVydHlGaWx0ZXJzIiwiYW5ub3RhdGlvbiIsInRhcmdldE9iamVjdCIsImlzQW5ub3RhdGlvbk9mVHlwZSIsIlNlbGVjdGlvblZhcmlhbnQiLCJzZWxlY3RPcHRpb24iLCIkdGFyZ2V0IiwicHJvcGVydHlUeXBlIiwicHJvcGVydHlQYXRoIiwiaiIsInJhbmdlIiwiZ2V0UmFuZ2VEZWZpbml0aW9uIiwiRmlsdGVyIiwib3BlcmF0b3IiLCJyYW5nZUxvdyIsInJhbmdlSGlnaCIsImZpbHRlcnMiLCJhbmQiLCJnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yUGF0aCIsInNNZXRhUGF0aCIsInNFbnRpdHlTZXQiLCJvRGlhZ25vc3RpY3MiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsIkNvbnZlcnRlckNvbnRleHQiLCJjcmVhdGVDb252ZXJ0ZXJDb250ZXh0Rm9yTWFjcm8iLCJtZXJnZU9iamVjdHMiLCJjcmVhdGVSb290Q29udGV4dCIsInByb2dyYW1taW5nTW9kZWwiLCJiaW5kaW5nUGFyYW1ldGVycyIsInJlc3VsdCIsImZpbmRPckNyZWF0ZVJvb3RDb250ZXh0IiwiaXNOZXciLCJyb290Q29udGV4dCIsImNvbnRleHQiLCJ1c2VDYWNoZSIsInJvb3RDb250ZXh0UGF0aCIsImdldERyYWZ0Um9vdFBhdGgiLCJnZXRTdGlja3lSb290UGF0aCIsInNpbXBsZVJvb3RDb250ZXh0IiwiZXhpc3RpbmdCaW5kaW5nQ29udGV4dE9uUGFnZSIsImdldEluc3RhbmNlZFZpZXdzIiwiZmluZCIsInBhZ2VWaWV3IiwiZ2V0UHJvcGVydHkiLCJjcmVhdGVOZXdSb290Q29udGV4dCIsIm1lc3NhZ2VzUGF0aCIsImdldE1lc3NhZ2VzUGF0aCIsIm5ld0JpbmRpbmdQYXJhbWV0ZXJzIiwiJHNlbGVjdCIsIm5ld1NlbGVjdCIsImJpbmRDb250ZXh0IiwiZ2V0Qm91bmRDb250ZXh0Iiwic291cmNlIiwibWFuYWdlZE9iamVjdCIsImdldFZpZXciLCJJTkxJTkVFRElUX1VQREFURUdST1VQSUQiLCJmaXJlQnV0dG9uUHJlc3MiLCJoYXNUcmFuc2llbnRDb250ZXh0IiwidXBkYXRlUmVsYXRlZEFwcHNEZXRhaWxzIiwidXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkiLCJnZXRJQk5BY3Rpb25zIiwiZ2V0U2VtYW50aWNPYmplY3RQcm9taXNlIiwiRmlsdGVyUmVzdHJpY3Rpb25zIiwiUkVRVUlSRURfUFJPUEVSVElFUyIsIk5PTl9GSUxURVJBQkxFX1BST1BFUlRJRVMiLCJBTExPV0VEX0VYUFJFU1NJT05TIiwiZ2V0UmVsYXRlZEFwcHNNZW51SXRlbXMiLCJnZXRUcmFuc2xhdGVkVGV4dEZyb21FeHBCaW5kaW5nU3RyaW5nIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJDb21tb25VdGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFjdGlvblBhcmFtZXRlciBhcyBFZG1BY3Rpb25QYXJhbWV0ZXIgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0U2VtYW50aWNPYmplY3RNYXBwaW5nQWJzdHJhY3RUeXBlcyxcblx0U2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZVR5cGVzLFxuXHRTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHsgQ29tbW9uQW5ub3RhdGlvblRlcm1zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25cIjtcbmltcG9ydCB0eXBlIHsgU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCwgU2VsZWN0aW9uVmFyaWFudFR5cGUsIFRleHRBcnJhbmdlbWVudCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgbWVyZ2VPYmplY3RzIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBDb21wb25lbnREYXRhIH0gZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIEV4dGVuc2lvbkFQSSBmcm9tIFwic2FwL2ZlL2NvcmUvRXh0ZW5zaW9uQVBJXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCAqIGFzIE1ldGFNb2RlbENvbnZlcnRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgeyBpc0Fubm90YXRpb25PZlR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSB7IElTaGVsbFNlcnZpY2VzIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1NoZWxsU2VydmljZXNGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSBEaWFnbm9zdGljcyBmcm9tIFwic2FwL2ZlL2NvcmUvc3VwcG9ydC9EaWFnbm9zdGljc1wiO1xuaW1wb3J0IHR5cGUgU2VsZWN0aW9uVmFyaWFudCBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vU2VsZWN0aW9uVmFyaWFudFwiO1xuaW1wb3J0IHR5cGUgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCB0eXBlIE1lbnVCdXR0b24gZnJvbSBcInNhcC9tL01lbnVCdXR0b25cIjtcbmltcG9ydCB0eXBlIE1lbnVJdGVtIGZyb20gXCJzYXAvbS9NZW51SXRlbVwiO1xuaW1wb3J0IHR5cGUgTmF2Q29udGFpbmVyIGZyb20gXCJzYXAvbS9OYXZDb250YWluZXJcIjtcbmltcG9ydCB0eXBlIE92ZXJmbG93VG9vbGJhckJ1dHRvbiBmcm9tIFwic2FwL20vT3ZlcmZsb3dUb29sYmFyQnV0dG9uXCI7XG5pbXBvcnQgRGV2aWNlIGZyb20gXCJzYXAvdWkvRGV2aWNlXCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCB0eXBlIENvbXBvbmVudENvbnRhaW5lciBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50Q29udGFpbmVyXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgRnJhZ21lbnQgZnJvbSBcInNhcC91aS9jb3JlL0ZyYWdtZW50XCI7XG5pbXBvcnQgWE1MVGVtcGxhdGVQcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL1hNTFRlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IFhNTFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9YTUxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBNRENDaGFydCB9IGZyb20gXCJzYXAvdWkvbWRjL0NoYXJ0XCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgQWN0aW9uVG9vbGJhckFjdGlvbiBmcm9tIFwic2FwL3VpL21kYy9hY3Rpb250b29sYmFyL0FjdGlvblRvb2xiYXJBY3Rpb25cIjtcbmltcG9ydCB0eXBlIE1EQ1RhYmxlIGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9jb250ZW50L01EQ1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IExpbmsgfSBmcm9tIFwic2FwL3VzaGVsbC9zZXJ2aWNlcy9OYXZpZ2F0aW9uXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlTGF5b3V0IGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlTGF5b3V0XCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlU3ViU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVN1YlNlY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgTWV0YU1vZGVsRW50aXR5VHlwZSwgTWV0YU1vZGVsRW51bSwgTWV0YU1vZGVsTmF2UHJvcGVydHksIE1ldGFNb2RlbFByb3BlcnR5LCBNZXRhTW9kZWxUeXBlIH0gZnJvbSBcInR5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBCaW5kQ29udGV4dFBhcmFtZXRlcnMgfSBmcm9tIFwiLi9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9kcmFmdFwiO1xuaW1wb3J0IEFueUVsZW1lbnQgZnJvbSBcIi4vY29udHJvbHMvQW55RWxlbWVudFwiO1xuaW1wb3J0IHsgZ2V0UmFuZ2VEZWZpbml0aW9uIH0gZnJvbSBcIi4vY29udmVydGVycy9oZWxwZXJzL1NlbGVjdGlvblZhcmlhbnRIZWxwZXJcIjtcblxudHlwZSBNeUluYm94SW50ZW50ID0ge1xuXHRzZW1hbnRpY09iamVjdDogc3RyaW5nO1xuXHRhY3Rpb246IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNlYXJjaFRlcm0oc1NlYXJjaFRlcm06IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGlmICghc1NlYXJjaFRlcm0pIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0Ly8gY2hlY2tpbmcgZm9yIHNlYXJjaCB0ZXJtIFwiT1JcIiBpcyB0byBhbGxvdyB0aGUgU0Qgc3BlY2lmaWMgc2VhcmNoIGZvciBTYWxlT3JkZXJUeXBlPU9SIChPUiBpcyBhIGhhbmEga2V5d29yZClcblx0aWYgKHNTZWFyY2hUZXJtID09PSBcIk9SXCIpIHtcblx0XHRyZXR1cm4gJ1wiJyArIHNTZWFyY2hUZXJtICsgJ1wiJztcblx0fVxuXG5cdGNvbnN0IGNvbnZlcnRlZFNlYXJjaFRlcm0gPSBzU2VhcmNoVGVybS5yZXBsYWNlKC9bXCIoKTtdL2csIFwiIFwiKTsgLy8gdGhlc2UgYXJlIHRoZSBzcGVjaWZpYyBjaGFyYWN0ZXJzIHRoYXQgZmFpbCBvbiBib3RoLCBDQVAgYW5kIFJBUDogXCIoKTtcblx0aWYgKGNvbnZlcnRlZFNlYXJjaFRlcm0gPT09IFwiXCIgfHwgY29udmVydGVkU2VhcmNoVGVybSA9PT0gXCIgXCIpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdHJldHVybiBjb252ZXJ0ZWRTZWFyY2hUZXJtLnRyaW0oKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd2FpdEZvckNvbnRleHRSZXF1ZXN0ZWQoYmluZGluZ0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0KTogUHJvbWlzZTx2b2lkPiB7XG5cdGNvbnN0IG1vZGVsID0gYmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKTtcblx0Y29uc3QgbWV0YU1vZGVsID0gbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdGNvbnN0IGVudGl0eVBhdGggPSBtZXRhTW9kZWwuZ2V0TWV0YVBhdGgoYmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0Y29uc3QgZGF0YU1vZGVsID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhTW9kZWwuZ2V0Q29udGV4dChlbnRpdHlQYXRoKSk7XG5cdGF3YWl0IGJpbmRpbmdDb250ZXh0LnJlcXVlc3RQcm9wZXJ0eShkYXRhTW9kZWwudGFyZ2V0RW50aXR5VHlwZS5rZXlzWzBdPy5uYW1lKTtcbn1cblxuZnVuY3Rpb24gZm5IYXNUcmFuc2llbnRDb250ZXh0cyhvTGlzdEJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmcpOiBib29sZWFuIHtcblx0bGV0IGJIYXNUcmFuc2llbnRDb250ZXh0cyA9IGZhbHNlO1xuXHRpZiAob0xpc3RCaW5kaW5nKSB7XG5cdFx0b0xpc3RCaW5kaW5nLmdldEN1cnJlbnRDb250ZXh0cygpLmZvckVhY2goZnVuY3Rpb24gKG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCkge1xuXHRcdFx0aWYgKG9Db250ZXh0ICYmIG9Db250ZXh0LmlzVHJhbnNpZW50KCkpIHtcblx0XHRcdFx0Ykhhc1RyYW5zaWVudENvbnRleHRzID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gYkhhc1RyYW5zaWVudENvbnRleHRzO1xufVxuXG4vLyB0aGVyZSBpcyBubyBuYXZpZ2F0aW9uIGluIGVudGl0eVNldCBwYXRoIGFuZCBwcm9wZXJ0eSBwYXRoXG5cbmFzeW5jIGZ1bmN0aW9uIF9nZXRTT0ludGVudHMoXG5cdG9TaGVsbFNlcnZpY2VIZWxwZXI6IElTaGVsbFNlcnZpY2VzLFxuXHRvT2JqZWN0UGFnZUxheW91dDogT2JqZWN0UGFnZUxheW91dCxcblx0b1NlbWFudGljT2JqZWN0OiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdG9QYXJhbTogb2JqZWN0IHwgdW5kZWZpbmVkXG4pOiBQcm9taXNlPExpbmtbXVtdPiB7XG5cdHJldHVybiBvU2hlbGxTZXJ2aWNlSGVscGVyLmdldExpbmtzKFtcblx0XHR7XG5cdFx0XHRzZW1hbnRpY09iamVjdDogb1NlbWFudGljT2JqZWN0LFxuXHRcdFx0cGFyYW1zOiBvUGFyYW1cblx0XHR9XG5cdF0pO1xufVxuXG50eXBlIFNPTWFwcGluZyA9IHsgTG9jYWxQcm9wZXJ0eTogeyAkUHJvcGVydHlQYXRoOiBzdHJpbmcgfTsgU2VtYW50aWNPYmplY3RQcm9wZXJ0eTogdW5rbm93biB9O1xuLy8gVE8tRE8gYWRkIHRoaXMgYXMgcGFydCBvZiBhcHBseVNlbWFudGljT2JqZWN0bWFwcGluZ3MgbG9naWMgaW4gSW50ZW50QmFzZWRuYXZpZ2F0aW9uIGNvbnRyb2xsZXIgZXh0ZW5zaW9uXG5mdW5jdGlvbiBfY3JlYXRlTWFwcGluZ3Mob01hcHBpbmc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogU09NYXBwaW5nW10ge1xuXHRjb25zdCBhU09NYXBwaW5nczogU09NYXBwaW5nW10gPSBbXTtcblx0Y29uc3QgYU1hcHBpbmdLZXlzID0gT2JqZWN0LmtleXMob01hcHBpbmcpO1xuXHRsZXQgb1NlbWFudGljTWFwcGluZzogU09NYXBwaW5nO1xuXHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgYU1hcHBpbmdLZXlzKSB7XG5cdFx0b1NlbWFudGljTWFwcGluZyA9IHtcblx0XHRcdExvY2FsUHJvcGVydHk6IHtcblx0XHRcdFx0JFByb3BlcnR5UGF0aDogZWxlbWVudFxuXHRcdFx0fSxcblx0XHRcdFNlbWFudGljT2JqZWN0UHJvcGVydHk6IG9NYXBwaW5nW2VsZW1lbnRdXG5cdFx0fTtcblx0XHRhU09NYXBwaW5ncy5wdXNoKG9TZW1hbnRpY01hcHBpbmcpO1xuXHR9XG5cblx0cmV0dXJuIGFTT01hcHBpbmdzO1xufVxudHlwZSBTZW1hbnRpY0l0ZW0gPSB7XG5cdHRleHQ6IHN0cmluZztcblx0dGFyZ2V0U2VtT2JqZWN0OiBzdHJpbmc7XG5cdHRhcmdldEFjdGlvbjogc3RyaW5nO1xuXHR0YXJnZXRQYXJhbXM6IHVua25vd247XG59O1xuLyoqXG4gKiBAcGFyYW0gbGlua0dyb3VwXG4gKiBAcGFyYW0gYUV4Y2x1ZGVkQWN0aW9uc1xuICogQHBhcmFtIG9UYXJnZXRQYXJhbXNcbiAqIEBwYXJhbSBhSXRlbXNcbiAqIEBwYXJhbSBhQWxsb3dlZEFjdGlvbnNcbiAqL1xuZnVuY3Rpb24gX2dldFJlbGF0ZWRBcHBzTWVudUl0ZW1zKFxuXHRsaW5rR3JvdXA6IExpbmtbXVtdLFxuXHRhRXhjbHVkZWRBY3Rpb25zOiB1bmtub3duW10sXG5cdG9UYXJnZXRQYXJhbXM6IHVua25vd24sXG5cdGFJdGVtczogU2VtYW50aWNJdGVtW10sXG5cdGFBbGxvd2VkQWN0aW9ucz86IHVua25vd25bXVxuKTogdm9pZCB7XG5cdGZvciAoY29uc3QgbGlua3Mgb2YgbGlua0dyb3VwKSB7XG5cdFx0Zm9yIChjb25zdCBvTGluayBvZiBsaW5rcykge1xuXHRcdFx0Y29uc3Qgc0ludGVudCA9IG9MaW5rLmludGVudDtcblx0XHRcdGNvbnN0IHNBY3Rpb24gPSBzSW50ZW50LnNwbGl0KFwiLVwiKVsxXS5zcGxpdChcIj9cIilbMF07XG5cdFx0XHRpZiAoXG5cdFx0XHRcdChhQWxsb3dlZEFjdGlvbnMgJiYgYUFsbG93ZWRBY3Rpb25zLmluY2x1ZGVzKHNBY3Rpb24pKSB8fFxuXHRcdFx0XHQoIWFBbGxvd2VkQWN0aW9ucyAmJiBhRXhjbHVkZWRBY3Rpb25zICYmICFhRXhjbHVkZWRBY3Rpb25zLmluY2x1ZGVzKHNBY3Rpb24pKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGFJdGVtcy5wdXNoKHtcblx0XHRcdFx0XHR0ZXh0OiBvTGluay50ZXh0LFxuXHRcdFx0XHRcdHRhcmdldFNlbU9iamVjdDogc0ludGVudC5zcGxpdChcIiNcIilbMV0uc3BsaXQoXCItXCIpWzBdLFxuXHRcdFx0XHRcdHRhcmdldEFjdGlvbjogc0FjdGlvbi5zcGxpdChcIn5cIilbMF0sXG5cdFx0XHRcdFx0dGFyZ2V0UGFyYW1zOiBvVGFyZ2V0UGFyYW1zXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgdHlwZSBTZW1hbnRpY09iamVjdCA9IHtcblx0YWxsb3dlZEFjdGlvbnM/OiB1bmtub3duW107XG5cdHVuYXZhaWxhYmxlQWN0aW9ucz86IHVua25vd25bXTtcblx0c2VtYW50aWNPYmplY3Q6IHN0cmluZztcblx0cGF0aDogc3RyaW5nO1xuXHRtYXBwaW5nPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn07XG5cbmZ1bmN0aW9uIF9nZXRSZWxhdGVkSW50ZW50cyhcblx0b0FkZGl0aW9uYWxTZW1hbnRpY09iamVjdHM6IFNlbWFudGljT2JqZWN0LFxuXHRvQmluZGluZ0NvbnRleHQ6IENvbnRleHQsXG5cdGFNYW5pZmVzdFNPSXRlbXM6IFNlbWFudGljSXRlbVtdLFxuXHRhTGlua3M6IExpbmtbXVtdXG4pOiB2b2lkIHtcblx0aWYgKGFMaW5rcyAmJiBhTGlua3MubGVuZ3RoID4gMCkge1xuXHRcdGNvbnN0IGFBbGxvd2VkQWN0aW9ucyA9IG9BZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzLmFsbG93ZWRBY3Rpb25zIHx8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBhRXhjbHVkZWRBY3Rpb25zID0gb0FkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMudW5hdmFpbGFibGVBY3Rpb25zID8gb0FkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMudW5hdmFpbGFibGVBY3Rpb25zIDogW107XG5cdFx0Y29uc3QgYVNPTWFwcGluZ3MgPSBvQWRkaXRpb25hbFNlbWFudGljT2JqZWN0cy5tYXBwaW5nID8gX2NyZWF0ZU1hcHBpbmdzKG9BZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzLm1hcHBpbmcpIDogW107XG5cdFx0Y29uc3Qgb1RhcmdldFBhcmFtcyA9IHsgbmF2aWdhdGlvbkNvbnRleHRzOiBvQmluZGluZ0NvbnRleHQsIHNlbWFudGljT2JqZWN0TWFwcGluZzogYVNPTWFwcGluZ3MgfTtcblx0XHRfZ2V0UmVsYXRlZEFwcHNNZW51SXRlbXMoYUxpbmtzLCBhRXhjbHVkZWRBY3Rpb25zLCBvVGFyZ2V0UGFyYW1zLCBhTWFuaWZlc3RTT0l0ZW1zLCBhQWxsb3dlZEFjdGlvbnMpO1xuXHR9XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBmZXRjaGVzIHRoZSByZWxhdGVkIGludGVudHMgd2hlbiBzZW1hbnRpYyBvYmplY3QgYW5kIGFjdGlvbiBhcmUgcGFzc2VkIGZyb20gZmVFbnZpcm9ubWVudC5nZXRJbnRlbnQoKSBvbmx5IGluIGNhc2Ugb2YgTXkgSW5ib3ggaW50ZWdyYXRpb24uXG4gKiBAcGFyYW0gc2VtYW50aWNPYmplY3RBbmRBY3Rpb24gVGhpcyBzcGVjaWZpZXMgdGhlIHNlbWFudGljIG9iamVjdCBhbmQgYWN0aW9uIGZvciBmZXRjaGluZyB0aGUgaW50ZW50c1xuICogQHBhcmFtIG9CaW5kaW5nQ29udGV4dCBUaGlzIHNlcGNpZmllcyB0aGUgYmluZGluZyBjb250ZXh0IGZvciB1cGRhdGluZyByZWxhdGVkIGFwcHNcbiAqIEBwYXJhbSBhcHBDb21wb25lbnRTT0l0ZW1zIFRoaXMgaXMgYSBsaXN0IG9mIHNlbWFudGljIGl0ZW1zIHVzZWQgZm9yIHVwZGF0aW5nIHRoZSByZWxhdGVkIGFwcHMgYnV0dG9uXG4gKiBAcGFyYW0gYUxpbmtzIFRoaXMgaXMgYW4gYXJyYXkgY29tcHJpc2luZyBvZiByZWxhdGVkIGludGVudHNcbiAqL1xuXG5mdW5jdGlvbiBfZ2V0UmVsYXRlZEludGVudHNXaXRoU2VtYW50aWNPYmplY3RzQW5kQWN0aW9uKFxuXHRzZW1hbnRpY09iamVjdEFuZEFjdGlvbjogTXlJbmJveEludGVudCxcblx0b0JpbmRpbmdDb250ZXh0OiBDb250ZXh0LFxuXHRhcHBDb21wb25lbnRTT0l0ZW1zOiBTZW1hbnRpY0l0ZW1bXSxcblx0YUxpbmtzOiBMaW5rW11bXVxuKTogdm9pZCB7XG5cdGlmIChhTGlua3MubGVuZ3RoID4gMCkge1xuXHRcdGNvbnN0IGFjdGlvbnMgPSBbc2VtYW50aWNPYmplY3RBbmRBY3Rpb24uYWN0aW9uXTtcblx0XHRjb25zdCBleGNsdWRlZEFjdGlvbnM6IFtdID0gW107XG5cdFx0Y29uc3Qgc29NYXBwaW5nczogW10gPSBbXTtcblx0XHRjb25zdCB0YXJnZXRQYXJhbXMgPSB7IG5hdmlnYXRpb25Db250ZXh0czogb0JpbmRpbmdDb250ZXh0LCBzZW1hbnRpY09iamVjdE1hcHBpbmc6IHNvTWFwcGluZ3MgfTtcblx0XHRfZ2V0UmVsYXRlZEFwcHNNZW51SXRlbXMoYUxpbmtzLCBleGNsdWRlZEFjdGlvbnMsIHRhcmdldFBhcmFtcywgYXBwQ29tcG9uZW50U09JdGVtcywgYWN0aW9ucyk7XG5cdH1cbn1cblxudHlwZSBTZW1hbnRpY09iamVjdENvbmZpZyA9IHtcblx0YWRkaXRpb25hbFNlbWFudGljT2JqZWN0czogUmVjb3JkPHN0cmluZywgU2VtYW50aWNPYmplY3Q+O1xufTtcbnR5cGUgUmVsYXRlZEFwcHNDb25maWcgPSB7XG5cdHRleHQ6IHN0cmluZztcblx0dGFyZ2V0U2VtT2JqZWN0OiBzdHJpbmc7XG5cdHRhcmdldEFjdGlvbjogc3RyaW5nO1xufTtcbmFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVJlbGF0ZUFwcHNNb2RlbChcblx0b0JpbmRpbmdDb250ZXh0OiBDb250ZXh0LFxuXHRvRW50cnk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkLFxuXHRvT2JqZWN0UGFnZUxheW91dDogT2JqZWN0UGFnZUxheW91dCxcblx0YVNlbUtleXM6IHsgJFByb3BlcnR5UGF0aDogc3RyaW5nIH1bXSxcblx0b01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdG9NZXRhUGF0aDogc3RyaW5nLFxuXHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudFxuKTogUHJvbWlzZTxSZWxhdGVkQXBwc0NvbmZpZ1tdPiB7XG5cdGNvbnN0IG9TaGVsbFNlcnZpY2VIZWxwZXI6IElTaGVsbFNlcnZpY2VzID0gYXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKTtcblx0Y29uc3Qgb1BhcmFtOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXHRsZXQgc0N1cnJlbnRTZW1PYmogPSBcIlwiLFxuXHRcdHNDdXJyZW50QWN0aW9uID0gXCJcIjtcblx0bGV0IG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zO1xuXHRsZXQgYVJlbGF0ZWRBcHBzTWVudUl0ZW1zOiBSZWxhdGVkQXBwc0NvbmZpZ1tdID0gW107XG5cdGxldCBhRXhjbHVkZWRBY3Rpb25zOiB1bmtub3duW10gPSBbXTtcblx0bGV0IGFNYW5pZmVzdFNPS2V5czogc3RyaW5nW107XG5cblx0YXN5bmMgZnVuY3Rpb24gZm5HZXRQYXJzZVNoZWxsSGFzaEFuZEdldExpbmtzKCk6IFByb21pc2U8TGlua1tdW10+IHtcblx0XHRjb25zdCBvUGFyc2VkVXJsID0gb1NoZWxsU2VydmljZUhlbHBlci5wYXJzZVNoZWxsSGFzaChkb2N1bWVudC5sb2NhdGlvbi5oYXNoKTtcblx0XHRzQ3VycmVudFNlbU9iaiA9IG9QYXJzZWRVcmwuc2VtYW50aWNPYmplY3Q7IC8vIEN1cnJlbnQgU2VtYW50aWMgT2JqZWN0XG5cdFx0c0N1cnJlbnRBY3Rpb24gPSBvUGFyc2VkVXJsLmFjdGlvbjtcblx0XHRyZXR1cm4gX2dldFNPSW50ZW50cyhvU2hlbGxTZXJ2aWNlSGVscGVyLCBvT2JqZWN0UGFnZUxheW91dCwgc0N1cnJlbnRTZW1PYmosIG9QYXJhbSk7XG5cdH1cblxuXHR0cnkge1xuXHRcdGlmIChvRW50cnkpIHtcblx0XHRcdGlmIChhU2VtS2V5cyAmJiBhU2VtS2V5cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiBhU2VtS2V5cykge1xuXHRcdFx0XHRcdGNvbnN0IHNTZW1LZXkgPSBlbGVtZW50LiRQcm9wZXJ0eVBhdGg7XG5cdFx0XHRcdFx0aWYgKCFvUGFyYW1bc1NlbUtleV0pIHtcblx0XHRcdFx0XHRcdG9QYXJhbVtzU2VtS2V5XSA9IHsgdmFsdWU6IG9FbnRyeVtzU2VtS2V5XSB9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gZmFsbGJhY2sgdG8gVGVjaG5pY2FsIEtleXMgaWYgbm8gU2VtYW50aWMgS2V5IGlzIHByZXNlbnRcblx0XHRcdFx0Y29uc3QgYVRlY2huaWNhbEtleXMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtvTWV0YVBhdGh9LyRUeXBlLyRLZXlgKTtcblx0XHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gYVRlY2huaWNhbEtleXMpIHtcblx0XHRcdFx0XHRjb25zdCBzT2JqS2V5ID0gYVRlY2huaWNhbEtleXNba2V5XTtcblx0XHRcdFx0XHRpZiAoIW9QYXJhbVtzT2JqS2V5XSkge1xuXHRcdFx0XHRcdFx0b1BhcmFtW3NPYmpLZXldID0geyB2YWx1ZTogb0VudHJ5W3NPYmpLZXldIH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIExvZ2ljIHRvIHJlYWQgYWRkaXRpb25hbCBTTyBmcm9tIG1hbmlmZXN0IGFuZCB1cGRhdGVkIHJlbGF0ZWRhcHBzIG1vZGVsXG5cblx0XHRjb25zdCBvTWFuaWZlc3REYXRhID0gZ2V0VGFyZ2V0VmlldyhvT2JqZWN0UGFnZUxheW91dCkuZ2V0Vmlld0RhdGEoKSBhcyBTZW1hbnRpY09iamVjdENvbmZpZztcblx0XHRjb25zdCBhTWFuaWZlc3RTT0l0ZW1zOiBTZW1hbnRpY0l0ZW1bXSA9IFtdO1xuXHRcdGxldCBzZW1hbnRpY09iamVjdEludGVudHM7XG5cdFx0aWYgKG9NYW5pZmVzdERhdGEuYWRkaXRpb25hbFNlbWFudGljT2JqZWN0cykge1xuXHRcdFx0YU1hbmlmZXN0U09LZXlzID0gT2JqZWN0LmtleXMob01hbmlmZXN0RGF0YS5hZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzKTtcblx0XHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiBhTWFuaWZlc3RTT0tleXMpIHtcblx0XHRcdFx0c2VtYW50aWNPYmplY3RJbnRlbnRzID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKF9nZXRTT0ludGVudHMob1NoZWxsU2VydmljZUhlbHBlciwgb09iamVjdFBhZ2VMYXlvdXQsIGVsZW1lbnQsIG9QYXJhbSkpO1xuXHRcdFx0XHRfZ2V0UmVsYXRlZEludGVudHMoXG5cdFx0XHRcdFx0b01hbmlmZXN0RGF0YS5hZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzW2VsZW1lbnRdLFxuXHRcdFx0XHRcdG9CaW5kaW5nQ29udGV4dCxcblx0XHRcdFx0XHRhTWFuaWZlc3RTT0l0ZW1zLFxuXHRcdFx0XHRcdHNlbWFudGljT2JqZWN0SW50ZW50c1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIGFwcENvbXBvbmVudFNPSXRlbXMgaXMgdXBkYXRlZCBpbiBjYXNlIG9mIE15IEluYm94IGludGVncmF0aW9uIHdoZW4gc2VtYW50aWMgb2JqZWN0IGFuZCBhY3Rpb24gYXJlIHBhc3NlZCBmcm9tIGZlRW52aXJvbm1lbnQuZ2V0SW50ZW50KCkgbWV0aG9kXG5cdFx0Ly8gSW4gb3RoZXIgY2FzZXMgaXQgcmVtYWlucyBhcyBhbiBlbXB0eSBsaXN0XG5cdFx0Ly8gV2UgY29uY2F0IHRoaXMgbGlzdCB0b3dhcmRzIHRoZSBlbmQgd2l0aCBhTWFuaWZlc3RTT0l0ZW1zXG5cblx0XHRjb25zdCBhcHBDb21wb25lbnRTT0l0ZW1zOiBTZW1hbnRpY0l0ZW1bXSA9IFtdO1xuXHRcdGNvbnN0IGNvbXBvbmVudERhdGE6IENvbXBvbmVudERhdGEgPSBhcHBDb21wb25lbnQuZ2V0Q29tcG9uZW50RGF0YSgpO1xuXHRcdGlmIChjb21wb25lbnREYXRhLmZlRW52aXJvbm1lbnQgJiYgY29tcG9uZW50RGF0YS5mZUVudmlyb25tZW50LmdldEludGVudCgpKSB7XG5cdFx0XHRjb25zdCBpbnRlbnQ6IE15SW5ib3hJbnRlbnQgPSBjb21wb25lbnREYXRhLmZlRW52aXJvbm1lbnQuZ2V0SW50ZW50KCk7XG5cdFx0XHRzZW1hbnRpY09iamVjdEludGVudHMgPSBhd2FpdCBQcm9taXNlLnJlc29sdmUoXG5cdFx0XHRcdF9nZXRTT0ludGVudHMob1NoZWxsU2VydmljZUhlbHBlciwgb09iamVjdFBhZ2VMYXlvdXQsIGludGVudC5zZW1hbnRpY09iamVjdCwgb1BhcmFtKVxuXHRcdFx0KTtcblx0XHRcdF9nZXRSZWxhdGVkSW50ZW50c1dpdGhTZW1hbnRpY09iamVjdHNBbmRBY3Rpb24oaW50ZW50LCBvQmluZGluZ0NvbnRleHQsIGFwcENvbXBvbmVudFNPSXRlbXMsIHNlbWFudGljT2JqZWN0SW50ZW50cyk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSBvT2JqZWN0UGFnZUxheW91dC5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IGFMaW5rcyA9IGF3YWl0IGZuR2V0UGFyc2VTaGVsbEhhc2hBbmRHZXRMaW5rcygpO1xuXHRcdGlmIChhTGlua3MpIHtcblx0XHRcdGlmIChhTGlua3MubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRsZXQgaXNTZW1hbnRpY09iamVjdEhhc1NhbWVUYXJnZXRJbk1hbmlmZXN0ID0gZmFsc2U7XG5cdFx0XHRcdGNvbnN0IG9UYXJnZXRQYXJhbXM6IHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHM/OiBDb250ZXh0O1xuXHRcdFx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZz86IE1ldGFNb2RlbFR5cGU8U2VtYW50aWNPYmplY3RNYXBwaW5nQWJzdHJhY3RUeXBlcz5bXTtcblx0XHRcdFx0fSA9IHt9O1xuXHRcdFx0XHRjb25zdCBhQW5ub3RhdGlvbnNTT0l0ZW1zOiBTZW1hbnRpY0l0ZW1bXSA9IFtdO1xuXHRcdFx0XHRjb25zdCBzRW50aXR5U2V0UGF0aCA9IGAke29NZXRhUGF0aH1AYDtcblx0XHRcdFx0Y29uc3Qgc0VudGl0eVR5cGVQYXRoID0gYCR7b01ldGFQYXRofS9AYDtcblx0XHRcdFx0Y29uc3Qgb0VudGl0eVNldEFubm90YXRpb25zID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc0VudGl0eVNldFBhdGgpO1xuXHRcdFx0XHRvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyA9IENvbW1vblV0aWxzLmdldFNlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMob0VudGl0eVNldEFubm90YXRpb25zLCBzQ3VycmVudFNlbU9iaik7XG5cdFx0XHRcdGlmICghb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYkhhc0VudGl0eVNldFNPKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb0VudGl0eVR5cGVBbm5vdGF0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNFbnRpdHlUeXBlUGF0aCk7XG5cdFx0XHRcdFx0b1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMgPSBDb21tb25VdGlscy5nZXRTZW1hbnRpY09iamVjdEFubm90YXRpb25zKG9FbnRpdHlUeXBlQW5ub3RhdGlvbnMsIHNDdXJyZW50U2VtT2JqKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRhRXhjbHVkZWRBY3Rpb25zID0gb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYVVuYXZhaWxhYmxlQWN0aW9ucztcblx0XHRcdFx0Ly9Ta2lwIHNhbWUgYXBwbGljYXRpb24gZnJvbSBSZWxhdGVkIEFwcHNcblx0XHRcdFx0YUV4Y2x1ZGVkQWN0aW9ucy5wdXNoKHNDdXJyZW50QWN0aW9uKTtcblx0XHRcdFx0b1RhcmdldFBhcmFtcy5uYXZpZ2F0aW9uQ29udGV4dHMgPSBvQmluZGluZ0NvbnRleHQ7XG5cdFx0XHRcdG9UYXJnZXRQYXJhbXMuc2VtYW50aWNPYmplY3RNYXBwaW5nID0gb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYU1hcHBpbmdzO1xuXHRcdFx0XHRfZ2V0UmVsYXRlZEFwcHNNZW51SXRlbXMoYUxpbmtzLCBhRXhjbHVkZWRBY3Rpb25zLCBvVGFyZ2V0UGFyYW1zLCBhQW5ub3RhdGlvbnNTT0l0ZW1zKTtcblxuXHRcdFx0XHRhTWFuaWZlc3RTT0l0ZW1zLmZvckVhY2goZnVuY3Rpb24gKHsgdGFyZ2V0U2VtT2JqZWN0IH0pIHtcblx0XHRcdFx0XHRpZiAoYUFubm90YXRpb25zU09JdGVtc1swXT8udGFyZ2V0U2VtT2JqZWN0ID09PSB0YXJnZXRTZW1PYmplY3QpIHtcblx0XHRcdFx0XHRcdGlzU2VtYW50aWNPYmplY3RIYXNTYW1lVGFyZ2V0SW5NYW5pZmVzdCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHQvLyByZW1vdmUgYWxsIGFjdGlvbnMgZnJvbSBjdXJyZW50IGhhc2ggYXBwbGljYXRpb24gaWYgbWFuaWZlc3QgY29udGFpbnMgZW1wdHkgYWxsb3dlZEFjdGlvbnNcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG9NYW5pZmVzdERhdGEuYWRkaXRpb25hbFNlbWFudGljT2JqZWN0cyAmJlxuXHRcdFx0XHRcdGFBbm5vdGF0aW9uc1NPSXRlbXNbMF0gJiZcblx0XHRcdFx0XHRvTWFuaWZlc3REYXRhLmFkZGl0aW9uYWxTZW1hbnRpY09iamVjdHNbYUFubm90YXRpb25zU09JdGVtc1swXS50YXJnZXRTZW1PYmplY3RdICYmXG5cdFx0XHRcdFx0ISFvTWFuaWZlc3REYXRhLmFkZGl0aW9uYWxTZW1hbnRpY09iamVjdHNbYUFubm90YXRpb25zU09JdGVtc1swXS50YXJnZXRTZW1PYmplY3RdLmFsbG93ZWRBY3Rpb25zXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGlzU2VtYW50aWNPYmplY3RIYXNTYW1lVGFyZ2V0SW5NYW5pZmVzdCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3Qgc29JdGVtcyA9IGFNYW5pZmVzdFNPSXRlbXMuY29uY2F0KGFwcENvbXBvbmVudFNPSXRlbXMpO1xuXHRcdFx0XHRhUmVsYXRlZEFwcHNNZW51SXRlbXMgPSBpc1NlbWFudGljT2JqZWN0SGFzU2FtZVRhcmdldEluTWFuaWZlc3QgPyBzb0l0ZW1zIDogc29JdGVtcy5jb25jYXQoYUFubm90YXRpb25zU09JdGVtcyk7XG5cdFx0XHRcdC8vIElmIG5vIGFwcCBpbiBsaXN0LCByZWxhdGVkIGFwcHMgYnV0dG9uIHdpbGwgYmUgaGlkZGVuXG5cdFx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwicmVsYXRlZEFwcHMvdmlzaWJpbGl0eVwiLCBhUmVsYXRlZEFwcHNNZW51SXRlbXMubGVuZ3RoID4gMCk7XG5cdFx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwicmVsYXRlZEFwcHMvaXRlbXNcIiwgYVJlbGF0ZWRBcHBzTWVudUl0ZW1zKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwicmVsYXRlZEFwcHMvdmlzaWJpbGl0eVwiLCBmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwicmVsYXRlZEFwcHMvdmlzaWJpbGl0eVwiLCBmYWxzZSk7XG5cdFx0fVxuXHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdExvZy5lcnJvcihcIkNhbm5vdCByZWFkIGxpbmtzXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdH1cblx0cmV0dXJuIGFSZWxhdGVkQXBwc01lbnVJdGVtcztcbn1cblxuZnVuY3Rpb24gX2dldFNlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMoXG5cdG9FbnRpdHlBbm5vdGF0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdHNDdXJyZW50U2VtT2JqOiBzdHJpbmdcbik6IHtcblx0Ykhhc0VudGl0eVNldFNPOiBib29sZWFuO1xuXHRhQWxsb3dlZEFjdGlvbnM6IHN0cmluZ1tdO1xuXHRhVW5hdmFpbGFibGVBY3Rpb25zOiBNZXRhTW9kZWxUeXBlPFNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zPltdO1xuXHRhTWFwcGluZ3M6IE1ldGFNb2RlbFR5cGU8U2VtYW50aWNPYmplY3RNYXBwaW5nQWJzdHJhY3RUeXBlcz5bXTtcbn0ge1xuXHRjb25zdCBvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyA9IHtcblx0XHRiSGFzRW50aXR5U2V0U086IGZhbHNlLFxuXHRcdGFBbGxvd2VkQWN0aW9uczogW10sXG5cdFx0YVVuYXZhaWxhYmxlQWN0aW9uczogW10gYXMgTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucz5bXSxcblx0XHRhTWFwcGluZ3M6IFtdIGFzIE1ldGFNb2RlbFR5cGU8U2VtYW50aWNPYmplY3RNYXBwaW5nQWJzdHJhY3RUeXBlcz5bXVxuXHR9O1xuXHRsZXQgc0Fubm90YXRpb25NYXBwaW5nVGVybSwgc0Fubm90YXRpb25BY3Rpb25UZXJtO1xuXHRsZXQgc1F1YWxpZmllcjtcblx0Zm9yIChjb25zdCBrZXkgaW4gb0VudGl0eUFubm90YXRpb25zKSB7XG5cdFx0aWYgKGtleS5pbmNsdWRlcyhDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNPYmplY3QpICYmIG9FbnRpdHlBbm5vdGF0aW9uc1trZXldID09PSBzQ3VycmVudFNlbU9iaikge1xuXHRcdFx0b1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYkhhc0VudGl0eVNldFNPID0gdHJ1ZTtcblx0XHRcdHNBbm5vdGF0aW9uTWFwcGluZ1Rlcm0gPSBgQCR7Q29tbW9uQW5ub3RhdGlvblRlcm1zLlNlbWFudGljT2JqZWN0TWFwcGluZ31gO1xuXHRcdFx0c0Fubm90YXRpb25BY3Rpb25UZXJtID0gYEAke0NvbW1vbkFubm90YXRpb25UZXJtcy5TZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uc31gO1xuXG5cdFx0XHRpZiAoa2V5LmluY2x1ZGVzKFwiI1wiKSkge1xuXHRcdFx0XHRzUXVhbGlmaWVyID0ga2V5LnNwbGl0KFwiI1wiKVsxXTtcblx0XHRcdFx0c0Fubm90YXRpb25NYXBwaW5nVGVybSA9IGAke3NBbm5vdGF0aW9uTWFwcGluZ1Rlcm19IyR7c1F1YWxpZmllcn1gO1xuXHRcdFx0XHRzQW5ub3RhdGlvbkFjdGlvblRlcm0gPSBgJHtzQW5ub3RhdGlvbkFjdGlvblRlcm19IyR7c1F1YWxpZmllcn1gO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG9FbnRpdHlBbm5vdGF0aW9uc1tzQW5ub3RhdGlvbk1hcHBpbmdUZXJtXSkge1xuXHRcdFx0XHRvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucy5hTWFwcGluZ3MgPSBvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucy5hTWFwcGluZ3MuY29uY2F0KFxuXHRcdFx0XHRcdG9FbnRpdHlBbm5vdGF0aW9uc1tzQW5ub3RhdGlvbk1hcHBpbmdUZXJtXSBhcyBNZXRhTW9kZWxUeXBlPFNlbWFudGljT2JqZWN0TWFwcGluZ0Fic3RyYWN0VHlwZXM+XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChvRW50aXR5QW5ub3RhdGlvbnNbc0Fubm90YXRpb25BY3Rpb25UZXJtXSkge1xuXHRcdFx0XHRvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucy5hVW5hdmFpbGFibGVBY3Rpb25zID0gb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYVVuYXZhaWxhYmxlQWN0aW9ucy5jb25jYXQoXG5cdFx0XHRcdFx0b0VudGl0eUFubm90YXRpb25zW3NBbm5vdGF0aW9uQWN0aW9uVGVybV0gYXMgTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucz5cblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucztcbn1cblxuYXN5bmMgZnVuY3Rpb24gZm5VcGRhdGVSZWxhdGVkQXBwc0RldGFpbHMob09iamVjdFBhZ2VMYXlvdXQ6IE9iamVjdFBhZ2VMYXlvdXQsIGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KTogUHJvbWlzZTx1bmtub3duPiB7XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSAob09iamVjdFBhZ2VMYXlvdXQuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKTtcblx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gb09iamVjdFBhZ2VMYXlvdXQuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dDtcblx0Y29uc3QgcGF0aCA9IChvQmluZGluZ0NvbnRleHQgJiYgb0JpbmRpbmdDb250ZXh0LmdldFBhdGgoKSkgfHwgXCJcIjtcblx0Y29uc3Qgb01ldGFQYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aChwYXRoKTtcblx0Ly8gU2VtYW50aWMgS2V5IFZvY2FidWxhcnlcblx0Y29uc3Qgc1NlbWFudGljS2V5Vm9jYWJ1bGFyeSA9IGAke29NZXRhUGF0aH0vYCArIGBAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljS2V5YDtcblx0Ly9TZW1hbnRpYyBLZXlzXG5cdGNvbnN0IGFTZW1LZXlzID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc1NlbWFudGljS2V5Vm9jYWJ1bGFyeSk7XG5cdC8vIFVuYXZhaWxhYmxlIEFjdGlvbnNcblx0Y29uc3Qgb0VudHJ5ID0gb0JpbmRpbmdDb250ZXh0Py5nZXRPYmplY3QoKTtcblx0aWYgKCFvRW50cnkgJiYgb0JpbmRpbmdDb250ZXh0KSB7XG5cdFx0b0JpbmRpbmdDb250ZXh0XG5cdFx0XHQucmVxdWVzdE9iamVjdCgpXG5cdFx0XHQudGhlbihhc3luYyBmdW5jdGlvbiAocmVxdWVzdGVkT2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXR1cm4gQ29tbW9uVXRpbHMudXBkYXRlUmVsYXRlQXBwc01vZGVsKFxuXHRcdFx0XHRcdG9CaW5kaW5nQ29udGV4dCxcblx0XHRcdFx0XHRyZXF1ZXN0ZWRPYmplY3QsXG5cdFx0XHRcdFx0b09iamVjdFBhZ2VMYXlvdXQsXG5cdFx0XHRcdFx0YVNlbUtleXMsXG5cdFx0XHRcdFx0b01ldGFNb2RlbCxcblx0XHRcdFx0XHRvTWV0YVBhdGgsXG5cdFx0XHRcdFx0YXBwQ29tcG9uZW50XG5cdFx0XHRcdCk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IHVwZGF0ZSB0aGUgcmVsYXRlZCBhcHAgZGV0YWlsc1wiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBDb21tb25VdGlscy51cGRhdGVSZWxhdGVBcHBzTW9kZWwob0JpbmRpbmdDb250ZXh0LCBvRW50cnksIG9PYmplY3RQYWdlTGF5b3V0LCBhU2VtS2V5cywgb01ldGFNb2RlbCwgb01ldGFQYXRoLCBhcHBDb21wb25lbnQpO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIG9CdXR0b25cbiAqL1xuZnVuY3Rpb24gZm5GaXJlQnV0dG9uUHJlc3Mob0J1dHRvbj86IENvbnRyb2wpOiB2b2lkIHtcblx0aWYgKFxuXHRcdG9CdXR0b24gJiZcblx0XHRvQnV0dG9uLmlzQTxCdXR0b24gfCBPdmVyZmxvd1Rvb2xiYXJCdXR0b24+KFtcInNhcC5tLkJ1dHRvblwiLCBcInNhcC5tLk92ZXJmbG93VG9vbGJhckJ1dHRvblwiXSkgJiZcblx0XHRvQnV0dG9uLmdldFZpc2libGUoKSAmJlxuXHRcdG9CdXR0b24uZ2V0RW5hYmxlZCgpXG5cdCkge1xuXHRcdG9CdXR0b24uZmlyZVByZXNzKCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0QXBwQ29tcG9uZW50KG9Db250cm9sOiBDb250cm9sIHwgQ29tcG9uZW50KTogQXBwQ29tcG9uZW50IHtcblx0aWYgKG9Db250cm9sLmlzQTxBcHBDb21wb25lbnQ+KFwic2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50XCIpKSB7XG5cdFx0cmV0dXJuIG9Db250cm9sO1xuXHR9XG5cdGNvbnN0IG9Pd25lciA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcihvQ29udHJvbCk7XG5cdGlmICghb093bmVyKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlcmUgc2hvdWxkIGJlIGEgc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50IGFzIG93bmVyIG9mIHRoZSBjb250cm9sXCIpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBnZXRBcHBDb21wb25lbnQob093bmVyKTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50UGFnZVZpZXcob0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KTogRkVWaWV3IHtcblx0Y29uc3Qgcm9vdFZpZXdDb250cm9sbGVyID0gb0FwcENvbXBvbmVudC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKTtcblx0cmV0dXJuIHJvb3RWaWV3Q29udHJvbGxlci5pc0ZjbEVuYWJsZWQoKVxuXHRcdD8gcm9vdFZpZXdDb250cm9sbGVyLmdldFJpZ2h0bW9zdFZpZXcoKVxuXHRcdDogQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldygob0FwcENvbXBvbmVudC5nZXRSb290Q29udGFpbmVyKCkgYXMgTmF2Q29udGFpbmVyKS5nZXRDdXJyZW50UGFnZT8uKCkpO1xufVxuXG5mdW5jdGlvbiBnZXRUYXJnZXRWaWV3KG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0IHwgbnVsbCk6IEZFVmlldyB7XG5cdGlmIChvQ29udHJvbCAmJiBvQ29udHJvbC5pc0E8Q29tcG9uZW50Q29udGFpbmVyPihcInNhcC51aS5jb3JlLkNvbXBvbmVudENvbnRhaW5lclwiKSkge1xuXHRcdGNvbnN0IG9Db21wb25lbnQgPSBvQ29udHJvbC5nZXRDb21wb25lbnRJbnN0YW5jZSgpO1xuXHRcdG9Db250cm9sID0gb0NvbXBvbmVudCAmJiBvQ29tcG9uZW50LmdldFJvb3RDb250cm9sKCk7XG5cdH1cblx0d2hpbGUgKG9Db250cm9sICYmICFvQ29udHJvbC5pc0E8RkVWaWV3PihcInNhcC51aS5jb3JlLm12Yy5WaWV3XCIpKSB7XG5cdFx0b0NvbnRyb2wgPSBvQ29udHJvbC5nZXRQYXJlbnQoKTtcblx0fVxuXHRyZXR1cm4gb0NvbnRyb2whO1xufVxuXG5mdW5jdGlvbiBfZm5DaGVja0lzTWF0Y2gob09iamVjdDogb2JqZWN0LCBvS2V5c1RvQ2hlY2s6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogYm9vbGVhbiB7XG5cdGZvciAoY29uc3Qgc0tleSBpbiBvS2V5c1RvQ2hlY2spIHtcblx0XHRpZiAob0tleXNUb0NoZWNrW3NLZXldICE9PSBvT2JqZWN0W3NLZXkgYXMga2V5b2YgdHlwZW9mIG9PYmplY3RdKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBmbkdldENvbnRleHRQYXRoUHJvcGVydGllcyhcblx0bWV0YU1vZGVsQ29udGV4dDogT0RhdGFNZXRhTW9kZWwsXG5cdHNDb250ZXh0UGF0aDogc3RyaW5nLFxuXHRvRmlsdGVyPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IFJlY29yZDxzdHJpbmcsIE1ldGFNb2RlbFByb3BlcnR5PiB8IFJlY29yZDxzdHJpbmcsIE1ldGFNb2RlbE5hdlByb3BlcnR5PiB7XG5cdGNvbnN0IG9FbnRpdHlUeXBlOiBNZXRhTW9kZWxFbnRpdHlUeXBlID0gKG1ldGFNb2RlbENvbnRleHQuZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aH0vYCkgfHwge30pIGFzIE1ldGFNb2RlbEVudGl0eVR5cGUsXG5cdFx0b1Byb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIE1ldGFNb2RlbFByb3BlcnR5PiB8IFJlY29yZDxzdHJpbmcsIE1ldGFNb2RlbE5hdlByb3BlcnR5PiA9IHt9O1xuXG5cdGZvciAoY29uc3Qgc0tleSBpbiBvRW50aXR5VHlwZSkge1xuXHRcdGlmIChcblx0XHRcdG9FbnRpdHlUeXBlLmhhc093blByb3BlcnR5KHNLZXkpICYmXG5cdFx0XHQhL15cXCQvaS50ZXN0KHNLZXkpICYmXG5cdFx0XHRvRW50aXR5VHlwZVtzS2V5XS4ka2luZCAmJlxuXHRcdFx0X2ZuQ2hlY2tJc01hdGNoKG9FbnRpdHlUeXBlW3NLZXldLCBvRmlsdGVyIHx8IHsgJGtpbmQ6IFwiUHJvcGVydHlcIiB9KVxuXHRcdCkge1xuXHRcdFx0b1Byb3BlcnRpZXNbc0tleV0gPSBvRW50aXR5VHlwZVtzS2V5XTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG9Qcm9wZXJ0aWVzO1xufVxuXG5mdW5jdGlvbiBmbkdldElCTkFjdGlvbnMob0NvbnRyb2w6IFRhYmxlIHwgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZSB8IE9iamVjdFBhZ2VTdWJTZWN0aW9uLCBhSUJOQWN0aW9uczogVUk1RWxlbWVudFtdKTogVUk1RWxlbWVudFtdIHtcblx0Y29uc3QgYUFjdGlvbnMgPSBvQ29udHJvbCAmJiBvQ29udHJvbC5nZXRBY3Rpb25zKCk7XG5cdGlmIChhQWN0aW9ucykge1xuXHRcdGFBY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKG9BY3Rpb24pIHtcblx0XHRcdGlmIChvQWN0aW9uLmlzQTxBY3Rpb25Ub29sYmFyQWN0aW9uPihcInNhcC51aS5tZGMuYWN0aW9udG9vbGJhci5BY3Rpb25Ub29sYmFyQWN0aW9uXCIpKSB7XG5cdFx0XHRcdG9BY3Rpb24gPSBvQWN0aW9uLmdldEFjdGlvbigpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG9BY3Rpb24uaXNBPE1lbnVCdXR0b24+KFwic2FwLm0uTWVudUJ1dHRvblwiKSkge1xuXHRcdFx0XHRjb25zdCBvTWVudSA9IG9BY3Rpb24uZ2V0TWVudSgpO1xuXHRcdFx0XHRjb25zdCBhSXRlbXMgPSBvTWVudS5nZXRJdGVtcygpO1xuXHRcdFx0XHRhSXRlbXMuZm9yRWFjaCgob0l0ZW0pID0+IHtcblx0XHRcdFx0XHRpZiAob0l0ZW0uZGF0YShcIklCTkRhdGFcIikpIHtcblx0XHRcdFx0XHRcdGFJQk5BY3Rpb25zLnB1c2gob0l0ZW0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2UgaWYgKG9BY3Rpb24uZGF0YShcIklCTkRhdGFcIikpIHtcblx0XHRcdFx0YUlCTkFjdGlvbnMucHVzaChvQWN0aW9uKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gYUlCTkFjdGlvbnM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZuVXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkoYUlCTkFjdGlvbnM6IFVJNUVsZW1lbnRbXSwgb1ZpZXc6IFZpZXcpOiBQcm9taXNlPHZvaWQ+IHtcblx0Y29uc3Qgb1BhcmFtczogUmVjb3JkPHN0cmluZywgeyB2YWx1ZTogdW5rbm93biB9PiA9IHt9O1xuXHRjb25zdCBvQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KG9WaWV3KTtcblx0Y29uc3QgaXNTdGlja3kgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQoKG9WaWV3LmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRjb25zdCBmbkdldExpbmtzID0gZnVuY3Rpb24gKG9EYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHRpZiAob0RhdGEpIHtcblx0XHRcdGNvbnN0IGFLZXlzID0gT2JqZWN0LmtleXMob0RhdGEpO1xuXHRcdFx0YUtleXMuZm9yRWFjaChmdW5jdGlvbiAoc0tleTogc3RyaW5nKSB7XG5cdFx0XHRcdGlmIChzS2V5LmluZGV4T2YoXCJfXCIpICE9PSAwICYmICFzS2V5LmluY2x1ZGVzKFwib2RhdGEuY29udGV4dFwiKSkge1xuXHRcdFx0XHRcdG9QYXJhbXNbc0tleV0gPSB7IHZhbHVlOiBvRGF0YVtzS2V5XSB9O1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0aWYgKGFJQk5BY3Rpb25zLmxlbmd0aCkge1xuXHRcdFx0YUlCTkFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAob0lCTkFjdGlvbikge1xuXHRcdFx0XHRjb25zdCBzU2VtYW50aWNPYmplY3QgPSBvSUJOQWN0aW9uLmRhdGEoXCJJQk5EYXRhXCIpLnNlbWFudGljT2JqZWN0O1xuXHRcdFx0XHRjb25zdCBzQWN0aW9uID0gb0lCTkFjdGlvbi5kYXRhKFwiSUJORGF0YVwiKS5hY3Rpb247XG5cdFx0XHRcdG9BcHBDb21wb25lbnRcblx0XHRcdFx0XHQuZ2V0U2hlbGxTZXJ2aWNlcygpXG5cdFx0XHRcdFx0LmdldExpbmtzKFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IHNTZW1hbnRpY09iamVjdCxcblx0XHRcdFx0XHRcdFx0YWN0aW9uOiBzQWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRwYXJhbXM6IG9QYXJhbXNcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdKVxuXHRcdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChhTGluayk6IHZvaWQge1xuXHRcdFx0XHRcdFx0aWYgKG9JQk5BY3Rpb24uaXNBPENvbnRyb2w+KFwic2FwLnVpLmNvcmUuQ29udHJvbFwiKSB8fCBvSUJOQWN0aW9uLmlzQTxNZW51SXRlbT4oXCJzYXAubS5NZW51SXRlbVwiKSkge1xuXHRcdFx0XHRcdFx0XHRvSUJOQWN0aW9uLnNldFZpc2libGUoXG5cdFx0XHRcdFx0XHRcdFx0b0lCTkFjdGlvbi5nZXRWaXNpYmxlKCkgJiYgYUxpbmsgJiYgYUxpbmsubGVuZ3RoID09PSAxICYmIGFMaW5rWzBdICYmIGFMaW5rWzBdLmxlbmd0aCA9PT0gMVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKGlzU3RpY2t5KSB7XG5cdFx0XHRcdFx0XHRcdChvSUJOQWN0aW9uLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQpLnNldFByb3BlcnR5KFxuXHRcdFx0XHRcdFx0XHRcdG9JQk5BY3Rpb24uZ2V0SWQoKS5zcGxpdChcIi0tXCIpWzFdLFxuXHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdHNoZWxsTmF2aWdhdGlvbk5vdEF2YWlsYWJsZTogIShhTGluayAmJiBhTGluay5sZW5ndGggPT09IDEgJiYgYUxpbmtbMF0gJiYgYUxpbmtbMF0ubGVuZ3RoID09PSAxKVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgcmV0cmlldmUgdGhlIGxpbmtzIGZyb20gdGhlIHNoZWxsIHNlcnZpY2VcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH07XG5cdGlmIChvVmlldyAmJiBvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpKSB7XG5cdFx0cmV0dXJuIChvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0KVxuXHRcdFx0Py5yZXF1ZXN0T2JqZWN0KClcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChvRGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuIGZuR2V0TGlua3Mob0RhdGEpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCByZXRyaWV2ZSB0aGUgbGlua3MgZnJvbSB0aGUgc2hlbGwgc2VydmljZVwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBmbkdldExpbmtzKCk7XG5cdH1cbn1cblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBtZW51IGJ1dHRvbiB2aXNpYmlsaXR5IGlmIGFsbCB0aGUgdW5kZXJseWluZyBzZWxlY3Rpb24gYnV0dG9ucyBhcmUgaGlkZGVuLlxuICogQHBhcmFtIElCTkFjdGlvbnNcbiAqL1xuZnVuY3Rpb24gdXBkYXRlTWVudUJ1dHRvblZpc2libGl0eShJQk5BY3Rpb25zOiBVSTVFbGVtZW50W10pOiB2b2lkIHtcblx0Y29uc3QgbWVudUJ1dHRvbldpdGhJQk5BY3Rpb246IE1lbnVCdXR0b25bXSA9IFtdO1xuXHRJQk5BY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKElCTkFjdGlvbikge1xuXHRcdGlmIChJQk5BY3Rpb24uaXNBPE1lbnVCdXR0b24+KFwic2FwLm0uTWVudUl0ZW1cIikpIHtcblx0XHRcdG1lbnVCdXR0b25XaXRoSUJOQWN0aW9uLnB1c2goSUJOQWN0aW9uLmdldFBhcmVudCgpPy5nZXRQYXJlbnQoKT8uZ2V0UGFyZW50KCk/LmdldFBhcmVudCgpPy5nZXRQYXJlbnQoKSBhcyBNZW51QnV0dG9uKTtcblx0XHR9XG5cdH0pO1xuXHRtZW51QnV0dG9uV2l0aElCTkFjdGlvbi5mb3JFYWNoKGZ1bmN0aW9uIChtZW51QWN0aW9uKSB7XG5cdFx0Y29uc3QgbWVudUl0ZW1zID0gbWVudUFjdGlvbj8uZ2V0TWVudSgpLmdldEl0ZW1zKCk7XG5cdFx0Y29uc3QgdmlzaWJsZU1lbnVJdGVtcyA9IG1lbnVJdGVtcy5maWx0ZXIoZnVuY3Rpb24gKG1lbnVJdGVtKSB7XG5cdFx0XHRyZXR1cm4gbWVudUl0ZW0uZ2V0VmlzaWJsZSgpO1xuXHRcdH0pO1xuXHRcdGlmICh2aXNpYmxlTWVudUl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0bWVudUFjdGlvbi5zZXRWaXNpYmxlKGZhbHNlKTtcblx0XHR9XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBnZXRBY3Rpb25QYXRoKFxuXHRhY3Rpb25Db250ZXh0OiBDb250ZXh0LFxuXHRiUmV0dXJuT25seVBhdGg6IGJvb2xlYW4sXG5cdGluQWN0aW9uTmFtZT86IHN0cmluZyxcblx0YkNoZWNrU3RhdGljVmFsdWU/OiBib29sZWFuXG4pOlxuXHR8IHN0cmluZ1xuXHR8IHtcblx0XHRcdHNDb250ZXh0UGF0aDogc3RyaW5nO1xuXHRcdFx0c1Byb3BlcnR5OiBzdHJpbmc7XG5cdFx0XHRzQmluZGluZ1BhcmFtZXRlcjogc3RyaW5nO1xuXHQgIH0ge1xuXHRjb25zdCBzQWN0aW9uTmFtZTogc3RyaW5nID0gIWluQWN0aW9uTmFtZSA/IGFjdGlvbkNvbnRleHQuZ2V0T2JqZWN0KGFjdGlvbkNvbnRleHQuZ2V0UGF0aCgpKS50b1N0cmluZygpIDogaW5BY3Rpb25OYW1lO1xuXHRsZXQgc0NvbnRleHRQYXRoID0gYWN0aW9uQ29udGV4dC5nZXRQYXRoKCkuc3BsaXQoXCIvQFwiKVswXTtcblx0Y29uc3Qgc0VudGl0eVR5cGVOYW1lID0gKGFjdGlvbkNvbnRleHQuZ2V0T2JqZWN0KHNDb250ZXh0UGF0aCkgYXMgTWV0YU1vZGVsRW50aXR5VHlwZSkuJFR5cGU7XG5cdGNvbnN0IHNFbnRpdHlOYW1lID0gZ2V0RW50aXR5U2V0TmFtZShhY3Rpb25Db250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwsIHNFbnRpdHlUeXBlTmFtZSk7XG5cdGlmIChzRW50aXR5TmFtZSkge1xuXHRcdHNDb250ZXh0UGF0aCA9IGAvJHtzRW50aXR5TmFtZX1gO1xuXHR9XG5cdGlmIChiQ2hlY2tTdGF0aWNWYWx1ZSkge1xuXHRcdHJldHVybiBhY3Rpb25Db250ZXh0LmdldE9iamVjdChgJHtzQ29udGV4dFBhdGh9LyR7c0FjdGlvbk5hbWV9QE9yZy5PRGF0YS5Db3JlLlYxLk9wZXJhdGlvbkF2YWlsYWJsZWApO1xuXHR9XG5cdGlmIChiUmV0dXJuT25seVBhdGgpIHtcblx0XHRyZXR1cm4gYCR7c0NvbnRleHRQYXRofS8ke3NBY3Rpb25OYW1lfWA7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNDb250ZXh0UGF0aDogc0NvbnRleHRQYXRoLFxuXHRcdFx0c1Byb3BlcnR5OiBhY3Rpb25Db250ZXh0LmdldE9iamVjdChgJHtzQ29udGV4dFBhdGh9LyR7c0FjdGlvbk5hbWV9QE9yZy5PRGF0YS5Db3JlLlYxLk9wZXJhdGlvbkF2YWlsYWJsZS8kUGF0aGApLFxuXHRcdFx0c0JpbmRpbmdQYXJhbWV0ZXI6IGFjdGlvbkNvbnRleHQuZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aH0vJHtzQWN0aW9uTmFtZX0vQCR1aTUub3ZlcmxvYWQvMC8kUGFyYW1ldGVyLzAvJE5hbWVgKVxuXHRcdH07XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0RW50aXR5U2V0TmFtZShvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgc0VudGl0eVR5cGU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG9FbnRpdHlDb250YWluZXIgPSBvTWV0YU1vZGVsLmdldE9iamVjdChcIi9cIik7XG5cdGZvciAoY29uc3Qga2V5IGluIG9FbnRpdHlDb250YWluZXIpIHtcblx0XHRpZiAodHlwZW9mIG9FbnRpdHlDb250YWluZXJba2V5XSA9PT0gXCJvYmplY3RcIiAmJiBvRW50aXR5Q29udGFpbmVyW2tleV0uJFR5cGUgPT09IHNFbnRpdHlUeXBlKSB7XG5cdFx0XHRyZXR1cm4ga2V5O1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBjb21wdXRlRGlzcGxheU1vZGUoXG5cdG9Qcm9wZXJ0eUFubm90YXRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0b0NvbGxlY3Rpb25Bbm5vdGF0aW9ucz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4pOiBcIkRlc2NyaXB0aW9uXCIgfCBcIlZhbHVlRGVzY3JpcHRpb25cIiB8IFwiVmFsdWVcIiB8IFwiRGVzY3JpcHRpb25WYWx1ZVwiIHtcblx0Y29uc3Qgb1RleHRBbm5vdGF0aW9uID0gb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRcIl0sXG5cdFx0b1RleHRBcnJhbmdlbWVudEFubm90YXRpb24gPSAob1RleHRBbm5vdGF0aW9uICYmXG5cdFx0XHQoKG9Qcm9wZXJ0eUFubm90YXRpb25zICYmXG5cdFx0XHRcdG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFwiXSkgfHxcblx0XHRcdFx0KG9Db2xsZWN0aW9uQW5ub3RhdGlvbnMgJiZcblx0XHRcdFx0XHRvQ29sbGVjdGlvbkFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFwiXSkpKSBhcyBNZXRhTW9kZWxFbnVtPFRleHRBcnJhbmdlbWVudD47XG5cblx0aWYgKG9UZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uKSB7XG5cdFx0aWYgKG9UZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uLiRFbnVtTWVtYmVyID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dE9ubHlcIikge1xuXHRcdFx0cmV0dXJuIFwiRGVzY3JpcHRpb25cIjtcblx0XHR9IGVsc2UgaWYgKG9UZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uLiRFbnVtTWVtYmVyID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dExhc3RcIikge1xuXHRcdFx0cmV0dXJuIFwiVmFsdWVEZXNjcmlwdGlvblwiO1xuXHRcdH0gZWxzZSBpZiAob1RleHRBcnJhbmdlbWVudEFubm90YXRpb24uJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50VHlwZS9UZXh0U2VwYXJhdGVcIikge1xuXHRcdFx0cmV0dXJuIFwiVmFsdWVcIjtcblx0XHR9XG5cdFx0Ly9EZWZhdWx0IHNob3VsZCBiZSBUZXh0Rmlyc3QgaWYgdGhlcmUgaXMgYSBUZXh0IGFubm90YXRpb24gYW5kIG5laXRoZXIgVGV4dE9ubHkgbm9yIFRleHRMYXN0IGFyZSBzZXRcblx0XHRyZXR1cm4gXCJEZXNjcmlwdGlvblZhbHVlXCI7XG5cdH1cblx0cmV0dXJuIG9UZXh0QW5ub3RhdGlvbiA/IFwiRGVzY3JpcHRpb25WYWx1ZVwiIDogXCJWYWx1ZVwiO1xufVxuXG5mdW5jdGlvbiBfZ2V0RW50aXR5VHlwZShvQ29udGV4dDogT0RhdGFWNENvbnRleHQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRjb25zdCBvTWV0YU1vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0cmV0dXJuIG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke29NZXRhTW9kZWwuZ2V0TWV0YVBhdGgob0NvbnRleHQuZ2V0UGF0aCgpKX0vJFR5cGVgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gX3JlcXVlc3RPYmplY3Qoc0FjdGlvbjogc3RyaW5nLCBvU2VsZWN0ZWRDb250ZXh0OiBPRGF0YVY0Q29udGV4dCwgc1Byb3BlcnR5OiBzdHJpbmcpOiBQcm9taXNlPHVua25vd24+IHtcblx0bGV0IG9Db250ZXh0ID0gb1NlbGVjdGVkQ29udGV4dDtcblx0Y29uc3QgbkJyYWNrZXRJbmRleCA9IHNBY3Rpb24uaW5kZXhPZihcIihcIik7XG5cblx0aWYgKG5CcmFja2V0SW5kZXggPiAtMSkge1xuXHRcdGNvbnN0IHNUYXJnZXRUeXBlID0gc0FjdGlvbi5zbGljZShuQnJhY2tldEluZGV4ICsgMSwgLTEpO1xuXHRcdGxldCBzQ3VycmVudFR5cGUgPSBfZ2V0RW50aXR5VHlwZShvQ29udGV4dCk7XG5cblx0XHR3aGlsZSAoc0N1cnJlbnRUeXBlICE9PSBzVGFyZ2V0VHlwZSkge1xuXHRcdFx0Ly8gRmluZCBwYXJlbnQgYmluZGluZyBjb250ZXh0IGFuZCByZXRyaWV2ZSBlbnRpdHkgdHlwZVxuXHRcdFx0b0NvbnRleHQgPSBvQ29udGV4dC5nZXRCaW5kaW5nKCkuZ2V0Q29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0O1xuXHRcdFx0aWYgKG9Db250ZXh0KSB7XG5cdFx0XHRcdHNDdXJyZW50VHlwZSA9IF9nZXRFbnRpdHlUeXBlKG9Db250ZXh0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdExvZy53YXJuaW5nKFwiQ2Fubm90IGRldGVybWluZSB0YXJnZXQgdHlwZSB0byByZXF1ZXN0IHByb3BlcnR5IHZhbHVlIGZvciBib3VuZCBhY3Rpb24gaW52b2NhdGlvblwiKTtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBvQ29udGV4dC5yZXF1ZXN0T2JqZWN0KHNQcm9wZXJ0eSk7XG59XG5cbmV4cG9ydCB0eXBlIF9SZXF1ZXN0ZWRQcm9wZXJ0eSA9IHtcblx0dlByb3BlcnR5VmFsdWU6IHVua25vd247XG5cdG9TZWxlY3RlZENvbnRleHQ6IENvbnRleHQ7XG5cdHNBY3Rpb246IHN0cmluZztcblx0c0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aDogc3RyaW5nO1xufTtcbmFzeW5jIGZ1bmN0aW9uIHJlcXVlc3RQcm9wZXJ0eShcblx0b1NlbGVjdGVkQ29udGV4dDogT0RhdGFWNENvbnRleHQsXG5cdHNBY3Rpb246IHN0cmluZyxcblx0c1Byb3BlcnR5OiBzdHJpbmcsXG5cdHNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGg6IHN0cmluZ1xuKTogUHJvbWlzZTxfUmVxdWVzdGVkUHJvcGVydHk+IHtcblx0Y29uc3Qgb1Byb21pc2UgPVxuXHRcdHNQcm9wZXJ0eSAmJiBzUHJvcGVydHkuaW5kZXhPZihcIi9cIikgPT09IDBcblx0XHRcdD8gcmVxdWVzdFNpbmdsZXRvblByb3BlcnR5KHNQcm9wZXJ0eSwgb1NlbGVjdGVkQ29udGV4dC5nZXRNb2RlbCgpKVxuXHRcdFx0OiBfcmVxdWVzdE9iamVjdChzQWN0aW9uLCBvU2VsZWN0ZWRDb250ZXh0LCBzUHJvcGVydHkpO1xuXG5cdHJldHVybiBvUHJvbWlzZS50aGVuKGZ1bmN0aW9uICh2UHJvcGVydHlWYWx1ZTogdW5rbm93bikge1xuXHRcdHJldHVybiB7XG5cdFx0XHR2UHJvcGVydHlWYWx1ZTogdlByb3BlcnR5VmFsdWUsXG5cdFx0XHRvU2VsZWN0ZWRDb250ZXh0OiBvU2VsZWN0ZWRDb250ZXh0LFxuXHRcdFx0c0FjdGlvbjogc0FjdGlvbixcblx0XHRcdHNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGg6IHNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGhcblx0XHR9O1xuXHR9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0Q29udGV4dHNCYXNlZE9uT3BlcmF0aW9uQXZhaWxhYmxlKFxuXHRvSW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0LFxuXHRhUmVxdWVzdFByb21pc2VzOiBQcm9taXNlPF9SZXF1ZXN0ZWRQcm9wZXJ0eT5bXSxcblx0Zm9yQ29udGV4dE1lbnUgPSBmYWxzZVxuKTogUHJvbWlzZTx2b2lkPiB7XG5cdHJldHVybiBQcm9taXNlLmFsbChhUmVxdWVzdFByb21pc2VzKVxuXHRcdC50aGVuKGZ1bmN0aW9uIChhUmVzdWx0cyk6IHZvaWQge1xuXHRcdFx0aWYgKGFSZXN1bHRzLmxlbmd0aCkge1xuXHRcdFx0XHRjb25zdCBhQXBwbGljYWJsZUNvbnRleHRzOiB1bmtub3duW10gPSBbXSxcblx0XHRcdFx0XHRhTm90QXBwbGljYWJsZUNvbnRleHRzOiB1bmtub3duW10gPSBbXTtcblx0XHRcdFx0YVJlc3VsdHMuZm9yRWFjaChmdW5jdGlvbiAoYVJlc3VsdCkge1xuXHRcdFx0XHRcdGlmIChhUmVzdWx0KSB7XG5cdFx0XHRcdFx0XHRpZiAoYVJlc3VsdC52UHJvcGVydHlWYWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0TW9kZWwoKS5zZXRQcm9wZXJ0eShhUmVzdWx0LnNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGgsIHRydWUpO1xuXHRcdFx0XHRcdFx0XHRhQXBwbGljYWJsZUNvbnRleHRzLnB1c2goYVJlc3VsdC5vU2VsZWN0ZWRDb250ZXh0KTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGFOb3RBcHBsaWNhYmxlQ29udGV4dHMucHVzaChhUmVzdWx0Lm9TZWxlY3RlZENvbnRleHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdHNldER5bmFtaWNBY3Rpb25Db250ZXh0cyhcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRcdFx0YVJlc3VsdHNbMF0uc0FjdGlvbixcblx0XHRcdFx0XHRhQXBwbGljYWJsZUNvbnRleHRzLFxuXHRcdFx0XHRcdGFOb3RBcHBsaWNhYmxlQ29udGV4dHMsXG5cdFx0XHRcdFx0Zm9yQ29udGV4dE1lbnVcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9KVxuXHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRMb2cudHJhY2UoXCJDYW5ub3QgcmV0cmlldmUgcHJvcGVydHkgdmFsdWUgZnJvbSBwYXRoXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdH0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSBpbnRlcm5hbE1vZGVsQ29udGV4dFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFwcGxpY2FibGVcbiAqIEBwYXJhbSBub3RBcHBsaWNhYmxlXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcbiAqL1xuZnVuY3Rpb24gc2V0RHluYW1pY0FjdGlvbkNvbnRleHRzKFxuXHRpbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdGFjdGlvbjogc3RyaW5nLFxuXHRhcHBsaWNhYmxlOiB1bmtub3duW10sXG5cdG5vdEFwcGxpY2FibGU6IHVua25vd25bXSxcblx0Zm9yQ29udGV4dE1lbnUgPSBmYWxzZVxuKTogdm9pZCB7XG5cdGNvbnN0IGR5bmFtaWNBY3Rpb25QYXRoUHJlZml4ID0gYCR7aW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UGF0aCgpfS9keW5hbWljQWN0aW9ucy8ke2FjdGlvbn1gLFxuXHRcdGludGVybmFsTW9kZWwgPSBpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRNb2RlbCgpLFxuXHRcdGFwcGxpY2FibGVQcm9wZXJ0eSA9ICFmb3JDb250ZXh0TWVudSA/IFwiYUFwcGxpY2FibGVcIiA6IFwiYUFwcGxpY2FibGVGb3JDb250ZXh0TWVudVwiLFxuXHRcdG5vdEFwcGxpY2FibGVQcm9wZXJ0eSA9ICFmb3JDb250ZXh0TWVudSA/IFwiYU5vdEFwcGxpY2FibGVcIiA6IFwiYU5vdEFwcGxpY2FibGVGb3JDb250ZXh0TWVudVwiO1xuXHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KGAke2R5bmFtaWNBY3Rpb25QYXRoUHJlZml4fS8ke2FwcGxpY2FibGVQcm9wZXJ0eX1gLCBhcHBsaWNhYmxlKTtcblx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShgJHtkeW5hbWljQWN0aW9uUGF0aFByZWZpeH0vJHtub3RBcHBsaWNhYmxlUHJvcGVydHl9YCwgbm90QXBwbGljYWJsZSk7XG59XG5cbmZ1bmN0aW9uIGdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb24oYUV4cHJlc3Npb25zOiBzdHJpbmdbXSk6IHN0cmluZyB7XG5cdGNvbnN0IGFBbGxvd2VkRXhwcmVzc2lvbnNQcmlvcml0eSA9IENvbW1vblV0aWxzLkFsbG93ZWRFeHByZXNzaW9uc1ByaW87XG5cblx0YUV4cHJlc3Npb25zLnNvcnQoZnVuY3Rpb24gKGE6IHN0cmluZywgYjogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIGFBbGxvd2VkRXhwcmVzc2lvbnNQcmlvcml0eS5pbmRleE9mKGEpIC0gYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5LmluZGV4T2YoYik7XG5cdH0pO1xuXG5cdHJldHVybiBhRXhwcmVzc2lvbnNbMF07XG59XG5cbi8qKlxuICogTWV0aG9kIHRvIHJldHVybiBhbGxvd2VkIG9wZXJhdG9ycyBmb3IgdHlwZSBHdWlkLlxuICogQHJldHVybnMgQWxsb3dlZCBvcGVyYXRvcnMgZm9yIHR5cGUgR3VpZFxuICovXG5mdW5jdGlvbiBnZXRPcGVyYXRvcnNGb3JHdWlkUHJvcGVydHkoKTogc3RyaW5nIHtcblx0Y29uc3QgYWxsb3dlZE9wZXJhdG9yc0Zvckd1aWQgPSBbXCJFUVwiLCBcIk5FXCJdO1xuXHRyZXR1cm4gYWxsb3dlZE9wZXJhdG9yc0Zvckd1aWQudG9TdHJpbmcoKTtcbn1cblxudHlwZSBQYXJhbWV0ZXJJbmZvID0ge1xuXHRjb250ZXh0UGF0aD86IHN0cmluZztcblx0cGFyYW1ldGVyUHJvcGVydGllcz86IFJlY29yZDxzdHJpbmcsIE1ldGFNb2RlbFByb3BlcnR5Pjtcbn07XG5mdW5jdGlvbiBnZXRQYXJhbWV0ZXJJbmZvKG1ldGFNb2RlbENvbnRleHQ6IE9EYXRhTWV0YU1vZGVsLCBzQ29udGV4dFBhdGg6IHN0cmluZyk6IFBhcmFtZXRlckluZm8ge1xuXHRjb25zdCBzUGFyYW1ldGVyQ29udGV4dFBhdGggPSBzQ29udGV4dFBhdGguc3Vic3RyaW5nKDAsIHNDb250ZXh0UGF0aC5sYXN0SW5kZXhPZihcIi9cIikpO1xuXHRjb25zdCBiUmVzdWx0Q29udGV4dCA9IG1ldGFNb2RlbENvbnRleHQuZ2V0T2JqZWN0KGAke3NQYXJhbWV0ZXJDb250ZXh0UGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZXN1bHRDb250ZXh0YCk7XG5cdGNvbnN0IG9QYXJhbWV0ZXJJbmZvOiBQYXJhbWV0ZXJJbmZvID0ge307XG5cdGlmIChiUmVzdWx0Q29udGV4dCAmJiBzUGFyYW1ldGVyQ29udGV4dFBhdGggIT09IHNDb250ZXh0UGF0aCkge1xuXHRcdG9QYXJhbWV0ZXJJbmZvLmNvbnRleHRQYXRoID0gc1BhcmFtZXRlckNvbnRleHRQYXRoO1xuXHRcdG9QYXJhbWV0ZXJJbmZvLnBhcmFtZXRlclByb3BlcnRpZXMgPSBDb21tb25VdGlscy5nZXRDb250ZXh0UGF0aFByb3BlcnRpZXMobWV0YU1vZGVsQ29udGV4dCwgc1BhcmFtZXRlckNvbnRleHRQYXRoKSBhcyBSZWNvcmQ8XG5cdFx0XHRzdHJpbmcsXG5cdFx0XHRNZXRhTW9kZWxQcm9wZXJ0eVxuXHRcdD47XG5cdH1cblx0cmV0dXJuIG9QYXJhbWV0ZXJJbmZvO1xufVxuXG50eXBlIFZpZXdEYXRhID0ge1xuXHRjb250cm9sQ29uZmlndXJhdGlvbj86IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pjtcbn07XG5cbmZ1bmN0aW9uIGFkZFBhZ2VDb250ZXh0VG9TZWxlY3Rpb25WYXJpYW50KG9TZWxlY3Rpb25WYXJpYW50OiBTZWxlY3Rpb25WYXJpYW50LCBtUGFnZUNvbnRleHQ6IHVua25vd25bXSwgb1ZpZXc6IFZpZXcpOiBTZWxlY3Rpb25WYXJpYW50IHtcblx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChvVmlldyk7XG5cdGNvbnN0IG9OYXZpZ2F0aW9uU2VydmljZSA9IG9BcHBDb21wb25lbnQuZ2V0TmF2aWdhdGlvblNlcnZpY2UoKTtcblx0cmV0dXJuIG9OYXZpZ2F0aW9uU2VydmljZS5taXhBdHRyaWJ1dGVzQW5kU2VsZWN0aW9uVmFyaWFudChtUGFnZUNvbnRleHQsIG9TZWxlY3Rpb25WYXJpYW50LnRvSlNPTlN0cmluZygpKTtcbn1cblxuZnVuY3Rpb24gaXNTdGlja3lFZGl0TW9kZShvQ29udHJvbDogQ29udHJvbCk6IGJvb2xlYW4ge1xuXHRjb25zdCBiSXNTdGlja3lNb2RlID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKChvQ29udHJvbC5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpKTtcblx0Y29uc3QgYlVJRWRpdGFibGUgPSBDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKG9Db250cm9sKTtcblx0cmV0dXJuIGJJc1N0aWNreU1vZGUgJiYgYlVJRWRpdGFibGU7XG59XG5cbmV4cG9ydCB0eXBlIFVzZXJEZWZhdWx0UGFyYW1ldGVyID0gRWRtQWN0aW9uUGFyYW1ldGVyIHwgQ29udGV4dDtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIHVzZXIgZGVmYXVsdHMgZnJvbSB0aGUgc3RhcnR1cCBhcHAgc3RhdGUgKGlmIGF2YWlsYWJsZSkgb3IgdGhlIHN0YXJ0dXAgcGFyYW1ldGVyIGFuZCBzZXRzIHRoZW0gdG8gYSBtb2RlbC5cbiAqIEBwYXJhbSBhcHBDb21wb25lbnRcbiAqIEBwYXJhbSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gbW9kZWxcbiAqIEBwYXJhbSBpc0FjdGlvblxuICogQHBhcmFtIGlzQ3JlYXRlXG4gKiBAcGFyYW0gYWN0aW9uRGVmYXVsdFZhbHVlc1xuICovXG5hc3luYyBmdW5jdGlvbiBzZXRVc2VyRGVmYXVsdHMoXG5cdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRwYXJhbWV0ZXJzOiBVc2VyRGVmYXVsdFBhcmFtZXRlcltdLFxuXHRtb2RlbDogSlNPTk1vZGVsIHwgT0RhdGFWNENvbnRleHQsXG5cdGlzQWN0aW9uOiBib29sZWFuLFxuXHRpc0NyZWF0ZT86IGJvb2xlYW4sXG5cdGFjdGlvbkRlZmF1bHRWYWx1ZXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogUHJvbWlzZTx2b2lkPiB7XG5cdGNvbnN0IEJhc2VUeXBlID0gKGF3YWl0IGltcG9ydChcInNhcC91aS9tZGMvZW51bXMvQmFzZVR5cGVcIikpLmRlZmF1bHQ7XG5cdGNvbnN0IFR5cGVNYXAgPSAoYXdhaXQgaW1wb3J0KFwic2FwL3VpL21kYy9vZGF0YS92NC9UeXBlTWFwXCIpKS5kZWZhdWx0O1xuXG5cdGNvbnN0IGNvbXBvbmVudERhdGEgPSBhcHBDb21wb25lbnQuZ2V0Q29tcG9uZW50RGF0YSgpLFxuXHRcdHN0YXJ0dXBQYXJhbWV0ZXJzID0gKGNvbXBvbmVudERhdGEgJiYgY29tcG9uZW50RGF0YS5zdGFydHVwUGFyYW1ldGVycykgfHwge30sXG5cdFx0c2hlbGxTZXJ2aWNlcyA9IGFwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdGNvbnN0IHN0YXJ0dXBBcHBTdGF0ZSA9IGF3YWl0IHNoZWxsU2VydmljZXMuZ2V0U3RhcnR1cEFwcFN0YXRlKGFwcENvbXBvbmVudCk7XG5cdGNvbnN0IHN0YXJ0dXBBcHBTdGF0ZURhdGEgPSBzdGFydHVwQXBwU3RhdGU/LmdldERhdGEoKSB8fCB7fSxcblx0XHRleHRlbmRlZFBhcmFtZXRlcnMgPSAoc3RhcnR1cEFwcFN0YXRlRGF0YS5zZWxlY3Rpb25WYXJpYW50ICYmIHN0YXJ0dXBBcHBTdGF0ZURhdGEuc2VsZWN0aW9uVmFyaWFudC5TZWxlY3RPcHRpb25zKSB8fCBbXTtcblx0cGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uIChvUGFyYW1ldGVyKSB7XG5cdFx0Y29uc3Qgc1Byb3BlcnR5TmFtZSA9IGlzQWN0aW9uXG5cdFx0XHQ/IGAvJHsob1BhcmFtZXRlciBhcyB7IG5hbWU6IHN0cmluZyB9KS5uYW1lfWBcblx0XHRcdDogKG9QYXJhbWV0ZXIgYXMgQ29udGV4dCkuZ2V0UGF0aD8uKCkuc2xpY2UoKG9QYXJhbWV0ZXIgYXMgQ29udGV4dCkuZ2V0UGF0aCgpLmxhc3RJbmRleE9mKFwiL1wiKSArIDEpO1xuXHRcdGNvbnN0IHNQYXJhbWV0ZXJOYW1lID0gaXNBY3Rpb24gPyBzUHJvcGVydHlOYW1lLnNsaWNlKDEpIDogc1Byb3BlcnR5TmFtZTtcblx0XHRpZiAoYWN0aW9uRGVmYXVsdFZhbHVlcyAmJiBpc0NyZWF0ZSkge1xuXHRcdFx0aWYgKGFjdGlvbkRlZmF1bHRWYWx1ZXNbc1BhcmFtZXRlck5hbWVdKSB7XG5cdFx0XHRcdG1vZGVsLnNldFByb3BlcnR5KHNQcm9wZXJ0eU5hbWUsIGFjdGlvbkRlZmF1bHRWYWx1ZXNbc1BhcmFtZXRlck5hbWVdKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHN0YXJ0dXBQYXJhbWV0ZXJzW3NQYXJhbWV0ZXJOYW1lXSkge1xuXHRcdFx0Y29uc3QgcGFyYW1ldGVydFR5cGUgPSAoXG5cdFx0XHRcdG9QYXJhbWV0ZXIgYXMge1xuXHRcdFx0XHRcdG5hbWU6IHN0cmluZztcblx0XHRcdFx0XHR0eXBlPzogc3RyaW5nO1xuXHRcdFx0XHR9XG5cdFx0XHQpLnR5cGVcblx0XHRcdFx0PyBUeXBlTWFwLmdldEJhc2VUeXBlKFxuXHRcdFx0XHRcdFx0KFxuXHRcdFx0XHRcdFx0XHRvUGFyYW1ldGVyIGFzIHtcblx0XHRcdFx0XHRcdFx0XHRuYW1lOiBzdHJpbmc7XG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogc3RyaW5nO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQpLnR5cGVcblx0XHRcdFx0ICApXG5cdFx0XHRcdDogQmFzZVR5cGUuU3RyaW5nO1xuXHRcdFx0Y29uc3QgdHlwZUluc3RhbmNlID0gVHlwZU1hcC5nZXREYXRhVHlwZUluc3RhbmNlKHBhcmFtZXRlcnRUeXBlKTtcblx0XHRcdG1vZGVsLnNldFByb3BlcnR5KHNQcm9wZXJ0eU5hbWUsIHR5cGVJbnN0YW5jZS5wYXJzZVZhbHVlKHN0YXJ0dXBQYXJhbWV0ZXJzW3NQYXJhbWV0ZXJOYW1lXVswXSwgXCJzdHJpbmdcIikpO1xuXHRcdH0gZWxzZSBpZiAoZXh0ZW5kZWRQYXJhbWV0ZXJzLmxlbmd0aCA+IDApIHtcblx0XHRcdGZvciAoY29uc3Qgb0V4dGVuZGVkUGFyYW1ldGVyIG9mIGV4dGVuZGVkUGFyYW1ldGVycykge1xuXHRcdFx0XHRpZiAob0V4dGVuZGVkUGFyYW1ldGVyLlByb3BlcnR5TmFtZSA9PT0gc1BhcmFtZXRlck5hbWUpIHtcblx0XHRcdFx0XHRjb25zdCBvUmFuZ2UgPSBvRXh0ZW5kZWRQYXJhbWV0ZXIuUmFuZ2VzLmxlbmd0aFxuXHRcdFx0XHRcdFx0PyBvRXh0ZW5kZWRQYXJhbWV0ZXIuUmFuZ2VzW29FeHRlbmRlZFBhcmFtZXRlci5SYW5nZXMubGVuZ3RoIC0gMV1cblx0XHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdGlmIChvUmFuZ2UgJiYgb1JhbmdlLlNpZ24gPT09IFwiSVwiICYmIG9SYW5nZS5PcHRpb24gPT09IFwiRVFcIikge1xuXHRcdFx0XHRcdFx0bW9kZWwuc2V0UHJvcGVydHkoc1Byb3BlcnR5TmFtZSwgb1JhbmdlLkxvdyk7IC8vIGhpZ2ggaXMgaWdub3JlZCB3aGVuIE9wdGlvbj1FUVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG59XG5cbmV4cG9ydCB0eXBlIEluYm91bmRQYXJhbWV0ZXIgPSB7XG5cdHVzZUZvckNyZWF0ZTogYm9vbGVhbjtcbn07XG5mdW5jdGlvbiBnZXRBZGRpdGlvbmFsUGFyYW1zRm9yQ3JlYXRlKFxuXHRvU3RhcnR1cFBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd25bXT4sXG5cdG9JbmJvdW5kUGFyYW1ldGVycz86IFJlY29yZDxzdHJpbmcsIEluYm91bmRQYXJhbWV0ZXI+XG4pOiB1bmtub3duIHtcblx0Y29uc3Qgb0luYm91bmRzID0gb0luYm91bmRQYXJhbWV0ZXJzLFxuXHRcdGFDcmVhdGVQYXJhbWV0ZXJzID1cblx0XHRcdG9JbmJvdW5kcyAhPT0gdW5kZWZpbmVkXG5cdFx0XHRcdD8gT2JqZWN0LmtleXMob0luYm91bmRzKS5maWx0ZXIoZnVuY3Rpb24gKHNQYXJhbWV0ZXI6IHN0cmluZykge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG9JbmJvdW5kc1tzUGFyYW1ldGVyXS51c2VGb3JDcmVhdGU7XG5cdFx0XHRcdCAgfSlcblx0XHRcdFx0OiBbXTtcblx0bGV0IG9SZXQ7XG5cdGZvciAoY29uc3QgZWxlbWVudCBvZiBhQ3JlYXRlUGFyYW1ldGVycykge1xuXHRcdGNvbnN0IHNDcmVhdGVQYXJhbWV0ZXIgPSBlbGVtZW50O1xuXHRcdGNvbnN0IGFWYWx1ZXMgPSBvU3RhcnR1cFBhcmFtZXRlcnMgJiYgb1N0YXJ0dXBQYXJhbWV0ZXJzW3NDcmVhdGVQYXJhbWV0ZXJdO1xuXHRcdGlmIChhVmFsdWVzICYmIGFWYWx1ZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRvUmV0ID0gb1JldCB8fCBPYmplY3QuY3JlYXRlKG51bGwpO1xuXHRcdFx0b1JldFtzQ3JlYXRlUGFyYW1ldGVyXSA9IGFWYWx1ZXNbMF07XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvUmV0O1xufVxudHlwZSBPdXRib3VuZFBhcmFtZXRlciA9IHtcblx0cGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgT3V0Ym91bmRQYXJhbWV0ZXJWYWx1ZT47XG5cdHNlbWFudGljT2JqZWN0Pzogc3RyaW5nO1xuXHRhY3Rpb24/OiBzdHJpbmc7XG59O1xudHlwZSBPdXRib3VuZFBhcmFtZXRlclZhbHVlID0ge1xuXHR2YWx1ZT86IHtcblx0XHR2YWx1ZT86IHN0cmluZztcblx0XHRmb3JtYXQ/OiBzdHJpbmc7XG5cdH07XG59O1xuZnVuY3Rpb24gZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nKG9PdXRib3VuZDogT3V0Ym91bmRQYXJhbWV0ZXIpOiBNZXRhTW9kZWxUeXBlPFNlbWFudGljT2JqZWN0TWFwcGluZ1R5cGVUeXBlcz5bXSB7XG5cdGNvbnN0IGFTZW1hbnRpY09iamVjdE1hcHBpbmc6IE1ldGFNb2RlbFR5cGU8U2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZVR5cGVzPltdID0gW107XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvc3RyaWN0LWJvb2xlYW4tZXhwcmVzc2lvbnNcblx0aWYgKG9PdXRib3VuZC5wYXJhbWV0ZXJzKSB7XG5cdFx0Y29uc3QgYVBhcmFtZXRlcnMgPSBPYmplY3Qua2V5cyhvT3V0Ym91bmQucGFyYW1ldGVycykgfHwgW107XG5cdFx0aWYgKGFQYXJhbWV0ZXJzLmxlbmd0aCA+IDApIHtcblx0XHRcdGFQYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24gKHNQYXJhbTogc3RyaW5nKSB7XG5cdFx0XHRcdGNvbnN0IG9NYXBwaW5nID0gb091dGJvdW5kLnBhcmFtZXRlcnNbc1BhcmFtXTtcblx0XHRcdFx0aWYgKG9NYXBwaW5nLnZhbHVlICYmIG9NYXBwaW5nLnZhbHVlLnZhbHVlICYmIG9NYXBwaW5nLnZhbHVlLmZvcm1hdCA9PT0gXCJiaW5kaW5nXCIpIHtcblx0XHRcdFx0XHQvLyB1c2luZyB0aGUgZm9ybWF0IG9mIFVJLk1hcHBpbmdcblx0XHRcdFx0XHRjb25zdCBvU2VtYW50aWNNYXBwaW5nID0ge1xuXHRcdFx0XHRcdFx0TG9jYWxQcm9wZXJ0eToge1xuXHRcdFx0XHRcdFx0XHQkUHJvcGVydHlQYXRoOiBvTWFwcGluZy52YWx1ZS52YWx1ZVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFNlbWFudGljT2JqZWN0UHJvcGVydHk6IHNQYXJhbVxuXHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRpZiAoYVNlbWFudGljT2JqZWN0TWFwcGluZy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHQvLyBUbyBjaGVjayBpZiB0aGUgc2VtYW50aWNPYmplY3QgTWFwcGluZyBpcyBkb25lIGZvciB0aGUgc2FtZSBsb2NhbCBwcm9wZXJ0eSBtb3JlIHRoYXQgb25jZSB0aGVuIGZpcnN0IG9uZSB3aWxsIGJlIGNvbnNpZGVyZWRcblx0XHRcdFx0XHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiBhU2VtYW50aWNPYmplY3RNYXBwaW5nKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChlbGVtZW50LkxvY2FsUHJvcGVydHk/LiRQcm9wZXJ0eVBhdGggIT09IG9TZW1hbnRpY01hcHBpbmcuTG9jYWxQcm9wZXJ0eS4kUHJvcGVydHlQYXRoKSB7XG5cdFx0XHRcdFx0XHRcdFx0YVNlbWFudGljT2JqZWN0TWFwcGluZy5wdXNoKG9TZW1hbnRpY01hcHBpbmcpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGFTZW1hbnRpY09iamVjdE1hcHBpbmcucHVzaChvU2VtYW50aWNNYXBwaW5nKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gYVNlbWFudGljT2JqZWN0TWFwcGluZztcbn1cblxuZnVuY3Rpb24gZ2V0SGVhZGVyRmFjZXRJdGVtQ29uZmlnRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKFxuXHRvVmlld0RhdGE6IFZpZXdEYXRhLFxuXHRvQ3Jvc3NOYXY6IFJlY29yZDxzdHJpbmcsIE91dGJvdW5kUGFyYW1ldGVyPlxuKTogUmVjb3JkPFxuXHRzdHJpbmcsXG5cdHtcblx0XHRzZW1hbnRpY09iamVjdDogc3RyaW5nO1xuXHRcdGFjdGlvbjogc3RyaW5nO1xuXHRcdHNlbWFudGljT2JqZWN0TWFwcGluZzogTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlVHlwZXM+W107XG5cdH1cbj4ge1xuXHRjb25zdCBvSGVhZGVyRmFjZXRJdGVtczogUmVjb3JkPFxuXHRcdHN0cmluZyxcblx0XHR7XG5cdFx0XHRzZW1hbnRpY09iamVjdDogc3RyaW5nO1xuXHRcdFx0YWN0aW9uOiBzdHJpbmc7XG5cdFx0XHRzZW1hbnRpY09iamVjdE1hcHBpbmc6IE1ldGFNb2RlbFR5cGU8U2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZVR5cGVzPltdO1xuXHRcdH1cblx0PiA9IHt9O1xuXHRsZXQgc0lkO1xuXHRjb25zdCBvQ29udHJvbENvbmZpZyA9IG9WaWV3RGF0YS5jb250cm9sQ29uZmlndXJhdGlvbiBhcyBSZWNvcmQ8XG5cdFx0c3RyaW5nLFxuXHRcdHtcblx0XHRcdG5hdmlnYXRpb24/OiB7XG5cdFx0XHRcdHRhcmdldE91dGJvdW5kPzoge1xuXHRcdFx0XHRcdG91dGJvdW5kOiBzdHJpbmc7XG5cdFx0XHRcdH07XG5cdFx0XHR9O1xuXHRcdH1cblx0Pjtcblx0Zm9yIChjb25zdCBjb25maWcgaW4gb0NvbnRyb2xDb25maWcpIHtcblx0XHRpZiAoY29uZmlnLmluY2x1ZGVzKFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFQb2ludFwiKSB8fCBjb25maWcuaW5jbHVkZXMoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ2hhcnRcIikpIHtcblx0XHRcdGNvbnN0IHNPdXRib3VuZCA9IG9Db250cm9sQ29uZmlnW2NvbmZpZ10ubmF2aWdhdGlvbj8udGFyZ2V0T3V0Ym91bmQ/Lm91dGJvdW5kO1xuXHRcdFx0aWYgKHNPdXRib3VuZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbnN0IG9PdXRib3VuZCA9IG9Dcm9zc05hdltzT3V0Ym91bmRdO1xuXHRcdFx0XHRpZiAob091dGJvdW5kLnNlbWFudGljT2JqZWN0ICYmIG9PdXRib3VuZC5hY3Rpb24pIHtcblx0XHRcdFx0XHRpZiAoY29uZmlnLmluY2x1ZGVzKFwiQ2hhcnRcIikpIHtcblx0XHRcdFx0XHRcdHNJZCA9IGdlbmVyYXRlKFtcImZlXCIsIFwiTWljcm9DaGFydExpbmtcIiwgY29uZmlnXSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHNJZCA9IGdlbmVyYXRlKFtcImZlXCIsIFwiSGVhZGVyRFBMaW5rXCIsIGNvbmZpZ10pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBhU2VtYW50aWNPYmplY3RNYXBwaW5nID0gQ29tbW9uVXRpbHMuZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nKG9PdXRib3VuZCk7XG5cdFx0XHRcdFx0b0hlYWRlckZhY2V0SXRlbXNbc0lkXSA9IHtcblx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBvT3V0Ym91bmQuc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0XHRhY3Rpb246IG9PdXRib3VuZC5hY3Rpb24sXG5cdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdE1hcHBpbmc6IGFTZW1hbnRpY09iamVjdE1hcHBpbmdcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdExvZy5lcnJvcihgQ3Jvc3MgbmF2aWdhdGlvbiBvdXRib3VuZCBpcyBjb25maWd1cmVkIHdpdGhvdXQgc2VtYW50aWMgb2JqZWN0IGFuZCBhY3Rpb24gZm9yICR7c091dGJvdW5kfWApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvSGVhZGVyRmFjZXRJdGVtcztcbn1cblxuZnVuY3Rpb24gc2V0U2VtYW50aWNPYmplY3RNYXBwaW5ncyhvU2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudCwgdk1hcHBpbmdzOiB1bmtub3duKTogU2VsZWN0aW9uVmFyaWFudCB7XG5cdGNvbnN0IG9NYXBwaW5ncyA9IHR5cGVvZiB2TWFwcGluZ3MgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKHZNYXBwaW5ncykgOiB2TWFwcGluZ3M7XG5cdGZvciAoY29uc3QgZWxlbWVudCBvZiBvTWFwcGluZ3MpIHtcblx0XHRjb25zdCBzTG9jYWxQcm9wZXJ0eSA9XG5cdFx0XHQoZWxlbWVudFtcIkxvY2FsUHJvcGVydHlcIl0gJiYgZWxlbWVudFtcIkxvY2FsUHJvcGVydHlcIl1bXCIkUHJvcGVydHlQYXRoXCJdKSB8fFxuXHRcdFx0KGVsZW1lbnRbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkxvY2FsUHJvcGVydHlcIl0gJiYgZWxlbWVudFtcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTG9jYWxQcm9wZXJ0eVwiXVtcIiRQYXRoXCJdKTtcblx0XHRjb25zdCBzU2VtYW50aWNPYmplY3RQcm9wZXJ0eSA9XG5cdFx0XHRlbGVtZW50W1wiU2VtYW50aWNPYmplY3RQcm9wZXJ0eVwiXSB8fCBlbGVtZW50W1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY09iamVjdFByb3BlcnR5XCJdO1xuXHRcdGNvbnN0IG9TZWxlY3RPcHRpb24gPSBvU2VsZWN0aW9uVmFyaWFudC5nZXRTZWxlY3RPcHRpb24oc0xvY2FsUHJvcGVydHkpO1xuXHRcdGlmIChvU2VsZWN0T3B0aW9uKSB7XG5cdFx0XHQvL0NyZWF0ZSBhIG5ldyBTZWxlY3RPcHRpb24gd2l0aCBzU2VtYW50aWNPYmplY3RQcm9wZXJ0eSBhcyB0aGUgcHJvcGVydHkgTmFtZSBhbmQgcmVtb3ZlIHRoZSBvbGRlciBvbmVcblx0XHRcdG9TZWxlY3Rpb25WYXJpYW50LnJlbW92ZVNlbGVjdE9wdGlvbihzTG9jYWxQcm9wZXJ0eSk7XG5cdFx0XHRvU2VsZWN0aW9uVmFyaWFudC5tYXNzQWRkU2VsZWN0T3B0aW9uKHNTZW1hbnRpY09iamVjdFByb3BlcnR5LCBvU2VsZWN0T3B0aW9uKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG9TZWxlY3Rpb25WYXJpYW50O1xufVxuXG50eXBlIFNlbWFudGljT2JqZWN0RnJvbVBhdGggPSB7XG5cdHNlbWFudGljT2JqZWN0UGF0aDogc3RyaW5nO1xuXHRzZW1hbnRpY09iamVjdEZvckdldExpbmtzOiB7IHNlbWFudGljT2JqZWN0OiBzdHJpbmcgfVtdO1xuXHRzZW1hbnRpY09iamVjdDoge1xuXHRcdHNlbWFudGljT2JqZWN0OiB7ICRQYXRoOiBzdHJpbmcgfTtcblx0fTtcblx0dW5hdmFpbGFibGVBY3Rpb25zOiBzdHJpbmdbXTtcbn07XG5hc3luYyBmdW5jdGlvbiBmbkdldFNlbWFudGljT2JqZWN0c0Zyb21QYXRoKFxuXHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0c1BhdGg6IHN0cmluZyxcblx0c1F1YWxpZmllcjogc3RyaW5nXG4pOiBQcm9taXNlPFNlbWFudGljT2JqZWN0RnJvbVBhdGg+IHtcblx0cmV0dXJuIG5ldyBQcm9taXNlPFNlbWFudGljT2JqZWN0RnJvbVBhdGg+KGZ1bmN0aW9uIChyZXNvbHZlKSB7XG5cdFx0bGV0IHNTZW1hbnRpY09iamVjdCwgYVNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zO1xuXHRcdGlmIChzUXVhbGlmaWVyID09PSBcIlwiKSB7XG5cdFx0XHRzU2VtYW50aWNPYmplY3QgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzUGF0aH1AJHtDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNPYmplY3R9YCk7XG5cdFx0XHRhU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzUGF0aH1AJHtDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnN9YCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNTZW1hbnRpY09iamVjdCA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NQYXRofUAke0NvbW1vbkFubm90YXRpb25UZXJtcy5TZW1hbnRpY09iamVjdH0jJHtzUXVhbGlmaWVyfWApO1xuXHRcdFx0YVNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zID0gb01ldGFNb2RlbC5nZXRPYmplY3QoXG5cdFx0XHRcdGAke3NQYXRofUAke0NvbW1vbkFubm90YXRpb25UZXJtcy5TZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uc30jJHtzUXVhbGlmaWVyfWBcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYVNlbWFudGljT2JqZWN0Rm9yR2V0TGlua3MgPSBbeyBzZW1hbnRpY09iamVjdDogc1NlbWFudGljT2JqZWN0IH1dO1xuXHRcdGNvbnN0IG9TZW1hbnRpY09iamVjdCA9IHtcblx0XHRcdHNlbWFudGljT2JqZWN0OiBzU2VtYW50aWNPYmplY3Rcblx0XHR9O1xuXHRcdHJlc29sdmUoe1xuXHRcdFx0c2VtYW50aWNPYmplY3RQYXRoOiBzUGF0aCxcblx0XHRcdHNlbWFudGljT2JqZWN0Rm9yR2V0TGlua3M6IGFTZW1hbnRpY09iamVjdEZvckdldExpbmtzLFxuXHRcdFx0c2VtYW50aWNPYmplY3Q6IG9TZW1hbnRpY09iamVjdCxcblx0XHRcdHVuYXZhaWxhYmxlQWN0aW9uczogYVNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zXG5cdFx0fSk7XG5cdH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmbkdldFNlbWFudGljT2JqZWN0UHJvbWlzZShvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgc1BhdGg6IHN0cmluZywgc1F1YWxpZmllcjogc3RyaW5nKTogUHJvbWlzZTxTZW1hbnRpY09iamVjdEZyb21QYXRoPiB7XG5cdHJldHVybiBDb21tb25VdGlscy5nZXRTZW1hbnRpY09iamVjdHNGcm9tUGF0aChvTWV0YU1vZGVsLCBzUGF0aCwgc1F1YWxpZmllcik7XG59XG5cbmV4cG9ydCB0eXBlIFByZXByb2Nlc3NvclNldHRpbmdzID0ge1xuXHRhcHBDb21wb25lbnQ/OiBBcHBDb21wb25lbnQ7XG5cdGJpbmRpbmdDb250ZXh0czogb2JqZWN0O1xuXHRtb2RlbHM6IG9iamVjdDtcbn07XG5leHBvcnQgdHlwZSBCYXNlVHJlZU1vZGlmaWVyID0ge1xuXHR0ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudChcblx0XHRzRnJhZ21lbnROYW1lOiBzdHJpbmcsXG5cdFx0bVByZXByb2Nlc3NvclNldHRpbmdzOiBQcmVwcm9jZXNzb3JTZXR0aW5ncyxcblx0XHRvVmlldz86IFZpZXdcblx0KTogUHJvbWlzZTxVSTVFbGVtZW50W10gfCBFbGVtZW50W10+O1xuXHR0YXJnZXRzOiBzdHJpbmc7XG5cdGdldElkKHZDb250cm9sOiBVSTVFbGVtZW50IHwgRWxlbWVudCk6IHN0cmluZztcblx0Z2V0Q29udHJvbFR5cGUob0NvbnRyb2w6IFVJNUVsZW1lbnQgfCBFbGVtZW50KTogc3RyaW5nO1xuXHRnZXRQcm9wZXJ0eTxUPihvQ29udHJvbDogVUk1RWxlbWVudCB8IEVsZW1lbnQsIHNQcm9wZXJ0eU5hbWU6IHN0cmluZyk6IFByb21pc2U8VD47XG5cdGdldEFnZ3JlZ2F0aW9uKHBhcmVudDogVUk1RWxlbWVudCB8IEVsZW1lbnQsIG5hbWU6IHN0cmluZyk6IFByb21pc2U8VUk1RWxlbWVudFtdIHwgRWxlbWVudFtdPjtcblx0aW5zZXJ0QWdncmVnYXRpb24oXG5cdFx0cGFyZW50OiBVSTVFbGVtZW50IHwgRWxlbWVudCxcblx0XHRuYW1lOiBzdHJpbmcsXG5cdFx0Y29udHJvbDogVUk1RWxlbWVudCB8IEVsZW1lbnQgfCBVSTVFbGVtZW50W10gfCBFbGVtZW50W10sXG5cdFx0aW5kZXg/OiBudW1iZXIsXG5cdFx0dmlldz86IEVsZW1lbnQsXG5cdFx0c2tpcEFkanVzdEluZGV4PzogYm9vbGVhblxuXHQpOiBQcm9taXNlPHZvaWQ+O1xuXHRzZXRQcm9wZXJ0eShvQ29udHJvbDogVUk1RWxlbWVudCB8IEVsZW1lbnQsIHNQcm9wZXJ0eU5hbWU6IHN0cmluZywgdlZhbHVlOiB1bmtub3duKTogdm9pZDtcblx0YnlTZWxlY3RvcihvU2VsZWN0b3I6IG9iamVjdCwgb0FwcENvbXBvbmVudD86IENvbXBvbmVudCwgb1ZpZXc/OiBFbGVtZW50KTogTWFuYWdlZE9iamVjdCB8IEVsZW1lbnQ7XG59O1xuXG5hc3luYyBmdW5jdGlvbiB0ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudChcblx0c0ZyYWdtZW50TmFtZTogc3RyaW5nIHwgRWxlbWVudCB8IG51bGwsXG5cdG9QcmVwcm9jZXNzb3JTZXR0aW5nczogUHJlcHJvY2Vzc29yU2V0dGluZ3MsXG5cdG9Jbk9wdGlvbnM/OiB7XG5cdFx0dmlldz86IFZpZXc7XG5cdFx0aXNYTUw/OiBib29sZWFuO1xuXHRcdGlkPzogc3RyaW5nO1xuXHRcdGNvbnRyb2xsZXI/OiBQYWdlQ29udHJvbGxlciB8IEV4dGVuc2lvbkFQSTtcblx0XHRjb250YWluaW5nVmlldz86IFZpZXc7XG5cdFx0Y29udGV4dFBhdGg/OiBzdHJpbmc7XG5cdH0sXG5cdG9Nb2RpZmllcj86IEJhc2VUcmVlTW9kaWZpZXJcbik6IFByb21pc2U8RWxlbWVudCB8IFVJNUVsZW1lbnQgfCBFbGVtZW50W10gfCBVSTVFbGVtZW50W10+IHtcblx0Y29uc3Qgb09wdGlvbnMgPSBvSW5PcHRpb25zIHx8IHt9O1xuXHRpZiAob01vZGlmaWVyICYmIHR5cGVvZiBzRnJhZ21lbnROYW1lID09PSBcInN0cmluZ1wiKSB7XG5cdFx0cmV0dXJuIG9Nb2RpZmllci50ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudChzRnJhZ21lbnROYW1lLCBvUHJlcHJvY2Vzc29yU2V0dGluZ3MsIG9PcHRpb25zLnZpZXcpLnRoZW4oZnVuY3Rpb24gKG9GcmFnbWVudCkge1xuXHRcdFx0Ly8gVGhpcyBpcyByZXF1aXJlZCBhcyBGbGV4IHJldHVybnMgYW4gSFRNTENvbGxlY3Rpb24gYXMgdGVtcGxhdGluZyByZXN1bHQgaW4gWE1MIHRpbWUuXG5cdFx0XHRyZXR1cm4gb01vZGlmaWVyLnRhcmdldHMgPT09IFwieG1sVHJlZVwiICYmIG9GcmFnbWVudC5sZW5ndGggPiAwID8gb0ZyYWdtZW50WzBdIDogb0ZyYWdtZW50O1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IGZyYWdtZW50RGF0YSA9XG5cdFx0XHR0eXBlb2Ygc0ZyYWdtZW50TmFtZSA9PT0gXCJzdHJpbmdcIiA/IFhNTFRlbXBsYXRlUHJvY2Vzc29yLmxvYWRUZW1wbGF0ZShzRnJhZ21lbnROYW1lLCBcImZyYWdtZW50XCIpIDogc0ZyYWdtZW50TmFtZTtcblx0XHRjb25zdCBvRnJhZ21lbnQgPSBhd2FpdCBYTUxQcmVwcm9jZXNzb3IucHJvY2VzcyhmcmFnbWVudERhdGEsIHsgbmFtZTogc0ZyYWdtZW50TmFtZSB9LCBvUHJlcHJvY2Vzc29yU2V0dGluZ3MpO1xuXHRcdGNvbnN0IG9Db250cm9sID0gb0ZyYWdtZW50LmZpcnN0RWxlbWVudENoaWxkO1xuXHRcdGlmICghIW9PcHRpb25zLmlzWE1MICYmIG9Db250cm9sKSB7XG5cdFx0XHRyZXR1cm4gb0NvbnRyb2w7XG5cdFx0fVxuXHRcdGxldCBvd25lcjogeyBydW5Bc093bmVyOiA8VD4oZm46ICgpID0+IFQpID0+IFQgfSA9IG9QcmVwcm9jZXNzb3JTZXR0aW5ncy5hcHBDb21wb25lbnQgPz8geyBydW5Bc093bmVyOiAoZm4pID0+IGZuKCkgfTtcblx0XHRpZiAob09wdGlvbnMuY29udGFpbmluZ1ZpZXcpIHtcblx0XHRcdGNvbnN0IHZpZXdPd25lciA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcihvT3B0aW9ucy5jb250YWluaW5nVmlldyk7XG5cdFx0XHRpZiAodmlld093bmVyKSB7XG5cdFx0XHRcdG93bmVyID0gdmlld093bmVyO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRsZXQgY29udGFpbmluZ1ZpZXc6IFZpZXcgfCB1bmRlZmluZWQ7XG5cdFx0aWYgKG9PcHRpb25zLnZpZXcgJiYgIW9PcHRpb25zLmNvbnRyb2xsZXIpIHtcblx0XHRcdC8vIHRoaXMgaXMgb3ZlcmFsbCBzdHVwaWQsIGluIGNhc2Ugd2UgYXJlIGNvbWluZyBmcm9tIHRoZSBkZWxlZ2F0ZSB3aXRoIGFuIHhtbCBub2RlIGluc3RlYWQgb2YgYSBmcmFnbWVudCB3ZSBuZWVkIHRvIHBhc3MgdGhlIGNvbnRhaW5pbmdWaWV3IGluIHRoZXJlIChkb25lIGJ5IHRoZSBvTW9kaWZpZXIgY2FsbCBmb3IgaW5zdGFuY2UpXG5cdFx0XHQvLyBCdXQgaW4gb3RoZXIgcnVudGltZSBjYXNlIHdoZXJlIHdlIGFyZSBoZXJlIHdlIG5lZWQgdG8gbWFpbnRhaW4gdGhlIGNvbnRyb2xsZXIgYW5kIHRodXMgY2Fubm90IGhhdmUgYSBjb250YWluaW5nVmlldy4uLlxuXHRcdFx0Y29udGFpbmluZ1ZpZXcgPSBvT3B0aW9ucy52aWV3O1xuXHRcdH1cblx0XHRyZXR1cm4gb3duZXIucnVuQXNPd25lcihhc3luYyAoKSA9PiB7XG5cdFx0XHRyZXR1cm4gRnJhZ21lbnQubG9hZCh7XG5cdFx0XHRcdGlkOiBvT3B0aW9ucy5pZCxcblx0XHRcdFx0dHlwZTogXCJTQ09QRURGRUZSQUdNRU5UXCIsXG5cdFx0XHRcdGNvbnRleHRQYXRoOiBvT3B0aW9ucy5jb250ZXh0UGF0aCxcblx0XHRcdFx0ZGVmaW5pdGlvbjogb0ZyYWdtZW50IGFzIHVua25vd24gYXMgc3RyaW5nLFxuXHRcdFx0XHRjb250cm9sbGVyOiBvT3B0aW9ucy5jb250cm9sbGVyLFxuXHRcdFx0XHRjb250YWluaW5nVmlldzogY29udGFpbmluZ1ZpZXdcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldFNpbmdsZXRvblBhdGgocGF0aDogc3RyaW5nLCBtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoQm9vbGVhbiksXG5cdFx0cHJvcGVydHlOYW1lID0gcGFydHMucG9wKCkhLFxuXHRcdG5hdmlnYXRpb25QYXRoID0gcGFydHMuam9pbihcIi9cIiksXG5cdFx0ZW50aXR5U2V0ID0gbmF2aWdhdGlvblBhdGggJiYgbWV0YU1vZGVsLmdldE9iamVjdChgLyR7bmF2aWdhdGlvblBhdGh9YCk7XG5cdGlmIChlbnRpdHlTZXQ/LiRraW5kID09PSBcIlNpbmdsZXRvblwiKSB7XG5cdFx0Y29uc3Qgc2luZ2xldG9uTmFtZSA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdO1xuXHRcdHJldHVybiBgLyR7c2luZ2xldG9uTmFtZX0vJHtwcm9wZXJ0eU5hbWV9YDtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXF1ZXN0U2luZ2xldG9uUHJvcGVydHkocGF0aDogc3RyaW5nLCBtb2RlbDogT0RhdGFNb2RlbCk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRpZiAoIXBhdGggfHwgIW1vZGVsKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0fVxuXHRjb25zdCBtZXRhTW9kZWwgPSBtb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0Ly8gRmluZCB0aGUgdW5kZXJseWluZyBlbnRpdHkgc2V0IGZyb20gdGhlIHByb3BlcnR5IHBhdGggYW5kIGNoZWNrIHdoZXRoZXIgaXQgaXMgYSBzaW5nbGV0b24uXG5cdGNvbnN0IHJlc29sdmVkUGF0aCA9IGdldFNpbmdsZXRvblBhdGgocGF0aCwgbWV0YU1vZGVsKTtcblx0aWYgKHJlc29sdmVkUGF0aCkge1xuXHRcdGNvbnN0IHByb3BlcnR5QmluZGluZyA9IG1vZGVsLmJpbmRQcm9wZXJ0eShyZXNvbHZlZFBhdGgpO1xuXHRcdHJldHVybiBwcm9wZXJ0eUJpbmRpbmcucmVxdWVzdFZhbHVlKCk7XG5cdH1cblxuXHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xufVxuXG4vLyBHZXQgdGhlIHBhdGggZm9yIGFjdGlvbiBwYXJhbWV0ZXJzIHRoYXQgaXMgbmVlZGVkIHRvIHJlYWQgdGhlIGFubm90YXRpb25zXG5mdW5jdGlvbiBnZXRQYXJhbWV0ZXJQYXRoKHNQYXRoOiBzdHJpbmcsIHNQYXJhbWV0ZXI6IHN0cmluZyk6IHN0cmluZyB7XG5cdGxldCBzQ29udGV4dDtcblx0aWYgKHNQYXRoLmluY2x1ZGVzKFwiQCR1aTUub3ZlcmxvYWRcIikpIHtcblx0XHRzQ29udGV4dCA9IHNQYXRoLnNwbGl0KFwiQCR1aTUub3ZlcmxvYWRcIilbMF07XG5cdH0gZWxzZSB7XG5cdFx0Ly8gRm9yIFVuYm91bmQgQWN0aW9ucyBpbiBBY3Rpb24gUGFyYW1ldGVyIERpYWxvZ3Ncblx0XHRjb25zdCBhQWN0aW9uID0gc1BhdGguc3BsaXQoXCIvMFwiKVswXS5zcGxpdChcIi5cIik7XG5cdFx0c0NvbnRleHQgPSBgLyR7YUFjdGlvblthQWN0aW9uLmxlbmd0aCAtIDFdfS9gO1xuXHR9XG5cdHJldHVybiBzQ29udGV4dCArIHNQYXJhbWV0ZXI7XG59XG5cbi8qKlxuICogR2V0IHJlc29sdmVkIGV4cHJlc3Npb24gYmluZGluZyB1c2VkIGZvciB0ZXh0cyBhdCBydW50aW1lLlxuICogQHBhcmFtIGV4cEJpbmRpbmdcbiAqIEBwYXJhbSBjb250cm9sXG4gKiBAcmV0dXJucyBBIHN0cmluZyBhZnRlciByZXNvbHV0aW9uLlxuICovXG5mdW5jdGlvbiBfZm50cmFuc2xhdGVkVGV4dEZyb21FeHBCaW5kaW5nU3RyaW5nKGV4cEJpbmRpbmc6IHN0cmluZywgY29udHJvbDogQ29udHJvbCk6IHN0cmluZyB7XG5cdC8vIFRoZSBpZGVhIGhlcmUgaXMgdG8gY3JlYXRlIGR1bW15IGVsZW1lbnQgd2l0aCB0aGUgZXhwcmVzaW9uIGJpbmRpbmcuXG5cdC8vIEFkZGluZyBpdCBhcyBkZXBlbmRlbnQgdG8gdGhlIHZpZXcvY29udHJvbCB3b3VsZCBwcm9wYWdhdGUgYWxsIHRoZSBtb2RlbHMgdG8gdGhlIGR1bW15IGVsZW1lbnQgYW5kIHJlc29sdmUgdGhlIGJpbmRpbmcuXG5cdC8vIFdlIHJlbW92ZSB0aGUgZHVtbXkgZWxlbWVudCBhZnRlciB0aGF0IGFuZCBkZXN0cm95IGl0LlxuXG5cdGNvbnN0IGFueVJlc291cmNlVGV4dCA9IG5ldyBBbnlFbGVtZW50KHsgYW55VGV4dDogZXhwQmluZGluZyB9KTtcblx0Y29udHJvbC5hZGREZXBlbmRlbnQoYW55UmVzb3VyY2VUZXh0KTtcblx0Y29uc3QgcmVzdWx0VGV4dCA9IGFueVJlc291cmNlVGV4dC5nZXRBbnlUZXh0KCk7XG5cdGNvbnRyb2wucmVtb3ZlRGVwZW5kZW50KGFueVJlc291cmNlVGV4dCk7XG5cdGFueVJlc291cmNlVGV4dC5kZXN0cm95KCk7XG5cblx0cmV0dXJuIHJlc3VsdFRleHQ7XG59XG4vKipcbiAqIENoZWNrIGlmIHRoZSBjdXJyZW50IGRldmljZSBoYXMgYSBzbWFsbCBzY3JlZW4uXG4gKiBAcmV0dXJucyBBIEJvb2xlYW4uXG4gKi9cbmZ1bmN0aW9uIGlzU21hbGxEZXZpY2UoKTogYm9vbGVhbiB7XG5cdHJldHVybiAhRGV2aWNlLnN5c3RlbS5kZXNrdG9wIHx8IERldmljZS5yZXNpemUud2lkdGggPD0gMzIwO1xufVxuXG4vKipcbiAqIFBhcnNlcyBhIFNlbGVjdGlvblZhcmlhbnQgb3IgU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCBhbm5vdGF0aW9uIGFuZCBjcmVhdGVzIHRoZSBjb3JyZXNwb25kaW5nIGZpbHRlcnMuXG4gKiBAcGFyYW0gY29udHJvbCBNREMgQ2hhcnQsIE1EQyBUYWJsZSBvciBNdWx0aVZpZXcgY29udHJvbCBvbiB3aGljaCB0aGUgZmlsdGVycyBhcmUgYXBwbGllZFxuICogQHBhcmFtIGFubm90YXRpb25QYXRoIFNlbGVjdGlvblZhcmlhbnQgb3IgU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCBhbm5vdGF0aW9uXG4gKiBAcmV0dXJucyBSZXR1cm5zIGFuIGFycmF5IG9mIGZpbHRlcnMuXG4gKi9cbmZ1bmN0aW9uIGdldEZpbHRlcnNGcm9tQW5ub3RhdGlvbihjb250cm9sOiBDb250cm9sIHwgTURDQ2hhcnQgfCBNRENUYWJsZSwgYW5ub3RhdGlvblBhdGg6IHN0cmluZyk6IEZpbHRlcltdIHtcblx0Y29uc3QgbWV0YU1vZGVsID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KGNvbnRyb2wgYXMgQ29udHJvbCkuZ2V0TWV0YU1vZGVsKCk7XG5cdGNvbnN0IHN2Q29udGV4dCA9IG1ldGFNb2RlbC5nZXRNZXRhQ29udGV4dChgJHtjb250cm9sLmRhdGEoXCJlbnRpdHlUeXBlXCIpfSR7YW5ub3RhdGlvblBhdGh9YCk7XG5cdGNvbnN0IHByb3BlcnR5RmlsdGVyczogUmVjb3JkPHN0cmluZywgRmlsdGVyW10+ID0ge307XG5cdGxldCBhbm5vdGF0aW9uID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhzdkNvbnRleHQpLnRhcmdldE9iamVjdDtcblxuXHRpZiAoaXNBbm5vdGF0aW9uT2ZUeXBlPFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ+KGFubm90YXRpb24sIFVJQW5ub3RhdGlvblR5cGVzLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRUeXBlKSkge1xuXHRcdGFubm90YXRpb24gPSBhbm5vdGF0aW9uLlNlbGVjdGlvblZhcmlhbnQ7XG5cdH1cblxuXHRpZiAoIWFubm90YXRpb24gfHwgIWlzQW5ub3RhdGlvbk9mVHlwZTxTZWxlY3Rpb25WYXJpYW50VHlwZT4oYW5ub3RhdGlvbiwgVUlBbm5vdGF0aW9uVHlwZXMuU2VsZWN0aW9uVmFyaWFudFR5cGUpKSB7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cblx0KGFubm90YXRpb24uU2VsZWN0T3B0aW9ucyB8fCBbXSkuZm9yRWFjaCgoc2VsZWN0T3B0aW9uKSA9PiB7XG5cdFx0aWYgKHNlbGVjdE9wdGlvbi5Qcm9wZXJ0eU5hbWU/LiR0YXJnZXQgJiYgc2VsZWN0T3B0aW9uLlJhbmdlcz8ubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlUeXBlID0gc2VsZWN0T3B0aW9uLlByb3BlcnR5TmFtZS4kdGFyZ2V0LnR5cGU7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSBzZWxlY3RPcHRpb24uUHJvcGVydHlOYW1lLnZhbHVlO1xuXHRcdFx0Zm9yIChjb25zdCBqIGluIHNlbGVjdE9wdGlvbi5SYW5nZXMpIHtcblx0XHRcdFx0Y29uc3QgcmFuZ2UgPSBnZXRSYW5nZURlZmluaXRpb24oc2VsZWN0T3B0aW9uLlJhbmdlc1tqXSwgcHJvcGVydHlUeXBlKTtcblx0XHRcdFx0cHJvcGVydHlGaWx0ZXJzW3Byb3BlcnR5UGF0aF0gPSAocHJvcGVydHlGaWx0ZXJzW3Byb3BlcnR5UGF0aF0gPz8gW10pLmNvbmNhdChcblx0XHRcdFx0XHRuZXcgRmlsdGVyKHByb3BlcnR5UGF0aCwgcmFuZ2Uub3BlcmF0b3IgYXMgRmlsdGVyT3BlcmF0b3IsIHJhbmdlLnJhbmdlTG93LCByYW5nZS5yYW5nZUhpZ2gpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRjb25zdCBmaWx0ZXJzID0gW107XG5cdGZvciAoY29uc3QgcGF0aCBpbiBwcm9wZXJ0eUZpbHRlcnMpIHtcblx0XHRmaWx0ZXJzLnB1c2goXG5cdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0ZmlsdGVyczogcHJvcGVydHlGaWx0ZXJzW3BhdGhdLFxuXHRcdFx0XHRhbmQ6IGZhbHNlXG5cdFx0XHR9KVxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIGZpbHRlcnM7XG59XG5cbmZ1bmN0aW9uIGdldENvbnZlcnRlckNvbnRleHRGb3JQYXRoKFxuXHRzTWV0YVBhdGg6IHN0cmluZyxcblx0b01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdHNFbnRpdHlTZXQ6IHN0cmluZyxcblx0b0RpYWdub3N0aWNzOiBEaWFnbm9zdGljc1xuKTogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+IHtcblx0Y29uc3Qgb0NvbnRleHQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNNZXRhUGF0aCkgYXMgT0RhdGFWNENvbnRleHQ7XG5cdHJldHVybiBDb252ZXJ0ZXJDb250ZXh0Py5jcmVhdGVDb252ZXJ0ZXJDb250ZXh0Rm9yTWFjcm8oc0VudGl0eVNldCwgb0NvbnRleHQgfHwgb01ldGFNb2RlbCwgb0RpYWdub3N0aWNzLCBtZXJnZU9iamVjdHMpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGNvbnRleHQgb2YgdGhlIERyYWZ0Um9vdCBwYXRoLlxuICogSWYgYSB2aWV3IGhhcyBiZWVuIGNyZWF0ZWQgd2l0aCB0aGUgZHJhZnQgUm9vdCBQYXRoLCB0aGlzIG1ldGhvZCByZXR1cm5zIGl0cyBiaW5kaW5nQ29udGV4dC5cbiAqIFdoZXJlIG5vIHZpZXcgaXMgZm91bmQgYSBuZXcgY3JlYXRlZCBjb250ZXh0IGlzIHJldHVybmVkLlxuICogVGhlIG5ldyBjcmVhdGVkIGNvbnRleHQgcmVxdWVzdCB0aGUga2V5IG9mIHRoZSBlbnRpdHkgaW4gb3JkZXIgdG8gZ2V0IHRoZSBFdGFnIG9mIHRoaXMgZW50aXR5LlxuICogQHBhcmFtIHByb2dyYW1taW5nTW9kZWxcbiAqIEBwYXJhbSB2aWV3XG4gKiBAcGFyYW0gYXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gYmluZGluZ1BhcmFtZXRlcnNcbiAqIEByZXR1cm5zIFJldHVybnMgYSBQcm9taXNlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVJvb3RDb250ZXh0KFxuXHRwcm9ncmFtbWluZ01vZGVsOiBzdHJpbmcsXG5cdHZpZXc6IFZpZXcsXG5cdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRiaW5kaW5nUGFyYW1ldGVycz86IEJpbmRDb250ZXh0UGFyYW1ldGVyc1xuKTogUHJvbWlzZTxDb250ZXh0IHwgdW5kZWZpbmVkPiB7XG5cdGNvbnN0IHJlc3VsdCA9IGZpbmRPckNyZWF0ZVJvb3RDb250ZXh0KFxuXHRcdHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dCxcblx0XHRwcm9ncmFtbWluZ01vZGVsLFxuXHRcdHZpZXcsXG5cdFx0YXBwQ29tcG9uZW50LFxuXHRcdGJpbmRpbmdQYXJhbWV0ZXJzLFxuXHRcdHRydWVcblx0KTtcblx0aWYgKHJlc3VsdC5pc05ldyAmJiByZXN1bHQucm9vdENvbnRleHQgIT09IHVuZGVmaW5lZCkge1xuXHRcdGF3YWl0IENvbW1vblV0aWxzLndhaXRGb3JDb250ZXh0UmVxdWVzdGVkKHJlc3VsdC5yb290Q29udGV4dCk7XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0LnJvb3RDb250ZXh0O1xufVxuXG4vKipcbiAqIFN5bmMgZnVuY3Rpb24gdG8gZmluZCBvciBjcmVhdGUgYSByb290IGNvbnRleHQgZm9yIGEgZ2l2ZW4gY29udGV4dC5cbiAqIEBwYXJhbSBjb250ZXh0XG4gKiBAcGFyYW0gcHJvZ3JhbW1pbmdNb2RlbFxuICogQHBhcmFtIHZpZXdcbiAqIEBwYXJhbSBhcHBDb21wb25lbnRcbiAqIEBwYXJhbSBiaW5kaW5nUGFyYW1ldGVyc1xuICogQHBhcmFtIHVzZUNhY2hlXG4gKiBAcmV0dXJucyBUaGUgY29udGV4dCBhbmQgYSBib29sZWFuIHRvIHNwZWNpZnkgaWYgYSBuZXcgY29udGV4dCB3YXMgY3JlYXRlZFxuICovXG5mdW5jdGlvbiBmaW5kT3JDcmVhdGVSb290Q29udGV4dChcblx0Y29udGV4dDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQgfCBudWxsLFxuXHRwcm9ncmFtbWluZ01vZGVsOiBzdHJpbmcsXG5cdHZpZXc6IFZpZXcsXG5cdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRiaW5kaW5nUGFyYW1ldGVycz86IEJpbmRDb250ZXh0UGFyYW1ldGVycyxcblx0dXNlQ2FjaGUgPSBmYWxzZVxuKTogeyByb290Q29udGV4dDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ7IGlzTmV3OiBib29sZWFuIH0ge1xuXHRpZiAoY29udGV4dCkge1xuXHRcdGNvbnN0IHJvb3RDb250ZXh0UGF0aCA9XG5cdFx0XHRwcm9ncmFtbWluZ01vZGVsID09PSBcIkRyYWZ0XCIgPyBNb2RlbEhlbHBlci5nZXREcmFmdFJvb3RQYXRoKGNvbnRleHQpIDogTW9kZWxIZWxwZXIuZ2V0U3RpY2t5Um9vdFBhdGgoY29udGV4dCk7XG5cdFx0bGV0IHNpbXBsZVJvb3RDb250ZXh0OiBPRGF0YVY0Q29udGV4dDtcblx0XHRpZiAocm9vdENvbnRleHRQYXRoKSB7XG5cdFx0XHRpZiAoY29udGV4dC5nZXRQYXRoKCkgPT09IHJvb3RDb250ZXh0UGF0aCkge1xuXHRcdFx0XHRyZXR1cm4geyByb290Q29udGV4dDogY29udGV4dCwgaXNOZXc6IGZhbHNlIH07XG5cdFx0XHR9XG5cdFx0XHQvLyBDaGVjayBpZiBhIHZpZXcgbWF0Y2hlcyB3aXRoIHRoZSBkcmFmdCByb290IHBhdGgsIGFuZCBoYWQgYWxyZWFkeSBsb2FkZWQgaXRzIGNvbnRleHRcblx0XHRcdGNvbnN0IGV4aXN0aW5nQmluZGluZ0NvbnRleHRPblBhZ2UgPSBhcHBDb21wb25lbnRcblx0XHRcdFx0LmdldFJvb3RWaWV3Q29udHJvbGxlcigpXG5cdFx0XHRcdC5nZXRJbnN0YW5jZWRWaWV3cygpXG5cdFx0XHRcdC5maW5kKFxuXHRcdFx0XHRcdChwYWdlVmlldzogVmlldykgPT5cblx0XHRcdFx0XHRcdHBhZ2VWaWV3LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKSA9PT0gcm9vdENvbnRleHRQYXRoICYmXG5cdFx0XHRcdFx0XHRwYWdlVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRPYmplY3QoKSAhPT0gdW5kZWZpbmVkXG5cdFx0XHRcdClcblx0XHRcdFx0Py5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0O1xuXHRcdFx0aWYgKGV4aXN0aW5nQmluZGluZ0NvbnRleHRPblBhZ2UpIHtcblx0XHRcdFx0cmV0dXJuIHsgcm9vdENvbnRleHQ6IGV4aXN0aW5nQmluZGluZ0NvbnRleHRPblBhZ2UsIGlzTmV3OiBmYWxzZSB9O1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IHZpZXcuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0XHRzaW1wbGVSb290Q29udGV4dCA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvc2ltcGxlUm9vdENvbnRleHRcIik7XG5cdFx0XHRpZiAodXNlQ2FjaGUgJiYgc2ltcGxlUm9vdENvbnRleHQ/LmdldFBhdGgoKSA9PT0gcm9vdENvbnRleHRQYXRoKSB7XG5cdFx0XHRcdHJldHVybiB7IHJvb3RDb250ZXh0OiBzaW1wbGVSb290Q29udGV4dCwgaXNOZXc6IGZhbHNlIH07XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBtb2RlbCA9IGNvbnRleHQuZ2V0TW9kZWwoKTtcblx0XHRcdHNpbXBsZVJvb3RDb250ZXh0ID0gY3JlYXRlTmV3Um9vdENvbnRleHQobW9kZWwsIHJvb3RDb250ZXh0UGF0aCwgYmluZGluZ1BhcmFtZXRlcnMpO1xuXHRcdFx0Ly8gU3RvcmUgdGhpcyBuZXcgY3JlYXRlZCBjb250ZXh0IHRvIHVzZSBpdCBvbiB0aGUgbmV4dCBpdGVyYXRpb25zXG5cdFx0XHRpZiAodXNlQ2FjaGUpIHtcblx0XHRcdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9zaW1wbGVSb290Q29udGV4dFwiLCBzaW1wbGVSb290Q29udGV4dCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB7IHJvb3RDb250ZXh0OiBzaW1wbGVSb290Q29udGV4dCwgaXNOZXc6IHRydWUgfTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHtcblx0XHRyb290Q29udGV4dDogdW5kZWZpbmVkLFxuXHRcdGlzTmV3OiBmYWxzZVxuXHR9O1xufVxuXG4vKipcbiAqIFN5bmMgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IHJvb3QgY29udGV4dCBmb3IgYSBnaXZlbiBjb250ZXh0LlxuICogQHBhcmFtIG1vZGVsIFRoZSBvRGF0YU1vZGVsXG4gKiBAcGFyYW0gcm9vdENvbnRleHRQYXRoIFRoZSByb290IGNvbnRleHQgcGF0aFxuICogQHBhcmFtIGJpbmRpbmdQYXJhbWV0ZXJzIFRoZSBiaW5kaW5nIHBhcmFtZXRlcnMgd2hpY2ggY2FuIGJlIE9EYXRhIHF1ZXJ5IG9wdGlvbnNcbiAqIEByZXR1cm5zIFRoZSByb290IGNvbnRleHRcbiAqL1xuZnVuY3Rpb24gY3JlYXRlTmV3Um9vdENvbnRleHQobW9kZWw6IE9EYXRhTW9kZWwsIHJvb3RDb250ZXh0UGF0aDogc3RyaW5nLCBiaW5kaW5nUGFyYW1ldGVycz86IEJpbmRDb250ZXh0UGFyYW1ldGVycyk6IE9EYXRhVjRDb250ZXh0IHtcblx0Y29uc3QgbWVzc2FnZXNQYXRoID0gTW9kZWxIZWxwZXIuZ2V0TWVzc2FnZXNQYXRoKG1vZGVsLmdldE1ldGFNb2RlbCgpLCByb290Q29udGV4dFBhdGgpO1xuXHRjb25zdCBuZXdCaW5kaW5nUGFyYW1ldGVycyA9IHsgLi4uKGJpbmRpbmdQYXJhbWV0ZXJzID8/IHt9KSB9O1xuXHRpZiAobWVzc2FnZXNQYXRoICYmICghbmV3QmluZGluZ1BhcmFtZXRlcnMuJHNlbGVjdCB8fCBuZXdCaW5kaW5nUGFyYW1ldGVycy4kc2VsZWN0LmluY2x1ZGVzKG1lc3NhZ2VzUGF0aCkgPT09IGZhbHNlKSkge1xuXHRcdGNvbnN0IG5ld1NlbGVjdCA9IG5ld0JpbmRpbmdQYXJhbWV0ZXJzLiRzZWxlY3Q/LnNwbGl0KFwiLFwiKSA/PyBbXTtcblx0XHRuZXdTZWxlY3QucHVzaChtZXNzYWdlc1BhdGgpO1xuXHRcdG5ld0JpbmRpbmdQYXJhbWV0ZXJzLiRzZWxlY3QgPSBuZXdTZWxlY3Quam9pbihcIixcIik7XG5cdH1cblx0cmV0dXJuIG1vZGVsLmJpbmRDb250ZXh0KHJvb3RDb250ZXh0UGF0aCwgdW5kZWZpbmVkLCBuZXdCaW5kaW5nUGFyYW1ldGVycykuZ2V0Qm91bmRDb250ZXh0KCk7XG59XG5cbi8qKlxuICogSGVscGVyIG1ldGhvZCB0byBkZXRlcm1pbmUgaWYgdGhlIHNvdXJjZSBpcyB0byBiZSBkaXNwbGF5IGZvciB0aGUgZWRpdG1vZGUgb3Igbm90LlxuICogQHBhcmFtIHNvdXJjZVxuICogQHJldHVybnMgSWYgdGhlIHNvdXJjZSBpcyB0byBiZSBkaXNwbGF5ZWQgaW4gZWRpdCBtb2RlXG4gKi9cbmZ1bmN0aW9uIGdldElzRWRpdGFibGUoc291cmNlOiBNYW5hZ2VkT2JqZWN0IHwgUGFnZUNvbnRyb2xsZXIpOiBib29sZWFuIHtcblx0Y29uc3QgbWFuYWdlZE9iamVjdCA9IHNvdXJjZS5pc0E8UGFnZUNvbnRyb2xsZXI+KFwic2FwLmZlLmNvcmUuUGFnZUNvbnRyb2xsZXJcIikgPyBzb3VyY2UuZ2V0VmlldygpIDogc291cmNlO1xuXHRyZXR1cm4gbWFuYWdlZE9iamVjdC5nZXRCaW5kaW5nQ29udGV4dChcInVpXCIpPy5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpO1xufVxuXG5jb25zdCBDb21tb25VdGlscyA9IHtcblx0SU5MSU5FRURJVF9VUERBVEVHUk9VUElEOiBcImlubGluZVwiLFxuXHRmaXJlQnV0dG9uUHJlc3M6IGZuRmlyZUJ1dHRvblByZXNzLFxuXHRnZXRUYXJnZXRWaWV3OiBnZXRUYXJnZXRWaWV3LFxuXHRnZXRDdXJyZW50UGFnZVZpZXc6IGdldEN1cnJlbnRQYWdlVmlldyxcblx0aGFzVHJhbnNpZW50Q29udGV4dDogZm5IYXNUcmFuc2llbnRDb250ZXh0cyxcblx0dXBkYXRlUmVsYXRlZEFwcHNEZXRhaWxzOiBmblVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyxcblx0Z2V0QXBwQ29tcG9uZW50OiBnZXRBcHBDb21wb25lbnQsXG5cdGdldENvbnRleHRQYXRoUHJvcGVydGllczogZm5HZXRDb250ZXh0UGF0aFByb3BlcnRpZXMsXG5cdGdldFBhcmFtZXRlckluZm86IGdldFBhcmFtZXRlckluZm8sXG5cdHVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5OiBmblVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5LFxuXHRnZXRFbnRpdHlTZXROYW1lOiBnZXRFbnRpdHlTZXROYW1lLFxuXHRnZXRBY3Rpb25QYXRoOiBnZXRBY3Rpb25QYXRoLFxuXHRjb21wdXRlRGlzcGxheU1vZGU6IGNvbXB1dGVEaXNwbGF5TW9kZSxcblx0aXNTdGlja3lFZGl0TW9kZTogaXNTdGlja3lFZGl0TW9kZSxcblx0Z2V0T3BlcmF0b3JzRm9yR3VpZFByb3BlcnR5OiBnZXRPcGVyYXRvcnNGb3JHdWlkUHJvcGVydHksXG5cdGFkZFBhZ2VDb250ZXh0VG9TZWxlY3Rpb25WYXJpYW50OiBhZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudCxcblx0c2V0VXNlckRlZmF1bHRzOiBzZXRVc2VyRGVmYXVsdHMsXG5cdGdldElCTkFjdGlvbnM6IGZuR2V0SUJOQWN0aW9ucyxcblx0Z2V0SGVhZGVyRmFjZXRJdGVtQ29uZmlnRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uOiBnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24sXG5cdGdldFNlbWFudGljT2JqZWN0TWFwcGluZzogZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nLFxuXHRzZXRTZW1hbnRpY09iamVjdE1hcHBpbmdzOiBzZXRTZW1hbnRpY09iamVjdE1hcHBpbmdzLFxuXHRnZXRTZW1hbnRpY09iamVjdFByb21pc2U6IGZuR2V0U2VtYW50aWNPYmplY3RQcm9taXNlLFxuXHRnZXRTZW1hbnRpY09iamVjdHNGcm9tUGF0aDogZm5HZXRTZW1hbnRpY09iamVjdHNGcm9tUGF0aCxcblx0d2FpdEZvckNvbnRleHRSZXF1ZXN0ZWQ6IHdhaXRGb3JDb250ZXh0UmVxdWVzdGVkLFxuXHRnZXRTcGVjaWZpY0FsbG93ZWRFeHByZXNzaW9uOiBnZXRTcGVjaWZpY0FsbG93ZWRFeHByZXNzaW9uLFxuXHRnZXRBZGRpdGlvbmFsUGFyYW1zRm9yQ3JlYXRlOiBnZXRBZGRpdGlvbmFsUGFyYW1zRm9yQ3JlYXRlLFxuXHRyZXF1ZXN0U2luZ2xldG9uUHJvcGVydHk6IHJlcXVlc3RTaW5nbGV0b25Qcm9wZXJ0eSxcblx0dGVtcGxhdGVDb250cm9sRnJhZ21lbnQ6IHRlbXBsYXRlQ29udHJvbEZyYWdtZW50LFxuXHRGaWx0ZXJSZXN0cmljdGlvbnM6IHtcblx0XHRSRVFVSVJFRF9QUk9QRVJUSUVTOiBcIlJlcXVpcmVkUHJvcGVydGllc1wiLFxuXHRcdE5PTl9GSUxURVJBQkxFX1BST1BFUlRJRVM6IFwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXNcIixcblx0XHRBTExPV0VEX0VYUFJFU1NJT05TOiBcIkZpbHRlckFsbG93ZWRFeHByZXNzaW9uc1wiXG5cdH0sXG5cdEFsbG93ZWRFeHByZXNzaW9uc1ByaW86IFtcIlNpbmdsZVZhbHVlXCIsIFwiTXVsdGlWYWx1ZVwiLCBcIlNpbmdsZVJhbmdlXCIsIFwiTXVsdGlSYW5nZVwiLCBcIlNlYXJjaEV4cHJlc3Npb25cIiwgXCJNdWx0aVJhbmdlT3JTZWFyY2hFeHByZXNzaW9uXCJdLFxuXHRub3JtYWxpemVTZWFyY2hUZXJtOiBub3JtYWxpemVTZWFyY2hUZXJtLFxuXHRzZXRDb250ZXh0c0Jhc2VkT25PcGVyYXRpb25BdmFpbGFibGU6IHNldENvbnRleHRzQmFzZWRPbk9wZXJhdGlvbkF2YWlsYWJsZSxcblx0c2V0RHluYW1pY0FjdGlvbkNvbnRleHRzOiBzZXREeW5hbWljQWN0aW9uQ29udGV4dHMsXG5cdHJlcXVlc3RQcm9wZXJ0eTogcmVxdWVzdFByb3BlcnR5LFxuXHRnZXRQYXJhbWV0ZXJQYXRoOiBnZXRQYXJhbWV0ZXJQYXRoLFxuXHRnZXRSZWxhdGVkQXBwc01lbnVJdGVtczogX2dldFJlbGF0ZWRBcHBzTWVudUl0ZW1zLFxuXHRnZXRUcmFuc2xhdGVkVGV4dEZyb21FeHBCaW5kaW5nU3RyaW5nOiBfZm50cmFuc2xhdGVkVGV4dEZyb21FeHBCaW5kaW5nU3RyaW5nLFxuXHR1cGRhdGVSZWxhdGVBcHBzTW9kZWw6IHVwZGF0ZVJlbGF0ZUFwcHNNb2RlbCxcblx0Z2V0U2VtYW50aWNPYmplY3RBbm5vdGF0aW9uczogX2dldFNlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMsXG5cdGdldEZpbHRlcnNGcm9tQW5ub3RhdGlvbjogZ2V0RmlsdGVyc0Zyb21Bbm5vdGF0aW9uLFxuXHRjcmVhdGVSb290Q29udGV4dDogY3JlYXRlUm9vdENvbnRleHQsXG5cdGZpbmRPckNyZWF0ZVJvb3RDb250ZXh0LFxuXHR1cGRhdGVNZW51QnV0dG9uVmlzaWJsaXR5OiB1cGRhdGVNZW51QnV0dG9uVmlzaWJsaXR5LFxuXHRpc1NtYWxsRGV2aWNlLFxuXHRnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yUGF0aCxcblx0Z2V0SXNFZGl0YWJsZTogZ2V0SXNFZGl0YWJsZVxufTtcblxuZXhwb3J0IGRlZmF1bHQgQ29tbW9uVXRpbHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQW1FQSxTQUFTQSxtQkFBbUJBLENBQUNDLFdBQStCLEVBQXNCO0lBQ2pGLElBQUksQ0FBQ0EsV0FBVyxFQUFFO01BQ2pCLE9BQU9DLFNBQVM7SUFDakI7O0lBRUE7SUFDQSxJQUFJRCxXQUFXLEtBQUssSUFBSSxFQUFFO01BQ3pCLE9BQU8sR0FBRyxHQUFHQSxXQUFXLEdBQUcsR0FBRztJQUMvQjtJQUVBLE1BQU1FLG1CQUFtQixHQUFHRixXQUFXLENBQUNHLE9BQU8sQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNqRSxJQUFJRCxtQkFBbUIsS0FBSyxFQUFFLElBQUlBLG1CQUFtQixLQUFLLEdBQUcsRUFBRTtNQUM5RCxPQUFPRCxTQUFTO0lBQ2pCO0lBQ0EsT0FBT0MsbUJBQW1CLENBQUNFLElBQUksQ0FBQyxDQUFDO0VBQ2xDO0VBRUEsZUFBZUMsdUJBQXVCQSxDQUFDQyxjQUE4QixFQUFpQjtJQUNyRixNQUFNQyxLQUFLLEdBQUdELGNBQWMsQ0FBQ0UsUUFBUSxDQUFDLENBQUM7SUFDdkMsTUFBTUMsU0FBUyxHQUFHRixLQUFLLENBQUNHLFlBQVksQ0FBQyxDQUFDO0lBQ3RDLE1BQU1DLFVBQVUsR0FBR0YsU0FBUyxDQUFDRyxXQUFXLENBQUNOLGNBQWMsQ0FBQ08sT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNsRSxNQUFNQyxTQUFTLEdBQUdDLGtCQUFrQixDQUFDQywyQkFBMkIsQ0FBQ1AsU0FBUyxDQUFDUSxVQUFVLENBQUNOLFVBQVUsQ0FBQyxDQUFDO0lBQ2xHLE1BQU1MLGNBQWMsQ0FBQ1ksZUFBZSxDQUFDSixTQUFTLENBQUNLLGdCQUFnQixDQUFDQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUVDLElBQUksQ0FBQztFQUMvRTtFQUVBLFNB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
|