@sapui5/sap.fe.macros 1.105.0 → 1.105.2

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sapui5/sap.fe.macros",
3
- "version": "1.105.0",
3
+ "version": "1.105.2",
4
4
  "description": "SAPUI5 Library sap.fe.macros",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "author": "SAP SE (https://www.sap.com)",
@@ -6,7 +6,7 @@
6
6
  <copyright>SAP UI development toolkit for HTML5 (SAPUI5)
7
7
  (c) Copyright 2009-2021 SAP SE. All rights reserved
8
8
  </copyright>
9
- <version>1.105.0</version>
9
+ <version>1.105.2</version>
10
10
 
11
11
  <documentation>UI5 library: sap.fe.macros</documentation>
12
12
 
@@ -406,6 +406,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
406
406
  };
407
407
  oInnerChart.addEventDelegate(oInnerChartDelegate);
408
408
  }
409
+
410
+ oMDCChart.fireEvent("bindingUpdated");
409
411
  };
410
412
 
411
413
  ChartDelegate._setChart = function (oMDCChart, oInnerChart) {
@@ -513,4 +515,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
513
515
 
514
516
  return ChartDelegate;
515
517
  }, false);
516
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDaGFydEl0ZW1Sb2xlVHlwZSIsIk1EQ0xpYiIsIkNoYXJ0RGVsZWdhdGUiLCJPYmplY3QiLCJhc3NpZ24iLCJCYXNlQ2hhcnREZWxlZ2F0ZSIsIl9zZXRDaGFydE5vRGF0YVRleHQiLCJvQ2hhcnQiLCJvQmluZGluZ0luZm8iLCJzTm9EYXRhS2V5Iiwib0NoYXJ0RmlsdGVySW5mbyIsIkNoYXJ0VXRpbHMiLCJnZXRBbGxGaWx0ZXJJbmZvIiwic3VmZml4UmVzb3VyY2VLZXkiLCJwYXRoIiwic3RhcnRzV2l0aCIsInN1YnN0ciIsIl9nZXROb0RhdGFUZXh0V2l0aEZpbHRlcnMiLCJkYXRhIiwiZ2V0RmlsdGVyIiwic2VhcmNoIiwiZmlsdGVycyIsImxlbmd0aCIsImdldE1vZGVsIiwiZ2V0UmVzb3VyY2VCdW5kbGUiLCJ0aGVuIiwib1Jlc291cmNlQnVuZGxlIiwic2V0Tm9EYXRhVGV4dCIsIkNvbW1vblV0aWxzIiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJjYXRjaCIsImVycm9yIiwiTG9nIiwiX2hhbmRsZVByb3BlcnR5Iiwib01EQ0NoYXJ0IiwibUVudGl0eVNldEFubm90YXRpb25zIiwibUtub3duQWdncmVnYXRhYmxlUHJvcHMiLCJtQ3VzdG9tQWdncmVnYXRlcyIsImFQcm9wZXJ0aWVzIiwic0NyaXRpY2FsaXR5Iiwib0FwcGx5U3VwcG9ydGVkIiwiQ29tbW9uSGVscGVyIiwicGFyc2VDdXN0b21EYXRhIiwib1NvcnRSZXN0cmljdGlvbnMiLCJvU29ydFJlc3RyaWN0aW9uc0luZm8iLCJPRGF0YU1ldGFNb2RlbFV0aWwiLCJnZXRTb3J0UmVzdHJpY3Rpb25zSW5mbyIsIm9GaWx0ZXJSZXN0cmljdGlvbnMiLCJvRmlsdGVyUmVzdHJpY3Rpb25zSW5mbyIsImdldEZpbHRlclJlc3RyaWN0aW9uc0luZm8iLCJvT2JqIiwiZ2V0T2JqZWN0IiwiZ2V0UGF0aCIsInNLZXkiLCJvTWV0YU1vZGVsIiwiJGtpbmQiLCIkaXNDb2xsZWN0aW9uIiwib1Byb3BlcnR5QW5ub3RhdGlvbnMiLCJzUGF0aCIsImdldE1ldGFDb250ZXh0IiwiYUdyb3VwYWJsZVByb3BlcnRpZXMiLCJHcm91cGFibGVQcm9wZXJ0aWVzIiwiYUFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMiLCJBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzIiwiYkdyb3VwYWJsZSIsImJBZ2dyZWdhdGFibGUiLCJpIiwiJFByb3BlcnR5UGF0aCIsImoiLCJQcm9wZXJ0eSIsImFBZ2dyZWdhdGVQcm9wZXJ0aWVzIiwiX2NyZWF0ZVByb3BlcnR5SW5mb3NGb3JBZ2dyZWdhdGFibGUiLCJmb3JFYWNoIiwib0FnZ3JlZ2F0ZVByb3BlcnR5IiwicHVzaCIsInNOYW1lIiwic1RleHRQcm9wZXJ0eSIsIiRQYXRoIiwiYklzTmF2aWdhdGlvblRleHQiLCJpbmRleE9mIiwibmFtZSIsInByb3BlcnR5UGF0aCIsImxhYmVsIiwic29ydGFibGUiLCJfZ2V0U29ydGFibGUiLCJmaWx0ZXJhYmxlIiwiZ3JvdXBhYmxlIiwiYWdncmVnYXRhYmxlIiwibWF4Q29uZGl0aW9ucyIsImlzTXVsdGlWYWx1ZUZpbHRlckV4cHJlc3Npb24iLCJwcm9wZXJ0eUluZm8iLCJzb3J0S2V5Iiwicm9sZSIsImNhdGVnb3J5IiwiY3JpdGljYWxpdHkiLCJ0ZXh0UHJvcGVydHkiLCJ0ZXh0Rm9ybWF0dGVyIiwiX2Zvcm1hdFRleHQiLCJvVmFsdWUxIiwib1ZhbHVlMiIsIm9UZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uIiwiJEVudW1NZW1iZXIiLCJ1cGRhdGVCaW5kaW5nSW5mbyIsIm9GaWx0ZXIiLCJzYXAiLCJ1aSIsImdldENvcmUiLCJieUlkIiwibUNvbmRpdGlvbnMiLCJnZXRDb25kaXRpb25zIiwic29ydGVyIiwiZ2V0U29ydGVycyIsIm9Jbm5lckNoYXJ0IiwiZ2V0Q29udHJvbERlbGVnYXRlIiwiZ2V0SW5uZXJDaGFydCIsIm9GaWx0ZXJJbmZvIiwiZ2V0Q2hhcnRTZWxlY3Rpb25zRXhpc3QiLCJnZXRGaWx0ZXJCYXJGaWx0ZXJJbmZvIiwic1BhcmFtZXRlclBhdGgiLCJEZWxlZ2F0ZVV0aWwiLCJnZXRQYXJhbWV0ZXJzSW5mbyIsIm9JbmZvIiwiRmlsdGVyVXRpbHMiLCJnZXRGaWx0ZXJJbmZvIiwiZW5hYmxlU2VhcmNoIiwicGFyYW1ldGVycyIsIiRzZWFyY2giLCJub3JtYWxpemVTZWFyY2hUZXJtIiwiX2NoZWNrQW5kQWRkRHJhZnRGaWx0ZXIiLCJmZXRjaFByb3BlcnRpZXMiLCJvTW9kZWwiLCJfZ2V0TW9kZWwiLCJwQ3JlYXRlUHJvcGVydHlJbmZvcyIsIlByb21pc2UiLCJyZXNvbHZlIiwiYXR0YWNoTW9kZWxDb250ZXh0Q2hhbmdlIiwicmVzb2x2ZXIiLCJvbk1vZGVsQ29udGV4dENoYW5nZSIsIm9SZXRyaWV2ZWRNb2RlbCIsIl9jcmVhdGVQcm9wZXJ0eUluZm9zIiwib0V2ZW50Iiwib0RhdGEiLCJnZXRTb3VyY2UiLCJkZXRhY2hNb2RlbENvbnRleHRDaGFuZ2UiLCJzRW50aXR5U2V0UGF0aCIsImdldE1ldGFNb2RlbCIsImFsbCIsInJlcXVlc3RPYmplY3QiLCJhUmVzdWx0cyIsIm9FbnRpdHlUeXBlIiwic0Fubm8iLCJhUHJvcGVydHlQcm9taXNlIiwic0Fubm9LZXkiLCJyZXBsYWNlIiwiYUFubm8iLCJzcGxpdCIsImFEaW1lbnNpb25zIiwiYU1lYXN1cmVzIiwia2V5cyIsImFDaGFydEl0ZW1zIiwiZ2V0SXRlbXMiLCJrZXkiLCJpc0EiLCJnZXRLZXkiLCJmaWx0ZXIiLCJ2YWwiLCJtVHlwZUFnZ3JlZ2F0YWJsZVByb3BzIiwic0FnZ3JlZ2F0YWJsZSIsInNQcm9wS2V5IiwiYWdncmVnYXRpb25NZXRob2QiLCJNZXRhTW9kZWxVdGlsIiwiZmV0Y2hDcml0aWNhbGl0eSIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiYmluZCIsImF4aXMxIiwiZGF0YXBvaW50Iiwic0N1c3RvbSIsIm9JdGVtIiwibWVyZ2UiLCJyZWJpbmQiLCJzU2VhcmNoIiwib0NoYXJ0QmluZGluZyIsImdldEJpbmRpbmciLCJzdXNwZW5kIiwic2V0QWdncmVnYXRpb24iLCJvSW5uZXJDaGFydERlbGVnYXRlIiwib25CZWZvcmVSZW5kZXJpbmciLCJyZXN1bWUiLCJyZW1vdmVFdmVudERlbGVnYXRlIiwiYWRkRXZlbnREZWxlZ2F0ZSIsIl9zZXRDaGFydCIsIm9DaGFydEFQSSIsImdldFBhcmVudCIsInNldFZpelByb3BlcnRpZXMiLCJkZXRhY2hTZWxlY3REYXRhIiwiaGFuZGxlU2VsZWN0aW9uQ2hhbmdlIiwiZGV0YWNoRGVzZWxlY3REYXRhIiwiZGV0YWNoRHJpbGxlZFVwIiwiYXR0YWNoU2VsZWN0RGF0YSIsImF0dGFjaERlc2VsZWN0RGF0YSIsImF0dGFjaERyaWxsZWRVcCIsInNldFNlbGVjdGlvbk1vZGUiLCJnZXRQYXlsb2FkIiwic2VsZWN0aW9uTW9kZSIsInRvVXBwZXJDYXNlIiwiX2dldEJpbmRpbmdJbmZvIiwiX2dldEJpbmRpbmdJbmZvRnJvbVN0YXRlIiwib01ldGFkYXRhSW5mbyIsImdldERlbGVnYXRlIiwicGF5bG9hZCIsInNUYXJnZXRDb2xsZWN0aW9uUGF0aCIsImNvbnRleHRQYXRoIiwib1BhcmFtcyIsImVudGl0eVNldCIsInVzZUJhdGNoUmVxdWVzdHMiLCJwcm92aWRlR3JhbmRUb3RhbHMiLCJwcm92aWRlVG90YWxSZXN1bHRTaXplIiwibm9QYWdpbmciLCJldmVudHMiLCJkYXRhUmVxdWVzdGVkIiwib25JbnRlcm5hbERhdGFSZXF1ZXN0ZWQiLCJyZW1vdmVJdGVtRnJvbUlubmVyQ2hhcnQiLCJvTURDQ2hhcnRJdGVtIiwiY2FsbCIsImdldFR5cGUiLCJfZ2V0Q2hhcnQiLCJmaXJlRGVzZWxlY3REYXRhIiwiYklzVHJhbnNBZ2dyZWdhdGUiLCJGaWx0ZXIiLCJGaWx0ZXJPcGVyYXRvciIsIkVRIiwiZ2V0SW50ZXJuYWxDaGFydE5hbWVGcm9tUHJvcGVydHlOYW1lQW5kS2luZCIsImtpbmQiLCJnZXRQcm9wZXJ0eUZyb21OYW1lQW5kS2luZCIsIm1kY0NoYXJ0IiwiZ2V0UHJvcGVydHlIZWxwZXIiLCJnZXRQcm9wZXJ0eSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQ2hhcnREZWxlZ2F0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgbWVyZ2UgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBDaGFydFV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NoYXJ0L0NoYXJ0VXRpbHNcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgRmlsdGVyVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyL0ZpbHRlclV0aWxzXCI7XG5pbXBvcnQgTWV0YU1vZGVsVXRpbCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9PRGF0YU1ldGFNb2RlbFV0aWxcIjtcbmltcG9ydCB0eXBlIENoYXJ0IGZyb20gXCJzYXAvdWkvbWRjL0NoYXJ0XCI7XG5pbXBvcnQgTURDTGliIGZyb20gXCJzYXAvdWkvbWRjL2xpYnJhcnlcIjtcbmltcG9ydCBPRGF0YU1ldGFNb2RlbFV0aWwgZnJvbSBcInNhcC91aS9tZGMvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxVdGlsXCI7XG5pbXBvcnQgRGVsZWdhdGVVdGlsIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L3V0aWwvRGVsZWdhdGVVdGlsXCI7XG5pbXBvcnQgQmFzZUNoYXJ0RGVsZWdhdGUgZnJvbSBcInNhcC91aS9tZGMvb2RhdGEvdjQvdml6Q2hhcnQvQ2hhcnREZWxlZ2F0ZVwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IEZpbHRlck9wZXJhdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyT3BlcmF0b3JcIjtcblxuY29uc3QgQ2hhcnRJdGVtUm9sZVR5cGUgPSAoTURDTGliIGFzIGFueSkuQ2hhcnRJdGVtUm9sZVR5cGU7XG4vLyAvKipcbi8vICAqIEhlbHBlciBjbGFzcyBmb3Igc2FwLnVpLm1kYy5DaGFydC5cbi8vICAqIDxoMz48Yj5Ob3RlOjwvYj48L2gzPlxuLy8gICogVGhlIGNsYXNzIGlzIGV4cGVyaW1lbnRhbCBhbmQgdGhlIEFQSS9iZWhhdmlvdXIgaXMgbm90IGZpbmFsaXNlZFxuLy8gICogYW5kIGhlbmNlIHRoaXMgc2hvdWxkIG5vdCBiZSB1c2VkIGZvciBwcm9kdWN0aXZlIHVzYWdlLlxuLy8gICogRXNwZWNpYWxseSB0aGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGZvciB0aGUgRkUgc2NlbmFyaW8sXG4vLyAgKiBoZXJlIHdlIHNoYWxsIHVzZSBzYXAuZmUubWFjcm9zLkNoYXJ0RGVsZWdhdGUgdGhhdCBpcyBlc3BlY2lhbGx5IHRhaWxvcmVkIGZvciBWNFxuLy8gICogbWV0YSBtb2RlbFxuLy8gICpcbi8vICAqIEBhdXRob3IgU0FQIFNFXG4vLyAgKiBAcHJpdmF0ZVxuLy8gICogQGV4cGVyaW1lbnRhbFxuLy8gICogQHNpbmNlIDEuNjJcbi8vICAqIEBhbGlhcyBzYXAuZmUubWFjcm9zLkNoYXJ0RGVsZWdhdGVcbi8vICAqL1xuY29uc3QgQ2hhcnREZWxlZ2F0ZSA9IE9iamVjdC5hc3NpZ24oe30sIEJhc2VDaGFydERlbGVnYXRlKTtcblxuQ2hhcnREZWxlZ2F0ZS5fc2V0Q2hhcnROb0RhdGFUZXh0ID0gZnVuY3Rpb24gKG9DaGFydDogYW55LCBvQmluZGluZ0luZm86IGFueSkge1xuXHRsZXQgc05vRGF0YUtleSA9IFwiXCI7XG5cdGNvbnN0IG9DaGFydEZpbHRlckluZm8gPSBDaGFydFV0aWxzLmdldEFsbEZpbHRlckluZm8ob0NoYXJ0KSxcblx0XHRzdWZmaXhSZXNvdXJjZUtleSA9IG9CaW5kaW5nSW5mby5wYXRoLnN0YXJ0c1dpdGgoXCIvXCIpID8gb0JpbmRpbmdJbmZvLnBhdGguc3Vic3RyKDEpIDogb0JpbmRpbmdJbmZvLnBhdGg7XG5cdGNvbnN0IF9nZXROb0RhdGFUZXh0V2l0aEZpbHRlcnMgPSBmdW5jdGlvbiAoKSB7XG5cdFx0aWYgKG9DaGFydC5kYXRhKFwibXVsdGlWaWV3c1wiKSkge1xuXHRcdFx0cmV0dXJuIFwiTV9UQUJMRV9BTkRfQ0hBUlRfTk9fREFUQV9URVhUX01VTFRJX1ZJRVdcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFwiVF9UQUJMRV9BTkRfQ0hBUlRfTk9fREFUQV9URVhUX1dJVEhfRklMVEVSXCI7XG5cdFx0fVxuXHR9O1xuXHRpZiAob0NoYXJ0LmdldEZpbHRlcigpKSB7XG5cdFx0aWYgKG9DaGFydEZpbHRlckluZm8uc2VhcmNoIHx8IChvQ2hhcnRGaWx0ZXJJbmZvLmZpbHRlcnMgJiYgb0NoYXJ0RmlsdGVySW5mby5maWx0ZXJzLmxlbmd0aCkpIHtcblx0XHRcdHNOb0RhdGFLZXkgPSBfZ2V0Tm9EYXRhVGV4dFdpdGhGaWx0ZXJzKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNOb0RhdGFLZXkgPSBcIlRfVEFCTEVfQU5EX0NIQVJUX05PX0RBVEFfVEVYVFwiO1xuXHRcdH1cblx0fSBlbHNlIGlmIChvQ2hhcnRGaWx0ZXJJbmZvLnNlYXJjaCB8fCAob0NoYXJ0RmlsdGVySW5mby5maWx0ZXJzICYmIG9DaGFydEZpbHRlckluZm8uZmlsdGVycy5sZW5ndGgpKSB7XG5cdFx0c05vRGF0YUtleSA9IF9nZXROb0RhdGFUZXh0V2l0aEZpbHRlcnMoKTtcblx0fSBlbHNlIHtcblx0XHRzTm9EYXRhS2V5ID0gXCJNX1RBQkxFX0FORF9DSEFSVF9OT19GSUxURVJTX05PX0RBVEFfVEVYVFwiO1xuXHR9XG5cdHJldHVybiAob0NoYXJ0LmdldE1vZGVsKFwic2FwLmZlLmkxOG5cIikuZ2V0UmVzb3VyY2VCdW5kbGUoKSBhcyBQcm9taXNlPFJlc291cmNlQnVuZGxlPilcblx0XHQudGhlbihmdW5jdGlvbiAob1Jlc291cmNlQnVuZGxlKSB7XG5cdFx0XHRvQ2hhcnQuc2V0Tm9EYXRhVGV4dChDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChzTm9EYXRhS2V5LCBvUmVzb3VyY2VCdW5kbGUsIG51bGwsIHN1ZmZpeFJlc291cmNlS2V5KSk7XG5cdFx0fSlcblx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG5cdFx0XHRMb2cuZXJyb3IoZXJyb3IpO1xuXHRcdH0pO1xufTtcblxuQ2hhcnREZWxlZ2F0ZS5faGFuZGxlUHJvcGVydHkgPSBmdW5jdGlvbiAoXG5cdG9NRENDaGFydDogQ2hhcnQsXG5cdG1FbnRpdHlTZXRBbm5vdGF0aW9uczogYW55LFxuXHRtS25vd25BZ2dyZWdhdGFibGVQcm9wczogYW55LFxuXHRtQ3VzdG9tQWdncmVnYXRlczogYW55LFxuXHRhUHJvcGVydGllczogYW55W10sXG5cdHNDcml0aWNhbGl0eTogc3RyaW5nXG4pIHtcblx0Y29uc3Qgb0FwcGx5U3VwcG9ydGVkID0gQ29tbW9uSGVscGVyLnBhcnNlQ3VzdG9tRGF0YShvTURDQ2hhcnQuZGF0YShcImFwcGx5U3VwcG9ydGVkXCIpKTtcblx0Y29uc3Qgb1NvcnRSZXN0cmljdGlvbnMgPSBtRW50aXR5U2V0QW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Tb3J0UmVzdHJpY3Rpb25zXCJdIHx8IHt9O1xuXHRjb25zdCBvU29ydFJlc3RyaWN0aW9uc0luZm8gPSBPRGF0YU1ldGFNb2RlbFV0aWwuZ2V0U29ydFJlc3RyaWN0aW9uc0luZm8ob1NvcnRSZXN0cmljdGlvbnMpO1xuXHRjb25zdCBvRmlsdGVyUmVzdHJpY3Rpb25zID0gbUVudGl0eVNldEFubm90YXRpb25zW1wiQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRmlsdGVyUmVzdHJpY3Rpb25zXCJdO1xuXHRjb25zdCBvRmlsdGVyUmVzdHJpY3Rpb25zSW5mbyA9IE9EYXRhTWV0YU1vZGVsVXRpbC5nZXRGaWx0ZXJSZXN0cmljdGlvbnNJbmZvKG9GaWx0ZXJSZXN0cmljdGlvbnMpO1xuXHRjb25zdCBvT2JqID0gdGhpcy5nZXRNb2RlbCgpLmdldE9iamVjdCh0aGlzLmdldFBhdGgoKSk7XG5cdGNvbnN0IHNLZXkgPSB0aGlzLmdldE1vZGVsKCkuZ2V0T2JqZWN0KGAke3RoaXMuZ2V0UGF0aCgpfUBzYXB1aS5uYW1lYCk7XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSB0aGlzLmdldE1vZGVsKCk7XG5cdGlmIChvT2JqICYmIG9PYmouJGtpbmQgPT09IFwiUHJvcGVydHlcIikge1xuXHRcdC8vIGlnbm9yZSAoYXMgZm9yIG5vdykgYWxsIGNvbXBsZXggcHJvcGVydGllc1xuXHRcdC8vIG5vdCBjbGVhciBpZiB0aGV5IG1pZ2h0IGJlIG5lc3RpbmcgKGNvbXBsZXggaW4gY29tcGxleClcblx0XHQvLyBub3QgY2xlYXIgaG93IHRoZXkgYXJlIHJlcHJlc2VudGVkIGluIG5vbi1maWx0ZXJhYmxlIGFubm90YXRpb25cblx0XHQvLyBldGMuXG5cdFx0aWYgKG9PYmouJGlzQ29sbGVjdGlvbikge1xuXHRcdFx0Ly9Mb2cud2FybmluZyhcIkNvbXBsZXggcHJvcGVydHkgd2l0aCB0eXBlIFwiICsgb09iai4kVHlwZSArIFwiIGhhcyBiZWVuIGlnbm9yZWRcIik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb1Byb3BlcnR5QW5ub3RhdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHt0aGlzLmdldFBhdGgoKX1AYCk7XG5cdFx0Y29uc3Qgc1BhdGggPSBvTWV0YU1vZGVsLmdldE9iamVjdChcIkBzYXB1aS5uYW1lXCIsIG9NZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQodGhpcy5nZXRQYXRoKCkpKTtcblxuXHRcdGNvbnN0IGFHcm91cGFibGVQcm9wZXJ0aWVzID0gb0FwcGx5U3VwcG9ydGVkICYmIG9BcHBseVN1cHBvcnRlZC5Hcm91cGFibGVQcm9wZXJ0aWVzO1xuXHRcdGNvbnN0IGFBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzID0gb0FwcGx5U3VwcG9ydGVkICYmIG9BcHBseVN1cHBvcnRlZC5BZ2dyZWdhdGFibGVQcm9wZXJ0aWVzO1xuXHRcdGxldCBiR3JvdXBhYmxlID0gZmFsc2UsXG5cdFx0XHRiQWdncmVnYXRhYmxlID0gZmFsc2U7XG5cdFx0aWYgKGFHcm91cGFibGVQcm9wZXJ0aWVzICYmIGFHcm91cGFibGVQcm9wZXJ0aWVzLmxlbmd0aCkge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhR3JvdXBhYmxlUHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAoYUdyb3VwYWJsZVByb3BlcnRpZXNbaV0uJFByb3BlcnR5UGF0aCA9PT0gc1BhdGgpIHtcblx0XHRcdFx0XHRiR3JvdXBhYmxlID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoYUFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMgJiYgYUFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMubGVuZ3RoKSB7XG5cdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IGFBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdGlmIChhQWdncmVnYXRhYmxlUHJvcGVydGllc1tqXS5Qcm9wZXJ0eS4kUHJvcGVydHlQYXRoID09PSBzUGF0aCkge1xuXHRcdFx0XHRcdGJBZ2dyZWdhdGFibGUgPSB0cnVlO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICghYUdyb3VwYWJsZVByb3BlcnRpZXMgfHwgKGFHcm91cGFibGVQcm9wZXJ0aWVzICYmICFhR3JvdXBhYmxlUHJvcGVydGllcy5sZW5ndGgpKSB7XG5cdFx0XHRiR3JvdXBhYmxlID0gb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkdyb3VwYWJsZVwiXTtcblx0XHR9XG5cdFx0aWYgKCFhQWdncmVnYXRhYmxlUHJvcGVydGllcyB8fCAoYUFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMgJiYgIWFBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzLmxlbmd0aCkpIHtcblx0XHRcdGJBZ2dyZWdhdGFibGUgPSBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuQWdncmVnYXRhYmxlXCJdO1xuXHRcdH1cblxuXHRcdC8vUmlnaHQgbm93OiBza2lwIHRoZW0sIHNpbmNlIHdlIGNhbid0IGNyZWF0ZSBhIGNoYXJ0IGZyb20gaXRcblx0XHRpZiAoIWJHcm91cGFibGUgJiYgIWJBZ2dyZWdhdGFibGUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoYkFnZ3JlZ2F0YWJsZSkge1xuXHRcdFx0Y29uc3QgYUFnZ3JlZ2F0ZVByb3BlcnRpZXMgPSBDaGFydERlbGVnYXRlLl9jcmVhdGVQcm9wZXJ0eUluZm9zRm9yQWdncmVnYXRhYmxlKFxuXHRcdFx0XHRvTURDQ2hhcnQsXG5cdFx0XHRcdHNLZXksXG5cdFx0XHRcdG9Qcm9wZXJ0eUFubm90YXRpb25zLFxuXHRcdFx0XHRvRmlsdGVyUmVzdHJpY3Rpb25zSW5mbyxcblx0XHRcdFx0b1NvcnRSZXN0cmljdGlvbnNJbmZvLFxuXHRcdFx0XHRtS25vd25BZ2dyZWdhdGFibGVQcm9wcyxcblx0XHRcdFx0bUN1c3RvbUFnZ3JlZ2F0ZXNcblx0XHRcdCk7XG5cdFx0XHRhQWdncmVnYXRlUHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uIChvQWdncmVnYXRlUHJvcGVydHk6IGFueSkge1xuXHRcdFx0XHRhUHJvcGVydGllcy5wdXNoKG9BZ2dyZWdhdGVQcm9wZXJ0eSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRpZiAoYkdyb3VwYWJsZSkge1xuXHRcdFx0Y29uc3Qgc05hbWUgPSBzS2V5IHx8IFwiXCIsXG5cdFx0XHRcdHNUZXh0UHJvcGVydHkgPSBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dFwiXVxuXHRcdFx0XHRcdD8gb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRcIl0uJFBhdGhcblx0XHRcdFx0XHQ6IG51bGw7XG5cdFx0XHRsZXQgYklzTmF2aWdhdGlvblRleHQgPSBmYWxzZTtcblx0XHRcdGlmIChzTmFtZSAmJiBzTmFtZS5pbmRleE9mKFwiL1wiKSA+IC0xKSB7XG5cdFx0XHRcdExvZy5lcnJvcihgJGV4cGFuZCBpcyBub3QgeWV0IHN1cHBvcnRlZC4gUHJvcGVydHk6ICR7c05hbWV9IGZyb20gYW4gYXNzb2NpYXRpb24gY2Fubm90IGJlIHVzZWRgKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHNUZXh0UHJvcGVydHkgJiYgc1RleHRQcm9wZXJ0eS5pbmRleE9mKFwiL1wiKSA+IC0xKSB7XG5cdFx0XHRcdExvZy5lcnJvcihgJGV4cGFuZCBpcyBub3QgeWV0IHN1cHBvcnRlZC4gVGV4dCBQcm9wZXJ0eTogJHtzVGV4dFByb3BlcnR5fSBmcm9tIGFuIGFzc29jaWF0aW9uIGNhbm5vdCBiZSB1c2VkYCk7XG5cdFx0XHRcdGJJc05hdmlnYXRpb25UZXh0ID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdGFQcm9wZXJ0aWVzLnB1c2goe1xuXHRcdFx0XHRuYW1lOiBcIl9mZV9ncm91cGFibGVfXCIgKyBzS2V5LFxuXHRcdFx0XHRwcm9wZXJ0eVBhdGg6IHNLZXksXG5cdFx0XHRcdGxhYmVsOiBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTGFiZWxcIl0gfHwgc0tleSxcblx0XHRcdFx0c29ydGFibGU6IENoYXJ0RGVsZWdhdGUuX2dldFNvcnRhYmxlKG9NRENDaGFydCwgb1NvcnRSZXN0cmljdGlvbnNJbmZvW3NLZXldLCBmYWxzZSksXG5cdFx0XHRcdGZpbHRlcmFibGU6IG9GaWx0ZXJSZXN0cmljdGlvbnNJbmZvW3NLZXldID8gb0ZpbHRlclJlc3RyaWN0aW9uc0luZm9bc0tleV0uZmlsdGVyYWJsZSA6IHRydWUsXG5cdFx0XHRcdGdyb3VwYWJsZTogdHJ1ZSxcblx0XHRcdFx0YWdncmVnYXRhYmxlOiBmYWxzZSxcblx0XHRcdFx0bWF4Q29uZGl0aW9uczogT0RhdGFNZXRhTW9kZWxVdGlsLmlzTXVsdGlWYWx1ZUZpbHRlckV4cHJlc3Npb24ob0ZpbHRlclJlc3RyaWN0aW9uc0luZm8ucHJvcGVydHlJbmZvW3NLZXldKSA/IC0xIDogMSxcblx0XHRcdFx0c29ydEtleTogc0tleSxcblx0XHRcdFx0cm9sZTogQ2hhcnRJdGVtUm9sZVR5cGUuY2F0ZWdvcnksIC8vc3RhbmRhcmQsIG5vcm1hbGx5IHRoaXMgc2hvdWxkIGJlIGludGVycHJldGVkIGZyb20gVUkuQ2hhcnQgYW5ub3RhdGlvblxuXHRcdFx0XHRjcml0aWNhbGl0eTogc0NyaXRpY2FsaXR5LCAvL1RvIGJlIGltcGxlbWVudGVkIGJ5IEZFXG5cdFx0XHRcdHRleHRQcm9wZXJ0eTpcblx0XHRcdFx0XHQhYklzTmF2aWdhdGlvblRleHQgJiYgb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRcIl1cblx0XHRcdFx0XHRcdD8gb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRcIl0uJFBhdGhcblx0XHRcdFx0XHRcdDogbnVsbCwgLy9UbyBiZSBpbXBsZW1lbnRlZCBieSBGRVxuXHRcdFx0XHR0ZXh0Rm9ybWF0dGVyOiBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dEBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRcIl1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufTtcblxuQ2hhcnREZWxlZ2F0ZS5fZm9ybWF0VGV4dCA9IGZ1bmN0aW9uIChvVmFsdWUxOiBhbnksIG9WYWx1ZTI6IGFueSkge1xuXHRjb25zdCBvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiA9IHRoaXMudGV4dEZvcm1hdHRlcjtcblx0aWYgKG9UZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uLiRFbnVtTWVtYmVyID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dEZpcnN0XCIpIHtcblx0XHRyZXR1cm4gYCR7b1ZhbHVlMn0gKCR7b1ZhbHVlMX0pYDtcblx0fSBlbHNlIGlmIChvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbi4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRMYXN0XCIpIHtcblx0XHRyZXR1cm4gYCR7b1ZhbHVlMX0gKCR7b1ZhbHVlMn0pYDtcblx0fSBlbHNlIGlmIChvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbi4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRPbmx5XCIpIHtcblx0XHRyZXR1cm4gb1ZhbHVlMjtcblx0fVxuXHRyZXR1cm4gb1ZhbHVlMiA/IG9WYWx1ZTIgOiBvVmFsdWUxO1xufTtcblxuQ2hhcnREZWxlZ2F0ZS51cGRhdGVCaW5kaW5nSW5mbyA9IGZ1bmN0aW9uIChvQ2hhcnQ6IGFueSwgb0JpbmRpbmdJbmZvOiBhbnkpIHtcblx0Q2hhcnREZWxlZ2F0ZS5fc2V0Q2hhcnROb0RhdGFUZXh0KG9DaGFydCwgb0JpbmRpbmdJbmZvKTtcblxuXHRjb25zdCBvRmlsdGVyID0gc2FwLnVpLmdldENvcmUoKS5ieUlkKG9DaGFydC5nZXRGaWx0ZXIoKSkgYXMgYW55O1xuXHRpZiAob0ZpbHRlcikge1xuXHRcdGNvbnN0IG1Db25kaXRpb25zID0gb0ZpbHRlci5nZXRDb25kaXRpb25zKCk7XG5cblx0XHRpZiAobUNvbmRpdGlvbnMpIHtcblx0XHRcdGlmICghb0JpbmRpbmdJbmZvKSB7XG5cdFx0XHRcdG9CaW5kaW5nSW5mbyA9IHt9O1xuXHRcdFx0fVxuXHRcdFx0b0JpbmRpbmdJbmZvLnNvcnRlciA9IHRoaXMuZ2V0U29ydGVycyhvQ2hhcnQpO1xuXHRcdFx0Y29uc3Qgb0lubmVyQ2hhcnQgPSBvQ2hhcnQuZ2V0Q29udHJvbERlbGVnYXRlKCkuZ2V0SW5uZXJDaGFydChvQ2hhcnQpO1xuXHRcdFx0bGV0IG9GaWx0ZXJJbmZvO1xuXHRcdFx0aWYgKG9Jbm5lckNoYXJ0KSB7XG5cdFx0XHRcdC8vIGlmIHRoZSBhY3Rpb24gaXMgYSBkcmlsbCBkb3duLCBjaGFydCBzZWxlY3Rpb25zIG11c3QgYmUgY29uc2lkZXJlZFxuXHRcdFx0XHRpZiAoQ2hhcnRVdGlscy5nZXRDaGFydFNlbGVjdGlvbnNFeGlzdChvQ2hhcnQpKSB7XG5cdFx0XHRcdFx0b0ZpbHRlckluZm8gPSBDaGFydFV0aWxzLmdldEFsbEZpbHRlckluZm8ob0NoYXJ0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0b0ZpbHRlckluZm8gPSBvRmlsdGVySW5mbyA/IG9GaWx0ZXJJbmZvIDogQ2hhcnRVdGlscy5nZXRGaWx0ZXJCYXJGaWx0ZXJJbmZvKG9DaGFydCk7XG5cdFx0XHRpZiAob0ZpbHRlckluZm8pIHtcblx0XHRcdFx0b0JpbmRpbmdJbmZvLmZpbHRlcnMgPSBvRmlsdGVySW5mby5maWx0ZXJzO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBzUGFyYW1ldGVyUGF0aCA9IERlbGVnYXRlVXRpbC5nZXRQYXJhbWV0ZXJzSW5mbyhvRmlsdGVyLCBtQ29uZGl0aW9ucyk7XG5cdFx0XHRpZiAoc1BhcmFtZXRlclBhdGgpIHtcblx0XHRcdFx0b0JpbmRpbmdJbmZvLnBhdGggPSBzUGFyYW1ldGVyUGF0aDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBTZWFyY2hcblx0XHRjb25zdCBvSW5mbyA9IEZpbHRlclV0aWxzLmdldEZpbHRlckluZm8ob0ZpbHRlciwge30pO1xuXHRcdGNvbnN0IG9BcHBseVN1cHBvcnRlZCA9IENvbW1vbkhlbHBlci5wYXJzZUN1c3RvbURhdGEob0NoYXJ0LmRhdGEoXCJhcHBseVN1cHBvcnRlZFwiKSk7XG5cdFx0aWYgKG9BcHBseVN1cHBvcnRlZCAmJiBvQXBwbHlTdXBwb3J0ZWQuZW5hYmxlU2VhcmNoICYmIG9JbmZvLnNlYXJjaCkge1xuXHRcdFx0b0JpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJHNlYXJjaCA9IENvbW1vblV0aWxzLm5vcm1hbGl6ZVNlYXJjaFRlcm0ob0luZm8uc2VhcmNoKTtcblx0XHR9IGVsc2UgaWYgKG9CaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRzZWFyY2gpIHtcblx0XHRcdGRlbGV0ZSBvQmluZGluZ0luZm8ucGFyYW1ldGVycy4kc2VhcmNoO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRpZiAoIW9CaW5kaW5nSW5mbykge1xuXHRcdFx0b0JpbmRpbmdJbmZvID0ge307XG5cdFx0fVxuXHRcdG9CaW5kaW5nSW5mby5zb3J0ZXIgPSB0aGlzLmdldFNvcnRlcnMob0NoYXJ0KTtcblx0fVxuXHRDaGFydERlbGVnYXRlLl9jaGVja0FuZEFkZERyYWZ0RmlsdGVyKG9DaGFydCwgb0JpbmRpbmdJbmZvKTtcbn07XG5cbkNoYXJ0RGVsZWdhdGUuZmV0Y2hQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKG9NRENDaGFydDogQ2hhcnQpIHtcblx0Y29uc3Qgb01vZGVsID0gdGhpcy5fZ2V0TW9kZWwob01EQ0NoYXJ0KTtcblx0bGV0IHBDcmVhdGVQcm9wZXJ0eUluZm9zO1xuXG5cdGlmICghb01vZGVsKSB7XG5cdFx0cENyZWF0ZVByb3BlcnR5SW5mb3MgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZTogYW55KSA9PiB7XG5cdFx0XHRvTURDQ2hhcnQuYXR0YWNoTW9kZWxDb250ZXh0Q2hhbmdlKFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0cmVzb2x2ZXI6IHJlc29sdmVcblx0XHRcdFx0fSxcblx0XHRcdFx0b25Nb2RlbENvbnRleHRDaGFuZ2UgYXMgYW55LFxuXHRcdFx0XHR0aGlzXG5cdFx0XHQpO1xuXHRcdH0pLnRoZW4oKG9SZXRyaWV2ZWRNb2RlbDogYW55KSA9PiB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fY3JlYXRlUHJvcGVydHlJbmZvcyhvTURDQ2hhcnQsIG9SZXRyaWV2ZWRNb2RlbCk7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0cENyZWF0ZVByb3BlcnR5SW5mb3MgPSB0aGlzLl9jcmVhdGVQcm9wZXJ0eUluZm9zKG9NRENDaGFydCwgb01vZGVsKTtcblx0fVxuXG5cdHJldHVybiBwQ3JlYXRlUHJvcGVydHlJbmZvcy50aGVuKGZ1bmN0aW9uIChhUHJvcGVydGllczogYW55KSB7XG5cdFx0aWYgKG9NRENDaGFydC5kYXRhKSB7XG5cdFx0XHRvTURDQ2hhcnQuZGF0YShcIiRtZGNDaGFydFByb3BlcnR5SW5mb1wiLCBhUHJvcGVydGllcyk7XG5cdFx0fVxuXHRcdHJldHVybiBhUHJvcGVydGllcztcblx0fSk7XG59O1xuZnVuY3Rpb24gb25Nb2RlbENvbnRleHRDaGFuZ2UodGhpczogdHlwZW9mIENoYXJ0RGVsZWdhdGUsIG9FdmVudDogYW55LCBvRGF0YTogYW55KSB7XG5cdGNvbnN0IG9NRENDaGFydCA9IG9FdmVudC5nZXRTb3VyY2UoKTtcblx0Y29uc3Qgb01vZGVsID0gdGhpcy5fZ2V0TW9kZWwob01EQ0NoYXJ0KTtcblxuXHRpZiAob01vZGVsKSB7XG5cdFx0b01EQ0NoYXJ0LmRldGFjaE1vZGVsQ29udGV4dENoYW5nZShvbk1vZGVsQ29udGV4dENoYW5nZSk7XG5cdFx0b0RhdGEucmVzb2x2ZXIob01vZGVsKTtcblx0fVxufVxuQ2hhcnREZWxlZ2F0ZS5fY3JlYXRlUHJvcGVydHlJbmZvcyA9IGFzeW5jIGZ1bmN0aW9uIChvTURDQ2hhcnQ6IGFueSwgb01vZGVsOiBhbnkpIHtcblx0Y29uc3Qgc0VudGl0eVNldFBhdGggPSBgLyR7b01EQ0NoYXJ0LmRhdGEoXCJlbnRpdHlTZXRcIil9YDtcblx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKTtcblxuXHRjb25zdCBhUmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKFtvTWV0YU1vZGVsLnJlcXVlc3RPYmplY3QoYCR7c0VudGl0eVNldFBhdGh9L2ApLCBvTWV0YU1vZGVsLnJlcXVlc3RPYmplY3QoYCR7c0VudGl0eVNldFBhdGh9QGApXSk7XG5cdGNvbnN0IGFQcm9wZXJ0aWVzOiBhbnlbXSA9IFtdO1xuXHRjb25zdCBvRW50aXR5VHlwZSA9IGFSZXN1bHRzWzBdLFxuXHRcdG1FbnRpdHlTZXRBbm5vdGF0aW9ucyA9IGFSZXN1bHRzWzFdO1xuXHRjb25zdCBtQ3VzdG9tQWdncmVnYXRlcyA9IENvbW1vbkhlbHBlci5wYXJzZUN1c3RvbURhdGEob01EQ0NoYXJ0LmRhdGEoXCJjdXN0b21BZ2dcIikpO1xuXHRsZXQgc0Fubm87XG5cdGNvbnN0IGFQcm9wZXJ0eVByb21pc2UgPSBbXTtcblx0Zm9yIChjb25zdCBzQW5ub0tleSBpbiBtRW50aXR5U2V0QW5ub3RhdGlvbnMpIHtcblx0XHRpZiAoc0Fubm9LZXkuc3RhcnRzV2l0aChcIkBPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuQ3VzdG9tQWdncmVnYXRlXCIpKSB7XG5cdFx0XHRzQW5ubyA9IHNBbm5vS2V5LnJlcGxhY2UoXCJAT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkN1c3RvbUFnZ3JlZ2F0ZSNcIiwgXCJcIik7XG5cdFx0XHRjb25zdCBhQW5ubyA9IHNBbm5vLnNwbGl0KFwiQFwiKTtcblxuXHRcdFx0aWYgKGFBbm5vLmxlbmd0aCA9PSAyICYmIGFBbm5vWzFdID09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkxhYmVsXCIpIHtcblx0XHRcdFx0bUN1c3RvbUFnZ3JlZ2F0ZXNbYUFubm9bMF1dID0gbUVudGl0eVNldEFubm90YXRpb25zW3NBbm5vS2V5XTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0Y29uc3QgYURpbWVuc2lvbnM6IGFueVtdID0gW10sXG5cdFx0YU1lYXN1cmVzID0gW107XG5cdGlmIChPYmplY3Qua2V5cyhtQ3VzdG9tQWdncmVnYXRlcykubGVuZ3RoID49IDEpIHtcblx0XHRjb25zdCBhQ2hhcnRJdGVtcyA9IG9NRENDaGFydC5nZXRJdGVtcygpO1xuXHRcdGZvciAoY29uc3Qga2V5IGluIGFDaGFydEl0ZW1zKSB7XG5cdFx0XHRpZiAoYUNoYXJ0SXRlbXNba2V5XS5pc0EoXCJzYXAudWkubWRjLmNoYXJ0LkRpbWVuc2lvbkl0ZW1cIikpIHtcblx0XHRcdFx0YURpbWVuc2lvbnMucHVzaChhQ2hhcnRJdGVtc1trZXldLmdldEtleSgpKTtcblx0XHRcdH0gZWxzZSBpZiAoYUNoYXJ0SXRlbXNba2V5XS5pc0EoXCJzYXAudWkubWRjLmNoYXJ0Lk1lYXN1cmVJdGVtXCIpKSB7XG5cdFx0XHRcdGFNZWFzdXJlcy5wdXNoKGFDaGFydEl0ZW1zW2tleV0uZ2V0S2V5KCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoXG5cdFx0XHRhTWVhc3VyZXMuZmlsdGVyKGZ1bmN0aW9uICh2YWw6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4gYURpbWVuc2lvbnMuaW5kZXhPZih2YWwpICE9IC0xO1xuXHRcdFx0fSkubGVuZ3RoID49IDFcblx0XHQpIHtcblx0XHRcdExvZy5lcnJvcihcIkRpbWVuc2lvbiBhbmQgTWVhc3VyZSBoYXMgdGhlIHNhbWVQcm9wZXJ0eSBDb25maWd1cmVkXCIpO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IG1UeXBlQWdncmVnYXRhYmxlUHJvcHMgPSBDb21tb25IZWxwZXIucGFyc2VDdXN0b21EYXRhKG9NRENDaGFydC5kYXRhKFwidHJhbnNBZ2dcIikpO1xuXHRjb25zdCBtS25vd25BZ2dyZWdhdGFibGVQcm9wczogYW55ID0ge307XG5cdGZvciAoY29uc3Qgc0FnZ3JlZ2F0YWJsZSBpbiBtVHlwZUFnZ3JlZ2F0YWJsZVByb3BzKSB7XG5cdFx0Y29uc3Qgc1Byb3BLZXkgPSBtVHlwZUFnZ3JlZ2F0YWJsZVByb3BzW3NBZ2dyZWdhdGFibGVdLnByb3BlcnR5UGF0aDtcblx0XHRtS25vd25BZ2dyZWdhdGFibGVQcm9wc1tzUHJvcEtleV0gPSBtS25vd25BZ2dyZWdhdGFibGVQcm9wc1tzUHJvcEtleV0gfHwge307XG5cdFx0bUtub3duQWdncmVnYXRhYmxlUHJvcHNbc1Byb3BLZXldW21UeXBlQWdncmVnYXRhYmxlUHJvcHNbc0FnZ3JlZ2F0YWJsZV0uYWdncmVnYXRpb25NZXRob2RdID0ge1xuXHRcdFx0bmFtZTogbVR5cGVBZ2dyZWdhdGFibGVQcm9wc1tzQWdncmVnYXRhYmxlXS5uYW1lLFxuXHRcdFx0bGFiZWw6IG1UeXBlQWdncmVnYXRhYmxlUHJvcHNbc0FnZ3JlZ2F0YWJsZV0ubGFiZWxcblx0XHR9O1xuXHR9XG5cdGZvciAoY29uc3Qgc0tleSBpbiBvRW50aXR5VHlwZSkge1xuXHRcdGlmIChzS2V5LmluZGV4T2YoXCIkXCIpICE9PSAwKSB7XG5cdFx0XHRhUHJvcGVydHlQcm9taXNlLnB1c2goXG5cdFx0XHRcdE1ldGFNb2RlbFV0aWwuZmV0Y2hDcml0aWNhbGl0eShvTWV0YU1vZGVsLCBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAke3NFbnRpdHlTZXRQYXRofS8ke3NLZXl9YCkpLnRoZW4oXG5cdFx0XHRcdFx0Q2hhcnREZWxlZ2F0ZS5faGFuZGxlUHJvcGVydHkuYmluZChcblx0XHRcdFx0XHRcdG9NZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQoYCR7c0VudGl0eVNldFBhdGh9LyR7c0tleX1gKSxcblx0XHRcdFx0XHRcdG9NRENDaGFydCxcblx0XHRcdFx0XHRcdG1FbnRpdHlTZXRBbm5vdGF0aW9ucyxcblx0XHRcdFx0XHRcdG1Lbm93bkFnZ3JlZ2F0YWJsZVByb3BzLFxuXHRcdFx0XHRcdFx0bUN1c3RvbUFnZ3JlZ2F0ZXMsXG5cdFx0XHRcdFx0XHRhUHJvcGVydGllc1xuXHRcdFx0XHRcdClcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblx0YXdhaXQgUHJvbWlzZS5hbGwoYVByb3BlcnR5UHJvbWlzZSk7XG5cblx0cmV0dXJuIGFQcm9wZXJ0aWVzO1xufTtcblxuQ2hhcnREZWxlZ2F0ZS5fY3JlYXRlUHJvcGVydHlJbmZvc0ZvckFnZ3JlZ2F0YWJsZSA9IGZ1bmN0aW9uIChcblx0b01EQ0NoYXJ0OiBDaGFydCxcblx0c0tleTogc3RyaW5nLFxuXHRvUHJvcGVydHlBbm5vdGF0aW9uczogYW55LFxuXHRvRmlsdGVyUmVzdHJpY3Rpb25zSW5mbzogYW55LFxuXHRvU29ydFJlc3RyaWN0aW9uc0luZm86IGFueSxcblx0bUtub3duQWdncmVnYXRhYmxlUHJvcHM6IGFueSxcblx0bUN1c3RvbUFnZ3JlZ2F0ZXM6IGFueVxuKSB7XG5cdGNvbnN0IGFBZ2dyZWdhdGVQcm9wZXJ0aWVzID0gW107XG5cdGlmIChPYmplY3Qua2V5cyhtS25vd25BZ2dyZWdhdGFibGVQcm9wcykuaW5kZXhPZihzS2V5KSA+IC0xKSB7XG5cdFx0Zm9yIChjb25zdCBzQWdncmVnYXRhYmxlIGluIG1Lbm93bkFnZ3JlZ2F0YWJsZVByb3BzW3NLZXldKSB7XG5cdFx0XHRhQWdncmVnYXRlUHJvcGVydGllcy5wdXNoKHtcblx0XHRcdFx0bmFtZTogXCJfZmVfYWdncmVnYXRhYmxlX1wiICsgbUtub3duQWdncmVnYXRhYmxlUHJvcHNbc0tleV1bc0FnZ3JlZ2F0YWJsZV0ubmFtZSxcblx0XHRcdFx0cHJvcGVydHlQYXRoOiBzS2V5LFxuXHRcdFx0XHRsYWJlbDpcblx0XHRcdFx0XHRtS25vd25BZ2dyZWdhdGFibGVQcm9wc1tzS2V5XVtzQWdncmVnYXRhYmxlXS5sYWJlbCB8fFxuXHRcdFx0XHRcdGAke29Qcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5MYWJlbFwiXX0gKCR7c0FnZ3JlZ2F0YWJsZX0pYCB8fFxuXHRcdFx0XHRcdGAke3NLZXl9ICgke3NBZ2dyZWdhdGFibGV9KWAsXG5cdFx0XHRcdHNvcnRhYmxlOiBvU29ydFJlc3RyaWN0aW9uc0luZm9bc0tleV0gPyBvU29ydFJlc3RyaWN0aW9uc0luZm9bc0tleV0uc29ydGFibGUgOiB0cnVlLFxuXHRcdFx0XHRmaWx0ZXJhYmxlOiBvRmlsdGVyUmVzdHJpY3Rpb25zSW5mb1tzS2V5XSA/IG9GaWx0ZXJSZXN0cmljdGlvbnNJbmZvW3NLZXldLmZpbHRlcmFibGUgOiB0cnVlLFxuXHRcdFx0XHRncm91cGFibGU6IGZhbHNlLFxuXHRcdFx0XHRhZ2dyZWdhdGFibGU6IHRydWUsXG5cdFx0XHRcdGFnZ3JlZ2F0aW9uTWV0aG9kOiBzQWdncmVnYXRhYmxlLFxuXHRcdFx0XHRtYXhDb25kaXRpb25zOiBPRGF0YU1ldGFNb2RlbFV0aWwuaXNNdWx0aVZhbHVlRmlsdGVyRXhwcmVzc2lvbihvRmlsdGVyUmVzdHJpY3Rpb25zSW5mby5wcm9wZXJ0eUluZm9bc0tleV0pID8gLTEgOiAxLFxuXHRcdFx0XHRyb2xlOiBDaGFydEl0ZW1Sb2xlVHlwZS5heGlzMSxcblx0XHRcdFx0ZGF0YXBvaW50OiBudWxsIC8vVG8gYmUgaW1wbGVtZW50ZWQgYnkgRkVcblx0XHRcdH0pO1xuXHRcdH1cblx0fSBlbHNlIGlmIChPYmplY3Qua2V5cyhtQ3VzdG9tQWdncmVnYXRlcykuaW5kZXhPZihzS2V5KSA+IC0xKSB7XG5cdFx0Zm9yIChjb25zdCBzQ3VzdG9tIGluIG1DdXN0b21BZ2dyZWdhdGVzKSB7XG5cdFx0XHRpZiAoc0N1c3RvbSA9PT0gc0tleSkge1xuXHRcdFx0XHRjb25zdCBvSXRlbSA9IG1lcmdlKHt9LCBtQ3VzdG9tQWdncmVnYXRlc1tzQ3VzdG9tXSwge1xuXHRcdFx0XHRcdG5hbWU6IFwiX2ZlX2FnZ3JlZ2F0YWJsZV9cIiArIHNDdXN0b20sXG5cdFx0XHRcdFx0Z3JvdXBhYmxlOiBmYWxzZSxcblx0XHRcdFx0XHRhZ2dyZWdhdGFibGU6IHRydWUsXG5cdFx0XHRcdFx0cm9sZTogQ2hhcnRJdGVtUm9sZVR5cGUuYXhpczEsXG5cdFx0XHRcdFx0ZGF0YXBvaW50OiBudWxsIC8vVG8gYmUgaW1wbGVtZW50ZWQgYnkgRkVcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGFBZ2dyZWdhdGVQcm9wZXJ0aWVzLnB1c2gob0l0ZW0pO1xuXG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gYUFnZ3JlZ2F0ZVByb3BlcnRpZXM7XG59O1xuQ2hhcnREZWxlZ2F0ZS5yZWJpbmQgPSBmdW5jdGlvbiAob01EQ0NoYXJ0OiBhbnksIG9CaW5kaW5nSW5mbzogYW55KSB7XG5cdGNvbnN0IHNTZWFyY2ggPSBvQmluZGluZ0luZm8ucGFyYW1ldGVycy4kc2VhcmNoO1xuXG5cdGlmIChzU2VhcmNoKSB7XG5cdFx0ZGVsZXRlIG9CaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRzZWFyY2g7XG5cdH1cblxuXHRCYXNlQ2hhcnREZWxlZ2F0ZS5yZWJpbmQob01EQ0NoYXJ0LCBvQmluZGluZ0luZm8pO1xuXG5cdGlmIChzU2VhcmNoKSB7XG5cdFx0Y29uc3Qgb0lubmVyQ2hhcnQgPSBvTURDQ2hhcnQuZ2V0Q29udHJvbERlbGVnYXRlKCkuZ2V0SW5uZXJDaGFydChvTURDQ2hhcnQpLFxuXHRcdFx0b0NoYXJ0QmluZGluZyA9IG9Jbm5lckNoYXJ0ICYmIG9Jbm5lckNoYXJ0LmdldEJpbmRpbmcoXCJkYXRhXCIpO1xuXG5cdFx0Ly8gVGVtcG9yYXJ5IHdvcmthcm91bmQgdW50aWwgdGhpcyBpcyBmaXhlZCBpbiBNRENDaGFydCAvIFVJNSBDaGFydFxuXHRcdC8vIEluIG9yZGVyIHRvIGF2b2lkIGhhdmluZyAyIE9EYXRhIHJlcXVlc3RzLCB3ZSBuZWVkIHRvIHN1c3BlbmQgdGhlIGJpbmRpbmcgYmVmb3JlIHNldHRpbmcgc29tZSBhZ2dyZWdhdGlvbiBwcm9wZXJ0aWVzXG5cdFx0Ly8gYW5kIHJlc3VtZSBpdCBvbmNlIHRoZSBjaGFydCBoYXMgYWRkZWQgb3RoZXIgYWdncmVnYXRpb24gcHJvcGVydGllcyAoaW4gb25CZWZvcmVSZW5kZXJpbmcpXG5cdFx0b0NoYXJ0QmluZGluZy5zdXNwZW5kKCk7XG5cdFx0b0NoYXJ0QmluZGluZy5zZXRBZ2dyZWdhdGlvbih7IHNlYXJjaDogc1NlYXJjaCB9KTtcblxuXHRcdGNvbnN0IG9Jbm5lckNoYXJ0RGVsZWdhdGUgPSB7XG5cdFx0XHRvbkJlZm9yZVJlbmRlcmluZzogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRvQ2hhcnRCaW5kaW5nLnJlc3VtZSgpO1xuXHRcdFx0XHRvSW5uZXJDaGFydC5yZW1vdmVFdmVudERlbGVnYXRlKG9Jbm5lckNoYXJ0RGVsZWdhdGUpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0b0lubmVyQ2hhcnQuYWRkRXZlbnREZWxlZ2F0ZShvSW5uZXJDaGFydERlbGVnYXRlKTtcblx0fVxufTtcbkNoYXJ0RGVsZWdhdGUuX3NldENoYXJ0ID0gZnVuY3Rpb24gKG9NRENDaGFydDogYW55LCBvSW5uZXJDaGFydDogYW55KSB7XG5cdGNvbnN0IG9DaGFydEFQSSA9IG9NRENDaGFydC5nZXRQYXJlbnQoKTtcblx0b0lubmVyQ2hhcnQuc2V0Vml6UHJvcGVydGllcyhvTURDQ2hhcnQuZGF0YShcInZpelByb3BlcnRpZXNcIikpO1xuXHRvSW5uZXJDaGFydC5kZXRhY2hTZWxlY3REYXRhKG9DaGFydEFQSS5oYW5kbGVTZWxlY3Rpb25DaGFuZ2UuYmluZChvQ2hhcnRBUEkpKTtcblx0b0lubmVyQ2hhcnQuZGV0YWNoRGVzZWxlY3REYXRhKG9DaGFydEFQSS5oYW5kbGVTZWxlY3Rpb25DaGFuZ2UuYmluZChvQ2hhcnRBUEkpKTtcblx0b0lubmVyQ2hhcnQuZGV0YWNoRHJpbGxlZFVwKG9DaGFydEFQSS5oYW5kbGVTZWxlY3Rpb25DaGFuZ2UuYmluZChvQ2hhcnRBUEkpKTtcblx0b0lubmVyQ2hhcnQuYXR0YWNoU2VsZWN0RGF0YShvQ2hhcnRBUEkuaGFuZGxlU2VsZWN0aW9uQ2hhbmdlLmJpbmQob0NoYXJ0QVBJKSk7XG5cdG9Jbm5lckNoYXJ0LmF0dGFjaERlc2VsZWN0RGF0YShvQ2hhcnRBUEkuaGFuZGxlU2VsZWN0aW9uQ2hhbmdlLmJpbmQob0NoYXJ0QVBJKSk7XG5cdG9Jbm5lckNoYXJ0LmF0dGFjaERyaWxsZWRVcChvQ2hhcnRBUEkuaGFuZGxlU2VsZWN0aW9uQ2hhbmdlLmJpbmQob0NoYXJ0QVBJKSk7XG5cblx0b0lubmVyQ2hhcnQuc2V0U2VsZWN0aW9uTW9kZShvTURDQ2hhcnQuZ2V0UGF5bG9hZCgpLnNlbGVjdGlvbk1vZGUudG9VcHBlckNhc2UoKSk7XG5cdEJhc2VDaGFydERlbGVnYXRlLl9zZXRDaGFydChvTURDQ2hhcnQsIG9Jbm5lckNoYXJ0KTtcbn07XG5DaGFydERlbGVnYXRlLl9nZXRCaW5kaW5nSW5mbyA9IGZ1bmN0aW9uIChvTURDQ2hhcnQ6IGFueSkge1xuXHRpZiAodGhpcy5fZ2V0QmluZGluZ0luZm9Gcm9tU3RhdGUob01EQ0NoYXJ0KSkge1xuXHRcdHJldHVybiB0aGlzLl9nZXRCaW5kaW5nSW5mb0Zyb21TdGF0ZShvTURDQ2hhcnQpO1xuXHR9XG5cblx0Y29uc3Qgb01ldGFkYXRhSW5mbyA9IG9NRENDaGFydC5nZXREZWxlZ2F0ZSgpLnBheWxvYWQ7XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBvTURDQ2hhcnQuZ2V0TW9kZWwoKSAmJiBvTURDQ2hhcnQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0Y29uc3Qgc1RhcmdldENvbGxlY3Rpb25QYXRoID0gb01EQ0NoYXJ0LmRhdGEoXCJ0YXJnZXRDb2xsZWN0aW9uUGF0aFwiKTtcblx0Y29uc3Qgc0VudGl0eVNldFBhdGggPVxuXHRcdChvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzVGFyZ2V0Q29sbGVjdGlvblBhdGh9LyRraW5kYCkgIT09IFwiTmF2aWdhdGlvblByb3BlcnR5XCIgPyBcIi9cIiA6IFwiXCIpICsgb01ldGFkYXRhSW5mby5jb250ZXh0UGF0aDtcblx0Y29uc3Qgb1BhcmFtcyA9IG1lcmdlKHt9LCBvTWV0YWRhdGFJbmZvLnBhcmFtZXRlcnMsIHtcblx0XHRlbnRpdHlTZXQ6IG9NRENDaGFydC5kYXRhKFwiZW50aXR5U2V0XCIpLFxuXHRcdHVzZUJhdGNoUmVxdWVzdHM6IHRydWUsXG5cdFx0cHJvdmlkZUdyYW5kVG90YWxzOiB0cnVlLFxuXHRcdHByb3ZpZGVUb3RhbFJlc3VsdFNpemU6IHRydWUsXG5cdFx0bm9QYWdpbmc6IHRydWVcblx0fSk7XG5cdHJldHVybiB7XG5cdFx0cGF0aDogc0VudGl0eVNldFBhdGgsXG5cdFx0ZXZlbnRzOiB7XG5cdFx0XHRkYXRhUmVxdWVzdGVkOiBvTURDQ2hhcnQuZ2V0UGFyZW50KCkub25JbnRlcm5hbERhdGFSZXF1ZXN0ZWQuYmluZChvTURDQ2hhcnQuZ2V0UGFyZW50KCkpXG5cdFx0fSxcblx0XHRwYXJhbWV0ZXJzOiBvUGFyYW1zXG5cdH07XG59O1xuQ2hhcnREZWxlZ2F0ZS5yZW1vdmVJdGVtRnJvbUlubmVyQ2hhcnQgPSBmdW5jdGlvbiAob01EQ0NoYXJ0OiBhbnksIG9NRENDaGFydEl0ZW06IGFueSkge1xuXHRCYXNlQ2hhcnREZWxlZ2F0ZS5yZW1vdmVJdGVtRnJvbUlubmVyQ2hhcnQuY2FsbCh0aGlzLCBvTURDQ2hhcnQsIG9NRENDaGFydEl0ZW0pO1xuXHRpZiAob01EQ0NoYXJ0SXRlbS5nZXRUeXBlKCkgPT09IFwiZ3JvdXBhYmxlXCIpIHtcblx0XHRjb25zdCBvSW5uZXJDaGFydCA9IHRoaXMuX2dldENoYXJ0KG9NRENDaGFydCk7XG5cdFx0b0lubmVyQ2hhcnQuZmlyZURlc2VsZWN0RGF0YSgpO1xuXHR9XG59O1xuQ2hhcnREZWxlZ2F0ZS5fZ2V0U29ydGFibGUgPSBmdW5jdGlvbiAob01EQ0NoYXJ0OiBhbnksIG9Tb3J0UmVzdHJpY3Rpb25zOiBhbnksIGJJc1RyYW5zQWdncmVnYXRlOiBhbnkpIHtcblx0aWYgKGJJc1RyYW5zQWdncmVnYXRlKSB7XG5cdFx0aWYgKG9NRENDaGFydC5kYXRhKFwiZHJhZnRTdXBwb3J0ZWRcIikgPT09IFwidHJ1ZVwiKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBvU29ydFJlc3RyaWN0aW9ucyA/IG9Tb3J0UmVzdHJpY3Rpb25zLnNvcnRhYmxlIDogdHJ1ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG9Tb3J0UmVzdHJpY3Rpb25zID8gb1NvcnRSZXN0cmljdGlvbnMuc29ydGFibGUgOiB0cnVlO1xufTtcbkNoYXJ0RGVsZWdhdGUuX2NoZWNrQW5kQWRkRHJhZnRGaWx0ZXIgPSBmdW5jdGlvbiAob0NoYXJ0OiBhbnksIG9CaW5kaW5nSW5mbzogYW55KSB7XG5cdGlmIChvQ2hhcnQuZGF0YShcImRyYWZ0U3VwcG9ydGVkXCIpID09PSBcInRydWVcIikge1xuXHRcdGlmICghb0JpbmRpbmdJbmZvKSB7XG5cdFx0XHRvQmluZGluZ0luZm8gPSB7fTtcblx0XHR9XG5cdFx0aWYgKCFvQmluZGluZ0luZm8uZmlsdGVycykge1xuXHRcdFx0b0JpbmRpbmdJbmZvLmZpbHRlcnMgPSBbXTtcblx0XHR9XG5cdFx0b0JpbmRpbmdJbmZvLmZpbHRlcnMucHVzaChuZXcgRmlsdGVyKFwiSXNBY3RpdmVFbnRpdHlcIiwgRmlsdGVyT3BlcmF0b3IuRVEsIHRydWUpKTtcblx0fVxufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gSUQgd2hpY2ggc2hvdWxkIGJlIHVzZWQgaW4gdGhlIGludGVybmFsIGNoYXJ0IGZvciB0aGUgbWVhc3VyZS9kaW1lbnNpb24uXG4gKiBGb3Igc3RhbmRhcmQgY2FzZXMsIHRoaXMgaXMganVzdCB0aGUgaWQgb2YgdGhlIHByb3BlcnR5LlxuICogSWYgaXQgaXMgbmVjZXNzYXJ5IHRvIHVzZSBhbm90aGVyIGlkIGludGVybmFsbHkgaW5zaWRlIHRoZSBjaGFydCAoZS5nLiBvbiBkdXBsaWNhdGUgcHJvcGVydHkgaWRzKSB0aGlzIG1ldGhvZCBjYW4gYmUgb3ZlcndyaXR0ZW4uXG4gKiBJbiB0aGlzIGNhc2UsIDxjb2RlPmdldFByb3BlcnR5RnJvbU5hbWVBbmRLaW5kPC9jb2RlPiBuZWVkcyB0byBiZSBvdmVyd3JpdHRlbiBhcyB3ZWxsLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIElEIG9mIHRoZSBwcm9wZXJ0eVxuICogQHBhcmFtIHtzdHJpbmd9IGtpbmQgVHlwZSBvZiB0aGUgUHJvcGVydHkgKE1lYXN1cmUvRGltZW5zaW9uKVxuICogQHJldHVybnMge3N0cmluZ30gSW50ZXJuYWwgaWQgZm9yIHRoZSBzYXAuY2hhcnQuQ2hhcnRcbiAqL1xuQ2hhcnREZWxlZ2F0ZS5nZXRJbnRlcm5hbENoYXJ0TmFtZUZyb21Qcm9wZXJ0eU5hbWVBbmRLaW5kID0gZnVuY3Rpb24gKG5hbWU6IHN0cmluZywga2luZDogc3RyaW5nKSB7XG5cdHJldHVybiBuYW1lLnJlcGxhY2UoXCJfZmVfXCIgKyBraW5kICsgXCJfXCIsIFwiXCIpO1xufTtcblxuLyoqXG4gKiBUaGlzIG1hcHMgYW4gaWQgb2YgYW4gaW50ZXJuYWwgY2hhcnQgZGltZW5zaW9uL21lYXN1cmUgJiB0eXBlIG9mIGEgcHJvcGVydHkgdG8gaXRzIGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgZW50cnkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgSUQgb2YgaW50ZXJuYWwgY2hhcnQgbWVhc3VyZS9kaW1lbnNpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBraW5kIEtpbmQgb2YgdGhlIHByb3BlcnR5XG4gKiBAcGFyYW0ge3NhcC51aS5tZGMuQ2hhcnR9IG1kY0NoYXJ0IFJlZmVyZW5jZSB0byB0aGUgTURDIGNoYXJ0XG4gKiBAcmV0dXJucyB7b2JqZWN0fSBQcm9wZXJ0eUluZm8gb2JqZWN0XG4gKi9cbkNoYXJ0RGVsZWdhdGUuZ2V0UHJvcGVydHlGcm9tTmFtZUFuZEtpbmQgPSBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBraW5kOiBzdHJpbmcsIG1kY0NoYXJ0OiBhbnkpIHtcblx0cmV0dXJuIG1kY0NoYXJ0LmdldFByb3BlcnR5SGVscGVyKCkuZ2V0UHJvcGVydHkoXCJfZmVfXCIgKyBraW5kICsgXCJfXCIgKyBuYW1lKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IENoYXJ0RGVsZWdhdGU7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7RUFnQkEsSUFBTUEsaUJBQWlCLEdBQUlDLE1BQUQsQ0FBZ0JELGlCQUExQyxDLENBQ0E7RUFDQTtF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
518
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDaGFydEl0ZW1Sb2xlVHlwZSIsIk1EQ0xpYiIsIkNoYXJ0RGVsZWdhdGUiLCJPYmplY3QiLCJhc3NpZ24iLCJCYXNlQ2hhcnREZWxlZ2F0ZSIsIl9zZXRDaGFydE5vRGF0YVRleHQiLCJvQ2hhcnQiLCJvQmluZGluZ0luZm8iLCJzTm9EYXRhS2V5Iiwib0NoYXJ0RmlsdGVySW5mbyIsIkNoYXJ0VXRpbHMiLCJnZXRBbGxGaWx0ZXJJbmZvIiwic3VmZml4UmVzb3VyY2VLZXkiLCJwYXRoIiwic3RhcnRzV2l0aCIsInN1YnN0ciIsIl9nZXROb0RhdGFUZXh0V2l0aEZpbHRlcnMiLCJkYXRhIiwiZ2V0RmlsdGVyIiwic2VhcmNoIiwiZmlsdGVycyIsImxlbmd0aCIsImdldE1vZGVsIiwiZ2V0UmVzb3VyY2VCdW5kbGUiLCJ0aGVuIiwib1Jlc291cmNlQnVuZGxlIiwic2V0Tm9EYXRhVGV4dCIsIkNvbW1vblV0aWxzIiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJjYXRjaCIsImVycm9yIiwiTG9nIiwiX2hhbmRsZVByb3BlcnR5Iiwib01EQ0NoYXJ0IiwibUVudGl0eVNldEFubm90YXRpb25zIiwibUtub3duQWdncmVnYXRhYmxlUHJvcHMiLCJtQ3VzdG9tQWdncmVnYXRlcyIsImFQcm9wZXJ0aWVzIiwic0NyaXRpY2FsaXR5Iiwib0FwcGx5U3VwcG9ydGVkIiwiQ29tbW9uSGVscGVyIiwicGFyc2VDdXN0b21EYXRhIiwib1NvcnRSZXN0cmljdGlvbnMiLCJvU29ydFJlc3RyaWN0aW9uc0luZm8iLCJPRGF0YU1ldGFNb2RlbFV0aWwiLCJnZXRTb3J0UmVzdHJpY3Rpb25zSW5mbyIsIm9GaWx0ZXJSZXN0cmljdGlvbnMiLCJvRmlsdGVyUmVzdHJpY3Rpb25zSW5mbyIsImdldEZpbHRlclJlc3RyaWN0aW9uc0luZm8iLCJvT2JqIiwiZ2V0T2JqZWN0IiwiZ2V0UGF0aCIsInNLZXkiLCJvTWV0YU1vZGVsIiwiJGtpbmQiLCIkaXNDb2xsZWN0aW9uIiwib1Byb3BlcnR5QW5ub3RhdGlvbnMiLCJzUGF0aCIsImdldE1ldGFDb250ZXh0IiwiYUdyb3VwYWJsZVByb3BlcnRpZXMiLCJHcm91cGFibGVQcm9wZXJ0aWVzIiwiYUFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMiLCJBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzIiwiYkdyb3VwYWJsZSIsImJBZ2dyZWdhdGFibGUiLCJpIiwiJFByb3BlcnR5UGF0aCIsImoiLCJQcm9wZXJ0eSIsImFBZ2dyZWdhdGVQcm9wZXJ0aWVzIiwiX2NyZWF0ZVByb3BlcnR5SW5mb3NGb3JBZ2dyZWdhdGFibGUiLCJmb3JFYWNoIiwib0FnZ3JlZ2F0ZVByb3BlcnR5IiwicHVzaCIsInNOYW1lIiwic1RleHRQcm9wZXJ0eSIsIiRQYXRoIiwiYklzTmF2aWdhdGlvblRleHQiLCJpbmRleE9mIiwibmFtZSIsInByb3BlcnR5UGF0aCIsImxhYmVsIiwic29ydGFibGUiLCJfZ2V0U29ydGFibGUiLCJmaWx0ZXJhYmxlIiwiZ3JvdXBhYmxlIiwiYWdncmVnYXRhYmxlIiwibWF4Q29uZGl0aW9ucyIsImlzTXVsdGlWYWx1ZUZpbHRlckV4cHJlc3Npb24iLCJwcm9wZXJ0eUluZm8iLCJzb3J0S2V5Iiwicm9sZSIsImNhdGVnb3J5IiwiY3JpdGljYWxpdHkiLCJ0ZXh0UHJvcGVydHkiLCJ0ZXh0Rm9ybWF0dGVyIiwiX2Zvcm1hdFRleHQiLCJvVmFsdWUxIiwib1ZhbHVlMiIsIm9UZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uIiwiJEVudW1NZW1iZXIiLCJ1cGRhdGVCaW5kaW5nSW5mbyIsIm9GaWx0ZXIiLCJzYXAiLCJ1aSIsImdldENvcmUiLCJieUlkIiwibUNvbmRpdGlvbnMiLCJnZXRDb25kaXRpb25zIiwic29ydGVyIiwiZ2V0U29ydGVycyIsIm9Jbm5lckNoYXJ0IiwiZ2V0Q29udHJvbERlbGVnYXRlIiwiZ2V0SW5uZXJDaGFydCIsIm9GaWx0ZXJJbmZvIiwiZ2V0Q2hhcnRTZWxlY3Rpb25zRXhpc3QiLCJnZXRGaWx0ZXJCYXJGaWx0ZXJJbmZvIiwic1BhcmFtZXRlclBhdGgiLCJEZWxlZ2F0ZVV0aWwiLCJnZXRQYXJhbWV0ZXJzSW5mbyIsIm9JbmZvIiwiRmlsdGVyVXRpbHMiLCJnZXRGaWx0ZXJJbmZvIiwiZW5hYmxlU2VhcmNoIiwicGFyYW1ldGVycyIsIiRzZWFyY2giLCJub3JtYWxpemVTZWFyY2hUZXJtIiwiX2NoZWNrQW5kQWRkRHJhZnRGaWx0ZXIiLCJmZXRjaFByb3BlcnRpZXMiLCJvTW9kZWwiLCJfZ2V0TW9kZWwiLCJwQ3JlYXRlUHJvcGVydHlJbmZvcyIsIlByb21pc2UiLCJyZXNvbHZlIiwiYXR0YWNoTW9kZWxDb250ZXh0Q2hhbmdlIiwicmVzb2x2ZXIiLCJvbk1vZGVsQ29udGV4dENoYW5nZSIsIm9SZXRyaWV2ZWRNb2RlbCIsIl9jcmVhdGVQcm9wZXJ0eUluZm9zIiwib0V2ZW50Iiwib0RhdGEiLCJnZXRTb3VyY2UiLCJkZXRhY2hNb2RlbENvbnRleHRDaGFuZ2UiLCJzRW50aXR5U2V0UGF0aCIsImdldE1ldGFNb2RlbCIsImFsbCIsInJlcXVlc3RPYmplY3QiLCJhUmVzdWx0cyIsIm9FbnRpdHlUeXBlIiwic0Fubm8iLCJhUHJvcGVydHlQcm9taXNlIiwic0Fubm9LZXkiLCJyZXBsYWNlIiwiYUFubm8iLCJzcGxpdCIsImFEaW1lbnNpb25zIiwiYU1lYXN1cmVzIiwia2V5cyIsImFDaGFydEl0ZW1zIiwiZ2V0SXRlbXMiLCJrZXkiLCJpc0EiLCJnZXRLZXkiLCJmaWx0ZXIiLCJ2YWwiLCJtVHlwZUFnZ3JlZ2F0YWJsZVByb3BzIiwic0FnZ3JlZ2F0YWJsZSIsInNQcm9wS2V5IiwiYWdncmVnYXRpb25NZXRob2QiLCJNZXRhTW9kZWxVdGlsIiwiZmV0Y2hDcml0aWNhbGl0eSIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiYmluZCIsImF4aXMxIiwiZGF0YXBvaW50Iiwic0N1c3RvbSIsIm9JdGVtIiwibWVyZ2UiLCJyZWJpbmQiLCJzU2VhcmNoIiwib0NoYXJ0QmluZGluZyIsImdldEJpbmRpbmciLCJzdXNwZW5kIiwic2V0QWdncmVnYXRpb24iLCJvSW5uZXJDaGFydERlbGVnYXRlIiwib25CZWZvcmVSZW5kZXJpbmciLCJyZXN1bWUiLCJyZW1vdmVFdmVudERlbGVnYXRlIiwiYWRkRXZlbnREZWxlZ2F0ZSIsImZpcmVFdmVudCIsIl9zZXRDaGFydCIsIm9DaGFydEFQSSIsImdldFBhcmVudCIsInNldFZpelByb3BlcnRpZXMiLCJkZXRhY2hTZWxlY3REYXRhIiwiaGFuZGxlU2VsZWN0aW9uQ2hhbmdlIiwiZGV0YWNoRGVzZWxlY3REYXRhIiwiZGV0YWNoRHJpbGxlZFVwIiwiYXR0YWNoU2VsZWN0RGF0YSIsImF0dGFjaERlc2VsZWN0RGF0YSIsImF0dGFjaERyaWxsZWRVcCIsInNldFNlbGVjdGlvbk1vZGUiLCJnZXRQYXlsb2FkIiwic2VsZWN0aW9uTW9kZSIsInRvVXBwZXJDYXNlIiwiX2dldEJpbmRpbmdJbmZvIiwiX2dldEJpbmRpbmdJbmZvRnJvbVN0YXRlIiwib01ldGFkYXRhSW5mbyIsImdldERlbGVnYXRlIiwicGF5bG9hZCIsInNUYXJnZXRDb2xsZWN0aW9uUGF0aCIsImNvbnRleHRQYXRoIiwib1BhcmFtcyIsImVudGl0eVNldCIsInVzZUJhdGNoUmVxdWVzdHMiLCJwcm92aWRlR3JhbmRUb3RhbHMiLCJwcm92aWRlVG90YWxSZXN1bHRTaXplIiwibm9QYWdpbmciLCJldmVudHMiLCJkYXRhUmVxdWVzdGVkIiwib25JbnRlcm5hbERhdGFSZXF1ZXN0ZWQiLCJyZW1vdmVJdGVtRnJvbUlubmVyQ2hhcnQiLCJvTURDQ2hhcnRJdGVtIiwiY2FsbCIsImdldFR5cGUiLCJfZ2V0Q2hhcnQiLCJmaXJlRGVzZWxlY3REYXRhIiwiYklzVHJhbnNBZ2dyZWdhdGUiLCJGaWx0ZXIiLCJGaWx0ZXJPcGVyYXRvciIsIkVRIiwiZ2V0SW50ZXJuYWxDaGFydE5hbWVGcm9tUHJvcGVydHlOYW1lQW5kS2luZCIsImtpbmQiLCJnZXRQcm9wZXJ0eUZyb21OYW1lQW5kS2luZCIsIm1kY0NoYXJ0IiwiZ2V0UHJvcGVydHlIZWxwZXIiLCJnZXRQcm9wZXJ0eSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQ2hhcnREZWxlZ2F0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgbWVyZ2UgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBDaGFydFV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NoYXJ0L0NoYXJ0VXRpbHNcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgRmlsdGVyVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyL0ZpbHRlclV0aWxzXCI7XG5pbXBvcnQgTWV0YU1vZGVsVXRpbCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9PRGF0YU1ldGFNb2RlbFV0aWxcIjtcbmltcG9ydCB0eXBlIENoYXJ0IGZyb20gXCJzYXAvdWkvbWRjL0NoYXJ0XCI7XG5pbXBvcnQgTURDTGliIGZyb20gXCJzYXAvdWkvbWRjL2xpYnJhcnlcIjtcbmltcG9ydCBPRGF0YU1ldGFNb2RlbFV0aWwgZnJvbSBcInNhcC91aS9tZGMvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxVdGlsXCI7XG5pbXBvcnQgRGVsZWdhdGVVdGlsIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L3V0aWwvRGVsZWdhdGVVdGlsXCI7XG5pbXBvcnQgQmFzZUNoYXJ0RGVsZWdhdGUgZnJvbSBcInNhcC91aS9tZGMvb2RhdGEvdjQvdml6Q2hhcnQvQ2hhcnREZWxlZ2F0ZVwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IEZpbHRlck9wZXJhdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyT3BlcmF0b3JcIjtcblxuY29uc3QgQ2hhcnRJdGVtUm9sZVR5cGUgPSAoTURDTGliIGFzIGFueSkuQ2hhcnRJdGVtUm9sZVR5cGU7XG4vLyAvKipcbi8vICAqIEhlbHBlciBjbGFzcyBmb3Igc2FwLnVpLm1kYy5DaGFydC5cbi8vICAqIDxoMz48Yj5Ob3RlOjwvYj48L2gzPlxuLy8gICogVGhlIGNsYXNzIGlzIGV4cGVyaW1lbnRhbCBhbmQgdGhlIEFQSS9iZWhhdmlvdXIgaXMgbm90IGZpbmFsaXNlZFxuLy8gICogYW5kIGhlbmNlIHRoaXMgc2hvdWxkIG5vdCBiZSB1c2VkIGZvciBwcm9kdWN0aXZlIHVzYWdlLlxuLy8gICogRXNwZWNpYWxseSB0aGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGZvciB0aGUgRkUgc2NlbmFyaW8sXG4vLyAgKiBoZXJlIHdlIHNoYWxsIHVzZSBzYXAuZmUubWFjcm9zLkNoYXJ0RGVsZWdhdGUgdGhhdCBpcyBlc3BlY2lhbGx5IHRhaWxvcmVkIGZvciBWNFxuLy8gICogbWV0YSBtb2RlbFxuLy8gICpcbi8vICAqIEBhdXRob3IgU0FQIFNFXG4vLyAgKiBAcHJpdmF0ZVxuLy8gICogQGV4cGVyaW1lbnRhbFxuLy8gICogQHNpbmNlIDEuNjJcbi8vICAqIEBhbGlhcyBzYXAuZmUubWFjcm9zLkNoYXJ0RGVsZWdhdGVcbi8vICAqL1xuY29uc3QgQ2hhcnREZWxlZ2F0ZSA9IE9iamVjdC5hc3NpZ24oe30sIEJhc2VDaGFydERlbGVnYXRlKTtcblxuQ2hhcnREZWxlZ2F0ZS5fc2V0Q2hhcnROb0RhdGFUZXh0ID0gZnVuY3Rpb24gKG9DaGFydDogYW55LCBvQmluZGluZ0luZm86IGFueSkge1xuXHRsZXQgc05vRGF0YUtleSA9IFwiXCI7XG5cdGNvbnN0IG9DaGFydEZpbHRlckluZm8gPSBDaGFydFV0aWxzLmdldEFsbEZpbHRlckluZm8ob0NoYXJ0KSxcblx0XHRzdWZmaXhSZXNvdXJjZUtleSA9IG9CaW5kaW5nSW5mby5wYXRoLnN0YXJ0c1dpdGgoXCIvXCIpID8gb0JpbmRpbmdJbmZvLnBhdGguc3Vic3RyKDEpIDogb0JpbmRpbmdJbmZvLnBhdGg7XG5cdGNvbnN0IF9nZXROb0RhdGFUZXh0V2l0aEZpbHRlcnMgPSBmdW5jdGlvbiAoKSB7XG5cdFx0aWYgKG9DaGFydC5kYXRhKFwibXVsdGlWaWV3c1wiKSkge1xuXHRcdFx0cmV0dXJuIFwiTV9UQUJMRV9BTkRfQ0hBUlRfTk9fREFUQV9URVhUX01VTFRJX1ZJRVdcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFwiVF9UQUJMRV9BTkRfQ0hBUlRfTk9fREFUQV9URVhUX1dJVEhfRklMVEVSXCI7XG5cdFx0fVxuXHR9O1xuXHRpZiAob0NoYXJ0LmdldEZpbHRlcigpKSB7XG5cdFx0aWYgKG9DaGFydEZpbHRlckluZm8uc2VhcmNoIHx8IChvQ2hhcnRGaWx0ZXJJbmZvLmZpbHRlcnMgJiYgb0NoYXJ0RmlsdGVySW5mby5maWx0ZXJzLmxlbmd0aCkpIHtcblx0XHRcdHNOb0RhdGFLZXkgPSBfZ2V0Tm9EYXRhVGV4dFdpdGhGaWx0ZXJzKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNOb0RhdGFLZXkgPSBcIlRfVEFCTEVfQU5EX0NIQVJUX05PX0RBVEFfVEVYVFwiO1xuXHRcdH1cblx0fSBlbHNlIGlmIChvQ2hhcnRGaWx0ZXJJbmZvLnNlYXJjaCB8fCAob0NoYXJ0RmlsdGVySW5mby5maWx0ZXJzICYmIG9DaGFydEZpbHRlckluZm8uZmlsdGVycy5sZW5ndGgpKSB7XG5cdFx0c05vRGF0YUtleSA9IF9nZXROb0RhdGFUZXh0V2l0aEZpbHRlcnMoKTtcblx0fSBlbHNlIHtcblx0XHRzTm9EYXRhS2V5ID0gXCJNX1RBQkxFX0FORF9DSEFSVF9OT19GSUxURVJTX05PX0RBVEFfVEVYVFwiO1xuXHR9XG5cdHJldHVybiAob0NoYXJ0LmdldE1vZGVsKFwic2FwLmZlLmkxOG5cIikuZ2V0UmVzb3VyY2VCdW5kbGUoKSBhcyBQcm9taXNlPFJlc291cmNlQnVuZGxlPilcblx0XHQudGhlbihmdW5jdGlvbiAob1Jlc291cmNlQnVuZGxlKSB7XG5cdFx0XHRvQ2hhcnQuc2V0Tm9EYXRhVGV4dChDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChzTm9EYXRhS2V5LCBvUmVzb3VyY2VCdW5kbGUsIG51bGwsIHN1ZmZpeFJlc291cmNlS2V5KSk7XG5cdFx0fSlcblx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG5cdFx0XHRMb2cuZXJyb3IoZXJyb3IpO1xuXHRcdH0pO1xufTtcblxuQ2hhcnREZWxlZ2F0ZS5faGFuZGxlUHJvcGVydHkgPSBmdW5jdGlvbiAoXG5cdG9NRENDaGFydDogQ2hhcnQsXG5cdG1FbnRpdHlTZXRBbm5vdGF0aW9uczogYW55LFxuXHRtS25vd25BZ2dyZWdhdGFibGVQcm9wczogYW55LFxuXHRtQ3VzdG9tQWdncmVnYXRlczogYW55LFxuXHRhUHJvcGVydGllczogYW55W10sXG5cdHNDcml0aWNhbGl0eTogc3RyaW5nXG4pIHtcblx0Y29uc3Qgb0FwcGx5U3VwcG9ydGVkID0gQ29tbW9uSGVscGVyLnBhcnNlQ3VzdG9tRGF0YShvTURDQ2hhcnQuZGF0YShcImFwcGx5U3VwcG9ydGVkXCIpKTtcblx0Y29uc3Qgb1NvcnRSZXN0cmljdGlvbnMgPSBtRW50aXR5U2V0QW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Tb3J0UmVzdHJpY3Rpb25zXCJdIHx8IHt9O1xuXHRjb25zdCBvU29ydFJlc3RyaWN0aW9uc0luZm8gPSBPRGF0YU1ldGFNb2RlbFV0aWwuZ2V0U29ydFJlc3RyaWN0aW9uc0luZm8ob1NvcnRSZXN0cmljdGlvbnMpO1xuXHRjb25zdCBvRmlsdGVyUmVzdHJpY3Rpb25zID0gbUVudGl0eVNldEFubm90YXRpb25zW1wiQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRmlsdGVyUmVzdHJpY3Rpb25zXCJdO1xuXHRjb25zdCBvRmlsdGVyUmVzdHJpY3Rpb25zSW5mbyA9IE9EYXRhTWV0YU1vZGVsVXRpbC5nZXRGaWx0ZXJSZXN0cmljdGlvbnNJbmZvKG9GaWx0ZXJSZXN0cmljdGlvbnMpO1xuXHRjb25zdCBvT2JqID0gdGhpcy5nZXRNb2RlbCgpLmdldE9iamVjdCh0aGlzLmdldFBhdGgoKSk7XG5cdGNvbnN0IHNLZXkgPSB0aGlzLmdldE1vZGVsKCkuZ2V0T2JqZWN0KGAke3RoaXMuZ2V0UGF0aCgpfUBzYXB1aS5uYW1lYCk7XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSB0aGlzLmdldE1vZGVsKCk7XG5cdGlmIChvT2JqICYmIG9PYmouJGtpbmQgPT09IFwiUHJvcGVydHlcIikge1xuXHRcdC8vIGlnbm9yZSAoYXMgZm9yIG5vdykgYWxsIGNvbXBsZXggcHJvcGVydGllc1xuXHRcdC8vIG5vdCBjbGVhciBpZiB0aGV5IG1pZ2h0IGJlIG5lc3RpbmcgKGNvbXBsZXggaW4gY29tcGxleClcblx0XHQvLyBub3QgY2xlYXIgaG93IHRoZXkgYXJlIHJlcHJlc2VudGVkIGluIG5vbi1maWx0ZXJhYmxlIGFubm90YXRpb25cblx0XHQvLyBldGMuXG5cdFx0aWYgKG9PYmouJGlzQ29sbGVjdGlvbikge1xuXHRcdFx0Ly9Mb2cud2FybmluZyhcIkNvbXBsZXggcHJvcGVydHkgd2l0aCB0eXBlIFwiICsgb09iai4kVHlwZSArIFwiIGhhcyBiZWVuIGlnbm9yZWRcIik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb1Byb3BlcnR5QW5ub3RhdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHt0aGlzLmdldFBhdGgoKX1AYCk7XG5cdFx0Y29uc3Qgc1BhdGggPSBvTWV0YU1vZGVsLmdldE9iamVjdChcIkBzYXB1aS5uYW1lXCIsIG9NZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQodGhpcy5nZXRQYXRoKCkpKTtcblxuXHRcdGNvbnN0IGFHcm91cGFibGVQcm9wZXJ0aWVzID0gb0FwcGx5U3VwcG9ydGVkICYmIG9BcHBseVN1cHBvcnRlZC5Hcm91cGFibGVQcm9wZXJ0aWVzO1xuXHRcdGNvbnN0IGFBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzID0gb0FwcGx5U3VwcG9ydGVkICYmIG9BcHBseVN1cHBvcnRlZC5BZ2dyZWdhdGFibGVQcm9wZXJ0aWVzO1xuXHRcdGxldCBiR3JvdXBhYmxlID0gZmFsc2UsXG5cdFx0XHRiQWdncmVnYXRhYmxlID0gZmFsc2U7XG5cdFx0aWYgKGFHcm91cGFibGVQcm9wZXJ0aWVzICYmIGFHcm91cGFibGVQcm9wZXJ0aWVzLmxlbmd0aCkge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhR3JvdXBhYmxlUHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAoYUdyb3VwYWJsZVByb3BlcnRpZXNbaV0uJFByb3BlcnR5UGF0aCA9PT0gc1BhdGgpIHtcblx0XHRcdFx0XHRiR3JvdXBhYmxlID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoYUFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMgJiYgYUFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMubGVuZ3RoKSB7XG5cdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IGFBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdGlmIChhQWdncmVnYXRhYmxlUHJvcGVydGllc1tqXS5Qcm9wZXJ0eS4kUHJvcGVydHlQYXRoID09PSBzUGF0aCkge1xuXHRcdFx0XHRcdGJBZ2dyZWdhdGFibGUgPSB0cnVlO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICghYUdyb3VwYWJsZVByb3BlcnRpZXMgfHwgKGFHcm91cGFibGVQcm9wZXJ0aWVzICYmICFhR3JvdXBhYmxlUHJvcGVydGllcy5sZW5ndGgpKSB7XG5cdFx0XHRiR3JvdXBhYmxlID0gb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkdyb3VwYWJsZVwiXTtcblx0XHR9XG5cdFx0aWYgKCFhQWdncmVnYXRhYmxlUHJvcGVydGllcyB8fCAoYUFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMgJiYgIWFBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzLmxlbmd0aCkpIHtcblx0XHRcdGJBZ2dyZWdhdGFibGUgPSBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuQWdncmVnYXRhYmxlXCJdO1xuXHRcdH1cblxuXHRcdC8vUmlnaHQgbm93OiBza2lwIHRoZW0sIHNpbmNlIHdlIGNhbid0IGNyZWF0ZSBhIGNoYXJ0IGZyb20gaXRcblx0XHRpZiAoIWJHcm91cGFibGUgJiYgIWJBZ2dyZWdhdGFibGUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoYkFnZ3JlZ2F0YWJsZSkge1xuXHRcdFx0Y29uc3QgYUFnZ3JlZ2F0ZVByb3BlcnRpZXMgPSBDaGFydERlbGVnYXRlLl9jcmVhdGVQcm9wZXJ0eUluZm9zRm9yQWdncmVnYXRhYmxlKFxuXHRcdFx0XHRvTURDQ2hhcnQsXG5cdFx0XHRcdHNLZXksXG5cdFx0XHRcdG9Qcm9wZXJ0eUFubm90YXRpb25zLFxuXHRcdFx0XHRvRmlsdGVyUmVzdHJpY3Rpb25zSW5mbyxcblx0XHRcdFx0b1NvcnRSZXN0cmljdGlvbnNJbmZvLFxuXHRcdFx0XHRtS25vd25BZ2dyZWdhdGFibGVQcm9wcyxcblx0XHRcdFx0bUN1c3RvbUFnZ3JlZ2F0ZXNcblx0XHRcdCk7XG5cdFx0XHRhQWdncmVnYXRlUHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uIChvQWdncmVnYXRlUHJvcGVydHk6IGFueSkge1xuXHRcdFx0XHRhUHJvcGVydGllcy5wdXNoKG9BZ2dyZWdhdGVQcm9wZXJ0eSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRpZiAoYkdyb3VwYWJsZSkge1xuXHRcdFx0Y29uc3Qgc05hbWUgPSBzS2V5IHx8IFwiXCIsXG5cdFx0XHRcdHNUZXh0UHJvcGVydHkgPSBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dFwiXVxuXHRcdFx0XHRcdD8gb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRcIl0uJFBhdGhcblx0XHRcdFx0XHQ6IG51bGw7XG5cdFx0XHRsZXQgYklzTmF2aWdhdGlvblRleHQgPSBmYWxzZTtcblx0XHRcdGlmIChzTmFtZSAmJiBzTmFtZS5pbmRleE9mKFwiL1wiKSA+IC0xKSB7XG5cdFx0XHRcdExvZy5lcnJvcihgJGV4cGFuZCBpcyBub3QgeWV0IHN1cHBvcnRlZC4gUHJvcGVydHk6ICR7c05hbWV9IGZyb20gYW4gYXNzb2NpYXRpb24gY2Fubm90IGJlIHVzZWRgKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHNUZXh0UHJvcGVydHkgJiYgc1RleHRQcm9wZXJ0eS5pbmRleE9mKFwiL1wiKSA+IC0xKSB7XG5cdFx0XHRcdExvZy5lcnJvcihgJGV4cGFuZCBpcyBub3QgeWV0IHN1cHBvcnRlZC4gVGV4dCBQcm9wZXJ0eTogJHtzVGV4dFByb3BlcnR5fSBmcm9tIGFuIGFzc29jaWF0aW9uIGNhbm5vdCBiZSB1c2VkYCk7XG5cdFx0XHRcdGJJc05hdmlnYXRpb25UZXh0ID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdGFQcm9wZXJ0aWVzLnB1c2goe1xuXHRcdFx0XHRuYW1lOiBcIl9mZV9ncm91cGFibGVfXCIgKyBzS2V5LFxuXHRcdFx0XHRwcm9wZXJ0eVBhdGg6IHNLZXksXG5cdFx0XHRcdGxhYmVsOiBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTGFiZWxcIl0gfHwgc0tleSxcblx0XHRcdFx0c29ydGFibGU6IENoYXJ0RGVsZWdhdGUuX2dldFNvcnRhYmxlKG9NRENDaGFydCwgb1NvcnRSZXN0cmljdGlvbnNJbmZvW3NLZXldLCBmYWxzZSksXG5cdFx0XHRcdGZpbHRlcmFibGU6IG9GaWx0ZXJSZXN0cmljdGlvbnNJbmZvW3NLZXldID8gb0ZpbHRlclJlc3RyaWN0aW9uc0luZm9bc0tleV0uZmlsdGVyYWJsZSA6IHRydWUsXG5cdFx0XHRcdGdyb3VwYWJsZTogdHJ1ZSxcblx0XHRcdFx0YWdncmVnYXRhYmxlOiBmYWxzZSxcblx0XHRcdFx0bWF4Q29uZGl0aW9uczogT0RhdGFNZXRhTW9kZWxVdGlsLmlzTXVsdGlWYWx1ZUZpbHRlckV4cHJlc3Npb24ob0ZpbHRlclJlc3RyaWN0aW9uc0luZm8ucHJvcGVydHlJbmZvW3NLZXldKSA/IC0xIDogMSxcblx0XHRcdFx0c29ydEtleTogc0tleSxcblx0XHRcdFx0cm9sZTogQ2hhcnRJdGVtUm9sZVR5cGUuY2F0ZWdvcnksIC8vc3RhbmRhcmQsIG5vcm1hbGx5IHRoaXMgc2hvdWxkIGJlIGludGVycHJldGVkIGZyb20gVUkuQ2hhcnQgYW5ub3RhdGlvblxuXHRcdFx0XHRjcml0aWNhbGl0eTogc0NyaXRpY2FsaXR5LCAvL1RvIGJlIGltcGxlbWVudGVkIGJ5IEZFXG5cdFx0XHRcdHRleHRQcm9wZXJ0eTpcblx0XHRcdFx0XHQhYklzTmF2aWdhdGlvblRleHQgJiYgb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRcIl1cblx0XHRcdFx0XHRcdD8gb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRcIl0uJFBhdGhcblx0XHRcdFx0XHRcdDogbnVsbCwgLy9UbyBiZSBpbXBsZW1lbnRlZCBieSBGRVxuXHRcdFx0XHR0ZXh0Rm9ybWF0dGVyOiBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dEBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRcIl1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufTtcblxuQ2hhcnREZWxlZ2F0ZS5fZm9ybWF0VGV4dCA9IGZ1bmN0aW9uIChvVmFsdWUxOiBhbnksIG9WYWx1ZTI6IGFueSkge1xuXHRjb25zdCBvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiA9IHRoaXMudGV4dEZvcm1hdHRlcjtcblx0aWYgKG9UZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uLiRFbnVtTWVtYmVyID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dEZpcnN0XCIpIHtcblx0XHRyZXR1cm4gYCR7b1ZhbHVlMn0gKCR7b1ZhbHVlMX0pYDtcblx0fSBlbHNlIGlmIChvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbi4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRMYXN0XCIpIHtcblx0XHRyZXR1cm4gYCR7b1ZhbHVlMX0gKCR7b1ZhbHVlMn0pYDtcblx0fSBlbHNlIGlmIChvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbi4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRPbmx5XCIpIHtcblx0XHRyZXR1cm4gb1ZhbHVlMjtcblx0fVxuXHRyZXR1cm4gb1ZhbHVlMiA/IG9WYWx1ZTIgOiBvVmFsdWUxO1xufTtcblxuQ2hhcnREZWxlZ2F0ZS51cGRhdGVCaW5kaW5nSW5mbyA9IGZ1bmN0aW9uIChvQ2hhcnQ6IGFueSwgb0JpbmRpbmdJbmZvOiBhbnkpIHtcblx0Q2hhcnREZWxlZ2F0ZS5fc2V0Q2hhcnROb0RhdGFUZXh0KG9DaGFydCwgb0JpbmRpbmdJbmZvKTtcblxuXHRjb25zdCBvRmlsdGVyID0gc2FwLnVpLmdldENvcmUoKS5ieUlkKG9DaGFydC5nZXRGaWx0ZXIoKSkgYXMgYW55O1xuXHRpZiAob0ZpbHRlcikge1xuXHRcdGNvbnN0IG1Db25kaXRpb25zID0gb0ZpbHRlci5nZXRDb25kaXRpb25zKCk7XG5cblx0XHRpZiAobUNvbmRpdGlvbnMpIHtcblx0XHRcdGlmICghb0JpbmRpbmdJbmZvKSB7XG5cdFx0XHRcdG9CaW5kaW5nSW5mbyA9IHt9O1xuXHRcdFx0fVxuXHRcdFx0b0JpbmRpbmdJbmZvLnNvcnRlciA9IHRoaXMuZ2V0U29ydGVycyhvQ2hhcnQpO1xuXHRcdFx0Y29uc3Qgb0lubmVyQ2hhcnQgPSBvQ2hhcnQuZ2V0Q29udHJvbERlbGVnYXRlKCkuZ2V0SW5uZXJDaGFydChvQ2hhcnQpO1xuXHRcdFx0bGV0IG9GaWx0ZXJJbmZvO1xuXHRcdFx0aWYgKG9Jbm5lckNoYXJ0KSB7XG5cdFx0XHRcdC8vIGlmIHRoZSBhY3Rpb24gaXMgYSBkcmlsbCBkb3duLCBjaGFydCBzZWxlY3Rpb25zIG11c3QgYmUgY29uc2lkZXJlZFxuXHRcdFx0XHRpZiAoQ2hhcnRVdGlscy5nZXRDaGFydFNlbGVjdGlvbnNFeGlzdChvQ2hhcnQpKSB7XG5cdFx0XHRcdFx0b0ZpbHRlckluZm8gPSBDaGFydFV0aWxzLmdldEFsbEZpbHRlckluZm8ob0NoYXJ0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0b0ZpbHRlckluZm8gPSBvRmlsdGVySW5mbyA/IG9GaWx0ZXJJbmZvIDogQ2hhcnRVdGlscy5nZXRGaWx0ZXJCYXJGaWx0ZXJJbmZvKG9DaGFydCk7XG5cdFx0XHRpZiAob0ZpbHRlckluZm8pIHtcblx0XHRcdFx0b0JpbmRpbmdJbmZvLmZpbHRlcnMgPSBvRmlsdGVySW5mby5maWx0ZXJzO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBzUGFyYW1ldGVyUGF0aCA9IERlbGVnYXRlVXRpbC5nZXRQYXJhbWV0ZXJzSW5mbyhvRmlsdGVyLCBtQ29uZGl0aW9ucyk7XG5cdFx0XHRpZiAoc1BhcmFtZXRlclBhdGgpIHtcblx0XHRcdFx0b0JpbmRpbmdJbmZvLnBhdGggPSBzUGFyYW1ldGVyUGF0aDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBTZWFyY2hcblx0XHRjb25zdCBvSW5mbyA9IEZpbHRlclV0aWxzLmdldEZpbHRlckluZm8ob0ZpbHRlciwge30pO1xuXHRcdGNvbnN0IG9BcHBseVN1cHBvcnRlZCA9IENvbW1vbkhlbHBlci5wYXJzZUN1c3RvbURhdGEob0NoYXJ0LmRhdGEoXCJhcHBseVN1cHBvcnRlZFwiKSk7XG5cdFx0aWYgKG9BcHBseVN1cHBvcnRlZCAmJiBvQXBwbHlTdXBwb3J0ZWQuZW5hYmxlU2VhcmNoICYmIG9JbmZvLnNlYXJjaCkge1xuXHRcdFx0b0JpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJHNlYXJjaCA9IENvbW1vblV0aWxzLm5vcm1hbGl6ZVNlYXJjaFRlcm0ob0luZm8uc2VhcmNoKTtcblx0XHR9IGVsc2UgaWYgKG9CaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRzZWFyY2gpIHtcblx0XHRcdGRlbGV0ZSBvQmluZGluZ0luZm8ucGFyYW1ldGVycy4kc2VhcmNoO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRpZiAoIW9CaW5kaW5nSW5mbykge1xuXHRcdFx0b0JpbmRpbmdJbmZvID0ge307XG5cdFx0fVxuXHRcdG9CaW5kaW5nSW5mby5zb3J0ZXIgPSB0aGlzLmdldFNvcnRlcnMob0NoYXJ0KTtcblx0fVxuXHRDaGFydERlbGVnYXRlLl9jaGVja0FuZEFkZERyYWZ0RmlsdGVyKG9DaGFydCwgb0JpbmRpbmdJbmZvKTtcbn07XG5cbkNoYXJ0RGVsZWdhdGUuZmV0Y2hQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKG9NRENDaGFydDogQ2hhcnQpIHtcblx0Y29uc3Qgb01vZGVsID0gdGhpcy5fZ2V0TW9kZWwob01EQ0NoYXJ0KTtcblx0bGV0IHBDcmVhdGVQcm9wZXJ0eUluZm9zO1xuXG5cdGlmICghb01vZGVsKSB7XG5cdFx0cENyZWF0ZVByb3BlcnR5SW5mb3MgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZTogYW55KSA9PiB7XG5cdFx0XHRvTURDQ2hhcnQuYXR0YWNoTW9kZWxDb250ZXh0Q2hhbmdlKFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0cmVzb2x2ZXI6IHJlc29sdmVcblx0XHRcdFx0fSxcblx0XHRcdFx0b25Nb2RlbENvbnRleHRDaGFuZ2UgYXMgYW55LFxuXHRcdFx0XHR0aGlzXG5cdFx0XHQpO1xuXHRcdH0pLnRoZW4oKG9SZXRyaWV2ZWRNb2RlbDogYW55KSA9PiB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fY3JlYXRlUHJvcGVydHlJbmZvcyhvTURDQ2hhcnQsIG9SZXRyaWV2ZWRNb2RlbCk7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0cENyZWF0ZVByb3BlcnR5SW5mb3MgPSB0aGlzLl9jcmVhdGVQcm9wZXJ0eUluZm9zKG9NRENDaGFydCwgb01vZGVsKTtcblx0fVxuXG5cdHJldHVybiBwQ3JlYXRlUHJvcGVydHlJbmZvcy50aGVuKGZ1bmN0aW9uIChhUHJvcGVydGllczogYW55KSB7XG5cdFx0aWYgKG9NRENDaGFydC5kYXRhKSB7XG5cdFx0XHRvTURDQ2hhcnQuZGF0YShcIiRtZGNDaGFydFByb3BlcnR5SW5mb1wiLCBhUHJvcGVydGllcyk7XG5cdFx0fVxuXHRcdHJldHVybiBhUHJvcGVydGllcztcblx0fSk7XG59O1xuZnVuY3Rpb24gb25Nb2RlbENvbnRleHRDaGFuZ2UodGhpczogdHlwZW9mIENoYXJ0RGVsZWdhdGUsIG9FdmVudDogYW55LCBvRGF0YTogYW55KSB7XG5cdGNvbnN0IG9NRENDaGFydCA9IG9FdmVudC5nZXRTb3VyY2UoKTtcblx0Y29uc3Qgb01vZGVsID0gdGhpcy5fZ2V0TW9kZWwob01EQ0NoYXJ0KTtcblxuXHRpZiAob01vZGVsKSB7XG5cdFx0b01EQ0NoYXJ0LmRldGFjaE1vZGVsQ29udGV4dENoYW5nZShvbk1vZGVsQ29udGV4dENoYW5nZSk7XG5cdFx0b0RhdGEucmVzb2x2ZXIob01vZGVsKTtcblx0fVxufVxuQ2hhcnREZWxlZ2F0ZS5fY3JlYXRlUHJvcGVydHlJbmZvcyA9IGFzeW5jIGZ1bmN0aW9uIChvTURDQ2hhcnQ6IGFueSwgb01vZGVsOiBhbnkpIHtcblx0Y29uc3Qgc0VudGl0eVNldFBhdGggPSBgLyR7b01EQ0NoYXJ0LmRhdGEoXCJlbnRpdHlTZXRcIil9YDtcblx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKTtcblxuXHRjb25zdCBhUmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKFtvTWV0YU1vZGVsLnJlcXVlc3RPYmplY3QoYCR7c0VudGl0eVNldFBhdGh9L2ApLCBvTWV0YU1vZGVsLnJlcXVlc3RPYmplY3QoYCR7c0VudGl0eVNldFBhdGh9QGApXSk7XG5cdGNvbnN0IGFQcm9wZXJ0aWVzOiBhbnlbXSA9IFtdO1xuXHRjb25zdCBvRW50aXR5VHlwZSA9IGFSZXN1bHRzWzBdLFxuXHRcdG1FbnRpdHlTZXRBbm5vdGF0aW9ucyA9IGFSZXN1bHRzWzFdO1xuXHRjb25zdCBtQ3VzdG9tQWdncmVnYXRlcyA9IENvbW1vbkhlbHBlci5wYXJzZUN1c3RvbURhdGEob01EQ0NoYXJ0LmRhdGEoXCJjdXN0b21BZ2dcIikpO1xuXHRsZXQgc0Fubm87XG5cdGNvbnN0IGFQcm9wZXJ0eVByb21pc2UgPSBbXTtcblx0Zm9yIChjb25zdCBzQW5ub0tleSBpbiBtRW50aXR5U2V0QW5ub3RhdGlvbnMpIHtcblx0XHRpZiAoc0Fubm9LZXkuc3RhcnRzV2l0aChcIkBPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuQ3VzdG9tQWdncmVnYXRlXCIpKSB7XG5cdFx0XHRzQW5ubyA9IHNBbm5vS2V5LnJlcGxhY2UoXCJAT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkN1c3RvbUFnZ3JlZ2F0ZSNcIiwgXCJcIik7XG5cdFx0XHRjb25zdCBhQW5ubyA9IHNBbm5vLnNwbGl0KFwiQFwiKTtcblxuXHRcdFx0aWYgKGFBbm5vLmxlbmd0aCA9PSAyICYmIGFBbm5vWzFdID09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkxhYmVsXCIpIHtcblx0XHRcdFx0bUN1c3RvbUFnZ3JlZ2F0ZXNbYUFubm9bMF1dID0gbUVudGl0eVNldEFubm90YXRpb25zW3NBbm5vS2V5XTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0Y29uc3QgYURpbWVuc2lvbnM6IGFueVtdID0gW10sXG5cdFx0YU1lYXN1cmVzID0gW107XG5cdGlmIChPYmplY3Qua2V5cyhtQ3VzdG9tQWdncmVnYXRlcykubGVuZ3RoID49IDEpIHtcblx0XHRjb25zdCBhQ2hhcnRJdGVtcyA9IG9NRENDaGFydC5nZXRJdGVtcygpO1xuXHRcdGZvciAoY29uc3Qga2V5IGluIGFDaGFydEl0ZW1zKSB7XG5cdFx0XHRpZiAoYUNoYXJ0SXRlbXNba2V5XS5pc0EoXCJzYXAudWkubWRjLmNoYXJ0LkRpbWVuc2lvbkl0ZW1cIikpIHtcblx0XHRcdFx0YURpbWVuc2lvbnMucHVzaChhQ2hhcnRJdGVtc1trZXldLmdldEtleSgpKTtcblx0XHRcdH0gZWxzZSBpZiAoYUNoYXJ0SXRlbXNba2V5XS5pc0EoXCJzYXAudWkubWRjLmNoYXJ0Lk1lYXN1cmVJdGVtXCIpKSB7XG5cdFx0XHRcdGFNZWFzdXJlcy5wdXNoKGFDaGFydEl0ZW1zW2tleV0uZ2V0S2V5KCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoXG5cdFx0XHRhTWVhc3VyZXMuZmlsdGVyKGZ1bmN0aW9uICh2YWw6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4gYURpbWVuc2lvbnMuaW5kZXhPZih2YWwpICE9IC0xO1xuXHRcdFx0fSkubGVuZ3RoID49IDFcblx0XHQpIHtcblx0XHRcdExvZy5lcnJvcihcIkRpbWVuc2lvbiBhbmQgTWVhc3VyZSBoYXMgdGhlIHNhbWVQcm9wZXJ0eSBDb25maWd1cmVkXCIpO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IG1UeXBlQWdncmVnYXRhYmxlUHJvcHMgPSBDb21tb25IZWxwZXIucGFyc2VDdXN0b21EYXRhKG9NRENDaGFydC5kYXRhKFwidHJhbnNBZ2dcIikpO1xuXHRjb25zdCBtS25vd25BZ2dyZWdhdGFibGVQcm9wczogYW55ID0ge307XG5cdGZvciAoY29uc3Qgc0FnZ3JlZ2F0YWJsZSBpbiBtVHlwZUFnZ3JlZ2F0YWJsZVByb3BzKSB7XG5cdFx0Y29uc3Qgc1Byb3BLZXkgPSBtVHlwZUFnZ3JlZ2F0YWJsZVByb3BzW3NBZ2dyZWdhdGFibGVdLnByb3BlcnR5UGF0aDtcblx0XHRtS25vd25BZ2dyZWdhdGFibGVQcm9wc1tzUHJvcEtleV0gPSBtS25vd25BZ2dyZWdhdGFibGVQcm9wc1tzUHJvcEtleV0gfHwge307XG5cdFx0bUtub3duQWdncmVnYXRhYmxlUHJvcHNbc1Byb3BLZXldW21UeXBlQWdncmVnYXRhYmxlUHJvcHNbc0FnZ3JlZ2F0YWJsZV0uYWdncmVnYXRpb25NZXRob2RdID0ge1xuXHRcdFx0bmFtZTogbVR5cGVBZ2dyZWdhdGFibGVQcm9wc1tzQWdncmVnYXRhYmxlXS5uYW1lLFxuXHRcdFx0bGFiZWw6IG1UeXBlQWdncmVnYXRhYmxlUHJvcHNbc0FnZ3JlZ2F0YWJsZV0ubGFiZWxcblx0XHR9O1xuXHR9XG5cdGZvciAoY29uc3Qgc0tleSBpbiBvRW50aXR5VHlwZSkge1xuXHRcdGlmIChzS2V5LmluZGV4T2YoXCIkXCIpICE9PSAwKSB7XG5cdFx0XHRhUHJvcGVydHlQcm9taXNlLnB1c2goXG5cdFx0XHRcdE1ldGFNb2RlbFV0aWwuZmV0Y2hDcml0aWNhbGl0eShvTWV0YU1vZGVsLCBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAke3NFbnRpdHlTZXRQYXRofS8ke3NLZXl9YCkpLnRoZW4oXG5cdFx0XHRcdFx0Q2hhcnREZWxlZ2F0ZS5faGFuZGxlUHJvcGVydHkuYmluZChcblx0XHRcdFx0XHRcdG9NZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQoYCR7c0VudGl0eVNldFBhdGh9LyR7c0tleX1gKSxcblx0XHRcdFx0XHRcdG9NRENDaGFydCxcblx0XHRcdFx0XHRcdG1FbnRpdHlTZXRBbm5vdGF0aW9ucyxcblx0XHRcdFx0XHRcdG1Lbm93bkFnZ3JlZ2F0YWJsZVByb3BzLFxuXHRcdFx0XHRcdFx0bUN1c3RvbUFnZ3JlZ2F0ZXMsXG5cdFx0XHRcdFx0XHRhUHJvcGVydGllc1xuXHRcdFx0XHRcdClcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblx0YXdhaXQgUHJvbWlzZS5hbGwoYVByb3BlcnR5UHJvbWlzZSk7XG5cblx0cmV0dXJuIGFQcm9wZXJ0aWVzO1xufTtcblxuQ2hhcnREZWxlZ2F0ZS5fY3JlYXRlUHJvcGVydHlJbmZvc0ZvckFnZ3JlZ2F0YWJsZSA9IGZ1bmN0aW9uIChcblx0b01EQ0NoYXJ0OiBDaGFydCxcblx0c0tleTogc3RyaW5nLFxuXHRvUHJvcGVydHlBbm5vdGF0aW9uczogYW55LFxuXHRvRmlsdGVyUmVzdHJpY3Rpb25zSW5mbzogYW55LFxuXHRvU29ydFJlc3RyaWN0aW9uc0luZm86IGFueSxcblx0bUtub3duQWdncmVnYXRhYmxlUHJvcHM6IGFueSxcblx0bUN1c3RvbUFnZ3JlZ2F0ZXM6IGFueVxuKSB7XG5cdGNvbnN0IGFBZ2dyZWdhdGVQcm9wZXJ0aWVzID0gW107XG5cdGlmIChPYmplY3Qua2V5cyhtS25vd25BZ2dyZWdhdGFibGVQcm9wcykuaW5kZXhPZihzS2V5KSA+IC0xKSB7XG5cdFx0Zm9yIChjb25zdCBzQWdncmVnYXRhYmxlIGluIG1Lbm93bkFnZ3JlZ2F0YWJsZVByb3BzW3NLZXldKSB7XG5cdFx0XHRhQWdncmVnYXRlUHJvcGVydGllcy5wdXNoKHtcblx0XHRcdFx0bmFtZTogXCJfZmVfYWdncmVnYXRhYmxlX1wiICsgbUtub3duQWdncmVnYXRhYmxlUHJvcHNbc0tleV1bc0FnZ3JlZ2F0YWJsZV0ubmFtZSxcblx0XHRcdFx0cHJvcGVydHlQYXRoOiBzS2V5LFxuXHRcdFx0XHRsYWJlbDpcblx0XHRcdFx0XHRtS25vd25BZ2dyZWdhdGFibGVQcm9wc1tzS2V5XVtzQWdncmVnYXRhYmxlXS5sYWJlbCB8fFxuXHRcdFx0XHRcdGAke29Qcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5MYWJlbFwiXX0gKCR7c0FnZ3JlZ2F0YWJsZX0pYCB8fFxuXHRcdFx0XHRcdGAke3NLZXl9ICgke3NBZ2dyZWdhdGFibGV9KWAsXG5cdFx0XHRcdHNvcnRhYmxlOiBvU29ydFJlc3RyaWN0aW9uc0luZm9bc0tleV0gPyBvU29ydFJlc3RyaWN0aW9uc0luZm9bc0tleV0uc29ydGFibGUgOiB0cnVlLFxuXHRcdFx0XHRmaWx0ZXJhYmxlOiBvRmlsdGVyUmVzdHJpY3Rpb25zSW5mb1tzS2V5XSA/IG9GaWx0ZXJSZXN0cmljdGlvbnNJbmZvW3NLZXldLmZpbHRlcmFibGUgOiB0cnVlLFxuXHRcdFx0XHRncm91cGFibGU6IGZhbHNlLFxuXHRcdFx0XHRhZ2dyZWdhdGFibGU6IHRydWUsXG5cdFx0XHRcdGFnZ3JlZ2F0aW9uTWV0aG9kOiBzQWdncmVnYXRhYmxlLFxuXHRcdFx0XHRtYXhDb25kaXRpb25zOiBPRGF0YU1ldGFNb2RlbFV0aWwuaXNNdWx0aVZhbHVlRmlsdGVyRXhwcmVzc2lvbihvRmlsdGVyUmVzdHJpY3Rpb25zSW5mby5wcm9wZXJ0eUluZm9bc0tleV0pID8gLTEgOiAxLFxuXHRcdFx0XHRyb2xlOiBDaGFydEl0ZW1Sb2xlVHlwZS5heGlzMSxcblx0XHRcdFx0ZGF0YXBvaW50OiBudWxsIC8vVG8gYmUgaW1wbGVtZW50ZWQgYnkgRkVcblx0XHRcdH0pO1xuXHRcdH1cblx0fSBlbHNlIGlmIChPYmplY3Qua2V5cyhtQ3VzdG9tQWdncmVnYXRlcykuaW5kZXhPZihzS2V5KSA+IC0xKSB7XG5cdFx0Zm9yIChjb25zdCBzQ3VzdG9tIGluIG1DdXN0b21BZ2dyZWdhdGVzKSB7XG5cdFx0XHRpZiAoc0N1c3RvbSA9PT0gc0tleSkge1xuXHRcdFx0XHRjb25zdCBvSXRlbSA9IG1lcmdlKHt9LCBtQ3VzdG9tQWdncmVnYXRlc1tzQ3VzdG9tXSwge1xuXHRcdFx0XHRcdG5hbWU6IFwiX2ZlX2FnZ3JlZ2F0YWJsZV9cIiArIHNDdXN0b20sXG5cdFx0XHRcdFx0Z3JvdXBhYmxlOiBmYWxzZSxcblx0XHRcdFx0XHRhZ2dyZWdhdGFibGU6IHRydWUsXG5cdFx0XHRcdFx0cm9sZTogQ2hhcnRJdGVtUm9sZVR5cGUuYXhpczEsXG5cdFx0XHRcdFx0ZGF0YXBvaW50OiBudWxsIC8vVG8gYmUgaW1wbGVtZW50ZWQgYnkgRkVcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGFBZ2dyZWdhdGVQcm9wZXJ0aWVzLnB1c2gob0l0ZW0pO1xuXG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gYUFnZ3JlZ2F0ZVByb3BlcnRpZXM7XG59O1xuQ2hhcnREZWxlZ2F0ZS5yZWJpbmQgPSBmdW5jdGlvbiAob01EQ0NoYXJ0OiBhbnksIG9CaW5kaW5nSW5mbzogYW55KSB7XG5cdGNvbnN0IHNTZWFyY2ggPSBvQmluZGluZ0luZm8ucGFyYW1ldGVycy4kc2VhcmNoO1xuXG5cdGlmIChzU2VhcmNoKSB7XG5cdFx0ZGVsZXRlIG9CaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRzZWFyY2g7XG5cdH1cblxuXHRCYXNlQ2hhcnREZWxlZ2F0ZS5yZWJpbmQob01EQ0NoYXJ0LCBvQmluZGluZ0luZm8pO1xuXG5cdGlmIChzU2VhcmNoKSB7XG5cdFx0Y29uc3Qgb0lubmVyQ2hhcnQgPSBvTURDQ2hhcnQuZ2V0Q29udHJvbERlbGVnYXRlKCkuZ2V0SW5uZXJDaGFydChvTURDQ2hhcnQpLFxuXHRcdFx0b0NoYXJ0QmluZGluZyA9IG9Jbm5lckNoYXJ0ICYmIG9Jbm5lckNoYXJ0LmdldEJpbmRpbmcoXCJkYXRhXCIpO1xuXG5cdFx0Ly8gVGVtcG9yYXJ5IHdvcmthcm91bmQgdW50aWwgdGhpcyBpcyBmaXhlZCBpbiBNRENDaGFydCAvIFVJNSBDaGFydFxuXHRcdC8vIEluIG9yZGVyIHRvIGF2b2lkIGhhdmluZyAyIE9EYXRhIHJlcXVlc3RzLCB3ZSBuZWVkIHRvIHN1c3BlbmQgdGhlIGJpbmRpbmcgYmVmb3JlIHNldHRpbmcgc29tZSBhZ2dyZWdhdGlvbiBwcm9wZXJ0aWVzXG5cdFx0Ly8gYW5kIHJlc3VtZSBpdCBvbmNlIHRoZSBjaGFydCBoYXMgYWRkZWQgb3RoZXIgYWdncmVnYXRpb24gcHJvcGVydGllcyAoaW4gb25CZWZvcmVSZW5kZXJpbmcpXG5cdFx0b0NoYXJ0QmluZGluZy5zdXNwZW5kKCk7XG5cdFx0b0NoYXJ0QmluZGluZy5zZXRBZ2dyZWdhdGlvbih7IHNlYXJjaDogc1NlYXJjaCB9KTtcblxuXHRcdGNvbnN0IG9Jbm5lckNoYXJ0RGVsZWdhdGUgPSB7XG5cdFx0XHRvbkJlZm9yZVJlbmRlcmluZzogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRvQ2hhcnRCaW5kaW5nLnJlc3VtZSgpO1xuXHRcdFx0XHRvSW5uZXJDaGFydC5yZW1vdmVFdmVudERlbGVnYXRlKG9Jbm5lckNoYXJ0RGVsZWdhdGUpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0b0lubmVyQ2hhcnQuYWRkRXZlbnREZWxlZ2F0ZShvSW5uZXJDaGFydERlbGVnYXRlKTtcblx0fVxuXG5cdG9NRENDaGFydC5maXJlRXZlbnQoXCJiaW5kaW5nVXBkYXRlZFwiKTtcbn07XG5DaGFydERlbGVnYXRlLl9zZXRDaGFydCA9IGZ1bmN0aW9uIChvTURDQ2hhcnQ6IGFueSwgb0lubmVyQ2hhcnQ6IGFueSkge1xuXHRjb25zdCBvQ2hhcnRBUEkgPSBvTURDQ2hhcnQuZ2V0UGFyZW50KCk7XG5cdG9Jbm5lckNoYXJ0LnNldFZpelByb3BlcnRpZXMob01EQ0NoYXJ0LmRhdGEoXCJ2aXpQcm9wZXJ0aWVzXCIpKTtcblx0b0lubmVyQ2hhcnQuZGV0YWNoU2VsZWN0RGF0YShvQ2hhcnRBUEkuaGFuZGxlU2VsZWN0aW9uQ2hhbmdlLmJpbmQob0NoYXJ0QVBJKSk7XG5cdG9Jbm5lckNoYXJ0LmRldGFjaERlc2VsZWN0RGF0YShvQ2hhcnRBUEkuaGFuZGxlU2VsZWN0aW9uQ2hhbmdlLmJpbmQob0NoYXJ0QVBJKSk7XG5cdG9Jbm5lckNoYXJ0LmRldGFjaERyaWxsZWRVcChvQ2hhcnRBUEkuaGFuZGxlU2VsZWN0aW9uQ2hhbmdlLmJpbmQob0NoYXJ0QVBJKSk7XG5cdG9Jbm5lckNoYXJ0LmF0dGFjaFNlbGVjdERhdGEob0NoYXJ0QVBJLmhhbmRsZVNlbGVjdGlvbkNoYW5nZS5iaW5kKG9DaGFydEFQSSkpO1xuXHRvSW5uZXJDaGFydC5hdHRhY2hEZXNlbGVjdERhdGEob0NoYXJ0QVBJLmhhbmRsZVNlbGVjdGlvbkNoYW5nZS5iaW5kKG9DaGFydEFQSSkpO1xuXHRvSW5uZXJDaGFydC5hdHRhY2hEcmlsbGVkVXAob0NoYXJ0QVBJLmhhbmRsZVNlbGVjdGlvbkNoYW5nZS5iaW5kKG9DaGFydEFQSSkpO1xuXG5cdG9Jbm5lckNoYXJ0LnNldFNlbGVjdGlvbk1vZGUob01EQ0NoYXJ0LmdldFBheWxvYWQoKS5zZWxlY3Rpb25Nb2RlLnRvVXBwZXJDYXNlKCkpO1xuXHRCYXNlQ2hhcnREZWxlZ2F0ZS5fc2V0Q2hhcnQob01EQ0NoYXJ0LCBvSW5uZXJDaGFydCk7XG59O1xuQ2hhcnREZWxlZ2F0ZS5fZ2V0QmluZGluZ0luZm8gPSBmdW5jdGlvbiAob01EQ0NoYXJ0OiBhbnkpIHtcblx0aWYgKHRoaXMuX2dldEJpbmRpbmdJbmZvRnJvbVN0YXRlKG9NRENDaGFydCkpIHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0QmluZGluZ0luZm9Gcm9tU3RhdGUob01EQ0NoYXJ0KTtcblx0fVxuXG5cdGNvbnN0IG9NZXRhZGF0YUluZm8gPSBvTURDQ2hhcnQuZ2V0RGVsZWdhdGUoKS5wYXlsb2FkO1xuXHRjb25zdCBvTWV0YU1vZGVsID0gb01EQ0NoYXJ0LmdldE1vZGVsKCkgJiYgb01EQ0NoYXJ0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdGNvbnN0IHNUYXJnZXRDb2xsZWN0aW9uUGF0aCA9IG9NRENDaGFydC5kYXRhKFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIik7XG5cdGNvbnN0IHNFbnRpdHlTZXRQYXRoID1cblx0XHQob01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c1RhcmdldENvbGxlY3Rpb25QYXRofS8ka2luZGApICE9PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiID8gXCIvXCIgOiBcIlwiKSArIG9NZXRhZGF0YUluZm8uY29udGV4dFBhdGg7XG5cdGNvbnN0IG9QYXJhbXMgPSBtZXJnZSh7fSwgb01ldGFkYXRhSW5mby5wYXJhbWV0ZXJzLCB7XG5cdFx0ZW50aXR5U2V0OiBvTURDQ2hhcnQuZGF0YShcImVudGl0eVNldFwiKSxcblx0XHR1c2VCYXRjaFJlcXVlc3RzOiB0cnVlLFxuXHRcdHByb3ZpZGVHcmFuZFRvdGFsczogdHJ1ZSxcblx0XHRwcm92aWRlVG90YWxSZXN1bHRTaXplOiB0cnVlLFxuXHRcdG5vUGFnaW5nOiB0cnVlXG5cdH0pO1xuXHRyZXR1cm4ge1xuXHRcdHBhdGg6IHNFbnRpdHlTZXRQYXRoLFxuXHRcdGV2ZW50czoge1xuXHRcdFx0ZGF0YVJlcXVlc3RlZDogb01EQ0NoYXJ0LmdldFBhcmVudCgpLm9uSW50ZXJuYWxEYXRhUmVxdWVzdGVkLmJpbmQob01EQ0NoYXJ0LmdldFBhcmVudCgpKVxuXHRcdH0sXG5cdFx0cGFyYW1ldGVyczogb1BhcmFtc1xuXHR9O1xufTtcbkNoYXJ0RGVsZWdhdGUucmVtb3ZlSXRlbUZyb21Jbm5lckNoYXJ0ID0gZnVuY3Rpb24gKG9NRENDaGFydDogYW55LCBvTURDQ2hhcnRJdGVtOiBhbnkpIHtcblx0QmFzZUNoYXJ0RGVsZWdhdGUucmVtb3ZlSXRlbUZyb21Jbm5lckNoYXJ0LmNhbGwodGhpcywgb01EQ0NoYXJ0LCBvTURDQ2hhcnRJdGVtKTtcblx0aWYgKG9NRENDaGFydEl0ZW0uZ2V0VHlwZSgpID09PSBcImdyb3VwYWJsZVwiKSB7XG5cdFx0Y29uc3Qgb0lubmVyQ2hhcnQgPSB0aGlzLl9nZXRDaGFydChvTURDQ2hhcnQpO1xuXHRcdG9Jbm5lckNoYXJ0LmZpcmVEZXNlbGVjdERhdGEoKTtcblx0fVxufTtcbkNoYXJ0RGVsZWdhdGUuX2dldFNvcnRhYmxlID0gZnVuY3Rpb24gKG9NRENDaGFydDogYW55LCBvU29ydFJlc3RyaWN0aW9uczogYW55LCBiSXNUcmFuc0FnZ3JlZ2F0ZTogYW55KSB7XG5cdGlmIChiSXNUcmFuc0FnZ3JlZ2F0ZSkge1xuXHRcdGlmIChvTURDQ2hhcnQuZGF0YShcImRyYWZ0U3VwcG9ydGVkXCIpID09PSBcInRydWVcIikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gb1NvcnRSZXN0cmljdGlvbnMgPyBvU29ydFJlc3RyaWN0aW9ucy5zb3J0YWJsZSA6IHRydWU7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvU29ydFJlc3RyaWN0aW9ucyA/IG9Tb3J0UmVzdHJpY3Rpb25zLnNvcnRhYmxlIDogdHJ1ZTtcbn07XG5DaGFydERlbGVnYXRlLl9jaGVja0FuZEFkZERyYWZ0RmlsdGVyID0gZnVuY3Rpb24gKG9DaGFydDogYW55LCBvQmluZGluZ0luZm86IGFueSkge1xuXHRpZiAob0NoYXJ0LmRhdGEoXCJkcmFmdFN1cHBvcnRlZFwiKSA9PT0gXCJ0cnVlXCIpIHtcblx0XHRpZiAoIW9CaW5kaW5nSW5mbykge1xuXHRcdFx0b0JpbmRpbmdJbmZvID0ge307XG5cdFx0fVxuXHRcdGlmICghb0JpbmRpbmdJbmZvLmZpbHRlcnMpIHtcblx0XHRcdG9CaW5kaW5nSW5mby5maWx0ZXJzID0gW107XG5cdFx0fVxuXHRcdG9CaW5kaW5nSW5mby5maWx0ZXJzLnB1c2gobmV3IEZpbHRlcihcIklzQWN0aXZlRW50aXR5XCIsIEZpbHRlck9wZXJhdG9yLkVRLCB0cnVlKSk7XG5cdH1cbn07XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIElEIHdoaWNoIHNob3VsZCBiZSB1c2VkIGluIHRoZSBpbnRlcm5hbCBjaGFydCBmb3IgdGhlIG1lYXN1cmUvZGltZW5zaW9uLlxuICogRm9yIHN0YW5kYXJkIGNhc2VzLCB0aGlzIGlzIGp1c3QgdGhlIGlkIG9mIHRoZSBwcm9wZXJ0eS5cbiAqIElmIGl0IGlzIG5lY2Vzc2FyeSB0byB1c2UgYW5vdGhlciBpZCBpbnRlcm5hbGx5IGluc2lkZSB0aGUgY2hhcnQgKGUuZy4gb24gZHVwbGljYXRlIHByb3BlcnR5IGlkcykgdGhpcyBtZXRob2QgY2FuIGJlIG92ZXJ3cml0dGVuLlxuICogSW4gdGhpcyBjYXNlLCA8Y29kZT5nZXRQcm9wZXJ0eUZyb21OYW1lQW5kS2luZDwvY29kZT4gbmVlZHMgdG8gYmUgb3ZlcndyaXR0ZW4gYXMgd2VsbC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBJRCBvZiB0aGUgcHJvcGVydHlcbiAqIEBwYXJhbSB7c3RyaW5nfSBraW5kIFR5cGUgb2YgdGhlIFByb3BlcnR5IChNZWFzdXJlL0RpbWVuc2lvbilcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEludGVybmFsIGlkIGZvciB0aGUgc2FwLmNoYXJ0LkNoYXJ0XG4gKi9cbkNoYXJ0RGVsZWdhdGUuZ2V0SW50ZXJuYWxDaGFydE5hbWVGcm9tUHJvcGVydHlOYW1lQW5kS2luZCA9IGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGtpbmQ6IHN0cmluZykge1xuXHRyZXR1cm4gbmFtZS5yZXBsYWNlKFwiX2ZlX1wiICsga2luZCArIFwiX1wiLCBcIlwiKTtcbn07XG5cbi8qKlxuICogVGhpcyBtYXBzIGFuIGlkIG9mIGFuIGludGVybmFsIGNoYXJ0IGRpbWVuc2lvbi9tZWFzdXJlICYgdHlwZSBvZiBhIHByb3BlcnR5IHRvIGl0cyBjb3JyZXNwb25kaW5nIHByb3BlcnR5IGVudHJ5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIElEIG9mIGludGVybmFsIGNoYXJ0IG1lYXN1cmUvZGltZW5zaW9uXG4gKiBAcGFyYW0ge3N0cmluZ30ga2luZCBLaW5kIG9mIHRoZSBwcm9wZXJ0eVxuICogQHBhcmFtIHtzYXAudWkubWRjLkNoYXJ0fSBtZGNDaGFydCBSZWZlcmVuY2UgdG8gdGhlIE1EQyBjaGFydFxuICogQHJldHVybnMge29iamVjdH0gUHJvcGVydHlJbmZvIG9iamVjdFxuICovXG5DaGFydERlbGVnYXRlLmdldFByb3BlcnR5RnJvbU5hbWVBbmRLaW5kID0gZnVuY3Rpb24gKG5hbWU6IHN0cmluZywga2luZDogc3RyaW5nLCBtZGNDaGFydDogYW55KSB7XG5cdHJldHVybiBtZGNDaGFydC5nZXRQcm9wZXJ0eUhlbHBlcigpLmdldFByb3BlcnR5KFwiX2ZlX1wiICsga2luZCArIFwiX1wiICsgbmFtZSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBDaGFydERlbGVnYXRlO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7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
@@ -417,6 +417,8 @@ ChartDelegate.rebind = function (oMDCChart: any, oBindingInfo: any) {
417
417
  };
418
418
  oInnerChart.addEventDelegate(oInnerChartDelegate);
419
419
  }
420
+
421
+ oMDCChart.fireEvent("bindingUpdated");
420
422
  };
421
423
  ChartDelegate._setChart = function (oMDCChart: any, oInnerChart: any) {
422
424
  const oChartAPI = oMDCChart.getParent();
@@ -413,29 +413,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/converter
413
413
  } else if (regex[1] === ((_refColumn = refColumn) === null || _refColumn === void 0 ? void 0 : _refColumn.columnId)) {
414
414
  oColumnExport.label = oColumnExport.label === refColumn.label ? "".concat(refColumn.label, " (").concat(++additionalPropertyIndex, ")") : oColumnExport.label;
415
415
  }
416
- } //Modify exported value when using Communication.Contact dataFieldForAnnotation
417
- //contact>fn property should be exported
418
-
419
-
420
- if (oColumn.exportContactProperty && column.propertyInfos) {
421
- var _column$propertyInfos, _column$propertyInfos2, _column$propertyInfos3, _oColumn$propertyInfo;
422
-
423
- if (((_column$propertyInfos = column.propertyInfos) === null || _column$propertyInfos === void 0 ? void 0 : _column$propertyInfos.length) === 1 && ((_column$propertyInfos2 = column.propertyInfos) === null || _column$propertyInfos2 === void 0 ? void 0 : _column$propertyInfos2.toString()) === oColumnExport.property.toString()) {
424
- oColumnExport.property = oColumn.exportContactProperty;
425
- oColumnExport.label = oColumn.label;
426
- } else if (((_column$propertyInfos3 = column.propertyInfos) === null || _column$propertyInfos3 === void 0 ? void 0 : _column$propertyInfos3.length) > 1 && (_oColumn$propertyInfo = oColumn.propertyInfos) !== null && _oColumn$propertyInfo !== void 0 && _oColumn$propertyInfo.some(function (prop) {
427
- return oColumnExport.property.includes(prop);
428
- }) && Array.isArray(oColumnExport.property)) {
429
- var _oColumnExport$proper;
430
-
431
- oColumnExport.property = (_oColumnExport$proper = oColumnExport.property) === null || _oColumnExport$proper === void 0 ? void 0 : _oColumnExport$proper.map(function (columnProperty) {
432
- var _oColumn$propertyInfo2;
433
-
434
- return (_oColumn$propertyInfo2 = oColumn.propertyInfos) !== null && _oColumn$propertyInfo2 !== void 0 && _oColumn$propertyInfo2.some(function (prop) {
435
- return prop === columnProperty;
436
- }) ? oColumn.exportContactProperty : columnProperty;
437
- });
438
- }
439
416
  }
440
417
  });
441
418
  });
@@ -777,4 +754,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/converter
777
754
  }), _applyDecoratedDescriptor(_class2.prototype, "onTableRowPress", [_dec27], Object.getOwnPropertyDescriptor(_class2.prototype, "onTableRowPress"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onInternalDataReceived", [_dec28], Object.getOwnPropertyDescriptor(_class2.prototype, "onInternalDataReceived"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onInternalDataRequested", [_dec29], Object.getOwnPropertyDescriptor(_class2.prototype, "onInternalDataRequested"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onPaste", [_dec30], Object.getOwnPropertyDescriptor(_class2.prototype, "onPaste"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onBeforeExport", [_dec31], Object.getOwnPropertyDescriptor(_class2.prototype, "onBeforeExport"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onDataStateChange", [_dec32], Object.getOwnPropertyDescriptor(_class2.prototype, "onDataStateChange"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onMassEditButtonPressed", [_dec33], Object.getOwnPropertyDescriptor(_class2.prototype, "onMassEditButtonPressed"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onTableSelectionChange", [_dec34], Object.getOwnPropertyDescriptor(_class2.prototype, "onTableSelectionChange"), _class2.prototype)), _class2)) || _class);
778
755
  return TableAPI;
779
756
  }, false);
780
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJib2R5IiwicmVjb3ZlciIsInJlc3VsdCIsImUiLCJ0aGVuIiwiZmluYWxpemVyIiwiYmluZCIsIlRhYmxlQVBJIiwiZGVmaW5lVUk1Q2xhc3MiLCJwcm9wZXJ0eSIsInR5cGUiLCJkZWZhdWx0VmFsdWUiLCJldmVudCIsInhtbEV2ZW50SGFuZGxlciIsIm1TZXR0aW5ncyIsIm90aGVycyIsImNvbnRlbnQiLCJhdHRhY2hFdmVudCIsIm9uVGFibGVTZWxlY3Rpb25DaGFuZ2UiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwiYWRkTWVzc2FnZSIsInBhcmFtZXRlcnMiLCJtc2dNYW5hZ2VyIiwiX2dldE1lc3NhZ2VNYW5hZ2VyIiwib1RhYmxlIiwib01lc3NhZ2UiLCJNZXNzYWdlIiwidGFyZ2V0IiwiZ2V0Um93QmluZGluZyIsImdldFJlc29sdmVkUGF0aCIsIm1lc3NhZ2UiLCJwcm9jZXNzb3IiLCJnZXRNb2RlbCIsImRlc2NyaXB0aW9uIiwicGVyc2lzdGVudCIsImFkZE1lc3NhZ2VzIiwiZ2V0SWQiLCJyZW1vdmVNZXNzYWdlIiwiaWQiLCJtZXNzYWdlcyIsImdldE1lc3NhZ2VNb2RlbCIsImdldERhdGEiLCJmaW5kIiwicmVtb3ZlTWVzc2FnZXMiLCJzYXAiLCJ1aSIsImdldENvcmUiLCJnZXRNZXNzYWdlTWFuYWdlciIsIl9nZXRSb3dCaW5kaW5nIiwiZ2V0Q29udGVudCIsImdldENvdW50cyIsIlRhYmxlVXRpbHMiLCJnZXRMaXN0QmluZGluZ0ZvckNvdW50IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJiYXRjaEdyb3VwSWQiLCJnZXRQcm9wZXJ0eSIsImRhdGEiLCJhZGRpdGlvbmFsRmlsdGVycyIsImdldEhpZGRlbkZpbHRlcnMiLCJpVmFsdWUiLCJnZXRDb3VudEZvcm1hdHRlZCIsImNhdGNoIiwib25UYWJsZVJvd1ByZXNzIiwib0V2ZW50Iiwib0NvbnRyb2xsZXIiLCJvQ29udGV4dCIsIm1QYXJhbWV0ZXJzIiwiaXNJbmFjdGl2ZSIsImlzVHJhbnNpZW50IiwiaXNBIiwiX3JvdXRpbmciLCJuYXZpZ2F0ZUZvcndhcmRUb0NvbnRleHQiLCJvbkludGVybmFsRGF0YVJlY2VpdmVkIiwiZ2V0UGFyYW1ldGVyIiwiZ2V0Q29udHJvbGxlciIsIm1lc3NhZ2VIYW5kbGVyIiwic2hvd01lc3NhZ2VEaWFsb2ciLCJvbkludGVybmFsRGF0YVJlcXVlc3RlZCIsImdldFNvdXJjZSIsInBhdGhUb0JlUmVtb3ZlZCIsImdldEhlYWRlckNvbnRleHQiLCJnZXRQYXRoIiwicmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzIiwidW5kZWZpbmVkIiwic2V0UHJvcGVydHkiLCJmaXJlRXZlbnQiLCJvblBhc3RlIiwidGFibGVEZWZpbml0aW9uIiwiY29udHJvbCIsImVuYWJsZVBhc3RlIiwiYVJhd1Bhc3RlZERhdGEiLCJvUmVzb3VyY2VNb2RlbCIsImdldEVuYWJsZVBhc3RlIiwiUGFzdGVIZWxwZXIiLCJwYXN0ZURhdGEiLCJnZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUiLCJNZXNzYWdlQm94IiwiZXJyb3IiLCJnZXRUZXh0IiwidGl0bGUiLCJvbkJlZm9yZUV4cG9ydCIsImlzU3BsaXRNb2RlIiwiZ2V0UGFyYW1ldGVycyIsInVzZXJFeHBvcnRTZXR0aW5ncyIsInNwbGl0Q2VsbHMiLCJvVGFibGVDb250cm9sbGVyIiwib0V4cG9ydENvbHVtbnMiLCJleHBvcnRTZXR0aW5ncyIsIndvcmtib29rIiwiY29sdW1ucyIsIm9UYWJsZUNvbHVtbnMiLCJ1cGRhdGVFeHBvcnRTZXR0aW5ncyIsImRhdGFTdGF0ZUluZGljYXRvckZpbHRlciIsInNUYWJsZUNvbnRleHRCaW5kaW5nUGF0aCIsInNUYWJsZVJvd0JpbmRpbmciLCJnZXRUYXJnZXQiLCJvbkRhdGFTdGF0ZUNoYW5nZSIsIm9EYXRhU3RhdGVJbmRpY2F0b3IiLCJhRmlsdGVyZWRNZXNzYWdlcyIsIm9JbnRlcm5hbE1vZGVsIiwib0NvbHVtbnMiLCJyZWZDb2x1bW4iLCJhZGRpdGlvbmFsUHJvcGVydHlJbmRleCIsImZvckVhY2giLCJvQ29sdW1uRXhwb3J0IiwibGFiZWwiLCJEZWxlZ2F0ZVV0aWwiLCJnZXRMb2NhbGl6ZWRUZXh0IiwiZmFsc2VWYWx1ZSIsInRydWVWYWx1ZSIsImNvbHVtbiIsIm9Db2x1bW4iLCJpc0RhdGFQb2ludEZha2VUYXJnZXRQcm9wZXJ0eSIsInJlbGF0aXZlUGF0aCIsInJlZ2V4IiwiZXhlYyIsImNvbHVtbklkIiwiZXhwb3J0Q29udGFjdFByb3BlcnR5IiwicHJvcGVydHlJbmZvcyIsImxlbmd0aCIsInRvU3RyaW5nIiwic29tZSIsInByb3AiLCJpbmNsdWRlcyIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsImNvbHVtblByb3BlcnR5IiwicmVzdW1lQmluZGluZyIsImJSZXF1ZXN0SWZOb3RJbml0aWFsaXplZCIsImdldERhdGFJbml0aWFsaXplZCIsInJlYmluZCIsInJlZnJlc2hOb3RBcHBsaWNhYmxlRmllbGRzIiwib0ZpbHRlckNvbnRyb2wiLCJGaWx0ZXJVdGlscyIsImdldE5vdEFwcGxpY2FibGVGaWx0ZXJzIiwic3VzcGVuZEJpbmRpbmciLCJpbnZhbGlkYXRlQ29udGVudCIsIm9uTWFzc0VkaXRCdXR0b25QcmVzc2VkIiwicGFnZUNvbnRyb2xsZXIiLCJtYXNzRWRpdCIsIm9wZW5NYXNzRWRpdERpYWxvZyIsIkxvZyIsIndhcm5pbmciLCJnZXRUYWJsZURlZmluaXRpb24iLCJnZXRJZGVudGlmaWVyQ29sdW1uIiwiaGVhZGVySW5mb1RpdGxlUGF0aCIsImhlYWRlckluZm9UaXRsZSIsIm9NZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJzQ3VycmVudEVudGl0eVNldE5hbWUiLCJhVGVjaG5pY2FsS2V5cyIsImdldE9iamVjdCIsImFGaWx0ZXJlZFRlY2huaWNhbEtleXMiLCJ0ZWNobmljYWxLZXkiLCJwdXNoIiwic2VtYW50aWNLZXlDb2x1bW5zIiwic2VtYW50aWNLZXlzIiwiYVZpc2libGVDb2x1bW5zIiwiYUZpbHRlcmVkQ29sdW1tbnMiLCJhVGFibGVDb2x1bW5zIiwiZ2V0Q29sdW1ucyIsImdldERhdGFQcm9wZXJ0eSIsIm9UZXh0QXJyYW5nZW1lbnQiLCJzVGV4dEFycmFuZ2VtZW50IiwiJFBhdGgiLCJzVGV4dFBsYWNlbWVudCIsIiRFbnVtTWVtYmVyIiwiY29sdW1uTmFtZSIsInNDb2x1bW5OYW1lVmlzaWJsZSIsInNldFVwRW1wdHlSb3dzIiwiY3JlYXRpb25Nb2RlIiwiQ3JlYXRpb25Nb2RlIiwiSW5saW5lQ3JlYXRpb25Sb3dzIiwicFdhaXRUYWJsZVJlbmRlcmVkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJnZXREb21SZWYiLCJkZWxlZ2F0ZSIsIm9uQWZ0ZXJSZW5kZXJpbmciLCJyZW1vdmVFdmVudERlbGVnYXRlIiwiYWRkRXZlbnREZWxlZ2F0ZSIsImJJc0luRWRpdE1vZGUiLCJvQmluZGluZyIsImlzUmVzb2x2ZWQiLCJpc0xlbmd0aEZpbmFsIiwic0NvbnRleHRQYXRoIiwiZ2V0Q29udGV4dCIsIm9JbmFjdGl2ZUNvbnRleHQiLCJnZXRBbGxDdXJyZW50Q29udGV4dHMiLCJzdGFydHNXaXRoIiwiX2NyZWF0ZUVtcHR5Um93IiwiaUlubGluZUNyZWF0aW9uUm93Q291bnQiLCJpbmxpbmVDcmVhdGlvblJvd0NvdW50IiwiYURhdGEiLCJpIiwiYkF0RW5kIiwiYkluYWN0aXZlIiwib1ZpZXciLCJDb21tb25VdGlscyIsImdldFRhcmdldFZpZXciLCJvSW50ZXJuYWxFZGl0RmxvdyIsIl9lZGl0RmxvdyIsImNyZWF0aW5nRW1wdHlSb3dzIiwiY3JlYXRlTXVsdGlwbGVEb2N1bWVudHMiLCJlZGl0RmxvdyIsIm9uQmVmb3JlQ3JlYXRlIiwiYUNvbnRleHRzIiwiY3JlYXRlZCIsIm9FcnJvciIsImNhbmNlbGVkIiwiTWFjcm9BUEkiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlRhYmxlQVBJLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIFJlc291cmNlQnVuZGxlIGZyb20gXCJzYXAvYmFzZS9pMThuL1Jlc291cmNlQnVuZGxlXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgQW5ub3RhdGlvblRhYmxlQ29sdW1uLCBUYWJsZUNvbHVtbiwgVGFibGVWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgeyBDcmVhdGlvbk1vZGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnRpZXNPZiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIGV2ZW50LCBwcm9wZXJ0eSwgeG1sRXZlbnRIYW5kbGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgUGFzdGVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUGFzdGVIZWxwZXJcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IERlbGVnYXRlVXRpbCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9EZWxlZ2F0ZVV0aWxcIjtcbmltcG9ydCBGaWx0ZXJVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXIvRmlsdGVyVXRpbHNcIjtcbmltcG9ydCBUYWJsZVV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1V0aWxzXCI7XG5pbXBvcnQgTWVzc2FnZUJveCBmcm9tIFwic2FwL20vTWVzc2FnZUJveFwiO1xuaW1wb3J0IERhdGFTdGF0ZUluZGljYXRvciBmcm9tIFwic2FwL20vcGx1Z2lucy9EYXRhU3RhdGVJbmRpY2F0b3JcIjtcbmltcG9ydCBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgeyBNZXNzYWdlVHlwZSB9IGZyb20gXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCBNYWNyb0FQSSBmcm9tIFwiLi9NYWNyb0FQSVwiO1xuXG4vKipcbiAqIERlZmluaXRpb24gb2YgYSBjdXN0b20gYWN0aW9uIHRvIGJlIHVzZWQgaW5zaWRlIHRoZSB0YWJsZSB0b29sYmFyXG4gKlxuICogQGFsaWFzIHNhcC5mZS5tYWNyb3MudGFibGUuQWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIEFjdGlvbiA9IHtcblx0LyoqXG5cdCAqIFVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBhY3Rpb25cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0a2V5OiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBUaGUgdGV4dCB0aGF0IHdpbGwgYmUgZGlzcGxheWVkIGZvciB0aGlzIGFjdGlvblxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHR0ZXh0OiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBSZWZlcmVuY2UgdG8gdGhlIGtleSBvZiBhbm90aGVyIGFjdGlvbiBhbHJlYWR5IGRpc3BsYXllZCBpbiB0aGUgdG9vbGJhciB0byBwcm9wZXJseSBwbGFjZSB0aGlzIG9uZVxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhbmNob3I/OiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBEZWZpbmVzIHdoZXJlIHRoaXMgYWN0aW9uIHNob3VsZCBiZSBwbGFjZWQgcmVsYXRpdmUgdG8gdGhlIGRlZmluZWQgYW5jaG9yXG5cdCAqXG5cdCAqIEFsbG93ZWQgdmFsdWVzIGFyZSBgQmVmb3JlYCBhbmQgYEFmdGVyYFxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRwbGFjZW1lbnQ/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIEV2ZW50IGhhbmRsZXIgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHVzZXIgY2hvb3NlcyB0aGUgYWN0aW9uXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHByZXNzOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIERlZmluZXMgaWYgdGhlIGFjdGlvbiByZXF1aXJlcyBhIHNlbGVjdGlvbi5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0cmVxdWlyZXNTZWxlY3Rpb24/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBhY3Rpb25cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0ZW5hYmxlZD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBBY3Rpb25Hcm91cCA9IHtcblx0LyoqXG5cdCAqIERlZmluZXMgbmVzdGVkIGFjdGlvbnNcblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YWN0aW9uczogQWN0aW9uW107XG5cblx0LyoqXG5cdCAqIFRoZSB0ZXh0IHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQgZm9yIHRoaXMgYWN0aW9uIGdyb3VwXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHRleHQ6IHN0cmluZztcblxuXHQvKipcblx0ICogRGVmaW5lcyB3aGVyZSB0aGlzIGFjdGlvbiBncm91cCBzaG91bGQgYmUgcGxhY2VkIHJlbGF0aXZlIHRvIHRoZSBkZWZpbmVkIGFuY2hvclxuXHQgKlxuXHQgKiBBbGxvd2VkIHZhbHVlcyBhcmUgYEJlZm9yZWAgYW5kIGBBZnRlcmBcblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0cGxhY2VtZW50Pzogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBSZWZlcmVuY2UgdG8gdGhlIGtleSBvZiBhbm90aGVyIGFjdGlvbiBvciBhY3Rpb24gZ3JvdXAgYWxyZWFkeSBkaXNwbGF5ZWQgaW4gdGhlIHRvb2xiYXIgdG8gcHJvcGVybHkgcGxhY2UgdGhpcyBvbmVcblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YW5jaG9yPzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBEZWZpbml0aW9uIG9mIGEgY3VzdG9tIGNvbHVtbiB0byBiZSB1c2VkIGluc2lkZSB0aGUgdGFibGUuXG4gKlxuICogVGhlIHRlbXBsYXRlIGZvciB0aGUgY29sdW1uIGhhcyB0byBiZSBwcm92aWRlZCBhcyB0aGUgZGVmYXVsdCBhZ2dyZWdhdGlvblxuICpcbiAqIEBhbGlhcyBzYXAuZmUubWFjcm9zLnRhYmxlLkNvbHVtblxuICogQHB1YmxpY1xuICogQGV4cGVyaW1lbnRhbFxuICovXG5leHBvcnQgdHlwZSBDb2x1bW4gPSB7XG5cdC8qKlxuXHQgKiBVbmlxdWUgaWRlbnRpZmllciBvZiB0aGUgY29sdW1uXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGtleTogc3RyaW5nO1xuXHQvKipcblx0ICogVGhlIHRleHQgdGhhdCB3aWxsIGJlIGRpc3BsYXllZCBmb3IgdGhpcyBjb2x1bW4gaGVhZGVyXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGhlYWRlcjogc3RyaW5nO1xuXHQvKipcblx0ICogUmVmZXJlbmNlIHRvIHRoZSBrZXkgb2YgYW5vdGhlciBjb2x1bW4gYWxyZWFkeSBkaXNwbGF5ZWQgaW4gdGhlIHRhYmxlIHRvIHByb3Blcmx5IHBsYWNlIHRoaXMgb25lXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGFuY2hvcj86IHN0cmluZztcblx0LyoqXG5cdCAqIERlZmluZXMgdGhlIGNvbHVtbiBpbXBvcnRhbmNlXG5cdCAqXG5cdCAqIFlvdSBjYW4gZGVmaW5lIHdoaWNoIGNvbHVtbnMgc2hvdWxkIGJlIGF1dG9tYXRpY2FsbHkgbW92ZWQgdG8gdGhlIHBvcC1pbiBhcmVhIGJhc2VkIG9uIHRoZWlyIGltcG9ydGFuY2Vcblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0aW1wb3J0YW5jZT86IHN0cmluZztcblx0LyoqXG5cdCAqIERlZmluZXMgd2hlcmUgdGhpcyBjb2x1bW4gc2hvdWxkIGJlIHBsYWNlZCByZWxhdGl2ZSB0byB0aGUgZGVmaW5lZCBhbmNob3Jcblx0ICpcblx0ICogQWxsb3dlZCB2YWx1ZXMgYXJlIGBCZWZvcmVgIGFuZCBgQWZ0ZXJgXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHBsYWNlbWVudD86IHN0cmluZztcbn07XG5cbi8qKlxuICogQnVpbGRpbmcgYmxvY2sgdXNlZCB0byBjcmVhdGUgYSB0YWJsZSBiYXNlZCBvbiB0aGUgbWV0YWRhdGEgcHJvdmlkZWQgYnkgT0RhdGEgVjQuXG4gKiA8YnI+XG4gKiBVc3VhbGx5LCBhIExpbmVJdGVtIG9yIFByZXNlbnRhdGlvblZhcmlhbnQgYW5ub3RhdGlvbiBpcyBleHBlY3RlZCwgYnV0IHRoZSBUYWJsZSBidWlsZGluZyBibG9jayBjYW4gYWxzbyBiZSB1c2VkIHRvIGRpc3BsYXkgYW4gRW50aXR5U2V0LlxuICpcbiAqXG4gKiBVc2FnZSBleGFtcGxlOlxuICogPHByZT5cbiAqICZsdDttYWNybzpUYWJsZSBpZD1cIk15VGFibGVcIiBtZXRhUGF0aD1cIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5MaW5lSXRlbVwiIC8mZ3Q7XG4gKiA8L3ByZT5cbiAqXG4gKiBAYWxpYXMgc2FwLmZlLm1hY3Jvcy5UYWJsZVxuICogQHB1YmxpY1xuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUubWFjcm9zLlRhYmxlQVBJXCIpXG5jbGFzcyBUYWJsZUFQSSBleHRlbmRzIE1hY3JvQVBJIHtcblx0Y3JlYXRpbmdFbXB0eVJvd3M/OiBib29sZWFuO1xuXHRjb25zdHJ1Y3RvcihtU2V0dGluZ3M/OiBQcm9wZXJ0aWVzT2Y8VGFibGVBUEk+LCAuLi5vdGhlcnM6IGFueVtdKSB7XG5cdFx0c3VwZXIobVNldHRpbmdzIGFzIGFueSwgLi4ub3RoZXJzKTtcblxuXHRcdGlmICh0aGlzLmNvbnRlbnQpIHtcblx0XHRcdHRoaXMuY29udGVudC5hdHRhY2hFdmVudChcInNlbGVjdGlvbkNoYW5nZVwiLCB7fSwgdGhpcy5vblRhYmxlU2VsZWN0aW9uQ2hhbmdlLCB0aGlzKTtcblx0XHR9XG5cdH1cblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcInNhcC51aS5tb2RlbC5Db250ZXh0XCIgfSlcblx0dGFibGVEZWZpbml0aW9uITogVGFibGVWaXN1YWxpemF0aW9uO1xuXG5cdC8qKlxuXHQgKiBBbiBleHByZXNzaW9uIHRoYXQgYWxsb3dzIHlvdSB0byBjb250cm9sIHRoZSAncmVhZC1vbmx5JyBzdGF0ZSBvZiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIElmIHlvdSBkbyBub3Qgc2V0IGFueSBleHByZXNzaW9uLCBTQVAgRmlvcmkgZWxlbWVudHMgaG9va3MgaW50byB0aGUgc3RhbmRhcmQgbGlmZWN5Y2xlIHRvIGRldGVybWluZSB0aGUgY3VycmVudCBzdGF0ZS5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIgfSlcblx0cmVhZE9ubHkhOiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgdGFibGUgY29udHJvbC5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRpZCE6IHN0cmluZztcblxuXHQvKipcblx0ICogQW4gZXhwcmVzc2lvbiB0aGF0IGFsbG93cyB5b3UgdG8gY29udHJvbCB0aGUgJ2J1c3knIHN0YXRlIG9mIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcblx0YnVzeSE6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIERlZmluZXMgdGhlIHR5cGUgb2YgdGFibGUgdGhhdCB3aWxsIGJlIHVzZWQgYnkgdGhlIGJ1aWxkaW5nIGJsb2NrIHRvIHJlbmRlciB0aGUgZGF0YS5cblx0ICpcblx0ICogQWxsb3dlZCB2YWx1ZXMgYXJlIGBHcmlkVGFibGVgIGFuZCBgUmVzcG9uc2l2ZVRhYmxlYFxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiLCBkZWZhdWx0VmFsdWU6IFwiUmVzcG9uc2l2ZVRhYmxlXCIgfSlcblx0dHlwZSE6IHN0cmluZztcblxuXHQvKipcblx0ICogQ29udHJvbHMgaWYgdGhlIGV4cG9ydCBmdW5jdGlvbmFsaXR5IG9mIHRoZSB0YWJsZSBpcyBlbmFibGVkIG9yIG5vdC5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogdHJ1ZSB9KVxuXHRlbmFibGVFeHBvcnQhOiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBDb250cm9scyBpZiB0aGUgcGFzdGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgdGFibGUgaXMgZW5hYmxlZCBvciBub3QuXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pXG5cdGVuYWJsZVBhc3RlITogYm9vbGVhbjtcblxuXHQvKipcblx0ICogQ29udHJvbHMgd2hldGhlciB0aGUgdGFibGUgY2FuIGJlIG9wZW5lZCBpbiBmdWxsc2NyZWVuIG1vZGUgb3Igbm90LlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiwgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KVxuXHRlbmFibGVGdWxsU2NyZWVuITogYm9vbGVhbjtcblxuXHQvKipcblx0ICogSUQgb2YgdGhlIEZpbHRlckJhciBidWlsZGluZyBibG9jayBhc3NvY2lhdGVkIHdpdGggdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdGZpbHRlckJhciE6IHN0cmluZztcblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgc2VsZWN0aW9uIG1vZGUgdG8gYmUgdXNlZCBieSB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEFsbG93ZWQgdmFsdWVzIGFyZSBgTm9uZWAsIGBTaW5nbGVgLCBgTXVsdGlgIG9yIGBBdXRvYFxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdHNlbGVjdGlvbk1vZGUhOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFNwZWNpZmllcyB0aGUgaGVhZGVyIHRleHQgdGhhdCBpcyBzaG93biBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0aGVhZGVyITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBTcGVjaWZpZXMgdGhlIGhlYWRlciB0ZXh0IHRoYXQgaXMgc2hvd24gaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiwgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KVxuXHRlbmFibGVBdXRvQ29sdW1uV2lkdGghOiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBDb250cm9scyBpZiB0aGUgaGVhZGVyIHRleHQgc2hvdWxkIGJlIHNob3duIG9yIG5vdC5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogdHJ1ZSB9KVxuXHRoZWFkZXJWaXNpYmxlITogYm9vbGVhbjtcblxuXHQvKipcblx0ICpcblx0ICpcblx0ICogQHByaXZhdGVcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pXG5cdGRhdGFJbml0aWFsaXplZCE6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiwgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KVxuXHRiaW5kaW5nU3VzcGVuZGVkITogYm9vbGVhbjtcblxuXHQvKipcblx0ICpcblx0ICpcblx0ICogQHByaXZhdGVcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pXG5cdG91dERhdGVkQmluZGluZyE6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiwgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KVxuXHRwZW5kaW5nUmVxdWVzdCE6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIEFuIGV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZSB1c2VyIGNob29zZXMgYSByb3c7IHRoZSBldmVudCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB3aGljaCByb3cgd2FzIGNob3Nlbi5cblx0ICpcblx0ICogWW91IGNhbiBzZXQgdGhpcyBpbiBvcmRlciB0byBoYW5kbGUgdGhlIG5hdmlnYXRpb24gbWFudWFsbHkuXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBldmVudCgpXG5cdHJvd1ByZXNzITogRnVuY3Rpb247XG5cblx0LyoqXG5cdCAqIEFuIGV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZSBUYWJsZSBTdGF0ZSBjaGFuZ2VzLlxuXHQgKlxuXHQgKiBZb3UgY2FuIHNldCB0aGlzIGluIG9yZGVyIHRvIHN0b3JlIHRoZSB0YWJsZSBzdGF0ZSBpbiB0aGUgYXBwc3RhdGUuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRAZXZlbnQoKVxuXHRzdGF0ZUNoYW5nZSE6IEZ1bmN0aW9uO1xuXG5cdEBldmVudCgpXG5cdGludGVybmFsRGF0YVJlcXVlc3RlZCE6IEZ1bmN0aW9uO1xuXG5cdC8qKlxuXHQgKiBDb250cm9scyB3aGljaCBvcHRpb25zIHNob3VsZCBiZSBlbmFibGVkIGZvciB0aGUgdGFibGUgcGVyc29uYWxpemF0aW9uIGRpYWxvZy5cblx0ICpcblx0ICogSWYgaXQgaXMgc2V0IHRvIGB0cnVlYCwgYWxsIHBvc3NpYmxlIG9wdGlvbnMgZm9yIHRoaXMga2luZCBvZiB0YWJsZSBhcmUgZW5hYmxlZC48YnIvPlxuXHQgKiBJZiBpdCBpcyBzZXQgdG8gYGZhbHNlYCwgcGVyc29uYWxpemF0aW9uIGlzIGRpc2FibGVkLjxici8+XG5cdCAqPGJyLz5cblx0ICogWW91IGNhbiBhbHNvIHByb3ZpZGUgYSBtb3JlIGdyYW51bGFyIGNvbnRyb2wgZm9yIHRoZSBwZXJzb25hbGl6YXRpb24gYnkgcHJvdmlkaW5nIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgd2l0aCB0aGUgb3B0aW9ucyB5b3Ugd2FudCB0byBiZSBhdmFpbGFibGUuPGJyLz5cblx0ICogQXZhaWxhYmxlIG9wdGlvbnMgYXJlOjxici8+XG5cdCAqICAtIFNvcnQ8YnIvPlxuXHQgKiAgLSBDb2x1bW48YnIvPlxuXHQgKiAgLSBGaWx0ZXI8YnIvPlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW58c3RyaW5nXCIsIGRlZmF1bHRWYWx1ZTogdHJ1ZSB9KVxuXHRwZXJzb25hbGl6YXRpb24hOiBib29sZWFuIHwgc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBDb250cm9scyB0aGUga2luZCBvZiB2YXJpYW50IG1hbmFnZW1lbnQgdGhhdCBzaG91bGQgYmUgZW5hYmxlZCBmb3IgdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBBbGxvd2VkIHZhbHVlcyBhcmUgYFBhZ2VgLCBgQ29udHJvbGAgYW5kIGBOb25lYC48YnIvPlxuXHQgKiBJZiB0aGUgdGFibGUgaXMgdXNlZCB3aXRoaW4gYSBTQVAgRmlvcmkgZWxlbWVudHMgdGVtcGxhdGUsIHRoZSBkZWZhdWx0IHZhbHVlIHdpbGwgYmUgdGFrZW4gZnJvbSB0aGUgY3VycmVudCBwYWdlIHZhcmlhbnQgbWFuYWdlbWVudC48YnIvPlxuXHQgKiBPdGhlcndpc2UgaXQncyBgTm9uZWAuXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0dmFyaWFudE1hbmFnZW1lbnQhOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIEdyb3VwcyBtZW51IGFjdGlvbnMgYnkga2V5LlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdG1lbnU/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIERlZmluZXMgd2hldGhlciB0byBkaXNwbGF5IHRoZSBzZWFyY2ggYWN0aW9uLlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiwgZGVmYXVsdFZhbHVlOiB0cnVlIH0pXG5cdGlzU2VhcmNoYWJsZT86IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIEdldHMgY29udGV4dHMgZnJvbSB0aGUgdGFibGUgdGhhdCBoYXZlIGJlZW4gc2VsZWN0ZWQgYnkgdGhlIHVzZXIuXG5cdCAqXG5cdCAqIEByZXR1cm5zIENvbnRleHRzIG9mIHRoZSByb3dzIHNlbGVjdGVkIGJ5IHRoZSB1c2VyXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGdldFNlbGVjdGVkQ29udGV4dHMoKTogQ29udGV4dFtdIHtcblx0XHRyZXR1cm4gKHRoaXMuY29udGVudCBhcyBhbnkpLmdldFNlbGVjdGVkQ29udGV4dHMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGEgbWVzc2FnZSB0byB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIFRoZSBtZXNzYWdlIGFwcGxpZXMgdG8gdGhlIHdob2xlIHRhYmxlIGFuZCBub3QgdG8gYW4gaW5kaXZpZHVhbCB0YWJsZSByb3cuXG5cdCAqXG5cdCAqIEBwYXJhbSBbcGFyYW1ldGVyc10gVGhlIHBhcmFtZXRlcnMgdG8gY3JlYXRlIHRoZSBtZXNzYWdlXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLnR5cGUgTWVzc2FnZSB0eXBlXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLm1lc3NhZ2UgTWVzc2FnZSB0ZXh0XG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmRlc2NyaXB0aW9uIE1lc3NhZ2UgZGVzY3JpcHRpb25cblx0ICogQHBhcmFtIHBhcmFtZXRlcnMucGVyc2lzdGVudCBUcnVlIGlmIHRoZSBtZXNzYWdlIGlzIHBlcnNpc3RlbnRcblx0ICogQHJldHVybnMgVGhlIElEIG9mIHRoZSBtZXNzYWdlXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGFkZE1lc3NhZ2UocGFyYW1ldGVyczogeyB0eXBlPzogTWVzc2FnZVR5cGU7IG1lc3NhZ2U/OiBzdHJpbmc7IGRlc2NyaXB0aW9uPzogc3RyaW5nOyBwZXJzaXN0ZW50PzogYm9vbGVhbiB9KTogc3RyaW5nIHtcblx0XHRjb25zdCBtc2dNYW5hZ2VyID0gdGhpcy5fZ2V0TWVzc2FnZU1hbmFnZXIoKTtcblxuXHRcdGNvbnN0IG9UYWJsZSA9IHRoaXMuY29udGVudCBhcyBhbnkgYXMgVGFibGU7XG5cblx0XHRjb25zdCBvTWVzc2FnZSA9IG5ldyBNZXNzYWdlKHtcblx0XHRcdHRhcmdldDogb1RhYmxlLmdldFJvd0JpbmRpbmcoKS5nZXRSZXNvbHZlZFBhdGgoKSxcblx0XHRcdHR5cGU6IHBhcmFtZXRlcnMudHlwZSxcblx0XHRcdG1lc3NhZ2U6IHBhcmFtZXRlcnMubWVzc2FnZSxcblx0XHRcdHByb2Nlc3Nvcjogb1RhYmxlLmdldE1vZGVsKCksXG5cdFx0XHRkZXNjcmlwdGlvbjogcGFyYW1ldGVycy5kZXNjcmlwdGlvbixcblx0XHRcdHBlcnNpc3RlbnQ6IHBhcmFtZXRlcnMucGVyc2lzdGVudFxuXHRcdH0pO1xuXG5cdFx0bXNnTWFuYWdlci5hZGRNZXNzYWdlcyhvTWVzc2FnZSk7XG5cdFx0cmV0dXJuIG9NZXNzYWdlLmdldElkKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyBhIG1lc3NhZ2UgZnJvbSB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwYXJhbSBpZCBUaGUgaWQgb2YgdGhlIG1lc3NhZ2Vcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0cmVtb3ZlTWVzc2FnZShpZDogc3RyaW5nKSB7XG5cdFx0Y29uc3QgbXNnTWFuYWdlciA9IHRoaXMuX2dldE1lc3NhZ2VNYW5hZ2VyKCk7XG5cdFx0Y29uc3QgbWVzc2FnZXMgPSBtc2dNYW5hZ2VyLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKTtcblx0XHRjb25zdCByZXN1bHQgPSBtZXNzYWdlcy5maW5kKChlOiBhbnkpID0+IGUuaWQgPT09IGlkKTtcblx0XHRpZiAocmVzdWx0KSB7XG5cdFx0XHRtc2dNYW5hZ2VyLnJlbW92ZU1lc3NhZ2VzKHJlc3VsdCk7XG5cdFx0fVxuXHR9XG5cblx0X2dldE1lc3NhZ2VNYW5hZ2VyKCkge1xuXHRcdHJldHVybiBzYXAudWkuZ2V0Q29yZSgpLmdldE1lc3NhZ2VNYW5hZ2VyKCk7XG5cdH1cblxuXHQvKipcblx0ICogQW4gZXZlbnQgdHJpZ2dlcmVkIHdoZW4gdGhlIHNlbGVjdGlvbiBpbiB0aGUgdGFibGUgY2hhbmdlcy5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QGV2ZW50KClcblx0c2VsZWN0aW9uQ2hhbmdlITogRnVuY3Rpb247XG5cblx0X2dldFJvd0JpbmRpbmcoKSB7XG5cdFx0Y29uc3Qgb1RhYmxlID0gKHRoaXMgYXMgYW55KS5nZXRDb250ZW50KCk7XG5cdFx0cmV0dXJuIG9UYWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdH1cblxuXHRnZXRDb3VudHMoKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRjb25zdCBvVGFibGUgPSAodGhpcyBhcyBhbnkpLmdldENvbnRlbnQoKTtcblx0XHRyZXR1cm4gVGFibGVVdGlscy5nZXRMaXN0QmluZGluZ0ZvckNvdW50KG9UYWJsZSwgb1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KCksIHtcblx0XHRcdGJhdGNoR3JvdXBJZDogIXRoaXMuZ2V0UHJvcGVydHkoXCJiaW5kaW5nU3VzcGVuZGVkXCIpID8gb1RhYmxlLmRhdGEoXCJiYXRjaEdyb3VwSWRcIikgOiBcIiRhdXRvXCIsXG5cdFx0XHRhZGRpdGlvbmFsRmlsdGVyczogVGFibGVVdGlscy5nZXRIaWRkZW5GaWx0ZXJzKG9UYWJsZSlcblx0XHR9KVxuXHRcdFx0LnRoZW4oKGlWYWx1ZTogYW55KSA9PiB7XG5cdFx0XHRcdHJldHVybiBUYWJsZVV0aWxzLmdldENvdW50Rm9ybWF0dGVkKGlWYWx1ZSk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIFwiMFwiO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRAeG1sRXZlbnRIYW5kbGVyKClcblx0b25UYWJsZVJvd1ByZXNzKG9FdmVudDogVUk1RXZlbnQsIG9Db250cm9sbGVyOiBQYWdlQ29udHJvbGxlciwgb0NvbnRleHQ6IENvbnRleHQsIG1QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHQvLyBwcmV2ZW50IG5hdmlnYXRpb24gdG8gYW4gZW1wdHkgcm93XG5cdFx0aWYgKG9Db250ZXh0ICYmIG9Db250ZXh0LmlzSW5hY3RpdmUoKSAmJiBvQ29udGV4dC5pc1RyYW5zaWVudCgpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdC8vIEluIHRoZSBjYXNlIG9mIGFuIGFuYWx5dGljYWwgdGFibGUsIGlmIHdlJ3JlIHRyeWluZyB0byBuYXZpZ2F0ZSB0byBhIGNvbnRleHQgY29ycmVzcG9uZGluZyB0byBhIHZpc3VhbCBncm91cCBvciBncmFuZCB0b3RhbFxuXHRcdC8vIC0tPiBDYW5jZWwgbmF2aWdhdGlvblxuXHRcdGlmIChcblx0XHRcdG9Db250ZXh0ICYmXG5cdFx0XHRvQ29udGV4dC5pc0EoXCJzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dFwiKSAmJlxuXHRcdFx0dHlwZW9mIG9Db250ZXh0LmdldFByb3BlcnR5KFwiQCR1aTUubm9kZS5pc0V4cGFuZGVkXCIpID09PSBcImJvb2xlYW5cIlxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQob0NvbnRyb2xsZXIgYXMgYW55KS5fcm91dGluZy5uYXZpZ2F0ZUZvcndhcmRUb0NvbnRleHQob0NvbnRleHQsIG1QYXJhbWV0ZXJzKTtcblx0XHR9XG5cdH1cblxuXHRAeG1sRXZlbnRIYW5kbGVyKClcblx0b25JbnRlcm5hbERhdGFSZWNlaXZlZChvRXZlbnQ6IFVJNUV2ZW50KSB7XG5cdFx0aWYgKG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJlcnJvclwiKSkge1xuXHRcdFx0dGhpcy5nZXRDb250cm9sbGVyKCkubWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VEaWFsb2coKTtcblx0XHR9XG5cdH1cblxuXHRAeG1sRXZlbnRIYW5kbGVyKClcblx0b25JbnRlcm5hbERhdGFSZXF1ZXN0ZWQob0V2ZW50OiBVSTVFdmVudCkge1xuXHRcdGlmIChvRXZlbnQgJiYgb0V2ZW50LmdldFNvdXJjZSkge1xuXHRcdFx0Y29uc3QgcGF0aFRvQmVSZW1vdmVkID0gKG9FdmVudC5nZXRTb3VyY2UoKSBhcyBhbnkpPy5nZXRIZWFkZXJDb250ZXh0KCk/LmdldFBhdGgoKTtcblx0XHRcdHRoaXMuZ2V0Q29udHJvbGxlcigpLm1lc3NhZ2VIYW5kbGVyLnJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyh1bmRlZmluZWQsIHRydWUsIHBhdGhUb0JlUmVtb3ZlZCk7XG5cdFx0fVxuXHRcdHRoaXMuc2V0UHJvcGVydHkoXCJkYXRhSW5pdGlhbGl6ZWRcIiwgdHJ1ZSk7XG5cdFx0KHRoaXMgYXMgYW55KS5maXJlRXZlbnQoXCJpbnRlcm5hbERhdGFSZXF1ZXN0ZWRcIik7XG5cdH1cblxuXHRAeG1sRXZlbnRIYW5kbGVyKClcblx0b25QYXN0ZShvRXZlbnQ6IFVJNUV2ZW50LCBvQ29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIpIHtcblx0XHQvLyBJZiBwYXN0ZSBpcyBkaXNhYmxlIG9yIGlmIHdlJ3JlIG5vdCBpbiBlZGl0IG1vZGUsIHdlIGNhbid0IHBhc3RlIGFueXRoaW5nXG5cdFx0aWYgKCF0aGlzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmVuYWJsZVBhc3RlIHx8ICF0aGlzLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGFSYXdQYXN0ZWREYXRhID0gb0V2ZW50LmdldFBhcmFtZXRlcihcImRhdGFcIiksXG5cdFx0XHRvVGFibGUgPSBvRXZlbnQuZ2V0U291cmNlKCkgYXMgVGFibGU7XG5cdFx0bGV0IG9SZXNvdXJjZU1vZGVsO1xuXG5cdFx0aWYgKG9UYWJsZS5nZXRFbmFibGVQYXN0ZSgpID09PSB0cnVlKSB7XG5cdFx0XHRQYXN0ZUhlbHBlci5wYXN0ZURhdGEoYVJhd1Bhc3RlZERhdGEsIG9UYWJsZSwgb0NvbnRyb2xsZXIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvUmVzb3VyY2VNb2RlbCA9IHNhcC51aS5nZXRDb3JlKCkuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIikgYXMgUmVzb3VyY2VCdW5kbGU7XG5cdFx0XHRNZXNzYWdlQm94LmVycm9yKG9SZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX09QX0NPTlRST0xMRVJfU0FQRkVfUEFTVEVfRElTQUJMRURfTUVTU0FHRVwiKSwge1xuXHRcdFx0XHR0aXRsZTogb1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0VSUk9SXCIpXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvLyBUaGlzIGV2ZW50IHdpbGwgYWxsb3cgdXMgdG8gaW50ZXJjZXB0IHRoZSBleHBvcnQgYmVmb3JlIGlzIHRyaWdnZXJlZCB0byBjb3ZlciBzcGVjaWZpYyBjYXNlc1xuXHQvLyB0aGF0IGNvdWxkbid0IGJlIGFkZHJlc3NlZCBvbiB0aGUgcHJvcGVydHlJbmZvcyBmb3IgZWFjaCBjb2x1bW4uXG5cdC8vIGUuZy4gRml4ZWQgVGFyZ2V0IFZhbHVlIGZvciB0aGUgZGF0YXBvaW50c1xuXHRAeG1sRXZlbnRIYW5kbGVyKClcblx0b25CZWZvcmVFeHBvcnQob0V2ZW50OiBVSTVFdmVudCkge1xuXHRcdGNvbnN0IGlzU3BsaXRNb2RlID0gKG9FdmVudC5nZXRQYXJhbWV0ZXJzKCkgYXMgYW55KS51c2VyRXhwb3J0U2V0dGluZ3Muc3BsaXRDZWxscyxcblx0XHRcdG9UYWJsZUNvbnRyb2xsZXIgPSBvRXZlbnQuZ2V0U291cmNlKCkgYXMgUGFnZUNvbnRyb2xsZXIsXG5cdFx0XHRvRXhwb3J0Q29sdW1ucyA9IChvRXZlbnQuZ2V0UGFyYW1ldGVycygpIGFzIGFueSkuZXhwb3J0U2V0dGluZ3Mud29ya2Jvb2s/LmNvbHVtbnMsXG5cdFx0XHRvVGFibGVDb2x1bW5zID0gdGhpcy50YWJsZURlZmluaXRpb24uY29sdW1ucztcblxuXHRcdFRhYmxlQVBJLnVwZGF0ZUV4cG9ydFNldHRpbmdzKG9FeHBvcnRDb2x1bW5zLCBvVGFibGVDb2x1bW5zLCBvVGFibGVDb250cm9sbGVyLCBpc1NwbGl0TW9kZSk7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgTURDIERhdGFTdGF0ZUluZGljYXRvciBwbHVnaW4gdG8gZGlzcGxheSBtZXNzYWdlU3RyaXAgb24gYSB0YWJsZS5cblx0ICpcblx0ICogQHBhcmFtIG9NZXNzYWdlXG5cdCAqIEBwYXJhbSBvVGFibGVcblx0ICogQG5hbWUgZGF0YVN0YXRlRmlsdGVyXG5cdCAqIEByZXR1cm5zIFdoZXRoZXIgdG8gcmVuZGVyIHZpc2libGUgdGhlIG1lc3NhZ2VTdHJpcFxuXHQgKi9cblx0c3RhdGljIGRhdGFTdGF0ZUluZGljYXRvckZpbHRlcihvTWVzc2FnZTogYW55LCBvVGFibGU6IGFueSk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHNUYWJsZUNvbnRleHRCaW5kaW5nUGF0aCA9IG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCk7XG5cdFx0Y29uc3Qgc1RhYmxlUm93QmluZGluZyA9IChzVGFibGVDb250ZXh0QmluZGluZ1BhdGggPyBgJHtzVGFibGVDb250ZXh0QmluZGluZ1BhdGh9L2AgOiBcIlwiKSArIG9UYWJsZS5nZXRSb3dCaW5kaW5nKCkuZ2V0UGF0aCgpO1xuXHRcdHJldHVybiBzVGFibGVSb3dCaW5kaW5nID09PSBvTWVzc2FnZS5nZXRUYXJnZXQoKSA/IHRydWUgOiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGV2ZW50IGhhbmRsZXMgdGhlIERhdGFTdGF0ZSBvZiB0aGUgRGF0YVN0YXRlSW5kaWNhdG9yIHBsdWdpbiBmcm9tIE1EQyBvbiBhIHRhYmxlLlxuXHQgKiBJdCdzIGZpcmVkIHdoZW4gbmV3IGVycm9yIG1lc3NhZ2VzIGFyZSBzZW50IGZyb20gdGhlIGJhY2tlbmQgdG8gdXBkYXRlIHJvdyBoaWdobGlnaHRpbmcuXG5cdCAqXG5cdCAqIEBuYW1lIG9uRGF0YVN0YXRlQ2hhbmdlXG5cdCAqIEBwYXJhbSBvRXZlbnQgRXZlbnQgb2JqZWN0XG5cdCAqL1xuXHRAeG1sRXZlbnRIYW5kbGVyKClcblx0b25EYXRhU3RhdGVDaGFuZ2Uob0V2ZW50OiBVSTVFdmVudCkge1xuXHRcdGNvbnN0IG9EYXRhU3RhdGVJbmRpY2F0b3IgPSBvRXZlbnQuZ2V0U291cmNlKCkgYXMgRGF0YVN0YXRlSW5kaWNhdG9yO1xuXHRcdGNvbnN0IGFGaWx0ZXJlZE1lc3NhZ2VzID0gb0V2ZW50LmdldFBhcmFtZXRlcihcImZpbHRlcmVkTWVzc2FnZXNcIik7XG5cdFx0aWYgKGFGaWx0ZXJlZE1lc3NhZ2VzKSB7XG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbCA9IG9EYXRhU3RhdGVJbmRpY2F0b3IuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcImZpbHRlcmVkTWVzc2FnZXNcIiwgYUZpbHRlcmVkTWVzc2FnZXMsIG9EYXRhU3RhdGVJbmRpY2F0b3IuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBDb250ZXh0KTtcblx0XHR9XG5cdH1cblxuXHRzdGF0aWMgdXBkYXRlRXhwb3J0U2V0dGluZ3Mob0V4cG9ydENvbHVtbnM6IGFueSwgb0NvbHVtbnM6IFRhYmxlQ29sdW1uW10sIG9UYWJsZUNvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyLCBpc1NwbGl0TW9kZTogYm9vbGVhbik6IGFueSB7XG5cdFx0bGV0IHJlZkNvbHVtbjogYW55ID0gbnVsbDtcblx0XHRsZXQgYWRkaXRpb25hbFByb3BlcnR5SW5kZXg6IG51bWJlcjtcblx0XHRvRXhwb3J0Q29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChvQ29sdW1uRXhwb3J0OiBhbnkpIHtcblx0XHRcdG9Db2x1bW5FeHBvcnQubGFiZWwgPSBEZWxlZ2F0ZVV0aWwuZ2V0TG9jYWxpemVkVGV4dChvQ29sdW1uRXhwb3J0LmxhYmVsLCBvVGFibGVDb250cm9sbGVyKTtcblx0XHRcdC8vdHJhbnNsYXRlIGJvb2xlYW4gdmFsdWVzXG5cdFx0XHRpZiAob0NvbHVtbkV4cG9ydC50eXBlID09PSBcIkJvb2xlYW5cIikge1xuXHRcdFx0XHRjb25zdCBvUmVzb3VyY2VNb2RlbCA9IHNhcC51aS5nZXRDb3JlKCkuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLm1hY3Jvc1wiKSBhcyBSZXNvdXJjZUJ1bmRsZTtcblx0XHRcdFx0b0NvbHVtbkV4cG9ydC5mYWxzZVZhbHVlID0gb1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIm5vXCIpO1xuXHRcdFx0XHRvQ29sdW1uRXhwb3J0LnRydWVWYWx1ZSA9IG9SZXNvdXJjZU1vZGVsLmdldFRleHQoXCJ5ZXNcIik7XG5cdFx0XHR9XG5cdFx0XHRvQ29sdW1ucz8uZm9yRWFjaCgoY29sdW1uKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9Db2x1bW4gPSBjb2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRcdFx0XHRpZiAoaXNTcGxpdE1vZGUpIHtcblx0XHRcdFx0XHQvL0FkZCBUYXJnZXRWYWx1ZSBvbiBkdW1teSBjcmVhdGVkIHByb3BlcnR5IHdoZW4gZXhwb3J0aW5nIG9uIHNwbGl0IG1vZGVcblx0XHRcdFx0XHRpZiAob0NvbHVtbi5pc0RhdGFQb2ludEZha2VUYXJnZXRQcm9wZXJ0eSAmJiBvQ29sdW1uLnJlbGF0aXZlUGF0aCA9PT0gb0NvbHVtbkV4cG9ydC5wcm9wZXJ0eSkge1xuXHRcdFx0XHRcdFx0b0NvbHVtbkV4cG9ydC5wcm9wZXJ0eSA9IFtvQ29sdW1uRXhwb3J0LnByb3BlcnR5XTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gTW9kaWZ5IGR1cGxpY2F0ZSBsYWJlbHMgZnJvbSBzcGxpdHRlZCBjb2x1bW5zXG5cdFx0XHRcdFx0Y29uc3QgcmVnZXggPSAvKC4qKS1hZGRpdGlvbmFsUHJvcGVydHkoXFxkKykvLmV4ZWMob0NvbHVtbkV4cG9ydC5jb2x1bW5JZCk7XG5cdFx0XHRcdFx0aWYgKHJlZ2V4ID09PSBudWxsKSB7XG5cdFx0XHRcdFx0XHRhZGRpdGlvbmFsUHJvcGVydHlJbmRleCA9IDE7XG5cdFx0XHRcdFx0XHRyZWZDb2x1bW4gPSBvQ29sdW1uRXhwb3J0O1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAocmVnZXhbMV0gPT09IHJlZkNvbHVtbj8uY29sdW1uSWQpIHtcblx0XHRcdFx0XHRcdG9Db2x1bW5FeHBvcnQubGFiZWwgPVxuXHRcdFx0XHRcdFx0XHRvQ29sdW1uRXhwb3J0LmxhYmVsID09PSByZWZDb2x1bW4ubGFiZWxcblx0XHRcdFx0XHRcdFx0XHQ/IGAke3JlZkNvbHVtbi5sYWJlbH0gKCR7KythZGRpdGlvbmFsUHJvcGVydHlJbmRleH0pYFxuXHRcdFx0XHRcdFx0XHRcdDogb0NvbHVtbkV4cG9ydC5sYWJlbDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly9Nb2RpZnkgZXhwb3J0ZWQgdmFsdWUgd2hlbiB1c2luZyBDb21tdW5pY2F0aW9uLkNvbnRhY3QgZGF0YUZpZWxkRm9yQW5ub3RhdGlvblxuXHRcdFx0XHQvL2NvbnRhY3Q+Zm4gcHJvcGVydHkgc2hvdWxkIGJlIGV4cG9ydGVkXG5cdFx0XHRcdGlmIChvQ29sdW1uLmV4cG9ydENvbnRhY3RQcm9wZXJ0eSAmJiBjb2x1bW4ucHJvcGVydHlJbmZvcykge1xuXHRcdFx0XHRcdGlmIChjb2x1bW4ucHJvcGVydHlJbmZvcz8ubGVuZ3RoID09PSAxICYmIGNvbHVtbi5wcm9wZXJ0eUluZm9zPy50b1N0cmluZygpID09PSBvQ29sdW1uRXhwb3J0LnByb3BlcnR5LnRvU3RyaW5nKCkpIHtcblx0XHRcdFx0XHRcdG9Db2x1bW5FeHBvcnQucHJvcGVydHkgPSBvQ29sdW1uLmV4cG9ydENvbnRhY3RQcm9wZXJ0eTtcblx0XHRcdFx0XHRcdG9Db2x1bW5FeHBvcnQubGFiZWwgPSBvQ29sdW1uLmxhYmVsO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0XHRjb2x1bW4ucHJvcGVydHlJbmZvcz8ubGVuZ3RoID4gMSAmJlxuXHRcdFx0XHRcdFx0b0NvbHVtbi5wcm9wZXJ0eUluZm9zPy5zb21lKChwcm9wKSA9PiBvQ29sdW1uRXhwb3J0LnByb3BlcnR5LmluY2x1ZGVzKHByb3ApKSAmJlxuXHRcdFx0XHRcdFx0QXJyYXkuaXNBcnJheShvQ29sdW1uRXhwb3J0LnByb3BlcnR5KVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0b0NvbHVtbkV4cG9ydC5wcm9wZXJ0eSA9IG9Db2x1bW5FeHBvcnQucHJvcGVydHk/Lm1hcCgoY29sdW1uUHJvcGVydHk6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gb0NvbHVtbi5wcm9wZXJ0eUluZm9zPy5zb21lKChwcm9wKSA9PiBwcm9wID09PSBjb2x1bW5Qcm9wZXJ0eSlcblx0XHRcdFx0XHRcdFx0XHQ/IG9Db2x1bW4uZXhwb3J0Q29udGFjdFByb3BlcnR5XG5cdFx0XHRcdFx0XHRcdFx0OiBjb2x1bW5Qcm9wZXJ0eTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIG9FeHBvcnRDb2x1bW5zO1xuXHR9XG5cblx0cmVzdW1lQmluZGluZyhiUmVxdWVzdElmTm90SW5pdGlhbGl6ZWQ6IGJvb2xlYW4pIHtcblx0XHR0aGlzLnNldFByb3BlcnR5KFwiYmluZGluZ1N1c3BlbmRlZFwiLCBmYWxzZSk7XG5cdFx0aWYgKChiUmVxdWVzdElmTm90SW5pdGlhbGl6ZWQgJiYgISh0aGlzIGFzIGFueSkuZ2V0RGF0YUluaXRpYWxpemVkKCkpIHx8IHRoaXMuZ2V0UHJvcGVydHkoXCJvdXREYXRlZEJpbmRpbmdcIikpIHtcblx0XHRcdHRoaXMuc2V0UHJvcGVydHkoXCJvdXREYXRlZEJpbmRpbmdcIiwgZmFsc2UpO1xuXHRcdFx0KHRoaXMgYXMgYW55KS5nZXRDb250ZW50KCk/LnJlYmluZCgpO1xuXHRcdH1cblx0fVxuXG5cdHJlZnJlc2hOb3RBcHBsaWNhYmxlRmllbGRzKG9GaWx0ZXJDb250cm9sOiBDb250cm9sKTogYW55W10ge1xuXHRcdGNvbnN0IG9UYWJsZSA9ICh0aGlzIGFzIGFueSkuZ2V0Q29udGVudCgpO1xuXHRcdHJldHVybiBGaWx0ZXJVdGlscy5nZXROb3RBcHBsaWNhYmxlRmlsdGVycyhvRmlsdGVyQ29udHJvbCwgb1RhYmxlKTtcblx0fVxuXG5cdHN1c3BlbmRCaW5kaW5nKCkge1xuXHRcdHRoaXMuc2V0UHJvcGVydHkoXCJiaW5kaW5nU3VzcGVuZGVkXCIsIHRydWUpO1xuXHR9XG5cblx0aW52YWxpZGF0ZUNvbnRlbnQoKSB7XG5cdFx0dGhpcy5zZXRQcm9wZXJ0eShcImRhdGFJbml0aWFsaXplZFwiLCBmYWxzZSk7XG5cdFx0dGhpcy5zZXRQcm9wZXJ0eShcIm91dERhdGVkQmluZGluZ1wiLCBmYWxzZSk7XG5cdH1cblxuXHRAeG1sRXZlbnRIYW5kbGVyKClcblx0b25NYXNzRWRpdEJ1dHRvblByZXNzZWQob0V2ZW50OiBVSTVFdmVudCwgcGFnZUNvbnRyb2xsZXI6IGFueSkge1xuXHRcdGNvbnN0IG9UYWJsZSA9IHRoaXMuY29udGVudDtcblx0XHRpZiAocGFnZUNvbnRyb2xsZXIgJiYgcGFnZUNvbnRyb2xsZXIubWFzc0VkaXQpIHtcblx0XHRcdHBhZ2VDb250cm9sbGVyLm1hc3NFZGl0Lm9wZW5NYXNzRWRpdERpYWxvZyhvVGFibGUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRMb2cud2FybmluZyhcIlRoZSBDb250cm9sbGVyIGlzIG5vdCBlbmhhbmNlZCB3aXRoIE1hc3MgRWRpdCBmdW5jdGlvbmFsaXR5XCIpO1xuXHRcdH1cblx0fVxuXHRAeG1sRXZlbnRIYW5kbGVyKClcblx0b25UYWJsZVNlbGVjdGlvbkNoYW5nZShvRXZlbnQ6IFVJNUV2ZW50KSB7XG5cdFx0dGhpcy5maXJlRXZlbnQoXCJzZWxlY3Rpb25DaGFuZ2VcIiwgb0V2ZW50LmdldFBhcmFtZXRlcnMoKSk7XG5cdH1cblxuXHQvKipcblx0ICogRXhwb3NlIHRoZSBpbnRlcm5hbCB0YWJsZSBkZWZpbml0aW9uIGZvciBleHRlcm5hbCB1c2FnZSBpbiBkZWxlZ2F0ZS5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIHRhYmxlRGVmaW5pdGlvblxuXHQgKi9cblx0Z2V0VGFibGVEZWZpbml0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnRhYmxlRGVmaW5pdGlvbjtcblx0fVxuXG5cdGdldElkZW50aWZpZXJDb2x1bW4oKTogYW55IHtcblx0XHRjb25zdCBvVGFibGUgPSAodGhpcyBhcyBhbnkpLmdldENvbnRlbnQoKTtcblx0XHRjb25zdCBoZWFkZXJJbmZvVGl0bGVQYXRoID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5oZWFkZXJJbmZvVGl0bGU7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9UYWJsZSAmJiBvVGFibGUuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdHNDdXJyZW50RW50aXR5U2V0TmFtZSA9IG9UYWJsZS5kYXRhKFwibWV0YVBhdGhcIik7XG5cdFx0Y29uc3QgYVRlY2huaWNhbEtleXMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzQ3VycmVudEVudGl0eVNldE5hbWV9LyRUeXBlLyRLZXlgKTtcblx0XHRjb25zdCBhRmlsdGVyZWRUZWNobmljYWxLZXlzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdFx0YVRlY2huaWNhbEtleXMuZm9yRWFjaChmdW5jdGlvbiAodGVjaG5pY2FsS2V5OiBzdHJpbmcpIHtcblx0XHRcdGlmICh0ZWNobmljYWxLZXkgIT09IFwiSXNBY3RpdmVFbnRpdHlcIikge1xuXHRcdFx0XHRhRmlsdGVyZWRUZWNobmljYWxLZXlzLnB1c2godGVjaG5pY2FsS2V5KTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRjb25zdCBzZW1hbnRpY0tleUNvbHVtbnMgPSB0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpLnNlbWFudGljS2V5cztcblxuXHRcdGNvbnN0IGFWaXNpYmxlQ29sdW1uczogYW55ID0gW107XG5cdFx0Y29uc3QgYUZpbHRlcmVkQ29sdW1tbnM6IGFueSA9IFtdO1xuXHRcdGNvbnN0IGFUYWJsZUNvbHVtbnMgPSBvVGFibGUuZ2V0Q29sdW1ucygpO1xuXHRcdGFUYWJsZUNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAob0NvbHVtbjogYW55KSB7XG5cdFx0XHRjb25zdCBjb2x1bW4gPSBvQ29sdW1uLmdldERhdGFQcm9wZXJ0eSgpO1xuXHRcdFx0YVZpc2libGVDb2x1bW5zLnB1c2goY29sdW1uKTtcblx0XHR9KTtcblxuXHRcdGFWaXNpYmxlQ29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChvQ29sdW1uOiBhbnkpIHtcblx0XHRcdGNvbnN0IG9UZXh0QXJyYW5nZW1lbnQgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzQ3VycmVudEVudGl0eVNldE5hbWV9LyRUeXBlLyR7b0NvbHVtbn1AYCk7XG5cdFx0XHRjb25zdCBzVGV4dEFycmFuZ2VtZW50ID0gb1RleHRBcnJhbmdlbWVudCAmJiBvVGV4dEFycmFuZ2VtZW50W1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0XCJdPy4kUGF0aDtcblx0XHRcdGNvbnN0IHNUZXh0UGxhY2VtZW50ID1cblx0XHRcdFx0b1RleHRBcnJhbmdlbWVudCAmJlxuXHRcdFx0XHRvVGV4dEFycmFuZ2VtZW50W1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFwiXT8uJEVudW1NZW1iZXI7XG5cdFx0XHRhRmlsdGVyZWRDb2x1bW1ucy5wdXNoKHtcblx0XHRcdFx0Y29sdW1uTmFtZTogb0NvbHVtbixcblx0XHRcdFx0c1RleHRBcnJhbmdlbWVudDogc1RleHRBcnJhbmdlbWVudCxcblx0XHRcdFx0c0NvbHVtbk5hbWVWaXNpYmxlOiAhKHNUZXh0UGxhY2VtZW50ID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dE9ubHlcIilcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdGxldCBjb2x1bW46IGFueTtcblx0XHRhRmlsdGVyZWRDb2x1bW1ucy5zb21lKGZ1bmN0aW9uIChvQ29sdW1uOiBhbnkpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0KGhlYWRlckluZm9UaXRsZVBhdGggIT09IHVuZGVmaW5lZCAmJiBvQ29sdW1uPy5jb2x1bW5OYW1lID09PSBoZWFkZXJJbmZvVGl0bGVQYXRoICYmIG9Db2x1bW4/LnNDb2x1bW5OYW1lVmlzaWJsZSkgfHxcblx0XHRcdFx0KG9Db2x1bW4/LnNUZXh0QXJyYW5nZW1lbnQgIT09IHVuZGVmaW5lZCAmJiBvQ29sdW1uPy5zVGV4dEFycmFuZ2VtZW50ID09PSBoZWFkZXJJbmZvVGl0bGVQYXRoKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGNvbHVtbiA9IGhlYWRlckluZm9UaXRsZVBhdGg7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0KHNlbWFudGljS2V5Q29sdW1ucyAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHRcdFx0c2VtYW50aWNLZXlDb2x1bW5zLmxlbmd0aCA9PT0gMSAmJlxuXHRcdFx0XHRcdG9Db2x1bW4/LmNvbHVtbk5hbWUgPT09IHNlbWFudGljS2V5Q29sdW1uc1swXSAmJlxuXHRcdFx0XHRcdG9Db2x1bW4/LnNDb2x1bW5OYW1lVmlzaWJsZSkgfHxcblx0XHRcdFx0KG9Db2x1bW4/LnNUZXh0QXJyYW5nZW1lbnQgIT09IHVuZGVmaW5lZCAmJiBvQ29sdW1uPy5zVGV4dEFycmFuZ2VtZW50ID09PSBzZW1hbnRpY0tleUNvbHVtbnNbMF0pXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29sdW1uID0gc2VtYW50aWNLZXlDb2x1bW5zWzBdO1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdChhRmlsdGVyZWRUZWNobmljYWxLZXlzICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdFx0XHRhRmlsdGVyZWRUZWNobmljYWxLZXlzLmxlbmd0aCA9PT0gMSAmJlxuXHRcdFx0XHRcdG9Db2x1bW4/LmNvbHVtbk5hbWUgPT09IGFGaWx0ZXJlZFRlY2huaWNhbEtleXNbMF0gJiZcblx0XHRcdFx0XHRvQ29sdW1uPy5zQ29sdW1uTmFtZVZpc2libGUpIHx8XG5cdFx0XHRcdChvQ29sdW1uPy5zVGV4dEFycmFuZ2VtZW50ICE9PSB1bmRlZmluZWQgJiYgb0NvbHVtbj8uc1RleHRBcnJhbmdlbWVudCA9PT0gYUZpbHRlcmVkVGVjaG5pY2FsS2V5c1swXSlcblx0XHRcdCkge1xuXHRcdFx0XHRjb2x1bW4gPSBhRmlsdGVyZWRUZWNobmljYWxLZXlzWzBdO1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gY29sdW1uO1xuXHR9XG5cblx0YXN5bmMgc2V0VXBFbXB0eVJvd3Mob1RhYmxlOiBUYWJsZSkge1xuXHRcdGlmICh0aGlzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sPy5jcmVhdGlvbk1vZGUgIT09IENyZWF0aW9uTW9kZS5JbmxpbmVDcmVhdGlvblJvd3MpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgcFdhaXRUYWJsZVJlbmRlcmVkID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcblx0XHRcdGlmIChvVGFibGUuZ2V0RG9tUmVmKCkpIHtcblx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgZGVsZWdhdGUgPSB7XG5cdFx0XHRcdFx0b25BZnRlclJlbmRlcmluZzogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0b1RhYmxlLnJlbW92ZUV2ZW50RGVsZWdhdGUoZGVsZWdhdGUpO1xuXHRcdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdFx0b1RhYmxlLmFkZEV2ZW50RGVsZWdhdGUoZGVsZWdhdGUsIHRoaXMpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGF3YWl0IHBXYWl0VGFibGVSZW5kZXJlZDtcblx0XHRjb25zdCBiSXNJbkVkaXRNb2RlID0gb1RhYmxlLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKTtcblx0XHRpZiAoIWJJc0luRWRpdE1vZGUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3Qgb0JpbmRpbmcgPSBvVGFibGUuZ2V0Um93QmluZGluZygpIGFzIE9EYXRhTGlzdEJpbmRpbmc7XG5cdFx0aWYgKG9CaW5kaW5nLmlzUmVzb2x2ZWQoKSAmJiBvQmluZGluZy5pc0xlbmd0aEZpbmFsKCkpIHtcblx0XHRcdGNvbnN0IHNDb250ZXh0UGF0aCA9IG9CaW5kaW5nLmdldENvbnRleHQoKS5nZXRQYXRoKCk7XG5cdFx0XHRjb25zdCBvSW5hY3RpdmVDb250ZXh0ID0gb0JpbmRpbmcuZ2V0QWxsQ3VycmVudENvbnRleHRzKCkuZmluZChmdW5jdGlvbiAob0NvbnRleHQpIHtcblx0XHRcdFx0cmV0dXJuIG9Db250ZXh0LmlzSW5hY3RpdmUoKSAmJiBvQ29udGV4dC5nZXRQYXRoKCkuc3RhcnRzV2l0aChzQ29udGV4dFBhdGgpO1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAoIW9JbmFjdGl2ZUNvbnRleHQpIHtcblx0XHRcdFx0YXdhaXQgdGhpcy5fY3JlYXRlRW1wdHlSb3cob0JpbmRpbmcsIG9UYWJsZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGFzeW5jIF9jcmVhdGVFbXB0eVJvdyhvQmluZGluZzogT0RhdGFMaXN0QmluZGluZywgb1RhYmxlOiBUYWJsZSkge1xuXHRcdGNvbnN0IGlJbmxpbmVDcmVhdGlvblJvd0NvdW50ID0gdGhpcy50YWJsZURlZmluaXRpb24uY29udHJvbD8uaW5saW5lQ3JlYXRpb25Sb3dDb3VudCB8fCAyO1xuXHRcdGNvbnN0IGFEYXRhID0gW107XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBpSW5saW5lQ3JlYXRpb25Sb3dDb3VudDsgaSArPSAxKSB7XG5cdFx0XHRhRGF0YS5wdXNoKHt9KTtcblx0XHR9XG5cdFx0Y29uc3QgYkF0RW5kID0gb1RhYmxlLmRhdGEoXCJ0YWJsZVR5cGVcIikgIT09IFwiUmVzcG9uc2l2ZVRhYmxlXCI7XG5cdFx0Y29uc3QgYkluYWN0aXZlID0gdHJ1ZTtcblx0XHRjb25zdCBvVmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcob1RhYmxlKTtcblx0XHRjb25zdCBvQ29udHJvbGxlciA9IG9WaWV3LmdldENvbnRyb2xsZXIoKTtcblx0XHRjb25zdCBvSW50ZXJuYWxFZGl0RmxvdyA9IG9Db250cm9sbGVyLl9lZGl0Rmxvdztcblx0XHRpZiAoIXRoaXMuY3JlYXRpbmdFbXB0eVJvd3MpIHtcblx0XHRcdHRoaXMuY3JlYXRpbmdFbXB0eVJvd3MgPSB0cnVlO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgYUNvbnRleHRzID0gYXdhaXQgb0ludGVybmFsRWRpdEZsb3cuY3JlYXRlTXVsdGlwbGVEb2N1bWVudHMoXG5cdFx0XHRcdFx0b0JpbmRpbmcsXG5cdFx0XHRcdFx0YURhdGEsXG5cdFx0XHRcdFx0YkF0RW5kLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdG9Db250cm9sbGVyLmVkaXRGbG93Lm9uQmVmb3JlQ3JlYXRlLFxuXHRcdFx0XHRcdGJJbmFjdGl2ZVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRhQ29udGV4dHM/LmZvckVhY2goZnVuY3Rpb24gKG9Db250ZXh0OiBhbnkpIHtcblx0XHRcdFx0XHRvQ29udGV4dC5jcmVhdGVkKCkuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRpZiAoIW9FcnJvci5jYW5jZWxlZCkge1xuXHRcdFx0XHRcdFx0XHR0aHJvdyBvRXJyb3I7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoZSBhcyBhbnkpO1xuXHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0dGhpcy5jcmVhdGluZ0VtcHR5Um93cyA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBUYWJsZUFQSTtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7O0VBa2pCTyxnQkFBZ0JBLElBQWhCLEVBQXNCQyxPQUF0QixFQUErQjtJQUNyQyxJQUFJO01BQ0gsSUFBSUMsTUFBTSxHQUFHRixJQUFJLEVBQWpCO0lBQ0EsQ0FGRCxDQUVFLE9BQU1HLENBQU4sRUFBUztNQUNWLE9BQU9GLE9BQU8sQ0FB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
757
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJib2R5IiwicmVjb3ZlciIsInJlc3VsdCIsImUiLCJ0aGVuIiwiZmluYWxpemVyIiwiYmluZCIsIlRhYmxlQVBJIiwiZGVmaW5lVUk1Q2xhc3MiLCJwcm9wZXJ0eSIsInR5cGUiLCJkZWZhdWx0VmFsdWUiLCJldmVudCIsInhtbEV2ZW50SGFuZGxlciIsIm1TZXR0aW5ncyIsIm90aGVycyIsImNvbnRlbnQiLCJhdHRhY2hFdmVudCIsIm9uVGFibGVTZWxlY3Rpb25DaGFuZ2UiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwiYWRkTWVzc2FnZSIsInBhcmFtZXRlcnMiLCJtc2dNYW5hZ2VyIiwiX2dldE1lc3NhZ2VNYW5hZ2VyIiwib1RhYmxlIiwib01lc3NhZ2UiLCJNZXNzYWdlIiwidGFyZ2V0IiwiZ2V0Um93QmluZGluZyIsImdldFJlc29sdmVkUGF0aCIsIm1lc3NhZ2UiLCJwcm9jZXNzb3IiLCJnZXRNb2RlbCIsImRlc2NyaXB0aW9uIiwicGVyc2lzdGVudCIsImFkZE1lc3NhZ2VzIiwiZ2V0SWQiLCJyZW1vdmVNZXNzYWdlIiwiaWQiLCJtZXNzYWdlcyIsImdldE1lc3NhZ2VNb2RlbCIsImdldERhdGEiLCJmaW5kIiwicmVtb3ZlTWVzc2FnZXMiLCJzYXAiLCJ1aSIsImdldENvcmUiLCJnZXRNZXNzYWdlTWFuYWdlciIsIl9nZXRSb3dCaW5kaW5nIiwiZ2V0Q29udGVudCIsImdldENvdW50cyIsIlRhYmxlVXRpbHMiLCJnZXRMaXN0QmluZGluZ0ZvckNvdW50IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJiYXRjaEdyb3VwSWQiLCJnZXRQcm9wZXJ0eSIsImRhdGEiLCJhZGRpdGlvbmFsRmlsdGVycyIsImdldEhpZGRlbkZpbHRlcnMiLCJpVmFsdWUiLCJnZXRDb3VudEZvcm1hdHRlZCIsImNhdGNoIiwib25UYWJsZVJvd1ByZXNzIiwib0V2ZW50Iiwib0NvbnRyb2xsZXIiLCJvQ29udGV4dCIsIm1QYXJhbWV0ZXJzIiwiaXNJbmFjdGl2ZSIsImlzVHJhbnNpZW50IiwiaXNBIiwiX3JvdXRpbmciLCJuYXZpZ2F0ZUZvcndhcmRUb0NvbnRleHQiLCJvbkludGVybmFsRGF0YVJlY2VpdmVkIiwiZ2V0UGFyYW1ldGVyIiwiZ2V0Q29udHJvbGxlciIsIm1lc3NhZ2VIYW5kbGVyIiwic2hvd01lc3NhZ2VEaWFsb2ciLCJvbkludGVybmFsRGF0YVJlcXVlc3RlZCIsImdldFNvdXJjZSIsInBhdGhUb0JlUmVtb3ZlZCIsImdldEhlYWRlckNvbnRleHQiLCJnZXRQYXRoIiwicmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzIiwidW5kZWZpbmVkIiwic2V0UHJvcGVydHkiLCJmaXJlRXZlbnQiLCJvblBhc3RlIiwidGFibGVEZWZpbml0aW9uIiwiY29udHJvbCIsImVuYWJsZVBhc3RlIiwiYVJhd1Bhc3RlZERhdGEiLCJvUmVzb3VyY2VNb2RlbCIsImdldEVuYWJsZVBhc3RlIiwiUGFzdGVIZWxwZXIiLCJwYXN0ZURhdGEiLCJnZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUiLCJNZXNzYWdlQm94IiwiZXJyb3IiLCJnZXRUZXh0IiwidGl0bGUiLCJvbkJlZm9yZUV4cG9ydCIsImlzU3BsaXRNb2RlIiwiZ2V0UGFyYW1ldGVycyIsInVzZXJFeHBvcnRTZXR0aW5ncyIsInNwbGl0Q2VsbHMiLCJvVGFibGVDb250cm9sbGVyIiwib0V4cG9ydENvbHVtbnMiLCJleHBvcnRTZXR0aW5ncyIsIndvcmtib29rIiwiY29sdW1ucyIsIm9UYWJsZUNvbHVtbnMiLCJ1cGRhdGVFeHBvcnRTZXR0aW5ncyIsImRhdGFTdGF0ZUluZGljYXRvckZpbHRlciIsInNUYWJsZUNvbnRleHRCaW5kaW5nUGF0aCIsInNUYWJsZVJvd0JpbmRpbmciLCJnZXRUYXJnZXQiLCJvbkRhdGFTdGF0ZUNoYW5nZSIsIm9EYXRhU3RhdGVJbmRpY2F0b3IiLCJhRmlsdGVyZWRNZXNzYWdlcyIsIm9JbnRlcm5hbE1vZGVsIiwib0NvbHVtbnMiLCJyZWZDb2x1bW4iLCJhZGRpdGlvbmFsUHJvcGVydHlJbmRleCIsImZvckVhY2giLCJvQ29sdW1uRXhwb3J0IiwibGFiZWwiLCJEZWxlZ2F0ZVV0aWwiLCJnZXRMb2NhbGl6ZWRUZXh0IiwiZmFsc2VWYWx1ZSIsInRydWVWYWx1ZSIsImNvbHVtbiIsIm9Db2x1bW4iLCJpc0RhdGFQb2ludEZha2VUYXJnZXRQcm9wZXJ0eSIsInJlbGF0aXZlUGF0aCIsInJlZ2V4IiwiZXhlYyIsImNvbHVtbklkIiwicmVzdW1lQmluZGluZyIsImJSZXF1ZXN0SWZOb3RJbml0aWFsaXplZCIsImdldERhdGFJbml0aWFsaXplZCIsInJlYmluZCIsInJlZnJlc2hOb3RBcHBsaWNhYmxlRmllbGRzIiwib0ZpbHRlckNvbnRyb2wiLCJGaWx0ZXJVdGlscyIsImdldE5vdEFwcGxpY2FibGVGaWx0ZXJzIiwic3VzcGVuZEJpbmRpbmciLCJpbnZhbGlkYXRlQ29udGVudCIsIm9uTWFzc0VkaXRCdXR0b25QcmVzc2VkIiwicGFnZUNvbnRyb2xsZXIiLCJtYXNzRWRpdCIsIm9wZW5NYXNzRWRpdERpYWxvZyIsIkxvZyIsIndhcm5pbmciLCJnZXRUYWJsZURlZmluaXRpb24iLCJnZXRJZGVudGlmaWVyQ29sdW1uIiwiaGVhZGVySW5mb1RpdGxlUGF0aCIsImhlYWRlckluZm9UaXRsZSIsIm9NZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJzQ3VycmVudEVudGl0eVNldE5hbWUiLCJhVGVjaG5pY2FsS2V5cyIsImdldE9iamVjdCIsImFGaWx0ZXJlZFRlY2huaWNhbEtleXMiLCJ0ZWNobmljYWxLZXkiLCJwdXNoIiwic2VtYW50aWNLZXlDb2x1bW5zIiwic2VtYW50aWNLZXlzIiwiYVZpc2libGVDb2x1bW5zIiwiYUZpbHRlcmVkQ29sdW1tbnMiLCJhVGFibGVDb2x1bW5zIiwiZ2V0Q29sdW1ucyIsImdldERhdGFQcm9wZXJ0eSIsIm9UZXh0QXJyYW5nZW1lbnQiLCJzVGV4dEFycmFuZ2VtZW50IiwiJFBhdGgiLCJzVGV4dFBsYWNlbWVudCIsIiRFbnVtTWVtYmVyIiwiY29sdW1uTmFtZSIsInNDb2x1bW5OYW1lVmlzaWJsZSIsInNvbWUiLCJsZW5ndGgiLCJzZXRVcEVtcHR5Um93cyIsImNyZWF0aW9uTW9kZSIsIkNyZWF0aW9uTW9kZSIsIklubGluZUNyZWF0aW9uUm93cyIsInBXYWl0VGFibGVSZW5kZXJlZCIsIlByb21pc2UiLCJyZXNvbHZlIiwiZ2V0RG9tUmVmIiwiZGVsZWdhdGUiLCJvbkFmdGVyUmVuZGVyaW5nIiwicmVtb3ZlRXZlbnREZWxlZ2F0ZSIsImFkZEV2ZW50RGVsZWdhdGUiLCJiSXNJbkVkaXRNb2RlIiwib0JpbmRpbmciLCJpc1Jlc29sdmVkIiwiaXNMZW5ndGhGaW5hbCIsInNDb250ZXh0UGF0aCIsImdldENvbnRleHQiLCJvSW5hY3RpdmVDb250ZXh0IiwiZ2V0QWxsQ3VycmVudENvbnRleHRzIiwic3RhcnRzV2l0aCIsIl9jcmVhdGVFbXB0eVJvdyIsImlJbmxpbmVDcmVhdGlvblJvd0NvdW50IiwiaW5saW5lQ3JlYXRpb25Sb3dDb3VudCIsImFEYXRhIiwiaSIsImJBdEVuZCIsImJJbmFjdGl2ZSIsIm9WaWV3IiwiQ29tbW9uVXRpbHMiLCJnZXRUYXJnZXRWaWV3Iiwib0ludGVybmFsRWRpdEZsb3ciLCJfZWRpdEZsb3ciLCJjcmVhdGluZ0VtcHR5Um93cyIsImNyZWF0ZU11bHRpcGxlRG9jdW1lbnRzIiwiZWRpdEZsb3ciLCJvbkJlZm9yZUNyZWF0ZSIsImFDb250ZXh0cyIsImNyZWF0ZWQiLCJvRXJyb3IiLCJjYW5jZWxlZCIsIk1hY3JvQVBJIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJUYWJsZUFQSS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25UYWJsZUNvbHVtbiwgVGFibGVDb2x1bW4sIFRhYmxlVmlzdWFsaXphdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9UYWJsZVwiO1xuaW1wb3J0IHsgQ3JlYXRpb25Nb2RlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0aWVzT2YgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBldmVudCwgcHJvcGVydHksIHhtbEV2ZW50SGFuZGxlciB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IFBhc3RlSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Bhc3RlSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBEZWxlZ2F0ZVV0aWwgZnJvbSBcInNhcC9mZS9tYWNyb3MvRGVsZWdhdGVVdGlsXCI7XG5pbXBvcnQgRmlsdGVyVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyL0ZpbHRlclV0aWxzXCI7XG5pbXBvcnQgVGFibGVVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9VdGlsc1wiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCBEYXRhU3RhdGVJbmRpY2F0b3IgZnJvbSBcInNhcC9tL3BsdWdpbnMvRGF0YVN0YXRlSW5kaWNhdG9yXCI7XG5pbXBvcnQgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHsgTWVzc2FnZVR5cGUgfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgTWFjcm9BUEkgZnJvbSBcIi4vTWFjcm9BUElcIjtcblxuLyoqXG4gKiBEZWZpbml0aW9uIG9mIGEgY3VzdG9tIGFjdGlvbiB0byBiZSB1c2VkIGluc2lkZSB0aGUgdGFibGUgdG9vbGJhclxuICpcbiAqIEBhbGlhcyBzYXAuZmUubWFjcm9zLnRhYmxlLkFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBBY3Rpb24gPSB7XG5cdC8qKlxuXHQgKiBVbmlxdWUgaWRlbnRpZmllciBvZiB0aGUgYWN0aW9uXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGtleTogc3RyaW5nO1xuXHQvKipcblx0ICogVGhlIHRleHQgdGhhdCB3aWxsIGJlIGRpc3BsYXllZCBmb3IgdGhpcyBhY3Rpb25cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0dGV4dDogc3RyaW5nO1xuXHQvKipcblx0ICogUmVmZXJlbmNlIHRvIHRoZSBrZXkgb2YgYW5vdGhlciBhY3Rpb24gYWxyZWFkeSBkaXNwbGF5ZWQgaW4gdGhlIHRvb2xiYXIgdG8gcHJvcGVybHkgcGxhY2UgdGhpcyBvbmVcblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YW5jaG9yPzogc3RyaW5nO1xuXHQvKipcblx0ICogRGVmaW5lcyB3aGVyZSB0aGlzIGFjdGlvbiBzaG91bGQgYmUgcGxhY2VkIHJlbGF0aXZlIHRvIHRoZSBkZWZpbmVkIGFuY2hvclxuXHQgKlxuXHQgKiBBbGxvd2VkIHZhbHVlcyBhcmUgYEJlZm9yZWAgYW5kIGBBZnRlcmBcblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0cGxhY2VtZW50Pzogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBFdmVudCBoYW5kbGVyIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSB1c2VyIGNob29zZXMgdGhlIGFjdGlvblxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRwcmVzczogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBEZWZpbmVzIGlmIHRoZSBhY3Rpb24gcmVxdWlyZXMgYSBzZWxlY3Rpb24uXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHJlcXVpcmVzU2VsZWN0aW9uPzogYm9vbGVhbjtcblxuXHQvKipcblx0ICogRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgYWN0aW9uXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGVuYWJsZWQ/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgQWN0aW9uR3JvdXAgPSB7XG5cdC8qKlxuXHQgKiBEZWZpbmVzIG5lc3RlZCBhY3Rpb25zXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGFjdGlvbnM6IEFjdGlvbltdO1xuXG5cdC8qKlxuXHQgKiBUaGUgdGV4dCB0aGF0IHdpbGwgYmUgZGlzcGxheWVkIGZvciB0aGlzIGFjdGlvbiBncm91cFxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHR0ZXh0OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIERlZmluZXMgd2hlcmUgdGhpcyBhY3Rpb24gZ3JvdXAgc2hvdWxkIGJlIHBsYWNlZCByZWxhdGl2ZSB0byB0aGUgZGVmaW5lZCBhbmNob3Jcblx0ICpcblx0ICogQWxsb3dlZCB2YWx1ZXMgYXJlIGBCZWZvcmVgIGFuZCBgQWZ0ZXJgXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHBsYWNlbWVudD86IHN0cmluZztcblxuXHQvKipcblx0ICogUmVmZXJlbmNlIHRvIHRoZSBrZXkgb2YgYW5vdGhlciBhY3Rpb24gb3IgYWN0aW9uIGdyb3VwIGFscmVhZHkgZGlzcGxheWVkIGluIHRoZSB0b29sYmFyIHRvIHByb3Blcmx5IHBsYWNlIHRoaXMgb25lXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGFuY2hvcj86IHN0cmluZztcbn07XG5cbi8qKlxuICogRGVmaW5pdGlvbiBvZiBhIGN1c3RvbSBjb2x1bW4gdG8gYmUgdXNlZCBpbnNpZGUgdGhlIHRhYmxlLlxuICpcbiAqIFRoZSB0ZW1wbGF0ZSBmb3IgdGhlIGNvbHVtbiBoYXMgdG8gYmUgcHJvdmlkZWQgYXMgdGhlIGRlZmF1bHQgYWdncmVnYXRpb25cbiAqXG4gKiBAYWxpYXMgc2FwLmZlLm1hY3Jvcy50YWJsZS5Db2x1bW5cbiAqIEBwdWJsaWNcbiAqIEBleHBlcmltZW50YWxcbiAqL1xuZXhwb3J0IHR5cGUgQ29sdW1uID0ge1xuXHQvKipcblx0ICogVW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGNvbHVtblxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRrZXk6IHN0cmluZztcblx0LyoqXG5cdCAqIFRoZSB0ZXh0IHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQgZm9yIHRoaXMgY29sdW1uIGhlYWRlclxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRoZWFkZXI6IHN0cmluZztcblx0LyoqXG5cdCAqIFJlZmVyZW5jZSB0byB0aGUga2V5IG9mIGFub3RoZXIgY29sdW1uIGFscmVhZHkgZGlzcGxheWVkIGluIHRoZSB0YWJsZSB0byBwcm9wZXJseSBwbGFjZSB0aGlzIG9uZVxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhbmNob3I/OiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBEZWZpbmVzIHRoZSBjb2x1bW4gaW1wb3J0YW5jZVxuXHQgKlxuXHQgKiBZb3UgY2FuIGRlZmluZSB3aGljaCBjb2x1bW5zIHNob3VsZCBiZSBhdXRvbWF0aWNhbGx5IG1vdmVkIHRvIHRoZSBwb3AtaW4gYXJlYSBiYXNlZCBvbiB0aGVpciBpbXBvcnRhbmNlXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGltcG9ydGFuY2U/OiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBEZWZpbmVzIHdoZXJlIHRoaXMgY29sdW1uIHNob3VsZCBiZSBwbGFjZWQgcmVsYXRpdmUgdG8gdGhlIGRlZmluZWQgYW5jaG9yXG5cdCAqXG5cdCAqIEFsbG93ZWQgdmFsdWVzIGFyZSBgQmVmb3JlYCBhbmQgYEFmdGVyYFxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRwbGFjZW1lbnQ/OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIEJ1aWxkaW5nIGJsb2NrIHVzZWQgdG8gY3JlYXRlIGEgdGFibGUgYmFzZWQgb24gdGhlIG1ldGFkYXRhIHByb3ZpZGVkIGJ5IE9EYXRhIFY0LlxuICogPGJyPlxuICogVXN1YWxseSwgYSBMaW5lSXRlbSBvciBQcmVzZW50YXRpb25WYXJpYW50IGFubm90YXRpb24gaXMgZXhwZWN0ZWQsIGJ1dCB0aGUgVGFibGUgYnVpbGRpbmcgYmxvY2sgY2FuIGFsc28gYmUgdXNlZCB0byBkaXNwbGF5IGFuIEVudGl0eVNldC5cbiAqXG4gKlxuICogVXNhZ2UgZXhhbXBsZTpcbiAqIDxwcmU+XG4gKiAmbHQ7bWFjcm86VGFibGUgaWQ9XCJNeVRhYmxlXCIgbWV0YVBhdGg9XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuTGluZUl0ZW1cIiAvJmd0O1xuICogPC9wcmU+XG4gKlxuICogQGFsaWFzIHNhcC5mZS5tYWNyb3MuVGFibGVcbiAqIEBwdWJsaWNcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLm1hY3Jvcy5UYWJsZUFQSVwiKVxuY2xhc3MgVGFibGVBUEkgZXh0ZW5kcyBNYWNyb0FQSSB7XG5cdGNyZWF0aW5nRW1wdHlSb3dzPzogYm9vbGVhbjtcblx0Y29uc3RydWN0b3IobVNldHRpbmdzPzogUHJvcGVydGllc09mPFRhYmxlQVBJPiwgLi4ub3RoZXJzOiBhbnlbXSkge1xuXHRcdHN1cGVyKG1TZXR0aW5ncyBhcyBhbnksIC4uLm90aGVycyk7XG5cblx0XHRpZiAodGhpcy5jb250ZW50KSB7XG5cdFx0XHR0aGlzLmNvbnRlbnQuYXR0YWNoRXZlbnQoXCJzZWxlY3Rpb25DaGFuZ2VcIiwge30sIHRoaXMub25UYWJsZVNlbGVjdGlvbkNoYW5nZSwgdGhpcyk7XG5cdFx0fVxuXHR9XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzYXAudWkubW9kZWwuQ29udGV4dFwiIH0pXG5cdHRhYmxlRGVmaW5pdGlvbiE6IFRhYmxlVmlzdWFsaXphdGlvbjtcblxuXHQvKipcblx0ICogQW4gZXhwcmVzc2lvbiB0aGF0IGFsbG93cyB5b3UgdG8gY29udHJvbCB0aGUgJ3JlYWQtb25seScgc3RhdGUgb2YgdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBJZiB5b3UgZG8gbm90IHNldCBhbnkgZXhwcmVzc2lvbiwgU0FQIEZpb3JpIGVsZW1lbnRzIGhvb2tzIGludG8gdGhlIHN0YW5kYXJkIGxpZmVjeWNsZSB0byBkZXRlcm1pbmUgdGhlIGN1cnJlbnQgc3RhdGUuXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiIH0pXG5cdHJlYWRPbmx5ITogYm9vbGVhbjtcblxuXHQvKipcblx0ICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIHRhYmxlIGNvbnRyb2wuXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0aWQhOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIEFuIGV4cHJlc3Npb24gdGhhdCBhbGxvd3MgeW91IHRvIGNvbnRyb2wgdGhlICdidXN5JyBzdGF0ZSBvZiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pXG5cdGJ1c3khOiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBEZWZpbmVzIHRoZSB0eXBlIG9mIHRhYmxlIHRoYXQgd2lsbCBiZSB1c2VkIGJ5IHRoZSBidWlsZGluZyBibG9jayB0byByZW5kZXIgdGhlIGRhdGEuXG5cdCAqXG5cdCAqIEFsbG93ZWQgdmFsdWVzIGFyZSBgR3JpZFRhYmxlYCBhbmQgYFJlc3BvbnNpdmVUYWJsZWBcblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiwgZGVmYXVsdFZhbHVlOiBcIlJlc3BvbnNpdmVUYWJsZVwiIH0pXG5cdHR5cGUhOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIENvbnRyb2xzIGlmIHRoZSBleHBvcnQgZnVuY3Rpb25hbGl0eSBvZiB0aGUgdGFibGUgaXMgZW5hYmxlZCBvciBub3QuXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IHRydWUgfSlcblx0ZW5hYmxlRXhwb3J0ITogYm9vbGVhbjtcblxuXHQvKipcblx0ICogQ29udHJvbHMgaWYgdGhlIHBhc3RlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIHRhYmxlIGlzIGVuYWJsZWQgb3Igbm90LlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiwgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KVxuXHRlbmFibGVQYXN0ZSE6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIENvbnRyb2xzIHdoZXRoZXIgdGhlIHRhYmxlIGNhbiBiZSBvcGVuZWQgaW4gZnVsbHNjcmVlbiBtb2RlIG9yIG5vdC5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcblx0ZW5hYmxlRnVsbFNjcmVlbiE6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIElEIG9mIHRoZSBGaWx0ZXJCYXIgYnVpbGRpbmcgYmxvY2sgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRmaWx0ZXJCYXIhOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIERlZmluZXMgdGhlIHNlbGVjdGlvbiBtb2RlIHRvIGJlIHVzZWQgYnkgdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBBbGxvd2VkIHZhbHVlcyBhcmUgYE5vbmVgLCBgU2luZ2xlYCwgYE11bHRpYCBvciBgQXV0b2Bcblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRzZWxlY3Rpb25Nb2RlITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBTcGVjaWZpZXMgdGhlIGhlYWRlciB0ZXh0IHRoYXQgaXMgc2hvd24gaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdGhlYWRlciE6IHN0cmluZztcblxuXHQvKipcblx0ICogU3BlY2lmaWVzIHRoZSBoZWFkZXIgdGV4dCB0aGF0IGlzIHNob3duIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcblx0ZW5hYmxlQXV0b0NvbHVtbldpZHRoITogYm9vbGVhbjtcblxuXHQvKipcblx0ICogQ29udHJvbHMgaWYgdGhlIGhlYWRlciB0ZXh0IHNob3VsZCBiZSBzaG93biBvciBub3QuXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IHRydWUgfSlcblx0aGVhZGVyVmlzaWJsZSE6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiwgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KVxuXHRkYXRhSW5pdGlhbGl6ZWQhOiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcblx0YmluZGluZ1N1c3BlbmRlZCE6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiwgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KVxuXHRvdXREYXRlZEJpbmRpbmchOiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcblx0cGVuZGluZ1JlcXVlc3QhOiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBBbiBldmVudCB0cmlnZ2VyZWQgd2hlbiB0aGUgdXNlciBjaG9vc2VzIGEgcm93OyB0aGUgZXZlbnQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgd2hpY2ggcm93IHdhcyBjaG9zZW4uXG5cdCAqXG5cdCAqIFlvdSBjYW4gc2V0IHRoaXMgaW4gb3JkZXIgdG8gaGFuZGxlIHRoZSBuYXZpZ2F0aW9uIG1hbnVhbGx5LlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAZXZlbnQoKVxuXHRyb3dQcmVzcyE6IEZ1bmN0aW9uO1xuXG5cdC8qKlxuXHQgKiBBbiBldmVudCB0cmlnZ2VyZWQgd2hlbiB0aGUgVGFibGUgU3RhdGUgY2hhbmdlcy5cblx0ICpcblx0ICogWW91IGNhbiBzZXQgdGhpcyBpbiBvcmRlciB0byBzdG9yZSB0aGUgdGFibGUgc3RhdGUgaW4gdGhlIGFwcHN0YXRlLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0QGV2ZW50KClcblx0c3RhdGVDaGFuZ2UhOiBGdW5jdGlvbjtcblxuXHRAZXZlbnQoKVxuXHRpbnRlcm5hbERhdGFSZXF1ZXN0ZWQhOiBGdW5jdGlvbjtcblxuXHQvKipcblx0ICogQ29udHJvbHMgd2hpY2ggb3B0aW9ucyBzaG91bGQgYmUgZW5hYmxlZCBmb3IgdGhlIHRhYmxlIHBlcnNvbmFsaXphdGlvbiBkaWFsb2cuXG5cdCAqXG5cdCAqIElmIGl0IGlzIHNldCB0byBgdHJ1ZWAsIGFsbCBwb3NzaWJsZSBvcHRpb25zIGZvciB0aGlzIGtpbmQgb2YgdGFibGUgYXJlIGVuYWJsZWQuPGJyLz5cblx0ICogSWYgaXQgaXMgc2V0IHRvIGBmYWxzZWAsIHBlcnNvbmFsaXphdGlvbiBpcyBkaXNhYmxlZC48YnIvPlxuXHQgKjxici8+XG5cdCAqIFlvdSBjYW4gYWxzbyBwcm92aWRlIGEgbW9yZSBncmFudWxhciBjb250cm9sIGZvciB0aGUgcGVyc29uYWxpemF0aW9uIGJ5IHByb3ZpZGluZyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IHdpdGggdGhlIG9wdGlvbnMgeW91IHdhbnQgdG8gYmUgYXZhaWxhYmxlLjxici8+XG5cdCAqIEF2YWlsYWJsZSBvcHRpb25zIGFyZTo8YnIvPlxuXHQgKiAgLSBTb3J0PGJyLz5cblx0ICogIC0gQ29sdW1uPGJyLz5cblx0ICogIC0gRmlsdGVyPGJyLz5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFufHN0cmluZ1wiLCBkZWZhdWx0VmFsdWU6IHRydWUgfSlcblx0cGVyc29uYWxpemF0aW9uITogYm9vbGVhbiB8IHN0cmluZztcblxuXHQvKipcblx0ICogQ29udHJvbHMgdGhlIGtpbmQgb2YgdmFyaWFudCBtYW5hZ2VtZW50IHRoYXQgc2hvdWxkIGJlIGVuYWJsZWQgZm9yIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQWxsb3dlZCB2YWx1ZXMgYXJlIGBQYWdlYCwgYENvbnRyb2xgIGFuZCBgTm9uZWAuPGJyLz5cblx0ICogSWYgdGhlIHRhYmxlIGlzIHVzZWQgd2l0aGluIGEgU0FQIEZpb3JpIGVsZW1lbnRzIHRlbXBsYXRlLCB0aGUgZGVmYXVsdCB2YWx1ZSB3aWxsIGJlIHRha2VuIGZyb20gdGhlIGN1cnJlbnQgcGFnZSB2YXJpYW50IG1hbmFnZW1lbnQuPGJyLz5cblx0ICogT3RoZXJ3aXNlIGl0J3MgYE5vbmVgLlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdHZhcmlhbnRNYW5hZ2VtZW50ITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBHcm91cHMgbWVudSBhY3Rpb25zIGJ5IGtleS5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRtZW51Pzogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBEZWZpbmVzIHdoZXRoZXIgdG8gZGlzcGxheSB0aGUgc2VhcmNoIGFjdGlvbi5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogdHJ1ZSB9KVxuXHRpc1NlYXJjaGFibGU/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBHZXRzIGNvbnRleHRzIGZyb20gdGhlIHRhYmxlIHRoYXQgaGF2ZSBiZWVuIHNlbGVjdGVkIGJ5IHRoZSB1c2VyLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBDb250ZXh0cyBvZiB0aGUgcm93cyBzZWxlY3RlZCBieSB0aGUgdXNlclxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRnZXRTZWxlY3RlZENvbnRleHRzKCk6IENvbnRleHRbXSB7XG5cdFx0cmV0dXJuICh0aGlzLmNvbnRlbnQgYXMgYW55KS5nZXRTZWxlY3RlZENvbnRleHRzKCk7XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBhIG1lc3NhZ2UgdG8gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBUaGUgbWVzc2FnZSBhcHBsaWVzIHRvIHRoZSB3aG9sZSB0YWJsZSBhbmQgbm90IHRvIGFuIGluZGl2aWR1YWwgdGFibGUgcm93LlxuXHQgKlxuXHQgKiBAcGFyYW0gW3BhcmFtZXRlcnNdIFRoZSBwYXJhbWV0ZXJzIHRvIGNyZWF0ZSB0aGUgbWVzc2FnZVxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy50eXBlIE1lc3NhZ2UgdHlwZVxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5tZXNzYWdlIE1lc3NhZ2UgdGV4dFxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5kZXNjcmlwdGlvbiBNZXNzYWdlIGRlc2NyaXB0aW9uXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLnBlcnNpc3RlbnQgVHJ1ZSBpZiB0aGUgbWVzc2FnZSBpcyBwZXJzaXN0ZW50XG5cdCAqIEByZXR1cm5zIFRoZSBJRCBvZiB0aGUgbWVzc2FnZVxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhZGRNZXNzYWdlKHBhcmFtZXRlcnM6IHsgdHlwZT86IE1lc3NhZ2VUeXBlOyBtZXNzYWdlPzogc3RyaW5nOyBkZXNjcmlwdGlvbj86IHN0cmluZzsgcGVyc2lzdGVudD86IGJvb2xlYW4gfSk6IHN0cmluZyB7XG5cdFx0Y29uc3QgbXNnTWFuYWdlciA9IHRoaXMuX2dldE1lc3NhZ2VNYW5hZ2VyKCk7XG5cblx0XHRjb25zdCBvVGFibGUgPSB0aGlzLmNvbnRlbnQgYXMgYW55IGFzIFRhYmxlO1xuXG5cdFx0Y29uc3Qgb01lc3NhZ2UgPSBuZXcgTWVzc2FnZSh7XG5cdFx0XHR0YXJnZXQ6IG9UYWJsZS5nZXRSb3dCaW5kaW5nKCkuZ2V0UmVzb2x2ZWRQYXRoKCksXG5cdFx0XHR0eXBlOiBwYXJhbWV0ZXJzLnR5cGUsXG5cdFx0XHRtZXNzYWdlOiBwYXJhbWV0ZXJzLm1lc3NhZ2UsXG5cdFx0XHRwcm9jZXNzb3I6IG9UYWJsZS5nZXRNb2RlbCgpLFxuXHRcdFx0ZGVzY3JpcHRpb246IHBhcmFtZXRlcnMuZGVzY3JpcHRpb24sXG5cdFx0XHRwZXJzaXN0ZW50OiBwYXJhbWV0ZXJzLnBlcnNpc3RlbnRcblx0XHR9KTtcblxuXHRcdG1zZ01hbmFnZXIuYWRkTWVzc2FnZXMob01lc3NhZ2UpO1xuXHRcdHJldHVybiBvTWVzc2FnZS5nZXRJZCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgYSBtZXNzYWdlIGZyb20gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcGFyYW0gaWQgVGhlIGlkIG9mIHRoZSBtZXNzYWdlXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHJlbW92ZU1lc3NhZ2UoaWQ6IHN0cmluZykge1xuXHRcdGNvbnN0IG1zZ01hbmFnZXIgPSB0aGlzLl9nZXRNZXNzYWdlTWFuYWdlcigpO1xuXHRcdGNvbnN0IG1lc3NhZ2VzID0gbXNnTWFuYWdlci5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdFx0Y29uc3QgcmVzdWx0ID0gbWVzc2FnZXMuZmluZCgoZTogYW55KSA9PiBlLmlkID09PSBpZCk7XG5cdFx0aWYgKHJlc3VsdCkge1xuXHRcdFx0bXNnTWFuYWdlci5yZW1vdmVNZXNzYWdlcyhyZXN1bHQpO1xuXHRcdH1cblx0fVxuXG5cdF9nZXRNZXNzYWdlTWFuYWdlcigpIHtcblx0XHRyZXR1cm4gc2FwLnVpLmdldENvcmUoKS5nZXRNZXNzYWdlTWFuYWdlcigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFuIGV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZSBzZWxlY3Rpb24gaW4gdGhlIHRhYmxlIGNoYW5nZXMuXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBldmVudCgpXG5cdHNlbGVjdGlvbkNoYW5nZSE6IEZ1bmN0aW9uO1xuXG5cdF9nZXRSb3dCaW5kaW5nKCkge1xuXHRcdGNvbnN0IG9UYWJsZSA9ICh0aGlzIGFzIGFueSkuZ2V0Q29udGVudCgpO1xuXHRcdHJldHVybiBvVGFibGUuZ2V0Um93QmluZGluZygpO1xuXHR9XG5cblx0Z2V0Q291bnRzKCk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0Y29uc3Qgb1RhYmxlID0gKHRoaXMgYXMgYW55KS5nZXRDb250ZW50KCk7XG5cdFx0cmV0dXJuIFRhYmxlVXRpbHMuZ2V0TGlzdEJpbmRpbmdGb3JDb3VudChvVGFibGUsIG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpLCB7XG5cdFx0XHRiYXRjaEdyb3VwSWQ6ICF0aGlzLmdldFByb3BlcnR5KFwiYmluZGluZ1N1c3BlbmRlZFwiKSA/IG9UYWJsZS5kYXRhKFwiYmF0Y2hHcm91cElkXCIpIDogXCIkYXV0b1wiLFxuXHRcdFx0YWRkaXRpb25hbEZpbHRlcnM6IFRhYmxlVXRpbHMuZ2V0SGlkZGVuRmlsdGVycyhvVGFibGUpXG5cdFx0fSlcblx0XHRcdC50aGVuKChpVmFsdWU6IGFueSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gVGFibGVVdGlscy5nZXRDb3VudEZvcm1hdHRlZChpVmFsdWUpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaCgoKSA9PiB7XG5cdFx0XHRcdHJldHVybiBcIjBcIjtcblx0XHRcdH0pO1xuXHR9XG5cblx0QHhtbEV2ZW50SGFuZGxlcigpXG5cdG9uVGFibGVSb3dQcmVzcyhvRXZlbnQ6IFVJNUV2ZW50LCBvQ29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIsIG9Db250ZXh0OiBDb250ZXh0LCBtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0Ly8gcHJldmVudCBuYXZpZ2F0aW9uIHRvIGFuIGVtcHR5IHJvd1xuXHRcdGlmIChvQ29udGV4dCAmJiBvQ29udGV4dC5pc0luYWN0aXZlKCkgJiYgb0NvbnRleHQuaXNUcmFuc2llbnQoKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHQvLyBJbiB0aGUgY2FzZSBvZiBhbiBhbmFseXRpY2FsIHRhYmxlLCBpZiB3ZSdyZSB0cnlpbmcgdG8gbmF2aWdhdGUgdG8gYSBjb250ZXh0IGNvcnJlc3BvbmRpbmcgdG8gYSB2aXN1YWwgZ3JvdXAgb3IgZ3JhbmQgdG90YWxcblx0XHQvLyAtLT4gQ2FuY2VsIG5hdmlnYXRpb25cblx0XHRpZiAoXG5cdFx0XHRvQ29udGV4dCAmJlxuXHRcdFx0b0NvbnRleHQuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHRcIikgJiZcblx0XHRcdHR5cGVvZiBvQ29udGV4dC5nZXRQcm9wZXJ0eShcIkAkdWk1Lm5vZGUuaXNFeHBhbmRlZFwiKSA9PT0gXCJib29sZWFuXCJcblx0XHQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0KG9Db250cm9sbGVyIGFzIGFueSkuX3JvdXRpbmcubmF2aWdhdGVGb3J3YXJkVG9Db250ZXh0KG9Db250ZXh0LCBtUGFyYW1ldGVycyk7XG5cdFx0fVxuXHR9XG5cblx0QHhtbEV2ZW50SGFuZGxlcigpXG5cdG9uSW50ZXJuYWxEYXRhUmVjZWl2ZWQob0V2ZW50OiBVSTVFdmVudCkge1xuXHRcdGlmIChvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiZXJyb3JcIikpIHtcblx0XHRcdHRoaXMuZ2V0Q29udHJvbGxlcigpLm1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlRGlhbG9nKCk7XG5cdFx0fVxuXHR9XG5cblx0QHhtbEV2ZW50SGFuZGxlcigpXG5cdG9uSW50ZXJuYWxEYXRhUmVxdWVzdGVkKG9FdmVudDogVUk1RXZlbnQpIHtcblx0XHRpZiAob0V2ZW50ICYmIG9FdmVudC5nZXRTb3VyY2UpIHtcblx0XHRcdGNvbnN0IHBhdGhUb0JlUmVtb3ZlZCA9IChvRXZlbnQuZ2V0U291cmNlKCkgYXMgYW55KT8uZ2V0SGVhZGVyQ29udGV4dCgpPy5nZXRQYXRoKCk7XG5cdFx0XHR0aGlzLmdldENvbnRyb2xsZXIoKS5tZXNzYWdlSGFuZGxlci5yZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXModW5kZWZpbmVkLCB0cnVlLCBwYXRoVG9CZVJlbW92ZWQpO1xuXHRcdH1cblx0XHR0aGlzLnNldFByb3BlcnR5KFwiZGF0YUluaXRpYWxpemVkXCIsIHRydWUpO1xuXHRcdCh0aGlzIGFzIGFueSkuZmlyZUV2ZW50KFwiaW50ZXJuYWxEYXRhUmVxdWVzdGVkXCIpO1xuXHR9XG5cblx0QHhtbEV2ZW50SGFuZGxlcigpXG5cdG9uUGFzdGUob0V2ZW50OiBVSTVFdmVudCwgb0NvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyKSB7XG5cdFx0Ly8gSWYgcGFzdGUgaXMgZGlzYWJsZSBvciBpZiB3ZSdyZSBub3QgaW4gZWRpdCBtb2RlLCB3ZSBjYW4ndCBwYXN0ZSBhbnl0aGluZ1xuXHRcdGlmICghdGhpcy50YWJsZURlZmluaXRpb24uY29udHJvbC5lbmFibGVQYXN0ZSB8fCAhdGhpcy5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIikpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBhUmF3UGFzdGVkRGF0YSA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJkYXRhXCIpLFxuXHRcdFx0b1RhYmxlID0gb0V2ZW50LmdldFNvdXJjZSgpIGFzIFRhYmxlO1xuXHRcdGxldCBvUmVzb3VyY2VNb2RlbDtcblxuXHRcdGlmIChvVGFibGUuZ2V0RW5hYmxlUGFzdGUoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0UGFzdGVIZWxwZXIucGFzdGVEYXRhKGFSYXdQYXN0ZWREYXRhLCBvVGFibGUsIG9Db250cm9sbGVyKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b1Jlc291cmNlTW9kZWwgPSBzYXAudWkuZ2V0Q29yZSgpLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpIGFzIFJlc291cmNlQnVuZGxlO1xuXHRcdFx0TWVzc2FnZUJveC5lcnJvcihvUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9PUF9DT05UUk9MTEVSX1NBUEZFX1BBU1RFX0RJU0FCTEVEX01FU1NBR0VcIiksIHtcblx0XHRcdFx0dGl0bGU6IG9SZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9FUlJPUlwiKVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gVGhpcyBldmVudCB3aWxsIGFsbG93IHVzIHRvIGludGVyY2VwdCB0aGUgZXhwb3J0IGJlZm9yZSBpcyB0cmlnZ2VyZWQgdG8gY292ZXIgc3BlY2lmaWMgY2FzZXNcblx0Ly8gdGhhdCBjb3VsZG4ndCBiZSBhZGRyZXNzZWQgb24gdGhlIHByb3BlcnR5SW5mb3MgZm9yIGVhY2ggY29sdW1uLlxuXHQvLyBlLmcuIEZpeGVkIFRhcmdldCBWYWx1ZSBmb3IgdGhlIGRhdGFwb2ludHNcblx0QHhtbEV2ZW50SGFuZGxlcigpXG5cdG9uQmVmb3JlRXhwb3J0KG9FdmVudDogVUk1RXZlbnQpIHtcblx0XHRjb25zdCBpc1NwbGl0TW9kZSA9IChvRXZlbnQuZ2V0UGFyYW1ldGVycygpIGFzIGFueSkudXNlckV4cG9ydFNldHRpbmdzLnNwbGl0Q2VsbHMsXG5cdFx0XHRvVGFibGVDb250cm9sbGVyID0gb0V2ZW50LmdldFNvdXJjZSgpIGFzIFBhZ2VDb250cm9sbGVyLFxuXHRcdFx0b0V4cG9ydENvbHVtbnMgPSAob0V2ZW50LmdldFBhcmFtZXRlcnMoKSBhcyBhbnkpLmV4cG9ydFNldHRpbmdzLndvcmtib29rPy5jb2x1bW5zLFxuXHRcdFx0b1RhYmxlQ29sdW1ucyA9IHRoaXMudGFibGVEZWZpbml0aW9uLmNvbHVtbnM7XG5cblx0XHRUYWJsZUFQSS51cGRhdGVFeHBvcnRTZXR0aW5ncyhvRXhwb3J0Q29sdW1ucywgb1RhYmxlQ29sdW1ucywgb1RhYmxlQ29udHJvbGxlciwgaXNTcGxpdE1vZGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIE1EQyBEYXRhU3RhdGVJbmRpY2F0b3IgcGx1Z2luIHRvIGRpc3BsYXkgbWVzc2FnZVN0cmlwIG9uIGEgdGFibGUuXG5cdCAqXG5cdCAqIEBwYXJhbSBvTWVzc2FnZVxuXHQgKiBAcGFyYW0gb1RhYmxlXG5cdCAqIEBuYW1lIGRhdGFTdGF0ZUZpbHRlclxuXHQgKiBAcmV0dXJucyBXaGV0aGVyIHRvIHJlbmRlciB2aXNpYmxlIHRoZSBtZXNzYWdlU3RyaXBcblx0ICovXG5cdHN0YXRpYyBkYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXIob01lc3NhZ2U6IGFueSwgb1RhYmxlOiBhbnkpOiBib29sZWFuIHtcblx0XHRjb25zdCBzVGFibGVDb250ZXh0QmluZGluZ1BhdGggPSBvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IHNUYWJsZVJvd0JpbmRpbmcgPSAoc1RhYmxlQ29udGV4dEJpbmRpbmdQYXRoID8gYCR7c1RhYmxlQ29udGV4dEJpbmRpbmdQYXRofS9gIDogXCJcIikgKyBvVGFibGUuZ2V0Um93QmluZGluZygpLmdldFBhdGgoKTtcblx0XHRyZXR1cm4gc1RhYmxlUm93QmluZGluZyA9PT0gb01lc3NhZ2UuZ2V0VGFyZ2V0KCkgPyB0cnVlIDogZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBldmVudCBoYW5kbGVzIHRoZSBEYXRhU3RhdGUgb2YgdGhlIERhdGFTdGF0ZUluZGljYXRvciBwbHVnaW4gZnJvbSBNREMgb24gYSB0YWJsZS5cblx0ICogSXQncyBmaXJlZCB3aGVuIG5ldyBlcnJvciBtZXNzYWdlcyBhcmUgc2VudCBmcm9tIHRoZSBiYWNrZW5kIHRvIHVwZGF0ZSByb3cgaGlnaGxpZ2h0aW5nLlxuXHQgKlxuXHQgKiBAbmFtZSBvbkRhdGFTdGF0ZUNoYW5nZVxuXHQgKiBAcGFyYW0gb0V2ZW50IEV2ZW50IG9iamVjdFxuXHQgKi9cblx0QHhtbEV2ZW50SGFuZGxlcigpXG5cdG9uRGF0YVN0YXRlQ2hhbmdlKG9FdmVudDogVUk1RXZlbnQpIHtcblx0XHRjb25zdCBvRGF0YVN0YXRlSW5kaWNhdG9yID0gb0V2ZW50LmdldFNvdXJjZSgpIGFzIERhdGFTdGF0ZUluZGljYXRvcjtcblx0XHRjb25zdCBhRmlsdGVyZWRNZXNzYWdlcyA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJmaWx0ZXJlZE1lc3NhZ2VzXCIpO1xuXHRcdGlmIChhRmlsdGVyZWRNZXNzYWdlcykge1xuXHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWwgPSBvRGF0YVN0YXRlSW5kaWNhdG9yLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsO1xuXHRcdFx0b0ludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCJmaWx0ZXJlZE1lc3NhZ2VzXCIsIGFGaWx0ZXJlZE1lc3NhZ2VzLCBvRGF0YVN0YXRlSW5kaWNhdG9yLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgQ29udGV4dCk7XG5cdFx0fVxuXHR9XG5cblx0c3RhdGljIHVwZGF0ZUV4cG9ydFNldHRpbmdzKG9FeHBvcnRDb2x1bW5zOiBhbnksIG9Db2x1bW5zOiBUYWJsZUNvbHVtbltdLCBvVGFibGVDb250cm9sbGVyOiBQYWdlQ29udHJvbGxlciwgaXNTcGxpdE1vZGU6IGJvb2xlYW4pOiBhbnkge1xuXHRcdGxldCByZWZDb2x1bW46IGFueSA9IG51bGw7XG5cdFx0bGV0IGFkZGl0aW9uYWxQcm9wZXJ0eUluZGV4OiBudW1iZXI7XG5cdFx0b0V4cG9ydENvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAob0NvbHVtbkV4cG9ydDogYW55KSB7XG5cdFx0XHRvQ29sdW1uRXhwb3J0LmxhYmVsID0gRGVsZWdhdGVVdGlsLmdldExvY2FsaXplZFRleHQob0NvbHVtbkV4cG9ydC5sYWJlbCwgb1RhYmxlQ29udHJvbGxlcik7XG5cdFx0XHQvL3RyYW5zbGF0ZSBib29sZWFuIHZhbHVlc1xuXHRcdFx0aWYgKG9Db2x1bW5FeHBvcnQudHlwZSA9PT0gXCJCb29sZWFuXCIpIHtcblx0XHRcdFx0Y29uc3Qgb1Jlc291cmNlTW9kZWwgPSBzYXAudWkuZ2V0Q29yZSgpLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5tYWNyb3NcIikgYXMgUmVzb3VyY2VCdW5kbGU7XG5cdFx0XHRcdG9Db2x1bW5FeHBvcnQuZmFsc2VWYWx1ZSA9IG9SZXNvdXJjZU1vZGVsLmdldFRleHQoXCJub1wiKTtcblx0XHRcdFx0b0NvbHVtbkV4cG9ydC50cnVlVmFsdWUgPSBvUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwieWVzXCIpO1xuXHRcdFx0fVxuXHRcdFx0b0NvbHVtbnM/LmZvckVhY2goKGNvbHVtbikgPT4ge1xuXHRcdFx0XHRjb25zdCBvQ29sdW1uID0gY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRcdFx0aWYgKGlzU3BsaXRNb2RlKSB7XG5cdFx0XHRcdFx0Ly9BZGQgVGFyZ2V0VmFsdWUgb24gZHVtbXkgY3JlYXRlZCBwcm9wZXJ0eSB3aGVuIGV4cG9ydGluZyBvbiBzcGxpdCBtb2RlXG5cdFx0XHRcdFx0aWYgKG9Db2x1bW4uaXNEYXRhUG9pbnRGYWtlVGFyZ2V0UHJvcGVydHkgJiYgb0NvbHVtbi5yZWxhdGl2ZVBhdGggPT09IG9Db2x1bW5FeHBvcnQucHJvcGVydHkpIHtcblx0XHRcdFx0XHRcdG9Db2x1bW5FeHBvcnQucHJvcGVydHkgPSBbb0NvbHVtbkV4cG9ydC5wcm9wZXJ0eV07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIE1vZGlmeSBkdXBsaWNhdGUgbGFiZWxzIGZyb20gc3BsaXR0ZWQgY29sdW1uc1xuXHRcdFx0XHRcdGNvbnN0IHJlZ2V4ID0gLyguKiktYWRkaXRpb25hbFByb3BlcnR5KFxcZCspLy5leGVjKG9Db2x1bW5FeHBvcnQuY29sdW1uSWQpO1xuXHRcdFx0XHRcdGlmIChyZWdleCA9PT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0YWRkaXRpb25hbFByb3BlcnR5SW5kZXggPSAxO1xuXHRcdFx0XHRcdFx0cmVmQ29sdW1uID0gb0NvbHVtbkV4cG9ydDtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKHJlZ2V4WzFdID09PSByZWZDb2x1bW4/LmNvbHVtbklkKSB7XG5cdFx0XHRcdFx0XHRvQ29sdW1uRXhwb3J0LmxhYmVsID1cblx0XHRcdFx0XHRcdFx0b0NvbHVtbkV4cG9ydC5sYWJlbCA9PT0gcmVmQ29sdW1uLmxhYmVsXG5cdFx0XHRcdFx0XHRcdFx0PyBgJHtyZWZDb2x1bW4ubGFiZWx9ICgkeysrYWRkaXRpb25hbFByb3BlcnR5SW5kZXh9KWBcblx0XHRcdFx0XHRcdFx0XHQ6IG9Db2x1bW5FeHBvcnQubGFiZWw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0XHRyZXR1cm4gb0V4cG9ydENvbHVtbnM7XG5cdH1cblxuXHRyZXN1bWVCaW5kaW5nKGJSZXF1ZXN0SWZOb3RJbml0aWFsaXplZDogYm9vbGVhbikge1xuXHRcdHRoaXMuc2V0UHJvcGVydHkoXCJiaW5kaW5nU3VzcGVuZGVkXCIsIGZhbHNlKTtcblx0XHRpZiAoKGJSZXF1ZXN0SWZOb3RJbml0aWFsaXplZCAmJiAhKHRoaXMgYXMgYW55KS5nZXREYXRhSW5pdGlhbGl6ZWQoKSkgfHwgdGhpcy5nZXRQcm9wZXJ0eShcIm91dERhdGVkQmluZGluZ1wiKSkge1xuXHRcdFx0dGhpcy5zZXRQcm9wZXJ0eShcIm91dERhdGVkQmluZGluZ1wiLCBmYWxzZSk7XG5cdFx0XHQodGhpcyBhcyBhbnkpLmdldENvbnRlbnQoKT8ucmViaW5kKCk7XG5cdFx0fVxuXHR9XG5cblx0cmVmcmVzaE5vdEFwcGxpY2FibGVGaWVsZHMob0ZpbHRlckNvbnRyb2w6IENvbnRyb2wpOiBhbnlbXSB7XG5cdFx0Y29uc3Qgb1RhYmxlID0gKHRoaXMgYXMgYW55KS5nZXRDb250ZW50KCk7XG5cdFx0cmV0dXJuIEZpbHRlclV0aWxzLmdldE5vdEFwcGxpY2FibGVGaWx0ZXJzKG9GaWx0ZXJDb250cm9sLCBvVGFibGUpO1xuXHR9XG5cblx0c3VzcGVuZEJpbmRpbmcoKSB7XG5cdFx0dGhpcy5zZXRQcm9wZXJ0eShcImJpbmRpbmdTdXNwZW5kZWRcIiwgdHJ1ZSk7XG5cdH1cblxuXHRpbnZhbGlkYXRlQ29udGVudCgpIHtcblx0XHR0aGlzLnNldFByb3BlcnR5KFwiZGF0YUluaXRpYWxpemVkXCIsIGZhbHNlKTtcblx0XHR0aGlzLnNldFByb3BlcnR5KFwib3V0RGF0ZWRCaW5kaW5nXCIsIGZhbHNlKTtcblx0fVxuXG5cdEB4bWxFdmVudEhhbmRsZXIoKVxuXHRvbk1hc3NFZGl0QnV0dG9uUHJlc3NlZChvRXZlbnQ6IFVJNUV2ZW50LCBwYWdlQ29udHJvbGxlcjogYW55KSB7XG5cdFx0Y29uc3Qgb1RhYmxlID0gdGhpcy5jb250ZW50O1xuXHRcdGlmIChwYWdlQ29udHJvbGxlciAmJiBwYWdlQ29udHJvbGxlci5tYXNzRWRpdCkge1xuXHRcdFx0cGFnZUNvbnRyb2xsZXIubWFzc0VkaXQub3Blbk1hc3NFZGl0RGlhbG9nKG9UYWJsZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdExvZy53YXJuaW5nKFwiVGhlIENvbnRyb2xsZXIgaXMgbm90IGVuaGFuY2VkIHdpdGggTWFzcyBFZGl0IGZ1bmN0aW9uYWxpdHlcIik7XG5cdFx0fVxuXHR9XG5cdEB4bWxFdmVudEhhbmRsZXIoKVxuXHRvblRhYmxlU2VsZWN0aW9uQ2hhbmdlKG9FdmVudDogVUk1RXZlbnQpIHtcblx0XHR0aGlzLmZpcmVFdmVudChcInNlbGVjdGlvbkNoYW5nZVwiLCBvRXZlbnQuZ2V0UGFyYW1ldGVycygpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeHBvc2UgdGhlIGludGVybmFsIHRhYmxlIGRlZmluaXRpb24gZm9yIGV4dGVybmFsIHVzYWdlIGluIGRlbGVnYXRlLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUaGUgdGFibGVEZWZpbml0aW9uXG5cdCAqL1xuXHRnZXRUYWJsZURlZmluaXRpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMudGFibGVEZWZpbml0aW9uO1xuXHR9XG5cblx0Z2V0SWRlbnRpZmllckNvbHVtbigpOiBhbnkge1xuXHRcdGNvbnN0IG9UYWJsZSA9ICh0aGlzIGFzIGFueSkuZ2V0Q29udGVudCgpO1xuXHRcdGNvbnN0IGhlYWRlckluZm9UaXRsZVBhdGggPSB0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpLmhlYWRlckluZm9UaXRsZTtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb1RhYmxlICYmIG9UYWJsZS5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0c0N1cnJlbnRFbnRpdHlTZXROYW1lID0gb1RhYmxlLmRhdGEoXCJtZXRhUGF0aFwiKTtcblx0XHRjb25zdCBhVGVjaG5pY2FsS2V5cyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NDdXJyZW50RW50aXR5U2V0TmFtZX0vJFR5cGUvJEtleWApO1xuXHRcdGNvbnN0IGFGaWx0ZXJlZFRlY2huaWNhbEtleXM6IHN0cmluZ1tdID0gW107XG5cblx0XHRhVGVjaG5pY2FsS2V5cy5mb3JFYWNoKGZ1bmN0aW9uICh0ZWNobmljYWxLZXk6IHN0cmluZykge1xuXHRcdFx0aWYgKHRlY2huaWNhbEtleSAhPT0gXCJJc0FjdGl2ZUVudGl0eVwiKSB7XG5cdFx0XHRcdGFGaWx0ZXJlZFRlY2huaWNhbEtleXMucHVzaCh0ZWNobmljYWxLZXkpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGNvbnN0IHNlbWFudGljS2V5Q29sdW1ucyA9IHRoaXMuZ2V0VGFibGVEZWZpbml0aW9uKCkuc2VtYW50aWNLZXlzO1xuXG5cdFx0Y29uc3QgYVZpc2libGVDb2x1bW5zOiBhbnkgPSBbXTtcblx0XHRjb25zdCBhRmlsdGVyZWRDb2x1bW1uczogYW55ID0gW107XG5cdFx0Y29uc3QgYVRhYmxlQ29sdW1ucyA9IG9UYWJsZS5nZXRDb2x1bW5zKCk7XG5cdFx0YVRhYmxlQ29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChvQ29sdW1uOiBhbnkpIHtcblx0XHRcdGNvbnN0IGNvbHVtbiA9IG9Db2x1bW4uZ2V0RGF0YVByb3BlcnR5KCk7XG5cdFx0XHRhVmlzaWJsZUNvbHVtbnMucHVzaChjb2x1bW4pO1xuXHRcdH0pO1xuXG5cdFx0YVZpc2libGVDb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKG9Db2x1bW46IGFueSkge1xuXHRcdFx0Y29uc3Qgb1RleHRBcnJhbmdlbWVudCA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NDdXJyZW50RW50aXR5U2V0TmFtZX0vJFR5cGUvJHtvQ29sdW1ufUBgKTtcblx0XHRcdGNvbnN0IHNUZXh0QXJyYW5nZW1lbnQgPSBvVGV4dEFycmFuZ2VtZW50ICYmIG9UZXh0QXJyYW5nZW1lbnRbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRcIl0/LiRQYXRoO1xuXHRcdFx0Y29uc3Qgc1RleHRQbGFjZW1lbnQgPVxuXHRcdFx0XHRvVGV4dEFycmFuZ2VtZW50ICYmXG5cdFx0XHRcdG9UZXh0QXJyYW5nZW1lbnRbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50XCJdPy4kRW51bU1lbWJlcjtcblx0XHRcdGFGaWx0ZXJlZENvbHVtbW5zLnB1c2goe1xuXHRcdFx0XHRjb2x1bW5OYW1lOiBvQ29sdW1uLFxuXHRcdFx0XHRzVGV4dEFycmFuZ2VtZW50OiBzVGV4dEFycmFuZ2VtZW50LFxuXHRcdFx0XHRzQ29sdW1uTmFtZVZpc2libGU6ICEoc1RleHRQbGFjZW1lbnQgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50VHlwZS9UZXh0T25seVwiKVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdFx0bGV0IGNvbHVtbjogYW55O1xuXHRcdGFGaWx0ZXJlZENvbHVtbW5zLnNvbWUoZnVuY3Rpb24gKG9Db2x1bW46IGFueSkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQoaGVhZGVySW5mb1RpdGxlUGF0aCAhPT0gdW5kZWZpbmVkICYmIG9Db2x1bW4/LmNvbHVtbk5hbWUgPT09IGhlYWRlckluZm9UaXRsZVBhdGggJiYgb0NvbHVtbj8uc0NvbHVtbk5hbWVWaXNpYmxlKSB8fFxuXHRcdFx0XHQob0NvbHVtbj8uc1RleHRBcnJhbmdlbWVudCAhPT0gdW5kZWZpbmVkICYmIG9Db2x1bW4/LnNUZXh0QXJyYW5nZW1lbnQgPT09IGhlYWRlckluZm9UaXRsZVBhdGgpXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29sdW1uID0gaGVhZGVySW5mb1RpdGxlUGF0aDtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHQoc2VtYW50aWNLZXlDb2x1bW5zICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdFx0XHRzZW1hbnRpY0tleUNvbHVtbnMubGVuZ3RoID09PSAxICYmXG5cdFx0XHRcdFx0b0NvbHVtbj8uY29sdW1uTmFtZSA9PT0gc2VtYW50aWNLZXlDb2x1bW5zWzBdICYmXG5cdFx0XHRcdFx0b0NvbHVtbj8uc0NvbHVtbk5hbWVWaXNpYmxlKSB8fFxuXHRcdFx0XHQob0NvbHVtbj8uc1RleHRBcnJhbmdlbWVudCAhPT0gdW5kZWZpbmVkICYmIG9Db2x1bW4/LnNUZXh0QXJyYW5nZW1lbnQgPT09IHNlbWFudGljS2V5Q29sdW1uc1swXSlcblx0XHRcdCkge1xuXHRcdFx0XHRjb2x1bW4gPSBzZW1hbnRpY0tleUNvbHVtbnNbMF07XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0KGFGaWx0ZXJlZFRlY2huaWNhbEtleXMgIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0XHRcdGFGaWx0ZXJlZFRlY2huaWNhbEtleXMubGVuZ3RoID09PSAxICYmXG5cdFx0XHRcdFx0b0NvbHVtbj8uY29sdW1uTmFtZSA9PT0gYUZpbHRlcmVkVGVjaG5pY2FsS2V5c1swXSAmJlxuXHRcdFx0XHRcdG9Db2x1bW4/LnNDb2x1bW5OYW1lVmlzaWJsZSkgfHxcblx0XHRcdFx0KG9Db2x1bW4/LnNUZXh0QXJyYW5nZW1lbnQgIT09IHVuZGVmaW5lZCAmJiBvQ29sdW1uPy5zVGV4dEFycmFuZ2VtZW50ID09PSBhRmlsdGVyZWRUZWNobmljYWxLZXlzWzBdKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGNvbHVtbiA9IGFGaWx0ZXJlZFRlY2huaWNhbEtleXNbMF07XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBjb2x1bW47XG5cdH1cblxuXHRhc3luYyBzZXRVcEVtcHR5Um93cyhvVGFibGU6IFRhYmxlKSB7XG5cdFx0aWYgKHRoaXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2w/LmNyZWF0aW9uTW9kZSAhPT0gQ3JlYXRpb25Nb2RlLklubGluZUNyZWF0aW9uUm93cykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBwV2FpdFRhYmxlUmVuZGVyZWQgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuXHRcdFx0aWYgKG9UYWJsZS5nZXREb21SZWYoKSkge1xuXHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBkZWxlZ2F0ZSA9IHtcblx0XHRcdFx0XHRvbkFmdGVyUmVuZGVyaW5nOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRvVGFibGUucmVtb3ZlRXZlbnREZWxlZ2F0ZShkZWxlZ2F0ZSk7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRvVGFibGUuYWRkRXZlbnREZWxlZ2F0ZShkZWxlZ2F0ZSwgdGhpcyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0YXdhaXQgcFdhaXRUYWJsZVJlbmRlcmVkO1xuXHRcdGNvbnN0IGJJc0luRWRpdE1vZGUgPSBvVGFibGUuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpO1xuXHRcdGlmICghYklzSW5FZGl0TW9kZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBvQmluZGluZyA9IG9UYWJsZS5nZXRSb3dCaW5kaW5nKCkgYXMgT0RhdGFMaXN0QmluZGluZztcblx0XHRpZiAob0JpbmRpbmcuaXNSZXNvbHZlZCgpICYmIG9CaW5kaW5nLmlzTGVuZ3RoRmluYWwoKSkge1xuXHRcdFx0Y29uc3Qgc0NvbnRleHRQYXRoID0gb0JpbmRpbmcuZ2V0Q29udGV4dCgpLmdldFBhdGgoKTtcblx0XHRcdGNvbnN0IG9JbmFjdGl2ZUNvbnRleHQgPSBvQmluZGluZy5nZXRBbGxDdXJyZW50Q29udGV4dHMoKS5maW5kKGZ1bmN0aW9uIChvQ29udGV4dCkge1xuXHRcdFx0XHRyZXR1cm4gb0NvbnRleHQuaXNJbmFjdGl2ZSgpICYmIG9Db250ZXh0LmdldFBhdGgoKS5zdGFydHNXaXRoKHNDb250ZXh0UGF0aCk7XG5cdFx0XHR9KTtcblx0XHRcdGlmICghb0luYWN0aXZlQ29udGV4dCkge1xuXHRcdFx0XHRhd2FpdCB0aGlzLl9jcmVhdGVFbXB0eVJvdyhvQmluZGluZywgb1RhYmxlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0YXN5bmMgX2NyZWF0ZUVtcHR5Um93KG9CaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nLCBvVGFibGU6IFRhYmxlKSB7XG5cdFx0Y29uc3QgaUlubGluZUNyZWF0aW9uUm93Q291bnQgPSB0aGlzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sPy5pbmxpbmVDcmVhdGlvblJvd0NvdW50IHx8IDI7XG5cdFx0Y29uc3QgYURhdGEgPSBbXTtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGlJbmxpbmVDcmVhdGlvblJvd0NvdW50OyBpICs9IDEpIHtcblx0XHRcdGFEYXRhLnB1c2goe30pO1xuXHRcdH1cblx0XHRjb25zdCBiQXRFbmQgPSBvVGFibGUuZGF0YShcInRhYmxlVHlwZVwiKSAhPT0gXCJSZXNwb25zaXZlVGFibGVcIjtcblx0XHRjb25zdCBiSW5hY3RpdmUgPSB0cnVlO1xuXHRcdGNvbnN0IG9WaWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0VmlldyhvVGFibGUpO1xuXHRcdGNvbnN0IG9Db250cm9sbGVyID0gb1ZpZXcuZ2V0Q29udHJvbGxlcigpO1xuXHRcdGNvbnN0IG9JbnRlcm5hbEVkaXRGbG93ID0gb0NvbnRyb2xsZXIuX2VkaXRGbG93O1xuXHRcdGlmICghdGhpcy5jcmVhdGluZ0VtcHR5Um93cykge1xuXHRcdFx0dGhpcy5jcmVhdGluZ0VtcHR5Um93cyA9IHRydWU7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCBhQ29udGV4dHMgPSBhd2FpdCBvSW50ZXJuYWxFZGl0Rmxvdy5jcmVhdGVNdWx0aXBsZURvY3VtZW50cyhcblx0XHRcdFx0XHRvQmluZGluZyxcblx0XHRcdFx0XHRhRGF0YSxcblx0XHRcdFx0XHRiQXRFbmQsXG5cdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0b0NvbnRyb2xsZXIuZWRpdEZsb3cub25CZWZvcmVDcmVhdGUsXG5cdFx0XHRcdFx0YkluYWN0aXZlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGFDb250ZXh0cz8uZm9yRWFjaChmdW5jdGlvbiAob0NvbnRleHQ6IGFueSkge1xuXHRcdFx0XHRcdG9Db250ZXh0LmNyZWF0ZWQoKS5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdGlmICghb0Vycm9yLmNhbmNlbGVkKSB7XG5cdFx0XHRcdFx0XHRcdHRocm93IG9FcnJvcjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdExvZy5lcnJvcihlIGFzIGFueSk7XG5cdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHR0aGlzLmNyZWF0aW5nRW1wdHlSb3dzID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlQVBJO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7RUFrakJPLGdCQUFnQkEsSUFBaEIsRUFBc0JDLE9BQXRCLEVBQStCO0lBQ3JDLElBQUk7TUFDSCxJQUFJQyxNQUFNLEdBQUdGLElBQUksRUFBakI7SUFDQSxDQUZELENBRUUsT0FBTUcsQ0FBTixFQUFTO01BQ1YsT0FBT0YsT0FBTyxDQUFDRSxDQUFELENBQWQ7SUFDQTs7SUFDRCxJQUFJRCxNQUFNLElBQUlBLE1BQU0sQ0FBQ0UsSUFBckIsRUFBMkI7TUFDMUIsT0FBT0YsTUFBTSxDQUFDRSxJQUFQLENBQVksS0FBSyxDQUFqQixFQUFvQkgsT0FBcEIsQ0FBUDtJQUNBOztJQUNELE9BQU9DLE1BQVA7RUFDQTs7RUFHTSwwQkFBMEJGLElBQTFCLEVBQWdDSyxTQUFoQyxFQUEyQztJQUNqRCxJQUFJ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