@sapui5/sap.fe.macros 1.120.21 → 1.120.22
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/macros/.library +1 -1
- package/src/sap/fe/macros/CommonHelper.js +3 -3
- package/src/sap/fe/macros/CommonHelper.ts +4 -2
- package/src/sap/fe/macros/field/FieldBaseDelegate.js +58 -7
- package/src/sap/fe/macros/field/FieldBaseDelegate.ts +44 -2
- package/src/sap/fe/macros/field/FieldRuntime.js +5 -2
- package/src/sap/fe/macros/field/FieldRuntime.ts +7 -3
- package/src/sap/fe/macros/library.js +1 -1
- package/src/sap/fe/macros/messagebundle_ar.properties +4 -4
- package/src/sap/fe/macros/messagebundle_da.properties +3 -3
- package/src/sap/fe/macros/messagebundle_de.properties +2 -2
- package/src/sap/fe/macros/messagebundle_es.properties +2 -2
- package/src/sap/fe/macros/messagebundle_es_MX.properties +2 -2
- package/src/sap/fe/macros/messagebundle_fr_CA.properties +2 -2
- package/src/sap/fe/macros/messagebundle_hr.properties +1 -1
- package/src/sap/fe/macros/messagebundle_id.properties +1 -1
- package/src/sap/fe/macros/messagebundle_kk.properties +3 -3
- package/src/sap/fe/macros/messagebundle_ko.properties +1 -1
- package/src/sap/fe/macros/messagebundle_lv.properties +2 -2
- package/src/sap/fe/macros/messagebundle_mk.properties +2 -2
- package/src/sap/fe/macros/messagebundle_nl.properties +1 -1
- package/src/sap/fe/macros/messagebundle_ru.properties +7 -7
- package/src/sap/fe/macros/messagebundle_sl.properties +9 -9
- package/src/sap/fe/macros/messagebundle_sv.properties +1 -1
- package/src/sap/fe/macros/messagebundle_th.properties +1 -1
- package/src/sap/fe/macros/messagebundle_vi.properties +2 -2
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +12 -4
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +11 -3
package/package.json
CHANGED
|
@@ -93,7 +93,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/B
|
|
|
93
93
|
return `${entitySet}/$NavigationPropertyBinding/${navigationCollection}`; // used in gotoTargetEntitySet method in the same file
|
|
94
94
|
},
|
|
95
95
|
|
|
96
|
-
isPropertyFilterable: function (context, oDataField) {
|
|
96
|
+
isPropertyFilterable: function (context, oDataField, skipHiddenFilters) {
|
|
97
97
|
const oModel = context.getModel(),
|
|
98
98
|
sPropertyPath = context.getPath(),
|
|
99
99
|
// LoacationPath would be the prefix of sPropertyPath, example: sPropertyPath = '/Customer/Set/Name' -> sPropertyLocationPath = '/Customer/Set'
|
|
@@ -102,7 +102,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/B
|
|
|
102
102
|
if (oDataField && (oDataField.$Type === "com.sap.vocabularies.UI.v1.DataFieldForAction" || oDataField.$Type === "com.sap.vocabularies.UI.v1.DataFieldForIntentBasedNavigation")) {
|
|
103
103
|
return false;
|
|
104
104
|
}
|
|
105
|
-
return isPropertyFilterable(oModel, sPropertyLocationPath, sProperty);
|
|
105
|
+
return isPropertyFilterable(oModel, sPropertyLocationPath, sProperty, skipHiddenFilters);
|
|
106
106
|
},
|
|
107
107
|
getLocationForPropertyPath: function (oModel, sPropertyPath) {
|
|
108
108
|
let iLength;
|
|
@@ -803,4 +803,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/B
|
|
|
803
803
|
CommonHelper.getSortConditions.requiresIContext = true;
|
|
804
804
|
return CommonHelper;
|
|
805
805
|
}, false);
|
|
806
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJWYWx1ZUNvbG9yIiwibUxpYnJhcnkiLCJDb21tb25IZWxwZXIiLCJnZXRQYXRoVG9LZXkiLCJvQ3R4IiwiZ2V0T2JqZWN0IiwiaXNWaXNpYmxlIiwidGFyZ2V0Iiwib0ludGVyZmFjZSIsIm9Nb2RlbCIsImNvbnRleHQiLCJnZXRNb2RlbCIsInNQcm9wZXJ0eVBhdGgiLCJnZXRQYXRoIiwib0Fubm90YXRpb25zIiwiaGlkZGVuIiwiJFBhdGgiLCJnZXRQYXJhbWV0ZXJFZGl0TW9kZSIsImZpZWxkQ29udHJvbCIsImltbXV0YWJsZSIsImNvbXB1dGVkIiwic0VkaXRNb2RlIiwiRmllbGRFZGl0TW9kZSIsIkVkaXRhYmxlIiwiUmVhZE9ubHkiLCIkRW51bU1lbWJlciIsIkRpc2FibGVkIiwiZ2V0TWV0YVBhdGgiLCJ1bmRlZmluZWQiLCJpc0Rlc2t0b3AiLCJEZXZpY2UiLCJzeXN0ZW0iLCJkZXNrdG9wIiwiZ2V0VGFyZ2V0Q29sbGVjdGlvblBhdGgiLCJuYXZDb2xsZWN0aW9uIiwic1BhdGgiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJnZXRNZXRhTW9kZWwiLCJhUGFydHMiLCJzcGxpdCIsImZpbHRlciIsInNQYXJ0IiwiZW50aXR5U2V0IiwibGVuZ3RoIiwibmF2aWdhdGlvbkNvbGxlY3Rpb24iLCJzbGljZSIsImpvaW4iLCJpc1Byb3BlcnR5RmlsdGVyYWJsZSIsIm9EYXRhRmllbGQiLCJzUHJvcGVydHlMb2NhdGlvblBhdGgiLCJnZXRMb2NhdGlvbkZvclByb3BlcnR5UGF0aCIsInNQcm9wZXJ0eSIsInJlcGxhY2UiLCIkVHlwZSIsImlMZW5ndGgiLCJzQ29sbGVjdGlvblBhdGgiLCJsYXN0SW5kZXhPZiIsImluZGV4T2YiLCJnb3RvQWN0aW9uUGFyYW1ldGVyIiwib0NvbnRleHQiLCJzUHJvcGVydHlOYW1lIiwiQ29tbW9uVXRpbHMiLCJnZXRQYXJhbWV0ZXJQYXRoIiwiZ2V0RW50aXR5U2V0TmFtZSIsIm9NZXRhTW9kZWwiLCJzRW50aXR5VHlwZSIsIm9FbnRpdHlDb250YWluZXIiLCJrZXkiLCJnZXRBY3Rpb25QYXRoIiwib0FjdGlvbiIsImJSZXR1cm5Pbmx5UGF0aCIsInNBY3Rpb25OYW1lIiwiYkNoZWNrU3RhdGljVmFsdWUiLCJzQ29udGV4dFBhdGgiLCJpbmNsdWRlcyIsInNFbnRpdHlUeXBlTmFtZSIsInNFbnRpdHlOYW1lIiwic0JpbmRpbmdQYXJhbWV0ZXIiLCJnZXROYXZpZ2F0aW9uQ29udGV4dCIsIk9EYXRhTW9kZWxBbm5vdGF0aW9uSGVscGVyIiwiZ2V0TmF2aWdhdGlvblBhdGgiLCJiS2VlcFByb3BlcnR5IiwiYlN0YXJ0c1dpdGhFbnRpdHlUeXBlIiwic3RhcnRzV2l0aCIsInBhcnQiLCJzaGlmdCIsInBvcCIsImdldEFjdGlvbkNvbnRleHQiLCJnZXRQYXRoVG9Cb3VuZEFjdGlvbk92ZXJsb2FkIiwiYWRkU2luZ2xlUXVvdGVzIiwic1ZhbHVlIiwiYkVzY2FwZSIsImVzY2FwZVNpbmdsZVF1b3RlcyIsImdlbmVyYXRlRnVuY3Rpb24iLCJzRnVuY05hbWUiLCJzUGFyYW1zIiwiaSIsInNGdW5jdGlvbiIsImdldEhlYWRlckRhdGFQb2ludExpbmtWaXNpYmlsaXR5IiwiYkxpbmsiLCJiRmllbGRWaXNpYmlsaXR5Iiwic1Zpc2liaWxpdHlFeHAiLCJvYmplY3RUb1N0cmluZyIsIm9QYXJhbXMiLCJpTnVtYmVyT2ZLZXlzIiwiT2JqZWN0Iiwia2V5cyIsInNLZXkiLCJyZW1vdmVFc2NhcGVDaGFyYWN0ZXJzIiwic0V4cHJlc3Npb24iLCJzdHJpbmdpZnlPYmplY3QiLCJzU3RyaW5naWZpZWQiLCJvT2JqZWN0IiwiSlNPTiIsInBhcnNlIiwiQXJyYXkiLCJpc0FycmF5Iiwib1VJNU9iamVjdCIsInVpNW9iamVjdCIsImFzc2lnbiIsInN0cmluZ2lmeSIsInNUeXBlIiwiTG9nIiwiZXJyb3IiLCJFcnJvciIsInN0cmluZ2lmeUN1c3RvbURhdGEiLCJ2RGF0YSIsIkNvbnRleHQiLCJwYXJzZUN1c3RvbURhdGEiLCJoYXNPd25Qcm9wZXJ0eSIsImdldENvbnRleHRQYXRoIiwib1ZhbHVlIiwiZ2V0U29ydENvbmRpdGlvbnMiLCJvUHJlc2VudGF0aW9uVmFyaWFudCIsInNQcmVzZW50YXRpb25WYXJpYW50UGF0aCIsIl9pc1ByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwiU29ydE9yZGVyIiwiYVNvcnRDb25kaXRpb25zIiwic29ydGVycyIsInNFbnRpdHlQYXRoIiwiZm9yRWFjaCIsIm9Db25kaXRpb24iLCJvU29ydFByb3BlcnR5Iiwib1NvcnRlciIsIkR5bmFtaWNQcm9wZXJ0eSIsIiRBbm5vdGF0aW9uUGF0aCIsIk5hbWUiLCJQcm9wZXJ0eSIsIiRQcm9wZXJ0eVBhdGgiLCJuYW1lIiwiZGVzY2VuZGluZyIsIkRlc2NlbmRpbmciLCJwdXNoIiwiYW5ub3RhdGlvblBhdGgiLCJjcmVhdGVQcmVzZW50YXRpb25QYXRoQ29udGV4dCIsIm9QcmVzZW50YXRpb25Db250ZXh0IiwiYVBhdGhzIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJnZXRQcmVzc0hhbmRsZXJGb3JEYXRhRmllbGRGb3JJQk4iLCJzQ29udGV4dCIsImJOYXZpZ2F0ZVdpdGhDb25maXJtYXRpb25EaWFsb2ciLCJtTmF2aWdhdGlvblBhcmFtZXRlcnMiLCJuYXZpZ2F0aW9uQ29udGV4dHMiLCJSZXF1aXJlc0NvbnRleHQiLCJJbmxpbmUiLCJhcHBsaWNhYmxlQ29udGV4dHMiLCJTZW1hbnRpY09iamVjdCIsIkFjdGlvbiIsIm5vdEFwcGxpY2FibGVDb250ZXh0cyIsImxhYmVsIiwiTGFiZWwiLCJNYXBwaW5nIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwiZ2V0RW50aXR5U2V0IiwiTW9kZWxIZWxwZXIiLCJnZXRFbnRpdHlTZXRQYXRoIiwiaGFuZGxlVmlzaWJpbGl0eU9mTWVudUFjdGlvbnMiLCJzVmlzaWJsZVZhbHVlIiwiY29tYmluZWRDb25kaXRpb25zIiwiZ2V0Q3JpdGljYWxpdHlDYWxjdWxhdGlvbkJpbmRpbmciLCJzSW1wcm92ZW1lbnREaXJlY3Rpb24iLCJzRGV2aWF0aW9uTG93Iiwic1RvbGVyYW5jZUxvdyIsInNBY2NlcHRhbmNlTG93Iiwic0FjY2VwdGFuY2VIaWdoIiwic1RvbGVyYW5jZUhpZ2giLCJzRGV2aWF0aW9uSGlnaCIsInNDcml0aWNhbGl0eUV4cHJlc3Npb24iLCJOZXV0cmFsIiwiSW5maW5pdHkiLCJHb29kIiwiQ3JpdGljYWwiLCJ3YXJuaW5nIiwiZ2V0TWVhc3VyZUF0dHJpYnV0ZUluZGV4IiwiaU1lYXN1cmUiLCJvQ2hhcnRBbm5vdGF0aW9ucyIsImFNZWFzdXJlcyIsInNNZWFzdXJlUHJvcGVydHlQYXRoIiwiTWVhc3VyZXMiLCJEeW5hbWljTWVhc3VyZXMiLCJiTWVhc3VyZUF0dHJpYnV0ZUV4aXN0cyIsImFNZWFzdXJlQXR0cmlidXRlcyIsIk1lYXN1cmVBdHRyaWJ1dGVzIiwiaU1lYXN1cmVBdHRyaWJ1dGUiLCJmbkNoZWNrTWVhc3VyZSIsInNNZWFzdXJlUGF0aCIsIm9NZWFzdXJlQXR0cmlidXRlIiwiaW5kZXgiLCJNZWFzdXJlIiwiRHluYW1pY01lYXN1cmUiLCJzb21lIiwiYmluZCIsImdldE1lYXN1cmVBdHRyaWJ1dGUiLCJzQ2hhcnRBbm5vdGF0aW9uUGF0aCIsInJlcXVlc3RPYmplY3QiLCJ0aGVuIiwic01lYXN1cmVBdHRyaWJ1dGVQYXRoIiwiRGF0YVBvaW50IiwiZ2V0TWVhc3VyZUF0dHJpYnV0ZUZvck1lYXN1cmUiLCJzdWJzdHJpbmciLCJpc0RyYWZ0UGFyZW50RW50aXR5Rm9yQ29udGFpbm1lbnQiLCJvVGFyZ2V0Q29sbGVjdGlvbkNvbnRhaW5zVGFyZ2V0Iiwib1RhYmxlTWV0YWRhdGEiLCJwYXJlbnRFbnRpdHlTZXQiLCJzUGFyZW50RW50aXR5U2V0UGF0aCIsIm9EcmFmdFJvb3QiLCJvRHJhZnROb2RlIiwiZ2V0RGF0YUZyb21UZW1wbGF0ZSIsImRhdGFFbGVtZW50Iiwic3BsaXRQYXRoIiwiZGF0YUtleSIsImNvbm5lY3RlZERhdGFQYXRoIiwiY29ubmVjdGVkT2JqZWN0IiwidGVtcGxhdGUiLCJUZW1wbGF0ZSIsInNwbGl0VGVtcCIsInRlbXBBcnJheSIsInRyaW0iLCJEYXRhIiwibm90TGFzdEluZGV4IiwiZWxlbWVudCIsImlzTGFzdEluZGV4IiwidGVtcGxhdGVJbmZvIiwibGFzdEluZGV4IiwiZ2V0RGVsaW1pdGVyIiwic2V0TWV0YU1vZGVsIiwiZ2V0UGFyYW1ldGVycyIsIm9QYXJhbWV0ZXJJbmZvIiwiZ2V0UGFyYW1ldGVySW5mbyIsInBhcmFtZXRlclByb3BlcnRpZXMiLCJidWlsZEFjdGlvbldyYXBwZXIiLCJvVGhpcyIsImFQYXJhbXMiLCJyZWYiLCJoYW5kbGVyTW9kdWxlIiwiaGFuZGxlck1ldGhvZCIsImlkIiwib0FkZGl0aW9uYWxQYXJhbXMiLCJjb250ZXh0cyIsImNvbXBpbGVFeHByZXNzaW9uIiwiZm4iLCJnZXRIaWRkZW5QYXRoRXhwcmVzc2lvbiIsImRhdGFGaWVsZEFubm90YXRpb25zIiwidmFsaWRhdGVQcmVzZW50YXRpb25NZXRhUGF0aCIsIm1ldGFQYXRoIiwib2JqZWN0VGVybSIsImFsbG93ZWRUZXJtcyIsInRlcm0iLCJzZWFyY2giLCJSZWdFeHAiLCJyZXF1aXJlc0lDb250ZXh0Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJDb21tb25IZWxwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgQ3VzdG9tQWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHsgY29tcGlsZUV4cHJlc3Npb24sIGZuLCByZWYgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgaXNQcm9wZXJ0eUZpbHRlcmFibGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXRhTW9kZWxGdW5jdGlvblwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgbUxpYnJhcnkgZnJvbSBcInNhcC9tL2xpYnJhcnlcIjtcbmltcG9ydCBEZXZpY2UgZnJvbSBcInNhcC91aS9EZXZpY2VcIjtcbmltcG9ydCBGaWVsZEVkaXRNb2RlIGZyb20gXCJzYXAvdWkvbWRjL2VudW1zL0ZpZWxkRWRpdE1vZGVcIjtcbmltcG9ydCBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IE9EYXRhTW9kZWxBbm5vdGF0aW9uSGVscGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQW5ub3RhdGlvbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuXG5jb25zdCBWYWx1ZUNvbG9yID0gbUxpYnJhcnkuVmFsdWVDb2xvcjtcbmNvbnN0IENvbW1vbkhlbHBlciA9IHtcblx0Z2V0UGF0aFRvS2V5OiBmdW5jdGlvbiAob0N0eDogYW55KSB7XG5cdFx0cmV0dXJuIG9DdHguZ2V0T2JqZWN0KCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgaWYgYSBmaWVsZCBpcyB2aXNpYmxlLlxuXHQgKlxuXHQgKiBAcGFyYW0gdGFyZ2V0IFRhcmdldCBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gb0ludGVyZmFjZSBJbnRlcmZhY2UgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgUmV0dXJucyB0cnVlLCBmYWxzZSwgb3IgZXhwcmVzc2lvbiB3aXRoIHBhdGhcblx0ICovXG5cdGlzVmlzaWJsZTogZnVuY3Rpb24gKHRhcmdldDogb2JqZWN0LCBvSW50ZXJmYWNlOiBhbnkpIHtcblx0XHRjb25zdCBvTW9kZWwgPSBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0TW9kZWwoKSxcblx0XHRcdHNQcm9wZXJ0eVBhdGggPSBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0UGF0aCgpLFxuXHRcdFx0b0Fubm90YXRpb25zID0gb01vZGVsLmdldE9iamVjdChgJHtzUHJvcGVydHlQYXRofUBgKSxcblx0XHRcdGhpZGRlbiA9IG9Bbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5cIl07XG5cblx0XHRyZXR1cm4gdHlwZW9mIGhpZGRlbiA9PT0gXCJvYmplY3RcIiA/IFwiez0gISR7XCIgKyBoaWRkZW4uJFBhdGggKyBcIn0gfVwiIDogIWhpZGRlbjtcblx0fSxcblx0LyoqXG5cdCAqIERldGVybWluZSBpZiBmaWVsZCBpcyBlZGl0YWJsZS5cblx0ICpcblx0ICogQHBhcmFtIHRhcmdldCBUYXJnZXQgaW5zdGFuY2Vcblx0ICogQHBhcmFtIG9JbnRlcmZhY2UgSW50ZXJmYWNlIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEEgQmluZGluZyBFeHByZXNzaW9uIHRvIGRldGVybWluZSBpZiBhIGZpZWxkIHNob3VsZCBiZSBlZGl0YWJsZSBvciBub3QuXG5cdCAqL1xuXHRnZXRQYXJhbWV0ZXJFZGl0TW9kZTogZnVuY3Rpb24gKHRhcmdldDogb2JqZWN0LCBvSW50ZXJmYWNlOiBhbnkpIHtcblx0XHRjb25zdCBvTW9kZWwgPSBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0TW9kZWwoKSxcblx0XHRcdHNQcm9wZXJ0eVBhdGggPSBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0UGF0aCgpLFxuXHRcdFx0b0Fubm90YXRpb25zID0gb01vZGVsLmdldE9iamVjdChgJHtzUHJvcGVydHlQYXRofUBgKSxcblx0XHRcdGZpZWxkQ29udHJvbCA9IG9Bbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmllbGRDb250cm9sXCJdLFxuXHRcdFx0aW1tdXRhYmxlID0gb0Fubm90YXRpb25zW1wiQE9yZy5PRGF0YS5Db3JlLlYxLkltbXV0YWJsZVwiXSxcblx0XHRcdGNvbXB1dGVkID0gb0Fubm90YXRpb25zW1wiQE9yZy5PRGF0YS5Db3JlLlYxLkNvbXB1dGVkXCJdO1xuXG5cdFx0bGV0IHNFZGl0TW9kZTogRmllbGRFZGl0TW9kZSB8IHN0cmluZyA9IEZpZWxkRWRpdE1vZGUuRWRpdGFibGU7XG5cblx0XHRpZiAoaW1tdXRhYmxlIHx8IGNvbXB1dGVkKSB7XG5cdFx0XHRzRWRpdE1vZGUgPSBGaWVsZEVkaXRNb2RlLlJlYWRPbmx5O1xuXHRcdH0gZWxzZSBpZiAoZmllbGRDb250cm9sKSB7XG5cdFx0XHRpZiAoZmllbGRDb250cm9sLiRFbnVtTWVtYmVyKSB7XG5cdFx0XHRcdGlmIChmaWVsZENvbnRyb2wuJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpZWxkQ29udHJvbFR5cGUvUmVhZE9ubHlcIikge1xuXHRcdFx0XHRcdHNFZGl0TW9kZSA9IEZpZWxkRWRpdE1vZGUuUmVhZE9ubHk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGZpZWxkQ29udHJvbC4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmllbGRDb250cm9sVHlwZS9JbmFwcGxpY2FibGVcIiB8fFxuXHRcdFx0XHRcdGZpZWxkQ29udHJvbC4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmllbGRDb250cm9sVHlwZS9IaWRkZW5cIlxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRzRWRpdE1vZGUgPSBGaWVsZEVkaXRNb2RlLkRpc2FibGVkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoZmllbGRDb250cm9sLiRQYXRoKSB7XG5cdFx0XHRcdHNFZGl0TW9kZSA9XG5cdFx0XHRcdFx0XCJ7PSAle1wiICtcblx0XHRcdFx0XHRmaWVsZENvbnRyb2wuJFBhdGggK1xuXHRcdFx0XHRcdFwifSA8IDMgPyAoJXtcIiArXG5cdFx0XHRcdFx0ZmllbGRDb250cm9sLiRQYXRoICtcblx0XHRcdFx0XHRcIn0gPT09IDAgPyAnXCIgK1xuXHRcdFx0XHRcdEZpZWxkRWRpdE1vZGUuRGlzYWJsZWQgK1xuXHRcdFx0XHRcdFwiJyA6ICdcIiArXG5cdFx0XHRcdFx0RmllbGRFZGl0TW9kZS5SZWFkT25seSArXG5cdFx0XHRcdFx0XCInKSA6ICdcIiArXG5cdFx0XHRcdFx0RmllbGRFZGl0TW9kZS5FZGl0YWJsZSArXG5cdFx0XHRcdFx0XCInfVwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBzRWRpdE1vZGU7XG5cdH0sXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGNvbXBsZXRlIG1ldGFwYXRoIHRvIHRoZSB0YXJnZXQuXG5cdCAqXG5cdCAqIEBwYXJhbSB0YXJnZXRcblx0ICogQHBhcmFtIG9JbnRlcmZhY2Vcblx0ICogQHJldHVybnMgVGhlIG1ldGFwYXRoXG5cdCAqL1xuXHRnZXRNZXRhUGF0aDogZnVuY3Rpb24gKHRhcmdldDogYW55LCBvSW50ZXJmYWNlOiBhbnkpIHtcblx0XHRyZXR1cm4gKG9JbnRlcmZhY2UgJiYgb0ludGVyZmFjZS5jb250ZXh0ICYmIG9JbnRlcmZhY2UuY29udGV4dC5nZXRQYXRoKCkpIHx8IHVuZGVmaW5lZDtcblx0fSxcblx0aXNEZXNrdG9wOiBmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIERldmljZS5zeXN0ZW0uZGVza3RvcCA9PT0gdHJ1ZTtcblx0fSxcblx0Z2V0VGFyZ2V0Q29sbGVjdGlvblBhdGg6IGZ1bmN0aW9uIChjb250ZXh0OiBDb250ZXh0LCBuYXZDb2xsZWN0aW9uPzogYW55KSB7XG5cdFx0bGV0IHNQYXRoID0gY29udGV4dC5nZXRQYXRoKCk7XG5cdFx0aWYgKFxuXHRcdFx0Y29udGV4dC5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKSA9PT0gXCJzYXAudWkubW9kZWwuQ29udGV4dFwiICYmXG5cdFx0XHQoKGNvbnRleHQuZ2V0T2JqZWN0KFwiJGtpbmRcIikgYXMgdW5rbm93biBhcyBzdHJpbmcpID09PSBcIkVudGl0eVNldFwiIHx8XG5cdFx0XHRcdChjb250ZXh0LmdldE9iamVjdChcIiRDb250YWluc1RhcmdldFwiKSBhcyB1bmtub3duIGFzIGJvb2xlYW4pID09PSB0cnVlKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIHNQYXRoO1xuXHRcdH1cblx0XHRpZiAoY29udGV4dC5nZXRNb2RlbCkge1xuXHRcdFx0c1BhdGggPVxuXHRcdFx0XHQoY29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFQYXRoICYmIGNvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhUGF0aChzUGF0aCkpIHx8XG5cdFx0XHRcdGNvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSEuZ2V0TWV0YVBhdGgoc1BhdGgpO1xuXHRcdH1cblx0XHQvL1N1cHBvcnRpbmcgc1BhdGggb2YgYW55IGZvcm1hdCwgZWl0aGVyICcvPGVudGl0eVNldD4vPG5hdmlnYXRpb25Db2xsZWN0aW9uPicgPE9SPiAnLzxlbnRpdHlTZXQ+LyRUeXBlLzxuYXZpZ2F0aW9uQ29sbGVjdGlvbj4nXG5cdFx0Y29uc3QgYVBhcnRzID0gc1BhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihmdW5jdGlvbiAoc1BhcnQ6IGFueSkge1xuXHRcdFx0cmV0dXJuIHNQYXJ0ICYmIHNQYXJ0ICE9IFwiJFR5cGVcIjtcblx0XHR9KTsgLy9maWx0ZXIgb3V0IGVtcHR5IHN0cmluZ3MgYW5kIHBhcnRzIHJlZmVycmluZyB0byAnJFR5cGUnXG5cdFx0Y29uc3QgZW50aXR5U2V0ID0gYC8ke2FQYXJ0c1swXX1gO1xuXHRcdGlmIChhUGFydHMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRyZXR1cm4gZW50aXR5U2V0O1xuXHRcdH1cblx0XHRjb25zdCBuYXZpZ2F0aW9uQ29sbGVjdGlvbiA9IG5hdkNvbGxlY3Rpb24gPT09IHVuZGVmaW5lZCA/IGFQYXJ0cy5zbGljZSgxKS5qb2luKFwiLyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nL1wiKSA6IG5hdkNvbGxlY3Rpb247XG5cdFx0cmV0dXJuIGAke2VudGl0eVNldH0vJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcvJHtuYXZpZ2F0aW9uQ29sbGVjdGlvbn1gOyAvLyB1c2VkIGluIGdvdG9UYXJnZXRFbnRpdHlTZXQgbWV0aG9kIGluIHRoZSBzYW1lIGZpbGVcblx0fSxcblxuXHRpc1Byb3BlcnR5RmlsdGVyYWJsZTogZnVuY3Rpb24gKGNvbnRleHQ6IENvbnRleHQsIG9EYXRhRmllbGQ/OiBhbnkpIHtcblx0XHRjb25zdCBvTW9kZWwgPSBjb250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwsXG5cdFx0XHRzUHJvcGVydHlQYXRoID0gY29udGV4dC5nZXRQYXRoKCksXG5cdFx0XHQvLyBMb2FjYXRpb25QYXRoIHdvdWxkIGJlIHRoZSBwcmVmaXggb2Ygc1Byb3BlcnR5UGF0aCwgZXhhbXBsZTogc1Byb3BlcnR5UGF0aCA9ICcvQ3VzdG9tZXIvU2V0L05hbWUnIC0+IHNQcm9wZXJ0eUxvY2F0aW9uUGF0aCA9ICcvQ3VzdG9tZXIvU2V0J1xuXHRcdFx0c1Byb3BlcnR5TG9jYXRpb25QYXRoID0gQ29tbW9uSGVscGVyLmdldExvY2F0aW9uRm9yUHJvcGVydHlQYXRoKG9Nb2RlbCwgc1Byb3BlcnR5UGF0aCksXG5cdFx0XHRzUHJvcGVydHkgPSBzUHJvcGVydHlQYXRoLnJlcGxhY2UoYCR7c1Byb3BlcnR5TG9jYXRpb25QYXRofS9gLCBcIlwiKTtcblxuXHRcdGlmIChcblx0XHRcdG9EYXRhRmllbGQgJiZcblx0XHRcdChvRGF0YUZpZWxkLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFjdGlvblwiIHx8XG5cdFx0XHRcdG9EYXRhRmllbGQuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXCIpXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGlzUHJvcGVydHlGaWx0ZXJhYmxlKG9Nb2RlbCwgc1Byb3BlcnR5TG9jYXRpb25QYXRoLCBzUHJvcGVydHkpO1xuXHR9LFxuXG5cdGdldExvY2F0aW9uRm9yUHJvcGVydHlQYXRoOiBmdW5jdGlvbiAob01vZGVsOiBhbnksIHNQcm9wZXJ0eVBhdGg6IGFueSkge1xuXHRcdGxldCBpTGVuZ3RoO1xuXHRcdGxldCBzQ29sbGVjdGlvblBhdGggPSBzUHJvcGVydHlQYXRoLnNsaWNlKDAsIHNQcm9wZXJ0eVBhdGgubGFzdEluZGV4T2YoXCIvXCIpKTtcblx0XHRpZiAob01vZGVsLmdldE9iamVjdChgJHtzQ29sbGVjdGlvblBhdGh9LyRraW5kYCkgPT09IFwiRW50aXR5Q29udGFpbmVyXCIpIHtcblx0XHRcdGlMZW5ndGggPSBzQ29sbGVjdGlvblBhdGgubGVuZ3RoICsgMTtcblx0XHRcdHNDb2xsZWN0aW9uUGF0aCA9IHNQcm9wZXJ0eVBhdGguc2xpY2UoaUxlbmd0aCwgc1Byb3BlcnR5UGF0aC5pbmRleE9mKFwiL1wiLCBpTGVuZ3RoKSk7XG5cdFx0fVxuXHRcdHJldHVybiBzQ29sbGVjdGlvblBhdGg7XG5cdH0sXG5cdGdvdG9BY3Rpb25QYXJhbWV0ZXI6IGZ1bmN0aW9uIChvQ29udGV4dDogYW55KSB7XG5cdFx0Y29uc3Qgc1BhdGggPSBvQ29udGV4dC5nZXRQYXRoKCksXG5cdFx0XHRzUHJvcGVydHlOYW1lID0gb0NvbnRleHQuZ2V0T2JqZWN0KGAke3NQYXRofS8kTmFtZWApO1xuXG5cdFx0cmV0dXJuIENvbW1vblV0aWxzLmdldFBhcmFtZXRlclBhdGgoc1BhdGgsIHNQcm9wZXJ0eU5hbWUpO1xuXHR9LFxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgZW50aXR5IHNldCBuYW1lIGZyb20gdGhlIGVudGl0eSB0eXBlIG5hbWUuXG5cdCAqXG5cdCAqIEBwYXJhbSBvTWV0YU1vZGVsIE9EYXRhIHY0IG1ldGFtb2RlbCBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gc0VudGl0eVR5cGUgRW50aXR5VHlwZSBvZiB0aGUgYWN0aW9tXG5cdCAqIEByZXR1cm5zIFRoZSBFbnRpdHlTZXQgb2YgdGhlIGJvdW5kIGFjdGlvblxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICovXG5cdGdldEVudGl0eVNldE5hbWU6IGZ1bmN0aW9uIChvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgc0VudGl0eVR5cGU6IHN0cmluZykge1xuXHRcdGNvbnN0IG9FbnRpdHlDb250YWluZXIgPSBvTWV0YU1vZGVsLmdldE9iamVjdChcIi9cIik7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gb0VudGl0eUNvbnRhaW5lcikge1xuXHRcdFx0aWYgKHR5cGVvZiBvRW50aXR5Q29udGFpbmVyW2tleV0gPT09IFwib2JqZWN0XCIgJiYgb0VudGl0eUNvbnRhaW5lcltrZXldLiRUeXBlID09PSBzRW50aXR5VHlwZSkge1xuXHRcdFx0XHRyZXR1cm4ga2V5O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9LFxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgbWV0YW1vZGVsIHBhdGggY29ycmVjdGx5IGZvciBib3VuZCBhY3Rpb25zIGlmIHVzZWQgd2l0aCBiUmV0dXJuT25seVBhdGggYXMgdHJ1ZSxcblx0ICogZWxzZSByZXR1cm5zIGFuIG9iamVjdCB3aGljaCBoYXMgMyBwcm9wZXJ0aWVzIHJlbGF0ZWQgdG8gdGhlIGFjdGlvbi4gVGhleSBhcmUgdGhlIGVudGl0eSBzZXQgbmFtZSxcblx0ICogdGhlICRQYXRoIHZhbHVlIG9mIHRoZSBPcGVyYXRpb25BdmFpbGFibGUgYW5ub3RhdGlvbiBhbmQgdGhlIGJpbmRpbmcgcGFyYW1ldGVyIG5hbWUuIElmXG5cdCAqIGJDaGVja1N0YXRpY1ZhbHVlIGlzIHRydWUsIHJldHVybnMgdGhlIHN0YXRpYyB2YWx1ZSBvZiBPcGVyYXRpb25BdmFpbGFibGUgYW5ub3RhdGlvbiwgaWYgcHJlc2VudC5cblx0ICogZS5nLiBmb3IgYm91bmQgYWN0aW9uIHNvbWVOYW1lU3BhY2UuU29tZUJvdW5kQWN0aW9uXG5cdCAqIG9mIGVudGl0eSBzZXQgU29tZUVudGl0eVNldCwgdGhlIHN0cmluZyBcIi9Tb21lRW50aXR5U2V0L3NvbWVOYW1lU3BhY2UuU29tZUJvdW5kQWN0aW9uXCIgaXMgcmV0dXJuZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQWN0aW9uIFRoZSBjb250ZXh0IG9iamVjdCBvZiB0aGUgYWN0aW9uXG5cdCAqIEBwYXJhbSBiUmV0dXJuT25seVBhdGggSWYgZmFsc2UsIGFkZGl0aW9uYWwgaW5mbyBpcyByZXR1cm5lZCBhbG9uZyB3aXRoIG1ldGFtb2RlbCBwYXRoIHRvIHRoZSBib3VuZCBhY3Rpb25cblx0ICogQHBhcmFtIHNBY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBib3VuZCBhY3Rpb24gb2YgdGhlIGZvcm0gc29tZU5hbWVTcGFjZS5Tb21lQm91bmRBY3Rpb25cblx0ICogQHBhcmFtIGJDaGVja1N0YXRpY1ZhbHVlIElmIHRydWUsIHRoZSBzdGF0aWMgdmFsdWUgb2YgT3BlcmF0aW9uQXZhaWxhYmxlIGlzIHJldHVybmVkLCBpZiBwcmVzZW50XG5cdCAqIEByZXR1cm5zIFRoZSBzdHJpbmcgb3Igb2JqZWN0IGFzIHNwZWNpZmllZCBieSBiUmV0dXJuT25seVBhdGhcblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqL1xuXHRnZXRBY3Rpb25QYXRoOiBmdW5jdGlvbiAob0FjdGlvbjogYW55LCBiUmV0dXJuT25seVBhdGg6IGJvb2xlYW4sIHNBY3Rpb25OYW1lPzogc3RyaW5nLCBiQ2hlY2tTdGF0aWNWYWx1ZT86IGJvb2xlYW4pIHtcblx0XHRsZXQgc0NvbnRleHRQYXRoID0gb0FjdGlvbi5nZXRQYXRoKCkuc3BsaXQoXCIvQFwiKVswXTtcblxuXHRcdHNBY3Rpb25OYW1lID0gIXNBY3Rpb25OYW1lID8gb0FjdGlvbi5nZXRPYmplY3Qob0FjdGlvbi5nZXRQYXRoKCkpIDogc0FjdGlvbk5hbWU7XG5cblx0XHRpZiAoc0FjdGlvbk5hbWUgJiYgc0FjdGlvbk5hbWUuaW5jbHVkZXMoXCIoXCIpKSB7XG5cdFx0XHQvLyBhY3Rpb24gYm91bmQgdG8gYW5vdGhlciBlbnRpdHkgdHlwZVxuXHRcdFx0c0FjdGlvbk5hbWUgPSBzQWN0aW9uTmFtZS5zcGxpdChcIihcIilbMF07XG5cdFx0fSBlbHNlIGlmIChvQWN0aW9uLmdldE9iamVjdChzQ29udGV4dFBhdGgpKSB7XG5cdFx0XHQvLyBUT0RPOiB0aGlzIGxvZ2ljIHNvdW5kcyB3cm9uZywgdG8gYmUgY29ycmVjdGVkXG5cdFx0XHRjb25zdCBzRW50aXR5VHlwZU5hbWUgPSBvQWN0aW9uLmdldE9iamVjdChzQ29udGV4dFBhdGgpLiRUeXBlO1xuXHRcdFx0Y29uc3Qgc0VudGl0eU5hbWUgPSB0aGlzLmdldEVudGl0eVNldE5hbWUob0FjdGlvbi5nZXRNb2RlbCgpLCBzRW50aXR5VHlwZU5hbWUpO1xuXHRcdFx0aWYgKHNFbnRpdHlOYW1lKSB7XG5cdFx0XHRcdHNDb250ZXh0UGF0aCA9IGAvJHtzRW50aXR5TmFtZX1gO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gc0NvbnRleHRQYXRoO1xuXHRcdH1cblxuXHRcdGlmIChiQ2hlY2tTdGF0aWNWYWx1ZSkge1xuXHRcdFx0cmV0dXJuIG9BY3Rpb24uZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aH0vJHtzQWN0aW9uTmFtZX1AT3JnLk9EYXRhLkNvcmUuVjEuT3BlcmF0aW9uQXZhaWxhYmxlYCk7XG5cdFx0fVxuXHRcdGlmIChiUmV0dXJuT25seVBhdGgpIHtcblx0XHRcdHJldHVybiBgJHtzQ29udGV4dFBhdGh9LyR7c0FjdGlvbk5hbWV9YDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c0NvbnRleHRQYXRoOiBzQ29udGV4dFBhdGgsXG5cdFx0XHRcdHNQcm9wZXJ0eTogb0FjdGlvbi5nZXRPYmplY3QoYCR7c0NvbnRleHRQYXRofS8ke3NBY3Rpb25OYW1lfUBPcmcuT0RhdGEuQ29yZS5WMS5PcGVyYXRpb25BdmFpbGFibGUvJFBhdGhgKSxcblx0XHRcdFx0c0JpbmRpbmdQYXJhbWV0ZXI6IG9BY3Rpb24uZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aH0vJHtzQWN0aW9uTmFtZX0vQCR1aTUub3ZlcmxvYWQvMC8kUGFyYW1ldGVyLzAvJE5hbWVgKVxuXHRcdFx0fTtcblx0XHR9XG5cdH0sXG5cblx0Z2V0TmF2aWdhdGlvbkNvbnRleHQ6IGZ1bmN0aW9uIChvQ29udGV4dDogYW55KSB7XG5cdFx0cmV0dXJuIE9EYXRhTW9kZWxBbm5vdGF0aW9uSGVscGVyLmdldE5hdmlnYXRpb25QYXRoKG9Db250ZXh0LmdldFBhdGgoKSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHBhdGggd2l0aG91dCB0aGUgZW50aXR5IHR5cGUgKHBvdGVudGlhbGx5IGZpcnN0KSBhbmQgcHJvcGVydHkgKGxhc3QpIHBhcnQgKG9wdGlvbmFsKS5cblx0ICogVGhlIHJlc3VsdCBjYW4gYmUgYW4gZW1wdHkgc3RyaW5nIGlmIGl0IGlzIGEgc2ltcGxlIGRpcmVjdCBwcm9wZXJ0eS5cblx0ICpcblx0ICogSWYgYW5kIG9ubHkgaWYgdGhlIGdpdmVuIHByb3BlcnR5IHBhdGggc3RhcnRzIHdpdGggYSBzbGFzaCAoLyksIGl0IGlzIGNvbnNpZGVyZWQgdGhhdCB0aGUgZW50aXR5IHR5cGVcblx0ICogaXMgcGFydCBvZiB0aGUgcGF0aCBhbmQgd2lsbCBiZSBzdHJpcHBlZCBhd2F5LlxuXHQgKlxuXHQgKiBAcGFyYW0gc1Byb3BlcnR5UGF0aFxuXHQgKiBAcGFyYW0gYktlZXBQcm9wZXJ0eVxuXHQgKiBAcmV0dXJucyBUaGUgbmF2aWdhdGlvbiBwYXRoXG5cdCAqL1xuXHRnZXROYXZpZ2F0aW9uUGF0aDogZnVuY3Rpb24gKHNQcm9wZXJ0eVBhdGg6IGFueSwgYktlZXBQcm9wZXJ0eT86IGJvb2xlYW4pIHtcblx0XHRjb25zdCBiU3RhcnRzV2l0aEVudGl0eVR5cGUgPSBzUHJvcGVydHlQYXRoLnN0YXJ0c1dpdGgoXCIvXCIpO1xuXHRcdGNvbnN0IGFQYXJ0cyA9IHNQcm9wZXJ0eVBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihmdW5jdGlvbiAocGFydDogYW55KSB7XG5cdFx0XHRyZXR1cm4gISFwYXJ0O1xuXHRcdH0pO1xuXHRcdGlmIChiU3RhcnRzV2l0aEVudGl0eVR5cGUpIHtcblx0XHRcdGFQYXJ0cy5zaGlmdCgpO1xuXHRcdH1cblx0XHRpZiAoIWJLZWVwUHJvcGVydHkpIHtcblx0XHRcdGFQYXJ0cy5wb3AoKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFQYXJ0cy5qb2luKFwiL1wiKTtcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY29ycmVjdCBtZXRhbW9kZWwgcGF0aCBmb3IgYm91bmQgYWN0aW9ucy5cblx0ICpcblx0ICogU2luY2UgdGhpcyBtZXRob2QgaXMgY2FsbGVkIGlycmVzcGVjdGl2ZSBvZiB0aGUgYWN0aW9uIHR5cGUsIHRoaXMgd2lsbCBiZSBhcHBsaWVkIHRvIHVuYm91bmQgYWN0aW9ucy5cblx0ICogSW4gc3VjaCBhIGNhc2UsIGlmIGFuIGluY29ycmVjdCBwYXRoIGlzIHJldHVybmVkLCBpdCBpcyBpZ25vcmVkIGR1cmluZyB0ZW1wbGF0aW5nLlxuXHQgKlxuXHQgKiBFeGFtcGxlOiBmb3IgdGhlIGJvdW5kIGFjdGlvbiBzb21lTmFtZVNwYWNlLlNvbWVCb3VuZEFjdGlvbiBvZiBlbnRpdHkgc2V0IFNvbWVFbnRpdHlTZXQsXG5cdCAqIHRoZSBzdHJpbmcgXCIvU29tZUVudGl0eVNldC9zb21lTmFtZVNwYWNlLlNvbWVCb3VuZEFjdGlvblwiIGlzIHJldHVybmVkLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHN0YXRpY1xuXHQgKiBAbmFtZSBzYXAuZmUubWFjcm9zLkNvbW1vbkhlbHBlci5nZXRBY3Rpb25Db250ZXh0XG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUubWFjcm9zLkNvbW1vbkhlbHBlclxuXHQgKiBAcGFyYW0gb0FjdGlvbiBDb250ZXh0IG9iamVjdCBmb3IgdGhlIGFjdGlvblxuXHQgKiBAcmV0dXJucyBDb3JyZWN0IG1ldGFtb2RlbCBwYXRoIGZvciBib3VuZCBhbmQgaW5jb3JyZWN0IHBhdGggZm9yIHVuYm91bmQgYWN0aW9uc1xuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICovXG5cdGdldEFjdGlvbkNvbnRleHQ6IGZ1bmN0aW9uIChvQWN0aW9uOiBvYmplY3QpIHtcblx0XHRyZXR1cm4gQ29tbW9uSGVscGVyLmdldEFjdGlvblBhdGgob0FjdGlvbiwgdHJ1ZSk7XG5cdH0sXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBtZXRhbW9kZWwgcGF0aCBjb3JyZWN0bHkgZm9yIG92ZXJsb2FkZWQgYm91bmQgYWN0aW9ucy4gRm9yIHVuYm91bmQgYWN0aW9ucyxcblx0ICogdGhlIGluY29ycmVjdCBwYXRoIGlzIHJldHVybmVkLCBidXQgaWdub3JlZCBkdXJpbmcgdGVtcGxhdGluZy5cblx0ICogZS5nLiBmb3IgYm91bmQgYWN0aW9uIHNvbWVOYW1lU3BhY2UuU29tZUJvdW5kQWN0aW9uIG9mIGVudGl0eSBzZXQgU29tZUVudGl0eVNldCxcblx0ICogdGhlIHN0cmluZyBcIi9Tb21lRW50aXR5U2V0L3NvbWVOYW1lU3BhY2UuU29tZUJvdW5kQWN0aW9uL0AkdWk1Lm92ZXJsb2FkLzBcIiBpcyByZXR1cm5lZC5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBzdGF0aWNcblx0ICogQG5hbWUgc2FwLmZlLm1hY3Jvcy5Db21tb25IZWxwZXIuZ2V0UGF0aFRvQm91bmRBY3Rpb25PdmVybG9hZFxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLm1hY3Jvcy5Db21tb25IZWxwZXJcblx0ICogQHBhcmFtIG9BY3Rpb24gVGhlIGNvbnRleHQgb2JqZWN0IGZvciB0aGUgYWN0aW9uXG5cdCAqIEByZXR1cm5zIFRoZSBjb3JyZWN0IG1ldGFtb2RlbCBwYXRoIGZvciBib3VuZCBhY3Rpb24gb3ZlcmxvYWQgYW5kIGluY29ycmVjdCBwYXRoIGZvciB1bmJvdW5kIGFjdGlvbnNcblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqL1xuXHRnZXRQYXRoVG9Cb3VuZEFjdGlvbk92ZXJsb2FkOiBmdW5jdGlvbiAob0FjdGlvbjogb2JqZWN0KSB7XG5cdFx0Y29uc3Qgc1BhdGggPSBDb21tb25IZWxwZXIuZ2V0QWN0aW9uUGF0aChvQWN0aW9uLCB0cnVlKTtcblx0XHRyZXR1cm4gYCR7c1BhdGh9L0AkdWk1Lm92ZXJsb2FkLzBgO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBzdHJpbmcgd2l0aCBzaW5nbGUgcXVvdGVzLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG1lbWJlcm9mIHNhcC5mZS5tYWNyb3MuQ29tbW9uSGVscGVyXG5cdCAqIEBwYXJhbSBzVmFsdWUgU29tZSBzdHJpbmcgdGhhdCBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgaW50byBzaW5nbGUgcXVvdGVzXG5cdCAqIEBwYXJhbSBbYkVzY2FwZV0gU2hvdWxkIHRoZSBzdHJpbmcgYmUgZXNjYXBlZCBiZWZvcmVoYW5kXG5cdCAqIEByZXR1cm5zIC0gU3RyaW5nIHdpdGggc2luZ2xlIHF1b3Rlc1xuXHQgKi9cblx0YWRkU2luZ2xlUXVvdGVzOiBmdW5jdGlvbiAoc1ZhbHVlOiBzdHJpbmcsIGJFc2NhcGU/OiBib29sZWFuKSB7XG5cdFx0aWYgKGJFc2NhcGUgJiYgc1ZhbHVlKSB7XG5cdFx0XHRzVmFsdWUgPSB0aGlzLmVzY2FwZVNpbmdsZVF1b3RlcyhzVmFsdWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gYCcke3NWYWx1ZX0nYDtcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgc3RyaW5nIHdpdGggZXNjYXBlZCBzaW5nbGUgcXVvdGVzLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG1lbWJlcm9mIHNhcC5mZS5tYWNyb3MuQ29tbW9uSGVscGVyXG5cdCAqIEBwYXJhbSBzVmFsdWUgU29tZSBzdHJpbmcgdGhhdCBuZWVkcyBlc2NhcGluZyBvZiBzaW5nbGUgcXVvdGVzXG5cdCAqIEByZXR1cm5zIC0gU3RyaW5nIHdpdGggZXNjYXBlZCBzaW5nbGUgcXVvdGVzXG5cdCAqL1xuXHRlc2NhcGVTaW5nbGVRdW90ZXM6IGZ1bmN0aW9uIChzVmFsdWU6IHN0cmluZykge1xuXHRcdHJldHVybiBzVmFsdWUucmVwbGFjZSgvWyddL2csIFwiXFxcXCdcIik7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGZ1bmN0aW9uIHN0cmluZ1xuXHQgKiBUaGUgZmlyc3QgYXJndW1lbnQgb2YgZ2VuZXJhdGVGdW5jdGlvbiBpcyBuYW1lIG9mIHRoZSBnZW5lcmF0ZWQgZnVuY3Rpb24gc3RyaW5nLlxuXHQgKiBSZW1haW5pbmcgYXJndW1lbnRzIG9mIGdlbmVyYXRlRnVuY3Rpb24gYXJlIGFyZ3VtZW50cyBvZiB0aGUgbmV3bHkgZ2VuZXJhdGVkIGZ1bmN0aW9uIHN0cmluZy5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUubWFjcm9zLkNvbW1vbkhlbHBlclxuXHQgKiBAcGFyYW0gc0Z1bmNOYW1lIFNvbWUgc3RyaW5nIGZvciB0aGUgZnVuY3Rpb24gbmFtZVxuXHQgKiBAcGFyYW0gYXJncyBUaGUgcmVtYWluaW5nIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyAtIEZ1bmN0aW9uIHN0cmluZyBkZXBlbmRzIG9uIGFyZ3VtZW50cyBwYXNzZWRcblx0ICovXG5cdGdlbmVyYXRlRnVuY3Rpb246IGZ1bmN0aW9uIChzRnVuY05hbWU6IHN0cmluZywgLi4uYXJnczogc3RyaW5nW10pIHtcblx0XHRsZXQgc1BhcmFtcyA9IFwiXCI7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRzUGFyYW1zICs9IGFyZ3NbaV07XG5cdFx0XHRpZiAoaSA8IGFyZ3MubGVuZ3RoIC0gMSkge1xuXHRcdFx0XHRzUGFyYW1zICs9IFwiLCBcIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRsZXQgc0Z1bmN0aW9uID0gYCR7c0Z1bmNOYW1lfSgpYDtcblx0XHRpZiAoc1BhcmFtcykge1xuXHRcdFx0c0Z1bmN0aW9uID0gYCR7c0Z1bmNOYW1lfSgke3NQYXJhbXN9KWA7XG5cdFx0fVxuXHRcdHJldHVybiBzRnVuY3Rpb247XG5cdH0sXG5cdC8qXG5cdCAqIFJldHVybnMgdGhlIHZpc2liaWxpdHkgZXhwcmVzc2lvbiBmb3IgZGF0YXBvaW50IHRpdGxlL2xpbmtcblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbc1BhdGhdIGFubm90YXRpb24gcGF0aCBvZiBkYXRhIHBvaW50IG9yIE1pY3JvY2hhcnRcblx0ICogQHBhcmFtIHtib29sZWFufSBbYkxpbmtdIHRydWUgaWYgbGluayB2aXNpYmlsaXR5IGlzIGJlaW5nIGRldGVybWluZWQsIGZhbHNlIGlmIHRpdGxlIHZpc2liaWxpdHkgaXMgYmVpbmcgZGV0ZXJtaW5lZFxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IFtiRmllbGRWaXNpYmlsaXR5XSB0cnVlIGlmIGZpZWxkIGlzIHZzaWlibGUsIGZhbHNlIG90aGVyd2lzZVxuXHQgKiBAcmV0dXJucyAge3N0cmluZ30gc1Zpc2liaWxpdHlFeHAgVXNlZCB0byBnZXQgdGhlICB2aXNpYmlsaXR5IGJpbmRpbmcgZm9yIERhdGFQb2ludHMgdGl0bGUgaW4gdGhlIEhlYWRlci5cblx0ICpcblx0ICovXG5cblx0Z2V0SGVhZGVyRGF0YVBvaW50TGlua1Zpc2liaWxpdHk6IGZ1bmN0aW9uIChzUGF0aDogYW55LCBiTGluazogYW55LCBiRmllbGRWaXNpYmlsaXR5OiBhbnkpIHtcblx0XHRsZXQgc1Zpc2liaWxpdHlFeHA7XG5cdFx0aWYgKGJGaWVsZFZpc2liaWxpdHkpIHtcblx0XHRcdHNWaXNpYmlsaXR5RXhwID0gYkxpbmtcblx0XHRcdFx0PyBcIns9ICR7aW50ZXJuYWw+aXNIZWFkZXJEUExpbmtWaXNpYmxlL1wiICsgc1BhdGggKyBcIn0gPT09IHRydWUgJiYgXCIgKyBiRmllbGRWaXNpYmlsaXR5ICsgXCJ9XCJcblx0XHRcdFx0OiBcIns9ICR7aW50ZXJuYWw+aXNIZWFkZXJEUExpbmtWaXNpYmxlL1wiICsgc1BhdGggKyBcIn0gIT09IHRydWUgJiYgXCIgKyBiRmllbGRWaXNpYmlsaXR5ICsgXCJ9XCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNWaXNpYmlsaXR5RXhwID0gYkxpbmtcblx0XHRcdFx0PyBcIns9ICR7aW50ZXJuYWw+aXNIZWFkZXJEUExpbmtWaXNpYmxlL1wiICsgc1BhdGggKyBcIn0gPT09IHRydWV9XCJcblx0XHRcdFx0OiBcIns9ICR7aW50ZXJuYWw+aXNIZWFkZXJEUExpbmtWaXNpYmxlL1wiICsgc1BhdGggKyBcIn0gIT09IHRydWV9XCI7XG5cdFx0fVxuXHRcdHJldHVybiBzVmlzaWJpbGl0eUV4cDtcblx0fSxcblxuXHQvKipcblx0ICogQ29udmVydHMgb2JqZWN0IHRvIHN0cmluZyhkaWZmZXJlbnQgZnJvbSBKU09OLnN0cmluZ2lmeSBvci50b1N0cmluZykuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLm1hY3Jvcy5Db21tb25IZWxwZXJcblx0ICogQHBhcmFtIG9QYXJhbXMgU29tZSBvYmplY3Rcblx0ICogQHJldHVybnMgLSBPYmplY3Qgc3RyaW5nXG5cdCAqL1xuXHRvYmplY3RUb1N0cmluZzogZnVuY3Rpb24gKG9QYXJhbXM6IGFueSkge1xuXHRcdGxldCBpTnVtYmVyT2ZLZXlzID0gT2JqZWN0LmtleXMob1BhcmFtcykubGVuZ3RoLFxuXHRcdFx0c1BhcmFtcyA9IFwiXCI7XG5cblx0XHRmb3IgKGNvbnN0IHNLZXkgaW4gb1BhcmFtcykge1xuXHRcdFx0bGV0IHNWYWx1ZSA9IG9QYXJhbXNbc0tleV07XG5cdFx0XHRpZiAoc1ZhbHVlICYmIHR5cGVvZiBzVmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0c1ZhbHVlID0gdGhpcy5vYmplY3RUb1N0cmluZyhzVmFsdWUpO1xuXHRcdFx0fVxuXHRcdFx0c1BhcmFtcyArPSBgJHtzS2V5fTogJHtzVmFsdWV9YDtcblx0XHRcdGlmIChpTnVtYmVyT2ZLZXlzID4gMSkge1xuXHRcdFx0XHQtLWlOdW1iZXJPZktleXM7XG5cdFx0XHRcdHNQYXJhbXMgKz0gXCIsIFwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBgeyAke3NQYXJhbXN9fWA7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgZXNjYXBlIGNoYXJhY3RlcnMgKFxcKSBmcm9tIGFuIGV4cHJlc3Npb24uXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLm1hY3Jvcy5Db21tb25IZWxwZXJcblx0ICogQHBhcmFtIHNFeHByZXNzaW9uIEFuIGV4cHJlc3Npb24gd2l0aCBlc2NhcGUgY2hhcmFjdGVyc1xuXHQgKiBAcmV0dXJucyBFeHByZXNzaW9uIHN0cmluZyB3aXRob3V0IGVzY2FwZSBjaGFyYWN0ZXJzIG9yIHVuZGVmaW5lZFxuXHQgKi9cblx0cmVtb3ZlRXNjYXBlQ2hhcmFjdGVyczogZnVuY3Rpb24gKHNFeHByZXNzaW9uOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gc0V4cHJlc3Npb24gPyBzRXhwcmVzc2lvbi5yZXBsYWNlKC9cXFxcP1xcXFwoW3t9XSkvZywgXCIkMVwiKSA6IHVuZGVmaW5lZDtcblx0fSxcblxuXHQvKipcblx0ICogTWFrZXMgdXBkYXRlcyB0byBhIHN0cmluZ2lmaWVkIG9iamVjdCBzbyB0aGF0IGl0IHdvcmtzIHByb3Blcmx5IGluIGEgdGVtcGxhdGUgYnkgYWRkaW5nIHVpNU9iamVjdDp0cnVlLlxuXHQgKlxuXHQgKiBAcGFyYW0gc1N0cmluZ2lmaWVkXG5cdCAqIEByZXR1cm5zIFRoZSB1cGRhdGVkIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgb2JqZWN0XG5cdCAqL1xuXHRzdHJpbmdpZnlPYmplY3Q6IGZ1bmN0aW9uIChzU3RyaW5naWZpZWQ6IHN0cmluZykge1xuXHRcdGlmICghc1N0cmluZ2lmaWVkIHx8IHNTdHJpbmdpZmllZCA9PT0gXCJ7fVwiKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBvT2JqZWN0ID0gSlNPTi5wYXJzZShzU3RyaW5naWZpZWQpO1xuXHRcdFx0aWYgKHR5cGVvZiBvT2JqZWN0ID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KG9PYmplY3QpKSB7XG5cdFx0XHRcdGNvbnN0IG9VSTVPYmplY3QgPSB7XG5cdFx0XHRcdFx0dWk1b2JqZWN0OiB0cnVlXG5cdFx0XHRcdH07XG5cdFx0XHRcdE9iamVjdC5hc3NpZ24ob1VJNU9iamVjdCwgb09iamVjdCk7XG5cdFx0XHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShvVUk1T2JqZWN0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHNUeXBlID0gQXJyYXkuaXNBcnJheShvT2JqZWN0KSA/IFwiQXJyYXlcIiA6IHR5cGVvZiBvT2JqZWN0O1xuXHRcdFx0XHRMb2cuZXJyb3IoYFVuZXhwZWN0ZWQgb2JqZWN0IHR5cGUgaW4gc3RyaW5naWZ5T2JqZWN0ICgke3NUeXBlfSkgLSBvbmx5IHdvcmtzIHdpdGggb2JqZWN0YCk7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInN0cmluZ2lmeU9iamVjdCBvbmx5IHdvcmtzIHdpdGggb2JqZWN0cyFcIik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBDcmVhdGUgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRhdGEsIHRha2luZyBjYXJlIHRoYXQgaXQgaXMgbm90IHRyZWF0ZWQgYXMgYSBiaW5kaW5nIGV4cHJlc3Npb24uXG5cdCAqXG5cdCAqIEBwYXJhbSB2RGF0YSBUaGUgZGF0YSB0byBzdHJpbmdpZnlcblx0ICogQHJldHVybnMgVGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0YS5cblx0ICovXG5cdHN0cmluZ2lmeUN1c3RvbURhdGE6IGZ1bmN0aW9uICh2RGF0YTogb2JqZWN0IHwgc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG5cdFx0Y29uc3Qgb09iamVjdDogYW55ID0ge1xuXHRcdFx0dWk1b2JqZWN0OiB0cnVlXG5cdFx0fTtcblx0XHRvT2JqZWN0W1wiY3VzdG9tRGF0YVwiXSA9IHZEYXRhIGluc3RhbmNlb2YgQ29udGV4dCA/IHZEYXRhLmdldE9iamVjdCgpIDogdkRhdGE7XG5cdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KG9PYmplY3QpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBQYXJzZXMgdGhlIGdpdmVuIGRhdGEsIHBvdGVudGlhbGx5IHVud3JhcHMgdGhlIGRhdGEuXG5cdCAqXG5cdCAqIEBwYXJhbSB2RGF0YSBUaGUgZGF0YSB0byBwYXJzZVxuXHQgKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIHRoZSBkYXRhIHBhcnNpbmdcblx0ICovXG5cdHBhcnNlQ3VzdG9tRGF0YTogZnVuY3Rpb24gKHZEYXRhOiBhbnkpIHtcblx0XHR2RGF0YSA9IHR5cGVvZiB2RGF0YSA9PT0gXCJzdHJpbmdcIiA/IEpTT04ucGFyc2UodkRhdGEpIDogdkRhdGE7XG5cdFx0aWYgKHZEYXRhICYmIHZEYXRhLmhhc093blByb3BlcnR5KFwiY3VzdG9tRGF0YVwiKSkge1xuXHRcdFx0cmV0dXJuIHZEYXRhW1wiY3VzdG9tRGF0YVwiXTtcblx0XHR9XG5cdFx0cmV0dXJuIHZEYXRhO1xuXHR9LFxuXHRnZXRDb250ZXh0UGF0aDogZnVuY3Rpb24gKG9WYWx1ZTogYW55LCBvSW50ZXJmYWNlOiBhbnkpIHtcblx0XHRjb25zdCBzUGF0aCA9IG9JbnRlcmZhY2UgJiYgb0ludGVyZmFjZS5jb250ZXh0ICYmIG9JbnRlcmZhY2UuY29udGV4dC5nZXRQYXRoKCk7XG5cdFx0cmV0dXJuIHNQYXRoW3NQYXRoLmxlbmd0aCAtIDFdID09PSBcIi9cIiA/IHNQYXRoLnNsaWNlKDAsIC0xKSA6IHNQYXRoO1xuXHR9LFxuXHQvKipcblx0ICogUmV0dXJucyBhIHN0cmluZ2lmaWVkIEpTT04gb2JqZWN0IGNvbnRhaW5pbmcgIFByZXNlbnRhdGlvbiBWYXJpYW50IHNvcnQgY29uZGl0aW9ucy5cblx0ICpcblx0ICogQHBhcmFtIG9Db250ZXh0XG5cdCAqIEBwYXJhbSBvUHJlc2VudGF0aW9uVmFyaWFudCBQcmVzZW50YXRpb24gdmFyaWFudCBBbm5vdGF0aW9uXG5cdCAqIEBwYXJhbSBzUHJlc2VudGF0aW9uVmFyaWFudFBhdGhcblx0ICogQHJldHVybnMgU3RyaW5naWZpZWQgSlNPTiBvYmplY3Rcblx0ICovXG5cdGdldFNvcnRDb25kaXRpb25zOiBmdW5jdGlvbiAob0NvbnRleHQ6IGFueSwgb1ByZXNlbnRhdGlvblZhcmlhbnQ6IGFueSwgc1ByZXNlbnRhdGlvblZhcmlhbnRQYXRoOiBzdHJpbmcpIHtcblx0XHRpZiAoXG5cdFx0XHRvUHJlc2VudGF0aW9uVmFyaWFudCAmJlxuXHRcdFx0Q29tbW9uSGVscGVyLl9pc1ByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uKHNQcmVzZW50YXRpb25WYXJpYW50UGF0aCkgJiZcblx0XHRcdG9QcmVzZW50YXRpb25WYXJpYW50LlNvcnRPcmRlclxuXHRcdCkge1xuXHRcdFx0Y29uc3QgYVNvcnRDb25kaXRpb25zOiBhbnkgPSB7XG5cdFx0XHRcdHNvcnRlcnM6IFtdXG5cdFx0XHR9O1xuXG5cdFx0XHRjb25zdCBzRW50aXR5UGF0aCA9IG9Db250ZXh0LmdldFBhdGgoMCkuc3BsaXQoXCJAXCIpWzBdO1xuXHRcdFx0b1ByZXNlbnRhdGlvblZhcmlhbnQuU29ydE9yZGVyLmZvckVhY2goZnVuY3Rpb24gKG9Db25kaXRpb246IGFueSA9IHt9KSB7XG5cdFx0XHRcdGxldCBvU29ydFByb3BlcnR5OiBhbnkgPSB7fTtcblx0XHRcdFx0Y29uc3Qgb1NvcnRlcjogYW55ID0ge307XG5cdFx0XHRcdGlmIChvQ29uZGl0aW9uLkR5bmFtaWNQcm9wZXJ0eSkge1xuXHRcdFx0XHRcdG9Tb3J0UHJvcGVydHkgPSBvQ29udGV4dC5nZXRNb2RlbCgwKS5nZXRPYmplY3Qoc0VudGl0eVBhdGggKyBvQ29uZGl0aW9uLkR5bmFtaWNQcm9wZXJ0eS4kQW5ub3RhdGlvblBhdGgpPy5OYW1lO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG9Db25kaXRpb24uUHJvcGVydHkpIHtcblx0XHRcdFx0XHRvU29ydFByb3BlcnR5ID0gb0NvbmRpdGlvbi5Qcm9wZXJ0eS4kUHJvcGVydHlQYXRoO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvU29ydFByb3BlcnR5KSB7XG5cdFx0XHRcdFx0b1NvcnRlci5uYW1lID0gb1NvcnRQcm9wZXJ0eTtcblx0XHRcdFx0XHRvU29ydGVyLmRlc2NlbmRpbmcgPSAhIW9Db25kaXRpb24uRGVzY2VuZGluZztcblx0XHRcdFx0XHRhU29ydENvbmRpdGlvbnMuc29ydGVycy5wdXNoKG9Tb3J0ZXIpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIlBsZWFzZSBkZWZpbmUgdGhlIHJpZ2h0IHBhdGggdG8gdGhlIHNvcnQgcHJvcGVydHlcIik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KGFTb3J0Q29uZGl0aW9ucyk7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH0sXG5cdF9pc1ByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBmdW5jdGlvbiAoYW5ub3RhdGlvblBhdGg6IHN0cmluZykge1xuXHRcdHJldHVybiAoXG5cdFx0XHRhbm5vdGF0aW9uUGF0aC5pbmNsdWRlcyhgQCR7VUlBbm5vdGF0aW9uVGVybXMuUHJlc2VudGF0aW9uVmFyaWFudH1gKSB8fFxuXHRcdFx0YW5ub3RhdGlvblBhdGguaW5jbHVkZXMoYEAke1VJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnR9YClcblx0XHQpO1xuXHR9LFxuXHRjcmVhdGVQcmVzZW50YXRpb25QYXRoQ29udGV4dDogZnVuY3Rpb24gKG9QcmVzZW50YXRpb25Db250ZXh0OiBhbnkpIHtcblx0XHRjb25zdCBhUGF0aHMgPSBvUHJlc2VudGF0aW9uQ29udGV4dC5zUGF0aC5zcGxpdChcIkBcIikgfHwgW107XG5cdFx0Y29uc3Qgb01vZGVsID0gb1ByZXNlbnRhdGlvbkNvbnRleHQuZ2V0TW9kZWwoKTtcblx0XHRpZiAoYVBhdGhzLmxlbmd0aCAmJiBhUGF0aHNbYVBhdGhzLmxlbmd0aCAtIDFdLmluZGV4T2YoXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50XCIpID4gLTEpIHtcblx0XHRcdGNvbnN0IHNQYXRoID0gb1ByZXNlbnRhdGlvbkNvbnRleHQuc1BhdGguc3BsaXQoXCIvUHJlc2VudGF0aW9uVmFyaWFudFwiKVswXTtcblx0XHRcdHJldHVybiBvTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYCR7c1BhdGh9QHNhcHVpLm5hbWVgKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9Nb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHtvUHJlc2VudGF0aW9uQ29udGV4dC5zUGF0aH1Ac2FwdWkubmFtZWApO1xuXHR9LFxuXHRnZXRQcmVzc0hhbmRsZXJGb3JEYXRhRmllbGRGb3JJQk46IGZ1bmN0aW9uIChvRGF0YUZpZWxkOiBhbnksIHNDb250ZXh0Pzogc3RyaW5nLCBiTmF2aWdhdGVXaXRoQ29uZmlybWF0aW9uRGlhbG9nPzogYm9vbGVhbikge1xuXHRcdGlmICghb0RhdGFGaWVsZCkgcmV0dXJuIHVuZGVmaW5lZDtcblx0XHRjb25zdCBtTmF2aWdhdGlvblBhcmFtZXRlcnM6IGFueSA9IHtcblx0XHRcdG5hdmlnYXRpb25Db250ZXh0czogc0NvbnRleHQgPyBzQ29udGV4dCA6IFwiJHskc291cmNlPi99LmdldEJpbmRpbmdDb250ZXh0KClcIlxuXHRcdH07XG5cdFx0aWYgKG9EYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0ICYmICFvRGF0YUZpZWxkLklubGluZSAmJiBiTmF2aWdhdGVXaXRoQ29uZmlybWF0aW9uRGlhbG9nKSB7XG5cdFx0XHRtTmF2aWdhdGlvblBhcmFtZXRlcnMuYXBwbGljYWJsZUNvbnRleHRzID1cblx0XHRcdFx0XCIke2ludGVybmFsPmlibi9cIiArIG9EYXRhRmllbGQuU2VtYW50aWNPYmplY3QgKyBcIi1cIiArIG9EYXRhRmllbGQuQWN0aW9uICsgXCIvYUFwcGxpY2FibGUvfVwiO1xuXHRcdFx0bU5hdmlnYXRpb25QYXJhbWV0ZXJzLm5vdEFwcGxpY2FibGVDb250ZXh0cyA9XG5cdFx0XHRcdFwiJHtpbnRlcm5hbD5pYm4vXCIgKyBvRGF0YUZpZWxkLlNlbWFudGljT2JqZWN0ICsgXCItXCIgKyBvRGF0YUZpZWxkLkFjdGlvbiArIFwiL2FOb3RBcHBsaWNhYmxlL31cIjtcblx0XHRcdG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5sYWJlbCA9IHRoaXMuYWRkU2luZ2xlUXVvdGVzKG9EYXRhRmllbGQuTGFiZWwsIHRydWUpO1xuXHRcdH1cblx0XHRpZiAob0RhdGFGaWVsZC5NYXBwaW5nKSB7XG5cdFx0XHRtTmF2aWdhdGlvblBhcmFtZXRlcnMuc2VtYW50aWNPYmplY3RNYXBwaW5nID0gdGhpcy5hZGRTaW5nbGVRdW90ZXMoSlNPTi5zdHJpbmdpZnkob0RhdGFGaWVsZC5NYXBwaW5nKSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmdlbmVyYXRlRnVuY3Rpb24oXG5cdFx0XHRiTmF2aWdhdGVXaXRoQ29uZmlybWF0aW9uRGlhbG9nID8gXCIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZVdpdGhDb25maXJtYXRpb25EaWFsb2dcIiA6IFwiLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ubmF2aWdhdGVcIixcblx0XHRcdHRoaXMuYWRkU2luZ2xlUXVvdGVzKG9EYXRhRmllbGQuU2VtYW50aWNPYmplY3QpLFxuXHRcdFx0dGhpcy5hZGRTaW5nbGVRdW90ZXMob0RhdGFGaWVsZC5BY3Rpb24pLFxuXHRcdFx0dGhpcy5vYmplY3RUb1N0cmluZyhtTmF2aWdhdGlvblBhcmFtZXRlcnMpXG5cdFx0KTtcblx0fSxcblx0Z2V0RW50aXR5U2V0OiBmdW5jdGlvbiAob0NvbnRleHQ6IGFueSkge1xuXHRcdGNvbnN0IHNQYXRoID0gb0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdHJldHVybiBNb2RlbEhlbHBlci5nZXRFbnRpdHlTZXRQYXRoKHNQYXRoKTtcblx0fSxcblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgdmlzaWJpbGl0eSBvZiBmb3JtIG1lbnUgYWN0aW9ucyBib3RoIGluIHBhdGggYmFzZWQgYW5kIHN0YXRpYyB2YWx1ZSBzY2VuYXJpb3MuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLm1hY3Jvcy5Db21tb25IZWxwZXJcblx0ICogQHBhcmFtIHNWaXNpYmxlVmFsdWUgRWl0aGVyIHN0YXRpYyBib29sZWFuIHZhbHVlcyBvciBBcnJheSBvZiBwYXRoIGV4cHJlc3Npb25zIGZvciB2aXNpYmlsaXR5IG9mIG1lbnUgYnV0dG9uLlxuXHQgKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGRldGVybWluaW5nIHRoZSB2aXNpYmlsaXR5IG9mIG1lbnUgYWN0aW9ucy5cblx0ICovXG5cdGhhbmRsZVZpc2liaWxpdHlPZk1lbnVBY3Rpb25zOiBmdW5jdGlvbiAoc1Zpc2libGVWYWx1ZTogYW55KSB7XG5cdFx0Y29uc3QgY29tYmluZWRDb25kaXRpb25zID0gW107XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoc1Zpc2libGVWYWx1ZSkpIHtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgc1Zpc2libGVWYWx1ZS5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAoc1Zpc2libGVWYWx1ZVtpXS5pbmRleE9mKFwie1wiKSA+IC0xICYmIHNWaXNpYmxlVmFsdWVbaV0uaW5kZXhPZihcIns9XCIpID09PSAtMSkge1xuXHRcdFx0XHRcdHNWaXNpYmxlVmFsdWVbaV0gPSBcIns9XCIgKyBzVmlzaWJsZVZhbHVlW2ldICsgXCJ9XCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHNWaXNpYmxlVmFsdWVbaV0uc3BsaXQoXCJ7PVwiKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0c1Zpc2libGVWYWx1ZVtpXSA9IHNWaXNpYmxlVmFsdWVbaV0uc3BsaXQoXCJ7PVwiKVsxXS5zbGljZSgwLCAtMSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29tYmluZWRDb25kaXRpb25zLnB1c2goYCgke3NWaXNpYmxlVmFsdWVbaV19KWApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gY29tYmluZWRDb25kaXRpb25zLmxlbmd0aCA+IDAgPyBgez0gJHtjb21iaW5lZENvbmRpdGlvbnMuam9pbihcIiB8fCBcIil9fWAgOiBzVmlzaWJsZVZhbHVlO1xuXHR9LFxuXHQvKipcblx0ICogTWV0aG9kIHRvIGRvIHRoZSBjYWxjdWxhdGlvbiBvZiBjcml0aWNhbGl0eSBpbiBjYXNlIENyaXRpY2FsaXR5Q2FsY3VsYXRpb24gcHJlc2VudCBpbiB0aGUgYW5ub3RhdGlvblxuXHQgKlxuXHQgKiBUaGUgY2FsY3VsYXRpb24gaXMgZG9uZSBieSBjb21wYXJpbmcgYSB2YWx1ZSB0byB0aGUgdGhyZXNob2xkIHZhbHVlcyByZWxldmFudCBmb3IgdGhlIHNwZWNpZmllZCBpbXByb3ZlbWVudCBkaXJlY3Rpb24uXG5cdCAqIEZvciBpbXByb3ZlbWVudCBkaXJlY3Rpb24gVGFyZ2V0LCB0aGUgY3JpdGljYWxpdHkgaXMgY2FsY3VsYXRlZCB1c2luZyBib3RoIGxvdyBhbmQgaGlnaCB0aHJlc2hvbGQgdmFsdWVzLiBJdCB3aWxsIGJlXG5cdCAqXG5cdCAqIC0gUG9zaXRpdmUgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBBY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZSBhbmQgbG93ZXIgdGhhbiBvciBlcXVhbCB0byBBY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWVcblx0ICogLSBOZXV0cmFsIGlmIHRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSBhbmQgbG93ZXIgdGhhbiBBY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZSBPUiBncmVhdGVyIHRoYW4gQWNjZXB0YW5jZVJhbmdlSGlnaFZhbHVlIGFuZCBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIFRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlXG5cdCAqIC0gQ3JpdGljYWwgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBEZXZpYXRpb25SYW5nZUxvd1ZhbHVlIGFuZCBsb3dlciB0aGFuIFRvbGVyYW5jZVJhbmdlTG93VmFsdWUgT1IgZ3JlYXRlciB0aGFuIFRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlIGFuZCBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIERldmlhdGlvblJhbmdlSGlnaFZhbHVlXG5cdCAqIC0gTmVnYXRpdmUgaWYgdGhlIHZhbHVlIGlzIGxvd2VyIHRoYW4gRGV2aWF0aW9uUmFuZ2VMb3dWYWx1ZSBvciBncmVhdGVyIHRoYW4gRGV2aWF0aW9uUmFuZ2VIaWdoVmFsdWVcblx0ICpcblx0ICogRm9yIGltcHJvdmVtZW50IGRpcmVjdGlvbiBNaW5pbWl6ZSwgdGhlIGNyaXRpY2FsaXR5IGlzIGNhbGN1bGF0ZWQgdXNpbmcgdGhlIGhpZ2ggdGhyZXNob2xkIHZhbHVlcy4gSXQgaXNcblx0ICogLSBQb3NpdGl2ZSBpZiB0aGUgdmFsdWUgaXMgbG93ZXIgdGhhbiBvciBlcXVhbCB0byBBY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWVcblx0ICogLSBOZXV0cmFsIGlmIHRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gQWNjZXB0YW5jZVJhbmdlSGlnaFZhbHVlIGFuZCBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIFRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlXG5cdCAqIC0gQ3JpdGljYWwgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBUb2xlcmFuY2VSYW5nZUhpZ2hWYWx1ZSBhbmQgbG93ZXIgdGhhbiBvciBlcXVhbCB0byBEZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZVxuXHQgKiAtIE5lZ2F0aXZlIGlmIHRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gRGV2aWF0aW9uUmFuZ2VIaWdoVmFsdWVcblx0ICpcblx0ICogRm9yIGltcHJvdmVtZW50IGRpcmVjdGlvbiBNYXhpbWl6ZSwgdGhlIGNyaXRpY2FsaXR5IGlzIGNhbGN1bGF0ZWQgdXNpbmcgdGhlIGxvdyB0aHJlc2hvbGQgdmFsdWVzLiBJdCBpc1xuXHQgKlxuXHQgKiAtIFBvc2l0aXZlIGlmIHRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gQWNjZXB0YW5jZVJhbmdlTG93VmFsdWVcblx0ICogLSBOZXV0cmFsIGlmIHRoZSB2YWx1ZSBpcyBsZXNzIHRoYW4gQWNjZXB0YW5jZVJhbmdlTG93VmFsdWUgYW5kIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBUb2xlcmFuY2VSYW5nZUxvd1ZhbHVlXG5cdCAqIC0gQ3JpdGljYWwgaWYgdGhlIHZhbHVlIGlzIGxvd2VyIHRoYW4gVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSBhbmQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIERldmlhdGlvblJhbmdlTG93VmFsdWVcblx0ICogLSBOZWdhdGl2ZSBpZiB0aGUgdmFsdWUgaXMgbG93ZXIgdGhhbiBEZXZpYXRpb25SYW5nZUxvd1ZhbHVlXG5cdCAqXG5cdCAqIFRocmVzaG9sZHMgYXJlIG9wdGlvbmFsLiBGb3IgdW5hc3NpZ25lZCB2YWx1ZXMsIGRlZmF1bHRzIGFyZSBkZXRlcm1pbmVkIGluIHRoaXMgb3JkZXI6XG5cdCAqXG5cdCAqIC0gRm9yIERldmlhdGlvblJhbmdlLCBhbiBvbWl0dGVkIExvd1ZhbHVlIHRyYW5zbGF0ZXMgaW50byB0aGUgc21hbGxlc3QgcG9zc2libGUgbnVtYmVyICgtSU5GKSwgYW4gb21pdHRlZCBIaWdoVmFsdWUgdHJhbnNsYXRlcyBpbnRvIHRoZSBsYXJnZXN0IHBvc3NpYmxlIG51bWJlciAoK0lORilcblx0ICogLSBGb3IgVG9sZXJhbmNlUmFuZ2UsIGFuIG9taXR0ZWQgTG93VmFsdWUgd2lsbCBiZSBpbml0aWFsaXplZCB3aXRoIERldmlhdGlvblJhbmdlTG93VmFsdWUsIGFuIG9taXR0ZWQgSGlnaFZhbHVlIHdpbGwgYmUgaW5pdGlhbGl6ZWQgd2l0aCBEZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZVxuXHQgKiAtIEZvciBBY2NlcHRhbmNlUmFuZ2UsIGFuIG9taXR0ZWQgTG93VmFsdWUgd2lsbCBiZSBpbml0aWFsaXplZCB3aXRoIFRvbGVyYW5jZVJhbmdlTG93VmFsdWUsIGFuIG9taXR0ZWQgSGlnaFZhbHVlIHdpbGwgYmUgaW5pdGlhbGl6ZWQgd2l0aCBUb2xlcmFuY2VSYW5nZUhpZ2hWYWx1ZS5cblx0ICpcblx0ICogQHBhcmFtIHNJbXByb3ZlbWVudERpcmVjdGlvbiBJbXByb3ZlbWVudERpcmVjdGlvbiB0byBiZSB1c2VkIGZvciBjcmVhdGluZyB0aGUgY3JpdGljYWxpdHkgYmluZGluZ1xuXHQgKiBAcGFyYW0gc1ZhbHVlIFZhbHVlIGZyb20gRGF0YXBvaW50IHRvIGJlIG1lYXN1cmVkXG5cdCAqIEBwYXJhbSBzRGV2aWF0aW9uTG93IEV4cHJlc3Npb25CaW5kaW5nIGZvciBMb3dlciBEZXZpYXRpb24gbGV2ZWxcblx0ICogQHBhcmFtIHNUb2xlcmFuY2VMb3cgRXhwcmVzc2lvbkJpbmRpbmcgZm9yIExvd2VyIFRvbGVyYW5jZSBsZXZlbFxuXHQgKiBAcGFyYW0gc0FjY2VwdGFuY2VMb3cgRXhwcmVzc2lvbkJpbmRpbmcgZm9yIExvd2VyIEFjY2VwdGFuY2UgbGV2ZWxcblx0ICogQHBhcmFtIHNBY2NlcHRhbmNlSGlnaCBFeHByZXNzaW9uQmluZGluZyBmb3IgSGlnaGVyIEFjY2VwdGFuY2UgbGV2ZWxcblx0ICogQHBhcmFtIHNUb2xlcmFuY2VIaWdoIEV4cHJlc3Npb25CaW5kaW5nIGZvciBIaWdoZXIgVG9sZXJhbmNlIGxldmVsXG5cdCAqIEBwYXJhbSBzRGV2aWF0aW9uSGlnaCBFeHByZXNzaW9uQmluZGluZyBmb3IgSGlnaGVyIERldmlhdGlvbiBsZXZlbFxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIGNyaXRpY2FsaXR5IGNhbGN1bGF0aW9uIGFzIGV4cHJlc3Npb24gYmluZGluZ1xuXHQgKi9cblx0Z2V0Q3JpdGljYWxpdHlDYWxjdWxhdGlvbkJpbmRpbmc6IGZ1bmN0aW9uIChcblx0XHRzSW1wcm92ZW1lbnREaXJlY3Rpb246IHN0cmluZyxcblx0XHRzVmFsdWU6IHN0cmluZyxcblx0XHRzRGV2aWF0aW9uTG93OiBzdHJpbmcgfCBudW1iZXIsXG5cdFx0c1RvbGVyYW5jZUxvdzogc3RyaW5nIHwgbnVtYmVyLFxuXHRcdHNBY2NlcHRhbmNlTG93OiBzdHJpbmcgfCBudW1iZXIsXG5cdFx0c0FjY2VwdGFuY2VIaWdoOiBzdHJpbmcgfCBudW1iZXIsXG5cdFx0c1RvbGVyYW5jZUhpZ2g6IHN0cmluZyB8IG51bWJlcixcblx0XHRzRGV2aWF0aW9uSGlnaDogc3RyaW5nIHwgbnVtYmVyXG5cdCkge1xuXHRcdGxldCBzQ3JpdGljYWxpdHlFeHByZXNzaW9uOiB0eXBlb2YgVmFsdWVDb2xvciB8IHN0cmluZyA9IFZhbHVlQ29sb3IuTmV1dHJhbDsgLy8gRGVmYXVsdCBDcml0aWNhbGl0eSBTdGF0ZVxuXG5cdFx0c1ZhbHVlID0gYCUke3NWYWx1ZX1gO1xuXG5cdFx0Ly8gU2V0dGluZyBVbmFzc2lnbmVkIFZhbHVlc1xuXHRcdHNEZXZpYXRpb25Mb3cgPSBzRGV2aWF0aW9uTG93IHx8IC1JbmZpbml0eTtcblx0XHRzVG9sZXJhbmNlTG93ID0gc1RvbGVyYW5jZUxvdyB8fCBzRGV2aWF0aW9uTG93O1xuXHRcdHNBY2NlcHRhbmNlTG93ID0gc0FjY2VwdGFuY2VMb3cgfHwgc1RvbGVyYW5jZUxvdztcblx0XHRzRGV2aWF0aW9uSGlnaCA9IHNEZXZpYXRpb25IaWdoIHx8IEluZmluaXR5O1xuXHRcdHNUb2xlcmFuY2VIaWdoID0gc1RvbGVyYW5jZUhpZ2ggfHwgc0RldmlhdGlvbkhpZ2g7XG5cdFx0c0FjY2VwdGFuY2VIaWdoID0gc0FjY2VwdGFuY2VIaWdoIHx8IHNUb2xlcmFuY2VIaWdoO1xuXG5cdFx0Ly8gRGVhbGluZyB3aXRoIERlY2ltYWwgYW5kIFBhdGggYmFzZWQgYmluZ2RpbmdzXG5cdFx0c0RldmlhdGlvbkxvdyA9IHNEZXZpYXRpb25Mb3cgJiYgKCtzRGV2aWF0aW9uTG93ID8gK3NEZXZpYXRpb25Mb3cgOiBgJSR7c0RldmlhdGlvbkxvd31gKTtcblx0XHRzVG9sZXJhbmNlTG93ID0gc1RvbGVyYW5jZUxvdyAmJiAoK3NUb2xlcmFuY2VMb3cgPyArc1RvbGVyYW5jZUxvdyA6IGAlJHtzVG9sZXJhbmNlTG93fWApO1xuXHRcdHNBY2NlcHRhbmNlTG93ID0gc0FjY2VwdGFuY2VMb3cgJiYgKCtzQWNjZXB0YW5jZUxvdyA/ICtzQWNjZXB0YW5jZUxvdyA6IGAlJHtzQWNjZXB0YW5jZUxvd31gKTtcblx0XHRzQWNjZXB0YW5jZUhpZ2ggPSBzQWNjZXB0YW5jZUhpZ2ggJiYgKCtzQWNjZXB0YW5jZUhpZ2ggPyArc0FjY2VwdGFuY2VIaWdoIDogYCUke3NBY2NlcHRhbmNlSGlnaH1gKTtcblx0XHRzVG9sZXJhbmNlSGlnaCA9IHNUb2xlcmFuY2VIaWdoICYmICgrc1RvbGVyYW5jZUhpZ2ggPyArc1RvbGVyYW5jZUhpZ2ggOiBgJSR7c1RvbGVyYW5jZUhpZ2h9YCk7XG5cdFx0c0RldmlhdGlvbkhpZ2ggPSBzRGV2aWF0aW9uSGlnaCAmJiAoK3NEZXZpYXRpb25IaWdoID8gK3NEZXZpYXRpb25IaWdoIDogYCUke3NEZXZpYXRpb25IaWdofWApO1xuXG5cdFx0Ly8gQ3JlYXRpbmcgcnVudGltZSBleHByZXNzaW9uIGJpbmRpbmcgZnJvbSBjcml0aWNhbGl0eSBjYWxjdWxhdGlvbiBmb3IgQ3JpdGljYWxpdHkgU3RhdGVcblx0XHRpZiAoc0ltcHJvdmVtZW50RGlyZWN0aW9uLmluY2x1ZGVzKFwiTWluaW1pemVcIikpIHtcblx0XHRcdHNDcml0aWNhbGl0eUV4cHJlc3Npb24gPVxuXHRcdFx0XHRcIns9IFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPD0gXCIgK1xuXHRcdFx0XHRzQWNjZXB0YW5jZUhpZ2ggK1xuXHRcdFx0XHRcIiA/ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuR29vZCArXG5cdFx0XHRcdFwiJyA6IFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPD0gXCIgK1xuXHRcdFx0XHRzVG9sZXJhbmNlSGlnaCArXG5cdFx0XHRcdFwiID8gJ1wiICtcblx0XHRcdFx0VmFsdWVDb2xvci5OZXV0cmFsICtcblx0XHRcdFx0XCInIDogXCIgK1xuXHRcdFx0XHRcIihcIiArXG5cdFx0XHRcdHNEZXZpYXRpb25IaWdoICtcblx0XHRcdFx0XCIgJiYgXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA8PSBcIiArXG5cdFx0XHRcdHNEZXZpYXRpb25IaWdoICtcblx0XHRcdFx0XCIpID8gJ1wiICtcblx0XHRcdFx0VmFsdWVDb2xvci5Dcml0aWNhbCArXG5cdFx0XHRcdFwiJyA6ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuRXJyb3IgK1xuXHRcdFx0XHRcIicgfVwiO1xuXHRcdH0gZWxzZSBpZiAoc0ltcHJvdmVtZW50RGlyZWN0aW9uLmluY2x1ZGVzKFwiTWF4aW1pemVcIikpIHtcblx0XHRcdHNDcml0aWNhbGl0eUV4cHJlc3Npb24gPVxuXHRcdFx0XHRcIns9IFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPj0gXCIgK1xuXHRcdFx0XHRzQWNjZXB0YW5jZUxvdyArXG5cdFx0XHRcdFwiID8gJ1wiICtcblx0XHRcdFx0VmFsdWVDb2xvci5Hb29kICtcblx0XHRcdFx0XCInIDogXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA+PSBcIiArXG5cdFx0XHRcdHNUb2xlcmFuY2VMb3cgK1xuXHRcdFx0XHRcIiA/ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuTmV1dHJhbCArXG5cdFx0XHRcdFwiJyA6IFwiICtcblx0XHRcdFx0XCIoXCIgK1xuXHRcdFx0XHRzRGV2aWF0aW9uTG93ICtcblx0XHRcdFx0XCIgJiYgXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA+PSBcIiArXG5cdFx0XHRcdHNEZXZpYXRpb25Mb3cgK1xuXHRcdFx0XHRcIikgPyAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLkNyaXRpY2FsICtcblx0XHRcdFx0XCInIDogJ1wiICtcblx0XHRcdFx0VmFsdWVDb2xvci5FcnJvciArXG5cdFx0XHRcdFwiJyB9XCI7XG5cdFx0fSBlbHNlIGlmIChzSW1wcm92ZW1lbnREaXJlY3Rpb24uaW5jbHVkZXMoXCJUYXJnZXRcIikpIHtcblx0XHRcdHNDcml0aWNhbGl0eUV4cHJlc3Npb24gPVxuXHRcdFx0XHRcIns9IChcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiIDw9IFwiICtcblx0XHRcdFx0c0FjY2VwdGFuY2VIaWdoICtcblx0XHRcdFx0XCIgJiYgXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA+PSBcIiArXG5cdFx0XHRcdHNBY2NlcHRhbmNlTG93ICtcblx0XHRcdFx0XCIpID8gJ1wiICtcblx0XHRcdFx0VmFsdWVDb2xvci5Hb29kICtcblx0XHRcdFx0XCInIDogXCIgK1xuXHRcdFx0XHRcIigoXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA+PSBcIiArXG5cdFx0XHRcdHNUb2xlcmFuY2VMb3cgK1xuXHRcdFx0XHRcIiAmJiBcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiIDwgXCIgK1xuXHRcdFx0XHRzQWNjZXB0YW5jZUxvdyArXG5cdFx0XHRcdFwiKSB8fCAoXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA+IFwiICtcblx0XHRcdFx0c0FjY2VwdGFuY2VIaWdoICtcblx0XHRcdFx0XCIgJiYgXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA8PSBcIiArXG5cdFx0XHRcdHNUb2xlcmFuY2VIaWdoICtcblx0XHRcdFx0XCIpKSA/ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuTmV1dHJhbCArXG5cdFx0XHRcdFwiJyA6IFwiICtcblx0XHRcdFx0XCIoKFwiICtcblx0XHRcdFx0c0RldmlhdGlvbkxvdyArXG5cdFx0XHRcdFwiICYmIChcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiID49IFwiICtcblx0XHRcdFx0c0RldmlhdGlvbkxvdyArXG5cdFx0XHRcdFwiKSAmJiAoXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA8IFwiICtcblx0XHRcdFx0c1RvbGVyYW5jZUxvdyArXG5cdFx0XHRcdFwiKSkgfHwgKChcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiID4gXCIgK1xuXHRcdFx0XHRzVG9sZXJhbmNlSGlnaCArXG5cdFx0XHRcdFwiKSAmJiBcIiArXG5cdFx0XHRcdHNEZXZpYXRpb25IaWdoICtcblx0XHRcdFx0XCIgJiYgKFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPD0gXCIgK1xuXHRcdFx0XHRzRGV2aWF0aW9uSGlnaCArXG5cdFx0XHRcdFwiKSkpID8gJ1wiICtcblx0XHRcdFx0VmFsdWVDb2xvci5Dcml0aWNhbCArXG5cdFx0XHRcdFwiJyA6ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuRXJyb3IgK1xuXHRcdFx0XHRcIicgfVwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRMb2cud2FybmluZyhcIkNhc2Ugbm90IHN1cHBvcnRlZCwgcmV0dXJuaW5nIHRoZSBkZWZhdWx0IFZhbHVlIE5ldXRyYWxcIik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHNDcml0aWNhbGl0eUV4cHJlc3Npb247XG5cdH0sXG5cdC8qKlxuXHQgKiBUbyBmZXRjaCBtZWFzdXJlIGF0dHJpYnV0ZSBpbmRleC5cblx0ICpcblx0ICogQHBhcmFtIGlNZWFzdXJlIENoYXJ0IEFubm90YXRpb25zXG5cdCAqIEBwYXJhbSBvQ2hhcnRBbm5vdGF0aW9ucyBDaGFydCBBbm5vdGF0aW9uc1xuXHQgKiBAcmV0dXJucyBNZWFzdXJlQXR0cmlidXRlIGluZGV4LlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0Z2V0TWVhc3VyZUF0dHJpYnV0ZUluZGV4OiBmdW5jdGlvbiAoaU1lYXN1cmU6IGFueSwgb0NoYXJ0QW5ub3RhdGlvbnM6IGFueSkge1xuXHRcdGxldCBhTWVhc3VyZXMsIHNNZWFzdXJlUHJvcGVydHlQYXRoO1xuXHRcdGlmIChvQ2hhcnRBbm5vdGF0aW9ucz8uTWVhc3VyZXM/Lmxlbmd0aCA+IDApIHtcblx0XHRcdGFNZWFzdXJlcyA9IG9DaGFydEFubm90YXRpb25zLk1lYXN1cmVzO1xuXHRcdFx0c01lYXN1cmVQcm9wZXJ0eVBhdGggPSBhTWVhc3VyZXNbaU1lYXN1cmVdLiRQcm9wZXJ0eVBhdGg7XG5cdFx0fSBlbHNlIGlmIChvQ2hhcnRBbm5vdGF0aW9ucz8uRHluYW1pY01lYXN1cmVzPy5sZW5ndGggPiAwKSB7XG5cdFx0XHRhTWVhc3VyZXMgPSBvQ2hhcnRBbm5vdGF0aW9ucy5EeW5hbWljTWVhc3VyZXM7XG5cdFx0XHRzTWVhc3VyZVByb3BlcnR5UGF0aCA9IGFNZWFzdXJlc1tpTWVhc3VyZV0uJEFubm90YXRpb25QYXRoO1xuXHRcdH1cblx0XHRsZXQgYk1lYXN1cmVBdHRyaWJ1dGVFeGlzdHM7XG5cdFx0Y29uc3QgYU1lYXN1cmVBdHRyaWJ1dGVzID0gb0NoYXJ0QW5ub3RhdGlvbnMuTWVhc3VyZUF0dHJpYnV0ZXM7XG5cdFx0bGV0IGlNZWFzdXJlQXR0cmlidXRlID0gLTE7XG5cdFx0Y29uc3QgZm5DaGVja01lYXN1cmUgPSBmdW5jdGlvbiAoc01lYXN1cmVQYXRoOiBhbnksIG9NZWFzdXJlQXR0cmlidXRlOiBhbnksIGluZGV4OiBhbnkpIHtcblx0XHRcdGlmIChvTWVhc3VyZUF0dHJpYnV0ZSkge1xuXHRcdFx0XHRpZiAob01lYXN1cmVBdHRyaWJ1dGUuTWVhc3VyZSAmJiBvTWVhc3VyZUF0dHJpYnV0ZS5NZWFzdXJlLiRQcm9wZXJ0eVBhdGggPT09IHNNZWFzdXJlUGF0aCkge1xuXHRcdFx0XHRcdGlNZWFzdXJlQXR0cmlidXRlID0gaW5kZXg7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0gZWxzZSBpZiAob01lYXN1cmVBdHRyaWJ1dGUuRHluYW1pY01lYXN1cmUgJiYgb01lYXN1cmVBdHRyaWJ1dGUuRHluYW1pY01lYXN1cmUuJEFubm90YXRpb25QYXRoID09PSBzTWVhc3VyZVBhdGgpIHtcblx0XHRcdFx0XHRpTWVhc3VyZUF0dHJpYnV0ZSA9IGluZGV4O1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRpZiAoYU1lYXN1cmVBdHRyaWJ1dGVzKSB7XG5cdFx0XHRiTWVhc3VyZUF0dHJpYnV0ZUV4aXN0cyA9IGFNZWFzdXJlQXR0cmlidXRlcy5zb21lKGZuQ2hlY2tNZWFzdXJlLmJpbmQobnVsbCwgc01lYXN1cmVQcm9wZXJ0eVBhdGgpKTtcblx0XHR9XG5cdFx0cmV0dXJuIGJNZWFzdXJlQXR0cmlidXRlRXhpc3RzICYmIGlNZWFzdXJlQXR0cmlidXRlID4gLTEgJiYgaU1lYXN1cmVBdHRyaWJ1dGU7XG5cdH0sXG5cblx0Z2V0TWVhc3VyZUF0dHJpYnV0ZTogZnVuY3Rpb24gKG9Db250ZXh0OiBDb250ZXh0KSB7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwsXG5cdFx0XHRzQ2hhcnRBbm5vdGF0aW9uUGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKTtcblx0XHRyZXR1cm4gb01ldGFNb2RlbC5yZXF1ZXN0T2JqZWN0KHNDaGFydEFubm90YXRpb25QYXRoKS50aGVuKGZ1bmN0aW9uIChvQ2hhcnRBbm5vdGF0aW9uczogYW55KSB7XG5cdFx0XHRjb25zdCBhTWVhc3VyZUF0dHJpYnV0ZXMgPSBvQ2hhcnRBbm5vdGF0aW9ucy5NZWFzdXJlQXR0cmlidXRlcyxcblx0XHRcdFx0aU1lYXN1cmVBdHRyaWJ1dGUgPSBDb21tb25IZWxwZXIuZ2V0TWVhc3VyZUF0dHJpYnV0ZUluZGV4KDAsIG9DaGFydEFubm90YXRpb25zKTtcblx0XHRcdGNvbnN0IHNNZWFzdXJlQXR0cmlidXRlUGF0aCA9XG5cdFx0XHRcdGlNZWFzdXJlQXR0cmlidXRlID4gLTEgJiYgYU1lYXN1cmVBdHRyaWJ1dGVzW2lNZWFzdXJlQXR0cmlidXRlXSAmJiBhTWVhc3VyZUF0dHJpYnV0ZXNbaU1lYXN1cmVBdHRyaWJ1dGVdLkRhdGFQb2ludFxuXHRcdFx0XHRcdD8gYCR7c0NoYXJ0QW5ub3RhdGlvblBhdGh9L01lYXN1cmVBdHRyaWJ1dGVzLyR7aU1lYXN1cmVBdHRyaWJ1dGV9L2Bcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdGlmIChzTWVhc3VyZUF0dHJpYnV0ZVBhdGggPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRMb2cud2FybmluZyhcIkRhdGFQb2ludCBtaXNzaW5nIGZvciB0aGUgbWVhc3VyZVwiKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBzTWVhc3VyZUF0dHJpYnV0ZVBhdGggPyBgJHtzTWVhc3VyZUF0dHJpYnV0ZVBhdGh9RGF0YVBvaW50LyRBbm5vdGF0aW9uUGF0aC9gIDogc01lYXN1cmVBdHRyaWJ1dGVQYXRoO1xuXHRcdH0pO1xuXHR9LFxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBtZWFzdXJlQXR0cmlidXRlIGZvciB0aGUgbWVhc3VyZS5cblx0ICpcblx0ICogQHBhcmFtIG9Db250ZXh0IENvbnRleHQgdG8gdGhlIG1lYXN1cmUgYW5ub3RhdGlvblxuXHQgKiBAcmV0dXJucyBQYXRoIHRvIHRoZSBtZWFzdXJlQXR0cmlidXRlIG9mIHRoZSBtZWFzdXJlXG5cdCAqL1xuXHRnZXRNZWFzdXJlQXR0cmlidXRlRm9yTWVhc3VyZTogZnVuY3Rpb24gKG9Db250ZXh0OiBDb250ZXh0KSB7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwsXG5cdFx0XHRzTWVhc3VyZVBhdGggPSBvQ29udGV4dC5nZXRQYXRoKCksXG5cdFx0XHRzQ2hhcnRBbm5vdGF0aW9uUGF0aCA9IHNNZWFzdXJlUGF0aC5zdWJzdHJpbmcoMCwgc01lYXN1cmVQYXRoLmxhc3RJbmRleE9mKFwiTWVhc3VyZVwiKSksXG5cdFx0XHRpTWVhc3VyZSA9IHNNZWFzdXJlUGF0aC5yZXBsYWNlKC8uKlxcLy8sIFwiXCIpO1xuXG5cdFx0Y29uc3Qgb0NoYXJ0QW5ub3RhdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzQ2hhcnRBbm5vdGF0aW9uUGF0aCk7XG5cdFx0Y29uc3QgYU1lYXN1cmVBdHRyaWJ1dGVzID0gb0NoYXJ0QW5ub3RhdGlvbnMuTWVhc3VyZUF0dHJpYnV0ZXMsXG5cdFx0XHRpTWVhc3VyZUF0dHJpYnV0ZSA9IENvbW1vbkhlbHBlci5nZXRNZWFzdXJlQXR0cmlidXRlSW5kZXgoaU1lYXN1cmUsIG9DaGFydEFubm90YXRpb25zKTtcblx0XHRjb25zdCBzTWVhc3VyZUF0dHJpYnV0ZVBhdGggPVxuXHRcdFx0aU1lYXN1cmVBdHRyaWJ1dGUgPiAtMSAmJiBhTWVhc3VyZUF0dHJpYnV0ZXNbaU1lYXN1cmVBdHRyaWJ1dGVdICYmIGFNZWFzdXJlQXR0cmlidXRlc1tpTWVhc3VyZUF0dHJpYnV0ZV0uRGF0YVBvaW50XG5cdFx0XHRcdD8gYCR7c0NoYXJ0QW5ub3RhdGlvblBhdGh9TWVhc3VyZUF0dHJpYnV0ZXMvJHtpTWVhc3VyZUF0dHJpYnV0ZX0vYFxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRpZiAoc01lYXN1cmVBdHRyaWJ1dGVQYXRoID09PSB1bmRlZmluZWQpIHtcblx0XHRcdExvZy53YXJuaW5nKFwiRGF0YVBvaW50IG1pc3NpbmcgZm9yIHRoZSBtZWFzdXJlXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gc01lYXN1cmVBdHRyaWJ1dGVQYXRoID8gYCR7c01lYXN1cmVBdHRyaWJ1dGVQYXRofURhdGFQb2ludC8kQW5ub3RhdGlvblBhdGgvYCA6IHNNZWFzdXJlQXR0cmlidXRlUGF0aDtcblx0fSxcblx0LyoqXG5cdCAqIE1ldGhvZCB0byBkZXRlcm1pbmUgaWYgdGhlIGNvbnRhaW5lZCBuYXZpZ2F0aW9uIHByb3BlcnR5IGhhcyBhIGRyYWZ0IHJvb3Qvbm9kZSBwYXJlbnQgZW50aXR5U2V0LlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgaXNEcmFmdFBhcmVudEVudGl0eUZvckNvbnRhaW5tZW50XG5cdCAqIEBwYXJhbSBvVGFyZ2V0Q29sbGVjdGlvbkNvbnRhaW5zVGFyZ2V0IFRhcmdldCBjb2xsZWN0aW9uIGhhcyBDb250YWluc1RhcmdldCBwcm9wZXJ0eVxuXHQgKiBAcGFyYW0gb1RhYmxlTWV0YWRhdGEgVGFibGUgbWV0YWRhdGEgZm9yIHdoaWNoIGRyYWZ0IHN1cHBvcnQgc2hhbGwgYmUgY2hlY2tlZFxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIHRydWUgaWYgZHJhZnRcblx0ICovXG5cdGlzRHJhZnRQYXJlbnRFbnRpdHlGb3JDb250YWlubWVudDogZnVuY3Rpb24gKG9UYXJnZXRDb2xsZWN0aW9uQ29udGFpbnNUYXJnZXQ6IG9iamVjdCwgb1RhYmxlTWV0YWRhdGE6IGFueSkge1xuXHRcdGlmIChvVGFyZ2V0Q29sbGVjdGlvbkNvbnRhaW5zVGFyZ2V0KSB7XG5cdFx0XHRpZiAob1RhYmxlTWV0YWRhdGEgJiYgb1RhYmxlTWV0YWRhdGEucGFyZW50RW50aXR5U2V0ICYmIG9UYWJsZU1ldGFkYXRhLnBhcmVudEVudGl0eVNldC5zUGF0aCkge1xuXHRcdFx0XHRjb25zdCBzUGFyZW50RW50aXR5U2V0UGF0aCA9IG9UYWJsZU1ldGFkYXRhLnBhcmVudEVudGl0eVNldC5zUGF0aDtcblx0XHRcdFx0Y29uc3Qgb0RyYWZ0Um9vdCA9IG9UYWJsZU1ldGFkYXRhLnBhcmVudEVudGl0eVNldC5vTW9kZWwuZ2V0T2JqZWN0KFxuXHRcdFx0XHRcdGAke3NQYXJlbnRFbnRpdHlTZXRQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290YFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBvRHJhZnROb2RlID0gb1RhYmxlTWV0YWRhdGEucGFyZW50RW50aXR5U2V0Lm9Nb2RlbC5nZXRPYmplY3QoXG5cdFx0XHRcdFx0YCR7c1BhcmVudEVudGl0eVNldFBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdE5vZGVgXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChvRHJhZnRSb290IHx8IG9EcmFmdE5vZGUpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBFbnN1cmVzIHRoZSBkYXRhIGlzIHByb2Nlc3NlZCBhcyBkZWZpbmVkIGluIHRoZSB0ZW1wbGF0ZS5cblx0ICogU2luY2UgdGhlIHByb3BlcnR5IERhdGEgaXMgb2YgdGhlIHR5cGUgJ29iamVjdCcsIGl0IG1heSBub3QgYmUgaW4gdGhlIHNhbWUgb3JkZXIgYXMgcmVxdWlyZWQgYnkgdGhlIHRlbXBsYXRlLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG1lbWJlcm9mIHNhcC5mZS5tYWNyb3MuQ29tbW9uSGVscGVyXG5cdCAqIEBwYXJhbSBkYXRhRWxlbWVudCBUaGUgZGF0YSB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyBwcm9jZXNzZWQuXG5cdCAqIEByZXR1cm5zIFRoZSBjb3JyZWN0IHBhdGggYWNjb3JkaW5nIHRvIHRoZSB0ZW1wbGF0ZS5cblx0ICovXG5cdGdldERhdGFGcm9tVGVtcGxhdGU6IGZ1bmN0aW9uIChkYXRhRWxlbWVudDogQ29udGV4dCkge1xuXHRcdGNvbnN0IHNwbGl0UGF0aCA9IGRhdGFFbGVtZW50LmdldFBhdGgoKS5zcGxpdChcIi9cIik7XG5cdFx0Y29uc3QgZGF0YUtleSA9IHNwbGl0UGF0aFtzcGxpdFBhdGgubGVuZ3RoIC0gMV07XG5cdFx0Y29uc3QgY29ubmVjdGVkRGF0YVBhdGggPSBgLyR7c3BsaXRQYXRoLnNsaWNlKDEsIC0yKS5qb2luKFwiL1wiKX0vQGA7XG5cdFx0Y29uc3QgY29ubmVjdGVkT2JqZWN0ID0gZGF0YUVsZW1lbnQuZ2V0T2JqZWN0KGNvbm5lY3RlZERhdGFQYXRoKTtcblx0XHRjb25zdCB0ZW1wbGF0ZSA9IGNvbm5lY3RlZE9iamVjdC5UZW1wbGF0ZTtcblx0XHRjb25zdCBzcGxpdFRlbXAgPSB0ZW1wbGF0ZS5zcGxpdChcIn1cIik7XG5cdFx0Y29uc3QgdGVtcEFycmF5ID0gW107XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzcGxpdFRlbXAubGVuZ3RoIC0gMTsgaSsrKSB7XG5cdFx0XHRjb25zdCBrZXkgPSBzcGxpdFRlbXBbaV0uc3BsaXQoXCJ7XCIpWzFdLnRyaW0oKTtcblx0XHRcdHRlbXBBcnJheS5wdXNoKGtleSk7XG5cdFx0fVxuXHRcdE9iamVjdC5rZXlzKGNvbm5lY3RlZE9iamVjdC5EYXRhKS5mb3JFYWNoKGZ1bmN0aW9uIChzS2V5OiBzdHJpbmcpIHtcblx0XHRcdGlmIChzS2V5LnN0YXJ0c1dpdGgoXCIkXCIpKSB7XG5cdFx0XHRcdGRlbGV0ZSBjb25uZWN0ZWRPYmplY3QuRGF0YVtzS2V5XTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRjb25zdCBpbmRleCA9IE9iamVjdC5rZXlzKGNvbm5lY3RlZE9iamVjdC5EYXRhKS5pbmRleE9mKGRhdGFLZXkpO1xuXHRcdHJldHVybiBgLyR7c3BsaXRQYXRoLnNsaWNlKDEsIC0yKS5qb2luKFwiL1wiKX0vRGF0YS8ke3RlbXBBcnJheVtpbmRleF19YDtcblx0fSxcblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBlbmQgb2YgdGhlIHRlbXBsYXRlIGhhcyBiZWVuIHJlYWNoZWQuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLm1hY3Jvcy5Db21tb25IZWxwZXJcblx0ICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IG9mIHRoZSBjb25uZWN0ZWQgZmllbGRzLlxuXHQgKiBAcGFyYW0gZWxlbWVudCBUaGUgZWxlbWVudCB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyBwcm9jZXNzZWQuXG5cdCAqIEByZXR1cm5zIFRydWUgb3IgRmFsc2UgKGRlcGVuZGluZyBvbiB0aGUgdGVtcGxhdGUgaW5kZXgpLlxuXHQgKi9cblx0bm90TGFzdEluZGV4OiBmdW5jdGlvbiAodGFyZ2V0OiBhbnksIGVsZW1lbnQ6IG9iamVjdCkge1xuXHRcdGNvbnN0IHRlbXBsYXRlID0gdGFyZ2V0LlRlbXBsYXRlO1xuXHRcdGNvbnN0IHNwbGl0VGVtcCA9IHRlbXBsYXRlLnNwbGl0KFwifVwiKTtcblx0XHRjb25zdCB0ZW1wQXJyYXk6IGFueVtdID0gW107XG5cdFx0bGV0IGlzTGFzdEluZGV4ID0gZmFsc2U7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzcGxpdFRlbXAubGVuZ3RoIC0gMTsgaSsrKSB7XG5cdFx0XHRjb25zdCBkYXRhS2V5ID0gc3BsaXRUZW1wW2ldLnNwbGl0KFwie1wiKVsxXS50cmltKCk7XG5cdFx0XHR0ZW1wQXJyYXkucHVzaChkYXRhS2V5KTtcblx0XHR9XG5cblx0XHR0ZW1wQXJyYXkuZm9yRWFjaChmdW5jdGlvbiAodGVtcGxhdGVJbmZvOiBhbnkpIHtcblx0XHRcdGNvbnN0IGxhc3RJbmRleCA9IHRlbXBBcnJheS5sZW5ndGggLSAxO1xuXHRcdFx0aWYgKHRhcmdldC5EYXRhW3RlbXBsYXRlSW5mb10gPT09IGVsZW1lbnQgJiYgdGVtcEFycmF5LmluZGV4T2YodGVtcGxhdGVJbmZvKSA8IGxhc3RJbmRleCkge1xuXHRcdFx0XHRpc0xhc3RJbmRleCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGlzTGFzdEluZGV4O1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHRoZSBkZWxpbWl0ZXIgZnJvbSB0aGUgdGVtcGxhdGUuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLm1hY3Jvcy5Db21tb25IZWxwZXJcblx0ICogQHBhcmFtIHRlbXBsYXRlIFRoZSB0ZW1wbGF0ZSBzdHJpbmcuXG5cdCAqIEByZXR1cm5zIFRoZSBkZWxpbWl0ZXIgaW4gdGhlIHRlbXBsYXRlIHN0cmluZy5cblx0ICovXG5cdGdldERlbGltaXRlcjogZnVuY3Rpb24gKHRlbXBsYXRlOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gdGVtcGxhdGUuc3BsaXQoXCJ9XCIpWzFdLnNwbGl0KFwie1wiKVswXS50cmltKCk7XG5cdH0sXG5cblx0b01ldGFNb2RlbDogdW5kZWZpbmVkIGFzIGFueSxcblx0c2V0TWV0YU1vZGVsOiBmdW5jdGlvbiAob01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpIHtcblx0XHR0aGlzLm9NZXRhTW9kZWwgPSBvTWV0YU1vZGVsO1xuXHR9LFxuXG5cdGdldE1ldGFNb2RlbDogZnVuY3Rpb24gKG9Db250ZXh0PzogYW55LCBvSW50ZXJmYWNlPzogYW55KSB7XG5cdFx0aWYgKG9Db250ZXh0KSB7XG5cdFx0XHRyZXR1cm4gb0ludGVyZmFjZS5jb250ZXh0LmdldE1vZGVsKCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLm9NZXRhTW9kZWw7XG5cdH0sXG5cblx0Z2V0UGFyYW1ldGVyczogZnVuY3Rpb24gKG9Db250ZXh0OiBhbnksIG9JbnRlcmZhY2U6IGFueSkge1xuXHRcdGlmIChvQ29udGV4dCkge1xuXHRcdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9JbnRlcmZhY2UuY29udGV4dC5nZXRNb2RlbCgpO1xuXHRcdFx0Y29uc3Qgc1BhdGggPSBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdFx0Y29uc3Qgb1BhcmFtZXRlckluZm8gPSBDb21tb25VdGlscy5nZXRQYXJhbWV0ZXJJbmZvKG9NZXRhTW9kZWwsIHNQYXRoKTtcblx0XHRcdGlmIChvUGFyYW1ldGVySW5mby5wYXJhbWV0ZXJQcm9wZXJ0aWVzKSB7XG5cdFx0XHRcdHJldHVybiBPYmplY3Qua2V5cyhvUGFyYW1ldGVySW5mby5wYXJhbWV0ZXJQcm9wZXJ0aWVzKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIFtdO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBCdWlsZCBhbiBleHByZXNzaW9uIGNhbGxpbmcgYW4gYWN0aW9uIGhhbmRsZXIgdmlhIHRoZSBGUE0gaGVscGVyJ3MgYWN0aW9uV3JhcHBlciBmdW5jdGlvblxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCB0aGUgJ0ZQTS5hY3Rpb25XcmFwcGVyKCknIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSBhdCBydW50aW1lLlxuXHQgKlxuXHQgKiBAcGFyYW0gb0FjdGlvbiBBY3Rpb24gbWV0YWRhdGFcblx0ICogQHBhcmFtIG9BY3Rpb24uaGFuZGxlck1vZHVsZSBNb2R1bGUgY29udGFpbmluZyB0aGUgYWN0aW9uIGhhbmRsZXIgbWV0aG9kXG5cdCAqIEBwYXJhbSBvQWN0aW9uLmhhbmRsZXJNZXRob2QgQWN0aW9uIGhhbmRsZXIgbWV0aG9kIG5hbWVcblx0ICogQHBhcmFtIFtvVGhpc10gYHRoaXNgIChpZiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYSBtYWNybylcblx0ICogQHBhcmFtIG9UaGlzLmlkIFRoZSB0YWJsZSdzIElEXG5cdCAqIEByZXR1cm5zIFRoZSBhY3Rpb24gd3JhcHBlciBiaW5kaW5nXHRleHByZXNzaW9uXG5cdCAqL1xuXHRidWlsZEFjdGlvbldyYXBwZXI6IGZ1bmN0aW9uIChvQWN0aW9uOiBDdXN0b21BY3Rpb24sIG9UaGlzOiB7IGlkPzogc3RyaW5nIH0gfCB1bmRlZmluZWQpIHtcblx0XHRjb25zdCBhUGFyYW1zOiBhbnlbXSA9IFtyZWYoXCIkZXZlbnRcIiksIG9BY3Rpb24uaGFuZGxlck1vZHVsZSwgb0FjdGlvbi5oYW5kbGVyTWV0aG9kXTtcblxuXHRcdGlmIChvVGhpcyAmJiBvVGhpcy5pZCkge1xuXHRcdFx0Y29uc3Qgb0FkZGl0aW9uYWxQYXJhbXMgPSB7XG5cdFx0XHRcdGNvbnRleHRzOiByZWYoXCIke2ludGVybmFsPnNlbGVjdGVkQ29udGV4dHN9XCIpXG5cdFx0XHR9O1xuXHRcdFx0YVBhcmFtcy5wdXNoKG9BZGRpdGlvbmFsUGFyYW1zKTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGZuKFwiRlBNLmFjdGlvbldyYXBwZXJcIiwgYVBhcmFtcykpO1xuXHR9LFxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgdmFsdWUgd2hldGhlciBvciBub3QgdGhlIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2libGUgZGVwZW5kaW5nIG9uIHRoZSBIaWRkZW4gYW5ub3RhdGlvbi5cblx0ICogSXQgaXMgaW52ZXJ0ZWQgYXMgdGhlIFVJIGVsZW1lbnRzIGhhdmUgYSB2aXNpYmxlIHByb3BlcnR5IGluc3RlYWQgb2YgYSBoaWRkZW4gb25lLlxuXHQgKlxuXHQgKiBAcGFyYW0gZGF0YUZpZWxkQW5ub3RhdGlvbnMgVGhlIGRhdGFGaWVsZCBvYmplY3Rcblx0ICogQHJldHVybnMgQSBwYXRoIG9yIGEgQm9vbGVhblxuXHQgKi9cblx0Z2V0SGlkZGVuUGF0aEV4cHJlc3Npb246IGZ1bmN0aW9uIChkYXRhRmllbGRBbm5vdGF0aW9uczogYW55KSB7XG5cdFx0aWYgKGRhdGFGaWVsZEFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlblwiXSAhPT0gbnVsbCkge1xuXHRcdFx0Y29uc3QgaGlkZGVuID0gZGF0YUZpZWxkQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuXCJdO1xuXHRcdFx0cmV0dXJuIHR5cGVvZiBoaWRkZW4gPT09IFwib2JqZWN0XCIgPyBcIns9ICEke1wiICsgaGlkZGVuLiRQYXRoICsgXCJ9IH1cIiA6ICFoaWRkZW47XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXHR2YWxpZGF0ZVByZXNlbnRhdGlvbk1ldGFQYXRoOiBmdW5jdGlvbiAobWV0YVBhdGg6IHN0cmluZywgb2JqZWN0VGVybTogc3RyaW5nKSB7XG5cdFx0Ly8gcGVyZm9ybSB2YWxpZGF0aW9uIG9ubHkgaWYgYW5ub3RhdGlvbiBzZXQgKHRvIGF2b2lkIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGlzc3VlcyBmb3IgdGVzdCB3aXRob3V0IGFubm90YXRpb25zKVxuXHRcdGlmIChtZXRhUGF0aC5pbmNsdWRlcyhvYmplY3RUZXJtLnNsaWNlKDAsIG9iamVjdFRlcm0ubGFzdEluZGV4T2YoXCIuXCIpKSkpIHtcblx0XHRcdGNvbnN0IGFsbG93ZWRUZXJtcyA9IFtVSUFubm90YXRpb25UZXJtcy5QcmVzZW50YXRpb25WYXJpYW50LCBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LCBvYmplY3RUZXJtXTtcblx0XHRcdGlmIChcblx0XHRcdFx0IWFsbG93ZWRUZXJtcy5zb21lKCh0ZXJtKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIG1ldGFQYXRoLnNlYXJjaChuZXcgUmVnRXhwKGAke3Rlcm19KCN8L3wkKWApKSA+IC0xO1xuXHRcdFx0XHR9KVxuXHRcdFx0KSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgQW5ub3RhdGlvbiBQYXRoICR7bWV0YVBhdGh9IG1lbnRpb25lZCBpbiB0aGUgbWFuaWZlc3QgaXMgbm90IHZhbGlkIGZvciAke29iamVjdFRlcm19YCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuKENvbW1vbkhlbHBlci5nZXRTb3J0Q29uZGl0aW9ucyBhcyBhbnkpLnJlcXVpcmVzSUNvbnRleHQgPSB0cnVlO1xuXG5leHBvcnQgZGVmYXVsdCBDb21tb25IZWxwZXI7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7O0VBY0EsTUFBTUEsVUFBVSxHQUFHQyxRQUFRLENBQUNELFVBQVU7RUFDdEMsTUFBTUUsWUFBWSxHQUFHO0lBQ3BCQyxZQUFZLEVBQUUsVUFBVUMsSUFBUyxF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
|
|
806
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJWYWx1ZUNvbG9yIiwibUxpYnJhcnkiLCJDb21tb25IZWxwZXIiLCJnZXRQYXRoVG9LZXkiLCJvQ3R4IiwiZ2V0T2JqZWN0IiwiaXNWaXNpYmxlIiwidGFyZ2V0Iiwib0ludGVyZmFjZSIsIm9Nb2RlbCIsImNvbnRleHQiLCJnZXRNb2RlbCIsInNQcm9wZXJ0eVBhdGgiLCJnZXRQYXRoIiwib0Fubm90YXRpb25zIiwiaGlkZGVuIiwiJFBhdGgiLCJnZXRQYXJhbWV0ZXJFZGl0TW9kZSIsImZpZWxkQ29udHJvbCIsImltbXV0YWJsZSIsImNvbXB1dGVkIiwic0VkaXRNb2RlIiwiRmllbGRFZGl0TW9kZSIsIkVkaXRhYmxlIiwiUmVhZE9ubHkiLCIkRW51bU1lbWJlciIsIkRpc2FibGVkIiwiZ2V0TWV0YVBhdGgiLCJ1bmRlZmluZWQiLCJpc0Rlc2t0b3AiLCJEZXZpY2UiLCJzeXN0ZW0iLCJkZXNrdG9wIiwiZ2V0VGFyZ2V0Q29sbGVjdGlvblBhdGgiLCJuYXZDb2xsZWN0aW9uIiwic1BhdGgiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJnZXRNZXRhTW9kZWwiLCJhUGFydHMiLCJzcGxpdCIsImZpbHRlciIsInNQYXJ0IiwiZW50aXR5U2V0IiwibGVuZ3RoIiwibmF2aWdhdGlvbkNvbGxlY3Rpb24iLCJzbGljZSIsImpvaW4iLCJpc1Byb3BlcnR5RmlsdGVyYWJsZSIsIm9EYXRhRmllbGQiLCJza2lwSGlkZGVuRmlsdGVycyIsInNQcm9wZXJ0eUxvY2F0aW9uUGF0aCIsImdldExvY2F0aW9uRm9yUHJvcGVydHlQYXRoIiwic1Byb3BlcnR5IiwicmVwbGFjZSIsIiRUeXBlIiwiaUxlbmd0aCIsInNDb2xsZWN0aW9uUGF0aCIsImxhc3RJbmRleE9mIiwiaW5kZXhPZiIsImdvdG9BY3Rpb25QYXJhbWV0ZXIiLCJvQ29udGV4dCIsInNQcm9wZXJ0eU5hbWUiLCJDb21tb25VdGlscyIsImdldFBhcmFtZXRlclBhdGgiLCJnZXRFbnRpdHlTZXROYW1lIiwib01ldGFNb2RlbCIsInNFbnRpdHlUeXBlIiwib0VudGl0eUNvbnRhaW5lciIsImtleSIsImdldEFjdGlvblBhdGgiLCJvQWN0aW9uIiwiYlJldHVybk9ubHlQYXRoIiwic0FjdGlvbk5hbWUiLCJiQ2hlY2tTdGF0aWNWYWx1ZSIsInNDb250ZXh0UGF0aCIsImluY2x1ZGVzIiwic0VudGl0eVR5cGVOYW1lIiwic0VudGl0eU5hbWUiLCJzQmluZGluZ1BhcmFtZXRlciIsImdldE5hdmlnYXRpb25Db250ZXh0IiwiT0RhdGFNb2RlbEFubm90YXRpb25IZWxwZXIiLCJnZXROYXZpZ2F0aW9uUGF0aCIsImJLZWVwUHJvcGVydHkiLCJiU3RhcnRzV2l0aEVudGl0eVR5cGUiLCJzdGFydHNXaXRoIiwicGFydCIsInNoaWZ0IiwicG9wIiwiZ2V0QWN0aW9uQ29udGV4dCIsImdldFBhdGhUb0JvdW5kQWN0aW9uT3ZlcmxvYWQiLCJhZGRTaW5nbGVRdW90ZXMiLCJzVmFsdWUiLCJiRXNjYXBlIiwiZXNjYXBlU2luZ2xlUXVvdGVzIiwiZ2VuZXJhdGVGdW5jdGlvbiIsInNGdW5jTmFtZSIsInNQYXJhbXMiLCJpIiwic0Z1bmN0aW9uIiwiZ2V0SGVhZGVyRGF0YVBvaW50TGlua1Zpc2liaWxpdHkiLCJiTGluayIsImJGaWVsZFZpc2liaWxpdHkiLCJzVmlzaWJpbGl0eUV4cCIsIm9iamVjdFRvU3RyaW5nIiwib1BhcmFtcyIsImlOdW1iZXJPZktleXMiLCJPYmplY3QiLCJrZXlzIiwic0tleSIsInJlbW92ZUVzY2FwZUNoYXJhY3RlcnMiLCJzRXhwcmVzc2lvbiIsInN0cmluZ2lmeU9iamVjdCIsInNTdHJpbmdpZmllZCIsIm9PYmplY3QiLCJKU09OIiwicGFyc2UiLCJBcnJheSIsImlzQXJyYXkiLCJvVUk1T2JqZWN0IiwidWk1b2JqZWN0IiwiYXNzaWduIiwic3RyaW5naWZ5Iiwic1R5cGUiLCJMb2ciLCJlcnJvciIsIkVycm9yIiwic3RyaW5naWZ5Q3VzdG9tRGF0YSIsInZEYXRhIiwiQ29udGV4dCIsInBhcnNlQ3VzdG9tRGF0YSIsImhhc093blByb3BlcnR5IiwiZ2V0Q29udGV4dFBhdGgiLCJvVmFsdWUiLCJnZXRTb3J0Q29uZGl0aW9ucyIsIm9QcmVzZW50YXRpb25WYXJpYW50Iiwic1ByZXNlbnRhdGlvblZhcmlhbnRQYXRoIiwiX2lzUHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24iLCJTb3J0T3JkZXIiLCJhU29ydENvbmRpdGlvbnMiLCJzb3J0ZXJzIiwic0VudGl0eVBhdGgiLCJmb3JFYWNoIiwib0NvbmRpdGlvbiIsIm9Tb3J0UHJvcGVydHkiLCJvU29ydGVyIiwiRHluYW1pY1Byb3BlcnR5IiwiJEFubm90YXRpb25QYXRoIiwiTmFtZSIsIlByb3BlcnR5IiwiJFByb3BlcnR5UGF0aCIsIm5hbWUiLCJkZXNjZW5kaW5nIiwiRGVzY2VuZGluZyIsInB1c2giLCJhbm5vdGF0aW9uUGF0aCIsImNyZWF0ZVByZXNlbnRhdGlvblBhdGhDb250ZXh0Iiwib1ByZXNlbnRhdGlvbkNvbnRleHQiLCJhUGF0aHMiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImdldFByZXNzSGFuZGxlckZvckRhdGFGaWVsZEZvcklCTiIsInNDb250ZXh0IiwiYk5hdmlnYXRlV2l0aENvbmZpcm1hdGlvbkRpYWxvZyIsIm1OYXZpZ2F0aW9uUGFyYW1ldGVycyIsIm5hdmlnYXRpb25Db250ZXh0cyIsIlJlcXVpcmVzQ29udGV4dCIsIklubGluZSIsImFwcGxpY2FibGVDb250ZXh0cyIsIlNlbWFudGljT2JqZWN0IiwiQWN0aW9uIiwibm90QXBwbGljYWJsZUNvbnRleHRzIiwibGFiZWwiLCJMYWJlbCIsIk1hcHBpbmciLCJzZW1hbnRpY09iamVjdE1hcHBpbmciLCJnZXRFbnRpdHlTZXQiLCJNb2RlbEhlbHBlciIsImdldEVudGl0eVNldFBhdGgiLCJoYW5kbGVWaXNpYmlsaXR5T2ZNZW51QWN0aW9ucyIsInNWaXNpYmxlVmFsdWUiLCJjb21iaW5lZENvbmRpdGlvbnMiLCJnZXRDcml0aWNhbGl0eUNhbGN1bGF0aW9uQmluZGluZyIsInNJbXByb3ZlbWVudERpcmVjdGlvbiIsInNEZXZpYXRpb25Mb3ciLCJzVG9sZXJhbmNlTG93Iiwic0FjY2VwdGFuY2VMb3ciLCJzQWNjZXB0YW5jZUhpZ2giLCJzVG9sZXJhbmNlSGlnaCIsInNEZXZpYXRpb25IaWdoIiwic0NyaXRpY2FsaXR5RXhwcmVzc2lvbiIsIk5ldXRyYWwiLCJJbmZpbml0eSIsIkdvb2QiLCJDcml0aWNhbCIsIndhcm5pbmciLCJnZXRNZWFzdXJlQXR0cmlidXRlSW5kZXgiLCJpTWVhc3VyZSIsIm9DaGFydEFubm90YXRpb25zIiwiYU1lYXN1cmVzIiwic01lYXN1cmVQcm9wZXJ0eVBhdGgiLCJNZWFzdXJlcyIsIkR5bmFtaWNNZWFzdXJlcyIsImJNZWFzdXJlQXR0cmlidXRlRXhpc3RzIiwiYU1lYXN1cmVBdHRyaWJ1dGVzIiwiTWVhc3VyZUF0dHJpYnV0ZXMiLCJpTWVhc3VyZUF0dHJpYnV0ZSIsImZuQ2hlY2tNZWFzdXJlIiwic01lYXN1cmVQYXRoIiwib01lYXN1cmVBdHRyaWJ1dGUiLCJpbmRleCIsIk1lYXN1cmUiLCJEeW5hbWljTWVhc3VyZSIsInNvbWUiLCJiaW5kIiwiZ2V0TWVhc3VyZUF0dHJpYnV0ZSIsInNDaGFydEFubm90YXRpb25QYXRoIiwicmVxdWVzdE9iamVjdCIsInRoZW4iLCJzTWVhc3VyZUF0dHJpYnV0ZVBhdGgiLCJEYXRhUG9pbnQiLCJnZXRNZWFzdXJlQXR0cmlidXRlRm9yTWVhc3VyZSIsInN1YnN0cmluZyIsImlzRHJhZnRQYXJlbnRFbnRpdHlGb3JDb250YWlubWVudCIsIm9UYXJnZXRDb2xsZWN0aW9uQ29udGFpbnNUYXJnZXQiLCJvVGFibGVNZXRhZGF0YSIsInBhcmVudEVudGl0eVNldCIsInNQYXJlbnRFbnRpdHlTZXRQYXRoIiwib0RyYWZ0Um9vdCIsIm9EcmFmdE5vZGUiLCJnZXREYXRhRnJvbVRlbXBsYXRlIiwiZGF0YUVsZW1lbnQiLCJzcGxpdFBhdGgiLCJkYXRhS2V5IiwiY29ubmVjdGVkRGF0YVBhdGgiLCJjb25uZWN0ZWRPYmplY3QiLCJ0ZW1wbGF0ZSIsIlRlbXBsYXRlIiwic3BsaXRUZW1wIiwidGVtcEFycmF5IiwidHJpbSIsIkRhdGEiLCJub3RMYXN0SW5kZXgiLCJlbGVtZW50IiwiaXNMYXN0SW5kZXgiLCJ0ZW1wbGF0ZUluZm8iLCJsYXN0SW5kZXgiLCJnZXREZWxpbWl0ZXIiLCJzZXRNZXRhTW9kZWwiLCJnZXRQYXJhbWV0ZXJzIiwib1BhcmFtZXRlckluZm8iLCJnZXRQYXJhbWV0ZXJJbmZvIiwicGFyYW1ldGVyUHJvcGVydGllcyIsImJ1aWxkQWN0aW9uV3JhcHBlciIsIm9UaGlzIiwiYVBhcmFtcyIsInJlZiIsImhhbmRsZXJNb2R1bGUiLCJoYW5kbGVyTWV0aG9kIiwiaWQiLCJvQWRkaXRpb25hbFBhcmFtcyIsImNvbnRleHRzIiwiY29tcGlsZUV4cHJlc3Npb24iLCJmbiIsImdldEhpZGRlblBhdGhFeHByZXNzaW9uIiwiZGF0YUZpZWxkQW5ub3RhdGlvbnMiLCJ2YWxpZGF0ZVByZXNlbnRhdGlvbk1ldGFQYXRoIiwibWV0YVBhdGgiLCJvYmplY3RUZXJtIiwiYWxsb3dlZFRlcm1zIiwidGVybSIsInNlYXJjaCIsIlJlZ0V4cCIsInJlcXVpcmVzSUNvbnRleHQiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkNvbW1vbkhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBDdXN0b21BY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgeyBjb21waWxlRXhwcmVzc2lvbiwgZm4sIHJlZiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBpc1Byb3BlcnR5RmlsdGVyYWJsZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01ldGFNb2RlbEZ1bmN0aW9uXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBtTGlicmFyeSBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IERldmljZSBmcm9tIFwic2FwL3VpL0RldmljZVwiO1xuaW1wb3J0IEZpZWxkRWRpdE1vZGUgZnJvbSBcInNhcC91aS9tZGMvZW51bXMvRmllbGRFZGl0TW9kZVwiO1xuaW1wb3J0IENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgT0RhdGFNb2RlbEFubm90YXRpb25IZWxwZXIgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Bbm5vdGF0aW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcblxuXG5jb25zdCBWYWx1ZUNvbG9yID0gbUxpYnJhcnkuVmFsdWVDb2xvcjtcbmNvbnN0IENvbW1vbkhlbHBlciA9IHtcblx0Z2V0UGF0aFRvS2V5OiBmdW5jdGlvbiAob0N0eDogYW55KSB7XG5cdFx0cmV0dXJuIG9DdHguZ2V0T2JqZWN0KCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgaWYgYSBmaWVsZCBpcyB2aXNpYmxlLlxuXHQgKlxuXHQgKiBAcGFyYW0gdGFyZ2V0IFRhcmdldCBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gb0ludGVyZmFjZSBJbnRlcmZhY2UgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgUmV0dXJucyB0cnVlLCBmYWxzZSwgb3IgZXhwcmVzc2lvbiB3aXRoIHBhdGhcblx0ICovXG5cdGlzVmlzaWJsZTogZnVuY3Rpb24gKHRhcmdldDogb2JqZWN0LCBvSW50ZXJmYWNlOiBhbnkpIHtcblx0XHRjb25zdCBvTW9kZWwgPSBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0TW9kZWwoKSxcblx0XHRcdHNQcm9wZXJ0eVBhdGggPSBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0UGF0aCgpLFxuXHRcdFx0b0Fubm90YXRpb25zID0gb01vZGVsLmdldE9iamVjdChgJHtzUHJvcGVydHlQYXRofUBgKSxcblx0XHRcdGhpZGRlbiA9IG9Bbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5cIl07XG5cblx0XHRyZXR1cm4gdHlwZW9mIGhpZGRlbiA9PT0gXCJvYmplY3RcIiA/IFwiez0gISR7XCIgKyBoaWRkZW4uJFBhdGggKyBcIn0gfVwiIDogIWhpZGRlbjtcblx0fSxcblx0LyoqXG5cdCAqIERldGVybWluZSBpZiBmaWVsZCBpcyBlZGl0YWJsZS5cblx0ICpcblx0ICogQHBhcmFtIHRhcmdldCBUYXJnZXQgaW5zdGFuY2Vcblx0ICogQHBhcmFtIG9JbnRlcmZhY2UgSW50ZXJmYWNlIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEEgQmluZGluZyBFeHByZXNzaW9uIHRvIGRldGVybWluZSBpZiBhIGZpZWxkIHNob3VsZCBiZSBlZGl0YWJsZSBvciBub3QuXG5cdCAqL1xuXHRnZXRQYXJhbWV0ZXJFZGl0TW9kZTogZnVuY3Rpb24gKHRhcmdldDogb2JqZWN0LCBvSW50ZXJmYWNlOiBhbnkpIHtcblx0XHRjb25zdCBvTW9kZWwgPSBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0TW9kZWwoKSxcblx0XHRcdHNQcm9wZXJ0eVBhdGggPSBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0UGF0aCgpLFxuXHRcdFx0b0Fubm90YXRpb25zID0gb01vZGVsLmdldE9iamVjdChgJHtzUHJvcGVydHlQYXRofUBgKSxcblx0XHRcdGZpZWxkQ29udHJvbCA9IG9Bbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmllbGRDb250cm9sXCJdLFxuXHRcdFx0aW1tdXRhYmxlID0gb0Fubm90YXRpb25zW1wiQE9yZy5PRGF0YS5Db3JlLlYxLkltbXV0YWJsZVwiXSxcblx0XHRcdGNvbXB1dGVkID0gb0Fubm90YXRpb25zW1wiQE9yZy5PRGF0YS5Db3JlLlYxLkNvbXB1dGVkXCJdO1xuXG5cdFx0bGV0IHNFZGl0TW9kZTogRmllbGRFZGl0TW9kZSB8IHN0cmluZyA9IEZpZWxkRWRpdE1vZGUuRWRpdGFibGU7XG5cblx0XHRpZiAoaW1tdXRhYmxlIHx8IGNvbXB1dGVkKSB7XG5cdFx0XHRzRWRpdE1vZGUgPSBGaWVsZEVkaXRNb2RlLlJlYWRPbmx5O1xuXHRcdH0gZWxzZSBpZiAoZmllbGRDb250cm9sKSB7XG5cdFx0XHRpZiAoZmllbGRDb250cm9sLiRFbnVtTWVtYmVyKSB7XG5cdFx0XHRcdGlmIChmaWVsZENvbnRyb2wuJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpZWxkQ29udHJvbFR5cGUvUmVhZE9ubHlcIikge1xuXHRcdFx0XHRcdHNFZGl0TW9kZSA9IEZpZWxkRWRpdE1vZGUuUmVhZE9ubHk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGZpZWxkQ29udHJvbC4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmllbGRDb250cm9sVHlwZS9JbmFwcGxpY2FibGVcIiB8fFxuXHRcdFx0XHRcdGZpZWxkQ29udHJvbC4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmllbGRDb250cm9sVHlwZS9IaWRkZW5cIlxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRzRWRpdE1vZGUgPSBGaWVsZEVkaXRNb2RlLkRpc2FibGVkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoZmllbGRDb250cm9sLiRQYXRoKSB7XG5cdFx0XHRcdHNFZGl0TW9kZSA9XG5cdFx0XHRcdFx0XCJ7PSAle1wiICtcblx0XHRcdFx0XHRmaWVsZENvbnRyb2wuJFBhdGggK1xuXHRcdFx0XHRcdFwifSA8IDMgPyAoJXtcIiArXG5cdFx0XHRcdFx0ZmllbGRDb250cm9sLiRQYXRoICtcblx0XHRcdFx0XHRcIn0gPT09IDAgPyAnXCIgK1xuXHRcdFx0XHRcdEZpZWxkRWRpdE1vZGUuRGlzYWJsZWQgK1xuXHRcdFx0XHRcdFwiJyA6ICdcIiArXG5cdFx0XHRcdFx0RmllbGRFZGl0TW9kZS5SZWFkT25seSArXG5cdFx0XHRcdFx0XCInKSA6ICdcIiArXG5cdFx0XHRcdFx0RmllbGRFZGl0TW9kZS5FZGl0YWJsZSArXG5cdFx0XHRcdFx0XCInfVwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBzRWRpdE1vZGU7XG5cdH0sXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGNvbXBsZXRlIG1ldGFwYXRoIHRvIHRoZSB0YXJnZXQuXG5cdCAqXG5cdCAqIEBwYXJhbSB0YXJnZXRcblx0ICogQHBhcmFtIG9JbnRlcmZhY2Vcblx0ICogQHJldHVybnMgVGhlIG1ldGFwYXRoXG5cdCAqL1xuXHRnZXRNZXRhUGF0aDogZnVuY3Rpb24gKHRhcmdldDogYW55LCBvSW50ZXJmYWNlOiBhbnkpIHtcblx0XHRyZXR1cm4gKG9JbnRlcmZhY2UgJiYgb0ludGVyZmFjZS5jb250ZXh0ICYmIG9JbnRlcmZhY2UuY29udGV4dC5nZXRQYXRoKCkpIHx8IHVuZGVmaW5lZDtcblx0fSxcblx0aXNEZXNrdG9wOiBmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIERldmljZS5zeXN0ZW0uZGVza3RvcCA9PT0gdHJ1ZTtcblx0fSxcblx0Z2V0VGFyZ2V0Q29sbGVjdGlvblBhdGg6IGZ1bmN0aW9uIChjb250ZXh0OiBDb250ZXh0LCBuYXZDb2xsZWN0aW9uPzogYW55KSB7XG5cdFx0bGV0IHNQYXRoID0gY29udGV4dC5nZXRQYXRoKCk7XG5cdFx0aWYgKFxuXHRcdFx0Y29udGV4dC5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKSA9PT0gXCJzYXAudWkubW9kZWwuQ29udGV4dFwiICYmXG5cdFx0XHQoKGNvbnRleHQuZ2V0T2JqZWN0KFwiJGtpbmRcIikgYXMgdW5rbm93biBhcyBzdHJpbmcpID09PSBcIkVudGl0eVNldFwiIHx8XG5cdFx0XHRcdChjb250ZXh0LmdldE9iamVjdChcIiRDb250YWluc1RhcmdldFwiKSBhcyB1bmtub3duIGFzIGJvb2xlYW4pID09PSB0cnVlKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIHNQYXRoO1xuXHRcdH1cblx0XHRpZiAoY29udGV4dC5nZXRNb2RlbCkge1xuXHRcdFx0c1BhdGggPVxuXHRcdFx0XHQoY29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFQYXRoICYmIGNvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhUGF0aChzUGF0aCkpIHx8XG5cdFx0XHRcdGNvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSEuZ2V0TWV0YVBhdGgoc1BhdGgpO1xuXHRcdH1cblx0XHQvL1N1cHBvcnRpbmcgc1BhdGggb2YgYW55IGZvcm1hdCwgZWl0aGVyICcvPGVudGl0eVNldD4vPG5hdmlnYXRpb25Db2xsZWN0aW9uPicgPE9SPiAnLzxlbnRpdHlTZXQ+LyRUeXBlLzxuYXZpZ2F0aW9uQ29sbGVjdGlvbj4nXG5cdFx0Y29uc3QgYVBhcnRzID0gc1BhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihmdW5jdGlvbiAoc1BhcnQ6IGFueSkge1xuXHRcdFx0cmV0dXJuIHNQYXJ0ICYmIHNQYXJ0ICE9IFwiJFR5cGVcIjtcblx0XHR9KTsgLy9maWx0ZXIgb3V0IGVtcHR5IHN0cmluZ3MgYW5kIHBhcnRzIHJlZmVycmluZyB0byAnJFR5cGUnXG5cdFx0Y29uc3QgZW50aXR5U2V0ID0gYC8ke2FQYXJ0c1swXX1gO1xuXHRcdGlmIChhUGFydHMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRyZXR1cm4gZW50aXR5U2V0O1xuXHRcdH1cblx0XHRjb25zdCBuYXZpZ2F0aW9uQ29sbGVjdGlvbiA9IG5hdkNvbGxlY3Rpb24gPT09IHVuZGVmaW5lZCA/IGFQYXJ0cy5zbGljZSgxKS5qb2luKFwiLyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nL1wiKSA6IG5hdkNvbGxlY3Rpb247XG5cdFx0cmV0dXJuIGAke2VudGl0eVNldH0vJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcvJHtuYXZpZ2F0aW9uQ29sbGVjdGlvbn1gOyAvLyB1c2VkIGluIGdvdG9UYXJnZXRFbnRpdHlTZXQgbWV0aG9kIGluIHRoZSBzYW1lIGZpbGVcblx0fSxcblxuXHRpc1Byb3BlcnR5RmlsdGVyYWJsZTogZnVuY3Rpb24gKGNvbnRleHQ6IENvbnRleHQsIG9EYXRhRmllbGQ/OiB7ICRUeXBlOiBzdHJpbmcgfSwgc2tpcEhpZGRlbkZpbHRlcnM/OiBib29sZWFuKTogIGJvb2xlYW4gfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdFx0Y29uc3Qgb01vZGVsID0gY29udGV4dC5nZXRNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0c1Byb3BlcnR5UGF0aCA9IGNvbnRleHQuZ2V0UGF0aCgpLFxuXHRcdFx0Ly8gTG9hY2F0aW9uUGF0aCB3b3VsZCBiZSB0aGUgcHJlZml4IG9mIHNQcm9wZXJ0eVBhdGgsIGV4YW1wbGU6IHNQcm9wZXJ0eVBhdGggPSAnL0N1c3RvbWVyL1NldC9OYW1lJyAtPiBzUHJvcGVydHlMb2NhdGlvblBhdGggPSAnL0N1c3RvbWVyL1NldCdcblx0XHRcdHNQcm9wZXJ0eUxvY2F0aW9uUGF0aCA9IENvbW1vbkhlbHBlci5nZXRMb2NhdGlvbkZvclByb3BlcnR5UGF0aChvTW9kZWwsIHNQcm9wZXJ0eVBhdGgpLFxuXHRcdFx0c1Byb3BlcnR5ID0gc1Byb3BlcnR5UGF0aC5yZXBsYWNlKGAke3NQcm9wZXJ0eUxvY2F0aW9uUGF0aH0vYCwgXCJcIik7XG5cblx0XHRpZiAoXG5cdFx0XHRvRGF0YUZpZWxkICYmXG5cdFx0XHQob0RhdGFGaWVsZC4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb25cIiB8fFxuXHRcdFx0XHRvRGF0YUZpZWxkLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblwiKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiBpc1Byb3BlcnR5RmlsdGVyYWJsZShvTW9kZWwsIHNQcm9wZXJ0eUxvY2F0aW9uUGF0aCwgc1Byb3BlcnR5LCBza2lwSGlkZGVuRmlsdGVycyk7XG5cdH0sXG5cblx0Z2V0TG9jYXRpb25Gb3JQcm9wZXJ0eVBhdGg6IGZ1bmN0aW9uIChvTW9kZWw6IGFueSwgc1Byb3BlcnR5UGF0aDogYW55KSB7XG5cdFx0bGV0IGlMZW5ndGg7XG5cdFx0bGV0IHNDb2xsZWN0aW9uUGF0aCA9IHNQcm9wZXJ0eVBhdGguc2xpY2UoMCwgc1Byb3BlcnR5UGF0aC5sYXN0SW5kZXhPZihcIi9cIikpO1xuXHRcdGlmIChvTW9kZWwuZ2V0T2JqZWN0KGAke3NDb2xsZWN0aW9uUGF0aH0vJGtpbmRgKSA9PT0gXCJFbnRpdHlDb250YWluZXJcIikge1xuXHRcdFx0aUxlbmd0aCA9IHNDb2xsZWN0aW9uUGF0aC5sZW5ndGggKyAxO1xuXHRcdFx0c0NvbGxlY3Rpb25QYXRoID0gc1Byb3BlcnR5UGF0aC5zbGljZShpTGVuZ3RoLCBzUHJvcGVydHlQYXRoLmluZGV4T2YoXCIvXCIsIGlMZW5ndGgpKTtcblx0XHR9XG5cdFx0cmV0dXJuIHNDb2xsZWN0aW9uUGF0aDtcblx0fSxcblx0Z290b0FjdGlvblBhcmFtZXRlcjogZnVuY3Rpb24gKG9Db250ZXh0OiBhbnkpIHtcblx0XHRjb25zdCBzUGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKSxcblx0XHRcdHNQcm9wZXJ0eU5hbWUgPSBvQ29udGV4dC5nZXRPYmplY3QoYCR7c1BhdGh9LyROYW1lYCk7XG5cblx0XHRyZXR1cm4gQ29tbW9uVXRpbHMuZ2V0UGFyYW1ldGVyUGF0aChzUGF0aCwgc1Byb3BlcnR5TmFtZSk7XG5cdH0sXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBlbnRpdHkgc2V0IG5hbWUgZnJvbSB0aGUgZW50aXR5IHR5cGUgbmFtZS5cblx0ICpcblx0ICogQHBhcmFtIG9NZXRhTW9kZWwgT0RhdGEgdjQgbWV0YW1vZGVsIGluc3RhbmNlXG5cdCAqIEBwYXJhbSBzRW50aXR5VHlwZSBFbnRpdHlUeXBlIG9mIHRoZSBhY3Rpb21cblx0ICogQHJldHVybnMgVGhlIEVudGl0eVNldCBvZiB0aGUgYm91bmQgYWN0aW9uXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKi9cblx0Z2V0RW50aXR5U2V0TmFtZTogZnVuY3Rpb24gKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzRW50aXR5VHlwZTogc3RyaW5nKSB7XG5cdFx0Y29uc3Qgb0VudGl0eUNvbnRhaW5lciA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KFwiL1wiKTtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBvRW50aXR5Q29udGFpbmVyKSB7XG5cdFx0XHRpZiAodHlwZW9mIG9FbnRpdHlDb250YWluZXJba2V5XSA9PT0gXCJvYmplY3RcIiAmJiBvRW50aXR5Q29udGFpbmVyW2tleV0uJFR5cGUgPT09IHNFbnRpdHlUeXBlKSB7XG5cdFx0XHRcdHJldHVybiBrZXk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH0sXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBtZXRhbW9kZWwgcGF0aCBjb3JyZWN0bHkgZm9yIGJvdW5kIGFjdGlvbnMgaWYgdXNlZCB3aXRoIGJSZXR1cm5Pbmx5UGF0aCBhcyB0cnVlLFxuXHQgKiBlbHNlIHJldHVybnMgYW4gb2JqZWN0IHdoaWNoIGhhcyAzIHByb3BlcnRpZXMgcmVsYXRlZCB0byB0aGUgYWN0aW9uLiBUaGV5IGFyZSB0aGUgZW50aXR5IHNldCBuYW1lLFxuXHQgKiB0aGUgJFBhdGggdmFsdWUgb2YgdGhlIE9wZXJhdGlvbkF2YWlsYWJsZSBhbm5vdGF0aW9uIGFuZCB0aGUgYmluZGluZyBwYXJhbWV0ZXIgbmFtZS4gSWZcblx0ICogYkNoZWNrU3RhdGljVmFsdWUgaXMgdHJ1ZSwgcmV0dXJucyB0aGUgc3RhdGljIHZhbHVlIG9mIE9wZXJhdGlvbkF2YWlsYWJsZSBhbm5vdGF0aW9uLCBpZiBwcmVzZW50LlxuXHQgKiBlLmcuIGZvciBib3VuZCBhY3Rpb24gc29tZU5hbWVTcGFjZS5Tb21lQm91bmRBY3Rpb25cblx0ICogb2YgZW50aXR5IHNldCBTb21lRW50aXR5U2V0LCB0aGUgc3RyaW5nIFwiL1NvbWVFbnRpdHlTZXQvc29tZU5hbWVTcGFjZS5Tb21lQm91bmRBY3Rpb25cIiBpcyByZXR1cm5lZC5cblx0ICpcblx0ICogQHBhcmFtIG9BY3Rpb24gVGhlIGNvbnRleHQgb2JqZWN0IG9mIHRoZSBhY3Rpb25cblx0ICogQHBhcmFtIGJSZXR1cm5Pbmx5UGF0aCBJZiBmYWxzZSwgYWRkaXRpb25hbCBpbmZvIGlzIHJldHVybmVkIGFsb25nIHdpdGggbWV0YW1vZGVsIHBhdGggdG8gdGhlIGJvdW5kIGFjdGlvblxuXHQgKiBAcGFyYW0gc0FjdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGJvdW5kIGFjdGlvbiBvZiB0aGUgZm9ybSBzb21lTmFtZVNwYWNlLlNvbWVCb3VuZEFjdGlvblxuXHQgKiBAcGFyYW0gYkNoZWNrU3RhdGljVmFsdWUgSWYgdHJ1ZSwgdGhlIHN0YXRpYyB2YWx1ZSBvZiBPcGVyYXRpb25BdmFpbGFibGUgaXMgcmV0dXJuZWQsIGlmIHByZXNlbnRcblx0ICogQHJldHVybnMgVGhlIHN0cmluZyBvciBvYmplY3QgYXMgc3BlY2lmaWVkIGJ5IGJSZXR1cm5Pbmx5UGF0aFxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICovXG5cdGdldEFjdGlvblBhdGg6IGZ1bmN0aW9uIChvQWN0aW9uOiBhbnksIGJSZXR1cm5Pbmx5UGF0aDogYm9vbGVhbiwgc0FjdGlvbk5hbWU/OiBzdHJpbmcsIGJDaGVja1N0YXRpY1ZhbHVlPzogYm9vbGVhbikge1xuXHRcdGxldCBzQ29udGV4dFBhdGggPSBvQWN0aW9uLmdldFBhdGgoKS5zcGxpdChcIi9AXCIpWzBdO1xuXG5cdFx0c0FjdGlvbk5hbWUgPSAhc0FjdGlvbk5hbWUgPyBvQWN0aW9uLmdldE9iamVjdChvQWN0aW9uLmdldFBhdGgoKSkgOiBzQWN0aW9uTmFtZTtcblxuXHRcdGlmIChzQWN0aW9uTmFtZSAmJiBzQWN0aW9uTmFtZS5pbmNsdWRlcyhcIihcIikpIHtcblx0XHRcdC8vIGFjdGlvbiBib3VuZCB0byBhbm90aGVyIGVudGl0eSB0eXBlXG5cdFx0XHRzQWN0aW9uTmFtZSA9IHNBY3Rpb25OYW1lLnNwbGl0KFwiKFwiKVswXTtcblx0XHR9IGVsc2UgaWYgKG9BY3Rpb24uZ2V0T2JqZWN0KHNDb250ZXh0UGF0aCkpIHtcblx0XHRcdC8vIFRPRE86IHRoaXMgbG9naWMgc291bmRzIHdyb25nLCB0byBiZSBjb3JyZWN0ZWRcblx0XHRcdGNvbnN0IHNFbnRpdHlUeXBlTmFtZSA9IG9BY3Rpb24uZ2V0T2JqZWN0KHNDb250ZXh0UGF0aCkuJFR5cGU7XG5cdFx0XHRjb25zdCBzRW50aXR5TmFtZSA9IHRoaXMuZ2V0RW50aXR5U2V0TmFtZShvQWN0aW9uLmdldE1vZGVsKCksIHNFbnRpdHlUeXBlTmFtZSk7XG5cdFx0XHRpZiAoc0VudGl0eU5hbWUpIHtcblx0XHRcdFx0c0NvbnRleHRQYXRoID0gYC8ke3NFbnRpdHlOYW1lfWA7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBzQ29udGV4dFBhdGg7XG5cdFx0fVxuXG5cdFx0aWYgKGJDaGVja1N0YXRpY1ZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gb0FjdGlvbi5nZXRPYmplY3QoYCR7c0NvbnRleHRQYXRofS8ke3NBY3Rpb25OYW1lfUBPcmcuT0RhdGEuQ29yZS5WMS5PcGVyYXRpb25BdmFpbGFibGVgKTtcblx0XHR9XG5cdFx0aWYgKGJSZXR1cm5Pbmx5UGF0aCkge1xuXHRcdFx0cmV0dXJuIGAke3NDb250ZXh0UGF0aH0vJHtzQWN0aW9uTmFtZX1gO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzQ29udGV4dFBhdGg6IHNDb250ZXh0UGF0aCxcblx0XHRcdFx0c1Byb3BlcnR5OiBvQWN0aW9uLmdldE9iamVjdChgJHtzQ29udGV4dFBhdGh9LyR7c0FjdGlvbk5hbWV9QE9yZy5PRGF0YS5Db3JlLlYxLk9wZXJhdGlvbkF2YWlsYWJsZS8kUGF0aGApLFxuXHRcdFx0XHRzQmluZGluZ1BhcmFtZXRlcjogb0FjdGlvbi5nZXRPYmplY3QoYCR7c0NvbnRleHRQYXRofS8ke3NBY3Rpb25OYW1lfS9AJHVpNS5vdmVybG9hZC8wLyRQYXJhbWV0ZXIvMC8kTmFtZWApXG5cdFx0XHR9O1xuXHRcdH1cblx0fSxcblxuXHRnZXROYXZpZ2F0aW9uQ29udGV4dDogZnVuY3Rpb24gKG9Db250ZXh0OiBhbnkpIHtcblx0XHRyZXR1cm4gT0RhdGFNb2RlbEFubm90YXRpb25IZWxwZXIuZ2V0TmF2aWdhdGlvblBhdGgob0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgcGF0aCB3aXRob3V0IHRoZSBlbnRpdHkgdHlwZSAocG90ZW50aWFsbHkgZmlyc3QpIGFuZCBwcm9wZXJ0eSAobGFzdCkgcGFydCAob3B0aW9uYWwpLlxuXHQgKiBUaGUgcmVzdWx0IGNhbiBiZSBhbiBlbXB0eSBzdHJpbmcgaWYgaXQgaXMgYSBzaW1wbGUgZGlyZWN0IHByb3BlcnR5LlxuXHQgKlxuXHQgKiBJZiBhbmQgb25seSBpZiB0aGUgZ2l2ZW4gcHJvcGVydHkgcGF0aCBzdGFydHMgd2l0aCBhIHNsYXNoICgvKSwgaXQgaXMgY29uc2lkZXJlZCB0aGF0IHRoZSBlbnRpdHkgdHlwZVxuXHQgKiBpcyBwYXJ0IG9mIHRoZSBwYXRoIGFuZCB3aWxsIGJlIHN0cmlwcGVkIGF3YXkuXG5cdCAqXG5cdCAqIEBwYXJhbSBzUHJvcGVydHlQYXRoXG5cdCAqIEBwYXJhbSBiS2VlcFByb3BlcnR5XG5cdCAqIEByZXR1cm5zIFRoZSBuYXZpZ2F0aW9uIHBhdGhcblx0ICovXG5cdGdldE5hdmlnYXRpb25QYXRoOiBmdW5jdGlvbiAoc1Byb3BlcnR5UGF0aDogYW55LCBiS2VlcFByb3BlcnR5PzogYm9vbGVhbikge1xuXHRcdGNvbnN0IGJTdGFydHNXaXRoRW50aXR5VHlwZSA9IHNQcm9wZXJ0eVBhdGguc3RhcnRzV2l0aChcIi9cIik7XG5cdFx0Y29uc3QgYVBhcnRzID0gc1Byb3BlcnR5UGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKGZ1bmN0aW9uIChwYXJ0OiBhbnkpIHtcblx0XHRcdHJldHVybiAhIXBhcnQ7XG5cdFx0fSk7XG5cdFx0aWYgKGJTdGFydHNXaXRoRW50aXR5VHlwZSkge1xuXHRcdFx0YVBhcnRzLnNoaWZ0KCk7XG5cdFx0fVxuXHRcdGlmICghYktlZXBQcm9wZXJ0eSkge1xuXHRcdFx0YVBhcnRzLnBvcCgpO1xuXHRcdH1cblx0XHRyZXR1cm4gYVBhcnRzLmpvaW4oXCIvXCIpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBjb3JyZWN0IG1ldGFtb2RlbCBwYXRoIGZvciBib3VuZCBhY3Rpb25zLlxuXHQgKlxuXHQgKiBTaW5jZSB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgaXJyZXNwZWN0aXZlIG9mIHRoZSBhY3Rpb24gdHlwZSwgdGhpcyB3aWxsIGJlIGFwcGxpZWQgdG8gdW5ib3VuZCBhY3Rpb25zLlxuXHQgKiBJbiBzdWNoIGEgY2FzZSwgaWYgYW4gaW5jb3JyZWN0IHBhdGggaXMgcmV0dXJuZWQsIGl0IGlzIGlnbm9yZWQgZHVyaW5nIHRlbXBsYXRpbmcuXG5cdCAqXG5cdCAqIEV4YW1wbGU6IGZvciB0aGUgYm91bmQgYWN0aW9uIHNvbWVOYW1lU3BhY2UuU29tZUJvdW5kQWN0aW9uIG9mIGVudGl0eSBzZXQgU29tZUVudGl0eVNldCxcblx0ICogdGhlIHN0cmluZyBcIi9Tb21lRW50aXR5U2V0L3NvbWVOYW1lU3BhY2UuU29tZUJvdW5kQWN0aW9uXCIgaXMgcmV0dXJuZWQuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAc3RhdGljXG5cdCAqIEBuYW1lIHNhcC5mZS5tYWNyb3MuQ29tbW9uSGVscGVyLmdldEFjdGlvbkNvbnRleHRcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5tYWNyb3MuQ29tbW9uSGVscGVyXG5cdCAqIEBwYXJhbSBvQWN0aW9uIENvbnRleHQgb2JqZWN0IGZvciB0aGUgYWN0aW9uXG5cdCAqIEByZXR1cm5zIENvcnJlY3QgbWV0YW1vZGVsIHBhdGggZm9yIGJvdW5kIGFuZCBpbmNvcnJlY3QgcGF0aCBmb3IgdW5ib3VuZCBhY3Rpb25zXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKi9cblx0Z2V0QWN0aW9uQ29udGV4dDogZnVuY3Rpb24gKG9BY3Rpb246IG9iamVjdCkge1xuXHRcdHJldHVybiBDb21tb25IZWxwZXIuZ2V0QWN0aW9uUGF0aChvQWN0aW9uLCB0cnVlKTtcblx0fSxcblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIG1ldGFtb2RlbCBwYXRoIGNvcnJlY3RseSBmb3Igb3ZlcmxvYWRlZCBib3VuZCBhY3Rpb25zLiBGb3IgdW5ib3VuZCBhY3Rpb25zLFxuXHQgKiB0aGUgaW5jb3JyZWN0IHBhdGggaXMgcmV0dXJuZWQsIGJ1dCBpZ25vcmVkIGR1cmluZyB0ZW1wbGF0aW5nLlxuXHQgKiBlLmcuIGZvciBib3VuZCBhY3Rpb24gc29tZU5hbWVTcGFjZS5Tb21lQm91bmRBY3Rpb24gb2YgZW50aXR5IHNldCBTb21lRW50aXR5U2V0LFxuXHQgKiB0aGUgc3RyaW5nIFwiL1NvbWVFbnRpdHlTZXQvc29tZU5hbWVTcGFjZS5Tb21lQm91bmRBY3Rpb24vQCR1aTUub3ZlcmxvYWQvMFwiIGlzIHJldHVybmVkLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHN0YXRpY1xuXHQgKiBAbmFtZSBzYXAuZmUubWFjcm9zLkNvbW1vbkhlbHBlci5nZXRQYXRoVG9Cb3VuZEFjdGlvbk92ZXJsb2FkXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUubWFjcm9zLkNvbW1vbkhlbHBlclxuXHQgKiBAcGFyYW0gb0FjdGlvbiBUaGUgY29udGV4dCBvYmplY3QgZm9yIHRoZSBhY3Rpb25cblx0ICogQHJldHVybnMgVGhlIGNvcnJlY3QgbWV0YW1vZGVsIHBhdGggZm9yIGJvdW5kIGFjdGlvbiBvdmVybG9hZCBhbmQgaW5jb3JyZWN0IHBhdGggZm9yIHVuYm91bmQgYWN0aW9uc1xuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICovXG5cdGdldFBhdGhUb0JvdW5kQWN0aW9uT3ZlcmxvYWQ6IGZ1bmN0aW9uIChvQWN0aW9uOiBvYmplY3QpIHtcblx0XHRjb25zdCBzUGF0aCA9IENvbW1vbkhlbHBlci5nZXRBY3Rpb25QYXRoKG9BY3Rpb24sIHRydWUpO1xuXHRcdHJldHVybiBgJHtzUGF0aH0vQCR1aTUub3ZlcmxvYWQvMGA7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHN0cmluZyB3aXRoIHNpbmdsZSBxdW90ZXMuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLm1hY3Jvcy5Db21tb25IZWxwZXJcblx0ICogQHBhcmFtIHNWYWx1ZSBTb21lIHN0cmluZyB0aGF0IG5lZWRzIHRvIGJlIGNvbnZlcnRlZCBpbnRvIHNpbmdsZSBxdW90ZXNcblx0ICogQHBhcmFtIFtiRXNjYXBlXSBTaG91bGQgdGhlIHN0cmluZyBiZSBlc2NhcGVkIGJlZm9yZWhhbmRcblx0ICogQHJldHVybnMgLSBTdHJpbmcgd2l0aCBzaW5nbGUgcXVvdGVzXG5cdCAqL1xuXHRhZGRTaW5nbGVRdW90ZXM6IGZ1bmN0aW9uIChzVmFsdWU6IHN0cmluZywgYkVzY2FwZT86IGJvb2xlYW4pIHtcblx0XHRpZiAoYkVzY2FwZSAmJiBzVmFsdWUpIHtcblx0XHRcdHNWYWx1ZSA9IHRoaXMuZXNjYXBlU2luZ2xlUXVvdGVzKHNWYWx1ZSk7XG5cdFx0fVxuXHRcdHJldHVybiBgJyR7c1ZhbHVlfSdgO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBzdHJpbmcgd2l0aCBlc2NhcGVkIHNpbmdsZSBxdW90ZXMuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLm1hY3Jvcy5Db21tb25IZWxwZXJcblx0ICogQHBhcmFtIHNWYWx1ZSBTb21lIHN0cmluZyB0aGF0IG5lZWRzIGVzY2FwaW5nIG9mIHNpbmdsZSBxdW90ZXNcblx0ICogQHJldHVybnMgLSBTdHJpbmcgd2l0aCBlc2NhcGVkIHNpbmdsZSBxdW90ZXNcblx0ICovXG5cdGVzY2FwZVNpbmdsZVF1b3RlczogZnVuY3Rpb24gKHNWYWx1ZTogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHNWYWx1ZS5yZXBsYWNlKC9bJ10vZywgXCJcXFxcJ1wiKTtcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgZnVuY3Rpb24gc3RyaW5nXG5cdCAqIFRoZSBmaXJzdCBhcmd1bWVudCBvZiBnZW5lcmF0ZUZ1bmN0aW9uIGlzIG5hbWUgb2YgdGhlIGdlbmVyYXRlZCBmdW5jdGlvbiBzdHJpbmcuXG5cdCAqIFJlbWFpbmluZyBhcmd1bWVudHMgb2YgZ2VuZXJhdGVGdW5jdGlvbiBhcmUgYXJndW1lbnRzIG9mIHRoZSBuZXdseSBnZW5lcmF0ZWQgZnVuY3Rpb24gc3RyaW5nLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG1lbWJlcm9mIHNhcC5mZS5tYWNyb3MuQ29tbW9uSGVscGVyXG5cdCAqIEBwYXJhbSBzRnVuY05hbWUgU29tZSBzdHJpbmcgZm9yIHRoZSBmdW5jdGlvbiBuYW1lXG5cdCAqIEBwYXJhbSBhcmdzIFRoZSByZW1haW5pbmcgYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIC0gRnVuY3Rpb24gc3RyaW5nIGRlcGVuZHMgb24gYXJndW1lbnRzIHBhc3NlZFxuXHQgKi9cblx0Z2VuZXJhdGVGdW5jdGlvbjogZnVuY3Rpb24gKHNGdW5jTmFtZTogc3RyaW5nLCAuLi5hcmdzOiBzdHJpbmdbXSkge1xuXHRcdGxldCBzUGFyYW1zID0gXCJcIjtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdHNQYXJhbXMgKz0gYXJnc1tpXTtcblx0XHRcdGlmIChpIDwgYXJncy5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdHNQYXJhbXMgKz0gXCIsIFwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGxldCBzRnVuY3Rpb24gPSBgJHtzRnVuY05hbWV9KClgO1xuXHRcdGlmIChzUGFyYW1zKSB7XG5cdFx0XHRzRnVuY3Rpb24gPSBgJHtzRnVuY05hbWV9KCR7c1BhcmFtc30pYDtcblx0XHR9XG5cdFx0cmV0dXJuIHNGdW5jdGlvbjtcblx0fSxcblx0Lypcblx0ICogUmV0dXJucyB0aGUgdmlzaWJpbGl0eSBleHByZXNzaW9uIGZvciBkYXRhcG9pbnQgdGl0bGUvbGlua1xuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtzdHJpbmd9IFtzUGF0aF0gYW5ub3RhdGlvbiBwYXRoIG9mIGRhdGEgcG9pbnQgb3IgTWljcm9jaGFydFxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IFtiTGlua10gdHJ1ZSBpZiBsaW5rIHZpc2liaWxpdHkgaXMgYmVpbmcgZGV0ZXJtaW5lZCwgZmFsc2UgaWYgdGl0bGUgdmlzaWJpbGl0eSBpcyBiZWluZyBkZXRlcm1pbmVkXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW2JGaWVsZFZpc2liaWxpdHldIHRydWUgaWYgZmllbGQgaXMgdnNpaWJsZSwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqIEByZXR1cm5zICB7c3RyaW5nfSBzVmlzaWJpbGl0eUV4cCBVc2VkIHRvIGdldCB0aGUgIHZpc2liaWxpdHkgYmluZGluZyBmb3IgRGF0YVBvaW50cyB0aXRsZSBpbiB0aGUgSGVhZGVyLlxuXHQgKlxuXHQgKi9cblxuXHRnZXRIZWFkZXJEYXRhUG9pbnRMaW5rVmlzaWJpbGl0eTogZnVuY3Rpb24gKHNQYXRoOiBhbnksIGJMaW5rOiBhbnksIGJGaWVsZFZpc2liaWxpdHk6IGFueSkge1xuXHRcdGxldCBzVmlzaWJpbGl0eUV4cDtcblx0XHRpZiAoYkZpZWxkVmlzaWJpbGl0eSkge1xuXHRcdFx0c1Zpc2liaWxpdHlFeHAgPSBiTGlua1xuXHRcdFx0XHQ/IFwiez0gJHtpbnRlcm5hbD5pc0hlYWRlckRQTGlua1Zpc2libGUvXCIgKyBzUGF0aCArIFwifSA9PT0gdHJ1ZSAmJiBcIiArIGJGaWVsZFZpc2liaWxpdHkgKyBcIn1cIlxuXHRcdFx0XHQ6IFwiez0gJHtpbnRlcm5hbD5pc0hlYWRlckRQTGlua1Zpc2libGUvXCIgKyBzUGF0aCArIFwifSAhPT0gdHJ1ZSAmJiBcIiArIGJGaWVsZFZpc2liaWxpdHkgKyBcIn1cIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c1Zpc2liaWxpdHlFeHAgPSBiTGlua1xuXHRcdFx0XHQ/IFwiez0gJHtpbnRlcm5hbD5pc0hlYWRlckRQTGlua1Zpc2libGUvXCIgKyBzUGF0aCArIFwifSA9PT0gdHJ1ZX1cIlxuXHRcdFx0XHQ6IFwiez0gJHtpbnRlcm5hbD5pc0hlYWRlckRQTGlua1Zpc2libGUvXCIgKyBzUGF0aCArIFwifSAhPT0gdHJ1ZX1cIjtcblx0XHR9XG5cdFx0cmV0dXJuIHNWaXNpYmlsaXR5RXhwO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBvYmplY3QgdG8gc3RyaW5nKGRpZmZlcmVudCBmcm9tIEpTT04uc3RyaW5naWZ5IG9yLnRvU3RyaW5nKS5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUubWFjcm9zLkNvbW1vbkhlbHBlclxuXHQgKiBAcGFyYW0gb1BhcmFtcyBTb21lIG9iamVjdFxuXHQgKiBAcmV0dXJucyAtIE9iamVjdCBzdHJpbmdcblx0ICovXG5cdG9iamVjdFRvU3RyaW5nOiBmdW5jdGlvbiAob1BhcmFtczogYW55KSB7XG5cdFx0bGV0IGlOdW1iZXJPZktleXMgPSBPYmplY3Qua2V5cyhvUGFyYW1zKS5sZW5ndGgsXG5cdFx0XHRzUGFyYW1zID0gXCJcIjtcblxuXHRcdGZvciAoY29uc3Qgc0tleSBpbiBvUGFyYW1zKSB7XG5cdFx0XHRsZXQgc1ZhbHVlID0gb1BhcmFtc1tzS2V5XTtcblx0XHRcdGlmIChzVmFsdWUgJiYgdHlwZW9mIHNWYWx1ZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRzVmFsdWUgPSB0aGlzLm9iamVjdFRvU3RyaW5nKHNWYWx1ZSk7XG5cdFx0XHR9XG5cdFx0XHRzUGFyYW1zICs9IGAke3NLZXl9OiAke3NWYWx1ZX1gO1xuXHRcdFx0aWYgKGlOdW1iZXJPZktleXMgPiAxKSB7XG5cdFx0XHRcdC0taU51bWJlck9mS2V5cztcblx0XHRcdFx0c1BhcmFtcyArPSBcIiwgXCI7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGB7ICR7c1BhcmFtc319YDtcblx0fSxcblxuXHQvKipcblx0ICogUmVtb3ZlcyBlc2NhcGUgY2hhcmFjdGVycyAoXFwpIGZyb20gYW4gZXhwcmVzc2lvbi5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUubWFjcm9zLkNvbW1vbkhlbHBlclxuXHQgKiBAcGFyYW0gc0V4cHJlc3Npb24gQW4gZXhwcmVzc2lvbiB3aXRoIGVzY2FwZSBjaGFyYWN0ZXJzXG5cdCAqIEByZXR1cm5zIEV4cHJlc3Npb24gc3RyaW5nIHdpdGhvdXQgZXNjYXBlIGNoYXJhY3RlcnMgb3IgdW5kZWZpbmVkXG5cdCAqL1xuXHRyZW1vdmVFc2NhcGVDaGFyYWN0ZXJzOiBmdW5jdGlvbiAoc0V4cHJlc3Npb246IHN0cmluZykge1xuXHRcdHJldHVybiBzRXhwcmVzc2lvbiA/IHNFeHByZXNzaW9uLnJlcGxhY2UoL1xcXFw/XFxcXChbe31dKS9nLCBcIiQxXCIpIDogdW5kZWZpbmVkO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNYWtlcyB1cGRhdGVzIHRvIGEgc3RyaW5naWZpZWQgb2JqZWN0IHNvIHRoYXQgaXQgd29ya3MgcHJvcGVybHkgaW4gYSB0ZW1wbGF0ZSBieSBhZGRpbmcgdWk1T2JqZWN0OnRydWUuXG5cdCAqXG5cdCAqIEBwYXJhbSBzU3RyaW5naWZpZWRcblx0ICogQHJldHVybnMgVGhlIHVwZGF0ZWQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvYmplY3Rcblx0ICovXG5cdHN0cmluZ2lmeU9iamVjdDogZnVuY3Rpb24gKHNTdHJpbmdpZmllZDogc3RyaW5nKSB7XG5cdFx0aWYgKCFzU3RyaW5naWZpZWQgfHwgc1N0cmluZ2lmaWVkID09PSBcInt9XCIpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IG9PYmplY3QgPSBKU09OLnBhcnNlKHNTdHJpbmdpZmllZCk7XG5cdFx0XHRpZiAodHlwZW9mIG9PYmplY3QgPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkob09iamVjdCkpIHtcblx0XHRcdFx0Y29uc3Qgb1VJNU9iamVjdCA9IHtcblx0XHRcdFx0XHR1aTVvYmplY3Q6IHRydWVcblx0XHRcdFx0fTtcblx0XHRcdFx0T2JqZWN0LmFzc2lnbihvVUk1T2JqZWN0LCBvT2JqZWN0KTtcblx0XHRcdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KG9VSTVPYmplY3QpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3Qgc1R5cGUgPSBBcnJheS5pc0FycmF5KG9PYmplY3QpID8gXCJBcnJheVwiIDogdHlwZW9mIG9PYmplY3Q7XG5cdFx0XHRcdExvZy5lcnJvcihgVW5leHBlY3RlZCBvYmplY3QgdHlwZSBpbiBzdHJpbmdpZnlPYmplY3QgKCR7c1R5cGV9KSAtIG9ubHkgd29ya3Mgd2l0aCBvYmplY3RgKTtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwic3RyaW5naWZ5T2JqZWN0IG9ubHkgd29ya3Mgd2l0aCBvYmplY3RzIVwiKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIENyZWF0ZSBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gZGF0YSwgdGFraW5nIGNhcmUgdGhhdCBpdCBpcyBub3QgdHJlYXRlZCBhcyBhIGJpbmRpbmcgZXhwcmVzc2lvbi5cblx0ICpcblx0ICogQHBhcmFtIHZEYXRhIFRoZSBkYXRhIHRvIHN0cmluZ2lmeVxuXHQgKiBAcmV0dXJucyBUaGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRhLlxuXHQgKi9cblx0c3RyaW5naWZ5Q3VzdG9tRGF0YTogZnVuY3Rpb24gKHZEYXRhOiBvYmplY3QgfCBzdHJpbmcgfCB1bmRlZmluZWQpIHtcblx0XHRjb25zdCBvT2JqZWN0OiBhbnkgPSB7XG5cdFx0XHR1aTVvYmplY3Q6IHRydWVcblx0XHR9O1xuXHRcdG9PYmplY3RbXCJjdXN0b21EYXRhXCJdID0gdkRhdGEgaW5zdGFuY2VvZiBDb250ZXh0ID8gdkRhdGEuZ2V0T2JqZWN0KCkgOiB2RGF0YTtcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkob09iamVjdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFBhcnNlcyB0aGUgZ2l2ZW4gZGF0YSwgcG90ZW50aWFsbHkgdW53cmFwcyB0aGUgZGF0YS5cblx0ICpcblx0ICogQHBhcmFtIHZEYXRhIFRoZSBkYXRhIHRvIHBhcnNlXG5cdCAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgdGhlIGRhdGEgcGFyc2luZ1xuXHQgKi9cblx0cGFyc2VDdXN0b21EYXRhOiBmdW5jdGlvbiAodkRhdGE6IGFueSkge1xuXHRcdHZEYXRhID0gdHlwZW9mIHZEYXRhID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZSh2RGF0YSkgOiB2RGF0YTtcblx0XHRpZiAodkRhdGEgJiYgdkRhdGEuaGFzT3duUHJvcGVydHkoXCJjdXN0b21EYXRhXCIpKSB7XG5cdFx0XHRyZXR1cm4gdkRhdGFbXCJjdXN0b21EYXRhXCJdO1xuXHRcdH1cblx0XHRyZXR1cm4gdkRhdGE7XG5cdH0sXG5cdGdldENvbnRleHRQYXRoOiBmdW5jdGlvbiAob1ZhbHVlOiBhbnksIG9JbnRlcmZhY2U6IGFueSkge1xuXHRcdGNvbnN0IHNQYXRoID0gb0ludGVyZmFjZSAmJiBvSW50ZXJmYWNlLmNvbnRleHQgJiYgb0ludGVyZmFjZS5jb250ZXh0LmdldFBhdGgoKTtcblx0XHRyZXR1cm4gc1BhdGhbc1BhdGgubGVuZ3RoIC0gMV0gPT09IFwiL1wiID8gc1BhdGguc2xpY2UoMCwgLTEpIDogc1BhdGg7XG5cdH0sXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgc3RyaW5naWZpZWQgSlNPTiBvYmplY3QgY29udGFpbmluZyAgUHJlc2VudGF0aW9uIFZhcmlhbnQgc29ydCBjb25kaXRpb25zLlxuXHQgKlxuXHQgKiBAcGFyYW0gb0NvbnRleHRcblx0ICogQHBhcmFtIG9QcmVzZW50YXRpb25WYXJpYW50IFByZXNlbnRhdGlvbiB2YXJpYW50IEFubm90YXRpb25cblx0ICogQHBhcmFtIHNQcmVzZW50YXRpb25WYXJpYW50UGF0aFxuXHQgKiBAcmV0dXJucyBTdHJpbmdpZmllZCBKU09OIG9iamVjdFxuXHQgKi9cblx0Z2V0U29ydENvbmRpdGlvbnM6IGZ1bmN0aW9uIChvQ29udGV4dDogYW55LCBvUHJlc2VudGF0aW9uVmFyaWFudDogYW55LCBzUHJlc2VudGF0aW9uVmFyaWFudFBhdGg6IHN0cmluZykge1xuXHRcdGlmIChcblx0XHRcdG9QcmVzZW50YXRpb25WYXJpYW50ICYmXG5cdFx0XHRDb21tb25IZWxwZXIuX2lzUHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24oc1ByZXNlbnRhdGlvblZhcmlhbnRQYXRoKSAmJlxuXHRcdFx0b1ByZXNlbnRhdGlvblZhcmlhbnQuU29ydE9yZGVyXG5cdFx0KSB7XG5cdFx0XHRjb25zdCBhU29ydENvbmRpdGlvbnM6IGFueSA9IHtcblx0XHRcdFx0c29ydGVyczogW11cblx0XHRcdH07XG5cblx0XHRcdGNvbnN0IHNFbnRpdHlQYXRoID0gb0NvbnRleHQuZ2V0UGF0aCgwKS5zcGxpdChcIkBcIilbMF07XG5cdFx0XHRvUHJlc2VudGF0aW9uVmFyaWFudC5Tb3J0T3JkZXIuZm9yRWFjaChmdW5jdGlvbiAob0NvbmRpdGlvbjogYW55ID0ge30pIHtcblx0XHRcdFx0bGV0IG9Tb3J0UHJvcGVydHk6IGFueSA9IHt9O1xuXHRcdFx0XHRjb25zdCBvU29ydGVyOiBhbnkgPSB7fTtcblx0XHRcdFx0aWYgKG9Db25kaXRpb24uRHluYW1pY1Byb3BlcnR5KSB7XG5cdFx0XHRcdFx0b1NvcnRQcm9wZXJ0eSA9IG9Db250ZXh0LmdldE1vZGVsKDApLmdldE9iamVjdChzRW50aXR5UGF0aCArIG9Db25kaXRpb24uRHluYW1pY1Byb3BlcnR5LiRBbm5vdGF0aW9uUGF0aCk/Lk5hbWU7XG5cdFx0XHRcdH0gZWxzZSBpZiAob0NvbmRpdGlvbi5Qcm9wZXJ0eSkge1xuXHRcdFx0XHRcdG9Tb3J0UHJvcGVydHkgPSBvQ29uZGl0aW9uLlByb3BlcnR5LiRQcm9wZXJ0eVBhdGg7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG9Tb3J0UHJvcGVydHkpIHtcblx0XHRcdFx0XHRvU29ydGVyLm5hbWUgPSBvU29ydFByb3BlcnR5O1xuXHRcdFx0XHRcdG9Tb3J0ZXIuZGVzY2VuZGluZyA9ICEhb0NvbmRpdGlvbi5EZXNjZW5kaW5nO1xuXHRcdFx0XHRcdGFTb3J0Q29uZGl0aW9ucy5zb3J0ZXJzLnB1c2gob1NvcnRlcik7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIGRlZmluZSB0aGUgcmlnaHQgcGF0aCB0byB0aGUgc29ydCBwcm9wZXJ0eVwiKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYVNvcnRDb25kaXRpb25zKTtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fSxcblx0X2lzUHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb246IGZ1bmN0aW9uIChhbm5vdGF0aW9uUGF0aDogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdGFubm90YXRpb25QYXRoLmluY2x1ZGVzKGBAJHtVSUFubm90YXRpb25UZXJtcy5QcmVzZW50YXRpb25WYXJpYW50fWApIHx8XG5cdFx0XHRhbm5vdGF0aW9uUGF0aC5pbmNsdWRlcyhgQCR7VUlBbm5vdGF0aW9uVGVybXMuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudH1gKVxuXHRcdCk7XG5cdH0sXG5cdGNyZWF0ZVByZXNlbnRhdGlvblBhdGhDb250ZXh0OiBmdW5jdGlvbiAob1ByZXNlbnRhdGlvbkNvbnRleHQ6IGFueSkge1xuXHRcdGNvbnN0IGFQYXRocyA9IG9QcmVzZW50YXRpb25Db250ZXh0LnNQYXRoLnNwbGl0KFwiQFwiKSB8fCBbXTtcblx0XHRjb25zdCBvTW9kZWwgPSBvUHJlc2VudGF0aW9uQ29udGV4dC5nZXRNb2RlbCgpO1xuXHRcdGlmIChhUGF0aHMubGVuZ3RoICYmIGFQYXRoc1thUGF0aHMubGVuZ3RoIC0gMV0uaW5kZXhPZihcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRcIikgPiAtMSkge1xuXHRcdFx0Y29uc3Qgc1BhdGggPSBvUHJlc2VudGF0aW9uQ29udGV4dC5zUGF0aC5zcGxpdChcIi9QcmVzZW50YXRpb25WYXJpYW50XCIpWzBdO1xuXHRcdFx0cmV0dXJuIG9Nb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHtzUGF0aH1Ac2FwdWkubmFtZWApO1xuXHRcdH1cblx0XHRyZXR1cm4gb01vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAke29QcmVzZW50YXRpb25Db250ZXh0LnNQYXRofUBzYXB1aS5uYW1lYCk7XG5cdH0sXG5cdGdldFByZXNzSGFuZGxlckZvckRhdGFGaWVsZEZvcklCTjogZnVuY3Rpb24gKG9EYXRhRmllbGQ6IGFueSwgc0NvbnRleHQ/OiBzdHJpbmcsIGJOYXZpZ2F0ZVdpdGhDb25maXJtYXRpb25EaWFsb2c/OiBib29sZWFuKSB7XG5cdFx0aWYgKCFvRGF0YUZpZWxkKSByZXR1cm4gdW5kZWZpbmVkO1xuXHRcdGNvbnN0IG1OYXZpZ2F0aW9uUGFyYW1ldGVyczogYW55ID0ge1xuXHRcdFx0bmF2aWdhdGlvbkNvbnRleHRzOiBzQ29udGV4dCA/IHNDb250ZXh0IDogXCIkeyRzb3VyY2U+L30uZ2V0QmluZGluZ0NvbnRleHQoKVwiXG5cdFx0fTtcblx0XHRpZiAob0RhdGFGaWVsZC5SZXF1aXJlc0NvbnRleHQgJiYgIW9EYXRhRmllbGQuSW5saW5lICYmIGJOYXZpZ2F0ZVdpdGhDb25maXJtYXRpb25EaWFsb2cpIHtcblx0XHRcdG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5hcHBsaWNhYmxlQ29udGV4dHMgPVxuXHRcdFx0XHRcIiR7aW50ZXJuYWw+aWJuL1wiICsgb0RhdGFGaWVsZC5TZW1hbnRpY09iamVjdCArIFwiLVwiICsgb0RhdGFGaWVsZC5BY3Rpb24gKyBcIi9hQXBwbGljYWJsZS99XCI7XG5cdFx0XHRtTmF2aWdhdGlvblBhcmFtZXRlcnMubm90QXBwbGljYWJsZUNvbnRleHRzID1cblx0XHRcdFx0XCIke2ludGVybmFsPmlibi9cIiArIG9EYXRhRmllbGQuU2VtYW50aWNPYmplY3QgKyBcIi1cIiArIG9EYXRhRmllbGQuQWN0aW9uICsgXCIvYU5vdEFwcGxpY2FibGUvfVwiO1xuXHRcdFx0bU5hdmlnYXRpb25QYXJhbWV0ZXJzLmxhYmVsID0gdGhpcy5hZGRTaW5nbGVRdW90ZXMob0RhdGFGaWVsZC5MYWJlbCwgdHJ1ZSk7XG5cdFx0fVxuXHRcdGlmIChvRGF0YUZpZWxkLk1hcHBpbmcpIHtcblx0XHRcdG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5zZW1hbnRpY09iamVjdE1hcHBpbmcgPSB0aGlzLmFkZFNpbmdsZVF1b3RlcyhKU09OLnN0cmluZ2lmeShvRGF0YUZpZWxkLk1hcHBpbmcpKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZ2VuZXJhdGVGdW5jdGlvbihcblx0XHRcdGJOYXZpZ2F0ZVdpdGhDb25maXJtYXRpb25EaWFsb2cgPyBcIi5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlV2l0aENvbmZpcm1hdGlvbkRpYWxvZ1wiIDogXCIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZVwiLFxuXHRcdFx0dGhpcy5hZGRTaW5nbGVRdW90ZXMob0RhdGFGaWVsZC5TZW1hbnRpY09iamVjdCksXG5cdFx0XHR0aGlzLmFkZFNpbmdsZVF1b3RlcyhvRGF0YUZpZWxkLkFjdGlvbiksXG5cdFx0XHR0aGlzLm9iamVjdFRvU3RyaW5nKG1OYXZpZ2F0aW9uUGFyYW1ldGVycylcblx0XHQpO1xuXHR9LFxuXHRnZXRFbnRpdHlTZXQ6IGZ1bmN0aW9uIChvQ29udGV4dDogYW55KSB7XG5cdFx0Y29uc3Qgc1BhdGggPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0cmV0dXJuIE1vZGVsSGVscGVyLmdldEVudGl0eVNldFBhdGgoc1BhdGgpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSB2aXNpYmlsaXR5IG9mIGZvcm0gbWVudSBhY3Rpb25zIGJvdGggaW4gcGF0aCBiYXNlZCBhbmQgc3RhdGljIHZhbHVlIHNjZW5hcmlvcy5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUubWFjcm9zLkNvbW1vbkhlbHBlclxuXHQgKiBAcGFyYW0gc1Zpc2libGVWYWx1ZSBFaXRoZXIgc3RhdGljIGJvb2xlYW4gdmFsdWVzIG9yIEFycmF5IG9mIHBhdGggZXhwcmVzc2lvbnMgZm9yIHZpc2liaWxpdHkgb2YgbWVudSBidXR0b24uXG5cdCAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZGV0ZXJtaW5pbmcgdGhlIHZpc2liaWxpdHkgb2YgbWVudSBhY3Rpb25zLlxuXHQgKi9cblx0aGFuZGxlVmlzaWJpbGl0eU9mTWVudUFjdGlvbnM6IGZ1bmN0aW9uIChzVmlzaWJsZVZhbHVlOiBhbnkpIHtcblx0XHRjb25zdCBjb21iaW5lZENvbmRpdGlvbnMgPSBbXTtcblx0XHRpZiAoQXJyYXkuaXNBcnJheShzVmlzaWJsZVZhbHVlKSkge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzVmlzaWJsZVZhbHVlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChzVmlzaWJsZVZhbHVlW2ldLmluZGV4T2YoXCJ7XCIpID4gLTEgJiYgc1Zpc2libGVWYWx1ZVtpXS5pbmRleE9mKFwiez1cIikgPT09IC0xKSB7XG5cdFx0XHRcdFx0c1Zpc2libGVWYWx1ZVtpXSA9IFwiez1cIiArIHNWaXNpYmxlVmFsdWVbaV0gKyBcIn1cIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoc1Zpc2libGVWYWx1ZVtpXS5zcGxpdChcIns9XCIpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRzVmlzaWJsZVZhbHVlW2ldID0gc1Zpc2libGVWYWx1ZVtpXS5zcGxpdChcIns9XCIpWzFdLnNsaWNlKDAsIC0xKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb21iaW5lZENvbmRpdGlvbnMucHVzaChgKCR7c1Zpc2libGVWYWx1ZVtpXX0pYCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBjb21iaW5lZENvbmRpdGlvbnMubGVuZ3RoID4gMCA/IGB7PSAke2NvbWJpbmVkQ29uZGl0aW9ucy5qb2luKFwiIHx8IFwiKX19YCA6IHNWaXNpYmxlVmFsdWU7XG5cdH0sXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZG8gdGhlIGNhbGN1bGF0aW9uIG9mIGNyaXRpY2FsaXR5IGluIGNhc2UgQ3JpdGljYWxpdHlDYWxjdWxhdGlvbiBwcmVzZW50IGluIHRoZSBhbm5vdGF0aW9uXG5cdCAqXG5cdCAqIFRoZSBjYWxjdWxhdGlvbiBpcyBkb25lIGJ5IGNvbXBhcmluZyBhIHZhbHVlIHRvIHRoZSB0aHJlc2hvbGQgdmFsdWVzIHJlbGV2YW50IGZvciB0aGUgc3BlY2lmaWVkIGltcHJvdmVtZW50IGRpcmVjdGlvbi5cblx0ICogRm9yIGltcHJvdmVtZW50IGRpcmVjdGlvbiBUYXJnZXQsIHRoZSBjcml0aWNhbGl0eSBpcyBjYWxjdWxhdGVkIHVzaW5nIGJvdGggbG93IGFuZCBoaWdoIHRocmVzaG9sZCB2YWx1ZXMuIEl0IHdpbGwgYmVcblx0ICpcblx0ICogLSBQb3NpdGl2ZSBpZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIEFjY2VwdGFuY2VSYW5nZUxvd1ZhbHVlIGFuZCBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIEFjY2VwdGFuY2VSYW5nZUhpZ2hWYWx1ZVxuXHQgKiAtIE5ldXRyYWwgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBUb2xlcmFuY2VSYW5nZUxvd1ZhbHVlIGFuZCBsb3dlciB0aGFuIEFjY2VwdGFuY2VSYW5nZUxvd1ZhbHVlIE9SIGdyZWF0ZXIgdGhhbiBBY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWUgYW5kIGxvd2VyIHRoYW4gb3IgZXF1YWwgdG8gVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWVcblx0ICogLSBDcml0aWNhbCBpZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIERldmlhdGlvblJhbmdlTG93VmFsdWUgYW5kIGxvd2VyIHRoYW4gVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSBPUiBncmVhdGVyIHRoYW4gVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWUgYW5kIGxvd2VyIHRoYW4gb3IgZXF1YWwgdG8gRGV2aWF0aW9uUmFuZ2VIaWdoVmFsdWVcblx0ICogLSBOZWdhdGl2ZSBpZiB0aGUgdmFsdWUgaXMgbG93ZXIgdGhhbiBEZXZpYXRpb25SYW5nZUxvd1ZhbHVlIG9yIGdyZWF0ZXIgdGhhbiBEZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZVxuXHQgKlxuXHQgKiBGb3IgaW1wcm92ZW1lbnQgZGlyZWN0aW9uIE1pbmltaXplLCB0aGUgY3JpdGljYWxpdHkgaXMgY2FsY3VsYXRlZCB1c2luZyB0aGUgaGlnaCB0aHJlc2hvbGQgdmFsdWVzLiBJdCBpc1xuXHQgKiAtIFBvc2l0aXZlIGlmIHRoZSB2YWx1ZSBpcyBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIEFjY2VwdGFuY2VSYW5nZUhpZ2hWYWx1ZVxuXHQgKiAtIE5ldXRyYWwgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBBY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWUgYW5kIGxvd2VyIHRoYW4gb3IgZXF1YWwgdG8gVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWVcblx0ICogLSBDcml0aWNhbCBpZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIFRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlIGFuZCBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIERldmlhdGlvblJhbmdlSGlnaFZhbHVlXG5cdCAqIC0gTmVnYXRpdmUgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBEZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZVxuXHQgKlxuXHQgKiBGb3IgaW1wcm92ZW1lbnQgZGlyZWN0aW9uIE1heGltaXplLCB0aGUgY3JpdGljYWxpdHkgaXMgY2FsY3VsYXRlZCB1c2luZyB0aGUgbG93IHRocmVzaG9sZCB2YWx1ZXMuIEl0IGlzXG5cdCAqXG5cdCAqIC0gUG9zaXRpdmUgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBBY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZVxuXHQgKiAtIE5ldXRyYWwgaWYgdGhlIHZhbHVlIGlzIGxlc3MgdGhhbiBBY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZSBhbmQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIFRvbGVyYW5jZVJhbmdlTG93VmFsdWVcblx0ICogLSBDcml0aWNhbCBpZiB0aGUgdmFsdWUgaXMgbG93ZXIgdGhhbiBUb2xlcmFuY2VSYW5nZUxvd1ZhbHVlIGFuZCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gRGV2aWF0aW9uUmFuZ2VMb3dWYWx1ZVxuXHQgKiAtIE5lZ2F0aXZlIGlmIHRoZSB2YWx1ZSBpcyBsb3dlciB0aGFuIERldmlhdGlvblJhbmdlTG93VmFsdWVcblx0ICpcblx0ICogVGhyZXNob2xkcyBhcmUgb3B0aW9uYWwuIEZvciB1bmFzc2lnbmVkIHZhbHVlcywgZGVmYXVsdHMgYXJlIGRldGVybWluZWQgaW4gdGhpcyBvcmRlcjpcblx0ICpcblx0ICogLSBGb3IgRGV2aWF0aW9uUmFuZ2UsIGFuIG9taXR0ZWQgTG93VmFsdWUgdHJhbnNsYXRlcyBpbnRvIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBudW1iZXIgKC1JTkYpLCBhbiBvbWl0dGVkIEhpZ2hWYWx1ZSB0cmFuc2xhdGVzIGludG8gdGhlIGxhcmdlc3QgcG9zc2libGUgbnVtYmVyICgrSU5GKVxuXHQgKiAtIEZvciBUb2xlcmFuY2VSYW5nZSwgYW4gb21pdHRlZCBMb3dWYWx1ZSB3aWxsIGJlIGluaXRpYWxpemVkIHdpdGggRGV2aWF0aW9uUmFuZ2VMb3dWYWx1ZSwgYW4gb21pdHRlZCBIaWdoVmFsdWUgd2lsbCBiZSBpbml0aWFsaXplZCB3aXRoIERldmlhdGlvblJhbmdlSGlnaFZhbHVlXG5cdCAqIC0gRm9yIEFjY2VwdGFuY2VSYW5nZSwgYW4gb21pdHRlZCBMb3dWYWx1ZSB3aWxsIGJlIGluaXRpYWxpemVkIHdpdGggVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSwgYW4gb21pdHRlZCBIaWdoVmFsdWUgd2lsbCBiZSBpbml0aWFsaXplZCB3aXRoIFRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlLlxuXHQgKlxuXHQgKiBAcGFyYW0gc0ltcHJvdmVtZW50RGlyZWN0aW9uIEltcHJvdmVtZW50RGlyZWN0aW9uIHRvIGJlIHVzZWQgZm9yIGNyZWF0aW5nIHRoZSBjcml0aWNhbGl0eSBiaW5kaW5nXG5cdCAqIEBwYXJhbSBzVmFsdWUgVmFsdWUgZnJvbSBEYXRhcG9pbnQgdG8gYmUgbWVhc3VyZWRcblx0ICogQHBhcmFtIHNEZXZpYXRpb25Mb3cgRXhwcmVzc2lvbkJpbmRpbmcgZm9yIExvd2VyIERldmlhdGlvbiBsZXZlbFxuXHQgKiBAcGFyYW0gc1RvbGVyYW5jZUxvdyBFeHByZXNzaW9uQmluZGluZyBmb3IgTG93ZXIgVG9sZXJhbmNlIGxldmVsXG5cdCAqIEBwYXJhbSBzQWNjZXB0YW5jZUxvdyBFeHByZXNzaW9uQmluZGluZyBmb3IgTG93ZXIgQWNjZXB0YW5jZSBsZXZlbFxuXHQgKiBAcGFyYW0gc0FjY2VwdGFuY2VIaWdoIEV4cHJlc3Npb25CaW5kaW5nIGZvciBIaWdoZXIgQWNjZXB0YW5jZSBsZXZlbFxuXHQgKiBAcGFyYW0gc1RvbGVyYW5jZUhpZ2ggRXhwcmVzc2lvbkJpbmRpbmcgZm9yIEhpZ2hlciBUb2xlcmFuY2UgbGV2ZWxcblx0ICogQHBhcmFtIHNEZXZpYXRpb25IaWdoIEV4cHJlc3Npb25CaW5kaW5nIGZvciBIaWdoZXIgRGV2aWF0aW9uIGxldmVsXG5cdCAqIEByZXR1cm5zIFJldHVybnMgY3JpdGljYWxpdHkgY2FsY3VsYXRpb24gYXMgZXhwcmVzc2lvbiBiaW5kaW5nXG5cdCAqL1xuXHRnZXRDcml0aWNhbGl0eUNhbGN1bGF0aW9uQmluZGluZzogZnVuY3Rpb24gKFxuXHRcdHNJbXByb3ZlbWVudERpcmVjdGlvbjogc3RyaW5nLFxuXHRcdHNWYWx1ZTogc3RyaW5nLFxuXHRcdHNEZXZpYXRpb25Mb3c6IHN0cmluZyB8IG51bWJlcixcblx0XHRzVG9sZXJhbmNlTG93OiBzdHJpbmcgfCBudW1iZXIsXG5cdFx0c0FjY2VwdGFuY2VMb3c6IHN0cmluZyB8IG51bWJlcixcblx0XHRzQWNjZXB0YW5jZUhpZ2g6IHN0cmluZyB8IG51bWJlcixcblx0XHRzVG9sZXJhbmNlSGlnaDogc3RyaW5nIHwgbnVtYmVyLFxuXHRcdHNEZXZpYXRpb25IaWdoOiBzdHJpbmcgfCBudW1iZXJcblx0KSB7XG5cdFx0bGV0IHNDcml0aWNhbGl0eUV4cHJlc3Npb246IHR5cGVvZiBWYWx1ZUNvbG9yIHwgc3RyaW5nID0gVmFsdWVDb2xvci5OZXV0cmFsOyAvLyBEZWZhdWx0IENyaXRpY2FsaXR5IFN0YXRlXG5cblx0XHRzVmFsdWUgPSBgJSR7c1ZhbHVlfWA7XG5cblx0XHQvLyBTZXR0aW5nIFVuYXNzaWduZWQgVmFsdWVzXG5cdFx0c0RldmlhdGlvbkxvdyA9IHNEZXZpYXRpb25Mb3cgfHwgLUluZmluaXR5O1xuXHRcdHNUb2xlcmFuY2VMb3cgPSBzVG9sZXJhbmNlTG93IHx8IHNEZXZpYXRpb25Mb3c7XG5cdFx0c0FjY2VwdGFuY2VMb3cgPSBzQWNjZXB0YW5jZUxvdyB8fCBzVG9sZXJhbmNlTG93O1xuXHRcdHNEZXZpYXRpb25IaWdoID0gc0RldmlhdGlvbkhpZ2ggfHwgSW5maW5pdHk7XG5cdFx0c1RvbGVyYW5jZUhpZ2ggPSBzVG9sZXJhbmNlSGlnaCB8fCBzRGV2aWF0aW9uSGlnaDtcblx0XHRzQWNjZXB0YW5jZUhpZ2ggPSBzQWNjZXB0YW5jZUhpZ2ggfHwgc1RvbGVyYW5jZUhpZ2g7XG5cblx0XHQvLyBEZWFsaW5nIHdpdGggRGVjaW1hbCBhbmQgUGF0aCBiYXNlZCBiaW5nZGluZ3Ncblx0XHRzRGV2aWF0aW9uTG93ID0gc0RldmlhdGlvbkxvdyAmJiAoK3NEZXZpYXRpb25Mb3cgPyArc0RldmlhdGlvbkxvdyA6IGAlJHtzRGV2aWF0aW9uTG93fWApO1xuXHRcdHNUb2xlcmFuY2VMb3cgPSBzVG9sZXJhbmNlTG93ICYmICgrc1RvbGVyYW5jZUxvdyA/ICtzVG9sZXJhbmNlTG93IDogYCUke3NUb2xlcmFuY2VMb3d9YCk7XG5cdFx0c0FjY2VwdGFuY2VMb3cgPSBzQWNjZXB0YW5jZUxvdyAmJiAoK3NBY2NlcHRhbmNlTG93ID8gK3NBY2NlcHRhbmNlTG93IDogYCUke3NBY2NlcHRhbmNlTG93fWApO1xuXHRcdHNBY2NlcHRhbmNlSGlnaCA9IHNBY2NlcHRhbmNlSGlnaCAmJiAoK3NBY2NlcHRhbmNlSGlnaCA/ICtzQWNjZXB0YW5jZUhpZ2ggOiBgJSR7c0FjY2VwdGFuY2VIaWdofWApO1xuXHRcdHNUb2xlcmFuY2VIaWdoID0gc1RvbGVyYW5jZUhpZ2ggJiYgKCtzVG9sZXJhbmNlSGlnaCA/ICtzVG9sZXJhbmNlSGlnaCA6IGAlJHtzVG9sZXJhbmNlSGlnaH1gKTtcblx0XHRzRGV2aWF0aW9uSGlnaCA9IHNEZXZpYXRpb25IaWdoICYmICgrc0RldmlhdGlvbkhpZ2ggPyArc0RldmlhdGlvbkhpZ2ggOiBgJSR7c0RldmlhdGlvbkhpZ2h9YCk7XG5cblx0XHQvLyBDcmVhdGluZyBydW50aW1lIGV4cHJlc3Npb24gYmluZGluZyBmcm9tIGNyaXRpY2FsaXR5IGNhbGN1bGF0aW9uIGZvciBDcml0aWNhbGl0eSBTdGF0ZVxuXHRcdGlmIChzSW1wcm92ZW1lbnREaXJlY3Rpb24uaW5jbHVkZXMoXCJNaW5pbWl6ZVwiKSkge1xuXHRcdFx0c0NyaXRpY2FsaXR5RXhwcmVzc2lvbiA9XG5cdFx0XHRcdFwiez0gXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA8PSBcIiArXG5cdFx0XHRcdHNBY2NlcHRhbmNlSGlnaCArXG5cdFx0XHRcdFwiID8gJ1wiICtcblx0XHRcdFx0VmFsdWVDb2xvci5Hb29kICtcblx0XHRcdFx0XCInIDogXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA8PSBcIiArXG5cdFx0XHRcdHNUb2xlcmFuY2VIaWdoICtcblx0XHRcdFx0XCIgPyAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLk5ldXRyYWwgK1xuXHRcdFx0XHRcIicgOiBcIiArXG5cdFx0XHRcdFwiKFwiICtcblx0XHRcdFx0c0RldmlhdGlvbkhpZ2ggK1xuXHRcdFx0XHRcIiAmJiBcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiIDw9IFwiICtcblx0XHRcdFx0c0RldmlhdGlvbkhpZ2ggK1xuXHRcdFx0XHRcIikgPyAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLkNyaXRpY2FsICtcblx0XHRcdFx0XCInIDogJ1wiICtcblx0XHRcdFx0VmFsdWVDb2xvci5FcnJvciArXG5cdFx0XHRcdFwiJyB9XCI7XG5cdFx0fSBlbHNlIGlmIChzSW1wcm92ZW1lbnREaXJlY3Rpb24uaW5jbHVkZXMoXCJNYXhpbWl6ZVwiKSkge1xuXHRcdFx0c0NyaXRpY2FsaXR5RXhwcmVzc2lvbiA9XG5cdFx0XHRcdFwiez0gXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA+PSBcIiArXG5cdFx0XHRcdHNBY2NlcHRhbmNlTG93ICtcblx0XHRcdFx0XCIgPyAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLkdvb2QgK1xuXHRcdFx0XHRcIicgOiBcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiID49IFwiICtcblx0XHRcdFx0c1RvbGVyYW5jZUxvdyArXG5cdFx0XHRcdFwiID8gJ1wiICtcblx0XHRcdFx0VmFsdWVDb2xvci5OZXV0cmFsICtcblx0XHRcdFx0XCInIDogXCIgK1xuXHRcdFx0XHRcIihcIiArXG5cdFx0XHRcdHNEZXZpYXRpb25Mb3cgK1xuXHRcdFx0XHRcIiAmJiBcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiID49IFwiICtcblx0XHRcdFx0c0RldmlhdGlvbkxvdyArXG5cdFx0XHRcdFwiKSA/ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuQ3JpdGljYWwgK1xuXHRcdFx0XHRcIicgOiAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLkVycm9yICtcblx0XHRcdFx0XCInIH1cIjtcblx0XHR9IGVsc2UgaWYgKHNJbXByb3ZlbWVudERpcmVjdGlvbi5pbmNsdWRlcyhcIlRhcmdldFwiKSkge1xuXHRcdFx0c0NyaXRpY2FsaXR5RXhwcmVzc2lvbiA9XG5cdFx0XHRcdFwiez0gKFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPD0gXCIgK1xuXHRcdFx0XHRzQWNjZXB0YW5jZUhpZ2ggK1xuXHRcdFx0XHRcIiAmJiBcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiID49IFwiICtcblx0XHRcdFx0c0FjY2VwdGFuY2VMb3cgK1xuXHRcdFx0XHRcIikgPyAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLkdvb2QgK1xuXHRcdFx0XHRcIicgOiBcIiArXG5cdFx0XHRcdFwiKChcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiID49IFwiICtcblx0XHRcdFx0c1RvbGVyYW5jZUxvdyArXG5cdFx0XHRcdFwiICYmIFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPCBcIiArXG5cdFx0XHRcdHNBY2NlcHRhbmNlTG93ICtcblx0XHRcdFx0XCIpIHx8IChcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiID4gXCIgK1xuXHRcdFx0XHRzQWNjZXB0YW5jZUhpZ2ggK1xuXHRcdFx0XHRcIiAmJiBcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiIDw9IFwiICtcblx0XHRcdFx0c1RvbGVyYW5jZUhpZ2ggK1xuXHRcdFx0XHRcIikpID8gJ1wiICtcblx0XHRcdFx0VmFsdWVDb2xvci5OZXV0cmFsICtcblx0XHRcdFx0XCInIDogXCIgK1xuXHRcdFx0XHRcIigoXCIgK1xuXHRcdFx0XHRzRGV2aWF0aW9uTG93ICtcblx0XHRcdFx0XCIgJiYgKFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPj0gXCIgK1xuXHRcdFx0XHRzRGV2aWF0aW9uTG93ICtcblx0XHRcdFx0XCIpICYmIChcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiIDwgXCIgK1xuXHRcdFx0XHRzVG9sZXJhbmNlTG93ICtcblx0XHRcdFx0XCIpKSB8fCAoKFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPiBcIiArXG5cdFx0XHRcdHNUb2xlcmFuY2VIaWdoICtcblx0XHRcdFx0XCIpICYmIFwiICtcblx0XHRcdFx0c0RldmlhdGlvbkhpZ2ggK1xuXHRcdFx0XHRcIiAmJiAoXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA8PSBcIiArXG5cdFx0XHRcdHNEZXZpYXRpb25IaWdoICtcblx0XHRcdFx0XCIpKSkgPyAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLkNyaXRpY2FsICtcblx0XHRcdFx0XCInIDogJ1wiICtcblx0XHRcdFx0VmFsdWVDb2xvci5FcnJvciArXG5cdFx0XHRcdFwiJyB9XCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdExvZy53YXJuaW5nKFwiQ2FzZSBub3Qgc3VwcG9ydGVkLCByZXR1cm5pbmcgdGhlIGRlZmF1bHQgVmFsdWUgTmV1dHJhbFwiKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gc0NyaXRpY2FsaXR5RXhwcmVzc2lvbjtcblx0fSxcblx0LyoqXG5cdCAqIFRvIGZldGNoIG1lYXN1cmUgYXR0cmlidXRlIGluZGV4LlxuXHQgKlxuXHQgKiBAcGFyYW0gaU1lYXN1cmUgQ2hhcnQgQW5ub3RhdGlvbnNcblx0ICogQHBhcmFtIG9DaGFydEFubm90YXRpb25zIENoYXJ0IEFubm90YXRpb25zXG5cdCAqIEByZXR1cm5zIE1lYXN1cmVBdHRyaWJ1dGUgaW5kZXguXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRnZXRNZWFzdXJlQXR0cmlidXRlSW5kZXg6IGZ1bmN0aW9uIChpTWVhc3VyZTogYW55LCBvQ2hhcnRBbm5vdGF0aW9uczogYW55KSB7XG5cdFx0bGV0IGFNZWFzdXJlcywgc01lYXN1cmVQcm9wZXJ0eVBhdGg7XG5cdFx0aWYgKG9DaGFydEFubm90YXRpb25zPy5NZWFzdXJlcz8ubGVuZ3RoID4gMCkge1xuXHRcdFx0YU1lYXN1cmVzID0gb0NoYXJ0QW5ub3RhdGlvbnMuTWVhc3VyZXM7XG5cdFx0XHRzTWVhc3VyZVByb3BlcnR5UGF0aCA9IGFNZWFzdXJlc1tpTWVhc3VyZV0uJFByb3BlcnR5UGF0aDtcblx0XHR9IGVsc2UgaWYgKG9DaGFydEFubm90YXRpb25zPy5EeW5hbWljTWVhc3VyZXM/Lmxlbmd0aCA+IDApIHtcblx0XHRcdGFNZWFzdXJlcyA9IG9DaGFydEFubm90YXRpb25zLkR5bmFtaWNNZWFzdXJlcztcblx0XHRcdHNNZWFzdXJlUHJvcGVydHlQYXRoID0gYU1lYXN1cmVzW2lNZWFzdXJlXS4kQW5ub3RhdGlvblBhdGg7XG5cdFx0fVxuXHRcdGxldCBiTWVhc3VyZUF0dHJpYnV0ZUV4aXN0cztcblx0XHRjb25zdCBhTWVhc3VyZUF0dHJpYnV0ZXMgPSBvQ2hhcnRBbm5vdGF0aW9ucy5NZWFzdXJlQXR0cmlidXRlcztcblx0XHRsZXQgaU1lYXN1cmVBdHRyaWJ1dGUgPSAtMTtcblx0XHRjb25zdCBmbkNoZWNrTWVhc3VyZSA9IGZ1bmN0aW9uIChzTWVhc3VyZVBhdGg6IGFueSwgb01lYXN1cmVBdHRyaWJ1dGU6IGFueSwgaW5kZXg6IGFueSkge1xuXHRcdFx0aWYgKG9NZWFzdXJlQXR0cmlidXRlKSB7XG5cdFx0XHRcdGlmIChvTWVhc3VyZUF0dHJpYnV0ZS5NZWFzdXJlICYmIG9NZWFzdXJlQXR0cmlidXRlLk1lYXN1cmUuJFByb3BlcnR5UGF0aCA9PT0gc01lYXN1cmVQYXRoKSB7XG5cdFx0XHRcdFx0aU1lYXN1cmVBdHRyaWJ1dGUgPSBpbmRleDtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fSBlbHNlIGlmIChvTWVhc3VyZUF0dHJpYnV0ZS5EeW5hbWljTWVhc3VyZSAmJiBvTWVhc3VyZUF0dHJpYnV0ZS5EeW5hbWljTWVhc3VyZS4kQW5ub3RhdGlvblBhdGggPT09IHNNZWFzdXJlUGF0aCkge1xuXHRcdFx0XHRcdGlNZWFzdXJlQXR0cmlidXRlID0gaW5kZXg7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHRcdGlmIChhTWVhc3VyZUF0dHJpYnV0ZXMpIHtcblx0XHRcdGJNZWFzdXJlQXR0cmlidXRlRXhpc3RzID0gYU1lYXN1cmVBdHRyaWJ1dGVzLnNvbWUoZm5DaGVja01lYXN1cmUuYmluZChudWxsLCBzTWVhc3VyZVByb3BlcnR5UGF0aCkpO1xuXHRcdH1cblx0XHRyZXR1cm4gYk1lYXN1cmVBdHRyaWJ1dGVFeGlzdHMgJiYgaU1lYXN1cmVBdHRyaWJ1dGUgPiAtMSAmJiBpTWVhc3VyZUF0dHJpYnV0ZTtcblx0fSxcblxuXHRnZXRNZWFzdXJlQXR0cmlidXRlOiBmdW5jdGlvbiAob0NvbnRleHQ6IENvbnRleHQpIHtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCxcblx0XHRcdHNDaGFydEFubm90YXRpb25QYXRoID0gb0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdHJldHVybiBvTWV0YU1vZGVsLnJlcXVlc3RPYmplY3Qoc0NoYXJ0QW5ub3RhdGlvblBhdGgpLnRoZW4oZnVuY3Rpb24gKG9DaGFydEFubm90YXRpb25zOiBhbnkpIHtcblx0XHRcdGNvbnN0IGFNZWFzdXJlQXR0cmlidXRlcyA9IG9DaGFydEFubm90YXRpb25zLk1lYXN1cmVBdHRyaWJ1dGVzLFxuXHRcdFx0XHRpTWVhc3VyZUF0dHJpYnV0ZSA9IENvbW1vbkhlbHBlci5nZXRNZWFzdXJlQXR0cmlidXRlSW5kZXgoMCwgb0NoYXJ0QW5ub3RhdGlvbnMpO1xuXHRcdFx0Y29uc3Qgc01lYXN1cmVBdHRyaWJ1dGVQYXRoID1cblx0XHRcdFx0aU1lYXN1cmVBdHRyaWJ1dGUgPiAtMSAmJiBhTWVhc3VyZUF0dHJpYnV0ZXNbaU1lYXN1cmVBdHRyaWJ1dGVdICYmIGFNZWFzdXJlQXR0cmlidXRlc1tpTWVhc3VyZUF0dHJpYnV0ZV0uRGF0YVBvaW50XG5cdFx0XHRcdFx0PyBgJHtzQ2hhcnRBbm5vdGF0aW9uUGF0aH0vTWVhc3VyZUF0dHJpYnV0ZXMvJHtpTWVhc3VyZUF0dHJpYnV0ZX0vYFxuXHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0aWYgKHNNZWFzdXJlQXR0cmlidXRlUGF0aCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdExvZy53YXJuaW5nKFwiRGF0YVBvaW50IG1pc3NpbmcgZm9yIHRoZSBtZWFzdXJlXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHNNZWFzdXJlQXR0cmlidXRlUGF0aCA/IGAke3NNZWFzdXJlQXR0cmlidXRlUGF0aH1EYXRhUG9pbnQvJEFubm90YXRpb25QYXRoL2AgOiBzTWVhc3VyZUF0dHJpYnV0ZVBhdGg7XG5cdFx0fSk7XG5cdH0sXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG1lYXN1cmVBdHRyaWJ1dGUgZm9yIHRoZSBtZWFzdXJlLlxuXHQgKlxuXHQgKiBAcGFyYW0gb0NvbnRleHQgQ29udGV4dCB0byB0aGUgbWVhc3VyZSBhbm5vdGF0aW9uXG5cdCAqIEByZXR1cm5zIFBhdGggdG8gdGhlIG1lYXN1cmVBdHRyaWJ1dGUgb2YgdGhlIG1lYXN1cmVcblx0ICovXG5cdGdldE1lYXN1cmVBdHRyaWJ1dGVGb3JNZWFzdXJlOiBmdW5jdGlvbiAob0NvbnRleHQ6IENvbnRleHQpIHtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCxcblx0XHRcdHNNZWFzdXJlUGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKSxcblx0XHRcdHNDaGFydEFubm90YXRpb25QYXRoID0gc01lYXN1cmVQYXRoLnN1YnN0cmluZygwLCBzTWVhc3VyZVBhdGgubGFzdEluZGV4T2YoXCJNZWFzdXJlXCIpKSxcblx0XHRcdGlNZWFzdXJlID0gc01lYXN1cmVQYXRoLnJlcGxhY2UoLy4qXFwvLywgXCJcIik7XG5cblx0XHRjb25zdCBvQ2hhcnRBbm5vdGF0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNDaGFydEFubm90YXRpb25QYXRoKTtcblx0XHRjb25zdCBhTWVhc3VyZUF0dHJpYnV0ZXMgPSBvQ2hhcnRBbm5vdGF0aW9ucy5NZWFzdXJlQXR0cmlidXRlcyxcblx0XHRcdGlNZWFzdXJlQXR0cmlidXRlID0gQ29tbW9uSGVscGVyLmdldE1lYXN1cmVBdHRyaWJ1dGVJbmRleChpTWVhc3VyZSwgb0NoYXJ0QW5ub3RhdGlvbnMpO1xuXHRcdGNvbnN0IHNNZWFzdXJlQXR0cmlidXRlUGF0aCA9XG5cdFx0XHRpTWVhc3VyZUF0dHJpYnV0ZSA+IC0xICYmIGFNZWFzdXJlQXR0cmlidXRlc1tpTWVhc3VyZUF0dHJpYnV0ZV0gJiYgYU1lYXN1cmVBdHRyaWJ1dGVzW2lNZWFzdXJlQXR0cmlidXRlXS5EYXRhUG9pbnRcblx0XHRcdFx0PyBgJHtzQ2hhcnRBbm5vdGF0aW9uUGF0aH1NZWFzdXJlQXR0cmlidXRlcy8ke2lNZWFzdXJlQXR0cmlidXRlfS9gXG5cdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGlmIChzTWVhc3VyZUF0dHJpYnV0ZVBhdGggPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0TG9nLndhcm5pbmcoXCJEYXRhUG9pbnQgbWlzc2luZyBmb3IgdGhlIG1lYXN1cmVcIik7XG5cdFx0fVxuXHRcdHJldHVybiBzTWVhc3VyZUF0dHJpYnV0ZVBhdGggPyBgJHtzTWVhc3VyZUF0dHJpYnV0ZVBhdGh9RGF0YVBvaW50LyRBbm5vdGF0aW9uUGF0aC9gIDogc01lYXN1cmVBdHRyaWJ1dGVQYXRoO1xuXHR9LFxuXHQvKipcblx0ICogTWV0aG9kIHRvIGRldGVybWluZSBpZiB0aGUgY29udGFpbmVkIG5hdmlnYXRpb24gcHJvcGVydHkgaGFzIGEgZHJhZnQgcm9vdC9ub2RlIHBhcmVudCBlbnRpdHlTZXQuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBpc0RyYWZ0UGFyZW50RW50aXR5Rm9yQ29udGFpbm1lbnRcblx0ICogQHBhcmFtIG9UYXJnZXRDb2xsZWN0aW9uQ29udGFpbnNUYXJnZXQgVGFyZ2V0IGNvbGxlY3Rpb24gaGFzIENvbnRhaW5zVGFyZ2V0IHByb3BlcnR5XG5cdCAqIEBwYXJhbSBvVGFibGVNZXRhZGF0YSBUYWJsZSBtZXRhZGF0YSBmb3Igd2hpY2ggZHJhZnQgc3VwcG9ydCBzaGFsbCBiZSBjaGVja2VkXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSBpZiBkcmFmdFxuXHQgKi9cblx0aXNEcmFmdFBhcmVudEVudGl0eUZvckNvbnRhaW5tZW50OiBmdW5jdGlvbiAob1RhcmdldENvbGxlY3Rpb25Db250YWluc1RhcmdldDogb2JqZWN0LCBvVGFibGVNZXRhZGF0YTogYW55KSB7XG5cdFx0aWYgKG9UYXJnZXRDb2xsZWN0aW9uQ29udGFpbnNUYXJnZXQpIHtcblx0XHRcdGlmIChvVGFibGVNZXRhZGF0YSAmJiBvVGFibGVNZXRhZGF0YS5wYXJlbnRFbnRpdHlTZXQgJiYgb1RhYmxlTWV0YWRhdGEucGFyZW50RW50aXR5U2V0LnNQYXRoKSB7XG5cdFx0XHRcdGNvbnN0IHNQYXJlbnRFbnRpdHlTZXRQYXRoID0gb1RhYmxlTWV0YWRhdGEucGFyZW50RW50aXR5U2V0LnNQYXRoO1xuXHRcdFx0XHRjb25zdCBvRHJhZnRSb290ID0gb1RhYmxlTWV0YWRhdGEucGFyZW50RW50aXR5U2V0Lm9Nb2RlbC5nZXRPYmplY3QoXG5cdFx0XHRcdFx0YCR7c1BhcmVudEVudGl0eVNldFBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3RgXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IG9EcmFmdE5vZGUgPSBvVGFibGVNZXRhZGF0YS5wYXJlbnRFbnRpdHlTZXQub01vZGVsLmdldE9iamVjdChcblx0XHRcdFx0XHRgJHtzUGFyZW50RW50aXR5U2V0UGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Tm9kZWBcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKG9EcmFmdFJvb3QgfHwgb0RyYWZ0Tm9kZSkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEVuc3VyZXMgdGhlIGRhdGEgaXMgcHJvY2Vzc2VkIGFzIGRlZmluZWQgaW4gdGhlIHRlbXBsYXRlLlxuXHQgKiBTaW5jZSB0aGUgcHJvcGVydHkgRGF0YSBpcyBvZiB0aGUgdHlwZSAnb2JqZWN0JywgaXQgbWF5IG5vdCBiZSBpbiB0aGUgc2FtZSBvcmRlciBhcyByZXF1aXJlZCBieSB0aGUgdGVtcGxhdGUuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLm1hY3Jvcy5Db21tb25IZWxwZXJcblx0ICogQHBhcmFtIGRhdGFFbGVtZW50IFRoZSBkYXRhIHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIHByb2Nlc3NlZC5cblx0ICogQHJldHVybnMgVGhlIGNvcnJlY3QgcGF0aCBhY2NvcmRpbmcgdG8gdGhlIHRlbXBsYXRlLlxuXHQgKi9cblx0Z2V0RGF0YUZyb21UZW1wbGF0ZTogZnVuY3Rpb24gKGRhdGFFbGVtZW50OiBDb250ZXh0KSB7XG5cdFx0Y29uc3Qgc3BsaXRQYXRoID0gZGF0YUVsZW1lbnQuZ2V0UGF0aCgpLnNwbGl0KFwiL1wiKTtcblx0XHRjb25zdCBkYXRhS2V5ID0gc3BsaXRQYXRoW3NwbGl0UGF0aC5sZW5ndGggLSAxXTtcblx0XHRjb25zdCBjb25uZWN0ZWREYXRhUGF0aCA9IGAvJHtzcGxpdFBhdGguc2xpY2UoMSwgLTIpLmpvaW4oXCIvXCIpfS9AYDtcblx0XHRjb25zdCBjb25uZWN0ZWRPYmplY3QgPSBkYXRhRWxlbWVudC5nZXRPYmplY3QoY29ubmVjdGVkRGF0YVBhdGgpO1xuXHRcdGNvbnN0IHRlbXBsYXRlID0gY29ubmVjdGVkT2JqZWN0LlRlbXBsYXRlO1xuXHRcdGNvbnN0IHNwbGl0VGVtcCA9IHRlbXBsYXRlLnNwbGl0KFwifVwiKTtcblx0XHRjb25zdCB0ZW1wQXJyYXkgPSBbXTtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHNwbGl0VGVtcC5sZW5ndGggLSAxOyBpKyspIHtcblx0XHRcdGNvbnN0IGtleSA9IHNwbGl0VGVtcFtpXS5zcGxpdChcIntcIilbMV0udHJpbSgpO1xuXHRcdFx0dGVtcEFycmF5LnB1c2goa2V5KTtcblx0XHR9XG5cdFx0T2JqZWN0LmtleXMoY29ubmVjdGVkT2JqZWN0LkRhdGEpLmZvckVhY2goZnVuY3Rpb24gKHNLZXk6IHN0cmluZykge1xuXHRcdFx0aWYgKHNLZXkuc3RhcnRzV2l0aChcIiRcIikpIHtcblx0XHRcdFx0ZGVsZXRlIGNvbm5lY3RlZE9iamVjdC5EYXRhW3NLZXldO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGNvbnN0IGluZGV4ID0gT2JqZWN0LmtleXMoY29ubmVjdGVkT2JqZWN0LkRhdGEpLmluZGV4T2YoZGF0YUtleSk7XG5cdFx0cmV0dXJuIGAvJHtzcGxpdFBhdGguc2xpY2UoMSwgLTIpLmpvaW4oXCIvXCIpfS9EYXRhLyR7dGVtcEFycmF5W2luZGV4XX1gO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdGhlIGVuZCBvZiB0aGUgdGVtcGxhdGUgaGFzIGJlZW4gcmVhY2hlZC5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUubWFjcm9zLkNvbW1vbkhlbHBlclxuXHQgKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgb2YgdGhlIGNvbm5lY3RlZCBmaWVsZHMuXG5cdCAqIEBwYXJhbSBlbGVtZW50IFRoZSBlbGVtZW50IHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIHByb2Nlc3NlZC5cblx0ICogQHJldHVybnMgVHJ1ZSBvciBGYWxzZSAoZGVwZW5kaW5nIG9uIHRoZSB0ZW1wbGF0ZSBpbmRleCkuXG5cdCAqL1xuXHRub3RMYXN0SW5kZXg6IGZ1bmN0aW9uICh0YXJnZXQ6IGFueSwgZWxlbWVudDogb2JqZWN0KSB7XG5cdFx0Y29uc3QgdGVtcGxhdGUgPSB0YXJnZXQuVGVtcGxhdGU7XG5cdFx0Y29uc3Qgc3BsaXRUZW1wID0gdGVtcGxhdGUuc3BsaXQoXCJ9XCIpO1xuXHRcdGNvbnN0IHRlbXBBcnJheTogYW55W10gPSBbXTtcblx0XHRsZXQgaXNMYXN0SW5kZXggPSBmYWxzZTtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHNwbGl0VGVtcC5sZW5ndGggLSAxOyBpKyspIHtcblx0XHRcdGNvbnN0IGRhdGFLZXkgPSBzcGxpdFRlbXBbaV0uc3BsaXQoXCJ7XCIpWzFdLnRyaW0oKTtcblx0XHRcdHRlbXBBcnJheS5wdXNoKGRhdGFLZXkpO1xuXHRcdH1cblxuXHRcdHRlbXBBcnJheS5mb3JFYWNoKGZ1bmN0aW9uICh0ZW1wbGF0ZUluZm86IGFueSkge1xuXHRcdFx0Y29uc3QgbGFzdEluZGV4ID0gdGVtcEFycmF5Lmxlbmd0aCAtIDE7XG5cdFx0XHRpZiAodGFyZ2V0LkRhdGFbdGVtcGxhdGVJbmZvXSA9PT0gZWxlbWVudCAmJiB0ZW1wQXJyYXkuaW5kZXhPZih0ZW1wbGF0ZUluZm8pIDwgbGFzdEluZGV4KSB7XG5cdFx0XHRcdGlzTGFzdEluZGV4ID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gaXNMYXN0SW5kZXg7XG5cdH0sXG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgdGhlIGRlbGltaXRlciBmcm9tIHRoZSB0ZW1wbGF0ZS5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUubWFjcm9zLkNvbW1vbkhlbHBlclxuXHQgKiBAcGFyYW0gdGVtcGxhdGUgVGhlIHRlbXBsYXRlIHN0cmluZy5cblx0ICogQHJldHVybnMgVGhlIGRlbGltaXRlciBpbiB0aGUgdGVtcGxhdGUgc3RyaW5nLlxuXHQgKi9cblx0Z2V0RGVsaW1pdGVyOiBmdW5jdGlvbiAodGVtcGxhdGU6IHN0cmluZykge1xuXHRcdHJldHVybiB0ZW1wbGF0ZS5zcGxpdChcIn1cIilbMV0uc3BsaXQoXCJ7XCIpWzBdLnRyaW0oKTtcblx0fSxcblxuXHRvTWV0YU1vZGVsOiB1bmRlZmluZWQgYXMgYW55LFxuXHRzZXRNZXRhTW9kZWw6IGZ1bmN0aW9uIChvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCkge1xuXHRcdHRoaXMub01ldGFNb2RlbCA9IG9NZXRhTW9kZWw7XG5cdH0sXG5cblx0Z2V0TWV0YU1vZGVsOiBmdW5jdGlvbiAob0NvbnRleHQ/OiBhbnksIG9JbnRlcmZhY2U/OiBhbnkpIHtcblx0XHRpZiAob0NvbnRleHQpIHtcblx0XHRcdHJldHVybiBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0TW9kZWwoKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMub01ldGFNb2RlbDtcblx0fSxcblxuXHRnZXRQYXJhbWV0ZXJzOiBmdW5jdGlvbiAob0NvbnRleHQ6IGFueSwgb0ludGVyZmFjZTogYW55KSB7XG5cdFx0aWYgKG9Db250ZXh0KSB7XG5cdFx0XHRjb25zdCBvTWV0YU1vZGVsID0gb0ludGVyZmFjZS5jb250ZXh0LmdldE1vZGVsKCk7XG5cdFx0XHRjb25zdCBzUGF0aCA9IG9JbnRlcmZhY2UuY29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRjb25zdCBvUGFyYW1ldGVySW5mbyA9IENvbW1vblV0aWxzLmdldFBhcmFtZXRlckluZm8ob01ldGFNb2RlbCwgc1BhdGgpO1xuXHRcdFx0aWYgKG9QYXJhbWV0ZXJJbmZvLnBhcmFtZXRlclByb3BlcnRpZXMpIHtcblx0XHRcdFx0cmV0dXJuIE9iamVjdC5rZXlzKG9QYXJhbWV0ZXJJbmZvLnBhcmFtZXRlclByb3BlcnRpZXMpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gW107XG5cdH0sXG5cblx0LyoqXG5cdCAqIEJ1aWxkIGFuIGV4cHJlc3Npb24gY2FsbGluZyBhbiBhY3Rpb24gaGFuZGxlciB2aWEgdGhlIEZQTSBoZWxwZXIncyBhY3Rpb25XcmFwcGVyIGZ1bmN0aW9uXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSAnRlBNLmFjdGlvbldyYXBwZXIoKScgZnVuY3Rpb24gaXMgYXZhaWxhYmxlIGF0IHJ1bnRpbWUuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQWN0aW9uIEFjdGlvbiBtZXRhZGF0YVxuXHQgKiBAcGFyYW0gb0FjdGlvbi5oYW5kbGVyTW9kdWxlIE1vZHVsZSBjb250YWluaW5nIHRoZSBhY3Rpb24gaGFuZGxlciBtZXRob2Rcblx0ICogQHBhcmFtIG9BY3Rpb24uaGFuZGxlck1ldGhvZCBBY3Rpb24gaGFuZGxlciBtZXRob2QgbmFtZVxuXHQgKiBAcGFyYW0gW29UaGlzXSBgdGhpc2AgKGlmIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBhIG1hY3JvKVxuXHQgKiBAcGFyYW0gb1RoaXMuaWQgVGhlIHRhYmxlJ3MgSURcblx0ICogQHJldHVybnMgVGhlIGFjdGlvbiB3cmFwcGVyIGJpbmRpbmdcdGV4cHJlc3Npb25cblx0ICovXG5cdGJ1aWxkQWN0aW9uV3JhcHBlcjogZnVuY3Rpb24gKG9BY3Rpb246IEN1c3RvbUFjdGlvbiwgb1RoaXM6IHsgaWQ/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZCkge1xuXHRcdGNvbnN0IGFQYXJhbXM6IGFueVtdID0gW3JlZihcIiRldmVudFwiKSwgb0FjdGlvbi5oYW5kbGVyTW9kdWxlLCBvQWN0aW9uLmhhbmRsZXJNZXRob2RdO1xuXG5cdFx0aWYgKG9UaGlzICYmIG9UaGlzLmlkKSB7XG5cdFx0XHRjb25zdCBvQWRkaXRpb25hbFBhcmFtcyA9IHtcblx0XHRcdFx0Y29udGV4dHM6IHJlZihcIiR7aW50ZXJuYWw+c2VsZWN0ZWRDb250ZXh0c31cIilcblx0XHRcdH07XG5cdFx0XHRhUGFyYW1zLnB1c2gob0FkZGl0aW9uYWxQYXJhbXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oZm4oXCJGUE0uYWN0aW9uV3JhcHBlclwiLCBhUGFyYW1zKSk7XG5cdH0sXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSB2YWx1ZSB3aGV0aGVyIG9yIG5vdCB0aGUgZWxlbWVudCBzaG91bGQgYmUgdmlzaWJsZSBkZXBlbmRpbmcgb24gdGhlIEhpZGRlbiBhbm5vdGF0aW9uLlxuXHQgKiBJdCBpcyBpbnZlcnRlZCBhcyB0aGUgVUkgZWxlbWVudHMgaGF2ZSBhIHZpc2libGUgcHJvcGVydHkgaW5zdGVhZCBvZiBhIGhpZGRlbiBvbmUuXG5cdCAqXG5cdCAqIEBwYXJhbSBkYXRhRmllbGRBbm5vdGF0aW9ucyBUaGUgZGF0YUZpZWxkIG9iamVjdFxuXHQgKiBAcmV0dXJucyBBIHBhdGggb3IgYSBCb29sZWFuXG5cdCAqL1xuXHRnZXRIaWRkZW5QYXRoRXhwcmVzc2lvbjogZnVuY3Rpb24gKGRhdGFGaWVsZEFubm90YXRpb25zOiBhbnkpIHtcblx0XHRpZiAoZGF0YUZpZWxkQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuXCJdICE9PSBudWxsKSB7XG5cdFx0XHRjb25zdCBoaWRkZW4gPSBkYXRhRmllbGRBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5cIl07XG5cdFx0XHRyZXR1cm4gdHlwZW9mIGhpZGRlbiA9PT0gXCJvYmplY3RcIiA/IFwiez0gISR7XCIgKyBoaWRkZW4uJFBhdGggKyBcIn0gfVwiIDogIWhpZGRlbjtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cdHZhbGlkYXRlUHJlc2VudGF0aW9uTWV0YVBhdGg6IGZ1bmN0aW9uIChtZXRhUGF0aDogc3RyaW5nLCBvYmplY3RUZXJtOiBzdHJpbmcpIHtcblx0XHQvLyBwZXJmb3JtIHZhbGlkYXRpb24gb25seSBpZiBhbm5vdGF0aW9uIHNldCAodG8gYXZvaWQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgaXNzdWVzIGZvciB0ZXN0IHdpdGhvdXQgYW5ub3RhdGlvbnMpXG5cdFx0aWYgKG1ldGFQYXRoLmluY2x1ZGVzKG9iamVjdFRlcm0uc2xpY2UoMCwgb2JqZWN0VGVybS5sYXN0SW5kZXhPZihcIi5cIikpKSkge1xuXHRcdFx0Y29uc3QgYWxsb3dlZFRlcm1zID0gW1VJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQsIFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQsIG9iamVjdFRlcm1dO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQhYWxsb3dlZFRlcm1zLnNvbWUoKHRlcm0pID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gbWV0YVBhdGguc2VhcmNoKG5ldyBSZWdFeHAoYCR7dGVybX0oI3wvfCQpYCkpID4gLTE7XG5cdFx0XHRcdH0pXG5cdFx0XHQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBBbm5vdGF0aW9uIFBhdGggJHttZXRhUGF0aH0gbWVudGlvbmVkIGluIHRoZSBtYW5pZmVzdCBpcyBub3QgdmFsaWQgZm9yICR7b2JqZWN0VGVybX1gKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG4oQ29tbW9uSGVscGVyLmdldFNvcnRDb25kaXRpb25zIGFzIGFueSkucmVxdWlyZXNJQ29udGV4dCA9IHRydWU7XG5cbmV4cG9ydCBkZWZhdWx0IENvbW1vbkhlbHBlcjtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7RUFnQkEsTUFBTUEsVUFBVSxHQUFHQyxRQUFRLENBQUNELFVBQVU7RUFDdEMsTUFBTUUsWUFBWSxHQUFHO0lBQ3BCQyxZQUFZLEVBQUUsVUFBVUMsSUFBUyxFQUFFO01BQ2xDLE9BQU9BLElBQUksQ0FBQ0MsU0FBUyxFQUFFO0lBQ3hCLENBQUM7SUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDQyxTQUFTLEVBQUUsVUFBVUMsTUFBYyxFQUFFQyxVQUFlLEVBQUU7TUFDckQsTUFBTUMsTUFBTSxHQUFHRCxVQUFVLENBQUNFLE9BQU8sQ0FBQ0MsUUFBUSxFQUFFO1FBQzNDQyxhQUFhLEdBQUdKLFVBQVUsQ0FBQ0UsT0FBTyxDQUFDRyxPQUFPLEVBQUU7UUFDNUNDLFlBQVksR0FBR0wsTUFBTSxDQUFDSixTQUFTLENBQUUsR0FBRU8sYUFBYyxHQUFFLENBQUM7UUFDcERHLE1BQU0sR0FBR0QsWUFBWSxDQUFDLG9DQUFvQyxDQUFDO01BRTVELE9BQU8sT0FBT0MsTUFBTSxLQUFLLFFBQVEsR0FBRyxRQUFRLEdBQUdBLE1BQU0sQ0FBQ0MsS0FBSyxHQUFHLEtBQUssR0FBRyxDQUFDRCxNQUFNO0lBQzlFLENBQUM7SUFDRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDRSxvQkFBb0IsRUFBRSxVQUFVVixNQUFjLEVBQUVDLFVBQWUsRUFBRTtNQUNoRSxNQUFNQyxNQUFNLEdBQUdELFVBQVUsQ0FBQ0UsT0FBTyxDQUFDQyxRQUFRLEVBQUU7UUFDM0NDLGFBQWEsR0FBR0osVUFBVSxDQUFDRSxPQUFPLENBQUNHLE9BQU8sRUFBRTtRQUM1Q0MsWUFBWSxHQUFHTCxNQUFNLENBQUNKLFNBQVMsQ0FBRSxHQUFFTyxhQUFjLEdBQUUsQ0FB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
|
|
@@ -11,6 +11,8 @@ import FieldEditMode from "sap/ui/mdc/enums/FieldEditMode";
|
|
|
11
11
|
import Context from "sap/ui/model/Context";
|
|
12
12
|
import ODataModelAnnotationHelper from "sap/ui/model/odata/v4/AnnotationHelper";
|
|
13
13
|
import type ODataMetaModel from "sap/ui/model/odata/v4/ODataMetaModel";
|
|
14
|
+
import type { CompiledBindingToolkitExpression } from "sap/fe/core/helpers/BindingToolkit";
|
|
15
|
+
|
|
14
16
|
|
|
15
17
|
const ValueColor = mLibrary.ValueColor;
|
|
16
18
|
const CommonHelper = {
|
|
@@ -121,7 +123,7 @@ const CommonHelper = {
|
|
|
121
123
|
return `${entitySet}/$NavigationPropertyBinding/${navigationCollection}`; // used in gotoTargetEntitySet method in the same file
|
|
122
124
|
},
|
|
123
125
|
|
|
124
|
-
isPropertyFilterable: function (context: Context, oDataField?:
|
|
126
|
+
isPropertyFilterable: function (context: Context, oDataField?: { $Type: string }, skipHiddenFilters?: boolean): boolean | CompiledBindingToolkitExpression {
|
|
125
127
|
const oModel = context.getModel() as ODataMetaModel,
|
|
126
128
|
sPropertyPath = context.getPath(),
|
|
127
129
|
// LoacationPath would be the prefix of sPropertyPath, example: sPropertyPath = '/Customer/Set/Name' -> sPropertyLocationPath = '/Customer/Set'
|
|
@@ -136,7 +138,7 @@ const CommonHelper = {
|
|
|
136
138
|
return false;
|
|
137
139
|
}
|
|
138
140
|
|
|
139
|
-
return isPropertyFilterable(oModel, sPropertyLocationPath, sProperty);
|
|
141
|
+
return isPropertyFilterable(oModel, sPropertyLocationPath, sProperty, skipHiddenFilters);
|
|
140
142
|
},
|
|
141
143
|
|
|
142
144
|
getLocationForPropertyPath: function (oModel: any, sPropertyPath: any) {
|