@sapui5/sap.fe.macros 1.141.0 → 1.142.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 (217) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Breadcrumbs.js +4 -10
  4. package/src/sap/fe/macros/Breadcrumbs.tsx +2 -8
  5. package/src/sap/fe/macros/Chart.js +34 -23
  6. package/src/sap/fe/macros/Chart.tsx +25 -11
  7. package/src/sap/fe/macros/CollaborativeDraftHandler.js +48 -31
  8. package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +51 -26
  9. package/src/sap/fe/macros/CollectionBindingInfo.js +8 -2
  10. package/src/sap/fe/macros/CollectionBindingInfo.ts +11 -6
  11. package/src/sap/fe/macros/CommonHelper.js +14 -24
  12. package/src/sap/fe/macros/CommonHelper.ts +18 -25
  13. package/src/sap/fe/macros/Field.js +30 -13
  14. package/src/sap/fe/macros/Field.ts +60 -30
  15. package/src/sap/fe/macros/FooterContent.js +5 -2
  16. package/src/sap/fe/macros/FooterContent.tsx +6 -3
  17. package/src/sap/fe/macros/KPITag.js +1 -1
  18. package/src/sap/fe/macros/KPITag.tsx +3 -1
  19. package/src/sap/fe/macros/MacroAPI.js +3 -2
  20. package/src/sap/fe/macros/MacroAPI.ts +2 -2
  21. package/src/sap/fe/macros/MessageButton.js +3 -2
  22. package/src/sap/fe/macros/MessageButton.tsx +5 -2
  23. package/src/sap/fe/macros/MicroChart.js +10 -6
  24. package/src/sap/fe/macros/MicroChart.tsx +8 -2
  25. package/src/sap/fe/macros/MultiValueField.js +22 -36
  26. package/src/sap/fe/macros/MultiValueField.tsx +34 -66
  27. package/src/sap/fe/macros/RichTextEditor.js +3 -4
  28. package/src/sap/fe/macros/RichTextEditor.tsx +2 -3
  29. package/src/sap/fe/macros/Status.js +35 -8
  30. package/src/sap/fe/macros/Status.tsx +23 -2
  31. package/src/sap/fe/macros/ValueHelp.js +5 -2
  32. package/src/sap/fe/macros/ValueHelp.tsx +5 -0
  33. package/src/sap/fe/macros/ai/EasyFilterBar.js +7 -34
  34. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +6 -35
  35. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +31 -7
  36. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +33 -6
  37. package/src/sap/fe/macros/chart/Action.js +25 -2
  38. package/src/sap/fe/macros/chart/Action.ts +13 -0
  39. package/src/sap/fe/macros/chart/ActionGroup.js +25 -2
  40. package/src/sap/fe/macros/chart/ActionGroup.ts +13 -0
  41. package/src/sap/fe/macros/chart/ChartDelegate.js +8 -8
  42. package/src/sap/fe/macros/chart/ChartDelegate.ts +17 -12
  43. package/src/sap/fe/macros/chart/MdcChartTemplate.js +54 -11
  44. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +70 -11
  45. package/src/sap/fe/macros/chart/OverflowGroup.js +62 -0
  46. package/src/sap/fe/macros/chart/OverflowGroup.ts +22 -0
  47. package/src/sap/fe/macros/controls/FilterBar.js +39 -3
  48. package/src/sap/fe/macros/controls/FilterBar.ts +42 -1
  49. package/src/sap/fe/macros/controls/RadioButtons.js +18 -5
  50. package/src/sap/fe/macros/controls/RadioButtons.tsx +10 -1
  51. package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
  52. package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
  53. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +37 -9
  54. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +45 -6
  55. package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +4 -2
  56. package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +3 -1
  57. package/src/sap/fe/macros/field/FieldFormatOptions.js +3 -3
  58. package/src/sap/fe/macros/field/FieldFormatOptions.ts +1 -1
  59. package/src/sap/fe/macros/field/FieldHelper.js +4 -3
  60. package/src/sap/fe/macros/field/FieldHelper.ts +7 -1
  61. package/src/sap/fe/macros/field/FieldRuntime.js +38 -8
  62. package/src/sap/fe/macros/field/FieldRuntime.ts +65 -7
  63. package/src/sap/fe/macros/field/FieldRuntimeHelper.js +3 -34
  64. package/src/sap/fe/macros/field/FieldRuntimeHelper.ts +28 -53
  65. package/src/sap/fe/macros/field/FieldTemplating.js +5 -4
  66. package/src/sap/fe/macros/field/FieldTemplating.ts +6 -4
  67. package/src/sap/fe/macros/filter/FilterFieldHelper.js +6 -4
  68. package/src/sap/fe/macros/filter/FilterFieldHelper.ts +7 -2
  69. package/src/sap/fe/macros/filter/FilterUtils.js +100 -36
  70. package/src/sap/fe/macros/filter/FilterUtils.ts +127 -39
  71. package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.js +2 -2
  72. package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.ts +1 -1
  73. package/src/sap/fe/macros/filterBar/FilterBar.block.js +4 -3
  74. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +19 -8
  75. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +10 -7
  76. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +31 -16
  77. package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +4 -3
  78. package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +5 -2
  79. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +4 -3
  80. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +3 -2
  81. package/src/sap/fe/macros/form/Form.block.js +27 -2
  82. package/src/sap/fe/macros/form/Form.block.ts +31 -11
  83. package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -3
  84. package/src/sap/fe/macros/form/FormContainer.block.js +96 -65
  85. package/src/sap/fe/macros/form/FormContainer.block.ts +104 -65
  86. package/src/sap/fe/macros/formatters/TableFormatter.js +13 -10
  87. package/src/sap/fe/macros/formatters/TableFormatter.ts +11 -9
  88. package/src/sap/fe/macros/formatters/VisualFilterFormatter.js +6 -4
  89. package/src/sap/fe/macros/formatters/VisualFilterFormatter.ts +5 -5
  90. package/src/sap/fe/macros/inlineEdit/InlineEdit.js +5 -5
  91. package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +4 -4
  92. package/src/sap/fe/macros/insights/InsightsService.js +3 -2
  93. package/src/sap/fe/macros/insights/InsightsService.ts +2 -1
  94. package/src/sap/fe/macros/internal/DataPoint.js +7 -8
  95. package/src/sap/fe/macros/internal/DataPoint.tsx +6 -9
  96. package/src/sap/fe/macros/internal/field/DisplayStyle.js +8 -6
  97. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +7 -8
  98. package/src/sap/fe/macros/internal/field/EditStyle.js +9 -20
  99. package/src/sap/fe/macros/internal/field/EditStyle.tsx +17 -41
  100. package/src/sap/fe/macros/internal/field/FieldBlockStructure.js +2 -2
  101. package/src/sap/fe/macros/internal/field/FieldBlockStructure.tsx +1 -1
  102. package/src/sap/fe/macros/internal/field/FieldStructure.js +1 -2
  103. package/src/sap/fe/macros/internal/field/FieldStructure.tsx +0 -2
  104. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +7 -7
  105. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +17 -11
  106. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +6 -2
  107. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +5 -1
  108. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.js +9 -6
  109. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.ts +7 -5
  110. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
  111. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +6 -6
  112. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +5 -2
  113. package/src/sap/fe/macros/library.js +3 -3
  114. package/src/sap/fe/macros/library.ts +2 -0
  115. package/src/sap/fe/macros/mdc/adapter/StateHelper.js +15 -5
  116. package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +21 -5
  117. package/src/sap/fe/macros/messagebundle.properties +7 -5
  118. package/src/sap/fe/macros/messagebundle_ar.properties +12 -3
  119. package/src/sap/fe/macros/messagebundle_bg.properties +13 -4
  120. package/src/sap/fe/macros/messagebundle_ca.properties +12 -3
  121. package/src/sap/fe/macros/messagebundle_cnr.properties +12 -3
  122. package/src/sap/fe/macros/messagebundle_cs.properties +11 -2
  123. package/src/sap/fe/macros/messagebundle_cy.properties +12 -3
  124. package/src/sap/fe/macros/messagebundle_da.properties +12 -3
  125. package/src/sap/fe/macros/messagebundle_de.properties +16 -7
  126. package/src/sap/fe/macros/messagebundle_el.properties +13 -4
  127. package/src/sap/fe/macros/messagebundle_en.properties +13 -4
  128. package/src/sap/fe/macros/messagebundle_en_GB.properties +13 -4
  129. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +12 -3
  130. package/src/sap/fe/macros/messagebundle_es.properties +12 -3
  131. package/src/sap/fe/macros/messagebundle_es_MX.properties +12 -3
  132. package/src/sap/fe/macros/messagebundle_et.properties +12 -3
  133. package/src/sap/fe/macros/messagebundle_fi.properties +12 -3
  134. package/src/sap/fe/macros/messagebundle_fr.properties +12 -3
  135. package/src/sap/fe/macros/messagebundle_fr_CA.properties +12 -3
  136. package/src/sap/fe/macros/messagebundle_hi.properties +12 -3
  137. package/src/sap/fe/macros/messagebundle_hr.properties +13 -4
  138. package/src/sap/fe/macros/messagebundle_hu.properties +12 -3
  139. package/src/sap/fe/macros/messagebundle_id.properties +18 -9
  140. package/src/sap/fe/macros/messagebundle_it.properties +12 -3
  141. package/src/sap/fe/macros/messagebundle_iw.properties +12 -3
  142. package/src/sap/fe/macros/messagebundle_ja.properties +12 -3
  143. package/src/sap/fe/macros/messagebundle_kk.properties +11 -2
  144. package/src/sap/fe/macros/messagebundle_ko.properties +13 -4
  145. package/src/sap/fe/macros/messagebundle_lt.properties +12 -3
  146. package/src/sap/fe/macros/messagebundle_lv.properties +12 -3
  147. package/src/sap/fe/macros/messagebundle_mk.properties +12 -3
  148. package/src/sap/fe/macros/messagebundle_ms.properties +12 -3
  149. package/src/sap/fe/macros/messagebundle_nl.properties +12 -3
  150. package/src/sap/fe/macros/messagebundle_no.properties +12 -3
  151. package/src/sap/fe/macros/messagebundle_pl.properties +12 -3
  152. package/src/sap/fe/macros/messagebundle_pt.properties +12 -3
  153. package/src/sap/fe/macros/messagebundle_pt_PT.properties +12 -3
  154. package/src/sap/fe/macros/messagebundle_ro.properties +13 -4
  155. package/src/sap/fe/macros/messagebundle_ru.properties +12 -3
  156. package/src/sap/fe/macros/messagebundle_sh.properties +12 -3
  157. package/src/sap/fe/macros/messagebundle_sk.properties +12 -3
  158. package/src/sap/fe/macros/messagebundle_sl.properties +13 -4
  159. package/src/sap/fe/macros/messagebundle_sr.properties +12 -3
  160. package/src/sap/fe/macros/messagebundle_sv.properties +12 -3
  161. package/src/sap/fe/macros/messagebundle_th.properties +11 -2
  162. package/src/sap/fe/macros/messagebundle_tr.properties +12 -3
  163. package/src/sap/fe/macros/messagebundle_uk.properties +12 -3
  164. package/src/sap/fe/macros/messagebundle_vi.properties +13 -4
  165. package/src/sap/fe/macros/messagebundle_zh_CN.properties +12 -3
  166. package/src/sap/fe/macros/messagebundle_zh_TW.properties +12 -3
  167. package/src/sap/fe/macros/richtexteditor/ButtonGroup.js +2 -2
  168. package/src/sap/fe/macros/richtexteditor/ButtonGroup.ts +2 -2
  169. package/src/sap/fe/macros/table/Action.js +15 -2
  170. package/src/sap/fe/macros/table/Action.ts +11 -1
  171. package/src/sap/fe/macros/table/ActionGroup.js +15 -2
  172. package/src/sap/fe/macros/table/ActionGroup.ts +8 -0
  173. package/src/sap/fe/macros/table/ActionGroupOverride.js +14 -2
  174. package/src/sap/fe/macros/table/ActionGroupOverride.ts +7 -0
  175. package/src/sap/fe/macros/table/ActionOverride.js +14 -2
  176. package/src/sap/fe/macros/table/ActionOverride.ts +7 -0
  177. package/src/sap/fe/macros/table/ActionsTemplating.js +16 -2
  178. package/src/sap/fe/macros/table/ActionsTemplating.tsx +15 -0
  179. package/src/sap/fe/macros/table/MdcTableTemplate.js +91 -10
  180. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +131 -10
  181. package/src/sap/fe/macros/table/OverflowGroups.js +59 -0
  182. package/src/sap/fe/macros/table/OverflowGroups.ts +27 -0
  183. package/src/sap/fe/macros/table/Table.block.js +70 -29
  184. package/src/sap/fe/macros/table/Table.block.tsx +65 -12
  185. package/src/sap/fe/macros/table/TableAPI.js +169 -131
  186. package/src/sap/fe/macros/table/TableAPI.ts +58 -28
  187. package/src/sap/fe/macros/table/TableDefinition.js +19 -2
  188. package/src/sap/fe/macros/table/TableDefinition.ts +17 -1
  189. package/src/sap/fe/macros/table/TableEventHandlerProvider.js +4 -3
  190. package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +8 -9
  191. package/src/sap/fe/macros/table/TableHelper.js +5 -2
  192. package/src/sap/fe/macros/table/TableHelper.ts +5 -2
  193. package/src/sap/fe/macros/table/TableRuntime.js +2 -2
  194. package/src/sap/fe/macros/table/TableRuntime.ts +4 -6
  195. package/src/sap/fe/macros/table/TableSizeHelper.js +4 -4
  196. package/src/sap/fe/macros/table/TableSizeHelper.ts +6 -11
  197. package/src/sap/fe/macros/table/delegates/TableDelegate.js +67 -26
  198. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +108 -118
  199. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +2 -2
  200. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +1 -1
  201. package/src/sap/fe/macros/table/massEdit/MassEditField.js +1 -1
  202. package/src/sap/fe/macros/table/massEdit/MassEditField.tsx +3 -6
  203. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +6 -5
  204. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +10 -4
  205. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +7 -9
  206. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +7 -8
  207. package/src/sap/fe/macros/table/mixin/TableExport.js +1 -1
  208. package/src/sap/fe/macros/table/mixin/TableExport.ts +3 -3
  209. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.js +4 -4
  210. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.ts +3 -3
  211. package/src/sap/fe/macros/visualfilters/VisualFilter.js +20 -2
  212. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +28 -6
  213. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +6 -3
  214. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +4 -3
  215. package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.js +3 -3
  216. package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.tsx +10 -4
  217. package/src/sap/fe/macros/visualfilters/fragments/InteractiveDonutChart.fragment.xml +1 -1
@@ -17,6 +17,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/annotations
17
17
  var isNavigationProperty = TypeGuards.isNavigationProperty;
18
18
  var isAnnotationOfType = TypeGuards.isAnnotationOfType;
19
19
  var isAnnotationOfTerm = TypeGuards.isAnnotationOfTerm;
20
+ var isActionParameter = TypeGuards.isActionParameter;
20
21
  var isDataFieldForAnnotation = DataField.isDataFieldForAnnotation;
21
22
  var transformRecursively = BindingToolkit.transformRecursively;
22
23
  var pathInModel = BindingToolkit.pathInModel;
@@ -143,10 +144,10 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/annotations
143
144
  });
144
145
  }
145
146
  const targetObject = oPropertyDataModelObjectPath.targetObject;
146
- if (isProperty(targetObject)) {
147
+ if (isProperty(targetObject) || isActionParameter(targetObject)) {
147
148
  let oBindingExpression = pathInModel(getContextRelativeTargetObjectPath(oPropertyDataModelObjectPath));
148
149
  if (isPathInModelExpression(oBindingExpression)) {
149
- if (targetObject.annotations?.Communication?.IsEmailAddress) {
150
+ if (isProperty(targetObject) && targetObject.annotations?.Communication?.IsEmailAddress) {
150
151
  oBindingExpression = formatWithTypeInformation(targetObject, oBindingExpression);
151
152
  oBindingExpression.type = "sap.fe.core.type.Email";
152
153
  } else if (targetObject.annotations?.UI?.InputMask) {
@@ -158,7 +159,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/annotations
158
159
  placeholderSymbol: targetObject.annotations.UI.InputMask.PlaceholderSymbol,
159
160
  maskRule: _getMaskingRules(targetObject.annotations.UI.InputMask.Rules)
160
161
  };
161
- } else if (targetObject.annotations?.Common?.Masked?.valueOf()) {
162
+ } else if (isProperty(targetObject) && targetObject.annotations?.Common?.Masked?.valueOf()) {
162
163
  oBindingExpression = formatWithTypeInformation(targetObject, oBindingExpression);
163
164
  oBindingExpression.formatOptions = {
164
165
  ...oBindingExpression.formatOptions,
@@ -695,4 +696,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/annotations
695
696
  _exports.getAvatarShape = getAvatarShape;
696
697
  return _exports;
697
698
  }, false);
698
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhZGRUZXh0QXJyYW5nZW1lbnRUb0JpbmRpbmdFeHByZXNzaW9uIiwiYmluZGluZ0V4cHJlc3Npb25Ub0VuaGFuY2UiLCJmdWxsQ29udGV4dFBhdGgiLCJ0cmFuc2Zvcm1SZWN1cnNpdmVseSIsImV4cHJlc3Npb24iLCJvdXRFeHByZXNzaW9uIiwibW9kZWxOYW1lIiwidW5kZWZpbmVkIiwib1Byb3BlcnR5RGF0YU1vZGVsUGF0aCIsImVuaGFuY2VEYXRhTW9kZWxQYXRoIiwicGF0aCIsIkNvbW1vbkZvcm1hdHRlcnMiLCJnZXRCaW5kaW5nV2l0aFRleHRBcnJhbmdlbWVudCIsIl9leHBvcnRzIiwiZm9ybWF0VmFsdWVSZWN1cnNpdmVseSIsInRhcmdldE9iamVjdCIsImZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24iLCJnZXRUZXh0QmluZGluZ0V4cHJlc3Npb24iLCJvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoIiwiZmllbGRGb3JtYXRPcHRpb25zIiwiZ2V0VGV4dEJpbmRpbmciLCJpbnB1dERhdGFNb2RlbFBhdGgiLCJhc09iamVjdCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImN1c3RvbUZvcm1hdHRlciIsImlzQW5ub3RhdGlvbk9mVHlwZSIsImZpZWxkVmFsdWUiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJWYWx1ZSIsImNvbXBpbGVFeHByZXNzaW9uIiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCIkdGFyZ2V0Iiwib1Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb24iLCJwYXRoSW5Nb2RlbCIsImdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJvVGFyZ2V0QmluZGluZyIsInByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCIsIm9UYXJnZXRQcm9wZXJ0eSIsImFubm90YXRpb25zIiwiVUkiLCJJbnB1dE1hc2siLCJ0eXBlIiwiZm9ybWF0T3B0aW9ucyIsIm1hc2siLCJNYXNrIiwidG9TdHJpbmciLCJwbGFjZWhvbGRlclN5bWJvbCIsIlBsYWNlaG9sZGVyU3ltYm9sIiwibWFza1J1bGUiLCJfZ2V0TWFza2luZ1J1bGVzIiwiUnVsZXMiLCJDb21tb24iLCJNYXNrZWQiLCJ2YWx1ZU9mIiwiZWRpdFN0eWxlIiwiTWVhc3VyZXMiLCJVbml0IiwiSVNPQ3VycmVuY3kiLCJVSUZvcm1hdHRlcnMiLCJnZXRCaW5kaW5nV2l0aFVuaXRPckN1cnJlbmN5Iiwic2hvd09ubHlVbml0RGVjaW1hbHMiLCJwcmVzZXJ2ZURlY2ltYWxzRm9yQ3VycmVuY3kiLCJtZWFzdXJlRGlzcGxheU1vZGUiLCJpc0NvbXBsZXhUeXBlRXhwcmVzc2lvbiIsInNob3dNZWFzdXJlIiwiVGltZXpvbmUiLCJnZXRCaW5kaW5nV2l0aFRpbWV6b25lIiwiSXNUaW1lem9uZSIsImdldEJpbmRpbmdGb3JUaW1lem9uZSIsIkRhdGVUaW1lU3R5bGUiLCJkYXRlVGltZVBhdHRlcm4iLCJkYXRlVGltZVN0eWxlIiwiZ2V0QmluZGluZ0ZvckRhdGVGb3JtYXQiLCJnZXRWYWx1ZUJpbmRpbmciLCJpZ25vcmVVbml0IiwiaWdub3JlRm9ybWF0dGluZyIsImJpbmRpbmdQYXJhbWV0ZXJzIiwidGFyZ2V0VHlwZUFueSIsImtlZXBVbml0IiwiZGVjaW1hbFBhZGRpbmciLCJmb3JEaXNwbGF5Iiwib05hdlBhdGgiLCJ0YXJnZXRFbnRpdHlUeXBlIiwicmVzb2x2ZVBhdGgiLCJ0YXJnZXQiLCJ2aXNpdGVkT2JqZWN0cyIsImZvckVhY2giLCJvTmF2T2JqIiwiaXNOYXZpZ2F0aW9uUHJvcGVydHkiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsInB1c2giLCJpc1Byb3BlcnR5Iiwib0JpbmRpbmdFeHByZXNzaW9uIiwiaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24iLCJDb21tdW5pY2F0aW9uIiwiSXNFbWFpbEFkZHJlc3MiLCJzdHlsZSIsInRhcmdldEZvcm1hdE9wdGlvbnMiLCJTdHJpbmciLCJpc0N1cnJlbmN5T3JVbml0QWxpZ25lZCIsIkV4dGVybmFsSUQiLCJjb25zdHJhaW50cyIsInBhcmFtZXRlcnMiLCJ0YXJnZXRUeXBlIiwiJFR5cGUiLCJnZXRBc3NvY2lhdGVkVGV4dEJpbmRpbmciLCJ0ZXh0UHJvcGVydHlQYXRoIiwiUHJvcGVydHlIZWxwZXIiLCJnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aCIsIm9UZXh0UHJvcGVydHlQYXRoIiwiYWxsb3dQYXRjaCIsInZhbHVlTGlzdE91dFBhcmFtZXRlcnMiLCJWYWx1ZUxpc3QiLCJQYXJhbWV0ZXJzIiwibWFwIiwicGFyYW1ldGVyIiwiTG9jYWxEYXRhUHJvcGVydHkiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJpbmNsdWRlcyIsIiQkbm9QYXRjaCIsImlzVXNlZEluTmF2aWdhdGlvbldpdGhRdWlja1ZpZXdGYWNldHMiLCJvRGF0YU1vZGVsUGF0aCIsIm9Qcm9wZXJ0eSIsImFOYXZpZ2F0aW9uUHJvcGVydGllcyIsImFTZW1hbnRpY09iamVjdHMiLCJTZW1hbnRpY0tleSIsImJJc1VzZWRJbk5hdmlnYXRpb25XaXRoUXVpY2tWaWV3RmFjZXRzIiwib05hdlByb3AiLCJyZWZlcmVudGlhbENvbnN0cmFpbnQiLCJvUmVmQ29uc3RyYWludCIsInNvdXJjZVByb3BlcnR5IiwibmFtZSIsIlF1aWNrVmlld0ZhY2V0cyIsImNvbnRleHRMb2NhdGlvbiIsInRhcmdldEVudGl0eVNldCIsImFJc1RhcmdldFNlbWFudGljS2V5Iiwic29tZSIsIm9TZW1hbnRpYyIsImlzS2V5IiwiaXNSZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0RW5hYmxlZCIsIm9Qcm9wZXJ0eVBhdGgiLCJUZXh0IiwiaGFzVmFsdWVIZWxwIiwidGV4dEFsaWduTW9kZSIsImdldFRleHRBbGlnbm1lbnQiLCJkYXRhRmllbGRNb2RlbFBhdGgiLCJjb21wdXRlZEVkaXRNb2RlIiwiY29uc2lkZXJUZXh0QW5ub3RhdGlvbiIsInR5cGVGb3JBbGlnbm1lbnQiLCJUYXJnZXQiLCJkaXNwbGF5TW9kZSIsInRleHRBbm5vdGF0aW9uIiwidGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiIsIlRleHRBcnJhbmdlbWVudCIsIkZpZWxkSGVscGVyIiwiZ2V0UHJvcGVydHlBbGlnbm1lbnQiLCJnZXRWaXNpYmxlRXhwcmVzc2lvbiIsImdlbmVyYXRlVmlzaWJsZUV4cHJlc3Npb24iLCJ2aXNpYmxlRXhwcmVzc2lvbnNGb3JDb25uZWN0ZWRGaWVsZHNGb3JtRWxlbWVudCIsImRhdGFGaWVsZEZvckFubm90YXRpb24iLCJ2aXNpYmxlRXhwcmVzc2lvbiIsImRhdGFGaWVsZHNCaW5kaW5nRXhwcmVzc2lvbnMiLCJjb25uZWN0ZWRGaWVsZHMiLCJPYmplY3QiLCJ2YWx1ZXMiLCJEYXRhIiwiZmlsdGVyIiwiY29ubmVjdGVkRmllbGQiLCJoYXNPd25Qcm9wZXJ0eSIsImRhdGFGaWVsZCIsImJpbmRpbmdFeHByZXNzaW9uT2JqZWN0Iiwib3IiLCJnZXRRdWlja1ZpZXdCaW5kaW5nIiwiZ2V0UXVpY2tWaWV3VHlwZSIsImRhdGFGaWVsZERhdGFNb2RlbE9iamVjdFBhdGgiLCJVcmwiLCJJc1Bob25lTnVtYmVyIiwiZ2V0U2VtYW50aWNPYmplY3RzIiwiYVNlbU9iakV4cHJUb1Jlc29sdmUiLCJzQ3VzdG9tRGF0YUtleSIsInNDdXN0b21EYXRhVmFsdWUiLCJhU2VtT2JqQ3VzdG9tRGF0YSIsIml0ZW0iLCJrZXkiLCJ2YWx1ZSIsIm9TZW1hbnRpY09iamVjdHNNb2RlbCIsIkpTT05Nb2RlbCIsIiQkdmFsdWVBc1Byb21pc2UiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImdldE11bHRpcGxlTGluZXNGb3JEYXRhRmllbGQiLCJvVGhpcyIsImlzTXVsdGlMaW5lVGV4dCIsIndyYXAiLCJfaGFzVmFsdWVIZWxwVG9TaG93Iiwib1Byb3BlcnR5VW5pdCIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkiLCJvUHJvcGVydHlDdXJyZW5jeSIsImdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5IiwiZ2V0TWluTWF4RGF0ZUV4cHJlc3Npb24iLCJkYXRlQW5ub3RhdGlvbiIsInJlbGF0aXZlTG9jYXRpb24iLCJmaXhlZERhdGUiLCJWYWxpZGF0aW9uIiwiJERhdGUiLCJkYXRlUHJvcGVydHkiLCJmb3JtYXRSZXN1bHQiLCJjb25zdGFudCIsInZhbHVlRm9ybWF0dGVycyIsInByb3ZpZGVEYXRlSW5zdGFuY2UiLCJCaW5kaW5nVG9vbGtpdCIsInNldEVkaXRTdHlsZVByb3BlcnRpZXMiLCJvUHJvcHMiLCJvRGF0YUZpZWxkIiwib25seUVkaXRTdHlsZSIsIk1heGltdW0iLCJNaW5pbXVtIiwicHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiIsInZhbHVlQmluZGluZ0V4cHJlc3Npb24iLCJnZXRCaW5kaW5nRm9yRGF0ZVBpY2tlciIsImVkaXRTdHlsZVBsYWNlaG9sZGVyIiwiUGxhY2Vob2xkZXIiLCJkYXRhUG9pbnRBbm5vdGF0aW9uIiwiaXNEYXRhRmllbGRGb3JBbm5vdGF0aW9uIiwiVmlzdWFsaXphdGlvbiIsIlF1aWNrSW5mbyIsInJhdGluZ0luZGljYXRvclRvb2x0aXAiLCJyYXRpbmdJbmRpY2F0b3JUYXJnZXRWYWx1ZSIsIlRhcmdldFZhbHVlIiwiaGFzU3RhdGljUGVyY2VudFVuaXQiLCJ0ZXh0QmluZGluZ0V4cHJlc3Npb24iLCJkYXRhTW9kZWxQYXRoRXh0ZXJuYWxJRCIsImlzSlNPTk1vZGVsVXNlZEZvclZhbHVlIiwidGVzdCIsImRlc2NyaXB0aW9uIiwiZ2V0UmVsYXRpdmVQYXRocyIsIm1heERhdGVFeHByZXNzaW9uIiwibWluRGF0ZUV4cHJlc3Npb24iLCJzaG93VGltZXpvbmUiLCJNdWx0aUxpbmVUZXh0Iiwic3RhdGljRGVzY3JpcHRpb24iLCJtYXNraW5nUnVsZXMiLCJzeW1ib2wiLCJyZWdleCIsIm1hc2tpbmdSdWxlIiwiTWFza1N5bWJvbCIsIlJlZ0V4cCIsImhhc1NlbWFudGljT2JqZWN0SW5OYXZpZ2F0aW9uT3JQcm9wZXJ0eSIsInByb3BlcnR5IiwiU2VtYW50aWNPYmplY3RIZWxwZXIiLCJoYXNTZW1hbnRpY09iamVjdCIsImxhc3ROYXZQcm9wIiwiZmluZCIsImNvbnRleHROYXZQcm9wIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclZhbHVlIiwiaW5pdGlhbERhdGFNb2RlbE9iamVjdFBhdGgiLCJ2YWx1ZVBhdGgiLCJpc0Fubm90YXRpb25PZlRlcm0iLCJpbmRleE9mIiwicmVwbGFjZSIsImhhc1Byb3BlcnR5SW5zZXJ0UmVzdHJpY3Rpb25zIiwibm9uSW5zZXJ0YWJsZVByb3BlcnRpZXMiLCJnZXRDb250ZXh0UHJvcGVydHlSZXN0cmljdGlvbiIsImNhcGFiaWxpdGllcyIsIkluc2VydFJlc3RyaWN0aW9ucyIsIk5vbkluc2VydGFibGVQcm9wZXJ0aWVzIiwibm9uSW5zZXJ0YWJsZVByb3BlcnR5IiwiZ2V0RHJhZnRJbmRpY2F0b3JWaXNpYmxlQmluZGluZyIsImRyYWZ0SW5kaWNhdG9yS2V5IiwiZ2V0QXZhdGFyU2hhcGUiLCJJc0ltYWdlVVJMIiwiSXNOYXR1cmFsUGVyc29uIiwiSXNJbWFnZSIsImVudGl0eUFubm90YXRpb25UYXJnZXQiLCJhdmF0YXJTaGFwZUV4cHJlc3Npb24iLCJpZkVsc2UiLCJBdmF0YXJTaGFwZSIsIkNpcmNsZSIsIlNxdWFyZSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRmllbGRUZW1wbGF0aW5nLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcblx0TmF2aWdhdGlvblByb3BlcnR5LFxuXHRQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdFByb3BlcnR5LFxuXHRQcm9wZXJ0eUFubm90YXRpb25WYWx1ZSxcblx0U2VydmljZU9iamVjdEFuZEFubm90YXRpb25cbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEVudGl0eVNldEFubm90YXRpb25zX0NhcGFiaWxpdGllcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ2FwYWJpbGl0aWVzX0VkbVwiO1xuaW1wb3J0IHR5cGUge1xuXHRWYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dCxcblx0VmFsdWVMaXN0UGFyYW1ldGVyT3V0VHlwZXMsXG5cdFZhbHVlTGlzdFBhcmFtZXRlclR5cGVzXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5QW5ub3RhdGlvbnMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0VkbV9UeXBlc1wiO1xuaW1wb3J0IHR5cGUge1xuXHREYXRhRmllbGQsXG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZFR5cGVzLFxuXHREYXRhRmllbGRXaXRoQWN0aW9uLFxuXHREYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHREYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgsXG5cdERhdGFGaWVsZFdpdGhVcmwsXG5cdERhdGFQb2ludFR5cGUsXG5cdERhdGFQb2ludFR5cGVUeXBlcyxcblx0SW5wdXRNYXNrUnVsZVR5cGVUeXBlc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcywgVUlBbm5vdGF0aW9uVHlwZXMsIHR5cGUgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIHtcblx0QmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLFxuXHRDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbixcblx0RXhwcmVzc2lvbk9yUHJpbWl0aXZlLFxuXHRGb3JtYXRPcHRpb25zLFxuXHRQYXRoSW5Nb2RlbEV4cHJlc3Npb24sXG5cdFByaW1pdGl2ZVR5cGVcbn0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgKiBhcyBCaW5kaW5nVG9vbGtpdCBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdGNvbXBpbGVFeHByZXNzaW9uLFxuXHRjb25zdGFudCxcblx0Zm9ybWF0UmVzdWx0LFxuXHRmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uLFxuXHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sXG5cdGlmRWxzZSxcblx0aXNDb21wbGV4VHlwZUV4cHJlc3Npb24sXG5cdGlzUGF0aEluTW9kZWxFeHByZXNzaW9uLFxuXHRvcixcblx0cGF0aEluTW9kZWwsXG5cdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5XG59IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHsgaXNEYXRhRmllbGRGb3JBbm5vdGF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvYW5ub3RhdGlvbnMvRGF0YUZpZWxkXCI7XG5pbXBvcnQgdmFsdWVGb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL1ZhbHVlRm9ybWF0dGVyXCI7XG5pbXBvcnQge1xuXHRpc0Fubm90YXRpb25PZlRlcm0sXG5cdGlzQW5ub3RhdGlvbk9mVHlwZSxcblx0aXNOYXZpZ2F0aW9uUHJvcGVydHksXG5cdGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uLFxuXHRpc1Byb3BlcnR5XG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCAqIGFzIENvbW1vbkZvcm1hdHRlcnMgZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvQ29tbW9uRm9ybWF0dGVyc1wiO1xuaW1wb3J0IHsgZ2VuZXJhdGVWaXNpYmxlRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFGaWVsZEZvcm1hdHRlcnNcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7XG5cdGVuaGFuY2VEYXRhTW9kZWxQYXRoLFxuXHRnZXRDb250ZXh0UHJvcGVydHlSZXN0cmljdGlvbixcblx0Z2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCxcblx0Z2V0UmVsYXRpdmVQYXRoc1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgKiBhcyBQcm9wZXJ0eUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IHsgaGFzU3RhdGljUGVyY2VudFVuaXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0ICogYXMgU2VtYW50aWNPYmplY3RIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvU2VtYW50aWNPYmplY3RIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgRGlzcGxheU1vZGUsIFByb3BlcnR5T3JQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgKiBhcyBVSUZvcm1hdHRlcnMgZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgdHlwZSB7IElucHV0TWFza1J1bGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdHlwZS9JbnB1dE1hc2tcIjtcbmltcG9ydCB0eXBlIHsgRmllbGRCbG9ja1Byb3BlcnRpZXMgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9maWVsZC9GaWVsZFN0cnVjdHVyZUhlbHBlclwiO1xuaW1wb3J0IEF2YXRhclNoYXBlIGZyb20gXCJzYXAvbS9BdmF0YXJTaGFwZVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgRmllbGRGb3JtYXRPcHRpb25zIGZyb20gXCIuL0ZpZWxkRm9ybWF0T3B0aW9uc1wiO1xuaW1wb3J0IEZpZWxkSGVscGVyIGZyb20gXCIuL0ZpZWxkSGVscGVyXCI7XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgYWRkIHRoZSB0ZXh0IGFycmFuZ2VtZW50IHRvIGEgYmluZGluZyBleHByZXNzaW9uLlxuICogQHBhcmFtIGJpbmRpbmdFeHByZXNzaW9uVG9FbmhhbmNlIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdG8gYmUgZW5oYW5jZWRcbiAqIEBwYXJhbSBmdWxsQ29udGV4dFBhdGggVGhlIGN1cnJlbnQgY29udGV4dCBwYXRoIHdlJ3JlIG9uICh0byBwcm9wZXJseSByZXNvbHZlIHRoZSB0ZXh0IGFycmFuZ2VtZW50IHByb3BlcnRpZXMpXG4gKiBAcmV0dXJucyBBbiB1cGRhdGVkIGV4cHJlc3Npb24gY29udGFpbmluZyB0aGUgdGV4dCBhcnJhbmdlbWVudCBiaW5kaW5nLlxuICovXG5leHBvcnQgY29uc3QgYWRkVGV4dEFycmFuZ2VtZW50VG9CaW5kaW5nRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChcblx0YmluZGluZ0V4cHJlc3Npb25Ub0VuaGFuY2U6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPixcblx0ZnVsbENvbnRleHRQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPiB7XG5cdHJldHVybiB0cmFuc2Zvcm1SZWN1cnNpdmVseShiaW5kaW5nRXhwcmVzc2lvblRvRW5oYW5jZSwgXCJQYXRoSW5Nb2RlbFwiLCAoZXhwcmVzc2lvbjogUGF0aEluTW9kZWxFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+KSA9PiB7XG5cdFx0bGV0IG91dEV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPiA9IGV4cHJlc3Npb247XG5cdFx0aWYgKGV4cHJlc3Npb24ubW9kZWxOYW1lID09PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIEluIGNhc2Ugb2YgZGVmYXVsdCBtb2RlbCB3ZSB0aGVuIG5lZWQgdG8gcmVzb2x2ZSB0aGUgdGV4dCBhcnJhbmdlbWVudCBwcm9wZXJ0eVxuXHRcdFx0Y29uc3Qgb1Byb3BlcnR5RGF0YU1vZGVsUGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoPFByb3BlcnR5PihmdWxsQ29udGV4dFBhdGgsIGV4cHJlc3Npb24ucGF0aCk7XG5cdFx0XHRvdXRFeHByZXNzaW9uID0gQ29tbW9uRm9ybWF0dGVycy5nZXRCaW5kaW5nV2l0aFRleHRBcnJhbmdlbWVudChvUHJvcGVydHlEYXRhTW9kZWxQYXRoLCBleHByZXNzaW9uKTtcblx0XHR9XG5cdFx0cmV0dXJuIG91dEV4cHJlc3Npb247XG5cdH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdFZhbHVlUmVjdXJzaXZlbHkgPSBmdW5jdGlvbiAoXG5cdGJpbmRpbmdFeHByZXNzaW9uVG9FbmhhbmNlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4sXG5cdGZ1bGxDb250ZXh0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+IHtcblx0cmV0dXJuIHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KGJpbmRpbmdFeHByZXNzaW9uVG9FbmhhbmNlLCBcIlBhdGhJbk1vZGVsXCIsIChleHByZXNzaW9uOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248dW5rbm93bj4pID0+IHtcblx0XHRsZXQgb3V0RXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+ID0gZXhwcmVzc2lvbjtcblx0XHRpZiAoZXhwcmVzc2lvbi5tb2RlbE5hbWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gSW4gY2FzZSBvZiBkZWZhdWx0IG1vZGVsIHdlIHRoZW4gbmVlZCB0byByZXNvbHZlIHRoZSB0ZXh0IGFycmFuZ2VtZW50IHByb3BlcnR5XG5cdFx0XHRjb25zdCBvUHJvcGVydHlEYXRhTW9kZWxQYXRoID0gZW5oYW5jZURhdGFNb2RlbFBhdGg8UHJvcGVydHk+KGZ1bGxDb250ZXh0UGF0aCwgZXhwcmVzc2lvbi5wYXRoKTtcblx0XHRcdGlmIChvUHJvcGVydHlEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCkge1xuXHRcdFx0XHRvdXRFeHByZXNzaW9uID0gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihvUHJvcGVydHlEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCwgZXhwcmVzc2lvbik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvdXRFeHByZXNzaW9uO1xuXHR9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUZXh0QmluZGluZ0V4cHJlc3Npb24gPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRmaWVsZEZvcm1hdE9wdGlvbnM6IFBhcnRpYWw8RmllbGRGb3JtYXRPcHRpb25zPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRyZXR1cm4gZ2V0VGV4dEJpbmRpbmcob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCwgZmllbGRGb3JtYXRPcHRpb25zLCB0cnVlKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUZXh0QmluZGluZyA9IGZ1bmN0aW9uIChcblx0aW5wdXREYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMgfCBQcm9wZXJ0eT4sXG5cdGZpZWxkRm9ybWF0T3B0aW9uczogUGFydGlhbDxGaWVsZEZvcm1hdE9wdGlvbnM+LFxuXHRhc09iamVjdCA9IGZhbHNlLFxuXHRjdXN0b21Gb3JtYXR0ZXI/OiBzdHJpbmdcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRpZiAoXG5cdFx0aXNBbm5vdGF0aW9uT2ZUeXBlPFxuXHRcdFx0fCBEYXRhRmllbGRcblx0XHRcdHwgRGF0YVBvaW50VHlwZVxuXHRcdFx0fCBEYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGhcblx0XHRcdHwgRGF0YUZpZWxkV2l0aFVybFxuXHRcdFx0fCBEYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uXG5cdFx0XHR8IERhdGFGaWVsZFdpdGhBY3Rpb25cblx0XHQ+KGlucHV0RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QsIFtcblx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZCxcblx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGUsXG5cdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgsXG5cdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsLFxuXHRcdFx0VUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbixcblx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb25cblx0XHRdKVxuXHQpIHtcblx0XHQvLyBJZiB0aGVyZSBpcyBubyByZXNvbHZlZCBwcm9wZXJ0eSwgdGhlIHZhbHVlIGlzIHJldHVybmVkIGFzIGEgY29uc3RhbnRcblx0XHRjb25zdCBmaWVsZFZhbHVlID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGlucHV0RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QuVmFsdWUpID8/IFwiXCI7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGZpZWxkVmFsdWUpO1xuXHR9XG5cdGlmIChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihpbnB1dERhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0KSAmJiBpbnB1dERhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0LiR0YXJnZXQpIHtcblx0XHRpbnB1dERhdGFNb2RlbFBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxQcm9wZXJ0eT4oaW5wdXREYXRhTW9kZWxQYXRoLCBpbnB1dERhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0LnBhdGgpO1xuXHR9XG5cdC8vIFdoZW4gdGFyZ2V0T2JqZWN0IGlzIGEgY29uc3RhbnQgdmFsdWVcblx0aWYgKHR5cGVvZiBpbnB1dERhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0ID09PSBcInN0cmluZ1wiKSB7XG5cdFx0cmV0dXJuIGlucHV0RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3Q7XG5cdH1cblx0Y29uc3Qgb1Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb24gPSBwYXRoSW5Nb2RlbChnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKGlucHV0RGF0YU1vZGVsUGF0aCkpO1xuXHRsZXQgb1RhcmdldEJpbmRpbmc7XG5cdGNvbnN0IHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCA9IGlucHV0RGF0YU1vZGVsUGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5PjsgLy8gQXQgdGhpcyBwb2ludCB3ZSBzaG91bGQgb25seSBoYXZlIGEgcHJvcGVydHlcblx0Y29uc3Qgb1RhcmdldFByb3BlcnR5ID0gcHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdDtcblx0Ly8gZm9ybWF0dGluZ1xuXG5cdGlmIChvVGFyZ2V0UHJvcGVydHk/LmFubm90YXRpb25zPy5VST8uSW5wdXRNYXNrKSB7XG5cdFx0b1RhcmdldEJpbmRpbmcgPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKG9UYXJnZXRQcm9wZXJ0eSwgb1Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb24pO1xuXHRcdG9UYXJnZXRCaW5kaW5nLnR5cGUgPSBcInNhcC5mZS5jb3JlLnR5cGUuSW5wdXRNYXNrXCI7XG5cdFx0b1RhcmdldEJpbmRpbmcuZm9ybWF0T3B0aW9ucyA9IHtcblx0XHRcdG1hc2s6IG9UYXJnZXRQcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LklucHV0TWFzaz8uTWFzay50b1N0cmluZygpLFxuXHRcdFx0cGxhY2Vob2xkZXJTeW1ib2w6IG9UYXJnZXRQcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LklucHV0TWFzaz8uUGxhY2Vob2xkZXJTeW1ib2wudG9TdHJpbmcoKSxcblx0XHRcdG1hc2tSdWxlOiBfZ2V0TWFza2luZ1J1bGVzKG9UYXJnZXRQcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LklucHV0TWFzaz8uUnVsZXMpXG5cdFx0fSBhcyB1bmtub3duIGFzIEZvcm1hdE9wdGlvbnM7XG5cdH0gZWxzZSBpZiAob1RhcmdldFByb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5NYXNrZWQ/LnZhbHVlT2YoKSkge1xuXHRcdG9UYXJnZXRCaW5kaW5nID0gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihvVGFyZ2V0UHJvcGVydHksIG9Qcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uKTtcblx0XHRvVGFyZ2V0QmluZGluZy5mb3JtYXRPcHRpb25zID0ge1xuXHRcdFx0ZWRpdFN0eWxlOiBcIk1hc2tlZFwiXG5cdFx0fSBhcyB1bmtub3duIGFzIEZvcm1hdE9wdGlvbnM7XG5cdH0gZWxzZSBpZiAob1RhcmdldFByb3BlcnR5Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQgfHwgb1RhcmdldFByb3BlcnR5Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5KSB7XG5cdFx0b1RhcmdldEJpbmRpbmcgPSBVSUZvcm1hdHRlcnMuZ2V0QmluZGluZ1dpdGhVbml0T3JDdXJyZW5jeShcblx0XHRcdHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHRcdG9Qcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLFxuXHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0e30sXG5cdFx0XHR0cnVlLFxuXHRcdFx0ZmllbGRGb3JtYXRPcHRpb25zLnNob3dPbmx5VW5pdERlY2ltYWxzLFxuXHRcdFx0ZmllbGRGb3JtYXRPcHRpb25zLnByZXNlcnZlRGVjaW1hbHNGb3JDdXJyZW5jeVxuXHRcdCk7XG5cdFx0aWYgKGZpZWxkRm9ybWF0T3B0aW9ucz8ubWVhc3VyZURpc3BsYXlNb2RlID09PSBcIkhpZGRlblwiICYmIGlzQ29tcGxleFR5cGVFeHByZXNzaW9uKG9UYXJnZXRCaW5kaW5nKSkge1xuXHRcdFx0Ly8gVE9ETzogUmVmYWN0b3Igb25jZSB0eXBlcyBhcmUgbGVzcyBnZW5lcmljIGhlcmVcblx0XHRcdG9UYXJnZXRCaW5kaW5nLmZvcm1hdE9wdGlvbnMgPSB7XG5cdFx0XHRcdC4uLm9UYXJnZXRCaW5kaW5nLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdHNob3dNZWFzdXJlOiBmYWxzZVxuXHRcdFx0fTtcblx0XHR9XG5cdH0gZWxzZSBpZiAob1RhcmdldFByb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UaW1lem9uZSAmJiBvVGFyZ2V0UHJvcGVydHkudHlwZSA9PSBcIkVkbS5EYXRlVGltZU9mZnNldFwiKSB7XG5cdFx0b1RhcmdldEJpbmRpbmcgPSBVSUZvcm1hdHRlcnMuZ2V0QmluZGluZ1dpdGhUaW1lem9uZShcblx0XHRcdHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHRcdG9Qcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLFxuXHRcdFx0ZmFsc2UsXG5cdFx0XHR0cnVlLFxuXHRcdFx0ZmllbGRGb3JtYXRPcHRpb25zIGFzIEZpZWxkRm9ybWF0T3B0aW9uc1xuXHRcdCk7XG5cdH0gZWxzZSBpZiAob1RhcmdldFByb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc1RpbWV6b25lKSB7XG5cdFx0b1RhcmdldEJpbmRpbmcgPSBVSUZvcm1hdHRlcnMuZ2V0QmluZGluZ0ZvclRpbWV6b25lKHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCwgb1Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb24pO1xuXHR9IGVsc2UgaWYgKFxuXHRcdG9UYXJnZXRQcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LlVJPy5EYXRlVGltZVN0eWxlIHx8XG5cdFx0ZmllbGRGb3JtYXRPcHRpb25zPy5kYXRlVGltZVBhdHRlcm4gfHxcblx0XHRmaWVsZEZvcm1hdE9wdGlvbnM/LmRhdGVUaW1lU3R5bGVcblx0KSB7XG5cdFx0b1RhcmdldEJpbmRpbmcgPSBVSUZvcm1hdHRlcnMuZ2V0QmluZGluZ0ZvckRhdGVGb3JtYXQocHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLCBvUHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiwgZmllbGRGb3JtYXRPcHRpb25zKTtcblx0fSBlbHNlIHtcblx0XHRvVGFyZ2V0QmluZGluZyA9IENvbW1vbkZvcm1hdHRlcnMuZ2V0QmluZGluZ1dpdGhUZXh0QXJyYW5nZW1lbnQoXG5cdFx0XHRwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0XHRvUHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbixcblx0XHRcdGZpZWxkRm9ybWF0T3B0aW9ucyxcblx0XHRcdGN1c3RvbUZvcm1hdHRlclxuXHRcdCk7XG5cdH1cblxuXHRpZiAoYXNPYmplY3QpIHtcblx0XHRyZXR1cm4gb1RhcmdldEJpbmRpbmc7XG5cdH1cblx0Ly8gV2UgZG9uJ3QgaW5jbHVkZSAkJG5vcGF0Y2ggYW5kIHBhcnNlS2VlcEVtcHR5U3RyaW5nIGFzIHRoZXkgbWFrZSBubyBzZW5zZSBpbiB0aGUgdGV4dCBiaW5kaW5nIGNhc2Vcblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKG9UYXJnZXRCaW5kaW5nKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWYWx1ZUJpbmRpbmcgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHkgfCBEYXRhRmllbGRUeXBlcz4sXG5cdGZpZWxkRm9ybWF0T3B0aW9uczogUGFydGlhbDxGaWVsZEZvcm1hdE9wdGlvbnM+LFxuXHRpZ25vcmVVbml0ID0gZmFsc2UsXG5cdGlnbm9yZUZvcm1hdHRpbmcgPSBmYWxzZSxcblx0YmluZGluZ1BhcmFtZXRlcnM/OiBvYmplY3QsXG5cdHRhcmdldFR5cGVBbnkgPSBmYWxzZSxcblx0a2VlcFVuaXQgPSBmYWxzZSxcblx0ZGVjaW1hbFBhZGRpbmc/OiBudW1iZXIsXG5cdGZvckRpc3BsYXkgPSBmYWxzZSxcblx0YXNPYmplY3QgPSBmYWxzZVxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRpZiAoaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QpICYmIG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LiR0YXJnZXQpIHtcblx0XHRjb25zdCBvTmF2UGF0aCA9IG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0RW50aXR5VHlwZS5yZXNvbHZlUGF0aChvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5wYXRoLCB0cnVlKTtcblx0XHRvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCA9IG9OYXZQYXRoLnRhcmdldDtcblx0XHRvTmF2UGF0aC52aXNpdGVkT2JqZWN0cy5mb3JFYWNoKChvTmF2T2JqOiBTZXJ2aWNlT2JqZWN0QW5kQW5ub3RhdGlvbikgPT4ge1xuXHRcdFx0aWYgKGlzTmF2aWdhdGlvblByb3BlcnR5KG9OYXZPYmopKSB7XG5cdFx0XHRcdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXMucHVzaChvTmF2T2JqKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdGNvbnN0IHRhcmdldE9iamVjdCA9IG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0O1xuXHRpZiAoaXNQcm9wZXJ0eSh0YXJnZXRPYmplY3QpKSB7XG5cdFx0bGV0IG9CaW5kaW5nRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+ID0gcGF0aEluTW9kZWwoXG5cdFx0XHRnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgpXG5cdFx0KTtcblx0XHRpZiAoaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24ob0JpbmRpbmdFeHByZXNzaW9uKSkge1xuXHRcdFx0aWYgKHRhcmdldE9iamVjdC5hbm5vdGF0aW9ucz8uQ29tbXVuaWNhdGlvbj8uSXNFbWFpbEFkZHJlc3MpIHtcblx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uID0gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbih0YXJnZXRPYmplY3QsIG9CaW5kaW5nRXhwcmVzc2lvbik7XG5cdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbi50eXBlID0gXCJzYXAuZmUuY29yZS50eXBlLkVtYWlsXCI7XG5cdFx0XHR9IGVsc2UgaWYgKHRhcmdldE9iamVjdC5hbm5vdGF0aW9ucz8uVUk/LklucHV0TWFzaykge1xuXHRcdFx0XHRvQmluZGluZ0V4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKHRhcmdldE9iamVjdCwgb0JpbmRpbmdFeHByZXNzaW9uKTtcblx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uLnR5cGUgPSBcInNhcC5mZS5jb3JlLnR5cGUuSW5wdXRNYXNrXCI7XG5cdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zID0ge1xuXHRcdFx0XHRcdC4uLm9CaW5kaW5nRXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zLFxuXHRcdFx0XHRcdG1hc2s6IHRhcmdldE9iamVjdC5hbm5vdGF0aW9ucy5VSS5JbnB1dE1hc2suTWFzayxcblx0XHRcdFx0XHRwbGFjZWhvbGRlclN5bWJvbDogdGFyZ2V0T2JqZWN0LmFubm90YXRpb25zLlVJLklucHV0TWFzay5QbGFjZWhvbGRlclN5bWJvbCxcblx0XHRcdFx0XHRtYXNrUnVsZTogX2dldE1hc2tpbmdSdWxlcyh0YXJnZXRPYmplY3QuYW5ub3RhdGlvbnMuVUkuSW5wdXRNYXNrLlJ1bGVzKVxuXHRcdFx0XHR9IGFzIEZvcm1hdE9wdGlvbnM7XG5cdFx0XHR9IGVsc2UgaWYgKHRhcmdldE9iamVjdC5hbm5vdGF0aW9ucz8uQ29tbW9uPy5NYXNrZWQ/LnZhbHVlT2YoKSkge1xuXHRcdFx0XHRvQmluZGluZ0V4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKHRhcmdldE9iamVjdCwgb0JpbmRpbmdFeHByZXNzaW9uKTtcblx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMgPSB7XG5cdFx0XHRcdFx0Li4ub0JpbmRpbmdFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdFx0c3R5bGU6IFwicGFzc3dvcmRcIlxuXHRcdFx0XHR9IGFzIEZvcm1hdE9wdGlvbnM7XG5cdFx0XHR9IGVsc2UgaWYgKCFpZ25vcmVVbml0ICYmICh0YXJnZXRPYmplY3QuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeSB8fCB0YXJnZXRPYmplY3QuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0KSkge1xuXHRcdFx0XHRjb25zdCB0YXJnZXRGb3JtYXRPcHRpb25zOiB7XG5cdFx0XHRcdFx0c2hvd01lYXN1cmU/OiBib29sZWFuO1xuXHRcdFx0XHRcdGRlY2ltYWxQYWRkaW5nPzogbnVtYmVyO1xuXHRcdFx0XHR9ID0ge307XG5cdFx0XHRcdGlmICgha2VlcFVuaXQpIHtcblx0XHRcdFx0XHR0YXJnZXRGb3JtYXRPcHRpb25zW1wic2hvd01lYXN1cmVcIl0gPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoU3RyaW5nKGZpZWxkRm9ybWF0T3B0aW9ucy5pc0N1cnJlbmN5T3JVbml0QWxpZ25lZCkgPT09IFwidHJ1ZVwiKSB7XG5cdFx0XHRcdFx0dGFyZ2V0Rm9ybWF0T3B0aW9uc1tcImRlY2ltYWxQYWRkaW5nXCJdID0gZGVjaW1hbFBhZGRpbmc7XG5cdFx0XHRcdH1cblx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uID0gVUlGb3JtYXR0ZXJzLmdldEJpbmRpbmdXaXRoVW5pdE9yQ3VycmVuY3koXG5cdFx0XHRcdFx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pixcblx0XHRcdFx0XHRvQmluZGluZ0V4cHJlc3Npb24sXG5cdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHRrZWVwVW5pdCA/IHVuZGVmaW5lZCA6IHRhcmdldEZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdFx0Zm9yRGlzcGxheSxcblx0XHRcdFx0XHRmaWVsZEZvcm1hdE9wdGlvbnMuc2hvd09ubHlVbml0RGVjaW1hbHMsXG5cdFx0XHRcdFx0ZmllbGRGb3JtYXRPcHRpb25zLnByZXNlcnZlRGVjaW1hbHNGb3JDdXJyZW5jeVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIGlmICh0YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5Db21tb24/LklzVGltZXpvbmUpIHtcblx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uID0gVUlGb3JtYXR0ZXJzLmdldEJpbmRpbmdGb3JUaW1lem9uZShcblx0XHRcdFx0XHRvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRcdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvblxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0dGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uVUk/LkRhdGVUaW1lU3R5bGUgfHxcblx0XHRcdFx0ZmllbGRGb3JtYXRPcHRpb25zPy5kYXRlVGltZVBhdHRlcm4gfHxcblx0XHRcdFx0ZmllbGRGb3JtYXRPcHRpb25zPy5kYXRlVGltZVN0eWxlXG5cdFx0XHQpIHtcblx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uID0gVUlGb3JtYXR0ZXJzLmdldEJpbmRpbmdGb3JEYXRlRm9ybWF0KFxuXHRcdFx0XHRcdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdFx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uLFxuXHRcdFx0XHRcdGZpZWxkRm9ybWF0T3B0aW9uc1xuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIGlmICh0YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5Db21tb24/LlRpbWV6b25lICYmIHRhcmdldE9iamVjdC50eXBlID09PSBcIkVkbS5EYXRlVGltZU9mZnNldFwiKSB7XG5cdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbiA9IFVJRm9ybWF0dGVycy5nZXRCaW5kaW5nV2l0aFRpbWV6b25lKFxuXHRcdFx0XHRcdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdFx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uLFxuXHRcdFx0XHRcdHRydWVcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbiA9IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24odGFyZ2V0T2JqZWN0LCBvQmluZGluZ0V4cHJlc3Npb24pO1xuXHRcdFx0XHRpZiAodGFyZ2V0T2JqZWN0LmFubm90YXRpb25zLkNvbW1vbj8uRXh0ZXJuYWxJRCkge1xuXHRcdFx0XHRcdChvQmluZGluZ0V4cHJlc3Npb24gYXMgeyBwYXRoOiBzdHJpbmcgfSkucGF0aCArPSBcIkAkdWk1LmZlLkBDb21tb24vRXh0ZXJuYWxJRFwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc1BhdGhJbk1vZGVsRXhwcmVzc2lvbihvQmluZGluZ0V4cHJlc3Npb24pKSB7XG5cdFx0XHRcdGlmIChpZ25vcmVGb3JtYXR0aW5nKSB7XG5cdFx0XHRcdFx0ZGVsZXRlIG9CaW5kaW5nRXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zO1xuXHRcdFx0XHRcdGRlbGV0ZSBvQmluZGluZ0V4cHJlc3Npb24uY29uc3RyYWludHM7XG5cdFx0XHRcdFx0ZGVsZXRlIG9CaW5kaW5nRXhwcmVzc2lvbi50eXBlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChiaW5kaW5nUGFyYW1ldGVycykge1xuXHRcdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbi5wYXJhbWV0ZXJzID0gYmluZGluZ1BhcmFtZXRlcnM7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRhcmdldFR5cGVBbnkpIHtcblx0XHRcdFx0XHRvQmluZGluZ0V4cHJlc3Npb24udGFyZ2V0VHlwZSA9IFwiYW55XCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChhc09iamVjdCkge1xuXHRcdFx0XHRyZXR1cm4gb0JpbmRpbmdFeHByZXNzaW9uIGFzIHVua25vd24gYXMgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24ob0JpbmRpbmdFeHByZXNzaW9uKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gaWYgc29tZWhvdyB3ZSBjb3VsZCBub3QgY29tcGlsZSB0aGUgYmluZGluZyAtPiByZXR1cm4gZW1wdHkgc3RyaW5nXG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9XG5cdH0gZWxzZSBpZiAoXG5cdFx0dGFyZ2V0T2JqZWN0Py4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybCB8fFxuXHRcdHRhcmdldE9iamVjdD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aFxuXHQpIHtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKCh0YXJnZXRPYmplY3QgYXMgRGF0YUZpZWxkV2l0aFVybCkuVmFsdWUpKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxufTtcblxuZXhwb3J0IGNvbnN0IGdldEFzc29jaWF0ZWRUZXh0QmluZGluZyA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdGZpZWxkRm9ybWF0T3B0aW9uczogUGFydGlhbDxGaWVsZEZvcm1hdE9wdGlvbnM+XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IHRleHRQcm9wZXJ0eVBhdGggPSBQcm9wZXJ0eUhlbHBlci5nZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aChvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCk7XG5cdGlmICh0ZXh0UHJvcGVydHlQYXRoKSB7XG5cdFx0Y29uc3Qgb1RleHRQcm9wZXJ0eVBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxQcm9wZXJ0eT4ob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCwgdGV4dFByb3BlcnR5UGF0aCk7XG5cdFx0Ly9CQ1AgMjM4MDEyMDgwNjogZ2V0VmFsdWVCaW5kaW5nIG5lZWRzIHRvIGJlIGFibGUgdG8gc2V0IGZvcm1hdE9wdGlvbnMucGFyc2VLZWVwc0VtcHR5U3RyaW5nLlxuXHRcdC8vT3RoZXJ3aXNlIGVtcHR5aW5nIGFuIGlucHV0IGZpZWxkIHRoYXQgaGFzIGEgdGV4dCBhbm5vdGF0aW9uIHRvIGEgbm90IG51bGxhYmxlIHN0cmluZyB3b3VsZCByZXN1bHQgaW5cblx0XHQvL2FuIGVycm9yIG1lc3NhZ2UuIFRoZXJlZm9yZSBpbXBvcnQgcGFyYW0gJ2lnbm9yZUZvcm1hdHRpbmcnIGlzIG5vdyBzZXQgdG8gZmFsc2UuXG5cdFx0bGV0IGFsbG93UGF0Y2ggPSBmYWxzZTtcblx0XHRjb25zdCB2YWx1ZUxpc3RPdXRQYXJhbWV0ZXJzOiBzdHJpbmdbXSA9XG5cdFx0XHRvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0Py5QYXJhbWV0ZXJzLm1hcChcblx0XHRcdFx0KHBhcmFtZXRlcjogVmFsdWVMaXN0UGFyYW1ldGVyVHlwZXMpID0+IHtcblx0XHRcdFx0XHRpZiAoIXBhcmFtZXRlcikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQocGFyYW1ldGVyIGFzIFZhbHVlTGlzdFBhcmFtZXRlckluT3V0IHwgVmFsdWVMaXN0UGFyYW1ldGVyT3V0VHlwZXMpPy5Mb2NhbERhdGFQcm9wZXJ0eT8uJHRhcmdldFxuXHRcdFx0XHRcdFx0XHQ/LmZ1bGx5UXVhbGlmaWVkTmFtZSA/PyBcIlwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0KSB8fCBbXTtcblx0XHRpZiAoXG5cdFx0XHRvVGV4dFByb3BlcnR5UGF0aD8udGFyZ2V0T2JqZWN0Py5mdWxseVF1YWxpZmllZE5hbWUgJiZcblx0XHRcdHZhbHVlTGlzdE91dFBhcmFtZXRlcnMuaW5jbHVkZXMob1RleHRQcm9wZXJ0eVBhdGgudGFyZ2V0T2JqZWN0LmZ1bGx5UXVhbGlmaWVkTmFtZSlcblx0XHQpIHtcblx0XHRcdGFsbG93UGF0Y2ggPSB0cnVlO1xuXHRcdH1cblx0XHRjb25zdCBiaW5kaW5nUGFyYW1ldGVycyA9IGFsbG93UGF0Y2ggPyB1bmRlZmluZWQgOiB7ICQkbm9QYXRjaDogdHJ1ZSB9O1xuXHRcdHJldHVybiBnZXRWYWx1ZUJpbmRpbmcob1RleHRQcm9wZXJ0eVBhdGgsIGZpZWxkRm9ybWF0T3B0aW9ucywgdHJ1ZSwgZmFsc2UsIGJpbmRpbmdQYXJhbWV0ZXJzLCBmYWxzZSwgZmFsc2UsIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1VzZWRJbk5hdmlnYXRpb25XaXRoUXVpY2tWaWV3RmFjZXRzID0gZnVuY3Rpb24gKG9EYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+LCBvUHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdGNvbnN0IGFOYXZpZ2F0aW9uUHJvcGVydGllcyA9IG9EYXRhTW9kZWxQYXRoPy50YXJnZXRFbnRpdHlUeXBlPy5uYXZpZ2F0aW9uUHJvcGVydGllcyB8fCBbXTtcblx0Y29uc3QgYVNlbWFudGljT2JqZWN0cyA9IG9EYXRhTW9kZWxQYXRoPy50YXJnZXRFbnRpdHlUeXBlPy5hbm5vdGF0aW9ucz8uQ29tbW9uPy5TZW1hbnRpY0tleSB8fCBbXTtcblx0bGV0IGJJc1VzZWRJbk5hdmlnYXRpb25XaXRoUXVpY2tWaWV3RmFjZXRzID0gZmFsc2U7XG5cdGFOYXZpZ2F0aW9uUHJvcGVydGllcy5mb3JFYWNoKChvTmF2UHJvcDogTmF2aWdhdGlvblByb3BlcnR5KSA9PiB7XG5cdFx0aWYgKG9OYXZQcm9wLnJlZmVyZW50aWFsQ29uc3RyYWludCAmJiBvTmF2UHJvcC5yZWZlcmVudGlhbENvbnN0cmFpbnQubGVuZ3RoKSB7XG5cdFx0XHRvTmF2UHJvcC5yZWZlcmVudGlhbENvbnN0cmFpbnQuZm9yRWFjaCgob1JlZkNvbnN0cmFpbnQpID0+IHtcblx0XHRcdFx0aWYgKG9SZWZDb25zdHJhaW50Py5zb3VyY2VQcm9wZXJ0eSA9PT0gb1Byb3BlcnR5Lm5hbWUpIHtcblx0XHRcdFx0XHRpZiAob05hdlByb3A/LnRhcmdldFR5cGU/LmFubm90YXRpb25zPy5VST8uUXVpY2tWaWV3RmFjZXRzKSB7XG5cdFx0XHRcdFx0XHRiSXNVc2VkSW5OYXZpZ2F0aW9uV2l0aFF1aWNrVmlld0ZhY2V0cyA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xuXHRpZiAob0RhdGFNb2RlbFBhdGguY29udGV4dExvY2F0aW9uPy50YXJnZXRFbnRpdHlTZXQgIT09IG9EYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVNldCkge1xuXHRcdGNvbnN0IGFJc1RhcmdldFNlbWFudGljS2V5ID0gYVNlbWFudGljT2JqZWN0cy5zb21lKGZ1bmN0aW9uIChvU2VtYW50aWMpIHtcblx0XHRcdHJldHVybiBvU2VtYW50aWM/LiR0YXJnZXQ/Lm5hbWUgPT09IG9Qcm9wZXJ0eS5uYW1lO1xuXHRcdH0pO1xuXHRcdGlmICgoYUlzVGFyZ2V0U2VtYW50aWNLZXkgfHwgb1Byb3BlcnR5LmlzS2V5KSAmJiBvRGF0YU1vZGVsUGF0aD8udGFyZ2V0RW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LlVJPy5RdWlja1ZpZXdGYWNldHMpIHtcblx0XHRcdGJJc1VzZWRJbk5hdmlnYXRpb25XaXRoUXVpY2tWaWV3RmFjZXRzID0gdHJ1ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGJJc1VzZWRJbk5hdmlnYXRpb25XaXRoUXVpY2tWaWV3RmFjZXRzO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzUmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdEVuYWJsZWQgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0ZmllbGRGb3JtYXRPcHRpb25zOiB7IGRpc3BsYXlNb2RlPzogRGlzcGxheU1vZGU7IHRleHRBbGlnbk1vZGU/OiBzdHJpbmcgfVxuKTogYm9vbGVhbiB7XG5cdGNvbnN0IG9Qcm9wZXJ0eTogUHJvcGVydHkgPSAoaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCkgJiYgb1Byb3BlcnR5UGF0aC4kdGFyZ2V0KSB8fCAob1Byb3BlcnR5UGF0aCBhcyBQcm9wZXJ0eSk7XG5cdGlmIChcblx0XHQhb1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LlRleHQgJiZcblx0XHQhb1Byb3BlcnR5LmFubm90YXRpb25zPy5NZWFzdXJlcyAmJlxuXHRcdFByb3BlcnR5SGVscGVyLmhhc1ZhbHVlSGVscChvUHJvcGVydHkpICYmXG5cdFx0ZmllbGRGb3JtYXRPcHRpb25zLnRleHRBbGlnbk1vZGUgPT09IFwiRm9ybVwiXG5cdCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0ZXh0IGFsaWdubWVudCBiYXNlZCBvbiB0aGUgZGF0YU1vZGVsT2JqZWN0UGF0aC5cbiAqIEBwYXJhbSBkYXRhRmllbGRNb2RlbFBhdGggVGhlIHByb3BlcnR5J3MgdHlwZVxuICogQHBhcmFtIGZvcm1hdE9wdGlvbnMgVGhlIGZpZWxkIGZvcm1hdCBvcHRpb25zXG4gKiBAcGFyYW0gZm9ybWF0T3B0aW9ucy5kaXNwbGF5TW9kZSBEaXNwbGF5IGZvcm1hdFxuICogQHBhcmFtIGZvcm1hdE9wdGlvbnMudGV4dEFsaWduTW9kZSBUZXh0IGFsaWdubWVudCBvZiB0aGUgZmllbGRcbiAqIEBwYXJhbSBjb21wdXRlZEVkaXRNb2RlIFRoZSBlZGl0TW9kZSB1c2VkIGluIHRoaXMgY2FzZVxuICogQHBhcmFtIGNvbnNpZGVyVGV4dEFubm90YXRpb24gV2hldGhlciB0byBjb25zaWRlciB0aGUgdGV4dCBhbm5vdGF0aW9uIHdoZW4gY29tcHV0aW5nIHRoZSBhbGlnbm1lbnRcbiAqIEByZXR1cm5zIFRoZSBwcm9wZXJ0eSBhbGlnbm1lbnRcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFRleHRBbGlnbm1lbnQgPSBmdW5jdGlvbiAoXG5cdGRhdGFGaWVsZE1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPixcblx0Zm9ybWF0T3B0aW9uczogeyBkaXNwbGF5TW9kZT86IHN0cmluZzsgdGV4dEFsaWduTW9kZT86IHN0cmluZyB9LFxuXHRjb21wdXRlZEVkaXRNb2RlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPixcblx0Y29uc2lkZXJUZXh0QW5ub3RhdGlvbiA9IGZhbHNlXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdC8vIGNoZWNrIGZvciB0aGUgdGFyZ2V0IHZhbHVlIHR5cGUgZGlyZWN0bHksIG9yIGluIGNhc2UgaXQgaXMgcG9pbnRpbmcgdG8gYSBEYXRhUG9pbnQgd2UgbG9vayBhdCB0aGUgZGF0YVBvaW50J3MgdmFsdWVcblx0bGV0IHR5cGVGb3JBbGlnbm1lbnQgPVxuXHRcdChkYXRhRmllbGRNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWU/LiR0YXJnZXQudHlwZSB8fFxuXHRcdCgoZGF0YUZpZWxkTW9kZWxQYXRoLnRhcmdldE9iamVjdCBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKT8uVGFyZ2V0Py4kdGFyZ2V0IGFzIERhdGFQb2ludFR5cGUpPy5WYWx1ZS4kdGFyZ2V0LnR5cGU7XG5cblx0aWYgKFxuXHRcdFByb3BlcnR5SGVscGVyLmlzS2V5KFxuXHRcdFx0KGRhdGFGaWVsZE1vZGVsUGF0aC50YXJnZXRPYmplY3QgYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZT8uJHRhcmdldCB8fFxuXHRcdFx0XHQoKGRhdGFGaWVsZE1vZGVsUGF0aC50YXJnZXRPYmplY3QgYXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbik/LlRhcmdldD8uJHRhcmdldCBhcyBEYXRhUG9pbnRUeXBlKT8uVmFsdWU/LiR0YXJnZXRcblx0XHQpXG5cdCkge1xuXHRcdHJldHVybiBcIkJlZ2luXCI7XG5cdH1cblx0aWYgKFxuXHRcdGNvbnNpZGVyVGV4dEFubm90YXRpb24gJiZcblx0XHRmb3JtYXRPcHRpb25zLmRpc3BsYXlNb2RlICYmXG5cdFx0W1wiRGVzY3JpcHRpb25cIiwgXCJEZXNjcmlwdGlvblZhbHVlXCIsIFwiVmFsdWVEZXNjcmlwdGlvblwiXS5pbmNsdWRlcyhmb3JtYXRPcHRpb25zLmRpc3BsYXlNb2RlKVxuXHQpIHtcblx0XHRjb25zdCB0ZXh0QW5ub3RhdGlvbiA9IChkYXRhRmllbGRNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWU/LiR0YXJnZXQuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dDtcblx0XHRjb25zdCB0ZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uID0gdGV4dEFubm90YXRpb24/LmFubm90YXRpb25zPy5VST8uVGV4dEFycmFuZ2VtZW50LnZhbHVlT2YoKTtcblx0XHRpZiAodGV4dEFubm90YXRpb24gJiYgdGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiAhPT0gXCJVSS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRTZXBhcmF0ZVwiKSB7XG5cdFx0XHR0eXBlRm9yQWxpZ25tZW50ID0gdGV4dEFubm90YXRpb24uJHRhcmdldC50eXBlO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBGaWVsZEhlbHBlci5nZXRQcm9wZXJ0eUFsaWdubWVudCh0eXBlRm9yQWxpZ25tZW50LCBmb3JtYXRPcHRpb25zLCBjb21wdXRlZEVkaXRNb2RlKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYmluZGluZyBleHByZXNzaW9uIHRvIGV2YWx1YXRlIHRoZSB2aXNpYmlsaXR5IG9mIGEgRGF0YUZpZWxkIG9yIERhdGFQb2ludCBhbm5vdGF0aW9uLlxuICpcbiAqIFNBUCBGaW9yaSBlbGVtZW50cyB3aWxsIGV2YWx1YXRlIGVpdGhlciB0aGUgVUkuSGlkZGVuIGFubm90YXRpb24gZGVmaW5lZCBvbiB0aGUgYW5ub3RhdGlvbiBpdHNlbGYgb3Igb24gdGhlIHRhcmdldCBwcm9wZXJ0eS5cbiAqIEBwYXJhbSBkYXRhRmllbGRNb2RlbFBhdGggVGhlIG1ldGFwYXRoIHJlZmVycmluZyB0byB0aGUgYW5ub3RhdGlvbiB3ZSBhcmUgZXZhbHVhdGluZy5cbiAqIEBwYXJhbSBbZm9ybWF0T3B0aW9uc10gRm9ybWF0T3B0aW9ucyBvcHRpb25hbC5cbiAqIEBwYXJhbSBmb3JtYXRPcHRpb25zLmlzQW5hbHl0aWNzIFRoaXMgZmxhZyBpcyBzZXQgd2hlbiB1c2luZyBhbiBhbmFseXRpY2FsIHRhYmxlLlxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbiB0aGF0IHlvdSBjYW4gYmluZCB0byB0aGUgVUkuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRWaXNpYmxlRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChcblx0ZGF0YUZpZWxkTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMgfCBQcm9wZXJ0eT4sXG5cdGZvcm1hdE9wdGlvbnM/OiB7IGlzQW5hbHl0aWNzPzogYm9vbGVhbiB9XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihnZW5lcmF0ZVZpc2libGVFeHByZXNzaW9uKGRhdGFGaWVsZE1vZGVsUGF0aCwgZm9ybWF0T3B0aW9ucykpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBCb29sZWFuIG9yIG90aGVyIGV4cHJlc3Npb24gZm9yIHRoZSB2aXNpYmlsaXR5IG9mIGEgRm9ybUVsZW1lbnQuXG4gKiBUaGUgRm9ybUVsZW1lbnQgaXMgdmlzaWJsZSBpZiBhdCBsZWFzdCBvbmUgY29udGVudCBpcyB2aXNpYmxlLCBvdGhlcndpc2UgaW52aXNpYmxlLlxuICogQHBhcmFtIGRhdGFGaWVsZE1vZGVsUGF0aCBUaGUgbWV0YXBhdGggcmVmZXJyaW5nIHRvIHRoZSBhbm5vdGF0aW9uIHdlIGFyZSBldmFsdWF0aW5nLlxuICogQHJldHVybnMgQSBCb29sZWFuIG9yIG90aGVyIGV4cHJlc3Npb24gdGhhdCBjYW4gYmUgYm91bmQgdG8gdGhlIFVJLlxuICovXG5leHBvcnQgY29uc3QgdmlzaWJsZUV4cHJlc3Npb25zRm9yQ29ubmVjdGVkRmllbGRzRm9ybUVsZW1lbnQgPSBmdW5jdGlvbiAoXG5cdGRhdGFGaWVsZE1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzIHwgUHJvcGVydHk+XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IGRhdGFGaWVsZEZvckFubm90YXRpb24gPSBkYXRhRmllbGRNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIERhdGFGaWVsZEFic3RyYWN0VHlwZXM7XG5cdGNvbnN0IHZpc2libGVFeHByZXNzaW9uID0gY29tcGlsZUV4cHJlc3Npb24oZ2VuZXJhdGVWaXNpYmxlRXhwcmVzc2lvbihkYXRhRmllbGRNb2RlbFBhdGgpKTtcblxuXHRjb25zdCBkYXRhRmllbGRzQmluZGluZ0V4cHJlc3Npb25zOiAoYm9vbGVhbiB8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPilbXSA9IFtdO1xuXHRpZiAodHlwZW9mIHZpc2libGVFeHByZXNzaW9uID09PSBcInN0cmluZ1wiICYmIHZpc2libGVFeHByZXNzaW9uLmluY2x1ZGVzKFwiez1cIikpIHtcblx0XHRyZXR1cm4gdmlzaWJsZUV4cHJlc3Npb247XG5cdH1cblx0aWYgKFxuXHRcdGRhdGFGaWVsZEZvckFubm90YXRpb24uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiZcblx0XHRkYXRhRmllbGRGb3JBbm5vdGF0aW9uLlRhcmdldC4kdGFyZ2V0Py4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuQ29ubmVjdGVkRmllbGRzVHlwZVxuXHQpIHtcblx0XHRjb25zdCBjb25uZWN0ZWRGaWVsZHMgPSBPYmplY3QudmFsdWVzKGRhdGFGaWVsZEZvckFubm90YXRpb24uVGFyZ2V0LiR0YXJnZXQuRGF0YSkuZmlsdGVyKFxuXHRcdFx0KGNvbm5lY3RlZEZpZWxkKSA9PiBjb25uZWN0ZWRGaWVsZD8uaGFzT3duUHJvcGVydHkoXCJWYWx1ZVwiKVxuXHRcdCkgYXMgRGF0YUZpZWxkQWJzdHJhY3RUeXBlc1tdO1xuXHRcdGNvbm5lY3RlZEZpZWxkcy5mb3JFYWNoKChkYXRhRmllbGQpID0+IHtcblx0XHRcdGRhdGFGaWVsZE1vZGVsUGF0aC50YXJnZXRPYmplY3QgPSBkYXRhRmllbGQ7XG5cdFx0XHRjb25zdCBiaW5kaW5nRXhwcmVzc2lvbk9iamVjdCA9IGdlbmVyYXRlVmlzaWJsZUV4cHJlc3Npb24oZGF0YUZpZWxkTW9kZWxQYXRoKTtcblx0XHRcdGlmIChiaW5kaW5nRXhwcmVzc2lvbk9iamVjdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGRhdGFGaWVsZHNCaW5kaW5nRXhwcmVzc2lvbnMucHVzaChiaW5kaW5nRXhwcmVzc2lvbk9iamVjdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0LyogQ29tYmluZSB0aGUgZXhwcmVzc2lvbnMgd2l0aCBvciAqL1xuXHRcdHJldHVybiBkYXRhRmllbGRzQmluZGluZ0V4cHJlc3Npb25zLmxlbmd0aCA/IGNvbXBpbGVFeHByZXNzaW9uKG9yKC4uLmRhdGFGaWVsZHNCaW5kaW5nRXhwcmVzc2lvbnMpKSA6IHZpc2libGVFeHByZXNzaW9uO1xuXHR9XG5cdHJldHVybiB2aXNpYmxlRXhwcmVzc2lvbjtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYmluZGluZyBmb3IgYSBwcm9wZXJ0eSBpbiBhIFF1aWNrVmlld0ZhY2V0cy5cbiAqIEBwYXJhbSBwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGggVGhlIERhdGFNb2RlbE9iamVjdFBhdGggb2YgdGhlIHByb3BlcnR5XG4gKiBAcmV0dXJucyBBIHN0cmluZyBvZiB0aGUgdmFsdWUsIG9yIGEgQmluZGluZ0V4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFF1aWNrVmlld0JpbmRpbmcgPSBmdW5jdGlvbiAoXG5cdHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBzdHJpbmcge1xuXHRpZiAoIXByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QpIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXHRpZiAodHlwZW9mIHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QgPT09IFwic3RyaW5nXCIpIHtcblx0XHRyZXR1cm4gcHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdDtcblx0fVxuXG5cdHJldHVybiBnZXRUZXh0QmluZGluZyhwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgsIHt9IGFzIEZpZWxkRm9ybWF0T3B0aW9ucyk7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgdHlwZSBvZiB0aGUgUXVpY2tWaWV3R3JvdXBFbGVtZW50LlxuICogQHBhcmFtIGRhdGFGaWVsZERhdGFNb2RlbE9iamVjdFBhdGggVGhlIERhdGFNb2RlbE9iamVjdFBhdGggb2YgdGhlIERhdGFGaWVsZFxuICogQHJldHVybnMgVGhlIHR5cGUgb2YgdGhlIFF1aWNrVmlld0dyb3VwRWxlbWVudFxuICovXG5leHBvcnQgY29uc3QgZ2V0UXVpY2tWaWV3VHlwZSA9IGZ1bmN0aW9uIChkYXRhRmllbGREYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZFR5cGVzIHwgUHJvcGVydHk+KTogc3RyaW5nIHtcblx0Y29uc3QgdGFyZ2V0T2JqZWN0ID0gZGF0YUZpZWxkRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q7XG5cdGlmIChpc0Fubm90YXRpb25PZlR5cGU8RGF0YUZpZWxkV2l0aFVybD4odGFyZ2V0T2JqZWN0LCBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsKSAmJiB0YXJnZXRPYmplY3Q/LlVybCkge1xuXHRcdHJldHVybiBcImxpbmtcIjtcblx0fVxuXHRpZiAoXG5cdFx0KCFpc1Byb3BlcnR5KHRhcmdldE9iamVjdCkgJiYgdGFyZ2V0T2JqZWN0Py5WYWx1ZS4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbXVuaWNhdGlvbj8uSXNFbWFpbEFkZHJlc3MpIHx8XG5cdFx0KGlzUHJvcGVydHkodGFyZ2V0T2JqZWN0KSAmJiB0YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5Db21tdW5pY2F0aW9uPy5Jc0VtYWlsQWRkcmVzcylcblx0KSB7XG5cdFx0cmV0dXJuIFwiZW1haWxcIjtcblx0fVxuXHRpZiAoXG5cdFx0KCFpc1Byb3BlcnR5KHRhcmdldE9iamVjdCkgJiYgdGFyZ2V0T2JqZWN0Py5WYWx1ZS4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbXVuaWNhdGlvbj8uSXNQaG9uZU51bWJlcikgfHxcblx0XHQoaXNQcm9wZXJ0eSh0YXJnZXRPYmplY3QpICYmIHRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LkNvbW11bmljYXRpb24/LklzUGhvbmVOdW1iZXIpXG5cdCkge1xuXHRcdHJldHVybiBcInBob25lXCI7XG5cdH1cblx0cmV0dXJuIFwidGV4dFwiO1xufTtcblxuZXhwb3J0IHR5cGUgU2VtYW50aWNPYmplY3RDdXN0b21EYXRhID0ge1xuXHRrZXk6IHN0cmluZztcblx0dmFsdWU6IHN0cmluZztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTZW1hbnRpY09iamVjdHMgPSBmdW5jdGlvbiAoXG5cdGFTZW1PYmpFeHByVG9SZXNvbHZlOiB7IGtleTogc3RyaW5nOyB2YWx1ZTogUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8UHJpbWl0aXZlVHlwZT4gfVtdXG4pOiBDb250ZXh0IHtcblx0aWYgKGFTZW1PYmpFeHByVG9SZXNvbHZlLmxlbmd0aCA+IDApIHtcblx0XHRsZXQgc0N1c3RvbURhdGFLZXkgPSBcIlwiO1xuXHRcdGxldCBzQ3VzdG9tRGF0YVZhbHVlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiA9IFwiXCI7XG5cdFx0Y29uc3QgYVNlbU9iakN1c3RvbURhdGE6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9W10gPSBbXTtcblx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgYVNlbU9iakV4cHJUb1Jlc29sdmUpIHtcblx0XHRcdHNDdXN0b21EYXRhS2V5ID0gaXRlbS5rZXk7XG5cdFx0XHRzQ3VzdG9tRGF0YVZhbHVlID0gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGl0ZW0udmFsdWUpKTtcblx0XHRcdGFTZW1PYmpDdXN0b21EYXRhLnB1c2goe1xuXHRcdFx0XHRrZXk6IHNDdXN0b21EYXRhS2V5LFxuXHRcdFx0XHR2YWx1ZTogc0N1c3RvbURhdGFWYWx1ZVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGNvbnN0IG9TZW1hbnRpY09iamVjdHNNb2RlbCA9IG5ldyBKU09OTW9kZWwoYVNlbU9iakN1c3RvbURhdGEpO1xuXHRcdChvU2VtYW50aWNPYmplY3RzTW9kZWwgYXMgeyAkJHZhbHVlQXNQcm9taXNlPzogYm9vbGVhbiB9KS4kJHZhbHVlQXNQcm9taXNlID0gdHJ1ZTtcblx0XHRyZXR1cm4gb1NlbWFudGljT2JqZWN0c01vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gbmV3IEpTT05Nb2RlbChbXSkuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpO1xuXHR9XG59O1xuXG4vKipcbiAqIE1ldGhvZCB0byBnZXQgTXVsdGlwbGVMaW5lcyBmb3IgYSBEYXRhRmllbGQuXG4gKiBAcGFyYW0ge2FueX0gb1RoaXMgVGhlIGN1cnJlbnQgb2JqZWN0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzTXVsdGlMaW5lVGV4dCBUaGUgcHJvcGVydHkgaXNNdWx0aUxpbmVUZXh0XG4gKiBAcmV0dXJucyB7Q29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPn0gVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB0byBkZXRlcm1pbmUgaWYgYSBkYXRhIGZpZWxkIHNob3VsZCBiZSBhIE11bHRpTGluZVRleHQgb3Igbm90XG4gKiBAcHVibGljXG4gKi9cblxuZXhwb3J0IGNvbnN0IGdldE11bHRpcGxlTGluZXNGb3JEYXRhRmllbGQgPSBmdW5jdGlvbiAob1RoaXM6IFBhcnRpYWw8eyB3cmFwPzogYm9vbGVhbiB9PiwgaXNNdWx0aUxpbmVUZXh0OiBib29sZWFuKTogYm9vbGVhbiB7XG5cdGlmIChvVGhpcy53cmFwID09PSBmYWxzZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRyZXR1cm4gaXNNdWx0aUxpbmVUZXh0O1xufTtcblxuY29uc3QgX2hhc1ZhbHVlSGVscFRvU2hvdyA9IGZ1bmN0aW9uIChvUHJvcGVydHk6IFByb3BlcnR5LCBtZWFzdXJlRGlzcGxheU1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuXHQvLyB3ZSBzaG93IGEgdmFsdWUgaGVscCBpZiB0ZWggcHJvcGVydHkgaGFzIG9uZSBvciBpZiBpdHMgdmlzaWJsZSB1bml0IGhhcyBvbmVcblx0Y29uc3Qgb1Byb3BlcnR5VW5pdCA9IFByb3BlcnR5SGVscGVyLmdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkob1Byb3BlcnR5KTtcblx0Y29uc3Qgb1Byb3BlcnR5Q3VycmVuY3kgPSBQcm9wZXJ0eUhlbHBlci5nZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eShvUHJvcGVydHkpO1xuXHRyZXR1cm4gKFxuXHRcdChQcm9wZXJ0eUhlbHBlci5oYXNWYWx1ZUhlbHAob1Byb3BlcnR5KSAmJiBvUHJvcGVydHkudHlwZSAhPT0gXCJFZG0uQm9vbGVhblwiKSB8fFxuXHRcdChtZWFzdXJlRGlzcGxheU1vZGUgIT09IFwiSGlkZGVuXCIgJiZcblx0XHRcdCgob1Byb3BlcnR5VW5pdCAmJiBQcm9wZXJ0eUhlbHBlci5oYXNWYWx1ZUhlbHAob1Byb3BlcnR5VW5pdCkpIHx8XG5cdFx0XHRcdChvUHJvcGVydHlDdXJyZW5jeSAmJiBQcm9wZXJ0eUhlbHBlci5oYXNWYWx1ZUhlbHAob1Byb3BlcnR5Q3VycmVuY3kpKSkpXG5cdCk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gZGF0ZSBmb3IgdGhlIGRhdGUgZmllbGQuXG4gKiBAcGFyYW0gZGF0ZUFubm90YXRpb24gUHJvcGVydHkgQW5ub3RhdGlvbnMgZm9yIHRoZSBkYXRlIGZpZWxkLlxuICogQHBhcmFtIHR5cGUgRWl0aGVyICdNYXhpbXVtJyBvciAnTWluaW11bScuXG4gKiBAcGFyYW0gcmVsYXRpdmVMb2NhdGlvblxuICogQHJldHVybnMgTWluaW51bSBvciBNYXhpbXVtIGRhdGUgZXhwcmVzc2lvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldE1pbk1heERhdGVFeHByZXNzaW9uID0gZnVuY3Rpb24gKFxuXHRkYXRlQW5ub3RhdGlvbjogUHJvcGVydHlBbm5vdGF0aW9ucyB8IHVuZGVmaW5lZCxcblx0dHlwZTogXCJNYXhpbXVtXCIgfCBcIk1pbmltdW1cIixcblx0cmVsYXRpdmVMb2NhdGlvbjogc3RyaW5nW11cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGZpeGVkRGF0ZSA9IGRhdGVBbm5vdGF0aW9uPy5WYWxpZGF0aW9uPy5bdHlwZV0/LiREYXRlO1xuXHRjb25zdCBkYXRlUHJvcGVydHkgPSBkYXRlQW5ub3RhdGlvbj8uVmFsaWRhdGlvbj8uW3R5cGVdO1xuXHRpZiAoZml4ZWREYXRlKSB7XG5cdFx0cmV0dXJuIGZvcm1hdFJlc3VsdChbY29uc3RhbnQoZml4ZWREYXRlKV0sIHZhbHVlRm9ybWF0dGVycy5wcm92aWRlRGF0ZUluc3RhbmNlKTtcblx0fSBlbHNlIGlmIChkYXRlUHJvcGVydHkpIHtcblx0XHRyZXR1cm4gQmluZGluZ1Rvb2xraXQuZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGVBbm5vdGF0aW9uPy5WYWxpZGF0aW9uPy5bdHlwZV0sIHJlbGF0aXZlTG9jYXRpb24pO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIFNldHMgRWRpdCBTdHlsZSBwcm9wZXJ0aWVzIGZvciBGaWVsZCBpbiBjYXNlIG9mIE1hY3JvIEZpZWxkIGFuZCBNYXNzRWRpdERpYWxvZyBmaWVsZHMuXG4gKiBAcGFyYW0gb1Byb3BzIEZpZWxkIFByb3BlcnRpZXMgZm9yIHRoZSBNYWNybyBGaWVsZC5cbiAqIEBwYXJhbSBvRGF0YUZpZWxkIERhdGFGaWVsZCBPYmplY3QuXG4gKiBAcGFyYW0gb0RhdGFNb2RlbFBhdGggRGF0YU1vZGVsIE9iamVjdCBQYXRoIHRvIHRoZSBwcm9wZXJ0eS5cbiAqIEBwYXJhbSBvbmx5RWRpdFN0eWxlIFRvIGFkZCBvbmx5IGVkaXRTdHlsZS5cbiAqL1xuZXhwb3J0IGNvbnN0IHNldEVkaXRTdHlsZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wczogRmllbGRCbG9ja1Byb3BlcnRpZXMsXG5cdG9EYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMsXG5cdG9EYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5IHwgRGF0YUZpZWxkVHlwZXM+LFxuXHRvbmx5RWRpdFN0eWxlPzogYm9vbGVhblxuKTogdm9pZCB7XG5cdGNvbnN0IG9Qcm9wZXJ0eSA9IG9EYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdDtcblx0aWYgKFxuXHRcdCFpc1Byb3BlcnR5KG9Qcm9wZXJ0eSkgfHxcblx0XHRbXG5cdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgsXG5cdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb25Hcm91cCxcblx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblxuXHRcdF0uaW5jbHVkZXMob0RhdGFGaWVsZC4kVHlwZSlcblx0KSB7XG5cdFx0b1Byb3BzLmVkaXRTdHlsZSA9IG51bGw7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGlmICghb25seUVkaXRTdHlsZSkge1xuXHRcdGlmIChvUHJvcGVydHk/LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtPy4kRGF0ZSB8fCBvUHJvcGVydHk/LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtPy4kRGF0ZSkge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiA9IHBhdGhJbk1vZGVsKGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgob0RhdGFNb2RlbFBhdGgpKTtcblx0XHRcdG9Qcm9wcy52YWx1ZUJpbmRpbmdFeHByZXNzaW9uID0gVUlGb3JtYXR0ZXJzLmdldEJpbmRpbmdGb3JEYXRlUGlja2VyKFxuXHRcdFx0XHRvRGF0YU1vZGVsUGF0aCxcblx0XHRcdFx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvblxuXHRcdFx0KSBhcyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b1Byb3BzLnZhbHVlQmluZGluZ0V4cHJlc3Npb24gPSBvUHJvcHMudmFsdWUgPyBvUHJvcHMudmFsdWUgOiBnZXRWYWx1ZUJpbmRpbmcob0RhdGFNb2RlbFBhdGgsIG9Qcm9wcy5mb3JtYXRPcHRpb25zKTtcblx0XHR9XG5cblx0XHRjb25zdCBlZGl0U3R5bGVQbGFjZWhvbGRlciA9XG5cdFx0XHQob0RhdGFGaWVsZCBhcyB1bmtub3duIGFzIFByb3BlcnR5KS5hbm5vdGF0aW9ucz8uVUk/LlBsYWNlaG9sZGVyIHx8XG5cdFx0XHQob0RhdGFGaWVsZCBhcyBEYXRhRmllbGQpPy5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LlVJPy5QbGFjZWhvbGRlcjtcblxuXHRcdGlmIChlZGl0U3R5bGVQbGFjZWhvbGRlcikge1xuXHRcdFx0b1Byb3BzLmVkaXRTdHlsZVBsYWNlaG9sZGVyID0gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGVkaXRTdHlsZVBsYWNlaG9sZGVyKSk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gU2V0dXAgUmF0aW5nSW5kaWNhdG9yXG5cdGNvbnN0IGRhdGFQb2ludEFubm90YXRpb24gPSAoaXNEYXRhRmllbGRGb3JBbm5vdGF0aW9uKG9EYXRhRmllbGQpID8gb0RhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQgOiBvRGF0YUZpZWxkKSBhcyBEYXRhUG9pbnRUeXBlO1xuXHRpZiAoZGF0YVBvaW50QW5ub3RhdGlvbj8uVmlzdWFsaXphdGlvbiA9PT0gXCJVSS5WaXN1YWxpemF0aW9uVHlwZS9SYXRpbmdcIikge1xuXHRcdG9Qcm9wcy5lZGl0U3R5bGUgPSBcIlJhdGluZ0luZGljYXRvclwiO1xuXG5cdFx0aWYgKGRhdGFQb2ludEFubm90YXRpb24uYW5ub3RhdGlvbnM/LkNvbW1vbj8uUXVpY2tJbmZvKSB7XG5cdFx0XHRvUHJvcHMucmF0aW5nSW5kaWNhdG9yVG9vbHRpcCA9IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YVBvaW50QW5ub3RhdGlvbi5hbm5vdGF0aW9ucz8uQ29tbW9uPy5RdWlja0luZm8pXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdG9Qcm9wcy5yYXRpbmdJbmRpY2F0b3JUYXJnZXRWYWx1ZSA9IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhUG9pbnRBbm5vdGF0aW9uLlRhcmdldFZhbHVlKSk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKFxuXHRcdF9oYXNWYWx1ZUhlbHBUb1Nob3cob1Byb3BlcnR5LCBvUHJvcHMuZm9ybWF0T3B0aW9ucz8ubWVhc3VyZURpc3BsYXlNb2RlKSB8fFxuXHRcdChvUHJvcHMuZm9ybWF0T3B0aW9ucz8ubWVhc3VyZURpc3BsYXlNb2RlICE9PSBcIkhpZGRlblwiICYmXG5cdFx0XHQob1Byb3BlcnR5LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kgfHwgKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQgJiYgIWhhc1N0YXRpY1BlcmNlbnRVbml0KG9Qcm9wZXJ0eSkpKSlcblx0KSB7XG5cdFx0aWYgKCFvbmx5RWRpdFN0eWxlKSB7XG5cdFx0XHQvKiBUaGUgdGV4dEJpbmRpbmdFeHByZXNzaW9uIGlzIHVzZWQgZm9yIG1kY0ZpZWxkLWF0dHJpYnV0ZSAnYWRkaXRpb25hbFZhbHVlJyBhbmQgbWVhbnMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSB2YWx1ZSAqL1xuXHRcdFx0Y29uc3QgdGV4dEJpbmRpbmdFeHByZXNzaW9uID0gb1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LkV4dGVybmFsSURcblx0XHRcdFx0PyBnZXRBc3NvY2lhdGVkVGV4dEJpbmRpbmcob1Byb3BzLmRhdGFNb2RlbFBhdGhFeHRlcm5hbElEIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LCBvUHJvcHMuZm9ybWF0T3B0aW9ucylcblx0XHRcdFx0OiBnZXRBc3NvY2lhdGVkVGV4dEJpbmRpbmcob0RhdGFNb2RlbFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sIG9Qcm9wcy5mb3JtYXRPcHRpb25zKTtcblxuXHRcdFx0Y29uc3QgaXNKU09OTW9kZWxVc2VkRm9yVmFsdWUgPSAhIW9Qcm9wcy52YWx1ZSAmJiAve1xcdys+Lit9Ly50ZXN0KG9Qcm9wcy52YWx1ZSk7XG5cblx0XHRcdGlmIChpc0pTT05Nb2RlbFVzZWRGb3JWYWx1ZSkge1xuXHRcdFx0XHRpZiAob1Byb3BzLmRlc2NyaXB0aW9uKSB7XG5cdFx0XHRcdFx0b1Byb3BzLnRleHRCaW5kaW5nRXhwcmVzc2lvbiA9IG9Qcm9wcy5kZXNjcmlwdGlvbjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRvUHJvcHMudGV4dEJpbmRpbmdFeHByZXNzaW9uID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdG9Qcm9wcy5mb3JtYXRPcHRpb25zLmRpc3BsYXlNb2RlID0gXCJWYWx1ZVwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvUHJvcHMudGV4dEJpbmRpbmdFeHByZXNzaW9uID0gdGV4dEJpbmRpbmdFeHByZXNzaW9uO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAob1Byb3BzLmZvcm1hdE9wdGlvbnM/Lm1lYXN1cmVEaXNwbGF5TW9kZSAhPT0gXCJIaWRkZW5cIikge1xuXHRcdFx0XHQvLyBmb3IgdGhlIE1EQyBGaWVsZCB3ZSBuZWVkIHRvIGtlZXAgdGhlIHVuaXQgaW5zaWRlIHRoZSB2YWx1ZUJpbmRpbmdFeHByZXNzaW9uXG5cdFx0XHRcdG9Qcm9wcy52YWx1ZUJpbmRpbmdFeHByZXNzaW9uID0gb1Byb3BzLnZhbHVlXG5cdFx0XHRcdFx0PyBvUHJvcHMudmFsdWVcblx0XHRcdFx0XHQ6IGdldFZhbHVlQmluZGluZyhvRGF0YU1vZGVsUGF0aCwgb1Byb3BzLmZvcm1hdE9wdGlvbnMsIGZhbHNlLCBmYWxzZSwgdW5kZWZpbmVkLCBmYWxzZSwgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdG9Qcm9wcy5lZGl0U3R5bGUgPSBcIklucHV0V2l0aFZhbHVlSGVscFwiO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHN3aXRjaCAob1Byb3BlcnR5LnR5cGUpIHtcblx0XHRjYXNlIFwiRWRtLkRhdGVcIjpcblx0XHRcdG9Qcm9wcy5lZGl0U3R5bGUgPSBcIkRhdGVQaWNrZXJcIjtcblx0XHRcdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSBnZXRSZWxhdGl2ZVBhdGhzKG9EYXRhTW9kZWxQYXRoKTtcblx0XHRcdGlmIChvUHJvcGVydHk/LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtKSB7XG5cdFx0XHRcdG9Qcm9wcy5tYXhEYXRlRXhwcmVzc2lvbiA9IGdldE1pbk1heERhdGVFeHByZXNzaW9uKG9Qcm9wZXJ0eT8uYW5ub3RhdGlvbnMsIFwiTWF4aW11bVwiLCByZWxhdGl2ZUxvY2F0aW9uKTtcblx0XHRcdH1cblx0XHRcdGlmIChvUHJvcGVydHk/LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtKSB7XG5cdFx0XHRcdG9Qcm9wcy5taW5EYXRlRXhwcmVzc2lvbiA9IGdldE1pbk1heERhdGVFeHByZXNzaW9uKG9Qcm9wZXJ0eT8uYW5ub3RhdGlvbnMsIFwiTWluaW11bVwiLCByZWxhdGl2ZUxvY2F0aW9uKTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHRjYXNlIFwiRWRtLlRpbWVcIjpcblx0XHRjYXNlIFwiRWRtLlRpbWVPZkRheVwiOlxuXHRcdFx0b1Byb3BzLmVkaXRTdHlsZSA9IFwiVGltZVBpY2tlclwiO1xuXHRcdFx0cmV0dXJuO1xuXHRcdGNhc2UgXCJFZG0uRGF0ZVRpbWVcIjpcblx0XHRjYXNlIFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCI6XG5cdFx0XHRvUHJvcHMuZWRpdFN0eWxlID0gXCJEYXRlVGltZVBpY2tlclwiO1xuXHRcdFx0Ly8gTm8gdGltZXpvbmUgZGVmaW5lZC4gQWxzbyBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLlxuXHRcdFx0aWYgKCFvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGltZXpvbmUpIHtcblx0XHRcdFx0b1Byb3BzLnNob3dUaW1lem9uZSA9IHVuZGVmaW5lZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9Qcm9wcy5zaG93VGltZXpvbmUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdGNhc2UgXCJFZG0uQm9vbGVhblwiOlxuXHRcdFx0b1Byb3BzLmVkaXRTdHlsZSA9IFwiQ2hlY2tCb3hcIjtcblx0XHRcdHJldHVybjtcblx0XHRjYXNlIFwiRWRtLlN0cmVhbVwiOlxuXHRcdFx0b1Byb3BzLmVkaXRTdHlsZSA9IFwiRmlsZVwiO1xuXHRcdFx0cmV0dXJuO1xuXHRcdGNhc2UgXCJFZG0uU3RyaW5nXCI6XG5cdFx0XHRpZiAob1Byb3BlcnR5LmFubm90YXRpb25zPy5VST8uTXVsdGlMaW5lVGV4dD8udmFsdWVPZigpKSB7XG5cdFx0XHRcdG9Qcm9wcy5lZGl0U3R5bGUgPSBcIlRleHRBcmVhXCI7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmIChvUHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5JbnB1dE1hc2s/LnZhbHVlT2YoKSkge1xuXHRcdFx0XHRvUHJvcHMuZWRpdFN0eWxlID0gXCJJbnB1dE1hc2tcIjtcblx0XHRcdFx0b1Byb3BzLm1hc2sgPSB7XG5cdFx0XHRcdFx0bWFzazogb1Byb3BlcnR5LmFubm90YXRpb25zPy5VST8uSW5wdXRNYXNrPy5NYXNrLnRvU3RyaW5nKCksXG5cdFx0XHRcdFx0cGxhY2Vob2xkZXJTeW1ib2w6IG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LklucHV0TWFzaz8uUGxhY2Vob2xkZXJTeW1ib2wudG9TdHJpbmcoKSxcblx0XHRcdFx0XHRtYXNrUnVsZTogX2dldE1hc2tpbmdSdWxlcyhvUHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5JbnB1dE1hc2s/LlJ1bGVzKVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAob1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/Lk1hc2tlZD8udmFsdWVPZigpKSB7XG5cdFx0XHRcdG9Qcm9wcy5lZGl0U3R5bGUgPSBcIk1hc2tlZFwiO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0aWYgKGhhc1N0YXRpY1BlcmNlbnRVbml0KG9Qcm9wZXJ0eSkpIHtcblx0XHRcdFx0b1Byb3BzLnN0YXRpY0Rlc2NyaXB0aW9uID0gXCIlXCI7XG5cdFx0XHR9XG5cdFx0XHRvUHJvcHMuZWRpdFN0eWxlID0gXCJJbnB1dFwiO1xuXHR9XG5cblx0b1Byb3BzLmVkaXRTdHlsZSA9IFwiSW5wdXRcIjtcbn07XG5cbmNvbnN0IF9nZXRNYXNraW5nUnVsZXMgPSAobWFza2luZ1J1bGVzOiBJbnB1dE1hc2tSdWxlVHlwZVR5cGVzW10gfCB1bmRlZmluZWQpOiBJbnB1dE1hc2tSdWxlW10gPT4ge1xuXHRpZiAoIW1hc2tpbmdSdWxlcyB8fCBtYXNraW5nUnVsZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIFt7IHN5bWJvbDogXCIqXCIsIHJlZ2V4OiBcIlthLXpBLVowLTldXCIgfV07XG5cdH1cblxuXHRyZXR1cm4gbWFza2luZ1J1bGVzLm1hcCgobWFza2luZ1J1bGUpID0+ICh7XG5cdFx0c3ltYm9sOiBtYXNraW5nUnVsZS5NYXNrU3ltYm9sLnRvU3RyaW5nKCksXG5cdFx0cmVnZXg6IG1hc2tpbmdSdWxlLlJlZ0V4cC50b1N0cmluZygpXG5cdH0pKTtcbn07XG5cbmV4cG9ydCBjb25zdCBoYXNTZW1hbnRpY09iamVjdEluTmF2aWdhdGlvbk9yUHJvcGVydHkgPSAocHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pik6IGJvb2xlYW4gPT4ge1xuXHRjb25zdCBwcm9wZXJ0eSA9IHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHk7XG5cdGlmIChTZW1hbnRpY09iamVjdEhlbHBlci5oYXNTZW1hbnRpY09iamVjdChwcm9wZXJ0eSkpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRjb25zdCBsYXN0TmF2UHJvcCA9IHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aD8ubmF2aWdhdGlvblByb3BlcnRpZXM/Lmxlbmd0aFxuXHRcdD8gcHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoPy5uYXZpZ2F0aW9uUHJvcGVydGllc1twcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg/Lm5hdmlnYXRpb25Qcm9wZXJ0aWVzPy5sZW5ndGggLSAxXVxuXHRcdDogbnVsbDtcblx0aWYgKFxuXHRcdCFsYXN0TmF2UHJvcCB8fFxuXHRcdHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC5jb250ZXh0TG9jYXRpb24/Lm5hdmlnYXRpb25Qcm9wZXJ0aWVzPy5maW5kKFxuXHRcdFx0KGNvbnRleHROYXZQcm9wKSA9PiBjb250ZXh0TmF2UHJvcC5uYW1lID09PSBsYXN0TmF2UHJvcC5uYW1lXG5cdFx0KVxuXHQpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0cmV0dXJuIFNlbWFudGljT2JqZWN0SGVscGVyLmhhc1NlbWFudGljT2JqZWN0KGxhc3ROYXZQcm9wKTtcbn07XG5cbi8qKlxuICogR2V0IHRoZSBkYXRhTW9kZWxPYmplY3RQYXRoIHdpdGggdGhlIHZhbHVlIHByb3BlcnR5IGFzIHRhcmdldE9iamVjdCBpZiBpdCBleGlzdHNcbiAqIGZvciBhIGRhdGFNb2RlbE9iamVjdFBhdGggdGFyZ2V0aW5nIGEgRGF0YUZpZWxkIG9yIGEgRGF0YVBvaW50IGFubm90YXRpb24uXG4gKiBAcGFyYW0gaW5pdGlhbERhdGFNb2RlbE9iamVjdFBhdGhcbiAqIEByZXR1cm5zIFRoZSBkYXRhTW9kZWxPYmplY3RQYXRoIHRhcmdldGluZyB0aGUgdmFsdWUgcHJvcGVydHkgb3IgdW5kZWZpbmVkXG4gKi9cbmV4cG9ydCBjb25zdCBnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yVmFsdWUgPSAoXG5cdGluaXRpYWxEYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMgfCBQcm9wZXJ0eT5cbik6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+IHwgdW5kZWZpbmVkID0+IHtcblx0aWYgKCFpbml0aWFsRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGlmIChpc1Byb3BlcnR5KGluaXRpYWxEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCkpIHtcblx0XHRyZXR1cm4gaW5pdGlhbERhdGFNb2RlbE9iamVjdFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT47XG5cdH1cblx0bGV0IHZhbHVlUGF0aCA9IFwiXCI7XG5cdC8vIGRhdGEgcG9pbnQgYW5ub3RhdGlvbnMgbmVlZCBub3QgaGF2ZSAkVHlwZSBkZWZpbmVkLCBzbyBhZGQgaXQgaWYgbWlzc2luZ1xuXHRpZiAoaXNBbm5vdGF0aW9uT2ZUZXJtKGluaXRpYWxEYXRhTW9kZWxPYmplY3RQYXRoLCBVSUFubm90YXRpb25UZXJtcy5EYXRhUG9pbnQpKSB7XG5cdFx0aW5pdGlhbERhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LiRUeXBlID0gaW5pdGlhbERhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LiRUeXBlIHx8IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGU7XG5cdH1cblx0c3dpdGNoIChpbml0aWFsRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuJFR5cGUpIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGU6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb246XG5cdFx0XHRpZiAodHlwZW9mIGluaXRpYWxEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5WYWx1ZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHR2YWx1ZVBhdGggPSBpbml0aWFsRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuVmFsdWUucGF0aDtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjpcblx0XHRcdGlmIChpbml0aWFsRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuVGFyZ2V0LiR0YXJnZXQpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGlzQW5ub3RhdGlvbk9mVHlwZTxEYXRhRmllbGQgfCBEYXRhUG9pbnRUeXBlPihpbml0aWFsRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuVGFyZ2V0LiR0YXJnZXQsIFtcblx0XHRcdFx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGUsXG5cdFx0XHRcdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRcblx0XHRcdFx0XHRdKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRpZiAoaW5pdGlhbERhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LlRhcmdldC52YWx1ZS5pbmRleE9mKFwiL1wiKSA+IDApIHtcblx0XHRcdFx0XHRcdHZhbHVlUGF0aCA9IGluaXRpYWxEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5UYXJnZXQudmFsdWUucmVwbGFjZShcblx0XHRcdFx0XHRcdFx0L1xcL0AuKi8sXG5cdFx0XHRcdFx0XHRcdGAvJHtpbml0aWFsRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuVGFyZ2V0LiR0YXJnZXQuVmFsdWU/LnBhdGh9YFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dmFsdWVQYXRoID0gaW5pdGlhbERhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LlRhcmdldC4kdGFyZ2V0LlZhbHVlPy5wYXRoO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZVBhdGggPSAoaW5pdGlhbERhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LlRhcmdldCBhcyB1bmtub3duIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjx1bmtub3duPik/LnBhdGg7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXA6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoQWN0aW9uR3JvdXA6XG5cdFx0XHRicmVhaztcblx0fVxuXG5cdGlmICh2YWx1ZVBhdGggJiYgdmFsdWVQYXRoLmxlbmd0aCA+IDApIHtcblx0XHRyZXR1cm4gZW5oYW5jZURhdGFNb2RlbFBhdGgoaW5pdGlhbERhdGFNb2RlbE9iamVjdFBhdGgsIHZhbHVlUGF0aCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxufTtcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgY29uc2lkZXJlZCBwcm9wZXJ0eSBpcyBhIG5vbi1pbnNlcnRhYmxlIHByb3BlcnR5XG4gKiBBIGZpcnN0IGNoZWNrIGlzIGRvbmUgb24gdGhlIGxhc3QgbmF2aWdhdGlvbiBmcm9tIHRoZSBjb250ZXh0TG9jYXRpb246XG4gKiAtIElmIHRoZSBhbm5vdGF0aW9uICdub25JbnNlcnRhYmxlUHJvcGVydHknIGlzIGZvdW5kIGFuZCB0aGUgcHJvcGVydHkgaXMgbGlzdGVkLCB0aGVuIHRoZSBwcm9wZXJ0eSBpcyBub24taW5zZXJ0YWJsZSxcbiAqIC0gRWxzZSB0aGUgc2FtZSBjaGVjayBpcyBkb25lIG9uIHRoZSB0YXJnZXQgZW50aXR5LlxuICogQHBhcmFtIHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aFxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgcHJvcGVydHkgaXMgbm90IGluc2VydGFibGVcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc1Byb3BlcnR5SW5zZXJ0UmVzdHJpY3Rpb25zID0gKHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4pOiBib29sZWFuID0+IHtcblx0Y29uc3Qgbm9uSW5zZXJ0YWJsZVByb3BlcnRpZXMgPSBnZXRDb250ZXh0UHJvcGVydHlSZXN0cmljdGlvbihwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgsIChjYXBhYmlsaXRpZXMpID0+IHtcblx0XHRyZXR1cm4gKGNhcGFiaWxpdGllcyBhcyBFbnRpdHlTZXRBbm5vdGF0aW9uc19DYXBhYmlsaXRpZXMgfCB1bmRlZmluZWQpPy5JbnNlcnRSZXN0cmljdGlvbnM/Lk5vbkluc2VydGFibGVQcm9wZXJ0aWVzO1xuXHR9KTtcblxuXHRyZXR1cm4gbm9uSW5zZXJ0YWJsZVByb3BlcnRpZXMuc29tZSgobm9uSW5zZXJ0YWJsZVByb3BlcnR5KSA9PiB7XG5cdFx0cmV0dXJuIG5vbkluc2VydGFibGVQcm9wZXJ0eT8uJHRhcmdldD8uZnVsbHlRdWFsaWZpZWROYW1lID09PSBwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Py5mdWxseVF1YWxpZmllZE5hbWU7XG5cdH0pO1xufTtcblxuLyoqXG4gKiBHZXQgdGhlIGJpbmRpbmcgZm9yIHRoZSBkcmFmdCBpbmRpY2F0b3IgdmlzaWJpbGl0eS5cbiAqIEBwYXJhbSBkcmFmdEluZGljYXRvcktleVxuICogQHJldHVybnMgIFRoZSB2aXNpYmlsaXR5IGJpbmRpbmcgZXhwcmVzc2lvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldERyYWZ0SW5kaWNhdG9yVmlzaWJsZUJpbmRpbmcgPSAoZHJhZnRJbmRpY2F0b3JLZXk6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG5cdHJldHVybiBkcmFmdEluZGljYXRvcktleVxuXHRcdD8gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdGZvcm1hdFJlc3VsdChcblx0XHRcdFx0XHRbXG5cdFx0XHRcdFx0XHRjb25zdGFudChkcmFmdEluZGljYXRvcktleSksXG5cdFx0XHRcdFx0XHRwYXRoSW5Nb2RlbChcInNlbWFudGljS2V5SGFzRHJhZnRJbmRpY2F0b3JcIiwgXCJpbnRlcm5hbFwiKSxcblx0XHRcdFx0XHRcdHBhdGhJbk1vZGVsKFwiSGFzRHJhZnRFbnRpdHlcIiksXG5cdFx0XHRcdFx0XHRwYXRoSW5Nb2RlbChcIklzQWN0aXZlRW50aXR5XCIpLFxuXHRcdFx0XHRcdFx0cGF0aEluTW9kZWwoXCJoaWRlRHJhZnRJbmZvXCIsIFwicGFnZUludGVybmFsXCIpXG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRcInNhcC5mZS5tYWNyb3MuZmllbGQuRmllbGRSdW50aW1lLmlzRHJhZnRJbmRpY2F0b3JWaXNpYmxlXCJcblx0XHRcdFx0KVxuXHRcdCAgKVxuXHRcdDogXCJmYWxzZVwiO1xufTtcbi8qKlxuICogUmV0dXJucyB0aGUgRGlzcGxheVNoYXBlIGZvciB0aGUgQXZhdGFyIGRlcGVuZGluZyBvbiB0aGUgYW5ub3RhdGlvbiBJc05hdHVyYWxQZXJzb24uXG4gKlxuICogSWYgdGhlIGVudGl0eSB0eXBlIGlzIGFubm90YXRlZCB3aXRoIFwiSXNOYXR1cmFsUGVyc29uXCIsIHRoZW4gYWxsIFN0cmVhbXMgYW5kIEltYWdlVVJsc1xuICogaW4gdGhpcyBlbnRpdHkgYXJlIGNvbnNpZGVyZWQgdG8gYmUgcGVyc29uIHRoZXJlZm9yZSBoYXZlIHNoYXBlIGNpcmNsZSBieSBkZWZhdWx0LlxuICpcbiAqIElmIGEgcHJvcGVydHkgd2l0aGluIHN1Y2ggYW4gZW50aXR5IGlzIGFubm90YXRlZCB3aXRoIFVJLklzSW1hZ2Ugb3IgVUkuSXNJbWFnZVVSTCwgYm90aFxuICogb2YgdGhlc2UgYW5ub3RhdGlvbnMgY2FuIGJlIGFubm90YXRlZCB3aXRoIENvbW1vbi5Jc05hdHVyYWxQZXJzb24uXG4gKlxuICogVGhlIGFubm90YXRpb24gYXQgdGhlIHByb3BlcnR5IGxldmVsIG92ZXJyaWRlcyB0aGUgYW5ub3RhdGlvbiBhdCB0aGUgZW50aXR5IHR5cGUuXG4gKiBAcGFyYW0gZGF0YU1vZGVsUGF0aFxuICogQHBhcmFtIHByb3BlcnR5XG4gKiBAcmV0dXJucyBUaGUgc2hhcGUgb2YgdGhlIEF2YXRhciBhcyBzdHJpbmcgb3IgYXMgYW4gZXhwcmVzc2lvblxuICovXG5cbmV4cG9ydCBjb25zdCBnZXRBdmF0YXJTaGFwZSA9IChkYXRhRmllbGRNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+KTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gPT4ge1xuXHRjb25zdCB0YXJnZXRPYmplY3QgPVxuXHRcdGRhdGFGaWVsZE1vZGVsUGF0aC50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5VST8uSXNJbWFnZVVSTD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNOYXR1cmFsUGVyc29uIHx8XG5cdFx0ZGF0YUZpZWxkTW9kZWxQYXRoLnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LlVJPy5Jc0ltYWdlPy5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc05hdHVyYWxQZXJzb247XG5cdGNvbnN0IGVudGl0eUFubm90YXRpb25UYXJnZXQgPSBkYXRhRmllbGRNb2RlbFBhdGgudGFyZ2V0RW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc05hdHVyYWxQZXJzb247XG5cdGxldCBhdmF0YXJTaGFwZUV4cHJlc3Npb246IEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPjtcblxuXHRpZiAodGFyZ2V0T2JqZWN0KSB7XG5cdFx0YXZhdGFyU2hhcGVFeHByZXNzaW9uID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHRhcmdldE9iamVjdCk7XG5cdH0gZWxzZSBpZiAoZW50aXR5QW5ub3RhdGlvblRhcmdldCkge1xuXHRcdGF2YXRhclNoYXBlRXhwcmVzc2lvbiA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihlbnRpdHlBbm5vdGF0aW9uVGFyZ2V0KTtcblx0fSBlbHNlIGF2YXRhclNoYXBlRXhwcmVzc2lvbiA9IGZhbHNlO1xuXG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihpZkVsc2UoYXZhdGFyU2hhcGVFeHByZXNzaW9uLCBBdmF0YXJTaGFwZS5DaXJjbGUsIEF2YXRhclNoYXBlLlNxdWFyZSkpO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQWlGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxNQUFNQSxxQ0FBcUMsR0FBRyxTQUFBQSxDQUNwREMsMEJBQW1FLEVBQ25FQyxlQUEyRCxFQUNqQjtJQUMxQyxPQUFPQyxvQkFBb0IsQ0FBQ0YsMEJBQTBCLEVBQUUsYUFBYSxFQUFHRyxVQUFnRCxJQUFLO01BQzVILElBQUlDLGFBQXNELEdBQUdELFVBQVU7TUFDdkUsSUFBSUEsVUFBVSxDQUFDRSxTQUFTLEtBQUtDLFNBQVMsRUFBRTtRQUN2QztRQUNBLE1BQU1DLHNCQUFzQixHQUFHQyxvQkFBb0IsQ0FBV1AsZUFBZSxFQUFFRSxVQUFVLENBQUNNLElBQUksQ0FBQztRQUMvRkwsYUFBYSxHQUFHTSxnQkFBZ0IsQ0FBQ0MsNkJBQTZCLENBQUNKLHNCQUFzQixFQUFFSixVQUFVLENBQUM7TUFDbkc7TUFDQSxPQUFPQyxhQUFhO0lBQ3JCLENBQUMsQ0FBQztFQUNILENBQUM7RUFBQ1EsUUFBQSxDQUFBYixxQ0FBQSxHQUFBQSxxQ0FBQTtFQUVLLE1BQU1jLHNCQUFzQixHQUFHLFNBQUFBLENBQ3JDYiwwQkFBNkQsRUFDN0RDLGVBQTZDLEVBQ1Q7SUFDcEMsT0FBT0Msb0JBQW9CLENBQUNGLDBCQUEwQixFQUFFLGFBQWEsRUFBR0csVUFBMEMsSUFBSztNQUN0SCxJQUFJQyxhQUFnRCxHQUFHRCxVQUFVO01BQ2pFLElBQUlBLFVBQVUsQ0FBQ0UsU0FBUyxLQUFLQyxTQUFTLEVBQUU7UUFDdkM7UUFD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
699
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhZGRUZXh0QXJyYW5nZW1lbnRUb0JpbmRpbmdFeHByZXNzaW9uIiwiYmluZGluZ0V4cHJlc3Npb25Ub0VuaGFuY2UiLCJmdWxsQ29udGV4dFBhdGgiLCJ0cmFuc2Zvcm1SZWN1cnNpdmVseSIsImV4cHJlc3Npb24iLCJvdXRFeHByZXNzaW9uIiwibW9kZWxOYW1lIiwidW5kZWZpbmVkIiwib1Byb3BlcnR5RGF0YU1vZGVsUGF0aCIsImVuaGFuY2VEYXRhTW9kZWxQYXRoIiwicGF0aCIsIkNvbW1vbkZvcm1hdHRlcnMiLCJnZXRCaW5kaW5nV2l0aFRleHRBcnJhbmdlbWVudCIsIl9leHBvcnRzIiwiZm9ybWF0VmFsdWVSZWN1cnNpdmVseSIsInRhcmdldE9iamVjdCIsImZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24iLCJnZXRUZXh0QmluZGluZ0V4cHJlc3Npb24iLCJvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoIiwiZmllbGRGb3JtYXRPcHRpb25zIiwiZ2V0VGV4dEJpbmRpbmciLCJpbnB1dERhdGFNb2RlbFBhdGgiLCJhc09iamVjdCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImN1c3RvbUZvcm1hdHRlciIsImlzQW5ub3RhdGlvbk9mVHlwZSIsImZpZWxkVmFsdWUiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJWYWx1ZSIsImNvbXBpbGVFeHByZXNzaW9uIiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCIkdGFyZ2V0Iiwib1Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb24iLCJwYXRoSW5Nb2RlbCIsImdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJvVGFyZ2V0QmluZGluZyIsInByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCIsIm9UYXJnZXRQcm9wZXJ0eSIsImFubm90YXRpb25zIiwiVUkiLCJJbnB1dE1hc2siLCJ0eXBlIiwiZm9ybWF0T3B0aW9ucyIsIm1hc2siLCJNYXNrIiwidG9TdHJpbmciLCJwbGFjZWhvbGRlclN5bWJvbCIsIlBsYWNlaG9sZGVyU3ltYm9sIiwibWFza1J1bGUiLCJfZ2V0TWFza2luZ1J1bGVzIiwiUnVsZXMiLCJDb21tb24iLCJNYXNrZWQiLCJ2YWx1ZU9mIiwiZWRpdFN0eWxlIiwiTWVhc3VyZXMiLCJVbml0IiwiSVNPQ3VycmVuY3kiLCJVSUZvcm1hdHRlcnMiLCJnZXRCaW5kaW5nV2l0aFVuaXRPckN1cnJlbmN5Iiwic2hvd09ubHlVbml0RGVjaW1hbHMiLCJwcmVzZXJ2ZURlY2ltYWxzRm9yQ3VycmVuY3kiLCJtZWFzdXJlRGlzcGxheU1vZGUiLCJpc0NvbXBsZXhUeXBlRXhwcmVzc2lvbiIsInNob3dNZWFzdXJlIiwiVGltZXpvbmUiLCJnZXRCaW5kaW5nV2l0aFRpbWV6b25lIiwiSXNUaW1lem9uZSIsImdldEJpbmRpbmdGb3JUaW1lem9uZSIsIkRhdGVUaW1lU3R5bGUiLCJkYXRlVGltZVBhdHRlcm4iLCJkYXRlVGltZVN0eWxlIiwiZ2V0QmluZGluZ0ZvckRhdGVGb3JtYXQiLCJnZXRWYWx1ZUJpbmRpbmciLCJpZ25vcmVVbml0IiwiaWdub3JlRm9ybWF0dGluZyIsImJpbmRpbmdQYXJhbWV0ZXJzIiwidGFyZ2V0VHlwZUFueSIsImtlZXBVbml0IiwiZGVjaW1hbFBhZGRpbmciLCJmb3JEaXNwbGF5Iiwib05hdlBhdGgiLCJ0YXJnZXRFbnRpdHlUeXBlIiwicmVzb2x2ZVBhdGgiLCJ0YXJnZXQiLCJ2aXNpdGVkT2JqZWN0cyIsImZvckVhY2giLCJvTmF2T2JqIiwiaXNOYXZpZ2F0aW9uUHJvcGVydHkiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsInB1c2giLCJpc1Byb3BlcnR5IiwiaXNBY3Rpb25QYXJhbWV0ZXIiLCJvQmluZGluZ0V4cHJlc3Npb24iLCJpc1BhdGhJbk1vZGVsRXhwcmVzc2lvbiIsIkNvbW11bmljYXRpb24iLCJJc0VtYWlsQWRkcmVzcyIsInN0eWxlIiwidGFyZ2V0Rm9ybWF0T3B0aW9ucyIsIlN0cmluZyIsImlzQ3VycmVuY3lPclVuaXRBbGlnbmVkIiwiRXh0ZXJuYWxJRCIsImNvbnN0cmFpbnRzIiwicGFyYW1ldGVycyIsInRhcmdldFR5cGUiLCIkVHlwZSIsImdldEFzc29jaWF0ZWRUZXh0QmluZGluZyIsInRleHRQcm9wZXJ0eVBhdGgiLCJQcm9wZXJ0eUhlbHBlciIsImdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoIiwib1RleHRQcm9wZXJ0eVBhdGgiLCJhbGxvd1BhdGNoIiwidmFsdWVMaXN0T3V0UGFyYW1ldGVycyIsIlZhbHVlTGlzdCIsIlBhcmFtZXRlcnMiLCJtYXAiLCJwYXJhbWV0ZXIiLCJMb2NhbERhdGFQcm9wZXJ0eSIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImluY2x1ZGVzIiwiJCRub1BhdGNoIiwiaXNVc2VkSW5OYXZpZ2F0aW9uV2l0aFF1aWNrVmlld0ZhY2V0cyIsIm9EYXRhTW9kZWxQYXRoIiwib1Byb3BlcnR5IiwiYU5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiYVNlbWFudGljT2JqZWN0cyIsIlNlbWFudGljS2V5IiwiYklzVXNlZEluTmF2aWdhdGlvbldpdGhRdWlja1ZpZXdGYWNldHMiLCJvTmF2UHJvcCIsInJlZmVyZW50aWFsQ29uc3RyYWludCIsIm9SZWZDb25zdHJhaW50Iiwic291cmNlUHJvcGVydHkiLCJuYW1lIiwiUXVpY2tWaWV3RmFjZXRzIiwiY29udGV4dExvY2F0aW9uIiwidGFyZ2V0RW50aXR5U2V0IiwiYUlzVGFyZ2V0U2VtYW50aWNLZXkiLCJzb21lIiwib1NlbWFudGljIiwiaXNLZXkiLCJpc1JldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3RFbmFibGVkIiwib1Byb3BlcnR5UGF0aCIsIlRleHQiLCJoYXNWYWx1ZUhlbHAiLCJ0ZXh0QWxpZ25Nb2RlIiwiZ2V0VGV4dEFsaWdubWVudCIsImRhdGFGaWVsZE1vZGVsUGF0aCIsImNvbXB1dGVkRWRpdE1vZGUiLCJjb25zaWRlclRleHRBbm5vdGF0aW9uIiwidHlwZUZvckFsaWdubWVudCIsIlRhcmdldCIsImRpc3BsYXlNb2RlIiwidGV4dEFubm90YXRpb24iLCJ0ZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uIiwiVGV4dEFycmFuZ2VtZW50IiwiRmllbGRIZWxwZXIiLCJnZXRQcm9wZXJ0eUFsaWdubWVudCIsImdldFZpc2libGVFeHByZXNzaW9uIiwiZ2VuZXJhdGVWaXNpYmxlRXhwcmVzc2lvbiIsInZpc2libGVFeHByZXNzaW9uc0ZvckNvbm5lY3RlZEZpZWxkc0Zvcm1FbGVtZW50IiwiZGF0YUZpZWxkRm9yQW5ub3RhdGlvbiIsInZpc2libGVFeHByZXNzaW9uIiwiZGF0YUZpZWxkc0JpbmRpbmdFeHByZXNzaW9ucyIsImNvbm5lY3RlZEZpZWxkcyIsIk9iamVjdCIsInZhbHVlcyIsIkRhdGEiLCJmaWx0ZXIiLCJjb25uZWN0ZWRGaWVsZCIsImhhc093blByb3BlcnR5IiwiZGF0YUZpZWxkIiwiYmluZGluZ0V4cHJlc3Npb25PYmplY3QiLCJvciIsImdldFF1aWNrVmlld0JpbmRpbmciLCJnZXRRdWlja1ZpZXdUeXBlIiwiZGF0YUZpZWxkRGF0YU1vZGVsT2JqZWN0UGF0aCIsIlVybCIsIklzUGhvbmVOdW1iZXIiLCJnZXRTZW1hbnRpY09iamVjdHMiLCJhU2VtT2JqRXhwclRvUmVzb2x2ZSIsInNDdXN0b21EYXRhS2V5Iiwic0N1c3RvbURhdGFWYWx1ZSIsImFTZW1PYmpDdXN0b21EYXRhIiwiaXRlbSIsImtleSIsInZhbHVlIiwib1NlbWFudGljT2JqZWN0c01vZGVsIiwiSlNPTk1vZGVsIiwiJCR2YWx1ZUFzUHJvbWlzZSIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiZ2V0TXVsdGlwbGVMaW5lc0ZvckRhdGFGaWVsZCIsIm9UaGlzIiwiaXNNdWx0aUxpbmVUZXh0Iiwid3JhcCIsIl9oYXNWYWx1ZUhlbHBUb1Nob3ciLCJvUHJvcGVydHlVbml0IiwiZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSIsIm9Qcm9wZXJ0eUN1cnJlbmN5IiwiZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkiLCJnZXRNaW5NYXhEYXRlRXhwcmVzc2lvbiIsImRhdGVBbm5vdGF0aW9uIiwicmVsYXRpdmVMb2NhdGlvbiIsImZpeGVkRGF0ZSIsIlZhbGlkYXRpb24iLCIkRGF0ZSIsImRhdGVQcm9wZXJ0eSIsImZvcm1hdFJlc3VsdCIsImNvbnN0YW50IiwidmFsdWVGb3JtYXR0ZXJzIiwicHJvdmlkZURhdGVJbnN0YW5jZSIsIkJpbmRpbmdUb29sa2l0Iiwic2V0RWRpdFN0eWxlUHJvcGVydGllcyIsIm9Qcm9wcyIsIm9EYXRhRmllbGQiLCJvbmx5RWRpdFN0eWxlIiwiTWF4aW11bSIsIk1pbmltdW0iLCJwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uIiwidmFsdWVCaW5kaW5nRXhwcmVzc2lvbiIsImdldEJpbmRpbmdGb3JEYXRlUGlja2VyIiwiZWRpdFN0eWxlUGxhY2Vob2xkZXIiLCJQbGFjZWhvbGRlciIsImRhdGFQb2ludEFubm90YXRpb24iLCJpc0RhdGFGaWVsZEZvckFubm90YXRpb24iLCJWaXN1YWxpemF0aW9uIiwiUXVpY2tJbmZvIiwicmF0aW5nSW5kaWNhdG9yVG9vbHRpcCIsInJhdGluZ0luZGljYXRvclRhcmdldFZhbHVlIiwiVGFyZ2V0VmFsdWUiLCJoYXNTdGF0aWNQZXJjZW50VW5pdCIsInRleHRCaW5kaW5nRXhwcmVzc2lvbiIsImRhdGFNb2RlbFBhdGhFeHRlcm5hbElEIiwiaXNKU09OTW9kZWxVc2VkRm9yVmFsdWUiLCJ0ZXN0IiwiZGVzY3JpcHRpb24iLCJnZXRSZWxhdGl2ZVBhdGhzIiwibWF4RGF0ZUV4cHJlc3Npb24iLCJtaW5EYXRlRXhwcmVzc2lvbiIsInNob3dUaW1lem9uZSIsIk11bHRpTGluZVRleHQiLCJzdGF0aWNEZXNjcmlwdGlvbiIsIm1hc2tpbmdSdWxlcyIsInN5bWJvbCIsInJlZ2V4IiwibWFza2luZ1J1bGUiLCJNYXNrU3ltYm9sIiwiUmVnRXhwIiwiaGFzU2VtYW50aWNPYmplY3RJbk5hdmlnYXRpb25PclByb3BlcnR5IiwicHJvcGVydHkiLCJTZW1hbnRpY09iamVjdEhlbHBlciIsImhhc1NlbWFudGljT2JqZWN0IiwibGFzdE5hdlByb3AiLCJmaW5kIiwiY29udGV4dE5hdlByb3AiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yVmFsdWUiLCJpbml0aWFsRGF0YU1vZGVsT2JqZWN0UGF0aCIsInZhbHVlUGF0aCIsImlzQW5ub3RhdGlvbk9mVGVybSIsImluZGV4T2YiLCJyZXBsYWNlIiwiaGFzUHJvcGVydHlJbnNlcnRSZXN0cmljdGlvbnMiLCJub25JbnNlcnRhYmxlUHJvcGVydGllcyIsImdldENvbnRleHRQcm9wZXJ0eVJlc3RyaWN0aW9uIiwiY2FwYWJpbGl0aWVzIiwiSW5zZXJ0UmVzdHJpY3Rpb25zIiwiTm9uSW5zZXJ0YWJsZVByb3BlcnRpZXMiLCJub25JbnNlcnRhYmxlUHJvcGVydHkiLCJnZXREcmFmdEluZGljYXRvclZpc2libGVCaW5kaW5nIiwiZHJhZnRJbmRpY2F0b3JLZXkiLCJnZXRBdmF0YXJTaGFwZSIsIklzSW1hZ2VVUkwiLCJJc05hdHVyYWxQZXJzb24iLCJJc0ltYWdlIiwiZW50aXR5QW5ub3RhdGlvblRhcmdldCIsImF2YXRhclNoYXBlRXhwcmVzc2lvbiIsImlmRWxzZSIsIkF2YXRhclNoYXBlIiwiQ2lyY2xlIiwiU3F1YXJlIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGaWVsZFRlbXBsYXRpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuXHROYXZpZ2F0aW9uUHJvcGVydHksXG5cdFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0UHJvcGVydHksXG5cdFByb3BlcnR5QW5ub3RhdGlvblZhbHVlLFxuXHRTZXJ2aWNlT2JqZWN0QW5kQW5ub3RhdGlvblxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgQWN0aW9uUGFyYW1ldGVyIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXRBbm5vdGF0aW9uc19DYXBhYmlsaXRpZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NhcGFiaWxpdGllc19FZG1cIjtcbmltcG9ydCB0eXBlIHtcblx0VmFsdWVMaXN0UGFyYW1ldGVySW5PdXQsXG5cdFZhbHVlTGlzdFBhcmFtZXRlck91dFR5cGVzLFxuXHRWYWx1ZUxpc3RQYXJhbWV0ZXJUeXBlc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUFubm90YXRpb25zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9FZG1fVHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0RGF0YUZpZWxkLFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRUeXBlcyxcblx0RGF0YUZpZWxkV2l0aEFjdGlvbixcblx0RGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbixcblx0RGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoLFxuXHREYXRhRmllbGRXaXRoVXJsLFxuXHREYXRhUG9pbnRUeXBlLFxuXHREYXRhUG9pbnRUeXBlVHlwZXMsXG5cdElucHV0TWFza1J1bGVUeXBlVHlwZXNcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMsIFVJQW5ub3RhdGlvblR5cGVzLCB0eXBlIERhdGFGaWVsZEZvckFubm90YXRpb24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbixcblx0Q29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sXG5cdEV4cHJlc3Npb25PclByaW1pdGl2ZSxcblx0Rm9ybWF0T3B0aW9ucyxcblx0UGF0aEluTW9kZWxFeHByZXNzaW9uLFxuXHRQcmltaXRpdmVUeXBlXG59IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0ICogYXMgQmluZGluZ1Rvb2xraXQgZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRjb21waWxlRXhwcmVzc2lvbixcblx0Y29uc3RhbnQsXG5cdGZvcm1hdFJlc3VsdCxcblx0Zm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbixcblx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLFxuXHRpZkVsc2UsXG5cdGlzQ29tcGxleFR5cGVFeHByZXNzaW9uLFxuXHRpc1BhdGhJbk1vZGVsRXhwcmVzc2lvbixcblx0b3IsXG5cdHBhdGhJbk1vZGVsLFxuXHR0cmFuc2Zvcm1SZWN1cnNpdmVseVxufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGlzRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2Fubm90YXRpb25zL0RhdGFGaWVsZFwiO1xuaW1wb3J0IHZhbHVlRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9WYWx1ZUZvcm1hdHRlclwiO1xuaW1wb3J0IHtcblx0aXNBY3Rpb25QYXJhbWV0ZXIsXG5cdGlzQW5ub3RhdGlvbk9mVGVybSxcblx0aXNBbm5vdGF0aW9uT2ZUeXBlLFxuXHRpc05hdmlnYXRpb25Qcm9wZXJ0eSxcblx0aXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdGlzUHJvcGVydHlcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0ICogYXMgQ29tbW9uRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Db21tb25Gb3JtYXR0ZXJzXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZVZpc2libGVFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YUZpZWxkRm9ybWF0dGVyc1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHtcblx0ZW5oYW5jZURhdGFNb2RlbFBhdGgsXG5cdGdldENvbnRleHRQcm9wZXJ0eVJlc3RyaWN0aW9uLFxuXHRnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoLFxuXHRnZXRSZWxhdGl2ZVBhdGhzXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCAqIGFzIFByb3BlcnR5SGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgeyBoYXNTdGF0aWNQZXJjZW50VW5pdCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgKiBhcyBTZW1hbnRpY09iamVjdEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9TZW1hbnRpY09iamVjdEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBEaXNwbGF5TW9kZSwgUHJvcGVydHlPclBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCAqIGFzIFVJRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCB0eXBlIHsgSW5wdXRNYXNrUnVsZSB9IGZyb20gXCJzYXAvZmUvY29yZS90eXBlL0lucHV0TWFza1wiO1xuaW1wb3J0IHR5cGUgeyBGaWVsZEJsb2NrUHJvcGVydGllcyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL2ZpZWxkL0ZpZWxkU3RydWN0dXJlSGVscGVyXCI7XG5pbXBvcnQgQXZhdGFyU2hhcGUgZnJvbSBcInNhcC9tL0F2YXRhclNoYXBlXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBGaWVsZEZvcm1hdE9wdGlvbnMgZnJvbSBcIi4vRmllbGRGb3JtYXRPcHRpb25zXCI7XG5pbXBvcnQgRmllbGRIZWxwZXIgZnJvbSBcIi4vRmllbGRIZWxwZXJcIjtcblxuLyoqXG4gKiBSZWN1cnNpdmVseSBhZGQgdGhlIHRleHQgYXJyYW5nZW1lbnQgdG8gYSBiaW5kaW5nIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0gYmluZGluZ0V4cHJlc3Npb25Ub0VuaGFuY2UgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB0byBiZSBlbmhhbmNlZFxuICogQHBhcmFtIGZ1bGxDb250ZXh0UGF0aCBUaGUgY3VycmVudCBjb250ZXh0IHBhdGggd2UncmUgb24gKHRvIHByb3Blcmx5IHJlc29sdmUgdGhlIHRleHQgYXJyYW5nZW1lbnQgcHJvcGVydGllcylcbiAqIEByZXR1cm5zIEFuIHVwZGF0ZWQgZXhwcmVzc2lvbiBjb250YWluaW5nIHRoZSB0ZXh0IGFycmFuZ2VtZW50IGJpbmRpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRUZXh0QXJyYW5nZW1lbnRUb0JpbmRpbmdFeHByZXNzaW9uID0gZnVuY3Rpb24gKFxuXHRiaW5kaW5nRXhwcmVzc2lvblRvRW5oYW5jZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+LFxuXHRmdWxsQ29udGV4dFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+IHtcblx0cmV0dXJuIHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KGJpbmRpbmdFeHByZXNzaW9uVG9FbmhhbmNlLCBcIlBhdGhJbk1vZGVsXCIsIChleHByZXNzaW9uOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT4pID0+IHtcblx0XHRsZXQgb3V0RXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+ID0gZXhwcmVzc2lvbjtcblx0XHRpZiAoZXhwcmVzc2lvbi5tb2RlbE5hbWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gSW4gY2FzZSBvZiBkZWZhdWx0IG1vZGVsIHdlIHRoZW4gbmVlZCB0byByZXNvbHZlIHRoZSB0ZXh0IGFycmFuZ2VtZW50IHByb3BlcnR5XG5cdFx0XHRjb25zdCBvUHJvcGVydHlEYXRhTW9kZWxQYXRoID0gZW5oYW5jZURhdGFNb2RlbFBhdGg8UHJvcGVydHk+KGZ1bGxDb250ZXh0UGF0aCwgZXhwcmVzc2lvbi5wYXRoKTtcblx0XHRcdG91dEV4cHJlc3Npb24gPSBDb21tb25Gb3JtYXR0ZXJzLmdldEJpbmRpbmdXaXRoVGV4dEFycmFuZ2VtZW50KG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgsIGV4cHJlc3Npb24pO1xuXHRcdH1cblx0XHRyZXR1cm4gb3V0RXhwcmVzc2lvbjtcblx0fSk7XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0VmFsdWVSZWN1cnNpdmVseSA9IGZ1bmN0aW9uIChcblx0YmluZGluZ0V4cHJlc3Npb25Ub0VuaGFuY2U6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPixcblx0ZnVsbENvbnRleHRQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4ge1xuXHRyZXR1cm4gdHJhbnNmb3JtUmVjdXJzaXZlbHkoYmluZGluZ0V4cHJlc3Npb25Ub0VuaGFuY2UsIFwiUGF0aEluTW9kZWxcIiwgKGV4cHJlc3Npb246IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjx1bmtub3duPikgPT4ge1xuXHRcdGxldCBvdXRFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4gPSBleHByZXNzaW9uO1xuXHRcdGlmIChleHByZXNzaW9uLm1vZGVsTmFtZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBJbiBjYXNlIG9mIGRlZmF1bHQgbW9kZWwgd2UgdGhlbiBuZWVkIHRvIHJlc29sdmUgdGhlIHRleHQgYXJyYW5nZW1lbnQgcHJvcGVydHlcblx0XHRcdGNvbnN0IG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxQcm9wZXJ0eT4oZnVsbENvbnRleHRQYXRoLCBleHByZXNzaW9uLnBhdGgpO1xuXHRcdFx0aWYgKG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0KSB7XG5cdFx0XHRcdG91dEV4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0LCBleHByZXNzaW9uKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG91dEV4cHJlc3Npb247XG5cdH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFRleHRCaW5kaW5nRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdGZpZWxkRm9ybWF0T3B0aW9uczogUGFydGlhbDxGaWVsZEZvcm1hdE9wdGlvbnM+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB7XG5cdHJldHVybiBnZXRUZXh0QmluZGluZyhvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLCBmaWVsZEZvcm1hdE9wdGlvbnMsIHRydWUpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFRleHRCaW5kaW5nID0gZnVuY3Rpb24gKFxuXHRpbnB1dERhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcyB8IFByb3BlcnR5Pixcblx0ZmllbGRGb3JtYXRPcHRpb25zOiBQYXJ0aWFsPEZpZWxkRm9ybWF0T3B0aW9ucz4sXG5cdGFzT2JqZWN0ID0gZmFsc2UsXG5cdGN1c3RvbUZvcm1hdHRlcj86IHN0cmluZ1xuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGlmIChcblx0XHRpc0Fubm90YXRpb25PZlR5cGU8XG5cdFx0XHR8IERhdGFGaWVsZFxuXHRcdFx0fCBEYXRhUG9pbnRUeXBlXG5cdFx0XHR8IERhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aFxuXHRcdFx0fCBEYXRhRmllbGRXaXRoVXJsXG5cdFx0XHR8IERhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb25cblx0XHRcdHwgRGF0YUZpZWxkV2l0aEFjdGlvblxuXHRcdD4oaW5wdXREYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCwgW1xuXHRcdFx0VUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkLFxuXHRcdFx0VUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZSxcblx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aCxcblx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmwsXG5cdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRcdFx0VUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvblxuXHRcdF0pXG5cdCkge1xuXHRcdC8vIElmIHRoZXJlIGlzIG5vIHJlc29sdmVkIHByb3BlcnR5LCB0aGUgdmFsdWUgaXMgcmV0dXJuZWQgYXMgYSBjb25zdGFudFxuXHRcdGNvbnN0IGZpZWxkVmFsdWUgPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oaW5wdXREYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdC5WYWx1ZSkgPz8gXCJcIjtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oZmllbGRWYWx1ZSk7XG5cdH1cblx0aWYgKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKGlucHV0RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QpICYmIGlucHV0RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QuJHRhcmdldCkge1xuXHRcdGlucHV0RGF0YU1vZGVsUGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoPFByb3BlcnR5PihpbnB1dERhdGFNb2RlbFBhdGgsIGlucHV0RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QucGF0aCk7XG5cdH1cblx0Ly8gV2hlbiB0YXJnZXRPYmplY3QgaXMgYSBjb25zdGFudCB2YWx1ZVxuXHRpZiAodHlwZW9mIGlucHV0RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QgPT09IFwic3RyaW5nXCIpIHtcblx0XHRyZXR1cm4gaW5wdXREYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdDtcblx0fVxuXHRjb25zdCBvUHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiA9IHBhdGhJbk1vZGVsKGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgoaW5wdXREYXRhTW9kZWxQYXRoKSk7XG5cdGxldCBvVGFyZ2V0QmluZGluZztcblx0Y29uc3QgcHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoID0gaW5wdXREYXRhTW9kZWxQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+OyAvLyBBdCB0aGlzIHBvaW50IHdlIHNob3VsZCBvbmx5IGhhdmUgYSBwcm9wZXJ0eVxuXHRjb25zdCBvVGFyZ2V0UHJvcGVydHkgPSBwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0O1xuXHQvLyBmb3JtYXR0aW5nXG5cblx0aWYgKG9UYXJnZXRQcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LlVJPy5JbnB1dE1hc2spIHtcblx0XHRvVGFyZ2V0QmluZGluZyA9IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24ob1RhcmdldFByb3BlcnR5LCBvUHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbik7XG5cdFx0b1RhcmdldEJpbmRpbmcudHlwZSA9IFwic2FwLmZlLmNvcmUudHlwZS5JbnB1dE1hc2tcIjtcblx0XHRvVGFyZ2V0QmluZGluZy5mb3JtYXRPcHRpb25zID0ge1xuXHRcdFx0bWFzazogb1RhcmdldFByb3BlcnR5LmFubm90YXRpb25zPy5VST8uSW5wdXRNYXNrPy5NYXNrLnRvU3RyaW5nKCksXG5cdFx0XHRwbGFjZWhvbGRlclN5bWJvbDogb1RhcmdldFByb3BlcnR5LmFubm90YXRpb25zPy5VST8uSW5wdXRNYXNrPy5QbGFjZWhvbGRlclN5bWJvbC50b1N0cmluZygpLFxuXHRcdFx0bWFza1J1bGU6IF9nZXRNYXNraW5nUnVsZXMob1RhcmdldFByb3BlcnR5LmFubm90YXRpb25zPy5VST8uSW5wdXRNYXNrPy5SdWxlcylcblx0XHR9IGFzIHVua25vd24gYXMgRm9ybWF0T3B0aW9ucztcblx0fSBlbHNlIGlmIChvVGFyZ2V0UHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/Lk1hc2tlZD8udmFsdWVPZigpKSB7XG5cdFx0b1RhcmdldEJpbmRpbmcgPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKG9UYXJnZXRQcm9wZXJ0eSwgb1Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb24pO1xuXHRcdG9UYXJnZXRCaW5kaW5nLmZvcm1hdE9wdGlvbnMgPSB7XG5cdFx0XHRlZGl0U3R5bGU6IFwiTWFza2VkXCJcblx0XHR9IGFzIHVua25vd24gYXMgRm9ybWF0T3B0aW9ucztcblx0fSBlbHNlIGlmIChvVGFyZ2V0UHJvcGVydHk/LmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdCB8fCBvVGFyZ2V0UHJvcGVydHk/LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kpIHtcblx0XHRvVGFyZ2V0QmluZGluZyA9IFVJRm9ybWF0dGVycy5nZXRCaW5kaW5nV2l0aFVuaXRPckN1cnJlbmN5KFxuXHRcdFx0cHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdFx0b1Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb24sXG5cdFx0XHR1bmRlZmluZWQsXG5cdFx0XHR7fSxcblx0XHRcdHRydWUsXG5cdFx0XHRmaWVsZEZvcm1hdE9wdGlvbnMuc2hvd09ubHlVbml0RGVjaW1hbHMsXG5cdFx0XHRmaWVsZEZvcm1hdE9wdGlvbnMucHJlc2VydmVEZWNpbWFsc0ZvckN1cnJlbmN5XG5cdFx0KTtcblx0XHRpZiAoZmllbGRGb3JtYXRPcHRpb25zPy5tZWFzdXJlRGlzcGxheU1vZGUgPT09IFwiSGlkZGVuXCIgJiYgaXNDb21wbGV4VHlwZUV4cHJlc3Npb24ob1RhcmdldEJpbmRpbmcpKSB7XG5cdFx0XHQvLyBUT0RPOiBSZWZhY3RvciBvbmNlIHR5cGVzIGFyZSBsZXNzIGdlbmVyaWMgaGVyZVxuXHRcdFx0b1RhcmdldEJpbmRpbmcuZm9ybWF0T3B0aW9ucyA9IHtcblx0XHRcdFx0Li4ub1RhcmdldEJpbmRpbmcuZm9ybWF0T3B0aW9ucyxcblx0XHRcdFx0c2hvd01lYXN1cmU6IGZhbHNlXG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIGlmIChvVGFyZ2V0UHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/LlRpbWV6b25lICYmIG9UYXJnZXRQcm9wZXJ0eS50eXBlID09IFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCIpIHtcblx0XHRvVGFyZ2V0QmluZGluZyA9IFVJRm9ybWF0dGVycy5nZXRCaW5kaW5nV2l0aFRpbWV6b25lKFxuXHRcdFx0cHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdFx0b1Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb24sXG5cdFx0XHRmYWxzZSxcblx0XHRcdHRydWUsXG5cdFx0XHRmaWVsZEZvcm1hdE9wdGlvbnMgYXMgRmllbGRGb3JtYXRPcHRpb25zXG5cdFx0KTtcblx0fSBlbHNlIGlmIChvVGFyZ2V0UHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/LklzVGltZXpvbmUpIHtcblx0XHRvVGFyZ2V0QmluZGluZyA9IFVJRm9ybWF0dGVycy5nZXRCaW5kaW5nRm9yVGltZXpvbmUocHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLCBvUHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbik7XG5cdH0gZWxzZSBpZiAoXG5cdFx0b1RhcmdldFByb3BlcnR5Py5hbm5vdGF0aW9ucz8uVUk/LkRhdGVUaW1lU3R5bGUgfHxcblx0XHRmaWVsZEZvcm1hdE9wdGlvbnM/LmRhdGVUaW1lUGF0dGVybiB8fFxuXHRcdGZpZWxkRm9ybWF0T3B0aW9ucz8uZGF0ZVRpbWVTdHlsZVxuXHQpIHtcblx0XHRvVGFyZ2V0QmluZGluZyA9IFVJRm9ybWF0dGVycy5nZXRCaW5kaW5nRm9yRGF0ZUZvcm1hdChwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgsIG9Qcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLCBmaWVsZEZvcm1hdE9wdGlvbnMpO1xuXHR9IGVsc2Uge1xuXHRcdG9UYXJnZXRCaW5kaW5nID0gQ29tbW9uRm9ybWF0dGVycy5nZXRCaW5kaW5nV2l0aFRleHRBcnJhbmdlbWVudChcblx0XHRcdHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHRcdG9Qcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLFxuXHRcdFx0ZmllbGRGb3JtYXRPcHRpb25zLFxuXHRcdFx0Y3VzdG9tRm9ybWF0dGVyXG5cdFx0KTtcblx0fVxuXG5cdGlmIChhc09iamVjdCkge1xuXHRcdHJldHVybiBvVGFyZ2V0QmluZGluZztcblx0fVxuXHQvLyBXZSBkb24ndCBpbmNsdWRlICQkbm9wYXRjaCBhbmQgcGFyc2VLZWVwRW1wdHlTdHJpbmcgYXMgdGhleSBtYWtlIG5vIHNlbnNlIGluIHRoZSB0ZXh0IGJpbmRpbmcgY2FzZVxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24ob1RhcmdldEJpbmRpbmcpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFZhbHVlQmluZGluZyA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eSB8IERhdGFGaWVsZFR5cGVzIHwgQWN0aW9uUGFyYW1ldGVyPixcblx0ZmllbGRGb3JtYXRPcHRpb25zOiBQYXJ0aWFsPEZpZWxkRm9ybWF0T3B0aW9ucz4sXG5cdGlnbm9yZVVuaXQgPSBmYWxzZSxcblx0aWdub3JlRm9ybWF0dGluZyA9IGZhbHNlLFxuXHRiaW5kaW5nUGFyYW1ldGVycz86IG9iamVjdCxcblx0dGFyZ2V0VHlwZUFueSA9IGZhbHNlLFxuXHRrZWVwVW5pdCA9IGZhbHNlLFxuXHRkZWNpbWFsUGFkZGluZz86IG51bWJlcixcblx0Zm9yRGlzcGxheSA9IGZhbHNlLFxuXHRhc09iamVjdCA9IGZhbHNlXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGlmIChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCkgJiYgb1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuJHRhcmdldCkge1xuXHRcdGNvbnN0IG9OYXZQYXRoID0gb1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRFbnRpdHlUeXBlLnJlc29sdmVQYXRoKG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LnBhdGgsIHRydWUpO1xuXHRcdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0ID0gb05hdlBhdGgudGFyZ2V0O1xuXHRcdG9OYXZQYXRoLnZpc2l0ZWRPYmplY3RzLmZvckVhY2goKG9OYXZPYmo6IFNlcnZpY2VPYmplY3RBbmRBbm5vdGF0aW9uKSA9PiB7XG5cdFx0XHRpZiAoaXNOYXZpZ2F0aW9uUHJvcGVydHkob05hdk9iaikpIHtcblx0XHRcdFx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcy5wdXNoKG9OYXZPYmopO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0Y29uc3QgdGFyZ2V0T2JqZWN0ID0gb1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q7XG5cdGlmIChpc1Byb3BlcnR5KHRhcmdldE9iamVjdCkgfHwgaXNBY3Rpb25QYXJhbWV0ZXIodGFyZ2V0T2JqZWN0KSkge1xuXHRcdGxldCBvQmluZGluZ0V4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPiA9IHBhdGhJbk1vZGVsKFxuXHRcdFx0Z2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aChvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoKVxuXHRcdCk7XG5cdFx0aWYgKGlzUGF0aEluTW9kZWxFeHByZXNzaW9uKG9CaW5kaW5nRXhwcmVzc2lvbikpIHtcblx0XHRcdGlmIChpc1Byb3BlcnR5KHRhcmdldE9iamVjdCkgJiYgdGFyZ2V0T2JqZWN0LmFubm90YXRpb25zPy5Db21tdW5pY2F0aW9uPy5Jc0VtYWlsQWRkcmVzcykge1xuXHRcdFx0XHRvQmluZGluZ0V4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKHRhcmdldE9iamVjdCwgb0JpbmRpbmdFeHByZXNzaW9uKTtcblx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uLnR5cGUgPSBcInNhcC5mZS5jb3JlLnR5cGUuRW1haWxcIjtcblx0XHRcdH0gZWxzZSBpZiAodGFyZ2V0T2JqZWN0LmFubm90YXRpb25zPy5VST8uSW5wdXRNYXNrKSB7XG5cdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbiA9IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24odGFyZ2V0T2JqZWN0LCBvQmluZGluZ0V4cHJlc3Npb24pO1xuXHRcdFx0XHRvQmluZGluZ0V4cHJlc3Npb24udHlwZSA9IFwic2FwLmZlLmNvcmUudHlwZS5JbnB1dE1hc2tcIjtcblx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMgPSB7XG5cdFx0XHRcdFx0Li4ub0JpbmRpbmdFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdFx0bWFzazogdGFyZ2V0T2JqZWN0LmFubm90YXRpb25zLlVJLklucHV0TWFzay5NYXNrLFxuXHRcdFx0XHRcdHBsYWNlaG9sZGVyU3ltYm9sOiB0YXJnZXRPYmplY3QuYW5ub3RhdGlvbnMuVUkuSW5wdXRNYXNrLlBsYWNlaG9sZGVyU3ltYm9sLFxuXHRcdFx0XHRcdG1hc2tSdWxlOiBfZ2V0TWFza2luZ1J1bGVzKHRhcmdldE9iamVjdC5hbm5vdGF0aW9ucy5VSS5JbnB1dE1hc2suUnVsZXMpXG5cdFx0XHRcdH0gYXMgRm9ybWF0T3B0aW9ucztcblx0XHRcdH0gZWxzZSBpZiAoaXNQcm9wZXJ0eSh0YXJnZXRPYmplY3QpICYmIHRhcmdldE9iamVjdC5hbm5vdGF0aW9ucz8uQ29tbW9uPy5NYXNrZWQ/LnZhbHVlT2YoKSkge1xuXHRcdFx0XHRvQmluZGluZ0V4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKHRhcmdldE9iamVjdCwgb0JpbmRpbmdFeHByZXNzaW9uKTtcblx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMgPSB7XG5cdFx0XHRcdFx0Li4ub0JpbmRpbmdFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdFx0c3R5bGU6IFwicGFzc3dvcmRcIlxuXHRcdFx0XHR9IGFzIEZvcm1hdE9wdGlvbnM7XG5cdFx0XHR9IGVsc2UgaWYgKCFpZ25vcmVVbml0ICYmICh0YXJnZXRPYmplY3QuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeSB8fCB0YXJnZXRPYmplY3QuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0KSkge1xuXHRcdFx0XHRjb25zdCB0YXJnZXRGb3JtYXRPcHRpb25zOiB7XG5cdFx0XHRcdFx0c2hvd01lYXN1cmU/OiBib29sZWFuO1xuXHRcdFx0XHRcdGRlY2ltYWxQYWRkaW5nPzogbnVtYmVyO1xuXHRcdFx0XHR9ID0ge307XG5cdFx0XHRcdGlmICgha2VlcFVuaXQpIHtcblx0XHRcdFx0XHR0YXJnZXRGb3JtYXRPcHRpb25zW1wic2hvd01lYXN1cmVcIl0gPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoU3RyaW5nKGZpZWxkRm9ybWF0T3B0aW9ucy5pc0N1cnJlbmN5T3JVbml0QWxpZ25lZCkgPT09IFwidHJ1ZVwiKSB7XG5cdFx0XHRcdFx0dGFyZ2V0Rm9ybWF0T3B0aW9uc1tcImRlY2ltYWxQYWRkaW5nXCJdID0gZGVjaW1hbFBhZGRpbmc7XG5cdFx0XHRcdH1cblx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uID0gVUlGb3JtYXR0ZXJzLmdldEJpbmRpbmdXaXRoVW5pdE9yQ3VycmVuY3koXG5cdFx0XHRcdFx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pixcblx0XHRcdFx0XHRvQmluZGluZ0V4cHJlc3Npb24sXG5cdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHRrZWVwVW5pdCA/IHVuZGVmaW5lZCA6IHRhcmdldEZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdFx0Zm9yRGlzcGxheSxcblx0XHRcdFx0XHRmaWVsZEZvcm1hdE9wdGlvbnMuc2hvd09ubHlVbml0RGVjaW1hbHMsXG5cdFx0XHRcdFx0ZmllbGRGb3JtYXRPcHRpb25zLnByZXNlcnZlRGVjaW1hbHNGb3JDdXJyZW5jeVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIGlmICh0YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5Db21tb24/LklzVGltZXpvbmUpIHtcblx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uID0gVUlGb3JtYXR0ZXJzLmdldEJpbmRpbmdGb3JUaW1lem9uZShcblx0XHRcdFx0XHRvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRcdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvblxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0dGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uVUk/LkRhdGVUaW1lU3R5bGUgfHxcblx0XHRcdFx0ZmllbGRGb3JtYXRPcHRpb25zPy5kYXRlVGltZVBhdHRlcm4gfHxcblx0XHRcdFx0ZmllbGRGb3JtYXRPcHRpb25zPy5kYXRlVGltZVN0eWxlXG5cdFx0XHQpIHtcblx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uID0gVUlGb3JtYXR0ZXJzLmdldEJpbmRpbmdGb3JEYXRlRm9ybWF0KFxuXHRcdFx0XHRcdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdFx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uLFxuXHRcdFx0XHRcdGZpZWxkRm9ybWF0T3B0aW9uc1xuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIGlmICh0YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5Db21tb24/LlRpbWV6b25lICYmIHRhcmdldE9iamVjdC50eXBlID09PSBcIkVkbS5EYXRlVGltZU9mZnNldFwiKSB7XG5cdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbiA9IFVJRm9ybWF0dGVycy5nZXRCaW5kaW5nV2l0aFRpbWV6b25lKFxuXHRcdFx0XHRcdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdFx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uLFxuXHRcdFx0XHRcdHRydWVcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbiA9IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24odGFyZ2V0T2JqZWN0LCBvQmluZGluZ0V4cHJlc3Npb24pO1xuXHRcdFx0XHRpZiAodGFyZ2V0T2JqZWN0LmFubm90YXRpb25zLkNvbW1vbj8uRXh0ZXJuYWxJRCkge1xuXHRcdFx0XHRcdChvQmluZGluZ0V4cHJlc3Npb24gYXMgeyBwYXRoOiBzdHJpbmcgfSkucGF0aCArPSBcIkAkdWk1LmZlLkBDb21tb24vRXh0ZXJuYWxJRFwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc1BhdGhJbk1vZGVsRXhwcmVzc2lvbihvQmluZGluZ0V4cHJlc3Npb24pKSB7XG5cdFx0XHRcdGlmIChpZ25vcmVGb3JtYXR0aW5nKSB7XG5cdFx0XHRcdFx0ZGVsZXRlIG9CaW5kaW5nRXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zO1xuXHRcdFx0XHRcdGRlbGV0ZSBvQmluZGluZ0V4cHJlc3Npb24uY29uc3RyYWludHM7XG5cdFx0XHRcdFx0ZGVsZXRlIG9CaW5kaW5nRXhwcmVzc2lvbi50eXBlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChiaW5kaW5nUGFyYW1ldGVycykge1xuXHRcdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbi5wYXJhbWV0ZXJzID0gYmluZGluZ1BhcmFtZXRlcnM7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRhcmdldFR5cGVBbnkpIHtcblx0XHRcdFx0XHRvQmluZGluZ0V4cHJlc3Npb24udGFyZ2V0VHlwZSA9IFwiYW55XCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChhc09iamVjdCkge1xuXHRcdFx0XHRyZXR1cm4gb0JpbmRpbmdFeHByZXNzaW9uIGFzIHVua25vd24gYXMgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24ob0JpbmRpbmdFeHByZXNzaW9uKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gaWYgc29tZWhvdyB3ZSBjb3VsZCBub3QgY29tcGlsZSB0aGUgYmluZGluZyAtPiByZXR1cm4gZW1wdHkgc3RyaW5nXG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9XG5cdH0gZWxzZSBpZiAoXG5cdFx0dGFyZ2V0T2JqZWN0Py4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybCB8fFxuXHRcdHRhcmdldE9iamVjdD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aFxuXHQpIHtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKCh0YXJnZXRPYmplY3QgYXMgRGF0YUZpZWxkV2l0aFVybCkuVmFsdWUpKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxufTtcblxuZXhwb3J0IGNvbnN0IGdldEFzc29jaWF0ZWRUZXh0QmluZGluZyA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdGZpZWxkRm9ybWF0T3B0aW9uczogUGFydGlhbDxGaWVsZEZvcm1hdE9wdGlvbnM+XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IHRleHRQcm9wZXJ0eVBhdGggPSBQcm9wZXJ0eUhlbHBlci5nZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aChvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCk7XG5cdGlmICh0ZXh0UHJvcGVydHlQYXRoKSB7XG5cdFx0Y29uc3Qgb1RleHRQcm9wZXJ0eVBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxQcm9wZXJ0eT4ob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCwgdGV4dFByb3BlcnR5UGF0aCk7XG5cdFx0Ly9CQ1AgMjM4MDEyMDgwNjogZ2V0VmFsdWVCaW5kaW5nIG5lZWRzIHRvIGJlIGFibGUgdG8gc2V0IGZvcm1hdE9wdGlvbnMucGFyc2VLZWVwc0VtcHR5U3RyaW5nLlxuXHRcdC8vT3RoZXJ3aXNlIGVtcHR5aW5nIGFuIGlucHV0IGZpZWxkIHRoYXQgaGFzIGEgdGV4dCBhbm5vdGF0aW9uIHRvIGEgbm90IG51bGxhYmxlIHN0cmluZyB3b3VsZCByZXN1bHQgaW5cblx0XHQvL2FuIGVycm9yIG1lc3NhZ2UuIFRoZXJlZm9yZSBpbXBvcnQgcGFyYW0gJ2lnbm9yZUZvcm1hdHRpbmcnIGlzIG5vdyBzZXQgdG8gZmFsc2UuXG5cdFx0bGV0IGFsbG93UGF0Y2ggPSBmYWxzZTtcblx0XHRjb25zdCB2YWx1ZUxpc3RPdXRQYXJhbWV0ZXJzOiBzdHJpbmdbXSA9XG5cdFx0XHRvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0Py5QYXJhbWV0ZXJzLm1hcChcblx0XHRcdFx0KHBhcmFtZXRlcjogVmFsdWVMaXN0UGFyYW1ldGVyVHlwZXMpID0+IHtcblx0XHRcdFx0XHRpZiAoIXBhcmFtZXRlcikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQocGFyYW1ldGVyIGFzIFZhbHVlTGlzdFBhcmFtZXRlckluT3V0IHwgVmFsdWVMaXN0UGFyYW1ldGVyT3V0VHlwZXMpPy5Mb2NhbERhdGFQcm9wZXJ0eT8uJHRhcmdldFxuXHRcdFx0XHRcdFx0XHQ/LmZ1bGx5UXVhbGlmaWVkTmFtZSA/PyBcIlwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0KSB8fCBbXTtcblx0XHRpZiAoXG5cdFx0XHRvVGV4dFByb3BlcnR5UGF0aD8udGFyZ2V0T2JqZWN0Py5mdWxseVF1YWxpZmllZE5hbWUgJiZcblx0XHRcdHZhbHVlTGlzdE91dFBhcmFtZXRlcnMuaW5jbHVkZXMob1RleHRQcm9wZXJ0eVBhdGgudGFyZ2V0T2JqZWN0LmZ1bGx5UXVhbGlmaWVkTmFtZSlcblx0XHQpIHtcblx0XHRcdGFsbG93UGF0Y2ggPSB0cnVlO1xuXHRcdH1cblx0XHRjb25zdCBiaW5kaW5nUGFyYW1ldGVycyA9IGFsbG93UGF0Y2ggPyB1bmRlZmluZWQgOiB7ICQkbm9QYXRjaDogdHJ1ZSB9O1xuXHRcdHJldHVybiBnZXRWYWx1ZUJpbmRpbmcob1RleHRQcm9wZXJ0eVBhdGgsIGZpZWxkRm9ybWF0T3B0aW9ucywgdHJ1ZSwgZmFsc2UsIGJpbmRpbmdQYXJhbWV0ZXJzLCBmYWxzZSwgZmFsc2UsIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1VzZWRJbk5hdmlnYXRpb25XaXRoUXVpY2tWaWV3RmFjZXRzID0gZnVuY3Rpb24gKG9EYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+LCBvUHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdGNvbnN0IGFOYXZpZ2F0aW9uUHJvcGVydGllcyA9IG9EYXRhTW9kZWxQYXRoPy50YXJnZXRFbnRpdHlUeXBlPy5uYXZpZ2F0aW9uUHJvcGVydGllcyB8fCBbXTtcblx0Y29uc3QgYVNlbWFudGljT2JqZWN0cyA9IG9EYXRhTW9kZWxQYXRoPy50YXJnZXRFbnRpdHlUeXBlPy5hbm5vdGF0aW9ucz8uQ29tbW9uPy5TZW1hbnRpY0tleSB8fCBbXTtcblx0bGV0IGJJc1VzZWRJbk5hdmlnYXRpb25XaXRoUXVpY2tWaWV3RmFjZXRzID0gZmFsc2U7XG5cdGFOYXZpZ2F0aW9uUHJvcGVydGllcy5mb3JFYWNoKChvTmF2UHJvcDogTmF2aWdhdGlvblByb3BlcnR5KSA9PiB7XG5cdFx0aWYgKG9OYXZQcm9wLnJlZmVyZW50aWFsQ29uc3RyYWludCAmJiBvTmF2UHJvcC5yZWZlcmVudGlhbENvbnN0cmFpbnQubGVuZ3RoKSB7XG5cdFx0XHRvTmF2UHJvcC5yZWZlcmVudGlhbENvbnN0cmFpbnQuZm9yRWFjaCgob1JlZkNvbnN0cmFpbnQpID0+IHtcblx0XHRcdFx0aWYgKG9SZWZDb25zdHJhaW50Py5zb3VyY2VQcm9wZXJ0eSA9PT0gb1Byb3BlcnR5Lm5hbWUpIHtcblx0XHRcdFx0XHRpZiAob05hdlByb3A/LnRhcmdldFR5cGU/LmFubm90YXRpb25zPy5VST8uUXVpY2tWaWV3RmFjZXRzKSB7XG5cdFx0XHRcdFx0XHRiSXNVc2VkSW5OYXZpZ2F0aW9uV2l0aFF1aWNrVmlld0ZhY2V0cyA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xuXHRpZiAob0RhdGFNb2RlbFBhdGguY29udGV4dExvY2F0aW9uPy50YXJnZXRFbnRpdHlTZXQgIT09IG9EYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVNldCkge1xuXHRcdGNvbnN0IGFJc1RhcmdldFNlbWFudGljS2V5ID0gYVNlbWFudGljT2JqZWN0cy5zb21lKGZ1bmN0aW9uIChvU2VtYW50aWMpIHtcblx0XHRcdHJldHVybiBvU2VtYW50aWM/LiR0YXJnZXQ/Lm5hbWUgPT09IG9Qcm9wZXJ0eS5uYW1lO1xuXHRcdH0pO1xuXHRcdGlmICgoYUlzVGFyZ2V0U2VtYW50aWNLZXkgfHwgb1Byb3BlcnR5LmlzS2V5KSAmJiBvRGF0YU1vZGVsUGF0aD8udGFyZ2V0RW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LlVJPy5RdWlja1ZpZXdGYWNldHMpIHtcblx0XHRcdGJJc1VzZWRJbk5hdmlnYXRpb25XaXRoUXVpY2tWaWV3RmFjZXRzID0gdHJ1ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGJJc1VzZWRJbk5hdmlnYXRpb25XaXRoUXVpY2tWaWV3RmFjZXRzO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzUmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdEVuYWJsZWQgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0ZmllbGRGb3JtYXRPcHRpb25zOiB7IGRpc3BsYXlNb2RlPzogRGlzcGxheU1vZGU7IHRleHRBbGlnbk1vZGU/OiBzdHJpbmcgfVxuKTogYm9vbGVhbiB7XG5cdGNvbnN0IG9Qcm9wZXJ0eTogUHJvcGVydHkgPSAoaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCkgJiYgb1Byb3BlcnR5UGF0aC4kdGFyZ2V0KSB8fCAob1Byb3BlcnR5UGF0aCBhcyBQcm9wZXJ0eSk7XG5cdGlmIChcblx0XHQhb1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LlRleHQgJiZcblx0XHQhb1Byb3BlcnR5LmFubm90YXRpb25zPy5NZWFzdXJlcyAmJlxuXHRcdFByb3BlcnR5SGVscGVyLmhhc1ZhbHVlSGVscChvUHJvcGVydHkpICYmXG5cdFx0ZmllbGRGb3JtYXRPcHRpb25zLnRleHRBbGlnbk1vZGUgPT09IFwiRm9ybVwiXG5cdCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0ZXh0IGFsaWdubWVudCBiYXNlZCBvbiB0aGUgZGF0YU1vZGVsT2JqZWN0UGF0aC5cbiAqIEBwYXJhbSBkYXRhRmllbGRNb2RlbFBhdGggVGhlIHByb3BlcnR5J3MgdHlwZVxuICogQHBhcmFtIGZvcm1hdE9wdGlvbnMgVGhlIGZpZWxkIGZvcm1hdCBvcHRpb25zXG4gKiBAcGFyYW0gZm9ybWF0T3B0aW9ucy5kaXNwbGF5TW9kZSBEaXNwbGF5IGZvcm1hdFxuICogQHBhcmFtIGZvcm1hdE9wdGlvbnMudGV4dEFsaWduTW9kZSBUZXh0IGFsaWdubWVudCBvZiB0aGUgZmllbGRcbiAqIEBwYXJhbSBjb21wdXRlZEVkaXRNb2RlIFRoZSBlZGl0TW9kZSB1c2VkIGluIHRoaXMgY2FzZVxuICogQHBhcmFtIGNvbnNpZGVyVGV4dEFubm90YXRpb24gV2hldGhlciB0byBjb25zaWRlciB0aGUgdGV4dCBhbm5vdGF0aW9uIHdoZW4gY29tcHV0aW5nIHRoZSBhbGlnbm1lbnRcbiAqIEByZXR1cm5zIFRoZSBwcm9wZXJ0eSBhbGlnbm1lbnRcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFRleHRBbGlnbm1lbnQgPSBmdW5jdGlvbiAoXG5cdGRhdGFGaWVsZE1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPixcblx0Zm9ybWF0T3B0aW9uczogeyBkaXNwbGF5TW9kZT86IHN0cmluZzsgdGV4dEFsaWduTW9kZT86IHN0cmluZyB9LFxuXHRjb21wdXRlZEVkaXRNb2RlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPixcblx0Y29uc2lkZXJUZXh0QW5ub3RhdGlvbiA9IGZhbHNlXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdC8vIGNoZWNrIGZvciB0aGUgdGFyZ2V0IHZhbHVlIHR5cGUgZGlyZWN0bHksIG9yIGluIGNhc2UgaXQgaXMgcG9pbnRpbmcgdG8gYSBEYXRhUG9pbnQgd2UgbG9vayBhdCB0aGUgZGF0YVBvaW50J3MgdmFsdWVcblx0bGV0IHR5cGVGb3JBbGlnbm1lbnQgPVxuXHRcdChkYXRhRmllbGRNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWU/LiR0YXJnZXQudHlwZSB8fFxuXHRcdCgoZGF0YUZpZWxkTW9kZWxQYXRoLnRhcmdldE9iamVjdCBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKT8uVGFyZ2V0Py4kdGFyZ2V0IGFzIERhdGFQb2ludFR5cGUpPy5WYWx1ZS4kdGFyZ2V0LnR5cGU7XG5cblx0aWYgKFxuXHRcdFByb3BlcnR5SGVscGVyLmlzS2V5KFxuXHRcdFx0KGRhdGFGaWVsZE1vZGVsUGF0aC50YXJnZXRPYmplY3QgYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZT8uJHRhcmdldCB8fFxuXHRcdFx0XHQoKGRhdGFGaWVsZE1vZGVsUGF0aC50YXJnZXRPYmplY3QgYXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbik/LlRhcmdldD8uJHRhcmdldCBhcyBEYXRhUG9pbnRUeXBlKT8uVmFsdWU/LiR0YXJnZXRcblx0XHQpXG5cdCkge1xuXHRcdHJldHVybiBcIkJlZ2luXCI7XG5cdH1cblx0aWYgKFxuXHRcdGNvbnNpZGVyVGV4dEFubm90YXRpb24gJiZcblx0XHRmb3JtYXRPcHRpb25zLmRpc3BsYXlNb2RlICYmXG5cdFx0W1wiRGVzY3JpcHRpb25cIiwgXCJEZXNjcmlwdGlvblZhbHVlXCIsIFwiVmFsdWVEZXNjcmlwdGlvblwiXS5pbmNsdWRlcyhmb3JtYXRPcHRpb25zLmRpc3BsYXlNb2RlKVxuXHQpIHtcblx0XHRjb25zdCB0ZXh0QW5ub3RhdGlvbiA9IChkYXRhRmllbGRNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWU/LiR0YXJnZXQuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dDtcblx0XHRjb25zdCB0ZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uID0gdGV4dEFubm90YXRpb24/LmFubm90YXRpb25zPy5VST8uVGV4dEFycmFuZ2VtZW50LnZhbHVlT2YoKTtcblx0XHRpZiAodGV4dEFubm90YXRpb24gJiYgdGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiAhPT0gXCJVSS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRTZXBhcmF0ZVwiKSB7XG5cdFx0XHR0eXBlRm9yQWxpZ25tZW50ID0gdGV4dEFubm90YXRpb24uJHRhcmdldC50eXBlO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBGaWVsZEhlbHBlci5nZXRQcm9wZXJ0eUFsaWdubWVudCh0eXBlRm9yQWxpZ25tZW50LCBmb3JtYXRPcHRpb25zLCBjb21wdXRlZEVkaXRNb2RlKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYmluZGluZyBleHByZXNzaW9uIHRvIGV2YWx1YXRlIHRoZSB2aXNpYmlsaXR5IG9mIGEgRGF0YUZpZWxkIG9yIERhdGFQb2ludCBhbm5vdGF0aW9uLlxuICpcbiAqIFNBUCBGaW9yaSBlbGVtZW50cyB3aWxsIGV2YWx1YXRlIGVpdGhlciB0aGUgVUkuSGlkZGVuIGFubm90YXRpb24gZGVmaW5lZCBvbiB0aGUgYW5ub3RhdGlvbiBpdHNlbGYgb3Igb24gdGhlIHRhcmdldCBwcm9wZXJ0eS5cbiAqIEBwYXJhbSBkYXRhRmllbGRNb2RlbFBhdGggVGhlIG1ldGFwYXRoIHJlZmVycmluZyB0byB0aGUgYW5ub3RhdGlvbiB3ZSBhcmUgZXZhbHVhdGluZy5cbiAqIEBwYXJhbSBbZm9ybWF0T3B0aW9uc10gRm9ybWF0T3B0aW9ucyBvcHRpb25hbC5cbiAqIEBwYXJhbSBmb3JtYXRPcHRpb25zLmlzQW5hbHl0aWNzIFRoaXMgZmxhZyBpcyBzZXQgd2hlbiB1c2luZyBhbiBhbmFseXRpY2FsIHRhYmxlLlxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbiB0aGF0IHlvdSBjYW4gYmluZCB0byB0aGUgVUkuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRWaXNpYmxlRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChcblx0ZGF0YUZpZWxkTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMgfCBQcm9wZXJ0eT4sXG5cdGZvcm1hdE9wdGlvbnM/OiB7IGlzQW5hbHl0aWNzPzogYm9vbGVhbiB9XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihnZW5lcmF0ZVZpc2libGVFeHByZXNzaW9uKGRhdGFGaWVsZE1vZGVsUGF0aCwgZm9ybWF0T3B0aW9ucykpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBCb29sZWFuIG9yIG90aGVyIGV4cHJlc3Npb24gZm9yIHRoZSB2aXNpYmlsaXR5IG9mIGEgRm9ybUVsZW1lbnQuXG4gKiBUaGUgRm9ybUVsZW1lbnQgaXMgdmlzaWJsZSBpZiBhdCBsZWFzdCBvbmUgY29udGVudCBpcyB2aXNpYmxlLCBvdGhlcndpc2UgaW52aXNpYmxlLlxuICogQHBhcmFtIGRhdGFGaWVsZE1vZGVsUGF0aCBUaGUgbWV0YXBhdGggcmVmZXJyaW5nIHRvIHRoZSBhbm5vdGF0aW9uIHdlIGFyZSBldmFsdWF0aW5nLlxuICogQHJldHVybnMgQSBCb29sZWFuIG9yIG90aGVyIGV4cHJlc3Npb24gdGhhdCBjYW4gYmUgYm91bmQgdG8gdGhlIFVJLlxuICovXG5leHBvcnQgY29uc3QgdmlzaWJsZUV4cHJlc3Npb25zRm9yQ29ubmVjdGVkRmllbGRzRm9ybUVsZW1lbnQgPSBmdW5jdGlvbiAoXG5cdGRhdGFGaWVsZE1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzIHwgUHJvcGVydHk+XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IGRhdGFGaWVsZEZvckFubm90YXRpb24gPSBkYXRhRmllbGRNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIERhdGFGaWVsZEFic3RyYWN0VHlwZXM7XG5cdGNvbnN0IHZpc2libGVFeHByZXNzaW9uID0gY29tcGlsZUV4cHJlc3Npb24oZ2VuZXJhdGVWaXNpYmxlRXhwcmVzc2lvbihkYXRhRmllbGRNb2RlbFBhdGgpKTtcblxuXHRjb25zdCBkYXRhRmllbGRzQmluZGluZ0V4cHJlc3Npb25zOiAoYm9vbGVhbiB8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPilbXSA9IFtdO1xuXHRpZiAodHlwZW9mIHZpc2libGVFeHByZXNzaW9uID09PSBcInN0cmluZ1wiICYmIHZpc2libGVFeHByZXNzaW9uLmluY2x1ZGVzKFwiez1cIikpIHtcblx0XHRyZXR1cm4gdmlzaWJsZUV4cHJlc3Npb247XG5cdH1cblx0aWYgKFxuXHRcdGRhdGFGaWVsZEZvckFubm90YXRpb24uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiZcblx0XHRkYXRhRmllbGRGb3JBbm5vdGF0aW9uLlRhcmdldC4kdGFyZ2V0Py4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuQ29ubmVjdGVkRmllbGRzVHlwZVxuXHQpIHtcblx0XHRjb25zdCBjb25uZWN0ZWRGaWVsZHMgPSBPYmplY3QudmFsdWVzKGRhdGFGaWVsZEZvckFubm90YXRpb24uVGFyZ2V0LiR0YXJnZXQuRGF0YSkuZmlsdGVyKFxuXHRcdFx0KGNvbm5lY3RlZEZpZWxkKSA9PiBjb25uZWN0ZWRGaWVsZD8uaGFzT3duUHJvcGVydHkoXCJWYWx1ZVwiKVxuXHRcdCkgYXMgRGF0YUZpZWxkQWJzdHJhY3RUeXBlc1tdO1xuXHRcdGNvbm5lY3RlZEZpZWxkcy5mb3JFYWNoKChkYXRhRmllbGQpID0+IHtcblx0XHRcdGRhdGFGaWVsZE1vZGVsUGF0aC50YXJnZXRPYmplY3QgPSBkYXRhRmllbGQ7XG5cdFx0XHRjb25zdCBiaW5kaW5nRXhwcmVzc2lvbk9iamVjdCA9IGdlbmVyYXRlVmlzaWJsZUV4cHJlc3Npb24oZGF0YUZpZWxkTW9kZWxQYXRoKTtcblx0XHRcdGlmIChiaW5kaW5nRXhwcmVzc2lvbk9iamVjdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGRhdGFGaWVsZHNCaW5kaW5nRXhwcmVzc2lvbnMucHVzaChiaW5kaW5nRXhwcmVzc2lvbk9iamVjdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0LyogQ29tYmluZSB0aGUgZXhwcmVzc2lvbnMgd2l0aCBvciAqL1xuXHRcdHJldHVybiBkYXRhRmllbGRzQmluZGluZ0V4cHJlc3Npb25zLmxlbmd0aCA/IGNvbXBpbGVFeHByZXNzaW9uKG9yKC4uLmRhdGFGaWVsZHNCaW5kaW5nRXhwcmVzc2lvbnMpKSA6IHZpc2libGVFeHByZXNzaW9uO1xuXHR9XG5cdHJldHVybiB2aXNpYmxlRXhwcmVzc2lvbjtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYmluZGluZyBmb3IgYSBwcm9wZXJ0eSBpbiBhIFF1aWNrVmlld0ZhY2V0cy5cbiAqIEBwYXJhbSBwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGggVGhlIERhdGFNb2RlbE9iamVjdFBhdGggb2YgdGhlIHByb3BlcnR5XG4gKiBAcmV0dXJucyBBIHN0cmluZyBvZiB0aGUgdmFsdWUsIG9yIGEgQmluZGluZ0V4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFF1aWNrVmlld0JpbmRpbmcgPSBmdW5jdGlvbiAoXG5cdHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBzdHJpbmcge1xuXHRpZiAoIXByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QpIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXHRpZiAodHlwZW9mIHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QgPT09IFwic3RyaW5nXCIpIHtcblx0XHRyZXR1cm4gcHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdDtcblx0fVxuXG5cdHJldHVybiBnZXRUZXh0QmluZGluZyhwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgsIHt9IGFzIEZpZWxkRm9ybWF0T3B0aW9ucyk7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgdHlwZSBvZiB0aGUgUXVpY2tWaWV3R3JvdXBFbGVtZW50LlxuICogQHBhcmFtIGRhdGFGaWVsZERhdGFNb2RlbE9iamVjdFBhdGggVGhlIERhdGFNb2RlbE9iamVjdFBhdGggb2YgdGhlIERhdGFGaWVsZFxuICogQHJldHVybnMgVGhlIHR5cGUgb2YgdGhlIFF1aWNrVmlld0dyb3VwRWxlbWVudFxuICovXG5leHBvcnQgY29uc3QgZ2V0UXVpY2tWaWV3VHlwZSA9IGZ1bmN0aW9uIChkYXRhRmllbGREYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZFR5cGVzIHwgUHJvcGVydHk+KTogc3RyaW5nIHtcblx0Y29uc3QgdGFyZ2V0T2JqZWN0ID0gZGF0YUZpZWxkRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q7XG5cdGlmIChpc0Fubm90YXRpb25PZlR5cGU8RGF0YUZpZWxkV2l0aFVybD4odGFyZ2V0T2JqZWN0LCBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsKSAmJiB0YXJnZXRPYmplY3Q/LlVybCkge1xuXHRcdHJldHVybiBcImxpbmtcIjtcblx0fVxuXHRpZiAoXG5cdFx0KCFpc1Byb3BlcnR5KHRhcmdldE9iamVjdCkgJiYgdGFyZ2V0T2JqZWN0Py5WYWx1ZS4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbXVuaWNhdGlvbj8uSXNFbWFpbEFkZHJlc3MpIHx8XG5cdFx0KGlzUHJvcGVydHkodGFyZ2V0T2JqZWN0KSAmJiB0YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5Db21tdW5pY2F0aW9uPy5Jc0VtYWlsQWRkcmVzcylcblx0KSB7XG5cdFx0cmV0dXJuIFwiZW1haWxcIjtcblx0fVxuXHRpZiAoXG5cdFx0KCFpc1Byb3BlcnR5KHRhcmdldE9iamVjdCkgJiYgdGFyZ2V0T2JqZWN0Py5WYWx1ZS4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbXVuaWNhdGlvbj8uSXNQaG9uZU51bWJlcikgfHxcblx0XHQoaXNQcm9wZXJ0eSh0YXJnZXRPYmplY3QpICYmIHRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LkNvbW11bmljYXRpb24/LklzUGhvbmVOdW1iZXIpXG5cdCkge1xuXHRcdHJldHVybiBcInBob25lXCI7XG5cdH1cblx0cmV0dXJuIFwidGV4dFwiO1xufTtcblxuZXhwb3J0IHR5cGUgU2VtYW50aWNPYmplY3RDdXN0b21EYXRhID0ge1xuXHRrZXk6IHN0cmluZztcblx0dmFsdWU6IHN0cmluZztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTZW1hbnRpY09iamVjdHMgPSBmdW5jdGlvbiAoXG5cdGFTZW1PYmpFeHByVG9SZXNvbHZlOiB7IGtleTogc3RyaW5nOyB2YWx1ZTogUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8UHJpbWl0aXZlVHlwZT4gfVtdXG4pOiBDb250ZXh0IHtcblx0aWYgKGFTZW1PYmpFeHByVG9SZXNvbHZlLmxlbmd0aCA+IDApIHtcblx0XHRsZXQgc0N1c3RvbURhdGFLZXkgPSBcIlwiO1xuXHRcdGxldCBzQ3VzdG9tRGF0YVZhbHVlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiA9IFwiXCI7XG5cdFx0Y29uc3QgYVNlbU9iakN1c3RvbURhdGE6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9W10gPSBbXTtcblx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgYVNlbU9iakV4cHJUb1Jlc29sdmUpIHtcblx0XHRcdHNDdXN0b21EYXRhS2V5ID0gaXRlbS5rZXk7XG5cdFx0XHRzQ3VzdG9tRGF0YVZhbHVlID0gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGl0ZW0udmFsdWUpKTtcblx0XHRcdGFTZW1PYmpDdXN0b21EYXRhLnB1c2goe1xuXHRcdFx0XHRrZXk6IHNDdXN0b21EYXRhS2V5LFxuXHRcdFx0XHR2YWx1ZTogc0N1c3RvbURhdGFWYWx1ZVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGNvbnN0IG9TZW1hbnRpY09iamVjdHNNb2RlbCA9IG5ldyBKU09OTW9kZWwoYVNlbU9iakN1c3RvbURhdGEpO1xuXHRcdChvU2VtYW50aWNPYmplY3RzTW9kZWwgYXMgeyAkJHZhbHVlQXNQcm9taXNlPzogYm9vbGVhbiB9KS4kJHZhbHVlQXNQcm9taXNlID0gdHJ1ZTtcblx0XHRyZXR1cm4gb1NlbWFudGljT2JqZWN0c01vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gbmV3IEpTT05Nb2RlbChbXSkuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpO1xuXHR9XG59O1xuXG4vKipcbiAqIE1ldGhvZCB0byBnZXQgTXVsdGlwbGVMaW5lcyBmb3IgYSBEYXRhRmllbGQuXG4gKiBAcGFyYW0ge2FueX0gb1RoaXMgVGhlIGN1cnJlbnQgb2JqZWN0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzTXVsdGlMaW5lVGV4dCBUaGUgcHJvcGVydHkgaXNNdWx0aUxpbmVUZXh0XG4gKiBAcmV0dXJucyB7Q29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPn0gVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB0byBkZXRlcm1pbmUgaWYgYSBkYXRhIGZpZWxkIHNob3VsZCBiZSBhIE11bHRpTGluZVRleHQgb3Igbm90XG4gKiBAcHVibGljXG4gKi9cblxuZXhwb3J0IGNvbnN0IGdldE11bHRpcGxlTGluZXNGb3JEYXRhRmllbGQgPSBmdW5jdGlvbiAob1RoaXM6IFBhcnRpYWw8eyB3cmFwPzogYm9vbGVhbiB9PiwgaXNNdWx0aUxpbmVUZXh0OiBib29sZWFuKTogYm9vbGVhbiB7XG5cdGlmIChvVGhpcy53cmFwID09PSBmYWxzZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRyZXR1cm4gaXNNdWx0aUxpbmVUZXh0O1xufTtcblxuY29uc3QgX2hhc1ZhbHVlSGVscFRvU2hvdyA9IGZ1bmN0aW9uIChvUHJvcGVydHk6IFByb3BlcnR5LCBtZWFzdXJlRGlzcGxheU1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuXHQvLyB3ZSBzaG93IGEgdmFsdWUgaGVscCBpZiB0ZWggcHJvcGVydHkgaGFzIG9uZSBvciBpZiBpdHMgdmlzaWJsZSB1bml0IGhhcyBvbmVcblx0Y29uc3Qgb1Byb3BlcnR5VW5pdCA9IFByb3BlcnR5SGVscGVyLmdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkob1Byb3BlcnR5KTtcblx0Y29uc3Qgb1Byb3BlcnR5Q3VycmVuY3kgPSBQcm9wZXJ0eUhlbHBlci5nZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eShvUHJvcGVydHkpO1xuXHRyZXR1cm4gKFxuXHRcdChQcm9wZXJ0eUhlbHBlci5oYXNWYWx1ZUhlbHAob1Byb3BlcnR5KSAmJiBvUHJvcGVydHkudHlwZSAhPT0gXCJFZG0uQm9vbGVhblwiKSB8fFxuXHRcdChtZWFzdXJlRGlzcGxheU1vZGUgIT09IFwiSGlkZGVuXCIgJiZcblx0XHRcdCgob1Byb3BlcnR5VW5pdCAmJiBQcm9wZXJ0eUhlbHBlci5oYXNWYWx1ZUhlbHAob1Byb3BlcnR5VW5pdCkpIHx8XG5cdFx0XHRcdChvUHJvcGVydHlDdXJyZW5jeSAmJiBQcm9wZXJ0eUhlbHBlci5oYXNWYWx1ZUhlbHAob1Byb3BlcnR5Q3VycmVuY3kpKSkpXG5cdCk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gZGF0ZSBmb3IgdGhlIGRhdGUgZmllbGQuXG4gKiBAcGFyYW0gZGF0ZUFubm90YXRpb24gUHJvcGVydHkgQW5ub3RhdGlvbnMgZm9yIHRoZSBkYXRlIGZpZWxkLlxuICogQHBhcmFtIHR5cGUgRWl0aGVyICdNYXhpbXVtJyBvciAnTWluaW11bScuXG4gKiBAcGFyYW0gcmVsYXRpdmVMb2NhdGlvblxuICogQHJldHVybnMgTWluaW51bSBvciBNYXhpbXVtIGRhdGUgZXhwcmVzc2lvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldE1pbk1heERhdGVFeHByZXNzaW9uID0gZnVuY3Rpb24gKFxuXHRkYXRlQW5ub3RhdGlvbjogUHJvcGVydHlBbm5vdGF0aW9ucyB8IHVuZGVmaW5lZCxcblx0dHlwZTogXCJNYXhpbXVtXCIgfCBcIk1pbmltdW1cIixcblx0cmVsYXRpdmVMb2NhdGlvbjogc3RyaW5nW11cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGZpeGVkRGF0ZSA9IGRhdGVBbm5vdGF0aW9uPy5WYWxpZGF0aW9uPy5bdHlwZV0/LiREYXRlO1xuXHRjb25zdCBkYXRlUHJvcGVydHkgPSBkYXRlQW5ub3RhdGlvbj8uVmFsaWRhdGlvbj8uW3R5cGVdO1xuXHRpZiAoZml4ZWREYXRlKSB7XG5cdFx0cmV0dXJuIGZvcm1hdFJlc3VsdChbY29uc3RhbnQoZml4ZWREYXRlKV0sIHZhbHVlRm9ybWF0dGVycy5wcm92aWRlRGF0ZUluc3RhbmNlKTtcblx0fSBlbHNlIGlmIChkYXRlUHJvcGVydHkpIHtcblx0XHRyZXR1cm4gQmluZGluZ1Rvb2xraXQuZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGVBbm5vdGF0aW9uPy5WYWxpZGF0aW9uPy5bdHlwZV0sIHJlbGF0aXZlTG9jYXRpb24pO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIFNldHMgRWRpdCBTdHlsZSBwcm9wZXJ0aWVzIGZvciBGaWVsZCBpbiBjYXNlIG9mIE1hY3JvIEZpZWxkIGFuZCBNYXNzRWRpdERpYWxvZyBmaWVsZHMuXG4gKiBAcGFyYW0gb1Byb3BzIEZpZWxkIFByb3BlcnRpZXMgZm9yIHRoZSBNYWNybyBGaWVsZC5cbiAqIEBwYXJhbSBvRGF0YUZpZWxkIERhdGFGaWVsZCBPYmplY3QuXG4gKiBAcGFyYW0gb0RhdGFNb2RlbFBhdGggRGF0YU1vZGVsIE9iamVjdCBQYXRoIHRvIHRoZSBwcm9wZXJ0eS5cbiAqIEBwYXJhbSBvbmx5RWRpdFN0eWxlIFRvIGFkZCBvbmx5IGVkaXRTdHlsZS5cbiAqL1xuZXhwb3J0IGNvbnN0IHNldEVkaXRTdHlsZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wczogRmllbGRCbG9ja1Byb3BlcnRpZXMsXG5cdG9EYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMsXG5cdG9EYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5IHwgRGF0YUZpZWxkVHlwZXM+LFxuXHRvbmx5RWRpdFN0eWxlPzogYm9vbGVhblxuKTogdm9pZCB7XG5cdGNvbnN0IG9Qcm9wZXJ0eSA9IG9EYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdDtcblx0aWYgKFxuXHRcdCFpc1Byb3BlcnR5KG9Qcm9wZXJ0eSkgfHxcblx0XHRbXG5cdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgsXG5cdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb25Hcm91cCxcblx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblxuXHRcdF0uaW5jbHVkZXMob0RhdGFGaWVsZC4kVHlwZSlcblx0KSB7XG5cdFx0b1Byb3BzLmVkaXRTdHlsZSA9IG51bGw7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGlmICghb25seUVkaXRTdHlsZSkge1xuXHRcdGlmIChvUHJvcGVydHk/LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtPy4kRGF0ZSB8fCBvUHJvcGVydHk/LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtPy4kRGF0ZSkge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiA9IHBhdGhJbk1vZGVsKGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgob0RhdGFNb2RlbFBhdGgpKTtcblx0XHRcdG9Qcm9wcy52YWx1ZUJpbmRpbmdFeHByZXNzaW9uID0gVUlGb3JtYXR0ZXJzLmdldEJpbmRpbmdGb3JEYXRlUGlja2VyKFxuXHRcdFx0XHRvRGF0YU1vZGVsUGF0aCxcblx0XHRcdFx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvblxuXHRcdFx0KSBhcyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b1Byb3BzLnZhbHVlQmluZGluZ0V4cHJlc3Npb24gPSBvUHJvcHMudmFsdWUgPyBvUHJvcHMudmFsdWUgOiBnZXRWYWx1ZUJpbmRpbmcob0RhdGFNb2RlbFBhdGgsIG9Qcm9wcy5mb3JtYXRPcHRpb25zKTtcblx0XHR9XG5cblx0XHRjb25zdCBlZGl0U3R5bGVQbGFjZWhvbGRlciA9XG5cdFx0XHQob0RhdGFGaWVsZCBhcyB1bmtub3duIGFzIFByb3BlcnR5KS5hbm5vdGF0aW9ucz8uVUk/LlBsYWNlaG9sZGVyIHx8XG5cdFx0XHQob0RhdGFGaWVsZCBhcyBEYXRhRmllbGQpPy5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LlVJPy5QbGFjZWhvbGRlcjtcblxuXHRcdGlmIChlZGl0U3R5bGVQbGFjZWhvbGRlcikge1xuXHRcdFx0b1Byb3BzLmVkaXRTdHlsZVBsYWNlaG9sZGVyID0gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGVkaXRTdHlsZVBsYWNlaG9sZGVyKSk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gU2V0dXAgUmF0aW5nSW5kaWNhdG9yXG5cdGNvbnN0IGRhdGFQb2ludEFubm90YXRpb24gPSAoaXNEYXRhRmllbGRGb3JBbm5vdGF0aW9uKG9EYXRhRmllbGQpID8gb0RhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQgOiBvRGF0YUZpZWxkKSBhcyBEYXRhUG9pbnRUeXBlO1xuXHRpZiAoZGF0YVBvaW50QW5ub3RhdGlvbj8uVmlzdWFsaXphdGlvbiA9PT0gXCJVSS5WaXN1YWxpemF0aW9uVHlwZS9SYXRpbmdcIikge1xuXHRcdG9Qcm9wcy5lZGl0U3R5bGUgPSBcIlJhdGluZ0luZGljYXRvclwiO1xuXG5cdFx0aWYgKGRhdGFQb2ludEFubm90YXRpb24uYW5ub3RhdGlvbnM/LkNvbW1vbj8uUXVpY2tJbmZvKSB7XG5cdFx0XHRvUHJvcHMucmF0aW5nSW5kaWNhdG9yVG9vbHRpcCA9IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YVBvaW50QW5ub3RhdGlvbi5hbm5vdGF0aW9ucz8uQ29tbW9uPy5RdWlja0luZm8pXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdG9Qcm9wcy5yYXRpbmdJbmRpY2F0b3JUYXJnZXRWYWx1ZSA9IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhUG9pbnRBbm5vdGF0aW9uLlRhcmdldFZhbHVlKSk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKFxuXHRcdF9oYXNWYWx1ZUhlbHBUb1Nob3cob1Byb3BlcnR5LCBvUHJvcHMuZm9ybWF0T3B0aW9ucz8ubWVhc3VyZURpc3BsYXlNb2RlKSB8fFxuXHRcdChvUHJvcHMuZm9ybWF0T3B0aW9ucz8ubWVhc3VyZURpc3BsYXlNb2RlICE9PSBcIkhpZGRlblwiICYmXG5cdFx0XHQob1Byb3BlcnR5LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kgfHwgKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQgJiYgIWhhc1N0YXRpY1BlcmNlbnRVbml0KG9Qcm9wZXJ0eSkpKSlcblx0KSB7XG5cdFx0aWYgKCFvbmx5RWRpdFN0eWxlKSB7XG5cdFx0XHQvKiBUaGUgdGV4dEJpbmRpbmdFeHByZXNzaW9uIGlzIHVzZWQgZm9yIG1kY0ZpZWxkLWF0dHJpYnV0ZSAnYWRkaXRpb25hbFZhbHVlJyBhbmQgbWVhbnMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSB2YWx1ZSAqL1xuXHRcdFx0Y29uc3QgdGV4dEJpbmRpbmdFeHByZXNzaW9uID0gb1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LkV4dGVybmFsSURcblx0XHRcdFx0PyBnZXRBc3NvY2lhdGVkVGV4dEJpbmRpbmcob1Byb3BzLmRhdGFNb2RlbFBhdGhFeHRlcm5hbElEIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LCBvUHJvcHMuZm9ybWF0T3B0aW9ucylcblx0XHRcdFx0OiBnZXRBc3NvY2lhdGVkVGV4dEJpbmRpbmcob0RhdGFNb2RlbFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sIG9Qcm9wcy5mb3JtYXRPcHRpb25zKTtcblxuXHRcdFx0Y29uc3QgaXNKU09OTW9kZWxVc2VkRm9yVmFsdWUgPSAhIW9Qcm9wcy52YWx1ZSAmJiAve1xcdys+Lit9Ly50ZXN0KG9Qcm9wcy52YWx1ZSk7XG5cblx0XHRcdGlmIChpc0pTT05Nb2RlbFVzZWRGb3JWYWx1ZSkge1xuXHRcdFx0XHRpZiAob1Byb3BzLmRlc2NyaXB0aW9uKSB7XG5cdFx0XHRcdFx0b1Byb3BzLnRleHRCaW5kaW5nRXhwcmVzc2lvbiA9IG9Qcm9wcy5kZXNjcmlwdGlvbjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRvUHJvcHMudGV4dEJpbmRpbmdFeHByZXNzaW9uID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdG9Qcm9wcy5mb3JtYXRPcHRpb25zLmRpc3BsYXlNb2RlID0gXCJWYWx1ZVwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvUHJvcHMudGV4dEJpbmRpbmdFeHByZXNzaW9uID0gdGV4dEJpbmRpbmdFeHByZXNzaW9uO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAob1Byb3BzLmZvcm1hdE9wdGlvbnM/Lm1lYXN1cmVEaXNwbGF5TW9kZSAhPT0gXCJIaWRkZW5cIikge1xuXHRcdFx0XHQvLyBmb3IgdGhlIE1EQyBGaWVsZCB3ZSBuZWVkIHRvIGtlZXAgdGhlIHVuaXQgaW5zaWRlIHRoZSB2YWx1ZUJpbmRpbmdFeHByZXNzaW9uXG5cdFx0XHRcdG9Qcm9wcy52YWx1ZUJpbmRpbmdFeHByZXNzaW9uID0gb1Byb3BzLnZhbHVlXG5cdFx0XHRcdFx0PyBvUHJvcHMudmFsdWVcblx0XHRcdFx0XHQ6IGdldFZhbHVlQmluZGluZyhvRGF0YU1vZGVsUGF0aCwgb1Byb3BzLmZvcm1hdE9wdGlvbnMsIGZhbHNlLCBmYWxzZSwgdW5kZWZpbmVkLCBmYWxzZSwgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdG9Qcm9wcy5lZGl0U3R5bGUgPSBcIklucHV0V2l0aFZhbHVlSGVscFwiO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHN3aXRjaCAob1Byb3BlcnR5LnR5cGUpIHtcblx0XHRjYXNlIFwiRWRtLkRhdGVcIjpcblx0XHRcdG9Qcm9wcy5lZGl0U3R5bGUgPSBcIkRhdGVQaWNrZXJcIjtcblx0XHRcdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSBnZXRSZWxhdGl2ZVBhdGhzKG9EYXRhTW9kZWxQYXRoKTtcblx0XHRcdGlmIChvUHJvcGVydHk/LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtKSB7XG5cdFx0XHRcdG9Qcm9wcy5tYXhEYXRlRXhwcmVzc2lvbiA9IGdldE1pbk1heERhdGVFeHByZXNzaW9uKG9Qcm9wZXJ0eT8uYW5ub3RhdGlvbnMsIFwiTWF4aW11bVwiLCByZWxhdGl2ZUxvY2F0aW9uKTtcblx0XHRcdH1cblx0XHRcdGlmIChvUHJvcGVydHk/LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtKSB7XG5cdFx0XHRcdG9Qcm9wcy5taW5EYXRlRXhwcmVzc2lvbiA9IGdldE1pbk1heERhdGVFeHByZXNzaW9uKG9Qcm9wZXJ0eT8uYW5ub3RhdGlvbnMsIFwiTWluaW11bVwiLCByZWxhdGl2ZUxvY2F0aW9uKTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHRjYXNlIFwiRWRtLlRpbWVcIjpcblx0XHRjYXNlIFwiRWRtLlRpbWVPZkRheVwiOlxuXHRcdFx0b1Byb3BzLmVkaXRTdHlsZSA9IFwiVGltZVBpY2tlclwiO1xuXHRcdFx0cmV0dXJuO1xuXHRcdGNhc2UgXCJFZG0uRGF0ZVRpbWVcIjpcblx0XHRjYXNlIFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCI6XG5cdFx0XHRvUHJvcHMuZWRpdFN0eWxlID0gXCJEYXRlVGltZVBpY2tlclwiO1xuXHRcdFx0Ly8gTm8gdGltZXpvbmUgZGVmaW5lZC4gQWxzbyBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLlxuXHRcdFx0aWYgKCFvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGltZXpvbmUpIHtcblx0XHRcdFx0b1Byb3BzLnNob3dUaW1lem9uZSA9IHVuZGVmaW5lZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9Qcm9wcy5zaG93VGltZXpvbmUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdGNhc2UgXCJFZG0uQm9vbGVhblwiOlxuXHRcdFx0b1Byb3BzLmVkaXRTdHlsZSA9IFwiQ2hlY2tCb3hcIjtcblx0XHRcdHJldHVybjtcblx0XHRjYXNlIFwiRWRtLlN0cmVhbVwiOlxuXHRcdFx0b1Byb3BzLmVkaXRTdHlsZSA9IFwiRmlsZVwiO1xuXHRcdFx0cmV0dXJuO1xuXHRcdGNhc2UgXCJFZG0uU3RyaW5nXCI6XG5cdFx0XHRpZiAob1Byb3BlcnR5LmFubm90YXRpb25zPy5VST8uTXVsdGlMaW5lVGV4dD8udmFsdWVPZigpKSB7XG5cdFx0XHRcdG9Qcm9wcy5lZGl0U3R5bGUgPSBcIlRleHRBcmVhXCI7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmIChvUHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5JbnB1dE1hc2s/LnZhbHVlT2YoKSkge1xuXHRcdFx0XHRvUHJvcHMuZWRpdFN0eWxlID0gXCJJbnB1dE1hc2tcIjtcblx0XHRcdFx0b1Byb3BzLm1hc2sgPSB7XG5cdFx0XHRcdFx0bWFzazogb1Byb3BlcnR5LmFubm90YXRpb25zPy5VST8uSW5wdXRNYXNrPy5NYXNrLnRvU3RyaW5nKCksXG5cdFx0XHRcdFx0cGxhY2Vob2xkZXJTeW1ib2w6IG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LklucHV0TWFzaz8uUGxhY2Vob2xkZXJTeW1ib2wudG9TdHJpbmcoKSxcblx0XHRcdFx0XHRtYXNrUnVsZTogX2dldE1hc2tpbmdSdWxlcyhvUHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5JbnB1dE1hc2s/LlJ1bGVzKVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAob1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/Lk1hc2tlZD8udmFsdWVPZigpKSB7XG5cdFx0XHRcdG9Qcm9wcy5lZGl0U3R5bGUgPSBcIk1hc2tlZFwiO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0aWYgKGhhc1N0YXRpY1BlcmNlbnRVbml0KG9Qcm9wZXJ0eSkpIHtcblx0XHRcdFx0b1Byb3BzLnN0YXRpY0Rlc2NyaXB0aW9uID0gXCIlXCI7XG5cdFx0XHR9XG5cdFx0XHRvUHJvcHMuZWRpdFN0eWxlID0gXCJJbnB1dFwiO1xuXHR9XG5cblx0b1Byb3BzLmVkaXRTdHlsZSA9IFwiSW5wdXRcIjtcbn07XG5cbmNvbnN0IF9nZXRNYXNraW5nUnVsZXMgPSAobWFza2luZ1J1bGVzOiBJbnB1dE1hc2tSdWxlVHlwZVR5cGVzW10gfCB1bmRlZmluZWQpOiBJbnB1dE1hc2tSdWxlW10gPT4ge1xuXHRpZiAoIW1hc2tpbmdSdWxlcyB8fCBtYXNraW5nUnVsZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIFt7IHN5bWJvbDogXCIqXCIsIHJlZ2V4OiBcIlthLXpBLVowLTldXCIgfV07XG5cdH1cblxuXHRyZXR1cm4gbWFza2luZ1J1bGVzLm1hcCgobWFza2luZ1J1bGUpID0+ICh7XG5cdFx0c3ltYm9sOiBtYXNraW5nUnVsZS5NYXNrU3ltYm9sLnRvU3RyaW5nKCksXG5cdFx0cmVnZXg6IG1hc2tpbmdSdWxlLlJlZ0V4cC50b1N0cmluZygpXG5cdH0pKTtcbn07XG5cbmV4cG9ydCBjb25zdCBoYXNTZW1hbnRpY09iamVjdEluTmF2aWdhdGlvbk9yUHJvcGVydHkgPSAocHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pik6IGJvb2xlYW4gPT4ge1xuXHRjb25zdCBwcm9wZXJ0eSA9IHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHk7XG5cdGlmIChTZW1hbnRpY09iamVjdEhlbHBlci5oYXNTZW1hbnRpY09iamVjdChwcm9wZXJ0eSkpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRjb25zdCBsYXN0TmF2UHJvcCA9IHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aD8ubmF2aWdhdGlvblByb3BlcnRpZXM/Lmxlbmd0aFxuXHRcdD8gcHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoPy5uYXZpZ2F0aW9uUHJvcGVydGllc1twcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg/Lm5hdmlnYXRpb25Qcm9wZXJ0aWVzPy5sZW5ndGggLSAxXVxuXHRcdDogbnVsbDtcblx0aWYgKFxuXHRcdCFsYXN0TmF2UHJvcCB8fFxuXHRcdHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC5jb250ZXh0TG9jYXRpb24/Lm5hdmlnYXRpb25Qcm9wZXJ0aWVzPy5maW5kKFxuXHRcdFx0KGNvbnRleHROYXZQcm9wKSA9PiBjb250ZXh0TmF2UHJvcC5uYW1lID09PSBsYXN0TmF2UHJvcC5uYW1lXG5cdFx0KVxuXHQpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0cmV0dXJuIFNlbWFudGljT2JqZWN0SGVscGVyLmhhc1NlbWFudGljT2JqZWN0KGxhc3ROYXZQcm9wKTtcbn07XG5cbi8qKlxuICogR2V0IHRoZSBkYXRhTW9kZWxPYmplY3RQYXRoIHdpdGggdGhlIHZhbHVlIHByb3BlcnR5IGFzIHRhcmdldE9iamVjdCBpZiBpdCBleGlzdHNcbiAqIGZvciBhIGRhdGFNb2RlbE9iamVjdFBhdGggdGFyZ2V0aW5nIGEgRGF0YUZpZWxkIG9yIGEgRGF0YVBvaW50IGFubm90YXRpb24uXG4gKiBAcGFyYW0gaW5pdGlhbERhdGFNb2RlbE9iamVjdFBhdGhcbiAqIEByZXR1cm5zIFRoZSBkYXRhTW9kZWxPYmplY3RQYXRoIHRhcmdldGluZyB0aGUgdmFsdWUgcHJvcGVydHkgb3IgdW5kZWZpbmVkXG4gKi9cbmV4cG9ydCBjb25zdCBnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yVmFsdWUgPSAoXG5cdGluaXRpYWxEYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMgfCBQcm9wZXJ0eT5cbik6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+IHwgdW5kZWZpbmVkID0+IHtcblx0aWYgKCFpbml0aWFsRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGlmIChpc1Byb3BlcnR5KGluaXRpYWxEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCkpIHtcblx0XHRyZXR1cm4gaW5pdGlhbERhdGFNb2RlbE9iamVjdFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT47XG5cdH1cblx0bGV0IHZhbHVlUGF0aCA9IFwiXCI7XG5cdC8vIGRhdGEgcG9pbnQgYW5ub3RhdGlvbnMgbmVlZCBub3QgaGF2ZSAkVHlwZSBkZWZpbmVkLCBzbyBhZGQgaXQgaWYgbWlzc2luZ1xuXHRpZiAoaXNBbm5vdGF0aW9uT2ZUZXJtKGluaXRpYWxEYXRhTW9kZWxPYmplY3RQYXRoLCBVSUFubm90YXRpb25UZXJtcy5EYXRhUG9pbnQpKSB7XG5cdFx0aW5pdGlhbERhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LiRUeXBlID0gaW5pdGlhbERhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LiRUeXBlIHx8IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGU7XG5cdH1cblx0c3dpdGNoIChpbml0aWFsRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuJFR5cGUpIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGU6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb246XG5cdFx0XHRpZiAodHlwZW9mIGluaXRpYWxEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5WYWx1ZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHR2YWx1ZVBhdGggPSBpbml0aWFsRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuVmFsdWUucGF0aDtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjpcblx0XHRcdGlmIChpbml0aWFsRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuVGFyZ2V0LiR0YXJnZXQpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGlzQW5ub3RhdGlvbk9mVHlwZTxEYXRhRmllbGQgfCBEYXRhUG9pbnRUeXBlPihpbml0aWFsRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuVGFyZ2V0LiR0YXJnZXQsIFtcblx0XHRcdFx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGUsXG5cdFx0XHRcdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRcblx0XHRcdFx0XHRdKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRpZiAoaW5pdGlhbERhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LlRhcmdldC52YWx1ZS5pbmRleE9mKFwiL1wiKSA+IDApIHtcblx0XHRcdFx0XHRcdHZhbHVlUGF0aCA9IGluaXRpYWxEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5UYXJnZXQudmFsdWUucmVwbGFjZShcblx0XHRcdFx0XHRcdFx0L1xcL0AuKi8sXG5cdFx0XHRcdFx0XHRcdGAvJHtpbml0aWFsRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuVGFyZ2V0LiR0YXJnZXQuVmFsdWU/LnBhdGh9YFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dmFsdWVQYXRoID0gaW5pdGlhbERhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LlRhcmdldC4kdGFyZ2V0LlZhbHVlPy5wYXRoO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZVBhdGggPSAoaW5pdGlhbERhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LlRhcmdldCBhcyB1bmtub3duIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjx1bmtub3duPik/LnBhdGg7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXA6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoQWN0aW9uR3JvdXA6XG5cdFx0XHRicmVhaztcblx0fVxuXG5cdGlmICh2YWx1ZVBhdGggJiYgdmFsdWVQYXRoLmxlbmd0aCA+IDApIHtcblx0XHRyZXR1cm4gZW5oYW5jZURhdGFNb2RlbFBhdGgoaW5pdGlhbERhdGFNb2RlbE9iamVjdFBhdGgsIHZhbHVlUGF0aCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxufTtcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgY29uc2lkZXJlZCBwcm9wZXJ0eSBpcyBhIG5vbi1pbnNlcnRhYmxlIHByb3BlcnR5XG4gKiBBIGZpcnN0IGNoZWNrIGlzIGRvbmUgb24gdGhlIGxhc3QgbmF2aWdhdGlvbiBmcm9tIHRoZSBjb250ZXh0TG9jYXRpb246XG4gKiAtIElmIHRoZSBhbm5vdGF0aW9uICdub25JbnNlcnRhYmxlUHJvcGVydHknIGlzIGZvdW5kIGFuZCB0aGUgcHJvcGVydHkgaXMgbGlzdGVkLCB0aGVuIHRoZSBwcm9wZXJ0eSBpcyBub24taW5zZXJ0YWJsZSxcbiAqIC0gRWxzZSB0aGUgc2FtZSBjaGVjayBpcyBkb25lIG9uIHRoZSB0YXJnZXQgZW50aXR5LlxuICogQHBhcmFtIHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aFxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgcHJvcGVydHkgaXMgbm90IGluc2VydGFibGVcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc1Byb3BlcnR5SW5zZXJ0UmVzdHJpY3Rpb25zID0gKHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4pOiBib29sZWFuID0+IHtcblx0Y29uc3Qgbm9uSW5zZXJ0YWJsZVByb3BlcnRpZXMgPSBnZXRDb250ZXh0UHJvcGVydHlSZXN0cmljdGlvbihwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgsIChjYXBhYmlsaXRpZXMpID0+IHtcblx0XHRyZXR1cm4gKGNhcGFiaWxpdGllcyBhcyBFbnRpdHlTZXRBbm5vdGF0aW9uc19DYXBhYmlsaXRpZXMgfCB1bmRlZmluZWQpPy5JbnNlcnRSZXN0cmljdGlvbnM/Lk5vbkluc2VydGFibGVQcm9wZXJ0aWVzO1xuXHR9KTtcblxuXHRyZXR1cm4gbm9uSW5zZXJ0YWJsZVByb3BlcnRpZXMuc29tZSgobm9uSW5zZXJ0YWJsZVByb3BlcnR5KSA9PiB7XG5cdFx0cmV0dXJuIG5vbkluc2VydGFibGVQcm9wZXJ0eT8uJHRhcmdldD8uZnVsbHlRdWFsaWZpZWROYW1lID09PSBwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Py5mdWxseVF1YWxpZmllZE5hbWU7XG5cdH0pO1xufTtcblxuLyoqXG4gKiBHZXQgdGhlIGJpbmRpbmcgZm9yIHRoZSBkcmFmdCBpbmRpY2F0b3IgdmlzaWJpbGl0eS5cbiAqIEBwYXJhbSBkcmFmdEluZGljYXRvcktleVxuICogQHJldHVybnMgIFRoZSB2aXNpYmlsaXR5IGJpbmRpbmcgZXhwcmVzc2lvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldERyYWZ0SW5kaWNhdG9yVmlzaWJsZUJpbmRpbmcgPSAoZHJhZnRJbmRpY2F0b3JLZXk6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG5cdHJldHVybiBkcmFmdEluZGljYXRvcktleVxuXHRcdD8gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdGZvcm1hdFJlc3VsdChcblx0XHRcdFx0XHRbXG5cdFx0XHRcdFx0XHRjb25zdGFudChkcmFmdEluZGljYXRvcktleSksXG5cdFx0XHRcdFx0XHRwYXRoSW5Nb2RlbChcInNlbWFudGljS2V5SGFzRHJhZnRJbmRpY2F0b3JcIiwgXCJpbnRlcm5hbFwiKSxcblx0XHRcdFx0XHRcdHBhdGhJbk1vZGVsKFwiSGFzRHJhZnRFbnRpdHlcIiksXG5cdFx0XHRcdFx0XHRwYXRoSW5Nb2RlbChcIklzQWN0aXZlRW50aXR5XCIpLFxuXHRcdFx0XHRcdFx0cGF0aEluTW9kZWwoXCJoaWRlRHJhZnRJbmZvXCIsIFwicGFnZUludGVybmFsXCIpXG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRcInNhcC5mZS5tYWNyb3MuZmllbGQuRmllbGRSdW50aW1lLmlzRHJhZnRJbmRpY2F0b3JWaXNpYmxlXCJcblx0XHRcdFx0KVxuXHRcdCAgKVxuXHRcdDogXCJmYWxzZVwiO1xufTtcbi8qKlxuICogUmV0dXJucyB0aGUgRGlzcGxheVNoYXBlIGZvciB0aGUgQXZhdGFyIGRlcGVuZGluZyBvbiB0aGUgYW5ub3RhdGlvbiBJc05hdHVyYWxQZXJzb24uXG4gKlxuICogSWYgdGhlIGVudGl0eSB0eXBlIGlzIGFubm90YXRlZCB3aXRoIFwiSXNOYXR1cmFsUGVyc29uXCIsIHRoZW4gYWxsIFN0cmVhbXMgYW5kIEltYWdlVVJsc1xuICogaW4gdGhpcyBlbnRpdHkgYXJlIGNvbnNpZGVyZWQgdG8gYmUgcGVyc29uIHRoZXJlZm9yZSBoYXZlIHNoYXBlIGNpcmNsZSBieSBkZWZhdWx0LlxuICpcbiAqIElmIGEgcHJvcGVydHkgd2l0aGluIHN1Y2ggYW4gZW50aXR5IGlzIGFubm90YXRlZCB3aXRoIFVJLklzSW1hZ2Ugb3IgVUkuSXNJbWFnZVVSTCwgYm90aFxuICogb2YgdGhlc2UgYW5ub3RhdGlvbnMgY2FuIGJlIGFubm90YXRlZCB3aXRoIENvbW1vbi5Jc05hdHVyYWxQZXJzb24uXG4gKlxuICogVGhlIGFubm90YXRpb24gYXQgdGhlIHByb3BlcnR5IGxldmVsIG92ZXJyaWRlcyB0aGUgYW5ub3RhdGlvbiBhdCB0aGUgZW50aXR5IHR5cGUuXG4gKiBAcGFyYW0gZGF0YU1vZGVsUGF0aFxuICogQHBhcmFtIHByb3BlcnR5XG4gKiBAcmV0dXJucyBUaGUgc2hhcGUgb2YgdGhlIEF2YXRhciBhcyBzdHJpbmcgb3IgYXMgYW4gZXhwcmVzc2lvblxuICovXG5cbmV4cG9ydCBjb25zdCBnZXRBdmF0YXJTaGFwZSA9IChkYXRhRmllbGRNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+KTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gPT4ge1xuXHRjb25zdCB0YXJnZXRPYmplY3QgPVxuXHRcdGRhdGFGaWVsZE1vZGVsUGF0aC50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5VST8uSXNJbWFnZVVSTD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNOYXR1cmFsUGVyc29uIHx8XG5cdFx0ZGF0YUZpZWxkTW9kZWxQYXRoLnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LlVJPy5Jc0ltYWdlPy5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc05hdHVyYWxQZXJzb247XG5cdGNvbnN0IGVudGl0eUFubm90YXRpb25UYXJnZXQgPSBkYXRhRmllbGRNb2RlbFBhdGgudGFyZ2V0RW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc05hdHVyYWxQZXJzb247XG5cdGxldCBhdmF0YXJTaGFwZUV4cHJlc3Npb246IEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPjtcblxuXHRpZiAodGFyZ2V0T2JqZWN0KSB7XG5cdFx0YXZhdGFyU2hhcGVFeHByZXNzaW9uID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHRhcmdldE9iamVjdCk7XG5cdH0gZWxzZSBpZiAoZW50aXR5QW5ub3RhdGlvblRhcmdldCkge1xuXHRcdGF2YXRhclNoYXBlRXhwcmVzc2lvbiA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihlbnRpdHlBbm5vdGF0aW9uVGFyZ2V0KTtcblx0fSBlbHNlIGF2YXRhclNoYXBlRXhwcmVzc2lvbiA9IGZhbHNlO1xuXG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihpZkVsc2UoYXZhdGFyU2hhcGVFeHByZXNzaW9uLCBBdmF0YXJTaGFwZS5DaXJjbGUsIEF2YXRhclNoYXBlLlNxdWFyZSkpO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFtRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ08sTUFBTUEscUNBQXFDLEdBQUcsU0FBQUEsQ0FDcERDLDBCQUFtRSxFQUNuRUMsZUFBMkQsRUFDakI7SUFDMUMsT0FBT0Msb0JBQW9CLENBQUNGLDBCQUEwQixFQUFFLGFBQWEsRUFBR0csVUFBZ0QsSUFBSztNQUM1SCxJQUFJQyxhQUFzRCxHQUFHRCxVQUFVO01BQ3ZFLElBQUlBLFVBQVUsQ0FBQ0UsU0FBUyxLQUFLQyxTQUFTLEVBQUU7UUFDdkM7UUFDQSxNQUFNQyxzQkFBc0IsR0FBR0Msb0JBQW9CLENBQVdQLGVBQWUsRUFBRUUsVUFBVSxDQUFDTSxJQUFJLENBQUM7UUFDL0ZMLGFBQWEsR0FBR00sZ0JBQWdCLENBQUNDLDZCQUE2QixDQUFDSixzQkFBc0IsRUFBRUosVUFBVSxDQUFDO01BQ25HO01BQ0EsT0FBT0MsYUFBYTtJQUNyQixDQUFDLENBQUM7RUFDSCxDQUFDO0VBQUNRLFFBQUEs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
@@ -5,6 +5,7 @@ import type {
5
5
  PropertyAnnotationValue,
6
6
  ServiceObjectAndAnnotation
7
7
  } from "@sap-ux/vocabularies-types";
8
+ import type { ActionParameter } from "@sap-ux/vocabularies-types/Edm";
8
9
  import type { EntitySetAnnotations_Capabilities } from "@sap-ux/vocabularies-types/vocabularies/Capabilities_Edm";
9
10
  import type {
10
11
  ValueListParameterInOut,
@@ -51,6 +52,7 @@ import type { PageContextPathTarget } from "sap/fe/core/converters/TemplateConve
51
52
  import { isDataFieldForAnnotation } from "sap/fe/core/converters/annotations/DataField";
52
53
  import valueFormatters from "sap/fe/core/formatters/ValueFormatter";
53
54
  import {
55
+ isActionParameter,
54
56
  isAnnotationOfTerm,
55
57
  isAnnotationOfType,
56
58
  isNavigationProperty,
@@ -227,7 +229,7 @@ export const getTextBinding = function (
227
229
  };
228
230
 
229
231
  export const getValueBinding = function (
230
- oPropertyDataModelObjectPath: DataModelObjectPath<Property | DataFieldTypes>,
232
+ oPropertyDataModelObjectPath: DataModelObjectPath<Property | DataFieldTypes | ActionParameter>,
231
233
  fieldFormatOptions: Partial<FieldFormatOptions>,
232
234
  ignoreUnit = false,
233
235
  ignoreFormatting = false,
@@ -249,12 +251,12 @@ export const getValueBinding = function (
249
251
  }
250
252
 
251
253
  const targetObject = oPropertyDataModelObjectPath.targetObject;
252
- if (isProperty(targetObject)) {
254
+ if (isProperty(targetObject) || isActionParameter(targetObject)) {
253
255
  let oBindingExpression: BindingToolkitExpression<unknown> = pathInModel(
254
256
  getContextRelativeTargetObjectPath(oPropertyDataModelObjectPath)
255
257
  );
256
258
  if (isPathInModelExpression(oBindingExpression)) {
257
- if (targetObject.annotations?.Communication?.IsEmailAddress) {
259
+ if (isProperty(targetObject) && targetObject.annotations?.Communication?.IsEmailAddress) {
258
260
  oBindingExpression = formatWithTypeInformation(targetObject, oBindingExpression);
259
261
  oBindingExpression.type = "sap.fe.core.type.Email";
260
262
  } else if (targetObject.annotations?.UI?.InputMask) {
@@ -266,7 +268,7 @@ export const getValueBinding = function (
266
268
  placeholderSymbol: targetObject.annotations.UI.InputMask.PlaceholderSymbol,
267
269
  maskRule: _getMaskingRules(targetObject.annotations.UI.InputMask.Rules)
268
270
  } as FormatOptions;
269
- } else if (targetObject.annotations?.Common?.Masked?.valueOf()) {
271
+ } else if (isProperty(targetObject) && targetObject.annotations?.Common?.Masked?.valueOf()) {
270
272
  oBindingExpression = formatWithTypeInformation(targetObject, oBindingExpression);
271
273
  oBindingExpression.formatOptions = {
272
274
  ...oBindingExpression.formatOptions,