@sapui5/sap.fe.macros 1.142.0 → 1.143.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/CollaborativeDraftHandler.js +1 -7
  4. package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +0 -6
  5. package/src/sap/fe/macros/ConditionalSwitch.js +1 -2
  6. package/src/sap/fe/macros/ConditionalSwitch.tsx +0 -1
  7. package/src/sap/fe/macros/ConditionalSwitchProperty.js +1 -3
  8. package/src/sap/fe/macros/ConditionalSwitchProperty.tsx +0 -2
  9. package/src/sap/fe/macros/Field.js +5 -5
  10. package/src/sap/fe/macros/Field.ts +5 -3
  11. package/src/sap/fe/macros/FooterContent.js +3 -2
  12. package/src/sap/fe/macros/FooterContent.tsx +2 -10
  13. package/src/sap/fe/macros/KPITag.js +6 -6
  14. package/src/sap/fe/macros/KPITag.tsx +5 -5
  15. package/src/sap/fe/macros/MacroAPI.js +2 -2
  16. package/src/sap/fe/macros/MacroAPI.ts +1 -1
  17. package/src/sap/fe/macros/MessageButton.js +3 -3
  18. package/src/sap/fe/macros/MessageButton.tsx +3 -2
  19. package/src/sap/fe/macros/MicroChart.js +3 -2
  20. package/src/sap/fe/macros/MicroChart.tsx +1 -1
  21. package/src/sap/fe/macros/Share.js +7 -7
  22. package/src/sap/fe/macros/Share.tsx +9 -6
  23. package/src/sap/fe/macros/Status.js +6 -5
  24. package/src/sap/fe/macros/Status.tsx +3 -4
  25. package/src/sap/fe/macros/ai/EasyFillDialog.js +2 -1
  26. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +1 -0
  27. package/src/sap/fe/macros/ai/SummarizationButton.js +6 -4
  28. package/src/sap/fe/macros/ai/SummarizationButton.tsx +5 -3
  29. package/src/sap/fe/macros/chart/ChartDelegate.js +22 -1
  30. package/src/sap/fe/macros/chart/ChartDelegate.ts +29 -2
  31. package/src/sap/fe/macros/chart/MdcChartTemplate.js +5 -2
  32. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +5 -2
  33. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +7 -7
  34. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +3 -2
  35. package/src/sap/fe/macros/controls/FileWrapper.js +11 -5
  36. package/src/sap/fe/macros/controls/FileWrapper.ts +10 -4
  37. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +3 -1
  38. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -0
  39. package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
  40. package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
  41. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +4 -4
  42. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +3 -3
  43. package/src/sap/fe/macros/field/FieldFormatOptions.js +2 -2
  44. package/src/sap/fe/macros/field/FieldFormatOptions.ts +1 -1
  45. package/src/sap/fe/macros/field/FieldRuntime.js +7 -2
  46. package/src/sap/fe/macros/field/FieldRuntime.ts +7 -1
  47. package/src/sap/fe/macros/filter/FilterUtils.js +31 -5
  48. package/src/sap/fe/macros/filter/FilterUtils.ts +40 -6
  49. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +6 -3
  50. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +5 -1
  51. package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +19 -9
  52. package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +76 -61
  53. package/src/sap/fe/macros/filterBar/UOMValidationDelegate.js +376 -0
  54. package/src/sap/fe/macros/filterBar/UOMValidationDelegate.ts +463 -0
  55. package/src/sap/fe/macros/form/FormContainer.block.js +22 -6
  56. package/src/sap/fe/macros/form/FormContainer.block.ts +24 -6
  57. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +2 -2
  58. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +2 -1
  59. package/src/sap/fe/macros/library.js +5 -6
  60. package/src/sap/fe/macros/{library.ts → library.tsx} +1 -1
  61. package/src/sap/fe/macros/messagebundle.properties +6 -0
  62. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +1 -1
  63. package/src/sap/fe/macros/messages/MessageButton.js +21 -12
  64. package/src/sap/fe/macros/messages/MessageButton.ts +21 -11
  65. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.js +7 -3
  66. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.ts +8 -2
  67. package/src/sap/fe/macros/quickView/QuickView.js +5 -4
  68. package/src/sap/fe/macros/quickView/QuickView.tsx +10 -3
  69. package/src/sap/fe/macros/table/Action.js +7 -4
  70. package/src/sap/fe/macros/table/Action.ts +3 -3
  71. package/src/sap/fe/macros/table/Column.js +3 -2
  72. package/src/sap/fe/macros/table/Column.ts +1 -1
  73. package/src/sap/fe/macros/table/MdcTableTemplate.js +6 -9
  74. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +5 -7
  75. package/src/sap/fe/macros/table/Table.block.js +6 -3
  76. package/src/sap/fe/macros/table/Table.block.tsx +13 -3
  77. package/src/sap/fe/macros/table/TableAPI.js +13 -8
  78. package/src/sap/fe/macros/table/TableAPI.ts +10 -3
  79. package/src/sap/fe/macros/table/TableDefinition.js +2 -2
  80. package/src/sap/fe/macros/table/TableDefinition.ts +1 -1
  81. package/src/sap/fe/macros/table/TableEventHandlerProvider.js +3 -1
  82. package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +4 -0
  83. package/src/sap/fe/macros/table/TableRuntime.js +24 -12
  84. package/src/sap/fe/macros/table/TableRuntime.ts +27 -11
  85. package/src/sap/fe/macros/table/Utils.js +9 -3
  86. package/src/sap/fe/macros/table/Utils.ts +14 -8
  87. package/src/sap/fe/macros/table/delegates/TableDelegate.js +6 -4
  88. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +6 -5
  89. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +41 -15
  90. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +41 -22
  91. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +14 -5
  92. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +13 -4
  93. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -3
  94. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +3 -2
  95. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +37 -10
  96. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +39 -15
  97. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +3 -4
  98. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +2 -3
  99. package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.js +5 -4
  100. package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.ts +6 -3
  101. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +17 -10
  102. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +24 -9
@@ -28,7 +28,7 @@ export default class EmptyRowsHandler implements IInterfaceWithMixin {
28
28
  /**
29
29
  * Promise that resolves to the table's default values.
30
30
  */
31
- public tableDefaultsPromise?: Promise<object>;
31
+ public tableDefaultsPromise?: Promise<object | undefined>;
32
32
 
33
33
  setupMixin(_baseClass: Function): void {
34
34
  // This method is needed to implement interface IInterfaceWithMixin
@@ -121,6 +121,10 @@ export default class EmptyRowsHandler implements IInterfaceWithMixin {
121
121
  * @param enablement
122
122
  */
123
123
  setEmptyRowsEnabled(this: ITableBlock & EmptyRowsHandler, enablement: boolean): void {
124
+ // INIT: ensure tableDefaultsPromise exists when enabling empty rows
125
+ if (enablement && !this.tableDefaultsPromise) {
126
+ this.tableDefaultsPromise = this.getTableDefaults(this.getContent());
127
+ }
124
128
  this.setProperty("emptyRowsEnabled", enablement);
125
129
  const navigationPath = this.getContent().data().navigationPath,
126
130
  appComponent = CommonUtils.getAppComponent(this.getContent());
@@ -129,15 +133,19 @@ export default class EmptyRowsHandler implements IInterfaceWithMixin {
129
133
  const defaultValuesFunction = listBinding?.getResolvedPath() ? this.getDefaultValuesFunction(listBinding) : undefined;
130
134
  if (defaultValuesFunction) {
131
135
  appComponent.getSideEffectsService().registerTargetCallback(navigationPath, this.updateEmptyRows.bind(this));
136
+ // Immediate initial setup without defaults
137
+ if (!this.tableDefaultsPromise) {
138
+ this.setUpEmptyRows(this.getContent());
139
+ }
132
140
  }
133
141
  } else {
134
142
  appComponent.getSideEffectsService().deregisterTargetCallback(navigationPath);
135
143
  }
136
-
144
+ // Immediate initial setup only if no defaults promise exists (to avoid duplicate empty rows)
137
145
  if (this.tableDefaultsPromise) {
138
146
  this.tableDefaultsPromise
139
147
  .then((tableDefaultData) => {
140
- this.setUpEmptyRows(this.getContent(), false, tableDefaultData);
148
+ this.updateEmptyRows();
141
149
  return tableDefaultData;
142
150
  })
143
151
  .catch((error) => {
@@ -156,12 +164,25 @@ export default class EmptyRowsHandler implements IInterfaceWithMixin {
156
164
  const table = this.getContent();
157
165
  const binding = table.getRowBinding();
158
166
  const bindingHeaderContext = binding.getHeaderContext();
159
- if (binding && binding.isResolved() && binding.isLengthFinal() && bindingHeaderContext) {
160
- const contextPath = bindingHeaderContext.getPath();
167
+
168
+ if (!(binding && binding.isResolved() && binding.isLengthFinal() && bindingHeaderContext)) {
169
+ return;
170
+ }
171
+
172
+ const contextPath = bindingHeaderContext.getPath();
173
+
174
+ // DO NOT show empty rows in display mode.
175
+ // If any inactive rows are present (from a previous state), remove them and exit.
176
+ if (!CommonUtils.getIsEditable(table)) {
177
+ this.removeEmptyRowsMessages();
161
178
  this._deleteEmptyRows(binding, contextPath);
162
- await this.createEmptyRows(binding, table);
179
+ return;
163
180
  }
164
- return;
181
+
182
+ this._deleteEmptyRows(binding, contextPath);
183
+ const defaults = await this.getTableDefaults(table);
184
+ // Update the empty rows with the latest default values
185
+ await this.createEmptyRows(binding, table, false, undefined, false, defaults);
165
186
  }
166
187
 
167
188
  /**
@@ -372,7 +393,9 @@ export default class EmptyRowsHandler implements IInterfaceWithMixin {
372
393
  defaultValueFunctionData?: object | undefined
373
394
  ): Promise<void | Context[]> {
374
395
  const inlineCreationRowCount = newInlineCreationRowFromPaste ?? (this.getTableDefinition().control?.inlineCreationRowCount || 1);
375
- if (this.creatingEmptyRows || this.getInactiveContextNumber(binding) > inlineCreationRowCount) {
396
+ /* ensures that at most one additional empty row can exist during LiveChange (when `recreateOneRow` is true).
397
+ In all other cases, the number of inactive contexts cannot exceed `inlineCreationRowCount`.*/
398
+ if (this.creatingEmptyRows || this.getInactiveContextNumber(binding) >= inlineCreationRowCount + (recreateOneRow ? 1 : 0)) {
376
399
  return;
377
400
  }
378
401
  const data = Array.from({ length: inlineCreationRowCount }, () => ({})),
@@ -389,13 +412,14 @@ export default class EmptyRowsHandler implements IInterfaceWithMixin {
389
412
  binding,
390
413
  // during a live change, only 1 new document is created
391
414
  dataForCreate,
392
- // When editing an empty row, the new empty row is to be created just below and not above
393
- recreateOneRow || forceCreateatEnd ? true : atEnd,
394
- false,
395
- controller.editFlow.onBeforeCreate,
396
- inactive,
397
- undefined,
398
- defaultValueFunctionData
415
+ {
416
+ createAtEnd: recreateOneRow || forceCreateatEnd ? true : atEnd, // When editing an empty row, the new empty row is to be created just below and not above
417
+
418
+ beforeCreateCallBack: controller.editFlow.onBeforeCreate,
419
+ createAsInactive: inactive,
420
+ hideBusyIndicator: inactive,
421
+ defaultValueFunctionData
422
+ }
399
423
  );
400
424
  contexts?.forEach(async function (context: Context) {
401
425
  try {
@@ -123,10 +123,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
123
123
  */;
124
124
  _proto._onDragStartDocument = function _onDragStartDocument(ui5Event) {
125
125
  const context = ui5Event.getParameter("bindingContext");
126
- const updatablePropertyPath = this.getTableDefinition().annotation.updatablePropertyPath;
127
126
 
128
127
  // Check if the context can be updated according to update restrictions
129
- let disableDrag = !!updatablePropertyPath && !context.getProperty(updatablePropertyPath);
128
+ let disableDrag = !TableRuntime.isUpdatableContext(this.getTableDefinition().annotation.updatablePropertyPathInfo, context, false);
130
129
 
131
130
  // In case of a TreeTable in a ListReport with draft, check that the context has no associated draft
132
131
  if (!disableDrag && !context.getBinding().isRelative()) {
@@ -191,7 +190,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
191
190
  await Promise.all([this.dropContext(movedContext, dropInfo), this.requestSideEffectsForChangeNextSiblingAction(movedContext)]);
192
191
  } catch (error) {
193
192
  MessageToast.show(this.getTranslatedText("M_TABLEDROP_FAILED", [""]));
194
- Log.error("The operation is unsuccessful. " + error.message ?? "");
193
+ Log.error("The operation is unsuccessful. " + (error.message ?? ""));
195
194
  } finally {
196
195
  BusyLocker.unlock(this.getContent());
197
196
  }
@@ -498,4 +497,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
498
497
  _exports = TableHierarchy;
499
498
  return _exports;
500
499
  }, false);
501
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEcm9wUG9zaXRpb24iLCJUYWJsZUhpZXJhcmNoeSIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic2V0dXBNaXhpbiIsIl9iYXNlQ2xhc3MiLCJfb25Db3B5Q3V0IiwiZXZ0IiwiZm9yQ29udGV4dE1lbnUiLCJhY3Rpb24iLCJ0YWJsZSIsImdldFNvdXJjZSIsImdldFBhcmVudCIsIm1lbnUiLCJpbnRlcm5hbENvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInNlbGVjdGVkQ29udGV4dHMiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwibGVuZ3RoIiwiTG9nIiwiZXJyb3IiLCJzZXRQcm9wZXJ0eSIsIk1lc3NhZ2VUb2FzdCIsInNob3ciLCJSZXNvdXJjZU1vZGVsSGVscGVyIiwiZ2V0UmVzb3VyY2VNb2RlbCIsImdldFRleHQiLCJnZXRQcm9wZXJ0eSIsIlRhYmxlUnVudGltZSIsImNsZWFyU2VsZWN0aW9uIiwiZmlyZVNlbGVjdGlvbkNoYW5nZSIsInBhc3RlQnV0dG9uIiwiZ2V0QWN0aW9ucyIsImZpbmQiLCJ0b29sYmFyQWN0aW9uIiwidGVzdCIsImdldEFjdGlvbiIsImdldElkIiwic2V0VGltZW91dCIsImZvY3VzIiwiX29uRHJhZ0VudGVyRG9jdW1lbnQiLCJ1aTVFdmVudCIsImRyYWdnZWRDb250ZXh0IiwiZ2V0UGFyYW1ldGVyIiwiZ2V0Q29udGVudCIsImdldFJvd0JpbmRpbmciLCJnZXRCaW5kaW5nIiwicHJldmVudERlZmF1bHQiLCJ0YXJnZXRDb250ZXh0IiwiaXNBbmNlc3Rvck9mIiwiZGlzYWJsZWRCZXR3ZWVuIiwiZGlzYWJsZWRPbiIsInRhYmxlRGVmaW5pdGlvbiIsImdldFRhYmxlRGVmaW5pdGlvbiIsImlzTW92ZUFsbG93ZWRJbmZvIiwiY29udHJvbCIsImlzTW92ZVRvUG9zaXRpb25BbGxvd2VkIiwiY3VzdG9tRnVuY3Rpb24iLCJGUE1IZWxwZXIiLCJnZXRDdXN0b21GdW5jdGlvbiIsIm1vZHVsZU5hbWUiLCJtZXRob2ROYW1lIiwidW5kZWZpbmVkIiwic2FmZUlzTW92ZUFsbG93ZWQiLCJhbm5vdGF0aW9uIiwiYWxsb3dEcm9wQmV0d2Vlbk5vZGVzIiwiTWF0aCIsImFicyIsImdldEluZGV4IiwiZ2V0TGVuZ3RoIiwiY2hhbmdlU2libGluZ0ZvclJvb3RzU3VwcG9ydGVkIiwiaXNEcm9wQmV0d2VlbkFsbG93ZWRGb3JEcmFnIiwiYWxsb3dlZERyb3BQb3NpdGlvbiIsIk9uT3JCZXR3ZWVuIiwiT24iLCJCZXR3ZWVuIiwic2V0RHJvcFBvc2l0aW9uIiwiX29uRHJhZ1N0YXJ0RG9jdW1lbnQiLCJjb250ZXh0IiwidXBkYXRhYmxlUHJvcGVydHlQYXRoIiwiZGlzYWJsZURyYWciLCJpc1JlbGF0aXZlIiwiaXNNb3ZhYmxlSW5mbyIsImlzTm9kZU1vdmFibGUiLCJfZXJyb3IiLCJfb25Ecm9wRG9jdW1lbnQiLCJCdXN5TG9ja2VyIiwibG9jayIsImRyb3BwZWRPbkNvbnRleHQiLCJkcm9wSW5mbyIsInBvc2l0aW9uIiwicGFyZW50Q29udGV4dCIsImNvbnRleHRCZWZvcmUiLCJjb250ZXh0QWZ0ZXIiLCJnZXRDb250ZXh0QWZ0ZXIiLCJnZXRDb250ZXh0QmVmb3JlIiwibW92ZWRDb250ZXh0IiwiUHJvbWlzZSIsImFsbCIsImRyb3BDb250ZXh0IiwicmVxdWVzdFNpZGVFZmZlY3RzRm9yQ2hhbmdlTmV4dFNpYmxpbmdBY3Rpb24iLCJnZXRUcmFuc2xhdGVkVGV4dCIsIm1lc3NhZ2UiLCJ1bmxvY2siLCJfb25Db2xsYXBzZUV4cGFuZE5vZGUiLCJfdWk1RXZlbnQiLCJleHBhbmQiLCJwcm9taXNlQXJyYXkiLCJtYXAiLCJzaW5nbGVDb250ZXh0IiwiaXNFeHBhbmRlZCIsImNvbGxhcHNlIiwiTnVtYmVyIiwiTUFYX1NBRkVfSU5URUdFUiIsIl9vbk1vdmVVcERvd24iLCJtb3ZlVXAiLCJhcmd1bWVudHMiLCJtZGNUYWJsZSIsInNldEJ1c3kiLCJyZXF1ZXN0UGFyZW50IiwiY29udGV4dE1vdmVkIiwibW92ZVByb21pc2UiLCJwcmV2aW91c1NpYmxpbmciLCJyZXF1ZXN0U2libGluZyIsIm1vdmUiLCJuZXh0U2libGluZyIsInBhcmVudCIsIm5ld0luZGV4Iiwic2Nyb2xsVG9JbmRleCIsImZvY3VzUm93IiwiX3JlcXVlc3RTaWRlRWZmZWN0c0ZvckhpZXJhcmNoeUFjdGlvbnMiLCJyZXF1ZXN0U2lkZUVmZmVjdHNGb3JDb3B5QWN0aW9uIiwiZW50aXR5UGF0aCIsImRhdGEiLCJtZXRhTW9kZWwiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsInRhcmdldE9iamVjdCIsImdldENvbnRleHQiLCJjb252ZXJ0TWV0YU1vZGVsQ29udGV4dCIsIk1ldGFNb2RlbENvbnZlcnRlciIsImVudGl0eVR5cGUiLCJ0YXJnZXRUeXBlIiwiYWN0aW9uTmFtZSIsImFubm90YXRpb25zIiwiSGllcmFyY2h5IiwiaGllcmFyY2h5UXVhbGlmaWVyIiwiYXBwQ29tcG9uZW50IiwiQ29tbW9uVXRpbHMiLCJnZXRBcHBDb21wb25lbnQiLCJzaWRlRWZmZWN0c1NlcnZpY2UiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJzaWRlRWZmZWN0cyIsImdldE9EYXRhQWN0aW9uU2lkZUVmZmVjdHMiLCJyZXF1ZXN0U2lkZUVmZmVjdHNGb3JPRGF0YUFjdGlvbiIsImFsbG93ZWQiLCJpc0FsbG93ZWQiLCJwYXJlbnRCZWZvcmUiLCJwYXJhbXNCZWZvcmUiLCJnZXREcm9wQmV0d2VlblBhcmFtZXRlcnMiLCJwYXJlbnRBZnRlciIsInBhcmFtc0FmdGVyIiwiY29udGV4dEluZGV4IiwiRXJyb3IiLCJsaXN0QmluZGluZyIsImdldEFsbEN1cnJlbnRDb250ZXh0cyIsImN0eCIsImluZm8iLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsImlzVGFibGVTb3J0ZWQiLCJtb3ZlQ29udGV4dCIsImZpbmFsbHkiLCJwYXJhbXMiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlRhYmxlSGllcmFyY2h5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW50aXR5U2V0LCBOYXZpZ2F0aW9uUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHsgdHlwZSBJSW50ZXJmYWNlV2l0aE1peGluIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IEJ1c3lMb2NrZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0J1c3lMb2NrZXJcIjtcbmltcG9ydCAqIGFzIE1ldGFNb2RlbENvbnZlcnRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCBGUE1IZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRlBNSGVscGVyXCI7XG5pbXBvcnQgeyB0eXBlIEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBSZXNvdXJjZU1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIE1lbnUgZnJvbSBcInNhcC9tL01lbnVcIjtcbmltcG9ydCBNZXNzYWdlVG9hc3QgZnJvbSBcInNhcC9tL01lc3NhZ2VUb2FzdFwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgdHlwZSBEcmFnRHJvcEluZm8gZnJvbSBcInNhcC91aS9jb3JlL2RuZC9EcmFnRHJvcEluZm9cIjtcbmltcG9ydCB0eXBlIE1EQ1RhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBBY3Rpb25Ub29sYmFyQWN0aW9uIGZyb20gXCJzYXAvdWkvbWRjL2FjdGlvbnRvb2xiYXIvQWN0aW9uVG9vbGJhckFjdGlvblwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgeyB0eXBlIElUYWJsZUJsb2NrIH0gZnJvbSBcIi4uL1RhYmxlQVBJXCI7XG5pbXBvcnQgVGFibGVSdW50aW1lIGZyb20gXCIuLi9UYWJsZVJ1bnRpbWVcIjtcblxuZW51bSBEcm9wUG9zaXRpb24ge1xuXHRPbiA9IFwiT25cIixcblx0QmV0d2VlbiA9IFwiQmV0d2VlblwiLFxuXHRPbk9yQmV0d2VlbiA9IFwiT25PckJldHdlZW5cIlxufVxuXG50eXBlIERyb3BJbmZvcm1hdGlvbiA9XG5cdHwgeyBwb3NpdGlvbjogRHJvcFBvc2l0aW9uLk9uOyBwYXJlbnRDb250ZXh0OiBDb250ZXh0IHwgbnVsbCB9XG5cdHwgeyBwb3NpdGlvbjogRHJvcFBvc2l0aW9uLkJldHdlZW47IGNvbnRleHRCZWZvcmU6IENvbnRleHQgfCBudWxsOyBjb250ZXh0QWZ0ZXI6IENvbnRleHQgfCBudWxsIH07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRhYmxlSGllcmFyY2h5IGltcGxlbWVudHMgSUludGVyZmFjZVdpdGhNaXhpbiB7XG5cdHNldHVwTWl4aW4oX2Jhc2VDbGFzczogRnVuY3Rpb24pOiB2b2lkIHtcblx0XHQvLyBUaGlzIG1ldGhvZCBpcyBuZWVkZWQgdG8gaW1wbGVtZW50IGludGVyZmFjZSBJSW50ZXJmYWNlV2l0aE1peGluXG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgQ3V0L0NvcHkgb3BlcmF0aW9uLlxuXHQgKiBAcGFyYW0gZXZ0IFRoZSBVSTUgZXZlbnRcblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51XG5cdCAqL1xuXHRfb25Db3B5Q3V0KHRoaXM6IElUYWJsZUJsb2NrICYgVGFibGVIaWVyYXJjaHksIGV2dDogVUk1RXZlbnQ8e30sIFVJNUVsZW1lbnQ+LCBmb3JDb250ZXh0TWVudTogYm9vbGVhbiwgYWN0aW9uOiBcIkNvcHlcIiB8IFwiQ3V0XCIpOiB2b2lkIHtcblx0XHRsZXQgdGFibGU6IE1EQ1RhYmxlO1xuXHRcdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHRcdHRhYmxlID0gZXZ0LmdldFNvdXJjZSgpLmdldFBhcmVudCgpIGFzIE1EQ1RhYmxlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBtZW51ID0gZXZ0LmdldFNvdXJjZSgpLmdldFBhcmVudCgpIGFzIE1lbnU7XG5cdFx0XHR0YWJsZSA9IG1lbnUuZ2V0UGFyZW50KCk/LmdldFBhcmVudCgpIGFzIE1EQ1RhYmxlO1xuXHRcdH1cblx0XHRjb25zdCBpbnRlcm5hbENvbnRleHQgPSB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IHNlbGVjdGVkQ29udGV4dHMgPSB0aGlzLmdldFNlbGVjdGVkQ29udGV4dHMoKTtcblx0XHRpZiAoc2VsZWN0ZWRDb250ZXh0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRMb2cuZXJyb3IoYE11bHRpICR7YWN0aW9uID09PSBcIkN1dFwiID8gXCJjdXR0aW5nXCIgOiBcImNvcHlpbmdcIn0gaXMgbm90IHN1cHBvcnRlZGApO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGludGVybmFsQ29udGV4dC5zZXRQcm9wZXJ0eShcIm5vZGVVcGRhdGVzSW5mby9wYXN0YWJsZUNvbnRleHRzXCIsIHNlbGVjdGVkQ29udGV4dHMpO1xuXHRcdGludGVybmFsQ29udGV4dC5zZXRQcm9wZXJ0eShcIm5vZGVVcGRhdGVzSW5mby9sYXN0QWN0aW9uXCIsIGFjdGlvbik7XG5cdFx0TWVzc2FnZVRvYXN0LnNob3coUmVzb3VyY2VNb2RlbEhlbHBlci5nZXRSZXNvdXJjZU1vZGVsKHRhYmxlKS5nZXRUZXh0KFwiTV9DVVRDT1BZX1JFQURZXCIpKTtcblx0XHRpZiAoIWZvckNvbnRleHRNZW51IHx8IGludGVybmFsQ29udGV4dC5nZXRQcm9wZXJ0eShcIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiKSA+IDApIHtcblx0XHRcdFRhYmxlUnVudGltZS5jbGVhclNlbGVjdGlvbih0YWJsZSk7XG5cdFx0XHR0YWJsZS5maXJlU2VsZWN0aW9uQ2hhbmdlKCk7XG5cdFx0fSBlbHNlIGlmIChmb3JDb250ZXh0TWVudSkge1xuXHRcdFx0Ly8gVXNpbmcgdGhlIGNvbnRleHQgbWVudSBpbXBsaWNpdGx5IGRlZmluZXMgYSBjb250ZXh0IGZvciB0aGUgYWN0aW9uXG5cdFx0XHR0YWJsZS5maXJlU2VsZWN0aW9uQ2hhbmdlKCk7XG5cdFx0fVxuXG5cdFx0aW50ZXJuYWxDb250ZXh0LnNldFByb3BlcnR5KFwibm9kZVVwZGF0ZXNJbmZvL2N1dEVuYWJsZW1lbnRcIiwgZmFsc2UpO1xuXHRcdGludGVybmFsQ29udGV4dC5zZXRQcm9wZXJ0eShcImNvbnRleHRtZW51L25vZGVVcGRhdGVzSW5mby9jdXRFbmFibGVtZW50XCIsIGZhbHNlKTtcblx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoXCJub2RlVXBkYXRlc0luZm8vY29weUVuYWJsZW1lbnRcIiwgZmFsc2UpO1xuXHRcdGludGVybmFsQ29udGV4dC5zZXRQcm9wZXJ0eShcImNvbnRleHRtZW51L25vZGVVcGRhdGVzSW5mby9jb3B5RW5hYmxlbWVudFwiLCBmYWxzZSk7XG5cdFx0Y29uc3QgcGFzdGVCdXR0b24gPSAodGFibGUuZ2V0QWN0aW9ucygpIGFzIEFjdGlvblRvb2xiYXJBY3Rpb25bXSkuZmluZCgodG9vbGJhckFjdGlvbikgPT5cblx0XHRcdC86OlBhc3RlJC8udGVzdCh0b29sYmFyQWN0aW9uLmdldEFjdGlvbigpLmdldElkKCkpXG5cdFx0KTtcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHBhc3RlQnV0dG9uPy5mb2N1cygpO1xuXHRcdH0sIDApO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBkcmFnZ2VkIGVsZW1lbnQgZW50ZXJzIGEgdGFibGUgcm93LlxuXHQgKiBAcGFyYW0gdWk1RXZlbnQgVUk1IGV2ZW50IGNvbWluZyBmcm9tIHRoZSBNREMgZHJhZyBhbmQgZHJvcCBjb25maWdcblx0ICovXG5cdF9vbkRyYWdFbnRlckRvY3VtZW50KFxuXHRcdHRoaXM6IElUYWJsZUJsb2NrICYgVGFibGVIaWVyYXJjaHksXG5cdFx0dWk1RXZlbnQ6IFVJNUV2ZW50PHsgYmluZGluZ0NvbnRleHQ6IENvbnRleHQ7IGRyYWdTb3VyY2U6IENvbnRleHQ7IGRyb3BQb3NpdGlvbjogXCJCZWZvcmVcIiB8IFwiQWZ0ZXJcIiB8IFwiT25cIiB9LCBEcmFnRHJvcEluZm8+XG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IGRyYWdnZWRDb250ZXh0ID0gdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiZHJhZ1NvdXJjZVwiKTtcblx0XHRpZiAodGhpcy5nZXRDb250ZW50KCkuZ2V0Um93QmluZGluZygpICE9PSBkcmFnZ2VkQ29udGV4dC5nZXRCaW5kaW5nKCkpIHtcblx0XHRcdC8vIFRoZSBkcmFnIGlzIGRvbmUgb24gYSBkaWZmZXJlbnQgdGFibGUgLT4gbm90IGF1dGhvcml6ZWRcblx0XHRcdHVpNUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgdGFyZ2V0Q29udGV4dDogQ29udGV4dCB8IG51bGwgPSB1aTVFdmVudC5nZXRQYXJhbWV0ZXIoXCJiaW5kaW5nQ29udGV4dFwiKTtcblx0XHRpZiAoZHJhZ2dlZENvbnRleHQuaXNBbmNlc3Rvck9mKHRhcmdldENvbnRleHQpKSB7XG5cdFx0XHQvLyBUaGUgYW5jZXN0b3IgaXMgZHJvcHBlZCBvbiBhIGRlc2NlbmRhbnQgLT4gbm90IGF1dGhvcml6ZWRcblx0XHRcdHVpNUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bGV0IGRpc2FibGVkQmV0d2VlbiA9IGZhbHNlO1xuXHRcdGxldCBkaXNhYmxlZE9uID0gZmFsc2U7XG5cdFx0Y29uc3QgdGFibGVEZWZpbml0aW9uID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKTtcblx0XHRjb25zdCBpc01vdmVBbGxvd2VkSW5mbyA9IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmlzTW92ZVRvUG9zaXRpb25BbGxvd2VkO1xuXHRcdGNvbnN0IGN1c3RvbUZ1bmN0aW9uID0gaXNNb3ZlQWxsb3dlZEluZm9cblx0XHRcdD8gRlBNSGVscGVyLmdldEN1c3RvbUZ1bmN0aW9uPChub2RlOiBDb250ZXh0LCBwYXJlbnQ6IENvbnRleHQgfCBudWxsKSA9PiBib29sZWFuPihcblx0XHRcdFx0XHRpc01vdmVBbGxvd2VkSW5mby5tb2R1bGVOYW1lLFxuXHRcdFx0XHRcdGlzTW92ZUFsbG93ZWRJbmZvLm1ldGhvZE5hbWUsXG5cdFx0XHRcdFx0dWk1RXZlbnQuZ2V0U291cmNlKCkuZ2V0UGFyZW50KCkgYXMgQ29udHJvbFxuXHRcdFx0ICApXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblxuXHRcdGlmICh0YXJnZXRDb250ZXh0ID09PSB0aGlzLmdldENvbnRlbnQoKS5nZXRCaW5kaW5nQ29udGV4dCgpKSB7XG5cdFx0XHQvLyBUaGUgZHJhZyBpcyBkb25lIG9uIHRoZSB0YWJsZSBpdHNlbGYgLT4gZHJvcCBhcyByb290IG5vZGUpXG5cdFx0XHRkaXNhYmxlZE9uID0gIXRoaXMuc2FmZUlzTW92ZUFsbG93ZWQoY3VzdG9tRnVuY3Rpb24sIGRyYWdnZWRDb250ZXh0LCBudWxsKTtcblx0XHRcdGRpc2FibGVkQmV0d2VlbiA9IHRydWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRpc2FibGVkT24gPSAhdGhpcy5zYWZlSXNNb3ZlQWxsb3dlZChjdXN0b21GdW5jdGlvbiwgZHJhZ2dlZENvbnRleHQsIHRhcmdldENvbnRleHQpO1xuXHRcdFx0ZGlzYWJsZWRCZXR3ZWVuID0gdGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uYWxsb3dEcm9wQmV0d2Vlbk5vZGVzICE9PSB0cnVlO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdE1hdGguYWJzKHRhcmdldENvbnRleHQuZ2V0SW5kZXgoKSEgLSBkcmFnZ2VkQ29udGV4dC5nZXRJbmRleCgpISkgPT09IDEgJiZcblx0XHRcdFx0ISh0YXJnZXRDb250ZXh0LmdldEluZGV4KCkgPT09IDAgJiYgdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiZHJvcFBvc2l0aW9uXCIpID09PSBcIkJlZm9yZVwiKSAmJlxuXHRcdFx0XHQhKFxuXHRcdFx0XHRcdHRhcmdldENvbnRleHQuZ2V0SW5kZXgoKSA9PT0gdGhpcy5nZXRDb250ZW50KCkuZ2V0Um93QmluZGluZygpLmdldExlbmd0aCgpIC0gMSAmJlxuXHRcdFx0XHRcdHVpNUV2ZW50LmdldFBhcmFtZXRlcihcImRyb3BQb3NpdGlvblwiKSA9PT0gXCJBZnRlclwiXG5cdFx0XHRcdClcblx0XHRcdCkge1xuXHRcdFx0XHQvL1xuXHRcdFx0XHRkaXNhYmxlZEJldHdlZW4gPSB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiB0aGUgZHJvcCBiZXR3ZWVuIG5vZGUgaXMgYWxsb3dlZCwgd2UgbmVlZCB0byBjaGVjayBpZiB0aGUgdGFyZ2V0IGlzIGEgcm9vdCBub2RlIGFuZCBpZiB0aGUgdGFibGUgc3VwcG9ydHMgY2hhbmdlU2libGluZ0ZvclJvb3RzXG5cdFx0XHRpZiAoXG5cdFx0XHRcdCFkaXNhYmxlZEJldHdlZW4gJiZcblx0XHRcdFx0IXRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmNoYW5nZVNpYmxpbmdGb3JSb290c1N1cHBvcnRlZCAmJlxuXHRcdFx0XHR0YXJnZXRDb250ZXh0LmdldFByb3BlcnR5KFwiQCR1aTUubm9kZS5sZXZlbFwiKSA9PT0gMVxuXHRcdFx0KSB7XG5cdFx0XHRcdGRpc2FibGVkQmV0d2VlbiA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENoZWNrIGN1c3RvbSBsb2dpYyBmb3IgZHJvcCBiZXR3ZWVuIGlmIHRoZXJlJ3Mgc29tZSwgYW5kIGlmIGl0J3Mgbm90IGFscmVhZHkgZGlzYWJsZWQgYXQgdGhlIHRhYmxlIGxldmVsXG5cdFx0XHRpZiAoY3VzdG9tRnVuY3Rpb24gJiYgIWRpc2FibGVkQmV0d2Vlbikge1xuXHRcdFx0XHRkaXNhYmxlZEJldHdlZW4gPSAhdGhpcy5pc0Ryb3BCZXR3ZWVuQWxsb3dlZEZvckRyYWcoY3VzdG9tRnVuY3Rpb24sIGRyYWdnZWRDb250ZXh0LCB0YXJnZXRDb250ZXh0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRsZXQgYWxsb3dlZERyb3BQb3NpdGlvbjogRHJvcFBvc2l0aW9uID0gRHJvcFBvc2l0aW9uLk9uT3JCZXR3ZWVuO1xuXHRcdGlmIChkaXNhYmxlZEJldHdlZW4gJiYgZGlzYWJsZWRPbikge1xuXHRcdFx0Ly9TZXQgdGhlIGVsZW1lbnQgYXMgbm9uIGRyb3BwYWJsZVxuXHRcdFx0dWk1RXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKGRpc2FibGVkQmV0d2Vlbikge1xuXHRcdFx0YWxsb3dlZERyb3BQb3NpdGlvbiA9IERyb3BQb3NpdGlvbi5Pbjtcblx0XHR9IGVsc2UgaWYgKGRpc2FibGVkT24pIHtcblx0XHRcdGFsbG93ZWREcm9wUG9zaXRpb24gPSBEcm9wUG9zaXRpb24uQmV0d2Vlbjtcblx0XHR9XG5cdFx0dWk1RXZlbnQuZ2V0U291cmNlKCkuc2V0RHJvcFBvc2l0aW9uKGFsbG93ZWREcm9wUG9zaXRpb24pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFN0YXJ0cyB0aGUgZHJhZyBvZiB0aGUgZG9jdW1lbnQuXG5cdCAqIEBwYXJhbSB1aTVFdmVudCBVSTUgZXZlbnQgY29taW5nIGZyb20gdGhlIE1EQyBkcmFnIGFuZCBkcm9wIGNvbmZpZ1xuXHQgKi9cblx0X29uRHJhZ1N0YXJ0RG9jdW1lbnQodGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZUhpZXJhcmNoeSwgdWk1RXZlbnQ6IFVJNUV2ZW50PHsgYmluZGluZ0NvbnRleHQ6IENvbnRleHQgfSwgQ29udHJvbD4pOiB2b2lkIHtcblx0XHRjb25zdCBjb250ZXh0ID0gdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiYmluZGluZ0NvbnRleHRcIik7XG5cdFx0Y29uc3QgdXBkYXRhYmxlUHJvcGVydHlQYXRoID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5hbm5vdGF0aW9uLnVwZGF0YWJsZVByb3BlcnR5UGF0aDtcblxuXHRcdC8vIENoZWNrIGlmIHRoZSBjb250ZXh0IGNhbiBiZSB1cGRhdGVkIGFjY29yZGluZyB0byB1cGRhdGUgcmVzdHJpY3Rpb25zXG5cdFx0bGV0IGRpc2FibGVEcmFnID0gISF1cGRhdGFibGVQcm9wZXJ0eVBhdGggJiYgIWNvbnRleHQuZ2V0UHJvcGVydHkodXBkYXRhYmxlUHJvcGVydHlQYXRoKTtcblxuXHRcdC8vIEluIGNhc2Ugb2YgYSBUcmVlVGFibGUgaW4gYSBMaXN0UmVwb3J0IHdpdGggZHJhZnQsIGNoZWNrIHRoYXQgdGhlIGNvbnRleHQgaGFzIG5vIGFzc29jaWF0ZWQgZHJhZnRcblx0XHRpZiAoIWRpc2FibGVEcmFnICYmICEoY29udGV4dC5nZXRCaW5kaW5nKCkgYXMgT0RhdGFMaXN0QmluZGluZykuaXNSZWxhdGl2ZSgpKSB7XG5cdFx0XHRkaXNhYmxlRHJhZyA9IGNvbnRleHQuZ2V0UHJvcGVydHkoXCJIYXNEcmFmdEVudGl0eVwiKSA9PT0gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSBjdXN0b20gbG9naWMgaWYgdGhlcmUncyBvbmVcblx0XHRjb25zdCBpc01vdmFibGVJbmZvID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLmlzTm9kZU1vdmFibGU7XG5cdFx0dHJ5IHtcblx0XHRcdGlmIChpc01vdmFibGVJbmZvICYmICFkaXNhYmxlRHJhZykge1xuXHRcdFx0XHRkaXNhYmxlRHJhZyA9XG5cdFx0XHRcdFx0KFxuXHRcdFx0XHRcdFx0RlBNSGVscGVyLmdldEN1c3RvbUZ1bmN0aW9uPChjb250ZXh0czogQ29udGV4dFtdKSA9PiBib29sZWFuPihcblx0XHRcdFx0XHRcdFx0aXNNb3ZhYmxlSW5mby5tb2R1bGVOYW1lLFxuXHRcdFx0XHRcdFx0XHRpc01vdmFibGVJbmZvLm1ldGhvZE5hbWUsXG5cdFx0XHRcdFx0XHRcdHVpNUV2ZW50LmdldFNvdXJjZSgpXG5cdFx0XHRcdFx0XHQpIGFzIEZ1bmN0aW9uXG5cdFx0XHRcdFx0KShjb250ZXh0KSA9PT0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoX2Vycm9yKSB7XG5cdFx0XHRkaXNhYmxlRHJhZyA9IGZhbHNlO1xuXHRcdH1cblx0XHRpZiAoZGlzYWJsZURyYWcpIHtcblx0XHRcdC8vU2V0IHRoZSBlbGVtZW50IGFzIG5vbiBkcmFnZ2FibGVcblx0XHRcdHVpNUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIERyb3BzIHRoZSBkb2N1bWVudC5cblx0ICogQHBhcmFtIHVpNUV2ZW50IFVJNSBldmVudCBjb21pbmcgZnJvbSB0aGUgTURDIGRyYWcgYW5kIGRyb3AgY29uZmlnXG5cdCAqIEByZXR1cm5zIFRoZSBQcm9taXNlXG5cdCAqL1xuXHRhc3luYyBfb25Ecm9wRG9jdW1lbnQoXG5cdFx0dGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZUhpZXJhcmNoeSxcblx0XHR1aTVFdmVudDogVUk1RXZlbnQ8e1xuXHRcdFx0YmluZGluZ0NvbnRleHQ6IENvbnRleHQ7XG5cdFx0XHRkcmFnU291cmNlOiBDb250ZXh0O1xuXHRcdFx0ZHJvcFBvc2l0aW9uOiBzdHJpbmc7XG5cdFx0fT5cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0QnVzeUxvY2tlci5sb2NrKHRoaXMuZ2V0Q29udGVudCgpKTtcblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBkcm9wcGVkT25Db250ZXh0ID0gdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiYmluZGluZ0NvbnRleHRcIik7XG5cdFx0XHRsZXQgZHJvcEluZm86IERyb3BJbmZvcm1hdGlvbjtcblx0XHRcdGlmIChkcm9wcGVkT25Db250ZXh0ID09PSB0aGlzLmdldENvbnRlbnQoKS5nZXRCaW5kaW5nQ29udGV4dCgpKSB7XG5cdFx0XHRcdC8vIFRoZSBkcm9wIGlzIGRvbmUgb24gdGhlIHRhYmxlIGl0c2VsZiAtPiBkcm9wIGFzIHJvb3Qgbm9kZSlcblx0XHRcdFx0ZHJvcEluZm8gPSB7IHBvc2l0aW9uOiBEcm9wUG9zaXRpb24uT24sIHBhcmVudENvbnRleHQ6IG51bGwgfTtcblx0XHRcdH0gZWxzZSBpZiAodWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiZHJvcFBvc2l0aW9uXCIpID09PSBEcm9wUG9zaXRpb24uT24pIHtcblx0XHRcdFx0Ly8gRHJvcCBvbiBhIG5vZGVcblx0XHRcdFx0ZHJvcEluZm8gPSB7IHBvc2l0aW9uOiBEcm9wUG9zaXRpb24uT24sIHBhcmVudENvbnRleHQ6IGRyb3BwZWRPbkNvbnRleHQgfTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIERyb3AgYmV0d2VlbiAyIG5vZGVzXG5cdFx0XHRcdGxldCBjb250ZXh0QmVmb3JlOiBDb250ZXh0IHwgbnVsbDtcblx0XHRcdFx0bGV0IGNvbnRleHRBZnRlcjogQ29udGV4dCB8IG51bGw7XG5cdFx0XHRcdGlmICh1aTVFdmVudC5nZXRQYXJhbWV0ZXIoXCJkcm9wUG9zaXRpb25cIikgPT09IFwiQWZ0ZXJcIikge1xuXHRcdFx0XHRcdGNvbnRleHRCZWZvcmUgPSBkcm9wcGVkT25Db250ZXh0O1xuXHRcdFx0XHRcdGNvbnRleHRBZnRlciA9IHRoaXMuZ2V0Q29udGV4dEFmdGVyKGRyb3BwZWRPbkNvbnRleHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnRleHRCZWZvcmUgPSB0aGlzLmdldENvbnRleHRCZWZvcmUoZHJvcHBlZE9uQ29udGV4dCk7XG5cdFx0XHRcdFx0Y29udGV4dEFmdGVyID0gZHJvcHBlZE9uQ29udGV4dDtcblx0XHRcdFx0fVxuXHRcdFx0XHRkcm9wSW5mbyA9IHsgcG9zaXRpb246IERyb3BQb3NpdGlvbi5CZXR3ZWVuLCBjb250ZXh0QWZ0ZXIsIGNvbnRleHRCZWZvcmUgfTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgbW92ZWRDb250ZXh0ID0gdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiZHJhZ1NvdXJjZVwiKTtcblx0XHRcdGF3YWl0IFByb21pc2UuYWxsKFt0aGlzLmRyb3BDb250ZXh0KG1vdmVkQ29udGV4dCwgZHJvcEluZm8pLCB0aGlzLnJlcXVlc3RTaWRlRWZmZWN0c0ZvckNoYW5nZU5leHRTaWJsaW5nQWN0aW9uKG1vdmVkQ29udGV4dCldKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TWVzc2FnZVRvYXN0LnNob3codGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIk1fVEFCTEVEUk9QX0ZBSUxFRFwiLCBbXCJcIl0pKTtcblx0XHRcdExvZy5lcnJvcihcIlRoZSBvcGVyYXRpb24gaXMgdW5zdWNjZXNzZnVsLiBcIiArIChlcnJvciBhcyBFcnJvcikubWVzc2FnZSA/PyBcIlwiKTtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sodGhpcy5nZXRDb250ZW50KCkpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciBjb2xsYXBzZS9leHBhbmQgZnJvbSB0aGUgY29udGV4dCBtZW51LlxuXHQgKiBAcGFyYW0gdGhpc1xuXHQgKiBAcGFyYW0gX3VpNUV2ZW50XG5cdCAqIEBwYXJhbSBleHBhbmRcblx0ICovXG5cdGFzeW5jIF9vbkNvbGxhcHNlRXhwYW5kTm9kZSh0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBfdWk1RXZlbnQ6IFVJNUV2ZW50LCBleHBhbmQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzZWxlY3RlZENvbnRleHRzID0gdGhpcy5nZXRTZWxlY3RlZENvbnRleHRzKCk7XG5cdFx0aWYgKGV4cGFuZCkge1xuXHRcdFx0Y29uc3QgcHJvbWlzZUFycmF5ID0gc2VsZWN0ZWRDb250ZXh0cy5tYXAoYXN5bmMgKHNpbmdsZUNvbnRleHQ6IENvbnRleHQpID0+IHtcblx0XHRcdFx0Ly8gQ2hlY2tpbmcgZm9yIGZhbHNlIHNwZWNpZmljYWxseTsgdW5kZWZpbmVkIG1lYW5zIHRoZSBub2RlIGNhbm5vdCBleHBhbmQvY29sbGFwc2Vcblx0XHRcdFx0aWYgKHNpbmdsZUNvbnRleHQuaXNFeHBhbmRlZCgpICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHQvLyBUZW1wb3Jhcnkgd29ya2Fyb3VuZCBkdWUgdG8gbW9kZWwgbGltaXRhdGlvbi5cblx0XHRcdFx0XHQvLyBXZSBuZWVkIHRvIGNvbGxhcHNlIGEgbm9kZSBiZWZvcmUgZXhwYW5kaW5nIGl0IHRvIGVuc3VyZSB3ZSBleHBhbmQgaXQgY29tcGxldGVseS5cblx0XHRcdFx0XHQvLyBXaWxsIGJlIGNoYW5nZWQgb25jZSB0aGUgbW9kZWwgZml4ZXMgdGhlIGlzc3VlLlxuXHRcdFx0XHRcdGlmIChzaW5nbGVDb250ZXh0LmlzRXhwYW5kZWQoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0YXdhaXQgc2luZ2xlQ29udGV4dC5jb2xsYXBzZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gc2luZ2xlQ29udGV4dC5leHBhbmQoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VBcnJheSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGF3YWl0IFByb21pc2UuYWxsKFxuXHRcdFx0XHRzZWxlY3RlZENvbnRleHRzLm1hcChhc3luYyAoc2luZ2xlQ29udGV4dDogQ29udGV4dCkgPT4ge1xuXHRcdFx0XHRcdGlmIChzaW5nbGVDb250ZXh0LmlzRXhwYW5kZWQoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNpbmdsZUNvbnRleHQuY29sbGFwc2UodHJ1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSW50ZXJuYWwgbWV0aG9kIHRvIG1vdmUgYSByb3cgdXAgb3IgZG93biBpbiBhIFRyZWUgdGFibGUuXG5cdCAqIEBwYXJhbSBfdWk1RXZlbnRcblx0ICogQHBhcmFtIG1vdmVVcCBUcnVlIGZvciBtb3ZlIHVwLCBmYWxzZSBmb3IgbW92ZSBkb3duXG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuXHQgKi9cblx0YXN5bmMgX29uTW92ZVVwRG93bih0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBfdWk1RXZlbnQ6IFVJNUV2ZW50LCBtb3ZlVXA6IGJvb2xlYW4sIGZvckNvbnRleHRNZW51ID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzZWxlY3RlZENvbnRleHRzID0gdGhpcy5nZXRTZWxlY3RlZENvbnRleHRzKCk7XG5cdFx0aWYgKHNlbGVjdGVkQ29udGV4dHMubGVuZ3RoICE9PSAxKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IG1kY1RhYmxlID0gdGhpcy5nZXRDb250ZW50KCk7XG5cdFx0bWRjVGFibGUuc2V0QnVzeSh0cnVlKTtcblxuXHRcdC8vIE1vdmUgdGhlIGNvbnRleHQgdXAgb3IgZG93blxuXHRcdGNvbnN0IG1vdmVkQ29udGV4dCA9IHNlbGVjdGVkQ29udGV4dHNbMF07XG5cdFx0Y29uc3QgcGFyZW50Q29udGV4dCA9IGF3YWl0IG1vdmVkQ29udGV4dC5yZXF1ZXN0UGFyZW50KCk7XG5cdFx0bGV0IGNvbnRleHRNb3ZlZCA9IGZhbHNlO1xuXHRcdGxldCBtb3ZlUHJvbWlzZSA9IG51bGw7XG5cdFx0aWYgKG1vdmVVcCkge1xuXHRcdFx0Y29uc3QgcHJldmlvdXNTaWJsaW5nID0gYXdhaXQgbW92ZWRDb250ZXh0LnJlcXVlc3RTaWJsaW5nKC0xKTtcblx0XHRcdGlmIChwcmV2aW91c1NpYmxpbmcpIHtcblx0XHRcdFx0bW92ZVByb21pc2UgPSBtb3ZlZENvbnRleHQubW92ZSh7IG5leHRTaWJsaW5nOiBwcmV2aW91c1NpYmxpbmcsIHBhcmVudDogcGFyZW50Q29udGV4dCB9KTtcblx0XHRcdFx0Y29udGV4dE1vdmVkID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgbmV4dFNpYmxpbmcgPSBhd2FpdCBtb3ZlZENvbnRleHQucmVxdWVzdFNpYmxpbmcoMSk7XG5cdFx0XHRpZiAobmV4dFNpYmxpbmcpIHtcblx0XHRcdFx0bW92ZVByb21pc2UgPSBuZXh0U2libGluZy5tb3ZlKHsgbmV4dFNpYmxpbmc6IG1vdmVkQ29udGV4dCwgcGFyZW50OiBwYXJlbnRDb250ZXh0IH0pO1xuXHRcdFx0XHRjb250ZXh0TW92ZWQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGF3YWl0IFByb21pc2UuYWxsKFttb3ZlUHJvbWlzZSwgdGhpcy5yZXF1ZXN0U2lkZUVmZmVjdHNGb3JDaGFuZ2VOZXh0U2libGluZ0FjdGlvbihtb3ZlZENvbnRleHQpXSk7XG5cblx0XHQvLyBTY3JvbGwgdG8gdGhlIG5ldyBwb3NpdGlvblxuXHRcdGNvbnN0IG5ld0luZGV4ID0gbW92ZWRDb250ZXh0LmdldEluZGV4KCk7XG5cdFx0aWYgKGNvbnRleHRNb3ZlZCAmJiBuZXdJbmRleCAhPT0gdW5kZWZpbmVkICYmIG5ld0luZGV4ID49IDApIHtcblx0XHRcdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHRcdFx0bWRjVGFibGUuc2Nyb2xsVG9JbmRleChuZXdJbmRleCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtZGNUYWJsZS5mb2N1c1JvdyhuZXdJbmRleCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdG1kY1RhYmxlLnNldEJ1c3koZmFsc2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlcXVlc3RzIHRoZSBzaWRlIGVmZmVjdCBmb3IgdGhlIENoYW5nZU5leHRTaWJsaW5nQWN0aW9uLlxuXHQgKiBAcGFyYW0gbW92ZWRDb250ZXh0IFRoZSBjb250ZXh0IHRoYXQgaGFzIGJlZW4gbW92ZWRcblx0ICogQHJldHVybnMgQSBQcm9taXNlXG5cdCAqL1xuXHRhc3luYyByZXF1ZXN0U2lkZUVmZmVjdHNGb3JDaGFuZ2VOZXh0U2libGluZ0FjdGlvbih0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBtb3ZlZENvbnRleHQ6IENvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5fcmVxdWVzdFNpZGVFZmZlY3RzRm9ySGllcmFyY2h5QWN0aW9ucyhtb3ZlZENvbnRleHQsIFwiQ2hhbmdlTmV4dFNpYmxpbmdBY3Rpb25cIik7XG5cdH1cblxuXHQvKipcblx0ICogUmVxdWVzdHMgdGhlIHNpZGUgZWZmZWN0IGZvciB0aGUgQ29weUFjdGlvbi5cblx0ICogQHBhcmFtIG1vdmVkQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IGhhcyBiZWVuIG1vdmVkXG5cdCAqIEByZXR1cm5zIEEgUHJvbWlzZVxuXHQgKi9cblx0YXN5bmMgcmVxdWVzdFNpZGVFZmZlY3RzRm9yQ29weUFjdGlvbih0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBtb3ZlZENvbnRleHQ6IENvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5fcmVxdWVzdFNpZGVFZmZlY3RzRm9ySGllcmFyY2h5QWN0aW9ucyhtb3ZlZENvbnRleHQsIFwiQ29weUFjdGlvblwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXF1ZXN0cyB0aGUgc2lkZSBlZmZlY3QgZm9yIHRoZSBDb3B5QWN0aW9uIG9yIENoYW5nZU5leHRTaWJsaW5nQWN0aW9uLlxuXHQgKiBAcGFyYW0gbW92ZWRDb250ZXh0IFRoZSBjb250ZXh0IHRoYXQgaGFzIGJlZW4gbW92ZWRcblx0ICogQHBhcmFtIGFjdGlvblxuXHQgKiBAcmV0dXJucyBBIFByb21pc2Vcblx0ICovXG5cdGFzeW5jIF9yZXF1ZXN0U2lkZUVmZmVjdHNGb3JIaWVyYXJjaHlBY3Rpb25zKFxuXHRcdHRoaXM6IElUYWJsZUJsb2NrICYgVGFibGVIaWVyYXJjaHksXG5cdFx0bW92ZWRDb250ZXh0OiBDb250ZXh0LFxuXHRcdGFjdGlvbjogXCJDaGFuZ2VOZXh0U2libGluZ0FjdGlvblwiIHwgXCJDb3B5QWN0aW9uXCJcblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgZW50aXR5UGF0aCA9IHRoaXMuZ2V0Q29udGVudCgpLmRhdGEoXCJtZXRhUGF0aFwiKTtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSBtb3ZlZENvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblxuXHRcdGNvbnN0IHRhcmdldE9iamVjdCA9IG1ldGFNb2RlbC5nZXRDb250ZXh0KGVudGl0eVBhdGgpO1xuXHRcdGNvbnN0IGNvbnZlcnRNZXRhTW9kZWxDb250ZXh0ID0gTWV0YU1vZGVsQ29udmVydGVyLmNvbnZlcnRNZXRhTW9kZWxDb250ZXh0KHRhcmdldE9iamVjdCkgYXMgTmF2aWdhdGlvblByb3BlcnR5IHwgRW50aXR5U2V0O1xuXHRcdGNvbnN0IGVudGl0eVR5cGUgPSAoY29udmVydE1ldGFNb2RlbENvbnRleHQgYXMgTmF2aWdhdGlvblByb3BlcnR5KS50YXJnZXRUeXBlID8/IChjb252ZXJ0TWV0YU1vZGVsQ29udGV4dCBhcyBFbnRpdHlTZXQpLmVudGl0eVR5cGU7XG5cdFx0Y29uc3QgYWN0aW9uTmFtZSA9IGVudGl0eVR5cGUuYW5ub3RhdGlvbnMuSGllcmFyY2h5Py5bXG5cdFx0XHRgUmVjdXJzaXZlSGllcmFyY2h5QWN0aW9ucyMke3RoaXMuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbC5oaWVyYXJjaHlRdWFsaWZpZXIgPz8gXCJcIn1gXG5cdFx0XT8uW2FjdGlvbl0gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdFx0aWYgKGFjdGlvbk5hbWUpIHtcblx0XHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLmdldENvbnRlbnQoKSk7XG5cdFx0XHRjb25zdCBzaWRlRWZmZWN0c1NlcnZpY2UgPSBhcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk7XG5cdFx0XHRjb25zdCBzaWRlRWZmZWN0cyA9IHNpZGVFZmZlY3RzU2VydmljZS5nZXRPRGF0YUFjdGlvblNpZGVFZmZlY3RzKGFjdGlvbk5hbWUsIG1vdmVkQ29udGV4dCk7XG5cdFx0XHRpZiAoc2lkZUVmZmVjdHMpIHtcblx0XHRcdFx0YXdhaXQgc2lkZUVmZmVjdHNTZXJ2aWNlLnJlcXVlc3RTaWRlRWZmZWN0c0Zvck9EYXRhQWN0aW9uKHNpZGVFZmZlY3RzLCBtb3ZlZENvbnRleHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTYWZlbHkgY2hlY2tzIGlmIG1vdmluZyBhIG5vZGUgaXMgYWxsb3dlZC5cblx0ICogQHBhcmFtIGN1c3RvbUZ1bmN0aW9uXG5cdCAqIEBwYXJhbSBtb3ZlZENvbnRleHRcblx0ICogQHBhcmFtIHBhcmVudENvbnRleHRcblx0ICogQHJldHVybnMgVHJ1ZSBpZiBhbGxvd2VkXG5cdCAqL1xuXHRwcml2YXRlIHNhZmVJc01vdmVBbGxvd2VkKFxuXHRcdGN1c3RvbUZ1bmN0aW9uOiAoKGNvbnRleHQ6IENvbnRleHQsIHBhcmVudDogQ29udGV4dCB8IG51bGwpID0+IGJvb2xlYW4pIHwgdW5kZWZpbmVkLFxuXHRcdG1vdmVkQ29udGV4dDogQ29udGV4dCxcblx0XHRwYXJlbnRDb250ZXh0OiBDb250ZXh0IHwgbnVsbFxuXHQpOiBib29sZWFuIHtcblx0XHRpZiAoIWN1c3RvbUZ1bmN0aW9uKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRsZXQgYWxsb3dlZCA9IHRydWU7XG5cdFx0dHJ5IHtcblx0XHRcdGFsbG93ZWQgPSBjdXN0b21GdW5jdGlvbihtb3ZlZENvbnRleHQsIHBhcmVudENvbnRleHQpID09PSB0cnVlO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgZXhlY3V0ZSBmdW5jdGlvbiByZWxhdGVkIHRvIGlzTW92ZVRvUG9zaXRpb25BbGxvd2VkXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRhbGxvd2VkID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYWxsb3dlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaXMgZHJvcCBcImJldHdlZW5cIiBpcyBhbGxvd2VkIGJ5IGN1c3RvbSBsb2dpYyBmb3IgYSBnaXZlbiB0YXJnZXRDb250ZXh0LlxuXHQgKiBAcGFyYW0gY3VzdG9tRnVuY3Rpb25cblx0ICogQHBhcmFtIGRyYWdnZWRDb250ZXh0XG5cdCAqIEBwYXJhbSB0YXJnZXRDb250ZXh0XG5cdCAqIEByZXR1cm5zIFRydWUgaWYgYWxsb3dlZFxuXHQgKi9cblx0cHJpdmF0ZSBpc0Ryb3BCZXR3ZWVuQWxsb3dlZEZvckRyYWcoXG5cdFx0Y3VzdG9tRnVuY3Rpb246IChjb250ZXh0OiBDb250ZXh0LCBwYXJlbnQ6IENvbnRleHQgfCBudWxsKSA9PiBib29sZWFuLFxuXHRcdGRyYWdnZWRDb250ZXh0OiBDb250ZXh0LFxuXHRcdHRhcmdldENvbnRleHQ6IENvbnRleHRcblx0KTogYm9vbGVhbiB7XG5cdFx0bGV0IGlzQWxsb3dlZCA9IHRydWU7XG5cblx0XHQvLyBEZXRlcm1pbmUgd2hhdCB0byBkbyBpZiB3ZSBkcm9wIGJlZm9yZSB0YXJnZXRDb250ZXh0XG5cdFx0Y29uc3QgY29udGV4dEJlZm9yZSA9IHRoaXMuZ2V0Q29udGV4dEJlZm9yZSh0YXJnZXRDb250ZXh0KTtcblx0XHRjb25zdCBwYXJlbnRCZWZvcmUgPSBjb250ZXh0QmVmb3JlID09PSBudWxsID8gbnVsbCA6IGNvbnRleHRCZWZvcmUuZ2V0UGFyZW50KCk7XG5cdFx0Y29uc3QgcGFyYW1zQmVmb3JlID0gdGhpcy5nZXREcm9wQmV0d2VlblBhcmFtZXRlcnMoY29udGV4dEJlZm9yZSwgcGFyZW50QmVmb3JlLCB0YXJnZXRDb250ZXh0LCB0YXJnZXRDb250ZXh0LmdldFBhcmVudCgpKTtcblxuXHRcdC8vIERldGVybWluZSB3aGF0IHRvIGRvIGlmIHdlIGRyb3AgYWZ0ZXIgdGFyZ2V0Q29udGV4dFxuXHRcdGNvbnN0IGNvbnRleHRBZnRlciA9IHRoaXMuZ2V0Q29udGV4dEFmdGVyKHRhcmdldENvbnRleHQpO1xuXHRcdGNvbnN0IHBhcmVudEFmdGVyID0gY29udGV4dEFmdGVyID09PSBudWxsID8gbnVsbCA6IGNvbnRleHRBZnRlci5nZXRQYXJlbnQoKTtcblx0XHRjb25zdCBwYXJhbXNBZnRlciA9IHRoaXMuZ2V0RHJvcEJldHdlZW5QYXJhbWV0ZXJzKHRhcmdldENvbnRleHQsIHRhcmdldENvbnRleHQuZ2V0UGFyZW50KCksIGNvbnRleHRBZnRlciwgcGFyZW50QWZ0ZXIpO1xuXG5cdFx0Ly8gSWYgcGFyYW1zQmVmb3JlIG9yIHBhcmFtc0FmdGVyIGNhbm5vdCBiZSBkZXRlcm1pbmVkIChiZWNhdXNlIHBhcmVudHMgYXJlIG5vdCBsb2FkZWQpLCB3ZSBhbGxvdyBkcm9wIGJldHdlZW4gYW5kIGRvIHRoZSByZWFsIGNoZWNrIGluIG9uRHJvcERvY3VtZW50XG5cdFx0aWYgKHBhcmFtc0JlZm9yZSAhPT0gdW5kZWZpbmVkICYmIHBhcmFtc0FmdGVyICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmIChwYXJhbXNCZWZvcmUucGFyZW50ID09PSBwYXJhbXNBZnRlci5wYXJlbnQpIHtcblx0XHRcdFx0Ly8gRHJvcHBpbmcgYmVmb3JlIG9yIGFmdGVyIHdpbGwgbW92ZSB1bmRlciB0aGUgc2FtZSBwYXJlbnQgLS0+IHdlIGNhbGwgdGhlIGN1c3RvbSBsb2dpYyBvbmx5IG9uY2Vcblx0XHRcdFx0aXNBbGxvd2VkID0gdGhpcy5zYWZlSXNNb3ZlQWxsb3dlZChjdXN0b21GdW5jdGlvbiwgZHJhZ2dlZENvbnRleHQsIHBhcmFtc0JlZm9yZS5wYXJlbnQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gQXMgdGhlIE1EQyB0YWJsZSBjYW5ub3QgZGlzYWJsZSBkcm9wIGJlZm9yZSBhbmQgYWZ0ZXIgc2VwYXJhdGVseSwgd2UgZGlzYWJsZSBkcm9wIGJldHdlZW4gb25seSBpZiBib3RoIGRyb3AgYmVmb3JlIGFuZCBhZnRlciBhcmUgZm9yYmlkZGVuXG5cdFx0XHRcdGlzQWxsb3dlZCA9XG5cdFx0XHRcdFx0dGhpcy5zYWZlSXNNb3ZlQWxsb3dlZChjdXN0b21GdW5jdGlvbiwgZHJhZ2dlZENvbnRleHQsIHBhcmFtc0JlZm9yZS5wYXJlbnQpIHx8XG5cdFx0XHRcdFx0dGhpcy5zYWZlSXNNb3ZlQWxsb3dlZChjdXN0b21GdW5jdGlvbiwgZHJhZ2dlZENvbnRleHQsIHBhcmFtc0FmdGVyLnBhcmVudCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGlzQWxsb3dlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBjb250ZXh0IHRoYXQgaXMgcGxhY2VkIGJlZm9yZSBhIGdpdmVuIGNvbnRleHQgaW4gYSBMaXN0QmluZGluZy5cblx0ICogQHBhcmFtIGNvbnRleHRcblx0ICogQHJldHVybnMgVGhlIGNvbnRleHQgYmVmb3JlLCBvciBudWxsXG5cdCAqL1xuXHRwcml2YXRlIGdldENvbnRleHRCZWZvcmUoY29udGV4dDogQ29udGV4dCk6IENvbnRleHQgfCBudWxsIHtcblx0XHRjb25zdCBjb250ZXh0SW5kZXggPSBjb250ZXh0LmdldEluZGV4KCk7XG5cdFx0aWYgKGNvbnRleHRJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGVycm9yXCIpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGxpc3RCaW5kaW5nID0gY29udGV4dC5nZXRCaW5kaW5nKCkgYXMgT0RhdGFMaXN0QmluZGluZztcblx0XHRyZXR1cm4gY29udGV4dEluZGV4ID09PSAwXG5cdFx0XHQ/IG51bGxcblx0XHRcdDogbGlzdEJpbmRpbmcuZ2V0QWxsQ3VycmVudENvbnRleHRzKCkuZmluZCgoY3R4KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGN0eC5nZXRJbmRleCgpID09PSBjb250ZXh0SW5kZXggLSAxO1xuXHRcdFx0ICB9KSA/PyBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGNvbnRleHQgdGhhdCBpcyBwbGFjZWQgYWZ0ZXIgYSBnaXZlbiBjb250ZXh0IGluIGEgTGlzdEJpbmRpbmcuXG5cdCAqIEBwYXJhbSBjb250ZXh0XG5cdCAqIEByZXR1cm5zIFRoZSBjb250ZXh0IGFmdGVyLCBvciBudWxsXG5cdCAqL1xuXHRwcml2YXRlIGdldENvbnRleHRBZnRlcihjb250ZXh0OiBDb250ZXh0KTogQ29udGV4dCB8IG51bGwge1xuXHRcdGNvbnN0IGNvbnRleHRJbmRleCA9IGNvbnRleHQuZ2V0SW5kZXgoKTtcblx0XHRpZiAoY29udGV4dEluZGV4ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgZXJyb3JcIik7XG5cdFx0fVxuXG5cdFx0Y29uc3QgbGlzdEJpbmRpbmcgPSBjb250ZXh0LmdldEJpbmRpbmcoKSBhcyBPRGF0YUxpc3RCaW5kaW5nO1xuXHRcdHJldHVybiAoXG5cdFx0XHRsaXN0QmluZGluZy5nZXRBbGxDdXJyZW50Q29udGV4dHMoKS5maW5kKChjdHgpID0+IHtcblx0XHRcdFx0cmV0dXJuIGN0eC5nZXRJbmRleCgpID09PSBjb250ZXh0SW5kZXggKyAxO1xuXHRcdFx0fSkgPz8gbnVsbFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBpbmZvcm1hdGlvbiB0byBwZXJmb3JtIGEgZHJvcCBiZXR3ZWVuIDIgbm9kZXM6IHRoZSBuZXcgcGFyZW50IGFuZCB0aGUgbmV4dCBzaWJsaW5nLlxuXHQgKiBAcGFyYW0gY29udGV4dEJlZm9yZSBDb250ZXh0IGFmdGVyIHdoaWNoIHRoZSBkcm9wIGlzIGRvbmVcblx0ICogQHBhcmFtIHBhcmVudEJlZm9yZSBQYXJlbnQgb2YgY29udGV4dEJlZm9yZSAodW5kZWZpbmVkIGlmIG5vdCBrbm93bilcblx0ICogQHBhcmFtIGNvbnRleHRBZnRlciBDb250ZXh0IGJlZm9yZSB3aGljaCB0aGUgZHJvcCBpcyBkb25lXG5cdCAqIEBwYXJhbSBwYXJlbnRBZnRlciBQYXJlbnQgb2YgY29udGV4dEFmdGVyICh1bmRlZmluZWQgaWYgbm90IGtub3duKVxuXHQgKiBAcmV0dXJucyBUaGUgbmV3IHBhcmVudCBhbmQgdGhlIG5leHQgc2libGluZywgb3IgdW5kZWZpbmVkIGlmIGl0IGNhbm5vdCBiZSBkZXRlcm1pbmVkXG5cdCAqL1xuXHRwcml2YXRlIGdldERyb3BCZXR3ZWVuUGFyYW1ldGVycyhcblx0XHRjb250ZXh0QmVmb3JlOiBDb250ZXh0IHwgbnVsbCxcblx0XHRwYXJlbnRCZWZvcmU6IENvbnRleHQgfCBudWxsIHwgdW5kZWZpbmVkLFxuXHRcdGNvbnRleHRBZnRlcjogQ29udGV4dCB8IG51bGwsXG5cdFx0cGFyZW50QWZ0ZXI6IENvbnRleHQgfCBudWxsIHwgdW5kZWZpbmVkXG5cdCk6IHsgcGFyZW50OiBDb250ZXh0IHwgbnVsbDsgbmV4dFNpYmxpbmc/OiBDb250ZXh0IHwgbnVsbCB9IHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoY29udGV4dEJlZm9yZSA9PT0gbnVsbCkge1xuXHRcdFx0Ly8gRHJvcCBiZWZvcmUgZmlyc3Qgbm9kZSAtLT4gbW92ZSBhcyBmaXJzdCByb290IG5vZGVcblx0XHRcdHJldHVybiB7IHBhcmVudDogbnVsbCwgbmV4dFNpYmxpbmc6IGNvbnRleHRBZnRlciB9O1xuXHRcdH0gZWxzZSBpZiAoY29udGV4dEFmdGVyID09PSBudWxsKSB7XG5cdFx0XHQvLyBEcm9wIGFmdGVyIGxhc3Qgbm9kZSAtLT4gbW92ZSBhcyBuZXh0IHNpYmxpbmcgb2YgdGhlIGxhc3Qgbm9kZVxuXHRcdFx0cmV0dXJuIHBhcmVudEJlZm9yZSAhPT0gdW5kZWZpbmVkID8geyBwYXJlbnQ6IHBhcmVudEJlZm9yZSwgbmV4dFNpYmxpbmc6IG51bGwgfSA6IHVuZGVmaW5lZDtcblx0XHR9IGVsc2UgaWYgKHBhcmVudEFmdGVyID09PSBjb250ZXh0QmVmb3JlKSB7XG5cdFx0XHQvLyBEcm9wIGJldHdlZW4gYSBwYXJlbnQgYW5kIGl0cyBmaXJzdCBjaGlsZCAtLT4gbW92ZSBhcyBmaXJzdCBjaGlsZCBvZiB0aGUgcGFyZW50XG5cdFx0XHRyZXR1cm4geyBwYXJlbnQ6IGNvbnRleHRCZWZvcmUsIG5leHRTaWJsaW5nOiBjb250ZXh0QWZ0ZXIgfTtcblx0XHR9IGVsc2UgaWYgKHBhcmVudEJlZm9yZSA9PT0gdW5kZWZpbmVkIHx8IHBhcmVudEFmdGVyID09PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIElmIG9uZSBvZiB0aGUgcGFyZW50IGlzIG5vdCBrbm93biwgd2UgZG9uJ3Qga25vdyB3aGF0IHRvIGRvXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSBpZiAocGFyZW50QmVmb3JlID09PSBwYXJlbnRBZnRlcikge1xuXHRcdFx0Ly8gRHJvcCBiZXR3ZWVuIDIgc2libGluZ3Ncblx0XHRcdHJldHVybiB7IHBhcmVudDogcGFyZW50QmVmb3JlLCBuZXh0U2libGluZzogY29udGV4dEFmdGVyIH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIE5vZGVYXG5cdFx0XHQvLyAgLi4uLlxuXHRcdFx0Ly8gICAgIHwtLSBjb250ZXh0QmVmb3JlXG5cdFx0XHQvLyBjb250ZXh0QWZ0ZXJcblx0XHRcdC8vIC0tPiBNb3ZlIGFzIHRoZSBuZXh0IHNpYmxpbmcgb2YgY29udGV4dEJlZm9yZVxuXHRcdFx0cmV0dXJuIHsgcGFyZW50OiBwYXJlbnRCZWZvcmUsIG5leHRTaWJsaW5nOiBudWxsIH07XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEludGVybmFsIG1ldGhvZCB0byBkcm9wIGEgY29udGV4dCBvbiBvciBiZXR3ZWVuIDIgbm9kZXMuXG5cdCAqIEBwYXJhbSBjb250ZXh0XG5cdCAqIEBwYXJhbSBpbmZvXG5cdCAqIEByZXR1cm5zIFRoZSBtb3ZlIFByb21pc2Vcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZHJvcENvbnRleHQodGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZUhpZXJhcmNoeSwgY29udGV4dDogQ29udGV4dCwgaW5mbzogRHJvcEluZm9ybWF0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgaXNNb3ZlQWxsb3dlZEluZm8gPSB0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wuaXNNb3ZlVG9Qb3NpdGlvbkFsbG93ZWQ7XG5cdFx0Y29uc3QgY3VzdG9tRnVuY3Rpb24gPSBpc01vdmVBbGxvd2VkSW5mb1xuXHRcdFx0PyBGUE1IZWxwZXIuZ2V0Q3VzdG9tRnVuY3Rpb248KG5vZGU6IENvbnRleHQsIHBhcmVudDogQ29udGV4dCB8IG51bGwpID0+IGJvb2xlYW4+KFxuXHRcdFx0XHRcdGlzTW92ZUFsbG93ZWRJbmZvLm1vZHVsZU5hbWUsXG5cdFx0XHRcdFx0aXNNb3ZlQWxsb3dlZEluZm8ubWV0aG9kTmFtZSxcblx0XHRcdFx0XHR0aGlzLmdldENvbnRlbnQoKVxuXHRcdFx0ICApXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRjb25zdCB0YWJsZSA9IHRoaXMuZ2V0Q29udGVudCgpO1xuXHRcdHRhYmxlLnNldEJ1c3kodHJ1ZSk7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IGlzVGFibGVTb3J0ZWQgPSBpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImlzU29ydGVkXCIpID09PSB0cnVlO1xuXG5cdFx0Y29uc3QgbW92ZUNvbnRleHQgPSBhc3luYyAocGFyZW50OiBDb250ZXh0IHwgbnVsbCwgbmV4dFNpYmxpbmc/OiBDb250ZXh0IHwgbnVsbCk6IFByb21pc2U8dm9pZD4gPT4ge1xuXHRcdFx0Ly8gV2UgY2hlY2sgaWYgdGhlIG1vdmUgaXMgYWxsb3dlZCBieSBjdXN0b20gbG9naWMgKGlmIGFueSksIGFzIHRoaXMgY2hlY2sgbWlnaHRcblx0XHRcdC8vIG5vdCBoYXZlIGJlZW4gZG9uZSBpbiBvbkRyYWdFbnRlckRvY3VtZW50IGlmIHRoZSBwYXJlbnQgd2FzIG5vdCBsb2FkZWQgeWV0LlxuXHRcdFx0aWYgKHRoaXMuc2FmZUlzTW92ZUFsbG93ZWQoY3VzdG9tRnVuY3Rpb24sIGNvbnRleHQsIHBhcmVudCkpIHtcblx0XHRcdFx0Ly8gSWYgdGhlIHRhYmxlIGlzIHNvcnRlZCwgd2UgaWdub3JlIHRoZSBzaWJsaW5nIGFzIHRoZSBwb3NpdGlvbiBzaGFsbCBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBzZXJ2ZXJcblx0XHRcdFx0cmV0dXJuIGNvbnRleHQubW92ZSh7IHBhcmVudCwgbmV4dFNpYmxpbmc6IGlzVGFibGVTb3J0ZWQgPyB1bmRlZmluZWQgOiBuZXh0U2libGluZyB9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdE1lc3NhZ2VUb2FzdC5zaG93KHRoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJNX1RBQkxFX0RST1BfTk9UX0FMTE9XRURcIikpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRpZiAoaW5mby5wb3NpdGlvbiA9PT0gRHJvcFBvc2l0aW9uLk9uKSB7XG5cdFx0XHQvLyBEcm9wIG9uIGEgbm9kZVxuXHRcdFx0cmV0dXJuIG1vdmVDb250ZXh0KGluZm8ucGFyZW50Q29udGV4dCkuZmluYWxseSgoKSA9PiB0YWJsZS5zZXRCdXN5KGZhbHNlKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIERyb3AgYmV0d2VlbiAyIG5vZGVzXG5cdFx0XHRjb25zdCBbcGFyZW50QmVmb3JlLCBwYXJlbnRBZnRlcl0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG5cdFx0XHRcdGluZm8uY29udGV4dEJlZm9yZT8ucmVxdWVzdFBhcmVudCgpID8/IG51bGwsXG5cdFx0XHRcdGluZm8uY29udGV4dEFmdGVyPy5yZXF1ZXN0UGFyZW50KCkgPz8gbnVsbFxuXHRcdFx0XSk7XG5cdFx0XHRjb25zdCBwYXJhbXMgPSB0aGlzLmdldERyb3BCZXR3ZWVuUGFyYW1ldGVycyhpbmZvLmNvbnRleHRCZWZvcmUsIHBhcmVudEJlZm9yZSwgaW5mby5jb250ZXh0QWZ0ZXIsIHBhcmVudEFmdGVyKSE7XG5cdFx0XHRyZXR1cm4gbW92ZUNvbnRleHQocGFyYW1zLnBhcmVudCwgcGFyYW1zLm5leHRTaWJsaW5nKS5maW5hbGx5KCgpID0+IHRhYmxlLnNldEJ1c3koZmFsc2UpKTtcblx0XHR9XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7TUFzQktBLFlBQVksMEJBQVpBLFlBQVk7SUFBWkEsWUFBWTtJQUFaQSxZQUFZO0lBQVpBLFlBQVk7SUFBQSxPQUFaQSxZQUFZO0VBQUEsRUFBWkEsWUFBWTtFQUFBLElBVUlDLGNBQWM7SUFBQSxTQUFBQSxlQUFBO0lBQUFDLFFBQUEsR0FBQUQsY0FBQTtJQUFBLElBQUFFLE1BQUEsR0FBQUYsY0FBQSxDQUFBRyxTQUFBO0lBQUFELE1BQUEsQ0FDbENFLFVBQVUsR0FBVixTQUFBQSxVQUFVQSxDQUFDQyxVQUFvQixFQUFRO01BQ3RDO0lBQUE7O0lBR0Q7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUFILE1BQUEsQ0FLQUksVUFBVSxHQUFWLFNBQUFBLFVBQVVBLENBQXFDQyxHQUE2QixFQUFFQyxjQUF1QixFQUFFQyxNQUFzQixFQUFRO01BQ3BJLElBQUlDLEtBQWU7TUFDbkIsSUFBSSxDQUFDRixjQUFjLEVBQUU7UUFDcEJFLEtBQUssR0FBR0gsR0FBRyxDQUFDSSxTQUFTLENBQUMsQ0FBQyxDQUFDQyxTQUFTLENBQUMsQ0FBYTtNQUNoRCxDQUFDLE1BQU07UUFDTixNQUFNQyxJQUFJLEdBQUdOLEdBQUcsQ0FBQ0ksU0FBUyxDQUFDLENBQUMsQ0FBQ0MsU0FB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
500
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEcm9wUG9zaXRpb24iLCJUYWJsZUhpZXJhcmNoeSIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic2V0dXBNaXhpbiIsIl9iYXNlQ2xhc3MiLCJfb25Db3B5Q3V0IiwiZXZ0IiwiZm9yQ29udGV4dE1lbnUiLCJhY3Rpb24iLCJ0YWJsZSIsImdldFNvdXJjZSIsImdldFBhcmVudCIsIm1lbnUiLCJpbnRlcm5hbENvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInNlbGVjdGVkQ29udGV4dHMiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwibGVuZ3RoIiwiTG9nIiwiZXJyb3IiLCJzZXRQcm9wZXJ0eSIsIk1lc3NhZ2VUb2FzdCIsInNob3ciLCJSZXNvdXJjZU1vZGVsSGVscGVyIiwiZ2V0UmVzb3VyY2VNb2RlbCIsImdldFRleHQiLCJnZXRQcm9wZXJ0eSIsIlRhYmxlUnVudGltZSIsImNsZWFyU2VsZWN0aW9uIiwiZmlyZVNlbGVjdGlvbkNoYW5nZSIsInBhc3RlQnV0dG9uIiwiZ2V0QWN0aW9ucyIsImZpbmQiLCJ0b29sYmFyQWN0aW9uIiwidGVzdCIsImdldEFjdGlvbiIsImdldElkIiwic2V0VGltZW91dCIsImZvY3VzIiwiX29uRHJhZ0VudGVyRG9jdW1lbnQiLCJ1aTVFdmVudCIsImRyYWdnZWRDb250ZXh0IiwiZ2V0UGFyYW1ldGVyIiwiZ2V0Q29udGVudCIsImdldFJvd0JpbmRpbmciLCJnZXRCaW5kaW5nIiwicHJldmVudERlZmF1bHQiLCJ0YXJnZXRDb250ZXh0IiwiaXNBbmNlc3Rvck9mIiwiZGlzYWJsZWRCZXR3ZWVuIiwiZGlzYWJsZWRPbiIsInRhYmxlRGVmaW5pdGlvbiIsImdldFRhYmxlRGVmaW5pdGlvbiIsImlzTW92ZUFsbG93ZWRJbmZvIiwiY29udHJvbCIsImlzTW92ZVRvUG9zaXRpb25BbGxvd2VkIiwiY3VzdG9tRnVuY3Rpb24iLCJGUE1IZWxwZXIiLCJnZXRDdXN0b21GdW5jdGlvbiIsIm1vZHVsZU5hbWUiLCJtZXRob2ROYW1lIiwidW5kZWZpbmVkIiwic2FmZUlzTW92ZUFsbG93ZWQiLCJhbm5vdGF0aW9uIiwiYWxsb3dEcm9wQmV0d2Vlbk5vZGVzIiwiTWF0aCIsImFicyIsImdldEluZGV4IiwiZ2V0TGVuZ3RoIiwiY2hhbmdlU2libGluZ0ZvclJvb3RzU3VwcG9ydGVkIiwiaXNEcm9wQmV0d2VlbkFsbG93ZWRGb3JEcmFnIiwiYWxsb3dlZERyb3BQb3NpdGlvbiIsIk9uT3JCZXR3ZWVuIiwiT24iLCJCZXR3ZWVuIiwic2V0RHJvcFBvc2l0aW9uIiwiX29uRHJhZ1N0YXJ0RG9jdW1lbnQiLCJjb250ZXh0IiwiZGlzYWJsZURyYWciLCJpc1VwZGF0YWJsZUNvbnRleHQiLCJ1cGRhdGFibGVQcm9wZXJ0eVBhdGhJbmZvIiwiaXNSZWxhdGl2ZSIsImlzTW92YWJsZUluZm8iLCJpc05vZGVNb3ZhYmxlIiwiX2Vycm9yIiwiX29uRHJvcERvY3VtZW50IiwiQnVzeUxvY2tlciIsImxvY2siLCJkcm9wcGVkT25Db250ZXh0IiwiZHJvcEluZm8iLCJwb3NpdGlvbiIsInBhcmVudENvbnRleHQiLCJjb250ZXh0QmVmb3JlIiwiY29udGV4dEFmdGVyIiwiZ2V0Q29udGV4dEFmdGVyIiwiZ2V0Q29udGV4dEJlZm9yZSIsIm1vdmVkQ29udGV4dCIsIlByb21pc2UiLCJhbGwiLCJkcm9wQ29udGV4dCIsInJlcXVlc3RTaWRlRWZmZWN0c0ZvckNoYW5nZU5leHRTaWJsaW5nQWN0aW9uIiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJtZXNzYWdlIiwidW5sb2NrIiwiX29uQ29sbGFwc2VFeHBhbmROb2RlIiwiX3VpNUV2ZW50IiwiZXhwYW5kIiwicHJvbWlzZUFycmF5IiwibWFwIiwic2luZ2xlQ29udGV4dCIsImlzRXhwYW5kZWQiLCJjb2xsYXBzZSIsIk51bWJlciIsIk1BWF9TQUZFX0lOVEVHRVIiLCJfb25Nb3ZlVXBEb3duIiwibW92ZVVwIiwiYXJndW1lbnRzIiwibWRjVGFibGUiLCJzZXRCdXN5IiwicmVxdWVzdFBhcmVudCIsImNvbnRleHRNb3ZlZCIsIm1vdmVQcm9taXNlIiwicHJldmlvdXNTaWJsaW5nIiwicmVxdWVzdFNpYmxpbmciLCJtb3ZlIiwibmV4dFNpYmxpbmciLCJwYXJlbnQiLCJuZXdJbmRleCIsInNjcm9sbFRvSW5kZXgiLCJmb2N1c1JvdyIsIl9yZXF1ZXN0U2lkZUVmZmVjdHNGb3JIaWVyYXJjaHlBY3Rpb25zIiwicmVxdWVzdFNpZGVFZmZlY3RzRm9yQ29weUFjdGlvbiIsImVudGl0eVBhdGgiLCJkYXRhIiwibWV0YU1vZGVsIiwiZ2V0TW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJ0YXJnZXRPYmplY3QiLCJnZXRDb250ZXh0IiwiY29udmVydE1ldGFNb2RlbENvbnRleHQiLCJNZXRhTW9kZWxDb252ZXJ0ZXIiLCJlbnRpdHlUeXBlIiwidGFyZ2V0VHlwZSIsImFjdGlvbk5hbWUiLCJhbm5vdGF0aW9ucyIsIkhpZXJhcmNoeSIsImhpZXJhcmNoeVF1YWxpZmllciIsImFwcENvbXBvbmVudCIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50Iiwic2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwic2lkZUVmZmVjdHMiLCJnZXRPRGF0YUFjdGlvblNpZGVFZmZlY3RzIiwicmVxdWVzdFNpZGVFZmZlY3RzRm9yT0RhdGFBY3Rpb24iLCJhbGxvd2VkIiwiaXNBbGxvd2VkIiwicGFyZW50QmVmb3JlIiwicGFyYW1zQmVmb3JlIiwiZ2V0RHJvcEJldHdlZW5QYXJhbWV0ZXJzIiwicGFyZW50QWZ0ZXIiLCJwYXJhbXNBZnRlciIsImNvbnRleHRJbmRleCIsIkVycm9yIiwibGlzdEJpbmRpbmciLCJnZXRBbGxDdXJyZW50Q29udGV4dHMiLCJjdHgiLCJpbmZvIiwiaW50ZXJuYWxNb2RlbENvbnRleHQiLCJpc1RhYmxlU29ydGVkIiwibW92ZUNvbnRleHQiLCJmaW5hbGx5IiwicGFyYW1zIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJUYWJsZUhpZXJhcmNoeS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVNldCwgTmF2aWdhdGlvblByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB7IHR5cGUgSUludGVyZmFjZVdpdGhNaXhpbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBCdXN5TG9ja2VyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgKiBhcyBNZXRhTW9kZWxDb252ZXJ0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgRlBNSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0ZQTUhlbHBlclwiO1xuaW1wb3J0IHsgdHlwZSBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgUmVzb3VyY2VNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBNZW51IGZyb20gXCJzYXAvbS9NZW51XCI7XG5pbXBvcnQgTWVzc2FnZVRvYXN0IGZyb20gXCJzYXAvbS9NZXNzYWdlVG9hc3RcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgRHJhZ0Ryb3BJbmZvIGZyb20gXCJzYXAvdWkvY29yZS9kbmQvRHJhZ0Ryb3BJbmZvXCI7XG5pbXBvcnQgdHlwZSBNRENUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgQWN0aW9uVG9vbGJhckFjdGlvbiBmcm9tIFwic2FwL3VpL21kYy9hY3Rpb250b29sYmFyL0FjdGlvblRvb2xiYXJBY3Rpb25cIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHsgdHlwZSBJVGFibGVCbG9jayB9IGZyb20gXCIuLi9UYWJsZUFQSVwiO1xuaW1wb3J0IFRhYmxlUnVudGltZSBmcm9tIFwiLi4vVGFibGVSdW50aW1lXCI7XG5cbmVudW0gRHJvcFBvc2l0aW9uIHtcblx0T24gPSBcIk9uXCIsXG5cdEJldHdlZW4gPSBcIkJldHdlZW5cIixcblx0T25PckJldHdlZW4gPSBcIk9uT3JCZXR3ZWVuXCJcbn1cblxudHlwZSBEcm9wSW5mb3JtYXRpb24gPVxuXHR8IHsgcG9zaXRpb246IERyb3BQb3NpdGlvbi5PbjsgcGFyZW50Q29udGV4dDogQ29udGV4dCB8IG51bGwgfVxuXHR8IHsgcG9zaXRpb246IERyb3BQb3NpdGlvbi5CZXR3ZWVuOyBjb250ZXh0QmVmb3JlOiBDb250ZXh0IHwgbnVsbDsgY29udGV4dEFmdGVyOiBDb250ZXh0IHwgbnVsbCB9O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUYWJsZUhpZXJhcmNoeSBpbXBsZW1lbnRzIElJbnRlcmZhY2VXaXRoTWl4aW4ge1xuXHRzZXR1cE1peGluKF9iYXNlQ2xhc3M6IEZ1bmN0aW9uKTogdm9pZCB7XG5cdFx0Ly8gVGhpcyBtZXRob2QgaXMgbmVlZGVkIHRvIGltcGxlbWVudCBpbnRlcmZhY2UgSUludGVyZmFjZVdpdGhNaXhpblxuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIEN1dC9Db3B5IG9wZXJhdGlvbi5cblx0ICogQHBhcmFtIGV2dCBUaGUgVUk1IGV2ZW50XG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuXHQgKi9cblx0X29uQ29weUN1dCh0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBldnQ6IFVJNUV2ZW50PHt9LCBVSTVFbGVtZW50PiwgZm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sIGFjdGlvbjogXCJDb3B5XCIgfCBcIkN1dFwiKTogdm9pZCB7XG5cdFx0bGV0IHRhYmxlOiBNRENUYWJsZTtcblx0XHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0XHR0YWJsZSA9IGV2dC5nZXRTb3VyY2UoKS5nZXRQYXJlbnQoKSBhcyBNRENUYWJsZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgbWVudSA9IGV2dC5nZXRTb3VyY2UoKS5nZXRQYXJlbnQoKSBhcyBNZW51O1xuXHRcdFx0dGFibGUgPSBtZW51LmdldFBhcmVudCgpPy5nZXRQYXJlbnQoKSBhcyBNRENUYWJsZTtcblx0XHR9XG5cdFx0Y29uc3QgaW50ZXJuYWxDb250ZXh0ID0gdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBzZWxlY3RlZENvbnRleHRzID0gdGhpcy5nZXRTZWxlY3RlZENvbnRleHRzKCk7XG5cdFx0aWYgKHNlbGVjdGVkQ29udGV4dHMubGVuZ3RoID4gMSkge1xuXHRcdFx0TG9nLmVycm9yKGBNdWx0aSAke2FjdGlvbiA9PT0gXCJDdXRcIiA/IFwiY3V0dGluZ1wiIDogXCJjb3B5aW5nXCJ9IGlzIG5vdCBzdXBwb3J0ZWRgKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoXCJub2RlVXBkYXRlc0luZm8vcGFzdGFibGVDb250ZXh0c1wiLCBzZWxlY3RlZENvbnRleHRzKTtcblx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoXCJub2RlVXBkYXRlc0luZm8vbGFzdEFjdGlvblwiLCBhY3Rpb24pO1xuXHRcdE1lc3NhZ2VUb2FzdC5zaG93KFJlc291cmNlTW9kZWxIZWxwZXIuZ2V0UmVzb3VyY2VNb2RlbCh0YWJsZSkuZ2V0VGV4dChcIk1fQ1VUQ09QWV9SRUFEWVwiKSk7XG5cdFx0aWYgKCFmb3JDb250ZXh0TWVudSB8fCBpbnRlcm5hbENvbnRleHQuZ2V0UHJvcGVydHkoXCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIikgPiAwKSB7XG5cdFx0XHRUYWJsZVJ1bnRpbWUuY2xlYXJTZWxlY3Rpb24odGFibGUpO1xuXHRcdFx0dGFibGUuZmlyZVNlbGVjdGlvbkNoYW5nZSgpO1xuXHRcdH0gZWxzZSBpZiAoZm9yQ29udGV4dE1lbnUpIHtcblx0XHRcdC8vIFVzaW5nIHRoZSBjb250ZXh0IG1lbnUgaW1wbGljaXRseSBkZWZpbmVzIGEgY29udGV4dCBmb3IgdGhlIGFjdGlvblxuXHRcdFx0dGFibGUuZmlyZVNlbGVjdGlvbkNoYW5nZSgpO1xuXHRcdH1cblxuXHRcdGludGVybmFsQ29udGV4dC5zZXRQcm9wZXJ0eShcIm5vZGVVcGRhdGVzSW5mby9jdXRFbmFibGVtZW50XCIsIGZhbHNlKTtcblx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9ub2RlVXBkYXRlc0luZm8vY3V0RW5hYmxlbWVudFwiLCBmYWxzZSk7XG5cdFx0aW50ZXJuYWxDb250ZXh0LnNldFByb3BlcnR5KFwibm9kZVVwZGF0ZXNJbmZvL2NvcHlFbmFibGVtZW50XCIsIGZhbHNlKTtcblx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9ub2RlVXBkYXRlc0luZm8vY29weUVuYWJsZW1lbnRcIiwgZmFsc2UpO1xuXHRcdGNvbnN0IHBhc3RlQnV0dG9uID0gKHRhYmxlLmdldEFjdGlvbnMoKSBhcyBBY3Rpb25Ub29sYmFyQWN0aW9uW10pLmZpbmQoKHRvb2xiYXJBY3Rpb24pID0+XG5cdFx0XHQvOjpQYXN0ZSQvLnRlc3QodG9vbGJhckFjdGlvbi5nZXRBY3Rpb24oKS5nZXRJZCgpKVxuXHRcdCk7XG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRwYXN0ZUJ1dHRvbj8uZm9jdXMoKTtcblx0XHR9LCAwKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgZHJhZ2dlZCBlbGVtZW50IGVudGVycyBhIHRhYmxlIHJvdy5cblx0ICogQHBhcmFtIHVpNUV2ZW50IFVJNSBldmVudCBjb21pbmcgZnJvbSB0aGUgTURDIGRyYWcgYW5kIGRyb3AgY29uZmlnXG5cdCAqL1xuXHRfb25EcmFnRW50ZXJEb2N1bWVudChcblx0XHR0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LFxuXHRcdHVpNUV2ZW50OiBVSTVFdmVudDx7IGJpbmRpbmdDb250ZXh0OiBDb250ZXh0OyBkcmFnU291cmNlOiBDb250ZXh0OyBkcm9wUG9zaXRpb246IFwiQmVmb3JlXCIgfCBcIkFmdGVyXCIgfCBcIk9uXCIgfSwgRHJhZ0Ryb3BJbmZvPlxuXHQpOiB2b2lkIHtcblx0XHRjb25zdCBkcmFnZ2VkQ29udGV4dCA9IHVpNUV2ZW50LmdldFBhcmFtZXRlcihcImRyYWdTb3VyY2VcIik7XG5cdFx0aWYgKHRoaXMuZ2V0Q29udGVudCgpLmdldFJvd0JpbmRpbmcoKSAhPT0gZHJhZ2dlZENvbnRleHQuZ2V0QmluZGluZygpKSB7XG5cdFx0XHQvLyBUaGUgZHJhZyBpcyBkb25lIG9uIGEgZGlmZmVyZW50IHRhYmxlIC0+IG5vdCBhdXRob3JpemVkXG5cdFx0XHR1aTVFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHRhcmdldENvbnRleHQ6IENvbnRleHQgfCBudWxsID0gdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiYmluZGluZ0NvbnRleHRcIik7XG5cdFx0aWYgKGRyYWdnZWRDb250ZXh0LmlzQW5jZXN0b3JPZih0YXJnZXRDb250ZXh0KSkge1xuXHRcdFx0Ly8gVGhlIGFuY2VzdG9yIGlzIGRyb3BwZWQgb24gYSBkZXNjZW5kYW50IC0+IG5vdCBhdXRob3JpemVkXG5cdFx0XHR1aTVFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGxldCBkaXNhYmxlZEJldHdlZW4gPSBmYWxzZTtcblx0XHRsZXQgZGlzYWJsZWRPbiA9IGZhbHNlO1xuXHRcdGNvbnN0IHRhYmxlRGVmaW5pdGlvbiA9IHRoaXMuZ2V0VGFibGVEZWZpbml0aW9uKCk7XG5cdFx0Y29uc3QgaXNNb3ZlQWxsb3dlZEluZm8gPSB0YWJsZURlZmluaXRpb24uY29udHJvbC5pc01vdmVUb1Bvc2l0aW9uQWxsb3dlZDtcblx0XHRjb25zdCBjdXN0b21GdW5jdGlvbiA9IGlzTW92ZUFsbG93ZWRJbmZvXG5cdFx0XHQ/IEZQTUhlbHBlci5nZXRDdXN0b21GdW5jdGlvbjwobm9kZTogQ29udGV4dCwgcGFyZW50OiBDb250ZXh0IHwgbnVsbCkgPT4gYm9vbGVhbj4oXG5cdFx0XHRcdFx0aXNNb3ZlQWxsb3dlZEluZm8ubW9kdWxlTmFtZSxcblx0XHRcdFx0XHRpc01vdmVBbGxvd2VkSW5mby5tZXRob2ROYW1lLFxuXHRcdFx0XHRcdHVpNUV2ZW50LmdldFNvdXJjZSgpLmdldFBhcmVudCgpIGFzIENvbnRyb2xcblx0XHRcdCAgKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cblx0XHRpZiAodGFyZ2V0Q29udGV4dCA9PT0gdGhpcy5nZXRDb250ZW50KCkuZ2V0QmluZGluZ0NvbnRleHQoKSkge1xuXHRcdFx0Ly8gVGhlIGRyYWcgaXMgZG9uZSBvbiB0aGUgdGFibGUgaXRzZWxmIC0+IGRyb3AgYXMgcm9vdCBub2RlKVxuXHRcdFx0ZGlzYWJsZWRPbiA9ICF0aGlzLnNhZmVJc01vdmVBbGxvd2VkKGN1c3RvbUZ1bmN0aW9uLCBkcmFnZ2VkQ29udGV4dCwgbnVsbCk7XG5cdFx0XHRkaXNhYmxlZEJldHdlZW4gPSB0cnVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkaXNhYmxlZE9uID0gIXRoaXMuc2FmZUlzTW92ZUFsbG93ZWQoY3VzdG9tRnVuY3Rpb24sIGRyYWdnZWRDb250ZXh0LCB0YXJnZXRDb250ZXh0KTtcblx0XHRcdGRpc2FibGVkQmV0d2VlbiA9IHRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmFsbG93RHJvcEJldHdlZW5Ob2RlcyAhPT0gdHJ1ZTtcblxuXHRcdFx0aWYgKFxuXHRcdFx0XHRNYXRoLmFicyh0YXJnZXRDb250ZXh0LmdldEluZGV4KCkhIC0gZHJhZ2dlZENvbnRleHQuZ2V0SW5kZXgoKSEpID09PSAxICYmXG5cdFx0XHRcdCEodGFyZ2V0Q29udGV4dC5nZXRJbmRleCgpID09PSAwICYmIHVpNUV2ZW50LmdldFBhcmFtZXRlcihcImRyb3BQb3NpdGlvblwiKSA9PT0gXCJCZWZvcmVcIikgJiZcblx0XHRcdFx0IShcblx0XHRcdFx0XHR0YXJnZXRDb250ZXh0LmdldEluZGV4KCkgPT09IHRoaXMuZ2V0Q29udGVudCgpLmdldFJvd0JpbmRpbmcoKS5nZXRMZW5ndGgoKSAtIDEgJiZcblx0XHRcdFx0XHR1aTVFdmVudC5nZXRQYXJhbWV0ZXIoXCJkcm9wUG9zaXRpb25cIikgPT09IFwiQWZ0ZXJcIlxuXHRcdFx0XHQpXG5cdFx0XHQpIHtcblx0XHRcdFx0Ly9cblx0XHRcdFx0ZGlzYWJsZWRCZXR3ZWVuID0gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgdGhlIGRyb3AgYmV0d2VlbiBub2RlIGlzIGFsbG93ZWQsIHdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIHRhcmdldCBpcyBhIHJvb3Qgbm9kZSBhbmQgaWYgdGhlIHRhYmxlIHN1cHBvcnRzIGNoYW5nZVNpYmxpbmdGb3JSb290c1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQhZGlzYWJsZWRCZXR3ZWVuICYmXG5cdFx0XHRcdCF0YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5jaGFuZ2VTaWJsaW5nRm9yUm9vdHNTdXBwb3J0ZWQgJiZcblx0XHRcdFx0dGFyZ2V0Q29udGV4dC5nZXRQcm9wZXJ0eShcIkAkdWk1Lm5vZGUubGV2ZWxcIikgPT09IDFcblx0XHRcdCkge1xuXHRcdFx0XHRkaXNhYmxlZEJldHdlZW4gPSB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDaGVjayBjdXN0b20gbG9naWMgZm9yIGRyb3AgYmV0d2VlbiBpZiB0aGVyZSdzIHNvbWUsIGFuZCBpZiBpdCdzIG5vdCBhbHJlYWR5IGRpc2FibGVkIGF0IHRoZSB0YWJsZSBsZXZlbFxuXHRcdFx0aWYgKGN1c3RvbUZ1bmN0aW9uICYmICFkaXNhYmxlZEJldHdlZW4pIHtcblx0XHRcdFx0ZGlzYWJsZWRCZXR3ZWVuID0gIXRoaXMuaXNEcm9wQmV0d2VlbkFsbG93ZWRGb3JEcmFnKGN1c3RvbUZ1bmN0aW9uLCBkcmFnZ2VkQ29udGV4dCwgdGFyZ2V0Q29udGV4dCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0bGV0IGFsbG93ZWREcm9wUG9zaXRpb246IERyb3BQb3NpdGlvbiA9IERyb3BQb3NpdGlvbi5Pbk9yQmV0d2Vlbjtcblx0XHRpZiAoZGlzYWJsZWRCZXR3ZWVuICYmIGRpc2FibGVkT24pIHtcblx0XHRcdC8vU2V0IHRoZSBlbGVtZW50IGFzIG5vbiBkcm9wcGFibGVcblx0XHRcdHVpNUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmIChkaXNhYmxlZEJldHdlZW4pIHtcblx0XHRcdGFsbG93ZWREcm9wUG9zaXRpb24gPSBEcm9wUG9zaXRpb24uT247XG5cdFx0fSBlbHNlIGlmIChkaXNhYmxlZE9uKSB7XG5cdFx0XHRhbGxvd2VkRHJvcFBvc2l0aW9uID0gRHJvcFBvc2l0aW9uLkJldHdlZW47XG5cdFx0fVxuXHRcdHVpNUV2ZW50LmdldFNvdXJjZSgpLnNldERyb3BQb3NpdGlvbihhbGxvd2VkRHJvcFBvc2l0aW9uKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTdGFydHMgdGhlIGRyYWcgb2YgdGhlIGRvY3VtZW50LlxuXHQgKiBAcGFyYW0gdWk1RXZlbnQgVUk1IGV2ZW50IGNvbWluZyBmcm9tIHRoZSBNREMgZHJhZyBhbmQgZHJvcCBjb25maWdcblx0ICovXG5cdF9vbkRyYWdTdGFydERvY3VtZW50KHRoaXM6IElUYWJsZUJsb2NrICYgVGFibGVIaWVyYXJjaHksIHVpNUV2ZW50OiBVSTVFdmVudDx7IGJpbmRpbmdDb250ZXh0OiBDb250ZXh0IH0sIENvbnRyb2w+KTogdm9pZCB7XG5cdFx0Y29uc3QgY29udGV4dCA9IHVpNUV2ZW50LmdldFBhcmFtZXRlcihcImJpbmRpbmdDb250ZXh0XCIpO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgdGhlIGNvbnRleHQgY2FuIGJlIHVwZGF0ZWQgYWNjb3JkaW5nIHRvIHVwZGF0ZSByZXN0cmljdGlvbnNcblx0XHRsZXQgZGlzYWJsZURyYWcgPSAhVGFibGVSdW50aW1lLmlzVXBkYXRhYmxlQ29udGV4dCh0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpLmFubm90YXRpb24udXBkYXRhYmxlUHJvcGVydHlQYXRoSW5mbywgY29udGV4dCwgZmFsc2UpO1xuXG5cdFx0Ly8gSW4gY2FzZSBvZiBhIFRyZWVUYWJsZSBpbiBhIExpc3RSZXBvcnQgd2l0aCBkcmFmdCwgY2hlY2sgdGhhdCB0aGUgY29udGV4dCBoYXMgbm8gYXNzb2NpYXRlZCBkcmFmdFxuXHRcdGlmICghZGlzYWJsZURyYWcgJiYgIShjb250ZXh0LmdldEJpbmRpbmcoKSBhcyBPRGF0YUxpc3RCaW5kaW5nKS5pc1JlbGF0aXZlKCkpIHtcblx0XHRcdGRpc2FibGVEcmFnID0gY29udGV4dC5nZXRQcm9wZXJ0eShcIkhhc0RyYWZ0RW50aXR5XCIpID09PSB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IGN1c3RvbSBsb2dpYyBpZiB0aGVyZSdzIG9uZVxuXHRcdGNvbnN0IGlzTW92YWJsZUluZm8gPSB0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wuaXNOb2RlTW92YWJsZTtcblx0XHR0cnkge1xuXHRcdFx0aWYgKGlzTW92YWJsZUluZm8gJiYgIWRpc2FibGVEcmFnKSB7XG5cdFx0XHRcdGRpc2FibGVEcmFnID1cblx0XHRcdFx0XHQoXG5cdFx0XHRcdFx0XHRGUE1IZWxwZXIuZ2V0Q3VzdG9tRnVuY3Rpb248KGNvbnRleHRzOiBDb250ZXh0W10pID0+IGJvb2xlYW4+KFxuXHRcdFx0XHRcdFx0XHRpc01vdmFibGVJbmZvLm1vZHVsZU5hbWUsXG5cdFx0XHRcdFx0XHRcdGlzTW92YWJsZUluZm8ubWV0aG9kTmFtZSxcblx0XHRcdFx0XHRcdFx0dWk1RXZlbnQuZ2V0U291cmNlKClcblx0XHRcdFx0XHRcdCkgYXMgRnVuY3Rpb25cblx0XHRcdFx0XHQpKGNvbnRleHQpID09PSBmYWxzZTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChfZXJyb3IpIHtcblx0XHRcdGRpc2FibGVEcmFnID0gZmFsc2U7XG5cdFx0fVxuXHRcdGlmIChkaXNhYmxlRHJhZykge1xuXHRcdFx0Ly9TZXQgdGhlIGVsZW1lbnQgYXMgbm9uIGRyYWdnYWJsZVxuXHRcdFx0dWk1RXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRHJvcHMgdGhlIGRvY3VtZW50LlxuXHQgKiBAcGFyYW0gdWk1RXZlbnQgVUk1IGV2ZW50IGNvbWluZyBmcm9tIHRoZSBNREMgZHJhZyBhbmQgZHJvcCBjb25maWdcblx0ICogQHJldHVybnMgVGhlIFByb21pc2Vcblx0ICovXG5cdGFzeW5jIF9vbkRyb3BEb2N1bWVudChcblx0XHR0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LFxuXHRcdHVpNUV2ZW50OiBVSTVFdmVudDx7XG5cdFx0XHRiaW5kaW5nQ29udGV4dDogQ29udGV4dDtcblx0XHRcdGRyYWdTb3VyY2U6IENvbnRleHQ7XG5cdFx0XHRkcm9wUG9zaXRpb246IHN0cmluZztcblx0XHR9PlxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRCdXN5TG9ja2VyLmxvY2sodGhpcy5nZXRDb250ZW50KCkpO1xuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGRyb3BwZWRPbkNvbnRleHQgPSB1aTVFdmVudC5nZXRQYXJhbWV0ZXIoXCJiaW5kaW5nQ29udGV4dFwiKTtcblx0XHRcdGxldCBkcm9wSW5mbzogRHJvcEluZm9ybWF0aW9uO1xuXHRcdFx0aWYgKGRyb3BwZWRPbkNvbnRleHQgPT09IHRoaXMuZ2V0Q29udGVudCgpLmdldEJpbmRpbmdDb250ZXh0KCkpIHtcblx0XHRcdFx0Ly8gVGhlIGRyb3AgaXMgZG9uZSBvbiB0aGUgdGFibGUgaXRzZWxmIC0+IGRyb3AgYXMgcm9vdCBub2RlKVxuXHRcdFx0XHRkcm9wSW5mbyA9IHsgcG9zaXRpb246IERyb3BQb3NpdGlvbi5PbiwgcGFyZW50Q29udGV4dDogbnVsbCB9O1xuXHRcdFx0fSBlbHNlIGlmICh1aTVFdmVudC5nZXRQYXJhbWV0ZXIoXCJkcm9wUG9zaXRpb25cIikgPT09IERyb3BQb3NpdGlvbi5Pbikge1xuXHRcdFx0XHQvLyBEcm9wIG9uIGEgbm9kZVxuXHRcdFx0XHRkcm9wSW5mbyA9IHsgcG9zaXRpb246IERyb3BQb3NpdGlvbi5PbiwgcGFyZW50Q29udGV4dDogZHJvcHBlZE9uQ29udGV4dCB9O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gRHJvcCBiZXR3ZWVuIDIgbm9kZXNcblx0XHRcdFx0bGV0IGNvbnRleHRCZWZvcmU6IENvbnRleHQgfCBudWxsO1xuXHRcdFx0XHRsZXQgY29udGV4dEFmdGVyOiBDb250ZXh0IHwgbnVsbDtcblx0XHRcdFx0aWYgKHVpNUV2ZW50LmdldFBhcmFtZXRlcihcImRyb3BQb3NpdGlvblwiKSA9PT0gXCJBZnRlclwiKSB7XG5cdFx0XHRcdFx0Y29udGV4dEJlZm9yZSA9IGRyb3BwZWRPbkNvbnRleHQ7XG5cdFx0XHRcdFx0Y29udGV4dEFmdGVyID0gdGhpcy5nZXRDb250ZXh0QWZ0ZXIoZHJvcHBlZE9uQ29udGV4dCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29udGV4dEJlZm9yZSA9IHRoaXMuZ2V0Q29udGV4dEJlZm9yZShkcm9wcGVkT25Db250ZXh0KTtcblx0XHRcdFx0XHRjb250ZXh0QWZ0ZXIgPSBkcm9wcGVkT25Db250ZXh0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRyb3BJbmZvID0geyBwb3NpdGlvbjogRHJvcFBvc2l0aW9uLkJldHdlZW4sIGNvbnRleHRBZnRlciwgY29udGV4dEJlZm9yZSB9O1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBtb3ZlZENvbnRleHQgPSB1aTVFdmVudC5nZXRQYXJhbWV0ZXIoXCJkcmFnU291cmNlXCIpO1xuXHRcdFx0YXdhaXQgUHJvbWlzZS5hbGwoW3RoaXMuZHJvcENvbnRleHQobW92ZWRDb250ZXh0LCBkcm9wSW5mbyksIHRoaXMucmVxdWVzdFNpZGVFZmZlY3RzRm9yQ2hhbmdlTmV4dFNpYmxpbmdBY3Rpb24obW92ZWRDb250ZXh0KV0pO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRNZXNzYWdlVG9hc3Quc2hvdyh0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiTV9UQUJMRURST1BfRkFJTEVEXCIsIFtcIlwiXSkpO1xuXHRcdFx0TG9nLmVycm9yKFwiVGhlIG9wZXJhdGlvbiBpcyB1bnN1Y2Nlc3NmdWwuIFwiICsgKChlcnJvciBhcyBFcnJvcikubWVzc2FnZSA/PyBcIlwiKSk7XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKHRoaXMuZ2V0Q29udGVudCgpKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlciBmb3IgY29sbGFwc2UvZXhwYW5kIGZyb20gdGhlIGNvbnRleHQgbWVudS5cblx0ICogQHBhcmFtIHRoaXNcblx0ICogQHBhcmFtIF91aTVFdmVudFxuXHQgKiBAcGFyYW0gZXhwYW5kXG5cdCAqL1xuXHRhc3luYyBfb25Db2xsYXBzZUV4cGFuZE5vZGUodGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZUhpZXJhcmNoeSwgX3VpNUV2ZW50OiBVSTVFdmVudCwgZXhwYW5kOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qgc2VsZWN0ZWRDb250ZXh0cyA9IHRoaXMuZ2V0U2VsZWN0ZWRDb250ZXh0cygpO1xuXHRcdGlmIChleHBhbmQpIHtcblx0XHRcdGNvbnN0IHByb21pc2VBcnJheSA9IHNlbGVjdGVkQ29udGV4dHMubWFwKGFzeW5jIChzaW5nbGVDb250ZXh0OiBDb250ZXh0KSA9PiB7XG5cdFx0XHRcdC8vIENoZWNraW5nIGZvciBmYWxzZSBzcGVjaWZpY2FsbHk7IHVuZGVmaW5lZCBtZWFucyB0aGUgbm9kZSBjYW5ub3QgZXhwYW5kL2NvbGxhcHNlXG5cdFx0XHRcdGlmIChzaW5nbGVDb250ZXh0LmlzRXhwYW5kZWQoKSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0Ly8gVGVtcG9yYXJ5IHdvcmthcm91bmQgZHVlIHRvIG1vZGVsIGxpbWl0YXRpb24uXG5cdFx0XHRcdFx0Ly8gV2UgbmVlZCB0byBjb2xsYXBzZSBhIG5vZGUgYmVmb3JlIGV4cGFuZGluZyBpdCB0byBlbnN1cmUgd2UgZXhwYW5kIGl0IGNvbXBsZXRlbHkuXG5cdFx0XHRcdFx0Ly8gV2lsbCBiZSBjaGFuZ2VkIG9uY2UgdGhlIG1vZGVsIGZpeGVzIHRoZSBpc3N1ZS5cblx0XHRcdFx0XHRpZiAoc2luZ2xlQ29udGV4dC5pc0V4cGFuZGVkKCkgPT09IHRydWUpIHtcblx0XHRcdFx0XHRcdGF3YWl0IHNpbmdsZUNvbnRleHQuY29sbGFwc2UoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHNpbmdsZUNvbnRleHQuZXhwYW5kKE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlQXJyYXkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhd2FpdCBQcm9taXNlLmFsbChcblx0XHRcdFx0c2VsZWN0ZWRDb250ZXh0cy5tYXAoYXN5bmMgKHNpbmdsZUNvbnRleHQ6IENvbnRleHQpID0+IHtcblx0XHRcdFx0XHRpZiAoc2luZ2xlQ29udGV4dC5pc0V4cGFuZGVkKCkgPT09IHRydWUpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzaW5nbGVDb250ZXh0LmNvbGxhcHNlKHRydWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEludGVybmFsIG1ldGhvZCB0byBtb3ZlIGEgcm93IHVwIG9yIGRvd24gaW4gYSBUcmVlIHRhYmxlLlxuXHQgKiBAcGFyYW0gX3VpNUV2ZW50XG5cdCAqIEBwYXJhbSBtb3ZlVXAgVHJ1ZSBmb3IgbW92ZSB1cCwgZmFsc2UgZm9yIG1vdmUgZG93blxuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcblx0ICovXG5cdGFzeW5jIF9vbk1vdmVVcERvd24odGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZUhpZXJhcmNoeSwgX3VpNUV2ZW50OiBVSTVFdmVudCwgbW92ZVVwOiBib29sZWFuLCBmb3JDb250ZXh0TWVudSA9IGZhbHNlKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qgc2VsZWN0ZWRDb250ZXh0cyA9IHRoaXMuZ2V0U2VsZWN0ZWRDb250ZXh0cygpO1xuXHRcdGlmIChzZWxlY3RlZENvbnRleHRzLmxlbmd0aCAhPT0gMSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBtZGNUYWJsZSA9IHRoaXMuZ2V0Q29udGVudCgpO1xuXHRcdG1kY1RhYmxlLnNldEJ1c3kodHJ1ZSk7XG5cblx0XHQvLyBNb3ZlIHRoZSBjb250ZXh0IHVwIG9yIGRvd25cblx0XHRjb25zdCBtb3ZlZENvbnRleHQgPSBzZWxlY3RlZENvbnRleHRzWzBdO1xuXHRcdGNvbnN0IHBhcmVudENvbnRleHQgPSBhd2FpdCBtb3ZlZENvbnRleHQucmVxdWVzdFBhcmVudCgpO1xuXHRcdGxldCBjb250ZXh0TW92ZWQgPSBmYWxzZTtcblx0XHRsZXQgbW92ZVByb21pc2UgPSBudWxsO1xuXHRcdGlmIChtb3ZlVXApIHtcblx0XHRcdGNvbnN0IHByZXZpb3VzU2libGluZyA9IGF3YWl0IG1vdmVkQ29udGV4dC5yZXF1ZXN0U2libGluZygtMSk7XG5cdFx0XHRpZiAocHJldmlvdXNTaWJsaW5nKSB7XG5cdFx0XHRcdG1vdmVQcm9taXNlID0gbW92ZWRDb250ZXh0Lm1vdmUoeyBuZXh0U2libGluZzogcHJldmlvdXNTaWJsaW5nLCBwYXJlbnQ6IHBhcmVudENvbnRleHQgfSk7XG5cdFx0XHRcdGNvbnRleHRNb3ZlZCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IG5leHRTaWJsaW5nID0gYXdhaXQgbW92ZWRDb250ZXh0LnJlcXVlc3RTaWJsaW5nKDEpO1xuXHRcdFx0aWYgKG5leHRTaWJsaW5nKSB7XG5cdFx0XHRcdG1vdmVQcm9taXNlID0gbmV4dFNpYmxpbmcubW92ZSh7IG5leHRTaWJsaW5nOiBtb3ZlZENvbnRleHQsIHBhcmVudDogcGFyZW50Q29udGV4dCB9KTtcblx0XHRcdFx0Y29udGV4dE1vdmVkID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRhd2FpdCBQcm9taXNlLmFsbChbbW92ZVByb21pc2UsIHRoaXMucmVxdWVzdFNpZGVFZmZlY3RzRm9yQ2hhbmdlTmV4dFNpYmxpbmdBY3Rpb24obW92ZWRDb250ZXh0KV0pO1xuXG5cdFx0Ly8gU2Nyb2xsIHRvIHRoZSBuZXcgcG9zaXRpb25cblx0XHRjb25zdCBuZXdJbmRleCA9IG1vdmVkQ29udGV4dC5nZXRJbmRleCgpO1xuXHRcdGlmIChjb250ZXh0TW92ZWQgJiYgbmV3SW5kZXggIT09IHVuZGVmaW5lZCAmJiBuZXdJbmRleCA+PSAwKSB7XG5cdFx0XHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0XHRcdG1kY1RhYmxlLnNjcm9sbFRvSW5kZXgobmV3SW5kZXgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bWRjVGFibGUuZm9jdXNSb3cobmV3SW5kZXgpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRtZGNUYWJsZS5zZXRCdXN5KGZhbHNlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXF1ZXN0cyB0aGUgc2lkZSBlZmZlY3QgZm9yIHRoZSBDaGFuZ2VOZXh0U2libGluZ0FjdGlvbi5cblx0ICogQHBhcmFtIG1vdmVkQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IGhhcyBiZWVuIG1vdmVkXG5cdCAqIEByZXR1cm5zIEEgUHJvbWlzZVxuXHQgKi9cblx0YXN5bmMgcmVxdWVzdFNpZGVFZmZlY3RzRm9yQ2hhbmdlTmV4dFNpYmxpbmdBY3Rpb24odGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZUhpZXJhcmNoeSwgbW92ZWRDb250ZXh0OiBDb250ZXh0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIHRoaXMuX3JlcXVlc3RTaWRlRWZmZWN0c0ZvckhpZXJhcmNoeUFjdGlvbnMobW92ZWRDb250ZXh0LCBcIkNoYW5nZU5leHRTaWJsaW5nQWN0aW9uXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlcXVlc3RzIHRoZSBzaWRlIGVmZmVjdCBmb3IgdGhlIENvcHlBY3Rpb24uXG5cdCAqIEBwYXJhbSBtb3ZlZENvbnRleHQgVGhlIGNvbnRleHQgdGhhdCBoYXMgYmVlbiBtb3ZlZFxuXHQgKiBAcmV0dXJucyBBIFByb21pc2Vcblx0ICovXG5cdGFzeW5jIHJlcXVlc3RTaWRlRWZmZWN0c0ZvckNvcHlBY3Rpb24odGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZUhpZXJhcmNoeSwgbW92ZWRDb250ZXh0OiBDb250ZXh0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIHRoaXMuX3JlcXVlc3RTaWRlRWZmZWN0c0ZvckhpZXJhcmNoeUFjdGlvbnMobW92ZWRDb250ZXh0LCBcIkNvcHlBY3Rpb25cIik7XG5cdH1cblxuXHQvKipcblx0ICogUmVxdWVzdHMgdGhlIHNpZGUgZWZmZWN0IGZvciB0aGUgQ29weUFjdGlvbiBvciBDaGFuZ2VOZXh0U2libGluZ0FjdGlvbi5cblx0ICogQHBhcmFtIG1vdmVkQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IGhhcyBiZWVuIG1vdmVkXG5cdCAqIEBwYXJhbSBhY3Rpb25cblx0ICogQHJldHVybnMgQSBQcm9taXNlXG5cdCAqL1xuXHRhc3luYyBfcmVxdWVzdFNpZGVFZmZlY3RzRm9ySGllcmFyY2h5QWN0aW9ucyhcblx0XHR0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LFxuXHRcdG1vdmVkQ29udGV4dDogQ29udGV4dCxcblx0XHRhY3Rpb246IFwiQ2hhbmdlTmV4dFNpYmxpbmdBY3Rpb25cIiB8IFwiQ29weUFjdGlvblwiXG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGVudGl0eVBhdGggPSB0aGlzLmdldENvbnRlbnQoKS5kYXRhKFwibWV0YVBhdGhcIik7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gbW92ZWRDb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cblx0XHRjb25zdCB0YXJnZXRPYmplY3QgPSBtZXRhTW9kZWwuZ2V0Q29udGV4dChlbnRpdHlQYXRoKTtcblx0XHRjb25zdCBjb252ZXJ0TWV0YU1vZGVsQ29udGV4dCA9IE1ldGFNb2RlbENvbnZlcnRlci5jb252ZXJ0TWV0YU1vZGVsQ29udGV4dCh0YXJnZXRPYmplY3QpIGFzIE5hdmlnYXRpb25Qcm9wZXJ0eSB8IEVudGl0eVNldDtcblx0XHRjb25zdCBlbnRpdHlUeXBlID0gKGNvbnZlcnRNZXRhTW9kZWxDb250ZXh0IGFzIE5hdmlnYXRpb25Qcm9wZXJ0eSkudGFyZ2V0VHlwZSA/PyAoY29udmVydE1ldGFNb2RlbENvbnRleHQgYXMgRW50aXR5U2V0KS5lbnRpdHlUeXBlO1xuXHRcdGNvbnN0IGFjdGlvbk5hbWUgPSBlbnRpdHlUeXBlLmFubm90YXRpb25zLkhpZXJhcmNoeT8uW1xuXHRcdFx0YFJlY3Vyc2l2ZUhpZXJhcmNoeUFjdGlvbnMjJHt0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wuaGllcmFyY2h5UXVhbGlmaWVyID8/IFwiXCJ9YFxuXHRcdF0/LlthY3Rpb25dIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHRcdGlmIChhY3Rpb25OYW1lKSB7XG5cdFx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy5nZXRDb250ZW50KCkpO1xuXHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNTZXJ2aWNlID0gYXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHMgPSBzaWRlRWZmZWN0c1NlcnZpY2UuZ2V0T0RhdGFBY3Rpb25TaWRlRWZmZWN0cyhhY3Rpb25OYW1lLCBtb3ZlZENvbnRleHQpO1xuXHRcdFx0aWYgKHNpZGVFZmZlY3RzKSB7XG5cdFx0XHRcdGF3YWl0IHNpZGVFZmZlY3RzU2VydmljZS5yZXF1ZXN0U2lkZUVmZmVjdHNGb3JPRGF0YUFjdGlvbihzaWRlRWZmZWN0cywgbW92ZWRDb250ZXh0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2FmZWx5IGNoZWNrcyBpZiBtb3ZpbmcgYSBub2RlIGlzIGFsbG93ZWQuXG5cdCAqIEBwYXJhbSBjdXN0b21GdW5jdGlvblxuXHQgKiBAcGFyYW0gbW92ZWRDb250ZXh0XG5cdCAqIEBwYXJhbSBwYXJlbnRDb250ZXh0XG5cdCAqIEByZXR1cm5zIFRydWUgaWYgYWxsb3dlZFxuXHQgKi9cblx0cHJpdmF0ZSBzYWZlSXNNb3ZlQWxsb3dlZChcblx0XHRjdXN0b21GdW5jdGlvbjogKChjb250ZXh0OiBDb250ZXh0LCBwYXJlbnQ6IENvbnRleHQgfCBudWxsKSA9PiBib29sZWFuKSB8IHVuZGVmaW5lZCxcblx0XHRtb3ZlZENvbnRleHQ6IENvbnRleHQsXG5cdFx0cGFyZW50Q29udGV4dDogQ29udGV4dCB8IG51bGxcblx0KTogYm9vbGVhbiB7XG5cdFx0aWYgKCFjdXN0b21GdW5jdGlvbikge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0bGV0IGFsbG93ZWQgPSB0cnVlO1xuXHRcdHRyeSB7XG5cdFx0XHRhbGxvd2VkID0gY3VzdG9tRnVuY3Rpb24obW92ZWRDb250ZXh0LCBwYXJlbnRDb250ZXh0KSA9PT0gdHJ1ZTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IGV4ZWN1dGUgZnVuY3Rpb24gcmVsYXRlZCB0byBpc01vdmVUb1Bvc2l0aW9uQWxsb3dlZFwiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0YWxsb3dlZCA9IHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGFsbG93ZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlzIGRyb3AgXCJiZXR3ZWVuXCIgaXMgYWxsb3dlZCBieSBjdXN0b20gbG9naWMgZm9yIGEgZ2l2ZW4gdGFyZ2V0Q29udGV4dC5cblx0ICogQHBhcmFtIGN1c3RvbUZ1bmN0aW9uXG5cdCAqIEBwYXJhbSBkcmFnZ2VkQ29udGV4dFxuXHQgKiBAcGFyYW0gdGFyZ2V0Q29udGV4dFxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIGFsbG93ZWRcblx0ICovXG5cdHByaXZhdGUgaXNEcm9wQmV0d2VlbkFsbG93ZWRGb3JEcmFnKFxuXHRcdGN1c3RvbUZ1bmN0aW9uOiAoY29udGV4dDogQ29udGV4dCwgcGFyZW50OiBDb250ZXh0IHwgbnVsbCkgPT4gYm9vbGVhbixcblx0XHRkcmFnZ2VkQ29udGV4dDogQ29udGV4dCxcblx0XHR0YXJnZXRDb250ZXh0OiBDb250ZXh0XG5cdCk6IGJvb2xlYW4ge1xuXHRcdGxldCBpc0FsbG93ZWQgPSB0cnVlO1xuXG5cdFx0Ly8gRGV0ZXJtaW5lIHdoYXQgdG8gZG8gaWYgd2UgZHJvcCBiZWZvcmUgdGFyZ2V0Q29udGV4dFxuXHRcdGNvbnN0IGNvbnRleHRCZWZvcmUgPSB0aGlzLmdldENvbnRleHRCZWZvcmUodGFyZ2V0Q29udGV4dCk7XG5cdFx0Y29uc3QgcGFyZW50QmVmb3JlID0gY29udGV4dEJlZm9yZSA9PT0gbnVsbCA/IG51bGwgOiBjb250ZXh0QmVmb3JlLmdldFBhcmVudCgpO1xuXHRcdGNvbnN0IHBhcmFtc0JlZm9yZSA9IHRoaXMuZ2V0RHJvcEJldHdlZW5QYXJhbWV0ZXJzKGNvbnRleHRCZWZvcmUsIHBhcmVudEJlZm9yZSwgdGFyZ2V0Q29udGV4dCwgdGFyZ2V0Q29udGV4dC5nZXRQYXJlbnQoKSk7XG5cblx0XHQvLyBEZXRlcm1pbmUgd2hhdCB0byBkbyBpZiB3ZSBkcm9wIGFmdGVyIHRhcmdldENvbnRleHRcblx0XHRjb25zdCBjb250ZXh0QWZ0ZXIgPSB0aGlzLmdldENvbnRleHRBZnRlcih0YXJnZXRDb250ZXh0KTtcblx0XHRjb25zdCBwYXJlbnRBZnRlciA9IGNvbnRleHRBZnRlciA9PT0gbnVsbCA/IG51bGwgOiBjb250ZXh0QWZ0ZXIuZ2V0UGFyZW50KCk7XG5cdFx0Y29uc3QgcGFyYW1zQWZ0ZXIgPSB0aGlzLmdldERyb3BCZXR3ZWVuUGFyYW1ldGVycyh0YXJnZXRDb250ZXh0LCB0YXJnZXRDb250ZXh0LmdldFBhcmVudCgpLCBjb250ZXh0QWZ0ZXIsIHBhcmVudEFmdGVyKTtcblxuXHRcdC8vIElmIHBhcmFtc0JlZm9yZSBvciBwYXJhbXNBZnRlciBjYW5ub3QgYmUgZGV0ZXJtaW5lZCAoYmVjYXVzZSBwYXJlbnRzIGFyZSBub3QgbG9hZGVkKSwgd2UgYWxsb3cgZHJvcCBiZXR3ZWVuIGFuZCBkbyB0aGUgcmVhbCBjaGVjayBpbiBvbkRyb3BEb2N1bWVudFxuXHRcdGlmIChwYXJhbXNCZWZvcmUgIT09IHVuZGVmaW5lZCAmJiBwYXJhbXNBZnRlciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAocGFyYW1zQmVmb3JlLnBhcmVudCA9PT0gcGFyYW1zQWZ0ZXIucGFyZW50KSB7XG5cdFx0XHRcdC8vIERyb3BwaW5nIGJlZm9yZSBvciBhZnRlciB3aWxsIG1vdmUgdW5kZXIgdGhlIHNhbWUgcGFyZW50IC0tPiB3ZSBjYWxsIHRoZSBjdXN0b20gbG9naWMgb25seSBvbmNlXG5cdFx0XHRcdGlzQWxsb3dlZCA9IHRoaXMuc2FmZUlzTW92ZUFsbG93ZWQoY3VzdG9tRnVuY3Rpb24sIGRyYWdnZWRDb250ZXh0LCBwYXJhbXNCZWZvcmUucGFyZW50KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIEFzIHRoZSBNREMgdGFibGUgY2Fubm90IGRpc2FibGUgZHJvcCBiZWZvcmUgYW5kIGFmdGVyIHNlcGFyYXRlbHksIHdlIGRpc2FibGUgZHJvcCBiZXR3ZWVuIG9ubHkgaWYgYm90aCBkcm9wIGJlZm9yZSBhbmQgYWZ0ZXIgYXJlIGZvcmJpZGRlblxuXHRcdFx0XHRpc0FsbG93ZWQgPVxuXHRcdFx0XHRcdHRoaXMuc2FmZUlzTW92ZUFsbG93ZWQoY3VzdG9tRnVuY3Rpb24sIGRyYWdnZWRDb250ZXh0LCBwYXJhbXNCZWZvcmUucGFyZW50KSB8fFxuXHRcdFx0XHRcdHRoaXMuc2FmZUlzTW92ZUFsbG93ZWQoY3VzdG9tRnVuY3Rpb24sIGRyYWdnZWRDb250ZXh0LCBwYXJhbXNBZnRlci5wYXJlbnQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBpc0FsbG93ZWQ7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY29udGV4dCB0aGF0IGlzIHBsYWNlZCBiZWZvcmUgYSBnaXZlbiBjb250ZXh0IGluIGEgTGlzdEJpbmRpbmcuXG5cdCAqIEBwYXJhbSBjb250ZXh0XG5cdCAqIEByZXR1cm5zIFRoZSBjb250ZXh0IGJlZm9yZSwgb3IgbnVsbFxuXHQgKi9cblx0cHJpdmF0ZSBnZXRDb250ZXh0QmVmb3JlKGNvbnRleHQ6IENvbnRleHQpOiBDb250ZXh0IHwgbnVsbCB7XG5cdFx0Y29uc3QgY29udGV4dEluZGV4ID0gY29udGV4dC5nZXRJbmRleCgpO1xuXHRcdGlmIChjb250ZXh0SW5kZXggPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBlcnJvclwiKTtcblx0XHR9XG5cblx0XHRjb25zdCBsaXN0QmluZGluZyA9IGNvbnRleHQuZ2V0QmluZGluZygpIGFzIE9EYXRhTGlzdEJpbmRpbmc7XG5cdFx0cmV0dXJuIGNvbnRleHRJbmRleCA9PT0gMFxuXHRcdFx0PyBudWxsXG5cdFx0XHQ6IGxpc3RCaW5kaW5nLmdldEFsbEN1cnJlbnRDb250ZXh0cygpLmZpbmQoKGN0eCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBjdHguZ2V0SW5kZXgoKSA9PT0gY29udGV4dEluZGV4IC0gMTtcblx0XHRcdCAgfSkgPz8gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBjb250ZXh0IHRoYXQgaXMgcGxhY2VkIGFmdGVyIGEgZ2l2ZW4gY29udGV4dCBpbiBhIExpc3RCaW5kaW5nLlxuXHQgKiBAcGFyYW0gY29udGV4dFxuXHQgKiBAcmV0dXJucyBUaGUgY29udGV4dCBhZnRlciwgb3IgbnVsbFxuXHQgKi9cblx0cHJpdmF0ZSBnZXRDb250ZXh0QWZ0ZXIoY29udGV4dDogQ29udGV4dCk6IENvbnRleHQgfCBudWxsIHtcblx0XHRjb25zdCBjb250ZXh0SW5kZXggPSBjb250ZXh0LmdldEluZGV4KCk7XG5cdFx0aWYgKGNvbnRleHRJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGVycm9yXCIpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGxpc3RCaW5kaW5nID0gY29udGV4dC5nZXRCaW5kaW5nKCkgYXMgT0RhdGFMaXN0QmluZGluZztcblx0XHRyZXR1cm4gKFxuXHRcdFx0bGlzdEJpbmRpbmcuZ2V0QWxsQ3VycmVudENvbnRleHRzKCkuZmluZCgoY3R4KSA9PiB7XG5cdFx0XHRcdHJldHVybiBjdHguZ2V0SW5kZXgoKSA9PT0gY29udGV4dEluZGV4ICsgMTtcblx0XHRcdH0pID8/IG51bGxcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgaW5mb3JtYXRpb24gdG8gcGVyZm9ybSBhIGRyb3AgYmV0d2VlbiAyIG5vZGVzOiB0aGUgbmV3IHBhcmVudCBhbmQgdGhlIG5leHQgc2libGluZy5cblx0ICogQHBhcmFtIGNvbnRleHRCZWZvcmUgQ29udGV4dCBhZnRlciB3aGljaCB0aGUgZHJvcCBpcyBkb25lXG5cdCAqIEBwYXJhbSBwYXJlbnRCZWZvcmUgUGFyZW50IG9mIGNvbnRleHRCZWZvcmUgKHVuZGVmaW5lZCBpZiBub3Qga25vd24pXG5cdCAqIEBwYXJhbSBjb250ZXh0QWZ0ZXIgQ29udGV4dCBiZWZvcmUgd2hpY2ggdGhlIGRyb3AgaXMgZG9uZVxuXHQgKiBAcGFyYW0gcGFyZW50QWZ0ZXIgUGFyZW50IG9mIGNvbnRleHRBZnRlciAodW5kZWZpbmVkIGlmIG5vdCBrbm93bilcblx0ICogQHJldHVybnMgVGhlIG5ldyBwYXJlbnQgYW5kIHRoZSBuZXh0IHNpYmxpbmcsIG9yIHVuZGVmaW5lZCBpZiBpdCBjYW5ub3QgYmUgZGV0ZXJtaW5lZFxuXHQgKi9cblx0cHJpdmF0ZSBnZXREcm9wQmV0d2VlblBhcmFtZXRlcnMoXG5cdFx0Y29udGV4dEJlZm9yZTogQ29udGV4dCB8IG51bGwsXG5cdFx0cGFyZW50QmVmb3JlOiBDb250ZXh0IHwgbnVsbCB8IHVuZGVmaW5lZCxcblx0XHRjb250ZXh0QWZ0ZXI6IENvbnRleHQgfCBudWxsLFxuXHRcdHBhcmVudEFmdGVyOiBDb250ZXh0IHwgbnVsbCB8IHVuZGVmaW5lZFxuXHQpOiB7IHBhcmVudDogQ29udGV4dCB8IG51bGw7IG5leHRTaWJsaW5nPzogQ29udGV4dCB8IG51bGwgfSB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKGNvbnRleHRCZWZvcmUgPT09IG51bGwpIHtcblx0XHRcdC8vIERyb3AgYmVmb3JlIGZpcnN0IG5vZGUgLS0+IG1vdmUgYXMgZmlyc3Qgcm9vdCBub2RlXG5cdFx0XHRyZXR1cm4geyBwYXJlbnQ6IG51bGwsIG5leHRTaWJsaW5nOiBjb250ZXh0QWZ0ZXIgfTtcblx0XHR9IGVsc2UgaWYgKGNvbnRleHRBZnRlciA9PT0gbnVsbCkge1xuXHRcdFx0Ly8gRHJvcCBhZnRlciBsYXN0IG5vZGUgLS0+IG1vdmUgYXMgbmV4dCBzaWJsaW5nIG9mIHRoZSBsYXN0IG5vZGVcblx0XHRcdHJldHVybiBwYXJlbnRCZWZvcmUgIT09IHVuZGVmaW5lZCA/IHsgcGFyZW50OiBwYXJlbnRCZWZvcmUsIG5leHRTaWJsaW5nOiBudWxsIH0gOiB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIGlmIChwYXJlbnRBZnRlciA9PT0gY29udGV4dEJlZm9yZSkge1xuXHRcdFx0Ly8gRHJvcCBiZXR3ZWVuIGEgcGFyZW50IGFuZCBpdHMgZmlyc3QgY2hpbGQgLS0+IG1vdmUgYXMgZmlyc3QgY2hpbGQgb2YgdGhlIHBhcmVudFxuXHRcdFx0cmV0dXJuIHsgcGFyZW50OiBjb250ZXh0QmVmb3JlLCBuZXh0U2libGluZzogY29udGV4dEFmdGVyIH07XG5cdFx0fSBlbHNlIGlmIChwYXJlbnRCZWZvcmUgPT09IHVuZGVmaW5lZCB8fCBwYXJlbnRBZnRlciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBJZiBvbmUgb2YgdGhlIHBhcmVudCBpcyBub3Qga25vd24sIHdlIGRvbid0IGtub3cgd2hhdCB0byBkb1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9IGVsc2UgaWYgKHBhcmVudEJlZm9yZSA9PT0gcGFyZW50QWZ0ZXIpIHtcblx0XHRcdC8vIERyb3AgYmV0d2VlbiAyIHNpYmxpbmdzXG5cdFx0XHRyZXR1cm4geyBwYXJlbnQ6IHBhcmVudEJlZm9yZSwgbmV4dFNpYmxpbmc6IGNvbnRleHRBZnRlciB9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBOb2RlWFxuXHRcdFx0Ly8gIC4uLi5cblx0XHRcdC8vICAgICB8LS0gY29udGV4dEJlZm9yZVxuXHRcdFx0Ly8gY29udGV4dEFmdGVyXG5cdFx0XHQvLyAtLT4gTW92ZSBhcyB0aGUgbmV4dCBzaWJsaW5nIG9mIGNvbnRleHRCZWZvcmVcblx0XHRcdHJldHVybiB7IHBhcmVudDogcGFyZW50QmVmb3JlLCBuZXh0U2libGluZzogbnVsbCB9O1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBJbnRlcm5hbCBtZXRob2QgdG8gZHJvcCBhIGNvbnRleHQgb24gb3IgYmV0d2VlbiAyIG5vZGVzLlxuXHQgKiBAcGFyYW0gY29udGV4dFxuXHQgKiBAcGFyYW0gaW5mb1xuXHQgKiBAcmV0dXJucyBUaGUgbW92ZSBQcm9taXNlXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGRyb3BDb250ZXh0KHRoaXM6IElUYWJsZUJsb2NrICYgVGFibGVIaWVyYXJjaHksIGNvbnRleHQ6IENvbnRleHQsIGluZm86IERyb3BJbmZvcm1hdGlvbik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGlzTW92ZUFsbG93ZWRJbmZvID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLmlzTW92ZVRvUG9zaXRpb25BbGxvd2VkO1xuXHRcdGNvbnN0IGN1c3RvbUZ1bmN0aW9uID0gaXNNb3ZlQWxsb3dlZEluZm9cblx0XHRcdD8gRlBNSGVscGVyLmdldEN1c3RvbUZ1bmN0aW9uPChub2RlOiBDb250ZXh0LCBwYXJlbnQ6IENvbnRleHQgfCBudWxsKSA9PiBib29sZWFuPihcblx0XHRcdFx0XHRpc01vdmVBbGxvd2VkSW5mby5tb2R1bGVOYW1lLFxuXHRcdFx0XHRcdGlzTW92ZUFsbG93ZWRJbmZvLm1ldGhvZE5hbWUsXG5cdFx0XHRcdFx0dGhpcy5nZXRDb250ZW50KClcblx0XHRcdCAgKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgdGFibGUgPSB0aGlzLmdldENvbnRlbnQoKTtcblx0XHR0YWJsZS5zZXRCdXN5KHRydWUpO1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWxDb250ZXh0ID0gdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBpc1RhYmxlU29ydGVkID0gaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJpc1NvcnRlZFwiKSA9PT0gdHJ1ZTtcblxuXHRcdGNvbnN0IG1vdmVDb250ZXh0ID0gYXN5bmMgKHBhcmVudDogQ29udGV4dCB8IG51bGwsIG5leHRTaWJsaW5nPzogQ29udGV4dCB8IG51bGwpOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0XHRcdC8vIFdlIGNoZWNrIGlmIHRoZSBtb3ZlIGlzIGFsbG93ZWQgYnkgY3VzdG9tIGxvZ2ljIChpZiBhbnkpLCBhcyB0aGlzIGNoZWNrIG1pZ2h0XG5cdFx0XHQvLyBub3QgaGF2ZSBiZWVuIGRvbmUgaW4gb25EcmFnRW50ZXJEb2N1bWVudCBpZiB0aGUgcGFyZW50IHdhcyBub3QgbG9hZGVkIHlldC5cblx0XHRcdGlmICh0aGlzLnNhZmVJc01vdmVBbGxvd2VkKGN1c3RvbUZ1bmN0aW9uLCBjb250ZXh0LCBwYXJlbnQpKSB7XG5cdFx0XHRcdC8vIElmIHRoZSB0YWJsZSBpcyBzb3J0ZWQsIHdlIGlnbm9yZSB0aGUgc2libGluZyBhcyB0aGUgcG9zaXRpb24gc2hhbGwgYmUgZGV0ZXJtaW5lZCBieSB0aGUgc2VydmVyXG5cdFx0XHRcdHJldHVybiBjb250ZXh0Lm1vdmUoeyBwYXJlbnQsIG5leHRTaWJsaW5nOiBpc1RhYmxlU29ydGVkID8gdW5kZWZpbmVkIDogbmV4dFNpYmxpbmcgfSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRNZXNzYWdlVG9hc3Quc2hvdyh0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiTV9UQUJMRV9EUk9QX05PVF9BTExPV0VEXCIpKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0aWYgKGluZm8ucG9zaXRpb24gPT09IERyb3BQb3NpdGlvbi5Pbikge1xuXHRcdFx0Ly8gRHJvcCBvbiBhIG5vZGVcblx0XHRcdHJldHVybiBtb3ZlQ29udGV4dChpbmZvLnBhcmVudENvbnRleHQpLmZpbmFsbHkoKCkgPT4gdGFibGUuc2V0QnVzeShmYWxzZSkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBEcm9wIGJldHdlZW4gMiBub2Rlc1xuXHRcdFx0Y29uc3QgW3BhcmVudEJlZm9yZSwgcGFyZW50QWZ0ZXJdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuXHRcdFx0XHRpbmZvLmNvbnRleHRCZWZvcmU/LnJlcXVlc3RQYXJlbnQoKSA/PyBudWxsLFxuXHRcdFx0XHRpbmZvLmNvbnRleHRBZnRlcj8ucmVxdWVzdFBhcmVudCgpID8/IG51bGxcblx0XHRcdF0pO1xuXHRcdFx0Y29uc3QgcGFyYW1zID0gdGhpcy5nZXREcm9wQmV0d2VlblBhcmFtZXRlcnMoaW5mby5jb250ZXh0QmVmb3JlLCBwYXJlbnRCZWZvcmUsIGluZm8uY29udGV4dEFmdGVyLCBwYXJlbnRBZnRlcikhO1xuXHRcdFx0cmV0dXJuIG1vdmVDb250ZXh0KHBhcmFtcy5wYXJlbnQsIHBhcmFtcy5uZXh0U2libGluZykuZmluYWxseSgoKSA9PiB0YWJsZS5zZXRCdXN5KGZhbHNlKSk7XG5cdFx0fVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O01Bc0JLQSxZQUFZLDBCQUFaQSxZQUFZO0lBQVpBLFlBQVk7SUFBWkEsWUFBWTtJQUFaQSxZQUFZO0lBQUEsT0FBWkEsWUFBWTtFQUFBLEVBQVpBLFlBQVk7RUFBQSxJQVVJQyxjQUFjO0lBQUEsU0FBQUEsZUFBQTtJQUFBQyxRQUFBLEdBQUFELGNBQUE7SUFBQSxJQUFBRSxNQUFBLEdBQUFGLGNBQUEsQ0FBQUcsU0FBQTtJQUFBRCxNQUFBLENBQ2xDRSxVQUFVLEdBQVYsU0FBQUEsVUFBVUEsQ0FBQ0MsVUFBb0IsRUFBUTtNQUN0QztJQUFBOztJQUdEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBSCxNQUFBLENBS0FJLFVBQVUsR0FBVixTQUFBQSxVQUFVQSxDQUFxQ0MsR0FBNkIsRUFBRUMsY0FBdUIsRUFBRUMsTUFBc0IsRUFBUTtNQUNwSSxJQUFJQyxLQUFlO01BQ25CLElBQUksQ0FBQ0YsY0FBYyxFQUFFO1FBQ3BCRSxLQUFLLEdBQUdILEdBQUcsQ0FBQ0ksU0FBUyxDQUFDLENBQUMsQ0FBQ0MsU0FBUyxDQUFDLENBQWE7TUFDaEQsQ0FBQyxNQUFNO1FBQ04sTUFBTUMsSUFBSSxHQUFHTixHQUFHLENBQUNJLFNBQVMsQ0FBQyxDQUFDLENBQUNDLFNBQVMsQ0FBQyxDQUFTO1FBQ2hERixLQUFLLEdB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
@@ -167,10 +167,9 @@ export default class TableHierarchy implements IInterfaceWithMixin {
167
167
  */
168
168
  _onDragStartDocument(this: ITableBlock & TableHierarchy, ui5Event: UI5Event<{ bindingContext: Context }, Control>): void {
169
169
  const context = ui5Event.getParameter("bindingContext");
170
- const updatablePropertyPath = this.getTableDefinition().annotation.updatablePropertyPath;
171
170
 
172
171
  // Check if the context can be updated according to update restrictions
173
- let disableDrag = !!updatablePropertyPath && !context.getProperty(updatablePropertyPath);
172
+ let disableDrag = !TableRuntime.isUpdatableContext(this.getTableDefinition().annotation.updatablePropertyPathInfo, context, false);
174
173
 
175
174
  // In case of a TreeTable in a ListReport with draft, check that the context has no associated draft
176
175
  if (!disableDrag && !(context.getBinding() as ODataListBinding).isRelative()) {
@@ -241,7 +240,7 @@ export default class TableHierarchy implements IInterfaceWithMixin {
241
240
  await Promise.all([this.dropContext(movedContext, dropInfo), this.requestSideEffectsForChangeNextSiblingAction(movedContext)]);
242
241
  } catch (error) {
243
242
  MessageToast.show(this.getTranslatedText("M_TABLEDROP_FAILED", [""]));
244
- Log.error("The operation is unsuccessful. " + (error as Error).message ?? "");
243
+ Log.error("The operation is unsuccessful. " + ((error as Error).message ?? ""));
245
244
  } finally {
246
245
  BusyLocker.unlock(this.getContent());
247
246
  }
@@ -47,9 +47,10 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/macros/internal/helpers/Upload
47
47
  const uploadPath = uploadSetTable.getUploadUrl();
48
48
  let uploadUrl = newListEntity.getProperty(uploadPath);
49
49
 
50
- // set upload url as canonical url for NavigationProperties
51
- // this is a workaround as some backends cannot resolve NavigationsProperties for stream types
52
- uploadUrl = uploadUrl.replace(newListEntity.getPath(), newListEntity.getCanonicalPath());
50
+ // If the backend did not explicitly set AddressViaNavigationPath, we need to use the canonical path for upload
51
+ if (newListEntity.getModel().getMetaModel().getObject("/@com.sap.vocabularies.Common.v1.AddressViaNavigationPath") !== true) {
52
+ uploadUrl = uploadUrl.replace(newListEntity.getPath(), newListEntity.getCanonicalPath());
53
+ }
53
54
 
54
55
  // set header fields like etag and token
55
56
  setHeaderFields(uploadSetItem, uploadSetItem.getMediaType(), newListEntity);
@@ -129,4 +130,4 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/macros/internal/helpers/Upload
129
130
  };
130
131
  return UploadTableRuntime;
131
132
  }, false);
132
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJVcGxvYWRUYWJsZVJ1bnRpbWUiLCJ1cGxvYWRGaWxlIiwidXBsb2FkSW5mbyIsInVwbG9hZFNldEl0ZW0iLCJvSXRlbSIsInVwbG9hZFNldFRhYmxlIiwib1NvdXJjZSIsIm1kY1RhYmxlIiwiZ2V0UGFyZW50IiwibGlzdEJpbmRpbmciLCJnZXRSb3dCaW5kaW5nIiwiZmlsZU5hbWVQYXRoIiwiZ2V0Um93Q29uZmlndXJhdGlvbiIsImdldEZpbGVOYW1lUGF0aCIsImRhdGEiLCJnZXRGaWxlTmFtZSIsIm5ld0xpc3RFbnRpdHkiLCJjcmVhdGUiLCJpbnRlcm5hbENvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInVwbG9hZFByb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInNldFByb3BlcnR5IiwiZ2V0SWQiLCJjb250YWluaW5nVmlldyIsIkNvbW1vblV0aWxzIiwiZ2V0VGFyZ2V0VmlldyIsImZlQ29udHJvbGxlciIsIkZpZWxkUnVudGltZUhlbHBlciIsImdldEV4dGVuc2lvbkNvbnRyb2xsZXIiLCJnZXRDb250cm9sbGVyIiwiZWRpdEZsb3ciLCJzeW5jVGFzayIsImNyZWF0ZWQiLCJ1cGxvYWRQYXRoIiwiZ2V0VXBsb2FkVXJsIiwidXBsb2FkVXJsIiwiZ2V0UHJvcGVydHkiLCJyZXBsYWNlIiwiZ2V0UGF0aCIsImdldENhbm9uaWNhbFBhdGgiLCJzZXRIZWFkZXJGaWVsZHMiLCJnZXRNZWRpYVR5cGUiLCJzZXRVcGxvYWRVcmwiLCJlcnJvciIsIm9uVXBsb2FkRmFpbGVkIiwiU3RyaW5nIiwidXBsb2FkVGFibGUiLCJkaXNwbGF5TWVzc2FnZUZvckZhaWxlZFVwbG9hZCIsIm9uVXBsb2FkQ29tcGxldGVkIiwiZXZlbnQiLCJpdGVtIiwiZ2V0UGFyYW1ldGVyIiwic3RhdHVzIiwiTnVtYmVyIiwidXBsb2FkSW5zdGFuY2UiLCJkZWxldGUiLCJjb250ZXh0IiwiaGFzUGVuZGluZ0NoYW5nZXMiLCJyZXF1ZXN0UmVmcmVzaCIsIm9uTWVkaWFUeXBlTWlzbWF0Y2giLCJnZXRTb3VyY2UiLCJnaXZlblR5cGUiLCJhY2NlcHRlZFR5cGVzIiwiZ2V0TWVkaWFUeXBlcyIsInNob3dUeXBlTWlzbWF0Y2hEaWFsb2ciLCJvbkZpbGVTaXplRXhjZWVkZWQiLCJzaG93RmlsZVNpemVFeGNlZWREaWFsb2ciLCJnZXRNYXhGaWxlU2l6ZSIsInRvU3RyaW5nIiwib25GaWxlTmFtZUxlbmd0aEV4Y2VlZGVkIiwic2hvd0ZpbGVOYW1lTGVuZ3RoRXhjZWVkRGlhbG9nIiwiZ2V0TWF4RmlsZU5hbWVMZW5ndGgiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlVwbG9hZFRhYmxlUnVudGltZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7XG5cdGRpc3BsYXlNZXNzYWdlRm9yRmFpbGVkVXBsb2FkLFxuXHRzZXRIZWFkZXJGaWVsZHMsXG5cdHNob3dGaWxlTmFtZUxlbmd0aEV4Y2VlZERpYWxvZyxcblx0c2hvd0ZpbGVTaXplRXhjZWVkRGlhbG9nLFxuXHRzaG93VHlwZU1pc21hdGNoRGlhbG9nXG59IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL2hlbHBlcnMvVXBsb2FkXCI7XG5pbXBvcnQgdHlwZSBVcGxvYWRTZXR3aXRoVGFibGUgZnJvbSBcInNhcC9tL3BsdWdpbnMvVXBsb2FkU2V0d2l0aFRhYmxlXCI7XG5pbXBvcnQgdHlwZSBVcGxvYWRJdGVtIGZyb20gXCJzYXAvbS91cGxvYWQvVXBsb2FkSXRlbVwiO1xuaW1wb3J0IHR5cGUgRXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9EYXRhVjRDb250ZXh0IH0gZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgRmllbGRSdW50aW1lSGVscGVyIGZyb20gXCIuLi8uLi9maWVsZC9GaWVsZFJ1bnRpbWVIZWxwZXJcIjtcblxuY29uc3QgVXBsb2FkVGFibGVSdW50aW1lID0ge1xuXHQvKipcblx0ICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIGFuZCBzZXQgdGhlIFVSTCB0byB1cGxvYWQgdGhlIGRvY3VtZW50LlxuXHQgKiBAcGFyYW0gdXBsb2FkSW5mbyBJbmZvcm1hdGlvbiBzZW50IGJ5IHRoZSBVcGxvYWRTZXQgY29udHJvbFxuXHQgKiBAcGFyYW0gdXBsb2FkSW5mby5vSXRlbSBVcGxvYWRJdGVtIHdpdGggdGhlIGZpbGUgaW5mb3JtYXRpb25cblx0ICogQHBhcmFtIHVwbG9hZEluZm8ub1NvdXJjZSBUaGUgVXBsb2FkU2V0d2l0aFRhYmxlIGNvbnRyb2xcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRvIGJlIHJlc29sdmVkIHdpdGggdGhlIHVwbG9hZFNldHdpdGhUYWJsZUl0ZW0gdG8gYmUgdXNlZCB0byB1cGxvYWQgdGhlIGRvY3VtZW50XG5cdCAqL1xuXHRhc3luYyB1cGxvYWRGaWxlKHVwbG9hZEluZm86IHsgb0l0ZW06IFVwbG9hZEl0ZW07IG9Tb3VyY2U6IFVwbG9hZFNldHdpdGhUYWJsZSB9KTogUHJvbWlzZTxVcGxvYWRJdGVtPiB7XG5cdFx0Y29uc3QgdXBsb2FkU2V0SXRlbSA9IHVwbG9hZEluZm8ub0l0ZW0sXG5cdFx0XHR1cGxvYWRTZXRUYWJsZSA9IHVwbG9hZEluZm8ub1NvdXJjZSxcblx0XHRcdG1kY1RhYmxlID0gdXBsb2FkU2V0VGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGUsXG5cdFx0XHRsaXN0QmluZGluZyA9IG1kY1RhYmxlLmdldFJvd0JpbmRpbmcoKSxcblx0XHRcdGZpbGVOYW1lUGF0aCA9IHVwbG9hZFNldFRhYmxlLmdldFJvd0NvbmZpZ3VyYXRpb24oKS5nZXRGaWxlTmFtZVBhdGgoKSxcblx0XHRcdGRhdGEgPSBmaWxlTmFtZVBhdGggPyB7IFtmaWxlTmFtZVBhdGhdOiB1cGxvYWRTZXRJdGVtLmdldEZpbGVOYW1lKCkgfSA6IHt9LFxuXHRcdFx0bmV3TGlzdEVudGl0eSA9IGxpc3RCaW5kaW5nLmNyZWF0ZShkYXRhLCB0cnVlKTtcblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBpbnRlcm5hbENvbnRleHQgPSB1cGxvYWRTZXRUYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0Ly8gd2UgaGF2ZSB0byBhZGQgdGhlIHVwbG9hZCBwcm9jZXNzIHRvIHRoZSBzeW5jIHRhc2sgdG8gYXZvaWQgdGhlIHVzZXIgY2FuIHNhdmUgd2l0aG91dCB0aGUgdXBsb2FkIGJlaW5nIGNvbXBsZXRlZFxuXHRcdFx0Y29uc3QgdXBsb2FkUHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpOiB2b2lkID0+IHtcblx0XHRcdFx0aW50ZXJuYWxDb250ZXh0LnNldFByb3BlcnR5KGBVcGxvYWRQcm9taXNlcy8ke3VwbG9hZFNldEl0ZW0uZ2V0SWQoKX1gLCB7IHJlc29sdmU6IHJlc29sdmUsIHJlamVjdDogcmVqZWN0IH0pO1xuXHRcdFx0fSk7XG5cdFx0XHQvLyB3ZSBhbHNvIG5lZWQgdG8gc3RvcmUgdGhlIG5ldyBlbnRpdHkgdG8gYmUgYWJsZSB0byByZXRyaWV2ZSBpdCBsYXRlclxuXHRcdFx0aW50ZXJuYWxDb250ZXh0LnNldFByb3BlcnR5KFwidXBsb2FkSW5zdGFuY2VcIiwgbmV3TGlzdEVudGl0eSk7XG5cdFx0XHRjb25zdCBjb250YWluaW5nVmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodXBsb2FkU2V0VGFibGUpO1xuXHRcdFx0Y29uc3QgZmVDb250cm9sbGVyID0gRmllbGRSdW50aW1lSGVscGVyLmdldEV4dGVuc2lvbkNvbnRyb2xsZXIoY29udGFpbmluZ1ZpZXcuZ2V0Q29udHJvbGxlcigpKTtcblx0XHRcdGZlQ29udHJvbGxlci5lZGl0Rmxvdy5zeW5jVGFzayh1cGxvYWRQcm9taXNlKTtcblxuXHRcdFx0YXdhaXQgbmV3TGlzdEVudGl0eS5jcmVhdGVkKCk7XG5cblx0XHRcdHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdFx0XHRjb25zdCB1cGxvYWRQYXRoID0gdXBsb2FkU2V0VGFibGUuZ2V0VXBsb2FkVXJsKCk7XG5cdFx0XHRcdGxldCB1cGxvYWRVcmwgPSBuZXdMaXN0RW50aXR5LmdldFByb3BlcnR5KHVwbG9hZFBhdGgpO1xuXG5cdFx0XHRcdC8vIHNldCB1cGxvYWQgdXJsIGFzIGNhbm9uaWNhbCB1cmwgZm9yIE5hdmlnYXRpb25Qcm9wZXJ0aWVzXG5cdFx0XHRcdC8vIHRoaXMgaXMgYSB3b3JrYXJvdW5kIGFzIHNvbWUgYmFja2VuZHMgY2Fubm90IHJlc29sdmUgTmF2aWdhdGlvbnNQcm9wZXJ0aWVzIGZvciBzdHJlYW0gdHlwZXNcblx0XHRcdFx0dXBsb2FkVXJsID0gdXBsb2FkVXJsLnJlcGxhY2UobmV3TGlzdEVudGl0eS5nZXRQYXRoKCksIG5ld0xpc3RFbnRpdHkuZ2V0Q2Fub25pY2FsUGF0aCgpKTtcblxuXHRcdFx0XHQvLyBzZXQgaGVhZGVyIGZpZWxkcyBsaWtlIGV0YWcgYW5kIHRva2VuXG5cdFx0XHRcdHNldEhlYWRlckZpZWxkcyh1cGxvYWRTZXRJdGVtLCB1cGxvYWRTZXRJdGVtLmdldE1lZGlhVHlwZSgpLCBuZXdMaXN0RW50aXR5KTtcblxuXHRcdFx0XHQvLyBzZXQgdGhlIFVSTCBmb3IgUFVUIHJlcXVlc3Rcblx0XHRcdFx0dXBsb2FkU2V0SXRlbS5zZXRVcGxvYWRVcmwodXBsb2FkVXJsKTtcblx0XHRcdFx0cmVzb2x2ZSh1cGxvYWRTZXRJdGVtKTtcblx0XHRcdH0pO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHR0aGlzLm9uVXBsb2FkRmFpbGVkKHVwbG9hZFNldFRhYmxlLCB1cGxvYWRTZXRJdGVtLCBTdHJpbmcoZXJyb3IpKTtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChcIlRoZSBuZXcgaW5zdGFuY2UgY291bGQgbm90IGJlIGNyZWF0ZWRcIik7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBJbmZvcm0gdGhlIHVzZXIgdGhhdCB0aGUgdXBsb2FkIGZhaWxlZCBkdWUgdG8gYW55IHRlY2huaWNhbCByZWFzb25zLlxuXHQgKiBAcGFyYW0gdXBsb2FkVGFibGVcblx0ICogQHBhcmFtIHVwbG9hZFNldEl0ZW1cblx0ICogQHBhcmFtIGVycm9yIFRoZSBlcnJvciBtZXNzYWdlXG5cdCAqL1xuXHRvblVwbG9hZEZhaWxlZCh1cGxvYWRUYWJsZTogVXBsb2FkU2V0d2l0aFRhYmxlLCB1cGxvYWRTZXRJdGVtOiBVcGxvYWRJdGVtLCBlcnJvcjogc3RyaW5nKTogdm9pZCB7XG5cdFx0ZGlzcGxheU1lc3NhZ2VGb3JGYWlsZWRVcGxvYWQodXBsb2FkVGFibGUsIGVycm9yKTtcblx0XHQodXBsb2FkVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCkuZ2V0UHJvcGVydHkoYFVwbG9hZFByb21pc2VzLyR7dXBsb2FkU2V0SXRlbS5nZXRJZCgpfWApLnJlamVjdCgpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZWZyZXNoIHRoZSBpbnN0YW5jZSBhZnRlciB1cGxvYWQuXG5cdCAqIFRoaXMgZW5zdXJlcyB3ZSByZXRyaWV2ZSB0aGUgY29ycmVjdCBtaW1lIHR5cGUgZGV0ZXJtaW5lZCBieSB0aGUgYmFja2VuZC5cblx0ICogQHBhcmFtIGV2ZW50IFNlbnQgYnkgdXBsb2FkVGFibGUgY29udHJvbFxuXHQgKi9cblx0YXN5bmMgb25VcGxvYWRDb21wbGV0ZWQoZXZlbnQ6IEV2ZW50PHsgaXRlbTogVXBsb2FkSXRlbTsgc3RhdHVzOiBzdHJpbmc7IHJlc3BvbnNlVGV4dDogc3RyaW5nOyByZXNwb25zZTogc3RyaW5nIH0+KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgaXRlbSA9IGV2ZW50LmdldFBhcmFtZXRlcihcIml0ZW1cIiksXG5cdFx0XHRzdGF0dXMgPSBOdW1iZXIoZXZlbnQuZ2V0UGFyYW1ldGVyKFwic3RhdHVzXCIpKSxcblx0XHRcdGludGVybmFsQ29udGV4dCA9IGl0ZW0uZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRpZiAoc3RhdHVzID09PSAwIHx8IHN0YXR1cyA+PSA0MDApIHtcblx0XHRcdGNvbnN0IHVwbG9hZFRhYmxlID0gaXRlbS5nZXRQYXJlbnQoKSBhcyBVcGxvYWRTZXR3aXRoVGFibGU7XG5cdFx0XHRjb25zdCBlcnJvciA9IGV2ZW50LmdldFBhcmFtZXRlcihcInJlc3BvbnNlVGV4dFwiKSB8fCBldmVudC5nZXRQYXJhbWV0ZXIoXCJyZXNwb25zZVwiKTtcblx0XHRcdFVwbG9hZFRhYmxlUnVudGltZS5vblVwbG9hZEZhaWxlZCh1cGxvYWRUYWJsZSwgaXRlbSwgZXJyb3IpO1xuXHRcdFx0Y29uc3QgdXBsb2FkSW5zdGFuY2UgPSBpbnRlcm5hbENvbnRleHQuZ2V0UHJvcGVydHkoXCJ1cGxvYWRJbnN0YW5jZVwiKTtcblx0XHRcdGlmICh1cGxvYWRJbnN0YW5jZSkge1xuXHRcdFx0XHQvLyBkZWxldGUgdGhlIHVwbG9hZCBpbnN0YW5jZSBzbyBpdCBkaXNhcHBlYXJzIGluIHRoZSBsaXN0XG5cdFx0XHRcdGF3YWl0IHVwbG9hZEluc3RhbmNlLmRlbGV0ZSgpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBjb250ZXh0ID0gaXRlbS5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0O1xuXHRcdFx0aWYgKGNvbnRleHQgJiYgIWNvbnRleHQuaGFzUGVuZGluZ0NoYW5nZXMoKSkge1xuXHRcdFx0XHRhd2FpdCBjb250ZXh0LnJlcXVlc3RSZWZyZXNoKCk7XG5cdFx0XHR9XG5cdFx0XHRpbnRlcm5hbENvbnRleHQuZ2V0UHJvcGVydHkoYFVwbG9hZFByb21pc2VzLyR7aXRlbS5nZXRJZCgpfWApLnJlc29sdmUoKTtcblx0XHR9XG5cdFx0aW50ZXJuYWxDb250ZXh0LnNldFByb3BlcnR5KFwidXBsb2FkSW5zdGFuY2VcIiwgbnVsbCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFNob3cgYW4gZXJyb3IgZGlhbG9nIHRvIHRoZSB1c2VyIGlmIHRoZSBmaWxlIGRvZXNuJ3QgZml0IHRvIHRoZSBhY2NlcHRlZCBtZWRpYSB0eXBlcy5cblx0ICogQHBhcmFtIGV2ZW50IFNlbnQgYnkgdXBsb2FkVGFibGUgY29udHJvbFxuXHQgKi9cblx0b25NZWRpYVR5cGVNaXNtYXRjaChldmVudDogRXZlbnQ8eyBpdGVtOiBVcGxvYWRJdGVtIH0sIFVwbG9hZFNldHdpdGhUYWJsZT4pOiB2b2lkIHtcblx0XHRjb25zdCB1cGxvYWRUYWJsZSA9IGV2ZW50LmdldFNvdXJjZSgpO1xuXHRcdGNvbnN0IGdpdmVuVHlwZSA9IGV2ZW50LmdldFBhcmFtZXRlcihcIml0ZW1cIikuZ2V0UHJvcGVydHkoXCJtZWRpYVR5cGVcIik7XG5cdFx0Y29uc3QgYWNjZXB0ZWRUeXBlcyA9IHVwbG9hZFRhYmxlLmdldE1lZGlhVHlwZXMoKTtcblx0XHRzaG93VHlwZU1pc21hdGNoRGlhbG9nKHVwbG9hZFRhYmxlLCBnaXZlblR5cGUsIGFjY2VwdGVkVHlwZXMpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBTaG93IGFuIGVycm9yIGRpYWxvZyB0byB0aGUgdXNlciBpZiB0aGUgZmlsZSBleGNlZWRzIHRoZSBtYXhpbXVtIGZpbGUgc2l6ZS5cblx0ICogQHBhcmFtIGV2ZW50IFNlbnQgYnkgdXBsb2FkVGFibGUgY29udHJvbFxuXHQgKi9cblx0b25GaWxlU2l6ZUV4Y2VlZGVkKGV2ZW50OiBFdmVudDx7fSwgVXBsb2FkU2V0d2l0aFRhYmxlPik6IHZvaWQge1xuXHRcdGNvbnN0IHVwbG9hZFRhYmxlID0gZXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0c2hvd0ZpbGVTaXplRXhjZWVkRGlhbG9nKHVwbG9hZFRhYmxlLCB1cGxvYWRUYWJsZS5nZXRNYXhGaWxlU2l6ZSgpLnRvU3RyaW5nKCkpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBTaG93IGFuIGVycm9yIGRpYWxvZyB0byB0aGUgdXNlciBpZiB0aGUgZmlsZSBleGNlZWRzIHRoZSBtYXhpbXVtIGZpbGUgc2l6ZS5cblx0ICogQHBhcmFtIGV2ZW50IFNlbnQgYnkgdXBsb2FkVGFibGUgY29udHJvbFxuXHQgKi9cblx0b25GaWxlTmFtZUxlbmd0aEV4Y2VlZGVkKGV2ZW50OiBFdmVudDx7fSwgVXBsb2FkU2V0d2l0aFRhYmxlPik6IHZvaWQge1xuXHRcdGNvbnN0IHVwbG9hZFRhYmxlID0gZXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0c2hvd0ZpbGVOYW1lTGVuZ3RoRXhjZWVkRGlhbG9nKHVwbG9hZFRhYmxlLCB1cGxvYWRUYWJsZS5nZXRNYXhGaWxlTmFtZUxlbmd0aCgpLnRvU3RyaW5nKCkpO1xuXHR9XG59O1xuZXhwb3J0IGRlZmF1bHQgVXBsb2FkVGFibGVSdW50aW1lO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7RUFnQkEsTUFBTUEsa0JBQWtCLEdBQUc7SUFDMUI7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQyxNQUFNQyxVQUFVQSxDQUFDQyxVQUE4RCxFQUF1QjtNQUNyRyxNQUFNQyxhQUFhLEdBQUdELFVBQVUsQ0FBQ0UsS0FBSztRQUNyQ0MsY0FBYyxHQUFHSCxVQUFVLENBQUNJLE9BQU87UUFDbkNDLFFBQVEsR0FBR0YsY0FBYyxDQUFDRyxTQUFTLENBQUMsQ0FBVTtRQUM5Q0MsV0FBVyxHQUFHRixRQUFRLENBQUNHLGFBQWEsQ0FBQyxDQUFDO1FBQ3RDQyxZQUFZLEdBQUdOLGNBQWMsQ0FBQ08sbUJBQW1CLENBQUMsQ0FBQyxDQUFDQyxlQUFlLENBQUMsQ0FBQztRQUNyRUMsSUFBSSxHQUFHSCxZQUFZLEdBQUc7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
133
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJVcGxvYWRUYWJsZVJ1bnRpbWUiLCJ1cGxvYWRGaWxlIiwidXBsb2FkSW5mbyIsInVwbG9hZFNldEl0ZW0iLCJvSXRlbSIsInVwbG9hZFNldFRhYmxlIiwib1NvdXJjZSIsIm1kY1RhYmxlIiwiZ2V0UGFyZW50IiwibGlzdEJpbmRpbmciLCJnZXRSb3dCaW5kaW5nIiwiZmlsZU5hbWVQYXRoIiwiZ2V0Um93Q29uZmlndXJhdGlvbiIsImdldEZpbGVOYW1lUGF0aCIsImRhdGEiLCJnZXRGaWxlTmFtZSIsIm5ld0xpc3RFbnRpdHkiLCJjcmVhdGUiLCJpbnRlcm5hbENvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInVwbG9hZFByb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInNldFByb3BlcnR5IiwiZ2V0SWQiLCJjb250YWluaW5nVmlldyIsIkNvbW1vblV0aWxzIiwiZ2V0VGFyZ2V0VmlldyIsImZlQ29udHJvbGxlciIsIkZpZWxkUnVudGltZUhlbHBlciIsImdldEV4dGVuc2lvbkNvbnRyb2xsZXIiLCJnZXRDb250cm9sbGVyIiwiZWRpdEZsb3ciLCJzeW5jVGFzayIsImNyZWF0ZWQiLCJ1cGxvYWRQYXRoIiwiZ2V0VXBsb2FkVXJsIiwidXBsb2FkVXJsIiwiZ2V0UHJvcGVydHkiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsImdldE9iamVjdCIsInJlcGxhY2UiLCJnZXRQYXRoIiwiZ2V0Q2Fub25pY2FsUGF0aCIsInNldEhlYWRlckZpZWxkcyIsImdldE1lZGlhVHlwZSIsInNldFVwbG9hZFVybCIsImVycm9yIiwib25VcGxvYWRGYWlsZWQiLCJTdHJpbmciLCJ1cGxvYWRUYWJsZSIsImRpc3BsYXlNZXNzYWdlRm9yRmFpbGVkVXBsb2FkIiwib25VcGxvYWRDb21wbGV0ZWQiLCJldmVudCIsIml0ZW0iLCJnZXRQYXJhbWV0ZXIiLCJzdGF0dXMiLCJOdW1iZXIiLCJ1cGxvYWRJbnN0YW5jZSIsImRlbGV0ZSIsImNvbnRleHQiLCJoYXNQZW5kaW5nQ2hhbmdlcyIsInJlcXVlc3RSZWZyZXNoIiwib25NZWRpYVR5cGVNaXNtYXRjaCIsImdldFNvdXJjZSIsImdpdmVuVHlwZSIsImFjY2VwdGVkVHlwZXMiLCJnZXRNZWRpYVR5cGVzIiwic2hvd1R5cGVNaXNtYXRjaERpYWxvZyIsIm9uRmlsZVNpemVFeGNlZWRlZCIsInNob3dGaWxlU2l6ZUV4Y2VlZERpYWxvZyIsImdldE1heEZpbGVTaXplIiwidG9TdHJpbmciLCJvbkZpbGVOYW1lTGVuZ3RoRXhjZWVkZWQiLCJzaG93RmlsZU5hbWVMZW5ndGhFeGNlZWREaWFsb2ciLCJnZXRNYXhGaWxlTmFtZUxlbmd0aCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVXBsb2FkVGFibGVSdW50aW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHtcblx0ZGlzcGxheU1lc3NhZ2VGb3JGYWlsZWRVcGxvYWQsXG5cdHNldEhlYWRlckZpZWxkcyxcblx0c2hvd0ZpbGVOYW1lTGVuZ3RoRXhjZWVkRGlhbG9nLFxuXHRzaG93RmlsZVNpemVFeGNlZWREaWFsb2csXG5cdHNob3dUeXBlTWlzbWF0Y2hEaWFsb2dcbn0gZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvaGVscGVycy9VcGxvYWRcIjtcbmltcG9ydCB0eXBlIFVwbG9hZFNldHdpdGhUYWJsZSBmcm9tIFwic2FwL20vcGx1Z2lucy9VcGxvYWRTZXR3aXRoVGFibGVcIjtcbmltcG9ydCB0eXBlIFVwbG9hZEl0ZW0gZnJvbSBcInNhcC9tL3VwbG9hZC9VcGxvYWRJdGVtXCI7XG5pbXBvcnQgdHlwZSBFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT0RhdGFWNENvbnRleHQgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCBGaWVsZFJ1bnRpbWVIZWxwZXIgZnJvbSBcIi4uLy4uL2ZpZWxkL0ZpZWxkUnVudGltZUhlbHBlclwiO1xuXG5jb25zdCBVcGxvYWRUYWJsZVJ1bnRpbWUgPSB7XG5cdC8qKlxuXHQgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2UgYW5kIHNldCB0aGUgVVJMIHRvIHVwbG9hZCB0aGUgZG9jdW1lbnQuXG5cdCAqIEBwYXJhbSB1cGxvYWRJbmZvIEluZm9ybWF0aW9uIHNlbnQgYnkgdGhlIFVwbG9hZFNldCBjb250cm9sXG5cdCAqIEBwYXJhbSB1cGxvYWRJbmZvLm9JdGVtIFVwbG9hZEl0ZW0gd2l0aCB0aGUgZmlsZSBpbmZvcm1hdGlvblxuXHQgKiBAcGFyYW0gdXBsb2FkSW5mby5vU291cmNlIFRoZSBVcGxvYWRTZXR3aXRoVGFibGUgY29udHJvbFxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdG8gYmUgcmVzb2x2ZWQgd2l0aCB0aGUgdXBsb2FkU2V0d2l0aFRhYmxlSXRlbSB0byBiZSB1c2VkIHRvIHVwbG9hZCB0aGUgZG9jdW1lbnRcblx0ICovXG5cdGFzeW5jIHVwbG9hZEZpbGUodXBsb2FkSW5mbzogeyBvSXRlbTogVXBsb2FkSXRlbTsgb1NvdXJjZTogVXBsb2FkU2V0d2l0aFRhYmxlIH0pOiBQcm9taXNlPFVwbG9hZEl0ZW0+IHtcblx0XHRjb25zdCB1cGxvYWRTZXRJdGVtID0gdXBsb2FkSW5mby5vSXRlbSxcblx0XHRcdHVwbG9hZFNldFRhYmxlID0gdXBsb2FkSW5mby5vU291cmNlLFxuXHRcdFx0bWRjVGFibGUgPSB1cGxvYWRTZXRUYWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZSxcblx0XHRcdGxpc3RCaW5kaW5nID0gbWRjVGFibGUuZ2V0Um93QmluZGluZygpLFxuXHRcdFx0ZmlsZU5hbWVQYXRoID0gdXBsb2FkU2V0VGFibGUuZ2V0Um93Q29uZmlndXJhdGlvbigpLmdldEZpbGVOYW1lUGF0aCgpLFxuXHRcdFx0ZGF0YSA9IGZpbGVOYW1lUGF0aCA/IHsgW2ZpbGVOYW1lUGF0aF06IHVwbG9hZFNldEl0ZW0uZ2V0RmlsZU5hbWUoKSB9IDoge30sXG5cdFx0XHRuZXdMaXN0RW50aXR5ID0gbGlzdEJpbmRpbmcuY3JlYXRlKGRhdGEsIHRydWUpO1xuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGludGVybmFsQ29udGV4dCA9IHVwbG9hZFNldFRhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHQvLyB3ZSBoYXZlIHRvIGFkZCB0aGUgdXBsb2FkIHByb2Nlc3MgdG8gdGhlIHN5bmMgdGFzayB0byBhdm9pZCB0aGUgdXNlciBjYW4gc2F2ZSB3aXRob3V0IHRoZSB1cGxvYWQgYmVpbmcgY29tcGxldGVkXG5cdFx0XHRjb25zdCB1cGxvYWRQcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoYFVwbG9hZFByb21pc2VzLyR7dXBsb2FkU2V0SXRlbS5nZXRJZCgpfWAsIHsgcmVzb2x2ZTogcmVzb2x2ZSwgcmVqZWN0OiByZWplY3QgfSk7XG5cdFx0XHR9KTtcblx0XHRcdC8vIHdlIGFsc28gbmVlZCB0byBzdG9yZSB0aGUgbmV3IGVudGl0eSB0byBiZSBhYmxlIHRvIHJldHJpZXZlIGl0IGxhdGVyXG5cdFx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoXCJ1cGxvYWRJbnN0YW5jZVwiLCBuZXdMaXN0RW50aXR5KTtcblx0XHRcdGNvbnN0IGNvbnRhaW5pbmdWaWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh1cGxvYWRTZXRUYWJsZSk7XG5cdFx0XHRjb25zdCBmZUNvbnRyb2xsZXIgPSBGaWVsZFJ1bnRpbWVIZWxwZXIuZ2V0RXh0ZW5zaW9uQ29udHJvbGxlcihjb250YWluaW5nVmlldy5nZXRDb250cm9sbGVyKCkpO1xuXHRcdFx0ZmVDb250cm9sbGVyLmVkaXRGbG93LnN5bmNUYXNrKHVwbG9hZFByb21pc2UpO1xuXG5cdFx0XHRhd2FpdCBuZXdMaXN0RW50aXR5LmNyZWF0ZWQoKTtcblxuXHRcdFx0cmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHVwbG9hZFBhdGggPSB1cGxvYWRTZXRUYWJsZS5nZXRVcGxvYWRVcmwoKTtcblx0XHRcdFx0bGV0IHVwbG9hZFVybCA9IG5ld0xpc3RFbnRpdHkuZ2V0UHJvcGVydHkodXBsb2FkUGF0aCk7XG5cblx0XHRcdFx0Ly8gSWYgdGhlIGJhY2tlbmQgZGlkIG5vdCBleHBsaWNpdGx5IHNldCBBZGRyZXNzVmlhTmF2aWdhdGlvblBhdGgsIHdlIG5lZWQgdG8gdXNlIHRoZSBjYW5vbmljYWwgcGF0aCBmb3IgdXBsb2FkXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRuZXdMaXN0RW50aXR5LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkuZ2V0T2JqZWN0KFwiL0Bjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuQWRkcmVzc1ZpYU5hdmlnYXRpb25QYXRoXCIpICE9PSB0cnVlXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHVwbG9hZFVybCA9IHVwbG9hZFVybC5yZXBsYWNlKG5ld0xpc3RFbnRpdHkuZ2V0UGF0aCgpLCBuZXdMaXN0RW50aXR5LmdldENhbm9uaWNhbFBhdGgoKSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBzZXQgaGVhZGVyIGZpZWxkcyBsaWtlIGV0YWcgYW5kIHRva2VuXG5cdFx0XHRcdHNldEhlYWRlckZpZWxkcyh1cGxvYWRTZXRJdGVtLCB1cGxvYWRTZXRJdGVtLmdldE1lZGlhVHlwZSgpLCBuZXdMaXN0RW50aXR5KTtcblxuXHRcdFx0XHQvLyBzZXQgdGhlIFVSTCBmb3IgUFVUIHJlcXVlc3Rcblx0XHRcdFx0dXBsb2FkU2V0SXRlbS5zZXRVcGxvYWRVcmwodXBsb2FkVXJsKTtcblx0XHRcdFx0cmVzb2x2ZSh1cGxvYWRTZXRJdGVtKTtcblx0XHRcdH0pO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHR0aGlzLm9uVXBsb2FkRmFpbGVkKHVwbG9hZFNldFRhYmxlLCB1cGxvYWRTZXRJdGVtLCBTdHJpbmcoZXJyb3IpKTtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChcIlRoZSBuZXcgaW5zdGFuY2UgY291bGQgbm90IGJlIGNyZWF0ZWRcIik7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBJbmZvcm0gdGhlIHVzZXIgdGhhdCB0aGUgdXBsb2FkIGZhaWxlZCBkdWUgdG8gYW55IHRlY2huaWNhbCByZWFzb25zLlxuXHQgKiBAcGFyYW0gdXBsb2FkVGFibGVcblx0ICogQHBhcmFtIHVwbG9hZFNldEl0ZW1cblx0ICogQHBhcmFtIGVycm9yIFRoZSBlcnJvciBtZXNzYWdlXG5cdCAqL1xuXHRvblVwbG9hZEZhaWxlZCh1cGxvYWRUYWJsZTogVXBsb2FkU2V0d2l0aFRhYmxlLCB1cGxvYWRTZXRJdGVtOiBVcGxvYWRJdGVtLCBlcnJvcjogc3RyaW5nKTogdm9pZCB7XG5cdFx0ZGlzcGxheU1lc3NhZ2VGb3JGYWlsZWRVcGxvYWQodXBsb2FkVGFibGUsIGVycm9yKTtcblx0XHQodXBsb2FkVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCkuZ2V0UHJvcGVydHkoYFVwbG9hZFByb21pc2VzLyR7dXBsb2FkU2V0SXRlbS5nZXRJZCgpfWApLnJlamVjdCgpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZWZyZXNoIHRoZSBpbnN0YW5jZSBhZnRlciB1cGxvYWQuXG5cdCAqIFRoaXMgZW5zdXJlcyB3ZSByZXRyaWV2ZSB0aGUgY29ycmVjdCBtaW1lIHR5cGUgZGV0ZXJtaW5lZCBieSB0aGUgYmFja2VuZC5cblx0ICogQHBhcmFtIGV2ZW50IFNlbnQgYnkgdXBsb2FkVGFibGUgY29udHJvbFxuXHQgKi9cblx0YXN5bmMgb25VcGxvYWRDb21wbGV0ZWQoZXZlbnQ6IEV2ZW50PHsgaXRlbTogVXBsb2FkSXRlbTsgc3RhdHVzOiBzdHJpbmc7IHJlc3BvbnNlVGV4dDogc3RyaW5nOyByZXNwb25zZTogc3RyaW5nIH0+KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgaXRlbSA9IGV2ZW50LmdldFBhcmFtZXRlcihcIml0ZW1cIiksXG5cdFx0XHRzdGF0dXMgPSBOdW1iZXIoZXZlbnQuZ2V0UGFyYW1ldGVyKFwic3RhdHVzXCIpKSxcblx0XHRcdGludGVybmFsQ29udGV4dCA9IGl0ZW0uZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRpZiAoc3RhdHVzID09PSAwIHx8IHN0YXR1cyA+PSA0MDApIHtcblx0XHRcdGNvbnN0IHVwbG9hZFRhYmxlID0gaXRlbS5nZXRQYXJlbnQoKSBhcyBVcGxvYWRTZXR3aXRoVGFibGU7XG5cdFx0XHRjb25zdCBlcnJvciA9IGV2ZW50LmdldFBhcmFtZXRlcihcInJlc3BvbnNlVGV4dFwiKSB8fCBldmVudC5nZXRQYXJhbWV0ZXIoXCJyZXNwb25zZVwiKTtcblx0XHRcdFVwbG9hZFRhYmxlUnVudGltZS5vblVwbG9hZEZhaWxlZCh1cGxvYWRUYWJsZSwgaXRlbSwgZXJyb3IpO1xuXHRcdFx0Y29uc3QgdXBsb2FkSW5zdGFuY2UgPSBpbnRlcm5hbENvbnRleHQuZ2V0UHJvcGVydHkoXCJ1cGxvYWRJbnN0YW5jZVwiKTtcblx0XHRcdGlmICh1cGxvYWRJbnN0YW5jZSkge1xuXHRcdFx0XHQvLyBkZWxldGUgdGhlIHVwbG9hZCBpbnN0YW5jZSBzbyBpdCBkaXNhcHBlYXJzIGluIHRoZSBsaXN0XG5cdFx0XHRcdGF3YWl0IHVwbG9hZEluc3RhbmNlLmRlbGV0ZSgpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBjb250ZXh0ID0gaXRlbS5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0O1xuXHRcdFx0aWYgKGNvbnRleHQgJiYgIWNvbnRleHQuaGFzUGVuZGluZ0NoYW5nZXMoKSkge1xuXHRcdFx0XHRhd2FpdCBjb250ZXh0LnJlcXVlc3RSZWZyZXNoKCk7XG5cdFx0XHR9XG5cdFx0XHRpbnRlcm5hbENvbnRleHQuZ2V0UHJvcGVydHkoYFVwbG9hZFByb21pc2VzLyR7aXRlbS5nZXRJZCgpfWApLnJlc29sdmUoKTtcblx0XHR9XG5cdFx0aW50ZXJuYWxDb250ZXh0LnNldFByb3BlcnR5KFwidXBsb2FkSW5zdGFuY2VcIiwgbnVsbCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFNob3cgYW4gZXJyb3IgZGlhbG9nIHRvIHRoZSB1c2VyIGlmIHRoZSBmaWxlIGRvZXNuJ3QgZml0IHRvIHRoZSBhY2NlcHRlZCBtZWRpYSB0eXBlcy5cblx0ICogQHBhcmFtIGV2ZW50IFNlbnQgYnkgdXBsb2FkVGFibGUgY29udHJvbFxuXHQgKi9cblx0b25NZWRpYVR5cGVNaXNtYXRjaChldmVudDogRXZlbnQ8eyBpdGVtOiBVcGxvYWRJdGVtIH0sIFVwbG9hZFNldHdpdGhUYWJsZT4pOiB2b2lkIHtcblx0XHRjb25zdCB1cGxvYWRUYWJsZSA9IGV2ZW50LmdldFNvdXJjZSgpO1xuXHRcdGNvbnN0IGdpdmVuVHlwZSA9IGV2ZW50LmdldFBhcmFtZXRlcihcIml0ZW1cIikuZ2V0UHJvcGVydHkoXCJtZWRpYVR5cGVcIik7XG5cdFx0Y29uc3QgYWNjZXB0ZWRUeXBlcyA9IHVwbG9hZFRhYmxlLmdldE1lZGlhVHlwZXMoKTtcblx0XHRzaG93VHlwZU1pc21hdGNoRGlhbG9nKHVwbG9hZFRhYmxlLCBnaXZlblR5cGUsIGFjY2VwdGVkVHlwZXMpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBTaG93IGFuIGVycm9yIGRpYWxvZyB0byB0aGUgdXNlciBpZiB0aGUgZmlsZSBleGNlZWRzIHRoZSBtYXhpbXVtIGZpbGUgc2l6ZS5cblx0ICogQHBhcmFtIGV2ZW50IFNlbnQgYnkgdXBsb2FkVGFibGUgY29udHJvbFxuXHQgKi9cblx0b25GaWxlU2l6ZUV4Y2VlZGVkKGV2ZW50OiBFdmVudDx7fSwgVXBsb2FkU2V0d2l0aFRhYmxlPik6IHZvaWQge1xuXHRcdGNvbnN0IHVwbG9hZFRhYmxlID0gZXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0c2hvd0ZpbGVTaXplRXhjZWVkRGlhbG9nKHVwbG9hZFRhYmxlLCB1cGxvYWRUYWJsZS5nZXRNYXhGaWxlU2l6ZSgpLnRvU3RyaW5nKCkpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBTaG93IGFuIGVycm9yIGRpYWxvZyB0byB0aGUgdXNlciBpZiB0aGUgZmlsZSBleGNlZWRzIHRoZSBtYXhpbXVtIGZpbGUgc2l6ZS5cblx0ICogQHBhcmFtIGV2ZW50IFNlbnQgYnkgdXBsb2FkVGFibGUgY29udHJvbFxuXHQgKi9cblx0b25GaWxlTmFtZUxlbmd0aEV4Y2VlZGVkKGV2ZW50OiBFdmVudDx7fSwgVXBsb2FkU2V0d2l0aFRhYmxlPik6IHZvaWQge1xuXHRcdGNvbnN0IHVwbG9hZFRhYmxlID0gZXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0c2hvd0ZpbGVOYW1lTGVuZ3RoRXhjZWVkRGlhbG9nKHVwbG9hZFRhYmxlLCB1cGxvYWRUYWJsZS5nZXRNYXhGaWxlTmFtZUxlbmd0aCgpLnRvU3RyaW5nKCkpO1xuXHR9XG59O1xuZXhwb3J0IGRlZmF1bHQgVXBsb2FkVGFibGVSdW50aW1lO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7RUFnQkEsTUFBTUEsa0JBQWtCLEdBQUc7SUFDMUI7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQyxNQUFNQyxVQUFVQSxDQUFDQyxVQUE4RCxFQUF1QjtNQUNyRyxNQUFNQyxhQUFhLEdBQUdELFVBQVUsQ0FBQ0UsS0FBSztRQUNyQ0MsY0FBYyxHQUFHSCxVQUFVLENBQUNJLE9BQU87UUFDbkNDLFFBQVEsR0FBR0YsY0FBYyxD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
@@ -49,9 +49,12 @@ const UploadTableRuntime = {
49
49
  const uploadPath = uploadSetTable.getUploadUrl();
50
50
  let uploadUrl = newListEntity.getProperty(uploadPath);
51
51
 
52
- // set upload url as canonical url for NavigationProperties
53
- // this is a workaround as some backends cannot resolve NavigationsProperties for stream types
54
- uploadUrl = uploadUrl.replace(newListEntity.getPath(), newListEntity.getCanonicalPath());
52
+ // If the backend did not explicitly set AddressViaNavigationPath, we need to use the canonical path for upload
53
+ if (
54
+ newListEntity.getModel().getMetaModel().getObject("/@com.sap.vocabularies.Common.v1.AddressViaNavigationPath") !== true
55
+ ) {
56
+ uploadUrl = uploadUrl.replace(newListEntity.getPath(), newListEntity.getCanonicalPath());
57
+ }
55
58
 
56
59
  // set header fields like etag and token
57
60
  setHeaderFields(uploadSetItem, uploadSetItem.getMediaType(), newListEntity);