@sapui5/sap.fe.macros 1.139.0 → 1.140.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 (152) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Field.js +65 -55
  4. package/src/sap/fe/macros/Field.ts +83 -57
  5. package/src/sap/fe/macros/FooterContent.js +5 -2
  6. package/src/sap/fe/macros/FooterContent.tsx +4 -1
  7. package/src/sap/fe/macros/MessageButton.js +1 -2
  8. package/src/sap/fe/macros/MessageButton.tsx +0 -1
  9. package/src/sap/fe/macros/MultiValueField.js +1 -3
  10. package/src/sap/fe/macros/MultiValueField.tsx +0 -2
  11. package/src/sap/fe/macros/Share.js +14 -2
  12. package/src/sap/fe/macros/Share.tsx +13 -0
  13. package/src/sap/fe/macros/Status.js +226 -0
  14. package/src/sap/fe/macros/Status.tsx +192 -0
  15. package/src/sap/fe/macros/ValueHelp.js +4 -28
  16. package/src/sap/fe/macros/ValueHelp.tsx +2 -42
  17. package/src/sap/fe/macros/ai/EasyFilterBar.js +105 -96
  18. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +122 -103
  19. package/src/sap/fe/macros/ai/SummarizationButton.js +2 -2
  20. package/src/sap/fe/macros/ai/SummarizationButton.tsx +1 -1
  21. package/src/sap/fe/macros/chart/ChartHelper.js +1 -2
  22. package/src/sap/fe/macros/chart/ChartHelper.ts +0 -1
  23. package/src/sap/fe/macros/chart/ChartRuntime.js +1 -2
  24. package/src/sap/fe/macros/chart/ChartRuntime.ts +0 -1
  25. package/src/sap/fe/macros/chart/MdcChartTemplate.js +2 -4
  26. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +1 -4
  27. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.js +3 -1
  28. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.ts +2 -0
  29. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +2 -2
  30. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -2
  31. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +43 -4
  32. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +48 -1
  33. package/src/sap/fe/macros/designtime/Designtime.helper.js +28 -1
  34. package/src/sap/fe/macros/designtime/Designtime.helper.ts +27 -0
  35. package/src/sap/fe/macros/field/FieldBaseDelegate.js +13 -7
  36. package/src/sap/fe/macros/field/FieldBaseDelegate.ts +12 -8
  37. package/src/sap/fe/macros/field/FieldRuntime.js +1 -2
  38. package/src/sap/fe/macros/field/FieldRuntime.ts +0 -1
  39. package/src/sap/fe/macros/filter/FilterUtils.js +3 -5
  40. package/src/sap/fe/macros/filter/FilterUtils.ts +2 -4
  41. package/src/sap/fe/macros/form/Form.js +1 -4
  42. package/src/sap/fe/macros/form/Form.tsx +0 -3
  43. package/src/sap/fe/macros/form/FormContainer.block.js +1 -2
  44. package/src/sap/fe/macros/form/FormContainer.block.ts +0 -1
  45. package/src/sap/fe/macros/form/FormDelegate.js +20 -1
  46. package/src/sap/fe/macros/form/FormDelegate.ts +25 -0
  47. package/src/sap/fe/macros/form/FormHelper.js +1 -2
  48. package/src/sap/fe/macros/form/FormHelper.ts +0 -1
  49. package/src/sap/fe/macros/fpm/CustomFragment.block.js +1 -2
  50. package/src/sap/fe/macros/fpm/CustomFragment.block.ts +0 -1
  51. package/src/sap/fe/macros/internal/ActionCommand.block.js +1 -2
  52. package/src/sap/fe/macros/internal/ActionCommand.block.ts +0 -1
  53. package/src/sap/fe/macros/internal/FilterField.block.js +7 -1
  54. package/src/sap/fe/macros/internal/FilterField.block.ts +8 -0
  55. package/src/sap/fe/macros/internal/field/DisplayStyle.js +3 -3
  56. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +2 -2
  57. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +1 -1
  58. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +1 -0
  59. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.js +46 -8
  60. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.ts +60 -6
  61. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +38 -2
  62. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +37 -2
  63. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +1 -1
  64. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +10 -3
  65. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +13 -2
  66. package/src/sap/fe/macros/library.js +1 -1
  67. package/src/sap/fe/macros/messagebundle.properties +5 -3
  68. package/src/sap/fe/macros/messagebundle_ar.properties +7 -1
  69. package/src/sap/fe/macros/messagebundle_bg.properties +7 -1
  70. package/src/sap/fe/macros/messagebundle_ca.properties +10 -4
  71. package/src/sap/fe/macros/messagebundle_cnr.properties +7 -1
  72. package/src/sap/fe/macros/messagebundle_cs.properties +6 -0
  73. package/src/sap/fe/macros/messagebundle_cy.properties +8 -2
  74. package/src/sap/fe/macros/messagebundle_da.properties +7 -1
  75. package/src/sap/fe/macros/messagebundle_de.properties +13 -7
  76. package/src/sap/fe/macros/messagebundle_el.properties +6 -0
  77. package/src/sap/fe/macros/messagebundle_en.properties +10 -4
  78. package/src/sap/fe/macros/messagebundle_en_GB.properties +8 -2
  79. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +10 -4
  80. package/src/sap/fe/macros/messagebundle_es.properties +8 -2
  81. package/src/sap/fe/macros/messagebundle_es_MX.properties +10 -4
  82. package/src/sap/fe/macros/messagebundle_et.properties +8 -2
  83. package/src/sap/fe/macros/messagebundle_fi.properties +6 -0
  84. package/src/sap/fe/macros/messagebundle_fr.properties +8 -2
  85. package/src/sap/fe/macros/messagebundle_fr_CA.properties +7 -1
  86. package/src/sap/fe/macros/messagebundle_hi.properties +7 -1
  87. package/src/sap/fe/macros/messagebundle_hr.properties +7 -1
  88. package/src/sap/fe/macros/messagebundle_hu.properties +6 -0
  89. package/src/sap/fe/macros/messagebundle_id.properties +10 -4
  90. package/src/sap/fe/macros/messagebundle_it.properties +6 -0
  91. package/src/sap/fe/macros/messagebundle_iw.properties +7 -1
  92. package/src/sap/fe/macros/messagebundle_ja.properties +8 -2
  93. package/src/sap/fe/macros/messagebundle_kk.properties +10 -4
  94. package/src/sap/fe/macros/messagebundle_ko.properties +6 -0
  95. package/src/sap/fe/macros/messagebundle_lt.properties +7 -1
  96. package/src/sap/fe/macros/messagebundle_lv.properties +7 -1
  97. package/src/sap/fe/macros/messagebundle_mk.properties +7 -1
  98. package/src/sap/fe/macros/messagebundle_ms.properties +6 -0
  99. package/src/sap/fe/macros/messagebundle_nl.properties +6 -0
  100. package/src/sap/fe/macros/messagebundle_no.properties +6 -0
  101. package/src/sap/fe/macros/messagebundle_pl.properties +7 -1
  102. package/src/sap/fe/macros/messagebundle_pt.properties +6 -0
  103. package/src/sap/fe/macros/messagebundle_pt_PT.properties +6 -0
  104. package/src/sap/fe/macros/messagebundle_ro.properties +7 -1
  105. package/src/sap/fe/macros/messagebundle_ru.properties +9 -3
  106. package/src/sap/fe/macros/messagebundle_sh.properties +7 -1
  107. package/src/sap/fe/macros/messagebundle_sk.properties +6 -0
  108. package/src/sap/fe/macros/messagebundle_sl.properties +6 -0
  109. package/src/sap/fe/macros/messagebundle_sr.properties +7 -1
  110. package/src/sap/fe/macros/messagebundle_sv.properties +6 -0
  111. package/src/sap/fe/macros/messagebundle_th.properties +7 -1
  112. package/src/sap/fe/macros/messagebundle_tr.properties +6 -0
  113. package/src/sap/fe/macros/messagebundle_uk.properties +9 -3
  114. package/src/sap/fe/macros/messagebundle_vi.properties +8 -2
  115. package/src/sap/fe/macros/messagebundle_zh_CN.properties +6 -0
  116. package/src/sap/fe/macros/messagebundle_zh_TW.properties +7 -1
  117. package/src/sap/fe/macros/messages/MessageButton.js +39 -18
  118. package/src/sap/fe/macros/messages/MessageButton.ts +40 -17
  119. package/src/sap/fe/macros/messages/MessagePopover.js +2 -2
  120. package/src/sap/fe/macros/messages/MessagePopover.ts +4 -4
  121. package/src/sap/fe/macros/microchart/MicroChartContainer.js +1 -2
  122. package/src/sap/fe/macros/microchart/MicroChartContainer.ts +1 -2
  123. package/src/sap/fe/macros/microchart/MicroChartHelper.js +1 -2
  124. package/src/sap/fe/macros/microchart/MicroChartHelper.tsx +0 -1
  125. package/src/sap/fe/macros/share/ShareAPI.js +4 -29
  126. package/src/sap/fe/macros/share/ShareAPI.ts +1 -32
  127. package/src/sap/fe/macros/situations/SituationsPopover.js +3 -1
  128. package/src/sap/fe/macros/situations/SituationsPopover.ts +2 -0
  129. package/src/sap/fe/macros/table/MdcTableTemplate.js +3 -1
  130. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +6 -2
  131. package/src/sap/fe/macros/table/TableHelper.js +1 -2
  132. package/src/sap/fe/macros/table/TableHelper.ts +0 -1
  133. package/src/sap/fe/macros/table/TableRuntime.js +24 -5
  134. package/src/sap/fe/macros/table/TableRuntime.ts +31 -3
  135. package/src/sap/fe/macros/table/Utils.js +6 -2
  136. package/src/sap/fe/macros/table/Utils.ts +5 -1
  137. package/src/sap/fe/macros/table/delegates/ALPTableDelegate.js +1 -2
  138. package/src/sap/fe/macros/table/delegates/ALPTableDelegate.ts +0 -1
  139. package/src/sap/fe/macros/table/delegates/TableDelegate.js +1 -2
  140. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +0 -1
  141. package/src/sap/fe/macros/table/delegates/TreeTableDelegate.js +1 -2
  142. package/src/sap/fe/macros/table/delegates/TreeTableDelegate.ts +0 -1
  143. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +5 -1
  144. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +7 -0
  145. package/src/sap/fe/macros/table/mixin/TableSharing.js +3 -2
  146. package/src/sap/fe/macros/table/mixin/TableSharing.ts +9 -1
  147. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +10 -1
  148. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +17 -0
  149. package/src/sap/fe/macros/visualfilters/VisualFilter.js +1 -2
  150. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +0 -1
  151. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +2 -3
  152. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +1 -2
@@ -2,7 +2,7 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/converters/MetaModelConverter", "sap/ui/core/Component", "sap/ui/core/Element", "sap/ui/mdc/field/FieldBaseDelegate", "sap/ui/mdc/odata/v4/TypeMap", "sap/ui/mdc/p13n/StateUtil", "sap/ui/model/Filter", "../CommonHelper"], function (Log, CommonUtils, MetaModelConverter, Component, Element, FieldBaseDelegate, TypeMap, StateUtil, Filter, CommonHelper) {
5
+ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/converters/MetaModelConverter", "sap/ui/core/Component", "sap/ui/core/Element", "sap/ui/mdc/field/FieldBaseDelegate", "sap/ui/mdc/odata/v4/TypeMap", "sap/ui/mdc/p13n/StateUtil", "sap/ui/model/Filter", "../CommonHelper", "../valuehelp/ValueHelpDelegate"], function (Log, CommonUtils, MetaModelConverter, Component, Element, FieldBaseDelegate, TypeMap, StateUtil, Filter, CommonHelper, ValueHelpDelegate) {
6
6
  "use strict";
7
7
 
8
8
  var getInvolvedDataModelObjects = MetaModelConverter.getInvolvedDataModelObjects;
@@ -198,17 +198,23 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/converter
198
198
  * @param config Configuration Object
199
199
  * @returns Object containing description, key, and payload. If it is not available right now (must be requested), a <code>Promise</code> is returned
200
200
  */
201
- getItemForValue: function (field, valueHelp, config) {
201
+ getItemForValue: async function (field, valueHelp, config) {
202
202
  //BCP: 2270162887 . The MDC field should not try to get the item when the field is emptied
203
203
  // JIRA: FIORITECHP1-25361 - Improve the type-ahead behavior for missinng text annotation or constraints violations of the existing text annotation
204
204
  if (config.value === "") {
205
205
  return;
206
206
  }
207
207
  if (config.checkDescription) {
208
- const valuehelpPayload = valueHelp.getPayload();
209
- const descriptionPath = valuehelpPayload.valueHelpDescriptionPath;
210
- const maxLength = valuehelpPayload?.maxLength;
211
- const valueLength = config.value !== null && config.value !== undefined ? config.value.toString().length : 0;
208
+ const container = valueHelp.getTypeahead();
209
+ const payload = valueHelp.getPayload();
210
+ const selectedContent = container.getSelectedContent();
211
+ const contentId = selectedContent && selectedContent.getId();
212
+ // In cases where getItemForValue is called before showValueList, the description may not be available.
213
+ // Therefore, this retrieveContent method is used to update the description.
214
+ await ValueHelpDelegate.retrieveContent(valueHelp, container, contentId);
215
+ const maxLength = payload.maxLength;
216
+ const valueLength = config.value?.toString().length || 0;
217
+ const descriptionPath = payload.valueHelpDescriptionPath;
212
218
  if (descriptionPath === "") {
213
219
  // In case the property value help collection has no text annotation (descriptionPath is empty) the description check shouldn´t occur.
214
220
  // In such a case the method getDescription will be called by MDC and within this method a SideEffect is requested to retrieve the text from the text property of the main entity
@@ -356,4 +362,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/converter
356
362
  }
357
363
  });
358
364
  }, false);
359
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPYmplY3QiLCJhc3NpZ24iLCJGaWVsZEJhc2VEZWxlZ2F0ZSIsImFwaVZlcnNpb24iLCJpbml0aWFsaXplVHlwZUZyb21CaW5kaW5nIiwiZmllbGQiLCJ0eXBlIiwidmFsdWUiLCJyZXN1bHQiLCJpc0EiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJmb3JtYXRWYWx1ZSIsImJUeXBlSW5pdGlhbGl6ZWQiLCJtQ3VzdG9tVW5pdHMiLCJpbml0aWFsaXplSW50ZXJuYWxVbml0VHlwZSIsInR5cGVJbml0aWFsaXphdGlvbiIsImVuaGFuY2VWYWx1ZUZvclVuaXQiLCJ2YWx1ZXMiLCJwdXNoIiwiZ2V0RGVmYXVsdFZhbHVlSGVscERlbGVnYXRlIiwiX2ZpZWxkIiwibmFtZSIsInBheWxvYWQiLCJnZXRUeXBlTWFwIiwiVHlwZU1hcCIsIl9nZXRWYWx1ZUxpc3RQYXJhbWV0ZXIiLCJ2YWx1ZUxpc3RJbmZvIiwicHJvcGVydHlOYW1lIiwiUGFyYW1ldGVycyIsImZpbHRlciIsImVudHJ5IiwiTG9jYWxEYXRhUHJvcGVydHkiLCIkUHJvcGVydHlQYXRoIiwiX2dldEZpbHRlciIsInZhbHVlTGlzdCIsInZhbHVlSGVscFByb3BlcnR5Iiwia2V5VmFsdWUiLCJ2YWx1ZWhlbHBQYXlsb2FkIiwidmFsdWVoZWxwQ29uZGl0aW9uUGF5bG9hZCIsImJpbmRpbmdDb250ZXh0IiwiZmlsdGVyQmFyQ29uZGl0aW9ucyIsImZpbHRlcnMiLCJwYXJhbWV0ZXJzIiwicGFyYW1ldGVyIiwiJFR5cGUiLCJWYWx1ZUxpc3RQcm9wZXJ0eSIsImZpbHRlclZhbHVlIiwiaXNBY3Rpb25QYXJhbWV0ZXJEaWFsb2ciLCJhcGRGaWVsZFBhdGgiLCJhcGRGaWVsZCIsIkVsZW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImdldFZhbHVlIiwic291cmNlUGF0aCIsImNvbmRpdGlvblBheWxvYWQiLCJnZXRPYmplY3QiLCJjb25kaXRpb24iLCJvcGVyYXRvciIsIkZpbHRlciIsInBhdGgiLCJ2YWx1ZTEiLCJjb25jYXQiLCJfZ2V0UmVtYWluaW5nS2V5VmFsdWVGaWx0ZXJzIiwiJG1vZGVsIiwidmFsdWVMaXN0TW9kZWwiLCJDb2xsZWN0aW9uUGF0aCIsImNvbGxlY3Rpb25QYXRoIiwibWV0YUNvbnRleHQiLCJnZXRNZXRhTW9kZWwiLCJnZXRNZXRhQ29udGV4dCIsImVudGl0eVR5cGUiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiYWxsTG9jYWxEYXRhUHJvcGVydGllcyIsInJlZHVjZSIsImFyciIsImFsbFJlbWFpbmluZ0tleXMiLCJrZXlzIiwiX3JlZiIsImtleU5hbWUiLCJpbmNsdWRlcyIsImhhc093blByb3BlcnR5Iiwia2V5Iiwia2V5Q29udGV4dCIsIkNvbW1vbkhlbHBlciIsImlzUHJvcGVydHlGaWx0ZXJhYmxlIiwiZ2V0SXRlbUZvclZhbHVlIiwidmFsdWVIZWxwIiwiY29uZmlnIiwiY2hlY2tEZXNjcmlwdGlvbiIsImdldFBheWxvYWQiLCJkZXNjcmlwdGlvblBhdGgiLCJ2YWx1ZUhlbHBEZXNjcmlwdGlvblBhdGgiLCJtYXhMZW5ndGgiLCJ2YWx1ZUxlbmd0aCIsInRvU3RyaW5nIiwiX2dldEZpbHRlckJhciIsImZpbHRlckJhckFQSSIsImdldFBhcmVudCIsImdldENvbnRlbnQiLCJnZXREZXNjcmlwdGlvbiIsIl9jb25kaXRpb25JbiIsIl9jb25kaXRpb25PdXQiLCJfQ29uZGl0aW9uTW9kZWwiLCJfY29uZGl0aW9uTW9kZWxOYW1lIiwiY29udHJvbCIsIl90eXBlIiwiZW1wdHlBbGxvd2VkIiwiZ2V0RGlzcGxheSIsInJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QiLCJpc0ZpbHRlckZpZWxkIiwiZGF0YU1vZGVsIiwiZ2V0TW9kZWwiLCJvd25lciIsIkNvbXBvbmVudCIsImdldE93bmVyQ29tcG9uZW50Rm9yIiwibWV0YU1vZGVsIiwiQ29tbW9uVXRpbHMiLCJnZXRBcHBDb21wb25lbnQiLCJ2YWx1ZUhlbHBRdWFsaWZpZXIiLCJwcm9wZXJ0eVBhdGgiLCJwcm9wZXJ0eURlc2NyaXB0aW9uUGF0aCIsInRleHRQcm9wZXJ0eSIsInJlcXVlc3RWYWx1ZUxpc3RJbmZvIiwiZmlsdGVyQmFyIiwiZmlsdGVyQ29uZGl0aW9ucyIsImZpbHRlclN0YXRlIiwiU3RhdGVVdGlsIiwicmV0cmlldmVFeHRlcm5hbFN0YXRlIiwidmFsdWVIZWxwUGFyYW1ldGVycyIsIkVycm9yIiwidGV4dEFubm90YXRpb24iLCIkUGF0aCIsImxpc3RCaW5kaW5nIiwiYmluZExpc3QiLCIkc2VsZWN0IiwiY29udGV4dHMiLCJyZXF1ZXN0Q29udGV4dHMiLCJsYXN0SW5kZXgiLCJsYXN0SW5kZXhPZiIsInNpZGVFZmZlY3RQYXRoIiwic3Vic3RyaW5nIiwic2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwicmVxdWVzdFNpZGVFZmZlY3RzIiwiTG9nIiwid2FybmluZyIsImV4dGVybmFsSWRQYXRoIiwiZXh0ZXJuYWxJZEZ1bGxQYXRoIiwicmVwbGFjZSIsImV4dGVybmFsSWROYW1lIiwiZXh0ZXJuYWxJZERlc2NyaXB0aW9uUGF0aCIsImVycm9yIiwic3RhdHVzIiwibWVzc2FnZSIsIlN0cmluZyIsIm1zZyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRmllbGRCYXNlRGVsZWdhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25cIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHsgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25WYWx1ZUxpc3RUeXBlLCBWYWx1ZUhlbHBQYXlsb2FkIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvdmFsdWVoZWxwL1ZhbHVlTGlzdEhlbHBlclwiO1xuaW1wb3J0IENvbXBvbmVudCBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgRWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgRmllbGQgZnJvbSBcInNhcC91aS9tZGMvRmllbGRcIjtcbmltcG9ydCB0eXBlIFZhbHVlSGVscCBmcm9tIFwic2FwL3VpL21kYy9WYWx1ZUhlbHBcIjtcbmltcG9ydCB0eXBlIHsgSXRlbUZvclZhbHVlQ29uZmlndXJhdGlvbiB9IGZyb20gXCJzYXAvdWkvbWRjL1ZhbHVlSGVscFwiO1xuaW1wb3J0IHsgdHlwZSBDb25kaXRpb25PYmplY3QgfSBmcm9tIFwic2FwL3VpL21kYy9jb25kaXRpb24vQ29uZGl0aW9uXCI7XG5pbXBvcnQgdHlwZSBDb25kaXRpb25Nb2RlbCBmcm9tIFwic2FwL3VpL21kYy9jb25kaXRpb24vQ29uZGl0aW9uTW9kZWxcIjtcbmltcG9ydCB0eXBlIEZpZWxkQmFzZSBmcm9tIFwic2FwL3VpL21kYy9maWVsZC9GaWVsZEJhc2VcIjtcbmltcG9ydCBGaWVsZEJhc2VEZWxlZ2F0ZSBmcm9tIFwic2FwL3VpL21kYy9maWVsZC9GaWVsZEJhc2VEZWxlZ2F0ZVwiO1xuaW1wb3J0IFR5cGVNYXAgZnJvbSBcInNhcC91aS9tZGMvb2RhdGEvdjQvVHlwZU1hcFwiO1xuaW1wb3J0IFN0YXRlVXRpbCBmcm9tIFwic2FwL3VpL21kYy9wMTNuL1N0YXRlVXRpbFwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IHR5cGUgU2ltcGxlVHlwZSBmcm9tIFwic2FwL3VpL21vZGVsL1NpbXBsZVR5cGVcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwiLi4vQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXIgZnJvbSBcIi4uL2NvbnRyb2xzL0ZpbHRlckJhclwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyQVBJIGZyb20gXCIuLi9maWx0ZXJCYXIvRmlsdGVyQmFyQVBJXCI7XG5pbXBvcnQgdHlwZSB7IENvbmRpdGlvblBheWxvYWRNYXAsIENvbmRpdGlvblBheWxvYWRUeXBlLCBFeHRlcm5hbFN0YXRlVHlwZSB9IGZyb20gXCIuLi92YWx1ZWhlbHAvVmFsdWVIZWxwRGVsZWdhdGVcIjtcblxuZXhwb3J0IHR5cGUgRmllbGRQYXlsb2FkID0ge1xuXHRyZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0PzogYm9vbGVhbjtcblx0aXNGaWx0ZXJGaWVsZD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBWYWx1ZSA9IHN0cmluZyB8IERhdGUgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkIHwgbnVsbDtcblxuZXhwb3J0IHR5cGUgVHlwZUluaXRpYWxpemF0aW9uID0ge1xuXHRiVHlwZUluaXRpYWxpemVkPzogYm9vbGVhbjtcblx0bUN1c3RvbVVuaXRzPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQ29uZmlnID0ge1xuXHR2YWx1ZTogVmFsdWU7XG5cdHBhcnNlZFZhbHVlOiBWYWx1ZTtcblx0YmluZGluZ0NvbnRleHQ6IENvbnRleHQ7XG5cdGNoZWNrS2V5OiBib29sZWFuO1xuXHRjaGVja0Rlc2NyaXB0aW9uOiBib29sZWFuO1xuXHRjb25kaXRpb25Nb2RlbD86IENvbmRpdGlvbk1vZGVsO1xuXHRjb25kaXRpb25Nb2RlbE5hbWU/OiBzdHJpbmc7XG5cdGNvbnRyb2w/OiBvYmplY3Q7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBPYmplY3QuYXNzaWduKHt9LCBGaWVsZEJhc2VEZWxlZ2F0ZSwge1xuXHRhcGlWZXJzaW9uOiAyLFxuXG5cdC8qKlxuXHQgKiBJZiB0aGUgPGNvZGU+RmllbGQ8L2NvZGU+IGNvbnRyb2wgaXMgdXNlZCwgdGhlIHVzZWQgZGF0YSB0eXBlIG1pZ2h0IGNvbWUgZnJvbSB0aGUgYmluZGluZy5cblx0ICogSW4gVjQtdW5pdCBvciBjdXJyZW5jeSBjYXNlIGl0IG1pZ2h0IG5lZWQgdG8gYmUgZm9ybWF0dGVkIG9uY2UuXG5cdCAqIFRvIGluaXRpYWxpemUgdGhlIGludGVybmFsIHR5cGUgbGF0ZXIgb24sIHRoZSBjdXJyZW5jaWVzIG11c3QgYmUgcmV0dXJuZWQuXG5cdCAqIEBwYXJhbSBmaWVsZCBUaGUgPGNvZGU+RmllbGQ8L2NvZGU+IGluc3RhbmNlXG5cdCAqIEBwYXJhbSB0eXBlIFR5cGUgZnJvbSBiaW5kaW5nXG5cdCAqIEBwYXJhbSB2YWx1ZSBHaXZlbiB2YWx1ZVxuXHQgKiBAcmV0dXJucyBJbmZvcm1hdGlvbiBuZWVkZWQgdG8gaW5pdGlhbGl6ZSBpbnRlcm5hbCB0eXBlIChuZWVkcyB0byBzZXQgYlR5cGVJbml0aWFsaXplZCB0byB0cnVlIGlmIGluaXRpYWxpemVkKVxuXHQgKi9cblx0aW5pdGlhbGl6ZVR5cGVGcm9tQmluZGluZzogZnVuY3Rpb24gKGZpZWxkOiBGaWVsZCwgdHlwZTogU2ltcGxlVHlwZSB8IHVuZGVmaW5lZCwgdmFsdWU6IFZhbHVlIHwgVmFsdWVbXSkge1xuXHRcdC8vIFY0IFVuaXQgYW5kIEN1cnJlbmN5IHR5cGVzIGhhdmUgYSBtYXAgd2l0aCB2YWxpZCB1bml0cyBhbmQgY3JlYXRlIGFuIGludGVybmFsIGN1c3RvbWl6aW5nIGZvciBpdC5cblx0XHQvLyBUaGUgRmllbGQgbmVlZHMgdG8ga2VlcCB0aGlzIGN1c3RvbWl6aW5nIGxvZ2ljIHdoZW4gY3JlYXRpbmcgdGhlIGludGVybmFsIHR5cGUuXG5cdFx0Ly8gKEFzIGV4dGVybmFsIFJBVyBiaW5kaW5nIGlzIHVzZWQgdGhlcmUgaXMgbm8gZm9ybWF0dGluZyBvbiBwYXJzaW5nLilcblxuXHRcdGNvbnN0IHJlc3VsdDogVHlwZUluaXRpYWxpemF0aW9uID0ge307XG5cdFx0aWYgKFxuXHRcdFx0dHlwZSAmJlxuXHRcdFx0dHlwZS5pc0EoW1wic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuVW5pdFwiLCBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkN1cnJlbmN5XCJdKSAmJlxuXHRcdFx0QXJyYXkuaXNBcnJheSh2YWx1ZSkgJiZcblx0XHRcdHZhbHVlLmxlbmd0aCA+IDIgJiZcblx0XHRcdHZhbHVlWzJdICE9PSB1bmRlZmluZWRcblx0XHQpIHtcblx0XHRcdC8vIGZvcm1hdCBvbmNlIHRvIHNldCBpbnRlcm5hbCBjdXN0b21pemluZy4gQWxsb3cgbnVsbCBhcyB2YWxpZCB2YWx1ZXMgZm9yIGN1c3RvbSB1bml0c1xuXHRcdFx0dHlwZS5mb3JtYXRWYWx1ZSh2YWx1ZSwgXCJzdHJpbmdcIik7XG5cdFx0XHRyZXN1bHQuYlR5cGVJbml0aWFsaXplZCA9IHRydWU7XG5cdFx0XHRyZXN1bHQubUN1c3RvbVVuaXRzID0gdmFsdWVbMl0gYXMgc3RyaW5nOyAvLyBUT0RPOiBmaW5kIGEgYmV0dGVyIHdheSB0byBwcm92aWRlIGN1c3RvbSB1bml0cyB0byBpbnRlcm5hbCB0eXBlXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSxcblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgdW5pdCB0eXBlLlxuXHQgKiBJZiB0aGUgPGNvZGU+RmllbGQ8L2NvZGU+IGNvbnRyb2wgaXMgdXNlZCwgdGhlIHVzZWQgZGF0YSB0eXBlIG1pZ2h0IGNvbWUgZnJvbSB0aGUgYmluZGluZy5cblx0ICogSWYgdGhlIHR5cGUgaXMgYSBWNCB1bml0IG9yIGN1cnJlbmN5LCBpdCBtaWdodCBuZWVkIHRvIGJlIGZvcm1hdHRlZCBvbmNlLlxuXHQgKiBAcGFyYW0gZmllbGQgVGhlIDxjb2RlPkZpZWxkPC9jb2RlPiBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gdHlwZSBUeXBlIGZyb20gYmluZGluZ1xuXHQgKiBAcGFyYW0gdHlwZUluaXRpYWxpemF0aW9uIEluZm9ybWF0aW9uIG5lZWRlZCB0byBpbml0aWFsaXplIGludGVybmFsIHR5cGVcblx0ICovXG5cdGluaXRpYWxpemVJbnRlcm5hbFVuaXRUeXBlOiBmdW5jdGlvbiAoZmllbGQ6IEZpZWxkLCB0eXBlOiBTaW1wbGVUeXBlLCB0eXBlSW5pdGlhbGl6YXRpb24/OiBUeXBlSW5pdGlhbGl6YXRpb24pIHtcblx0XHRpZiAodHlwZUluaXRpYWxpemF0aW9uPy5tQ3VzdG9tVW5pdHMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gaWYgYWxyZWFkeSBpbml0aWFsaXplZCBpbml0aWFsaXplIG5ldyB0eXBlIHRvby5cblx0XHRcdHR5cGUuZm9ybWF0VmFsdWUoW251bGwsIG51bGwsIHR5cGVJbml0aWFsaXphdGlvbi5tQ3VzdG9tVW5pdHNdLCBcInN0cmluZ1wiKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gZW5oYW5jZXMgdGhlIHZhbHVlIHdpdGggdW5pdCBvciBjdXJyZW5jeSBpbmZvcm1hdGlvbiBpZiBuZWVkZWQgYnkgdGhlIGRhdGEgdHlwZS5cblx0ICogQHBhcmFtIGZpZWxkIFRoZSA8Y29kZT5GaWVsZDwvY29kZT4gaW5zdGFuY2Vcblx0ICogQHBhcmFtICB2YWx1ZXMgVmFsdWVzXG5cdCAqIEBwYXJhbSAgdHlwZUluaXRpYWxpemF0aW9uIEluZm9ybWF0aW9uIG5lZWRlZCB0byBpbml0aWFsaXplIGludGVybmFsIHR5cGVcblx0ICogQHJldHVybnMgVmFsdWVzXG5cdCAqL1xuXHRlbmhhbmNlVmFsdWVGb3JVbml0OiBmdW5jdGlvbiAoZmllbGQ6IEZpZWxkLCB2YWx1ZXM6IFZhbHVlW10sIHR5cGVJbml0aWFsaXphdGlvbj86IFR5cGVJbml0aWFsaXphdGlvbikge1xuXHRcdGlmICh0eXBlSW5pdGlhbGl6YXRpb24/LmJUeXBlSW5pdGlhbGl6ZWQgPT09IHRydWUgJiYgdmFsdWVzLmxlbmd0aCA9PT0gMikge1xuXHRcdFx0dmFsdWVzLnB1c2godHlwZUluaXRpYWxpemF0aW9uLm1DdXN0b21Vbml0cyk7XG5cdFx0XHRyZXR1cm4gdmFsdWVzO1xuXHRcdH1cblxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB3aGljaCA8Y29kZT5WYWx1ZUhlbHBEZWxlZ2F0ZTwvY29kZT4gaXMgdXNlZFxuXHQgKiBpZiBhIGRlZmF1bHQgZmllbGQgaGVscCAoZm9yIGV4YW1wbGUsIGZvciBkZWZpbmluZyBjb25kaXRpb25zIGluIDwvY29kZT5GaWx0ZXJGaWVsZDwvY29kZT4pXG5cdCAqIGlzIGNyZWF0ZWQuXG5cdCAqIEBwYXJhbSBfZmllbGQgVGhlIDxjb2RlPkZpZWxkPC9jb2RlPiBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBEZWxlZ2F0ZSBvYmplY3Qgd2l0aCBuYW1lIGFuZCBwYXlsb2FkXG5cdCAqL1xuXHRnZXREZWZhdWx0VmFsdWVIZWxwRGVsZWdhdGU6IGZ1bmN0aW9uIChfZmllbGQ6IEZpZWxkKSB7XG5cdFx0cmV0dXJuIHsgbmFtZTogXCJzYXAvdWkvbWRjL29kYXRhL3Y0L1ZhbHVlSGVscERlbGVnYXRlXCIsIHBheWxvYWQ6IHt9IH07XG5cdH0sXG5cblx0Z2V0VHlwZU1hcDogZnVuY3Rpb24gKF9maWVsZDogRmllbGQpIHtcblx0XHRyZXR1cm4gVHlwZU1hcDtcblx0fSxcblxuXHQvKipcblx0ICogRGV0ZXJtaW5lIGFsbCBwYXJhbWV0ZXJzIGluIGEgdmFsdWUgaGVscCB0aGF0IHVzZSBhIHNwZWNpZmljIHByb3BlcnR5LlxuXHQgKiBAcGFyYW0gdmFsdWVMaXN0SW5mbyBWYWx1ZSBsaXN0IGluZm9cblx0ICogQHBhcmFtIHByb3BlcnR5TmFtZSBOYW1lIG9mIHRoZSBwcm9wZXJ0eVxuXHQgKiBAcmV0dXJucyBMaXN0IG9mIGFsbCBmb3VuZCBwYXJhbWV0ZXJzXG5cdCAqL1xuXHRfZ2V0VmFsdWVMaXN0UGFyYW1ldGVyOiBmdW5jdGlvbiAodmFsdWVMaXN0SW5mbzogQW5ub3RhdGlvblZhbHVlTGlzdFR5cGUsIHByb3BlcnR5TmFtZTogc3RyaW5nKSB7XG5cdFx0Ly9kZXRlcm1pbmUgcGF0aCB0byB2YWx1ZSBsaXN0IHByb3BlcnR5XG5cdFx0cmV0dXJuIHZhbHVlTGlzdEluZm8uUGFyYW1ldGVycy5maWx0ZXIoZnVuY3Rpb24gKGVudHJ5KSB7XG5cdFx0XHRpZiAoZW50cnkuTG9jYWxEYXRhUHJvcGVydHkpIHtcblx0XHRcdFx0cmV0dXJuIGVudHJ5LkxvY2FsRGF0YVByb3BlcnR5LiRQcm9wZXJ0eVBhdGggPT09IHByb3BlcnR5TmFtZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSxcblx0LyoqXG5cdCAqIEJ1aWxkIGZpbHRlcnMgZm9yIGVhY2ggcmVsZXZhbnQgcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gdmFsdWVMaXN0IFZhbHVlIGxpc3QgaW5mb1xuXHQgKiBAcGFyYW0gcHJvcGVydHlOYW1lIE5hbWUgb2YgdGhlIHByb3BlcnR5XG5cdCAqIEBwYXJhbSB2YWx1ZUhlbHBQcm9wZXJ0eSBOYW1lIG9mIHRoZSB2YWx1ZSBoZWxwIHByb3BlcnR5XG5cdCAqIEBwYXJhbSBrZXlWYWx1ZSBWYWx1ZSBvZiB0aGUgcHJvcGVydHlcblx0ICogQHBhcmFtIHZhbHVlaGVscFBheWxvYWQgUGF5bG9hZCBvZiB0aGUgdmFsdWUgaGVscFxuXHQgKiBAcGFyYW0gdmFsdWVoZWxwQ29uZGl0aW9uUGF5bG9hZCBBZGRpdGlvbmFsIGNvbmRpdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhpcyBrZXlcblx0ICogQHBhcmFtIGJpbmRpbmdDb250ZXh0IEJpbmRpbmdDb250ZXh0IG9mIHRoZSBmaWVsZFxuXHQgKiBAcmV0dXJucyBMaXN0IG9mIGZpbHRlcnNcblx0ICovXG5cdF9nZXRGaWx0ZXI6IGZ1bmN0aW9uIChcblx0XHR2YWx1ZUxpc3Q6IEFubm90YXRpb25WYWx1ZUxpc3RUeXBlLFxuXHRcdHByb3BlcnR5TmFtZTogc3RyaW5nLFxuXHRcdHZhbHVlSGVscFByb3BlcnR5OiBzdHJpbmcsXG5cdFx0a2V5VmFsdWU6IHN0cmluZyxcblx0XHR2YWx1ZWhlbHBQYXlsb2FkOiBWYWx1ZUhlbHBQYXlsb2FkLFxuXHRcdHZhbHVlaGVscENvbmRpdGlvblBheWxvYWQ6IENvbmRpdGlvblBheWxvYWRUeXBlW10gfCB1bmRlZmluZWQsXG5cdFx0YmluZGluZ0NvbnRleHQ/OiBDb250ZXh0LFxuXHRcdGZpbHRlckJhckNvbmRpdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBDb25kaXRpb25PYmplY3RbXT5cblx0KSB7XG5cdFx0bGV0IGZpbHRlcnM6IEZpbHRlcltdID0gW107XG5cdFx0Y29uc3QgcGFyYW1ldGVycyA9IHZhbHVlTGlzdC5QYXJhbWV0ZXJzLmZpbHRlcihmdW5jdGlvbiAocGFyYW1ldGVyKSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRwYXJhbWV0ZXIuJFR5cGUgPT09IENvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJJbiB8fFxuXHRcdFx0XHRwYXJhbWV0ZXIuJFR5cGUgPT09IENvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dCB8fFxuXHRcdFx0XHQocGFyYW1ldGVyLkxvY2FsRGF0YVByb3BlcnR5Py4kUHJvcGVydHlQYXRoID09PSBwcm9wZXJ0eU5hbWUgJiYgcGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5ID09PSB2YWx1ZUhlbHBQcm9wZXJ0eSlcblx0XHRcdCk7XG5cdFx0fSk7XG5cdFx0Zm9yIChjb25zdCBwYXJhbWV0ZXIgb2YgcGFyYW1ldGVycykge1xuXHRcdFx0bGV0IGZpbHRlclZhbHVlO1xuXHRcdFx0aWYgKHBhcmFtZXRlci5Mb2NhbERhdGFQcm9wZXJ0eT8uJFByb3BlcnR5UGF0aCA9PT0gcHJvcGVydHlOYW1lKSB7XG5cdFx0XHRcdGZpbHRlclZhbHVlID0ga2V5VmFsdWU7XG5cdFx0XHR9IGVsc2UgaWYgKHZhbHVlaGVscFBheWxvYWQ/LmlzQWN0aW9uUGFyYW1ldGVyRGlhbG9nID09PSB0cnVlKSB7XG5cdFx0XHRcdGNvbnN0IGFwZEZpZWxkUGF0aCA9IGBBUERfOjoke3BhcmFtZXRlci5Mb2NhbERhdGFQcm9wZXJ0eT8uJFByb3BlcnR5UGF0aH1gO1xuXHRcdFx0XHRjb25zdCBhcGRGaWVsZCA9IEVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoYXBkRmllbGRQYXRoKSBhcyBGaWVsZDtcblx0XHRcdFx0ZmlsdGVyVmFsdWUgPSBhcGRGaWVsZD8uZ2V0VmFsdWUoKTtcblx0XHRcdH0gZWxzZSBpZiAodmFsdWVoZWxwQ29uZGl0aW9uUGF5bG9hZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbnN0IHNvdXJjZVBhdGggPSBwYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHk7XG5cdFx0XHRcdGNvbnN0IGNvbmRpdGlvblBheWxvYWQgPSB2YWx1ZWhlbHBDb25kaXRpb25QYXlsb2FkPy5bMF07XG5cdFx0XHRcdGZpbHRlclZhbHVlID0gc291cmNlUGF0aCAmJiBjb25kaXRpb25QYXlsb2FkPy5bc291cmNlUGF0aF07XG5cdFx0XHR9IGVsc2UgaWYgKGJpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRcdC8vIGlmIHRoZSB2YWx1ZSBoZWxwIGlzIG5vdCB1c2VkIHRyeSBnZXR0aW5nIHRoZSBmaWx0ZXIgdmFsdWUgZnJvbSB0aGUgYmluZGluZyBjb250ZXh0XG5cdFx0XHRcdGNvbnN0IHNvdXJjZVBhdGggPSBwYXJhbWV0ZXIuTG9jYWxEYXRhUHJvcGVydHk/LiRQcm9wZXJ0eVBhdGg7XG5cdFx0XHRcdGZpbHRlclZhbHVlID0gYmluZGluZ0NvbnRleHQuZ2V0T2JqZWN0KHNvdXJjZVBhdGgpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWZpbHRlclZhbHVlICYmIGZpbHRlckJhckNvbmRpdGlvbnMpIHtcblx0XHRcdFx0Y29uc3QgY29uZGl0aW9uID0gZmlsdGVyQmFyQ29uZGl0aW9ucz8uW3BhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eV07XG5cdFx0XHRcdGlmIChjb25kaXRpb24/Lmxlbmd0aCA9PT0gMSAmJiBjb25kaXRpb25bMF0/Lm9wZXJhdG9yID09PSBcIkVRXCIpIHtcblx0XHRcdFx0XHRmaWx0ZXJWYWx1ZSA9IGNvbmRpdGlvblswXT8udmFsdWVzWzBdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvKiBBZGQgdmFsdWUgdG8gdGhlIGZpbHRlciBmb3IgdGhlIHRleHQgZGV0ZXJtaW5hdGlvbiAqL1xuXHRcdFx0aWYgKGZpbHRlclZhbHVlICE9PSBudWxsICYmIGZpbHRlclZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0ZmlsdGVycy5wdXNoKG5ldyBGaWx0ZXIoeyBwYXRoOiBwYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHksIG9wZXJhdG9yOiBcIkVRXCIsIHZhbHVlMTogZmlsdGVyVmFsdWUgfSkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAodmFsdWVoZWxwQ29uZGl0aW9uUGF5bG9hZD8uWzBdKSB7XG5cdFx0XHQvLyBJbiBjYXNlIG9mIG11bHRpcGxlIGtleXMgZm9yIHRoZSB2YWx1ZWxpc3QgY29sbGVjdGlvbiwgdGhlIG1haW4gVmFsdWVMaXN0UHJvcGVydHkgbWlnaHQgbm90IGJlIHVuaXF1ZSB0byBnZXQgZXhhY3QgdmFsdWUgbGlzdCBzZWxlY3Rpb24uXG5cdFx0XHQvLyBTbywgd2UgYWRkIGZpbHRlcnMgZm9yIGtleSBwcm9wZXJ0aWVzIGlmIHRoZXkgYXJlIHByZXNlbnQgaW4gdGhlIHZhbHVlaGVscENvbmRpdGlvblBheWxvYWQuXG5cdFx0XHRmaWx0ZXJzID0gZmlsdGVycy5jb25jYXQodGhpcy5fZ2V0UmVtYWluaW5nS2V5VmFsdWVGaWx0ZXJzKHZhbHVlaGVscENvbmRpdGlvblBheWxvYWRbMF0sIHZhbHVlTGlzdCkpO1xuXHRcdH1cblx0XHRyZXR1cm4gZmlsdGVycztcblx0fSxcblxuXHQvKipcblx0ICogR2V0IG1vZGVsIGZpbHRlcnMgdG8gZW5zdXJlIGEgcHJlY2lzZSBzZWxlY3Rpb24gZnJvbSB0aGUgY29uZGl0aW9uIHBheWxvYWQuXG5cdCAqIEBwYXJhbSBjb25kaXRpb25QYXlsb2FkIEFkZGl0aW9uYWwgY29uZGl0aW9uIGluZm9ybWF0aW9uIGZvciB0aGlzIGtleVxuXHQgKiBAcGFyYW0gdmFsdWVMaXN0IFZhbHVlIGxpc3QgaW5mb3JtYXRpb25cblx0ICogQHJldHVybnMgTGlzdCBvZiBmaWx0ZXJzXG5cdCAqL1xuXHRfZ2V0UmVtYWluaW5nS2V5VmFsdWVGaWx0ZXJzKGNvbmRpdGlvblBheWxvYWQ6IENvbmRpdGlvblBheWxvYWRUeXBlLCB2YWx1ZUxpc3Q6IEFubm90YXRpb25WYWx1ZUxpc3RUeXBlKTogRmlsdGVyW10ge1xuXHRcdGNvbnN0IHsgJG1vZGVsOiB2YWx1ZUxpc3RNb2RlbCwgQ29sbGVjdGlvblBhdGg6IGNvbGxlY3Rpb25QYXRoLCBQYXJhbWV0ZXJzOiBwYXJhbWV0ZXJzIH0gPSB2YWx1ZUxpc3Q7XG5cdFx0Y29uc3QgbWV0YUNvbnRleHQgPSB2YWx1ZUxpc3RNb2RlbC5nZXRNZXRhTW9kZWwoKS5nZXRNZXRhQ29udGV4dChgLyR7Y29sbGVjdGlvblBhdGh9YCk7XG5cdFx0Y29uc3QgZW50aXR5VHlwZSA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhQ29udGV4dCkudGFyZ2V0RW50aXR5VHlwZTtcblx0XHRjb25zdCBhbGxMb2NhbERhdGFQcm9wZXJ0aWVzID0gcGFyYW1ldGVycy5yZWR1Y2UoKGFyciwgcGFyYW1ldGVyKSA9PiB7XG5cdFx0XHRpZiAocGFyYW1ldGVyLkxvY2FsRGF0YVByb3BlcnR5Py4kUHJvcGVydHlQYXRoKSB7XG5cdFx0XHRcdGFyci5wdXNoKHBhcmFtZXRlci5Mb2NhbERhdGFQcm9wZXJ0eS4kUHJvcGVydHlQYXRoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBhcnI7XG5cdFx0fSwgW10gYXMgc3RyaW5nW10pO1xuXHRcdGNvbnN0IGFsbFJlbWFpbmluZ0tleXMgPSBlbnRpdHlUeXBlLmtleXMucmVkdWNlKChhcnIsIHsgbmFtZToga2V5TmFtZSB9KSA9PiB7XG5cdFx0XHRpZiAoIWFsbExvY2FsRGF0YVByb3BlcnRpZXMuaW5jbHVkZXMoa2V5TmFtZSkgJiYgY29uZGl0aW9uUGF5bG9hZC5oYXNPd25Qcm9wZXJ0eShrZXlOYW1lKSkge1xuXHRcdFx0XHRhcnIucHVzaChrZXlOYW1lKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBhcnI7XG5cdFx0fSwgW10gYXMgc3RyaW5nW10pO1xuXHRcdGlmIChhbGxSZW1haW5pbmdLZXlzLmxlbmd0aCA+IDApIHtcblx0XHRcdHJldHVybiBhbGxSZW1haW5pbmdLZXlzLnJlZHVjZSgoZmlsdGVyczogRmlsdGVyW10sIGtleTogc3RyaW5nKTogRmlsdGVyW10gPT4ge1xuXHRcdFx0XHQvLyBUaGlzIGlzIGEgbWV0YW1vZGVsIG9wZXJhdGlvbi4gVGhlIG9yaWdpbmFsIGlzUHJvcGVydHlGaWx0ZXJhYmxlIG5lZWRzIHRvIGJlIGNvbnZlcnRlZCBsYXRlci5cblx0XHRcdFx0Y29uc3Qga2V5Q29udGV4dCA9IHZhbHVlTGlzdE1vZGVsLmdldE1ldGFNb2RlbCgpLmdldE1ldGFDb250ZXh0KGAvJHtjb2xsZWN0aW9uUGF0aH0vJHtrZXl9YCk7XG5cdFx0XHRcdGlmIChDb21tb25IZWxwZXIuaXNQcm9wZXJ0eUZpbHRlcmFibGUoa2V5Q29udGV4dCwgdW5kZWZpbmVkLCB0cnVlKSkge1xuXHRcdFx0XHRcdGZpbHRlcnMucHVzaChuZXcgRmlsdGVyKHsgcGF0aDoga2V5LCBvcGVyYXRvcjogXCJFUVwiLCB2YWx1ZTE6IGNvbmRpdGlvblBheWxvYWRba2V5XSB9KSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZpbHRlcnM7XG5cdFx0XHR9LCBbXSk7XG5cdFx0fVxuXHRcdHJldHVybiBbXTtcblx0fSxcblxuXHQvKipcblx0ICogRGV0ZXJtaW5lcyB0aGUga2V5LCBkZXNjcmlwdGlvbiwgYW5kIHBheWxvYWQgb2YgYSB1c2VyIGlucHV0LlxuXHQgKiBAcGFyYW0gZmllbGQgVGhlIDxjb2RlPkZpZWxkPC9jb2RlPiBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gdmFsdWVIZWxwIFZhbHVlIGhlbHAgaW5zdGFuY2Vcblx0ICogQHBhcmFtIGNvbmZpZyBDb25maWd1cmF0aW9uIE9iamVjdFxuXHQgKiBAcmV0dXJucyBPYmplY3QgY29udGFpbmluZyBkZXNjcmlwdGlvbiwga2V5LCBhbmQgcGF5bG9hZC4gSWYgaXQgaXMgbm90IGF2YWlsYWJsZSByaWdodCBub3cgKG11c3QgYmUgcmVxdWVzdGVkKSwgYSA8Y29kZT5Qcm9taXNlPC9jb2RlPiBpcyByZXR1cm5lZFxuXHQgKi9cblx0Z2V0SXRlbUZvclZhbHVlOiBmdW5jdGlvbiAoZmllbGQ6IEZpZWxkLCB2YWx1ZUhlbHA6IFZhbHVlSGVscCwgY29uZmlnOiBJdGVtRm9yVmFsdWVDb25maWd1cmF0aW9uKSB7XG5cdFx0Ly9CQ1A6IDIyNzAxNjI4ODcgLiBUaGUgTURDIGZpZWxkIHNob3VsZCBub3QgdHJ5IHRvIGdldCB0aGUgaXRlbSB3aGVuIHRoZSBmaWVsZCBpcyBlbXB0aWVkXG5cdFx0Ly8gSklSQTogRklPUklURUNIUDEtMjUzNjEgLSBJbXByb3ZlIHRoZSB0eXBlLWFoZWFkIGJlaGF2aW9yIGZvciBtaXNzaW5uZyB0ZXh0IGFubm90YXRpb24gb3IgY29uc3RyYWludHMgdmlvbGF0aW9ucyBvZiB0aGUgZXhpc3RpbmcgdGV4dCBhbm5vdGF0aW9uXG5cdFx0aWYgKGNvbmZpZy52YWx1ZSA9PT0gXCJcIikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChjb25maWcuY2hlY2tEZXNjcmlwdGlvbikge1xuXHRcdFx0Y29uc3QgdmFsdWVoZWxwUGF5bG9hZCA9IHZhbHVlSGVscC5nZXRQYXlsb2FkKCkgYXMgVmFsdWVIZWxwUGF5bG9hZDtcblx0XHRcdGNvbnN0IGRlc2NyaXB0aW9uUGF0aCA9IHZhbHVlaGVscFBheWxvYWQudmFsdWVIZWxwRGVzY3JpcHRpb25QYXRoO1xuXHRcdFx0Y29uc3QgbWF4TGVuZ3RoID0gdmFsdWVoZWxwUGF5bG9hZD8ubWF4TGVuZ3RoO1xuXHRcdFx0Y29uc3QgdmFsdWVMZW5ndGggPSBjb25maWcudmFsdWUgIT09IG51bGwgJiYgY29uZmlnLnZhbHVlICE9PSB1bmRlZmluZWQgPyBjb25maWcudmFsdWUudG9TdHJpbmcoKS5sZW5ndGggOiAwO1xuXHRcdFx0aWYgKGRlc2NyaXB0aW9uUGF0aCA9PT0gXCJcIikge1xuXHRcdFx0XHQvLyBJbiBjYXNlIHRoZSBwcm9wZXJ0eSB2YWx1ZSBoZWxwIGNvbGxlY3Rpb24gaGFzIG5vIHRleHQgYW5ub3RhdGlvbiAoZGVzY3JpcHRpb25QYXRoIGlzIGVtcHR5KSB0aGUgZGVzY3JpcHRpb24gY2hlY2sgc2hvdWxkbsK0dCBvY2N1ci5cblx0XHRcdFx0Ly8gSW4gc3VjaCBhIGNhc2UgdGhlIG1ldGhvZCBnZXREZXNjcmlwdGlvbiB3aWxsIGJlIGNhbGxlZCBieSBNREMgYW5kIHdpdGhpbiB0aGlzIG1ldGhvZCBhIFNpZGVFZmZlY3QgaXMgcmVxdWVzdGVkIHRvIHJldHJpZXZlIHRoZSB0ZXh0IGZyb20gdGhlIHRleHQgcHJvcGVydHkgb2YgdGhlIG1haW4gZW50aXR5XG5cdFx0XHRcdGNvbmZpZy5jaGVja0Rlc2NyaXB0aW9uID0gZmFsc2U7XG5cdFx0XHR9IGVsc2UgaWYgKG1heExlbmd0aCAhPT0gdW5kZWZpbmVkICYmIHZhbHVlTGVuZ3RoID4gbWF4TGVuZ3RoKSB7XG5cdFx0XHRcdC8vdmFsdWUgbGVuZ3RoIGlzID4gdGV4dCBwcm9lcGVydHkgbGVuZ3RoIGNvbnN0cmFpbnRcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gRmllbGRCYXNlRGVsZWdhdGUuZ2V0SXRlbUZvclZhbHVlKGZpZWxkLCB2YWx1ZUhlbHAsIGNvbmZpZyk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgZmlsdGVyIGJhciBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgZmllbGQuXG5cdCAqIEBwYXJhbSBmaWVsZCBGaWVsZCBDb250cm9sXG5cdCAqIEByZXR1cm5zIFRoZSBmaWx0ZXIgYmFyIGluc3RhbmNlXG5cdCAqL1xuXHRfZ2V0RmlsdGVyQmFyOiBmdW5jdGlvbiAoZmllbGQ6IEZpZWxkIHwgbnVsbCk6IEZpbHRlckJhciB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IGZpbHRlckJhckFQSTtcblx0XHRpZiAoZmllbGQ/LmlzQShcInNhcC51aS5tZGMuRmlsdGVyRmllbGRcIikpIHtcblx0XHRcdHdoaWxlIChmaWVsZCkge1xuXHRcdFx0XHRpZiAoZmllbGQ/LmlzQTxGaWx0ZXJCYXJBUEk+KFwic2FwLmZlLm1hY3Jvcy5maWx0ZXJCYXIuRmlsdGVyQmFyQVBJXCIpKSB7XG5cdFx0XHRcdFx0ZmlsdGVyQmFyQVBJID0gZmllbGQ7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZmllbGQgPSBmaWVsZD8uZ2V0UGFyZW50KCkgYXMgdW5rbm93biBhcyBGaWVsZDtcblx0XHRcdH1cblx0XHRcdGlmIChmaWx0ZXJCYXJBUEk/LmdldENvbnRlbnQoKT8uaXNBKFwic2FwLmZlLm1hY3Jvcy5jb250cm9scy5GaWx0ZXJCYXJcIikpIHtcblx0XHRcdFx0cmV0dXJuIGZpbHRlckJhckFQSS5nZXRDb250ZW50KCkgYXMgRmlsdGVyQmFyO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHRoZSBkZXNjcmlwdGlvbiBmb3IgYSBnaXZlbiBrZXkuXG5cdCAqIEBwYXJhbSBmaWVsZCBUaGUgPGNvZGU+RmllbGQ8L2NvZGU+IGluc3RhbmNlXG5cdCAqIEBwYXJhbSB2YWx1ZUhlbHAgRmllbGQgaGVscCBhc3NpZ25lZCB0byB0aGUgPGNvZGU+RmllbGQ8L2NvZGU+IG9yIDxjb2RlPkZpbHRlckZpZWxkPC9jb2RlPiBjb250cm9sXG5cdCAqIEBwYXJhbSBrZXkgS2V5IHZhbHVlIG9mIHRoZSBkZXNjcmlwdGlvblxuXHQgKiBAcGFyYW0gX2NvbmRpdGlvbkluIEluIHBhcmFtZXRlcnMgZm9yIHRoZSBrZXkgKG5vIGxvbmdlciBzdXBwb3J0ZWQpXG5cdCAqIEBwYXJhbSBfY29uZGl0aW9uT3V0IE91dCBwYXJhbWV0ZXJzIGZvciB0aGUga2V5IChubyBsb25nZXIgc3VwcG9ydGVkKVxuXHQgKiBAcGFyYW0gYmluZGluZ0NvbnRleHQgQmluZGluZ0NvbnRleHQgPGNvZGU+QmluZGluZ0NvbnRleHQ8L2NvZGU+IG9mIHRoZSBjaGVja2VkIGZpZWxkLiBJbnNpZGUgYSB0YWJsZSwgdGhlIDxjb2RlPlZhbHVlSGVscDwvY29kZT4gZWxlbWVudCBjYW4gYmUgY29ubmVjdGVkIHRvIGEgZGlmZmVyZW50IHJvd1xuXHQgKiBAcGFyYW0gX0NvbmRpdGlvbk1vZGVsIENvbmRpdGlvbk1vZGVsPC9jb2RlPiwgaWYgYm91bmQgdG8gb25lXG5cdCAqIEBwYXJhbSBfY29uZGl0aW9uTW9kZWxOYW1lIE5hbWUgb2YgdGhlIDxjb2RlPkNvbmRpdGlvbk1vZGVsPC9jb2RlPiwgaWYgYm91bmQgdG8gb25lXG5cdCAqIEBwYXJhbSBjb25kaXRpb25QYXlsb2FkIEFkZGl0aW9uYWwgY29udGV4dCBpbmZvcm1hdGlvbiBmb3IgdGhpcyBrZXlcblx0ICogQHBhcmFtIGNvbnRyb2wgSW5zdGFuY2Ugb2YgdGhlIGNhbGxpbmcgY29udHJvbFxuXHQgKiBAcGFyYW0gX3R5cGUgVHlwZSBvZiB0aGUgdmFsdWVcblx0ICogQHJldHVybnMgRGVzY3JpcHRpb24gZm9yIHRoZSBrZXkgb3Igb2JqZWN0IGNvbnRhaW5pbmcgYSBkZXNjcmlwdGlvbiwga2V5IGFuZCBwYXlsb2FkLiBJZiB0aGUgZGVzY3JpcHRpb24gaXMgbm90IGF2YWlsYWJsZSByaWdodCBhd2F5IChpdCBtdXN0IGJlIHJlcXVlc3RlZCksIGEgPGNvZGU+UHJvbWlzZTwvY29kZT4gaXMgcmV0dXJuZWRcblx0ICovXG5cdGdldERlc2NyaXB0aW9uOiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0ZmllbGQ6IEZpZWxkIHwgbnVsbCxcblx0XHR2YWx1ZUhlbHA6IFZhbHVlSGVscCxcblx0XHRrZXk6IHN0cmluZyxcblx0XHRfY29uZGl0aW9uSW46IG9iamVjdCxcblx0XHRfY29uZGl0aW9uT3V0OiBvYmplY3QsXG5cdFx0YmluZGluZ0NvbnRleHQ6IENvbnRleHQgfCB1bmRlZmluZWQsXG5cdFx0X0NvbmRpdGlvbk1vZGVsOiBDb25kaXRpb25Nb2RlbCxcblx0XHRfY29uZGl0aW9uTW9kZWxOYW1lOiBzdHJpbmcsXG5cdFx0Y29uZGl0aW9uUGF5bG9hZDogQ29uZGl0aW9uUGF5bG9hZE1hcCxcblx0XHRjb250cm9sOiBDb250cm9sLFxuXHRcdF90eXBlOiB1bmtub3duLFxuXHRcdGVtcHR5QWxsb3dlZDogYm9vbGVhblxuXHQpIHtcblx0XHQvL0pJUkE6IEZJT1JJVEVDSFAxLTIyMDIyIC4gVGhlIE1EQyBmaWVsZCBzaG91bGQgbm90ICB0cmllcyB0byBkZXRlcm1pbmUgZGVzY3JpcHRpb24gd2l0aCB0aGUgaW5pdGlhbCBHRVQgb2YgdGhlIGRhdGEuXG5cdFx0Ly8gaXQgc2hvdWxkIHJlbHkgb24gdGhlIGRhdGEgd2UgYWxyZWFkeSByZWNlaXZlZCBmcm9tIHRoZSBiYWNrZW5kXG5cdFx0Ly8gQnV0IFRoZSBnZXREZXNjcmlwdGlvbiBmdW5jdGlvbiBpcyBhbHNvIGNhbGxlZCBpbiB0aGUgRmlsdGVyRmllbGQgY2FzZSBpZiBhIHZhcmlhbnQgaXMgbG9hZGVkLlxuXHRcdC8vIEFzIHRoZSBkZXNjcmlwdGlvbiB0ZXh0IGNvdWxkIGJlIGxhbmd1YWdlIGRlcGVuZGVudCBpdCBpcyBub3Qgc3RvcmVkIGluIHRoZSB2YXJpYW50LCBzbyBpdCBuZWVkcyB0byBiZSByZWFkIG9uIHJlbmRlcmluZy5cblxuXHRcdGxldCBwYXlsb2FkID0gZmllbGQ/LmdldFBheWxvYWQoKSBhcyBGaWVsZFBheWxvYWQ7XG5cblx0XHQvKiBSZXRyaWV2ZSB0ZXh0IGZyb20gdmFsdWUgaGVscCwgaWYgdmFsdWUgd2FzIHNldCBieSBvdXQtcGFyYW1ldGVyIChCQ1AgMjI3MDE2MDYzMykgKi9cblx0XHRpZiAoIXBheWxvYWQgJiYgKGNvbnRyb2wgYXMgRmllbGRCYXNlKT8uZ2V0RGlzcGxheSgpLmluY2x1ZGVzKFwiRGVzY3JpcHRpb25cIikpIHtcblx0XHRcdHBheWxvYWQgPSB7XG5cdFx0XHRcdHJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3Q6IHRydWVcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0aWYgKHBheWxvYWQ/LnJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QgPT09IHRydWUgfHwgcGF5bG9hZD8uaXNGaWx0ZXJGaWVsZCA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgZGF0YU1vZGVsID0gdmFsdWVIZWxwLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCB8IHVuZGVmaW5lZDtcblx0XHRcdGNvbnN0IG93bmVyID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKHZhbHVlSGVscCBhcyB1bmtub3duIGFzIENvbnRyb2wpO1xuXHRcdFx0Ly8gSWYgbmVpdGhlciBkYXRhTW9kZWwgbm9yIG93bmVyIGlzIGRlZmluZWQsIHRoZSB2YWx1ZUhlbHAgY2Fubm90IGJlIGFuIEZFIGNvbnRyb2wuXG5cdFx0XHQvLyBUaGlzIG9jY3VycyBpbiBjYXNlcyBvZiBhIHN0YW5kYXJkIE1EQyBjb250cm9scyAoZS5nLiwgZGVmYXVsdCBWYWx1ZUhlbHAgZm9yIGJvb2xlYW4gdmFsdWVzKS5cblx0XHRcdGlmICghZGF0YU1vZGVsICYmICFvd25lcikge1xuXHRcdFx0XHRyZXR1cm4gRmllbGRCYXNlRGVsZWdhdGUuZ2V0RGVzY3JpcHRpb24oXG5cdFx0XHRcdFx0ZmllbGQgYXMgRmllbGRCYXNlLFxuXHRcdFx0XHRcdHZhbHVlSGVscCxcblx0XHRcdFx0XHRrZXksXG5cdFx0XHRcdFx0X2NvbmRpdGlvbkluLFxuXHRcdFx0XHRcdF9jb25kaXRpb25PdXQsXG5cdFx0XHRcdFx0YmluZGluZ0NvbnRleHQgYXMgQ29udGV4dCxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdGNvbmRpdGlvblBheWxvYWQsXG5cdFx0XHRcdFx0Y29udHJvbCxcblx0XHRcdFx0XHRfdHlwZSxcblx0XHRcdFx0XHRlbXB0eUFsbG93ZWRcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IG1ldGFNb2RlbCA9IGRhdGFNb2RlbFxuXHRcdFx0XHQ/IGRhdGFNb2RlbC5nZXRNZXRhTW9kZWwoKVxuXHRcdFx0XHQ6IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh2YWx1ZUhlbHAgYXMgdW5rbm93biBhcyBDb250cm9sKVxuXHRcdFx0XHRcdFx0LmdldE1vZGVsKClcblx0XHRcdFx0XHRcdC5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdGNvbnN0IHZhbHVlaGVscFBheWxvYWQgPSB2YWx1ZUhlbHAuZ2V0UGF5bG9hZCgpIGFzIFZhbHVlSGVscFBheWxvYWQ7XG5cdFx0XHRjb25zdCB2YWx1ZWhlbHBDb25kaXRpb25QYXlsb2FkID0gY29uZGl0aW9uUGF5bG9hZD8uW3ZhbHVlaGVscFBheWxvYWQudmFsdWVIZWxwUXVhbGlmaWVyXTtcblx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aCA9IHZhbHVlaGVscFBheWxvYWQucHJvcGVydHlQYXRoO1xuXHRcdFx0Y29uc3QgcHJvcGVydHlEZXNjcmlwdGlvblBhdGggPSB2YWx1ZWhlbHBQYXlsb2FkPy5wcm9wZXJ0eURlc2NyaXB0aW9uUGF0aDtcblx0XHRcdGxldCB0ZXh0UHJvcGVydHk6IHN0cmluZztcblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0LyogUmVxdWVzdCB2YWx1ZSBoZWxwIG1ldGFkYXRhICovXG5cdFx0XHRcdGNvbnN0IHZhbHVlTGlzdEluZm8gPSBhd2FpdCBtZXRhTW9kZWwucmVxdWVzdFZhbHVlTGlzdEluZm8ocHJvcGVydHlQYXRoLCB0cnVlLCBiaW5kaW5nQ29udGV4dCk7XG5cblx0XHRcdFx0Y29uc3QgZmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyKGZpZWxkKTtcblx0XHRcdFx0bGV0IGZpbHRlckNvbmRpdGlvbnM6IFJlY29yZDxzdHJpbmcsIENvbmRpdGlvbk9iamVjdFtdPiB8IHVuZGVmaW5lZDtcblx0XHRcdFx0aWYgKGZpbHRlckJhcikge1xuXHRcdFx0XHRcdGNvbnN0IGZpbHRlclN0YXRlOiBFeHRlcm5hbFN0YXRlVHlwZSA9IGF3YWl0IFN0YXRlVXRpbC5yZXRyaWV2ZUV4dGVybmFsU3RhdGUoZmlsdGVyQmFyKTtcblx0XHRcdFx0XHRmaWx0ZXJDb25kaXRpb25zID0gZmlsdGVyU3RhdGUuZmlsdGVyO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gbWV0YU1vZGVsLmdldE9iamVjdChgJHtwcm9wZXJ0eVBhdGh9QHNhcHVpLm5hbWVgKSBhcyBzdHJpbmc7XG5cdFx0XHRcdC8vIHRha2UgdGhlIGZpcnN0IHZhbHVlIGxpc3QgYW5ub3RhdGlvbiAtIGFsdGVybmF0aXZlbHkgdGFrZSB0aGUgb25lIHdpdGhvdXQgcXVhbGlmaWVyIG9yIHRoZSBmaXJzdCBvbmVcblx0XHRcdFx0Y29uc3QgdmFsdWVMaXN0ID0gdmFsdWVMaXN0SW5mb1tPYmplY3Qua2V5cyh2YWx1ZUxpc3RJbmZvKVswXV07XG5cdFx0XHRcdGNvbnN0IHZhbHVlSGVscFBhcmFtZXRlcnMgPSB0aGlzLl9nZXRWYWx1ZUxpc3RQYXJhbWV0ZXIodmFsdWVMaXN0LCBwcm9wZXJ0eU5hbWUpO1xuXHRcdFx0XHRjb25zdCB2YWx1ZUhlbHBQcm9wZXJ0eSA9IHZhbHVlSGVscFBhcmFtZXRlcnM/LlswXT8uVmFsdWVMaXN0UHJvcGVydHk7XG5cdFx0XHRcdGlmICghdmFsdWVIZWxwUHJvcGVydHkpIHtcblx0XHRcdFx0XHR0aHJvdyBFcnJvcihgSW5jb25zaXN0ZW50IHZhbHVlIGhlbHAgYW5ub3RhdGlvbiBmb3IgJHtwcm9wZXJ0eU5hbWV9YCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gZ2V0IHRleHQgYW5ub3RhdGlvbiBmb3IgdGhpcyB2YWx1ZSBsaXN0IHByb3BlcnR5XG5cdFx0XHRcdGNvbnN0IHZhbHVlTGlzdE1vZGVsID0gdmFsdWVMaXN0LiRtb2RlbDtcblx0XHRcdFx0Y29uc3QgdGV4dEFubm90YXRpb24gPSB2YWx1ZUxpc3RNb2RlbFxuXHRcdFx0XHRcdC5nZXRNZXRhTW9kZWwoKVxuXHRcdFx0XHRcdC5nZXRPYmplY3QoYC8ke3ZhbHVlTGlzdC5Db2xsZWN0aW9uUGF0aH0vJHt2YWx1ZUhlbHBQcm9wZXJ0eX1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRgKTtcblx0XHRcdFx0aWYgKHRleHRBbm5vdGF0aW9uICYmIHRleHRBbm5vdGF0aW9uLiRQYXRoKSB7XG5cdFx0XHRcdFx0dGV4dFByb3BlcnR5ID0gdGV4dEFubm90YXRpb24uJFBhdGg7XG5cdFx0XHRcdFx0LyogQnVpbGQgdGhlIGZpbHRlciBmb3IgdGhlIHJlbGV2YW50IHBhcmFtZXRlcnMgKi9cblx0XHRcdFx0XHRjb25zdCBmaWx0ZXJzID0gdGhpcy5fZ2V0RmlsdGVyKFxuXHRcdFx0XHRcdFx0dmFsdWVMaXN0LFxuXHRcdFx0XHRcdFx0cHJvcGVydHlOYW1lLFxuXHRcdFx0XHRcdFx0dmFsdWVIZWxwUHJvcGVydHksXG5cdFx0XHRcdFx0XHRrZXksXG5cdFx0XHRcdFx0XHR2YWx1ZWhlbHBQYXlsb2FkLFxuXHRcdFx0XHRcdFx0dmFsdWVoZWxwQ29uZGl0aW9uUGF5bG9hZCxcblx0XHRcdFx0XHRcdGJpbmRpbmdDb250ZXh0LFxuXHRcdFx0XHRcdFx0ZmlsdGVyQ29uZGl0aW9uc1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0Y29uc3QgbGlzdEJpbmRpbmcgPSB2YWx1ZUxpc3RNb2RlbC5iaW5kTGlzdChgLyR7dmFsdWVMaXN0LkNvbGxlY3Rpb25QYXRofWAsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmaWx0ZXJzLCB7XG5cdFx0XHRcdFx0XHQkc2VsZWN0OiB0ZXh0UHJvcGVydHlcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHQvKiBSZXF1ZXN0IGRlc2NyaXB0aW9uIGZvciBnaXZlbiBrZXkgZnJvbSB2YWx1ZSBsaXN0IGVudGl0eSAqL1xuXHRcdFx0XHRcdGNvbnN0IGNvbnRleHRzID0gYXdhaXQgbGlzdEJpbmRpbmcucmVxdWVzdENvbnRleHRzKDAsIDIpO1xuXHRcdFx0XHRcdHJldHVybiBjb250ZXh0cy5sZW5ndGggPyBjb250ZXh0c1swXS5nZXRPYmplY3QodGV4dFByb3BlcnR5KSA6IHVuZGVmaW5lZDtcblx0XHRcdFx0fSBlbHNlIGlmIChiaW5kaW5nQ29udGV4dCAhPT0gdW5kZWZpbmVkICYmIHByb3BlcnR5RGVzY3JpcHRpb25QYXRoKSB7XG5cdFx0XHRcdFx0Y29uc3QgbGFzdEluZGV4ID0gcHJvcGVydHlEZXNjcmlwdGlvblBhdGgubGFzdEluZGV4T2YoXCIvXCIpO1xuXHRcdFx0XHRcdGNvbnN0IHNpZGVFZmZlY3RQYXRoID0gbGFzdEluZGV4ID4gMCA/IHByb3BlcnR5RGVzY3JpcHRpb25QYXRoLnN1YnN0cmluZygwLCBsYXN0SW5kZXgpIDogcHJvcGVydHlEZXNjcmlwdGlvblBhdGg7XG5cdFx0XHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNTZXJ2aWNlID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHZhbHVlSGVscCBhcyB1bmtub3duIGFzIENvbnRyb2wpLmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXHRcdFx0XHRcdGF3YWl0IHNpZGVFZmZlY3RzU2VydmljZS5yZXF1ZXN0U2lkZUVmZmVjdHMoW3NpZGVFZmZlY3RQYXRoXSwgYmluZGluZ0NvbnRleHQpO1xuXHRcdFx0XHRcdExvZy53YXJuaW5nKFxuXHRcdFx0XHRcdFx0YFJlcXVlc3RTaWRlRWZmZWN0cyBpcyB0cmlnZ2VyZWQgYmVjYXVzZSB0aGUgdGV4dCBhbm5vdGF0aW9uIGZvciAke3ZhbHVlSGVscFByb3BlcnR5fSBpcyBub3QgZGVmaW5lZCBhdCB0aGUgQ29sbGVjdGlvblBhdGggb2YgdGhlIHZhbHVlIGhlbHBgXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8qIEVYVEVSTkFsSUQgKi9cblx0XHRcdFx0XHRjb25zdCBleHRlcm5hbElkUGF0aCA9IG1ldGFNb2RlbD8uZ2V0T2JqZWN0KFxuXHRcdFx0XHRcdFx0YCR7dmFsdWVoZWxwUGF5bG9hZC5wcm9wZXJ0eVBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5FeHRlcm5hbElEYFxuXHRcdFx0XHRcdCk/LiRQYXRoO1xuXHRcdFx0XHRcdGlmIChleHRlcm5hbElkUGF0aCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgZXh0ZXJuYWxJZEZ1bGxQYXRoID0gdmFsdWVoZWxwUGF5bG9hZC5wcm9wZXJ0eVBhdGgucmVwbGFjZShwcm9wZXJ0eU5hbWUsIGV4dGVybmFsSWRQYXRoKTtcblx0XHRcdFx0XHRcdGNvbnN0IGV4dGVybmFsSWROYW1lID0gbWV0YU1vZGVsLmdldE9iamVjdChgJHtleHRlcm5hbElkRnVsbFBhdGh9QHNhcHVpLm5hbWVgKTtcblx0XHRcdFx0XHRcdGNvbnN0IGV4dGVybmFsSWREZXNjcmlwdGlvblBhdGggPSBtZXRhTW9kZWw/LmdldE9iamVjdChgJHtleHRlcm5hbElkRnVsbFBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0YClcblx0XHRcdFx0XHRcdFx0Py4kUGF0aDtcblx0XHRcdFx0XHRcdGNvbnN0IGZpbHRlcnMgPSBbXTtcblx0XHRcdFx0XHRcdGZpbHRlcnMucHVzaChuZXcgRmlsdGVyKHsgcGF0aDogZXh0ZXJuYWxJZE5hbWUsIG9wZXJhdG9yOiBcIkVRXCIsIHZhbHVlMToga2V5IH0pKTtcblx0XHRcdFx0XHRcdGNvbnN0IGxpc3RCaW5kaW5nID0gdmFsdWVMaXN0TW9kZWwuYmluZExpc3QoYC8ke3ZhbHVlTGlzdC5Db2xsZWN0aW9uUGF0aH1gLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgZmlsdGVycywge1xuXHRcdFx0XHRcdFx0XHQkc2VsZWN0OiBgJHtleHRlcm5hbElkTmFtZX0sJHtleHRlcm5hbElkRGVzY3JpcHRpb25QYXRofWBcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0Y29uc3QgY29udGV4dHMgPSBhd2FpdCBsaXN0QmluZGluZy5yZXF1ZXN0Q29udGV4dHMoMCwgMik7XG5cdFx0XHRcdFx0XHRpZiAoY29udGV4dHMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBjb250ZXh0c1swXS5nZXRPYmplY3QoZXh0ZXJuYWxJZERlc2NyaXB0aW9uUGF0aCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdExvZy5lcnJvcihgVGV4dCBBbm5vdGF0aW9uIGZvciAke3ZhbHVlSGVscFByb3BlcnR5fSBpcyBub3QgZGVmaW5lZGApO1xuXHRcdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdGNvbnN0IHN0YXR1cyA9IGVycm9yID8gKGVycm9yIGFzIFhNTEh0dHBSZXF1ZXN0KS5zdGF0dXMgOiB1bmRlZmluZWQ7XG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG5cdFx0XHRcdGNvbnN0IG1zZyA9IHN0YXR1cyA9PT0gNDA0ID8gYE1ldGFkYXRhIG5vdCBmb3VuZCAoJHtzdGF0dXN9KSBmb3IgdmFsdWUgaGVscCBvZiBwcm9wZXJ0eSAke3Byb3BlcnR5UGF0aH1gIDogbWVzc2FnZTtcblx0XHRcdFx0TG9nLmVycm9yKG1zZyk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1c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
365
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPYmplY3QiLCJhc3NpZ24iLCJGaWVsZEJhc2VEZWxlZ2F0ZSIsImFwaVZlcnNpb24iLCJpbml0aWFsaXplVHlwZUZyb21CaW5kaW5nIiwiZmllbGQiLCJ0eXBlIiwidmFsdWUiLCJyZXN1bHQiLCJpc0EiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJmb3JtYXRWYWx1ZSIsImJUeXBlSW5pdGlhbGl6ZWQiLCJtQ3VzdG9tVW5pdHMiLCJpbml0aWFsaXplSW50ZXJuYWxVbml0VHlwZSIsInR5cGVJbml0aWFsaXphdGlvbiIsImVuaGFuY2VWYWx1ZUZvclVuaXQiLCJ2YWx1ZXMiLCJwdXNoIiwiZ2V0RGVmYXVsdFZhbHVlSGVscERlbGVnYXRlIiwiX2ZpZWxkIiwibmFtZSIsInBheWxvYWQiLCJnZXRUeXBlTWFwIiwiVHlwZU1hcCIsIl9nZXRWYWx1ZUxpc3RQYXJhbWV0ZXIiLCJ2YWx1ZUxpc3RJbmZvIiwicHJvcGVydHlOYW1lIiwiUGFyYW1ldGVycyIsImZpbHRlciIsImVudHJ5IiwiTG9jYWxEYXRhUHJvcGVydHkiLCIkUHJvcGVydHlQYXRoIiwiX2dldEZpbHRlciIsInZhbHVlTGlzdCIsInZhbHVlSGVscFByb3BlcnR5Iiwia2V5VmFsdWUiLCJ2YWx1ZWhlbHBQYXlsb2FkIiwidmFsdWVoZWxwQ29uZGl0aW9uUGF5bG9hZCIsImJpbmRpbmdDb250ZXh0IiwiZmlsdGVyQmFyQ29uZGl0aW9ucyIsImZpbHRlcnMiLCJwYXJhbWV0ZXJzIiwicGFyYW1ldGVyIiwiJFR5cGUiLCJWYWx1ZUxpc3RQcm9wZXJ0eSIsImZpbHRlclZhbHVlIiwiaXNBY3Rpb25QYXJhbWV0ZXJEaWFsb2ciLCJhcGRGaWVsZFBhdGgiLCJhcGRGaWVsZCIsIkVsZW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImdldFZhbHVlIiwic291cmNlUGF0aCIsImNvbmRpdGlvblBheWxvYWQiLCJnZXRPYmplY3QiLCJjb25kaXRpb24iLCJvcGVyYXRvciIsIkZpbHRlciIsInBhdGgiLCJ2YWx1ZTEiLCJjb25jYXQiLCJfZ2V0UmVtYWluaW5nS2V5VmFsdWVGaWx0ZXJzIiwiJG1vZGVsIiwidmFsdWVMaXN0TW9kZWwiLCJDb2xsZWN0aW9uUGF0aCIsImNvbGxlY3Rpb25QYXRoIiwibWV0YUNvbnRleHQiLCJnZXRNZXRhTW9kZWwiLCJnZXRNZXRhQ29udGV4dCIsImVudGl0eVR5cGUiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiYWxsTG9jYWxEYXRhUHJvcGVydGllcyIsInJlZHVjZSIsImFyciIsImFsbFJlbWFpbmluZ0tleXMiLCJrZXlzIiwiX3JlZiIsImtleU5hbWUiLCJpbmNsdWRlcyIsImhhc093blByb3BlcnR5Iiwia2V5Iiwia2V5Q29udGV4dCIsIkNvbW1vbkhlbHBlciIsImlzUHJvcGVydHlGaWx0ZXJhYmxlIiwiZ2V0SXRlbUZvclZhbHVlIiwidmFsdWVIZWxwIiwiY29uZmlnIiwiY2hlY2tEZXNjcmlwdGlvbiIsImNvbnRhaW5lciIsImdldFR5cGVhaGVhZCIsImdldFBheWxvYWQiLCJzZWxlY3RlZENvbnRlbnQiLCJnZXRTZWxlY3RlZENvbnRlbnQiLCJjb250ZW50SWQiLCJnZXRJZCIsIlZhbHVlSGVscERlbGVnYXRlIiwicmV0cmlldmVDb250ZW50IiwibWF4TGVuZ3RoIiwidmFsdWVMZW5ndGgiLCJ0b1N0cmluZyIsImRlc2NyaXB0aW9uUGF0aCIsInZhbHVlSGVscERlc2NyaXB0aW9uUGF0aCIsIl9nZXRGaWx0ZXJCYXIiLCJmaWx0ZXJCYXJBUEkiLCJnZXRQYXJlbnQiLCJnZXRDb250ZW50IiwiZ2V0RGVzY3JpcHRpb24iLCJfY29uZGl0aW9uSW4iLCJfY29uZGl0aW9uT3V0IiwiX0NvbmRpdGlvbk1vZGVsIiwiX2NvbmRpdGlvbk1vZGVsTmFtZSIsImNvbnRyb2wiLCJfdHlwZSIsImVtcHR5QWxsb3dlZCIsImdldERpc3BsYXkiLCJyZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IiwiaXNGaWx0ZXJGaWVsZCIsImRhdGFNb2RlbCIsImdldE1vZGVsIiwib3duZXIiLCJDb21wb25lbnQiLCJnZXRPd25lckNvbXBvbmVudEZvciIsIm1ldGFNb2RlbCIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50IiwidmFsdWVIZWxwUXVhbGlmaWVyIiwicHJvcGVydHlQYXRoIiwicHJvcGVydHlEZXNjcmlwdGlvblBhdGgiLCJ0ZXh0UHJvcGVydHkiLCJyZXF1ZXN0VmFsdWVMaXN0SW5mbyIsImZpbHRlckJhciIsImZpbHRlckNvbmRpdGlvbnMiLCJmaWx0ZXJTdGF0ZSIsIlN0YXRlVXRpbCIsInJldHJpZXZlRXh0ZXJuYWxTdGF0ZSIsInZhbHVlSGVscFBhcmFtZXRlcnMiLCJFcnJvciIsInRleHRBbm5vdGF0aW9uIiwiJFBhdGgiLCJsaXN0QmluZGluZyIsImJpbmRMaXN0IiwiJHNlbGVjdCIsImNvbnRleHRzIiwicmVxdWVzdENvbnRleHRzIiwibGFzdEluZGV4IiwibGFzdEluZGV4T2YiLCJzaWRlRWZmZWN0UGF0aCIsInN1YnN0cmluZyIsInNpZGVFZmZlY3RzU2VydmljZSIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsInJlcXVlc3RTaWRlRWZmZWN0cyIsIkxvZyIsIndhcm5pbmciLCJleHRlcm5hbElkUGF0aCIsImV4dGVybmFsSWRGdWxsUGF0aCIsInJlcGxhY2UiLCJleHRlcm5hbElkTmFtZSIsImV4dGVybmFsSWREZXNjcmlwdGlvblBhdGgiLCJlcnJvciIsInN0YXR1cyIsIm1lc3NhZ2UiLCJTdHJpbmciLCJtc2ciXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkZpZWxkQmFzZURlbGVnYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbkFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB7IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uVmFsdWVMaXN0VHlwZSwgVmFsdWVIZWxwUGF5bG9hZCB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL3ZhbHVlaGVscC9WYWx1ZUxpc3RIZWxwZXJcIjtcbmltcG9ydCBDb21wb25lbnQgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IEVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB0eXBlIEZpZWxkIGZyb20gXCJzYXAvdWkvbWRjL0ZpZWxkXCI7XG5pbXBvcnQgdHlwZSBWYWx1ZUhlbHAgZnJvbSBcInNhcC91aS9tZGMvVmFsdWVIZWxwXCI7XG5pbXBvcnQgdHlwZSB7IEl0ZW1Gb3JWYWx1ZUNvbmZpZ3VyYXRpb24gfSBmcm9tIFwic2FwL3VpL21kYy9WYWx1ZUhlbHBcIjtcbmltcG9ydCB7IHR5cGUgQ29uZGl0aW9uT2JqZWN0IH0gZnJvbSBcInNhcC91aS9tZGMvY29uZGl0aW9uL0NvbmRpdGlvblwiO1xuaW1wb3J0IHR5cGUgQ29uZGl0aW9uTW9kZWwgZnJvbSBcInNhcC91aS9tZGMvY29uZGl0aW9uL0NvbmRpdGlvbk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBGaWVsZEJhc2UgZnJvbSBcInNhcC91aS9tZGMvZmllbGQvRmllbGRCYXNlXCI7XG5pbXBvcnQgRmllbGRCYXNlRGVsZWdhdGUgZnJvbSBcInNhcC91aS9tZGMvZmllbGQvRmllbGRCYXNlRGVsZWdhdGVcIjtcbmltcG9ydCBUeXBlTWFwIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L1R5cGVNYXBcIjtcbmltcG9ydCBTdGF0ZVV0aWwgZnJvbSBcInNhcC91aS9tZGMvcDEzbi9TdGF0ZVV0aWxcIjtcbmltcG9ydCBGaWx0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJcIjtcbmltcG9ydCB0eXBlIFNpbXBsZVR5cGUgZnJvbSBcInNhcC91aS9tb2RlbC9TaW1wbGVUeXBlXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcIi4uL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyIGZyb20gXCIuLi9jb250cm9scy9GaWx0ZXJCYXJcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhckFQSSBmcm9tIFwiLi4vZmlsdGVyQmFyL0ZpbHRlckJhckFQSVwiO1xuaW1wb3J0IHR5cGUgeyBDb25kaXRpb25QYXlsb2FkTWFwLCBDb25kaXRpb25QYXlsb2FkVHlwZSwgRXh0ZXJuYWxTdGF0ZVR5cGUgfSBmcm9tIFwiLi4vdmFsdWVoZWxwL1ZhbHVlSGVscERlbGVnYXRlXCI7XG5pbXBvcnQgVmFsdWVIZWxwRGVsZWdhdGUgZnJvbSBcIi4uL3ZhbHVlaGVscC9WYWx1ZUhlbHBEZWxlZ2F0ZVwiO1xuXG5leHBvcnQgdHlwZSBGaWVsZFBheWxvYWQgPSB7XG5cdHJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3Q/OiBib29sZWFuO1xuXHRpc0ZpbHRlckZpZWxkPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFZhbHVlID0gc3RyaW5nIHwgRGF0ZSB8IG51bWJlciB8IGJvb2xlYW4gfCB1bmRlZmluZWQgfCBudWxsO1xuXG5leHBvcnQgdHlwZSBUeXBlSW5pdGlhbGl6YXRpb24gPSB7XG5cdGJUeXBlSW5pdGlhbGl6ZWQ/OiBib29sZWFuO1xuXHRtQ3VzdG9tVW5pdHM/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBDb25maWcgPSB7XG5cdHZhbHVlOiBWYWx1ZTtcblx0cGFyc2VkVmFsdWU6IFZhbHVlO1xuXHRiaW5kaW5nQ29udGV4dDogQ29udGV4dDtcblx0Y2hlY2tLZXk6IGJvb2xlYW47XG5cdGNoZWNrRGVzY3JpcHRpb246IGJvb2xlYW47XG5cdGNvbmRpdGlvbk1vZGVsPzogQ29uZGl0aW9uTW9kZWw7XG5cdGNvbmRpdGlvbk1vZGVsTmFtZT86IHN0cmluZztcblx0Y29udHJvbD86IG9iamVjdDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IE9iamVjdC5hc3NpZ24oe30sIEZpZWxkQmFzZURlbGVnYXRlLCB7XG5cdGFwaVZlcnNpb246IDIsXG5cblx0LyoqXG5cdCAqIElmIHRoZSA8Y29kZT5GaWVsZDwvY29kZT4gY29udHJvbCBpcyB1c2VkLCB0aGUgdXNlZCBkYXRhIHR5cGUgbWlnaHQgY29tZSBmcm9tIHRoZSBiaW5kaW5nLlxuXHQgKiBJbiBWNC11bml0IG9yIGN1cnJlbmN5IGNhc2UgaXQgbWlnaHQgbmVlZCB0byBiZSBmb3JtYXR0ZWQgb25jZS5cblx0ICogVG8gaW5pdGlhbGl6ZSB0aGUgaW50ZXJuYWwgdHlwZSBsYXRlciBvbiwgdGhlIGN1cnJlbmNpZXMgbXVzdCBiZSByZXR1cm5lZC5cblx0ICogQHBhcmFtIGZpZWxkIFRoZSA8Y29kZT5GaWVsZDwvY29kZT4gaW5zdGFuY2Vcblx0ICogQHBhcmFtIHR5cGUgVHlwZSBmcm9tIGJpbmRpbmdcblx0ICogQHBhcmFtIHZhbHVlIEdpdmVuIHZhbHVlXG5cdCAqIEByZXR1cm5zIEluZm9ybWF0aW9uIG5lZWRlZCB0byBpbml0aWFsaXplIGludGVybmFsIHR5cGUgKG5lZWRzIHRvIHNldCBiVHlwZUluaXRpYWxpemVkIHRvIHRydWUgaWYgaW5pdGlhbGl6ZWQpXG5cdCAqL1xuXHRpbml0aWFsaXplVHlwZUZyb21CaW5kaW5nOiBmdW5jdGlvbiAoZmllbGQ6IEZpZWxkLCB0eXBlOiBTaW1wbGVUeXBlIHwgdW5kZWZpbmVkLCB2YWx1ZTogVmFsdWUgfCBWYWx1ZVtdKSB7XG5cdFx0Ly8gVjQgVW5pdCBhbmQgQ3VycmVuY3kgdHlwZXMgaGF2ZSBhIG1hcCB3aXRoIHZhbGlkIHVuaXRzIGFuZCBjcmVhdGUgYW4gaW50ZXJuYWwgY3VzdG9taXppbmcgZm9yIGl0LlxuXHRcdC8vIFRoZSBGaWVsZCBuZWVkcyB0byBrZWVwIHRoaXMgY3VzdG9taXppbmcgbG9naWMgd2hlbiBjcmVhdGluZyB0aGUgaW50ZXJuYWwgdHlwZS5cblx0XHQvLyAoQXMgZXh0ZXJuYWwgUkFXIGJpbmRpbmcgaXMgdXNlZCB0aGVyZSBpcyBubyBmb3JtYXR0aW5nIG9uIHBhcnNpbmcuKVxuXG5cdFx0Y29uc3QgcmVzdWx0OiBUeXBlSW5pdGlhbGl6YXRpb24gPSB7fTtcblx0XHRpZiAoXG5cdFx0XHR0eXBlICYmXG5cdFx0XHR0eXBlLmlzQShbXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Vbml0XCIsIFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuQ3VycmVuY3lcIl0pICYmXG5cdFx0XHRBcnJheS5pc0FycmF5KHZhbHVlKSAmJlxuXHRcdFx0dmFsdWUubGVuZ3RoID4gMiAmJlxuXHRcdFx0dmFsdWVbMl0gIT09IHVuZGVmaW5lZFxuXHRcdCkge1xuXHRcdFx0Ly8gZm9ybWF0IG9uY2UgdG8gc2V0IGludGVybmFsIGN1c3RvbWl6aW5nLiBBbGxvdyBudWxsIGFzIHZhbGlkIHZhbHVlcyBmb3IgY3VzdG9tIHVuaXRzXG5cdFx0XHR0eXBlLmZvcm1hdFZhbHVlKHZhbHVlLCBcInN0cmluZ1wiKTtcblx0XHRcdHJlc3VsdC5iVHlwZUluaXRpYWxpemVkID0gdHJ1ZTtcblx0XHRcdHJlc3VsdC5tQ3VzdG9tVW5pdHMgPSB2YWx1ZVsyXSBhcyBzdHJpbmc7IC8vIFRPRE86IGZpbmQgYSBiZXR0ZXIgd2F5IHRvIHByb3ZpZGUgY3VzdG9tIHVuaXRzIHRvIGludGVybmFsIHR5cGVcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSB1bml0IHR5cGUuXG5cdCAqIElmIHRoZSA8Y29kZT5GaWVsZDwvY29kZT4gY29udHJvbCBpcyB1c2VkLCB0aGUgdXNlZCBkYXRhIHR5cGUgbWlnaHQgY29tZSBmcm9tIHRoZSBiaW5kaW5nLlxuXHQgKiBJZiB0aGUgdHlwZSBpcyBhIFY0IHVuaXQgb3IgY3VycmVuY3ksIGl0IG1pZ2h0IG5lZWQgdG8gYmUgZm9ybWF0dGVkIG9uY2UuXG5cdCAqIEBwYXJhbSBmaWVsZCBUaGUgPGNvZGU+RmllbGQ8L2NvZGU+IGluc3RhbmNlXG5cdCAqIEBwYXJhbSB0eXBlIFR5cGUgZnJvbSBiaW5kaW5nXG5cdCAqIEBwYXJhbSB0eXBlSW5pdGlhbGl6YXRpb24gSW5mb3JtYXRpb24gbmVlZGVkIHRvIGluaXRpYWxpemUgaW50ZXJuYWwgdHlwZVxuXHQgKi9cblx0aW5pdGlhbGl6ZUludGVybmFsVW5pdFR5cGU6IGZ1bmN0aW9uIChmaWVsZDogRmllbGQsIHR5cGU6IFNpbXBsZVR5cGUsIHR5cGVJbml0aWFsaXphdGlvbj86IFR5cGVJbml0aWFsaXphdGlvbikge1xuXHRcdGlmICh0eXBlSW5pdGlhbGl6YXRpb24/Lm1DdXN0b21Vbml0cyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBpZiBhbHJlYWR5IGluaXRpYWxpemVkIGluaXRpYWxpemUgbmV3IHR5cGUgdG9vLlxuXHRcdFx0dHlwZS5mb3JtYXRWYWx1ZShbbnVsbCwgbnVsbCwgdHlwZUluaXRpYWxpemF0aW9uLm1DdXN0b21Vbml0c10sIFwic3RyaW5nXCIpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiBlbmhhbmNlcyB0aGUgdmFsdWUgd2l0aCB1bml0IG9yIGN1cnJlbmN5IGluZm9ybWF0aW9uIGlmIG5lZWRlZCBieSB0aGUgZGF0YSB0eXBlLlxuXHQgKiBAcGFyYW0gZmllbGQgVGhlIDxjb2RlPkZpZWxkPC9jb2RlPiBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gIHZhbHVlcyBWYWx1ZXNcblx0ICogQHBhcmFtICB0eXBlSW5pdGlhbGl6YXRpb24gSW5mb3JtYXRpb24gbmVlZGVkIHRvIGluaXRpYWxpemUgaW50ZXJuYWwgdHlwZVxuXHQgKiBAcmV0dXJucyBWYWx1ZXNcblx0ICovXG5cdGVuaGFuY2VWYWx1ZUZvclVuaXQ6IGZ1bmN0aW9uIChmaWVsZDogRmllbGQsIHZhbHVlczogVmFsdWVbXSwgdHlwZUluaXRpYWxpemF0aW9uPzogVHlwZUluaXRpYWxpemF0aW9uKSB7XG5cdFx0aWYgKHR5cGVJbml0aWFsaXphdGlvbj8uYlR5cGVJbml0aWFsaXplZCA9PT0gdHJ1ZSAmJiB2YWx1ZXMubGVuZ3RoID09PSAyKSB7XG5cdFx0XHR2YWx1ZXMucHVzaCh0eXBlSW5pdGlhbGl6YXRpb24ubUN1c3RvbVVuaXRzKTtcblx0XHRcdHJldHVybiB2YWx1ZXM7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fSxcblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHdoaWNoIDxjb2RlPlZhbHVlSGVscERlbGVnYXRlPC9jb2RlPiBpcyB1c2VkXG5cdCAqIGlmIGEgZGVmYXVsdCBmaWVsZCBoZWxwIChmb3IgZXhhbXBsZSwgZm9yIGRlZmluaW5nIGNvbmRpdGlvbnMgaW4gPC9jb2RlPkZpbHRlckZpZWxkPC9jb2RlPilcblx0ICogaXMgY3JlYXRlZC5cblx0ICogQHBhcmFtIF9maWVsZCBUaGUgPGNvZGU+RmllbGQ8L2NvZGU+IGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIERlbGVnYXRlIG9iamVjdCB3aXRoIG5hbWUgYW5kIHBheWxvYWRcblx0ICovXG5cdGdldERlZmF1bHRWYWx1ZUhlbHBEZWxlZ2F0ZTogZnVuY3Rpb24gKF9maWVsZDogRmllbGQpIHtcblx0XHRyZXR1cm4geyBuYW1lOiBcInNhcC91aS9tZGMvb2RhdGEvdjQvVmFsdWVIZWxwRGVsZWdhdGVcIiwgcGF5bG9hZDoge30gfTtcblx0fSxcblxuXHRnZXRUeXBlTWFwOiBmdW5jdGlvbiAoX2ZpZWxkOiBGaWVsZCkge1xuXHRcdHJldHVybiBUeXBlTWFwO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmUgYWxsIHBhcmFtZXRlcnMgaW4gYSB2YWx1ZSBoZWxwIHRoYXQgdXNlIGEgc3BlY2lmaWMgcHJvcGVydHkuXG5cdCAqIEBwYXJhbSB2YWx1ZUxpc3RJbmZvIFZhbHVlIGxpc3QgaW5mb1xuXHQgKiBAcGFyYW0gcHJvcGVydHlOYW1lIE5hbWUgb2YgdGhlIHByb3BlcnR5XG5cdCAqIEByZXR1cm5zIExpc3Qgb2YgYWxsIGZvdW5kIHBhcmFtZXRlcnNcblx0ICovXG5cdF9nZXRWYWx1ZUxpc3RQYXJhbWV0ZXI6IGZ1bmN0aW9uICh2YWx1ZUxpc3RJbmZvOiBBbm5vdGF0aW9uVmFsdWVMaXN0VHlwZSwgcHJvcGVydHlOYW1lOiBzdHJpbmcpIHtcblx0XHQvL2RldGVybWluZSBwYXRoIHRvIHZhbHVlIGxpc3QgcHJvcGVydHlcblx0XHRyZXR1cm4gdmFsdWVMaXN0SW5mby5QYXJhbWV0ZXJzLmZpbHRlcihmdW5jdGlvbiAoZW50cnkpIHtcblx0XHRcdGlmIChlbnRyeS5Mb2NhbERhdGFQcm9wZXJ0eSkge1xuXHRcdFx0XHRyZXR1cm4gZW50cnkuTG9jYWxEYXRhUHJvcGVydHkuJFByb3BlcnR5UGF0aCA9PT0gcHJvcGVydHlOYW1lO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9LFxuXHQvKipcblx0ICogQnVpbGQgZmlsdGVycyBmb3IgZWFjaCByZWxldmFudCBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSB2YWx1ZUxpc3QgVmFsdWUgbGlzdCBpbmZvXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgTmFtZSBvZiB0aGUgcHJvcGVydHlcblx0ICogQHBhcmFtIHZhbHVlSGVscFByb3BlcnR5IE5hbWUgb2YgdGhlIHZhbHVlIGhlbHAgcHJvcGVydHlcblx0ICogQHBhcmFtIGtleVZhbHVlIFZhbHVlIG9mIHRoZSBwcm9wZXJ0eVxuXHQgKiBAcGFyYW0gdmFsdWVoZWxwUGF5bG9hZCBQYXlsb2FkIG9mIHRoZSB2YWx1ZSBoZWxwXG5cdCAqIEBwYXJhbSB2YWx1ZWhlbHBDb25kaXRpb25QYXlsb2FkIEFkZGl0aW9uYWwgY29uZGl0aW9uIGluZm9ybWF0aW9uIGZvciB0aGlzIGtleVxuXHQgKiBAcGFyYW0gYmluZGluZ0NvbnRleHQgQmluZGluZ0NvbnRleHQgb2YgdGhlIGZpZWxkXG5cdCAqIEByZXR1cm5zIExpc3Qgb2YgZmlsdGVyc1xuXHQgKi9cblx0X2dldEZpbHRlcjogZnVuY3Rpb24gKFxuXHRcdHZhbHVlTGlzdDogQW5ub3RhdGlvblZhbHVlTGlzdFR5cGUsXG5cdFx0cHJvcGVydHlOYW1lOiBzdHJpbmcsXG5cdFx0dmFsdWVIZWxwUHJvcGVydHk6IHN0cmluZyxcblx0XHRrZXlWYWx1ZTogc3RyaW5nLFxuXHRcdHZhbHVlaGVscFBheWxvYWQ6IFZhbHVlSGVscFBheWxvYWQsXG5cdFx0dmFsdWVoZWxwQ29uZGl0aW9uUGF5bG9hZDogQ29uZGl0aW9uUGF5bG9hZFR5cGVbXSB8IHVuZGVmaW5lZCxcblx0XHRiaW5kaW5nQ29udGV4dD86IENvbnRleHQsXG5cdFx0ZmlsdGVyQmFyQ29uZGl0aW9ucz86IFJlY29yZDxzdHJpbmcsIENvbmRpdGlvbk9iamVjdFtdPlxuXHQpIHtcblx0XHRsZXQgZmlsdGVyczogRmlsdGVyW10gPSBbXTtcblx0XHRjb25zdCBwYXJhbWV0ZXJzID0gdmFsdWVMaXN0LlBhcmFtZXRlcnMuZmlsdGVyKGZ1bmN0aW9uIChwYXJhbWV0ZXIpIHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdHBhcmFtZXRlci4kVHlwZSA9PT0gQ29tbW9uQW5ub3RhdGlvblR5cGVzLlZhbHVlTGlzdFBhcmFtZXRlckluIHx8XG5cdFx0XHRcdHBhcmFtZXRlci4kVHlwZSA9PT0gQ29tbW9uQW5ub3RhdGlvblR5cGVzLlZhbHVlTGlzdFBhcmFtZXRlckluT3V0IHx8XG5cdFx0XHRcdChwYXJhbWV0ZXIuTG9jYWxEYXRhUHJvcGVydHk/LiRQcm9wZXJ0eVBhdGggPT09IHByb3BlcnR5TmFtZSAmJiBwYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHkgPT09IHZhbHVlSGVscFByb3BlcnR5KVxuXHRcdFx0KTtcblx0XHR9KTtcblx0XHRmb3IgKGNvbnN0IHBhcmFtZXRlciBvZiBwYXJhbWV0ZXJzKSB7XG5cdFx0XHRsZXQgZmlsdGVyVmFsdWU7XG5cdFx0XHRpZiAocGFyYW1ldGVyLkxvY2FsRGF0YVByb3BlcnR5Py4kUHJvcGVydHlQYXRoID09PSBwcm9wZXJ0eU5hbWUpIHtcblx0XHRcdFx0ZmlsdGVyVmFsdWUgPSBrZXlWYWx1ZTtcblx0XHRcdH0gZWxzZSBpZiAodmFsdWVoZWxwUGF5bG9hZD8uaXNBY3Rpb25QYXJhbWV0ZXJEaWFsb2cgPT09IHRydWUpIHtcblx0XHRcdFx0Y29uc3QgYXBkRmllbGRQYXRoID0gYEFQRF86OiR7cGFyYW1ldGVyLkxvY2FsRGF0YVByb3BlcnR5Py4kUHJvcGVydHlQYXRofWA7XG5cdFx0XHRcdGNvbnN0IGFwZEZpZWxkID0gRWxlbWVudC5nZXRFbGVtZW50QnlJZChhcGRGaWVsZFBhdGgpIGFzIEZpZWxkO1xuXHRcdFx0XHRmaWx0ZXJWYWx1ZSA9IGFwZEZpZWxkPy5nZXRWYWx1ZSgpO1xuXHRcdFx0fSBlbHNlIGlmICh2YWx1ZWhlbHBDb25kaXRpb25QYXlsb2FkICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Y29uc3Qgc291cmNlUGF0aCA9IHBhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eTtcblx0XHRcdFx0Y29uc3QgY29uZGl0aW9uUGF5bG9hZCA9IHZhbHVlaGVscENvbmRpdGlvblBheWxvYWQ/LlswXTtcblx0XHRcdFx0ZmlsdGVyVmFsdWUgPSBzb3VyY2VQYXRoICYmIGNvbmRpdGlvblBheWxvYWQ/Lltzb3VyY2VQYXRoXTtcblx0XHRcdH0gZWxzZSBpZiAoYmluZGluZ0NvbnRleHQpIHtcblx0XHRcdFx0Ly8gaWYgdGhlIHZhbHVlIGhlbHAgaXMgbm90IHVzZWQgdHJ5IGdldHRpbmcgdGhlIGZpbHRlciB2YWx1ZSBmcm9tIHRoZSBiaW5kaW5nIGNvbnRleHRcblx0XHRcdFx0Y29uc3Qgc291cmNlUGF0aCA9IHBhcmFtZXRlci5Mb2NhbERhdGFQcm9wZXJ0eT8uJFByb3BlcnR5UGF0aDtcblx0XHRcdFx0ZmlsdGVyVmFsdWUgPSBiaW5kaW5nQ29udGV4dC5nZXRPYmplY3Qoc291cmNlUGF0aCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWZpbHRlclZhbHVlICYmIGZpbHRlckJhckNvbmRpdGlvbnMpIHtcblx0XHRcdFx0Y29uc3QgY29uZGl0aW9uID0gZmlsdGVyQmFyQ29uZGl0aW9ucz8uW3BhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eV07XG5cdFx0XHRcdGlmIChjb25kaXRpb24/Lmxlbmd0aCA9PT0gMSAmJiBjb25kaXRpb25bMF0/Lm9wZXJhdG9yID09PSBcIkVRXCIpIHtcblx0XHRcdFx0XHRmaWx0ZXJWYWx1ZSA9IGNvbmRpdGlvblswXT8udmFsdWVzWzBdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvKiBBZGQgdmFsdWUgdG8gdGhlIGZpbHRlciBmb3IgdGhlIHRleHQgZGV0ZXJtaW5hdGlvbiAqL1xuXHRcdFx0aWYgKGZpbHRlclZhbHVlICE9PSBudWxsICYmIGZpbHRlclZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0ZmlsdGVycy5wdXNoKG5ldyBGaWx0ZXIoeyBwYXRoOiBwYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHksIG9wZXJhdG9yOiBcIkVRXCIsIHZhbHVlMTogZmlsdGVyVmFsdWUgfSkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAodmFsdWVoZWxwQ29uZGl0aW9uUGF5bG9hZD8uWzBdKSB7XG5cdFx0XHQvLyBJbiBjYXNlIG9mIG11bHRpcGxlIGtleXMgZm9yIHRoZSB2YWx1ZWxpc3QgY29sbGVjdGlvbiwgdGhlIG1haW4gVmFsdWVMaXN0UHJvcGVydHkgbWlnaHQgbm90IGJlIHVuaXF1ZSB0byBnZXQgZXhhY3QgdmFsdWUgbGlzdCBzZWxlY3Rpb24uXG5cdFx0XHQvLyBTbywgd2UgYWRkIGZpbHRlcnMgZm9yIGtleSBwcm9wZXJ0aWVzIGlmIHRoZXkgYXJlIHByZXNlbnQgaW4gdGhlIHZhbHVlaGVscENvbmRpdGlvblBheWxvYWQuXG5cdFx0XHRmaWx0ZXJzID0gZmlsdGVycy5jb25jYXQodGhpcy5fZ2V0UmVtYWluaW5nS2V5VmFsdWVGaWx0ZXJzKHZhbHVlaGVscENvbmRpdGlvblBheWxvYWRbMF0sIHZhbHVlTGlzdCkpO1xuXHRcdH1cblx0XHRyZXR1cm4gZmlsdGVycztcblx0fSxcblxuXHQvKipcblx0ICogR2V0IG1vZGVsIGZpbHRlcnMgdG8gZW5zdXJlIGEgcHJlY2lzZSBzZWxlY3Rpb24gZnJvbSB0aGUgY29uZGl0aW9uIHBheWxvYWQuXG5cdCAqIEBwYXJhbSBjb25kaXRpb25QYXlsb2FkIEFkZGl0aW9uYWwgY29uZGl0aW9uIGluZm9ybWF0aW9uIGZvciB0aGlzIGtleVxuXHQgKiBAcGFyYW0gdmFsdWVMaXN0IFZhbHVlIGxpc3QgaW5mb3JtYXRpb25cblx0ICogQHJldHVybnMgTGlzdCBvZiBmaWx0ZXJzXG5cdCAqL1xuXHRfZ2V0UmVtYWluaW5nS2V5VmFsdWVGaWx0ZXJzKGNvbmRpdGlvblBheWxvYWQ6IENvbmRpdGlvblBheWxvYWRUeXBlLCB2YWx1ZUxpc3Q6IEFubm90YXRpb25WYWx1ZUxpc3RUeXBlKTogRmlsdGVyW10ge1xuXHRcdGNvbnN0IHsgJG1vZGVsOiB2YWx1ZUxpc3RNb2RlbCwgQ29sbGVjdGlvblBhdGg6IGNvbGxlY3Rpb25QYXRoLCBQYXJhbWV0ZXJzOiBwYXJhbWV0ZXJzIH0gPSB2YWx1ZUxpc3Q7XG5cdFx0Y29uc3QgbWV0YUNvbnRleHQgPSB2YWx1ZUxpc3RNb2RlbC5nZXRNZXRhTW9kZWwoKS5nZXRNZXRhQ29udGV4dChgLyR7Y29sbGVjdGlvblBhdGh9YCk7XG5cdFx0Y29uc3QgZW50aXR5VHlwZSA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhQ29udGV4dCkudGFyZ2V0RW50aXR5VHlwZTtcblx0XHRjb25zdCBhbGxMb2NhbERhdGFQcm9wZXJ0aWVzID0gcGFyYW1ldGVycy5yZWR1Y2UoKGFyciwgcGFyYW1ldGVyKSA9PiB7XG5cdFx0XHRpZiAocGFyYW1ldGVyLkxvY2FsRGF0YVByb3BlcnR5Py4kUHJvcGVydHlQYXRoKSB7XG5cdFx0XHRcdGFyci5wdXNoKHBhcmFtZXRlci5Mb2NhbERhdGFQcm9wZXJ0eS4kUHJvcGVydHlQYXRoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBhcnI7XG5cdFx0fSwgW10gYXMgc3RyaW5nW10pO1xuXHRcdGNvbnN0IGFsbFJlbWFpbmluZ0tleXMgPSBlbnRpdHlUeXBlLmtleXMucmVkdWNlKChhcnIsIHsgbmFtZToga2V5TmFtZSB9KSA9PiB7XG5cdFx0XHRpZiAoIWFsbExvY2FsRGF0YVByb3BlcnRpZXMuaW5jbHVkZXMoa2V5TmFtZSkgJiYgY29uZGl0aW9uUGF5bG9hZC5oYXNPd25Qcm9wZXJ0eShrZXlOYW1lKSkge1xuXHRcdFx0XHRhcnIucHVzaChrZXlOYW1lKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBhcnI7XG5cdFx0fSwgW10gYXMgc3RyaW5nW10pO1xuXHRcdGlmIChhbGxSZW1haW5pbmdLZXlzLmxlbmd0aCA+IDApIHtcblx0XHRcdHJldHVybiBhbGxSZW1haW5pbmdLZXlzLnJlZHVjZSgoZmlsdGVyczogRmlsdGVyW10sIGtleTogc3RyaW5nKTogRmlsdGVyW10gPT4ge1xuXHRcdFx0XHQvLyBUaGlzIGlzIGEgbWV0YW1vZGVsIG9wZXJhdGlvbi4gVGhlIG9yaWdpbmFsIGlzUHJvcGVydHlGaWx0ZXJhYmxlIG5lZWRzIHRvIGJlIGNvbnZlcnRlZCBsYXRlci5cblx0XHRcdFx0Y29uc3Qga2V5Q29udGV4dCA9IHZhbHVlTGlzdE1vZGVsLmdldE1ldGFNb2RlbCgpLmdldE1ldGFDb250ZXh0KGAvJHtjb2xsZWN0aW9uUGF0aH0vJHtrZXl9YCk7XG5cdFx0XHRcdGlmIChDb21tb25IZWxwZXIuaXNQcm9wZXJ0eUZpbHRlcmFibGUoa2V5Q29udGV4dCwgdW5kZWZpbmVkLCB0cnVlKSkge1xuXHRcdFx0XHRcdGZpbHRlcnMucHVzaChuZXcgRmlsdGVyKHsgcGF0aDoga2V5LCBvcGVyYXRvcjogXCJFUVwiLCB2YWx1ZTE6IGNvbmRpdGlvblBheWxvYWRba2V5XSB9KSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZpbHRlcnM7XG5cdFx0XHR9LCBbXSk7XG5cdFx0fVxuXHRcdHJldHVybiBbXTtcblx0fSxcblxuXHQvKipcblx0ICogRGV0ZXJtaW5lcyB0aGUga2V5LCBkZXNjcmlwdGlvbiwgYW5kIHBheWxvYWQgb2YgYSB1c2VyIGlucHV0LlxuXHQgKiBAcGFyYW0gZmllbGQgVGhlIDxjb2RlPkZpZWxkPC9jb2RlPiBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gdmFsdWVIZWxwIFZhbHVlIGhlbHAgaW5zdGFuY2Vcblx0ICogQHBhcmFtIGNvbmZpZyBDb25maWd1cmF0aW9uIE9iamVjdFxuXHQgKiBAcmV0dXJucyBPYmplY3QgY29udGFpbmluZyBkZXNjcmlwdGlvbiwga2V5LCBhbmQgcGF5bG9hZC4gSWYgaXQgaXMgbm90IGF2YWlsYWJsZSByaWdodCBub3cgKG11c3QgYmUgcmVxdWVzdGVkKSwgYSA8Y29kZT5Qcm9taXNlPC9jb2RlPiBpcyByZXR1cm5lZFxuXHQgKi9cblx0Z2V0SXRlbUZvclZhbHVlOiBhc3luYyBmdW5jdGlvbiAoZmllbGQ6IEZpZWxkLCB2YWx1ZUhlbHA6IFZhbHVlSGVscCwgY29uZmlnOiBJdGVtRm9yVmFsdWVDb25maWd1cmF0aW9uKSB7XG5cdFx0Ly9CQ1A6IDIyNzAxNjI4ODcgLiBUaGUgTURDIGZpZWxkIHNob3VsZCBub3QgdHJ5IHRvIGdldCB0aGUgaXRlbSB3aGVuIHRoZSBmaWVsZCBpcyBlbXB0aWVkXG5cdFx0Ly8gSklSQTogRklPUklURUNIUDEtMjUzNjEgLSBJbXByb3ZlIHRoZSB0eXBlLWFoZWFkIGJlaGF2aW9yIGZvciBtaXNzaW5uZyB0ZXh0IGFubm90YXRpb24gb3IgY29uc3RyYWludHMgdmlvbGF0aW9ucyBvZiB0aGUgZXhpc3RpbmcgdGV4dCBhbm5vdGF0aW9uXG5cdFx0aWYgKGNvbmZpZy52YWx1ZSA9PT0gXCJcIikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChjb25maWcuY2hlY2tEZXNjcmlwdGlvbikge1xuXHRcdFx0Y29uc3QgY29udGFpbmVyID0gdmFsdWVIZWxwLmdldFR5cGVhaGVhZCgpO1xuXHRcdFx0Y29uc3QgcGF5bG9hZCA9IHZhbHVlSGVscC5nZXRQYXlsb2FkKCkgYXMgVmFsdWVIZWxwUGF5bG9hZDtcblx0XHRcdGNvbnN0IHNlbGVjdGVkQ29udGVudCA9IGNvbnRhaW5lci5nZXRTZWxlY3RlZENvbnRlbnQoKTtcblx0XHRcdGNvbnN0IGNvbnRlbnRJZCA9IHNlbGVjdGVkQ29udGVudCAmJiBzZWxlY3RlZENvbnRlbnQuZ2V0SWQoKTtcblx0XHRcdC8vIEluIGNhc2VzIHdoZXJlIGdldEl0ZW1Gb3JWYWx1ZSBpcyBjYWxsZWQgYmVmb3JlIHNob3dWYWx1ZUxpc3QsIHRoZSBkZXNjcmlwdGlvbiBtYXkgbm90IGJlIGF2YWlsYWJsZS5cblx0XHRcdC8vIFRoZXJlZm9yZSwgdGhpcyByZXRyaWV2ZUNvbnRlbnQgbWV0aG9kIGlzIHVzZWQgdG8gdXBkYXRlIHRoZSBkZXNjcmlwdGlvbi5cblx0XHRcdGF3YWl0IFZhbHVlSGVscERlbGVnYXRlLnJldHJpZXZlQ29udGVudCh2YWx1ZUhlbHAsIGNvbnRhaW5lciwgY29udGVudElkKTtcblx0XHRcdGNvbnN0IG1heExlbmd0aCA9IHBheWxvYWQubWF4TGVuZ3RoO1xuXHRcdFx0Y29uc3QgdmFsdWVMZW5ndGggPSBjb25maWcudmFsdWU/LnRvU3RyaW5nKCkubGVuZ3RoIHx8IDA7XG5cdFx0XHRjb25zdCBkZXNjcmlwdGlvblBhdGggPSBwYXlsb2FkLnZhbHVlSGVscERlc2NyaXB0aW9uUGF0aDtcblx0XHRcdGlmIChkZXNjcmlwdGlvblBhdGggPT09IFwiXCIpIHtcblx0XHRcdFx0Ly8gSW4gY2FzZSB0aGUgcHJvcGVydHkgdmFsdWUgaGVscCBjb2xsZWN0aW9uIGhhcyBubyB0ZXh0IGFubm90YXRpb24gKGRlc2NyaXB0aW9uUGF0aCBpcyBlbXB0eSkgdGhlIGRlc2NyaXB0aW9uIGNoZWNrIHNob3VsZG7CtHQgb2NjdXIuXG5cdFx0XHRcdC8vIEluIHN1Y2ggYSBjYXNlIHRoZSBtZXRob2QgZ2V0RGVzY3JpcHRpb24gd2lsbCBiZSBjYWxsZWQgYnkgTURDIGFuZCB3aXRoaW4gdGhpcyBtZXRob2QgYSBTaWRlRWZmZWN0IGlzIHJlcXVlc3RlZCB0byByZXRyaWV2ZSB0aGUgdGV4dCBmcm9tIHRoZSB0ZXh0IHByb3BlcnR5IG9mIHRoZSBtYWluIGVudGl0eVxuXHRcdFx0XHRjb25maWcuY2hlY2tEZXNjcmlwdGlvbiA9IGZhbHNlO1xuXHRcdFx0fSBlbHNlIGlmIChtYXhMZW5ndGggIT09IHVuZGVmaW5lZCAmJiB2YWx1ZUxlbmd0aCA+IG1heExlbmd0aCkge1xuXHRcdFx0XHQvL3ZhbHVlIGxlbmd0aCBpcyA+IHRleHQgcHJvZXBlcnR5IGxlbmd0aCBjb25zdHJhaW50XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIEZpZWxkQmFzZURlbGVnYXRlLmdldEl0ZW1Gb3JWYWx1ZShmaWVsZCwgdmFsdWVIZWxwLCBjb25maWcpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGZpbHRlciBiYXIgaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IGZpZWxkLlxuXHQgKiBAcGFyYW0gZmllbGQgRmllbGQgQ29udHJvbFxuXHQgKiBAcmV0dXJucyBUaGUgZmlsdGVyIGJhciBpbnN0YW5jZVxuXHQgKi9cblx0X2dldEZpbHRlckJhcjogZnVuY3Rpb24gKGZpZWxkOiBGaWVsZCB8IG51bGwpOiBGaWx0ZXJCYXIgfCB1bmRlZmluZWQge1xuXHRcdGxldCBmaWx0ZXJCYXJBUEk7XG5cdFx0aWYgKGZpZWxkPy5pc0EoXCJzYXAudWkubWRjLkZpbHRlckZpZWxkXCIpKSB7XG5cdFx0XHR3aGlsZSAoZmllbGQpIHtcblx0XHRcdFx0aWYgKGZpZWxkPy5pc0E8RmlsdGVyQmFyQVBJPihcInNhcC5mZS5tYWNyb3MuZmlsdGVyQmFyLkZpbHRlckJhckFQSVwiKSkge1xuXHRcdFx0XHRcdGZpbHRlckJhckFQSSA9IGZpZWxkO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGZpZWxkID0gZmllbGQ/LmdldFBhcmVudCgpIGFzIHVua25vd24gYXMgRmllbGQ7XG5cdFx0XHR9XG5cdFx0XHRpZiAoZmlsdGVyQmFyQVBJPy5nZXRDb250ZW50KCk/LmlzQShcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuRmlsdGVyQmFyXCIpKSB7XG5cdFx0XHRcdHJldHVybiBmaWx0ZXJCYXJBUEkuZ2V0Q29udGVudCgpIGFzIEZpbHRlckJhcjtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fSxcblxuXHQvKipcblx0ICogRGV0ZXJtaW5lcyB0aGUgZGVzY3JpcHRpb24gZm9yIGEgZ2l2ZW4ga2V5LlxuXHQgKiBAcGFyYW0gZmllbGQgVGhlIDxjb2RlPkZpZWxkPC9jb2RlPiBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gdmFsdWVIZWxwIEZpZWxkIGhlbHAgYXNzaWduZWQgdG8gdGhlIDxjb2RlPkZpZWxkPC9jb2RlPiBvciA8Y29kZT5GaWx0ZXJGaWVsZDwvY29kZT4gY29udHJvbFxuXHQgKiBAcGFyYW0ga2V5IEtleSB2YWx1ZSBvZiB0aGUgZGVzY3JpcHRpb25cblx0ICogQHBhcmFtIF9jb25kaXRpb25JbiBJbiBwYXJhbWV0ZXJzIGZvciB0aGUga2V5IChubyBsb25nZXIgc3VwcG9ydGVkKVxuXHQgKiBAcGFyYW0gX2NvbmRpdGlvbk91dCBPdXQgcGFyYW1ldGVycyBmb3IgdGhlIGtleSAobm8gbG9uZ2VyIHN1cHBvcnRlZClcblx0ICogQHBhcmFtIGJpbmRpbmdDb250ZXh0IEJpbmRpbmdDb250ZXh0IDxjb2RlPkJpbmRpbmdDb250ZXh0PC9jb2RlPiBvZiB0aGUgY2hlY2tlZCBmaWVsZC4gSW5zaWRlIGEgdGFibGUsIHRoZSA8Y29kZT5WYWx1ZUhlbHA8L2NvZGU+IGVsZW1lbnQgY2FuIGJlIGNvbm5lY3RlZCB0byBhIGRpZmZlcmVudCByb3dcblx0ICogQHBhcmFtIF9Db25kaXRpb25Nb2RlbCBDb25kaXRpb25Nb2RlbDwvY29kZT4sIGlmIGJvdW5kIHRvIG9uZVxuXHQgKiBAcGFyYW0gX2NvbmRpdGlvbk1vZGVsTmFtZSBOYW1lIG9mIHRoZSA8Y29kZT5Db25kaXRpb25Nb2RlbDwvY29kZT4sIGlmIGJvdW5kIHRvIG9uZVxuXHQgKiBAcGFyYW0gY29uZGl0aW9uUGF5bG9hZCBBZGRpdGlvbmFsIGNvbnRleHQgaW5mb3JtYXRpb24gZm9yIHRoaXMga2V5XG5cdCAqIEBwYXJhbSBjb250cm9sIEluc3RhbmNlIG9mIHRoZSBjYWxsaW5nIGNvbnRyb2xcblx0ICogQHBhcmFtIF90eXBlIFR5cGUgb2YgdGhlIHZhbHVlXG5cdCAqIEByZXR1cm5zIERlc2NyaXB0aW9uIGZvciB0aGUga2V5IG9yIG9iamVjdCBjb250YWluaW5nIGEgZGVzY3JpcHRpb24sIGtleSBhbmQgcGF5bG9hZC4gSWYgdGhlIGRlc2NyaXB0aW9uIGlzIG5vdCBhdmFpbGFibGUgcmlnaHQgYXdheSAoaXQgbXVzdCBiZSByZXF1ZXN0ZWQpLCBhIDxjb2RlPlByb21pc2U8L2NvZGU+IGlzIHJldHVybmVkXG5cdCAqL1xuXHRnZXREZXNjcmlwdGlvbjogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdGZpZWxkOiBGaWVsZCB8IG51bGwsXG5cdFx0dmFsdWVIZWxwOiBWYWx1ZUhlbHAsXG5cdFx0a2V5OiBzdHJpbmcsXG5cdFx0X2NvbmRpdGlvbkluOiBvYmplY3QsXG5cdFx0X2NvbmRpdGlvbk91dDogb2JqZWN0LFxuXHRcdGJpbmRpbmdDb250ZXh0OiBDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHRcdF9Db25kaXRpb25Nb2RlbDogQ29uZGl0aW9uTW9kZWwsXG5cdFx0X2NvbmRpdGlvbk1vZGVsTmFtZTogc3RyaW5nLFxuXHRcdGNvbmRpdGlvblBheWxvYWQ6IENvbmRpdGlvblBheWxvYWRNYXAsXG5cdFx0Y29udHJvbDogQ29udHJvbCxcblx0XHRfdHlwZTogdW5rbm93bixcblx0XHRlbXB0eUFsbG93ZWQ6IGJvb2xlYW5cblx0KSB7XG5cdFx0Ly9KSVJBOiBGSU9SSVRFQ0hQMS0yMjAyMiAuIFRoZSBNREMgZmllbGQgc2hvdWxkIG5vdCAgdHJpZXMgdG8gZGV0ZXJtaW5lIGRlc2NyaXB0aW9uIHdpdGggdGhlIGluaXRpYWwgR0VUIG9mIHRoZSBkYXRhLlxuXHRcdC8vIGl0IHNob3VsZCByZWx5IG9uIHRoZSBkYXRhIHdlIGFscmVhZHkgcmVjZWl2ZWQgZnJvbSB0aGUgYmFja2VuZFxuXHRcdC8vIEJ1dCBUaGUgZ2V0RGVzY3JpcHRpb24gZnVuY3Rpb24gaXMgYWxzbyBjYWxsZWQgaW4gdGhlIEZpbHRlckZpZWxkIGNhc2UgaWYgYSB2YXJpYW50IGlzIGxvYWRlZC5cblx0XHQvLyBBcyB0aGUgZGVzY3JpcHRpb24gdGV4dCBjb3VsZCBiZSBsYW5ndWFnZSBkZXBlbmRlbnQgaXQgaXMgbm90IHN0b3JlZCBpbiB0aGUgdmFyaWFudCwgc28gaXQgbmVlZHMgdG8gYmUgcmVhZCBvbiByZW5kZXJpbmcuXG5cblx0XHRsZXQgcGF5bG9hZCA9IGZpZWxkPy5nZXRQYXlsb2FkKCkgYXMgRmllbGRQYXlsb2FkO1xuXG5cdFx0LyogUmV0cmlldmUgdGV4dCBmcm9tIHZhbHVlIGhlbHAsIGlmIHZhbHVlIHdhcyBzZXQgYnkgb3V0LXBhcmFtZXRlciAoQkNQIDIyNzAxNjA2MzMpICovXG5cdFx0aWYgKCFwYXlsb2FkICYmIChjb250cm9sIGFzIEZpZWxkQmFzZSk/LmdldERpc3BsYXkoKS5pbmNsdWRlcyhcIkRlc2NyaXB0aW9uXCIpKSB7XG5cdFx0XHRwYXlsb2FkID0ge1xuXHRcdFx0XHRyZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0OiB0cnVlXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGlmIChwYXlsb2FkPy5yZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0ID09PSB0cnVlIHx8IHBheWxvYWQ/LmlzRmlsdGVyRmllbGQgPT09IHRydWUpIHtcblx0XHRcdGNvbnN0IGRhdGFNb2RlbCA9IHZhbHVlSGVscC5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwgfCB1bmRlZmluZWQ7XG5cdFx0XHRjb25zdCBvd25lciA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcih2YWx1ZUhlbHAgYXMgdW5rbm93biBhcyBDb250cm9sKTtcblx0XHRcdC8vIElmIG5laXRoZXIgZGF0YU1vZGVsIG5vciBvd25lciBpcyBkZWZpbmVkLCB0aGUgdmFsdWVIZWxwIGNhbm5vdCBiZSBhbiBGRSBjb250cm9sLlxuXHRcdFx0Ly8gVGhpcyBvY2N1cnMgaW4gY2FzZXMgb2YgYSBzdGFuZGFyZCBNREMgY29udHJvbHMgKGUuZy4sIGRlZmF1bHQgVmFsdWVIZWxwIGZvciBib29sZWFuIHZhbHVlcykuXG5cdFx0XHRpZiAoIWRhdGFNb2RlbCAmJiAhb3duZXIpIHtcblx0XHRcdFx0cmV0dXJuIEZpZWxkQmFzZURlbGVnYXRlLmdldERlc2NyaXB0aW9uKFxuXHRcdFx0XHRcdGZpZWxkIGFzIEZpZWxkQmFzZSxcblx0XHRcdFx0XHR2YWx1ZUhlbHAsXG5cdFx0XHRcdFx0a2V5LFxuXHRcdFx0XHRcdF9jb25kaXRpb25Jbixcblx0XHRcdFx0XHRfY29uZGl0aW9uT3V0LFxuXHRcdFx0XHRcdGJpbmRpbmdDb250ZXh0IGFzIENvbnRleHQsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRjb25kaXRpb25QYXlsb2FkLFxuXHRcdFx0XHRcdGNvbnRyb2wsXG5cdFx0XHRcdFx0X3R5cGUsXG5cdFx0XHRcdFx0ZW1wdHlBbGxvd2VkXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBtZXRhTW9kZWwgPSBkYXRhTW9kZWxcblx0XHRcdFx0PyBkYXRhTW9kZWwuZ2V0TWV0YU1vZGVsKClcblx0XHRcdFx0OiBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodmFsdWVIZWxwIGFzIHVua25vd24gYXMgQ29udHJvbClcblx0XHRcdFx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHRcdFx0XHQuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRjb25zdCB2YWx1ZWhlbHBQYXlsb2FkID0gdmFsdWVIZWxwLmdldFBheWxvYWQoKSBhcyBWYWx1ZUhlbHBQYXlsb2FkO1xuXHRcdFx0Y29uc3QgdmFsdWVoZWxwQ29uZGl0aW9uUGF5bG9hZCA9IGNvbmRpdGlvblBheWxvYWQ/Llt2YWx1ZWhlbHBQYXlsb2FkLnZhbHVlSGVscFF1YWxpZmllcl07XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSB2YWx1ZWhlbHBQYXlsb2FkLnByb3BlcnR5UGF0aDtcblx0XHRcdGNvbnN0IHByb3BlcnR5RGVzY3JpcHRpb25QYXRoID0gdmFsdWVoZWxwUGF5bG9hZD8ucHJvcGVydHlEZXNjcmlwdGlvblBhdGg7XG5cdFx0XHRsZXQgdGV4dFByb3BlcnR5OiBzdHJpbmc7XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdC8qIFJlcXVlc3QgdmFsdWUgaGVscCBtZXRhZGF0YSAqL1xuXHRcdFx0XHRjb25zdCB2YWx1ZUxpc3RJbmZvID0gYXdhaXQgbWV0YU1vZGVsLnJlcXVlc3RWYWx1ZUxpc3RJbmZvKHByb3BlcnR5UGF0aCwgdHJ1ZSwgYmluZGluZ0NvbnRleHQpO1xuXHRcdFx0XHRjb25zdCBmaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXIoZmllbGQpO1xuXHRcdFx0XHRsZXQgZmlsdGVyQ29uZGl0aW9uczogUmVjb3JkPHN0cmluZywgQ29uZGl0aW9uT2JqZWN0W10+IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRpZiAoZmlsdGVyQmFyKSB7XG5cdFx0XHRcdFx0Y29uc3QgZmlsdGVyU3RhdGU6IEV4dGVybmFsU3RhdGVUeXBlID0gYXdhaXQgU3RhdGVVdGlsLnJldHJpZXZlRXh0ZXJuYWxTdGF0ZShmaWx0ZXJCYXIpO1xuXHRcdFx0XHRcdGZpbHRlckNvbmRpdGlvbnMgPSBmaWx0ZXJTdGF0ZS5maWx0ZXI7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gbWV0YU1vZGVsLmdldE9iamVjdChgJHtwcm9wZXJ0eVBhdGh9QHNhcHVpLm5hbWVgKSBhcyBzdHJpbmc7XG5cdFx0XHRcdC8vIHRha2UgdGhlIGZpcnN0IHZhbHVlIGxpc3QgYW5ub3RhdGlvbiAtIGFsdGVybmF0aXZlbHkgdGFrZSB0aGUgb25lIHdpdGhvdXQgcXVhbGlmaWVyIG9yIHRoZSBmaXJzdCBvbmVcblx0XHRcdFx0Y29uc3QgdmFsdWVMaXN0ID0gdmFsdWVMaXN0SW5mb1tPYmplY3Qua2V5cyh2YWx1ZUxpc3RJbmZvKVswXV07XG5cdFx0XHRcdGNvbnN0IHZhbHVlSGVscFBhcmFtZXRlcnMgPSB0aGlzLl9nZXRWYWx1ZUxpc3RQYXJhbWV0ZXIodmFsdWVMaXN0LCBwcm9wZXJ0eU5hbWUpO1xuXHRcdFx0XHRjb25zdCB2YWx1ZUhlbHBQcm9wZXJ0eSA9IHZhbHVlSGVscFBhcmFtZXRlcnM/LlswXT8uVmFsdWVMaXN0UHJvcGVydHk7XG5cdFx0XHRcdGlmICghdmFsdWVIZWxwUHJvcGVydHkpIHtcblx0XHRcdFx0XHR0aHJvdyBFcnJvcihgSW5jb25zaXN0ZW50IHZhbHVlIGhlbHAgYW5ub3RhdGlvbiBmb3IgJHtwcm9wZXJ0eU5hbWV9YCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gZ2V0IHRleHQgYW5ub3RhdGlvbiBmb3IgdGhpcyB2YWx1ZSBsaXN0IHByb3BlcnR5XG5cdFx0XHRcdGNvbnN0IHZhbHVlTGlzdE1vZGVsID0gdmFsdWVMaXN0LiRtb2RlbDtcblx0XHRcdFx0Y29uc3QgdGV4dEFubm90YXRpb24gPSB2YWx1ZUxpc3RNb2RlbFxuXHRcdFx0XHRcdC5nZXRNZXRhTW9kZWwoKVxuXHRcdFx0XHRcdC5nZXRPYmplY3QoYC8ke3ZhbHVlTGlzdC5Db2xsZWN0aW9uUGF0aH0vJHt2YWx1ZUhlbHBQcm9wZXJ0eX1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRgKTtcblx0XHRcdFx0aWYgKHRleHRBbm5vdGF0aW9uICYmIHRleHRBbm5vdGF0aW9uLiRQYXRoKSB7XG5cdFx0XHRcdFx0dGV4dFByb3BlcnR5ID0gdGV4dEFubm90YXRpb24uJFBhdGg7XG5cdFx0XHRcdFx0LyogQnVpbGQgdGhlIGZpbHRlciBmb3IgdGhlIHJlbGV2YW50IHBhcmFtZXRlcnMgKi9cblx0XHRcdFx0XHRjb25zdCBmaWx0ZXJzID0gdGhpcy5fZ2V0RmlsdGVyKFxuXHRcdFx0XHRcdFx0dmFsdWVMaXN0LFxuXHRcdFx0XHRcdFx0cHJvcGVydHlOYW1lLFxuXHRcdFx0XHRcdFx0dmFsdWVIZWxwUHJvcGVydHksXG5cdFx0XHRcdFx0XHRrZXksXG5cdFx0XHRcdFx0XHR2YWx1ZWhlbHBQYXlsb2FkLFxuXHRcdFx0XHRcdFx0dmFsdWVoZWxwQ29uZGl0aW9uUGF5bG9hZCxcblx0XHRcdFx0XHRcdGJpbmRpbmdDb250ZXh0LFxuXHRcdFx0XHRcdFx0ZmlsdGVyQ29uZGl0aW9uc1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0Y29uc3QgbGlzdEJpbmRpbmcgPSB2YWx1ZUxpc3RNb2RlbC5iaW5kTGlzdChgLyR7dmFsdWVMaXN0LkNvbGxlY3Rpb25QYXRofWAsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmaWx0ZXJzLCB7XG5cdFx0XHRcdFx0XHQkc2VsZWN0OiB0ZXh0UHJvcGVydHlcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHQvKiBSZXF1ZXN0IGRlc2NyaXB0aW9uIGZvciBnaXZlbiBrZXkgZnJvbSB2YWx1ZSBsaXN0IGVudGl0eSAqL1xuXHRcdFx0XHRcdGNvbnN0IGNvbnRleHRzID0gYXdhaXQgbGlzdEJpbmRpbmcucmVxdWVzdENvbnRleHRzKDAsIDIpO1xuXHRcdFx0XHRcdHJldHVybiBjb250ZXh0cy5sZW5ndGggPyBjb250ZXh0c1swXS5nZXRPYmplY3QodGV4dFByb3BlcnR5KSA6IHVuZGVmaW5lZDtcblx0XHRcdFx0fSBlbHNlIGlmIChiaW5kaW5nQ29udGV4dCAhPT0gdW5kZWZpbmVkICYmIHByb3BlcnR5RGVzY3JpcHRpb25QYXRoKSB7XG5cdFx0XHRcdFx0Y29uc3QgbGFzdEluZGV4ID0gcHJvcGVydHlEZXNjcmlwdGlvblBhdGgubGFzdEluZGV4T2YoXCIvXCIpO1xuXHRcdFx0XHRcdGNvbnN0IHNpZGVFZmZlY3RQYXRoID0gbGFzdEluZGV4ID4gMCA/IHByb3BlcnR5RGVzY3JpcHRpb25QYXRoLnN1YnN0cmluZygwLCBsYXN0SW5kZXgpIDogcHJvcGVydHlEZXNjcmlwdGlvblBhdGg7XG5cdFx0XHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNTZXJ2aWNlID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHZhbHVlSGVscCBhcyB1bmtub3duIGFzIENvbnRyb2wpLmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXHRcdFx0XHRcdGF3YWl0IHNpZGVFZmZlY3RzU2VydmljZS5yZXF1ZXN0U2lkZUVmZmVjdHMoW3NpZGVFZmZlY3RQYXRoXSwgYmluZGluZ0NvbnRleHQpO1xuXHRcdFx0XHRcdExvZy53YXJuaW5nKFxuXHRcdFx0XHRcdFx0YFJlcXVlc3RTaWRlRWZmZWN0cyBpcyB0cmlnZ2VyZWQgYmVjYXVzZSB0aGUgdGV4dCBhbm5vdGF0aW9uIGZvciAke3ZhbHVlSGVscFByb3BlcnR5fSBpcyBub3QgZGVmaW5lZCBhdCB0aGUgQ29sbGVjdGlvblBhdGggb2YgdGhlIHZhbHVlIGhlbHBgXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8qIEVYVEVSTkFsSUQgKi9cblx0XHRcdFx0XHRjb25zdCBleHRlcm5hbElkUGF0aCA9IG1ldGFNb2RlbD8uZ2V0T2JqZWN0KFxuXHRcdFx0XHRcdFx0YCR7dmFsdWVoZWxwUGF5bG9hZC5wcm9wZXJ0eVBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5FeHRlcm5hbElEYFxuXHRcdFx0XHRcdCk/LiRQYXRoO1xuXHRcdFx0XHRcdGlmIChleHRlcm5hbElkUGF0aCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgZXh0ZXJuYWxJZEZ1bGxQYXRoID0gdmFsdWVoZWxwUGF5bG9hZC5wcm9wZXJ0eVBhdGgucmVwbGFjZShwcm9wZXJ0eU5hbWUsIGV4dGVybmFsSWRQYXRoKTtcblx0XHRcdFx0XHRcdGNvbnN0IGV4dGVybmFsSWROYW1lID0gbWV0YU1vZGVsLmdldE9iamVjdChgJHtleHRlcm5hbElkRnVsbFBhdGh9QHNhcHVpLm5hbWVgKTtcblx0XHRcdFx0XHRcdGNvbnN0IGV4dGVybmFsSWREZXNjcmlwdGlvblBhdGggPSBtZXRhTW9kZWw/LmdldE9iamVjdChgJHtleHRlcm5hbElkRnVsbFBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0YClcblx0XHRcdFx0XHRcdFx0Py4kUGF0aDtcblx0XHRcdFx0XHRcdGNvbnN0IGZpbHRlcnMgPSBbXTtcblx0XHRcdFx0XHRcdGZpbHRlcnMucHVzaChuZXcgRmlsdGVyKHsgcGF0aDogZXh0ZXJuYWxJZE5hbWUsIG9wZXJhdG9yOiBcIkVRXCIsIHZhbHVlMToga2V5IH0pKTtcblx0XHRcdFx0XHRcdGNvbnN0IGxpc3RCaW5kaW5nID0gdmFsdWVMaXN0TW9kZWwuYmluZExpc3QoYC8ke3ZhbHVlTGlzdC5Db2xsZWN0aW9uUGF0aH1gLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgZmlsdGVycywge1xuXHRcdFx0XHRcdFx0XHQkc2VsZWN0OiBgJHtleHRlcm5hbElkTmFtZX0sJHtleHRlcm5hbElkRGVzY3JpcHRpb25QYXRofWBcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0Y29uc3QgY29udGV4dHMgPSBhd2FpdCBsaXN0QmluZGluZy5yZXF1ZXN0Q29udGV4dHMoMCwgMik7XG5cdFx0XHRcdFx0XHRpZiAoY29udGV4dHMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBjb250ZXh0c1swXS5nZXRPYmplY3QoZXh0ZXJuYWxJZERlc2NyaXB0aW9uUGF0aCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdExvZy5lcnJvcihgVGV4dCBBbm5vdGF0aW9uIGZvciAke3ZhbHVlSGVscFByb3BlcnR5fSBpcyBub3QgZGVmaW5lZGApO1xuXHRcdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdGNvbnN0IHN0YXR1cyA9IGVycm9yID8gKGVycm9yIGFzIFhNTEh0dHBSZXF1ZXN0KS5zdGF0dXMgOiB1bmRlZmluZWQ7XG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG5cdFx0XHRcdGNvbnN0IG1zZyA9IHN0YXR1cyA9PT0gNDA0ID8gYE1ldGFkYXRhIG5vdCBmb3VuZCAoJHtzdGF0dXN9KSBmb3IgdmFsdWUgaGVscCBvZiBwcm9wZXJ0eSAke3Byb3BlcnR5UGF0aH1gIDogbWVzc2FnZTtcblx0XHRcdFx0TG9nLmVycm9yKG1zZyk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztTQWtEZUEsTUFBTSxDQUFDQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUVDLGlCQUFpQixFQUFFO0lBQ25EQyxVQUFVLEVBQUUsQ0FBQztJQUViO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDQyx5QkFBeUIsRUFBRSxTQUFBQSxDQUFVQyxLQUFZLEVBQUVDLElBQTRCLEVBQUVDLEtBQXNCLEVBQUU7TUFDeEc7TUFDQTtNQUNBOztNQUVBLE1BQU1DLE1BQTBCLEdBQUcsQ0FBQyxDQUFDO01BQ3JDLElBQ0NGLElBQUksSUFDSkEsSUFBSSxDQUFDRyxHQUFHLENBQUMsQ0FBQyw4QkFBOEIsRUFBRSxrQ0FBa0MsQ0FBQyxDQUFDLElBQzlFQyxLQUFLLENBQUNDLE9BQU8sQ0FBQ0osS0FBSyxDQUFDLElBQ3BCQSxLQUFLLENBQUNLLE1BQU0sR0FBRyxDQUFDLElBQ2hCTCxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUtNLFNBQVMsRUFDckI7UUFDRDtRQUNBUCxJQUFJLENBQUNRLFdBQVcsQ0FBQ1AsS0FBSyxFQUFFLFFBQVEsQ0FBQztRQUNqQ0MsTUFBTSxDQUFDTyxnQkFBZ0IsR0FBRyxJQUFJO1FBQzlCUCxNQUFNLENBQUNRLFlBQVksR0FBR1QsS0FBSyxDQUFDLENBQUMsQ0FBVyxDQUFDLENBQUM7TUFDM0M7TUFFQSxPQUFPQyxNQUFNO0lBQ2QsQ0FBQztJQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQ1MsMEJBQTBCLEVBQUUsU0FBQUEsQ0FBVVosS0FBWSxFQUFFQyxJQUFnQixFQUFFWSxrQkFBdUMsRUFBRTtNQUM5RyxJQUFJQSxrQkFBa0IsRUFBRUYsWUFBWSxLQUFLSCxTQUFTLEVBQUU7UUFDbkQ7UUFDQVAsSUFBSSxDQUFDUSxXQUFXLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFSSxrQkFBa0IsQ0FBQ0YsWUFBWSxDQUFDLEVBQUUsUUFBUSxDQUFDO01BQzFFO0lBQ0QsQ0FBQztJQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0NHLG1CQUFtQixFQUFFLFNBQUFBLENBQVVkLEtBQVksRUFBRWUsTUFBZSxFQUFFRixrQkFBdUMsRUFBRTtNQUN0RyxJQUFJQSxrQkFBa0IsRUFBRUgsZ0JBQWdCLEtBQUssSUFBSSxJQUFJSyxNQUFNLENBQUNSLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDekVRLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDSCxrQkFBa0IsQ0FBQ0YsWUFBWSxDQUFDO1FBQzVDLE9BQU9JLE1BQU07TUFDZDtNQUVBLE9BQU9QLFNBQVM7SUFDakIsQ0FBQztJQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0NTLDJCQUEyQixFQUFFLFNBQUFBLENBQVVDLE1BQWEsRUFBRTtNQUNyRCxPQUFPO1FBQUVDLElBQUksRUFBRSx1Q0FBdUM7UUFBRUMsT0FBTyxFQUFFLENBQUM7TUFBRSxDQUFDO0lBQ3RFLENBQUM7SUFFREMsVUFBVSxFQUFFLFNBQUFBLENBQVVILE1BQWEsRUFBRTtNQUNwQyxPQUFPSSxPQUFPO0lBQ2YsQ0FBQztJQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDQyxzQkFBc0IsRUFBRSxTQUFBQSxDQUFVQyxhQUFzQyxFQUFFQyxZQUFvQixFQUFFO01BQy9GO01BQ0EsT0FBT0QsYUFBYSxDQUFDRSxVQUFVLENBQUNDLE1BQU0sQ0FBQyxVQUFVQyxLQUFLLEVBQUU7UUFDdkQsSUFBSUEsS0FBSyxDQUFDQyxpQkFBaUIsRUFBRTtVQUM1QixPQUFPRCxLQUFLLENBQUNDLGlCQUFpQixDQUFDQyxhQUFhLEtBQUtMLFlBQVk7UUFDOUQsQ0FBQyxNQUFNO1VBQ04sT0FBTyxLQUFLO1FBQ2I7TUFDRCxDQUFDLENBQUM7SUFDSCxDQUFDO0lBQ0Q7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDTSxVQUFVLEVBQUUsU0FBQUEsQ0FDWEMsU0FBa0MsRUFDbENQLFlBQW9CLEVBQ3BCUSxpQkFBeUIsRUFDekJDLFFBQWdCLEVBQ2hCQyxnQkFBa0MsRUFDbENDLHlCQUE2RCxFQUM3REMsY0FBd0IsRUFDeEJDLG1CQUF1RCxFQUN0RDtNQUNELElBQUlDLE9BQWlCLEdBQUcsRUFBRTtNQUMxQixNQUFNQyxVQUFVLEdBQUdSLFNBQVMsQ0FBQ04sVUFBVSxDQUFDQyxNQUFNLENBQUMsVUFBVWMsU0FBUyxFQUFFO1FBQ25FLE9BQ0NBLFNBQVMsQ0FBQ0MsS0FBSywwREFBK0MsSUFDOURELFNBQVMsQ0FBQ0MsS0FBSyw2REFBa0QsSUFDaEVELFNBQVMsQ0FBQ1osaUJBQWlCLEVBQUVDLGFBQWEsS0FBS0wsWUFBWSxJQUFJZ0IsU0FBUyxDQUFDRSxpQkFBaUIsS0FBS1YsaUJBQWtCO01BRXBILENBQUMsQ0FBQztNQUNGLEtBQUssTUFBTVEsU0FBUyxJQUFJRCxVQUFVLEVBQUU7UUFDbkMsSUFBSUksV0FBVztRQUNmLElBQUlILFNBQVMsQ0FBQ1osaUJBQWlCLEVBQUVDLGFBQWEsS0FBS0wsWUFBWSxFQUFFO1VBQ2hFbUIsV0FBVyxHQUFHVixRQUFRO1FBQ3ZCLENBQUMsTUFBTSxJQUFJQyxnQkFBZ0IsRUFBRVUsdUJBQXVCLEtBQUssSUFBSSxFQUFFO1VBQzlELE1BQU1DLFlBQVksR0FBRyxTQUFTTCxTQUFTLENBQUNaLGlCQUFpQixFQUFFQyxhQUFhLEVBQUU7VUFDMUUsTUFBTWlCLFFBQVEsR0FBR0MsT0FBTyxDQUFDQyxjQUFjLENBQUNILFlBQVksQ0FBVTtVQUM5REYsV0FBVyxHQUFHRyxRQUFRLEVBQUVHLFFBQVEsQ0FBQyxDQUFDO1FBQ25DLENBQUMsTUFBTSxJQUFJZCx5QkFBeUIsS0FBSzVCLFNBQVMsRUFBRTtVQUNuRCxNQUFNMkMsVUFBVSxHQUFHVixTQUFTLENBQUNFLGlCQUFpQjtVQUM5QyxNQUFNUyxnQkFBZ0IsR0FBR2hCLHlCQUF5QixHQUFHLENBQUMsQ0FBQztVQUN2RFEsV0FBVyxHQUFHTyxVQUFVLElBQUlDLGdCQUFnQixHQUFHRCxVQUFVLENBQUM7UUFDM0QsQ0FBQyxNQUFNLElBQUlkLGNBQWMsRUFBRTtVQUMxQjtVQUNBLE1BQU1jLFVBQVUsR0FBR1YsU0FBUyxDQUFDWixpQkFBaUIsRUFBRUMsYUFBYTtVQUM3RGMsV0FBVyxHQUFHUCxjQUFjLENBQUNnQixTQUFTLENBQUNGLFVBQVUsQ0FBQztRQUNuRDtRQUNBLElBQUksQ0FBQ1AsV0FBVyxJQUFJTixtQkFBbUIsRUFBRTtVQUN4QyxNQUFNZ0IsU0FBUyxHQUFHaEIsbUJBQW1CLEdBQUdHLFNBQVMsQ0FBQ0UsaUJBQWlCLENBQUM7VUFDcEUsSUFBSVcsU0FBUyxFQUFFL0MsTUFBTSxLQUFLLENBQUMsSUFBSStDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRUMsUUFBUSxLQUFLLElBQUksRUFBRTtZQUMvRFgsV0FBVyxHQUFHVSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUV2QyxNQUFNLENBQUMsQ0FBQyxDQUFDO1VBQ3RDO1FBQ0Q7UUFDQTtRQUNBLElBQUk2QixXQUFXLEtBQUssSUFBSSxJQUFJQSxXQUFXLEtBQUtwQyxTQUFTLEVBQUU7VUFDdEQrQixPQUFPLENBQUN2QixJQUFJLENBQUMsSUFBSXdDLE1BQU0sQ0FBQztZQUFFQyxJQUFJLEVBQUVoQixTQUFTLENBQUNFLGlCQUFpQjtZQUFFWSxRQUFRLEVBQUUsSUFBSTtZQUFFRyxNQUFNLEVBQUVkO1VBQVksQ0FBQyxDQUFDLENBQUM7UUFDckc7TUFDRDtNQUNBLElBQUlSLHlCQUF5QixHQUFHLENBQUMsQ0FBQyxFQUFFO1FBQ25DO1FBQ0E7UUFDQUcsT0FBTyxHQUFHQSxPQUFPLENBQUNvQixNQUFNLENBQUMsSUFBSSxDQUFDQyw0QkFBNEIsQ0FBQ3hCLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxFQUFFSixTQUFTLENBQUMsQ0FBQztNQUNyRztNQUNBLE9BQU9PLE9BQU87SUFDZixDQUFDO0lBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0NxQiw0QkFBNEJBLENBQUNSLGdCQUFzQyxFQUFFcEIsU0FBa0MsRUFBWTtNQUNsSCxNQUFNO1FBQUU2QixNQUFNLEVBQUVDLGNBQWM7UUFBRUMsY0FBYyxFQUFFQyxjQUFjO1FBQUV0QyxVQUFVLEVBQUVjO01BQVcsQ0FBQyxHQUFHUixTQUFTO01BQ3BHLE1BQU1pQyxXQUFXLEdBQUdILGNBQWMsQ0FBQ0ksWUFBWSxDQUFDLENBQUMsQ0FBQ0MsY0FBYyxDQUFDLElBQUlILGNBQWMsRUFBRSxDQUFDO01BQ3RGLE1BQU1JLFVBQVUsR0FBR0MsMkJBQTJCLENBQUNKLFdBQVcsQ0FBQyxDQUFDSyxnQkFBZ0I7TUFDNUUsTUFBTUMsc0JBQXNCLEdBQUcvQixVQUFVLENBQUNnQyxNQUFNLENBQUMsQ0FBQ0MsR0FBRyxFQUFFaEMsU0FBUyxLQUFLO1FBQ3BFLElBQUlBLFNBQVMsQ0FBQ1osaUJBQWlCLEVBQUVDLGFBQWEsRUFBRTtVQUMvQzJDLEdBQUcsQ0FBQ3pELElBQUksQ0FBQ3lCLFNBQVMsQ0FBQ1osaUJBQWlCLENBQUNDLGFBQWEsQ0FBQztRQUNwRDtRQUNBLE9BQU8yQyxHQUFHO01BQ1gsQ0FBQyxFQUFFLEVBQWMsQ0FBQztNQUNsQixNQUFNQyxnQkFBZ0IsR0FBR04sVUFBVSxDQUFDTyxJQUFJLENBQUNILE1BQU0sQ0FBQyxDQUFDQyxHQUFHLEVBQUFHLElBQUEsS0FBd0I7UUFBQSxJQUF0QjtVQUFFekQsSUFBSSxFQUFFMEQ7UUFBUSxDQUFDLEdBQUFELElBQUE7UUFDdEUsSUFBSSxDQUFDTCxzQkFBc0IsQ0FBQ08sUUFBUSxDQUFDRCxPQUFPLENBQUMsSUFBSXpCLGdCQUFnQixDQUFDMkIsY0FBYyxDQUFDRixPQUFPLENBQUMsRUFBRTtVQUMxRkosR0FBRyxDQUFDekQsSUFBSSxDQUFDNkQsT0FBTyxDQUFDO1FBQ2xCO1FBQ0EsT0FBT0osR0FBRztNQUNYLENBQUMsRUFBRSxFQUFjLENBQUM7TUFDbEIsSUFBSUMsZ0JBQWdCLENBQUNuRSxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ2hDLE9BQU9tRSxnQkFBZ0IsQ0FBQ0YsTUFBTSxDQUFDLENBQUNqQyxPQUFpQixFQUFFeUMsR0FBVyxLQUFlO1VBQzVFO1VBQ0EsTUFBTUMsVUFBVSxHQUFHbkIsY0FBYyxDQUFDSSxZQUFZLENBQUMsQ0FBQyxDQUFDQyxjQUFjLENBQUMsSUFBSUgsY0FBYyxJQUFJZ0IsR0FBRyxFQUFFLENBQUM7VUFDNUYsSUFBSUUsWUFBWSxDQUFDQyxvQkFBb0IsQ0FBQ0YsVUFBVSxFQUFFekUsU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ25FK0IsT0FBTyxDQUFDdkIsSUFBSSxDQUFDLElBQUl3QyxNQUFNLENBQUM7Y0FBRUMsSUFBSSxFQUFFdUIsR0FBRztjQUFFekIsUUFBUSxFQUFFLElBQUk7Y0FBRUcsTUFBTSxFQUFFTixnQkFBZ0IsQ0FBQzRCLEdBQUc7WUFBRSxDQUFDLENBQUMsQ0FBQztVQUN2RjtVQUNBLE9BQU96QyxPQUFPO1FBQ2YsQ0FBQyxFQUFFLEVBQUUsQ0FBQztNQUNQO01BQ0EsT0FBTyxFQUFFO0lBQ1YsQ0FBQztJQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0M2QyxlQUFlLEVBQUUsZUFBQUEsQ0FBZ0JwRixLQUFZLEVBQUVxRixTQUFvQixFQUFFQyxNQUFpQyxFQUFFO01BQ3ZHO01BQ0E7TUFDQSxJQUFJQSxNQUFNLENBQUNwRixLQUFLLEtBQUssRUFBRSxFQUFFO1FBQ3hCO01BQ0Q7TUFFQSxJQUFJb0YsTUFBTSxDQUFDQyxnQkFBZ0IsRUFBRTtRQUM1QixNQUFNQyxTQUFTLEdBQUdILFNBQVMsQ0FBQ0ksWUFBWSxDQUFDLENBQUM7UUFDMUMsTUFBTXJFLE9BQU8sR0FBR2lFLFNBQVMsQ0FBQ0ssVUFBVSxDQUFDLENBQXFCO1FBQzFELE1BQU1DLGVBQWUsR0FBR0gsU0FBUyxDQUFDSSxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3RELE1BQU1DLFNBQVMsR0FBR0YsZUFBZSxJQUFJQSxlQUFlLENBQUNHLEtBQUssQ0FBQyxDQUFDO1FBQzVEO1FBQ0E7UUFDQSxNQUFNQyxpQkFBaUIsQ0FBQ0MsZUFBZSxDQUFDWCxTQUFTLEVBQUVHLFNBQVMsRUFBRUssU0FBUyxDQUFDO1FBQ3hFLE1BQU1JLFNBQVMsR0FBRzdFLE9BQU8sQ0FBQzZFLFNBQVM7UUFDbkMsTUFBTUMsV0FBVyxHQUFHWixNQUFNLENBQUNwRixLQUFLLEVBQUVpRyxRQUFRLENBQUMsQ0FBQyxDQUFDNUYsTUFBTSxJQUFJLENBQUM7UUFDeEQsTUFBTTZGLGVBQWUsR0FBR2hGLE9BQU8sQ0FBQ2lGLHdCQUF3QjtRQUN4RCxJQUFJRCxlQUFlLEtBQUssRUFBRSxFQUFFO1VBQzNCO1VBQ0E7VUFDQWQsTUFBTSxDQUFDQyxnQkFBZ0IsR0FBRyxLQUFLO1FBQ2hDLENBQUMsTUFBTSxJQUFJVSxTQUFTLEtBQUt6RixTQUFTLElBQUkwRixXQUFXLEdBQUdELFNBQVMsRUFBRTtVQUM5RDtVQUNBO1FBQ0Q7TUFDRDtNQUNBLE9BQU9wRyxpQkFBaUIsQ0FBQ3VGLGVBQWUsQ0FBQ3BGLEtBQUssRUFBRXFGLFNBQVMsRUFBRUMsTUFBTSxDQUFDO0lBQ25FLENBQUM7SUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0lBQ0NnQixhQUFhLEVBQUUsU0FBQUEsQ0FBVXRHLEtBQW1CLEVBQXlCO01BQ3BFLElBQUl1RyxZQUFZO01BQ2hCLElBQUl2RyxLQUFLLEVBQUVJLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFO1FBQ3pDLE9BQU9KLEtBQUssRUFBRTtVQUNiLElBQUlBLEtBQUssRUFBRUksR0FBRyxDQUFlLHNDQUFzQyxDQUFDLEVBQUU7WUFDckVtRyxZQUFZLEdBQUd2RyxLQUFLO1lBQ3BCO1VBQ0Q7VUFDQUEsS0FBSyxHQUFHQSxLQUFLLEVBQUV3RyxTQUFTLENBQUMsQ0FBcUI7UUFDL0M7UUFDQSxJQUFJRCxZQUFZLEVBQUVFLFVBQVUsQ0FBQyxDQUFDLEVBQUVyRyxHQUFHLENBQUMsa0NBQWtDLENBQUMsRUFBRTtVQUN4RSxPQUFPbUcsWUFBWSxDQUFDRSxVQUFVLENBQUMsQ0FBQztRQUNqQztNQUNEO01BQ0EsT0FBT2pHLFNBQVM7SUFDakIsQ0FBQztJQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDa0csY0FBYyxFQUFFLGVBQUFBLENBQ2YxRyxLQUFtQixFQUNuQnFGLFNBQW9CLEVBQ3BCTCxHQUFXLEVBQ1gyQixZQUFvQixFQUNwQkMsYUFBcUIsRUFDckJ2RSxjQUFtQyxFQUNuQ3dFLGVBQStCLEVBQy9CQyxtQkFBMkIsRUFDM0IxRCxnQkFBcUMsRUFDckMyRCxPQUFnQixFQUNoQkMsS0FBYyxFQUNkQyxZQUFxQixFQUNwQjtNQUNEO01BQ0E7TUFDQTtNQUNBOztNQUVBLElBQUk3RixPQUFPLEdBQUdwQixLQUFLLEVBQUUwRixVQUFVLENBQUMsQ0FBaUI7O01BRWpEO01BQ0EsSUFBSSxDQUFDdEUsT0FBTyxJQUFLMkYsT0FBTyxFQUFnQkcsVUFBVSxDQUFDLENBQUMsQ0FBQ3BDLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRTtRQUM3RTFELE9BQU8sR0FBRztVQUNUK0YseUJBQXlCLEVBQUU7UUFDNUIsQ0FBQztNQUNGO01BRUEsSUFBSS9GLE9BQU8sRUFBRStGLHlCQUF5QixLQUFLLElBQUksSUFBSS9GLE9BQU8sRUFBRWdHLGFBQWEsS0FBSyxJQUFJLEVBQUU7UUFDbkYsTUFBTUMsU0FBUyxHQUFHaEMsU0FBUyxDQUFDaUMsUUFBUSxDQUFDLENBQTJCO1FBQ2hFLE1BQU1DLEtBQUssR0FBR0MsU0FBUyxDQUFDQyxvQkFBb0IsQ0FBQ3BDLFNBQStCLENBQUM7UUFDN0U7UUFDQTtRQUNBLElBQUksQ0FBQ2dDLFNBQVMsSUFBSSxDQUFDRSxLQUFLLEVBQUU7VUFDekIsT0FBTzFILGlCQUFpQixDQUFDNkcsY0FBYyxDQUN0QzFHLEtBQUssRUFDTHFGLFNBQVMsRUFDVEwsR0FBRyxFQUNIMkIsWUFBWSxFQUNaQyxhQUFhLEVBQ2J2RSxjQUFjLEVBQ2Q3QixTQUFTLEVBQ1RBLFNBQVMsRUFDVDRDLGdCQUFnQixFQUNoQjJELE9BQU8sRUFDUEMsS0FBSyxFQUNMQyxZQUNELENBQUM7UUFDRjtRQUNBLE1BQU1TLFNBQVMsR0FBR0wsU0FBUyxHQUN4QkEsU0FBUyxDQUFDbkQsWUFBWSxDQUFDLENBQUMsR0FDeEJ5RCxXQUFXLENBQUNDLGVBQWUsQ0FBQ3ZDLFNBQStCLENBQUMsQ0FDM0RpQyxRQUFRLENBQUMsQ0FBQyxDQUNWcEQsWUFBWSxDQUFDLENBQUM7UUFDbEIsTUFBTS9CLGdCQUFnQixHQUFHa0QsU0FBUyxDQUFDSyxVQUFVLENBQUMsQ0FBcUI7UUFDbkUsTUFBTXRELHlCQUF5QixHQUFHZ0IsZ0JBQWdCLEdBQUdqQixnQkFBZ0IsQ0FBQzBGLGtCQUFrQixDQUFDO1FBQ3pGLE1BQU1DLFlBQVksR0FBRzNGLGdCQUFnQixDQUFDMkYsWUFBWTtRQUNsRCxNQUFNQyx1QkFBdUIsR0FBRzVGLGdCQUFnQixFQUFFNEYsdUJBQXVCO1FBQ3pFLElBQUlDLFlBQW9CO1FBRXhCLElBQUk7VUFDSDtVQUNBLE1BQU14RyxhQUFhLEdBQUcsTUFBTWtHLFNBQVMsQ0FBQ08sb0JBQW9CLENBQUNILFlBQVksRUFBRSxJQUFJLEVBQUV6RixjQUFjLENBQUM7VUFDOUYsTUFBTTZGLFNBQVMsR0FBRyxJQUFJLENBQUM1QixhQUFhLENBQUN0RyxLQUFLLENBQUM7VUFDM0MsSUFBSW1JLGdCQUErRDtVQUNuRSxJQUFJRCxTQUFTLEVBQUU7WUFDZCxNQUFNRSxXQUE4QixHQUFHLE1BQU1DLFNBQVMsQ0FBQ0MscUJBQXFCLENBQUNKLFNBQVMsQ0FBQztZQUN2RkMsZ0JBQWdCLEdBQUdDLFdBQVcsQ0FBQ3pHLE1BQU07VUFDdEM7VUFDQSxNQUFNRixZQUFZLEdBQUdpRyxTQUFTLENBQUNyRSxTQUFTLENBQUMsR0FBR3lFLFlBQVksYUFBYSxDQUFXO1VBQ2hGO1VBQ0EsTUFBTTlGLFNBQVMsR0FBR1IsYUFBYSxDQUFDN0IsTUFBTSxDQUFDZ0YsSUFBSSxDQUFDbkQsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFDOUQsTUFBTStHLG1CQUFtQixHQUFHLElBQUksQ0FBQ2hILHNCQUFzQixDQUFDUyxTQUFTLEVBQUVQLFlBQVksQ0FBQztVQUNoRixNQUFNUSxpQkFBaUIsR0FBR3NHLG1CQUFtQixHQUFHLENBQUMsQ0FBQyxFQUFFNUYsaUJBQWlCO1VBQ3JFLElBQUksQ0FBQ1YsaUJBQWlCLEVBQUU7WUFDdkIsTUFBTXVHLEtBQUssQ0FBQywwQ0FBMEMvRyxZQUFZLEVBQUUsQ0FBQztVQUN0RTtVQUNBO1VBQ0EsTUFBTXFDLGNBQWMsR0FBRzlCLFNBQVMsQ0FBQzZCLE1BQU07VUFDdkMsTUFBTTRFLGNBQWMsR0FBRzNFLGNBQWMsQ0FDbkNJLFlBQVksQ0FBQyxDQUFDLENBQ2RiLFNBQVMsQ0FBQyxJQUFJckIsU0FBUyxDQUFDK0IsY0FBYyxJQUFJOUIsaUJBQWlCLHNDQUFzQyxDQUFDO1VBQ3BHLElBQUl3RyxjQUFjLElBQUlBLGNBQWMsQ0FBQ0MsS0FBSyxFQUFFO1lBQzNDVixZQUFZLEdBQUdTLGNBQWMsQ0FBQ0MsS0FBSztZQUNuQztZQUNBLE1BQU1uRyxPQUFPLEdBQUcsSUFBSSxDQUFDUixVQUFVLENBQzlCQyxTQUFTLEVBQ1RQLFlBQVksRUFDWlEsaUJBQWlCLEVBQ2pCK0MsR0FBRyxFQUNIN0MsZ0JBQWdCLEVBQ2hCQyx5QkFBeUIsRUFDekJDLGNBQWMsRUFDZDhGLGdCQUNELENBQUM7WUFDRCxNQUFNUSxXQUFXLEdBQUc3RSxjQUFjLENBQUM4RSxRQUFRLENBQUMsSUFBSTVHLFNBQVMsQ0FBQytCLGNBQWMsRUFBRSxFQUFFdkQsU0FBUyxFQUFFQSxTQUFTLEVBQUUrQixPQUFPLEVBQUU7Y0FDMUdzRyxPQUFPLEVBQUViO1lBQ1YsQ0FBQyxDQUFDO1lBQ0Y7WUFDQSxNQUFNYyxRQUFRLEdBQUcsTUFBTUgsV0FBVyxDQUFDSSxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN4RCxPQUFPRCxRQUFRLENBQUN2SSxNQUFNLEdBQUd1SSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUN6RixTQUFTLENBQUMyRSxZQUFZLENBQUMsR0FBR3hILFNBQVM7VUFDekUsQ0FBQyxNQUFNLElBQUk2QixjQUFjLEtBQUs3QixTQUFTLElBQUl1SCx1QkFBdUIsRUFBRTtZQUNuRSxNQUFNaUIsU0FBUyxHQUFHakIsdUJBQXVCLENBQUNrQixXQUFXLENBQUMsR0FBRyxDQUFDO1lBQzFELE1BQU1DLGNBQWMsR0FBR0YsU0FBUyxHQUFHLENBQUMsR0FBR2pCLHVCQUF1QixDQUFDb0IsU0FBUyxDQUFDLENBQUMsRUFBRUgsU0FBUyxDQUFDLEdBQUdqQix1QkFBdUI7WUFDaEgsTUFBTXFCLGtCQUFrQixHQUFHekIsV0FBVyxDQUFDQyxlQUFlLENBQUN2QyxTQUErQixDQUFDLENBQUNnRSxxQkFBcUIsQ0FBQyxDQUFDO1lBQy9HLE1BQU1ELGtCQUFrQixDQUFDRSxrQkFBa0IsQ0FBQyxDQUFDSixjQUFjLENBQUMsRUFBRTdHLGNBQWMsQ0FBQztZQUM3RWtILEdBQUcsQ0FBQ0MsT0FBTyxDQUNWLG1FQUFtRXZILGlCQUFpQix5REFDckYsQ0FBQztZQUNELE9BQU96QixTQUFTO1VBQ2pCLENBQUMsTUFBTTtZQUNOO1lBQ0EsTUFBTWlKLGNBQWMsR0FBRy9CLFNBQVMsRUFBRXJFLFNBQVMsQ0FDMUMsR0FBR2xCLGdCQUFnQixDQUFDMkYsWUFBWSw0Q0FDakMsQ0FBQyxFQUFFWSxLQUFLO1lBQ1IsSUFBSWUsY0FBYyxFQUFFO2NBQ25CLE1BQU1DLGtCQUFrQixHQUFHdkgsZ0JBQWdCLENBQUMyRixZQUFZLENBQUM2QixPQUFPLENBQUNsSSxZQUFZLEVBQUVnSSxjQUFjLENBQUM7Y0FDOUYsTUFBTUcsY0FBYyxHQUFHbEMsU0FBUyxDQUFDckUsU0FBUyxDQUFDLEdBQUdxRyxrQkFBa0IsYUFBYSxDQUFDO2NBQzlFLE1BQU1HLHlCQUF5QixHQUFHbkMsU0FBUyxFQUFFckUsU0FBUyxDQUFDLEdBQUdxRyxrQkFBa0Isc0NBQXNDLENBQUMsRUFDaEhoQixLQUFLO2NBQ1IsTUFBTW5HLE9BQU8sR0FBRyxFQUFFO2NBQ2xCQSxPQUFPLENBQUN2QixJQUFJLENBQUMsSUFBSXdDLE1BQU0sQ0FBQztnQkFBRUMsSUFBSSxFQUFFbUcsY0FBYztnQkFBRXJHLFFBQVEsRUFBRSxJQUFJO2dCQUFFRyxNQUFNLEVBQUVzQjtjQUFJLENBQUMsQ0FBQyxDQUFDO2NBQy9FLE1BQU0yRCxXQUFXLEdBQUc3RSxjQUFjLENBQUM4RSxRQUFRLENBQUMsSUFBSTVHLFNBQVMsQ0FBQytCLGNBQWMsRUFBRSxFQUFFdkQsU0FBUyxFQUFFQSxTQUFTLEVBQUUrQixPQUFPLEVBQUU7Z0JBQzFHc0csT0FBTyxFQUFFLEdBQUdlLGNBQWMsSUFBSUMseUJBQXlCO2NBQ3hELENBQUMsQ0FBQztjQUNGLE1BQU1mLFFBQVEsR0FBRyxNQUFNSCxXQUFXLENBQUNJLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2NBQ3hELElBQUlELFFBQVEsQ0FBQ3ZJLE1BQU0sRUFBRTtnQkFDcEIsT0FBT3VJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ3pGLFNBQVMsQ0FBQ3dHLHlCQUF5QixDQUFDO2NBQ3hEO1lBQ0Q7WUFDQU4sR0FBRyxDQUFDTyxLQUFLLENBQUMsdUJBQXVCN0gsaUJBQWlCLGlCQUFpQixDQUFDO1lBQ3BFLE9BQU96QixTQUFTO1VBQ2pCO1FBQ0QsQ0FBQyxDQUFDLE9BQU9zSixLQUFLLEVBQUU7VUFDZixNQUFNQyxNQUFNLEdBQUdELEtBQUssR0FBSUEsS0FBSyxDQUFvQkMsTUFBTSxHQUFHdkosU0FBUztVQUNuRSxNQUFNd0osT0FBTyxHQUFHRixLQUFLLFlBQVl0QixLQUFLLEdBQUdzQixLQUFLLENBQUNFLE9BQU8sR0FBR0MsTUFBTSxDQUFDSCxLQUFLLENBQUM7VUFDdEUsTUFBTUksR0FBRyxHQUFHSCxNQUFNLEtBQUssR0FBRyxHQUFHLHVCQUF1QkEsTUFBTSxnQ0FBZ0NqQyxZQUFZLEVBQUUsR0FBR2tDLE9BQU87VUFDbEhULEdBQUcsQ0FBQ08sS0FBSyxDQUFDSSxHQUFHLENBQUM7UUFDZjtNQUNEO01BQ0EsT0FBTzFKLFNBQVM7SUFDakI7RUFDRCxDQUFDLENBQUM7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
@@ -23,6 +23,7 @@ import CommonHelper from "../CommonHelper";
23
23
  import type FilterBar from "../controls/FilterBar";
24
24
  import type FilterBarAPI from "../filterBar/FilterBarAPI";
25
25
  import type { ConditionPayloadMap, ConditionPayloadType, ExternalStateType } from "../valuehelp/ValueHelpDelegate";
26
+ import ValueHelpDelegate from "../valuehelp/ValueHelpDelegate";
26
27
 
27
28
  export type FieldPayload = {
28
29
  retrieveTextFromValueList?: boolean;
@@ -189,7 +190,6 @@ export default Object.assign({}, FieldBaseDelegate, {
189
190
  const sourcePath = parameter.LocalDataProperty?.$PropertyPath;
190
191
  filterValue = bindingContext.getObject(sourcePath);
191
192
  }
192
-
193
193
  if (!filterValue && filterBarConditions) {
194
194
  const condition = filterBarConditions?.[parameter.ValueListProperty];
195
195
  if (condition?.length === 1 && condition[0]?.operator === "EQ") {
@@ -251,7 +251,7 @@ export default Object.assign({}, FieldBaseDelegate, {
251
251
  * @param config Configuration Object
252
252
  * @returns Object containing description, key, and payload. If it is not available right now (must be requested), a <code>Promise</code> is returned
253
253
  */
254
- getItemForValue: function (field: Field, valueHelp: ValueHelp, config: ItemForValueConfiguration) {
254
+ getItemForValue: async function (field: Field, valueHelp: ValueHelp, config: ItemForValueConfiguration) {
255
255
  //BCP: 2270162887 . The MDC field should not try to get the item when the field is emptied
256
256
  // JIRA: FIORITECHP1-25361 - Improve the type-ahead behavior for missinng text annotation or constraints violations of the existing text annotation
257
257
  if (config.value === "") {
@@ -259,10 +259,16 @@ export default Object.assign({}, FieldBaseDelegate, {
259
259
  }
260
260
 
261
261
  if (config.checkDescription) {
262
- const valuehelpPayload = valueHelp.getPayload() as ValueHelpPayload;
263
- const descriptionPath = valuehelpPayload.valueHelpDescriptionPath;
264
- const maxLength = valuehelpPayload?.maxLength;
265
- const valueLength = config.value !== null && config.value !== undefined ? config.value.toString().length : 0;
262
+ const container = valueHelp.getTypeahead();
263
+ const payload = valueHelp.getPayload() as ValueHelpPayload;
264
+ const selectedContent = container.getSelectedContent();
265
+ const contentId = selectedContent && selectedContent.getId();
266
+ // In cases where getItemForValue is called before showValueList, the description may not be available.
267
+ // Therefore, this retrieveContent method is used to update the description.
268
+ await ValueHelpDelegate.retrieveContent(valueHelp, container, contentId);
269
+ const maxLength = payload.maxLength;
270
+ const valueLength = config.value?.toString().length || 0;
271
+ const descriptionPath = payload.valueHelpDescriptionPath;
266
272
  if (descriptionPath === "") {
267
273
  // In case the property value help collection has no text annotation (descriptionPath is empty) the description check shouldn´t occur.
268
274
  // In such a case the method getDescription will be called by MDC and within this method a SideEffect is requested to retrieve the text from the text property of the main entity
@@ -375,14 +381,12 @@ export default Object.assign({}, FieldBaseDelegate, {
375
381
  try {
376
382
  /* Request value help metadata */
377
383
  const valueListInfo = await metaModel.requestValueListInfo(propertyPath, true, bindingContext);
378
-
379
384
  const filterBar = this._getFilterBar(field);
380
385
  let filterConditions: Record<string, ConditionObject[]> | undefined;
381
386
  if (filterBar) {
382
387
  const filterState: ExternalStateType = await StateUtil.retrieveExternalState(filterBar);
383
388
  filterConditions = filterState.filter;
384
389
  }
385
-
386
390
  const propertyName = metaModel.getObject(`${propertyPath}@sapui.name`) as string;
387
391
  // take the first value list annotation - alternatively take the one without qualifier or the first one
388
392
  const valueList = valueListInfo[Object.keys(valueListInfo)[0]];
@@ -8,7 +8,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/CommonUt
8
8
  /**
9
9
  * Static class used by "sap.ui.mdc.Field" during runtime
10
10
  * @private
11
- * @experimental This module is only for internal/experimental use!
12
11
  */
13
12
  const FieldRuntime = {
14
13
  uploadPromises: {},
@@ -186,4 +185,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/CommonUt
186
185
  ObjectPath.set("sap.fe.macros.field.FieldRuntime", FieldRuntime);
187
186
  return FieldRuntime;
188
187
  }, false);
189
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWVsZFJ1bnRpbWUiLCJ1cGxvYWRQcm9taXNlcyIsImNyZWF0aW5nSW5hY3RpdmVSb3ciLCJpc0RyYWZ0SW5kaWNhdG9yVmlzaWJsZSIsInNQcm9wZXJ0eVBhdGgiLCJzU2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvciIsIkhhc0RyYWZ0RW50aXR5IiwiSXNBY3RpdmVFbnRpdHkiLCJoaWRlRHJhZnRJbmZvIiwidW5kZWZpbmVkIiwib25WYWxpZGF0ZUZpZWxkR3JvdXAiLCJvRXZlbnQiLCJvU291cmNlRmllbGQiLCJnZXRTb3VyY2UiLCJ2aWV3IiwiQ29tbW9uVXRpbHMiLCJnZXRUYXJnZXRWaWV3IiwiY29udHJvbGxlciIsImdldENvbnRyb2xsZXIiLCJvRkVDb250cm9sbGVyIiwiRmllbGRSdW50aW1lSGVscGVyIiwiZ2V0RXh0ZW5zaW9uQ29udHJvbGxlciIsIl9zaWRlRWZmZWN0cyIsImhhbmRsZUZpZWxkR3JvdXBDaGFuZ2UiLCJfZm5GaXhIYXNoUXVlcnlTdHJpbmciLCJzQ3VycmVudEhhc2giLCJpbmNsdWRlcyIsInNwbGl0IiwicmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCIsInNQcm9wZXJ0eVZhbHVlIiwic1Byb3BlcnR5RnVsbFBhdGgiLCJzRGlzcGxheUZvcm1hdCIsInNUZXh0UHJvcGVydHkiLCJvTWV0YU1vZGVsIiwic1Byb3BlcnR5TmFtZSIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiQ29tbW9uSGVscGVyIiwiZ2V0T2JqZWN0IiwicmVxdWVzdFZhbHVlTGlzdEluZm8iLCJ0aGVuIiwibVZhbHVlTGlzdEluZm8iLCJvVmFsdWVMaXN0SW5mbyIsIk9iamVjdCIsImtleXMiLCJvVmFsdWVMaXN0TW9kZWwiLCIkbW9kZWwiLCJvTWV0YU1vZGVsVmFsdWVMaXN0Iiwib1BhcmFtV2l0aEtleSIsIlBhcmFtZXRlcnMiLCJmaW5kIiwib1BhcmFtZXRlciIsIkxvY2FsRGF0YVByb3BlcnR5IiwiJFByb3BlcnR5UGF0aCIsIlZhbHVlTGlzdFByb3BlcnR5IiwiRXJyb3IiLCJvVGV4dEFubm90YXRpb24iLCJDb2xsZWN0aW9uUGF0aCIsIiRQYXRoIiwib0ZpbHRlciIsIkZpbHRlciIsInBhdGgiLCJvcGVyYXRvciIsInZhbHVlMSIsIm9MaXN0QmluZGluZyIsImJpbmRMaXN0IiwiJHNlbGVjdCIsInJlcXVlc3RDb250ZXh0cyIsImFDb250ZXh0cyIsInNEZXNjcmlwdGlvbiIsIkxpYnJhcnkiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsImdldFRleHQiLCJjYXRjaCIsIm9FcnJvciIsImVycm9yT2JqIiwic01zZyIsInN0YXR1cyIsIm1lc3NhZ2UiLCJMb2ciLCJlcnJvciIsImRpc3BsYXlBZ2dyZWdhdGVEZXRhaWxzIiwiZXZlbnQiLCJhZ2dyZWdhdGVkUHJvcGVydHlQYXRoIiwibGluayIsImFuYWx5dGljYWxUYWJsZSIsIkZQTUhlbHBlciIsImdldE1kY1RhYmxlIiwicm93Q29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0IiwidGFibGVSb3dCaW5kaW5nIiwiZ2V0QmluZGluZyIsInJvd0NvbnRleHREYXRhIiwicm93U3BlY2lmaWNGaWx0ZXIiLCJyb3dGaWx0ZXIiLCJnZXRGaWx0ZXIiLCJwdXNoIiwiYWxsRmlsdGVycyIsImNvbmNhdCIsImdldEZpbHRlcnMiLCJhZ2dyZWdhdGlvbiIsImdldEFnZ3JlZ2F0aW9uIiwidW5pdE9yQ3VycmVuY3lOYW1lIiwiYWdncmVnYXRlIiwidW5pdCIsImdyb3VwIiwiZ3JhbmRUb3RhbCIsInN1YnRvdGFscyIsInRhYmxlSXRlbSIsImdldERlcGVuZGVudHMiLCJjbG9uZSIsImN1cnJlbmN5T3JRdWFudGl0eUVuYWJsZWRMYXlvdXQiLCJIQm94IiwicmVuZGVyVHlwZSIsImp1c3RpZnlDb250ZW50IiwiaXRlbXMiLCJhZ2dyZWdhdGlvblBhcmFtZXRlcnMiLCJzZWFyY2giLCJvSXRlbXNCaW5kaW5nSW5mbyIsImdldFJlc29sdmVkUGF0aCIsImZpbHRlcnMiLCJwYXJhbWV0ZXJzIiwiJCRhZ2dyZWdhdGlvbiIsInNvcnRlciIsIlNvcnRlciIsImlzUG9wb3ZlckZvckdyYW5kVG90YWwiLCJwb3BvdmVyIiwiVXRpbCIsImNyZWF0ZU9yVXBkYXRlTXVsdGlVbml0UG9wb3ZlciIsImdldElkIiwiY29udHJvbCIsIml0ZW1zQmluZGluZ0luZm8iLCJsaXN0SXRlbUNvbnRlbnRUZW1wbGF0ZSIsImFkZERlcGVuZGVudCIsImZuT25DbG9zZSIsInJlbW92ZURlcGVuZGVudCIsImRldGFjaEV2ZW50IiwiZGVzdHJveSIsImF0dGFjaEV2ZW50Iiwib3BlbkJ5IiwiT2JqZWN0UGF0aCIsInNldCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRmllbGRSdW50aW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IE9iamVjdFBhdGggZnJvbSBcInNhcC9iYXNlL3V0aWwvT2JqZWN0UGF0aFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IEZQTUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9GUE1IZWxwZXJcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7ICRIQm94U2V0dGluZ3MgfSBmcm9tIFwic2FwL20vSEJveFwiO1xuaW1wb3J0IEhCb3ggZnJvbSBcInNhcC9tL0hCb3hcIjtcbmltcG9ydCB0eXBlIExpbmsgZnJvbSBcInNhcC9tL0xpbmtcIjtcbmltcG9ydCB0eXBlIFJlc3BvbnNpdmVQb3BvdmVyIGZyb20gXCJzYXAvbS9SZXNwb25zaXZlUG9wb3ZlclwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBVdGlsIH0gZnJvbSBcInNhcC9tL3RhYmxlL1V0aWxcIjtcbmltcG9ydCB0eXBlIEV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCBGaWx0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJcIjtcbmltcG9ydCBTb3J0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9Tb3J0ZXJcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IEZpZWxkUnVudGltZUhlbHBlciBmcm9tIFwiLi9GaWVsZFJ1bnRpbWVIZWxwZXJcIjtcblxuLyoqXG4gKiBTdGF0aWMgY2xhc3MgdXNlZCBieSBcInNhcC51aS5tZGMuRmllbGRcIiBkdXJpbmcgcnVudGltZVxuICogQHByaXZhdGVcbiAqIEBleHBlcmltZW50YWwgVGhpcyBtb2R1bGUgaXMgb25seSBmb3IgaW50ZXJuYWwvZXhwZXJpbWVudGFsIHVzZSFcbiAqL1xuY29uc3QgRmllbGRSdW50aW1lID0ge1xuXHR1cGxvYWRQcm9taXNlczoge30gYXMgUmVjb3JkPHN0cmluZywgeyByZXNvbHZlOiBGdW5jdGlvbjsgcmVqZWN0OiBGdW5jdGlvbiB9Pixcblx0Y3JlYXRpbmdJbmFjdGl2ZVJvdzogZmFsc2UsXG5cblx0LyoqXG5cdCAqIFRoaXMgaXMgYSBmb3JtYXR0ZXIgaW4gZGlzZ3Vpc2UuXG5cdCAqIEBwYXJhbSBzUHJvcGVydHlQYXRoXG5cdCAqIEBwYXJhbSBzU2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvclxuXHQgKiBAcGFyYW0gSGFzRHJhZnRFbnRpdHlcblx0ICogQHBhcmFtIElzQWN0aXZlRW50aXR5XG5cdCAqIEBwYXJhbSBoaWRlRHJhZnRJbmZvXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGRyYWZ0IGluZGljYXRvciBzaG91bGQgYmUgZGlzcGxheWVkLlxuXHQgKi9cblx0aXNEcmFmdEluZGljYXRvclZpc2libGU6IGZ1bmN0aW9uIChcblx0XHRzUHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdFx0c1NlbWFudGljS2V5SGFzRHJhZnRJbmRpY2F0b3I6IHN0cmluZyxcblx0XHRIYXNEcmFmdEVudGl0eT86IGJvb2xlYW4sXG5cdFx0SXNBY3RpdmVFbnRpdHk/OiBib29sZWFuLFxuXHRcdGhpZGVEcmFmdEluZm8/OiBib29sZWFuXG5cdCk6IGJvb2xlYW4ge1xuXHRcdGlmIChJc0FjdGl2ZUVudGl0eSAhPT0gdW5kZWZpbmVkICYmIEhhc0RyYWZ0RW50aXR5ICE9PSB1bmRlZmluZWQgJiYgKCFJc0FjdGl2ZUVudGl0eSB8fCBIYXNEcmFmdEVudGl0eSkgJiYgIWhpZGVEcmFmdEluZm8pIHtcblx0XHRcdHJldHVybiBzUHJvcGVydHlQYXRoID09PSBzU2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvcjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogSGFuZGxlciBmb3IgdGhlIHZhbGlkYXRlRmllbGRHcm91cCBldmVudC5cblx0ICogQHBhcmFtIG9FdmVudCBUaGUgZXZlbnQgb2JqZWN0IHBhc3NlZCBieSB0aGUgdmFsaWRhdGVGaWVsZEdyb3VwIGV2ZW50XG5cdCAqL1xuXHRvblZhbGlkYXRlRmllbGRHcm91cDogZnVuY3Rpb24gKG9FdmVudDogQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCk6IHZvaWQge1xuXHRcdGNvbnN0IG9Tb3VyY2VGaWVsZCA9IG9FdmVudC5nZXRTb3VyY2UoKSBhcyBNYW5hZ2VkT2JqZWN0O1xuXHRcdGNvbnN0IHZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KG9Tb3VyY2VGaWVsZCksXG5cdFx0XHRjb250cm9sbGVyID0gdmlldy5nZXRDb250cm9sbGVyKCk7XG5cblx0XHRjb25zdCBvRkVDb250cm9sbGVyID0gRmllbGRSdW50aW1lSGVscGVyLmdldEV4dGVuc2lvbkNvbnRyb2xsZXIoY29udHJvbGxlcik7XG5cdFx0b0ZFQ29udHJvbGxlci5fc2lkZUVmZmVjdHMuaGFuZGxlRmllbGRHcm91cENoYW5nZShvRXZlbnQpO1xuXHR9LFxuXG5cdF9mbkZpeEhhc2hRdWVyeVN0cmluZzogZnVuY3Rpb24gKHNDdXJyZW50SGFzaDogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRpZiAoc0N1cnJlbnRIYXNoPy5pbmNsdWRlcyhcIj9cIikpIHtcblx0XHRcdC8vIHNDdXJyZW50SGFzaCBjYW4gY29udGFpbiBxdWVyeSBzdHJpbmcsIGN1dCBpdCBvZmYhXG5cdFx0XHRzQ3VycmVudEhhc2ggPSBzQ3VycmVudEhhc2guc3BsaXQoXCI/XCIpWzBdO1xuXHRcdH1cblx0XHRyZXR1cm4gc0N1cnJlbnRIYXNoO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gcmV0cmlldmUgdGV4dCBmcm9tIHRoZSB2YWx1ZSBsaXN0IGZvciBEYXRhRmllbGQuXG5cdCAqIFRoaXMgaXMgYSBmb3JtYXR0ZXIgaW4gZGlzZ3Vpc2UuXG5cdCAqIEBwYXJhbSBzUHJvcGVydHlWYWx1ZSBUaGUgcHJvcGVydHkgdmFsdWUgb2YgdGhlIGRhdGEgZmllbGQuXG5cdCAqIEBwYXJhbSBzUHJvcGVydHlGdWxsUGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSBwcm9wZXJ0eSBpbiB0aGUgbWV0YWRhdGEuXG5cdCAqIEBwYXJhbSBzRGlzcGxheUZvcm1hdCBUaGUgZGlzcGxheSBmb3JtYXQgZm9yIHRoZSBkYXRhIGZpZWxkLlxuXHQgKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIHZhbHVlIGJhc2VkIG9uIHRoZSBkaXNwbGF5IGZvcm1hdC5cblx0ICovXG5cdHJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3Q6IGFzeW5jIGZ1bmN0aW9uIChcblx0XHR0aGlzOiBDb250cm9sLFxuXHRcdHNQcm9wZXJ0eVZhbHVlOiBzdHJpbmcsXG5cdFx0c1Byb3BlcnR5RnVsbFBhdGg6IHN0cmluZyxcblx0XHRzRGlzcGxheUZvcm1hdDogc3RyaW5nXG5cdCk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0bGV0IHNUZXh0UHJvcGVydHk6IHN0cmluZztcblx0XHRsZXQgb01ldGFNb2RlbDtcblx0XHRsZXQgc1Byb3BlcnR5TmFtZTogc3RyaW5nO1xuXHRcdGlmIChzUHJvcGVydHlWYWx1ZSkge1xuXHRcdFx0b01ldGFNb2RlbCA9ICh0aGlzLmdldE1vZGVsKCk/LmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsKSB8fCBDb21tb25IZWxwZXIuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRzUHJvcGVydHlOYW1lID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c1Byb3BlcnR5RnVsbFBhdGh9QHNhcHVpLm5hbWVgKTtcblx0XHRcdHJldHVybiBvTWV0YU1vZGVsXG5cdFx0XHRcdC5yZXF1ZXN0VmFsdWVMaXN0SW5mbyhzUHJvcGVydHlGdWxsUGF0aCwgdHJ1ZSlcblx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKG1WYWx1ZUxpc3RJbmZvKSB7XG5cdFx0XHRcdFx0Ly8gdGFrZSB0aGUgXCJcIiBvbmUgaWYgZXhpc3RzLCBvdGhlcndpc2UgdGFrZSB0aGUgZmlyc3Qgb25lIGluIHRoZSBvYmplY3QgVE9ETzogdG8gYmUgZGlzY3Vzc2VkXG5cdFx0XHRcdFx0Y29uc3Qgb1ZhbHVlTGlzdEluZm8gPSBtVmFsdWVMaXN0SW5mb1ttVmFsdWVMaXN0SW5mb1tcIlwiXSA/IFwiXCIgOiBPYmplY3Qua2V5cyhtVmFsdWVMaXN0SW5mbylbMF1dO1xuXHRcdFx0XHRcdGNvbnN0IG9WYWx1ZUxpc3RNb2RlbCA9IG9WYWx1ZUxpc3RJbmZvLiRtb2RlbDtcblx0XHRcdFx0XHRjb25zdCBvTWV0YU1vZGVsVmFsdWVMaXN0ID0gb1ZhbHVlTGlzdE1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0XHRcdGNvbnN0IG9QYXJhbVdpdGhLZXkgPSBvVmFsdWVMaXN0SW5mby5QYXJhbWV0ZXJzLmZpbmQoZnVuY3Rpb24gKG9QYXJhbWV0ZXI6IHtcblx0XHRcdFx0XHRcdExvY2FsRGF0YVByb3BlcnR5PzogeyAkUHJvcGVydHlQYXRoOiBzdHJpbmcgfTtcblx0XHRcdFx0XHR9KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb1BhcmFtZXRlci5Mb2NhbERhdGFQcm9wZXJ0eSAmJiBvUGFyYW1ldGVyLkxvY2FsRGF0YVByb3BlcnR5LiRQcm9wZXJ0eVBhdGggPT09IHNQcm9wZXJ0eU5hbWU7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0aWYgKG9QYXJhbVdpdGhLZXkgJiYgIW9QYXJhbVdpdGhLZXkuVmFsdWVMaXN0UHJvcGVydHkpIHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgSW5jb25zaXN0ZW50IHZhbHVlIGhlbHAgYW5ub3RhdGlvbiBmb3IgJHtzUHJvcGVydHlOYW1lfWApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBvVGV4dEFubm90YXRpb24gPSBvTWV0YU1vZGVsVmFsdWVMaXN0LmdldE9iamVjdChcblx0XHRcdFx0XHRcdGAvJHtvVmFsdWVMaXN0SW5mby5Db2xsZWN0aW9uUGF0aH0vJHtvUGFyYW1XaXRoS2V5LlZhbHVlTGlzdFByb3BlcnR5fUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dGBcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0aWYgKG9UZXh0QW5ub3RhdGlvbiAmJiBvVGV4dEFubm90YXRpb24uJFBhdGgpIHtcblx0XHRcdFx0XHRcdHNUZXh0UHJvcGVydHkgPSBvVGV4dEFubm90YXRpb24uJFBhdGg7XG5cdFx0XHRcdFx0XHRjb25zdCBvRmlsdGVyID0gbmV3IEZpbHRlcih7XG5cdFx0XHRcdFx0XHRcdHBhdGg6IG9QYXJhbVdpdGhLZXkuVmFsdWVMaXN0UHJvcGVydHksXG5cdFx0XHRcdFx0XHRcdG9wZXJhdG9yOiBcIkVRXCIsXG5cdFx0XHRcdFx0XHRcdHZhbHVlMTogc1Byb3BlcnR5VmFsdWVcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0Y29uc3Qgb0xpc3RCaW5kaW5nID0gb1ZhbHVlTGlzdE1vZGVsLmJpbmRMaXN0KGAvJHtvVmFsdWVMaXN0SW5mby5Db2xsZWN0aW9uUGF0aH1gLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgb0ZpbHRlciwge1xuXHRcdFx0XHRcdFx0XHQkc2VsZWN0OiBzVGV4dFByb3BlcnR5XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdHJldHVybiBvTGlzdEJpbmRpbmcucmVxdWVzdENvbnRleHRzKDAsIDIpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzRGlzcGxheUZvcm1hdCA9IFwiVmFsdWVcIjtcblx0XHRcdFx0XHRcdHJldHVybiBzUHJvcGVydHlWYWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChhQ29udGV4dHM6IENvbnRleHRbXSkge1xuXHRcdFx0XHRcdGNvbnN0IHNEZXNjcmlwdGlvbiA9IHNUZXh0UHJvcGVydHkgPyBhQ29udGV4dHNbMF0/LmdldE9iamVjdCgpW3NUZXh0UHJvcGVydHldIDogXCJcIjtcblx0XHRcdFx0XHRpZiAoIXNEZXNjcmlwdGlvbikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNQcm9wZXJ0eVZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRzd2l0Y2ggKHNEaXNwbGF5Rm9ybWF0KSB7XG5cdFx0XHRcdFx0XHRjYXNlIFwiRGVzY3JpcHRpb25cIjpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHNEZXNjcmlwdGlvbiB8fCBzUHJvcGVydHlWYWx1ZTtcblx0XHRcdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblZhbHVlXCI6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhLmdldFRleHQoXCJDX0ZPUk1BVF9GT1JfVEVYVF9BUlJBTkdFTUVOVFwiLCBbXG5cdFx0XHRcdFx0XHRcdFx0c0Rlc2NyaXB0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdHNQcm9wZXJ0eVZhbHVlXG5cdFx0XHRcdFx0XHRcdF0pO1xuXHRcdFx0XHRcdFx0Y2FzZSBcIlZhbHVlRGVzY3JpcHRpb25cIjpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIkNfRk9STUFUX0ZPUl9URVhUX0FSUkFOR0VNRU5UXCIsIFtcblx0XHRcdFx0XHRcdFx0XHRzUHJvcGVydHlWYWx1ZSxcblx0XHRcdFx0XHRcdFx0XHRzRGVzY3JpcHRpb25cblx0XHRcdFx0XHRcdFx0XSk7XG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gc1Byb3BlcnR5VmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdGNvbnN0IGVycm9yT2JqID0gb0Vycm9yIGFzIHsgc3RhdHVzOiBudW1iZXI7IG1lc3NhZ2U6IHN0cmluZyB9O1xuXHRcdFx0XHRcdGNvbnN0IHNNc2cgPVxuXHRcdFx0XHRcdFx0ZXJyb3JPYmouc3RhdHVzICYmIGVycm9yT2JqLnN0YXR1cyA9PT0gNDA0XG5cdFx0XHRcdFx0XHRcdD8gYE1ldGFkYXRhIG5vdCBmb3VuZCAoJHtlcnJvck9iai5zdGF0dXN9KSBmb3IgdmFsdWUgaGVscCBvZiBwcm9wZXJ0eSAke3NQcm9wZXJ0eUZ1bGxQYXRofWBcblx0XHRcdFx0XHRcdFx0OiBlcnJvck9iai5tZXNzYWdlO1xuXHRcdFx0XHRcdExvZy5lcnJvcihzTXNnKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBzUHJvcGVydHlWYWx1ZTtcblx0fSxcblxuXHRkaXNwbGF5QWdncmVnYXRlRGV0YWlsczogYXN5bmMgZnVuY3Rpb24gKGV2ZW50OiBFdmVudCwgYWdncmVnYXRlZFByb3BlcnR5UGF0aD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICghYWdncmVnYXRlZFByb3BlcnR5UGF0aCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBsaW5rID0gZXZlbnQuZ2V0U291cmNlPExpbms+KCk7XG5cdFx0Y29uc3QgYW5hbHl0aWNhbFRhYmxlID0gRlBNSGVscGVyLmdldE1kY1RhYmxlKGxpbmspITtcblxuXHRcdGNvbnN0IHJvd0NvbnRleHQgPSBsaW5rLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHRjb25zdCB0YWJsZVJvd0JpbmRpbmcgPSByb3dDb250ZXh0LmdldEJpbmRpbmcoKSBhcyBPRGF0YUxpc3RCaW5kaW5nO1xuXG5cdFx0Ly8gR2V0IHRoZSBmaWx0ZXJzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHRvdGFsIHJvd1xuXHRcdGNvbnN0IHJvd0NvbnRleHREYXRhID0gcm93Q29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRjb25zdCByb3dTcGVjaWZpY0ZpbHRlcjogRmlsdGVyW10gPSBbXTtcblx0XHRjb25zdCByb3dGaWx0ZXIgPSByb3dDb250ZXh0LmdldEZpbHRlcigpO1xuXHRcdGlmIChyb3dGaWx0ZXIpIHtcblx0XHRcdHJvd1NwZWNpZmljRmlsdGVyLnB1c2gocm93RmlsdGVyKTtcblx0XHR9XG5cblx0XHQvLyBBZGQgdGhlIGZpbHRlcnMgYXBwbGllZCB0byB0aGUgb3JpZ2luYWwgdGFibGVcblx0XHRjb25zdCBhbGxGaWx0ZXJzID0gcm93U3BlY2lmaWNGaWx0ZXIuY29uY2F0KHRhYmxlUm93QmluZGluZy5nZXRGaWx0ZXJzKFwiQXBwbGljYXRpb25cIiksIHRhYmxlUm93QmluZGluZy5nZXRGaWx0ZXJzKFwiQ29udHJvbFwiKSk7XG5cblx0XHQvLyBDYWxjdWxhdGUgJCRhZ2dyZWdhdGlvbiBwYXJhbWV0ZXJzIGZvciB0aGUgdGFibGUgaW4gdGhlIHBvcG92ZXIgKGFnZ3JlZ2F0ZSBhbW91bnQsIGdyb3VwIGJ5IGN1cnJlbmN5L3VuaXQpXG5cdFx0Y29uc3QgYWdncmVnYXRpb24gPSB0YWJsZVJvd0JpbmRpbmcuZ2V0QWdncmVnYXRpb24oKSBhcyB7XG5cdFx0XHRncm91cDogUmVjb3JkPHN0cmluZywgb2JqZWN0Pjtcblx0XHRcdGFnZ3JlZ2F0ZTogUmVjb3JkPHN0cmluZywgeyB1bml0OiBzdHJpbmcgfT47XG5cdFx0XHRzZWFyY2g/OiBzdHJpbmc7XG5cdFx0fTtcblx0XHRjb25zdCB1bml0T3JDdXJyZW5jeU5hbWUgPSBhZ2dyZWdhdGlvbi5hZ2dyZWdhdGVbYWdncmVnYXRlZFByb3BlcnR5UGF0aF0udW5pdDtcblx0XHRjb25zdCBncm91cDogUmVjb3JkPHN0cmluZywgb2JqZWN0PiA9IHt9O1xuXHRcdGdyb3VwW3VuaXRPckN1cnJlbmN5TmFtZV0gPSB7fTtcblx0XHRjb25zdCBhZ2dyZWdhdGU6IFJlY29yZDxzdHJpbmcsIG9iamVjdD4gPSB7fTtcblx0XHRhZ2dyZWdhdGVbYWdncmVnYXRlZFByb3BlcnR5UGF0aF0gPSB7IGdyYW5kVG90YWw6IGZhbHNlLCBzdWJ0b3RhbHM6IGZhbHNlLCB1bml0OiB1bml0T3JDdXJyZW5jeU5hbWUgfTtcblxuXHRcdC8vIFRoZSBpdGVtIGRpc3BsYXllZCBpbiB0aGUgdGFibGUgaW4gdGhlIHBvcG92ZXIgaXMgYSBjb3B5IG9mIHRoZSBpdGVtIGRpc3BsYXllZCBpbiB0aGUgdGFibGVcblx0XHRjb25zdCB0YWJsZUl0ZW0gPSBsaW5rLmdldERlcGVuZGVudHMoKVswXS5jbG9uZSgpO1xuXHRcdGNvbnN0IGN1cnJlbmN5T3JRdWFudGl0eUVuYWJsZWRMYXlvdXQgPSBuZXcgSEJveCh7XG5cdFx0XHRyZW5kZXJUeXBlOiBcIkJhcmVcIixcblx0XHRcdGp1c3RpZnlDb250ZW50OiBcIkVuZFwiLFxuXHRcdFx0aXRlbXM6IFt0YWJsZUl0ZW1dXG5cdFx0fSBhcyAkSEJveFNldHRpbmdzKTtcblxuXHRcdGNvbnN0IGFnZ3JlZ2F0aW9uUGFyYW1ldGVyczoge1xuXHRcdFx0Z3JvdXA6IFJlY29yZDxzdHJpbmcsIG9iamVjdD47XG5cdFx0XHRhZ2dyZWdhdGU6IFJlY29yZDxzdHJpbmcsIG9iamVjdD47XG5cdFx0XHRzZWFyY2g/OiBzdHJpbmc7XG5cdFx0fSA9IHsgZ3JvdXAsIGFnZ3JlZ2F0ZSB9O1xuXHRcdGlmIChhZ2dyZWdhdGlvbi5zZWFyY2gpIHtcblx0XHRcdGFnZ3JlZ2F0aW9uUGFyYW1ldGVycy5zZWFyY2ggPSBhZ2dyZWdhdGlvbi5zZWFyY2g7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb0l0ZW1zQmluZGluZ0luZm8gPSB7XG5cdFx0XHRwYXRoOiB0YWJsZVJvd0JpbmRpbmcuZ2V0UmVzb2x2ZWRQYXRoKCksXG5cdFx0XHRmaWx0ZXJzOiBhbGxGaWx0ZXJzLFxuXHRcdFx0cGFyYW1ldGVyczoge1xuXHRcdFx0XHQkJGFnZ3JlZ2F0aW9uOiBhZ2dyZWdhdGlvblBhcmFtZXRlcnNcblx0XHRcdH0sXG5cdFx0XHRzb3J0ZXI6IG5ldyBTb3J0ZXIodW5pdE9yQ3VycmVuY3lOYW1lLCBmYWxzZSkgLy8gT3JkZXIgYnkgY3VycmVuY3lcblx0XHR9O1xuXG5cdFx0Y29uc3QgaXNQb3BvdmVyRm9yR3JhbmRUb3RhbCA9IHJvd0NvbnRleHREYXRhW1wiQCR1aTUubm9kZS5sZXZlbFwiXSA9PT0gMDtcblx0XHRjb25zdCBwb3BvdmVyOiBSZXNwb25zaXZlUG9wb3ZlciA9IGF3YWl0IFV0aWwuY3JlYXRlT3JVcGRhdGVNdWx0aVVuaXRQb3BvdmVyKGAke2FuYWx5dGljYWxUYWJsZS5nZXRJZCgpfS1tdWx0aVVuaXRQb3BvdmVyYCwge1xuXHRcdFx0Y29udHJvbDogYW5hbHl0aWNhbFRhYmxlLFxuXHRcdFx0Z3JhbmRUb3RhbDogaXNQb3BvdmVyRm9yR3JhbmRUb3RhbCxcblx0XHRcdGl0ZW1zQmluZGluZ0luZm86IG9JdGVtc0JpbmRpbmdJbmZvLFxuXHRcdFx0bGlzdEl0ZW1Db250ZW50VGVtcGxhdGU6IGN1cnJlbmN5T3JRdWFudGl0eUVuYWJsZWRMYXlvdXRcblx0XHR9KTtcblx0XHRhbmFseXRpY2FsVGFibGUuYWRkRGVwZW5kZW50KHBvcG92ZXIpO1xuXG5cdFx0Y29uc3QgZm5PbkNsb3NlID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0YW5hbHl0aWNhbFRhYmxlLnJlbW92ZURlcGVuZGVudChwb3BvdmVyKTtcblx0XHRcdHBvcG92ZXIuZGV0YWNoRXZlbnQoXCJhZnRlckNsb3NlXCIsIGZuT25DbG9zZSk7XG5cdFx0XHRwb3BvdmVyLmRlc3Ryb3koKTtcblx0XHR9O1xuXHRcdHBvcG92ZXIuYXR0YWNoRXZlbnQoXCJhZnRlckNsb3NlXCIsIGZuT25DbG9zZSk7XG5cdFx0cG9wb3Zlci5vcGVuQnkobGluayk7XG5cdH1cbn07XG5cbk9iamVjdFBhdGguc2V0KFwic2FwLmZlLm1hY3Jvcy5maWVsZC5GaWVsZFJ1bnRpbWVcIiwgRmllbGRSdW50aW1lKTtcblxuZXhwb3J0IGRlZmF1bHQgRmllbGRSdW50aW1lO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0VBc0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxNQUFNQSxZQUFZLEdBQUc7SUFDcEJDLGNBQWMsRUFBRSxDQUFDLENBQTREO0lBQzdFQyxtQkFBbUIsRUFBRSxLQUFLO0lBRTFCO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDQyx1QkFBdUIsRUFBRSxTQUFBQSxDQUN4QkMsYUFBcUIsRUFDckJDLDZCQUFxQyxFQUNyQ0MsY0FBd0IsRUFDeEJDLGNBQXdCLEVBQ3hCQyxhQUF1QixFQUNiO01BQ1YsSUFBSUQsY0FBYyxLQUFLRSxTQUFTLElBQUlILGNB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
188
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWVsZFJ1bnRpbWUiLCJ1cGxvYWRQcm9taXNlcyIsImNyZWF0aW5nSW5hY3RpdmVSb3ciLCJpc0RyYWZ0SW5kaWNhdG9yVmlzaWJsZSIsInNQcm9wZXJ0eVBhdGgiLCJzU2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvciIsIkhhc0RyYWZ0RW50aXR5IiwiSXNBY3RpdmVFbnRpdHkiLCJoaWRlRHJhZnRJbmZvIiwidW5kZWZpbmVkIiwib25WYWxpZGF0ZUZpZWxkR3JvdXAiLCJvRXZlbnQiLCJvU291cmNlRmllbGQiLCJnZXRTb3VyY2UiLCJ2aWV3IiwiQ29tbW9uVXRpbHMiLCJnZXRUYXJnZXRWaWV3IiwiY29udHJvbGxlciIsImdldENvbnRyb2xsZXIiLCJvRkVDb250cm9sbGVyIiwiRmllbGRSdW50aW1lSGVscGVyIiwiZ2V0RXh0ZW5zaW9uQ29udHJvbGxlciIsIl9zaWRlRWZmZWN0cyIsImhhbmRsZUZpZWxkR3JvdXBDaGFuZ2UiLCJfZm5GaXhIYXNoUXVlcnlTdHJpbmciLCJzQ3VycmVudEhhc2giLCJpbmNsdWRlcyIsInNwbGl0IiwicmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCIsInNQcm9wZXJ0eVZhbHVlIiwic1Byb3BlcnR5RnVsbFBhdGgiLCJzRGlzcGxheUZvcm1hdCIsInNUZXh0UHJvcGVydHkiLCJvTWV0YU1vZGVsIiwic1Byb3BlcnR5TmFtZSIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiQ29tbW9uSGVscGVyIiwiZ2V0T2JqZWN0IiwicmVxdWVzdFZhbHVlTGlzdEluZm8iLCJ0aGVuIiwibVZhbHVlTGlzdEluZm8iLCJvVmFsdWVMaXN0SW5mbyIsIk9iamVjdCIsImtleXMiLCJvVmFsdWVMaXN0TW9kZWwiLCIkbW9kZWwiLCJvTWV0YU1vZGVsVmFsdWVMaXN0Iiwib1BhcmFtV2l0aEtleSIsIlBhcmFtZXRlcnMiLCJmaW5kIiwib1BhcmFtZXRlciIsIkxvY2FsRGF0YVByb3BlcnR5IiwiJFByb3BlcnR5UGF0aCIsIlZhbHVlTGlzdFByb3BlcnR5IiwiRXJyb3IiLCJvVGV4dEFubm90YXRpb24iLCJDb2xsZWN0aW9uUGF0aCIsIiRQYXRoIiwib0ZpbHRlciIsIkZpbHRlciIsInBhdGgiLCJvcGVyYXRvciIsInZhbHVlMSIsIm9MaXN0QmluZGluZyIsImJpbmRMaXN0IiwiJHNlbGVjdCIsInJlcXVlc3RDb250ZXh0cyIsImFDb250ZXh0cyIsInNEZXNjcmlwdGlvbiIsIkxpYnJhcnkiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsImdldFRleHQiLCJjYXRjaCIsIm9FcnJvciIsImVycm9yT2JqIiwic01zZyIsInN0YXR1cyIsIm1lc3NhZ2UiLCJMb2ciLCJlcnJvciIsImRpc3BsYXlBZ2dyZWdhdGVEZXRhaWxzIiwiZXZlbnQiLCJhZ2dyZWdhdGVkUHJvcGVydHlQYXRoIiwibGluayIsImFuYWx5dGljYWxUYWJsZSIsIkZQTUhlbHBlciIsImdldE1kY1RhYmxlIiwicm93Q29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0IiwidGFibGVSb3dCaW5kaW5nIiwiZ2V0QmluZGluZyIsInJvd0NvbnRleHREYXRhIiwicm93U3BlY2lmaWNGaWx0ZXIiLCJyb3dGaWx0ZXIiLCJnZXRGaWx0ZXIiLCJwdXNoIiwiYWxsRmlsdGVycyIsImNvbmNhdCIsImdldEZpbHRlcnMiLCJhZ2dyZWdhdGlvbiIsImdldEFnZ3JlZ2F0aW9uIiwidW5pdE9yQ3VycmVuY3lOYW1lIiwiYWdncmVnYXRlIiwidW5pdCIsImdyb3VwIiwiZ3JhbmRUb3RhbCIsInN1YnRvdGFscyIsInRhYmxlSXRlbSIsImdldERlcGVuZGVudHMiLCJjbG9uZSIsImN1cnJlbmN5T3JRdWFudGl0eUVuYWJsZWRMYXlvdXQiLCJIQm94IiwicmVuZGVyVHlwZSIsImp1c3RpZnlDb250ZW50IiwiaXRlbXMiLCJhZ2dyZWdhdGlvblBhcmFtZXRlcnMiLCJzZWFyY2giLCJvSXRlbXNCaW5kaW5nSW5mbyIsImdldFJlc29sdmVkUGF0aCIsImZpbHRlcnMiLCJwYXJhbWV0ZXJzIiwiJCRhZ2dyZWdhdGlvbiIsInNvcnRlciIsIlNvcnRlciIsImlzUG9wb3ZlckZvckdyYW5kVG90YWwiLCJwb3BvdmVyIiwiVXRpbCIsImNyZWF0ZU9yVXBkYXRlTXVsdGlVbml0UG9wb3ZlciIsImdldElkIiwiY29udHJvbCIsIml0ZW1zQmluZGluZ0luZm8iLCJsaXN0SXRlbUNvbnRlbnRUZW1wbGF0ZSIsImFkZERlcGVuZGVudCIsImZuT25DbG9zZSIsInJlbW92ZURlcGVuZGVudCIsImRldGFjaEV2ZW50IiwiZGVzdHJveSIsImF0dGFjaEV2ZW50Iiwib3BlbkJ5IiwiT2JqZWN0UGF0aCIsInNldCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRmllbGRSdW50aW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IE9iamVjdFBhdGggZnJvbSBcInNhcC9iYXNlL3V0aWwvT2JqZWN0UGF0aFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IEZQTUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9GUE1IZWxwZXJcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7ICRIQm94U2V0dGluZ3MgfSBmcm9tIFwic2FwL20vSEJveFwiO1xuaW1wb3J0IEhCb3ggZnJvbSBcInNhcC9tL0hCb3hcIjtcbmltcG9ydCB0eXBlIExpbmsgZnJvbSBcInNhcC9tL0xpbmtcIjtcbmltcG9ydCB0eXBlIFJlc3BvbnNpdmVQb3BvdmVyIGZyb20gXCJzYXAvbS9SZXNwb25zaXZlUG9wb3ZlclwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBVdGlsIH0gZnJvbSBcInNhcC9tL3RhYmxlL1V0aWxcIjtcbmltcG9ydCB0eXBlIEV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCBGaWx0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJcIjtcbmltcG9ydCBTb3J0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9Tb3J0ZXJcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IEZpZWxkUnVudGltZUhlbHBlciBmcm9tIFwiLi9GaWVsZFJ1bnRpbWVIZWxwZXJcIjtcblxuLyoqXG4gKiBTdGF0aWMgY2xhc3MgdXNlZCBieSBcInNhcC51aS5tZGMuRmllbGRcIiBkdXJpbmcgcnVudGltZVxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgRmllbGRSdW50aW1lID0ge1xuXHR1cGxvYWRQcm9taXNlczoge30gYXMgUmVjb3JkPHN0cmluZywgeyByZXNvbHZlOiBGdW5jdGlvbjsgcmVqZWN0OiBGdW5jdGlvbiB9Pixcblx0Y3JlYXRpbmdJbmFjdGl2ZVJvdzogZmFsc2UsXG5cblx0LyoqXG5cdCAqIFRoaXMgaXMgYSBmb3JtYXR0ZXIgaW4gZGlzZ3Vpc2UuXG5cdCAqIEBwYXJhbSBzUHJvcGVydHlQYXRoXG5cdCAqIEBwYXJhbSBzU2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvclxuXHQgKiBAcGFyYW0gSGFzRHJhZnRFbnRpdHlcblx0ICogQHBhcmFtIElzQWN0aXZlRW50aXR5XG5cdCAqIEBwYXJhbSBoaWRlRHJhZnRJbmZvXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGRyYWZ0IGluZGljYXRvciBzaG91bGQgYmUgZGlzcGxheWVkLlxuXHQgKi9cblx0aXNEcmFmdEluZGljYXRvclZpc2libGU6IGZ1bmN0aW9uIChcblx0XHRzUHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdFx0c1NlbWFudGljS2V5SGFzRHJhZnRJbmRpY2F0b3I6IHN0cmluZyxcblx0XHRIYXNEcmFmdEVudGl0eT86IGJvb2xlYW4sXG5cdFx0SXNBY3RpdmVFbnRpdHk/OiBib29sZWFuLFxuXHRcdGhpZGVEcmFmdEluZm8/OiBib29sZWFuXG5cdCk6IGJvb2xlYW4ge1xuXHRcdGlmIChJc0FjdGl2ZUVudGl0eSAhPT0gdW5kZWZpbmVkICYmIEhhc0RyYWZ0RW50aXR5ICE9PSB1bmRlZmluZWQgJiYgKCFJc0FjdGl2ZUVudGl0eSB8fCBIYXNEcmFmdEVudGl0eSkgJiYgIWhpZGVEcmFmdEluZm8pIHtcblx0XHRcdHJldHVybiBzUHJvcGVydHlQYXRoID09PSBzU2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvcjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogSGFuZGxlciBmb3IgdGhlIHZhbGlkYXRlRmllbGRHcm91cCBldmVudC5cblx0ICogQHBhcmFtIG9FdmVudCBUaGUgZXZlbnQgb2JqZWN0IHBhc3NlZCBieSB0aGUgdmFsaWRhdGVGaWVsZEdyb3VwIGV2ZW50XG5cdCAqL1xuXHRvblZhbGlkYXRlRmllbGRHcm91cDogZnVuY3Rpb24gKG9FdmVudDogQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCk6IHZvaWQge1xuXHRcdGNvbnN0IG9Tb3VyY2VGaWVsZCA9IG9FdmVudC5nZXRTb3VyY2UoKSBhcyBNYW5hZ2VkT2JqZWN0O1xuXHRcdGNvbnN0IHZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KG9Tb3VyY2VGaWVsZCksXG5cdFx0XHRjb250cm9sbGVyID0gdmlldy5nZXRDb250cm9sbGVyKCk7XG5cblx0XHRjb25zdCBvRkVDb250cm9sbGVyID0gRmllbGRSdW50aW1lSGVscGVyLmdldEV4dGVuc2lvbkNvbnRyb2xsZXIoY29udHJvbGxlcik7XG5cdFx0b0ZFQ29udHJvbGxlci5fc2lkZUVmZmVjdHMuaGFuZGxlRmllbGRHcm91cENoYW5nZShvRXZlbnQpO1xuXHR9LFxuXG5cdF9mbkZpeEhhc2hRdWVyeVN0cmluZzogZnVuY3Rpb24gKHNDdXJyZW50SGFzaDogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRpZiAoc0N1cnJlbnRIYXNoPy5pbmNsdWRlcyhcIj9cIikpIHtcblx0XHRcdC8vIHNDdXJyZW50SGFzaCBjYW4gY29udGFpbiBxdWVyeSBzdHJpbmcsIGN1dCBpdCBvZmYhXG5cdFx0XHRzQ3VycmVudEhhc2ggPSBzQ3VycmVudEhhc2guc3BsaXQoXCI/XCIpWzBdO1xuXHRcdH1cblx0XHRyZXR1cm4gc0N1cnJlbnRIYXNoO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gcmV0cmlldmUgdGV4dCBmcm9tIHRoZSB2YWx1ZSBsaXN0IGZvciBEYXRhRmllbGQuXG5cdCAqIFRoaXMgaXMgYSBmb3JtYXR0ZXIgaW4gZGlzZ3Vpc2UuXG5cdCAqIEBwYXJhbSBzUHJvcGVydHlWYWx1ZSBUaGUgcHJvcGVydHkgdmFsdWUgb2YgdGhlIGRhdGEgZmllbGQuXG5cdCAqIEBwYXJhbSBzUHJvcGVydHlGdWxsUGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSBwcm9wZXJ0eSBpbiB0aGUgbWV0YWRhdGEuXG5cdCAqIEBwYXJhbSBzRGlzcGxheUZvcm1hdCBUaGUgZGlzcGxheSBmb3JtYXQgZm9yIHRoZSBkYXRhIGZpZWxkLlxuXHQgKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIHZhbHVlIGJhc2VkIG9uIHRoZSBkaXNwbGF5IGZvcm1hdC5cblx0ICovXG5cdHJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3Q6IGFzeW5jIGZ1bmN0aW9uIChcblx0XHR0aGlzOiBDb250cm9sLFxuXHRcdHNQcm9wZXJ0eVZhbHVlOiBzdHJpbmcsXG5cdFx0c1Byb3BlcnR5RnVsbFBhdGg6IHN0cmluZyxcblx0XHRzRGlzcGxheUZvcm1hdDogc3RyaW5nXG5cdCk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0bGV0IHNUZXh0UHJvcGVydHk6IHN0cmluZztcblx0XHRsZXQgb01ldGFNb2RlbDtcblx0XHRsZXQgc1Byb3BlcnR5TmFtZTogc3RyaW5nO1xuXHRcdGlmIChzUHJvcGVydHlWYWx1ZSkge1xuXHRcdFx0b01ldGFNb2RlbCA9ICh0aGlzLmdldE1vZGVsKCk/LmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsKSB8fCBDb21tb25IZWxwZXIuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRzUHJvcGVydHlOYW1lID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c1Byb3BlcnR5RnVsbFBhdGh9QHNhcHVpLm5hbWVgKTtcblx0XHRcdHJldHVybiBvTWV0YU1vZGVsXG5cdFx0XHRcdC5yZXF1ZXN0VmFsdWVMaXN0SW5mbyhzUHJvcGVydHlGdWxsUGF0aCwgdHJ1ZSlcblx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKG1WYWx1ZUxpc3RJbmZvKSB7XG5cdFx0XHRcdFx0Ly8gdGFrZSB0aGUgXCJcIiBvbmUgaWYgZXhpc3RzLCBvdGhlcndpc2UgdGFrZSB0aGUgZmlyc3Qgb25lIGluIHRoZSBvYmplY3QgVE9ETzogdG8gYmUgZGlzY3Vzc2VkXG5cdFx0XHRcdFx0Y29uc3Qgb1ZhbHVlTGlzdEluZm8gPSBtVmFsdWVMaXN0SW5mb1ttVmFsdWVMaXN0SW5mb1tcIlwiXSA/IFwiXCIgOiBPYmplY3Qua2V5cyhtVmFsdWVMaXN0SW5mbylbMF1dO1xuXHRcdFx0XHRcdGNvbnN0IG9WYWx1ZUxpc3RNb2RlbCA9IG9WYWx1ZUxpc3RJbmZvLiRtb2RlbDtcblx0XHRcdFx0XHRjb25zdCBvTWV0YU1vZGVsVmFsdWVMaXN0ID0gb1ZhbHVlTGlzdE1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0XHRcdGNvbnN0IG9QYXJhbVdpdGhLZXkgPSBvVmFsdWVMaXN0SW5mby5QYXJhbWV0ZXJzLmZpbmQoZnVuY3Rpb24gKG9QYXJhbWV0ZXI6IHtcblx0XHRcdFx0XHRcdExvY2FsRGF0YVByb3BlcnR5PzogeyAkUHJvcGVydHlQYXRoOiBzdHJpbmcgfTtcblx0XHRcdFx0XHR9KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb1BhcmFtZXRlci5Mb2NhbERhdGFQcm9wZXJ0eSAmJiBvUGFyYW1ldGVyLkxvY2FsRGF0YVByb3BlcnR5LiRQcm9wZXJ0eVBhdGggPT09IHNQcm9wZXJ0eU5hbWU7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0aWYgKG9QYXJhbVdpdGhLZXkgJiYgIW9QYXJhbVdpdGhLZXkuVmFsdWVMaXN0UHJvcGVydHkpIHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgSW5jb25zaXN0ZW50IHZhbHVlIGhlbHAgYW5ub3RhdGlvbiBmb3IgJHtzUHJvcGVydHlOYW1lfWApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBvVGV4dEFubm90YXRpb24gPSBvTWV0YU1vZGVsVmFsdWVMaXN0LmdldE9iamVjdChcblx0XHRcdFx0XHRcdGAvJHtvVmFsdWVMaXN0SW5mby5Db2xsZWN0aW9uUGF0aH0vJHtvUGFyYW1XaXRoS2V5LlZhbHVlTGlzdFByb3BlcnR5fUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dGBcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0aWYgKG9UZXh0QW5ub3RhdGlvbiAmJiBvVGV4dEFubm90YXRpb24uJFBhdGgpIHtcblx0XHRcdFx0XHRcdHNUZXh0UHJvcGVydHkgPSBvVGV4dEFubm90YXRpb24uJFBhdGg7XG5cdFx0XHRcdFx0XHRjb25zdCBvRmlsdGVyID0gbmV3IEZpbHRlcih7XG5cdFx0XHRcdFx0XHRcdHBhdGg6IG9QYXJhbVdpdGhLZXkuVmFsdWVMaXN0UHJvcGVydHksXG5cdFx0XHRcdFx0XHRcdG9wZXJhdG9yOiBcIkVRXCIsXG5cdFx0XHRcdFx0XHRcdHZhbHVlMTogc1Byb3BlcnR5VmFsdWVcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0Y29uc3Qgb0xpc3RCaW5kaW5nID0gb1ZhbHVlTGlzdE1vZGVsLmJpbmRMaXN0KGAvJHtvVmFsdWVMaXN0SW5mby5Db2xsZWN0aW9uUGF0aH1gLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgb0ZpbHRlciwge1xuXHRcdFx0XHRcdFx0XHQkc2VsZWN0OiBzVGV4dFByb3BlcnR5XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdHJldHVybiBvTGlzdEJpbmRpbmcucmVxdWVzdENvbnRleHRzKDAsIDIpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzRGlzcGxheUZvcm1hdCA9IFwiVmFsdWVcIjtcblx0XHRcdFx0XHRcdHJldHVybiBzUHJvcGVydHlWYWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChhQ29udGV4dHM6IENvbnRleHRbXSkge1xuXHRcdFx0XHRcdGNvbnN0IHNEZXNjcmlwdGlvbiA9IHNUZXh0UHJvcGVydHkgPyBhQ29udGV4dHNbMF0/LmdldE9iamVjdCgpW3NUZXh0UHJvcGVydHldIDogXCJcIjtcblx0XHRcdFx0XHRpZiAoIXNEZXNjcmlwdGlvbikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNQcm9wZXJ0eVZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRzd2l0Y2ggKHNEaXNwbGF5Rm9ybWF0KSB7XG5cdFx0XHRcdFx0XHRjYXNlIFwiRGVzY3JpcHRpb25cIjpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHNEZXNjcmlwdGlvbiB8fCBzUHJvcGVydHlWYWx1ZTtcblx0XHRcdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblZhbHVlXCI6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhLmdldFRleHQoXCJDX0ZPUk1BVF9GT1JfVEVYVF9BUlJBTkdFTUVOVFwiLCBbXG5cdFx0XHRcdFx0XHRcdFx0c0Rlc2NyaXB0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdHNQcm9wZXJ0eVZhbHVlXG5cdFx0XHRcdFx0XHRcdF0pO1xuXHRcdFx0XHRcdFx0Y2FzZSBcIlZhbHVlRGVzY3JpcHRpb25cIjpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIkNfRk9STUFUX0ZPUl9URVhUX0FSUkFOR0VNRU5UXCIsIFtcblx0XHRcdFx0XHRcdFx0XHRzUHJvcGVydHlWYWx1ZSxcblx0XHRcdFx0XHRcdFx0XHRzRGVzY3JpcHRpb25cblx0XHRcdFx0XHRcdFx0XSk7XG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gc1Byb3BlcnR5VmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdGNvbnN0IGVycm9yT2JqID0gb0Vycm9yIGFzIHsgc3RhdHVzOiBudW1iZXI7IG1lc3NhZ2U6IHN0cmluZyB9O1xuXHRcdFx0XHRcdGNvbnN0IHNNc2cgPVxuXHRcdFx0XHRcdFx0ZXJyb3JPYmouc3RhdHVzICYmIGVycm9yT2JqLnN0YXR1cyA9PT0gNDA0XG5cdFx0XHRcdFx0XHRcdD8gYE1ldGFkYXRhIG5vdCBmb3VuZCAoJHtlcnJvck9iai5zdGF0dXN9KSBmb3IgdmFsdWUgaGVscCBvZiBwcm9wZXJ0eSAke3NQcm9wZXJ0eUZ1bGxQYXRofWBcblx0XHRcdFx0XHRcdFx0OiBlcnJvck9iai5tZXNzYWdlO1xuXHRcdFx0XHRcdExvZy5lcnJvcihzTXNnKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBzUHJvcGVydHlWYWx1ZTtcblx0fSxcblxuXHRkaXNwbGF5QWdncmVnYXRlRGV0YWlsczogYXN5bmMgZnVuY3Rpb24gKGV2ZW50OiBFdmVudCwgYWdncmVnYXRlZFByb3BlcnR5UGF0aD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICghYWdncmVnYXRlZFByb3BlcnR5UGF0aCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBsaW5rID0gZXZlbnQuZ2V0U291cmNlPExpbms+KCk7XG5cdFx0Y29uc3QgYW5hbHl0aWNhbFRhYmxlID0gRlBNSGVscGVyLmdldE1kY1RhYmxlKGxpbmspITtcblxuXHRcdGNvbnN0IHJvd0NvbnRleHQgPSBsaW5rLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHRjb25zdCB0YWJsZVJvd0JpbmRpbmcgPSByb3dDb250ZXh0LmdldEJpbmRpbmcoKSBhcyBPRGF0YUxpc3RCaW5kaW5nO1xuXG5cdFx0Ly8gR2V0IHRoZSBmaWx0ZXJzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHRvdGFsIHJvd1xuXHRcdGNvbnN0IHJvd0NvbnRleHREYXRhID0gcm93Q29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRjb25zdCByb3dTcGVjaWZpY0ZpbHRlcjogRmlsdGVyW10gPSBbXTtcblx0XHRjb25zdCByb3dGaWx0ZXIgPSByb3dDb250ZXh0LmdldEZpbHRlcigpO1xuXHRcdGlmIChyb3dGaWx0ZXIpIHtcblx0XHRcdHJvd1NwZWNpZmljRmlsdGVyLnB1c2gocm93RmlsdGVyKTtcblx0XHR9XG5cblx0XHQvLyBBZGQgdGhlIGZpbHRlcnMgYXBwbGllZCB0byB0aGUgb3JpZ2luYWwgdGFibGVcblx0XHRjb25zdCBhbGxGaWx0ZXJzID0gcm93U3BlY2lmaWNGaWx0ZXIuY29uY2F0KHRhYmxlUm93QmluZGluZy5nZXRGaWx0ZXJzKFwiQXBwbGljYXRpb25cIiksIHRhYmxlUm93QmluZGluZy5nZXRGaWx0ZXJzKFwiQ29udHJvbFwiKSk7XG5cblx0XHQvLyBDYWxjdWxhdGUgJCRhZ2dyZWdhdGlvbiBwYXJhbWV0ZXJzIGZvciB0aGUgdGFibGUgaW4gdGhlIHBvcG92ZXIgKGFnZ3JlZ2F0ZSBhbW91bnQsIGdyb3VwIGJ5IGN1cnJlbmN5L3VuaXQpXG5cdFx0Y29uc3QgYWdncmVnYXRpb24gPSB0YWJsZVJvd0JpbmRpbmcuZ2V0QWdncmVnYXRpb24oKSBhcyB7XG5cdFx0XHRncm91cDogUmVjb3JkPHN0cmluZywgb2JqZWN0Pjtcblx0XHRcdGFnZ3JlZ2F0ZTogUmVjb3JkPHN0cmluZywgeyB1bml0OiBzdHJpbmcgfT47XG5cdFx0XHRzZWFyY2g/OiBzdHJpbmc7XG5cdFx0fTtcblx0XHRjb25zdCB1bml0T3JDdXJyZW5jeU5hbWUgPSBhZ2dyZWdhdGlvbi5hZ2dyZWdhdGVbYWdncmVnYXRlZFByb3BlcnR5UGF0aF0udW5pdDtcblx0XHRjb25zdCBncm91cDogUmVjb3JkPHN0cmluZywgb2JqZWN0PiA9IHt9O1xuXHRcdGdyb3VwW3VuaXRPckN1cnJlbmN5TmFtZV0gPSB7fTtcblx0XHRjb25zdCBhZ2dyZWdhdGU6IFJlY29yZDxzdHJpbmcsIG9iamVjdD4gPSB7fTtcblx0XHRhZ2dyZWdhdGVbYWdncmVnYXRlZFByb3BlcnR5UGF0aF0gPSB7IGdyYW5kVG90YWw6IGZhbHNlLCBzdWJ0b3RhbHM6IGZhbHNlLCB1bml0OiB1bml0T3JDdXJyZW5jeU5hbWUgfTtcblxuXHRcdC8vIFRoZSBpdGVtIGRpc3BsYXllZCBpbiB0aGUgdGFibGUgaW4gdGhlIHBvcG92ZXIgaXMgYSBjb3B5IG9mIHRoZSBpdGVtIGRpc3BsYXllZCBpbiB0aGUgdGFibGVcblx0XHRjb25zdCB0YWJsZUl0ZW0gPSBsaW5rLmdldERlcGVuZGVudHMoKVswXS5jbG9uZSgpO1xuXHRcdGNvbnN0IGN1cnJlbmN5T3JRdWFudGl0eUVuYWJsZWRMYXlvdXQgPSBuZXcgSEJveCh7XG5cdFx0XHRyZW5kZXJUeXBlOiBcIkJhcmVcIixcblx0XHRcdGp1c3RpZnlDb250ZW50OiBcIkVuZFwiLFxuXHRcdFx0aXRlbXM6IFt0YWJsZUl0ZW1dXG5cdFx0fSBhcyAkSEJveFNldHRpbmdzKTtcblxuXHRcdGNvbnN0IGFnZ3JlZ2F0aW9uUGFyYW1ldGVyczoge1xuXHRcdFx0Z3JvdXA6IFJlY29yZDxzdHJpbmcsIG9iamVjdD47XG5cdFx0XHRhZ2dyZWdhdGU6IFJlY29yZDxzdHJpbmcsIG9iamVjdD47XG5cdFx0XHRzZWFyY2g/OiBzdHJpbmc7XG5cdFx0fSA9IHsgZ3JvdXAsIGFnZ3JlZ2F0ZSB9O1xuXHRcdGlmIChhZ2dyZWdhdGlvbi5zZWFyY2gpIHtcblx0XHRcdGFnZ3JlZ2F0aW9uUGFyYW1ldGVycy5zZWFyY2ggPSBhZ2dyZWdhdGlvbi5zZWFyY2g7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb0l0ZW1zQmluZGluZ0luZm8gPSB7XG5cdFx0XHRwYXRoOiB0YWJsZVJvd0JpbmRpbmcuZ2V0UmVzb2x2ZWRQYXRoKCksXG5cdFx0XHRmaWx0ZXJzOiBhbGxGaWx0ZXJzLFxuXHRcdFx0cGFyYW1ldGVyczoge1xuXHRcdFx0XHQkJGFnZ3JlZ2F0aW9uOiBhZ2dyZWdhdGlvblBhcmFtZXRlcnNcblx0XHRcdH0sXG5cdFx0XHRzb3J0ZXI6IG5ldyBTb3J0ZXIodW5pdE9yQ3VycmVuY3lOYW1lLCBmYWxzZSkgLy8gT3JkZXIgYnkgY3VycmVuY3lcblx0XHR9O1xuXG5cdFx0Y29uc3QgaXNQb3BvdmVyRm9yR3JhbmRUb3RhbCA9IHJvd0NvbnRleHREYXRhW1wiQCR1aTUubm9kZS5sZXZlbFwiXSA9PT0gMDtcblx0XHRjb25zdCBwb3BvdmVyOiBSZXNwb25zaXZlUG9wb3ZlciA9IGF3YWl0IFV0aWwuY3JlYXRlT3JVcGRhdGVNdWx0aVVuaXRQb3BvdmVyKGAke2FuYWx5dGljYWxUYWJsZS5nZXRJZCgpfS1tdWx0aVVuaXRQb3BvdmVyYCwge1xuXHRcdFx0Y29udHJvbDogYW5hbHl0aWNhbFRhYmxlLFxuXHRcdFx0Z3JhbmRUb3RhbDogaXNQb3BvdmVyRm9yR3JhbmRUb3RhbCxcblx0XHRcdGl0ZW1zQmluZGluZ0luZm86IG9JdGVtc0JpbmRpbmdJbmZvLFxuXHRcdFx0bGlzdEl0ZW1Db250ZW50VGVtcGxhdGU6IGN1cnJlbmN5T3JRdWFudGl0eUVuYWJsZWRMYXlvdXRcblx0XHR9KTtcblx0XHRhbmFseXRpY2FsVGFibGUuYWRkRGVwZW5kZW50KHBvcG92ZXIpO1xuXG5cdFx0Y29uc3QgZm5PbkNsb3NlID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0YW5hbHl0aWNhbFRhYmxlLnJlbW92ZURlcGVuZGVudChwb3BvdmVyKTtcblx0XHRcdHBvcG92ZXIuZGV0YWNoRXZlbnQoXCJhZnRlckNsb3NlXCIsIGZuT25DbG9zZSk7XG5cdFx0XHRwb3BvdmVyLmRlc3Ryb3koKTtcblx0XHR9O1xuXHRcdHBvcG92ZXIuYXR0YWNoRXZlbnQoXCJhZnRlckNsb3NlXCIsIGZuT25DbG9zZSk7XG5cdFx0cG9wb3Zlci5vcGVuQnkobGluayk7XG5cdH1cbn07XG5cbk9iamVjdFBhdGguc2V0KFwic2FwLmZlLm1hY3Jvcy5maWVsZC5GaWVsZFJ1bnRpbWVcIiwgRmllbGRSdW50aW1lKTtcblxuZXhwb3J0IGRlZmF1bHQgRmllbGRSdW50aW1lO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0VBc0JBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsTUFBTUEsWUFBWSxHQUFHO0lBQ3BCQyxjQUFjLEVBQUUsQ0FBQyxDQUE0RDtJQUM3RUMsbUJBQW1CLEVBQUUsS0FBSztJQUUxQjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQ0MsdUJBQXVCLEVBQUUsU0FBQUEsQ0FDeEJDLGFBQXFCLEVBQ3JCQyw2QkFBcUMsRUFDckNDLGNBQXdCLEVBQ3hCQyxjQUF3QixFQUN4QkMsYUFBdUIsRUFDYjtNQUNWLElBQUlELGNBQWMsS0FBS0UsU0FBUyxJQUFJSCxjQUFjLEtBQUtHLFNBQVMsS0FBSyxDQUFDRixjQUFjLElBQUlELGNBQWMsQ0FBQyxJQUFJLENBQUNFLGFBQWEsRUFBRTtRQUMxSCxP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
@@ -23,7 +23,6 @@ import FieldRuntimeHelper from "./FieldRuntimeHelper";
23
23
  /**
24
24
  * Static class used by "sap.ui.mdc.Field" during runtime
25
25
  * @private
26
- * @experimental This module is only for internal/experimental use!
27
26
  */
28
27
  const FieldRuntime = {
29
28
  uploadPromises: {} as Record<string, { resolve: Function; reject: Function }>,