@sapui5/sap.fe.templates 1.136.10 → 1.136.12

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.templates",
3
- "version": "1.136.10",
3
+ "version": "1.136.12",
4
4
  "description": "SAPUI5 Library sap.fe.templates",
5
5
  "keywords": [
6
6
  "sapui5",
@@ -6,7 +6,7 @@
6
6
  SAP UI development toolkit for HTML5 (SAPUI5)
7
7
  (c) Copyright 2009-2021 SAP SE. All rights reserved
8
8
  </copyright>
9
- <version>1.136.10</version>
9
+ <version>1.136.12</version>
10
10
 
11
11
  <documentation>UI5 library: sap.fe.templates</documentation>
12
12
 
@@ -4,7 +4,7 @@
4
4
  "id": "sap.fe.templates.AnalyticalListPage",
5
5
  "type": "component",
6
6
  "applicationVersion": {
7
- "version": "1.136.10"
7
+ "version": "1.136.12"
8
8
  },
9
9
  "title": "Analytical List Page",
10
10
  "tags": {
@@ -310,7 +310,13 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSup
310
310
  }
311
311
  delete this.extensionAPI;
312
312
  };
313
- _proto._onAfterBinding = function _onAfterBinding() {
313
+ _proto._onAfterBinding = async function _onAfterBinding() {
314
+ const internalModelContext = this.getView().getBindingContext("internal");
315
+ if (!internalModelContext.getProperty("initialVariantApplied")) {
316
+ this.pageReady.waitFor(this._applyAppState());
317
+ internalModelContext.setProperty("initialVariantApplied", true);
318
+ }
319
+ await CommonUtils.getAppComponent(this.getView()).isAppComponentBusy();
314
320
  const aTables = this._getControls("table");
315
321
  let updateActions = true;
316
322
  if (EditState.isEditStateDirty()) {
@@ -322,8 +328,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSup
322
328
  const tableAPI = table?.getParent();
323
329
 
324
330
  // Update the table content using side effects (listBinding.refresh doesn't keep expansion states in a TreeTable)
325
- CommonUtils.getAppComponent(this.getView()).getRoutingService().waitForBindingCleanup().then(async () => {
326
- await CommonUtils.getAppComponent(this.getView()).isAppComponentBusy();
331
+ CommonUtils.getAppComponent(this.getView()).getRoutingService().waitForBindingCleanup().then(() => {
327
332
  oTableBinding.attachEventOnce("dataReceived", () => {
328
333
  this._updateTableActions(aTables);
329
334
  });
@@ -343,11 +348,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSup
343
348
  if (updateActions) {
344
349
  this._updateTableActions(aTables);
345
350
  }
346
- const internalModelContext = this.getView().getBindingContext("internal");
347
- if (!internalModelContext.getProperty("initialVariantApplied")) {
348
- this.pageReady.waitFor(this._applyAppState());
349
- internalModelContext.setProperty("initialVariantApplied", true);
350
- }
351
351
  const environmentCapabilities = CommonUtils.getAppComponent(this.getView()).getEnvironmentCapabilities();
352
352
  environmentCapabilities.isInsightsEnabled().then(isInsightsEnabled => {
353
353
  internalModelContext.setProperty("isInsightsSupported", isInsightsEnabled);
@@ -872,4 +872,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSup
872
872
  }), _applyDecoratedDescriptor(_class2.prototype, "getExtensionAPI", [_dec11, _dec12], Object.getOwnPropertyDescriptor(_class2.prototype, "getExtensionAPI"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onPageReady", [_dec13, _dec14], Object.getOwnPropertyDescriptor(_class2.prototype, "onPageReady"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onViewNeedsRefresh", [_dec15, _dec16], Object.getOwnPropertyDescriptor(_class2.prototype, "onViewNeedsRefresh"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onPendingFilters", [_dec17, _dec18], Object.getOwnPropertyDescriptor(_class2.prototype, "onPendingFilters"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onAfterClear", [_dec19, _dec20], Object.getOwnPropertyDescriptor(_class2.prototype, "onAfterClear"), _class2.prototype), _class2)) || _class);
873
873
  return ListReportController;
874
874
  }, false);
875
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUZW1wbGF0ZUNvbnRlbnRWaWV3IiwiQ29yZUxpYnJhcnkiLCJJbml0aWFsTG9hZE1vZGUiLCJMaXN0UmVwb3J0Q29udHJvbGxlciIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwidXNpbmdFeHRlbnNpb24iLCJJbnRlcm5hbFJvdXRpbmciLCJvdmVycmlkZSIsIm9uQWZ0ZXJCaW5kaW5nIiwiZ2V0VmlldyIsImdldENvbnRyb2xsZXIiLCJfb25BZnRlckJpbmRpbmciLCJfZGVjMyIsIkludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0RW50aXR5U2V0IiwiYmFzZSIsImdldEN1cnJlbnRFbnRpdHlTZXQiLCJfZGVjNCIsIlNpZGVFZmZlY3RzIiwiU2lkZUVmZmVjdHNPdmVycmlkZSIsIl9kZWM1IiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUiLCJfZGVjNiIsIlNoYXJlIiwiU2hhcmVPdmVycmlkZXMiLCJfZGVjNyIsIlZpZXdTdGF0ZSIsIlZpZXdTdGF0ZU92ZXJyaWRlcyIsIl9kZWM4IiwiS1BJTWFuYWdlbWVudCIsIl9kZWM5IiwiUGxhY2Vob2xkZXIiLCJfZGVjMTAiLCJNZXNzYWdlSGFuZGxlciIsIk1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUiLCJfZGVjMTEiLCJwdWJsaWNFeHRlbnNpb24iLCJfZGVjMTIiLCJmaW5hbEV4dGVuc2lvbiIsIl9kZWMxMyIsInByaXZhdGVFeHRlbnNpb24iLCJfZGVjMTQiLCJleHRlbnNpYmxlIiwiX2RlYzE1IiwiX2RlYzE2IiwiT3ZlcnJpZGVFeGVjdXRpb24iLCJBZnRlciIsIl9kZWMxNyIsIl9kZWMxOCIsIl9kZWMxOSIsIl9kZWMyMCIsIl9jbGFzcyIsIl9jbGFzczIiLCJfUGFnZUNvbnRyb2xsZXIiLCJfdGhpcyIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfZGVzY3JpcHRvcjIiLCJfZGVzY3JpcHRvcjMiLCJfZGVzY3JpcHRvcjQiLCJfZGVzY3JpcHRvcjUiLCJfZGVzY3JpcHRvcjYiLCJfZGVzY3JpcHRvcjciLCJfZGVzY3JpcHRvcjgiLCJfZGVzY3JpcHRvcjkiLCJmb3JtYXR0ZXJzIiwic2V0QUxQQ29udHJvbE1lc3NhZ2VTdHJpcCIsImFJZ25vcmVkRmllbGRzIiwiYklzQ2hhcnQiLCJvQXBwbHlTdXBwb3J0ZWQiLCJzVGV4dCIsIm9GaWx0ZXJCYXIiLCJfZ2V0RmlsdGVyQmFyQ29udHJvbCIsImlzQXJyYXkiLCJhSWdub3JlZExhYmVscyIsIk1lc3NhZ2VTdHJpcCIsImdldExhYmVscyIsImRhdGEiLCJnZXRSZXNvdXJjZU1vZGVsIiwiYklzU2VhcmNoSWdub3JlZCIsImVuYWJsZVNlYXJjaCIsImdldEFMUFRleHQiLCJnZXRUZXh0IiwiaGFuZGxlcnMiLCJvbklubGluZUVkaXRTYXZlIiwiaW5saW5lRWRpdEZsb3ciLCJpbmxpbmVFZGl0U2F2ZSIsIm9uRmlsdGVyU2VhcmNoIiwiZmlsdGVyQmFyQVBJIiwiZ2V0UGFyZW50IiwidHJpZ2dlclNlYXJjaCIsIm9uRmlsdGVyc0NoYW5nZWQiLCJvRXZlbnQiLCJvSW50ZXJuYWxNb2RlbENvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsIm9uUGVuZGluZ0ZpbHRlcnMiLCJnZXRQYXJhbWV0ZXIiLCJzZXRQcm9wZXJ0eSIsIl9zdG9yZUZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQiLCJvblZhcmlhbnRTZWxlY3RlZCIsInBhcmFtZXRlcnMiLCJnZXRQYXJhbWV0ZXJzIiwidmFyaWFudE1hbmFnZW1lbnQiLCJvcmlnaW5hbFNvdXJjZSIsImN1cnJlbnRWYXJpYW50S2V5IiwibXVsdGlNb2RlQ29udHJvbCIsIl9nZXRNdWx0aU1vZGVDb250cm9sIiwiaXNBIiwiaW52YWxpZGF0ZUNvbnRlbnQiLCJzZXRGcmVlemVDb250ZW50Iiwic2V0VGltZW91dCIsImZpbHRlckJhciIsImR5bmFtaWNQYWdlIiwiX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbCIsImZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZCIsImdldEZpbHRlckl0ZW1zIiwiZmluZCIsImZpbHRlckl0ZW0iLCJnZXRSZXF1aXJlZCIsImdldENvbmRpdGlvbnMiLCJzZXRIZWFkZXJFeHBhbmRlZCIsIl9zaG91bGRBdXRvVHJpZ2dlclNlYXJjaCIsIl9nZXRBcHBseUF1dG9tYXRpY2FsbHlPblZhcmlhbnQiLCJnZXRFeHRlbnNpb25BUEkiLCJ1cGRhdGVBcHBTdGF0ZSIsIm9uVmFyaWFudFNhdmVkIiwib25TZWFyY2giLCJvTWRjQ2hhcnQiLCJnZXRDaGFydENvbnRyb2wiLCJiSGlkZURyYWZ0IiwiRmlsdGVyVXRpbHMiLCJnZXRFZGl0U3RhdGVJc0hpZGVEcmFmdCIsIl91cGRhdGVBTFBOb3RBcHBsaWNhYmxlRmllbGRzIiwib1BhZ2VJbnRlcm5hbE1vZGVsQ29udGV4dCIsInNUZW1wbGF0ZUNvbnRlbnRWaWV3IiwiZ2V0UHJvcGVydHkiLCJnZXRQYXRoIiwiQ2hhcnQiLCJoYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzIiwiVGFibGUiLCJoYXNQZW5kaW5nVGFibGVDaGFuZ2VzIiwiRGV2aWNlIiwic3lzdGVtIiwiZGVza3RvcCIsImdldEhlYWRlckV4cGFuZGVkIiwiU3RhdGVVdGlsIiwicmV0cmlldmVFeHRlcm5hbFN0YXRlIiwidGhlbiIsIm9FeHRlcm5hbFN0YXRlIiwiZmlsdGVyQmFyQ29uZGl0aW9ucyIsImZpbHRlciIsImNhdGNoIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJnZXRWaWV3RGF0YSIsImxpdmVNb2RlIiwicGhvbmUiLCJvRHluYW1pY1BhZ2UiLCJfaXNJbml0TG9hZEVuYWJsZWQiLCJzZXRGaWx0ZXJUb2dnbGVWaXNpYmlsaXR5Iiwib25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kIiwib0NvbnRyb2xsZXIiLCJzT3V0Ym91bmRUYXJnZXQiLCJvQ29udGV4dCIsInNDcmVhdGVQYXRoIiwiX2ludGVudEJhc2VkTmF2aWdhdGlvbiIsIm9uQ2hhcnRTZWxlY3Rpb25DaGFuZ2VkIiwiZ2V0U291cmNlIiwiZ2V0Q29udGVudCIsIm9UYWJsZSIsIl9nZXRUYWJsZSIsImFEYXRhIiwiQ2hhcnRVdGlscyIsInNldENoYXJ0RmlsdGVycyIsInJlYmluZCIsIm9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZCIsInNlbGVjdGVkS2V5Iiwia2V5Iiwib0NoYXJ0IiwiX3VwZGF0ZVRhYmxlIiwiX3VwZGF0ZUNoYXJ0IiwiSHlicmlkIiwib25EeW5hbWljUGFnZVRpdGxlU3RhdGVDaGFuZ2VkIiwiZXZlbnQiLCJJbnZpc2libGVNZXNzYWdlIiwiZ2V0SW5zdGFuY2UiLCJhbm5vdW5jZSIsImdldEFzc2lnbmVkRmlsdGVyc1RleHQiLCJmaWx0ZXJzVGV4dCIsIkludmlzaWJsZU1lc3NhZ2VNb2RlIiwiQXNzZXJ0aXZlIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJleHRlbnNpb25BUEkiLCJFeHRlbnNpb25BUEkiLCJvbkluaXQiLCJQYWdlQ29udHJvbGxlciIsImFwcGx5IiwiX2hhc011bHRpVmlzdWFsaXphdGlvbnMiLCJhbHBDb250ZW50VmlldyIsIl9nZXREZWZhdWx0UGF0aCIsImdldEFwcENvbXBvbmVudCIsImdldFJvdXRlclByb3h5Iiwid2FpdEZvclJvdXRlTWF0Y2hCZWZvcmVOYXZpZ2F0aW9uIiwiX3NldEluaXRMb2FkIiwidmlldyIsInVpTW9kZWwiLCJnZXRNb2RlbCIsInBhdGgiLCJnZXRJZCIsImlzRWRpdGFibGUiLCJiaW5kRWxlbWVudCIsIm1vZGVsIiwib25FeGl0IiwiZGVzdHJveSIsImFUYWJsZXMiLCJfZ2V0Q29udHJvbHMiLCJ1cGRhdGVBY3Rpb25zIiwiRWRpdFN0YXRlIiwiaXNFZGl0U3RhdGVEaXJ0eSIsInRhYmxlIiwib1RhYmxlQmluZGluZyIsImdldFJvd0JpbmRpbmciLCJ0YWJsZUFQSSIsIkNvbW1vblV0aWxzIiwiZ2V0Um91dGluZ1NlcnZpY2UiLCJ3YWl0Rm9yQmluZGluZ0NsZWFudXAiLCJpc0FwcENvbXBvbmVudEJ1c3kiLCJhdHRhY2hFdmVudE9uY2UiLCJfdXBkYXRlVGFibGVBY3Rpb25zIiwiZ2V0VGFibGVEZWZpbml0aW9uIiwiY29udHJvbCIsInR5cGUiLCJyZXNldENoYW5nZXMiLCJyZWZyZXNoIiwiZSIsIndhcm5pbmciLCJzZXRFZGl0U3RhdGVQcm9jZXNzZWQiLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsInBhZ2VSZWFkeSIsIndhaXRGb3IiLCJfYXBwbHlBcHBTdGF0ZSIsImVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJpc0luc2lnaHRzRW5hYmxlZCIsIm9uUGFnZVJlYWR5IiwibVBhcmFtZXRlcnMiLCJmb3JjZUZvY3VzIiwiX3NldEluaXRpYWxGb2N1cyIsImdldFNoZWxsU2VydmljZXMiLCJzZXRCYWNrTmF2aWdhdGlvbiIsInVuZGVmaW5lZCIsIm9uVmlld05lZWRzUmVmcmVzaCIsInNsaWNlIiwib25BZnRlckNsZWFyIiwiYUlCTkFjdGlvbnMiLCJmb3JFYWNoIiwiZ2V0SUJOQWN0aW9ucyIsInVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5IiwidXBkYXRlTWVudUJ1dHRvblZpc2libGl0eSIsIl9zY3JvbGxUYWJsZXNUb1JvdyIsInNSb3dQYXRoIiwiVGFibGVTY3JvbGxlciIsInNjcm9sbFRhYmxlVG9Sb3ciLCJfZm9jdXNTaWxlbnQiLCJmaWx0ZXJGaWVsZCIsImZvY3VzSW5mbyIsImdldEZvY3VzSW5mbyIsInRhcmdldEluZm8iLCJzaWxlbnQiLCJmb2N1cyIsImlzSGVhZGVyRXhwYW5kZWQiLCJfaXNGaWx0ZXJCYXJIaWRkZW5Vc2VkIiwiZ2V0U2hvd01lc3NhZ2VzIiwic2V0U2hvd01lc3NhZ2VzIiwib0ZpbHRlckl0ZW0iLCJmaWVsZFRvRm9jdXMiLCJieUlkIiwiX2dldEZpbHRlckJhckNvbnRyb2xJZCIsImZvY3VzUm93IiwiX2dldFBhZ2VUaXRsZUluZm9ybWF0aW9uIiwib01hbmlmZXN0RW50cnkiLCJnZXRNYW5pZmVzdEVudHJ5IiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aXRsZSIsInN1YnRpdGxlIiwic3ViVGl0bGUiLCJpbnRlbnQiLCJpY29uIiwiX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbElkIiwiX2dldEFkYXB0YXRpb25GaWx0ZXJCYXJDb250cm9sIiwiYWRhcHRhdGlvbkZpbHRlckJhciIsImdldEluYnVpbHRGaWx0ZXIiLCJnZXRBcHBTdGF0ZUhhbmRsZXIiLCJhcHBseUFwcFN0YXRlIiwic2V0U3VzcGVuZFNlbGVjdGlvbiIsIl9pc0ZpbHRlckJhckhpZGRlbiIsIl9pc011bHRpTW9kZSIsInNldENvdW50c091dERhdGVkIiwiX2dldFNlZ21lbnRlZEJ1dHRvbiIsInNDb250cm9sIiwic1NlZ21lbnRlZEJ1dHRvbklkIiwiX2dldENvbnRyb2xGcm9tUGFnZU1vZGVsUHJvcGVydHkiLCJzUGF0aCIsImNvbnRyb2xJZCIsIl9nZXRQYWdlTW9kZWwiLCJfZ2V0VmlzdWFsRmlsdGVyQmFyQ29udHJvbCIsInNWaXN1YWxGaWx0ZXJCYXJJZCIsIlN0YWJsZUlkSGVscGVyIiwiZ2VuZXJhdGUiLCJfZ2V0RmlsdGVyQmFyVmFyaWFudENvbnRyb2wiLCJfZ2V0SWNvblRhYkJhciIsIm9Db250cm9sIiwiZ2V0U2VsZWN0ZWRJbm5lckNvbnRyb2wiLCJjb250ZW50Iiwic0tleSIsImFDb250cm9scyIsIm9UYWJNdWx0aU1vZGUiLCJnZXRJdGVtcyIsIm9JdGVtIiwiZ2V0S2V5IiwiaW5jbHVkZXMiLCJwdXNoIiwiZGVmYXVsdFBhdGgiLCJMaXN0UmVwb3J0VGVtcGxhdGluZyIsImdldERlZmF1bHRQYXRoIiwiaW5pdExvYWRNb2RlIiwiaW5pdGlhbExvYWQiLCJFbmFibGVkIiwiX2Rpc2FibGVJbml0TG9hZCIsIl9hcHBseUF1dG9tYXRpY2FsbHlPblN0YW5kYXJkVmFyaWFudCIsInZhcmlhbnRNYW5hZ2VtZW50SWQiLCJnZXRWYXJpYW50QmFja1JlZmVyZW5jZSIsImdldERhdGEiLCJyZWdpc3RlckFwcGx5QXV0b21hdGljYWxseU9uU3RhbmRhcmRWYXJpYW50IiwiYmluZCIsIl9zZXRTaGFyZU1vZGVsIiwiZm5HZXRVc2VyIiwiT2JqZWN0UGF0aCIsImdldCIsIm9TaGFyZUluZm8iLCJib29rbWFya1RpdGxlIiwiZG9jdW1lbnQiLCJib29rbWFya0N1c3RvbVVybCIsInNIYXNoIiwiaGFzaGVyIiwiZ2V0SGFzaCIsIndpbmRvdyIsImxvY2F0aW9uIiwiaHJlZiIsImlzU2hhcmVJbkphbUFjdGl2ZSIsImlzSmFtQWN0aXZlIiwib1RlbXBsYXRlUHJpdmF0ZU1vZGVsIiwiZ2V0T3duZXJDb21wb25lbnQiLCJtQ2FjaGUiLCJpZ25vcmVkRmllbGRzIiwiYUNoYXJ0cyIsInNDaGFydEVudGl0eVBhdGgiLCJzQ2hhcnRFbnRpdHlTZXQiLCJzQ2FjaGVLZXkiLCJnZXROb3RBcHBsaWNhYmxlRmlsdGVycyIsImhpZGVGaWx0ZXJCYXIiLCJ1c2VIaWRkZW5GaWx0ZXJCYXIiLCJ2YXJpYW50cyIsImdldFZhcmlhbnRzIiwiY3VycmVudFZhcmlhbnQiLCJ2YXJpYW50Iiwib1ZNIiwiQXV0byIsImdldFN0YW5kYXJkVmFyaWFudEtleSIsImdldEN1cnJlbnRWYXJpYW50S2V5Iiwib0NvbmRpdGlvbnMiLCJzdGFydHNXaXRoIiwic3RhbmRhcmRWYXJpYW50IiwiZ2V0RXhlY3V0ZU9uU2VsZWN0IiwiaXNUYWJsZUJvdW5kIiwib0lubmVyQ2hhcnQiLCJnZXRDb250cm9sRGVsZWdhdGUiLCJfZ2V0Q2hhcnQiLCJpc0JvdW5kIiwiZ2V0QmluZGluZ0luZm8iLCJidXR0b25WaXNpYmxlIiwiZ2V0U2VnbWVudGVkQnV0dG9uIiwic2V0VmlzaWJsZSIsInN2IiwiZ2V0U2VsZWN0aW9uVmFyaWFudCIsImVyciIsIm1lc3NhZ2UiLCJFcnJvciIsIlN0cmluZyIsImdldEZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQiLCJTZWxlY3Rpb25WYXJpYW50IiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJMaXN0UmVwb3J0Q29udHJvbGxlci5jb250cm9sbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IE9iamVjdFBhdGggZnJvbSBcInNhcC9iYXNlL3V0aWwvT2JqZWN0UGF0aFwiO1xuaW1wb3J0IHR5cGUgRHluYW1pY1BhZ2UgZnJvbSBcInNhcC9mL0R5bmFtaWNQYWdlXCI7XG5pbXBvcnQgdHlwZSB7IER5bmFtaWNQYWdlVGl0bGUkU3RhdGVDaGFuZ2VFdmVudCB9IGZyb20gXCJzYXAvZi9EeW5hbWljUGFnZVRpdGxlXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXh0ZW5zaWJsZSwgZmluYWxFeHRlbnNpb24sIHByaXZhdGVFeHRlbnNpb24sIHB1YmxpY0V4dGVuc2lvbiwgdXNpbmdFeHRlbnNpb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgSW50ZW50QmFzZWROYXZpZ2F0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBJbnRlcm5hbFJvdXRpbmcgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsUm91dGluZ1wiO1xuaW1wb3J0IEtQSU1hbmFnZW1lbnQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0tQSU1hbmFnZW1lbnRcIjtcbmltcG9ydCBNZXNzYWdlSGFuZGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCBQbGFjZWhvbGRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvUGxhY2Vob2xkZXJcIjtcbmltcG9ydCBTaGFyZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvU2hhcmVcIjtcbmltcG9ydCBTaWRlRWZmZWN0cyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvU2lkZUVmZmVjdHNcIjtcbmltcG9ydCBWaWV3U3RhdGUgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1ZpZXdTdGF0ZVwiO1xuaW1wb3J0IHR5cGUgeyBMaXN0UmVwb3J0RGVmaW5pdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL3RlbXBsYXRlcy9MaXN0UmVwb3J0Q29udmVydGVyXCI7XG5pbXBvcnQgRWRpdFN0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0VkaXRTdGF0ZVwiO1xuaW1wb3J0IE1lc3NhZ2VTdHJpcCBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXNzYWdlU3RyaXBcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCAqIGFzIFN0YWJsZUlkSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgQ29yZUxpYnJhcnkgZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIENoYXJ0VHlwZSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9DaGFydFwiO1xuaW1wb3J0IHR5cGUgTWFjcm9BUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvTWFjcm9BUElcIjtcbmltcG9ydCB0eXBlIENoYXJ0RGVsZWdhdGUgZnJvbSBcInNhcC9mZS9tYWNyb3MvY2hhcnQvQ2hhcnREZWxlZ2F0ZVwiO1xuaW1wb3J0IENoYXJ0VXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvY2hhcnQvQ2hhcnRVdGlsc1wiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL0ZpbHRlckJhclwiO1xuaW1wb3J0IEZpbHRlclV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlci9GaWx0ZXJVdGlsc1wiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlckJhci9GaWx0ZXJCYXJBUElcIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgU2VsZWN0aW9uVmFyaWFudCBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vU2VsZWN0aW9uVmFyaWFudFwiO1xuaW1wb3J0IEV4dGVuc2lvbkFQSSBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9MaXN0UmVwb3J0L0V4dGVuc2lvbkFQSVwiO1xuaW1wb3J0IHR5cGUgTXVsdGlwbGVNb2RlQ29udHJvbCBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9MaXN0UmVwb3J0L2NvbnRyb2xzL011bHRpcGxlTW9kZUNvbnRyb2xcIjtcbmltcG9ydCBTaWRlRWZmZWN0c092ZXJyaWRlIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL0xpc3RSZXBvcnQvb3ZlcnJpZGVzL1NpZGVFZmZlY3RzXCI7XG5pbXBvcnQgVGFibGVTY3JvbGxlciBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9UYWJsZVNjcm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBJY29uVGFiQmFyIGZyb20gXCJzYXAvbS9JY29uVGFiQmFyXCI7XG5pbXBvcnQgdHlwZSBUYWJDb250YWluZXJJdGVtIGZyb20gXCJzYXAvbS9UYWJDb250YWluZXJJdGVtXCI7XG5pbXBvcnQgRGV2aWNlIGZyb20gXCJzYXAvdWkvRGV2aWNlXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBJbnZpc2libGVNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9JbnZpc2libGVNZXNzYWdlXCI7XG5pbXBvcnQgeyBJbnZpc2libGVNZXNzYWdlTW9kZSB9IGZyb20gXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgT3ZlcnJpZGVFeGVjdXRpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9PdmVycmlkZUV4ZWN1dGlvblwiO1xuaW1wb3J0IHR5cGUgVmFyaWFudE1hbmFnZW1lbnQgZnJvbSBcInNhcC91aS9mbC92YXJpYW50cy9WYXJpYW50TWFuYWdlbWVudFwiO1xuaW1wb3J0IHR5cGUgeyBWYXJpYW50TWFuYWdlbWVudCRTZWxlY3RFdmVudCB9IGZyb20gXCJzYXAvdWkvZmwvdmFyaWFudHMvVmFyaWFudE1hbmFnZW1lbnRcIjtcbmltcG9ydCB0eXBlIENoYXJ0IGZyb20gXCJzYXAvdWkvbWRjL0NoYXJ0XCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJGaWVsZCBmcm9tIFwic2FwL3VpL21kYy9GaWx0ZXJGaWVsZFwiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyQmFyQmFzZSRGaWx0ZXJzQ2hhbmdlZEV2ZW50IH0gZnJvbSBcInNhcC91aS9tZGMvZmlsdGVyYmFyL0ZpbHRlckJhckJhc2VcIjtcbmltcG9ydCBTdGF0ZVV0aWwgZnJvbSBcInNhcC91aS9tZGMvcDEzbi9TdGF0ZVV0aWxcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IGhhc2hlciBmcm9tIFwic2FwL3VpL3RoaXJkcGFydHkvaGFzaGVyXCI7XG5pbXBvcnQgKiBhcyBMaXN0UmVwb3J0VGVtcGxhdGluZyBmcm9tIFwiLi9MaXN0UmVwb3J0VGVtcGxhdGluZ1wiO1xuaW1wb3J0IEludGVudEJhc2VkTmF2aWdhdGlvbk92ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9JbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBNZXNzYWdlSGFuZGxlck92ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IFNoYXJlT3ZlcnJpZGVzIGZyb20gXCIuL292ZXJyaWRlcy9TaGFyZVwiO1xuaW1wb3J0IFZpZXdTdGF0ZU92ZXJyaWRlcyBmcm9tIFwiLi9vdmVycmlkZXMvVmlld1N0YXRlXCI7XG5cbmNvbnN0IFRlbXBsYXRlQ29udGVudFZpZXcgPSBDb3JlTGlicmFyeS5UZW1wbGF0ZUNvbnRlbnRWaWV3LFxuXHRJbml0aWFsTG9hZE1vZGUgPSBDb3JlTGlicmFyeS5Jbml0aWFsTG9hZE1vZGU7XG5cbi8qKlxuICogQ29udHJvbGxlciBjbGFzcyBmb3IgdGhlIGxpc3QgcmVwb3J0IHBhZ2UsIHVzZWQgaW5zaWRlIGFuIFNBUCBGaW9yaSBlbGVtZW50cyBhcHBsaWNhdGlvbi5cbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBwdWJsaWNcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLnRlbXBsYXRlcy5MaXN0UmVwb3J0Lkxpc3RSZXBvcnRDb250cm9sbGVyXCIpXG5jbGFzcyBMaXN0UmVwb3J0Q29udHJvbGxlciBleHRlbmRzIFBhZ2VDb250cm9sbGVyIHtcblx0QHVzaW5nRXh0ZW5zaW9uKFxuXHRcdEludGVybmFsUm91dGluZy5vdmVycmlkZSh7XG5cdFx0XHRvbkFmdGVyQmluZGluZzogZnVuY3Rpb24gKHRoaXM6IEludGVybmFsUm91dGluZykge1xuXHRcdFx0XHQodGhpcy5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIExpc3RSZXBvcnRDb250cm9sbGVyKS5fb25BZnRlckJpbmRpbmcoKTtcblx0XHRcdH1cblx0XHR9KVxuXHQpXG5cdF9yb3V0aW5nITogSW50ZXJuYWxSb3V0aW5nO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihcblx0XHRJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbi5vdmVycmlkZSh7XG5cdFx0XHRnZXRFbnRpdHlTZXQ6IGZ1bmN0aW9uICh0aGlzOiBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbikge1xuXHRcdFx0XHRyZXR1cm4gKHRoaXMuYmFzZSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcikuZ2V0Q3VycmVudEVudGl0eVNldCgpO1xuXHRcdFx0fVxuXHRcdH0pXG5cdClcblx0X2ludGVudEJhc2VkTmF2aWdhdGlvbiE6IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihTaWRlRWZmZWN0cy5vdmVycmlkZShTaWRlRWZmZWN0c092ZXJyaWRlKSlcblx0X3NpZGVFZmZlY3RzITogU2lkZUVmZmVjdHM7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKEludGVudEJhc2VkTmF2aWdhdGlvbi5vdmVycmlkZShJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSkpXG5cdGludGVudEJhc2VkTmF2aWdhdGlvbiE6IEludGVudEJhc2VkTmF2aWdhdGlvbjtcblxuXHRAdXNpbmdFeHRlbnNpb24oU2hhcmUub3ZlcnJpZGUoU2hhcmVPdmVycmlkZXMpKVxuXHRzaGFyZSE6IFNoYXJlO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihWaWV3U3RhdGUub3ZlcnJpZGUoVmlld1N0YXRlT3ZlcnJpZGVzKSlcblx0dmlld1N0YXRlITogVmlld1N0YXRlO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihLUElNYW5hZ2VtZW50KVxuXHRrcGlNYW5hZ2VtZW50ITogS1BJTWFuYWdlbWVudDtcblxuXHRAdXNpbmdFeHRlbnNpb24oUGxhY2Vob2xkZXIpXG5cdHBsYWNlaG9sZGVyITogUGxhY2Vob2xkZXI7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKE1lc3NhZ2VIYW5kbGVyLm92ZXJyaWRlKE1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUpKVxuXHRtZXNzYWdlSGFuZGxlciE6IE1lc3NhZ2VIYW5kbGVyO1xuXG5cdHByb3RlY3RlZCBleHRlbnNpb25BUEk/OiBFeHRlbnNpb25BUEk7XG5cblx0cHJpdmF0ZSBmaWx0ZXJCYXJDb25kaXRpb25zPzogdW5rbm93bjtcblxuXHRwcml2YXRlIGhhc1BlbmRpbmdDaGFydENoYW5nZXM/OiBib29sZWFuO1xuXG5cdHByaXZhdGUgaGFzUGVuZGluZ1RhYmxlQ2hhbmdlcz86IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgZXh0ZW5zaW9uIEFQSSBmb3IgdGhlIGN1cnJlbnQgcGFnZS5cblx0ICogQHB1YmxpY1xuXHQgKiBAcmV0dXJucyBUaGUgZXh0ZW5zaW9uIEFQSS5cblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRFeHRlbnNpb25BUEkoKTogRXh0ZW5zaW9uQVBJIHtcblx0XHRpZiAoIXRoaXMuZXh0ZW5zaW9uQVBJKSB7XG5cdFx0XHR0aGlzLmV4dGVuc2lvbkFQSSA9IG5ldyBFeHRlbnNpb25BUEkodGhpcyk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmV4dGVuc2lvbkFQSTtcblx0fVxuXG5cdG9uSW5pdCgpOiB2b2lkIHtcblx0XHRQYWdlQ29udHJvbGxlci5wcm90b3R5cGUub25Jbml0LmFwcGx5KHRoaXMpO1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3QgZmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdGlmIChmaWx0ZXJCYXIpIHtcblx0XHRcdHRoaXMuX3N0b3JlRmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudChmaWx0ZXJCYXIsIG9JbnRlcm5hbE1vZGVsQ29udGV4dCk7XG5cdFx0fVxuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImhhc1BlbmRpbmdGaWx0ZXJzXCIsIHRydWUpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImhpZGVEcmFmdEluZm9cIiwgZmFsc2UpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInVvbVwiLCB7fSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwic2NhbGVmYWN0b3JcIiwge30pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInNjYWxlZmFjdG9yTnVtYmVyXCIsIHt9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJjdXJyZW5jeVwiLCB7fSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaXNJbnNpZ2h0c1N1cHBvcnRlZFwiLCBmYWxzZSk7XG5cblx0XHRpZiAodGhpcy5faGFzTXVsdGlWaXN1YWxpemF0aW9ucygpKSB7XG5cdFx0XHRsZXQgYWxwQ29udGVudFZpZXcgPSB0aGlzLl9nZXREZWZhdWx0UGF0aCgpO1xuXHRcdFx0aWYgKCFEZXZpY2Uuc3lzdGVtLmRlc2t0b3AgJiYgYWxwQ29udGVudFZpZXcgPT09IFRlbXBsYXRlQ29udGVudFZpZXcuSHlicmlkKSB7XG5cdFx0XHRcdGFscENvbnRlbnRWaWV3ID0gVGVtcGxhdGVDb250ZW50Vmlldy5DaGFydDtcblx0XHRcdH1cblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImFscENvbnRlbnRWaWV3XCIsIGFscENvbnRlbnRWaWV3KTtcblx0XHR9XG5cblx0XHQvLyBTdG9yZSBjb25kaXRpb25zIGZyb20gZmlsdGVyIGJhclxuXHRcdC8vIHRoaXMgaXMgbGF0ZXIgdXNlZCBiZWZvcmUgbmF2aWdhdGlvbiB0byBnZXQgY29uZGl0aW9ucyBhcHBsaWVkIG9uIHRoZSBmaWx0ZXIgYmFyXG5cdFx0dGhpcy5maWx0ZXJCYXJDb25kaXRpb25zID0ge307XG5cblx0XHQvLyBBcyBBcHBTdGF0ZUhhbmRsZXIuYXBwbHlBcHBTdGF0ZSB0cmlnZ2VycyBhIG5hdmlnYXRpb24gd2Ugd2FudCB0byBtYWtlIHN1cmUgaXQgd2lsbFxuXHRcdC8vIGhhcHBlbiBhZnRlciB0aGUgcm91dGVNYXRjaCBldmVudCBoYXMgYmVlbiBwcm9jZXNzZWQgKG90aGVyd2lzZSB0aGUgcm91dGVyIGdldHMgYnJva2VuKVxuXHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um91dGVyUHJveHkoKS53YWl0Rm9yUm91dGVNYXRjaEJlZm9yZU5hdmlnYXRpb24oKTtcblxuXHRcdC8vIENvbmZpZ3VyZSB0aGUgaW5pdGlhbCBsb2FkIHNldHRpbmdzXG5cdFx0dGhpcy5fc2V0SW5pdExvYWQoKTtcblx0XHRjb25zdCB2aWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0Y29uc3QgdWlNb2RlbCA9IHZpZXcuZ2V0TW9kZWwoXCJ1aVwiKTtcblx0XHRjb25zdCBwYXRoID0gYC8ke3ZpZXcuZ2V0SWQoKX1gO1xuXHRcdHVpTW9kZWwuc2V0UHJvcGVydHkocGF0aCwgeyBpc0VkaXRhYmxlOiBmYWxzZSB9KTtcblx0XHR2aWV3LmJpbmRFbGVtZW50KHsgcGF0aCwgbW9kZWw6IFwidWlcIiB9KTtcblx0fVxuXG5cdG9uRXhpdCgpOiB2b2lkIHtcblx0XHRkZWxldGUgdGhpcy5maWx0ZXJCYXJDb25kaXRpb25zO1xuXHRcdGlmICh0aGlzLmV4dGVuc2lvbkFQSSkge1xuXHRcdFx0dGhpcy5leHRlbnNpb25BUEkuZGVzdHJveSgpO1xuXHRcdH1cblx0XHRkZWxldGUgdGhpcy5leHRlbnNpb25BUEk7XG5cdH1cblxuXHRfb25BZnRlckJpbmRpbmcoKTogdm9pZCB7XG5cdFx0Y29uc3QgYVRhYmxlcyA9IHRoaXMuX2dldENvbnRyb2xzKFwidGFibGVcIikgYXMgVGFibGVbXTtcblx0XHRsZXQgdXBkYXRlQWN0aW9ucyA9IHRydWU7XG5cdFx0aWYgKEVkaXRTdGF0ZS5pc0VkaXRTdGF0ZURpcnR5KCkpIHtcblx0XHRcdHRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKT8uaW52YWxpZGF0ZUNvbnRlbnQoKTtcblx0XHRcdGNvbnN0IHRhYmxlID0gdGhpcy5fZ2V0VGFibGUoKTtcblx0XHRcdGNvbnN0IG9UYWJsZUJpbmRpbmcgPSB0YWJsZT8uZ2V0Um93QmluZGluZygpO1xuXHRcdFx0aWYgKG9UYWJsZUJpbmRpbmcpIHtcblx0XHRcdFx0dXBkYXRlQWN0aW9ucyA9IGZhbHNlO1xuXHRcdFx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlPy5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblxuXHRcdFx0XHQvLyBVcGRhdGUgdGhlIHRhYmxlIGNvbnRlbnQgdXNpbmcgc2lkZSBlZmZlY3RzIChsaXN0QmluZGluZy5yZWZyZXNoIGRvZXNuJ3Qga2VlcCBleHBhbnNpb24gc3RhdGVzIGluIGEgVHJlZVRhYmxlKVxuXHRcdFx0XHRDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy5nZXRWaWV3KCkpXG5cdFx0XHRcdFx0LmdldFJvdXRpbmdTZXJ2aWNlKClcblx0XHRcdFx0XHQud2FpdEZvckJpbmRpbmdDbGVhbnVwKClcblx0XHRcdFx0XHQudGhlbihhc3luYyAoKSA9PiB7XG5cdFx0XHRcdFx0XHRhd2FpdCBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy5nZXRWaWV3KCkpLmlzQXBwQ29tcG9uZW50QnVzeSgpO1xuXHRcdFx0XHRcdFx0b1RhYmxlQmluZGluZy5hdHRhY2hFdmVudE9uY2UoXCJkYXRhUmVjZWl2ZWRcIiwgKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVUYWJsZUFjdGlvbnMoYVRhYmxlcyk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGlmICh0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLnR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRcdFx0XHRcdFx0Ly8gQXMgdGhlIHJlZnJlc2ggb24gYSBUcmVlVGFibGUgdXNlcyBzaWRlLWVmZmVjdHMsIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBwZW5kaW5nIGNoYW5nZXNcblx0XHRcdFx0XHRcdFx0Ly8gYmVmb3JlIHRoZSBzaWRlLWVmZmVjdHMgYXJlIHF1ZXJpZWQgKGUuZy4gZmFpbGVkIFBBVENIIHF1ZXJpZXMgdGhhdCB3b3VsZCBiZSByZXNlbnQgdG9nZXRoZXIgd2l0aCBzaWRlIGVmZmVjdHMgR0VUKVxuXHRcdFx0XHRcdFx0XHR0aGlzLmdldE1vZGVsKCkucmVzZXRDaGFuZ2VzKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR0YWJsZUFQSS5yZWZyZXNoKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRcdExvZy53YXJuaW5nKFwiRXJyb3Igd2hpbGUgd2FpdGluZyByZWZyZXNoaW5nIExpc3RSZXBvcnQgdGFibGVcIiwgZSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRFZGl0U3RhdGUuc2V0RWRpdFN0YXRlUHJvY2Vzc2VkKCk7XG5cdFx0fVxuXG5cdFx0aWYgKHVwZGF0ZUFjdGlvbnMpIHtcblx0XHRcdHRoaXMuX3VwZGF0ZVRhYmxlQWN0aW9ucyhhVGFibGVzKTtcblx0XHR9XG5cblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0aWYgKCFpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImluaXRpYWxWYXJpYW50QXBwbGllZFwiKSkge1xuXHRcdFx0dGhpcy5wYWdlUmVhZHkud2FpdEZvcih0aGlzLl9hcHBseUFwcFN0YXRlKCkpO1xuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJpbml0aWFsVmFyaWFudEFwcGxpZWRcIiwgdHJ1ZSk7XG5cdFx0fVxuXHRcdGNvbnN0IGVudmlyb25tZW50Q2FwYWJpbGl0aWVzID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuZ2V0VmlldygpKS5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpO1xuXHRcdGVudmlyb25tZW50Q2FwYWJpbGl0aWVzXG5cdFx0XHQuaXNJbnNpZ2h0c0VuYWJsZWQoKVxuXHRcdFx0LnRoZW4oKGlzSW5zaWdodHNFbmFibGVkOiBib29sZWFuKSA9PiB7XG5cdFx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaXNJbnNpZ2h0c1N1cHBvcnRlZFwiLCBpc0luc2lnaHRzRW5hYmxlZCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goKGVycm9yOiB1bmtub3duKSA9PiB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGNoZWNraW5nIGlmIGluc2lnaHRzIGFyZSBlbmFibGVkXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdGZvcm1hdHRlcnMgPSB7XG5cdFx0c2V0QUxQQ29udHJvbE1lc3NhZ2VTdHJpcChcblx0XHRcdHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLFxuXHRcdFx0YUlnbm9yZWRGaWVsZHM6IHN0cmluZ1tdLFxuXHRcdFx0YklzQ2hhcnQ6IGJvb2xlYW4gfCBzdHJpbmcsXG5cdFx0XHRvQXBwbHlTdXBwb3J0ZWQ/OiB7IGVuYWJsZVNlYXJjaDogYm9vbGVhbiB9XG5cdFx0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRcdGxldCBzVGV4dCA9IFwiXCI7XG5cdFx0XHRiSXNDaGFydCA9IGJJc0NoYXJ0ID09PSBcInRydWVcIiB8fCBiSXNDaGFydCA9PT0gdHJ1ZTtcblx0XHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdFx0XHRpZiAob0ZpbHRlckJhciAmJiBBcnJheS5pc0FycmF5KGFJZ25vcmVkRmllbGRzKSAmJiBhSWdub3JlZEZpZWxkcy5sZW5ndGggPiAwICYmIGJJc0NoYXJ0KSB7XG5cdFx0XHRcdGNvbnN0IGFJZ25vcmVkTGFiZWxzID0gTWVzc2FnZVN0cmlwLmdldExhYmVscyhcblx0XHRcdFx0XHRhSWdub3JlZEZpZWxkcyxcblx0XHRcdFx0XHRvRmlsdGVyQmFyLmRhdGEoXCJlbnRpdHlUeXBlXCIpLFxuXHRcdFx0XHRcdG9GaWx0ZXJCYXIsXG5cdFx0XHRcdFx0Z2V0UmVzb3VyY2VNb2RlbChvRmlsdGVyQmFyKVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBiSXNTZWFyY2hJZ25vcmVkID0gIW9BcHBseVN1cHBvcnRlZD8uZW5hYmxlU2VhcmNoO1xuXHRcdFx0XHRzVGV4dCA9IGJJc0NoYXJ0XG5cdFx0XHRcdFx0PyBNZXNzYWdlU3RyaXAuZ2V0QUxQVGV4dChhSWdub3JlZExhYmVscywgb0ZpbHRlckJhciwgYklzU2VhcmNoSWdub3JlZClcblx0XHRcdFx0XHQ6IE1lc3NhZ2VTdHJpcC5nZXRUZXh0KGFJZ25vcmVkTGFiZWxzLCBvRmlsdGVyQmFyLCBcIlwiKTtcblx0XHRcdFx0cmV0dXJuIHNUZXh0O1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKFwiQWZ0ZXJcIilcblx0YXN5bmMgb25QYWdlUmVhZHkobVBhcmFtZXRlcnM6IHsgZm9yY2VGb2N1cz86IGJvb2xlYW4gfSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmIChtUGFyYW1ldGVycy5mb3JjZUZvY3VzKSB7XG5cdFx0XHR0aGlzLl9zZXRJbml0aWFsRm9jdXMoKTtcblx0XHR9XG5cdFx0Ly8gUmVtb3ZlIHRoZSBoYW5kbGVyIG9uIGJhY2sgbmF2aWdhdGlvbiB0aGF0IGRpc3BsYXlzIERyYWZ0IGNvbmZpcm1hdGlvblxuXHRcdGF3YWl0IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0U2hlbGxTZXJ2aWNlcygpLnNldEJhY2tOYXZpZ2F0aW9uKHVuZGVmaW5lZCk7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIGNhbGxlZCB3aGVuIHRoZSBjb250ZW50IG9mIGEgY3VzdG9tIHZpZXcgdXNlZCBpbiBhIGxpc3QgcmVwb3J0IG5lZWRzIHRvIGJlIHJlZnJlc2hlZC5cblx0ICogVGhpcyBoYXBwZW5zIGVpdGhlciB3aGVuIHRoZXJlIGlzIGEgY2hhbmdlIG9uIHRoZSBGaWx0ZXJCYXIgYW5kIHRoZSBzZWFyY2ggaXMgdHJpZ2dlcmVkLFxuXHQgKiBvciB3aGVuIGEgdGFiIHdpdGggY3VzdG9tIGNvbnRlbnQgaXMgc2VsZWN0ZWQsXG5cdCAqIG9yIHdoZW4gdGhlIHZpZXcgaXMgZm9yY2VkIHRvIGJlIHJlZnJlc2hlZCB0aHJvdWdoIHRoZSBFeHRlbnNpb24gQVBJIGZvciB0aGUgbGlzdCByZXBvcnQncyBwdWJsaWMgbWV0aG9kIHNldFRhYkNvbnRlbnRUb0JlUmVmcmVzaGVkT25OZXh0T3BlbmluZy5cblx0ICogVGhpcyBtZXRob2QgY2FuIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBjb250cm9sbGVyIGV4dGVuc2lvbiBpbiBjYXNlIG9mIGN1c3RvbWl6YXRpb24uXG5cdCAqIEBwYXJhbSBtUGFyYW1ldGVycyBNYXAgY29udGFpbmluZyB0aGUgZmlsdGVyIGNvbmRpdGlvbnMgb2YgdGhlIEZpbHRlckJhciwgdGhlIGN1cnJlbnRUYWJJRFxuXHQgKiBhbmQgdGhlIHZpZXcgcmVmcmVzaCBjYXVzZSAodGFiQ2hhbmdlZCwgc2VhcmNoIG9yIGZvcmNlZFJlZnJlc2gpLlxuXHQgKiBUaGUgbWFwIGxvb2tzIGxpa2UgdGhpczpcblx0ICogPGNvZGU+PHByZT5cblx0ICogXHR7XG5cdCAqIFx0XHRmaWx0ZXJDb25kaXRpb25zOiB7XG5cdCAqIFx0XHRcdENvdW50cnk6IFtcblx0ICogXHRcdFx0XHR7XG5cdCAqIFx0XHRcdFx0XHRvcGVyYXRvcjogXCJFUVwiXG5cdCAqXHRcdFx0XHRcdHZhbGlkYXRlZDogXCJOb3RWYWxpZGF0ZWRcIlxuXHQgKlx0XHRcdFx0XHR2YWx1ZXM6IFtcIkdlcm1hbnlcIiwgLi4uXVxuXHQgKiBcdFx0XHRcdH0sXG5cdCAqIFx0XHRcdFx0Li4uXG5cdCAqIFx0XHRcdF1cblx0ICogXHRcdFx0Li4uXG5cdCAqIFx0XHR9LFxuXHQgKlx0XHRjdXJyZW50VGFiSWQ6IFwiZmU6OkN1c3RvbVRhYjo6dGFiMVwiLFxuXHQgKlx0XHRyZWZyZXNoQ2F1c2U6IFwidGFiQ2hhbmdlZFwiIHwgXCJzZWFyY2hcIiB8IFwiZm9yY2VkUmVmcmVzaFwiXG5cdCAqXHR9XG5cdCAqIDwvcHJlPjwvY29kZT5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdG9uVmlld05lZWRzUmVmcmVzaChtUGFyYW1ldGVyczogdW5rbm93bik6IHZvaWQge1xuXHRcdC8qIFRvIGJlIG92ZXJyaWRlbiAqL1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCBjYWxsZWQgd2hlbiBhIGZpbHRlciBvciBzZWFyY2ggdmFsdWUgaGFzIGJlZW4gY2hhbmdlZCBpbiB0aGUgRmlsdGVyQmFyLFxuXHQgKiBidXQgaGFzIG5vdCBiZWVuIHZhbGlkYXRlZCB5ZXQgYnkgdGhlIGVuZCB1c2VyICh3aXRoIHRoZSAnR28nIG9yICdTZWFyY2gnIGJ1dHRvbikuXG5cdCAqIFR5cGljYWxseSwgdGhlIGNvbnRlbnQgb2YgdGhlIGN1cnJlbnQgdGFiIGlzIGdyZXllZCBvdXQgdW50aWwgdGhlIGZpbHRlcnMgYXJlIHZhbGlkYXRlZC5cblx0ICogVGhpcyBtZXRob2QgY2FuIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBjb250cm9sbGVyIGV4dGVuc2lvbiBpbiBjYXNlIG9mIGN1c3RvbWl6YXRpb24uXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0b25QZW5kaW5nRmlsdGVycygpOiB2b2lkIHtcblx0XHQvKiBUbyBiZSBvdmVycmlkZW4gKi9cblx0fVxuXG5cdGdldEN1cnJlbnRFbnRpdHlTZXQoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0VGFibGUoKT8uZGF0YShcInRhcmdldENvbGxlY3Rpb25QYXRoXCIpLnNsaWNlKDEpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCBjYWxsZWQgd2hlbiB0aGUgJ0NsZWFyJyBidXR0b24gb24gdGhlIEZpbHRlckJhciBpcyBwcmVzc2VkLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdG9uQWZ0ZXJDbGVhcigpOiB2b2lkIHtcblx0XHQvKiBUbyBiZSBvdmVycmlkZW4gKi9cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpbml0aWF0ZXMgdGhlIHVwZGF0ZSBvZiB0aGUgZW5hYmxlZCBzdGF0ZSBvZiB0aGUgRGF0YUZpZWxkRm9yQWN0aW9uIGFuZCB0aGUgdmlzaWJsZSBzdGF0ZSBvZiB0aGUgRGF0YUZpZWxkRm9ySUJOIGJ1dHRvbnMuXG5cdCAqIEBwYXJhbSBhVGFibGVzIEFycmF5IG9mIHRhYmxlcyBpbiB0aGUgbGlzdCByZXBvcnRcblx0ICovXG5cdF91cGRhdGVUYWJsZUFjdGlvbnMoYVRhYmxlczogVGFibGVbXSk6IHZvaWQge1xuXHRcdGxldCBhSUJOQWN0aW9uczogVUk1RWxlbWVudFtdID0gW107XG5cdFx0YVRhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uIChvVGFibGUpIHtcblx0XHRcdGFJQk5BY3Rpb25zID0gQ29tbW9uVXRpbHMuZ2V0SUJOQWN0aW9ucyhvVGFibGUsIGFJQk5BY3Rpb25zKTtcblx0XHR9KTtcblx0XHRDb21tb25VdGlscy51cGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eShhSUJOQWN0aW9ucywgdGhpcy5nZXRWaWV3KCkpO1xuXHRcdENvbW1vblV0aWxzLnVwZGF0ZU1lbnVCdXR0b25WaXNpYmxpdHkoYUlCTkFjdGlvbnMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIHNjcm9sbHMgdG8gYSBzcGVjaWZpYyByb3cgb24gYWxsIHRoZSBhdmFpbGFibGUgdGFibGVzLlxuXHQgKiBAcGFyYW0gc1Jvd1BhdGggVGhlIHBhdGggb2YgdGhlIHRhYmxlIHJvdyBjb250ZXh0IHRvIGJlIHNjcm9sbGVkIHRvXG5cdCAqL1xuXHRfc2Nyb2xsVGFibGVzVG9Sb3coc1Jvd1BhdGg6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMuX2dldENvbnRyb2xzKFwidGFibGVcIikuZm9yRWFjaChmdW5jdGlvbiAob1RhYmxlOiBDb250cm9sKSB7XG5cdFx0XHRUYWJsZVNjcm9sbGVyLnNjcm9sbFRhYmxlVG9Sb3cob1RhYmxlIGFzIFRhYmxlLCBzUm93UGF0aCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyBhIHNpbGVudCBmb2N1cyBvbiB0aGUgZmlsdGVyIGZpZWxkLiBTdXBwcmVzc2VzIHRoZSBvcGVuaW5nIG9mIHRoZSB0eXBlLWFoZWFkIHBvcHVwLlxuXHQgKiBAcGFyYW0gZmlsdGVyRmllbGQgVGhlIGZpZWxkIHdoZXJlIHRoZSBmb2N1cyBzaG91bGQgYmUgc2V0IGFmdGVyIHRoZSBpbml0aWFsIGxvYWRcblx0ICovXG5cdF9mb2N1c1NpbGVudChmaWx0ZXJGaWVsZDogRmlsdGVyRmllbGQpOiB2b2lkIHtcblx0XHRjb25zdCBmb2N1c0luZm8gPSBmaWx0ZXJGaWVsZC5nZXRGb2N1c0luZm8oKSBhcyB7IHRhcmdldEluZm86IG9iamVjdCB9O1xuXHRcdGZvY3VzSW5mby50YXJnZXRJbmZvID0geyBzaWxlbnQ6IHRydWUgfTtcblx0XHRmaWx0ZXJGaWVsZC5mb2N1cyhmb2N1c0luZm8pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIGluaXRpYWwgZm9jdXMgaW4gYSBsaXN0IHJlcG9ydCBiYXNlZCBvbiB0aGUgVXNlciBFeHBlcmllbmNlIGd1aWRlbGluZXMuXG5cdCAqXG5cdCAqL1xuXHRfc2V0SW5pdGlhbEZvY3VzKCk6IHZvaWQge1xuXHRcdGNvbnN0IGR5bmFtaWNQYWdlID0gdGhpcy5fZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sKCksXG5cdFx0XHRpc0hlYWRlckV4cGFuZGVkID0gZHluYW1pY1BhZ2UuZ2V0SGVhZGVyRXhwYW5kZWQoKSxcblx0XHRcdGZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKSBhcyBGaWx0ZXJCYXI7XG5cdFx0aWYgKGZpbHRlckJhciAmJiAhdGhpcy5faXNGaWx0ZXJCYXJIaWRkZW5Vc2VkKCkpIHtcblx0XHRcdC8vRW5hYmxpbmcgbWFuZGF0b3J5IGZpbHRlciBmaWVsZHMgbWVzc2FnZSBkaWFsb2dcblx0XHRcdGlmICghZmlsdGVyQmFyLmdldFNob3dNZXNzYWdlcygpKSB7XG5cdFx0XHRcdGZpbHRlckJhci5zZXRTaG93TWVzc2FnZXModHJ1ZSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoaXNIZWFkZXJFeHBhbmRlZCkge1xuXHRcdFx0XHRjb25zdCBmaXJzdEVtcHR5TWFuZGF0b3J5RmllbGQgPSBmaWx0ZXJCYXIuZ2V0RmlsdGVySXRlbXMoKS5maW5kKGZ1bmN0aW9uIChvRmlsdGVySXRlbTogRmlsdGVyRmllbGQpIHtcblx0XHRcdFx0XHRyZXR1cm4gb0ZpbHRlckl0ZW0uZ2V0UmVxdWlyZWQoKSAmJiBvRmlsdGVySXRlbS5nZXRDb25kaXRpb25zKCkubGVuZ3RoID09PSAwO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0Ly9Gb2N1c2luZyBvbiB0aGUgZmlyc3QgZW1wdHkgbWFuZGF0b3J5IGZpbHRlciBmaWVsZCwgb3Igb24gdGhlIGZpcnN0IGZpbHRlciBmaWVsZCBpZiB0aGUgdGFibGUgZGF0YSBpcyBsb2FkZWRcblx0XHRcdFx0Ly8gRG8gYSBcInNpbGVudFwiIGZvY3VzIGZvciBGaWx0ZXJGaWVsZCwgYnkgYWRkaW5nIHRoZSBzaWxlbnQgYXR0cmlidXRlLiBUaGUgc2lsZW50IGF0dHJpYnV0ZSBzdXBwcmVzc2VzIHR5cGVhaGVhZCBvcGVuaW5nLlxuXHRcdFx0XHRpZiAoZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkKSB7XG5cdFx0XHRcdFx0aWYgKGZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZC5pc0E8RmlsdGVyRmllbGQ+KFwic2FwLnVpLm1kYy5GaWx0ZXJGaWVsZFwiKSkge1xuXHRcdFx0XHRcdFx0dGhpcy5fZm9jdXNTaWxlbnQoZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0KGZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZCBhcyBDb250cm9sKS5mb2N1cygpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmICh0aGlzLl9pc0luaXRMb2FkRW5hYmxlZCgpICYmIGZpbHRlckJhci5nZXRGaWx0ZXJJdGVtcygpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHQvLyBBZGQgY2hlY2sgZm9yIGF2YWlsYWJsZSBmaWx0ZXJJdGVtc1xuXHRcdFx0XHRcdGNvbnN0IGZpZWxkVG9Gb2N1cyA9IGZpbHRlckJhci5nZXRGaWx0ZXJJdGVtcygpWzBdO1xuXHRcdFx0XHRcdGlmIChmaWVsZFRvRm9jdXMuaXNBPEZpbHRlckZpZWxkPihcInNhcC51aS5tZGMuRmlsdGVyRmllbGRcIikpIHtcblx0XHRcdFx0XHRcdHRoaXMuX2ZvY3VzU2lsZW50KGZpZWxkVG9Gb2N1cyk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdChmaWVsZFRvRm9jdXMgYXMgQ29udHJvbCkuZm9jdXMoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly9Gb2N1c2luZyBvbiB0aGUgR28gYnV0dG9uXG5cdFx0XHRcdFx0dGhpcy5nZXRWaWV3KCkuYnlJZChgJHt0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sSWQoKX0tYnRuU2VhcmNoYCk/LmZvY3VzKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAodGhpcy5faXNJbml0TG9hZEVuYWJsZWQoKSkge1xuXHRcdFx0XHR0aGlzLl9nZXRUYWJsZSgpXG5cdFx0XHRcdFx0Py5mb2N1c1JvdygwKVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHNldHRpbmcgaW5pdGlhbCBmb2N1cyBvbiB0aGUgdGFibGUgXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuX2dldFRhYmxlKClcblx0XHRcdFx0Py5mb2N1c1JvdygwKVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgc2V0dGluZyBpbml0aWFsIGZvY3VzIG9uIHRoZSB0YWJsZSBcIiwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgX2dldFBhZ2VUaXRsZUluZm9ybWF0aW9uKCk6IFByb21pc2U8eyB0aXRsZT86IHN0cmluZzsgc3VidGl0bGU6IHN0cmluZzsgaW50ZW50OiBzdHJpbmc7IGljb246IHN0cmluZyB9PiB7XG5cdFx0Y29uc3Qgb01hbmlmZXN0RW50cnkgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldE1hbmlmZXN0RW50cnkoXCJzYXAuYXBwXCIpO1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuXHRcdFx0dGl0bGU6IG9NYW5pZmVzdEVudHJ5LnRpdGxlLFxuXHRcdFx0c3VidGl0bGU6IG9NYW5pZmVzdEVudHJ5LnN1YlRpdGxlIHx8IFwiXCIsXG5cdFx0XHRpbnRlbnQ6IFwiXCIsXG5cdFx0XHRpY29uOiBcIlwiXG5cdFx0fSk7XG5cdH1cblxuXHRfZ2V0RmlsdGVyQmFyQ29udHJvbCgpOiBGaWx0ZXJCYXIgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5ieUlkKHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2xJZCgpKSBhcyBGaWx0ZXJCYXIgfCB1bmRlZmluZWQ7XG5cdH1cblxuXHRfZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sKCk6IER5bmFtaWNQYWdlIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuYnlJZCh0aGlzLl9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2xJZCgpKSBhcyBEeW5hbWljUGFnZTtcblx0fVxuXG5cdF9nZXRBZGFwdGF0aW9uRmlsdGVyQmFyQ29udHJvbCgpOiBDb250cm9sIHtcblx0XHQvLyBJZiB0aGUgYWRhcHRhdGlvbiBmaWx0ZXIgYmFyIGlzIHBhcnQgb2YgdGhlIERPTSB0cmVlLCB0aGUgXCJBZGFwdCBGaWx0ZXJcIiBkaWFsb2cgaXMgb3Blbixcblx0XHQvLyBhbmQgd2UgcmV0dXJuIHRoZSBhZGFwdGF0aW9uIGZpbHRlciBiYXIgYXMgYW4gYWN0aXZlIGNvbnRyb2wgKHZpc2libGUgZm9yIHRoZSB1c2VyKVxuXHRcdGNvbnN0IGFkYXB0YXRpb25GaWx0ZXJCYXIgPSAodGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpIGFzIHsgZ2V0SW5idWlsdEZpbHRlcj86IEZ1bmN0aW9uIH0pLmdldEluYnVpbHRGaWx0ZXI/LigpO1xuXHRcdHJldHVybiBhZGFwdGF0aW9uRmlsdGVyQmFyPy5nZXRQYXJlbnQoKSA/IGFkYXB0YXRpb25GaWx0ZXJCYXIgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHRhc3luYyBfYXBwbHlBcHBTdGF0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRhd2FpdCB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldEFwcFN0YXRlSGFuZGxlcigpLmFwcGx5QXBwU3RhdGUodGhpcy5nZXRWaWV3KCkpO1xuXHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdFx0aWYgKG9GaWx0ZXJCYXIpIHtcblx0XHRcdG9GaWx0ZXJCYXIuc2V0U3VzcGVuZFNlbGVjdGlvbihmYWxzZSk7XG5cdFx0fSBlbHNlIGlmICh0aGlzLl9pc0ZpbHRlckJhckhpZGRlbigpKSB7XG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaGFzUGVuZGluZ0ZpbHRlcnNcIiwgZmFsc2UpO1xuXHRcdFx0aWYgKHRoaXMuX2lzTXVsdGlNb2RlKCkpIHtcblx0XHRcdFx0dGhpcy5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpLnNldENvdW50c091dERhdGVkKHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9nZXRTZWdtZW50ZWRCdXR0b24oc0NvbnRyb2w6IHN0cmluZyk6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IHNTZWdtZW50ZWRCdXR0b25JZCA9IChzQ29udHJvbCA9PT0gXCJDaGFydFwiID8gdGhpcy5nZXRDaGFydENvbnRyb2woKSA6IHRoaXMuX2dldFRhYmxlKCkpPy5kYXRhKFwic2VnbWVudGVkQnV0dG9uSWRcIik7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQoc1NlZ21lbnRlZEJ1dHRvbklkKTtcblx0fVxuXG5cdF9nZXRDb250cm9sRnJvbVBhZ2VNb2RlbFByb3BlcnR5KHNQYXRoOiBzdHJpbmcpOiBDb250cm9sIHwgTWFjcm9BUEkgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGNvbnRyb2xJZCA9IHRoaXMuX2dldFBhZ2VNb2RlbCgpPy5nZXRQcm9wZXJ0eShzUGF0aCk7XG5cdFx0cmV0dXJuIGNvbnRyb2xJZCA/ICh0aGlzLmdldFZpZXcoKS5ieUlkKGNvbnRyb2xJZCkgYXMgQ29udHJvbCkgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHRfZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sSWQoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0UGFnZU1vZGVsKCk/LmdldFByb3BlcnR5KFwiL2R5bmFtaWNMaXN0UmVwb3J0SWRcIikgfHwgXCJcIjtcblx0fVxuXG5cdF9nZXRGaWx0ZXJCYXJDb250cm9sSWQoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0UGFnZU1vZGVsKCk/LmdldFByb3BlcnR5KFwiL2ZpbHRlckJhcklkXCIpIHx8IFwiXCI7XG5cdH1cblxuXHRnZXRDaGFydENvbnRyb2woKTogQ29udHJvbCB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldENvbnRyb2xGcm9tUGFnZU1vZGVsUHJvcGVydHkoXCIvc2luZ2xlQ2hhcnRJZFwiKSBhcyBDaGFydFR5cGU7XG5cdH1cblxuXHRfZ2V0VmlzdWFsRmlsdGVyQmFyQ29udHJvbCgpOiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBzVmlzdWFsRmlsdGVyQmFySWQgPSBTdGFibGVJZEhlbHBlci5nZW5lcmF0ZShbXCJ2aXN1YWxGaWx0ZXJcIiwgdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbElkKCldKTtcblx0XHRyZXR1cm4gc1Zpc3VhbEZpbHRlckJhcklkID8gdGhpcy5nZXRWaWV3KCkuYnlJZChzVmlzdWFsRmlsdGVyQmFySWQpIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0X2dldEZpbHRlckJhclZhcmlhbnRDb250cm9sKCk6IFZhcmlhbnRNYW5hZ2VtZW50IHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0Q29udHJvbEZyb21QYWdlTW9kZWxQcm9wZXJ0eShcIi92YXJpYW50TWFuYWdlbWVudC9pZFwiKSBhcyBWYXJpYW50TWFuYWdlbWVudDtcblx0fVxuXG5cdF9nZXRNdWx0aU1vZGVDb250cm9sKCk6IE11bHRpcGxlTW9kZUNvbnRyb2wge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5ieUlkKFwiZmU6OlRhYk11bHRpcGxlTW9kZTo6Q29udHJvbFwiKSBhcyBNdWx0aXBsZU1vZGVDb250cm9sO1xuXHR9XG5cblx0X2dldEljb25UYWJCYXIoKTogSWNvblRhYkJhciB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQoXCJmZTo6VGFiTXVsdGlwbGVNb2RlXCIpIGFzIEljb25UYWJCYXI7XG5cdH1cblxuXHRfZ2V0VGFibGUoKTogVGFibGUgfCB1bmRlZmluZWQge1xuXHRcdGlmICh0aGlzLl9pc011bHRpTW9kZSgpKSB7XG5cdFx0XHRjb25zdCBvQ29udHJvbCA9IHRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKT8uZ2V0U2VsZWN0ZWRJbm5lckNvbnRyb2woKT8uY29udGVudDtcblx0XHRcdHJldHVybiBvQ29udHJvbD8uaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSA/IChvQ29udHJvbCBhcyBUYWJsZSkgOiB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0aGlzLl9nZXRDb250cm9sRnJvbVBhZ2VNb2RlbFByb3BlcnR5KFwiL3NpbmdsZVRhYmxlSWRcIikgYXMgVGFibGUgfCB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cblx0X2dldENvbnRyb2xzKHNLZXk/OiBzdHJpbmcpOiBDb250cm9sW10ge1xuXHRcdGlmICh0aGlzLl9pc011bHRpTW9kZSgpKSB7XG5cdFx0XHRjb25zdCBhQ29udHJvbHM6IENvbnRyb2xbXSA9IFtdO1xuXHRcdFx0Y29uc3Qgb1RhYk11bHRpTW9kZSA9IHRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKS5jb250ZW50O1xuXHRcdFx0b1RhYk11bHRpTW9kZS5nZXRJdGVtcygpLmZvckVhY2goKG9JdGVtOiB1bmtub3duKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9Db250cm9sID0gdGhpcy5nZXRWaWV3KCkuYnlJZCgob0l0ZW0gYXMgVGFiQ29udGFpbmVySXRlbSkuZ2V0S2V5KCkpIGFzIENvbnRyb2w7XG5cdFx0XHRcdGlmIChvQ29udHJvbCAmJiBzS2V5KSB7XG5cdFx0XHRcdFx0aWYgKChvSXRlbSBhcyBUYWJDb250YWluZXJJdGVtKS5nZXRLZXkoKS5pbmNsdWRlcyhgZmU6OiR7c0tleX1gKSkge1xuXHRcdFx0XHRcdFx0YUNvbnRyb2xzLnB1c2gob0NvbnRyb2wpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChvQ29udHJvbCAhPT0gdW5kZWZpbmVkICYmIG9Db250cm9sICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0YUNvbnRyb2xzLnB1c2gob0NvbnRyb2wpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBhQ29udHJvbHM7XG5cdFx0fSBlbHNlIGlmIChzS2V5ID09PSBcIkNoYXJ0XCIpIHtcblx0XHRcdGNvbnN0IG9DaGFydCA9IHRoaXMuZ2V0Q2hhcnRDb250cm9sKCk7XG5cdFx0XHRyZXR1cm4gb0NoYXJ0ID8gW29DaGFydF0gOiBbXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3Qgb1RhYmxlID0gdGhpcy5fZ2V0VGFibGUoKTtcblx0XHRcdHJldHVybiBvVGFibGUgPyBbb1RhYmxlXSA6IFtdO1xuXHRcdH1cblx0fVxuXG5cdF9nZXREZWZhdWx0UGF0aCgpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGRlZmF1bHRQYXRoID0gTGlzdFJlcG9ydFRlbXBsYXRpbmcuZ2V0RGVmYXVsdFBhdGgodGhpcy5fZ2V0UGFnZU1vZGVsKCk/LmdldFByb3BlcnR5KFwiL3ZpZXdzXCIpIHx8IFtdKTtcblx0XHRzd2l0Y2ggKGRlZmF1bHRQYXRoKSB7XG5cdFx0XHRjYXNlIFwicHJpbWFyeVwiOlxuXHRcdFx0XHRyZXR1cm4gVGVtcGxhdGVDb250ZW50Vmlldy5DaGFydDtcblx0XHRcdGNhc2UgXCJzZWNvbmRhcnlcIjpcblx0XHRcdFx0cmV0dXJuIFRlbXBsYXRlQ29udGVudFZpZXcuVGFibGU7XG5cdFx0XHRjYXNlIFwiYm90aFwiOlxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIFRlbXBsYXRlQ29udGVudFZpZXcuSHlicmlkO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8ga25vdyBpZiBMaXN0UmVwb3J0IGlzIGNvbmZpZ3VyZWQgd2l0aCBNdWx0aXBsZSBUYWJsZSBtb2RlLlxuXHQgKiBAcmV0dXJucyBJcyBNdWx0aXBsZSBUYWJsZSBtb2RlIHNldD9cblx0ICovXG5cdF9pc011bHRpTW9kZSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gISF0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0UHJvcGVydHkoXCIvbXVsdGlWaWV3c0NvbnRyb2xcIik7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGtub3cgaWYgTGlzdFJlcG9ydCBpcyBjb25maWd1cmVkIHRvIGxvYWQgZGF0YSBhdCBzdGFydCB1cC5cblx0ICogQHJldHVybnMgSXMgSW5pdExvYWQgZW5hYmxlZD9cblx0ICovXG5cdF9pc0luaXRMb2FkRW5hYmxlZCgpOiBib29sZWFuIHtcblx0XHRjb25zdCBpbml0TG9hZE1vZGUgPSB0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpLmluaXRpYWxMb2FkO1xuXHRcdHJldHVybiBpbml0TG9hZE1vZGUgPT09IEluaXRpYWxMb2FkTW9kZS5FbmFibGVkO1xuXHR9XG5cblx0X2hhc011bHRpVmlzdWFsaXphdGlvbnMoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldFBhZ2VNb2RlbCgpPy5nZXRQcm9wZXJ0eShcIi9oYXNNdWx0aVZpc3VhbGl6YXRpb25zXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBzdXNwZW5kIHNlYXJjaCBvbiB0aGUgZmlsdGVyIGJhci4gVGhlIGluaXRpYWwgbG9hZGluZyBvZiBkYXRhIGlzIGRpc2FibGVkIGJhc2VkIG9uIHRoZSBtYW5pZmVzdCBjb25maWd1cmF0aW9uIEluaXRMb2FkIC0gRGlzYWJsZWQvQXV0by5cblx0ICogSXQgaXMgZW5hYmxlZCBsYXRlciB3aGVuIHRoZSB2aWV3IHN0YXRlIGlzIHNldCwgd2hlbiBpdCBpcyBwb3NzaWJsZSB0byByZWFsaXplIGlmIHRoZXJlIGFyZSBkZWZhdWx0IGZpbHRlcnMuXG5cdCAqL1xuXHRfZGlzYWJsZUluaXRMb2FkKCk6IHZvaWQge1xuXHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHQvLyBjaGVjayBmb3IgZmlsdGVyIGJhciBoaWRkZW5cblx0XHRpZiAoZmlsdGVyQmFyKSB7XG5cdFx0XHRmaWx0ZXJCYXIuc2V0U3VzcGVuZFNlbGVjdGlvbih0cnVlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIGNhbGxlZCBieSBmbGV4IHRvIGRldGVybWluZSBpZiB0aGUgYXBwbHlBdXRvbWF0aWNhbGx5IHNldHRpbmcgb24gdGhlIHZhcmlhbnQgaXMgdmFsaWQuXG5cdCAqIENhbGxlZCBvbmx5IGZvciBTdGFuZGFyZCBWYXJpYW50IGFuZCBvbmx5IHdoZW4gdGhlcmUgaXMgZGlzcGxheSB0ZXh0IHNldCBmb3IgYXBwbHlBdXRvbWF0aWNhbGx5IChGRSBvbmx5IHNldHMgaXQgZm9yIEF1dG8pLlxuXHQgKiBAcmV0dXJucyBCb29sZWFuIHRydWUgaWYgZGF0YSBzaG91bGQgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHksIGZhbHNlIG90aGVyd2lzZVxuXHQgKi9cblx0X2FwcGx5QXV0b21hdGljYWxseU9uU3RhbmRhcmRWYXJpYW50KCk6IGJvb2xlYW4ge1xuXHRcdC8vIFdlIGFsd2F5cyByZXR1cm4gZmFsc2UgYW5kIHRha2UgY2FyZSBvZiBpdCB3aGVuIHZpZXcgc3RhdGUgaXMgc2V0XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbmZpZ3VyZSB0aGUgc2V0dGluZ3MgZm9yIGluaXRpYWwgbG9hZCBiYXNlZCBvblxuXHQgKiAtIG1hbmlmZXN0IHNldHRpbmcgaW5pdExvYWQgLSBFbmFibGVkL0Rpc2FibGVkL0F1dG9cblx0ICogLSB1c2VyJ3Mgc2V0dGluZyBvZiBhcHBseUF1dG9tYXRpY2FsbHkgb24gdmFyaWFudFxuXHQgKiAtIGlmIHRoZXJlIGFyZSBkZWZhdWx0IGZpbHRlcnNcblx0ICogV2UgZGlzYWJsZSB0aGUgZmlsdGVyIGJhciBzZWFyY2ggYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5hYmxlIGl0IHdoZW4gdmlldyBzdGF0ZSBpcyBzZXQuXG5cdCAqL1xuXHRfc2V0SW5pdExvYWQoKTogdm9pZCB7XG5cdFx0Ly8gaWYgaW5pdExvYWQgaXMgRGlzYWJsZWQgb3IgQXV0bywgc3dpdGNoIG9mZiBmaWx0ZXIgYmFyIHNlYXJjaCB0ZW1wb3JhcmlseSBhdCBzdGFydFxuXHRcdGlmICghdGhpcy5faXNJbml0TG9hZEVuYWJsZWQoKSkge1xuXHRcdFx0dGhpcy5fZGlzYWJsZUluaXRMb2FkKCk7XG5cdFx0fVxuXHRcdC8vIHNldCBob29rIGZvciBmbGV4IGZvciB3aGVuIHN0YW5kYXJkIHZhcmlhbnQgaXMgc2V0IChhdCBzdGFydCBvciBieSB1c2VyIGF0IHJ1bnRpbWUpXG5cdFx0Ly8gcmVxdWlyZWQgdG8gb3ZlcnJpZGUgdGhlIHVzZXIgc2V0dGluZyAnYXBwbHkgYXV0b21hdGljYWxseScgYmVoYXZpb3VyIGlmIHRoZXJlIGFyZSBubyBmaWx0ZXJzXG5cdFx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnRJZCA9IExpc3RSZXBvcnRUZW1wbGF0aW5nLmdldFZhcmlhbnRCYWNrUmVmZXJlbmNlKFxuXHRcdFx0dGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSxcblx0XHRcdHRoaXMuX2dldFBhZ2VNb2RlbCgpPy5nZXREYXRhKCkgYXMgTGlzdFJlcG9ydERlZmluaXRpb25cblx0XHQpO1xuXHRcdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50ID0gdmFyaWFudE1hbmFnZW1lbnRJZCAmJiAodGhpcy5nZXRWaWV3KCkuYnlJZCh2YXJpYW50TWFuYWdlbWVudElkKSBhcyBWYXJpYW50TWFuYWdlbWVudCk7XG5cdFx0aWYgKHZhcmlhbnRNYW5hZ2VtZW50KSB7XG5cdFx0XHQoXG5cdFx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50IGFzIHsgcmVnaXN0ZXJBcHBseUF1dG9tYXRpY2FsbHlPblN0YW5kYXJkVmFyaWFudD86IEZ1bmN0aW9uIH1cblx0XHRcdCk/LnJlZ2lzdGVyQXBwbHlBdXRvbWF0aWNhbGx5T25TdGFuZGFyZFZhcmlhbnQ/Lih0aGlzLl9hcHBseUF1dG9tYXRpY2FsbHlPblN0YW5kYXJkVmFyaWFudC5iaW5kKHRoaXMpKTtcblx0XHR9XG5cdH1cblxuXHRfc2V0U2hhcmVNb2RlbCgpOiB2b2lkIHtcblx0XHQvLyBUT0RPOiBkZWFjdGl2YXRlZCBmb3Igbm93IC0gY3VycmVudGx5IHRoZXJlIGlzIG5vIF90ZW1wbFByaXYgYW55bW9yZSwgdG8gYmUgZGlzY3Vzc2VkXG5cdFx0Ly8gdGhpcyBtZXRob2QgaXMgY3VycmVudGx5IG5vdCBjYWxsZWQgYW55bW9yZSBmcm9tIHRoZSBpbml0IG1ldGhvZFxuXG5cdFx0Y29uc3QgZm5HZXRVc2VyID0gT2JqZWN0UGF0aC5nZXQoXCJzYXAudXNoZWxsLkNvbnRhaW5lci5nZXRVc2VyXCIpO1xuXHRcdC8vdmFyIG9NYW5pZmVzdCA9IHRoaXMuZ2V0T3duZXJDb21wb25lbnQoKS5nZXRBcHBDb21wb25lbnQoKS5nZXRNZXRhZGF0YSgpLmdldE1hbmlmZXN0RW50cnkoXCJzYXAudWlcIik7XG5cdFx0Ly92YXIgc0Jvb2ttYXJrSWNvbiA9IChvTWFuaWZlc3QgJiYgb01hbmlmZXN0Lmljb25zICYmIG9NYW5pZmVzdC5pY29ucy5pY29uKSB8fCBcIlwiO1xuXG5cdFx0Ly9zaGFyZU1vZGVsOiBIb2xkcyBhbGwgdGhlIHNoYXJpbmcgcmVsZXZhbnQgaW5mb3JtYXRpb24gYW5kIGluZm8gdXNlZCBpbiBYTUwgdmlld1xuXHRcdGNvbnN0IG9TaGFyZUluZm8gPSB7XG5cdFx0XHRib29rbWFya1RpdGxlOiBkb2N1bWVudC50aXRsZSwgLy9UbyBuYW1lIHRoZSBib29rbWFyayBhY2NvcmRpbmcgdG8gdGhlIGFwcCB0aXRsZS5cblx0XHRcdGJvb2ttYXJrQ3VzdG9tVXJsOiBmdW5jdGlvbiAoKTogc3RyaW5nIHtcblx0XHRcdFx0Y29uc3Qgc0hhc2ggPSBoYXNoZXIuZ2V0SGFzaCgpO1xuXHRcdFx0XHRyZXR1cm4gc0hhc2ggPyBgIyR7c0hhc2h9YCA6IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuXHRcdFx0fSxcblx0XHRcdC8qXG5cdFx0XHRcdFx0XHRcdFRvIGJlIGFjdGl2YXRlZCBvbmNlIHRoZSBGTFAgc2hvd3MgdGhlIGNvdW50IC0gc2VlIGNvbW1lbnQgYWJvdmVcblx0XHRcdFx0XHRcdFx0Ym9va21hcmtTZXJ2aWNlVXJsOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHQvL3ZhciBvVGFibGUgPSBvVGFibGUuZ2V0SW5uZXJUYWJsZSgpOyBvVGFibGUgaXMgYWxyZWFkeSB0aGUgc2FwLmZlIHRhYmxlIChidXQgbm90IHRoZSBpbm5lciBvbmUpXG5cdFx0XHRcdFx0XHRcdFx0Ly8gd2Ugc2hvdWxkIHVzZSB0YWJsZS5nZXRMaXN0QmluZGluZ0luZm8gaW5zdGVhZCBvZiB0aGUgYmluZGluZ1xuXHRcdFx0XHRcdFx0XHRcdHZhciBvQmluZGluZyA9IG9UYWJsZS5nZXRCaW5kaW5nKFwicm93c1wiKSB8fCBvVGFibGUuZ2V0QmluZGluZyhcIml0ZW1zXCIpO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBvQmluZGluZyA/IGZuR2V0RG93bmxvYWRVcmwob0JpbmRpbmcpIDogXCJcIjtcblx0XHRcdFx0XHRcdFx0fSwqL1xuXHRcdFx0aXNTaGFyZUluSmFtQWN0aXZlOiAhIWZuR2V0VXNlciAmJiBmbkdldFVzZXIoKS5pc0phbUFjdGl2ZSgpXG5cdFx0fTtcblxuXHRcdGNvbnN0IG9UZW1wbGF0ZVByaXZhdGVNb2RlbCA9IHRoaXMuZ2V0T3duZXJDb21wb25lbnQoKS5nZXRNb2RlbChcIl90ZW1wbFByaXZcIikgYXMgSlNPTk1vZGVsO1xuXHRcdG9UZW1wbGF0ZVByaXZhdGVNb2RlbC5zZXRQcm9wZXJ0eShcIi9saXN0UmVwb3J0L3NoYXJlXCIsIG9TaGFyZUluZm8pO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byB1cGRhdGUgdGhlIGxvY2FsIFVJIG1vZGVsIG9mIHRoZSBwYWdlIHdpdGggdGhlIGZpZWxkcyB0aGF0IGFyZSBub3QgYXBwbGljYWJsZSB0byB0aGUgZmlsdGVyIGJhciAodGhpcyBpcyBzcGVjaWZpYyB0byB0aGUgQUxQIHNjZW5hcmlvKS5cblx0ICogQHBhcmFtIG9JbnRlcm5hbE1vZGVsQ29udGV4dCBUaGUgaW50ZXJuYWwgbW9kZWwgY29udGV4dFxuXHQgKiBAcGFyYW0gb0ZpbHRlckJhciBNREMgZmlsdGVyIGJhclxuXHQgKi9cblx0X3VwZGF0ZUFMUE5vdEFwcGxpY2FibGVGaWVsZHMob0ludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dCwgb0ZpbHRlckJhcjogRmlsdGVyQmFyKTogdm9pZCB7XG5cdFx0Y29uc3QgbUNhY2hlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fTtcblx0XHRjb25zdCBpZ25vcmVkRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fSxcblx0XHRcdGFUYWJsZXMgPSB0aGlzLl9nZXRDb250cm9scyhcInRhYmxlXCIpLFxuXHRcdFx0YUNoYXJ0cyA9IHRoaXMuX2dldENvbnRyb2xzKFwiQ2hhcnRcIik7XG5cblx0XHRpZiAoIWFUYWJsZXMubGVuZ3RoIHx8ICFhQ2hhcnRzLmxlbmd0aCkge1xuXHRcdFx0Ly8gSWYgdGhlcmUncyBub3QgYSB0YWJsZSBhbmQgYSBjaGFydCwgd2UncmUgbm90IGluIHRoZSBBTFAgY2FzZVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEZvciB0aGUgbW9tZW50LCB0aGVyZSdzIG5vdGhpbmcgZm9yIHRhYmxlcy4uLlxuXHRcdGFDaGFydHMuZm9yRWFjaChmdW5jdGlvbiAob0NoYXJ0KSB7XG5cdFx0XHRjb25zdCBzQ2hhcnRFbnRpdHlQYXRoID0gb0NoYXJ0LmRhdGEoXCJ0YXJnZXRDb2xsZWN0aW9uUGF0aFwiKSxcblx0XHRcdFx0c0NoYXJ0RW50aXR5U2V0ID0gc0NoYXJ0RW50aXR5UGF0aC5zbGljZSgxKSxcblx0XHRcdFx0c0NhY2hlS2V5ID0gYCR7c0NoYXJ0RW50aXR5U2V0fUNoYXJ0YDtcblx0XHRcdGlmICghbUNhY2hlW3NDYWNoZUtleV0pIHtcblx0XHRcdFx0bUNhY2hlW3NDYWNoZUtleV0gPSBGaWx0ZXJVdGlscy5nZXROb3RBcHBsaWNhYmxlRmlsdGVycyhvRmlsdGVyQmFyLCBvQ2hhcnQpO1xuXHRcdFx0fVxuXHRcdFx0aWdub3JlZEZpZWxkc1tzQ2FjaGVLZXldID0gbUNhY2hlW3NDYWNoZUtleV07XG5cdFx0fSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY29udHJvbHMvaWdub3JlZEZpZWxkc1wiLCBpZ25vcmVkRmllbGRzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQcm92aWRlcyB0aGUgc2V0dGluZyB3aGV0aGVyIEZpbHRlckJhciBpcyBoaWRkZW4gYmFzZWQgb24gdGhlIG1hbmlmZXN0IHNldHRpbmcgJ2hpZGVGaWx0ZXJCYXInLlxuXHQgKiBTaG91bGQgYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIF9pc0ZpbHRlckJhckhpZGRlblVzZWQgYXMgaXQgbWF5IGhhdmUgb3ZlcnJpZGRlbiB0aGlzIHNldHRpbmcuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIEZpbHRlckJhciBpcyBoaWRkZW4sIGZhbHNlIGlmIHVua25vd25cblx0ICovXG5cdF9pc0ZpbHRlckJhckhpZGRlbigpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS5oaWRlRmlsdGVyQmFyIHx8IGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFByb3ZpZGVzIHRoZSBzZXR0aW5nIHdoZXRoZXIgRmlsdGVyQmFyIGlzIGhpZGRlbiBidXQgc3RpbGwgZXhpc3RzIGJhc2VkIG9uIHRoZSBtYW5pZmVzdCBzZXR0aW5nICd1c2VIaWRkZW5GaWx0ZXJCYXInLlxuXHQgKiBTaG91bGQgYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIF9pc0ZpbHRlckJhckhpZGRlbiBhcyBpdCBjYW4gYWxzbyBoaWRlIHRoZSBGaWx0ZXJCYXIuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIEZpbHRlckJhciBpcyBoaWRkZW4sIGZhbHNlIGlmIHVua25vd25cblx0ICovXG5cdF9pc0ZpbHRlckJhckhpZGRlblVzZWQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkudXNlSGlkZGVuRmlsdGVyQmFyIHx8IGZhbHNlO1xuXHR9XG5cblx0X2dldEFwcGx5QXV0b21hdGljYWxseU9uVmFyaWFudCh2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnQsIGtleTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCk6IEJvb2xlYW4ge1xuXHRcdGlmICghdmFyaWFudE1hbmFnZW1lbnQgfHwgIWtleSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRjb25zdCB2YXJpYW50cyA9IHZhcmlhbnRNYW5hZ2VtZW50LmdldFZhcmlhbnRzKCk7XG5cdFx0Y29uc3QgY3VycmVudFZhcmlhbnQgPSB2YXJpYW50cy5maW5kKGZ1bmN0aW9uICh2YXJpYW50KSB7XG5cdFx0XHRyZXR1cm4gdmFyaWFudCAmJiB2YXJpYW50LmdldEtleSgpID09PSBrZXk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIChjdXJyZW50VmFyaWFudCAmJiBjdXJyZW50VmFyaWFudC5nZXRQcm9wZXJ0eShcImV4ZWN1dGVPblNlbGVjdFwiKSkgfHwgZmFsc2U7XG5cdH1cblxuXHRfc2hvdWxkQXV0b1RyaWdnZXJTZWFyY2gob1ZNOiBWYXJpYW50TWFuYWdlbWVudCB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcblx0XHRpZiAoXG5cdFx0XHR0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpLmluaXRpYWxMb2FkID09PSBJbml0aWFsTG9hZE1vZGUuQXV0byAmJlxuXHRcdFx0KCFvVk0gfHwgb1ZNLmdldFN0YW5kYXJkVmFyaWFudEtleSgpID09PSBvVk0uZ2V0Q3VycmVudFZhcmlhbnRLZXkoKSlcblx0XHQpIHtcblx0XHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdFx0XHRpZiAob0ZpbHRlckJhcikge1xuXHRcdFx0XHRjb25zdCBvQ29uZGl0aW9ucyA9IG9GaWx0ZXJCYXIuZ2V0Q29uZGl0aW9ucygpO1xuXHRcdFx0XHRmb3IgKGNvbnN0IHNLZXkgaW4gb0NvbmRpdGlvbnMpIHtcblx0XHRcdFx0XHQvLyBpZ25vcmUgZmlsdGVycyBzdGFydGluZyB3aXRoICQgKGUuZy4gJHNlYXJjaCwgJGVkaXRTdGF0ZSlcblx0XHRcdFx0XHRpZiAob1ZNICYmICFzS2V5LnN0YXJ0c1dpdGgoXCIkXCIpICYmIEFycmF5LmlzQXJyYXkob0NvbmRpdGlvbnNbc0tleV0pICYmIG9Db25kaXRpb25zW3NLZXldLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0Ly8gbG9hZCBkYXRhIGFzIHBlciB1c2VyJ3Mgc2V0dGluZyBvZiBhcHBseUF1dG9tYXRpY2FsbHkgb24gdGhlIHZhcmlhbnRcblx0XHRcdFx0XHRcdGNvbnN0IHN0YW5kYXJkVmFyaWFudCA9IG9WTS5nZXRWYXJpYW50cygpLmZpbmQoKHZhcmlhbnQpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhcmlhbnQuZ2V0S2V5KCkgPT09IG9WTS5nZXRDdXJyZW50VmFyaWFudEtleSgpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc3RhbmRhcmRWYXJpYW50ICYmIHN0YW5kYXJkVmFyaWFudC5nZXRFeGVjdXRlT25TZWxlY3QoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0X3VwZGF0ZVRhYmxlKG9UYWJsZTogVGFibGUpOiB2b2lkIHtcblx0XHRpZiAoIW9UYWJsZS5pc1RhYmxlQm91bmQoKSB8fCB0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMpIHtcblx0XHRcdG9UYWJsZS5yZWJpbmQoKTtcblx0XHRcdHRoaXMuaGFzUGVuZGluZ0NoYXJ0Q2hhbmdlcyA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdF91cGRhdGVDaGFydChvQ2hhcnQ6IENoYXJ0KTogdm9pZCB7XG5cdFx0Y29uc3Qgb0lubmVyQ2hhcnQgPSAob0NoYXJ0LmdldENvbnRyb2xEZWxlZ2F0ZSgpIGFzIHR5cGVvZiBDaGFydERlbGVnYXRlKS5fZ2V0Q2hhcnQob0NoYXJ0KTtcblx0XHRpZiAoIShvSW5uZXJDaGFydCAmJiBvSW5uZXJDaGFydC5pc0JvdW5kKFwiZGF0YVwiKSkgfHwgdGhpcy5oYXNQZW5kaW5nVGFibGVDaGFuZ2VzKSB7XG5cdFx0XHQob0NoYXJ0LmdldENvbnRyb2xEZWxlZ2F0ZSgpIGFzIHR5cGVvZiBDaGFydERlbGVnYXRlKS5yZWJpbmQob0NoYXJ0LCBvSW5uZXJDaGFydC5nZXRCaW5kaW5nSW5mbyhcImRhdGFcIikpO1xuXHRcdFx0dGhpcy5oYXNQZW5kaW5nVGFibGVDaGFuZ2VzID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmlsdGVyIHRvZ2dsZSBidXR0b24uXG5cdCAqIEBwYXJhbSBidXR0b25WaXNpYmxlIEZpbHRlciB0b2dnbGUgYnV0dG9uIHZpc2liaWxpdHlcblx0ICovXG5cdHNldEZpbHRlclRvZ2dsZVZpc2liaWxpdHkoYnV0dG9uVmlzaWJsZTogYm9vbGVhbik6IHZvaWQge1xuXHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRmaWx0ZXJCYXI/LmdldFNlZ21lbnRlZEJ1dHRvbigpPy5zZXRWaXNpYmxlKGJ1dHRvblZpc2libGUpO1xuXHR9XG5cblx0aGFuZGxlcnMgPSB7XG5cdFx0b25JbmxpbmVFZGl0U2F2ZSh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0dGhpcy5pbmxpbmVFZGl0Rmxvdy5pbmxpbmVFZGl0U2F2ZSgpO1xuXHRcdH0sXG5cdFx0b25GaWx0ZXJTZWFyY2godGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIpOiB2b2lkIHtcblx0XHRcdGNvbnN0IGZpbHRlckJhckFQSSA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKSEuZ2V0UGFyZW50KCkgYXMgRmlsdGVyQmFyQVBJO1xuXHRcdFx0ZmlsdGVyQmFyQVBJLnRyaWdnZXJTZWFyY2goKTtcblx0XHR9LFxuXHRcdG9uRmlsdGVyc0NoYW5nZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIG9FdmVudDogRmlsdGVyQmFyQmFzZSRGaWx0ZXJzQ2hhbmdlZEV2ZW50KTogdm9pZCB7XG5cdFx0XHRjb25zdCBvRmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdFx0aWYgKG9GaWx0ZXJCYXIpIHtcblx0XHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCB8IHVuZGVmaW5lZDtcblx0XHRcdFx0Ly8gUGVuZGluZyBmaWx0ZXJzIGludG8gRmlsdGVyQmFyIHRvIGJlIHVzZWQgZm9yIGN1c3RvbSB2aWV3c1xuXHRcdFx0XHR0aGlzLm9uUGVuZGluZ0ZpbHRlcnMoKTtcblxuXHRcdFx0XHRpZiAob0ludGVybmFsTW9kZWxDb250ZXh0ICYmIG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJjb25kaXRpb25zQmFzZWRcIikpIHtcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoYXNQZW5kaW5nRmlsdGVyc1wiLCB0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob0ludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHRcdFx0dGhpcy5fc3RvcmVGaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50KG9GaWx0ZXJCYXIsIG9JbnRlcm5hbE1vZGVsQ29udGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdG9uVmFyaWFudFNlbGVjdGVkKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLCBvRXZlbnQ6IFZhcmlhbnRNYW5hZ2VtZW50JFNlbGVjdEV2ZW50KTogdm9pZCB7XG5cdFx0XHRjb25zdCBwYXJhbWV0ZXJzID0gKG9FdmVudCBhcyBVSTVFdmVudCkuZ2V0UGFyYW1ldGVycygpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRcdFx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQgPSBwYXJhbWV0ZXJzLm9yaWdpbmFsU291cmNlIGFzIFZhcmlhbnRNYW5hZ2VtZW50O1xuXHRcdFx0Y29uc3QgY3VycmVudFZhcmlhbnRLZXkgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwia2V5XCIpO1xuXHRcdFx0Y29uc3QgbXVsdGlNb2RlQ29udHJvbCA9IHRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKTtcblxuXHRcdFx0aWYgKG11bHRpTW9kZUNvbnRyb2wgJiYgIXZhcmlhbnRNYW5hZ2VtZW50Py5nZXRQYXJlbnQoKT8uaXNBKFwic2FwLnVpLm1kYy5BY3Rpb25Ub29sYmFyXCIpKSB7XG5cdFx0XHRcdC8vTm90IGEgQ29udHJvbCBWYXJpYW50XG5cdFx0XHRcdG11bHRpTW9kZUNvbnRyb2w/LmludmFsaWRhdGVDb250ZW50KCk7XG5cdFx0XHRcdG11bHRpTW9kZUNvbnRyb2w/LnNldEZyZWV6ZUNvbnRlbnQodHJ1ZSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIHNldFRpbWVvdXQgY2F1c2UgdGhlIHZhcmlhbnQgbmVlZHMgdG8gYmUgYXBwbGllZCBiZWZvcmUganVkZ2luZyB0aGUgYXV0byBzZWFyY2ggb3IgdXBkYXRpbmcgdGhlIGFwcCBzdGF0ZVxuXHRcdFx0c2V0VGltZW91dCgoKTogdm9pZCA9PiB7XG5cdFx0XHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRcdFx0Y29uc3QgZHluYW1pY1BhZ2UgPSB0aGlzLl9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2woKTtcblx0XHRcdFx0Y29uc3QgZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkID0gZmlsdGVyQmFyPy5nZXRGaWx0ZXJJdGVtcygpLmZpbmQoZnVuY3Rpb24gKGZpbHRlckl0ZW0pIHtcblx0XHRcdFx0XHRyZXR1cm4gZmlsdGVySXRlbS5nZXRSZXF1aXJlZCgpICYmIGZpbHRlckl0ZW0uZ2V0Q29uZGl0aW9ucygpLmxlbmd0aCA9PT0gMDtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmIChmaXJzdEVtcHR5TWFuZGF0b3J5RmllbGQpIHtcblx0XHRcdFx0XHRkeW5hbWljUGFnZS5zZXRIZWFkZXJFeHBhbmRlZCh0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodGhpcy5fc2hvdWxkQXV0b1RyaWdnZXJTZWFyY2godmFyaWFudE1hbmFnZW1lbnQpKSB7XG5cdFx0XHRcdFx0Ly8gdGhlIGFwcCBzdGF0ZSB3aWxsIGJlIHVwZGF0ZWQgdmlhIG9uU2VhcmNoIGhhbmRsZXJcblx0XHRcdFx0XHRjb25zdCBmaWx0ZXJCYXJBUEkgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCkhLmdldFBhcmVudCgpIGFzIEZpbHRlckJhckFQSTtcblx0XHRcdFx0XHRmaWx0ZXJCYXJBUEkudHJpZ2dlclNlYXJjaCgpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCF0aGlzLl9nZXRBcHBseUF1dG9tYXRpY2FsbHlPblZhcmlhbnQodmFyaWFudE1hbmFnZW1lbnQsIGN1cnJlbnRWYXJpYW50S2V5KSkge1xuXHRcdFx0XHRcdG11bHRpTW9kZUNvbnRyb2w/LnNldEZyZWV6ZUNvbnRlbnQoZmFsc2UpO1xuXHRcdFx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdFx0XHRkeW5hbWljUGFnZS5zZXRIZWFkZXJFeHBhbmRlZCh0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSwgMCk7XG5cdFx0fSxcblx0XHRvblZhcmlhbnRTYXZlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0Ly9UT0RPOiBTaG91bGQgcmVtb3ZlIHRoaXMgc2V0VGltZU91dCBvbmNlIFZhcmlhbnQgTWFuYWdlbWVudCBwcm92aWRlcyBhbiBhcGkgdG8gZmV0Y2ggdGhlIGN1cnJlbnQgdmFyaWFudCBrZXkgb24gc2F2ZSEhIVxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdH0sIDEwMDApO1xuXHRcdH0sXG5cdFx0b25TZWFyY2godGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIpOiB2b2lkIHtcblx0XHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCkgYXMgRmlsdGVyQmFyOyAvLyBvbnNlYXJjaCBpcyBjYWxsZWQgb25seSBpZiB0aGUgZmlsdGVyYmFyIGV4aXN0c1xuXHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdGNvbnN0IG9NZGNDaGFydCA9IHRoaXMuZ2V0Q2hhcnRDb250cm9sKCk7XG5cdFx0XHRjb25zdCBiSGlkZURyYWZ0ID0gRmlsdGVyVXRpbHMuZ2V0RWRpdFN0YXRlSXNIaWRlRHJhZnQob0ZpbHRlckJhci5nZXRDb25kaXRpb25zKCkpO1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaGFzUGVuZGluZ0ZpbHRlcnNcIiwgZmFsc2UpO1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaGlkZURyYWZ0SW5mb1wiLCBiSGlkZURyYWZ0KTtcblx0XHRcdGNvbnN0IGR5bmFtaWNQYWdlID0gdGhpcy5fZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sKCk7XG5cdFx0XHRpZiAoIXRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKSkge1xuXHRcdFx0XHR0aGlzLl91cGRhdGVBTFBOb3RBcHBsaWNhYmxlRmllbGRzKG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgb0ZpbHRlckJhcik7XG5cdFx0XHR9XG5cdFx0XHRpZiAob01kY0NoYXJ0KSB7XG5cdFx0XHRcdC8vIGRpc2FibGUgYm91bmQgYWN0aW9ucyBUT0RPOiB0aGlzIGNsZWFycyBldmVyeXRoaW5nIGZvciB0aGUgY2hhcnQ/XG5cdFx0XHRcdChvTWRjQ2hhcnQuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCkuc2V0UHJvcGVydHkoXCJcIiwge30pO1xuXG5cdFx0XHRcdGNvbnN0IG9QYWdlSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvTWRjQ2hhcnQuZ2V0QmluZGluZ0NvbnRleHQoXCJwYWdlSW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRcdGNvbnN0IHNUZW1wbGF0ZUNvbnRlbnRWaWV3ID0gb1BhZ2VJbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShgJHtvUGFnZUludGVybmFsTW9kZWxDb250ZXh0LmdldFBhdGgoKX0vYWxwQ29udGVudFZpZXdgKTtcblx0XHRcdFx0aWYgKHNUZW1wbGF0ZUNvbnRlbnRWaWV3ID09PSBUZW1wbGF0ZUNvbnRlbnRWaWV3LkNoYXJ0KSB7XG5cdFx0XHRcdFx0dGhpcy5oYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoc1RlbXBsYXRlQ29udGVudFZpZXcgPT09IFRlbXBsYXRlQ29udGVudFZpZXcuVGFibGUpIHtcblx0XHRcdFx0XHR0aGlzLmhhc1BlbmRpbmdUYWJsZUNoYW5nZXMgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vbG9naWMgZm9yIGV4cGFuc2lvbiBvciBjb2xsYXBzZSBvZiBmaWx0ZXIgYmFyIHN0YXJ0c1xuXHRcdFx0aWYgKCFEZXZpY2Uuc3lzdGVtLmRlc2t0b3AgJiYgb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwic2VhcmNoVHJpZ2dlcmVkQnlJbml0aWFsTG9hZFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRpZiAoZHluYW1pY1BhZ2UuZ2V0SGVhZGVyRXhwYW5kZWQoKSAhPT0gZmFsc2UpIHtcblx0XHRcdFx0XHRkeW5hbWljUGFnZS5zZXRIZWFkZXJFeHBhbmRlZChmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly9zZXR0aW5nIGl0IHRvIGZhbHNlIHNvIHRoYXQgZnVydGhlciBzZWFyY2ggb3IgJ0dvJyB0cmlnZ2VycyB3b24ndCBjb2xsYXBzZSB0aGUgZmlsdGVyIGJhclxuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzZWFyY2hUcmlnZ2VyZWRCeUluaXRpYWxMb2FkXCIsIGZhbHNlKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gc3RvcmUgZmlsdGVyIGJhciBjb25kaXRpb25zIHRvIHVzZSBsYXRlciB3aGlsZSBuYXZpZ2F0aW9uXG5cdFx0XHRTdGF0ZVV0aWwucmV0cmlldmVFeHRlcm5hbFN0YXRlKG9GaWx0ZXJCYXIpXG5cdFx0XHRcdC50aGVuKChvRXh0ZXJuYWxTdGF0ZSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuZmlsdGVyQmFyQ29uZGl0aW9ucyA9IG9FeHRlcm5hbFN0YXRlLmZpbHRlcjtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmV0cmlldmluZyB0aGUgZXh0ZXJuYWwgc3RhdGVcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0aWYgKHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkubGl2ZU1vZGUgPT09IGZhbHNlKSB7XG5cdFx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKERldmljZS5zeXN0ZW0ucGhvbmUpIHtcblx0XHRcdFx0Y29uc3Qgb0R5bmFtaWNQYWdlID0gdGhpcy5fZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sKCk7XG5cdFx0XHRcdGlmICghdGhpcy5faXNJbml0TG9hZEVuYWJsZWQoKSkge1xuXHRcdFx0XHRcdG9EeW5hbWljUGFnZS5zZXRIZWFkZXJFeHBhbmRlZCh0cnVlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRvRHluYW1pY1BhZ2Uuc2V0SGVhZGVyRXhwYW5kZWQoZmFsc2UpO1xuXHRcdFx0XHRcdHRoaXMuc2V0RmlsdGVyVG9nZ2xlVmlzaWJpbGl0eShmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIFRyaWdnZXJzIGFuIG91dGJvdW5kIG5hdmlnYXRpb24gd2hlbiBhIHVzZXIgY2hvb3NlcyB0aGUgY2hldnJvbi5cblx0XHQgKiBAcGFyYW0gb0NvbnRyb2xsZXJcblx0XHQgKiBAcGFyYW0gc091dGJvdW5kVGFyZ2V0IE5hbWUgb2YgdGhlIG91dGJvdW5kIHRhcmdldCAobmVlZHMgdG8gYmUgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QpXG5cdFx0ICogQHBhcmFtIG9Db250ZXh0IFRoZSBjb250ZXh0IHRoYXQgY29udGFpbnMgdGhlIGRhdGEgZm9yIHRoZSB0YXJnZXQgYXBwXG5cdFx0ICogQHBhcmFtIHNDcmVhdGVQYXRoIENyZWF0ZSBwYXRoIHdoZW4gdGhlIGNoZXZyb24gaXMgY3JlYXRlZC5cblx0XHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIG9uY2UgdGhlIG5hdmlnYXRpb24gaXMgdHJpZ2dlcmVkXG5cdFx0ICogQGZpbmFsXG5cdFx0ICovXG5cdFx0YXN5bmMgb25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kKFxuXHRcdFx0b0NvbnRyb2xsZXI6IExpc3RSZXBvcnRDb250cm9sbGVyLFxuXHRcdFx0c091dGJvdW5kVGFyZ2V0OiBzdHJpbmcsXG5cdFx0XHRvQ29udGV4dDogQ29udGV4dCxcblx0XHRcdHNDcmVhdGVQYXRoOiBzdHJpbmdcblx0XHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRcdHJldHVybiBvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZChvQ29udHJvbGxlciwgc091dGJvdW5kVGFyZ2V0LCBvQ29udGV4dCwgc0NyZWF0ZVBhdGgpO1xuXHRcdH0sXG5cdFx0b25DaGFydFNlbGVjdGlvbkNoYW5nZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIG9FdmVudDogVUk1RXZlbnQ8eyBkYXRhOiB1bmtub3duIH0sIENoYXJ0VHlwZT4pOiB2b2lkIHtcblx0XHRcdGNvbnN0IG9NZGNDaGFydCA9IG9FdmVudC5nZXRTb3VyY2UoKS5nZXRDb250ZW50KCkgYXMgQ2hhcnQsXG5cdFx0XHRcdG9UYWJsZSA9IHRoaXMuX2dldFRhYmxlKCksXG5cdFx0XHRcdGFEYXRhID0gb0V2ZW50LmdldFBhcmFtZXRlcihcImRhdGFcIiksXG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRpZiAoYURhdGEpIHtcblx0XHRcdFx0Q2hhcnRVdGlscy5zZXRDaGFydEZpbHRlcnMob01kY0NoYXJ0KTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHNUZW1wbGF0ZUNvbnRlbnRWaWV3ID0gb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KGAke29JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQYXRoKCl9L2FscENvbnRlbnRWaWV3YCk7XG5cdFx0XHRpZiAoc1RlbXBsYXRlQ29udGVudFZpZXcgPT09IFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQpIHtcblx0XHRcdFx0dGhpcy5oYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAob1RhYmxlKSB7XG5cdFx0XHRcdG9UYWJsZS5yZWJpbmQoKTtcblx0XHRcdFx0dGhpcy5oYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRvblNlZ21lbnRlZEJ1dHRvblByZXNzZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIG9FdmVudDogVUk1RXZlbnQpOiB2b2lkIHtcblx0XHRcdGNvbnN0IHNlbGVjdGVkS2V5OiBzdHJpbmcgPVxuXHRcdFx0XHQob0V2ZW50LmdldFBhcmFtZXRlcnMoKSBhcyB7IHNlbGVjdGVkS2V5OiBzdHJpbmcgfSkuc2VsZWN0ZWRLZXkgfHwgKG9FdmVudC5nZXRQYXJhbWV0ZXJzKCkgYXMgeyBrZXk6IHN0cmluZyB9KS5rZXk7XG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiYWxwQ29udGVudFZpZXdcIiwgc2VsZWN0ZWRLZXkpO1xuXHRcdFx0Y29uc3Qgb0NoYXJ0ID0gdGhpcy5nZXRDaGFydENvbnRyb2woKTtcblx0XHRcdGNvbnN0IG9UYWJsZSA9IHRoaXMuX2dldFRhYmxlKCk7XG5cblx0XHRcdHN3aXRjaCAoc2VsZWN0ZWRLZXkpIHtcblx0XHRcdFx0Y2FzZSBUZW1wbGF0ZUNvbnRlbnRWaWV3LlRhYmxlOlxuXHRcdFx0XHRcdGlmIChvVGFibGUpIHtcblx0XHRcdFx0XHRcdHRoaXMuX3VwZGF0ZVRhYmxlKG9UYWJsZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQ6XG5cdFx0XHRcdFx0aWYgKG9DaGFydCkge1xuXHRcdFx0XHRcdFx0dGhpcy5fdXBkYXRlQ2hhcnQob0NoYXJ0IGFzIENoYXJ0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgVGVtcGxhdGVDb250ZW50Vmlldy5IeWJyaWQ6XG5cdFx0XHRcdFx0aWYgKG9UYWJsZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5fdXBkYXRlVGFibGUob1RhYmxlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKG9DaGFydCkge1xuXHRcdFx0XHRcdFx0dGhpcy5fdXBkYXRlQ2hhcnQob0NoYXJ0IGFzIENoYXJ0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0fSxcblx0XHRvbkR5bmFtaWNQYWdlVGl0bGVTdGF0ZUNoYW5nZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIGV2ZW50OiBEeW5hbWljUGFnZVRpdGxlJFN0YXRlQ2hhbmdlRXZlbnQpOiB2b2lkIHtcblx0XHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRcdGlmIChmaWx0ZXJCYXIpIHtcblx0XHRcdFx0dGhpcy5zZXRGaWx0ZXJUb2dnbGVWaXNpYmlsaXR5KCEhZXZlbnQuZ2V0UGFyYW1ldGVyKFwiaXNFeHBhbmRlZFwiKSk7XG5cdFx0XHRcdGlmIChldmVudC5nZXRQYXJhbWV0ZXIoXCJpc0V4cGFuZGVkXCIpID09PSBmYWxzZSkge1xuXHRcdFx0XHRcdEludmlzaWJsZU1lc3NhZ2UuZ2V0SW5zdGFuY2UoKS5hbm5vdW5jZShcblx0XHRcdFx0XHRcdGZpbHRlckJhci5nZXRBc3NpZ25lZEZpbHRlcnNUZXh0KCkuZmlsdGVyc1RleHQgYXMgc3RyaW5nLFxuXHRcdFx0XHRcdFx0SW52aXNpYmxlTWVzc2FnZU1vZGUuQXNzZXJ0aXZlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHVwZGF0ZSB0aGUgbG9jYWwgVUkgbW9kZWwgb2YgdGhlIHBhZ2Ugd2l0aCB0aGUgU2VsZWN0aW9uIFZhcmlhbnQuXG5cdCAqIEBwYXJhbSBmaWx0ZXJCYXIgTURDIGZpbHRlciBiYXJcblx0ICogQHBhcmFtIGludGVybmFsTW9kZWxDb250ZXh0IFRoZSBpbnRlcm5hbCBtb2RlbCBjb250ZXh0XG5cdCAqL1xuXHRhc3luYyBfc3RvcmVGaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50KGZpbHRlckJhcjogRmlsdGVyQmFyLCBpbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgZmlsdGVyQmFyQVBJID0gZmlsdGVyQmFyLmdldFBhcmVudCgpIGFzIEZpbHRlckJhckFQSTtcblx0XHRcdGNvbnN0IHN2ID0gYXdhaXQgZmlsdGVyQmFyQVBJLmdldFNlbGVjdGlvblZhcmlhbnQoKTtcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudFwiLCBzdik7XG5cdFx0fSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG5cdFx0XHRjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuXHRcdFx0TG9nLmVycm9yKGBGRSA6IEVycm9yIGZldGNoaW5nIHNlbGVjdGlvbiB2YXJpYW50IG9uIGZpbHRlciBjaGFuZ2U6ICR7bWVzc2FnZX1gKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCB0aGUgU2VsZWN0aW9uIFZhcmlhbnQgZnJvbSBpbnRlcm5hbCBtb2RlbC5cblx0ICogQHJldHVybnMgU2VsZWN0aW9uVmFyaWFudFxuXHQgKi9cblx0Z2V0RmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudCgpOiBTZWxlY3Rpb25WYXJpYW50IHtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdFx0cmV0dXJuIChpbnRlcm5hbE1vZGVsQ29udGV4dD8uZ2V0UHJvcGVydHkoXCJmaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50XCIpIGFzIFNlbGVjdGlvblZhcmlhbnQpIHx8IG5ldyBTZWxlY3Rpb25WYXJpYW50KCk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGlzdFJlcG9ydENvbnRyb2xs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
875
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUZW1wbGF0ZUNvbnRlbnRWaWV3IiwiQ29yZUxpYnJhcnkiLCJJbml0aWFsTG9hZE1vZGUiLCJMaXN0UmVwb3J0Q29udHJvbGxlciIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwidXNpbmdFeHRlbnNpb24iLCJJbnRlcm5hbFJvdXRpbmciLCJvdmVycmlkZSIsIm9uQWZ0ZXJCaW5kaW5nIiwiZ2V0VmlldyIsImdldENvbnRyb2xsZXIiLCJfb25BZnRlckJpbmRpbmciLCJfZGVjMyIsIkludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0RW50aXR5U2V0IiwiYmFzZSIsImdldEN1cnJlbnRFbnRpdHlTZXQiLCJfZGVjNCIsIlNpZGVFZmZlY3RzIiwiU2lkZUVmZmVjdHNPdmVycmlkZSIsIl9kZWM1IiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUiLCJfZGVjNiIsIlNoYXJlIiwiU2hhcmVPdmVycmlkZXMiLCJfZGVjNyIsIlZpZXdTdGF0ZSIsIlZpZXdTdGF0ZU92ZXJyaWRlcyIsIl9kZWM4IiwiS1BJTWFuYWdlbWVudCIsIl9kZWM5IiwiUGxhY2Vob2xkZXIiLCJfZGVjMTAiLCJNZXNzYWdlSGFuZGxlciIsIk1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUiLCJfZGVjMTEiLCJwdWJsaWNFeHRlbnNpb24iLCJfZGVjMTIiLCJmaW5hbEV4dGVuc2lvbiIsIl9kZWMxMyIsInByaXZhdGVFeHRlbnNpb24iLCJfZGVjMTQiLCJleHRlbnNpYmxlIiwiX2RlYzE1IiwiX2RlYzE2IiwiT3ZlcnJpZGVFeGVjdXRpb24iLCJBZnRlciIsIl9kZWMxNyIsIl9kZWMxOCIsIl9kZWMxOSIsIl9kZWMyMCIsIl9jbGFzcyIsIl9jbGFzczIiLCJfUGFnZUNvbnRyb2xsZXIiLCJfdGhpcyIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfZGVzY3JpcHRvcjIiLCJfZGVzY3JpcHRvcjMiLCJfZGVzY3JpcHRvcjQiLCJfZGVzY3JpcHRvcjUiLCJfZGVzY3JpcHRvcjYiLCJfZGVzY3JpcHRvcjciLCJfZGVzY3JpcHRvcjgiLCJfZGVzY3JpcHRvcjkiLCJmb3JtYXR0ZXJzIiwic2V0QUxQQ29udHJvbE1lc3NhZ2VTdHJpcCIsImFJZ25vcmVkRmllbGRzIiwiYklzQ2hhcnQiLCJvQXBwbHlTdXBwb3J0ZWQiLCJzVGV4dCIsIm9GaWx0ZXJCYXIiLCJfZ2V0RmlsdGVyQmFyQ29udHJvbCIsImlzQXJyYXkiLCJhSWdub3JlZExhYmVscyIsIk1lc3NhZ2VTdHJpcCIsImdldExhYmVscyIsImRhdGEiLCJnZXRSZXNvdXJjZU1vZGVsIiwiYklzU2VhcmNoSWdub3JlZCIsImVuYWJsZVNlYXJjaCIsImdldEFMUFRleHQiLCJnZXRUZXh0IiwiaGFuZGxlcnMiLCJvbklubGluZUVkaXRTYXZlIiwiaW5saW5lRWRpdEZsb3ciLCJpbmxpbmVFZGl0U2F2ZSIsIm9uRmlsdGVyU2VhcmNoIiwiZmlsdGVyQmFyQVBJIiwiZ2V0UGFyZW50IiwidHJpZ2dlclNlYXJjaCIsIm9uRmlsdGVyc0NoYW5nZWQiLCJvRXZlbnQiLCJvSW50ZXJuYWxNb2RlbENvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsIm9uUGVuZGluZ0ZpbHRlcnMiLCJnZXRQYXJhbWV0ZXIiLCJzZXRQcm9wZXJ0eSIsIl9zdG9yZUZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQiLCJvblZhcmlhbnRTZWxlY3RlZCIsInBhcmFtZXRlcnMiLCJnZXRQYXJhbWV0ZXJzIiwidmFyaWFudE1hbmFnZW1lbnQiLCJvcmlnaW5hbFNvdXJjZSIsImN1cnJlbnRWYXJpYW50S2V5IiwibXVsdGlNb2RlQ29udHJvbCIsIl9nZXRNdWx0aU1vZGVDb250cm9sIiwiaXNBIiwiaW52YWxpZGF0ZUNvbnRlbnQiLCJzZXRGcmVlemVDb250ZW50Iiwic2V0VGltZW91dCIsImZpbHRlckJhciIsImR5bmFtaWNQYWdlIiwiX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbCIsImZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZCIsImdldEZpbHRlckl0ZW1zIiwiZmluZCIsImZpbHRlckl0ZW0iLCJnZXRSZXF1aXJlZCIsImdldENvbmRpdGlvbnMiLCJzZXRIZWFkZXJFeHBhbmRlZCIsIl9zaG91bGRBdXRvVHJpZ2dlclNlYXJjaCIsIl9nZXRBcHBseUF1dG9tYXRpY2FsbHlPblZhcmlhbnQiLCJnZXRFeHRlbnNpb25BUEkiLCJ1cGRhdGVBcHBTdGF0ZSIsIm9uVmFyaWFudFNhdmVkIiwib25TZWFyY2giLCJvTWRjQ2hhcnQiLCJnZXRDaGFydENvbnRyb2wiLCJiSGlkZURyYWZ0IiwiRmlsdGVyVXRpbHMiLCJnZXRFZGl0U3RhdGVJc0hpZGVEcmFmdCIsIl91cGRhdGVBTFBOb3RBcHBsaWNhYmxlRmllbGRzIiwib1BhZ2VJbnRlcm5hbE1vZGVsQ29udGV4dCIsInNUZW1wbGF0ZUNvbnRlbnRWaWV3IiwiZ2V0UHJvcGVydHkiLCJnZXRQYXRoIiwiQ2hhcnQiLCJoYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzIiwiVGFibGUiLCJoYXNQZW5kaW5nVGFibGVDaGFuZ2VzIiwiRGV2aWNlIiwic3lzdGVtIiwiZGVza3RvcCIsImdldEhlYWRlckV4cGFuZGVkIiwiU3RhdGVVdGlsIiwicmV0cmlldmVFeHRlcm5hbFN0YXRlIiwidGhlbiIsIm9FeHRlcm5hbFN0YXRlIiwiZmlsdGVyQmFyQ29uZGl0aW9ucyIsImZpbHRlciIsImNhdGNoIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJnZXRWaWV3RGF0YSIsImxpdmVNb2RlIiwicGhvbmUiLCJvRHluYW1pY1BhZ2UiLCJfaXNJbml0TG9hZEVuYWJsZWQiLCJzZXRGaWx0ZXJUb2dnbGVWaXNpYmlsaXR5Iiwib25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kIiwib0NvbnRyb2xsZXIiLCJzT3V0Ym91bmRUYXJnZXQiLCJvQ29udGV4dCIsInNDcmVhdGVQYXRoIiwiX2ludGVudEJhc2VkTmF2aWdhdGlvbiIsIm9uQ2hhcnRTZWxlY3Rpb25DaGFuZ2VkIiwiZ2V0U291cmNlIiwiZ2V0Q29udGVudCIsIm9UYWJsZSIsIl9nZXRUYWJsZSIsImFEYXRhIiwiQ2hhcnRVdGlscyIsInNldENoYXJ0RmlsdGVycyIsInJlYmluZCIsIm9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZCIsInNlbGVjdGVkS2V5Iiwia2V5Iiwib0NoYXJ0IiwiX3VwZGF0ZVRhYmxlIiwiX3VwZGF0ZUNoYXJ0IiwiSHlicmlkIiwib25EeW5hbWljUGFnZVRpdGxlU3RhdGVDaGFuZ2VkIiwiZXZlbnQiLCJJbnZpc2libGVNZXNzYWdlIiwiZ2V0SW5zdGFuY2UiLCJhbm5vdW5jZSIsImdldEFzc2lnbmVkRmlsdGVyc1RleHQiLCJmaWx0ZXJzVGV4dCIsIkludmlzaWJsZU1lc3NhZ2VNb2RlIiwiQXNzZXJ0aXZlIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJleHRlbnNpb25BUEkiLCJFeHRlbnNpb25BUEkiLCJvbkluaXQiLCJQYWdlQ29udHJvbGxlciIsImFwcGx5IiwiX2hhc011bHRpVmlzdWFsaXphdGlvbnMiLCJhbHBDb250ZW50VmlldyIsIl9nZXREZWZhdWx0UGF0aCIsImdldEFwcENvbXBvbmVudCIsImdldFJvdXRlclByb3h5Iiwid2FpdEZvclJvdXRlTWF0Y2hCZWZvcmVOYXZpZ2F0aW9uIiwiX3NldEluaXRMb2FkIiwidmlldyIsInVpTW9kZWwiLCJnZXRNb2RlbCIsInBhdGgiLCJnZXRJZCIsImlzRWRpdGFibGUiLCJiaW5kRWxlbWVudCIsIm1vZGVsIiwib25FeGl0IiwiZGVzdHJveSIsImludGVybmFsTW9kZWxDb250ZXh0IiwicGFnZVJlYWR5Iiwid2FpdEZvciIsIl9hcHBseUFwcFN0YXRlIiwiQ29tbW9uVXRpbHMiLCJpc0FwcENvbXBvbmVudEJ1c3kiLCJhVGFibGVzIiwiX2dldENvbnRyb2xzIiwidXBkYXRlQWN0aW9ucyIsIkVkaXRTdGF0ZSIsImlzRWRpdFN0YXRlRGlydHkiLCJ0YWJsZSIsIm9UYWJsZUJpbmRpbmciLCJnZXRSb3dCaW5kaW5nIiwidGFibGVBUEkiLCJnZXRSb3V0aW5nU2VydmljZSIsIndhaXRGb3JCaW5kaW5nQ2xlYW51cCIsImF0dGFjaEV2ZW50T25jZSIsIl91cGRhdGVUYWJsZUFjdGlvbnMiLCJnZXRUYWJsZURlZmluaXRpb24iLCJjb250cm9sIiwidHlwZSIsInJlc2V0Q2hhbmdlcyIsInJlZnJlc2giLCJlIiwid2FybmluZyIsInNldEVkaXRTdGF0ZVByb2Nlc3NlZCIsImVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJpc0luc2lnaHRzRW5hYmxlZCIsIm9uUGFnZVJlYWR5IiwibVBhcmFtZXRlcnMiLCJmb3JjZUZvY3VzIiwiX3NldEluaXRpYWxGb2N1cyIsImdldFNoZWxsU2VydmljZXMiLCJzZXRCYWNrTmF2aWdhdGlvbiIsInVuZGVmaW5lZCIsIm9uVmlld05lZWRzUmVmcmVzaCIsInNsaWNlIiwib25BZnRlckNsZWFyIiwiYUlCTkFjdGlvbnMiLCJmb3JFYWNoIiwiZ2V0SUJOQWN0aW9ucyIsInVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5IiwidXBkYXRlTWVudUJ1dHRvblZpc2libGl0eSIsIl9zY3JvbGxUYWJsZXNUb1JvdyIsInNSb3dQYXRoIiwiVGFibGVTY3JvbGxlciIsInNjcm9sbFRhYmxlVG9Sb3ciLCJfZm9jdXNTaWxlbnQiLCJmaWx0ZXJGaWVsZCIsImZvY3VzSW5mbyIsImdldEZvY3VzSW5mbyIsInRhcmdldEluZm8iLCJzaWxlbnQiLCJmb2N1cyIsImlzSGVhZGVyRXhwYW5kZWQiLCJfaXNGaWx0ZXJCYXJIaWRkZW5Vc2VkIiwiZ2V0U2hvd01lc3NhZ2VzIiwic2V0U2hvd01lc3NhZ2VzIiwib0ZpbHRlckl0ZW0iLCJmaWVsZFRvRm9jdXMiLCJieUlkIiwiX2dldEZpbHRlckJhckNvbnRyb2xJZCIsImZvY3VzUm93IiwiX2dldFBhZ2VUaXRsZUluZm9ybWF0aW9uIiwib01hbmlmZXN0RW50cnkiLCJnZXRNYW5pZmVzdEVudHJ5IiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aXRsZSIsInN1YnRpdGxlIiwic3ViVGl0bGUiLCJpbnRlbnQiLCJpY29uIiwiX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbElkIiwiX2dldEFkYXB0YXRpb25GaWx0ZXJCYXJDb250cm9sIiwiYWRhcHRhdGlvbkZpbHRlckJhciIsImdldEluYnVpbHRGaWx0ZXIiLCJnZXRBcHBTdGF0ZUhhbmRsZXIiLCJhcHBseUFwcFN0YXRlIiwic2V0U3VzcGVuZFNlbGVjdGlvbiIsIl9pc0ZpbHRlckJhckhpZGRlbiIsIl9pc011bHRpTW9kZSIsInNldENvdW50c091dERhdGVkIiwiX2dldFNlZ21lbnRlZEJ1dHRvbiIsInNDb250cm9sIiwic1NlZ21lbnRlZEJ1dHRvbklkIiwiX2dldENvbnRyb2xGcm9tUGFnZU1vZGVsUHJvcGVydHkiLCJzUGF0aCIsImNvbnRyb2xJZCIsIl9nZXRQYWdlTW9kZWwiLCJfZ2V0VmlzdWFsRmlsdGVyQmFyQ29udHJvbCIsInNWaXN1YWxGaWx0ZXJCYXJJZCIsIlN0YWJsZUlkSGVscGVyIiwiZ2VuZXJhdGUiLCJfZ2V0RmlsdGVyQmFyVmFyaWFudENvbnRyb2wiLCJfZ2V0SWNvblRhYkJhciIsIm9Db250cm9sIiwiZ2V0U2VsZWN0ZWRJbm5lckNvbnRyb2wiLCJjb250ZW50Iiwic0tleSIsImFDb250cm9scyIsIm9UYWJNdWx0aU1vZGUiLCJnZXRJdGVtcyIsIm9JdGVtIiwiZ2V0S2V5IiwiaW5jbHVkZXMiLCJwdXNoIiwiZGVmYXVsdFBhdGgiLCJMaXN0UmVwb3J0VGVtcGxhdGluZyIsImdldERlZmF1bHRQYXRoIiwiaW5pdExvYWRNb2RlIiwiaW5pdGlhbExvYWQiLCJFbmFibGVkIiwiX2Rpc2FibGVJbml0TG9hZCIsIl9hcHBseUF1dG9tYXRpY2FsbHlPblN0YW5kYXJkVmFyaWFudCIsInZhcmlhbnRNYW5hZ2VtZW50SWQiLCJnZXRWYXJpYW50QmFja1JlZmVyZW5jZSIsImdldERhdGEiLCJyZWdpc3RlckFwcGx5QXV0b21hdGljYWxseU9uU3RhbmRhcmRWYXJpYW50IiwiYmluZCIsIl9zZXRTaGFyZU1vZGVsIiwiZm5HZXRVc2VyIiwiT2JqZWN0UGF0aCIsImdldCIsIm9TaGFyZUluZm8iLCJib29rbWFya1RpdGxlIiwiZG9jdW1lbnQiLCJib29rbWFya0N1c3RvbVVybCIsInNIYXNoIiwiaGFzaGVyIiwiZ2V0SGFzaCIsIndpbmRvdyIsImxvY2F0aW9uIiwiaHJlZiIsImlzU2hhcmVJbkphbUFjdGl2ZSIsImlzSmFtQWN0aXZlIiwib1RlbXBsYXRlUHJpdmF0ZU1vZGVsIiwiZ2V0T3duZXJDb21wb25lbnQiLCJtQ2FjaGUiLCJpZ25vcmVkRmllbGRzIiwiYUNoYXJ0cyIsInNDaGFydEVudGl0eVBhdGgiLCJzQ2hhcnRFbnRpdHlTZXQiLCJzQ2FjaGVLZXkiLCJnZXROb3RBcHBsaWNhYmxlRmlsdGVycyIsImhpZGVGaWx0ZXJCYXIiLCJ1c2VIaWRkZW5GaWx0ZXJCYXIiLCJ2YXJpYW50cyIsImdldFZhcmlhbnRzIiwiY3VycmVudFZhcmlhbnQiLCJ2YXJpYW50Iiwib1ZNIiwiQXV0byIsImdldFN0YW5kYXJkVmFyaWFudEtleSIsImdldEN1cnJlbnRWYXJpYW50S2V5Iiwib0NvbmRpdGlvbnMiLCJzdGFydHNXaXRoIiwic3RhbmRhcmRWYXJpYW50IiwiZ2V0RXhlY3V0ZU9uU2VsZWN0IiwiaXNUYWJsZUJvdW5kIiwib0lubmVyQ2hhcnQiLCJnZXRDb250cm9sRGVsZWdhdGUiLCJfZ2V0Q2hhcnQiLCJpc0JvdW5kIiwiZ2V0QmluZGluZ0luZm8iLCJidXR0b25WaXNpYmxlIiwiZ2V0U2VnbWVudGVkQnV0dG9uIiwic2V0VmlzaWJsZSIsInN2IiwiZ2V0U2VsZWN0aW9uVmFyaWFudCIsImVyciIsIm1lc3NhZ2UiLCJFcnJvciIsIlN0cmluZyIsImdldEZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQiLCJTZWxlY3Rpb25WYXJpYW50IiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJMaXN0UmVwb3J0Q29udHJvbGxlci5jb250cm9sbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IE9iamVjdFBhdGggZnJvbSBcInNhcC9iYXNlL3V0aWwvT2JqZWN0UGF0aFwiO1xuaW1wb3J0IHR5cGUgRHluYW1pY1BhZ2UgZnJvbSBcInNhcC9mL0R5bmFtaWNQYWdlXCI7XG5pbXBvcnQgdHlwZSB7IER5bmFtaWNQYWdlVGl0bGUkU3RhdGVDaGFuZ2VFdmVudCB9IGZyb20gXCJzYXAvZi9EeW5hbWljUGFnZVRpdGxlXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXh0ZW5zaWJsZSwgZmluYWxFeHRlbnNpb24sIHByaXZhdGVFeHRlbnNpb24sIHB1YmxpY0V4dGVuc2lvbiwgdXNpbmdFeHRlbnNpb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgSW50ZW50QmFzZWROYXZpZ2F0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBJbnRlcm5hbFJvdXRpbmcgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsUm91dGluZ1wiO1xuaW1wb3J0IEtQSU1hbmFnZW1lbnQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0tQSU1hbmFnZW1lbnRcIjtcbmltcG9ydCBNZXNzYWdlSGFuZGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCBQbGFjZWhvbGRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvUGxhY2Vob2xkZXJcIjtcbmltcG9ydCBTaGFyZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvU2hhcmVcIjtcbmltcG9ydCBTaWRlRWZmZWN0cyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvU2lkZUVmZmVjdHNcIjtcbmltcG9ydCBWaWV3U3RhdGUgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1ZpZXdTdGF0ZVwiO1xuaW1wb3J0IHR5cGUgeyBMaXN0UmVwb3J0RGVmaW5pdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL3RlbXBsYXRlcy9MaXN0UmVwb3J0Q29udmVydGVyXCI7XG5pbXBvcnQgRWRpdFN0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0VkaXRTdGF0ZVwiO1xuaW1wb3J0IE1lc3NhZ2VTdHJpcCBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXNzYWdlU3RyaXBcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCAqIGFzIFN0YWJsZUlkSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgQ29yZUxpYnJhcnkgZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIENoYXJ0VHlwZSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9DaGFydFwiO1xuaW1wb3J0IHR5cGUgTWFjcm9BUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvTWFjcm9BUElcIjtcbmltcG9ydCB0eXBlIENoYXJ0RGVsZWdhdGUgZnJvbSBcInNhcC9mZS9tYWNyb3MvY2hhcnQvQ2hhcnREZWxlZ2F0ZVwiO1xuaW1wb3J0IENoYXJ0VXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvY2hhcnQvQ2hhcnRVdGlsc1wiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL0ZpbHRlckJhclwiO1xuaW1wb3J0IEZpbHRlclV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlci9GaWx0ZXJVdGlsc1wiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlckJhci9GaWx0ZXJCYXJBUElcIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgU2VsZWN0aW9uVmFyaWFudCBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vU2VsZWN0aW9uVmFyaWFudFwiO1xuaW1wb3J0IEV4dGVuc2lvbkFQSSBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9MaXN0UmVwb3J0L0V4dGVuc2lvbkFQSVwiO1xuaW1wb3J0IHR5cGUgTXVsdGlwbGVNb2RlQ29udHJvbCBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9MaXN0UmVwb3J0L2NvbnRyb2xzL011bHRpcGxlTW9kZUNvbnRyb2xcIjtcbmltcG9ydCBTaWRlRWZmZWN0c092ZXJyaWRlIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL0xpc3RSZXBvcnQvb3ZlcnJpZGVzL1NpZGVFZmZlY3RzXCI7XG5pbXBvcnQgVGFibGVTY3JvbGxlciBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9UYWJsZVNjcm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBJY29uVGFiQmFyIGZyb20gXCJzYXAvbS9JY29uVGFiQmFyXCI7XG5pbXBvcnQgdHlwZSBUYWJDb250YWluZXJJdGVtIGZyb20gXCJzYXAvbS9UYWJDb250YWluZXJJdGVtXCI7XG5pbXBvcnQgRGV2aWNlIGZyb20gXCJzYXAvdWkvRGV2aWNlXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBJbnZpc2libGVNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9JbnZpc2libGVNZXNzYWdlXCI7XG5pbXBvcnQgeyBJbnZpc2libGVNZXNzYWdlTW9kZSB9IGZyb20gXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgT3ZlcnJpZGVFeGVjdXRpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9PdmVycmlkZUV4ZWN1dGlvblwiO1xuaW1wb3J0IHR5cGUgVmFyaWFudE1hbmFnZW1lbnQgZnJvbSBcInNhcC91aS9mbC92YXJpYW50cy9WYXJpYW50TWFuYWdlbWVudFwiO1xuaW1wb3J0IHR5cGUgeyBWYXJpYW50TWFuYWdlbWVudCRTZWxlY3RFdmVudCB9IGZyb20gXCJzYXAvdWkvZmwvdmFyaWFudHMvVmFyaWFudE1hbmFnZW1lbnRcIjtcbmltcG9ydCB0eXBlIENoYXJ0IGZyb20gXCJzYXAvdWkvbWRjL0NoYXJ0XCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJGaWVsZCBmcm9tIFwic2FwL3VpL21kYy9GaWx0ZXJGaWVsZFwiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyQmFyQmFzZSRGaWx0ZXJzQ2hhbmdlZEV2ZW50IH0gZnJvbSBcInNhcC91aS9tZGMvZmlsdGVyYmFyL0ZpbHRlckJhckJhc2VcIjtcbmltcG9ydCBTdGF0ZVV0aWwgZnJvbSBcInNhcC91aS9tZGMvcDEzbi9TdGF0ZVV0aWxcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IGhhc2hlciBmcm9tIFwic2FwL3VpL3RoaXJkcGFydHkvaGFzaGVyXCI7XG5pbXBvcnQgKiBhcyBMaXN0UmVwb3J0VGVtcGxhdGluZyBmcm9tIFwiLi9MaXN0UmVwb3J0VGVtcGxhdGluZ1wiO1xuaW1wb3J0IEludGVudEJhc2VkTmF2aWdhdGlvbk92ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9JbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBNZXNzYWdlSGFuZGxlck92ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IFNoYXJlT3ZlcnJpZGVzIGZyb20gXCIuL292ZXJyaWRlcy9TaGFyZVwiO1xuaW1wb3J0IFZpZXdTdGF0ZU92ZXJyaWRlcyBmcm9tIFwiLi9vdmVycmlkZXMvVmlld1N0YXRlXCI7XG5cbmNvbnN0IFRlbXBsYXRlQ29udGVudFZpZXcgPSBDb3JlTGlicmFyeS5UZW1wbGF0ZUNvbnRlbnRWaWV3LFxuXHRJbml0aWFsTG9hZE1vZGUgPSBDb3JlTGlicmFyeS5Jbml0aWFsTG9hZE1vZGU7XG5cbi8qKlxuICogQ29udHJvbGxlciBjbGFzcyBmb3IgdGhlIGxpc3QgcmVwb3J0IHBhZ2UsIHVzZWQgaW5zaWRlIGFuIFNBUCBGaW9yaSBlbGVtZW50cyBhcHBsaWNhdGlvbi5cbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBwdWJsaWNcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLnRlbXBsYXRlcy5MaXN0UmVwb3J0Lkxpc3RSZXBvcnRDb250cm9sbGVyXCIpXG5jbGFzcyBMaXN0UmVwb3J0Q29udHJvbGxlciBleHRlbmRzIFBhZ2VDb250cm9sbGVyIHtcblx0QHVzaW5nRXh0ZW5zaW9uKFxuXHRcdEludGVybmFsUm91dGluZy5vdmVycmlkZSh7XG5cdFx0XHRvbkFmdGVyQmluZGluZzogZnVuY3Rpb24gKHRoaXM6IEludGVybmFsUm91dGluZykge1xuXHRcdFx0XHQodGhpcy5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIExpc3RSZXBvcnRDb250cm9sbGVyKS5fb25BZnRlckJpbmRpbmcoKTtcblx0XHRcdH1cblx0XHR9KVxuXHQpXG5cdF9yb3V0aW5nITogSW50ZXJuYWxSb3V0aW5nO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihcblx0XHRJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbi5vdmVycmlkZSh7XG5cdFx0XHRnZXRFbnRpdHlTZXQ6IGZ1bmN0aW9uICh0aGlzOiBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbikge1xuXHRcdFx0XHRyZXR1cm4gKHRoaXMuYmFzZSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcikuZ2V0Q3VycmVudEVudGl0eVNldCgpO1xuXHRcdFx0fVxuXHRcdH0pXG5cdClcblx0X2ludGVudEJhc2VkTmF2aWdhdGlvbiE6IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihTaWRlRWZmZWN0cy5vdmVycmlkZShTaWRlRWZmZWN0c092ZXJyaWRlKSlcblx0X3NpZGVFZmZlY3RzITogU2lkZUVmZmVjdHM7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKEludGVudEJhc2VkTmF2aWdhdGlvbi5vdmVycmlkZShJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSkpXG5cdGludGVudEJhc2VkTmF2aWdhdGlvbiE6IEludGVudEJhc2VkTmF2aWdhdGlvbjtcblxuXHRAdXNpbmdFeHRlbnNpb24oU2hhcmUub3ZlcnJpZGUoU2hhcmVPdmVycmlkZXMpKVxuXHRzaGFyZSE6IFNoYXJlO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihWaWV3U3RhdGUub3ZlcnJpZGUoVmlld1N0YXRlT3ZlcnJpZGVzKSlcblx0dmlld1N0YXRlITogVmlld1N0YXRlO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihLUElNYW5hZ2VtZW50KVxuXHRrcGlNYW5hZ2VtZW50ITogS1BJTWFuYWdlbWVudDtcblxuXHRAdXNpbmdFeHRlbnNpb24oUGxhY2Vob2xkZXIpXG5cdHBsYWNlaG9sZGVyITogUGxhY2Vob2xkZXI7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKE1lc3NhZ2VIYW5kbGVyLm92ZXJyaWRlKE1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUpKVxuXHRtZXNzYWdlSGFuZGxlciE6IE1lc3NhZ2VIYW5kbGVyO1xuXG5cdHByb3RlY3RlZCBleHRlbnNpb25BUEk/OiBFeHRlbnNpb25BUEk7XG5cblx0cHJpdmF0ZSBmaWx0ZXJCYXJDb25kaXRpb25zPzogdW5rbm93bjtcblxuXHRwcml2YXRlIGhhc1BlbmRpbmdDaGFydENoYW5nZXM/OiBib29sZWFuO1xuXG5cdHByaXZhdGUgaGFzUGVuZGluZ1RhYmxlQ2hhbmdlcz86IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgZXh0ZW5zaW9uIEFQSSBmb3IgdGhlIGN1cnJlbnQgcGFnZS5cblx0ICogQHB1YmxpY1xuXHQgKiBAcmV0dXJucyBUaGUgZXh0ZW5zaW9uIEFQSS5cblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRFeHRlbnNpb25BUEkoKTogRXh0ZW5zaW9uQVBJIHtcblx0XHRpZiAoIXRoaXMuZXh0ZW5zaW9uQVBJKSB7XG5cdFx0XHR0aGlzLmV4dGVuc2lvbkFQSSA9IG5ldyBFeHRlbnNpb25BUEkodGhpcyk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmV4dGVuc2lvbkFQSTtcblx0fVxuXG5cdG9uSW5pdCgpOiB2b2lkIHtcblx0XHRQYWdlQ29udHJvbGxlci5wcm90b3R5cGUub25Jbml0LmFwcGx5KHRoaXMpO1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3QgZmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdGlmIChmaWx0ZXJCYXIpIHtcblx0XHRcdHRoaXMuX3N0b3JlRmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudChmaWx0ZXJCYXIsIG9JbnRlcm5hbE1vZGVsQ29udGV4dCk7XG5cdFx0fVxuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImhhc1BlbmRpbmdGaWx0ZXJzXCIsIHRydWUpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImhpZGVEcmFmdEluZm9cIiwgZmFsc2UpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInVvbVwiLCB7fSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwic2NhbGVmYWN0b3JcIiwge30pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInNjYWxlZmFjdG9yTnVtYmVyXCIsIHt9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJjdXJyZW5jeVwiLCB7fSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaXNJbnNpZ2h0c1N1cHBvcnRlZFwiLCBmYWxzZSk7XG5cblx0XHRpZiAodGhpcy5faGFzTXVsdGlWaXN1YWxpemF0aW9ucygpKSB7XG5cdFx0XHRsZXQgYWxwQ29udGVudFZpZXcgPSB0aGlzLl9nZXREZWZhdWx0UGF0aCgpO1xuXHRcdFx0aWYgKCFEZXZpY2Uuc3lzdGVtLmRlc2t0b3AgJiYgYWxwQ29udGVudFZpZXcgPT09IFRlbXBsYXRlQ29udGVudFZpZXcuSHlicmlkKSB7XG5cdFx0XHRcdGFscENvbnRlbnRWaWV3ID0gVGVtcGxhdGVDb250ZW50Vmlldy5DaGFydDtcblx0XHRcdH1cblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImFscENvbnRlbnRWaWV3XCIsIGFscENvbnRlbnRWaWV3KTtcblx0XHR9XG5cblx0XHQvLyBTdG9yZSBjb25kaXRpb25zIGZyb20gZmlsdGVyIGJhclxuXHRcdC8vIHRoaXMgaXMgbGF0ZXIgdXNlZCBiZWZvcmUgbmF2aWdhdGlvbiB0byBnZXQgY29uZGl0aW9ucyBhcHBsaWVkIG9uIHRoZSBmaWx0ZXIgYmFyXG5cdFx0dGhpcy5maWx0ZXJCYXJDb25kaXRpb25zID0ge307XG5cblx0XHQvLyBBcyBBcHBTdGF0ZUhhbmRsZXIuYXBwbHlBcHBTdGF0ZSB0cmlnZ2VycyBhIG5hdmlnYXRpb24gd2Ugd2FudCB0byBtYWtlIHN1cmUgaXQgd2lsbFxuXHRcdC8vIGhhcHBlbiBhZnRlciB0aGUgcm91dGVNYXRjaCBldmVudCBoYXMgYmVlbiBwcm9jZXNzZWQgKG90aGVyd2lzZSB0aGUgcm91dGVyIGdldHMgYnJva2VuKVxuXHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um91dGVyUHJveHkoKS53YWl0Rm9yUm91dGVNYXRjaEJlZm9yZU5hdmlnYXRpb24oKTtcblxuXHRcdC8vIENvbmZpZ3VyZSB0aGUgaW5pdGlhbCBsb2FkIHNldHRpbmdzXG5cdFx0dGhpcy5fc2V0SW5pdExvYWQoKTtcblx0XHRjb25zdCB2aWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0Y29uc3QgdWlNb2RlbCA9IHZpZXcuZ2V0TW9kZWwoXCJ1aVwiKTtcblx0XHRjb25zdCBwYXRoID0gYC8ke3ZpZXcuZ2V0SWQoKX1gO1xuXHRcdHVpTW9kZWwuc2V0UHJvcGVydHkocGF0aCwgeyBpc0VkaXRhYmxlOiBmYWxzZSB9KTtcblx0XHR2aWV3LmJpbmRFbGVtZW50KHsgcGF0aCwgbW9kZWw6IFwidWlcIiB9KTtcblx0fVxuXG5cdG9uRXhpdCgpOiB2b2lkIHtcblx0XHRkZWxldGUgdGhpcy5maWx0ZXJCYXJDb25kaXRpb25zO1xuXHRcdGlmICh0aGlzLmV4dGVuc2lvbkFQSSkge1xuXHRcdFx0dGhpcy5leHRlbnNpb25BUEkuZGVzdHJveSgpO1xuXHRcdH1cblx0XHRkZWxldGUgdGhpcy5leHRlbnNpb25BUEk7XG5cdH1cblxuXHRhc3luYyBfb25BZnRlckJpbmRpbmcoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGlmICghaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJpbml0aWFsVmFyaWFudEFwcGxpZWRcIikpIHtcblx0XHRcdHRoaXMucGFnZVJlYWR5LndhaXRGb3IodGhpcy5fYXBwbHlBcHBTdGF0ZSgpKTtcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaW5pdGlhbFZhcmlhbnRBcHBsaWVkXCIsIHRydWUpO1xuXHRcdH1cblx0XHRhd2FpdCBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy5nZXRWaWV3KCkpLmlzQXBwQ29tcG9uZW50QnVzeSgpO1xuXHRcdGNvbnN0IGFUYWJsZXMgPSB0aGlzLl9nZXRDb250cm9scyhcInRhYmxlXCIpIGFzIFRhYmxlW107XG5cdFx0bGV0IHVwZGF0ZUFjdGlvbnMgPSB0cnVlO1xuXHRcdGlmIChFZGl0U3RhdGUuaXNFZGl0U3RhdGVEaXJ0eSgpKSB7XG5cdFx0XHR0aGlzLl9nZXRNdWx0aU1vZGVDb250cm9sKCk/LmludmFsaWRhdGVDb250ZW50KCk7XG5cdFx0XHRjb25zdCB0YWJsZSA9IHRoaXMuX2dldFRhYmxlKCk7XG5cdFx0XHRjb25zdCBvVGFibGVCaW5kaW5nID0gdGFibGU/LmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdGlmIChvVGFibGVCaW5kaW5nKSB7XG5cdFx0XHRcdHVwZGF0ZUFjdGlvbnMgPSBmYWxzZTtcblx0XHRcdFx0Y29uc3QgdGFibGVBUEkgPSB0YWJsZT8uZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cblx0XHRcdFx0Ly8gVXBkYXRlIHRoZSB0YWJsZSBjb250ZW50IHVzaW5nIHNpZGUgZWZmZWN0cyAobGlzdEJpbmRpbmcucmVmcmVzaCBkb2Vzbid0IGtlZXAgZXhwYW5zaW9uIHN0YXRlcyBpbiBhIFRyZWVUYWJsZSlcblx0XHRcdFx0Q29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuZ2V0VmlldygpKVxuXHRcdFx0XHRcdC5nZXRSb3V0aW5nU2VydmljZSgpXG5cdFx0XHRcdFx0LndhaXRGb3JCaW5kaW5nQ2xlYW51cCgpXG5cdFx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0b1RhYmxlQmluZGluZy5hdHRhY2hFdmVudE9uY2UoXCJkYXRhUmVjZWl2ZWRcIiwgKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVUYWJsZUFjdGlvbnMoYVRhYmxlcyk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGlmICh0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLnR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRcdFx0XHRcdFx0Ly8gQXMgdGhlIHJlZnJlc2ggb24gYSBUcmVlVGFibGUgdXNlcyBzaWRlLWVmZmVjdHMsIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBwZW5kaW5nIGNoYW5nZXNcblx0XHRcdFx0XHRcdFx0Ly8gYmVmb3JlIHRoZSBzaWRlLWVmZmVjdHMgYXJlIHF1ZXJpZWQgKGUuZy4gZmFpbGVkIFBBVENIIHF1ZXJpZXMgdGhhdCB3b3VsZCBiZSByZXNlbnQgdG9nZXRoZXIgd2l0aCBzaWRlIGVmZmVjdHMgR0VUKVxuXHRcdFx0XHRcdFx0XHR0aGlzLmdldE1vZGVsKCkucmVzZXRDaGFuZ2VzKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR0YWJsZUFQSS5yZWZyZXNoKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRcdExvZy53YXJuaW5nKFwiRXJyb3Igd2hpbGUgd2FpdGluZyByZWZyZXNoaW5nIExpc3RSZXBvcnQgdGFibGVcIiwgZSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRFZGl0U3RhdGUuc2V0RWRpdFN0YXRlUHJvY2Vzc2VkKCk7XG5cdFx0fVxuXG5cdFx0aWYgKHVwZGF0ZUFjdGlvbnMpIHtcblx0XHRcdHRoaXMuX3VwZGF0ZVRhYmxlQWN0aW9ucyhhVGFibGVzKTtcblx0XHR9XG5cdFx0Y29uc3QgZW52aXJvbm1lbnRDYXBhYmlsaXRpZXMgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy5nZXRWaWV3KCkpLmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCk7XG5cdFx0ZW52aXJvbm1lbnRDYXBhYmlsaXRpZXNcblx0XHRcdC5pc0luc2lnaHRzRW5hYmxlZCgpXG5cdFx0XHQudGhlbigoaXNJbnNpZ2h0c0VuYWJsZWQ6IGJvb2xlYW4pID0+IHtcblx0XHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJpc0luc2lnaHRzU3VwcG9ydGVkXCIsIGlzSW5zaWdodHNFbmFibGVkKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaCgoZXJyb3I6IHVua25vd24pID0+IHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgY2hlY2tpbmcgaWYgaW5zaWdodHMgYXJlIGVuYWJsZWRcIiwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0Zm9ybWF0dGVycyA9IHtcblx0XHRzZXRBTFBDb250cm9sTWVzc2FnZVN0cmlwKFxuXHRcdFx0dGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsXG5cdFx0XHRhSWdub3JlZEZpZWxkczogc3RyaW5nW10sXG5cdFx0XHRiSXNDaGFydDogYm9vbGVhbiB8IHN0cmluZyxcblx0XHRcdG9BcHBseVN1cHBvcnRlZD86IHsgZW5hYmxlU2VhcmNoOiBib29sZWFuIH1cblx0XHQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdFx0bGV0IHNUZXh0ID0gXCJcIjtcblx0XHRcdGJJc0NoYXJ0ID0gYklzQ2hhcnQgPT09IFwidHJ1ZVwiIHx8IGJJc0NoYXJ0ID09PSB0cnVlO1xuXHRcdFx0Y29uc3Qgb0ZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRcdGlmIChvRmlsdGVyQmFyICYmIEFycmF5LmlzQXJyYXkoYUlnbm9yZWRGaWVsZHMpICYmIGFJZ25vcmVkRmllbGRzLmxlbmd0aCA+IDAgJiYgYklzQ2hhcnQpIHtcblx0XHRcdFx0Y29uc3QgYUlnbm9yZWRMYWJlbHMgPSBNZXNzYWdlU3RyaXAuZ2V0TGFiZWxzKFxuXHRcdFx0XHRcdGFJZ25vcmVkRmllbGRzLFxuXHRcdFx0XHRcdG9GaWx0ZXJCYXIuZGF0YShcImVudGl0eVR5cGVcIiksXG5cdFx0XHRcdFx0b0ZpbHRlckJhcixcblx0XHRcdFx0XHRnZXRSZXNvdXJjZU1vZGVsKG9GaWx0ZXJCYXIpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IGJJc1NlYXJjaElnbm9yZWQgPSAhb0FwcGx5U3VwcG9ydGVkPy5lbmFibGVTZWFyY2g7XG5cdFx0XHRcdHNUZXh0ID0gYklzQ2hhcnRcblx0XHRcdFx0XHQ/IE1lc3NhZ2VTdHJpcC5nZXRBTFBUZXh0KGFJZ25vcmVkTGFiZWxzLCBvRmlsdGVyQmFyLCBiSXNTZWFyY2hJZ25vcmVkKVxuXHRcdFx0XHRcdDogTWVzc2FnZVN0cmlwLmdldFRleHQoYUlnbm9yZWRMYWJlbHMsIG9GaWx0ZXJCYXIsIFwiXCIpO1xuXHRcdFx0XHRyZXR1cm4gc1RleHQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdEBwcml2YXRlRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoXCJBZnRlclwiKVxuXHRhc3luYyBvblBhZ2VSZWFkeShtUGFyYW1ldGVyczogeyBmb3JjZUZvY3VzPzogYm9vbGVhbiB9KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKG1QYXJhbWV0ZXJzLmZvcmNlRm9jdXMpIHtcblx0XHRcdHRoaXMuX3NldEluaXRpYWxGb2N1cygpO1xuXHRcdH1cblx0XHQvLyBSZW1vdmUgdGhlIGhhbmRsZXIgb24gYmFjayBuYXZpZ2F0aW9uIHRoYXQgZGlzcGxheXMgRHJhZnQgY29uZmlybWF0aW9uXG5cdFx0YXdhaXQgdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRTaGVsbFNlcnZpY2VzKCkuc2V0QmFja05hdmlnYXRpb24odW5kZWZpbmVkKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgY2FsbGVkIHdoZW4gdGhlIGNvbnRlbnQgb2YgYSBjdXN0b20gdmlldyB1c2VkIGluIGEgbGlzdCByZXBvcnQgbmVlZHMgdG8gYmUgcmVmcmVzaGVkLlxuXHQgKiBUaGlzIGhhcHBlbnMgZWl0aGVyIHdoZW4gdGhlcmUgaXMgYSBjaGFuZ2Ugb24gdGhlIEZpbHRlckJhciBhbmQgdGhlIHNlYXJjaCBpcyB0cmlnZ2VyZWQsXG5cdCAqIG9yIHdoZW4gYSB0YWIgd2l0aCBjdXN0b20gY29udGVudCBpcyBzZWxlY3RlZCxcblx0ICogb3Igd2hlbiB0aGUgdmlldyBpcyBmb3JjZWQgdG8gYmUgcmVmcmVzaGVkIHRocm91Z2ggdGhlIEV4dGVuc2lvbiBBUEkgZm9yIHRoZSBsaXN0IHJlcG9ydCdzIHB1YmxpYyBtZXRob2Qgc2V0VGFiQ29udGVudFRvQmVSZWZyZXNoZWRPbk5leHRPcGVuaW5nLlxuXHQgKiBUaGlzIG1ldGhvZCBjYW4gYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIGluIGNhc2Ugb2YgY3VzdG9taXphdGlvbi5cblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzIE1hcCBjb250YWluaW5nIHRoZSBmaWx0ZXIgY29uZGl0aW9ucyBvZiB0aGUgRmlsdGVyQmFyLCB0aGUgY3VycmVudFRhYklEXG5cdCAqIGFuZCB0aGUgdmlldyByZWZyZXNoIGNhdXNlICh0YWJDaGFuZ2VkLCBzZWFyY2ggb3IgZm9yY2VkUmVmcmVzaCkuXG5cdCAqIFRoZSBtYXAgbG9va3MgbGlrZSB0aGlzOlxuXHQgKiA8Y29kZT48cHJlPlxuXHQgKiBcdHtcblx0ICogXHRcdGZpbHRlckNvbmRpdGlvbnM6IHtcblx0ICogXHRcdFx0Q291bnRyeTogW1xuXHQgKiBcdFx0XHRcdHtcblx0ICogXHRcdFx0XHRcdG9wZXJhdG9yOiBcIkVRXCJcblx0ICpcdFx0XHRcdFx0dmFsaWRhdGVkOiBcIk5vdFZhbGlkYXRlZFwiXG5cdCAqXHRcdFx0XHRcdHZhbHVlczogW1wiR2VybWFueVwiLCAuLi5dXG5cdCAqIFx0XHRcdFx0fSxcblx0ICogXHRcdFx0XHQuLi5cblx0ICogXHRcdFx0XVxuXHQgKiBcdFx0XHQuLi5cblx0ICogXHRcdH0sXG5cdCAqXHRcdGN1cnJlbnRUYWJJZDogXCJmZTo6Q3VzdG9tVGFiOjp0YWIxXCIsXG5cdCAqXHRcdHJlZnJlc2hDYXVzZTogXCJ0YWJDaGFuZ2VkXCIgfCBcInNlYXJjaFwiIHwgXCJmb3JjZWRSZWZyZXNoXCJcblx0ICpcdH1cblx0ICogPC9wcmU+PC9jb2RlPlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0b25WaWV3TmVlZHNSZWZyZXNoKG1QYXJhbWV0ZXJzOiB1bmtub3duKTogdm9pZCB7XG5cdFx0LyogVG8gYmUgb3ZlcnJpZGVuICovXG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIGNhbGxlZCB3aGVuIGEgZmlsdGVyIG9yIHNlYXJjaCB2YWx1ZSBoYXMgYmVlbiBjaGFuZ2VkIGluIHRoZSBGaWx0ZXJCYXIsXG5cdCAqIGJ1dCBoYXMgbm90IGJlZW4gdmFsaWRhdGVkIHlldCBieSB0aGUgZW5kIHVzZXIgKHdpdGggdGhlICdHbycgb3IgJ1NlYXJjaCcgYnV0dG9uKS5cblx0ICogVHlwaWNhbGx5LCB0aGUgY29udGVudCBvZiB0aGUgY3VycmVudCB0YWIgaXMgZ3JleWVkIG91dCB1bnRpbCB0aGUgZmlsdGVycyBhcmUgdmFsaWRhdGVkLlxuXHQgKiBUaGlzIG1ldGhvZCBjYW4gYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIGluIGNhc2Ugb2YgY3VzdG9taXphdGlvbi5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRvblBlbmRpbmdGaWx0ZXJzKCk6IHZvaWQge1xuXHRcdC8qIFRvIGJlIG92ZXJyaWRlbiAqL1xuXHR9XG5cblx0Z2V0Q3VycmVudEVudGl0eVNldCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLl9nZXRUYWJsZSgpPy5kYXRhKFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIikuc2xpY2UoMSk7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIGNhbGxlZCB3aGVuIHRoZSAnQ2xlYXInIGJ1dHRvbiBvbiB0aGUgRmlsdGVyQmFyIGlzIHByZXNzZWQuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0b25BZnRlckNsZWFyKCk6IHZvaWQge1xuXHRcdC8qIFRvIGJlIG92ZXJyaWRlbiAqL1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGluaXRpYXRlcyB0aGUgdXBkYXRlIG9mIHRoZSBlbmFibGVkIHN0YXRlIG9mIHRoZSBEYXRhRmllbGRGb3JBY3Rpb24gYW5kIHRoZSB2aXNpYmxlIHN0YXRlIG9mIHRoZSBEYXRhRmllbGRGb3JJQk4gYnV0dG9ucy5cblx0ICogQHBhcmFtIGFUYWJsZXMgQXJyYXkgb2YgdGFibGVzIGluIHRoZSBsaXN0IHJlcG9ydFxuXHQgKi9cblx0X3VwZGF0ZVRhYmxlQWN0aW9ucyhhVGFibGVzOiBUYWJsZVtdKTogdm9pZCB7XG5cdFx0bGV0IGFJQk5BY3Rpb25zOiBVSTVFbGVtZW50W10gPSBbXTtcblx0XHRhVGFibGVzLmZvckVhY2goZnVuY3Rpb24gKG9UYWJsZSkge1xuXHRcdFx0YUlCTkFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9UYWJsZSwgYUlCTkFjdGlvbnMpO1xuXHRcdH0pO1xuXHRcdENvbW1vblV0aWxzLnVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5KGFJQk5BY3Rpb25zLCB0aGlzLmdldFZpZXcoKSk7XG5cdFx0Q29tbW9uVXRpbHMudXBkYXRlTWVudUJ1dHRvblZpc2libGl0eShhSUJOQWN0aW9ucyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2Qgc2Nyb2xscyB0byBhIHNwZWNpZmljIHJvdyBvbiBhbGwgdGhlIGF2YWlsYWJsZSB0YWJsZXMuXG5cdCAqIEBwYXJhbSBzUm93UGF0aCBUaGUgcGF0aCBvZiB0aGUgdGFibGUgcm93IGNvbnRleHQgdG8gYmUgc2Nyb2xsZWQgdG9cblx0ICovXG5cdF9zY3JvbGxUYWJsZXNUb1JvdyhzUm93UGF0aDogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5fZ2V0Q29udHJvbHMoXCJ0YWJsZVwiKS5mb3JFYWNoKGZ1bmN0aW9uIChvVGFibGU6IENvbnRyb2wpIHtcblx0XHRcdFRhYmxlU2Nyb2xsZXIuc2Nyb2xsVGFibGVUb1JvdyhvVGFibGUgYXMgVGFibGUsIHNSb3dQYXRoKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIGEgc2lsZW50IGZvY3VzIG9uIHRoZSBmaWx0ZXIgZmllbGQuIFN1cHByZXNzZXMgdGhlIG9wZW5pbmcgb2YgdGhlIHR5cGUtYWhlYWQgcG9wdXAuXG5cdCAqIEBwYXJhbSBmaWx0ZXJGaWVsZCBUaGUgZmllbGQgd2hlcmUgdGhlIGZvY3VzIHNob3VsZCBiZSBzZXQgYWZ0ZXIgdGhlIGluaXRpYWwgbG9hZFxuXHQgKi9cblx0X2ZvY3VzU2lsZW50KGZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCk6IHZvaWQge1xuXHRcdGNvbnN0IGZvY3VzSW5mbyA9IGZpbHRlckZpZWxkLmdldEZvY3VzSW5mbygpIGFzIHsgdGFyZ2V0SW5mbzogb2JqZWN0IH07XG5cdFx0Zm9jdXNJbmZvLnRhcmdldEluZm8gPSB7IHNpbGVudDogdHJ1ZSB9O1xuXHRcdGZpbHRlckZpZWxkLmZvY3VzKGZvY3VzSW5mbyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgaW5pdGlhbCBmb2N1cyBpbiBhIGxpc3QgcmVwb3J0IGJhc2VkIG9uIHRoZSBVc2VyIEV4cGVyaWVuY2UgZ3VpZGVsaW5lcy5cblx0ICpcblx0ICovXG5cdF9zZXRJbml0aWFsRm9jdXMoKTogdm9pZCB7XG5cdFx0Y29uc3QgZHluYW1pY1BhZ2UgPSB0aGlzLl9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2woKSxcblx0XHRcdGlzSGVhZGVyRXhwYW5kZWQgPSBkeW5hbWljUGFnZS5nZXRIZWFkZXJFeHBhbmRlZCgpLFxuXHRcdFx0ZmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpIGFzIEZpbHRlckJhcjtcblx0XHRpZiAoZmlsdGVyQmFyICYmICF0aGlzLl9pc0ZpbHRlckJhckhpZGRlblVzZWQoKSkge1xuXHRcdFx0Ly9FbmFibGluZyBtYW5kYXRvcnkgZmlsdGVyIGZpZWxkcyBtZXNzYWdlIGRpYWxvZ1xuXHRcdFx0aWYgKCFmaWx0ZXJCYXIuZ2V0U2hvd01lc3NhZ2VzKCkpIHtcblx0XHRcdFx0ZmlsdGVyQmFyLnNldFNob3dNZXNzYWdlcyh0cnVlKTtcblx0XHRcdH1cblx0XHRcdGlmIChpc0hlYWRlckV4cGFuZGVkKSB7XG5cdFx0XHRcdGNvbnN0IGZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZCA9IGZpbHRlckJhci5nZXRGaWx0ZXJJdGVtcygpLmZpbmQoZnVuY3Rpb24gKG9GaWx0ZXJJdGVtOiBGaWx0ZXJGaWVsZCkge1xuXHRcdFx0XHRcdHJldHVybiBvRmlsdGVySXRlbS5nZXRSZXF1aXJlZCgpICYmIG9GaWx0ZXJJdGVtLmdldENvbmRpdGlvbnMoKS5sZW5ndGggPT09IDA7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHQvL0ZvY3VzaW5nIG9uIHRoZSBmaXJzdCBlbXB0eSBtYW5kYXRvcnkgZmlsdGVyIGZpZWxkLCBvciBvbiB0aGUgZmlyc3QgZmlsdGVyIGZpZWxkIGlmIHRoZSB0YWJsZSBkYXRhIGlzIGxvYWRlZFxuXHRcdFx0XHQvLyBEbyBhIFwic2lsZW50XCIgZm9jdXMgZm9yIEZpbHRlckZpZWxkLCBieSBhZGRpbmcgdGhlIHNpbGVudCBhdHRyaWJ1dGUuIFRoZSBzaWxlbnQgYXR0cmlidXRlIHN1cHByZXNzZXMgdHlwZWFoZWFkIG9wZW5pbmcuXG5cdFx0XHRcdGlmIChmaXJzdEVtcHR5TWFuZGF0b3J5RmllbGQpIHtcblx0XHRcdFx0XHRpZiAoZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkLmlzQTxGaWx0ZXJGaWVsZD4oXCJzYXAudWkubWRjLkZpbHRlckZpZWxkXCIpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLl9mb2N1c1NpbGVudChmaXJzdEVtcHR5TWFuZGF0b3J5RmllbGQpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQoZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkIGFzIENvbnRyb2wpLmZvY3VzKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKHRoaXMuX2lzSW5pdExvYWRFbmFibGVkKCkgJiYgZmlsdGVyQmFyLmdldEZpbHRlckl0ZW1zKCkubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdC8vIEFkZCBjaGVjayBmb3IgYXZhaWxhYmxlIGZpbHRlckl0ZW1zXG5cdFx0XHRcdFx0Y29uc3QgZmllbGRUb0ZvY3VzID0gZmlsdGVyQmFyLmdldEZpbHRlckl0ZW1zKClbMF07XG5cdFx0XHRcdFx0aWYgKGZpZWxkVG9Gb2N1cy5pc0E8RmlsdGVyRmllbGQ+KFwic2FwLnVpLm1kYy5GaWx0ZXJGaWVsZFwiKSkge1xuXHRcdFx0XHRcdFx0dGhpcy5fZm9jdXNTaWxlbnQoZmllbGRUb0ZvY3VzKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0KGZpZWxkVG9Gb2N1cyBhcyBDb250cm9sKS5mb2N1cygpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvL0ZvY3VzaW5nIG9uIHRoZSBHbyBidXR0b25cblx0XHRcdFx0XHR0aGlzLmdldFZpZXcoKS5ieUlkKGAke3RoaXMuX2dldEZpbHRlckJhckNvbnRyb2xJZCgpfS1idG5TZWFyY2hgKT8uZm9jdXMoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmICh0aGlzLl9pc0luaXRMb2FkRW5hYmxlZCgpKSB7XG5cdFx0XHRcdHRoaXMuX2dldFRhYmxlKClcblx0XHRcdFx0XHQ/LmZvY3VzUm93KDApXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgc2V0dGluZyBpbml0aWFsIGZvY3VzIG9uIHRoZSB0YWJsZSBcIiwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5fZ2V0VGFibGUoKVxuXHRcdFx0XHQ/LmZvY3VzUm93KDApXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBzZXR0aW5nIGluaXRpYWwgZm9jdXMgb24gdGhlIHRhYmxlIFwiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRhc3luYyBfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24oKTogUHJvbWlzZTx7IHRpdGxlPzogc3RyaW5nOyBzdWJ0aXRsZTogc3RyaW5nOyBpbnRlbnQ6IHN0cmluZzsgaWNvbjogc3RyaW5nIH0+IHtcblx0XHRjb25zdCBvTWFuaWZlc3RFbnRyeSA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC5hcHBcIik7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG5cdFx0XHR0aXRsZTogb01hbmlmZXN0RW50cnkudGl0bGUsXG5cdFx0XHRzdWJ0aXRsZTogb01hbmlmZXN0RW50cnkuc3ViVGl0bGUgfHwgXCJcIixcblx0XHRcdGludGVudDogXCJcIixcblx0XHRcdGljb246IFwiXCJcblx0XHR9KTtcblx0fVxuXG5cdF9nZXRGaWx0ZXJCYXJDb250cm9sKCk6IEZpbHRlckJhciB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQodGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbElkKCkpIGFzIEZpbHRlckJhciB8IHVuZGVmaW5lZDtcblx0fVxuXG5cdF9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2woKTogRHluYW1pY1BhZ2Uge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5ieUlkKHRoaXMuX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbElkKCkpIGFzIER5bmFtaWNQYWdlO1xuXHR9XG5cblx0X2dldEFkYXB0YXRpb25GaWx0ZXJCYXJDb250cm9sKCk6IENvbnRyb2wge1xuXHRcdC8vIElmIHRoZSBhZGFwdGF0aW9uIGZpbHRlciBiYXIgaXMgcGFydCBvZiB0aGUgRE9NIHRyZWUsIHRoZSBcIkFkYXB0IEZpbHRlclwiIGRpYWxvZyBpcyBvcGVuLFxuXHRcdC8vIGFuZCB3ZSByZXR1cm4gdGhlIGFkYXB0YXRpb24gZmlsdGVyIGJhciBhcyBhbiBhY3RpdmUgY29udHJvbCAodmlzaWJsZSBmb3IgdGhlIHVzZXIpXG5cdFx0Y29uc3QgYWRhcHRhdGlvbkZpbHRlckJhciA9ICh0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCkgYXMgeyBnZXRJbmJ1aWx0RmlsdGVyPzogRnVuY3Rpb24gfSkuZ2V0SW5idWlsdEZpbHRlcj8uKCk7XG5cdFx0cmV0dXJuIGFkYXB0YXRpb25GaWx0ZXJCYXI/LmdldFBhcmVudCgpID8gYWRhcHRhdGlvbkZpbHRlckJhciA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdGFzeW5jIF9hcHBseUFwcFN0YXRlKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGF3YWl0IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0QXBwU3RhdGVIYW5kbGVyKCkuYXBwbHlBcHBTdGF0ZSh0aGlzLmdldFZpZXcoKSk7XG5cdFx0Y29uc3Qgb0ZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRpZiAob0ZpbHRlckJhcikge1xuXHRcdFx0b0ZpbHRlckJhci5zZXRTdXNwZW5kU2VsZWN0aW9uKGZhbHNlKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMuX2lzRmlsdGVyQmFySGlkZGVuKCkpIHtcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoYXNQZW5kaW5nRmlsdGVyc1wiLCBmYWxzZSk7XG5cdFx0XHRpZiAodGhpcy5faXNNdWx0aU1vZGUoKSkge1xuXHRcdFx0XHR0aGlzLl9nZXRNdWx0aU1vZGVDb250cm9sKCkuc2V0Q291bnRzT3V0RGF0ZWQodHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X2dldFNlZ21lbnRlZEJ1dHRvbihzQ29udHJvbDogc3RyaW5nKTogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgc1NlZ21lbnRlZEJ1dHRvbklkID0gKHNDb250cm9sID09PSBcIkNoYXJ0XCIgPyB0aGlzLmdldENoYXJ0Q29udHJvbCgpIDogdGhpcy5fZ2V0VGFibGUoKSk/LmRhdGEoXCJzZWdtZW50ZWRCdXR0b25JZFwiKTtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuYnlJZChzU2VnbWVudGVkQnV0dG9uSWQpO1xuXHR9XG5cblx0X2dldENvbnRyb2xGcm9tUGFnZU1vZGVsUHJvcGVydHkoc1BhdGg6IHN0cmluZyk6IENvbnRyb2wgfCBNYWNyb0FQSSB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgY29udHJvbElkID0gdGhpcy5fZ2V0UGFnZU1vZGVsKCk/LmdldFByb3BlcnR5KHNQYXRoKTtcblx0XHRyZXR1cm4gY29udHJvbElkID8gKHRoaXMuZ2V0VmlldygpLmJ5SWQoY29udHJvbElkKSBhcyBDb250cm9sKSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdF9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2xJZCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0UHJvcGVydHkoXCIvZHluYW1pY0xpc3RSZXBvcnRJZFwiKSB8fCBcIlwiO1xuXHR9XG5cblx0X2dldEZpbHRlckJhckNvbnRyb2xJZCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0UHJvcGVydHkoXCIvZmlsdGVyQmFySWRcIikgfHwgXCJcIjtcblx0fVxuXG5cdGdldENoYXJ0Q29udHJvbCgpOiBDb250cm9sIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0Q29udHJvbEZyb21QYWdlTW9kZWxQcm9wZXJ0eShcIi9zaW5nbGVDaGFydElkXCIpIGFzIENoYXJ0VHlwZTtcblx0fVxuXG5cdF9nZXRWaXN1YWxGaWx0ZXJCYXJDb250cm9sKCk6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IHNWaXN1YWxGaWx0ZXJCYXJJZCA9IFN0YWJsZUlkSGVscGVyLmdlbmVyYXRlKFtcInZpc3VhbEZpbHRlclwiLCB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sSWQoKV0pO1xuXHRcdHJldHVybiBzVmlzdWFsRmlsdGVyQmFySWQgPyB0aGlzLmdldFZpZXcoKS5ieUlkKHNWaXN1YWxGaWx0ZXJCYXJJZCkgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHRfZ2V0RmlsdGVyQmFyVmFyaWFudENvbnRyb2woKTogVmFyaWFudE1hbmFnZW1lbnQge1xuXHRcdHJldHVybiB0aGlzLl9nZXRDb250cm9sRnJvbVBhZ2VNb2RlbFByb3BlcnR5KFwiL3ZhcmlhbnRNYW5hZ2VtZW50L2lkXCIpIGFzIFZhcmlhbnRNYW5hZ2VtZW50O1xuXHR9XG5cblx0X2dldE11bHRpTW9kZUNvbnRyb2woKTogTXVsdGlwbGVNb2RlQ29udHJvbCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQoXCJmZTo6VGFiTXVsdGlwbGVNb2RlOjpDb250cm9sXCIpIGFzIE11bHRpcGxlTW9kZUNvbnRyb2w7XG5cdH1cblxuXHRfZ2V0SWNvblRhYkJhcigpOiBJY29uVGFiQmFyIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuYnlJZChcImZlOjpUYWJNdWx0aXBsZU1vZGVcIikgYXMgSWNvblRhYkJhcjtcblx0fVxuXG5cdF9nZXRUYWJsZSgpOiBUYWJsZSB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHRoaXMuX2lzTXVsdGlNb2RlKCkpIHtcblx0XHRcdGNvbnN0IG9Db250cm9sID0gdGhpcy5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpPy5nZXRTZWxlY3RlZElubmVyQ29udHJvbCgpPy5jb250ZW50O1xuXHRcdFx0cmV0dXJuIG9Db250cm9sPy5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpID8gKG9Db250cm9sIGFzIFRhYmxlKSA6IHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2dldENvbnRyb2xGcm9tUGFnZU1vZGVsUHJvcGVydHkoXCIvc2luZ2xlVGFibGVJZFwiKSBhcyBUYWJsZSB8IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblxuXHRfZ2V0Q29udHJvbHMoc0tleT86IHN0cmluZyk6IENvbnRyb2xbXSB7XG5cdFx0aWYgKHRoaXMuX2lzTXVsdGlNb2RlKCkpIHtcblx0XHRcdGNvbnN0IGFDb250cm9sczogQ29udHJvbFtdID0gW107XG5cdFx0XHRjb25zdCBvVGFiTXVsdGlNb2RlID0gdGhpcy5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpLmNvbnRlbnQ7XG5cdFx0XHRvVGFiTXVsdGlNb2RlLmdldEl0ZW1zKCkuZm9yRWFjaCgob0l0ZW06IHVua25vd24pID0+IHtcblx0XHRcdFx0Y29uc3Qgb0NvbnRyb2wgPSB0aGlzLmdldFZpZXcoKS5ieUlkKChvSXRlbSBhcyBUYWJDb250YWluZXJJdGVtKS5nZXRLZXkoKSkgYXMgQ29udHJvbDtcblx0XHRcdFx0aWYgKG9Db250cm9sICYmIHNLZXkpIHtcblx0XHRcdFx0XHRpZiAoKG9JdGVtIGFzIFRhYkNvbnRhaW5lckl0ZW0pLmdldEtleSgpLmluY2x1ZGVzKGBmZTo6JHtzS2V5fWApKSB7XG5cdFx0XHRcdFx0XHRhQ29udHJvbHMucHVzaChvQ29udHJvbCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKG9Db250cm9sICE9PSB1bmRlZmluZWQgJiYgb0NvbnRyb2wgIT09IG51bGwpIHtcblx0XHRcdFx0XHRhQ29udHJvbHMucHVzaChvQ29udHJvbCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIGFDb250cm9scztcblx0XHR9IGVsc2UgaWYgKHNLZXkgPT09IFwiQ2hhcnRcIikge1xuXHRcdFx0Y29uc3Qgb0NoYXJ0ID0gdGhpcy5nZXRDaGFydENvbnRyb2woKTtcblx0XHRcdHJldHVybiBvQ2hhcnQgPyBbb0NoYXJ0XSA6IFtdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBvVGFibGUgPSB0aGlzLl9nZXRUYWJsZSgpO1xuXHRcdFx0cmV0dXJuIG9UYWJsZSA/IFtvVGFibGVdIDogW107XG5cdFx0fVxuXHR9XG5cblx0X2dldERlZmF1bHRQYXRoKCk6IHN0cmluZyB7XG5cdFx0Y29uc3QgZGVmYXVsdFBhdGggPSBMaXN0UmVwb3J0VGVtcGxhdGluZy5nZXREZWZhdWx0UGF0aCh0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0UHJvcGVydHkoXCIvdmlld3NcIikgfHwgW10pO1xuXHRcdHN3aXRjaCAoZGVmYXVsdFBhdGgpIHtcblx0XHRcdGNhc2UgXCJwcmltYXJ5XCI6XG5cdFx0XHRcdHJldHVybiBUZW1wbGF0ZUNvbnRlbnRWaWV3LkNoYXJ0O1xuXHRcdFx0Y2FzZSBcInNlY29uZGFyeVwiOlxuXHRcdFx0XHRyZXR1cm4gVGVtcGxhdGVDb250ZW50Vmlldy5UYWJsZTtcblx0XHRcdGNhc2UgXCJib3RoXCI6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gVGVtcGxhdGVDb250ZW50Vmlldy5IeWJyaWQ7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBrbm93IGlmIExpc3RSZXBvcnQgaXMgY29uZmlndXJlZCB3aXRoIE11bHRpcGxlIFRhYmxlIG1vZGUuXG5cdCAqIEByZXR1cm5zIElzIE11bHRpcGxlIFRhYmxlIG1vZGUgc2V0P1xuXHQgKi9cblx0X2lzTXVsdGlNb2RlKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAhIXRoaXMuX2dldFBhZ2VNb2RlbCgpPy5nZXRQcm9wZXJ0eShcIi9tdWx0aVZpZXdzQ29udHJvbFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8ga25vdyBpZiBMaXN0UmVwb3J0IGlzIGNvbmZpZ3VyZWQgdG8gbG9hZCBkYXRhIGF0IHN0YXJ0IHVwLlxuXHQgKiBAcmV0dXJucyBJcyBJbml0TG9hZCBlbmFibGVkP1xuXHQgKi9cblx0X2lzSW5pdExvYWRFbmFibGVkKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGluaXRMb2FkTW9kZSA9IHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkuaW5pdGlhbExvYWQ7XG5cdFx0cmV0dXJuIGluaXRMb2FkTW9kZSA9PT0gSW5pdGlhbExvYWRNb2RlLkVuYWJsZWQ7XG5cdH1cblxuXHRfaGFzTXVsdGlWaXN1YWxpemF0aW9ucygpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0UGFnZU1vZGVsKCk/LmdldFByb3BlcnR5KFwiL2hhc011bHRpVmlzdWFsaXphdGlvbnNcIik7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHN1c3BlbmQgc2VhcmNoIG9uIHRoZSBmaWx0ZXIgYmFyLiBUaGUgaW5pdGlhbCBsb2FkaW5nIG9mIGRhdGEgaXMgZGlzYWJsZWQgYmFzZWQgb24gdGhlIG1hbmlmZXN0IGNvbmZpZ3VyYXRpb24gSW5pdExvYWQgLSBEaXNhYmxlZC9BdXRvLlxuXHQgKiBJdCBpcyBlbmFibGVkIGxhdGVyIHdoZW4gdGhlIHZpZXcgc3RhdGUgaXMgc2V0LCB3aGVuIGl0IGlzIHBvc3NpYmxlIHRvIHJlYWxpemUgaWYgdGhlcmUgYXJlIGRlZmF1bHQgZmlsdGVycy5cblx0ICovXG5cdF9kaXNhYmxlSW5pdExvYWQoKTogdm9pZCB7XG5cdFx0Y29uc3QgZmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdC8vIGNoZWNrIGZvciBmaWx0ZXIgYmFyIGhpZGRlblxuXHRcdGlmIChmaWx0ZXJCYXIpIHtcblx0XHRcdGZpbHRlckJhci5zZXRTdXNwZW5kU2VsZWN0aW9uKHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgY2FsbGVkIGJ5IGZsZXggdG8gZGV0ZXJtaW5lIGlmIHRoZSBhcHBseUF1dG9tYXRpY2FsbHkgc2V0dGluZyBvbiB0aGUgdmFyaWFudCBpcyB2YWxpZC5cblx0ICogQ2FsbGVkIG9ubHkgZm9yIFN0YW5kYXJkIFZhcmlhbnQgYW5kIG9ubHkgd2hlbiB0aGVyZSBpcyBkaXNwbGF5IHRleHQgc2V0IGZvciBhcHBseUF1dG9tYXRpY2FsbHkgKEZFIG9ubHkgc2V0cyBpdCBmb3IgQXV0bykuXG5cdCAqIEByZXR1cm5zIEJvb2xlYW4gdHJ1ZSBpZiBkYXRhIHNob3VsZCBiZSBsb2FkZWQgYXV0b21hdGljYWxseSwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRfYXBwbHlBdXRvbWF0aWNhbGx5T25TdGFuZGFyZFZhcmlhbnQoKTogYm9vbGVhbiB7XG5cdFx0Ly8gV2UgYWx3YXlzIHJldHVybiBmYWxzZSBhbmQgdGFrZSBjYXJlIG9mIGl0IHdoZW4gdmlldyBzdGF0ZSBpcyBzZXRcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ29uZmlndXJlIHRoZSBzZXR0aW5ncyBmb3IgaW5pdGlhbCBsb2FkIGJhc2VkIG9uXG5cdCAqIC0gbWFuaWZlc3Qgc2V0dGluZyBpbml0TG9hZCAtIEVuYWJsZWQvRGlzYWJsZWQvQXV0b1xuXHQgKiAtIHVzZXIncyBzZXR0aW5nIG9mIGFwcGx5QXV0b21hdGljYWxseSBvbiB2YXJpYW50XG5cdCAqIC0gaWYgdGhlcmUgYXJlIGRlZmF1bHQgZmlsdGVyc1xuXHQgKiBXZSBkaXNhYmxlIHRoZSBmaWx0ZXIgYmFyIHNlYXJjaCBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmFibGUgaXQgd2hlbiB2aWV3IHN0YXRlIGlzIHNldC5cblx0ICovXG5cdF9zZXRJbml0TG9hZCgpOiB2b2lkIHtcblx0XHQvLyBpZiBpbml0TG9hZCBpcyBEaXNhYmxlZCBvciBBdXRvLCBzd2l0Y2ggb2ZmIGZpbHRlciBiYXIgc2VhcmNoIHRlbXBvcmFyaWx5IGF0IHN0YXJ0XG5cdFx0aWYgKCF0aGlzLl9pc0luaXRMb2FkRW5hYmxlZCgpKSB7XG5cdFx0XHR0aGlzLl9kaXNhYmxlSW5pdExvYWQoKTtcblx0XHR9XG5cdFx0Ly8gc2V0IGhvb2sgZm9yIGZsZXggZm9yIHdoZW4gc3RhbmRhcmQgdmFyaWFudCBpcyBzZXQgKGF0IHN0YXJ0IG9yIGJ5IHVzZXIgYXQgcnVudGltZSlcblx0XHQvLyByZXF1aXJlZCB0byBvdmVycmlkZSB0aGUgdXNlciBzZXR0aW5nICdhcHBseSBhdXRvbWF0aWNhbGx5JyBiZWhhdmlvdXIgaWYgdGhlcmUgYXJlIG5vIGZpbHRlcnNcblx0XHRjb25zdCB2YXJpYW50TWFuYWdlbWVudElkID0gTGlzdFJlcG9ydFRlbXBsYXRpbmcuZ2V0VmFyaWFudEJhY2tSZWZlcmVuY2UoXG5cdFx0XHR0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpLFxuXHRcdFx0dGhpcy5fZ2V0UGFnZU1vZGVsKCk/LmdldERhdGEoKSBhcyBMaXN0UmVwb3J0RGVmaW5pdGlvblxuXHRcdCk7XG5cdFx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQgPSB2YXJpYW50TWFuYWdlbWVudElkICYmICh0aGlzLmdldFZpZXcoKS5ieUlkKHZhcmlhbnRNYW5hZ2VtZW50SWQpIGFzIFZhcmlhbnRNYW5hZ2VtZW50KTtcblx0XHRpZiAodmFyaWFudE1hbmFnZW1lbnQpIHtcblx0XHRcdChcblx0XHRcdFx0dmFyaWFudE1hbmFnZW1lbnQgYXMgeyByZWdpc3RlckFwcGx5QXV0b21hdGljYWxseU9uU3RhbmRhcmRWYXJpYW50PzogRnVuY3Rpb24gfVxuXHRcdFx0KT8ucmVnaXN0ZXJBcHBseUF1dG9tYXRpY2FsbHlPblN0YW5kYXJkVmFyaWFudD8uKHRoaXMuX2FwcGx5QXV0b21hdGljYWxseU9uU3RhbmRhcmRWYXJpYW50LmJpbmQodGhpcykpO1xuXHRcdH1cblx0fVxuXG5cdF9zZXRTaGFyZU1vZGVsKCk6IHZvaWQge1xuXHRcdC8vIFRPRE86IGRlYWN0aXZhdGVkIGZvciBub3cgLSBjdXJyZW50bHkgdGhlcmUgaXMgbm8gX3RlbXBsUHJpdiBhbnltb3JlLCB0byBiZSBkaXNjdXNzZWRcblx0XHQvLyB0aGlzIG1ldGhvZCBpcyBjdXJyZW50bHkgbm90IGNhbGxlZCBhbnltb3JlIGZyb20gdGhlIGluaXQgbWV0aG9kXG5cblx0XHRjb25zdCBmbkdldFVzZXIgPSBPYmplY3RQYXRoLmdldChcInNhcC51c2hlbGwuQ29udGFpbmVyLmdldFVzZXJcIik7XG5cdFx0Ly92YXIgb01hbmlmZXN0ID0gdGhpcy5nZXRPd25lckNvbXBvbmVudCgpLmdldEFwcENvbXBvbmVudCgpLmdldE1ldGFkYXRhKCkuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC51aVwiKTtcblx0XHQvL3ZhciBzQm9va21hcmtJY29uID0gKG9NYW5pZmVzdCAmJiBvTWFuaWZlc3QuaWNvbnMgJiYgb01hbmlmZXN0Lmljb25zLmljb24pIHx8IFwiXCI7XG5cblx0XHQvL3NoYXJlTW9kZWw6IEhvbGRzIGFsbCB0aGUgc2hhcmluZyByZWxldmFudCBpbmZvcm1hdGlvbiBhbmQgaW5mbyB1c2VkIGluIFhNTCB2aWV3XG5cdFx0Y29uc3Qgb1NoYXJlSW5mbyA9IHtcblx0XHRcdGJvb2ttYXJrVGl0bGU6IGRvY3VtZW50LnRpdGxlLCAvL1RvIG5hbWUgdGhlIGJvb2ttYXJrIGFjY29yZGluZyB0byB0aGUgYXBwIHRpdGxlLlxuXHRcdFx0Ym9va21hcmtDdXN0b21Vcmw6IGZ1bmN0aW9uICgpOiBzdHJpbmcge1xuXHRcdFx0XHRjb25zdCBzSGFzaCA9IGhhc2hlci5nZXRIYXNoKCk7XG5cdFx0XHRcdHJldHVybiBzSGFzaCA/IGAjJHtzSGFzaH1gIDogd2luZG93LmxvY2F0aW9uLmhyZWY7XG5cdFx0XHR9LFxuXHRcdFx0Lypcblx0XHRcdFx0XHRcdFx0VG8gYmUgYWN0aXZhdGVkIG9uY2UgdGhlIEZMUCBzaG93cyB0aGUgY291bnQgLSBzZWUgY29tbWVudCBhYm92ZVxuXHRcdFx0XHRcdFx0XHRib29rbWFya1NlcnZpY2VVcmw6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdC8vdmFyIG9UYWJsZSA9IG9UYWJsZS5nZXRJbm5lclRhYmxlKCk7IG9UYWJsZSBpcyBhbHJlYWR5IHRoZSBzYXAuZmUgdGFibGUgKGJ1dCBub3QgdGhlIGlubmVyIG9uZSlcblx0XHRcdFx0XHRcdFx0XHQvLyB3ZSBzaG91bGQgdXNlIHRhYmxlLmdldExpc3RCaW5kaW5nSW5mbyBpbnN0ZWFkIG9mIHRoZSBiaW5kaW5nXG5cdFx0XHRcdFx0XHRcdFx0dmFyIG9CaW5kaW5nID0gb1RhYmxlLmdldEJpbmRpbmcoXCJyb3dzXCIpIHx8IG9UYWJsZS5nZXRCaW5kaW5nKFwiaXRlbXNcIik7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG9CaW5kaW5nID8gZm5HZXREb3dubG9hZFVybChvQmluZGluZykgOiBcIlwiO1xuXHRcdFx0XHRcdFx0XHR9LCovXG5cdFx0XHRpc1NoYXJlSW5KYW1BY3RpdmU6ICEhZm5HZXRVc2VyICYmIGZuR2V0VXNlcigpLmlzSmFtQWN0aXZlKClcblx0XHR9O1xuXG5cdFx0Y29uc3Qgb1RlbXBsYXRlUHJpdmF0ZU1vZGVsID0gdGhpcy5nZXRPd25lckNvbXBvbmVudCgpLmdldE1vZGVsKFwiX3RlbXBsUHJpdlwiKSBhcyBKU09OTW9kZWw7XG5cdFx0b1RlbXBsYXRlUHJpdmF0ZU1vZGVsLnNldFByb3BlcnR5KFwiL2xpc3RSZXBvcnQvc2hhcmVcIiwgb1NoYXJlSW5mbyk7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHVwZGF0ZSB0aGUgbG9jYWwgVUkgbW9kZWwgb2YgdGhlIHBhZ2Ugd2l0aCB0aGUgZmllbGRzIHRoYXQgYXJlIG5vdCBhcHBsaWNhYmxlIHRvIHRoZSBmaWx0ZXIgYmFyICh0aGlzIGlzIHNwZWNpZmljIHRvIHRoZSBBTFAgc2NlbmFyaW8pLlxuXHQgKiBAcGFyYW0gb0ludGVybmFsTW9kZWxDb250ZXh0IFRoZSBpbnRlcm5hbCBtb2RlbCBjb250ZXh0XG5cdCAqIEBwYXJhbSBvRmlsdGVyQmFyIE1EQyBmaWx0ZXIgYmFyXG5cdCAqL1xuXHRfdXBkYXRlQUxQTm90QXBwbGljYWJsZUZpZWxkcyhvSW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0LCBvRmlsdGVyQmFyOiBGaWx0ZXJCYXIpOiB2b2lkIHtcblx0XHRjb25zdCBtQ2FjaGU6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xuXHRcdGNvbnN0IGlnbm9yZWRGaWVsZHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9LFxuXHRcdFx0YVRhYmxlcyA9IHRoaXMuX2dldENvbnRyb2xzKFwidGFibGVcIiksXG5cdFx0XHRhQ2hhcnRzID0gdGhpcy5fZ2V0Q29udHJvbHMoXCJDaGFydFwiKTtcblxuXHRcdGlmICghYVRhYmxlcy5sZW5ndGggfHwgIWFDaGFydHMubGVuZ3RoKSB7XG5cdFx0XHQvLyBJZiB0aGVyZSdzIG5vdCBhIHRhYmxlIGFuZCBhIGNoYXJ0LCB3ZSdyZSBub3QgaW4gdGhlIEFMUCBjYXNlXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRm9yIHRoZSBtb21lbnQsIHRoZXJlJ3Mgbm90aGluZyBmb3IgdGFibGVzLi4uXG5cdFx0YUNoYXJ0cy5mb3JFYWNoKGZ1bmN0aW9uIChvQ2hhcnQpIHtcblx0XHRcdGNvbnN0IHNDaGFydEVudGl0eVBhdGggPSBvQ2hhcnQuZGF0YShcInRhcmdldENvbGxlY3Rpb25QYXRoXCIpLFxuXHRcdFx0XHRzQ2hhcnRFbnRpdHlTZXQgPSBzQ2hhcnRFbnRpdHlQYXRoLnNsaWNlKDEpLFxuXHRcdFx0XHRzQ2FjaGVLZXkgPSBgJHtzQ2hhcnRFbnRpdHlTZXR9Q2hhcnRgO1xuXHRcdFx0aWYgKCFtQ2FjaGVbc0NhY2hlS2V5XSkge1xuXHRcdFx0XHRtQ2FjaGVbc0NhY2hlS2V5XSA9IEZpbHRlclV0aWxzLmdldE5vdEFwcGxpY2FibGVGaWx0ZXJzKG9GaWx0ZXJCYXIsIG9DaGFydCk7XG5cdFx0XHR9XG5cdFx0XHRpZ25vcmVkRmllbGRzW3NDYWNoZUtleV0gPSBtQ2FjaGVbc0NhY2hlS2V5XTtcblx0XHR9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJjb250cm9scy9pZ25vcmVkRmllbGRzXCIsIGlnbm9yZWRGaWVsZHMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFByb3ZpZGVzIHRoZSBzZXR0aW5nIHdoZXRoZXIgRmlsdGVyQmFyIGlzIGhpZGRlbiBiYXNlZCBvbiB0aGUgbWFuaWZlc3Qgc2V0dGluZyAnaGlkZUZpbHRlckJhcicuXG5cdCAqIFNob3VsZCBiZSB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggX2lzRmlsdGVyQmFySGlkZGVuVXNlZCBhcyBpdCBtYXkgaGF2ZSBvdmVycmlkZGVuIHRoaXMgc2V0dGluZy5cblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgRmlsdGVyQmFyIGlzIGhpZGRlbiwgZmFsc2UgaWYgdW5rbm93blxuXHQgKi9cblx0X2lzRmlsdGVyQmFySGlkZGVuKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpLmhpZGVGaWx0ZXJCYXIgfHwgZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogUHJvdmlkZXMgdGhlIHNldHRpbmcgd2hldGhlciBGaWx0ZXJCYXIgaXMgaGlkZGVuIGJ1dCBzdGlsbCBleGlzdHMgYmFzZWQgb24gdGhlIG1hbmlmZXN0IHNldHRpbmcgJ3VzZUhpZGRlbkZpbHRlckJhcicuXG5cdCAqIFNob3VsZCBiZSB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggX2lzRmlsdGVyQmFySGlkZGVuIGFzIGl0IGNhbiBhbHNvIGhpZGUgdGhlIEZpbHRlckJhci5cblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgRmlsdGVyQmFyIGlzIGhpZGRlbiwgZmFsc2UgaWYgdW5rbm93blxuXHQgKi9cblx0X2lzRmlsdGVyQmFySGlkZGVuVXNlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS51c2VIaWRkZW5GaWx0ZXJCYXIgfHwgZmFsc2U7XG5cdH1cblxuXHRfZ2V0QXBwbHlBdXRvbWF0aWNhbGx5T25WYXJpYW50KHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudCwga2V5OiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsKTogQm9vbGVhbiB7XG5cdFx0aWYgKCF2YXJpYW50TWFuYWdlbWVudCB8fCAha2V5KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGNvbnN0IHZhcmlhbnRzID0gdmFyaWFudE1hbmFnZW1lbnQuZ2V0VmFyaWFudHMoKTtcblx0XHRjb25zdCBjdXJyZW50VmFyaWFudCA9IHZhcmlhbnRzLmZpbmQoZnVuY3Rpb24gKHZhcmlhbnQpIHtcblx0XHRcdHJldHVybiB2YXJpYW50ICYmIHZhcmlhbnQuZ2V0S2V5KCkgPT09IGtleTtcblx0XHR9KTtcblx0XHRyZXR1cm4gKGN1cnJlbnRWYXJpYW50ICYmIGN1cnJlbnRWYXJpYW50LmdldFByb3BlcnR5KFwiZXhlY3V0ZU9uU2VsZWN0XCIpKSB8fCBmYWxzZTtcblx0fVxuXG5cdF9zaG91bGRBdXRvVHJpZ2dlclNlYXJjaChvVk06IFZhcmlhbnRNYW5hZ2VtZW50IHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuXHRcdGlmIChcblx0XHRcdHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkuaW5pdGlhbExvYWQgPT09IEluaXRpYWxMb2FkTW9kZS5BdXRvICYmXG5cdFx0XHQoIW9WTSB8fCBvVk0uZ2V0U3RhbmRhcmRWYXJpYW50S2V5KCkgPT09IG9WTS5nZXRDdXJyZW50VmFyaWFudEtleSgpKVxuXHRcdCkge1xuXHRcdFx0Y29uc3Qgb0ZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRcdGlmIChvRmlsdGVyQmFyKSB7XG5cdFx0XHRcdGNvbnN0IG9Db25kaXRpb25zID0gb0ZpbHRlckJhci5nZXRDb25kaXRpb25zKCk7XG5cdFx0XHRcdGZvciAoY29uc3Qgc0tleSBpbiBvQ29uZGl0aW9ucykge1xuXHRcdFx0XHRcdC8vIGlnbm9yZSBmaWx0ZXJzIHN0YXJ0aW5nIHdpdGggJCAoZS5nLiAkc2VhcmNoLCAkZWRpdFN0YXRlKVxuXHRcdFx0XHRcdGlmIChvVk0gJiYgIXNLZXkuc3RhcnRzV2l0aChcIiRcIikgJiYgQXJyYXkuaXNBcnJheShvQ29uZGl0aW9uc1tzS2V5XSkgJiYgb0NvbmRpdGlvbnNbc0tleV0ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHQvLyBsb2FkIGRhdGEgYXMgcGVyIHVzZXIncyBzZXR0aW5nIG9mIGFwcGx5QXV0b21hdGljYWxseSBvbiB0aGUgdmFyaWFudFxuXHRcdFx0XHRcdFx0Y29uc3Qgc3RhbmRhcmRWYXJpYW50ID0gb1ZNLmdldFZhcmlhbnRzKCkuZmluZCgodmFyaWFudCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdmFyaWFudC5nZXRLZXkoKSA9PT0gb1ZNLmdldEN1cnJlbnRWYXJpYW50S2V5KCk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdHJldHVybiBzdGFuZGFyZFZhcmlhbnQgJiYgc3RhbmRhcmRWYXJpYW50LmdldEV4ZWN1dGVPblNlbGVjdCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRfdXBkYXRlVGFibGUob1RhYmxlOiBUYWJsZSk6IHZvaWQge1xuXHRcdGlmICghb1RhYmxlLmlzVGFibGVCb3VuZCgpIHx8IHRoaXMuaGFzUGVuZGluZ0NoYXJ0Q2hhbmdlcykge1xuXHRcdFx0b1RhYmxlLnJlYmluZCgpO1xuXHRcdFx0dGhpcy5oYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0X3VwZGF0ZUNoYXJ0KG9DaGFydDogQ2hhcnQpOiB2b2lkIHtcblx0XHRjb25zdCBvSW5uZXJDaGFydCA9IChvQ2hhcnQuZ2V0Q29udHJvbERlbGVnYXRlKCkgYXMgdHlwZW9mIENoYXJ0RGVsZWdhdGUpLl9nZXRDaGFydChvQ2hhcnQpO1xuXHRcdGlmICghKG9Jbm5lckNoYXJ0ICYmIG9Jbm5lckNoYXJ0LmlzQm91bmQoXCJkYXRhXCIpKSB8fCB0aGlzLmhhc1BlbmRpbmdUYWJsZUNoYW5nZXMpIHtcblx0XHRcdChvQ2hhcnQuZ2V0Q29udHJvbERlbGVnYXRlKCkgYXMgdHlwZW9mIENoYXJ0RGVsZWdhdGUpLnJlYmluZChvQ2hhcnQsIG9Jbm5lckNoYXJ0LmdldEJpbmRpbmdJbmZvKFwiZGF0YVwiKSk7XG5cdFx0XHR0aGlzLmhhc1BlbmRpbmdUYWJsZUNoYW5nZXMgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmaWx0ZXIgdG9nZ2xlIGJ1dHRvbi5cblx0ICogQHBhcmFtIGJ1dHRvblZpc2libGUgRmlsdGVyIHRvZ2dsZSBidXR0b24gdmlzaWJpbGl0eVxuXHQgKi9cblx0c2V0RmlsdGVyVG9nZ2xlVmlzaWJpbGl0eShidXR0b25WaXNpYmxlOiBib29sZWFuKTogdm9pZCB7XG5cdFx0Y29uc3QgZmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdGZpbHRlckJhcj8uZ2V0U2VnbWVudGVkQnV0dG9uKCk/LnNldFZpc2libGUoYnV0dG9uVmlzaWJsZSk7XG5cdH1cblxuXHRoYW5kbGVycyA9IHtcblx0XHRvbklubGluZUVkaXRTYXZlKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyKTogdm9pZCB7XG5cdFx0XHR0aGlzLmlubGluZUVkaXRGbG93LmlubGluZUVkaXRTYXZlKCk7XG5cdFx0fSxcblx0XHRvbkZpbHRlclNlYXJjaCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0Y29uc3QgZmlsdGVyQmFyQVBJID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpIS5nZXRQYXJlbnQoKSBhcyBGaWx0ZXJCYXJBUEk7XG5cdFx0XHRmaWx0ZXJCYXJBUEkudHJpZ2dlclNlYXJjaCgpO1xuXHRcdH0sXG5cdFx0b25GaWx0ZXJzQ2hhbmdlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgb0V2ZW50OiBGaWx0ZXJCYXJCYXNlJEZpbHRlcnNDaGFuZ2VkRXZlbnQpOiB2b2lkIHtcblx0XHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdFx0XHRpZiAob0ZpbHRlckJhcikge1xuXHRcdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHQvLyBQZW5kaW5nIGZpbHRlcnMgaW50byBGaWx0ZXJCYXIgdG8gYmUgdXNlZCBmb3IgY3VzdG9tIHZpZXdzXG5cdFx0XHRcdHRoaXMub25QZW5kaW5nRmlsdGVycygpO1xuXG5cdFx0XHRcdGlmIChvSW50ZXJuYWxNb2RlbENvbnRleHQgJiYgb0V2ZW50LmdldFBhcmFtZXRlcihcImNvbmRpdGlvbnNCYXNlZFwiKSkge1xuXHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImhhc1BlbmRpbmdGaWx0ZXJzXCIsIHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvSW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRcdFx0XHR0aGlzLl9zdG9yZUZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQob0ZpbHRlckJhciwgb0ludGVybmFsTW9kZWxDb250ZXh0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0b25WYXJpYW50U2VsZWN0ZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIG9FdmVudDogVmFyaWFudE1hbmFnZW1lbnQkU2VsZWN0RXZlbnQpOiB2b2lkIHtcblx0XHRcdGNvbnN0IHBhcmFtZXRlcnMgPSAob0V2ZW50IGFzIFVJNUV2ZW50KS5nZXRQYXJhbWV0ZXJzKCkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cdFx0XHRjb25zdCB2YXJpYW50TWFuYWdlbWVudCA9IHBhcmFtZXRlcnMub3JpZ2luYWxTb3VyY2UgYXMgVmFyaWFudE1hbmFnZW1lbnQ7XG5cdFx0XHRjb25zdCBjdXJyZW50VmFyaWFudEtleSA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJrZXlcIik7XG5cdFx0XHRjb25zdCBtdWx0aU1vZGVDb250cm9sID0gdGhpcy5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpO1xuXG5cdFx0XHRpZiAobXVsdGlNb2RlQ29udHJvbCAmJiAhdmFyaWFudE1hbmFnZW1lbnQ/LmdldFBhcmVudCgpPy5pc0EoXCJzYXAudWkubWRjLkFjdGlvblRvb2xiYXJcIikpIHtcblx0XHRcdFx0Ly9Ob3QgYSBDb250cm9sIFZhcmlhbnRcblx0XHRcdFx0bXVsdGlNb2RlQ29udHJvbD8uaW52YWxpZGF0ZUNvbnRlbnQoKTtcblx0XHRcdFx0bXVsdGlNb2RlQ29udHJvbD8uc2V0RnJlZXplQ29udGVudCh0cnVlKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gc2V0VGltZW91dCBjYXVzZSB0aGUgdmFyaWFudCBuZWVkcyB0byBiZSBhcHBsaWVkIGJlZm9yZSBqdWRnaW5nIHRoZSBhdXRvIHNlYXJjaCBvciB1cGRhdGluZyB0aGUgYXBwIHN0YXRlXG5cdFx0XHRzZXRUaW1lb3V0KCgpOiB2b2lkID0+IHtcblx0XHRcdFx0Y29uc3QgZmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdFx0XHRjb25zdCBkeW5hbWljUGFnZSA9IHRoaXMuX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbCgpO1xuXHRcdFx0XHRjb25zdCBmaXJzdEVtcHR5TWFuZGF0b3J5RmllbGQgPSBmaWx0ZXJCYXI/LmdldEZpbHRlckl0ZW1zKCkuZmluZChmdW5jdGlvbiAoZmlsdGVySXRlbSkge1xuXHRcdFx0XHRcdHJldHVybiBmaWx0ZXJJdGVtLmdldFJlcXVpcmVkKCkgJiYgZmlsdGVySXRlbS5nZXRDb25kaXRpb25zKCkubGVuZ3RoID09PSAwO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKGZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZCkge1xuXHRcdFx0XHRcdGR5bmFtaWNQYWdlLnNldEhlYWRlckV4cGFuZGVkKHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0aGlzLl9zaG91bGRBdXRvVHJpZ2dlclNlYXJjaCh2YXJpYW50TWFuYWdlbWVudCkpIHtcblx0XHRcdFx0XHQvLyB0aGUgYXBwIHN0YXRlIHdpbGwgYmUgdXBkYXRlZCB2aWEgb25TZWFyY2ggaGFuZGxlclxuXHRcdFx0XHRcdGNvbnN0IGZpbHRlckJhckFQSSA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKSEuZ2V0UGFyZW50KCkgYXMgRmlsdGVyQmFyQVBJO1xuXHRcdFx0XHRcdGZpbHRlckJhckFQSS50cmlnZ2VyU2VhcmNoKCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoIXRoaXMuX2dldEFwcGx5QXV0b21hdGljYWxseU9uVmFyaWFudCh2YXJpYW50TWFuYWdlbWVudCwgY3VycmVudFZhcmlhbnRLZXkpKSB7XG5cdFx0XHRcdFx0bXVsdGlNb2RlQ29udHJvbD8uc2V0RnJlZXplQ29udGVudChmYWxzZSk7XG5cdFx0XHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0XHRcdGR5bmFtaWNQYWdlLnNldEhlYWRlckV4cGFuZGVkKHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LCAwKTtcblx0XHR9LFxuXHRcdG9uVmFyaWFudFNhdmVkKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyKTogdm9pZCB7XG5cdFx0XHQvL1RPRE86IFNob3VsZCByZW1vdmUgdGhpcyBzZXRUaW1lT3V0IG9uY2UgVmFyaWFudCBNYW5hZ2VtZW50IHByb3ZpZGVzIGFuIGFwaSB0byBmZXRjaCB0aGUgY3VycmVudCB2YXJpYW50IGtleSBvbiBzYXZlISEhXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0fSwgMTAwMCk7XG5cdFx0fSxcblx0XHRvblNlYXJjaCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0Y29uc3Qgb0ZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKSBhcyBGaWx0ZXJCYXI7IC8vIG9uc2VhcmNoIGlzIGNhbGxlZCBvbmx5IGlmIHRoZSBmaWx0ZXJiYXIgZXhpc3RzXG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0Y29uc3Qgb01kY0NoYXJ0ID0gdGhpcy5nZXRDaGFydENvbnRyb2woKTtcblx0XHRcdGNvbnN0IGJIaWRlRHJhZnQgPSBGaWx0ZXJVdGlscy5nZXRFZGl0U3RhdGVJc0hpZGVEcmFmdChvRmlsdGVyQmFyLmdldENvbmRpdGlvbnMoKSk7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoYXNQZW5kaW5nRmlsdGVyc1wiLCBmYWxzZSk7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoaWRlRHJhZnRJbmZvXCIsIGJIaWRlRHJhZnQpO1xuXHRcdFx0Y29uc3QgZHluYW1pY1BhZ2UgPSB0aGlzLl9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2woKTtcblx0XHRcdGlmICghdGhpcy5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpKSB7XG5cdFx0XHRcdHRoaXMuX3VwZGF0ZUFMUE5vdEFwcGxpY2FibGVGaWVsZHMob0ludGVybmFsTW9kZWxDb250ZXh0LCBvRmlsdGVyQmFyKTtcblx0XHRcdH1cblx0XHRcdGlmIChvTWRjQ2hhcnQpIHtcblx0XHRcdFx0Ly8gZGlzYWJsZSBib3VuZCBhY3Rpb25zIFRPRE86IHRoaXMgY2xlYXJzIGV2ZXJ5dGhpbmcgZm9yIHRoZSBjaGFydD9cblx0XHRcdFx0KG9NZGNDaGFydC5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0KS5zZXRQcm9wZXJ0eShcIlwiLCB7fSk7XG5cblx0XHRcdFx0Y29uc3Qgb1BhZ2VJbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9NZGNDaGFydC5nZXRCaW5kaW5nQ29udGV4dChcInBhZ2VJbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdFx0Y29uc3Qgc1RlbXBsYXRlQ29udGVudFZpZXcgPSBvUGFnZUludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KGAke29QYWdlSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UGF0aCgpfS9hbHBDb250ZW50Vmlld2ApO1xuXHRcdFx0XHRpZiAoc1RlbXBsYXRlQ29udGVudFZpZXcgPT09IFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQpIHtcblx0XHRcdFx0XHR0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChzVGVtcGxhdGVDb250ZW50VmlldyA9PT0gVGVtcGxhdGVDb250ZW50Vmlldy5UYWJsZSkge1xuXHRcdFx0XHRcdHRoaXMuaGFzUGVuZGluZ1RhYmxlQ2hhbmdlcyA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly9sb2dpYyBmb3IgZXhwYW5zaW9uIG9yIGNvbGxhcHNlIG9mIGZpbHRlciBiYXIgc3RhcnRzXG5cdFx0XHRpZiAoIURldmljZS5zeXN0ZW0uZGVza3RvcCAmJiBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJzZWFyY2hUcmlnZ2VyZWRCeUluaXRpYWxMb2FkXCIpID09PSB0cnVlKSB7XG5cdFx0XHRcdGlmIChkeW5hbWljUGFnZS5nZXRIZWFkZXJFeHBhbmRlZCgpICE9PSBmYWxzZSkge1xuXHRcdFx0XHRcdGR5bmFtaWNQYWdlLnNldEhlYWRlckV4cGFuZGVkKGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvL3NldHRpbmcgaXQgdG8gZmFsc2Ugc28gdGhhdCBmdXJ0aGVyIHNlYXJjaCBvciAnR28nIHRyaWdnZXJzIHdvbid0IGNvbGxhcHNlIHRoZSBmaWx0ZXIgYmFyXG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInNlYXJjaFRyaWdnZXJlZEJ5SW5pdGlhbExvYWRcIiwgZmFsc2UpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBzdG9yZSBmaWx0ZXIgYmFyIGNvbmRpdGlvbnMgdG8gdXNlIGxhdGVyIHdoaWxlIG5hdmlnYXRpb25cblx0XHRcdFN0YXRlVXRpbC5yZXRyaWV2ZUV4dGVybmFsU3RhdGUob0ZpbHRlckJhcilcblx0XHRcdFx0LnRoZW4oKG9FeHRlcm5hbFN0YXRlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5maWx0ZXJCYXJDb25kaXRpb25zID0gb0V4dGVybmFsU3RhdGUuZmlsdGVyO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXRyaWV2aW5nIHRoZSBleHRlcm5hbCBzdGF0ZVwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRpZiAodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS5saXZlTW9kZSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoRGV2aWNlLnN5c3RlbS5waG9uZSkge1xuXHRcdFx0XHRjb25zdCBvRHluYW1pY1BhZ2UgPSB0aGlzLl9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2woKTtcblx0XHRcdFx0aWYgKCF0aGlzLl9pc0luaXRMb2FkRW5hYmxlZCgpKSB7XG5cdFx0XHRcdFx0b0R5bmFtaWNQYWdlLnNldEhlYWRlckV4cGFuZGVkKHRydWUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG9EeW5hbWljUGFnZS5zZXRIZWFkZXJFeHBhbmRlZChmYWxzZSk7XG5cdFx0XHRcdFx0dGhpcy5zZXRGaWx0ZXJUb2dnbGVWaXNpYmlsaXR5KGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogVHJpZ2dlcnMgYW4gb3V0Ym91bmQgbmF2aWdhdGlvbiB3aGVuIGEgdXNlciBjaG9vc2VzIHRoZSBjaGV2cm9uLlxuXHRcdCAqIEBwYXJhbSBvQ29udHJvbGxlclxuXHRcdCAqIEBwYXJhbSBzT3V0Ym91bmRUYXJnZXQgTmFtZSBvZiB0aGUgb3V0Ym91bmQgdGFyZ2V0IChuZWVkcyB0byBiZSBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdClcblx0XHQgKiBAcGFyYW0gb0NvbnRleHQgVGhlIGNvbnRleHQgdGhhdCBjb250YWlucyB0aGUgZGF0YSBmb3IgdGhlIHRhcmdldCBhcHBcblx0XHQgKiBAcGFyYW0gc0NyZWF0ZVBhdGggQ3JlYXRlIHBhdGggd2hlbiB0aGUgY2hldnJvbiBpcyBjcmVhdGVkLlxuXHRcdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggaXMgcmVzb2x2ZWQgb25jZSB0aGUgbmF2aWdhdGlvbiBpcyB0cmlnZ2VyZWRcblx0XHQgKiBAZmluYWxcblx0XHQgKi9cblx0XHRhc3luYyBvbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQoXG5cdFx0XHRvQ29udHJvbGxlcjogTGlzdFJlcG9ydENvbnRyb2xsZXIsXG5cdFx0XHRzT3V0Ym91bmRUYXJnZXQ6IHN0cmluZyxcblx0XHRcdG9Db250ZXh0OiBDb250ZXh0LFxuXHRcdFx0c0NyZWF0ZVBhdGg6IHN0cmluZ1xuXHRcdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdFx0cmV0dXJuIG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ub25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kKG9Db250cm9sbGVyLCBzT3V0Ym91bmRUYXJnZXQsIG9Db250ZXh0LCBzQ3JlYXRlUGF0aCk7XG5cdFx0fSxcblx0XHRvbkNoYXJ0U2VsZWN0aW9uQ2hhbmdlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgb0V2ZW50OiBVSTVFdmVudDx7IGRhdGE6IHVua25vd24gfSwgQ2hhcnRUeXBlPik6IHZvaWQge1xuXHRcdFx0Y29uc3Qgb01kY0NoYXJ0ID0gb0V2ZW50LmdldFNvdXJjZSgpLmdldENvbnRlbnQoKSBhcyBDaGFydCxcblx0XHRcdFx0b1RhYmxlID0gdGhpcy5fZ2V0VGFibGUoKSxcblx0XHRcdFx0YURhdGEgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiZGF0YVwiKSxcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdGlmIChhRGF0YSkge1xuXHRcdFx0XHRDaGFydFV0aWxzLnNldENoYXJ0RmlsdGVycyhvTWRjQ2hhcnQpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgc1RlbXBsYXRlQ29udGVudFZpZXcgPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoYCR7b0ludGVybmFsTW9kZWxDb250ZXh0LmdldFBhdGgoKX0vYWxwQ29udGVudFZpZXdgKTtcblx0XHRcdGlmIChzVGVtcGxhdGVDb250ZW50VmlldyA9PT0gVGVtcGxhdGVDb250ZW50Vmlldy5DaGFydCkge1xuXHRcdFx0XHR0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMgPSB0cnVlO1xuXHRcdFx0fSBlbHNlIGlmIChvVGFibGUpIHtcblx0XHRcdFx0b1RhYmxlLnJlYmluZCgpO1xuXHRcdFx0XHR0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMgPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdG9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgb0V2ZW50OiBVSTVFdmVudCk6IHZvaWQge1xuXHRcdFx0Y29uc3Qgc2VsZWN0ZWRLZXk6IHN0cmluZyA9XG5cdFx0XHRcdChvRXZlbnQuZ2V0UGFyYW1ldGVycygpIGFzIHsgc2VsZWN0ZWRLZXk6IHN0cmluZyB9KS5zZWxlY3RlZEtleSB8fCAob0V2ZW50LmdldFBhcmFtZXRlcnMoKSBhcyB7IGtleTogc3RyaW5nIH0pLmtleTtcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJhbHBDb250ZW50Vmlld1wiLCBzZWxlY3RlZEtleSk7XG5cdFx0XHRjb25zdCBvQ2hhcnQgPSB0aGlzLmdldENoYXJ0Q29udHJvbCgpO1xuXHRcdFx0Y29uc3Qgb1RhYmxlID0gdGhpcy5fZ2V0VGFibGUoKTtcblxuXHRcdFx0c3dpdGNoIChzZWxlY3RlZEtleSkge1xuXHRcdFx0XHRjYXNlIFRlbXBsYXRlQ29udGVudFZpZXcuVGFibGU6XG5cdFx0XHRcdFx0aWYgKG9UYWJsZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5fdXBkYXRlVGFibGUob1RhYmxlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgVGVtcGxhdGVDb250ZW50Vmlldy5DaGFydDpcblx0XHRcdFx0XHRpZiAob0NoYXJ0KSB7XG5cdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVDaGFydChvQ2hhcnQgYXMgQ2hhcnQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBUZW1wbGF0ZUNvbnRlbnRWaWV3Lkh5YnJpZDpcblx0XHRcdFx0XHRpZiAob1RhYmxlKSB7XG5cdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVUYWJsZShvVGFibGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAob0NoYXJ0KSB7XG5cdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVDaGFydChvQ2hhcnQgYXMgQ2hhcnQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHR9LFxuXHRcdG9uRHluYW1pY1BhZ2VUaXRsZVN0YXRlQ2hhbmdlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgZXZlbnQ6IER5bmFtaWNQYWdlVGl0bGUkU3RhdGVDaGFuZ2VFdmVudCk6IHZvaWQge1xuXHRcdFx0Y29uc3QgZmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdFx0aWYgKGZpbHRlckJhcikge1xuXHRcdFx0XHR0aGlzLnNldEZpbHRlclRvZ2dsZVZpc2liaWxpdHkoISFldmVudC5nZXRQYXJhbWV0ZXIoXCJpc0V4cGFuZGVkXCIpKTtcblx0XHRcdFx0aWYgKGV2ZW50LmdldFBhcmFtZXRlcihcImlzRXhwYW5kZWRcIikgPT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0SW52aXNpYmxlTWVzc2FnZS5nZXRJbnN0YW5jZSgpLmFubm91bmNlKFxuXHRcdFx0XHRcdFx0ZmlsdGVyQmFyLmdldEFzc2lnbmVkRmlsdGVyc1RleHQoKS5maWx0ZXJzVGV4dCBhcyBzdHJpbmcsXG5cdFx0XHRcdFx0XHRJbnZpc2libGVNZXNzYWdlTW9kZS5Bc3NlcnRpdmVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gdXBkYXRlIHRoZSBsb2NhbCBVSSBtb2RlbCBvZiB0aGUgcGFnZSB3aXRoIHRoZSBTZWxlY3Rpb24gVmFyaWFudC5cblx0ICogQHBhcmFtIGZpbHRlckJhciBNREMgZmlsdGVyIGJhclxuXHQgKiBAcGFyYW0gaW50ZXJuYWxNb2RlbENvbnRleHQgVGhlIGludGVybmFsIG1vZGVsIGNvbnRleHRcblx0ICovXG5cdGFzeW5jIF9zdG9yZUZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQoZmlsdGVyQmFyOiBGaWx0ZXJCYXIsIGludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBmaWx0ZXJCYXJBUEkgPSBmaWx0ZXJCYXIuZ2V0UGFyZW50KCkgYXMgRmlsdGVyQmFyQVBJO1xuXHRcdFx0Y29uc3Qgc3YgPSBhd2FpdCBmaWx0ZXJCYXJBUEkuZ2V0U2VsZWN0aW9uVmFyaWFudCgpO1xuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJmaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50XCIsIHN2KTtcblx0XHR9IGNhdGNoIChlcnI6IHVua25vd24pIHtcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG5cdFx0XHRMb2cuZXJyb3IoYEZFIDogRXJyb3IgZmV0Y2hpbmcgc2VsZWN0aW9uIHZhcmlhbnQgb24gZmlsdGVyIGNoYW5nZTogJHttZXNzYWdlfWApO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZ2V0IHRoZSBTZWxlY3Rpb24gVmFyaWFudCBmcm9tIGludGVybmFsIG1vZGVsLlxuXHQgKiBAcmV0dXJucyBTZWxlY3Rpb25WYXJpYW50XG5cdCAqL1xuXHRnZXRGaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50KCk6IFNlbGVjdGlvblZhcmlhbnQge1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCB8IHVuZGVmaW5lZDtcblx0XHRyZXR1cm4gKGludGVybmFsTW9kZWxDb250ZXh0Py5nZXRQcm9wZXJ0eShcImZpbHRlckJhclNlbGVjdGlvblZhcmlhbnRcIikgYXMgU2VsZWN0aW9uVmFyaWFudCkgfHwgbmV3IFNlbGVjdGlvblZhcmlhbnQoKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBMaXN0UmVwb3J0Q29udHJvbGxl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
@@ -178,7 +178,13 @@ class ListReportController extends PageController {
178
178
  delete this.extensionAPI;
179
179
  }
180
180
 
181
- _onAfterBinding(): void {
181
+ async _onAfterBinding(): Promise<void> {
182
+ const internalModelContext = this.getView().getBindingContext("internal") as InternalModelContext;
183
+ if (!internalModelContext.getProperty("initialVariantApplied")) {
184
+ this.pageReady.waitFor(this._applyAppState());
185
+ internalModelContext.setProperty("initialVariantApplied", true);
186
+ }
187
+ await CommonUtils.getAppComponent(this.getView()).isAppComponentBusy();
182
188
  const aTables = this._getControls("table") as Table[];
183
189
  let updateActions = true;
184
190
  if (EditState.isEditStateDirty()) {
@@ -193,8 +199,7 @@ class ListReportController extends PageController {
193
199
  CommonUtils.getAppComponent(this.getView())
194
200
  .getRoutingService()
195
201
  .waitForBindingCleanup()
196
- .then(async () => {
197
- await CommonUtils.getAppComponent(this.getView()).isAppComponentBusy();
202
+ .then(() => {
198
203
  oTableBinding.attachEventOnce("dataReceived", () => {
199
204
  this._updateTableActions(aTables);
200
205
  });
@@ -216,12 +221,6 @@ class ListReportController extends PageController {
216
221
  if (updateActions) {
217
222
  this._updateTableActions(aTables);
218
223
  }
219
-
220
- const internalModelContext = this.getView().getBindingContext("internal") as InternalModelContext;
221
- if (!internalModelContext.getProperty("initialVariantApplied")) {
222
- this.pageReady.waitFor(this._applyAppState());
223
- internalModelContext.setProperty("initialVariantApplied", true);
224
- }
225
224
  const environmentCapabilities = CommonUtils.getAppComponent(this.getView()).getEnvironmentCapabilities();
226
225
  environmentCapabilities
227
226
  .isInsightsEnabled()
@@ -5,7 +5,7 @@
5
5
  "type": "component",
6
6
  "i18n": "../messagebundle.properties",
7
7
  "applicationVersion": {
8
- "version": "1.136.10"
8
+ "version": "1.136.12"
9
9
  },
10
10
  "title": "List Report",
11
11
  "tags": {
@@ -114,36 +114,37 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUt
114
114
  // TODO: this should be ideally be handled by the editflow/routing without the need to have this method in the
115
115
  // object page - for now keep it here
116
116
  ;
117
- _proto.createDeferredContext = function createDeferredContext(sPath, oListBinding, parentContext, data, bActionCreate) {
117
+ _proto.createDeferredContext = function createDeferredContext(sPath, parameters, bActionCreate) {
118
118
  if (!this.DeferredContextCreated) {
119
119
  this.DeferredContextCreated = true;
120
- const oParameters = {
121
- $$groupId: "$auto.Heroes",
122
- $$updateGroupId: "$auto"
123
- };
124
- const metaModel = this.getModel().getMetaModel();
125
- if (ModelHelper.isCollaborationDraftSupported(metaModel)) {
126
- oParameters.$select = "DraftAdministrativeData/DraftAdministrativeUser";
120
+ if (!parameters.listBinding) {
121
+ const oParameters = {
122
+ $$groupId: "$auto.Heroes",
123
+ $$updateGroupId: "$auto"
124
+ };
125
+ const metaModel = this.getModel().getMetaModel();
126
+ if (ModelHelper.isCollaborationDraftSupported(metaModel)) {
127
+ oParameters.$select = "DraftAdministrativeData/DraftAdministrativeUser";
128
+ }
129
+ parameters.listBinding = this.getModel().bindList(sPath.replace("(...)", ""), undefined, undefined, undefined, oParameters);
127
130
  }
128
- if (!oListBinding) {
129
- oListBinding = this.getModel().bindList(sPath.replace("(...)", ""), undefined, undefined, undefined, oParameters);
130
- }
131
- const oStartUpParams = this.oAppComponent && this.oAppComponent.getComponentData() && this.oAppComponent.getComponentData().startupParameters,
132
- oInboundParameters = this.getViewData().inboundParameters;
133
- let createParams;
134
- if (oStartUpParams && oStartUpParams.preferredMode && oStartUpParams.preferredMode[0].includes("create")) {
135
- createParams = Object.assign({}, data, CommonUtils.getAdditionalParamsForCreate(oStartUpParams, oInboundParameters));
131
+ const oStartUpParams = this.oAppComponent?.getComponentData()?.startupParameters;
132
+ let dataForCreate;
133
+ if (oStartUpParams?.preferredMode?.[0].includes("create") === true) {
134
+ const oInboundParameters = this.getViewData().inboundParameters;
135
+ dataForCreate = Object.assign({}, parameters.data, CommonUtils.getAdditionalParamsForCreate(oStartUpParams, oInboundParameters));
136
136
  } else {
137
- createParams = data;
137
+ dataForCreate = parameters.data;
138
138
  }
139
139
 
140
140
  // for now wait until the view and the controller is created
141
- this.getRootControl().getController().editFlow.createDocument(oListBinding, {
141
+ this.getRootControl().getController().editFlow.createDocument(parameters.listBinding, {
142
142
  creationMode: CreationMode.Sync,
143
143
  createAction: bActionCreate,
144
- data: createParams,
144
+ data: dataForCreate,
145
145
  bFromDeferred: true,
146
- selectedContexts: parentContext ? [parentContext] : undefined
146
+ selectedContexts: parameters.parentContext ? [parameters.parentContext] : undefined,
147
+ requestAtLeast: parameters.requestAtLeast
147
148
  }).finally(() => {
148
149
  this.DeferredContextCreated = false;
149
150
  }).catch(function () {
@@ -226,4 +227,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUt
226
227
  }), _class2)) || _class);
227
228
  return ObjectPageComponent;
228
229
  }, false);
229
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJWYXJpYW50TWFuYWdlbWVudCIsIkNvcmVMaWJyYXJ5IiwiQ3JlYXRpb25Nb2RlIiwiU2VjdGlvbkxheW91dCIsInRlbXBsYXRlTGliIiwiT2JqZWN0UGFnZSIsIk9iamVjdFBhZ2VDb21wb25lbnQiLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJsaWJyYXJ5IiwibWFuaWZlc3QiLCJfZGVjMiIsInByb3BlcnR5IiwidHlwZSIsImRlZmF1bHRWYWx1ZSIsIk5vbmUiLCJfZGVjMyIsIlBhZ2UiLCJfZGVjNCIsIl9kZWM1IiwiX2RlYzYiLCJfZGVjNyIsIl9kZWM4IiwiX2RlYzkiLCJfZGVjMTAiLCJfZGVjMTEiLCJfZGVjMTIiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX1RlbXBsYXRlQ29tcG9uZW50IiwiX3RoaXMiLCJfbGVuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiX2Rlc2NyaXB0b3I3IiwiX2Rlc2NyaXB0b3I4IiwiX2Rlc2NyaXB0b3I5IiwiX2Rlc2NyaXB0b3IxMCIsIl9kZXNjcmlwdG9yMTEiLCJEZWZlcnJlZENvbnRleHRDcmVhdGVkIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJpc0NvbnRleHRFeHBlY3RlZCIsImV4dGVuZFBhZ2VEZWZpbml0aW9uIiwicGFnZURlZmluaXRpb24iLCJjb252ZXJ0ZXJDb250ZXh0IiwiZXh0ZW5kT2JqZWN0UGFnZURlZmluaXRpb24iLCJjcmVhdGVEZWZlcnJlZENvbnRleHQiLCJzUGF0aCIsIm9MaXN0QmluZGluZyIsInBhcmVudENvbnRleHQiLCJkYXRhIiwiYkFjdGlvbkNyZWF0ZSIsIm9QYXJhbWV0ZXJzIiwiJCRncm91cElkIiwiJCR1cGRhdGVHcm91cElkIiwibWV0YU1vZGVsIiwiZ2V0TW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJNb2RlbEhlbHBlciIsImlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkIiwiJHNlbGVjdCIsImJpbmRMaXN0IiwicmVwbGFjZSIsInVuZGVmaW5lZCIsIm9TdGFydFVwUGFyYW1zIiwib0FwcENvbXBvbmVudCIsImdldENvbXBvbmVudERhdGEiLCJzdGFydHVwUGFyYW1ldGVycyIsIm9JbmJvdW5kUGFyYW1ldGVycyIsImdldFZpZXdEYXRhIiwiaW5ib3VuZFBhcmFtZXRlcnMiLCJjcmVhdGVQYXJhbXMiLCJwcmVmZXJyZWRNb2RlIiwiaW5jbHVkZXMiLCJPYmplY3QiLCJhc3NpZ24iLCJDb21tb25VdGlscyIsImdldEFkZGl0aW9uYWxQYXJhbXNGb3JDcmVhdGUiLCJnZXRSb290Q29udHJvbCIsImdldENvbnRyb2xsZXIiLCJlZGl0RmxvdyIsImNyZWF0ZURvY3VtZW50IiwiY3JlYXRpb25Nb2RlIiwiU3luYyIsImNyZWF0ZUFjdGlvbiIsImJGcm9tRGVmZXJyZWQiLCJzZWxlY3RlZENvbnRleHRzIiwiZmluYWxseSIsImNhdGNoIiwic2V0VmFyaWFudE1hbmFnZW1lbnQiLCJzVmFyaWFudE1hbmFnZW1lbnQiLCJMb2ciLCJlcnJvciIsInNldFByb3BlcnR5IiwiaXNPcGVuSW5FZGl0TW9kZSIsIm9wZW5JbkVkaXRNb2RlIiwiVGVtcGxhdGVDb21wb25lbnQiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkNvbXBvbmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBwcm9wZXJ0eSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgSW5ib3VuZFBhcmFtZXRlciB9IGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IFRlbXBsYXRlQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9UZW1wbGF0ZUNvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IE9iamVjdFBhZ2VEZWZpbml0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvdGVtcGxhdGVzL09iamVjdFBhZ2VDb252ZXJ0ZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IENvcmVMaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSB7IEZpbmFsUGFnZURlZmluaXRpb24gfSBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL0V4dGVuZFBhZ2VEZWZpbml0aW9uXCI7XG5pbXBvcnQgeyBleHRlbmRPYmplY3RQYWdlRGVmaW5pdGlvbiB9IGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvRXh0ZW5kUGFnZURlZmluaXRpb25cIjtcbmltcG9ydCB0ZW1wbGF0ZUxpYiBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcblxuY29uc3QgVmFyaWFudE1hbmFnZW1lbnQgPSBDb3JlTGlicmFyeS5WYXJpYW50TWFuYWdlbWVudCxcblx0Q3JlYXRpb25Nb2RlID0gQ29yZUxpYnJhcnkuQ3JlYXRpb25Nb2RlO1xuY29uc3QgU2VjdGlvbkxheW91dCA9IHRlbXBsYXRlTGliLk9iamVjdFBhZ2UuU2VjdGlvbkxheW91dDtcbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5Db21wb25lbnRcIiwgeyBsaWJyYXJ5OiBcInNhcC5mZS50ZW1wbGF0ZXNcIiwgbWFuaWZlc3Q6IFwianNvblwiIH0pXG5jbGFzcyBPYmplY3RQYWdlQ29tcG9uZW50IGV4dGVuZHMgVGVtcGxhdGVDb21wb25lbnQge1xuXHQvKipcblx0ICogRGVmaW5lcyBpZiBhbmQgb24gd2hpY2ggbGV2ZWwgdmFyaWFudHMgY2FuIGJlIGNvbmZpZ3VyZWQ6XG5cdCAqIFx0XHROb25lOiBubyB2YXJpYW50IGNvbmZpZ3VyYXRpb24gYXQgYWxsXG5cdCAqIFx0XHRQYWdlOiBvbmUgdmFyaWFudCBjb25maWd1cmF0aW9uIGZvciB0aGUgd2hvbGUgcGFnZVxuXHQgKiBcdFx0Q29udHJvbDogdmFyaWFudCBjb25maWd1cmF0aW9uIG9uIGNvbnRyb2wgbGV2ZWxcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzYXAuZmUuY29yZS5WYXJpYW50TWFuYWdlbWVudFwiLFxuXHRcdGRlZmF1bHRWYWx1ZTogVmFyaWFudE1hbmFnZW1lbnQuTm9uZVxuXHR9KVxuXHR2YXJpYW50TWFuYWdlbWVudDogdHlwZW9mIFZhcmlhbnRNYW5hZ2VtZW50O1xuXG5cdC8qKlxuXHQgKiBEZWZpbmVzIGhvdyB0aGUgc2VjdGlvbnMgYXJlIHJlbmRlcmVkXG5cdCAqIFx0XHRQYWdlOiBhbGwgc2VjdGlvbnMgYXJlIHNob3duIG9uIG9uZSBwYWdlXG5cdCAqIFx0XHRUYWJzOiBlYWNoIHRvcC1sZXZlbCBzZWN0aW9uIGlzIHNob3duIGluIGFuIG93biB0YWJcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2UuU2VjdGlvbkxheW91dFwiLFxuXHRcdGRlZmF1bHRWYWx1ZTogU2VjdGlvbkxheW91dC5QYWdlXG5cdH0pXG5cdHNlY3Rpb25MYXlvdXQ6IHR5cGVvZiBTZWN0aW9uTGF5b3V0O1xuXG5cdC8qKlxuXHQgKiBFbmFibGVzIHRoZSByZWxhdGVkIGFwcHMgZmVhdHVyZXNcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJib29sZWFuXCIsXG5cdFx0ZGVmYXVsdFZhbHVlOiBmYWxzZVxuXHR9KVxuXHRzaG93UmVsYXRlZEFwcHMhOiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBFbmFibGVzIHRoZSAnTWljcm9zb2Z0IFRlYW1zID4gQXMgQ2FyZCcgb3B0aW9uIGluIHRoZSAnU2hhcmUnIG1lbnVcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJvYmplY3RcIlxuXHR9KVxuXHRzaGFyZSE6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+PjtcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcIm9iamVjdFwiIH0pXG5cdGFkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMhOiBvYmplY3Q7XG5cblx0LyoqXG5cdCAqIEVuYWJsZXMgdGhlIGVkaXRhYmxlIG9iamVjdCBwYWdlIGhlYWRlclxuXHQgKi9cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcImJvb2xlYW5cIixcblx0XHRkZWZhdWx0VmFsdWU6IHRydWVcblx0fSlcblx0ZWRpdGFibGVIZWFkZXJDb250ZW50ITogYm9vbGVhbjtcblxuXHQvKipcblx0ICogU2hvd3MgYSB0ZXh0IGluc3RlYWQgb2YgYW4gSWxsdXN0cmF0ZWRNZXNzYWdlIGluIHRoZSBub0RhdGEgYWdncmVnYXRpb24gb2YgVGFibGVzIG9yIENoYXJ0c1xuXHQgKi9cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcImJvb2xlYW5cIixcblx0XHRkZWZhdWx0VmFsdWU6IGZhbHNlXG5cdH0pXG5cdHVzZVRleHRGb3JOb0RhdGFNZXNzYWdlcyE6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIEVuYWJsZXMgdGhlIEJyZWFkQ3J1bWJzIGZlYXR1cmVzXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwiYm9vbGVhblwiLFxuXHRcdGRlZmF1bHRWYWx1ZTogdHJ1ZVxuXHR9KVxuXHRzaG93QnJlYWRDcnVtYnMhOiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBEZWZpbmVzIHRoZSBwcm9wZXJ0aWVzIHdoaWNoIGNhbiBiZSB1c2VkIGZvciBpbmJvdW5kIE5hdmlnYXRpb25cblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJvYmplY3RcIlxuXHR9KVxuXHRpbmJvdW5kUGFyYW1ldGVycyE6IG9iamVjdDtcblxuXHQvKipcblx0ICogRGVmaW5lcyBpZiBhbiBvYmplY3QgcGFnZSBzaG91bGQgYmUgb3BlbmVkIGluIGVkaXQgbW9kZVxuXHQgKi9cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcImJvb2xlYW5cIlxuXHR9KVxuXHRvcGVuSW5FZGl0TW9kZTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwiYm9vbGVhblwiLFxuXHRcdGRlZmF1bHRWYWx1ZTogZmFsc2Vcblx0fSlcblx0ZW5hYmxlTGF6eUxvYWRpbmchOiBib29sZWFuO1xuXG5cdHByaXZhdGUgRGVmZXJyZWRDb250ZXh0Q3JlYXRlZCA9IGZhbHNlO1xuXG5cdGlzQ29udGV4dEV4cGVjdGVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0ZXh0ZW5kUGFnZURlZmluaXRpb24ocGFnZURlZmluaXRpb246IE9iamVjdFBhZ2VEZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogRmluYWxQYWdlRGVmaW5pdGlvbiB7XG5cdFx0cmV0dXJuIGV4dGVuZE9iamVjdFBhZ2VEZWZpbml0aW9uKHBhZ2VEZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0fVxuXG5cdC8vIFRPRE86IHRoaXMgc2hvdWxkIGJlIGlkZWFsbHkgYmUgaGFuZGxlZCBieSB0aGUgZWRpdGZsb3cvcm91dGluZyB3aXRob3V0IHRoZSBuZWVkIHRvIGhhdmUgdGhpcyBtZXRob2QgaW4gdGhlXG5cdC8vIG9iamVjdCBwYWdlIC0gZm9yIG5vdyBrZWVwIGl0IGhlcmVcblx0Y3JlYXRlRGVmZXJyZWRDb250ZXh0KFxuXHRcdHNQYXRoOiBzdHJpbmcsXG5cdFx0b0xpc3RCaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nIHwgdW5kZWZpbmVkLFxuXHRcdHBhcmVudENvbnRleHQ6IENvbnRleHQgfCB1bmRlZmluZWQsXG5cdFx0ZGF0YTogb2JqZWN0IHwgdW5kZWZpbmVkLFxuXHRcdGJBY3Rpb25DcmVhdGU6IGJvb2xlYW5cblx0KTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLkRlZmVycmVkQ29udGV4dENyZWF0ZWQpIHtcblx0XHRcdHRoaXMuRGVmZXJyZWRDb250ZXh0Q3JlYXRlZCA9IHRydWU7XG5cdFx0XHRjb25zdCBvUGFyYW1ldGVyczogeyAkJGdyb3VwSWQ6IHN0cmluZzsgJCR1cGRhdGVHcm91cElkOiBzdHJpbmc7ICRzZWxlY3Q/OiBzdHJpbmcgfSA9IHtcblx0XHRcdFx0JCRncm91cElkOiBcIiRhdXRvLkhlcm9lc1wiLFxuXHRcdFx0XHQkJHVwZGF0ZUdyb3VwSWQ6IFwiJGF1dG9cIlxuXHRcdFx0fTtcblx0XHRcdGNvbnN0IG1ldGFNb2RlbCA9IHRoaXMuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdGlmIChNb2RlbEhlbHBlci5pc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZChtZXRhTW9kZWwpKSB7XG5cdFx0XHRcdG9QYXJhbWV0ZXJzLiRzZWxlY3QgPSBcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0RyYWZ0QWRtaW5pc3RyYXRpdmVVc2VyXCI7XG5cdFx0XHR9XG5cblx0XHRcdGlmICghb0xpc3RCaW5kaW5nKSB7XG5cdFx0XHRcdG9MaXN0QmluZGluZyA9IHRoaXMuZ2V0TW9kZWwoKS5iaW5kTGlzdChzUGF0aC5yZXBsYWNlKFwiKC4uLilcIiwgXCJcIiksIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIG9QYXJhbWV0ZXJzKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IG9TdGFydFVwUGFyYW1zID1cblx0XHRcdFx0XHR0aGlzLm9BcHBDb21wb25lbnQgJiYgdGhpcy5vQXBwQ29tcG9uZW50LmdldENvbXBvbmVudERhdGEoKSAmJiB0aGlzLm9BcHBDb21wb25lbnQuZ2V0Q29tcG9uZW50RGF0YSgpLnN0YXJ0dXBQYXJhbWV0ZXJzLFxuXHRcdFx0XHRvSW5ib3VuZFBhcmFtZXRlcnMgPSB0aGlzLmdldFZpZXdEYXRhKCkuaW5ib3VuZFBhcmFtZXRlcnMgYXMgUmVjb3JkPHN0cmluZywgSW5ib3VuZFBhcmFtZXRlcj4gfCB1bmRlZmluZWQ7XG5cdFx0XHRsZXQgY3JlYXRlUGFyYW1zO1xuXHRcdFx0aWYgKG9TdGFydFVwUGFyYW1zICYmIG9TdGFydFVwUGFyYW1zLnByZWZlcnJlZE1vZGUgJiYgb1N0YXJ0VXBQYXJhbXMucHJlZmVycmVkTW9kZVswXS5pbmNsdWRlcyhcImNyZWF0ZVwiKSkge1xuXHRcdFx0XHRjcmVhdGVQYXJhbXMgPSBPYmplY3QuYXNzaWduKHt9LCBkYXRhLCBDb21tb25VdGlscy5nZXRBZGRpdGlvbmFsUGFyYW1zRm9yQ3JlYXRlKG9TdGFydFVwUGFyYW1zLCBvSW5ib3VuZFBhcmFtZXRlcnMpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNyZWF0ZVBhcmFtcyA9IGRhdGE7XG5cdFx0XHR9XG5cblx0XHRcdC8vIGZvciBub3cgd2FpdCB1bnRpbCB0aGUgdmlldyBhbmQgdGhlIGNvbnRyb2xsZXIgaXMgY3JlYXRlZFxuXHRcdFx0dGhpcy5nZXRSb290Q29udHJvbCgpXG5cdFx0XHRcdC5nZXRDb250cm9sbGVyKClcblx0XHRcdFx0LmVkaXRGbG93LmNyZWF0ZURvY3VtZW50KG9MaXN0QmluZGluZywge1xuXHRcdFx0XHRcdGNyZWF0aW9uTW9kZTogQ3JlYXRpb25Nb2RlLlN5bmMsXG5cdFx0XHRcdFx0Y3JlYXRlQWN0aW9uOiBiQWN0aW9uQ3JlYXRlLFxuXHRcdFx0XHRcdGRhdGE6IGNyZWF0ZVBhcmFtcyxcblx0XHRcdFx0XHRiRnJvbURlZmVycmVkOiB0cnVlLFxuXHRcdFx0XHRcdHNlbGVjdGVkQ29udGV4dHM6IHBhcmVudENvbnRleHQgPyBbcGFyZW50Q29udGV4dF0gOiB1bmRlZmluZWRcblx0XHRcdFx0fSlcblx0XHRcdFx0LmZpbmFsbHkoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuRGVmZXJyZWRDb250ZXh0Q3JlYXRlZCA9IGZhbHNlO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdC8vIERvIE5vdGhpbmcgP1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRzZXRWYXJpYW50TWFuYWdlbWVudChzVmFyaWFudE1hbmFnZW1lbnQ6IHN0cmluZyk6IHZvaWQge1xuXHRcdGlmIChzVmFyaWFudE1hbmFnZW1lbnQgPT09IFZhcmlhbnRNYW5hZ2VtZW50LlBhZ2UpIHtcblx0XHRcdExvZy5lcnJvcihcIk9iamVjdFBhZ2UgZG9lcyBub3Qgc3VwcG9ydCBQYWdlLWxldmVsIHZhcmlhbnQgbWFuYWdlbWVudCB5ZXRcIik7XG5cdFx0XHRzVmFyaWFudE1hbmFnZW1lbnQgPSBWYXJpYW50TWFuYWdlbWVudC5Ob25lO1xuXHRcdH1cblxuXHRcdHRoaXMuc2V0UHJvcGVydHkoXCJ2YXJpYW50TWFuYWdlbWVudFwiLCBzVmFyaWFudE1hbmFnZW1lbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBvcGVuSW5FZGl0TW9kZSBpcyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCBzZXR0aW5nc1xuXHQgKiBAcmV0dXJucyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBlZGl0IG1vZGUgaXMgc2V0IGZvciBhbiBvYmplY3QgcGFnZVxuXHQgKi9cblxuXHRpc09wZW5JbkVkaXRNb2RlKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IG9wZW5JbkVkaXRNb2RlID0gdGhpcy5nZXRWaWV3RGF0YSgpLm9wZW5JbkVkaXRNb2RlO1xuXHRcdHJldHVybiBvcGVuSW5FZGl0TW9kZSA9PT0gdHJ1ZTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBPYmplY3RQYWdlQ29tcG9uZW50O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0VBZUEsTUFBTUEsaUJBQWlCLEdBQUdDLFdBQVcsQ0FBQ0QsaUJBQWlCO0lBQ3RERSxZQUFZLEdBQUdELFdBQVcsQ0FBQ0MsWUFBWTtFQUN4QyxNQUFNQyxhQUFhLEdBQUdDLFdBQVcsQ0FBQ0MsVUFBVSxDQUFDRixhQUFhO0VBQUMsSUFFckRHLG1CQUFtQixJQUFBQyxJQUFBLEdBRHhCQyxjQUFjLENBQUMsdUNBQXVDLEVBQUU7SUFBRUMsT0FBTyxFQUFFLGtCQUFrQjtJQUFFQyxRQUFRLEVBQUU7RUFBTyxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQVF6R0MsUUFBUSxDQUFDO0lBQ1RDLElBQUksRUFBRSwrQkFBK0I7SUFDckNDLFlBQVksRUFBRWQsaUJBQWlCLENBQUNlO0VBQ2pDLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBUURKLFFBQVEsQ0FBQztJQUNUQyxJQUFJLEVBQUUsMkNBQTJDO0lBQ2pEQyxZQUFZLEVBQUVYLGFBQWEsQ0FBQ2M7RUFDN0IsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FNRE4sUUFBUSxDQUFDO0lBQ1RDLElBQUksRUFBRSxTQUFTO0lBQ2ZDLFlBQVksRUFBRTtFQUNmLENBQUMsQ0FBQyxFQUFBSyxLQUFBLEdBTURQLFFBQVEsQ0FBQztJQUNUQyxJQUFJLEVBQUU7RUFDUCxDQUFDLENBQUMsRUFBQU8sS0FBQSxHQUdEUixRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQVMsQ0FBQyxDQUFDLEVBQUFRLEtBQUEsR0FNNUJULFFBQVEsQ0FBQztJQUNUQyxJQUFJ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
230
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJWYXJpYW50TWFuYWdlbWVudCIsIkNvcmVMaWJyYXJ5IiwiQ3JlYXRpb25Nb2RlIiwiU2VjdGlvbkxheW91dCIsInRlbXBsYXRlTGliIiwiT2JqZWN0UGFnZSIsIk9iamVjdFBhZ2VDb21wb25lbnQiLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJsaWJyYXJ5IiwibWFuaWZlc3QiLCJfZGVjMiIsInByb3BlcnR5IiwidHlwZSIsImRlZmF1bHRWYWx1ZSIsIk5vbmUiLCJfZGVjMyIsIlBhZ2UiLCJfZGVjNCIsIl9kZWM1IiwiX2RlYzYiLCJfZGVjNyIsIl9kZWM4IiwiX2RlYzkiLCJfZGVjMTAiLCJfZGVjMTEiLCJfZGVjMTIiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX1RlbXBsYXRlQ29tcG9uZW50IiwiX3RoaXMiLCJfbGVuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiX2Rlc2NyaXB0b3I3IiwiX2Rlc2NyaXB0b3I4IiwiX2Rlc2NyaXB0b3I5IiwiX2Rlc2NyaXB0b3IxMCIsIl9kZXNjcmlwdG9yMTEiLCJEZWZlcnJlZENvbnRleHRDcmVhdGVkIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJpc0NvbnRleHRFeHBlY3RlZCIsImV4dGVuZFBhZ2VEZWZpbml0aW9uIiwicGFnZURlZmluaXRpb24iLCJjb252ZXJ0ZXJDb250ZXh0IiwiZXh0ZW5kT2JqZWN0UGFnZURlZmluaXRpb24iLCJjcmVhdGVEZWZlcnJlZENvbnRleHQiLCJzUGF0aCIsInBhcmFtZXRlcnMiLCJiQWN0aW9uQ3JlYXRlIiwibGlzdEJpbmRpbmciLCJvUGFyYW1ldGVycyIsIiQkZ3JvdXBJZCIsIiQkdXBkYXRlR3JvdXBJZCIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiTW9kZWxIZWxwZXIiLCJpc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZCIsIiRzZWxlY3QiLCJiaW5kTGlzdCIsInJlcGxhY2UiLCJ1bmRlZmluZWQiLCJvU3RhcnRVcFBhcmFtcyIsIm9BcHBDb21wb25lbnQiLCJnZXRDb21wb25lbnREYXRhIiwic3RhcnR1cFBhcmFtZXRlcnMiLCJkYXRhRm9yQ3JlYXRlIiwicHJlZmVycmVkTW9kZSIsImluY2x1ZGVzIiwib0luYm91bmRQYXJhbWV0ZXJzIiwiZ2V0Vmlld0RhdGEiLCJpbmJvdW5kUGFyYW1ldGVycyIsIk9iamVjdCIsImFzc2lnbiIsImRhdGEiLCJDb21tb25VdGlscyIsImdldEFkZGl0aW9uYWxQYXJhbXNGb3JDcmVhdGUiLCJnZXRSb290Q29udHJvbCIsImdldENvbnRyb2xsZXIiLCJlZGl0RmxvdyIsImNyZWF0ZURvY3VtZW50IiwiY3JlYXRpb25Nb2RlIiwiU3luYyIsImNyZWF0ZUFjdGlvbiIsImJGcm9tRGVmZXJyZWQiLCJzZWxlY3RlZENvbnRleHRzIiwicGFyZW50Q29udGV4dCIsInJlcXVlc3RBdExlYXN0IiwiZmluYWxseSIsImNhdGNoIiwic2V0VmFyaWFudE1hbmFnZW1lbnQiLCJzVmFyaWFudE1hbmFnZW1lbnQiLCJMb2ciLCJlcnJvciIsInNldFByb3BlcnR5IiwiaXNPcGVuSW5FZGl0TW9kZSIsIm9wZW5JbkVkaXRNb2RlIiwiVGVtcGxhdGVDb21wb25lbnQiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkNvbXBvbmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBwcm9wZXJ0eSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgSW5ib3VuZFBhcmFtZXRlciB9IGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IFRlbXBsYXRlQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9UZW1wbGF0ZUNvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IE9iamVjdFBhZ2VEZWZpbml0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvdGVtcGxhdGVzL09iamVjdFBhZ2VDb252ZXJ0ZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IENvcmVMaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSB7IEZpbmFsUGFnZURlZmluaXRpb24gfSBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL0V4dGVuZFBhZ2VEZWZpbml0aW9uXCI7XG5pbXBvcnQgeyBleHRlbmRPYmplY3RQYWdlRGVmaW5pdGlvbiB9IGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvRXh0ZW5kUGFnZURlZmluaXRpb25cIjtcbmltcG9ydCB0ZW1wbGF0ZUxpYiBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcblxuY29uc3QgVmFyaWFudE1hbmFnZW1lbnQgPSBDb3JlTGlicmFyeS5WYXJpYW50TWFuYWdlbWVudCxcblx0Q3JlYXRpb25Nb2RlID0gQ29yZUxpYnJhcnkuQ3JlYXRpb25Nb2RlO1xuY29uc3QgU2VjdGlvbkxheW91dCA9IHRlbXBsYXRlTGliLk9iamVjdFBhZ2UuU2VjdGlvbkxheW91dDtcbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5Db21wb25lbnRcIiwgeyBsaWJyYXJ5OiBcInNhcC5mZS50ZW1wbGF0ZXNcIiwgbWFuaWZlc3Q6IFwianNvblwiIH0pXG5jbGFzcyBPYmplY3RQYWdlQ29tcG9uZW50IGV4dGVuZHMgVGVtcGxhdGVDb21wb25lbnQge1xuXHQvKipcblx0ICogRGVmaW5lcyBpZiBhbmQgb24gd2hpY2ggbGV2ZWwgdmFyaWFudHMgY2FuIGJlIGNvbmZpZ3VyZWQ6XG5cdCAqIFx0XHROb25lOiBubyB2YXJpYW50IGNvbmZpZ3VyYXRpb24gYXQgYWxsXG5cdCAqIFx0XHRQYWdlOiBvbmUgdmFyaWFudCBjb25maWd1cmF0aW9uIGZvciB0aGUgd2hvbGUgcGFnZVxuXHQgKiBcdFx0Q29udHJvbDogdmFyaWFudCBjb25maWd1cmF0aW9uIG9uIGNvbnRyb2wgbGV2ZWxcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzYXAuZmUuY29yZS5WYXJpYW50TWFuYWdlbWVudFwiLFxuXHRcdGRlZmF1bHRWYWx1ZTogVmFyaWFudE1hbmFnZW1lbnQuTm9uZVxuXHR9KVxuXHR2YXJpYW50TWFuYWdlbWVudDogdHlwZW9mIFZhcmlhbnRNYW5hZ2VtZW50O1xuXG5cdC8qKlxuXHQgKiBEZWZpbmVzIGhvdyB0aGUgc2VjdGlvbnMgYXJlIHJlbmRlcmVkXG5cdCAqIFx0XHRQYWdlOiBhbGwgc2VjdGlvbnMgYXJlIHNob3duIG9uIG9uZSBwYWdlXG5cdCAqIFx0XHRUYWJzOiBlYWNoIHRvcC1sZXZlbCBzZWN0aW9uIGlzIHNob3duIGluIGFuIG93biB0YWJcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2UuU2VjdGlvbkxheW91dFwiLFxuXHRcdGRlZmF1bHRWYWx1ZTogU2VjdGlvbkxheW91dC5QYWdlXG5cdH0pXG5cdHNlY3Rpb25MYXlvdXQ6IHR5cGVvZiBTZWN0aW9uTGF5b3V0O1xuXG5cdC8qKlxuXHQgKiBFbmFibGVzIHRoZSByZWxhdGVkIGFwcHMgZmVhdHVyZXNcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJib29sZWFuXCIsXG5cdFx0ZGVmYXVsdFZhbHVlOiBmYWxzZVxuXHR9KVxuXHRzaG93UmVsYXRlZEFwcHMhOiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBFbmFibGVzIHRoZSAnTWljcm9zb2Z0IFRlYW1zID4gQXMgQ2FyZCcgb3B0aW9uIGluIHRoZSAnU2hhcmUnIG1lbnVcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJvYmplY3RcIlxuXHR9KVxuXHRzaGFyZSE6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+PjtcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcIm9iamVjdFwiIH0pXG5cdGFkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMhOiBvYmplY3Q7XG5cblx0LyoqXG5cdCAqIEVuYWJsZXMgdGhlIGVkaXRhYmxlIG9iamVjdCBwYWdlIGhlYWRlclxuXHQgKi9cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcImJvb2xlYW5cIixcblx0XHRkZWZhdWx0VmFsdWU6IHRydWVcblx0fSlcblx0ZWRpdGFibGVIZWFkZXJDb250ZW50ITogYm9vbGVhbjtcblxuXHQvKipcblx0ICogU2hvd3MgYSB0ZXh0IGluc3RlYWQgb2YgYW4gSWxsdXN0cmF0ZWRNZXNzYWdlIGluIHRoZSBub0RhdGEgYWdncmVnYXRpb24gb2YgVGFibGVzIG9yIENoYXJ0c1xuXHQgKi9cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcImJvb2xlYW5cIixcblx0XHRkZWZhdWx0VmFsdWU6IGZhbHNlXG5cdH0pXG5cdHVzZVRleHRGb3JOb0RhdGFNZXNzYWdlcyE6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIEVuYWJsZXMgdGhlIEJyZWFkQ3J1bWJzIGZlYXR1cmVzXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwiYm9vbGVhblwiLFxuXHRcdGRlZmF1bHRWYWx1ZTogdHJ1ZVxuXHR9KVxuXHRzaG93QnJlYWRDcnVtYnMhOiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBEZWZpbmVzIHRoZSBwcm9wZXJ0aWVzIHdoaWNoIGNhbiBiZSB1c2VkIGZvciBpbmJvdW5kIE5hdmlnYXRpb25cblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJvYmplY3RcIlxuXHR9KVxuXHRpbmJvdW5kUGFyYW1ldGVycyE6IG9iamVjdDtcblxuXHQvKipcblx0ICogRGVmaW5lcyBpZiBhbiBvYmplY3QgcGFnZSBzaG91bGQgYmUgb3BlbmVkIGluIGVkaXQgbW9kZVxuXHQgKi9cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcImJvb2xlYW5cIlxuXHR9KVxuXHRvcGVuSW5FZGl0TW9kZTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwiYm9vbGVhblwiLFxuXHRcdGRlZmF1bHRWYWx1ZTogZmFsc2Vcblx0fSlcblx0ZW5hYmxlTGF6eUxvYWRpbmchOiBib29sZWFuO1xuXG5cdHByaXZhdGUgRGVmZXJyZWRDb250ZXh0Q3JlYXRlZCA9IGZhbHNlO1xuXG5cdGlzQ29udGV4dEV4cGVjdGVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0ZXh0ZW5kUGFnZURlZmluaXRpb24ocGFnZURlZmluaXRpb246IE9iamVjdFBhZ2VEZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogRmluYWxQYWdlRGVmaW5pdGlvbiB7XG5cdFx0cmV0dXJuIGV4dGVuZE9iamVjdFBhZ2VEZWZpbml0aW9uKHBhZ2VEZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0fVxuXG5cdC8vIFRPRE86IHRoaXMgc2hvdWxkIGJlIGlkZWFsbHkgYmUgaGFuZGxlZCBieSB0aGUgZWRpdGZsb3cvcm91dGluZyB3aXRob3V0IHRoZSBuZWVkIHRvIGhhdmUgdGhpcyBtZXRob2QgaW4gdGhlXG5cdC8vIG9iamVjdCBwYWdlIC0gZm9yIG5vdyBrZWVwIGl0IGhlcmVcblx0Y3JlYXRlRGVmZXJyZWRDb250ZXh0KFxuXHRcdHNQYXRoOiBzdHJpbmcsXG5cdFx0cGFyYW1ldGVyczogeyBsaXN0QmluZGluZz86IE9EYXRhTGlzdEJpbmRpbmc7IHBhcmVudENvbnRleHQ/OiBDb250ZXh0OyBkYXRhPzogb2JqZWN0OyByZXF1ZXN0QXRMZWFzdD86IHN0cmluZ1tdIH0sXG5cdFx0YkFjdGlvbkNyZWF0ZTogYm9vbGVhblxuXHQpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMuRGVmZXJyZWRDb250ZXh0Q3JlYXRlZCkge1xuXHRcdFx0dGhpcy5EZWZlcnJlZENvbnRleHRDcmVhdGVkID0gdHJ1ZTtcblxuXHRcdFx0aWYgKCFwYXJhbWV0ZXJzLmxpc3RCaW5kaW5nKSB7XG5cdFx0XHRcdGNvbnN0IG9QYXJhbWV0ZXJzOiB7ICQkZ3JvdXBJZDogc3RyaW5nOyAkJHVwZGF0ZUdyb3VwSWQ6IHN0cmluZzsgJHNlbGVjdD86IHN0cmluZyB9ID0ge1xuXHRcdFx0XHRcdCQkZ3JvdXBJZDogXCIkYXV0by5IZXJvZXNcIixcblx0XHRcdFx0XHQkJHVwZGF0ZUdyb3VwSWQ6IFwiJGF1dG9cIlxuXHRcdFx0XHR9O1xuXHRcdFx0XHRjb25zdCBtZXRhTW9kZWwgPSB0aGlzLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRcdGlmIChNb2RlbEhlbHBlci5pc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZChtZXRhTW9kZWwpKSB7XG5cdFx0XHRcdFx0b1BhcmFtZXRlcnMuJHNlbGVjdCA9IFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvRHJhZnRBZG1pbmlzdHJhdGl2ZVVzZXJcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRwYXJhbWV0ZXJzLmxpc3RCaW5kaW5nID0gdGhpcy5nZXRNb2RlbCgpLmJpbmRMaXN0KHNQYXRoLnJlcGxhY2UoXCIoLi4uKVwiLCBcIlwiKSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgb1BhcmFtZXRlcnMpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBvU3RhcnRVcFBhcmFtcyA9IHRoaXMub0FwcENvbXBvbmVudD8uZ2V0Q29tcG9uZW50RGF0YSgpPy5zdGFydHVwUGFyYW1ldGVycztcblx0XHRcdGxldCBkYXRhRm9yQ3JlYXRlO1xuXHRcdFx0aWYgKG9TdGFydFVwUGFyYW1zPy5wcmVmZXJyZWRNb2RlPy5bMF0uaW5jbHVkZXMoXCJjcmVhdGVcIikgPT09IHRydWUpIHtcblx0XHRcdFx0Y29uc3Qgb0luYm91bmRQYXJhbWV0ZXJzID0gdGhpcy5nZXRWaWV3RGF0YSgpLmluYm91bmRQYXJhbWV0ZXJzIGFzIFJlY29yZDxzdHJpbmcsIEluYm91bmRQYXJhbWV0ZXI+IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRkYXRhRm9yQ3JlYXRlID0gT2JqZWN0LmFzc2lnbihcblx0XHRcdFx0XHR7fSxcblx0XHRcdFx0XHRwYXJhbWV0ZXJzLmRhdGEsXG5cdFx0XHRcdFx0Q29tbW9uVXRpbHMuZ2V0QWRkaXRpb25hbFBhcmFtc0ZvckNyZWF0ZShvU3RhcnRVcFBhcmFtcywgb0luYm91bmRQYXJhbWV0ZXJzKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGF0YUZvckNyZWF0ZSA9IHBhcmFtZXRlcnMuZGF0YTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gZm9yIG5vdyB3YWl0IHVudGlsIHRoZSB2aWV3IGFuZCB0aGUgY29udHJvbGxlciBpcyBjcmVhdGVkXG5cdFx0XHR0aGlzLmdldFJvb3RDb250cm9sKClcblx0XHRcdFx0LmdldENvbnRyb2xsZXIoKVxuXHRcdFx0XHQuZWRpdEZsb3cuY3JlYXRlRG9jdW1lbnQocGFyYW1ldGVycy5saXN0QmluZGluZywge1xuXHRcdFx0XHRcdGNyZWF0aW9uTW9kZTogQ3JlYXRpb25Nb2RlLlN5bmMsXG5cdFx0XHRcdFx0Y3JlYXRlQWN0aW9uOiBiQWN0aW9uQ3JlYXRlLFxuXHRcdFx0XHRcdGRhdGE6IGRhdGFGb3JDcmVhdGUsXG5cdFx0XHRcdFx0YkZyb21EZWZlcnJlZDogdHJ1ZSxcblx0XHRcdFx0XHRzZWxlY3RlZENvbnRleHRzOiBwYXJhbWV0ZXJzLnBhcmVudENvbnRleHQgPyBbcGFyYW1ldGVycy5wYXJlbnRDb250ZXh0XSA6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRyZXF1ZXN0QXRMZWFzdDogcGFyYW1ldGVycy5yZXF1ZXN0QXRMZWFzdFxuXHRcdFx0XHR9KVxuXHRcdFx0XHQuZmluYWxseSgoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5EZWZlcnJlZENvbnRleHRDcmVhdGVkID0gZmFsc2U7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0Ly8gRG8gTm90aGluZyA/XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdHNldFZhcmlhbnRNYW5hZ2VtZW50KHNWYXJpYW50TWFuYWdlbWVudDogc3RyaW5nKTogdm9pZCB7XG5cdFx0aWYgKHNWYXJpYW50TWFuYWdlbWVudCA9PT0gVmFyaWFudE1hbmFnZW1lbnQuUGFnZSkge1xuXHRcdFx0TG9nLmVycm9yKFwiT2JqZWN0UGFnZSBkb2VzIG5vdCBzdXBwb3J0IFBhZ2UtbGV2ZWwgdmFyaWFudCBtYW5hZ2VtZW50IHlldFwiKTtcblx0XHRcdHNWYXJpYW50TWFuYWdlbWVudCA9IFZhcmlhbnRNYW5hZ2VtZW50Lk5vbmU7XG5cdFx0fVxuXG5cdFx0dGhpcy5zZXRQcm9wZXJ0eShcInZhcmlhbnRNYW5hZ2VtZW50XCIsIHNWYXJpYW50TWFuYWdlbWVudCk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIG9wZW5JbkVkaXRNb2RlIGlzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0IHNldHRpbmdzXG5cdCAqIEByZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIGVkaXQgbW9kZSBpcyBzZXQgZm9yIGFuIG9iamVjdCBwYWdlXG5cdCAqL1xuXG5cdGlzT3BlbkluRWRpdE1vZGUoKTogYm9vbGVhbiB7XG5cdFx0Y29uc3Qgb3BlbkluRWRpdE1vZGUgPSB0aGlzLmdldFZpZXdEYXRhKCkub3BlbkluRWRpdE1vZGU7XG5cdFx0cmV0dXJuIG9wZW5JbkVkaXRNb2RlID09PSB0cnVlO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE9iamVjdFBhZ2VDb21wb25lbnQ7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7RUFlQSxNQUFNQSxpQkFBaUIsR0FBR0MsV0FBVyxDQUFDRCxpQkFBaUI7SUFDdERFLFlBQVksR0FBR0QsV0FBVyxDQUFDQyxZQUFZO0VBQ3hDLE1BQU1DLGFBQWEsR0FBR0MsV0FBVyxDQUFDQyxVQUFVLENBQUNGLGFBQWE7RUFBQyxJQUVyREcsbUJBQW1CLElBQUFDLElBQUEsR0FEeEJDLGNBQWMsQ0FBQyx1Q0FBdUMsRUFBRTtJQUFFQyxPQUFPLEVBQUUsa0JBQWtCO0lBQUVDLFFBQVEsRUFBRTtFQUFPLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBUXpHQyxRQUFRLENBQUM7SUFDVEMsSUFBSSxFQUFFLCtCQUErQjtJQUNyQ0MsWUFBWSxFQUFFZCxpQkFBaUIsQ0FBQ2U7RUFDakMsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FRREosUUFBUSxDQUFDO0lBQ1RDLElBQUksRUFBRSwyQ0FBMkM7SUFDakRDLFlBQVksRUFBRVgsYUFBYSxDQUFDYztFQUM3QixDQUFDLENBQUMsRUFBQUMsS0FBQSxHQU1ETixRQUFRLENBQUM7SUFDVEMsSUFBSSxFQUFFLFNBQVM7SUFDZkMsWUFBWSxFQUFFO0VBQ2YsQ0FBQyxDQUFDLEVBQUFLLEtBQUEsR0FNRFAsUUFBUSxDQUFDO0lBQ1RDLElB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
@@ -124,44 +124,47 @@ class ObjectPageComponent extends TemplateComponent {
124
124
  // object page - for now keep it here
125
125
  createDeferredContext(
126
126
  sPath: string,
127
- oListBinding: ODataListBinding | undefined,
128
- parentContext: Context | undefined,
129
- data: object | undefined,
127
+ parameters: { listBinding?: ODataListBinding; parentContext?: Context; data?: object; requestAtLeast?: string[] },
130
128
  bActionCreate: boolean
131
129
  ): void {
132
130
  if (!this.DeferredContextCreated) {
133
131
  this.DeferredContextCreated = true;
134
- const oParameters: { $$groupId: string; $$updateGroupId: string; $select?: string } = {
135
- $$groupId: "$auto.Heroes",
136
- $$updateGroupId: "$auto"
137
- };
138
- const metaModel = this.getModel().getMetaModel();
139
- if (ModelHelper.isCollaborationDraftSupported(metaModel)) {
140
- oParameters.$select = "DraftAdministrativeData/DraftAdministrativeUser";
141
- }
142
132
 
143
- if (!oListBinding) {
144
- oListBinding = this.getModel().bindList(sPath.replace("(...)", ""), undefined, undefined, undefined, oParameters);
133
+ if (!parameters.listBinding) {
134
+ const oParameters: { $$groupId: string; $$updateGroupId: string; $select?: string } = {
135
+ $$groupId: "$auto.Heroes",
136
+ $$updateGroupId: "$auto"
137
+ };
138
+ const metaModel = this.getModel().getMetaModel();
139
+ if (ModelHelper.isCollaborationDraftSupported(metaModel)) {
140
+ oParameters.$select = "DraftAdministrativeData/DraftAdministrativeUser";
141
+ }
142
+ parameters.listBinding = this.getModel().bindList(sPath.replace("(...)", ""), undefined, undefined, undefined, oParameters);
145
143
  }
146
- const oStartUpParams =
147
- this.oAppComponent && this.oAppComponent.getComponentData() && this.oAppComponent.getComponentData().startupParameters,
148
- oInboundParameters = this.getViewData().inboundParameters as Record<string, InboundParameter> | undefined;
149
- let createParams;
150
- if (oStartUpParams && oStartUpParams.preferredMode && oStartUpParams.preferredMode[0].includes("create")) {
151
- createParams = Object.assign({}, data, CommonUtils.getAdditionalParamsForCreate(oStartUpParams, oInboundParameters));
144
+
145
+ const oStartUpParams = this.oAppComponent?.getComponentData()?.startupParameters;
146
+ let dataForCreate;
147
+ if (oStartUpParams?.preferredMode?.[0].includes("create") === true) {
148
+ const oInboundParameters = this.getViewData().inboundParameters as Record<string, InboundParameter> | undefined;
149
+ dataForCreate = Object.assign(
150
+ {},
151
+ parameters.data,
152
+ CommonUtils.getAdditionalParamsForCreate(oStartUpParams, oInboundParameters)
153
+ );
152
154
  } else {
153
- createParams = data;
155
+ dataForCreate = parameters.data;
154
156
  }
155
157
 
156
158
  // for now wait until the view and the controller is created
157
159
  this.getRootControl()
158
160
  .getController()
159
- .editFlow.createDocument(oListBinding, {
161
+ .editFlow.createDocument(parameters.listBinding, {
160
162
  creationMode: CreationMode.Sync,
161
163
  createAction: bActionCreate,
162
- data: createParams,
164
+ data: dataForCreate,
163
165
  bFromDeferred: true,
164
- selectedContexts: parentContext ? [parentContext] : undefined
166
+ selectedContexts: parameters.parentContext ? [parameters.parentContext] : undefined,
167
+ requestAtLeast: parameters.requestAtLeast
165
168
  })
166
169
  .finally(() => {
167
170
  this.DeferredContextCreated = false;
@@ -31,6 +31,7 @@ sap.ui.define(["sap/fe/base/ClassSupport", "sap/m/HBox", "sap/ui/core/StashedCon
31
31
  /*
32
32
  * Title of the Header Facet. Not visible on the UI. Visible on the UI is the Title or Link control inside the items aggregation of the Header Facet.
33
33
  * Must always be in sync with the visible Title or Link control.
34
+ * This is used when renaming through the flexibility dialog.
34
35
  */
35
36
  _initializerDefineProperty(_this, "title", _descriptor, _this);
36
37
  /*
@@ -42,38 +43,18 @@ sap.ui.define(["sap/fe/base/ClassSupport", "sap/m/HBox", "sap/ui/core/StashedCon
42
43
  }
43
44
  _inheritsLoose(StashableHBox, _HBox);
44
45
  var _proto = StashableHBox.prototype;
45
- /*
46
- * Set title of visible Title/Link control and own title property.
47
- */
48
- _proto.setTitle = function setTitle(sTitle) {
49
- const oControl = this.getTitleControl();
50
- if (oControl) {
51
- oControl.setText(sTitle);
52
- }
53
- this.title = sTitle;
54
- return this;
55
- }
56
-
57
46
  /*
58
47
  * Return the title property.
59
- */;
48
+ */
60
49
  _proto.getTitle = function getTitle() {
61
- return this.title || this.fallbackTitle;
62
- }
63
-
64
- /*
65
- * In case of UI changes, Title/Link text needs to be set to new value after Header Facet control and inner controls are rendered.
66
- * Else: title property needs to be initialized.
67
- */;
68
- _proto.onAfterRendering = function onAfterRendering() {
50
+ return this.title ?? this.getTitleControl()?.getText() ?? this.fallbackTitle;
51
+ };
52
+ _proto.onBeforeRendering = function onBeforeRendering(oEvent) {
53
+ // In case we have a title coming from the RTA, we need to set it to the inner control before rendering
69
54
  if (this.title) {
70
- this.setTitle(this.title);
71
- } else {
72
- const oControl = this.getTitleControl();
73
- if (oControl) {
74
- this.title = oControl.getText();
75
- }
55
+ this.getTitleControl()?.setText(this.title);
76
56
  }
57
+ return _HBox.prototype.onBeforeRendering.call(this, oEvent);
77
58
  };
78
59
  _proto.getControlItems = function getControlItems(items) {
79
60
  let aItems = [],
@@ -84,7 +65,7 @@ sap.ui.define(["sap/fe/base/ClassSupport", "sap/m/HBox", "sap/ui/core/StashedCon
84
65
  aItems = items[i].getItems();
85
66
  } else if (items[i].getMicroChartTitle) {
86
67
  aItems = items[i].getMicroChartTitle();
87
- } else if (items[i].getContent().getMicroChartTitle) {
68
+ } else if (items[i].getContent?.()?.getMicroChartTitle) {
88
69
  aItems = items[i].getContent().getMicroChartTitle();
89
70
  }
90
71
  }
@@ -173,4 +154,4 @@ sap.ui.define(["sap/fe/base/ClassSupport", "sap/m/HBox", "sap/ui/core/StashedCon
173
154
  StashedControlSupport.mixInto(StashableHBox);
174
155
  return StashableHBox;
175
156
  }, false);
176
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdGFzaGFibGVIQm94IiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiZGVzaWdudGltZSIsIl9kZWMyIiwicHJvcGVydHkiLCJ0eXBlIiwiX2RlYzMiLCJfZGVjNCIsIl9jbGFzcyIsIl9jbGFzczIiLCJfSEJveCIsIl90aGlzIiwiX2xlbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9kZXNjcmlwdG9yMyIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic2V0VGl0bGUiLCJzVGl0bGUiLCJvQ29udHJvbCIsImdldFRpdGxlQ29udHJvbCIsInNldFRleHQiLCJ0aXRsZSIsImdldFRpdGxlIiwiZmFsbGJhY2tUaXRsZSIsIm9uQWZ0ZXJSZW5kZXJpbmciLCJnZXRUZXh0IiwiZ2V0Q29udHJvbEl0ZW1zIiwiaXRlbXMiLCJhSXRlbXMiLCJpIiwiZ2V0SXRlbXMiLCJnZXRNaWNyb0NoYXJ0VGl0bGUiLCJnZXRDb250ZW50IiwiY29udGVudCIsIml0ZW0iLCJpc0EiLCJzZXRfZGlzY29ubmVjdGVkIiwiZGlzY29ubmVjdGVkIiwiX2Rpc2Nvbm5lY3RlZCIsInNldEJpbmRpbmdDb250ZXh0IiwidW5kZWZpbmVkIiwiZ2V0Rm9ybUxhYmVscyIsInJldCIsImZvcm1WQm94IiwiZm9yRWFjaCIsImZvcm1FbGVtZW50SEJveCIsImxhYmVsQ3RybCIsInB1c2giLCJIQm94IiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIiwiU3Rhc2hlZENvbnRyb2xTdXBwb3J0IiwibWl4SW50byJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiU3Rhc2hhYmxlSEJveC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVuaGFuY2VXaXRoVUk1IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIHByb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgTWljcm9DaGFydCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9NaWNyb0NoYXJ0XCI7XG5pbXBvcnQgdHlwZSBUaXRsZUxpbmsgZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvVGl0bGVMaW5rXCI7XG5pbXBvcnQgdHlwZSBNaWNyb0NoYXJ0Q29udGFpbmVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL21pY3JvY2hhcnQvTWljcm9DaGFydENvbnRhaW5lclwiO1xuaW1wb3J0IEhCb3ggZnJvbSBcInNhcC9tL0hCb3hcIjtcbmltcG9ydCB0eXBlIExhYmVsIGZyb20gXCJzYXAvbS9MYWJlbFwiO1xuaW1wb3J0IHR5cGUgTGluayBmcm9tIFwic2FwL20vTGlua1wiO1xuaW1wb3J0IHR5cGUgVGl0bGUgZnJvbSBcInNhcC9tL1RpdGxlXCI7XG5pbXBvcnQgdHlwZSBWQm94IGZyb20gXCJzYXAvbS9WQm94XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgU3Rhc2hlZENvbnRyb2xTdXBwb3J0IGZyb20gXCJzYXAvdWkvY29yZS9TdGFzaGVkQ29udHJvbFN1cHBvcnRcIjtcbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5jb250cm9scy5TdGFzaGFibGVIQm94XCIsIHtcblx0ZGVzaWdudGltZTogXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvZGVzaWdudGltZS9TdGFzaGFibGVIQm94LmRlc2lnbnRpbWVcIlxufSlcbmNsYXNzIFN0YXNoYWJsZUhCb3ggZXh0ZW5kcyBIQm94IHtcblx0Lypcblx0ICogVGl0bGUgb2YgdGhlIEhlYWRlciBGYWNldC4gTm90IHZpc2libGUgb24gdGhlIFVJLiBWaXNpYmxlIG9uIHRoZSBVSSBpcyB0aGUgVGl0bGUgb3IgTGluayBjb250cm9sIGluc2lkZSB0aGUgaXRlbXMgYWdncmVnYXRpb24gb2YgdGhlIEhlYWRlciBGYWNldC5cblx0ICogTXVzdCBhbHdheXMgYmUgaW4gc3luYyB3aXRoIHRoZSB2aXNpYmxlIFRpdGxlIG9yIExpbmsgY29udHJvbC5cblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0dGl0bGUhOiBzdHJpbmc7XG5cblx0Lypcblx0ICogRmFsbGJhY2sgdGl0bGUgdG8gYmUgZGlzcGxheWVkIGlmIG5vIHRpdGxlIGlzIGF2YWlsYWJsZSAob25seSBuZWVkZWQgZm9yIGRpc3BsYXlpbmcgc3Rhc2hlZCBoZWFkZXIgZmFjZXRzIGluIEZsZXggZGlhbG9nKVxuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRmYWxsYmFja1RpdGxlITogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiIH0pXG5cdF9kaXNjb25uZWN0ZWQhOiBib29sZWFuO1xuXG5cdC8qXG5cdCAqIFNldCB0aXRsZSBvZiB2aXNpYmxlIFRpdGxlL0xpbmsgY29udHJvbCBhbmQgb3duIHRpdGxlIHByb3BlcnR5LlxuXHQgKi9cblx0c2V0VGl0bGUoc1RpdGxlOiBzdHJpbmcpOiB0aGlzIHtcblx0XHRjb25zdCBvQ29udHJvbCA9IHRoaXMuZ2V0VGl0bGVDb250cm9sKCk7XG5cdFx0aWYgKG9Db250cm9sKSB7XG5cdFx0XHRvQ29udHJvbC5zZXRUZXh0KHNUaXRsZSk7XG5cdFx0fVxuXHRcdHRoaXMudGl0bGUgPSBzVGl0bGU7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qXG5cdCAqIFJldHVybiB0aGUgdGl0bGUgcHJvcGVydHkuXG5cdCAqL1xuXHRnZXRUaXRsZSgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLnRpdGxlIHx8IHRoaXMuZmFsbGJhY2tUaXRsZTtcblx0fVxuXG5cdC8qXG5cdCAqIEluIGNhc2Ugb2YgVUkgY2hhbmdlcywgVGl0bGUvTGluayB0ZXh0IG5lZWRzIHRvIGJlIHNldCB0byBuZXcgdmFsdWUgYWZ0ZXIgSGVhZGVyIEZhY2V0IGNvbnRyb2wgYW5kIGlubmVyIGNvbnRyb2xzIGFyZSByZW5kZXJlZC5cblx0ICogRWxzZTogdGl0bGUgcHJvcGVydHkgbmVlZHMgdG8gYmUgaW5pdGlhbGl6ZWQuXG5cdCAqL1xuXHRvbkFmdGVyUmVuZGVyaW5nKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLnRpdGxlKSB7XG5cdFx0XHR0aGlzLnNldFRpdGxlKHRoaXMudGl0bGUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBvQ29udHJvbCA9IHRoaXMuZ2V0VGl0bGVDb250cm9sKCk7XG5cdFx0XHRpZiAob0NvbnRyb2wpIHtcblx0XHRcdFx0dGhpcy50aXRsZSA9IG9Db250cm9sLmdldFRleHQoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRnZXRDb250cm9sSXRlbXMoaXRlbXM6IENvbnRyb2xbXSk6IENvbnRyb2xbXSB7XG5cdFx0bGV0IGFJdGVtczogQ29udHJvbFtdID0gW10sXG5cdFx0XHRpO1xuXHRcdGlmIChpdGVtcykge1xuXHRcdFx0Zm9yIChpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmICgoaXRlbXNbaV0gYXMgSEJveCkuZ2V0SXRlbXMpIHtcblx0XHRcdFx0XHRhSXRlbXMgPSAoaXRlbXNbaV0gYXMgSEJveCkuZ2V0SXRlbXMoKTtcblx0XHRcdFx0fSBlbHNlIGlmICgoaXRlbXNbaV0gYXMgRW5oYW5jZVdpdGhVSTU8TWljcm9DaGFydENvbnRhaW5lcj4pLmdldE1pY3JvQ2hhcnRUaXRsZSkge1xuXHRcdFx0XHRcdGFJdGVtcyA9IChpdGVtc1tpXSBhcyBFbmhhbmNlV2l0aFVJNTxNaWNyb0NoYXJ0Q29udGFpbmVyPikuZ2V0TWljcm9DaGFydFRpdGxlKCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0KChpdGVtc1tpXSBhcyBFbmhhbmNlV2l0aFVJNTxNaWNyb0NoYXJ0PikuZ2V0Q29udGVudCgpIGFzIEVuaGFuY2VXaXRoVUk1PE1pY3JvQ2hhcnRDb250YWluZXI+KS5nZXRNaWNyb0NoYXJ0VGl0bGVcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0YUl0ZW1zID0gKFxuXHRcdFx0XHRcdFx0KGl0ZW1zW2ldIGFzIEVuaGFuY2VXaXRoVUk1PE1pY3JvQ2hhcnQ+KS5nZXRDb250ZW50KCkgYXMgRW5oYW5jZVdpdGhVSTU8TWljcm9DaGFydENvbnRhaW5lcj5cblx0XHRcdFx0XHQpLmdldE1pY3JvQ2hhcnRUaXRsZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBhSXRlbXM7XG5cdH1cblxuXHQvKlxuXHQgKiBSZXRyaWV2ZXMgVGl0bGUvTGluayBjb250cm9sIGZyb20gaXRlbXMgYWdncmVnYXRpb24uXG5cdCAqL1xuXHRnZXRUaXRsZUNvbnRyb2woKTogTGluayB8IG51bGwge1xuXHRcdGxldCBhSXRlbXM6IENvbnRyb2xbXSA9IFtdLFxuXHRcdFx0Y29udGVudCxcblx0XHRcdGk7XG5cdFx0Y29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG5cdFx0YUl0ZW1zID0gdGhpcy5nZXRDb250cm9sSXRlbXMoaXRlbXMpO1xuXHRcdGZvciAoaSA9IDA7IGkgPCBhSXRlbXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGl0ZW0gPSBhSXRlbXNbaV0uaXNBKFwic2FwLmZlLm1hY3Jvcy5pbnRlcm5hbC5UaXRsZUxpbmtcIikgPyAoYUl0ZW1zW2ldIGFzIFRpdGxlTGluaykuZ2V0Q29udGVudCgpIDogYUl0ZW1zW2ldO1xuXHRcdFx0aWYgKGl0ZW0pIHtcblx0XHRcdFx0aWYgKGl0ZW0uaXNBPFRpdGxlPihcInNhcC5tLlRpdGxlXCIpIHx8IGl0ZW0uaXNBPExpbms+KFwic2FwLm0uTGlua1wiKSkge1xuXHRcdFx0XHRcdGlmIChpdGVtLmlzQTxUaXRsZT4oXCJzYXAubS5UaXRsZVwiKSkge1xuXHRcdFx0XHRcdFx0Ly8gSWYgYSB0aXRsZSB3YXMgZm91bmQsIGNoZWNrIGlmIHRoZXJlIGlzIGEgbGluayBpbiB0aGUgY29udGVudCBhZ2dyZWdhdGlvblxuXHRcdFx0XHRcdFx0Y29udGVudCA9IGl0ZW0uZ2V0Q29udGVudCgpIGFzIHVua25vd24gYXMgQ29udHJvbCB8IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdGlmIChjb250ZW50ICYmIGNvbnRlbnQuaXNBPExpbms+KFwic2FwLm0uTGlua1wiKSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gY29udGVudDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIGl0ZW0gYXMgTGluaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdHNldF9kaXNjb25uZWN0ZWQoZGlzY29ubmVjdGVkOiBib29sZWFuKTogdGhpcyB7XG5cdFx0dGhpcy5fZGlzY29ubmVjdGVkID0gZGlzY29ubmVjdGVkO1xuXHRcdC8vIEJ5IHNldHRpbmcgdGhlIGJpbmRpbmcgY29udGV4dCB0byBgbnVsbGAgd2UgYXJlIHByZXZlbnRpbmcgZGF0YSBsb2FkaW5nXG5cdFx0Ly8gU2V0dGluZyBpdCBiYWNrIHRvIGB1bmRlZmluZWRgIGVuc3VyZXMgdGhhdCB0aGUgcGFyZW50IGNvbnRleHQgaXMgYXBwbGllZFxuXHRcdGlmIChkaXNjb25uZWN0ZWQpIHtcblx0XHRcdHRoaXMuc2V0QmluZGluZ0NvbnRleHQobnVsbCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0QmluZGluZ0NvbnRleHQodW5kZWZpbmVkKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKlxuXHQgKiBSZXRyaWV2ZXMgbGFiZWwgY29udHJvbHMgZnJvbSBpdGVtcyBhZ2dyZWdhdGlvbi5cblx0ICovXG5cdGdldEZvcm1MYWJlbHMoKTogTGFiZWxbXSB7XG5cdFx0Ly8gTk9URTogUHJlc2VudCBpbXBsZW1lbnRhdGlvbiBvbmx5IHN1cHBvcnRzIGZvciBkaXJlY3QgUmVmZXJlbmNlRmFjZXRzKFZCb3gpIGluIFVJLkZhY2V0cyBhcyBwZXIgdGhlIHJlcXVpcmVtZW50IGZvciBnZXR0aW5nIExhYmVscyBmcm9tIGZvcm1zLlxuXHRcdGNvbnN0IHJldDogTGFiZWxbXSA9IFtdLFxuXHRcdFx0Zm9ybVZCb3ggPSB0aGlzLmdldEl0ZW1zICYmIHRoaXMuZ2V0SXRlbXMoKVswXTtcblxuXHRcdC8vIFZCb3ggaXMgZXF1aXZhbGVudCBvZiBmb3JtXG5cdFx0aWYgKGZvcm1WQm94Py5pc0E8VkJveD4oXCJzYXAubS5WQm94XCIpKSB7XG5cdFx0XHRmb3JtVkJveC5nZXRJdGVtcygpLmZvckVhY2goKGZvcm1FbGVtZW50SEJveCkgPT4ge1xuXHRcdFx0XHQvLyBIQm94IGlzIGVxdWl2YWxlbnQgb2YgZm9ybSBlbGVtZW50XG5cdFx0XHRcdGlmIChmb3JtRWxlbWVudEhCb3guaXNBPEhCb3g+KFwic2FwLm0uSEJveFwiKSkge1xuXHRcdFx0XHRcdGNvbnN0IGxhYmVsQ3RybCA9IGZvcm1FbGVtZW50SEJveC5nZXRJdGVtcygpWzBdO1xuXHRcdFx0XHRcdGlmIChsYWJlbEN0cmw/LmlzQTxMYWJlbD4oXCJzYXAubS5MYWJlbFwiKSkge1xuXHRcdFx0XHRcdFx0Ly8gRmlyc3QgZWxlbWVudCBpcyBsYWJlbFxuXHRcdFx0XHRcdFx0cmV0LnB1c2gobGFiZWxDdHJsKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gcmV0O1xuXHR9XG59XG5TdGFzaGVkQ29udHJvbFN1cHBvcnQubWl4SW50byhTdGFzaGFibGVIQm94KTtcblxuZXhwb3J0IGRlZmF1bHQgU3Rhc2hhYmxlSEJveDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O01BZU1BLGFBQWEsSUFBQUMsSUFBQSxHQUhs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
157
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdGFzaGFibGVIQm94IiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiZGVzaWdudGltZSIsIl9kZWMyIiwicHJvcGVydHkiLCJ0eXBlIiwiX2RlYzMiLCJfZGVjNCIsIl9jbGFzcyIsIl9jbGFzczIiLCJfSEJveCIsIl90aGlzIiwiX2xlbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9kZXNjcmlwdG9yMyIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiZ2V0VGl0bGUiLCJ0aXRsZSIsImdldFRpdGxlQ29udHJvbCIsImdldFRleHQiLCJmYWxsYmFja1RpdGxlIiwib25CZWZvcmVSZW5kZXJpbmciLCJvRXZlbnQiLCJzZXRUZXh0IiwiZ2V0Q29udHJvbEl0ZW1zIiwiaXRlbXMiLCJhSXRlbXMiLCJpIiwiZ2V0SXRlbXMiLCJnZXRNaWNyb0NoYXJ0VGl0bGUiLCJnZXRDb250ZW50IiwiY29udGVudCIsIml0ZW0iLCJpc0EiLCJzZXRfZGlzY29ubmVjdGVkIiwiZGlzY29ubmVjdGVkIiwiX2Rpc2Nvbm5lY3RlZCIsInNldEJpbmRpbmdDb250ZXh0IiwidW5kZWZpbmVkIiwiZ2V0Rm9ybUxhYmVscyIsInJldCIsImZvcm1WQm94IiwiZm9yRWFjaCIsImZvcm1FbGVtZW50SEJveCIsImxhYmVsQ3RybCIsInB1c2giLCJIQm94IiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIiwiU3Rhc2hlZENvbnRyb2xTdXBwb3J0IiwibWl4SW50byJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiU3Rhc2hhYmxlSEJveC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVuaGFuY2VXaXRoVUk1IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIHByb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgTWljcm9DaGFydCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9NaWNyb0NoYXJ0XCI7XG5pbXBvcnQgdHlwZSBUaXRsZUxpbmsgZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvVGl0bGVMaW5rXCI7XG5pbXBvcnQgdHlwZSBNaWNyb0NoYXJ0Q29udGFpbmVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL21pY3JvY2hhcnQvTWljcm9DaGFydENvbnRhaW5lclwiO1xuaW1wb3J0IEhCb3ggZnJvbSBcInNhcC9tL0hCb3hcIjtcbmltcG9ydCB0eXBlIExhYmVsIGZyb20gXCJzYXAvbS9MYWJlbFwiO1xuaW1wb3J0IHR5cGUgTGluayBmcm9tIFwic2FwL20vTGlua1wiO1xuaW1wb3J0IHR5cGUgVGl0bGUgZnJvbSBcInNhcC9tL1RpdGxlXCI7XG5pbXBvcnQgdHlwZSBWQm94IGZyb20gXCJzYXAvbS9WQm94XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgU3Rhc2hlZENvbnRyb2xTdXBwb3J0IGZyb20gXCJzYXAvdWkvY29yZS9TdGFzaGVkQ29udHJvbFN1cHBvcnRcIjtcbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5jb250cm9scy5TdGFzaGFibGVIQm94XCIsIHtcblx0ZGVzaWdudGltZTogXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvZGVzaWdudGltZS9TdGFzaGFibGVIQm94LmRlc2lnbnRpbWVcIlxufSlcbmNsYXNzIFN0YXNoYWJsZUhCb3ggZXh0ZW5kcyBIQm94IHtcblx0Lypcblx0ICogVGl0bGUgb2YgdGhlIEhlYWRlciBGYWNldC4gTm90IHZpc2libGUgb24gdGhlIFVJLiBWaXNpYmxlIG9uIHRoZSBVSSBpcyB0aGUgVGl0bGUgb3IgTGluayBjb250cm9sIGluc2lkZSB0aGUgaXRlbXMgYWdncmVnYXRpb24gb2YgdGhlIEhlYWRlciBGYWNldC5cblx0ICogTXVzdCBhbHdheXMgYmUgaW4gc3luYyB3aXRoIHRoZSB2aXNpYmxlIFRpdGxlIG9yIExpbmsgY29udHJvbC5cblx0ICogVGhpcyBpcyB1c2VkIHdoZW4gcmVuYW1pbmcgdGhyb3VnaCB0aGUgZmxleGliaWxpdHkgZGlhbG9nLlxuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHR0aXRsZT86IHN0cmluZztcblxuXHQvKlxuXHQgKiBGYWxsYmFjayB0aXRsZSB0byBiZSBkaXNwbGF5ZWQgaWYgbm8gdGl0bGUgaXMgYXZhaWxhYmxlIChvbmx5IG5lZWRlZCBmb3IgZGlzcGxheWluZyBzdGFzaGVkIGhlYWRlciBmYWNldHMgaW4gRmxleCBkaWFsb2cpXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdGZhbGxiYWNrVGl0bGUhOiBzdHJpbmc7XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIgfSlcblx0X2Rpc2Nvbm5lY3RlZCE6IGJvb2xlYW47XG5cblx0Lypcblx0ICogUmV0dXJuIHRoZSB0aXRsZSBwcm9wZXJ0eS5cblx0ICovXG5cdGdldFRpdGxlKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMudGl0bGUgPz8gdGhpcy5nZXRUaXRsZUNvbnRyb2woKT8uZ2V0VGV4dCgpID8/IHRoaXMuZmFsbGJhY2tUaXRsZTtcblx0fVxuXG5cdG9uQmVmb3JlUmVuZGVyaW5nKG9FdmVudDogalF1ZXJ5LkV2ZW50KTogdm9pZCB8IHVuZGVmaW5lZCB7XG5cdFx0Ly8gSW4gY2FzZSB3ZSBoYXZlIGEgdGl0bGUgY29taW5nIGZyb20gdGhlIFJUQSwgd2UgbmVlZCB0byBzZXQgaXQgdG8gdGhlIGlubmVyIGNvbnRyb2wgYmVmb3JlIHJlbmRlcmluZ1xuXHRcdGlmICh0aGlzLnRpdGxlKSB7XG5cdFx0XHR0aGlzLmdldFRpdGxlQ29udHJvbCgpPy5zZXRUZXh0KHRoaXMudGl0bGUpO1xuXHRcdH1cblx0XHRyZXR1cm4gc3VwZXIub25CZWZvcmVSZW5kZXJpbmcob0V2ZW50KTtcblx0fVxuXG5cdGdldENvbnRyb2xJdGVtcyhpdGVtczogQ29udHJvbFtdKTogQ29udHJvbFtdIHtcblx0XHRsZXQgYUl0ZW1zOiBDb250cm9sW10gPSBbXSxcblx0XHRcdGk7XG5cdFx0aWYgKGl0ZW1zKSB7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKChpdGVtc1tpXSBhcyBIQm94KS5nZXRJdGVtcykge1xuXHRcdFx0XHRcdGFJdGVtcyA9IChpdGVtc1tpXSBhcyBIQm94KS5nZXRJdGVtcygpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKChpdGVtc1tpXSBhcyBFbmhhbmNlV2l0aFVJNTxNaWNyb0NoYXJ0Q29udGFpbmVyPikuZ2V0TWljcm9DaGFydFRpdGxlKSB7XG5cdFx0XHRcdFx0YUl0ZW1zID0gKGl0ZW1zW2ldIGFzIEVuaGFuY2VXaXRoVUk1PE1pY3JvQ2hhcnRDb250YWluZXI+KS5nZXRNaWNyb0NoYXJ0VGl0bGUoKTtcblx0XHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0XHQoKGl0ZW1zW2ldIGFzIEVuaGFuY2VXaXRoVUk1PE1pY3JvQ2hhcnQ+KS5nZXRDb250ZW50Py4oKSBhcyBFbmhhbmNlV2l0aFVJNTxNaWNyb0NoYXJ0Q29udGFpbmVyPik/LmdldE1pY3JvQ2hhcnRUaXRsZVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRhSXRlbXMgPSAoXG5cdFx0XHRcdFx0XHQoaXRlbXNbaV0gYXMgRW5oYW5jZVdpdGhVSTU8TWljcm9DaGFydD4pLmdldENvbnRlbnQoKSBhcyBFbmhhbmNlV2l0aFVJNTxNaWNyb0NoYXJ0Q29udGFpbmVyPlxuXHRcdFx0XHRcdCkuZ2V0TWljcm9DaGFydFRpdGxlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGFJdGVtcztcblx0fVxuXG5cdC8qXG5cdCAqIFJldHJpZXZlcyBUaXRsZS9MaW5rIGNvbnRyb2wgZnJvbSBpdGVtcyBhZ2dyZWdhdGlvbi5cblx0ICovXG5cdGdldFRpdGxlQ29udHJvbCgpOiBMaW5rIHwgbnVsbCB7XG5cdFx0bGV0IGFJdGVtczogQ29udHJvbFtdID0gW10sXG5cdFx0XHRjb250ZW50LFxuXHRcdFx0aTtcblx0XHRjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcblx0XHRhSXRlbXMgPSB0aGlzLmdldENvbnRyb2xJdGVtcyhpdGVtcyk7XG5cdFx0Zm9yIChpID0gMDsgaSA8IGFJdGVtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3QgaXRlbSA9IGFJdGVtc1tpXS5pc0EoXCJzYXAuZmUubWFjcm9zLmludGVybmFsLlRpdGxlTGlua1wiKSA/IChhSXRlbXNbaV0gYXMgVGl0bGVMaW5rKS5nZXRDb250ZW50KCkgOiBhSXRlbXNbaV07XG5cdFx0XHRpZiAoaXRlbSkge1xuXHRcdFx0XHRpZiAoaXRlbS5pc0E8VGl0bGU+KFwic2FwLm0uVGl0bGVcIikgfHwgaXRlbS5pc0E8TGluaz4oXCJzYXAubS5MaW5rXCIpKSB7XG5cdFx0XHRcdFx0aWYgKGl0ZW0uaXNBPFRpdGxlPihcInNhcC5tLlRpdGxlXCIpKSB7XG5cdFx0XHRcdFx0XHQvLyBJZiBhIHRpdGxlIHdhcyBmb3VuZCwgY2hlY2sgaWYgdGhlcmUgaXMgYSBsaW5rIGluIHRoZSBjb250ZW50IGFnZ3JlZ2F0aW9uXG5cdFx0XHRcdFx0XHRjb250ZW50ID0gaXRlbS5nZXRDb250ZW50KCkgYXMgdW5rbm93biBhcyBDb250cm9sIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0aWYgKGNvbnRlbnQgJiYgY29udGVudC5pc0E8TGluaz4oXCJzYXAubS5MaW5rXCIpKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBjb250ZW50O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gaXRlbSBhcyBMaW5rO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0c2V0X2Rpc2Nvbm5lY3RlZChkaXNjb25uZWN0ZWQ6IGJvb2xlYW4pOiB0aGlzIHtcblx0XHR0aGlzLl9kaXNjb25uZWN0ZWQgPSBkaXNjb25uZWN0ZWQ7XG5cdFx0Ly8gQnkgc2V0dGluZyB0aGUgYmluZGluZyBjb250ZXh0IHRvIGBudWxsYCB3ZSBhcmUgcHJldmVudGluZyBkYXRhIGxvYWRpbmdcblx0XHQvLyBTZXR0aW5nIGl0IGJhY2sgdG8gYHVuZGVmaW5lZGAgZW5zdXJlcyB0aGF0IHRoZSBwYXJlbnQgY29udGV4dCBpcyBhcHBsaWVkXG5cdFx0aWYgKGRpc2Nvbm5lY3RlZCkge1xuXHRcdFx0dGhpcy5zZXRCaW5kaW5nQ29udGV4dChudWxsKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXRCaW5kaW5nQ29udGV4dCh1bmRlZmluZWQpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qXG5cdCAqIFJldHJpZXZlcyBsYWJlbCBjb250cm9scyBmcm9tIGl0ZW1zIGFnZ3JlZ2F0aW9uLlxuXHQgKi9cblx0Z2V0Rm9ybUxhYmVscygpOiBMYWJlbFtdIHtcblx0XHQvLyBOT1RFOiBQcmVzZW50IGltcGxlbWVudGF0aW9uIG9ubHkgc3VwcG9ydHMgZm9yIGRpcmVjdCBSZWZlcmVuY2VGYWNldHMoVkJveCkgaW4gVUkuRmFjZXRzIGFzIHBlciB0aGUgcmVxdWlyZW1lbnQgZm9yIGdldHRpbmcgTGFiZWxzIGZyb20gZm9ybXMuXG5cdFx0Y29uc3QgcmV0OiBMYWJlbFtdID0gW10sXG5cdFx0XHRmb3JtVkJveCA9IHRoaXMuZ2V0SXRlbXMgJiYgdGhpcy5nZXRJdGVtcygpWzBdO1xuXG5cdFx0Ly8gVkJveCBpcyBlcXVpdmFsZW50IG9mIGZvcm1cblx0XHRpZiAoZm9ybVZCb3g/LmlzQTxWQm94PihcInNhcC5tLlZCb3hcIikpIHtcblx0XHRcdGZvcm1WQm94LmdldEl0ZW1zKCkuZm9yRWFjaCgoZm9ybUVsZW1lbnRIQm94KSA9PiB7XG5cdFx0XHRcdC8vIEhCb3ggaXMgZXF1aXZhbGVudCBvZiBmb3JtIGVsZW1lbnRcblx0XHRcdFx0aWYgKGZvcm1FbGVtZW50SEJveC5pc0E8SEJveD4oXCJzYXAubS5IQm94XCIpKSB7XG5cdFx0XHRcdFx0Y29uc3QgbGFiZWxDdHJsID0gZm9ybUVsZW1lbnRIQm94LmdldEl0ZW1zKClbMF07XG5cdFx0XHRcdFx0aWYgKGxhYmVsQ3RybD8uaXNBPExhYmVsPihcInNhcC5tLkxhYmVsXCIpKSB7XG5cdFx0XHRcdFx0XHQvLyBGaXJzdCBlbGVtZW50IGlzIGxhYmVsXG5cdFx0XHRcdFx0XHRyZXQucHVzaChsYWJlbEN0cmwpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXQ7XG5cdH1cbn1cblN0YXNoZWRDb250cm9sU3VwcG9ydC5taXhJbnRvKFN0YXNoYWJsZUhCb3gpO1xuXG5leHBvcnQgZGVmYXVsdCBTdGFzaGFibGVIQm94O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7TUFlTUEsYUFBYSxJQUFBQyxJQUFBLEdBSGxCQyxjQUFjLENBQUMsb0RBQW9ELEVBQUU7SUFDckVDLFVBQVUsRUFBRTtFQUNiLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBT0FDLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBUyxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQU01QkYsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUFTLENBQUMsQ0FBQyxFQUFBRSxLQUFBLEdBRzVCSCxRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQVUsQ0FBQyxDQUFDLEVBQUFMLElBQUEsQ0FBQVEsTUFBQSxJQUFBQyxPQUFBLDBCQUFBQyxLQUFBO0lBQUEsU0FBQVgsY0FBQTtNQUFBLElBQUFZLEtBQUE7TUFBQSxTQUFBQyxJQUFB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
@@ -17,9 +17,10 @@ class StashableHBox extends HBox {
17
17
  /*
18
18
  * Title of the Header Facet. Not visible on the UI. Visible on the UI is the Title or Link control inside the items aggregation of the Header Facet.
19
19
  * Must always be in sync with the visible Title or Link control.
20
+ * This is used when renaming through the flexibility dialog.
20
21
  */
21
22
  @property({ type: "string" })
22
- title!: string;
23
+ title?: string;
23
24
 
24
25
  /*
25
26
  * Fallback title to be displayed if no title is available (only needed for displaying stashed header facets in Flex dialog)
@@ -30,39 +31,19 @@ class StashableHBox extends HBox {
30
31
  @property({ type: "boolean" })
31
32
  _disconnected!: boolean;
32
33
 
33
- /*
34
- * Set title of visible Title/Link control and own title property.
35
- */
36
- setTitle(sTitle: string): this {
37
- const oControl = this.getTitleControl();
38
- if (oControl) {
39
- oControl.setText(sTitle);
40
- }
41
- this.title = sTitle;
42
-
43
- return this;
44
- }
45
-
46
34
  /*
47
35
  * Return the title property.
48
36
  */
49
37
  getTitle(): string {
50
- return this.title || this.fallbackTitle;
38
+ return this.title ?? this.getTitleControl()?.getText() ?? this.fallbackTitle;
51
39
  }
52
40
 
53
- /*
54
- * In case of UI changes, Title/Link text needs to be set to new value after Header Facet control and inner controls are rendered.
55
- * Else: title property needs to be initialized.
56
- */
57
- onAfterRendering(): void {
41
+ onBeforeRendering(oEvent: jQuery.Event): void | undefined {
42
+ // In case we have a title coming from the RTA, we need to set it to the inner control before rendering
58
43
  if (this.title) {
59
- this.setTitle(this.title);
60
- } else {
61
- const oControl = this.getTitleControl();
62
- if (oControl) {
63
- this.title = oControl.getText();
64
- }
44
+ this.getTitleControl()?.setText(this.title);
65
45
  }
46
+ return super.onBeforeRendering(oEvent);
66
47
  }
67
48
 
68
49
  getControlItems(items: Control[]): Control[] {
@@ -75,7 +56,7 @@ class StashableHBox extends HBox {
75
56
  } else if ((items[i] as EnhanceWithUI5<MicroChartContainer>).getMicroChartTitle) {
76
57
  aItems = (items[i] as EnhanceWithUI5<MicroChartContainer>).getMicroChartTitle();
77
58
  } else if (
78
- ((items[i] as EnhanceWithUI5<MicroChart>).getContent() as EnhanceWithUI5<MicroChartContainer>).getMicroChartTitle
59
+ ((items[i] as EnhanceWithUI5<MicroChart>).getContent?.() as EnhanceWithUI5<MicroChartContainer>)?.getMicroChartTitle
79
60
  ) {
80
61
  aItems = (
81
62
  (items[i] as EnhanceWithUI5<MicroChart>).getContent() as EnhanceWithUI5<MicroChartContainer>
@@ -4,7 +4,7 @@
4
4
  "id": "sap.fe.templates.ObjectPage",
5
5
  "type": "component",
6
6
  "applicationVersion": {
7
- "version": "1.136.10"
7
+ "version": "1.136.12"
8
8
  },
9
9
  "title": "Object Page",
10
10
  "tags": {
@@ -36,7 +36,7 @@ sap.ui.define(["sap/f/library", "sap/fe/core/library", "sap/fe/macros/library",
36
36
  controls: [],
37
37
  elements: [],
38
38
  // eslint-disable-next-line no-template-curly-in-string
39
- version: "1.136.10",
39
+ version: "1.136.12",
40
40
  noLibraryCSS: true
41
41
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
42
42
  });
@@ -84,7 +84,7 @@ T_STASHABLE_VBOX_RTA_HEADERCOLLECTIONFACET_MENU_ADD_PLURAL=Facettes en-t\u00EAte
84
84
 
85
85
  RTA_CONFIGURATION_TITLE_OP=Configurer une page d'objet
86
86
 
87
- RTA_CONFIGURATION_TITLE_LR=Configurer list report
87
+ RTA_CONFIGURATION_TITLE_LR=Configurer le rapport de liste
88
88
 
89
89
  RTA_CONFIGURATION_LR_VM_NAME=Gestion des variantes
90
90
 
@@ -98,7 +98,7 @@ RTA_CONFIGURATION_LR_VM_ENUM_PAGE=Page enti\u00E8re
98
98
 
99
99
  RTA_CONFIGURATION_LR_INITIALLOAD_NAME=Reprise des donn\u00E9es initiale
100
100
 
101
- RTA_CONFIGURATION_LR_INITIALLOAD_DESC=Indiquer si list report lance et charge les donn\u00E9es directement
101
+ RTA_CONFIGURATION_LR_INITIALLOAD_DESC=Indiquer si le rapport de liste lance et charge les donn\u00E9es directement
102
102
 
103
103
  RTA_CONFIGURATION_LR_INITIALLOAD_ENUM_AUTO=Automatiquement
104
104
 
@@ -271,7 +271,7 @@ NEXT_TAB_SHORTCUT_DESCRIPTION=Passer \u00E0 l'onglet suivant
271
271
 
272
272
  PREVIOUS_TAB_SHORTCUT_DESCRIPTION=Passer \u00E0 l'onglet pr\u00E9c\u00E9dent
273
273
 
274
- OPEN_MESSAGE_BUTTON_MENU_SHORTCUT_DESCRIPTION=Ouvrir les d\u00E9tails dans la zone de message
274
+ OPEN_MESSAGE_BUTTON_MENU_SHORTCUT_DESCRIPTION=Ouvrir les d\u00E9tails dans le champ de message
275
275
 
276
276
  PRIMARY_ACTION_SHORTCUT_DESCRIPTION=D\u00E9terminer l'action principale
277
277
 
@@ -249,7 +249,7 @@ HEADER_FORM_LABEL={0}\:
249
249
  T_TABLE_AND_CHART_NO_DATA_TITLE_TEXT=Mari lihat hasilnya
250
250
 
251
251
 
252
- FILTER_SEARCH_SHORTCUT_DESCRIPTION=Lanjutkan
252
+ FILTER_SEARCH_SHORTCUT_DESCRIPTION=Cari
253
253
 
254
254
  CUT_SHORTCUT_DESCRIPTION=Potong
255
255
 
@@ -98,7 +98,7 @@ RTA_CONFIGURATION_LR_VM_ENUM_PAGE=Pagina intera
98
98
 
99
99
  RTA_CONFIGURATION_LR_INITIALLOAD_NAME=Caricamento iniziale
100
100
 
101
- RTA_CONFIGURATION_LR_INITIALLOAD_DESC=Specificare se il report elenco inizia e carica i dati immediatamente
101
+ RTA_CONFIGURATION_LR_INITIALLOAD_DESC=Specificare se il report lista si avvia e carica i dati immediatamente
102
102
 
103
103
  RTA_CONFIGURATION_LR_INITIALLOAD_ENUM_AUTO=Automatico
104
104
 
@@ -16,7 +16,7 @@ C_EDITFLOW_OBJECT_PAGE_SESSION_EXPIRED_DIALOG_MESSAGE=Va\u0161a seja urejanja je
16
16
 
17
17
  T_OP_RELATED_APPS=Povezane apl.
18
18
 
19
- T_COMMON_OBJECT_PAGE_APPLY_DRAFT=Uporaba
19
+ T_COMMON_OBJECT_PAGE_APPLY_DRAFT=Uporabi
20
20
 
21
21
  T_COMMON_OBJECT_PAGE_VALIDATE_DRAFT=Validacija
22
22
 
package/ui5.yaml CHANGED
@@ -28,7 +28,12 @@ builder:
28
28
  filters:
29
29
  - sap/fe/base/**/*
30
30
  - sap/fe/core/**/*
31
+ - sap/fe/core/manifest.json
31
32
  - sap/fe/templates/**/*
33
+ - sap/fe/templates/manifest.json
34
+ - sap/fe/templates/ListReport/manifest.json
35
+ - sap/fe/templates/ObjectPage/manifest.json
36
+ - sap/fe/templates/AnalyticalListPage/manifest.json
32
37
  - sap/fe/navigation/**/*
33
38
  - sap/fe/macros/**/*
34
39
  - sap/fe/controls/**/*