@sapui5/sap.fe.macros 1.138.0 → 1.139.1

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 (210) 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 +269 -0
  4. package/src/sap/fe/macros/Breadcrumbs.tsx +243 -0
  5. package/src/sap/fe/macros/Chart.js +1 -1
  6. package/src/sap/fe/macros/Chart.tsx +1 -1
  7. package/src/sap/fe/macros/CommonHelper.js +2 -2
  8. package/src/sap/fe/macros/CommonHelper.ts +1 -1
  9. package/src/sap/fe/macros/Field.js +21 -4
  10. package/src/sap/fe/macros/Field.ts +21 -3
  11. package/src/sap/fe/macros/FooterContent.js +40 -10
  12. package/src/sap/fe/macros/FooterContent.tsx +44 -8
  13. package/src/sap/fe/macros/FormElement.js +2 -2
  14. package/src/sap/fe/macros/FormElement.ts +1 -2
  15. package/src/sap/fe/macros/MultiValueField.js +17 -4
  16. package/src/sap/fe/macros/MultiValueField.tsx +7 -2
  17. package/src/sap/fe/macros/RichTextEditor.js +30 -6
  18. package/src/sap/fe/macros/RichTextEditor.tsx +34 -7
  19. package/src/sap/fe/macros/Share.js +73 -40
  20. package/src/sap/fe/macros/Share.tsx +29 -1
  21. package/src/sap/fe/macros/ValueHelp.js +4 -29
  22. package/src/sap/fe/macros/ValueHelp.tsx +2 -43
  23. package/src/sap/fe/macros/ai/EasyFillButton.js +10 -4
  24. package/src/sap/fe/macros/ai/EasyFillButton.tsx +8 -1
  25. package/src/sap/fe/macros/ai/EasyFillDialog.js +25 -10
  26. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +32 -23
  27. package/src/sap/fe/macros/ai/EasyFilterBar.js +30 -30
  28. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +40 -43
  29. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +11 -5
  30. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +14 -5
  31. package/src/sap/fe/macros/chart/ChartDelegate.js +4 -4
  32. package/src/sap/fe/macros/chart/ChartDelegate.ts +3 -3
  33. package/src/sap/fe/macros/chart/MdcChartTemplate.js +20 -6
  34. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +16 -8
  35. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +5 -1
  36. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +4 -0
  37. package/src/sap/fe/macros/controls/FieldWrapper.js +9 -3
  38. package/src/sap/fe/macros/controls/FieldWrapper.ts +11 -2
  39. package/src/sap/fe/macros/controls/FilterBar.js +86 -3
  40. package/src/sap/fe/macros/controls/FilterBar.ts +97 -2
  41. package/src/sap/fe/macros/controls/RequiredFlexBox.js +62 -0
  42. package/src/sap/fe/macros/controls/RequiredFlexBox.tsx +20 -0
  43. package/src/sap/fe/macros/controls/Section.js +3 -2
  44. package/src/sap/fe/macros/controls/Section.ts +2 -1
  45. package/src/sap/fe/macros/controls/filterbar/VisualFilter.js +21 -11
  46. package/src/sap/fe/macros/controls/filterbar/VisualFilter.ts +25 -11
  47. package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.js +11 -2
  48. package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.ts +12 -1
  49. package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.js +18 -1
  50. package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.ts +20 -0
  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/designtime/Designtime.helper.js +12 -2
  54. package/src/sap/fe/macros/designtime/Designtime.helper.ts +12 -0
  55. package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +16 -5
  56. package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +6 -1
  57. package/src/sap/fe/macros/field/FieldBaseDelegate.js +20 -8
  58. package/src/sap/fe/macros/field/FieldBaseDelegate.ts +34 -9
  59. package/src/sap/fe/macros/field/FieldFormatOptions.js +73 -44
  60. package/src/sap/fe/macros/field/FieldFormatOptions.ts +20 -2
  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/filter/FilterUtils.js +7 -1
  64. package/src/sap/fe/macros/filter/FilterUtils.ts +7 -0
  65. package/src/sap/fe/macros/filterBar/FilterBar.block.js +8 -2
  66. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +2 -5
  67. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +8 -8
  68. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +8 -8
  69. package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.js +3 -1
  70. package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.ts +2 -0
  71. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +1 -1
  72. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +1 -1
  73. package/src/sap/fe/macros/form/Form.block.js +6 -2
  74. package/src/sap/fe/macros/form/Form.block.ts +4 -1
  75. package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -2
  76. package/src/sap/fe/macros/form/FormContainer.fragment.xml +40 -0
  77. package/src/sap/fe/macros/form/FormContainerAPI.js +14 -16
  78. package/src/sap/fe/macros/form/FormContainerAPI.ts +13 -15
  79. package/src/sap/fe/macros/form/FormDelegate.js +20 -1
  80. package/src/sap/fe/macros/form/FormDelegate.ts +25 -0
  81. package/src/sap/fe/macros/formatters/TableFormatter.js +10 -1
  82. package/src/sap/fe/macros/formatters/TableFormatter.ts +14 -5
  83. package/src/sap/fe/macros/inlineEdit/InlineEdit.js +15 -3
  84. package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +14 -2
  85. package/src/sap/fe/macros/internal/DataPoint.js +2 -1
  86. package/src/sap/fe/macros/internal/DataPoint.tsx +1 -0
  87. package/src/sap/fe/macros/internal/DataPointFormatOptions.js +11 -2
  88. package/src/sap/fe/macros/internal/DataPointFormatOptions.ts +3 -0
  89. package/src/sap/fe/macros/internal/FilterField.block.js +4 -2
  90. package/src/sap/fe/macros/internal/FilterField.block.ts +3 -1
  91. package/src/sap/fe/macros/internal/field/CheckBoxGroup.fragment.xml +25 -0
  92. package/src/sap/fe/macros/internal/field/DisplayStyle.js +52 -12
  93. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +54 -5
  94. package/src/sap/fe/macros/internal/field/EditStyle.js +5 -1
  95. package/src/sap/fe/macros/internal/field/EditStyle.tsx +4 -0
  96. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +9 -2
  97. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +10 -0
  98. package/src/sap/fe/macros/internal/field/FieldStyles.js +1 -1
  99. package/src/sap/fe/macros/internal/field/FieldStyles.tsx +2 -1
  100. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
  101. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +3 -3
  102. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +1 -0
  103. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +11 -3
  104. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +12 -7
  105. package/src/sap/fe/macros/internal/valuehelp/ValueListTable.fragment.xml +1 -0
  106. package/src/sap/fe/macros/library.js +1 -1
  107. package/src/sap/fe/macros/mdc/adapter/StateHelper.js +11 -6
  108. package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +12 -7
  109. package/src/sap/fe/macros/messagebundle.properties +37 -29
  110. package/src/sap/fe/macros/messagebundle_ar.properties +5 -3
  111. package/src/sap/fe/macros/messagebundle_bg.properties +6 -4
  112. package/src/sap/fe/macros/messagebundle_ca.properties +8 -6
  113. package/src/sap/fe/macros/messagebundle_cnr.properties +5 -3
  114. package/src/sap/fe/macros/messagebundle_cs.properties +4 -2
  115. package/src/sap/fe/macros/messagebundle_cy.properties +7 -5
  116. package/src/sap/fe/macros/messagebundle_da.properties +6 -4
  117. package/src/sap/fe/macros/messagebundle_de.properties +11 -9
  118. package/src/sap/fe/macros/messagebundle_el.properties +7 -5
  119. package/src/sap/fe/macros/messagebundle_en.properties +8 -6
  120. package/src/sap/fe/macros/messagebundle_en_GB.properties +8 -6
  121. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +8 -6
  122. package/src/sap/fe/macros/messagebundle_es.properties +6 -4
  123. package/src/sap/fe/macros/messagebundle_es_MX.properties +6 -4
  124. package/src/sap/fe/macros/messagebundle_et.properties +5 -3
  125. package/src/sap/fe/macros/messagebundle_fi.properties +8 -6
  126. package/src/sap/fe/macros/messagebundle_fr.properties +6 -4
  127. package/src/sap/fe/macros/messagebundle_fr_CA.properties +8 -6
  128. package/src/sap/fe/macros/messagebundle_hi.properties +6 -4
  129. package/src/sap/fe/macros/messagebundle_hr.properties +6 -4
  130. package/src/sap/fe/macros/messagebundle_hu.properties +4 -2
  131. package/src/sap/fe/macros/messagebundle_id.properties +8 -6
  132. package/src/sap/fe/macros/messagebundle_it.properties +4 -2
  133. package/src/sap/fe/macros/messagebundle_iw.properties +5 -3
  134. package/src/sap/fe/macros/messagebundle_ja.properties +5 -3
  135. package/src/sap/fe/macros/messagebundle_kk.properties +5 -3
  136. package/src/sap/fe/macros/messagebundle_ko.properties +4 -2
  137. package/src/sap/fe/macros/messagebundle_lt.properties +6 -4
  138. package/src/sap/fe/macros/messagebundle_lv.properties +5 -3
  139. package/src/sap/fe/macros/messagebundle_mk.properties +5 -3
  140. package/src/sap/fe/macros/messagebundle_ms.properties +8 -6
  141. package/src/sap/fe/macros/messagebundle_nl.properties +7 -5
  142. package/src/sap/fe/macros/messagebundle_no.properties +6 -4
  143. package/src/sap/fe/macros/messagebundle_pl.properties +6 -4
  144. package/src/sap/fe/macros/messagebundle_pt.properties +7 -5
  145. package/src/sap/fe/macros/messagebundle_pt_PT.properties +6 -4
  146. package/src/sap/fe/macros/messagebundle_ro.properties +7 -5
  147. package/src/sap/fe/macros/messagebundle_ru.properties +4 -2
  148. package/src/sap/fe/macros/messagebundle_sh.properties +5 -3
  149. package/src/sap/fe/macros/messagebundle_sk.properties +5 -3
  150. package/src/sap/fe/macros/messagebundle_sl.properties +6 -4
  151. package/src/sap/fe/macros/messagebundle_sr.properties +5 -3
  152. package/src/sap/fe/macros/messagebundle_sv.properties +5 -3
  153. package/src/sap/fe/macros/messagebundle_th.properties +4 -2
  154. package/src/sap/fe/macros/messagebundle_tr.properties +4 -2
  155. package/src/sap/fe/macros/messagebundle_uk.properties +10 -8
  156. package/src/sap/fe/macros/messagebundle_vi.properties +6 -4
  157. package/src/sap/fe/macros/messagebundle_zh_CN.properties +5 -3
  158. package/src/sap/fe/macros/messagebundle_zh_TW.properties +5 -3
  159. package/src/sap/fe/macros/messages/MessageButton.js +17 -19
  160. package/src/sap/fe/macros/messages/MessageButton.ts +24 -22
  161. package/src/sap/fe/macros/table/Action.js +24 -2
  162. package/src/sap/fe/macros/table/Action.ts +13 -0
  163. package/src/sap/fe/macros/table/ActionGroup.js +24 -2
  164. package/src/sap/fe/macros/table/ActionGroup.ts +13 -0
  165. package/src/sap/fe/macros/table/ActionGroupOverride.js +24 -2
  166. package/src/sap/fe/macros/table/ActionGroupOverride.ts +13 -0
  167. package/src/sap/fe/macros/table/ActionOverride.js +24 -2
  168. package/src/sap/fe/macros/table/ActionOverride.ts +13 -0
  169. package/src/sap/fe/macros/table/ActionsTemplating.js +73 -12
  170. package/src/sap/fe/macros/table/ActionsTemplating.tsx +69 -13
  171. package/src/sap/fe/macros/table/Column.js +3 -3
  172. package/src/sap/fe/macros/table/Column.ts +2 -2
  173. package/src/sap/fe/macros/table/MdcTableTemplate.js +20 -8
  174. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +32 -6
  175. package/src/sap/fe/macros/table/QuickFilterSelector.js +35 -14
  176. package/src/sap/fe/macros/table/QuickFilterSelector.tsx +22 -3
  177. package/src/sap/fe/macros/table/Table.block.js +137 -108
  178. package/src/sap/fe/macros/table/Table.block.tsx +29 -2
  179. package/src/sap/fe/macros/table/Table.js +7 -1
  180. package/src/sap/fe/macros/table/Table.tsx +7 -1
  181. package/src/sap/fe/macros/table/TableAPI.js +150 -133
  182. package/src/sap/fe/macros/table/TableAPI.ts +20 -3
  183. package/src/sap/fe/macros/table/TableDefinition.js +4 -2
  184. package/src/sap/fe/macros/table/TableDefinition.ts +3 -1
  185. package/src/sap/fe/macros/table/TableRuntime.js +3 -3
  186. package/src/sap/fe/macros/table/TableRuntime.ts +2 -2
  187. package/src/sap/fe/macros/table/TableSizeHelper.js +3 -3
  188. package/src/sap/fe/macros/table/TableSizeHelper.ts +5 -2
  189. package/src/sap/fe/macros/table/TreeTable.js +7 -1
  190. package/src/sap/fe/macros/table/TreeTable.tsx +7 -1
  191. package/src/sap/fe/macros/table/delegates/TableDelegate.js +27 -20
  192. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +35 -26
  193. package/src/sap/fe/macros/table/designtime/Table.designtime.js +3 -1
  194. package/src/sap/fe/macros/table/designtime/Table.designtime.ts +2 -0
  195. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +10 -10
  196. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +11 -9
  197. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +8 -8
  198. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +7 -6
  199. package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.js +3 -1
  200. package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.ts +2 -1
  201. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -1
  202. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +1 -0
  203. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +4 -1
  204. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +3 -0
  205. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +37 -8
  206. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +47 -16
  207. package/src/sap/fe/macros/visualfilters/VisualFilter.js +95 -6
  208. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +93 -2
  209. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +15 -3
  210. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +17 -2
@@ -2,7 +2,7 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/controllerextensions/collaboration/CollaborationCommon", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/converters/annotations/DataField", "sap/fe/core/formatters/CollaborationFormatter", "sap/fe/core/formatters/ValueFormatter", "sap/fe/core/helpers/BindingHelper", "sap/fe/core/helpers/MetaModelFunction", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/helpers/TitleHelper", "sap/fe/core/helpers/TypeGuards", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/templating/PropertyHelper", "sap/fe/core/templating/SemanticObjectHelper", "sap/fe/core/templating/UIFormatters", "sap/fe/macros/field/FieldTemplating", "sap/fe/macros/internal/valuehelp/AdditionalValueFormatter", "sap/fe/macros/situations/SituationsIndicator", "sap/ui/mdc/enums/FieldEditMode"], function (BindingToolkit, CollaborationCommon, MetaModelConverter, DataField, CollaborationFormatters, valueFormatters, BindingHelper, MetaModelFunction, ModelHelper, StableIdHelper, TitleHelper, TypeGuards, DataModelPathHelper, PropertyHelper, SemanticObjectHelper, UIFormatters, FieldTemplating, additionalValueFormatter, SituationsIndicator, FieldEditMode) {
5
+ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/controllerextensions/collaboration/CollaborationCommon", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/converters/annotations/DataField", "sap/fe/core/formatters/CollaborationFormatter", "sap/fe/core/formatters/ValueFormatter", "sap/fe/core/helpers/BindingHelper", "sap/fe/core/helpers/MetaModelFunction", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/helpers/TitleHelper", "sap/fe/core/helpers/TypeGuards", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/templating/PropertyHelper", "sap/fe/core/templating/SemanticObjectHelper", "sap/fe/core/templating/UIFormatters", "sap/fe/macros/field/FieldTemplating", "sap/fe/macros/internal/valuehelp/AdditionalValueFormatter", "sap/fe/macros/situations/SituationsIndicator", "sap/ui/mdc/enums/FieldEditMode", "../../field/FieldHelper"], function (BindingToolkit, CollaborationCommon, MetaModelConverter, DataField, CollaborationFormatters, valueFormatters, BindingHelper, MetaModelFunction, ModelHelper, StableIdHelper, TitleHelper, TypeGuards, DataModelPathHelper, PropertyHelper, SemanticObjectHelper, UIFormatters, FieldTemplating, additionalValueFormatter, SituationsIndicator, FieldEditMode, FieldHelper) {
6
6
  "use strict";
7
7
 
8
8
  var _exports = {};
@@ -81,6 +81,9 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/controllerextensions/c
81
81
  setUpVisibleProperties(resultField);
82
82
  computeIDs(resultField);
83
83
  resultField.dataSourcePath = getTargetObjectPath(resultField.dataModelPath);
84
+ resultField.label = FieldHelper.computeLabelText(field, {
85
+ context: resultField.metaPath
86
+ });
84
87
 
85
88
  /* EXTERNALID */
86
89
  computeExternalID(resultField);
@@ -437,6 +440,10 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/controllerextensions/c
437
440
  resultField.displayStyle = "File";
438
441
  return resultField;
439
442
  }
443
+ if (resultField.formatOptions.isFieldGroupItem && property.type === "Edm.Boolean") {
444
+ resultField.displayStyle = "CheckBoxGroupItem";
445
+ return resultField;
446
+ }
440
447
  setUpDraftIndicator(dataModelPath, resultField);
441
448
  switch (dataField.$Type) {
442
449
  case "com.sap.vocabularies.UI.v1.DataPointType":
@@ -637,4 +644,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/controllerextensions/c
637
644
  };
638
645
  return FieldStructureHelper;
639
646
  }, false);
640
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzZXRVcEZpZWxkIiwiZmllbGQiLCJjb250cm9sQ29uZmlndXJhdGlvbiIsInZpZXdEYXRhTW9kZWwiLCJpbnRlcm5hbE1vZGVsIiwiYXBwQ29tcG9uZW50IiwiaXNSZWFkT25seUluaXRpYWwiLCJtZXRhUGF0aCIsImNvbnRleHRQYXRoIiwicmVzdWx0RmllbGQiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldCIsInZhbHVlIiwiZGVzY3JpcHRpb24iLCJjaGFuZ2UiLCJ2aXNpYmxlIiwidmhJZFByZWZpeCIsIl9mbGV4SWQiLCJpZCIsImlkUHJlZml4IiwiZm9ybWF0T3B0aW9ucyIsImdldEZvcm1hdE9wdGlvbnMiLCJzaG93T25seVVuaXREZWNpbWFscyIsImdldFByb3BlcnR5IiwidmFsdWVIZWxwTWV0YVBhdGgiLCJjb21wdXRlQ29tbW9uUHJvcGVydGllcyIsImdldE1vZGVsIiwiY29udmVydGVkTWV0YVBhdGgiLCJzZXRVcERhdGFQb2ludFR5cGUiLCJzZXRVcFZpc2libGVQcm9wZXJ0aWVzIiwiY29tcHV0ZUlEcyIsImRhdGFTb3VyY2VQYXRoIiwiZ2V0VGFyZ2V0T2JqZWN0UGF0aCIsImRhdGFNb2RlbFBhdGgiLCJjb21wdXRlRXh0ZXJuYWxJRCIsImVudGl0eVR5cGUiLCJvZGF0YU1ldGFNb2RlbCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwidGFyZ2V0RW50aXR5VHlwZSIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImZvcklubGluZUNyZWF0aW9uUm93cyIsImhhc1Byb3BlcnR5SW5zZXJ0UmVzdHJpY3Rpb25zIiwiY29tcHV0ZUVkaXRNb2RlIiwiY29tcHV0ZUNvbGxhYm9yYXRpb25Qcm9wZXJ0aWVzIiwiY29tcHV0ZUVkaXRhYmxlRXhwcmVzc2lvbnMiLCJzZXRVcEZvcm1hdE9wdGlvbnMiLCJkYXRhTW9kZWxQYXRoRXh0ZXJuYWxJRCIsInNldFVwRGlzcGxheVN0eWxlIiwic2V0VXBFZGl0U3R5bGUiLCJ2YWx1ZVN0YXRlIiwic2V0VXBWYWx1ZVN0YXRlIiwiZWRpdFN0eWxlIiwiZWRpdFN0eWxlUGxhY2Vob2xkZXIiLCJzZXRJbnB1dFdpdGhWYWx1ZWhlbHBQbGFjZWhvbGRlciIsImNvbXB1dGVGaWxlVXBsb2FkZXJQcm9wZXJ0aWVzIiwiY29tcHV0ZUlubGluZUVkaXRQcm9wZXJ0aWVzIiwiYURpc3BsYXlTdHlsZXNXaXRob3V0UHJvcFRleHQiLCJkaXNwbGF5U3R5bGUiLCJpbmNsdWRlcyIsInRhcmdldE9iamVjdCIsInRleHQiLCJGaWVsZFRlbXBsYXRpbmciLCJnZXRUZXh0QmluZGluZyIsInNob3dFbXB0eUluZGljYXRvciIsImVtcHR5SW5kaWNhdG9yTW9kZSIsIlN0cmluZyIsInVuZGVmaW5lZCIsImlzUHJvcGVydHkiLCJhbm5vdGF0aW9ucyIsIlVJIiwiRGF0YUZpZWxkRGVmYXVsdCIsImNvbXB1dGVkRWRpdE1vZGUiLCJjb21waWxlRXhwcmVzc2lvbiIsImlmRWxzZSIsImVxdWFsIiwicmVhZE9ubHkiLCJldmVudEhhbmRsZXJzIiwibGl2ZUNoYW5nZSIsInZhbGlkYXRlRmllbGRHcm91cCIsImhhbmRsZVR5cGVNaXNzbWF0Y2giLCJoYW5kbGVGaWxlU2l6ZUV4Y2VlZCIsImhhbmRsZVVwbG9hZENvbXBsZXRlIiwidXBsb2FkU3RyZWFtIiwicmVtb3ZlU3RyZWFtIiwiaGFuZGxlT3BlblVwbG9hZGVyIiwiaGFuZGxlQ2xvc2VVcGxvYWRlciIsIm9wZW5FeHRlcm5hbExpbmsiLCJvbkZvY3VzT3V0IiwibGlua1ByZXNzZWQiLCJkaXNwbGF5QWdncmVnYXRpb25EZXRhaWxzIiwib25EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgiLCJzaG93Q29sbGFib3JhdGlvbkVkaXRVc2VyIiwib25EYXRhRmllbGRBY3Rpb25CdXR0b24iLCJvbkRhdGFGaWVsZFdpdGhJQk4iLCJfZXhwb3J0cyIsImNvbXB1dGVkRWRpdGFibGVFeHByZXNzaW9uIiwiVUlGb3JtYXR0ZXJzIiwiZ2V0RWRpdGFibGVFeHByZXNzaW9uQXNPYmplY3QiLCJwcm9wZXJ0eUZvckZpZWxkQ29udHJvbCIsIk1vZGVsSGVscGVyIiwiaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQiLCJlZGl0TW9kZSIsIkZpZWxkRWRpdE1vZGUiLCJEaXNwbGF5IiwiY29sbGFib3JhdGlvbkVuYWJsZWQiLCJjb2xsYWJvcmF0aW9uRXhwcmVzc2lvbiIsImdldENvbGxhYm9yYXRpb25FeHByZXNzaW9uIiwiQ29sbGFib3JhdGlvbkZvcm1hdHRlcnMiLCJoYXNDb2xsYWJvcmF0aW9uQWN0aXZpdHkiLCJlZGl0YWJsZUV4cHJlc3Npb24iLCJhbmQiLCJub3QiLCJjb25zdGFudCIsIklzSW5hY3RpdmUiLCJlZGl0TW9kZUFzT2JqZWN0IiwibWV0YU1vZGVsIiwiTWV0YU1vZGVsQ29udmVydGVyIiwiY29udmVydE1ldGFNb2RlbENvbnRleHQiLCJtZXRhUGF0aENvbnRleHQiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yVmFsdWUiLCJwcm9wZXJ0eSIsIlZhbHVlIiwicmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucyIsImdldFJlcXVpcmVkUHJvcGVydGllc0Zyb21JbnNlcnRSZXN0cmljdGlvbnMiLCJjb250ZXh0UGF0aENvbnRleHQiLCJnZXRQYXRoIiwicmVwbGFjZUFsbCIsInJlcXVpcmVkUHJvcGVydGllc0Zyb21VcGRhdGVSZXN0cmljdGlvbnMiLCJnZXRSZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zIiwib1JlcXVpcmVkUHJvcGVydGllcyIsImVuYWJsZWRFeHByZXNzaW9uIiwiZ2V0RW5hYmxlZEV4cHJlc3Npb24iLCJyZXF1aXJlZEV4cHJlc3Npb24iLCJnZXRSZXF1aXJlZEV4cHJlc3Npb24iLCJtZWFzdXJlUmVhZE9ubHkiLCJtZWFzdXJlRGlzcGxheU1vZGUiLCJnZXRFZGl0TW9kZSIsImV4dGVybmFsSURQcm9wZXJ0eSIsImdldEFzc29jaWF0ZWRFeHRlcm5hbElkUHJvcGVydHkiLCJ0eXBlIiwiaXNEYXRhRmllbGQiLCIkdGFyZ2V0IiwiZXh0ZXJuYWxJZFByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRFeHRlcm5hbElkUHJvcGVydHlQYXRoIiwiZXh0ZXJuYWxJZENvbnRleHQiLCJjb252ZXJ0ZWRNZXRhUGF0aEV4dGVybmFsSUQiLCJjb21wdXRlRmllbGRHcm91cElkcyIsInR5cGVzRm9yQ29sbGFib3JhdGlvbkZvY3VzTWFuYWdlbWVudCIsInNpZGVFZmZlY3RTZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZmllbGRHcm91cElkcyIsIm1haW5Qcm9wZXJ0eVJlbGF0aXZlUGF0aCIsImdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJjb2xsYWJvcmF0aW9uRmllbGRHcm91cCIsIkNvbGxhYm9yYXRpb25GaWVsZEdyb3VwUHJlZml4IiwicHVzaCIsImxlbmd0aCIsIl9hcGlJZCIsImdldENvbnRlbnRJZCIsImVkaXRTdHlsZUlkIiwiZ2VuZXJhdGUiLCJmaWVsZE1vZGUiLCJkaXNwbGF5U3R5bGVJZCIsInRleHRBbGlnbk1vZGUiLCJkaXNwbGF5TW9kZSIsInRleHRMaW5lc0VkaXQiLCJ0ZXh0TWF4TGluZXMiLCJ0ZXh0TWF4Q2hhcmFjdGVyc0Rpc3BsYXkiLCJ0ZXh0RXhwYW5kQmVoYXZpb3JEaXNwbGF5IiwidGV4dE1heExlbmd0aCIsImZpZWxkRWRpdFN0eWxlIiwicmFkaW9CdXR0b25zSG9yaXpvbnRhbExheW91dCIsInNob3dUaW1lIiwic2hvd1RpbWV6b25lIiwic2hvd0RhdGUiLCJnZXRPYmplY3RJZGVudGlmaWVyVGV4dCIsImZpZWxkRm9ybWF0T3B0aW9ucyIsInByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCIsInByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24iLCJwYXRoSW5Nb2RlbCIsInRhcmdldERpc3BsYXlNb2RlIiwicHJvcGVydHlEZWZpbml0aW9uIiwiaXNQcm9wZXJ0eVBhdGhFeHByZXNzaW9uIiwiY29tbW9uVGV4dCIsIkNvbW1vbiIsIlRleHQiLCJmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uIiwicmVsYXRpdmVMb2NhdGlvbiIsImdldFJlbGF0aXZlUGF0aHMiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJmb3JtYXRSZXN1bHQiLCJ2YWx1ZUZvcm1hdHRlcnMiLCJmb3JtYXRUb0tlZXBXaGl0ZXNwYWNlIiwiZ2V0T3ZlcnJpZGVzIiwicHJvcHMiLCJjb250cm9sQ29uZmlnIiwia2V5cyIsImZvckVhY2giLCJjb25maWdLZXkiLCJtYW5hZ2VRdWlja1ZpZXdGb3JEaXNwbGF5U3R5bGUiLCJoYXNTZW1hbnRpY09iamVjdHMiLCJoYXNRdWlja1ZpZXciLCJxdWlja1ZpZXdUeXBlIiwiZm91bmRTZW1hbnRpY09iamVjdHMiLCJtYW5hZ2VTZW1hbnRpY09iamVjdHNGb3JDdXJyZW50VXNlciIsInNlbWFudGljT2JqZWN0IiwiaGFzUmVhY2hhYmxlU3RhdGljU2VtYW50aWNPYmplY3QiLCJkeW5hbWljU2VtYW50aWNPYmplY3RzIiwicHJvcGVydHlPck5hdmlnYXRpb25Qcm9wZXJ0eUhhc1NlbWFudGljT2JqZWN0IiwiZ2V0UHJvcGVydHlXaXRoU2VtYW50aWNPYmplY3QiLCJmaWVsZENvbnRhaW5lclR5cGUiLCJwcm9wZXJ0eVBhdGgiLCJuYW1lIiwicmVjb21tZW5kYXRpb25WYWx1ZSIsInJlY29tbWVuZGF0aW9uRGVzY3JpcHRpb24iLCJwbGFjZWhvbGRlckV4cCIsImFkZGl0aW9uYWxWYWx1ZUZvcm1hdHRlciIsImZvcm1hdFBsYWNlaG9sZGVyIiwiZGF0YUZpZWxkIiwiZGF0YVBvaW50VHlwZSIsInRlcm0iLCIkVHlwZSIsImdldERlY2ltYWxQYWRkaW5nIiwibWFuaWZlc3QiLCJnZXRNYW5pZmVzdEVudHJ5IiwiTWVhc3VyZXMiLCJJU09DdXJyZW5jeSIsIm1hY3JvcyIsInRhYmxlIiwiY3VycmVuY3kiLCJkZWNpbWFsUGFkZGluZyIsInVuaXRPZk1lYXN1cmUiLCJoYXNVbml0T3JDdXJyZW5jeSIsIlVuaXQiLCJoYXNWYWxpZEFuYWx5dGljYWxDdXJyZW5jeU9yVW5pdCIsInRleHRGcm9tVmFsdWVMaXN0IiwiSXNJbWFnZSIsIklzSW1hZ2VVUkwiLCJJbnB1dE1hc2siLCJNYXNrZWQiLCJzZXRVcERyYWZ0SW5kaWNhdG9yIiwiVGFyZ2V0IiwiaXNVc2VkSW5OYXZpZ2F0aW9uV2l0aFF1aWNrVmlld0ZhY2V0cyIsImlzU2VtYW50aWNLZXkiLCJzZW1hbnRpY0tleVN0eWxlIiwic2V0VXBPYmplY3RJZGVudGlmaWVyVGl0bGVBbmRUZXh0Iiwic2hvd0Vycm9ySW5kaWNhdG9yIiwiY29udGV4dExvY2F0aW9uIiwiX3R5cGUiLCJmaWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGgiLCJzaXR1YXRpb25zSW5kaWNhdG9yUHJvcGVydHlQYXRoIiwiQ3JpdGljYWxpdHkiLCJpc0N1cnJlbmN5T3JVbml0QWxpZ25lZCIsIkZpZWxkU3RydWN0dXJlSGVscGVyIiwidmFsdWVBc1N0cmluZ0JpbmRpbmdFeHByZXNzaW9uIiwiZ2V0VmFsdWVCaW5kaW5nIiwidW5pdEJpbmRpbmdFeHByZXNzaW9uIiwiZ2V0QmluZGluZ0ZvclVuaXRPckN1cnJlbmN5IiwiQ29tbXVuaWNhdGlvbiIsIklzRW1haWxBZGRyZXNzIiwiSXNQaG9uZU51bWJlciIsIk11bHRpTGluZVRleHQiLCJoYXNTaXR1YXRpb25zSW5kaWNhdG9yIiwiU2l0dWF0aW9uc0luZGljYXRvciIsImdldFNpdHVhdGlvbnNOYXZpZ2F0aW9uUHJvcGVydHkiLCJ0YXJnZXRFbnRpdHlTZXQiLCJEcmFmdFJvb3QiLCJoYXNEcmFmdEluZGljYXRvciIsImRyYWZ0SW5kaWNhdG9yVmlzaWJsZSIsImdldERyYWZ0SW5kaWNhdG9yVmlzaWJsZUJpbmRpbmciLCJhZGREcmFmdEluZGljYXRvciIsInNldEVkaXRTdHlsZVByb3BlcnRpZXMiLCJzZW1hbnRpY1N0eWxlIiwiaWRlbnRpZmllclRpdGxlIiwiZ2V0VGl0bGVCaW5kaW5nRXhwcmVzc2lvbiIsImdldFRleHRCaW5kaW5nRXhwcmVzc2lvbiIsInNwbGl0VGl0bGVPblR3b0xpbmVzIiwiaWRlbnRpZmllclRleHQiLCJvdmVycmlkZVByb3BzIiwiZ2V0RGlzcGxheU1vZGUiLCJyZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IiwiaXNSZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0RW5hYmxlZCIsImhhc0VudGl0eVRleHRBcnJhbmdlbWVudCIsIlRleHRBcnJhbmdlbWVudCIsInZhbHVlU3RhdGVFeHAiLCJwcm9wZXJ0eVBhdGhJbk1vZGVsIiwidGV4dFBhdGgiLCJmb3JtYXRWYWx1ZVN0YXRlIiwiZ2V0VmlzaWJsZUV4cHJlc3Npb24iLCJkaXNwbGF5VmlzaWJsZSIsIm1hY3JvSWQiLCJmaWxlUmVsYXRpdmVQcm9wZXJ0eVBhdGgiLCJmaWxlTmFtZUFubm90YXRpb24iLCJDb3JlIiwiQ29udGVudERpc3Bvc2l0aW9uIiwiRmlsZW5hbWUiLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsImZpbGVOYW1lRGF0YU1vZGVsUGF0aCIsImVuaGFuY2VEYXRhTW9kZWxQYXRoIiwicGF0aCIsImZpbGVGaWxlbmFtZUV4cHJlc3Npb24iLCJpbmxpbmVFZGl0RW5hYmxlZCIsImhhc0lubGluZUVkaXQiLCJ0cmFuc2Zvcm1SZWN1cnNpdmVseSIsImV4cHIiLCJtb2RlbE5hbWUiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkZpZWxkU3RydWN0dXJlSGVscGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW50aXR5U2V0LCBQcm9wZXJ0eSwgUHJvcGVydHlQYXRoLCBTZXJ2aWNlT2JqZWN0IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7XG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZEZvckFubm90YXRpb24sXG5cdERhdGFGaWVsZFR5cGVzLFxuXHREYXRhUG9pbnQsXG5cdERhdGFQb2ludFR5cGVUeXBlc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcywgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbixcblx0Q29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sXG5cdEV4cHJlc3Npb25PclByaW1pdGl2ZSxcblx0UGF0aEluTW9kZWxFeHByZXNzaW9uXG59IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHtcblx0YW5kLFxuXHRjb21waWxlRXhwcmVzc2lvbixcblx0Y29uc3RhbnQsXG5cdGVxdWFsLFxuXHRmb3JtYXRSZXN1bHQsXG5cdGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24sXG5cdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbixcblx0aWZFbHNlLFxuXHRub3QsXG5cdHBhdGhJbk1vZGVsLFxuXHR0cmFuc2Zvcm1SZWN1cnNpdmVseVxufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydGllc09mIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncyB9IGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy90ZW1wbGF0aW5nL0J1aWxkaW5nQmxvY2tUZW1wbGF0ZVByb2Nlc3NvclwiO1xuaW1wb3J0IHsgQ29sbGFib3JhdGlvbkZpZWxkR3JvdXBQcmVmaXggfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvY29sbGFib3JhdGlvbi9Db2xsYWJvcmF0aW9uQ29tbW9uXCI7XG5pbXBvcnQgKiBhcyBNZXRhTW9kZWxDb252ZXJ0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBpc0RhdGFGaWVsZCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2Fubm90YXRpb25zL0RhdGFGaWVsZFwiO1xuaW1wb3J0ICogYXMgQ29sbGFib3JhdGlvbkZvcm1hdHRlcnMgZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvQ29sbGFib3JhdGlvbkZvcm1hdHRlclwiO1xuaW1wb3J0IHZhbHVlRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9WYWx1ZUZvcm1hdHRlclwiO1xuaW1wb3J0IHsgVUkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5pbXBvcnQge1xuXHRnZXRSZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zLFxuXHRnZXRSZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zXG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01ldGFNb2RlbEZ1bmN0aW9uXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB7IGdldFRpdGxlQmluZGluZ0V4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UaXRsZUhlbHBlclwiO1xuaW1wb3J0IHsgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24sIGlzUHJvcGVydHksIGlzUHJvcGVydHlQYXRoRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7XG5cdGVuaGFuY2VEYXRhTW9kZWxQYXRoLFxuXHRnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoLFxuXHRnZXRSZWxhdGl2ZVBhdGhzLFxuXHRnZXRUYXJnZXRPYmplY3RQYXRoXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGdldEFzc29jaWF0ZWRFeHRlcm5hbElkUHJvcGVydHksIGdldEFzc29jaWF0ZWRFeHRlcm5hbElkUHJvcGVydHlQYXRoLCBpc1NlbWFudGljS2V5IH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCB7IGdldFByb3BlcnR5V2l0aFNlbWFudGljT2JqZWN0LCBtYW5hZ2VTZW1hbnRpY09iamVjdHNGb3JDdXJyZW50VXNlciB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1NlbWFudGljT2JqZWN0SGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IERpc3BsYXlNb2RlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgKiBhcyBVSUZvcm1hdHRlcnMgZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgdHlwZSB7IElucHV0TWFza0Zvcm1hdE9wdGlvbnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdHlwZS9JbnB1dE1hc2tcIjtcbmltcG9ydCAqIGFzIEZpZWxkVGVtcGxhdGluZyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFRlbXBsYXRpbmdcIjtcbmltcG9ydCB7XG5cdGdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JWYWx1ZSxcblx0Z2V0RHJhZnRJbmRpY2F0b3JWaXNpYmxlQmluZGluZyxcblx0Z2V0VGV4dEJpbmRpbmdFeHByZXNzaW9uLFxuXHRnZXRWYWx1ZUJpbmRpbmcsXG5cdGdldFZpc2libGVFeHByZXNzaW9uLFxuXHRoYXNQcm9wZXJ0eUluc2VydFJlc3RyaWN0aW9ucyxcblx0aXNSZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0RW5hYmxlZCxcblx0aXNVc2VkSW5OYXZpZ2F0aW9uV2l0aFF1aWNrVmlld0ZhY2V0cyxcblx0c2V0RWRpdFN0eWxlUHJvcGVydGllc1xufSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFRlbXBsYXRpbmdcIjtcbmltcG9ydCBhZGRpdGlvbmFsVmFsdWVGb3JtYXR0ZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvdmFsdWVoZWxwL0FkZGl0aW9uYWxWYWx1ZUZvcm1hdHRlclwiO1xuaW1wb3J0IFNpdHVhdGlvbnNJbmRpY2F0b3IgZnJvbSBcInNhcC9mZS9tYWNyb3Mvc2l0dWF0aW9ucy9TaXR1YXRpb25zSW5kaWNhdG9yXCI7XG5pbXBvcnQgRmllbGRFZGl0TW9kZSBmcm9tIFwic2FwL3VpL21kYy9lbnVtcy9GaWVsZEVkaXRNb2RlXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgRXZlbnRIYW5kbGVyIH0gZnJvbSBcInR5cGVzL2V4dGVuc2lvbl90eXBlc1wiO1xuaW1wb3J0IHR5cGUgRmllbGQgZnJvbSBcIi4uLy4uL0ZpZWxkXCI7XG5pbXBvcnQgdHlwZSBGaWVsZEZvcm1hdE9wdGlvbnMgZnJvbSBcIi4uLy4uL2ZpZWxkL0ZpZWxkRm9ybWF0T3B0aW9uc1wiO1xuaW1wb3J0IHR5cGUgeyBEaXNwbGF5U3R5bGUgYXMgRGlzcGxheVN0eWxlVHlwZSwgRWRpdFN0eWxlIGFzIEVkaXRTdHlsZVR5cGUsIEZpZWxkUHJvcGVydGllcyB9IGZyb20gXCIuL0ZpZWxkU3R5bGVzXCI7XG5cbmV4cG9ydCB0eXBlIElucHV0RmllbGRCbG9ja1Byb3BlcnRpZXMgPSBPbWl0PFByb3BlcnRpZXNPZjxGaWVsZD4sIFwicmVhZE9ubHlcIiB8IFwic2VtYW50aWNPYmplY3RcIj4gJiB7XG5cdGlzUHVibGljRmllbGQ/OiBib29sZWFuOyAvL1xuXHQvL2FkZCBldmVudHMgZnJvbSBGaWVsZCAtICdQcm9wZXJ0aWVzT2YnIGRvZXMgbm90IGluY2x1ZGUgdGhlbVxuXHRjaGFuZ2U/OiBFdmVudEhhbmRsZXI7XG5cdGxpdmVDaGFuZ2U/OiBFdmVudEhhbmRsZXI7XG5cdG9uTGl2ZUNoYW5nZT86IHN0cmluZztcblx0cmVhZE9ubHk/OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdHNlbWFudGljT2JqZWN0PzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG59O1xuZXhwb3J0IHR5cGUgRmllbGRCbG9ja1Byb3BlcnRpZXMgPSB7XG5cdF9jb250cm9sQ29uZmlndXJhdGlvbjogVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncztcblx0X3NldHRpbmdzOiBUZW1wbGF0ZVByb2Nlc3NvclNldHRpbmdzO1xuXHRpc0R5bmFtaWNJbnN0YW50aWF0aW9uPzogYm9vbGVhbjtcblx0Y2hhbmdlOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBFdmVudEhhbmRsZXI7XG5cdG1ldGFQYXRoOiBDb250ZXh0O1xuXHRjb250ZXh0UGF0aDogQ29udGV4dDtcblx0aXNQdWJsaWNGaWVsZDogYm9vbGVhbjtcblx0dmlzaWJsZT86IGJvb2xlYW4gfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0bGl2ZUNoYW5nZTogRXZlbnRIYW5kbGVyO1xuXHRvbkxpdmVDaGFuZ2U/OiBzdHJpbmcgfCBFdmVudEhhbmRsZXI7XG5cdC8vLS0tLS1cblx0Zm9ybWF0T3B0aW9uczogRmllbGRGb3JtYXRPcHRpb25zO1xuXHRwcm9wZXJ0eTogUHJvcGVydHk7XG5cdGRhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+O1xuXHR2YWx1ZUFzU3RyaW5nQmluZGluZ0V4cHJlc3Npb24/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0dW5pdEJpbmRpbmdFeHByZXNzaW9uPzogc3RyaW5nO1xuXHRkaXNwbGF5VmlzaWJsZT86IHN0cmluZyB8IGJvb2xlYW47XG5cdGhhc1ZhbGlkQW5hbHl0aWNhbEN1cnJlbmN5T3JVbml0PzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGNvbnZlcnRlZE1ldGFQYXRoOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzO1xuXHRjbGFzcz86IHN0cmluZztcblx0YXJpYUxhYmVsbGVkQnk/OiBzdHJpbmdbXTtcblx0aGFzVW5pdE9yQ3VycmVuY3k/OiBib29sZWFuO1xuXHR0ZXh0PzogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0ZW1wdHlJbmRpY2F0b3JNb2RlPzogc3RyaW5nO1xuXHRlZGl0YWJsZUV4cHJlc3Npb246IHN0cmluZyB8IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRmaWVsZEdyb3VwSWRzPzogc3RyaW5nW107XG5cdGRpc3BsYXlTdHlsZUlkPzogc3RyaW5nO1xuXHR0ZXh0RnJvbVZhbHVlTGlzdD86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRoYXNRdWlja1ZpZXc6IGJvb2xlYW47XG5cdGlkZW50aWZpZXJUaXRsZT86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRpZGVudGlmaWVyVGV4dD86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRoYXNTaXR1YXRpb25zSW5kaWNhdG9yPzogYm9vbGVhbjtcblx0c2l0dWF0aW9uc0luZGljYXRvclByb3BlcnR5UGF0aDogc3RyaW5nO1xuXHRzaG93RXJyb3JJbmRpY2F0b3I6IGJvb2xlYW47XG5cdGR5bmFtaWNTZW1hbnRpY09iamVjdHM/OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPltdO1xuXHRjb2xsYWJvcmF0aW9uRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRkYXRhU291cmNlUGF0aD86IHN0cmluZztcblx0ZWRpdFN0eWxlSWQ/OiBzdHJpbmc7XG5cdGVuYWJsZWRFeHByZXNzaW9uOiBzdHJpbmcgfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0cmVxdWlyZWRFeHByZXNzaW9uPzogc3RyaW5nO1xuXHRlZGl0TW9kZUFzT2JqZWN0OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+O1xuXHRjb21wdXRlZEVkaXRNb2RlOiBGaWVsZEVkaXRNb2RlIHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHZhbHVlQmluZGluZ0V4cHJlc3Npb24/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0c2hvd1RpbWV6b25lPzogYm9vbGVhbjtcblx0bWluRGF0ZUV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPiB8IHVuZGVmaW5lZCB8IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRtYXhEYXRlRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+IHwgdW5kZWZpbmVkIHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGVkaXRTdHlsZVBsYWNlaG9sZGVyPzogc3RyaW5nO1xuXHRzdGF0aWNEZXNjcmlwdGlvbj86IHN0cmluZztcblx0dmFsdWVTdGF0ZT86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRmaWxlRmlsZW5hbWVFeHByZXNzaW9uOiBzdHJpbmc7XG5cdGZpbGVSZWxhdGl2ZVByb3BlcnR5UGF0aDogc3RyaW5nO1xuXHR0ZXh0QmluZGluZ0V4cHJlc3Npb24/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0cmF0aW5nSW5kaWNhdG9yVG9vbHRpcD86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRyYXRpbmdJbmRpY2F0b3JUYXJnZXRWYWx1ZT86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRtYXNrPzogSW5wdXRNYXNrRm9ybWF0T3B0aW9ucyB8IG51bGw7XG5cdGVkaXRTdHlsZT86IEVkaXRTdHlsZVR5cGUgfCBudWxsO1xuXHRfYXBpSWQ/OiBzdHJpbmc7XG5cdGVudGl0eVR5cGU/OiBDb250ZXh0O1xuXHRvZGF0YU1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWw7XG5cdHByb3BlcnR5Rm9yRmllbGRDb250cm9sOiBVSUZvcm1hdHRlcnMuUHJvcGVydHlPclBhdGg8UHJvcGVydHk+O1xuXHRkZXNjcmlwdGlvbkJpbmRpbmdFeHByZXNzaW9uPzogc3RyaW5nO1xuXHRxdWlja1ZpZXdUeXBlPzogXCJTZW1hbnRpY0xpbmtzXCIgfCBcIkZhY2V0c1wiIHwgXCJGYWNldHNBbmRTZW1hbnRpY0xpbmtzXCI7XG5cdGRpc3BsYXlTdHlsZT86IERpc3BsYXlTdHlsZVR5cGU7XG5cdHVuaXRFZGl0YWJsZT86IHN0cmluZztcblx0c3RhdGljVW5pdD86IHN0cmluZztcblx0dmFsdWVJbnB1dFdpZHRoPzogc3RyaW5nO1xuXHR2YWx1ZUlucHV0RmllbGRXaWR0aD86IHN0cmluZztcblx0dW5pdElucHV0VmlzaWJsZT86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRkcmFmdEluZGljYXRvclZpc2libGU/OiBzdHJpbmc7XG5cdGhhc1Byb3BlcnR5SW5zZXJ0UmVzdHJpY3Rpb25zPzogYm9vbGVhbiB8IEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPjtcblx0YWRkRHJhZnRJbmRpY2F0b3I6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cdGNvbnZlcnRlZE1ldGFQYXRoRXh0ZXJuYWxJRD86IFByb3BlcnR5O1xuXHRkYXRhTW9kZWxQYXRoRXh0ZXJuYWxJRD86IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHkgfCBQcm9wZXJ0eVBhdGg+O1xuXHR2YWx1ZUhlbHBNZXRhUGF0aD86IENvbnRleHQ7XG5cdGlkOiBzdHJpbmc7XG5cdHZhbHVlSGVscElkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdG1ldGFQYXRoQ29udGV4dDogQ29udGV4dCB8IHVuZGVmaW5lZDtcblx0Y29udGV4dFBhdGhDb250ZXh0OiBDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRldmVudEhhbmRsZXJzOiB7XG5cdFx0Y2hhbmdlOiBFdmVudEhhbmRsZXI7XG5cdFx0bGl2ZUNoYW5nZTogRXZlbnRIYW5kbGVyO1xuXHRcdHZhbGlkYXRlRmllbGRHcm91cDogRXZlbnRIYW5kbGVyO1xuXHRcdGhhbmRsZVR5cGVNaXNzbWF0Y2g6IEV2ZW50SGFuZGxlcjtcblx0XHRoYW5kbGVGaWxlU2l6ZUV4Y2VlZDogRXZlbnRIYW5kbGVyO1xuXHRcdGhhbmRsZVVwbG9hZENvbXBsZXRlOiBFdmVudEhhbmRsZXI7XG5cdFx0dXBsb2FkU3RyZWFtOiBFdmVudEhhbmRsZXI7XG5cdFx0cmVtb3ZlU3RyZWFtOiBFdmVudEhhbmRsZXI7XG5cdFx0aGFuZGxlT3BlblVwbG9hZGVyOiBFdmVudEhhbmRsZXI7XG5cdFx0aGFuZGxlQ2xvc2VVcGxvYWRlcjogRXZlbnRIYW5kbGVyO1xuXHRcdG9wZW5FeHRlcm5hbExpbms6IEV2ZW50SGFuZGxlcjtcblx0XHRvbkZvY3VzT3V0OiBFdmVudEhhbmRsZXI7XG5cdFx0bGlua1ByZXNzZWQ6IEV2ZW50SGFuZGxlcjtcblx0XHRkaXNwbGF5QWdncmVnYXRpb25EZXRhaWxzOiBFdmVudEhhbmRsZXI7XG5cdFx0b25EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6IEV2ZW50SGFuZGxlcjtcblx0XHRvbkRhdGFGaWVsZEFjdGlvbkJ1dHRvbjogRXZlbnRIYW5kbGVyO1xuXHRcdG9uRGF0YUZpZWxkV2l0aElCTjogRXZlbnRIYW5kbGVyO1xuXHRcdHNob3dDb2xsYWJvcmF0aW9uRWRpdFVzZXI6IEV2ZW50SGFuZGxlcjtcblx0fTtcbn0gJiBPbWl0PEZpZWxkLCBcIm1ldGFQYXRoXCIgfCBcImNvbnRleHRQYXRoXCIgfCBcImNoYW5nZVwiIHwgXCJ2aXNpYmxlXCI+O1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0VXBGaWVsZChcblx0ZmllbGQ6IElucHV0RmllbGRCbG9ja1Byb3BlcnRpZXMsXG5cdGNvbnRyb2xDb25maWd1cmF0aW9uOiBUZW1wbGF0ZVByb2Nlc3NvclNldHRpbmdzLFxuXHR2aWV3RGF0YU1vZGVsOiBKU09OTW9kZWwsXG5cdGludGVybmFsTW9kZWw6IEpTT05Nb2RlbCxcblx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdGlzUmVhZE9ubHlJbml0aWFsPzogYm9vbGVhbixcblx0bWV0YVBhdGg/OiBDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHRjb250ZXh0UGF0aD86IENvbnRleHQgfCB1bmRlZmluZWRcbik6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzIHtcblx0Y29uc3QgcmVzdWx0RmllbGQgPSB7IC4uLmZpZWxkIH0gYXMgdW5rbm93biBhcyBGaWVsZEJsb2NrUHJvcGVydGllcztcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHJlc3VsdEZpZWxkLCBcInZhbHVlXCIsIHtcblx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdHJldHVybiBmaWVsZC52YWx1ZTtcblx0XHR9XG5cdH0pO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkocmVzdWx0RmllbGQsIFwiZGVzY3JpcHRpb25cIiwge1xuXHRcdGdldDogKCkgPT4ge1xuXHRcdFx0cmV0dXJuIGZpZWxkLmRlc2NyaXB0aW9uO1xuXHRcdH1cblx0fSk7XG5cblx0cmVzdWx0RmllbGQuY2hhbmdlID0gZmllbGQuY2hhbmdlO1xuXHRyZXN1bHRGaWVsZC5tZXRhUGF0aCA9IChtZXRhUGF0aCA/IG1ldGFQYXRoIDogZmllbGQubWV0YVBhdGgpIGFzIENvbnRleHQ7XG5cdHJlc3VsdEZpZWxkLmNvbnRleHRQYXRoID0gKGNvbnRleHRQYXRoID8gY29udGV4dFBhdGggOiBmaWVsZC5jb250ZXh0UGF0aCkgYXMgQ29udGV4dDtcblx0cmVzdWx0RmllbGQudmlzaWJsZSA9IGZpZWxkLnZpc2libGU7XG5cblx0Ly90aGlzIGN1cnJlbnRseSB3b3JrcyBvbmx5IGZvciB0aGUgZmllbGRcblx0aWYgKCFyZXN1bHRGaWVsZC52aElkUHJlZml4KSB7XG5cdFx0cmVzdWx0RmllbGQudmhJZFByZWZpeCA9IFwiRmllbGRWYWx1ZUhlbHBcIjtcblx0XHRyZXN1bHRGaWVsZC5fZmxleElkID0gZmllbGQuaWQ7XG5cdFx0aWYgKCFyZXN1bHRGaWVsZC5pZFByZWZpeCkge1xuXHRcdFx0cmVzdWx0RmllbGQuaWRQcmVmaXggPSBmaWVsZC5pZDtcblx0XHR9XG5cdH1cblxuXHRyZXN1bHRGaWVsZC5mb3JtYXRPcHRpb25zID8/PSB7fSBhcyBGaWVsZEZvcm1hdE9wdGlvbnM7XG5cdHJlc3VsdEZpZWxkLmZvcm1hdE9wdGlvbnMgPSBnZXRGb3JtYXRPcHRpb25zKHJlc3VsdEZpZWxkKTtcblx0cmVzdWx0RmllbGQuZm9ybWF0T3B0aW9ucy5zaG93T25seVVuaXREZWNpbWFscyA9XG5cdFx0dmlld0RhdGFNb2RlbD8uZ2V0UHJvcGVydHkoXCIvc2FwRmVNYW5pZmVzdENvbmZpZ3VyYXRpb24vYXBwL3Nob3dPbmx5VW5pdERlY2ltYWxzXCIpID09PSB0cnVlO1xuXG5cdHJlc3VsdEZpZWxkLnZhbHVlSGVscE1ldGFQYXRoID0gbWV0YVBhdGggPyBtZXRhUGF0aCA6IHJlc3VsdEZpZWxkLm1ldGFQYXRoO1xuXHRjb21wdXRlQ29tbW9uUHJvcGVydGllcyhyZXN1bHRGaWVsZCwgcmVzdWx0RmllbGQudmFsdWVIZWxwTWV0YVBhdGg/LmdldE1vZGVsKCkpO1xuXHRyZXN1bHRGaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aCA9IHNldFVwRGF0YVBvaW50VHlwZShyZXN1bHRGaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aCk7XG5cdHNldFVwVmlzaWJsZVByb3BlcnRpZXMocmVzdWx0RmllbGQpO1xuXHRjb21wdXRlSURzKHJlc3VsdEZpZWxkKTtcblx0cmVzdWx0RmllbGQuZGF0YVNvdXJjZVBhdGggPSBnZXRUYXJnZXRPYmplY3RQYXRoKHJlc3VsdEZpZWxkLmRhdGFNb2RlbFBhdGgpO1xuXG5cdC8qIEVYVEVSTkFMSUQgKi9cblx0Y29tcHV0ZUV4dGVybmFsSUQocmVzdWx0RmllbGQpO1xuXHRyZXN1bHRGaWVsZC5lbnRpdHlUeXBlID0gcmVzdWx0RmllbGQub2RhdGFNZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXG5cdFx0YC8ke3Jlc3VsdEZpZWxkLmRhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWV9YFxuXHQpO1xuXHRpZiAocmVzdWx0RmllbGQuZm9ybWF0T3B0aW9ucz8uZm9ySW5saW5lQ3JlYXRpb25Sb3dzID09PSB0cnVlKSB7XG5cdFx0cmVzdWx0RmllbGQuaGFzUHJvcGVydHlJbnNlcnRSZXN0cmljdGlvbnMgPSBoYXNQcm9wZXJ0eUluc2VydFJlc3RyaWN0aW9ucyhyZXN1bHRGaWVsZC5kYXRhTW9kZWxQYXRoKTtcblx0fVxuXHRjb21wdXRlRWRpdE1vZGUocmVzdWx0RmllbGQpO1xuXHRjb21wdXRlQ29sbGFib3JhdGlvblByb3BlcnRpZXMocmVzdWx0RmllbGQpO1xuXHRjb21wdXRlRWRpdGFibGVFeHByZXNzaW9ucyhyZXN1bHRGaWVsZCk7XG5cdHJlc3VsdEZpZWxkLmZvcm1hdE9wdGlvbnMgPSByZXN1bHRGaWVsZC5mb3JtYXRPcHRpb25zID8gcmVzdWx0RmllbGQuZm9ybWF0T3B0aW9ucyA6ICh7fSBhcyBGaWVsZEZvcm1hdE9wdGlvbnMpO1xuXHRzZXRVcEZvcm1hdE9wdGlvbnMoXG5cdFx0cmVzdWx0RmllbGQsXG5cdFx0KHJlc3VsdEZpZWxkLmRhdGFNb2RlbFBhdGhFeHRlcm5hbElEIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+KSB8fCByZXN1bHRGaWVsZC5kYXRhTW9kZWxQYXRoLFxuXHRcdGNvbnRyb2xDb25maWd1cmF0aW9uLFxuXHRcdHZpZXdEYXRhTW9kZWxcblx0KTtcblx0c2V0VXBEaXNwbGF5U3R5bGUocmVzdWx0RmllbGQsIHJlc3VsdEZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoLCByZXN1bHRGaWVsZC5kYXRhTW9kZWxQYXRoLCBpbnRlcm5hbE1vZGVsLCBhcHBDb21wb25lbnQpO1xuXHRzZXRVcEVkaXRTdHlsZShyZXN1bHRGaWVsZCwgYXBwQ29tcG9uZW50KTtcblxuXHRyZXN1bHRGaWVsZC52YWx1ZVN0YXRlID0gc2V0VXBWYWx1ZVN0YXRlKHJlc3VsdEZpZWxkKTtcblx0aWYgKHJlc3VsdEZpZWxkLmVkaXRTdHlsZSA9PT0gXCJJbnB1dFdpdGhWYWx1ZUhlbHBcIikge1xuXHRcdHJlc3VsdEZpZWxkLmVkaXRTdHlsZVBsYWNlaG9sZGVyID0gc2V0SW5wdXRXaXRoVmFsdWVoZWxwUGxhY2Vob2xkZXIocmVzdWx0RmllbGQpO1xuXHR9XG5cblx0Y29tcHV0ZUZpbGVVcGxvYWRlclByb3BlcnRpZXMocmVzdWx0RmllbGQpO1xuXG5cdGNvbXB1dGVJbmxpbmVFZGl0UHJvcGVydGllcyhyZXN1bHRGaWVsZCwgdmlld0RhdGFNb2RlbCk7XG5cblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBjb21wdXRlIGJpbmRpbmdzLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHRjb25zdCBhRGlzcGxheVN0eWxlc1dpdGhvdXRQcm9wVGV4dCA9IFtcIkF2YXRhclwiLCBcIkFtb3VudFdpdGhDdXJyZW5jeVwiXTtcblx0aWYgKFxuXHRcdHJlc3VsdEZpZWxkLmRpc3BsYXlTdHlsZSAmJlxuXHRcdCFhRGlzcGxheVN0eWxlc1dpdGhvdXRQcm9wVGV4dC5pbmNsdWRlcyhyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUpICYmXG5cdFx0cmVzdWx0RmllbGQuZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3Rcblx0KSB7XG5cdFx0cmVzdWx0RmllbGQudGV4dCA9XG5cdFx0XHRyZXN1bHRGaWVsZC50ZXh0ID8/XG5cdFx0XHRyZXN1bHRGaWVsZC52YWx1ZSA/P1xuXHRcdFx0RmllbGRUZW1wbGF0aW5nLmdldFRleHRCaW5kaW5nKFxuXHRcdFx0XHQocmVzdWx0RmllbGQuZGF0YU1vZGVsUGF0aEV4dGVybmFsSUQgYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4pIHx8IHJlc3VsdEZpZWxkLmRhdGFNb2RlbFBhdGgsXG5cdFx0XHRcdHJlc3VsdEZpZWxkLmZvcm1hdE9wdGlvbnNcblx0XHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0cmVzdWx0RmllbGQudGV4dCA9IFwiXCI7XG5cdH1cblxuXHRpZiAocmVzdWx0RmllbGQuZm9ybWF0T3B0aW9ucy5zaG93RW1wdHlJbmRpY2F0b3IpIHtcblx0XHRyZXN1bHRGaWVsZC5lbXB0eUluZGljYXRvck1vZGUgPSBTdHJpbmcocmVzdWx0RmllbGQuZm9ybWF0T3B0aW9ucy5zaG93RW1wdHlJbmRpY2F0b3IpID09PSBcInRydWVcIiA/IFwiT25cIiA6IHVuZGVmaW5lZDtcblx0fSBlbHNlIHtcblx0XHRyZXN1bHRGaWVsZC5lbXB0eUluZGljYXRvck1vZGUgPSB1bmRlZmluZWQ7XG5cdH1cblxuXHQvLyBJZiB0aGUgdGFyZ2V0IGlzIGEgcHJvcGVydHkgd2l0aCBhIERhdGFGaWVsZERlZmF1bHQsIHVzZSB0aGlzIGFzIGRhdGEgZmllbGRcblx0aWYgKGlzUHJvcGVydHkocmVzdWx0RmllbGQuY29udmVydGVkTWV0YVBhdGgpICYmIHJlc3VsdEZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoLmFubm90YXRpb25zPy5VST8uRGF0YUZpZWxkRGVmYXVsdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmVzdWx0RmllbGQubWV0YVBhdGggPSByZXN1bHRGaWVsZC5vZGF0YU1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcblx0XHRcdGBAJHtVSUFubm90YXRpb25UZXJtcy5EYXRhRmllbGREZWZhdWx0fWAsXG5cdFx0XHRtZXRhUGF0aCA/IG1ldGFQYXRoIDogcmVzdWx0RmllbGQubWV0YVBhdGhcblx0XHQpO1xuXHR9XG5cblx0aWYgKCFpc1JlYWRPbmx5SW5pdGlhbCkge1xuXHRcdHJlc3VsdEZpZWxkLmNvbXB1dGVkRWRpdE1vZGUgPSBjb21waWxlRXhwcmVzc2lvbihpZkVsc2UoZXF1YWwocmVzdWx0RmllbGQucmVhZE9ubHksIHRydWUpLCBcIkRpc3BsYXlcIiwgXCJFZGl0YWJsZVwiKSk7XG5cdH1cblxuXHRyZXN1bHRGaWVsZC5ldmVudEhhbmRsZXJzID0ge1xuXHRcdGNoYW5nZTogKCk6IHZvaWQgPT4ge30sXG5cdFx0bGl2ZUNoYW5nZTogKCk6IHZvaWQgPT4ge30sXG5cdFx0dmFsaWRhdGVGaWVsZEdyb3VwOiAoKTogdm9pZCA9PiB7fSxcblx0XHRoYW5kbGVUeXBlTWlzc21hdGNoOiAoKTogdm9pZCA9PiB7fSxcblx0XHRoYW5kbGVGaWxlU2l6ZUV4Y2VlZDogKCk6IHZvaWQgPT4ge30sXG5cdFx0aGFuZGxlVXBsb2FkQ29tcGxldGU6ICgpOiB2b2lkID0+IHt9LFxuXHRcdHVwbG9hZFN0cmVhbTogKCk6IHZvaWQgPT4ge30sXG5cdFx0cmVtb3ZlU3RyZWFtOiAoKTogdm9pZCA9PiB7fSxcblx0XHRoYW5kbGVPcGVuVXBsb2FkZXI6ICgpOiB2b2lkID0+IHt9LFxuXHRcdGhhbmRsZUNsb3NlVXBsb2FkZXI6ICgpOiB2b2lkID0+IHt9LFxuXHRcdG9wZW5FeHRlcm5hbExpbms6ICgpOiB2b2lkID0+IHt9LFxuXHRcdG9uRm9jdXNPdXQ6ICgpOiB2b2lkID0+IHt9LFxuXHRcdGxpbmtQcmVzc2VkOiAoKTogdm9pZCA9PiB7fSxcblx0XHRkaXNwbGF5QWdncmVnYXRpb25EZXRhaWxzOiAoKTogdm9pZCA9PiB7fSxcblx0XHRvbkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aDogKCk6IHZvaWQgPT4ge30sXG5cdFx0c2hvd0NvbGxhYm9yYXRpb25FZGl0VXNlcjogKCk6IHZvaWQgPT4ge30sXG5cdFx0b25EYXRhRmllbGRBY3Rpb25CdXR0b246ICgpOiB2b2lkID0+IHt9LFxuXHRcdG9uRGF0YUZpZWxkV2l0aElCTjogKCk6IHZvaWQgPT4ge31cblx0fTtcblxuXHRyZXR1cm4gcmVzdWx0RmllbGQ7XG59XG5cbi8qKlxuICogVGhpcyBoZWxwZXIgY29tcHV0ZXMgdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgbmVlZGVkIGZvciB0aGUgY29sbGFib3JhdGlvbiBhdmF0YXIuXG4gKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlQ29sbGFib3JhdGlvblByb3BlcnRpZXMoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogdm9pZCB7XG5cdGNvbnN0IGNvbXB1dGVkRWRpdGFibGVFeHByZXNzaW9uID0gVUlGb3JtYXR0ZXJzLmdldEVkaXRhYmxlRXhwcmVzc2lvbkFzT2JqZWN0KFxuXHRcdGZpZWxkLnByb3BlcnR5Rm9yRmllbGRDb250cm9sLFxuXHRcdGZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoLFxuXHRcdGZpZWxkLmRhdGFNb2RlbFBhdGhcblx0KTtcblx0aWYgKE1vZGVsSGVscGVyLmlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkKGZpZWxkLm9kYXRhTWV0YU1vZGVsKSAmJiBmaWVsZC5lZGl0TW9kZSAhPT0gRmllbGRFZGl0TW9kZS5EaXNwbGF5KSB7XG5cdFx0Y29uc3QgY29sbGFib3JhdGlvbkVuYWJsZWQgPSB0cnVlO1xuXHRcdC8vIEV4cHJlc3Npb25zIG5lZWRlZCBmb3IgQ29sbGFib3JhdGlvbiBWaXN1YWxpemF0aW9uXG5cdFx0Y29uc3QgY29sbGFib3JhdGlvbkV4cHJlc3Npb24gPSBVSUZvcm1hdHRlcnMuZ2V0Q29sbGFib3JhdGlvbkV4cHJlc3Npb24oXG5cdFx0XHRmaWVsZC5kYXRhTW9kZWxQYXRoLFxuXHRcdFx0Q29sbGFib3JhdGlvbkZvcm1hdHRlcnMuaGFzQ29sbGFib3JhdGlvbkFjdGl2aXR5XG5cdFx0KTtcblx0XHRjb25zdCBlZGl0YWJsZUV4cHJlc3Npb24gPSBjb21waWxlRXhwcmVzc2lvbihhbmQoY29tcHV0ZWRFZGl0YWJsZUV4cHJlc3Npb24sIG5vdChjb2xsYWJvcmF0aW9uRXhwcmVzc2lvbikpKTtcblxuXHRcdGNvbnN0IGVkaXRNb2RlID0gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdGNvbGxhYm9yYXRpb25FeHByZXNzaW9uLFxuXHRcdFx0XHRjb25zdGFudChcIlJlYWRPbmx5XCIpLFxuXHRcdFx0XHRpZkVsc2UoYW5kKFVJLklzSW5hY3RpdmUsICEhZmllbGQuaGFzUHJvcGVydHlJbnNlcnRSZXN0cmljdGlvbnMpLCBcIkRpc3BsYXlcIiwgZmllbGQuZWRpdE1vZGVBc09iamVjdClcblx0XHRcdClcblx0XHQpO1xuXHRcdGZpZWxkLmNvbGxhYm9yYXRpb25FbmFibGVkID0gY29sbGFib3JhdGlvbkVuYWJsZWQ7XG5cdFx0ZmllbGQuY29sbGFib3JhdGlvbkV4cHJlc3Npb24gPSBjb2xsYWJvcmF0aW9uRXhwcmVzc2lvbjtcblx0XHRmaWVsZC5lZGl0YWJsZUV4cHJlc3Npb24gPSBlZGl0YWJsZUV4cHJlc3Npb247XG5cdFx0ZmllbGQuY29tcHV0ZWRFZGl0TW9kZSA9IGVkaXRNb2RlO1xuXHR9IGVsc2Uge1xuXHRcdGZpZWxkLmVkaXRhYmxlRXhwcmVzc2lvbiA9IGNvbXBpbGVFeHByZXNzaW9uKGNvbXB1dGVkRWRpdGFibGVFeHByZXNzaW9uKTtcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgaGVscGVyIHNldHMgdGhlIGNvbW1vbiBwcm9wZXJ0aWVzIGNvbnZlcnRlZE1ldGFQYXRoLCBkYXRhTW9kZWxQYXRoXG4gKiBhbmQgcHJvcGVydHkgdGhhdCBjYW4gYmUgcmV1c2VkIGluIHRoZSBpbmRpdmlkdWFsIHRlbXBsYXRlcyBpZiByZXF1aXJlZC5cbiAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2VcbiAqIEBwYXJhbSBtZXRhTW9kZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVDb21tb25Qcm9wZXJ0aWVzKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcywgbWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCk6IHZvaWQge1xuXHRmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aCA9IE1ldGFNb2RlbENvbnZlcnRlci5jb252ZXJ0TWV0YU1vZGVsQ29udGV4dChmaWVsZC5tZXRhUGF0aENvbnRleHQgPyBmaWVsZC5tZXRhUGF0aENvbnRleHQgOiBmaWVsZC5tZXRhUGF0aCkgYXNcblx0XHR8IERhdGFGaWVsZEFic3RyYWN0VHlwZXNcblx0XHR8IERhdGFQb2ludFR5cGVUeXBlcztcblxuXHRsZXQgZGF0YU1vZGVsUGF0aCA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcyB8IFByb3BlcnR5Pihcblx0XHRmaWVsZC5tZXRhUGF0aENvbnRleHQgPyBmaWVsZC5tZXRhUGF0aENvbnRleHQgOiBmaWVsZC5tZXRhUGF0aCxcblx0XHRmaWVsZC5jb250ZXh0UGF0aFxuXHQpO1xuXHRkYXRhTW9kZWxQYXRoID1cblx0XHRnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yVmFsdWUoZGF0YU1vZGVsUGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXM+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/LlVJPy5Jc0ltYWdlVVJMKSB7XG5cdFx0cmVzdWx0RmllbGQuZGlzcGxheVN0eWxlID0gXCJBdmF0YXJcIjtcblx0XHRyZXR1cm4gcmVzdWx0RmllbGQ7XG5cdH1cblx0aWYgKHByb3BlcnR5LmFubm90YXRpb25zPy5VST8uSW5wdXRNYXNrKSB7XG5cdFx0cmVzdWx0RmllbGQuZGlzcGxheVN0eWxlID0gXCJUZXh0XCI7XG5cdFx0cmV0dXJuIHJlc3VsdEZpZWxkO1xuXHR9XG5cdGlmIChwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5NYXNrZWQpIHtcblx0XHRyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUgPSBcIk1hc2tlZFwiO1xuXHRcdHJldHVybiByZXN1bHRGaWVsZDtcblx0fVxuXHQvLyBGb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLCBTdHJlYW0gd2lsbCBiZSBzaG93biB3aXRoaW4gYW4gZW50aXR5IGluc3RhbmNlIGFzIGNpcmNsZSBpZiB0aGUgZW50aXR5IGlzIGFubm90YXRlZCBhcyBJc05hdHVyYWxQZXJzb25cblx0Ly8gYW5kIG5laXRoZXIgSXNJbWFnZSBub3IgSXNJbWFnZVVSTCBhbm5vdGF0aW9uIGhhcyBiZWVuIHVzZWQuXG5cdGlmIChwcm9wZXJ0eS50eXBlID09PSBcIkVkbS5TdHJlYW1cIikge1xuXHRcdHJlc3VsdEZpZWxkLmRpc3BsYXlTdHlsZSA9IFwiRmlsZVwiO1xuXHRcdHJldHVybiByZXN1bHRGaWVsZDtcblx0fVxuXHRzZXRVcERyYWZ0SW5kaWNhdG9yKGRhdGFNb2RlbFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sIHJlc3VsdEZpZWxkKTtcblx0c3dpdGNoIChkYXRhRmllbGQuJFR5cGUgYXMgc3RyaW5nKSB7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhUG9pbnRUeXBlOlxuXHRcdFx0cmVzdWx0RmllbGQuZGlzcGxheVN0eWxlID0gXCJEYXRhUG9pbnRcIjtcblx0XHRcdHJldHVybiByZXN1bHRGaWVsZDtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb246XG5cdFx0XHRpZiAoKGRhdGFGaWVsZCBhcyB1bmtub3duIGFzIERhdGFGaWVsZEZvckFubm90YXRpb24pLlRhcmdldD8uJHRhcmdldD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGUpIHtcblx0XHRcdFx0cmVzdWx0RmllbGQuZGlzcGxheVN0eWxlID0gXCJEYXRhUG9pbnRcIjtcblx0XHRcdFx0cmV0dXJuIHJlc3VsdEZpZWxkO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0KGRhdGFGaWVsZCBhcyB1bmtub3duIGFzIERhdGFGaWVsZEZvckFubm90YXRpb24pLlRhcmdldD8uJHRhcmdldD8uJFR5cGUgPT09XG5cdFx0XHRcdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5Db250YWN0VHlwZVwiXG5cdFx0XHQpIHtcblx0XHRcdFx0cmVzdWx0RmllbGQuZGlzcGxheVN0eWxlID0gXCJDb250YWN0XCI7XG5cdFx0XHRcdHJldHVybiByZXN1bHRGaWVsZDtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdFx0cmVzdWx0RmllbGQuZGlzcGxheVN0eWxlID0gXCJCdXR0b25cIjtcblx0XHRcdHJldHVybiByZXN1bHRGaWVsZDtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoQWN0aW9uOlxuXHRcdFx0cmVzdWx0RmllbGQuZGlzcGxheVN0eWxlID0gXCJMaW5rXCI7XG5cdFx0XHRyZXR1cm4gcmVzdWx0RmllbGQ7XG5cdH1cblx0Y29uc3QgaGFzUXVpY2tWaWV3ID0gaXNVc2VkSW5OYXZpZ2F0aW9uV2l0aFF1aWNrVmlld0ZhY2V0cyhkYXRhTW9kZWxQYXRoLCBwcm9wZXJ0eSk7XG5cdGNvbnN0IGhhc1NlbWFudGljT2JqZWN0cyA9IHByb3BlcnR5T3JOYXZpZ2F0aW9uUHJvcGVydHlIYXNTZW1hbnRpY09iamVjdChyZXN1bHRGaWVsZCwgZGF0YU1vZGVsUGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pik7XG5cblx0aWYgKGlzU2VtYW50aWNLZXkocHJvcGVydHksIGRhdGFNb2RlbFBhdGgpICYmIHJlc3VsdEZpZWxkLmZvcm1hdE9wdGlvbnMuc2VtYW50aWNLZXlTdHlsZSkge1xuXHRcdG1hbmFnZVF1aWNrVmlld0ZvckRpc3BsYXlTdHlsZShcblx0XHRcdHJlc3VsdEZpZWxkLFxuXHRcdFx0aW50ZXJuYWxNb2RlbCxcblx0XHRcdGRhdGFNb2RlbFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdFx0XHRoYXNTZW1hbnRpY09iamVjdHMsXG5cdFx0XHRoYXNRdWlja1ZpZXdcblx0XHQpO1xuXHRcdHNldFVwT2JqZWN0SWRlbnRpZmllclRpdGxlQW5kVGV4dChyZXN1bHRGaWVsZCwgZGF0YU1vZGVsUGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pik7XG5cdFx0cmVzdWx0RmllbGQuc2hvd0Vycm9ySW5kaWNhdG9yID1cblx0XHRcdChkYXRhTW9kZWxQYXRoLmNvbnRleHRMb2NhdGlvbiBhcyB1bmtub3duIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8U2VydmljZU9iamVjdD4pPy50YXJnZXRPYmplY3Q/Ll90eXBlID09PVxuXHRcdFx0XHRcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiICYmICFyZXN1bHRGaWVsZC5mb3JtYXRPcHRpb25zLmZpZWxkR3JvdXBEcmFmdEluZGljYXRvclByb3BlcnR5UGF0aDtcblx0XHRyZXN1bHRGaWVsZC5zaXR1YXRpb25zSW5kaWNhdG9yUHJvcGVydHlQYXRoID0gKGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIFByb3BlcnR5KS5uYW1lO1xuXHRcdHJlc3VsdEZpZWxkLmRpc3BsYXlTdHlsZSA9XG5cdFx0XHRyZXN1bHRGaWVsZC5mb3JtYXRPcHRpb25zLnNlbWFudGljS2V5U3R5bGUgPT09IFwiT2JqZWN0SWRlbnRpZmllclwiID8gXCJPYmplY3RJZGVudGlmaWVyXCIgOiBcIkxhYmVsU2VtYW50aWNLZXlcIjtcblx0XHRyZXR1cm4gcmVzdWx0RmllbGQ7XG5cdH1cblx0aWYgKGRhdGFGaWVsZC5Dcml0aWNhbGl0eSkge1xuXHRcdG1hbmFnZVF1aWNrVmlld0ZvckRpc3BsYXlTdHlsZShcblx0XHRcdHJlc3VsdEZpZWxkLFxuXHRcdFx0aW50ZXJuYWxNb2RlbCxcblx0XHRcdGRhdGFNb2RlbFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdFx0XHRoYXNTZW1hbnRpY09iamVjdHMsXG5cdFx0XHRoYXNRdWlja1ZpZXdcblx0XHQpO1xuXHRcdHJlc3VsdEZpZWxkLmRpc3BsYXlTdHlsZSA9IFwiT2JqZWN0U3RhdHVzXCI7XG5cdFx0cmV0dXJuIHJlc3VsdEZpZWxkO1xuXHR9XG5cdGlmIChcblx0XHQocHJvcGVydHkuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeSB8fCBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQpICYmXG5cdFx0U3RyaW5nKHJlc3VsdEZpZWxkLmZvcm1hdE9wdGlvbnMuaXNDdXJyZW5jeU9yVW5pdEFsaWduZWQpID09PSBcInRydWVcIiAmJlxuXHRcdHJlc3VsdEZpZWxkLmZvcm1hdE9wdGlvbnMubWVhc3VyZURpc3BsYXlNb2RlICE9PSBcIkhpZGRlblwiXG5cdCkge1xuXHRcdGNvbnN0IGRlY2ltYWxQYWRkaW5nID0gRmllbGRTdHJ1Y3R1cmVIZWxwZXIuZ2V0RGVjaW1hbFBhZGRpbmcoYXBwQ29tcG9uZW50LCBwcm9wZXJ0eSk7XG5cdFx0cmVzdWx0RmllbGQudmFsdWVBc1N0cmluZ0JpbmRpbmdFeHByZXNzaW9uID0gcmVzdWx0RmllbGQudmFsdWVcblx0XHRcdD8gcmVzdWx0RmllbGQudmFsdWVcblx0XHRcdDogZ2V0VmFsdWVCaW5kaW5nKFxuXHRcdFx0XHRcdGRhdGFNb2RlbFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdFx0XHRcdFx0cmVzdWx0RmllbGQuZm9ybWF0T3B0aW9ucyxcblx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdGRlY2ltYWxQYWRkaW5nLFxuXHRcdFx0XHRcdHRydWVcblx0XHRcdCAgKTtcblxuXHRcdHJlc3VsdEZpZWxkLnVuaXRCaW5kaW5nRXhwcmVzc2lvbiA9IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0VUlGb3JtYXR0ZXJzLmdldEJpbmRpbmdGb3JVbml0T3JDdXJyZW5jeShcblx0XHRcdFx0ZGF0YU1vZGVsUGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pixcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0ISFmaWVsZC5mb3JtYXRPcHRpb25zLnNob3dPbmx5VW5pdERlY2ltYWxzXG5cdFx0XHQpXG5cdFx0KTtcblx0XHRyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUgPSBcIk51bWJlcldpdGhVbml0T3JDdXJyZW5jeUFsaWduZWRcIjtcblxuXHRcdHJldHVybiByZXN1bHRGaWVsZDtcblx0fVxuXHRpZiAocHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW11bmljYXRpb24/LklzRW1haWxBZGRyZXNzIHx8IHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tdW5pY2F0aW9uPy5Jc1Bob25lTnVtYmVyKSB7XG5cdFx0cmVzdWx0RmllbGQuZGlzcGxheVN0eWxlID0gXCJMaW5rXCI7XG5cdFx0cmV0dXJuIHJlc3VsdEZpZWxkO1xuXHR9XG5cdGlmIChwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/Lk11bHRpTGluZVRleHQpIHtcblx0XHRyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUgPSBcIkV4cGFuZGFibGVUZXh0XCI7XG5cdFx0cmV0dXJuIHJlc3VsdEZpZWxkO1xuXHR9XG5cblx0aWYgKGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybCkge1xuXHRcdHJlc3VsdEZpZWxkLmRpc3BsYXlTdHlsZSA9IFwiTGlua1wiO1xuXHRcdHJldHVybiByZXN1bHRGaWVsZDtcblx0fVxuXG5cdHJlc3VsdEZpZWxkLmRpc3BsYXlTdHlsZSA9IFwiVGV4dFwiO1xuXHRtYW5hZ2VRdWlja1ZpZXdGb3JEaXNwbGF5U3R5bGUoXG5cdFx0cmVzdWx0RmllbGQsXG5cdFx0aW50ZXJuYWxNb2RlbCxcblx0XHRkYXRhTW9kZWxQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRcdGhhc1NlbWFudGljT2JqZWN0cyxcblx0XHRoYXNRdWlja1ZpZXdcblx0KTtcblx0aWYgKHJlc3VsdEZpZWxkLmhhc1F1aWNrVmlldykge1xuXHRcdHJlc3VsdEZpZWxkLmRpc3BsYXlTdHlsZSA9IFwiTGlua1dpdGhRdWlja1ZpZXdcIjtcblx0fVxuXHRyZXR1cm4gcmVzdWx0RmllbGQ7XG59XG5cbi8qKlxuICogVGhpcyBkZXRlcm1pbmVzIHdoZXRoZXIgd2Ugc2hvdWxkIGFkZCBhIGRyYWZ0IGluZGljYXRvciB3aXRoaW4gdGhlIGZpZWxkIHRlbXBsYXRlLlxuICogQHBhcmFtIGRhdGFNb2RlbFBhdGggRGF0YU1vZGVsT2JqZWN0UGF0aCBwb2ludGluZyB0byB0aGUgbWFpbiBwcm9wZXJ0eSBmb3IgdGhlIGZpZWxkXG4gKiBAcGFyYW0gZmllbGRcbiAqL1xuZnVuY3Rpb24gc2V0VXBEcmFmdEluZGljYXRvcihkYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5PiwgZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogdm9pZCB7XG5cdGlmIChpc1NlbWFudGljS2V5KGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIFByb3BlcnR5LCBkYXRhTW9kZWxQYXRoKSkge1xuXHRcdGZpZWxkLmhhc1NpdHVhdGlvbnNJbmRpY2F0b3IgPSBTaXR1YXRpb25zSW5kaWNhdG9yLmdldFNpdHVhdGlvbnNOYXZpZ2F0aW9uUHJvcGVydHkoZGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlUeXBlKSAhPT0gdW5kZWZpbmVkO1xuXHRcdGlmIChcblx0XHRcdChkYXRhTW9kZWxQYXRoLmNvbnRleHRMb2NhdGlvbj8udGFyZ2V0RW50aXR5U2V0IGFzIEVudGl0eVNldCB8IHVuZGVmaW5lZCk/LmFubm90YXRpb25zPy5Db21tb24/LkRyYWZ0Um9vdCAmJlxuXHRcdFx0KGRhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5U2V0IGFzIEVudGl0eVNldCB8IHVuZGVmaW5lZCk/LmFubm90YXRpb25zPy5Db21tb24/LkRyYWZ0Um9vdCAmJlxuXHRcdFx0ZmllbGQuZm9ybWF0T3B0aW9ucz8uaGFzRHJhZnRJbmRpY2F0b3IgPT09IHRydWVcblx0XHQpIHtcblx0XHRcdC8vIEluIGNhc2Ugb2YgYSBncmlkIHRhYmxlIG9yIHRyZWUgdGFibGUgaGFzRHJhZnRJbmRpY2F0b3Igd2lsbCBiZSBmYWxzZSBzaW5jZSB0aGUgZHJhZnRcblx0XHRcdC8vIGluZGljYXRvciBuZWVkcyB0byBiZSByZW5kZXJlZCBpbnRvIGEgc2VwYXJhdGUgY29sdW1uXG5cdFx0XHQvLyBIZW5jZSB3ZSB0aGVuIGZhbGwgYmFjayB0byBkaXNwbGF5IHN0eWxlcyBPYmplY3RJZGVudGlmaWVyIG9yIExhYmVsU2VtYW50aWNLZXkgaW5zdGVhZFxuXHRcdFx0Ly8gb2YgdGhlIGNvbWJpbmVkIElEIGFuZCBkcmFmdCBpbmRpY2F0b3Igc3R5bGVcblx0XHRcdGZpZWxkLmRyYWZ0SW5kaWNhdG9yVmlzaWJsZSA9IGdldERyYWZ0SW5kaWNhdG9yVmlzaWJsZUJpbmRpbmcoZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3Q/Lm5hbWUpIGFzIHN0cmluZztcblx0XHRcdGZpZWxkLmFkZERyYWZ0SW5kaWNhdG9yID0gdHJ1ZTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFVwRWRpdFN0eWxlKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcywgYXBwQ29tcG9uZW50PzogQXBwQ29tcG9uZW50KTogRmllbGRCbG9ja1Byb3BlcnRpZXMge1xuXHRjb25zdCByZXN1bHRGaWVsZCA9IGZpZWxkO1xuXHRzZXRFZGl0U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdEZpZWxkLCByZXN1bHRGaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aCwgcmVzdWx0RmllbGQuZGF0YU1vZGVsUGF0aCk7XG5cdHJlc3VsdEZpZWxkLmZpZWxkR3JvdXBJZHMgPSBjb21wdXRlRmllbGRHcm91cElkcyhyZXN1bHRGaWVsZCwgYXBwQ29tcG9uZW50KTtcblx0cmV0dXJuIHJlc3VsdEZpZWxkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0VXBPYmplY3RJZGVudGlmaWVyVGl0bGVBbmRUZXh0KFxuXHRmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMsXG5cdHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT5cbik6IHZvaWQge1xuXHRjb25zdCBzZW1hbnRpY1N0eWxlID0gZmllbGQuZm9ybWF0T3B0aW9ucz8uc2VtYW50aWNLZXlTdHlsZTtcblx0Y29uc3QgZGlzcGxheU1vZGUgPSBmaWVsZC5mb3JtYXRPcHRpb25zLmRpc3BsYXlNb2RlO1xuXHRmaWVsZC5pZGVudGlmaWVyVGl0bGUgPSBnZXRUaXRsZUJpbmRpbmdFeHByZXNzaW9uKFxuXHRcdHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHRnZXRUZXh0QmluZGluZ0V4cHJlc3Npb24sXG5cdFx0eyBkaXNwbGF5TW9kZSwgc3BsaXRUaXRsZU9uVHdvTGluZXM6IGZpZWxkLmZvcm1hdE9wdGlvbnMuc2VtYW50aWNLZXlTdHlsZSA9PT0gXCJPYmplY3RJZGVudGlmaWVyXCIgfSxcblx0XHR1bmRlZmluZWQsXG5cdFx0dW5kZWZpbmVkXG5cdCk7XG5cdGZpZWxkLmlkZW50aWZpZXJUZXh0ID1cblx0XHRzZW1hbnRpY1N0eWxlID09PSBcIk9iamVjdElkZW50aWZpZXJcIiA/IGdldE9iamVjdElkZW50aWZpZXJUZXh0KGZpZWxkLmZvcm1hdE9wdGlvbnMsIHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCkgOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRVcEZvcm1hdE9wdGlvbnMoXG5cdGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyxcblx0ZGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdGNvbnRyb2xDb25maWd1cmF0aW9uOiBUZW1wbGF0ZVByb2Nlc3NvclNldHRpbmdzLFxuXHR2aWV3RGF0YU1vZGVsOiBKU09OTW9kZWxcbik6IHZvaWQge1xuXHRjb25zdCBvdmVycmlkZVByb3BzID0gZ2V0T3ZlcnJpZGVzKGNvbnRyb2xDb25maWd1cmF0aW9uLCAoZmllbGQubWV0YVBhdGhDb250ZXh0ID8gZmllbGQubWV0YVBhdGhDb250ZXh0IDogZmllbGQubWV0YVBhdGgpLmdldFBhdGgoKSk7XG5cblx0aWYgKCFmaWVsZC5mb3JtYXRPcHRpb25zLmRpc3BsYXlNb2RlKSB7XG5cdFx0ZmllbGQuZm9ybWF0T3B0aW9ucy5kaXNwbGF5TW9kZSA9IFVJRm9ybWF0dGVycy5nZXREaXNwbGF5TW9kZShkYXRhTW9kZWxQYXRoKTtcblx0fVxuXHRpZiAoZmllbGQuZm9ybWF0T3B0aW9ucy5kaXNwbGF5TW9kZSA9PT0gXCJEZXNjcmlwdGlvblwiKSB7XG5cdFx0ZmllbGQudmFsdWVBc1N0cmluZ0JpbmRpbmdFeHByZXNzaW9uID0gZmllbGQudmFsdWVcblx0XHRcdD8gZmllbGQudmFsdWVcblx0XHRcdDogZ2V0VmFsdWVCaW5kaW5nKGRhdGFNb2RlbFBhdGgsIGZpZWxkLmZvcm1hdE9wdGlvbnMsIHRydWUsIHRydWUsIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cdH1cblx0ZmllbGQuZm9ybWF0T3B0aW9ucy50ZXh0TGluZXNFZGl0ID1cblx0XHQob3ZlcnJpZGVQcm9wcyBhcyB1bmtub3duIGFzIEZpZWxkRm9ybWF0T3B0aW9ucykudGV4dExpbmVzRWRpdCB8fFxuXHRcdChvdmVycmlkZVByb3BzLmZvcm1hdE9wdGlvbnMgJiYgb3ZlcnJpZGVQcm9wcy5mb3JtYXRPcHRpb25zLnRleHRMaW5lc0VkaXQpIHx8XG5cdFx0ZmllbGQuZm9ybWF0T3B0aW9ucy50ZXh0TGluZXNFZGl0IHx8XG5cdFx0NDtcblx0ZmllbGQuZm9ybWF0T3B0aW9ucy50ZXh0TWF4TGluZXMgPVxuXHRcdChvdmVycmlkZVByb3BzIGFzIHVua25vd24gYXMgRmllbGRGb3JtYXRPcHRpb25zKS50ZXh0TWF4TGluZXMgfHxcblx0XHQob3ZlcnJpZGVQcm9wcy5mb3JtYXRPcHRpb25zICYmIG92ZXJyaWRlUHJvcHMuZm9ybWF0T3B0aW9ucy50ZXh0TWF4TGluZXMpIHx8XG5cdFx0ZmllbGQuZm9ybWF0T3B0aW9ucy50ZXh0TWF4TGluZXM7XG5cblx0Ly8gUmV0cmlldmUgdGV4dCBmcm9tIHZhbHVlIGxpc3QgYXMgZmFsbGJhY2sgZmVhdHVyZSBmb3IgbWlzc2luZyB0ZXh0IGFubm90YXRpb24gb24gdGhlIHByb3BlcnR5XG5cdGlmICh2aWV3RGF0YU1vZGVsPy5nZXRQcm9wZXJ0eShcIi9yZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0XCIpKSB7XG5cdFx0ZmllbGQuZm9ybWF0T3B0aW9ucy5yZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0ID0gaXNSZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0RW5hYmxlZChcblx0XHRcdGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0ISxcblx0XHRcdGZpZWxkLmZvcm1hdE9wdGlvbnNcblx0XHQpO1xuXHRcdGlmIChmaWVsZC5mb3JtYXRPcHRpb25zLnJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QpIHtcblx0XHRcdC8vIENvbnNpZGVyIFRleHRBcnJhbmdlbWVudCBhdCBFbnRpdHlUeXBlIG90aGVyd2lzZSBzZXQgZGVmYXVsdCBkaXNwbGF5IGZvcm1hdCAnRGVzY3JpcHRpb25WYWx1ZSdcblx0XHRcdGNvbnN0IGhhc0VudGl0eVRleHRBcnJhbmdlbWVudCA9ICEhZGF0YU1vZGVsUGF0aD8udGFyZ2V0RW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LlVJPy5UZXh0QXJyYW5nZW1lbnQ7XG5cdFx0XHRmaWVsZC5mb3JtYXRPcHRpb25zLmRpc3BsYXlNb2RlID0gaGFzRW50aXR5VGV4dEFycmFuZ2VtZW50ID8gZmllbGQuZm9ybWF0T3B0aW9ucy5kaXNwbGF5TW9kZSA6IFwiRGVzY3JpcHRpb25WYWx1ZVwiO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0VXBWYWx1ZVN0YXRlKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0bGV0IHZhbHVlU3RhdGVFeHA7XG5cdGNvbnN0IGZpZWxkQ29udGFpbmVyVHlwZSA9IGZpZWxkLmZvcm1hdE9wdGlvbnM/LnRleHRBbGlnbk1vZGUgPyBmaWVsZC5mb3JtYXRPcHRpb25zPy50ZXh0QWxpZ25Nb2RlIDogXCJGb3JtXCI7XG5cdGNvbnN0IHByb3BlcnR5UGF0aEluTW9kZWwgPSBwYXRoSW5Nb2RlbChnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKGZpZWxkLmRhdGFNb2RlbFBhdGgpKSBhcyBQYXRoSW5Nb2RlbEV4cHJlc3Npb248UHJvcGVydHk+O1xuXHRjb25zdCByZWxhdGl2ZUxvY2F0aW9uID0gZ2V0UmVsYXRpdmVQYXRocyhmaWVsZC5kYXRhTW9kZWxQYXRoKTtcblx0Y29uc3QgdGV4dFBhdGggPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZmllbGQuZGF0YU1vZGVsUGF0aD8udGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0LCByZWxhdGl2ZUxvY2F0aW9uKTtcblx0Y29uc3QgcHJvcGVydHlQYXRoID0gZmllbGQuZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3Q/Lm5hbWU7XG5cdGNvbnN0IHJlY29tbWVuZGF0aW9uVmFsdWUgPSBwYXRoSW5Nb2RlbChgJHtwcm9wZXJ0eVBhdGh9QCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnBsYWNlaG9sZGVyVmFsdWVgKTtcblx0Y29uc3QgcmVjb21tZW5kYXRpb25EZXNjcmlwdGlvbiA9IHBhdGhJbk1vZGVsKGAke3Byb3BlcnR5UGF0aH1AJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMucGxhY2Vob2xkZXJEZXNjcmlwdGlvbmApO1xuXHRpZiAoZmllbGRDb250YWluZXJUeXBlID09PSBcIlRhYmxlXCIpIHtcblx0XHR2YWx1ZVN0YXRlRXhwID0gZm9ybWF0UmVzdWx0KFxuXHRcdFx0W1xuXHRcdFx0XHRyZWNvbW1lbmRhdGlvblZhbHVlLFxuXHRcdFx0XHRyZWNvbW1lbmRhdGlvbkRlc2NyaXB0aW9uLFxuXHRcdFx0XHRwYXRoSW5Nb2RlbChgL3JlY29tbWVuZGF0aW9uc0RhdGFgLCBcImludGVybmFsXCIpLFxuXHRcdFx0XHRwYXRoSW5Nb2RlbChgL2lzRWRpdGFibGVgLCBcInVpXCIpLFxuXHRcdFx0XHRmaWVsZC5kYXRhU291cmNlUGF0aCxcblx0XHRcdFx0cHJvcGVydHlQYXRoSW5Nb2RlbCxcblx0XHRcdFx0dGV4dFBhdGhcblx0XHRcdF0sXG5cdFx0XHRhZGRpdGlvbmFsVmFsdWVGb3JtYXR0ZXIuZm9ybWF0VmFsdWVTdGF0ZSxcblx0XHRcdGZpZWxkLmRhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5VHlwZVxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0dmFsdWVTdGF0ZUV4cCA9IGZvcm1hdFJlc3VsdChcblx0XHRcdFtcblx0XHRcdFx0cmVjb21tZW5kYXRpb25WYWx1ZSxcblx0XHRcdFx0cmVjb21tZW5kYXRpb25EZXNjcmlwdGlvbixcblx0XHRcdFx0cGF0aEluTW9kZWwoYC9yZWNvbW1lbmRhdGlvbnNEYXRhYCwgXCJpbnRlcm5hbFwiKSxcblx0XHRcdFx0cGF0aEluTW9kZWwoYC9pc0VkaXRhYmxlYCwgXCJ1aVwiKSxcblx0XHRcdFx0ZmllbGQuZGF0YVNvdXJjZVBhdGgsXG5cdFx0XHRcdHByb3BlcnR5UGF0aEluTW9kZWwsXG5cdFx0XHRcdHRleHRQYXRoXG5cdFx0XHRdLFxuXHRcdFx0YWRkaXRpb25hbFZhbHVlRm9ybWF0dGVyLmZvcm1hdFZhbHVlU3RhdGVcblx0XHQpO1xuXHR9XG5cblx0ZmllbGQudmFsdWVTdGF0ZSA9IGNvbXBpbGVFeHByZXNzaW9uKHZhbHVlU3RhdGVFeHApO1xuXHRyZXR1cm4gZmllbGQudmFsdWVTdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFVwVmlzaWJsZVByb3BlcnRpZXMoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogdm9pZCB7XG5cdC8vIHdlIGRvIHRoaXMgYmVmb3JlIGVuaGFuY2luZyB0aGUgZGF0YU1vZGVsUGF0aCBzbyB0aGF0IGl0IHN0aWxsIHBvaW50cyBhdCB0aGUgRGF0YUZpZWxkXG5cdC8vIGNvbnN0IHZpc2libGVQcm9wZXJ0aWVzOiBQYXJ0aWFsPGZpZWxkQmxvY2s+ID0ge307XG5cdGNvbnN0IHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcz4oXG5cdFx0ZmllbGQubWV0YVBhdGhDb250ZXh0ID8gZmllbGQubWV0YVBhdGhDb250ZXh0IDogZmllbGQubWV0YVBhdGgsXG5cdFx0ZmllbGQuY29udGV4dFBhdGhcblx0KTtcblxuXHRmaWVsZC52aXNpYmxlID8/PSBnZXRWaXNpYmxlRXhwcmVzc2lvbihwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgsIGZpZWxkLmZvcm1hdE9wdGlvbnMpO1xuXHRmaWVsZC5kaXNwbGF5VmlzaWJsZSA9IGZpZWxkLmZvcm1hdE9wdGlvbnM/LmZpZWxkTW9kZSA9PT0gXCJub3dyYXBwZXJcIiA/IGZpZWxkLnZpc2libGUgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldENvbnRlbnRJZChtYWNyb0lkOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gYCR7bWFjcm9JZH0tY29udGVudGA7XG59XG5cbi8qKlxuICogQ29tcHV0ZXMgcHJvcGVydGllcyBmb3IgdGhlIGZpbGUgdGVtcGxhdGluZy5cbiAqIEBwYXJhbSBmaWVsZCBUaGUgZmllbGRcbiAqL1xuZnVuY3Rpb24gY29tcHV0ZUZpbGVVcGxvYWRlclByb3BlcnRpZXMoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogdm9pZCB7XG5cdGlmIChmaWVsZC5kaXNwbGF5U3R5bGUgPT09IFwiRmlsZVwiKSB7XG5cdFx0ZmllbGQuZmlsZVJlbGF0aXZlUHJvcGVydHlQYXRoID0gZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aChmaWVsZC5kYXRhTW9kZWxQYXRoKSB8fCBcIlwiO1xuXHRcdGNvbnN0IGZpbGVOYW1lQW5ub3RhdGlvbiA9IGZpZWxkLnByb3BlcnR5LmFubm90YXRpb25zLkNvcmU/LkNvbnRlbnREaXNwb3NpdGlvbj8uRmlsZW5hbWU7XG5cdFx0aWYgKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKGZpbGVOYW1lQW5ub3RhdGlvbikpIHtcblx0XHRcdGNvbnN0IGZpbGVOYW1lRGF0YU1vZGVsUGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoKGZpZWxkLmRhdGFNb2RlbFBhdGgsIGZpbGVOYW1lQW5ub3RhdGlvbi5wYXRoKTtcblx0XHRcdGZpZWxkLmZpbGVGaWxlbmFtZUV4cHJlc3Npb24gPSBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKGZpbGVOYW1lRGF0YU1vZGVsUGF0aCkgPz8gXCJcIjtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBDb21wdXRlcyBwcm9wZXJ0aWVzIGZvciB0aGUgaW5saW5lIGVkaXQgdGVtcGxhdGluZy5cbiAqIEBwYXJhbSBmaWVsZCBUaGUgZmllbGRcbiAqIEBwYXJhbSB2aWV3RGF0YU1vZGVsXG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVJbmxpbmVFZGl0UHJvcGVydGllcyhmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMsIHZpZXdEYXRhTW9kZWw6IEpTT05Nb2RlbCk6IHZvaWQge1xuXHRpZiAoZmllbGQuZGlzcGxheVN0eWxlID09PSBcIkZpbGVcIiB8fCBmaWVsZC5kaXNwbGF5U3R5bGUgPT09IFwiQXZhdGFyXCIpIHtcblx0XHRmaWVsZC5pbmxpbmVFZGl0RW5hYmxlZCA9IHVuZGVmaW5lZDtcblx0XHRyZXR1cm47XG5cdH1cblx0ZmllbGQuaW5saW5lRWRpdEVuYWJsZWQgPVxuXHRcdGZpZWxkLmlubGluZUVkaXRFbmFibGVkID09PSB0cnVlIHx8IHZpZXdEYXRhTW9kZWw/LmdldFByb3BlcnR5KFwiL2lzSW5saW5lRWRpdEVuYWJsZWRcIikgPT09IHRydWUgPyB0cnVlIDogdW5kZWZpbmVkO1xuXHRpZiAoZmllbGQuaW5saW5lRWRpdEVuYWJsZWQgJiYgZmllbGQuZWRpdE1vZGVBc09iamVjdCAhPT0gXCJEaXNwbGF5XCIpIHtcblx0XHRjb25zdCBjb21wdXRlZEVkaXRhYmxlRXhwcmVzc2lvbiA9IFVJRm9ybWF0dGVycy5nZXRFZGl0YWJsZUV4cHJlc3Npb25Bc09iamVjdChcblx0XHRcdGZpZWxkLnByb3BlcnR5Rm9yRmllbGRDb250cm9sLFxuXHRcdFx0ZmllbGQuY29udmVydGVkTWV0YVBhdGgsXG5cdFx0XHRmaWVsZC5kYXRhTW9kZWxQYXRoXG5cdFx0KTtcblxuXHRcdGZpZWxkLmhhc0lubGluZUVkaXQgPSB0cmFuc2Zvcm1SZWN1cnNpdmVseShcblx0XHRcdGNvbXB1dGVkRWRpdGFibGVFeHByZXNzaW9uLFxuXHRcdFx0XCJQYXRoSW5Nb2RlbFwiLFxuXHRcdFx0KGV4cHIpID0+IHtcblx0XHRcdFx0aWYgKGV4cHIucGF0aCA9PT0gXCJpc0VkaXRhYmxlXCIgJiYgZXhwci5tb2RlbE5hbWUgPT09IFwidWlcIikge1xuXHRcdFx0XHRcdHJldHVybiBjb25zdGFudCh0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZXhwcjtcblx0XHRcdH0sXG5cdFx0XHR0cnVlXG5cdFx0KSBhcyB1bmtub3duIGFzIGJvb2xlYW47XG5cdH1cbn1cblxuY29uc3QgRmllbGRTdHJ1Y3R1cmVIZWxwZXIgPSB7XG5cdGdldERlY2ltYWxQYWRkaW5nLFxuXHRzZXRVcEZpZWxkLFxuXHRjb21wdXRlRXh0ZXJuYWxJRCxcblx0c2V0VXBEaXNwbGF5U3R5bGUsXG5cdHNldFVwT2JqZWN0SWRlbnRpZmllclRpdGxlQW5kVGV4dCxcblx0c2V0VXBWYWx1ZVN0YXRlXG59O1xuZXhwb3J0IGRlZmF1bHQgRmllbGRTdHJ1Y3R1cmVIZWxwZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBOExPLFNBQVNBLFVBQVVBLENBQ3pCQyxLQUFnQyxFQUNoQ0Msb0JBQStDLEVBQy9DQyxhQUF3QixFQUN4QkMsYUFBd0IsRUFDeEJDLFlBQTBCLEVBQzFCQyxpQkFBMkIsRUFDM0JDLFFBQThCLEVBQzlCQyxXQUFpQyxFQUNWO0lBQ3ZCLE1BQU1DLFdBQVcsR0FBRztNQUFFLEdBQUdSO0lBQU0sQ0FBb0M7SUFDbkVTLE1BQU0sQ0FBQ0MsY0FBYyxDQUFDRixXQUFXLEVBQUUsT0FBTyxFQUFFO01BQzNDRyxHQUFHLEVBQUVBLENBQUEsS0FBTTtRQUNWLE9BQU9YLEtBQUssQ0FBQ1ksS0FBSztNQUNuQjtJQUNELENBQUMsQ0FBQztJQUNGSCxNQUFNLENBQUNDLGNBQWMsQ0FBQ0YsV0FBVyxFQUFFLGFBQWEsRUFBRTtNQUNqREcsR0FBRyxFQUFFQSxDQUFBLEtBQU07UUFDVixPQUFPWCxLQUFLLENBQUNhLFdBQVc7TUFDekI7SUFDRCxDQUFDLENBQUM7SUFFRkwsV0FBVyxDQUFDTSxNQUFNLEdBQUdkLEtBQUssQ0FBQ2MsTUFBTTtJQUNqQ04sV0FBVyxDQUFDRixRQUFRLEdBQUlBLFFBQVEsR0FBR0EsUUFBUSxHQUFHTixLQUFLLENBQUNNLFFBQW9CO0lBQ3hFRSxXQUFXLENBQUNELFdBQVcsR0FBSUEsV0FBVyxHQUFHQSxXQUFXLEdBQUdQLEtBQUssQ0FBQ08sV0FBdUI7SUFDcEZDLFdBQVcsQ0FB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
647
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzZXRVcEZpZWxkIiwiZmllbGQiLCJjb250cm9sQ29uZmlndXJhdGlvbiIsInZpZXdEYXRhTW9kZWwiLCJpbnRlcm5hbE1vZGVsIiwiYXBwQ29tcG9uZW50IiwiaXNSZWFkT25seUluaXRpYWwiLCJtZXRhUGF0aCIsImNvbnRleHRQYXRoIiwicmVzdWx0RmllbGQiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldCIsInZhbHVlIiwiZGVzY3JpcHRpb24iLCJjaGFuZ2UiLCJ2aXNpYmxlIiwidmhJZFByZWZpeCIsIl9mbGV4SWQiLCJpZCIsImlkUHJlZml4IiwiZm9ybWF0T3B0aW9ucyIsImdldEZvcm1hdE9wdGlvbnMiLCJzaG93T25seVVuaXREZWNpbWFscyIsImdldFByb3BlcnR5IiwidmFsdWVIZWxwTWV0YVBhdGgiLCJjb21wdXRlQ29tbW9uUHJvcGVydGllcyIsImdldE1vZGVsIiwiY29udmVydGVkTWV0YVBhdGgiLCJzZXRVcERhdGFQb2ludFR5cGUiLCJzZXRVcFZpc2libGVQcm9wZXJ0aWVzIiwiY29tcHV0ZUlEcyIsImRhdGFTb3VyY2VQYXRoIiwiZ2V0VGFyZ2V0T2JqZWN0UGF0aCIsImRhdGFNb2RlbFBhdGgiLCJsYWJlbCIsIkZpZWxkSGVscGVyIiwiY29tcHV0ZUxhYmVsVGV4dCIsImNvbnRleHQiLCJjb21wdXRlRXh0ZXJuYWxJRCIsImVudGl0eVR5cGUiLCJvZGF0YU1ldGFNb2RlbCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwidGFyZ2V0RW50aXR5VHlwZSIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImZvcklubGluZUNyZWF0aW9uUm93cyIsImhhc1Byb3BlcnR5SW5zZXJ0UmVzdHJpY3Rpb25zIiwiY29tcHV0ZUVkaXRNb2RlIiwiY29tcHV0ZUNvbGxhYm9yYXRpb25Qcm9wZXJ0aWVzIiwiY29tcHV0ZUVkaXRhYmxlRXhwcmVzc2lvbnMiLCJzZXRVcEZvcm1hdE9wdGlvbnMiLCJkYXRhTW9kZWxQYXRoRXh0ZXJuYWxJRCIsInNldFVwRGlzcGxheVN0eWxlIiwic2V0VXBFZGl0U3R5bGUiLCJ2YWx1ZVN0YXRlIiwic2V0VXBWYWx1ZVN0YXRlIiwiZWRpdFN0eWxlIiwiZWRpdFN0eWxlUGxhY2Vob2xkZXIiLCJzZXRJbnB1dFdpdGhWYWx1ZWhlbHBQbGFjZWhvbGRlciIsImNvbXB1dGVGaWxlVXBsb2FkZXJQcm9wZXJ0aWVzIiwiY29tcHV0ZUlubGluZUVkaXRQcm9wZXJ0aWVzIiwiYURpc3BsYXlTdHlsZXNXaXRob3V0UHJvcFRleHQiLCJkaXNwbGF5U3R5bGUiLCJpbmNsdWRlcyIsInRhcmdldE9iamVjdCIsInRleHQiLCJGaWVsZFRlbXBsYXRpbmciLCJnZXRUZXh0QmluZGluZyIsInNob3dFbXB0eUluZGljYXRvciIsImVtcHR5SW5kaWNhdG9yTW9kZSIsIlN0cmluZyIsInVuZGVmaW5lZCIsImlzUHJvcGVydHkiLCJhbm5vdGF0aW9ucyIsIlVJIiwiRGF0YUZpZWxkRGVmYXVsdCIsImNvbXB1dGVkRWRpdE1vZGUiLCJjb21waWxlRXhwcmVzc2lvbiIsImlmRWxzZSIsImVxdWFsIiwicmVhZE9ubHkiLCJldmVudEhhbmRsZXJzIiwibGl2ZUNoYW5nZSIsInZhbGlkYXRlRmllbGRHcm91cCIsImhhbmRsZVR5cGVNaXNzbWF0Y2giLCJoYW5kbGVGaWxlU2l6ZUV4Y2VlZCIsImhhbmRsZVVwbG9hZENvbXBsZXRlIiwidXBsb2FkU3RyZWFtIiwicmVtb3ZlU3RyZWFtIiwiaGFuZGxlT3BlblVwbG9hZGVyIiwiaGFuZGxlQ2xvc2VVcGxvYWRlciIsIm9wZW5FeHRlcm5hbExpbmsiLCJvbkZvY3VzT3V0IiwibGlua1ByZXNzZWQiLCJkaXNwbGF5QWdncmVnYXRpb25EZXRhaWxzIiwib25EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgiLCJzaG93Q29sbGFib3JhdGlvbkVkaXRVc2VyIiwib25EYXRhRmllbGRBY3Rpb25CdXR0b24iLCJvbkRhdGFGaWVsZFdpdGhJQk4iLCJfZXhwb3J0cyIsImNvbXB1dGVkRWRpdGFibGVFeHByZXNzaW9uIiwiVUlGb3JtYXR0ZXJzIiwiZ2V0RWRpdGFibGVFeHByZXNzaW9uQXNPYmplY3QiLCJwcm9wZXJ0eUZvckZpZWxkQ29udHJvbCIsIk1vZGVsSGVscGVyIiwiaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQiLCJlZGl0TW9kZSIsIkZpZWxkRWRpdE1vZGUiLCJEaXNwbGF5IiwiY29sbGFib3JhdGlvbkVuYWJsZWQiLCJjb2xsYWJvcmF0aW9uRXhwcmVzc2lvbiIsImdldENvbGxhYm9yYXRpb25FeHByZXNzaW9uIiwiQ29sbGFib3JhdGlvbkZvcm1hdHRlcnMiLCJoYXNDb2xsYWJvcmF0aW9uQWN0aXZpdHkiLCJlZGl0YWJsZUV4cHJlc3Npb24iLCJhbmQiLCJub3QiLCJjb25zdGFudCIsIklzSW5hY3RpdmUiLCJlZGl0TW9kZUFzT2JqZWN0IiwibWV0YU1vZGVsIiwiTWV0YU1vZGVsQ29udmVydGVyIiwiY29udmVydE1ldGFNb2RlbENvbnRleHQiLCJtZXRhUGF0aENvbnRleHQiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yVmFsdWUiLCJwcm9wZXJ0eSIsIlZhbHVlIiwicmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucyIsImdldFJlcXVpcmVkUHJvcGVydGllc0Zyb21JbnNlcnRSZXN0cmljdGlvbnMiLCJjb250ZXh0UGF0aENvbnRleHQiLCJnZXRQYXRoIiwicmVwbGFjZUFsbCIsInJlcXVpcmVkUHJvcGVydGllc0Zyb21VcGRhdGVSZXN0cmljdGlvbnMiLCJnZXRSZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zIiwib1JlcXVpcmVkUHJvcGVydGllcyIsImVuYWJsZWRFeHByZXNzaW9uIiwiZ2V0RW5hYmxlZEV4cHJlc3Npb24iLCJyZXF1aXJlZEV4cHJlc3Npb24iLCJnZXRSZXF1aXJlZEV4cHJlc3Npb24iLCJtZWFzdXJlUmVhZE9ubHkiLCJtZWFzdXJlRGlzcGxheU1vZGUiLCJnZXRFZGl0TW9kZSIsImV4dGVybmFsSURQcm9wZXJ0eSIsImdldEFzc29jaWF0ZWRFeHRlcm5hbElkUHJvcGVydHkiLCJ0eXBlIiwiaXNEYXRhRmllbGQiLCIkdGFyZ2V0IiwiZXh0ZXJuYWxJZFByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRFeHRlcm5hbElkUHJvcGVydHlQYXRoIiwiZXh0ZXJuYWxJZENvbnRleHQiLCJjb252ZXJ0ZWRNZXRhUGF0aEV4dGVybmFsSUQiLCJjb21wdXRlRmllbGRHcm91cElkcyIsInR5cGVzRm9yQ29sbGFib3JhdGlvbkZvY3VzTWFuYWdlbWVudCIsInNpZGVFZmZlY3RTZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZmllbGRHcm91cElkcyIsIm1haW5Qcm9wZXJ0eVJlbGF0aXZlUGF0aCIsImdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJjb2xsYWJvcmF0aW9uRmllbGRHcm91cCIsIkNvbGxhYm9yYXRpb25GaWVsZEdyb3VwUHJlZml4IiwicHVzaCIsImxlbmd0aCIsIl9hcGlJZCIsImdldENvbnRlbnRJZCIsImVkaXRTdHlsZUlkIiwiZ2VuZXJhdGUiLCJmaWVsZE1vZGUiLCJkaXNwbGF5U3R5bGVJZCIsInRleHRBbGlnbk1vZGUiLCJkaXNwbGF5TW9kZSIsInRleHRMaW5lc0VkaXQiLCJ0ZXh0TWF4TGluZXMiLCJ0ZXh0TWF4Q2hhcmFjdGVyc0Rpc3BsYXkiLCJ0ZXh0RXhwYW5kQmVoYXZpb3JEaXNwbGF5IiwidGV4dE1heExlbmd0aCIsImZpZWxkRWRpdFN0eWxlIiwicmFkaW9CdXR0b25zSG9yaXpvbnRhbExheW91dCIsInNob3dUaW1lIiwic2hvd1RpbWV6b25lIiwic2hvd0RhdGUiLCJnZXRPYmplY3RJZGVudGlmaWVyVGV4dCIsImZpZWxkRm9ybWF0T3B0aW9ucyIsInByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCIsInByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24iLCJwYXRoSW5Nb2RlbCIsInRhcmdldERpc3BsYXlNb2RlIiwicHJvcGVydHlEZWZpbml0aW9uIiwiaXNQcm9wZXJ0eVBhdGhFeHByZXNzaW9uIiwiY29tbW9uVGV4dCIsIkNvbW1vbiIsIlRleHQiLCJmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uIiwicmVsYXRpdmVMb2NhdGlvbiIsImdldFJlbGF0aXZlUGF0aHMiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJmb3JtYXRSZXN1bHQiLCJ2YWx1ZUZvcm1hdHRlcnMiLCJmb3JtYXRUb0tlZXBXaGl0ZXNwYWNlIiwiZ2V0T3ZlcnJpZGVzIiwicHJvcHMiLCJjb250cm9sQ29uZmlnIiwia2V5cyIsImZvckVhY2giLCJjb25maWdLZXkiLCJtYW5hZ2VRdWlja1ZpZXdGb3JEaXNwbGF5U3R5bGUiLCJoYXNTZW1hbnRpY09iamVjdHMiLCJoYXNRdWlja1ZpZXciLCJxdWlja1ZpZXdUeXBlIiwiZm91bmRTZW1hbnRpY09iamVjdHMiLCJtYW5hZ2VTZW1hbnRpY09iamVjdHNGb3JDdXJyZW50VXNlciIsInNlbWFudGljT2JqZWN0IiwiaGFzUmVhY2hhYmxlU3RhdGljU2VtYW50aWNPYmplY3QiLCJkeW5hbWljU2VtYW50aWNPYmplY3RzIiwicHJvcGVydHlPck5hdmlnYXRpb25Qcm9wZXJ0eUhhc1NlbWFudGljT2JqZWN0IiwiZ2V0UHJvcGVydHlXaXRoU2VtYW50aWNPYmplY3QiLCJmaWVsZENvbnRhaW5lclR5cGUiLCJwcm9wZXJ0eVBhdGgiLCJuYW1lIiwicmVjb21tZW5kYXRpb25WYWx1ZSIsInJlY29tbWVuZGF0aW9uRGVzY3JpcHRpb24iLCJwbGFjZWhvbGRlckV4cCIsImFkZGl0aW9uYWxWYWx1ZUZvcm1hdHRlciIsImZvcm1hdFBsYWNlaG9sZGVyIiwiZGF0YUZpZWxkIiwiZGF0YVBvaW50VHlwZSIsInRlcm0iLCIkVHlwZSIsImdldERlY2ltYWxQYWRkaW5nIiwibWFuaWZlc3QiLCJnZXRNYW5pZmVzdEVudHJ5IiwiTWVhc3VyZXMiLCJJU09DdXJyZW5jeSIsIm1hY3JvcyIsInRhYmxlIiwiY3VycmVuY3kiLCJkZWNpbWFsUGFkZGluZyIsInVuaXRPZk1lYXN1cmUiLCJoYXNVbml0T3JDdXJyZW5jeSIsIlVuaXQiLCJoYXNWYWxpZEFuYWx5dGljYWxDdXJyZW5jeU9yVW5pdCIsInRleHRGcm9tVmFsdWVMaXN0IiwiSXNJbWFnZSIsIklzSW1hZ2VVUkwiLCJJbnB1dE1hc2siLCJNYXNrZWQiLCJpc0ZpZWxkR3JvdXBJdGVtIiwic2V0VXBEcmFmdEluZGljYXRvciIsIlRhcmdldCIsImlzVXNlZEluTmF2aWdhdGlvbldpdGhRdWlja1ZpZXdGYWNldHMiLCJpc1NlbWFudGljS2V5Iiwic2VtYW50aWNLZXlTdHlsZSIsInNldFVwT2JqZWN0SWRlbnRpZmllclRpdGxlQW5kVGV4dCIsInNob3dFcnJvckluZGljYXRvciIsImNvbnRleHRMb2NhdGlvbiIsIl90eXBlIiwiZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoIiwic2l0dWF0aW9uc0luZGljYXRvclByb3BlcnR5UGF0aCIsIkNyaXRpY2FsaXR5IiwiaXNDdXJyZW5jeU9yVW5pdEFsaWduZWQiLCJGaWVsZFN0cnVjdHVyZUhlbHBlciIsInZhbHVlQXNTdHJpbmdCaW5kaW5nRXhwcmVzc2lvbiIsImdldFZhbHVlQmluZGluZyIsInVuaXRCaW5kaW5nRXhwcmVzc2lvbiIsImdldEJpbmRpbmdGb3JVbml0T3JDdXJyZW5jeSIsIkNvbW11bmljYXRpb24iLCJJc0VtYWlsQWRkcmVzcyIsIklzUGhvbmVOdW1iZXIiLCJNdWx0aUxpbmVUZXh0IiwiaGFzU2l0dWF0aW9uc0luZGljYXRvciIsIlNpdHVhdGlvbnNJbmRpY2F0b3IiLCJnZXRTaXR1YXRpb25zTmF2aWdhdGlvblByb3BlcnR5IiwidGFyZ2V0RW50aXR5U2V0IiwiRHJhZnRSb290IiwiaGFzRHJhZnRJbmRpY2F0b3IiLCJkcmFmdEluZGljYXRvclZpc2libGUiLCJnZXREcmFmdEluZGljYXRvclZpc2libGVCaW5kaW5nIiwiYWRkRHJhZnRJbmRpY2F0b3IiLCJzZXRFZGl0U3R5bGVQcm9wZXJ0aWVzIiwic2VtYW50aWNTdHlsZSIsImlkZW50aWZpZXJUaXRsZSIsImdldFRpdGxlQmluZGluZ0V4cHJlc3Npb24iLCJnZXRUZXh0QmluZGluZ0V4cHJlc3Npb24iLCJzcGxpdFRpdGxlT25Ud29MaW5lcyIsImlkZW50aWZpZXJUZXh0Iiwib3ZlcnJpZGVQcm9wcyIsImdldERpc3BsYXlNb2RlIiwicmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCIsImlzUmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdEVuYWJsZWQiLCJoYXNFbnRpdHlUZXh0QXJyYW5nZW1lbnQiLCJUZXh0QXJyYW5nZW1lbnQiLCJ2YWx1ZVN0YXRlRXhwIiwicHJvcGVydHlQYXRoSW5Nb2RlbCIsInRleHRQYXRoIiwiZm9ybWF0VmFsdWVTdGF0ZSIsImdldFZpc2libGVFeHByZXNzaW9uIiwiZGlzcGxheVZpc2libGUiLCJtYWNyb0lkIiwiZmlsZVJlbGF0aXZlUHJvcGVydHlQYXRoIiwiZmlsZU5hbWVBbm5vdGF0aW9uIiwiQ29yZSIsIkNvbnRlbnREaXNwb3NpdGlvbiIsIkZpbGVuYW1lIiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCJmaWxlTmFtZURhdGFNb2RlbFBhdGgiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsInBhdGgiLCJmaWxlRmlsZW5hbWVFeHByZXNzaW9uIiwiaW5saW5lRWRpdEVuYWJsZWQiLCJoYXNJbmxpbmVFZGl0IiwidHJhbnNmb3JtUmVjdXJzaXZlbHkiLCJleHByIiwibW9kZWxOYW1lIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGaWVsZFN0cnVjdHVyZUhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVNldCwgUHJvcGVydHksIFByb3BlcnR5UGF0aCwgU2VydmljZU9iamVjdCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUge1xuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRGb3JBbm5vdGF0aW9uLFxuXHREYXRhRmllbGRUeXBlcyxcblx0RGF0YVBvaW50LFxuXHREYXRhUG9pbnRUeXBlVHlwZXNcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMsIFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHR5cGUge1xuXHRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sXG5cdENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLFxuXHRFeHByZXNzaW9uT3JQcmltaXRpdmUsXG5cdFBhdGhJbk1vZGVsRXhwcmVzc2lvblxufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdGFuZCxcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGNvbnN0YW50LFxuXHRlcXVhbCxcblx0Zm9ybWF0UmVzdWx0LFxuXHRmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uLFxuXHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sXG5cdGlmRWxzZSxcblx0bm90LFxuXHRwYXRoSW5Nb2RlbCxcblx0dHJhbnNmb3JtUmVjdXJzaXZlbHlcbn0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnRpZXNPZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvdGVtcGxhdGluZy9CdWlsZGluZ0Jsb2NrVGVtcGxhdGVQcm9jZXNzb3JcIjtcbmltcG9ydCB7IENvbGxhYm9yYXRpb25GaWVsZEdyb3VwUHJlZml4IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NvbGxhYm9yYXRpb24vQ29sbGFib3JhdGlvbkNvbW1vblwiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgaXNEYXRhRmllbGQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9hbm5vdGF0aW9ucy9EYXRhRmllbGRcIjtcbmltcG9ydCAqIGFzIENvbGxhYm9yYXRpb25Gb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL0NvbGxhYm9yYXRpb25Gb3JtYXR0ZXJcIjtcbmltcG9ydCB2YWx1ZUZvcm1hdHRlcnMgZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvVmFsdWVGb3JtYXR0ZXJcIjtcbmltcG9ydCB7IFVJIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuaW1wb3J0IHtcblx0Z2V0UmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucyxcblx0Z2V0UmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9uc1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXRhTW9kZWxGdW5jdGlvblwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRUaXRsZUJpbmRpbmdFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVGl0bGVIZWxwZXJcIjtcbmltcG9ydCB7IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uLCBpc1Byb3BlcnR5LCBpc1Byb3BlcnR5UGF0aEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQge1xuXHRlbmhhbmNlRGF0YU1vZGVsUGF0aCxcblx0Z2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCxcblx0Z2V0UmVsYXRpdmVQYXRocyxcblx0Z2V0VGFyZ2V0T2JqZWN0UGF0aFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRBc3NvY2lhdGVkRXh0ZXJuYWxJZFByb3BlcnR5LCBnZXRBc3NvY2lhdGVkRXh0ZXJuYWxJZFByb3BlcnR5UGF0aCwgaXNTZW1hbnRpY0tleSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgeyBnZXRQcm9wZXJ0eVdpdGhTZW1hbnRpY09iamVjdCwgbWFuYWdlU2VtYW50aWNPYmplY3RzRm9yQ3VycmVudFVzZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9TZW1hbnRpY09iamVjdEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBEaXNwbGF5TW9kZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0ICogYXMgVUlGb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IHR5cGUgeyBJbnB1dE1hc2tGb3JtYXRPcHRpb25zIH0gZnJvbSBcInNhcC9mZS9jb3JlL3R5cGUvSW5wdXRNYXNrXCI7XG5pbXBvcnQgKiBhcyBGaWVsZFRlbXBsYXRpbmcgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRUZW1wbGF0aW5nXCI7XG5pbXBvcnQge1xuXHRnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yVmFsdWUsXG5cdGdldERyYWZ0SW5kaWNhdG9yVmlzaWJsZUJpbmRpbmcsXG5cdGdldFRleHRCaW5kaW5nRXhwcmVzc2lvbixcblx0Z2V0VmFsdWVCaW5kaW5nLFxuXHRnZXRWaXNpYmxlRXhwcmVzc2lvbixcblx0aGFzUHJvcGVydHlJbnNlcnRSZXN0cmljdGlvbnMsXG5cdGlzUmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdEVuYWJsZWQsXG5cdGlzVXNlZEluTmF2aWdhdGlvbldpdGhRdWlja1ZpZXdGYWNldHMsXG5cdHNldEVkaXRTdHlsZVByb3BlcnRpZXNcbn0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRUZW1wbGF0aW5nXCI7XG5pbXBvcnQgYWRkaXRpb25hbFZhbHVlRm9ybWF0dGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL3ZhbHVlaGVscC9BZGRpdGlvbmFsVmFsdWVGb3JtYXR0ZXJcIjtcbmltcG9ydCBTaXR1YXRpb25zSW5kaWNhdG9yIGZyb20gXCJzYXAvZmUvbWFjcm9zL3NpdHVhdGlvbnMvU2l0dWF0aW9uc0luZGljYXRvclwiO1xuaW1wb3J0IEZpZWxkRWRpdE1vZGUgZnJvbSBcInNhcC91aS9tZGMvZW51bXMvRmllbGRFZGl0TW9kZVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IEV2ZW50SGFuZGxlciB9IGZyb20gXCJ0eXBlcy9leHRlbnNpb25fdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgTWV0YU1vZGVsVHlwZSB9IGZyb20gXCJ0eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcbmltcG9ydCB0eXBlIEZpZWxkIGZyb20gXCIuLi8uLi9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgRmllbGRGb3JtYXRPcHRpb25zIGZyb20gXCIuLi8uLi9maWVsZC9GaWVsZEZvcm1hdE9wdGlvbnNcIjtcbmltcG9ydCBGaWVsZEhlbHBlciBmcm9tIFwiLi4vLi4vZmllbGQvRmllbGRIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgRGlzcGxheVN0eWxlIGFzIERpc3BsYXlTdHlsZVR5cGUsIEVkaXRTdHlsZSBhcyBFZGl0U3R5bGVUeXBlLCBGaWVsZFByb3BlcnRpZXMgfSBmcm9tIFwiLi9GaWVsZFN0eWxlc1wiO1xuXG5leHBvcnQgdHlwZSBJbnB1dEZpZWxkQmxvY2tQcm9wZXJ0aWVzID0gT21pdDxQcm9wZXJ0aWVzT2Y8RmllbGQ+LCBcInJlYWRPbmx5XCIgfCBcInNlbWFudGljT2JqZWN0XCI+ICYge1xuXHRpc1B1YmxpY0ZpZWxkPzogYm9vbGVhbjsgLy9cblx0Ly9hZGQgZXZlbnRzIGZyb20gRmllbGQgLSAnUHJvcGVydGllc09mJyBkb2VzIG5vdCBpbmNsdWRlIHRoZW1cblx0Y2hhbmdlPzogRXZlbnRIYW5kbGVyO1xuXHRsaXZlQ2hhbmdlPzogRXZlbnRIYW5kbGVyO1xuXHRvbkxpdmVDaGFuZ2U/OiBzdHJpbmc7XG5cdHJlYWRPbmx5PzogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRzZW1hbnRpY09iamVjdD86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xufTtcbmV4cG9ydCB0eXBlIEZpZWxkQmxvY2tQcm9wZXJ0aWVzID0ge1xuXHRfY29udHJvbENvbmZpZ3VyYXRpb246IFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3M7XG5cdF9zZXR0aW5nczogVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncztcblx0aXNEeW5hbWljSW5zdGFudGlhdGlvbj86IGJvb2xlYW47XG5cdGNoYW5nZTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgRXZlbnRIYW5kbGVyO1xuXHRtZXRhUGF0aDogQ29udGV4dDtcblx0Y29udGV4dFBhdGg6IENvbnRleHQ7XG5cdGlzUHVibGljRmllbGQ6IGJvb2xlYW47XG5cdHZpc2libGU/OiBib29sZWFuIHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGxpdmVDaGFuZ2U6IEV2ZW50SGFuZGxlcjtcblx0b25MaXZlQ2hhbmdlPzogc3RyaW5nIHwgRXZlbnRIYW5kbGVyO1xuXHQvLy0tLS0tXG5cdGZvcm1hdE9wdGlvbnM6IEZpZWxkRm9ybWF0T3B0aW9ucztcblx0cHJvcGVydHk6IFByb3BlcnR5O1xuXHRkYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pjtcblx0dmFsdWVBc1N0cmluZ0JpbmRpbmdFeHByZXNzaW9uPzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHVuaXRCaW5kaW5nRXhwcmVzc2lvbj86IHN0cmluZztcblx0ZGlzcGxheVZpc2libGU/OiBzdHJpbmcgfCBib29sZWFuO1xuXHRoYXNWYWxpZEFuYWx5dGljYWxDdXJyZW5jeU9yVW5pdD86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRjb252ZXJ0ZWRNZXRhUGF0aDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcztcblx0Y2xhc3M/OiBzdHJpbmc7XG5cdGFyaWFMYWJlbGxlZEJ5Pzogc3RyaW5nW107XG5cdGhhc1VuaXRPckN1cnJlbmN5PzogYm9vbGVhbjtcblx0dGV4dD86IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGxhYmVsPzogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0ZW1wdHlJbmRpY2F0b3JNb2RlPzogc3RyaW5nO1xuXHRlZGl0YWJsZUV4cHJlc3Npb246IHN0cmluZyB8IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRmaWVsZEdyb3VwSWRzPzogc3RyaW5nW107XG5cdGRpc3BsYXlTdHlsZUlkPzogc3RyaW5nO1xuXHR0ZXh0RnJvbVZhbHVlTGlzdD86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRoYXNRdWlja1ZpZXc6IGJvb2xlYW47XG5cdGlkZW50aWZpZXJUaXRsZT86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRpZGVudGlmaWVyVGV4dD86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRoYXNTaXR1YXRpb25zSW5kaWNhdG9yPzogYm9vbGVhbjtcblx0c2l0dWF0aW9uc0luZGljYXRvclByb3BlcnR5UGF0aDogc3RyaW5nO1xuXHRzaG93RXJyb3JJbmRpY2F0b3I6IGJvb2xlYW47XG5cdGR5bmFtaWNTZW1hbnRpY09iamVjdHM/OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPltdO1xuXHRjb2xsYWJvcmF0aW9uRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRkYXRhU291cmNlUGF0aD86IHN0cmluZztcblx0ZWRpdFN0eWxlSWQ/OiBzdHJpbmc7XG5cdGVuYWJsZWRFeHByZXNzaW9uOiBzdHJpbmcgfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0cmVxdWlyZWRFeHByZXNzaW9uPzogc3RyaW5nO1xuXHRlZGl0TW9kZUFzT2JqZWN0OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+O1xuXHRjb21wdXRlZEVkaXRNb2RlOiBGaWVsZEVkaXRNb2RlIHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHZhbHVlQmluZGluZ0V4cHJlc3Npb24/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0c2hvd1RpbWV6b25lPzogYm9vbGVhbjtcblx0bWluRGF0ZUV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPiB8IHVuZGVmaW5lZCB8IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRtYXhEYXRlRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+IHwgdW5kZWZpbmVkIHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGVkaXRTdHlsZVBsYWNlaG9sZGVyPzogc3RyaW5nO1xuXHRzdGF0aWNEZXNjcmlwdGlvbj86IHN0cmluZztcblx0dmFsdWVTdGF0ZT86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRmaWxlRmlsZW5hbWVFeHByZXNzaW9uOiBzdHJpbmc7XG5cdGZpbGVSZWxhdGl2ZVByb3BlcnR5UGF0aDogc3RyaW5nO1xuXHR0ZXh0QmluZGluZ0V4cHJlc3Npb24/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0cmF0aW5nSW5kaWNhdG9yVG9vbHRpcD86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRyYXRpbmdJbmRpY2F0b3JUYXJnZXRWYWx1ZT86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRtYXNrPzogSW5wdXRNYXNrRm9ybWF0T3B0aW9ucyB8IG51bGw7XG5cdGVkaXRTdHlsZT86IEVkaXRTdHlsZVR5cGUgfCBudWxsO1xuXHRfYXBpSWQ/OiBzdHJpbmc7XG5cdGVudGl0eVR5cGU/OiBDb250ZXh0O1xuXHRvZGF0YU1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWw7XG5cdHByb3BlcnR5Rm9yRmllbGRDb250cm9sOiBVSUZvcm1hdHRlcnMuUHJvcGVydHlPclBhdGg8UHJvcGVydHk+O1xuXHRkZXNjcmlwdGlvbkJpbmRpbmdFeHByZXNzaW9uPzogc3RyaW5nO1xuXHRxdWlja1ZpZXdUeXBlPzogXCJTZW1hbnRpY0xpbmtzXCIgfCBcIkZhY2V0c1wiIHwgXCJGYWNldHNBbmRTZW1hbnRpY0xpbmtzXCI7XG5cdGRpc3BsYXlTdHlsZT86IERpc3BsYXlTdHlsZVR5cGU7XG5cdHVuaXRFZGl0YWJsZT86IHN0cmluZztcblx0c3RhdGljVW5pdD86IHN0cmluZztcblx0dmFsdWVJbnB1dFdpZHRoPzogc3RyaW5nO1xuXHR2YWx1ZUlucHV0RmllbGRXaWR0aD86IHN0cmluZztcblx0dW5pdElucHV0VmlzaWJsZT86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRkcmFmdEluZGljYXRvclZpc2libGU/OiBzdHJpbmc7XG5cdGhhc1Byb3BlcnR5SW5zZXJ0UmVzdHJpY3Rpb25zPzogYm9vbGVhbiB8IEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPjtcblx0YWRkRHJhZnRJbmRpY2F0b3I6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cdGNvbnZlcnRlZE1ldGFQYXRoRXh0ZXJuYWxJRD86IFByb3BlcnR5O1xuXHRkYXRhTW9kZWxQYXRoRXh0ZXJuYWxJRD86IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHkgfCBQcm9wZXJ0eVBhdGg+O1xuXHR2YWx1ZUhlbHBNZXRhUGF0aD86IENvbnRleHQ7XG5cdGlkOiBzdHJpbmc7XG5cdHZhbHVlSGVscElkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdG1ldGFQYXRoQ29udGV4dDogQ29udGV4dCB8IHVuZGVmaW5lZDtcblx0Y29udGV4dFBhdGhDb250ZXh0OiBDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRldmVudEhhbmRsZXJzOiB7XG5cdFx0Y2hhbmdlOiBFdmVudEhhbmRsZXI7XG5cdFx0bGl2ZUNoYW5nZTogRXZlbnRIYW5kbGVyO1xuXHRcdHZhbGlkYXRlRmllbGRHcm91cDogRXZlbnRIYW5kbGVyO1xuXHRcdGhhbmRsZVR5cGVNaXNzbWF0Y2g6IEV2ZW50SGFuZGxlcjtcblx0XHRoYW5kbGVGaWxlU2l6ZUV4Y2VlZDogRXZlbnRIYW5kbGVyO1xuXHRcdGhhbmRsZVVwbG9hZENvbXBsZXRlOiBFdmVudEhhbmRsZXI7XG5cdFx0dXBsb2FkU3RyZWFtOiBFdmVudEhhbmRsZXI7XG5cdFx0cmVtb3ZlU3RyZWFtOiBFdmVudEhhbmRsZXI7XG5cdFx0aGFuZGxlT3BlblVwbG9hZGVyOiBFdmVudEhhbmRsZXI7XG5cdFx0aGFuZGxlQ2xvc2VVcGxvYWRlcjogRXZlbnRIYW5kbGVyO1xuXHRcdG9wZW5FeHRlcm5hbExpbms6IEV2ZW50SGFuZGxlcjtcblx0XHRvbkZvY3VzT3V0OiBFdmVudEhhbmRsZXI7XG5cdFx0bGlua1ByZXNzZWQ6IEV2ZW50SGFuZGxlcjtcblx0XHRkaXNwbGF5QWdncmVnYXRpb25EZXRhaWxzOiBFdmVudEhhbmRsZXI7XG5cdFx0b25EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6IEV2ZW50SGFuZGxlcjtcblx0XHRvbkRhdGFGaWVsZEFjdGlvbkJ1dHRvbjogRXZlbnRIYW5kbGVyO1xuXHRcdG9uRGF0YUZpZWxkV2l0aElCTjogRXZlbnRIYW5kbGVyO1xuXHRcdHNob3dDb2xsYWJvcmF0aW9uRWRpdFVzZXI6IEV2ZW50SGFuZGxlcjtcblx0fTtcbn0gJiBPbWl0PEZpZWxkLCBcIm1ldGFQYXRoXCIgfCBcImNvbnRleHRQYXRoXCIgfCBcImNoYW5nZVwiIHwgXCJ2aXNpYmxlXCI+O1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0VXBGaWVsZChcblx0ZmllbGQ6IElucHV0RmllbGRCbG9ja1Byb3BlcnRpZXMsXG5cdGNvbnRyb2xDb25maWd1cmF0aW9uOiBUZW1wbGF0ZVByb2Nlc3NvclNldHRpbmdzLFxuXHR2aWV3RGF0YU1vZGVsOiBKU09OTW9kZWwsXG5cdGludGVybmFsTW9kZWw6IEpTT05Nb2RlbCxcblx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdGlzUmVhZE9ubHlJbml0aWFsPzogYm9vbGVhbixcblx0bWV0YVBhdGg/OiBDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHRjb250ZXh0UGF0aD86IENvbnRleHQgfCB1bmRlZmluZWRcbik6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzIHtcblx0Y29uc3QgcmVzdWx0RmllbGQgPSB7IC4uLmZpZWxkIH0gYXMgdW5rbm93biBhcyBGaWVsZEJsb2NrUHJvcGVydGllcztcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHJlc3VsdEZpZWxkLCBcInZhbHVlXCIsIHtcblx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdHJldHVybiBmaWVsZC52YWx1ZTtcblx0XHR9XG5cdH0pO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkocmVzdWx0RmllbGQsIFwiZGVzY3JpcHRpb25cIiwge1xuXHRcdGdldDogKCkgPT4ge1xuXHRcdFx0cmV0dXJuIGZpZWxkLmRlc2NyaXB0aW9uO1xuXHRcdH1cblx0fSk7XG5cblx0cmVzdWx0RmllbGQuY2hhbmdlID0gZmllbGQuY2hhbmdlO1xuXHRyZXN1bHRGaWVsZC5tZXRhUGF0aCA9IChtZXRhUGF0aCA/IG1ldGFQYXRoIDogZmllbGQubWV0YVBhdGgpIGFzIENvbnRleHQ7XG5cdHJlc3VsdEZpZWxkLmNvbnRleHRQYXRoID0gKGNvbnRleHRQYXRoID8gY29udGV4dFBhdGggOiBmaWVsZC5jb250ZXh0UGF0aCkgYXMgQ29udGV4dDtcblx0cmVzdWx0RmllbGQudmlzaWJsZSA9IGZpZWxkLnZpc2libGU7XG5cblx0Ly90aGlzIGN1cnJlbnRseSB3b3JrcyBvbmx5IGZvciB0aGUgZmllbGRcblx0aWYgKCFyZXN1bHRGaWVsZC52aElkUHJlZml4KSB7XG5cdFx0cmVzdWx0RmllbGQudmhJZFByZWZpeCA9IFwiRmllbGRWYWx1ZUhlbHBcIjtcblx0XHRyZXN1bHRGaWVsZC5fZmxleElkID0gZmllbGQuaWQ7XG5cdFx0aWYgKCFyZXN1bHRGaWVsZC5pZFByZWZpeCkge1xuXHRcdFx0cmVzdWx0RmllbGQuaWRQcmVmaXggPSBmaWVsZC5pZDtcblx0XHR9XG5cdH1cblxuXHRyZXN1bHRGaWVsZC5mb3JtYXRPcHRpb25zID8/PSB7fSBhcyBGaWVsZEZvcm1hdE9wdGlvbnM7XG5cdHJlc3VsdEZpZWxkLmZvcm1hdE9wdGlvbnMgPSBnZXRGb3JtYXRPcHRpb25zKHJlc3VsdEZpZWxkKTtcblx0cmVzdWx0RmllbGQuZm9ybWF0T3B0aW9ucy5zaG93T25seVVuaXREZWNpbWFscyA9XG5cdFx0dmlld0RhdGFNb2RlbD8uZ2V0UHJvcGVydHkoXCIvc2FwRmVNYW5pZmVzdENvbmZpZ3VyYXRpb24vYXBwL3Nob3dPbmx5VW5pdERlY2ltYWxzXCIpID09PSB0cnVlO1xuXG5cdHJlc3VsdEZpZWxkLnZhbHVlSGVscE1ldGFQYXRoID0gbWV0YVBhdGggPyBtZXRhUGF0aCA6IHJlc3VsdEZpZWxkLm1ldGFQYXRoO1xuXHRjb21wdXRlQ29tbW9uUHJvcGVydGllcyhyZXN1bHRGaWVsZCwgcmVzdWx0RmllbGQudmFsdWVIZWxwTWV0YVBhdGg/LmdldE1vZGVsKCkpO1xuXHRyZXN1bHRGaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aCA9IHNldFVwRGF0YVBvaW50VHlwZShyZXN1bHRGaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aCk7XG5cdHNldFVwVmlzaWJsZVByb3BlcnRpZXMocmVzdWx0RmllbGQpO1xuXHRjb21wdXRlSURzKHJlc3VsdEZpZWxkKTtcblx0cmVzdWx0RmllbGQuZGF0YVNvdXJjZVBhdGggPSBnZXRUYXJnZXRPYmplY3RQYXRoKHJlc3VsdEZpZWxkLmRhdGFNb2RlbFBhdGgpO1xuXHRyZXN1bHRGaWVsZC5sYWJlbCA9IEZpZWxkSGVscGVyLmNvbXB1dGVMYWJlbFRleHQoZmllbGQgYXMgdW5rbm93biBhcyBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZFR5cGVzPiwge1xuXHRcdGNvbnRleHQ6IHJlc3VsdEZpZWxkLm1ldGFQYXRoXG5cdH0pO1xuXG5cdC8qIEVYVEVSTkFMSUQgKi9cblx0Y29tcHV0ZUV4dGVybmFsSUQocmVzdWx0RmllbGQpO1xuXHRyZXN1bHRGaWVsZC5lbnRpdHlUeXBlID0gcmVzdWx0RmllbGQub2RhdGFNZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXG5cdFx0YC8ke3Jlc3VsdEZpZWxkLmRhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWV9YFxuXHQpO1xuXHRpZiAocmVzdWx0RmllbGQuZm9ybWF0T3B0aW9ucz8uZm9ySW5saW5lQ3JlYXRpb25Sb3dzID09PSB0cnVlKSB7XG5cdFx0cmVzdWx0RmllbGQuaGFzUHJvcGVydHlJbnNlcnRSZXN0cmljdGlvbnMgPSBoYXNQcm9wZXJ0eUluc2VydFJlc3RyaWN0aW9ucyhyZXN1bHRGaWVsZC5kYXRhTW9kZWxQYXRoKTtcblx0fVxuXHRjb21wdXRlRWRpdE1vZGUocmVzdWx0RmllbGQpO1xuXHRjb21wdXRlQ29sbGFib3JhdGlvblByb3BlcnRpZXMocmVzdWx0RmllbGQpO1xuXHRjb21wdXRlRWRpdGFibGVFeHByZXNzaW9ucyhyZXN1bHRGaWVsZCk7XG5cdHJlc3VsdEZpZWxkLmZvcm1hdE9wdGlvbnMgPSByZXN1bHRGaWVsZC5mb3JtYXRPcHRpb25zID8gcmVzdWx0RmllbGQuZm9ybWF0T3B0aW9ucyA6ICh7fSBhcyBGaWVsZEZvcm1hdE9wdGlvbnMpO1xuXHRzZXRVcEZvcm1hdE9wdGlvbnMoXG5cdFx0cmVzdWx0RmllbGQsXG5cdFx0KHJlc3VsdEZpZWxkLmRhdGFNb2RlbFBhdGhFeHRlcm5hbElEIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+KSB8fCByZXN1bHRGaWVsZC5kYXRhTW9kZWxQYXRoLFxuXHRcdGNvbnRyb2xDb25maWd1cmF0aW9uLFxuXHRcdHZpZXdEYXRhTW9kZWxcblx0KTtcblx0c2V0VXBEaXNwbGF5U3R5bGUocmVzdWx0RmllbGQsIHJlc3VsdEZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoLCByZXN1bHRGaWVsZC5kYXRhTW9kZWxQYXRoLCBpbnRlcm5hbE1vZGVsLCBhcHBDb21wb25lbnQpO1xuXHRzZXRVcEVkaXRTdHlsZShyZXN1bHRGaWVsZCwgYXBwQ29tcG9uZW50KTtcblxuXHRyZXN1bHRGaWVsZC52YWx1ZVN0YXRlID0gc2V0VXBWYWx1ZVN0YXRlKHJlc3VsdEZpZWxkKTtcblx0aWYgKHJlc3VsdEZpZWxkLmVkaXRTdHlsZSA9PT0gXCJJbnB1dFdpdGhWYWx1ZUhlbHBcIikge1xuXHRcdHJlc3VsdEZpZWxkLmVkaXRTdHlsZVBsYWNlaG9sZGVyID0gc2V0SW5wdXRXaXRoVmFsdWVoZWxwUGxhY2Vob2xkZXIocmVzdWx0RmllbGQpO1xuXHR9XG5cblx0Y29tcHV0ZUZpbGVVcGxvYWRlclByb3BlcnRpZXMocmVzdWx0RmllbGQpO1xuXG5cdGNvbXB1dGVJbmxpbmVFZGl0UHJvcGVydGllcyhyZXN1bHRGaWVsZCwgdmlld0RhdGFNb2RlbCk7XG5cblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBjb21wdXRlIGJpbmRpbmdzLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHRjb25zdCBhRGlzcGxheVN0eWxlc1dpdGhvdXRQcm9wVGV4dCA9IFtcIkF2YXRhclwiLCBcIkFtb3VudFdpdGhDdXJyZW5jeVwiXTtcblx0aWYgKFxuXHRcdHJlc3VsdEZpZWxkLmRpc3BsYXlTdHlsZSAmJlxuXHRcdCFhRGlzcGxheVN0eWxlc1dpdGhvdXRQcm9wVGV4dC5pbmNsdWRlcyhyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUpICYmXG5cdFx0cmVzdWx0RmllbGQuZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3Rcblx0KSB7XG5cdFx0cmVzdWx0RmllbGQudGV4dCA9XG5cdFx0XHRyZXN1bHRGaWVsZC50ZXh0ID8/XG5cdFx0XHRyZXN1bHRGaWVsZC52YWx1ZSA/P1xuXHRcdFx0RmllbGRUZW1wbGF0aW5nLmdldFRleHRCaW5kaW5nKFxuXHRcdFx0XHQocmVzdWx0RmllbGQuZGF0YU1vZGVsUGF0aEV4dGVybmFsSUQgYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4pIHx8IHJlc3VsdEZpZWxkLmRhdGFNb2RlbFBhdGgsXG5cdFx0XHRcdHJlc3VsdEZpZWxkLmZvcm1hdE9wdGlvbnNcblx0XHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0cmVzdWx0RmllbGQudGV4dCA9IFwiXCI7XG5cdH1cblxuXHRpZiAocmVzdWx0RmllbGQuZm9ybWF0T3B0aW9ucy5zaG93RW1wdHlJbmRpY2F0b3IpIHtcblx0XHRyZXN1bHRGaWVsZC5lbXB0eUluZGljYXRvck1vZGUgPSBTdHJpbmcocmVzdWx0RmllbGQuZm9ybWF0T3B0aW9ucy5zaG93RW1wdHlJbmRpY2F0b3IpID09PSBcInRydWVcIiA/IFwiT25cIiA6IHVuZGVmaW5lZDtcblx0fSBlbHNlIHtcblx0XHRyZXN1bHRGaWVsZC5lbXB0eUluZGljYXRvck1vZGUgPSB1bmRlZmluZWQ7XG5cdH1cblxuXHQvLyBJZiB0aGUgdGFyZ2V0IGlzIGEgcHJvcGVydHkgd2l0aCBhIERhdGFGaWVsZERlZmF1bHQsIHVzZSB0aGlzIGFzIGRhdGEgZmllbGRcblx0aWYgKGlzUHJvcGVydHkocmVzdWx0RmllbGQuY29udmVydGVkTWV0YVBhdGgpICYmIHJlc3VsdEZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoLmFubm90YXRpb25zPy5VST8uRGF0YUZpZWxkRGVmYXVsdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmVzdWx0RmllbGQubWV0YVBhdGggPSByZXN1bHRGaWVsZC5vZGF0YU1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcblx0XHRcdGBAJHtVSUFubm90YXRpb25UZXJtcy5EYXRhRmllbGREZWZhdWx0fWAsXG5cdFx0XHRtZXRhUGF0aCA/IG1ldGFQYXRoIDogcmVzdWx0RmllbGQubWV0YVBhdGhcblx0XHQpO1xuXHR9XG5cblx0aWYgKCFpc1JlYWRPbmx5SW5pdGlhbCkge1xuXHRcdHJlc3VsdEZpZWxkLmNvbXB1dGVkRWRpdE1vZGUgPSBjb21waWxlRXhwcmVzc2lvbihpZkVsc2UoZXF1YWwocmVzdWx0RmllbGQucmVhZE9ubHksIHRydWUpLCBcIkRpc3BsYXlcIiwgXCJFZGl0YWJsZVwiKSk7XG5cdH1cblxuXHRyZXN1bHRGaWVsZC5ldmVudEhhbmRsZXJzID0ge1xuXHRcdGNoYW5nZTogKCk6IHZvaWQgPT4ge30sXG5cdFx0bGl2ZUNoYW5nZTogKCk6IHZvaWQgPT4ge30sXG5cdFx0dmFsaWRhdGVGaWVsZEdyb3VwOiAoKTogdm9pZCA9PiB7fSxcblx0XHRoYW5kbGVUeXBlTWlzc21hdGNoOiAoKTogdm9pZCA9PiB7fSxcblx0XHRoYW5kbGVGaWxlU2l6ZUV4Y2VlZDogKCk6IHZvaWQgPT4ge30sXG5cdFx0aGFuZGxlVXBsb2FkQ29tcGxldGU6ICgpOiB2b2lkID0+IHt9LFxuXHRcdHVwbG9hZFN0cmVhbTogKCk6IHZvaWQgPT4ge30sXG5cdFx0cmVtb3ZlU3RyZWFtOiAoKTogdm9pZCA9PiB7fSxcblx0XHRoYW5kbGVPcGVuVXBsb2FkZXI6ICgpOiB2b2lkID0+IHt9LFxuXHRcdGhhbmRsZUNsb3NlVXBsb2FkZXI6ICgpOiB2b2lkID0+IHt9LFxuXHRcdG9wZW5FeHRlcm5hbExpbms6ICgpOiB2b2lkID0+IHt9LFxuXHRcdG9uRm9jdXNPdXQ6ICgpOiB2b2lkID0+IHt9LFxuXHRcdGxpbmtQcmVzc2VkOiAoKTogdm9pZCA9PiB7fSxcblx0XHRkaXNwbGF5QWdncmVnYXRpb25EZXRhaWxzOiAoKTogdm9pZCA9PiB7fSxcblx0XHRvbkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aDogKCk6IHZvaWQgPT4ge30sXG5cdFx0c2hvd0NvbGxhYm9yYXRpb25FZGl0VXNlcjogKCk6IHZvaWQgPT4ge30sXG5cdFx0b25EYXRhRmllbGRBY3Rpb25CdXR0b246ICgpOiB2b2lkID0+IHt9LFxuXHRcdG9uRGF0YUZpZWxkV2l0aElCTjogKCk6IHZvaWQgPT4ge31cblx0fTtcblxuXHRyZXR1cm4gcmVzdWx0RmllbGQ7XG59XG5cbi8qKlxuICogVGhpcyBoZWxwZXIgY29tcHV0ZXMgdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgbmVlZGVkIGZvciB0aGUgY29sbGFib3JhdGlvbiBhdmF0YXIuXG4gKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlQ29sbGFib3JhdGlvblByb3BlcnRpZXMoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogdm9pZCB7XG5cdGNvbnN0IGNvbXB1dGVkRWRpdGFibGVFeHByZXNzaW9uID0gVUlGb3JtYXR0ZXJzLmdldEVkaXRhYmxlRXhwcmVzc2lvbkFzT2JqZWN0KFxuXHRcdGZpZWxkLnByb3BlcnR5Rm9yRmllbGRDb250cm9sLFxuXHRcdGZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoLFxuXHRcdGZpZWxkLmRhdGFNb2RlbFBhdGhcblx0KTtcblx0aWYgKE1vZGVsSGVscGVyLmlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkKGZpZWxkLm9kYXRhTWV0YU1vZGVsKSAmJiBmaWVsZC5lZGl0TW9kZSAhPT0gRmllbGRFZGl0TW9kZS5EaXNwbGF5KSB7XG5cdFx0Y29uc3QgY29sbGFib3JhdGlvbkVuYWJsZWQgPSB0cnVlO1xuXHRcdC8vIEV4cHJlc3Npb25zIG5lZWRlZCBmb3IgQ29sbGFib3JhdGlvbiBWaXN1YWxpemF0aW9uXG5cdFx0Y29uc3QgY29sbGFib3JhdGlvbkV4cHJlc3Npb24gPSBVSUZvcm1hdHRlcnMuZ2V0Q29sbGFib3JhdGlvbkV4cHJlc3Npb24oXG5cdFx0XHRmaWVsZC5kYXRhTW9kZWxQYXRoLFxuXHRcdFx0Q29sbGFib3JhdGlvbkZvcm1hdHRlcnMuaGFzQ29sbGFib3JhdGlvbkFjdGl2aXR5XG5cdFx0KTtcblx0XHRjb25zdCBlZGl0YWJsZUV4cHJlc3Npb24gPSBjb21waWxlRXhwcmVzc2lvbihhbmQoY29tcHV0ZWRFZGl0YWJsZUV4cHJlc3Npb24sIG5vdChjb2xsYWJvcmF0aW9uRXhwcmVzc2lvbikpKTtcblxuXHRcdGNvbnN0IGVkaXRNb2RlID0gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdGNvbGxhYm9yYXRpb25FeHByZXNzaW9uLFxuXHRcdFx0XHRjb25zdGFudChcIlJlYWRPbmx5XCIpLFxuXHRcdFx0XHRpZkVsc2UoYW5kKFVJLklzSW5hY3RpdmUsICEhZmllbGQuaGFzUHJvcGVydHlJbnNlcnRSZXN0cmljdGlvbnMpLCBcIkRpc3BsYXlcIiwgZmllbGQuZWRpdE1vZGVBc09iamVjdClcblx0XHRcdClcblx0XHQpO1xuXHRcdGZpZWxkLmNvbGxhYm9yYXRpb25FbmFibGVkID0gY29sbGFib3JhdGlvbkVuYWJsZWQ7XG5cdFx0ZmllbGQuY29sbGFib3JhdGlvbkV4cHJlc3Npb24gPSBjb2xsYWJvcmF0aW9uRXhwcmVzc2lvbjtcblx0XHRmaWVsZC5lZGl0YWJsZUV4cHJlc3Npb24gPSBlZGl0YWJsZUV4cHJlc3Npb247XG5cdFx0ZmllbGQuY29tcHV0ZWRFZGl0TW9kZSA9IGVkaXRNb2RlO1xuXHR9IGVsc2Uge1xuXHRcdGZpZWxkLmVkaXRhYmxlRXhwcmVzc2lvbiA9IGNvbXBpbGVFeHByZXNzaW9uKGNvbXB1dGVkRWRpdGFibGVFeHByZXNzaW9uKTtcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgaGVscGVyIHNldHMgdGhlIGNvbW1vbiBwcm9wZXJ0aWVzIGNvbnZlcnRlZE1ldGFQYXRoLCBkYXRhTW9kZWxQYXRoXG4gKiBhbmQgcHJvcGVydHkgdGhhdCBjYW4gYmUgcmV1c2VkIGluIHRoZSBpbmRpdmlkdWFsIHRlbXBsYXRlcyBpZiByZXF1aXJlZC5cbiAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2VcbiAqIEBwYXJhbSBtZXRhTW9kZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVDb21tb25Qcm9wZXJ0aWVzKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcywgbWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCk6IHZvaWQge1xuXHRmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aCA9IE1ldGFNb2RlbENvbnZlcnRlci5jb252ZXJ0TWV0YU1vZGVsQ29udGV4dChmaWVsZC5tZXRhUGF0aENvbnRleHQgPyBmaWVsZC5tZXRhUGF0aENvbnRleHQgOiBmaWVsZC5tZXRhUGF0aCkgYXNcblx0XHR8IERhdGFGaWVsZEFic3RyYWN0VHlwZXNcblx0XHR8IERhdGFQb2ludFR5cGVUeXBlcztcblxuXHRsZXQgZGF0YU1vZGVsUGF0aCA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcyB8IFByb3BlcnR5Pihcblx0XHRmaWVsZC5tZXRhUGF0aENvbnRleHQgPyBmaWVsZC5tZXRhUGF0aENvbnRleHQgOiBmaWVsZC5tZXRhUGF0aCxcblx0XHRmaWVsZC5jb250ZXh0UGF0aFxuXHQpO1xuXHRkYXRhTW9kZWxQYXRoID1cblx0XHRnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yVmFsdWUoZGF0YU1vZGVsUGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXM+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/LlVJPy5Jc0ltYWdlVVJMKSB7XG5cdFx0cmVzdWx0RmllbGQuZGlzcGxheVN0eWxlID0gXCJBdmF0YXJcIjtcblx0XHRyZXR1cm4gcmVzdWx0RmllbGQ7XG5cdH1cblx0aWYgKHByb3BlcnR5LmFubm90YXRpb25zPy5VST8uSW5wdXRNYXNrKSB7XG5cdFx0cmVzdWx0RmllbGQuZGlzcGxheVN0eWxlID0gXCJUZXh0XCI7XG5cdFx0cmV0dXJuIHJlc3VsdEZpZWxkO1xuXHR9XG5cdGlmIChwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5NYXNrZWQpIHtcblx0XHRyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUgPSBcIk1hc2tlZFwiO1xuXHRcdHJldHVybiByZXN1bHRGaWVsZDtcblx0fVxuXHQvLyBGb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLCBTdHJlYW0gd2lsbCBiZSBzaG93biB3aXRoaW4gYW4gZW50aXR5IGluc3RhbmNlIGFzIGNpcmNsZSBpZiB0aGUgZW50aXR5IGlzIGFubm90YXRlZCBhcyBJc05hdHVyYWxQZXJzb25cblx0Ly8gYW5kIG5laXRoZXIgSXNJbWFnZSBub3IgSXNJbWFnZVVSTCBhbm5vdGF0aW9uIGhhcyBiZWVuIHVzZWQuXG5cdGlmIChwcm9wZXJ0eS50eXBlID09PSBcIkVkbS5TdHJlYW1cIikge1xuXHRcdHJlc3VsdEZpZWxkLmRpc3BsYXlTdHlsZSA9IFwiRmlsZVwiO1xuXHRcdHJldHVybiByZXN1bHRGaWVsZDtcblx0fVxuXHRpZiAocmVzdWx0RmllbGQuZm9ybWF0T3B0aW9ucy5pc0ZpZWxkR3JvdXBJdGVtICYmIHByb3BlcnR5LnR5cGUgPT09IFwiRWRtLkJvb2xlYW5cIikge1xuXHRcdHJlc3VsdEZpZWxkLmRpc3BsYXlTdHlsZSA9IFwiQ2hlY2tCb3hHcm91cEl0ZW1cIjtcblx0XHRyZXR1cm4gcmVzdWx0RmllbGQ7XG5cdH1cblx0c2V0VXBEcmFmdEluZGljYXRvcihkYXRhTW9kZWxQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LCByZXN1bHRGaWVsZCk7XG5cdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlIGFzIHN0cmluZykge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZTpcblx0XHRcdHJlc3VsdEZpZWxkLmRpc3BsYXlTdHlsZSA9IFwiRGF0YVBvaW50XCI7XG5cdFx0XHRyZXR1cm4gcmVzdWx0RmllbGQ7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uOlxuXHRcdFx0aWYgKChkYXRhRmllbGQgYXMgdW5rbm93biBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKS5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhUG9pbnRUeXBlKSB7XG5cdFx0XHRcdHJlc3VsdEZpZWxkLmRpc3BsYXlTdHlsZSA9IFwiRGF0YVBvaW50XCI7XG5cdFx0XHRcdHJldHVybiByZXN1bHRGaWVsZDtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdChkYXRhRmllbGQgYXMgdW5rbm93biBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKS5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PVxuXHRcdFx0XHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuQ29udGFjdFR5cGVcIlxuXHRcdFx0KSB7XG5cdFx0XHRcdHJlc3VsdEZpZWxkLmRpc3BsYXlTdHlsZSA9IFwiQ29udGFjdFwiO1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0RmllbGQ7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbjpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdHJlc3VsdEZpZWxkLmRpc3BsYXlTdHlsZSA9IFwiQnV0dG9uXCI7XG5cdFx0XHRyZXR1cm4gcmVzdWx0RmllbGQ7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvbjpcblx0XHRcdHJlc3VsdEZpZWxkLmRpc3BsYXlTdHlsZSA9IFwiTGlua1wiO1xuXHRcdFx0cmV0dXJuIHJlc3VsdEZpZWxkO1xuXHR9XG5cdGNvbnN0IGhhc1F1aWNrVmlldyA9IGlzVXNlZEluTmF2aWdhdGlvbldpdGhRdWlja1ZpZXdGYWNldHMoZGF0YU1vZGVsUGF0aCwgcHJvcGVydHkpO1xuXHRjb25zdCBoYXNTZW1hbnRpY09iamVjdHMgPSBwcm9wZXJ0eU9yTmF2aWdhdGlvblByb3BlcnR5SGFzU2VtYW50aWNPYmplY3QocmVzdWx0RmllbGQsIGRhdGFNb2RlbFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4pO1xuXG5cdGlmIChpc1NlbWFudGljS2V5KHByb3BlcnR5LCBkYXRhTW9kZWxQYXRoKSAmJiByZXN1bHRGaWVsZC5mb3JtYXRPcHRpb25zLnNlbWFudGljS2V5U3R5bGUpIHtcblx0XHRtYW5hZ2VRdWlja1ZpZXdGb3JEaXNwbGF5U3R5bGUoXG5cdFx0XHRyZXN1bHRGaWVsZCxcblx0XHRcdGludGVybmFsTW9kZWwsXG5cdFx0XHRkYXRhTW9kZWxQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRcdFx0aGFzU2VtYW50aWNPYmplY3RzLFxuXHRcdFx0aGFzUXVpY2tWaWV3XG5cdFx0KTtcblx0XHRzZXRVcE9iamVjdElkZW50aWZpZXJUaXRsZUFuZFRleHQocmVzdWx0RmllbGQsIGRhdGFNb2RlbFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4pO1xuXHRcdHJlc3VsdEZpZWxkLnNob3dFcnJvckluZGljYXRvciA9XG5cdFx0XHQoZGF0YU1vZGVsUGF0aC5jb250ZXh0TG9jYXRpb24gYXMgdW5rbm93biBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFNlcnZpY2VPYmplY3Q+KT8udGFyZ2V0T2JqZWN0Py5fdHlwZSA9PT1cblx0XHRcdFx0XCJOYXZpZ2F0aW9uUHJvcGVydHlcIiAmJiAhcmVzdWx0RmllbGQuZm9ybWF0T3B0aW9ucy5maWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGg7XG5cdFx0cmVzdWx0RmllbGQuc2l0dWF0aW9uc0luZGljYXRvclByb3BlcnR5UGF0aCA9IChkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCBhcyBQcm9wZXJ0eSkubmFtZTtcblx0XHRyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUgPVxuXHRcdFx0cmVzdWx0RmllbGQuZm9ybWF0T3B0aW9ucy5zZW1hbnRpY0tleVN0eWxlID09PSBcIk9iamVjdElkZW50aWZpZXJcIiA/IFwiT2JqZWN0SWRlbnRpZmllclwiIDogXCJMYWJlbFNlbWFudGljS2V5XCI7XG5cdFx0cmV0dXJuIHJlc3VsdEZpZWxkO1xuXHR9XG5cdGlmIChkYXRhRmllbGQuQ3JpdGljYWxpdHkpIHtcblx0XHRtYW5hZ2VRdWlja1ZpZXdGb3JEaXNwbGF5U3R5bGUoXG5cdFx0XHRyZXN1bHRGaWVsZCxcblx0XHRcdGludGVybmFsTW9kZWwsXG5cdFx0XHRkYXRhTW9kZWxQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRcdFx0aGFzU2VtYW50aWNPYmplY3RzLFxuXHRcdFx0aGFzUXVpY2tWaWV3XG5cdFx0KTtcblx0XHRyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUgPSBcIk9iamVjdFN0YXR1c1wiO1xuXHRcdHJldHVybiByZXN1bHRGaWVsZDtcblx0fVxuXHRpZiAoXG5cdFx0KHByb3BlcnR5LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kgfHwgcHJvcGVydHkuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0KSAmJlxuXHRcdFN0cmluZyhyZXN1bHRGaWVsZC5mb3JtYXRPcHRpb25zLmlzQ3VycmVuY3lPclVuaXRBbGlnbmVkKSA9PT0gXCJ0cnVlXCIgJiZcblx0XHRyZXN1bHRGaWVsZC5mb3JtYXRPcHRpb25zLm1lYXN1cmVEaXNwbGF5TW9kZSAhPT0gXCJIaWRkZW5cIlxuXHQpIHtcblx0XHRjb25zdCBkZWNpbWFsUGFkZGluZyA9IEZpZWxkU3RydWN0dXJlSGVscGVyLmdldERlY2ltYWxQYWRkaW5nKGFwcENvbXBvbmVudCwgcHJvcGVydHkpO1xuXHRcdHJlc3VsdEZpZWxkLnZhbHVlQXNTdHJpbmdCaW5kaW5nRXhwcmVzc2lvbiA9IHJlc3VsdEZpZWxkLnZhbHVlXG5cdFx0XHQ/IHJlc3VsdEZpZWxkLnZhbHVlXG5cdFx0XHQ6IGdldFZhbHVlQmluZGluZyhcblx0XHRcdFx0XHRkYXRhTW9kZWxQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRcdFx0XHRcdHJlc3VsdEZpZWxkLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRkZWNpbWFsUGFkZGluZyxcblx0XHRcdFx0XHR0cnVlXG5cdFx0XHQgICk7XG5cblx0XHRyZXN1bHRGaWVsZC51bml0QmluZGluZ0V4cHJlc3Npb24gPSBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFVJRm9ybWF0dGVycy5nZXRCaW5kaW5nRm9yVW5pdE9yQ3VycmVuY3koXG5cdFx0XHRcdGRhdGFNb2RlbFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdCEhZmllbGQuZm9ybWF0T3B0aW9ucy5zaG93T25seVVuaXREZWNpbWFsc1xuXHRcdFx0KVxuXHRcdCk7XG5cdFx0cmVzdWx0RmllbGQuZGlzcGxheVN0eWxlID0gXCJOdW1iZXJXaXRoVW5pdE9yQ3VycmVuY3lBbGlnbmVkXCI7XG5cblx0XHRyZXR1cm4gcmVzdWx0RmllbGQ7XG5cdH1cblx0aWYgKHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tdW5pY2F0aW9uPy5Jc0VtYWlsQWRkcmVzcyB8fCBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbXVuaWNhdGlvbj8uSXNQaG9uZU51bWJlcikge1xuXHRcdHJlc3VsdEZpZWxkLmRpc3BsYXlTdHlsZSA9IFwiTGlua1wiO1xuXHRcdHJldHVybiByZXN1bHRGaWVsZDtcblx0fVxuXHRpZiAocHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5NdWx0aUxpbmVUZXh0KSB7XG5cdFx0cmVzdWx0RmllbGQuZGlzcGxheVN0eWxlID0gXCJFeHBhbmRhYmxlVGV4dFwiO1xuXHRcdHJldHVybiByZXN1bHRGaWVsZDtcblx0fVxuXG5cdGlmIChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmwpIHtcblx0XHRyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUgPSBcIkxpbmtcIjtcblx0XHRyZXR1cm4gcmVzdWx0RmllbGQ7XG5cdH1cblxuXHRyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUgPSBcIlRleHRcIjtcblx0bWFuYWdlUXVpY2tWaWV3Rm9yRGlzcGxheVN0eWxlKFxuXHRcdHJlc3VsdEZpZWxkLFxuXHRcdGludGVybmFsTW9kZWwsXG5cdFx0ZGF0YU1vZGVsUGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pixcblx0XHRoYXNTZW1hbnRpY09iamVjdHMsXG5cdFx0aGFzUXVpY2tWaWV3XG5cdCk7XG5cdGlmIChyZXN1bHRGaWVsZC5oYXNRdWlja1ZpZXcpIHtcblx0XHRyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUgPSBcIkxpbmtXaXRoUXVpY2tWaWV3XCI7XG5cdH1cblx0cmV0dXJuIHJlc3VsdEZpZWxkO1xufVxuXG4vKipcbiAqIFRoaXMgZGV0ZXJtaW5lcyB3aGV0aGVyIHdlIHNob3VsZCBhZGQgYSBkcmFmdCBpbmRpY2F0b3Igd2l0aGluIHRoZSBmaWVsZCB0ZW1wbGF0ZS5cbiAqIEBwYXJhbSBkYXRhTW9kZWxQYXRoIERhdGFNb2RlbE9iamVjdFBhdGggcG9pbnRpbmcgdG8gdGhlIG1haW4gcHJvcGVydHkgZm9yIHRoZSBmaWVsZFxuICogQHBhcmFtIGZpZWxkXG4gKi9cbmZ1bmN0aW9uIHNldFVwRHJhZnRJbmRpY2F0b3IoZGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sIGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IHZvaWQge1xuXHRpZiAoaXNTZW1hbnRpY0tleShkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCBhcyBQcm9wZXJ0eSwgZGF0YU1vZGVsUGF0aCkpIHtcblx0XHRmaWVsZC5oYXNTaXR1YXRpb25zSW5kaWNhdG9yID0gU2l0dWF0aW9uc0luZGljYXRvci5nZXRTaXR1YXRpb25zTmF2aWdhdGlvblByb3BlcnR5KGRhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5VHlwZSkgIT09IHVuZGVmaW5lZDtcblx0XHRpZiAoXG5cdFx0XHQoZGF0YU1vZGVsUGF0aC5jb250ZXh0TG9jYXRpb24/LnRhcmdldEVudGl0eVNldCBhcyBFbnRpdHlTZXQgfCB1bmRlZmluZWQpPy5hbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdFJvb3QgJiZcblx0XHRcdChkYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVNldCBhcyBFbnRpdHlTZXQgfCB1bmRlZmluZWQpPy5hbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdFJvb3QgJiZcblx0XHRcdGZpZWxkLmZvcm1hdE9wdGlvbnM/Lmhhc0RyYWZ0SW5kaWNhdG9yID09PSB0cnVlXG5cdFx0KSB7XG5cdFx0XHQvLyBJbiBjYXNlIG9mIGEgZ3JpZCB0YWJsZSBvciB0cmVlIHRhYmxlIGhhc0RyYWZ0SW5kaWNhdG9yIHdpbGwgYmUgZmFsc2Ugc2luY2UgdGhlIGRyYWZ0XG5cdFx0XHQvLyBpbmRpY2F0b3IgbmVlZHMgdG8gYmUgcmVuZGVyZWQgaW50byBhIHNlcGFyYXRlIGNvbHVtblxuXHRcdFx0Ly8gSGVuY2Ugd2UgdGhlbiBmYWxsIGJhY2sgdG8gZGlzcGxheSBzdHlsZXMgT2JqZWN0SWRlbnRpZmllciBvciBMYWJlbFNlbWFudGljS2V5IGluc3RlYWRcblx0XHRcdC8vIG9mIHRoZSBjb21iaW5lZCBJRCBhbmQgZHJhZnQgaW5kaWNhdG9yIHN0eWxlXG5cdFx0XHRmaWVsZC5kcmFmdEluZGljYXRvclZpc2libGUgPSBnZXREcmFmdEluZGljYXRvclZpc2libGVCaW5kaW5nKGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0Py5uYW1lKSBhcyBzdHJpbmc7XG5cdFx0XHRmaWVsZC5hZGREcmFmdEluZGljYXRvciA9IHRydWU7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRVcEVkaXRTdHlsZShmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMsIGFwcENvbXBvbmVudD86IEFwcENvbXBvbmVudCk6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzIHtcblx0Y29uc3QgcmVzdWx0RmllbGQgPSBmaWVsZDtcblx0c2V0RWRpdFN0eWxlUHJvcGVydGllcyhyZXN1bHRGaWVsZCwgcmVzdWx0RmllbGQuY29udmVydGVkTWV0YVBhdGgsIHJlc3VsdEZpZWxkLmRhdGFNb2RlbFBhdGgpO1xuXHRyZXN1bHRGaWVsZC5maWVsZEdyb3VwSWRzID0gY29tcHV0ZUZpZWxkR3JvdXBJZHMocmVzdWx0RmllbGQsIGFwcENvbXBvbmVudCk7XG5cdHJldHVybiByZXN1bHRGaWVsZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFVwT2JqZWN0SWRlbnRpZmllclRpdGxlQW5kVGV4dChcblx0ZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzLFxuXHRwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+XG4pOiB2b2lkIHtcblx0Y29uc3Qgc2VtYW50aWNTdHlsZSA9IGZpZWxkLmZvcm1hdE9wdGlvbnM/LnNlbWFudGljS2V5U3R5bGU7XG5cdGNvbnN0IGRpc3BsYXlNb2RlID0gZmllbGQuZm9ybWF0T3B0aW9ucy5kaXNwbGF5TW9kZTtcblx0ZmllbGQuaWRlbnRpZmllclRpdGxlID0gZ2V0VGl0bGVCaW5kaW5nRXhwcmVzc2lvbihcblx0XHRwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0Z2V0VGV4dEJpbmRpbmdFeHByZXNzaW9uLFxuXHRcdHsgZGlzcGxheU1vZGUsIHNwbGl0VGl0bGVPblR3b0xpbmVzOiBmaWVsZC5mb3JtYXRPcHRpb25zLnNlbWFudGljS2V5U3R5bGUgPT09IFwiT2JqZWN0SWRlbnRpZmllclwiIH0sXG5cdFx0dW5kZWZpbmVkLFxuXHRcdHVuZGVmaW5lZFxuXHQpO1xuXHRmaWVsZC5pZGVudGlmaWVyVGV4dCA9XG5cdFx0c2VtYW50aWNTdHlsZSA9PT0gXCJPYmplY3RJZGVudGlmaWVyXCIgPyBnZXRPYmplY3RJZGVudGlmaWVyVGV4dChmaWVsZC5mb3JtYXRPcHRpb25zLCBwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgpIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0VXBGb3JtYXRPcHRpb25zKFxuXHRmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMsXG5cdGRhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRjb250cm9sQ29uZmlndXJhdGlvbjogVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncyxcblx0dmlld0RhdGFNb2RlbDogSlNPTk1vZGVsXG4pOiB2b2lkIHtcblx0Y29uc3Qgb3ZlcnJpZGVQcm9wcyA9IGdldE92ZXJyaWRlcyhjb250cm9sQ29uZmlndXJhdGlvbiwgKGZpZWxkLm1ldGFQYXRoQ29udGV4dCA/IGZpZWxkLm1ldGFQYXRoQ29udGV4dCA6IGZpZWxkLm1ldGFQYXRoKS5nZXRQYXRoKCkpO1xuXG5cdGlmICghZmllbGQuZm9ybWF0T3B0aW9ucy5kaXNwbGF5TW9kZSkge1xuXHRcdGZpZWxkLmZvcm1hdE9wdGlvbnMuZGlzcGxheU1vZGUgPSBVSUZvcm1hdHRlcnMuZ2V0RGlzcGxheU1vZGUoZGF0YU1vZGVsUGF0aCk7XG5cdH1cblx0aWYgKGZpZWxkLmZvcm1hdE9wdGlvbnMuZGlzcGxheU1vZGUgPT09IFwiRGVzY3JpcHRpb25cIikge1xuXHRcdGZpZWxkLnZhbHVlQXNTdHJpbmdCaW5kaW5nRXhwcmVzc2lvbiA9IGZpZWxkLnZhbHVlXG5cdFx0XHQ/IGZpZWxkLnZhbHVlXG5cdFx0XHQ6IGdldFZhbHVlQmluZGluZyhkYXRhTW9kZWxQYXRoLCBmaWVsZC5mb3JtYXRPcHRpb25zLCB0cnVlLCB0cnVlLCB1bmRlZmluZWQsIHRydWUpO1xuXHR9XG5cdGZpZWxkLmZvcm1hdE9wdGlvbnMudGV4dExpbmVzRWRpdCA9XG5cdFx0KG92ZXJyaWRlUHJvcHMgYXMgdW5rbm93biBhcyBGaWVsZEZvcm1hdE9wdGlvbnMpLnRleHRMaW5lc0VkaXQgfHxcblx0XHQob3ZlcnJpZGVQcm9wcy5mb3JtYXRPcHRpb25zICYmIG92ZXJyaWRlUHJvcHMuZm9ybWF0T3B0aW9ucy50ZXh0TGluZXNFZGl0KSB8fFxuXHRcdGZpZWxkLmZvcm1hdE9wdGlvbnMudGV4dExpbmVzRWRpdCB8fFxuXHRcdDQ7XG5cdGZpZWxkLmZvcm1hdE9wdGlvbnMudGV4dE1heExpbmVzID1cblx0XHQob3ZlcnJpZGVQcm9wcyBhcyB1bmtub3duIGFzIEZpZWxkRm9ybWF0T3B0aW9ucykudGV4dE1heExpbmVzIHx8XG5cdFx0KG92ZXJyaWRlUHJvcHMuZm9ybWF0T3B0aW9ucyAmJiBvdmVycmlkZVByb3BzLmZvcm1hdE9wdGlvbnMudGV4dE1heExpbmVzKSB8fFxuXHRcdGZpZWxkLmZvcm1hdE9wdGlvbnMudGV4dE1heExpbmVzO1xuXG5cdC8vIFJldHJpZXZlIHRleHQgZnJvbSB2YWx1ZSBsaXN0IGFzIGZhbGxiYWNrIGZlYXR1cmUgZm9yIG1pc3NpbmcgdGV4dCBhbm5vdGF0aW9uIG9uIHRoZSBwcm9wZXJ0eVxuXHRpZiAodmlld0RhdGFNb2RlbD8uZ2V0UHJvcGVydHkoXCIvcmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdFwiKSkge1xuXHRcdGZpZWxkLmZvcm1hdE9wdGlvbnMucmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCA9IGlzUmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdEVuYWJsZWQoXG5cdFx0XHRkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCEsXG5cdFx0XHRmaWVsZC5mb3JtYXRPcHRpb25zXG5cdFx0KTtcblx0XHRpZiAoZmllbGQuZm9ybWF0T3B0aW9ucy5yZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0KSB7XG5cdFx0XHQvLyBDb25zaWRlciBUZXh0QXJyYW5nZW1lbnQgYXQgRW50aXR5VHlwZSBvdGhlcndpc2Ugc2V0IGRlZmF1bHQgZGlzcGxheSBmb3JtYXQgJ0Rlc2NyaXB0aW9uVmFsdWUnXG5cdFx0XHRjb25zdCBoYXNFbnRpdHlUZXh0QXJyYW5nZW1lbnQgPSAhIWRhdGFNb2RlbFBhdGg/LnRhcmdldEVudGl0eVR5cGU/LmFubm90YXRpb25zPy5VST8uVGV4dEFycmFuZ2VtZW50O1xuXHRcdFx0ZmllbGQuZm9ybWF0T3B0aW9ucy5kaXNwbGF5TW9kZSA9IGhhc0VudGl0eVRleHRBcnJhbmdlbWVudCA/IGZpZWxkLmZvcm1hdE9wdGlvbnMuZGlzcGxheU1vZGUgOiBcIkRlc2NyaXB0aW9uVmFsdWVcIjtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFVwVmFsdWVTdGF0ZShmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGxldCB2YWx1ZVN0YXRlRXhwO1xuXHRjb25zdCBmaWVsZENvbnRhaW5lclR5cGUgPSBmaWVsZC5mb3JtYXRPcHRpb25zPy50ZXh0QWxpZ25Nb2RlID8gZmllbGQuZm9ybWF0T3B0aW9ucz8udGV4dEFsaWduTW9kZSA6IFwiRm9ybVwiO1xuXHRjb25zdCBwcm9wZXJ0eVBhdGhJbk1vZGVsID0gcGF0aEluTW9kZWwoZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aChmaWVsZC5kYXRhTW9kZWxQYXRoKSkgYXMgUGF0aEluTW9kZWxFeHByZXNzaW9uPFByb3BlcnR5Pjtcblx0Y29uc3QgcmVsYXRpdmVMb2NhdGlvbiA9IGdldFJlbGF0aXZlUGF0aHMoZmllbGQuZGF0YU1vZGVsUGF0aCk7XG5cdGNvbnN0IHRleHRQYXRoID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGZpZWxkLmRhdGFNb2RlbFBhdGg/LnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dCwgcmVsYXRpdmVMb2NhdGlvbik7XG5cdGNvbnN0IHByb3BlcnR5UGF0aCA9IGZpZWxkLmRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0Py5uYW1lO1xuXHRjb25zdCByZWNvbW1lbmRhdGlvblZhbHVlID0gcGF0aEluTW9kZWwoYCR7cHJvcGVydHlQYXRofUAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy5wbGFjZWhvbGRlclZhbHVlYCk7XG5cdGNvbnN0IHJlY29tbWVuZGF0aW9uRGVzY3JpcHRpb24gPSBwYXRoSW5Nb2RlbChgJHtwcm9wZXJ0eVBhdGh9QCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnBsYWNlaG9sZGVyRGVzY3JpcHRpb25gKTtcblx0aWYgKGZpZWxkQ29udGFpbmVyVHlwZSA9PT0gXCJUYWJsZVwiKSB7XG5cdFx0dmFsdWVTdGF0ZUV4cCA9IGZvcm1hdFJlc3VsdChcblx0XHRcdFtcblx0XHRcdFx0cmVjb21tZW5kYXRpb25WYWx1ZSxcblx0XHRcdFx0cmVjb21tZW5kYXRpb25EZXNjcmlwdGlvbixcblx0XHRcdFx0cGF0aEluTW9kZWwoYC9yZWNvbW1lbmRhdGlvbnNEYXRhYCwgXCJpbnRlcm5hbFwiKSxcblx0XHRcdFx0cGF0aEluTW9kZWwoYC9pc0VkaXRhYmxlYCwgXCJ1aVwiKSxcblx0XHRcdFx0ZmllbGQuZGF0YVNvdXJjZVBhdGgsXG5cdFx0XHRcdHByb3BlcnR5UGF0aEluTW9kZWwsXG5cdFx0XHRcdHRleHRQYXRoXG5cdFx0XHRdLFxuXHRcdFx0YWRkaXRpb25hbFZhbHVlRm9ybWF0dGVyLmZvcm1hdFZhbHVlU3RhdGUsXG5cdFx0XHRmaWVsZC5kYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVR5cGVcblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdHZhbHVlU3RhdGVFeHAgPSBmb3JtYXRSZXN1bHQoXG5cdFx0XHRbXG5cdFx0XHRcdHJlY29tbWVuZGF0aW9uVmFsdWUsXG5cdFx0XHRcdHJlY29tbWVuZGF0aW9uRGVzY3JpcHRpb24sXG5cdFx0XHRcdHBhdGhJbk1vZGVsKGAvcmVjb21tZW5kYXRpb25zRGF0YWAsIFwiaW50ZXJuYWxcIiksXG5cdFx0XHRcdHBhdGhJbk1vZGVsKGAvaXNFZGl0YWJsZWAsIFwidWlcIiksXG5cdFx0XHRcdGZpZWxkLmRhdGFTb3VyY2VQYXRoLFxuXHRcdFx0XHRwcm9wZXJ0eVBhdGhJbk1vZGVsLFxuXHRcdFx0XHR0ZXh0UGF0aFxuXHRcdFx0XSxcblx0XHRcdGFkZGl0aW9uYWxWYWx1ZUZvcm1hdHRlci5mb3JtYXRWYWx1ZVN0YXRlXG5cdFx0KTtcblx0fVxuXG5cdGZpZWxkLnZhbHVlU3RhdGUgPSBjb21waWxlRXhwcmVzc2lvbih2YWx1ZVN0YXRlRXhwKTtcblx0cmV0dXJuIGZpZWxkLnZhbHVlU3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRVcFZpc2libGVQcm9wZXJ0aWVzKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IHZvaWQge1xuXHQvLyB3ZSBkbyB0aGlzIGJlZm9yZSBlbmhhbmNpbmcgdGhlIGRhdGFNb2RlbFBhdGggc28gdGhhdCBpdCBzdGlsbCBwb2ludHMgYXQgdGhlIERhdGFGaWVsZFxuXHQvLyBjb25zdCB2aXNpYmxlUHJvcGVydGllczogUGFydGlhbDxmaWVsZEJsb2NrPiA9IHt9O1xuXHRjb25zdCBwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGggPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+KFxuXHRcdGZpZWxkLm1ldGFQYXRoQ29udGV4dCA/IGZpZWxkLm1ldGFQYXRoQ29udGV4dCA6IGZpZWxkLm1ldGFQYXRoLFxuXHRcdGZpZWxkLmNvbnRleHRQYXRoXG5cdCk7XG5cblx0ZmllbGQudmlzaWJsZSA/Pz0gZ2V0VmlzaWJsZUV4cHJlc3Npb24ocHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLCBmaWVsZC5mb3JtYXRPcHRpb25zKTtcblx0ZmllbGQuZGlzcGxheVZpc2libGUgPSBmaWVsZC5mb3JtYXRPcHRpb25zPy5maWVsZE1vZGUgPT09IFwibm93cmFwcGVyXCIgPyBmaWVsZC52aXNpYmxlIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBnZXRDb250ZW50SWQobWFjcm9JZDogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIGAke21hY3JvSWR9LWNvbnRlbnRgO1xufVxuXG4vKipcbiAqIENvbXB1dGVzIHByb3BlcnRpZXMgZm9yIHRoZSBmaWxlIHRlbXBsYXRpbmcuXG4gKiBAcGFyYW0gZmllbGQgVGhlIGZpZWxkXG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVGaWxlVXBsb2FkZXJQcm9wZXJ0aWVzKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IHZvaWQge1xuXHRpZiAoZmllbGQuZGlzcGxheVN0eWxlID09PSBcIkZpbGVcIikge1xuXHRcdGZpZWxkLmZpbGVSZWxhdGl2ZVByb3BlcnR5UGF0aCA9IGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgoZmllbGQuZGF0YU1vZGVsUGF0aCkgfHwgXCJcIjtcblx0XHRjb25zdCBmaWxlTmFtZUFubm90YXRpb24gPSBmaWVsZC5wcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db3JlPy5Db250ZW50RGlzcG9zaXRpb24/LkZpbGVuYW1lO1xuXHRcdGlmIChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihmaWxlTmFtZUFubm90YXRpb24pKSB7XG5cdFx0XHRjb25zdCBmaWxlTmFtZURhdGFNb2RlbFBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aChmaWVsZC5kYXRhTW9kZWxQYXRoLCBmaWxlTmFtZUFubm90YXRpb24ucGF0aCk7XG5cdFx0XHRmaWVsZC5maWxlRmlsZW5hbWVFeHByZXNzaW9uID0gZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aChmaWxlTmFtZURhdGFNb2RlbFBhdGgpID8/IFwiXCI7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQ29tcHV0ZXMgcHJvcGVydGllcyBmb3IgdGhlIGlubGluZSBlZGl0IHRlbXBsYXRpbmcuXG4gKiBAcGFyYW0gZmllbGQgVGhlIGZpZWxkXG4gKiBAcGFyYW0gdmlld0RhdGFNb2RlbFxuICovXG5mdW5jdGlvbiBjb21wdXRlSW5saW5lRWRpdFByb3BlcnRpZXMoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzLCB2aWV3RGF0YU1vZGVsOiBKU09OTW9kZWwpOiB2b2lkIHtcblx0aWYgKGZpZWxkLmRpc3BsYXlTdHlsZSA9PT0gXCJGaWxlXCIgfHwgZmllbGQuZGlzcGxheVN0eWxlID09PSBcIkF2YXRhclwiKSB7XG5cdFx0ZmllbGQuaW5saW5lRWRpdEVuYWJsZWQgPSB1bmRlZmluZWQ7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGZpZWxkLmlubGluZUVkaXRFbmFibGVkID1cblx0XHRmaWVsZC5pbmxpbmVFZGl0RW5hYmxlZCA9PT0gdHJ1ZSB8fCB2aWV3RGF0YU1vZGVsPy5nZXRQcm9wZXJ0eShcIi9pc0lubGluZUVkaXRFbmFibGVkXCIpID09PSB0cnVlID8gdHJ1ZSA6IHVuZGVmaW5lZDtcblx0aWYgKGZpZWxkLmlubGluZUVkaXRFbmFibGVkICYmIGZpZWxkLmVkaXRNb2RlQXNPYmplY3QgIT09IFwiRGlzcGxheVwiKSB7XG5cdFx0Y29uc3QgY29tcHV0ZWRFZGl0YWJsZUV4cHJlc3Npb24gPSBVSUZvcm1hdHRlcnMuZ2V0RWRpdGFibGVFeHByZXNzaW9uQXNPYmplY3QoXG5cdFx0XHRmaWVsZC5wcm9wZXJ0eUZvckZpZWxkQ29udHJvbCxcblx0XHRcdGZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoLFxuXHRcdFx0ZmllbGQuZGF0YU1vZGVsUGF0aFxuXHRcdCk7XG5cblx0XHRmaWVsZC5oYXNJbmxpbmVFZGl0ID0gdHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRjb21wdXRlZEVkaXRhYmxlRXhwcmVzc2lvbixcblx0XHRcdFwiUGF0aEluTW9kZWxcIixcblx0XHRcdChleHByKSA9PiB7XG5cdFx0XHRcdGlmIChleHByLnBhdGggPT09IFwiaXNFZGl0YWJsZVwiICYmIGV4cHIubW9kZWxOYW1lID09PSBcInVpXCIpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGV4cHI7XG5cdFx0XHR9LFxuXHRcdFx0dHJ1ZVxuXHRcdCkgYXMgdW5rbm93biBhcyBib29sZWFuO1xuXHR9XG59XG5cbmNvbnN0IEZpZWxkU3RydWN0dXJlSGVscGVyID0ge1xuXHRnZXREZWNpbWFsUGFkZGluZyxcblx0c2V0VXBGaWVsZCxcblx0Y29tcHV0ZUV4dGVybmFsSUQsXG5cdHNldFVwRGlzcGxheVN0eWxlLFxuXHRzZXRVcE9iamVjdElkZW50aWZpZXJUaXRsZUFuZFRleHQsXG5cdHNldFVwVmFsdWVTdGF0ZVxufTtcbmV4cG9ydCBkZWZhdWx0IEZpZWxkU3RydWN0dXJlSGVscGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQWlNTyxTQUFTQSxVQUFVQSxDQUN6QkMsS0FBZ0MsRUFDaENDLG9CQUErQyxFQUMvQ0MsYUFBd0IsRUFDeEJDLGFBQXdCLEVBQ3hCQyxZQUEwQixFQUMxQkMsaUJBQTJCLEVBQzNCQyxRQUE4QixFQUM5QkMsV0FBaUMsRUFDVjtJQUN2QixNQUFNQyxXQUFXLEdBQUc7TUFBRSxHQUFHUjtJQUFNLENBQW9DO0lBQ25FUyxNQUFNLENBQUNDLGNBQWMsQ0FBQ0YsV0FBVyxFQUFFLE9BQU8sRUFBRTtNQUMzQ0csR0FBRyxFQUFFQSxDQUFBLEtBQU07UUFDVixPQUFPWCxLQUFLLENBQUNZLEtBQUs7TUFDbkI7SUFDRCxDQUFDLENBQUM7SUFDRkgsTUFBTSxDQUFDQyxjQUFjLENBQUNGLFdBQVcsRUFBRSxhQUFhLEVBQUU7TUFDakRHLEdBQUcsRUFBRUEsQ0FBQSxLQUFNO1FBQ1YsT0FBT1gsS0FBSyxDQUFDYSxXQUFXO01BQ3pCO0lBQ0QsQ0FBQyxDQUFDO0lBRUZMLFdBQVcsQ0FBQ00sTUFBTSxHQUFHZCxLQUFLLENBQUNjLE1BQU07SUFDakNOLFdBQVcsQ0FBQ0YsUUFBUSxHQUFJQSxRQUFRLEdBQUdBLFFBQVEsR0FBR04sS0FBSyxDQUFDTSxRQUFvQjtJQUN4RUUsV0FBVyxDQUFDRCxXQUFXLEdBQUlBLFdBQVcsR0FBR0EsV0FBVyxHQUFHUCxLQUFLLENBQUNPLFdBQXVCO0lBQ3BGQyxXQUFXLENBQUNPLE9BQU8sR0FBR2YsS0FBSyxDQUFDZSxPQUFPOztJQUVuQztJQUNBLElBQUksQ0FBQ1AsV0FBVyxDQUFDUSxVQUFVLEVBQUU7TUFDNUJSLFdBQVcsQ0FBQ1EsVUFBVSxHQUFHLGdCQUFnQjtNQUN6Q1IsV0FBVyxDQUFDUyxPQUFPLEdBQUdqQixLQUFLLENBQUNrQixFQUFFO01BQzlCLElBQUksQ0FBQ1YsV0FBVyxDQUFDVyxRQUFRLEVBQUU7UUFDMUJYLFdBQVcsQ0FBQ1csUUFBUSxHQUFHbkIsS0FBSyxDQUFDa0IsRUFBRTtNQUNoQztJQUNEO0lBRUFWLFdBQVcsQ0FBQ1ksYUFBYSxLQUFLLENBQUMsQ0FBdUI7SUFDdERaLFdBQVcsQ0FBQ1ksYUFBYSxHQUFHQyxnQkFBZ0IsQ0FBQ2IsV0FBVyxDQUFDO0lBQ3pEQSxXQUFXLENBQUNZLGFBQWEsQ0FBQ0Usb0JBQW9CLEdBQzdDcEIsYUFBYSxFQUFFcUIsV0FBVyxDQUFDLHNEQUFzRCxDQUFDLEtBQUssSUFBSTtJQUU1RmYsV0FBVyxDQUFDZ0IsaUJBQWlCLEdBQUdsQixRQUFRLEdBQUdBLFFBQVEsR0FBR0UsV0FBVyxDQUFDRixRQUFRO0lBQzFFbUIsdUJBQXVCLENBQUNqQixXQUFXLEVBQUVBLFdBQVcsQ0FBQ2dCLGlCQUFpQixFQUFFRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQy9FbEIsV0FBVyxDQUFDbUIsaUJBQWlCLEdBQUdDLGtCQUFrQixDQUFDcEIsV0FBVyxDQUFDbUIsaUJBQWlCLENBQUM7SUFDakZFLHNCQUFzQixDQUFDckIsV0FBVyxDQUFDO0lBQ25Dc0IsVUFBVSxDQUFDdEIsV0FBVyxDQUFDO0lBQ3ZCQSxXQUFXLENBQUN1QixjQUFjLEdBQUdDLG1CQUFtQixDQUFDeEIsV0FBVyxDQUFDeUIsYUFBYSxDQUFDO0lBQzNFekIsV0FBVyxDQUFDMEIsS0FBSyxHQUFHQyxXQUFXLENBQUNDLGdCQUFnQixDQUFDcEMsS0FBSyxFQUE4QztNQUNuR3FDLE9BQU8sRUFBRTdCLFdBQVcsQ0FBQ0Y7SUFDdEIsQ0FBQyxDQUFDOztJQUVGO0lBQ0FnQyxpQkFBaUIsQ0FBQzlCLFdBQVcsQ0FBQztJQUM5QkEsV0FBVyxDQUFDK0IsVUFBVSxHQUFHL0IsV0FBVyxDQUFDZ0MsY0FBYyxDQUFDQyxvQkFBb0IsQ0FDdkUsSUFBSWpDLFdBQVcsQ0FBQ3lCLGFBQWEsQ0FBQ1MsZ0JBQWdCLENBQUNDLGtCQUFrQixFQUNsRSxDQUFDO0lBQ0QsSUFBSW5DLFdBQVcsQ0FBQ1ksYUFBYSxFQUFFd0IscUJBQXFCLEtBQUssSUFBSSxFQUFFO01BQzlEcEMsV0FBVyxDQUFDcUMsNkJBQTZCLEdBQUdBLDZCQUE2QixDQUFDckMsV0FBVyxDQUFDeUIsYUFBYSxDQUFDO0lBQ3JHO0lBQ0FhLGVBQWUsQ0FBQ3RDLFdBQVcsQ0FBQztJQUM1QnVDLDhCQUE4QixDQUFDdkMsV0FBVyxDQUFDO0lBQzNDd0MsMEJBQTBCLENBQUN4QyxXQUFXLENBQUM7SUFDdkNBLFdBQVcsQ0FBQ1ksYUFBYSxHQUFHWixXQUFXLENBQUNZLGFBQWEsR0FBR1osV0FBVyxDQUFDWSxhQUFhLEdBQUksQ0FBQyxDQUF3QjtJQUM5RzZCLGtCQUFrQixDQUNqQnpDLFdBQVcsRUFDVkEsV0FBVyxDQUFDMEMsdUJBQXVCLElBQXNDMUMsV0FBVyxDQUFDeUIsYUFBYSxFQUNuR2hDLG9CQUFvQixFQUNwQkMsYUFDRCxDQUFDO0lBQ0RpRCxpQkFBaUIsQ0FBQzNDLFdBQVcsRUFBRUEsV0FBVyxDQUFDbUIsaUJBQWlCLEVBQUVuQixXQUFXLENBQUN5QixhQUFhLEVBQUU5QixhQUFhLEVBQUVDLFlBQVksQ0FBQztJQUNySGdELGNBQWMsQ0FBQzVDLFdBQVcsRUFBRUosWUFBWSxDQUFDO0lBRXpDSSxXQUFXLENBQUM2QyxVQUFVLEdBQUdDLGVBQWUsQ0FBQzlDLFdBQVcsQ0FBQztJQUNyRCxJQUFJQSxXQUFXLENBQUMrQyxTQUFTLEtBQUssb0JBQW9CLEVBQUU7TUFDbkQvQyxXQUFXLENBQUNnRCxvQkFBb0IsR0FBR0MsZ0NBQWdDLENBQUNqRCxXQUFXLENBQUM7SUFDakY7SUFFQWtELDZCQUE2QixDQUFDbEQsV0FBVyxDQUFDO0lBRTFDbUQsMkJBQTJCLENBQUNuRCxXQUFXLEVBQUVOLGFBQWEsQ0FBQzs7SUFFdkQ7SUFDQSxNQUFNMEQsNkJBQTZCLEdBQUcsQ0FBQyxRQUFRLEVBQUUsb0JBQW9CLENBQUM7SUFDdEUsSUFDQ3BELFdBQVcsQ0FBQ3FELFlBQVksSUFDeEIsQ0FBQ0QsNkJBQTZCLENBQUNFLFFBQVEsQ0FBQ3RELFdBQVcsQ0FBQ3FELFlBQVksQ0FBQyxJQUNqRXJELFdBQVcsQ0FBQ3lCLGFBQWEsQ0FBQzhCLFlBQVksRUFDckM7TUFDRHZELFdBQVcsQ0FBQ3dELElBQUksR0FDZnhELFdBQVcsQ0FBQ3dELElBQUksSUFDaEJ4RCxXQUFXLENBQUNJLEtBQUssSUFDakJxRCxlQUFlLENBQUNDLGNBQWMsQ0FDNUIxRCxXQUFXLENBQUMwQyx1QkFBdUIsSUFBc0MxQyxXQUFXLENBQUN5QixhQUFhLEVBQ25HekIsV0FBVyxDQUFDWSxhQUNiLENBQUM7SUFDSCxDQUFDLE1BQU07TUFDTlosV0FBVyxDQUFDd0QsSUFBSSxHQUFHLEVBQUU7SUFDdEI7SUFFQSxJQUFJeEQsV0FBVyxDQUFDWSxhQUFhLENBQUMrQyxrQkFBa0IsRUFBRTtNQUNqRDNELFdBQVcsQ0FBQzRELGtCQUFrQixHQUFHQyxNQUFNLENBQUM3RCxXQUFXLENBQUNZLGFBQWEsQ0FBQytDLGtCQUFrQixDQUFDLEtBQUssTUFBTSxHQUFHLElBQUksR0FBR0csU0FBUztJQUNwSCxDQUFDLE1BQU07TUFDTjlELFdBQVcsQ0FBQzRELGtCQUFrQixHQUFHRSxTQUFTO0lBQzNDOztJQUVBO0lBQ0EsSUFBSUMsVUFBVSxDQUFDL0QsV0FBVyxDQUFDbUIsaUJBQWlCLENBQUMsSUFBSW5CLFdBQVcsQ0FBQ21CLGlCQUFpQixDQUFDNkMsV0FBVyxFQUFFQyxFQUFFLEVBQUVDLGdCQUFnQixLQUFLSixTQUFTLEVBQUU7TUFDL0g5RCxXQUFXLENBQUNGLFFBQVEsR0FBR0UsV0FBVyxDQUFDZ0MsY0FBYyxDQUFDQyxvQkFBb0IsQ0FDckUsbURBQXdDLEVBQ3hDbkMsUUFBUSxHQUFHQSxRQUFRLEdBQUdFLFdBQVcsQ0FBQ0YsUUFDbkMsQ0FBQztJQUNGO0lBRUEsSUFBSSxDQUFDRCxpQkFBaUIsRUFBRTtNQUN2QkcsV0FBVyxDQUFDbUUsZ0JBQWdCLEdBQUdDLGlCQUFpQixDQUFDQyxNQUFNLENBQUNDLEtBQUssQ0FBQ3RFLFdBQVcsQ0FBQ3VFLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDbkg7SUFFQXZFLFdBQVcsQ0FBQ3dFLGFBQWEsR0FBRztNQUMzQmxFLE1BQU0sRUFBRUEsQ0FBQSxLQUFZLENBQUMsQ0FBQztNQUN0Qm1FLFVBQVUsRUFBRUEsQ0FBQSxLQUFZLENBQUMsQ0FBQztNQUMxQkMsa0JBQWtCLEVBQUVBLENBQUEsS0FBWSxDQUFDLENBQUM7TUFDbENDLG1CQUFtQixFQUFFQSxDQUFBLEtBQVksQ0FBQyxDQUFDO01BQ25DQyxvQkFBb0IsRUFBRUEsQ0FBQSxLQUFZLENBQUMsQ0FBQztNQUNwQ0Msb0JBQW9CLEVBQUVBLENBQUEsS0FBWSxDQUFDLENBQUM7TUFDcENDLFlBQVksRUFBRUEsQ0FBQSxLQUFZLENBQUMsQ0FBQztNQUM1QkMsWUFBWSxFQUFFQSxDQUFBLEtBQVksQ0FBQyxDQUFDO01BQzVCQyxrQkFBa0IsRUFBRUEsQ0FBQSxLQUFZLENBQUMsQ0FBQztNQUNsQ0MsbUJBQW1CLEVBQUVBLENBQUEsS0FBWSxDQUFDLENBQUM7TUFDbkNDLGdCQUFnQixFQUFFQSxDQUFBLEtBQVksQ0FBQyxDQUFDO01BQ2hDQyxVQUFVLEVBQUVBLENBQUEsS0FBWSxDQUFDLENBQUM7TUFDMUJDLFdBQVcsRUFBRUEsQ0FBQSxLQUFZLENBQUMsQ0FBQztNQUMzQkMseUJBQXlCLEVBQUVBLENBQUEsS0FBWSxDQUFDLENBQUM7TUFDekNDLDZCQUE2QixFQUFFQSxDQUFBLEtBQVksQ0FBQyxDQUFDO01BQzdDQyx5QkFBeUIsRUFBRUEsQ0FBQSxLQUFZLENBQUMsQ0FBQztNQUN6Q0MsdUJBQXVCLEVBQUVBLENBQUEsS0FBWSxDQUFDLENBQUM7TUFDdkNDLGtCQUFrQixFQUFFQSxDQUFBLEtBQVksQ0FBQztJQUNsQyxDQUFDO0lBRUQsT0FBT3pGLFdBQVc7RUFDbkI7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7RUFIQTBGLFFBQUEsQ0FBQW5HLFVBQUEsR0FBQUEsVUFBQTtFQUlPLFNBQVNnRCw4QkFBOEJBLENBQUMvQyxLQUEyQixFQUFRO0lBQ2pGLE1BQU1tRywwQkFBMEIsR0FBR0MsWUFBWSxDQUFDQyw2QkFBNkIsQ0FDNUVyRyxLQUFLLENBQUNzRyx1QkFBdUIsRUFDN0J0RyxLQUFLLENBQUMyQixpQkFBaUIsRUFDdkIzQixLQUFLLENBQUNpQyxhQUNQLENBQUM7SUFDRCxJQUFJc0UsV0FBVyxDQUFDQyw2QkFBNkIsQ0FBQ3hHLEtBQUssQ0FBQ3dDLGNBQWMsQ0FBQyxJQUFJeEMsS0FBSyxDQUFDeUcsUUFBUSxLQUFLQyxhQUFhLENBQUNDLE9BQU8sRUFBRTtNQUNoSCxNQUFNQyxvQkFBb0IsR0FBRyxJQUFJO01BQ2pDO01BQ0EsTUFBTUMsdUJBQXVCLEdBQUdULFlBQVksQ0FBQ1UsMEJBQTBCLENBQ3RFOUcsS0FBSyxDQUFDaUMsYUFBYSxFQUNuQjhFLHVCQUF1QixDQUFDQyx3QkFDekIsQ0FBQztNQUNELE1BQU1DLGtCQUFrQixHQUFHckMsaUJBQWlCLENBQUNzQyxHQUFHLENBQUNmLDBCQUEwQixFQUFFZ0IsR0FBRyxDQUFDTix1QkFBdUIsQ0FBQyxDQUFDLENBQUM7TUFFM0csTUFBTUosUUFBUSxHQUFHN0IsaUJBQWlCLENBQ2pDQyxNQUFNLENBQ0xnQyx1QkFBdUIsRUFDdkJPLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFDcEJ2QyxNQUFNLENBQUNxQyxHQUFHLENBQUN6QyxFQUFFLENBQUM0QyxVQUFVLEVBQUUsQ0FBQyxDQUFDckgsS0FBSyxDQUFDNkMsNkJBQTZCLENBQUMsRUFBRSxTQUFTLEVBQUU3QyxLQUFLLENBQUNzSCxnQkFBZ0IsQ0FDcEcsQ0FDRCxDQUFDO01BQ0R0SCxLQUFLLENBQUM0RyxvQkFBb0IsR0FBR0Esb0JBQW9CO01BQ2pENUcsS0FBSyxDQUFDNkcsdUJBQXVCLEdBQUdBLHVCQUF1QjtNQUN2RDdHLEtBQUssQ0FBQ2lILGtCQUFrQixHQUFHQSxrQkFBa0I7TUFDN0NqSCxLQUFLLENBQUMyRSxnQkFBZ0IsR0FBRzhCLFFBQVE7SUFDbEMsQ0FBQyxNQUFNO01BQ056RyxLQUFLLENBQUNpSCxrQkFBa0IsR0FBR3JDLGlCQUFpQixDQUFDdUIsMEJBQTBCLENBQUM7SUFDekU7RUFDRDs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFMQUQsUUFBQSxDQUFBbkQsOEJBQUEsR0FBQUEsOEJBQUE7RUFNTyxTQUFTdEIsdUJBQXVCQSxDQUFDekIsS0FBMkIsRUFBRXVILFNBQXlCLEVBQVE7SUFDckd2SCxLQUFLLENBQUMyQixpQkFBaUIsR0FBRzZGLGtCQUFrQixDQUFDQyx1QkFBdUIsQ0FBQ3pILEtBQUssQ0FBQzBILGVBQWUsR0FBRzFILEtBQUssQ0FBQzBILGVBQWUsR0FBRzFILEtBQUssQ0FBQ00sUUFBUSxDQUU5RztJQUVyQixJQUFJMkIsYUFBYSxHQUFHdUYsa0JBQWtCLENBQUNHLDJCQUEyQixDQUNqRTNILEtBQUssQ0FBQzBILGVBQWUsR0FBRzFILEtBQUssQ0FBQzBILGVBQWUsR0FBRzFILEtBQUssQ0FBQ00sUUFBUSxFQUM5RE4sS0FBSyxDQUFDTyxXQUNQLENBQUM7SUFDRDBCLGFBQWEsR0FDWjJGLDhCQUE4QixDQUFDM0YsYUFBaUYsQ0FBQyxJQUFJQSxhQUFhO0lBQ25JakMsS0FBSyxDQUFDaUMsYUFBYSxHQUFHQSxhQUE4QztJQUNwRWpDLEtBQUssQ0FBQzZILFFBQVEsR0FBRzVGLGFBQWEsQ0FBQzhCLFlBQXdCO0lBQ3ZEL0QsS0FBSyxDQUFDd0MsY0FBYyxHQUFHK0UsU0FBUztJQUNoQ3ZILEtBQUssQ0FBQ3NHLHVCQUF1QixHQUFJckUsYUFBYSxFQUFFOEIsWUFBWSxFQUFnQytELEtBQUssR0FDOUYsQ0FBQzdGLGFBQWEsRUFBRThCLFlBQVksRUFBK0IrRCxLQUFLLEdBQ2hFN0YsYUFBYSxFQUFFOEIsWUFBWTtFQUMvQjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtFQUhBbUMsUUFBQSxDQUFBekUsdUJBQUEsR0FBQUEsdUJBQUE7RUFJTyxTQUFTdUIsMEJBQTBCQSxDQUFDaEQsS0FBMkIsRUFBUTtJQUM3RSxNQUFNK0gsd0NBQXdDLEdBQUdDLDJDQUEyQyxDQUMzRixDQUFDaEksS0FBSyxDQUFDaUksa0JBQWtCLEdBQUdqSSxLQUFLLENBQUNpSSxrQkFBa0IsR0FBR2pJLEtBQUssQ0FBQ08sV0FBVyxHQUNyRTJILE9BQU8sQ0FBQyxDQUFDLENBQ1ZDLFVBQVUsQ0FBQyw4QkFBOEIsRUFBRSxHQUFHLENBQUMsRUFDakRuSSxLQUFLLENBQUN3QyxjQUNQLENBQUM7SUFDRCxNQUFNNEYsd0NBQXdDLEdBQUdDLDJDQUEyQyxDQUMzRixDQUFDckksS0FBSyxDQUFDaUksa0JBQWtCLEdBQUdqSSxLQUFLLENBQUNpSSxrQkFBa0IsR0FBR2pJLEtBQUssQ0FBQ08sV0FBVyxHQUNyRTJILE9BQU8sQ0FBQyxDQUFDLENBQ1ZDLFVBQVUsQ0FBQyw4QkFBOEIsRUFBRSxHQUFHLENBQUMsRUFDakRuSSxLQUFLLENBQUN3QyxjQUNQLENBQUM7SUFDRCxNQUFNOEYsbUJBQW1CLEdBQUc7TUFDM0JQLHdDQUF3QyxFQUFFQSx3Q0FBd0M7TUFDbEZLLHdDQUF3QyxFQUFFQTtJQUMzQyxDQUFDO0lBRUQsTUFBTUcsaUJBQWlCLEdBQUduQyxZQUFZLENBQUNvQyxvQkFBb0IsQ0FDMUR4SSxLQUFLLENBQUNzRyx1QkFBdUIsRUFDN0J0RyxLQUFLLENBQUMyQixpQkFBaUIsRUFDdkIsS0FBSyxFQUNMM0IsS0FBSyxDQUFDaUMsYUFDUCxDQUFxQztJQUNyQyxNQUFNd0csa0JBQWtCLEdBQUdyQyxZQUFZLENBQUNzQyxxQkFBcUIsQ0FDNUQxSSxLQUFLLENBQUNzRyx1QkFBdUIsRUFDN0J0RyxLQUFLLENBQUMyQixpQkFBaUIsRUFDdkIsS0FBSyxFQUNMLEtBQUssRUFDTDJHLG1CQUFtQixFQUNuQnRJLEtBQUssQ0FBQ2lDLGFBQ1AsQ0FBcUM7SUFFckNqQyxLQUFLLENBQUN1SSxpQkFBaUIsR0FBR0EsaUJBQWlCO0lBQzNDdkksS0FBSyxDQUFDeUksa0JBQWtCLEdBQUdBLGtCQUFrQjtFQUM5QztFQUFDdkMsUUFBQSxDQUFBbEQsMEJBQUEsR0FBQUEsMEJBQUE7RUFFTSxTQUFTRixlQUFlQSxDQUFDOUMsS0FBMkIsRUFBUTtJQUNsRSxJQUFJQSxLQUFLLENBQUN5RyxRQUFRLEtBQUtuQyxTQUFTLElBQUl0RSxLQUFLLENBQUN5RyxRQUFRLEtBQUssSUFBSSxFQUFFO01BQzVEO01BQ0F6RyxLQUFLLENBQUNzSCxnQkFBZ0IsR0FBR3RILEtBQUssQ0FBQ3lHLFFBQVE7SUFDeEMsQ0FBQyxNQUFNO01BQ04sTUFBTWtDLGVBQWUsR0FBRzNJLEtBQUssQ0FBQ29CLGFBQWEsRUFBRXdILGtCQUFrQixHQUFHNUksS0FBSyxDQUFDb0IsYUFBYSxDQUFDd0gsa0JBQWtCLEtBQUssVUFBVSxHQUFHLEtBQUs7TUFFL0g1SSxLQUFLLENBQUNzSCxnQkFBZ0IsR0FBR2xCLFlBQVksQ0FBQ3lDLFdBQVcsQ0FDaEQ3SSxLQUFLLENBQUNzRyx1QkFBdUIsRUFDN0J0RyxLQUFLLENBQUNpQyxhQUFhLEVBQ25CMEcsZUFBZSxFQUNmLElBQUksRUFDSjNJLEtBQUssQ0FBQzJCLGlCQUNQLENBQUM7TUFDRDNCLEtBQUssQ0FBQzJFLGdCQUFnQixHQUFHQyxpQkFBaUIsQ0FDekNDLE1BQU0sQ0FBQ3FDLEdBQUcsQ0FBQ3pDLEVBQUUsQ0FBQzRDLFVBQVUsRUFBRSxDQUFDLENBQUNySCxLQUFLLENBQUM2Qyw2QkFBNkIsQ0FBQyxFQUFFLFNBQVMsRUFBRTdDLEtBQUssQ0FBQ3NILGdCQUFnQixDQUNwRyxDQUFDO0lBQ0Y7RUFDRDtFQUFDcEIsUUFBQSxDQUFBcEQsZUFBQSxHQUFBQSxlQUFBO0VBRU0sU0FBU1IsaUJBQWlCQSxDQUFDdEMsS0FBMkIsRUFBUTtJQUNwRSxNQUFNOEksa0JBQWtCLEdBQUdDLCtCQUErQixDQUFDL0ksS0FBSyxDQUFDNkgsUUFBUSxDQUFDO0lBRTFFLElBQUlpQixrQkFBa0IsRUFBRTtNQUN2QixJQUFJOUksS0FBSyxDQUFDNkgsUUFBUSxFQUFFN0gsS0FBSyxDQUFDNkgsUUFBUSxDQUFDbUIsSUFBSSxHQUFHRixrQkFBa0IsQ0FBQ0UsSUFBSTtNQUNqRSxJQUFJQyxXQUFXLENBQUNqSixLQUFLLENBQUMyQixpQkFBaUIsQ0FBQyxFQUFFO1FBQ3pDM0IsS0FBSyxDQUFDMkIsaUJBQWlCLENBQUNtRyxLQUFLLENBQUNvQixPQUFPLENBQUNGLElBQUksR0FBR0Ysa0JBQWtCLENBQUNFLElBQUk7TUFDckU7TUFDQSxNQUFNRyxzQkFBc0IsR0FBR0MsbUNBQW1DLENBQUNwSixLQUFLLENBQUM2SCxRQUFRLENBQUM7TUFDbEYsTUFBTXdCLGlCQUFpQixHQUFHckosS0FBSyxDQUFDTSxRQUFRLENBQ3RDb0IsUUFBUSxDQUFDLENBQUMsQ0FDVmUsb0JBQW9CLENBQUN6QyxLQUFLLENBQUNPLFdBQVcsRUFBRTJILE9BQU8sQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHaUIsc0JBQXNCLEVBQUVuSixLQUFLLENBQUNNLFFBQVEsQ0FBQztNQUVuR04sS0FBSyxDQUFDc0osMkJBQTJCLEdBQUc5QixrQkFBa0IsQ0FBQ0MsdUJBQXVCLENBQUM0QixpQkFBaUIsQ0FBYTtNQUU3RyxJQUFJcEgsYUFBNEMsR0FBR3VGLGtCQUFrQixDQUFDRywyQkFBMkIsQ0FDaEcwQixpQkFBaUIsRUFDakJySixLQUFLLENBQUNPLFdBQ1AsQ0FBQztNQUNEMEIsYUFBYSxHQUFHMkYsOEJBQThCLENBQUMzRixhQUE0RCxDQUFDLElBQUlBLGFBQWE7TUFDN0hqQyxLQUFLLENBQUNrRCx1QkFBdUIsR0FBR2pCLGFBQWE7SUFDOUM7RUFDRDs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFMQWlFLFFBQUEsQ0FBQTVELGlCQUFBLEdBQUFBLGlCQUFBO0VBTUEsU0FBU2lILG9CQUFvQkEsQ0FBQ3ZKLEtBQTJCLEVBQUVJLFlBQTJCLEVBQXdCO0lBQzdHLE1BQU1vSixvQ0FBb0MsR0FBRyxDQUM1QyxvQkFBb0IsRUFDcEIsVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZixPQUFPLEVBQ1AsV0FBVyxFQUNYLFFBQVEsQ0FDUjtJQUVELElBQUksQ0FBQ3BKLFlBQVksRUFBRTtNQUNsQjtNQUNBO0lBQ0Q7SUFDQSxNQUFNcUosaUJBQWlCLEdBQUdySixZQUFZLENBQUNzSixxQkFBcUIsQ0FBQyxDQUFDO0lBQzlELE1BQU1DLGFBQWEsR0FBR0YsaUJBQWlCLENBQUNGLG9CQUFvQixDQUMzRHZKLEtBQUssQ0FBQ2lDLGFBQWEsQ0FBQ1MsZ0JBQWdCLEVBQUVDLGtCQUFrQixJQUFJLEVBQUUsRUFDOUQzQyxLQUFLLENBQUNpQyxhQUFhLENBQUM4QixZQUFZLEVBQUVwQixrQkFBa0IsSUFBSSxFQUN6RCxDQUFDO0lBRUQzQyxLQUFLLENBQUM0Six3QkFBd0IsR0FBR3JGLFVBQVUsQ0FBQ3ZFLEtBQUssQ0FBQ2lDLGFBQWEsQ0FBQzhCLFlBQVksQ0FBQyxHQUMxRThGLGtDQUFrQyxDQUFDN0osS0FBSyxDQUFDaUMsYUFBYSxDQUFDLEdBQ3ZEcUMsU0FBUztJQUVaLElBQUl0RSxLQUFLLENBQUM0RyxvQkFBb0IsSUFBSTRDLG9DQUFvQyxDQUFDMUYsUUFBUSxDQUFDOUQsS0FBSyxDQUFDdUQsU0FBUyxJQUFJLEVBQUUsQ0FBQyxFQUFFO01BQ3ZHLE1BQU11Ryx1QkFBdUIsR0FBRyxHQUFHQyw2QkFBNkIsR0FBRy9KLEtBQUssQ0FBQytCLGNBQWMsRUFBRTtNQUN6RjRILGFBQWEsQ0FBQ0ssSUFBSSxDQUFDRix1QkFBdUIsQ0FBQztJQUM1QztJQUVBLE9BQU9ILGFBQWEsQ0FBQ00sTUFBTSxHQUFHTixhQUFhLEdBQUdyRixTQUFTO0VBQ3hEOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLFNBQVN4QyxVQUFVQSxDQUFDOUIsS0FBb0MsRUFBUTtJQUN0RSxJQUFJQSxLQUFLLENBQUNpQixPQUFPLElBQUksQ0FBQ2pCLEtBQUssQ0FBQ2tLLE1BQU0sRUFBRTtNQUNuQ2xLLEtBQUssQ0FBQ2tLLE1BQU0sR0FBR2xLLEtBQUssQ0FBQ2lCLE9BQU87TUFDNUJqQixLQUFLLENBQUNpQixPQUFPLEdBQUdrSixZQUFZLENBQUNuSyxLQUFLLENBQUNpQixPQUFPLENBQUM7SUFDNUM7SUFFQSxJQUFJakIsS0FBSyxDQUFDbUIsUUFBUSxFQUFFO01BQ25CbkIsS0FBSyxDQUFDb0ssV0FBVyxHQUFHQyxRQUFRLENBQUMsQ0FBQ3JLLEtBQUssQ0FBQ21CLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUM3RDtJQUNBO0lBQ0EsSUFBSW5CLEtBQUssQ0FBQ29CLGFBQWEsRUFBRWtKLFNBQVMsS0FBSyxXQUFXLElBQUl0SyxLQUFLLENBQUN5RyxRQUFRLEtBQUssU0FBUyxFQUFFO01BQ25GLElBQUl6RyxLQUFLLENBQUNpQixPQUFPLEVBQUU7UUFDbEJqQixLQUFLLENBQUN1SyxjQUFjLEdBQUd2SyxLQUFLLENBQUNpQixPQUFPO01BQ3JDLENBQUMsTUFBTTtRQUNOakIsS0FBSyxDQUFDdUssY0FBYyxHQUFHdkssS0FBSyxDQUFDbUIsUUFBUSxHQUFHa0osUUFBUSxDQUFDLENBQUNySyxLQUFLLENBQUNtQixRQUFRLEVBQUUsZUFBZSxDQUFDLENBQUMsR0FBR21ELFNBQVM7TUFDaEc7SUFDRCxDQUFDLE1BQU0sSUFBSXRFLEtBQUssQ0FBQ21CLFFBQVEsRUFBRTtNQUMxQm5CLEtBQUssQ0FBQ3VLLGNBQWMsR0FBR0YsUUFBUSxDQUFDLENBQUNySyxLQUFLLENBQUNtQixRQUFRLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDbkU7RUFDRDs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBSkErRSxRQUFBLENBQUFwRSxVQUFBLEdBQUFBLFVBQUE7RUFLTyxTQUFTVCxnQkFBZ0JBLENBQUNyQixLQUEyQixFQUFzQjtJQUNqRixPQUFPO01BQ04sR0FBR0EsS0FBSyxDQUFDb0IsYUFBYTtNQUN0Qm9KLGFBQWEsRUFBRXhLLEtBQUssQ0FBQ29CLGFBQWEsQ0FBQ29KLGFBQWEsSUFBSSxNQUFNO01BQzFEckcsa0JBQWtCLEVBQUVuRSxLQUFLLENBQUNvQixhQUFhLENBQUMrQyxrQkFBa0IsSUFBSSxJQUFJO01BQ2xFc0csV0FBVyxFQUFFekssS0FBSyxDQUFDb0IsYUFBYSxDQUFDcUosV0FBMEI7TUFDM0Q3QixrQkFBa0IsRUFBRTVJLEtBQUssQ0FBQ29CLGFBQWEsQ0FBQ3dILGtCQUFrQjtNQUMxRDhCLGFBQWEsRUFBRTFLLEtBQUssQ0FBQ29CLGFBQWEsQ0FBQ3NKLGFBQWE7TUFDaERDLFlBQVksRUFBRTNLLEtBQUssQ0FBQ29CLGFBQWEsQ0FBQ3VKLFlBQVk7TUFDOUNDLHdCQUF3QixFQUFFNUssS0FBSyxDQUFDb0IsYUFBYSxDQUFDd0osd0JBQXdCO01BQ3RFQyx5QkFBeUIsRUFBRTdLLEtBQUssQ0FBQ29CLGFBQWEsQ0FBQ3lKLHlCQUF5QjtNQUN4RUMsYUFBYSxFQUFFOUssS0FBSyxDQUFDb0IsYUFBYSxDQUFDMEosYUFBYTtNQUNoREMsY0FBYyxFQUFFL0ssS0FBSyxDQUFDb0IsYUFBYSxDQUFDMkosY0FBYztNQUNsREMsNEJBQTRCLEVBQUVoTCxLQUFLLENBQUNvQixhQUFhLENBQUM0Siw0QkFBNEI7TUFDOUVDLFFBQVEsRUFBRWpMLEtBQUssQ0FBQ29CLGFBQWEsQ0FBQzZKLFFBQVE7TUFDdENDLFlBQVksRUFBRWxMLEtBQUssQ0FBQ29CLGFBQWEsQ0FBQzhKLFlBQVk7TUFDOUNDLFFBQVEsRUFBRW5MLEtBQUssQ0FBQ29CLGFBQWEsQ0FBQytKO0lBQy9CLENBQUM7RUFDRjtFQUFDakYsUUFBQSxDQUFBN0UsZ0JBQUEsR0FBQUEsZ0JBQUE7RUFFRCxTQUFTK0osdUJBQXVCQSxDQUMvQkMsa0JBQXNDLEVBQ3RDQywyQkFBeUUsRUFDdEM7SUFDbkMsSUFBSUMseUJBQTJELEdBQUdDLFdBQVcsQ0FDNUUzQixrQ0FBa0MsQ0FBQ3lCLDJCQUEyQixDQUMvRCxDQUFDO0lBQ0QsTUFBTUcsaUJBQWlCLEdBQUdKLGtCQUFrQixFQUFFWixXQUFXO0lBQ3pELE1BQU1pQixrQkFBa0IsR0FBR0Msd0JBQXdCLENBQUNMLDJCQUEyQixDQUFDdkgsWUFBWSxDQUFDLEdBQ3pGdUgsMkJBQTJCLENBQUN2SCxZQUFZLENBQUNtRixPQUFPLEdBQ2hEb0MsMkJBQTJCLENBQUN2SCxZQUF5QjtJQUV6RCxNQUFNNkgsVUFBVSxHQUFHRixrQkFBa0IsQ0FBQ2xILFdBQVcsRUFBRXFILE1BQU0sRUFBRUMsSUFBSTtJQUMvRCxJQUFJRixVQUFVLEtBQUt0SCxTQUFTLEVBQUU7TUFDN0IsT0FBT0EsU0FBUztJQUNqQjtJQUNBaUgseUJBQXlCLEdBQUdRLHlCQUF5QixDQUFDTCxrQkFBa0IsRUFBRUgseUJBQXlCLENBQUM7SUFFcEcsUUFBUUUsaUJBQWlCO01BQ3hCLEtBQUssa0JBQWtCO1FBQ3RCLE1BQU1PLGdCQUFnQixHQUFHQyxnQkFBZ0IsQ0FBQ1gsMkJBQTJCLENBQUM7UUFDdEUsT0FBTzFHLGlCQUFpQixDQUFDc0gsMkJBQTJCLENBQUNOLFVBQVUsRUFBRUksZ0JBQWdCLENBQUMsQ0FBQztNQUNwRixLQUFLLGtCQUFrQjtRQUN0QixPQUFPcEgsaUJBQWlCLENBQUN1SCxZQUFZLENBQUMsQ0FBQ1oseUJBQXlCLENBQUMsRUFBRWEsZUFBZSxDQUFDQyxzQkFBc0IsQ0FBQyxDQUFDO01BQzVHO1FBQ0MsT0FBTy9ILFNBQVM7SUFDbEI7RUFDRDtFQUVBLFNBQVNnSSxZQUFZQSxDQUFDck0sb0JBQStDLEVBQUVpQixFQUFVLEVBQW1CO0lBQ25HO0FBQ0Q7QUFDQTtBQUNBO0lBQ0MsTUFBTXFMLEtBQUssR0FBRyxDQUFDLENBQThCO0lBRTdDLElBQUl0TSxvQkFBb0IsRUFBRTtNQUN6QixNQUFNdU0sYUFBYSxHQUFHdk0sb0JBQW9CLENBQUNpQixFQUFFLENBQThCO01BQzNFLElBQUlzTCxhQUFhLEVBQUU7UUFDbEIvTCxNQUFNLENBQUNnTSxJQUFJLENBQUNELGFBQWEsQ0FBQyxDQUFDRSxPQUFPLENBQUMsVUFBVUMsU0FBUyxFQUFFO1VBQ3ZESixLQUFLLENBQUNJLFNBQVMsQ0FBQyxHQUFHSCxhQUFhLENBQUNHLFNBQVMsQ0FBQztRQUM1QyxDQUFDLENBQUM7TUFDSDtJQUNEO0lBQ0EsT0FBT0osS0FBSztFQUNiOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTSyw4QkFBOEJBLENBQ3RDNU0sS0FBMkIsRUFDM0JHLGFBQXdCLEVBQ3hCOEIsYUFBNEMsRUFDNUM0SyxrQkFBMkIsRUFDM0JDLFlBQXFCLEVBQ2Q7SUFDUCxJQUFJQSxZQUFZLEVBQUU7TUFDakI5TSxLQUFLLENBQUM4TSxZQUFZLEdBQUcsSUFBSTtNQUN6QjlNLEtBQUssQ0FBQytNLGFBQWEsR0FBRyxRQUFRO0lBQy9CO0lBQ0EsSUFBSUYsa0JBQWtCLEVBQUU7TUFDdkIsTUFBTUcsb0JBQW9CLEdBQUdDLG1DQUFtQyxDQUFDak4sS0FBSyxDQUFDa04sY0FBYyxFQUFFakwsYUFBYSxFQUFFOUIsYUFBYSxDQUFDO01BQ3BILElBQUk2TSxvQkFBb0IsQ0FBQ0csZ0NBQWdDLElBQUlILG9CQUFvQixDQUFDSSxzQkFBc0IsQ0FBQ25ELE1BQU0sRUFBRTtRQUNoSGpLLEtBQUssQ0FBQzhNLFlBQVksR0FBRyxJQUFJO1FBQ3pCOU0sS0FBSyxDQUFDK00sYUFBYSxHQUFHRCxZQUFZLEdBQUcsd0JBQXdCLEdBQUcsZUFBZTtRQUMvRTlNLEtBQUssQ0FBQ29OLHNCQUFzQixHQUMzQkosb0JBQW9CLENBQUNHLGdDQUFnQyxLQUFLLElBQUksR0FBR0gsb0JBQW9CLENBQUNJLHNCQUFzQixHQUFHOUksU0FBUztNQUMxSDtJQUNEO0VBQ0Q7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBUytJLDZDQUE2Q0EsQ0FBQ3JOLEtBQTJCLEVBQUVpQyxhQUE0QyxFQUFXO0lBQzFJLE9BQU8sQ0FBQyxDQUFDcUwsNkJBQTZCLENBQUNyTCxhQUFhLENBQUMsSUFBS2pDLEtBQUssQ0FBQ2tOLGNBQWMsS0FBSzVJLFNBQVMsSUFBSXRFLEtBQUssQ0FBQ2tOLGNBQWMsS0FBSyxFQUFHO0VBQzdIO0VBRU8sU0FBU3pKLGdDQUFnQ0EsQ0FBQ3pELEtBQTJCLEVBQW9DO0lBQy9HLElBQUkwQyxnQkFBZ0I7SUFDcEIsTUFBTWMsb0JBQW9CLEdBQUd4RCxLQUFLLENBQUN3RCxvQkFBb0I7SUFDdkQsTUFBTStKLGtCQUFrQixHQUFHdk4sS0FBSyxDQUFDb0IsYUFBYSxDQUFDb0osYUFBYTtJQUM1RCxJQUFJK0Msa0JBQWtCLEtBQUssT0FBTyxFQUFFO01BQ25DN0ssZ0JBQWdCLEdBQUcxQyxLQUFLLENBQUNpQyxhQUFhLENBQUNTLGdCQUFnQjtJQUN4RDtJQUNBLE1BQU04SyxZQUFZLEdBQUd4TixLQUFLLENBQUNpQyxhQUFhLENBQUM4QixZQUFZLEVBQUUwSixJQUFJO0lBQzNELE1BQU1DLG1CQUFtQixHQUFHbEMsV0FBVyxDQUFDLEdBQUdnQyxZQUFZLDJDQUEyQyxDQUFDO0lBQ25HLE1BQU1HLHlCQUF5QixHQUFHbkMsV0FBVyxDQUFDLEdBQUdnQyxZQUFZLGlEQUFpRCxDQUFDO0lBQy9HLE1BQU1JLGNBQWMsR0FBR3pCLFlBQVksQ0FDbEMsQ0FDQ3VCLG1CQUFtQixFQUNuQkMseUJBQXlCLEVBQ3pCbkMsV0FBVyxDQUFDLHNCQUFzQixFQUFFLFVBQVUsQ0FBQyxFQUMvQ0EsV0FBVyxDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUMsRUFDdkNBLFdBQVcsQ0FBQyxHQUFHZ0MsWUFBWSxzQkFBc0IsQ0FBQyxFQUNsRGhLLG9CQUFvQixFQUNwQnhELEtBQUssQ0FBQ29CLGFBQWEsQ0FBQ3FKLFdBQVcsQ0FDL0IsRUFDRG9ELHdCQUF3QixDQUFDQyxpQkFBaUIsRUFDMUNwTCxnQkFDRCxDQUFDO0lBRUQsT0FBT2tDLGlCQUFpQixDQUFDZ0osY0FBYyxDQUFDO0VBQ3pDO0VBQUMxSCxRQUFBLENBQUF6QyxnQ0FBQSxHQUFBQSxnQ0FBQTtFQUVNLFNBQVM3QixrQkFBa0JBLENBQUNtTSxTQUFzRCxFQUErQztJQUN2STtJQUNBLE1BQU1DLGFBQWEsR0FBRztNQUFFLEdBQUdEO0lBQVUsQ0FBQztJQUN0QyxJQUFLQSxTQUFTLEVBQTJCRSxJQUFJLEtBQUssc0NBQXNDLEVBQUU7TUFDekZELGFBQWEsQ0FBQ0UsS0FBSyxHQUFHSCxTQUFTLENBQUNHLEtBQUssOENBQW1DO0lBQ3pFO0lBQ0EsT0FBT0YsYUFBYTtFQUNyQjtFQUFDOUgsUUFBQSxDQUFBdEUsa0JBQUEsR0FBQUEsa0JBQUE7RUFFTSxTQUFTdU0saUJBQWlCQSxDQUFDL04sWUFBc0MsRUFBRXlILFFBQWtCLEVBQXNCO0lBQ2pILE1BQU11RyxRQUFRLEdBQUdoTyxZQUFZLEVBQUVpTyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7SUFDekQsT0FBT3hHLFFBQVEsRUFBRXJELFdBQVcsRUFBRThKLFFBQVEsRUFBRUMsV0FBVyxHQUNoREgsUUFBUSxFQUFFSSxNQUFNLEVBQUVDLEtBQUssRUFBRUMsUUFBUSxFQUFFQyxjQUFjLElBQUksQ0FBQyxHQUN0RFAsUUFBUSxFQUFFSSxNQUFNLEVBQUVDLEtBQUssRUFBRUcsYUFBYSxFQUFFRCxjQUFjLElBQUksQ0FBQztFQUMvRDtFQUFDekksUUFBQSxDQUFBaUksaUJBQUEsR0FBQUEsaUJBQUE7RUFFTSxTQUFTaEwsaUJBQWlCQSxDQUNoQ25ELEtBQTJCLEVBQzNCK04sU0FBc0QsRUFDdEQ5TCxhQUEwRixFQUMxRjlCLGFBQXdCLEVBQ3hCQyxZQUEwQixFQUNIO0lBQ3ZCLE1BQU1JLFdBQWlDLEdBQUdSLEtBQUs7SUFDL0MsTUFBTTZILFFBQWtCLEdBQUc1RixhQUFhLENBQUM4QixZQUF3QjtJQUNqRSxJQUFJLENBQUM5QixhQUFhLENBQUM4QixZQUFZLEVBQUU7TUFDaEN2RCxXQUFXLENBQUNxRCxZQUFZLEdBQUcsTUFBTTtNQUNqQyxPQUFPckQsV0FBVztJQUNuQjtJQUVBQSxXQUFXLENBQUNxTyxpQkFBaUIsR0FDNUJoSCxRQUFRLENBQUNyRCxXQUFXLEVBQUU4SixRQUFRLEVBQUVRLElBQUksS0FBS3hLLFNBQVMsSUFBSXVELFFBQVEsQ0FBQ3JELFdBQVcsRUFBRThKLFFBQVEsRUFBRUMsV0FBVyxLQUFLakssU0FBUztJQUNoSDlELFdBQVcsQ0FBQ3VPLGdDQUFnQyxHQUFHM0ksWUFBWSxDQUFDMkksZ0NBQWdDLENBQzNGOU0sYUFDRCxDQUFDO0lBQ0R6QixXQUFXLENBQUN3TyxpQkFBaUIsR0FBR3BLLGlCQUFpQixDQUNoRHVILFlBQVksQ0FDWCxDQUNDWCxXQUFXLENBQUMzQixrQ0FBa0MsQ0FBQzVILGFBQWEsQ0FBQyxDQUFDLEVBQzlELElBQUk0RixRQUFRLENBQUNsRixrQkFBa0IsRUFBRSxFQUNqQ25DLFdBQVcsQ0FBQ1ksYUFBYSxDQUFDcUosV0FBVyxDQUNyQyxFQUNELDREQUNELENBQ0QsQ0FBQztJQUVELElBQUk1QyxRQUFRLENBQUNyRCxXQUFXLEVBQUVDLEVBQUUsRUFBRXdLLE9BQU8sRUFBRTtNQUN0Q3pPLFdBQVcsQ0FBQ3FELFlBQVksR0FBRyxNQUFNO01BQ2pDLE9BQU9yRCxXQUFXO0lBQ25CO0lBQ0EsSUFBSXFILFFBQVEsQ0FBQ3JELFdBQVcsRUFBRUMsRUFBRSxFQUFFeUssVUFBVSxFQUFFO01BQ3pDMU8sV0FBVyxDQUFDcUQsWUFBWSxHQUFHLFFBQVE7TUFDbkMsT0FBT3JELFdBQVc7SUFDbkI7SUFDQSxJQUFJcUgsUUFBUSxDQUFDckQsV0FBVyxFQUFFQyxFQUFFLEVBQUUwSyxTQUFTLEVBQUU7TUFDeEMzTyxXQUFXLENBQUNxRCxZQUFZLEdBQUcsTUFBTTtNQUNqQyxPQUFPckQsV0FBVztJQUNuQjtJQUNBLElBQUlxSCxRQUFRLENBQUNyRCxXQUFXLEVBQUVxSCxNQUFNLEVBQUV1RCxNQUFNLEVBQUU7TUFDekM1TyxXQUFXLENBQUNxRCxZQUFZLEdBQUcsUUFBUTtNQUNuQyxPQUFPckQsV0FBVztJQUNuQjtJQUNBO0lBQ0E7SUFDQSxJQUFJcUgsUUFBUSxDQUFDbUIsSUFBSSxLQUFLLFlBQVksRUFBRTtNQUNuQ3hJLFdBQVcsQ0FBQ3FELFlBQVksR0FBRyxNQUFNO01BQ2pDLE9BQU9yRCxXQUFXO0lBQ25CO0lBQ0EsSUFBSUEsV0FBVyxDQUFDWSxhQUFhLENBQUNpTyxnQkFBZ0IsSUFBSXhILFFBQVEsQ0FBQ21CLElBQUksS0FBSyxhQUFhLEVBQUU7TUFDbEZ4SSxXQUFXLENBQUNxRCxZQUFZLEdBQUcsbUJBQW1CO01BQzlDLE9BQU9yRCxXQUFXO0lBQ25CO0lBQ0E4TyxtQkFBbUIsQ0FBQ3JOLGFBQWEsRUFBbUN6QixXQUFXLENBQUM7SUFDaEYsUUFBUXVOLFNBQVMsQ0FBQ0csS0FBSztNQUN0QjtRQUNDMU4sV0FBVyxDQUFDcUQsWUFBWSxHQUFHLFdBQVc7UUFDdEMsT0FBT3JELFdBQVc7TUFDbkI7UUFDQyxJQUFLdU4sU0FBUyxDQUF1Q3dCLE1BQU0sRUFBRXJHLE9BQU8sRUFBRWdGLEtBQUssK0NBQW9DLEVBQUU7VUFDaEgxTixXQUFXLENBQUNxRCxZQUFZLEdBQUcsV0FBVztVQUN0QyxPQUFPckQsV0FBVztRQUNuQixDQUFDLE1BQU0sSUFDTHVOLFNBQVMsQ0FBdUN3QixNQUFNLEVBQUVyRyxPQUFPLEVBQUVnRixLQUFLLEtBQ3ZFLG1EQUFtRCxFQUNsRDtVQUNEMU4sV0FBVyxDQUFDcUQsWUFBWSxHQUFHLFNBQVM7VUFDcEMsT0FBT3JELFdBQVc7UUFDbkI7UUFDQTtNQUNEO01BQ0E7UUFDQ0EsV0FBVyxDQUFDcUQsWUFBWSxHQUFHLFFBQVE7UUFDbkMsT0FBT3JELFdBQVc7TUFDbkI7TUFDQTtNQUNBO1FBQ0NBLFdBQVcsQ0FBQ3FELFlBQVksR0FBRyxNQUFNO1FBQ2pDLE9BQU9yRCxXQUFXO0lBQ3BCO0lBQ0EsTUFBTXNNLFlBQVksR0FBRzBDLHFDQUFxQyxDQUFDdk4sYUFBYSxFQUFFNEYsUUFBUSxDQUFDO0lBQ25GLE1BQU1nRixrQkFBa0IsR0FBR1EsNkNBQTZDLENBQUM3TSxXQUFXLEVBQUV5QixhQUE4QyxDQUFDO0lBRXJJLElBQUl3TixhQUFhLENBQUM1SCxRQUFRLEVBQUU1RixhQUFhLENBQUMsSUFBSXpCLFdBQVcsQ0FBQ1ksYUFBYSxDQUFDc08sZ0JBQWdCLEVBQUU7TUFDekY5Qyw4QkFBOEIsQ0FDN0JwTSxXQUFXLEVBQ1hMLGFBQWEsRUFDYjhCLGFBQWEsRUFDYjRLLGtCQUFrQixFQUNsQkMsWUFDRCxDQUFDO01BQ0Q2QyxpQ0FBaUMsQ0FBQ25QLFdBQVcsRUFBRXlCLGFBQThDLENBQUM7TUFDOUZ6QixXQUFXLENBQUNvUCxrQkFBa0IsR0FDNUIzTixhQUFhLENBQUM0TixlQUFlLEVBQW9EOUwsWUFBWSxFQUFFK0wsS0FBSyxLQUNwRyxvQkFBb0IsSUFBSSxDQUFDdFAsV0FBVyxDQUFDWSxhQUFhLENBQUMyTyxvQ0FBb0M7TUFDekZ2UCxXQUFXLENBQUN3UCwrQkFBK0IsR0FBSS9OLGFBQWEsQ0FBQzhCLFlBQVksQ0FBYzBKLElBQUk7TUFDM0ZqTixXQUFXLENBQUNxRCxZQUFZLEdBQ3ZCckQsV0FBVyxDQUFDWSxhQUFhLENBQUNzTyxnQkFBZ0IsS0FBSyxrQkFBa0IsR0FBRyxrQkFBa0IsR0FBRyxrQkFBa0I7TUFDNUcsT0FBT2xQLFdBQVc7SUFDbkI7SUFDQSxJQUFJdU4sU0FBUyxDQUFDa0MsV0FBVyxFQUFFO01BQzFCckQsOEJBQThCLENBQzdCcE0sV0FBVyxFQUNYTCxhQUFhLEVBQ2I4QixhQUFhLEVBQ2I0SyxrQkFBa0IsRUFDbEJDLFlBQ0QsQ0FBQztNQUNEdE0sV0FBVyxDQUFDcUQsWUFBWSxHQUFHLGNBQWM7TUFDekMsT0FBT3JELFdBQVc7SUFDbkI7SUFDQSxJQUNDLENBQUNxSCxRQUFRLENBQUNyRCxXQUFXLEVBQUU4SixRQUFRLEVBQUVDLFdBQVcsSUFBSTFHLFFBQVEsQ0FBQ3JELFdBQVcsRUFBRThKLFFBQVEsRUFBRVEsSUFBSSxLQUNwRnpLLE1BQU0sQ0FBQzdELFdBQVcsQ0FBQ1ksYUFBYSxDQUFDOE8sdUJBQXVCLENBQUMsS0FBSyxNQUFNLElBQ3BFMVAsV0FBVyxDQUFDWSxhQUFhLENBQUN3SCxrQkFBa0IsS0FBSyxRQUFRLEVBQ3hEO01BQ0QsTUFBTStGLGNBQWMsR0FBR3dCLG9CQUFvQixDQUFDaEMsaUJBQWlCLENBQUMvTixZQUFZLEVBQUV5SCxRQUFRLENBQUM7TUFDckZySCxXQUFXLENBQUM0UCw4QkFBOEIsR0FBRzVQLFdBQVcsQ0FBQ0ksS0FBSyxHQUMzREosV0FBVyxDQUFDSSxLQUFLLEdBQ2pCeVAsZUFBZSxDQUNmcE8sYUFBYSxFQUNiekIsV0FBVyxDQUFDWSxhQUFhLEVBQ3pCLEtBQUssRUFDTCxJQUFJLEVBQ0prRCxTQUFTLEVBQ1QsSUFBSSxFQUNKLEtBQUssRUFDTHFLLGNBQWMsRUFDZCxJQUNBLENBQUM7TUFFSm5PLFdBQVcsQ0FBQzhQLHFCQUFxQixHQUFHMUwsaUJBQWlCLENBQ3BEd0IsWUFBWSxDQUFDbUssMkJBQTJCLENBQ3ZDdE8sYUFBYSxFQUNiLElBQUksRUFDSixDQUFDLENBQUNqQyxLQUFLLENBQUNvQixhQUFhLENBQUNFLG9CQUN2QixDQUNELENBQUM7TUFDRGQsV0FBVyxDQUFDcUQsWUFBWSxHQUFHLGlDQUFpQztNQUU1RCxPQUFPckQsV0FBVztJQUNuQjtJQUNBLElBQUlxSCxRQUFRLENBQUNyRCxXQUFXLEVBQUVnTSxhQUFhLEVBQUVDLGNBQWMsSUFBSTVJLFFBQVEsQ0FBQ3JELFdBQVcsRUFBRWdNLGFBQWEsRUFBRUUsYUFBYSxFQUFFO01BQzlHbFEsV0FBVyxDQUFDcUQsWUFBWSxHQUFHLE1BQU07TUFDakMsT0FBT3JELFdBQVc7SUFDbkI7SUFDQSxJQUFJcUgsUUFBUSxDQUFDckQsV0FBVyxFQUFFQyxFQUFFLEVBQUVrTSxhQUFhLEVBQUU7TUFDNUNuUSxXQUFXLENBQUNxRCxZQUFZLEdBQUcsZ0JBQWdCO01BQzNDLE9BQU9yRCxXQUFXO0lBQ25CO0lBRUEsSUFBSXVOLFNBQVMsQ0FBQ0csS0FBSyxrREFBdUMsRUFBRTtNQUMzRDFOLFdBQVcsQ0FBQ3FELFlBQVksR0FBRyxNQUFNO01BQ2pDLE9BQU9yRCxXQUFXO0lBQ25CO0lBRUFBLFdBQVcsQ0FBQ3FELFlBQVksR0FBRyxNQUFNO0lBQ2pDK0ksOEJBQThCLENBQzdCcE0sV0FBVyxFQUNYTCxhQUFhLEVBQ2I4QixhQUFhLEVBQ2I0SyxrQkFBa0IsRUFDbEJDLFlBQ0QsQ0FBQztJQUNELElBQUl0TSxXQUFXLENBQUNzTSxZQUFZLEVBQUU7TUFDN0J0TSxXQUFXLENBQUNxRCxZQUFZLEdBQUcsbUJBQW1CO0lBQy9DO0lBQ0EsT0FBT3JELFdBQVc7RUFDbkI7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUpBMEYsUUFBQSxDQUFBL0MsaUJBQUEsR0FBQUEsaUJBQUE7RUFLQSxTQUFTbU0sbUJBQW1CQSxDQUFDck4sYUFBNEMsRUFBRWpDLEtBQTJCLEVBQVE7SUFDN0csSUFBSXlQLGFBQWEsQ0FBQ3hOLGFBQWEsQ0FBQzhCLFlBQVksRUFBYzlCLGFBQWEsQ0FBQyxFQUFFO01BQ3pFakMsS0FBSyxDQUFDNFEsc0JBQXNCLEdBQUdDLG1CQUFtQixDQUFDQywrQkFBK0IsQ0FBQzdPLGFBQWEsQ0FBQ1MsZ0JBQWdCLENBQUMsS0FBSzRCLFNBQVM7TUFDaEksSUFDRXJDLGFBQWEsQ0FBQzROLGVBQWUsRUFBRWtCLGVBQWUsRUFBNEJ2TSxXQUFXLEVBQUVxSCxNQUFNLEVBQUVtRixTQUFTLElBQ3hHL08sYUFBYSxDQUFDOE8sZUFBZSxFQUE0QnZNLFdBQVcsRUFBRXFILE1BQU0sRUFBRW1GLFNBQVMsSUFDeEZoUixLQUFLLENBQUNvQixhQUFhLEVBQUU2UCxpQkFBaUIsS0FBSyxJQUFJLEVBQzlDO1FBQ0Q7UUFDQTtRQUNBO1FBQ0E7UUFDQWpSLEtBQUssQ0FBQ2tSLHFCQUFxQixHQUFHQywrQkFBK0IsQ0FBQ2xQLGFBQWEsQ0FBQzhCLFlBQVksRUFBRTBKLElBQUksQ0FBVztRQUN6R3pOLEtBQUssQ0FBQ29SLGlCQUFpQixHQUFHLElBQUk7TUFDL0I7SUFDRDtFQUNEO0VBRU8sU0FBU2hPLGNBQWNBLENBQUNwRCxLQUEyQixFQUFFSSxZQUEyQixFQUF3QjtJQUM5RyxNQUFNSSxXQUFXLEdBQUdSLEtBQUs7SUFDekJxUixzQkFBc0IsQ0FBQzdRLFdBQVcsRUFBRUEsV0FBVyxDQUFDbUIsaUJBQWlCLEVBQUVuQixXQUFXLENBQUN5QixhQUFhLENBQUM7SUFDN0Z6QixXQUFXLENBQUNtSixhQUFhLEdBQUdKLG9CQUFvQixDQUFDL0ksV0FBVyxFQUFFSixZQUFZLENBQUM7SUFDM0UsT0FBT0ksV0FBVztFQUNuQjtFQUFDMEYsUUFBQSxDQUFBOUMsY0FBQSxHQUFBQSxjQUFBO0VBRU0sU0FBU3VNLGlDQUFpQ0EsQ0FDaEQzUCxLQUEyQixFQUMzQnNMLDJCQUEwRCxFQUNuRDtJQUNQLE1BQU1nRyxhQUFhLEdBQUd0UixLQUFLLENBQUNvQixhQUFhLEVBQUVzTyxnQkFBZ0I7SUFDM0QsTUFBTWpGLFdBQVcsR0FBR3pLLEtBQUssQ0FBQ29CLGFBQWEsQ0FBQ3FKLFdBQVc7SUFDbkR6SyxLQUFLLENBQUN1UixlQUFlLEdBQUdDLHlCQUF5QixDQUNoRGxHLDJCQUEyQixFQUMzQm1HLHdCQUF3QixFQUN4QjtNQUFFaEgsV0FBVztNQUFFaUgsb0JBQW9CLEVBQUUxUixLQUFLLENBQUNvQixhQUFhLENBQUNzTyxnQkFBZ0IsS0FBSztJQUFtQixDQUFDLEVBQ2xHcEwsU0FBUyxFQUNUQSxTQUNELENBQUM7SUFDRHRFLEtBQUssQ0FBQzJSLGNBQWMsR0FDbkJMLGFBQWEsS0FBSyxrQkFBa0IsR0FBR2xHLHVCQUF1QixDQUFDcEwsS0FBSyxDQUFDb0IsYUFBYSxFQUFFa0ssMkJBQTJCLENBQUMsR0FBR2hILFNBQVM7RUFDOUg7RUFBQzRCLFFBQUEsQ0FBQXlKLGlDQUFBLEdBQUFBLGlDQUFBO0VBRU0sU0FBUzFNLGtCQUFrQkEsQ0FDakNqRCxLQUEyQixFQUMzQmlDLGFBQTRDLEVBQzVDaEMsb0JBQStDLEVBQy9DQyxhQUF3QixFQUNqQjtJQUNQLE1BQU0wUixhQUFhLEdBQUd0RixZQUFZLENBQUNyTSxvQkFBb0IsRUFBRSxDQUFDRCxLQUFLLENBQUMwSCxlQUFlLEdBQUcxSCxLQUFLLENBQUMwSCxlQUFlLEdBQUcxSCxLQUFLLENBQUNNLFFBQVEsRUFBRTRILE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFFcEksSUFBSSxDQUFDbEksS0FBSyxDQUFDb0IsYUFBYSxDQUFDcUosV0FBVyxFQUFFO01BQ3JDekssS0FBSyxDQUFDb0IsYUFBYSxDQUFDcUosV0FBVyxHQUFHckUsWUFBWSxDQUFDeUwsY0FBYyxDQUFDNVAsYUFBYSxDQUFDO0lBQzdFO0lBQ0EsSUFBSWpDLEtBQUssQ0FBQ29CLGFBQWEsQ0FBQ3FKLFdBQVcsS0FBSyxhQUFhLEVBQUU7TUFDdER6SyxLQUFLLENBQUNvUSw4QkFBOEIsR0FBR3BRLEtBQUssQ0FBQ1ksS0FBSyxHQUMvQ1osS0FBSyxDQUFDWSxLQUFLLEdBQ1h5UCxlQUFlLENBQUNwTyxhQUFhLEVBQUVqQyxLQUFLLENBQUNvQixhQUFhLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRWtELFNBQVMsRUFBRSxJQUFJLENBQUM7SUFDcEY7SUFDQXRFLEtBQUssQ0FBQ29CLGFBQWEsQ0FBQ3NKLGFBQWEsR0FDL0JrSCxhQUFhLENBQW1DbEgsYUFBYSxJQUM3RGtILGFBQWEsQ0FBQ3hRLGFBQWEsSUFBSXdRLGFBQWEsQ0FBQ3hRLGFBQWEsQ0FBQ3NKLGFBQWMsSUFDMUUxSyxLQUFLLENBQUNvQixhQUFhLENBQUNzSixhQUFhLElBQ2pDLENBQUM7SUFDRjFLLEtBQUssQ0FBQ29CLGFBQWEsQ0FBQ3VKLFlBQVksR0FDOUJpSCxhQUFhLENBQW1DakgsWUFBWSxJQUM1RGlILGFBQWEsQ0FBQ3hRLGFBQWEsSUFBSXdRLGFBQWEsQ0FBQ3hRLGFBQWEsQ0FBQ3VKLFlBQWEsSUFDekUzSyxLQUFLLENBQUNvQixhQUFhLENBQUN1SixZQUFZOztJQUVqQztJQUNBLElBQUl6SyxhQUFhLEVBQUVxQixXQUFXLENBQUMsNEJBQTRCLENBQUMsRUFBRTtNQUM3RHZCLEtBQUssQ0FBQ29CLGFBQWEsQ0FBQzBRLHlCQUF5QixHQUFHQyxrQ0FBa0MsQ0FDakY5UCxhQUFhLENBQUM4QixZQUFZLEVBQzFCL0QsS0FBSyxDQUFDb0IsYUFDUCxDQUFDO01BQ0QsSUFBSXBCLEtBQUssQ0FBQ29CLGFBQWEsQ0FBQzBRLHlCQUF5QixFQUFFO1FBQ2xEO1FBQ0EsTUFBTUUsd0JBQXdCLEdBQUcsQ0FBQyxDQUFDL1AsYUFBYSxFQUFFUyxnQkFBZ0IsRUFBRThCLFdBQVcsRUFBRUMsRUFBRSxFQUFFd04sZUFBZTtRQUNwR2pTLEtBQUssQ0FBQ29CLGFBQWEsQ0FBQ3FKLFdBQVcsR0FBR3VILHdCQUF3QixHQUFHaFMsS0FBSyxDQUFDb0IsYUFBYSxDQUFDcUosV0FBVyxHQUFHLGtCQUFrQjtNQUNsSDtJQUNEO0VBQ0Q7RUFBQ3ZFLFFBQUEsQ0FBQWpELGtCQUFBLEdBQUFBLGtCQUFBO0VBRU0sU0FBU0ssZUFBZUEsQ0FBQ3RELEtBQTJCLEVBQW9DO0lBQzlGLElBQUlrUyxhQUFhO0lBQ2pCLE1BQU0zRSxrQkFBa0IsR0FBR3ZOLEtBQUssQ0FBQ29CLGFBQWEsRUFBRW9KLGFBQWEsR0FBR3hLLEtBQUssQ0FBQ29CLGFBQWEsRUFBRW9KLGFBQWEsR0FBRyxNQUFNO0lBQzNHLE1BQU0ySCxtQkFBbUIsR0FBRzNHLFdBQVcsQ0FBQzNCLGtDQUFrQyxDQUFDN0osS0FBSyxDQUFDaUMsYUFBYSxDQUFDLENBQW9DO0lBQ25JLE1BQU0rSixnQkFBZ0IsR0FBR0MsZ0JBQWdCLENBQUNqTSxLQUFLLENBQUNpQyxhQUFhLENBQUM7SUFDOUQsTUFBTW1RLFFBQVEsR0FBR2xHLDJCQUEyQixDQUFDbE0sS0FBSyxDQUFDaUMsYUFBYSxFQUFFOEIsWUFBWSxFQUFFUyxXQUFXLEVBQUVxSCxNQUFNLEVBQUVDLElBQUksRUFBRUUsZ0JBQWdCLENBQUM7SUFDNUgsTUFBTXdCLFlBQVksR0FBR3hOLEtBQUssQ0FBQ2lDLGFBQWEsQ0FBQzhCLFlBQVksRUFBRTBKLElBQUk7SUFDM0QsTUFBTUMsbUJBQW1CLEdBQUdsQyxXQUFXLENBQUMsR0FBR2dDLFlBQVksMkNBQTJDLENBQUM7SUFDbkcsTUFBTUcseUJBQXlCLEdBQUduQyxXQUFXLENBQUMsR0FBR2dDLFlBQVksaURBQWlELENBQUM7SUFDL0csSUFBSUQsa0JBQWtCLEtBQUssT0FBTyxFQUFFO01BQ25DMkUsYUFBYSxHQUFHL0YsWUFBWSxDQUMzQixDQUNDdUIsbUJBQW1CLEVBQ25CQyx5QkFBeUIsRUFDekJuQyxXQUFXLENBQUMsc0JBQXNCLEVBQUUsVUFBVSxDQUFDLEVBQy9DQSxXQUFXLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxFQUNoQ3hMLEtBQUssQ0FBQytCLGNBQWMsRUFDcEJvUSxtQkFBbUIsRUFDbkJDLFFBQVEsQ0FDUixFQUNEdkUsd0JBQXdCLENBQUN3RSxnQkFBZ0IsRUFDekNyUyxLQUFLLENBQUNpQyxhQUFhLENBQUNTLGdCQUNyQixDQUFDO0lBQ0YsQ0FBQyxNQUFNO01BQ053UCxhQUFhLEdBQUcvRixZQUFZLENBQzNCLENBQ0N1QixtQkFBbUIsRUFDbkJDLHlCQUF5QixFQUN6Qm5DLFdBQVcsQ0FBQyxzQkFBc0IsRUFBRSxVQUFVLENBQUMsRUFDL0NBLFdBQVcsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEVBQ2hDeEwsS0FBSyxDQUFDK0IsY0FBYyxFQUNwQm9RLG1CQUFtQixFQUNuQkMsUUFBUSxDQUNSLEVBQ0R2RSx3QkFBd0IsQ0FBQ3dFLGdCQUMxQixDQUFDO0lBQ0Y7SUFFQXJTLEtBQUssQ0FBQ3FELFVBQVUsR0FBR3VCLGlCQUFpQixDQUFDc04sYUFBYSxDQUFDO0lBQ25ELE9BQU9sUyxLQUFLLENBQUNxRCxVQUFVO0VBQ3hCO0VBQUM2QyxRQUFBLENBQUE1QyxlQUFBLEdBQUFBLGVBQUE7RUFFTSxTQUFTekIsc0JBQXNCQSxDQUFDN0IsS0FBMkIsRUFBUTtJQUN6RTtJQUNBO0lBQ0EsTUFBTXNMLDJCQUEyQixHQUFHOUQsa0JBQWtCLENBQUNHLDJCQUEyQixDQUNqRjNILEtBQUssQ0FBQzBILGVBQWUsR0FBRzFILEtBQUssQ0FBQzBILGVBQWUsR0FBRzFILEtBQUssQ0FBQ00sUUFBUSxFQUM5RE4sS0FBSyxDQUFDTyxXQUNQLENBQUM7SUFFRFAsS0FBSyxDQUFDZSxPQUFPLEtBQUt1UixvQkFBb0IsQ0FBQ2hILDJCQUEyQixFQUFFdEwsS0FBSyxDQUFDb0IsYUFBYSxDQUFDO0lBQ3hGcEIsS0FBSyxDQUFDdVMsY0FBYyxHQUFHdlMsS0FBSyxDQUFDb0IsYUFBYSxFQUFFa0osU0FBUyxLQUFLLFdBQVcsR0FBR3RLLEtBQUssQ0FBQ2UsT0FBTyxHQUFHdUQsU0FBUztFQUNsRztFQUFDNEIsUUFBQSxDQUFBckUsc0JBQUEsR0FBQUEsc0JBQUE7RUFFRCxTQUFTc0ksWUFBWUEsQ0FBQ3FJLE9BQWUsRUFBVTtJQUM5QyxPQUFPLEdBQUdBLE9BQU8sVUFBVTtFQUM1Qjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVM5Tyw2QkFBNkJBLENBQUMxRCxLQUEyQixFQUFRO0lBQ3pFLElBQUlBLEtBQUssQ0FBQzZELFlBQVksS0FBSyxNQUFNLEVBQUU7TUFDbEM3RCxLQUFLLENBQUN5Uyx3QkFBd0IsR0FBRzVJLGtDQUFrQyxDQUFDN0osS0FBSyxDQUFDaUMsYUFBYSxDQUFDLElBQUksRUFBRTtNQUM5RixNQUFNeVEsa0JBQWtCLEdBQUcxUyxLQUFLLENBQUM2SCxRQUFRLENBQUNyRCxXQUFXLENBQUNtTyxJQUFJLEVBQUVDLGtCQUFrQixFQUFFQyxRQUFRO01BQ3hGLElBQUlDLDBCQUEwQixDQUFDSixrQkFBa0IsQ0FBQyxFQUFFO1FBQ25ELE1BQU1LLHFCQUFxQixHQUFHQyxvQkFBb0IsQ0FBQ2hULEtBQUssQ0FBQ2lDLGFBQWEsRUFBRXlRLGtCQUFrQixDQUFDTyxJQUFJLENBQUM7UUFDaEdqVCxLQUFLLENBQUNrVCxzQkFBc0IsR0FBR3JKLGtDQUFrQyxDQUFDa0oscUJBQXFCLENBQUMsSUFBSSxFQUFFO01BQy9GO0lBQ0Q7RUFDRDs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU3BQLDJCQUEyQkEsQ0FBQzNELEtBQTJCLEVBQUVFLGFBQXdCLEVBQVE7SUFDakcsSUFBSUYsS0FBSyxDQUFDNkQsWUFBWSxLQUFLLE1BQU0sSUFBSTdELEtBQUssQ0FBQzZELFlBQVksS0FBSyxRQUFRLEVBQUU7TUFDckU3RCxLQUFLLENBQUNtVCxpQkFBaUIsR0FBRzdPLFNBQVM7TUFDbkM7SUFDRDtJQUNBdEUsS0FBSyxDQUFDbVQsaUJBQWlCLEdBQ3RCblQsS0FBSyxDQUFDbVQsaUJBQWlCLEtBQUssSUFBSSxJQUFJalQsYUFBYSxFQUFFcUIsV0FBVyxDQUFDLHNCQUFzQixDQUFDLEtBQUssSUFBSSxHQUFHLElBQUksR0FBRytDLFNBQVM7SUFDbkgsSUFBSXRFLEtBQUssQ0FBQ21ULGlCQUFpQixJQUFJblQsS0FBSyxDQUFDc0gsZ0JBQWdCLEtBQUssU0FBUyxFQUFFO01BQ3BFLE1BQU1uQiwwQkFBMEIsR0FBR0MsWUFBWSxDQUFDQyw2QkFBNkIsQ0FDNUVyRyxLQUFLLENBQUNzRyx1QkFBdUIsRUFDN0J0RyxLQUFLLENBQUMyQixpQkFBaUIsRUFDdkIzQixLQUFLLENBQUNpQyxhQUNQLENBQUM7TUFFRGpDLEtBQUssQ0FBQ29ULGFBQWEsR0FBR0Msb0JBQW9CLENBQ3pDbE4sMEJBQTBCLEVBQzFCLGFBQWEsRUFDWm1OLElBQUksSUFBSztRQUNULElBQUlBLElBQUksQ0FBQ0wsSUFBSSxLQUFLLFlBQVksSUFBSUssSUFBSSxDQUFDQyxTQUFTLEtBQUssSUFBSSxFQUFFO1VBQzFELE9BQU9uTSxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ3RCO1FBQ0EsT0FBT2tNLElBQUk7TUFDWixDQUFDLEVBQ0QsSUFDRCxDQUF1QjtJQUN4QjtFQUNEO0VBRUEsTUFBTW5ELG9CQUFvQixHQUFHO0lBQzVCaEMsaUJBQWlCO0lBQ2pCcE8sVUFBVTtJQUNWdUMsaUJBQWlCO0lBQ2pCYSxpQkFBaUI7SUFDakJ3TSxpQ0FBaUM7SUFDakNyTTtFQUNELENBQUM7RUFBQyxPQUNhNk0sb0JBQW9CO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -74,8 +74,10 @@ import type Context from "sap/ui/model/Context";
74
74
  import type JSONModel from "sap/ui/model/json/JSONModel";
75
75
  import type ODataMetaModel from "sap/ui/model/odata/v4/ODataMetaModel";
76
76
  import type { EventHandler } from "types/extension_types";
77
+ import type { MetaModelType } from "types/metamodel_types";
77
78
  import type Field from "../../Field";
78
79
  import type FieldFormatOptions from "../../field/FieldFormatOptions";
80
+ import FieldHelper from "../../field/FieldHelper";
79
81
  import type { DisplayStyle as DisplayStyleType, EditStyle as EditStyleType, FieldProperties } from "./FieldStyles";
80
82
 
81
83
  export type InputFieldBlockProperties = Omit<PropertiesOf<Field>, "readOnly" | "semanticObject"> & {
@@ -111,6 +113,7 @@ export type FieldBlockProperties = {
111
113
  ariaLabelledBy?: string[];
112
114
  hasUnitOrCurrency?: boolean;
113
115
  text?: BindingToolkitExpression<string> | CompiledBindingToolkitExpression;
116
+ label?: BindingToolkitExpression<string> | CompiledBindingToolkitExpression;
114
117
  emptyIndicatorMode?: string;
115
118
  editableExpression: string | CompiledBindingToolkitExpression;
116
119
  fieldGroupIds?: string[];
@@ -235,6 +238,9 @@ export function setUpField(
235
238
  setUpVisibleProperties(resultField);
236
239
  computeIDs(resultField);
237
240
  resultField.dataSourcePath = getTargetObjectPath(resultField.dataModelPath);
241
+ resultField.label = FieldHelper.computeLabelText(field as unknown as MetaModelType<DataFieldTypes>, {
242
+ context: resultField.metaPath
243
+ });
238
244
 
239
245
  /* EXTERNALID */
240
246
  computeExternalID(resultField);
@@ -749,6 +755,10 @@ export function setUpDisplayStyle(
749
755
  resultField.displayStyle = "File";
750
756
  return resultField;
751
757
  }
758
+ if (resultField.formatOptions.isFieldGroupItem && property.type === "Edm.Boolean") {
759
+ resultField.displayStyle = "CheckBoxGroupItem";
760
+ return resultField;
761
+ }
752
762
  setUpDraftIndicator(dataModelPath as DataModelObjectPath<Property>, resultField);
753
763
  switch (dataField.$Type as string) {
754
764
  case UIAnnotationTypes.DataPointType:
@@ -6,4 +6,4 @@ sap.ui.define([], function () {
6
6
  "use strict";
7
7
 
8
8
  }, false);
9
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGaWVsZFN0eWxlcy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBTdHJpY3RQcm9wZXJ0aWVzT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSBGaWVsZCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9GaWVsZFwiO1xuXG5leHBvcnQgdHlwZSBEaXNwbGF5U3R5bGUgPVxuXHR8IFwiVGV4dFwiXG5cdHwgXCJBdmF0YXJcIlxuXHR8IFwiRmlsZVwiXG5cdHwgXCJEYXRhUG9pbnRcIlxuXHR8IFwiQ29udGFjdFwiXG5cdHwgXCJCdXR0b25cIlxuXHR8IFwiTGlua1wiXG5cdHwgXCJPYmplY3RTdGF0dXNcIlxuXHR8IFwiQW1vdW50V2l0aEN1cnJlbmN5XCJcblx0fCBcIk9iamVjdElkZW50aWZpZXJcIlxuXHR8IFwiTGFiZWxTZW1hbnRpY0tleVwiXG5cdHwgXCJMaW5rV2l0aFF1aWNrVmlld1wiXG5cdHwgXCJFeHBhbmRhYmxlVGV4dFwiXG5cdHwgXCJJbnB1dE1hc2tcIlxuXHR8IFwiTnVtYmVyV2l0aFVuaXRPckN1cnJlbmN5QWxpZ25lZFwiXG5cdHwgXCJNYXNrZWRcIjtcblxuZXhwb3J0IHR5cGUgRWRpdFN0eWxlID1cblx0fCBcIklucHV0V2l0aFZhbHVlSGVscFwiXG5cdHwgXCJUZXh0QXJlYVwiXG5cdHwgXCJGaWxlXCJcblx0fCBcIkRhdGVQaWNrZXJcIlxuXHR8IFwiVGltZVBpY2tlclwiXG5cdHwgXCJEYXRlVGltZVBpY2tlclwiXG5cdHwgXCJDaGVja0JveFwiXG5cdHwgXCJJbnB1dFdpdGhVbml0XCJcblx0fCBcIklucHV0XCJcblx0fCBcIlJhdGluZ0luZGljYXRvclwiXG5cdHwgXCJJbnB1dE1hc2tcIlxuXHR8IFwiTWFza2VkXCI7XG5cbmV4cG9ydCB0eXBlIEZpZWxkUHJvcGVydGllcyA9IFN0cmljdFByb3BlcnRpZXNPZjxGaWVsZD47XG4iXSwibWFwcGluZ3MiOiIiLCJpZ25vcmVMaXN0IjpbXX0=
9
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGaWVsZFN0eWxlcy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBTdHJpY3RQcm9wZXJ0aWVzT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSBGaWVsZCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9GaWVsZFwiO1xuXG5leHBvcnQgdHlwZSBEaXNwbGF5U3R5bGUgPVxuXHR8IFwiVGV4dFwiXG5cdHwgXCJBdmF0YXJcIlxuXHR8IFwiRmlsZVwiXG5cdHwgXCJEYXRhUG9pbnRcIlxuXHR8IFwiQ29udGFjdFwiXG5cdHwgXCJCdXR0b25cIlxuXHR8IFwiTGlua1wiXG5cdHwgXCJPYmplY3RTdGF0dXNcIlxuXHR8IFwiQW1vdW50V2l0aEN1cnJlbmN5XCJcblx0fCBcIk9iamVjdElkZW50aWZpZXJcIlxuXHR8IFwiTGFiZWxTZW1hbnRpY0tleVwiXG5cdHwgXCJMaW5rV2l0aFF1aWNrVmlld1wiXG5cdHwgXCJFeHBhbmRhYmxlVGV4dFwiXG5cdHwgXCJJbnB1dE1hc2tcIlxuXHR8IFwiTnVtYmVyV2l0aFVuaXRPckN1cnJlbmN5QWxpZ25lZFwiXG5cdHwgXCJNYXNrZWRcIlxuXHR8IFwiQ2hlY2tCb3hHcm91cEl0ZW1cIjtcblxuZXhwb3J0IHR5cGUgRWRpdFN0eWxlID1cblx0fCBcIklucHV0V2l0aFZhbHVlSGVscFwiXG5cdHwgXCJUZXh0QXJlYVwiXG5cdHwgXCJGaWxlXCJcblx0fCBcIkRhdGVQaWNrZXJcIlxuXHR8IFwiVGltZVBpY2tlclwiXG5cdHwgXCJEYXRlVGltZVBpY2tlclwiXG5cdHwgXCJDaGVja0JveFwiXG5cdHwgXCJJbnB1dFdpdGhVbml0XCJcblx0fCBcIklucHV0XCJcblx0fCBcIlJhdGluZ0luZGljYXRvclwiXG5cdHwgXCJJbnB1dE1hc2tcIlxuXHR8IFwiTWFza2VkXCI7XG5cbmV4cG9ydCB0eXBlIEZpZWxkUHJvcGVydGllcyA9IFN0cmljdFByb3BlcnRpZXNPZjxGaWVsZD47XG4iXSwibWFwcGluZ3MiOiIiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -17,7 +17,8 @@ export type DisplayStyle =
17
17
  | "ExpandableText"
18
18
  | "InputMask"
19
19
  | "NumberWithUnitOrCurrencyAligned"
20
- | "Masked";
20
+ | "Masked"
21
+ | "CheckBoxGroupItem";
21
22
 
22
23
  export type EditStyle =
23
24
  | "InputWithValueHelp"