@sapui5/sap.fe.core 1.124.7 → 1.124.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/ActionRuntime.js +7 -3
- package/src/sap/fe/core/ActionRuntime.ts +6 -2
- package/src/sap/fe/core/AppComponent.js +11 -4
- package/src/sap/fe/core/AppComponent.ts +12 -3
- package/src/sap/fe/core/controllerextensions/EditFlow.js +6 -2
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +5 -1
- package/src/sap/fe/core/controllerextensions/PageReady.js +19 -18
- package/src/sap/fe/core/controllerextensions/PageReady.ts +20 -17
- package/src/sap/fe/core/controllerextensions/SideEffects.js +55 -7
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +55 -2
- package/src/sap/fe/core/controls/ComponentLoader.js +2 -2
- package/src/sap/fe/core/controls/ComponentLoader.ts +1 -1
- package/src/sap/fe/core/converters/controls/Common/Table.js +11 -7
- package/src/sap/fe/core/converters/controls/Common/Table.ts +8 -6
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +32 -2
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +32 -1
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +8 -17
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +14 -16
- package/src/sap/fe/core/templating/UIFormatters.js +18 -2
- package/src/sap/fe/core/templating/UIFormatters.ts +15 -0
- package/src/sap/fe/core/type/Email.js +2 -2
- package/src/sap/fe/core/type/Email.ts +1 -1
|
@@ -3396,22 +3396,24 @@ export function addComputedColumns(
|
|
|
3396
3396
|
// so we have to disable it here to ensure, that the field building block
|
|
3397
3397
|
// does not render it into the ID column
|
|
3398
3398
|
// The additional column is only added for tables on a LR and in case tehe entity is draft enabled!
|
|
3399
|
-
const
|
|
3400
|
-
(column) => column.formatOptions?.hasDraftIndicator !== undefined && column.formatOptions?.hasDraftIndicator === true
|
|
3401
|
-
);
|
|
3399
|
+
const columnsWithDraftIndicator: TableColumn[] = tableColumns.filter((column) => column.formatOptions?.hasDraftIndicator === true);
|
|
3402
3400
|
if (
|
|
3403
|
-
|
|
3401
|
+
columnsWithDraftIndicator.length &&
|
|
3404
3402
|
converterContext.getTemplateType() === TemplateType.ListReport &&
|
|
3405
3403
|
(ModelHelper.isDraftNode(converterContext.getEntitySet()) || ModelHelper.isDraftRoot(converterContext.getEntitySet()))
|
|
3406
3404
|
) {
|
|
3407
3405
|
// Switch off the draft indicator in the found column
|
|
3408
|
-
columnWithDraftIndicator
|
|
3406
|
+
columnsWithDraftIndicator.forEach((columnWithDraftIndicator: TableColumn) => {
|
|
3407
|
+
if (columnWithDraftIndicator?.formatOptions) {
|
|
3408
|
+
columnWithDraftIndicator.formatOptions.hasDraftIndicator = false;
|
|
3409
|
+
}
|
|
3410
|
+
});
|
|
3409
3411
|
|
|
3410
3412
|
// Insert a separate draft indicator column
|
|
3411
3413
|
const draftIndicatorColumn: ComputedTableColumn = {
|
|
3412
3414
|
key: "draftStatus",
|
|
3413
3415
|
name: "draftStatus",
|
|
3414
|
-
propertyKey:
|
|
3416
|
+
propertyKey: columnsWithDraftIndicator[0].name,
|
|
3415
3417
|
isDraftIndicator: true,
|
|
3416
3418
|
availability: "Default",
|
|
3417
3419
|
label: "{sap.fe.i18n>C_DRAFT_STATUS_COLUMN_LABEL_TOOLTIP}",
|
|
@@ -64,6 +64,34 @@ sap.ui.define(["sap/ui/model/Filter", "sap/ui/model/FilterOperator", "../convert
|
|
|
64
64
|
}
|
|
65
65
|
return new Filter(aFilters, true);
|
|
66
66
|
},
|
|
67
|
+
/**
|
|
68
|
+
* Makes sure key values have the correct format.
|
|
69
|
+
* This is to handle special cases, for example, where Boolean values are 'X' or '', or guid values have the following format: guid'00000000-0000-0000-0000-000000000000'.".
|
|
70
|
+
* @param keys
|
|
71
|
+
* @param entityType
|
|
72
|
+
*/
|
|
73
|
+
_sanitizeKeys: function (keys, entityType) {
|
|
74
|
+
keys.forEach(key => {
|
|
75
|
+
const propertyType = entityType[key.name].$Type;
|
|
76
|
+
switch (propertyType) {
|
|
77
|
+
case "Edm.Boolean":
|
|
78
|
+
if (key.value !== "true" && key.value !== "false") {
|
|
79
|
+
// If the value is neither "true" nor "false", it's considered as false if it contains only whitespaces (e.g. to handle 'X'/'' for true/false values)
|
|
80
|
+
key.value = key.value.trim().length ? "true" : "false";
|
|
81
|
+
}
|
|
82
|
+
break;
|
|
83
|
+
case "Edm.Guid":
|
|
84
|
+
{
|
|
85
|
+
const match = /[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}/.exec(key.value);
|
|
86
|
+
key.value = match ? match[0] : key.value;
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
default:
|
|
90
|
+
// Do nothing
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
},
|
|
94
|
+
|
|
67
95
|
/**
|
|
68
96
|
* Loads all contexts for a list of page infos.
|
|
69
97
|
*
|
|
@@ -75,14 +103,16 @@ sap.ui.define(["sap/ui/model/Filter", "sap/ui/model/FilterOperator", "../convert
|
|
|
75
103
|
_requestObjectsFromParameters: async function (aStartupPages, oModel, alwaysCheckExistence) {
|
|
76
104
|
// Load the respective objects for all object pages found in aExternallyNavigablePages
|
|
77
105
|
const aContextPromises = aStartupPages.map(async pageInfo => {
|
|
106
|
+
const entityType = oModel.getMetaModel().getObject(`${pageInfo.contextPath}/`);
|
|
78
107
|
if (pageInfo.technicalKeys && !alwaysCheckExistence) {
|
|
108
|
+
this._sanitizeKeys(pageInfo.technicalKeys, entityType);
|
|
79
109
|
// Create a context with the proper path
|
|
80
|
-
const entityType = oModel.getMetaModel().getObject(`${pageInfo.contextPath}/`);
|
|
81
110
|
const path = `${pageInfo.contextPath}(${SemanticKeyHelper.getPathContent(pageInfo.technicalKeys, entityType)})`;
|
|
82
111
|
const context = oModel.bindContext(path).getBoundContext();
|
|
83
112
|
return Promise.resolve([context]);
|
|
84
113
|
} else {
|
|
85
114
|
const aKeys = pageInfo.semanticKeys || pageInfo.technicalKeys || [];
|
|
115
|
+
this._sanitizeKeys(aKeys, entityType);
|
|
86
116
|
const oFilter = this._createFilterFromKeys(aKeys, pageInfo.draftMode, oModel.getMetaModel());
|
|
87
117
|
|
|
88
118
|
// only request a minimum of fields to boost backend performance since this is only used to check if an object exists
|
|
@@ -376,4 +406,4 @@ sap.ui.define(["sap/ui/model/Filter", "sap/ui/model/FilterOperator", "../convert
|
|
|
376
406
|
};
|
|
377
407
|
return AppStartupHelper;
|
|
378
408
|
}, false);
|
|
379
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBcHBTdGFydHVwSGVscGVyIiwiX2dldEtleXNGcm9tU3RhcnR1cFBhcmFtcyIsImFLZXlOYW1lcyIsIm9TdGFydHVwUGFyYW1ldGVycyIsImJBbGxGb3VuZCIsImFLZXlzIiwibWFwIiwibmFtZSIsImxlbmd0aCIsInZhbHVlIiwidW5kZWZpbmVkIiwiX2NyZWF0ZUZpbHRlckZyb21LZXlzIiwiYkRyYWZ0TW9kZSIsIm9NZXRhTW9kZWwiLCJiRmlsdGVyQ2FzZVNlbnNpdGl2ZSIsIk1vZGVsSGVscGVyIiwiaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlIiwiYkZpbHRlck9uQWN0aXZlRW50aXR5IiwiYUZpbHRlcnMiLCJrZXkiLCJGaWx0ZXIiLCJwYXRoIiwib3BlcmF0b3IiLCJGaWx0ZXJPcGVyYXRvciIsIkVRIiwidmFsdWUxIiwiY2FzZVNlbnNpdGl2ZSIsIm9EcmFmdEZpbHRlciIsImZpbHRlcnMiLCJhbmQiLCJwdXNoIiwiX3JlcXVlc3RPYmplY3RzRnJvbVBhcmFtZXRlcnMiLCJhU3RhcnR1cFBhZ2VzIiwib01vZGVsIiwiYWx3YXlzQ2hlY2tFeGlzdGVuY2UiLCJhQ29udGV4dFByb21pc2VzIiwicGFnZUluZm8iLCJ0ZWNobmljYWxLZXlzIiwiZW50aXR5VHlwZSIsImdldE1ldGFNb2RlbCIsImdldE9iamVjdCIsImNvbnRleHRQYXRoIiwiU2VtYW50aWNLZXlIZWxwZXIiLCJnZXRQYXRoQ29udGVudCIsImNvbnRleHQiLCJiaW5kQ29udGV4dCIsImdldEJvdW5kQ29udGV4dCIsIlByb21pc2UiLCJyZXNvbHZlIiwic2VtYW50aWNLZXlzIiwib0ZpbHRlciIsImRyYWZ0TW9kZSIsIm9MaXN0QmluZCIsImJpbmRMaXN0IiwiJHNlbGVjdCIsImpvaW4iLCJyZXF1ZXN0Q29udGV4dHMiLCJhbGwiLCJfZ2V0UmVhY2hhYmxlUGFnZUluZm9Gcm9tUm91dGUiLCJvUm91dGUiLCJvTWFuaWZlc3RSb3V0aW5nIiwic1BhdHRlcm4iLCJwYXR0ZXJuIiwicmVwbGFjZSIsImVuZHNXaXRoIiwic1RhcmdldE5hbWUiLCJBcnJheSIsImlzQXJyYXkiLCJ0YXJnZXQiLCJvVGFyZ2V0IiwidGFyZ2V0cyIsImFQYXR0ZXJuU2VnbWVudHMiLCJzcGxpdCIsInBhZ2VMZXZlbCIsIm9wdGlvbnMiLCJzZXR0aW5ncyIsImFsbG93RGVlcExpbmtpbmciLCJzQ29udGV4dFBhdGgiLCJlbnRpdHlTZXQiLCJtZXRhQ29udGV4dCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0Iiwib2JqZWN0UGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsInRhcmdldEVudGl0eVNldCIsIm9FbnRpdHlUeXBlIiwiYVNlbWFudGljS2V5TmFtZXMiLCJhU2VtYW50aWNrS2V5cyIsInNlbUtleSIsIiRQcm9wZXJ0eVBhdGgiLCJhVGVjaG5pY2FsS2V5cyIsIl9nZXRSZWFjaGFibGVQYWdlcyIsImFSb3V0ZXMiLCJyb3V0ZXMiLCJtUGFnZXNCeUxldmVsIiwiZm9yRWFjaCIsIm9QYWdlSW5mbyIsImFSZWFjaGFibGVQYWdlcyIsImxldmVsIiwiX2dldFN0YXJ0dXBQYWdlc0Zyb21TdGFydHVwUGFyYW1zIiwicmVzdWx0IiwiY3VycmVudCIsImZpbmRSZWN1cnNpdmUiLCJhQ3VycmVudExldmVsUGFnZXMiLCJsYXN0UGFnZSIsIm5leHRQYWdlIiwiaW5kZXhPZiIsInBvcCIsInNsaWNlIiwiX2dldERlZXBMaW5rT2JqZWN0IiwiYUNvbnRleHRzIiwiaGFzaCIsIm9Db250ZXh0IiwiZ2V0UGF0aCIsImdldERlZXBMaW5rU3RhcnR1cEhhc2giLCJyZXF1ZXN0T2JqZWN0Iiwic3RhcnR1cFBhZ2VzIiwiYWxsQ29udGV4dHMiLCJjb250ZXh0c0ZvclN0YXJ0dXAiLCJmb3VuZENvbnRleHRzIiwiZ2V0Q3JlYXRlU3RhcnR1cEhhc2giLCJvUm91dGVyIiwidGhlbiIsIm9FbnRpdHlTZXRBbm5vdGF0aW9ucyIsInNNZXRhUGF0aCIsImJDcmVhdGFibGUiLCJiTmV3QWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlIiwib0luc2VydFJlc3RyaWN0aW9ucyIsIkluc2VydGFibGUiLCJnZXREZWZhdWx0Q3JlYXRlSGFzaCIsInNEZWZhdWx0Q3JlYXRlSGFzaCIsInByZWZlcnJlZE1vZGUiLCJzSGFzaCIsImluY2x1ZGVzIiwic3Vic3RyaW5nIiwiZ2V0Um91dGVJbmZvQnlIYXNoIiwiRXJyb3IiLCJ2ZXJpZnlFZGl0QW5ub3RhdGlvbnMiLCJtZXRhTW9kZWwiLCJlbnRpdHlTZXRBbm5vdGF0aW9ucyIsInVwZGF0ZUhpZGRlbiIsIm9wZXJhdGlvbkF2YWlsYWJsZSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQXBwU3RhcnR1cEhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFByb3BlcnR5UGF0aCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBTdGFydHVwUGFyYW1ldGVycyB9IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgUm91dGluZ0NvbmZpZ3VyYXRpb24sIFJvdXRpbmdSb3V0ZSB9IGZyb20gXCJzYXAvdWkvY29yZS9NYW5pZmVzdFwiO1xuaW1wb3J0IHR5cGUgUm91dGVyIGZyb20gXCJzYXAvdWkvY29yZS9yb3V0aW5nL1JvdXRlclwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IEZpbHRlck9wZXJhdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyT3BlcmF0b3JcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBFeHBhbmRQYXRoVHlwZSwgTWV0YU1vZGVsRW50aXR5U2V0QW5ub3RhdGlvbiB9IGZyb20gXCJ0eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcbmltcG9ydCB7IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCIuLi9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCIuL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgU2VtYW50aWNLZXlIZWxwZXIgZnJvbSBcIi4vU2VtYW50aWNLZXlIZWxwZXJcIjtcblxudHlwZSBWYWx1ZWRLZXkgPSB7XG5cdG5hbWU6IHN0cmluZztcblx0dmFsdWU6IHN0cmluZztcbn07XG5cbnR5cGUgUGFnZUluZm8gPSB7XG5cdHBhdHRlcm46IHN0cmluZztcblx0Y29udGV4dFBhdGg6IHN0cmluZztcblx0ZHJhZnRNb2RlOiBib29sZWFuO1xuXHR0ZWNobmljYWxLZXlzOiBWYWx1ZWRLZXlbXSB8IHVuZGVmaW5lZDtcblx0c2VtYW50aWNLZXlzOiBWYWx1ZWRLZXlbXSB8IHVuZGVmaW5lZDtcblx0dGFyZ2V0OiBzdHJpbmc7XG5cdHBhZ2VMZXZlbDogbnVtYmVyO1xufTtcblxuY29uc3QgQXBwU3RhcnR1cEhlbHBlciA9IHtcblx0LyoqXG5cdCAqIFJldHJpZXZlcyBhIHNldCBvZiBrZXkgdmFsdWVzIGZyb20gc3RhcnR1cCBwYXJhbWV0ZXJzLlxuXHQgKlxuXHQgKiBAcGFyYW0gYUtleU5hbWVzIFRoZSBhcnJheSBvZiBrZXkgbmFtZXNcblx0ICogQHBhcmFtIG9TdGFydHVwUGFyYW1ldGVycyBUaGUgc3RhcnR1cCBwYXJhbWV0ZXJzXG5cdCAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHBhaXJzIFxce25hbWUsIHZhbHVlXFx9IGlmIGFsbCBrZXkgdmFsdWVzIGNvdWxkIGJlIGZvdW5kIGluIHRoZSBzdGFydHVwIHBhcmFtZXRlcnMsIHVuZGVmaW5lZCBvdGhlcndpc2Vcblx0ICovXG5cdF9nZXRLZXlzRnJvbVN0YXJ0dXBQYXJhbXM6IGZ1bmN0aW9uIChhS2V5TmFtZXM6IHN0cmluZ1tdLCBvU3RhcnR1cFBhcmFtZXRlcnM6IFN0YXJ0dXBQYXJhbWV0ZXJzIHwgbnVsbCk6IFZhbHVlZEtleVtdIHwgdW5kZWZpbmVkIHtcblx0XHRsZXQgYkFsbEZvdW5kID0gdHJ1ZTtcblx0XHRjb25zdCBhS2V5cyA9IGFLZXlOYW1lcy5tYXAoKG5hbWUpID0+IHtcblx0XHRcdGlmIChvU3RhcnR1cFBhcmFtZXRlcnM/LltuYW1lXSAmJiBvU3RhcnR1cFBhcmFtZXRlcnNbbmFtZV0ubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdHJldHVybiB7IG5hbWUsIHZhbHVlOiBvU3RhcnR1cFBhcmFtZXRlcnNbbmFtZV1bMF0gYXMgc3RyaW5nIH07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBBIHVuaXF1ZSBrZXkgdmFsdWUgY291bGRuJ3QgYmUgZm91bmQgaW4gdGhlIHN0YXJ0dXAgcGFyYW1ldGVyc1xuXHRcdFx0XHRiQWxsRm91bmQgPSBmYWxzZTtcblx0XHRcdFx0cmV0dXJuIHsgbmFtZSwgdmFsdWU6IFwiXCIgfTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHJldHVybiBiQWxsRm91bmQgPyBhS2V5cyA6IHVuZGVmaW5lZDtcblx0fSxcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIGZpbHRlciBmcm9tIGEgbGlzdCBvZiBrZXkgdmFsdWVzLlxuXHQgKlxuXHQgKiBAcGFyYW0gYUtleXMgQXJyYXkgb2Ygc2VtYW50aWMga2V5cyBvciB0ZWNobmljYWwga2V5cyAod2l0aCB2YWx1ZXMpXG5cdCAqIEBwYXJhbSBiRHJhZnRNb2RlIFRydWUgaWYgdGhlIGVudGl0eSBzdXBwb3J0cyBkcmFmdCBtb2RlXG5cdCAqIEBwYXJhbSBvTWV0YU1vZGVsIFRoZSBtZXRhbW9kZWxcblx0ICogQHJldHVybnMgVGhlIGZpbHRlclxuXHQgKi9cblx0X2NyZWF0ZUZpbHRlckZyb21LZXlzOiBmdW5jdGlvbiAoYUtleXM6IFZhbHVlZEtleVtdLCBiRHJhZnRNb2RlOiBCb29sZWFuLCBvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCk6IEZpbHRlciB7XG5cdFx0Y29uc3QgYkZpbHRlckNhc2VTZW5zaXRpdmUgPSBNb2RlbEhlbHBlci5pc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUob01ldGFNb2RlbCk7XG5cblx0XHRsZXQgYkZpbHRlck9uQWN0aXZlRW50aXR5ID0gZmFsc2U7XG5cdFx0Y29uc3QgYUZpbHRlcnMgPSBhS2V5cy5tYXAoKGtleSkgPT4ge1xuXHRcdFx0aWYgKGtleS5uYW1lID09PSBcIklzQWN0aXZlRW50aXR5XCIpIHtcblx0XHRcdFx0YkZpbHRlck9uQWN0aXZlRW50aXR5ID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBuZXcgRmlsdGVyKHtcblx0XHRcdFx0cGF0aDoga2V5Lm5hbWUsXG5cdFx0XHRcdG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5FUSxcblx0XHRcdFx0dmFsdWUxOiBrZXkudmFsdWUsXG5cdFx0XHRcdGNhc2VTZW5zaXRpdmU6IGJGaWx0ZXJDYXNlU2Vuc2l0aXZlXG5cdFx0XHR9KTtcblx0XHR9KTtcblx0XHRpZiAoYkRyYWZ0TW9kZSAmJiAhYkZpbHRlck9uQWN0aXZlRW50aXR5KSB7XG5cdFx0XHRjb25zdCBvRHJhZnRGaWx0ZXIgPSBuZXcgRmlsdGVyKHtcblx0XHRcdFx0ZmlsdGVyczogW25ldyBGaWx0ZXIoXCJJc0FjdGl2ZUVudGl0eVwiLCBcIkVRXCIsIGZhbHNlKSwgbmV3IEZpbHRlcihcIlNpYmxpbmdFbnRpdHkvSXNBY3RpdmVFbnRpdHlcIiwgXCJFUVwiLCBudWxsKV0sXG5cdFx0XHRcdGFuZDogZmFsc2Vcblx0XHRcdH0pO1xuXHRcdFx0YUZpbHRlcnMucHVzaChvRHJhZnRGaWx0ZXIpO1xuXHRcdH1cblxuXHRcdHJldHVybiBuZXcgRmlsdGVyKGFGaWx0ZXJzLCB0cnVlKTtcblx0fSxcblxuXHQvKipcblx0ICogTG9hZHMgYWxsIGNvbnRleHRzIGZvciBhIGxpc3Qgb2YgcGFnZSBpbmZvcy5cblx0ICpcblx0ICogQHBhcmFtIGFTdGFydHVwUGFnZXMgVGhlIGxpc3Qgb2YgcGFnZSBpbmZvc1xuXHQgKiBAcGFyYW0gb01vZGVsIFRoZSBtb2RlbCB1c2VkIHRvIGxvYWQgdGhlIGNvbnRleHRzXG5cdCAqIEBwYXJhbSBhbHdheXNDaGVja0V4aXN0ZW5jZSBJZiB0cnVlLCBhbHdheXMgY2hlY2sgaWYgdGhlIG9iamVjdCBleGlzdHMsIGV2ZW4gaWYgc2VtYW50aWMga2V5cyBhcmUgcHJlc2VudFxuXHQgKiBAcmV0dXJucyBBIFByb21pc2UgZm9yIGFsbCBjb250ZXh0c1xuXHQgKi9cblx0X3JlcXVlc3RPYmplY3RzRnJvbVBhcmFtZXRlcnM6IGFzeW5jIGZ1bmN0aW9uIChcblx0XHRhU3RhcnR1cFBhZ2VzOiBQYWdlSW5mb1tdLFxuXHRcdG9Nb2RlbDogT0RhdGFNb2RlbCxcblx0XHRhbHdheXNDaGVja0V4aXN0ZW5jZTogYm9vbGVhblxuXHQpOiBQcm9taXNlPENvbnRleHRbXVtdPiB7XG5cdFx0Ly8gTG9hZCB0aGUgcmVzcGVjdGl2ZSBvYmplY3RzIGZvciBhbGwgb2JqZWN0IHBhZ2VzIGZvdW5kIGluIGFFeHRlcm5hbGx5TmF2aWdhYmxlUGFnZXNcblx0XHRjb25zdCBhQ29udGV4dFByb21pc2VzID0gYVN0YXJ0dXBQYWdlcy5tYXAoYXN5bmMgKHBhZ2VJbmZvKSA9PiB7XG5cdFx0XHRpZiAocGFnZUluZm8udGVjaG5pY2FsS2V5cyAmJiAhYWx3YXlzQ2hlY2tFeGlzdGVuY2UpIHtcblx0XHRcdFx0Ly8gQ3JlYXRlIGEgY29udGV4dCB3aXRoIHRoZSBwcm9wZXIgcGF0aFxuXHRcdFx0XHRjb25zdCBlbnRpdHlUeXBlID0gb01vZGVsLmdldE1ldGFNb2RlbCgpLmdldE9iamVjdChgJHtwYWdlSW5mby5jb250ZXh0UGF0aH0vYCk7XG5cdFx0XHRcdGNvbnN0IHBhdGggPSBgJHtwYWdlSW5mby5jb250ZXh0UGF0aH0oJHtTZW1hbnRpY0tleUhlbHBlci5nZXRQYXRoQ29udGVudChwYWdlSW5mby50ZWNobmljYWxLZXlzLCBlbnRpdHlUeXBlKX0pYDtcblx0XHRcdFx0Y29uc3QgY29udGV4dCA9IG9Nb2RlbC5iaW5kQ29udGV4dChwYXRoKS5nZXRCb3VuZENvbnRleHQoKTtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShbY29udGV4dF0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgYUtleXMgPSBwYWdlSW5mby5zZW1hbnRpY0tleXMgfHwgcGFnZUluZm8udGVjaG5pY2FsS2V5cyB8fCBbXTtcblx0XHRcdFx0Y29uc3Qgb0ZpbHRlciA9IHRoaXMuX2NyZWF0ZUZpbHRlckZyb21LZXlzKGFLZXlzLCBwYWdlSW5mby5kcmFmdE1vZGUsIG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSk7XG5cblx0XHRcdFx0Ly8gb25seSByZXF1ZXN0IGEgbWluaW11bSBvZiBmaWVsZHMgdG8gYm9vc3QgYmFja2VuZCBwZXJmb3JtYW5jZSBzaW5jZSB0aGlzIGlzIG9ubHkgdXNlZCB0byBjaGVjayBpZiBhbiBvYmplY3QgZXhpc3RzXG5cdFx0XHRcdGNvbnN0IG9MaXN0QmluZCA9IG9Nb2RlbC5iaW5kTGlzdChwYWdlSW5mby5jb250ZXh0UGF0aCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIG9GaWx0ZXIsIHtcblx0XHRcdFx0XHQkc2VsZWN0OiBhS2V5c1xuXHRcdFx0XHRcdFx0Lm1hcCgoa2V5KSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBrZXkubmFtZTtcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHQuam9pbihcIixcIilcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybiBvTGlzdEJpbmQucmVxdWVzdENvbnRleHRzKDAsIDIpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKGFDb250ZXh0UHJvbWlzZXMpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgUGFnZUluZm8gZnJvbSBhIHJvdXRlIGlmIGl0J3MgcmVhY2hhYmxlIGZyb20gdGhlIHN0YXJ0dXAgcGFyYW1ldGVycy5cblx0ICpcblx0ICogQHBhcmFtIG9Sb3V0ZSBUaGUgcm91dGVcblx0ICogQHBhcmFtIG9NYW5pZmVzdFJvdXRpbmcgVGhlIGFwcCBtYW5pZmVzdCByb3V0aW5nIHNlY3Rpb25cblx0ICogQHBhcmFtIG9TdGFydHVwUGFyYW1ldGVycyBUaGUgc3RhcnR1cCBwYXJhbWV0ZXJzXG5cdCAqIEBwYXJhbSBvTWV0YU1vZGVsIFRoZSBhcHAgbWV0YW1vZGVsXG5cdCAqIEByZXR1cm5zIEEgcGFnZSBpbmZvIGlmIHRoZSBwYWdlIGlzIHJlYWNoYWJsZSwgdW5kZWZpbmVkIG90aGVyd2lzZVxuXHQgKi9cblx0X2dldFJlYWNoYWJsZVBhZ2VJbmZvRnJvbVJvdXRlOiBmdW5jdGlvbiAoXG5cdFx0b1JvdXRlOiBSb3V0aW5nUm91dGUsXG5cdFx0b01hbmlmZXN0Um91dGluZzogUm91dGluZ0NvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQsXG5cdFx0b1N0YXJ0dXBQYXJhbWV0ZXJzOiBTdGFydHVwUGFyYW1ldGVycyB8IG51bGwsXG5cdFx0b01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWxcblx0KTogUGFnZUluZm8gfCB1bmRlZmluZWQge1xuXHRcdC8vIFJlbW92ZSB0cmFpbGluZyAnOj9xdWVyeTonIGFuZCAnLydcblx0XHRsZXQgc1BhdHRlcm46IHN0cmluZyA9IG9Sb3V0ZS5wYXR0ZXJuIS5yZXBsYWNlKFwiOj9xdWVyeTpcIiwgXCJcIik7XG5cdFx0c1BhdHRlcm4gPSBzUGF0dGVybi5yZXBsYWNlKC9cXC8kLywgXCJcIik7XG5cblx0XHRpZiAoIXNQYXR0ZXJuIHx8ICFzUGF0dGVybi5lbmRzV2l0aChcIilcIikpIHtcblx0XHRcdC8vIElnbm9yZSBsZXZlbC0wIHJvdXRlcyAoTGlzdFJlcG9ydCkgb3Igcm91dGVzIGNvcnJlc3BvbmRpbmcgdG8gYSAxLTEgcmVsYXRpb24gKG5vIGtleXMgaW4gdGhlIFVSTCBpbiB0aGlzIGNhc2UpXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdHNQYXR0ZXJuID0gc1BhdHRlcm4ucmVwbGFjZSgvXFwoXFx7W159XSpcXH1cXCkvZywgXCIoIylcIik7IC8vIFJlcGxhY2Uga2V5cyB3aXRoICNcblxuXHRcdC8vIEdldCB0aGUgcmlnaHRtb3N0IHRhcmdldCBmb3IgdGhpcyByb3V0ZVxuXHRcdGNvbnN0IHNUYXJnZXROYW1lOiBzdHJpbmcgPSBBcnJheS5pc0FycmF5KG9Sb3V0ZS50YXJnZXQpID8gb1JvdXRlLnRhcmdldFtvUm91dGUudGFyZ2V0Lmxlbmd0aCAtIDFdIDogb1JvdXRlLnRhcmdldDtcblx0XHRjb25zdCBvVGFyZ2V0ID0gb01hbmlmZXN0Um91dGluZz8udGFyZ2V0cz8uW3NUYXJnZXROYW1lXTtcblxuXHRcdGNvbnN0IGFQYXR0ZXJuU2VnbWVudHMgPSBzUGF0dGVybi5zcGxpdChcIi9cIik7XG5cdFx0Y29uc3QgcGFnZUxldmVsID0gYVBhdHRlcm5TZWdtZW50cy5sZW5ndGggLSAxO1xuXG5cdFx0aWYgKHBhZ2VMZXZlbCAhPT0gMCAmJiBvVGFyZ2V0Py5vcHRpb25zPy5zZXR0aW5ncz8uYWxsb3dEZWVwTGlua2luZyAhPT0gdHJ1ZSkge1xuXHRcdFx0Ly8gVGhlIGZpcnN0IGxldmVsIG9mIG9iamVjdCBwYWdlIGFsbG93cyBkZWVwIGxpbmtpbmcgYnkgZGVmYXVsdC5cblx0XHRcdC8vIE90aGVyd2lzZSwgdGhlIHRhcmdldCBtdXN0IGFsbG93IGRlZXAgbGlua2luZyBleHBsaWNpdGVseSBpbiB0aGUgbWFuaWZlc3Rcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0bGV0IHNDb250ZXh0UGF0aCA9IFwiXCI7XG5cdFx0aWYgKG9UYXJnZXQ/Lm9wdGlvbnM/LnNldHRpbmdzPy5lbnRpdHlTZXQpIHtcblx0XHRcdHNDb250ZXh0UGF0aCA9IGAvJHtvVGFyZ2V0Lm9wdGlvbnMuc2V0dGluZ3MuZW50aXR5U2V0fWA7XG5cdFx0fSBlbHNlIGlmIChvVGFyZ2V0Py5vcHRpb25zPy5zZXR0aW5ncz8uY29udGV4dFBhdGgpIHtcblx0XHRcdGNvbnN0IG1ldGFDb250ZXh0ID0gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChvVGFyZ2V0Lm9wdGlvbnMuc2V0dGluZ3MuY29udGV4dFBhdGgpITtcblx0XHRcdGNvbnN0IG9iamVjdFBhdGggPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YUNvbnRleHQpO1xuXHRcdFx0aWYgKG9iamVjdFBhdGgudGFyZ2V0RW50aXR5U2V0KSB7XG5cdFx0XHRcdHNDb250ZXh0UGF0aCA9IGAvJHtvYmplY3RQYXRoLnRhcmdldEVudGl0eVNldC5uYW1lfWA7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCFzQ29udGV4dFBhdGgpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGNvbnN0IG9FbnRpdHlUeXBlID0gc0NvbnRleHRQYXRoICYmIG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAvJEVudGl0eUNvbnRhaW5lciR7c0NvbnRleHRQYXRofS9gKTtcblxuXHRcdGlmICghb0VudGl0eVR5cGUpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gR2V0IHRoZSBzZW1hbnRpYyBrZXkgdmFsdWVzIGZvciB0aGUgZW50aXR5XG5cdFx0Y29uc3QgYVNlbWFudGljS2V5TmFtZXM6IEV4cGFuZFBhdGhUeXBlPFByb3BlcnR5UGF0aD5bXSA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KFxuXHRcdFx0YC8kRW50aXR5Q29udGFpbmVyJHtzQ29udGV4dFBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNLZXlgXG5cdFx0KTtcblxuXHRcdGNvbnN0IGFTZW1hbnRpY2tLZXlzID0gYVNlbWFudGljS2V5TmFtZXNcblx0XHRcdD8gdGhpcy5fZ2V0S2V5c0Zyb21TdGFydHVwUGFyYW1zKFxuXHRcdFx0XHRcdGFTZW1hbnRpY0tleU5hbWVzLm1hcCgoc2VtS2V5KSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc2VtS2V5LiRQcm9wZXJ0eVBhdGg7XG5cdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0b1N0YXJ0dXBQYXJhbWV0ZXJzXG5cdFx0XHQgIClcblx0XHRcdDogdW5kZWZpbmVkO1xuXG5cdFx0Ly8gR2V0IHRoZSB0ZWNobmljYWwga2V5cyBvbmx5IGlmIHdlIGNvdWxkbid0IGZpbmQgdGhlIHNlbWFudGljIGtleSB2YWx1ZXMsIGFuZCBvbiBmaXJzdCBsZXZlbCBPUFxuXHRcdGNvbnN0IGFUZWNobmljYWxLZXlzID1cblx0XHRcdCFhU2VtYW50aWNrS2V5cyAmJiBwYWdlTGV2ZWwgPT09IDAgPyB0aGlzLl9nZXRLZXlzRnJvbVN0YXJ0dXBQYXJhbXMob0VudGl0eVR5cGVbXCIkS2V5XCJdLCBvU3RhcnR1cFBhcmFtZXRlcnMpIDogdW5kZWZpbmVkO1xuXG5cdFx0aWYgKGFTZW1hbnRpY2tLZXlzID09PSB1bmRlZmluZWQgJiYgYVRlY2huaWNhbEtleXMgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gV2UgY291bGRuJ3QgZmluZCB0aGUgc2VtYW50aWMvdGVjaG5pY2FsIGtleXMgaW4gdGhlIHN0YXJ0dXAgcGFyYW1ldGVyc1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBUaGUgc3RhcnR1cCBwYXJhbWV0ZXJzIGNvbnRhaW4gdmFsdWVzIGZvciBhbGwgc2VtYW50aWMga2V5cyAob3IgdGVjaG5pY2FsIGtleXMpIC0tPiB3ZSBjYW4gc3RvcmUgdGhlIHBhZ2UgaW5mbyBpbiB0aGUgY29ycmVzcG9uZGluZyBsZXZlbFxuXHRcdGNvbnN0IGRyYWZ0TW9kZSA9XG5cdFx0XHRvTWV0YU1vZGVsLmdldE9iamVjdChgLyRFbnRpdHlDb250YWluZXIke3NDb250ZXh0UGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdGApIHx8XG5cdFx0XHRvTWV0YU1vZGVsLmdldE9iamVjdChgLyRFbnRpdHlDb250YWluZXIke3NDb250ZXh0UGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Tm9kZWApXG5cdFx0XHRcdD8gdHJ1ZVxuXHRcdFx0XHQ6IGZhbHNlO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHBhdHRlcm46IHNQYXR0ZXJuLFxuXHRcdFx0Y29udGV4dFBhdGg6IHNDb250ZXh0UGF0aCxcblx0XHRcdGRyYWZ0TW9kZSxcblx0XHRcdHRlY2huaWNhbEtleXM6IGFUZWNobmljYWxLZXlzLFxuXHRcdFx0c2VtYW50aWNLZXlzOiBhU2VtYW50aWNrS2V5cyxcblx0XHRcdHRhcmdldDogc1RhcmdldE5hbWUsXG5cdFx0XHRwYWdlTGV2ZWxcblx0XHR9O1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIGFsbCBwYWdlcyB0aGF0IGFsbG93IGRlZXBsaW5rIGFuZCB0aGF0IGNhbiBiZSByZWFjaGVkIHVzaW5nIHRoZSBzdGFydHVwIHBhcmFtZXRlcnMuXG5cdCAqXG5cdCAqIEBwYXJhbSBvTWFuaWZlc3RSb3V0aW5nIFRoZSByb3V0aW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIGFwcCBtYW5pZmVzdFxuXHQgKiBAcGFyYW0gb1N0YXJ0dXBQYXJhbWV0ZXJzIFRoZSBzdGFydHVwIHBhcmFtZXRlcnNcblx0ICogQHBhcmFtIG9NZXRhTW9kZWwgVGhlIG1ldGFtb2RlbFxuXHQgKiBAcmV0dXJucyBUaGUgcmVhY2hhYmxlIHBhZ2VzXG5cdCAqL1xuXHRfZ2V0UmVhY2hhYmxlUGFnZXM6IGZ1bmN0aW9uIChcblx0XHRvTWFuaWZlc3RSb3V0aW5nOiBSb3V0aW5nQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCxcblx0XHRvU3RhcnR1cFBhcmFtZXRlcnM6IFN0YXJ0dXBQYXJhbWV0ZXJzIHwgbnVsbCxcblx0XHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbFxuXHQpOiBQYWdlSW5mb1tdW10ge1xuXHRcdGNvbnN0IGFSb3V0ZXM6IFJvdXRpbmdSb3V0ZVtdID0gb01hbmlmZXN0Um91dGluZz8ucm91dGVzID8/IFtdO1xuXHRcdGNvbnN0IG1QYWdlc0J5TGV2ZWw6IFJlY29yZDxudW1iZXIsIFBhZ2VJbmZvW10+ID0ge307XG5cblx0XHRhUm91dGVzLmZvckVhY2goKG9Sb3V0ZSkgPT4ge1xuXHRcdFx0Y29uc3Qgb1BhZ2VJbmZvID0gdGhpcy5fZ2V0UmVhY2hhYmxlUGFnZUluZm9Gcm9tUm91dGUob1JvdXRlLCBvTWFuaWZlc3RSb3V0aW5nLCBvU3RhcnR1cFBhcmFtZXRlcnMsIG9NZXRhTW9kZWwpO1xuXG5cdFx0XHRpZiAob1BhZ2VJbmZvKSB7XG5cdFx0XHRcdGlmICghbVBhZ2VzQnlMZXZlbFtvUGFnZUluZm8ucGFnZUxldmVsXSkge1xuXHRcdFx0XHRcdG1QYWdlc0J5TGV2ZWxbb1BhZ2VJbmZvLnBhZ2VMZXZlbF0gPSBbXTtcblx0XHRcdFx0fVxuXHRcdFx0XHRtUGFnZXNCeUxldmVsW29QYWdlSW5mby5wYWdlTGV2ZWxdLnB1c2gob1BhZ2VJbmZvKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdC8vIEEgcGFnZSBpcyByZWFjaGFibGUgb25seSBpZiBhbGwgaXRzIHBhcmVudHMgYXJlIGFsc28gcmVhY2hhYmxlXG5cdFx0Ly8gU28gaWYgd2UgY291bGRuJ3QgZmluZCBhbnkgcGFnZXMgZm9yIGEgZ2l2ZW4gbGV2ZWwsIGFsbCBwYWdlcyB3aXRoIGEgaGlnaGVyIGxldmVsIHdvbid0IGJlIHJlYWNoYWJsZSBhbnl3YXlcblx0XHRjb25zdCBhUmVhY2hhYmxlUGFnZXM6IFBhZ2VJbmZvW11bXSA9IFtdO1xuXHRcdGxldCBsZXZlbCA9IDA7XG5cdFx0d2hpbGUgKG1QYWdlc0J5TGV2ZWxbbGV2ZWxdKSB7XG5cdFx0XHRhUmVhY2hhYmxlUGFnZXMucHVzaChtUGFnZXNCeUxldmVsW2xldmVsXSk7XG5cdFx0XHRsZXZlbCsrO1xuXHRcdH1cblxuXHRcdHJldHVybiBhUmVhY2hhYmxlUGFnZXM7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldCB0aGUgbGlzdCBvZiBzdGFydHVwIHBhZ2VzLlxuXHQgKlxuXHQgKiBAcGFyYW0gb01hbmlmZXN0Um91dGluZyBUaGUgcm91dGluZyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBhcHAgbWFuaWZlc3Rcblx0ICogQHBhcmFtIG9TdGFydHVwUGFyYW1ldGVycyBUaGUgc3RhcnR1cCBwYXJhbWV0ZXJzXG5cdCAqIEBwYXJhbSBvTWV0YU1vZGVsIFRoZSBtZXRhbW9kZWxcblx0ICogQHJldHVybnMgQW4gYXJyYXkgb2Ygc3RhcnR1cCBwYWdlIGluZm9zXG5cdCAqL1xuXHRfZ2V0U3RhcnR1cFBhZ2VzRnJvbVN0YXJ0dXBQYXJhbXM6IGZ1bmN0aW9uIChcblx0XHRvTWFuaWZlc3RSb3V0aW5nOiBSb3V0aW5nQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCxcblx0XHRvU3RhcnR1cFBhcmFtZXRlcnM6IFN0YXJ0dXBQYXJhbWV0ZXJzIHwgbnVsbCxcblx0XHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbFxuXHQpOiBQYWdlSW5mb1tdIHtcblx0XHQvLyBGaW5kIGFsbCBwYWdlcyB0aGF0IGNhbiBiZSByZWFjaGVkIHdpdGggdGhlIHN0YXJ0dXAgcGFyYW1ldGVyc1xuXHRcdGNvbnN0IGFSZWFjaGFibGVQYWdlcyA9IHRoaXMuX2dldFJlYWNoYWJsZVBhZ2VzKG9NYW5pZmVzdFJvdXRpbmcsIG9TdGFydHVwUGFyYW1ldGVycywgb01ldGFNb2RlbCk7XG5cblx0XHRpZiAoYVJlYWNoYWJsZVBhZ2VzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblxuXHRcdC8vIEZpbmQgdGhlIGxvbmdlc3Qgc2VxdWVuY2Ugb2YgcGFnZXMgdGhhdCBjYW4gYmUgcmVhY2hlZCAocmVjdXJzaXZlbHkpXG5cdFx0bGV0IHJlc3VsdDogUGFnZUluZm9bXSA9IFtdO1xuXHRcdGNvbnN0IGN1cnJlbnQ6IFBhZ2VJbmZvW10gPSBbXTtcblxuXHRcdGZ1bmN0aW9uIGZpbmRSZWN1cnNpdmUobGV2ZWw6IG51bWJlcik6IHZvaWQge1xuXHRcdFx0Y29uc3QgYUN1cnJlbnRMZXZlbFBhZ2VzID0gYVJlYWNoYWJsZVBhZ2VzW2xldmVsXTtcblx0XHRcdGNvbnN0IGxhc3RQYWdlID0gY3VycmVudC5sZW5ndGggPyBjdXJyZW50W2N1cnJlbnQubGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQ7XG5cblx0XHRcdGlmIChhQ3VycmVudExldmVsUGFnZXMpIHtcblx0XHRcdFx0YUN1cnJlbnRMZXZlbFBhZ2VzLmZvckVhY2goZnVuY3Rpb24gKG5leHRQYWdlKSB7XG5cdFx0XHRcdFx0aWYgKCFsYXN0UGFnZSB8fCBuZXh0UGFnZS5wYXR0ZXJuLmluZGV4T2YobGFzdFBhZ2UucGF0dGVybikgPT09IDApIHtcblx0XHRcdFx0XHRcdC8vIFdlIG9ubHkgY29uc2lkZXIgcGFnZXMgdGhhdCBjYW4gYmUgcmVhY2hlZCBmcm9tIHRoZSBwYWdlIGF0IHRoZSBwcmV2aW91cyBsZXZlbCxcblx0XHRcdFx0XHRcdC8vIC0tPiB0aGVpciBwYXR0ZXJuIG11c3QgYmUgdGhlIHBhdHRlcm4gb2YgdGhlIHByZXZpb3VzIHBhZ2Ugd2l0aCBhbm90aGVyIHNlZ21lbnQgYXBwZW5kZWRcblx0XHRcdFx0XHRcdGN1cnJlbnQucHVzaChuZXh0UGFnZSk7XG5cdFx0XHRcdFx0XHRmaW5kUmVjdXJzaXZlKGxldmVsICsgMSk7XG5cdFx0XHRcdFx0XHRjdXJyZW50LnBvcCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoY3VycmVudC5sZW5ndGggPiByZXN1bHQubGVuZ3RoKSB7XG5cdFx0XHRcdHJlc3VsdCA9IGN1cnJlbnQuc2xpY2UoKTsgLy8gV2UgaGF2ZSBmb3VuZCBhIHNlcXVlbmNlIGxvbmdlciB0aGFuIG91ciBwcmV2aW91cyBiZXN0IC0tPiBzdG9yZSBpdCBhcyB0aGUgbmV3IGxvbmdlc3Rcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmaW5kUmVjdXJzaXZlKDApO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSxcblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgc3RhcnR1cCBvYmplY3QgZnJvbSB0aGUgbGlzdCBvZiBwYWdlcyBhbmQgY29udGV4dHMuXG5cdCAqXG5cdCAqIEBwYXJhbSBhU3RhcnR1cFBhZ2VzIFRoZSBwYWdlc1xuXHQgKiBAcGFyYW0gYUNvbnRleHRzIFRoZSBjb250ZXh0c1xuXHQgKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyBlaXRoZXIgYSBoYXNoIG9yIGEgY29udGV4dCB0byBuYXZpZ2F0ZSB0bywgb3IgYW4gZW1wdHkgb2JqZWN0IGlmIG5vIGRlZXAgbGluayB3YXMgZm91bmRcblx0ICovXG5cdF9nZXREZWVwTGlua09iamVjdDogZnVuY3Rpb24gKGFTdGFydHVwUGFnZXM6IFBhZ2VJbmZvW10sIGFDb250ZXh0czogQ29udGV4dFtdKTogeyBoYXNoPzogc3RyaW5nOyBjb250ZXh0PzogQ29udGV4dCB9IHtcblx0XHRpZiAoYUNvbnRleHRzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0cmV0dXJuIHsgY29udGV4dDogYUNvbnRleHRzWzBdIH07XG5cdFx0fSBlbHNlIGlmIChhQ29udGV4dHMubGVuZ3RoID4gMSkge1xuXHRcdFx0Ly8gTmF2aWdhdGlvbiB0byBhIGRlZXBlciBsZXZlbCAtLT4gdXNlIHRoZSBwYXR0ZXJuIG9mIHRoZSBkZWVwZXN0IG9iamVjdCBwYWdlXG5cdFx0XHQvLyBhbmQgcmVwbGFjZSB0aGUgcGFyYW1ldGVycyBieSB0aGUgSUQgZnJvbSB0aGUgY29udGV4dHNcblx0XHRcdGxldCBoYXNoID0gYVN0YXJ0dXBQYWdlc1thU3RhcnR1cFBhZ2VzLmxlbmd0aCAtIDFdLnBhdHRlcm47XG5cdFx0XHRhQ29udGV4dHMuZm9yRWFjaChmdW5jdGlvbiAob0NvbnRleHQpIHtcblx0XHRcdFx0aGFzaCA9IGhhc2gucmVwbGFjZShcIigjKVwiLCBgKCR7b0NvbnRleHQuZ2V0UGF0aCgpLnNwbGl0KFwiKFwiKVsxXX1gKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4geyBoYXNoIH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB7fTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIENhbGN1bGF0ZXMgc3RhcnR1cCBwYXJhbWV0ZXJzIGZvciBhIGRlZXBsaW5rIGNhc2UsIGZyb20gc3RhcnR1cCBwYXJhbWV0ZXJzIGFuZCByb3V0aW5nIGluZm9pcm1hdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIG9NYW5pZmVzdFJvdXRpbmcgVGhlIHJvdXRpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgYXBwIG1hbmlmZXN0XG5cdCAqIEBwYXJhbSBvU3RhcnR1cFBhcmFtZXRlcnMgVGhlIHN0YXJ0dXAgcGFyYW1ldGVyc1xuXHQgKiBAcGFyYW0gb01vZGVsIFRoZSBPRGF0YSBtb2RlbFxuXHQgKiBAcGFyYW0gYWx3YXlzQ2hlY2tFeGlzdGVuY2Vcblx0ICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZWl0aGVyIGEgaGFzaCBvciBhIGNvbnRleHQgdG8gbmF2aWdhdGUgdG8sIG9yIGFuIGVtcHR5IG9iamVjdCBpZiBubyBkZWVwIGxpbmsgd2FzIGZvdW5kXG5cdCAqL1xuXHRnZXREZWVwTGlua1N0YXJ0dXBIYXNoOiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0b01hbmlmZXN0Um91dGluZzogUm91dGluZ0NvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQsXG5cdFx0b1N0YXJ0dXBQYXJhbWV0ZXJzOiBTdGFydHVwUGFyYW1ldGVycyB8IG51bGwsXG5cdFx0b01vZGVsOiBPRGF0YU1vZGVsLFxuXHRcdGFsd2F5c0NoZWNrRXhpc3RlbmNlOiBib29sZWFuXG5cdCk6IFByb21pc2U8eyBoYXNoPzogc3RyaW5nOyBjb250ZXh0PzogQ29udGV4dCB9PiB7XG5cdFx0YXdhaXQgb01vZGVsLmdldE1ldGFNb2RlbCgpLnJlcXVlc3RPYmplY3QoXCIvJEVudGl0eUNvbnRhaW5lci9cIik7XG5cblx0XHQvLyBDaGVjayBpZiBzZW1hbnRpYyBrZXlzIGFyZSBwcmVzZW50IGluIHVybCBwYXJhbWV0ZXJzIGZvciBldmVyeSBvYmplY3QgcGFnZSBhdCBlYWNoIGxldmVsXG5cdFx0Y29uc3Qgc3RhcnR1cFBhZ2VzID0gdGhpcy5fZ2V0U3RhcnR1cFBhZ2VzRnJvbVN0YXJ0dXBQYXJhbXMob01hbmlmZXN0Um91dGluZywgb1N0YXJ0dXBQYXJhbWV0ZXJzLCBvTW9kZWwuZ2V0TWV0YU1vZGVsKCkpO1xuXG5cdFx0Ly8gTG9hZCB0aGUgY29udGV4dHNcblx0XHRjb25zdCBhbGxDb250ZXh0cyA9IGF3YWl0IHRoaXMuX3JlcXVlc3RPYmplY3RzRnJvbVBhcmFtZXRlcnMoc3RhcnR1cFBhZ2VzLCBvTW9kZWwsIGFsd2F5c0NoZWNrRXhpc3RlbmNlKTtcblx0XHRpZiAoYWxsQ29udGV4dHMubGVuZ3RoKSB7XG5cdFx0XHQvLyBNYWtlIHN1cmUgd2Ugb25seSBnZXQgMSBjb250ZXh0IHBlciBwcm9taXNlLCBhbmQgZmxhdHRlbiB0aGUgYXJyYXlcblx0XHRcdGNvbnN0IGNvbnRleHRzRm9yU3RhcnR1cDogQ29udGV4dFtdID0gW107XG5cdFx0XHRhbGxDb250ZXh0cy5mb3JFYWNoKGZ1bmN0aW9uIChmb3VuZENvbnRleHRzKSB7XG5cdFx0XHRcdGlmIChmb3VuZENvbnRleHRzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHRcdGNvbnRleHRzRm9yU3RhcnR1cC5wdXNoKGZvdW5kQ29udGV4dHNbMF0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIGNvbnRleHRzRm9yU3RhcnR1cC5sZW5ndGggPT09IGFsbENvbnRleHRzLmxlbmd0aCA/IHRoaXMuX2dldERlZXBMaW5rT2JqZWN0KHN0YXJ0dXBQYWdlcywgY29udGV4dHNGb3JTdGFydHVwKSA6IHt9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4ge307XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBDYWxjdWxhdGVzIHRoZSBuZXcgaGFzaCBiYXNlZCBvbiB0aGUgc3RhcnR1cCBwYXJhbWV0ZXJzLlxuXHQgKlxuXHQgKiBAcGFyYW0gb1N0YXJ0dXBQYXJhbWV0ZXJzIFRoZSBzdGFydHVwIHBhcmFtZXRlciB2YWx1ZXMgKG1hcCBwYXJhbWV0ZXIgbmFtZSAtPiBhcnJheSBvZiB2YWx1ZXMpXG5cdCAqIEBwYXJhbSBzQ29udGV4dFBhdGggVGhlIGNvbnRleHQgcGF0aCBmb3IgdGhlIHN0YXJ0dXAgb2YgdGhlIGFwcCAoZ2VuZXJhbGx5IHRoZSBwYXRoIHRvIHRoZSBtYWluIGVudGl0eSBzZXQpXG5cdCAqIEBwYXJhbSBvUm91dGVyIFRoZSByb3V0ZXIgaW5zdGFuY2Vcblx0ICogQHBhcmFtIG9NZXRhTW9kZWwgVGhlIG1ldGEgbW9kZWxcblx0ICogQHJldHVybnMgQSBwcm9taXNlIGNvbnRhaW5pbmcgdGhlIGhhc2ggdG8gbmF2aWdhdGUgdG8sIG9yIGFuIGVtcHR5IHN0cmluZyBpZiB0aGVyZSdzIG5vIG5lZWQgdG8gbmF2aWdhdGVcblx0ICovXG5cdGdldENyZWF0ZVN0YXJ0dXBIYXNoOiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0b1N0YXJ0dXBQYXJhbWV0ZXJzOiBTdGFydHVwUGFyYW1ldGVycyxcblx0XHRzQ29udGV4dFBhdGg6IHN0cmluZyxcblx0XHRvUm91dGVyOiBSb3V0ZXIsXG5cdFx0b01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWxcblx0KTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRyZXR1cm4gb01ldGFNb2RlbC5yZXF1ZXN0T2JqZWN0KGAke3NDb250ZXh0UGF0aH1AYCkudGhlbigob0VudGl0eVNldEFubm90YXRpb25zOiBNZXRhTW9kZWxFbnRpdHlTZXRBbm5vdGF0aW9uKSA9PiB7XG5cdFx0XHRsZXQgc01ldGFQYXRoID0gXCJcIjtcblx0XHRcdGxldCBiQ3JlYXRhYmxlID0gdHJ1ZTtcblxuXHRcdFx0aWYgKFxuXHRcdFx0XHRvRW50aXR5U2V0QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdFwiXSAmJlxuXHRcdFx0XHRvRW50aXR5U2V0QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdFwiXVtcIk5ld0FjdGlvblwiXVxuXHRcdFx0KSB7XG5cdFx0XHRcdHNNZXRhUGF0aCA9IGAke3NDb250ZXh0UGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdC9OZXdBY3Rpb25AT3JnLk9EYXRhLkNvcmUuVjEuT3BlcmF0aW9uQXZhaWxhYmxlYDtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdG9FbnRpdHlTZXRBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5TZXNzaW9uLnYxLlN0aWNreVNlc3Npb25TdXBwb3J0ZWRcIl0gJiZcblx0XHRcdFx0b0VudGl0eVNldEFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlNlc3Npb24udjEuU3RpY2t5U2Vzc2lvblN1cHBvcnRlZFwiXVtcIk5ld0FjdGlvblwiXVxuXHRcdFx0KSB7XG5cdFx0XHRcdHNNZXRhUGF0aCA9IGAke3NDb250ZXh0UGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuU2Vzc2lvbi52MS5TdGlja3lTZXNzaW9uU3VwcG9ydGVkL05ld0FjdGlvbkBPcmcuT0RhdGEuQ29yZS5WMS5PcGVyYXRpb25BdmFpbGFibGVgO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc01ldGFQYXRoKSB7XG5cdFx0XHRcdGNvbnN0IGJOZXdBY3Rpb25PcGVyYXRpb25BdmFpbGFibGUgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzTWV0YVBhdGgpO1xuXHRcdFx0XHRpZiAoYk5ld0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0XHRiQ3JlYXRhYmxlID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IG9JbnNlcnRSZXN0cmljdGlvbnMgPSBvRW50aXR5U2V0QW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5JbnNlcnRSZXN0cmljdGlvbnNcIl07XG5cdFx0XHRcdGlmIChvSW5zZXJ0UmVzdHJpY3Rpb25zICYmIG9JbnNlcnRSZXN0cmljdGlvbnMuSW5zZXJ0YWJsZSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0XHRiQ3JlYXRhYmxlID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChiQ3JlYXRhYmxlKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmdldERlZmF1bHRDcmVhdGVIYXNoKG9TdGFydHVwUGFyYW1ldGVycywgc0NvbnRleHRQYXRoLCBvUm91dGVyKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBcIlwiO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDYWxjdWxhdGVzIHRoZSBoYXNoIHRvIGNyZWF0ZSBhIG5ldyBvYmplY3QuXG5cdCAqXG5cdCAqIEBwYXJhbSBvU3RhcnR1cFBhcmFtZXRlcnMgVGhlIHN0YXJ0dXAgcGFyYW1ldGVyIHZhbHVlcyAobWFwIHBhcmFtZXRlciBuYW1lIC0+IGFycmF5IG9mIHZhbHVlcylcblx0ICogQHBhcmFtIHNDb250ZXh0UGF0aCBUaGUgY29udGV4dCBwYXRoIG9mIHRoZSBlbnRpdHkgc2V0IHRvIGJlIHVzZWQgZm9yIHRoZSBjcmVhdGlvblxuXHQgKiBAcGFyYW0gb1JvdXRlciBUaGUgcm91dGVyIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIFRoZSBoYXNoXG5cdCAqL1xuXHRnZXREZWZhdWx0Q3JlYXRlSGFzaDogZnVuY3Rpb24gKFxuXHRcdG9TdGFydHVwUGFyYW1ldGVyczogU3RhcnR1cFBhcmFtZXRlcnMgfCBudWxsIHwgdW5kZWZpbmVkLFxuXHRcdHNDb250ZXh0UGF0aDogc3RyaW5nLFxuXHRcdG9Sb3V0ZXI6IFJvdXRlclxuXHQpOiBzdHJpbmcge1xuXHRcdGxldCBzRGVmYXVsdENyZWF0ZUhhc2ggPSBvU3RhcnR1cFBhcmFtZXRlcnMgJiYgb1N0YXJ0dXBQYXJhbWV0ZXJzLnByZWZlcnJlZE1vZGUgPyBvU3RhcnR1cFBhcmFtZXRlcnMucHJlZmVycmVkTW9kZVswXSA6IFwiY3JlYXRlXCI7XG5cdFx0bGV0IHNIYXNoID0gXCJcIjtcblxuXHRcdHNEZWZhdWx0Q3JlYXRlSGFzaCA9XG5cdFx0XHRzRGVmYXVsdENyZWF0ZUhhc2guaW5jbHVkZXMoXCI6XCIpICYmIHNEZWZhdWx0Q3JlYXRlSGFzaC5sZW5ndGggPiBzRGVmYXVsdENyZWF0ZUhhc2guaW5kZXhPZihcIjpcIikgKyAxXG5cdFx0XHRcdD8gc0RlZmF1bHRDcmVhdGVIYXNoLnN1YnN0cmluZygwLCBzRGVmYXVsdENyZWF0ZUhhc2guaW5kZXhPZihcIjpcIikpXG5cdFx0XHRcdDogXCJjcmVhdGVcIjtcblx0XHRzSGFzaCA9IGAke3NDb250ZXh0UGF0aC5zdWJzdHJpbmcoMSl9KC4uLik/aS1hY3Rpb249JHtzRGVmYXVsdENyZWF0ZUhhc2h9YDtcblx0XHRpZiAob1JvdXRlci5nZXRSb3V0ZUluZm9CeUhhc2goc0hhc2gpKSB7XG5cdFx0XHRyZXR1cm4gc0hhc2g7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgTm8gcm91dGUgbWF0Y2ggZm9yIGNyZWF0aW5nIGEgbmV3ICR7c0NvbnRleHRQYXRoLnN1YnN0cmluZygxKX1gKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFZlcmlmaWVzIHdoZXRoZXIgdGhlIGVudGl0eSBpbiB0aGUgZ2l2ZW4gY29udGV4dCBwYXRoIGlzIGVkaXRhYmxlIGJ5IGxvb2tpbmcgYXQgdGhlIGZvbGxvd2luZyBhbm5vdGF0aW9uczpcblx0ICpcblx0ICogLSBAQ29yZS5PcGVyYXRpb25BdmFpbGFibGUgb2YgdGhlIGVkaXQgYWN0aW9uXG5cdCAqIC0gQFVJLlVwZGF0ZUhpZGRlblxuXHQgKlxuXHQgKiBPbmx5IHN0YXRpYyB2YWx1ZXMgKHRydWUvZmFsc2UpIGFyZSBjb25zaWRlcmVkIGhlcmUgYXMgd2UgZG9uJ3QgaGF2ZSB0aGUgYWN0dWFsIGJpbmRpbmcgY29udGV4dCB0byBldmFsdWF0ZSBkeW5hbWljIGJpbmRpbmdzLlxuXHQgKlxuXHQgKiBAcGFyYW0gY29udGV4dFBhdGhcblx0ICogQHBhcmFtIG1ldGFNb2RlbFxuXHQgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBlbnRpdHkgaXMgZWRpdGFibGUgb3Igbm90XG5cdCAqL1xuXHR2ZXJpZnlFZGl0QW5ub3RhdGlvbnM6IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0UGF0aDogc3RyaW5nLCBtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0Y29uc3QgZW50aXR5U2V0QW5ub3RhdGlvbnM6IE1ldGFNb2RlbEVudGl0eVNldEFubm90YXRpb24gPSBhd2FpdCBtZXRhTW9kZWwucmVxdWVzdE9iamVjdChgJHtjb250ZXh0UGF0aH1AYCk7XG5cdFx0Y29uc3QgdXBkYXRlSGlkZGVuID0gZW50aXR5U2V0QW5ub3RhdGlvbnM/LltcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5VcGRhdGVIaWRkZW5cIl07XG5cdFx0bGV0IG9wZXJhdGlvbkF2YWlsYWJsZSA9IHRydWU7XG5cblx0XHRpZiAoZW50aXR5U2V0QW5ub3RhdGlvbnM/LltcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290XCJdPy5bXCJFZGl0QWN0aW9uXCJdKSB7XG5cdFx0XHRvcGVyYXRpb25BdmFpbGFibGUgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KFxuXHRcdFx0XHRgJHtjb250ZXh0UGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdC9FZGl0QWN0aW9uQE9yZy5PRGF0YS5Db3JlLlYxLk9wZXJhdGlvbkF2YWlsYWJsZWBcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG9wZXJhdGlvbkF2YWlsYWJsZSAhPT0gZmFsc2UgJiYgdXBkYXRlSGlkZGVuICE9PSB0cnVlO1xuXHR9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBBcHBTdGFydHVwSGVscGVyO1xuIl0sIm1hcHBpbmdzIjoi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
|
|
409
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBcHBTdGFydHVwSGVscGVyIiwiX2dldEtleXNGcm9tU3RhcnR1cFBhcmFtcyIsImFLZXlOYW1lcyIsIm9TdGFydHVwUGFyYW1ldGVycyIsImJBbGxGb3VuZCIsImFLZXlzIiwibWFwIiwibmFtZSIsImxlbmd0aCIsInZhbHVlIiwidW5kZWZpbmVkIiwiX2NyZWF0ZUZpbHRlckZyb21LZXlzIiwiYkRyYWZ0TW9kZSIsIm9NZXRhTW9kZWwiLCJiRmlsdGVyQ2FzZVNlbnNpdGl2ZSIsIk1vZGVsSGVscGVyIiwiaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlIiwiYkZpbHRlck9uQWN0aXZlRW50aXR5IiwiYUZpbHRlcnMiLCJrZXkiLCJGaWx0ZXIiLCJwYXRoIiwib3BlcmF0b3IiLCJGaWx0ZXJPcGVyYXRvciIsIkVRIiwidmFsdWUxIiwiY2FzZVNlbnNpdGl2ZSIsIm9EcmFmdEZpbHRlciIsImZpbHRlcnMiLCJhbmQiLCJwdXNoIiwiX3Nhbml0aXplS2V5cyIsImtleXMiLCJlbnRpdHlUeXBlIiwiZm9yRWFjaCIsInByb3BlcnR5VHlwZSIsIiRUeXBlIiwidHJpbSIsIm1hdGNoIiwiZXhlYyIsIl9yZXF1ZXN0T2JqZWN0c0Zyb21QYXJhbWV0ZXJzIiwiYVN0YXJ0dXBQYWdlcyIsIm9Nb2RlbCIsImFsd2F5c0NoZWNrRXhpc3RlbmNlIiwiYUNvbnRleHRQcm9taXNlcyIsInBhZ2VJbmZvIiwiZ2V0TWV0YU1vZGVsIiwiZ2V0T2JqZWN0IiwiY29udGV4dFBhdGgiLCJ0ZWNobmljYWxLZXlzIiwiU2VtYW50aWNLZXlIZWxwZXIiLCJnZXRQYXRoQ29udGVudCIsImNvbnRleHQiLCJiaW5kQ29udGV4dCIsImdldEJvdW5kQ29udGV4dCIsIlByb21pc2UiLCJyZXNvbHZlIiwic2VtYW50aWNLZXlzIiwib0ZpbHRlciIsImRyYWZ0TW9kZSIsIm9MaXN0QmluZCIsImJpbmRMaXN0IiwiJHNlbGVjdCIsImpvaW4iLCJyZXF1ZXN0Q29udGV4dHMiLCJhbGwiLCJfZ2V0UmVhY2hhYmxlUGFnZUluZm9Gcm9tUm91dGUiLCJvUm91dGUiLCJvTWFuaWZlc3RSb3V0aW5nIiwic1BhdHRlcm4iLCJwYXR0ZXJuIiwicmVwbGFjZSIsImVuZHNXaXRoIiwic1RhcmdldE5hbWUiLCJBcnJheSIsImlzQXJyYXkiLCJ0YXJnZXQiLCJvVGFyZ2V0IiwidGFyZ2V0cyIsImFQYXR0ZXJuU2VnbWVudHMiLCJzcGxpdCIsInBhZ2VMZXZlbCIsIm9wdGlvbnMiLCJzZXR0aW5ncyIsImFsbG93RGVlcExpbmtpbmciLCJzQ29udGV4dFBhdGgiLCJlbnRpdHlTZXQiLCJtZXRhQ29udGV4dCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0Iiwib2JqZWN0UGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsInRhcmdldEVudGl0eVNldCIsIm9FbnRpdHlUeXBlIiwiYVNlbWFudGljS2V5TmFtZXMiLCJhU2VtYW50aWNrS2V5cyIsInNlbUtleSIsIiRQcm9wZXJ0eVBhdGgiLCJhVGVjaG5pY2FsS2V5cyIsIl9nZXRSZWFjaGFibGVQYWdlcyIsImFSb3V0ZXMiLCJyb3V0ZXMiLCJtUGFnZXNCeUxldmVsIiwib1BhZ2VJbmZvIiwiYVJlYWNoYWJsZVBhZ2VzIiwibGV2ZWwiLCJfZ2V0U3RhcnR1cFBhZ2VzRnJvbVN0YXJ0dXBQYXJhbXMiLCJyZXN1bHQiLCJjdXJyZW50IiwiZmluZFJlY3Vyc2l2ZSIsImFDdXJyZW50TGV2ZWxQYWdlcyIsImxhc3RQYWdlIiwibmV4dFBhZ2UiLCJpbmRleE9mIiwicG9wIiwic2xpY2UiLCJfZ2V0RGVlcExpbmtPYmplY3QiLCJhQ29udGV4dHMiLCJoYXNoIiwib0NvbnRleHQiLCJnZXRQYXRoIiwiZ2V0RGVlcExpbmtTdGFydHVwSGFzaCIsInJlcXVlc3RPYmplY3QiLCJzdGFydHVwUGFnZXMiLCJhbGxDb250ZXh0cyIsImNvbnRleHRzRm9yU3RhcnR1cCIsImZvdW5kQ29udGV4dHMiLCJnZXRDcmVhdGVTdGFydHVwSGFzaCIsIm9Sb3V0ZXIiLCJ0aGVuIiwib0VudGl0eVNldEFubm90YXRpb25zIiwic01ldGFQYXRoIiwiYkNyZWF0YWJsZSIsImJOZXdBY3Rpb25PcGVyYXRpb25BdmFpbGFibGUiLCJvSW5zZXJ0UmVzdHJpY3Rpb25zIiwiSW5zZXJ0YWJsZSIsImdldERlZmF1bHRDcmVhdGVIYXNoIiwic0RlZmF1bHRDcmVhdGVIYXNoIiwicHJlZmVycmVkTW9kZSIsInNIYXNoIiwiaW5jbHVkZXMiLCJzdWJzdHJpbmciLCJnZXRSb3V0ZUluZm9CeUhhc2giLCJFcnJvciIsInZlcmlmeUVkaXRBbm5vdGF0aW9ucyIsIm1ldGFNb2RlbCIsImVudGl0eVNldEFubm90YXRpb25zIiwidXBkYXRlSGlkZGVuIiwib3BlcmF0aW9uQXZhaWxhYmxlIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJBcHBTdGFydHVwSGVscGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJvcGVydHlQYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFN0YXJ0dXBQYXJhbWV0ZXJzIH0gZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBSb3V0aW5nQ29uZmlndXJhdGlvbiwgUm91dGluZ1JvdXRlIH0gZnJvbSBcInNhcC91aS9jb3JlL01hbmlmZXN0XCI7XG5pbXBvcnQgdHlwZSBSb3V0ZXIgZnJvbSBcInNhcC91aS9jb3JlL3JvdXRpbmcvUm91dGVyXCI7XG5pbXBvcnQgRmlsdGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyXCI7XG5pbXBvcnQgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IEV4cGFuZFBhdGhUeXBlLCBNZXRhTW9kZWxFbnRpdHlTZXRBbm5vdGF0aW9uIH0gZnJvbSBcInR5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuaW1wb3J0IHsgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcIi4uL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcIi4vTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBTZW1hbnRpY0tleUhlbHBlciBmcm9tIFwiLi9TZW1hbnRpY0tleUhlbHBlclwiO1xuXG50eXBlIFZhbHVlZEtleSA9IHtcblx0bmFtZTogc3RyaW5nO1xuXHR2YWx1ZTogc3RyaW5nO1xufTtcblxudHlwZSBQYWdlSW5mbyA9IHtcblx0cGF0dGVybjogc3RyaW5nO1xuXHRjb250ZXh0UGF0aDogc3RyaW5nO1xuXHRkcmFmdE1vZGU6IGJvb2xlYW47XG5cdHRlY2huaWNhbEtleXM6IFZhbHVlZEtleVtdIHwgdW5kZWZpbmVkO1xuXHRzZW1hbnRpY0tleXM6IFZhbHVlZEtleVtdIHwgdW5kZWZpbmVkO1xuXHR0YXJnZXQ6IHN0cmluZztcblx0cGFnZUxldmVsOiBudW1iZXI7XG59O1xuXG5jb25zdCBBcHBTdGFydHVwSGVscGVyID0ge1xuXHQvKipcblx0ICogUmV0cmlldmVzIGEgc2V0IG9mIGtleSB2YWx1ZXMgZnJvbSBzdGFydHVwIHBhcmFtZXRlcnMuXG5cdCAqXG5cdCAqIEBwYXJhbSBhS2V5TmFtZXMgVGhlIGFycmF5IG9mIGtleSBuYW1lc1xuXHQgKiBAcGFyYW0gb1N0YXJ0dXBQYXJhbWV0ZXJzIFRoZSBzdGFydHVwIHBhcmFtZXRlcnNcblx0ICogQHJldHVybnMgQW4gYXJyYXkgb2YgcGFpcnMgXFx7bmFtZSwgdmFsdWVcXH0gaWYgYWxsIGtleSB2YWx1ZXMgY291bGQgYmUgZm91bmQgaW4gdGhlIHN0YXJ0dXAgcGFyYW1ldGVycywgdW5kZWZpbmVkIG90aGVyd2lzZVxuXHQgKi9cblx0X2dldEtleXNGcm9tU3RhcnR1cFBhcmFtczogZnVuY3Rpb24gKGFLZXlOYW1lczogc3RyaW5nW10sIG9TdGFydHVwUGFyYW1ldGVyczogU3RhcnR1cFBhcmFtZXRlcnMgfCBudWxsKTogVmFsdWVkS2V5W10gfCB1bmRlZmluZWQge1xuXHRcdGxldCBiQWxsRm91bmQgPSB0cnVlO1xuXHRcdGNvbnN0IGFLZXlzID0gYUtleU5hbWVzLm1hcCgobmFtZSkgPT4ge1xuXHRcdFx0aWYgKG9TdGFydHVwUGFyYW1ldGVycz8uW25hbWVdICYmIG9TdGFydHVwUGFyYW1ldGVyc1tuYW1lXS5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0cmV0dXJuIHsgbmFtZSwgdmFsdWU6IG9TdGFydHVwUGFyYW1ldGVyc1tuYW1lXVswXSBhcyBzdHJpbmcgfTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIEEgdW5pcXVlIGtleSB2YWx1ZSBjb3VsZG4ndCBiZSBmb3VuZCBpbiB0aGUgc3RhcnR1cCBwYXJhbWV0ZXJzXG5cdFx0XHRcdGJBbGxGb3VuZCA9IGZhbHNlO1xuXHRcdFx0XHRyZXR1cm4geyBuYW1lLCB2YWx1ZTogXCJcIiB9O1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIGJBbGxGb3VuZCA/IGFLZXlzIDogdW5kZWZpbmVkO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgZmlsdGVyIGZyb20gYSBsaXN0IG9mIGtleSB2YWx1ZXMuXG5cdCAqXG5cdCAqIEBwYXJhbSBhS2V5cyBBcnJheSBvZiBzZW1hbnRpYyBrZXlzIG9yIHRlY2huaWNhbCBrZXlzICh3aXRoIHZhbHVlcylcblx0ICogQHBhcmFtIGJEcmFmdE1vZGUgVHJ1ZSBpZiB0aGUgZW50aXR5IHN1cHBvcnRzIGRyYWZ0IG1vZGVcblx0ICogQHBhcmFtIG9NZXRhTW9kZWwgVGhlIG1ldGFtb2RlbFxuXHQgKiBAcmV0dXJucyBUaGUgZmlsdGVyXG5cdCAqL1xuXHRfY3JlYXRlRmlsdGVyRnJvbUtleXM6IGZ1bmN0aW9uIChhS2V5czogVmFsdWVkS2V5W10sIGJEcmFmdE1vZGU6IEJvb2xlYW4sIG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsKTogRmlsdGVyIHtcblx0XHRjb25zdCBiRmlsdGVyQ2FzZVNlbnNpdGl2ZSA9IE1vZGVsSGVscGVyLmlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZShvTWV0YU1vZGVsKTtcblxuXHRcdGxldCBiRmlsdGVyT25BY3RpdmVFbnRpdHkgPSBmYWxzZTtcblx0XHRjb25zdCBhRmlsdGVycyA9IGFLZXlzLm1hcCgoa2V5KSA9PiB7XG5cdFx0XHRpZiAoa2V5Lm5hbWUgPT09IFwiSXNBY3RpdmVFbnRpdHlcIikge1xuXHRcdFx0XHRiRmlsdGVyT25BY3RpdmVFbnRpdHkgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRwYXRoOiBrZXkubmFtZSxcblx0XHRcdFx0b3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLkVRLFxuXHRcdFx0XHR2YWx1ZTE6IGtleS52YWx1ZSxcblx0XHRcdFx0Y2FzZVNlbnNpdGl2ZTogYkZpbHRlckNhc2VTZW5zaXRpdmVcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdGlmIChiRHJhZnRNb2RlICYmICFiRmlsdGVyT25BY3RpdmVFbnRpdHkpIHtcblx0XHRcdGNvbnN0IG9EcmFmdEZpbHRlciA9IG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRmaWx0ZXJzOiBbbmV3IEZpbHRlcihcIklzQWN0aXZlRW50aXR5XCIsIFwiRVFcIiwgZmFsc2UpLCBuZXcgRmlsdGVyKFwiU2libGluZ0VudGl0eS9Jc0FjdGl2ZUVudGl0eVwiLCBcIkVRXCIsIG51bGwpXSxcblx0XHRcdFx0YW5kOiBmYWxzZVxuXHRcdFx0fSk7XG5cdFx0XHRhRmlsdGVycy5wdXNoKG9EcmFmdEZpbHRlcik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyBGaWx0ZXIoYUZpbHRlcnMsIHRydWUpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNYWtlcyBzdXJlIGtleSB2YWx1ZXMgaGF2ZSB0aGUgY29ycmVjdCBmb3JtYXQuXG5cdCAqIFRoaXMgaXMgdG8gaGFuZGxlIHNwZWNpYWwgY2FzZXMsIGZvciBleGFtcGxlLCB3aGVyZSBCb29sZWFuIHZhbHVlcyBhcmUgJ1gnIG9yICcnLCBvciBndWlkIHZhbHVlcyBoYXZlIHRoZSBmb2xsb3dpbmcgZm9ybWF0OiBndWlkJzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCcuXCIuXG5cdCAqIEBwYXJhbSBrZXlzXG5cdCAqIEBwYXJhbSBlbnRpdHlUeXBlXG5cdCAqL1xuXHRfc2FuaXRpemVLZXlzOiBmdW5jdGlvbiAoa2V5czogVmFsdWVkS2V5W10sIGVudGl0eVR5cGU6IFJlY29yZDxzdHJpbmcsIHsgJFR5cGU6IHN0cmluZyB9Pik6IHZvaWQge1xuXHRcdGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVR5cGUgPSBlbnRpdHlUeXBlW2tleS5uYW1lXS4kVHlwZTtcblx0XHRcdHN3aXRjaCAocHJvcGVydHlUeXBlKSB7XG5cdFx0XHRcdGNhc2UgXCJFZG0uQm9vbGVhblwiOlxuXHRcdFx0XHRcdGlmIChrZXkudmFsdWUgIT09IFwidHJ1ZVwiICYmIGtleS52YWx1ZSAhPT0gXCJmYWxzZVwiKSB7XG5cdFx0XHRcdFx0XHQvLyBJZiB0aGUgdmFsdWUgaXMgbmVpdGhlciBcInRydWVcIiBub3IgXCJmYWxzZVwiLCBpdCdzIGNvbnNpZGVyZWQgYXMgZmFsc2UgaWYgaXQgY29udGFpbnMgb25seSB3aGl0ZXNwYWNlcyAoZS5nLiB0byBoYW5kbGUgJ1gnLycnIGZvciB0cnVlL2ZhbHNlIHZhbHVlcylcblx0XHRcdFx0XHRcdGtleS52YWx1ZSA9IGtleS52YWx1ZS50cmltKCkubGVuZ3RoID8gXCJ0cnVlXCIgOiBcImZhbHNlXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJFZG0uR3VpZFwiOiB7XG5cdFx0XHRcdFx0Y29uc3QgbWF0Y2ggPSAvWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17MTJ9Ly5leGVjKGtleS52YWx1ZSk7XG5cdFx0XHRcdFx0a2V5LnZhbHVlID0gbWF0Y2ggPyBtYXRjaFswXSA6IGtleS52YWx1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdC8vIERvIG5vdGhpbmdcblx0XHRcdH1cblx0XHR9KTtcblx0fSxcblxuXHQvKipcblx0ICogTG9hZHMgYWxsIGNvbnRleHRzIGZvciBhIGxpc3Qgb2YgcGFnZSBpbmZvcy5cblx0ICpcblx0ICogQHBhcmFtIGFTdGFydHVwUGFnZXMgVGhlIGxpc3Qgb2YgcGFnZSBpbmZvc1xuXHQgKiBAcGFyYW0gb01vZGVsIFRoZSBtb2RlbCB1c2VkIHRvIGxvYWQgdGhlIGNvbnRleHRzXG5cdCAqIEBwYXJhbSBhbHdheXNDaGVja0V4aXN0ZW5jZSBJZiB0cnVlLCBhbHdheXMgY2hlY2sgaWYgdGhlIG9iamVjdCBleGlzdHMsIGV2ZW4gaWYgc2VtYW50aWMga2V5cyBhcmUgcHJlc2VudFxuXHQgKiBAcmV0dXJucyBBIFByb21pc2UgZm9yIGFsbCBjb250ZXh0c1xuXHQgKi9cblx0X3JlcXVlc3RPYmplY3RzRnJvbVBhcmFtZXRlcnM6IGFzeW5jIGZ1bmN0aW9uIChcblx0XHRhU3RhcnR1cFBhZ2VzOiBQYWdlSW5mb1tdLFxuXHRcdG9Nb2RlbDogT0RhdGFNb2RlbCxcblx0XHRhbHdheXNDaGVja0V4aXN0ZW5jZTogYm9vbGVhblxuXHQpOiBQcm9taXNlPENvbnRleHRbXVtdPiB7XG5cdFx0Ly8gTG9hZCB0aGUgcmVzcGVjdGl2ZSBvYmplY3RzIGZvciBhbGwgb2JqZWN0IHBhZ2VzIGZvdW5kIGluIGFFeHRlcm5hbGx5TmF2aWdhYmxlUGFnZXNcblx0XHRjb25zdCBhQ29udGV4dFByb21pc2VzID0gYVN0YXJ0dXBQYWdlcy5tYXAoYXN5bmMgKHBhZ2VJbmZvKSA9PiB7XG5cdFx0XHRjb25zdCBlbnRpdHlUeXBlID0gb01vZGVsLmdldE1ldGFNb2RlbCgpLmdldE9iamVjdChgJHtwYWdlSW5mby5jb250ZXh0UGF0aH0vYCk7XG5cdFx0XHRpZiAocGFnZUluZm8udGVjaG5pY2FsS2V5cyAmJiAhYWx3YXlzQ2hlY2tFeGlzdGVuY2UpIHtcblx0XHRcdFx0dGhpcy5fc2FuaXRpemVLZXlzKHBhZ2VJbmZvLnRlY2huaWNhbEtleXMsIGVudGl0eVR5cGUpO1xuXHRcdFx0XHQvLyBDcmVhdGUgYSBjb250ZXh0IHdpdGggdGhlIHByb3BlciBwYXRoXG5cdFx0XHRcdGNvbnN0IHBhdGggPSBgJHtwYWdlSW5mby5jb250ZXh0UGF0aH0oJHtTZW1hbnRpY0tleUhlbHBlci5nZXRQYXRoQ29udGVudChwYWdlSW5mby50ZWNobmljYWxLZXlzLCBlbnRpdHlUeXBlKX0pYDtcblx0XHRcdFx0Y29uc3QgY29udGV4dCA9IG9Nb2RlbC5iaW5kQ29udGV4dChwYXRoKS5nZXRCb3VuZENvbnRleHQoKTtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShbY29udGV4dF0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgYUtleXMgPSBwYWdlSW5mby5zZW1hbnRpY0tleXMgfHwgcGFnZUluZm8udGVjaG5pY2FsS2V5cyB8fCBbXTtcblx0XHRcdFx0dGhpcy5fc2FuaXRpemVLZXlzKGFLZXlzLCBlbnRpdHlUeXBlKTtcblx0XHRcdFx0Y29uc3Qgb0ZpbHRlciA9IHRoaXMuX2NyZWF0ZUZpbHRlckZyb21LZXlzKGFLZXlzLCBwYWdlSW5mby5kcmFmdE1vZGUsIG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSk7XG5cblx0XHRcdFx0Ly8gb25seSByZXF1ZXN0IGEgbWluaW11bSBvZiBmaWVsZHMgdG8gYm9vc3QgYmFja2VuZCBwZXJmb3JtYW5jZSBzaW5jZSB0aGlzIGlzIG9ubHkgdXNlZCB0byBjaGVjayBpZiBhbiBvYmplY3QgZXhpc3RzXG5cdFx0XHRcdGNvbnN0IG9MaXN0QmluZCA9IG9Nb2RlbC5iaW5kTGlzdChwYWdlSW5mby5jb250ZXh0UGF0aCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIG9GaWx0ZXIsIHtcblx0XHRcdFx0XHQkc2VsZWN0OiBhS2V5c1xuXHRcdFx0XHRcdFx0Lm1hcCgoa2V5KSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBrZXkubmFtZTtcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHQuam9pbihcIixcIilcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybiBvTGlzdEJpbmQucmVxdWVzdENvbnRleHRzKDAsIDIpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKGFDb250ZXh0UHJvbWlzZXMpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgUGFnZUluZm8gZnJvbSBhIHJvdXRlIGlmIGl0J3MgcmVhY2hhYmxlIGZyb20gdGhlIHN0YXJ0dXAgcGFyYW1ldGVycy5cblx0ICpcblx0ICogQHBhcmFtIG9Sb3V0ZSBUaGUgcm91dGVcblx0ICogQHBhcmFtIG9NYW5pZmVzdFJvdXRpbmcgVGhlIGFwcCBtYW5pZmVzdCByb3V0aW5nIHNlY3Rpb25cblx0ICogQHBhcmFtIG9TdGFydHVwUGFyYW1ldGVycyBUaGUgc3RhcnR1cCBwYXJhbWV0ZXJzXG5cdCAqIEBwYXJhbSBvTWV0YU1vZGVsIFRoZSBhcHAgbWV0YW1vZGVsXG5cdCAqIEByZXR1cm5zIEEgcGFnZSBpbmZvIGlmIHRoZSBwYWdlIGlzIHJlYWNoYWJsZSwgdW5kZWZpbmVkIG90aGVyd2lzZVxuXHQgKi9cblx0X2dldFJlYWNoYWJsZVBhZ2VJbmZvRnJvbVJvdXRlOiBmdW5jdGlvbiAoXG5cdFx0b1JvdXRlOiBSb3V0aW5nUm91dGUsXG5cdFx0b01hbmlmZXN0Um91dGluZzogUm91dGluZ0NvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQsXG5cdFx0b1N0YXJ0dXBQYXJhbWV0ZXJzOiBTdGFydHVwUGFyYW1ldGVycyB8IG51bGwsXG5cdFx0b01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWxcblx0KTogUGFnZUluZm8gfCB1bmRlZmluZWQge1xuXHRcdC8vIFJlbW92ZSB0cmFpbGluZyAnOj9xdWVyeTonIGFuZCAnLydcblx0XHRsZXQgc1BhdHRlcm46IHN0cmluZyA9IG9Sb3V0ZS5wYXR0ZXJuIS5yZXBsYWNlKFwiOj9xdWVyeTpcIiwgXCJcIik7XG5cdFx0c1BhdHRlcm4gPSBzUGF0dGVybi5yZXBsYWNlKC9cXC8kLywgXCJcIik7XG5cblx0XHRpZiAoIXNQYXR0ZXJuIHx8ICFzUGF0dGVybi5lbmRzV2l0aChcIilcIikpIHtcblx0XHRcdC8vIElnbm9yZSBsZXZlbC0wIHJvdXRlcyAoTGlzdFJlcG9ydCkgb3Igcm91dGVzIGNvcnJlc3BvbmRpbmcgdG8gYSAxLTEgcmVsYXRpb24gKG5vIGtleXMgaW4gdGhlIFVSTCBpbiB0aGlzIGNhc2UpXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdHNQYXR0ZXJuID0gc1BhdHRlcm4ucmVwbGFjZSgvXFwoXFx7W159XSpcXH1cXCkvZywgXCIoIylcIik7IC8vIFJlcGxhY2Uga2V5cyB3aXRoICNcblxuXHRcdC8vIEdldCB0aGUgcmlnaHRtb3N0IHRhcmdldCBmb3IgdGhpcyByb3V0ZVxuXHRcdGNvbnN0IHNUYXJnZXROYW1lOiBzdHJpbmcgPSBBcnJheS5pc0FycmF5KG9Sb3V0ZS50YXJnZXQpID8gb1JvdXRlLnRhcmdldFtvUm91dGUudGFyZ2V0Lmxlbmd0aCAtIDFdIDogb1JvdXRlLnRhcmdldDtcblx0XHRjb25zdCBvVGFyZ2V0ID0gb01hbmlmZXN0Um91dGluZz8udGFyZ2V0cz8uW3NUYXJnZXROYW1lXTtcblxuXHRcdGNvbnN0IGFQYXR0ZXJuU2VnbWVudHMgPSBzUGF0dGVybi5zcGxpdChcIi9cIik7XG5cdFx0Y29uc3QgcGFnZUxldmVsID0gYVBhdHRlcm5TZWdtZW50cy5sZW5ndGggLSAxO1xuXG5cdFx0aWYgKHBhZ2VMZXZlbCAhPT0gMCAmJiBvVGFyZ2V0Py5vcHRpb25zPy5zZXR0aW5ncz8uYWxsb3dEZWVwTGlua2luZyAhPT0gdHJ1ZSkge1xuXHRcdFx0Ly8gVGhlIGZpcnN0IGxldmVsIG9mIG9iamVjdCBwYWdlIGFsbG93cyBkZWVwIGxpbmtpbmcgYnkgZGVmYXVsdC5cblx0XHRcdC8vIE90aGVyd2lzZSwgdGhlIHRhcmdldCBtdXN0IGFsbG93IGRlZXAgbGlua2luZyBleHBsaWNpdGVseSBpbiB0aGUgbWFuaWZlc3Rcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0bGV0IHNDb250ZXh0UGF0aCA9IFwiXCI7XG5cdFx0aWYgKG9UYXJnZXQ/Lm9wdGlvbnM/LnNldHRpbmdzPy5lbnRpdHlTZXQpIHtcblx0XHRcdHNDb250ZXh0UGF0aCA9IGAvJHtvVGFyZ2V0Lm9wdGlvbnMuc2V0dGluZ3MuZW50aXR5U2V0fWA7XG5cdFx0fSBlbHNlIGlmIChvVGFyZ2V0Py5vcHRpb25zPy5zZXR0aW5ncz8uY29udGV4dFBhdGgpIHtcblx0XHRcdGNvbnN0IG1ldGFDb250ZXh0ID0gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChvVGFyZ2V0Lm9wdGlvbnMuc2V0dGluZ3MuY29udGV4dFBhdGgpITtcblx0XHRcdGNvbnN0IG9iamVjdFBhdGggPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YUNvbnRleHQpO1xuXHRcdFx0aWYgKG9iamVjdFBhdGgudGFyZ2V0RW50aXR5U2V0KSB7XG5cdFx0XHRcdHNDb250ZXh0UGF0aCA9IGAvJHtvYmplY3RQYXRoLnRhcmdldEVudGl0eVNldC5uYW1lfWA7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCFzQ29udGV4dFBhdGgpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGNvbnN0IG9FbnRpdHlUeXBlID0gc0NvbnRleHRQYXRoICYmIG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAvJEVudGl0eUNvbnRhaW5lciR7c0NvbnRleHRQYXRofS9gKTtcblxuXHRcdGlmICghb0VudGl0eVR5cGUpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gR2V0IHRoZSBzZW1hbnRpYyBrZXkgdmFsdWVzIGZvciB0aGUgZW50aXR5XG5cdFx0Y29uc3QgYVNlbWFudGljS2V5TmFtZXM6IEV4cGFuZFBhdGhUeXBlPFByb3BlcnR5UGF0aD5bXSA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KFxuXHRcdFx0YC8kRW50aXR5Q29udGFpbmVyJHtzQ29udGV4dFBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNLZXlgXG5cdFx0KTtcblxuXHRcdGNvbnN0IGFTZW1hbnRpY2tLZXlzID0gYVNlbWFudGljS2V5TmFtZXNcblx0XHRcdD8gdGhpcy5fZ2V0S2V5c0Zyb21TdGFydHVwUGFyYW1zKFxuXHRcdFx0XHRcdGFTZW1hbnRpY0tleU5hbWVzLm1hcCgoc2VtS2V5KSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc2VtS2V5LiRQcm9wZXJ0eVBhdGg7XG5cdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0b1N0YXJ0dXBQYXJhbWV0ZXJzXG5cdFx0XHQgIClcblx0XHRcdDogdW5kZWZpbmVkO1xuXG5cdFx0Ly8gR2V0IHRoZSB0ZWNobmljYWwga2V5cyBvbmx5IGlmIHdlIGNvdWxkbid0IGZpbmQgdGhlIHNlbWFudGljIGtleSB2YWx1ZXMsIGFuZCBvbiBmaXJzdCBsZXZlbCBPUFxuXHRcdGNvbnN0IGFUZWNobmljYWxLZXlzID1cblx0XHRcdCFhU2VtYW50aWNrS2V5cyAmJiBwYWdlTGV2ZWwgPT09IDAgPyB0aGlzLl9nZXRLZXlzRnJvbVN0YXJ0dXBQYXJhbXMob0VudGl0eVR5cGVbXCIkS2V5XCJdLCBvU3RhcnR1cFBhcmFtZXRlcnMpIDogdW5kZWZpbmVkO1xuXG5cdFx0aWYgKGFTZW1hbnRpY2tLZXlzID09PSB1bmRlZmluZWQgJiYgYVRlY2huaWNhbEtleXMgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gV2UgY291bGRuJ3QgZmluZCB0aGUgc2VtYW50aWMvdGVjaG5pY2FsIGtleXMgaW4gdGhlIHN0YXJ0dXAgcGFyYW1ldGVyc1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBUaGUgc3RhcnR1cCBwYXJhbWV0ZXJzIGNvbnRhaW4gdmFsdWVzIGZvciBhbGwgc2VtYW50aWMga2V5cyAob3IgdGVjaG5pY2FsIGtleXMpIC0tPiB3ZSBjYW4gc3RvcmUgdGhlIHBhZ2UgaW5mbyBpbiB0aGUgY29ycmVzcG9uZGluZyBsZXZlbFxuXHRcdGNvbnN0IGRyYWZ0TW9kZSA9XG5cdFx0XHRvTWV0YU1vZGVsLmdldE9iamVjdChgLyRFbnRpdHlDb250YWluZXIke3NDb250ZXh0UGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdGApIHx8XG5cdFx0XHRvTWV0YU1vZGVsLmdldE9iamVjdChgLyRFbnRpdHlDb250YWluZXIke3NDb250ZXh0UGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Tm9kZWApXG5cdFx0XHRcdD8gdHJ1ZVxuXHRcdFx0XHQ6IGZhbHNlO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHBhdHRlcm46IHNQYXR0ZXJuLFxuXHRcdFx0Y29udGV4dFBhdGg6IHNDb250ZXh0UGF0aCxcblx0XHRcdGRyYWZ0TW9kZSxcblx0XHRcdHRlY2huaWNhbEtleXM6IGFUZWNobmljYWxLZXlzLFxuXHRcdFx0c2VtYW50aWNLZXlzOiBhU2VtYW50aWNrS2V5cyxcblx0XHRcdHRhcmdldDogc1RhcmdldE5hbWUsXG5cdFx0XHRwYWdlTGV2ZWxcblx0XHR9O1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIGFsbCBwYWdlcyB0aGF0IGFsbG93IGRlZXBsaW5rIGFuZCB0aGF0IGNhbiBiZSByZWFjaGVkIHVzaW5nIHRoZSBzdGFydHVwIHBhcmFtZXRlcnMuXG5cdCAqXG5cdCAqIEBwYXJhbSBvTWFuaWZlc3RSb3V0aW5nIFRoZSByb3V0aW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIGFwcCBtYW5pZmVzdFxuXHQgKiBAcGFyYW0gb1N0YXJ0dXBQYXJhbWV0ZXJzIFRoZSBzdGFydHVwIHBhcmFtZXRlcnNcblx0ICogQHBhcmFtIG9NZXRhTW9kZWwgVGhlIG1ldGFtb2RlbFxuXHQgKiBAcmV0dXJucyBUaGUgcmVhY2hhYmxlIHBhZ2VzXG5cdCAqL1xuXHRfZ2V0UmVhY2hhYmxlUGFnZXM6IGZ1bmN0aW9uIChcblx0XHRvTWFuaWZlc3RSb3V0aW5nOiBSb3V0aW5nQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCxcblx0XHRvU3RhcnR1cFBhcmFtZXRlcnM6IFN0YXJ0dXBQYXJhbWV0ZXJzIHwgbnVsbCxcblx0XHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbFxuXHQpOiBQYWdlSW5mb1tdW10ge1xuXHRcdGNvbnN0IGFSb3V0ZXM6IFJvdXRpbmdSb3V0ZVtdID0gb01hbmlmZXN0Um91dGluZz8ucm91dGVzID8/IFtdO1xuXHRcdGNvbnN0IG1QYWdlc0J5TGV2ZWw6IFJlY29yZDxudW1iZXIsIFBhZ2VJbmZvW10+ID0ge307XG5cblx0XHRhUm91dGVzLmZvckVhY2goKG9Sb3V0ZSkgPT4ge1xuXHRcdFx0Y29uc3Qgb1BhZ2VJbmZvID0gdGhpcy5fZ2V0UmVhY2hhYmxlUGFnZUluZm9Gcm9tUm91dGUob1JvdXRlLCBvTWFuaWZlc3RSb3V0aW5nLCBvU3RhcnR1cFBhcmFtZXRlcnMsIG9NZXRhTW9kZWwpO1xuXG5cdFx0XHRpZiAob1BhZ2VJbmZvKSB7XG5cdFx0XHRcdGlmICghbVBhZ2VzQnlMZXZlbFtvUGFnZUluZm8ucGFnZUxldmVsXSkge1xuXHRcdFx0XHRcdG1QYWdlc0J5TGV2ZWxbb1BhZ2VJbmZvLnBhZ2VMZXZlbF0gPSBbXTtcblx0XHRcdFx0fVxuXHRcdFx0XHRtUGFnZXNCeUxldmVsW29QYWdlSW5mby5wYWdlTGV2ZWxdLnB1c2gob1BhZ2VJbmZvKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdC8vIEEgcGFnZSBpcyByZWFjaGFibGUgb25seSBpZiBhbGwgaXRzIHBhcmVudHMgYXJlIGFsc28gcmVhY2hhYmxlXG5cdFx0Ly8gU28gaWYgd2UgY291bGRuJ3QgZmluZCBhbnkgcGFnZXMgZm9yIGEgZ2l2ZW4gbGV2ZWwsIGFsbCBwYWdlcyB3aXRoIGEgaGlnaGVyIGxldmVsIHdvbid0IGJlIHJlYWNoYWJsZSBhbnl3YXlcblx0XHRjb25zdCBhUmVhY2hhYmxlUGFnZXM6IFBhZ2VJbmZvW11bXSA9IFtdO1xuXHRcdGxldCBsZXZlbCA9IDA7XG5cdFx0d2hpbGUgKG1QYWdlc0J5TGV2ZWxbbGV2ZWxdKSB7XG5cdFx0XHRhUmVhY2hhYmxlUGFnZXMucHVzaChtUGFnZXNCeUxldmVsW2xldmVsXSk7XG5cdFx0XHRsZXZlbCsrO1xuXHRcdH1cblxuXHRcdHJldHVybiBhUmVhY2hhYmxlUGFnZXM7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldCB0aGUgbGlzdCBvZiBzdGFydHVwIHBhZ2VzLlxuXHQgKlxuXHQgKiBAcGFyYW0gb01hbmlmZXN0Um91dGluZyBUaGUgcm91dGluZyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBhcHAgbWFuaWZlc3Rcblx0ICogQHBhcmFtIG9TdGFydHVwUGFyYW1ldGVycyBUaGUgc3RhcnR1cCBwYXJhbWV0ZXJzXG5cdCAqIEBwYXJhbSBvTWV0YU1vZGVsIFRoZSBtZXRhbW9kZWxcblx0ICogQHJldHVybnMgQW4gYXJyYXkgb2Ygc3RhcnR1cCBwYWdlIGluZm9zXG5cdCAqL1xuXHRfZ2V0U3RhcnR1cFBhZ2VzRnJvbVN0YXJ0dXBQYXJhbXM6IGZ1bmN0aW9uIChcblx0XHRvTWFuaWZlc3RSb3V0aW5nOiBSb3V0aW5nQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCxcblx0XHRvU3RhcnR1cFBhcmFtZXRlcnM6IFN0YXJ0dXBQYXJhbWV0ZXJzIHwgbnVsbCxcblx0XHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbFxuXHQpOiBQYWdlSW5mb1tdIHtcblx0XHQvLyBGaW5kIGFsbCBwYWdlcyB0aGF0IGNhbiBiZSByZWFjaGVkIHdpdGggdGhlIHN0YXJ0dXAgcGFyYW1ldGVyc1xuXHRcdGNvbnN0IGFSZWFjaGFibGVQYWdlcyA9IHRoaXMuX2dldFJlYWNoYWJsZVBhZ2VzKG9NYW5pZmVzdFJvdXRpbmcsIG9TdGFydHVwUGFyYW1ldGVycywgb01ldGFNb2RlbCk7XG5cblx0XHRpZiAoYVJlYWNoYWJsZVBhZ2VzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblxuXHRcdC8vIEZpbmQgdGhlIGxvbmdlc3Qgc2VxdWVuY2Ugb2YgcGFnZXMgdGhhdCBjYW4gYmUgcmVhY2hlZCAocmVjdXJzaXZlbHkpXG5cdFx0bGV0IHJlc3VsdDogUGFnZUluZm9bXSA9IFtdO1xuXHRcdGNvbnN0IGN1cnJlbnQ6IFBhZ2VJbmZvW10gPSBbXTtcblxuXHRcdGZ1bmN0aW9uIGZpbmRSZWN1cnNpdmUobGV2ZWw6IG51bWJlcik6IHZvaWQge1xuXHRcdFx0Y29uc3QgYUN1cnJlbnRMZXZlbFBhZ2VzID0gYVJlYWNoYWJsZVBhZ2VzW2xldmVsXTtcblx0XHRcdGNvbnN0IGxhc3RQYWdlID0gY3VycmVudC5sZW5ndGggPyBjdXJyZW50W2N1cnJlbnQubGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQ7XG5cblx0XHRcdGlmIChhQ3VycmVudExldmVsUGFnZXMpIHtcblx0XHRcdFx0YUN1cnJlbnRMZXZlbFBhZ2VzLmZvckVhY2goZnVuY3Rpb24gKG5leHRQYWdlKSB7XG5cdFx0XHRcdFx0aWYgKCFsYXN0UGFnZSB8fCBuZXh0UGFnZS5wYXR0ZXJuLmluZGV4T2YobGFzdFBhZ2UucGF0dGVybikgPT09IDApIHtcblx0XHRcdFx0XHRcdC8vIFdlIG9ubHkgY29uc2lkZXIgcGFnZXMgdGhhdCBjYW4gYmUgcmVhY2hlZCBmcm9tIHRoZSBwYWdlIGF0IHRoZSBwcmV2aW91cyBsZXZlbCxcblx0XHRcdFx0XHRcdC8vIC0tPiB0aGVpciBwYXR0ZXJuIG11c3QgYmUgdGhlIHBhdHRlcm4gb2YgdGhlIHByZXZpb3VzIHBhZ2Ugd2l0aCBhbm90aGVyIHNlZ21lbnQgYXBwZW5kZWRcblx0XHRcdFx0XHRcdGN1cnJlbnQucHVzaChuZXh0UGFnZSk7XG5cdFx0XHRcdFx0XHRmaW5kUmVjdXJzaXZlKGxldmVsICsgMSk7XG5cdFx0XHRcdFx0XHRjdXJyZW50LnBvcCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoY3VycmVudC5sZW5ndGggPiByZXN1bHQubGVuZ3RoKSB7XG5cdFx0XHRcdHJlc3VsdCA9IGN1cnJlbnQuc2xpY2UoKTsgLy8gV2UgaGF2ZSBmb3VuZCBhIHNlcXVlbmNlIGxvbmdlciB0aGFuIG91ciBwcmV2aW91cyBiZXN0IC0tPiBzdG9yZSBpdCBhcyB0aGUgbmV3IGxvbmdlc3Rcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmaW5kUmVjdXJzaXZlKDApO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSxcblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgc3RhcnR1cCBvYmplY3QgZnJvbSB0aGUgbGlzdCBvZiBwYWdlcyBhbmQgY29udGV4dHMuXG5cdCAqXG5cdCAqIEBwYXJhbSBhU3RhcnR1cFBhZ2VzIFRoZSBwYWdlc1xuXHQgKiBAcGFyYW0gYUNvbnRleHRzIFRoZSBjb250ZXh0c1xuXHQgKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyBlaXRoZXIgYSBoYXNoIG9yIGEgY29udGV4dCB0byBuYXZpZ2F0ZSB0bywgb3IgYW4gZW1wdHkgb2JqZWN0IGlmIG5vIGRlZXAgbGluayB3YXMgZm91bmRcblx0ICovXG5cdF9nZXREZWVwTGlua09iamVjdDogZnVuY3Rpb24gKGFTdGFydHVwUGFnZXM6IFBhZ2VJbmZvW10sIGFDb250ZXh0czogQ29udGV4dFtdKTogeyBoYXNoPzogc3RyaW5nOyBjb250ZXh0PzogQ29udGV4dCB9IHtcblx0XHRpZiAoYUNvbnRleHRzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0cmV0dXJuIHsgY29udGV4dDogYUNvbnRleHRzWzBdIH07XG5cdFx0fSBlbHNlIGlmIChhQ29udGV4dHMubGVuZ3RoID4gMSkge1xuXHRcdFx0Ly8gTmF2aWdhdGlvbiB0byBhIGRlZXBlciBsZXZlbCAtLT4gdXNlIHRoZSBwYXR0ZXJuIG9mIHRoZSBkZWVwZXN0IG9iamVjdCBwYWdlXG5cdFx0XHQvLyBhbmQgcmVwbGFjZSB0aGUgcGFyYW1ldGVycyBieSB0aGUgSUQgZnJvbSB0aGUgY29udGV4dHNcblx0XHRcdGxldCBoYXNoID0gYVN0YXJ0dXBQYWdlc1thU3RhcnR1cFBhZ2VzLmxlbmd0aCAtIDFdLnBhdHRlcm47XG5cdFx0XHRhQ29udGV4dHMuZm9yRWFjaChmdW5jdGlvbiAob0NvbnRleHQpIHtcblx0XHRcdFx0aGFzaCA9IGhhc2gucmVwbGFjZShcIigjKVwiLCBgKCR7b0NvbnRleHQuZ2V0UGF0aCgpLnNwbGl0KFwiKFwiKVsxXX1gKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4geyBoYXNoIH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB7fTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIENhbGN1bGF0ZXMgc3RhcnR1cCBwYXJhbWV0ZXJzIGZvciBhIGRlZXBsaW5rIGNhc2UsIGZyb20gc3RhcnR1cCBwYXJhbWV0ZXJzIGFuZCByb3V0aW5nIGluZm9pcm1hdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIG9NYW5pZmVzdFJvdXRpbmcgVGhlIHJvdXRpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgYXBwIG1hbmlmZXN0XG5cdCAqIEBwYXJhbSBvU3RhcnR1cFBhcmFtZXRlcnMgVGhlIHN0YXJ0dXAgcGFyYW1ldGVyc1xuXHQgKiBAcGFyYW0gb01vZGVsIFRoZSBPRGF0YSBtb2RlbFxuXHQgKiBAcGFyYW0gYWx3YXlzQ2hlY2tFeGlzdGVuY2Vcblx0ICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZWl0aGVyIGEgaGFzaCBvciBhIGNvbnRleHQgdG8gbmF2aWdhdGUgdG8sIG9yIGFuIGVtcHR5IG9iamVjdCBpZiBubyBkZWVwIGxpbmsgd2FzIGZvdW5kXG5cdCAqL1xuXHRnZXREZWVwTGlua1N0YXJ0dXBIYXNoOiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0b01hbmlmZXN0Um91dGluZzogUm91dGluZ0NvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQsXG5cdFx0b1N0YXJ0dXBQYXJhbWV0ZXJzOiBTdGFydHVwUGFyYW1ldGVycyB8IG51bGwsXG5cdFx0b01vZGVsOiBPRGF0YU1vZGVsLFxuXHRcdGFsd2F5c0NoZWNrRXhpc3RlbmNlOiBib29sZWFuXG5cdCk6IFByb21pc2U8eyBoYXNoPzogc3RyaW5nOyBjb250ZXh0PzogQ29udGV4dCB9PiB7XG5cdFx0YXdhaXQgb01vZGVsLmdldE1ldGFNb2RlbCgpLnJlcXVlc3RPYmplY3QoXCIvJEVudGl0eUNvbnRhaW5lci9cIik7XG5cblx0XHQvLyBDaGVjayBpZiBzZW1hbnRpYyBrZXlzIGFyZSBwcmVzZW50IGluIHVybCBwYXJhbWV0ZXJzIGZvciBldmVyeSBvYmplY3QgcGFnZSBhdCBlYWNoIGxldmVsXG5cdFx0Y29uc3Qgc3RhcnR1cFBhZ2VzID0gdGhpcy5fZ2V0U3RhcnR1cFBhZ2VzRnJvbVN0YXJ0dXBQYXJhbXMob01hbmlmZXN0Um91dGluZywgb1N0YXJ0dXBQYXJhbWV0ZXJzLCBvTW9kZWwuZ2V0TWV0YU1vZGVsKCkpO1xuXG5cdFx0Ly8gTG9hZCB0aGUgY29udGV4dHNcblx0XHRjb25zdCBhbGxDb250ZXh0cyA9IGF3YWl0IHRoaXMuX3JlcXVlc3RPYmplY3RzRnJvbVBhcmFtZXRlcnMoc3RhcnR1cFBhZ2VzLCBvTW9kZWwsIGFsd2F5c0NoZWNrRXhpc3RlbmNlKTtcblx0XHRpZiAoYWxsQ29udGV4dHMubGVuZ3RoKSB7XG5cdFx0XHQvLyBNYWtlIHN1cmUgd2Ugb25seSBnZXQgMSBjb250ZXh0IHBlciBwcm9taXNlLCBhbmQgZmxhdHRlbiB0aGUgYXJyYXlcblx0XHRcdGNvbnN0IGNvbnRleHRzRm9yU3RhcnR1cDogQ29udGV4dFtdID0gW107XG5cdFx0XHRhbGxDb250ZXh0cy5mb3JFYWNoKGZ1bmN0aW9uIChmb3VuZENvbnRleHRzKSB7XG5cdFx0XHRcdGlmIChmb3VuZENvbnRleHRzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHRcdGNvbnRleHRzRm9yU3RhcnR1cC5wdXNoKGZvdW5kQ29udGV4dHNbMF0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIGNvbnRleHRzRm9yU3RhcnR1cC5sZW5ndGggPT09IGFsbENvbnRleHRzLmxlbmd0aCA/IHRoaXMuX2dldERlZXBMaW5rT2JqZWN0KHN0YXJ0dXBQYWdlcywgY29udGV4dHNGb3JTdGFydHVwKSA6IHt9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4ge307XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBDYWxjdWxhdGVzIHRoZSBuZXcgaGFzaCBiYXNlZCBvbiB0aGUgc3RhcnR1cCBwYXJhbWV0ZXJzLlxuXHQgKlxuXHQgKiBAcGFyYW0gb1N0YXJ0dXBQYXJhbWV0ZXJzIFRoZSBzdGFydHVwIHBhcmFtZXRlciB2YWx1ZXMgKG1hcCBwYXJhbWV0ZXIgbmFtZSAtPiBhcnJheSBvZiB2YWx1ZXMpXG5cdCAqIEBwYXJhbSBzQ29udGV4dFBhdGggVGhlIGNvbnRleHQgcGF0aCBmb3IgdGhlIHN0YXJ0dXAgb2YgdGhlIGFwcCAoZ2VuZXJhbGx5IHRoZSBwYXRoIHRvIHRoZSBtYWluIGVudGl0eSBzZXQpXG5cdCAqIEBwYXJhbSBvUm91dGVyIFRoZSByb3V0ZXIgaW5zdGFuY2Vcblx0ICogQHBhcmFtIG9NZXRhTW9kZWwgVGhlIG1ldGEgbW9kZWxcblx0ICogQHJldHVybnMgQSBwcm9taXNlIGNvbnRhaW5pbmcgdGhlIGhhc2ggdG8gbmF2aWdhdGUgdG8sIG9yIGFuIGVtcHR5IHN0cmluZyBpZiB0aGVyZSdzIG5vIG5lZWQgdG8gbmF2aWdhdGVcblx0ICovXG5cdGdldENyZWF0ZVN0YXJ0dXBIYXNoOiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0b1N0YXJ0dXBQYXJhbWV0ZXJzOiBTdGFydHVwUGFyYW1ldGVycyxcblx0XHRzQ29udGV4dFBhdGg6IHN0cmluZyxcblx0XHRvUm91dGVyOiBSb3V0ZXIsXG5cdFx0b01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWxcblx0KTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRyZXR1cm4gb01ldGFNb2RlbC5yZXF1ZXN0T2JqZWN0KGAke3NDb250ZXh0UGF0aH1AYCkudGhlbigob0VudGl0eVNldEFubm90YXRpb25zOiBNZXRhTW9kZWxFbnRpdHlTZXRBbm5vdGF0aW9uKSA9PiB7XG5cdFx0XHRsZXQgc01ldGFQYXRoID0gXCJcIjtcblx0XHRcdGxldCBiQ3JlYXRhYmxlID0gdHJ1ZTtcblxuXHRcdFx0aWYgKFxuXHRcdFx0XHRvRW50aXR5U2V0QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdFwiXSAmJlxuXHRcdFx0XHRvRW50aXR5U2V0QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdFwiXVtcIk5ld0FjdGlvblwiXVxuXHRcdFx0KSB7XG5cdFx0XHRcdHNNZXRhUGF0aCA9IGAke3NDb250ZXh0UGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdC9OZXdBY3Rpb25AT3JnLk9EYXRhLkNvcmUuVjEuT3BlcmF0aW9uQXZhaWxhYmxlYDtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdG9FbnRpdHlTZXRBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5TZXNzaW9uLnYxLlN0aWNreVNlc3Npb25TdXBwb3J0ZWRcIl0gJiZcblx0XHRcdFx0b0VudGl0eVNldEFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlNlc3Npb24udjEuU3RpY2t5U2Vzc2lvblN1cHBvcnRlZFwiXVtcIk5ld0FjdGlvblwiXVxuXHRcdFx0KSB7XG5cdFx0XHRcdHNNZXRhUGF0aCA9IGAke3NDb250ZXh0UGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuU2Vzc2lvbi52MS5TdGlja3lTZXNzaW9uU3VwcG9ydGVkL05ld0FjdGlvbkBPcmcuT0RhdGEuQ29yZS5WMS5PcGVyYXRpb25BdmFpbGFibGVgO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc01ldGFQYXRoKSB7XG5cdFx0XHRcdGNvbnN0IGJOZXdBY3Rpb25PcGVyYXRpb25BdmFpbGFibGUgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzTWV0YVBhdGgpO1xuXHRcdFx0XHRpZiAoYk5ld0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0XHRiQ3JlYXRhYmxlID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IG9JbnNlcnRSZXN0cmljdGlvbnMgPSBvRW50aXR5U2V0QW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5JbnNlcnRSZXN0cmljdGlvbnNcIl07XG5cdFx0XHRcdGlmIChvSW5zZXJ0UmVzdHJpY3Rpb25zICYmIG9JbnNlcnRSZXN0cmljdGlvbnMuSW5zZXJ0YWJsZSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0XHRiQ3JlYXRhYmxlID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChiQ3JlYXRhYmxlKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmdldERlZmF1bHRDcmVhdGVIYXNoKG9TdGFydHVwUGFyYW1ldGVycywgc0NvbnRleHRQYXRoLCBvUm91dGVyKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBcIlwiO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDYWxjdWxhdGVzIHRoZSBoYXNoIHRvIGNyZWF0ZSBhIG5ldyBvYmplY3QuXG5cdCAqXG5cdCAqIEBwYXJhbSBvU3RhcnR1cFBhcmFtZXRlcnMgVGhlIHN0YXJ0dXAgcGFyYW1ldGVyIHZhbHVlcyAobWFwIHBhcmFtZXRlciBuYW1lIC0+IGFycmF5IG9mIHZhbHVlcylcblx0ICogQHBhcmFtIHNDb250ZXh0UGF0aCBUaGUgY29udGV4dCBwYXRoIG9mIHRoZSBlbnRpdHkgc2V0IHRvIGJlIHVzZWQgZm9yIHRoZSBjcmVhdGlvblxuXHQgKiBAcGFyYW0gb1JvdXRlciBUaGUgcm91dGVyIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIFRoZSBoYXNoXG5cdCAqL1xuXHRnZXREZWZhdWx0Q3JlYXRlSGFzaDogZnVuY3Rpb24gKFxuXHRcdG9TdGFydHVwUGFyYW1ldGVyczogU3RhcnR1cFBhcmFtZXRlcnMgfCBudWxsIHwgdW5kZWZpbmVkLFxuXHRcdHNDb250ZXh0UGF0aDogc3RyaW5nLFxuXHRcdG9Sb3V0ZXI6IFJvdXRlclxuXHQpOiBzdHJpbmcge1xuXHRcdGxldCBzRGVmYXVsdENyZWF0ZUhhc2ggPSBvU3RhcnR1cFBhcmFtZXRlcnMgJiYgb1N0YXJ0dXBQYXJhbWV0ZXJzLnByZWZlcnJlZE1vZGUgPyBvU3RhcnR1cFBhcmFtZXRlcnMucHJlZmVycmVkTW9kZVswXSA6IFwiY3JlYXRlXCI7XG5cdFx0bGV0IHNIYXNoID0gXCJcIjtcblxuXHRcdHNEZWZhdWx0Q3JlYXRlSGFzaCA9XG5cdFx0XHRzRGVmYXVsdENyZWF0ZUhhc2guaW5jbHVkZXMoXCI6XCIpICYmIHNEZWZhdWx0Q3JlYXRlSGFzaC5sZW5ndGggPiBzRGVmYXVsdENyZWF0ZUhhc2guaW5kZXhPZihcIjpcIikgKyAxXG5cdFx0XHRcdD8gc0RlZmF1bHRDcmVhdGVIYXNoLnN1YnN0cmluZygwLCBzRGVmYXVsdENyZWF0ZUhhc2guaW5kZXhPZihcIjpcIikpXG5cdFx0XHRcdDogXCJjcmVhdGVcIjtcblx0XHRzSGFzaCA9IGAke3NDb250ZXh0UGF0aC5zdWJzdHJpbmcoMSl9KC4uLik/aS1hY3Rpb249JHtzRGVmYXVsdENyZWF0ZUhhc2h9YDtcblx0XHRpZiAob1JvdXRlci5nZXRSb3V0ZUluZm9CeUhhc2goc0hhc2gpKSB7XG5cdFx0XHRyZXR1cm4gc0hhc2g7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgTm8gcm91dGUgbWF0Y2ggZm9yIGNyZWF0aW5nIGEgbmV3ICR7c0NvbnRleHRQYXRoLnN1YnN0cmluZygxKX1gKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFZlcmlmaWVzIHdoZXRoZXIgdGhlIGVudGl0eSBpbiB0aGUgZ2l2ZW4gY29udGV4dCBwYXRoIGlzIGVkaXRhYmxlIGJ5IGxvb2tpbmcgYXQgdGhlIGZvbGxvd2luZyBhbm5vdGF0aW9uczpcblx0ICpcblx0ICogLSBAQ29yZS5PcGVyYXRpb25BdmFpbGFibGUgb2YgdGhlIGVkaXQgYWN0aW9uXG5cdCAqIC0gQFVJLlVwZGF0ZUhpZGRlblxuXHQgKlxuXHQgKiBPbmx5IHN0YXRpYyB2YWx1ZXMgKHRydWUvZmFsc2UpIGFyZSBjb25zaWRlcmVkIGhlcmUgYXMgd2UgZG9uJ3QgaGF2ZSB0aGUgYWN0dWFsIGJpbmRpbmcgY29udGV4dCB0byBldmFsdWF0ZSBkeW5hbWljIGJpbmRpbmdzLlxuXHQgKlxuXHQgKiBAcGFyYW0gY29udGV4dFBhdGhcblx0ICogQHBhcmFtIG1ldGFNb2RlbFxuXHQgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBlbnRpdHkgaXMgZWRpdGFibGUgb3Igbm90XG5cdCAqL1xuXHR2ZXJpZnlFZGl0QW5ub3RhdGlvbnM6IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0UGF0aDogc3RyaW5nLCBtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0Y29uc3QgZW50aXR5U2V0QW5ub3RhdGlvbnM6IE1ldGFNb2RlbEVudGl0eVNldEFubm90YXRpb24gPSBhd2FpdCBtZXRhTW9kZWwucmVxdWVzdE9iamVjdChgJHtjb250ZXh0UGF0aH1AYCk7XG5cdFx0Y29uc3QgdXBkYXRlSGlkZGVuID0gZW50aXR5U2V0QW5ub3RhdGlvbnM/LltcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5VcGRhdGVIaWRkZW5cIl07XG5cdFx0bGV0IG9wZXJhdGlvbkF2YWlsYWJsZSA9IHRydWU7XG5cblx0XHRpZiAoZW50aXR5U2V0QW5ub3RhdGlvbnM/LltcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290XCJdPy5bXCJFZGl0QWN0aW9uXCJdKSB7XG5cdFx0XHRvcGVyYXRpb25BdmFpbGFibGUgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KFxuXHRcdFx0XHRgJHtjb250ZXh0UGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdC9FZGl0QWN0aW9uQE9yZy5PRGF0YS5Db3JlLlYxLk9wZXJhdGlvbkF2YWlsYWJsZWBcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG9wZXJhdGlvbkF2YWlsYWJsZSAhPT0gZmFsc2UgJiYgdXBkYXRlSGlkZGVuICE9PSB0cnVlO1xuXHR9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBBcHBTdGFydHVwSGVscGVyO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7OztFQTZCQSxNQUFNQSxnQkFBZ0IsR0FBRztJQUN4QjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDQyx5QkFBeUIsRUFBRSxVQUFVQyxTQUFtQixFQUFFQyxrQkFBNEMsRUFBMkI7TUFDaEksSUFBSUMsU0FBUyxHQUFHLElBQUk7TUFDcEIsTUFBTUMsS0FBSyxHQUFHSCxTQUFTLENBQUNJLEdBQUcsQ0FBRUMsSUFBSSxJQUFLO1FBQ3JDLElBQUlKLGtCQUFrQixhQUFsQkEsa0JBQWtCLGVBQWxCQSxrQkFBa0IsQ0FBR0ksSUFBSSxDQUFDLElBQUlKLGtCQUFrQixDQUFDSSxJQUFJLENBQUMsQ0FBQ0MsTUFBTSxLQUFLLENBQUMsRUFBRTtVQUN4RSxPQUFPO1lBQUVELElBQUk7WUFBRUUsS0FBSyxFQUFFTixrQkFBa0IsQ0FBQ0ksSUFBSSxDQUFDLENBQUMsQ0FBQztVQUFZLENBQUM7UUFDOUQsQ0FBQyxNQUFNO1VBQ047VUFDQUgsU0FBUyxH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
|
|
@@ -84,6 +84,35 @@ const AppStartupHelper = {
|
|
|
84
84
|
return new Filter(aFilters, true);
|
|
85
85
|
},
|
|
86
86
|
|
|
87
|
+
/**
|
|
88
|
+
* Makes sure key values have the correct format.
|
|
89
|
+
* This is to handle special cases, for example, where Boolean values are 'X' or '', or guid values have the following format: guid'00000000-0000-0000-0000-000000000000'.".
|
|
90
|
+
* @param keys
|
|
91
|
+
* @param entityType
|
|
92
|
+
*/
|
|
93
|
+
_sanitizeKeys: function (keys: ValuedKey[], entityType: Record<string, { $Type: string }>): void {
|
|
94
|
+
keys.forEach((key) => {
|
|
95
|
+
const propertyType = entityType[key.name].$Type;
|
|
96
|
+
switch (propertyType) {
|
|
97
|
+
case "Edm.Boolean":
|
|
98
|
+
if (key.value !== "true" && key.value !== "false") {
|
|
99
|
+
// If the value is neither "true" nor "false", it's considered as false if it contains only whitespaces (e.g. to handle 'X'/'' for true/false values)
|
|
100
|
+
key.value = key.value.trim().length ? "true" : "false";
|
|
101
|
+
}
|
|
102
|
+
break;
|
|
103
|
+
|
|
104
|
+
case "Edm.Guid": {
|
|
105
|
+
const match = /[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}/.exec(key.value);
|
|
106
|
+
key.value = match ? match[0] : key.value;
|
|
107
|
+
break;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
default:
|
|
111
|
+
// Do nothing
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
},
|
|
115
|
+
|
|
87
116
|
/**
|
|
88
117
|
* Loads all contexts for a list of page infos.
|
|
89
118
|
*
|
|
@@ -99,14 +128,16 @@ const AppStartupHelper = {
|
|
|
99
128
|
): Promise<Context[][]> {
|
|
100
129
|
// Load the respective objects for all object pages found in aExternallyNavigablePages
|
|
101
130
|
const aContextPromises = aStartupPages.map(async (pageInfo) => {
|
|
131
|
+
const entityType = oModel.getMetaModel().getObject(`${pageInfo.contextPath}/`);
|
|
102
132
|
if (pageInfo.technicalKeys && !alwaysCheckExistence) {
|
|
133
|
+
this._sanitizeKeys(pageInfo.technicalKeys, entityType);
|
|
103
134
|
// Create a context with the proper path
|
|
104
|
-
const entityType = oModel.getMetaModel().getObject(`${pageInfo.contextPath}/`);
|
|
105
135
|
const path = `${pageInfo.contextPath}(${SemanticKeyHelper.getPathContent(pageInfo.technicalKeys, entityType)})`;
|
|
106
136
|
const context = oModel.bindContext(path).getBoundContext();
|
|
107
137
|
return Promise.resolve([context]);
|
|
108
138
|
} else {
|
|
109
139
|
const aKeys = pageInfo.semanticKeys || pageInfo.technicalKeys || [];
|
|
140
|
+
this._sanitizeKeys(aKeys, entityType);
|
|
110
141
|
const oFilter = this._createFilterFromKeys(aKeys, pageInfo.draftMode, oModel.getMetaModel());
|
|
111
142
|
|
|
112
143
|
// only request a minimum of fields to boost backend performance since this is only used to check if an object exists
|
|
@@ -48,7 +48,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/formatters/CriticalityFormatter", "s
|
|
|
48
48
|
controls: [],
|
|
49
49
|
elements: [],
|
|
50
50
|
// eslint-disable-next-line no-template-curly-in-string
|
|
51
|
-
version: "1.124.
|
|
51
|
+
version: "1.124.9",
|
|
52
52
|
noLibraryCSS: true,
|
|
53
53
|
extensions: {
|
|
54
54
|
//Configuration used for rule loading of Support Assistant
|
|
@@ -6,7 +6,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath"], function (Log, Objec
|
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
9
|
-
let pageConfigurationChanges = {};
|
|
10
9
|
/**
|
|
11
10
|
* Apply change method.
|
|
12
11
|
*
|
|
@@ -40,18 +39,19 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath"], function (Log, Objec
|
|
|
40
39
|
* @param pageId The ID of the page for which the configuration is to be changed.
|
|
41
40
|
* @param path The path in the page settings for which the configuration is to be changed.
|
|
42
41
|
* @param value The new value of the configuration. This could be a plain value like a string, or a Boolean, or a structured object.
|
|
43
|
-
* @param lateChange Indicates that the change was done after application startup (
|
|
42
|
+
* @param lateChange Indicates that the change was done after application startup (for example when using the feature toggle).
|
|
43
|
+
* @param appComponent The appComponent, in case the change is done after application startup.
|
|
44
44
|
* @returns The changed or unchanged manifest.
|
|
45
45
|
*/
|
|
46
46
|
_exports.applyChange = applyChange;
|
|
47
|
-
function changeConfiguration(manifest, pageId, path, value, lateChange) {
|
|
47
|
+
function changeConfiguration(manifest, pageId, path, value, lateChange, appComponent) {
|
|
48
48
|
const pageSettings = getPageSettings(manifest, pageId);
|
|
49
49
|
if (pageSettings) {
|
|
50
50
|
const propertyPath = retrievePropertyPath(path);
|
|
51
51
|
ObjectPath.set(propertyPath, value, pageSettings);
|
|
52
|
-
if (lateChange) {
|
|
53
|
-
pageConfigurationChanges[pageId] = pageConfigurationChanges[pageId] || [];
|
|
54
|
-
pageConfigurationChanges[pageId].push(path);
|
|
52
|
+
if (lateChange && appComponent) {
|
|
53
|
+
appComponent.pageConfigurationChanges[pageId] = appComponent.pageConfigurationChanges[pageId] || [];
|
|
54
|
+
appComponent.pageConfigurationChanges[pageId].push(path);
|
|
55
55
|
}
|
|
56
56
|
} else {
|
|
57
57
|
Log.error(`No Fiori elements page with ID ${pageId} found in routing targets.`);
|
|
@@ -118,7 +118,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath"], function (Log, Objec
|
|
|
118
118
|
*/
|
|
119
119
|
function applyPageConfigurationChanges(manifest, viewData, appComponent, pageId) {
|
|
120
120
|
viewData = viewData ?? {};
|
|
121
|
-
const pageChanges = pageConfigurationChanges[pageId] || [];
|
|
121
|
+
const pageChanges = appComponent.pageConfigurationChanges[pageId] || [];
|
|
122
122
|
for (const path of pageChanges) {
|
|
123
123
|
const propertyPath = retrievePropertyPath(path);
|
|
124
124
|
const manifestValue = ObjectPath.get(propertyPath, manifest);
|
|
@@ -126,16 +126,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath"], function (Log, Objec
|
|
|
126
126
|
}
|
|
127
127
|
return viewData;
|
|
128
128
|
}
|
|
129
|
-
|
|
130
|
-
/**
|
|
131
|
-
* Cleans all registered page configuration changes.
|
|
132
|
-
*
|
|
133
|
-
*/
|
|
134
129
|
_exports.applyPageConfigurationChanges = applyPageConfigurationChanges;
|
|
135
|
-
function cleanPageConfigurationChanges() {
|
|
136
|
-
pageConfigurationChanges = {};
|
|
137
|
-
}
|
|
138
|
-
_exports.cleanPageConfigurationChanges = cleanPageConfigurationChanges;
|
|
139
130
|
return _exports;
|
|
140
131
|
}, false);
|
|
141
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYWdlQ29uZmlndXJhdGlvbkNoYW5nZXMiLCJhcHBseUNoYW5nZSIsIm1hbmlmZXN0IiwiY2hhbmdlIiwiY2hhbmdlQ29udGVudCIsImdldENvbnRlbnQiLCJwYWdlSWQiLCJwYWdlIiwicHJvcGVydHlDaGFuZ2UiLCJlbnRpdHlQcm9wZXJ0eUNoYW5nZSIsIm9wZXJhdGlvbiIsInByb3BlcnR5UGF0aCIsInByb3BlcnR5VmFsdWUiLCJ1bmRlZmluZWQiLCJzdGFydHNXaXRoIiwiTG9nIiwiZXJyb3IiLCJjaGFuZ2VDb25maWd1cmF0aW9uIiwicGF0aCIsInZhbHVlIiwibGF0ZUNoYW5nZSIsInBhZ2VTZXR0aW5ncyIsImdldFBhZ2VTZXR0aW5ncyIsInJldHJpZXZlUHJvcGVydHlQYXRoIiwiT2JqZWN0UGF0aCIsInNldCIsInB1c2giLCJzcGxpdCIsImFubm90YXRpb25QYXRoIiwiaSIsImxlbmd0aCIsImluY2x1ZGVzIiwiY29uY2F0Iiwic2xpY2UiLCJ0YXJnZXRzIiwicm91dGluZyIsInAiLCJpZCIsIm5hbWUiLCJvcHRpb25zIiwic2V0dGluZ3MiLCJhcHBseVBhZ2VDb25maWd1cmF0aW9uQ2hhbmdlcyIsInZpZXdEYXRhIiwiYXBwQ29tcG9uZW50IiwicGFnZUNoYW5nZXMiLCJtYW5pZmVzdFZhbHVlIiwiZ2V0IiwiY2xlYW5QYWdlQ29uZmlndXJhdGlvbkNoYW5nZXMiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkNoYW5nZVBhZ2VDb25maWd1cmF0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IE9iamVjdFBhdGggZnJvbSBcInNhcC9iYXNlL3V0aWwvT2JqZWN0UGF0aFwiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgVmlld0RhdGEgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvVGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IE1hbmlmZXN0Q29udGVudCB9IGZyb20gXCJzYXAvdWkvY29yZS9NYW5pZmVzdFwiO1xuXG5sZXQgcGFnZUNvbmZpZ3VyYXRpb25DaGFuZ2VzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fTtcblxuZXhwb3J0IHR5cGUgQ2hhbmdlID0ge1xuXHRnZXRDb250ZW50KCk6IENoYW5nZUNvbnRlbnQ7XG59O1xuXG50eXBlIENoYW5nZUNvbnRlbnQgPSB7XG5cdHBhZ2U6IHN0cmluZzsgLy8gSUQgb2YgdGhlIHBhZ2UgdG8gYmUgY2hhbmdlZFxuXHRlbnRpdHlQcm9wZXJ0eUNoYW5nZTogRW50aXR5UHJvcGVydHlDaGFuZ2U7XG59O1xuXG50eXBlIEVudGl0eVByb3BlcnR5Q2hhbmdlID0ge1xuXHRwcm9wZXJ0eVBhdGg6IHN0cmluZzsgLy8gcGF0aCB0byB0aGUgcHJvcGVydHkgdG8gYmUgY2hhbmdlZFxuXHRvcGVyYXRpb246IHN0cmluZzsgLy8gb25seSBVUFNFUlQgc3VwcG9ydGVkXG5cdHByb3BlcnR5VmFsdWU6IHN0cmluZyB8IE9iamVjdDsgLy93aGF0IHRvIGJlIGNoYW5nZWRcbn07XG5cbi8qKlxuICogQXBwbHkgY2hhbmdlIG1ldGhvZC5cbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyBiZWluZyBjYWxsZWQgYnkgdGhlIEZMRVggZnJhbWV3b3JrIGluIGNhc2UgYSBtYW5pZmVzdCBjaGFuZ2Ugd2l0aCB0aGUgY2hhbmdlIHR5cGVcbiAqICdhcHBkZXNjcl9mZV9jaGFuZ2VQYWdlQ29uZmlndXJhdGlvbicgd2FzIGNyZWF0ZWQgZm9yIHRoZSBjdXJyZW50IGFwcGxpY2F0aW9uLiBUaGlzIG1ldGhvZCBpcyBub3QgbWVhbnQgdG8gYmVcbiAqIGNhbGxlZCBieSBhbnlvbmUgZWxzZSBidXQgdGhlIEZMRVggZnJhbWV3b3JrLlxuICpcbiAqIEBwYXJhbSBtYW5pZmVzdCBUaGUgb3JpZ2luYWwgbWFuaWZlc3QuXG4gKiBAcGFyYW0gY2hhbmdlIFRoZSBjaGFuZ2UgY29udGVudC5cbiAqIEByZXR1cm5zIFRoZSBjaGFuZ2VkIG9yIHVuY2hhbmdlZCBtYW5pZmVzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5Q2hhbmdlKG1hbmlmZXN0OiBNYW5pZmVzdENvbnRlbnQsIGNoYW5nZTogQ2hhbmdlKTogb2JqZWN0IHtcblx0Y29uc3QgY2hhbmdlQ29udGVudCA9IGNoYW5nZS5nZXRDb250ZW50KCk7XG5cdGNvbnN0IHBhZ2VJZCA9IGNoYW5nZUNvbnRlbnQ/LnBhZ2U7XG5cdGNvbnN0IHByb3BlcnR5Q2hhbmdlID0gY2hhbmdlQ29udGVudD8uZW50aXR5UHJvcGVydHlDaGFuZ2U7XG5cblx0Ly8gcmV0dXJuIHVubW9kaWZpZWQgbWFuaWZlc3QgaW4gY2FzZSBjaGFuZ2Ugbm90IHZhbGlkXG5cdGlmIChcblx0XHRwcm9wZXJ0eUNoYW5nZT8ub3BlcmF0aW9uICE9PSBcIlVQU0VSVFwiIHx8XG5cdFx0IXByb3BlcnR5Q2hhbmdlPy5wcm9wZXJ0eVBhdGggfHxcblx0XHRwcm9wZXJ0eUNoYW5nZT8ucHJvcGVydHlWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0cHJvcGVydHlDaGFuZ2U/LnByb3BlcnR5UGF0aC5zdGFydHNXaXRoKFwiL1wiKVxuXHQpIHtcblx0XHRMb2cuZXJyb3IoXCJDaGFuZ2UgY29udGVudCBpcyBub3QgYSB2YWxpZFwiKTtcblx0XHRyZXR1cm4gbWFuaWZlc3Q7XG5cdH1cblxuXHRyZXR1cm4gY2hhbmdlQ29uZmlndXJhdGlvbihtYW5pZmVzdCwgcGFnZUlkLCBwcm9wZXJ0eUNoYW5nZS5wcm9wZXJ0eVBhdGgsIHByb3BlcnR5Q2hhbmdlLnByb3BlcnR5VmFsdWUpO1xufVxuXG4vKipcbiAqIENoYW5nZXMgdGhlIHBhZ2UgY29uZmlndXJhdGlvbiBvZiBTQVAgRmlvcmkgZWxlbWVudHMuXG4gKlxuICogVGhpcyBtZXRob2QgZW5hYmxlcyB5b3UgdG8gY2hhbmdlIHRoZSBwYWdlIGNvbmZpZ3VyYXRpb24gb2YgU0FQIEZpb3JpIGVsZW1lbnRzLlxuICpcbiAqIEBwYXJhbSBtYW5pZmVzdCBUaGUgb3JpZ2luYWwgbWFuaWZlc3QuXG4gKiBAcGFyYW0gcGFnZUlkIFRoZSBJRCBvZiB0aGUgcGFnZSBmb3Igd2hpY2ggdGhlIGNvbmZpZ3VyYXRpb24gaXMgdG8gYmUgY2hhbmdlZC5cbiAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIGluIHRoZSBwYWdlIHNldHRpbmdzIGZvciB3aGljaCB0aGUgY29uZmlndXJhdGlvbiBpcyB0byBiZSBjaGFuZ2VkLlxuICogQHBhcmFtIHZhbHVlIFRoZSBuZXcgdmFsdWUgb2YgdGhlIGNvbmZpZ3VyYXRpb24uIFRoaXMgY291bGQgYmUgYSBwbGFpbiB2YWx1ZSBsaWtlIGEgc3RyaW5nLCBvciBhIEJvb2xlYW4sIG9yIGEgc3RydWN0dXJlZCBvYmplY3QuXG4gKiBAcGFyYW0gbGF0ZUNoYW5nZSBJbmRpY2F0ZXMgdGhhdCB0aGUgY2hhbmdlIHdhcyBkb25lIGFmdGVyIGFwcGxpY2F0aW9uIHN0YXJ0dXAgKGUuZy4gZmVhdHVyZSB0b2dnbGUpLlxuICogQHJldHVybnMgVGhlIGNoYW5nZWQgb3IgdW5jaGFuZ2VkIG1hbmlmZXN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhbmdlQ29uZmlndXJhdGlvbihtYW5pZmVzdDogTWFuaWZlc3RDb250ZW50LCBwYWdlSWQ6IHN0cmluZywgcGF0aDogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgbGF0ZUNoYW5nZT86IGJvb2xlYW4pOiBvYmplY3Qge1xuXHRjb25zdCBwYWdlU2V0dGluZ3MgPSBnZXRQYWdlU2V0dGluZ3MobWFuaWZlc3QsIHBhZ2VJZCk7XG5cblx0aWYgKHBhZ2VTZXR0aW5ncykge1xuXHRcdGNvbnN0IHByb3BlcnR5UGF0aCA9IHJldHJpZXZlUHJvcGVydHlQYXRoKHBhdGgpO1xuXHRcdE9iamVjdFBhdGguc2V0KHByb3BlcnR5UGF0aCwgdmFsdWUsIHBhZ2VTZXR0aW5ncyk7XG5cdFx0aWYgKGxhdGVDaGFuZ2UpIHtcblx0XHRcdHBhZ2VDb25maWd1cmF0aW9uQ2hhbmdlc1twYWdlSWRdID0gcGFnZUNvbmZpZ3VyYXRpb25DaGFuZ2VzW3BhZ2VJZF0gfHwgW107XG5cdFx0XHRwYWdlQ29uZmlndXJhdGlvbkNoYW5nZXNbcGFnZUlkXS5wdXNoKHBhdGgpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRMb2cuZXJyb3IoYE5vIEZpb3JpIGVsZW1lbnRzIHBhZ2Ugd2l0aCBJRCAke3BhZ2VJZH0gZm91bmQgaW4gcm91dGluZyB0YXJnZXRzLmApO1xuXHR9XG5cblx0cmV0dXJuIG1hbmlmZXN0O1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyBhbiBhcnJheSB3aXRoIHRoZSBwcm9wZXJ0eSBwYXRoIHBhcnRzIGFuZCBjb25zaWRlciB0aGUgY29udHJvbENvbmZpZ3VyYXRpb24gc3BlY2lhbGx5LlxuICpcbiAqIEBwYXJhbSBwYXRoIFRoZSBnaXZlbiBwcm9wZXJ0eSBwYXRoXG4gKiBAcmV0dXJucyBBbiBhcnJheSB3aXRoIHRoZSBwcm9wZXJ0eSBwYXRoIHBhcnRzLlxuICovXG5mdW5jdGlvbiByZXRyaWV2ZVByb3BlcnR5UGF0aChwYXRoOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG5cdGxldCBwcm9wZXJ0eVBhdGggPSBwYXRoLnNwbGl0KFwiL1wiKTtcblx0aWYgKHByb3BlcnR5UGF0aFswXSA9PT0gXCJjb250cm9sQ29uZmlndXJhdGlvblwiKSB7XG5cdFx0bGV0IGFubm90YXRpb25QYXRoID0gXCJcIjtcblx0XHQvLyB0aGUgYW5ub3RhdGlvbiBwYXRoIGluIHRoZSBjb250cm9sIGNvbmZpZ3VyYXRpb24gaGFzIHRvIHN0YXkgdG9nZXRoZXIuIEZvciBub3cgcmVseSBvbiB0aGUgZmFjdCB0aGUgQCBpcyBpbiB0aGUgbGFzdCBwYXJ0XG5cdFx0Zm9yIChsZXQgaSA9IDE7IGkgPCBwcm9wZXJ0eVBhdGgubGVuZ3RoOyBpKyspIHtcblx0XHRcdGFubm90YXRpb25QYXRoICs9IChpID4gMSA/IFwiL1wiIDogXCJcIikgKyBwcm9wZXJ0eVBhdGhbaV07XG5cdFx0XHRpZiAoYW5ub3RhdGlvblBhdGguaW5jbHVkZXMoXCJAXCIpKSB7XG5cdFx0XHRcdHByb3BlcnR5UGF0aCA9IFtcImNvbnRyb2xDb25maWd1cmF0aW9uXCIsIGFubm90YXRpb25QYXRoXS5jb25jYXQocHJvcGVydHlQYXRoLnNsaWNlKGkgKyAxKSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gcHJvcGVydHlQYXRoO1xufVxuXG4vKipcbiAqIFNlYXJjaCB0aGUgcGFnZSBzZXR0aW5ncyBpbiB0aGUgbWFuaWZlc3QgZm9yIGEgZ2l2ZW4gcGFnZSBJRC5cbiAqXG4gKiBAcGFyYW0gbWFuaWZlc3QgVGhlIG1hbmlmZXN0IHdoZXJlIHRoZSBzZWFyY2ggaXMgY2FycmllZCBvdXQgdG8gZmluZCB0aGUgcGFnZSBzZXR0aW5ncy5cbiAqIEBwYXJhbSBwYWdlSWQgVGhlIElEIG9mIHRoZSBwYWdlLlxuICogQHJldHVybnMgVGhlIHBhZ2Ugc2V0dGluZ3MgZm9yIHRoZSBwYWdlIElEIG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmQuXG4gKi9cbmZ1bmN0aW9uIGdldFBhZ2VTZXR0aW5ncyhtYW5pZmVzdDogTWFuaWZlc3RDb250ZW50LCBwYWdlSWQ6IHN0cmluZyk6IG9iamVjdCB8IHVuZGVmaW5lZCB7XG5cdGxldCBwYWdlU2V0dGluZ3M7XG5cdGNvbnN0IHRhcmdldHMgPSBtYW5pZmVzdFtcInNhcC51aTVcIl0/LnJvdXRpbmc/LnRhcmdldHMgPz8ge307XG5cdGZvciAoY29uc3QgcCBpbiB0YXJnZXRzKSB7XG5cdFx0aWYgKHRhcmdldHNbcF0uaWQgPT09IHBhZ2VJZCAmJiB0YXJnZXRzW3BdLm5hbWUuc3RhcnRzV2l0aChcInNhcC5mZS50ZW1wbGF0ZXMuXCIpKSB7XG5cdFx0XHRwYWdlU2V0dGluZ3MgPSB0YXJnZXRzW3BdLm9wdGlvbnM/LnNldHRpbmdzID8/IHt9O1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBwYWdlU2V0dGluZ3M7XG59XG5cbi8qKlxuICogQXBwbGllcyBwYWdlIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyB0byB2aWV3IGRhdGEgb2JqZWN0LlxuICpcbiAqIFVJNSByb3V0aW5nIGNsb25lcyB0aGUgbWFuaWZlc3Qgc2V0dGluZ3MgZHVyaW5nIHRoZSBhcHAgaW5pdCwgZXZlbiBiZWZvcmUgdGhlIHJvdXRlciB3YXMgaW5pdGlhbGl6ZWQuXG4gKiBBcyB3ZSBhbGxvdyBjaGFuZ2luZyB0aGUgbWFuaWZlc3QgaW4gdGhlIGFzeW5jIGluaXRpYWxpemVGZWF0dXJlVG9nZ2xlIGhvb2ssIHRoZSB2aWV3IGRhdGEgbWlnaHQgbm90IGZpdCB0aGUgY3VycmVudFxuICogbWFuaWZlc3Qgc2V0dGluZ3MsIHRoZXJlZm9yZSAocmUpYXBwbHlpbmcgdGhlIHJlZ2lzdGVyZWQgcGFnZSBjb25maWd1cmF0aW9uIGNoYW5nZXMgdG8gdGhlIHZpZXcgZGF0YSBvYmplY3QuXG4gKlxuICogQHBhcmFtIG1hbmlmZXN0IFRoZSBjdXJyZW50IHBhZ2UgbWFuaWZlc3Qgc2V0dGluZ3MuXG4gKiBAcGFyYW0gdmlld0RhdGEgVGhlIGN1cnJlbnQgdmlld0RhdGEgc2V0dGluZ3MuXG4gKiBAcGFyYW0gYXBwQ29tcG9uZW50IFRoZSBhcHAgY29tcG9uZW50IGluc3RhbmNlLlxuICogQHBhcmFtIHBhZ2VJZCBUaGUgSUQgb2YgdGhlIHBhZ2UuXG4gKiBAcmV0dXJucyBUaGUgdXBkYXRlZCB2aWV3RGF0YSBzZXR0aW5ncy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5UGFnZUNvbmZpZ3VyYXRpb25DaGFuZ2VzKG1hbmlmZXN0OiBvYmplY3QsIHZpZXdEYXRhOiBWaWV3RGF0YSwgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsIHBhZ2VJZDogc3RyaW5nKTogVmlld0RhdGEge1xuXHR2aWV3RGF0YSA9IHZpZXdEYXRhID8/IHt9O1xuXHRjb25zdCBwYWdlQ2hhbmdlczogc3RyaW5nW10gPSBwYWdlQ29uZmlndXJhdGlvbkNoYW5nZXNbcGFnZUlkXSB8fCBbXTtcblx0Zm9yIChjb25zdCBwYXRoIG9mIHBhZ2VDaGFuZ2VzKSB7XG5cdFx0Y29uc3QgcHJvcGVydHlQYXRoID0gcmV0cmlldmVQcm9wZXJ0eVBhdGgocGF0aCk7XG5cdFx0Y29uc3QgbWFuaWZlc3RWYWx1ZSA9IE9iamVjdFBhdGguZ2V0KHByb3BlcnR5UGF0aCwgbWFuaWZlc3QpO1xuXHRcdE9iamVjdFBhdGguc2V0KHByb3BlcnR5UGF0aCwgbWFuaWZlc3RWYWx1ZSwgdmlld0RhdGEpO1xuXHR9XG5cdHJldHVybiB2aWV3RGF0YTtcbn1cblxuLyoqXG4gKiBDbGVhbnMgYWxsIHJlZ2lzdGVyZWQgcGFnZSBjb25maWd1cmF0aW9uIGNoYW5nZXMuXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYW5QYWdlQ29uZmlndXJhdGlvbkNoYW5nZXMoKTogdm9pZCB7XG5cdHBhZ2VDb25maWd1cmF0aW9uQ2hhbmdlcyA9IHt9O1xufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7OztFQU1BLElBQUlBLHdCQUFrRCxHQUFHLENBQUMsQ0FBQztFQWlCM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLFNBQVNDLFdBQVcsQ0FBQ0MsUUFBeUIsRUFBRUMsTUFBYyxFQUFVO0lBQzlFLE1BQU1DLGFBQWEsR0FBR0QsTUFBTSxDQUFDRSxVQUFVLEVBQUU7SUFDekMsTUFBTUMsTUFBTSxHQUFHRixhQUFhLGFBQWJBLGFBQWEsdUJBQWJBLGFBQWEsQ0FBRUcsSUFBSTtJQUNsQyxNQUFNQyxjQUFjLEdBQUdKLGFBQWEsYUFBYkEsYUFBYSx1QkFBYkEsYUFBYSxDQUFFSyxvQkFBb0I7O0lBRTFEO0lBQ0EsSUFDQyxDQUFBRCxjQUFjLGFBQWRBLGNBQWMsdUJBQWRBLGNBQWMsQ0FBRUUsU0FBUyxNQUFLLFFBQVEsSUFDdEMsRUFBQ0YsY0FBYyxhQUFkQSxjQUFjLGVBQWRBLGNBQWMsQ0FBRUcsWUFBWSxLQUM3QixDQUFBSCxjQUFjLGFBQWRBLGNBQWMsdUJBQWRBLGNBQWMsQ0FBRUksYUFBYSxNQUFLQyxTQUFTLElBQzNDTCxjQUFjLGFBQWRBLGNBQWMsZUFBZEEsY0FBYyxDQUFFRyxZQUFZLENBQUNHLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFDM0M7TUFDREMsR0FBRyxDQUFDQyxLQUFLLENBQUMsK0JBQStCLENBQUM7TUFDMUMsT0FBT2QsUUFBUTtJQUNoQjtJQUVBLE9BQU9lLG1CQUFtQixDQUFDZixRQUFRLEVBQUVJLE1BQU0sRUFBRUUsY0FBYyxDQUFDRyxZQUFZLEVBQUVILGNBQWMsQ0FBQ0ksYUFBYSxDQUFDO0VBQ3hHOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQVhBO0VBWU8sU0FBU0ssbUJBQW1CLENBQUNmLFFBQXlCLEVBQUVJLE1BQWMsRUFBRVksSUFBWSxFQUFFQyxLQUFjLEVBQUVDLFVBQW9CLEVBQVU7SUFDMUksTUFBTUMsWUFBWSxHQUFHQyxlQUFlLENBQUNwQixRQUFRLEVBQUVJLE1BQU0sQ0FBQztJQUV0RCxJQUFJZSxZQUFZLEVBQUU7TUFDakIsTUFBTVYsWUFBWSxHQUFHWSxvQkFBb0IsQ0FBQ0wsSUFBSSxDQUFDO01BQy9DTSxVQUFVLENBQUNDLEdBQUcsQ0FBQ2QsWUFBWSxFQUFFUSxLQUFLLEVBQUVFLFlBQVksQ0FBQztNQUNqRCxJQUFJRCxVQUFVLEVBQUU7UUFDZnBCLHdCQUF3QixDQUFDTSxNQUFNLENBQUMsR0FBR04sd0JBQXdCLENBQUNNLE1BQU0sQ0FBQyxJQUFJLEVBQUU7UUFDekVOLHdCQUF3QixDQUFDTSxNQUFNLENBQUMsQ0FBQ29CLElBQUksQ0FBQ1IsSUFBSSxDQUFDO01BQzVDO0lBQ0QsQ0FBQyxNQUFNO01BQ05ILEdBQUcsQ0FBQ0MsS0FBSyxDQUFFLGtDQUFpQ1YsTUFBTyw0QkFBMkIsQ0FBQztJQUNoRjtJQUVBLE9BQU9KLFFBQVE7RUFDaEI7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTEE7RUFNQSxTQUFTcUIsb0JBQW9CLENBQUNMLElBQVksRUFBWTtJQUNyRCxJQUFJUCxZQUFZLEdBQUdPLElBQUksQ0FBQ1MsS0FBSyxDQUFDLEdBQUcsQ0FBQztJQUNsQyxJQUFJaEIsWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLHNCQUFzQixFQUFFO01BQy9DLElBQUlpQixjQUFjLEdBQUcsRUFBRTtNQUN2QjtNQUNBLEtBQUssSUFBSUMsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHbEIsWUFBWSxDQUFDbUIsTUFBTSxFQUFFRCxDQUFDLEVBQUUsRUFBRTtRQUM3Q0QsY0FBYyxJQUFJLENBQUNDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSWxCLFlBQVksQ0FBQ2tCLENBQUMsQ0FBQztRQUN0RCxJQUFJRCxjQUFjLENBQUNHLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtVQUNqQ3BCLFlBQVksR0FBRyxDQUFDLHNCQUFzQixFQUFFaUIsY0FBYyxDQUFDLENBQUNJLE1BQU0sQ0FBQ3JCLFlBQVksQ0FBQ3NCLEtBQUssQ0FBQ0osQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1VBQ3pGO1FBQ0Q7TUFDRDtJQUNEO0lBQ0EsT0FBT2xCLFlBQVk7RUFDcEI7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTVyxlQUFlLENBQUNwQixRQUF5QixFQUFFSSxNQUFjLEVBQXNCO0lBQUE7SUFDdkYsSUFBSWUsWUFBWTtJQUNoQixNQUFNYSxPQUFPLEdBQUcsb0JBQUFoQyxRQUFRLENBQUMsU0FBUyxDQUFDLDZFQUFuQixnQkFBcUJpQyxPQUFPLDBEQUE1QixzQkFBOEJELE9BQU8sS0FBSSxDQUFDLENBQUM7SUFDM0QsS0FBSyxNQUFNRSxDQUFDLElBQUlGLE9BQU8sRUFBRTtNQUN4QixJQUFJQSxPQUFPLENBQUNFLENBQUMsQ0FBQyxDQUFDQyxFQUFFLEtBQUsvQixNQUFNLElBQUk0QixPQUFPLENBQUNFLENBQUMsQ0FBQyxDQUFDRSxJQUFJLENBQUN4QixVQUFVLENBQUMsbUJBQW1CLENBQUMsRUFBRTtRQUFBO1FBQ2hGTyxZQUFZLEdBQUcsdUJBQUFhLE9BQU8sQ0FBQ0UsQ0FBQyxDQUFDLENBQUNHLE9BQU8sdURBQWxCLG1CQUFvQkMsUUFBUSxLQUFJLENBQUMsQ0FBQztRQUNqRDtNQUNEO0lBQ0Q7SUFDQSxPQUFPbkIsWUFBWTtFQUNwQjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLFNBQVNvQiw2QkFBNkIsQ0FBQ3ZDLFFBQWdCLEVBQUV3QyxRQUFrQixFQUFFQyxZQUEwQixFQUFFckMsTUFBYyxFQUFZO0lBQ3pJb0MsUUFBUSxHQUFHQSxRQUFRLElBQUksQ0FBQyxDQUFDO0lBQ3pCLE1BQU1FLFdBQXFCLEdBQUc1Qyx3QkFBd0IsQ0FBQ00sTUFBTSxDQUFDLElBQUksRUFBRTtJQUNwRSxLQUFLLE1BQU1ZLElBQUksSUFBSTBCLFdBQVcsRUFBRTtNQUMvQixNQUFNakMsWUFBWSxHQUFHWSxvQkFBb0IsQ0FBQ0wsSUFBSSxDQUFDO01BQy9DLE1BQU0yQixhQUFhLEdBQUdyQixVQUFVLENBQUNzQixHQUFHLENBQUNuQyxZQUFZLEVBQUVULFFBQVEsQ0FBQztNQUM1RHNCLFVBQVUsQ0FBQ0MsR0FBRyxDQUFDZCxZQUFZLEVBQUVrQyxhQUFhLEVBQUVILFFBQVEsQ0FBQztJQUN0RDtJQUNBLE9BQU9BLFFBQVE7RUFDaEI7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7RUFIQTtFQUlPLFNBQVNLLDZCQUE2QixHQUFTO0lBQ3JEL0Msd0JBQXdCLEdBQUcsQ0FBQyxDQUFDO0VBQzlCO0VBQUM7RUFBQTtBQUFBIn0=
|
|
132
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhcHBseUNoYW5nZSIsIm1hbmlmZXN0IiwiY2hhbmdlIiwiY2hhbmdlQ29udGVudCIsImdldENvbnRlbnQiLCJwYWdlSWQiLCJwYWdlIiwicHJvcGVydHlDaGFuZ2UiLCJlbnRpdHlQcm9wZXJ0eUNoYW5nZSIsIm9wZXJhdGlvbiIsInByb3BlcnR5UGF0aCIsInByb3BlcnR5VmFsdWUiLCJ1bmRlZmluZWQiLCJzdGFydHNXaXRoIiwiTG9nIiwiZXJyb3IiLCJjaGFuZ2VDb25maWd1cmF0aW9uIiwicGF0aCIsInZhbHVlIiwibGF0ZUNoYW5nZSIsImFwcENvbXBvbmVudCIsInBhZ2VTZXR0aW5ncyIsImdldFBhZ2VTZXR0aW5ncyIsInJldHJpZXZlUHJvcGVydHlQYXRoIiwiT2JqZWN0UGF0aCIsInNldCIsInBhZ2VDb25maWd1cmF0aW9uQ2hhbmdlcyIsInB1c2giLCJzcGxpdCIsImFubm90YXRpb25QYXRoIiwiaSIsImxlbmd0aCIsImluY2x1ZGVzIiwiY29uY2F0Iiwic2xpY2UiLCJ0YXJnZXRzIiwicm91dGluZyIsInAiLCJpZCIsIm5hbWUiLCJvcHRpb25zIiwic2V0dGluZ3MiLCJhcHBseVBhZ2VDb25maWd1cmF0aW9uQ2hhbmdlcyIsInZpZXdEYXRhIiwicGFnZUNoYW5nZXMiLCJtYW5pZmVzdFZhbHVlIiwiZ2V0Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJDaGFuZ2VQYWdlQ29uZmlndXJhdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBPYmplY3RQYXRoIGZyb20gXCJzYXAvYmFzZS91dGlsL09iamVjdFBhdGhcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IFZpZXdEYXRhIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1RlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBNYW5pZmVzdENvbnRlbnQgfSBmcm9tIFwic2FwL3VpL2NvcmUvTWFuaWZlc3RcIjtcblxuZXhwb3J0IHR5cGUgQ2hhbmdlID0ge1xuXHRnZXRDb250ZW50KCk6IENoYW5nZUNvbnRlbnQ7XG59O1xuXG50eXBlIENoYW5nZUNvbnRlbnQgPSB7XG5cdHBhZ2U6IHN0cmluZzsgLy8gSUQgb2YgdGhlIHBhZ2UgdG8gYmUgY2hhbmdlZFxuXHRlbnRpdHlQcm9wZXJ0eUNoYW5nZTogRW50aXR5UHJvcGVydHlDaGFuZ2U7XG59O1xuXG50eXBlIEVudGl0eVByb3BlcnR5Q2hhbmdlID0ge1xuXHRwcm9wZXJ0eVBhdGg6IHN0cmluZzsgLy8gcGF0aCB0byB0aGUgcHJvcGVydHkgdG8gYmUgY2hhbmdlZFxuXHRvcGVyYXRpb246IHN0cmluZzsgLy8gb25seSBVUFNFUlQgc3VwcG9ydGVkXG5cdHByb3BlcnR5VmFsdWU6IHN0cmluZyB8IE9iamVjdDsgLy93aGF0IHRvIGJlIGNoYW5nZWRcbn07XG5cbi8qKlxuICogQXBwbHkgY2hhbmdlIG1ldGhvZC5cbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyBiZWluZyBjYWxsZWQgYnkgdGhlIEZMRVggZnJhbWV3b3JrIGluIGNhc2UgYSBtYW5pZmVzdCBjaGFuZ2Ugd2l0aCB0aGUgY2hhbmdlIHR5cGVcbiAqICdhcHBkZXNjcl9mZV9jaGFuZ2VQYWdlQ29uZmlndXJhdGlvbicgd2FzIGNyZWF0ZWQgZm9yIHRoZSBjdXJyZW50IGFwcGxpY2F0aW9uLiBUaGlzIG1ldGhvZCBpcyBub3QgbWVhbnQgdG8gYmVcbiAqIGNhbGxlZCBieSBhbnlvbmUgZWxzZSBidXQgdGhlIEZMRVggZnJhbWV3b3JrLlxuICpcbiAqIEBwYXJhbSBtYW5pZmVzdCBUaGUgb3JpZ2luYWwgbWFuaWZlc3QuXG4gKiBAcGFyYW0gY2hhbmdlIFRoZSBjaGFuZ2UgY29udGVudC5cbiAqIEByZXR1cm5zIFRoZSBjaGFuZ2VkIG9yIHVuY2hhbmdlZCBtYW5pZmVzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5Q2hhbmdlKG1hbmlmZXN0OiBNYW5pZmVzdENvbnRlbnQsIGNoYW5nZTogQ2hhbmdlKTogb2JqZWN0IHtcblx0Y29uc3QgY2hhbmdlQ29udGVudCA9IGNoYW5nZS5nZXRDb250ZW50KCk7XG5cdGNvbnN0IHBhZ2VJZCA9IGNoYW5nZUNvbnRlbnQ/LnBhZ2U7XG5cdGNvbnN0IHByb3BlcnR5Q2hhbmdlID0gY2hhbmdlQ29udGVudD8uZW50aXR5UHJvcGVydHlDaGFuZ2U7XG5cblx0Ly8gcmV0dXJuIHVubW9kaWZpZWQgbWFuaWZlc3QgaW4gY2FzZSBjaGFuZ2Ugbm90IHZhbGlkXG5cdGlmIChcblx0XHRwcm9wZXJ0eUNoYW5nZT8ub3BlcmF0aW9uICE9PSBcIlVQU0VSVFwiIHx8XG5cdFx0IXByb3BlcnR5Q2hhbmdlPy5wcm9wZXJ0eVBhdGggfHxcblx0XHRwcm9wZXJ0eUNoYW5nZT8ucHJvcGVydHlWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0cHJvcGVydHlDaGFuZ2U/LnByb3BlcnR5UGF0aC5zdGFydHNXaXRoKFwiL1wiKVxuXHQpIHtcblx0XHRMb2cuZXJyb3IoXCJDaGFuZ2UgY29udGVudCBpcyBub3QgYSB2YWxpZFwiKTtcblx0XHRyZXR1cm4gbWFuaWZlc3Q7XG5cdH1cblxuXHRyZXR1cm4gY2hhbmdlQ29uZmlndXJhdGlvbihtYW5pZmVzdCwgcGFnZUlkLCBwcm9wZXJ0eUNoYW5nZS5wcm9wZXJ0eVBhdGgsIHByb3BlcnR5Q2hhbmdlLnByb3BlcnR5VmFsdWUpO1xufVxuXG4vKipcbiAqIENoYW5nZXMgdGhlIHBhZ2UgY29uZmlndXJhdGlvbiBvZiBTQVAgRmlvcmkgZWxlbWVudHMuXG4gKlxuICogVGhpcyBtZXRob2QgZW5hYmxlcyB5b3UgdG8gY2hhbmdlIHRoZSBwYWdlIGNvbmZpZ3VyYXRpb24gb2YgU0FQIEZpb3JpIGVsZW1lbnRzLlxuICpcbiAqIEBwYXJhbSBtYW5pZmVzdCBUaGUgb3JpZ2luYWwgbWFuaWZlc3QuXG4gKiBAcGFyYW0gcGFnZUlkIFRoZSBJRCBvZiB0aGUgcGFnZSBmb3Igd2hpY2ggdGhlIGNvbmZpZ3VyYXRpb24gaXMgdG8gYmUgY2hhbmdlZC5cbiAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIGluIHRoZSBwYWdlIHNldHRpbmdzIGZvciB3aGljaCB0aGUgY29uZmlndXJhdGlvbiBpcyB0byBiZSBjaGFuZ2VkLlxuICogQHBhcmFtIHZhbHVlIFRoZSBuZXcgdmFsdWUgb2YgdGhlIGNvbmZpZ3VyYXRpb24uIFRoaXMgY291bGQgYmUgYSBwbGFpbiB2YWx1ZSBsaWtlIGEgc3RyaW5nLCBvciBhIEJvb2xlYW4sIG9yIGEgc3RydWN0dXJlZCBvYmplY3QuXG4gKiBAcGFyYW0gbGF0ZUNoYW5nZSBJbmRpY2F0ZXMgdGhhdCB0aGUgY2hhbmdlIHdhcyBkb25lIGFmdGVyIGFwcGxpY2F0aW9uIHN0YXJ0dXAgKGZvciBleGFtcGxlIHdoZW4gdXNpbmcgdGhlIGZlYXR1cmUgdG9nZ2xlKS5cbiAqIEBwYXJhbSBhcHBDb21wb25lbnQgVGhlIGFwcENvbXBvbmVudCwgaW4gY2FzZSB0aGUgY2hhbmdlIGlzIGRvbmUgYWZ0ZXIgYXBwbGljYXRpb24gc3RhcnR1cC5cbiAqIEByZXR1cm5zIFRoZSBjaGFuZ2VkIG9yIHVuY2hhbmdlZCBtYW5pZmVzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZUNvbmZpZ3VyYXRpb24oXG5cdG1hbmlmZXN0OiBNYW5pZmVzdENvbnRlbnQsXG5cdHBhZ2VJZDogc3RyaW5nLFxuXHRwYXRoOiBzdHJpbmcsXG5cdHZhbHVlOiB1bmtub3duLFxuXHRsYXRlQ2hhbmdlPzogYm9vbGVhbixcblx0YXBwQ29tcG9uZW50PzogQXBwQ29tcG9uZW50XG4pOiBvYmplY3Qge1xuXHRjb25zdCBwYWdlU2V0dGluZ3MgPSBnZXRQYWdlU2V0dGluZ3MobWFuaWZlc3QsIHBhZ2VJZCk7XG5cblx0aWYgKHBhZ2VTZXR0aW5ncykge1xuXHRcdGNvbnN0IHByb3BlcnR5UGF0aCA9IHJldHJpZXZlUHJvcGVydHlQYXRoKHBhdGgpO1xuXHRcdE9iamVjdFBhdGguc2V0KHByb3BlcnR5UGF0aCwgdmFsdWUsIHBhZ2VTZXR0aW5ncyk7XG5cdFx0aWYgKGxhdGVDaGFuZ2UgJiYgYXBwQ29tcG9uZW50KSB7XG5cdFx0XHRhcHBDb21wb25lbnQucGFnZUNvbmZpZ3VyYXRpb25DaGFuZ2VzW3BhZ2VJZF0gPSBhcHBDb21wb25lbnQucGFnZUNvbmZpZ3VyYXRpb25DaGFuZ2VzW3BhZ2VJZF0gfHwgW107XG5cdFx0XHRhcHBDb21wb25lbnQucGFnZUNvbmZpZ3VyYXRpb25DaGFuZ2VzW3BhZ2VJZF0ucHVzaChwYXRoKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0TG9nLmVycm9yKGBObyBGaW9yaSBlbGVtZW50cyBwYWdlIHdpdGggSUQgJHtwYWdlSWR9IGZvdW5kIGluIHJvdXRpbmcgdGFyZ2V0cy5gKTtcblx0fVxuXG5cdHJldHVybiBtYW5pZmVzdDtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgYW4gYXJyYXkgd2l0aCB0aGUgcHJvcGVydHkgcGF0aCBwYXJ0cyBhbmQgY29uc2lkZXIgdGhlIGNvbnRyb2xDb25maWd1cmF0aW9uIHNwZWNpYWxseS5cbiAqXG4gKiBAcGFyYW0gcGF0aCBUaGUgZ2l2ZW4gcHJvcGVydHkgcGF0aFxuICogQHJldHVybnMgQW4gYXJyYXkgd2l0aCB0aGUgcHJvcGVydHkgcGF0aCBwYXJ0cy5cbiAqL1xuZnVuY3Rpb24gcmV0cmlldmVQcm9wZXJ0eVBhdGgocGF0aDogc3RyaW5nKTogc3RyaW5nW10ge1xuXHRsZXQgcHJvcGVydHlQYXRoID0gcGF0aC5zcGxpdChcIi9cIik7XG5cdGlmIChwcm9wZXJ0eVBhdGhbMF0gPT09IFwiY29udHJvbENvbmZpZ3VyYXRpb25cIikge1xuXHRcdGxldCBhbm5vdGF0aW9uUGF0aCA9IFwiXCI7XG5cdFx0Ly8gdGhlIGFubm90YXRpb24gcGF0aCBpbiB0aGUgY29udHJvbCBjb25maWd1cmF0aW9uIGhhcyB0byBzdGF5IHRvZ2V0aGVyLiBGb3Igbm93IHJlbHkgb24gdGhlIGZhY3QgdGhlIEAgaXMgaW4gdGhlIGxhc3QgcGFydFxuXHRcdGZvciAobGV0IGkgPSAxOyBpIDwgcHJvcGVydHlQYXRoLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRhbm5vdGF0aW9uUGF0aCArPSAoaSA+IDEgPyBcIi9cIiA6IFwiXCIpICsgcHJvcGVydHlQYXRoW2ldO1xuXHRcdFx0aWYgKGFubm90YXRpb25QYXRoLmluY2x1ZGVzKFwiQFwiKSkge1xuXHRcdFx0XHRwcm9wZXJ0eVBhdGggPSBbXCJjb250cm9sQ29uZmlndXJhdGlvblwiLCBhbm5vdGF0aW9uUGF0aF0uY29uY2F0KHByb3BlcnR5UGF0aC5zbGljZShpICsgMSkpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHByb3BlcnR5UGF0aDtcbn1cblxuLyoqXG4gKiBTZWFyY2ggdGhlIHBhZ2Ugc2V0dGluZ3MgaW4gdGhlIG1hbmlmZXN0IGZvciBhIGdpdmVuIHBhZ2UgSUQuXG4gKlxuICogQHBhcmFtIG1hbmlmZXN0IFRoZSBtYW5pZmVzdCB3aGVyZSB0aGUgc2VhcmNoIGlzIGNhcnJpZWQgb3V0IHRvIGZpbmQgdGhlIHBhZ2Ugc2V0dGluZ3MuXG4gKiBAcGFyYW0gcGFnZUlkIFRoZSBJRCBvZiB0aGUgcGFnZS5cbiAqIEByZXR1cm5zIFRoZSBwYWdlIHNldHRpbmdzIGZvciB0aGUgcGFnZSBJRCBvciB1bmRlZmluZWQgaWYgbm90IGZvdW5kLlxuICovXG5mdW5jdGlvbiBnZXRQYWdlU2V0dGluZ3MobWFuaWZlc3Q6IE1hbmlmZXN0Q29udGVudCwgcGFnZUlkOiBzdHJpbmcpOiBvYmplY3QgfCB1bmRlZmluZWQge1xuXHRsZXQgcGFnZVNldHRpbmdzO1xuXHRjb25zdCB0YXJnZXRzID0gbWFuaWZlc3RbXCJzYXAudWk1XCJdPy5yb3V0aW5nPy50YXJnZXRzID8/IHt9O1xuXHRmb3IgKGNvbnN0IHAgaW4gdGFyZ2V0cykge1xuXHRcdGlmICh0YXJnZXRzW3BdLmlkID09PSBwYWdlSWQgJiYgdGFyZ2V0c1twXS5uYW1lLnN0YXJ0c1dpdGgoXCJzYXAuZmUudGVtcGxhdGVzLlwiKSkge1xuXHRcdFx0cGFnZVNldHRpbmdzID0gdGFyZ2V0c1twXS5vcHRpb25zPy5zZXR0aW5ncyA/PyB7fTtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcGFnZVNldHRpbmdzO1xufVxuXG4vKipcbiAqIEFwcGxpZXMgcGFnZSBjb25maWd1cmF0aW9uIGNoYW5nZXMgdG8gdmlldyBkYXRhIG9iamVjdC5cbiAqXG4gKiBVSTUgcm91dGluZyBjbG9uZXMgdGhlIG1hbmlmZXN0IHNldHRpbmdzIGR1cmluZyB0aGUgYXBwIGluaXQsIGV2ZW4gYmVmb3JlIHRoZSByb3V0ZXIgd2FzIGluaXRpYWxpemVkLlxuICogQXMgd2UgYWxsb3cgY2hhbmdpbmcgdGhlIG1hbmlmZXN0IGluIHRoZSBhc3luYyBpbml0aWFsaXplRmVhdHVyZVRvZ2dsZSBob29rLCB0aGUgdmlldyBkYXRhIG1pZ2h0IG5vdCBmaXQgdGhlIGN1cnJlbnRcbiAqIG1hbmlmZXN0IHNldHRpbmdzLCB0aGVyZWZvcmUgKHJlKWFwcGx5aW5nIHRoZSByZWdpc3RlcmVkIHBhZ2UgY29uZmlndXJhdGlvbiBjaGFuZ2VzIHRvIHRoZSB2aWV3IGRhdGEgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBtYW5pZmVzdCBUaGUgY3VycmVudCBwYWdlIG1hbmlmZXN0IHNldHRpbmdzLlxuICogQHBhcmFtIHZpZXdEYXRhIFRoZSBjdXJyZW50IHZpZXdEYXRhIHNldHRpbmdzLlxuICogQHBhcmFtIGFwcENvbXBvbmVudCBUaGUgYXBwIGNvbXBvbmVudCBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYWdlSWQgVGhlIElEIG9mIHRoZSBwYWdlLlxuICogQHJldHVybnMgVGhlIHVwZGF0ZWQgdmlld0RhdGEgc2V0dGluZ3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseVBhZ2VDb25maWd1cmF0aW9uQ2hhbmdlcyhtYW5pZmVzdDogb2JqZWN0LCB2aWV3RGF0YTogVmlld0RhdGEsIGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LCBwYWdlSWQ6IHN0cmluZyk6IFZpZXdEYXRhIHtcblx0dmlld0RhdGEgPSB2aWV3RGF0YSA/PyB7fTtcblx0Y29uc3QgcGFnZUNoYW5nZXM6IHN0cmluZ1tdID0gYXBwQ29tcG9uZW50LnBhZ2VDb25maWd1cmF0aW9uQ2hhbmdlc1twYWdlSWRdIHx8IFtdO1xuXHRmb3IgKGNvbnN0IHBhdGggb2YgcGFnZUNoYW5nZXMpIHtcblx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSByZXRyaWV2ZVByb3BlcnR5UGF0aChwYXRoKTtcblx0XHRjb25zdCBtYW5pZmVzdFZhbHVlID0gT2JqZWN0UGF0aC5nZXQocHJvcGVydHlQYXRoLCBtYW5pZmVzdCk7XG5cdFx0T2JqZWN0UGF0aC5zZXQocHJvcGVydHlQYXRoLCBtYW5pZmVzdFZhbHVlLCB2aWV3RGF0YSk7XG5cdH1cblx0cmV0dXJuIHZpZXdEYXRhO1xufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7OztFQXFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ08sU0FBU0EsV0FBVyxDQUFDQyxRQUF5QixFQUFFQyxNQUFjLEVBQVU7SUFDOUUsTUFBTUMsYUFBYSxHQUFHRCxNQUFNLENBQUNFLFVBQVUsRUFBRTtJQUN6QyxNQUFNQyxNQUFNLEdBQUdGLGFBQWEsYUFBYkEsYUFBYSx1QkFBYkEsYUFBYSxDQUFFRyxJQUFJO0lBQ2xDLE1BQU1DLGNBQWMsR0FBR0osYUFBYSxhQUFiQSxhQUFhLHVCQUFiQSxhQUFhLENBQUVLLG9CQUFvQjs7SUFFMUQ7SUFDQSxJQUNDLENBQUFELGNBQWMsYUFBZEEsY0FBYyx1QkFBZEEsY0FBYyxDQUFFRSxTQUFTLE1BQUssUUFBUSxJQUN0QyxFQUFDRixjQUFjLGFBQWRBLGNBQWMsZUFBZEEsY0FBYyxDQUFFRyxZQUFZLEtBQzdCLENBQUFILGNBQWMsYUFBZEEsY0FBYyx1QkFBZEEsY0FBYyxDQUFFSSxh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
|
|
@@ -4,8 +4,6 @@ import type AppComponent from "sap/fe/core/AppComponent";
|
|
|
4
4
|
import type { ViewData } from "sap/fe/core/services/TemplatedViewServiceFactory";
|
|
5
5
|
import type { ManifestContent } from "sap/ui/core/Manifest";
|
|
6
6
|
|
|
7
|
-
let pageConfigurationChanges: Record<string, string[]> = {};
|
|
8
|
-
|
|
9
7
|
export type Change = {
|
|
10
8
|
getContent(): ChangeContent;
|
|
11
9
|
};
|
|
@@ -60,18 +58,26 @@ export function applyChange(manifest: ManifestContent, change: Change): object {
|
|
|
60
58
|
* @param pageId The ID of the page for which the configuration is to be changed.
|
|
61
59
|
* @param path The path in the page settings for which the configuration is to be changed.
|
|
62
60
|
* @param value The new value of the configuration. This could be a plain value like a string, or a Boolean, or a structured object.
|
|
63
|
-
* @param lateChange Indicates that the change was done after application startup (
|
|
61
|
+
* @param lateChange Indicates that the change was done after application startup (for example when using the feature toggle).
|
|
62
|
+
* @param appComponent The appComponent, in case the change is done after application startup.
|
|
64
63
|
* @returns The changed or unchanged manifest.
|
|
65
64
|
*/
|
|
66
|
-
export function changeConfiguration(
|
|
65
|
+
export function changeConfiguration(
|
|
66
|
+
manifest: ManifestContent,
|
|
67
|
+
pageId: string,
|
|
68
|
+
path: string,
|
|
69
|
+
value: unknown,
|
|
70
|
+
lateChange?: boolean,
|
|
71
|
+
appComponent?: AppComponent
|
|
72
|
+
): object {
|
|
67
73
|
const pageSettings = getPageSettings(manifest, pageId);
|
|
68
74
|
|
|
69
75
|
if (pageSettings) {
|
|
70
76
|
const propertyPath = retrievePropertyPath(path);
|
|
71
77
|
ObjectPath.set(propertyPath, value, pageSettings);
|
|
72
|
-
if (lateChange) {
|
|
73
|
-
pageConfigurationChanges[pageId] = pageConfigurationChanges[pageId] || [];
|
|
74
|
-
pageConfigurationChanges[pageId].push(path);
|
|
78
|
+
if (lateChange && appComponent) {
|
|
79
|
+
appComponent.pageConfigurationChanges[pageId] = appComponent.pageConfigurationChanges[pageId] || [];
|
|
80
|
+
appComponent.pageConfigurationChanges[pageId].push(path);
|
|
75
81
|
}
|
|
76
82
|
} else {
|
|
77
83
|
Log.error(`No Fiori elements page with ID ${pageId} found in routing targets.`);
|
|
@@ -136,7 +142,7 @@ function getPageSettings(manifest: ManifestContent, pageId: string): object | un
|
|
|
136
142
|
*/
|
|
137
143
|
export function applyPageConfigurationChanges(manifest: object, viewData: ViewData, appComponent: AppComponent, pageId: string): ViewData {
|
|
138
144
|
viewData = viewData ?? {};
|
|
139
|
-
const pageChanges: string[] = pageConfigurationChanges[pageId] || [];
|
|
145
|
+
const pageChanges: string[] = appComponent.pageConfigurationChanges[pageId] || [];
|
|
140
146
|
for (const path of pageChanges) {
|
|
141
147
|
const propertyPath = retrievePropertyPath(path);
|
|
142
148
|
const manifestValue = ObjectPath.get(propertyPath, manifest);
|
|
@@ -144,11 +150,3 @@ export function applyPageConfigurationChanges(manifest: object, viewData: ViewDa
|
|
|
144
150
|
}
|
|
145
151
|
return viewData;
|
|
146
152
|
}
|
|
147
|
-
|
|
148
|
-
/**
|
|
149
|
-
* Cleans all registered page configuration changes.
|
|
150
|
-
*
|
|
151
|
-
*/
|
|
152
|
-
export function cleanPageConfigurationChanges(): void {
|
|
153
|
-
pageConfigurationChanges = {};
|
|
154
|
-
}
|