@sapui5/sap.fe.test 1.134.0 → 1.135.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/test/.library +1 -1
- package/src/sap/fe/test/AppStateAdapter.js +1 -1
- package/src/sap/fe/test/CollaborationClient.js +1 -1
- package/src/sap/fe/test/FeMocks.js +1 -1
- package/src/sap/fe/test/JestFlexibilityHelper.js +1 -1
- package/src/sap/fe/test/JestTemplatingHelper.js +14 -9
- package/src/sap/fe/test/JestTemplatingHelper.tsx +16 -7
- package/src/sap/fe/test/UI5MockHelper.js +1 -1
- package/src/sap/fe/test/api/CollaborationAPI.js +1 -1
- package/src/sap/fe/test/api/EditState.js +1 -1
- package/src/sap/fe/test/api/HeaderAssertions.js +20 -1
- package/src/sap/fe/test/api/TableAssertions.js +1 -0
- package/src/sap/fe/test/builder/MacroFieldBuilder.js +1 -1
- package/src/sap/fe/test/builder/MdcTableBuilder.js +1 -1
- package/src/sap/fe/test/builder/OverflowToolbarBuilder.js +2 -1
- package/src/sap/fe/test/internal/ConsoleErrorChecker.js +1 -1
- package/src/sap/fe/test/library.js +2 -2
package/package.json
CHANGED
package/src/sap/fe/test/.library
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
-
* (c) Copyright 2009-
|
|
3
|
+
* (c) Copyright 2009-2025 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
5
|
sap.ui.define(["sap/fe/core/controllerextensions/collaboration/CollaborationCommon", "sap/fe/test/api/CollaborationAPI", "sap/ui/test/OpaBuilder"], function (CollaborationCommon, CollaborationAPI, OpaBuilder) {
|
|
6
6
|
"use strict";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
-
* (c) Copyright 2009-
|
|
3
|
+
* (c) Copyright 2009-2025 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
5
|
sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/PageController", "sap/fe/core/controllerextensions/EditFlow", "sap/ui/mdc/FilterBar"], function (generic, PageController, EditFlow, FilterBar) {
|
|
6
6
|
"use strict";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
-
* (c) Copyright 2009-
|
|
3
|
+
* (c) Copyright 2009-2025 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
5
|
sap.ui.define(["@sap/cds-compiler", "fs", "htmljs-parser", "path", "sap/base/Log", "sap/base/util/LoaderExtensions", "sap/base/util/uid", "sap/fe/base/jsx-runtime/jsx", "sap/fe/core/AppComponent", "sap/fe/core/PageController", "sap/fe/core/TemplateModel", "sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor", "sap/fe/core/converters/ConverterContext", "sap/fe/core/converters/ManifestWrapper", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/services/SideEffectsServiceFactory", "sap/fe/test/UI5MockHelper", "sap/m/Page", "sap/ui/base/BindingParser", "sap/ui/base/ManagedObject", "sap/ui/base/ManagedObjectMetadata", "sap/ui/core/Component", "sap/ui/core/InvisibleText", "sap/ui/core/XMLTemplateProcessor", "sap/ui/core/util/XMLPreprocessor", "sap/ui/core/util/serializer/Serializer", "sap/ui/fl/Utils", "sap/ui/fl/apply/_internal/flexState/FlexState", "sap/ui/fl/apply/_internal/flexState/Loader", "sap/ui/fl/apply/_internal/preprocessors/XmlPreprocessor", "sap/ui/fl/initial/_internal/Storage", "sap/ui/model/json/JSONModel", "sap/ui/model/odata/v4/ODataMetaModel", "sap/ui/model/odata/v4/lib/_MetadataRequestor", "xpath", "./JestFlexibilityHelper", "sap/fe/base/jsx-runtime/jsx"], function (compiler, fs, htmljs_parser, path, Log, LoaderExtensions, uid, jsx, AppComponent, PageController, TemplateModel, BuildingBlockTemplateProcessor, ConverterContext, ManifestWrapper, MetaModelConverter, SideEffectsFactory, UI5MockHelper, Page, BindingParser, ManagedObject, ManagedObjectMetadata, Component, InvisibleText, XMLTemplateProcessor, XMLPreprocessor, Serializer, Utils, FlexState, Loader, XmlPreprocessor, AppStorage, JSONModel, ODataMetaModel, _MetadataRequestor, xpath, JestFlexibilityHelper, _jsx) {
|
|
6
6
|
"use strict";
|
|
@@ -777,8 +777,10 @@ sap.ui.define(["@sap/cds-compiler", "fs", "htmljs-parser", "path", "sap/base/Log
|
|
|
777
777
|
const namespaceAlias = getNamespaceAlias(nameFull);
|
|
778
778
|
controlDetail += `<${namespaceAlias}:${name}\n`;
|
|
779
779
|
if (!definedNamespaces[namespaceAlias]) {
|
|
780
|
-
definedNamespaces[namespaceAlias] =
|
|
781
|
-
controlDetail += `${getTab()}xmlns:${namespaceAlias}="${nameSpaceMap[namespaceAlias]}"`;
|
|
780
|
+
definedNamespaces[namespaceAlias] = 1;
|
|
781
|
+
controlDetail += `${getTab()}xmlns:${namespaceAlias}="${nameSpaceMap[namespaceAlias]}"\n`;
|
|
782
|
+
} else {
|
|
783
|
+
definedNamespaces[namespaceAlias]++;
|
|
782
784
|
}
|
|
783
785
|
return controlDetail;
|
|
784
786
|
},
|
|
@@ -793,6 +795,7 @@ sap.ui.define(["@sap/cds-compiler", "fs", "htmljs-parser", "path", "sap/base/Log
|
|
|
793
795
|
hasAggregation = true;
|
|
794
796
|
}
|
|
795
797
|
}
|
|
798
|
+
definedNamespaces[namespaceAlias]--;
|
|
796
799
|
if (hasAggregation) {
|
|
797
800
|
return `</${namespaceAlias}:${name}>`;
|
|
798
801
|
} else {
|
|
@@ -806,7 +809,7 @@ sap.ui.define(["@sap/cds-compiler", "fs", "htmljs-parser", "path", "sap/base/Log
|
|
|
806
809
|
if (!ManagedObjectMetadata.isGeneratedId(id)) {
|
|
807
810
|
data = `id="${id}"`;
|
|
808
811
|
}
|
|
809
|
-
let keys = Object.keys(control.mProperties).concat(Object.keys(control.mBindingInfos)).concat(Object.keys(control.mAssociations)).concat(Object.keys(control.mEventRegistry));
|
|
812
|
+
let keys = Object.keys(control.mProperties).filter(propName => propName !== "id").concat(Object.keys(control.mBindingInfos)).concat(Object.keys(control.mAssociations)).concat(Object.keys(control.mEventRegistry));
|
|
810
813
|
keys = keys.sort((a, b) => a.localeCompare(b));
|
|
811
814
|
const uniqueKeys = new Set(keys);
|
|
812
815
|
keys = Array.from(uniqueKeys);
|
|
@@ -831,10 +834,11 @@ sap.ui.define(["@sap/cds-compiler", "fs", "htmljs-parser", "path", "sap/base/Log
|
|
|
831
834
|
}
|
|
832
835
|
} else if (control.mProperties.hasOwnProperty(oControlKey) && control.mProperties[oControlKey] !== undefined) {
|
|
833
836
|
let propertyValue = control.mProperties[oControlKey];
|
|
834
|
-
|
|
835
|
-
|
|
837
|
+
if (typeof propertyValue === "string") {
|
|
838
|
+
propertyValue = propertyValue.replace(UID, "uid--id").replace(CONTROLID, "id").replace(/"/g, """);
|
|
839
|
+
}
|
|
836
840
|
try {
|
|
837
|
-
propertyValue = typeof propertyValue === "object" ? JSON.stringify(propertyValue) : propertyValue;
|
|
841
|
+
propertyValue = typeof propertyValue === "object" ? JSON.stringify(propertyValue).replace(/"/g, """) : propertyValue;
|
|
838
842
|
} catch (e) {
|
|
839
843
|
// Stringify may fail for circular references but it's not the end of the world
|
|
840
844
|
}
|
|
@@ -1023,7 +1027,8 @@ sap.ui.define(["@sap/cds-compiler", "fs", "htmljs-parser", "path", "sap/base/Log
|
|
|
1023
1027
|
target: "Default"
|
|
1024
1028
|
}]
|
|
1025
1029
|
}
|
|
1026
|
-
}
|
|
1030
|
+
},
|
|
1031
|
+
"sap.fe": options?.feManifestSettings ?? {}
|
|
1027
1032
|
}
|
|
1028
1033
|
}
|
|
1029
1034
|
});
|
|
@@ -1083,4 +1088,4 @@ sap.ui.define(["@sap/cds-compiler", "fs", "htmljs-parser", "path", "sap/base/Log
|
|
|
1083
1088
|
_exports.keepBindingStringForTest = keepBindingStringForTest;
|
|
1084
1089
|
return _exports;
|
|
1085
1090
|
}, false);
|
|
1086
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJMb2ciLCJzZXRMZXZlbCIsImplc3QiLCJzZXRUaW1lb3V0IiwibmFtZVNwYWNlTWFwIiwibWFjcm8iLCJtYWNyb1NoYXJlIiwibWFjcm9zIiwiZmVCQiIsIm1hY3JvRmllbGQiLCJtYWNyb2RhdGEiLCJsb2ciLCJjdXN0b21EYXRhIiwiY29udHJvbCIsImNvbnRyb2xzIiwiY29yZSIsImR0IiwibSIsImYiLCJmbCIsImludGVybmFsTWFjcm8iLCJtZGMiLCJhY3Rpb250b29sYmFyIiwibWRjRmllbGQiLCJtZGNUYWJsZSIsInUiLCJ1eGFwIiwibWFjcm9NaWNyb0NoYXJ0IiwibWljcm9DaGFydCIsIm1hY3JvVGFibGUiLCJtZGN2YyIsIm1kY3YiLCJ2YWx1ZUhlbHAiLCJjb250ZW50U3dpdGNoZXIiLCJmaWx0ZXJCYXIiLCJmYkNvbnRyb2xzIiwiZHJhZnRJbmRpY2F0b3IiLCJyZXZlc2VOYW1lc3BhY2VNYXAiLCJPYmplY3QiLCJrZXlzIiwicmVkdWNlIiwicmV2ZXJzZU1hcCIsImN1cnJlbnROYW1lIiwic2VsZWN0IiwieHBhdGgiLCJ1c2VOYW1lc3BhY2VzIiwiZGVmYXVsdEZha2VTaWRlRWZmZWN0U2VydmljZSIsImNvbXB1dGVGaWVsZEdyb3VwSWRzIiwiX2dldFRlbXBsYXRlZFNlbGVjdG9yIiwieG1sZG9tIiwic2VsZWN0b3IiLCJyb290UGF0aCIsIm5vZGVOYW1lIiwic3RhcnRzV2l0aCIsIl9idWlsZFByZVByb2Nlc3NvclNldHRpbmdzIiwic01ldGFkYXRhVXJsIiwibUJpbmRpbmdDb250ZXh0cyIsIm1Nb2RlbHMiLCJmYWtlU2lkZUVmZmVjdFNlcnZpY2UiLCJvTWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiaGFzT3duUHJvcGVydHkiLCJhc3NpZ24iLCJjb252ZXJ0ZXJDb250ZXh0IiwiVGVtcGxhdGVNb2RlbCIsImZvckVhY2giLCJzTW9kZWxOYW1lIiwiaXNUZW1wbGF0ZU1vZGVsIiwiZGF0YSIsInNldHRpbmdzIiwibW9kZWxzIiwibWV0YU1vZGVsIiwiYmluZGluZ0NvbnRleHRzIiwiYXBwQ29tcG9uZW50IiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZm4iLCJnZXREaWFnbm9zdGljcyIsInVuZGVmaW5lZCIsImdldFNoZWxsU2VydmljZXMiLCJnZXRNYW5pZmVzdEVudHJ5IiwibW9ja1JldHVyblZhbHVlIiwic0tleSIsImV4cGVjdCIsImdldE9iamVjdCIsInRvQmVEZWZpbmVkIiwib01vZGVsIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJfbG9hZFJlc291cmNlVmlldyIsInZpZXdOYW1lIiwibmFtZSIsInJlcGxhY2UiLCJ2aWV3IiwiTG9hZGVyRXh0ZW5zaW9ucyIsImxvYWRSZXNvdXJjZSIsImRvY3VtZW50RWxlbWVudCIsInJ1blhQYXRoUXVlcnkiLCJleHRlbmQiLCJ0b0hhdmVDb250cm9sIiwibm9kZXMiLCJtZXNzYWdlIiwib3V0cHV0WG1sIiwic2VyaWFsaXplWE1MIiwicGFzcyIsImxlbmd0aCIsInRvTm90SGF2ZUNvbnRyb2wiLCJ0b0hhdmVUZW1wbGF0aW5nRXJyb3JzIiwieG1sIiwieG1sVGV4dCIsImJhc2U2NEVudHJpZXMiLCJtYXRjaCIsImVycm9yTWVzc2FnZXMiLCJtYXAiLCJhdG9iIiwic2xpY2UiLCJqb2luIiwiX2V4cG9ydHMiLCJmb3JtYXRCdWlsZGluZ0Jsb2NrWE1MIiwieG1sU3RyaW5nIiwiQXJyYXkiLCJpc0FycmF5IiwiZm9ybWF0WE1MIiwiZ2V0Q29udHJvbEF0dHJpYnV0ZSIsImNvbnRyb2xTZWxlY3RvciIsImF0dHJpYnV0ZU5hbWUiLCJ4bWxEb20iLCJzZXJpYWxpemVyIiwid2luZG93IiwiWE1MU2VyaWFsaXplciIsIm5vZGUiLCJzZXJpYWxpemVUb1N0cmluZyIsIlNUQVJUIiwiRU5EIiwiVUlEIiwiVUlEMiIsImxpbmVzIiwiY3VycmVudExpbmUiLCJsZXZlbCIsImF0dHJpYnV0ZXMiLCJuZXdsaW5lIiwicHVzaCIsInJlcGVhdCIsImFwcGVuZEF0dHJpYnV0ZXMiLCJzb3J0IiwiYSIsImIiLCJsb2NhbGVDb21wYXJlIiwiaW5jbHVkZXMiLCJhdHRyaWJ1dGUiLCJ2YWx1ZSIsImFwcGVuZCIsInBhcnNlciIsInJlYWQiLCJjcmVhdGVQYXJzZXIiLCJvbk9wZW5UYWdTdGFydCIsIm9uT3BlblRhZ05hbWUiLCJvbkF0dHJOYW1lIiwidW5zaGlmdCIsIm9uQXR0clZhbHVlIiwib25PcGVuVGFnRW5kIiwic2VsZkNsb3NlZCIsIm9uQ2xvc2VUYWdTdGFydCIsIm9uQ2xvc2VUYWdOYW1lIiwib25DbG9zZVRhZ0VuZCIsInBhcnNlIiwidHJpbSIsImNvbXBpbGVDRFMiLCJjZHNVcmwiLCJvcHRpb25zIiwiYXJndW1lbnRzIiwiY2RzU3RyaW5nIiwiZnMiLCJyZWFkRmlsZVN5bmMiLCJlZG14Q29udGVudCIsImNkczJlZG14IiwiZGlyIiwicGF0aCIsInJlc29sdmUiLCJhbGxPcHRpb25zIiwiZW50cmllcyIsImVkbXhGaWxlTmFtZSIsImZpbGVuYW1lIiwiX3JlZiIsIm9wdGlvbktleSIsIm9wdGlvblZhbHVlIiwidG9TdHJpbmciLCJiYXNlbmFtZSIsImVkbXhGaWxlUGF0aCIsIm1rZGlyU3luYyIsInJlY3Vyc2l2ZSIsIndyaXRlRmlsZVN5bmMiLCJjZHMiLCJzZXJ2aWNlIiwic291cmNlcyIsInJlcXVpcmUiLCJjc24iLCJjb21waWxlciIsImNvbXBpbGVTb3VyY2VzIiwiZWRteE9wdGlvbnMiLCJvZGF0YUZvcmVpZ25LZXlzIiwib2RhdGFGb3JtYXQiLCJvZGF0YUNvbnRhaW5tZW50IiwiZWRteCIsInRvIiwiRXJyb3IiLCJnZXRGYWtlU2lkZUVmZmVjdHNTZXJ2aWNlIiwiY2xhc3NOYW1lT0RhdGFNb2RlbCIsInNjb3BlT2JqZWN0IiwiZ2V0TW9kZWwiLCJpc0EiLCJnZXRTZXJ2aWNlVXJsIiwiZ2V0U2VydmljZSIsImdldENhcGFiaWxpdGllcyIsInNlcnZpY2VJbnN0YW5jZSIsIlNpZGVFZmZlY3RzRmFjdG9yeSIsImNyZWF0ZUluc3RhbmNlIiwic2NvcGVUeXBlIiwiZ2V0SW50ZXJmYWNlIiwiZ2V0RmFrZURpYWdub3N0aWNzIiwiaXNzdWVzIiwiYWRkSXNzdWUiLCJpc3N1ZUNhdGVnb3J5IiwiaXNzdWVTZXZlcml0eSIsImRldGFpbHMiLCJnZXRJc3N1ZXMiLCJjaGVja0lmSXNzdWVFeGlzdHMiLCJmaW5kIiwiaXNzdWUiLCJnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yVGVzdCIsIm1hbmlmZXN0U2V0dGluZ3MiLCJjb252ZXJ0ZWRUeXBlcyIsImNvbnZlcnRUeXBlcyIsImRhdGFNb2RlbFBhdGgiLCJjb250ZXh0UGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImVudGl0eVNldCIsIkNvbnZlcnRlckNvbnRleHQiLCJNYW5pZmVzdFdyYXBwZXIiLCJtZXRhTW9kZWxDYWNoZSIsIm9SZXF1ZXN0b3IiLCJfTWV0YWRhdGFSZXF1ZXN0b3IiLCJjcmVhdGUiLCJPRGF0YU1ldGFNb2RlbCIsIl9yZXF1ZXN0QW5ub3RhdGlvbkNoYW5nZXMiLCJmZXRjaEVudGl0eUNvbnRhaW5lciIsImdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JQcm9wZXJ0eSIsInByb3BlcnR5IiwidGFyZ2V0UGF0aCIsInN0YXJ0aW5nRW50aXR5U2V0IiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJ0YXJnZXRPYmplY3QiLCJ0YXJnZXRFbnRpdHlTZXQiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiZW50aXR5VHlwZSIsImNvbnRleHRMb2NhdGlvbiIsImV2YWx1YXRlQmluZGluZyIsImJpbmRpbmdTdHJpbmciLCJiaW5kaW5nRWxlbWVudCIsIkJpbmRpbmdQYXJzZXIiLCJjb21wbGV4UGFyc2VyIiwiX2xlbiIsImFyZ3MiLCJfa2V5IiwiZm9ybWF0dGVyIiwiYXBwbHkiLCJldmFsdWF0ZUJpbmRpbmdXaXRoTW9kZWwiLCJtb2RlbENvbnRlbnQiLCJuYW1lZE1vZGVsc0NvbnRlbnQiLCJ0ZXh0IiwiSW52aXNpYmxlVGV4dCIsImJpbmRQcm9wZXJ0eSIsImRlZmF1bHRNb2RlbCIsIkpTT05Nb2RlbCIsInNldE1vZGVsIiwic2V0QmluZGluZ0NvbnRleHQiLCJjb250ZW50IiwibW9kZWwiLCJnZXRUZXh0IiwiVEVTVFZJRVdJRCIsImFwcGx5RmxleENoYW5nZXMiLCJmbGV4Q2hhbmdlcyIsInJlc3VsdFhNTCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJpZCIsImNoYW5nZXMiLCJjcmVhdGVGbGV4aWJpbGl0eUNoYW5nZXNPYmplY3QiLCJhcHBJZCIsIm9NYW5pZmVzdCIsInR5cGUiLCJjcm9zc05hdmlnYXRpb24iLCJvdXRib3VuZHMiLCJvQXBwQ29tcG9uZW50IiwiZ2V0Q29tcG9uZW50RGF0YSIsImdldE1hbmlmZXN0T2JqZWN0IiwiZ2V0RW50cnkiLCJnZXRMb2NhbElkIiwic0lkIiwic3B5T24iLCJBcHBTdG9yYWdlIiwiUHJvbWlzZSIsIkxvYWRlciIsIkNvbXBvbmVudCIsIlV0aWxzIiwiRmxleFN0YXRlIiwiaW5pdGlhbGl6ZSIsImNvbXBvbmVudElkIiwiWG1sUHJlcHJvY2Vzc29yIiwicHJvY2VzcyIsImNoYW5nZXNBcHBsaWVkIiwiZ2V0Q2hhbmdlc0Zyb21YTUwiLCJ0b0JlIiwidmFyaWFudERlcGVuZGVudENvbnRyb2xDaGFuZ2VzIiwiZmxhdE1hcCIsImUiLCJmaWx0ZXIiLCJhdHRyIiwiZ2V0VGVtcGxhdGluZ1Jlc3VsdCIsInhtbElucHV0IiwiY3JlYXRlTW9ja1Jlc291cmNlTW9kZWwiLCJ0ZW1wbGF0ZWRYbWwiLCJET01QYXJzZXIiLCJ4bWxEb2MiLCJwYXJzZUZyb21TdHJpbmciLCJvUHJlcHJvY2Vzc29yU2V0dGluZ3MiLCJYTUxQcmVwcm9jZXNzb3IiLCJmaXJzdEVsZW1lbnRDaGlsZCIsImdldFRlbXBsYXRlZFhNTCIsImpzeCIsImRlZmluZVhNTE5hbWVzcGFjZU1hcCIsInRlbXBsYXRlZFhNTCIsInNlcmlhbGllZFhNTCIsIm5vdCIsInByb2Nlc3NWaWV3Iiwib1ZpZXdEb2N1bWVudCIsIm9QcmVwcm9jZXNzZWRWaWV3IiwiYXNFbGVtZW50IiwiYXNTdHJpbmciLCJvdXRlckhUTUwiLCJwcm9jZXNzRnJhZ21lbnQiLCJ0ZXN0RGF0YSIsImlucHV0WG1sIiwiaW5wdXREb2MiLCJqc29uTW9kZWwiLCJzZXREYXRhIiwicmVzdWx0RG9jIiwiZnJhZ21lbnRzIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJmcmFnbWVudCIsImlubmVySFRNTCIsInhtbFJlc3VsdCIsImNoaWxkcmVuIiwic2VyaWFsaXplQ29udHJvbCIsImNvbnRyb2xUb1NlcmlhbGl6ZSIsInNob3dDdXN0b21TdHlsZUNsYXNzZXMiLCJ0YWJDb3VudCIsIkNPTlRST0xJRCIsImdldFRhYiIsInRvQWRkIiwidGFiIiwiaSIsInNlcmlhbGl6ZURlbGVnYXRlIiwic3RhcnQiLCJzQWdncmVnYXRpb25OYW1lIiwiY29udHJvbERldGFpbCIsImdldFBhcmVudCIsImluZGV4SW5QYXJlbnQiLCJnZXRBZ2dyZWdhdGlvbiIsImluZGV4T2YiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJlbmQiLCJtaWRkbGUiLCJnZXRJZCIsIk1hbmFnZWRPYmplY3RNZXRhZGF0YSIsImlzR2VuZXJhdGVkSWQiLCJvQ29udHJvbEtleSIsIm1Qcm9wZXJ0aWVzIiwicHJvcGVydHlWYWx1ZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJtQmluZGluZ0luZm9zIiwiYmluZGluZ0RldGFpbCIsIm9PdXRwdXRGb3JtYXQiLCJiaW5kaW5nIiwibUFzc29jaWF0aW9ucyIsImFzc29jaWF0aW9uVmFsdWUiLCJhc3NvY2lhdGlvblZhbHVlRWxlbWVudCIsImFDdXN0b21TdHlsZUNsYXNzZXMiLCJtRXZlbnRSZWdpc3RyeSIsInN0YXJ0QWdncmVnYXRpb24iLCJzTmFtZSIsIm91dCIsImVuZEFnZ3JlZ2F0aW9uIiwiY29udHJvbFRvUmVuZGVyIiwiU2VyaWFsaXplciIsInNlcmlhbGl6ZSIsInNlcmlhbGl6ZUNvbnRyb2xBc1hNTCIsImRlZmluZWROYW1lc3BhY2VzIiwiZ2V0TmFtZXNwYWNlQWxpYXMiLCJjbGFzc05hbWUiLCJuYW1lc1NwbGl0Iiwic3BsaXQiLCJuYW1lc3BhY2UiLCJuYW1lc3BhY2VBbGlhcyIsIm5hbWVGdWxsIiwiaGFzQWdncmVnYXRpb24iLCJtQWdncmVnYXRpb25zS2V5IiwibUFnZ3JlZ2F0aW9ucyIsImNvbmNhdCIsInVuaXF1ZUtleXMiLCJTZXQiLCJmcm9tIiwidGVtcGxhdGUiLCJmRnVuY3Rpb24iLCJvdXRYTUwiLCJjcmVhdGVBd2FpdGVyIiwiZm5SZXNvbHZlIiwibXlQcm9taXNlIiwicHJvbWlzZSIsInJlbmRlckJ1aWxkaW5nQmxvY2tXaXRoTW9kZWxzIiwiYnVpbGRpbmdCbG9jayIsIk1hbmFnZWRPYmplY3QiLCJydW5XaXRoUHJlcHJvY2Vzc29ycyIsImdldENvbnRlbnQiLCJjb250cm9sU2V0dGluZ3MiLCJyZWdpc3Rlck1vY2tGcmFnbWVudHMiLCJfbGVuMiIsIl9rZXkyIiwib3JpZ2luYWxMb2FkVGVtcGxhdGUiLCJYTUxUZW1wbGF0ZVByb2Nlc3NvciIsImxvYWRUZW1wbGF0ZVByb21pc2UiLCJsb2FkVGVtcGxhdGVTdHViIiwibW9ja0ltcGxlbWVudGF0aW9uIiwidGVtcGxhdGVOYW1lIiwiZXh0ZW5zaW9uIiwicGFyc2VYTUxTdHJpbmciLCJpbml0aWFsaXplQXBwQ29tcG9uZW50Iiwidmlld0xldmVsIiwiY2RzRmlsZSIsIl9fZGlybmFtZSIsImd1aWQiLCJ1aWQiLCJjZHNDb250ZW50Iiwic2FwIiwicmVnaXN0ZXJGYWtlRnJhZ21lbnQiLCJEZWZhdWx0UGFnZUNvbnRlbnQiLCJfUGFnZUNvbnRyb2xsZXIiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsInJlbmRlciIsIl9qc3giLCJQYWdlIiwiUGFnZUNvbnRyb2xsZXIiLCJ1aSIsImRlZmluZSIsIl9BcHBDb21wb25lbnQiLCJBcHBDb21wb25lbnQiLCJtZXRhZGF0YSIsIm1hbmlmZXN0IiwiZGF0YVNvdXJjZXMiLCJtYWluU2VydmljZSIsInVyaSIsIm9kYXRhVmVyc2lvbiIsImRhdGFTb3VyY2UiLCJyb3V0aW5nIiwidGFyZ2V0cyIsIkRlZmF1bHQiLCJtYWluQ29udGV4dFBhdGgiLCJ2aWV3VHlwZSIsInZpZXdDb250ZW50IiwicGFnZUNvbnRlbnQiLCJyb3V0ZXMiLCJwYXR0ZXJuIiwidGFyZ2V0IiwibW9ja0FwcENvbXBvbmVudCIsImluaXRpYWxpemVkIiwidiIsImdldFJvdXRlciIsImdldFRhcmdldCIsImxvYWQiLCJ0ZW1wbGF0ZUNvbXBvbmVudCIsIm9iamVjdCIsImZpbmRFbGVtZW50IiwiY29sbGVjdGlvbiIsImVsZW1lbnQiLCJpdGVtIiwid2FpdEZvckV2ZW50IiwiZXZlbnROYW1lIiwiYXR0YWNoRXZlbnRPbmNlIiwiZXZlbnQiLCJrZWVwQmluZGluZ1N0cmluZ0ZvclRlc3QiLCJlbmFibGVkIiwiX2tlZXBCaW5kaW5nU3RyaW5ncyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiSmVzdFRlbXBsYXRpbmdIZWxwZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQW55QW5ub3RhdGlvbiwgQ29udmVydGVkTWV0YWRhdGEsIEVudGl0eVNldCwgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBjb21waWxlciBmcm9tIFwiQHNhcC9jZHMtY29tcGlsZXJcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0IHR5cGUgeyBSYW5nZSwgUmFuZ2VzIH0gZnJvbSBcImh0bWxqcy1wYXJzZXJcIjtcbmltcG9ydCB7IGNyZWF0ZVBhcnNlciB9IGZyb20gXCJodG1sanMtcGFyc2VyXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBMb2FkZXJFeHRlbnNpb25zIGZyb20gXCJzYXAvYmFzZS91dGlsL0xvYWRlckV4dGVuc2lvbnNcIjtcbmltcG9ydCB1aWQgZnJvbSBcInNhcC9iYXNlL3V0aWwvdWlkXCI7XG5pbXBvcnQganN4IGZyb20gXCJzYXAvZmUvYmFzZS9qc3gtcnVudGltZS9qc3hcIjtcbmltcG9ydCBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgVGVtcGxhdGVDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlQ29tcG9uZW50XCI7XG5pbXBvcnQgVGVtcGxhdGVNb2RlbCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVNb2RlbFwiO1xuaW1wb3J0IHsgcGFyc2VYTUxTdHJpbmcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvdGVtcGxhdGluZy9CdWlsZGluZ0Jsb2NrVGVtcGxhdGVQcm9jZXNzb3JcIjtcbmltcG9ydCBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MsIE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IE1hbmlmZXN0V3JhcHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFdyYXBwZXJcIjtcbmltcG9ydCB7IGNvbnZlcnRUeXBlcywgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IElEaWFnbm9zdGljcywgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgSXNzdWVDYXRlZ29yeSwgSXNzdWVTZXZlcml0eSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSXNzdWVNYW5hZ2VyXCI7XG5pbXBvcnQgdHlwZSB7IFNpZGVFZmZlY3RzU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9TaWRlRWZmZWN0c1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgU2lkZUVmZmVjdHNGYWN0b3J5IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9TaWRlRWZmZWN0c1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBjcmVhdGVNb2NrUmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvdGVzdC9VSTVNb2NrSGVscGVyXCI7XG5pbXBvcnQgUGFnZSBmcm9tIFwic2FwL20vUGFnZVwiO1xuaW1wb3J0IEJpbmRpbmdQYXJzZXIgZnJvbSBcInNhcC91aS9iYXNlL0JpbmRpbmdQYXJzZXJcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgRXZlbnRQcm92aWRlciBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRQcm92aWRlclwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlQWdncmVnYXRpb25CaW5kaW5nSW5mbyB9IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IE1hbmFnZWRPYmplY3RNZXRhZGF0YSBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdE1ldGFkYXRhXCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBJbnZpc2libGVUZXh0IGZyb20gXCJzYXAvdWkvY29yZS9JbnZpc2libGVUZXh0XCI7XG5pbXBvcnQgWE1MVGVtcGxhdGVQcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL1hNTFRlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgWE1MUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IFNlcmlhbGl6ZXIgZnJvbSBcInNhcC91aS9jb3JlL3V0aWwvc2VyaWFsaXplci9TZXJpYWxpemVyXCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcInNhcC91aS9mbC9VdGlsc1wiO1xuaW1wb3J0IEZsZXhTdGF0ZSBmcm9tIFwic2FwL3VpL2ZsL2FwcGx5L19pbnRlcm5hbC9mbGV4U3RhdGUvRmxleFN0YXRlXCI7XG5pbXBvcnQgTG9hZGVyIGZyb20gXCJzYXAvdWkvZmwvYXBwbHkvX2ludGVybmFsL2ZsZXhTdGF0ZS9Mb2FkZXJcIjtcbmltcG9ydCBYbWxQcmVwcm9jZXNzb3IgZnJvbSBcInNhcC91aS9mbC9hcHBseS9faW50ZXJuYWwvcHJlcHJvY2Vzc29ycy9YbWxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCBBcHBTdG9yYWdlIGZyb20gXCJzYXAvdWkvZmwvaW5pdGlhbC9faW50ZXJuYWwvU3RvcmFnZVwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL21kYy9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL01vZGVsXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgX01ldGFkYXRhUmVxdWVzdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvbGliL19NZXRhZGF0YVJlcXVlc3RvclwiO1xuaW1wb3J0IHhwYXRoIGZyb20gXCJ4cGF0aFwiO1xuaW1wb3J0IHR5cGUgeyBNYW5hZ2VkT2JqZWN0RXggfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vdHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5pbXBvcnQgeyBjcmVhdGVGbGV4aWJpbGl0eUNoYW5nZXNPYmplY3QgfSBmcm9tIFwiLi9KZXN0RmxleGliaWxpdHlIZWxwZXJcIjtcblxudHlwZSBQcmVQcm9jZXNzb3JTZXR0aW5nc1R5cGUgPSB7XG5cdG1vZGVsczoge1xuXHRcdFtuYW1lOiBzdHJpbmddOiBKU09OTW9kZWwgfCBPRGF0YU1ldGFNb2RlbDtcblx0fTtcblx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0W25hbWU6IHN0cmluZ106IENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdH07XG59O1xudHlwZSBNb2NrRnJhZ21lbnQgPSB7XG5cdG5hbWU6IHN0cmluZztcblx0Y29udGVudDogc3RyaW5nO1xufTtcblxudHlwZSBKZXN0VGVtcGxhdGVkVmlldyA9IHtcblx0YXNFbGVtZW50OiBFbGVtZW50IHwgdW5kZWZpbmVkO1xuXHRhc1N0cmluZzogc3RyaW5nO1xufTtcblxuTG9nLnNldExldmVsKDEgYXMgYW55LCBcInNhcC51aS5jb3JlLnV0aWwuWE1MUHJlcHJvY2Vzc29yXCIpO1xuamVzdC5zZXRUaW1lb3V0KDQwMDAwKTtcblxuY29uc3QgbmFtZVNwYWNlTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuXHRtYWNybzogXCJzYXAuZmUubWFjcm9zXCIsXG5cdG1hY3JvU2hhcmU6IFwic2FwLmZlLm1hY3Jvcy5zaGFyZVwiLFxuXHRtYWNyb3M6IFwic2FwLmZlLm1hY3Jvc1wiLFxuXHRmZUJCOiBcInNhcC5mZS5jb3JlLmJ1aWxkaW5nQmxvY2tzLnRlbXBsYXRpbmdcIixcblx0bWFjcm9GaWVsZDogXCJzYXAuZmUubWFjcm9zLmZpZWxkXCIsXG5cdG1hY3JvZGF0YTogXCJodHRwOi8vc2NoZW1hcy5zYXAuY29tL3NhcHVpNS9leHRlbnNpb24vc2FwLnVpLmNvcmUuQ3VzdG9tRGF0YS8xXCIsXG5cdGxvZzogXCJodHRwOi8vc2NoZW1hcy5zYXAuY29tL3NhcHVpNS9leHRlbnNpb24vc2FwLnVpLmNvcmUuQ3VzdG9tRGF0YS8xXCIsXG5cdGN1c3RvbURhdGE6IFwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvZXh0ZW5zaW9uL3NhcC51aS5jb3JlLkN1c3RvbURhdGEvMVwiLFxuXHRjb250cm9sOiBcInNhcC5mZS5jb3JlLmNvbnRyb2xzXCIsXG5cdGNvbnRyb2xzOiBcInNhcC5mZS5tYWNyb3MuY29udHJvbHNcIixcblx0Y29yZTogXCJzYXAudWkuY29yZVwiLFxuXHRkdDogXCJzYXAudWkuZHRcIixcblx0bTogXCJzYXAubVwiLFxuXHRmOiBcInNhcC51aS5sYXlvdXQuZm9ybVwiLFxuXHRmbDogXCJzYXAudWkuZmxcIixcblx0aW50ZXJuYWxNYWNybzogXCJzYXAuZmUubWFjcm9zLmludGVybmFsXCIsXG5cdG1kYzogXCJzYXAudWkubWRjXCIsXG5cdGFjdGlvbnRvb2xiYXI6IFwic2FwLnVpLm1kYy5hY3Rpb250b29sYmFyXCIsXG5cdG1kY0ZpZWxkOiBcInNhcC51aS5tZGMuZmllbGRcIixcblx0bWRjVGFibGU6IFwic2FwLnVpLm1kYy50YWJsZVwiLFxuXHR1OiBcInNhcC51aS51bmlmaWVkXCIsXG5cdHV4YXA6IFwic2FwLnV4YXBcIixcblx0bWFjcm9NaWNyb0NoYXJ0OiBcInNhcC5mZS5tYWNyb3MubWljcm9jaGFydFwiLFxuXHRtaWNyb0NoYXJ0OiBcInNhcC5zdWl0ZS51aS5taWNyb2NoYXJ0XCIsXG5cdG1hY3JvVGFibGU6IFwic2FwLmZlLm1hY3Jvcy50YWJsZVwiLFxuXHRtZGN2YzogXCJzYXAudWkubWRjLnZhbHVlaGVscC5jb250ZW50XCIsXG5cdG1kY3Y6IFwic2FwLnVpLm1kYy52YWx1ZWhlbHBcIixcblx0dmFsdWVIZWxwOiBcInNhcC5mZS5tYWNyb3MudmFsdWVIZWxwXCIsXG5cdGNvbnRlbnRTd2l0Y2hlcjogXCJzYXAuZmUubWFjcm9zLmNvbnRlbnRTd2l0Y2hlclwiLFxuXHRmaWx0ZXJCYXI6IFwic2FwLmZlLm1hY3Jvcy5maWx0ZXJCYXJcIixcblx0ZmJDb250cm9sczogXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLmZpbHRlcmJhclwiLFxuXHRkcmFmdEluZGljYXRvcjogXCJzYXAuZmUubWFjcm9zLmRyYWZ0SW5kaWNhdG9yXCJcbn07XG5jb25zdCByZXZlc2VOYW1lc3BhY2VNYXAgPSBPYmplY3Qua2V5cyhuYW1lU3BhY2VNYXApLnJlZHVjZSgocmV2ZXJzZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgY3VycmVudE5hbWUpID0+IHtcblx0cmV2ZXJzZU1hcFtuYW1lU3BhY2VNYXBbY3VycmVudE5hbWVdXSA9IGN1cnJlbnROYW1lO1xuXHRyZXR1cm4gcmV2ZXJzZU1hcDtcbn0sIHt9KTtcbmNvbnN0IHNlbGVjdCA9IHhwYXRoLnVzZU5hbWVzcGFjZXMobmFtZVNwYWNlTWFwKTtcblxuY29uc3QgZGVmYXVsdEZha2VTaWRlRWZmZWN0U2VydmljZSA9IHsgY29tcHV0ZUZpZWxkR3JvdXBJZHM6ICgpID0+IFtdIH07XG5cbmZ1bmN0aW9uIF9nZXRUZW1wbGF0ZWRTZWxlY3Rvcih4bWxkb206IE5vZGUsIHNlbGVjdG9yOiBzdHJpbmcpOiBzdHJpbmcge1xuXHQvKipcblx0ICogaWYgYSByb290IGVsZW1lbnQgaGFzIGJlZW4gYWRkZWQgZHVyaW5nIHRoZSB0ZW1wbGF0aW5nIGJ5IG91ciBKZXN0IFRlbXBsYXRpbmcgbWV0aG9kc1xuXHQgKiB0aGUgcm9vdCBlbGVtZW50IGlzIGFkZGVkIHRvIHRoZSBzZWxlY3RvciBwYXRoLlxuXHQgKi9cblx0Y29uc3Qgcm9vdFBhdGggPSBcIi9yb290XCI7XG5cdHJldHVybiBgJHt4bWxkb20ubm9kZU5hbWUgPT09IFwicm9vdFwiICYmICFzZWxlY3Rvci5zdGFydHNXaXRoKHJvb3RQYXRoKSA/IHJvb3RQYXRoIDogXCJcIn0ke3NlbGVjdG9yfWA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIF9idWlsZFByZVByb2Nlc3NvclNldHRpbmdzKFxuXHRzTWV0YWRhdGFVcmw6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0bUJpbmRpbmdDb250ZXh0czogeyBbeDogc3RyaW5nXTogc3RyaW5nIH0sXG5cdG1Nb2RlbHM6IHsgW3g6IHN0cmluZ106IGFueSB9LFxuXHRmYWtlU2lkZUVmZmVjdFNlcnZpY2U/OiB1bmtub3duXG4pOiBQcm9taXNlPFByZVByb2Nlc3NvclNldHRpbmdzVHlwZT4ge1xuXHRsZXQgb01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwgfCB1bmRlZmluZWQ7XG5cdGlmIChzTWV0YWRhdGFVcmwpIHtcblx0XHRvTWV0YU1vZGVsID0gYXdhaXQgZ2V0TWV0YU1vZGVsKHNNZXRhZGF0YVVybCk7XG5cdFx0Ly8gVG8gZW5zdXJlIG91ciBtYWNybyBjYW4gdXNlICNzZXRCaW5kaW5nQ29udGV4dCB3ZSBlbnN1cmUgdGhlcmUgaXMgYSBwcmUgZXhpc3RpbmcgSlNPTk1vZGVsIGZvciBjb252ZXJ0ZXJDb250ZXh0XG5cdFx0Ly8gaWYgbm90IGFscmVhZHkgcGFzc2VkIHRvIHRlaCB0ZW1wbGF0aW5nXG5cdFx0aWYgKCFtTW9kZWxzLmhhc093blByb3BlcnR5KFwiY29udmVydGVyQ29udGV4dFwiKSkge1xuXHRcdFx0bU1vZGVscyA9IE9iamVjdC5hc3NpZ24obU1vZGVscywgeyBjb252ZXJ0ZXJDb250ZXh0OiBuZXcgVGVtcGxhdGVNb2RlbCh7fSwgb01ldGFNb2RlbCEpIH0pO1xuXHRcdH1cblxuXHRcdE9iamVjdC5rZXlzKG1Nb2RlbHMpLmZvckVhY2goZnVuY3Rpb24gKHNNb2RlbE5hbWUpIHtcblx0XHRcdGlmIChtTW9kZWxzW3NNb2RlbE5hbWVdICYmIG1Nb2RlbHNbc01vZGVsTmFtZV0uaXNUZW1wbGF0ZU1vZGVsKSB7XG5cdFx0XHRcdG1Nb2RlbHNbc01vZGVsTmFtZV0gPSBuZXcgVGVtcGxhdGVNb2RlbChtTW9kZWxzW3NNb2RlbE5hbWVdLmRhdGEsIG9NZXRhTW9kZWwhKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdGNvbnN0IHNldHRpbmdzOiBhbnkgPSB7XG5cdFx0bW9kZWxzOiBPYmplY3QuYXNzaWduKFxuXHRcdFx0e1xuXHRcdFx0XHRtZXRhTW9kZWw6IG9NZXRhTW9kZWxcblx0XHRcdH0sXG5cdFx0XHRtTW9kZWxzXG5cdFx0KSxcblx0XHRiaW5kaW5nQ29udGV4dHM6IHt9LFxuXHRcdGFwcENvbXBvbmVudDoge1xuXHRcdFx0Z2V0U2lkZUVmZmVjdHNTZXJ2aWNlOiBqZXN0LmZuKCksXG5cdFx0XHRnZXREaWFnbm9zdGljczogKCkgPT4gdW5kZWZpbmVkLFxuXHRcdFx0Z2V0U2hlbGxTZXJ2aWNlczogamVzdC5mbigpLFxuXHRcdFx0Z2V0TWFuaWZlc3RFbnRyeTogKCkgPT4gdW5kZWZpbmVkXG5cdFx0fVxuXHR9O1xuXG5cdHNldHRpbmdzLmFwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UubW9ja1JldHVyblZhbHVlKGZha2VTaWRlRWZmZWN0U2VydmljZSA/PyBkZWZhdWx0RmFrZVNpZGVFZmZlY3RTZXJ2aWNlKTtcblx0Ly9JbmplY3QgbW9kZWxzIGFuZCBiaW5kaW5nQ29udGV4dHNcblx0T2JqZWN0LmtleXMobUJpbmRpbmdDb250ZXh0cykuZm9yRWFjaChmdW5jdGlvbiAoc0tleSkge1xuXHRcdC8qIEFzc2VydCB0byBtYWtlIHN1cmUgdGhlIGFubm90YXRpb25zIGFyZSBpbiB0aGUgdGVzdCBtZXRhZGF0YSAtPiBhdm9pZCBtaXNsZWFkaW5nIHRlc3RzICovXG5cdFx0ZXhwZWN0KHR5cGVvZiBvTWV0YU1vZGVsPy5nZXRPYmplY3QobUJpbmRpbmdDb250ZXh0c1tzS2V5XSkpLnRvQmVEZWZpbmVkKCk7XG5cdFx0Y29uc3Qgb01vZGVsID0gbU1vZGVsc1tzS2V5XSB8fCBvTWV0YU1vZGVsO1xuXHRcdHNldHRpbmdzLmJpbmRpbmdDb250ZXh0c1tzS2V5XSA9IG9Nb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChtQmluZGluZ0NvbnRleHRzW3NLZXldKTsgLy9WYWx1ZSBpcyBzUGF0aFxuXHRcdHNldHRpbmdzLm1vZGVsc1tzS2V5XSA9IG9Nb2RlbDtcblx0fSk7XG5cdHJldHVybiBzZXR0aW5ncztcbn1cblxuZnVuY3Rpb24gX2xvYWRSZXNvdXJjZVZpZXcodmlld05hbWU6IHN0cmluZyk6IEVsZW1lbnQge1xuXHRjb25zdCBuYW1lID0gdmlld05hbWUucmVwbGFjZSgvXFwuL2csIFwiL1wiKSArIFwiLnZpZXcueG1sXCI7XG5cdGNvbnN0IHZpZXcgPSBMb2FkZXJFeHRlbnNpb25zLmxvYWRSZXNvdXJjZShuYW1lKTtcblx0cmV0dXJuIHZpZXcuZG9jdW1lbnRFbGVtZW50O1xufVxuXG5leHBvcnQgY29uc3QgcnVuWFBhdGhRdWVyeSA9IGZ1bmN0aW9uIChzZWxlY3Rvcjogc3RyaW5nLCB4bWxkb206IE5vZGUgfCB1bmRlZmluZWQpIHtcblx0cmV0dXJuIHNlbGVjdChzZWxlY3RvciwgeG1sZG9tKTtcbn07XG5cbmV4cGVjdC5leHRlbmQoe1xuXHR0b0hhdmVDb250cm9sKHhtbGRvbSwgc2VsZWN0b3IpIHtcblx0XHRjb25zdCBub2RlcyA9IHJ1blhQYXRoUXVlcnkoX2dldFRlbXBsYXRlZFNlbGVjdG9yKHhtbGRvbSwgc2VsZWN0b3IpLCB4bWxkb20pO1xuXHRcdHJldHVybiB7XG5cdFx0XHRtZXNzYWdlOiAoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG91dHB1dFhtbCA9IHNlcmlhbGl6ZVhNTCh4bWxkb20pO1xuXHRcdFx0XHRyZXR1cm4gYGRpZCBub3QgZmluZCBjb250cm9scyBtYXRjaGluZyAke3NlbGVjdG9yfSBpbiBnZW5lcmF0ZWQgeG1sOlxcbiAke291dHB1dFhtbH1gO1xuXHRcdFx0fSxcblx0XHRcdHBhc3M6IG5vZGVzICYmIG5vZGVzLmxlbmd0aCA+PSAxXG5cdFx0fTtcblx0fSxcblx0dG9Ob3RIYXZlQ29udHJvbCh4bWxkb20sIHNlbGVjdG9yKSB7XG5cdFx0Y29uc3Qgbm9kZXMgPSBydW5YUGF0aFF1ZXJ5KF9nZXRUZW1wbGF0ZWRTZWxlY3Rvcih4bWxkb20sIHNlbGVjdG9yKSwgeG1sZG9tKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bWVzc2FnZTogKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBvdXRwdXRYbWwgPSBzZXJpYWxpemVYTUwoeG1sZG9tKTtcblx0XHRcdFx0cmV0dXJuIGBUaGVyZSBpcyBhIGNvbnRyb2wgbWF0Y2hpbmcgJHtzZWxlY3Rvcn0gaW4gZ2VuZXJhdGVkIHhtbDpcXG4gJHtvdXRwdXRYbWx9YDtcblx0XHRcdH0sXG5cdFx0XHRwYXNzOiBub2RlcyAmJiBub2Rlcy5sZW5ndGggPT09IDBcblx0XHR9O1xuXHR9LFxuXHQvKipcblx0ICogQ2hlY2tzIGZvciBlcnJvcnMgaW4gYHhtbGAgY3JlYXRlZCBkdXJpbmcgdGVtcGxhdGluZyBvZiBhbiBYTUwgc3RyaW5nIG9yXG5cdCAqIGFuIFhNTCBub2RlLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrZXMgZm9yIHRoZSB4bWwgZXJyb3JzIGNyZWF0ZWQgYnkgdGhlXG5cdCAqIGZ1bmN0aW9uIFtCdWlsZGluZ0Jsb2NrVGVtcGxhdGVQcm9jZXNzb3IuY3JlYXRlRXJyb3JYTUxde0BsaW5rIHNhcC5mZS5jb3JlLmJ1aWxkaW5nQmxvY2tzLnRlbXBsYXRpbmcuQnVpbGRpbmdCbG9ja1RlbXBsYXRlUHJvY2Vzc29yI2NyZWF0ZUVycm9yWE1MfS5cblx0ICogQHBhcmFtIHhtbCBYTUwgU3RyaW5nIG9yIFhNTCBOb2RlIHRvIGJlIHRlc3RlZCBmb3IgZXJyb3JzXG5cdCAqIEByZXR1cm5zIEplc3QgTWF0Y2hlciByZXN1bHQgb2JqZWN0XG5cdCAqL1xuXHR0b0hhdmVUZW1wbGF0aW5nRXJyb3JzKHhtbDogc3RyaW5nIHwgTm9kZSkge1xuXHRcdGNvbnN0IHhtbFRleHQgPSB0eXBlb2YgeG1sID09PSBcInN0cmluZ1wiID8geG1sIDogc2VyaWFsaXplWE1MKHhtbCk7XG5cdFx0Y29uc3QgYmFzZTY0RW50cmllczogc3RyaW5nW10gPSB4bWxUZXh0Lm1hdGNoKC9CQkZcXC5iYXNlNjREZWNvZGVcXCgnKFteJ10qKSdcXCkvZ20pIHx8IChbXSBhcyBzdHJpbmdbXSk7XG5cdFx0Y29uc3QgZXJyb3JNZXNzYWdlczogc3RyaW5nW10gPSBiYXNlNjRFbnRyaWVzLm1hcCgobWVzc2FnZTogc3RyaW5nKSA9PiB7XG5cdFx0XHRpZiAobWVzc2FnZSAmJiBtZXNzYWdlLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0cmV0dXJuIGF0b2IobWVzc2FnZS5tYXRjaCgvKCdbXiddKikvKT8uWzBdPy5zbGljZSgxKSB8fCBcIlwiKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBcIlwiO1xuXHRcdH0pO1xuXHRcdGlmIChlcnJvck1lc3NhZ2VzLmxlbmd0aCA8PSAwKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRtZXNzYWdlOiAoKSA9PiBgWE1MIFRlbXBsYXRpbmcgd2l0aG91dCBlcnJvcnNgLFxuXHRcdFx0XHRwYXNzOiBmYWxzZVxuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0bWVzc2FnZTogKCkgPT4gZXJyb3JNZXNzYWdlcy5qb2luKFwiXFxuXCIpLFxuXHRcdFx0XHRwYXNzOiB0cnVlXG5cdFx0XHR9O1xuXHRcdH1cblx0fVxufSk7XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRCdWlsZGluZ0Jsb2NrWE1MID0gZnVuY3Rpb24gKHhtbFN0cmluZzogc3RyaW5nIHwgc3RyaW5nW10pOiBzdHJpbmcge1xuXHRpZiAoQXJyYXkuaXNBcnJheSh4bWxTdHJpbmcpKSB7XG5cdFx0eG1sU3RyaW5nID0geG1sU3RyaW5nLmpvaW4oXCJcIik7XG5cdH1cblx0cmV0dXJuIGZvcm1hdFhNTCh4bWxTdHJpbmcpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnRyb2xBdHRyaWJ1dGUgPSBmdW5jdGlvbiAoY29udHJvbFNlbGVjdG9yOiBzdHJpbmcsIGF0dHJpYnV0ZU5hbWU6IHN0cmluZywgeG1sRG9tOiBOb2RlKSB7XG5cdGNvbnN0IHNlbGVjdG9yID0gYHN0cmluZygke19nZXRUZW1wbGF0ZWRTZWxlY3Rvcih4bWxEb20sIGNvbnRyb2xTZWxlY3Rvcil9L0Ake2F0dHJpYnV0ZU5hbWV9KWA7XG5cdHJldHVybiBydW5YUGF0aFF1ZXJ5KHNlbGVjdG9yLCB4bWxEb20pO1xufTtcblxuLyoqXG4gKiBTZXJpYWxpemUgdGhlIHBhcnRzIG9yIHRoZSBjb21wbGV0ZSBnaXZlbiBYTUwgRE9NIHRvIHN0cmluZy5cbiAqIEBwYXJhbSB4bWxEb20gRE9NIG5vZGUgdGhhdCBpcyB0byBiZSBzZXJpYWxpemVkLlxuICogQHBhcmFtIHNlbGVjdG9yIE9wdGlvbmFsIHNlbGVjdG9yIG9mIHN1YiBub2Rlc1xuICogQHJldHVybnMgWE1MIHN0cmluZ1xuICovXG5leHBvcnQgY29uc3Qgc2VyaWFsaXplWE1MID0gZnVuY3Rpb24gKHhtbERvbTogTm9kZSwgc2VsZWN0b3I/OiBzdHJpbmcpIHtcblx0Y29uc3Qgc2VyaWFsaXplciA9IG5ldyB3aW5kb3cuWE1MU2VyaWFsaXplcigpO1xuXHRsZXQgeG1sU3RyaW5nOiBzdHJpbmc7XG5cdGlmIChzZWxlY3Rvcikge1xuXHRcdGNvbnN0IG5vZGVzID0gcnVuWFBhdGhRdWVyeShzZWxlY3RvciwgeG1sRG9tKSBhcyBOb2RlW107XG5cdFx0eG1sU3RyaW5nID0gbm9kZXMubWFwKChub2RlKSA9PiBzZXJpYWxpemVyLnNlcmlhbGl6ZVRvU3RyaW5nKG5vZGUpKS5qb2luKFwiXFxuXCIpO1xuXHR9IGVsc2Uge1xuXHRcdHhtbFN0cmluZyA9IHNlcmlhbGl6ZXIuc2VyaWFsaXplVG9TdHJpbmcoeG1sRG9tKTtcblx0fVxuXHRyZXR1cm4gZm9ybWF0WE1MKHhtbFN0cmluZyk7XG59O1xuXG4vKipcbiAqIEZvcm1hdHMgYSBzdHJpbmcgY29udGFpbmluZyBhbiBYTUwgZG9jdW1lbnQuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBvbmx5IGNvbnNpZGVycyBYTUwgdGFncyBhbmQgYXR0cmlidXRlcywgaWdub3JpbmcgZXZlcnl0aGluZyBlbHNlICh0ZXh0LCBjb21tZW50cykuIEFkZGl0aW9uYWxseSxcbiAqIGF0dHJpYnV0ZSB2YWx1ZXMgY29udGFpbmluZyBhIHZhcnlpbmcgVUlEIGFyZSByZXBsYWNlZCB3aXRoIGEgY29uc3RhbnQgdmFsdWUuXG4gKlxuICogQW4gXCJYTUxcIiBzdHJpbmcgY29udGFpbmluZyBtdWx0aXBsZSByb290IGVsZW1lbnRzIGNhbiBiZS5cbiAqIEBwYXJhbSB4bWxTdHJpbmcgIFRoZSBpbnB1dCBYTUwgc3RyaW5nLiBUaGlzIGZ1bmN0aW9uIGFsc28gYWNjZXB0cyBcIlhNTFwiIHN0cmluZ3Mgd2l0aCBtdWx0aXBsZSByb290IGVsZW1lbnRzLlxuICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCBYTUwgc3RyaW5nLlxuICovXG5leHBvcnQgY29uc3QgZm9ybWF0WE1MID0gZnVuY3Rpb24gKHhtbFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3QgU1RBUlQgPSBcIjxfX1hNTF9fPlwiLFxuXHRcdEVORCA9IFwiPC9fX1hNTF9fPlwiLFxuXHRcdFVJRCA9IC91aWQtLWlkLVxcZHsxM30tXFxkezEsM30vLFxuXHRcdFVJRDIgPSAvaWQtXFxkezEzfS1cXGR7MSwzfS8sXG5cdFx0bGluZXM6IHN0cmluZ1tdID0gW107XG5cblx0bGV0IGN1cnJlbnRMaW5lID0gXCJcIixcblx0XHRsZXZlbCA9IC0xLFxuXHRcdGF0dHJpYnV0ZXM6IHsgbmFtZTogc3RyaW5nOyB2YWx1ZT86IHN0cmluZyB9W10gPSBbXTtcblxuXHRmdW5jdGlvbiBuZXdsaW5lKCkge1xuXHRcdGlmIChjdXJyZW50TGluZSAmJiBjdXJyZW50TGluZSAhPT0gU1RBUlQpIHtcblx0XHRcdGxpbmVzLnB1c2goY3VycmVudExpbmUpO1xuXHRcdH1cblxuXHRcdGN1cnJlbnRMaW5lID0gbGV2ZWwgPiAwID8gXCIgIFwiLnJlcGVhdChsZXZlbCkgOiBcIlwiO1xuXHR9XG5cblx0ZnVuY3Rpb24gYXBwZW5kQXR0cmlidXRlcygpIHtcblx0XHRpZiAoYXR0cmlidXRlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRhdHRyaWJ1dGVzID0gYXR0cmlidXRlcy5zb3J0KChhLCBiKSA9PiB7XG5cdFx0XHRcdGlmIChhLm5hbWUuc3RhcnRzV2l0aChcInhtbG5zXCIpICYmICFiLm5hbWUuc3RhcnRzV2l0aChcInhtbG5zXCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCFhLm5hbWUuc3RhcnRzV2l0aChcInhtbG5zXCIpICYmIGIubmFtZS5zdGFydHNXaXRoKFwieG1sbnNcIikpIHtcblx0XHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdFx0fSBlbHNlIGlmIChhLm5hbWUuc3RhcnRzV2l0aChcInhtbG5zXCIpICYmIGIubmFtZS5zdGFydHNXaXRoKFwieG1sbnNcIikpIHtcblx0XHRcdFx0XHRyZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcblx0XHRcdFx0fSBlbHNlIGlmIChhLm5hbWUuaW5jbHVkZXMoXCI6XCIpICYmICFiLm5hbWUuaW5jbHVkZXMoXCI6XCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCFhLm5hbWUuaW5jbHVkZXMoXCI6XCIpICYmIGIubmFtZS5pbmNsdWRlcyhcIjpcIikpIHtcblx0XHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdGxldmVsKys7XG5cdFx0XHRmb3IgKGNvbnN0IGF0dHJpYnV0ZSBvZiBhdHRyaWJ1dGVzKSB7XG5cdFx0XHRcdG5ld2xpbmUoKTtcblx0XHRcdFx0Y3VycmVudExpbmUgKz0gYXR0cmlidXRlLm5hbWU7XG5cdFx0XHRcdGlmIChhdHRyaWJ1dGUudmFsdWUpIGN1cnJlbnRMaW5lICs9IGF0dHJpYnV0ZS52YWx1ZTtcblx0XHRcdH1cblx0XHRcdGxldmVsLS07XG5cdFx0XHRhdHRyaWJ1dGVzID0gW107XG5cdFx0XHRuZXdsaW5lKCk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gYXBwZW5kKGRhdGE6IFJhbmdlKSB7XG5cdFx0Y3VycmVudExpbmUgKz0gcGFyc2VyLnJlYWQoZGF0YSk7XG5cdH1cblxuXHRjb25zdCBwYXJzZXIgPSBjcmVhdGVQYXJzZXIoe1xuXHRcdG9uT3BlblRhZ1N0YXJ0KGRhdGE6IFJhbmdlKSB7XG5cdFx0XHRuZXdsaW5lKCk7XG5cdFx0XHRhcHBlbmQoZGF0YSk7XG5cdFx0fSxcblxuXHRcdG9uT3BlblRhZ05hbWU6IGFwcGVuZCxcblxuXHRcdG9uQXR0ck5hbWUoZGF0YTogUmFuZ2UpIHtcblx0XHRcdGF0dHJpYnV0ZXMudW5zaGlmdCh7IG5hbWU6IHBhcnNlci5yZWFkKGRhdGEpIH0pO1xuXHRcdH0sXG5cblx0XHRvbkF0dHJWYWx1ZShkYXRhOiBSYW5nZXMuQXR0clZhbHVlKSB7XG5cdFx0XHRhdHRyaWJ1dGVzWzBdLnZhbHVlID0gcGFyc2VyLnJlYWQoZGF0YSkucmVwbGFjZShVSUQsIFwidWlkLS1pZFwiKTsgLy8gcmVwbGFjZSB2YXJ5aW5nIFVJRHMgd2l0aCBhIGNvbnN0YW50IHZhbHVlXG5cdFx0XHRhdHRyaWJ1dGVzWzBdLnZhbHVlID0gcGFyc2VyLnJlYWQoZGF0YSkucmVwbGFjZShVSUQyLCBcImlkXCIpOyAvLyByZXBsYWNlIHZhcnlpbmcgVUlEcyB3aXRoIGEgY29uc3RhbnQgdmFsdWVcblx0XHR9LFxuXG5cdFx0b25PcGVuVGFnRW5kKGRhdGE6IFJhbmdlcy5PcGVuVGFnRW5kKSB7XG5cdFx0XHRhcHBlbmRBdHRyaWJ1dGVzKCk7XG5cdFx0XHRhcHBlbmQoZGF0YSk7XG5cdFx0XHRpZiAoIWRhdGEuc2VsZkNsb3NlZCkgbGV2ZWwrKztcblx0XHR9LFxuXG5cdFx0b25DbG9zZVRhZ1N0YXJ0KGRhdGE6IFJhbmdlKSB7XG5cdFx0XHRsZXZlbC0tO1xuXHRcdFx0bmV3bGluZSgpO1xuXHRcdFx0YXBwZW5kKGRhdGEpO1xuXHRcdH0sXG5cblx0XHRvbkNsb3NlVGFnTmFtZTogYXBwZW5kLFxuXHRcdG9uQ2xvc2VUYWdFbmQ6IGFwcGVuZFxuXHR9KTtcblxuXHRwYXJzZXIucGFyc2UoU1RBUlQgKyB4bWxTdHJpbmcgKyBFTkQpO1xuXHRyZXR1cm4gbGluZXMuam9pbihcIlxcblwiKS50cmltKCk7XG59O1xuXG4vKipcbiAqIENvbXBpbGUgYSBDRFMgZmlsZSBpbnRvIGFuIEVETVggZmlsZS5cbiAqIEBwYXJhbSBjZHNVcmwgVGhlIHBhdGggdG8gdGhlIGZpbGUgY29udGFpbmluZyB0aGUgQ0RTIGRlZmluaXRpb24uIFRoaXMgZmlsZSBtdXN0IGRlY2xhcmUgdGhlIG5hbWVzcGFjZVxuICogc2FwLmZlLnRlc3QgYW5kIGEgc2VydmljZSBKZXN0U2VydmljZVxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgY3JlYXRpbmcgdGhlIEVETVggb3V0cHV0XG4gKiBAcmV0dXJucyBUaGUgcGF0aCBvZiB0aGUgZ2VuZXJhdGVkIEVETVhcbiAqL1xuZXhwb3J0IGNvbnN0IGNvbXBpbGVDRFMgPSBmdW5jdGlvbiAoY2RzVXJsOiBzdHJpbmcsIG9wdGlvbnM6IGNvbXBpbGVyLk9EYXRhT3B0aW9ucyA9IHt9KSB7XG5cdGNvbnN0IGNkc1N0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhjZHNVcmwsIFwidXRmLThcIik7XG5cdGNvbnN0IGVkbXhDb250ZW50ID0gY2RzMmVkbXgoY2RzU3RyaW5nLCBcInNhcC5mZS50ZXN0Lkplc3RTZXJ2aWNlXCIsIG9wdGlvbnMpO1xuXHRjb25zdCBkaXIgPSBwYXRoLnJlc29sdmUoY2RzVXJsLCBcIi4uXCIsIFwiZ2VuXCIpO1xuXG5cdC8vIElmIHRoZSBjYWxsZXIgcHJvdmlkZWQgQ0RTIGNvbXBpbGVyIG9wdGlvbnM6IEluY2x1ZGUgdGhlbSBpbiB0aGUgZmlsZW5hbWUuIFRoaXMgcHJldmVudHMgdW5wcmVkaWN0YWJsZSByZXN1bHRzIGlmIHRoZSBzYW1lIENEUyBzb3VyY2Vcblx0Ly8gZmlsZSBpcyB1c2VkIHNpbXVsdGFuZW91c2x5IHdpdGggYSBkaWZmZXJlbnQgc2V0IG9mIG9wdGlvbnMgKGUuZy4gaW4gYSB0ZXN0IHJ1bm5pbmcgaW4gcGFyYWxsZWwpXG5cdGNvbnN0IGFsbE9wdGlvbnMgPSBPYmplY3QuZW50cmllcyhvcHRpb25zKTtcblx0YWxsT3B0aW9ucy5zb3J0KChhLCBiKSA9PiBiWzBdLmxvY2FsZUNvbXBhcmUoYVswXSkpO1xuXG5cdGNvbnN0IGVkbXhGaWxlTmFtZSA9XG5cdFx0YWxsT3B0aW9ucy5yZWR1Y2UoXG5cdFx0XHQoZmlsZW5hbWUsIFtvcHRpb25LZXksIG9wdGlvblZhbHVlXSkgPT4gYCR7ZmlsZW5hbWV9IyR7b3B0aW9uS2V5fT0ke29wdGlvblZhbHVlLnRvU3RyaW5nKCl9I2AsXG5cdFx0XHRwYXRoLmJhc2VuYW1lKGNkc1VybCkucmVwbGFjZShcIi5jZHNcIiwgXCJcIilcblx0XHQpICsgXCIueG1sXCI7XG5cblx0Y29uc3QgZWRteEZpbGVQYXRoID0gcGF0aC5yZXNvbHZlKGRpciwgZWRteEZpbGVOYW1lKTtcblxuXHRmcy5ta2RpclN5bmMoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuXHRmcy53cml0ZUZpbGVTeW5jKGVkbXhGaWxlUGF0aCwgZWRteENvbnRlbnQpO1xuXHRyZXR1cm4gZWRteEZpbGVQYXRoO1xufTtcblxuLyoqXG4gKiBDb21waWxlIENEUyB0byBFRE1YLlxuICogQHBhcmFtIGNkcyBUaGUgQ0RTIG1vZGVsLiBJdCBtdXN0IGRlZmluZSBhdCBsZWFzdCBvbmUgc2VydmljZS5cbiAqIEBwYXJhbSBzZXJ2aWNlIFRoZSBmdWxseS1xdWFsaWZpZWQgbmFtZSBvZiB0aGUgc2VydmljZSB0byBiZSBjb21waWxlZC4gRGVmYXVsdHMgdG8gXCJzYXAuZmUudGVzdC5KZXN0U2VydmljZVwiLlxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgY3JlYXRpbmcgdGhlIEVETVggb3V0cHV0XG4gKiBAcmV0dXJucyBUaGUgY29tcGlsZWQgc2VydmljZSBtb2RlbCBhcyBFRE1YLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2RzMmVkbXgoY2RzOiBzdHJpbmcsIHNlcnZpY2UgPSBcInNhcC5mZS50ZXN0Lkplc3RTZXJ2aWNlXCIsIG9wdGlvbnM6IGNvbXBpbGVyLk9EYXRhT3B0aW9ucyA9IHt9KSB7XG5cdGNvbnN0IHNvdXJjZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7IFwic291cmNlLmNkc1wiOiBjZHMgfTtcblxuXHQvLyBhbGxvdyB0byBpbmNsdWRlIHN0dWZmIGZyb20gQHNhcC9jZHMvY29tbW9uXG5cdGlmIChjZHMuaW5jbHVkZXMoXCInQHNhcC9jZHMvY29tbW9uJ1wiKSkge1xuXHRcdHNvdXJjZXNbXCJjb21tb24uY2RzXCJdID0gZnMucmVhZEZpbGVTeW5jKHJlcXVpcmUucmVzb2x2ZShcIkBzYXAvY2RzL2NvbW1vbi5jZHNcIiksIFwidXRmLThcIik7XG5cdH1cblxuXHRjb25zdCBjc24gPSBjb21waWxlci5jb21waWxlU291cmNlcyhzb3VyY2VzLCB7fSk7XG5cblx0Y29uc3QgZWRteE9wdGlvbnM6IGNvbXBpbGVyLk9EYXRhT3B0aW9ucyA9IHtcblx0XHRvZGF0YUZvcmVpZ25LZXlzOiB0cnVlLFxuXHRcdG9kYXRhRm9ybWF0OiBcInN0cnVjdHVyZWRcIixcblx0XHRvZGF0YUNvbnRhaW5tZW50OiB0cnVlLFxuXHRcdC4uLm9wdGlvbnMsXG5cdFx0c2VydmljZTogc2VydmljZVxuXHR9O1xuXG5cdGNvbnN0IGVkbXggPSBjb21waWxlci50by5lZG14KGNzbiwgZWRteE9wdGlvbnMpO1xuXHRpZiAoIWVkbXgpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYENvbXBpbGF0aW9uIGZhaWxlZC4gSGludDogTWFrZSBzdXJlIHRoYXQgdGhlIENEUyBtb2RlbCBkZWZpbmVzIHNlcnZpY2UgJHtzZXJ2aWNlfS5gKTtcblx0fVxuXHRyZXR1cm4gZWRteDtcbn1cblxuZXhwb3J0IGNvbnN0IGdldEZha2VTaWRlRWZmZWN0c1NlcnZpY2UgPSBhc3luYyBmdW5jdGlvbiAoXG5cdG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdGNsYXNzTmFtZU9EYXRhTW9kZWwgPSBcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YU1vZGVsXCJcbik6IFByb21pc2U8U2lkZUVmZmVjdHNTZXJ2aWNlPiB7XG5cdGNvbnN0IHNjb3BlT2JqZWN0ID0ge1xuXHRcdGdldE1vZGVsOiAoKSA9PiB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRpc0E6ICgpID0+IGNsYXNzTmFtZU9EYXRhTW9kZWwgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTW9kZWxcIixcblx0XHRcdFx0Z2V0TWV0YU1vZGVsOiAoKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIG1ldGFNb2RlbDtcblx0XHRcdFx0fSxcblx0XHRcdFx0Z2V0U2VydmljZVVybDogKCkgPT4gdW5kZWZpbmVkXG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0Z2V0U2VydmljZTogKCkgPT4ge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0Z2V0Q2FwYWJpbGl0aWVzOiAoKSA9PiB1bmRlZmluZWRcblx0XHRcdH07XG5cdFx0fVxuXHR9O1xuXHRjb25zdCBzZXJ2aWNlSW5zdGFuY2UgPSBhd2FpdCBuZXcgU2lkZUVmZmVjdHNGYWN0b3J5KCkuY3JlYXRlSW5zdGFuY2UoeyBzY29wZU9iamVjdCwgc2NvcGVUeXBlOiBcIlwiLCBzZXR0aW5nczoge30gfSk7XG5cdHJldHVybiBzZXJ2aWNlSW5zdGFuY2UuZ2V0SW50ZXJmYWNlKCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RmFrZURpYWdub3N0aWNzID0gZnVuY3Rpb24gKCk6IElEaWFnbm9zdGljcyB7XG5cdGNvbnN0IGlzc3VlczogYW55W10gPSBbXTtcblx0cmV0dXJuIHtcblx0XHRhZGRJc3N1ZShpc3N1ZUNhdGVnb3J5OiBJc3N1ZUNhdGVnb3J5LCBpc3N1ZVNldmVyaXR5OiBJc3N1ZVNldmVyaXR5LCBkZXRhaWxzOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRcdGlzc3Vlcy5wdXNoKHtcblx0XHRcdFx0aXNzdWVDYXRlZ29yeSxcblx0XHRcdFx0aXNzdWVTZXZlcml0eSxcblx0XHRcdFx0ZGV0YWlsc1xuXHRcdFx0fSk7XG5cdFx0fSxcblx0XHRnZXRJc3N1ZXMoKTogYW55W10ge1xuXHRcdFx0cmV0dXJuIGlzc3Vlcztcblx0XHR9LFxuXHRcdGNoZWNrSWZJc3N1ZUV4aXN0cyhpc3N1ZUNhdGVnb3J5OiBJc3N1ZUNhdGVnb3J5LCBpc3N1ZVNldmVyaXR5OiBJc3N1ZVNldmVyaXR5LCBkZXRhaWxzOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRcdHJldHVybiBpc3N1ZXMuZmluZCgoaXNzdWUpID0+IHtcblx0XHRcdFx0cmV0dXJuIGlzc3VlLmlzc3VlQ2F0ZWdvcnkgPT09IGlzc3VlQ2F0ZWdvcnkgJiYgaXNzdWUuaXNzdWVTZXZlcml0eSA9PT0gaXNzdWVTZXZlcml0eSAmJiBpc3N1ZS5kZXRhaWxzID09PSBkZXRhaWxzO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnZlcnRlckNvbnRleHRGb3JUZXN0ID0gZnVuY3Rpb24gKFxuXHRtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRtYW5pZmVzdFNldHRpbmdzOiBMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5ncyB8IE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzXG4pIHtcblx0Y29uc3QgY29udmVydGVkVHlwZXMgPSBjb252ZXJ0VHlwZXMobWV0YU1vZGVsKTtcblx0Y29uc3QgZGF0YU1vZGVsUGF0aCA9IG1hbmlmZXN0U2V0dGluZ3MuY29udGV4dFBhdGhcblx0XHQ/IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChtYW5pZmVzdFNldHRpbmdzLmNvbnRleHRQYXRoKSBhcyBDb250ZXh0KVxuXHRcdDogZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPFBhZ2VDb250ZXh0UGF0aFRhcmdldD4obWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAvJHttYW5pZmVzdFNldHRpbmdzLmVudGl0eVNldH1gKSk7XG5cdHJldHVybiBuZXcgQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KFxuXHRcdGNvbnZlcnRlZFR5cGVzLFxuXHRcdG5ldyBNYW5pZmVzdFdyYXBwZXIobWFuaWZlc3RTZXR0aW5ncyksXG5cdFx0Z2V0RmFrZURpYWdub3N0aWNzKCksXG5cdFx0ZGF0YU1vZGVsUGF0aFxuXHQpO1xufTtcbmNvbnN0IG1ldGFNb2RlbENhY2hlOiBhbnkgPSB7fTtcbmV4cG9ydCBjb25zdCBnZXRNZXRhTW9kZWwgPSBhc3luYyBmdW5jdGlvbiAoc01ldGFkYXRhVXJsOiBzdHJpbmcpIHtcblx0Y29uc3Qgb1JlcXVlc3RvciA9IF9NZXRhZGF0YVJlcXVlc3Rvci5jcmVhdGUoe30sIFwiNC4wXCIsIHVuZGVmaW5lZCwge30sIHt9LCBmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH0pO1xuXHRpZiAoIW1ldGFNb2RlbENhY2hlW3NNZXRhZGF0YVVybF0pIHtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gbmV3IChPRGF0YU1ldGFNb2RlbCBhcyBhbnkpKG9SZXF1ZXN0b3IsIHNNZXRhZGF0YVVybCwgdW5kZWZpbmVkLCB7IF9yZXF1ZXN0QW5ub3RhdGlvbkNoYW5nZXM6ICgpID0+IFtdIH0pO1xuXHRcdGF3YWl0IG9NZXRhTW9kZWwuZmV0Y2hFbnRpdHlDb250YWluZXIoKTtcblx0XHRtZXRhTW9kZWxDYWNoZVtzTWV0YWRhdGFVcmxdID0gb01ldGFNb2RlbDtcblx0fVxuXG5cdHJldHVybiBtZXRhTW9kZWxDYWNoZVtzTWV0YWRhdGFVcmxdO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JQcm9wZXJ0eSA9IGZ1bmN0aW9uIDxUID0gUHJvcGVydHkgfCBFbnRpdHlTZXQgfCBBbnlBbm5vdGF0aW9uPihcblx0ZW50aXR5U2V0OiBFbnRpdHlTZXQsXG5cdGNvbnZlcnRlZFR5cGVzOiBDb252ZXJ0ZWRNZXRhZGF0YSxcblx0cHJvcGVydHk/OiBUXG4pOiBEYXRhTW9kZWxPYmplY3RQYXRoPFQ+IHtcblx0Y29uc3QgdGFyZ2V0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxUPiA9IHtcblx0XHRzdGFydGluZ0VudGl0eVNldDogZW50aXR5U2V0LFxuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0aWVzOiBbXSxcblx0XHR0YXJnZXRPYmplY3Q6IHByb3BlcnR5LFxuXHRcdHRhcmdldEVudGl0eVNldDogZW50aXR5U2V0LFxuXHRcdHRhcmdldEVudGl0eVR5cGU6IGVudGl0eVNldC5lbnRpdHlUeXBlLFxuXHRcdGNvbnZlcnRlZFR5cGVzOiBjb252ZXJ0ZWRUeXBlc1xuXHR9O1xuXHR0YXJnZXRQYXRoLmNvbnRleHRMb2NhdGlvbiA9IHRhcmdldFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxFbnRpdHlTZXQ+O1xuXHRyZXR1cm4gdGFyZ2V0UGF0aDtcbn07XG5cbmV4cG9ydCBjb25zdCBldmFsdWF0ZUJpbmRpbmcgPSBmdW5jdGlvbiAoYmluZGluZ1N0cmluZzogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSkge1xuXHRjb25zdCBiaW5kaW5nRWxlbWVudCA9IEJpbmRpbmdQYXJzZXIuY29tcGxleFBhcnNlcihiaW5kaW5nU3RyaW5nKTtcblx0cmV0dXJuIGJpbmRpbmdFbGVtZW50LmZvcm1hdHRlci5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xufTtcblxudHlwZSBNb2RlbENvbnRlbnQgPSB7XG5cdFtuYW1lOiBzdHJpbmddOiBhbnk7XG59O1xuXG4vKipcbiAqIEV2YWx1YXRlIGEgYmluZGluZyBhZ2FpbnN0IGEgbW9kZWwuXG4gKiBAcGFyYW0gYmluZGluZ1N0cmluZyBUaGUgYmluZGluZyBzdHJpbmcuXG4gKiBAcGFyYW0gbW9kZWxDb250ZW50IENvbnRlbnQgb2YgdGhlIGRlZmF1bHQgbW9kZWwgdG8gdXNlIGZvciBldmFsdWF0aW9uLlxuICogQHBhcmFtIG5hbWVkTW9kZWxzQ29udGVudCBDb250ZW50cyBvZiBhZGRpdGlvbmFsLCBuYW1lZCBtb2RlbHMgdG8gdXNlLlxuICogQHJldHVybnMgVGhlIGV2YWx1YXRlZCBiaW5kaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXZhbHVhdGVCaW5kaW5nV2l0aE1vZGVsKFxuXHRiaW5kaW5nU3RyaW5nOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdG1vZGVsQ29udGVudDogTW9kZWxDb250ZW50LFxuXHRuYW1lZE1vZGVsc0NvbnRlbnQ/OiB7IFttb2RlbE5hbWU6IHN0cmluZ106IE1vZGVsQ29udGVudCB9XG4pOiBzdHJpbmcge1xuXHRjb25zdCBiaW5kaW5nRWxlbWVudCA9IEJpbmRpbmdQYXJzZXIuY29tcGxleFBhcnNlcihiaW5kaW5nU3RyaW5nKTtcblx0Y29uc3QgdGV4dCA9IG5ldyBJbnZpc2libGVUZXh0KCk7XG5cdHRleHQuYmluZFByb3BlcnR5KFwidGV4dFwiLCBiaW5kaW5nRWxlbWVudCk7XG5cblx0Y29uc3QgZGVmYXVsdE1vZGVsID0gbmV3IEpTT05Nb2RlbChtb2RlbENvbnRlbnQpO1xuXHR0ZXh0LnNldE1vZGVsKGRlZmF1bHRNb2RlbCk7XG5cdHRleHQuc2V0QmluZGluZ0NvbnRleHQoZGVmYXVsdE1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSk7XG5cblx0aWYgKG5hbWVkTW9kZWxzQ29udGVudCkge1xuXHRcdGZvciAoY29uc3QgW25hbWUsIGNvbnRlbnRdIG9mIE9iamVjdC5lbnRyaWVzKG5hbWVkTW9kZWxzQ29udGVudCkpIHtcblx0XHRcdGNvbnN0IG1vZGVsID0gbmV3IEpTT05Nb2RlbChjb250ZW50KTtcblx0XHRcdHRleHQuc2V0TW9kZWwobW9kZWwsIG5hbWUpO1xuXHRcdFx0dGV4dC5zZXRCaW5kaW5nQ29udGV4dChtb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIiksIG5hbWUpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0ZXh0LmdldFRleHQoKTtcbn1cblxuY29uc3QgVEVTVFZJRVdJRCA9IFwidGVzdFZpZXdJZFwiO1xuXG5jb25zdCBhcHBseUZsZXhDaGFuZ2VzID0gYXN5bmMgZnVuY3Rpb24gKGZsZXhDaGFuZ2VzOiB7IFt4OiBzdHJpbmddOiBvYmplY3RbXSB9LCBvTWV0YU1vZGVsOiBNZXRhTW9kZWwsIHJlc3VsdFhNTDogYW55KSB7XG5cdC8vIHByZWZpeCBJZHNcblx0Wy4uLnJlc3VsdFhNTC5xdWVyeVNlbGVjdG9yQWxsKFwiW2lkXVwiKV0uZm9yRWFjaCgobm9kZSkgPT4ge1xuXHRcdG5vZGUuaWQgPSBgJHtURVNUVklFV0lEfS0tJHtub2RlLmlkfWA7XG5cdH0pO1xuXHRjb25zdCBjaGFuZ2VzID0gY3JlYXRlRmxleGliaWxpdHlDaGFuZ2VzT2JqZWN0KFRFU1RWSUVXSUQsIGZsZXhDaGFuZ2VzKTtcblx0Y29uc3QgYXBwSWQgPSBcInNvbWVDb21wb25lbnRcIjtcblx0Y29uc3Qgb01hbmlmZXN0ID0ge1xuXHRcdFwic2FwLmFwcFwiOiB7XG5cdFx0XHRpZDogYXBwSWQsXG5cdFx0XHR0eXBlOiBcImFwcGxpY2F0aW9uXCIsXG5cdFx0XHRjcm9zc05hdmlnYXRpb246IHtcblx0XHRcdFx0b3V0Ym91bmRzOiBbXVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0Y29uc3Qgb0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50ID0ge1xuXHRcdGdldERpYWdub3N0aWNzOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKGdldEZha2VEaWFnbm9zdGljcygpKSxcblx0XHRnZXRNb2RlbDogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZSh7XG5cdFx0XHRnZXRNZXRhTW9kZWw6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUob01ldGFNb2RlbClcblx0XHR9KSxcblx0XHRnZXRDb21wb25lbnREYXRhOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHt9KSxcblx0XHRnZXRNYW5pZmVzdE9iamVjdDogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZSh7XG5cdFx0XHRnZXRFbnRyeTogZnVuY3Rpb24gKG5hbWU6IHN0cmluZykge1xuXHRcdFx0XHRyZXR1cm4gKG9NYW5pZmVzdCBhcyBhbnkpW25hbWVdO1xuXHRcdFx0fVxuXHRcdH0pLFxuXHRcdGdldExvY2FsSWQ6IGplc3QuZm4oKHNJZCkgPT4gc0lkKVxuXHR9IGFzIHVua25vd24gYXMgQXBwQ29tcG9uZW50O1xuXHQvL2Zha2UgY2hhbmdlc1xuXHRqZXN0LnNweU9uKEFwcFN0b3JhZ2UsIFwibG9hZEZsZXhEYXRhXCIpLm1vY2tSZXR1cm5WYWx1ZShQcm9taXNlLnJlc29sdmUoY2hhbmdlcykpO1xuXHRqZXN0LnNweU9uKExvYWRlciwgXCJsb2FkRmxleERhdGFcIikubW9ja1JldHVyblZhbHVlKFByb21pc2UucmVzb2x2ZShjaGFuZ2VzKSk7XG5cblx0amVzdC5zcHlPbihDb21wb25lbnQgYXMgdW5rbm93biBhcyB7IGdldENvbXBvbmVudEJ5SWQ6ICgpID0+IEFwcENvbXBvbmVudCB9LCBcImdldENvbXBvbmVudEJ5SWRcIikubW9ja1JldHVyblZhbHVlKG9BcHBDb21wb25lbnQpO1xuXHRqZXN0LnNweU9uKFV0aWxzLCBcImdldEFwcENvbXBvbmVudEZvckNvbnRyb2xcIikubW9ja1JldHVyblZhbHVlKG9BcHBDb21wb25lbnQpO1xuXHRhd2FpdCBGbGV4U3RhdGUuaW5pdGlhbGl6ZSh7XG5cdFx0Y29tcG9uZW50SWQ6IGFwcElkXG5cdH0pO1xuXHRyZXN1bHRYTUwgPSBhd2FpdCBYbWxQcmVwcm9jZXNzb3IucHJvY2VzcyhyZXN1bHRYTUwsIHsgbmFtZTogXCJUZXN0IEZyYWdtZW50XCIsIGNvbXBvbmVudElkOiBhcHBJZCwgaWQ6IFRFU1RWSUVXSUQgfSk7XG5cblx0Ly9Bc3NlcnQgdGhhdCBhbGwgY2hhbmdlcyBoYXZlIGJlZW4gYXBwbGllZFxuXHRjb25zdCBjaGFuZ2VzQXBwbGllZCA9IGdldENoYW5nZXNGcm9tWE1MKHJlc3VsdFhNTCk7XG5cdGV4cGVjdChjaGFuZ2VzQXBwbGllZC5sZW5ndGgpLnRvQmUoZmxleENoYW5nZXM/LmNoYW5nZXM/Lmxlbmd0aCA/PyAwICsgZmxleENoYW5nZXM/LnZhcmlhbnREZXBlbmRlbnRDb250cm9sQ2hhbmdlcz8ubGVuZ3RoID8/IDApO1xuXHRyZXR1cm4gcmVzdWx0WE1MO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENoYW5nZXNGcm9tWE1MID0gKHhtbDogYW55KSA9PlxuXHRbLi4ueG1sLnF1ZXJ5U2VsZWN0b3JBbGwoXCIqXCIpXVxuXHRcdC5mbGF0TWFwKChlKSA9PiBbLi4uZS5hdHRyaWJ1dGVzXS5tYXAoKGEpID0+IGEubmFtZSkpXG5cdFx0LmZpbHRlcigoYXR0cikgPT4gYXR0ci5pbmNsdWRlcyhcInNhcC51aS5mbC5hcHBsaWVkQ2hhbmdlc1wiKSk7XG5cbmV4cG9ydCBjb25zdCBnZXRUZW1wbGF0aW5nUmVzdWx0ID0gYXN5bmMgZnVuY3Rpb24gKFxuXHR4bWxJbnB1dDogc3RyaW5nLFxuXHRzTWV0YWRhdGFVcmw6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0bUJpbmRpbmdDb250ZXh0czogeyBbeDogc3RyaW5nXTogYW55OyBlbnRpdHlTZXQ/OiBzdHJpbmcgfSxcblx0bU1vZGVsczogeyBbeDogc3RyaW5nXTogYW55IH0sXG5cdGZsZXhDaGFuZ2VzPzogeyBbeDogc3RyaW5nXTogb2JqZWN0W10gfSxcblx0ZmFrZVNpZGVFZmZlY3RTZXJ2aWNlPzogdW5rbm93blxuKSB7XG5cdGlmICghbU1vZGVsc1tcInNhcC5mZS5pMThuXCJdKSB7XG5cdFx0bU1vZGVsc1tcInNhcC5mZS5pMThuXCJdID0gY3JlYXRlTW9ja1Jlc291cmNlTW9kZWwoKTtcblx0fVxuXG5cdGNvbnN0IHRlbXBsYXRlZFhtbCA9IGA8cm9vdD4ke3htbElucHV0fTwvcm9vdD5gO1xuXHRjb25zdCBwYXJzZXIgPSBuZXcgd2luZG93LkRPTVBhcnNlcigpO1xuXHRjb25zdCB4bWxEb2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKHRlbXBsYXRlZFhtbCwgXCJ0ZXh0L3htbFwiKTtcblx0Ly8gVG8gZW5zdXJlIG91ciBtYWNybyBjYW4gdXNlICNzZXRCaW5kaW5nQ29udGV4dCB3ZSBlbnN1cmUgdGhlcmUgaXMgYSBwcmUgZXhpc3RpbmcgSlNPTk1vZGVsIGZvciBjb252ZXJ0ZXJDb250ZXh0XG5cdC8vIGlmIG5vdCBhbHJlYWR5IHBhc3NlZCB0byB0ZWggdGVtcGxhdGluZ1xuXG5cdGNvbnN0IG9QcmVwcm9jZXNzb3JTZXR0aW5ncyA9IGF3YWl0IF9idWlsZFByZVByb2Nlc3NvclNldHRpbmdzKHNNZXRhZGF0YVVybCwgbUJpbmRpbmdDb250ZXh0cywgbU1vZGVscywgZmFrZVNpZGVFZmZlY3RTZXJ2aWNlKTtcblxuXHQvL1RoaXMgY29udGV4dCBmb3IgbWFjcm8gdGVzdGluZ1xuXHRpZiAob1ByZXByb2Nlc3NvclNldHRpbmdzLm1vZGVsc1tcInRoaXNcIl0pIHtcblx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3MuYmluZGluZ0NvbnRleHRzW1widGhpc1wiXSA9IG9QcmVwcm9jZXNzb3JTZXR0aW5ncy5tb2RlbHNbXCJ0aGlzXCJdLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKTtcblx0fVxuXG5cdGxldCByZXN1bHRYTUwgPSAoYXdhaXQgWE1MUHJlcHJvY2Vzc29yLnByb2Nlc3MoeG1sRG9jLmZpcnN0RWxlbWVudENoaWxkISwgeyBuYW1lOiBcIlRlc3QgRnJhZ21lbnRcIiB9LCBvUHJlcHJvY2Vzc29yU2V0dGluZ3MpKSBhcyBhbnk7XG5cblx0aWYgKHNNZXRhZGF0YVVybCAmJiBmbGV4Q2hhbmdlcykge1xuXHRcdC8vIGFwcGx5IGZsZXggY2hhbmdlc1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBhd2FpdCBnZXRNZXRhTW9kZWwoc01ldGFkYXRhVXJsKTtcblx0XHRyZXN1bHRYTUwgPSBhd2FpdCBhcHBseUZsZXhDaGFuZ2VzKGZsZXhDaGFuZ2VzLCBvTWV0YU1vZGVsLCByZXN1bHRYTUwpO1xuXHR9XG5cdHJldHVybiByZXN1bHRYTUw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VGVtcGxhdGVkWE1MID0gYXN5bmMgZnVuY3Rpb24gKFxuXHR4bWxJbnB1dDogc3RyaW5nLFxuXHRzTWV0YWRhdGFVcmw6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0bUJpbmRpbmdDb250ZXh0czogeyBbeDogc3RyaW5nXTogc3RyaW5nIH0sXG5cdG1Nb2RlbHM6IHsgW3g6IHN0cmluZ106IGFueSB9LFxuXHRmbGV4Q2hhbmdlcz86IHsgW3g6IHN0cmluZ106IG9iamVjdFtdIH0sXG5cdGZha2VTaWRlRWZmZWN0U2VydmljZT86IHVua25vd25cbik6IFByb21pc2U8c3RyaW5nPiB7XG5cdHJldHVybiBqc3guZGVmaW5lWE1MTmFtZXNwYWNlTWFwKHJldmVzZU5hbWVzcGFjZU1hcCwgYXN5bmMgKCkgPT4ge1xuXHRcdGNvbnN0IHRlbXBsYXRlZFhNTCA9IGF3YWl0IGdldFRlbXBsYXRpbmdSZXN1bHQoXG5cdFx0XHR4bWxJbnB1dCxcblx0XHRcdHNNZXRhZGF0YVVybCxcblx0XHRcdG1CaW5kaW5nQ29udGV4dHMsXG5cdFx0XHRtTW9kZWxzLFxuXHRcdFx0ZmxleENoYW5nZXMsXG5cdFx0XHRmYWtlU2lkZUVmZmVjdFNlcnZpY2Vcblx0XHQpO1xuXHRcdGNvbnN0IHNlcmlhbGllZFhNTCA9IHNlcmlhbGl6ZVhNTCh0ZW1wbGF0ZWRYTUwsIHVuZGVmaW5lZCk7XG5cdFx0ZXhwZWN0KHNlcmlhbGllZFhNTCkubm90LnRvSGF2ZVRlbXBsYXRpbmdFcnJvcnMoKTtcblx0XHRyZXR1cm4gc2VyaWFsaWVkWE1MO1xuXHR9KSBhcyB1bmtub3duIGFzIFByb21pc2U8c3RyaW5nPjtcbn07XG5cbi8qKlxuICogUHJvY2VzcyB0aGUgcmVxdWVzdGVkIHZpZXcgd2l0aCB0aGUgcHJvdmlkZWQgZGF0YS5cbiAqIEBwYXJhbSBuYW1lIEZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSB2aWV3IHRvIGJlIHRlc3RlZC5cbiAqIEBwYXJhbSBzTWV0YWRhdGFVcmwgVXJsIG9mIHRoZSBtZXRhZGF0YS5cbiAqIEBwYXJhbSBtQmluZGluZ0NvbnRleHRzIE1hcCBvZiB0aGUgYmluZGluZ0NvbnRleHRzIHRvIHNldCBvbiB0aGUgbW9kZWxzLlxuICogQHBhcmFtIG1Nb2RlbHMgTWFwIG9mIHRoZSBtb2RlbHMuXG4gKiBAcGFyYW0gZmxleENoYW5nZXMgT2JqZWN0IHdpdGggVUkgY2hhbmdlcyBsaWtlICdjaGFuZ2VzJyBvciAndmFyaWFudERlcGVuZGVudENvbnRyb2xDaGFuZ2VzJ1xuICogQHJldHVybnMgVGVtcGxhdGVkIHZpZXcgYXMgc3RyaW5nXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzVmlldyhcblx0bmFtZTogc3RyaW5nLFxuXHRzTWV0YWRhdGFVcmw6IHN0cmluZyxcblx0bUJpbmRpbmdDb250ZXh0czogeyBbeDogc3RyaW5nXTogc3RyaW5nIH0sXG5cdG1Nb2RlbHM6IHsgW3g6IHN0cmluZ106IGFueSB9LFxuXHRmbGV4Q2hhbmdlcz86IHsgW3g6IHN0cmluZ106IG9iamVjdFtdIH1cbik6IFByb21pc2U8SmVzdFRlbXBsYXRlZFZpZXc+IHtcblx0Y29uc3Qgb01ldGFNb2RlbCA9IGF3YWl0IGdldE1ldGFNb2RlbChzTWV0YWRhdGFVcmwpO1xuXHRjb25zdCBvVmlld0RvY3VtZW50ID0gX2xvYWRSZXNvdXJjZVZpZXcobmFtZSk7XG5cdGNvbnN0IG9QcmVwcm9jZXNzb3JTZXR0aW5ncyA9IGF3YWl0IF9idWlsZFByZVByb2Nlc3NvclNldHRpbmdzKHNNZXRhZGF0YVVybCwgbUJpbmRpbmdDb250ZXh0cywgbU1vZGVscyk7XG5cdGxldCBvUHJlcHJvY2Vzc2VkVmlldyA9IGF3YWl0IFhNTFByZXByb2Nlc3Nvci5wcm9jZXNzKG9WaWV3RG9jdW1lbnQsIHsgbmFtZTogbmFtZSB9LCBvUHJlcHJvY2Vzc29yU2V0dGluZ3MpO1xuXHRpZiAoZmxleENoYW5nZXMpIHtcblx0XHRvUHJlcHJvY2Vzc2VkVmlldyA9IGF3YWl0IGFwcGx5RmxleENoYW5nZXMoZmxleENoYW5nZXMgPz8gW10sIG9NZXRhTW9kZWwsIG9QcmVwcm9jZXNzZWRWaWV3KTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdGFzRWxlbWVudDogb1ByZXByb2Nlc3NlZFZpZXcsXG5cdFx0YXNTdHJpbmc6IGZvcm1hdFhNTChvUHJlcHJvY2Vzc2VkVmlldz8ub3V0ZXJIVE1MIHx8IFwiXCIpXG5cdH07XG59XG5cbi8qKlxuICogUHJvY2VzcyB0aGUgcmVxdWVzdGVkIFhNTCBmcmFnbWVudCB3aXRoIHRoZSBwcm92aWRlZCBkYXRhLlxuICogQHBhcmFtIG5hbWUgRnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIGZyYWdtZW50IHRvIGJlIHRlc3RlZC5cbiAqIEBwYXJhbSB0ZXN0RGF0YSBUZXN0IGRhdGEgY29uc2lzdGluZ1xuICogQHJldHVybnMgVGVtcGxhdGVkIGZyYWdtZW50IGFzIHN0cmluZ1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0ZyYWdtZW50KG5hbWU6IHN0cmluZywgdGVzdERhdGE6IHsgW21vZGVsOiBzdHJpbmddOiBvYmplY3QgfSk6IFByb21pc2U8c3RyaW5nPiB7XG5cdGNvbnN0IGlucHV0WG1sID0gYDxyb290Pjxjb3JlOkZyYWdtZW50IGZyYWdtZW50TmFtZT1cIiR7bmFtZX1cIiB0eXBlPVwiWE1MXCIgeG1sbnM6Y29yZT1cInNhcC51aS5jb3JlXCIgLz48L3Jvb3Q+YDtcblx0Y29uc3QgcGFyc2VyID0gbmV3IHdpbmRvdy5ET01QYXJzZXIoKTtcblxuXHRjb25zdCBpbnB1dERvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoaW5wdXRYbWwsIFwidGV4dC94bWxcIik7XG5cblx0Ly8gYnVpbGQgbW9kZWwgYW5kIGJpbmRpbmdzIGZvciBnaXZlbiB0ZXN0IGRhdGFcblx0Y29uc3Qgc2V0dGluZ3MgPSB7XG5cdFx0bW9kZWxzOiB7fSBhcyB7IFtuYW1lOiBzdHJpbmddOiBKU09OTW9kZWwgfSxcblx0XHRiaW5kaW5nQ29udGV4dHM6IHt9IGFzIHsgW25hbWU6IHN0cmluZ106IG9iamVjdCB9LFxuXHRcdGFwcENvbXBvbmVudDogeyBnZXRTaWRlRWZmZWN0c1NlcnZpY2U6IGplc3QuZm4oKSwgZ2V0RGlhZ25vc3RpY3M6ICgpID0+IHVuZGVmaW5lZCB9XG5cdH07XG5cdGZvciAoY29uc3QgbW9kZWwgaW4gdGVzdERhdGEpIHtcblx0XHRjb25zdCBqc29uTW9kZWwgPSBuZXcgSlNPTk1vZGVsKCk7XG5cdFx0anNvbk1vZGVsLnNldERhdGEodGVzdERhdGFbbW9kZWxdKTtcblx0XHRzZXR0aW5ncy5tb2RlbHNbbW9kZWxdID0ganNvbk1vZGVsO1xuXHRcdHNldHRpbmdzLmJpbmRpbmdDb250ZXh0c1ttb2RlbF0gPSBzZXR0aW5ncy5tb2RlbHNbbW9kZWxdLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKTtcblx0fVxuXHRzZXR0aW5ncy5hcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlLm1vY2tSZXR1cm5WYWx1ZShkZWZhdWx0RmFrZVNpZGVFZmZlY3RTZXJ2aWNlKTtcblxuXHQvLyBleGVjdXRlIHRoZSBwcmUtcHJvY2Vzc29yXG5cdGNvbnN0IHJlc3VsdERvYyA9IGF3YWl0IFhNTFByZXByb2Nlc3Nvci5wcm9jZXNzKGlucHV0RG9jLmZpcnN0RWxlbWVudENoaWxkLCB7IG5hbWUgfSwgc2V0dGluZ3MpO1xuXG5cdC8vIGV4Y2x1ZGUgbmVzdGVkIGZyYWdtZW50cyBmcm9tIHRlc3Qgc25hcHNob3RzXG5cdGNvbnN0IGZyYWdtZW50cyA9IHJlc3VsdERvYy5nZXRFbGVtZW50c0J5VGFnTmFtZShcImNvcmU6RnJhZ21lbnRcIikgYXMgYW55O1xuXHRpZiAoZnJhZ21lbnRzPy5sZW5ndGggPiAwKSB7XG5cdFx0Zm9yIChjb25zdCBmcmFnbWVudCBvZiBmcmFnbWVudHMpIHtcblx0XHRcdGZyYWdtZW50LmlubmVySFRNTCA9IFwiXCI7XG5cdFx0fVxuXHR9XG5cblx0Ly8gS2VlcCB0aGUgZnJhZ21lbnQgcmVzdWx0IGFzIGNoaWxkIG9mIHJvb3Qgbm9kZSB3aGVuIGZyYWdtZW50IGdlbmVyYXRlcyBtdWx0aXBsZSByb290IGNvbnRyb2xzXG5cdGNvbnN0IHhtbFJlc3VsdCA9IHJlc3VsdERvYy5jaGlsZHJlbi5sZW5ndGggPiAxID8gcmVzdWx0RG9jLm91dGVySFRNTCA6IHJlc3VsdERvYy5pbm5lckhUTUw7XG5cblx0cmV0dXJuIGZvcm1hdFhNTCh4bWxSZXN1bHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplQ29udHJvbChjb250cm9sVG9TZXJpYWxpemU/OiBVSTVFbGVtZW50IHwgVUk1RWxlbWVudFtdLCBzaG93Q3VzdG9tU3R5bGVDbGFzc2VzID0gZmFsc2UpIHtcblx0bGV0IHRhYkNvdW50ID0gMDtcblx0Y29uc3QgVUlEID0gL3VpZC0taWQtXFxkezEzfS1cXGR7MSwzfS87XG5cdGNvbnN0IENPTlRST0xJRCA9IC9pZC1cXGR7MTN9LVxcZHsxLDN9Lztcblx0ZnVuY3Rpb24gZ2V0VGFiKHRvQWRkID0gMCkge1xuXHRcdGxldCB0YWIgPSBcIlwiO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGFiQ291bnQgKyB0b0FkZDsgaSsrKSB7XG5cdFx0XHR0YWIgKz0gXCJcXHRcIjtcblx0XHR9XG5cdFx0cmV0dXJuIHRhYjtcblx0fVxuXHRjb25zdCBzZXJpYWxpemVEZWxlZ2F0ZSA9IHtcblx0XHRzdGFydDogZnVuY3Rpb24gKGNvbnRyb2w6IGFueSwgc0FnZ3JlZ2F0aW9uTmFtZTogc3RyaW5nKSB7XG5cdFx0XHRsZXQgY29udHJvbERldGFpbCA9IFwiXCI7XG5cdFx0XHRpZiAoc0FnZ3JlZ2F0aW9uTmFtZSkge1xuXHRcdFx0XHRpZiAoY29udHJvbC5nZXRQYXJlbnQoKSkge1xuXHRcdFx0XHRcdGNvbnN0IGluZGV4SW5QYXJlbnQgPSAoY29udHJvbC5nZXRQYXJlbnQoKS5nZXRBZ2dyZWdhdGlvbihzQWdncmVnYXRpb25OYW1lKSBhcyBNYW5hZ2VkT2JqZWN0W10pPy5pbmRleE9mPy4oY29udHJvbCk7XG5cdFx0XHRcdFx0aWYgKGluZGV4SW5QYXJlbnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRjb250cm9sRGV0YWlsICs9IGAsXFxuJHtnZXRUYWIoKX1gO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Y29udHJvbERldGFpbCArPSBgJHtjb250cm9sLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpfShgO1xuXHRcdFx0cmV0dXJuIGNvbnRyb2xEZXRhaWw7XG5cdFx0fSxcblx0XHRlbmQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBcIn0pXCI7XG5cdFx0fSxcblx0XHRtaWRkbGU6IGZ1bmN0aW9uIChjb250cm9sOiBhbnkpIHtcblx0XHRcdGxldCBpZCA9IGNvbnRyb2wuZ2V0SWQoKTtcblx0XHRcdGlkID0gdHlwZW9mIGlkID09PSBcInN0cmluZ1wiID8gaWQ/LnJlcGxhY2U/LihDT05UUk9MSUQsIFwiaWRcIikgOiBpZDtcblx0XHRcdGxldCBkYXRhID0gYHtpZDogJHtNYW5hZ2VkT2JqZWN0TWV0YWRhdGEuaXNHZW5lcmF0ZWRJZChpZCkgPyBcIl9fZHluYW1pY0lkXCIgOiBpZH1gO1xuXHRcdFx0Zm9yIChjb25zdCBvQ29udHJvbEtleSBpbiBjb250cm9sLm1Qcm9wZXJ0aWVzKSB7XG5cdFx0XHRcdGlmIChjb250cm9sLm1Qcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KG9Db250cm9sS2V5KSkge1xuXHRcdFx0XHRcdGxldCBwcm9wZXJ0eVZhbHVlID0gY29udHJvbC5tUHJvcGVydGllc1tvQ29udHJvbEtleV07XG5cdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IHR5cGVvZiBwcm9wZXJ0eVZhbHVlID09PSBcInN0cmluZ1wiID8gcHJvcGVydHlWYWx1ZT8ucmVwbGFjZT8uKFVJRCwgXCJ1aWQtLWlkXCIpIDogcHJvcGVydHlWYWx1ZTtcblx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gdHlwZW9mIHByb3BlcnR5VmFsdWUgPT09IFwic3RyaW5nXCIgPyBwcm9wZXJ0eVZhbHVlPy5yZXBsYWNlPy4oQ09OVFJPTElELCBcImlkXCIpIDogcHJvcGVydHlWYWx1ZTtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IHR5cGVvZiBwcm9wZXJ0eVZhbHVlID09PSBcIm9iamVjdFwiID8gSlNPTi5zdHJpbmdpZnkocHJvcGVydHlWYWx1ZSkgOiBwcm9wZXJ0eVZhbHVlO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdC8vIFN0cmluZ2lmeSBtYXkgZmFpbCBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlcyBidXQgaXQncyBub3QgdGhlIGVuZCBvZiB0aGUgd29ybGRcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRkYXRhICs9IGAsXFxuJHtnZXRUYWIoKX0gJHtvQ29udHJvbEtleX06ICR7cHJvcGVydHlWYWx1ZX1gO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGNvbnRyb2wubUJpbmRpbmdJbmZvcy5oYXNPd25Qcm9wZXJ0eShvQ29udHJvbEtleSkpIHtcblx0XHRcdFx0XHRjb25zdCBiaW5kaW5nRGV0YWlsID0geyAuLi5jb250cm9sLm1CaW5kaW5nSW5mb3Nbb0NvbnRyb2xLZXldIH07XG5cdFx0XHRcdFx0aWYgKGJpbmRpbmdEZXRhaWwudHlwZT8ub091dHB1dEZvcm1hdCkge1xuXHRcdFx0XHRcdFx0ZGVsZXRlIGJpbmRpbmdEZXRhaWwudHlwZS5vT3V0cHV0Rm9ybWF0O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoYmluZGluZ0RldGFpbC5iaW5kaW5nKSB7XG5cdFx0XHRcdFx0XHRkZWxldGUgYmluZGluZ0RldGFpbC5iaW5kaW5nO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkYXRhICs9IGAsXFxuJHtnZXRUYWIoKX0gJHtvQ29udHJvbEtleX06ICR7SlNPTi5zdHJpbmdpZnkoYmluZGluZ0RldGFpbCl9YDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Zm9yIChjb25zdCBvQ29udHJvbEtleSBpbiBjb250cm9sLm1Bc3NvY2lhdGlvbnMpIHtcblx0XHRcdFx0aWYgKGNvbnRyb2wubUFzc29jaWF0aW9ucy5oYXNPd25Qcm9wZXJ0eShvQ29udHJvbEtleSkpIHtcblx0XHRcdFx0XHRsZXQgYXNzb2NpYXRpb25WYWx1ZSA9IGNvbnRyb2wubUFzc29jaWF0aW9uc1tvQ29udHJvbEtleV07XG5cdFx0XHRcdFx0aWYgKCFBcnJheS5pc0FycmF5KGFzc29jaWF0aW9uVmFsdWUpKSB7XG5cdFx0XHRcdFx0XHRhc3NvY2lhdGlvblZhbHVlID0gW2Fzc29jaWF0aW9uVmFsdWVdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRhc3NvY2lhdGlvblZhbHVlID0gYXNzb2NpYXRpb25WYWx1ZS5tYXAoKGFzc29jaWF0aW9uVmFsdWVFbGVtZW50OiBzdHJpbmcpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiB0eXBlb2YgYXNzb2NpYXRpb25WYWx1ZUVsZW1lbnQgPT09IFwic3RyaW5nXCJcblx0XHRcdFx0XHRcdFx0PyBhc3NvY2lhdGlvblZhbHVlRWxlbWVudD8ucmVwbGFjZT8uKENPTlRST0xJRCwgXCJpZFwiKVxuXHRcdFx0XHRcdFx0XHQ6IGFzc29jaWF0aW9uVmFsdWVFbGVtZW50O1xuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0ZGF0YSArPSBgLFxcbiR7Z2V0VGFiKCl9ICR7b0NvbnRyb2xLZXl9OiAkeyhhc3NvY2lhdGlvblZhbHVlPy5qb2luPy4oXCIsXCIpID8/IGFzc29jaWF0aW9uVmFsdWUpIHx8IHVuZGVmaW5lZH1gO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoc2hvd0N1c3RvbVN0eWxlQ2xhc3NlcyAmJiBjb250cm9sLmFDdXN0b21TdHlsZUNsYXNzZXM/Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0ZGF0YSArPSBgLFxcbiR7Z2V0VGFiKCl9IGN1c3RvbVN0eWxlQ2xhc3NlcyA6ICR7Y29udHJvbC5hQ3VzdG9tU3R5bGVDbGFzc2VzLmpvaW4oXCIsIFwiKX1gO1xuXHRcdFx0fVxuXHRcdFx0Zm9yIChjb25zdCBvQ29udHJvbEtleSBpbiBjb250cm9sLm1FdmVudFJlZ2lzdHJ5KSB7XG5cdFx0XHRcdGlmIChjb250cm9sLm1FdmVudFJlZ2lzdHJ5Lmhhc093blByb3BlcnR5KG9Db250cm9sS2V5KSkge1xuXHRcdFx0XHRcdGRhdGEgKz0gYCxcXG4ke2dldFRhYigpfSAke29Db250cm9sS2V5fTogdHJ1ZWA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGRhdGEgKz0gYGA7XG5cdFx0XHRyZXR1cm4gZGF0YTtcblx0XHR9LFxuXHRcdHN0YXJ0QWdncmVnYXRpb246IGZ1bmN0aW9uIChjb250cm9sOiB7IG1CaW5kaW5nSW5mb3M6IFJlY29yZDxzdHJpbmcsIEJhc2VBZ2dyZWdhdGlvbkJpbmRpbmdJbmZvPiB9LCBzTmFtZTogc3RyaW5nKSB7XG5cdFx0XHRsZXQgb3V0ID0gYCxcXG4ke2dldFRhYigpfSR7c05hbWV9YDtcblx0XHRcdHRhYkNvdW50Kys7XG5cblx0XHRcdGlmIChjb250cm9sLm1CaW5kaW5nSW5mb3Nbc05hbWVdKSB7XG5cdFx0XHRcdG91dCArPSBgPXsgcGF0aDonJHtjb250cm9sLm1CaW5kaW5nSW5mb3Nbc05hbWVdLnBhdGh9JywgdGVtcGxhdGU6XFxuJHtnZXRUYWIoKX1gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0ICs9IGA9W1xcbiR7Z2V0VGFiKCl9YDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBvdXQ7XG5cdFx0fSxcblx0XHRlbmRBZ2dyZWdhdGlvbjogZnVuY3Rpb24gKGNvbnRyb2w6IGFueSwgc05hbWU6IHN0cmluZykge1xuXHRcdFx0dGFiQ291bnQtLTtcblx0XHRcdGlmIChjb250cm9sLm1CaW5kaW5nSW5mb3Nbc05hbWVdKSB7XG5cdFx0XHRcdHJldHVybiBgXFxuJHtnZXRUYWIoKX19YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBgXFxuJHtnZXRUYWIoKX1dYDtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGlmIChBcnJheS5pc0FycmF5KGNvbnRyb2xUb1NlcmlhbGl6ZSkpIHtcblx0XHRyZXR1cm4gY29udHJvbFRvU2VyaWFsaXplLm1hcCgoY29udHJvbFRvUmVuZGVyOiBVSTVFbGVtZW50KSA9PiB7XG5cdFx0XHRyZXR1cm4gbmV3IFNlcmlhbGl6ZXIoY29udHJvbFRvUmVuZGVyLCBzZXJpYWxpemVEZWxlZ2F0ZSkuc2VyaWFsaXplKCk7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIG5ldyBTZXJpYWxpemVyKGNvbnRyb2xUb1NlcmlhbGl6ZSwgc2VyaWFsaXplRGVsZWdhdGUpLnNlcmlhbGl6ZSgpO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVDb250cm9sQXNYTUwoY29udHJvbFRvU2VyaWFsaXplPzogVUk1RWxlbWVudCB8IFVJNUVsZW1lbnRbXSwgc2hvd0N1c3RvbVN0eWxlQ2xhc3NlcyA9IGZhbHNlKSB7XG5cdGxldCB0YWJDb3VudCA9IDA7XG5cdGNvbnN0IFVJRCA9IC91aWQtLWlkLVxcZHsxM30tXFxkezEsM30vO1xuXHRjb25zdCBDT05UUk9MSUQgPSAvaWQtXFxkezEzfS1cXGR7MSwzfS87XG5cdGNvbnN0IGRlZmluZWROYW1lc3BhY2VzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuXG5cdGZ1bmN0aW9uIGdldE5hbWVzcGFjZUFsaWFzKGNsYXNzTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRjb25zdCBuYW1lc1NwbGl0ID0gY2xhc3NOYW1lLnNwbGl0KFwiLlwiKTtcblx0XHRjb25zdCBuYW1lc3BhY2UgPSBuYW1lc1NwbGl0LnNsaWNlKDAsIC0xKTtcblx0XHRjb25zdCBuYW1lID0gbmFtZXNTcGxpdFtuYW1lc1NwbGl0Lmxlbmd0aCAtIDFdO1xuXHRcdGxldCBuYW1lc3BhY2VBbGlhcyA9IG5hbWVzcGFjZVtuYW1lc3BhY2UubGVuZ3RoIC0gMV07XG5cdFx0aWYgKHJldmVzZU5hbWVzcGFjZU1hcFtuYW1lc3BhY2Uuam9pbihcIi5cIildKSB7XG5cdFx0XHRuYW1lc3BhY2VBbGlhcyA9IHJldmVzZU5hbWVzcGFjZU1hcFtuYW1lc3BhY2Uuam9pbihcIi5cIildO1xuXHRcdH1cblx0XHRpZiAobmFtZXNwYWNlQWxpYXMgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0bmFtZXNwYWNlQWxpYXMgPSBcInRlc3RcIjtcblx0XHR9XG5cdFx0cmV0dXJuIG5hbWVzcGFjZUFsaWFzO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0VGFiKHRvQWRkID0gMCkge1xuXHRcdGxldCB0YWIgPSBcIlwiO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGFiQ291bnQgKyB0b0FkZDsgaSsrKSB7XG5cdFx0XHR0YWIgKz0gXCJcXHRcIjtcblx0XHR9XG5cdFx0cmV0dXJuIHRhYjtcblx0fVxuXHRjb25zdCBzZXJpYWxpemVEZWxlZ2F0ZSA9IHtcblx0XHRzdGFydDogZnVuY3Rpb24gKGNvbnRyb2w6IGFueSwgc0FnZ3JlZ2F0aW9uTmFtZTogc3RyaW5nKSB7XG5cdFx0XHRsZXQgY29udHJvbERldGFpbCA9IFwiXCI7XG5cdFx0XHRpZiAoc0FnZ3JlZ2F0aW9uTmFtZSkge1xuXHRcdFx0XHRpZiAoY29udHJvbC5nZXRQYXJlbnQoKSkge1xuXHRcdFx0XHRcdGNvbnN0IGluZGV4SW5QYXJlbnQgPSAoY29udHJvbC5nZXRQYXJlbnQoKS5nZXRBZ2dyZWdhdGlvbihzQWdncmVnYXRpb25OYW1lKSBhcyBNYW5hZ2VkT2JqZWN0W10pPy5pbmRleE9mPy4oY29udHJvbCk7XG5cdFx0XHRcdFx0aWYgKGluZGV4SW5QYXJlbnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRjb250cm9sRGV0YWlsICs9IGBcXG4ke2dldFRhYigpfWA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBuYW1lRnVsbCA9IGNvbnRyb2wuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCk7XG5cdFx0XHRjb25zdCBuYW1lc1NwbGl0ID0gbmFtZUZ1bGwuc3BsaXQoXCIuXCIpO1xuXHRcdFx0Y29uc3QgbmFtZSA9IG5hbWVzU3BsaXRbbmFtZXNTcGxpdC5sZW5ndGggLSAxXTtcblx0XHRcdGNvbnN0IG5hbWVzcGFjZUFsaWFzID0gZ2V0TmFtZXNwYWNlQWxpYXMobmFtZUZ1bGwpO1xuXHRcdFx0Y29udHJvbERldGFpbCArPSBgPCR7bmFtZXNwYWNlQWxpYXN9OiR7bmFtZX1cXG5gO1xuXHRcdFx0aWYgKCFkZWZpbmVkTmFtZXNwYWNlc1tuYW1lc3BhY2VBbGlhc10pIHtcblx0XHRcdFx0ZGVmaW5lZE5hbWVzcGFjZXNbbmFtZXNwYWNlQWxpYXNdID0gdHJ1ZTtcblx0XHRcdFx0Y29udHJvbERldGFpbCArPSBgJHtnZXRUYWIoKX14bWxuczoke25hbWVzcGFjZUFsaWFzfT1cIiR7bmFtZVNwYWNlTWFwW25hbWVzcGFjZUFsaWFzXX1cImA7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY29udHJvbERldGFpbDtcblx0XHR9LFxuXHRcdGVuZDogZnVuY3Rpb24gKGNvbnRyb2w6IGFueSkge1xuXHRcdFx0Y29uc3QgbmFtZUZ1bGwgPSBjb250cm9sLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpO1xuXHRcdFx0Y29uc3QgbmFtZXNTcGxpdCA9IG5hbWVGdWxsLnNwbGl0KFwiLlwiKTtcblx0XHRcdGNvbnN0IG5hbWUgPSBuYW1lc1NwbGl0W25hbWVzU3BsaXQubGVuZ3RoIC0gMV07XG5cdFx0XHRjb25zdCBuYW1lc3BhY2VBbGlhcyA9IGdldE5hbWVzcGFjZUFsaWFzKG5hbWVGdWxsKTtcblx0XHRcdGxldCBoYXNBZ2dyZWdhdGlvbiA9IGZhbHNlO1xuXHRcdFx0Zm9yIChjb25zdCBtQWdncmVnYXRpb25zS2V5IGluIGNvbnRyb2wubUFnZ3JlZ2F0aW9ucykge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0KCFBcnJheS5pc0FycmF5KGNvbnRyb2wubUFnZ3JlZ2F0aW9uc1ttQWdncmVnYXRpb25zS2V5XSkgJiZcblx0XHRcdFx0XHRcdGNvbnRyb2wubUFnZ3JlZ2F0aW9uc1ttQWdncmVnYXRpb25zS2V5XSAhPT0gbnVsbCAmJlxuXHRcdFx0XHRcdFx0Y29udHJvbC5tQWdncmVnYXRpb25zW21BZ2dyZWdhdGlvbnNLZXldICE9PSB1bmRlZmluZWQpIHx8XG5cdFx0XHRcdFx0KEFycmF5LmlzQXJyYXkoY29udHJvbC5tQWdncmVnYXRpb25zW21BZ2dyZWdhdGlvbnNLZXldKSAmJiBjb250cm9sLm1BZ2dyZWdhdGlvbnNbbUFnZ3JlZ2F0aW9uc0tleV0ubGVuZ3RoID4gMClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0aGFzQWdncmVnYXRpb24gPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoaGFzQWdncmVnYXRpb24pIHtcblx0XHRcdFx0cmV0dXJuIGA8LyR7bmFtZXNwYWNlQWxpYXN9OiR7bmFtZX0+YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBgLz5gO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0bWlkZGxlOiBmdW5jdGlvbiAoY29udHJvbDogYW55KSB7XG5cdFx0XHRsZXQgaWQgPSBjb250cm9sLmdldElkKCk7XG5cdFx0XHRpZCA9IHR5cGVvZiBpZCA9PT0gXCJzdHJpbmdcIiA/IGlkPy5yZXBsYWNlPy4oQ09OVFJPTElELCBcImlkXCIpIDogaWQ7XG5cdFx0XHRsZXQgZGF0YSA9IFwiXCI7XG5cdFx0XHRpZiAoIU1hbmFnZWRPYmplY3RNZXRhZGF0YS5pc0dlbmVyYXRlZElkKGlkKSkge1xuXHRcdFx0XHRkYXRhID0gYGlkPVwiJHtpZH1cImA7XG5cdFx0XHR9XG5cdFx0XHRsZXQga2V5cyA9IE9iamVjdC5rZXlzKGNvbnRyb2wubVByb3BlcnRpZXMpXG5cdFx0XHRcdC5jb25jYXQoT2JqZWN0LmtleXMoY29udHJvbC5tQmluZGluZ0luZm9zKSlcblx0XHRcdFx0LmNvbmNhdChPYmplY3Qua2V5cyhjb250cm9sLm1Bc3NvY2lhdGlvbnMpKVxuXHRcdFx0XHQuY29uY2F0KE9iamVjdC5rZXlzKGNvbnRyb2wubUV2ZW50UmVnaXN0cnkpKTtcblx0XHRcdGtleXMgPSBrZXlzLnNvcnQoKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiKSk7XG5cdFx0XHRjb25zdCB1bmlxdWVLZXlzID0gbmV3IFNldChrZXlzKTtcblx0XHRcdGtleXMgPSBBcnJheS5mcm9tKHVuaXF1ZUtleXMpO1xuXHRcdFx0Zm9yIChjb25zdCBvQ29udHJvbEtleSBvZiBrZXlzKSB7XG5cdFx0XHRcdGlmIChjb250cm9sLm1CaW5kaW5nSW5mb3MuaGFzT3duUHJvcGVydHkob0NvbnRyb2xLZXkpKSB7XG5cdFx0XHRcdFx0Y29uc3QgYmluZGluZ0RldGFpbCA9IHsgLi4uY29udHJvbC5tQmluZGluZ0luZm9zW29Db250cm9sS2V5XSB9O1xuXHRcdFx0XHRcdGlmIChiaW5kaW5nRGV0YWlsLmJpbmRpbmdTdHJpbmcpIHtcblx0XHRcdFx0XHRcdGRhdGEgKz0gYFxcbiR7Z2V0VGFiKCl9JHtvQ29udHJvbEtleX09XCIke2JpbmRpbmdEZXRhaWwuYmluZGluZ1N0cmluZy5yZXBsYWNlKFwiPlwiLCBcIiZndDtcIil9XCJgO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZiAoYmluZGluZ0RldGFpbC50eXBlPy5vT3V0cHV0Rm9ybWF0KSB7XG5cdFx0XHRcdFx0XHRcdGRlbGV0ZSBiaW5kaW5nRGV0YWlsLnR5cGUub091dHB1dEZvcm1hdDtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKGJpbmRpbmdEZXRhaWwuYmluZGluZykge1xuXHRcdFx0XHRcdFx0XHRkZWxldGUgYmluZGluZ0RldGFpbC5iaW5kaW5nO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKGJpbmRpbmdEZXRhaWwudGVtcGxhdGUpIHtcblx0XHRcdFx0XHRcdFx0ZGVsZXRlIGJpbmRpbmdEZXRhaWwudGVtcGxhdGU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRkYXRhICs9IGBcXG4ke2dldFRhYigpfSR7b0NvbnRyb2xLZXl9PScke0pTT04uc3RyaW5naWZ5KGJpbmRpbmdEZXRhaWwpfSdgO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChjb250cm9sLm1Qcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KG9Db250cm9sS2V5KSAmJiBjb250cm9sLm1Qcm9wZXJ0aWVzW29Db250cm9sS2V5XSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0bGV0IHByb3BlcnR5VmFsdWUgPSBjb250cm9sLm1Qcm9wZXJ0aWVzW29Db250cm9sS2V5XTtcblx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gdHlwZW9mIHByb3BlcnR5VmFsdWUgPT09IFwic3RyaW5nXCIgPyBwcm9wZXJ0eVZhbHVlPy5yZXBsYWNlPy4oVUlELCBcInVpZC0taWRcIikgOiBwcm9wZXJ0eVZhbHVlO1xuXHRcdFx0XHRcdHByb3BlcnR5VmFsdWUgPSB0eXBlb2YgcHJvcGVydHlWYWx1ZSA9PT0gXCJzdHJpbmdcIiA/IHByb3BlcnR5VmFsdWU/LnJlcGxhY2U/LihDT05UUk9MSUQsIFwiaWRcIikgOiBwcm9wZXJ0eVZhbHVlO1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gdHlwZW9mIHByb3BlcnR5VmFsdWUgPT09IFwib2JqZWN0XCIgPyBKU09OLnN0cmluZ2lmeShwcm9wZXJ0eVZhbHVlKSA6IHByb3BlcnR5VmFsdWU7XG5cdFx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdFx0Ly8gU3RyaW5naWZ5IG1heSBmYWlsIGZvciBjaXJjdWxhciByZWZlcmVuY2VzIGJ1dCBpdCdzIG5vdCB0aGUgZW5kIG9mIHRoZSB3b3JsZFxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGRhdGEgKz0gYFxcbiR7Z2V0VGFiKCl9ICR7b0NvbnRyb2xLZXl9PVwiJHtwcm9wZXJ0eVZhbHVlfVwiYDtcblx0XHRcdFx0fSBlbHNlIGlmIChjb250cm9sLm1Bc3NvY2lhdGlvbnMuaGFzT3duUHJvcGVydHkob0NvbnRyb2xLZXkpKSB7XG5cdFx0XHRcdFx0bGV0IGFzc29jaWF0aW9uVmFsdWUgPSBjb250cm9sLm1Bc3NvY2lhdGlvbnNbb0NvbnRyb2xLZXldO1xuXHRcdFx0XHRcdGlmICghQXJyYXkuaXNBcnJheShhc3NvY2lhdGlvblZhbHVlKSkge1xuXHRcdFx0XHRcdFx0YXNzb2NpYXRpb25WYWx1ZSA9IFthc3NvY2lhdGlvblZhbHVlXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YXNzb2NpYXRpb25WYWx1ZSA9IGFzc29jaWF0aW9uVmFsdWUubWFwKChhc3NvY2lhdGlvblZhbHVlRWxlbWVudDogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHlwZW9mIGFzc29jaWF0aW9uVmFsdWVFbGVtZW50ID09PSBcInN0cmluZ1wiXG5cdFx0XHRcdFx0XHRcdD8gYXNzb2NpYXRpb25WYWx1ZUVsZW1lbnQ/LnJlcGxhY2U/LihDT05UUk9MSUQsIFwiaWRcIilcblx0XHRcdFx0XHRcdFx0OiBhc3NvY2lhdGlvblZhbHVlRWxlbWVudDtcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdGRhdGEgKz0gYFxcbiR7Z2V0VGFiKCl9ICR7b0NvbnRyb2xLZXl9PVwiJHsoYXNzb2NpYXRpb25WYWx1ZT8uam9pbj8uKFwiLFwiKSA/PyBhc3NvY2lhdGlvblZhbHVlKSB8fCB1bmRlZmluZWR9XCJgO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGNvbnRyb2wubUV2ZW50UmVnaXN0cnkuaGFzT3duUHJvcGVydHkob0NvbnRyb2xLZXkpKSB7XG5cdFx0XHRcdFx0aWYgKGNvbnRyb2wubUV2ZW50UmVnaXN0cnlbb0NvbnRyb2xLZXldWzBdPy5mRnVuY3Rpb24/Lm5hbWUpIHtcblx0XHRcdFx0XHRcdGRhdGEgKz0gYFxcbiR7Z2V0VGFiKCl9ICR7b0NvbnRyb2xLZXl9PVwiJHtjb250cm9sLm1FdmVudFJlZ2lzdHJ5W29Db250cm9sS2V5XVswXT8uZkZ1bmN0aW9uPy5uYW1lfVwiYDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0ZGF0YSArPSBgXFxuJHtnZXRUYWIoKX0gJHtvQ29udHJvbEtleX09XCJzb21lRXZlbnRIYW5kbGVyXCJgO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKHNob3dDdXN0b21TdHlsZUNsYXNzZXMgJiYgY29udHJvbC5hQ3VzdG9tU3R5bGVDbGFzc2VzPy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGRhdGEgKz0gYFxcbiR7Z2V0VGFiKCl9IGN1c3RvbVN0eWxlQ2xhc3NlcyA6ICR7Y29udHJvbC5hQ3VzdG9tU3R5bGVDbGFzc2VzLmpvaW4oXCIsIFwiKX1gO1xuXHRcdFx0fVxuXHRcdFx0ZGF0YSArPSBgXFxuYDtcblx0XHRcdGxldCBoYXNBZ2dyZWdhdGlvbiA9IGZhbHNlO1xuXHRcdFx0Zm9yIChjb25zdCBtQWdncmVnYXRpb25zS2V5IGluIGNvbnRyb2wubUFnZ3JlZ2F0aW9ucykge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0KCFBcnJheS5pc0FycmF5KGNvbnRyb2wubUFnZ3JlZ2F0aW9uc1ttQWdncmVnYXRpb25zS2V5XSkgJiZcblx0XHRcdFx0XHRcdGNvbnRyb2wubUFnZ3JlZ2F0aW9uc1ttQWdncmVnYXRpb25zS2V5XSAhPT0gbnVsbCAmJlxuXHRcdFx0XHRcdFx0Y29udHJvbC5tQWdncmVnYXRpb25zW21BZ2dyZWdhdGlvbnNLZXldICE9PSB1bmRlZmluZWQpIHx8XG5cdFx0XHRcdFx0KEFycmF5LmlzQXJyYXkoY29udHJvbC5tQWdncmVnYXRpb25zW21BZ2dyZWdhdGlvbnNLZXldKSAmJiBjb250cm9sLm1BZ2dyZWdhdGlvbnNbbUFnZ3JlZ2F0aW9uc0tleV0ubGVuZ3RoID4gMClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0aGFzQWdncmVnYXRpb24gPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoaGFzQWdncmVnYXRpb24pIHtcblx0XHRcdFx0ZGF0YSArPSBcIj5cIjtcblx0XHRcdH1cblx0XHRcdHJldHVybiBkYXRhO1xuXHRcdH0sXG5cdFx0c3RhcnRBZ2dyZWdhdGlvbjogZnVuY3Rpb24gKGNvbnRyb2w6IGFueSwgc05hbWU6IHN0cmluZykge1xuXHRcdFx0Y29uc3QgbmFtZXNwYWNlQWxpYXMgPSBnZXROYW1lc3BhY2VBbGlhcyhjb250cm9sLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpKTtcblx0XHRcdGxldCBvdXQgPSBgXFxuJHtnZXRUYWIoKX08JHtuYW1lc3BhY2VBbGlhc306JHtzTmFtZX0+YDtcblx0XHRcdHRhYkNvdW50Kys7XG5cdFx0XHRvdXQgKz0gYFxcbiR7Z2V0VGFiKCl9YDtcblx0XHRcdHJldHVybiBvdXQ7XG5cdFx0fSxcblx0XHRlbmRBZ2dyZWdhdGlvbjogZnVuY3Rpb24gKGNvbnRyb2w6IGFueSwgc05hbWU6IHN0cmluZykge1xuXHRcdFx0dGFiQ291bnQtLTtcblx0XHRcdGNvbnN0IG5hbWVzcGFjZUFsaWFzID0gZ2V0TmFtZXNwYWNlQWxpYXMoY29udHJvbC5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKSk7XG5cdFx0XHRpZiAoY29udHJvbC5tQmluZGluZ0luZm9zW3NOYW1lXSkge1xuXHRcdFx0XHRyZXR1cm4gYFxcbiR7Z2V0VGFiKCl9PC8ke25hbWVzcGFjZUFsaWFzfToke3NOYW1lfT5cXG5gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGBcXG4ke2dldFRhYigpfTwvJHtuYW1lc3BhY2VBbGlhc306JHtzTmFtZX0+XFxuYDtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGxldCBvdXRYTUw7XG5cdGlmIChBcnJheS5pc0FycmF5KGNvbnRyb2xUb1NlcmlhbGl6ZSkpIHtcblx0XHRvdXRYTUwgPSBjb250cm9sVG9TZXJpYWxpemUubWFwKChjb250cm9sVG9SZW5kZXI6IFVJNUVsZW1lbnQpID0+IHtcblx0XHRcdHJldHVybiBuZXcgU2VyaWFsaXplcihjb250cm9sVG9SZW5kZXIsIHNlcmlhbGl6ZURlbGVnYXRlKS5zZXJpYWxpemUoKTtcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvdXRYTUwgPSBuZXcgU2VyaWFsaXplcihjb250cm9sVG9TZXJpYWxpemUsIHNlcmlhbGl6ZURlbGVnYXRlKS5zZXJpYWxpemUoKTtcblx0fVxuXHRyZXR1cm4gZm9ybWF0WE1MKGA8cm9vdD4ke291dFhNTH08L3Jvb3Q+YCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBd2FpdGVyKCkge1xuXHRsZXQgZm5SZXNvbHZlITogRnVuY3Rpb247XG5cdGNvbnN0IG15UHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0Zm5SZXNvbHZlID0gcmVzb2x2ZTtcblx0fSk7XG5cdHJldHVybiB7IHByb21pc2U6IG15UHJvbWlzZSwgcmVzb2x2ZTogZm5SZXNvbHZlIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJCdWlsZGluZ0Jsb2NrV2l0aE1vZGVscyhidWlsZGluZ0Jsb2NrOiB7IGdldENvbnRlbnQ6IEZ1bmN0aW9uIH0sIG1vZGVsczogeyBba2V5OiBzdHJpbmddOiBNb2RlbCB9KTogQ29udHJvbCB7XG5cdHJldHVybiAoTWFuYWdlZE9iamVjdCBhcyBNYW5hZ2VkT2JqZWN0RXgpLnJ1bldpdGhQcmVwcm9jZXNzb3JzKFxuXHRcdCgpID0+IHtcblx0XHRcdHJldHVybiBidWlsZGluZ0Jsb2NrLmdldENvbnRlbnQoKTtcblx0XHR9LFxuXHRcdHtcblx0XHRcdHNldHRpbmdzOiBmdW5jdGlvbiAoY29udHJvbFNldHRpbmdzOiB7IG1vZGVsczogdW5rbm93biB9KSB7XG5cdFx0XHRcdGNvbnRyb2xTZXR0aW5ncy5tb2RlbHMgPSBtb2RlbHM7XG5cdFx0XHRcdHJldHVybiBjb250cm9sU2V0dGluZ3M7XG5cdFx0XHR9XG5cdFx0fVxuXHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJNb2NrRnJhZ21lbnRzKC4uLmZyYWdtZW50czogTW9ja0ZyYWdtZW50W10pOiBqZXN0LlNweUluc3RhbmNlIHtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcblx0Y29uc3Qgb3JpZ2luYWxMb2FkVGVtcGxhdGUgPSAoWE1MVGVtcGxhdGVQcm9jZXNzb3IgYXMgYW55KS5sb2FkVGVtcGxhdGVQcm9taXNlO1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuXHRjb25zdCBsb2FkVGVtcGxhdGVTdHViID0gamVzdC5zcHlPbihYTUxUZW1wbGF0ZVByb2Nlc3NvciBhcyBhbnksIFwibG9hZFRlbXBsYXRlUHJvbWlzZVwiKTtcblx0bG9hZFRlbXBsYXRlU3R1Yi5tb2NrSW1wbGVtZW50YXRpb24oKCh0ZW1wbGF0ZU5hbWU6IHN0cmluZywgZXh0ZW5zaW9uOiBzdHJpbmcpID0+IHtcblx0XHRmb3IgKGNvbnN0IGZyYWdtZW50IG9mIGZyYWdtZW50cykge1xuXHRcdFx0aWYgKGZyYWdtZW50Lm5hbWUgPT09IHRlbXBsYXRlTmFtZSkge1xuXHRcdFx0XHRyZXR1cm4gcGFyc2VYTUxTdHJpbmcoZnJhZ21lbnQuY29udGVudClbMF07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvcmlnaW5hbExvYWRUZW1wbGF0ZSh0ZW1wbGF0ZU5hbWUsIGV4dGVuc2lvbik7XG5cdH0pIGFzICgoKSA9PiBFbGVtZW50KSB8IHVuZGVmaW5lZCk7XG5cdHJldHVybiBsb2FkVGVtcGxhdGVTdHViO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgYW4gYXBwQ29tcG9uZW50IGFuZCB0ZW1wbGF0ZUNvbXBvbmVudCB3aXRoIHRoZSBnaXZlbiBvcHRpb25zLlxuICogQHBhcmFtIG9wdGlvbnNcbiAqIEBwYXJhbSBvcHRpb25zLmNkc0ZpbGUgVGhlIHBhdGggdG8gdGhlIENEUyBmaWxlIHRvIHVzZSBmb3IgdGhlIGFwcENvbXBvbmVudFxuICogQHBhcmFtIG9wdGlvbnMubWFpbkNvbnRleHRQYXRoIFRoZSBtYWluIGNvbnRleHQgcGF0aCB0byB1c2UgZm9yIHRoZSBhcHBDb21wb25lbnRcbiAqIEBwYXJhbSBvcHRpb25zLnBhZ2VDb250ZW50IFRoZSBwYWdlIGNvbnRlbnQgdG8gdXNlIGZvciB0aGUgYXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gb3B0aW9ucy5jb250ZW50IFRoZSBjb250ZW50IHRvIHVzZSBmb3IgdGhlIGFwcCBDb21wb25lbnRcbiAqIEBwYXJhbSBvcHRpb25zLmNvbXBvbmVudElkXG4gKiBAcGFyYW0gb3B0aW9ucy5tYW5pZmVzdFNldHRpbmdzXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSB0byB1c2UgZm9yIHRoZSBhcHBDb21wb25lbnRcbiAqIEBwYXJhbSB2aWV3TGV2ZWwgVGhlIHZpZXcgbGV2ZWwgdG8gdXNlIGZvciB0aGUgYXBwQ29tcG9uZW50XG4gKiBAcmV0dXJucyBUaGUgYXBwY29tcG9uZW50IGFuZCB0ZW1wbGF0ZUNvbXBvbmVudCB0byB1c2UgZm9yIHRlc3RpbmdcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluaXRpYWxpemVBcHBDb21wb25lbnQoXG5cdG9wdGlvbnM/OiB7XG5cdFx0Y2RzRmlsZT86IHN0cmluZztcblx0XHRjb21wb25lbnRJZD86IHN0cmluZztcblx0XHRtYWluQ29udGV4dFBhdGg/OiBzdHJpbmc7XG5cdFx0cGFnZUNvbnRlbnQ/OiBGdW5jdGlvbjtcblx0XHRtYW5pZmVzdFNldHRpbmdzPzogUGFydGlhbDxMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5ncyB8IE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzPjtcblx0XHRjb250ZW50PzogUGFydGlhbDxMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5nc1tcImNvbnRlbnRcIl0gfCBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5nc1tcImNvbnRlbnRcIl0+O1xuXHRcdGd1aWQ/OiBzdHJpbmc7XG5cdH0sXG5cdG5hbWU/OiBzdHJpbmcsXG5cdHZpZXdMZXZlbD86IG51bWJlclxuKTogUHJvbWlzZTx7IGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50OyB0ZW1wbGF0ZUNvbXBvbmVudDogVGVtcGxhdGVDb21wb25lbnQgfT4ge1xuXHRsZXQgY2RzRmlsZSA9IG9wdGlvbnM/LmNkc0ZpbGU7XG5cdGlmICghY2RzRmlsZSkge1xuXHRcdGNkc0ZpbGUgPSBjb21waWxlQ0RTKHBhdGguam9pbihfX2Rpcm5hbWUsIFwiLi9kYXRhL1Byb2R1Y3RzLmNkc1wiKSk7XG5cdH1cblx0Y29uc3QgZ3VpZCA9IG9wdGlvbnM/Lmd1aWQgPz8gdWlkKCk7XG5cdGNvbnN0IGlkID0gb3B0aW9ucz8uY29tcG9uZW50SWQgPz8gYHNhcC5mZS50ZXN0LiR7Z3VpZH1gO1xuXHRjb25zdCBjZHNDb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGNkc0ZpbGUpLnRvU3RyaW5nKCk7XG5cdHNhcC5qZXN0LnJlZ2lzdGVyRmFrZUZyYWdtZW50KGAvc2FwL2ZlL2NvcmUvbW9jay8ke2d1aWR9LyRtZXRhZGF0YT9zYXAtbGFuZ3VhZ2U9RU5gLCBjZHNDb250ZW50KTtcblx0Y2xhc3MgRGVmYXVsdFBhZ2VDb250ZW50IGV4dGVuZHMgUGFnZUNvbnRyb2xsZXIge1xuXHRcdHJlbmRlcigpIHtcblx0XHRcdHJldHVybiA8UGFnZT48L1BhZ2U+O1xuXHRcdH1cblx0fVxuXHRzYXAudWkuZGVmaW5lKGBzYXAvZmUvdGVzdC8ke2d1aWR9L0NvbXBvbmVudGAsIFtcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiXSwgZnVuY3Rpb24gKF9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCkge1xuXHRcdFwidXNlIHN0cmljdFwiO1xuXG5cdFx0cmV0dXJuIEFwcENvbXBvbmVudC5leHRlbmQoYHNhcC5mZS50ZXN0LiR7Z3VpZH0uQ29tcG9uZW50YCwge1xuXHRcdFx0bWV0YWRhdGE6IHtcblx0XHRcdFx0bWFuaWZlc3Q6IHtcblx0XHRcdFx0XHRcInNhcC5hcHBcIjoge1xuXHRcdFx0XHRcdFx0aWQ6IGB0ZXN0JHtndWlkfWAsXG5cdFx0XHRcdFx0XHRkYXRhU291cmNlczoge1xuXHRcdFx0XHRcdFx0XHRtYWluU2VydmljZToge1xuXHRcdFx0XHRcdFx0XHRcdHVyaTogYC9zYXAvZmUvY29yZS9tb2NrLyR7Z3VpZH0vYCxcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIk9EYXRhXCIsXG5cdFx0XHRcdFx0XHRcdFx0c2V0dGluZ3M6IHtcblx0XHRcdFx0XHRcdFx0XHRcdG9kYXRhVmVyc2lvbjogXCI0LjBcIlxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XCJzYXAudWk1XCI6IHtcblx0XHRcdFx0XHRcdG1vZGVsczoge1xuXHRcdFx0XHRcdFx0XHRcIlwiOiB7XG5cdFx0XHRcdFx0XHRcdFx0ZGF0YVNvdXJjZTogXCJtYWluU2VydmljZVwiLFxuXHRcdFx0XHRcdFx0XHRcdHNldHRpbmdzOiB7fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0cm91dGluZzoge1xuXHRcdFx0XHRcdFx0XHR0YXJnZXRzOiB7XG5cdFx0XHRcdFx0XHRcdFx0RGVmYXVsdDoge1xuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJDb21wb25lbnRcIixcblx0XHRcdFx0XHRcdFx0XHRcdG5hbWU6IG5hbWUgPz8gXCJzYXAuZmUuY29yZS5mcG1cIixcblx0XHRcdFx0XHRcdFx0XHRcdGlkOiBcIkRlZmF1bHRcIixcblx0XHRcdFx0XHRcdFx0XHRcdHZpZXdMZXZlbDogdmlld0xldmVsLFxuXHRcdFx0XHRcdFx0XHRcdFx0b3B0aW9uczoge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRzZXR0aW5nczoge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC4uLihvcHRpb25zPy5tYW5pZmVzdFNldHRpbmdzID8/IHt9KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb250ZXh0UGF0aDogb3B0aW9ucz8ubWFpbkNvbnRleHRQYXRoID8/IFwiL1Byb2R1Y3RzXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmlld1R5cGU6IFwiSlNYXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmlld0NvbnRlbnQ6IG9wdGlvbnM/LnBhZ2VDb250ZW50ID8/IERlZmF1bHRQYWdlQ29udGVudCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb250ZW50OiBvcHRpb25zPy5jb250ZW50XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHJvdXRlczogW1xuXHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdHBhdHRlcm46IFwiOj9xdWVyeTpcIixcblx0XHRcdFx0XHRcdFx0XHRcdG5hbWU6IFwiRGVmYXVsdFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGFyZ2V0OiBcIkRlZmF1bHRcIlxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9KTtcblx0Y29uc3QgbW9ja0FwcENvbXBvbmVudCA9IChhd2FpdCBDb21wb25lbnQuY3JlYXRlKHsgbmFtZTogYHNhcC5mZS50ZXN0LiR7Z3VpZH1gLCBpZDogaWQgfSkpIGFzIEFwcENvbXBvbmVudDtcblxuXHRhd2FpdCBtb2NrQXBwQ29tcG9uZW50LmluaXRpYWxpemVkO1xuXHRjb25zdCB2ID0gYXdhaXQgKG1vY2tBcHBDb21wb25lbnQuZ2V0Um91dGVyKCkuZ2V0VGFyZ2V0KFwiRGVmYXVsdFwiKSBhcyB7IGxvYWQ/OiBGdW5jdGlvbiB9KS5sb2FkPy4oKTtcblx0cmV0dXJuIHsgYXBwQ29tcG9uZW50OiBtb2NrQXBwQ29tcG9uZW50LCB0ZW1wbGF0ZUNvbXBvbmVudDogdi5vYmplY3QgfTtcbn1cblxuLyoqXG4gKiBGaW5kIGFuIGVsZW1lbnQgaW4gYSBjb2xsZWN0aW9uIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gc2VsZWN0b3IuXG4gKiBAcGFyYW0gY29sbGVjdGlvblxuICogQHBhcmFtIHNlbGVjdG9yXG4gKiBAcmV0dXJucyBUaGUgZWxlbWVudCB0aGF0IG1hdGNoZXMgdGhlIHNlbGVjdG9yIG9yIHVuZGVmaW5lZCBpZiBubyBlbGVtZW50IG1hdGNoZXMgdGhlIHNlbGVjdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRWxlbWVudChjb2xsZWN0aW9uOiBIVE1MQ29sbGVjdGlvbiwgc2VsZWN0b3I6IChlbGVtZW50OiBIVE1MRWxlbWVudCkgPT4gYm9vbGVhbik6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkIHtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjb2xsZWN0aW9uLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IGNvbGxlY3Rpb24uaXRlbShpKSBhcyBIVE1MRWxlbWVudDtcblx0XHRpZiAoc2VsZWN0b3IoZWxlbWVudCkpIHtcblx0XHRcdHJldHVybiBlbGVtZW50O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFdhaXQgZm9yIGFuIGV2ZW50IHRvIGJlIHJlc29sdmVkIGJlZm9yZSBjb250aW51aW5nLlxuICogQHBhcmFtIGNvbnRyb2xcbiAqIEBwYXJhbSBldmVudE5hbWVcbiAqIEByZXR1cm5zIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGV2ZW50IGlzIHJlY2VpdmVkXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yRXZlbnQ8VCBleHRlbmRzIHt9Pihjb250cm9sOiBFdmVudFByb3ZpZGVyLCBldmVudE5hbWU6IHN0cmluZyk6IFByb21pc2U8VUk1RXZlbnQ8VD4+IHtcblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0Y29udHJvbC5hdHRhY2hFdmVudE9uY2UoZXZlbnROYW1lLCAoZXZlbnQ6IEV2ZW50KSA9PiB7XG5cdFx0XHRyZXNvbHZlKGV2ZW50IGFzIHVua25vd24gYXMgVUk1RXZlbnQ8VD4pO1xuXHRcdH0pO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBUZWxsIHRoZSBiaW5kaW5nIHBhcnNlciB0byBrZWVwIHRoZSBiaW5kaW5nIHN0cmluZ3MgZm9yIHRlc3RpbmcuXG4gKiBAcGFyYW0gZW5hYmxlZFxuICovXG5leHBvcnQgZnVuY3Rpb24ga2VlcEJpbmRpbmdTdHJpbmdGb3JUZXN0KGVuYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcblx0QmluZGluZ1BhcnNlci5fa2VlcEJpbmRpbmdTdHJpbmdzID0gZW5hYmxlZDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztFQXdFQUEsR0FBRyxDQUFDQyxRQUFRLENBQUMsQ0FBQyxFQUFTLGtDQUFrQyxDQUFDO0VBQzFEQyxJQUFJLENBQUNDLFVBQVUsQ0FBQyxLQUFLLENBQUM7RUFFdEIsTUFBTUMsWUFBb0MsR0FBRztJQUM1Q0MsS0FBSyxFQUFFLGVBQWU7SUFDdEJDLFVBQVUsRUFBRSxxQkFBcUI7SUFDakNDLE1BQU0sRUFBRSxlQUFlO0lBQ3ZCQyxJQUFJLEVBQUUsdUNBQXVDO0lBQzdDQyxVQUFVLEVBQUUscUJBQXFCO0lBQ2pDQyxTQUFTLEVBQUUsa0VBQWtFO0lBQzdFQyxHQUFHLEVBQUUsa0VBQWtFO0lBQ3ZFQyxVQUFVLEVBQUUsa0VBQWtFO0lBQzlFQyxPQUFPLEVBQUUsc0JBQXNCO0lBQy9CQyxRQUFRLEVBQUUsd0JBQXdCO0lBQ2xDQyxJQUFJLEVBQUUsYUFBYTtJQUNuQkMsRUFBRSxFQUFFLFdBQVc7SUFDZkMsQ0FBQyxFQUFFLE9BQU87SUFDVkMsQ0FBQyxFQUFFLG9CQUFvQjtJQUN2QkMsRUFBRSxFQUFFLFdBQVc7SUFDZkMsYUFBYSxFQUFFLHdCQUF3QjtJQUN2Q0MsR0FBRyxFQUFFLFlBQVk7SUFDakJDLGFB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
|
|
1091
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJMb2ciLCJzZXRMZXZlbCIsImplc3QiLCJzZXRUaW1lb3V0IiwibmFtZVNwYWNlTWFwIiwibWFjcm8iLCJtYWNyb1NoYXJlIiwibWFjcm9zIiwiZmVCQiIsIm1hY3JvRmllbGQiLCJtYWNyb2RhdGEiLCJsb2ciLCJjdXN0b21EYXRhIiwiY29udHJvbCIsImNvbnRyb2xzIiwiY29yZSIsImR0IiwibSIsImYiLCJmbCIsImludGVybmFsTWFjcm8iLCJtZGMiLCJhY3Rpb250b29sYmFyIiwibWRjRmllbGQiLCJtZGNUYWJsZSIsInUiLCJ1eGFwIiwibWFjcm9NaWNyb0NoYXJ0IiwibWljcm9DaGFydCIsIm1hY3JvVGFibGUiLCJtZGN2YyIsIm1kY3YiLCJ2YWx1ZUhlbHAiLCJjb250ZW50U3dpdGNoZXIiLCJmaWx0ZXJCYXIiLCJmYkNvbnRyb2xzIiwiZHJhZnRJbmRpY2F0b3IiLCJyZXZlc2VOYW1lc3BhY2VNYXAiLCJPYmplY3QiLCJrZXlzIiwicmVkdWNlIiwicmV2ZXJzZU1hcCIsImN1cnJlbnROYW1lIiwic2VsZWN0IiwieHBhdGgiLCJ1c2VOYW1lc3BhY2VzIiwiZGVmYXVsdEZha2VTaWRlRWZmZWN0U2VydmljZSIsImNvbXB1dGVGaWVsZEdyb3VwSWRzIiwiX2dldFRlbXBsYXRlZFNlbGVjdG9yIiwieG1sZG9tIiwic2VsZWN0b3IiLCJyb290UGF0aCIsIm5vZGVOYW1lIiwic3RhcnRzV2l0aCIsIl9idWlsZFByZVByb2Nlc3NvclNldHRpbmdzIiwic01ldGFkYXRhVXJsIiwibUJpbmRpbmdDb250ZXh0cyIsIm1Nb2RlbHMiLCJmYWtlU2lkZUVmZmVjdFNlcnZpY2UiLCJvTWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiaGFzT3duUHJvcGVydHkiLCJhc3NpZ24iLCJjb252ZXJ0ZXJDb250ZXh0IiwiVGVtcGxhdGVNb2RlbCIsImZvckVhY2giLCJzTW9kZWxOYW1lIiwiaXNUZW1wbGF0ZU1vZGVsIiwiZGF0YSIsInNldHRpbmdzIiwibW9kZWxzIiwibWV0YU1vZGVsIiwiYmluZGluZ0NvbnRleHRzIiwiYXBwQ29tcG9uZW50IiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZm4iLCJnZXREaWFnbm9zdGljcyIsInVuZGVmaW5lZCIsImdldFNoZWxsU2VydmljZXMiLCJnZXRNYW5pZmVzdEVudHJ5IiwibW9ja1JldHVyblZhbHVlIiwic0tleSIsImV4cGVjdCIsImdldE9iamVjdCIsInRvQmVEZWZpbmVkIiwib01vZGVsIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJfbG9hZFJlc291cmNlVmlldyIsInZpZXdOYW1lIiwibmFtZSIsInJlcGxhY2UiLCJ2aWV3IiwiTG9hZGVyRXh0ZW5zaW9ucyIsImxvYWRSZXNvdXJjZSIsImRvY3VtZW50RWxlbWVudCIsInJ1blhQYXRoUXVlcnkiLCJleHRlbmQiLCJ0b0hhdmVDb250cm9sIiwibm9kZXMiLCJtZXNzYWdlIiwib3V0cHV0WG1sIiwic2VyaWFsaXplWE1MIiwicGFzcyIsImxlbmd0aCIsInRvTm90SGF2ZUNvbnRyb2wiLCJ0b0hhdmVUZW1wbGF0aW5nRXJyb3JzIiwieG1sIiwieG1sVGV4dCIsImJhc2U2NEVudHJpZXMiLCJtYXRjaCIsImVycm9yTWVzc2FnZXMiLCJtYXAiLCJhdG9iIiwic2xpY2UiLCJqb2luIiwiX2V4cG9ydHMiLCJmb3JtYXRCdWlsZGluZ0Jsb2NrWE1MIiwieG1sU3RyaW5nIiwiQXJyYXkiLCJpc0FycmF5IiwiZm9ybWF0WE1MIiwiZ2V0Q29udHJvbEF0dHJpYnV0ZSIsImNvbnRyb2xTZWxlY3RvciIsImF0dHJpYnV0ZU5hbWUiLCJ4bWxEb20iLCJzZXJpYWxpemVyIiwid2luZG93IiwiWE1MU2VyaWFsaXplciIsIm5vZGUiLCJzZXJpYWxpemVUb1N0cmluZyIsIlNUQVJUIiwiRU5EIiwiVUlEIiwiVUlEMiIsImxpbmVzIiwiY3VycmVudExpbmUiLCJsZXZlbCIsImF0dHJpYnV0ZXMiLCJuZXdsaW5lIiwicHVzaCIsInJlcGVhdCIsImFwcGVuZEF0dHJpYnV0ZXMiLCJzb3J0IiwiYSIsImIiLCJsb2NhbGVDb21wYXJlIiwiaW5jbHVkZXMiLCJhdHRyaWJ1dGUiLCJ2YWx1ZSIsImFwcGVuZCIsInBhcnNlciIsInJlYWQiLCJjcmVhdGVQYXJzZXIiLCJvbk9wZW5UYWdTdGFydCIsIm9uT3BlblRhZ05hbWUiLCJvbkF0dHJOYW1lIiwidW5zaGlmdCIsIm9uQXR0clZhbHVlIiwib25PcGVuVGFnRW5kIiwic2VsZkNsb3NlZCIsIm9uQ2xvc2VUYWdTdGFydCIsIm9uQ2xvc2VUYWdOYW1lIiwib25DbG9zZVRhZ0VuZCIsInBhcnNlIiwidHJpbSIsImNvbXBpbGVDRFMiLCJjZHNVcmwiLCJvcHRpb25zIiwiYXJndW1lbnRzIiwiY2RzU3RyaW5nIiwiZnMiLCJyZWFkRmlsZVN5bmMiLCJlZG14Q29udGVudCIsImNkczJlZG14IiwiZGlyIiwicGF0aCIsInJlc29sdmUiLCJhbGxPcHRpb25zIiwiZW50cmllcyIsImVkbXhGaWxlTmFtZSIsImZpbGVuYW1lIiwiX3JlZiIsIm9wdGlvbktleSIsIm9wdGlvblZhbHVlIiwidG9TdHJpbmciLCJiYXNlbmFtZSIsImVkbXhGaWxlUGF0aCIsIm1rZGlyU3luYyIsInJlY3Vyc2l2ZSIsIndyaXRlRmlsZVN5bmMiLCJjZHMiLCJzZXJ2aWNlIiwic291cmNlcyIsInJlcXVpcmUiLCJjc24iLCJjb21waWxlciIsImNvbXBpbGVTb3VyY2VzIiwiZWRteE9wdGlvbnMiLCJvZGF0YUZvcmVpZ25LZXlzIiwib2RhdGFGb3JtYXQiLCJvZGF0YUNvbnRhaW5tZW50IiwiZWRteCIsInRvIiwiRXJyb3IiLCJnZXRGYWtlU2lkZUVmZmVjdHNTZXJ2aWNlIiwiY2xhc3NOYW1lT0RhdGFNb2RlbCIsInNjb3BlT2JqZWN0IiwiZ2V0TW9kZWwiLCJpc0EiLCJnZXRTZXJ2aWNlVXJsIiwiZ2V0U2VydmljZSIsImdldENhcGFiaWxpdGllcyIsInNlcnZpY2VJbnN0YW5jZSIsIlNpZGVFZmZlY3RzRmFjdG9yeSIsImNyZWF0ZUluc3RhbmNlIiwic2NvcGVUeXBlIiwiZ2V0SW50ZXJmYWNlIiwiZ2V0RmFrZURpYWdub3N0aWNzIiwiaXNzdWVzIiwiYWRkSXNzdWUiLCJpc3N1ZUNhdGVnb3J5IiwiaXNzdWVTZXZlcml0eSIsImRldGFpbHMiLCJnZXRJc3N1ZXMiLCJjaGVja0lmSXNzdWVFeGlzdHMiLCJmaW5kIiwiaXNzdWUiLCJnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yVGVzdCIsIm1hbmlmZXN0U2V0dGluZ3MiLCJjb252ZXJ0ZWRUeXBlcyIsImNvbnZlcnRUeXBlcyIsImRhdGFNb2RlbFBhdGgiLCJjb250ZXh0UGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImVudGl0eVNldCIsIkNvbnZlcnRlckNvbnRleHQiLCJNYW5pZmVzdFdyYXBwZXIiLCJtZXRhTW9kZWxDYWNoZSIsIm9SZXF1ZXN0b3IiLCJfTWV0YWRhdGFSZXF1ZXN0b3IiLCJjcmVhdGUiLCJPRGF0YU1ldGFNb2RlbCIsIl9yZXF1ZXN0QW5ub3RhdGlvbkNoYW5nZXMiLCJmZXRjaEVudGl0eUNvbnRhaW5lciIsImdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JQcm9wZXJ0eSIsInByb3BlcnR5IiwidGFyZ2V0UGF0aCIsInN0YXJ0aW5nRW50aXR5U2V0IiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJ0YXJnZXRPYmplY3QiLCJ0YXJnZXRFbnRpdHlTZXQiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiZW50aXR5VHlwZSIsImNvbnRleHRMb2NhdGlvbiIsImV2YWx1YXRlQmluZGluZyIsImJpbmRpbmdTdHJpbmciLCJiaW5kaW5nRWxlbWVudCIsIkJpbmRpbmdQYXJzZXIiLCJjb21wbGV4UGFyc2VyIiwiX2xlbiIsImFyZ3MiLCJfa2V5IiwiZm9ybWF0dGVyIiwiYXBwbHkiLCJldmFsdWF0ZUJpbmRpbmdXaXRoTW9kZWwiLCJtb2RlbENvbnRlbnQiLCJuYW1lZE1vZGVsc0NvbnRlbnQiLCJ0ZXh0IiwiSW52aXNpYmxlVGV4dCIsImJpbmRQcm9wZXJ0eSIsImRlZmF1bHRNb2RlbCIsIkpTT05Nb2RlbCIsInNldE1vZGVsIiwic2V0QmluZGluZ0NvbnRleHQiLCJjb250ZW50IiwibW9kZWwiLCJnZXRUZXh0IiwiVEVTVFZJRVdJRCIsImFwcGx5RmxleENoYW5nZXMiLCJmbGV4Q2hhbmdlcyIsInJlc3VsdFhNTCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJpZCIsImNoYW5nZXMiLCJjcmVhdGVGbGV4aWJpbGl0eUNoYW5nZXNPYmplY3QiLCJhcHBJZCIsIm9NYW5pZmVzdCIsInR5cGUiLCJjcm9zc05hdmlnYXRpb24iLCJvdXRib3VuZHMiLCJvQXBwQ29tcG9uZW50IiwiZ2V0Q29tcG9uZW50RGF0YSIsImdldE1hbmlmZXN0T2JqZWN0IiwiZ2V0RW50cnkiLCJnZXRMb2NhbElkIiwic0lkIiwic3B5T24iLCJBcHBTdG9yYWdlIiwiUHJvbWlzZSIsIkxvYWRlciIsIkNvbXBvbmVudCIsIlV0aWxzIiwiRmxleFN0YXRlIiwiaW5pdGlhbGl6ZSIsImNvbXBvbmVudElkIiwiWG1sUHJlcHJvY2Vzc29yIiwicHJvY2VzcyIsImNoYW5nZXNBcHBsaWVkIiwiZ2V0Q2hhbmdlc0Zyb21YTUwiLCJ0b0JlIiwidmFyaWFudERlcGVuZGVudENvbnRyb2xDaGFuZ2VzIiwiZmxhdE1hcCIsImUiLCJmaWx0ZXIiLCJhdHRyIiwiZ2V0VGVtcGxhdGluZ1Jlc3VsdCIsInhtbElucHV0IiwiY3JlYXRlTW9ja1Jlc291cmNlTW9kZWwiLCJ0ZW1wbGF0ZWRYbWwiLCJET01QYXJzZXIiLCJ4bWxEb2MiLCJwYXJzZUZyb21TdHJpbmciLCJvUHJlcHJvY2Vzc29yU2V0dGluZ3MiLCJYTUxQcmVwcm9jZXNzb3IiLCJmaXJzdEVsZW1lbnRDaGlsZCIsImdldFRlbXBsYXRlZFhNTCIsImpzeCIsImRlZmluZVhNTE5hbWVzcGFjZU1hcCIsInRlbXBsYXRlZFhNTCIsInNlcmlhbGllZFhNTCIsIm5vdCIsInByb2Nlc3NWaWV3Iiwib1ZpZXdEb2N1bWVudCIsIm9QcmVwcm9jZXNzZWRWaWV3IiwiYXNFbGVtZW50IiwiYXNTdHJpbmciLCJvdXRlckhUTUwiLCJwcm9jZXNzRnJhZ21lbnQiLCJ0ZXN0RGF0YSIsImlucHV0WG1sIiwiaW5wdXREb2MiLCJqc29uTW9kZWwiLCJzZXREYXRhIiwicmVzdWx0RG9jIiwiZnJhZ21lbnRzIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJmcmFnbWVudCIsImlubmVySFRNTCIsInhtbFJlc3VsdCIsImNoaWxkcmVuIiwic2VyaWFsaXplQ29udHJvbCIsImNvbnRyb2xUb1NlcmlhbGl6ZSIsInNob3dDdXN0b21TdHlsZUNsYXNzZXMiLCJ0YWJDb3VudCIsIkNPTlRST0xJRCIsImdldFRhYiIsInRvQWRkIiwidGFiIiwiaSIsInNlcmlhbGl6ZURlbGVnYXRlIiwic3RhcnQiLCJzQWdncmVnYXRpb25OYW1lIiwiY29udHJvbERldGFpbCIsImdldFBhcmVudCIsImluZGV4SW5QYXJlbnQiLCJnZXRBZ2dyZWdhdGlvbiIsImluZGV4T2YiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJlbmQiLCJtaWRkbGUiLCJnZXRJZCIsIk1hbmFnZWRPYmplY3RNZXRhZGF0YSIsImlzR2VuZXJhdGVkSWQiLCJvQ29udHJvbEtleSIsIm1Qcm9wZXJ0aWVzIiwicHJvcGVydHlWYWx1ZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJtQmluZGluZ0luZm9zIiwiYmluZGluZ0RldGFpbCIsIm9PdXRwdXRGb3JtYXQiLCJiaW5kaW5nIiwibUFzc29jaWF0aW9ucyIsImFzc29jaWF0aW9uVmFsdWUiLCJhc3NvY2lhdGlvblZhbHVlRWxlbWVudCIsImFDdXN0b21TdHlsZUNsYXNzZXMiLCJtRXZlbnRSZWdpc3RyeSIsInN0YXJ0QWdncmVnYXRpb24iLCJzTmFtZSIsIm91dCIsImVuZEFnZ3JlZ2F0aW9uIiwiY29udHJvbFRvUmVuZGVyIiwiU2VyaWFsaXplciIsInNlcmlhbGl6ZSIsInNlcmlhbGl6ZUNvbnRyb2xBc1hNTCIsImRlZmluZWROYW1lc3BhY2VzIiwiZ2V0TmFtZXNwYWNlQWxpYXMiLCJjbGFzc05hbWUiLCJuYW1lc1NwbGl0Iiwic3BsaXQiLCJuYW1lc3BhY2UiLCJuYW1lc3BhY2VBbGlhcyIsIm5hbWVGdWxsIiwiaGFzQWdncmVnYXRpb24iLCJtQWdncmVnYXRpb25zS2V5IiwibUFnZ3JlZ2F0aW9ucyIsInByb3BOYW1lIiwiY29uY2F0IiwidW5pcXVlS2V5cyIsIlNldCIsImZyb20iLCJ0ZW1wbGF0ZSIsImZGdW5jdGlvbiIsIm91dFhNTCIsImNyZWF0ZUF3YWl0ZXIiLCJmblJlc29sdmUiLCJteVByb21pc2UiLCJwcm9taXNlIiwicmVuZGVyQnVpbGRpbmdCbG9ja1dpdGhNb2RlbHMiLCJidWlsZGluZ0Jsb2NrIiwiTWFuYWdlZE9iamVjdCIsInJ1bldpdGhQcmVwcm9jZXNzb3JzIiwiZ2V0Q29udGVudCIsImNvbnRyb2xTZXR0aW5ncyIsInJlZ2lzdGVyTW9ja0ZyYWdtZW50cyIsIl9sZW4yIiwiX2tleTIiLCJvcmlnaW5hbExvYWRUZW1wbGF0ZSIsIlhNTFRlbXBsYXRlUHJvY2Vzc29yIiwibG9hZFRlbXBsYXRlUHJvbWlzZSIsImxvYWRUZW1wbGF0ZVN0dWIiLCJtb2NrSW1wbGVtZW50YXRpb24iLCJ0ZW1wbGF0ZU5hbWUiLCJleHRlbnNpb24iLCJwYXJzZVhNTFN0cmluZyIsImluaXRpYWxpemVBcHBDb21wb25lbnQiLCJ2aWV3TGV2ZWwiLCJjZHNGaWxlIiwiX19kaXJuYW1lIiwiZ3VpZCIsInVpZCIsImNkc0NvbnRlbnQiLCJzYXAiLCJyZWdpc3RlckZha2VGcmFnbWVudCIsIkRlZmF1bHRQYWdlQ29udGVudCIsIl9QYWdlQ29udHJvbGxlciIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwicmVuZGVyIiwiX2pzeCIsIlBhZ2UiLCJQYWdlQ29udHJvbGxlciIsInVpIiwiZGVmaW5lIiwiX0FwcENvbXBvbmVudCIsIkFwcENvbXBvbmVudCIsIm1ldGFkYXRhIiwibWFuaWZlc3QiLCJkYXRhU291cmNlcyIsIm1haW5TZXJ2aWNlIiwidXJpIiwib2RhdGFWZXJzaW9uIiwiZGF0YVNvdXJjZSIsInJvdXRpbmciLCJ0YXJnZXRzIiwiRGVmYXVsdCIsIm1haW5Db250ZXh0UGF0aCIsInZpZXdUeXBlIiwidmlld0NvbnRlbnQiLCJwYWdlQ29udGVudCIsInJvdXRlcyIsInBhdHRlcm4iLCJ0YXJnZXQiLCJmZU1hbmlmZXN0U2V0dGluZ3MiLCJtb2NrQXBwQ29tcG9uZW50IiwiaW5pdGlhbGl6ZWQiLCJ2IiwiZ2V0Um91dGVyIiwiZ2V0VGFyZ2V0IiwibG9hZCIsInRlbXBsYXRlQ29tcG9uZW50Iiwib2JqZWN0IiwiZmluZEVsZW1lbnQiLCJjb2xsZWN0aW9uIiwiZWxlbWVudCIsIml0ZW0iLCJ3YWl0Rm9yRXZlbnQiLCJldmVudE5hbWUiLCJhdHRhY2hFdmVudE9uY2UiLCJldmVudCIsImtlZXBCaW5kaW5nU3RyaW5nRm9yVGVzdCIsImVuYWJsZWQiLCJfa2VlcEJpbmRpbmdTdHJpbmdzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJKZXN0VGVtcGxhdGluZ0hlbHBlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBbnlBbm5vdGF0aW9uLCBDb252ZXJ0ZWRNZXRhZGF0YSwgRW50aXR5U2V0LCBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IGNvbXBpbGVyIGZyb20gXCJAc2FwL2Nkcy1jb21waWxlclwiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgdHlwZSB7IFJhbmdlLCBSYW5nZXMgfSBmcm9tIFwiaHRtbGpzLXBhcnNlclwiO1xuaW1wb3J0IHsgY3JlYXRlUGFyc2VyIH0gZnJvbSBcImh0bWxqcy1wYXJzZXJcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IExvYWRlckV4dGVuc2lvbnMgZnJvbSBcInNhcC9iYXNlL3V0aWwvTG9hZGVyRXh0ZW5zaW9uc1wiO1xuaW1wb3J0IHVpZCBmcm9tIFwic2FwL2Jhc2UvdXRpbC91aWRcIjtcbmltcG9ydCBqc3ggZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBUZW1wbGF0ZUNvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVDb21wb25lbnRcIjtcbmltcG9ydCBUZW1wbGF0ZU1vZGVsIGZyb20gXCJzYXAvZmUvY29yZS9UZW1wbGF0ZU1vZGVsXCI7XG5pbXBvcnQgeyBwYXJzZVhNTFN0cmluZyB9IGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy90ZW1wbGF0aW5nL0J1aWxkaW5nQmxvY2tUZW1wbGF0ZVByb2Nlc3NvclwiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5ncywgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgTWFuaWZlc3RXcmFwcGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0V3JhcHBlclwiO1xuaW1wb3J0IHsgY29udmVydFR5cGVzLCBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgSURpYWdub3N0aWNzLCBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZVNldmVyaXR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcbmltcG9ydCB0eXBlIHsgU2lkZUVmZmVjdHNTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1NpZGVFZmZlY3RzU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCBTaWRlRWZmZWN0c0ZhY3RvcnkgZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1NpZGVFZmZlY3RzU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGNyZWF0ZU1vY2tSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS90ZXN0L1VJNU1vY2tIZWxwZXJcIjtcbmltcG9ydCBQYWdlIGZyb20gXCJzYXAvbS9QYWdlXCI7XG5pbXBvcnQgQmluZGluZ1BhcnNlciBmcm9tIFwic2FwL3VpL2Jhc2UvQmluZGluZ1BhcnNlclwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBFdmVudFByb3ZpZGVyIGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFByb3ZpZGVyXCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VBZ2dyZWdhdGlvbkJpbmRpbmdJbmZvIH0gZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgTWFuYWdlZE9iamVjdE1ldGFkYXRhIGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0TWV0YWRhdGFcIjtcbmltcG9ydCBDb21wb25lbnQgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IEludmlzaWJsZVRleHQgZnJvbSBcInNhcC91aS9jb3JlL0ludmlzaWJsZVRleHRcIjtcbmltcG9ydCB0eXBlIHsgTWFuaWZlc3RDb250ZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL01hbmlmZXN0XCI7XG5pbXBvcnQgWE1MVGVtcGxhdGVQcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL1hNTFRlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgWE1MUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IFNlcmlhbGl6ZXIgZnJvbSBcInNhcC91aS9jb3JlL3V0aWwvc2VyaWFsaXplci9TZXJpYWxpemVyXCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcInNhcC91aS9mbC9VdGlsc1wiO1xuaW1wb3J0IEZsZXhTdGF0ZSBmcm9tIFwic2FwL3VpL2ZsL2FwcGx5L19pbnRlcm5hbC9mbGV4U3RhdGUvRmxleFN0YXRlXCI7XG5pbXBvcnQgTG9hZGVyIGZyb20gXCJzYXAvdWkvZmwvYXBwbHkvX2ludGVybmFsL2ZsZXhTdGF0ZS9Mb2FkZXJcIjtcbmltcG9ydCBYbWxQcmVwcm9jZXNzb3IgZnJvbSBcInNhcC91aS9mbC9hcHBseS9faW50ZXJuYWwvcHJlcHJvY2Vzc29ycy9YbWxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCBBcHBTdG9yYWdlIGZyb20gXCJzYXAvdWkvZmwvaW5pdGlhbC9faW50ZXJuYWwvU3RvcmFnZVwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL21kYy9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL01vZGVsXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgX01ldGFkYXRhUmVxdWVzdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvbGliL19NZXRhZGF0YVJlcXVlc3RvclwiO1xuaW1wb3J0IHhwYXRoIGZyb20gXCJ4cGF0aFwiO1xuaW1wb3J0IHR5cGUgeyBNYW5hZ2VkT2JqZWN0RXggfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vdHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5pbXBvcnQgeyBjcmVhdGVGbGV4aWJpbGl0eUNoYW5nZXNPYmplY3QgfSBmcm9tIFwiLi9KZXN0RmxleGliaWxpdHlIZWxwZXJcIjtcblxudHlwZSBQcmVQcm9jZXNzb3JTZXR0aW5nc1R5cGUgPSB7XG5cdG1vZGVsczoge1xuXHRcdFtuYW1lOiBzdHJpbmddOiBKU09OTW9kZWwgfCBPRGF0YU1ldGFNb2RlbDtcblx0fTtcblx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0W25hbWU6IHN0cmluZ106IENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdH07XG59O1xudHlwZSBNb2NrRnJhZ21lbnQgPSB7XG5cdG5hbWU6IHN0cmluZztcblx0Y29udGVudDogc3RyaW5nO1xufTtcblxudHlwZSBKZXN0VGVtcGxhdGVkVmlldyA9IHtcblx0YXNFbGVtZW50OiBFbGVtZW50IHwgdW5kZWZpbmVkO1xuXHRhc1N0cmluZzogc3RyaW5nO1xufTtcblxuTG9nLnNldExldmVsKDEgYXMgYW55LCBcInNhcC51aS5jb3JlLnV0aWwuWE1MUHJlcHJvY2Vzc29yXCIpO1xuamVzdC5zZXRUaW1lb3V0KDQwMDAwKTtcblxuY29uc3QgbmFtZVNwYWNlTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuXHRtYWNybzogXCJzYXAuZmUubWFjcm9zXCIsXG5cdG1hY3JvU2hhcmU6IFwic2FwLmZlLm1hY3Jvcy5zaGFyZVwiLFxuXHRtYWNyb3M6IFwic2FwLmZlLm1hY3Jvc1wiLFxuXHRmZUJCOiBcInNhcC5mZS5jb3JlLmJ1aWxkaW5nQmxvY2tzLnRlbXBsYXRpbmdcIixcblx0bWFjcm9GaWVsZDogXCJzYXAuZmUubWFjcm9zLmZpZWxkXCIsXG5cdG1hY3JvZGF0YTogXCJodHRwOi8vc2NoZW1hcy5zYXAuY29tL3NhcHVpNS9leHRlbnNpb24vc2FwLnVpLmNvcmUuQ3VzdG9tRGF0YS8xXCIsXG5cdGxvZzogXCJodHRwOi8vc2NoZW1hcy5zYXAuY29tL3NhcHVpNS9leHRlbnNpb24vc2FwLnVpLmNvcmUuQ3VzdG9tRGF0YS8xXCIsXG5cdGN1c3RvbURhdGE6IFwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvZXh0ZW5zaW9uL3NhcC51aS5jb3JlLkN1c3RvbURhdGEvMVwiLFxuXHRjb250cm9sOiBcInNhcC5mZS5jb3JlLmNvbnRyb2xzXCIsXG5cdGNvbnRyb2xzOiBcInNhcC5mZS5tYWNyb3MuY29udHJvbHNcIixcblx0Y29yZTogXCJzYXAudWkuY29yZVwiLFxuXHRkdDogXCJzYXAudWkuZHRcIixcblx0bTogXCJzYXAubVwiLFxuXHRmOiBcInNhcC51aS5sYXlvdXQuZm9ybVwiLFxuXHRmbDogXCJzYXAudWkuZmxcIixcblx0aW50ZXJuYWxNYWNybzogXCJzYXAuZmUubWFjcm9zLmludGVybmFsXCIsXG5cdG1kYzogXCJzYXAudWkubWRjXCIsXG5cdGFjdGlvbnRvb2xiYXI6IFwic2FwLnVpLm1kYy5hY3Rpb250b29sYmFyXCIsXG5cdG1kY0ZpZWxkOiBcInNhcC51aS5tZGMuZmllbGRcIixcblx0bWRjVGFibGU6IFwic2FwLnVpLm1kYy50YWJsZVwiLFxuXHR1OiBcInNhcC51aS51bmlmaWVkXCIsXG5cdHV4YXA6IFwic2FwLnV4YXBcIixcblx0bWFjcm9NaWNyb0NoYXJ0OiBcInNhcC5mZS5tYWNyb3MubWljcm9jaGFydFwiLFxuXHRtaWNyb0NoYXJ0OiBcInNhcC5zdWl0ZS51aS5taWNyb2NoYXJ0XCIsXG5cdG1hY3JvVGFibGU6IFwic2FwLmZlLm1hY3Jvcy50YWJsZVwiLFxuXHRtZGN2YzogXCJzYXAudWkubWRjLnZhbHVlaGVscC5jb250ZW50XCIsXG5cdG1kY3Y6IFwic2FwLnVpLm1kYy52YWx1ZWhlbHBcIixcblx0dmFsdWVIZWxwOiBcInNhcC5mZS5tYWNyb3MudmFsdWVIZWxwXCIsXG5cdGNvbnRlbnRTd2l0Y2hlcjogXCJzYXAuZmUubWFjcm9zLmNvbnRlbnRTd2l0Y2hlclwiLFxuXHRmaWx0ZXJCYXI6IFwic2FwLmZlLm1hY3Jvcy5maWx0ZXJCYXJcIixcblx0ZmJDb250cm9sczogXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLmZpbHRlcmJhclwiLFxuXHRkcmFmdEluZGljYXRvcjogXCJzYXAuZmUubWFjcm9zLmRyYWZ0SW5kaWNhdG9yXCJcbn07XG5jb25zdCByZXZlc2VOYW1lc3BhY2VNYXAgPSBPYmplY3Qua2V5cyhuYW1lU3BhY2VNYXApLnJlZHVjZSgocmV2ZXJzZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgY3VycmVudE5hbWUpID0+IHtcblx0cmV2ZXJzZU1hcFtuYW1lU3BhY2VNYXBbY3VycmVudE5hbWVdXSA9IGN1cnJlbnROYW1lO1xuXHRyZXR1cm4gcmV2ZXJzZU1hcDtcbn0sIHt9KTtcbmNvbnN0IHNlbGVjdCA9IHhwYXRoLnVzZU5hbWVzcGFjZXMobmFtZVNwYWNlTWFwKTtcblxuY29uc3QgZGVmYXVsdEZha2VTaWRlRWZmZWN0U2VydmljZSA9IHsgY29tcHV0ZUZpZWxkR3JvdXBJZHM6ICgpID0+IFtdIH07XG5cbmZ1bmN0aW9uIF9nZXRUZW1wbGF0ZWRTZWxlY3Rvcih4bWxkb206IE5vZGUsIHNlbGVjdG9yOiBzdHJpbmcpOiBzdHJpbmcge1xuXHQvKipcblx0ICogaWYgYSByb290IGVsZW1lbnQgaGFzIGJlZW4gYWRkZWQgZHVyaW5nIHRoZSB0ZW1wbGF0aW5nIGJ5IG91ciBKZXN0IFRlbXBsYXRpbmcgbWV0aG9kc1xuXHQgKiB0aGUgcm9vdCBlbGVtZW50IGlzIGFkZGVkIHRvIHRoZSBzZWxlY3RvciBwYXRoLlxuXHQgKi9cblx0Y29uc3Qgcm9vdFBhdGggPSBcIi9yb290XCI7XG5cdHJldHVybiBgJHt4bWxkb20ubm9kZU5hbWUgPT09IFwicm9vdFwiICYmICFzZWxlY3Rvci5zdGFydHNXaXRoKHJvb3RQYXRoKSA/IHJvb3RQYXRoIDogXCJcIn0ke3NlbGVjdG9yfWA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIF9idWlsZFByZVByb2Nlc3NvclNldHRpbmdzKFxuXHRzTWV0YWRhdGFVcmw6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0bUJpbmRpbmdDb250ZXh0czogeyBbeDogc3RyaW5nXTogc3RyaW5nIH0sXG5cdG1Nb2RlbHM6IHsgW3g6IHN0cmluZ106IGFueSB9LFxuXHRmYWtlU2lkZUVmZmVjdFNlcnZpY2U/OiB1bmtub3duXG4pOiBQcm9taXNlPFByZVByb2Nlc3NvclNldHRpbmdzVHlwZT4ge1xuXHRsZXQgb01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwgfCB1bmRlZmluZWQ7XG5cdGlmIChzTWV0YWRhdGFVcmwpIHtcblx0XHRvTWV0YU1vZGVsID0gYXdhaXQgZ2V0TWV0YU1vZGVsKHNNZXRhZGF0YVVybCk7XG5cdFx0Ly8gVG8gZW5zdXJlIG91ciBtYWNybyBjYW4gdXNlICNzZXRCaW5kaW5nQ29udGV4dCB3ZSBlbnN1cmUgdGhlcmUgaXMgYSBwcmUgZXhpc3RpbmcgSlNPTk1vZGVsIGZvciBjb252ZXJ0ZXJDb250ZXh0XG5cdFx0Ly8gaWYgbm90IGFscmVhZHkgcGFzc2VkIHRvIHRlaCB0ZW1wbGF0aW5nXG5cdFx0aWYgKCFtTW9kZWxzLmhhc093blByb3BlcnR5KFwiY29udmVydGVyQ29udGV4dFwiKSkge1xuXHRcdFx0bU1vZGVscyA9IE9iamVjdC5hc3NpZ24obU1vZGVscywgeyBjb252ZXJ0ZXJDb250ZXh0OiBuZXcgVGVtcGxhdGVNb2RlbCh7fSwgb01ldGFNb2RlbCEpIH0pO1xuXHRcdH1cblxuXHRcdE9iamVjdC5rZXlzKG1Nb2RlbHMpLmZvckVhY2goZnVuY3Rpb24gKHNNb2RlbE5hbWUpIHtcblx0XHRcdGlmIChtTW9kZWxzW3NNb2RlbE5hbWVdICYmIG1Nb2RlbHNbc01vZGVsTmFtZV0uaXNUZW1wbGF0ZU1vZGVsKSB7XG5cdFx0XHRcdG1Nb2RlbHNbc01vZGVsTmFtZV0gPSBuZXcgVGVtcGxhdGVNb2RlbChtTW9kZWxzW3NNb2RlbE5hbWVdLmRhdGEsIG9NZXRhTW9kZWwhKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdGNvbnN0IHNldHRpbmdzOiBhbnkgPSB7XG5cdFx0bW9kZWxzOiBPYmplY3QuYXNzaWduKFxuXHRcdFx0e1xuXHRcdFx0XHRtZXRhTW9kZWw6IG9NZXRhTW9kZWxcblx0XHRcdH0sXG5cdFx0XHRtTW9kZWxzXG5cdFx0KSxcblx0XHRiaW5kaW5nQ29udGV4dHM6IHt9LFxuXHRcdGFwcENvbXBvbmVudDoge1xuXHRcdFx0Z2V0U2lkZUVmZmVjdHNTZXJ2aWNlOiBqZXN0LmZuKCksXG5cdFx0XHRnZXREaWFnbm9zdGljczogKCkgPT4gdW5kZWZpbmVkLFxuXHRcdFx0Z2V0U2hlbGxTZXJ2aWNlczogamVzdC5mbigpLFxuXHRcdFx0Z2V0TWFuaWZlc3RFbnRyeTogKCkgPT4gdW5kZWZpbmVkXG5cdFx0fVxuXHR9O1xuXG5cdHNldHRpbmdzLmFwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UubW9ja1JldHVyblZhbHVlKGZha2VTaWRlRWZmZWN0U2VydmljZSA/PyBkZWZhdWx0RmFrZVNpZGVFZmZlY3RTZXJ2aWNlKTtcblx0Ly9JbmplY3QgbW9kZWxzIGFuZCBiaW5kaW5nQ29udGV4dHNcblx0T2JqZWN0LmtleXMobUJpbmRpbmdDb250ZXh0cykuZm9yRWFjaChmdW5jdGlvbiAoc0tleSkge1xuXHRcdC8qIEFzc2VydCB0byBtYWtlIHN1cmUgdGhlIGFubm90YXRpb25zIGFyZSBpbiB0aGUgdGVzdCBtZXRhZGF0YSAtPiBhdm9pZCBtaXNsZWFkaW5nIHRlc3RzICovXG5cdFx0ZXhwZWN0KHR5cGVvZiBvTWV0YU1vZGVsPy5nZXRPYmplY3QobUJpbmRpbmdDb250ZXh0c1tzS2V5XSkpLnRvQmVEZWZpbmVkKCk7XG5cdFx0Y29uc3Qgb01vZGVsID0gbU1vZGVsc1tzS2V5XSB8fCBvTWV0YU1vZGVsO1xuXHRcdHNldHRpbmdzLmJpbmRpbmdDb250ZXh0c1tzS2V5XSA9IG9Nb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChtQmluZGluZ0NvbnRleHRzW3NLZXldKTsgLy9WYWx1ZSBpcyBzUGF0aFxuXHRcdHNldHRpbmdzLm1vZGVsc1tzS2V5XSA9IG9Nb2RlbDtcblx0fSk7XG5cdHJldHVybiBzZXR0aW5ncztcbn1cblxuZnVuY3Rpb24gX2xvYWRSZXNvdXJjZVZpZXcodmlld05hbWU6IHN0cmluZyk6IEVsZW1lbnQge1xuXHRjb25zdCBuYW1lID0gdmlld05hbWUucmVwbGFjZSgvXFwuL2csIFwiL1wiKSArIFwiLnZpZXcueG1sXCI7XG5cdGNvbnN0IHZpZXcgPSBMb2FkZXJFeHRlbnNpb25zLmxvYWRSZXNvdXJjZShuYW1lKTtcblx0cmV0dXJuIHZpZXcuZG9jdW1lbnRFbGVtZW50O1xufVxuXG5leHBvcnQgY29uc3QgcnVuWFBhdGhRdWVyeSA9IGZ1bmN0aW9uIChzZWxlY3Rvcjogc3RyaW5nLCB4bWxkb206IE5vZGUgfCB1bmRlZmluZWQpIHtcblx0cmV0dXJuIHNlbGVjdChzZWxlY3RvciwgeG1sZG9tKTtcbn07XG5cbmV4cGVjdC5leHRlbmQoe1xuXHR0b0hhdmVDb250cm9sKHhtbGRvbSwgc2VsZWN0b3IpIHtcblx0XHRjb25zdCBub2RlcyA9IHJ1blhQYXRoUXVlcnkoX2dldFRlbXBsYXRlZFNlbGVjdG9yKHhtbGRvbSwgc2VsZWN0b3IpLCB4bWxkb20pO1xuXHRcdHJldHVybiB7XG5cdFx0XHRtZXNzYWdlOiAoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG91dHB1dFhtbCA9IHNlcmlhbGl6ZVhNTCh4bWxkb20pO1xuXHRcdFx0XHRyZXR1cm4gYGRpZCBub3QgZmluZCBjb250cm9scyBtYXRjaGluZyAke3NlbGVjdG9yfSBpbiBnZW5lcmF0ZWQgeG1sOlxcbiAke291dHB1dFhtbH1gO1xuXHRcdFx0fSxcblx0XHRcdHBhc3M6IG5vZGVzICYmIG5vZGVzLmxlbmd0aCA+PSAxXG5cdFx0fTtcblx0fSxcblx0dG9Ob3RIYXZlQ29udHJvbCh4bWxkb20sIHNlbGVjdG9yKSB7XG5cdFx0Y29uc3Qgbm9kZXMgPSBydW5YUGF0aFF1ZXJ5KF9nZXRUZW1wbGF0ZWRTZWxlY3Rvcih4bWxkb20sIHNlbGVjdG9yKSwgeG1sZG9tKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bWVzc2FnZTogKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBvdXRwdXRYbWwgPSBzZXJpYWxpemVYTUwoeG1sZG9tKTtcblx0XHRcdFx0cmV0dXJuIGBUaGVyZSBpcyBhIGNvbnRyb2wgbWF0Y2hpbmcgJHtzZWxlY3Rvcn0gaW4gZ2VuZXJhdGVkIHhtbDpcXG4gJHtvdXRwdXRYbWx9YDtcblx0XHRcdH0sXG5cdFx0XHRwYXNzOiBub2RlcyAmJiBub2Rlcy5sZW5ndGggPT09IDBcblx0XHR9O1xuXHR9LFxuXHQvKipcblx0ICogQ2hlY2tzIGZvciBlcnJvcnMgaW4gYHhtbGAgY3JlYXRlZCBkdXJpbmcgdGVtcGxhdGluZyBvZiBhbiBYTUwgc3RyaW5nIG9yXG5cdCAqIGFuIFhNTCBub2RlLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrZXMgZm9yIHRoZSB4bWwgZXJyb3JzIGNyZWF0ZWQgYnkgdGhlXG5cdCAqIGZ1bmN0aW9uIFtCdWlsZGluZ0Jsb2NrVGVtcGxhdGVQcm9jZXNzb3IuY3JlYXRlRXJyb3JYTUxde0BsaW5rIHNhcC5mZS5jb3JlLmJ1aWxkaW5nQmxvY2tzLnRlbXBsYXRpbmcuQnVpbGRpbmdCbG9ja1RlbXBsYXRlUHJvY2Vzc29yI2NyZWF0ZUVycm9yWE1MfS5cblx0ICogQHBhcmFtIHhtbCBYTUwgU3RyaW5nIG9yIFhNTCBOb2RlIHRvIGJlIHRlc3RlZCBmb3IgZXJyb3JzXG5cdCAqIEByZXR1cm5zIEplc3QgTWF0Y2hlciByZXN1bHQgb2JqZWN0XG5cdCAqL1xuXHR0b0hhdmVUZW1wbGF0aW5nRXJyb3JzKHhtbDogc3RyaW5nIHwgTm9kZSkge1xuXHRcdGNvbnN0IHhtbFRleHQgPSB0eXBlb2YgeG1sID09PSBcInN0cmluZ1wiID8geG1sIDogc2VyaWFsaXplWE1MKHhtbCk7XG5cdFx0Y29uc3QgYmFzZTY0RW50cmllczogc3RyaW5nW10gPSB4bWxUZXh0Lm1hdGNoKC9CQkZcXC5iYXNlNjREZWNvZGVcXCgnKFteJ10qKSdcXCkvZ20pIHx8IChbXSBhcyBzdHJpbmdbXSk7XG5cdFx0Y29uc3QgZXJyb3JNZXNzYWdlczogc3RyaW5nW10gPSBiYXNlNjRFbnRyaWVzLm1hcCgobWVzc2FnZTogc3RyaW5nKSA9PiB7XG5cdFx0XHRpZiAobWVzc2FnZSAmJiBtZXNzYWdlLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0cmV0dXJuIGF0b2IobWVzc2FnZS5tYXRjaCgvKCdbXiddKikvKT8uWzBdPy5zbGljZSgxKSB8fCBcIlwiKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBcIlwiO1xuXHRcdH0pO1xuXHRcdGlmIChlcnJvck1lc3NhZ2VzLmxlbmd0aCA8PSAwKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRtZXNzYWdlOiAoKSA9PiBgWE1MIFRlbXBsYXRpbmcgd2l0aG91dCBlcnJvcnNgLFxuXHRcdFx0XHRwYXNzOiBmYWxzZVxuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0bWVzc2FnZTogKCkgPT4gZXJyb3JNZXNzYWdlcy5qb2luKFwiXFxuXCIpLFxuXHRcdFx0XHRwYXNzOiB0cnVlXG5cdFx0XHR9O1xuXHRcdH1cblx0fVxufSk7XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRCdWlsZGluZ0Jsb2NrWE1MID0gZnVuY3Rpb24gKHhtbFN0cmluZzogc3RyaW5nIHwgc3RyaW5nW10pOiBzdHJpbmcge1xuXHRpZiAoQXJyYXkuaXNBcnJheSh4bWxTdHJpbmcpKSB7XG5cdFx0eG1sU3RyaW5nID0geG1sU3RyaW5nLmpvaW4oXCJcIik7XG5cdH1cblx0cmV0dXJuIGZvcm1hdFhNTCh4bWxTdHJpbmcpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnRyb2xBdHRyaWJ1dGUgPSBmdW5jdGlvbiAoY29udHJvbFNlbGVjdG9yOiBzdHJpbmcsIGF0dHJpYnV0ZU5hbWU6IHN0cmluZywgeG1sRG9tOiBOb2RlKSB7XG5cdGNvbnN0IHNlbGVjdG9yID0gYHN0cmluZygke19nZXRUZW1wbGF0ZWRTZWxlY3Rvcih4bWxEb20sIGNvbnRyb2xTZWxlY3Rvcil9L0Ake2F0dHJpYnV0ZU5hbWV9KWA7XG5cdHJldHVybiBydW5YUGF0aFF1ZXJ5KHNlbGVjdG9yLCB4bWxEb20pO1xufTtcblxuLyoqXG4gKiBTZXJpYWxpemUgdGhlIHBhcnRzIG9yIHRoZSBjb21wbGV0ZSBnaXZlbiBYTUwgRE9NIHRvIHN0cmluZy5cbiAqIEBwYXJhbSB4bWxEb20gRE9NIG5vZGUgdGhhdCBpcyB0byBiZSBzZXJpYWxpemVkLlxuICogQHBhcmFtIHNlbGVjdG9yIE9wdGlvbmFsIHNlbGVjdG9yIG9mIHN1YiBub2Rlc1xuICogQHJldHVybnMgWE1MIHN0cmluZ1xuICovXG5leHBvcnQgY29uc3Qgc2VyaWFsaXplWE1MID0gZnVuY3Rpb24gKHhtbERvbTogTm9kZSwgc2VsZWN0b3I/OiBzdHJpbmcpIHtcblx0Y29uc3Qgc2VyaWFsaXplciA9IG5ldyB3aW5kb3cuWE1MU2VyaWFsaXplcigpO1xuXHRsZXQgeG1sU3RyaW5nOiBzdHJpbmc7XG5cdGlmIChzZWxlY3Rvcikge1xuXHRcdGNvbnN0IG5vZGVzID0gcnVuWFBhdGhRdWVyeShzZWxlY3RvciwgeG1sRG9tKSBhcyBOb2RlW107XG5cdFx0eG1sU3RyaW5nID0gbm9kZXMubWFwKChub2RlKSA9PiBzZXJpYWxpemVyLnNlcmlhbGl6ZVRvU3RyaW5nKG5vZGUpKS5qb2luKFwiXFxuXCIpO1xuXHR9IGVsc2Uge1xuXHRcdHhtbFN0cmluZyA9IHNlcmlhbGl6ZXIuc2VyaWFsaXplVG9TdHJpbmcoeG1sRG9tKTtcblx0fVxuXHRyZXR1cm4gZm9ybWF0WE1MKHhtbFN0cmluZyk7XG59O1xuXG4vKipcbiAqIEZvcm1hdHMgYSBzdHJpbmcgY29udGFpbmluZyBhbiBYTUwgZG9jdW1lbnQuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBvbmx5IGNvbnNpZGVycyBYTUwgdGFncyBhbmQgYXR0cmlidXRlcywgaWdub3JpbmcgZXZlcnl0aGluZyBlbHNlICh0ZXh0LCBjb21tZW50cykuIEFkZGl0aW9uYWxseSxcbiAqIGF0dHJpYnV0ZSB2YWx1ZXMgY29udGFpbmluZyBhIHZhcnlpbmcgVUlEIGFyZSByZXBsYWNlZCB3aXRoIGEgY29uc3RhbnQgdmFsdWUuXG4gKlxuICogQW4gXCJYTUxcIiBzdHJpbmcgY29udGFpbmluZyBtdWx0aXBsZSByb290IGVsZW1lbnRzIGNhbiBiZS5cbiAqIEBwYXJhbSB4bWxTdHJpbmcgIFRoZSBpbnB1dCBYTUwgc3RyaW5nLiBUaGlzIGZ1bmN0aW9uIGFsc28gYWNjZXB0cyBcIlhNTFwiIHN0cmluZ3Mgd2l0aCBtdWx0aXBsZSByb290IGVsZW1lbnRzLlxuICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCBYTUwgc3RyaW5nLlxuICovXG5leHBvcnQgY29uc3QgZm9ybWF0WE1MID0gZnVuY3Rpb24gKHhtbFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3QgU1RBUlQgPSBcIjxfX1hNTF9fPlwiLFxuXHRcdEVORCA9IFwiPC9fX1hNTF9fPlwiLFxuXHRcdFVJRCA9IC91aWQtLWlkLVxcZHsxM30tXFxkezEsM30vLFxuXHRcdFVJRDIgPSAvaWQtXFxkezEzfS1cXGR7MSwzfS8sXG5cdFx0bGluZXM6IHN0cmluZ1tdID0gW107XG5cblx0bGV0IGN1cnJlbnRMaW5lID0gXCJcIixcblx0XHRsZXZlbCA9IC0xLFxuXHRcdGF0dHJpYnV0ZXM6IHsgbmFtZTogc3RyaW5nOyB2YWx1ZT86IHN0cmluZyB9W10gPSBbXTtcblxuXHRmdW5jdGlvbiBuZXdsaW5lKCkge1xuXHRcdGlmIChjdXJyZW50TGluZSAmJiBjdXJyZW50TGluZSAhPT0gU1RBUlQpIHtcblx0XHRcdGxpbmVzLnB1c2goY3VycmVudExpbmUpO1xuXHRcdH1cblxuXHRcdGN1cnJlbnRMaW5lID0gbGV2ZWwgPiAwID8gXCIgIFwiLnJlcGVhdChsZXZlbCkgOiBcIlwiO1xuXHR9XG5cblx0ZnVuY3Rpb24gYXBwZW5kQXR0cmlidXRlcygpIHtcblx0XHRpZiAoYXR0cmlidXRlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRhdHRyaWJ1dGVzID0gYXR0cmlidXRlcy5zb3J0KChhLCBiKSA9PiB7XG5cdFx0XHRcdGlmIChhLm5hbWUuc3RhcnRzV2l0aChcInhtbG5zXCIpICYmICFiLm5hbWUuc3RhcnRzV2l0aChcInhtbG5zXCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCFhLm5hbWUuc3RhcnRzV2l0aChcInhtbG5zXCIpICYmIGIubmFtZS5zdGFydHNXaXRoKFwieG1sbnNcIikpIHtcblx0XHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdFx0fSBlbHNlIGlmIChhLm5hbWUuc3RhcnRzV2l0aChcInhtbG5zXCIpICYmIGIubmFtZS5zdGFydHNXaXRoKFwieG1sbnNcIikpIHtcblx0XHRcdFx0XHRyZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcblx0XHRcdFx0fSBlbHNlIGlmIChhLm5hbWUuaW5jbHVkZXMoXCI6XCIpICYmICFiLm5hbWUuaW5jbHVkZXMoXCI6XCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCFhLm5hbWUuaW5jbHVkZXMoXCI6XCIpICYmIGIubmFtZS5pbmNsdWRlcyhcIjpcIikpIHtcblx0XHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdGxldmVsKys7XG5cdFx0XHRmb3IgKGNvbnN0IGF0dHJpYnV0ZSBvZiBhdHRyaWJ1dGVzKSB7XG5cdFx0XHRcdG5ld2xpbmUoKTtcblx0XHRcdFx0Y3VycmVudExpbmUgKz0gYXR0cmlidXRlLm5hbWU7XG5cdFx0XHRcdGlmIChhdHRyaWJ1dGUudmFsdWUpIGN1cnJlbnRMaW5lICs9IGF0dHJpYnV0ZS52YWx1ZTtcblx0XHRcdH1cblx0XHRcdGxldmVsLS07XG5cdFx0XHRhdHRyaWJ1dGVzID0gW107XG5cdFx0XHRuZXdsaW5lKCk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gYXBwZW5kKGRhdGE6IFJhbmdlKSB7XG5cdFx0Y3VycmVudExpbmUgKz0gcGFyc2VyLnJlYWQoZGF0YSk7XG5cdH1cblxuXHRjb25zdCBwYXJzZXIgPSBjcmVhdGVQYXJzZXIoe1xuXHRcdG9uT3BlblRhZ1N0YXJ0KGRhdGE6IFJhbmdlKSB7XG5cdFx0XHRuZXdsaW5lKCk7XG5cdFx0XHRhcHBlbmQoZGF0YSk7XG5cdFx0fSxcblxuXHRcdG9uT3BlblRhZ05hbWU6IGFwcGVuZCxcblxuXHRcdG9uQXR0ck5hbWUoZGF0YTogUmFuZ2UpIHtcblx0XHRcdGF0dHJpYnV0ZXMudW5zaGlmdCh7IG5hbWU6IHBhcnNlci5yZWFkKGRhdGEpIH0pO1xuXHRcdH0sXG5cblx0XHRvbkF0dHJWYWx1ZShkYXRhOiBSYW5nZXMuQXR0clZhbHVlKSB7XG5cdFx0XHRhdHRyaWJ1dGVzWzBdLnZhbHVlID0gcGFyc2VyLnJlYWQoZGF0YSkucmVwbGFjZShVSUQsIFwidWlkLS1pZFwiKTsgLy8gcmVwbGFjZSB2YXJ5aW5nIFVJRHMgd2l0aCBhIGNvbnN0YW50IHZhbHVlXG5cdFx0XHRhdHRyaWJ1dGVzWzBdLnZhbHVlID0gcGFyc2VyLnJlYWQoZGF0YSkucmVwbGFjZShVSUQyLCBcImlkXCIpOyAvLyByZXBsYWNlIHZhcnlpbmcgVUlEcyB3aXRoIGEgY29uc3RhbnQgdmFsdWVcblx0XHR9LFxuXG5cdFx0b25PcGVuVGFnRW5kKGRhdGE6IFJhbmdlcy5PcGVuVGFnRW5kKSB7XG5cdFx0XHRhcHBlbmRBdHRyaWJ1dGVzKCk7XG5cdFx0XHRhcHBlbmQoZGF0YSk7XG5cdFx0XHRpZiAoIWRhdGEuc2VsZkNsb3NlZCkgbGV2ZWwrKztcblx0XHR9LFxuXG5cdFx0b25DbG9zZVRhZ1N0YXJ0KGRhdGE6IFJhbmdlKSB7XG5cdFx0XHRsZXZlbC0tO1xuXHRcdFx0bmV3bGluZSgpO1xuXHRcdFx0YXBwZW5kKGRhdGEpO1xuXHRcdH0sXG5cblx0XHRvbkNsb3NlVGFnTmFtZTogYXBwZW5kLFxuXHRcdG9uQ2xvc2VUYWdFbmQ6IGFwcGVuZFxuXHR9KTtcblxuXHRwYXJzZXIucGFyc2UoU1RBUlQgKyB4bWxTdHJpbmcgKyBFTkQpO1xuXHRyZXR1cm4gbGluZXMuam9pbihcIlxcblwiKS50cmltKCk7XG59O1xuXG4vKipcbiAqIENvbXBpbGUgYSBDRFMgZmlsZSBpbnRvIGFuIEVETVggZmlsZS5cbiAqIEBwYXJhbSBjZHNVcmwgVGhlIHBhdGggdG8gdGhlIGZpbGUgY29udGFpbmluZyB0aGUgQ0RTIGRlZmluaXRpb24uIFRoaXMgZmlsZSBtdXN0IGRlY2xhcmUgdGhlIG5hbWVzcGFjZVxuICogc2FwLmZlLnRlc3QgYW5kIGEgc2VydmljZSBKZXN0U2VydmljZVxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgY3JlYXRpbmcgdGhlIEVETVggb3V0cHV0XG4gKiBAcmV0dXJucyBUaGUgcGF0aCBvZiB0aGUgZ2VuZXJhdGVkIEVETVhcbiAqL1xuZXhwb3J0IGNvbnN0IGNvbXBpbGVDRFMgPSBmdW5jdGlvbiAoY2RzVXJsOiBzdHJpbmcsIG9wdGlvbnM6IGNvbXBpbGVyLk9EYXRhT3B0aW9ucyA9IHt9KSB7XG5cdGNvbnN0IGNkc1N0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhjZHNVcmwsIFwidXRmLThcIik7XG5cdGNvbnN0IGVkbXhDb250ZW50ID0gY2RzMmVkbXgoY2RzU3RyaW5nLCBcInNhcC5mZS50ZXN0Lkplc3RTZXJ2aWNlXCIsIG9wdGlvbnMpO1xuXHRjb25zdCBkaXIgPSBwYXRoLnJlc29sdmUoY2RzVXJsLCBcIi4uXCIsIFwiZ2VuXCIpO1xuXG5cdC8vIElmIHRoZSBjYWxsZXIgcHJvdmlkZWQgQ0RTIGNvbXBpbGVyIG9wdGlvbnM6IEluY2x1ZGUgdGhlbSBpbiB0aGUgZmlsZW5hbWUuIFRoaXMgcHJldmVudHMgdW5wcmVkaWN0YWJsZSByZXN1bHRzIGlmIHRoZSBzYW1lIENEUyBzb3VyY2Vcblx0Ly8gZmlsZSBpcyB1c2VkIHNpbXVsdGFuZW91c2x5IHdpdGggYSBkaWZmZXJlbnQgc2V0IG9mIG9wdGlvbnMgKGUuZy4gaW4gYSB0ZXN0IHJ1bm5pbmcgaW4gcGFyYWxsZWwpXG5cdGNvbnN0IGFsbE9wdGlvbnMgPSBPYmplY3QuZW50cmllcyhvcHRpb25zKTtcblx0YWxsT3B0aW9ucy5zb3J0KChhLCBiKSA9PiBiWzBdLmxvY2FsZUNvbXBhcmUoYVswXSkpO1xuXG5cdGNvbnN0IGVkbXhGaWxlTmFtZSA9XG5cdFx0YWxsT3B0aW9ucy5yZWR1Y2UoXG5cdFx0XHQoZmlsZW5hbWUsIFtvcHRpb25LZXksIG9wdGlvblZhbHVlXSkgPT4gYCR7ZmlsZW5hbWV9IyR7b3B0aW9uS2V5fT0ke29wdGlvblZhbHVlLnRvU3RyaW5nKCl9I2AsXG5cdFx0XHRwYXRoLmJhc2VuYW1lKGNkc1VybCkucmVwbGFjZShcIi5jZHNcIiwgXCJcIilcblx0XHQpICsgXCIueG1sXCI7XG5cblx0Y29uc3QgZWRteEZpbGVQYXRoID0gcGF0aC5yZXNvbHZlKGRpciwgZWRteEZpbGVOYW1lKTtcblxuXHRmcy5ta2RpclN5bmMoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuXHRmcy53cml0ZUZpbGVTeW5jKGVkbXhGaWxlUGF0aCwgZWRteENvbnRlbnQpO1xuXHRyZXR1cm4gZWRteEZpbGVQYXRoO1xufTtcblxuLyoqXG4gKiBDb21waWxlIENEUyB0byBFRE1YLlxuICogQHBhcmFtIGNkcyBUaGUgQ0RTIG1vZGVsLiBJdCBtdXN0IGRlZmluZSBhdCBsZWFzdCBvbmUgc2VydmljZS5cbiAqIEBwYXJhbSBzZXJ2aWNlIFRoZSBmdWxseS1xdWFsaWZpZWQgbmFtZSBvZiB0aGUgc2VydmljZSB0byBiZSBjb21waWxlZC4gRGVmYXVsdHMgdG8gXCJzYXAuZmUudGVzdC5KZXN0U2VydmljZVwiLlxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgY3JlYXRpbmcgdGhlIEVETVggb3V0cHV0XG4gKiBAcmV0dXJucyBUaGUgY29tcGlsZWQgc2VydmljZSBtb2RlbCBhcyBFRE1YLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2RzMmVkbXgoY2RzOiBzdHJpbmcsIHNlcnZpY2UgPSBcInNhcC5mZS50ZXN0Lkplc3RTZXJ2aWNlXCIsIG9wdGlvbnM6IGNvbXBpbGVyLk9EYXRhT3B0aW9ucyA9IHt9KSB7XG5cdGNvbnN0IHNvdXJjZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7IFwic291cmNlLmNkc1wiOiBjZHMgfTtcblxuXHQvLyBhbGxvdyB0byBpbmNsdWRlIHN0dWZmIGZyb20gQHNhcC9jZHMvY29tbW9uXG5cdGlmIChjZHMuaW5jbHVkZXMoXCInQHNhcC9jZHMvY29tbW9uJ1wiKSkge1xuXHRcdHNvdXJjZXNbXCJjb21tb24uY2RzXCJdID0gZnMucmVhZEZpbGVTeW5jKHJlcXVpcmUucmVzb2x2ZShcIkBzYXAvY2RzL2NvbW1vbi5jZHNcIiksIFwidXRmLThcIik7XG5cdH1cblxuXHRjb25zdCBjc24gPSBjb21waWxlci5jb21waWxlU291cmNlcyhzb3VyY2VzLCB7fSk7XG5cblx0Y29uc3QgZWRteE9wdGlvbnM6IGNvbXBpbGVyLk9EYXRhT3B0aW9ucyA9IHtcblx0XHRvZGF0YUZvcmVpZ25LZXlzOiB0cnVlLFxuXHRcdG9kYXRhRm9ybWF0OiBcInN0cnVjdHVyZWRcIixcblx0XHRvZGF0YUNvbnRhaW5tZW50OiB0cnVlLFxuXHRcdC4uLm9wdGlvbnMsXG5cdFx0c2VydmljZTogc2VydmljZVxuXHR9O1xuXG5cdGNvbnN0IGVkbXggPSBjb21waWxlci50by5lZG14KGNzbiwgZWRteE9wdGlvbnMpO1xuXHRpZiAoIWVkbXgpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYENvbXBpbGF0aW9uIGZhaWxlZC4gSGludDogTWFrZSBzdXJlIHRoYXQgdGhlIENEUyBtb2RlbCBkZWZpbmVzIHNlcnZpY2UgJHtzZXJ2aWNlfS5gKTtcblx0fVxuXHRyZXR1cm4gZWRteDtcbn1cblxuZXhwb3J0IGNvbnN0IGdldEZha2VTaWRlRWZmZWN0c1NlcnZpY2UgPSBhc3luYyBmdW5jdGlvbiAoXG5cdG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdGNsYXNzTmFtZU9EYXRhTW9kZWwgPSBcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YU1vZGVsXCJcbik6IFByb21pc2U8U2lkZUVmZmVjdHNTZXJ2aWNlPiB7XG5cdGNvbnN0IHNjb3BlT2JqZWN0ID0ge1xuXHRcdGdldE1vZGVsOiAoKSA9PiB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRpc0E6ICgpID0+IGNsYXNzTmFtZU9EYXRhTW9kZWwgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTW9kZWxcIixcblx0XHRcdFx0Z2V0TWV0YU1vZGVsOiAoKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIG1ldGFNb2RlbDtcblx0XHRcdFx0fSxcblx0XHRcdFx0Z2V0U2VydmljZVVybDogKCkgPT4gdW5kZWZpbmVkXG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0Z2V0U2VydmljZTogKCkgPT4ge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0Z2V0Q2FwYWJpbGl0aWVzOiAoKSA9PiB1bmRlZmluZWRcblx0XHRcdH07XG5cdFx0fVxuXHR9O1xuXHRjb25zdCBzZXJ2aWNlSW5zdGFuY2UgPSBhd2FpdCBuZXcgU2lkZUVmZmVjdHNGYWN0b3J5KCkuY3JlYXRlSW5zdGFuY2UoeyBzY29wZU9iamVjdCwgc2NvcGVUeXBlOiBcIlwiLCBzZXR0aW5nczoge30gfSk7XG5cdHJldHVybiBzZXJ2aWNlSW5zdGFuY2UuZ2V0SW50ZXJmYWNlKCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RmFrZURpYWdub3N0aWNzID0gZnVuY3Rpb24gKCk6IElEaWFnbm9zdGljcyB7XG5cdGNvbnN0IGlzc3VlczogYW55W10gPSBbXTtcblx0cmV0dXJuIHtcblx0XHRhZGRJc3N1ZShpc3N1ZUNhdGVnb3J5OiBJc3N1ZUNhdGVnb3J5LCBpc3N1ZVNldmVyaXR5OiBJc3N1ZVNldmVyaXR5LCBkZXRhaWxzOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRcdGlzc3Vlcy5wdXNoKHtcblx0XHRcdFx0aXNzdWVDYXRlZ29yeSxcblx0XHRcdFx0aXNzdWVTZXZlcml0eSxcblx0XHRcdFx0ZGV0YWlsc1xuXHRcdFx0fSk7XG5cdFx0fSxcblx0XHRnZXRJc3N1ZXMoKTogYW55W10ge1xuXHRcdFx0cmV0dXJuIGlzc3Vlcztcblx0XHR9LFxuXHRcdGNoZWNrSWZJc3N1ZUV4aXN0cyhpc3N1ZUNhdGVnb3J5OiBJc3N1ZUNhdGVnb3J5LCBpc3N1ZVNldmVyaXR5OiBJc3N1ZVNldmVyaXR5LCBkZXRhaWxzOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRcdHJldHVybiBpc3N1ZXMuZmluZCgoaXNzdWUpID0+IHtcblx0XHRcdFx0cmV0dXJuIGlzc3VlLmlzc3VlQ2F0ZWdvcnkgPT09IGlzc3VlQ2F0ZWdvcnkgJiYgaXNzdWUuaXNzdWVTZXZlcml0eSA9PT0gaXNzdWVTZXZlcml0eSAmJiBpc3N1ZS5kZXRhaWxzID09PSBkZXRhaWxzO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnZlcnRlckNvbnRleHRGb3JUZXN0ID0gZnVuY3Rpb24gKFxuXHRtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRtYW5pZmVzdFNldHRpbmdzOiBMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5ncyB8IE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzXG4pIHtcblx0Y29uc3QgY29udmVydGVkVHlwZXMgPSBjb252ZXJ0VHlwZXMobWV0YU1vZGVsKTtcblx0Y29uc3QgZGF0YU1vZGVsUGF0aCA9IG1hbmlmZXN0U2V0dGluZ3MuY29udGV4dFBhdGhcblx0XHQ/IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChtYW5pZmVzdFNldHRpbmdzLmNvbnRleHRQYXRoKSBhcyBDb250ZXh0KVxuXHRcdDogZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPFBhZ2VDb250ZXh0UGF0aFRhcmdldD4obWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAvJHttYW5pZmVzdFNldHRpbmdzLmVudGl0eVNldH1gKSk7XG5cdHJldHVybiBuZXcgQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KFxuXHRcdGNvbnZlcnRlZFR5cGVzLFxuXHRcdG5ldyBNYW5pZmVzdFdyYXBwZXIobWFuaWZlc3RTZXR0aW5ncyksXG5cdFx0Z2V0RmFrZURpYWdub3N0aWNzKCksXG5cdFx0ZGF0YU1vZGVsUGF0aFxuXHQpO1xufTtcbmNvbnN0IG1ldGFNb2RlbENhY2hlOiBhbnkgPSB7fTtcbmV4cG9ydCBjb25zdCBnZXRNZXRhTW9kZWwgPSBhc3luYyBmdW5jdGlvbiAoc01ldGFkYXRhVXJsOiBzdHJpbmcpIHtcblx0Y29uc3Qgb1JlcXVlc3RvciA9IF9NZXRhZGF0YVJlcXVlc3Rvci5jcmVhdGUoe30sIFwiNC4wXCIsIHVuZGVmaW5lZCwge30sIHt9LCBmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH0pO1xuXHRpZiAoIW1ldGFNb2RlbENhY2hlW3NNZXRhZGF0YVVybF0pIHtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gbmV3IChPRGF0YU1ldGFNb2RlbCBhcyBhbnkpKG9SZXF1ZXN0b3IsIHNNZXRhZGF0YVVybCwgdW5kZWZpbmVkLCB7IF9yZXF1ZXN0QW5ub3RhdGlvbkNoYW5nZXM6ICgpID0+IFtdIH0pO1xuXHRcdGF3YWl0IG9NZXRhTW9kZWwuZmV0Y2hFbnRpdHlDb250YWluZXIoKTtcblx0XHRtZXRhTW9kZWxDYWNoZVtzTWV0YWRhdGFVcmxdID0gb01ldGFNb2RlbDtcblx0fVxuXG5cdHJldHVybiBtZXRhTW9kZWxDYWNoZVtzTWV0YWRhdGFVcmxdO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JQcm9wZXJ0eSA9IGZ1bmN0aW9uIDxUID0gUHJvcGVydHkgfCBFbnRpdHlTZXQgfCBBbnlBbm5vdGF0aW9uPihcblx0ZW50aXR5U2V0OiBFbnRpdHlTZXQsXG5cdGNvbnZlcnRlZFR5cGVzOiBDb252ZXJ0ZWRNZXRhZGF0YSxcblx0cHJvcGVydHk/OiBUXG4pOiBEYXRhTW9kZWxPYmplY3RQYXRoPFQ+IHtcblx0Y29uc3QgdGFyZ2V0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxUPiA9IHtcblx0XHRzdGFydGluZ0VudGl0eVNldDogZW50aXR5U2V0LFxuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0aWVzOiBbXSxcblx0XHR0YXJnZXRPYmplY3Q6IHByb3BlcnR5LFxuXHRcdHRhcmdldEVudGl0eVNldDogZW50aXR5U2V0LFxuXHRcdHRhcmdldEVudGl0eVR5cGU6IGVudGl0eVNldC5lbnRpdHlUeXBlLFxuXHRcdGNvbnZlcnRlZFR5cGVzOiBjb252ZXJ0ZWRUeXBlc1xuXHR9O1xuXHR0YXJnZXRQYXRoLmNvbnRleHRMb2NhdGlvbiA9IHRhcmdldFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxFbnRpdHlTZXQ+O1xuXHRyZXR1cm4gdGFyZ2V0UGF0aDtcbn07XG5cbmV4cG9ydCBjb25zdCBldmFsdWF0ZUJpbmRpbmcgPSBmdW5jdGlvbiAoYmluZGluZ1N0cmluZzogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSkge1xuXHRjb25zdCBiaW5kaW5nRWxlbWVudCA9IEJpbmRpbmdQYXJzZXIuY29tcGxleFBhcnNlcihiaW5kaW5nU3RyaW5nKTtcblx0cmV0dXJuIGJpbmRpbmdFbGVtZW50LmZvcm1hdHRlci5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xufTtcblxudHlwZSBNb2RlbENvbnRlbnQgPSB7XG5cdFtuYW1lOiBzdHJpbmddOiBhbnk7XG59O1xuXG4vKipcbiAqIEV2YWx1YXRlIGEgYmluZGluZyBhZ2FpbnN0IGEgbW9kZWwuXG4gKiBAcGFyYW0gYmluZGluZ1N0cmluZyBUaGUgYmluZGluZyBzdHJpbmcuXG4gKiBAcGFyYW0gbW9kZWxDb250ZW50IENvbnRlbnQgb2YgdGhlIGRlZmF1bHQgbW9kZWwgdG8gdXNlIGZvciBldmFsdWF0aW9uLlxuICogQHBhcmFtIG5hbWVkTW9kZWxzQ29udGVudCBDb250ZW50cyBvZiBhZGRpdGlvbmFsLCBuYW1lZCBtb2RlbHMgdG8gdXNlLlxuICogQHJldHVybnMgVGhlIGV2YWx1YXRlZCBiaW5kaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXZhbHVhdGVCaW5kaW5nV2l0aE1vZGVsKFxuXHRiaW5kaW5nU3RyaW5nOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdG1vZGVsQ29udGVudDogTW9kZWxDb250ZW50LFxuXHRuYW1lZE1vZGVsc0NvbnRlbnQ/OiB7IFttb2RlbE5hbWU6IHN0cmluZ106IE1vZGVsQ29udGVudCB9XG4pOiBzdHJpbmcge1xuXHRjb25zdCBiaW5kaW5nRWxlbWVudCA9IEJpbmRpbmdQYXJzZXIuY29tcGxleFBhcnNlcihiaW5kaW5nU3RyaW5nKTtcblx0Y29uc3QgdGV4dCA9IG5ldyBJbnZpc2libGVUZXh0KCk7XG5cdHRleHQuYmluZFByb3BlcnR5KFwidGV4dFwiLCBiaW5kaW5nRWxlbWVudCk7XG5cblx0Y29uc3QgZGVmYXVsdE1vZGVsID0gbmV3IEpTT05Nb2RlbChtb2RlbENvbnRlbnQpO1xuXHR0ZXh0LnNldE1vZGVsKGRlZmF1bHRNb2RlbCk7XG5cdHRleHQuc2V0QmluZGluZ0NvbnRleHQoZGVmYXVsdE1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSk7XG5cblx0aWYgKG5hbWVkTW9kZWxzQ29udGVudCkge1xuXHRcdGZvciAoY29uc3QgW25hbWUsIGNvbnRlbnRdIG9mIE9iamVjdC5lbnRyaWVzKG5hbWVkTW9kZWxzQ29udGVudCkpIHtcblx0XHRcdGNvbnN0IG1vZGVsID0gbmV3IEpTT05Nb2RlbChjb250ZW50KTtcblx0XHRcdHRleHQuc2V0TW9kZWwobW9kZWwsIG5hbWUpO1xuXHRcdFx0dGV4dC5zZXRCaW5kaW5nQ29udGV4dChtb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIiksIG5hbWUpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0ZXh0LmdldFRleHQoKTtcbn1cblxuY29uc3QgVEVTVFZJRVdJRCA9IFwidGVzdFZpZXdJZFwiO1xuXG5jb25zdCBhcHBseUZsZXhDaGFuZ2VzID0gYXN5bmMgZnVuY3Rpb24gKGZsZXhDaGFuZ2VzOiB7IFt4OiBzdHJpbmddOiBvYmplY3RbXSB9LCBvTWV0YU1vZGVsOiBNZXRhTW9kZWwsIHJlc3VsdFhNTDogYW55KSB7XG5cdC8vIHByZWZpeCBJZHNcblx0Wy4uLnJlc3VsdFhNTC5xdWVyeVNlbGVjdG9yQWxsKFwiW2lkXVwiKV0uZm9yRWFjaCgobm9kZSkgPT4ge1xuXHRcdG5vZGUuaWQgPSBgJHtURVNUVklFV0lEfS0tJHtub2RlLmlkfWA7XG5cdH0pO1xuXHRjb25zdCBjaGFuZ2VzID0gY3JlYXRlRmxleGliaWxpdHlDaGFuZ2VzT2JqZWN0KFRFU1RWSUVXSUQsIGZsZXhDaGFuZ2VzKTtcblx0Y29uc3QgYXBwSWQgPSBcInNvbWVDb21wb25lbnRcIjtcblx0Y29uc3Qgb01hbmlmZXN0ID0ge1xuXHRcdFwic2FwLmFwcFwiOiB7XG5cdFx0XHRpZDogYXBwSWQsXG5cdFx0XHR0eXBlOiBcImFwcGxpY2F0aW9uXCIsXG5cdFx0XHRjcm9zc05hdmlnYXRpb246IHtcblx0XHRcdFx0b3V0Ym91bmRzOiBbXVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0Y29uc3Qgb0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50ID0ge1xuXHRcdGdldERpYWdub3N0aWNzOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKGdldEZha2VEaWFnbm9zdGljcygpKSxcblx0XHRnZXRNb2RlbDogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZSh7XG5cdFx0XHRnZXRNZXRhTW9kZWw6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUob01ldGFNb2RlbClcblx0XHR9KSxcblx0XHRnZXRDb21wb25lbnREYXRhOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHt9KSxcblx0XHRnZXRNYW5pZmVzdE9iamVjdDogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZSh7XG5cdFx0XHRnZXRFbnRyeTogZnVuY3Rpb24gKG5hbWU6IHN0cmluZykge1xuXHRcdFx0XHRyZXR1cm4gKG9NYW5pZmVzdCBhcyBhbnkpW25hbWVdO1xuXHRcdFx0fVxuXHRcdH0pLFxuXHRcdGdldExvY2FsSWQ6IGplc3QuZm4oKHNJZCkgPT4gc0lkKVxuXHR9IGFzIHVua25vd24gYXMgQXBwQ29tcG9uZW50O1xuXHQvL2Zha2UgY2hhbmdlc1xuXHRqZXN0LnNweU9uKEFwcFN0b3JhZ2UsIFwibG9hZEZsZXhEYXRhXCIpLm1vY2tSZXR1cm5WYWx1ZShQcm9taXNlLnJlc29sdmUoY2hhbmdlcykpO1xuXHRqZXN0LnNweU9uKExvYWRlciwgXCJsb2FkRmxleERhdGFcIikubW9ja1JldHVyblZhbHVlKFByb21pc2UucmVzb2x2ZShjaGFuZ2VzKSk7XG5cblx0amVzdC5zcHlPbihDb21wb25lbnQgYXMgdW5rbm93biBhcyB7IGdldENvbXBvbmVudEJ5SWQ6ICgpID0+IEFwcENvbXBvbmVudCB9LCBcImdldENvbXBvbmVudEJ5SWRcIikubW9ja1JldHVyblZhbHVlKG9BcHBDb21wb25lbnQpO1xuXHRqZXN0LnNweU9uKFV0aWxzLCBcImdldEFwcENvbXBvbmVudEZvckNvbnRyb2xcIikubW9ja1JldHVyblZhbHVlKG9BcHBDb21wb25lbnQpO1xuXHRhd2FpdCBGbGV4U3RhdGUuaW5pdGlhbGl6ZSh7XG5cdFx0Y29tcG9uZW50SWQ6IGFwcElkXG5cdH0pO1xuXHRyZXN1bHRYTUwgPSBhd2FpdCBYbWxQcmVwcm9jZXNzb3IucHJvY2VzcyhyZXN1bHRYTUwsIHsgbmFtZTogXCJUZXN0IEZyYWdtZW50XCIsIGNvbXBvbmVudElkOiBhcHBJZCwgaWQ6IFRFU1RWSUVXSUQgfSk7XG5cblx0Ly9Bc3NlcnQgdGhhdCBhbGwgY2hhbmdlcyBoYXZlIGJlZW4gYXBwbGllZFxuXHRjb25zdCBjaGFuZ2VzQXBwbGllZCA9IGdldENoYW5nZXNGcm9tWE1MKHJlc3VsdFhNTCk7XG5cdGV4cGVjdChjaGFuZ2VzQXBwbGllZC5sZW5ndGgpLnRvQmUoZmxleENoYW5nZXM/LmNoYW5nZXM/Lmxlbmd0aCA/PyAwICsgZmxleENoYW5nZXM/LnZhcmlhbnREZXBlbmRlbnRDb250cm9sQ2hhbmdlcz8ubGVuZ3RoID8/IDApO1xuXHRyZXR1cm4gcmVzdWx0WE1MO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENoYW5nZXNGcm9tWE1MID0gKHhtbDogYW55KSA9PlxuXHRbLi4ueG1sLnF1ZXJ5U2VsZWN0b3JBbGwoXCIqXCIpXVxuXHRcdC5mbGF0TWFwKChlKSA9PiBbLi4uZS5hdHRyaWJ1dGVzXS5tYXAoKGEpID0+IGEubmFtZSkpXG5cdFx0LmZpbHRlcigoYXR0cikgPT4gYXR0ci5pbmNsdWRlcyhcInNhcC51aS5mbC5hcHBsaWVkQ2hhbmdlc1wiKSk7XG5cbmV4cG9ydCBjb25zdCBnZXRUZW1wbGF0aW5nUmVzdWx0ID0gYXN5bmMgZnVuY3Rpb24gKFxuXHR4bWxJbnB1dDogc3RyaW5nLFxuXHRzTWV0YWRhdGFVcmw6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0bUJpbmRpbmdDb250ZXh0czogeyBbeDogc3RyaW5nXTogYW55OyBlbnRpdHlTZXQ/OiBzdHJpbmcgfSxcblx0bU1vZGVsczogeyBbeDogc3RyaW5nXTogYW55IH0sXG5cdGZsZXhDaGFuZ2VzPzogeyBbeDogc3RyaW5nXTogb2JqZWN0W10gfSxcblx0ZmFrZVNpZGVFZmZlY3RTZXJ2aWNlPzogdW5rbm93blxuKSB7XG5cdGlmICghbU1vZGVsc1tcInNhcC5mZS5pMThuXCJdKSB7XG5cdFx0bU1vZGVsc1tcInNhcC5mZS5pMThuXCJdID0gY3JlYXRlTW9ja1Jlc291cmNlTW9kZWwoKTtcblx0fVxuXG5cdGNvbnN0IHRlbXBsYXRlZFhtbCA9IGA8cm9vdD4ke3htbElucHV0fTwvcm9vdD5gO1xuXHRjb25zdCBwYXJzZXIgPSBuZXcgd2luZG93LkRPTVBhcnNlcigpO1xuXHRjb25zdCB4bWxEb2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKHRlbXBsYXRlZFhtbCwgXCJ0ZXh0L3htbFwiKTtcblx0Ly8gVG8gZW5zdXJlIG91ciBtYWNybyBjYW4gdXNlICNzZXRCaW5kaW5nQ29udGV4dCB3ZSBlbnN1cmUgdGhlcmUgaXMgYSBwcmUgZXhpc3RpbmcgSlNPTk1vZGVsIGZvciBjb252ZXJ0ZXJDb250ZXh0XG5cdC8vIGlmIG5vdCBhbHJlYWR5IHBhc3NlZCB0byB0ZWggdGVtcGxhdGluZ1xuXG5cdGNvbnN0IG9QcmVwcm9jZXNzb3JTZXR0aW5ncyA9IGF3YWl0IF9idWlsZFByZVByb2Nlc3NvclNldHRpbmdzKHNNZXRhZGF0YVVybCwgbUJpbmRpbmdDb250ZXh0cywgbU1vZGVscywgZmFrZVNpZGVFZmZlY3RTZXJ2aWNlKTtcblxuXHQvL1RoaXMgY29udGV4dCBmb3IgbWFjcm8gdGVzdGluZ1xuXHRpZiAob1ByZXByb2Nlc3NvclNldHRpbmdzLm1vZGVsc1tcInRoaXNcIl0pIHtcblx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3MuYmluZGluZ0NvbnRleHRzW1widGhpc1wiXSA9IG9QcmVwcm9jZXNzb3JTZXR0aW5ncy5tb2RlbHNbXCJ0aGlzXCJdLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKTtcblx0fVxuXG5cdGxldCByZXN1bHRYTUwgPSAoYXdhaXQgWE1MUHJlcHJvY2Vzc29yLnByb2Nlc3MoeG1sRG9jLmZpcnN0RWxlbWVudENoaWxkISwgeyBuYW1lOiBcIlRlc3QgRnJhZ21lbnRcIiB9LCBvUHJlcHJvY2Vzc29yU2V0dGluZ3MpKSBhcyBhbnk7XG5cblx0aWYgKHNNZXRhZGF0YVVybCAmJiBmbGV4Q2hhbmdlcykge1xuXHRcdC8vIGFwcGx5IGZsZXggY2hhbmdlc1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBhd2FpdCBnZXRNZXRhTW9kZWwoc01ldGFkYXRhVXJsKTtcblx0XHRyZXN1bHRYTUwgPSBhd2FpdCBhcHBseUZsZXhDaGFuZ2VzKGZsZXhDaGFuZ2VzLCBvTWV0YU1vZGVsLCByZXN1bHRYTUwpO1xuXHR9XG5cdHJldHVybiByZXN1bHRYTUw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VGVtcGxhdGVkWE1MID0gYXN5bmMgZnVuY3Rpb24gKFxuXHR4bWxJbnB1dDogc3RyaW5nLFxuXHRzTWV0YWRhdGFVcmw6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0bUJpbmRpbmdDb250ZXh0czogeyBbeDogc3RyaW5nXTogc3RyaW5nIH0sXG5cdG1Nb2RlbHM6IHsgW3g6IHN0cmluZ106IGFueSB9LFxuXHRmbGV4Q2hhbmdlcz86IHsgW3g6IHN0cmluZ106IG9iamVjdFtdIH0sXG5cdGZha2VTaWRlRWZmZWN0U2VydmljZT86IHVua25vd25cbik6IFByb21pc2U8c3RyaW5nPiB7XG5cdHJldHVybiBqc3guZGVmaW5lWE1MTmFtZXNwYWNlTWFwKHJldmVzZU5hbWVzcGFjZU1hcCwgYXN5bmMgKCkgPT4ge1xuXHRcdGNvbnN0IHRlbXBsYXRlZFhNTCA9IGF3YWl0IGdldFRlbXBsYXRpbmdSZXN1bHQoXG5cdFx0XHR4bWxJbnB1dCxcblx0XHRcdHNNZXRhZGF0YVVybCxcblx0XHRcdG1CaW5kaW5nQ29udGV4dHMsXG5cdFx0XHRtTW9kZWxzLFxuXHRcdFx0ZmxleENoYW5nZXMsXG5cdFx0XHRmYWtlU2lkZUVmZmVjdFNlcnZpY2Vcblx0XHQpO1xuXHRcdGNvbnN0IHNlcmlhbGllZFhNTCA9IHNlcmlhbGl6ZVhNTCh0ZW1wbGF0ZWRYTUwsIHVuZGVmaW5lZCk7XG5cdFx0ZXhwZWN0KHNlcmlhbGllZFhNTCkubm90LnRvSGF2ZVRlbXBsYXRpbmdFcnJvcnMoKTtcblx0XHRyZXR1cm4gc2VyaWFsaWVkWE1MO1xuXHR9KSBhcyB1bmtub3duIGFzIFByb21pc2U8c3RyaW5nPjtcbn07XG5cbi8qKlxuICogUHJvY2VzcyB0aGUgcmVxdWVzdGVkIHZpZXcgd2l0aCB0aGUgcHJvdmlkZWQgZGF0YS5cbiAqIEBwYXJhbSBuYW1lIEZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSB2aWV3IHRvIGJlIHRlc3RlZC5cbiAqIEBwYXJhbSBzTWV0YWRhdGFVcmwgVXJsIG9mIHRoZSBtZXRhZGF0YS5cbiAqIEBwYXJhbSBtQmluZGluZ0NvbnRleHRzIE1hcCBvZiB0aGUgYmluZGluZ0NvbnRleHRzIHRvIHNldCBvbiB0aGUgbW9kZWxzLlxuICogQHBhcmFtIG1Nb2RlbHMgTWFwIG9mIHRoZSBtb2RlbHMuXG4gKiBAcGFyYW0gZmxleENoYW5nZXMgT2JqZWN0IHdpdGggVUkgY2hhbmdlcyBsaWtlICdjaGFuZ2VzJyBvciAndmFyaWFudERlcGVuZGVudENvbnRyb2xDaGFuZ2VzJ1xuICogQHJldHVybnMgVGVtcGxhdGVkIHZpZXcgYXMgc3RyaW5nXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzVmlldyhcblx0bmFtZTogc3RyaW5nLFxuXHRzTWV0YWRhdGFVcmw6IHN0cmluZyxcblx0bUJpbmRpbmdDb250ZXh0czogeyBbeDogc3RyaW5nXTogc3RyaW5nIH0sXG5cdG1Nb2RlbHM6IHsgW3g6IHN0cmluZ106IGFueSB9LFxuXHRmbGV4Q2hhbmdlcz86IHsgW3g6IHN0cmluZ106IG9iamVjdFtdIH1cbik6IFByb21pc2U8SmVzdFRlbXBsYXRlZFZpZXc+IHtcblx0Y29uc3Qgb01ldGFNb2RlbCA9IGF3YWl0IGdldE1ldGFNb2RlbChzTWV0YWRhdGFVcmwpO1xuXHRjb25zdCBvVmlld0RvY3VtZW50ID0gX2xvYWRSZXNvdXJjZVZpZXcobmFtZSk7XG5cdGNvbnN0IG9QcmVwcm9jZXNzb3JTZXR0aW5ncyA9IGF3YWl0IF9idWlsZFByZVByb2Nlc3NvclNldHRpbmdzKHNNZXRhZGF0YVVybCwgbUJpbmRpbmdDb250ZXh0cywgbU1vZGVscyk7XG5cdGxldCBvUHJlcHJvY2Vzc2VkVmlldyA9IGF3YWl0IFhNTFByZXByb2Nlc3Nvci5wcm9jZXNzKG9WaWV3RG9jdW1lbnQsIHsgbmFtZTogbmFtZSB9LCBvUHJlcHJvY2Vzc29yU2V0dGluZ3MpO1xuXHRpZiAoZmxleENoYW5nZXMpIHtcblx0XHRvUHJlcHJvY2Vzc2VkVmlldyA9IGF3YWl0IGFwcGx5RmxleENoYW5nZXMoZmxleENoYW5nZXMgPz8gW10sIG9NZXRhTW9kZWwsIG9QcmVwcm9jZXNzZWRWaWV3KTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdGFzRWxlbWVudDogb1ByZXByb2Nlc3NlZFZpZXcsXG5cdFx0YXNTdHJpbmc6IGZvcm1hdFhNTChvUHJlcHJvY2Vzc2VkVmlldz8ub3V0ZXJIVE1MIHx8IFwiXCIpXG5cdH07XG59XG5cbi8qKlxuICogUHJvY2VzcyB0aGUgcmVxdWVzdGVkIFhNTCBmcmFnbWVudCB3aXRoIHRoZSBwcm92aWRlZCBkYXRhLlxuICogQHBhcmFtIG5hbWUgRnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIGZyYWdtZW50IHRvIGJlIHRlc3RlZC5cbiAqIEBwYXJhbSB0ZXN0RGF0YSBUZXN0IGRhdGEgY29uc2lzdGluZ1xuICogQHJldHVybnMgVGVtcGxhdGVkIGZyYWdtZW50IGFzIHN0cmluZ1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0ZyYWdtZW50KG5hbWU6IHN0cmluZywgdGVzdERhdGE6IHsgW21vZGVsOiBzdHJpbmddOiBvYmplY3QgfSk6IFByb21pc2U8c3RyaW5nPiB7XG5cdGNvbnN0IGlucHV0WG1sID0gYDxyb290Pjxjb3JlOkZyYWdtZW50IGZyYWdtZW50TmFtZT1cIiR7bmFtZX1cIiB0eXBlPVwiWE1MXCIgeG1sbnM6Y29yZT1cInNhcC51aS5jb3JlXCIgLz48L3Jvb3Q+YDtcblx0Y29uc3QgcGFyc2VyID0gbmV3IHdpbmRvdy5ET01QYXJzZXIoKTtcblxuXHRjb25zdCBpbnB1dERvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoaW5wdXRYbWwsIFwidGV4dC94bWxcIik7XG5cblx0Ly8gYnVpbGQgbW9kZWwgYW5kIGJpbmRpbmdzIGZvciBnaXZlbiB0ZXN0IGRhdGFcblx0Y29uc3Qgc2V0dGluZ3MgPSB7XG5cdFx0bW9kZWxzOiB7fSBhcyB7IFtuYW1lOiBzdHJpbmddOiBKU09OTW9kZWwgfSxcblx0XHRiaW5kaW5nQ29udGV4dHM6IHt9IGFzIHsgW25hbWU6IHN0cmluZ106IG9iamVjdCB9LFxuXHRcdGFwcENvbXBvbmVudDogeyBnZXRTaWRlRWZmZWN0c1NlcnZpY2U6IGplc3QuZm4oKSwgZ2V0RGlhZ25vc3RpY3M6ICgpID0+IHVuZGVmaW5lZCB9XG5cdH07XG5cdGZvciAoY29uc3QgbW9kZWwgaW4gdGVzdERhdGEpIHtcblx0XHRjb25zdCBqc29uTW9kZWwgPSBuZXcgSlNPTk1vZGVsKCk7XG5cdFx0anNvbk1vZGVsLnNldERhdGEodGVzdERhdGFbbW9kZWxdKTtcblx0XHRzZXR0aW5ncy5tb2RlbHNbbW9kZWxdID0ganNvbk1vZGVsO1xuXHRcdHNldHRpbmdzLmJpbmRpbmdDb250ZXh0c1ttb2RlbF0gPSBzZXR0aW5ncy5tb2RlbHNbbW9kZWxdLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKTtcblx0fVxuXHRzZXR0aW5ncy5hcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlLm1vY2tSZXR1cm5WYWx1ZShkZWZhdWx0RmFrZVNpZGVFZmZlY3RTZXJ2aWNlKTtcblxuXHQvLyBleGVjdXRlIHRoZSBwcmUtcHJvY2Vzc29yXG5cdGNvbnN0IHJlc3VsdERvYyA9IGF3YWl0IFhNTFByZXByb2Nlc3Nvci5wcm9jZXNzKGlucHV0RG9jLmZpcnN0RWxlbWVudENoaWxkLCB7IG5hbWUgfSwgc2V0dGluZ3MpO1xuXG5cdC8vIGV4Y2x1ZGUgbmVzdGVkIGZyYWdtZW50cyBmcm9tIHRlc3Qgc25hcHNob3RzXG5cdGNvbnN0IGZyYWdtZW50cyA9IHJlc3VsdERvYy5nZXRFbGVtZW50c0J5VGFnTmFtZShcImNvcmU6RnJhZ21lbnRcIikgYXMgYW55O1xuXHRpZiAoZnJhZ21lbnRzPy5sZW5ndGggPiAwKSB7XG5cdFx0Zm9yIChjb25zdCBmcmFnbWVudCBvZiBmcmFnbWVudHMpIHtcblx0XHRcdGZyYWdtZW50LmlubmVySFRNTCA9IFwiXCI7XG5cdFx0fVxuXHR9XG5cblx0Ly8gS2VlcCB0aGUgZnJhZ21lbnQgcmVzdWx0IGFzIGNoaWxkIG9mIHJvb3Qgbm9kZSB3aGVuIGZyYWdtZW50IGdlbmVyYXRlcyBtdWx0aXBsZSByb290IGNvbnRyb2xzXG5cdGNvbnN0IHhtbFJlc3VsdCA9IHJlc3VsdERvYy5jaGlsZHJlbi5sZW5ndGggPiAxID8gcmVzdWx0RG9jLm91dGVySFRNTCA6IHJlc3VsdERvYy5pbm5lckhUTUw7XG5cblx0cmV0dXJuIGZvcm1hdFhNTCh4bWxSZXN1bHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplQ29udHJvbChjb250cm9sVG9TZXJpYWxpemU/OiBVSTVFbGVtZW50IHwgVUk1RWxlbWVudFtdLCBzaG93Q3VzdG9tU3R5bGVDbGFzc2VzID0gZmFsc2UpIHtcblx0bGV0IHRhYkNvdW50ID0gMDtcblx0Y29uc3QgVUlEID0gL3VpZC0taWQtXFxkezEzfS1cXGR7MSwzfS87XG5cdGNvbnN0IENPTlRST0xJRCA9IC9pZC1cXGR7MTN9LVxcZHsxLDN9Lztcblx0ZnVuY3Rpb24gZ2V0VGFiKHRvQWRkID0gMCkge1xuXHRcdGxldCB0YWIgPSBcIlwiO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGFiQ291bnQgKyB0b0FkZDsgaSsrKSB7XG5cdFx0XHR0YWIgKz0gXCJcXHRcIjtcblx0XHR9XG5cdFx0cmV0dXJuIHRhYjtcblx0fVxuXHRjb25zdCBzZXJpYWxpemVEZWxlZ2F0ZSA9IHtcblx0XHRzdGFydDogZnVuY3Rpb24gKGNvbnRyb2w6IGFueSwgc0FnZ3JlZ2F0aW9uTmFtZTogc3RyaW5nKSB7XG5cdFx0XHRsZXQgY29udHJvbERldGFpbCA9IFwiXCI7XG5cdFx0XHRpZiAoc0FnZ3JlZ2F0aW9uTmFtZSkge1xuXHRcdFx0XHRpZiAoY29udHJvbC5nZXRQYXJlbnQoKSkge1xuXHRcdFx0XHRcdGNvbnN0IGluZGV4SW5QYXJlbnQgPSAoY29udHJvbC5nZXRQYXJlbnQoKS5nZXRBZ2dyZWdhdGlvbihzQWdncmVnYXRpb25OYW1lKSBhcyBNYW5hZ2VkT2JqZWN0W10pPy5pbmRleE9mPy4oY29udHJvbCk7XG5cdFx0XHRcdFx0aWYgKGluZGV4SW5QYXJlbnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRjb250cm9sRGV0YWlsICs9IGAsXFxuJHtnZXRUYWIoKX1gO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Y29udHJvbERldGFpbCArPSBgJHtjb250cm9sLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpfShgO1xuXHRcdFx0cmV0dXJuIGNvbnRyb2xEZXRhaWw7XG5cdFx0fSxcblx0XHRlbmQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBcIn0pXCI7XG5cdFx0fSxcblx0XHRtaWRkbGU6IGZ1bmN0aW9uIChjb250cm9sOiBhbnkpIHtcblx0XHRcdGxldCBpZCA9IGNvbnRyb2wuZ2V0SWQoKTtcblx0XHRcdGlkID0gdHlwZW9mIGlkID09PSBcInN0cmluZ1wiID8gaWQ/LnJlcGxhY2U/LihDT05UUk9MSUQsIFwiaWRcIikgOiBpZDtcblx0XHRcdGxldCBkYXRhID0gYHtpZDogJHtNYW5hZ2VkT2JqZWN0TWV0YWRhdGEuaXNHZW5lcmF0ZWRJZChpZCkgPyBcIl9fZHluYW1pY0lkXCIgOiBpZH1gO1xuXHRcdFx0Zm9yIChjb25zdCBvQ29udHJvbEtleSBpbiBjb250cm9sLm1Qcm9wZXJ0aWVzKSB7XG5cdFx0XHRcdGlmIChjb250cm9sLm1Qcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KG9Db250cm9sS2V5KSkge1xuXHRcdFx0XHRcdGxldCBwcm9wZXJ0eVZhbHVlID0gY29udHJvbC5tUHJvcGVydGllc1tvQ29udHJvbEtleV07XG5cdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IHR5cGVvZiBwcm9wZXJ0eVZhbHVlID09PSBcInN0cmluZ1wiID8gcHJvcGVydHlWYWx1ZT8ucmVwbGFjZT8uKFVJRCwgXCJ1aWQtLWlkXCIpIDogcHJvcGVydHlWYWx1ZTtcblx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gdHlwZW9mIHByb3BlcnR5VmFsdWUgPT09IFwic3RyaW5nXCIgPyBwcm9wZXJ0eVZhbHVlPy5yZXBsYWNlPy4oQ09OVFJPTElELCBcImlkXCIpIDogcHJvcGVydHlWYWx1ZTtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IHR5cGVvZiBwcm9wZXJ0eVZhbHVlID09PSBcIm9iamVjdFwiID8gSlNPTi5zdHJpbmdpZnkocHJvcGVydHlWYWx1ZSkgOiBwcm9wZXJ0eVZhbHVlO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdC8vIFN0cmluZ2lmeSBtYXkgZmFpbCBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlcyBidXQgaXQncyBub3QgdGhlIGVuZCBvZiB0aGUgd29ybGRcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRkYXRhICs9IGAsXFxuJHtnZXRUYWIoKX0gJHtvQ29udHJvbEtleX06ICR7cHJvcGVydHlWYWx1ZX1gO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGNvbnRyb2wubUJpbmRpbmdJbmZvcy5oYXNPd25Qcm9wZXJ0eShvQ29udHJvbEtleSkpIHtcblx0XHRcdFx0XHRjb25zdCBiaW5kaW5nRGV0YWlsID0geyAuLi5jb250cm9sLm1CaW5kaW5nSW5mb3Nbb0NvbnRyb2xLZXldIH07XG5cdFx0XHRcdFx0aWYgKGJpbmRpbmdEZXRhaWwudHlwZT8ub091dHB1dEZvcm1hdCkge1xuXHRcdFx0XHRcdFx0ZGVsZXRlIGJpbmRpbmdEZXRhaWwudHlwZS5vT3V0cHV0Rm9ybWF0O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoYmluZGluZ0RldGFpbC5iaW5kaW5nKSB7XG5cdFx0XHRcdFx0XHRkZWxldGUgYmluZGluZ0RldGFpbC5iaW5kaW5nO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkYXRhICs9IGAsXFxuJHtnZXRUYWIoKX0gJHtvQ29udHJvbEtleX06ICR7SlNPTi5zdHJpbmdpZnkoYmluZGluZ0RldGFpbCl9YDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Zm9yIChjb25zdCBvQ29udHJvbEtleSBpbiBjb250cm9sLm1Bc3NvY2lhdGlvbnMpIHtcblx0XHRcdFx0aWYgKGNvbnRyb2wubUFzc29jaWF0aW9ucy5oYXNPd25Qcm9wZXJ0eShvQ29udHJvbEtleSkpIHtcblx0XHRcdFx0XHRsZXQgYXNzb2NpYXRpb25WYWx1ZSA9IGNvbnRyb2wubUFzc29jaWF0aW9uc1tvQ29udHJvbEtleV07XG5cdFx0XHRcdFx0aWYgKCFBcnJheS5pc0FycmF5KGFzc29jaWF0aW9uVmFsdWUpKSB7XG5cdFx0XHRcdFx0XHRhc3NvY2lhdGlvblZhbHVlID0gW2Fzc29jaWF0aW9uVmFsdWVdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRhc3NvY2lhdGlvblZhbHVlID0gYXNzb2NpYXRpb25WYWx1ZS5tYXAoKGFzc29jaWF0aW9uVmFsdWVFbGVtZW50OiBzdHJpbmcpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiB0eXBlb2YgYXNzb2NpYXRpb25WYWx1ZUVsZW1lbnQgPT09IFwic3RyaW5nXCJcblx0XHRcdFx0XHRcdFx0PyBhc3NvY2lhdGlvblZhbHVlRWxlbWVudD8ucmVwbGFjZT8uKENPTlRST0xJRCwgXCJpZFwiKVxuXHRcdFx0XHRcdFx0XHQ6IGFzc29jaWF0aW9uVmFsdWVFbGVtZW50O1xuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0ZGF0YSArPSBgLFxcbiR7Z2V0VGFiKCl9ICR7b0NvbnRyb2xLZXl9OiAkeyhhc3NvY2lhdGlvblZhbHVlPy5qb2luPy4oXCIsXCIpID8/IGFzc29jaWF0aW9uVmFsdWUpIHx8IHVuZGVmaW5lZH1gO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoc2hvd0N1c3RvbVN0eWxlQ2xhc3NlcyAmJiBjb250cm9sLmFDdXN0b21TdHlsZUNsYXNzZXM/Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0ZGF0YSArPSBgLFxcbiR7Z2V0VGFiKCl9IGN1c3RvbVN0eWxlQ2xhc3NlcyA6ICR7Y29udHJvbC5hQ3VzdG9tU3R5bGVDbGFzc2VzLmpvaW4oXCIsIFwiKX1gO1xuXHRcdFx0fVxuXHRcdFx0Zm9yIChjb25zdCBvQ29udHJvbEtleSBpbiBjb250cm9sLm1FdmVudFJlZ2lzdHJ5KSB7XG5cdFx0XHRcdGlmIChjb250cm9sLm1FdmVudFJlZ2lzdHJ5Lmhhc093blByb3BlcnR5KG9Db250cm9sS2V5KSkge1xuXHRcdFx0XHRcdGRhdGEgKz0gYCxcXG4ke2dldFRhYigpfSAke29Db250cm9sS2V5fTogdHJ1ZWA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGRhdGEgKz0gYGA7XG5cdFx0XHRyZXR1cm4gZGF0YTtcblx0XHR9LFxuXHRcdHN0YXJ0QWdncmVnYXRpb246IGZ1bmN0aW9uIChjb250cm9sOiB7IG1CaW5kaW5nSW5mb3M6IFJlY29yZDxzdHJpbmcsIEJhc2VBZ2dyZWdhdGlvbkJpbmRpbmdJbmZvPiB9LCBzTmFtZTogc3RyaW5nKSB7XG5cdFx0XHRsZXQgb3V0ID0gYCxcXG4ke2dldFRhYigpfSR7c05hbWV9YDtcblx0XHRcdHRhYkNvdW50Kys7XG5cblx0XHRcdGlmIChjb250cm9sLm1CaW5kaW5nSW5mb3Nbc05hbWVdKSB7XG5cdFx0XHRcdG91dCArPSBgPXsgcGF0aDonJHtjb250cm9sLm1CaW5kaW5nSW5mb3Nbc05hbWVdLnBhdGh9JywgdGVtcGxhdGU6XFxuJHtnZXRUYWIoKX1gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0ICs9IGA9W1xcbiR7Z2V0VGFiKCl9YDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBvdXQ7XG5cdFx0fSxcblx0XHRlbmRBZ2dyZWdhdGlvbjogZnVuY3Rpb24gKGNvbnRyb2w6IGFueSwgc05hbWU6IHN0cmluZykge1xuXHRcdFx0dGFiQ291bnQtLTtcblx0XHRcdGlmIChjb250cm9sLm1CaW5kaW5nSW5mb3Nbc05hbWVdKSB7XG5cdFx0XHRcdHJldHVybiBgXFxuJHtnZXRUYWIoKX19YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBgXFxuJHtnZXRUYWIoKX1dYDtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGlmIChBcnJheS5pc0FycmF5KGNvbnRyb2xUb1NlcmlhbGl6ZSkpIHtcblx0XHRyZXR1cm4gY29udHJvbFRvU2VyaWFsaXplLm1hcCgoY29udHJvbFRvUmVuZGVyOiBVSTVFbGVtZW50KSA9PiB7XG5cdFx0XHRyZXR1cm4gbmV3IFNlcmlhbGl6ZXIoY29udHJvbFRvUmVuZGVyLCBzZXJpYWxpemVEZWxlZ2F0ZSkuc2VyaWFsaXplKCk7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIG5ldyBTZXJpYWxpemVyKGNvbnRyb2xUb1NlcmlhbGl6ZSwgc2VyaWFsaXplRGVsZWdhdGUpLnNlcmlhbGl6ZSgpO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVDb250cm9sQXNYTUwoY29udHJvbFRvU2VyaWFsaXplPzogVUk1RWxlbWVudCB8IFVJNUVsZW1lbnRbXSwgc2hvd0N1c3RvbVN0eWxlQ2xhc3NlcyA9IGZhbHNlKSB7XG5cdGxldCB0YWJDb3VudCA9IDA7XG5cdGNvbnN0IFVJRCA9IC91aWQtLWlkLVxcZHsxM30tXFxkezEsM30vO1xuXHRjb25zdCBDT05UUk9MSUQgPSAvaWQtXFxkezEzfS1cXGR7MSwzfS87XG5cdGNvbnN0IGRlZmluZWROYW1lc3BhY2VzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XG5cblx0ZnVuY3Rpb24gZ2V0TmFtZXNwYWNlQWxpYXMoY2xhc3NOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGNvbnN0IG5hbWVzU3BsaXQgPSBjbGFzc05hbWUuc3BsaXQoXCIuXCIpO1xuXHRcdGNvbnN0IG5hbWVzcGFjZSA9IG5hbWVzU3BsaXQuc2xpY2UoMCwgLTEpO1xuXHRcdGNvbnN0IG5hbWUgPSBuYW1lc1NwbGl0W25hbWVzU3BsaXQubGVuZ3RoIC0gMV07XG5cdFx0bGV0IG5hbWVzcGFjZUFsaWFzID0gbmFtZXNwYWNlW25hbWVzcGFjZS5sZW5ndGggLSAxXTtcblx0XHRpZiAocmV2ZXNlTmFtZXNwYWNlTWFwW25hbWVzcGFjZS5qb2luKFwiLlwiKV0pIHtcblx0XHRcdG5hbWVzcGFjZUFsaWFzID0gcmV2ZXNlTmFtZXNwYWNlTWFwW25hbWVzcGFjZS5qb2luKFwiLlwiKV07XG5cdFx0fVxuXHRcdGlmIChuYW1lc3BhY2VBbGlhcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRuYW1lc3BhY2VBbGlhcyA9IFwidGVzdFwiO1xuXHRcdH1cblx0XHRyZXR1cm4gbmFtZXNwYWNlQWxpYXM7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRUYWIodG9BZGQgPSAwKSB7XG5cdFx0bGV0IHRhYiA9IFwiXCI7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0YWJDb3VudCArIHRvQWRkOyBpKyspIHtcblx0XHRcdHRhYiArPSBcIlxcdFwiO1xuXHRcdH1cblx0XHRyZXR1cm4gdGFiO1xuXHR9XG5cdGNvbnN0IHNlcmlhbGl6ZURlbGVnYXRlID0ge1xuXHRcdHN0YXJ0OiBmdW5jdGlvbiAoY29udHJvbDogYW55LCBzQWdncmVnYXRpb25OYW1lOiBzdHJpbmcpIHtcblx0XHRcdGxldCBjb250cm9sRGV0YWlsID0gXCJcIjtcblx0XHRcdGlmIChzQWdncmVnYXRpb25OYW1lKSB7XG5cdFx0XHRcdGlmIChjb250cm9sLmdldFBhcmVudCgpKSB7XG5cdFx0XHRcdFx0Y29uc3QgaW5kZXhJblBhcmVudCA9IChjb250cm9sLmdldFBhcmVudCgpLmdldEFnZ3JlZ2F0aW9uKHNBZ2dyZWdhdGlvbk5hbWUpIGFzIE1hbmFnZWRPYmplY3RbXSk/LmluZGV4T2Y/Lihjb250cm9sKTtcblx0XHRcdFx0XHRpZiAoaW5kZXhJblBhcmVudCA+IDApIHtcblx0XHRcdFx0XHRcdGNvbnRyb2xEZXRhaWwgKz0gYFxcbiR7Z2V0VGFiKCl9YDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGNvbnN0IG5hbWVGdWxsID0gY29udHJvbC5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKTtcblx0XHRcdGNvbnN0IG5hbWVzU3BsaXQgPSBuYW1lRnVsbC5zcGxpdChcIi5cIik7XG5cdFx0XHRjb25zdCBuYW1lID0gbmFtZXNTcGxpdFtuYW1lc1NwbGl0Lmxlbmd0aCAtIDFdO1xuXHRcdFx0Y29uc3QgbmFtZXNwYWNlQWxpYXMgPSBnZXROYW1lc3BhY2VBbGlhcyhuYW1lRnVsbCk7XG5cdFx0XHRjb250cm9sRGV0YWlsICs9IGA8JHtuYW1lc3BhY2VBbGlhc306JHtuYW1lfVxcbmA7XG5cdFx0XHRpZiAoIWRlZmluZWROYW1lc3BhY2VzW25hbWVzcGFjZUFsaWFzXSkge1xuXHRcdFx0XHRkZWZpbmVkTmFtZXNwYWNlc1tuYW1lc3BhY2VBbGlhc10gPSAxO1xuXHRcdFx0XHRjb250cm9sRGV0YWlsICs9IGAke2dldFRhYigpfXhtbG5zOiR7bmFtZXNwYWNlQWxpYXN9PVwiJHtuYW1lU3BhY2VNYXBbbmFtZXNwYWNlQWxpYXNdfVwiXFxuYDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRlZmluZWROYW1lc3BhY2VzW25hbWVzcGFjZUFsaWFzXSsrO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGNvbnRyb2xEZXRhaWw7XG5cdFx0fSxcblx0XHRlbmQ6IGZ1bmN0aW9uIChjb250cm9sOiBhbnkpIHtcblx0XHRcdGNvbnN0IG5hbWVGdWxsID0gY29udHJvbC5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKTtcblx0XHRcdGNvbnN0IG5hbWVzU3BsaXQgPSBuYW1lRnVsbC5zcGxpdChcIi5cIik7XG5cdFx0XHRjb25zdCBuYW1lID0gbmFtZXNTcGxpdFtuYW1lc1NwbGl0Lmxlbmd0aCAtIDFdO1xuXHRcdFx0Y29uc3QgbmFtZXNwYWNlQWxpYXMgPSBnZXROYW1lc3BhY2VBbGlhcyhuYW1lRnVsbCk7XG5cdFx0XHRsZXQgaGFzQWdncmVnYXRpb24gPSBmYWxzZTtcblx0XHRcdGZvciAoY29uc3QgbUFnZ3JlZ2F0aW9uc0tleSBpbiBjb250cm9sLm1BZ2dyZWdhdGlvbnMpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdCghQXJyYXkuaXNBcnJheShjb250cm9sLm1BZ2dyZWdhdGlvbnNbbUFnZ3JlZ2F0aW9uc0tleV0pICYmXG5cdFx0XHRcdFx0XHRjb250cm9sLm1BZ2dyZWdhdGlvbnNbbUFnZ3JlZ2F0aW9uc0tleV0gIT09IG51bGwgJiZcblx0XHRcdFx0XHRcdGNvbnRyb2wubUFnZ3JlZ2F0aW9uc1ttQWdncmVnYXRpb25zS2V5XSAhPT0gdW5kZWZpbmVkKSB8fFxuXHRcdFx0XHRcdChBcnJheS5pc0FycmF5KGNvbnRyb2wubUFnZ3JlZ2F0aW9uc1ttQWdncmVnYXRpb25zS2V5XSkgJiYgY29udHJvbC5tQWdncmVnYXRpb25zW21BZ2dyZWdhdGlvbnNLZXldLmxlbmd0aCA+IDApXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGhhc0FnZ3JlZ2F0aW9uID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZGVmaW5lZE5hbWVzcGFjZXNbbmFtZXNwYWNlQWxpYXNdLS07XG5cdFx0XHRpZiAoaGFzQWdncmVnYXRpb24pIHtcblx0XHRcdFx0cmV0dXJuIGA8LyR7bmFtZXNwYWNlQWxpYXN9OiR7bmFtZX0+YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBgLz5gO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0bWlkZGxlOiBmdW5jdGlvbiAoY29udHJvbDogYW55KSB7XG5cdFx0XHRsZXQgaWQgPSBjb250cm9sLmdldElkKCk7XG5cdFx0XHRpZCA9IHR5cGVvZiBpZCA9PT0gXCJzdHJpbmdcIiA/IGlkPy5yZXBsYWNlPy4oQ09OVFJPTElELCBcImlkXCIpIDogaWQ7XG5cdFx0XHRsZXQgZGF0YSA9IFwiXCI7XG5cdFx0XHRpZiAoIU1hbmFnZWRPYmplY3RNZXRhZGF0YS5pc0dlbmVyYXRlZElkKGlkKSkge1xuXHRcdFx0XHRkYXRhID0gYGlkPVwiJHtpZH1cImA7XG5cdFx0XHR9XG5cdFx0XHRsZXQga2V5cyA9IE9iamVjdC5rZXlzKGNvbnRyb2wubVByb3BlcnRpZXMpXG5cdFx0XHRcdC5maWx0ZXIoKHByb3BOYW1lKSA9PiBwcm9wTmFtZSAhPT0gXCJpZFwiKVxuXHRcdFx0XHQuY29uY2F0KE9iamVjdC5rZXlzKGNvbnRyb2wubUJpbmRpbmdJbmZvcykpXG5cdFx0XHRcdC5jb25jYXQoT2JqZWN0LmtleXMoY29udHJvbC5tQXNzb2NpYXRpb25zKSlcblx0XHRcdFx0LmNvbmNhdChPYmplY3Qua2V5cyhjb250cm9sLm1FdmVudFJlZ2lzdHJ5KSk7XG5cdFx0XHRrZXlzID0ga2V5cy5zb3J0KChhLCBiKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpO1xuXHRcdFx0Y29uc3QgdW5pcXVlS2V5cyA9IG5ldyBTZXQoa2V5cyk7XG5cdFx0XHRrZXlzID0gQXJyYXkuZnJvbSh1bmlxdWVLZXlzKTtcblx0XHRcdGZvciAoY29uc3Qgb0NvbnRyb2xLZXkgb2Yga2V5cykge1xuXHRcdFx0XHRpZiAoY29udHJvbC5tQmluZGluZ0luZm9zLmhhc093blByb3BlcnR5KG9Db250cm9sS2V5KSkge1xuXHRcdFx0XHRcdGNvbnN0IGJpbmRpbmdEZXRhaWwgPSB7IC4uLmNvbnRyb2wubUJpbmRpbmdJbmZvc1tvQ29udHJvbEtleV0gfTtcblx0XHRcdFx0XHRpZiAoYmluZGluZ0RldGFpbC5iaW5kaW5nU3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRkYXRhICs9IGBcXG4ke2dldFRhYigpfSR7b0NvbnRyb2xLZXl9PVwiJHtiaW5kaW5nRGV0YWlsLmJpbmRpbmdTdHJpbmcucmVwbGFjZShcIj5cIiwgXCImZ3Q7XCIpfVwiYDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYgKGJpbmRpbmdEZXRhaWwudHlwZT8ub091dHB1dEZvcm1hdCkge1xuXHRcdFx0XHRcdFx0XHRkZWxldGUgYmluZGluZ0RldGFpbC50eXBlLm9PdXRwdXRGb3JtYXQ7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChiaW5kaW5nRGV0YWlsLmJpbmRpbmcpIHtcblx0XHRcdFx0XHRcdFx0ZGVsZXRlIGJpbmRpbmdEZXRhaWwuYmluZGluZztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChiaW5kaW5nRGV0YWlsLnRlbXBsYXRlKSB7XG5cdFx0XHRcdFx0XHRcdGRlbGV0ZSBiaW5kaW5nRGV0YWlsLnRlbXBsYXRlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZGF0YSArPSBgXFxuJHtnZXRUYWIoKX0ke29Db250cm9sS2V5fT0nJHtKU09OLnN0cmluZ2lmeShiaW5kaW5nRGV0YWlsKX0nYDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoY29udHJvbC5tUHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShvQ29udHJvbEtleSkgJiYgY29udHJvbC5tUHJvcGVydGllc1tvQ29udHJvbEtleV0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGxldCBwcm9wZXJ0eVZhbHVlID0gY29udHJvbC5tUHJvcGVydGllc1tvQ29udHJvbEtleV07XG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBwcm9wZXJ0eVZhbHVlID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gcHJvcGVydHlWYWx1ZS5yZXBsYWNlKFVJRCwgXCJ1aWQtLWlkXCIpLnJlcGxhY2UoQ09OVFJPTElELCBcImlkXCIpLnJlcGxhY2UoL1wiL2csIFwiJnF1b3Q7XCIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9XG5cdFx0XHRcdFx0XHRcdHR5cGVvZiBwcm9wZXJ0eVZhbHVlID09PSBcIm9iamVjdFwiID8gSlNPTi5zdHJpbmdpZnkocHJvcGVydHlWYWx1ZSkucmVwbGFjZSgvXCIvZywgXCImcXVvdDtcIikgOiBwcm9wZXJ0eVZhbHVlO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdC8vIFN0cmluZ2lmeSBtYXkgZmFpbCBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlcyBidXQgaXQncyBub3QgdGhlIGVuZCBvZiB0aGUgd29ybGRcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRkYXRhICs9IGBcXG4ke2dldFRhYigpfSAke29Db250cm9sS2V5fT1cIiR7cHJvcGVydHlWYWx1ZX1cImA7XG5cdFx0XHRcdH0gZWxzZSBpZiAoY29udHJvbC5tQXNzb2NpYXRpb25zLmhhc093blByb3BlcnR5KG9Db250cm9sS2V5KSkge1xuXHRcdFx0XHRcdGxldCBhc3NvY2lhdGlvblZhbHVlID0gY29udHJvbC5tQXNzb2NpYXRpb25zW29Db250cm9sS2V5XTtcblx0XHRcdFx0XHRpZiAoIUFycmF5LmlzQXJyYXkoYXNzb2NpYXRpb25WYWx1ZSkpIHtcblx0XHRcdFx0XHRcdGFzc29jaWF0aW9uVmFsdWUgPSBbYXNzb2NpYXRpb25WYWx1ZV07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGFzc29jaWF0aW9uVmFsdWUgPSBhc3NvY2lhdGlvblZhbHVlLm1hcCgoYXNzb2NpYXRpb25WYWx1ZUVsZW1lbnQ6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHR5cGVvZiBhc3NvY2lhdGlvblZhbHVlRWxlbWVudCA9PT0gXCJzdHJpbmdcIlxuXHRcdFx0XHRcdFx0XHQ/IGFzc29jaWF0aW9uVmFsdWVFbGVtZW50Py5yZXBsYWNlPy4oQ09OVFJPTElELCBcImlkXCIpXG5cdFx0XHRcdFx0XHRcdDogYXNzb2NpYXRpb25WYWx1ZUVsZW1lbnQ7XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRkYXRhICs9IGBcXG4ke2dldFRhYigpfSAke29Db250cm9sS2V5fT1cIiR7KGFzc29jaWF0aW9uVmFsdWU/LmpvaW4/LihcIixcIikgPz8gYXNzb2NpYXRpb25WYWx1ZSkgfHwgdW5kZWZpbmVkfVwiYDtcblx0XHRcdFx0fSBlbHNlIGlmIChjb250cm9sLm1FdmVudFJlZ2lzdHJ5Lmhhc093blByb3BlcnR5KG9Db250cm9sS2V5KSkge1xuXHRcdFx0XHRcdGlmIChjb250cm9sLm1FdmVudFJlZ2lzdHJ5W29Db250cm9sS2V5XVswXT8uZkZ1bmN0aW9uPy5uYW1lKSB7XG5cdFx0XHRcdFx0XHRkYXRhICs9IGBcXG4ke2dldFRhYigpfSAke29Db250cm9sS2V5fT1cIiR7Y29udHJvbC5tRXZlbnRSZWdpc3RyeVtvQ29udHJvbEtleV1bMF0/LmZGdW5jdGlvbj8ubmFtZX1cImA7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGRhdGEgKz0gYFxcbiR7Z2V0VGFiKCl9ICR7b0NvbnRyb2xLZXl9PVwic29tZUV2ZW50SGFuZGxlclwiYDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChzaG93Q3VzdG9tU3R5bGVDbGFzc2VzICYmIGNvbnRyb2wuYUN1c3RvbVN0eWxlQ2xhc3Nlcz8ubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRkYXRhICs9IGBcXG4ke2dldFRhYigpfSBjdXN0b21TdHlsZUNsYXNzZXMgOiAke2NvbnRyb2wuYUN1c3RvbVN0eWxlQ2xhc3Nlcy5qb2luKFwiLCBcIil9YDtcblx0XHRcdH1cblx0XHRcdGRhdGEgKz0gYFxcbmA7XG5cdFx0XHRsZXQgaGFzQWdncmVnYXRpb24gPSBmYWxzZTtcblx0XHRcdGZvciAoY29uc3QgbUFnZ3JlZ2F0aW9uc0tleSBpbiBjb250cm9sLm1BZ2dyZWdhdGlvbnMpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdCghQXJyYXkuaXNBcnJheShjb250cm9sLm1BZ2dyZWdhdGlvbnNbbUFnZ3JlZ2F0aW9uc0tleV0pICYmXG5cdFx0XHRcdFx0XHRjb250cm9sLm1BZ2dyZWdhdGlvbnNbbUFnZ3JlZ2F0aW9uc0tleV0gIT09IG51bGwgJiZcblx0XHRcdFx0XHRcdGNvbnRyb2wubUFnZ3JlZ2F0aW9uc1ttQWdncmVnYXRpb25zS2V5XSAhPT0gdW5kZWZpbmVkKSB8fFxuXHRcdFx0XHRcdChBcnJheS5pc0FycmF5KGNvbnRyb2wubUFnZ3JlZ2F0aW9uc1ttQWdncmVnYXRpb25zS2V5XSkgJiYgY29udHJvbC5tQWdncmVnYXRpb25zW21BZ2dyZWdhdGlvbnNLZXldLmxlbmd0aCA+IDApXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGhhc0FnZ3JlZ2F0aW9uID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGhhc0FnZ3JlZ2F0aW9uKSB7XG5cdFx0XHRcdGRhdGEgKz0gXCI+XCI7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZGF0YTtcblx0XHR9LFxuXHRcdHN0YXJ0QWdncmVnYXRpb246IGZ1bmN0aW9uIChjb250cm9sOiBhbnksIHNOYW1lOiBzdHJpbmcpIHtcblx0XHRcdGNvbnN0IG5hbWVzcGFjZUFsaWFzID0gZ2V0TmFtZXNwYWNlQWxpYXMoY29udHJvbC5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKSk7XG5cdFx0XHRsZXQgb3V0ID0gYFxcbiR7Z2V0VGFiKCl9PCR7bmFtZXNwYWNlQWxpYXN9OiR7c05hbWV9PmA7XG5cdFx0XHR0YWJDb3VudCsrO1xuXHRcdFx0b3V0ICs9IGBcXG4ke2dldFRhYigpfWA7XG5cdFx0XHRyZXR1cm4gb3V0O1xuXHRcdH0sXG5cdFx0ZW5kQWdncmVnYXRpb246IGZ1bmN0aW9uIChjb250cm9sOiBhbnksIHNOYW1lOiBzdHJpbmcpIHtcblx0XHRcdHRhYkNvdW50LS07XG5cdFx0XHRjb25zdCBuYW1lc3BhY2VBbGlhcyA9IGdldE5hbWVzcGFjZUFsaWFzKGNvbnRyb2wuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkpO1xuXHRcdFx0aWYgKGNvbnRyb2wubUJpbmRpbmdJbmZvc1tzTmFtZV0pIHtcblx0XHRcdFx0cmV0dXJuIGBcXG4ke2dldFRhYigpfTwvJHtuYW1lc3BhY2VBbGlhc306JHtzTmFtZX0+XFxuYDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBgXFxuJHtnZXRUYWIoKX08LyR7bmFtZXNwYWNlQWxpYXN9OiR7c05hbWV9PlxcbmA7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRsZXQgb3V0WE1MO1xuXHRpZiAoQXJyYXkuaXNBcnJheShjb250cm9sVG9TZXJpYWxpemUpKSB7XG5cdFx0b3V0WE1MID0gY29udHJvbFRvU2VyaWFsaXplLm1hcCgoY29udHJvbFRvUmVuZGVyOiBVSTVFbGVtZW50KSA9PiB7XG5cdFx0XHRyZXR1cm4gbmV3IFNlcmlhbGl6ZXIoY29udHJvbFRvUmVuZGVyLCBzZXJpYWxpemVEZWxlZ2F0ZSkuc2VyaWFsaXplKCk7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0b3V0WE1MID0gbmV3IFNlcmlhbGl6ZXIoY29udHJvbFRvU2VyaWFsaXplLCBzZXJpYWxpemVEZWxlZ2F0ZSkuc2VyaWFsaXplKCk7XG5cdH1cblx0cmV0dXJuIGZvcm1hdFhNTChgPHJvb3Q+JHtvdXRYTUx9PC9yb290PmApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXdhaXRlcigpIHtcblx0bGV0IGZuUmVzb2x2ZSE6IEZ1bmN0aW9uO1xuXHRjb25zdCBteVByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdGZuUmVzb2x2ZSA9IHJlc29sdmU7XG5cdH0pO1xuXHRyZXR1cm4geyBwcm9taXNlOiBteVByb21pc2UsIHJlc29sdmU6IGZuUmVzb2x2ZSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyQnVpbGRpbmdCbG9ja1dpdGhNb2RlbHMoYnVpbGRpbmdCbG9jazogeyBnZXRDb250ZW50OiBGdW5jdGlvbiB9LCBtb2RlbHM6IHsgW2tleTogc3RyaW5nXTogTW9kZWwgfSk6IENvbnRyb2wge1xuXHRyZXR1cm4gKE1hbmFnZWRPYmplY3QgYXMgTWFuYWdlZE9iamVjdEV4KS5ydW5XaXRoUHJlcHJvY2Vzc29ycyhcblx0XHQoKSA9PiB7XG5cdFx0XHRyZXR1cm4gYnVpbGRpbmdCbG9jay5nZXRDb250ZW50KCk7XG5cdFx0fSxcblx0XHR7XG5cdFx0XHRzZXR0aW5nczogZnVuY3Rpb24gKGNvbnRyb2xTZXR0aW5nczogeyBtb2RlbHM6IHVua25vd24gfSkge1xuXHRcdFx0XHRjb250cm9sU2V0dGluZ3MubW9kZWxzID0gbW9kZWxzO1xuXHRcdFx0XHRyZXR1cm4gY29udHJvbFNldHRpbmdzO1xuXHRcdFx0fVxuXHRcdH1cblx0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyTW9ja0ZyYWdtZW50cyguLi5mcmFnbWVudHM6IE1vY2tGcmFnbWVudFtdKTogamVzdC5TcHlJbnN0YW5jZSB7XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5cdGNvbnN0IG9yaWdpbmFsTG9hZFRlbXBsYXRlID0gKFhNTFRlbXBsYXRlUHJvY2Vzc29yIGFzIGFueSkubG9hZFRlbXBsYXRlUHJvbWlzZTtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcblx0Y29uc3QgbG9hZFRlbXBsYXRlU3R1YiA9IGplc3Quc3B5T24oWE1MVGVtcGxhdGVQcm9jZXNzb3IgYXMgYW55LCBcImxvYWRUZW1wbGF0ZVByb21pc2VcIik7XG5cdGxvYWRUZW1wbGF0ZVN0dWIubW9ja0ltcGxlbWVudGF0aW9uKCgodGVtcGxhdGVOYW1lOiBzdHJpbmcsIGV4dGVuc2lvbjogc3RyaW5nKSA9PiB7XG5cdFx0Zm9yIChjb25zdCBmcmFnbWVudCBvZiBmcmFnbWVudHMpIHtcblx0XHRcdGlmIChmcmFnbWVudC5uYW1lID09PSB0ZW1wbGF0ZU5hbWUpIHtcblx0XHRcdFx0cmV0dXJuIHBhcnNlWE1MU3RyaW5nKGZyYWdtZW50LmNvbnRlbnQpWzBdO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3JpZ2luYWxMb2FkVGVtcGxhdGUodGVtcGxhdGVOYW1lLCBleHRlbnNpb24pO1xuXHR9KSBhcyAoKCkgPT4gRWxlbWVudCkgfCB1bmRlZmluZWQpO1xuXHRyZXR1cm4gbG9hZFRlbXBsYXRlU3R1Yjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIGFuIGFwcENvbXBvbmVudCBhbmQgdGVtcGxhdGVDb21wb25lbnQgd2l0aCB0aGUgZ2l2ZW4gb3B0aW9ucy5cbiAqIEBwYXJhbSBvcHRpb25zXG4gKiBAcGFyYW0gb3B0aW9ucy5jZHNGaWxlIFRoZSBwYXRoIHRvIHRoZSBDRFMgZmlsZSB0byB1c2UgZm9yIHRoZSBhcHBDb21wb25lbnRcbiAqIEBwYXJhbSBvcHRpb25zLm1haW5Db250ZXh0UGF0aCBUaGUgbWFpbiBjb250ZXh0IHBhdGggdG8gdXNlIGZvciB0aGUgYXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gb3B0aW9ucy5wYWdlQ29udGVudCBUaGUgcGFnZSBjb250ZW50IHRvIHVzZSBmb3IgdGhlIGFwcENvbXBvbmVudFxuICogQHBhcmFtIG9wdGlvbnMuY29udGVudCBUaGUgY29udGVudCB0byB1c2UgZm9yIHRoZSBhcHAgQ29tcG9uZW50XG4gKiBAcGFyYW0gb3B0aW9ucy5jb21wb25lbnRJZFxuICogQHBhcmFtIG9wdGlvbnMubWFuaWZlc3RTZXR0aW5nc1xuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgdG8gdXNlIGZvciB0aGUgYXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gdmlld0xldmVsIFRoZSB2aWV3IGxldmVsIHRvIHVzZSBmb3IgdGhlIGFwcENvbXBvbmVudFxuICogQHJldHVybnMgVGhlIGFwcGNvbXBvbmVudCBhbmQgdGVtcGxhdGVDb21wb25lbnQgdG8gdXNlIGZvciB0ZXN0aW5nXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbml0aWFsaXplQXBwQ29tcG9uZW50KFxuXHRvcHRpb25zPzoge1xuXHRcdGNkc0ZpbGU/OiBzdHJpbmc7XG5cdFx0Y29tcG9uZW50SWQ/OiBzdHJpbmc7XG5cdFx0bWFpbkNvbnRleHRQYXRoPzogc3RyaW5nO1xuXHRcdHBhZ2VDb250ZW50PzogRnVuY3Rpb247XG5cdFx0bWFuaWZlc3RTZXR0aW5ncz86IFBhcnRpYWw8TGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MgfCBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncz47XG5cdFx0ZmVNYW5pZmVzdFNldHRpbmdzPzogUGFydGlhbDxNYW5pZmVzdENvbnRlbnRbXCJzYXAuZmVcIl0+O1xuXHRcdGNvbnRlbnQ/OiBQYXJ0aWFsPExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzW1wiY29udGVudFwiXSB8IE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzW1wiY29udGVudFwiXT47XG5cdFx0Z3VpZD86IHN0cmluZztcblx0fSxcblx0bmFtZT86IHN0cmluZyxcblx0dmlld0xldmVsPzogbnVtYmVyXG4pOiBQcm9taXNlPHsgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7IHRlbXBsYXRlQ29tcG9uZW50OiBUZW1wbGF0ZUNvbXBvbmVudCB9PiB7XG5cdGxldCBjZHNGaWxlID0gb3B0aW9ucz8uY2RzRmlsZTtcblx0aWYgKCFjZHNGaWxlKSB7XG5cdFx0Y2RzRmlsZSA9IGNvbXBpbGVDRFMocGF0aC5qb2luKF9fZGlybmFtZSwgXCIuL2RhdGEvUHJvZHVjdHMuY2RzXCIpKTtcblx0fVxuXHRjb25zdCBndWlkID0gb3B0aW9ucz8uZ3VpZCA/PyB1aWQoKTtcblx0Y29uc3QgaWQgPSBvcHRpb25zPy5jb21wb25lbnRJZCA/PyBgc2FwLmZlLnRlc3QuJHtndWlkfWA7XG5cdGNvbnN0IGNkc0NvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoY2RzRmlsZSkudG9TdHJpbmcoKTtcblx0c2FwLmplc3QucmVnaXN0ZXJGYWtlRnJhZ21lbnQoYC9zYXAvZmUvY29yZS9tb2NrLyR7Z3VpZH0vJG1ldGFkYXRhP3NhcC1sYW5ndWFnZT1FTmAsIGNkc0NvbnRlbnQpO1xuXHRjbGFzcyBEZWZhdWx0UGFnZUNvbnRlbnQgZXh0ZW5kcyBQYWdlQ29udHJvbGxlciB7XG5cdFx0cmVuZGVyKCkge1xuXHRcdFx0cmV0dXJuIDxQYWdlPjwvUGFnZT47XG5cdFx0fVxuXHR9XG5cdHNhcC51aS5kZWZpbmUoYHNhcC9mZS90ZXN0LyR7Z3VpZH0vQ29tcG9uZW50YCwgW1wic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCJdLCBmdW5jdGlvbiAoX0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KSB7XG5cdFx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0XHRyZXR1cm4gQXBwQ29tcG9uZW50LmV4dGVuZChgc2FwLmZlLnRlc3QuJHtndWlkfS5Db21wb25lbnRgLCB7XG5cdFx0XHRtZXRhZGF0YToge1xuXHRcdFx0XHRtYW5pZmVzdDoge1xuXHRcdFx0XHRcdFwic2FwLmFwcFwiOiB7XG5cdFx0XHRcdFx0XHRpZDogYHRlc3Qke2d1aWR9YCxcblx0XHRcdFx0XHRcdGRhdGFTb3VyY2VzOiB7XG5cdFx0XHRcdFx0XHRcdG1haW5TZXJ2aWNlOiB7XG5cdFx0XHRcdFx0XHRcdFx0dXJpOiBgL3NhcC9mZS9jb3JlL21vY2svJHtndWlkfS9gLFxuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiT0RhdGFcIixcblx0XHRcdFx0XHRcdFx0XHRzZXR0aW5nczoge1xuXHRcdFx0XHRcdFx0XHRcdFx0b2RhdGFWZXJzaW9uOiBcIjQuMFwiXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcInNhcC51aTVcIjoge1xuXHRcdFx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0XHRcdFwiXCI6IHtcblx0XHRcdFx0XHRcdFx0XHRkYXRhU291cmNlOiBcIm1haW5TZXJ2aWNlXCIsXG5cdFx0XHRcdFx0XHRcdFx0c2V0dGluZ3M6IHt9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRyb3V0aW5nOiB7XG5cdFx0XHRcdFx0XHRcdHRhcmdldHM6IHtcblx0XHRcdFx0XHRcdFx0XHREZWZhdWx0OiB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIkNvbXBvbmVudFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0bmFtZTogbmFtZSA/PyBcInNhcC5mZS5jb3JlLmZwbVwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0aWQ6IFwiRGVmYXVsdFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0dmlld0xldmVsOiB2aWV3TGV2ZWwsXG5cdFx0XHRcdFx0XHRcdFx0XHRvcHRpb25zOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHNldHRpbmdzOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Li4uKG9wdGlvbnM/Lm1hbmlmZXN0U2V0dGluZ3MgPz8ge30pLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRleHRQYXRoOiBvcHRpb25zPy5tYWluQ29udGV4dFBhdGggPz8gXCIvUHJvZHVjdHNcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2aWV3VHlwZTogXCJKU1hcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2aWV3Q29udGVudDogb3B0aW9ucz8ucGFnZUNvbnRlbnQgPz8gRGVmYXVsdFBhZ2VDb250ZW50LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IG9wdGlvbnM/LmNvbnRlbnRcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0cm91dGVzOiBbXG5cdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0cGF0dGVybjogXCI6P3F1ZXJ5OlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0bmFtZTogXCJEZWZhdWx0XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHR0YXJnZXQ6IFwiRGVmYXVsdFwiXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcInNhcC5mZVwiOiBvcHRpb25zPy5mZU1hbmlmZXN0U2V0dGluZ3MgPz8ge31cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9KTtcblx0Y29uc3QgbW9ja0FwcENvbXBvbmVudCA9IChhd2FpdCBDb21wb25lbnQuY3JlYXRlKHsgbmFtZTogYHNhcC5mZS50ZXN0LiR7Z3VpZH1gLCBpZDogaWQgfSkpIGFzIEFwcENvbXBvbmVudDtcblxuXHRhd2FpdCBtb2NrQXBwQ29tcG9uZW50LmluaXRpYWxpemVkO1xuXHRjb25zdCB2ID0gYXdhaXQgKG1vY2tBcHBDb21wb25lbnQuZ2V0Um91dGVyKCkuZ2V0VGFyZ2V0KFwiRGVmYXVsdFwiKSBhcyB7IGxvYWQ/OiBGdW5jdGlvbiB9KS5sb2FkPy4oKTtcblx0cmV0dXJuIHsgYXBwQ29tcG9uZW50OiBtb2NrQXBwQ29tcG9uZW50LCB0ZW1wbGF0ZUNvbXBvbmVudDogdi5vYmplY3QgfTtcbn1cblxuLyoqXG4gKiBGaW5kIGFuIGVsZW1lbnQgaW4gYSBjb2xsZWN0aW9uIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gc2VsZWN0b3IuXG4gKiBAcGFyYW0gY29sbGVjdGlvblxuICogQHBhcmFtIHNlbGVjdG9yXG4gKiBAcmV0dXJucyBUaGUgZWxlbWVudCB0aGF0IG1hdGNoZXMgdGhlIHNlbGVjdG9yIG9yIHVuZGVmaW5lZCBpZiBubyBlbGVtZW50IG1hdGNoZXMgdGhlIHNlbGVjdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRWxlbWVudChjb2xsZWN0aW9uOiBIVE1MQ29sbGVjdGlvbiwgc2VsZWN0b3I6IChlbGVtZW50OiBIVE1MRWxlbWVudCkgPT4gYm9vbGVhbik6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkIHtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjb2xsZWN0aW9uLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IGNvbGxlY3Rpb24uaXRlbShpKSBhcyBIVE1MRWxlbWVudDtcblx0XHRpZiAoc2VsZWN0b3IoZWxlbWVudCkpIHtcblx0XHRcdHJldHVybiBlbGVtZW50O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFdhaXQgZm9yIGFuIGV2ZW50IHRvIGJlIHJlc29sdmVkIGJlZm9yZSBjb250aW51aW5nLlxuICogQHBhcmFtIGNvbnRyb2xcbiAqIEBwYXJhbSBldmVudE5hbWVcbiAqIEByZXR1cm5zIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGV2ZW50IGlzIHJlY2VpdmVkXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yRXZlbnQ8VCBleHRlbmRzIHt9Pihjb250cm9sOiBFdmVudFByb3ZpZGVyLCBldmVudE5hbWU6IHN0cmluZyk6IFByb21pc2U8VUk1RXZlbnQ8VD4+IHtcblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0Y29udHJvbC5hdHRhY2hFdmVudE9uY2UoZXZlbnROYW1lLCAoZXZlbnQ6IEV2ZW50KSA9PiB7XG5cdFx0XHRyZXNvbHZlKGV2ZW50IGFzIHVua25vd24gYXMgVUk1RXZlbnQ8VD4pO1xuXHRcdH0pO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBUZWxsIHRoZSBiaW5kaW5nIHBhcnNlciB0byBrZWVwIHRoZSBiaW5kaW5nIHN0cmluZ3MgZm9yIHRlc3RpbmcuXG4gKiBAcGFyYW0gZW5hYmxlZFxuICovXG5leHBvcnQgZnVuY3Rpb24ga2VlcEJpbmRpbmdTdHJpbmdGb3JUZXN0KGVuYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcblx0QmluZGluZ1BhcnNlci5fa2VlcEJpbmRpbmdTdHJpbmdzID0gZW5hYmxlZDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztFQXlFQUEsR0FBRyxDQUFDQyxRQUFRLENBQUMsQ0FBQyxFQUFTLGtDQUFrQyxDQUFDO0VBQzFEQyxJQUFJLENBQUNDLFVBQVUsQ0FBQyxLQUFLLENBQUM7RUFFdEIsTUFBTUMsWUFBb0MsR0FBRztJQUM1Q0MsS0FBSyxFQUFFLGVBQWU7SUFDdEJDLFVBQVUsRUFBRSxxQkFB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RUFBRSxlQUFlK1YsSUFBSSxFQUFFO01BQUU5SixFQUFFLEVBQUVBO0lBQUcsQ0FBQyxDQUFrQjtJQUUxRyxNQUFNa00sZ0JBQWdCLENBQUNDLFdBQVc7SUFDbEMsTUFBTUMsQ0FBQyxHQUFHLE1BQU9GLGdCQUFnQixDQUFDRyxTQUFTLENBQUMsQ0FBQyxDQUFDQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQXlCQyxJQUFJLEdBQUcsQ0FBQztJQUNuRyxPQUFPO01BQUV4WixZQUFZLEVBQUVtWixnQkFBZ0I7TUFBRU0saUJBQWlCLEVBQUVKLENBQUMsQ0FBQ0s7SUFBTyxDQUFDO0VBQ3ZFOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUxBaFgsUUFBQSxDQUFBaVUsc0JBQUEsR0FBQUEsc0JBQUE7RUFNTyxTQUFTZ0QsV0FBV0EsQ0FBQ0MsVUFBMEIsRUFBRW5iLFFBQTJDLEVBQTJCO0lBQzdILEtBQUssSUFBSW9ULENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRytILFVBQVUsQ0FBQzlYLE1BQU0sRUFBRStQLENBQUMsRUFBRSxFQUFFO01BQzNDLE1BQU1nSSxPQUFPLEdBQUdELFVBQVUsQ0FBQ0UsSUFBSSxDQUFDakksQ0FBQyxDQUFnQjtNQUNqRCxJQUFJcFQsUUFBUSxDQUFDb2IsT0FBTyxDQUFDLEVBQUU7UUFDdEIsT0FBT0EsT0FBTztNQUNmO0lBQ0Q7SUFDQSxPQUFPelosU0FBUztFQUNqQjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFMQXNDLFFBQUEsQ0FBQWlYLFdBQUEsR0FBQUEsV0FBQTtFQU1PLGVBQWVJLFlBQVlBLENBQWUzZCxPQUFzQixFQUFFNGQsU0FBaUIsRUFBd0I7SUFDakgsT0FBTyxJQUFJL0wsT0FBTyxDQUFFMUgsT0FBTyxJQUFLO01BQy9CbkssT0FBTyxDQUFDNmQsZUFBZSxDQUFDRCxTQUFTLEVBQUdFLEtBQVksSUFBSztRQUNwRDNULE9BQU8sQ0FBQzJULEtBQStCLENBQUM7TUFDekMsQ0FBQyxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0VBQ0g7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7RUFIQXhYLFFBQUEsQ0FBQXFYLFlBQUEsR0FBQUEsWUFBQTtFQUlPLFNBQVNJLHdCQUF3QkEsQ0FBQ0MsT0FBZ0IsRUFBUTtJQUNoRTVPLGFBQWEsQ0FBQzZPLG1CQUFtQixHQUFHRCxPQUFPO0VBQzVDO0VBQUMxWCxRQUFBLENBQUF5WCx3QkFBQSxHQUFBQSx3QkFBQTtFQUFBLE9BQUF6WCxRQUFBO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -33,6 +33,7 @@ import ManagedObjectMetadata from "sap/ui/base/ManagedObjectMetadata";
|
|
|
33
33
|
import Component from "sap/ui/core/Component";
|
|
34
34
|
import type UI5Element from "sap/ui/core/Element";
|
|
35
35
|
import InvisibleText from "sap/ui/core/InvisibleText";
|
|
36
|
+
import type { ManifestContent } from "sap/ui/core/Manifest";
|
|
36
37
|
import XMLTemplateProcessor from "sap/ui/core/XMLTemplateProcessor";
|
|
37
38
|
import XMLPreprocessor from "sap/ui/core/util/XMLPreprocessor";
|
|
38
39
|
import Serializer from "sap/ui/core/util/serializer/Serializer";
|
|
@@ -858,7 +859,7 @@ export function serializeControlAsXML(controlToSerialize?: UI5Element | UI5Eleme
|
|
|
858
859
|
let tabCount = 0;
|
|
859
860
|
const UID = /uid--id-\d{13}-\d{1,3}/;
|
|
860
861
|
const CONTROLID = /id-\d{13}-\d{1,3}/;
|
|
861
|
-
const definedNamespaces: Record<string,
|
|
862
|
+
const definedNamespaces: Record<string, number> = {};
|
|
862
863
|
|
|
863
864
|
function getNamespaceAlias(className: string): string {
|
|
864
865
|
const namesSplit = className.split(".");
|
|
@@ -898,8 +899,10 @@ export function serializeControlAsXML(controlToSerialize?: UI5Element | UI5Eleme
|
|
|
898
899
|
const namespaceAlias = getNamespaceAlias(nameFull);
|
|
899
900
|
controlDetail += `<${namespaceAlias}:${name}\n`;
|
|
900
901
|
if (!definedNamespaces[namespaceAlias]) {
|
|
901
|
-
definedNamespaces[namespaceAlias] =
|
|
902
|
-
controlDetail += `${getTab()}xmlns:${namespaceAlias}="${nameSpaceMap[namespaceAlias]}"`;
|
|
902
|
+
definedNamespaces[namespaceAlias] = 1;
|
|
903
|
+
controlDetail += `${getTab()}xmlns:${namespaceAlias}="${nameSpaceMap[namespaceAlias]}"\n`;
|
|
904
|
+
} else {
|
|
905
|
+
definedNamespaces[namespaceAlias]++;
|
|
903
906
|
}
|
|
904
907
|
return controlDetail;
|
|
905
908
|
},
|
|
@@ -919,6 +922,7 @@ export function serializeControlAsXML(controlToSerialize?: UI5Element | UI5Eleme
|
|
|
919
922
|
hasAggregation = true;
|
|
920
923
|
}
|
|
921
924
|
}
|
|
925
|
+
definedNamespaces[namespaceAlias]--;
|
|
922
926
|
if (hasAggregation) {
|
|
923
927
|
return `</${namespaceAlias}:${name}>`;
|
|
924
928
|
} else {
|
|
@@ -933,6 +937,7 @@ export function serializeControlAsXML(controlToSerialize?: UI5Element | UI5Eleme
|
|
|
933
937
|
data = `id="${id}"`;
|
|
934
938
|
}
|
|
935
939
|
let keys = Object.keys(control.mProperties)
|
|
940
|
+
.filter((propName) => propName !== "id")
|
|
936
941
|
.concat(Object.keys(control.mBindingInfos))
|
|
937
942
|
.concat(Object.keys(control.mAssociations))
|
|
938
943
|
.concat(Object.keys(control.mEventRegistry));
|
|
@@ -959,10 +964,12 @@ export function serializeControlAsXML(controlToSerialize?: UI5Element | UI5Eleme
|
|
|
959
964
|
}
|
|
960
965
|
} else if (control.mProperties.hasOwnProperty(oControlKey) && control.mProperties[oControlKey] !== undefined) {
|
|
961
966
|
let propertyValue = control.mProperties[oControlKey];
|
|
962
|
-
|
|
963
|
-
|
|
967
|
+
if (typeof propertyValue === "string") {
|
|
968
|
+
propertyValue = propertyValue.replace(UID, "uid--id").replace(CONTROLID, "id").replace(/"/g, """);
|
|
969
|
+
}
|
|
964
970
|
try {
|
|
965
|
-
propertyValue =
|
|
971
|
+
propertyValue =
|
|
972
|
+
typeof propertyValue === "object" ? JSON.stringify(propertyValue).replace(/"/g, """) : propertyValue;
|
|
966
973
|
} catch (e) {
|
|
967
974
|
// Stringify may fail for circular references but it's not the end of the world
|
|
968
975
|
}
|
|
@@ -1094,6 +1101,7 @@ export async function initializeAppComponent(
|
|
|
1094
1101
|
mainContextPath?: string;
|
|
1095
1102
|
pageContent?: Function;
|
|
1096
1103
|
manifestSettings?: Partial<ListReportManifestSettings | ObjectPageManifestSettings>;
|
|
1104
|
+
feManifestSettings?: Partial<ManifestContent["sap.fe"]>;
|
|
1097
1105
|
content?: Partial<ListReportManifestSettings["content"] | ObjectPageManifestSettings["content"]>;
|
|
1098
1106
|
guid?: string;
|
|
1099
1107
|
},
|
|
@@ -1164,7 +1172,8 @@ export async function initializeAppComponent(
|
|
|
1164
1172
|
}
|
|
1165
1173
|
]
|
|
1166
1174
|
}
|
|
1167
|
-
}
|
|
1175
|
+
},
|
|
1176
|
+
"sap.fe": options?.feManifestSettings ?? {}
|
|
1168
1177
|
}
|
|
1169
1178
|
}
|
|
1170
1179
|
});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
-
* (c) Copyright 2009-
|
|
3
|
+
* (c) Copyright 2009-2025 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
5
|
sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/AppComponent", "sap/fe/core/ResourceModel", "sap/fe/core/controllerextensions/CollaborativeDraft", "sap/fe/core/controllerextensions/EditFlow", "sap/fe/core/controllerextensions/InternalIntentBasedNavigation", "sap/fe/core/controllerextensions/InternalRouting", "sap/fe/core/controllerextensions/MessageHandler", "sap/fe/core/controllerextensions/Recommendations", "sap/fe/core/controllerextensions/Share", "sap/fe/core/controllerextensions/SideEffects", "sap/ui/base/Event", "sap/ui/core/mvc/Controller", "sap/ui/core/mvc/View", "sap/ui/model/CompositeBinding", "sap/ui/model/odata/v4/Context", "sap/ui/model/odata/v4/ODataContextBinding", "sap/ui/model/odata/v4/ODataListBinding", "sap/ui/model/odata/v4/ODataMetaModel", "sap/ui/model/odata/v4/ODataModel", "sap/ui/model/odata/v4/ODataPropertyBinding"], function (generic, AppComponent, ResourceModel, CollaborativeDraft, EditFlow, InternalIntentBasedNavigation, InternalRouting, MessageHandler, Recommendations, Share, SideEffects, Event, Controller, View, CompositeBinding, Context, ODataContextBinding, ODataListBinding, ODataMetaModel, ODataModel, ODataPropertyBinding) {
|
|
6
6
|
"use strict";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
-
* (c) Copyright 2009-
|
|
3
|
+
* (c) Copyright 2009-2025 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
5
|
sap.ui.define(["sap/base/Log", "sap/fe/core/AppComponent", "sap/fe/core/controllerextensions/MessageHandler", "sap/fe/core/controllerextensions/collaboration/ActivityBase", "sap/fe/core/controllerextensions/collaboration/CollaborationCommon", "sap/fe/core/controllerextensions/editFlow/draft", "sap/ui/model/json/JSONModel"], function (Log, AppComponent, MessageHandler, ActivityBase, CollaborationCommon, draft, JSONModel) {
|
|
6
6
|
"use strict";
|
|
@@ -43,7 +43,7 @@ sap.ui.define(
|
|
|
43
43
|
/**
|
|
44
44
|
* Checks an action in the header toolbar.
|
|
45
45
|
* @param {string | sap.fe.test.api.ActionIdentifier} vActionIdentifier The identifier of the action
|
|
46
|
-
* @param {object} [mState] Defines the expected state of the button
|
|
46
|
+
* @param {object} [mState] Defines the expected state of the button. Checking for visible=false means to check a hidden action.
|
|
47
47
|
* @returns {object} The result of the {@link sap.ui.test.Opa5#waitFor} function, to be used for chained statements
|
|
48
48
|
* @public
|
|
49
49
|
*/
|
|
@@ -67,6 +67,25 @@ sap.ui.define(
|
|
|
67
67
|
return this.iCheckAction({ service: "StandardAction", action: "Edit", unbound: true }, mState);
|
|
68
68
|
};
|
|
69
69
|
|
|
70
|
+
/**
|
|
71
|
+
* Check the content and state of the draft toggle.
|
|
72
|
+
* @param {object} [mState] Defines the expected state of the draft toggle
|
|
73
|
+
* @returns {object} The result of the {@link sap.ui.test.Opa5#waitFor} function, to be used for chained statements
|
|
74
|
+
* @ui5-restricted
|
|
75
|
+
*/
|
|
76
|
+
HeaderAssertions.prototype.iCheckDraftToggle = function (mState) {
|
|
77
|
+
// return this.iCheckAction({ service: "StandardAction", action: "SwitchDraftAndActiveObject::_dt", unbound: true }, mState);
|
|
78
|
+
var oFEBuilder = FEBuilder.create(this.getOpaInstance());
|
|
79
|
+
return this.prepareResult(
|
|
80
|
+
oFEBuilder
|
|
81
|
+
.hasId(this.createActionMatcher({ service: "StandardAction", action: "SwitchDraftAndActiveObject::_dt" }))
|
|
82
|
+
.hasType("sap.m.Button")
|
|
83
|
+
.hasState(mState)
|
|
84
|
+
.description(Utils.formatMessage("Checking draft toggle action: '{0}'", mState))
|
|
85
|
+
.execute()
|
|
86
|
+
);
|
|
87
|
+
};
|
|
88
|
+
|
|
70
89
|
/**
|
|
71
90
|
* Checks if a specific header action is in focus.
|
|
72
91
|
* @param {string | sap.fe.test.api.ActionIdentifier} vActionIdentifier The identifier of the action
|
|
@@ -222,6 +222,7 @@ sap.ui.define(
|
|
|
222
222
|
|
|
223
223
|
/**
|
|
224
224
|
* Checks the state of the cells of a table.
|
|
225
|
+
* This function can only be used for simple content within a table cell. Checking complex content like combined fields within a cell is not supported.
|
|
225
226
|
* @param {object | number} [vRowValues] Defines the row values of the target row. The pattern is:
|
|
226
227
|
* <code><pre>
|
|
227
228
|
* {
|
|
@@ -438,7 +438,7 @@ sap.ui.define(
|
|
|
438
438
|
// might be table with or without checkboxes for selection
|
|
439
439
|
return (
|
|
440
440
|
OpaBuilder.Actions.press("rowsel" + oRowIndex).executeOn(oTable) ||
|
|
441
|
-
OpaBuilder.Actions.press(
|
|
441
|
+
TableBuilder.Row.Actions.onCell(0, OpaBuilder.Actions.press().executeOn(oTable.getRows()[oRowIndex].getCells()[0]))
|
|
442
442
|
);
|
|
443
443
|
}
|
|
444
444
|
return OpaBuilder.Actions.press().executeOn(oRow.getMultiSelectControl() || oRow.getSingleSelectControl());
|
|
@@ -107,6 +107,7 @@ sap.ui.define(
|
|
|
107
107
|
OverflowToolbarBuilder.prototype.hasContent = function (vContentMatcher, mState) {
|
|
108
108
|
var oOverflowToolbarBuilder = new OverflowToolbarBuilder(this.getOpaInstance(), this.build()),
|
|
109
109
|
aMatchers = [vContentMatcher, FEBuilder.Matchers.states(mState)];
|
|
110
|
+
|
|
110
111
|
if (mState && mState.visible === false) {
|
|
111
112
|
mState = Object.assign(mState);
|
|
112
113
|
delete mState.visible;
|
|
@@ -122,7 +123,7 @@ sap.ui.define(
|
|
|
122
123
|
);
|
|
123
124
|
} else {
|
|
124
125
|
oOverflowToolbarBuilder.hasSome(
|
|
125
|
-
|
|
126
|
+
oOverflowToolbarBuilder.hasAggregation("content", aMatchers),
|
|
126
127
|
// for DraftToggle look into child button
|
|
127
128
|
OpaBuilder.Matchers.children(OpaBuilder.Matchers.match([vContentMatcher, FEBuilder.Matchers.states(mState)]))
|
|
128
129
|
);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
-
* (c) Copyright 2009-
|
|
3
|
+
* (c) Copyright 2009-2025 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
5
|
sap.ui.define(["sap/ui/core/Lib", "sap/ui/core/library"], function (Library, _library) {
|
|
6
6
|
"use strict";
|
|
@@ -22,7 +22,7 @@ sap.ui.define(["sap/ui/core/Lib", "sap/ui/core/library"], function (Library, _li
|
|
|
22
22
|
controls: [],
|
|
23
23
|
elements: [],
|
|
24
24
|
// eslint-disable-next-line no-template-curly-in-string
|
|
25
|
-
version: "1.
|
|
25
|
+
version: "1.135.0",
|
|
26
26
|
noLibraryCSS: true
|
|
27
27
|
});
|
|
28
28
|
return thisLib;
|