@sapui5/sap.fe.base 1.132.0 → 1.133.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,7 +2,7 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2024 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/m/Text", "sap/ui/base/DataType", "sap/ui/base/ManagedObject", "sap/ui/core/mvc/EventHandlerResolver"], function (Log, BindingToolkit, Text, DataType, ManagedObject, EventHandlerResolver) {
5
+ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/m/Text", "sap/ui/base/BindingParser", "sap/ui/base/DataType", "sap/ui/base/ManagedObject", "sap/ui/core/mvc/EventHandlerResolver"], function (Log, BindingToolkit, Text, BindingParser, DataType, ManagedObject, EventHandlerResolver) {
6
6
  "use strict";
7
7
 
8
8
  var bindingParser = ManagedObject.bindingParser;
@@ -52,9 +52,17 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/m/Text", "sap/
52
52
  if (aggregationChildren[aggregationName] !== undefined) {
53
53
  if (mSettings.hasOwnProperty(aggregationName)) {
54
54
  if (typeof mSettings[aggregationName] === "string") {
55
- mSettings[aggregationName] = {
56
- path: mSettings[aggregationName]
57
- };
55
+ const resultingParse = BindingParser.complexParser(mSettings[aggregationName]);
56
+ if (resultingParse) {
57
+ mSettings[aggregationName] = {
58
+ path: resultingParse.path,
59
+ model: resultingParse.model
60
+ };
61
+ } else {
62
+ mSettings[aggregationName] = {
63
+ path: mSettings[aggregationName]
64
+ };
65
+ }
58
66
  }
59
67
  if (typeof aggregationChildren[aggregationName] === "function") {
60
68
  mSettings[aggregationName].factory = aggregationChildren[aggregationName];
@@ -68,6 +76,78 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/m/Text", "sap/
68
76
  });
69
77
  }
70
78
 
79
+ /**
80
+ * Processes a binding toolkit expression property for function processProperties
81
+ *
82
+ * If the property is a constant, it compiles it as a constant. If the property is an aggregation,
83
+ * it compiles the expression as an object. Otherwise, it compiles the expression normally.
84
+ * @param settings The settings of the control
85
+ * @param settingsKey The key of the setting being processed
86
+ * @param bindingToolkitExpression The binding toolkit expression to process
87
+ * @param allProperties All properties of the control
88
+ */
89
+ function processBindingToolkitExpression(settings, settingsKey, bindingToolkitExpression, allProperties) {
90
+ if (isConstant(bindingToolkitExpression)) {
91
+ settings[settingsKey] = compileConstant(bindingToolkitExpression, false, true, true);
92
+ } else if (!Object.hasOwnProperty.call(allProperties, settingsKey)) {
93
+ // Aggregation case - we need to compile the expression but as an object
94
+ if (isPathInModelExpression(bindingToolkitExpression)) {
95
+ settings[settingsKey] = {
96
+ path: bindingToolkitExpression.path,
97
+ model: bindingToolkitExpression.modelName
98
+ };
99
+ }
100
+ } else {
101
+ settings[settingsKey] = compileExpression(bindingToolkitExpression);
102
+ }
103
+ }
104
+
105
+ /**
106
+ * Processes a string property for function processProperties
107
+ *
108
+ * If the property is not a binding expression and does not match the expected format,
109
+ * it parses the value to provide the expected format. If the property is an event handler,
110
+ * it logs an error.
111
+ * @param settings The settings of the control
112
+ * @param settingsKey The key of the setting being processed
113
+ * @param value The string value to process
114
+ * @param allEvents All events of the control
115
+ * @param allProperties All properties of the control
116
+ * @param metadata Metadata of the control
117
+ */
118
+ function processStringProperty(settings, settingsKey, value, allEvents, allProperties, metadata) {
119
+ if (!value.startsWith("{")) {
120
+ if (Object.hasOwnProperty.call(allEvents, settingsKey)) {
121
+ Log.error(`Event handlers cannot be set as string in JSX, ${settingsKey} in ${metadata.getName()}`);
122
+ }
123
+ const propertyType = allProperties[settingsKey]?.getType?.();
124
+ if (propertyType && propertyType instanceof DataType && ["boolean", "int", "float"].includes(propertyType.getName())) {
125
+ settings[settingsKey] = propertyType.parseValue(value);
126
+ }
127
+ } else {
128
+ settings[settingsKey] = value;
129
+ }
130
+ }
131
+
132
+ /**
133
+ * Processes an object property for function processProperties.
134
+ *
135
+ * If the property is a promise, it adds it to the late properties map. If the property is a binding info holder,
136
+ * it sets the binding info to the settings.
137
+ * @param settings The settings of the control
138
+ * @param settingsKey The key of the setting being processed
139
+ * @param value The object value to process
140
+ * @param lateProperties A map of the control's late properties
141
+ */
142
+ function processObjectProperty(settings, settingsKey, value, lateProperties) {
143
+ if (value.then) {
144
+ lateProperties[settingsKey] = value;
145
+ delete settings[settingsKey];
146
+ } else if (value.__bindingInfo) {
147
+ settings[settingsKey] = value.__bindingInfo;
148
+ }
149
+ }
150
+
71
151
  /**
72
152
  * Processes the properties.
73
153
  *
@@ -86,34 +166,13 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/m/Text", "sap/
86
166
  for (settingsKey in settings) {
87
167
  const value = settings[settingsKey];
88
168
  if (isBindingToolkitExpression(value)) {
89
- const bindingToolkitExpression = value;
90
- if (isConstant(bindingToolkitExpression)) {
91
- settings[settingsKey] = compileConstant(bindingToolkitExpression, false, true, true);
92
- } else if (!Object.hasOwnProperty.call(allProperties, settingsKey)) {
93
- // Aggregation case - we need to compile the expression but as an object
94
- if (isPathInModelExpression(bindingToolkitExpression)) {
95
- settings[settingsKey] = {
96
- path: bindingToolkitExpression.path,
97
- model: bindingToolkitExpression.modelName
98
- };
99
- }
100
- } else {
101
- settings[settingsKey] = compileExpression(bindingToolkitExpression);
102
- }
103
- } else if (value !== null && typeof value === "object" && value.then) {
104
- lateProperties[settingsKey] = value;
105
- delete settings[settingsKey];
106
- } else if (typeof value === "string" && !value.startsWith("{")) {
107
- const propertyType = allProperties[settingsKey]?.getType?.();
108
- if (propertyType && propertyType instanceof DataType && ["boolean", "int", "float"].includes(propertyType.getName())) {
109
- settings[settingsKey] = propertyType.parseValue(value);
110
- }
111
- } else if (typeof value === "object" && value.__bindingInfo) {
112
- settings[settingsKey] = value.__bindingInfo;
169
+ processBindingToolkitExpression(settings, settingsKey, value, allProperties);
170
+ } else if (value !== null && typeof value === "object") {
171
+ processObjectProperty(settings, settingsKey, value, lateProperties);
172
+ } else if (typeof value === "string") {
173
+ processStringProperty(settings, settingsKey, value, allEvents, allProperties, metadata);
113
174
  } else if (value === undefined) {
114
- if (Object.hasOwnProperty.call(allEvents, settingsKey)) {
115
- delete settings[settingsKey];
116
- }
175
+ delete settings[settingsKey];
117
176
  }
118
177
  }
119
178
  return lateProperties;
@@ -189,10 +248,12 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/m/Text", "sap/
189
248
  if (bindingInfo) {
190
249
  targetControlInstance.bindElement({
191
250
  model: bindingInfo.model ?? undefined,
192
- path: bindingInfo.path
251
+ path: bindingInfo.path,
252
+ parameters: bindingInfo.parameters ?? undefined
193
253
  });
254
+ } else {
255
+ targetControlInstance.bindElement(bindingDef);
194
256
  }
195
- targetControlInstance.bindElement(bindingDef);
196
257
  } else {
197
258
  // We consider it's an object
198
259
  Object.keys(bindingDef).forEach(bindingDefKey => {
@@ -223,4 +284,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/m/Text", "sap/
223
284
  };
224
285
  return jsxControl;
225
286
  }, false);
226
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGTF9ERUxFR0FURSIsIkNPUkVfUkVRVUlSRSIsIkRUX0RFU0lHTlRJTUUiLCJhZGRDaGlsZEFnZ3JlZ2F0aW9uIiwiYWdncmVnYXRpb25DaGlsZHJlbiIsImFnZ3JlZ2F0aW9uTmFtZSIsImNoaWxkIiwidW5kZWZpbmVkIiwiaXNDaGlsZEFuRWxlbWVudCIsInB1c2giLCJBcnJheSIsImlzQXJyYXkiLCJmb3JFYWNoIiwic3ViQ2hpbGQiLCJPYmplY3QiLCJrZXlzIiwiY2hpbGRLZXkiLCJjaGlsZHJlbiIsImlzQSIsImlzQUNvbnRyb2wiLCJnZXRNZXRhZGF0YSIsInByb2Nlc3NBZ2dyZWdhdGlvbnMiLCJtZXRhZGF0YSIsIm1TZXR0aW5ncyIsIm1ldGFkYXRhQWdncmVnYXRpb25zIiwiZ2V0QWxsQWdncmVnYXRpb25zIiwiZGVmYXVsdEFnZ3JlZ2F0aW9uTmFtZSIsImdldERlZmF1bHRBZ2dyZWdhdGlvbk5hbWUiLCJoYXNPd25Qcm9wZXJ0eSIsInBhdGgiLCJmYWN0b3J5IiwidGVtcGxhdGUiLCJwcm9jZXNzUHJvcGVydGllcyIsInNldHRpbmdzIiwic2V0dGluZ3NLZXkiLCJsYXRlUHJvcGVydGllcyIsImFsbEV2ZW50cyIsImdldEFsbEV2ZW50cyIsImFsbFByb3BlcnRpZXMiLCJnZXRBbGxQcm9wZXJ0aWVzIiwidmFsdWUiLCJpc0JpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiIsImJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiIsImlzQ29uc3RhbnQiLCJjb21waWxlQ29uc3RhbnQiLCJjYWxsIiwiaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24iLCJtb2RlbCIsIm1vZGVsTmFtZSIsImNvbXBpbGVFeHByZXNzaW9uIiwidGhlbiIsInN0YXJ0c1dpdGgiLCJwcm9wZXJ0eVR5cGUiLCJnZXRUeXBlIiwiRGF0YVR5cGUiLCJpbmNsdWRlcyIsImdldE5hbWUiLCJwYXJzZVZhbHVlIiwiX19iaW5kaW5nSW5mbyIsInByb2Nlc3NDb21tYW5kIiwiY29tbWFuZFByb3BlcnR5IiwiY29tbWFuZCIsImV2ZW50TmFtZSIsInNwbGl0IiwiZXZlbnQiLCJuYW1lIiwiRXZlbnRIYW5kbGVyUmVzb2x2ZXIiLCJyZXNvbHZlRXZlbnRIYW5kbGVyIiwianN4Q29udHJvbCIsIkNvbnRyb2xUeXBlIiwia2V5IiwianN4Q29udGV4dCIsInRhcmdldENvbnRyb2wiLCJpc0ZyYWdtZW50IiwiaXNSdW50aW1lIiwicnVudGltZUJ1aWxkaW5nQmxvY2siLCJnZXRDb250ZW50IiwidmlldyIsImFwcENvbXBvbmVudCIsImNsYXNzRGVmIiwiY2xhc3MiLCJyZWZEZWYiLCJyZWYiLCJiaW5kaW5nRGVmIiwiYmluZGluZyIsImZsRGVsZWdhdGUiLCJkdERlc2lnbnRpbWUiLCJ0YXJnZXRDb250cm9sSW5zdGFuY2UiLCJhZGRTdHlsZUNsYXNzIiwic2V0Q3VycmVudCIsImN1c3RvbVNldHRpbmdzIiwiZGF0YSIsImRlbGVnYXRlIiwiZGVzaWdudGltZSIsImxlbmd0aCIsImJpbmRpbmdJbmZvIiwiYmluZGluZ1BhcnNlciIsImJpbmRFbGVtZW50IiwiYmluZGluZ0RlZktleSIsImxhdGVQcm9wZXJ0aWVzS2V5Iiwic2V0UHJvcGVydHkiLCJjYXRjaCIsImVycm9yIiwiTG9nIiwiY29udHJvbFR5cGVGbiIsIlRleHQiLCJ0ZXh0Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJqc3gtY29udHJvbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRjb21waWxlQ29uc3RhbnQsXG5cdGNvbXBpbGVFeHByZXNzaW9uLFxuXHRpc0JpbmRpbmdUb29sa2l0RXhwcmVzc2lvbixcblx0aXNDb25zdGFudCxcblx0aXNQYXRoSW5Nb2RlbEV4cHJlc3Npb25cbn0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdJbmZvSG9sZGVyLCBOb25BYnN0cmFjdENsYXNzIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sUHJvcGVydGllcywgSlNYQ29udGV4dCwgTm9uQ29udHJvbFByb3BlcnRpZXMsIFJlZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9qc3gtcnVudGltZS9qc3hcIjtcbmltcG9ydCB0eXBlIEJ1aWxkaW5nQmxvY2tUZW1wbGF0aW5nQmFzZSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvdGVtcGxhdGluZy9CdWlsZGluZ0Jsb2NrVGVtcGxhdGluZ0Jhc2VcIjtcbmltcG9ydCB0eXBlIFJ1bnRpbWVCdWlsZGluZ0Jsb2NrIGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy90ZW1wbGF0aW5nL1J1bnRpbWVCdWlsZGluZ0Jsb2NrXCI7XG5pbXBvcnQgVGV4dCBmcm9tIFwic2FwL20vVGV4dFwiO1xuaW1wb3J0IERhdGFUeXBlIGZyb20gXCJzYXAvdWkvYmFzZS9EYXRhVHlwZVwiO1xuaW1wb3J0IHsgYmluZGluZ1BhcnNlciB9IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0TWV0YWRhdGEgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RNZXRhZGF0YVwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgeyAkQ29udHJvbFNldHRpbmdzIH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBFbGVtZW50LCBkZWZhdWx0IGFzIFVJNUVsZW1lbnQgfSBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IEV2ZW50SGFuZGxlclJlc29sdmVyIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvRXZlbnRIYW5kbGVyUmVzb2x2ZXJcIjtcblxuY29uc3QgRkxfREVMRUdBVEUgPSBcImZsOmRlbGVnYXRlXCI7XG5jb25zdCBDT1JFX1JFUVVJUkUgPSBcImNvcmU6cmVxdWlyZVwiO1xuY29uc3QgRFRfREVTSUdOVElNRSA9IFwiZHQ6ZGVzaWdudGltZVwiO1xuY29uc3QgYWRkQ2hpbGRBZ2dyZWdhdGlvbiA9IGZ1bmN0aW9uIChcblx0YWdncmVnYXRpb25DaGlsZHJlbjogUmVjb3JkPHN0cmluZywgKHN0cmluZyB8IFVJNUVsZW1lbnQpW10+LFxuXHRhZ2dyZWdhdGlvbk5hbWU6IHN0cmluZyxcblx0Y2hpbGQ/OiBzdHJpbmcgfCBVSTVFbGVtZW50IHwgVUk1RWxlbWVudFtdXG4pOiB2b2lkIHtcblx0aWYgKGNoaWxkID09PSBudWxsIHx8IGNoaWxkID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIGNoaWxkID09PSBcInN0cmluZ1wiKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGlmICghYWdncmVnYXRpb25DaGlsZHJlblthZ2dyZWdhdGlvbk5hbWVdKSB7XG5cdFx0YWdncmVnYXRpb25DaGlsZHJlblthZ2dyZWdhdGlvbk5hbWVdID0gW107XG5cdH1cblx0aWYgKGlzQ2hpbGRBbkVsZW1lbnQoY2hpbGQpKSB7XG5cdFx0YWdncmVnYXRpb25DaGlsZHJlblthZ2dyZWdhdGlvbk5hbWVdLnB1c2goY2hpbGQpO1xuXHR9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGQpKSB7XG5cdFx0Y2hpbGQuZm9yRWFjaCgoc3ViQ2hpbGQpID0+IHtcblx0XHRcdGFkZENoaWxkQWdncmVnYXRpb24oYWdncmVnYXRpb25DaGlsZHJlbiwgYWdncmVnYXRpb25OYW1lLCBzdWJDaGlsZCk7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIGNoaWxkID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRhZ2dyZWdhdGlvbkNoaWxkcmVuW2FnZ3JlZ2F0aW9uTmFtZV0gPSBjaGlsZDtcblx0fSBlbHNlIHtcblx0XHRPYmplY3Qua2V5cyhjaGlsZCkuZm9yRWFjaCgoY2hpbGRLZXkpID0+IHtcblx0XHRcdGFkZENoaWxkQWdncmVnYXRpb24oYWdncmVnYXRpb25DaGlsZHJlbiwgY2hpbGRLZXksIGNoaWxkW2NoaWxkS2V5XSk7XG5cdFx0fSk7XG5cdH1cbn07XG5jb25zdCBpc0NoaWxkQW5FbGVtZW50ID0gZnVuY3Rpb24gKGNoaWxkcmVuPzogdW5rbm93bik6IGNoaWxkcmVuIGlzIEVsZW1lbnQge1xuXHRyZXR1cm4gKGNoaWxkcmVuIGFzIEVsZW1lbnQpPy5pc0E/LihcInNhcC51aS5jb3JlLkVsZW1lbnRcIik7XG59O1xuY29uc3QgaXNBQ29udHJvbCA9IGZ1bmN0aW9uIChjaGlsZHJlbj86IHR5cGVvZiBDb250cm9sIHwgRnVuY3Rpb24pOiBjaGlsZHJlbiBpcyBOb25BYnN0cmFjdENsYXNzPENvbnRyb2w+IHtcblx0cmV0dXJuICEhKGNoaWxkcmVuIGFzIHR5cGVvZiBDb250cm9sKT8uZ2V0TWV0YWRhdGE7XG59O1xuXG5mdW5jdGlvbiBwcm9jZXNzQWdncmVnYXRpb25zKG1ldGFkYXRhOiBNYW5hZ2VkT2JqZWN0TWV0YWRhdGEsIG1TZXR0aW5nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcblx0Y29uc3QgbWV0YWRhdGFBZ2dyZWdhdGlvbnMgPSBtZXRhZGF0YS5nZXRBbGxBZ2dyZWdhdGlvbnMoKTtcblx0Y29uc3QgZGVmYXVsdEFnZ3JlZ2F0aW9uTmFtZSA9IG1ldGFkYXRhLmdldERlZmF1bHRBZ2dyZWdhdGlvbk5hbWUoKTtcblx0Y29uc3QgYWdncmVnYXRpb25DaGlsZHJlbjogUmVjb3JkPHN0cmluZywgKHN0cmluZyB8IFVJNUVsZW1lbnQpW10+ID0ge307XG5cdGFkZENoaWxkQWdncmVnYXRpb24oYWdncmVnYXRpb25DaGlsZHJlbiwgZGVmYXVsdEFnZ3JlZ2F0aW9uTmFtZSwgbVNldHRpbmdzLmNoaWxkcmVuIGFzIHN0cmluZyB8IFVJNUVsZW1lbnQgfCBVSTVFbGVtZW50W10pO1xuXHRkZWxldGUgbVNldHRpbmdzLmNoaWxkcmVuO1xuXHQvLyBmaW5kIG91dCB3aGljaCBhZ2dyZWdhdGlvbiBhcmUgYm91bmQgKGJvdGggaW4gY2hpbGRyZW4gYW5kIGRpcmVjdGx5IHVuZGVyIGl0KVxuXHRPYmplY3Qua2V5cyhtZXRhZGF0YUFnZ3JlZ2F0aW9ucykuZm9yRWFjaCgoYWdncmVnYXRpb25OYW1lKSA9PiB7XG5cdFx0aWYgKGFnZ3JlZ2F0aW9uQ2hpbGRyZW5bYWdncmVnYXRpb25OYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAobVNldHRpbmdzLmhhc093blByb3BlcnR5KGFnZ3JlZ2F0aW9uTmFtZSkpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBtU2V0dGluZ3NbYWdncmVnYXRpb25OYW1lXSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdG1TZXR0aW5nc1thZ2dyZWdhdGlvbk5hbWVdID0ge1xuXHRcdFx0XHRcdFx0cGF0aDogbVNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZV1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0eXBlb2YgYWdncmVnYXRpb25DaGlsZHJlblthZ2dyZWdhdGlvbk5hbWVdID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0XHQobVNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZV0gYXMgeyBmYWN0b3J5OiBGdW5jdGlvbiB9KS5mYWN0b3J5ID0gYWdncmVnYXRpb25DaGlsZHJlbltcblx0XHRcdFx0XHRcdGFnZ3JlZ2F0aW9uTmFtZVxuXHRcdFx0XHRcdF0gYXMgdW5rbm93biBhcyBGdW5jdGlvbjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQobVNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZV0gYXMgeyB0ZW1wbGF0ZTogc3RyaW5nIHwgVUk1RWxlbWVudCB9KS50ZW1wbGF0ZSA9IGFnZ3JlZ2F0aW9uQ2hpbGRyZW5bYWdncmVnYXRpb25OYW1lXVswXTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bVNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZV0gPSBhZ2dyZWdhdGlvbkNoaWxkcmVuW2FnZ3JlZ2F0aW9uTmFtZV07XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn1cblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHByb3BlcnRpZXMuXG4gKlxuICogSWYgdGhlIHByb3BlcnR5IGlzIGEgYmluZGluZ1Rvb2xraXQgZXhwcmVzc2lvbiB3ZSBuZWVkIHRvIGNvbXBpbGUgaXQuXG4gKiBFbHNlIGlmIHRoZSBwcm9wZXJ0eSBpcyBzZXQgYXMgc3RyaW5nIChjb21waWxlZCBiaW5kaW5nIGV4cHJlc3Npb24gcmV0dXJucyBzdHJpbmcgYnkgZGVmYXVsdCBldmVuIGlmIGl0J3MgYSBib29sZWFuLCBpbnQsIGV0Yy4pIGFuZCBpdCBkb2Vzbid0IG1hdGNoIHdpdGggZXhwZWN0ZWRcbiAqIGZvcm1hdCB0aGUgdmFsdWUgaXMgcGFyc2VkIHRvIHByb3ZpZGUgZXhwZWN0ZWQgZm9ybWF0LlxuICogQHBhcmFtIG1ldGFkYXRhIE1ldGFkYXRhIG9mIHRoZSBjb250cm9sXG4gKiBAcGFyYW0gc2V0dGluZ3MgU2V0dGluZ3Mgb2YgdGhlIGNvbnRyb2xcbiAqIEByZXR1cm5zIEEgbWFwIG9mIGxhdGUgcHJvcGVydGllcyB0aGF0IG5lZWQgdG8gYmUgYXdhaXRlZCBhZnRlciB0aGUgY29udHJvbCBpcyBjcmVhdGVkXG4gKi9cbmZ1bmN0aW9uIHByb2Nlc3NQcm9wZXJ0aWVzKG1ldGFkYXRhOiBNYW5hZ2VkT2JqZWN0TWV0YWRhdGEsIHNldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFJlY29yZDxzdHJpbmcsIFByb21pc2U8dW5rbm93bj4+IHtcblx0bGV0IHNldHRpbmdzS2V5OiBrZXlvZiB0eXBlb2Ygc2V0dGluZ3M7XG5cdGNvbnN0IGxhdGVQcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBQcm9taXNlPHVua25vd24+PiA9IHt9O1xuXHRjb25zdCBhbGxFdmVudHMgPSBtZXRhZGF0YS5nZXRBbGxFdmVudHMoKTtcblx0Y29uc3QgYWxsUHJvcGVydGllcyA9IG1ldGFkYXRhLmdldEFsbFByb3BlcnRpZXMoKTtcblx0Zm9yIChzZXR0aW5nc0tleSBpbiBzZXR0aW5ncykge1xuXHRcdGNvbnN0IHZhbHVlID0gc2V0dGluZ3Nbc2V0dGluZ3NLZXldO1xuXHRcdGlmIChpc0JpbmRpbmdUb29sa2l0RXhwcmVzc2lvbih2YWx1ZSkpIHtcblx0XHRcdGNvbnN0IGJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+ID0gdmFsdWU7XG5cdFx0XHRpZiAoaXNDb25zdGFudChiaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24pKSB7XG5cdFx0XHRcdHNldHRpbmdzW3NldHRpbmdzS2V5XSA9IGNvbXBpbGVDb25zdGFudChiaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIGZhbHNlLCB0cnVlLCB0cnVlKTtcblx0XHRcdH0gZWxzZSBpZiAoIU9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGFsbFByb3BlcnRpZXMsIHNldHRpbmdzS2V5KSkge1xuXHRcdFx0XHQvLyBBZ2dyZWdhdGlvbiBjYXNlIC0gd2UgbmVlZCB0byBjb21waWxlIHRoZSBleHByZXNzaW9uIGJ1dCBhcyBhbiBvYmplY3Rcblx0XHRcdFx0aWYgKGlzUGF0aEluTW9kZWxFeHByZXNzaW9uKGJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbikpIHtcblx0XHRcdFx0XHRzZXR0aW5nc1tzZXR0aW5nc0tleV0gPSB7IHBhdGg6IGJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbi5wYXRoLCBtb2RlbDogYmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLm1vZGVsTmFtZSB9O1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzZXR0aW5nc1tzZXR0aW5nc0tleV0gPSBjb21waWxlRXhwcmVzc2lvbihiaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmICh2YWx1ZSBhcyBQcm9taXNlPHVua25vd24+KS50aGVuKSB7XG5cdFx0XHRsYXRlUHJvcGVydGllc1tzZXR0aW5nc0tleV0gPSB2YWx1ZSBhcyBQcm9taXNlPHVua25vd24+O1xuXHRcdFx0ZGVsZXRlIHNldHRpbmdzW3NldHRpbmdzS2V5XTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiAhdmFsdWUuc3RhcnRzV2l0aChcIntcIikpIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5VHlwZSA9IChhbGxQcm9wZXJ0aWVzW3NldHRpbmdzS2V5XSBhcyB7IGdldFR5cGU/OiBGdW5jdGlvbiB9KT8uZ2V0VHlwZT8uKCk7XG5cdFx0XHRpZiAocHJvcGVydHlUeXBlICYmIHByb3BlcnR5VHlwZSBpbnN0YW5jZW9mIERhdGFUeXBlICYmIFtcImJvb2xlYW5cIiwgXCJpbnRcIiwgXCJmbG9hdFwiXS5pbmNsdWRlcyhwcm9wZXJ0eVR5cGUuZ2V0TmFtZSgpKSkge1xuXHRcdFx0XHRzZXR0aW5nc1tzZXR0aW5nc0tleV0gPSBwcm9wZXJ0eVR5cGUucGFyc2VWYWx1ZSh2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgKHZhbHVlIGFzIEJpbmRpbmdJbmZvSG9sZGVyPHVua25vd24+KS5fX2JpbmRpbmdJbmZvKSB7XG5cdFx0XHRzZXR0aW5nc1tzZXR0aW5nc0tleV0gPSAodmFsdWUgYXMgQmluZGluZ0luZm9Ib2xkZXI8dW5rbm93bj4pLl9fYmluZGluZ0luZm87XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoYWxsRXZlbnRzLCBzZXR0aW5nc0tleSkpIHtcblx0XHRcdFx0ZGVsZXRlIHNldHRpbmdzW3NldHRpbmdzS2V5XTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGxhdGVQcm9wZXJ0aWVzO1xufVxuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgY29tbWFuZC5cbiAqXG4gKiBSZXNvbHZlcyB0aGUgY29tbWFuZCBzZXQgb24gdGhlIGNvbnRyb2wgdmlhIHRoZSBpbnRyaW5zaWMgY2xhc3MgYXR0cmlidXRlIFwianN4OmNvbW1hbmRcIi5cbiAqIElmIG5vIGNvbW1hbmQgaGFzIGJlZW4gc2V0IG9yIHRoZSB0YXJnZXRlZCBldmVudCBkb2Vzbid0IGV4aXN0LCBubyBjb25maWd1cmF0aW9uIGlzIHNldC5cbiAqIEBwYXJhbSBtZXRhZGF0YSBNZXRhZGF0YSBvZiB0aGUgY29udHJvbFxuICogQHBhcmFtIHNldHRpbmdzIFNldHRpbmdzIG9mIHRoZSBjb250cm9sXG4gKi9cbmZ1bmN0aW9uIHByb2Nlc3NDb21tYW5kKG1ldGFkYXRhOiBNYW5hZ2VkT2JqZWN0TWV0YWRhdGEsIHNldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWQge1xuXHRjb25zdCBjb21tYW5kUHJvcGVydHkgPSBzZXR0aW5nc1tcImpzeDpjb21tYW5kXCJdO1xuXHRpZiAoY29tbWFuZFByb3BlcnR5KSB7XG5cdFx0Y29uc3QgW2NvbW1hbmQsIGV2ZW50TmFtZV0gPSAoY29tbWFuZFByb3BlcnR5IGFzIHN0cmluZykuc3BsaXQoXCJ8XCIpO1xuXHRcdGNvbnN0IGV2ZW50ID0gbWV0YWRhdGEuZ2V0QWxsRXZlbnRzKClbZXZlbnROYW1lXTtcblx0XHRpZiAoZXZlbnQgJiYgY29tbWFuZC5zdGFydHNXaXRoKFwiY21kOlwiKSkge1xuXHRcdFx0c2V0dGluZ3NbZXZlbnQubmFtZV0gPSBFdmVudEhhbmRsZXJSZXNvbHZlci5yZXNvbHZlRXZlbnRIYW5kbGVyKGNvbW1hbmQpO1xuXHRcdH1cblx0fVxuXHRkZWxldGUgc2V0dGluZ3NbXCJqc3g6Y29tbWFuZFwiXTtcbn1cblxuY29uc3QganN4Q29udHJvbCA9IGZ1bmN0aW9uIDxUIGV4dGVuZHMgRWxlbWVudD4oXG5cdENvbnRyb2xUeXBlOiBOb25BYnN0cmFjdENsYXNzPENvbnRyb2w+IHwgRnVuY3Rpb24sXG5cdHNldHRpbmdzOiBOb25Db250cm9sUHJvcGVydGllczxUPiAmIHtcblx0XHRrZXk6IHN0cmluZztcblx0XHRjaGlsZHJlbj86IEVsZW1lbnQgfCBDb250cm9sUHJvcGVydGllczxUPjtcblx0XHRyZWY/OiBSZWY8VD47XG5cdFx0YmluZGluZz86IHN0cmluZztcblx0XHRjbGFzcz86IHN0cmluZztcblx0XHRbRkxfREVMRUdBVEVdPzogc3RyaW5nO1xuXHRcdFtEVF9ERVNJR05USU1FXT86IHN0cmluZztcblx0XHRbQ09SRV9SRVFVSVJFXT86IHN0cmluZztcblx0fSxcblx0a2V5OiBzdHJpbmcsXG5cdGpzeENvbnRleHQ6IEpTWENvbnRleHRcbik6IENvbnRyb2wgfCBDb250cm9sW10gfCB1bmRlZmluZWQge1xuXHRsZXQgdGFyZ2V0Q29udHJvbDogQ29udHJvbCB8IENvbnRyb2xbXSB8IHVuZGVmaW5lZDtcblxuXHRpZiAoKENvbnRyb2xUeXBlIGFzIHsgaXNGcmFnbWVudD86IGJvb2xlYW4gfSk/LmlzRnJhZ21lbnQpIHtcblx0XHR0YXJnZXRDb250cm9sID0gc2V0dGluZ3MuY2hpbGRyZW4gYXMgQ29udHJvbCB8IENvbnRyb2xbXTtcblx0fSBlbHNlIGlmICgoQ29udHJvbFR5cGUgYXMgdHlwZW9mIEJ1aWxkaW5nQmxvY2tUZW1wbGF0aW5nQmFzZSk/LmlzUnVudGltZSkge1xuXHRcdGNvbnN0IHJ1bnRpbWVCdWlsZGluZ0Jsb2NrID0gbmV3IChDb250cm9sVHlwZSBhcyB0eXBlb2YgUnVudGltZUJ1aWxkaW5nQmxvY2spKHNldHRpbmdzIGFzIHVua25vd24gYXMgJENvbnRyb2xTZXR0aW5ncyk7XG5cdFx0dGFyZ2V0Q29udHJvbCA9IHJ1bnRpbWVCdWlsZGluZ0Jsb2NrLmdldENvbnRlbnQ/Lihqc3hDb250ZXh0LnZpZXchLCBqc3hDb250ZXh0LmFwcENvbXBvbmVudCEpO1xuXHR9IGVsc2UgaWYgKGlzQUNvbnRyb2woQ29udHJvbFR5cGUpKSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBDb250cm9sVHlwZS5nZXRNZXRhZGF0YSgpO1xuXHRcdGlmIChrZXkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0c2V0dGluZ3NbXCJrZXlcIl0gPSBrZXk7XG5cdFx0fVxuXHRcdGNvbnN0IGxhdGVQcm9wZXJ0aWVzID0gcHJvY2Vzc1Byb3BlcnRpZXMobWV0YWRhdGEsIHNldHRpbmdzKTtcblx0XHRwcm9jZXNzQ29tbWFuZChtZXRhZGF0YSwgc2V0dGluZ3MpO1xuXHRcdHByb2Nlc3NBZ2dyZWdhdGlvbnMobWV0YWRhdGEsIHNldHRpbmdzKTtcblx0XHRjb25zdCBjbGFzc0RlZiA9IHNldHRpbmdzLmNsYXNzO1xuXHRcdGNvbnN0IHJlZkRlZiA9IHNldHRpbmdzLnJlZjtcblx0XHRjb25zdCBiaW5kaW5nRGVmID0gc2V0dGluZ3MuYmluZGluZztcblx0XHRjb25zdCBmbERlbGVnYXRlID0gc2V0dGluZ3NbRkxfREVMRUdBVEVdO1xuXHRcdGNvbnN0IGR0RGVzaWdudGltZSA9IHNldHRpbmdzW0RUX0RFU0lHTlRJTUVdO1xuXHRcdGRlbGV0ZSBzZXR0aW5ncy5yZWY7XG5cdFx0ZGVsZXRlIHNldHRpbmdzLmNsYXNzO1xuXHRcdGRlbGV0ZSBzZXR0aW5ncy5iaW5kaW5nO1xuXHRcdGRlbGV0ZSBzZXR0aW5nc1tGTF9ERUxFR0FURV07XG5cdFx0ZGVsZXRlIHNldHRpbmdzW0RUX0RFU0lHTlRJTUVdO1xuXHRcdGRlbGV0ZSBzZXR0aW5nc1tDT1JFX1JFUVVJUkVdOyAvLyBDb3JlIHJlcXVpcmUgaXMgbm90IHVzZWZ1bCBpbiBjb250cm9sIG1vZGVcblx0XHRjb25zdCB0YXJnZXRDb250cm9sSW5zdGFuY2UgPSBuZXcgQ29udHJvbFR5cGUoc2V0dGluZ3MgYXMgJENvbnRyb2xTZXR0aW5ncyk7XG5cdFx0aWYgKGNsYXNzRGVmKSB7XG5cdFx0XHR0YXJnZXRDb250cm9sSW5zdGFuY2UuYWRkU3R5bGVDbGFzcyhjbGFzc0RlZik7XG5cdFx0fVxuXHRcdGlmIChyZWZEZWYpIHtcblx0XHRcdHJlZkRlZi5zZXRDdXJyZW50KHRhcmdldENvbnRyb2xJbnN0YW5jZSBhcyB1bmtub3duIGFzIFQpO1xuXHRcdH1cblx0XHRjb25zdCBjdXN0b21TZXR0aW5ncyA9IHRhcmdldENvbnRyb2xJbnN0YW5jZS5kYXRhKFwic2FwLXVpLWN1c3RvbS1zZXR0aW5nc1wiKSA/PyB7fTtcblx0XHRpZiAoZmxEZWxlZ2F0ZSkge1xuXHRcdFx0Y3VzdG9tU2V0dGluZ3NbXCJzYXAudWkuZmxcIl0gPz89IHt9O1xuXHRcdFx0Y3VzdG9tU2V0dGluZ3NbXCJzYXAudWkuZmxcIl0uZGVsZWdhdGUgPSBmbERlbGVnYXRlO1xuXHRcdH1cblx0XHRpZiAoZHREZXNpZ250aW1lKSB7XG5cdFx0XHRjdXN0b21TZXR0aW5nc1tcInNhcC51aS5kdFwiXSA/Pz0ge307XG5cdFx0XHRjdXN0b21TZXR0aW5nc1tcInNhcC51aS5kdFwiXS5kZXNpZ250aW1lID0gZHREZXNpZ250aW1lO1xuXHRcdH1cblx0XHRpZiAoT2JqZWN0LmtleXMoY3VzdG9tU2V0dGluZ3MpLmxlbmd0aCA+IDApIHtcblx0XHRcdHRhcmdldENvbnRyb2xJbnN0YW5jZS5kYXRhKFwic2FwLXVpLWN1c3RvbS1zZXR0aW5nc1wiLCBjdXN0b21TZXR0aW5ncyk7XG5cdFx0fVxuXG5cdFx0aWYgKGJpbmRpbmdEZWYpIHtcblx0XHRcdGlmICh0eXBlb2YgYmluZGluZ0RlZiA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRjb25zdCBiaW5kaW5nSW5mbyA9IGJpbmRpbmdQYXJzZXIoYmluZGluZ0RlZik7XG5cdFx0XHRcdGlmIChiaW5kaW5nSW5mbykge1xuXHRcdFx0XHRcdHRhcmdldENvbnRyb2xJbnN0YW5jZS5iaW5kRWxlbWVudCh7IG1vZGVsOiBiaW5kaW5nSW5mby5tb2RlbCA/PyB1bmRlZmluZWQsIHBhdGg6IGJpbmRpbmdJbmZvLnBhdGggfSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGFyZ2V0Q29udHJvbEluc3RhbmNlLmJpbmRFbGVtZW50KGJpbmRpbmdEZWYpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gV2UgY29uc2lkZXIgaXQncyBhbiBvYmplY3Rcblx0XHRcdFx0T2JqZWN0LmtleXMoYmluZGluZ0RlZikuZm9yRWFjaCgoYmluZGluZ0RlZktleSkgPT4ge1xuXHRcdFx0XHRcdHRhcmdldENvbnRyb2xJbnN0YW5jZS5iaW5kRWxlbWVudCh7IG1vZGVsOiBiaW5kaW5nRGVmS2V5LCBwYXRoOiBiaW5kaW5nRGVmW2JpbmRpbmdEZWZLZXldIH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Zm9yIChjb25zdCBsYXRlUHJvcGVydGllc0tleSBpbiBsYXRlUHJvcGVydGllcykge1xuXHRcdFx0bGF0ZVByb3BlcnRpZXNbbGF0ZVByb3BlcnRpZXNLZXldXG5cdFx0XHRcdC50aGVuKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB0YXJnZXRDb250cm9sSW5zdGFuY2Uuc2V0UHJvcGVydHkobGF0ZVByb3BlcnRpZXNLZXksIHZhbHVlKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKChlcnJvcikgPT4ge1xuXHRcdFx0XHRcdExvZy5lcnJvcihgQ291bGRuJ3Qgc2V0IHByb3BlcnR5ICR7bGF0ZVByb3BlcnRpZXNLZXl9IG9uICR7Q29udHJvbFR5cGUuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCl9YCwgZXJyb3IsIFwianN4Q29udHJvbFwiKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHRcdHRhcmdldENvbnRyb2wgPSB0YXJnZXRDb250cm9sSW5zdGFuY2U7XG5cdH0gZWxzZSBpZiAodHlwZW9mIENvbnRyb2xUeXBlID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRjb25zdCBjb250cm9sVHlwZUZuID0gQ29udHJvbFR5cGU7XG5cdFx0dGFyZ2V0Q29udHJvbCA9IGNvbnRyb2xUeXBlRm4oc2V0dGluZ3MgYXMgJENvbnRyb2xTZXR0aW5ncyk7XG5cdH0gZWxzZSB7XG5cdFx0dGFyZ2V0Q29udHJvbCA9IG5ldyBUZXh0KHsgdGV4dDogXCJNaXNzaW5nIGNvbXBvbmVudCBcIiArIChDb250cm9sVHlwZSBhcyBzdHJpbmcpIH0pO1xuXHR9XG5cblx0cmV0dXJuIHRhcmdldENvbnRyb2w7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBqc3hDb250cm9sO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0VBc0JBLE1BQU1BLFdBQVcsR0FBRyxhQUFhO0VBQ2pDLE1BQU1DLFlBQVksR0FBRyxjQUFjO0VBQ25DLE1BQU1DLGFBQWEsR0FBRyxlQUFlO0VBQ3JDLE1BQU1DLG1CQUFtQixHQUFHLFNBQUFBLENBQzNCQyxtQkFBNEQsRUFDNURDLGVBQXVCLEVBQ3ZCQyxLQUEwQyxFQUNuQztJQUNQLElBQUlBLEtBQUssS0FBSyxJQUFJLElBQUlBLEtBQUssS0FBS0MsU0FBUyxJQUFJLE9BQU9ELEtBQUssS0FBSyxRQUFRLEVBQUU7TUFDdkU7SUFDRDtJQUNBLElBQUksQ0FBQ0YsbUJBQW1CLENBQUNDLGVBQWUsQ0FBQyxFQUFFO01BQzFDRCxtQkFBbUIsQ0FBQ0MsZUFBZSxDQUFDLEdBQUcsRUFBRTtJQUMxQztJQUNBLElBQUlHLGdCQUFnQixDQUFDRixLQUFLLENBQUMsRUFBRTtNQUM1QkYsbUJBQW1CLENBQUNDLGVBQWUsQ0FBQyxDQUFDSSxJQUFJLENBQUNILEtBQUssQ0FBQztJQUNqRCxDQUFDLE1BQU0sSUFBSUksS0FBSyxDQUFDQyxPQUFPLENBQUNMLEtBQUssQ0FBQyxFQUFFO01BQ2hDQSxLQUFLLENBQUNNLE9BQU8sQ0FBRUMsUUFBUSxJQUFLO1FBQzNCVixtQkFBbUIsQ0FBQ0MsbUJBQW1CLEVBQUVDLGVBQWUsRUFBRVEsUUFBUSxDQUFDO01BQ3BFLENBQUMsQ0FBQztJQUNILENBQUMsTUFBTSxJQUFJLE9BQU9QLEtBQUssS0FBSyxVQUFVLEVBQUU7TUFDdkNGLG1CQUFtQixDQUFDQyxlQUFlLENBQUMsR0FBR0MsS0FBSztJQUM3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
287
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGTF9ERUxFR0FURSIsIkNPUkVfUkVRVUlSRSIsIkRUX0RFU0lHTlRJTUUiLCJhZGRDaGlsZEFnZ3JlZ2F0aW9uIiwiYWdncmVnYXRpb25DaGlsZHJlbiIsImFnZ3JlZ2F0aW9uTmFtZSIsImNoaWxkIiwidW5kZWZpbmVkIiwiaXNDaGlsZEFuRWxlbWVudCIsInB1c2giLCJBcnJheSIsImlzQXJyYXkiLCJmb3JFYWNoIiwic3ViQ2hpbGQiLCJPYmplY3QiLCJrZXlzIiwiY2hpbGRLZXkiLCJjaGlsZHJlbiIsImlzQSIsImlzQUNvbnRyb2wiLCJnZXRNZXRhZGF0YSIsInByb2Nlc3NBZ2dyZWdhdGlvbnMiLCJtZXRhZGF0YSIsIm1TZXR0aW5ncyIsIm1ldGFkYXRhQWdncmVnYXRpb25zIiwiZ2V0QWxsQWdncmVnYXRpb25zIiwiZGVmYXVsdEFnZ3JlZ2F0aW9uTmFtZSIsImdldERlZmF1bHRBZ2dyZWdhdGlvbk5hbWUiLCJoYXNPd25Qcm9wZXJ0eSIsInJlc3VsdGluZ1BhcnNlIiwiQmluZGluZ1BhcnNlciIsImNvbXBsZXhQYXJzZXIiLCJwYXRoIiwibW9kZWwiLCJmYWN0b3J5IiwidGVtcGxhdGUiLCJwcm9jZXNzQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIiwic2V0dGluZ3MiLCJzZXR0aW5nc0tleSIsImJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiIsImFsbFByb3BlcnRpZXMiLCJpc0NvbnN0YW50IiwiY29tcGlsZUNvbnN0YW50IiwiY2FsbCIsImlzUGF0aEluTW9kZWxFeHByZXNzaW9uIiwibW9kZWxOYW1lIiwiY29tcGlsZUV4cHJlc3Npb24iLCJwcm9jZXNzU3RyaW5nUHJvcGVydHkiLCJ2YWx1ZSIsImFsbEV2ZW50cyIsInN0YXJ0c1dpdGgiLCJMb2ciLCJlcnJvciIsImdldE5hbWUiLCJwcm9wZXJ0eVR5cGUiLCJnZXRUeXBlIiwiRGF0YVR5cGUiLCJpbmNsdWRlcyIsInBhcnNlVmFsdWUiLCJwcm9jZXNzT2JqZWN0UHJvcGVydHkiLCJsYXRlUHJvcGVydGllcyIsInRoZW4iLCJfX2JpbmRpbmdJbmZvIiwicHJvY2Vzc1Byb3BlcnRpZXMiLCJnZXRBbGxFdmVudHMiLCJnZXRBbGxQcm9wZXJ0aWVzIiwiaXNCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24iLCJwcm9jZXNzQ29tbWFuZCIsImNvbW1hbmRQcm9wZXJ0eSIsImNvbW1hbmQiLCJldmVudE5hbWUiLCJzcGxpdCIsImV2ZW50IiwibmFtZSIsIkV2ZW50SGFuZGxlclJlc29sdmVyIiwicmVzb2x2ZUV2ZW50SGFuZGxlciIsImpzeENvbnRyb2wiLCJDb250cm9sVHlwZSIsImtleSIsImpzeENvbnRleHQiLCJ0YXJnZXRDb250cm9sIiwiaXNGcmFnbWVudCIsImlzUnVudGltZSIsInJ1bnRpbWVCdWlsZGluZ0Jsb2NrIiwiZ2V0Q29udGVudCIsInZpZXciLCJhcHBDb21wb25lbnQiLCJjbGFzc0RlZiIsImNsYXNzIiwicmVmRGVmIiwicmVmIiwiYmluZGluZ0RlZiIsImJpbmRpbmciLCJmbERlbGVnYXRlIiwiZHREZXNpZ250aW1lIiwidGFyZ2V0Q29udHJvbEluc3RhbmNlIiwiYWRkU3R5bGVDbGFzcyIsInNldEN1cnJlbnQiLCJjdXN0b21TZXR0aW5ncyIsImRhdGEiLCJkZWxlZ2F0ZSIsImRlc2lnbnRpbWUiLCJsZW5ndGgiLCJiaW5kaW5nSW5mbyIsImJpbmRpbmdQYXJzZXIiLCJiaW5kRWxlbWVudCIsInBhcmFtZXRlcnMiLCJiaW5kaW5nRGVmS2V5IiwibGF0ZVByb3BlcnRpZXNLZXkiLCJzZXRQcm9wZXJ0eSIsImNhdGNoIiwiY29udHJvbFR5cGVGbiIsIlRleHQiLCJ0ZXh0Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJqc3gtY29udHJvbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRjb21waWxlQ29uc3RhbnQsXG5cdGNvbXBpbGVFeHByZXNzaW9uLFxuXHRpc0JpbmRpbmdUb29sa2l0RXhwcmVzc2lvbixcblx0aXNDb25zdGFudCxcblx0aXNQYXRoSW5Nb2RlbEV4cHJlc3Npb25cbn0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdJbmZvSG9sZGVyLCBOb25BYnN0cmFjdENsYXNzIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sUHJvcGVydGllcywgSlNYQ29udGV4dCwgTm9uQ29udHJvbFByb3BlcnRpZXMsIFJlZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9qc3gtcnVudGltZS9qc3hcIjtcbmltcG9ydCB0eXBlIEJ1aWxkaW5nQmxvY2tUZW1wbGF0aW5nQmFzZSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvdGVtcGxhdGluZy9CdWlsZGluZ0Jsb2NrVGVtcGxhdGluZ0Jhc2VcIjtcbmltcG9ydCB0eXBlIFJ1bnRpbWVCdWlsZGluZ0Jsb2NrIGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy90ZW1wbGF0aW5nL1J1bnRpbWVCdWlsZGluZ0Jsb2NrXCI7XG5pbXBvcnQgVGV4dCBmcm9tIFwic2FwL20vVGV4dFwiO1xuaW1wb3J0IEJpbmRpbmdQYXJzZXIgZnJvbSBcInNhcC91aS9iYXNlL0JpbmRpbmdQYXJzZXJcIjtcbmltcG9ydCBEYXRhVHlwZSBmcm9tIFwic2FwL3VpL2Jhc2UvRGF0YVR5cGVcIjtcbmltcG9ydCB7IGJpbmRpbmdQYXJzZXIgfSBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdE1ldGFkYXRhIGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0TWV0YWRhdGFcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIHsgJENvbnRyb2xTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgRWxlbWVudCwgZGVmYXVsdCBhcyBVSTVFbGVtZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBFdmVudEhhbmRsZXJSZXNvbHZlciBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0V2ZW50SGFuZGxlclJlc29sdmVyXCI7XG5cbmNvbnN0IEZMX0RFTEVHQVRFID0gXCJmbDpkZWxlZ2F0ZVwiO1xuY29uc3QgQ09SRV9SRVFVSVJFID0gXCJjb3JlOnJlcXVpcmVcIjtcbmNvbnN0IERUX0RFU0lHTlRJTUUgPSBcImR0OmRlc2lnbnRpbWVcIjtcbmNvbnN0IGFkZENoaWxkQWdncmVnYXRpb24gPSBmdW5jdGlvbiAoXG5cdGFnZ3JlZ2F0aW9uQ2hpbGRyZW46IFJlY29yZDxzdHJpbmcsIChzdHJpbmcgfCBVSTVFbGVtZW50KVtdPixcblx0YWdncmVnYXRpb25OYW1lOiBzdHJpbmcsXG5cdGNoaWxkPzogc3RyaW5nIHwgVUk1RWxlbWVudCB8IFVJNUVsZW1lbnRbXVxuKTogdm9pZCB7XG5cdGlmIChjaGlsZCA9PT0gbnVsbCB8fCBjaGlsZCA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBjaGlsZCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdHJldHVybjtcblx0fVxuXHRpZiAoIWFnZ3JlZ2F0aW9uQ2hpbGRyZW5bYWdncmVnYXRpb25OYW1lXSkge1xuXHRcdGFnZ3JlZ2F0aW9uQ2hpbGRyZW5bYWdncmVnYXRpb25OYW1lXSA9IFtdO1xuXHR9XG5cdGlmIChpc0NoaWxkQW5FbGVtZW50KGNoaWxkKSkge1xuXHRcdGFnZ3JlZ2F0aW9uQ2hpbGRyZW5bYWdncmVnYXRpb25OYW1lXS5wdXNoKGNoaWxkKTtcblx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGNoaWxkKSkge1xuXHRcdGNoaWxkLmZvckVhY2goKHN1YkNoaWxkKSA9PiB7XG5cdFx0XHRhZGRDaGlsZEFnZ3JlZ2F0aW9uKGFnZ3JlZ2F0aW9uQ2hpbGRyZW4sIGFnZ3JlZ2F0aW9uTmFtZSwgc3ViQ2hpbGQpO1xuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBjaGlsZCA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0YWdncmVnYXRpb25DaGlsZHJlblthZ2dyZWdhdGlvbk5hbWVdID0gY2hpbGQ7XG5cdH0gZWxzZSB7XG5cdFx0T2JqZWN0LmtleXMoY2hpbGQpLmZvckVhY2goKGNoaWxkS2V5KSA9PiB7XG5cdFx0XHRhZGRDaGlsZEFnZ3JlZ2F0aW9uKGFnZ3JlZ2F0aW9uQ2hpbGRyZW4sIGNoaWxkS2V5LCBjaGlsZFtjaGlsZEtleV0pO1xuXHRcdH0pO1xuXHR9XG59O1xuY29uc3QgaXNDaGlsZEFuRWxlbWVudCA9IGZ1bmN0aW9uIChjaGlsZHJlbj86IHVua25vd24pOiBjaGlsZHJlbiBpcyBFbGVtZW50IHtcblx0cmV0dXJuIChjaGlsZHJlbiBhcyBFbGVtZW50KT8uaXNBPy4oXCJzYXAudWkuY29yZS5FbGVtZW50XCIpO1xufTtcbmNvbnN0IGlzQUNvbnRyb2wgPSBmdW5jdGlvbiAoY2hpbGRyZW4/OiB0eXBlb2YgQ29udHJvbCB8IEZ1bmN0aW9uKTogY2hpbGRyZW4gaXMgTm9uQWJzdHJhY3RDbGFzczxDb250cm9sPiB7XG5cdHJldHVybiAhIShjaGlsZHJlbiBhcyB0eXBlb2YgQ29udHJvbCk/LmdldE1ldGFkYXRhO1xufTtcblxuZnVuY3Rpb24gcHJvY2Vzc0FnZ3JlZ2F0aW9ucyhtZXRhZGF0YTogTWFuYWdlZE9iamVjdE1ldGFkYXRhLCBtU2V0dGluZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG5cdGNvbnN0IG1ldGFkYXRhQWdncmVnYXRpb25zID0gbWV0YWRhdGEuZ2V0QWxsQWdncmVnYXRpb25zKCk7XG5cdGNvbnN0IGRlZmF1bHRBZ2dyZWdhdGlvbk5hbWUgPSBtZXRhZGF0YS5nZXREZWZhdWx0QWdncmVnYXRpb25OYW1lKCk7XG5cdGNvbnN0IGFnZ3JlZ2F0aW9uQ2hpbGRyZW46IFJlY29yZDxzdHJpbmcsIChzdHJpbmcgfCBVSTVFbGVtZW50KVtdPiA9IHt9O1xuXHRhZGRDaGlsZEFnZ3JlZ2F0aW9uKGFnZ3JlZ2F0aW9uQ2hpbGRyZW4sIGRlZmF1bHRBZ2dyZWdhdGlvbk5hbWUsIG1TZXR0aW5ncy5jaGlsZHJlbiBhcyBzdHJpbmcgfCBVSTVFbGVtZW50IHwgVUk1RWxlbWVudFtdKTtcblx0ZGVsZXRlIG1TZXR0aW5ncy5jaGlsZHJlbjtcblx0Ly8gZmluZCBvdXQgd2hpY2ggYWdncmVnYXRpb24gYXJlIGJvdW5kIChib3RoIGluIGNoaWxkcmVuIGFuZCBkaXJlY3RseSB1bmRlciBpdClcblx0T2JqZWN0LmtleXMobWV0YWRhdGFBZ2dyZWdhdGlvbnMpLmZvckVhY2goKGFnZ3JlZ2F0aW9uTmFtZSkgPT4ge1xuXHRcdGlmIChhZ2dyZWdhdGlvbkNoaWxkcmVuW2FnZ3JlZ2F0aW9uTmFtZV0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKG1TZXR0aW5ncy5oYXNPd25Qcm9wZXJ0eShhZ2dyZWdhdGlvbk5hbWUpKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgbVNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZV0gPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHRjb25zdCByZXN1bHRpbmdQYXJzZSA9IEJpbmRpbmdQYXJzZXIuY29tcGxleFBhcnNlcihtU2V0dGluZ3NbYWdncmVnYXRpb25OYW1lXSk7XG5cdFx0XHRcdFx0aWYgKHJlc3VsdGluZ1BhcnNlKSB7XG5cdFx0XHRcdFx0XHRtU2V0dGluZ3NbYWdncmVnYXRpb25OYW1lXSA9IHtcblx0XHRcdFx0XHRcdFx0cGF0aDogcmVzdWx0aW5nUGFyc2UucGF0aCxcblx0XHRcdFx0XHRcdFx0bW9kZWw6IHJlc3VsdGluZ1BhcnNlLm1vZGVsXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRtU2V0dGluZ3NbYWdncmVnYXRpb25OYW1lXSA9IHtcblx0XHRcdFx0XHRcdFx0cGF0aDogbVNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZV1cblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0eXBlb2YgYWdncmVnYXRpb25DaGlsZHJlblthZ2dyZWdhdGlvbk5hbWVdID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0XHQobVNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZV0gYXMgeyBmYWN0b3J5OiBGdW5jdGlvbiB9KS5mYWN0b3J5ID0gYWdncmVnYXRpb25DaGlsZHJlbltcblx0XHRcdFx0XHRcdGFnZ3JlZ2F0aW9uTmFtZVxuXHRcdFx0XHRcdF0gYXMgdW5rbm93biBhcyBGdW5jdGlvbjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQobVNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZV0gYXMgeyB0ZW1wbGF0ZTogc3RyaW5nIHwgVUk1RWxlbWVudCB9KS50ZW1wbGF0ZSA9IGFnZ3JlZ2F0aW9uQ2hpbGRyZW5bYWdncmVnYXRpb25OYW1lXVswXTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bVNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZV0gPSBhZ2dyZWdhdGlvbkNoaWxkcmVuW2FnZ3JlZ2F0aW9uTmFtZV07XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn1cblxuLyoqXG4gKiBQcm9jZXNzZXMgYSBiaW5kaW5nIHRvb2xraXQgZXhwcmVzc2lvbiBwcm9wZXJ0eSBmb3IgZnVuY3Rpb24gcHJvY2Vzc1Byb3BlcnRpZXNcbiAqXG4gKiBJZiB0aGUgcHJvcGVydHkgaXMgYSBjb25zdGFudCwgaXQgY29tcGlsZXMgaXQgYXMgYSBjb25zdGFudC4gSWYgdGhlIHByb3BlcnR5IGlzIGFuIGFnZ3JlZ2F0aW9uLFxuICogaXQgY29tcGlsZXMgdGhlIGV4cHJlc3Npb24gYXMgYW4gb2JqZWN0LiBPdGhlcndpc2UsIGl0IGNvbXBpbGVzIHRoZSBleHByZXNzaW9uIG5vcm1hbGx5LlxuICogQHBhcmFtIHNldHRpbmdzIFRoZSBzZXR0aW5ncyBvZiB0aGUgY29udHJvbFxuICogQHBhcmFtIHNldHRpbmdzS2V5IFRoZSBrZXkgb2YgdGhlIHNldHRpbmcgYmVpbmcgcHJvY2Vzc2VkXG4gKiBAcGFyYW0gYmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIFRoZSBiaW5kaW5nIHRvb2xraXQgZXhwcmVzc2lvbiB0byBwcm9jZXNzXG4gKiBAcGFyYW0gYWxsUHJvcGVydGllcyBBbGwgcHJvcGVydGllcyBvZiB0aGUgY29udHJvbFxuICovXG5mdW5jdGlvbiBwcm9jZXNzQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uKFxuXHRzZXR0aW5nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdHNldHRpbmdzS2V5OiBrZXlvZiB0eXBlb2Ygc2V0dGluZ3MsXG5cdGJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+LFxuXHRhbGxQcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogdm9pZCB7XG5cdGlmIChpc0NvbnN0YW50KGJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbikpIHtcblx0XHRzZXR0aW5nc1tzZXR0aW5nc0tleV0gPSBjb21waWxlQ29uc3RhbnQoYmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSk7XG5cdH0gZWxzZSBpZiAoIU9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGFsbFByb3BlcnRpZXMsIHNldHRpbmdzS2V5KSkge1xuXHRcdC8vIEFnZ3JlZ2F0aW9uIGNhc2UgLSB3ZSBuZWVkIHRvIGNvbXBpbGUgdGhlIGV4cHJlc3Npb24gYnV0IGFzIGFuIG9iamVjdFxuXHRcdGlmIChpc1BhdGhJbk1vZGVsRXhwcmVzc2lvbihiaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24pKSB7XG5cdFx0XHRzZXR0aW5nc1tzZXR0aW5nc0tleV0gPSB7IHBhdGg6IGJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbi5wYXRoLCBtb2RlbDogYmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLm1vZGVsTmFtZSB9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRzZXR0aW5nc1tzZXR0aW5nc0tleV0gPSBjb21waWxlRXhwcmVzc2lvbihiaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24pO1xuXHR9XG59XG5cbi8qKlxuICogUHJvY2Vzc2VzIGEgc3RyaW5nIHByb3BlcnR5IGZvciBmdW5jdGlvbiBwcm9jZXNzUHJvcGVydGllc1xuICpcbiAqIElmIHRoZSBwcm9wZXJ0eSBpcyBub3QgYSBiaW5kaW5nIGV4cHJlc3Npb24gYW5kIGRvZXMgbm90IG1hdGNoIHRoZSBleHBlY3RlZCBmb3JtYXQsXG4gKiBpdCBwYXJzZXMgdGhlIHZhbHVlIHRvIHByb3ZpZGUgdGhlIGV4cGVjdGVkIGZvcm1hdC4gSWYgdGhlIHByb3BlcnR5IGlzIGFuIGV2ZW50IGhhbmRsZXIsXG4gKiBpdCBsb2dzIGFuIGVycm9yLlxuICogQHBhcmFtIHNldHRpbmdzIFRoZSBzZXR0aW5ncyBvZiB0aGUgY29udHJvbFxuICogQHBhcmFtIHNldHRpbmdzS2V5IFRoZSBrZXkgb2YgdGhlIHNldHRpbmcgYmVpbmcgcHJvY2Vzc2VkXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHN0cmluZyB2YWx1ZSB0byBwcm9jZXNzXG4gKiBAcGFyYW0gYWxsRXZlbnRzIEFsbCBldmVudHMgb2YgdGhlIGNvbnRyb2xcbiAqIEBwYXJhbSBhbGxQcm9wZXJ0aWVzIEFsbCBwcm9wZXJ0aWVzIG9mIHRoZSBjb250cm9sXG4gKiBAcGFyYW0gbWV0YWRhdGEgTWV0YWRhdGEgb2YgdGhlIGNvbnRyb2xcbiAqL1xuZnVuY3Rpb24gcHJvY2Vzc1N0cmluZ1Byb3BlcnR5KFxuXHRzZXR0aW5nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdHNldHRpbmdzS2V5OiBrZXlvZiB0eXBlb2Ygc2V0dGluZ3MsXG5cdHZhbHVlOiBzdHJpbmcsXG5cdGFsbEV2ZW50czogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdGFsbFByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRtZXRhZGF0YTogTWFuYWdlZE9iamVjdE1ldGFkYXRhXG4pOiB2b2lkIHtcblx0aWYgKCF2YWx1ZS5zdGFydHNXaXRoKFwie1wiKSkge1xuXHRcdGlmIChPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChhbGxFdmVudHMsIHNldHRpbmdzS2V5KSkge1xuXHRcdFx0TG9nLmVycm9yKGBFdmVudCBoYW5kbGVycyBjYW5ub3QgYmUgc2V0IGFzIHN0cmluZyBpbiBKU1gsICR7c2V0dGluZ3NLZXl9IGluICR7bWV0YWRhdGEuZ2V0TmFtZSgpfWApO1xuXHRcdH1cblx0XHRjb25zdCBwcm9wZXJ0eVR5cGUgPSAoYWxsUHJvcGVydGllc1tzZXR0aW5nc0tleV0gYXMgeyBnZXRUeXBlPzogRnVuY3Rpb24gfSk/LmdldFR5cGU/LigpO1xuXHRcdGlmIChwcm9wZXJ0eVR5cGUgJiYgcHJvcGVydHlUeXBlIGluc3RhbmNlb2YgRGF0YVR5cGUgJiYgW1wiYm9vbGVhblwiLCBcImludFwiLCBcImZsb2F0XCJdLmluY2x1ZGVzKHByb3BlcnR5VHlwZS5nZXROYW1lKCkpKSB7XG5cdFx0XHRzZXR0aW5nc1tzZXR0aW5nc0tleV0gPSBwcm9wZXJ0eVR5cGUucGFyc2VWYWx1ZSh2YWx1ZSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHNldHRpbmdzW3NldHRpbmdzS2V5XSA9IHZhbHVlO1xuXHR9XG59XG5cbi8qKlxuICogUHJvY2Vzc2VzIGFuIG9iamVjdCBwcm9wZXJ0eSBmb3IgZnVuY3Rpb24gcHJvY2Vzc1Byb3BlcnRpZXMuXG4gKlxuICogSWYgdGhlIHByb3BlcnR5IGlzIGEgcHJvbWlzZSwgaXQgYWRkcyBpdCB0byB0aGUgbGF0ZSBwcm9wZXJ0aWVzIG1hcC4gSWYgdGhlIHByb3BlcnR5IGlzIGEgYmluZGluZyBpbmZvIGhvbGRlcixcbiAqIGl0IHNldHMgdGhlIGJpbmRpbmcgaW5mbyB0byB0aGUgc2V0dGluZ3MuXG4gKiBAcGFyYW0gc2V0dGluZ3MgVGhlIHNldHRpbmdzIG9mIHRoZSBjb250cm9sXG4gKiBAcGFyYW0gc2V0dGluZ3NLZXkgVGhlIGtleSBvZiB0aGUgc2V0dGluZyBiZWluZyBwcm9jZXNzZWRcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgb2JqZWN0IHZhbHVlIHRvIHByb2Nlc3NcbiAqIEBwYXJhbSBsYXRlUHJvcGVydGllcyBBIG1hcCBvZiB0aGUgY29udHJvbCdzIGxhdGUgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBwcm9jZXNzT2JqZWN0UHJvcGVydHkoXG5cdHNldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0c2V0dGluZ3NLZXk6IGtleW9mIHR5cGVvZiBzZXR0aW5ncyxcblx0dmFsdWU6IHVua25vd24sXG5cdGxhdGVQcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBQcm9taXNlPHVua25vd24+PlxuKTogdm9pZCB7XG5cdGlmICgodmFsdWUgYXMgUHJvbWlzZTx1bmtub3duPikudGhlbikge1xuXHRcdGxhdGVQcm9wZXJ0aWVzW3NldHRpbmdzS2V5XSA9IHZhbHVlIGFzIFByb21pc2U8dW5rbm93bj47XG5cdFx0ZGVsZXRlIHNldHRpbmdzW3NldHRpbmdzS2V5XTtcblx0fSBlbHNlIGlmICgodmFsdWUgYXMgQmluZGluZ0luZm9Ib2xkZXI8dW5rbm93bj4pLl9fYmluZGluZ0luZm8pIHtcblx0XHRzZXR0aW5nc1tzZXR0aW5nc0tleV0gPSAodmFsdWUgYXMgQmluZGluZ0luZm9Ib2xkZXI8dW5rbm93bj4pLl9fYmluZGluZ0luZm87XG5cdH1cbn1cblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHByb3BlcnRpZXMuXG4gKlxuICogSWYgdGhlIHByb3BlcnR5IGlzIGEgYmluZGluZ1Rvb2xraXQgZXhwcmVzc2lvbiB3ZSBuZWVkIHRvIGNvbXBpbGUgaXQuXG4gKiBFbHNlIGlmIHRoZSBwcm9wZXJ0eSBpcyBzZXQgYXMgc3RyaW5nIChjb21waWxlZCBiaW5kaW5nIGV4cHJlc3Npb24gcmV0dXJucyBzdHJpbmcgYnkgZGVmYXVsdCBldmVuIGlmIGl0J3MgYSBib29sZWFuLCBpbnQsIGV0Yy4pIGFuZCBpdCBkb2Vzbid0IG1hdGNoIHdpdGggZXhwZWN0ZWRcbiAqIGZvcm1hdCB0aGUgdmFsdWUgaXMgcGFyc2VkIHRvIHByb3ZpZGUgZXhwZWN0ZWQgZm9ybWF0LlxuICogQHBhcmFtIG1ldGFkYXRhIE1ldGFkYXRhIG9mIHRoZSBjb250cm9sXG4gKiBAcGFyYW0gc2V0dGluZ3MgU2V0dGluZ3Mgb2YgdGhlIGNvbnRyb2xcbiAqIEByZXR1cm5zIEEgbWFwIG9mIGxhdGUgcHJvcGVydGllcyB0aGF0IG5lZWQgdG8gYmUgYXdhaXRlZCBhZnRlciB0aGUgY29udHJvbCBpcyBjcmVhdGVkXG4gKi9cbmZ1bmN0aW9uIHByb2Nlc3NQcm9wZXJ0aWVzKG1ldGFkYXRhOiBNYW5hZ2VkT2JqZWN0TWV0YWRhdGEsIHNldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFJlY29yZDxzdHJpbmcsIFByb21pc2U8dW5rbm93bj4+IHtcblx0bGV0IHNldHRpbmdzS2V5OiBrZXlvZiB0eXBlb2Ygc2V0dGluZ3M7XG5cdGNvbnN0IGxhdGVQcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBQcm9taXNlPHVua25vd24+PiA9IHt9O1xuXHRjb25zdCBhbGxFdmVudHMgPSBtZXRhZGF0YS5nZXRBbGxFdmVudHMoKTtcblx0Y29uc3QgYWxsUHJvcGVydGllcyA9IG1ldGFkYXRhLmdldEFsbFByb3BlcnRpZXMoKTtcblxuXHRmb3IgKHNldHRpbmdzS2V5IGluIHNldHRpbmdzKSB7XG5cdFx0Y29uc3QgdmFsdWUgPSBzZXR0aW5nc1tzZXR0aW5nc0tleV07XG5cdFx0aWYgKGlzQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uKHZhbHVlKSkge1xuXHRcdFx0cHJvY2Vzc0JpbmRpbmdUb29sa2l0RXhwcmVzc2lvbihzZXR0aW5ncywgc2V0dGluZ3NLZXksIHZhbHVlLCBhbGxQcm9wZXJ0aWVzKTtcblx0XHR9IGVsc2UgaWYgKHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0cHJvY2Vzc09iamVjdFByb3BlcnR5KHNldHRpbmdzLCBzZXR0aW5nc0tleSwgdmFsdWUsIGxhdGVQcm9wZXJ0aWVzKTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0cHJvY2Vzc1N0cmluZ1Byb3BlcnR5KHNldHRpbmdzLCBzZXR0aW5nc0tleSwgdmFsdWUsIGFsbEV2ZW50cywgYWxsUHJvcGVydGllcywgbWV0YWRhdGEpO1xuXHRcdH0gZWxzZSBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0ZGVsZXRlIHNldHRpbmdzW3NldHRpbmdzS2V5XTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGxhdGVQcm9wZXJ0aWVzO1xufVxuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgY29tbWFuZC5cbiAqXG4gKiBSZXNvbHZlcyB0aGUgY29tbWFuZCBzZXQgb24gdGhlIGNvbnRyb2wgdmlhIHRoZSBpbnRyaW5zaWMgY2xhc3MgYXR0cmlidXRlIFwianN4OmNvbW1hbmRcIi5cbiAqIElmIG5vIGNvbW1hbmQgaGFzIGJlZW4gc2V0IG9yIHRoZSB0YXJnZXRlZCBldmVudCBkb2Vzbid0IGV4aXN0LCBubyBjb25maWd1cmF0aW9uIGlzIHNldC5cbiAqIEBwYXJhbSBtZXRhZGF0YSBNZXRhZGF0YSBvZiB0aGUgY29udHJvbFxuICogQHBhcmFtIHNldHRpbmdzIFNldHRpbmdzIG9mIHRoZSBjb250cm9sXG4gKi9cbmZ1bmN0aW9uIHByb2Nlc3NDb21tYW5kKG1ldGFkYXRhOiBNYW5hZ2VkT2JqZWN0TWV0YWRhdGEsIHNldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWQge1xuXHRjb25zdCBjb21tYW5kUHJvcGVydHkgPSBzZXR0aW5nc1tcImpzeDpjb21tYW5kXCJdO1xuXHRpZiAoY29tbWFuZFByb3BlcnR5KSB7XG5cdFx0Y29uc3QgW2NvbW1hbmQsIGV2ZW50TmFtZV0gPSAoY29tbWFuZFByb3BlcnR5IGFzIHN0cmluZykuc3BsaXQoXCJ8XCIpO1xuXHRcdGNvbnN0IGV2ZW50ID0gbWV0YWRhdGEuZ2V0QWxsRXZlbnRzKClbZXZlbnROYW1lXTtcblx0XHRpZiAoZXZlbnQgJiYgY29tbWFuZC5zdGFydHNXaXRoKFwiY21kOlwiKSkge1xuXHRcdFx0c2V0dGluZ3NbZXZlbnQubmFtZV0gPSBFdmVudEhhbmRsZXJSZXNvbHZlci5yZXNvbHZlRXZlbnRIYW5kbGVyKGNvbW1hbmQpO1xuXHRcdH1cblx0fVxuXHRkZWxldGUgc2V0dGluZ3NbXCJqc3g6Y29tbWFuZFwiXTtcbn1cblxuY29uc3QganN4Q29udHJvbCA9IGZ1bmN0aW9uIDxUIGV4dGVuZHMgRWxlbWVudD4oXG5cdENvbnRyb2xUeXBlOiBOb25BYnN0cmFjdENsYXNzPENvbnRyb2w+IHwgRnVuY3Rpb24sXG5cdHNldHRpbmdzOiBOb25Db250cm9sUHJvcGVydGllczxUPiAmIHtcblx0XHRrZXk6IHN0cmluZztcblx0XHRjaGlsZHJlbj86IEVsZW1lbnQgfCBDb250cm9sUHJvcGVydGllczxUPjtcblx0XHRyZWY/OiBSZWY8VD47XG5cdFx0YmluZGluZz86IHN0cmluZztcblx0XHRjbGFzcz86IHN0cmluZztcblx0XHRbRkxfREVMRUdBVEVdPzogc3RyaW5nO1xuXHRcdFtEVF9ERVNJR05USU1FXT86IHN0cmluZztcblx0XHRbQ09SRV9SRVFVSVJFXT86IHN0cmluZztcblx0fSxcblx0a2V5OiBzdHJpbmcsXG5cdGpzeENvbnRleHQ6IEpTWENvbnRleHRcbik6IENvbnRyb2wgfCBDb250cm9sW10gfCB1bmRlZmluZWQge1xuXHRsZXQgdGFyZ2V0Q29udHJvbDogQ29udHJvbCB8IENvbnRyb2xbXSB8IHVuZGVmaW5lZDtcblxuXHRpZiAoKENvbnRyb2xUeXBlIGFzIHsgaXNGcmFnbWVudD86IGJvb2xlYW4gfSk/LmlzRnJhZ21lbnQpIHtcblx0XHR0YXJnZXRDb250cm9sID0gc2V0dGluZ3MuY2hpbGRyZW4gYXMgQ29udHJvbCB8IENvbnRyb2xbXTtcblx0fSBlbHNlIGlmICgoQ29udHJvbFR5cGUgYXMgdHlwZW9mIEJ1aWxkaW5nQmxvY2tUZW1wbGF0aW5nQmFzZSk/LmlzUnVudGltZSkge1xuXHRcdGNvbnN0IHJ1bnRpbWVCdWlsZGluZ0Jsb2NrID0gbmV3IChDb250cm9sVHlwZSBhcyB0eXBlb2YgUnVudGltZUJ1aWxkaW5nQmxvY2spKHNldHRpbmdzIGFzIHVua25vd24gYXMgJENvbnRyb2xTZXR0aW5ncyk7XG5cdFx0dGFyZ2V0Q29udHJvbCA9IHJ1bnRpbWVCdWlsZGluZ0Jsb2NrLmdldENvbnRlbnQ/Lihqc3hDb250ZXh0LnZpZXchLCBqc3hDb250ZXh0LmFwcENvbXBvbmVudCEpO1xuXHR9IGVsc2UgaWYgKGlzQUNvbnRyb2woQ29udHJvbFR5cGUpKSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBDb250cm9sVHlwZS5nZXRNZXRhZGF0YSgpO1xuXHRcdGlmIChrZXkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0c2V0dGluZ3NbXCJrZXlcIl0gPSBrZXk7XG5cdFx0fVxuXHRcdGNvbnN0IGxhdGVQcm9wZXJ0aWVzID0gcHJvY2Vzc1Byb3BlcnRpZXMobWV0YWRhdGEsIHNldHRpbmdzKTtcblx0XHRwcm9jZXNzQ29tbWFuZChtZXRhZGF0YSwgc2V0dGluZ3MpO1xuXHRcdHByb2Nlc3NBZ2dyZWdhdGlvbnMobWV0YWRhdGEsIHNldHRpbmdzKTtcblx0XHRjb25zdCBjbGFzc0RlZiA9IHNldHRpbmdzLmNsYXNzO1xuXHRcdGNvbnN0IHJlZkRlZiA9IHNldHRpbmdzLnJlZjtcblx0XHRjb25zdCBiaW5kaW5nRGVmID0gc2V0dGluZ3MuYmluZGluZztcblx0XHRjb25zdCBmbERlbGVnYXRlID0gc2V0dGluZ3NbRkxfREVMRUdBVEVdO1xuXHRcdGNvbnN0IGR0RGVzaWdudGltZSA9IHNldHRpbmdzW0RUX0RFU0lHTlRJTUVdO1xuXHRcdGRlbGV0ZSBzZXR0aW5ncy5yZWY7XG5cdFx0ZGVsZXRlIHNldHRpbmdzLmNsYXNzO1xuXHRcdGRlbGV0ZSBzZXR0aW5ncy5iaW5kaW5nO1xuXHRcdGRlbGV0ZSBzZXR0aW5nc1tGTF9ERUxFR0FURV07XG5cdFx0ZGVsZXRlIHNldHRpbmdzW0RUX0RFU0lHTlRJTUVdO1xuXHRcdGRlbGV0ZSBzZXR0aW5nc1tDT1JFX1JFUVVJUkVdOyAvLyBDb3JlIHJlcXVpcmUgaXMgbm90IHVzZWZ1bCBpbiBjb250cm9sIG1vZGVcblx0XHRjb25zdCB0YXJnZXRDb250cm9sSW5zdGFuY2UgPSBuZXcgQ29udHJvbFR5cGUoc2V0dGluZ3MgYXMgJENvbnRyb2xTZXR0aW5ncyk7XG5cdFx0aWYgKGNsYXNzRGVmKSB7XG5cdFx0XHR0YXJnZXRDb250cm9sSW5zdGFuY2UuYWRkU3R5bGVDbGFzcyhjbGFzc0RlZik7XG5cdFx0fVxuXHRcdGlmIChyZWZEZWYpIHtcblx0XHRcdHJlZkRlZi5zZXRDdXJyZW50KHRhcmdldENvbnRyb2xJbnN0YW5jZSBhcyB1bmtub3duIGFzIFQpO1xuXHRcdH1cblx0XHRjb25zdCBjdXN0b21TZXR0aW5ncyA9IHRhcmdldENvbnRyb2xJbnN0YW5jZS5kYXRhKFwic2FwLXVpLWN1c3RvbS1zZXR0aW5nc1wiKSA/PyB7fTtcblx0XHRpZiAoZmxEZWxlZ2F0ZSkge1xuXHRcdFx0Y3VzdG9tU2V0dGluZ3NbXCJzYXAudWkuZmxcIl0gPz89IHt9O1xuXHRcdFx0Y3VzdG9tU2V0dGluZ3NbXCJzYXAudWkuZmxcIl0uZGVsZWdhdGUgPSBmbERlbGVnYXRlO1xuXHRcdH1cblx0XHRpZiAoZHREZXNpZ250aW1lKSB7XG5cdFx0XHRjdXN0b21TZXR0aW5nc1tcInNhcC51aS5kdFwiXSA/Pz0ge307XG5cdFx0XHRjdXN0b21TZXR0aW5nc1tcInNhcC51aS5kdFwiXS5kZXNpZ250aW1lID0gZHREZXNpZ250aW1lO1xuXHRcdH1cblx0XHRpZiAoT2JqZWN0LmtleXMoY3VzdG9tU2V0dGluZ3MpLmxlbmd0aCA+IDApIHtcblx0XHRcdHRhcmdldENvbnRyb2xJbnN0YW5jZS5kYXRhKFwic2FwLXVpLWN1c3RvbS1zZXR0aW5nc1wiLCBjdXN0b21TZXR0aW5ncyk7XG5cdFx0fVxuXG5cdFx0aWYgKGJpbmRpbmdEZWYpIHtcblx0XHRcdGlmICh0eXBlb2YgYmluZGluZ0RlZiA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRjb25zdCBiaW5kaW5nSW5mbyA9IGJpbmRpbmdQYXJzZXIoYmluZGluZ0RlZik7XG5cdFx0XHRcdGlmIChiaW5kaW5nSW5mbykge1xuXHRcdFx0XHRcdHRhcmdldENvbnRyb2xJbnN0YW5jZS5iaW5kRWxlbWVudCh7XG5cdFx0XHRcdFx0XHRtb2RlbDogYmluZGluZ0luZm8ubW9kZWwgPz8gdW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0cGF0aDogYmluZGluZ0luZm8ucGF0aCxcblx0XHRcdFx0XHRcdHBhcmFtZXRlcnM6IGJpbmRpbmdJbmZvLnBhcmFtZXRlcnMgPz8gdW5kZWZpbmVkXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGFyZ2V0Q29udHJvbEluc3RhbmNlLmJpbmRFbGVtZW50KGJpbmRpbmdEZWYpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBXZSBjb25zaWRlciBpdCdzIGFuIG9iamVjdFxuXHRcdFx0XHRPYmplY3Qua2V5cyhiaW5kaW5nRGVmKS5mb3JFYWNoKChiaW5kaW5nRGVmS2V5KSA9PiB7XG5cdFx0XHRcdFx0dGFyZ2V0Q29udHJvbEluc3RhbmNlLmJpbmRFbGVtZW50KHsgbW9kZWw6IGJpbmRpbmdEZWZLZXksIHBhdGg6IGJpbmRpbmdEZWZbYmluZGluZ0RlZktleV0gfSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRmb3IgKGNvbnN0IGxhdGVQcm9wZXJ0aWVzS2V5IGluIGxhdGVQcm9wZXJ0aWVzKSB7XG5cdFx0XHRsYXRlUHJvcGVydGllc1tsYXRlUHJvcGVydGllc0tleV1cblx0XHRcdFx0LnRoZW4oKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRhcmdldENvbnRyb2xJbnN0YW5jZS5zZXRQcm9wZXJ0eShsYXRlUHJvcGVydGllc0tleSwgdmFsdWUpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goKGVycm9yKSA9PiB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGBDb3VsZG4ndCBzZXQgcHJvcGVydHkgJHtsYXRlUHJvcGVydGllc0tleX0gb24gJHtDb250cm9sVHlwZS5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKX1gLCBlcnJvciwgXCJqc3hDb250cm9sXCIpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdFx0dGFyZ2V0Q29udHJvbCA9IHRhcmdldENvbnRyb2xJbnN0YW5jZTtcblx0fSBlbHNlIGlmICh0eXBlb2YgQ29udHJvbFR5cGUgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdGNvbnN0IGNvbnRyb2xUeXBlRm4gPSBDb250cm9sVHlwZTtcblx0XHR0YXJnZXRDb250cm9sID0gY29udHJvbFR5cGVGbihzZXR0aW5ncyBhcyAkQ29udHJvbFNldHRpbmdzKTtcblx0fSBlbHNlIHtcblx0XHR0YXJnZXRDb250cm9sID0gbmV3IFRleHQoeyB0ZXh0OiBcIk1pc3NpbmcgY29tcG9uZW50IFwiICsgKENvbnRyb2xUeXBlIGFzIHN0cmluZykgfSk7XG5cdH1cblxuXHRyZXR1cm4gdGFyZ2V0Q29udHJvbDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGpzeENvbnRyb2w7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7RUF1QkEsTUFBTUEsV0FBVyxHQUFHLGFBQWE7RUFDakMsTUFBTUMsWUFBWSxHQUFHLGNBQWM7RUFDbkMsTUFBTUMsYUFBYSxHQUFHLGVBQWU7RUFDckMsTUFBTUMsbUJBQW1CLEdBQUcsU0FBQUEsQ0FDM0JDLG1CQUE0RCxFQUM1REMsZUFBdUIsRUFDdkJDLEtBQTBDLEVBQ25DO0lBQ1AsSUFBSUEsS0FBSyxLQUFLLElBQUksSUFBSUEsS0FBSyxLQUFLQyxTQUFTLElBQUksT0FBT0QsS0FBSyxLQUFL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
@@ -12,6 +12,7 @@ import type { ControlProperties, JSXContext, NonControlProperties, Ref } from "s
12
12
  import type BuildingBlockTemplatingBase from "sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase";
13
13
  import type RuntimeBuildingBlock from "sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlock";
14
14
  import Text from "sap/m/Text";
15
+ import BindingParser from "sap/ui/base/BindingParser";
15
16
  import DataType from "sap/ui/base/DataType";
16
17
  import { bindingParser } from "sap/ui/base/ManagedObject";
17
18
  import type ManagedObjectMetadata from "sap/ui/base/ManagedObjectMetadata";
@@ -66,9 +67,17 @@ function processAggregations(metadata: ManagedObjectMetadata, mSettings: Record<
66
67
  if (aggregationChildren[aggregationName] !== undefined) {
67
68
  if (mSettings.hasOwnProperty(aggregationName)) {
68
69
  if (typeof mSettings[aggregationName] === "string") {
69
- mSettings[aggregationName] = {
70
- path: mSettings[aggregationName]
71
- };
70
+ const resultingParse = BindingParser.complexParser(mSettings[aggregationName]);
71
+ if (resultingParse) {
72
+ mSettings[aggregationName] = {
73
+ path: resultingParse.path,
74
+ model: resultingParse.model
75
+ };
76
+ } else {
77
+ mSettings[aggregationName] = {
78
+ path: mSettings[aggregationName]
79
+ };
80
+ }
72
81
  }
73
82
  if (typeof aggregationChildren[aggregationName] === "function") {
74
83
  (mSettings[aggregationName] as { factory: Function }).factory = aggregationChildren[
@@ -84,6 +93,92 @@ function processAggregations(metadata: ManagedObjectMetadata, mSettings: Record<
84
93
  });
85
94
  }
86
95
 
96
+ /**
97
+ * Processes a binding toolkit expression property for function processProperties
98
+ *
99
+ * If the property is a constant, it compiles it as a constant. If the property is an aggregation,
100
+ * it compiles the expression as an object. Otherwise, it compiles the expression normally.
101
+ * @param settings The settings of the control
102
+ * @param settingsKey The key of the setting being processed
103
+ * @param bindingToolkitExpression The binding toolkit expression to process
104
+ * @param allProperties All properties of the control
105
+ */
106
+ function processBindingToolkitExpression(
107
+ settings: Record<string, unknown>,
108
+ settingsKey: keyof typeof settings,
109
+ bindingToolkitExpression: BindingToolkitExpression<unknown>,
110
+ allProperties: Record<string, unknown>
111
+ ): void {
112
+ if (isConstant(bindingToolkitExpression)) {
113
+ settings[settingsKey] = compileConstant(bindingToolkitExpression, false, true, true);
114
+ } else if (!Object.hasOwnProperty.call(allProperties, settingsKey)) {
115
+ // Aggregation case - we need to compile the expression but as an object
116
+ if (isPathInModelExpression(bindingToolkitExpression)) {
117
+ settings[settingsKey] = { path: bindingToolkitExpression.path, model: bindingToolkitExpression.modelName };
118
+ }
119
+ } else {
120
+ settings[settingsKey] = compileExpression(bindingToolkitExpression);
121
+ }
122
+ }
123
+
124
+ /**
125
+ * Processes a string property for function processProperties
126
+ *
127
+ * If the property is not a binding expression and does not match the expected format,
128
+ * it parses the value to provide the expected format. If the property is an event handler,
129
+ * it logs an error.
130
+ * @param settings The settings of the control
131
+ * @param settingsKey The key of the setting being processed
132
+ * @param value The string value to process
133
+ * @param allEvents All events of the control
134
+ * @param allProperties All properties of the control
135
+ * @param metadata Metadata of the control
136
+ */
137
+ function processStringProperty(
138
+ settings: Record<string, unknown>,
139
+ settingsKey: keyof typeof settings,
140
+ value: string,
141
+ allEvents: Record<string, unknown>,
142
+ allProperties: Record<string, unknown>,
143
+ metadata: ManagedObjectMetadata
144
+ ): void {
145
+ if (!value.startsWith("{")) {
146
+ if (Object.hasOwnProperty.call(allEvents, settingsKey)) {
147
+ Log.error(`Event handlers cannot be set as string in JSX, ${settingsKey} in ${metadata.getName()}`);
148
+ }
149
+ const propertyType = (allProperties[settingsKey] as { getType?: Function })?.getType?.();
150
+ if (propertyType && propertyType instanceof DataType && ["boolean", "int", "float"].includes(propertyType.getName())) {
151
+ settings[settingsKey] = propertyType.parseValue(value);
152
+ }
153
+ } else {
154
+ settings[settingsKey] = value;
155
+ }
156
+ }
157
+
158
+ /**
159
+ * Processes an object property for function processProperties.
160
+ *
161
+ * If the property is a promise, it adds it to the late properties map. If the property is a binding info holder,
162
+ * it sets the binding info to the settings.
163
+ * @param settings The settings of the control
164
+ * @param settingsKey The key of the setting being processed
165
+ * @param value The object value to process
166
+ * @param lateProperties A map of the control's late properties
167
+ */
168
+ function processObjectProperty(
169
+ settings: Record<string, unknown>,
170
+ settingsKey: keyof typeof settings,
171
+ value: unknown,
172
+ lateProperties: Record<string, Promise<unknown>>
173
+ ): void {
174
+ if ((value as Promise<unknown>).then) {
175
+ lateProperties[settingsKey] = value as Promise<unknown>;
176
+ delete settings[settingsKey];
177
+ } else if ((value as BindingInfoHolder<unknown>).__bindingInfo) {
178
+ settings[settingsKey] = (value as BindingInfoHolder<unknown>).__bindingInfo;
179
+ }
180
+ }
181
+
87
182
  /**
88
183
  * Processes the properties.
89
184
  *
@@ -99,34 +194,17 @@ function processProperties(metadata: ManagedObjectMetadata, settings: Record<str
99
194
  const lateProperties: Record<string, Promise<unknown>> = {};
100
195
  const allEvents = metadata.getAllEvents();
101
196
  const allProperties = metadata.getAllProperties();
197
+
102
198
  for (settingsKey in settings) {
103
199
  const value = settings[settingsKey];
104
200
  if (isBindingToolkitExpression(value)) {
105
- const bindingToolkitExpression: BindingToolkitExpression<unknown> = value;
106
- if (isConstant(bindingToolkitExpression)) {
107
- settings[settingsKey] = compileConstant(bindingToolkitExpression, false, true, true);
108
- } else if (!Object.hasOwnProperty.call(allProperties, settingsKey)) {
109
- // Aggregation case - we need to compile the expression but as an object
110
- if (isPathInModelExpression(bindingToolkitExpression)) {
111
- settings[settingsKey] = { path: bindingToolkitExpression.path, model: bindingToolkitExpression.modelName };
112
- }
113
- } else {
114
- settings[settingsKey] = compileExpression(bindingToolkitExpression);
115
- }
116
- } else if (value !== null && typeof value === "object" && (value as Promise<unknown>).then) {
117
- lateProperties[settingsKey] = value as Promise<unknown>;
118
- delete settings[settingsKey];
119
- } else if (typeof value === "string" && !value.startsWith("{")) {
120
- const propertyType = (allProperties[settingsKey] as { getType?: Function })?.getType?.();
121
- if (propertyType && propertyType instanceof DataType && ["boolean", "int", "float"].includes(propertyType.getName())) {
122
- settings[settingsKey] = propertyType.parseValue(value);
123
- }
124
- } else if (typeof value === "object" && (value as BindingInfoHolder<unknown>).__bindingInfo) {
125
- settings[settingsKey] = (value as BindingInfoHolder<unknown>).__bindingInfo;
201
+ processBindingToolkitExpression(settings, settingsKey, value, allProperties);
202
+ } else if (value !== null && typeof value === "object") {
203
+ processObjectProperty(settings, settingsKey, value, lateProperties);
204
+ } else if (typeof value === "string") {
205
+ processStringProperty(settings, settingsKey, value, allEvents, allProperties, metadata);
126
206
  } else if (value === undefined) {
127
- if (Object.hasOwnProperty.call(allEvents, settingsKey)) {
128
- delete settings[settingsKey];
129
- }
207
+ delete settings[settingsKey];
130
208
  }
131
209
  }
132
210
  return lateProperties;
@@ -217,9 +295,14 @@ const jsxControl = function <T extends Element>(
217
295
  if (typeof bindingDef === "string") {
218
296
  const bindingInfo = bindingParser(bindingDef);
219
297
  if (bindingInfo) {
220
- targetControlInstance.bindElement({ model: bindingInfo.model ?? undefined, path: bindingInfo.path });
298
+ targetControlInstance.bindElement({
299
+ model: bindingInfo.model ?? undefined,
300
+ path: bindingInfo.path,
301
+ parameters: bindingInfo.parameters ?? undefined
302
+ });
303
+ } else {
304
+ targetControlInstance.bindElement(bindingDef);
221
305
  }
222
- targetControlInstance.bindElement(bindingDef);
223
306
  } else {
224
307
  // We consider it's an object
225
308
  Object.keys(bindingDef).forEach((bindingDefKey) => {
@@ -22,7 +22,7 @@ sap.ui.define(["sap/ui/core/Lib"], function (Library) {
22
22
  controls: [],
23
23
  elements: [],
24
24
  // eslint-disable-next-line no-template-curly-in-string
25
- version: "1.132.0",
25
+ version: "1.133.0",
26
26
  noLibraryCSS: true
27
27
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
28
28
  });