@sapui5/sap.fe.macros 1.141.1 → 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
@@ -18,6 +18,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/controllerextensions/c
18
18
  var manageSemanticObjectsForCurrentUser = SemanticObjectHelper.manageSemanticObjectsForCurrentUser;
19
19
  var getPropertyWithSemanticObject = SemanticObjectHelper.getPropertyWithSemanticObject;
20
20
  var isSemanticKey = PropertyHelper.isSemanticKey;
21
+ var isImageURL = PropertyHelper.isImageURL;
21
22
  var getAssociatedExternalIdPropertyPath = PropertyHelper.getAssociatedExternalIdPropertyPath;
22
23
  var getAssociatedExternalIdProperty = PropertyHelper.getAssociatedExternalIdProperty;
23
24
  var getTargetObjectPath = DataModelPathHelper.getTargetObjectPath;
@@ -98,7 +99,9 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/controllerextensions/c
98
99
  resultField.formatOptions = resultField.formatOptions ? resultField.formatOptions : {};
99
100
  setUpFormatOptions(resultField, resultField.dataModelPathExternalID || resultField.dataModelPath, controlConfiguration, viewDataModel);
100
101
  setUpDisplayStyle(resultField, resultField.convertedMetaPath, resultField.dataModelPath, internalModel, appComponent);
101
- setUpEditStyle(resultField, appComponent);
102
+ if (resultField.editMode !== "Display") {
103
+ setUpEditStyle(resultField, appComponent);
104
+ }
102
105
  resultField.valueState = setUpValueState(resultField);
103
106
  if (resultField.editStyle === "InputWithValueHelp") {
104
107
  resultField.editStylePlaceholder = setInputWithValuehelpPlaceholder(resultField);
@@ -142,7 +145,6 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/controllerextensions/c
142
145
  linkPressed: () => {},
143
146
  displayAggregationDetails: () => {},
144
147
  onDataFieldWithNavigationPath: () => {},
145
- showCollaborationEditUser: () => {},
146
148
  onDataFieldActionButton: () => {},
147
149
  onDataFieldWithIBN: () => {}
148
150
  };
@@ -157,13 +159,11 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/controllerextensions/c
157
159
  function computeCollaborationProperties(field) {
158
160
  const computedEditableExpression = UIFormatters.getEditableExpressionAsObject(field.propertyForFieldControl, field.convertedMetaPath, field.dataModelPath);
159
161
  if (ModelHelper.isCollaborationDraftSupported(field.odataMetaModel) && field.editMode !== FieldEditMode.Display) {
160
- const collaborationEnabled = true;
161
162
  // Expressions needed for Collaboration Visualization
162
163
  const collaborationExpression = UIFormatters.getCollaborationExpression(field.dataModelPath, CollaborationFormatters.hasCollaborationActivity);
163
164
  const editableExpression = compileExpression(and(computedEditableExpression, not(collaborationExpression)));
164
165
  const editMode = compileExpression(ifElse(collaborationExpression, constant("ReadOnly"), ifElse(and(UI.IsInactive, !!field.hasPropertyInsertRestrictions), "Display", field.editModeAsObject)));
165
- field.collaborationEnabled = collaborationEnabled;
166
- field.collaborationExpression = collaborationExpression;
166
+ field.collaborationEnabled = true;
167
167
  field.editableExpression = editableExpression;
168
168
  field.computedEditMode = editMode;
169
169
  } else {
@@ -423,7 +423,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/controllerextensions/c
423
423
  resultField.displayStyle = "File";
424
424
  return resultField;
425
425
  }
426
- if (property.annotations?.UI?.IsImageURL) {
426
+ if (property.annotations?.UI?.IsImageURL && isImageURL(property)) {
427
427
  resultField.displayStyle = "Avatar";
428
428
  return resultField;
429
429
  }
@@ -645,4 +645,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/controllerextensions/c
645
645
  };
646
646
  return FieldStructureHelper;
647
647
  }, false);
648
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzZXRVcEZpZWxkIiwiZmllbGQiLCJjb250cm9sQ29uZmlndXJhdGlvbiIsInZpZXdEYXRhTW9kZWwiLCJpbnRlcm5hbE1vZGVsIiwiYXBwQ29tcG9uZW50IiwiaXNSZWFkT25seUluaXRpYWwiLCJtZXRhUGF0aCIsImNvbnRleHRQYXRoIiwicmVzdWx0RmllbGQiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldCIsInZhbHVlIiwiZGVzY3JpcHRpb24iLCJjaGFuZ2UiLCJ2aXNpYmxlIiwidmhJZFByZWZpeCIsIl9mbGV4SWQiLCJpZCIsImlkUHJlZml4IiwiZm9ybWF0T3B0aW9ucyIsImdldEZvcm1hdE9wdGlvbnMiLCJzaG93T25seVVuaXREZWNpbWFscyIsImdldFByb3BlcnR5IiwicHJlc2VydmVEZWNpbWFsc0ZvckN1cnJlbmN5IiwidmFsdWVIZWxwTWV0YVBhdGgiLCJjb21wdXRlQ29tbW9uUHJvcGVydGllcyIsImdldE1vZGVsIiwiY29udmVydGVkTWV0YVBhdGgiLCJzZXRVcERhdGFQb2ludFR5cGUiLCJzZXRVcFZpc2libGVQcm9wZXJ0aWVzIiwiY29tcHV0ZUlEcyIsImRhdGFTb3VyY2VQYXRoIiwiZ2V0VGFyZ2V0T2JqZWN0UGF0aCIsImRhdGFNb2RlbFBhdGgiLCJsYWJlbCIsIkZpZWxkSGVscGVyIiwiY29tcHV0ZUxhYmVsVGV4dCIsImNvbnRleHQiLCJjb21wdXRlRXh0ZXJuYWxJRCIsImVudGl0eVR5cGUiLCJvZGF0YU1ldGFNb2RlbCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwidGFyZ2V0RW50aXR5VHlwZSIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImZvcklubGluZUNyZWF0aW9uUm93cyIsImhhc1Byb3BlcnR5SW5zZXJ0UmVzdHJpY3Rpb25zIiwiY29tcHV0ZUVkaXRNb2RlIiwiY29tcHV0ZUNvbGxhYm9yYXRpb25Qcm9wZXJ0aWVzIiwiY29tcHV0ZUVkaXRhYmxlRXhwcmVzc2lvbnMiLCJzZXRVcEZvcm1hdE9wdGlvbnMiLCJkYXRhTW9kZWxQYXRoRXh0ZXJuYWxJRCIsInNldFVwRGlzcGxheVN0eWxlIiwic2V0VXBFZGl0U3R5bGUiLCJ2YWx1ZVN0YXRlIiwic2V0VXBWYWx1ZVN0YXRlIiwiZWRpdFN0eWxlIiwiZWRpdFN0eWxlUGxhY2Vob2xkZXIiLCJzZXRJbnB1dFdpdGhWYWx1ZWhlbHBQbGFjZWhvbGRlciIsImNvbXB1dGVGaWxlVXBsb2FkZXJQcm9wZXJ0aWVzIiwiY29tcHV0ZUlubGluZUVkaXRQcm9wZXJ0aWVzIiwiYURpc3BsYXlTdHlsZXNXaXRob3V0UHJvcFRleHQiLCJkaXNwbGF5U3R5bGUiLCJpbmNsdWRlcyIsInRhcmdldE9iamVjdCIsInRleHQiLCJGaWVsZFRlbXBsYXRpbmciLCJnZXRUZXh0QmluZGluZyIsInNob3dFbXB0eUluZGljYXRvciIsImVtcHR5SW5kaWNhdG9yTW9kZSIsIlN0cmluZyIsInVuZGVmaW5lZCIsImlzUHJvcGVydHkiLCJhbm5vdGF0aW9ucyIsIlVJIiwiRGF0YUZpZWxkRGVmYXVsdCIsImNvbXB1dGVkRWRpdE1vZGUiLCJjb21waWxlRXhwcmVzc2lvbiIsImlmRWxzZSIsImVxdWFsIiwicmVhZE9ubHkiLCJldmVudEhhbmRsZXJzIiwibGl2ZUNoYW5nZSIsInZhbGlkYXRlRmllbGRHcm91cCIsImhhbmRsZVR5cGVNaXNzbWF0Y2giLCJoYW5kbGVGaWxlU2l6ZUV4Y2VlZCIsImhhbmRsZVVwbG9hZENvbXBsZXRlIiwidXBsb2FkU3RyZWFtIiwicmVtb3ZlU3RyZWFtIiwiaGFuZGxlT3BlblVwbG9hZGVyIiwiaGFuZGxlQ2xvc2VVcGxvYWRlciIsIm9wZW5FeHRlcm5hbExpbmsiLCJvbkZvY3VzT3V0IiwibGlua1ByZXNzZWQiLCJkaXNwbGF5QWdncmVnYXRpb25EZXRhaWxzIiwib25EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgiLCJzaG93Q29sbGFib3JhdGlvbkVkaXRVc2VyIiwib25EYXRhRmllbGRBY3Rpb25CdXR0b24iLCJvbkRhdGFGaWVsZFdpdGhJQk4iLCJfZXhwb3J0cyIsImNvbXB1dGVkRWRpdGFibGVFeHByZXNzaW9uIiwiVUlGb3JtYXR0ZXJzIiwiZ2V0RWRpdGFibGVFeHByZXNzaW9uQXNPYmplY3QiLCJwcm9wZXJ0eUZvckZpZWxkQ29udHJvbCIsIk1vZGVsSGVscGVyIiwiaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQiLCJlZGl0TW9kZSIsIkZpZWxkRWRpdE1vZGUiLCJEaXNwbGF5IiwiY29sbGFib3JhdGlvbkVuYWJsZWQiLCJjb2xsYWJvcmF0aW9uRXhwcmVzc2lvbiIsImdldENvbGxhYm9yYXRpb25FeHByZXNzaW9uIiwiQ29sbGFib3JhdGlvbkZvcm1hdHRlcnMiLCJoYXNDb2xsYWJvcmF0aW9uQWN0aXZpdHkiLCJlZGl0YWJsZUV4cHJlc3Npb24iLCJhbmQiLCJub3QiLCJjb25zdGFudCIsIklzSW5hY3RpdmUiLCJlZGl0TW9kZUFzT2JqZWN0IiwibWV0YU1vZGVsIiwiTWV0YU1vZGVsQ29udmVydGVyIiwiY29udmVydE1ldGFNb2RlbENvbnRleHQiLCJtZXRhUGF0aENvbnRleHQiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yVmFsdWUiLCJwcm9wZXJ0eSIsIlZhbHVlIiwicmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucyIsImdldFJlcXVpcmVkUHJvcGVydGllc0Zyb21JbnNlcnRSZXN0cmljdGlvbnMiLCJjb250ZXh0UGF0aENvbnRleHQiLCJnZXRQYXRoIiwicmVwbGFjZUFsbCIsInJlcXVpcmVkUHJvcGVydGllc0Zyb21VcGRhdGVSZXN0cmljdGlvbnMiLCJnZXRSZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zIiwib1JlcXVpcmVkUHJvcGVydGllcyIsImVuYWJsZWRFeHByZXNzaW9uIiwiZ2V0RW5hYmxlZEV4cHJlc3Npb24iLCJyZXF1aXJlZEV4cHJlc3Npb24iLCJnZXRSZXF1aXJlZEV4cHJlc3Npb24iLCJtZWFzdXJlUmVhZE9ubHkiLCJtZWFzdXJlRGlzcGxheU1vZGUiLCJnZXRFZGl0TW9kZSIsImV4dGVybmFsSURQcm9wZXJ0eSIsImdldEFzc29jaWF0ZWRFeHRlcm5hbElkUHJvcGVydHkiLCJ0eXBlIiwiaXNEYXRhRmllbGQiLCIkdGFyZ2V0IiwiZXh0ZXJuYWxJZFByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRFeHRlcm5hbElkUHJvcGVydHlQYXRoIiwiZXh0ZXJuYWxJZENvbnRleHQiLCJjb252ZXJ0ZWRNZXRhUGF0aEV4dGVybmFsSUQiLCJjb21wdXRlRmllbGRHcm91cElkcyIsInR5cGVzRm9yQ29sbGFib3JhdGlvbkZvY3VzTWFuYWdlbWVudCIsInNpZGVFZmZlY3RTZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZmllbGRHcm91cElkcyIsIm1haW5Qcm9wZXJ0eVJlbGF0aXZlUGF0aCIsImdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJjb2xsYWJvcmF0aW9uRmllbGRHcm91cCIsIkNvbGxhYm9yYXRpb25GaWVsZEdyb3VwUHJlZml4IiwicHVzaCIsImxlbmd0aCIsIl9hcGlJZCIsImdldENvbnRlbnRJZCIsImVkaXRTdHlsZUlkIiwiZ2VuZXJhdGUiLCJmaWVsZE1vZGUiLCJkaXNwbGF5U3R5bGVJZCIsInRleHRBbGlnbk1vZGUiLCJkaXNwbGF5TW9kZSIsInRleHRMaW5lc0VkaXQiLCJ0ZXh0TWF4TGluZXMiLCJ0ZXh0TWF4Q2hhcmFjdGVyc0Rpc3BsYXkiLCJ0ZXh0RXhwYW5kQmVoYXZpb3JEaXNwbGF5IiwidGV4dE1heExlbmd0aCIsImZpZWxkRWRpdFN0eWxlIiwicmFkaW9CdXR0b25zSG9yaXpvbnRhbExheW91dCIsInNob3dUaW1lIiwic2hvd1RpbWV6b25lIiwic2hvd0RhdGUiLCJnZXRPYmplY3RJZGVudGlmaWVyVGV4dCIsImZpZWxkRm9ybWF0T3B0aW9ucyIsInByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCIsInByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24iLCJwYXRoSW5Nb2RlbCIsInRhcmdldERpc3BsYXlNb2RlIiwicHJvcGVydHlEZWZpbml0aW9uIiwiaXNQcm9wZXJ0eVBhdGhFeHByZXNzaW9uIiwiY29tbW9uVGV4dCIsIkNvbW1vbiIsIlRleHQiLCJmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uIiwicmVsYXRpdmVMb2NhdGlvbiIsImdldFJlbGF0aXZlUGF0aHMiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJmb3JtYXRSZXN1bHQiLCJ2YWx1ZUZvcm1hdHRlcnMiLCJmb3JtYXRUb0tlZXBXaGl0ZXNwYWNlIiwiZ2V0T3ZlcnJpZGVzIiwicHJvcHMiLCJjb250cm9sQ29uZmlnIiwia2V5cyIsImZvckVhY2giLCJjb25maWdLZXkiLCJtYW5hZ2VRdWlja1ZpZXdGb3JEaXNwbGF5U3R5bGUiLCJoYXNTZW1hbnRpY09iamVjdHMiLCJoYXNRdWlja1ZpZXciLCJxdWlja1ZpZXdUeXBlIiwiZm91bmRTZW1hbnRpY09iamVjdHMiLCJtYW5hZ2VTZW1hbnRpY09iamVjdHNGb3JDdXJyZW50VXNlciIsInNlbWFudGljT2JqZWN0IiwiaGFzUmVhY2hhYmxlU3RhdGljU2VtYW50aWNPYmplY3QiLCJkeW5hbWljU2VtYW50aWNPYmplY3RzIiwicHJvcGVydHlPck5hdmlnYXRpb25Qcm9wZXJ0eUhhc1NlbWFudGljT2JqZWN0IiwiZ2V0UHJvcGVydHlXaXRoU2VtYW50aWNPYmplY3QiLCJmaWVsZENvbnRhaW5lclR5cGUiLCJwcm9wZXJ0eVBhdGgiLCJuYW1lIiwicmVjb21tZW5kYXRpb25WYWx1ZSIsInJlY29tbWVuZGF0aW9uRGVzY3JpcHRpb24iLCJwbGFjZWhvbGRlckV4cCIsImFkZGl0aW9uYWxWYWx1ZUZvcm1hdHRlciIsImZvcm1hdFBsYWNlaG9sZGVyIiwiZGF0YUZpZWxkIiwiZGF0YVBvaW50VHlwZSIsInRlcm0iLCIkVHlwZSIsImdldERlY2ltYWxQYWRkaW5nIiwibWFuaWZlc3QiLCJnZXRNYW5pZmVzdEVudHJ5IiwiTWVhc3VyZXMiLCJJU09DdXJyZW5jeSIsIm1hY3JvcyIsInRhYmxlIiwiY3VycmVuY3kiLCJkZWNpbWFsUGFkZGluZyIsInVuaXRPZk1lYXN1cmUiLCJoYXNVbml0T3JDdXJyZW5jeSIsIlVuaXQiLCJoYXNWYWxpZEFuYWx5dGljYWxDdXJyZW5jeU9yVW5pdCIsInRleHRGcm9tVmFsdWVMaXN0IiwiSXNJbWFnZSIsIklzSW1hZ2VVUkwiLCJJbnB1dE1hc2siLCJNYXNrZWQiLCJpc0ZpZWxkR3JvdXBJdGVtIiwic2V0VXBEcmFmdEluZGljYXRvciIsIlRhcmdldCIsImlzVXNlZEluTmF2aWdhdGlvbldpdGhRdWlja1ZpZXdGYWNldHMiLCJpc1NlbWFudGljS2V5Iiwic2VtYW50aWNLZXlTdHlsZSIsInNldFVwT2JqZWN0SWRlbnRpZmllclRpdGxlQW5kVGV4dCIsInNob3dFcnJvckluZGljYXRvciIsImNvbnRleHRMb2NhdGlvbiIsIl90eXBlIiwiZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoIiwic2l0dWF0aW9uc0luZGljYXRvclByb3BlcnR5UGF0aCIsIkNyaXRpY2FsaXR5IiwiaXNDdXJyZW5jeU9yVW5pdEFsaWduZWQiLCJGaWVsZFN0cnVjdHVyZUhlbHBlciIsInZhbHVlQXNTdHJpbmdCaW5kaW5nRXhwcmVzc2lvbiIsImdldFZhbHVlQmluZGluZyIsInVuaXRCaW5kaW5nRXhwcmVzc2lvbiIsImdldEJpbmRpbmdGb3JVbml0T3JDdXJyZW5jeSIsIkNvbW11bmljYXRpb24iLCJJc0VtYWlsQWRkcmVzcyIsIklzUGhvbmVOdW1iZXIiLCJNdWx0aUxpbmVUZXh0IiwiaGFzU2l0dWF0aW9uc0luZGljYXRvciIsIlNpdHVhdGlvbnNJbmRpY2F0b3IiLCJnZXRTaXR1YXRpb25zTmF2aWdhdGlvblByb3BlcnR5IiwidGFyZ2V0RW50aXR5U2V0IiwiRHJhZnRSb290IiwiaGFzRHJhZnRJbmRpY2F0b3IiLCJkcmFmdEluZGljYXRvclZpc2libGUiLCJnZXREcmFmdEluZGljYXRvclZpc2libGVCaW5kaW5nIiwiYWRkRHJhZnRJbmRpY2F0b3IiLCJzZXRFZGl0U3R5bGVQcm9wZXJ0aWVzIiwic2VtYW50aWNTdHlsZSIsImlkZW50aWZpZXJUaXRsZSIsImdldFRpdGxlQmluZGluZ0V4cHJlc3Npb24iLCJnZXRUZXh0QmluZGluZ0V4cHJlc3Npb24iLCJzcGxpdFRpdGxlT25Ud29MaW5lcyIsImlkZW50aWZpZXJUZXh0Iiwib3ZlcnJpZGVQcm9wcyIsImdldERpc3BsYXlNb2RlIiwicmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCIsImlzUmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdEVuYWJsZWQiLCJoYXNFbnRpdHlUZXh0QXJyYW5nZW1lbnQiLCJUZXh0QXJyYW5nZW1lbnQiLCJ2YWx1ZVN0YXRlRXhwIiwicHJvcGVydHlQYXRoSW5Nb2RlbCIsInRleHRQYXRoIiwiZm9ybWF0VmFsdWVTdGF0ZSIsImdldFZpc2libGVFeHByZXNzaW9uIiwiZGlzcGxheVZpc2libGUiLCJtYWNyb0lkIiwiZmlsZVJlbGF0aXZlUHJvcGVydHlQYXRoIiwiZmlsZU5hbWVBbm5vdGF0aW9uIiwiQ29yZSIsIkNvbnRlbnREaXNwb3NpdGlvbiIsIkZpbGVuYW1lIiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCJmaWxlTmFtZURhdGFNb2RlbFBhdGgiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsInBhdGgiLCJmaWxlRmlsZW5hbWVFeHByZXNzaW9uIiwiaW5saW5lRWRpdEVuYWJsZWQiLCJoYXNJbmxpbmVFZGl0IiwidHJhbnNmb3JtUmVjdXJzaXZlbHkiLCJleHByIiwibW9kZWxOYW1lIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGaWVsZFN0cnVjdHVyZUhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVNldCwgUHJvcGVydHksIFByb3BlcnR5UGF0aCwgU2VydmljZU9iamVjdCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUge1xuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRGb3JBbm5vdGF0aW9uLFxuXHREYXRhRmllbGRUeXBlcyxcblx0RGF0YVBvaW50LFxuXHREYXRhUG9pbnRUeXBlVHlwZXNcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMsIFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHR5cGUge1xuXHRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sXG5cdENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLFxuXHRFeHByZXNzaW9uT3JQcmltaXRpdmUsXG5cdFBhdGhJbk1vZGVsRXhwcmVzc2lvblxufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdGFuZCxcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGNvbnN0YW50LFxuXHRlcXVhbCxcblx0Zm9ybWF0UmVzdWx0LFxuXHRmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uLFxuXHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sXG5cdGlmRWxzZSxcblx0bm90LFxuXHRwYXRoSW5Nb2RlbCxcblx0dHJhbnNmb3JtUmVjdXJzaXZlbHlcbn0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnRpZXNPZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvdGVtcGxhdGluZy9CdWlsZGluZ0Jsb2NrVGVtcGxhdGVQcm9jZXNzb3JcIjtcbmltcG9ydCB7IENvbGxhYm9yYXRpb25GaWVsZEdyb3VwUHJlZml4IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NvbGxhYm9yYXRpb24vQ29sbGFib3JhdGlvbkNvbW1vblwiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgaXNEYXRhRmllbGQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9hbm5vdGF0aW9ucy9EYXRhRmllbGRcIjtcbmltcG9ydCAqIGFzIENvbGxhYm9yYXRpb25Gb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL0NvbGxhYm9yYXRpb25Gb3JtYXR0ZXJcIjtcbmltcG9ydCB2YWx1ZUZvcm1hdHRlcnMgZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvVmFsdWVGb3JtYXR0ZXJcIjtcbmltcG9ydCB7IFVJIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuaW1wb3J0IHtcblx0Z2V0UmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucyxcblx0Z2V0UmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9uc1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXRhTW9kZWxGdW5jdGlvblwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRUaXRsZUJpbmRpbmdFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVGl0bGVIZWxwZXJcIjtcbmltcG9ydCB7IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uLCBpc1Byb3BlcnR5LCBpc1Byb3BlcnR5UGF0aEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQge1xuXHRlbmhhbmNlRGF0YU1vZGVsUGF0aCxcblx0Z2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCxcblx0Z2V0UmVsYXRpdmVQYXRocyxcblx0Z2V0VGFyZ2V0T2JqZWN0UGF0aFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRBc3NvY2lhdGVkRXh0ZXJuYWxJZFByb3BlcnR5LCBnZXRBc3NvY2lhdGVkRXh0ZXJuYWxJZFByb3BlcnR5UGF0aCwgaXNTZW1hbnRpY0tleSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgeyBnZXRQcm9wZXJ0eVdpdGhTZW1hbnRpY09iamVjdCwgbWFuYWdlU2VtYW50aWNPYmplY3RzRm9yQ3VycmVudFVzZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9TZW1hbnRpY09iamVjdEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBEaXNwbGF5TW9kZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0ICogYXMgVUlGb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IHR5cGUgeyBJbnB1dE1hc2tGb3JtYXRPcHRpb25zIH0gZnJvbSBcInNhcC9mZS9jb3JlL3R5cGUvSW5wdXRNYXNrXCI7XG5pbXBvcnQgKiBhcyBGaWVsZFRlbXBsYXRpbmcgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRUZW1wbGF0aW5nXCI7XG5pbXBvcnQge1xuXHRnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yVmFsdWUsXG5cdGdldERyYWZ0SW5kaWNhdG9yVmlzaWJsZUJpbmRpbmcsXG5cdGdldFRleHRCaW5kaW5nRXhwcmVzc2lvbixcblx0Z2V0VmFsdWVCaW5kaW5nLFxuXHRnZXRWaXNpYmxlRXhwcmVzc2lvbixcblx0aGFzUHJvcGVydHlJbnNlcnRSZXN0cmljdGlvbnMsXG5cdGlzUmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdEVuYWJsZWQsXG5cdGlzVXNlZEluTmF2aWdhdGlvbldpdGhRdWlja1ZpZXdGYWNldHMsXG5cdHNldEVkaXRTdHlsZVByb3BlcnRpZXNcbn0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRUZW1wbGF0aW5nXCI7XG5pbXBvcnQgYWRkaXRpb25hbFZhbHVlRm9ybWF0dGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL3ZhbHVlaGVscC9BZGRpdGlvbmFsVmFsdWVGb3JtYXR0ZXJcIjtcbmltcG9ydCBTaXR1YXRpb25zSW5kaWNhdG9yIGZyb20gXCJzYXAvZmUvbWFjcm9zL3NpdHVhdGlvbnMvU2l0dWF0aW9uc0luZGljYXRvclwiO1xuaW1wb3J0IEZpZWxkRWRpdE1vZGUgZnJvbSBcInNhcC91aS9tZGMvZW51bXMvRmllbGRFZGl0TW9kZVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IEV2ZW50SGFuZGxlciB9IGZyb20gXCJ0eXBlcy9leHRlbnNpb25fdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgTWV0YU1vZGVsVHlwZSB9IGZyb20gXCJ0eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcbmltcG9ydCB0eXBlIEZpZWxkIGZyb20gXCIuLi8uLi9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgRmllbGRGb3JtYXRPcHRpb25zIGZyb20gXCIuLi8uLi9maWVsZC9GaWVsZEZvcm1hdE9wdGlvbnNcIjtcbmltcG9ydCBGaWVsZEhlbHBlciBmcm9tIFwiLi4vLi4vZmllbGQvRmllbGRIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgRGlzcGxheVN0eWxlIGFzIERpc3BsYXlTdHlsZVR5cGUsIEVkaXRTdHlsZSBhcyBFZGl0U3R5bGVUeXBlLCBGaWVsZFByb3BlcnRpZXMgfSBmcm9tIFwiLi9GaWVsZFN0eWxlc1wiO1xuXG5leHBvcnQgdHlwZSBJbnB1dEZpZWxkQmxvY2tQcm9wZXJ0aWVzID0gT21pdDxQcm9wZXJ0aWVzT2Y8RmllbGQ+LCBcInJlYWRPbmx5XCIgfCBcInNlbWFudGljT2JqZWN0XCI+ICYge1xuXHRpc1B1YmxpY0ZpZWxkPzogYm9vbGVhbjsgLy9cblx0Ly9hZGQgZXZlbnRzIGZyb20gRmllbGQgLSAnUHJvcGVydGllc09mJyBkb2VzIG5vdCBpbmNsdWRlIHRoZW1cblx0Y2hhbmdlPzogRXZlbnRIYW5kbGVyO1xuXHRsaXZlQ2hhbmdlPzogRXZlbnRIYW5kbGVyO1xuXHRvbkxpdmVDaGFuZ2U/OiBzdHJpbmc7XG5cdHJlYWRPbmx5PzogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRzZW1hbnRpY09iamVjdD86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xufTtcbmV4cG9ydCB0eXBlIEZpZWxkQmxvY2tQcm9wZXJ0aWVzID0ge1xuXHRfY29udHJvbENvbmZpZ3VyYXRpb246IFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3M7XG5cdF9zZXR0aW5nczogVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncztcblx0aXNEeW5hbWljSW5zdGFudGlhdGlvbj86IGJvb2xlYW47XG5cdGNoYW5nZTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgRXZlbnRIYW5kbGVyO1xuXHRtZXRhUGF0aDogQ29udGV4dDtcblx0Y29udGV4dFBhdGg6IENvbnRleHQ7XG5cdGlzUHVibGljRmllbGQ6IGJvb2xlYW47XG5cdHZpc2libGU/OiBib29sZWFuIHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGxpdmVDaGFuZ2U6IEV2ZW50SGFuZGxlcjtcblx0b25MaXZlQ2hhbmdlPzogc3RyaW5nIHwgRXZlbnRIYW5kbGVyO1xuXHQvLy0tLS0tXG5cdGZvcm1hdE9wdGlvbnM6IEZpZWxkRm9ybWF0T3B0aW9ucztcblx0cHJvcGVydHk6IFByb3BlcnR5O1xuXHRkYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pjtcblx0dmFsdWVBc1N0cmluZ0JpbmRpbmdFeHByZXNzaW9uPzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHVuaXRCaW5kaW5nRXhwcmVzc2lvbj86IHN0cmluZztcblx0ZGlzcGxheVZpc2libGU/OiBzdHJpbmcgfCBib29sZWFuO1xuXHRoYXNWYWxpZEFuYWx5dGljYWxDdXJyZW5jeU9yVW5pdD86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRjb252ZXJ0ZWRNZXRhUGF0aDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcztcblx0Y2xhc3M/OiBzdHJpbmc7XG5cdGFyaWFMYWJlbGxlZEJ5Pzogc3RyaW5nW107XG5cdGhhc1VuaXRPckN1cnJlbmN5PzogYm9vbGVhbjtcblx0dGV4dD86IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGxhYmVsPzogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0ZW1wdHlJbmRpY2F0b3JNb2RlPzogc3RyaW5nO1xuXHRlZGl0YWJsZUV4cHJlc3Npb246IHN0cmluZyB8IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRmaWVsZEdyb3VwSWRzPzogc3RyaW5nW107XG5cdGRpc3BsYXlTdHlsZUlkPzogc3RyaW5nO1xuXHR0ZXh0RnJvbVZhbHVlTGlzdD86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRoYXNRdWlja1ZpZXc6IGJvb2xlYW47XG5cdGlkZW50aWZpZXJUaXRsZT86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRpZGVudGlmaWVyVGV4dD86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRoYXNTaXR1YXRpb25zSW5kaWNhdG9yPzogYm9vbGVhbjtcblx0c2l0dWF0aW9uc0luZGljYXRvclByb3BlcnR5UGF0aDogc3RyaW5nO1xuXHRzaG93RXJyb3JJbmRpY2F0b3I6IGJvb2xlYW47XG5cdGR5bmFtaWNTZW1hbnRpY09iamVjdHM/OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPltdO1xuXHRjb2xsYWJvcmF0aW9uRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRkYXRhU291cmNlUGF0aD86IHN0cmluZztcblx0ZWRpdFN0eWxlSWQ/OiBzdHJpbmc7XG5cdGVuYWJsZWRFeHByZXNzaW9uOiBzdHJpbmcgfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0cmVxdWlyZWRFeHByZXNzaW9uPzogc3RyaW5nO1xuXHRlZGl0TW9kZUFzT2JqZWN0OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+O1xuXHRjb21wdXRlZEVkaXRNb2RlOiBGaWVsZEVkaXRNb2RlIHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHZhbHVlQmluZGluZ0V4cHJlc3Npb24/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0c2hvd1RpbWV6b25lPzogYm9vbGVhbjtcblx0bWluRGF0ZUV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPiB8IHVuZGVmaW5lZCB8IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRtYXhEYXRlRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+IHwgdW5kZWZpbmVkIHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGVkaXRTdHlsZVBsYWNlaG9sZGVyPzogc3RyaW5nO1xuXHRzdGF0aWNEZXNjcmlwdGlvbj86IHN0cmluZztcblx0dmFsdWVTdGF0ZT86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRmaWxlRmlsZW5hbWVFeHByZXNzaW9uOiBzdHJpbmc7XG5cdGZpbGVSZWxhdGl2ZVByb3BlcnR5UGF0aDogc3RyaW5nO1xuXHR0ZXh0QmluZGluZ0V4cHJlc3Npb24/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0cmF0aW5nSW5kaWNhdG9yVG9vbHRpcD86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRyYXRpbmdJbmRpY2F0b3JUYXJnZXRWYWx1ZT86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRtYXNrPzogSW5wdXRNYXNrRm9ybWF0T3B0aW9ucyB8IG51bGw7XG5cdGVkaXRTdHlsZT86IEVkaXRTdHlsZVR5cGUgfCBudWxsO1xuXHRfYXBpSWQ/OiBzdHJpbmc7XG5cdGVudGl0eVR5cGU/OiBDb250ZXh0O1xuXHRvZGF0YU1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWw7XG5cdHByb3BlcnR5Rm9yRmllbGRDb250cm9sOiBVSUZvcm1hdHRlcnMuUHJvcGVydHlPclBhdGg8UHJvcGVydHk+O1xuXHRkZXNjcmlwdGlvbkJpbmRpbmdFeHByZXNzaW9uPzogc3RyaW5nO1xuXHRxdWlja1ZpZXdUeXBlPzogXCJTZW1hbnRpY0xpbmtzXCIgfCBcIkZhY2V0c1wiIHwgXCJGYWNldHNBbmRTZW1hbnRpY0xpbmtzXCI7XG5cdGRpc3BsYXlTdHlsZT86IERpc3BsYXlTdHlsZVR5cGU7XG5cdHVuaXRFZGl0YWJsZT86IHN0cmluZztcblx0c3RhdGljVW5pdD86IHN0cmluZztcblx0dmFsdWVJbnB1dFdpZHRoPzogc3RyaW5nO1xuXHR2YWx1ZUlucHV0RmllbGRXaWR0aD86IHN0cmluZztcblx0dW5pdElucHV0VmlzaWJsZT86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRkcmFmdEluZGljYXRvclZpc2libGU/OiBzdHJpbmc7XG5cdGhhc1Byb3BlcnR5SW5zZXJ0UmVzdHJpY3Rpb25zPzogYm9vbGVhbiB8IEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPjtcblx0YWRkRHJhZnRJbmRpY2F0b3I6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cdGNvbnZlcnRlZE1ldGFQYXRoRXh0ZXJuYWxJRD86IFByb3BlcnR5O1xuXHRkYXRhTW9kZWxQYXRoRXh0ZXJuYWxJRD86IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHkgfCBQcm9wZXJ0eVBhdGg+O1xuXHR2YWx1ZUhlbHBNZXRhUGF0aD86IENvbnRleHQ7XG5cdGlkOiBzdHJpbmc7XG5cdHZhbHVlSGVscElkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdG1ldGFQYXRoQ29udGV4dDogQ29udGV4dCB8IHVuZGVmaW5lZDtcblx0Y29udGV4dFBhdGhDb250ZXh0OiBDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRmaWxlVXBsb2FkZXJWaXNpYmxlPzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBib29sZWFuO1xuXHRldmVudEhhbmRsZXJzOiB7XG5cdFx0Y2hhbmdlOiBFdmVudEhhbmRsZXI7XG5cdFx0bGl2ZUNoYW5nZTogRXZlbnRIYW5kbGVyO1xuXHRcdHZhbGlkYXRlRmllbGRHcm91cDogRXZlbnRIYW5kbGVyO1xuXHRcdGhhbmRsZVR5cGVNaXNzbWF0Y2g6IEV2ZW50SGFuZGxlcjtcblx0XHRoYW5kbGVGaWxlU2l6ZUV4Y2VlZDogRXZlbnRIYW5kbGVyO1xuXHRcdGhhbmRsZVVwbG9hZENvbXBsZXRlOiBFdmVudEhhbmRsZXI7XG5cdFx0dXBsb2FkU3RyZWFtOiBFdmVudEhhbmRsZXI7XG5cdFx0cmVtb3ZlU3RyZWFtOiBFdmVudEhhbmRsZXI7XG5cdFx0aGFuZGxlT3BlblVwbG9hZGVyOiBFdmVudEhhbmRsZXI7XG5cdFx0aGFuZGxlQ2xvc2VVcGxvYWRlcjogRXZlbnRIYW5kbGVyO1xuXHRcdG9wZW5FeHRlcm5hbExpbms6IEV2ZW50SGFuZGxlcjtcblx0XHRvbkZvY3VzT3V0OiBFdmVudEhhbmRsZXI7XG5cdFx0bGlua1ByZXNzZWQ6IEV2ZW50SGFuZGxlcjtcblx0XHRkaXNwbGF5QWdncmVnYXRpb25EZXRhaWxzOiBFdmVudEhhbmRsZXI7XG5cdFx0b25EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6IEV2ZW50SGFuZGxlcjtcblx0XHRvbkRhdGFGaWVsZEFjdGlvbkJ1dHRvbjogRXZlbnRIYW5kbGVyO1xuXHRcdG9uRGF0YUZpZWxkV2l0aElCTjogRXZlbnRIYW5kbGVyO1xuXHRcdHNob3dDb2xsYWJvcmF0aW9uRWRpdFVzZXI6IEV2ZW50SGFuZGxlcjtcblx0fTtcbn0gJiBPbWl0PEZpZWxkLCBcIm1ldGFQYXRoXCIgfCBcImNvbnRleHRQYXRoXCIgfCBcImNoYW5nZVwiIHwgXCJ2aXNpYmxlXCI+O1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0VXBGaWVsZChcblx0ZmllbGQ6IElucHV0RmllbGRCbG9ja1Byb3BlcnRpZXMsXG5cdGNvbnRyb2xDb25maWd1cmF0aW9uOiBUZW1wbGF0ZVByb2Nlc3NvclNldHRpbmdzLFxuXHR2aWV3RGF0YU1vZGVsOiBKU09OTW9kZWwsXG5cdGludGVybmFsTW9kZWw6IEpTT05Nb2RlbCxcblx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdGlzUmVhZE9ubHlJbml0aWFsPzogYm9vbGVhbixcblx0bWV0YVBhdGg/OiBDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHRjb250ZXh0UGF0aD86IENvbnRleHQgfCB1bmRlZmluZWRcbik6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzIHtcblx0Y29uc3QgcmVzdWx0RmllbGQgPSB7IC4uLmZpZWxkIH0gYXMgdW5rbm93biBhcyBGaWVsZEJsb2NrUHJvcGVydGllcztcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHJlc3VsdEZpZWxkLCBcInZhbHVlXCIsIHtcblx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdHJldHVybiBmaWVsZC52YWx1ZTtcblx0XHR9XG5cdH0pO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkocmVzdWx0RmllbGQsIFwiZGVzY3JpcHRpb25cIiwge1xuXHRcdGdldDogKCkgPT4ge1xuXHRcdFx0cmV0dXJuIGZpZWxkLmRlc2NyaXB0aW9uO1xuXHRcdH1cblx0fSk7XG5cblx0cmVzdWx0RmllbGQuY2hhbmdlID0gZmllbGQuY2hhbmdlO1xuXHRyZXN1bHRGaWVsZC5tZXRhUGF0aCA9IChtZXRhUGF0aCA/IG1ldGFQYXRoIDogZmllbGQubWV0YVBhdGgpIGFzIENvbnRleHQ7XG5cdHJlc3VsdEZpZWxkLmNvbnRleHRQYXRoID0gKGNvbnRleHRQYXRoID8gY29udGV4dFBhdGggOiBmaWVsZC5jb250ZXh0UGF0aCkgYXMgQ29udGV4dDtcblx0cmVzdWx0RmllbGQudmlzaWJsZSA9IGZpZWxkLnZpc2libGU7XG5cblx0Ly90aGlzIGN1cnJlbnRseSB3b3JrcyBvbmx5IGZvciB0aGUgZmllbGRcblx0aWYgKCFyZXN1bHRGaWVsZC52aElkUHJlZml4KSB7XG5cdFx0cmVzdWx0RmllbGQudmhJZFByZWZpeCA9IFwiRmllbGRWYWx1ZUhlbHBcIjtcblx0XHRyZXN1bHRGaWVsZC5fZmxleElkID0gZmllbGQuaWQ7XG5cdFx0aWYgKCFyZXN1bHRGaWVsZC5pZFByZWZpeCkge1xuXHRcdFx0cmVzdWx0RmllbGQuaWRQcmVmaXggPSBmaWVsZC5pZDtcblx0XHR9XG5cdH1cblxuXHRyZXN1bHRGaWVsZC5mb3JtYXRPcHRpb25zID8/PSB7fSBhcyBGaWVsZEZvcm1hdE9wdGlvbnM7XG5cdHJlc3VsdEZpZWxkLmZvcm1hdE9wdGlvbnMgPSBnZXRGb3JtYXRPcHRpb25zKHJlc3VsdEZpZWxkKTtcblx0cmVzdWx0RmllbGQuZm9ybWF0T3B0aW9ucy5zaG93T25seVVuaXREZWNpbWFscyA9XG5cdFx0dmlld0RhdGFNb2RlbD8uZ2V0UHJvcGVydHkoXCIvc2FwRmVNYW5pZmVzdENvbmZpZ3VyYXRpb24vYXBwL3Nob3dPbmx5VW5pdERlY2ltYWxzXCIpID09PSB0cnVlO1xuXHRyZXN1bHRGaWVsZC5mb3JtYXRPcHRpb25zLnByZXNlcnZlRGVjaW1hbHNGb3JDdXJyZW5jeSA9XG5cdFx0dmlld0RhdGFNb2RlbD8uZ2V0UHJvcGVydHkoXCIvc2FwRmVNYW5pZmVzdENvbmZpZ3VyYXRpb24vYXBwL3ByZXNlcnZlRGVjaW1hbHNGb3JDdXJyZW5jeVwiKSA9PT0gdHJ1ZTtcblxuXHRyZXN1bHRGaWVsZC52YWx1ZUhlbHBNZXRhUGF0aCA9IG1ldGFQYXRoID8gbWV0YVBhdGggOiByZXN1bHRGaWVsZC5tZXRhUGF0aDtcblx0Y29tcHV0ZUNvbW1vblByb3BlcnRpZXMocmVzdWx0RmllbGQsIHJlc3VsdEZpZWxkLnZhbHVlSGVscE1ldGFQYXRoPy5nZXRNb2RlbCgpKTtcblx0cmVzdWx0RmllbGQuY29udmVydGVkTWV0YVBhdGggPSBzZXRVcERhdGFQb2ludFR5cGUocmVzdWx0RmllbGQuY29udmVydGVkTWV0YVBhdGgpO1xuXHRzZXRVcFZpc2libGVQcm9wZXJ0aWVzKHJlc3VsdEZpZWxkKTtcblx0Y29tcHV0ZUlEcyhyZXN1bHRGaWVsZCk7XG5cdHJlc3VsdEZpZWxkLmRhdGFTb3VyY2VQYXRoID0gZ2V0VGFyZ2V0T2JqZWN0UGF0aChyZXN1bHRGaWVsZC5kYXRhTW9kZWxQYXRoKTtcblx0cmVzdWx0RmllbGQubGFiZWwgPSBGaWVsZEhlbHBlci5jb21wdXRlTGFiZWxUZXh0KGZpZWxkIGFzIHVua25vd24gYXMgTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRUeXBlcz4sIHtcblx0XHRjb250ZXh0OiByZXN1bHRGaWVsZC5tZXRhUGF0aFxuXHR9KTtcblxuXHQvKiBFWFRFUk5BTElEICovXG5cdGNvbXB1dGVFeHRlcm5hbElEKHJlc3VsdEZpZWxkKTtcblx0cmVzdWx0RmllbGQuZW50aXR5VHlwZSA9IHJlc3VsdEZpZWxkLm9kYXRhTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFxuXHRcdGAvJHtyZXN1bHRGaWVsZC5kYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lfWBcblx0KTtcblx0aWYgKHJlc3VsdEZpZWxkLmZvcm1hdE9wdGlvbnM/LmZvcklubGluZUNyZWF0aW9uUm93cyA9PT0gdHJ1ZSkge1xuXHRcdHJlc3VsdEZpZWxkLmhhc1Byb3BlcnR5SW5zZXJ0UmVzdHJpY3Rpb25zID0gaGFzUHJvcGVydHlJbnNlcnRSZXN0cmljdGlvbnMocmVzdWx0RmllbGQuZGF0YU1vZGVsUGF0aCk7XG5cdH1cblx0Y29tcHV0ZUVkaXRNb2RlKHJlc3VsdEZpZWxkKTtcblx0Y29tcHV0ZUNvbGxhYm9yYXRpb25Qcm9wZXJ0aWVzKHJlc3VsdEZpZWxkKTtcblx0Y29tcHV0ZUVkaXRhYmxlRXhwcmVzc2lvbnMocmVzdWx0RmllbGQpO1xuXHRyZXN1bHRGaWVsZC5mb3JtYXRPcHRpb25zID0gcmVzdWx0RmllbGQuZm9ybWF0T3B0aW9ucyA/IHJlc3VsdEZpZWxkLmZvcm1hdE9wdGlvbnMgOiAoe30gYXMgRmllbGRGb3JtYXRPcHRpb25zKTtcblx0c2V0VXBGb3JtYXRPcHRpb25zKFxuXHRcdHJlc3VsdEZpZWxkLFxuXHRcdChyZXN1bHRGaWVsZC5kYXRhTW9kZWxQYXRoRXh0ZXJuYWxJRCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5PikgfHwgcmVzdWx0RmllbGQuZGF0YU1vZGVsUGF0aCxcblx0XHRjb250cm9sQ29uZmlndXJhdGlvbixcblx0XHR2aWV3RGF0YU1vZGVsXG5cdCk7XG5cdHNldFVwRGlzcGxheVN0eWxlKHJlc3VsdEZpZWxkLCByZXN1bHRGaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aCwgcmVzdWx0RmllbGQuZGF0YU1vZGVsUGF0aCwgaW50ZXJuYWxNb2RlbCwgYXBwQ29tcG9uZW50KTtcblx0c2V0VXBFZGl0U3R5bGUocmVzdWx0RmllbGQsIGFwcENvbXBvbmVudCk7XG5cblx0cmVzdWx0RmllbGQudmFsdWVTdGF0ZSA9IHNldFVwVmFsdWVTdGF0ZShyZXN1bHRGaWVsZCk7XG5cdGlmIChyZXN1bHRGaWVsZC5lZGl0U3R5bGUgPT09IFwiSW5wdXRXaXRoVmFsdWVIZWxwXCIpIHtcblx0XHRyZXN1bHRGaWVsZC5lZGl0U3R5bGVQbGFjZWhvbGRlciA9IHNldElucHV0V2l0aFZhbHVlaGVscFBsYWNlaG9sZGVyKHJlc3VsdEZpZWxkKTtcblx0fVxuXG5cdGNvbXB1dGVGaWxlVXBsb2FkZXJQcm9wZXJ0aWVzKHJlc3VsdEZpZWxkKTtcblxuXHRjb21wdXRlSW5saW5lRWRpdFByb3BlcnRpZXMocmVzdWx0RmllbGQsIHZpZXdEYXRhTW9kZWwpO1xuXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gY29tcHV0ZSBiaW5kaW5ncy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0Y29uc3QgYURpc3BsYXlTdHlsZXNXaXRob3V0UHJvcFRleHQgPSBbXCJBdmF0YXJcIiwgXCJBbW91bnRXaXRoQ3VycmVuY3lcIl07XG5cdGlmIChcblx0XHRyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUgJiZcblx0XHQhYURpc3BsYXlTdHlsZXNXaXRob3V0UHJvcFRleHQuaW5jbHVkZXMocmVzdWx0RmllbGQuZGlzcGxheVN0eWxlKSAmJlxuXHRcdHJlc3VsdEZpZWxkLmRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0XG5cdCkge1xuXHRcdHJlc3VsdEZpZWxkLnRleHQgPVxuXHRcdFx0cmVzdWx0RmllbGQudGV4dCA/P1xuXHRcdFx0cmVzdWx0RmllbGQudmFsdWUgPz9cblx0XHRcdEZpZWxkVGVtcGxhdGluZy5nZXRUZXh0QmluZGluZyhcblx0XHRcdFx0KHJlc3VsdEZpZWxkLmRhdGFNb2RlbFBhdGhFeHRlcm5hbElEIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+KSB8fCByZXN1bHRGaWVsZC5kYXRhTW9kZWxQYXRoLFxuXHRcdFx0XHRyZXN1bHRGaWVsZC5mb3JtYXRPcHRpb25zXG5cdFx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdHJlc3VsdEZpZWxkLnRleHQgPSBcIlwiO1xuXHR9XG5cblx0aWYgKHJlc3VsdEZpZWxkLmZvcm1hdE9wdGlvbnMuc2hvd0VtcHR5SW5kaWNhdG9yKSB7XG5cdFx0cmVzdWx0RmllbGQuZW1wdHlJbmRpY2F0b3JNb2RlID0gU3RyaW5nKHJlc3VsdEZpZWxkLmZvcm1hdE9wdGlvbnMuc2hvd0VtcHR5SW5kaWNhdG9yKSA9PT0gXCJ0cnVlXCIgPyBcIk9uXCIgOiB1bmRlZmluZWQ7XG5cdH0gZWxzZSB7XG5cdFx0cmVzdWx0RmllbGQuZW1wdHlJbmRpY2F0b3JNb2RlID0gdW5kZWZpbmVkO1xuXHR9XG5cblx0Ly8gSWYgdGhlIHRhcmdldCBpcyBhIHByb3BlcnR5IHdpdGggYSBEYXRhRmllbGREZWZhdWx0LCB1c2UgdGhpcyBhcyBkYXRhIGZpZWxkXG5cdGlmIChpc1Byb3BlcnR5KHJlc3VsdEZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoKSAmJiByZXN1bHRGaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aC5hbm5vdGF0aW9ucz8uVUk/LkRhdGFGaWVsZERlZmF1bHQgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJlc3VsdEZpZWxkLm1ldGFQYXRoID0gcmVzdWx0RmllbGQub2RhdGFNZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXG5cdFx0XHRgQCR7VUlBbm5vdGF0aW9uVGVybXMuRGF0YUZpZWxkRGVmYXVsdH1gLFxuXHRcdFx0bWV0YVBhdGggPyBtZXRhUGF0aCA6IHJlc3VsdEZpZWxkLm1ldGFQYXRoXG5cdFx0KTtcblx0fVxuXG5cdGlmICghaXNSZWFkT25seUluaXRpYWwpIHtcblx0XHRyZXN1bHRGaWVsZC5jb21wdXRlZEVkaXRNb2RlID0gY29tcGlsZUV4cHJlc3Npb24oaWZFbHNlKGVxdWFsKHJlc3VsdEZpZWxkLnJlYWRPbmx5LCB0cnVlKSwgXCJEaXNwbGF5XCIsIFwiRWRpdGFibGVcIikpO1xuXHR9XG5cblx0cmVzdWx0RmllbGQuZXZlbnRIYW5kbGVycyA9IHtcblx0XHRjaGFuZ2U6ICgpOiB2b2lkID0+IHt9LFxuXHRcdGxpdmVDaGFuZ2U6ICgpOiB2b2lkID0+IHt9LFxuXHRcdHZhbGlkYXRlRmllbGRHcm91cDogKCk6IHZvaWQgPT4ge30sXG5cdFx0aGFuZGxlVHlwZU1pc3NtYXRjaDogKCk6IHZvaWQgPT4ge30sXG5cdFx0aGFuZGxlRmlsZVNpemVFeGNlZWQ6ICgpOiB2b2lkID0+IHt9LFxuXHRcdGhhbmRsZVVwbG9hZENvbXBsZXRlOiAoKTogdm9pZCA9PiB7fSxcblx0XHR1cGxvYWRTdHJlYW06ICgpOiB2b2lkID0+IHt9LFxuXHRcdHJlbW92ZVN0cmVhbTogKCk6IHZvaWQgPT4ge30sXG5cdFx0aGFuZGxlT3BlblVwbG9hZGVyOiAoKTogdm9pZCA9PiB7fSxcblx0XHRoYW5kbGVDbG9zZVVwbG9hZGVyOiAoKTogdm9pZCA9PiB7fSxcblx0XHRvcGVuRXh0ZXJuYWxMaW5rOiAoKTogdm9pZCA9PiB7fSxcblx0XHRvbkZvY3VzT3V0OiAoKTogdm9pZCA9PiB7fSxcblx0XHRsaW5rUHJlc3NlZDogKCk6IHZvaWQgPT4ge30sXG5cdFx0ZGlzcGxheUFnZ3JlZ2F0aW9uRGV0YWlsczogKCk6IHZvaWQgPT4ge30sXG5cdFx0b25EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6ICgpOiB2b2lkID0+IHt9LFxuXHRcdHNob3dDb2xsYWJvcmF0aW9uRWRpdFVzZXI6ICgpOiB2b2lkID0+IHt9LFxuXHRcdG9uRGF0YUZpZWxkQWN0aW9uQnV0dG9uOiAoKTogdm9pZCA9PiB7fSxcblx0XHRvbkRhdGFGaWVsZFdpdGhJQk46ICgpOiB2b2lkID0+IHt9XG5cdH07XG5cblx0cmV0dXJuIHJlc3VsdEZpZWxkO1xufVxuXG4vKipcbiAqIFRoaXMgaGVscGVyIGNvbXB1dGVzIHRoZSBwcm9wZXJ0aWVzIHRoYXQgYXJlIG5lZWRlZCBmb3IgdGhlIGNvbGxhYm9yYXRpb24gYXZhdGFyLlxuICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZUNvbGxhYm9yYXRpb25Qcm9wZXJ0aWVzKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IHZvaWQge1xuXHRjb25zdCBjb21wdXRlZEVkaXRhYmxlRXhwcmVzc2lvbiA9IFVJRm9ybWF0dGVycy5nZXRFZGl0YWJsZUV4cHJlc3Npb25Bc09iamVjdChcblx0XHRmaWVsZC5wcm9wZXJ0eUZvckZpZWxkQ29udHJvbCxcblx0XHRmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aCxcblx0XHRmaWVsZC5kYXRhTW9kZWxQYXRoXG5cdCk7XG5cdGlmIChNb2RlbEhlbHBlci5pc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZChmaWVsZC5vZGF0YU1ldGFNb2RlbCkgJiYgZmllbGQuZWRpdE1vZGUgIT09IEZpZWxkRWRpdE1vZGUuRGlzcGxheSkge1xuXHRcdGNvbnN0IGNvbGxhYm9yYXRpb25FbmFibGVkID0gdHJ1ZTtcblx0XHQvLyBFeHByZXNzaW9ucyBuZWVkZWQgZm9yIENvbGxhYm9yYXRpb24gVmlzdWFsaXphdGlvblxuXHRcdGNvbnN0IGNvbGxhYm9yYXRpb25FeHByZXNzaW9uID0gVUlGb3JtYXR0ZXJzLmdldENvbGxhYm9yYXRpb25FeHByZXNzaW9uKFxuXHRcdFx0ZmllbGQuZGF0YU1vZGVsUGF0aCxcblx0XHRcdENvbGxhYm9yYXRpb25Gb3JtYXR0ZXJzLmhhc0NvbGxhYm9yYXRpb25BY3Rpdml0eVxuXHRcdCk7XG5cdFx0Y29uc3QgZWRpdGFibGVFeHByZXNzaW9uID0gY29tcGlsZUV4cHJlc3Npb24oYW5kKGNvbXB1dGVkRWRpdGFibGVFeHByZXNzaW9uLCBub3QoY29sbGFib3JhdGlvbkV4cHJlc3Npb24pKSk7XG5cblx0XHRjb25zdCBlZGl0TW9kZSA9IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRjb2xsYWJvcmF0aW9uRXhwcmVzc2lvbixcblx0XHRcdFx0Y29uc3RhbnQoXCJSZWFkT25seVwiKSxcblx0XHRcdFx0aWZFbHNlKGFuZChVSS5Jc0luYWN0aXZlLCAhIWZpZWxkLmhhc1Byb3BlcnR5SW5zZXJ0UmVzdHJpY3Rpb25zKSwgXCJEaXNwbGF5XCIsIGZpZWxkLmVkaXRNb2RlQXNPYmplY3QpXG5cdFx0XHQpXG5cdFx0KTtcblx0XHRmaWVsZC5jb2xsYWJvcmF0aW9uRW5hYmxlZCA9IGNvbGxhYm9yYXRpb25FbmFibGVkO1xuXHRcdGZpZWxkLmNvbGxhYm9yYXRpb25FeHByZXNzaW9uID0gY29sbGFib3JhdGlvbkV4cHJlc3Npb247XG5cdFx0ZmllbGQuZWRpdGFibGVFeHByZXNzaW9uID0gZWRpdGFibGVFeHByZXNzaW9uO1xuXHRcdGZpZWxkLmNvbXB1dGVkRWRpdE1vZGUgPSBlZGl0TW9kZTtcblx0fSBlbHNlIHtcblx0XHRmaWVsZC5lZGl0YWJsZUV4cHJlc3Npb24gPSBjb21waWxlRXhwcmVzc2lvbihjb21wdXRlZEVkaXRhYmxlRXhwcmVzc2lvbik7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGlzIGhlbHBlciBzZXRzIHRoZSBjb21tb24gcHJvcGVydGllcyBjb252ZXJ0ZWRNZXRhUGF0aCwgZGF0YU1vZGVsUGF0aFxuICogYW5kIHByb3BlcnR5IHRoYXQgY2FuIGJlIHJldXNlZCBpbiB0aGUgaW5kaXZpZHVhbCB0ZW1wbGF0ZXMgaWYgcmVxdWlyZWQuXG4gKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG4gKiBAcGFyYW0gbWV0YU1vZGVsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlQ29tbW9uUHJvcGVydGllcyhmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMsIG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpOiB2b2lkIHtcblx0ZmllbGQuY29udmVydGVkTWV0YVBhdGggPSBNZXRhTW9kZWxDb252ZXJ0ZXIuY29udmVydE1ldGFNb2RlbENvbnRleHQoZmllbGQubWV0YVBhdGhDb250ZXh0ID8gZmllbGQubWV0YVBhdGhDb250ZXh0IDogZmllbGQubWV0YVBhdGgpIGFzXG5cdFx0fCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzXG5cdFx0fCBEYXRhUG9pbnRUeXBlVHlwZXM7XG5cblx0bGV0IGRhdGFNb2RlbFBhdGggPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMgfCBQcm9wZXJ0eT4oXG5cdFx0ZmllbGQubWV0YVBhdGhDb250ZXh0ID8gZmllbGQubWV0YVBhdGhDb250ZXh0IDogZmllbGQubWV0YVBhdGgsXG5cdFx0ZmllbGQuY29udGV4dFBhdGhcblx0KTtcblx0ZGF0YU1vZGVsUGF0aCA9XG5cdFx0Z2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclZhbHVlKGRhdGFNb2RlbFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzPikgfHwgZGF0YU1vZGVsUGF0aDtcblx0ZmllbGQuZGF0YU1vZGVsUGF0aCA9IGRhdGFNb2RlbFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT47XG5cdGZpZWxkLnByb3BlcnR5ID0gZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHk7XG5cdGZpZWxkLm9kYXRhTWV0YU1vZGVsID0gbWV0YU1vZGVsO1xuXHRmaWVsZC5wcm9wZXJ0eUZvckZpZWxkQ29udHJvbCA9IChkYXRhTW9kZWxQYXRoPy50YXJnZXRPYmplY3QgYXMgdW5rbm93biBhcyBEYXRhRmllbGRUeXBlcyk/LlZhbHVlXG5cdFx0PyAoZGF0YU1vZGVsUGF0aD8udGFyZ2V0T2JqZWN0IGFzIHVua25vd24gYXMgRGF0YUZpZWxkVHlwZXMpLlZhbHVlXG5cdFx0OiBkYXRhTW9kZWxQYXRoPy50YXJnZXRPYmplY3Q7XG59XG5cbi8qKlxuICogSGVscGVyIHRvIGNvbXB1dGVzIHNvbWUgb2YgdGhlIGV4cHJlc3Npb24gZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy5cbiAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVFZGl0YWJsZUV4cHJlc3Npb25zKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IHZvaWQge1xuXHRjb25zdCByZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zID0gZ2V0UmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucyhcblx0XHQoZmllbGQuY29udGV4dFBhdGhDb250ZXh0ID8gZmllbGQuY29udGV4dFBhdGhDb250ZXh0IDogZmllbGQuY29udGV4dFBhdGgpXG5cdFx0XHQ/LmdldFBhdGgoKVxuXHRcdFx0LnJlcGxhY2VBbGwoXCIvJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcvXCIsIFwiL1wiKSxcblx0XHRmaWVsZC5vZGF0YU1ldGFNb2RlbFxuXHQpO1xuXHRjb25zdCByZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zID0gZ2V0UmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9ucyhcblx0XHQoZmllbGQuY29udGV4dFBhdGhDb250ZXh0ID8gZmllbGQuY29udGV4dFBhdGhDb250ZXh0IDogZmllbGQuY29udGV4dFBhdGgpXG5cdFx0XHQ/LmdldFBhdGgoKVxuXHRcdFx0LnJlcGxhY2VBbGwoXCIvJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcvXCIsIFwiL1wiKSxcblx0XHRmaWVsZC5vZGF0YU1ldGFNb2RlbFxuXHQpO1xuXHRjb25zdCBvUmVxdWlyZWRQcm9wZXJ0aWVzID0ge1xuXHRcdHJlcXVpcmVkUHJvcGVydGllc0Zyb21JbnNlcnRSZXN0cmljdGlvbnM6IHJlcXVpcmVkUHJvcGVydGllc0Zyb21JbnNlcnRSZXN0cmljdGlvbnMsXG5cdFx0cmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9uczogcmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9uc1xuXHR9O1xuXG5cdGNvbnN0IGVuYWJsZWRFeHByZXNzaW9uID0gVUlGb3JtYXR0ZXJzLmdldEVuYWJsZWRFeHByZXNzaW9uKFxuXHRcdGZpZWxkLnByb3BlcnR5Rm9yRmllbGRDb250cm9sLFxuXHRcdGZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoLFxuXHRcdGZhbHNlLFxuXHRcdGZpZWxkLmRhdGFNb2RlbFBhdGhcblx0KSBhcyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0Y29uc3QgcmVxdWlyZWRFeHByZXNzaW9uID0gVUlGb3JtYXR0ZXJzLmdldFJlcXVpcmVkRXhwcmVzc2lvbihcblx0XHRmaWVsZC5wcm9wZXJ0eUZvckZpZWxkQ29udHJvbCxcblx0XHRmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aCxcblx0XHRmYWxzZSxcblx0XHRmYWxzZSxcblx0XHRvUmVxdWlyZWRQcm9wZXJ0aWVzLFxuXHRcdGZpZWxkLmRhdGFNb2RlbFBhdGhcblx0KSBhcyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblxuXHRmaWVsZC5lbmFibGVkRXhwcmVzc2lvbiA9IGVuYWJsZWRFeHByZXNzaW9uO1xuXHRmaWVsZC5yZXF1aXJlZEV4cHJlc3Npb24gPSByZXF1aXJlZEV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlRWRpdE1vZGUoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogdm9pZCB7XG5cdGlmIChmaWVsZC5lZGl0TW9kZSAhPT0gdW5kZWZpbmVkICYmIGZpZWxkLmVkaXRNb2RlICE9PSBudWxsKSB7XG5cdFx0Ly8gRXZlbiBpZiBpdCBwcm92aWRlZCBhcyBhIHN0cmluZyBpdCdzIGEgdmFsaWQgcGFydCBvZiBhIGJpbmRpbmcgZXhwcmVzc2lvbiB0aGF0IGNhbiBiZSBsYXRlciBjb21iaW5lZCBpbnRvIHNvbWV0aGluZyBlbHNlLlxuXHRcdGZpZWxkLmVkaXRNb2RlQXNPYmplY3QgPSBmaWVsZC5lZGl0TW9kZTtcblx0fSBlbHNlIHtcblx0XHRjb25zdCBtZWFzdXJlUmVhZE9ubHkgPSBmaWVsZC5mb3JtYXRPcHRpb25zPy5tZWFzdXJlRGlzcGxheU1vZGUgPyBmaWVsZC5mb3JtYXRPcHRpb25zLm1lYXN1cmVEaXNwbGF5TW9kZSA9PT0gXCJSZWFkT25seVwiIDogZmFsc2U7XG5cblx0XHRmaWVsZC5lZGl0TW9kZUFzT2JqZWN0ID0gVUlGb3JtYXR0ZXJzLmdldEVkaXRNb2RlKFxuXHRcdFx0ZmllbGQucHJvcGVydHlGb3JGaWVsZENvbnRyb2wsXG5cdFx0XHRmaWVsZC5kYXRhTW9kZWxQYXRoLFxuXHRcdFx0bWVhc3VyZVJlYWRPbmx5LFxuXHRcdFx0dHJ1ZSxcblx0XHRcdGZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoXG5cdFx0KTtcblx0XHRmaWVsZC5jb21wdXRlZEVkaXRNb2RlID0gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRpZkVsc2UoYW5kKFVJLklzSW5hY3RpdmUsICEhZmllbGQuaGFzUHJvcGVydHlJbnNlcnRSZXN0cmljdGlvbnMpLCBcIkRpc3BsYXlcIiwgZmllbGQuZWRpdE1vZGVBc09iamVjdClcblx0XHQpO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlRXh0ZXJuYWxJRChmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiB2b2lkIHtcblx0Y29uc3QgZXh0ZXJuYWxJRFByb3BlcnR5ID0gZ2V0QXNzb2NpYXRlZEV4dGVybmFsSWRQcm9wZXJ0eShmaWVsZC5wcm9wZXJ0eSk7XG5cblx0aWYgKGV4dGVybmFsSURQcm9wZXJ0eSkge1xuXHRcdGlmIChmaWVsZC5wcm9wZXJ0eSkgZmllbGQucHJvcGVydHkudHlwZSA9IGV4dGVybmFsSURQcm9wZXJ0eS50eXBlO1xuXHRcdGlmIChpc0RhdGFGaWVsZChmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aCkpIHtcblx0XHRcdGZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoLlZhbHVlLiR0YXJnZXQudHlwZSA9IGV4dGVybmFsSURQcm9wZXJ0eS50eXBlO1xuXHRcdH1cblx0XHRjb25zdCBleHRlcm5hbElkUHJvcGVydHlQYXRoID0gZ2V0QXNzb2NpYXRlZEV4dGVybmFsSWRQcm9wZXJ0eVBhdGgoZmllbGQucHJvcGVydHkpO1xuXHRcdGNvbnN0IGV4dGVybmFsSWRDb250ZXh0ID0gZmllbGQubWV0YVBhdGhcblx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHQuY3JlYXRlQmluZGluZ0NvbnRleHQoZmllbGQuY29udGV4dFBhdGg/LmdldFBhdGgoKSArIFwiL1wiICsgZXh0ZXJuYWxJZFByb3BlcnR5UGF0aCwgZmllbGQubWV0YVBhdGgpO1xuXG5cdFx0ZmllbGQuY29udmVydGVkTWV0YVBhdGhFeHRlcm5hbElEID0gTWV0YU1vZGVsQ29udmVydGVyLmNvbnZlcnRNZXRhTW9kZWxDb250ZXh0KGV4dGVybmFsSWRDb250ZXh0KSBhcyBQcm9wZXJ0eTtcblxuXHRcdGxldCBkYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5PiA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMoXG5cdFx0XHRleHRlcm5hbElkQ29udGV4dCBhcyBDb250ZXh0LFxuXHRcdFx0ZmllbGQuY29udGV4dFBhdGhcblx0XHQpO1xuXHRcdGRhdGFNb2RlbFBhdGggPSBnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yVmFsdWUoZGF0YU1vZGVsUGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+KSB8fCBkYXRhTW9kZWxQYXRoO1xuXHRcdGZpZWxkLmRhdGFNb2RlbFBhdGhFeHRlcm5hbElEID0gZGF0YU1vZGVsUGF0aDtcblx0fVxufVxuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgZmllbGRHcm91cElkcyBmb3IgYW4gSW5wdXQgb3Igb3RoZXIgZWRpdCBjb250cm9sLlxuICogQHBhcmFtIGZpZWxkXG4gKiBAcGFyYW0gYXBwQ29tcG9uZW50XG4gKiBAcmV0dXJucyBUaGUgZmllbGRHcm91cElkc1xuICovXG5mdW5jdGlvbiBjb21wdXRlRmllbGRHcm91cElkcyhmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMsIGFwcENvbXBvbmVudD86IEFwcENvbXBvbmVudCk6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgdHlwZXNGb3JDb2xsYWJvcmF0aW9uRm9jdXNNYW5hZ2VtZW50ID0gW1xuXHRcdFwiSW5wdXRXaXRoVmFsdWVIZWxwXCIsXG5cdFx0XCJUZXh0QXJlYVwiLFxuXHRcdFwiRGF0ZVBpY2tlclwiLFxuXHRcdFwiVGltZVBpY2tlclwiLFxuXHRcdFwiRGF0ZVRpbWVQaWNrZXJcIixcblx0XHRcIklucHV0V2l0aFVuaXRcIixcblx0XHRcIklucHV0XCIsXG5cdFx0XCJJbnB1dE1hc2tcIixcblx0XHRcIk1hc2tlZFwiXG5cdF07XG5cblx0aWYgKCFhcHBDb21wb25lbnQpIHtcblx0XHQvL2ZvciBWYWx1ZUhlbHAgLyBNYXNzIGVkaXQgVGVtcGxhdGluZyB0aGUgYXBwQ29tcG9uZW50IGlzIG5vdCBwYXNzZWQgdG8gdGhlIHRlbXBsYXRpbmdcblx0XHRyZXR1cm47XG5cdH1cblx0Y29uc3Qgc2lkZUVmZmVjdFNlcnZpY2UgPSBhcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk7XG5cdGNvbnN0IGZpZWxkR3JvdXBJZHMgPSBzaWRlRWZmZWN0U2VydmljZS5jb21wdXRlRmllbGRHcm91cElkcyhcblx0XHRmaWVsZC5kYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVR5cGU/LmZ1bGx5UXVhbGlmaWVkTmFtZSA/PyBcIlwiLFxuXHRcdGZpZWxkLmRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0Py5mdWxseVF1YWxpZmllZE5hbWUgPz8gXCJcIlxuXHQpO1xuXG5cdGZpZWxkLm1haW5Qcm9wZXJ0eVJlbGF0aXZlUGF0aCA9IGlzUHJvcGVydHkoZmllbGQuZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QpXG5cdFx0PyBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKGZpZWxkLmRhdGFNb2RlbFBhdGgpXG5cdFx0OiB1bmRlZmluZWQ7XG5cblx0aWYgKGZpZWxkLmNvbGxhYm9yYXRpb25FbmFibGVkICYmIHR5cGVzRm9yQ29sbGFib3JhdGlvbkZvY3VzTWFuYWdlbWVudC5pbmNsdWRlcyhmaWVsZC5lZGl0U3R5bGUgfHwgXCJcIikpIHtcblx0XHRjb25zdCBjb2xsYWJvcmF0aW9uRmllbGRHcm91cCA9IGAke0NvbGxhYm9yYXRpb25GaWVsZEdyb3VwUHJlZml4fSR7ZmllbGQuZGF0YVNvdXJjZVBhdGh9YDtcblx0XHRmaWVsZEdyb3VwSWRzLnB1c2goY29sbGFib3JhdGlvbkZpZWxkR3JvdXApO1xuXHR9XG5cblx0cmV0dXJuIGZpZWxkR3JvdXBJZHMubGVuZ3RoID8gZmllbGRHcm91cElkcyA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBUaGlzIGhlbHBlciBpcyBmb3IgdGhlIElEIG9mIHRoZSBmaWVsZCBhY2NvcmRpbmcgdG8gc2V2ZXJhbCBkaWZmZXJlbnQgc2NlbmFyaW9zLlxuICpcbiAqIGRpc3BsYXlTdHlsZUlkIGlzIHVzZWQgZm9yIGFsbCBjb250cm9scyBpbnNpZGUgdGhlIGZpZWxkIHdyYXBwZXIgaW4gZGlzcGxheSBtb2RlLiBBIDxzYXAubS50ZXh0PiBjb250cm9sIHdvdWxkIGdldCB0aGlzIElELiBBbiBleGFtcGxlIGlzOiBBcHBsaWNhdGlvbkNvbnRleHQ6OkZpZWxkLWRpc3BsYXkuXG4gKiBlZGl0U3R5bGVJZCBpcyB1c2VkIGZvciBhbGwgY29udHJvbHMgaW5zaWRlIHRoZSBmaWVsZCB3cmFwcGVyIGluIGVkaXQgbW9kZS4gQSA8c2FwLnVpLm1kYy5maWVsZD4gY29udHJvbCB3b3VsZCBnZXQgdGhpcyBJRC4gQW4gZXhhbXBsZSBpczogQXBwbGljYXRpb25Db250ZXh0OjpGaWVsZC1lZGl0LlxuICpcbiAqIElmIG5vIHdyYXBwZXIgZXhpc3RzIHRoZSB3cmFwcGVycyBJRCB3aWxsIGJlIHByb3BhZ2F0ZWQgdG8gdGhlIGZpcnN0IGNvbnRyb2wgZGlzcGxheWVkLCBBIDxzYXAubS50ZXh0PiBjb250cm9sIHdvdWxkIGdldCB0aGlzIElELiBBbiBleGFtcGxlIGlzOiBBcHBsaWNhdGlvbkNvbnRleHQ6OkZpZWxkLWNvbnRlbnQuXG4gKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlSURzKGZpZWxkOiBQYXJ0aWFsPEZpZWxkQmxvY2tQcm9wZXJ0aWVzPik6IHZvaWQge1xuXHRpZiAoZmllbGQuX2ZsZXhJZCAmJiAhZmllbGQuX2FwaUlkKSB7XG5cdFx0ZmllbGQuX2FwaUlkID0gZmllbGQuX2ZsZXhJZDtcblx0XHRmaWVsZC5fZmxleElkID0gZ2V0Q29udGVudElkKGZpZWxkLl9mbGV4SWQpO1xuXHR9XG5cblx0aWYgKGZpZWxkLmlkUHJlZml4KSB7XG5cdFx0ZmllbGQuZWRpdFN0eWxlSWQgPSBnZW5lcmF0ZShbZmllbGQuaWRQcmVmaXgsIFwiRmllbGQtZWRpdFwiXSk7XG5cdH1cblx0Ly9Ob1dyYXBwZXJJZCBzY2VuYXJpbyBpcyBmb3IgdGhlIExSIHRhYmxlLlxuXHRpZiAoZmllbGQuZm9ybWF0T3B0aW9ucz8uZmllbGRNb2RlID09PSBcIm5vd3JhcHBlclwiICYmIGZpZWxkLmVkaXRNb2RlID09PSBcIkRpc3BsYXlcIikge1xuXHRcdGlmIChmaWVsZC5fZmxleElkKSB7XG5cdFx0XHRmaWVsZC5kaXNwbGF5U3R5bGVJZCA9IGZpZWxkLl9mbGV4SWQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZpZWxkLmRpc3BsYXlTdHlsZUlkID0gZmllbGQuaWRQcmVmaXggPyBnZW5lcmF0ZShbZmllbGQuaWRQcmVmaXgsIFwiRmllbGQtY29udGVudFwiXSkgOiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGZpZWxkLmlkUHJlZml4KSB7XG5cdFx0ZmllbGQuZGlzcGxheVN0eWxlSWQgPSBnZW5lcmF0ZShbZmllbGQuaWRQcmVmaXgsIFwiRmllbGQtZGlzcGxheVwiXSk7XG5cdH1cbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBpbnRlcm5hbCBmb3JtYXRPcHRpb25zIGZvciB0aGUgYnVpbGRpbmcgYmxvY2suXG4gKiBAcGFyYW0gZmllbGRcbiAqIEByZXR1cm5zIEEgc3RyaW5nIHdpdGggdGhlIGludGVybmFsIGZvcm1hdE9wdGlvbnMgZm9yIHRoZSBidWlsZGluZyBibG9ja1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybWF0T3B0aW9ucyhmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBGaWVsZEZvcm1hdE9wdGlvbnMge1xuXHRyZXR1cm4ge1xuXHRcdC4uLmZpZWxkLmZvcm1hdE9wdGlvbnMsXG5cdFx0dGV4dEFsaWduTW9kZTogZmllbGQuZm9ybWF0T3B0aW9ucy50ZXh0QWxpZ25Nb2RlID8/IFwiRm9ybVwiLFxuXHRcdHNob3dFbXB0eUluZGljYXRvcjogZmllbGQuZm9ybWF0T3B0aW9ucy5zaG93RW1wdHlJbmRpY2F0b3IgPz8gdHJ1ZSxcblx0XHRkaXNwbGF5TW9kZTogZmllbGQuZm9ybWF0T3B0aW9ucy5kaXNwbGF5TW9kZSBhcyBEaXNwbGF5TW9kZSxcblx0XHRtZWFzdXJlRGlzcGxheU1vZGU6IGZpZWxkLmZvcm1hdE9wdGlvbnMubWVhc3VyZURpc3BsYXlNb2RlLFxuXHRcdHRleHRMaW5lc0VkaXQ6IGZpZWxkLmZvcm1hdE9wdGlvbnMudGV4dExpbmVzRWRpdCxcblx0XHR0ZXh0TWF4TGluZXM6IGZpZWxkLmZvcm1hdE9wdGlvbnMudGV4dE1heExpbmVzLFxuXHRcdHRleHRNYXhDaGFyYWN0ZXJzRGlzcGxheTogZmllbGQuZm9ybWF0T3B0aW9ucy50ZXh0TWF4Q2hhcmFjdGVyc0Rpc3BsYXksXG5cdFx0dGV4dEV4cGFuZEJlaGF2aW9yRGlzcGxheTogZmllbGQuZm9ybWF0T3B0aW9ucy50ZXh0RXhwYW5kQmVoYXZpb3JEaXNwbGF5LFxuXHRcdHRleHRNYXhMZW5ndGg6IGZpZWxkLmZvcm1hdE9wdGlvbnMudGV4dE1heExlbmd0aCxcblx0XHRmaWVsZEVkaXRTdHlsZTogZmllbGQuZm9ybWF0T3B0aW9ucy5maWVsZEVkaXRTdHlsZSxcblx0XHRyYWRpb0J1dHRvbnNIb3Jpem9udGFsTGF5b3V0OiBmaWVsZC5mb3JtYXRPcHRpb25zLnJhZGlvQnV0dG9uc0hvcml6b250YWxMYXlvdXQsXG5cdFx0c2hvd1RpbWU6IGZpZWxkLmZvcm1hdE9wdGlvbnMuc2hvd1RpbWUsXG5cdFx0c2hvd1RpbWV6b25lOiBmaWVsZC5mb3JtYXRPcHRpb25zLnNob3dUaW1lem9uZSxcblx0XHRzaG93RGF0ZTogZmllbGQuZm9ybWF0T3B0aW9ucy5zaG93RGF0ZVxuXHR9IGFzIEZpZWxkRm9ybWF0T3B0aW9ucztcbn1cblxuZnVuY3Rpb24gZ2V0T2JqZWN0SWRlbnRpZmllclRleHQoXG5cdGZpZWxkRm9ybWF0T3B0aW9uczogRmllbGRGb3JtYXRPcHRpb25zLFxuXHRwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHkgfCBQcm9wZXJ0eVBhdGg+XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGxldCBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiA9IHBhdGhJbk1vZGVsKFxuXHRcdGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgocHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoKVxuXHQpO1xuXHRjb25zdCB0YXJnZXREaXNwbGF5TW9kZSA9IGZpZWxkRm9ybWF0T3B0aW9ucz8uZGlzcGxheU1vZGU7XG5cdGNvbnN0IHByb3BlcnR5RGVmaW5pdGlvbiA9IGlzUHJvcGVydHlQYXRoRXhwcmVzc2lvbihwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0KVxuXHRcdD8gKHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuJHRhcmdldCBhcyBQcm9wZXJ0eSlcblx0XHQ6IChwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0IGFzIFByb3BlcnR5KTtcblxuXHRjb25zdCBjb21tb25UZXh0ID0gcHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5Db21tb24/LlRleHQ7XG5cdGlmIChjb21tb25UZXh0ID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKHByb3BlcnR5RGVmaW5pdGlvbiwgcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbik7XG5cblx0c3dpdGNoICh0YXJnZXREaXNwbGF5TW9kZSkge1xuXHRcdGNhc2UgXCJWYWx1ZURlc2NyaXB0aW9uXCI6XG5cdFx0XHRjb25zdCByZWxhdGl2ZUxvY2F0aW9uID0gZ2V0UmVsYXRpdmVQYXRocyhwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihjb21tb25UZXh0LCByZWxhdGl2ZUxvY2F0aW9uKSk7XG5cdFx0Y2FzZSBcIkRlc2NyaXB0aW9uVmFsdWVcIjpcblx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihmb3JtYXRSZXN1bHQoW3Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb25dLCB2YWx1ZUZvcm1hdHRlcnMuZm9ybWF0VG9LZWVwV2hpdGVzcGFjZSkpO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldE92ZXJyaWRlcyhjb250cm9sQ29uZmlndXJhdGlvbjogVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncywgaWQ6IHN0cmluZyk6IEZpZWxkUHJvcGVydGllcyB7XG5cdC8qXG5cdFx0UXVhbG1zOiBXZSBuZWVkIHRvIHVzZSB0aGlzIFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3MgdHlwZSB0byBiZSBhYmxlIHRvIGl0ZXJhdGVcblx0XHRvdmVyIHRoZSBwcm9wZXJ0aWVzIGxhdGVyIG9uIGFuZCBjYXN0IGl0IGFmdGVyd2FyZHMgYXMgYSBmaWVsZCBwcm9wZXJ0eSB0eXBlXG5cdCovXG5cdGNvbnN0IHByb3BzID0ge30gYXMgVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncztcblxuXHRpZiAoY29udHJvbENvbmZpZ3VyYXRpb24pIHtcblx0XHRjb25zdCBjb250cm9sQ29uZmlnID0gY29udHJvbENvbmZpZ3VyYXRpb25baWRdIGFzIFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3M7XG5cdFx0aWYgKGNvbnRyb2xDb25maWcpIHtcblx0XHRcdE9iamVjdC5rZXlzKGNvbnRyb2xDb25maWcpLmZvckVhY2goZnVuY3Rpb24gKGNvbmZpZ0tleSkge1xuXHRcdFx0XHRwcm9wc1tjb25maWdLZXldID0gY29udHJvbENvbmZpZ1tjb25maWdLZXldO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBwcm9wcyBhcyB1bmtub3duIGFzIEZpZWxkUHJvcGVydGllcztcbn1cblxuLyoqXG4gKiBQcmVwYXJlIHRoZSBkaXNwbGF5IHN0eWxlIG9mIHRoZSBmaWVsZCBpbiBjYXNlIG9mIHNlbWFudGljIG9iamVjdHMgb3IgcXVpY2t2aWV3IGZhY2V0cy5cbiAqIEBwYXJhbSBmaWVsZCBUaGUgZmllbGRcbiAqIEBwYXJhbSBpbnRlcm5hbE1vZGVsXG4gKiBAcGFyYW0gZGF0YU1vZGVsUGF0aCBUaGUgRGF0YU1vZGVsT2JqZWN0UGF0aCBvZiB0aGUgcHJvcGVydHlcbiAqIEBwYXJhbSBoYXNTZW1hbnRpY09iamVjdHNcbiAqIEBwYXJhbSBoYXNRdWlja1ZpZXdcbiAqL1xuZnVuY3Rpb24gbWFuYWdlUXVpY2tWaWV3Rm9yRGlzcGxheVN0eWxlKFxuXHRmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMsXG5cdGludGVybmFsTW9kZWw6IEpTT05Nb2RlbCxcblx0ZGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdGhhc1NlbWFudGljT2JqZWN0czogYm9vbGVhbixcblx0aGFzUXVpY2tWaWV3OiBib29sZWFuXG4pOiB2b2lkIHtcblx0aWYgKGhhc1F1aWNrVmlldykge1xuXHRcdGZpZWxkLmhhc1F1aWNrVmlldyA9IHRydWU7XG5cdFx0ZmllbGQucXVpY2tWaWV3VHlwZSA9IFwiRmFjZXRzXCI7XG5cdH1cblx0aWYgKGhhc1NlbWFudGljT2JqZWN0cykge1xuXHRcdGNvbnN0IGZvdW5kU2VtYW50aWNPYmplY3RzID0gbWFuYWdlU2VtYW50aWNPYmplY3RzRm9yQ3VycmVudFVzZXIoZmllbGQuc2VtYW50aWNPYmplY3QsIGRhdGFNb2RlbFBhdGgsIGludGVybmFsTW9kZWwpO1xuXHRcdGlmIChmb3VuZFNlbWFudGljT2JqZWN0cy5oYXNSZWFjaGFibGVTdGF0aWNTZW1hbnRpY09iamVjdCB8fCBmb3VuZFNlbWFudGljT2JqZWN0cy5keW5hbWljU2VtYW50aWNPYmplY3RzLmxlbmd0aCkge1xuXHRcdFx0ZmllbGQuaGFzUXVpY2tWaWV3ID0gdHJ1ZTtcblx0XHRcdGZpZWxkLnF1aWNrVmlld1R5cGUgPSBoYXNRdWlja1ZpZXcgPyBcIkZhY2V0c0FuZFNlbWFudGljTGlua3NcIiA6IFwiU2VtYW50aWNMaW5rc1wiO1xuXHRcdFx0ZmllbGQuZHluYW1pY1NlbWFudGljT2JqZWN0cyA9XG5cdFx0XHRcdGZvdW5kU2VtYW50aWNPYmplY3RzLmhhc1JlYWNoYWJsZVN0YXRpY1NlbWFudGljT2JqZWN0ICE9PSB0cnVlID8gZm91bmRTZW1hbnRpY09iamVjdHMuZHluYW1pY1NlbWFudGljT2JqZWN0cyA6IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBDaGVjayBmaWVsZCB0byBrbm93IGlmIGl0IGhhcyBhIHNlbWFudGljIG9iamVjdC5cbiAqIEBwYXJhbSBmaWVsZCBUaGUgZmllbGRcbiAqIEBwYXJhbSBkYXRhTW9kZWxQYXRoIFRoZSBEYXRhTW9kZWxPYmplY3RQYXRoIG9mIHRoZSBwcm9wZXJ0eVxuICogQHJldHVybnMgVHJ1ZSBpZiBmaWVsZCBoYXMgYSBzZW1hbnRpYyBvYmplY3RcbiAqL1xuZnVuY3Rpb24gcHJvcGVydHlPck5hdmlnYXRpb25Qcm9wZXJ0eUhhc1NlbWFudGljT2JqZWN0KGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcywgZGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4pOiBib29sZWFuIHtcblx0cmV0dXJuICEhZ2V0UHJvcGVydHlXaXRoU2VtYW50aWNPYmplY3QoZGF0YU1vZGVsUGF0aCkgfHwgKGZpZWxkLnNlbWFudGljT2JqZWN0ICE9PSB1bmRlZmluZWQgJiYgZmllbGQuc2VtYW50aWNPYmplY3QgIT09IFwiXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0SW5wdXRXaXRoVmFsdWVoZWxwUGxhY2Vob2xkZXIoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRsZXQgdGFyZ2V0RW50aXR5VHlwZTtcblx0Y29uc3QgZWRpdFN0eWxlUGxhY2Vob2xkZXIgPSBmaWVsZC5lZGl0U3R5bGVQbGFjZWhvbGRlcjtcblx0Y29uc3QgZmllbGRDb250YWluZXJUeXBlID0gZmllbGQuZm9ybWF0T3B0aW9ucy50ZXh0QWxpZ25Nb2RlO1xuXHRpZiAoZmllbGRDb250YWluZXJUeXBlID09PSBcIlRhYmxlXCIpIHtcblx0XHR0YXJnZXRFbnRpdHlUeXBlID0gZmllbGQuZGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlUeXBlO1xuXHR9XG5cdGNvbnN0IHByb3BlcnR5UGF0aCA9IGZpZWxkLmRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0Py5uYW1lO1xuXHRjb25zdCByZWNvbW1lbmRhdGlvblZhbHVlID0gcGF0aEluTW9kZWwoYCR7cHJvcGVydHlQYXRofUAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy5wbGFjZWhvbGRlclZhbHVlYCk7XG5cdGNvbnN0IHJlY29tbWVuZGF0aW9uRGVzY3JpcHRpb24gPSBwYXRoSW5Nb2RlbChgJHtwcm9wZXJ0eVBhdGh9QCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnBsYWNlaG9sZGVyRGVzY3JpcHRpb25gKTtcblx0Y29uc3QgcGxhY2Vob2xkZXJFeHAgPSBmb3JtYXRSZXN1bHQoXG5cdFx0W1xuXHRcdFx0cmVjb21tZW5kYXRpb25WYWx1ZSxcblx0XHRcdHJlY29tbWVuZGF0aW9uRGVzY3JpcHRpb24sXG5cdFx0XHRwYXRoSW5Nb2RlbChgL3JlY29tbWVuZGF0aW9uc0RhdGFgLCBcImludGVybmFsXCIpLFxuXHRcdFx0cGF0aEluTW9kZWwoYC9jdXJyZW50Q3R4dGAsIFwiaW50ZXJuYWxcIiksXG5cdFx0XHRwYXRoSW5Nb2RlbChgJHtwcm9wZXJ0eVBhdGh9QCR1aTUuZmUubWVzc2FnZVR5cGVgKSxcblx0XHRcdGVkaXRTdHlsZVBsYWNlaG9sZGVyLFxuXHRcdFx0ZmllbGQuZm9ybWF0T3B0aW9ucy5kaXNwbGF5TW9kZVxuXHRcdF0sXG5cdFx0YWRkaXRpb25hbFZhbHVlRm9ybWF0dGVyLmZvcm1hdFBsYWNlaG9sZGVyLFxuXHRcdHRhcmdldEVudGl0eVR5cGVcblx0KTtcblxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24ocGxhY2Vob2xkZXJFeHApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0VXBEYXRhUG9pbnRUeXBlKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcyk6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMge1xuXHQvLyBkYXRhIHBvaW50IGFubm90YXRpb25zIG5lZWQgbm90IGhhdmUgJFR5cGUgZGVmaW5lZCwgc28gYWRkIGl0IGlmIG1pc3Npbmdcblx0Y29uc3QgZGF0YVBvaW50VHlwZSA9IHsgLi4uZGF0YUZpZWxkIH07XG5cdGlmICgoZGF0YUZpZWxkIGFzIHVua25vd24gYXMgRGF0YVBvaW50KT8udGVybSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhUG9pbnRcIikge1xuXHRcdGRhdGFQb2ludFR5cGUuJFR5cGUgPSBkYXRhRmllbGQuJFR5cGUgfHwgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZTtcblx0fVxuXHRyZXR1cm4gZGF0YVBvaW50VHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlY2ltYWxQYWRkaW5nKGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50IHwgdW5kZWZpbmVkLCBwcm9wZXJ0eTogUHJvcGVydHkpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuXHRjb25zdCBtYW5pZmVzdCA9IGFwcENvbXBvbmVudD8uZ2V0TWFuaWZlc3RFbnRyeShcInNhcC5mZVwiKTtcblx0cmV0dXJuIHByb3BlcnR5Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5XG5cdFx0PyBtYW5pZmVzdD8ubWFjcm9zPy50YWJsZT8uY3VycmVuY3k/LmRlY2ltYWxQYWRkaW5nID8/IDVcblx0XHQ6IG1hbmlmZXN0Py5tYWNyb3M/LnRhYmxlPy51bml0T2ZNZWFzdXJlPy5kZWNpbWFsUGFkZGluZyA/PyAzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0VXBEaXNwbGF5U3R5bGUoXG5cdGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyxcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzLFxuXHRkYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMgfCBQcm9wZXJ0eT4sXG5cdGludGVybmFsTW9kZWw6IEpTT05Nb2RlbCxcblx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnRcbik6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzIHtcblx0Y29uc3QgcmVzdWx0RmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzID0gZmllbGQ7XG5cdGNvbnN0IHByb3BlcnR5OiBQcm9wZXJ0eSA9IGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIFByb3BlcnR5O1xuXHRpZiAoIWRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0KSB7XG5cdFx0cmVzdWx0RmllbGQuZGlzcGxheVN0eWxlID0gXCJUZXh0XCI7XG5cdFx0cmV0dXJuIHJlc3VsdEZpZWxkO1xuXHR9XG5cblx0cmVzdWx0RmllbGQuaGFzVW5pdE9yQ3VycmVuY3kgPVxuXHRcdHByb3BlcnR5LmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdCAhPT0gdW5kZWZpbmVkIHx8IHByb3BlcnR5LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kgIT09IHVuZGVmaW5lZDtcblx0cmVzdWx0RmllbGQuaGFzVmFsaWRBbmFseXRpY2FsQ3VycmVuY3lPclVuaXQgPSBVSUZvcm1hdHRlcnMuaGFzVmFsaWRBbmFseXRpY2FsQ3VycmVuY3lPclVuaXQoXG5cdFx0ZGF0YU1vZGVsUGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5PlxuXHQpO1xuXHRyZXN1bHRGaWVsZC50ZXh0RnJvbVZhbHVlTGlzdCA9IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdGZvcm1hdFJlc3VsdChcblx0XHRcdFtcblx0XHRcdFx0cGF0aEluTW9kZWwoZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aChkYXRhTW9kZWxQYXRoKSksXG5cdFx0XHRcdGAvJHtwcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWV9YCxcblx0XHRcdFx0cmVzdWx0RmllbGQuZm9ybWF0T3B0aW9ucy5kaXNwbGF5TW9kZVxuXHRcdFx0XSxcblx0XHRcdFwic2FwLmZlLm1hY3Jvcy5maWVsZC5GaWVsZFJ1bnRpbWUucmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdFwiXG5cdFx0KVxuXHQpO1xuXG5cdGlmIChwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LklzSW1hZ2UpIHtcblx0XHRyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUgPSBcIkZpbGVcIjtcblx0XHRyZXR1cm4gcmVzdWx0RmllbGQ7XG5cdH1cblx0aWYgKHByb3BlcnR5LmFubm90YXRpb25zPy5VST8uSXNJbWFnZVVSTCkge1xuXHRcdHJlc3VsdEZpZWxkLmRpc3BsYXlTdHlsZSA9IFwiQXZhdGFyXCI7XG5cdFx0cmV0dXJuIHJlc3VsdEZpZWxkO1xuXHR9XG5cdGlmIChwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LklucHV0TWFzaykge1xuXHRcdHJlc3VsdEZpZWxkLmRpc3BsYXlTdHlsZSA9IFwiVGV4dFwiO1xuXHRcdHJldHVybiByZXN1bHRGaWVsZDtcblx0fVxuXHRpZiAocHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uTWFza2VkKSB7XG5cdFx0cmVzdWx0RmllbGQuZGlzcGxheVN0eWxlID0gXCJNYXNrZWRcIjtcblx0XHRyZXR1cm4gcmVzdWx0RmllbGQ7XG5cdH1cblx0Ly8gRm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucywgU3RyZWFtIHdpbGwgYmUgc2hvd24gd2l0aGluIGFuIGVudGl0eSBpbnN0YW5jZSBhcyBjaXJjbGUgaWYgdGhlIGVudGl0eSBpcyBhbm5vdGF0ZWQgYXMgSXNOYXR1cmFsUGVyc29uXG5cdC8vIGFuZCBuZWl0aGVyIElzSW1hZ2Ugbm9yIElzSW1hZ2VVUkwgYW5ub3RhdGlvbiBoYXMgYmVlbiB1c2VkLlxuXHRpZiAocHJvcGVydHkudHlwZSA9PT0gXCJFZG0uU3RyZWFtXCIpIHtcblx0XHRyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUgPSBcIkZpbGVcIjtcblx0XHRyZXR1cm4gcmVzdWx0RmllbGQ7XG5cdH1cblx0aWYgKHJlc3VsdEZpZWxkLmZvcm1hdE9wdGlvbnMuaXNGaWVsZEdyb3VwSXRlbSAmJiBwcm9wZXJ0eS50eXBlID09PSBcIkVkbS5Cb29sZWFuXCIpIHtcblx0XHRyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUgPSBcIkNoZWNrQm94R3JvdXBJdGVtXCI7XG5cdFx0cmV0dXJuIHJlc3VsdEZpZWxkO1xuXHR9XG5cdHNldFVwRHJhZnRJbmRpY2F0b3IoZGF0YU1vZGVsUGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5PiwgcmVzdWx0RmllbGQpO1xuXHRzd2l0Y2ggKGRhdGFGaWVsZC4kVHlwZSBhcyBzdHJpbmcpIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGU6XG5cdFx0XHRyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUgPSBcIkRhdGFQb2ludFwiO1xuXHRcdFx0cmV0dXJuIHJlc3VsdEZpZWxkO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjpcblx0XHRcdGlmICgoZGF0YUZpZWxkIGFzIHVua25vd24gYXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikuVGFyZ2V0Py4kdGFyZ2V0Py4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZSkge1xuXHRcdFx0XHRyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUgPSBcIkRhdGFQb2ludFwiO1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0RmllbGQ7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHQoZGF0YUZpZWxkIGFzIHVua25vd24gYXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikuVGFyZ2V0Py4kdGFyZ2V0Py4kVHlwZSA9PT1cblx0XHRcdFx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLkNvbnRhY3RUeXBlXCJcblx0XHRcdCkge1xuXHRcdFx0XHRyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUgPSBcIkNvbnRhY3RcIjtcblx0XHRcdFx0cmV0dXJuIHJlc3VsdEZpZWxkO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUgPSBcIkJ1dHRvblwiO1xuXHRcdFx0cmV0dXJuIHJlc3VsdEZpZWxkO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb246XG5cdFx0XHRyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUgPSBcIkxpbmtcIjtcblx0XHRcdHJldHVybiByZXN1bHRGaWVsZDtcblx0fVxuXHRjb25zdCBoYXNRdWlja1ZpZXcgPSBpc1VzZWRJbk5hdmlnYXRpb25XaXRoUXVpY2tWaWV3RmFjZXRzKGRhdGFNb2RlbFBhdGgsIHByb3BlcnR5KTtcblx0Y29uc3QgaGFzU2VtYW50aWNPYmplY3RzID0gcHJvcGVydHlPck5hdmlnYXRpb25Qcm9wZXJ0eUhhc1NlbWFudGljT2JqZWN0KHJlc3VsdEZpZWxkLCBkYXRhTW9kZWxQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+KTtcblxuXHRpZiAoaXNTZW1hbnRpY0tleShwcm9wZXJ0eSwgZGF0YU1vZGVsUGF0aCkgJiYgcmVzdWx0RmllbGQuZm9ybWF0T3B0aW9ucy5zZW1hbnRpY0tleVN0eWxlKSB7XG5cdFx0bWFuYWdlUXVpY2tWaWV3Rm9yRGlzcGxheVN0eWxlKFxuXHRcdFx0cmVzdWx0RmllbGQsXG5cdFx0XHRpbnRlcm5hbE1vZGVsLFxuXHRcdFx0ZGF0YU1vZGVsUGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pixcblx0XHRcdGhhc1NlbWFudGljT2JqZWN0cyxcblx0XHRcdGhhc1F1aWNrVmlld1xuXHRcdCk7XG5cdFx0c2V0VXBPYmplY3RJZGVudGlmaWVyVGl0bGVBbmRUZXh0KHJlc3VsdEZpZWxkLCBkYXRhTW9kZWxQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+KTtcblx0XHRyZXN1bHRGaWVsZC5zaG93RXJyb3JJbmRpY2F0b3IgPVxuXHRcdFx0KGRhdGFNb2RlbFBhdGguY29udGV4dExvY2F0aW9uIGFzIHVua25vd24gYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxTZXJ2aWNlT2JqZWN0Pik/LnRhcmdldE9iamVjdD8uX3R5cGUgPT09XG5cdFx0XHRcdFwiTmF2aWdhdGlvblByb3BlcnR5XCIgJiYgIXJlc3VsdEZpZWxkLmZvcm1hdE9wdGlvbnMuZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoO1xuXHRcdHJlc3VsdEZpZWxkLnNpdHVhdGlvbnNJbmRpY2F0b3JQcm9wZXJ0eVBhdGggPSAoZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHkpLm5hbWU7XG5cdFx0cmVzdWx0RmllbGQuZGlzcGxheVN0eWxlID1cblx0XHRcdHJlc3VsdEZpZWxkLmZvcm1hdE9wdGlvbnMuc2VtYW50aWNLZXlTdHlsZSA9PT0gXCJPYmplY3RJZGVudGlmaWVyXCIgPyBcIk9iamVjdElkZW50aWZpZXJcIiA6IFwiTGFiZWxTZW1hbnRpY0tleVwiO1xuXHRcdHJldHVybiByZXN1bHRGaWVsZDtcblx0fVxuXHRpZiAoZGF0YUZpZWxkLkNyaXRpY2FsaXR5KSB7XG5cdFx0bWFuYWdlUXVpY2tWaWV3Rm9yRGlzcGxheVN0eWxlKFxuXHRcdFx0cmVzdWx0RmllbGQsXG5cdFx0XHRpbnRlcm5hbE1vZGVsLFxuXHRcdFx0ZGF0YU1vZGVsUGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pixcblx0XHRcdGhhc1NlbWFudGljT2JqZWN0cyxcblx0XHRcdGhhc1F1aWNrVmlld1xuXHRcdCk7XG5cdFx0cmVzdWx0RmllbGQuZGlzcGxheVN0eWxlID0gXCJPYmplY3RTdGF0dXNcIjtcblx0XHRyZXR1cm4gcmVzdWx0RmllbGQ7XG5cdH1cblx0aWYgKFxuXHRcdChwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5IHx8IHByb3BlcnR5LmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdCkgJiZcblx0XHRTdHJpbmcocmVzdWx0RmllbGQuZm9ybWF0T3B0aW9ucy5pc0N1cnJlbmN5T3JVbml0QWxpZ25lZCkgPT09IFwidHJ1ZVwiICYmXG5cdFx0cmVzdWx0RmllbGQuZm9ybWF0T3B0aW9ucy5tZWFzdXJlRGlzcGxheU1vZGUgIT09IFwiSGlkZGVuXCJcblx0KSB7XG5cdFx0Y29uc3QgZGVjaW1hbFBhZGRpbmcgPSBGaWVsZFN0cnVjdHVyZUhlbHBlci5nZXREZWNpbWFsUGFkZGluZyhhcHBDb21wb25lbnQsIHByb3BlcnR5KTtcblx0XHRyZXN1bHRGaWVsZC52YWx1ZUFzU3RyaW5nQmluZGluZ0V4cHJlc3Npb24gPSByZXN1bHRGaWVsZC52YWx1ZVxuXHRcdFx0PyByZXN1bHRGaWVsZC52YWx1ZVxuXHRcdFx0OiBnZXRWYWx1ZUJpbmRpbmcoXG5cdFx0XHRcdFx0ZGF0YU1vZGVsUGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pixcblx0XHRcdFx0XHRyZXN1bHRGaWVsZC5mb3JtYXRPcHRpb25zLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0ZGVjaW1hbFBhZGRpbmcsXG5cdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0ICApO1xuXG5cdFx0cmVzdWx0RmllbGQudW5pdEJpbmRpbmdFeHByZXNzaW9uID0gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRVSUZvcm1hdHRlcnMuZ2V0QmluZGluZ0ZvclVuaXRPckN1cnJlbmN5KFxuXHRcdFx0XHRkYXRhTW9kZWxQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRcdFx0XHR0cnVlLFxuXHRcdFx0XHQhIWZpZWxkLmZvcm1hdE9wdGlvbnMuc2hvd09ubHlVbml0RGVjaW1hbHMsXG5cdFx0XHRcdCEhZmllbGQuZm9ybWF0T3B0aW9ucy5wcmVzZXJ2ZURlY2ltYWxzRm9yQ3VycmVuY3lcblx0XHRcdClcblx0XHQpO1xuXHRcdHJlc3VsdEZpZWxkLmRpc3BsYXlTdHlsZSA9IFwiTnVtYmVyV2l0aFVuaXRPckN1cnJlbmN5QWxpZ25lZFwiO1xuXG5cdFx0cmV0dXJuIHJlc3VsdEZpZWxkO1xuXHR9XG5cdGlmIChwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbXVuaWNhdGlvbj8uSXNFbWFpbEFkZHJlc3MgfHwgcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW11bmljYXRpb24/LklzUGhvbmVOdW1iZXIpIHtcblx0XHRyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUgPSBcIkxpbmtcIjtcblx0XHRyZXR1cm4gcmVzdWx0RmllbGQ7XG5cdH1cblx0aWYgKHByb3BlcnR5LmFubm90YXRpb25zPy5VST8uTXVsdGlMaW5lVGV4dCkge1xuXHRcdHJlc3VsdEZpZWxkLmRpc3BsYXlTdHlsZSA9IFwiRXhwYW5kYWJsZVRleHRcIjtcblx0XHRyZXR1cm4gcmVzdWx0RmllbGQ7XG5cdH1cblxuXHRpZiAoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsKSB7XG5cdFx0cmVzdWx0RmllbGQuZGlzcGxheVN0eWxlID0gXCJMaW5rXCI7XG5cdFx0cmV0dXJuIHJlc3VsdEZpZWxkO1xuXHR9XG5cblx0cmVzdWx0RmllbGQuZGlzcGxheVN0eWxlID0gXCJUZXh0XCI7XG5cdG1hbmFnZVF1aWNrVmlld0ZvckRpc3BsYXlTdHlsZShcblx0XHRyZXN1bHRGaWVsZCxcblx0XHRpbnRlcm5hbE1vZGVsLFxuXHRcdGRhdGFNb2RlbFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdFx0aGFzU2VtYW50aWNPYmplY3RzLFxuXHRcdGhhc1F1aWNrVmlld1xuXHQpO1xuXHRpZiAocmVzdWx0RmllbGQuaGFzUXVpY2tWaWV3KSB7XG5cdFx0cmVzdWx0RmllbGQuZGlzcGxheVN0eWxlID0gXCJMaW5rV2l0aFF1aWNrVmlld1wiO1xuXHR9XG5cdHJldHVybiByZXN1bHRGaWVsZDtcbn1cblxuLyoqXG4gKiBUaGlzIGRldGVybWluZXMgd2hldGhlciB3ZSBzaG91bGQgYWRkIGEgZHJhZnQgaW5kaWNhdG9yIHdpdGhpbiB0aGUgZmllbGQgdGVtcGxhdGUuXG4gKiBAcGFyYW0gZGF0YU1vZGVsUGF0aCBEYXRhTW9kZWxPYmplY3RQYXRoIHBvaW50aW5nIHRvIHRoZSBtYWluIHByb3BlcnR5IGZvciB0aGUgZmllbGRcbiAqIEBwYXJhbSBmaWVsZFxuICovXG5mdW5jdGlvbiBzZXRVcERyYWZ0SW5kaWNhdG9yKGRhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LCBmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiB2b2lkIHtcblx0aWYgKGlzU2VtYW50aWNLZXkoZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHksIGRhdGFNb2RlbFBhdGgpKSB7XG5cdFx0ZmllbGQuaGFzU2l0dWF0aW9uc0luZGljYXRvciA9IFNpdHVhdGlvbnNJbmRpY2F0b3IuZ2V0U2l0dWF0aW9uc05hdmlnYXRpb25Qcm9wZXJ0eShkYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVR5cGUpICE9PSB1bmRlZmluZWQ7XG5cdFx0aWYgKFxuXHRcdFx0KGRhdGFNb2RlbFBhdGguY29udGV4dExvY2F0aW9uPy50YXJnZXRFbnRpdHlTZXQgYXMgRW50aXR5U2V0IHwgdW5kZWZpbmVkKT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uRHJhZnRSb290ICYmXG5cdFx0XHQoZGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlTZXQgYXMgRW50aXR5U2V0IHwgdW5kZWZpbmVkKT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uRHJhZnRSb290ICYmXG5cdFx0XHRmaWVsZC5mb3JtYXRPcHRpb25zPy5oYXNEcmFmdEluZGljYXRvciA9PT0gdHJ1ZVxuXHRcdCkge1xuXHRcdFx0Ly8gSW4gY2FzZSBvZiBhIGdyaWQgdGFibGUgb3IgdHJlZSB0YWJsZSBoYXNEcmFmdEluZGljYXRvciB3aWxsIGJlIGZhbHNlIHNpbmNlIHRoZSBkcmFmdFxuXHRcdFx0Ly8gaW5kaWNhdG9yIG5lZWRzIHRvIGJlIHJlbmRlcmVkIGludG8gYSBzZXBhcmF0ZSBjb2x1bW5cblx0XHRcdC8vIEhlbmNlIHdlIHRoZW4gZmFsbCBiYWNrIHRvIGRpc3BsYXkgc3R5bGVzIE9iamVjdElkZW50aWZpZXIgb3IgTGFiZWxTZW1hbnRpY0tleSBpbnN0ZWFkXG5cdFx0XHQvLyBvZiB0aGUgY29tYmluZWQgSUQgYW5kIGRyYWZ0IGluZGljYXRvciBzdHlsZVxuXHRcdFx0ZmllbGQuZHJhZnRJbmRpY2F0b3JWaXNpYmxlID0gZ2V0RHJhZnRJbmRpY2F0b3JWaXNpYmxlQmluZGluZyhkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdD8ubmFtZSkgYXMgc3RyaW5nO1xuXHRcdFx0ZmllbGQuYWRkRHJhZnRJbmRpY2F0b3IgPSB0cnVlO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0VXBFZGl0U3R5bGUoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzLCBhcHBDb21wb25lbnQ/OiBBcHBDb21wb25lbnQpOiBGaWVsZEJsb2NrUHJvcGVydGllcyB7XG5cdGNvbnN0IHJlc3VsdEZpZWxkID0gZmllbGQ7XG5cdHNldEVkaXRTdHlsZVByb3BlcnRpZXMocmVzdWx0RmllbGQsIHJlc3VsdEZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoLCByZXN1bHRGaWVsZC5kYXRhTW9kZWxQYXRoKTtcblx0cmVzdWx0RmllbGQuZmllbGRHcm91cElkcyA9IGNvbXB1dGVGaWVsZEdyb3VwSWRzKHJlc3VsdEZpZWxkLCBhcHBDb21wb25lbnQpO1xuXHRyZXR1cm4gcmVzdWx0RmllbGQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRVcE9iamVjdElkZW50aWZpZXJUaXRsZUFuZFRleHQoXG5cdGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyxcblx0cHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5PlxuKTogdm9pZCB7XG5cdGNvbnN0IHNlbWFudGljU3R5bGUgPSBmaWVsZC5mb3JtYXRPcHRpb25zPy5zZW1hbnRpY0tleVN0eWxlO1xuXHRjb25zdCBkaXNwbGF5TW9kZSA9IGZpZWxkLmZvcm1hdE9wdGlvbnMuZGlzcGxheU1vZGU7XG5cdGZpZWxkLmlkZW50aWZpZXJUaXRsZSA9IGdldFRpdGxlQmluZGluZ0V4cHJlc3Npb24oXG5cdFx0cHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdGdldFRleHRCaW5kaW5nRXhwcmVzc2lvbixcblx0XHR7IGRpc3BsYXlNb2RlLCBzcGxpdFRpdGxlT25Ud29MaW5lczogZmllbGQuZm9ybWF0T3B0aW9ucy5zZW1hbnRpY0tleVN0eWxlID09PSBcIk9iamVjdElkZW50aWZpZXJcIiB9LFxuXHRcdHVuZGVmaW5lZCxcblx0XHR1bmRlZmluZWRcblx0KTtcblx0ZmllbGQuaWRlbnRpZmllclRleHQgPVxuXHRcdHNlbWFudGljU3R5bGUgPT09IFwiT2JqZWN0SWRlbnRpZmllclwiID8gZ2V0T2JqZWN0SWRlbnRpZmllclRleHQoZmllbGQuZm9ybWF0T3B0aW9ucywgcHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoKSA6IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFVwRm9ybWF0T3B0aW9ucyhcblx0ZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzLFxuXHRkYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pixcblx0Y29udHJvbENvbmZpZ3VyYXRpb246IFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3MsXG5cdHZpZXdEYXRhTW9kZWw6IEpTT05Nb2RlbFxuKTogdm9pZCB7XG5cdGNvbnN0IG92ZXJyaWRlUHJvcHMgPSBnZXRPdmVycmlkZXMoY29udHJvbENvbmZpZ3VyYXRpb24sIChmaWVsZC5tZXRhUGF0aENvbnRleHQgPyBmaWVsZC5tZXRhUGF0aENvbnRleHQgOiBmaWVsZC5tZXRhUGF0aCkuZ2V0UGF0aCgpKTtcblxuXHRpZiAoIWZpZWxkLmZvcm1hdE9wdGlvbnMuZGlzcGxheU1vZGUpIHtcblx0XHRmaWVsZC5mb3JtYXRPcHRpb25zLmRpc3BsYXlNb2RlID0gVUlGb3JtYXR0ZXJzLmdldERpc3BsYXlNb2RlKGRhdGFNb2RlbFBhdGgpO1xuXHR9XG5cdGlmIChmaWVsZC5mb3JtYXRPcHRpb25zLmRpc3BsYXlNb2RlID09PSBcIkRlc2NyaXB0aW9uXCIpIHtcblx0XHRmaWVsZC52YWx1ZUFzU3RyaW5nQmluZGluZ0V4cHJlc3Npb24gPSBmaWVsZC52YWx1ZVxuXHRcdFx0PyBmaWVsZC52YWx1ZVxuXHRcdFx0OiBnZXRWYWx1ZUJpbmRpbmcoZGF0YU1vZGVsUGF0aCwgZmllbGQuZm9ybWF0T3B0aW9ucywgdHJ1ZSwgdHJ1ZSwgdW5kZWZpbmVkLCB0cnVlKTtcblx0fVxuXHRmaWVsZC5mb3JtYXRPcHRpb25zLnRleHRMaW5lc0VkaXQgPVxuXHRcdChvdmVycmlkZVByb3BzIGFzIHVua25vd24gYXMgRmllbGRGb3JtYXRPcHRpb25zKS50ZXh0TGluZXNFZGl0IHx8XG5cdFx0KG92ZXJyaWRlUHJvcHMuZm9ybWF0T3B0aW9ucyAmJiBvdmVycmlkZVByb3BzLmZvcm1hdE9wdGlvbnMudGV4dExpbmVzRWRpdCkgfHxcblx0XHRmaWVsZC5mb3JtYXRPcHRpb25zLnRleHRMaW5lc0VkaXQgfHxcblx0XHQ0O1xuXHRmaWVsZC5mb3JtYXRPcHRpb25zLnRleHRNYXhMaW5lcyA9XG5cdFx0KG92ZXJyaWRlUHJvcHMgYXMgdW5rbm93biBhcyBGaWVsZEZvcm1hdE9wdGlvbnMpLnRleHRNYXhMaW5lcyB8fFxuXHRcdChvdmVycmlkZVByb3BzLmZvcm1hdE9wdGlvbnMgJiYgb3ZlcnJpZGVQcm9wcy5mb3JtYXRPcHRpb25zLnRleHRNYXhMaW5lcykgfHxcblx0XHRmaWVsZC5mb3JtYXRPcHRpb25zLnRleHRNYXhMaW5lcztcblxuXHQvLyBSZXRyaWV2ZSB0ZXh0IGZyb20gdmFsdWUgbGlzdCBhcyBmYWxsYmFjayBmZWF0dXJlIGZvciBtaXNzaW5nIHRleHQgYW5ub3RhdGlvbiBvbiB0aGUgcHJvcGVydHlcblx0aWYgKHZpZXdEYXRhTW9kZWw/LmdldFByb3BlcnR5KFwiL3JldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3RcIikpIHtcblx0XHRmaWVsZC5mb3JtYXRPcHRpb25zLnJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QgPSBpc1JldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3RFbmFibGVkKFxuXHRcdFx0ZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QhLFxuXHRcdFx0ZmllbGQuZm9ybWF0T3B0aW9uc1xuXHRcdCk7XG5cdFx0aWYgKGZpZWxkLmZvcm1hdE9wdGlvbnMucmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCkge1xuXHRcdFx0Ly8gQ29uc2lkZXIgVGV4dEFycmFuZ2VtZW50IGF0IEVudGl0eVR5cGUgb3RoZXJ3aXNlIHNldCBkZWZhdWx0IGRpc3BsYXkgZm9ybWF0ICdEZXNjcmlwdGlvblZhbHVlJ1xuXHRcdFx0Y29uc3QgaGFzRW50aXR5VGV4dEFycmFuZ2VtZW50ID0gISFkYXRhTW9kZWxQYXRoPy50YXJnZXRFbnRpdHlUeXBlPy5hbm5vdGF0aW9ucz8uVUk/LlRleHRBcnJhbmdlbWVudDtcblx0XHRcdGZpZWxkLmZvcm1hdE9wdGlvbnMuZGlzcGxheU1vZGUgPSBoYXNFbnRpdHlUZXh0QXJyYW5nZW1lbnQgPyBmaWVsZC5mb3JtYXRPcHRpb25zLmRpc3BsYXlNb2RlIDogXCJEZXNjcmlwdGlvblZhbHVlXCI7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRVcFZhbHVlU3RhdGUoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRsZXQgdmFsdWVTdGF0ZUV4cDtcblx0Y29uc3QgZmllbGRDb250YWluZXJUeXBlID0gZmllbGQuZm9ybWF0T3B0aW9ucz8udGV4dEFsaWduTW9kZSA/IGZpZWxkLmZvcm1hdE9wdGlvbnM/LnRleHRBbGlnbk1vZGUgOiBcIkZvcm1cIjtcblx0Y29uc3QgcHJvcGVydHlQYXRoSW5Nb2RlbCA9IHBhdGhJbk1vZGVsKGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgoZmllbGQuZGF0YU1vZGVsUGF0aCkpIGFzIFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxQcm9wZXJ0eT47XG5cdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSBnZXRSZWxhdGl2ZVBhdGhzKGZpZWxkLmRhdGFNb2RlbFBhdGgpO1xuXHRjb25zdCB0ZXh0UGF0aCA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihmaWVsZC5kYXRhTW9kZWxQYXRoPy50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5Db21tb24/LlRleHQsIHJlbGF0aXZlTG9jYXRpb24pO1xuXHRjb25zdCBwcm9wZXJ0eVBhdGggPSBmaWVsZC5kYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdD8ubmFtZTtcblx0Y29uc3QgcmVjb21tZW5kYXRpb25WYWx1ZSA9IHBhdGhJbk1vZGVsKGAke3Byb3BlcnR5UGF0aH1AJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMucGxhY2Vob2xkZXJWYWx1ZWApO1xuXHRjb25zdCByZWNvbW1lbmRhdGlvbkRlc2NyaXB0aW9uID0gcGF0aEluTW9kZWwoYCR7cHJvcGVydHlQYXRofUAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy5wbGFjZWhvbGRlckRlc2NyaXB0aW9uYCk7XG5cdGlmIChmaWVsZENvbnRhaW5lclR5cGUgPT09IFwiVGFibGVcIikge1xuXHRcdHZhbHVlU3RhdGVFeHAgPSBmb3JtYXRSZXN1bHQoXG5cdFx0XHRbXG5cdFx0XHRcdHJlY29tbWVuZGF0aW9uVmFsdWUsXG5cdFx0XHRcdHJlY29tbWVuZGF0aW9uRGVzY3JpcHRpb24sXG5cdFx0XHRcdHBhdGhJbk1vZGVsKGAvcmVjb21tZW5kYXRpb25zRGF0YWAsIFwiaW50ZXJuYWxcIiksXG5cdFx0XHRcdHBhdGhJbk1vZGVsKGAvaXNFZGl0YWJsZWAsIFwidWlcIiksXG5cdFx0XHRcdGZpZWxkLmRhdGFTb3VyY2VQYXRoLFxuXHRcdFx0XHRwcm9wZXJ0eVBhdGhJbk1vZGVsLFxuXHRcdFx0XHR0ZXh0UGF0aFxuXHRcdFx0XSxcblx0XHRcdGFkZGl0aW9uYWxWYWx1ZUZvcm1hdHRlci5mb3JtYXRWYWx1ZVN0YXRlLFxuXHRcdFx0ZmllbGQuZGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlUeXBlXG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHR2YWx1ZVN0YXRlRXhwID0gZm9ybWF0UmVzdWx0KFxuXHRcdFx0W1xuXHRcdFx0XHRyZWNvbW1lbmRhdGlvblZhbHVlLFxuXHRcdFx0XHRyZWNvbW1lbmRhdGlvbkRlc2NyaXB0aW9uLFxuXHRcdFx0XHRwYXRoSW5Nb2RlbChgL3JlY29tbWVuZGF0aW9uc0RhdGFgLCBcImludGVybmFsXCIpLFxuXHRcdFx0XHRwYXRoSW5Nb2RlbChgL2lzRWRpdGFibGVgLCBcInVpXCIpLFxuXHRcdFx0XHRmaWVsZC5kYXRhU291cmNlUGF0aCxcblx0XHRcdFx0cHJvcGVydHlQYXRoSW5Nb2RlbCxcblx0XHRcdFx0dGV4dFBhdGhcblx0XHRcdF0sXG5cdFx0XHRhZGRpdGlvbmFsVmFsdWVGb3JtYXR0ZXIuZm9ybWF0VmFsdWVTdGF0ZVxuXHRcdCk7XG5cdH1cblxuXHRmaWVsZC52YWx1ZVN0YXRlID0gY29tcGlsZUV4cHJlc3Npb24odmFsdWVTdGF0ZUV4cCk7XG5cdHJldHVybiBmaWVsZC52YWx1ZVN0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0VXBWaXNpYmxlUHJvcGVydGllcyhmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiB2b2lkIHtcblx0Ly8gd2UgZG8gdGhpcyBiZWZvcmUgZW5oYW5jaW5nIHRoZSBkYXRhTW9kZWxQYXRoIHNvIHRoYXQgaXQgc3RpbGwgcG9pbnRzIGF0IHRoZSBEYXRhRmllbGRcblx0Ly8gY29uc3QgdmlzaWJsZVByb3BlcnRpZXM6IFBhcnRpYWw8ZmllbGRCbG9jaz4gPSB7fTtcblx0Y29uc3QgcHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPihcblx0XHRmaWVsZC5tZXRhUGF0aENvbnRleHQgPyBmaWVsZC5tZXRhUGF0aENvbnRleHQgOiBmaWVsZC5tZXRhUGF0aCxcblx0XHRmaWVsZC5jb250ZXh0UGF0aFxuXHQpO1xuXG5cdGZpZWxkLnZpc2libGUgPz89IGdldFZpc2libGVFeHByZXNzaW9uKHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCwgZmllbGQuZm9ybWF0T3B0aW9ucyk7XG5cdGZpZWxkLmRpc3BsYXlWaXNpYmxlID0gZmllbGQuZm9ybWF0T3B0aW9ucz8uZmllbGRNb2RlID09PSBcIm5vd3JhcHBlclwiID8gZmllbGQudmlzaWJsZSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZ2V0Q29udGVudElkKG1hY3JvSWQ6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiBgJHttYWNyb0lkfS1jb250ZW50YDtcbn1cblxuLyoqXG4gKiBDb21wdXRlcyBwcm9wZXJ0aWVzIGZvciB0aGUgZmlsZSB0ZW1wbGF0aW5nLlxuICogQHBhcmFtIGZpZWxkIFRoZSBmaWVsZFxuICovXG5mdW5jdGlvbiBjb21wdXRlRmlsZVVwbG9hZGVyUHJvcGVydGllcyhmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiB2b2lkIHtcblx0aWYgKGZpZWxkLmRpc3BsYXlTdHlsZSA9PT0gXCJGaWxlXCIpIHtcblx0XHRmaWVsZC5maWxlUmVsYXRpdmVQcm9wZXJ0eVBhdGggPSBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKGZpZWxkLmRhdGFNb2RlbFBhdGgpIHx8IFwiXCI7XG5cdFx0Y29uc3QgZmlsZU5hbWVBbm5vdGF0aW9uID0gZmllbGQucHJvcGVydHkuYW5ub3RhdGlvbnMuQ29yZT8uQ29udGVudERpc3Bvc2l0aW9uPy5GaWxlbmFtZTtcblx0XHRpZiAoaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24oZmlsZU5hbWVBbm5vdGF0aW9uKSkge1xuXHRcdFx0Y29uc3QgZmlsZU5hbWVEYXRhTW9kZWxQYXRoID0gZW5oYW5jZURhdGFNb2RlbFBhdGgoZmllbGQuZGF0YU1vZGVsUGF0aCwgZmlsZU5hbWVBbm5vdGF0aW9uLnBhdGgpO1xuXHRcdFx0ZmllbGQuZmlsZUZpbGVuYW1lRXhwcmVzc2lvbiA9IGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgoZmlsZU5hbWVEYXRhTW9kZWxQYXRoKSA/PyBcIlwiO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIENvbXB1dGVzIHByb3BlcnRpZXMgZm9yIHRoZSBpbmxpbmUgZWRpdCB0ZW1wbGF0aW5nLlxuICogQHBhcmFtIGZpZWxkIFRoZSBmaWVsZFxuICogQHBhcmFtIHZpZXdEYXRhTW9kZWxcbiAqL1xuZnVuY3Rpb24gY29tcHV0ZUlubGluZUVkaXRQcm9wZXJ0aWVzKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcywgdmlld0RhdGFNb2RlbDogSlNPTk1vZGVsKTogdm9pZCB7XG5cdGlmIChmaWVsZC5kaXNwbGF5U3R5bGUgPT09IFwiRmlsZVwiIHx8IGZpZWxkLmRpc3BsYXlTdHlsZSA9PT0gXCJBdmF0YXJcIikge1xuXHRcdGZpZWxkLmlubGluZUVkaXRFbmFibGVkID0gdW5kZWZpbmVkO1xuXHRcdHJldHVybjtcblx0fVxuXHRmaWVsZC5pbmxpbmVFZGl0RW5hYmxlZCA9XG5cdFx0ZmllbGQuaW5saW5lRWRpdEVuYWJsZWQgPT09IHRydWUgfHwgdmlld0RhdGFNb2RlbD8uZ2V0UHJvcGVydHkoXCIvaXNJbmxpbmVFZGl0RW5hYmxlZFwiKSA9PT0gdHJ1ZSA/IHRydWUgOiB1bmRlZmluZWQ7XG5cdGlmIChmaWVsZC5pbmxpbmVFZGl0RW5hYmxlZCAmJiBmaWVsZC5lZGl0TW9kZUFzT2JqZWN0ICE9PSBcIkRpc3BsYXlcIikge1xuXHRcdGNvbnN0IGNvbXB1dGVkRWRpdGFibGVFeHByZXNzaW9uID0gVUlGb3JtYXR0ZXJzLmdldEVkaXRhYmxlRXhwcmVzc2lvbkFzT2JqZWN0KFxuXHRcdFx0ZmllbGQucHJvcGVydHlGb3JGaWVsZENvbnRyb2wsXG5cdFx0XHRmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aCxcblx0XHRcdGZpZWxkLmRhdGFNb2RlbFBhdGhcblx0XHQpO1xuXG5cdFx0ZmllbGQuaGFzSW5saW5lRWRpdCA9IHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0Y29tcHV0ZWRFZGl0YWJsZUV4cHJlc3Npb24sXG5cdFx0XHRcIlBhdGhJbk1vZGVsXCIsXG5cdFx0XHQoZXhwcikgPT4ge1xuXHRcdFx0XHRpZiAoZXhwci5wYXRoID09PSBcImlzRWRpdGFibGVcIiAmJiBleHByLm1vZGVsTmFtZSA9PT0gXCJ1aVwiKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBleHByO1xuXHRcdFx0fSxcblx0XHRcdHRydWVcblx0XHQpIGFzIHVua25vd24gYXMgYm9vbGVhbjtcblx0fVxufVxuXG5jb25zdCBGaWVsZFN0cnVjdHVyZUhlbHBlciA9IHtcblx0Z2V0RGVjaW1hbFBhZGRpbmcsXG5cdHNldFVwRmllbGQsXG5cdGNvbXB1dGVFeHRlcm5hbElELFxuXHRzZXRVcERpc3BsYXlTdHlsZSxcblx0c2V0VXBPYmplY3RJZGVudGlmaWVyVGl0bGVBbmRUZXh0LFxuXHRzZXRVcFZhbHVlU3RhdGVcbn07XG5leHBvcnQgZGVmYXVsdCBGaWVsZFN0cnVjdHVyZUhlbHBlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFrTU8sU0FBU0EsVUFBVUEsQ0FDekJDLEtBQWdDLEVBQ2hDQyxvQkFBK0MsRUFDL0NDLGFBQXdCLEVBQ3hCQyxhQUF3QixFQUN4QkMsWUFBMEIsRUFDMUJDLGlCQUEyQixFQUMzQkMsUUFBOEIsRUFDOUJDLFdBQWlDLEVBQ1Y7SUFDdkIsTUFBTUMsV0FBVyxHQUFHO01BQUUsR0FBR1I7SUFBTSxDQUFvQztJQUNuRVMsTUFBTSxDQUFDQyxjQUFjLENBQUNGLFdBQVcsRUFBRSxPQUFPLEVBQUU7TUFDM0NHLEdBQUcsRUFBRUEsQ0FBQSxLQUFNO1FBQ1YsT0FBT1gsS0FBSyxDQUFDWSxLQUFLO01BQ25CO0lBQ0QsQ0FBQyxDQUFDO0lBQ0ZILE1BQU0sQ0FBQ0MsY0FBYyxDQUFDRixXQUFXLEVBQUUsYUFBYSxFQUFFO01BQ2pERyxHQUFHLEVBQUVBLENBQUEsS0FBTTtRQUNWLE9BQU9YLEtBQUssQ0FBQ2EsV0FBVztNQUN6QjtJQUNELENBQUMsQ0FBQztJQUVGTCxXQUFXLENBQUNNLE1BQU0sR0FBR2QsS0FBSyxDQUFDYyxNQUFNO0lBQ2pDTixXQUFXLENBQUNGLFFBQVEsR0FBSUEsUUFBUSxHQUFHQSxRQUFRLEdBQUdOLEtBQUssQ0FBQ00sUUFBb0I7SUFDeEVFLFdBQVcsQ0FBQ0QsV0FBVyxHQUFJQSxXQUFXLEdBQUdBLFdBQVcsR0FBR1AsS0FBSyxDQUFDTyxXQUF1QjtJ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
648
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzZXRVcEZpZWxkIiwiZmllbGQiLCJjb250cm9sQ29uZmlndXJhdGlvbiIsInZpZXdEYXRhTW9kZWwiLCJpbnRlcm5hbE1vZGVsIiwiYXBwQ29tcG9uZW50IiwiaXNSZWFkT25seUluaXRpYWwiLCJtZXRhUGF0aCIsImNvbnRleHRQYXRoIiwicmVzdWx0RmllbGQiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldCIsInZhbHVlIiwiZGVzY3JpcHRpb24iLCJjaGFuZ2UiLCJ2aXNpYmxlIiwidmhJZFByZWZpeCIsIl9mbGV4SWQiLCJpZCIsImlkUHJlZml4IiwiZm9ybWF0T3B0aW9ucyIsImdldEZvcm1hdE9wdGlvbnMiLCJzaG93T25seVVuaXREZWNpbWFscyIsImdldFByb3BlcnR5IiwicHJlc2VydmVEZWNpbWFsc0ZvckN1cnJlbmN5IiwidmFsdWVIZWxwTWV0YVBhdGgiLCJjb21wdXRlQ29tbW9uUHJvcGVydGllcyIsImdldE1vZGVsIiwiY29udmVydGVkTWV0YVBhdGgiLCJzZXRVcERhdGFQb2ludFR5cGUiLCJzZXRVcFZpc2libGVQcm9wZXJ0aWVzIiwiY29tcHV0ZUlEcyIsImRhdGFTb3VyY2VQYXRoIiwiZ2V0VGFyZ2V0T2JqZWN0UGF0aCIsImRhdGFNb2RlbFBhdGgiLCJsYWJlbCIsIkZpZWxkSGVscGVyIiwiY29tcHV0ZUxhYmVsVGV4dCIsImNvbnRleHQiLCJjb21wdXRlRXh0ZXJuYWxJRCIsImVudGl0eVR5cGUiLCJvZGF0YU1ldGFNb2RlbCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwidGFyZ2V0RW50aXR5VHlwZSIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImZvcklubGluZUNyZWF0aW9uUm93cyIsImhhc1Byb3BlcnR5SW5zZXJ0UmVzdHJpY3Rpb25zIiwiY29tcHV0ZUVkaXRNb2RlIiwiY29tcHV0ZUNvbGxhYm9yYXRpb25Qcm9wZXJ0aWVzIiwiY29tcHV0ZUVkaXRhYmxlRXhwcmVzc2lvbnMiLCJzZXRVcEZvcm1hdE9wdGlvbnMiLCJkYXRhTW9kZWxQYXRoRXh0ZXJuYWxJRCIsInNldFVwRGlzcGxheVN0eWxlIiwiZWRpdE1vZGUiLCJzZXRVcEVkaXRTdHlsZSIsInZhbHVlU3RhdGUiLCJzZXRVcFZhbHVlU3RhdGUiLCJlZGl0U3R5bGUiLCJlZGl0U3R5bGVQbGFjZWhvbGRlciIsInNldElucHV0V2l0aFZhbHVlaGVscFBsYWNlaG9sZGVyIiwiY29tcHV0ZUZpbGVVcGxvYWRlclByb3BlcnRpZXMiLCJjb21wdXRlSW5saW5lRWRpdFByb3BlcnRpZXMiLCJhRGlzcGxheVN0eWxlc1dpdGhvdXRQcm9wVGV4dCIsImRpc3BsYXlTdHlsZSIsImluY2x1ZGVzIiwidGFyZ2V0T2JqZWN0IiwidGV4dCIsIkZpZWxkVGVtcGxhdGluZyIsImdldFRleHRCaW5kaW5nIiwic2hvd0VtcHR5SW5kaWNhdG9yIiwiZW1wdHlJbmRpY2F0b3JNb2RlIiwiU3RyaW5nIiwidW5kZWZpbmVkIiwiaXNQcm9wZXJ0eSIsImFubm90YXRpb25zIiwiVUkiLCJEYXRhRmllbGREZWZhdWx0IiwiY29tcHV0ZWRFZGl0TW9kZSIsImNvbXBpbGVFeHByZXNzaW9uIiwiaWZFbHNlIiwiZXF1YWwiLCJyZWFkT25seSIsImV2ZW50SGFuZGxlcnMiLCJsaXZlQ2hhbmdlIiwidmFsaWRhdGVGaWVsZEdyb3VwIiwiaGFuZGxlVHlwZU1pc3NtYXRjaCIsImhhbmRsZUZpbGVTaXplRXhjZWVkIiwiaGFuZGxlVXBsb2FkQ29tcGxldGUiLCJ1cGxvYWRTdHJlYW0iLCJyZW1vdmVTdHJlYW0iLCJoYW5kbGVPcGVuVXBsb2FkZXIiLCJoYW5kbGVDbG9zZVVwbG9hZGVyIiwib3BlbkV4dGVybmFsTGluayIsIm9uRm9jdXNPdXQiLCJsaW5rUHJlc3NlZCIsImRpc3BsYXlBZ2dyZWdhdGlvbkRldGFpbHMiLCJvbkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aCIsIm9uRGF0YUZpZWxkQWN0aW9uQnV0dG9uIiwib25EYXRhRmllbGRXaXRoSUJOIiwiX2V4cG9ydHMiLCJjb21wdXRlZEVkaXRhYmxlRXhwcmVzc2lvbiIsIlVJRm9ybWF0dGVycyIsImdldEVkaXRhYmxlRXhwcmVzc2lvbkFzT2JqZWN0IiwicHJvcGVydHlGb3JGaWVsZENvbnRyb2wiLCJNb2RlbEhlbHBlciIsImlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkIiwiRmllbGRFZGl0TW9kZSIsIkRpc3BsYXkiLCJjb2xsYWJvcmF0aW9uRXhwcmVzc2lvbiIsImdldENvbGxhYm9yYXRpb25FeHByZXNzaW9uIiwiQ29sbGFib3JhdGlvbkZvcm1hdHRlcnMiLCJoYXNDb2xsYWJvcmF0aW9uQWN0aXZpdHkiLCJlZGl0YWJsZUV4cHJlc3Npb24iLCJhbmQiLCJub3QiLCJjb25zdGFudCIsIklzSW5hY3RpdmUiLCJlZGl0TW9kZUFzT2JqZWN0IiwiY29sbGFib3JhdGlvbkVuYWJsZWQiLCJtZXRhTW9kZWwiLCJNZXRhTW9kZWxDb252ZXJ0ZXIiLCJjb252ZXJ0TWV0YU1vZGVsQ29udGV4dCIsIm1ldGFQYXRoQ29udGV4dCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JWYWx1ZSIsInByb3BlcnR5IiwiVmFsdWUiLCJyZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zIiwiZ2V0UmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucyIsImNvbnRleHRQYXRoQ29udGV4dCIsImdldFBhdGgiLCJyZXBsYWNlQWxsIiwicmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9ucyIsImdldFJlcXVpcmVkUHJvcGVydGllc0Zyb21VcGRhdGVSZXN0cmljdGlvbnMiLCJvUmVxdWlyZWRQcm9wZXJ0aWVzIiwiZW5hYmxlZEV4cHJlc3Npb24iLCJnZXRFbmFibGVkRXhwcmVzc2lvbiIsInJlcXVpcmVkRXhwcmVzc2lvbiIsImdldFJlcXVpcmVkRXhwcmVzc2lvbiIsIm1lYXN1cmVSZWFkT25seSIsIm1lYXN1cmVEaXNwbGF5TW9kZSIsImdldEVkaXRNb2RlIiwiZXh0ZXJuYWxJRFByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZEV4dGVybmFsSWRQcm9wZXJ0eSIsInR5cGUiLCJpc0RhdGFGaWVsZCIsIiR0YXJnZXQiLCJleHRlcm5hbElkUHJvcGVydHlQYXRoIiwiZ2V0QXNzb2NpYXRlZEV4dGVybmFsSWRQcm9wZXJ0eVBhdGgiLCJleHRlcm5hbElkQ29udGV4dCIsImNvbnZlcnRlZE1ldGFQYXRoRXh0ZXJuYWxJRCIsImNvbXB1dGVGaWVsZEdyb3VwSWRzIiwidHlwZXNGb3JDb2xsYWJvcmF0aW9uRm9jdXNNYW5hZ2VtZW50Iiwic2lkZUVmZmVjdFNlcnZpY2UiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJmaWVsZEdyb3VwSWRzIiwibWFpblByb3BlcnR5UmVsYXRpdmVQYXRoIiwiZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCIsImNvbGxhYm9yYXRpb25GaWVsZEdyb3VwIiwiQ29sbGFib3JhdGlvbkZpZWxkR3JvdXBQcmVmaXgiLCJwdXNoIiwibGVuZ3RoIiwiX2FwaUlkIiwiZ2V0Q29udGVudElkIiwiZWRpdFN0eWxlSWQiLCJnZW5lcmF0ZSIsImZpZWxkTW9kZSIsImRpc3BsYXlTdHlsZUlkIiwidGV4dEFsaWduTW9kZSIsImRpc3BsYXlNb2RlIiwidGV4dExpbmVzRWRpdCIsInRleHRNYXhMaW5lcyIsInRleHRNYXhDaGFyYWN0ZXJzRGlzcGxheSIsInRleHRFeHBhbmRCZWhhdmlvckRpc3BsYXkiLCJ0ZXh0TWF4TGVuZ3RoIiwiZmllbGRFZGl0U3R5bGUiLCJyYWRpb0J1dHRvbnNIb3Jpem9udGFsTGF5b3V0Iiwic2hvd1RpbWUiLCJzaG93VGltZXpvbmUiLCJzaG93RGF0ZSIsImdldE9iamVjdElkZW50aWZpZXJUZXh0IiwiZmllbGRGb3JtYXRPcHRpb25zIiwicHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoIiwicHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiIsInBhdGhJbk1vZGVsIiwidGFyZ2V0RGlzcGxheU1vZGUiLCJwcm9wZXJ0eURlZmluaXRpb24iLCJpc1Byb3BlcnR5UGF0aEV4cHJlc3Npb24iLCJjb21tb25UZXh0IiwiQ29tbW9uIiwiVGV4dCIsImZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24iLCJyZWxhdGl2ZUxvY2F0aW9uIiwiZ2V0UmVsYXRpdmVQYXRocyIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsImZvcm1hdFJlc3VsdCIsInZhbHVlRm9ybWF0dGVycyIsImZvcm1hdFRvS2VlcFdoaXRlc3BhY2UiLCJnZXRPdmVycmlkZXMiLCJwcm9wcyIsImNvbnRyb2xDb25maWciLCJrZXlzIiwiZm9yRWFjaCIsImNvbmZpZ0tleSIsIm1hbmFnZVF1aWNrVmlld0ZvckRpc3BsYXlTdHlsZSIsImhhc1NlbWFudGljT2JqZWN0cyIsImhhc1F1aWNrVmlldyIsInF1aWNrVmlld1R5cGUiLCJmb3VuZFNlbWFudGljT2JqZWN0cyIsIm1hbmFnZVNlbWFudGljT2JqZWN0c0ZvckN1cnJlbnRVc2VyIiwic2VtYW50aWNPYmplY3QiLCJoYXNSZWFjaGFibGVTdGF0aWNTZW1hbnRpY09iamVjdCIsImR5bmFtaWNTZW1hbnRpY09iamVjdHMiLCJwcm9wZXJ0eU9yTmF2aWdhdGlvblByb3BlcnR5SGFzU2VtYW50aWNPYmplY3QiLCJnZXRQcm9wZXJ0eVdpdGhTZW1hbnRpY09iamVjdCIsImZpZWxkQ29udGFpbmVyVHlwZSIsInByb3BlcnR5UGF0aCIsIm5hbWUiLCJyZWNvbW1lbmRhdGlvblZhbHVlIiwicmVjb21tZW5kYXRpb25EZXNjcmlwdGlvbiIsInBsYWNlaG9sZGVyRXhwIiwiYWRkaXRpb25hbFZhbHVlRm9ybWF0dGVyIiwiZm9ybWF0UGxhY2Vob2xkZXIiLCJkYXRhRmllbGQiLCJkYXRhUG9pbnRUeXBlIiwidGVybSIsIiRUeXBlIiwiZ2V0RGVjaW1hbFBhZGRpbmciLCJtYW5pZmVzdCIsImdldE1hbmlmZXN0RW50cnkiLCJNZWFzdXJlcyIsIklTT0N1cnJlbmN5IiwibWFjcm9zIiwidGFibGUiLCJjdXJyZW5jeSIsImRlY2ltYWxQYWRkaW5nIiwidW5pdE9mTWVhc3VyZSIsImhhc1VuaXRPckN1cnJlbmN5IiwiVW5pdCIsImhhc1ZhbGlkQW5hbHl0aWNhbEN1cnJlbmN5T3JVbml0IiwidGV4dEZyb21WYWx1ZUxpc3QiLCJJc0ltYWdlIiwiSXNJbWFnZVVSTCIsImlzSW1hZ2VVUkwiLCJJbnB1dE1hc2siLCJNYXNrZWQiLCJpc0ZpZWxkR3JvdXBJdGVtIiwic2V0VXBEcmFmdEluZGljYXRvciIsIlRhcmdldCIsImlzVXNlZEluTmF2aWdhdGlvbldpdGhRdWlja1ZpZXdGYWNldHMiLCJpc1NlbWFudGljS2V5Iiwic2VtYW50aWNLZXlTdHlsZSIsInNldFVwT2JqZWN0SWRlbnRpZmllclRpdGxlQW5kVGV4dCIsInNob3dFcnJvckluZGljYXRvciIsImNvbnRleHRMb2NhdGlvbiIsIl90eXBlIiwiZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoIiwic2l0dWF0aW9uc0luZGljYXRvclByb3BlcnR5UGF0aCIsIkNyaXRpY2FsaXR5IiwiaXNDdXJyZW5jeU9yVW5pdEFsaWduZWQiLCJGaWVsZFN0cnVjdHVyZUhlbHBlciIsInZhbHVlQXNTdHJpbmdCaW5kaW5nRXhwcmVzc2lvbiIsImdldFZhbHVlQmluZGluZyIsInVuaXRCaW5kaW5nRXhwcmVzc2lvbiIsImdldEJpbmRpbmdGb3JVbml0T3JDdXJyZW5jeSIsIkNvbW11bmljYXRpb24iLCJJc0VtYWlsQWRkcmVzcyIsIklzUGhvbmVOdW1iZXIiLCJNdWx0aUxpbmVUZXh0IiwiaGFzU2l0dWF0aW9uc0luZGljYXRvciIsIlNpdHVhdGlvbnNJbmRpY2F0b3IiLCJnZXRTaXR1YXRpb25zTmF2aWdhdGlvblByb3BlcnR5IiwidGFyZ2V0RW50aXR5U2V0IiwiRHJhZnRSb290IiwiaGFzRHJhZnRJbmRpY2F0b3IiLCJkcmFmdEluZGljYXRvclZpc2libGUiLCJnZXREcmFmdEluZGljYXRvclZpc2libGVCaW5kaW5nIiwiYWRkRHJhZnRJbmRpY2F0b3IiLCJzZXRFZGl0U3R5bGVQcm9wZXJ0aWVzIiwic2VtYW50aWNTdHlsZSIsImlkZW50aWZpZXJUaXRsZSIsImdldFRpdGxlQmluZGluZ0V4cHJlc3Npb24iLCJnZXRUZXh0QmluZGluZ0V4cHJlc3Npb24iLCJzcGxpdFRpdGxlT25Ud29MaW5lcyIsImlkZW50aWZpZXJUZXh0Iiwib3ZlcnJpZGVQcm9wcyIsImdldERpc3BsYXlNb2RlIiwicmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCIsImlzUmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdEVuYWJsZWQiLCJoYXNFbnRpdHlUZXh0QXJyYW5nZW1lbnQiLCJUZXh0QXJyYW5nZW1lbnQiLCJ2YWx1ZVN0YXRlRXhwIiwicHJvcGVydHlQYXRoSW5Nb2RlbCIsInRleHRQYXRoIiwiZm9ybWF0VmFsdWVTdGF0ZSIsImdldFZpc2libGVFeHByZXNzaW9uIiwiZGlzcGxheVZpc2libGUiLCJtYWNyb0lkIiwiZmlsZVJlbGF0aXZlUHJvcGVydHlQYXRoIiwiZmlsZU5hbWVBbm5vdGF0aW9uIiwiQ29yZSIsIkNvbnRlbnREaXNwb3NpdGlvbiIsIkZpbGVuYW1lIiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCJmaWxlTmFtZURhdGFNb2RlbFBhdGgiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsInBhdGgiLCJmaWxlRmlsZW5hbWVFeHByZXNzaW9uIiwiaW5saW5lRWRpdEVuYWJsZWQiLCJoYXNJbmxpbmVFZGl0IiwidHJhbnNmb3JtUmVjdXJzaXZlbHkiLCJleHByIiwibW9kZWxOYW1lIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGaWVsZFN0cnVjdHVyZUhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVNldCwgUHJvcGVydHksIFByb3BlcnR5UGF0aCwgU2VydmljZU9iamVjdCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUge1xuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRGb3JBbm5vdGF0aW9uLFxuXHREYXRhRmllbGRUeXBlcyxcblx0RGF0YVBvaW50LFxuXHREYXRhUG9pbnRUeXBlVHlwZXNcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMsIFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHR5cGUge1xuXHRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sXG5cdENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLFxuXHRFeHByZXNzaW9uT3JQcmltaXRpdmUsXG5cdFBhdGhJbk1vZGVsRXhwcmVzc2lvblxufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdGFuZCxcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGNvbnN0YW50LFxuXHRlcXVhbCxcblx0Zm9ybWF0UmVzdWx0LFxuXHRmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uLFxuXHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sXG5cdGlmRWxzZSxcblx0bm90LFxuXHRwYXRoSW5Nb2RlbCxcblx0dHJhbnNmb3JtUmVjdXJzaXZlbHlcbn0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnRpZXNPZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvdGVtcGxhdGluZy9CdWlsZGluZ0Jsb2NrVGVtcGxhdGVQcm9jZXNzb3JcIjtcbmltcG9ydCB7IENvbGxhYm9yYXRpb25GaWVsZEdyb3VwUHJlZml4IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NvbGxhYm9yYXRpb24vQ29sbGFib3JhdGlvbkNvbW1vblwiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgaXNEYXRhRmllbGQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9hbm5vdGF0aW9ucy9EYXRhRmllbGRcIjtcbmltcG9ydCAqIGFzIENvbGxhYm9yYXRpb25Gb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL0NvbGxhYm9yYXRpb25Gb3JtYXR0ZXJcIjtcbmltcG9ydCB2YWx1ZUZvcm1hdHRlcnMgZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvVmFsdWVGb3JtYXR0ZXJcIjtcbmltcG9ydCB7IFVJIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuaW1wb3J0IHtcblx0Z2V0UmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucyxcblx0Z2V0UmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9uc1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXRhTW9kZWxGdW5jdGlvblwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRUaXRsZUJpbmRpbmdFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVGl0bGVIZWxwZXJcIjtcbmltcG9ydCB7IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uLCBpc1Byb3BlcnR5LCBpc1Byb3BlcnR5UGF0aEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQge1xuXHRlbmhhbmNlRGF0YU1vZGVsUGF0aCxcblx0Z2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCxcblx0Z2V0UmVsYXRpdmVQYXRocyxcblx0Z2V0VGFyZ2V0T2JqZWN0UGF0aFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQge1xuXHRnZXRBc3NvY2lhdGVkRXh0ZXJuYWxJZFByb3BlcnR5LFxuXHRnZXRBc3NvY2lhdGVkRXh0ZXJuYWxJZFByb3BlcnR5UGF0aCxcblx0aXNJbWFnZVVSTCxcblx0aXNTZW1hbnRpY0tleVxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0UHJvcGVydHlXaXRoU2VtYW50aWNPYmplY3QsIG1hbmFnZVNlbWFudGljT2JqZWN0c0ZvckN1cnJlbnRVc2VyIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvU2VtYW50aWNPYmplY3RIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgRGlzcGxheU1vZGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCAqIGFzIFVJRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCB0eXBlIHsgSW5wdXRNYXNrRm9ybWF0T3B0aW9ucyB9IGZyb20gXCJzYXAvZmUvY29yZS90eXBlL0lucHV0TWFza1wiO1xuaW1wb3J0ICogYXMgRmllbGRUZW1wbGF0aW5nIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkVGVtcGxhdGluZ1wiO1xuaW1wb3J0IHtcblx0Z2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclZhbHVlLFxuXHRnZXREcmFmdEluZGljYXRvclZpc2libGVCaW5kaW5nLFxuXHRnZXRUZXh0QmluZGluZ0V4cHJlc3Npb24sXG5cdGdldFZhbHVlQmluZGluZyxcblx0Z2V0VmlzaWJsZUV4cHJlc3Npb24sXG5cdGhhc1Byb3BlcnR5SW5zZXJ0UmVzdHJpY3Rpb25zLFxuXHRpc1JldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3RFbmFibGVkLFxuXHRpc1VzZWRJbk5hdmlnYXRpb25XaXRoUXVpY2tWaWV3RmFjZXRzLFxuXHRzZXRFZGl0U3R5bGVQcm9wZXJ0aWVzXG59IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkVGVtcGxhdGluZ1wiO1xuaW1wb3J0IGFkZGl0aW9uYWxWYWx1ZUZvcm1hdHRlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC92YWx1ZWhlbHAvQWRkaXRpb25hbFZhbHVlRm9ybWF0dGVyXCI7XG5pbXBvcnQgU2l0dWF0aW9uc0luZGljYXRvciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9zaXR1YXRpb25zL1NpdHVhdGlvbnNJbmRpY2F0b3JcIjtcbmltcG9ydCB0eXBlIHsgQ2hlY2tCb3gkU2VsZWN0RXZlbnQgfSBmcm9tIFwic2FwL20vQ2hlY2tCb3hcIjtcbmltcG9ydCB0eXBlIHsgSW5wdXRCYXNlJENoYW5nZUV2ZW50IH0gZnJvbSBcInNhcC9tL0lucHV0QmFzZVwiO1xuaW1wb3J0IHR5cGUgeyBSYXRpbmdJbmRpY2F0b3IkQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL20vUmF0aW5nSW5kaWNhdG9yXCI7XG5pbXBvcnQgdHlwZSB7IEZpZWxkJENoYW5nZUV2ZW50IH0gZnJvbSBcInNhcC91aS9tZGMvRmllbGRcIjtcbmltcG9ydCBGaWVsZEVkaXRNb2RlIGZyb20gXCJzYXAvdWkvbWRjL2VudW1zL0ZpZWxkRWRpdE1vZGVcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBFdmVudEhhbmRsZXIgfSBmcm9tIFwidHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbFR5cGUgfSBmcm9tIFwidHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5pbXBvcnQgdHlwZSBGaWVsZCBmcm9tIFwiLi4vLi4vRmllbGRcIjtcbmltcG9ydCB0eXBlIEZpZWxkRm9ybWF0T3B0aW9ucyBmcm9tIFwiLi4vLi4vZmllbGQvRmllbGRGb3JtYXRPcHRpb25zXCI7XG5pbXBvcnQgRmllbGRIZWxwZXIgZnJvbSBcIi4uLy4uL2ZpZWxkL0ZpZWxkSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IERpc3BsYXlTdHlsZSBhcyBEaXNwbGF5U3R5bGVUeXBlLCBFZGl0U3R5bGUgYXMgRWRpdFN0eWxlVHlwZSwgRmllbGRQcm9wZXJ0aWVzIH0gZnJvbSBcIi4vRmllbGRTdHlsZXNcIjtcblxuZXhwb3J0IHR5cGUgSW5wdXRGaWVsZEJsb2NrUHJvcGVydGllcyA9IE9taXQ8UHJvcGVydGllc09mPEZpZWxkPiwgXCJyZWFkT25seVwiIHwgXCJzZW1hbnRpY09iamVjdFwiPiAmIHtcblx0aXNQdWJsaWNGaWVsZD86IGJvb2xlYW47IC8vXG5cdC8vYWRkIGV2ZW50cyBmcm9tIEZpZWxkIC0gJ1Byb3BlcnRpZXNPZicgZG9lcyBub3QgaW5jbHVkZSB0aGVtXG5cdGNoYW5nZT86IEV2ZW50SGFuZGxlcjtcblx0bGl2ZUNoYW5nZT86IEV2ZW50SGFuZGxlcjtcblx0b25MaXZlQ2hhbmdlPzogc3RyaW5nO1xuXHRyZWFkT25seT86IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcblx0c2VtYW50aWNPYmplY3Q/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcbn07XG5leHBvcnQgdHlwZSBGaWVsZEJsb2NrUHJvcGVydGllcyA9IHtcblx0X2NvbnRyb2xDb25maWd1cmF0aW9uOiBUZW1wbGF0ZVByb2Nlc3NvclNldHRpbmdzO1xuXHRfc2V0dGluZ3M6IFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3M7XG5cdGlzRHluYW1pY0luc3RhbnRpYXRpb24/OiBib29sZWFuO1xuXHRjaGFuZ2U6IHVuZGVmaW5lZCB8IEV2ZW50SGFuZGxlcjxDaGVja0JveCRTZWxlY3RFdmVudCB8IElucHV0QmFzZSRDaGFuZ2VFdmVudCB8IEZpZWxkJENoYW5nZUV2ZW50IHwgUmF0aW5nSW5kaWNhdG9yJENoYW5nZUV2ZW50Pjtcblx0bWV0YVBhdGg6IENvbnRleHQ7XG5cdGNvbnRleHRQYXRoOiBDb250ZXh0O1xuXHRpc1B1YmxpY0ZpZWxkOiBib29sZWFuO1xuXHR2aXNpYmxlPzogYm9vbGVhbiB8IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRsaXZlQ2hhbmdlOiBFdmVudEhhbmRsZXI7XG5cdG9uTGl2ZUNoYW5nZT86IHN0cmluZyB8IEV2ZW50SGFuZGxlcjtcblx0Ly8tLS0tLVxuXHRmb3JtYXRPcHRpb25zOiBGaWVsZEZvcm1hdE9wdGlvbnM7XG5cdHByb3BlcnR5OiBQcm9wZXJ0eTtcblx0ZGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT47XG5cdHZhbHVlQXNTdHJpbmdCaW5kaW5nRXhwcmVzc2lvbj86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHR1bml0QmluZGluZ0V4cHJlc3Npb24/OiBzdHJpbmc7XG5cdGRpc3BsYXlWaXNpYmxlPzogc3RyaW5nIHwgYm9vbGVhbjtcblx0aGFzVmFsaWRBbmFseXRpY2FsQ3VycmVuY3lPclVuaXQ/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0Y29udmVydGVkTWV0YVBhdGg6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXM7XG5cdGNsYXNzPzogc3RyaW5nO1xuXHRhcmlhTGFiZWxsZWRCeT86IHN0cmluZ1tdO1xuXHRoYXNVbml0T3JDdXJyZW5jeT86IGJvb2xlYW47XG5cdHRleHQ/OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB8IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRsYWJlbD86IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGVtcHR5SW5kaWNhdG9yTW9kZT86IHN0cmluZztcblx0ZWRpdGFibGVFeHByZXNzaW9uOiBzdHJpbmcgfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0ZmllbGRHcm91cElkcz86IHN0cmluZ1tdO1xuXHRkaXNwbGF5U3R5bGVJZD86IHN0cmluZztcblx0dGV4dEZyb21WYWx1ZUxpc3Q/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0aGFzUXVpY2tWaWV3OiBib29sZWFuO1xuXHRpZGVudGlmaWVyVGl0bGU/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0aWRlbnRpZmllclRleHQ/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0aGFzU2l0dWF0aW9uc0luZGljYXRvcj86IGJvb2xlYW47XG5cdHNpdHVhdGlvbnNJbmRpY2F0b3JQcm9wZXJ0eVBhdGg6IHN0cmluZztcblx0c2hvd0Vycm9ySW5kaWNhdG9yOiBib29sZWFuO1xuXHRkeW5hbWljU2VtYW50aWNPYmplY3RzPzogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz5bXTtcblx0ZGF0YVNvdXJjZVBhdGg/OiBzdHJpbmc7XG5cdGVkaXRTdHlsZUlkPzogc3RyaW5nO1xuXHRlbmFibGVkRXhwcmVzc2lvbjogc3RyaW5nIHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHJlcXVpcmVkRXhwcmVzc2lvbj86IHN0cmluZztcblx0ZWRpdE1vZGVBc09iamVjdDogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPjtcblx0Y29tcHV0ZWRFZGl0TW9kZTogRmllbGRFZGl0TW9kZSB8IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHR2YWx1ZUJpbmRpbmdFeHByZXNzaW9uPzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHNob3dUaW1lem9uZT86IGJvb2xlYW47XG5cdG1pbkRhdGVFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4gfCB1bmRlZmluZWQgfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0bWF4RGF0ZUV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPiB8IHVuZGVmaW5lZCB8IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRlZGl0U3R5bGVQbGFjZWhvbGRlcj86IHN0cmluZztcblx0c3RhdGljRGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cdHZhbHVlU3RhdGU/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0ZmlsZUZpbGVuYW1lRXhwcmVzc2lvbjogc3RyaW5nO1xuXHRmaWxlUmVsYXRpdmVQcm9wZXJ0eVBhdGg6IHN0cmluZztcblx0dGV4dEJpbmRpbmdFeHByZXNzaW9uPzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHJhdGluZ0luZGljYXRvclRvb2x0aXA/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0cmF0aW5nSW5kaWNhdG9yVGFyZ2V0VmFsdWU/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0bWFzaz86IElucHV0TWFza0Zvcm1hdE9wdGlvbnMgfCBudWxsO1xuXHRlZGl0U3R5bGU/OiBFZGl0U3R5bGVUeXBlIHwgbnVsbDtcblx0X2FwaUlkPzogc3RyaW5nO1xuXHRlbnRpdHlUeXBlPzogQ29udGV4dDtcblx0b2RhdGFNZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsO1xuXHRwcm9wZXJ0eUZvckZpZWxkQ29udHJvbDogVUlGb3JtYXR0ZXJzLlByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pjtcblx0ZGVzY3JpcHRpb25CaW5kaW5nRXhwcmVzc2lvbj86IHN0cmluZztcblx0cXVpY2tWaWV3VHlwZT86IFwiU2VtYW50aWNMaW5rc1wiIHwgXCJGYWNldHNcIiB8IFwiRmFjZXRzQW5kU2VtYW50aWNMaW5rc1wiO1xuXHRkaXNwbGF5U3R5bGU/OiBEaXNwbGF5U3R5bGVUeXBlO1xuXHR1bml0RWRpdGFibGU/OiBzdHJpbmc7XG5cdHN0YXRpY1VuaXQ/OiBzdHJpbmc7XG5cdHZhbHVlSW5wdXRXaWR0aD86IHN0cmluZztcblx0dmFsdWVJbnB1dEZpZWxkV2lkdGg/OiBzdHJpbmc7XG5cdHVuaXRJbnB1dFZpc2libGU/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0ZHJhZnRJbmRpY2F0b3JWaXNpYmxlPzogc3RyaW5nO1xuXHRoYXNQcm9wZXJ0eUluc2VydFJlc3RyaWN0aW9ucz86IGJvb2xlYW4gfCBFeHByZXNzaW9uT3JQcmltaXRpdmU8Ym9vbGVhbj47XG5cdGFkZERyYWZ0SW5kaWNhdG9yOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXHRjb252ZXJ0ZWRNZXRhUGF0aEV4dGVybmFsSUQ/OiBQcm9wZXJ0eTtcblx0ZGF0YU1vZGVsUGF0aEV4dGVybmFsSUQ/OiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5IHwgUHJvcGVydHlQYXRoPjtcblx0dmFsdWVIZWxwTWV0YVBhdGg/OiBDb250ZXh0O1xuXHRpZDogc3RyaW5nO1xuXHR2YWx1ZUhlbHBJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRtZXRhUGF0aENvbnRleHQ6IENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdGNvbnRleHRQYXRoQ29udGV4dDogQ29udGV4dCB8IHVuZGVmaW5lZDtcblx0ZmlsZVVwbG9hZGVyVmlzaWJsZT86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgYm9vbGVhbjtcblx0ZXZlbnRIYW5kbGVyczoge1xuXHRcdGNoYW5nZTogRXZlbnRIYW5kbGVyPENoZWNrQm94JFNlbGVjdEV2ZW50IHwgSW5wdXRCYXNlJENoYW5nZUV2ZW50IHwgRmllbGQkQ2hhbmdlRXZlbnQgfCBSYXRpbmdJbmRpY2F0b3IkQ2hhbmdlRXZlbnQ+O1xuXHRcdGxpdmVDaGFuZ2U6IEV2ZW50SGFuZGxlcjtcblx0XHR2YWxpZGF0ZUZpZWxkR3JvdXA6IEV2ZW50SGFuZGxlcjtcblx0XHRoYW5kbGVUeXBlTWlzc21hdGNoOiBFdmVudEhhbmRsZXI7XG5cdFx0aGFuZGxlRmlsZVNpemVFeGNlZWQ6IEV2ZW50SGFuZGxlcjtcblx0XHRoYW5kbGVVcGxvYWRDb21wbGV0ZTogRXZlbnRIYW5kbGVyO1xuXHRcdHVwbG9hZFN0cmVhbTogRXZlbnRIYW5kbGVyO1xuXHRcdHJlbW92ZVN0cmVhbTogRXZlbnRIYW5kbGVyO1xuXHRcdGhhbmRsZU9wZW5VcGxvYWRlcjogRXZlbnRIYW5kbGVyO1xuXHRcdGhhbmRsZUNsb3NlVXBsb2FkZXI6IEV2ZW50SGFuZGxlcjtcblx0XHRvcGVuRXh0ZXJuYWxMaW5rOiBFdmVudEhhbmRsZXI7XG5cdFx0b25Gb2N1c091dDogRXZlbnRIYW5kbGVyO1xuXHRcdGxpbmtQcmVzc2VkOiBFdmVudEhhbmRsZXI7XG5cdFx0ZGlzcGxheUFnZ3JlZ2F0aW9uRGV0YWlsczogRXZlbnRIYW5kbGVyO1xuXHRcdG9uRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoOiBFdmVudEhhbmRsZXI7XG5cdFx0b25EYXRhRmllbGRBY3Rpb25CdXR0b246IEV2ZW50SGFuZGxlcjtcblx0XHRvbkRhdGFGaWVsZFdpdGhJQk46IEV2ZW50SGFuZGxlcjtcblx0fTtcbn0gJiBPbWl0PEZpZWxkLCBcIm1ldGFQYXRoXCIgfCBcImNvbnRleHRQYXRoXCIgfCBcImNoYW5nZVwiIHwgXCJ2aXNpYmxlXCI+O1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0VXBGaWVsZChcblx0ZmllbGQ6IElucHV0RmllbGRCbG9ja1Byb3BlcnRpZXMsXG5cdGNvbnRyb2xDb25maWd1cmF0aW9uOiBUZW1wbGF0ZVByb2Nlc3NvclNldHRpbmdzLFxuXHR2aWV3RGF0YU1vZGVsOiBKU09OTW9kZWwsXG5cdGludGVybmFsTW9kZWw6IEpTT05Nb2RlbCxcblx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdGlzUmVhZE9ubHlJbml0aWFsPzogYm9vbGVhbixcblx0bWV0YVBhdGg/OiBDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHRjb250ZXh0UGF0aD86IENvbnRleHQgfCB1bmRlZmluZWRcbik6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzIHtcblx0Y29uc3QgcmVzdWx0RmllbGQgPSB7IC4uLmZpZWxkIH0gYXMgdW5rbm93biBhcyBGaWVsZEJsb2NrUHJvcGVydGllcztcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHJlc3VsdEZpZWxkLCBcInZhbHVlXCIsIHtcblx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdHJldHVybiBmaWVsZC52YWx1ZTtcblx0XHR9XG5cdH0pO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkocmVzdWx0RmllbGQsIFwiZGVzY3JpcHRpb25cIiwge1xuXHRcdGdldDogKCkgPT4ge1xuXHRcdFx0cmV0dXJuIGZpZWxkLmRlc2NyaXB0aW9uO1xuXHRcdH1cblx0fSk7XG5cblx0cmVzdWx0RmllbGQuY2hhbmdlID0gZmllbGQuY2hhbmdlO1xuXHRyZXN1bHRGaWVsZC5tZXRhUGF0aCA9IChtZXRhUGF0aCA/IG1ldGFQYXRoIDogZmllbGQubWV0YVBhdGgpIGFzIENvbnRleHQ7XG5cdHJlc3VsdEZpZWxkLmNvbnRleHRQYXRoID0gKGNvbnRleHRQYXRoID8gY29udGV4dFBhdGggOiBmaWVsZC5jb250ZXh0UGF0aCkgYXMgQ29udGV4dDtcblx0cmVzdWx0RmllbGQudmlzaWJsZSA9IGZpZWxkLnZpc2libGU7XG5cblx0Ly90aGlzIGN1cnJlbnRseSB3b3JrcyBvbmx5IGZvciB0aGUgZmllbGRcblx0aWYgKCFyZXN1bHRGaWVsZC52aElkUHJlZml4KSB7XG5cdFx0cmVzdWx0RmllbGQudmhJZFByZWZpeCA9IFwiRmllbGRWYWx1ZUhlbHBcIjtcblx0XHRyZXN1bHRGaWVsZC5fZmxleElkID0gZmllbGQuaWQ7XG5cdFx0aWYgKCFyZXN1bHRGaWVsZC5pZFByZWZpeCkge1xuXHRcdFx0cmVzdWx0RmllbGQuaWRQcmVmaXggPSBmaWVsZC5pZDtcblx0XHR9XG5cdH1cblxuXHRyZXN1bHRGaWVsZC5mb3JtYXRPcHRpb25zID8/PSB7fSBhcyBGaWVsZEZvcm1hdE9wdGlvbnM7XG5cdHJlc3VsdEZpZWxkLmZvcm1hdE9wdGlvbnMgPSBnZXRGb3JtYXRPcHRpb25zKHJlc3VsdEZpZWxkKTtcblx0cmVzdWx0RmllbGQuZm9ybWF0T3B0aW9ucy5zaG93T25seVVuaXREZWNpbWFscyA9XG5cdFx0dmlld0RhdGFNb2RlbD8uZ2V0UHJvcGVydHkoXCIvc2FwRmVNYW5pZmVzdENvbmZpZ3VyYXRpb24vYXBwL3Nob3dPbmx5VW5pdERlY2ltYWxzXCIpID09PSB0cnVlO1xuXHRyZXN1bHRGaWVsZC5mb3JtYXRPcHRpb25zLnByZXNlcnZlRGVjaW1hbHNGb3JDdXJyZW5jeSA9XG5cdFx0dmlld0RhdGFNb2RlbD8uZ2V0UHJvcGVydHkoXCIvc2FwRmVNYW5pZmVzdENvbmZpZ3VyYXRpb24vYXBwL3ByZXNlcnZlRGVjaW1hbHNGb3JDdXJyZW5jeVwiKSA9PT0gdHJ1ZTtcblxuXHRyZXN1bHRGaWVsZC52YWx1ZUhlbHBNZXRhUGF0aCA9IG1ldGFQYXRoID8gbWV0YVBhdGggOiByZXN1bHRGaWVsZC5tZXRhUGF0aDtcblx0Y29tcHV0ZUNvbW1vblByb3BlcnRpZXMocmVzdWx0RmllbGQsIHJlc3VsdEZpZWxkLnZhbHVlSGVscE1ldGFQYXRoPy5nZXRNb2RlbCgpKTtcblx0cmVzdWx0RmllbGQuY29udmVydGVkTWV0YVBhdGggPSBzZXRVcERhdGFQb2ludFR5cGUocmVzdWx0RmllbGQuY29udmVydGVkTWV0YVBhdGgpO1xuXHRzZXRVcFZpc2libGVQcm9wZXJ0aWVzKHJlc3VsdEZpZWxkKTtcblx0Y29tcHV0ZUlEcyhyZXN1bHRGaWVsZCk7XG5cdHJlc3VsdEZpZWxkLmRhdGFTb3VyY2VQYXRoID0gZ2V0VGFyZ2V0T2JqZWN0UGF0aChyZXN1bHRGaWVsZC5kYXRhTW9kZWxQYXRoKTtcblx0cmVzdWx0RmllbGQubGFiZWwgPSBGaWVsZEhlbHBlci5jb21wdXRlTGFiZWxUZXh0KGZpZWxkIGFzIHVua25vd24gYXMgTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRUeXBlcz4sIHtcblx0XHRjb250ZXh0OiByZXN1bHRGaWVsZC5tZXRhUGF0aFxuXHR9KTtcblxuXHQvKiBFWFRFUk5BTElEICovXG5cdGNvbXB1dGVFeHRlcm5hbElEKHJlc3VsdEZpZWxkKTtcblx0cmVzdWx0RmllbGQuZW50aXR5VHlwZSA9IHJlc3VsdEZpZWxkLm9kYXRhTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFxuXHRcdGAvJHtyZXN1bHRGaWVsZC5kYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lfWBcblx0KTtcblx0aWYgKHJlc3VsdEZpZWxkLmZvcm1hdE9wdGlvbnM/LmZvcklubGluZUNyZWF0aW9uUm93cyA9PT0gdHJ1ZSkge1xuXHRcdHJlc3VsdEZpZWxkLmhhc1Byb3BlcnR5SW5zZXJ0UmVzdHJpY3Rpb25zID0gaGFzUHJvcGVydHlJbnNlcnRSZXN0cmljdGlvbnMocmVzdWx0RmllbGQuZGF0YU1vZGVsUGF0aCk7XG5cdH1cblx0Y29tcHV0ZUVkaXRNb2RlKHJlc3VsdEZpZWxkKTtcblx0Y29tcHV0ZUNvbGxhYm9yYXRpb25Qcm9wZXJ0aWVzKHJlc3VsdEZpZWxkKTtcblx0Y29tcHV0ZUVkaXRhYmxlRXhwcmVzc2lvbnMocmVzdWx0RmllbGQpO1xuXHRyZXN1bHRGaWVsZC5mb3JtYXRPcHRpb25zID0gcmVzdWx0RmllbGQuZm9ybWF0T3B0aW9ucyA/IHJlc3VsdEZpZWxkLmZvcm1hdE9wdGlvbnMgOiAoe30gYXMgRmllbGRGb3JtYXRPcHRpb25zKTtcblx0c2V0VXBGb3JtYXRPcHRpb25zKFxuXHRcdHJlc3VsdEZpZWxkLFxuXHRcdChyZXN1bHRGaWVsZC5kYXRhTW9kZWxQYXRoRXh0ZXJuYWxJRCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5PikgfHwgcmVzdWx0RmllbGQuZGF0YU1vZGVsUGF0aCxcblx0XHRjb250cm9sQ29uZmlndXJhdGlvbixcblx0XHR2aWV3RGF0YU1vZGVsXG5cdCk7XG5cdHNldFVwRGlzcGxheVN0eWxlKHJlc3VsdEZpZWxkLCByZXN1bHRGaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aCwgcmVzdWx0RmllbGQuZGF0YU1vZGVsUGF0aCwgaW50ZXJuYWxNb2RlbCwgYXBwQ29tcG9uZW50KTtcblx0aWYgKHJlc3VsdEZpZWxkLmVkaXRNb2RlICE9PSBcIkRpc3BsYXlcIikge1xuXHRcdHNldFVwRWRpdFN0eWxlKHJlc3VsdEZpZWxkLCBhcHBDb21wb25lbnQpO1xuXHR9XG5cblx0cmVzdWx0RmllbGQudmFsdWVTdGF0ZSA9IHNldFVwVmFsdWVTdGF0ZShyZXN1bHRGaWVsZCk7XG5cdGlmIChyZXN1bHRGaWVsZC5lZGl0U3R5bGUgPT09IFwiSW5wdXRXaXRoVmFsdWVIZWxwXCIpIHtcblx0XHRyZXN1bHRGaWVsZC5lZGl0U3R5bGVQbGFjZWhvbGRlciA9IHNldElucHV0V2l0aFZhbHVlaGVscFBsYWNlaG9sZGVyKHJlc3VsdEZpZWxkKTtcblx0fVxuXG5cdGNvbXB1dGVGaWxlVXBsb2FkZXJQcm9wZXJ0aWVzKHJlc3VsdEZpZWxkKTtcblxuXHRjb21wdXRlSW5saW5lRWRpdFByb3BlcnRpZXMocmVzdWx0RmllbGQsIHZpZXdEYXRhTW9kZWwpO1xuXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gY29tcHV0ZSBiaW5kaW5ncy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0Y29uc3QgYURpc3BsYXlTdHlsZXNXaXRob3V0UHJvcFRleHQgPSBbXCJBdmF0YXJcIiwgXCJBbW91bnRXaXRoQ3VycmVuY3lcIl07XG5cdGlmIChcblx0XHRyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUgJiZcblx0XHQhYURpc3BsYXlTdHlsZXNXaXRob3V0UHJvcFRleHQuaW5jbHVkZXMocmVzdWx0RmllbGQuZGlzcGxheVN0eWxlKSAmJlxuXHRcdHJlc3VsdEZpZWxkLmRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0XG5cdCkge1xuXHRcdHJlc3VsdEZpZWxkLnRleHQgPVxuXHRcdFx0cmVzdWx0RmllbGQudGV4dCA/P1xuXHRcdFx0cmVzdWx0RmllbGQudmFsdWUgPz9cblx0XHRcdEZpZWxkVGVtcGxhdGluZy5nZXRUZXh0QmluZGluZyhcblx0XHRcdFx0KHJlc3VsdEZpZWxkLmRhdGFNb2RlbFBhdGhFeHRlcm5hbElEIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+KSB8fCByZXN1bHRGaWVsZC5kYXRhTW9kZWxQYXRoLFxuXHRcdFx0XHRyZXN1bHRGaWVsZC5mb3JtYXRPcHRpb25zXG5cdFx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdHJlc3VsdEZpZWxkLnRleHQgPSBcIlwiO1xuXHR9XG5cblx0aWYgKHJlc3VsdEZpZWxkLmZvcm1hdE9wdGlvbnMuc2hvd0VtcHR5SW5kaWNhdG9yKSB7XG5cdFx0cmVzdWx0RmllbGQuZW1wdHlJbmRpY2F0b3JNb2RlID0gU3RyaW5nKHJlc3VsdEZpZWxkLmZvcm1hdE9wdGlvbnMuc2hvd0VtcHR5SW5kaWNhdG9yKSA9PT0gXCJ0cnVlXCIgPyBcIk9uXCIgOiB1bmRlZmluZWQ7XG5cdH0gZWxzZSB7XG5cdFx0cmVzdWx0RmllbGQuZW1wdHlJbmRpY2F0b3JNb2RlID0gdW5kZWZpbmVkO1xuXHR9XG5cblx0Ly8gSWYgdGhlIHRhcmdldCBpcyBhIHByb3BlcnR5IHdpdGggYSBEYXRhRmllbGREZWZhdWx0LCB1c2UgdGhpcyBhcyBkYXRhIGZpZWxkXG5cdGlmIChpc1Byb3BlcnR5KHJlc3VsdEZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoKSAmJiByZXN1bHRGaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aC5hbm5vdGF0aW9ucz8uVUk/LkRhdGFGaWVsZERlZmF1bHQgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJlc3VsdEZpZWxkLm1ldGFQYXRoID0gcmVzdWx0RmllbGQub2RhdGFNZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXG5cdFx0XHRgQCR7VUlBbm5vdGF0aW9uVGVybXMuRGF0YUZpZWxkRGVmYXVsdH1gLFxuXHRcdFx0bWV0YVBhdGggPyBtZXRhUGF0aCA6IHJlc3VsdEZpZWxkLm1ldGFQYXRoXG5cdFx0KTtcblx0fVxuXG5cdGlmICghaXNSZWFkT25seUluaXRpYWwpIHtcblx0XHRyZXN1bHRGaWVsZC5jb21wdXRlZEVkaXRNb2RlID0gY29tcGlsZUV4cHJlc3Npb24oaWZFbHNlKGVxdWFsKHJlc3VsdEZpZWxkLnJlYWRPbmx5LCB0cnVlKSwgXCJEaXNwbGF5XCIsIFwiRWRpdGFibGVcIikpO1xuXHR9XG5cblx0cmVzdWx0RmllbGQuZXZlbnRIYW5kbGVycyA9IHtcblx0XHRjaGFuZ2U6ICgpOiB2b2lkID0+IHt9LFxuXHRcdGxpdmVDaGFuZ2U6ICgpOiB2b2lkID0+IHt9LFxuXHRcdHZhbGlkYXRlRmllbGRHcm91cDogKCk6IHZvaWQgPT4ge30sXG5cdFx0aGFuZGxlVHlwZU1pc3NtYXRjaDogKCk6IHZvaWQgPT4ge30sXG5cdFx0aGFuZGxlRmlsZVNpemVFeGNlZWQ6ICgpOiB2b2lkID0+IHt9LFxuXHRcdGhhbmRsZVVwbG9hZENvbXBsZXRlOiAoKTogdm9pZCA9PiB7fSxcblx0XHR1cGxvYWRTdHJlYW06ICgpOiB2b2lkID0+IHt9LFxuXHRcdHJlbW92ZVN0cmVhbTogKCk6IHZvaWQgPT4ge30sXG5cdFx0aGFuZGxlT3BlblVwbG9hZGVyOiAoKTogdm9pZCA9PiB7fSxcblx0XHRoYW5kbGVDbG9zZVVwbG9hZGVyOiAoKTogdm9pZCA9PiB7fSxcblx0XHRvcGVuRXh0ZXJuYWxMaW5rOiAoKTogdm9pZCA9PiB7fSxcblx0XHRvbkZvY3VzT3V0OiAoKTogdm9pZCA9PiB7fSxcblx0XHRsaW5rUHJlc3NlZDogKCk6IHZvaWQgPT4ge30sXG5cdFx0ZGlzcGxheUFnZ3JlZ2F0aW9uRGV0YWlsczogKCk6IHZvaWQgPT4ge30sXG5cdFx0b25EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6ICgpOiB2b2lkID0+IHt9LFxuXHRcdG9uRGF0YUZpZWxkQWN0aW9uQnV0dG9uOiAoKTogdm9pZCA9PiB7fSxcblx0XHRvbkRhdGFGaWVsZFdpdGhJQk46ICgpOiB2b2lkID0+IHt9XG5cdH07XG5cblx0cmV0dXJuIHJlc3VsdEZpZWxkO1xufVxuXG4vKipcbiAqIFRoaXMgaGVscGVyIGNvbXB1dGVzIHRoZSBwcm9wZXJ0aWVzIHRoYXQgYXJlIG5lZWRlZCBmb3IgdGhlIGNvbGxhYm9yYXRpb24gYXZhdGFyLlxuICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZUNvbGxhYm9yYXRpb25Qcm9wZXJ0aWVzKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IHZvaWQge1xuXHRjb25zdCBjb21wdXRlZEVkaXRhYmxlRXhwcmVzc2lvbiA9IFVJRm9ybWF0dGVycy5nZXRFZGl0YWJsZUV4cHJlc3Npb25Bc09iamVjdChcblx0XHRmaWVsZC5wcm9wZXJ0eUZvckZpZWxkQ29udHJvbCxcblx0XHRmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aCxcblx0XHRmaWVsZC5kYXRhTW9kZWxQYXRoXG5cdCk7XG5cdGlmIChNb2RlbEhlbHBlci5pc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZChmaWVsZC5vZGF0YU1ldGFNb2RlbCkgJiYgZmllbGQuZWRpdE1vZGUgIT09IEZpZWxkRWRpdE1vZGUuRGlzcGxheSkge1xuXHRcdC8vIEV4cHJlc3Npb25zIG5lZWRlZCBmb3IgQ29sbGFib3JhdGlvbiBWaXN1YWxpemF0aW9uXG5cdFx0Y29uc3QgY29sbGFib3JhdGlvbkV4cHJlc3Npb24gPSBVSUZvcm1hdHRlcnMuZ2V0Q29sbGFib3JhdGlvbkV4cHJlc3Npb24oXG5cdFx0XHRmaWVsZC5kYXRhTW9kZWxQYXRoLFxuXHRcdFx0Q29sbGFib3JhdGlvbkZvcm1hdHRlcnMuaGFzQ29sbGFib3JhdGlvbkFjdGl2aXR5XG5cdFx0KTtcblx0XHRjb25zdCBlZGl0YWJsZUV4cHJlc3Npb24gPSBjb21waWxlRXhwcmVzc2lvbihhbmQoY29tcHV0ZWRFZGl0YWJsZUV4cHJlc3Npb24sIG5vdChjb2xsYWJvcmF0aW9uRXhwcmVzc2lvbikpKTtcblxuXHRcdGNvbnN0IGVkaXRNb2RlID0gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdGNvbGxhYm9yYXRpb25FeHByZXNzaW9uLFxuXHRcdFx0XHRjb25zdGFudChcIlJlYWRPbmx5XCIpLFxuXHRcdFx0XHRpZkVsc2UoYW5kKFVJLklzSW5hY3RpdmUsICEhZmllbGQuaGFzUHJvcGVydHlJbnNlcnRSZXN0cmljdGlvbnMpLCBcIkRpc3BsYXlcIiwgZmllbGQuZWRpdE1vZGVBc09iamVjdClcblx0XHRcdClcblx0XHQpO1xuXHRcdGZpZWxkLmNvbGxhYm9yYXRpb25FbmFibGVkID0gdHJ1ZTtcblx0XHRmaWVsZC5lZGl0YWJsZUV4cHJlc3Npb24gPSBlZGl0YWJsZUV4cHJlc3Npb247XG5cdFx0ZmllbGQuY29tcHV0ZWRFZGl0TW9kZSA9IGVkaXRNb2RlO1xuXHR9IGVsc2Uge1xuXHRcdGZpZWxkLmVkaXRhYmxlRXhwcmVzc2lvbiA9IGNvbXBpbGVFeHByZXNzaW9uKGNvbXB1dGVkRWRpdGFibGVFeHByZXNzaW9uKTtcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgaGVscGVyIHNldHMgdGhlIGNvbW1vbiBwcm9wZXJ0aWVzIGNvbnZlcnRlZE1ldGFQYXRoLCBkYXRhTW9kZWxQYXRoXG4gKiBhbmQgcHJvcGVydHkgdGhhdCBjYW4gYmUgcmV1c2VkIGluIHRoZSBpbmRpdmlkdWFsIHRlbXBsYXRlcyBpZiByZXF1aXJlZC5cbiAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2VcbiAqIEBwYXJhbSBtZXRhTW9kZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVDb21tb25Qcm9wZXJ0aWVzKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcywgbWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCk6IHZvaWQge1xuXHRmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aCA9IE1ldGFNb2RlbENvbnZlcnRlci5jb252ZXJ0TWV0YU1vZGVsQ29udGV4dChmaWVsZC5tZXRhUGF0aENvbnRleHQgPyBmaWVsZC5tZXRhUGF0aENvbnRleHQgOiBmaWVsZC5tZXRhUGF0aCkgYXNcblx0XHR8IERhdGFGaWVsZEFic3RyYWN0VHlwZXNcblx0XHR8IERhdGFQb2ludFR5cGVUeXBlcztcblxuXHRsZXQgZGF0YU1vZGVsUGF0aCA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcyB8IFByb3BlcnR5Pihcblx0XHRmaWVsZC5tZXRhUGF0aENvbnRleHQgPyBmaWVsZC5tZXRhUGF0aENvbnRleHQgOiBmaWVsZC5tZXRhUGF0aCxcblx0XHRmaWVsZC5jb250ZXh0UGF0aFxuXHQpO1xuXHRkYXRhTW9kZWxQYXRoID1cblx0XHRnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yVmFsdWUoZGF0YU1vZGVsUGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXM+KSB8fCBkYXRhTW9kZWxQYXRoO1xuXHRmaWVsZC5kYXRhTW9kZWxQYXRoID0gZGF0YU1vZGVsUGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pjtcblx0ZmllbGQucHJvcGVydHkgPSBkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCBhcyBQcm9wZXJ0eTtcblx0ZmllbGQub2RhdGFNZXRhTW9kZWwgPSBtZXRhTW9kZWw7XG5cdGZpZWxkLnByb3BlcnR5Rm9yRmllbGRDb250cm9sID0gKGRhdGFNb2RlbFBhdGg/LnRhcmdldE9iamVjdCBhcyB1bmtub3duIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWVcblx0XHQ/IChkYXRhTW9kZWxQYXRoPy50YXJnZXRPYmplY3QgYXMgdW5rbm93biBhcyBEYXRhRmllbGRUeXBlcykuVmFsdWVcblx0XHQ6IGRhdGFNb2RlbFBhdGg/LnRhcmdldE9iamVjdDtcbn1cblxuLyoqXG4gKiBIZWxwZXIgdG8gY29tcHV0ZXMgc29tZSBvZiB0aGUgZXhwcmVzc2lvbiBmb3IgZnVydGhlciBwcm9jZXNzaW5nLlxuICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZUVkaXRhYmxlRXhwcmVzc2lvbnMoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogdm9pZCB7XG5cdGNvbnN0IHJlcXVpcmVkUHJvcGVydGllc0Zyb21JbnNlcnRSZXN0cmljdGlvbnMgPSBnZXRSZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zKFxuXHRcdChmaWVsZC5jb250ZXh0UGF0aENvbnRleHQgPyBmaWVsZC5jb250ZXh0UGF0aENvbnRleHQgOiBmaWVsZC5jb250ZXh0UGF0aClcblx0XHRcdD8uZ2V0UGF0aCgpXG5cdFx0XHQucmVwbGFjZUFsbChcIi8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZy9cIiwgXCIvXCIpLFxuXHRcdGZpZWxkLm9kYXRhTWV0YU1vZGVsXG5cdCk7XG5cdGNvbnN0IHJlcXVpcmVkUHJvcGVydGllc0Zyb21VcGRhdGVSZXN0cmljdGlvbnMgPSBnZXRSZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zKFxuXHRcdChmaWVsZC5jb250ZXh0UGF0aENvbnRleHQgPyBmaWVsZC5jb250ZXh0UGF0aENvbnRleHQgOiBmaWVsZC5jb250ZXh0UGF0aClcblx0XHRcdD8uZ2V0UGF0aCgpXG5cdFx0XHQucmVwbGFjZUFsbChcIi8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZy9cIiwgXCIvXCIpLFxuXHRcdGZpZWxkLm9kYXRhTWV0YU1vZGVsXG5cdCk7XG5cdGNvbnN0IG9SZXF1aXJlZFByb3BlcnRpZXMgPSB7XG5cdFx0cmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9uczogcmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucyxcblx0XHRyZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zOiByZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zXG5cdH07XG5cblx0Y29uc3QgZW5hYmxlZEV4cHJlc3Npb24gPSBVSUZvcm1hdHRlcnMuZ2V0RW5hYmxlZEV4cHJlc3Npb24oXG5cdFx0ZmllbGQucHJvcGVydHlGb3JGaWVsZENvbnRyb2wsXG5cdFx0ZmllbGQuY29udmVydGVkTWV0YVBhdGgsXG5cdFx0ZmFsc2UsXG5cdFx0ZmllbGQuZGF0YU1vZGVsUGF0aFxuXHQpIGFzIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRjb25zdCByZXF1aXJlZEV4cHJlc3Npb24gPSBVSUZvcm1hdHRlcnMuZ2V0UmVxdWlyZWRFeHByZXNzaW9uKFxuXHRcdGZpZWxkLnByb3BlcnR5Rm9yRmllbGRDb250cm9sLFxuXHRcdGZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoLFxuXHRcdGZhbHNlLFxuXHRcdGZhbHNlLFxuXHRcdG9SZXF1aXJlZFByb3BlcnRpZXMsXG5cdFx0ZmllbGQuZGF0YU1vZGVsUGF0aFxuXHQpIGFzIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXG5cdGZpZWxkLmVuYWJsZWRFeHByZXNzaW9uID0gZW5hYmxlZEV4cHJlc3Npb247XG5cdGZpZWxkLnJlcXVpcmVkRXhwcmVzc2lvbiA9IHJlcXVpcmVkRXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVFZGl0TW9kZShmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiB2b2lkIHtcblx0aWYgKGZpZWxkLmVkaXRNb2RlICE9PSB1bmRlZmluZWQgJiYgZmllbGQuZWRpdE1vZGUgIT09IG51bGwpIHtcblx0XHQvLyBFdmVuIGlmIGl0IHByb3ZpZGVkIGFzIGEgc3RyaW5nIGl0J3MgYSB2YWxpZCBwYXJ0IG9mIGEgYmluZGluZyBleHByZXNzaW9uIHRoYXQgY2FuIGJlIGxhdGVyIGNvbWJpbmVkIGludG8gc29tZXRoaW5nIGVsc2UuXG5cdFx0ZmllbGQuZWRpdE1vZGVBc09iamVjdCA9IGZpZWxkLmVkaXRNb2RlO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IG1lYXN1cmVSZWFkT25seSA9IGZpZWxkLmZvcm1hdE9wdGlvbnM/Lm1lYXN1cmVEaXNwbGF5TW9kZSA/IGZpZWxkLmZvcm1hdE9wdGlvbnMubWVhc3VyZURpc3BsYXlNb2RlID09PSBcIlJlYWRPbmx5XCIgOiBmYWxzZTtcblxuXHRcdGZpZWxkLmVkaXRNb2RlQXNPYmplY3QgPSBVSUZvcm1hdHRlcnMuZ2V0RWRpdE1vZGUoXG5cdFx0XHRmaWVsZC5wcm9wZXJ0eUZvckZpZWxkQ29udHJvbCxcblx0XHRcdGZpZWxkLmRhdGFNb2RlbFBhdGgsXG5cdFx0XHRtZWFzdXJlUmVhZE9ubHksXG5cdFx0XHR0cnVlLFxuXHRcdFx0ZmllbGQuY29udmVydGVkTWV0YVBhdGhcblx0XHQpO1xuXHRcdGZpZWxkLmNvbXB1dGVkRWRpdE1vZGUgPSBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdGlmRWxzZShhbmQoVUkuSXNJbmFjdGl2ZSwgISFmaWVsZC5oYXNQcm9wZXJ0eUluc2VydFJlc3RyaWN0aW9ucyksIFwiRGlzcGxheVwiLCBmaWVsZC5lZGl0TW9kZUFzT2JqZWN0KVxuXHRcdCk7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVFeHRlcm5hbElEKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IHZvaWQge1xuXHRjb25zdCBleHRlcm5hbElEUHJvcGVydHkgPSBnZXRBc3NvY2lhdGVkRXh0ZXJuYWxJZFByb3BlcnR5KGZpZWxkLnByb3BlcnR5KTtcblxuXHRpZiAoZXh0ZXJuYWxJRFByb3BlcnR5KSB7XG5cdFx0aWYgKGZpZWxkLnByb3BlcnR5KSBmaWVsZC5wcm9wZXJ0eS50eXBlID0gZXh0ZXJuYWxJRFByb3BlcnR5LnR5cGU7XG5cdFx0aWYgKGlzRGF0YUZpZWxkKGZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoKSkge1xuXHRcdFx0ZmllbGQuY29udmVydGVkTWV0YVBhdGguVmFsdWUuJHRhcmdldC50eXBlID0gZXh0ZXJuYWxJRFByb3BlcnR5LnR5cGU7XG5cdFx0fVxuXHRcdGNvbnN0IGV4dGVybmFsSWRQcm9wZXJ0eVBhdGggPSBnZXRBc3NvY2lhdGVkRXh0ZXJuYWxJZFByb3BlcnR5UGF0aChmaWVsZC5wcm9wZXJ0eSk7XG5cdFx0Y29uc3QgZXh0ZXJuYWxJZENvbnRleHQgPSBmaWVsZC5tZXRhUGF0aFxuXHRcdFx0LmdldE1vZGVsKClcblx0XHRcdC5jcmVhdGVCaW5kaW5nQ29udGV4dChmaWVsZC5jb250ZXh0UGF0aD8uZ2V0UGF0aCgpICsgXCIvXCIgKyBleHRlcm5hbElkUHJvcGVydHlQYXRoLCBmaWVsZC5tZXRhUGF0aCk7XG5cblx0XHRmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aEV4dGVybmFsSUQgPSBNZXRhTW9kZWxDb252ZXJ0ZXIuY29udmVydE1ldGFNb2RlbENvbnRleHQoZXh0ZXJuYWxJZENvbnRleHQpIGFzIFByb3BlcnR5O1xuXG5cdFx0bGV0IGRhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+ID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhcblx0XHRcdGV4dGVybmFsSWRDb250ZXh0IGFzIENvbnRleHQsXG5cdFx0XHRmaWVsZC5jb250ZXh0UGF0aFxuXHRcdCk7XG5cdFx0ZGF0YU1vZGVsUGF0aCA9IGdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JWYWx1ZShkYXRhTW9kZWxQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcz4pIHx8IGRhdGFNb2RlbFBhdGg7XG5cdFx0ZmllbGQuZGF0YU1vZGVsUGF0aEV4dGVybmFsSUQgPSBkYXRhTW9kZWxQYXRoO1xuXHR9XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBmaWVsZEdyb3VwSWRzIGZvciBhbiBJbnB1dCBvciBvdGhlciBlZGl0IGNvbnRyb2wuXG4gKiBAcGFyYW0gZmllbGRcbiAqIEBwYXJhbSBhcHBDb21wb25lbnRcbiAqIEByZXR1cm5zIFRoZSBmaWVsZEdyb3VwSWRzXG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVGaWVsZEdyb3VwSWRzKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcywgYXBwQ29tcG9uZW50PzogQXBwQ29tcG9uZW50KTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuXHRjb25zdCB0eXBlc0ZvckNvbGxhYm9yYXRpb25Gb2N1c01hbmFnZW1lbnQgPSBbXG5cdFx0XCJJbnB1dFdpdGhWYWx1ZUhlbHBcIixcblx0XHRcIlRleHRBcmVhXCIsXG5cdFx0XCJEYXRlUGlja2VyXCIsXG5cdFx0XCJUaW1lUGlja2VyXCIsXG5cdFx0XCJEYXRlVGltZVBpY2tlclwiLFxuXHRcdFwiSW5wdXRXaXRoVW5pdFwiLFxuXHRcdFwiSW5wdXRcIixcblx0XHRcIklucHV0TWFza1wiLFxuXHRcdFwiTWFza2VkXCJcblx0XTtcblxuXHRpZiAoIWFwcENvbXBvbmVudCkge1xuXHRcdC8vZm9yIFZhbHVlSGVscCAvIE1hc3MgZWRpdCBUZW1wbGF0aW5nIHRoZSBhcHBDb21wb25lbnQgaXMgbm90IHBhc3NlZCB0byB0aGUgdGVtcGxhdGluZ1xuXHRcdHJldHVybjtcblx0fVxuXHRjb25zdCBzaWRlRWZmZWN0U2VydmljZSA9IGFwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKTtcblx0Y29uc3QgZmllbGRHcm91cElkcyA9IHNpZGVFZmZlY3RTZXJ2aWNlLmNvbXB1dGVGaWVsZEdyb3VwSWRzKFxuXHRcdGZpZWxkLmRhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5VHlwZT8uZnVsbHlRdWFsaWZpZWROYW1lID8/IFwiXCIsXG5cdFx0ZmllbGQuZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3Q/LmZ1bGx5UXVhbGlmaWVkTmFtZSA/PyBcIlwiXG5cdCk7XG5cblx0ZmllbGQubWFpblByb3BlcnR5UmVsYXRpdmVQYXRoID0gaXNQcm9wZXJ0eShmaWVsZC5kYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdClcblx0XHQ/IGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgoZmllbGQuZGF0YU1vZGVsUGF0aClcblx0XHQ6IHVuZGVmaW5lZDtcblxuXHRpZiAoZmllbGQuY29sbGFib3JhdGlvbkVuYWJsZWQgJiYgdHlwZXNGb3JDb2xsYWJvcmF0aW9uRm9jdXNNYW5hZ2VtZW50LmluY2x1ZGVzKGZpZWxkLmVkaXRTdHlsZSB8fCBcIlwiKSkge1xuXHRcdGNvbnN0IGNvbGxhYm9yYXRpb25GaWVsZEdyb3VwID0gYCR7Q29sbGFib3JhdGlvbkZpZWxkR3JvdXBQcmVmaXh9JHtmaWVsZC5kYXRhU291cmNlUGF0aH1gO1xuXHRcdGZpZWxkR3JvdXBJZHMucHVzaChjb2xsYWJvcmF0aW9uRmllbGRHcm91cCk7XG5cdH1cblxuXHRyZXR1cm4gZmllbGRHcm91cElkcy5sZW5ndGggPyBmaWVsZEdyb3VwSWRzIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFRoaXMgaGVscGVyIGlzIGZvciB0aGUgSUQgb2YgdGhlIGZpZWxkIGFjY29yZGluZyB0byBzZXZlcmFsIGRpZmZlcmVudCBzY2VuYXJpb3MuXG4gKlxuICogZGlzcGxheVN0eWxlSWQgaXMgdXNlZCBmb3IgYWxsIGNvbnRyb2xzIGluc2lkZSB0aGUgZmllbGQgd3JhcHBlciBpbiBkaXNwbGF5IG1vZGUuIEEgPHNhcC5tLnRleHQ+IGNvbnRyb2wgd291bGQgZ2V0IHRoaXMgSUQuIEFuIGV4YW1wbGUgaXM6IEFwcGxpY2F0aW9uQ29udGV4dDo6RmllbGQtZGlzcGxheS5cbiAqIGVkaXRTdHlsZUlkIGlzIHVzZWQgZm9yIGFsbCBjb250cm9scyBpbnNpZGUgdGhlIGZpZWxkIHdyYXBwZXIgaW4gZWRpdCBtb2RlLiBBIDxzYXAudWkubWRjLmZpZWxkPiBjb250cm9sIHdvdWxkIGdldCB0aGlzIElELiBBbiBleGFtcGxlIGlzOiBBcHBsaWNhdGlvbkNvbnRleHQ6OkZpZWxkLWVkaXQuXG4gKlxuICogSWYgbm8gd3JhcHBlciBleGlzdHMgdGhlIHdyYXBwZXJzIElEIHdpbGwgYmUgcHJvcGFnYXRlZCB0byB0aGUgZmlyc3QgY29udHJvbCBkaXNwbGF5ZWQsIEEgPHNhcC5tLnRleHQ+IGNvbnRyb2wgd291bGQgZ2V0IHRoaXMgSUQuIEFuIGV4YW1wbGUgaXM6IEFwcGxpY2F0aW9uQ29udGV4dDo6RmllbGQtY29udGVudC5cbiAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVJRHMoZmllbGQ6IFBhcnRpYWw8RmllbGRCbG9ja1Byb3BlcnRpZXM+KTogdm9pZCB7XG5cdGlmIChmaWVsZC5fZmxleElkICYmICFmaWVsZC5fYXBpSWQpIHtcblx0XHRmaWVsZC5fYXBpSWQgPSBmaWVsZC5fZmxleElkO1xuXHRcdGZpZWxkLl9mbGV4SWQgPSBnZXRDb250ZW50SWQoZmllbGQuX2ZsZXhJZCk7XG5cdH1cblxuXHRpZiAoZmllbGQuaWRQcmVmaXgpIHtcblx0XHRmaWVsZC5lZGl0U3R5bGVJZCA9IGdlbmVyYXRlKFtmaWVsZC5pZFByZWZpeCwgXCJGaWVsZC1lZGl0XCJdKTtcblx0fVxuXHQvL05vV3JhcHBlcklkIHNjZW5hcmlvIGlzIGZvciB0aGUgTFIgdGFibGUuXG5cdGlmIChmaWVsZC5mb3JtYXRPcHRpb25zPy5maWVsZE1vZGUgPT09IFwibm93cmFwcGVyXCIgJiYgZmllbGQuZWRpdE1vZGUgPT09IFwiRGlzcGxheVwiKSB7XG5cdFx0aWYgKGZpZWxkLl9mbGV4SWQpIHtcblx0XHRcdGZpZWxkLmRpc3BsYXlTdHlsZUlkID0gZmllbGQuX2ZsZXhJZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZmllbGQuZGlzcGxheVN0eWxlSWQgPSBmaWVsZC5pZFByZWZpeCA/IGdlbmVyYXRlKFtmaWVsZC5pZFByZWZpeCwgXCJGaWVsZC1jb250ZW50XCJdKSA6IHVuZGVmaW5lZDtcblx0XHR9XG5cdH0gZWxzZSBpZiAoZmllbGQuaWRQcmVmaXgpIHtcblx0XHRmaWVsZC5kaXNwbGF5U3R5bGVJZCA9IGdlbmVyYXRlKFtmaWVsZC5pZFByZWZpeCwgXCJGaWVsZC1kaXNwbGF5XCJdKTtcblx0fVxufVxuXG4vKipcbiAqIFNldHMgdGhlIGludGVybmFsIGZvcm1hdE9wdGlvbnMgZm9yIHRoZSBidWlsZGluZyBibG9jay5cbiAqIEBwYXJhbSBmaWVsZFxuICogQHJldHVybnMgQSBzdHJpbmcgd2l0aCB0aGUgaW50ZXJuYWwgZm9ybWF0T3B0aW9ucyBmb3IgdGhlIGJ1aWxkaW5nIGJsb2NrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtYXRPcHRpb25zKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IEZpZWxkRm9ybWF0T3B0aW9ucyB7XG5cdHJldHVybiB7XG5cdFx0Li4uZmllbGQuZm9ybWF0T3B0aW9ucyxcblx0XHR0ZXh0QWxpZ25Nb2RlOiBmaWVsZC5mb3JtYXRPcHRpb25zLnRleHRBbGlnbk1vZGUgPz8gXCJGb3JtXCIsXG5cdFx0c2hvd0VtcHR5SW5kaWNhdG9yOiBmaWVsZC5mb3JtYXRPcHRpb25zLnNob3dFbXB0eUluZGljYXRvciA/PyB0cnVlLFxuXHRcdGRpc3BsYXlNb2RlOiBmaWVsZC5mb3JtYXRPcHRpb25zLmRpc3BsYXlNb2RlIGFzIERpc3BsYXlNb2RlLFxuXHRcdG1lYXN1cmVEaXNwbGF5TW9kZTogZmllbGQuZm9ybWF0T3B0aW9ucy5tZWFzdXJlRGlzcGxheU1vZGUsXG5cdFx0dGV4dExpbmVzRWRpdDogZmllbGQuZm9ybWF0T3B0aW9ucy50ZXh0TGluZXNFZGl0LFxuXHRcdHRleHRNYXhMaW5lczogZmllbGQuZm9ybWF0T3B0aW9ucy50ZXh0TWF4TGluZXMsXG5cdFx0dGV4dE1heENoYXJhY3RlcnNEaXNwbGF5OiBmaWVsZC5mb3JtYXRPcHRpb25zLnRleHRNYXhDaGFyYWN0ZXJzRGlzcGxheSxcblx0XHR0ZXh0RXhwYW5kQmVoYXZpb3JEaXNwbGF5OiBmaWVsZC5mb3JtYXRPcHRpb25zLnRleHRFeHBhbmRCZWhhdmlvckRpc3BsYXksXG5cdFx0dGV4dE1heExlbmd0aDogZmllbGQuZm9ybWF0T3B0aW9ucy50ZXh0TWF4TGVuZ3RoLFxuXHRcdGZpZWxkRWRpdFN0eWxlOiBmaWVsZC5mb3JtYXRPcHRpb25zLmZpZWxkRWRpdFN0eWxlLFxuXHRcdHJhZGlvQnV0dG9uc0hvcml6b250YWxMYXlvdXQ6IGZpZWxkLmZvcm1hdE9wdGlvbnMucmFkaW9CdXR0b25zSG9yaXpvbnRhbExheW91dCxcblx0XHRzaG93VGltZTogZmllbGQuZm9ybWF0T3B0aW9ucy5zaG93VGltZSxcblx0XHRzaG93VGltZXpvbmU6IGZpZWxkLmZvcm1hdE9wdGlvbnMuc2hvd1RpbWV6b25lLFxuXHRcdHNob3dEYXRlOiBmaWVsZC5mb3JtYXRPcHRpb25zLnNob3dEYXRlXG5cdH0gYXMgRmllbGRGb3JtYXRPcHRpb25zO1xufVxuXG5mdW5jdGlvbiBnZXRPYmplY3RJZGVudGlmaWVyVGV4dChcblx0ZmllbGRGb3JtYXRPcHRpb25zOiBGaWVsZEZvcm1hdE9wdGlvbnMsXG5cdHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eSB8IFByb3BlcnR5UGF0aD5cbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0bGV0IHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+ID0gcGF0aEluTW9kZWwoXG5cdFx0Z2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aChwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgpXG5cdCk7XG5cdGNvbnN0IHRhcmdldERpc3BsYXlNb2RlID0gZmllbGRGb3JtYXRPcHRpb25zPy5kaXNwbGF5TW9kZTtcblx0Y29uc3QgcHJvcGVydHlEZWZpbml0aW9uID0gaXNQcm9wZXJ0eVBhdGhFeHByZXNzaW9uKHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QpXG5cdFx0PyAocHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC4kdGFyZ2V0IGFzIFByb3BlcnR5KVxuXHRcdDogKHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHkpO1xuXG5cdGNvbnN0IGNvbW1vblRleHQgPSBwcm9wZXJ0eURlZmluaXRpb24uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dDtcblx0aWYgKGNvbW1vblRleHQgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiA9IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24ocHJvcGVydHlEZWZpbml0aW9uLCBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uKTtcblxuXHRzd2l0Y2ggKHRhcmdldERpc3BsYXlNb2RlKSB7XG5cdFx0Y2FzZSBcIlZhbHVlRGVzY3JpcHRpb25cIjpcblx0XHRcdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSBnZXRSZWxhdGl2ZVBhdGhzKHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGNvbW1vblRleHQsIHJlbGF0aXZlTG9jYXRpb24pKTtcblx0XHRjYXNlIFwiRGVzY3JpcHRpb25WYWx1ZVwiOlxuXHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGZvcm1hdFJlc3VsdChbcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbl0sIHZhbHVlRm9ybWF0dGVycy5mb3JtYXRUb0tlZXBXaGl0ZXNwYWNlKSk7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0T3ZlcnJpZGVzKGNvbnRyb2xDb25maWd1cmF0aW9uOiBUZW1wbGF0ZVByb2Nlc3NvclNldHRpbmdzLCBpZDogc3RyaW5nKTogRmllbGRQcm9wZXJ0aWVzIHtcblx0Lypcblx0XHRRdWFsbXM6IFdlIG5lZWQgdG8gdXNlIHRoaXMgVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncyB0eXBlIHRvIGJlIGFibGUgdG8gaXRlcmF0ZVxuXHRcdG92ZXIgdGhlIHByb3BlcnRpZXMgbGF0ZXIgb24gYW5kIGNhc3QgaXQgYWZ0ZXJ3YXJkcyBhcyBhIGZpZWxkIHByb3BlcnR5IHR5cGVcblx0Ki9cblx0Y29uc3QgcHJvcHMgPSB7fSBhcyBUZW1wbGF0ZVByb2Nlc3NvclNldHRpbmdzO1xuXG5cdGlmIChjb250cm9sQ29uZmlndXJhdGlvbikge1xuXHRcdGNvbnN0IGNvbnRyb2xDb25maWcgPSBjb250cm9sQ29uZmlndXJhdGlvbltpZF0gYXMgVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncztcblx0XHRpZiAoY29udHJvbENvbmZpZykge1xuXHRcdFx0T2JqZWN0LmtleXMoY29udHJvbENvbmZpZykuZm9yRWFjaChmdW5jdGlvbiAoY29uZmlnS2V5KSB7XG5cdFx0XHRcdHByb3BzW2NvbmZpZ0tleV0gPSBjb250cm9sQ29uZmlnW2NvbmZpZ0tleV07XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHByb3BzIGFzIHVua25vd24gYXMgRmllbGRQcm9wZXJ0aWVzO1xufVxuXG4vKipcbiAqIFByZXBhcmUgdGhlIGRpc3BsYXkgc3R5bGUgb2YgdGhlIGZpZWxkIGluIGNhc2Ugb2Ygc2VtYW50aWMgb2JqZWN0cyBvciBxdWlja3ZpZXcgZmFjZXRzLlxuICogQHBhcmFtIGZpZWxkIFRoZSBmaWVsZFxuICogQHBhcmFtIGludGVybmFsTW9kZWxcbiAqIEBwYXJhbSBkYXRhTW9kZWxQYXRoIFRoZSBEYXRhTW9kZWxPYmplY3RQYXRoIG9mIHRoZSBwcm9wZXJ0eVxuICogQHBhcmFtIGhhc1NlbWFudGljT2JqZWN0c1xuICogQHBhcmFtIGhhc1F1aWNrVmlld1xuICovXG5mdW5jdGlvbiBtYW5hZ2VRdWlja1ZpZXdGb3JEaXNwbGF5U3R5bGUoXG5cdGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyxcblx0aW50ZXJuYWxNb2RlbDogSlNPTk1vZGVsLFxuXHRkYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pixcblx0aGFzU2VtYW50aWNPYmplY3RzOiBib29sZWFuLFxuXHRoYXNRdWlja1ZpZXc6IGJvb2xlYW5cbik6IHZvaWQge1xuXHRpZiAoaGFzUXVpY2tWaWV3KSB7XG5cdFx0ZmllbGQuaGFzUXVpY2tWaWV3ID0gdHJ1ZTtcblx0XHRmaWVsZC5xdWlja1ZpZXdUeXBlID0gXCJGYWNldHNcIjtcblx0fVxuXHRpZiAoaGFzU2VtYW50aWNPYmplY3RzKSB7XG5cdFx0Y29uc3QgZm91bmRTZW1hbnRpY09iamVjdHMgPSBtYW5hZ2VTZW1hbnRpY09iamVjdHNGb3JDdXJyZW50VXNlcihmaWVsZC5zZW1hbnRpY09iamVjdCwgZGF0YU1vZGVsUGF0aCwgaW50ZXJuYWxNb2RlbCk7XG5cdFx0aWYgKGZvdW5kU2VtYW50aWNPYmplY3RzLmhhc1JlYWNoYWJsZVN0YXRpY1NlbWFudGljT2JqZWN0IHx8IGZvdW5kU2VtYW50aWNPYmplY3RzLmR5bmFtaWNTZW1hbnRpY09iamVjdHMubGVuZ3RoKSB7XG5cdFx0XHRmaWVsZC5oYXNRdWlja1ZpZXcgPSB0cnVlO1xuXHRcdFx0ZmllbGQucXVpY2tWaWV3VHlwZSA9IGhhc1F1aWNrVmlldyA/IFwiRmFjZXRzQW5kU2VtYW50aWNMaW5rc1wiIDogXCJTZW1hbnRpY0xpbmtzXCI7XG5cdFx0XHRmaWVsZC5keW5hbWljU2VtYW50aWNPYmplY3RzID1cblx0XHRcdFx0Zm91bmRTZW1hbnRpY09iamVjdHMuaGFzUmVhY2hhYmxlU3RhdGljU2VtYW50aWNPYmplY3QgIT09IHRydWUgPyBmb3VuZFNlbWFudGljT2JqZWN0cy5keW5hbWljU2VtYW50aWNPYmplY3RzIDogdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIENoZWNrIGZpZWxkIHRvIGtub3cgaWYgaXQgaGFzIGEgc2VtYW50aWMgb2JqZWN0LlxuICogQHBhcmFtIGZpZWxkIFRoZSBmaWVsZFxuICogQHBhcmFtIGRhdGFNb2RlbFBhdGggVGhlIERhdGFNb2RlbE9iamVjdFBhdGggb2YgdGhlIHByb3BlcnR5XG4gKiBAcmV0dXJucyBUcnVlIGlmIGZpZWxkIGhhcyBhIHNlbWFudGljIG9iamVjdFxuICovXG5mdW5jdGlvbiBwcm9wZXJ0eU9yTmF2aWdhdGlvblByb3BlcnR5SGFzU2VtYW50aWNPYmplY3QoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzLCBkYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gISFnZXRQcm9wZXJ0eVdpdGhTZW1hbnRpY09iamVjdChkYXRhTW9kZWxQYXRoKSB8fCAoZmllbGQuc2VtYW50aWNPYmplY3QgIT09IHVuZGVmaW5lZCAmJiBmaWVsZC5zZW1hbnRpY09iamVjdCAhPT0gXCJcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRJbnB1dFdpdGhWYWx1ZWhlbHBQbGFjZWhvbGRlcihmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGxldCB0YXJnZXRFbnRpdHlUeXBlO1xuXHRjb25zdCBlZGl0U3R5bGVQbGFjZWhvbGRlciA9IGZpZWxkLmVkaXRTdHlsZVBsYWNlaG9sZGVyO1xuXHRjb25zdCBmaWVsZENvbnRhaW5lclR5cGUgPSBmaWVsZC5mb3JtYXRPcHRpb25zLnRleHRBbGlnbk1vZGU7XG5cdGlmIChmaWVsZENvbnRhaW5lclR5cGUgPT09IFwiVGFibGVcIikge1xuXHRcdHRhcmdldEVudGl0eVR5cGUgPSBmaWVsZC5kYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVR5cGU7XG5cdH1cblx0Y29uc3QgcHJvcGVydHlQYXRoID0gZmllbGQuZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3Q/Lm5hbWU7XG5cdGNvbnN0IHJlY29tbWVuZGF0aW9uVmFsdWUgPSBwYXRoSW5Nb2RlbChgJHtwcm9wZXJ0eVBhdGh9QCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnBsYWNlaG9sZGVyVmFsdWVgKTtcblx0Y29uc3QgcmVjb21tZW5kYXRpb25EZXNjcmlwdGlvbiA9IHBhdGhJbk1vZGVsKGAke3Byb3BlcnR5UGF0aH1AJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMucGxhY2Vob2xkZXJEZXNjcmlwdGlvbmApO1xuXHRjb25zdCBwbGFjZWhvbGRlckV4cCA9IGZvcm1hdFJlc3VsdChcblx0XHRbXG5cdFx0XHRyZWNvbW1lbmRhdGlvblZhbHVlLFxuXHRcdFx0cmVjb21tZW5kYXRpb25EZXNjcmlwdGlvbixcblx0XHRcdHBhdGhJbk1vZGVsKGAvcmVjb21tZW5kYXRpb25zRGF0YWAsIFwiaW50ZXJuYWxcIiksXG5cdFx0XHRwYXRoSW5Nb2RlbChgL2N1cnJlbnRDdHh0YCwgXCJpbnRlcm5hbFwiKSxcblx0XHRcdHBhdGhJbk1vZGVsKGAke3Byb3BlcnR5UGF0aH1AJHVpNS5mZS5tZXNzYWdlVHlwZWApLFxuXHRcdFx0ZWRpdFN0eWxlUGxhY2Vob2xkZXIsXG5cdFx0XHRmaWVsZC5mb3JtYXRPcHRpb25zLmRpc3BsYXlNb2RlXG5cdFx0XSxcblx0XHRhZGRpdGlvbmFsVmFsdWVGb3JtYXR0ZXIuZm9ybWF0UGxhY2Vob2xkZXIsXG5cdFx0dGFyZ2V0RW50aXR5VHlwZVxuXHQpO1xuXG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihwbGFjZWhvbGRlckV4cCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRVcERhdGFQb2ludFR5cGUoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzKTogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcyB7XG5cdC8vIGRhdGEgcG9pbnQgYW5ub3RhdGlvbnMgbmVlZCBub3QgaGF2ZSAkVHlwZSBkZWZpbmVkLCBzbyBhZGQgaXQgaWYgbWlzc2luZ1xuXHRjb25zdCBkYXRhUG9pbnRUeXBlID0geyAuLi5kYXRhRmllbGQgfTtcblx0aWYgKChkYXRhRmllbGQgYXMgdW5rbm93biBhcyBEYXRhUG9pbnQpPy50ZXJtID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFQb2ludFwiKSB7XG5cdFx0ZGF0YVBvaW50VHlwZS4kVHlwZSA9IGRhdGFGaWVsZC4kVHlwZSB8fCBVSUFubm90YXRpb25UeXBlcy5EYXRhUG9pbnRUeXBlO1xuXHR9XG5cdHJldHVybiBkYXRhUG9pbnRUeXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVjaW1hbFBhZGRpbmcoYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQgfCB1bmRlZmluZWQsIHByb3BlcnR5OiBQcm9wZXJ0eSk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG1hbmlmZXN0ID0gYXBwQ29tcG9uZW50Py5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLmZlXCIpO1xuXHRyZXR1cm4gcHJvcGVydHk/LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3lcblx0XHQ/IG1hbmlmZXN0Py5tYWNyb3M/LnRhYmxlPy5jdXJyZW5jeT8uZGVjaW1hbFBhZGRpbmcgPz8gNVxuXHRcdDogbWFuaWZlc3Q/Lm1hY3Jvcz8udGFibGU/LnVuaXRPZk1lYXN1cmU/LmRlY2ltYWxQYWRkaW5nID8/IDM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRVcERpc3BsYXlTdHlsZShcblx0ZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzLFxuXHRkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMsXG5cdGRhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcyB8IFByb3BlcnR5Pixcblx0aW50ZXJuYWxNb2RlbDogSlNPTk1vZGVsLFxuXHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudFxuKTogRmllbGRCbG9ja1Byb3BlcnRpZXMge1xuXHRjb25zdCByZXN1bHRGaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMgPSBmaWVsZDtcblx0Y29uc3QgcHJvcGVydHk6IFByb3BlcnR5ID0gZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHk7XG5cdGlmICghZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QpIHtcblx0XHRyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUgPSBcIlRleHRcIjtcblx0XHRyZXR1cm4gcmVzdWx0RmllbGQ7XG5cdH1cblxuXHRyZXN1bHRGaWVsZC5oYXNVbml0T3JDdXJyZW5jeSA9XG5cdFx0cHJvcGVydHkuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0ICE9PSB1bmRlZmluZWQgfHwgcHJvcGVydHkuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeSAhPT0gdW5kZWZpbmVkO1xuXHRyZXN1bHRGaWVsZC5oYXNWYWxpZEFuYWx5dGljYWxDdXJyZW5jeU9yVW5pdCA9IFVJRm9ybWF0dGVycy5oYXNWYWxpZEFuYWx5dGljYWxDdXJyZW5jeU9yVW5pdChcblx0XHRkYXRhTW9kZWxQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+XG5cdCk7XG5cdHJlc3VsdEZpZWxkLnRleHRGcm9tVmFsdWVMaXN0ID0gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0Zm9ybWF0UmVzdWx0KFxuXHRcdFx0W1xuXHRcdFx0XHRwYXRoSW5Nb2RlbChnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKGRhdGFNb2RlbFBhdGgpKSxcblx0XHRcdFx0YC8ke3Byb3BlcnR5LmZ1bGx5UXVhbGlmaWVkTmFtZX1gLFxuXHRcdFx0XHRyZXN1bHRGaWVsZC5mb3JtYXRPcHRpb25zLmRpc3BsYXlNb2RlXG5cdFx0XHRdLFxuXHRcdFx0XCJzYXAuZmUubWFjcm9zLmZpZWxkLkZpZWxkUnVudGltZS5yZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0XCJcblx0XHQpXG5cdCk7XG5cblx0aWYgKHByb3BlcnR5LmFubm90YXRpb25zPy5VST8uSXNJbWFnZSkge1xuXHRcdHJlc3VsdEZpZWxkLmRpc3BsYXlTdHlsZSA9IFwiRmlsZVwiO1xuXHRcdHJldHVybiByZXN1bHRGaWVsZDtcblx0fVxuXHRpZiAocHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5Jc0ltYWdlVVJMICYmIGlzSW1hZ2VVUkwocHJvcGVydHkpKSB7XG5cdFx0cmVzdWx0RmllbGQuZGlzcGxheVN0eWxlID0gXCJBdmF0YXJcIjtcblx0XHRyZXR1cm4gcmVzdWx0RmllbGQ7XG5cdH1cblx0aWYgKHByb3BlcnR5LmFubm90YXRpb25zPy5VST8uSW5wdXRNYXNrKSB7XG5cdFx0cmVzdWx0RmllbGQuZGlzcGxheVN0eWxlID0gXCJUZXh0XCI7XG5cdFx0cmV0dXJuIHJlc3VsdEZpZWxkO1xuXHR9XG5cdGlmIChwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5NYXNrZWQpIHtcblx0XHRyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUgPSBcIk1hc2tlZFwiO1xuXHRcdHJldHVybiByZXN1bHRGaWVsZDtcblx0fVxuXHQvLyBGb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLCBTdHJlYW0gd2lsbCBiZSBzaG93biB3aXRoaW4gYW4gZW50aXR5IGluc3RhbmNlIGFzIGNpcmNsZSBpZiB0aGUgZW50aXR5IGlzIGFubm90YXRlZCBhcyBJc05hdHVyYWxQZXJzb25cblx0Ly8gYW5kIG5laXRoZXIgSXNJbWFnZSBub3IgSXNJbWFnZVVSTCBhbm5vdGF0aW9uIGhhcyBiZWVuIHVzZWQuXG5cdGlmIChwcm9wZXJ0eS50eXBlID09PSBcIkVkbS5TdHJlYW1cIikge1xuXHRcdHJlc3VsdEZpZWxkLmRpc3BsYXlTdHlsZSA9IFwiRmlsZVwiO1xuXHRcdHJldHVybiByZXN1bHRGaWVsZDtcblx0fVxuXHRpZiAocmVzdWx0RmllbGQuZm9ybWF0T3B0aW9ucy5pc0ZpZWxkR3JvdXBJdGVtICYmIHByb3BlcnR5LnR5cGUgPT09IFwiRWRtLkJvb2xlYW5cIikge1xuXHRcdHJlc3VsdEZpZWxkLmRpc3BsYXlTdHlsZSA9IFwiQ2hlY2tCb3hHcm91cEl0ZW1cIjtcblx0XHRyZXR1cm4gcmVzdWx0RmllbGQ7XG5cdH1cblx0c2V0VXBEcmFmdEluZGljYXRvcihkYXRhTW9kZWxQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LCByZXN1bHRGaWVsZCk7XG5cdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlIGFzIHN0cmluZykge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZTpcblx0XHRcdHJlc3VsdEZpZWxkLmRpc3BsYXlTdHlsZSA9IFwiRGF0YVBvaW50XCI7XG5cdFx0XHRyZXR1cm4gcmVzdWx0RmllbGQ7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uOlxuXHRcdFx0aWYgKChkYXRhRmllbGQgYXMgdW5rbm93biBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKS5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhUG9pbnRUeXBlKSB7XG5cdFx0XHRcdHJlc3VsdEZpZWxkLmRpc3BsYXlTdHlsZSA9IFwiRGF0YVBvaW50XCI7XG5cdFx0XHRcdHJldHVybiByZXN1bHRGaWVsZDtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdChkYXRhRmllbGQgYXMgdW5rbm93biBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKS5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PVxuXHRcdFx0XHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuQ29udGFjdFR5cGVcIlxuXHRcdFx0KSB7XG5cdFx0XHRcdHJlc3VsdEZpZWxkLmRpc3BsYXlTdHlsZSA9IFwiQ29udGFjdFwiO1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0RmllbGQ7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbjpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdHJlc3VsdEZpZWxkLmRpc3BsYXlTdHlsZSA9IFwiQnV0dG9uXCI7XG5cdFx0XHRyZXR1cm4gcmVzdWx0RmllbGQ7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvbjpcblx0XHRcdHJlc3VsdEZpZWxkLmRpc3BsYXlTdHlsZSA9IFwiTGlua1wiO1xuXHRcdFx0cmV0dXJuIHJlc3VsdEZpZWxkO1xuXHR9XG5cdGNvbnN0IGhhc1F1aWNrVmlldyA9IGlzVXNlZEluTmF2aWdhdGlvbldpdGhRdWlja1ZpZXdGYWNldHMoZGF0YU1vZGVsUGF0aCwgcHJvcGVydHkpO1xuXHRjb25zdCBoYXNTZW1hbnRpY09iamVjdHMgPSBwcm9wZXJ0eU9yTmF2aWdhdGlvblByb3BlcnR5SGFzU2VtYW50aWNPYmplY3QocmVzdWx0RmllbGQsIGRhdGFNb2RlbFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4pO1xuXG5cdGlmIChpc1NlbWFudGljS2V5KHByb3BlcnR5LCBkYXRhTW9kZWxQYXRoKSAmJiByZXN1bHRGaWVsZC5mb3JtYXRPcHRpb25zLnNlbWFudGljS2V5U3R5bGUpIHtcblx0XHRtYW5hZ2VRdWlja1ZpZXdGb3JEaXNwbGF5U3R5bGUoXG5cdFx0XHRyZXN1bHRGaWVsZCxcblx0XHRcdGludGVybmFsTW9kZWwsXG5cdFx0XHRkYXRhTW9kZWxQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRcdFx0aGFzU2VtYW50aWNPYmplY3RzLFxuXHRcdFx0aGFzUXVpY2tWaWV3XG5cdFx0KTtcblx0XHRzZXRVcE9iamVjdElkZW50aWZpZXJUaXRsZUFuZFRleHQocmVzdWx0RmllbGQsIGRhdGFNb2RlbFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4pO1xuXHRcdHJlc3VsdEZpZWxkLnNob3dFcnJvckluZGljYXRvciA9XG5cdFx0XHQoZGF0YU1vZGVsUGF0aC5jb250ZXh0TG9jYXRpb24gYXMgdW5rbm93biBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFNlcnZpY2VPYmplY3Q+KT8udGFyZ2V0T2JqZWN0Py5fdHlwZSA9PT1cblx0XHRcdFx0XCJOYXZpZ2F0aW9uUHJvcGVydHlcIiAmJiAhcmVzdWx0RmllbGQuZm9ybWF0T3B0aW9ucy5maWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGg7XG5cdFx0cmVzdWx0RmllbGQuc2l0dWF0aW9uc0luZGljYXRvclByb3BlcnR5UGF0aCA9IChkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCBhcyBQcm9wZXJ0eSkubmFtZTtcblx0XHRyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUgPVxuXHRcdFx0cmVzdWx0RmllbGQuZm9ybWF0T3B0aW9ucy5zZW1hbnRpY0tleVN0eWxlID09PSBcIk9iamVjdElkZW50aWZpZXJcIiA/IFwiT2JqZWN0SWRlbnRpZmllclwiIDogXCJMYWJlbFNlbWFudGljS2V5XCI7XG5cdFx0cmV0dXJuIHJlc3VsdEZpZWxkO1xuXHR9XG5cdGlmIChkYXRhRmllbGQuQ3JpdGljYWxpdHkpIHtcblx0XHRtYW5hZ2VRdWlja1ZpZXdGb3JEaXNwbGF5U3R5bGUoXG5cdFx0XHRyZXN1bHRGaWVsZCxcblx0XHRcdGludGVybmFsTW9kZWwsXG5cdFx0XHRkYXRhTW9kZWxQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRcdFx0aGFzU2VtYW50aWNPYmplY3RzLFxuXHRcdFx0aGFzUXVpY2tWaWV3XG5cdFx0KTtcblx0XHRyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUgPSBcIk9iamVjdFN0YXR1c1wiO1xuXHRcdHJldHVybiByZXN1bHRGaWVsZDtcblx0fVxuXHRpZiAoXG5cdFx0KHByb3BlcnR5LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kgfHwgcHJvcGVydHkuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0KSAmJlxuXHRcdFN0cmluZyhyZXN1bHRGaWVsZC5mb3JtYXRPcHRpb25zLmlzQ3VycmVuY3lPclVuaXRBbGlnbmVkKSA9PT0gXCJ0cnVlXCIgJiZcblx0XHRyZXN1bHRGaWVsZC5mb3JtYXRPcHRpb25zLm1lYXN1cmVEaXNwbGF5TW9kZSAhPT0gXCJIaWRkZW5cIlxuXHQpIHtcblx0XHRjb25zdCBkZWNpbWFsUGFkZGluZyA9IEZpZWxkU3RydWN0dXJlSGVscGVyLmdldERlY2ltYWxQYWRkaW5nKGFwcENvbXBvbmVudCwgcHJvcGVydHkpO1xuXHRcdHJlc3VsdEZpZWxkLnZhbHVlQXNTdHJpbmdCaW5kaW5nRXhwcmVzc2lvbiA9IHJlc3VsdEZpZWxkLnZhbHVlXG5cdFx0XHQ/IHJlc3VsdEZpZWxkLnZhbHVlXG5cdFx0XHQ6IGdldFZhbHVlQmluZGluZyhcblx0XHRcdFx0XHRkYXRhTW9kZWxQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRcdFx0XHRcdHJlc3VsdEZpZWxkLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRkZWNpbWFsUGFkZGluZyxcblx0XHRcdFx0XHR0cnVlXG5cdFx0XHQgICk7XG5cblx0XHRyZXN1bHRGaWVsZC51bml0QmluZGluZ0V4cHJlc3Npb24gPSBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFVJRm9ybWF0dGVycy5nZXRCaW5kaW5nRm9yVW5pdE9yQ3VycmVuY3koXG5cdFx0XHRcdGRhdGFNb2RlbFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdCEhZmllbGQuZm9ybWF0T3B0aW9ucy5zaG93T25seVVuaXREZWNpbWFscyxcblx0XHRcdFx0ISFmaWVsZC5mb3JtYXRPcHRpb25zLnByZXNlcnZlRGVjaW1hbHNGb3JDdXJyZW5jeVxuXHRcdFx0KVxuXHRcdCk7XG5cdFx0cmVzdWx0RmllbGQuZGlzcGxheVN0eWxlID0gXCJOdW1iZXJXaXRoVW5pdE9yQ3VycmVuY3lBbGlnbmVkXCI7XG5cblx0XHRyZXR1cm4gcmVzdWx0RmllbGQ7XG5cdH1cblx0aWYgKHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tdW5pY2F0aW9uPy5Jc0VtYWlsQWRkcmVzcyB8fCBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbXVuaWNhdGlvbj8uSXNQaG9uZU51bWJlcikge1xuXHRcdHJlc3VsdEZpZWxkLmRpc3BsYXlTdHlsZSA9IFwiTGlua1wiO1xuXHRcdHJldHVybiByZXN1bHRGaWVsZDtcblx0fVxuXHRpZiAocHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5NdWx0aUxpbmVUZXh0KSB7XG5cdFx0cmVzdWx0RmllbGQuZGlzcGxheVN0eWxlID0gXCJFeHBhbmRhYmxlVGV4dFwiO1xuXHRcdHJldHVybiByZXN1bHRGaWVsZDtcblx0fVxuXG5cdGlmIChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmwpIHtcblx0XHRyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUgPSBcIkxpbmtcIjtcblx0XHRyZXR1cm4gcmVzdWx0RmllbGQ7XG5cdH1cblxuXHRyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUgPSBcIlRleHRcIjtcblx0bWFuYWdlUXVpY2tWaWV3Rm9yRGlzcGxheVN0eWxlKFxuXHRcdHJlc3VsdEZpZWxkLFxuXHRcdGludGVybmFsTW9kZWwsXG5cdFx0ZGF0YU1vZGVsUGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pixcblx0XHRoYXNTZW1hbnRpY09iamVjdHMsXG5cdFx0aGFzUXVpY2tWaWV3XG5cdCk7XG5cdGlmIChyZXN1bHRGaWVsZC5oYXNRdWlja1ZpZXcpIHtcblx0XHRyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUgPSBcIkxpbmtXaXRoUXVpY2tWaWV3XCI7XG5cdH1cblx0cmV0dXJuIHJlc3VsdEZpZWxkO1xufVxuXG4vKipcbiAqIFRoaXMgZGV0ZXJtaW5lcyB3aGV0aGVyIHdlIHNob3VsZCBhZGQgYSBkcmFmdCBpbmRpY2F0b3Igd2l0aGluIHRoZSBmaWVsZCB0ZW1wbGF0ZS5cbiAqIEBwYXJhbSBkYXRhTW9kZWxQYXRoIERhdGFNb2RlbE9iamVjdFBhdGggcG9pbnRpbmcgdG8gdGhlIG1haW4gcHJvcGVydHkgZm9yIHRoZSBmaWVsZFxuICogQHBhcmFtIGZpZWxkXG4gKi9cbmZ1bmN0aW9uIHNldFVwRHJhZnRJbmRpY2F0b3IoZGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sIGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IHZvaWQge1xuXHRpZiAoaXNTZW1hbnRpY0tleShkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCBhcyBQcm9wZXJ0eSwgZGF0YU1vZGVsUGF0aCkpIHtcblx0XHRmaWVsZC5oYXNTaXR1YXRpb25zSW5kaWNhdG9yID0gU2l0dWF0aW9uc0luZGljYXRvci5nZXRTaXR1YXRpb25zTmF2aWdhdGlvblByb3BlcnR5KGRhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5VHlwZSkgIT09IHVuZGVmaW5lZDtcblx0XHRpZiAoXG5cdFx0XHQoZGF0YU1vZGVsUGF0aC5jb250ZXh0TG9jYXRpb24/LnRhcmdldEVudGl0eVNldCBhcyBFbnRpdHlTZXQgfCB1bmRlZmluZWQpPy5hbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdFJvb3QgJiZcblx0XHRcdChkYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVNldCBhcyBFbnRpdHlTZXQgfCB1bmRlZmluZWQpPy5hbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdFJvb3QgJiZcblx0XHRcdGZpZWxkLmZvcm1hdE9wdGlvbnM/Lmhhc0RyYWZ0SW5kaWNhdG9yID09PSB0cnVlXG5cdFx0KSB7XG5cdFx0XHQvLyBJbiBjYXNlIG9mIGEgZ3JpZCB0YWJsZSBvciB0cmVlIHRhYmxlIGhhc0RyYWZ0SW5kaWNhdG9yIHdpbGwgYmUgZmFsc2Ugc2luY2UgdGhlIGRyYWZ0XG5cdFx0XHQvLyBpbmRpY2F0b3IgbmVlZHMgdG8gYmUgcmVuZGVyZWQgaW50byBhIHNlcGFyYXRlIGNvbHVtblxuXHRcdFx0Ly8gSGVuY2Ugd2UgdGhlbiBmYWxsIGJhY2sgdG8gZGlzcGxheSBzdHlsZXMgT2JqZWN0SWRlbnRpZmllciBvciBMYWJlbFNlbWFudGljS2V5IGluc3RlYWRcblx0XHRcdC8vIG9mIHRoZSBjb21iaW5lZCBJRCBhbmQgZHJhZnQgaW5kaWNhdG9yIHN0eWxlXG5cdFx0XHRmaWVsZC5kcmFmdEluZGljYXRvclZpc2libGUgPSBnZXREcmFmdEluZGljYXRvclZpc2libGVCaW5kaW5nKGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0Py5uYW1lKSBhcyBzdHJpbmc7XG5cdFx0XHRmaWVsZC5hZGREcmFmdEluZGljYXRvciA9IHRydWU7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRVcEVkaXRTdHlsZShmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMsIGFwcENvbXBvbmVudD86IEFwcENvbXBvbmVudCk6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzIHtcblx0Y29uc3QgcmVzdWx0RmllbGQgPSBmaWVsZDtcblx0c2V0RWRpdFN0eWxlUHJvcGVydGllcyhyZXN1bHRGaWVsZCwgcmVzdWx0RmllbGQuY29udmVydGVkTWV0YVBhdGgsIHJlc3VsdEZpZWxkLmRhdGFNb2RlbFBhdGgpO1xuXHRyZXN1bHRGaWVsZC5maWVsZEdyb3VwSWRzID0gY29tcHV0ZUZpZWxkR3JvdXBJZHMocmVzdWx0RmllbGQsIGFwcENvbXBvbmVudCk7XG5cdHJldHVybiByZXN1bHRGaWVsZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFVwT2JqZWN0SWRlbnRpZmllclRpdGxlQW5kVGV4dChcblx0ZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzLFxuXHRwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+XG4pOiB2b2lkIHtcblx0Y29uc3Qgc2VtYW50aWNTdHlsZSA9IGZpZWxkLmZvcm1hdE9wdGlvbnM/LnNlbWFudGljS2V5U3R5bGU7XG5cdGNvbnN0IGRpc3BsYXlNb2RlID0gZmllbGQuZm9ybWF0T3B0aW9ucy5kaXNwbGF5TW9kZTtcblx0ZmllbGQuaWRlbnRpZmllclRpdGxlID0gZ2V0VGl0bGVCaW5kaW5nRXhwcmVzc2lvbihcblx0XHRwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0Z2V0VGV4dEJpbmRpbmdFeHByZXNzaW9uLFxuXHRcdHsgZGlzcGxheU1vZGUsIHNwbGl0VGl0bGVPblR3b0xpbmVzOiBmaWVsZC5mb3JtYXRPcHRpb25zLnNlbWFudGljS2V5U3R5bGUgPT09IFwiT2JqZWN0SWRlbnRpZmllclwiIH0sXG5cdFx0dW5kZWZpbmVkLFxuXHRcdHVuZGVmaW5lZFxuXHQpO1xuXHRmaWVsZC5pZGVudGlmaWVyVGV4dCA9XG5cdFx0c2VtYW50aWNTdHlsZSA9PT0gXCJPYmplY3RJZGVudGlmaWVyXCIgPyBnZXRPYmplY3RJZGVudGlmaWVyVGV4dChmaWVsZC5mb3JtYXRPcHRpb25zLCBwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgpIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0VXBGb3JtYXRPcHRpb25zKFxuXHRmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMsXG5cdGRhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRjb250cm9sQ29uZmlndXJhdGlvbjogVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncyxcblx0dmlld0RhdGFNb2RlbDogSlNPTk1vZGVsXG4pOiB2b2lkIHtcblx0Y29uc3Qgb3ZlcnJpZGVQcm9wcyA9IGdldE92ZXJyaWRlcyhjb250cm9sQ29uZmlndXJhdGlvbiwgKGZpZWxkLm1ldGFQYXRoQ29udGV4dCA/IGZpZWxkLm1ldGFQYXRoQ29udGV4dCA6IGZpZWxkLm1ldGFQYXRoKS5nZXRQYXRoKCkpO1xuXG5cdGlmICghZmllbGQuZm9ybWF0T3B0aW9ucy5kaXNwbGF5TW9kZSkge1xuXHRcdGZpZWxkLmZvcm1hdE9wdGlvbnMuZGlzcGxheU1vZGUgPSBVSUZvcm1hdHRlcnMuZ2V0RGlzcGxheU1vZGUoZGF0YU1vZGVsUGF0aCk7XG5cdH1cblx0aWYgKGZpZWxkLmZvcm1hdE9wdGlvbnMuZGlzcGxheU1vZGUgPT09IFwiRGVzY3JpcHRpb25cIikge1xuXHRcdGZpZWxkLnZhbHVlQXNTdHJpbmdCaW5kaW5nRXhwcmVzc2lvbiA9IGZpZWxkLnZhbHVlXG5cdFx0XHQ/IGZpZWxkLnZhbHVlXG5cdFx0XHQ6IGdldFZhbHVlQmluZGluZyhkYXRhTW9kZWxQYXRoLCBmaWVsZC5mb3JtYXRPcHRpb25zLCB0cnVlLCB0cnVlLCB1bmRlZmluZWQsIHRydWUpO1xuXHR9XG5cdGZpZWxkLmZvcm1hdE9wdGlvbnMudGV4dExpbmVzRWRpdCA9XG5cdFx0KG92ZXJyaWRlUHJvcHMgYXMgdW5rbm93biBhcyBGaWVsZEZvcm1hdE9wdGlvbnMpLnRleHRMaW5lc0VkaXQgfHxcblx0XHQob3ZlcnJpZGVQcm9wcy5mb3JtYXRPcHRpb25zICYmIG92ZXJyaWRlUHJvcHMuZm9ybWF0T3B0aW9ucy50ZXh0TGluZXNFZGl0KSB8fFxuXHRcdGZpZWxkLmZvcm1hdE9wdGlvbnMudGV4dExpbmVzRWRpdCB8fFxuXHRcdDQ7XG5cdGZpZWxkLmZvcm1hdE9wdGlvbnMudGV4dE1heExpbmVzID1cblx0XHQob3ZlcnJpZGVQcm9wcyBhcyB1bmtub3duIGFzIEZpZWxkRm9ybWF0T3B0aW9ucykudGV4dE1heExpbmVzIHx8XG5cdFx0KG92ZXJyaWRlUHJvcHMuZm9ybWF0T3B0aW9ucyAmJiBvdmVycmlkZVByb3BzLmZvcm1hdE9wdGlvbnMudGV4dE1heExpbmVzKSB8fFxuXHRcdGZpZWxkLmZvcm1hdE9wdGlvbnMudGV4dE1heExpbmVzO1xuXG5cdC8vIFJldHJpZXZlIHRleHQgZnJvbSB2YWx1ZSBsaXN0IGFzIGZhbGxiYWNrIGZlYXR1cmUgZm9yIG1pc3NpbmcgdGV4dCBhbm5vdGF0aW9uIG9uIHRoZSBwcm9wZXJ0eVxuXHRpZiAodmlld0RhdGFNb2RlbD8uZ2V0UHJvcGVydHkoXCIvcmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdFwiKSkge1xuXHRcdGZpZWxkLmZvcm1hdE9wdGlvbnMucmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCA9IGlzUmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdEVuYWJsZWQoXG5cdFx0XHRkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCEsXG5cdFx0XHRmaWVsZC5mb3JtYXRPcHRpb25zXG5cdFx0KTtcblx0XHRpZiAoZmllbGQuZm9ybWF0T3B0aW9ucy5yZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0KSB7XG5cdFx0XHQvLyBDb25zaWRlciBUZXh0QXJyYW5nZW1lbnQgYXQgRW50aXR5VHlwZSBvdGhlcndpc2Ugc2V0IGRlZmF1bHQgZGlzcGxheSBmb3JtYXQgJ0Rlc2NyaXB0aW9uVmFsdWUnXG5cdFx0XHRjb25zdCBoYXNFbnRpdHlUZXh0QXJyYW5nZW1lbnQgPSAhIWRhdGFNb2RlbFBhdGg/LnRhcmdldEVudGl0eVR5cGU/LmFubm90YXRpb25zPy5VST8uVGV4dEFycmFuZ2VtZW50O1xuXHRcdFx0ZmllbGQuZm9ybWF0T3B0aW9ucy5kaXNwbGF5TW9kZSA9IGhhc0VudGl0eVRleHRBcnJhbmdlbWVudCA/IGZpZWxkLmZvcm1hdE9wdGlvbnMuZGlzcGxheU1vZGUgOiBcIkRlc2NyaXB0aW9uVmFsdWVcIjtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFVwVmFsdWVTdGF0ZShmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGxldCB2YWx1ZVN0YXRlRXhwO1xuXHRjb25zdCBmaWVsZENvbnRhaW5lclR5cGUgPSBmaWVsZC5mb3JtYXRPcHRpb25zPy50ZXh0QWxpZ25Nb2RlID8gZmllbGQuZm9ybWF0T3B0aW9ucz8udGV4dEFsaWduTW9kZSA6IFwiRm9ybVwiO1xuXHRjb25zdCBwcm9wZXJ0eVBhdGhJbk1vZGVsID0gcGF0aEluTW9kZWwoZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aChmaWVsZC5kYXRhTW9kZWxQYXRoKSkgYXMgUGF0aEluTW9kZWxFeHByZXNzaW9uPFByb3BlcnR5Pjtcblx0Y29uc3QgcmVsYXRpdmVMb2NhdGlvbiA9IGdldFJlbGF0aXZlUGF0aHMoZmllbGQuZGF0YU1vZGVsUGF0aCk7XG5cdGNvbnN0IHRleHRQYXRoID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGZpZWxkLmRhdGFNb2RlbFBhdGg/LnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dCwgcmVsYXRpdmVMb2NhdGlvbik7XG5cdGNvbnN0IHByb3BlcnR5UGF0aCA9IGZpZWxkLmRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0Py5uYW1lO1xuXHRjb25zdCByZWNvbW1lbmRhdGlvblZhbHVlID0gcGF0aEluTW9kZWwoYCR7cHJvcGVydHlQYXRofUAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy5wbGFjZWhvbGRlclZhbHVlYCk7XG5cdGNvbnN0IHJlY29tbWVuZGF0aW9uRGVzY3JpcHRpb24gPSBwYXRoSW5Nb2RlbChgJHtwcm9wZXJ0eVBhdGh9QCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnBsYWNlaG9sZGVyRGVzY3JpcHRpb25gKTtcblx0aWYgKGZpZWxkQ29udGFpbmVyVHlwZSA9PT0gXCJUYWJsZVwiKSB7XG5cdFx0dmFsdWVTdGF0ZUV4cCA9IGZvcm1hdFJlc3VsdChcblx0XHRcdFtcblx0XHRcdFx0cmVjb21tZW5kYXRpb25WYWx1ZSxcblx0XHRcdFx0cmVjb21tZW5kYXRpb25EZXNjcmlwdGlvbixcblx0XHRcdFx0cGF0aEluTW9kZWwoYC9yZWNvbW1lbmRhdGlvbnNEYXRhYCwgXCJpbnRlcm5hbFwiKSxcblx0XHRcdFx0cGF0aEluTW9kZWwoYC9pc0VkaXRhYmxlYCwgXCJ1aVwiKSxcblx0XHRcdFx0ZmllbGQuZGF0YVNvdXJjZVBhdGgsXG5cdFx0XHRcdHByb3BlcnR5UGF0aEluTW9kZWwsXG5cdFx0XHRcdHRleHRQYXRoXG5cdFx0XHRdLFxuXHRcdFx0YWRkaXRpb25hbFZhbHVlRm9ybWF0dGVyLmZvcm1hdFZhbHVlU3RhdGUsXG5cdFx0XHRmaWVsZC5kYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVR5cGVcblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdHZhbHVlU3RhdGVFeHAgPSBmb3JtYXRSZXN1bHQoXG5cdFx0XHRbXG5cdFx0XHRcdHJlY29tbWVuZGF0aW9uVmFsdWUsXG5cdFx0XHRcdHJlY29tbWVuZGF0aW9uRGVzY3JpcHRpb24sXG5cdFx0XHRcdHBhdGhJbk1vZGVsKGAvcmVjb21tZW5kYXRpb25zRGF0YWAsIFwiaW50ZXJuYWxcIiksXG5cdFx0XHRcdHBhdGhJbk1vZGVsKGAvaXNFZGl0YWJsZWAsIFwidWlcIiksXG5cdFx0XHRcdGZpZWxkLmRhdGFTb3VyY2VQYXRoLFxuXHRcdFx0XHRwcm9wZXJ0eVBhdGhJbk1vZGVsLFxuXHRcdFx0XHR0ZXh0UGF0aFxuXHRcdFx0XSxcblx0XHRcdGFkZGl0aW9uYWxWYWx1ZUZvcm1hdHRlci5mb3JtYXRWYWx1ZVN0YXRlXG5cdFx0KTtcblx0fVxuXG5cdGZpZWxkLnZhbHVlU3RhdGUgPSBjb21waWxlRXhwcmVzc2lvbih2YWx1ZVN0YXRlRXhwKTtcblx0cmV0dXJuIGZpZWxkLnZhbHVlU3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRVcFZpc2libGVQcm9wZXJ0aWVzKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IHZvaWQge1xuXHQvLyB3ZSBkbyB0aGlzIGJlZm9yZSBlbmhhbmNpbmcgdGhlIGRhdGFNb2RlbFBhdGggc28gdGhhdCBpdCBzdGlsbCBwb2ludHMgYXQgdGhlIERhdGFGaWVsZFxuXHQvLyBjb25zdCB2aXNpYmxlUHJvcGVydGllczogUGFydGlhbDxmaWVsZEJsb2NrPiA9IHt9O1xuXHRjb25zdCBwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGggPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+KFxuXHRcdGZpZWxkLm1ldGFQYXRoQ29udGV4dCA/IGZpZWxkLm1ldGFQYXRoQ29udGV4dCA6IGZpZWxkLm1ldGFQYXRoLFxuXHRcdGZpZWxkLmNvbnRleHRQYXRoXG5cdCk7XG5cblx0ZmllbGQudmlzaWJsZSA/Pz0gZ2V0VmlzaWJsZUV4cHJlc3Npb24ocHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLCBmaWVsZC5mb3JtYXRPcHRpb25zKTtcblx0ZmllbGQuZGlzcGxheVZpc2libGUgPSBmaWVsZC5mb3JtYXRPcHRpb25zPy5maWVsZE1vZGUgPT09IFwibm93cmFwcGVyXCIgPyBmaWVsZC52aXNpYmxlIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBnZXRDb250ZW50SWQobWFjcm9JZDogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIGAke21hY3JvSWR9LWNvbnRlbnRgO1xufVxuXG4vKipcbiAqIENvbXB1dGVzIHByb3BlcnRpZXMgZm9yIHRoZSBmaWxlIHRlbXBsYXRpbmcuXG4gKiBAcGFyYW0gZmllbGQgVGhlIGZpZWxkXG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVGaWxlVXBsb2FkZXJQcm9wZXJ0aWVzKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IHZvaWQge1xuXHRpZiAoZmllbGQuZGlzcGxheVN0eWxlID09PSBcIkZpbGVcIikge1xuXHRcdGZpZWxkLmZpbGVSZWxhdGl2ZVByb3BlcnR5UGF0aCA9IGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgoZmllbGQuZGF0YU1vZGVsUGF0aCkgfHwgXCJcIjtcblx0XHRjb25zdCBmaWxlTmFtZUFubm90YXRpb24gPSBmaWVsZC5wcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db3JlPy5Db250ZW50RGlzcG9zaXRpb24/LkZpbGVuYW1lO1xuXHRcdGlmIChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihmaWxlTmFtZUFubm90YXRpb24pKSB7XG5cdFx0XHRjb25zdCBmaWxlTmFtZURhdGFNb2RlbFBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aChmaWVsZC5kYXRhTW9kZWxQYXRoLCBmaWxlTmFtZUFubm90YXRpb24ucGF0aCk7XG5cdFx0XHRmaWVsZC5maWxlRmlsZW5hbWVFeHByZXNzaW9uID0gZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aChmaWxlTmFtZURhdGFNb2RlbFBhdGgpID8/IFwiXCI7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQ29tcHV0ZXMgcHJvcGVydGllcyBmb3IgdGhlIGlubGluZSBlZGl0IHRlbXBsYXRpbmcuXG4gKiBAcGFyYW0gZmllbGQgVGhlIGZpZWxkXG4gKiBAcGFyYW0gdmlld0RhdGFNb2RlbFxuICovXG5mdW5jdGlvbiBjb21wdXRlSW5saW5lRWRpdFByb3BlcnRpZXMoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzLCB2aWV3RGF0YU1vZGVsOiBKU09OTW9kZWwpOiB2b2lkIHtcblx0aWYgKGZpZWxkLmRpc3BsYXlTdHlsZSA9PT0gXCJGaWxlXCIgfHwgZmllbGQuZGlzcGxheVN0eWxlID09PSBcIkF2YXRhclwiKSB7XG5cdFx0ZmllbGQuaW5saW5lRWRpdEVuYWJsZWQgPSB1bmRlZmluZWQ7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGZpZWxkLmlubGluZUVkaXRFbmFibGVkID1cblx0XHRmaWVsZC5pbmxpbmVFZGl0RW5hYmxlZCA9PT0gdHJ1ZSB8fCB2aWV3RGF0YU1vZGVsPy5nZXRQcm9wZXJ0eShcIi9pc0lubGluZUVkaXRFbmFibGVkXCIpID09PSB0cnVlID8gdHJ1ZSA6IHVuZGVmaW5lZDtcblx0aWYgKGZpZWxkLmlubGluZUVkaXRFbmFibGVkICYmIGZpZWxkLmVkaXRNb2RlQXNPYmplY3QgIT09IFwiRGlzcGxheVwiKSB7XG5cdFx0Y29uc3QgY29tcHV0ZWRFZGl0YWJsZUV4cHJlc3Npb24gPSBVSUZvcm1hdHRlcnMuZ2V0RWRpdGFibGVFeHByZXNzaW9uQXNPYmplY3QoXG5cdFx0XHRmaWVsZC5wcm9wZXJ0eUZvckZpZWxkQ29udHJvbCxcblx0XHRcdGZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoLFxuXHRcdFx0ZmllbGQuZGF0YU1vZGVsUGF0aFxuXHRcdCk7XG5cblx0XHRmaWVsZC5oYXNJbmxpbmVFZGl0ID0gdHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRjb21wdXRlZEVkaXRhYmxlRXhwcmVzc2lvbixcblx0XHRcdFwiUGF0aEluTW9kZWxcIixcblx0XHRcdChleHByKSA9PiB7XG5cdFx0XHRcdGlmIChleHByLnBhdGggPT09IFwiaXNFZGl0YWJsZVwiICYmIGV4cHIubW9kZWxOYW1lID09PSBcInVpXCIpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGV4cHI7XG5cdFx0XHR9LFxuXHRcdFx0dHJ1ZVxuXHRcdCkgYXMgdW5rbm93biBhcyBib29sZWFuO1xuXHR9XG59XG5cbmNvbnN0IEZpZWxkU3RydWN0dXJlSGVscGVyID0ge1xuXHRnZXREZWNpbWFsUGFkZGluZyxcblx0c2V0VXBGaWVsZCxcblx0Y29tcHV0ZUV4dGVybmFsSUQsXG5cdHNldFVwRGlzcGxheVN0eWxlLFxuXHRzZXRVcE9iamVjdElkZW50aWZpZXJUaXRsZUFuZFRleHQsXG5cdHNldFVwVmFsdWVTdGF0ZVxufTtcbmV4cG9ydCBkZWZhdWx0IEZpZWxkU3RydWN0dXJlSGVscGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUF5TU8sU0FBU0EsVUFBVUEsQ0FDekJDLEtBQWdDLEVBQ2hDQyxvQkFBK0MsRUFDL0NDLGFBQXdCLEVBQ3hCQyxhQUF3QixFQUN4QkMsWUFBMEIsRUFDMUJDLGlCQUEyQixFQUMzQkMsUUFBOEIsRUFDOUJDLFdBQWlDLEVBQ1Y7SUFDdkIsTUFBTUMsV0FBVyxHQUFHO01BQUUsR0FBR1I7SUFBTSxDQUFvQztJQUNuRVMsTUFBTSxDQUFDQyxjQUFjLENBQUNGLFdBQVcsRUFBRSxPQUFPLEVBQUU7TUFDM0NHLEdBQUcsRUFBRUEsQ0FBQSxLQUFNO1FBQ1YsT0FBT1gsS0FBSyxDQUFDWSxLQUFLO01BQ25CO0lBQ0QsQ0FBQyxDQUFDO0lBQ0ZILE1BQU0sQ0FBQ0MsY0FBYyxDQUFDRixXQUFXLEVBQUUsYUFB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QUFLLENBQUNrQyxhQUFhLEVBQUV5USxrQkFBa0IsQ0FBQ08sSUFBSSxDQUFDO1FBQ2hHbFQsS0FBSyxDQUFDbVQsc0JBQXNCLEdBQUd0SixrQ0FBa0MsQ0FBQ21KLHFCQUFxQixDQUFDLElBQUksRUFBRTtNQUMvRjtJQUNEO0VBQ0Q7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNuUCwyQkFBMkJBLENBQUM3RCxLQUEyQixFQUFFRSxhQUF3QixFQUFRO0lBQ2pHLElBQUlGLEtBQUssQ0FBQytELFlBQVksS0FBSyxNQUFNLElBQUkvRCxLQUFLLENBQUMrRCxZQUFZLEtBQUssUUFBUSxFQUFFO01BQ3JFL0QsS0FBSyxDQUFDb1QsaUJBQWlCLEdBQUc1TyxTQUFTO01BQ25DO0lBQ0Q7SUFDQXhFLEtBQUssQ0FBQ29ULGlCQUFpQixHQUN0QnBULEtBQUssQ0FBQ29ULGlCQUFpQixLQUFLLElBQUksSUFBSWxULGFBQWEsRUFBRXFCLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLElBQUksR0FBRyxJQUFJLEdBQUdpRCxTQUFTO0lBQ25ILElBQUl4RSxLQUFLLENBQUNvVCxpQkFBaUIsSUFBSXBULEtBQUssQ0FBQ3FILGdCQUFnQixLQUFLLFNBQVMsRUFBRTtNQUNwRSxNQUFNakIsMEJBQTBCLEdBQUdDLFlBQVksQ0FBQ0MsNkJBQTZCLENBQzVFdEcsS0FBSyxDQUFDdUcsdUJBQXVCLEVBQzdCdkcsS0FBSyxDQUFDNEIsaUJBQWlCLEVBQ3ZCNUIsS0FBSyxDQUFDa0MsYUFDUCxDQUFDO01BRURsQyxLQUFLLENBQUNxVCxhQUFhLEdBQUdDLG9CQUFvQixDQUN6Q2xOLDBCQUEwQixFQUMxQixhQUFhLEVBQ1ptTixJQUFJLElBQUs7UUFDVCxJQUFJQSxJQUFJLENBQUNMLElBQUksS0FBSyxZQUFZLElBQUlLLElBQUksQ0FBQ0MsU0FBUyxLQUFLLElBQUksRUFBRTtVQUMxRCxPQUFPck0sUUFBUSxDQUFDLElBQUksQ0FBQztRQUN0QjtRQUNBLE9BQU9vTSxJQUFJO01BQ1osQ0FBQyxFQUNELElBQ0QsQ0FBdUI7SUFDeEI7RUFDRDtFQUVBLE1BQU1uRCxvQkFBb0IsR0FBRztJQUM1QmpDLGlCQUFpQjtJQUNqQnBPLFVBQVU7SUFDVndDLGlCQUFpQjtJQUNqQmEsaUJBQWlCO0lBQ2pCd00saUNBQWlDO0lBQ2pDcE07RUFDRCxDQUFDO0VBQUMsT0FDYTRNLG9CQUFvQjtBQUFBIiwiaWdub3JlTGlzdCI6W119