@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
@@ -497,6 +497,12 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
497
497
  return;
498
498
  }
499
499
 
500
+ // We wait for filter bar to be ready.
501
+ if (oFilterBar.isA("sap.fe.macros.controls.FilterBar")) {
502
+ // _setFilterValues could be called in case of adaptation filter bar, so we explicitly check for FE filter bar control.
503
+ await oFilterBar.whenInitialized();
504
+ }
505
+
500
506
  // common filter Operators need a value. Do nothing if this value is undefined
501
507
  // BCP: 2270135274
502
508
  if (args.length === 2 && (vValues === undefined || vValues === null || vValues === "") && sOperator && Object.keys(FilterOperator).includes(sOperator)) {
@@ -797,4 +803,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
797
803
  };
798
804
  return oFilterUtils;
799
805
  }, false);
800
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQcm9wZXJ0eUluZm9LZXlzIiwiQ09ORElUSU9OX1BBVEhfVE9fUFJPUEVSVFlfUEFUSF9SRUdFWCIsIm9GaWx0ZXJVdGlscyIsImdldEZpbHRlciIsInZJRmlsdGVyIiwiYUZpbHRlcnMiLCJnZXRGaWx0ZXJJbmZvIiwiZmlsdGVycyIsImxlbmd0aCIsIkZpbHRlciIsInVuZGVmaW5lZCIsImdldEZpbHRlckZpZWxkIiwicHJvcGVydHlQYXRoIiwiY29udmVydGVyQ29udGV4dCIsImVudGl0eVR5cGUiLCJGaWx0ZXJCYXJDb252ZXJ0ZXIiLCJidWlsZFByb3BlcnlJbmZvIiwicHJvcGVydHlJbmZvRmllbGQiLCJvUHJvcGVydHlJbmZvIiwiYVR5cGVDb25maWciLCJwcm9wZXJ0eUNvbnZlcnR5Q29udGV4dCIsImdldENvbnZlcnRlckNvbnRleHRGb3IiLCJhbm5vdGF0aW9uUGF0aCIsInByb3BlcnR5VGFyZ2V0T2JqZWN0IiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsInRhcmdldE9iamVjdCIsIm9UeXBlQ29uZmlnIiwiZmV0Y2hUeXBlQ29uZmlnIiwiZmV0Y2hQcm9wZXJ0eUluZm8iLCJrZXkiLCJhc3NpZ25EYXRhVHlwZVRvUHJvcGVydHlJbmZvIiwiY3JlYXRlQ29udmVydGVyQ29udGV4dCIsIm9GaWx0ZXJDb250cm9sIiwic0VudGl0eVR5cGVQYXRoIiwibWV0YU1vZGVsIiwiYXBwQ29tcG9uZW50Iiwic0ZpbHRlckVudGl0eVR5cGVQYXRoIiwiRGVsZWdhdGVVdGlsIiwiZ2V0Q3VzdG9tRGF0YSIsImNvbnRleHRQYXRoIiwib1ZpZXciLCJpc0EiLCJDb21tb25VdGlscyIsImdldFRhcmdldFZpZXciLCJvTWV0YU1vZGVsIiwiZ2V0TW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJvQXBwQ29tcG9uZW50IiwiZ2V0QXBwQ29tcG9uZW50Iiwib1Zpc3VhbGl6YXRpb25PYmplY3RQYXRoIiwiTWV0YU1vZGVsQ29udmVydGVyIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJtYW5pZmVzdFNldHRpbmdzIiwiZ2V0Vmlld0RhdGEiLCJDb252ZXJ0ZXJDb250ZXh0IiwiY3JlYXRlQ29udmVydGVyQ29udGV4dEZvck1hY3JvIiwic3RhcnRpbmdFbnRpdHlTZXQiLCJuYW1lIiwiZ2V0RGlhZ25vc3RpY3MiLCJtZXJnZSIsImNvbnRleHRMb2NhdGlvbiIsIk1hbmlmZXN0V3JhcHBlciIsImdldENvbnZlcnRlZEZpbHRlckZpZWxkcyIsImluY2x1ZGVIaWRkZW4iLCJvTW9kaWZpZXIiLCJsaW5lSXRlbVRlcm0iLCJfZ2V0RmlsdGVyTWV0YU1vZGVsIiwibHJUYWJsZXMiLCJfZ2V0RmllbGRzRm9yVGFibGUiLCJvQ29udmVydGVyQ29udGV4dCIsIl9nZXRTZWxlY3Rpb25GaWVsZHMiLCJnZXRCaW5kaW5nUGF0aEZvclBhcmFtZXRlcnMiLCJvSUZpbHRlciIsIm1Db25kaXRpb25zIiwiYUZpbHRlclByb3BlcnRpZXNNZXRhZGF0YSIsImFQYXJhbWV0ZXJzIiwiYVBhcmFtcyIsInNldFR5cGVDb25maWdUb1Byb3BlcnRpZXMiLCJzRmllbGRQYXRoIiwib0NvbmRpdGlvbkludGVybmFsIiwib1Byb3BlcnR5IiwiRmlsdGVyVXRpbCIsImdldFByb3BlcnR5QnlLZXkiLCJ0eXBlQ29uZmlnIiwiVHlwZU1hcCIsImdldFR5cGVDb25maWciLCJkYXRhVHlwZSIsImZvcm1hdE9wdGlvbnMiLCJjb25zdHJhaW50cyIsIm1JbnRlcm5hbFBhcmFtZXRlckNvbmRpdGlvbiIsIkNvbmRpdGlvbkNvbnZlcnRlciIsInRvVHlwZSIsImdldFR5cGVNYXAiLCJzRWRtVHlwZSIsIk9EQVRBX1RZUEVfTUFQUElORyIsImNsYXNzTmFtZSIsInB1c2giLCJlbmNvZGVVUklDb21wb25lbnQiLCJPRGF0YVV0aWxzIiwiZm9ybWF0TGl0ZXJhbCIsInZhbHVlcyIsImRhdGEiLCJzRW50aXR5U2V0UGF0aCIsInN1YnN0cmluZyIsInNQYXJhbWV0ZXJFbnRpdHlTZXQiLCJzbGljZSIsImxhc3RJbmRleE9mIiwic1RhcmdldE5hdmlnYXRpb24iLCJ0b1N0cmluZyIsImdldEVkaXRTdGF0ZUlzSGlkZURyYWZ0IiwiYklzSGlkZURyYWZ0IiwiJGVkaXRTdGF0ZSIsIm9Db25kaXRpb24iLCJmaW5kIiwiY29uZGl0aW9uIiwib3BlcmF0b3IiLCJpbmNsdWRlcyIsIm1Qcm9wZXJ0aWVzIiwibUZpbHRlckNvbmRpdGlvbnMiLCJhSWdub3JlUHJvcGVydGllcyIsImlnbm9yZWRQcm9wZXJ0aWVzIiwib1RhcmdldENvbnRyb2wiLCJ0YXJnZXRDb250cm9sIiwic1RhcmdldEVudGl0eVBhdGgiLCJtUGFyYW1ldGVycyIsInNTZWFyY2giLCJzQmluZGluZ1BhdGgiLCJhUHJvcGVydGllc01ldGFkYXRhIiwicHJvcGVydGllc01ldGFkYXRhIiwiRWxlbWVudCIsImdldEVsZW1lbnRCeUlkIiwiX2dldFNlYXJjaEZpZWxkIiwiX2dldEZpbHRlckNvbmRpdGlvbnMiLCJnZXRGaWx0ZXJQcm9wZXJ0eUluZm8iLCJnZXRQcm9wZXJ0eUluZm9TZXQiLCJfZ2V0RmlsdGVyUHJvcGVydGllc01ldGFkYXRhIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJzS2V5IiwiSlNPTiIsInBhcnNlIiwicGFyYW0iLCJyZXF1aXJlZFBhcmFtIiwibVBhcmFtZXRlcnNWYWx1ZSIsImFUYXJnZXRQcm9wZXJ0aWVzTWV0YWRhdGEiLCJnZXRDb250cm9sRGVsZWdhdGUiLCJmZXRjaFByb3BlcnRpZXNGb3JFbnRpdHkiLCJfYUlnbm9yZVByb3BlcnRpZXMiLCJfZ2V0SWdub3JlZFByb3BlcnRpZXMiLCJjb25jYXQiLCJnZXRFZGl0U3RhdGVBbmRGaWx0ZXIiLCJwYXJhbWV0ZXJzIiwic2VhcmNoIiwiYmluZGluZ1BhdGgiLCJfcmVmIiwib0ZpbHRlciIsImN1cnJTdGF0ZSIsImdldEN1cnJlbnRTdGF0ZSIsImhhc0VkaXRTdGF0ZUZpZWxkVmlzaWJsZSIsIml0ZW1zIiwic29tZSIsImNzIiwiaGFzRWRpdFN0YXRlTWV0YWRhdGEiLCJBcnJheSIsImlzQXJyYXkiLCJlZGl0U3RhdGVGaWx0ZXIiLCJoYXNPd25Qcm9wZXJ0eSIsImVkaXRTdGF0ZVZhbHVlIiwiRURJVFNUQVRFIiwiZ2V0RmlsdGVyRm9yRWRpdFN0YXRlIiwiaGFzRWRpdFN0YXRlRmlsdGVyIiwiaGFzRWRpdFN0YXRlRmlsdGVyUmVjdXJzaXZlbHkiLCJleGNoYW5nZUVkaXRTdGF0ZUZpbHRlclJlY3Vyc2l2ZWx5IiwiYW5kIiwiZmlsdGVyIiwiZ2V0UGF0aCIsImdldEZpbHRlcnMiLCJtYXAiLCJpc0FuZCIsImFQcm9wZXJ0aWVzIiwib0lGaWx0ZXJQcm9wZXJ0eSIsInR5cGVJbnN0YW5jZSIsImdldENvbnN0cmFpbnRzIiwiRnVuY3Rpb24iLCJwYXRoIiwiZ2V0Tm90QXBwbGljYWJsZUZpbHRlcnMiLCJvRmlsdGVyQmFyIiwib0NvbnRyb2wiLCJzVGFyZ2V0RW50aXR5VHlwZVBhdGgiLCJvRmlsdGVyQmFyRW50aXR5UGF0aCIsIm9GaWx0ZXJCYXJFbnRpdHlTZXRBbm5vdGF0aW9ucyIsImdldE9iamVjdCIsImFOb3RBcHBsaWNhYmxlIiwiZ2V0Q29uZGl0aW9ucyIsImJJc0ZpbHRlckJhckVudGl0eVR5cGUiLCJiSXNDaGFydCIsImJJc0FuYWx5dGljYWxUYWJsZSIsImdldFBhcmVudCIsImdldFRhYmxlRGVmaW5pdGlvbiIsImVuYWJsZUFuYWx5dGljcyIsImJJc1RyZWVUYWJsZSIsImNvbnRyb2wiLCJ0eXBlIiwiYkVuYWJsZVNlYXJjaCIsIkNvbW1vbkhlbHBlciIsInBhcnNlQ3VzdG9tRGF0YSIsImVuYWJsZVNlYXJjaCIsImVuYWJsZUJhc2ljU2VhcmNoIiwiYVRhcmdldFByb3BlcnRpZXMiLCJtVGFyZ2V0UHJvcGVydGllcyIsInJlZHVjZSIsIm1Qcm9wIiwib1Byb3AiLCJtQWdncmVnYXRlZFByb3BlcnRpZXMiLCJjaGFydEVudGl0eVR5cGVBbm5vdGF0aW9ucyIsIm9FbnRpdHlTZXRBbm5vdGF0aW9ucyIsIm1DaGFydEN1c3RvbUFnZ3JlZ2F0ZXMiLCJnZXRBbGxDdXN0b21BZ2dyZWdhdGVzIiwic0FnZ3JlZ2F0ZU5hbWUiLCJvQWdncmVnYXRlIiwic1Byb3BlcnR5IiwiYUNvbmRpdGlvblByb3BlcnR5IiwidHlwZUNoZWNrIiwiaXNDdXN0b21GaWx0ZXIiLCJyZXBsYWNlIiwiZ2V0U2VhcmNoIiwiX2dldFZhbHVlTGlzdEluZm8iLCJmaWx0ZXJCYXIiLCJwcm9wZXJ0eU5hbWUiLCJ2YWx1ZUxpc3RJbmZvcyIsInJlcXVlc3RWYWx1ZUxpc3RJbmZvIiwiY2F0Y2giLCJfcHJvcGVydHlJbmZvIiwiX2dldENvbmRpdGlvblZhbGlkYXRlZCIsInZhbHVlTGlzdEluZm8iLCJ2YWx1ZSIsIkNvbmRpdGlvblZhbGlkYXRlZCIsIk5vdFZhbGlkYXRlZCIsInZhbHVlTGlzdFByb3BlcnRpZXMiLCJQYXJhbWV0ZXJzIiwicGFyYW1ldGVyIiwidmFsdWVPZiIsIiRUeXBlIiwiTG9jYWxEYXRhUHJvcGVydHkiLCIkUHJvcGVydHlQYXRoIiwiVmFsdWVMaXN0UHJvcGVydHkiLCJ2YWx1ZUxpc3RQcm9wZXJ0eVBhdGgiLCJGaWx0ZXJPcGVyYXRvciIsIkVRIiwidmFsdWUxIiwibGlzdEJpbmRpbmciLCIkbW9kZWwiLCJiaW5kTGlzdCIsIkNvbGxlY3Rpb25QYXRoIiwiJHNlbGVjdCIsInZhbHVlRXhpc3RzIiwicmVxdWVzdENvbnRleHRzIiwiVmFsaWRhdGVkIiwiZXJyb3IiLCJMb2ciLCJfY2xlYXJGaWx0ZXJWYWx1ZSIsImNvbmRpdGlvblBhdGgiLCJvU3RhdGUiLCJTdGF0ZVV0aWwiLCJyZXRyaWV2ZUV4dGVybmFsU3RhdGUiLCJmaWx0ZXJlZCIsImFwcGx5RXh0ZXJuYWxTdGF0ZSIsInNldEZpbHRlclZhbHVlcyIsInNDb25kaXRpb25QYXRoIiwiX2xlbiIsImFyZ3VtZW50cyIsImFyZ3MiLCJfa2V5IiwiX3NldEZpbHRlclZhbHVlcyIsImFkZEZpbHRlclZhbHVlcyIsIl9sZW4yIiwiX2tleTIiLCJnZXRQcm9wZXJ0eVBhdGhGcm9tQ29uZGl0aW9uUGF0aCIsImdldEZpbHRlckJhckZvckFkYXB0YXRpb25Db250cm9sIiwicG90ZW50aWFsRmlsdGVyQmFyIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclByb3BlcnR5IiwiZW50aXR5VHlwZVBhdGgiLCJhcHBlbmQiLCJfbGVuMyIsIl9rZXkzIiwic09wZXJhdG9yIiwidlZhbHVlcyIsIndhcm5pbmciLCJTZW1hbnRpY0RhdGVPcGVyYXRvcnMiLCJnZXRTZW1hbnRpY0RhdGVPcGVyYXRpb25zIiwic3VwcG9ydGVkVmFsdWVUeXBlcyIsIkVycm9yIiwibWFpbkZpbHRlckJhckNvbnRyb2wiLCJwcm9wZXJ0eVRhcmdldE9iamVjdFBhdGgiLCJnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIiwiQlQiLCJDb25kaXRpb24iLCJjcmVhdGVDb25kaXRpb24iLCJQcm9taXNlIiwiYWxsIiwiY29uZGl0aW9uVmFsaWRhdGVkU3RhdHVzIiwiY29uZGl0aW9uVG9Nb2RlbFBhdGgiLCJfZ2V0RW50aXR5U2V0UGF0aCIsIk1vZGVsSGVscGVyIiwiZ2V0RW50aXR5U2V0UGF0aCIsInRhYmxlQ29udHJvbHMiLCJnZXRDb250cm9sbGVyIiwiX2dldENvbnRyb2xzIiwib1RhYmxlIiwiZmlsdGVyRmllbGRzIiwiZ2V0U2VsZWN0aW9uRmllbGRzIiwic2VsZWN0aW9uRmllbGRzIiwicHJvcGVydHlJbmZvcyIsInNQcm9wZXJ0eUluZm8iLCJnZXRDb250cm9sVHlwZSIsIm9QYWdlQ29udGV4dCIsImFGaWx0ZXJCYXJTZWxlY3Rpb25GaWVsZHNBbm5vdGF0aW9uIiwiZ2V0RW50aXR5VHlwZUFubm90YXRpb24iLCJhbm5vdGF0aW9uIiwibWFwU2VsZWN0aW9uRmllbGRzIiwib1NlbGVjdGlvbkZpZWxkIiwib0ZpbHRlckJhclNlbGVjdGlvbkZpZWxkQW5ub3RhdGlvbiIsInNQYXRoIiwib0ZpbHRlckZpZWxkIiwiZmllbGROYW1lcyIsIm9GaWVsZCIsIl9nZXRTZWxlY3Rpb25GaWVsZHNGcm9tUHJvcGVydHlJbmZvcyIsInByb3BlcnR5SW5mbyIsInNlbEZpZWxkIiwiaW5kZXhPZiIsImdyb3VwIiwiZ3JvdXBMYWJlbCIsInNldHRpbmdzIiwidmlzdWFsRmlsdGVyIiwibGFiZWwiLCJnZXRQcm9wZXJ0eUluZm8iLCJmaWx0ZXJQcm9wZXJ0aWVzTWV0YWRhdGEiLCJlbnRpdHlQcm9wZXJ0aWVzIiwiaWdub3JlUHJvcGVydGllcyIsImZpbHRlclByb3BlcnR5IiwiZmlsdGVyUHJvcGVydHlOYW1lIiwiZW50aXR5UHJvcGVydGllc0N1cnJlbnQiLCJlbnRpdHkiLCJpc0luaXRpYWxpemVkIiwiZm9ybWF0UHJvcGVydHlJbmZvIiwicHJvcEluZm8iLCJwcm9wSW5mb3MiLCJfZm9ybWF0UHJvcGVydHlJbmZvIiwicHJvcGVydHlJbmZvRm9yRmlsdGVyQmFyIiwic3RyaW5naWZ5IiwicHJvcGVydHkiLCJoaWRkZW5GaWx0ZXIiLCJyZXF1aXJlZCIsInRvb2x0aXAiLCJ2aXNpYmxlIiwibWF4Q29uZGl0aW9ucyIsImNhc2VTZW5zaXRpdmUiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkZpbHRlclV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW50aXR5VHlwZSwgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlQYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL0VkbVwiO1xuaW1wb3J0IHsgQ29tbW9uQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25cIjtcbmltcG9ydCB0eXBlIHsgU2VsZWN0aW9uRmllbGRzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgbWVyZ2UgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VUcmVlTW9kaWZpZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgQmFzZU1hbmlmZXN0U2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgTWFuaWZlc3RXcmFwcGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0V3JhcHBlclwiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBJRGlhZ25vc3RpY3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBUYWJsZVZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlUeXBlQ29uZmlnIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL3RhYmxlL0NvbHVtbnNcIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyRmllbGQsIFByb3BlcnR5SW5mbywgUHJvcGVydHlJbmZvRXh0ZXJuYWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9MaXN0UmVwb3J0L0ZpbHRlckJhclwiO1xuaW1wb3J0ICogYXMgRmlsdGVyQmFyQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0xpc3RSZXBvcnQvRmlsdGVyQmFyXCI7XG5pbXBvcnQgeyBnZXRBbGxDdXN0b21BZ2dyZWdhdGVzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTWV0YU1vZGVsRnVuY3Rpb25cIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IE9EQVRBX1RZUEVfTUFQUElORyB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0Rpc3BsYXlNb2RlRm9ybWF0dGVyXCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IERlbGVnYXRlVXRpbCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9EZWxlZ2F0ZVV0aWxcIjtcbmltcG9ydCBTZW1hbnRpY0RhdGVPcGVyYXRvcnMgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyQmFyL1NlbWFudGljRGF0ZU9wZXJhdG9yc1wiO1xuaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uVmFsdWVMaXN0VHlwZSB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL3ZhbHVlaGVscC9WYWx1ZUxpc3RIZWxwZXJcIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsQmluZGluZ0luZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9VdGlsc1wiO1xuaW1wb3J0IHR5cGUgTGlzdFJlcG9ydENvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvTGlzdFJlcG9ydC9MaXN0UmVwb3J0Q29udHJvbGxlci5jb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgRWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgQ2hhcnQgZnJvbSBcInNhcC91aS9tZGMvQ2hhcnRcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhciBmcm9tIFwic2FwL3VpL21kYy9GaWx0ZXJCYXJcIjtcbmltcG9ydCB0eXBlIHsgQ29uZGl0aW9uT2JqZWN0IH0gZnJvbSBcInNhcC91aS9tZGMvY29uZGl0aW9uL0NvbmRpdGlvblwiO1xuaW1wb3J0IENvbmRpdGlvbiBmcm9tIFwic2FwL3VpL21kYy9jb25kaXRpb24vQ29uZGl0aW9uXCI7XG5pbXBvcnQgQ29uZGl0aW9uQ29udmVydGVyIGZyb20gXCJzYXAvdWkvbWRjL2NvbmRpdGlvbi9Db25kaXRpb25Db252ZXJ0ZXJcIjtcbmltcG9ydCBDb25kaXRpb25WYWxpZGF0ZWQgZnJvbSBcInNhcC91aS9tZGMvZW51bXMvQ29uZGl0aW9uVmFsaWRhdGVkXCI7XG5pbXBvcnQgdHlwZSB7IElGaWx0ZXIgfSBmcm9tIFwic2FwL3VpL21kYy9saWJyYXJ5XCI7XG5pbXBvcnQgVHlwZU1hcCBmcm9tIFwic2FwL3VpL21kYy9vZGF0YS92NC9UeXBlTWFwXCI7XG5pbXBvcnQgU3RhdGVVdGlsIGZyb20gXCJzYXAvdWkvbWRjL3AxM24vU3RhdGVVdGlsXCI7XG5pbXBvcnQgRmlsdGVyVXRpbCBmcm9tIFwic2FwL3VpL21kYy91dGlsL0ZpbHRlclV0aWxcIjtcbmltcG9ydCBGaWx0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJcIjtcbmltcG9ydCBGaWx0ZXJPcGVyYXRvciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlck9wZXJhdG9yXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgT0RhdGFVdGlscyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhVXRpbHNcIjtcbmltcG9ydCBFRElUU1RBVEUgZnJvbSBcIi4uL2ZpbHRlckJhci9EcmFmdEVkaXRTdGF0ZVwiO1xuXG5leHBvcnQgdHlwZSBJRmlsdGVyQ29udHJvbCA9IENvbnRyb2wgJiB7XG5cdGdldFNlYXJjaD86ICgpID0+IHN0cmluZztcblx0Z2V0UHJvcGVydHlJbmZvU2V0PzogKCkgPT4gUHJvcGVydHlJbmZvW107XG5cdGdldFByb3BlcnR5SW5mbz86ICgpID0+IFByb3BlcnR5SW5mb1tdO1xuXHRnZXRUeXBlTWFwOiAoKSA9PiBUeXBlTWFwO1xuXHRnZXRDb250cm9sRGVsZWdhdGU/OiAoKSA9PiB7XG5cdFx0ZmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5OiAoc0VudGl0eVNldFBhdGg6IHN0cmluZywgb01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIG9Db250cm9sOiBDb250cm9sKSA9PiBQcm9wZXJ0eUluZm9bXTtcblx0fTtcblx0aXNJbml0aWFsaXplZD86ICgpID0+IGJvb2xlYW47XG5cdGdldEN1cnJlbnRTdGF0ZT86ICgpID0+IHsgaXRlbXM/OiB7IGtleTogc3RyaW5nIH1bXSB9O1xufSAmIElGaWx0ZXI7XG5lbnVtIFByb3BlcnR5SW5mb0tleXMge1xuXHRoaWRkZW5GaWx0ZXIgPSBcImhpZGRlbkZpbHRlclwiLFxuXHRyZXF1aXJlZCA9IFwicmVxdWlyZWRcIixcblx0cGF0aCA9IFwicGF0aFwiLFxuXHR0b29sdGlwID0gXCJ0b29sdGlwXCIsXG5cdHZpc2libGUgPSBcInZpc2libGVcIixcblx0bWF4Q29uZGl0aW9ucyA9IFwibWF4Q29uZGl0aW9uc1wiLFxuXHRmb3JtYXRPcHRpb25zID0gXCJmb3JtYXRPcHRpb25zXCIsXG5cdGNvbnN0cmFpbnRzID0gXCJjb25zdHJhaW50c1wiLFxuXHRncm91cCA9IFwiZ3JvdXBcIixcblx0Z3JvdXBMYWJlbCA9IFwiZ3JvdXBMYWJlbFwiLFxuXHRjYXNlU2Vuc2l0aXZlID0gXCJjYXNlU2Vuc2l0aXZlXCJcbn1cblxuY29uc3QgQ09ORElUSU9OX1BBVEhfVE9fUFJPUEVSVFlfUEFUSF9SRUdFWCA9IC9bKypdL2c7XG5cbmNvbnN0IG9GaWx0ZXJVdGlscyA9IHtcblx0Z2V0RmlsdGVyOiBmdW5jdGlvbiAodklGaWx0ZXI6IHN0cmluZyB8IElGaWx0ZXJDb250cm9sIHwgbnVsbCk6IEZpbHRlciB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgYUZpbHRlcnMgPSBvRmlsdGVyVXRpbHMuZ2V0RmlsdGVySW5mbyh2SUZpbHRlcikuZmlsdGVycztcblx0XHRyZXR1cm4gYUZpbHRlcnM/Lmxlbmd0aCA/IG5ldyBGaWx0ZXIoYUZpbHRlcnMsIGZhbHNlKSA6IHVuZGVmaW5lZDtcblx0fSxcblx0Z2V0RmlsdGVyRmllbGQ6IGZ1bmN0aW9uIChwcm9wZXJ0eVBhdGg6IHN0cmluZywgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCwgZW50aXR5VHlwZTogRW50aXR5VHlwZSk6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gRmlsdGVyQmFyQ29udmVydGVyLmdldEZpbHRlckZpZWxkKHByb3BlcnR5UGF0aCwgY29udmVydGVyQ29udGV4dCwgZW50aXR5VHlwZSk7XG5cdH0sXG5cdGJ1aWxkUHJvcGVyeUluZm86IGZ1bmN0aW9uIChwcm9wZXJ0eUluZm9GaWVsZDogRmlsdGVyRmllbGQsIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBQcm9wZXJ0eUluZm8ge1xuXHRcdGxldCBvUHJvcGVydHlJbmZvO1xuXHRcdGNvbnN0IGFUeXBlQ29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eVR5cGVDb25maWc+ID0ge307XG5cdFx0Y29uc3QgcHJvcGVydHlDb252ZXJ0eUNvbnRleHQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3I8UHJvcGVydHk+KHByb3BlcnR5SW5mb0ZpZWxkLmFubm90YXRpb25QYXRoKTtcblx0XHRjb25zdCBwcm9wZXJ0eVRhcmdldE9iamVjdCA9IHByb3BlcnR5Q29udmVydHlDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRPYmplY3Q7XG5cdFx0Y29uc3Qgb1R5cGVDb25maWcgPSBGaWx0ZXJCYXJDb252ZXJ0ZXIuZmV0Y2hUeXBlQ29uZmlnKHByb3BlcnR5VGFyZ2V0T2JqZWN0KTtcblx0XHRvUHJvcGVydHlJbmZvID0gRmlsdGVyQmFyQ29udmVydGVyLmZldGNoUHJvcGVydHlJbmZvKGNvbnZlcnRlckNvbnRleHQsIHByb3BlcnR5SW5mb0ZpZWxkLCBvVHlwZUNvbmZpZyk7XG5cdFx0YVR5cGVDb25maWdbcHJvcGVydHlJbmZvRmllbGQua2V5XSA9IG9UeXBlQ29uZmlnO1xuXHRcdG9Qcm9wZXJ0eUluZm8gPSBGaWx0ZXJCYXJDb252ZXJ0ZXIuYXNzaWduRGF0YVR5cGVUb1Byb3BlcnR5SW5mbyhvUHJvcGVydHlJbmZvLCBjb252ZXJ0ZXJDb250ZXh0LCBbXSwgYVR5cGVDb25maWcpO1xuXHRcdHJldHVybiBvUHJvcGVydHlJbmZvO1xuXHR9LFxuXHRjcmVhdGVDb252ZXJ0ZXJDb250ZXh0OiBmdW5jdGlvbiAoXG5cdFx0b0ZpbHRlckNvbnRyb2w6IElGaWx0ZXJDb250cm9sLFxuXHRcdHNFbnRpdHlUeXBlUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdG1ldGFNb2RlbD86IE9EYXRhTWV0YU1vZGVsLFxuXHRcdGFwcENvbXBvbmVudD86IEFwcENvbXBvbmVudFxuXHQpOiBDb252ZXJ0ZXJDb250ZXh0IHtcblx0XHRjb25zdCBzRmlsdGVyRW50aXR5VHlwZVBhdGggPSBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YTxzdHJpbmc+KG9GaWx0ZXJDb250cm9sLCBcImVudGl0eVR5cGVcIiksXG5cdFx0XHRjb250ZXh0UGF0aCA9IHNFbnRpdHlUeXBlUGF0aCB8fCBzRmlsdGVyRW50aXR5VHlwZVBhdGg7XG5cblx0XHRjb25zdCBvVmlldyA9IChvRmlsdGVyQ29udHJvbCBhcyBQYXJ0aWFsPElGaWx0ZXJDb250cm9sPikuaXNBID8gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0VmlldyhvRmlsdGVyQ29udHJvbCkgOiBudWxsO1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSAobWV0YU1vZGVsIHx8IG9GaWx0ZXJDb250cm9sLmdldE1vZGVsKCkhLmdldE1ldGFNb2RlbCgpKSBhcyBPRGF0YU1ldGFNb2RlbDtcblx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gYXBwQ29tcG9uZW50IHx8IChvVmlldyAmJiBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQob1ZpZXcpKTtcblx0XHRjb25zdCBvVmlzdWFsaXphdGlvbk9iamVjdFBhdGggPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoY29udGV4dFBhdGghKSEpO1xuXHRcdGxldCBtYW5pZmVzdFNldHRpbmdzOiBCYXNlTWFuaWZlc3RTZXR0aW5ncyB8IHVuZGVmaW5lZDtcblx0XHRpZiAob0ZpbHRlckNvbnRyb2wuaXNBICYmICFvRmlsdGVyQ29udHJvbC5pc0EoXCJzYXAudWkubWRjLnZhbHVlaGVscC5GaWx0ZXJCYXJcIikpIHtcblx0XHRcdG1hbmlmZXN0U2V0dGluZ3MgPSAoKG9WaWV3ICYmIG9WaWV3LmdldFZpZXdEYXRhKCkpIHx8IHt9KSBhcyBCYXNlTWFuaWZlc3RTZXR0aW5ncztcblx0XHR9XG5cdFx0cmV0dXJuIENvbnZlcnRlckNvbnRleHQuY3JlYXRlQ29udmVydGVyQ29udGV4dEZvck1hY3JvKFxuXHRcdFx0b1Zpc3VhbGl6YXRpb25PYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0Lm5hbWUsXG5cdFx0XHRvTWV0YU1vZGVsLFxuXHRcdFx0b0FwcENvbXBvbmVudD8uZ2V0RGlhZ25vc3RpY3MoKSBhcyB1bmtub3duIGFzIElEaWFnbm9zdGljcyxcblx0XHRcdG1lcmdlLFxuXHRcdFx0b1Zpc3VhbGl6YXRpb25PYmplY3RQYXRoLmNvbnRleHRMb2NhdGlvbixcblx0XHRcdG5ldyBNYW5pZmVzdFdyYXBwZXIoKG1hbmlmZXN0U2V0dGluZ3MgPz8ge30pIGFzIEJhc2VNYW5pZmVzdFNldHRpbmdzKVxuXHRcdCk7XG5cdH0sXG5cdGdldENvbnZlcnRlZEZpbHRlckZpZWxkczogZnVuY3Rpb24gKFxuXHRcdG9GaWx0ZXJDb250cm9sOiBJRmlsdGVyQ29udHJvbCxcblx0XHRzRW50aXR5VHlwZVBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRpbmNsdWRlSGlkZGVuPzogYm9vbGVhbixcblx0XHRtZXRhTW9kZWw/OiBPRGF0YU1ldGFNb2RlbCxcblx0XHRhcHBDb21wb25lbnQ/OiBBcHBDb21wb25lbnQsXG5cdFx0b01vZGlmaWVyPzogQmFzZVRyZWVNb2RpZmllcixcblx0XHRsaW5lSXRlbVRlcm0/OiBzdHJpbmdcblx0KTogRmlsdGVyRmllbGRbXSB7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IHRoaXMuX2dldEZpbHRlck1ldGFNb2RlbChvRmlsdGVyQ29udHJvbCwgbWV0YU1vZGVsKTtcblx0XHRjb25zdCBzRmlsdGVyRW50aXR5VHlwZVBhdGggPSBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YTxzdHJpbmc+KG9GaWx0ZXJDb250cm9sLCBcImVudGl0eVR5cGVcIik7XG5cdFx0Y29uc3QgYW5ub3RhdGlvblBhdGggPSBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YTxzdHJpbmc+KG9GaWx0ZXJDb250cm9sLCBcImFubm90YXRpb25QYXRoXCIpLFxuXHRcdFx0Y29udGV4dFBhdGggPSBzRW50aXR5VHlwZVBhdGggfHwgc0ZpbHRlckVudGl0eVR5cGVQYXRoO1xuXG5cdFx0Y29uc3QgbHJUYWJsZXM6IFRhYmxlVmlzdWFsaXphdGlvbltdID0gdGhpcy5fZ2V0RmllbGRzRm9yVGFibGUob0ZpbHRlckNvbnRyb2wsIHNFbnRpdHlUeXBlUGF0aCk7XG5cblx0XHRjb25zdCBvQ29udmVydGVyQ29udGV4dCA9IHRoaXMuY3JlYXRlQ29udmVydGVyQ29udGV4dChvRmlsdGVyQ29udHJvbCwgc0VudGl0eVR5cGVQYXRoLCBtZXRhTW9kZWwgPz8gb01ldGFNb2RlbCwgYXBwQ29tcG9uZW50KTtcblxuXHRcdC8vYVNlbGVjdGlvbkZpZWxkcyA9IEZpbHRlckJhckNvbnZlcnRlci5nZXRTZWxlY3Rpb25GaWVsZHMob0NvbnZlcnRlckNvbnRleHQpO1xuXHRcdHJldHVybiB0aGlzLl9nZXRTZWxlY3Rpb25GaWVsZHMoXG5cdFx0XHRvRmlsdGVyQ29udHJvbCxcblx0XHRcdHNFbnRpdHlUeXBlUGF0aCxcblx0XHRcdHNGaWx0ZXJFbnRpdHlUeXBlUGF0aCEsXG5cdFx0XHRjb250ZXh0UGF0aCEsXG5cdFx0XHRsclRhYmxlcyxcblx0XHRcdG9NZXRhTW9kZWwsXG5cdFx0XHRvQ29udmVydGVyQ29udGV4dCxcblx0XHRcdGluY2x1ZGVIaWRkZW4sXG5cdFx0XHRvTW9kaWZpZXIsXG5cdFx0XHRsaW5lSXRlbVRlcm0sXG5cdFx0XHRhbm5vdGF0aW9uUGF0aFxuXHRcdCk7XG5cdH0sXG5cblx0Z2V0QmluZGluZ1BhdGhGb3JQYXJhbWV0ZXJzOiBmdW5jdGlvbiAoXG5cdFx0b0lGaWx0ZXI6IElGaWx0ZXJDb250cm9sLFxuXHRcdG1Db25kaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBDb25kaXRpb25PYmplY3RbXT4sXG5cdFx0YUZpbHRlclByb3BlcnRpZXNNZXRhZGF0YTogUHJvcGVydHlJbmZvW10gfCBudWxsLFxuXHRcdGFQYXJhbWV0ZXJzOiBzdHJpbmdbXVxuXHQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGFQYXJhbXM6IHN0cmluZ1tdID0gW107XG5cdFx0YUZpbHRlclByb3BlcnRpZXNNZXRhZGF0YSA9IG9GaWx0ZXJVdGlscy5zZXRUeXBlQ29uZmlnVG9Qcm9wZXJ0aWVzKGFGaWx0ZXJQcm9wZXJ0aWVzTWV0YWRhdGEpITtcblx0XHQvLyBDb2xsZWN0aW5nIGFsbCBwYXJhbWV0ZXIgdmFsdWVzIGZyb20gY29uZGl0aW9uc1xuXHRcdGZvciAoY29uc3Qgc0ZpZWxkUGF0aCBvZiBhUGFyYW1ldGVycykge1xuXHRcdFx0aWYgKG1Db25kaXRpb25zW3NGaWVsZFBhdGhdICYmIG1Db25kaXRpb25zW3NGaWVsZFBhdGhdLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Ly8gV2Ugd291bGQgYmUgdXNpbmcgb25seSB0aGUgZmlyc3QgY29uZGl0aW9uIGZvciBwYXJhbWV0ZXIgdmFsdWUuXG5cdFx0XHRcdGNvbnN0IG9Db25kaXRpb25JbnRlcm5hbCA9IG1lcmdlKHt9LCBtQ29uZGl0aW9uc1tzRmllbGRQYXRoXVswXSkgYXMgQ29uZGl0aW9uT2JqZWN0O1xuXHRcdFx0XHRjb25zdCBvUHJvcGVydHkgPSBGaWx0ZXJVdGlsLmdldFByb3BlcnR5QnlLZXkoYUZpbHRlclByb3BlcnRpZXNNZXRhZGF0YSwgc0ZpZWxkUGF0aCkgYXMgUHJvcGVydHlJbmZvO1xuXHRcdFx0XHRjb25zdCBvVHlwZUNvbmZpZyA9XG5cdFx0XHRcdFx0b1Byb3BlcnR5LnR5cGVDb25maWcgfHwgVHlwZU1hcC5nZXRUeXBlQ29uZmlnKG9Qcm9wZXJ0eS5kYXRhVHlwZSwgb1Byb3BlcnR5LmZvcm1hdE9wdGlvbnMsIG9Qcm9wZXJ0eS5jb25zdHJhaW50cyk7XG5cdFx0XHRcdGNvbnN0IG1JbnRlcm5hbFBhcmFtZXRlckNvbmRpdGlvbiA9IENvbmRpdGlvbkNvbnZlcnRlci50b1R5cGUob0NvbmRpdGlvbkludGVybmFsLCBvVHlwZUNvbmZpZywgb0lGaWx0ZXIuZ2V0VHlwZU1hcCgpKTtcblx0XHRcdFx0Y29uc3Qgc0VkbVR5cGUgPSBPREFUQV9UWVBFX01BUFBJTkdbb1R5cGVDb25maWcuY2xhc3NOYW1lXTtcblx0XHRcdFx0YVBhcmFtcy5wdXNoKFxuXHRcdFx0XHRcdGAke3NGaWVsZFBhdGh9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KE9EYXRhVXRpbHMuZm9ybWF0TGl0ZXJhbChtSW50ZXJuYWxQYXJhbWV0ZXJDb25kaXRpb24udmFsdWVzWzBdLCBzRWRtVHlwZSkpfWBcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBCaW5kaW5nIHBhdGggZnJvbSBFbnRpdHlUeXBlXG5cdFx0Y29uc3Qgc0VudGl0eVR5cGVQYXRoID0gb0lGaWx0ZXIuZGF0YShcImVudGl0eVR5cGVcIik7XG5cdFx0Y29uc3Qgc0VudGl0eVNldFBhdGggPSBzRW50aXR5VHlwZVBhdGguc3Vic3RyaW5nKDAsIHNFbnRpdHlUeXBlUGF0aC5sZW5ndGggLSAxKTtcblx0XHRjb25zdCBzUGFyYW1ldGVyRW50aXR5U2V0ID0gc0VudGl0eVNldFBhdGguc2xpY2UoMCwgc0VudGl0eVNldFBhdGgubGFzdEluZGV4T2YoXCIvXCIpKTtcblx0XHRjb25zdCBzVGFyZ2V0TmF2aWdhdGlvbiA9IHNFbnRpdHlTZXRQYXRoLnN1YnN0cmluZyhzRW50aXR5U2V0UGF0aC5sYXN0SW5kZXhPZihcIi9cIikgKyAxKTtcblx0XHQvLyBjcmVhdGUgcGFyYW1ldGVyIGNvbnRleHRcblx0XHRyZXR1cm4gYCR7c1BhcmFtZXRlckVudGl0eVNldH0oJHthUGFyYW1zLnRvU3RyaW5nKCl9KS8ke3NUYXJnZXROYXZpZ2F0aW9ufWA7XG5cdH0sXG5cblx0Z2V0RWRpdFN0YXRlSXNIaWRlRHJhZnQ6IGZ1bmN0aW9uIChtQ29uZGl0aW9ucz86IFJlY29yZDxzdHJpbmcsIENvbmRpdGlvbk9iamVjdFtdPik6IGJvb2xlYW4ge1xuXHRcdGxldCBiSXNIaWRlRHJhZnQgPSBmYWxzZTtcblx0XHRpZiAobUNvbmRpdGlvbnMgJiYgbUNvbmRpdGlvbnMuJGVkaXRTdGF0ZSkge1xuXHRcdFx0Y29uc3Qgb0NvbmRpdGlvbiA9IG1Db25kaXRpb25zLiRlZGl0U3RhdGUuZmluZChmdW5jdGlvbiAoY29uZGl0aW9uOiBDb25kaXRpb25PYmplY3QpIHtcblx0XHRcdFx0cmV0dXJuIGNvbmRpdGlvbi5vcGVyYXRvciA9PT0gXCJEUkFGVF9FRElUX1NUQVRFXCI7XG5cdFx0XHR9KTtcblx0XHRcdGlmIChvQ29uZGl0aW9uICYmIChvQ29uZGl0aW9uLnZhbHVlcy5pbmNsdWRlcyhcIkFMTF9ISURJTkdfRFJBRlRTXCIpIHx8IG9Db25kaXRpb24udmFsdWVzLmluY2x1ZGVzKFwiU0FWRURfT05MWVwiKSkpIHtcblx0XHRcdFx0YklzSGlkZURyYWZ0ID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGJJc0hpZGVEcmFmdDtcblx0fSxcblx0LyoqXG5cdCAqIEdldHMgYWxsIGZpbHRlcnMgdGhhdCBvcmlnaW5hdGUgZnJvbSB0aGUgTURDIEZpbHRlckJhci5cblx0ICogQHBhcmFtIHZJRmlsdGVyIFN0cmluZyBvciBvYmplY3QgaW5zdGFuY2UgcmVsYXRlZCB0byBNRENfRmlsdGVyQmFyL1RhYmxlL0NoYXJ0XG5cdCAqIEBwYXJhbSBtUHJvcGVydGllcyBQcm9wZXJ0aWVzIG9uIGZpbHRlcnMgdGhhdCBhcmUgdG8gYmUgcmV0cmlldmVkLiBBdmFpbGFibGUgcGFyYW1ldGVyczpcblx0ICogQHBhcmFtIG1Qcm9wZXJ0aWVzLmlnbm9yZWRQcm9wZXJ0aWVzIEFycmF5IG9mIHByb3BlcnR5IG5hbWVzIHdoaWNoIHNob3VsZCBiZSBub3QgY29uc2lkZXJlZCBmb3IgZmlsdGVyaW5nXG5cdCAqIEBwYXJhbSBtUHJvcGVydGllcy5wcm9wZXJ0aWVzTWV0YWRhdGEgQXJyYXkgd2l0aCBhbGwgdGhlIHByb3BlcnR5IG1ldGFkYXRhLiBJZiBub3QgcHJvdmlkZWQsIHByb3BlcnRpZXMgd2lsbCBiZSByZXRyaWV2ZWQgZnJvbSB2SUZpbHRlci5cblx0ICogQHBhcmFtIG1Qcm9wZXJ0aWVzLnRhcmdldENvbnRyb2wgTURDX3RhYmxlIG9yIGNoYXJ0LiBJZiBwcm92aWRlZCwgcHJvcGVydHkgbmFtZXMgd2hpY2ggYXJlIG5vdCByZWxldmFudCBmb3IgdGhlIHRhcmdldCBjb250cm9sIGVudGl0eVNldCBhcmUgbm90IGNvbnNpZGVyZWQuXG5cdCAqIEBwYXJhbSBtRmlsdGVyQ29uZGl0aW9ucyBNYXAgd2l0aCBleHRlcm5hbGl6ZWQgZmlsdGVyIGNvbmRpdGlvbnMuXG5cdCAqIEByZXR1cm5zIEZpbHRlckJhciBmaWx0ZXJzIGFuZCBiYXNpYyBzZWFyY2hcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGdldEZpbHRlckluZm86IGZ1bmN0aW9uIChcblx0XHR2SUZpbHRlcjogc3RyaW5nIHwgSUZpbHRlckNvbnRyb2wgfCBudWxsLFxuXHRcdG1Qcm9wZXJ0aWVzPzogeyBpZ25vcmVkUHJvcGVydGllcz86IHN0cmluZ1tdOyBwcm9wZXJ0aWVzTWV0YWRhdGE/OiBQcm9wZXJ0eUluZm9bXTsgdGFyZ2V0Q29udHJvbD86IENvbnRyb2wgfSxcblx0XHRtRmlsdGVyQ29uZGl0aW9ucz86IFJlY29yZDxzdHJpbmcsIENvbmRpdGlvbk9iamVjdFtdPlxuXHQpOiBJbnRlcm5hbEJpbmRpbmdJbmZvIHtcblx0XHRsZXQgYUlnbm9yZVByb3BlcnRpZXMgPSAobVByb3BlcnRpZXMgJiYgbVByb3BlcnRpZXMuaWdub3JlZFByb3BlcnRpZXMpIHx8IFtdO1xuXHRcdGNvbnN0IG9UYXJnZXRDb250cm9sID0gbVByb3BlcnRpZXMgJiYgbVByb3BlcnRpZXMudGFyZ2V0Q29udHJvbCxcblx0XHRcdHNUYXJnZXRFbnRpdHlQYXRoID0gb1RhcmdldENvbnRyb2wgPyBvVGFyZ2V0Q29udHJvbC5kYXRhKFwiZW50aXR5VHlwZVwiKSA6IHVuZGVmaW5lZDtcblx0XHRjb25zdCBtUGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXHRcdGxldCBvSUZpbHRlcjogSUZpbHRlckNvbnRyb2wgPSB2SUZpbHRlciBhcyBJRmlsdGVyQ29udHJvbCxcblx0XHRcdHNTZWFyY2gsXG5cdFx0XHRhRmlsdGVyczogRmlsdGVyW10gPSBbXSxcblx0XHRcdHNCaW5kaW5nUGF0aCxcblx0XHRcdGFQcm9wZXJ0aWVzTWV0YWRhdGEgPSBtUHJvcGVydGllcyAmJiBtUHJvcGVydGllcy5wcm9wZXJ0aWVzTWV0YWRhdGE7XG5cdFx0aWYgKHR5cGVvZiB2SUZpbHRlciA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0b0lGaWx0ZXIgPSBFbGVtZW50LmdldEVsZW1lbnRCeUlkKHZJRmlsdGVyKSBhcyB1bmtub3duIGFzIElGaWx0ZXJDb250cm9sO1xuXHRcdH1cblx0XHRpZiAob0lGaWx0ZXIpIHtcblx0XHRcdHNTZWFyY2ggPSB0aGlzLl9nZXRTZWFyY2hGaWVsZChvSUZpbHRlciwgYUlnbm9yZVByb3BlcnRpZXMpO1xuXHRcdFx0Y29uc3QgbUNvbmRpdGlvbnMgPSB0aGlzLl9nZXRGaWx0ZXJDb25kaXRpb25zKG1Qcm9wZXJ0aWVzLCBtRmlsdGVyQ29uZGl0aW9ucyEsIG9JRmlsdGVyKTtcblx0XHRcdGxldCBhRmlsdGVyUHJvcGVydGllc01ldGFkYXRhOiBQcm9wZXJ0eUluZm9bXSB8IG51bGw7XG5cdFx0XHRpZiAob0lGaWx0ZXIuaXNBPEZpbHRlckJhcj4oXCJzYXAudWkubWRjLkZpbHRlckJhclwiKSkge1xuXHRcdFx0XHRhRmlsdGVyUHJvcGVydGllc01ldGFkYXRhID0gdGhpcy5nZXRGaWx0ZXJQcm9wZXJ0eUluZm8ob0lGaWx0ZXIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YUZpbHRlclByb3BlcnRpZXNNZXRhZGF0YSA9IG9JRmlsdGVyLmdldFByb3BlcnR5SW5mb1NldCA/IG9JRmlsdGVyLmdldFByb3BlcnR5SW5mb1NldCgpIDogbnVsbDtcblx0XHRcdH1cblx0XHRcdGFGaWx0ZXJQcm9wZXJ0aWVzTWV0YWRhdGEgPSB0aGlzLl9nZXRGaWx0ZXJQcm9wZXJ0aWVzTWV0YWRhdGEoYUZpbHRlclByb3BlcnRpZXNNZXRhZGF0YSwgb0lGaWx0ZXIpO1xuXHRcdFx0aWYgKG1Qcm9wZXJ0aWVzICYmIG1Qcm9wZXJ0aWVzLnRhcmdldENvbnRyb2wgJiYgbVByb3BlcnRpZXMudGFyZ2V0Q29udHJvbC5pc0EoXCJzYXAudWkubWRjLkNoYXJ0XCIpKSB7XG5cdFx0XHRcdE9iamVjdC5rZXlzKG1Db25kaXRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uIChzS2V5OiBzdHJpbmcpIHtcblx0XHRcdFx0XHRpZiAoc0tleSA9PT0gXCIkZWRpdFN0YXRlXCIpIHtcblx0XHRcdFx0XHRcdGRlbGV0ZSBtQ29uZGl0aW9uc1tcIiRlZGl0U3RhdGVcIl07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdGxldCBhUGFyYW1ldGVycyA9IG9JRmlsdGVyLmRhdGEoXCJwYXJhbWV0ZXJzXCIpIHx8IFtdO1xuXHRcdFx0YVBhcmFtZXRlcnMgPSB0eXBlb2YgYVBhcmFtZXRlcnMgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKGFQYXJhbWV0ZXJzKSA6IGFQYXJhbWV0ZXJzO1xuXHRcdFx0aWYgKGFQYXJhbWV0ZXJzICYmIGFQYXJhbWV0ZXJzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Ly8gQmluZGluZyBwYXRoIGNoYW5nZXMgaW4gY2FzZSBvZiBwYXJhbWV0ZXJzLlxuXHRcdFx0XHRzQmluZGluZ1BhdGggPSBvRmlsdGVyVXRpbHMuZ2V0QmluZGluZ1BhdGhGb3JQYXJhbWV0ZXJzKG9JRmlsdGVyLCBtQ29uZGl0aW9ucywgYUZpbHRlclByb3BlcnRpZXNNZXRhZGF0YSwgYVBhcmFtZXRlcnMpO1xuXHRcdFx0XHRpZiAoT2JqZWN0LmtleXMobUNvbmRpdGlvbnMpLmxlbmd0aCkge1xuXHRcdFx0XHRcdE9iamVjdC5rZXlzKG1Db25kaXRpb25zKS5mb3JFYWNoKChwYXJhbSkgPT4ge1xuXHRcdFx0XHRcdFx0YVBhcmFtZXRlcnMuZm9yRWFjaCgocmVxdWlyZWRQYXJhbTogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChwYXJhbSA9PT0gcmVxdWlyZWRQYXJhbSkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG1QYXJhbWV0ZXJzVmFsdWUgPSBtQ29uZGl0aW9uc1twYXJhbV1bMF0udmFsdWVzO1xuXHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzW3JlcXVpcmVkUGFyYW1dID0gbVBhcmFtZXRlcnNWYWx1ZVswXTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChtQ29uZGl0aW9ucykge1xuXHRcdFx0XHQvL0V4Y2x1ZGUgSW50ZXJmYWNlIEZpbHRlciBwcm9wZXJ0aWVzIHRoYXQgYXJlIG5vdCByZWxldmFudCBmb3IgdGhlIFRhcmdldCBjb250cm9sIGVudGl0eVNldFxuXHRcdFx0XHRpZiAoc1RhcmdldEVudGl0eVBhdGggJiYgb0lGaWx0ZXIuZGF0YShcImVudGl0eVR5cGVcIikgJiYgb0lGaWx0ZXIuZGF0YShcImVudGl0eVR5cGVcIikgIT09IHNUYXJnZXRFbnRpdHlQYXRoKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9JRmlsdGVyLmdldE1vZGVsKCkhLmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsO1xuXHRcdFx0XHRcdGNvbnN0IGFUYXJnZXRQcm9wZXJ0aWVzTWV0YWRhdGEgPSBvSUZpbHRlclxuXHRcdFx0XHRcdFx0LmdldENvbnRyb2xEZWxlZ2F0ZT8uKClcblx0XHRcdFx0XHRcdC5mZXRjaFByb3BlcnRpZXNGb3JFbnRpdHkoc1RhcmdldEVudGl0eVBhdGgsIG9NZXRhTW9kZWwsIG9JRmlsdGVyKSBhcyBQcm9wZXJ0eUluZm9bXTtcblx0XHRcdFx0XHRhUHJvcGVydGllc01ldGFkYXRhID0gYVRhcmdldFByb3BlcnRpZXNNZXRhZGF0YTtcblxuXHRcdFx0XHRcdGNvbnN0IF9hSWdub3JlUHJvcGVydGllcyA9IHRoaXMuX2dldElnbm9yZWRQcm9wZXJ0aWVzKFxuXHRcdFx0XHRcdFx0YUZpbHRlclByb3BlcnRpZXNNZXRhZGF0YSBhcyBQcm9wZXJ0eUluZm9bXSxcblx0XHRcdFx0XHRcdGFUYXJnZXRQcm9wZXJ0aWVzTWV0YWRhdGFcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGlmIChfYUlnbm9yZVByb3BlcnRpZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0YUlnbm9yZVByb3BlcnRpZXMgPSBhSWdub3JlUHJvcGVydGllcy5jb25jYXQoX2FJZ25vcmVQcm9wZXJ0aWVzKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoIWFQcm9wZXJ0aWVzTWV0YWRhdGEgJiYgYUZpbHRlclByb3BlcnRpZXNNZXRhZGF0YSkge1xuXHRcdFx0XHRcdGFQcm9wZXJ0aWVzTWV0YWRhdGEgPSBhRmlsdGVyUHJvcGVydGllc01ldGFkYXRhO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIHZhciBhUGFyYW1LZXlzID0gW107XG5cdFx0XHRcdC8vIGFQYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24gKG9QYXJhbSkge1xuXHRcdFx0XHQvLyBcdGFQYXJhbUtleXMucHVzaChvUGFyYW0ua2V5KTtcblx0XHRcdFx0Ly8gfSk7XG5cdFx0XHRcdGFGaWx0ZXJzID0gdGhpcy5nZXRFZGl0U3RhdGVBbmRGaWx0ZXIoe1xuXHRcdFx0XHRcdG9JRmlsdGVyLFxuXHRcdFx0XHRcdG1Db25kaXRpb25zLFxuXHRcdFx0XHRcdGFQcm9wZXJ0aWVzTWV0YWRhdGEsXG5cdFx0XHRcdFx0YUlnbm9yZVByb3BlcnRpZXMsXG5cdFx0XHRcdFx0YVBhcmFtZXRlcnNcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB7IHBhcmFtZXRlcnM6IG1QYXJhbWV0ZXJzLCBmaWx0ZXJzOiBhRmlsdGVycywgc2VhcmNoOiBzU2VhcmNoIHx8IHVuZGVmaW5lZCwgYmluZGluZ1BhdGg6IHNCaW5kaW5nUGF0aCB9O1xuXHR9LFxuXHQvKipcblx0ICogR2V0cyB0aGUgRmlsdGVyIHBhcmFtcyB0YWtpbmcgaW4gY29uc2lkZXJhdGlvbiB0aGUgRWRpdGluZyBTdGF0dXMgZmllbGQsXG5cdCAqIG1lcmdlcy9vdmVycmlkZXMgdGhlIGRhdGEgdGhhdCdzIGNvbWluZyBmcm9tIEZpbHRlclV0aWwuZ2V0RmlsdGVySW5mbywgYW5kLFxuXHQgKiByZXR1cm5zIGEgbWFwcGVkIGRhdGEgdG8gYmUgc2VudCB0byB0aGUgYmFja2VuZC5cblx0ICogQHBhcmFtIHBhcmFtIE9iamVjdFxuXHQgKiBAcGFyYW0gcGFyYW0ub0lGaWx0ZXIgT2JqZWN0IEZpbHRlckJhciBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gcGFyYW0ubUNvbmRpdGlvbnMgT2JqZWN0IENvbmRpdGlvbnMgdGhhdCBjb21lcyBmcm9tIHRoZSBGaWx0ZXIgRmllbGRzXG5cdCAqIEBwYXJhbSBwYXJhbS5hUHJvcGVydGllc01ldGFkYXRhIEFycmF5IEZpbHRlciBtZXRhZGF0YVxuXHQgKiBAcGFyYW0gcGFyYW0uYUlnbm9yZVByb3BlcnRpZXMgQXJyYXkgb2Ygc3RyaW5ncyB3aXRoIHRoZSBmaWVsZCBrZXlzIHdoaWNoIG5lZWQgdG8gYmUgaWdub3JlZFxuXHQgKiBAcGFyYW0gcGFyYW0uYVBhcmFtZXRlcnMgQXJyYXkgVVJMIHBhcmFtcyB0aGF0IGFsc28gbmVlZCB0byBiZSBpZ25vcmUgYW5kIGFyZSBtZXJnZWQgaW50byB0aGUgYUlnbm9yZVByb3BlcnRpZXNcblx0ICogQHJldHVybnMgRmlsdGVyQmFyIGZpbHRlcnMgYXJyYXlcblx0ICovXG5cdGdldEVkaXRTdGF0ZUFuZEZpbHRlcjogZnVuY3Rpb24gKHtcblx0XHRvSUZpbHRlcixcblx0XHRtQ29uZGl0aW9ucyxcblx0XHRhUHJvcGVydGllc01ldGFkYXRhLFxuXHRcdGFJZ25vcmVQcm9wZXJ0aWVzLFxuXHRcdGFQYXJhbWV0ZXJzXG5cdH06IHtcblx0XHRvSUZpbHRlcjogSUZpbHRlckNvbnRyb2w7XG5cdFx0bUNvbmRpdGlvbnM6IFJlY29yZDxzdHJpbmcsIENvbmRpdGlvbk9iamVjdFtdPjtcblx0XHRhUHJvcGVydGllc01ldGFkYXRhOiBQcm9wZXJ0eUluZm9bXSB8IHVuZGVmaW5lZDtcblx0XHRhSWdub3JlUHJvcGVydGllczogc3RyaW5nW107XG5cdFx0YVBhcmFtZXRlcnM6IENvbmNhdEFycmF5PHN0cmluZz47XG5cdH0pOiBGaWx0ZXJbXSB7XG5cdFx0Y29uc3Qgb0ZpbHRlciA9IChcblx0XHRcdEZpbHRlclV0aWwuZ2V0RmlsdGVySW5mbyhcblx0XHRcdFx0b0lGaWx0ZXIsXG5cdFx0XHRcdG1Db25kaXRpb25zLFxuXHRcdFx0XHRvRmlsdGVyVXRpbHMuc2V0VHlwZUNvbmZpZ1RvUHJvcGVydGllcyhhUHJvcGVydGllc01ldGFkYXRhKSEsXG5cdFx0XHRcdGFJZ25vcmVQcm9wZXJ0aWVzLmNvbmNhdChhUGFyYW1ldGVycylcblx0XHRcdCkgYXMgeyBmaWx0ZXJzOiBGaWx0ZXIgfVxuXHRcdCkuZmlsdGVycztcblx0XHRjb25zdCBjdXJyU3RhdGUgPSBvSUZpbHRlcj8uZ2V0Q3VycmVudFN0YXRlPy4oKTtcblx0XHRjb25zdCBoYXNFZGl0U3RhdGVGaWVsZFZpc2libGUgPSBjdXJyU3RhdGU/Lml0ZW1zPy5zb21lKChjczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSkgPT4gY3M/LmtleSA9PT0gXCIkZWRpdFN0YXRlXCIpO1xuXHRcdGNvbnN0IGhhc0VkaXRTdGF0ZU1ldGFkYXRhID0gQXJyYXkuaXNBcnJheShhUHJvcGVydGllc01ldGFkYXRhKSAmJiBhUHJvcGVydGllc01ldGFkYXRhPy5zb21lKChjcykgPT4gY3M/LmtleSA9PT0gXCIkZWRpdFN0YXRlXCIpO1xuXHRcdGxldCBlZGl0U3RhdGVGaWx0ZXI6IEZpbHRlciB8IHVuZGVmaW5lZDtcblx0XHRpZiAoIWFJZ25vcmVQcm9wZXJ0aWVzLmluY2x1ZGVzKFwiJGVkaXRTdGF0ZVwiKSAmJiBoYXNFZGl0U3RhdGVGaWVsZFZpc2libGUgPT09IHRydWUgJiYgaGFzRWRpdFN0YXRlTWV0YWRhdGEpIHtcblx0XHRcdGlmIChtQ29uZGl0aW9ucy5oYXNPd25Qcm9wZXJ0eShcIiRlZGl0U3RhdGVcIikpIHtcblx0XHRcdFx0Y29uc3QgZWRpdFN0YXRlVmFsdWUgPSBtQ29uZGl0aW9uc1tcIiRlZGl0U3RhdGVcIl07XG5cdFx0XHRcdGVkaXRTdGF0ZUZpbHRlciA9IEVESVRTVEFURS5nZXRGaWx0ZXJGb3JFZGl0U3RhdGUoZWRpdFN0YXRlVmFsdWU/LlswXT8udmFsdWVzPy5bMF0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWRpdFN0YXRlRmlsdGVyID0gRURJVFNUQVRFLmdldEZpbHRlckZvckVkaXRTdGF0ZShcIlwiKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0bGV0IGFGaWx0ZXJzID0gb0ZpbHRlciA/IFtvRmlsdGVyXSA6IFtdO1xuXHRcdGlmIChlZGl0U3RhdGVGaWx0ZXIpIHtcblx0XHRcdGNvbnN0IGhhc0VkaXRTdGF0ZUZpbHRlciA9IHRoaXMuaGFzRWRpdFN0YXRlRmlsdGVyUmVjdXJzaXZlbHkoYUZpbHRlcnMpO1xuXHRcdFx0aWYgKGhhc0VkaXRTdGF0ZUZpbHRlcikge1xuXHRcdFx0XHRhRmlsdGVycyA9IHRoaXMuZXhjaGFuZ2VFZGl0U3RhdGVGaWx0ZXJSZWN1cnNpdmVseShlZGl0U3RhdGVGaWx0ZXIsIGFGaWx0ZXJzKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFGaWx0ZXJzID0gW1xuXHRcdFx0XHRcdG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRcdFx0ZmlsdGVyczogWy4uLmFGaWx0ZXJzLCBlZGl0U3RhdGVGaWx0ZXJdLFxuXHRcdFx0XHRcdFx0YW5kOiB0cnVlXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGFGaWx0ZXJzO1xuXHR9LFxuXHRoYXNFZGl0U3RhdGVGaWx0ZXJSZWN1cnNpdmVseTogZnVuY3Rpb24gKGZpbHRlcnM6IEZpbHRlcltdKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIGZpbHRlcnMuc29tZSgoZmlsdGVyKTogYm9vbGVhbiA9PiB7XG5cdFx0XHRpZiAoZmlsdGVyLmdldFBhdGgoKSA9PT0gXCIkZWRpdFN0YXRlXCIpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9IGVsc2UgaWYgKGZpbHRlci5nZXRGaWx0ZXJzKCkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5oYXNFZGl0U3RhdGVGaWx0ZXJSZWN1cnNpdmVseShmaWx0ZXIuZ2V0RmlsdGVycygpISk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0sXG5cdGV4Y2hhbmdlRWRpdFN0YXRlRmlsdGVyUmVjdXJzaXZlbHk6IGZ1bmN0aW9uIChlZGl0U3RhdGVGaWx0ZXI6IEZpbHRlciwgZmlsdGVyczogRmlsdGVyW10pOiBGaWx0ZXJbXSB7XG5cdFx0cmV0dXJuIGZpbHRlcnMubWFwKChmaWx0ZXIpOiBGaWx0ZXIgPT4ge1xuXHRcdFx0aWYgKGZpbHRlci5nZXRQYXRoKCkgPT09IFwiJGVkaXRTdGF0ZVwiKSB7XG5cdFx0XHRcdHJldHVybiBlZGl0U3RhdGVGaWx0ZXI7XG5cdFx0XHR9IGVsc2UgaWYgKGZpbHRlci5nZXRGaWx0ZXJzKCkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRmaWx0ZXIgPSBuZXcgRmlsdGVyKHtcblx0XHRcdFx0XHRmaWx0ZXJzOiB0aGlzLmV4Y2hhbmdlRWRpdFN0YXRlRmlsdGVyUmVjdXJzaXZlbHkoZWRpdFN0YXRlRmlsdGVyLCBmaWx0ZXIuZ2V0RmlsdGVycygpISksXG5cdFx0XHRcdFx0YW5kOiBmaWx0ZXIuaXNBbmQoKVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmV0dXJuIGZpbHRlcjtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmaWx0ZXI7XG5cdFx0fSk7XG5cdH0sXG5cdHNldFR5cGVDb25maWdUb1Byb3BlcnRpZXM6IGZ1bmN0aW9uIChhUHJvcGVydGllczogUHJvcGVydHlJbmZvW10gfCBudWxsIHwgdW5kZWZpbmVkKTogUHJvcGVydHlJbmZvW10gfCBudWxsIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoYVByb3BlcnRpZXMgJiYgYVByb3BlcnRpZXMubGVuZ3RoKSB7XG5cdFx0XHRhUHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uIChvSUZpbHRlclByb3BlcnR5OiBQcm9wZXJ0eUluZm8pIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG9JRmlsdGVyUHJvcGVydHkudHlwZUNvbmZpZyAmJlxuXHRcdFx0XHRcdG9JRmlsdGVyUHJvcGVydHkudHlwZUNvbmZpZy50eXBlSW5zdGFuY2UgJiZcblx0XHRcdFx0XHQob0lGaWx0ZXJQcm9wZXJ0eS50eXBlQ29uZmlnLnR5cGVJbnN0YW5jZSBhcyB7IGdldENvbnN0cmFpbnRzPzogRnVuY3Rpb24gfSkuZ2V0Q29uc3RyYWludHMgaW5zdGFuY2VvZiBGdW5jdGlvblxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG9JRmlsdGVyUHJvcGVydHkucGF0aCA9PT0gXCIkZWRpdFN0YXRlXCIpIHtcblx0XHRcdFx0XHRvSUZpbHRlclByb3BlcnR5LnR5cGVDb25maWcgPSBUeXBlTWFwLmdldFR5cGVDb25maWcoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIiwge30sIHt9KTtcblx0XHRcdFx0fSBlbHNlIGlmIChvSUZpbHRlclByb3BlcnR5LnBhdGggPT09IFwiJHNlYXJjaFwiKSB7XG5cdFx0XHRcdFx0b0lGaWx0ZXJQcm9wZXJ0eS50eXBlQ29uZmlnID0gVHlwZU1hcC5nZXRUeXBlQ29uZmlnKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIsIHt9LCB7fSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAob0lGaWx0ZXJQcm9wZXJ0eS5kYXRhVHlwZSB8fCAob0lGaWx0ZXJQcm9wZXJ0eS50eXBlQ29uZmlnICYmIG9JRmlsdGVyUHJvcGVydHkudHlwZUNvbmZpZy5jbGFzc05hbWUpKSB7XG5cdFx0XHRcdFx0b0lGaWx0ZXJQcm9wZXJ0eS50eXBlQ29uZmlnID0gVHlwZU1hcC5nZXRUeXBlQ29uZmlnKFxuXHRcdFx0XHRcdFx0b0lGaWx0ZXJQcm9wZXJ0eS5kYXRhVHlwZSB8fCBvSUZpbHRlclByb3BlcnR5LnR5cGVDb25maWc/LmNsYXNzTmFtZSxcblx0XHRcdFx0XHRcdG9JRmlsdGVyUHJvcGVydHkuZm9ybWF0T3B0aW9ucyxcblx0XHRcdFx0XHRcdG9JRmlsdGVyUHJvcGVydHkuY29uc3RyYWludHNcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGFQcm9wZXJ0aWVzO1xuXHR9LFxuXHRnZXROb3RBcHBsaWNhYmxlRmlsdGVyczogZnVuY3Rpb24gKG9GaWx0ZXJCYXI6IEZpbHRlckJhciwgb0NvbnRyb2w6IENvbnRyb2wpOiBzdHJpbmdbXSB7XG5cdFx0Y29uc3Qgc1RhcmdldEVudGl0eVR5cGVQYXRoID0gb0NvbnRyb2wuZGF0YShcImVudGl0eVR5cGVcIiksXG5cdFx0XHRvRmlsdGVyQmFyRW50aXR5UGF0aCA9IG9GaWx0ZXJCYXIuZGF0YShcImVudGl0eVR5cGVcIiksXG5cdFx0XHRvTWV0YU1vZGVsID0gb0ZpbHRlckJhci5nZXRNb2RlbCgpIS5nZXRNZXRhTW9kZWwoKSEsXG5cdFx0XHRvRmlsdGVyQmFyRW50aXR5U2V0QW5ub3RhdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChvRmlsdGVyQmFyRW50aXR5UGF0aCksXG5cdFx0XHRhTm90QXBwbGljYWJsZSA9IFtdLFxuXHRcdFx0bUNvbmRpdGlvbnMgPSBvRmlsdGVyQmFyLmdldENvbmRpdGlvbnMoKSxcblx0XHRcdGJJc0ZpbHRlckJhckVudGl0eVR5cGUgPSBzVGFyZ2V0RW50aXR5VHlwZVBhdGggPT09IG9GaWx0ZXJCYXJFbnRpdHlQYXRoLFxuXHRcdFx0YklzQ2hhcnQgPSBvQ29udHJvbC5pc0E8Q2hhcnQ+KFwic2FwLnVpLm1kYy5DaGFydFwiKSxcblx0XHRcdGJJc0FuYWx5dGljYWxUYWJsZSA9ICFiSXNDaGFydCAmJiAob0NvbnRyb2wuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldFRhYmxlRGVmaW5pdGlvbigpLmVuYWJsZUFuYWx5dGljcyxcblx0XHRcdGJJc1RyZWVUYWJsZSA9ICFiSXNDaGFydCAmJiAob0NvbnRyb2wuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIixcblx0XHRcdGJFbmFibGVTZWFyY2ggPSBiSXNDaGFydFxuXHRcdFx0XHQ/IChDb21tb25IZWxwZXIucGFyc2VDdXN0b21EYXRhKERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhKG9Db250cm9sLCBcImFwcGx5U3VwcG9ydGVkXCIpKSBhcyB7IGVuYWJsZVNlYXJjaD86IGJvb2xlYW4gfSlcblx0XHRcdFx0XHRcdC5lbmFibGVTZWFyY2hcblx0XHRcdFx0OiAhKGJJc0FuYWx5dGljYWxUYWJsZSB8fCBiSXNUcmVlVGFibGUpIHx8IChvQ29udHJvbC5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0VGFibGVEZWZpbml0aW9uKCkuZW5hYmxlQmFzaWNTZWFyY2g7XG5cblx0XHRpZiAobUNvbmRpdGlvbnMgJiYgKCFiSXNGaWx0ZXJCYXJFbnRpdHlUeXBlIHx8IGJJc0FuYWx5dGljYWxUYWJsZSB8fCBiSXNDaGFydCB8fCBiSXNUcmVlVGFibGUpKSB7XG5cdFx0XHQvLyBXZSBkb24ndCBuZWVkIHRvIGNhbGN1bGF0ZSB0aGUgZGlmZmVyZW5jZSBvbiBwcm9wZXJ0eSBMZXZlbCBpZiBlbnRpdHkgc2V0cyBhcmUgaWRlbnRpY2FsXG5cdFx0XHRjb25zdCBhVGFyZ2V0UHJvcGVydGllcyA9IGJJc0ZpbHRlckJhckVudGl0eVR5cGVcblx0XHRcdFx0XHQ/IFtdXG5cdFx0XHRcdFx0OiAob0ZpbHRlckJhclxuXHRcdFx0XHRcdFx0XHQuZ2V0Q29udHJvbERlbGVnYXRlKClcblx0XHRcdFx0XHRcdFx0LmZldGNoUHJvcGVydGllc0ZvckVudGl0eShzVGFyZ2V0RW50aXR5VHlwZVBhdGgsIG9NZXRhTW9kZWwsIG9GaWx0ZXJCYXIpIGFzIFByb3BlcnR5SW5mb1tdKSxcblx0XHRcdFx0bVRhcmdldFByb3BlcnRpZXMgPSBhVGFyZ2V0UHJvcGVydGllcy5yZWR1Y2UoZnVuY3Rpb24gKG1Qcm9wOiB7IFtrZXk6IHN0cmluZ106IFByb3BlcnR5SW5mbyB9LCBvUHJvcDogUHJvcGVydHlJbmZvKSB7XG5cdFx0XHRcdFx0bVByb3Bbb1Byb3AubmFtZV0gPSBvUHJvcDtcblx0XHRcdFx0XHRyZXR1cm4gbVByb3A7XG5cdFx0XHRcdH0sIHt9KSxcblx0XHRcdFx0bUFnZ3JlZ2F0ZWRQcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXHRcdFx0Y29uc3QgY2hhcnRFbnRpdHlUeXBlQW5ub3RhdGlvbnMgPSBvQ29udHJvbFxuXHRcdFx0XHQuZ2V0TW9kZWwoKSFcblx0XHRcdFx0LmdldE1ldGFNb2RlbCgpIVxuXHRcdFx0XHQuZ2V0T2JqZWN0KG9Db250cm9sLmRhdGEoXCJ0YXJnZXRDb2xsZWN0aW9uUGF0aFwiKSArIFwiL1wiKTtcblx0XHRcdGlmIChvQ29udHJvbC5pc0EoXCJzYXAudWkubWRjLkNoYXJ0XCIpKSB7XG5cdFx0XHRcdGNvbnN0IG9FbnRpdHlTZXRBbm5vdGF0aW9ucyA9IG9Db250cm9sXG5cdFx0XHRcdFx0XHQuZ2V0TW9kZWwoKSFcblx0XHRcdFx0XHRcdC5nZXRNZXRhTW9kZWwoKSFcblx0XHRcdFx0XHRcdC5nZXRPYmplY3QoYCR7b0NvbnRyb2wuZGF0YShcInRhcmdldENvbGxlY3Rpb25QYXRoXCIpfUBgKSxcblx0XHRcdFx0XHRtQ2hhcnRDdXN0b21BZ2dyZWdhdGVzID0gZ2V0QWxsQ3VzdG9tQWdncmVnYXRlcyhvRW50aXR5U2V0QW5ub3RhdGlvbnMpO1xuXHRcdFx0XHRPYmplY3Qua2V5cyhtQ2hhcnRDdXN0b21BZ2dyZWdhdGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChzQWdncmVnYXRlTmFtZTogc3RyaW5nKSB7XG5cdFx0XHRcdFx0aWYgKCFtQWdncmVnYXRlZFByb3BlcnRpZXNbc0FnZ3JlZ2F0ZU5hbWVdKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvQWdncmVnYXRlID0gbUNoYXJ0Q3VzdG9tQWdncmVnYXRlc1tzQWdncmVnYXRlTmFtZV07XG5cdFx0XHRcdFx0XHRtQWdncmVnYXRlZFByb3BlcnRpZXNbc0FnZ3JlZ2F0ZU5hbWVdID0gb0FnZ3JlZ2F0ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGNvbnN0IHNQcm9wZXJ0eSBpbiBtQ29uZGl0aW9ucykge1xuXHRcdFx0XHQvLyBOZWVkIHRvIGNoZWNrIHRoZSBsZW5ndGggb2YgbUNvbmRpdGlvbnNbc1Byb3BlcnR5XSBzaW5jZSBwcmV2aW91cyBmaWx0ZXJlZCBwcm9wZXJ0aWVzIGFyZSBrZXB0IGludG8gbUNvbmRpdGlvbnMgd2l0aCBlbXB0eSBhcnJheSBhcyBkZWZpbml0aW9uXG5cdFx0XHRcdGNvbnN0IGFDb25kaXRpb25Qcm9wZXJ0eSA9IG1Db25kaXRpb25zW3NQcm9wZXJ0eV07XG5cdFx0XHRcdGxldCB0eXBlQ2hlY2sgPSB0cnVlO1xuXHRcdFx0XHRpZiAoY2hhcnRFbnRpdHlUeXBlQW5ub3RhdGlvbnNbc1Byb3BlcnR5XSAmJiBvRmlsdGVyQmFyRW50aXR5U2V0QW5ub3RhdGlvbnNbc1Byb3BlcnR5XSkge1xuXHRcdFx0XHRcdHR5cGVDaGVjayA9IGNoYXJ0RW50aXR5VHlwZUFubm90YXRpb25zW3NQcm9wZXJ0eV1bXCIkVHlwZVwiXSA9PT0gb0ZpbHRlckJhckVudGl0eVNldEFubm90YXRpb25zW3NQcm9wZXJ0eV1bXCIkVHlwZVwiXTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0QXJyYXkuaXNBcnJheShhQ29uZGl0aW9uUHJvcGVydHkpICYmXG5cdFx0XHRcdFx0YUNvbmRpdGlvblByb3BlcnR5Lmxlbmd0aCA+IDAgJiYgLy9oYXMgYSBmaWx0ZXIgdmFsdWVcblx0XHRcdFx0XHQoKCghbVRhcmdldFByb3BlcnRpZXNbc1Byb3BlcnR5XSB8fCAvLyBubyB0YXJnZXQgcHJvcGVydHkgZm91bmQgYnkgcHJvcGVydHkgbmFtZVxuXHRcdFx0XHRcdFx0KG1UYXJnZXRQcm9wZXJ0aWVzW3NQcm9wZXJ0eV0uaXNDdXN0b21GaWx0ZXIgJiYgbVRhcmdldFByb3BlcnRpZXNbc1Byb3BlcnR5XS5hbm5vdGF0aW9uUGF0aCA9PSB1bmRlZmluZWQpIHx8IC8vIGN1c3RvbSBmaWx0ZXIgdGhhdCBpcyBub3QgcGFydCBvZiB0aGUgY3VycmVudCBlbnRpdHlTZXRcblx0XHRcdFx0XHRcdChtVGFyZ2V0UHJvcGVydGllc1tzUHJvcGVydHldICYmICF0eXBlQ2hlY2spKSAmJlxuXHRcdFx0XHRcdFx0KCFiSXNGaWx0ZXJCYXJFbnRpdHlUeXBlIHx8IChzUHJvcGVydHkgPT09IFwiJGVkaXRTdGF0ZVwiICYmIChiSXNDaGFydCB8fCBiSXNUcmVlVGFibGUgfHwgYklzQW5hbHl0aWNhbFRhYmxlKSkpKSB8fCAvL3R5cGUgZG9lcyBub3QgbWF0Y2ggT1IgJGVkaXRTdGF0ZSBvbiBzZWNvbmRhcnkgZW50aXR5IHNldFxuXHRcdFx0XHRcdFx0bUFnZ3JlZ2F0ZWRQcm9wZXJ0aWVzW3NQcm9wZXJ0eV0pXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGFOb3RBcHBsaWNhYmxlLnB1c2goc1Byb3BlcnR5LnJlcGxhY2UoL1srfCpdL2csIFwiXCIpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoIWJFbmFibGVTZWFyY2ggJiYgb0ZpbHRlckJhci5nZXRTZWFyY2goKSkge1xuXHRcdFx0YU5vdEFwcGxpY2FibGUucHVzaChcIiRzZWFyY2hcIik7XG5cdFx0fVxuXHRcdHJldHVybiBhTm90QXBwbGljYWJsZTtcblx0fSxcblxuXHQvKipcblx0ICogR2V0cyB0aGUgdmFsdWUgbGlzdCBpbmZvcm1hdGlvbiBvZiBhIHByb3BlcnR5IGFzIGRlZmluZWQgZm9yIGEgZ2l2ZW4gZmlsdGVyIGJhci5cblx0ICogQHBhcmFtIGZpbHRlckJhciBUaGUgZmlsdGVyIGJhciB0byBnZXQgdGhlIHZhbHVlIGxpc3QgaW5mb3JtYXRpb24gZm9yXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgVGhlIHByb3BlcnR5IHRvIGdldCB0aGUgdmFsdWUgbGlzdCBpbmZvcm1hdGlvbiBmb3Jcblx0ICogQHJldHVybnMgVGhlIHZhbHVlIGxpc3QgaW5mb3JtYXRpb25cblx0ICovXG5cdGFzeW5jIF9nZXRWYWx1ZUxpc3RJbmZvKGZpbHRlckJhcjogRmlsdGVyQmFyLCBwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IFByb21pc2U8QW5ub3RhdGlvblZhbHVlTGlzdFR5cGUgfCB1bmRlZmluZWQ+IHtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSBmaWx0ZXJCYXIuZ2V0TW9kZWwoKT8uZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWw7XG5cblx0XHRpZiAoIW1ldGFNb2RlbCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHRjb25zdCBlbnRpdHlUeXBlID0gZmlsdGVyQmFyLmRhdGEoXCJlbnRpdHlUeXBlXCIpID8/IFwiXCI7XG5cdFx0Y29uc3QgdmFsdWVMaXN0SW5mb3MgPSBhd2FpdCBtZXRhTW9kZWwucmVxdWVzdFZhbHVlTGlzdEluZm8oZW50aXR5VHlwZSArIHByb3BlcnR5TmFtZSwgdHJ1ZSkuY2F0Y2goKCkgPT4gbnVsbCk7XG5cdFx0cmV0dXJuIHZhbHVlTGlzdEluZm9zPy5bXCJcIl07XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHZhbHVlIGxpc3Qgb2YgYWxsIHRoZSBmaWx0ZXIgcHJvcGVydGllcy5cblx0ICogQHBhcmFtIGZpbHRlckJhciBJbnN0YW5jZSBvZiBGaWx0ZXJCYXJcblx0ICogQHJldHVybnMgQXJyYXkgb2YgZmlsdGVyIHByb3BlcnRpZXMgZm9yIEZpbHRlckJhclxuXHQgKi9cblx0Z2V0RmlsdGVyUHJvcGVydHlJbmZvKGZpbHRlckJhcjogSUZpbHRlckNvbnRyb2wpOiBQcm9wZXJ0eUluZm9bXSB7XG5cdFx0bGV0IF9wcm9wZXJ0eUluZm8gPSBmaWx0ZXJCYXIuZGF0YShcImZlRmlsdGVySW5mb1wiKTtcblx0XHRpZiAodHlwZW9mIF9wcm9wZXJ0eUluZm8gPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdF9wcm9wZXJ0eUluZm8gPSBKU09OLnBhcnNlKF9wcm9wZXJ0eUluZm8pO1xuXHRcdH1cblx0XHRyZXR1cm4gX3Byb3BlcnR5SW5mbyB8fCBbXTtcblx0fSxcblxuXHQvKipcblx0ICogR2V0cyB0aGUge0BsaW5rIENvbmRpdGlvblZhbGlkYXRlZH0gc3RhdGUgZm9yIGEgc2luZ2xlIHZhbHVlLiBUaGlzIGRlY2lkZXMgd2hldGhlciB0aGUgdmFsdWUgaXMgdHJlYXRlZCBhcyBhIHNlbGVjdGVkIHZhbHVlXG5cdCAqIGluIGEgdmFsdWUgaGVscCwgbWVhbmluZyB0aGF0IGl0cyBkZXNjcmlwdGlvbiBpcyBsb2FkZWQgYW5kIGRpc3BsYXllZCBpZiBleGlzdGluZywgb3Igd2hldGhlciBpdCBpcyBkaXNwbGF5ZWQgYXMgYVxuXHQgKiBjb25kaXRpb24gKGUuZy4gXCI9MVwiKS5cblx0ICpcblx0ICogVmFsdWVzIGZvciBwcm9wZXJ0aWVzIHdpdGhvdXQgdmFsdWUgbGlzdCBpbmZvIGFyZSBhbHdheXMgdHJlYXRlZCBhcyB7QGxpbmsgQ29uZGl0aW9uVmFsaWRhdGVkLk5vdFZhbGlkYXRlZH0uXG5cdCAqIEBwYXJhbSB2YWx1ZUxpc3RJbmZvIFRoZSB2YWx1ZSBsaXN0IGluZm8gZnJvbSB0aGUge0BsaW5rIE1ldGFNb2RlbH1cblx0ICogQHBhcmFtIHByb3BlcnR5TmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHlcblx0ICogQHBhcmFtIHZhbHVlIFRoZSBzaW5nbGUgdmFsdWUgdG8gZ2V0IHRoZSBzdGF0ZSBmb3Jcblx0ICogQHJldHVybnMgVGhlIHtAbGluayBDb25kaXRpb25WYWxpZGF0ZWR9IHN0YXRlIGZvciB0aGUgdmFsdWVcblx0ICovXG5cdF9nZXRDb25kaXRpb25WYWxpZGF0ZWQ6IGFzeW5jIGZ1bmN0aW9uIChcblx0XHR2YWx1ZUxpc3RJbmZvOiBBbm5vdGF0aW9uVmFsdWVMaXN0VHlwZSB8IHVuZGVmaW5lZCxcblx0XHRwcm9wZXJ0eU5hbWU6IHN0cmluZyxcblx0XHR2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWRcblx0KTogUHJvbWlzZTxDb25kaXRpb25WYWxpZGF0ZWQ+IHtcblx0XHRpZiAoIXZhbHVlTGlzdEluZm8pIHtcblx0XHRcdHJldHVybiBDb25kaXRpb25WYWxpZGF0ZWQuTm90VmFsaWRhdGVkO1xuXHRcdH1cblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCB2YWx1ZUxpc3RQcm9wZXJ0aWVzID0gdmFsdWVMaXN0SW5mby5QYXJhbWV0ZXJzLmZpbHRlcigocGFyYW1ldGVyKSA9PlxuXHRcdFx0XHRbQ29tbW9uQW5ub3RhdGlvblR5cGVzLlZhbHVlTGlzdFBhcmFtZXRlckluT3V0LnZhbHVlT2YoKSwgQ29tbW9uQW5ub3RhdGlvblR5cGVzLlZhbHVlTGlzdFBhcmFtZXRlck91dC52YWx1ZU9mKCldLmluY2x1ZGVzKFxuXHRcdFx0XHRcdHBhcmFtZXRlci4kVHlwZVxuXHRcdFx0XHQpXG5cdFx0XHQpXG5cdFx0XHRcdC5maWx0ZXIoKHBhcmFtZXRlcikgPT4gcGFyYW1ldGVyLkxvY2FsRGF0YVByb3BlcnR5Py4kUHJvcGVydHlQYXRoID09PSBwcm9wZXJ0eU5hbWUpXG5cdFx0XHRcdC5tYXAoKHBhcmFtZXRlcikgPT4gcGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5KTtcblxuXHRcdFx0Y29uc3QgdmFsdWVMaXN0UHJvcGVydHlQYXRoID0gdmFsdWVMaXN0UHJvcGVydGllc1swXSA/PyBwcm9wZXJ0eU5hbWU7XG5cblx0XHRcdGNvbnN0IGZpbHRlciA9IG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRwYXRoOiB2YWx1ZUxpc3RQcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5FUSxcblx0XHRcdFx0dmFsdWUxOiB2YWx1ZVxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBsaXN0QmluZGluZyA9IHZhbHVlTGlzdEluZm8uJG1vZGVsLmJpbmRMaXN0KGAvJHt2YWx1ZUxpc3RJbmZvLkNvbGxlY3Rpb25QYXRofWAsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmaWx0ZXIsIHtcblx0XHRcdFx0JHNlbGVjdDogdmFsdWVMaXN0UHJvcGVydHlQYXRoXG5cdFx0XHR9KTtcblxuXHRcdFx0Y29uc3QgdmFsdWVFeGlzdHMgPSAoYXdhaXQgbGlzdEJpbmRpbmcucmVxdWVzdENvbnRleHRzKCkpLmxlbmd0aCA+IDA7XG5cdFx0XHRpZiAodmFsdWVFeGlzdHMpIHtcblx0XHRcdFx0cmV0dXJuIENvbmRpdGlvblZhbGlkYXRlZC5WYWxpZGF0ZWQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gQ29uZGl0aW9uVmFsaWRhdGVkLk5vdFZhbGlkYXRlZDtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0TG9nLmVycm9yKFwiRmlsdGVyVXRpbHM6IEVycm9yIHdoaWxlIHJldHJpZXZpbmcgQ29uZGl0aW9uVmFsaWRhdGVkXCIsIGVycm9yIGFzIEVycm9yIHwgc3RyaW5nKTtcblx0XHRcdHJldHVybiBDb25kaXRpb25WYWxpZGF0ZWQuTm90VmFsaWRhdGVkO1xuXHRcdH1cblx0fSxcblx0LyoqXG5cdCAqIENsZWFyIHRoZSBmaWx0ZXIgdmFsdWUgZm9yIGEgc3BlY2lmaWMgcHJvcGVydHkgaW4gdGhlIGZpbHRlciBiYXIuXG5cdCAqIFRoaXMgaXMgYSBwcmVyZXF1aXNpdGUgYmVmb3JlIG5ldyB2YWx1ZXMgY2FuIGJlIHNldCBjbGVhbmx5LlxuXHQgKiBAcGFyYW0gZmlsdGVyQmFyIFRoZSBmaWx0ZXIgYmFyIHRoYXQgY29udGFpbnMgdGhlIGZpbHRlciBmaWVsZFxuXHQgKiBAcGFyYW0gY29uZGl0aW9uUGF0aCBUaGUgcGF0aCB0byB0aGUgcHJvcGVydHkgYXMgYSBjb25kaXRpb24gcGF0aFxuXHQgKi9cblx0YXN5bmMgX2NsZWFyRmlsdGVyVmFsdWUoZmlsdGVyQmFyOiBGaWx0ZXJCYXIsIGNvbmRpdGlvblBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IG9TdGF0ZSA9IGF3YWl0IFN0YXRlVXRpbC5yZXRyaWV2ZUV4dGVybmFsU3RhdGUoZmlsdGVyQmFyKTtcblx0XHRpZiAob1N0YXRlLmZpbHRlcltjb25kaXRpb25QYXRoXSkge1xuXHRcdFx0b1N0YXRlLmZpbHRlcltjb25kaXRpb25QYXRoXS5mb3JFYWNoKChvQ29uZGl0aW9uOiBDb25kaXRpb25PYmplY3QpID0+IHtcblx0XHRcdFx0b0NvbmRpdGlvbi5maWx0ZXJlZCA9IGZhbHNlO1xuXHRcdFx0fSk7XG5cdFx0XHRhd2FpdCBTdGF0ZVV0aWwuYXBwbHlFeHRlcm5hbFN0YXRlKGZpbHRlckJhciwgeyBmaWx0ZXI6IHsgW2NvbmRpdGlvblBhdGhdOiBvU3RhdGUuZmlsdGVyW2NvbmRpdGlvblBhdGhdIH0gfSk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIGZpbHRlciB2YWx1ZXMgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eSBpbiB0aGUgZmlsdGVyIGJhci5cblx0ICogVGhlIGZpbHRlciB2YWx1ZXMgY2FuIGJlIGVpdGhlciBhIHNpbmdsZSB2YWx1ZSBvciBhbiBhcnJheSBvZiB2YWx1ZXMuXG5cdCAqIEVhY2ggZmlsdGVyIHZhbHVlIG11c3QgYmUgcmVwcmVzZW50ZWQgYXMgYSBwcmltaXRpdmUgdmFsdWUuXG5cdCAqIEBwYXJhbSBvRmlsdGVyQmFyIFRoZSBmaWx0ZXIgYmFyIHRoYXQgY29udGFpbnMgdGhlIGZpbHRlciBmaWVsZFxuXHQgKiBAcGFyYW0gc0NvbmRpdGlvblBhdGggVGhlIHBhdGggdG8gdGhlIHByb3BlcnR5IGFzIGEgY29uZGl0aW9uIHBhdGhcblx0ICogQHBhcmFtIGFyZ3MgTGlzdCBvZiBvcHRpb25hbCBwYXJhbWV0ZXJzXG5cdCAqICBbc09wZXJhdG9yXSBUaGUgb3BlcmF0b3IgdG8gYmUgdXNlZCAtIGlmIG5vdCBzZXQsIHRoZSBkZWZhdWx0IG9wZXJhdG9yIChFUSkgd2lsbCBiZSB1c2VkXG5cdCAqICBbdlZhbHVlc10gVGhlIHZhbHVlcyB0byBiZSBhcHBsaWVkIC0gaWYgc09wZXJhdG9yIGlzIG1pc3NpbmcsIHZWYWx1ZXMgaXMgdXNlZCBhcyAzcmQgcGFyYW1ldGVyXG5cdCAqL1xuXHRzZXRGaWx0ZXJWYWx1ZXM6IGFzeW5jIGZ1bmN0aW9uIChvRmlsdGVyQmFyOiBGaWx0ZXJCYXIgfCB1bmRlZmluZWQsIHNDb25kaXRpb25QYXRoOiBzdHJpbmcsIC4uLmFyZ3M6IHVua25vd25bXSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGF3YWl0IHRoaXMuX3NldEZpbHRlclZhbHVlcyhvRmlsdGVyQmFyLCBmYWxzZSwgc0NvbmRpdGlvblBhdGgsIC4uLmFyZ3MpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBBZGQgdGhlIGZpbHRlciB2YWx1ZXMgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eSBpbiB0aGUgZmlsdGVyIGJhci5cblx0ICpcblx0ICogVGhlIGZpbHRlciB2YWx1ZXMgY2FuIGJlIGVpdGhlciBhIHNpbmdsZSB2YWx1ZSBvciBhbiBhcnJheSBvZiB2YWx1ZXMuXG5cdCAqIEVhY2ggZmlsdGVyIHZhbHVlIG11c3QgYmUgcmVwcmVzZW50ZWQgYXMgYSBwcmltaXRpdmUgdmFsdWUuXG5cdCAqIEBwYXJhbSBmaWx0ZXJCYXIgVGhlIGZpbHRlciBiYXIgdGhhdCBjb250YWlucyB0aGUgZmlsdGVyIGZpZWxkXG5cdCAqIEBwYXJhbSBjb25kaXRpb25QYXRoIFRoZSBwYXRoIHRvIHRoZSBwcm9wZXJ0eSBhcyBhIGNvbmRpdGlvbiBwYXRoXG5cdCAqIEBwYXJhbSBhcmdzIExpc3Qgb2Ygb3B0aW9uYWwgcGFyYW1ldGVyc1xuXHQgKi9cblx0YWRkRmlsdGVyVmFsdWVzOiBhc3luYyBmdW5jdGlvbiAoZmlsdGVyQmFyOiBGaWx0ZXJCYXIgfCB1bmRlZmluZWQsIGNvbmRpdGlvblBhdGg6IHN0cmluZywgLi4uYXJnczogdW5rbm93bltdKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0YXdhaXQgdGhpcy5fc2V0RmlsdGVyVmFsdWVzKGZpbHRlckJhciwgdHJ1ZSwgY29uZGl0aW9uUGF0aCwgLi4uYXJncyk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldCBwcm9wZXJ0eSBwYXRoIGZyb20gY29uZGl0aW9uIHBhdGguXG5cdCAqXG5cdCAqIEl0IHJlbW92ZXMgdGhlIGNvbmRpdGlvbiBwYXRoIHNwZWNpZmljIGNoYXJhY3RlcnMgbGlrZSBcIitcIiBhbmQgXCIqXCIuXG5cdCAqIEBwYXJhbSBjb25kaXRpb25QYXRoIFRoZSBwYXRoIHRvIHRoZSBwcm9wZXJ0eSBhcyBhIGNvbmRpdGlvbiBwYXRoXG5cdCAqIEByZXR1cm5zIFRoZSBwcm9wZXJ0eSBwYXRoIGRlcml2ZWQgZnJvbSB0aGUgY29uZGl0aW9uIHBhdGhcblx0ICovXG5cdGdldFByb3BlcnR5UGF0aEZyb21Db25kaXRpb25QYXRoKGNvbmRpdGlvblBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGNvbmRpdGlvblBhdGgucmVwbGFjZShDT05ESVRJT05fUEFUSF9UT19QUk9QRVJUWV9QQVRIX1JFR0VYLCBcIlwiKTtcblx0fSxcblxuXHQvKipcblx0ICogR2V0IG1haW4gZmlsdGVyIGJhciBmb3IgdGhlIGdpdmVuIHAxM24gYWRhcHRhdGlvbiBmaWx0ZXIgY29udHJvbC5cblx0ICogQHBhcmFtIHBvdGVudGlhbEZpbHRlckJhciBFeHBlY3RlZCBpbnN0YW5jZSBvZiBGaWx0ZXJCYXIgb3IgQWRhcHRhdGlvbkZpbHRlckJhci5cblx0ICogQHJldHVybnMgVGhlIG1haW4gZmlsdGVyIGJhciBpbnN0YW5jZSBpZiBmb3VuZCwgb3RoZXJ3aXNlIHVuZGVmaW5lZC5cblx0ICovXG5cdGdldEZpbHRlckJhckZvckFkYXB0YXRpb25Db250cm9sKHBvdGVudGlhbEZpbHRlckJhcjogTWFuYWdlZE9iamVjdCB8IG51bGwpOiBGaWx0ZXJCYXIgfCBudWxsIHtcblx0XHR3aGlsZSAocG90ZW50aWFsRmlsdGVyQmFyICYmICFwb3RlbnRpYWxGaWx0ZXJCYXIuaXNBPEZpbHRlckJhcj4oXCJzYXAudWkubWRjLkZpbHRlckJhclwiKSkge1xuXHRcdFx0cG90ZW50aWFsRmlsdGVyQmFyID0gcG90ZW50aWFsRmlsdGVyQmFyLmdldFBhcmVudCgpO1xuXHRcdH1cblx0XHRyZXR1cm4gcG90ZW50aWFsRmlsdGVyQmFyO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGRhdGEgbW9kZWwgb2JqZWN0IHBhdGggZm9yIGEgcHJvcGVydHkgaW4gdGhlIGZpbHRlciBiYXIuXG5cdCAqXG5cdCAqIFRoaXMgaXMgdXNlZCB0byByZXRyaWV2ZSB0aGUgZGF0YSBtb2RlbCBvYmplY3QgcGF0aCBmb3IgYSBzcGVjaWZpYyBwcm9wZXJ0eSBpbiB0aGUgZmlsdGVyIGJhci5cblx0ICogQHBhcmFtIGZpbHRlckJhciBUaGUgZmlsdGVyIGJhciB0aGF0IGNvbnRhaW5zIHRoZSBwcm9wZXJ0eVxuXHQgKiBAcGFyYW0gcHJvcGVydHlQYXRoIFRoZSBwYXRoIHRvIHRoZSBwcm9wZXJ0eVxuXHQgKiBAcmV0dXJucyBUaGUgZGF0YSBtb2RlbCBvYmplY3QgcGF0aCBmb3IgdGhlIHByb3BlcnR5XG5cdCAqL1xuXHRnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yUHJvcGVydHkoZmlsdGVyQmFyOiBGaWx0ZXJCYXIsIHByb3BlcnR5UGF0aDogc3RyaW5nKTogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4gfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGVudGl0eVR5cGVQYXRoID0gRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGE8c3RyaW5nPihmaWx0ZXJCYXIsIFwiZW50aXR5VHlwZVwiKTtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSBmaWx0ZXJCYXIuZ2V0TW9kZWwoKT8uZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWw7XG5cdFx0cmV0dXJuIE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8UHJvcGVydHk+KFxuXHRcdFx0bWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAke2VudGl0eVR5cGVQYXRofSR7cHJvcGVydHlQYXRofWApISxcblx0XHRcdG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHtlbnRpdHlUeXBlUGF0aH1gKSFcblx0XHQpO1xuXHR9LFxuXG5cdF9zZXRGaWx0ZXJWYWx1ZXM6IGFzeW5jIGZ1bmN0aW9uIChcblx0XHRvRmlsdGVyQmFyOiBGaWx0ZXJCYXIgfCB1bmRlZmluZWQsXG5cdFx0YXBwZW5kOiBib29sZWFuLFxuXHRcdHNDb25kaXRpb25QYXRoOiBzdHJpbmcsXG5cdFx0Li4uYXJnczogdW5rbm93bltdXG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGxldCBzT3BlcmF0b3IgPSBhcmdzPy5bMF0gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRcdGxldCB2VmFsdWVzID0gYXJncz8uWzFdIGFzIHVuZGVmaW5lZCB8IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBzdHJpbmdbXSB8IG51bWJlcltdIHwgYm9vbGVhbltdO1xuXG5cdFx0Ly8gRG8gbm90aGluZyB3aGVuIHRoZSBmaWx0ZXIgYmFyIGlzIGhpZGRlblxuXHRcdGlmICghb0ZpbHRlckJhcikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIGNvbW1vbiBmaWx0ZXIgT3BlcmF0b3JzIG5lZWQgYSB2YWx1ZS4gRG8gbm90aGluZyBpZiB0aGlzIHZhbHVlIGlzIHVuZGVmaW5lZFxuXHRcdC8vIEJDUDogMjI3MDEzNTI3NFxuXHRcdGlmIChcblx0XHRcdGFyZ3MubGVuZ3RoID09PSAyICYmXG5cdFx0XHQodlZhbHVlcyA9PT0gdW5kZWZpbmVkIHx8IHZWYWx1ZXMgPT09IG51bGwgfHwgdlZhbHVlcyA9PT0gXCJcIikgJiZcblx0XHRcdHNPcGVyYXRvciAmJlxuXHRcdFx0T2JqZWN0LmtleXMoRmlsdGVyT3BlcmF0b3IpLmluY2x1ZGVzKHNPcGVyYXRvcilcblx0XHQpIHtcblx0XHRcdExvZy53YXJuaW5nKGBBbiBlbXB0eSBmaWx0ZXIgdmFsdWUgY2Fubm90IGJlIGFwcGxpZWQgd2l0aCB0aGUgJHtzT3BlcmF0b3J9IG9wZXJhdG9yYCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gVGhlIDR0aCBwYXJhbWV0ZXIgaXMgb3B0aW9uYWw7IGlmIHNPcGVyYXRvciBpcyBtaXNzaW5nLCB2VmFsdWVzIGlzIHVzZWQgYXMgM3JkIHBhcmFtZXRlclxuXHRcdC8vIFRoaXMgZG9lcyBub3QgYXBwbHkgZm9yIHNlbWFudGljIGRhdGVzLCBhcyB0aGVzZSBkbyBub3QgcmVxdWlyZSB2VmFsdWVzIChleGNlcHRpb246IFwiTEFTVERBWVNcIiwgMylcblx0XHRpZiAodlZhbHVlcyA9PT0gdW5kZWZpbmVkICYmICFTZW1hbnRpY0RhdGVPcGVyYXRvcnMuZ2V0U2VtYW50aWNEYXRlT3BlcmF0aW9ucygpLmluY2x1ZGVzKHNPcGVyYXRvciB8fCBcIlwiKSkge1xuXHRcdFx0dlZhbHVlcyA9IHNPcGVyYXRvciA/PyBbXTtcblx0XHRcdHNPcGVyYXRvciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBJZiBzT3BlcmF0b3IgaXMgbm90IHNldCwgdXNlIEVRIGFzIGRlZmF1bHRcblx0XHRpZiAoIXNPcGVyYXRvcikge1xuXHRcdFx0c09wZXJhdG9yID0gRmlsdGVyT3BlcmF0b3IuRVE7XG5cdFx0fVxuXG5cdFx0Ly8gU3VwcG9ydGVkIGFycmF5IHR5cGVzOlxuXHRcdC8vICAtIFNpbmdsZSBWYWx1ZXM6XHRcIjJcIiB8IFtcIjJcIl1cblx0XHQvLyAgLSBNdWx0aXBsZSBWYWx1ZXM6XHRbXCIyXCIsIFwiM1wiXVxuXHRcdC8vICAtIFJhbmdlczpcdFx0XHRbXCIyXCIsXCIzXCJdXG5cdFx0Ly8gVW5zdXBwb3J0ZWQgYXJyYXkgdHlwZXM6XG5cdFx0Ly8gIC0gTXVsdGlwbGUgUmFuZ2VzOlx0W1tcIjJcIixcIjNcIl1dIHwgW1tcIjJcIixcIjNcIl0sW1wiNFwiLFwiNVwiXV1cblx0XHRjb25zdCBzdXBwb3J0ZWRWYWx1ZVR5cGVzID0gW1wic3RyaW5nXCIsIFwibnVtYmVyXCIsIFwiYm9vbGVhblwiXTtcblx0XHRpZiAoXG5cdFx0XHR2VmFsdWVzICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdCgoIUFycmF5LmlzQXJyYXkodlZhbHVlcykgJiYgIXN1cHBvcnRlZFZhbHVlVHlwZXMuaW5jbHVkZXModHlwZW9mIHZWYWx1ZXMpKSB8fFxuXHRcdFx0XHQoQXJyYXkuaXNBcnJheSh2VmFsdWVzKSAmJiB2VmFsdWVzLmxlbmd0aCA+IDAgJiYgIXN1cHBvcnRlZFZhbHVlVHlwZXMuaW5jbHVkZXModHlwZW9mIHZWYWx1ZXNbMF0pKSlcblx0XHQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0XCJGaWx0ZXJVdGlscy5qcyNfc2V0RmlsdGVyVmFsdWVzOiBGaWx0ZXIgdmFsdWUgbm90IHN1cHBvcnRlZDsgb25seSBwcmltaXRpdmUgdmFsdWVzIG9yIGFuIGFycmF5IHRoZXJlb2YgY2FuIGJlIHVzZWQuXCJcblx0XHRcdCk7XG5cdFx0fVxuXHRcdGxldCB2YWx1ZXM6IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbClbXSB8IHVuZGVmaW5lZDtcblx0XHRpZiAodlZhbHVlcyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YWx1ZXMgPSBBcnJheS5pc0FycmF5KHZWYWx1ZXMpID8gdlZhbHVlcyA6IFt2VmFsdWVzXTtcblx0XHR9XG5cblx0XHRjb25zdCBmaWx0ZXI6IHsgW2tleTogc3RyaW5nXTogQ29uZGl0aW9uT2JqZWN0W10gfSA9IHt9O1xuXHRcdGlmIChzQ29uZGl0aW9uUGF0aCkge1xuXHRcdFx0Ly8gV2UgcmVjcmVhdGUgY29uZGl0aW9uUGF0aCB0byBlbnN1cmUgaXQgaXMgaW4gcmlnaHQgZm9ybWF0XG5cdFx0XHQvLyBlLmcuIElmIFwiX0l0ZW0vTWF0ZXJpYWxcIiBpcyBzZW50IGFzIGNvbmRpdGlvbiBwYXRoIHdoZXJlIF9JdGVtIGlzIDE6biBtdWx0aXBsaWNpdHkgLT4gXCJfSXRlbSovTWF0ZXJpYWxcIlxuXHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoID0gb0ZpbHRlclV0aWxzLmdldFByb3BlcnR5UGF0aEZyb21Db25kaXRpb25QYXRoKHNDb25kaXRpb25QYXRoKTtcblx0XHRcdGNvbnN0IG1haW5GaWx0ZXJCYXJDb250cm9sID0gb0ZpbHRlclV0aWxzLmdldEZpbHRlckJhckZvckFkYXB0YXRpb25Db250cm9sKG9GaWx0ZXJCYXIpID8/IG9GaWx0ZXJCYXI7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVRhcmdldE9iamVjdFBhdGggPSBvRmlsdGVyVXRpbHMuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclByb3BlcnR5KG1haW5GaWx0ZXJCYXJDb250cm9sLCBwcm9wZXJ0eVBhdGgpO1xuXHRcdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gcHJvcGVydHlUYXJnZXRPYmplY3RQYXRoPy50YXJnZXRPYmplY3Q/Lm5hbWUgPz8gcHJvcGVydHlQYXRoO1xuXHRcdFx0c0NvbmRpdGlvblBhdGggPVxuXHRcdFx0XHQocHJvcGVydHlUYXJnZXRPYmplY3RQYXRoID8gZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aChwcm9wZXJ0eVRhcmdldE9iamVjdFBhdGgsIGZhbHNlLCB0cnVlKSA6IHVuZGVmaW5lZCkgPz9cblx0XHRcdFx0c0NvbmRpdGlvblBhdGg7XG5cdFx0XHQvLyBHZXQgdGhlIHZhbHVlIGxpc3QgaW5mbyBvZiB0aGUgcHJvcGVydHkgdG8gbGF0ZXIgY2hlY2sgd2hldGhlciB0aGUgdmFsdWVzIGV4aXN0XG5cdFx0XHRjb25zdCB2YWx1ZUxpc3RJbmZvID0gYXdhaXQgdGhpcy5fZ2V0VmFsdWVMaXN0SW5mbyhtYWluRmlsdGVyQmFyQ29udHJvbCwgcHJvcGVydHlQYXRoKTtcblx0XHRcdGlmICh2YWx1ZXMgJiYgdmFsdWVzLmxlbmd0aCkge1xuXHRcdFx0XHRpZiAoc09wZXJhdG9yID09PSBGaWx0ZXJPcGVyYXRvci5CVCkge1xuXHRcdFx0XHRcdC8vIFRoZSBvcGVyYXRvciBCVCByZXF1aXJlcyBvbmUgY29uZGl0aW9uIHdpdGggYm90aCB0aHJlc2hvbGRzXG5cdFx0XHRcdFx0ZmlsdGVyW3NDb25kaXRpb25QYXRoXSA9IFtDb25kaXRpb24uY3JlYXRlQ29uZGl0aW9uKHNPcGVyYXRvciwgdmFsdWVzLCBudWxsLCBudWxsLCBDb25kaXRpb25WYWxpZGF0ZWQuTm90VmFsaWRhdGVkKV07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gUmVndWxhciBzaW5nbGUgYW5kIG11bHRpIHZhbHVlIGNvbmRpdGlvbnMsIGlmIHRoZXJlIGFyZSBubyB2YWx1ZXMsIHdlIGRvIG5vdCB3YW50IGFueSBjb25kaXRpb25zXG5cdFx0XHRcdFx0ZmlsdGVyW3NDb25kaXRpb25QYXRoXSA9IGF3YWl0IFByb21pc2UuYWxsKFxuXHRcdFx0XHRcdFx0dmFsdWVzLm1hcChhc3luYyAodmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdFx0Ly8gRm9yIHRoZSBFUSBjYXNlLCB0ZWxsIE1EQyB0byB2YWxpZGF0ZSB0aGUgdmFsdWUgKGUuZy4gZGlzcGxheSB0aGUgZGVzY3JpcHRpb24pLCBpZiBpdCBleGlzdHMgaW4gdGhlIGFzc29jaWF0ZWQgZW50aXR5LCBvdGhlcndpc2UgbmV2ZXIgdmFsaWRhdGVcblx0XHRcdFx0XHRcdFx0Y29uc3QgY29uZGl0aW9uVmFsaWRhdGVkU3RhdHVzID1cblx0XHRcdFx0XHRcdFx0XHRzT3BlcmF0b3IgPT09IEZpbHRlck9wZXJhdG9yLkVRXG5cdFx0XHRcdFx0XHRcdFx0XHQ/IGF3YWl0IHRoaXMuX2dldENvbmRpdGlvblZhbGlkYXRlZCh2YWx1ZUxpc3RJbmZvLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKVxuXHRcdFx0XHRcdFx0XHRcdFx0OiBDb25kaXRpb25WYWxpZGF0ZWQuTm90VmFsaWRhdGVkO1xuXG5cdFx0XHRcdFx0XHRcdHJldHVybiBDb25kaXRpb24uY3JlYXRlQ29uZGl0aW9uKHNPcGVyYXRvciEsIFt2YWx1ZV0sIG51bGwsIG51bGwsIGNvbmRpdGlvblZhbGlkYXRlZFN0YXR1cyk7XG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoU2VtYW50aWNEYXRlT3BlcmF0b3JzLmdldFNlbWFudGljRGF0ZU9wZXJhdGlvbnMoKS5pbmNsdWRlcyhzT3BlcmF0b3IgfHwgXCJcIikpIHtcblx0XHRcdFx0Ly8gdlZhbHVlcyBpcyB1bmRlZmluZWQsIHNvIHRoZSBvcGVyYXRvciBpcyBhIHNlbWFudGljIGRhdGUgdGhhdCBkb2VzIG5vdCBuZWVkIHZhbHVlcyAoc2VlIGFib3ZlKVxuXHRcdFx0XHRmaWx0ZXJbc0NvbmRpdGlvblBhdGhdID0gW0NvbmRpdGlvbi5jcmVhdGVDb25kaXRpb24oc09wZXJhdG9yLCBbXSwgbnVsbCwgbnVsbCwgQ29uZGl0aW9uVmFsaWRhdGVkLk5vdFZhbGlkYXRlZCldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICghYXBwZW5kKSB7XG5cdFx0XHQvLyBDbGVhciB0aGUgY3VycmVudCB2YWx1ZSBhcyB3ZSBkbyBub3Qgd2FudCB0byBhZGQgZmlsdGVyIHZhbHVlcyBidXQgcmVwbGFjZSB0aGVtXG5cdFx0XHRhd2FpdCB0aGlzLl9jbGVhckZpbHRlclZhbHVlKG9GaWx0ZXJCYXIsIHNDb25kaXRpb25QYXRoKTtcblx0XHR9XG5cblx0XHRpZiAoZmlsdGVyW3NDb25kaXRpb25QYXRoXSkge1xuXHRcdFx0Ly8gVGhpcyBpcyBub3QgY2FsbGVkIGluIHRoZSByZXNldCBjYXNlLCBpLmUuIHNldEZpbHRlclZhbHVlKFwiUHJvcGVydHlcIilcblx0XHRcdGF3YWl0IFN0YXRlVXRpbC5hcHBseUV4dGVybmFsU3RhdGUob0ZpbHRlckJhciwgeyBmaWx0ZXIgfSk7XG5cdFx0fVxuXHR9LFxuXHRjb25kaXRpb25Ub01vZGVsUGF0aDogZnVuY3Rpb24gKHNDb25kaXRpb25QYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdC8vIG1ha2UgdGhlIHBhdGggdXNhYmxlIGFzIG1vZGVsIHByb3BlcnR5LCB0aGVyZWZvcmUgc2xhc2hlcyBiZWNvbWUgYmFja3NsYXNoZXNcblx0XHRyZXR1cm4gc0NvbmRpdGlvblBhdGgucmVwbGFjZSgvXFwvL2csIFwiXFxcXFwiKTtcblx0fSxcblx0X2dldEZpbHRlck1ldGFNb2RlbDogZnVuY3Rpb24gKG9GaWx0ZXJDb250cm9sOiBJRmlsdGVyQ29udHJvbCwgbWV0YU1vZGVsPzogT0RhdGFNZXRhTW9kZWwpOiBPRGF0YU1ldGFNb2RlbCB7XG5cdFx0cmV0dXJuIG1ldGFNb2RlbCB8fCAob0ZpbHRlckNvbnRyb2wuZ2V0TW9kZWwoKSEuZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwpO1xuXHR9LFxuXHRfZ2V0RW50aXR5U2V0UGF0aDogZnVuY3Rpb24gKHNFbnRpdHlUeXBlUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gc0VudGl0eVR5cGVQYXRoICYmIE1vZGVsSGVscGVyLmdldEVudGl0eVNldFBhdGgoc0VudGl0eVR5cGVQYXRoKTtcblx0fSxcblxuXHRfZ2V0RmllbGRzRm9yVGFibGU6IGZ1bmN0aW9uIChvRmlsdGVyQ29udHJvbDogSUZpbHRlckNvbnRyb2wsIHNFbnRpdHlUeXBlUGF0aD86IHN0cmluZyk6IFRhYmxlVmlzdWFsaXphdGlvbltdIHtcblx0XHRjb25zdCBsclRhYmxlczogVGFibGVWaXN1YWxpemF0aW9uW10gPSBbXTtcblx0XHQvKipcblx0XHQgKiBHZXRzIGZpZWxkcyBmcm9tXG5cdFx0ICogXHQtIGRpcmVjdCBlbnRpdHkgcHJvcGVydGllcyxcblx0XHQgKiBcdC0gbmF2aWdhdGVQcm9wZXJ0aWVzIGtleSBpbiB0aGUgbWFuaWZlc3QgaWYgdGhlc2UgcHJvcGVydGllcyBhcmUga25vd24gYnkgdGhlIGVudGl0eVxuXHRcdCAqICAtIGFubm90YXRpb24gXCJTZWxlY3Rpb25GaWVsZHNcIlxuXHRcdCAqL1xuXHRcdGlmIChzRW50aXR5VHlwZVBhdGgpIHtcblx0XHRcdGNvbnN0IG9WaWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0VmlldyhvRmlsdGVyQ29udHJvbCk7XG5cdFx0XHRjb25zdCB0YWJsZUNvbnRyb2xzID1cblx0XHRcdFx0b1ZpZXcgJiZcblx0XHRcdFx0b1ZpZXcuZ2V0Q29udHJvbGxlcigpICYmXG5cdFx0XHRcdChvVmlldy5nZXRDb250cm9sbGVyKCkgYXMgTGlzdFJlcG9ydENvbnRyb2xsZXIpLl9nZXRDb250cm9scyAmJlxuXHRcdFx0XHQob1ZpZXcuZ2V0Q29udHJvbGxlcigpIGFzIExpc3RSZXBvcnRDb250cm9sbGVyKS5fZ2V0Q29udHJvbHMoXCJ0YWJsZVwiKTtcblx0XHRcdGlmICh0YWJsZUNvbnRyb2xzKSB7XG5cdFx0XHRcdHRhYmxlQ29udHJvbHMuZm9yRWFjaChmdW5jdGlvbiAob1RhYmxlOiBDb250cm9sKSB7XG5cdFx0XHRcdFx0bHJUYWJsZXMucHVzaCgob1RhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRUYWJsZURlZmluaXRpb24oKSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGxyVGFibGVzO1xuXHRcdH1cblx0XHRyZXR1cm4gW107XG5cdH0sXG5cdF9nZXRTZWxlY3Rpb25GaWVsZHM6IGZ1bmN0aW9uIChcblx0XHRvRmlsdGVyQ29udHJvbDogSUZpbHRlckNvbnRyb2wsXG5cdFx0c0VudGl0eVR5cGVQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0c0ZpbHRlckVudGl0eVR5cGVQYXRoOiBzdHJpbmcsXG5cdFx0Y29udGV4dFBhdGg6IHN0cmluZyxcblx0XHRsclRhYmxlczogVGFibGVWaXN1YWxpemF0aW9uW10sXG5cdFx0b01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdFx0b0NvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdFx0aW5jbHVkZUhpZGRlbj86IGJvb2xlYW4sXG5cdFx0b01vZGlmaWVyPzogQmFzZVRyZWVNb2RpZmllcixcblx0XHRsaW5lSXRlbVRlcm0/OiBzdHJpbmcsXG5cdFx0YW5ub3RhdGlvblBhdGg/OiBzdHJpbmdcblx0KTogRmlsdGVyRmllbGRbXSB7XG5cdFx0Y29uc3QgZmlsdGVyRmllbGRzID0gRmlsdGVyQmFyQ29udmVydGVyLmdldFNlbGVjdGlvbkZpZWxkcyhcblx0XHRcdG9Db252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0bHJUYWJsZXMsXG5cdFx0XHRhbm5vdGF0aW9uUGF0aCxcblx0XHRcdGluY2x1ZGVIaWRkZW4sXG5cdFx0XHRsaW5lSXRlbVRlcm1cblx0XHQpO1xuXHRcdGxldCBzZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW10gPSBmaWx0ZXJGaWVsZHMuc2VsZWN0aW9uRmllbGRzO1xuXHRcdGNvbnN0IHByb3BlcnR5SW5mb3MgPSAob0ZpbHRlckNvbnRyb2wgYXMgUGFydGlhbDxJRmlsdGVyQ29udHJvbD4pLmRhdGFcblx0XHRcdD8gdGhpcy5nZXRGaWx0ZXJQcm9wZXJ0eUluZm8ob0ZpbHRlckNvbnRyb2wpXG5cdFx0XHQ6IEpTT04ucGFyc2UoZmlsdGVyRmllbGRzLnNQcm9wZXJ0eUluZm8ucmVwbGFjZSgvXFxcXFxcey9nLCBcIntcIikucmVwbGFjZSgvXFxcXFxcfS9nLCBcIn1cIikpOyAvLyBwcm9wZXJ0eUluZm8gc3RyaW5nIGlzIHJldHVybmVkIGZyb20gdGhlIGdldFNlbGVjdGlvbkZpZWxkc1xuXHRcdGlmIChcblx0XHRcdChvTW9kaWZpZXJcblx0XHRcdFx0PyBvTW9kaWZpZXIuZ2V0Q29udHJvbFR5cGUob0ZpbHRlckNvbnRyb2wpID09PSBcInNhcC51aS5tZGMuRmlsdGVyQmFyXCJcblx0XHRcdFx0OiBvRmlsdGVyQ29udHJvbC5pc0EoXCJzYXAudWkubWRjLkZpbHRlckJhclwiKSkgJiZcblx0XHRcdHNFbnRpdHlUeXBlUGF0aCAhPT0gc0ZpbHRlckVudGl0eVR5cGVQYXRoXG5cdFx0KSB7XG5cdFx0XHQvKipcblx0XHRcdCAqIFdlIGFyZSBpbiBhIG11bHRpLWVudGl0eSBzZXQgc2NlbmFyaW8gc28gd2UgYWRkIGFubm90YXRpb24gXCJTZWxlY3Rpb25GaWVsZHNcIlxuXHRcdFx0ICogZnJvbSBGaWx0ZXJCYXIgZW50aXR5IGlmIHRoZXNlIHByb3BlcnRpZXMgYXJlIGtub3duIGJ5IHRoZSBlbnRpdHlcblx0XHRcdCAqL1xuXHRcdFx0Y29uc3Qgb1Zpc3VhbGl6YXRpb25PYmplY3RQYXRoID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGNvbnRleHRQYXRoKSEpO1xuXHRcdFx0Y29uc3Qgb1BhZ2VDb250ZXh0ID0gb0NvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcihzRmlsdGVyRW50aXR5VHlwZVBhdGgpO1xuXHRcdFx0Y29uc3QgYUZpbHRlckJhclNlbGVjdGlvbkZpZWxkc0Fubm90YXRpb246IFNlbGVjdGlvbkZpZWxkcyA9XG5cdFx0XHRcdG9QYWdlQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbjxTZWxlY3Rpb25GaWVsZHM+KFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlNlbGVjdGlvbkZpZWxkc1wiKS5hbm5vdGF0aW9uIHx8XG5cdFx0XHRcdChbXSBhcyB1bmtub3duIGFzIFNlbGVjdGlvbkZpZWxkcyk7XG5cdFx0XHRjb25zdCBtYXBTZWxlY3Rpb25GaWVsZHM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG5cdFx0XHRzZWxlY3Rpb25GaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAob1NlbGVjdGlvbkZpZWxkOiBGaWx0ZXJGaWVsZCkge1xuXHRcdFx0XHRtYXBTZWxlY3Rpb25GaWVsZHNbb1NlbGVjdGlvbkZpZWxkLmNvbmRpdGlvblBhdGhdID0gdHJ1ZTtcblx0XHRcdH0pO1xuXG5cdFx0XHRhRmlsdGVyQmFyU2VsZWN0aW9uRmllbGRzQW5ub3RhdGlvbi5mb3JFYWNoKGZ1bmN0aW9uIChvRmlsdGVyQmFyU2VsZWN0aW9uRmllbGRBbm5vdGF0aW9uOiBQcm9wZXJ0eVBhdGgpIHtcblx0XHRcdFx0Y29uc3Qgc1BhdGggPSBvRmlsdGVyQmFyU2VsZWN0aW9uRmllbGRBbm5vdGF0aW9uLnZhbHVlO1xuXHRcdFx0XHRpZiAoIW1hcFNlbGVjdGlvbkZpZWxkc1tzUGF0aF0pIHtcblx0XHRcdFx0XHRjb25zdCBvRmlsdGVyRmllbGQgPSBGaWx0ZXJCYXJDb252ZXJ0ZXIuZ2V0RmlsdGVyRmllbGQoXG5cdFx0XHRcdFx0XHRzUGF0aCxcblx0XHRcdFx0XHRcdG9Db252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFx0b1Zpc3VhbGl6YXRpb25PYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0LmVudGl0eVR5cGVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGlmIChvRmlsdGVyRmllbGQpIHtcblx0XHRcdFx0XHRcdHNlbGVjdGlvbkZpZWxkcy5wdXNoKG9GaWx0ZXJGaWVsZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0aWYgKHNlbGVjdGlvbkZpZWxkcykge1xuXHRcdFx0Y29uc3QgZmllbGROYW1lczogc3RyaW5nW10gPSBbXTtcblx0XHRcdHNlbGVjdGlvbkZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChvRmllbGQ6IEZpbHRlckZpZWxkKSB7XG5cdFx0XHRcdGZpZWxkTmFtZXMucHVzaChvRmllbGQua2V5KTtcblx0XHRcdH0pO1xuXHRcdFx0c2VsZWN0aW9uRmllbGRzID0gdGhpcy5fZ2V0U2VsZWN0aW9uRmllbGRzRnJvbVByb3BlcnR5SW5mb3MoZmllbGROYW1lcywgc2VsZWN0aW9uRmllbGRzLCBwcm9wZXJ0eUluZm9zKTtcblx0XHR9XG5cdFx0cmV0dXJuIHNlbGVjdGlvbkZpZWxkcztcblx0fSxcblxuXHQvKipcblx0ICogQWRkcyB0aGUgcHJvcGVydGllcyBmcm9tIHByb3BlcnR5SW5mb3MgZm9yIHRoZSBmaWx0ZXIgZmllbGQuXG5cdCAqIEBwYXJhbSBmaWVsZE5hbWVzIFRoZSBuYW1lcyBvZiBmaWVsZHMgcHJlc2VudCBpbiB0aGUgc2VsZWN0aW9uRmllbGQgYXJyYXkuXG5cdCAqIEBwYXJhbSBzZWxlY3Rpb25GaWVsZHMgU2VsZWN0aW9uIGZpZWxkIGFycmF5IG9mIGFsbCB0aGUgcG9zc2libGUgZmllbGRzIHRoYXQgY2FuIGJlIGluIHRoZSBzZWxlY3Rpb24gZmllbGQuXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eUluZm8gUHJvcGVydHlJbmZvcyBmaWx0ZXJzIHRoYXQgYXJlIGF2YWlsYWJsZSBvciBwcmVzZW50IGluIHNlbGVjdGlvbiBmaWVsZCBhbm5vdGF0aW9uLlxuXHQgKiBAcmV0dXJucyBGaWx0ZXJGaWVsZCBhcnJheSBvZiBhbGwgdGhlIHBvc3NpYmxlIGZpbHRlciBmaWVsZHMgYWZ0ZXIgYWRkaW5nIHByb3BlcnRpZXMgZnJvbSBwcm9wZXJ0eUluZm9zXG5cdCAqL1xuXHRfZ2V0U2VsZWN0aW9uRmllbGRzRnJvbVByb3BlcnR5SW5mb3M6IGZ1bmN0aW9uIChcblx0XHRmaWVsZE5hbWVzOiBzdHJpbmdbXSxcblx0XHRzZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW10sXG5cdFx0cHJvcGVydHlJbmZvOiBQcm9wZXJ0eUluZm9bXVxuXHQpOiBGaWx0ZXJGaWVsZFtdIHtcblx0XHRwcm9wZXJ0eUluZm8uZm9yRWFjaChmdW5jdGlvbiAob1Byb3A6IFByb3BlcnR5SW5mbykge1xuXHRcdFx0aWYgKG9Qcm9wLm5hbWUgPT09IFwiJHNlYXJjaFwiIHx8IG9Qcm9wLm5hbWUgPT09IFwiJGVkaXRTdGF0ZVwiIHx8IG9Qcm9wLmtleSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qgc2VsRmllbGQgPSBzZWxlY3Rpb25GaWVsZHNbZmllbGROYW1lcy5pbmRleE9mKG9Qcm9wLmtleSldO1xuXHRcdFx0aWYgKGZpZWxkTmFtZXMuaW5jbHVkZXMob1Byb3Aua2V5KSAmJiBzZWxGaWVsZC5hbm5vdGF0aW9uUGF0aCkge1xuXHRcdFx0XHRvUHJvcC5ncm91cCA9IHNlbEZpZWxkLmdyb3VwO1xuXHRcdFx0XHRvUHJvcC5ncm91cExhYmVsID0gc2VsRmllbGQuZ3JvdXBMYWJlbDtcblx0XHRcdFx0b1Byb3Auc2V0dGluZ3MgPSBzZWxGaWVsZC5zZXR0aW5ncztcblx0XHRcdFx0b1Byb3AudmlzdWFsRmlsdGVyID0gc2VsRmllbGQudmlzdWFsRmlsdGVyO1xuXHRcdFx0XHRvUHJvcC5sYWJlbCA9IG9Qcm9wLmxhYmVsID8gb1Byb3AubGFiZWwgOiBzZWxGaWVsZC5sYWJlbDsgLy8gaWYgYSBsYWJlbCBpcyBjb21pbmcgZm9yIHRoZSBtYW5pZmVzdCB3ZSBuZWVkIHRvIHRha2UgdGhhdCBhcyBwcmlvcml0eS5cblx0XHRcdFx0b1Byb3AuYW5ub3RhdGlvblBhdGggPSBvUHJvcC5hbm5vdGF0aW9uUGF0aCA/PyBzZWxGaWVsZC5hbm5vdGF0aW9uUGF0aDtcblx0XHRcdFx0c2VsZWN0aW9uRmllbGRzW2ZpZWxkTmFtZXMuaW5kZXhPZihvUHJvcC5rZXkpXSA9IG9Qcm9wIGFzIEZpbHRlckZpZWxkO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWZpZWxkTmFtZXMuaW5jbHVkZXMob1Byb3Aua2V5KSAmJiAhb1Byb3AuYW5ub3RhdGlvblBhdGgpIHtcblx0XHRcdFx0c2VsZWN0aW9uRmllbGRzLnB1c2gob1Byb3AgYXMgRmlsdGVyRmllbGQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBzZWxlY3Rpb25GaWVsZHM7XG5cdH0sXG5cdF9nZXRTZWFyY2hGaWVsZDogZnVuY3Rpb24gKG9JRmlsdGVyOiBQYXJ0aWFsPElGaWx0ZXJDb250cm9sPiwgYUlnbm9yZVByb3BlcnRpZXM6IHN0cmluZ1tdKTogc3RyaW5nIHwgbnVsbCB7XG5cdFx0cmV0dXJuIG9JRmlsdGVyLmdldFNlYXJjaCAmJiAhYUlnbm9yZVByb3BlcnRpZXMuaW5jbHVkZXMoXCJzZWFyY2hcIikgPyBvSUZpbHRlci5nZXRTZWFyY2goKSA6IG51bGw7XG5cdH0sXG5cdF9nZXRGaWx0ZXJDb25kaXRpb25zOiBmdW5jdGlvbiAoXG5cdFx0bVByb3BlcnRpZXM6IHsgaWdub3JlZFByb3BlcnRpZXM/OiBzdHJpbmdbXTsgcHJvcGVydGllc01ldGFkYXRhPzogUHJvcGVydHlJbmZvW107IHRhcmdldENvbnRyb2w/OiBDb250cm9sIH0gfCB1bmRlZmluZWQsXG5cdFx0bUZpbHRlckNvbmRpdGlvbnM6IFJlY29yZDxzdHJpbmcsIENvbmRpdGlvbk9iamVjdFtdPixcblx0XHRvSUZpbHRlcjogSUZpbHRlckNvbnRyb2xcblx0KTogUmVjb3JkPHN0cmluZywgQ29uZGl0aW9uT2JqZWN0W10+IHtcblx0XHRjb25zdCBtQ29uZGl0aW9ucyA9IG1GaWx0ZXJDb25kaXRpb25zIHx8IG9JRmlsdGVyLmdldENvbmRpdGlvbnMoKTtcblx0XHRpZiAobVByb3BlcnRpZXMgJiYgbVByb3BlcnRpZXMudGFyZ2V0Q29udHJvbCAmJiBtUHJvcGVydGllcy50YXJnZXRDb250cm9sLmlzQShcInNhcC51aS5tZGMuQ2hhcnRcIikpIHtcblx0XHRcdE9iamVjdC5rZXlzKG1Db25kaXRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uIChzS2V5OiBzdHJpbmcpIHtcblx0XHRcdFx0aWYgKHNLZXkgPT09IFwiJGVkaXRTdGF0ZVwiKSB7XG5cdFx0XHRcdFx0ZGVsZXRlIG1Db25kaXRpb25zW1wiJGVkaXRTdGF0ZVwiXTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBtQ29uZGl0aW9ucztcblx0fSxcblx0X2dldEZpbHRlclByb3BlcnRpZXNNZXRhZGF0YTogZnVuY3Rpb24gKFxuXHRcdGFGaWx0ZXJQcm9wZXJ0aWVzTWV0YWRhdGE6IFByb3BlcnR5SW5mb1tdIHwgbnVsbCxcblx0XHRvSUZpbHRlcjogSUZpbHRlckNvbnRyb2xcblx0KTogUHJvcGVydHlJbmZvW10gfCBudWxsIHtcblx0XHRpZiAoIShhRmlsdGVyUHJvcGVydGllc01ldGFkYXRhICYmIGFGaWx0ZXJQcm9wZXJ0aWVzTWV0YWRhdGEubGVuZ3RoKSkge1xuXHRcdFx0aWYgKG9JRmlsdGVyLmdldFByb3BlcnR5SW5mbykge1xuXHRcdFx0XHRhRmlsdGVyUHJvcGVydGllc01ldGFkYXRhID0gb0lGaWx0ZXIuZ2V0UHJvcGVydHlJbmZvKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhRmlsdGVyUHJvcGVydGllc01ldGFkYXRhID0gbnVsbDtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGFGaWx0ZXJQcm9wZXJ0aWVzTWV0YWRhdGE7XG5cdH0sXG5cdF9nZXRJZ25vcmVkUHJvcGVydGllczogZnVuY3Rpb24gKGZpbHRlclByb3BlcnRpZXNNZXRhZGF0YTogUHJvcGVydHlJbmZvW10sIGVudGl0eVByb3BlcnRpZXM6IFByb3BlcnR5SW5mb1tdKTogc3RyaW5nW10ge1xuXHRcdGNvbnN0IGlnbm9yZVByb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG5cdFx0ZmlsdGVyUHJvcGVydGllc01ldGFkYXRhLmZvckVhY2goZnVuY3Rpb24gKGZpbHRlclByb3BlcnR5KSB7XG5cdFx0XHRjb25zdCBmaWx0ZXJQcm9wZXJ0eU5hbWUgPSBmaWx0ZXJQcm9wZXJ0eS5uYW1lO1xuXHRcdFx0Y29uc3QgZW50aXR5UHJvcGVydGllc0N1cnJlbnQgPSBlbnRpdHlQcm9wZXJ0aWVzLmZpbmQoKGVudGl0eSkgPT4gZW50aXR5Lm5hbWUgPT09IGZpbHRlclByb3BlcnR5TmFtZSk7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGVudGl0eVByb3BlcnRpZXNDdXJyZW50ICYmXG5cdFx0XHRcdCgoIWZpbHRlclByb3BlcnR5LmlzQ3VzdG9tRmlsdGVyICYmIGZpbHRlclByb3BlcnR5LmRhdGFUeXBlICE9PSBlbnRpdHlQcm9wZXJ0aWVzQ3VycmVudC5kYXRhVHlwZSkgfHxcblx0XHRcdFx0XHQvLyBjdXN0b20gZmlsdGVycyB3aWxsIGhhdmUgYW4gYW5ub3RhdGlvbiBwYXRoIGFwcGxpZWQgaW4gdGhlIGNvbnZlcnRlciB3aGVuIHRoZXJlIGlzIGEgbWF0Y2hpbmcgcHJvcGVydHkgZm91bmRcblx0XHRcdFx0XHQoZmlsdGVyUHJvcGVydHkuaXNDdXN0b21GaWx0ZXIgJiYgZW50aXR5UHJvcGVydGllc0N1cnJlbnQuYW5ub3RhdGlvblBhdGggPT09IHVuZGVmaW5lZCkpXG5cdFx0XHQpIHtcblx0XHRcdFx0aWdub3JlUHJvcGVydGllcy5wdXNoKGZpbHRlclByb3BlcnR5TmFtZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGlnbm9yZVByb3BlcnRpZXM7XG5cdH0sXG5cdGdldEZpbHRlcnM6IGZ1bmN0aW9uIChmaWx0ZXJCYXI/OiBJRmlsdGVyQ29udHJvbCk6IEludGVybmFsQmluZGluZ0luZm8gfCB1bmRlZmluZWQge1xuXHRcdGlmICghZmlsdGVyQmFyIHx8IHR5cGVvZiBmaWx0ZXJCYXIuaXNJbml0aWFsaXplZCAhPT0gXCJmdW5jdGlvblwiIHx8ICFmaWx0ZXJCYXIuaXNJbml0aWFsaXplZCgpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHsgcGFyYW1ldGVycywgZmlsdGVycywgc2VhcmNoIH0gPSB0aGlzLmdldEZpbHRlckluZm8oZmlsdGVyQmFyKTtcblx0XHRyZXR1cm4geyBwYXJhbWV0ZXJzLCBmaWx0ZXJzLCBzZWFyY2ggfTtcblx0fSxcblx0LyoqXG5cdCAqIFByZXBhcmVzIHByb3BlcnR5SW5mbyBmb3Igc2hhcmluZyBpdCBvdXRzaWRlIEZFLCByZW1vdmVzIHVud2FudGVkIHByb3BlcnR5LlxuXHQgKiBAcGFyYW0gcHJvcGVydHlJbmZvcyBBcnJheSBvZiBwcm9wZXJ0eUluZm9cblx0ICogQHJldHVybnMgQXJyYXkgb3IgU3RyaW5nIChmb3IgRmlsdGVyQmFyIHRlbXBsYXRpbmcpIG9mIFByb3BlcnR5SW5mb3MgYWZ0ZXIgcmVtb3ZpbmcgdGhlIHVud2FudGVkIHByb3BlcnRpZXNcblx0ICovXG5cdGZvcm1hdFByb3BlcnR5SW5mbzogZnVuY3Rpb24gKHByb3BlcnR5SW5mb3M6IFByb3BlcnR5SW5mb1tdIHwgc3RyaW5nKTogUHJvcGVydHlJbmZvRXh0ZXJuYWxbXSB8IHN0cmluZyB7XG5cdFx0aWYgKHR5cGVvZiBwcm9wZXJ0eUluZm9zID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRsZXQgcHJvcEluZm8gPSBwcm9wZXJ0eUluZm9zLnJlcGxhY2UoL1xcXFxcXHsvZywgXCJ7XCIpO1xuXHRcdFx0cHJvcEluZm8gPSBwcm9wSW5mby5yZXBsYWNlKC9cXFxcXFx9L2csIFwifVwiKTtcblx0XHRcdGxldCBwcm9wSW5mb3MgPSBKU09OLnBhcnNlKHByb3BJbmZvKTtcblx0XHRcdHByb3BJbmZvcyA9IHRoaXMuX2Zvcm1hdFByb3BlcnR5SW5mbyhwcm9wSW5mb3MpO1xuXHRcdFx0bGV0IHByb3BlcnR5SW5mb0ZvckZpbHRlckJhciA9IEpTT04uc3RyaW5naWZ5KHByb3BJbmZvcyk7XG5cdFx0XHRwcm9wZXJ0eUluZm9Gb3JGaWx0ZXJCYXIgPSBwcm9wZXJ0eUluZm9Gb3JGaWx0ZXJCYXIucmVwbGFjZSgvXFx7L2csIFwiXFxcXHtcIik7XG5cdFx0XHRwcm9wZXJ0eUluZm9Gb3JGaWx0ZXJCYXIgPSBwcm9wZXJ0eUluZm9Gb3JGaWx0ZXJCYXIucmVwbGFjZSgvXFx9L2csIFwiXFxcXH1cIik7XG5cdFx0XHRyZXR1cm4gcHJvcGVydHlJbmZvRm9yRmlsdGVyQmFyO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fZm9ybWF0UHJvcGVydHlJbmZvKHByb3BlcnR5SW5mb3MpO1xuXHRcdH1cblx0fSxcblx0LyoqXG5cdCAqIFJlbW92ZXMgdW53YW50ZWQgcHJvcGVydHkgZnJvbSBQcm9wZXJ0eUluZm9zLlxuXHQgKiBAcGFyYW0gcHJvcGVydHlJbmZvcyBBcnJheSBvZiBwcm9wZXJ0eUluZm9cblx0ICogQHJldHVybnMgQXJyYXkgb2YgUHJvcGVydHlJbmZvcyBhZnRlciByZW1vdmluZyB0aGUgdW53YW50ZWQgcHJvcGVydGllc1xuXHQgKi9cblx0X2Zvcm1hdFByb3BlcnR5SW5mbzogZnVuY3Rpb24gKHByb3BlcnR5SW5mb3M6IFByb3BlcnR5SW5mb1tdKTogUHJvcGVydHlJbmZvRXh0ZXJuYWxbXSB7XG5cdFx0cmV0dXJuIHByb3BlcnR5SW5mb3MubWFwKChwcm9wZXJ0eSkgPT4ge1xuXHRcdFx0Y29uc3QgX3Byb3BlcnR5SW5mbzogUHJvcGVydHlJbmZvRXh0ZXJuYWwgPSB7XG5cdFx0XHRcdGtleTogcHJvcGVydHkua2V5IHx8IHByb3BlcnR5Lm5hbWUsXG5cdFx0XHRcdGRhdGFUeXBlOiBcIlwiLFxuXHRcdFx0XHRsYWJlbDogXCJcIlxuXHRcdFx0fTtcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIFByb3BlcnR5SW5mb0tleXMpIHtcblx0XHRcdFx0aWYgKHByb3BlcnR5Lmhhc093blByb3BlcnR5KGtleSkpIHtcblx0XHRcdFx0XHRzd2l0Y2ggKGtleSkge1xuXHRcdFx0XHRcdFx0Y2FzZSBcImhpZGRlbkZpbHRlclwiOlxuXHRcdFx0XHRcdFx0XHRfcHJvcGVydHlJbmZvLmhpZGRlbkZpbHRlciA9IHByb3BlcnR5LmhpZGRlbkZpbHRlcjtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlIFwicmVxdWlyZWRcIjpcblx0XHRcdFx0XHRcdFx0X3Byb3BlcnR5SW5mby5yZXF1aXJlZCA9IHByb3BlcnR5LnJlcXVpcmVkO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJwYXRoXCI6XG5cdFx0XHRcdFx0XHRcdF9wcm9wZXJ0eUluZm8ucGF0aCA9IHByb3BlcnR5LnBhdGg7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSBcInRvb2x0aXBcIjpcblx0XHRcdFx0XHRcdFx0X3Byb3BlcnR5SW5mby50b29sdGlwID0gcHJvcGVydHkudG9vbHRpcDtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlIFwidmlzaWJsZVwiOlxuXHRcdFx0XHRcdFx0XHRfcHJvcGVydHlJbmZvLnZpc2libGUgPSBwcm9wZXJ0eS52aXNpYmxlO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJtYXhDb25kaXRpb25zXCI6XG5cdFx0XHRcdFx0XHRcdF9wcm9wZXJ0eUluZm8ubWF4Q29uZGl0aW9ucyA9IHByb3BlcnR5Lm1heENvbmRpdGlvbnM7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSBcImZvcm1hdE9wdGlvbnNcIjpcblx0XHRcdFx0XHRcdFx0X3Byb3BlcnR5SW5mby5mb3JtYXRPcHRpb25zID0gcHJvcGVydHkuZm9ybWF0T3B0aW9ucztcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlIFwiY29uc3RyYWludHNcIjpcblx0XHRcdFx0XHRcdFx0X3Byb3BlcnR5SW5mby5jb25zdHJhaW50cyA9IHByb3BlcnR5LmNvbnN0cmFpbnRzO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJncm91cFwiOlxuXHRcdFx0XHRcdFx0XHRfcHJvcGVydHlJbmZvLmdyb3VwID0gcHJvcGVydHkuZ3JvdXA7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSBcImdyb3VwTGFiZWxcIjpcblx0XHRcdFx0XHRcdFx0X3Byb3BlcnR5SW5mby5ncm91cExhYmVsID0gcHJvcGVydHkuZ3JvdXBMYWJlbDtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlIFwiY2FzZVNlbnNpdGl2ZVwiOlxuXHRcdFx0XHRcdFx0XHRfcHJvcGVydHlJbmZvLmNhc2VTZW5zaXRpdmUgPSBwcm9wZXJ0eS5jYXNlU2Vuc2l0aXZlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKHByb3BlcnR5LmRhdGFUeXBlKSB7XG5cdFx0XHRcdF9wcm9wZXJ0eUluZm8uZGF0YVR5cGUgPSBwcm9wZXJ0eS5kYXRhVHlwZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBtYW5kYXRvcnkgcHJvcGVydHkgZGF0YVR5cGUgZm9yIGZpbHRlci1iYXIgZmlsdGVyIGZpZWxkOiAke3Byb3BlcnR5fWApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHByb3BlcnR5LmxhYmVsKSB7XG5cdFx0XHRcdF9wcm9wZXJ0eUluZm8ubGFiZWwgPSBwcm9wZXJ0eS5sYWJlbDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBfcHJvcGVydHlJbmZvO1xuXHRcdH0pO1xuXHR9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBvRmlsdGVyVXRpbHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7TUE0REtBLGdCQUFnQiwwQkFBaEJBLGdCQUFnQjtJQUFoQkEsZ0JBQWdCO0lBQWhCQSxnQkFBZ0I7SUFBaEJBLGdCQUFnQjtJQUFoQkEsZ0JBQWdCO0lBQWhCQSxnQkFBZ0I7SUFBaEJBLGdCQUFnQjtJQUFoQkEsZ0JBQWdCO0lBQWhCQSxnQkFBZ0I7SUFBaEJBLGdCQUFnQjtJQUFoQkEsZ0JBQWdCO0lBQWhCQSxnQkFBZ0I7SUFBQSxPQUFoQkEsZ0JBQWdCO0VBQUEsRUFBaEJBLGdCQUFnQjtFQWNyQixNQUFNQyxxQ0FBcUMsR0FBRyxPQUFPO0VBRXJELE1BQU1DLFlBQVksR0FBRztJQUNwQkMsU0FBUyxFQUFFLFNBQUFBLENBQVVDLFFBQXdDLEVBQXNCO01BQ2xGLE1BQU1DLFFBQVEsR0FBR0gsWUFBWSxDQUFDSSxhQUFhLENBQUNGLFFBQVEsQ0FBQyxDQUFDRyxPQUFPO01BQzdELE9BQU9GLFFBQVEsRUFBRUcsTUFBTSxHQUFHLElBQUlDLE1BQU0sQ0FBQ0osUUFBUSxFQUFFLEtBQUssQ0FBQyxHQUFHSyxTQUFTO0lBQ2xFLENBQUM7SUFDREMsY0FBYyxFQUFFLFNB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
806
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQcm9wZXJ0eUluZm9LZXlzIiwiQ09ORElUSU9OX1BBVEhfVE9fUFJPUEVSVFlfUEFUSF9SRUdFWCIsIm9GaWx0ZXJVdGlscyIsImdldEZpbHRlciIsInZJRmlsdGVyIiwiYUZpbHRlcnMiLCJnZXRGaWx0ZXJJbmZvIiwiZmlsdGVycyIsImxlbmd0aCIsIkZpbHRlciIsInVuZGVmaW5lZCIsImdldEZpbHRlckZpZWxkIiwicHJvcGVydHlQYXRoIiwiY29udmVydGVyQ29udGV4dCIsImVudGl0eVR5cGUiLCJGaWx0ZXJCYXJDb252ZXJ0ZXIiLCJidWlsZFByb3BlcnlJbmZvIiwicHJvcGVydHlJbmZvRmllbGQiLCJvUHJvcGVydHlJbmZvIiwiYVR5cGVDb25maWciLCJwcm9wZXJ0eUNvbnZlcnR5Q29udGV4dCIsImdldENvbnZlcnRlckNvbnRleHRGb3IiLCJhbm5vdGF0aW9uUGF0aCIsInByb3BlcnR5VGFyZ2V0T2JqZWN0IiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsInRhcmdldE9iamVjdCIsIm9UeXBlQ29uZmlnIiwiZmV0Y2hUeXBlQ29uZmlnIiwiZmV0Y2hQcm9wZXJ0eUluZm8iLCJrZXkiLCJhc3NpZ25EYXRhVHlwZVRvUHJvcGVydHlJbmZvIiwiY3JlYXRlQ29udmVydGVyQ29udGV4dCIsIm9GaWx0ZXJDb250cm9sIiwic0VudGl0eVR5cGVQYXRoIiwibWV0YU1vZGVsIiwiYXBwQ29tcG9uZW50Iiwic0ZpbHRlckVudGl0eVR5cGVQYXRoIiwiRGVsZWdhdGVVdGlsIiwiZ2V0Q3VzdG9tRGF0YSIsImNvbnRleHRQYXRoIiwib1ZpZXciLCJpc0EiLCJDb21tb25VdGlscyIsImdldFRhcmdldFZpZXciLCJvTWV0YU1vZGVsIiwiZ2V0TW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJvQXBwQ29tcG9uZW50IiwiZ2V0QXBwQ29tcG9uZW50Iiwib1Zpc3VhbGl6YXRpb25PYmplY3RQYXRoIiwiTWV0YU1vZGVsQ29udmVydGVyIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJtYW5pZmVzdFNldHRpbmdzIiwiZ2V0Vmlld0RhdGEiLCJDb252ZXJ0ZXJDb250ZXh0IiwiY3JlYXRlQ29udmVydGVyQ29udGV4dEZvck1hY3JvIiwic3RhcnRpbmdFbnRpdHlTZXQiLCJuYW1lIiwiZ2V0RGlhZ25vc3RpY3MiLCJtZXJnZSIsImNvbnRleHRMb2NhdGlvbiIsIk1hbmlmZXN0V3JhcHBlciIsImdldENvbnZlcnRlZEZpbHRlckZpZWxkcyIsImluY2x1ZGVIaWRkZW4iLCJvTW9kaWZpZXIiLCJsaW5lSXRlbVRlcm0iLCJfZ2V0RmlsdGVyTWV0YU1vZGVsIiwibHJUYWJsZXMiLCJfZ2V0RmllbGRzRm9yVGFibGUiLCJvQ29udmVydGVyQ29udGV4dCIsIl9nZXRTZWxlY3Rpb25GaWVsZHMiLCJnZXRCaW5kaW5nUGF0aEZvclBhcmFtZXRlcnMiLCJvSUZpbHRlciIsIm1Db25kaXRpb25zIiwiYUZpbHRlclByb3BlcnRpZXNNZXRhZGF0YSIsImFQYXJhbWV0ZXJzIiwiYVBhcmFtcyIsInNldFR5cGVDb25maWdUb1Byb3BlcnRpZXMiLCJzRmllbGRQYXRoIiwib0NvbmRpdGlvbkludGVybmFsIiwib1Byb3BlcnR5IiwiRmlsdGVyVXRpbCIsImdldFByb3BlcnR5QnlLZXkiLCJ0eXBlQ29uZmlnIiwiVHlwZU1hcCIsImdldFR5cGVDb25maWciLCJkYXRhVHlwZSIsImZvcm1hdE9wdGlvbnMiLCJjb25zdHJhaW50cyIsIm1JbnRlcm5hbFBhcmFtZXRlckNvbmRpdGlvbiIsIkNvbmRpdGlvbkNvbnZlcnRlciIsInRvVHlwZSIsImdldFR5cGVNYXAiLCJzRWRtVHlwZSIsIk9EQVRBX1RZUEVfTUFQUElORyIsImNsYXNzTmFtZSIsInB1c2giLCJlbmNvZGVVUklDb21wb25lbnQiLCJPRGF0YVV0aWxzIiwiZm9ybWF0TGl0ZXJhbCIsInZhbHVlcyIsImRhdGEiLCJzRW50aXR5U2V0UGF0aCIsInN1YnN0cmluZyIsInNQYXJhbWV0ZXJFbnRpdHlTZXQiLCJzbGljZSIsImxhc3RJbmRleE9mIiwic1RhcmdldE5hdmlnYXRpb24iLCJ0b1N0cmluZyIsImdldEVkaXRTdGF0ZUlzSGlkZURyYWZ0IiwiYklzSGlkZURyYWZ0IiwiJGVkaXRTdGF0ZSIsIm9Db25kaXRpb24iLCJmaW5kIiwiY29uZGl0aW9uIiwib3BlcmF0b3IiLCJpbmNsdWRlcyIsIm1Qcm9wZXJ0aWVzIiwibUZpbHRlckNvbmRpdGlvbnMiLCJhSWdub3JlUHJvcGVydGllcyIsImlnbm9yZWRQcm9wZXJ0aWVzIiwib1RhcmdldENvbnRyb2wiLCJ0YXJnZXRDb250cm9sIiwic1RhcmdldEVudGl0eVBhdGgiLCJtUGFyYW1ldGVycyIsInNTZWFyY2giLCJzQmluZGluZ1BhdGgiLCJhUHJvcGVydGllc01ldGFkYXRhIiwicHJvcGVydGllc01ldGFkYXRhIiwiRWxlbWVudCIsImdldEVsZW1lbnRCeUlkIiwiX2dldFNlYXJjaEZpZWxkIiwiX2dldEZpbHRlckNvbmRpdGlvbnMiLCJnZXRGaWx0ZXJQcm9wZXJ0eUluZm8iLCJnZXRQcm9wZXJ0eUluZm9TZXQiLCJfZ2V0RmlsdGVyUHJvcGVydGllc01ldGFkYXRhIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJzS2V5IiwiSlNPTiIsInBhcnNlIiwicGFyYW0iLCJyZXF1aXJlZFBhcmFtIiwibVBhcmFtZXRlcnNWYWx1ZSIsImFUYXJnZXRQcm9wZXJ0aWVzTWV0YWRhdGEiLCJnZXRDb250cm9sRGVsZWdhdGUiLCJmZXRjaFByb3BlcnRpZXNGb3JFbnRpdHkiLCJfYUlnbm9yZVByb3BlcnRpZXMiLCJfZ2V0SWdub3JlZFByb3BlcnRpZXMiLCJjb25jYXQiLCJnZXRFZGl0U3RhdGVBbmRGaWx0ZXIiLCJwYXJhbWV0ZXJzIiwic2VhcmNoIiwiYmluZGluZ1BhdGgiLCJfcmVmIiwib0ZpbHRlciIsImN1cnJTdGF0ZSIsImdldEN1cnJlbnRTdGF0ZSIsImhhc0VkaXRTdGF0ZUZpZWxkVmlzaWJsZSIsIml0ZW1zIiwic29tZSIsImNzIiwiaGFzRWRpdFN0YXRlTWV0YWRhdGEiLCJBcnJheSIsImlzQXJyYXkiLCJlZGl0U3RhdGVGaWx0ZXIiLCJoYXNPd25Qcm9wZXJ0eSIsImVkaXRTdGF0ZVZhbHVlIiwiRURJVFNUQVRFIiwiZ2V0RmlsdGVyRm9yRWRpdFN0YXRlIiwiaGFzRWRpdFN0YXRlRmlsdGVyIiwiaGFzRWRpdFN0YXRlRmlsdGVyUmVjdXJzaXZlbHkiLCJleGNoYW5nZUVkaXRTdGF0ZUZpbHRlclJlY3Vyc2l2ZWx5IiwiYW5kIiwiZmlsdGVyIiwiZ2V0UGF0aCIsImdldEZpbHRlcnMiLCJtYXAiLCJpc0FuZCIsImFQcm9wZXJ0aWVzIiwib0lGaWx0ZXJQcm9wZXJ0eSIsInR5cGVJbnN0YW5jZSIsImdldENvbnN0cmFpbnRzIiwiRnVuY3Rpb24iLCJwYXRoIiwiZ2V0Tm90QXBwbGljYWJsZUZpbHRlcnMiLCJvRmlsdGVyQmFyIiwib0NvbnRyb2wiLCJzVGFyZ2V0RW50aXR5VHlwZVBhdGgiLCJvRmlsdGVyQmFyRW50aXR5UGF0aCIsIm9GaWx0ZXJCYXJFbnRpdHlTZXRBbm5vdGF0aW9ucyIsImdldE9iamVjdCIsImFOb3RBcHBsaWNhYmxlIiwiZ2V0Q29uZGl0aW9ucyIsImJJc0ZpbHRlckJhckVudGl0eVR5cGUiLCJiSXNDaGFydCIsImJJc0FuYWx5dGljYWxUYWJsZSIsImdldFBhcmVudCIsImdldFRhYmxlRGVmaW5pdGlvbiIsImVuYWJsZUFuYWx5dGljcyIsImJJc1RyZWVUYWJsZSIsImNvbnRyb2wiLCJ0eXBlIiwiYkVuYWJsZVNlYXJjaCIsIkNvbW1vbkhlbHBlciIsInBhcnNlQ3VzdG9tRGF0YSIsImVuYWJsZVNlYXJjaCIsImVuYWJsZUJhc2ljU2VhcmNoIiwiYVRhcmdldFByb3BlcnRpZXMiLCJtVGFyZ2V0UHJvcGVydGllcyIsInJlZHVjZSIsIm1Qcm9wIiwib1Byb3AiLCJtQWdncmVnYXRlZFByb3BlcnRpZXMiLCJjaGFydEVudGl0eVR5cGVBbm5vdGF0aW9ucyIsIm9FbnRpdHlTZXRBbm5vdGF0aW9ucyIsIm1DaGFydEN1c3RvbUFnZ3JlZ2F0ZXMiLCJnZXRBbGxDdXN0b21BZ2dyZWdhdGVzIiwic0FnZ3JlZ2F0ZU5hbWUiLCJvQWdncmVnYXRlIiwic1Byb3BlcnR5IiwiYUNvbmRpdGlvblByb3BlcnR5IiwidHlwZUNoZWNrIiwiaXNDdXN0b21GaWx0ZXIiLCJyZXBsYWNlIiwiZ2V0U2VhcmNoIiwiX2dldFZhbHVlTGlzdEluZm8iLCJmaWx0ZXJCYXIiLCJwcm9wZXJ0eU5hbWUiLCJ2YWx1ZUxpc3RJbmZvcyIsInJlcXVlc3RWYWx1ZUxpc3RJbmZvIiwiY2F0Y2giLCJfcHJvcGVydHlJbmZvIiwiX2dldENvbmRpdGlvblZhbGlkYXRlZCIsInZhbHVlTGlzdEluZm8iLCJ2YWx1ZSIsIkNvbmRpdGlvblZhbGlkYXRlZCIsIk5vdFZhbGlkYXRlZCIsInZhbHVlTGlzdFByb3BlcnRpZXMiLCJQYXJhbWV0ZXJzIiwicGFyYW1ldGVyIiwidmFsdWVPZiIsIiRUeXBlIiwiTG9jYWxEYXRhUHJvcGVydHkiLCIkUHJvcGVydHlQYXRoIiwiVmFsdWVMaXN0UHJvcGVydHkiLCJ2YWx1ZUxpc3RQcm9wZXJ0eVBhdGgiLCJGaWx0ZXJPcGVyYXRvciIsIkVRIiwidmFsdWUxIiwibGlzdEJpbmRpbmciLCIkbW9kZWwiLCJiaW5kTGlzdCIsIkNvbGxlY3Rpb25QYXRoIiwiJHNlbGVjdCIsInZhbHVlRXhpc3RzIiwicmVxdWVzdENvbnRleHRzIiwiVmFsaWRhdGVkIiwiZXJyb3IiLCJMb2ciLCJfY2xlYXJGaWx0ZXJWYWx1ZSIsImNvbmRpdGlvblBhdGgiLCJvU3RhdGUiLCJTdGF0ZVV0aWwiLCJyZXRyaWV2ZUV4dGVybmFsU3RhdGUiLCJmaWx0ZXJlZCIsImFwcGx5RXh0ZXJuYWxTdGF0ZSIsInNldEZpbHRlclZhbHVlcyIsInNDb25kaXRpb25QYXRoIiwiX2xlbiIsImFyZ3VtZW50cyIsImFyZ3MiLCJfa2V5IiwiX3NldEZpbHRlclZhbHVlcyIsImFkZEZpbHRlclZhbHVlcyIsIl9sZW4yIiwiX2tleTIiLCJnZXRQcm9wZXJ0eVBhdGhGcm9tQ29uZGl0aW9uUGF0aCIsImdldEZpbHRlckJhckZvckFkYXB0YXRpb25Db250cm9sIiwicG90ZW50aWFsRmlsdGVyQmFyIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclByb3BlcnR5IiwiZW50aXR5VHlwZVBhdGgiLCJhcHBlbmQiLCJfbGVuMyIsIl9rZXkzIiwic09wZXJhdG9yIiwidlZhbHVlcyIsIndoZW5Jbml0aWFsaXplZCIsIndhcm5pbmciLCJTZW1hbnRpY0RhdGVPcGVyYXRvcnMiLCJnZXRTZW1hbnRpY0RhdGVPcGVyYXRpb25zIiwic3VwcG9ydGVkVmFsdWVUeXBlcyIsIkVycm9yIiwibWFpbkZpbHRlckJhckNvbnRyb2wiLCJwcm9wZXJ0eVRhcmdldE9iamVjdFBhdGgiLCJnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIiwiQlQiLCJDb25kaXRpb24iLCJjcmVhdGVDb25kaXRpb24iLCJQcm9taXNlIiwiYWxsIiwiY29uZGl0aW9uVmFsaWRhdGVkU3RhdHVzIiwiY29uZGl0aW9uVG9Nb2RlbFBhdGgiLCJfZ2V0RW50aXR5U2V0UGF0aCIsIk1vZGVsSGVscGVyIiwiZ2V0RW50aXR5U2V0UGF0aCIsInRhYmxlQ29udHJvbHMiLCJnZXRDb250cm9sbGVyIiwiX2dldENvbnRyb2xzIiwib1RhYmxlIiwiZmlsdGVyRmllbGRzIiwiZ2V0U2VsZWN0aW9uRmllbGRzIiwic2VsZWN0aW9uRmllbGRzIiwicHJvcGVydHlJbmZvcyIsInNQcm9wZXJ0eUluZm8iLCJnZXRDb250cm9sVHlwZSIsIm9QYWdlQ29udGV4dCIsImFGaWx0ZXJCYXJTZWxlY3Rpb25GaWVsZHNBbm5vdGF0aW9uIiwiZ2V0RW50aXR5VHlwZUFubm90YXRpb24iLCJhbm5vdGF0aW9uIiwibWFwU2VsZWN0aW9uRmllbGRzIiwib1NlbGVjdGlvbkZpZWxkIiwib0ZpbHRlckJhclNlbGVjdGlvbkZpZWxkQW5ub3RhdGlvbiIsInNQYXRoIiwib0ZpbHRlckZpZWxkIiwiZmllbGROYW1lcyIsIm9GaWVsZCIsIl9nZXRTZWxlY3Rpb25GaWVsZHNGcm9tUHJvcGVydHlJbmZvcyIsInByb3BlcnR5SW5mbyIsInNlbEZpZWxkIiwiaW5kZXhPZiIsImdyb3VwIiwiZ3JvdXBMYWJlbCIsInNldHRpbmdzIiwidmlzdWFsRmlsdGVyIiwibGFiZWwiLCJnZXRQcm9wZXJ0eUluZm8iLCJmaWx0ZXJQcm9wZXJ0aWVzTWV0YWRhdGEiLCJlbnRpdHlQcm9wZXJ0aWVzIiwiaWdub3JlUHJvcGVydGllcyIsImZpbHRlclByb3BlcnR5IiwiZmlsdGVyUHJvcGVydHlOYW1lIiwiZW50aXR5UHJvcGVydGllc0N1cnJlbnQiLCJlbnRpdHkiLCJpc0luaXRpYWxpemVkIiwiZm9ybWF0UHJvcGVydHlJbmZvIiwicHJvcEluZm8iLCJwcm9wSW5mb3MiLCJfZm9ybWF0UHJvcGVydHlJbmZvIiwicHJvcGVydHlJbmZvRm9yRmlsdGVyQmFyIiwic3RyaW5naWZ5IiwicHJvcGVydHkiLCJoaWRkZW5GaWx0ZXIiLCJyZXF1aXJlZCIsInRvb2x0aXAiLCJ2aXNpYmxlIiwibWF4Q29uZGl0aW9ucyIsImNhc2VTZW5zaXRpdmUiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkZpbHRlclV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW50aXR5VHlwZSwgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlQYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL0VkbVwiO1xuaW1wb3J0IHsgQ29tbW9uQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25cIjtcbmltcG9ydCB0eXBlIHsgU2VsZWN0aW9uRmllbGRzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgbWVyZ2UgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VUcmVlTW9kaWZpZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgQmFzZU1hbmlmZXN0U2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgTWFuaWZlc3RXcmFwcGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0V3JhcHBlclwiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBJRGlhZ25vc3RpY3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBUYWJsZVZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlUeXBlQ29uZmlnIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL3RhYmxlL0NvbHVtbnNcIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyRmllbGQsIFByb3BlcnR5SW5mbywgUHJvcGVydHlJbmZvRXh0ZXJuYWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9MaXN0UmVwb3J0L0ZpbHRlckJhclwiO1xuaW1wb3J0ICogYXMgRmlsdGVyQmFyQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0xpc3RSZXBvcnQvRmlsdGVyQmFyXCI7XG5pbXBvcnQgeyBnZXRBbGxDdXN0b21BZ2dyZWdhdGVzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTWV0YU1vZGVsRnVuY3Rpb25cIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IE9EQVRBX1RZUEVfTUFQUElORyB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0Rpc3BsYXlNb2RlRm9ybWF0dGVyXCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IERlbGVnYXRlVXRpbCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9EZWxlZ2F0ZVV0aWxcIjtcbmltcG9ydCB7IHR5cGUgZGVmYXVsdCBhcyBGRUZpbHRlckJhciB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL0ZpbHRlckJhclwiO1xuaW1wb3J0IFNlbWFudGljRGF0ZU9wZXJhdG9ycyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXJCYXIvU2VtYW50aWNEYXRlT3BlcmF0b3JzXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25WYWx1ZUxpc3RUeXBlIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvdmFsdWVoZWxwL1ZhbHVlTGlzdEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxCaW5kaW5nSW5mbyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1V0aWxzXCI7XG5pbXBvcnQgdHlwZSBMaXN0UmVwb3J0Q29udHJvbGxlciBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9MaXN0UmVwb3J0L0xpc3RSZXBvcnRDb250cm9sbGVyLmNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgdHlwZSBDaGFydCBmcm9tIFwic2FwL3VpL21kYy9DaGFydFwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyIGZyb20gXCJzYXAvdWkvbWRjL0ZpbHRlckJhclwiO1xuaW1wb3J0IHR5cGUgeyBDb25kaXRpb25PYmplY3QgfSBmcm9tIFwic2FwL3VpL21kYy9jb25kaXRpb24vQ29uZGl0aW9uXCI7XG5pbXBvcnQgQ29uZGl0aW9uIGZyb20gXCJzYXAvdWkvbWRjL2NvbmRpdGlvbi9Db25kaXRpb25cIjtcbmltcG9ydCBDb25kaXRpb25Db252ZXJ0ZXIgZnJvbSBcInNhcC91aS9tZGMvY29uZGl0aW9uL0NvbmRpdGlvbkNvbnZlcnRlclwiO1xuaW1wb3J0IENvbmRpdGlvblZhbGlkYXRlZCBmcm9tIFwic2FwL3VpL21kYy9lbnVtcy9Db25kaXRpb25WYWxpZGF0ZWRcIjtcbmltcG9ydCB0eXBlIHsgSUZpbHRlciB9IGZyb20gXCJzYXAvdWkvbWRjL2xpYnJhcnlcIjtcbmltcG9ydCBUeXBlTWFwIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L1R5cGVNYXBcIjtcbmltcG9ydCBTdGF0ZVV0aWwgZnJvbSBcInNhcC91aS9tZGMvcDEzbi9TdGF0ZVV0aWxcIjtcbmltcG9ydCBGaWx0ZXJVdGlsIGZyb20gXCJzYXAvdWkvbWRjL3V0aWwvRmlsdGVyVXRpbFwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IEZpbHRlck9wZXJhdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyT3BlcmF0b3JcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBPRGF0YVV0aWxzIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFVdGlsc1wiO1xuaW1wb3J0IEVESVRTVEFURSBmcm9tIFwiLi4vZmlsdGVyQmFyL0RyYWZ0RWRpdFN0YXRlXCI7XG5cbmV4cG9ydCB0eXBlIElGaWx0ZXJDb250cm9sID0gQ29udHJvbCAmIHtcblx0Z2V0U2VhcmNoPzogKCkgPT4gc3RyaW5nO1xuXHRnZXRQcm9wZXJ0eUluZm9TZXQ/OiAoKSA9PiBQcm9wZXJ0eUluZm9bXTtcblx0Z2V0UHJvcGVydHlJbmZvPzogKCkgPT4gUHJvcGVydHlJbmZvW107XG5cdGdldFR5cGVNYXA6ICgpID0+IFR5cGVNYXA7XG5cdGdldENvbnRyb2xEZWxlZ2F0ZT86ICgpID0+IHtcblx0XHRmZXRjaFByb3BlcnRpZXNGb3JFbnRpdHk6IChzRW50aXR5U2V0UGF0aDogc3RyaW5nLCBvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgb0NvbnRyb2w6IENvbnRyb2wpID0+IFByb3BlcnR5SW5mb1tdO1xuXHR9O1xuXHRpc0luaXRpYWxpemVkPzogKCkgPT4gYm9vbGVhbjtcblx0Z2V0Q3VycmVudFN0YXRlPzogKCkgPT4geyBpdGVtcz86IHsga2V5OiBzdHJpbmcgfVtdIH07XG59ICYgSUZpbHRlcjtcbmVudW0gUHJvcGVydHlJbmZvS2V5cyB7XG5cdGhpZGRlbkZpbHRlciA9IFwiaGlkZGVuRmlsdGVyXCIsXG5cdHJlcXVpcmVkID0gXCJyZXF1aXJlZFwiLFxuXHRwYXRoID0gXCJwYXRoXCIsXG5cdHRvb2x0aXAgPSBcInRvb2x0aXBcIixcblx0dmlzaWJsZSA9IFwidmlzaWJsZVwiLFxuXHRtYXhDb25kaXRpb25zID0gXCJtYXhDb25kaXRpb25zXCIsXG5cdGZvcm1hdE9wdGlvbnMgPSBcImZvcm1hdE9wdGlvbnNcIixcblx0Y29uc3RyYWludHMgPSBcImNvbnN0cmFpbnRzXCIsXG5cdGdyb3VwID0gXCJncm91cFwiLFxuXHRncm91cExhYmVsID0gXCJncm91cExhYmVsXCIsXG5cdGNhc2VTZW5zaXRpdmUgPSBcImNhc2VTZW5zaXRpdmVcIlxufVxuXG5jb25zdCBDT05ESVRJT05fUEFUSF9UT19QUk9QRVJUWV9QQVRIX1JFR0VYID0gL1srKl0vZztcblxuY29uc3Qgb0ZpbHRlclV0aWxzID0ge1xuXHRnZXRGaWx0ZXI6IGZ1bmN0aW9uICh2SUZpbHRlcjogc3RyaW5nIHwgSUZpbHRlckNvbnRyb2wgfCBudWxsKTogRmlsdGVyIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBhRmlsdGVycyA9IG9GaWx0ZXJVdGlscy5nZXRGaWx0ZXJJbmZvKHZJRmlsdGVyKS5maWx0ZXJzO1xuXHRcdHJldHVybiBhRmlsdGVycz8ubGVuZ3RoID8gbmV3IEZpbHRlcihhRmlsdGVycywgZmFsc2UpIDogdW5kZWZpbmVkO1xuXHR9LFxuXHRnZXRGaWx0ZXJGaWVsZDogZnVuY3Rpb24gKHByb3BlcnR5UGF0aDogc3RyaW5nLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LCBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlKTogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiBGaWx0ZXJCYXJDb252ZXJ0ZXIuZ2V0RmlsdGVyRmllbGQocHJvcGVydHlQYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCBlbnRpdHlUeXBlKTtcblx0fSxcblx0YnVpbGRQcm9wZXJ5SW5mbzogZnVuY3Rpb24gKHByb3BlcnR5SW5mb0ZpZWxkOiBGaWx0ZXJGaWVsZCwgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IFByb3BlcnR5SW5mbyB7XG5cdFx0bGV0IG9Qcm9wZXJ0eUluZm87XG5cdFx0Y29uc3QgYVR5cGVDb25maWc6IFJlY29yZDxzdHJpbmcsIFByb3BlcnR5VHlwZUNvbmZpZz4gPSB7fTtcblx0XHRjb25zdCBwcm9wZXJ0eUNvbnZlcnR5Q29udGV4dCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcjxQcm9wZXJ0eT4ocHJvcGVydHlJbmZvRmllbGQuYW5ub3RhdGlvblBhdGgpO1xuXHRcdGNvbnN0IHByb3BlcnR5VGFyZ2V0T2JqZWN0ID0gcHJvcGVydHlDb252ZXJ0eUNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldE9iamVjdDtcblx0XHRjb25zdCBvVHlwZUNvbmZpZyA9IEZpbHRlckJhckNvbnZlcnRlci5mZXRjaFR5cGVDb25maWcocHJvcGVydHlUYXJnZXRPYmplY3QpO1xuXHRcdG9Qcm9wZXJ0eUluZm8gPSBGaWx0ZXJCYXJDb252ZXJ0ZXIuZmV0Y2hQcm9wZXJ0eUluZm8oY29udmVydGVyQ29udGV4dCwgcHJvcGVydHlJbmZvRmllbGQsIG9UeXBlQ29uZmlnKTtcblx0XHRhVHlwZUNvbmZpZ1twcm9wZXJ0eUluZm9GaWVsZC5rZXldID0gb1R5cGVDb25maWc7XG5cdFx0b1Byb3BlcnR5SW5mbyA9IEZpbHRlckJhckNvbnZlcnRlci5hc3NpZ25EYXRhVHlwZVRvUHJvcGVydHlJbmZvKG9Qcm9wZXJ0eUluZm8sIGNvbnZlcnRlckNvbnRleHQsIFtdLCBhVHlwZUNvbmZpZyk7XG5cdFx0cmV0dXJuIG9Qcm9wZXJ0eUluZm87XG5cdH0sXG5cdGNyZWF0ZUNvbnZlcnRlckNvbnRleHQ6IGZ1bmN0aW9uIChcblx0XHRvRmlsdGVyQ29udHJvbDogSUZpbHRlckNvbnRyb2wsXG5cdFx0c0VudGl0eVR5cGVQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0bWV0YU1vZGVsPzogT0RhdGFNZXRhTW9kZWwsXG5cdFx0YXBwQ29tcG9uZW50PzogQXBwQ29tcG9uZW50XG5cdCk6IENvbnZlcnRlckNvbnRleHQge1xuXHRcdGNvbnN0IHNGaWx0ZXJFbnRpdHlUeXBlUGF0aCA9IERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhPHN0cmluZz4ob0ZpbHRlckNvbnRyb2wsIFwiZW50aXR5VHlwZVwiKSxcblx0XHRcdGNvbnRleHRQYXRoID0gc0VudGl0eVR5cGVQYXRoIHx8IHNGaWx0ZXJFbnRpdHlUeXBlUGF0aDtcblxuXHRcdGNvbnN0IG9WaWV3ID0gKG9GaWx0ZXJDb250cm9sIGFzIFBhcnRpYWw8SUZpbHRlckNvbnRyb2w+KS5pc0EgPyBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KG9GaWx0ZXJDb250cm9sKSA6IG51bGw7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IChtZXRhTW9kZWwgfHwgb0ZpbHRlckNvbnRyb2wuZ2V0TW9kZWwoKSEuZ2V0TWV0YU1vZGVsKCkpIGFzIE9EYXRhTWV0YU1vZGVsO1xuXHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBhcHBDb21wb25lbnQgfHwgKG9WaWV3ICYmIENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChvVmlldykpO1xuXHRcdGNvbnN0IG9WaXN1YWxpemF0aW9uT2JqZWN0UGF0aCA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMob01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChjb250ZXh0UGF0aCEpISk7XG5cdFx0bGV0IG1hbmlmZXN0U2V0dGluZ3M6IEJhc2VNYW5pZmVzdFNldHRpbmdzIHwgdW5kZWZpbmVkO1xuXHRcdGlmIChvRmlsdGVyQ29udHJvbC5pc0EgJiYgIW9GaWx0ZXJDb250cm9sLmlzQShcInNhcC51aS5tZGMudmFsdWVoZWxwLkZpbHRlckJhclwiKSkge1xuXHRcdFx0bWFuaWZlc3RTZXR0aW5ncyA9ICgob1ZpZXcgJiYgb1ZpZXcuZ2V0Vmlld0RhdGEoKSkgfHwge30pIGFzIEJhc2VNYW5pZmVzdFNldHRpbmdzO1xuXHRcdH1cblx0XHRyZXR1cm4gQ29udmVydGVyQ29udGV4dC5jcmVhdGVDb252ZXJ0ZXJDb250ZXh0Rm9yTWFjcm8oXG5cdFx0XHRvVmlzdWFsaXphdGlvbk9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQubmFtZSxcblx0XHRcdG9NZXRhTW9kZWwsXG5cdFx0XHRvQXBwQ29tcG9uZW50Py5nZXREaWFnbm9zdGljcygpIGFzIHVua25vd24gYXMgSURpYWdub3N0aWNzLFxuXHRcdFx0bWVyZ2UsXG5cdFx0XHRvVmlzdWFsaXphdGlvbk9iamVjdFBhdGguY29udGV4dExvY2F0aW9uLFxuXHRcdFx0bmV3IE1hbmlmZXN0V3JhcHBlcigobWFuaWZlc3RTZXR0aW5ncyA/PyB7fSkgYXMgQmFzZU1hbmlmZXN0U2V0dGluZ3MpXG5cdFx0KTtcblx0fSxcblx0Z2V0Q29udmVydGVkRmlsdGVyRmllbGRzOiBmdW5jdGlvbiAoXG5cdFx0b0ZpbHRlckNvbnRyb2w6IElGaWx0ZXJDb250cm9sLFxuXHRcdHNFbnRpdHlUeXBlUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdGluY2x1ZGVIaWRkZW4/OiBib29sZWFuLFxuXHRcdG1ldGFNb2RlbD86IE9EYXRhTWV0YU1vZGVsLFxuXHRcdGFwcENvbXBvbmVudD86IEFwcENvbXBvbmVudCxcblx0XHRvTW9kaWZpZXI/OiBCYXNlVHJlZU1vZGlmaWVyLFxuXHRcdGxpbmVJdGVtVGVybT86IHN0cmluZ1xuXHQpOiBGaWx0ZXJGaWVsZFtdIHtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gdGhpcy5fZ2V0RmlsdGVyTWV0YU1vZGVsKG9GaWx0ZXJDb250cm9sLCBtZXRhTW9kZWwpO1xuXHRcdGNvbnN0IHNGaWx0ZXJFbnRpdHlUeXBlUGF0aCA9IERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhPHN0cmluZz4ob0ZpbHRlckNvbnRyb2wsIFwiZW50aXR5VHlwZVwiKTtcblx0XHRjb25zdCBhbm5vdGF0aW9uUGF0aCA9IERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhPHN0cmluZz4ob0ZpbHRlckNvbnRyb2wsIFwiYW5ub3RhdGlvblBhdGhcIiksXG5cdFx0XHRjb250ZXh0UGF0aCA9IHNFbnRpdHlUeXBlUGF0aCB8fCBzRmlsdGVyRW50aXR5VHlwZVBhdGg7XG5cblx0XHRjb25zdCBsclRhYmxlczogVGFibGVWaXN1YWxpemF0aW9uW10gPSB0aGlzLl9nZXRGaWVsZHNGb3JUYWJsZShvRmlsdGVyQ29udHJvbCwgc0VudGl0eVR5cGVQYXRoKTtcblxuXHRcdGNvbnN0IG9Db252ZXJ0ZXJDb250ZXh0ID0gdGhpcy5jcmVhdGVDb252ZXJ0ZXJDb250ZXh0KG9GaWx0ZXJDb250cm9sLCBzRW50aXR5VHlwZVBhdGgsIG1ldGFNb2RlbCA/PyBvTWV0YU1vZGVsLCBhcHBDb21wb25lbnQpO1xuXG5cdFx0Ly9hU2VsZWN0aW9uRmllbGRzID0gRmlsdGVyQmFyQ29udmVydGVyLmdldFNlbGVjdGlvbkZpZWxkcyhvQ29udmVydGVyQ29udGV4dCk7XG5cdFx0cmV0dXJuIHRoaXMuX2dldFNlbGVjdGlvbkZpZWxkcyhcblx0XHRcdG9GaWx0ZXJDb250cm9sLFxuXHRcdFx0c0VudGl0eVR5cGVQYXRoLFxuXHRcdFx0c0ZpbHRlckVudGl0eVR5cGVQYXRoISxcblx0XHRcdGNvbnRleHRQYXRoISxcblx0XHRcdGxyVGFibGVzLFxuXHRcdFx0b01ldGFNb2RlbCxcblx0XHRcdG9Db252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0aW5jbHVkZUhpZGRlbixcblx0XHRcdG9Nb2RpZmllcixcblx0XHRcdGxpbmVJdGVtVGVybSxcblx0XHRcdGFubm90YXRpb25QYXRoXG5cdFx0KTtcblx0fSxcblxuXHRnZXRCaW5kaW5nUGF0aEZvclBhcmFtZXRlcnM6IGZ1bmN0aW9uIChcblx0XHRvSUZpbHRlcjogSUZpbHRlckNvbnRyb2wsXG5cdFx0bUNvbmRpdGlvbnM6IFJlY29yZDxzdHJpbmcsIENvbmRpdGlvbk9iamVjdFtdPixcblx0XHRhRmlsdGVyUHJvcGVydGllc01ldGFkYXRhOiBQcm9wZXJ0eUluZm9bXSB8IG51bGwsXG5cdFx0YVBhcmFtZXRlcnM6IHN0cmluZ1tdXG5cdCk6IHN0cmluZyB7XG5cdFx0Y29uc3QgYVBhcmFtczogc3RyaW5nW10gPSBbXTtcblx0XHRhRmlsdGVyUHJvcGVydGllc01ldGFkYXRhID0gb0ZpbHRlclV0aWxzLnNldFR5cGVDb25maWdUb1Byb3BlcnRpZXMoYUZpbHRlclByb3BlcnRpZXNNZXRhZGF0YSkhO1xuXHRcdC8vIENvbGxlY3RpbmcgYWxsIHBhcmFtZXRlciB2YWx1ZXMgZnJvbSBjb25kaXRpb25zXG5cdFx0Zm9yIChjb25zdCBzRmllbGRQYXRoIG9mIGFQYXJhbWV0ZXJzKSB7XG5cdFx0XHRpZiAobUNvbmRpdGlvbnNbc0ZpZWxkUGF0aF0gJiYgbUNvbmRpdGlvbnNbc0ZpZWxkUGF0aF0ubGVuZ3RoID4gMCkge1xuXHRcdFx0XHQvLyBXZSB3b3VsZCBiZSB1c2luZyBvbmx5IHRoZSBmaXJzdCBjb25kaXRpb24gZm9yIHBhcmFtZXRlciB2YWx1ZS5cblx0XHRcdFx0Y29uc3Qgb0NvbmRpdGlvbkludGVybmFsID0gbWVyZ2Uoe30sIG1Db25kaXRpb25zW3NGaWVsZFBhdGhdWzBdKSBhcyBDb25kaXRpb25PYmplY3Q7XG5cdFx0XHRcdGNvbnN0IG9Qcm9wZXJ0eSA9IEZpbHRlclV0aWwuZ2V0UHJvcGVydHlCeUtleShhRmlsdGVyUHJvcGVydGllc01ldGFkYXRhLCBzRmllbGRQYXRoKSBhcyBQcm9wZXJ0eUluZm87XG5cdFx0XHRcdGNvbnN0IG9UeXBlQ29uZmlnID1cblx0XHRcdFx0XHRvUHJvcGVydHkudHlwZUNvbmZpZyB8fCBUeXBlTWFwLmdldFR5cGVDb25maWcob1Byb3BlcnR5LmRhdGFUeXBlLCBvUHJvcGVydHkuZm9ybWF0T3B0aW9ucywgb1Byb3BlcnR5LmNvbnN0cmFpbnRzKTtcblx0XHRcdFx0Y29uc3QgbUludGVybmFsUGFyYW1ldGVyQ29uZGl0aW9uID0gQ29uZGl0aW9uQ29udmVydGVyLnRvVHlwZShvQ29uZGl0aW9uSW50ZXJuYWwsIG9UeXBlQ29uZmlnLCBvSUZpbHRlci5nZXRUeXBlTWFwKCkpO1xuXHRcdFx0XHRjb25zdCBzRWRtVHlwZSA9IE9EQVRBX1RZUEVfTUFQUElOR1tvVHlwZUNvbmZpZy5jbGFzc05hbWVdO1xuXHRcdFx0XHRhUGFyYW1zLnB1c2goXG5cdFx0XHRcdFx0YCR7c0ZpZWxkUGF0aH09JHtlbmNvZGVVUklDb21wb25lbnQoT0RhdGFVdGlscy5mb3JtYXRMaXRlcmFsKG1JbnRlcm5hbFBhcmFtZXRlckNvbmRpdGlvbi52YWx1ZXNbMF0sIHNFZG1UeXBlKSl9YFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEJpbmRpbmcgcGF0aCBmcm9tIEVudGl0eVR5cGVcblx0XHRjb25zdCBzRW50aXR5VHlwZVBhdGggPSBvSUZpbHRlci5kYXRhKFwiZW50aXR5VHlwZVwiKTtcblx0XHRjb25zdCBzRW50aXR5U2V0UGF0aCA9IHNFbnRpdHlUeXBlUGF0aC5zdWJzdHJpbmcoMCwgc0VudGl0eVR5cGVQYXRoLmxlbmd0aCAtIDEpO1xuXHRcdGNvbnN0IHNQYXJhbWV0ZXJFbnRpdHlTZXQgPSBzRW50aXR5U2V0UGF0aC5zbGljZSgwLCBzRW50aXR5U2V0UGF0aC5sYXN0SW5kZXhPZihcIi9cIikpO1xuXHRcdGNvbnN0IHNUYXJnZXROYXZpZ2F0aW9uID0gc0VudGl0eVNldFBhdGguc3Vic3RyaW5nKHNFbnRpdHlTZXRQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSArIDEpO1xuXHRcdC8vIGNyZWF0ZSBwYXJhbWV0ZXIgY29udGV4dFxuXHRcdHJldHVybiBgJHtzUGFyYW1ldGVyRW50aXR5U2V0fSgke2FQYXJhbXMudG9TdHJpbmcoKX0pLyR7c1RhcmdldE5hdmlnYXRpb259YDtcblx0fSxcblxuXHRnZXRFZGl0U3RhdGVJc0hpZGVEcmFmdDogZnVuY3Rpb24gKG1Db25kaXRpb25zPzogUmVjb3JkPHN0cmluZywgQ29uZGl0aW9uT2JqZWN0W10+KTogYm9vbGVhbiB7XG5cdFx0bGV0IGJJc0hpZGVEcmFmdCA9IGZhbHNlO1xuXHRcdGlmIChtQ29uZGl0aW9ucyAmJiBtQ29uZGl0aW9ucy4kZWRpdFN0YXRlKSB7XG5cdFx0XHRjb25zdCBvQ29uZGl0aW9uID0gbUNvbmRpdGlvbnMuJGVkaXRTdGF0ZS5maW5kKGZ1bmN0aW9uIChjb25kaXRpb246IENvbmRpdGlvbk9iamVjdCkge1xuXHRcdFx0XHRyZXR1cm4gY29uZGl0aW9uLm9wZXJhdG9yID09PSBcIkRSQUZUX0VESVRfU1RBVEVcIjtcblx0XHRcdH0pO1xuXHRcdFx0aWYgKG9Db25kaXRpb24gJiYgKG9Db25kaXRpb24udmFsdWVzLmluY2x1ZGVzKFwiQUxMX0hJRElOR19EUkFGVFNcIikgfHwgb0NvbmRpdGlvbi52YWx1ZXMuaW5jbHVkZXMoXCJTQVZFRF9PTkxZXCIpKSkge1xuXHRcdFx0XHRiSXNIaWRlRHJhZnQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gYklzSGlkZURyYWZ0O1xuXHR9LFxuXHQvKipcblx0ICogR2V0cyBhbGwgZmlsdGVycyB0aGF0IG9yaWdpbmF0ZSBmcm9tIHRoZSBNREMgRmlsdGVyQmFyLlxuXHQgKiBAcGFyYW0gdklGaWx0ZXIgU3RyaW5nIG9yIG9iamVjdCBpbnN0YW5jZSByZWxhdGVkIHRvIE1EQ19GaWx0ZXJCYXIvVGFibGUvQ2hhcnRcblx0ICogQHBhcmFtIG1Qcm9wZXJ0aWVzIFByb3BlcnRpZXMgb24gZmlsdGVycyB0aGF0IGFyZSB0byBiZSByZXRyaWV2ZWQuIEF2YWlsYWJsZSBwYXJhbWV0ZXJzOlxuXHQgKiBAcGFyYW0gbVByb3BlcnRpZXMuaWdub3JlZFByb3BlcnRpZXMgQXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgd2hpY2ggc2hvdWxkIGJlIG5vdCBjb25zaWRlcmVkIGZvciBmaWx0ZXJpbmdcblx0ICogQHBhcmFtIG1Qcm9wZXJ0aWVzLnByb3BlcnRpZXNNZXRhZGF0YSBBcnJheSB3aXRoIGFsbCB0aGUgcHJvcGVydHkgbWV0YWRhdGEuIElmIG5vdCBwcm92aWRlZCwgcHJvcGVydGllcyB3aWxsIGJlIHJldHJpZXZlZCBmcm9tIHZJRmlsdGVyLlxuXHQgKiBAcGFyYW0gbVByb3BlcnRpZXMudGFyZ2V0Q29udHJvbCBNRENfdGFibGUgb3IgY2hhcnQuIElmIHByb3ZpZGVkLCBwcm9wZXJ0eSBuYW1lcyB3aGljaCBhcmUgbm90IHJlbGV2YW50IGZvciB0aGUgdGFyZ2V0IGNvbnRyb2wgZW50aXR5U2V0IGFyZSBub3QgY29uc2lkZXJlZC5cblx0ICogQHBhcmFtIG1GaWx0ZXJDb25kaXRpb25zIE1hcCB3aXRoIGV4dGVybmFsaXplZCBmaWx0ZXIgY29uZGl0aW9ucy5cblx0ICogQHJldHVybnMgRmlsdGVyQmFyIGZpbHRlcnMgYW5kIGJhc2ljIHNlYXJjaFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0Z2V0RmlsdGVySW5mbzogZnVuY3Rpb24gKFxuXHRcdHZJRmlsdGVyOiBzdHJpbmcgfCBJRmlsdGVyQ29udHJvbCB8IG51bGwsXG5cdFx0bVByb3BlcnRpZXM/OiB7IGlnbm9yZWRQcm9wZXJ0aWVzPzogc3RyaW5nW107IHByb3BlcnRpZXNNZXRhZGF0YT86IFByb3BlcnR5SW5mb1tdOyB0YXJnZXRDb250cm9sPzogQ29udHJvbCB9LFxuXHRcdG1GaWx0ZXJDb25kaXRpb25zPzogUmVjb3JkPHN0cmluZywgQ29uZGl0aW9uT2JqZWN0W10+XG5cdCk6IEludGVybmFsQmluZGluZ0luZm8ge1xuXHRcdGxldCBhSWdub3JlUHJvcGVydGllcyA9IChtUHJvcGVydGllcyAmJiBtUHJvcGVydGllcy5pZ25vcmVkUHJvcGVydGllcykgfHwgW107XG5cdFx0Y29uc3Qgb1RhcmdldENvbnRyb2wgPSBtUHJvcGVydGllcyAmJiBtUHJvcGVydGllcy50YXJnZXRDb250cm9sLFxuXHRcdFx0c1RhcmdldEVudGl0eVBhdGggPSBvVGFyZ2V0Q29udHJvbCA/IG9UYXJnZXRDb250cm9sLmRhdGEoXCJlbnRpdHlUeXBlXCIpIDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IG1QYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cdFx0bGV0IG9JRmlsdGVyOiBJRmlsdGVyQ29udHJvbCA9IHZJRmlsdGVyIGFzIElGaWx0ZXJDb250cm9sLFxuXHRcdFx0c1NlYXJjaCxcblx0XHRcdGFGaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdLFxuXHRcdFx0c0JpbmRpbmdQYXRoLFxuXHRcdFx0YVByb3BlcnRpZXNNZXRhZGF0YSA9IG1Qcm9wZXJ0aWVzICYmIG1Qcm9wZXJ0aWVzLnByb3BlcnRpZXNNZXRhZGF0YTtcblx0XHRpZiAodHlwZW9mIHZJRmlsdGVyID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRvSUZpbHRlciA9IEVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQodklGaWx0ZXIpIGFzIHVua25vd24gYXMgSUZpbHRlckNvbnRyb2w7XG5cdFx0fVxuXHRcdGlmIChvSUZpbHRlcikge1xuXHRcdFx0c1NlYXJjaCA9IHRoaXMuX2dldFNlYXJjaEZpZWxkKG9JRmlsdGVyLCBhSWdub3JlUHJvcGVydGllcyk7XG5cdFx0XHRjb25zdCBtQ29uZGl0aW9ucyA9IHRoaXMuX2dldEZpbHRlckNvbmRpdGlvbnMobVByb3BlcnRpZXMsIG1GaWx0ZXJDb25kaXRpb25zISwgb0lGaWx0ZXIpO1xuXHRcdFx0bGV0IGFGaWx0ZXJQcm9wZXJ0aWVzTWV0YWRhdGE6IFByb3BlcnR5SW5mb1tdIHwgbnVsbDtcblx0XHRcdGlmIChvSUZpbHRlci5pc0E8RmlsdGVyQmFyPihcInNhcC51aS5tZGMuRmlsdGVyQmFyXCIpKSB7XG5cdFx0XHRcdGFGaWx0ZXJQcm9wZXJ0aWVzTWV0YWRhdGEgPSB0aGlzLmdldEZpbHRlclByb3BlcnR5SW5mbyhvSUZpbHRlcik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhRmlsdGVyUHJvcGVydGllc01ldGFkYXRhID0gb0lGaWx0ZXIuZ2V0UHJvcGVydHlJbmZvU2V0ID8gb0lGaWx0ZXIuZ2V0UHJvcGVydHlJbmZvU2V0KCkgOiBudWxsO1xuXHRcdFx0fVxuXHRcdFx0YUZpbHRlclByb3BlcnRpZXNNZXRhZGF0YSA9IHRoaXMuX2dldEZpbHRlclByb3BlcnRpZXNNZXRhZGF0YShhRmlsdGVyUHJvcGVydGllc01ldGFkYXRhLCBvSUZpbHRlcik7XG5cdFx0XHRpZiAobVByb3BlcnRpZXMgJiYgbVByb3BlcnRpZXMudGFyZ2V0Q29udHJvbCAmJiBtUHJvcGVydGllcy50YXJnZXRDb250cm9sLmlzQShcInNhcC51aS5tZGMuQ2hhcnRcIikpIHtcblx0XHRcdFx0T2JqZWN0LmtleXMobUNvbmRpdGlvbnMpLmZvckVhY2goZnVuY3Rpb24gKHNLZXk6IHN0cmluZykge1xuXHRcdFx0XHRcdGlmIChzS2V5ID09PSBcIiRlZGl0U3RhdGVcIikge1xuXHRcdFx0XHRcdFx0ZGVsZXRlIG1Db25kaXRpb25zW1wiJGVkaXRTdGF0ZVwiXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0bGV0IGFQYXJhbWV0ZXJzID0gb0lGaWx0ZXIuZGF0YShcInBhcmFtZXRlcnNcIikgfHwgW107XG5cdFx0XHRhUGFyYW1ldGVycyA9IHR5cGVvZiBhUGFyYW1ldGVycyA9PT0gXCJzdHJpbmdcIiA/IEpTT04ucGFyc2UoYVBhcmFtZXRlcnMpIDogYVBhcmFtZXRlcnM7XG5cdFx0XHRpZiAoYVBhcmFtZXRlcnMgJiYgYVBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHQvLyBCaW5kaW5nIHBhdGggY2hhbmdlcyBpbiBjYXNlIG9mIHBhcmFtZXRlcnMuXG5cdFx0XHRcdHNCaW5kaW5nUGF0aCA9IG9GaWx0ZXJVdGlscy5nZXRCaW5kaW5nUGF0aEZvclBhcmFtZXRlcnMob0lGaWx0ZXIsIG1Db25kaXRpb25zLCBhRmlsdGVyUHJvcGVydGllc01ldGFkYXRhLCBhUGFyYW1ldGVycyk7XG5cdFx0XHRcdGlmIChPYmplY3Qua2V5cyhtQ29uZGl0aW9ucykubGVuZ3RoKSB7XG5cdFx0XHRcdFx0T2JqZWN0LmtleXMobUNvbmRpdGlvbnMpLmZvckVhY2goKHBhcmFtKSA9PiB7XG5cdFx0XHRcdFx0XHRhUGFyYW1ldGVycy5mb3JFYWNoKChyZXF1aXJlZFBhcmFtOiBzdHJpbmcpID0+IHtcblx0XHRcdFx0XHRcdFx0aWYgKHBhcmFtID09PSByZXF1aXJlZFBhcmFtKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgbVBhcmFtZXRlcnNWYWx1ZSA9IG1Db25kaXRpb25zW3BhcmFtXVswXS52YWx1ZXM7XG5cdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnNbcmVxdWlyZWRQYXJhbV0gPSBtUGFyYW1ldGVyc1ZhbHVlWzBdO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKG1Db25kaXRpb25zKSB7XG5cdFx0XHRcdC8vRXhjbHVkZSBJbnRlcmZhY2UgRmlsdGVyIHByb3BlcnRpZXMgdGhhdCBhcmUgbm90IHJlbGV2YW50IGZvciB0aGUgVGFyZ2V0IGNvbnRyb2wgZW50aXR5U2V0XG5cdFx0XHRcdGlmIChzVGFyZ2V0RW50aXR5UGF0aCAmJiBvSUZpbHRlci5kYXRhKFwiZW50aXR5VHlwZVwiKSAmJiBvSUZpbHRlci5kYXRhKFwiZW50aXR5VHlwZVwiKSAhPT0gc1RhcmdldEVudGl0eVBhdGgpIHtcblx0XHRcdFx0XHRjb25zdCBvTWV0YU1vZGVsID0gb0lGaWx0ZXIuZ2V0TW9kZWwoKSEuZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWw7XG5cdFx0XHRcdFx0Y29uc3QgYVRhcmdldFByb3BlcnRpZXNNZXRhZGF0YSA9IG9JRmlsdGVyXG5cdFx0XHRcdFx0XHQuZ2V0Q29udHJvbERlbGVnYXRlPy4oKVxuXHRcdFx0XHRcdFx0LmZldGNoUHJvcGVydGllc0ZvckVudGl0eShzVGFyZ2V0RW50aXR5UGF0aCwgb01ldGFNb2RlbCwgb0lGaWx0ZXIpIGFzIFByb3BlcnR5SW5mb1tdO1xuXHRcdFx0XHRcdGFQcm9wZXJ0aWVzTWV0YWRhdGEgPSBhVGFyZ2V0UHJvcGVydGllc01ldGFkYXRhO1xuXG5cdFx0XHRcdFx0Y29uc3QgX2FJZ25vcmVQcm9wZXJ0aWVzID0gdGhpcy5fZ2V0SWdub3JlZFByb3BlcnRpZXMoXG5cdFx0XHRcdFx0XHRhRmlsdGVyUHJvcGVydGllc01ldGFkYXRhIGFzIFByb3BlcnR5SW5mb1tdLFxuXHRcdFx0XHRcdFx0YVRhcmdldFByb3BlcnRpZXNNZXRhZGF0YVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0aWYgKF9hSWdub3JlUHJvcGVydGllcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRhSWdub3JlUHJvcGVydGllcyA9IGFJZ25vcmVQcm9wZXJ0aWVzLmNvbmNhdChfYUlnbm9yZVByb3BlcnRpZXMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmICghYVByb3BlcnRpZXNNZXRhZGF0YSAmJiBhRmlsdGVyUHJvcGVydGllc01ldGFkYXRhKSB7XG5cdFx0XHRcdFx0YVByb3BlcnRpZXNNZXRhZGF0YSA9IGFGaWx0ZXJQcm9wZXJ0aWVzTWV0YWRhdGE7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gdmFyIGFQYXJhbUtleXMgPSBbXTtcblx0XHRcdFx0Ly8gYVBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbiAob1BhcmFtKSB7XG5cdFx0XHRcdC8vIFx0YVBhcmFtS2V5cy5wdXNoKG9QYXJhbS5rZXkpO1xuXHRcdFx0XHQvLyB9KTtcblx0XHRcdFx0YUZpbHRlcnMgPSB0aGlzLmdldEVkaXRTdGF0ZUFuZEZpbHRlcih7XG5cdFx0XHRcdFx0b0lGaWx0ZXIsXG5cdFx0XHRcdFx0bUNvbmRpdGlvbnMsXG5cdFx0XHRcdFx0YVByb3BlcnRpZXNNZXRhZGF0YSxcblx0XHRcdFx0XHRhSWdub3JlUHJvcGVydGllcyxcblx0XHRcdFx0XHRhUGFyYW1ldGVyc1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHsgcGFyYW1ldGVyczogbVBhcmFtZXRlcnMsIGZpbHRlcnM6IGFGaWx0ZXJzLCBzZWFyY2g6IHNTZWFyY2ggfHwgdW5kZWZpbmVkLCBiaW5kaW5nUGF0aDogc0JpbmRpbmdQYXRoIH07XG5cdH0sXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBGaWx0ZXIgcGFyYW1zIHRha2luZyBpbiBjb25zaWRlcmF0aW9uIHRoZSBFZGl0aW5nIFN0YXR1cyBmaWVsZCxcblx0ICogbWVyZ2VzL292ZXJyaWRlcyB0aGUgZGF0YSB0aGF0J3MgY29taW5nIGZyb20gRmlsdGVyVXRpbC5nZXRGaWx0ZXJJbmZvLCBhbmQsXG5cdCAqIHJldHVybnMgYSBtYXBwZWQgZGF0YSB0byBiZSBzZW50IHRvIHRoZSBiYWNrZW5kLlxuXHQgKiBAcGFyYW0gcGFyYW0gT2JqZWN0XG5cdCAqIEBwYXJhbSBwYXJhbS5vSUZpbHRlciBPYmplY3QgRmlsdGVyQmFyIGluc3RhbmNlXG5cdCAqIEBwYXJhbSBwYXJhbS5tQ29uZGl0aW9ucyBPYmplY3QgQ29uZGl0aW9ucyB0aGF0IGNvbWVzIGZyb20gdGhlIEZpbHRlciBGaWVsZHNcblx0ICogQHBhcmFtIHBhcmFtLmFQcm9wZXJ0aWVzTWV0YWRhdGEgQXJyYXkgRmlsdGVyIG1ldGFkYXRhXG5cdCAqIEBwYXJhbSBwYXJhbS5hSWdub3JlUHJvcGVydGllcyBBcnJheSBvZiBzdHJpbmdzIHdpdGggdGhlIGZpZWxkIGtleXMgd2hpY2ggbmVlZCB0byBiZSBpZ25vcmVkXG5cdCAqIEBwYXJhbSBwYXJhbS5hUGFyYW1ldGVycyBBcnJheSBVUkwgcGFyYW1zIHRoYXQgYWxzbyBuZWVkIHRvIGJlIGlnbm9yZSBhbmQgYXJlIG1lcmdlZCBpbnRvIHRoZSBhSWdub3JlUHJvcGVydGllc1xuXHQgKiBAcmV0dXJucyBGaWx0ZXJCYXIgZmlsdGVycyBhcnJheVxuXHQgKi9cblx0Z2V0RWRpdFN0YXRlQW5kRmlsdGVyOiBmdW5jdGlvbiAoe1xuXHRcdG9JRmlsdGVyLFxuXHRcdG1Db25kaXRpb25zLFxuXHRcdGFQcm9wZXJ0aWVzTWV0YWRhdGEsXG5cdFx0YUlnbm9yZVByb3BlcnRpZXMsXG5cdFx0YVBhcmFtZXRlcnNcblx0fToge1xuXHRcdG9JRmlsdGVyOiBJRmlsdGVyQ29udHJvbDtcblx0XHRtQ29uZGl0aW9uczogUmVjb3JkPHN0cmluZywgQ29uZGl0aW9uT2JqZWN0W10+O1xuXHRcdGFQcm9wZXJ0aWVzTWV0YWRhdGE6IFByb3BlcnR5SW5mb1tdIHwgdW5kZWZpbmVkO1xuXHRcdGFJZ25vcmVQcm9wZXJ0aWVzOiBzdHJpbmdbXTtcblx0XHRhUGFyYW1ldGVyczogQ29uY2F0QXJyYXk8c3RyaW5nPjtcblx0fSk6IEZpbHRlcltdIHtcblx0XHRjb25zdCBvRmlsdGVyID0gKFxuXHRcdFx0RmlsdGVyVXRpbC5nZXRGaWx0ZXJJbmZvKFxuXHRcdFx0XHRvSUZpbHRlcixcblx0XHRcdFx0bUNvbmRpdGlvbnMsXG5cdFx0XHRcdG9GaWx0ZXJVdGlscy5zZXRUeXBlQ29uZmlnVG9Qcm9wZXJ0aWVzKGFQcm9wZXJ0aWVzTWV0YWRhdGEpISxcblx0XHRcdFx0YUlnbm9yZVByb3BlcnRpZXMuY29uY2F0KGFQYXJhbWV0ZXJzKVxuXHRcdFx0KSBhcyB7IGZpbHRlcnM6IEZpbHRlciB9XG5cdFx0KS5maWx0ZXJzO1xuXHRcdGNvbnN0IGN1cnJTdGF0ZSA9IG9JRmlsdGVyPy5nZXRDdXJyZW50U3RhdGU/LigpO1xuXHRcdGNvbnN0IGhhc0VkaXRTdGF0ZUZpZWxkVmlzaWJsZSA9IGN1cnJTdGF0ZT8uaXRlbXM/LnNvbWUoKGNzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KSA9PiBjcz8ua2V5ID09PSBcIiRlZGl0U3RhdGVcIik7XG5cdFx0Y29uc3QgaGFzRWRpdFN0YXRlTWV0YWRhdGEgPSBBcnJheS5pc0FycmF5KGFQcm9wZXJ0aWVzTWV0YWRhdGEpICYmIGFQcm9wZXJ0aWVzTWV0YWRhdGE/LnNvbWUoKGNzKSA9PiBjcz8ua2V5ID09PSBcIiRlZGl0U3RhdGVcIik7XG5cdFx0bGV0IGVkaXRTdGF0ZUZpbHRlcjogRmlsdGVyIHwgdW5kZWZpbmVkO1xuXHRcdGlmICghYUlnbm9yZVByb3BlcnRpZXMuaW5jbHVkZXMoXCIkZWRpdFN0YXRlXCIpICYmIGhhc0VkaXRTdGF0ZUZpZWxkVmlzaWJsZSA9PT0gdHJ1ZSAmJiBoYXNFZGl0U3RhdGVNZXRhZGF0YSkge1xuXHRcdFx0aWYgKG1Db25kaXRpb25zLmhhc093blByb3BlcnR5KFwiJGVkaXRTdGF0ZVwiKSkge1xuXHRcdFx0XHRjb25zdCBlZGl0U3RhdGVWYWx1ZSA9IG1Db25kaXRpb25zW1wiJGVkaXRTdGF0ZVwiXTtcblx0XHRcdFx0ZWRpdFN0YXRlRmlsdGVyID0gRURJVFNUQVRFLmdldEZpbHRlckZvckVkaXRTdGF0ZShlZGl0U3RhdGVWYWx1ZT8uWzBdPy52YWx1ZXM/LlswXSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlZGl0U3RhdGVGaWx0ZXIgPSBFRElUU1RBVEUuZ2V0RmlsdGVyRm9yRWRpdFN0YXRlKFwiXCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRsZXQgYUZpbHRlcnMgPSBvRmlsdGVyID8gW29GaWx0ZXJdIDogW107XG5cdFx0aWYgKGVkaXRTdGF0ZUZpbHRlcikge1xuXHRcdFx0Y29uc3QgaGFzRWRpdFN0YXRlRmlsdGVyID0gdGhpcy5oYXNFZGl0U3RhdGVGaWx0ZXJSZWN1cnNpdmVseShhRmlsdGVycyk7XG5cdFx0XHRpZiAoaGFzRWRpdFN0YXRlRmlsdGVyKSB7XG5cdFx0XHRcdGFGaWx0ZXJzID0gdGhpcy5leGNoYW5nZUVkaXRTdGF0ZUZpbHRlclJlY3Vyc2l2ZWx5KGVkaXRTdGF0ZUZpbHRlciwgYUZpbHRlcnMpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YUZpbHRlcnMgPSBbXG5cdFx0XHRcdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRcdFx0XHRmaWx0ZXJzOiBbLi4uYUZpbHRlcnMsIGVkaXRTdGF0ZUZpbHRlcl0sXG5cdFx0XHRcdFx0XHRhbmQ6IHRydWVcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRdO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gYUZpbHRlcnM7XG5cdH0sXG5cdGhhc0VkaXRTdGF0ZUZpbHRlclJlY3Vyc2l2ZWx5OiBmdW5jdGlvbiAoZmlsdGVyczogRmlsdGVyW10pOiBib29sZWFuIHtcblx0XHRyZXR1cm4gZmlsdGVycy5zb21lKChmaWx0ZXIpOiBib29sZWFuID0+IHtcblx0XHRcdGlmIChmaWx0ZXIuZ2V0UGF0aCgpID09PSBcIiRlZGl0U3RhdGVcIikge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAoZmlsdGVyLmdldEZpbHRlcnMoKSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmhhc0VkaXRTdGF0ZUZpbHRlclJlY3Vyc2l2ZWx5KGZpbHRlci5nZXRGaWx0ZXJzKCkhKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSxcblx0ZXhjaGFuZ2VFZGl0U3RhdGVGaWx0ZXJSZWN1cnNpdmVseTogZnVuY3Rpb24gKGVkaXRTdGF0ZUZpbHRlcjogRmlsdGVyLCBmaWx0ZXJzOiBGaWx0ZXJbXSk6IEZpbHRlcltdIHtcblx0XHRyZXR1cm4gZmlsdGVycy5tYXAoKGZpbHRlcik6IEZpbHRlciA9PiB7XG5cdFx0XHRpZiAoZmlsdGVyLmdldFBhdGgoKSA9PT0gXCIkZWRpdFN0YXRlXCIpIHtcblx0XHRcdFx0cmV0dXJuIGVkaXRTdGF0ZUZpbHRlcjtcblx0XHRcdH0gZWxzZSBpZiAoZmlsdGVyLmdldEZpbHRlcnMoKSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGZpbHRlciA9IG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRcdGZpbHRlcnM6IHRoaXMuZXhjaGFuZ2VFZGl0U3RhdGVGaWx0ZXJSZWN1cnNpdmVseShlZGl0U3RhdGVGaWx0ZXIsIGZpbHRlci5nZXRGaWx0ZXJzKCkhKSxcblx0XHRcdFx0XHRhbmQ6IGZpbHRlci5pc0FuZCgpXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm4gZmlsdGVyO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZpbHRlcjtcblx0XHR9KTtcblx0fSxcblx0c2V0VHlwZUNvbmZpZ1RvUHJvcGVydGllczogZnVuY3Rpb24gKGFQcm9wZXJ0aWVzOiBQcm9wZXJ0eUluZm9bXSB8IG51bGwgfCB1bmRlZmluZWQpOiBQcm9wZXJ0eUluZm9bXSB8IG51bGwgfCB1bmRlZmluZWQge1xuXHRcdGlmIChhUHJvcGVydGllcyAmJiBhUHJvcGVydGllcy5sZW5ndGgpIHtcblx0XHRcdGFQcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24gKG9JRmlsdGVyUHJvcGVydHk6IFByb3BlcnR5SW5mbykge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0b0lGaWx0ZXJQcm9wZXJ0eS50eXBlQ29uZmlnICYmXG5cdFx0XHRcdFx0b0lGaWx0ZXJQcm9wZXJ0eS50eXBlQ29uZmlnLnR5cGVJbnN0YW5jZSAmJlxuXHRcdFx0XHRcdChvSUZpbHRlclByb3BlcnR5LnR5cGVDb25maWcudHlwZUluc3RhbmNlIGFzIHsgZ2V0Q29uc3RyYWludHM/OiBGdW5jdGlvbiB9KS5nZXRDb25zdHJhaW50cyBpbnN0YW5jZW9mIEZ1bmN0aW9uXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob0lGaWx0ZXJQcm9wZXJ0eS5wYXRoID09PSBcIiRlZGl0U3RhdGVcIikge1xuXHRcdFx0XHRcdG9JRmlsdGVyUHJvcGVydHkudHlwZUNvbmZpZyA9IFR5cGVNYXAuZ2V0VHlwZUNvbmZpZyhcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiLCB7fSwge30pO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG9JRmlsdGVyUHJvcGVydHkucGF0aCA9PT0gXCIkc2VhcmNoXCIpIHtcblx0XHRcdFx0XHRvSUZpbHRlclByb3BlcnR5LnR5cGVDb25maWcgPSBUeXBlTWFwLmdldFR5cGVDb25maWcoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIiwge30sIHt9KTtcblx0XHRcdFx0fSBlbHNlIGlmIChvSUZpbHRlclByb3BlcnR5LmRhdGFUeXBlIHx8IChvSUZpbHRlclByb3BlcnR5LnR5cGVDb25maWcgJiYgb0lGaWx0ZXJQcm9wZXJ0eS50eXBlQ29uZmlnLmNsYXNzTmFtZSkpIHtcblx0XHRcdFx0XHRvSUZpbHRlclByb3BlcnR5LnR5cGVDb25maWcgPSBUeXBlTWFwLmdldFR5cGVDb25maWcoXG5cdFx0XHRcdFx0XHRvSUZpbHRlclByb3BlcnR5LmRhdGFUeXBlIHx8IG9JRmlsdGVyUHJvcGVydHkudHlwZUNvbmZpZz8uY2xhc3NOYW1lLFxuXHRcdFx0XHRcdFx0b0lGaWx0ZXJQcm9wZXJ0eS5mb3JtYXRPcHRpb25zLFxuXHRcdFx0XHRcdFx0b0lGaWx0ZXJQcm9wZXJ0eS5jb25zdHJhaW50c1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gYVByb3BlcnRpZXM7XG5cdH0sXG5cdGdldE5vdEFwcGxpY2FibGVGaWx0ZXJzOiBmdW5jdGlvbiAob0ZpbHRlckJhcjogRmlsdGVyQmFyLCBvQ29udHJvbDogQ29udHJvbCk6IHN0cmluZ1tdIHtcblx0XHRjb25zdCBzVGFyZ2V0RW50aXR5VHlwZVBhdGggPSBvQ29udHJvbC5kYXRhKFwiZW50aXR5VHlwZVwiKSxcblx0XHRcdG9GaWx0ZXJCYXJFbnRpdHlQYXRoID0gb0ZpbHRlckJhci5kYXRhKFwiZW50aXR5VHlwZVwiKSxcblx0XHRcdG9NZXRhTW9kZWwgPSBvRmlsdGVyQmFyLmdldE1vZGVsKCkhLmdldE1ldGFNb2RlbCgpISxcblx0XHRcdG9GaWx0ZXJCYXJFbnRpdHlTZXRBbm5vdGF0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KG9GaWx0ZXJCYXJFbnRpdHlQYXRoKSxcblx0XHRcdGFOb3RBcHBsaWNhYmxlID0gW10sXG5cdFx0XHRtQ29uZGl0aW9ucyA9IG9GaWx0ZXJCYXIuZ2V0Q29uZGl0aW9ucygpLFxuXHRcdFx0YklzRmlsdGVyQmFyRW50aXR5VHlwZSA9IHNUYXJnZXRFbnRpdHlUeXBlUGF0aCA9PT0gb0ZpbHRlckJhckVudGl0eVBhdGgsXG5cdFx0XHRiSXNDaGFydCA9IG9Db250cm9sLmlzQTxDaGFydD4oXCJzYXAudWkubWRjLkNoYXJ0XCIpLFxuXHRcdFx0YklzQW5hbHl0aWNhbFRhYmxlID0gIWJJc0NoYXJ0ICYmIChvQ29udHJvbC5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0VGFibGVEZWZpbml0aW9uKCkuZW5hYmxlQW5hbHl0aWNzLFxuXHRcdFx0YklzVHJlZVRhYmxlID0gIWJJc0NoYXJ0ICYmIChvQ29udHJvbC5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbC50eXBlID09PSBcIlRyZWVUYWJsZVwiLFxuXHRcdFx0YkVuYWJsZVNlYXJjaCA9IGJJc0NoYXJ0XG5cdFx0XHRcdD8gKENvbW1vbkhlbHBlci5wYXJzZUN1c3RvbURhdGEoRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGEob0NvbnRyb2wsIFwiYXBwbHlTdXBwb3J0ZWRcIikpIGFzIHsgZW5hYmxlU2VhcmNoPzogYm9vbGVhbiB9KVxuXHRcdFx0XHRcdFx0LmVuYWJsZVNlYXJjaFxuXHRcdFx0XHQ6ICEoYklzQW5hbHl0aWNhbFRhYmxlIHx8IGJJc1RyZWVUYWJsZSkgfHwgKG9Db250cm9sLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRUYWJsZURlZmluaXRpb24oKS5lbmFibGVCYXNpY1NlYXJjaDtcblxuXHRcdGlmIChtQ29uZGl0aW9ucyAmJiAoIWJJc0ZpbHRlckJhckVudGl0eVR5cGUgfHwgYklzQW5hbHl0aWNhbFRhYmxlIHx8IGJJc0NoYXJ0IHx8IGJJc1RyZWVUYWJsZSkpIHtcblx0XHRcdC8vIFdlIGRvbid0IG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBkaWZmZXJlbmNlIG9uIHByb3BlcnR5IExldmVsIGlmIGVudGl0eSBzZXRzIGFyZSBpZGVudGljYWxcblx0XHRcdGNvbnN0IGFUYXJnZXRQcm9wZXJ0aWVzID0gYklzRmlsdGVyQmFyRW50aXR5VHlwZVxuXHRcdFx0XHRcdD8gW11cblx0XHRcdFx0XHQ6IChvRmlsdGVyQmFyXG5cdFx0XHRcdFx0XHRcdC5nZXRDb250cm9sRGVsZWdhdGUoKVxuXHRcdFx0XHRcdFx0XHQuZmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5KHNUYXJnZXRFbnRpdHlUeXBlUGF0aCwgb01ldGFNb2RlbCwgb0ZpbHRlckJhcikgYXMgUHJvcGVydHlJbmZvW10pLFxuXHRcdFx0XHRtVGFyZ2V0UHJvcGVydGllcyA9IGFUYXJnZXRQcm9wZXJ0aWVzLnJlZHVjZShmdW5jdGlvbiAobVByb3A6IHsgW2tleTogc3RyaW5nXTogUHJvcGVydHlJbmZvIH0sIG9Qcm9wOiBQcm9wZXJ0eUluZm8pIHtcblx0XHRcdFx0XHRtUHJvcFtvUHJvcC5uYW1lXSA9IG9Qcm9wO1xuXHRcdFx0XHRcdHJldHVybiBtUHJvcDtcblx0XHRcdFx0fSwge30pLFxuXHRcdFx0XHRtQWdncmVnYXRlZFByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cdFx0XHRjb25zdCBjaGFydEVudGl0eVR5cGVBbm5vdGF0aW9ucyA9IG9Db250cm9sXG5cdFx0XHRcdC5nZXRNb2RlbCgpIVxuXHRcdFx0XHQuZ2V0TWV0YU1vZGVsKCkhXG5cdFx0XHRcdC5nZXRPYmplY3Qob0NvbnRyb2wuZGF0YShcInRhcmdldENvbGxlY3Rpb25QYXRoXCIpICsgXCIvXCIpO1xuXHRcdFx0aWYgKG9Db250cm9sLmlzQShcInNhcC51aS5tZGMuQ2hhcnRcIikpIHtcblx0XHRcdFx0Y29uc3Qgb0VudGl0eVNldEFubm90YXRpb25zID0gb0NvbnRyb2xcblx0XHRcdFx0XHRcdC5nZXRNb2RlbCgpIVxuXHRcdFx0XHRcdFx0LmdldE1ldGFNb2RlbCgpIVxuXHRcdFx0XHRcdFx0LmdldE9iamVjdChgJHtvQ29udHJvbC5kYXRhKFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIil9QGApLFxuXHRcdFx0XHRcdG1DaGFydEN1c3RvbUFnZ3JlZ2F0ZXMgPSBnZXRBbGxDdXN0b21BZ2dyZWdhdGVzKG9FbnRpdHlTZXRBbm5vdGF0aW9ucyk7XG5cdFx0XHRcdE9iamVjdC5rZXlzKG1DaGFydEN1c3RvbUFnZ3JlZ2F0ZXMpLmZvckVhY2goZnVuY3Rpb24gKHNBZ2dyZWdhdGVOYW1lOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRpZiAoIW1BZ2dyZWdhdGVkUHJvcGVydGllc1tzQWdncmVnYXRlTmFtZV0pIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9BZ2dyZWdhdGUgPSBtQ2hhcnRDdXN0b21BZ2dyZWdhdGVzW3NBZ2dyZWdhdGVOYW1lXTtcblx0XHRcdFx0XHRcdG1BZ2dyZWdhdGVkUHJvcGVydGllc1tzQWdncmVnYXRlTmFtZV0gPSBvQWdncmVnYXRlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoY29uc3Qgc1Byb3BlcnR5IGluIG1Db25kaXRpb25zKSB7XG5cdFx0XHRcdC8vIE5lZWQgdG8gY2hlY2sgdGhlIGxlbmd0aCBvZiBtQ29uZGl0aW9uc1tzUHJvcGVydHldIHNpbmNlIHByZXZpb3VzIGZpbHRlcmVkIHByb3BlcnRpZXMgYXJlIGtlcHQgaW50byBtQ29uZGl0aW9ucyB3aXRoIGVtcHR5IGFycmF5IGFzIGRlZmluaXRpb25cblx0XHRcdFx0Y29uc3QgYUNvbmRpdGlvblByb3BlcnR5ID0gbUNvbmRpdGlvbnNbc1Byb3BlcnR5XTtcblx0XHRcdFx0bGV0IHR5cGVDaGVjayA9IHRydWU7XG5cdFx0XHRcdGlmIChjaGFydEVudGl0eVR5cGVBbm5vdGF0aW9uc1tzUHJvcGVydHldICYmIG9GaWx0ZXJCYXJFbnRpdHlTZXRBbm5vdGF0aW9uc1tzUHJvcGVydHldKSB7XG5cdFx0XHRcdFx0dHlwZUNoZWNrID0gY2hhcnRFbnRpdHlUeXBlQW5ub3RhdGlvbnNbc1Byb3BlcnR5XVtcIiRUeXBlXCJdID09PSBvRmlsdGVyQmFyRW50aXR5U2V0QW5ub3RhdGlvbnNbc1Byb3BlcnR5XVtcIiRUeXBlXCJdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRBcnJheS5pc0FycmF5KGFDb25kaXRpb25Qcm9wZXJ0eSkgJiZcblx0XHRcdFx0XHRhQ29uZGl0aW9uUHJvcGVydHkubGVuZ3RoID4gMCAmJiAvL2hhcyBhIGZpbHRlciB2YWx1ZVxuXHRcdFx0XHRcdCgoKCFtVGFyZ2V0UHJvcGVydGllc1tzUHJvcGVydHldIHx8IC8vIG5vIHRhcmdldCBwcm9wZXJ0eSBmb3VuZCBieSBwcm9wZXJ0eSBuYW1lXG5cdFx0XHRcdFx0XHQobVRhcmdldFByb3BlcnRpZXNbc1Byb3BlcnR5XS5pc0N1c3RvbUZpbHRlciAmJiBtVGFyZ2V0UHJvcGVydGllc1tzUHJvcGVydHldLmFubm90YXRpb25QYXRoID09IHVuZGVmaW5lZCkgfHwgLy8gY3VzdG9tIGZpbHRlciB0aGF0IGlzIG5vdCBwYXJ0IG9mIHRoZSBjdXJyZW50IGVudGl0eVNldFxuXHRcdFx0XHRcdFx0KG1UYXJnZXRQcm9wZXJ0aWVzW3NQcm9wZXJ0eV0gJiYgIXR5cGVDaGVjaykpICYmXG5cdFx0XHRcdFx0XHQoIWJJc0ZpbHRlckJhckVudGl0eVR5cGUgfHwgKHNQcm9wZXJ0eSA9PT0gXCIkZWRpdFN0YXRlXCIgJiYgKGJJc0NoYXJ0IHx8IGJJc1RyZWVUYWJsZSB8fCBiSXNBbmFseXRpY2FsVGFibGUpKSkpIHx8IC8vdHlwZSBkb2VzIG5vdCBtYXRjaCBPUiAkZWRpdFN0YXRlIG9uIHNlY29uZGFyeSBlbnRpdHkgc2V0XG5cdFx0XHRcdFx0XHRtQWdncmVnYXRlZFByb3BlcnRpZXNbc1Byb3BlcnR5XSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0YU5vdEFwcGxpY2FibGUucHVzaChzUHJvcGVydHkucmVwbGFjZSgvWyt8Kl0vZywgXCJcIikpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICghYkVuYWJsZVNlYXJjaCAmJiBvRmlsdGVyQmFyLmdldFNlYXJjaCgpKSB7XG5cdFx0XHRhTm90QXBwbGljYWJsZS5wdXNoKFwiJHNlYXJjaFwiKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFOb3RBcHBsaWNhYmxlO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB2YWx1ZSBsaXN0IGluZm9ybWF0aW9uIG9mIGEgcHJvcGVydHkgYXMgZGVmaW5lZCBmb3IgYSBnaXZlbiBmaWx0ZXIgYmFyLlxuXHQgKiBAcGFyYW0gZmlsdGVyQmFyIFRoZSBmaWx0ZXIgYmFyIHRvIGdldCB0aGUgdmFsdWUgbGlzdCBpbmZvcm1hdGlvbiBmb3Jcblx0ICogQHBhcmFtIHByb3BlcnR5TmFtZSBUaGUgcHJvcGVydHkgdG8gZ2V0IHRoZSB2YWx1ZSBsaXN0IGluZm9ybWF0aW9uIGZvclxuXHQgKiBAcmV0dXJucyBUaGUgdmFsdWUgbGlzdCBpbmZvcm1hdGlvblxuXHQgKi9cblx0YXN5bmMgX2dldFZhbHVlTGlzdEluZm8oZmlsdGVyQmFyOiBGaWx0ZXJCYXIsIHByb3BlcnR5TmFtZTogc3RyaW5nKTogUHJvbWlzZTxBbm5vdGF0aW9uVmFsdWVMaXN0VHlwZSB8IHVuZGVmaW5lZD4ge1xuXHRcdGNvbnN0IG1ldGFNb2RlbCA9IGZpbHRlckJhci5nZXRNb2RlbCgpPy5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbDtcblxuXHRcdGlmICghbWV0YU1vZGVsKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdGNvbnN0IGVudGl0eVR5cGUgPSBmaWx0ZXJCYXIuZGF0YShcImVudGl0eVR5cGVcIikgPz8gXCJcIjtcblx0XHRjb25zdCB2YWx1ZUxpc3RJbmZvcyA9IGF3YWl0IG1ldGFNb2RlbC5yZXF1ZXN0VmFsdWVMaXN0SW5mbyhlbnRpdHlUeXBlICsgcHJvcGVydHlOYW1lLCB0cnVlKS5jYXRjaCgoKSA9PiBudWxsKTtcblx0XHRyZXR1cm4gdmFsdWVMaXN0SW5mb3M/LltcIlwiXTtcblx0fSxcblxuXHQvKipcblx0ICogR2V0cyB0aGUgdmFsdWUgbGlzdCBvZiBhbGwgdGhlIGZpbHRlciBwcm9wZXJ0aWVzLlxuXHQgKiBAcGFyYW0gZmlsdGVyQmFyIEluc3RhbmNlIG9mIEZpbHRlckJhclxuXHQgKiBAcmV0dXJucyBBcnJheSBvZiBmaWx0ZXIgcHJvcGVydGllcyBmb3IgRmlsdGVyQmFyXG5cdCAqL1xuXHRnZXRGaWx0ZXJQcm9wZXJ0eUluZm8oZmlsdGVyQmFyOiBJRmlsdGVyQ29udHJvbCk6IFByb3BlcnR5SW5mb1tdIHtcblx0XHRsZXQgX3Byb3BlcnR5SW5mbyA9IGZpbHRlckJhci5kYXRhKFwiZmVGaWx0ZXJJbmZvXCIpO1xuXHRcdGlmICh0eXBlb2YgX3Byb3BlcnR5SW5mbyA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0X3Byb3BlcnR5SW5mbyA9IEpTT04ucGFyc2UoX3Byb3BlcnR5SW5mbyk7XG5cdFx0fVxuXHRcdHJldHVybiBfcHJvcGVydHlJbmZvIHx8IFtdO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB7QGxpbmsgQ29uZGl0aW9uVmFsaWRhdGVkfSBzdGF0ZSBmb3IgYSBzaW5nbGUgdmFsdWUuIFRoaXMgZGVjaWRlcyB3aGV0aGVyIHRoZSB2YWx1ZSBpcyB0cmVhdGVkIGFzIGEgc2VsZWN0ZWQgdmFsdWVcblx0ICogaW4gYSB2YWx1ZSBoZWxwLCBtZWFuaW5nIHRoYXQgaXRzIGRlc2NyaXB0aW9uIGlzIGxvYWRlZCBhbmQgZGlzcGxheWVkIGlmIGV4aXN0aW5nLCBvciB3aGV0aGVyIGl0IGlzIGRpc3BsYXllZCBhcyBhXG5cdCAqIGNvbmRpdGlvbiAoZS5nLiBcIj0xXCIpLlxuXHQgKlxuXHQgKiBWYWx1ZXMgZm9yIHByb3BlcnRpZXMgd2l0aG91dCB2YWx1ZSBsaXN0IGluZm8gYXJlIGFsd2F5cyB0cmVhdGVkIGFzIHtAbGluayBDb25kaXRpb25WYWxpZGF0ZWQuTm90VmFsaWRhdGVkfS5cblx0ICogQHBhcmFtIHZhbHVlTGlzdEluZm8gVGhlIHZhbHVlIGxpc3QgaW5mbyBmcm9tIHRoZSB7QGxpbmsgTWV0YU1vZGVsfVxuXHQgKiBAcGFyYW0gcHJvcGVydHlOYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eVxuXHQgKiBAcGFyYW0gdmFsdWUgVGhlIHNpbmdsZSB2YWx1ZSB0byBnZXQgdGhlIHN0YXRlIGZvclxuXHQgKiBAcmV0dXJucyBUaGUge0BsaW5rIENvbmRpdGlvblZhbGlkYXRlZH0gc3RhdGUgZm9yIHRoZSB2YWx1ZVxuXHQgKi9cblx0X2dldENvbmRpdGlvblZhbGlkYXRlZDogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdHZhbHVlTGlzdEluZm86IEFubm90YXRpb25WYWx1ZUxpc3RUeXBlIHwgdW5kZWZpbmVkLFxuXHRcdHByb3BlcnR5TmFtZTogc3RyaW5nLFxuXHRcdHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZFxuXHQpOiBQcm9taXNlPENvbmRpdGlvblZhbGlkYXRlZD4ge1xuXHRcdGlmICghdmFsdWVMaXN0SW5mbykge1xuXHRcdFx0cmV0dXJuIENvbmRpdGlvblZhbGlkYXRlZC5Ob3RWYWxpZGF0ZWQ7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHZhbHVlTGlzdFByb3BlcnRpZXMgPSB2YWx1ZUxpc3RJbmZvLlBhcmFtZXRlcnMuZmlsdGVyKChwYXJhbWV0ZXIpID0+XG5cdFx0XHRcdFtDb21tb25Bbm5vdGF0aW9uVHlwZXMuVmFsdWVMaXN0UGFyYW1ldGVySW5PdXQudmFsdWVPZigpLCBDb21tb25Bbm5vdGF0aW9uVHlwZXMuVmFsdWVMaXN0UGFyYW1ldGVyT3V0LnZhbHVlT2YoKV0uaW5jbHVkZXMoXG5cdFx0XHRcdFx0cGFyYW1ldGVyLiRUeXBlXG5cdFx0XHRcdClcblx0XHRcdClcblx0XHRcdFx0LmZpbHRlcigocGFyYW1ldGVyKSA9PiBwYXJhbWV0ZXIuTG9jYWxEYXRhUHJvcGVydHk/LiRQcm9wZXJ0eVBhdGggPT09IHByb3BlcnR5TmFtZSlcblx0XHRcdFx0Lm1hcCgocGFyYW1ldGVyKSA9PiBwYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHkpO1xuXG5cdFx0XHRjb25zdCB2YWx1ZUxpc3RQcm9wZXJ0eVBhdGggPSB2YWx1ZUxpc3RQcm9wZXJ0aWVzWzBdID8/IHByb3BlcnR5TmFtZTtcblxuXHRcdFx0Y29uc3QgZmlsdGVyID0gbmV3IEZpbHRlcih7XG5cdFx0XHRcdHBhdGg6IHZhbHVlTGlzdFByb3BlcnR5UGF0aCxcblx0XHRcdFx0b3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLkVRLFxuXHRcdFx0XHR2YWx1ZTE6IHZhbHVlXG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGxpc3RCaW5kaW5nID0gdmFsdWVMaXN0SW5mby4kbW9kZWwuYmluZExpc3QoYC8ke3ZhbHVlTGlzdEluZm8uQ29sbGVjdGlvblBhdGh9YCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGZpbHRlciwge1xuXHRcdFx0XHQkc2VsZWN0OiB2YWx1ZUxpc3RQcm9wZXJ0eVBhdGhcblx0XHRcdH0pO1xuXG5cdFx0XHRjb25zdCB2YWx1ZUV4aXN0cyA9IChhd2FpdCBsaXN0QmluZGluZy5yZXF1ZXN0Q29udGV4dHMoKSkubGVuZ3RoID4gMDtcblx0XHRcdGlmICh2YWx1ZUV4aXN0cykge1xuXHRcdFx0XHRyZXR1cm4gQ29uZGl0aW9uVmFsaWRhdGVkLlZhbGlkYXRlZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBDb25kaXRpb25WYWxpZGF0ZWQuTm90VmFsaWRhdGVkO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJGaWx0ZXJVdGlsczogRXJyb3Igd2hpbGUgcmV0cmlldmluZyBDb25kaXRpb25WYWxpZGF0ZWRcIiwgZXJyb3IgYXMgRXJyb3IgfCBzdHJpbmcpO1xuXHRcdFx0cmV0dXJuIENvbmRpdGlvblZhbGlkYXRlZC5Ob3RWYWxpZGF0ZWQ7XG5cdFx0fVxuXHR9LFxuXHQvKipcblx0ICogQ2xlYXIgdGhlIGZpbHRlciB2YWx1ZSBmb3IgYSBzcGVjaWZpYyBwcm9wZXJ0eSBpbiB0aGUgZmlsdGVyIGJhci5cblx0ICogVGhpcyBpcyBhIHByZXJlcXVpc2l0ZSBiZWZvcmUgbmV3IHZhbHVlcyBjYW4gYmUgc2V0IGNsZWFubHkuXG5cdCAqIEBwYXJhbSBmaWx0ZXJCYXIgVGhlIGZpbHRlciBiYXIgdGhhdCBjb250YWlucyB0aGUgZmlsdGVyIGZpZWxkXG5cdCAqIEBwYXJhbSBjb25kaXRpb25QYXRoIFRoZSBwYXRoIHRvIHRoZSBwcm9wZXJ0eSBhcyBhIGNvbmRpdGlvbiBwYXRoXG5cdCAqL1xuXHRhc3luYyBfY2xlYXJGaWx0ZXJWYWx1ZShmaWx0ZXJCYXI6IEZpbHRlckJhciwgY29uZGl0aW9uUGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qgb1N0YXRlID0gYXdhaXQgU3RhdGVVdGlsLnJldHJpZXZlRXh0ZXJuYWxTdGF0ZShmaWx0ZXJCYXIpO1xuXHRcdGlmIChvU3RhdGUuZmlsdGVyW2NvbmRpdGlvblBhdGhdKSB7XG5cdFx0XHRvU3RhdGUuZmlsdGVyW2NvbmRpdGlvblBhdGhdLmZvckVhY2goKG9Db25kaXRpb246IENvbmRpdGlvbk9iamVjdCkgPT4ge1xuXHRcdFx0XHRvQ29uZGl0aW9uLmZpbHRlcmVkID0gZmFsc2U7XG5cdFx0XHR9KTtcblx0XHRcdGF3YWl0IFN0YXRlVXRpbC5hcHBseUV4dGVybmFsU3RhdGUoZmlsdGVyQmFyLCB7IGZpbHRlcjogeyBbY29uZGl0aW9uUGF0aF06IG9TdGF0ZS5maWx0ZXJbY29uZGl0aW9uUGF0aF0gfSB9KTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFNldCB0aGUgZmlsdGVyIHZhbHVlcyBmb3IgdGhlIGdpdmVuIHByb3BlcnR5IGluIHRoZSBmaWx0ZXIgYmFyLlxuXHQgKiBUaGUgZmlsdGVyIHZhbHVlcyBjYW4gYmUgZWl0aGVyIGEgc2luZ2xlIHZhbHVlIG9yIGFuIGFycmF5IG9mIHZhbHVlcy5cblx0ICogRWFjaCBmaWx0ZXIgdmFsdWUgbXVzdCBiZSByZXByZXNlbnRlZCBhcyBhIHByaW1pdGl2ZSB2YWx1ZS5cblx0ICogQHBhcmFtIG9GaWx0ZXJCYXIgVGhlIGZpbHRlciBiYXIgdGhhdCBjb250YWlucyB0aGUgZmlsdGVyIGZpZWxkXG5cdCAqIEBwYXJhbSBzQ29uZGl0aW9uUGF0aCBUaGUgcGF0aCB0byB0aGUgcHJvcGVydHkgYXMgYSBjb25kaXRpb24gcGF0aFxuXHQgKiBAcGFyYW0gYXJncyBMaXN0IG9mIG9wdGlvbmFsIHBhcmFtZXRlcnNcblx0ICogIFtzT3BlcmF0b3JdIFRoZSBvcGVyYXRvciB0byBiZSB1c2VkIC0gaWYgbm90IHNldCwgdGhlIGRlZmF1bHQgb3BlcmF0b3IgKEVRKSB3aWxsIGJlIHVzZWRcblx0ICogIFt2VmFsdWVzXSBUaGUgdmFsdWVzIHRvIGJlIGFwcGxpZWQgLSBpZiBzT3BlcmF0b3IgaXMgbWlzc2luZywgdlZhbHVlcyBpcyB1c2VkIGFzIDNyZCBwYXJhbWV0ZXJcblx0ICovXG5cdHNldEZpbHRlclZhbHVlczogYXN5bmMgZnVuY3Rpb24gKG9GaWx0ZXJCYXI6IEZpbHRlckJhciB8IHVuZGVmaW5lZCwgc0NvbmRpdGlvblBhdGg6IHN0cmluZywgLi4uYXJnczogdW5rbm93bltdKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0YXdhaXQgdGhpcy5fc2V0RmlsdGVyVmFsdWVzKG9GaWx0ZXJCYXIsIGZhbHNlLCBzQ29uZGl0aW9uUGF0aCwgLi4uYXJncyk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEFkZCB0aGUgZmlsdGVyIHZhbHVlcyBmb3IgdGhlIGdpdmVuIHByb3BlcnR5IGluIHRoZSBmaWx0ZXIgYmFyLlxuXHQgKlxuXHQgKiBUaGUgZmlsdGVyIHZhbHVlcyBjYW4gYmUgZWl0aGVyIGEgc2luZ2xlIHZhbHVlIG9yIGFuIGFycmF5IG9mIHZhbHVlcy5cblx0ICogRWFjaCBmaWx0ZXIgdmFsdWUgbXVzdCBiZSByZXByZXNlbnRlZCBhcyBhIHByaW1pdGl2ZSB2YWx1ZS5cblx0ICogQHBhcmFtIGZpbHRlckJhciBUaGUgZmlsdGVyIGJhciB0aGF0IGNvbnRhaW5zIHRoZSBmaWx0ZXIgZmllbGRcblx0ICogQHBhcmFtIGNvbmRpdGlvblBhdGggVGhlIHBhdGggdG8gdGhlIHByb3BlcnR5IGFzIGEgY29uZGl0aW9uIHBhdGhcblx0ICogQHBhcmFtIGFyZ3MgTGlzdCBvZiBvcHRpb25hbCBwYXJhbWV0ZXJzXG5cdCAqL1xuXHRhZGRGaWx0ZXJWYWx1ZXM6IGFzeW5jIGZ1bmN0aW9uIChmaWx0ZXJCYXI6IEZpbHRlckJhciB8IHVuZGVmaW5lZCwgY29uZGl0aW9uUGF0aDogc3RyaW5nLCAuLi5hcmdzOiB1bmtub3duW10pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRhd2FpdCB0aGlzLl9zZXRGaWx0ZXJWYWx1ZXMoZmlsdGVyQmFyLCB0cnVlLCBjb25kaXRpb25QYXRoLCAuLi5hcmdzKTtcblx0fSxcblxuXHQvKipcblx0ICogR2V0IHByb3BlcnR5IHBhdGggZnJvbSBjb25kaXRpb24gcGF0aC5cblx0ICpcblx0ICogSXQgcmVtb3ZlcyB0aGUgY29uZGl0aW9uIHBhdGggc3BlY2lmaWMgY2hhcmFjdGVycyBsaWtlIFwiK1wiIGFuZCBcIipcIi5cblx0ICogQHBhcmFtIGNvbmRpdGlvblBhdGggVGhlIHBhdGggdG8gdGhlIHByb3BlcnR5IGFzIGEgY29uZGl0aW9uIHBhdGhcblx0ICogQHJldHVybnMgVGhlIHByb3BlcnR5IHBhdGggZGVyaXZlZCBmcm9tIHRoZSBjb25kaXRpb24gcGF0aFxuXHQgKi9cblx0Z2V0UHJvcGVydHlQYXRoRnJvbUNvbmRpdGlvblBhdGgoY29uZGl0aW9uUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gY29uZGl0aW9uUGF0aC5yZXBsYWNlKENPTkRJVElPTl9QQVRIX1RPX1BST1BFUlRZX1BBVEhfUkVHRVgsIFwiXCIpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXQgbWFpbiBmaWx0ZXIgYmFyIGZvciB0aGUgZ2l2ZW4gcDEzbiBhZGFwdGF0aW9uIGZpbHRlciBjb250cm9sLlxuXHQgKiBAcGFyYW0gcG90ZW50aWFsRmlsdGVyQmFyIEV4cGVjdGVkIGluc3RhbmNlIG9mIEZpbHRlckJhciBvciBBZGFwdGF0aW9uRmlsdGVyQmFyLlxuXHQgKiBAcmV0dXJucyBUaGUgbWFpbiBmaWx0ZXIgYmFyIGluc3RhbmNlIGlmIGZvdW5kLCBvdGhlcndpc2UgdW5kZWZpbmVkLlxuXHQgKi9cblx0Z2V0RmlsdGVyQmFyRm9yQWRhcHRhdGlvbkNvbnRyb2wocG90ZW50aWFsRmlsdGVyQmFyOiBNYW5hZ2VkT2JqZWN0IHwgbnVsbCk6IEZpbHRlckJhciB8IG51bGwge1xuXHRcdHdoaWxlIChwb3RlbnRpYWxGaWx0ZXJCYXIgJiYgIXBvdGVudGlhbEZpbHRlckJhci5pc0E8RmlsdGVyQmFyPihcInNhcC51aS5tZGMuRmlsdGVyQmFyXCIpKSB7XG5cdFx0XHRwb3RlbnRpYWxGaWx0ZXJCYXIgPSBwb3RlbnRpYWxGaWx0ZXJCYXIuZ2V0UGFyZW50KCk7XG5cdFx0fVxuXHRcdHJldHVybiBwb3RlbnRpYWxGaWx0ZXJCYXI7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldCB0aGUgZGF0YSBtb2RlbCBvYmplY3QgcGF0aCBmb3IgYSBwcm9wZXJ0eSBpbiB0aGUgZmlsdGVyIGJhci5cblx0ICpcblx0ICogVGhpcyBpcyB1c2VkIHRvIHJldHJpZXZlIHRoZSBkYXRhIG1vZGVsIG9iamVjdCBwYXRoIGZvciBhIHNwZWNpZmljIHByb3BlcnR5IGluIHRoZSBmaWx0ZXIgYmFyLlxuXHQgKiBAcGFyYW0gZmlsdGVyQmFyIFRoZSBmaWx0ZXIgYmFyIHRoYXQgY29udGFpbnMgdGhlIHByb3BlcnR5XG5cdCAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggVGhlIHBhdGggdG8gdGhlIHByb3BlcnR5XG5cdCAqIEByZXR1cm5zIFRoZSBkYXRhIG1vZGVsIG9iamVjdCBwYXRoIGZvciB0aGUgcHJvcGVydHlcblx0ICovXG5cdGdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JQcm9wZXJ0eShmaWx0ZXJCYXI6IEZpbHRlckJhciwgcHJvcGVydHlQYXRoOiBzdHJpbmcpOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5PiB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgZW50aXR5VHlwZVBhdGggPSBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YTxzdHJpbmc+KGZpbHRlckJhciwgXCJlbnRpdHlUeXBlXCIpO1xuXHRcdGNvbnN0IG1ldGFNb2RlbCA9IGZpbHRlckJhci5nZXRNb2RlbCgpPy5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbDtcblx0XHRyZXR1cm4gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxQcm9wZXJ0eT4oXG5cdFx0XHRtZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYCR7ZW50aXR5VHlwZVBhdGh9JHtwcm9wZXJ0eVBhdGh9YCkhLFxuXHRcdFx0bWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAke2VudGl0eVR5cGVQYXRofWApIVxuXHRcdCk7XG5cdH0sXG5cblx0X3NldEZpbHRlclZhbHVlczogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdG9GaWx0ZXJCYXI6IEZpbHRlckJhciB8IHVuZGVmaW5lZCxcblx0XHRhcHBlbmQ6IGJvb2xlYW4sXG5cdFx0c0NvbmRpdGlvblBhdGg6IHN0cmluZyxcblx0XHQuLi5hcmdzOiB1bmtub3duW11cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0bGV0IHNPcGVyYXRvciA9IGFyZ3M/LlswXSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0bGV0IHZWYWx1ZXMgPSBhcmdzPy5bMV0gYXMgdW5kZWZpbmVkIHwgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IHN0cmluZ1tdIHwgbnVtYmVyW10gfCBib29sZWFuW107XG5cblx0XHQvLyBEbyBub3RoaW5nIHdoZW4gdGhlIGZpbHRlciBiYXIgaXMgaGlkZGVuXG5cdFx0aWYgKCFvRmlsdGVyQmFyKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gV2Ugd2FpdCBmb3IgZmlsdGVyIGJhciB0byBiZSByZWFkeS5cblx0XHRpZiAob0ZpbHRlckJhci5pc0E8RkVGaWx0ZXJCYXI+KFwic2FwLmZlLm1hY3Jvcy5jb250cm9scy5GaWx0ZXJCYXJcIikpIHtcblx0XHRcdC8vIF9zZXRGaWx0ZXJWYWx1ZXMgY291bGQgYmUgY2FsbGVkIGluIGNhc2Ugb2YgYWRhcHRhdGlvbiBmaWx0ZXIgYmFyLCBzbyB3ZSBleHBsaWNpdGx5IGNoZWNrIGZvciBGRSBmaWx0ZXIgYmFyIGNvbnRyb2wuXG5cdFx0XHRhd2FpdCBvRmlsdGVyQmFyLndoZW5Jbml0aWFsaXplZCgpO1xuXHRcdH1cblxuXHRcdC8vIGNvbW1vbiBmaWx0ZXIgT3BlcmF0b3JzIG5lZWQgYSB2YWx1ZS4gRG8gbm90aGluZyBpZiB0aGlzIHZhbHVlIGlzIHVuZGVmaW5lZFxuXHRcdC8vIEJDUDogMjI3MDEzNTI3NFxuXHRcdGlmIChcblx0XHRcdGFyZ3MubGVuZ3RoID09PSAyICYmXG5cdFx0XHQodlZhbHVlcyA9PT0gdW5kZWZpbmVkIHx8IHZWYWx1ZXMgPT09IG51bGwgfHwgdlZhbHVlcyA9PT0gXCJcIikgJiZcblx0XHRcdHNPcGVyYXRvciAmJlxuXHRcdFx0T2JqZWN0LmtleXMoRmlsdGVyT3BlcmF0b3IpLmluY2x1ZGVzKHNPcGVyYXRvcilcblx0XHQpIHtcblx0XHRcdExvZy53YXJuaW5nKGBBbiBlbXB0eSBmaWx0ZXIgdmFsdWUgY2Fubm90IGJlIGFwcGxpZWQgd2l0aCB0aGUgJHtzT3BlcmF0b3J9IG9wZXJhdG9yYCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gVGhlIDR0aCBwYXJhbWV0ZXIgaXMgb3B0aW9uYWw7IGlmIHNPcGVyYXRvciBpcyBtaXNzaW5nLCB2VmFsdWVzIGlzIHVzZWQgYXMgM3JkIHBhcmFtZXRlclxuXHRcdC8vIFRoaXMgZG9lcyBub3QgYXBwbHkgZm9yIHNlbWFudGljIGRhdGVzLCBhcyB0aGVzZSBkbyBub3QgcmVxdWlyZSB2VmFsdWVzIChleGNlcHRpb246IFwiTEFTVERBWVNcIiwgMylcblx0XHRpZiAodlZhbHVlcyA9PT0gdW5kZWZpbmVkICYmICFTZW1hbnRpY0RhdGVPcGVyYXRvcnMuZ2V0U2VtYW50aWNEYXRlT3BlcmF0aW9ucygpLmluY2x1ZGVzKHNPcGVyYXRvciB8fCBcIlwiKSkge1xuXHRcdFx0dlZhbHVlcyA9IHNPcGVyYXRvciA/PyBbXTtcblx0XHRcdHNPcGVyYXRvciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBJZiBzT3BlcmF0b3IgaXMgbm90IHNldCwgdXNlIEVRIGFzIGRlZmF1bHRcblx0XHRpZiAoIXNPcGVyYXRvcikge1xuXHRcdFx0c09wZXJhdG9yID0gRmlsdGVyT3BlcmF0b3IuRVE7XG5cdFx0fVxuXG5cdFx0Ly8gU3VwcG9ydGVkIGFycmF5IHR5cGVzOlxuXHRcdC8vICAtIFNpbmdsZSBWYWx1ZXM6XHRcIjJcIiB8IFtcIjJcIl1cblx0XHQvLyAgLSBNdWx0aXBsZSBWYWx1ZXM6XHRbXCIyXCIsIFwiM1wiXVxuXHRcdC8vICAtIFJhbmdlczpcdFx0XHRbXCIyXCIsXCIzXCJdXG5cdFx0Ly8gVW5zdXBwb3J0ZWQgYXJyYXkgdHlwZXM6XG5cdFx0Ly8gIC0gTXVsdGlwbGUgUmFuZ2VzOlx0W1tcIjJcIixcIjNcIl1dIHwgW1tcIjJcIixcIjNcIl0sW1wiNFwiLFwiNVwiXV1cblx0XHRjb25zdCBzdXBwb3J0ZWRWYWx1ZVR5cGVzID0gW1wic3RyaW5nXCIsIFwibnVtYmVyXCIsIFwiYm9vbGVhblwiXTtcblx0XHRpZiAoXG5cdFx0XHR2VmFsdWVzICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdCgoIUFycmF5LmlzQXJyYXkodlZhbHVlcykgJiYgIXN1cHBvcnRlZFZhbHVlVHlwZXMuaW5jbHVkZXModHlwZW9mIHZWYWx1ZXMpKSB8fFxuXHRcdFx0XHQoQXJyYXkuaXNBcnJheSh2VmFsdWVzKSAmJiB2VmFsdWVzLmxlbmd0aCA+IDAgJiYgIXN1cHBvcnRlZFZhbHVlVHlwZXMuaW5jbHVkZXModHlwZW9mIHZWYWx1ZXNbMF0pKSlcblx0XHQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0XCJGaWx0ZXJVdGlscy5qcyNfc2V0RmlsdGVyVmFsdWVzOiBGaWx0ZXIgdmFsdWUgbm90IHN1cHBvcnRlZDsgb25seSBwcmltaXRpdmUgdmFsdWVzIG9yIGFuIGFycmF5IHRoZXJlb2YgY2FuIGJlIHVzZWQuXCJcblx0XHRcdCk7XG5cdFx0fVxuXHRcdGxldCB2YWx1ZXM6IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbClbXSB8IHVuZGVmaW5lZDtcblx0XHRpZiAodlZhbHVlcyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YWx1ZXMgPSBBcnJheS5pc0FycmF5KHZWYWx1ZXMpID8gdlZhbHVlcyA6IFt2VmFsdWVzXTtcblx0XHR9XG5cblx0XHRjb25zdCBmaWx0ZXI6IHsgW2tleTogc3RyaW5nXTogQ29uZGl0aW9uT2JqZWN0W10gfSA9IHt9O1xuXHRcdGlmIChzQ29uZGl0aW9uUGF0aCkge1xuXHRcdFx0Ly8gV2UgcmVjcmVhdGUgY29uZGl0aW9uUGF0aCB0byBlbnN1cmUgaXQgaXMgaW4gcmlnaHQgZm9ybWF0XG5cdFx0XHQvLyBlLmcuIElmIFwiX0l0ZW0vTWF0ZXJpYWxcIiBpcyBzZW50IGFzIGNvbmRpdGlvbiBwYXRoIHdoZXJlIF9JdGVtIGlzIDE6biBtdWx0aXBsaWNpdHkgLT4gXCJfSXRlbSovTWF0ZXJpYWxcIlxuXHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoID0gb0ZpbHRlclV0aWxzLmdldFByb3BlcnR5UGF0aEZyb21Db25kaXRpb25QYXRoKHNDb25kaXRpb25QYXRoKTtcblx0XHRcdGNvbnN0IG1haW5GaWx0ZXJCYXJDb250cm9sID0gb0ZpbHRlclV0aWxzLmdldEZpbHRlckJhckZvckFkYXB0YXRpb25Db250cm9sKG9GaWx0ZXJCYXIpID8/IG9GaWx0ZXJCYXI7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVRhcmdldE9iamVjdFBhdGggPSBvRmlsdGVyVXRpbHMuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclByb3BlcnR5KG1haW5GaWx0ZXJCYXJDb250cm9sLCBwcm9wZXJ0eVBhdGgpO1xuXHRcdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gcHJvcGVydHlUYXJnZXRPYmplY3RQYXRoPy50YXJnZXRPYmplY3Q/Lm5hbWUgPz8gcHJvcGVydHlQYXRoO1xuXHRcdFx0c0NvbmRpdGlvblBhdGggPVxuXHRcdFx0XHQocHJvcGVydHlUYXJnZXRPYmplY3RQYXRoID8gZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aChwcm9wZXJ0eVRhcmdldE9iamVjdFBhdGgsIGZhbHNlLCB0cnVlKSA6IHVuZGVmaW5lZCkgPz9cblx0XHRcdFx0c0NvbmRpdGlvblBhdGg7XG5cdFx0XHQvLyBHZXQgdGhlIHZhbHVlIGxpc3QgaW5mbyBvZiB0aGUgcHJvcGVydHkgdG8gbGF0ZXIgY2hlY2sgd2hldGhlciB0aGUgdmFsdWVzIGV4aXN0XG5cdFx0XHRjb25zdCB2YWx1ZUxpc3RJbmZvID0gYXdhaXQgdGhpcy5fZ2V0VmFsdWVMaXN0SW5mbyhtYWluRmlsdGVyQmFyQ29udHJvbCwgcHJvcGVydHlQYXRoKTtcblx0XHRcdGlmICh2YWx1ZXMgJiYgdmFsdWVzLmxlbmd0aCkge1xuXHRcdFx0XHRpZiAoc09wZXJhdG9yID09PSBGaWx0ZXJPcGVyYXRvci5CVCkge1xuXHRcdFx0XHRcdC8vIFRoZSBvcGVyYXRvciBCVCByZXF1aXJlcyBvbmUgY29uZGl0aW9uIHdpdGggYm90aCB0aHJlc2hvbGRzXG5cdFx0XHRcdFx0ZmlsdGVyW3NDb25kaXRpb25QYXRoXSA9IFtDb25kaXRpb24uY3JlYXRlQ29uZGl0aW9uKHNPcGVyYXRvciwgdmFsdWVzLCBudWxsLCBudWxsLCBDb25kaXRpb25WYWxpZGF0ZWQuTm90VmFsaWRhdGVkKV07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gUmVndWxhciBzaW5nbGUgYW5kIG11bHRpIHZhbHVlIGNvbmRpdGlvbnMsIGlmIHRoZXJlIGFyZSBubyB2YWx1ZXMsIHdlIGRvIG5vdCB3YW50IGFueSBjb25kaXRpb25zXG5cdFx0XHRcdFx0ZmlsdGVyW3NDb25kaXRpb25QYXRoXSA9IGF3YWl0IFByb21pc2UuYWxsKFxuXHRcdFx0XHRcdFx0dmFsdWVzLm1hcChhc3luYyAodmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdFx0Ly8gRm9yIHRoZSBFUSBjYXNlLCB0ZWxsIE1EQyB0byB2YWxpZGF0ZSB0aGUgdmFsdWUgKGUuZy4gZGlzcGxheSB0aGUgZGVzY3JpcHRpb24pLCBpZiBpdCBleGlzdHMgaW4gdGhlIGFzc29jaWF0ZWQgZW50aXR5LCBvdGhlcndpc2UgbmV2ZXIgdmFsaWRhdGVcblx0XHRcdFx0XHRcdFx0Y29uc3QgY29uZGl0aW9uVmFsaWRhdGVkU3RhdHVzID1cblx0XHRcdFx0XHRcdFx0XHRzT3BlcmF0b3IgPT09IEZpbHRlck9wZXJhdG9yLkVRXG5cdFx0XHRcdFx0XHRcdFx0XHQ/IGF3YWl0IHRoaXMuX2dldENvbmRpdGlvblZhbGlkYXRlZCh2YWx1ZUxpc3RJbmZvLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKVxuXHRcdFx0XHRcdFx0XHRcdFx0OiBDb25kaXRpb25WYWxpZGF0ZWQuTm90VmFsaWRhdGVkO1xuXG5cdFx0XHRcdFx0XHRcdHJldHVybiBDb25kaXRpb24uY3JlYXRlQ29uZGl0aW9uKHNPcGVyYXRvciEsIFt2YWx1ZV0sIG51bGwsIG51bGwsIGNvbmRpdGlvblZhbGlkYXRlZFN0YXR1cyk7XG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoU2VtYW50aWNEYXRlT3BlcmF0b3JzLmdldFNlbWFudGljRGF0ZU9wZXJhdGlvbnMoKS5pbmNsdWRlcyhzT3BlcmF0b3IgfHwgXCJcIikpIHtcblx0XHRcdFx0Ly8gdlZhbHVlcyBpcyB1bmRlZmluZWQsIHNvIHRoZSBvcGVyYXRvciBpcyBhIHNlbWFudGljIGRhdGUgdGhhdCBkb2VzIG5vdCBuZWVkIHZhbHVlcyAoc2VlIGFib3ZlKVxuXHRcdFx0XHRmaWx0ZXJbc0NvbmRpdGlvblBhdGhdID0gW0NvbmRpdGlvbi5jcmVhdGVDb25kaXRpb24oc09wZXJhdG9yLCBbXSwgbnVsbCwgbnVsbCwgQ29uZGl0aW9uVmFsaWRhdGVkLk5vdFZhbGlkYXRlZCldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICghYXBwZW5kKSB7XG5cdFx0XHQvLyBDbGVhciB0aGUgY3VycmVudCB2YWx1ZSBhcyB3ZSBkbyBub3Qgd2FudCB0byBhZGQgZmlsdGVyIHZhbHVlcyBidXQgcmVwbGFjZSB0aGVtXG5cdFx0XHRhd2FpdCB0aGlzLl9jbGVhckZpbHRlclZhbHVlKG9GaWx0ZXJCYXIsIHNDb25kaXRpb25QYXRoKTtcblx0XHR9XG5cblx0XHRpZiAoZmlsdGVyW3NDb25kaXRpb25QYXRoXSkge1xuXHRcdFx0Ly8gVGhpcyBpcyBub3QgY2FsbGVkIGluIHRoZSByZXNldCBjYXNlLCBpLmUuIHNldEZpbHRlclZhbHVlKFwiUHJvcGVydHlcIilcblx0XHRcdGF3YWl0IFN0YXRlVXRpbC5hcHBseUV4dGVybmFsU3RhdGUob0ZpbHRlckJhciwgeyBmaWx0ZXIgfSk7XG5cdFx0fVxuXHR9LFxuXHRjb25kaXRpb25Ub01vZGVsUGF0aDogZnVuY3Rpb24gKHNDb25kaXRpb25QYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdC8vIG1ha2UgdGhlIHBhdGggdXNhYmxlIGFzIG1vZGVsIHByb3BlcnR5LCB0aGVyZWZvcmUgc2xhc2hlcyBiZWNvbWUgYmFja3NsYXNoZXNcblx0XHRyZXR1cm4gc0NvbmRpdGlvblBhdGgucmVwbGFjZSgvXFwvL2csIFwiXFxcXFwiKTtcblx0fSxcblx0X2dldEZpbHRlck1ldGFNb2RlbDogZnVuY3Rpb24gKG9GaWx0ZXJDb250cm9sOiBJRmlsdGVyQ29udHJvbCwgbWV0YU1vZGVsPzogT0RhdGFNZXRhTW9kZWwpOiBPRGF0YU1ldGFNb2RlbCB7XG5cdFx0cmV0dXJuIG1ldGFNb2RlbCB8fCAob0ZpbHRlckNvbnRyb2wuZ2V0TW9kZWwoKSEuZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwpO1xuXHR9LFxuXHRfZ2V0RW50aXR5U2V0UGF0aDogZnVuY3Rpb24gKHNFbnRpdHlUeXBlUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gc0VudGl0eVR5cGVQYXRoICYmIE1vZGVsSGVscGVyLmdldEVudGl0eVNldFBhdGgoc0VudGl0eVR5cGVQYXRoKTtcblx0fSxcblxuXHRfZ2V0RmllbGRzRm9yVGFibGU6IGZ1bmN0aW9uIChvRmlsdGVyQ29udHJvbDogSUZpbHRlckNvbnRyb2wsIHNFbnRpdHlUeXBlUGF0aD86IHN0cmluZyk6IFRhYmxlVmlzdWFsaXphdGlvbltdIHtcblx0XHRjb25zdCBsclRhYmxlczogVGFibGVWaXN1YWxpemF0aW9uW10gPSBbXTtcblx0XHQvKipcblx0XHQgKiBHZXRzIGZpZWxkcyBmcm9tXG5cdFx0ICogXHQtIGRpcmVjdCBlbnRpdHkgcHJvcGVydGllcyxcblx0XHQgKiBcdC0gbmF2aWdhdGVQcm9wZXJ0aWVzIGtleSBpbiB0aGUgbWFuaWZlc3QgaWYgdGhlc2UgcHJvcGVydGllcyBhcmUga25vd24gYnkgdGhlIGVudGl0eVxuXHRcdCAqICAtIGFubm90YXRpb24gXCJTZWxlY3Rpb25GaWVsZHNcIlxuXHRcdCAqL1xuXHRcdGlmIChzRW50aXR5VHlwZVBhdGgpIHtcblx0XHRcdGNvbnN0IG9WaWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0VmlldyhvRmlsdGVyQ29udHJvbCk7XG5cdFx0XHRjb25zdCB0YWJsZUNvbnRyb2xzID1cblx0XHRcdFx0b1ZpZXcgJiZcblx0XHRcdFx0b1ZpZXcuZ2V0Q29udHJvbGxlcigpICYmXG5cdFx0XHRcdChvVmlldy5nZXRDb250cm9sbGVyKCkgYXMgTGlzdFJlcG9ydENvbnRyb2xsZXIpLl9nZXRDb250cm9scyAmJlxuXHRcdFx0XHQob1ZpZXcuZ2V0Q29udHJvbGxlcigpIGFzIExpc3RSZXBvcnRDb250cm9sbGVyKS5fZ2V0Q29udHJvbHMoXCJ0YWJsZVwiKTtcblx0XHRcdGlmICh0YWJsZUNvbnRyb2xzKSB7XG5cdFx0XHRcdHRhYmxlQ29udHJvbHMuZm9yRWFjaChmdW5jdGlvbiAob1RhYmxlOiBDb250cm9sKSB7XG5cdFx0XHRcdFx0bHJUYWJsZXMucHVzaCgob1RhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRUYWJsZURlZmluaXRpb24oKSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGxyVGFibGVzO1xuXHRcdH1cblx0XHRyZXR1cm4gW107XG5cdH0sXG5cdF9nZXRTZWxlY3Rpb25GaWVsZHM6IGZ1bmN0aW9uIChcblx0XHRvRmlsdGVyQ29udHJvbDogSUZpbHRlckNvbnRyb2wsXG5cdFx0c0VudGl0eVR5cGVQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0c0ZpbHRlckVudGl0eVR5cGVQYXRoOiBzdHJpbmcsXG5cdFx0Y29udGV4dFBhdGg6IHN0cmluZyxcblx0XHRsclRhYmxlczogVGFibGVWaXN1YWxpemF0aW9uW10sXG5cdFx0b01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdFx0b0NvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdFx0aW5jbHVkZUhpZGRlbj86IGJvb2xlYW4sXG5cdFx0b01vZGlmaWVyPzogQmFzZVRyZWVNb2RpZmllcixcblx0XHRsaW5lSXRlbVRlcm0/OiBzdHJpbmcsXG5cdFx0YW5ub3RhdGlvblBhdGg/OiBzdHJpbmdcblx0KTogRmlsdGVyRmllbGRbXSB7XG5cdFx0Y29uc3QgZmlsdGVyRmllbGRzID0gRmlsdGVyQmFyQ29udmVydGVyLmdldFNlbGVjdGlvbkZpZWxkcyhcblx0XHRcdG9Db252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0bHJUYWJsZXMsXG5cdFx0XHRhbm5vdGF0aW9uUGF0aCxcblx0XHRcdGluY2x1ZGVIaWRkZW4sXG5cdFx0XHRsaW5lSXRlbVRlcm1cblx0XHQpO1xuXHRcdGxldCBzZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW10gPSBmaWx0ZXJGaWVsZHMuc2VsZWN0aW9uRmllbGRzO1xuXHRcdGNvbnN0IHByb3BlcnR5SW5mb3MgPSAob0ZpbHRlckNvbnRyb2wgYXMgUGFydGlhbDxJRmlsdGVyQ29udHJvbD4pLmRhdGFcblx0XHRcdD8gdGhpcy5nZXRGaWx0ZXJQcm9wZXJ0eUluZm8ob0ZpbHRlckNvbnRyb2wpXG5cdFx0XHQ6IEpTT04ucGFyc2UoZmlsdGVyRmllbGRzLnNQcm9wZXJ0eUluZm8ucmVwbGFjZSgvXFxcXFxcey9nLCBcIntcIikucmVwbGFjZSgvXFxcXFxcfS9nLCBcIn1cIikpOyAvLyBwcm9wZXJ0eUluZm8gc3RyaW5nIGlzIHJldHVybmVkIGZyb20gdGhlIGdldFNlbGVjdGlvbkZpZWxkc1xuXHRcdGlmIChcblx0XHRcdChvTW9kaWZpZXJcblx0XHRcdFx0PyBvTW9kaWZpZXIuZ2V0Q29udHJvbFR5cGUob0ZpbHRlckNvbnRyb2wpID09PSBcInNhcC51aS5tZGMuRmlsdGVyQmFyXCJcblx0XHRcdFx0OiBvRmlsdGVyQ29udHJvbC5pc0EoXCJzYXAudWkubWRjLkZpbHRlckJhclwiKSkgJiZcblx0XHRcdHNFbnRpdHlUeXBlUGF0aCAhPT0gc0ZpbHRlckVudGl0eVR5cGVQYXRoXG5cdFx0KSB7XG5cdFx0XHQvKipcblx0XHRcdCAqIFdlIGFyZSBpbiBhIG11bHRpLWVudGl0eSBzZXQgc2NlbmFyaW8gc28gd2UgYWRkIGFubm90YXRpb24gXCJTZWxlY3Rpb25GaWVsZHNcIlxuXHRcdFx0ICogZnJvbSBGaWx0ZXJCYXIgZW50aXR5IGlmIHRoZXNlIHByb3BlcnRpZXMgYXJlIGtub3duIGJ5IHRoZSBlbnRpdHlcblx0XHRcdCAqL1xuXHRcdFx0Y29uc3Qgb1Zpc3VhbGl6YXRpb25PYmplY3RQYXRoID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGNvbnRleHRQYXRoKSEpO1xuXHRcdFx0Y29uc3Qgb1BhZ2VDb250ZXh0ID0gb0NvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcihzRmlsdGVyRW50aXR5VHlwZVBhdGgpO1xuXHRcdFx0Y29uc3QgYUZpbHRlckJhclNlbGVjdGlvbkZpZWxkc0Fubm90YXRpb246IFNlbGVjdGlvbkZpZWxkcyA9XG5cdFx0XHRcdG9QYWdlQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbjxTZWxlY3Rpb25GaWVsZHM+KFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlNlbGVjdGlvbkZpZWxkc1wiKS5hbm5vdGF0aW9uIHx8XG5cdFx0XHRcdChbXSBhcyB1bmtub3duIGFzIFNlbGVjdGlvbkZpZWxkcyk7XG5cdFx0XHRjb25zdCBtYXBTZWxlY3Rpb25GaWVsZHM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG5cdFx0XHRzZWxlY3Rpb25GaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAob1NlbGVjdGlvbkZpZWxkOiBGaWx0ZXJGaWVsZCkge1xuXHRcdFx0XHRtYXBTZWxlY3Rpb25GaWVsZHNbb1NlbGVjdGlvbkZpZWxkLmNvbmRpdGlvblBhdGhdID0gdHJ1ZTtcblx0XHRcdH0pO1xuXG5cdFx0XHRhRmlsdGVyQmFyU2VsZWN0aW9uRmllbGRzQW5ub3RhdGlvbi5mb3JFYWNoKGZ1bmN0aW9uIChvRmlsdGVyQmFyU2VsZWN0aW9uRmllbGRBbm5vdGF0aW9uOiBQcm9wZXJ0eVBhdGgpIHtcblx0XHRcdFx0Y29uc3Qgc1BhdGggPSBvRmlsdGVyQmFyU2VsZWN0aW9uRmllbGRBbm5vdGF0aW9uLnZhbHVlO1xuXHRcdFx0XHRpZiAoIW1hcFNlbGVjdGlvbkZpZWxkc1tzUGF0aF0pIHtcblx0XHRcdFx0XHRjb25zdCBvRmlsdGVyRmllbGQgPSBGaWx0ZXJCYXJDb252ZXJ0ZXIuZ2V0RmlsdGVyRmllbGQoXG5cdFx0XHRcdFx0XHRzUGF0aCxcblx0XHRcdFx0XHRcdG9Db252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFx0b1Zpc3VhbGl6YXRpb25PYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0LmVudGl0eVR5cGVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGlmIChvRmlsdGVyRmllbGQpIHtcblx0XHRcdFx0XHRcdHNlbGVjdGlvbkZpZWxkcy5wdXNoKG9GaWx0ZXJGaWVsZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0aWYgKHNlbGVjdGlvbkZpZWxkcykge1xuXHRcdFx0Y29uc3QgZmllbGROYW1lczogc3RyaW5nW10gPSBbXTtcblx0XHRcdHNlbGVjdGlvbkZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChvRmllbGQ6IEZpbHRlckZpZWxkKSB7XG5cdFx0XHRcdGZpZWxkTmFtZXMucHVzaChvRmllbGQua2V5KTtcblx0XHRcdH0pO1xuXHRcdFx0c2VsZWN0aW9uRmllbGRzID0gdGhpcy5fZ2V0U2VsZWN0aW9uRmllbGRzRnJvbVByb3BlcnR5SW5mb3MoZmllbGROYW1lcywgc2VsZWN0aW9uRmllbGRzLCBwcm9wZXJ0eUluZm9zKTtcblx0XHR9XG5cdFx0cmV0dXJuIHNlbGVjdGlvbkZpZWxkcztcblx0fSxcblxuXHQvKipcblx0ICogQWRkcyB0aGUgcHJvcGVydGllcyBmcm9tIHByb3BlcnR5SW5mb3MgZm9yIHRoZSBmaWx0ZXIgZmllbGQuXG5cdCAqIEBwYXJhbSBmaWVsZE5hbWVzIFRoZSBuYW1lcyBvZiBmaWVsZHMgcHJlc2VudCBpbiB0aGUgc2VsZWN0aW9uRmllbGQgYXJyYXkuXG5cdCAqIEBwYXJhbSBzZWxlY3Rpb25GaWVsZHMgU2VsZWN0aW9uIGZpZWxkIGFycmF5IG9mIGFsbCB0aGUgcG9zc2libGUgZmllbGRzIHRoYXQgY2FuIGJlIGluIHRoZSBzZWxlY3Rpb24gZmllbGQuXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eUluZm8gUHJvcGVydHlJbmZvcyBmaWx0ZXJzIHRoYXQgYXJlIGF2YWlsYWJsZSBvciBwcmVzZW50IGluIHNlbGVjdGlvbiBmaWVsZCBhbm5vdGF0aW9uLlxuXHQgKiBAcmV0dXJucyBGaWx0ZXJGaWVsZCBhcnJheSBvZiBhbGwgdGhlIHBvc3NpYmxlIGZpbHRlciBmaWVsZHMgYWZ0ZXIgYWRkaW5nIHByb3BlcnRpZXMgZnJvbSBwcm9wZXJ0eUluZm9zXG5cdCAqL1xuXHRfZ2V0U2VsZWN0aW9uRmllbGRzRnJvbVByb3BlcnR5SW5mb3M6IGZ1bmN0aW9uIChcblx0XHRmaWVsZE5hbWVzOiBzdHJpbmdbXSxcblx0XHRzZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW10sXG5cdFx0cHJvcGVydHlJbmZvOiBQcm9wZXJ0eUluZm9bXVxuXHQpOiBGaWx0ZXJGaWVsZFtdIHtcblx0XHRwcm9wZXJ0eUluZm8uZm9yRWFjaChmdW5jdGlvbiAob1Byb3A6IFByb3BlcnR5SW5mbykge1xuXHRcdFx0aWYgKG9Qcm9wLm5hbWUgPT09IFwiJHNlYXJjaFwiIHx8IG9Qcm9wLm5hbWUgPT09IFwiJGVkaXRTdGF0ZVwiIHx8IG9Qcm9wLmtleSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qgc2VsRmllbGQgPSBzZWxlY3Rpb25GaWVsZHNbZmllbGROYW1lcy5pbmRleE9mKG9Qcm9wLmtleSldO1xuXHRcdFx0aWYgKGZpZWxkTmFtZXMuaW5jbHVkZXMob1Byb3Aua2V5KSAmJiBzZWxGaWVsZC5hbm5vdGF0aW9uUGF0aCkge1xuXHRcdFx0XHRvUHJvcC5ncm91cCA9IHNlbEZpZWxkLmdyb3VwO1xuXHRcdFx0XHRvUHJvcC5ncm91cExhYmVsID0gc2VsRmllbGQuZ3JvdXBMYWJlbDtcblx0XHRcdFx0b1Byb3Auc2V0dGluZ3MgPSBzZWxGaWVsZC5zZXR0aW5ncztcblx0XHRcdFx0b1Byb3AudmlzdWFsRmlsdGVyID0gc2VsRmllbGQudmlzdWFsRmlsdGVyO1xuXHRcdFx0XHRvUHJvcC5sYWJlbCA9IG9Qcm9wLmxhYmVsID8gb1Byb3AubGFiZWwgOiBzZWxGaWVsZC5sYWJlbDsgLy8gaWYgYSBsYWJlbCBpcyBjb21pbmcgZm9yIHRoZSBtYW5pZmVzdCB3ZSBuZWVkIHRvIHRha2UgdGhhdCBhcyBwcmlvcml0eS5cblx0XHRcdFx0b1Byb3AuYW5ub3RhdGlvblBhdGggPSBvUHJvcC5hbm5vdGF0aW9uUGF0aCA/PyBzZWxGaWVsZC5hbm5vdGF0aW9uUGF0aDtcblx0XHRcdFx0c2VsZWN0aW9uRmllbGRzW2ZpZWxkTmFtZXMuaW5kZXhPZihvUHJvcC5rZXkpXSA9IG9Qcm9wIGFzIEZpbHRlckZpZWxkO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWZpZWxkTmFtZXMuaW5jbHVkZXMob1Byb3Aua2V5KSAmJiAhb1Byb3AuYW5ub3RhdGlvblBhdGgpIHtcblx0XHRcdFx0c2VsZWN0aW9uRmllbGRzLnB1c2gob1Byb3AgYXMgRmlsdGVyRmllbGQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBzZWxlY3Rpb25GaWVsZHM7XG5cdH0sXG5cdF9nZXRTZWFyY2hGaWVsZDogZnVuY3Rpb24gKG9JRmlsdGVyOiBQYXJ0aWFsPElGaWx0ZXJDb250cm9sPiwgYUlnbm9yZVByb3BlcnRpZXM6IHN0cmluZ1tdKTogc3RyaW5nIHwgbnVsbCB7XG5cdFx0cmV0dXJuIG9JRmlsdGVyLmdldFNlYXJjaCAmJiAhYUlnbm9yZVByb3BlcnRpZXMuaW5jbHVkZXMoXCJzZWFyY2hcIikgPyBvSUZpbHRlci5nZXRTZWFyY2goKSA6IG51bGw7XG5cdH0sXG5cdF9nZXRGaWx0ZXJDb25kaXRpb25zOiBmdW5jdGlvbiAoXG5cdFx0bVByb3BlcnRpZXM6IHsgaWdub3JlZFByb3BlcnRpZXM/OiBzdHJpbmdbXTsgcHJvcGVydGllc01ldGFkYXRhPzogUHJvcGVydHlJbmZvW107IHRhcmdldENvbnRyb2w/OiBDb250cm9sIH0gfCB1bmRlZmluZWQsXG5cdFx0bUZpbHRlckNvbmRpdGlvbnM6IFJlY29yZDxzdHJpbmcsIENvbmRpdGlvbk9iamVjdFtdPixcblx0XHRvSUZpbHRlcjogSUZpbHRlckNvbnRyb2xcblx0KTogUmVjb3JkPHN0cmluZywgQ29uZGl0aW9uT2JqZWN0W10+IHtcblx0XHRjb25zdCBtQ29uZGl0aW9ucyA9IG1GaWx0ZXJDb25kaXRpb25zIHx8IG9JRmlsdGVyLmdldENvbmRpdGlvbnMoKTtcblx0XHRpZiAobVByb3BlcnRpZXMgJiYgbVByb3BlcnRpZXMudGFyZ2V0Q29udHJvbCAmJiBtUHJvcGVydGllcy50YXJnZXRDb250cm9sLmlzQShcInNhcC51aS5tZGMuQ2hhcnRcIikpIHtcblx0XHRcdE9iamVjdC5rZXlzKG1Db25kaXRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uIChzS2V5OiBzdHJpbmcpIHtcblx0XHRcdFx0aWYgKHNLZXkgPT09IFwiJGVkaXRTdGF0ZVwiKSB7XG5cdFx0XHRcdFx0ZGVsZXRlIG1Db25kaXRpb25zW1wiJGVkaXRTdGF0ZVwiXTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBtQ29uZGl0aW9ucztcblx0fSxcblx0X2dldEZpbHRlclByb3BlcnRpZXNNZXRhZGF0YTogZnVuY3Rpb24gKFxuXHRcdGFGaWx0ZXJQcm9wZXJ0aWVzTWV0YWRhdGE6IFByb3BlcnR5SW5mb1tdIHwgbnVsbCxcblx0XHRvSUZpbHRlcjogSUZpbHRlckNvbnRyb2xcblx0KTogUHJvcGVydHlJbmZvW10gfCBudWxsIHtcblx0XHRpZiAoIShhRmlsdGVyUHJvcGVydGllc01ldGFkYXRhICYmIGFGaWx0ZXJQcm9wZXJ0aWVzTWV0YWRhdGEubGVuZ3RoKSkge1xuXHRcdFx0aWYgKG9JRmlsdGVyLmdldFByb3BlcnR5SW5mbykge1xuXHRcdFx0XHRhRmlsdGVyUHJvcGVydGllc01ldGFkYXRhID0gb0lGaWx0ZXIuZ2V0UHJvcGVydHlJbmZvKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhRmlsdGVyUHJvcGVydGllc01ldGFkYXRhID0gbnVsbDtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGFGaWx0ZXJQcm9wZXJ0aWVzTWV0YWRhdGE7XG5cdH0sXG5cdF9nZXRJZ25vcmVkUHJvcGVydGllczogZnVuY3Rpb24gKGZpbHRlclByb3BlcnRpZXNNZXRhZGF0YTogUHJvcGVydHlJbmZvW10sIGVudGl0eVByb3BlcnRpZXM6IFByb3BlcnR5SW5mb1tdKTogc3RyaW5nW10ge1xuXHRcdGNvbnN0IGlnbm9yZVByb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG5cdFx0ZmlsdGVyUHJvcGVydGllc01ldGFkYXRhLmZvckVhY2goZnVuY3Rpb24gKGZpbHRlclByb3BlcnR5KSB7XG5cdFx0XHRjb25zdCBmaWx0ZXJQcm9wZXJ0eU5hbWUgPSBmaWx0ZXJQcm9wZXJ0eS5uYW1lO1xuXHRcdFx0Y29uc3QgZW50aXR5UHJvcGVydGllc0N1cnJlbnQgPSBlbnRpdHlQcm9wZXJ0aWVzLmZpbmQoKGVudGl0eSkgPT4gZW50aXR5Lm5hbWUgPT09IGZpbHRlclByb3BlcnR5TmFtZSk7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGVudGl0eVByb3BlcnRpZXNDdXJyZW50ICYmXG5cdFx0XHRcdCgoIWZpbHRlclByb3BlcnR5LmlzQ3VzdG9tRmlsdGVyICYmIGZpbHRlclByb3BlcnR5LmRhdGFUeXBlICE9PSBlbnRpdHlQcm9wZXJ0aWVzQ3VycmVudC5kYXRhVHlwZSkgfHxcblx0XHRcdFx0XHQvLyBjdXN0b20gZmlsdGVycyB3aWxsIGhhdmUgYW4gYW5ub3RhdGlvbiBwYXRoIGFwcGxpZWQgaW4gdGhlIGNvbnZlcnRlciB3aGVuIHRoZXJlIGlzIGEgbWF0Y2hpbmcgcHJvcGVydHkgZm91bmRcblx0XHRcdFx0XHQoZmlsdGVyUHJvcGVydHkuaXNDdXN0b21GaWx0ZXIgJiYgZW50aXR5UHJvcGVydGllc0N1cnJlbnQuYW5ub3RhdGlvblBhdGggPT09IHVuZGVmaW5lZCkpXG5cdFx0XHQpIHtcblx0XHRcdFx0aWdub3JlUHJvcGVydGllcy5wdXNoKGZpbHRlclByb3BlcnR5TmFtZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGlnbm9yZVByb3BlcnRpZXM7XG5cdH0sXG5cdGdldEZpbHRlcnM6IGZ1bmN0aW9uIChmaWx0ZXJCYXI/OiBJRmlsdGVyQ29udHJvbCk6IEludGVybmFsQmluZGluZ0luZm8gfCB1bmRlZmluZWQge1xuXHRcdGlmICghZmlsdGVyQmFyIHx8IHR5cGVvZiBmaWx0ZXJCYXIuaXNJbml0aWFsaXplZCAhPT0gXCJmdW5jdGlvblwiIHx8ICFmaWx0ZXJCYXIuaXNJbml0aWFsaXplZCgpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHsgcGFyYW1ldGVycywgZmlsdGVycywgc2VhcmNoIH0gPSB0aGlzLmdldEZpbHRlckluZm8oZmlsdGVyQmFyKTtcblx0XHRyZXR1cm4geyBwYXJhbWV0ZXJzLCBmaWx0ZXJzLCBzZWFyY2ggfTtcblx0fSxcblx0LyoqXG5cdCAqIFByZXBhcmVzIHByb3BlcnR5SW5mbyBmb3Igc2hhcmluZyBpdCBvdXRzaWRlIEZFLCByZW1vdmVzIHVud2FudGVkIHByb3BlcnR5LlxuXHQgKiBAcGFyYW0gcHJvcGVydHlJbmZvcyBBcnJheSBvZiBwcm9wZXJ0eUluZm9cblx0ICogQHJldHVybnMgQXJyYXkgb3IgU3RyaW5nIChmb3IgRmlsdGVyQmFyIHRlbXBsYXRpbmcpIG9mIFByb3BlcnR5SW5mb3MgYWZ0ZXIgcmVtb3ZpbmcgdGhlIHVud2FudGVkIHByb3BlcnRpZXNcblx0ICovXG5cdGZvcm1hdFByb3BlcnR5SW5mbzogZnVuY3Rpb24gKHByb3BlcnR5SW5mb3M6IFByb3BlcnR5SW5mb1tdIHwgc3RyaW5nKTogUHJvcGVydHlJbmZvRXh0ZXJuYWxbXSB8IHN0cmluZyB7XG5cdFx0aWYgKHR5cGVvZiBwcm9wZXJ0eUluZm9zID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRsZXQgcHJvcEluZm8gPSBwcm9wZXJ0eUluZm9zLnJlcGxhY2UoL1xcXFxcXHsvZywgXCJ7XCIpO1xuXHRcdFx0cHJvcEluZm8gPSBwcm9wSW5mby5yZXBsYWNlKC9cXFxcXFx9L2csIFwifVwiKTtcblx0XHRcdGxldCBwcm9wSW5mb3MgPSBKU09OLnBhcnNlKHByb3BJbmZvKTtcblx0XHRcdHByb3BJbmZvcyA9IHRoaXMuX2Zvcm1hdFByb3BlcnR5SW5mbyhwcm9wSW5mb3MpO1xuXHRcdFx0bGV0IHByb3BlcnR5SW5mb0ZvckZpbHRlckJhciA9IEpTT04uc3RyaW5naWZ5KHByb3BJbmZvcyk7XG5cdFx0XHRwcm9wZXJ0eUluZm9Gb3JGaWx0ZXJCYXIgPSBwcm9wZXJ0eUluZm9Gb3JGaWx0ZXJCYXIucmVwbGFjZSgvXFx7L2csIFwiXFxcXHtcIik7XG5cdFx0XHRwcm9wZXJ0eUluZm9Gb3JGaWx0ZXJCYXIgPSBwcm9wZXJ0eUluZm9Gb3JGaWx0ZXJCYXIucmVwbGFjZSgvXFx9L2csIFwiXFxcXH1cIik7XG5cdFx0XHRyZXR1cm4gcHJvcGVydHlJbmZvRm9yRmlsdGVyQmFyO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fZm9ybWF0UHJvcGVydHlJbmZvKHByb3BlcnR5SW5mb3MpO1xuXHRcdH1cblx0fSxcblx0LyoqXG5cdCAqIFJlbW92ZXMgdW53YW50ZWQgcHJvcGVydHkgZnJvbSBQcm9wZXJ0eUluZm9zLlxuXHQgKiBAcGFyYW0gcHJvcGVydHlJbmZvcyBBcnJheSBvZiBwcm9wZXJ0eUluZm9cblx0ICogQHJldHVybnMgQXJyYXkgb2YgUHJvcGVydHlJbmZvcyBhZnRlciByZW1vdmluZyB0aGUgdW53YW50ZWQgcHJvcGVydGllc1xuXHQgKi9cblx0X2Zvcm1hdFByb3BlcnR5SW5mbzogZnVuY3Rpb24gKHByb3BlcnR5SW5mb3M6IFByb3BlcnR5SW5mb1tdKTogUHJvcGVydHlJbmZvRXh0ZXJuYWxbXSB7XG5cdFx0cmV0dXJuIHByb3BlcnR5SW5mb3MubWFwKChwcm9wZXJ0eSkgPT4ge1xuXHRcdFx0Y29uc3QgX3Byb3BlcnR5SW5mbzogUHJvcGVydHlJbmZvRXh0ZXJuYWwgPSB7XG5cdFx0XHRcdGtleTogcHJvcGVydHkua2V5IHx8IHByb3BlcnR5Lm5hbWUsXG5cdFx0XHRcdGRhdGFUeXBlOiBcIlwiLFxuXHRcdFx0XHRsYWJlbDogXCJcIlxuXHRcdFx0fTtcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIFByb3BlcnR5SW5mb0tleXMpIHtcblx0XHRcdFx0aWYgKHByb3BlcnR5Lmhhc093blByb3BlcnR5KGtleSkpIHtcblx0XHRcdFx0XHRzd2l0Y2ggKGtleSkge1xuXHRcdFx0XHRcdFx0Y2FzZSBcImhpZGRlbkZpbHRlclwiOlxuXHRcdFx0XHRcdFx0XHRfcHJvcGVydHlJbmZvLmhpZGRlbkZpbHRlciA9IHByb3BlcnR5LmhpZGRlbkZpbHRlcjtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlIFwicmVxdWlyZWRcIjpcblx0XHRcdFx0XHRcdFx0X3Byb3BlcnR5SW5mby5yZXF1aXJlZCA9IHByb3BlcnR5LnJlcXVpcmVkO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJwYXRoXCI6XG5cdFx0XHRcdFx0XHRcdF9wcm9wZXJ0eUluZm8ucGF0aCA9IHByb3BlcnR5LnBhdGg7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSBcInRvb2x0aXBcIjpcblx0XHRcdFx0XHRcdFx0X3Byb3BlcnR5SW5mby50b29sdGlwID0gcHJvcGVydHkudG9vbHRpcDtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlIFwidmlzaWJsZVwiOlxuXHRcdFx0XHRcdFx0XHRfcHJvcGVydHlJbmZvLnZpc2libGUgPSBwcm9wZXJ0eS52aXNpYmxlO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJtYXhDb25kaXRpb25zXCI6XG5cdFx0XHRcdFx0XHRcdF9wcm9wZXJ0eUluZm8ubWF4Q29uZGl0aW9ucyA9IHByb3BlcnR5Lm1heENvbmRpdGlvbnM7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSBcImZvcm1hdE9wdGlvbnNcIjpcblx0XHRcdFx0XHRcdFx0X3Byb3BlcnR5SW5mby5mb3JtYXRPcHRpb25zID0gcHJvcGVydHkuZm9ybWF0T3B0aW9ucztcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlIFwiY29uc3RyYWludHNcIjpcblx0XHRcdFx0XHRcdFx0X3Byb3BlcnR5SW5mby5jb25zdHJhaW50cyA9IHByb3BlcnR5LmNvbnN0cmFpbnRzO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJncm91cFwiOlxuXHRcdFx0XHRcdFx0XHRfcHJvcGVydHlJbmZvLmdyb3VwID0gcHJvcGVydHkuZ3JvdXA7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSBcImdyb3VwTGFiZWxcIjpcblx0XHRcdFx0XHRcdFx0X3Byb3BlcnR5SW5mby5ncm91cExhYmVsID0gcHJvcGVydHkuZ3JvdXBMYWJlbDtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlIFwiY2FzZVNlbnNpdGl2ZVwiOlxuXHRcdFx0XHRcdFx0XHRfcHJvcGVydHlJbmZvLmNhc2VTZW5zaXRpdmUgPSBwcm9wZXJ0eS5jYXNlU2Vuc2l0aXZlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKHByb3BlcnR5LmRhdGFUeXBlKSB7XG5cdFx0XHRcdF9wcm9wZXJ0eUluZm8uZGF0YVR5cGUgPSBwcm9wZXJ0eS5kYXRhVHlwZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBtYW5kYXRvcnkgcHJvcGVydHkgZGF0YVR5cGUgZm9yIGZpbHRlci1iYXIgZmlsdGVyIGZpZWxkOiAke3Byb3BlcnR5fWApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHByb3BlcnR5LmxhYmVsKSB7XG5cdFx0XHRcdF9wcm9wZXJ0eUluZm8ubGFiZWwgPSBwcm9wZXJ0eS5sYWJlbDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBfcHJvcGVydHlJbmZvO1xuXHRcdH0pO1xuXHR9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBvRmlsdGVyVXRpbHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7TUE2REtBLGdCQUFnQiwwQkFBaEJBLGdCQUFnQjtJQUFoQkEsZ0JBQWdCO0lBQWhCQSxnQkFBZ0I7SUFBaEJBLGdCQUFnQjtJQUFoQkEsZ0JBQWdCO0lB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S0FBSyxjQUFjO2dCQUNsQjZNLGFBQWEsQ0FBQ3dILFlBQVksR0FBR0QsUUFBUSxDQUFDQyxZQUFZO2dCQUNsRDtjQUNELEtBQUssVUFBVTtnQkFDZHhILGFBQWEsQ0FBQ3lILFFBQVEsR0FBR0YsUUFBUSxDQUFDRSxRQUFRO2dCQUMxQztjQUNELEtBQUssTUFBTTtnQkFDVnpILGFBQWEsQ0FBQ2hELElBQUksR0FBR3VLLFFBQVEsQ0FBQ3ZLLElBQUk7Z0JBQ2xDO2NBQ0QsS0FBSyxTQUFTO2dCQUNiZ0QsYUFBYSxDQUFDMEgsT0FBTyxHQUFHSCxRQUFRLENBQUNHLE9BQU87Z0JBQ3hDO2NBQ0QsS0FBSyxTQUFTO2dCQUNiMUgsYUFBYSxDQUFDMkgsT0FBTyxHQUFHSixRQUFRLENBQUNJLE9BQU87Z0JBQ3hDO2NBQ0QsS0FBSyxlQUFlO2dCQUNuQjNILGFBQWEsQ0FBQzRILGFBQWEsR0FBR0wsUUFBUSxDQUFDSyxhQUFhO2dCQUNwRDtjQUNELEtBQUssZUFBZTtnQkFDbkI1SCxhQUFhLENBQUNsSixhQUFhLEdBQUd5USxRQUFRLENBQUN6USxhQUFhO2dCQUNwRDtjQUNELEtBQUssYUFBYTtnQkFDakJrSixhQUFhLENBQUNqSixXQUFXLEdBQUd3USxRQUFRLENBQUN4USxXQUFXO2dCQUNoRDtjQUNELEtBQUssT0FBTztnQkFDWGlKLGFBQWEsQ0FBQ21HLEtBQUssR0FBR29CLFFBQVEsQ0FBQ3BCLEtBQUs7Z0JBQ3BDO2NBQ0QsS0FBSyxZQUFZO2dCQUNoQm5HLGFBQWEsQ0FBQ29HLFVBQVUsR0FBR21CLFFBQVEsQ0FBQ25CLFVBQVU7Z0JBQzlDO2NBQ0QsS0FBSyxlQUFlO2dCQUNuQnBHLGFBQWEsQ0FBQzZILGFBQWEsR0FBR04sUUFBUSxDQUFDTSxhQUFhO1lBQ3REO1VBQ0Q7UUFDRDtRQUNBLElBQUlOLFFBQVEsQ0FBQzFRLFFBQVEsRUFBRTtVQUN0Qm1KLGFBQWEsQ0FBQ25KLFFBQVEsR0FBRzBRLFFBQVEsQ0FBQzFRLFFBQVE7UUFDM0MsQ0FBQyxNQUFNO1VBQ04sTUFBTSxJQUFJK00sS0FBSyxDQUFDLG9FQUFvRTJELFFBQVEsRUFBRSxDQUFDO1FBQ2hHO1FBQ0EsSUFBSUEsUUFBUSxDQUFDaEIsS0FBSyxFQUFFO1VBQ25CdkcsYUFBYSxDQUFDdUcsS0FBSyxHQUFHZ0IsUUFBUSxDQUFDaEIsS0FBSztRQUNyQztRQUNBLE9BQU92RyxhQUFhO01BQ3JCLENBQUMsQ0FBQztJQUNIO0VBQ0QsQ0FBQztFQUFDLE9BRWF4TyxZQUFZO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -23,6 +23,7 @@ import { getContextRelativeTargetObjectPath } from "sap/fe/core/templating/DataM
23
23
  import { ODATA_TYPE_MAPPING } from "sap/fe/core/templating/DisplayModeFormatter";
24
24
  import CommonHelper from "sap/fe/macros/CommonHelper";
25
25
  import DelegateUtil from "sap/fe/macros/DelegateUtil";
26
+ import { type default as FEFilterBar } from "sap/fe/macros/controls/FilterBar";
26
27
  import SemanticDateOperators from "sap/fe/macros/filterBar/SemanticDateOperators";
27
28
  import type { AnnotationValueListType } from "sap/fe/macros/internal/valuehelp/ValueListHelper";
28
29
  import type TableAPI from "sap/fe/macros/table/TableAPI";
@@ -655,6 +656,12 @@ const oFilterUtils = {
655
656
  return;
656
657
  }
657
658
 
659
+ // We wait for filter bar to be ready.
660
+ if (oFilterBar.isA<FEFilterBar>("sap.fe.macros.controls.FilterBar")) {
661
+ // _setFilterValues could be called in case of adaptation filter bar, so we explicitly check for FE filter bar control.
662
+ await oFilterBar.whenInitialized();
663
+ }
664
+
658
665
  // common filter Operators need a value. Do nothing if this value is undefined
659
666
  // BCP: 2270135274
660
667
  if (