@sapui5/sap.fe.macros 1.107.1 → 1.108.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 (163) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/CommonHelper.js +3 -3
  4. package/src/sap/fe/macros/CommonHelper.ts +1 -1
  5. package/src/sap/fe/macros/MacroAPI.js +2 -3
  6. package/src/sap/fe/macros/MacroAPI.ts +1 -2
  7. package/src/sap/fe/macros/ResourceModel.js +1 -1
  8. package/src/sap/fe/macros/ResourceModel.ts +1 -2
  9. package/src/sap/fe/macros/chart/ChartAPI.js +7 -3
  10. package/src/sap/fe/macros/chart/ChartAPI.ts +12 -2
  11. package/src/sap/fe/macros/chart/ChartHelper.js +3 -3
  12. package/src/sap/fe/macros/chart/ChartHelper.ts +2 -1
  13. package/src/sap/fe/macros/contact/ContactHelper.js +1 -1
  14. package/src/sap/fe/macros/contact/ContactHelper.ts +1 -2
  15. package/src/sap/fe/macros/field/FieldAPI.js +46 -22
  16. package/src/sap/fe/macros/field/FieldAPI.ts +24 -1
  17. package/src/sap/fe/macros/field/FieldBaseDelegate.js +3 -3
  18. package/src/sap/fe/macros/field/FieldBaseDelegate.ts +5 -5
  19. package/src/sap/fe/macros/field/FieldHelper.js +51 -25
  20. package/src/sap/fe/macros/field/FieldHelper.ts +63 -32
  21. package/src/sap/fe/macros/field/FieldRuntime.js +41 -21
  22. package/src/sap/fe/macros/field/FieldRuntime.ts +44 -26
  23. package/src/sap/fe/macros/field/FieldTemplating.js +3 -3
  24. package/src/sap/fe/macros/field/FieldTemplating.ts +1 -5
  25. package/src/sap/fe/macros/field/PublicField.js +216 -0
  26. package/src/sap/fe/macros/field/PublicField.ts +177 -0
  27. package/src/sap/fe/macros/field/QuickViewLinkDelegate.js +491 -371
  28. package/src/sap/fe/macros/field/QuickViewLinkDelegate.ts +431 -425
  29. package/src/sap/fe/macros/filter/DraftEditState.js +142 -84
  30. package/src/sap/fe/macros/filter/DraftEditState.ts +133 -84
  31. package/src/sap/fe/macros/filter/FilterUtils.js +31 -7
  32. package/src/sap/fe/macros/filter/FilterUtils.ts +34 -16
  33. package/src/sap/fe/macros/filterBar/FilterBar.fragment.xml +1 -0
  34. package/src/sap/fe/macros/filterBar/FilterBar.metadata.js +30 -23
  35. package/src/sap/fe/macros/filterBar/FilterBar.metadata.ts +27 -21
  36. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +66 -18
  37. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +46 -18
  38. package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +6 -5
  39. package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +6 -4
  40. package/src/sap/fe/macros/form/FormAPI.js +15 -4
  41. package/src/sap/fe/macros/form/FormAPI.ts +17 -0
  42. package/src/sap/fe/macros/form/FormContainer.fragment.xml +17 -27
  43. package/src/sap/fe/macros/form/FormContainerBuildingBlock.js +2 -2
  44. package/src/sap/fe/macros/form/FormContainerBuildingBlock.ts +1 -1
  45. package/src/sap/fe/macros/internal/CollectionField.fragment.xml +1 -3
  46. package/src/sap/fe/macros/internal/CollectionField.metadata.js +2 -4
  47. package/src/sap/fe/macros/internal/CollectionField.metadata.ts +1 -4
  48. package/src/sap/fe/macros/internal/DataPoint.fragment.xml +5 -7
  49. package/src/sap/fe/macros/internal/DataPoint.metadata.js +2 -2
  50. package/src/sap/fe/macros/internal/DataPoint.metadata.ts +1 -1
  51. package/src/sap/fe/macros/internal/Field.metadata.js +64 -34
  52. package/src/sap/fe/macros/internal/Field.metadata.ts +59 -37
  53. package/src/sap/fe/macros/internal/collectionField/MultiValueFieldDelegate.js +3 -2
  54. package/src/sap/fe/macros/internal/collectionField/MultiValueFieldDelegate.ts +3 -1
  55. package/src/sap/fe/macros/internal/field/displayStyle/Button.fragment.xml +9 -12
  56. package/src/sap/fe/macros/internal/field/displayStyle/LabelSemanticKey.fragment.xml +2 -8
  57. package/src/sap/fe/macros/internal/field/displayStyle/LinkWithQuickViewForm.fragment.xml +3 -9
  58. package/src/sap/fe/macros/internal/field/displayStyle/LinkWrapper.fragment.xml +4 -8
  59. package/src/sap/fe/macros/internal/field/displayStyle/ObjectIdentifier.fragment.xml +9 -7
  60. package/src/sap/fe/macros/internal/field/displayStyle/ObjectStatus.fragment.xml +5 -7
  61. package/src/sap/fe/macros/internal/field/displayStyle/SemanticKeyWithDraftIndicator.fragment.xml +1 -1
  62. package/src/sap/fe/macros/internal/field/fragments/ObjectIdentifierContent.fragment.xml +2 -7
  63. package/src/sap/fe/macros/internal/helpers/ActionHelper.js +3 -4
  64. package/src/sap/fe/macros/internal/helpers/ActionHelper.ts +2 -2
  65. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +7 -17
  66. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +7 -19
  67. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +221 -12
  68. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +230 -18
  69. package/src/sap/fe/macros/internal/valuehelp/ValueHelpTemplating.js +7 -4
  70. package/src/sap/fe/macros/internal/valuehelp/ValueHelpTemplating.ts +13 -3
  71. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +1 -2
  72. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +44 -21
  73. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +47 -16
  74. package/src/sap/fe/macros/internal/valuehelp/ValueListHelperNew.js +70 -19
  75. package/src/sap/fe/macros/internal/valuehelp/ValueListHelperNew.ts +50 -25
  76. package/src/sap/fe/macros/internal/valuehelp/ValueListTable.fragment.xml +1 -1
  77. package/src/sap/fe/macros/library.js +1 -1
  78. package/src/sap/fe/macros/macroLibrary.js +4 -3
  79. package/src/sap/fe/macros/macroLibrary.ts +3 -3
  80. package/src/sap/fe/macros/messagebundle.properties +6 -0
  81. package/src/sap/fe/macros/messagebundle_ar.properties +4 -0
  82. package/src/sap/fe/macros/messagebundle_bg.properties +4 -0
  83. package/src/sap/fe/macros/messagebundle_ca.properties +4 -0
  84. package/src/sap/fe/macros/messagebundle_cs.properties +4 -0
  85. package/src/sap/fe/macros/messagebundle_cy.properties +4 -0
  86. package/src/sap/fe/macros/messagebundle_da.properties +4 -0
  87. package/src/sap/fe/macros/messagebundle_de.properties +4 -0
  88. package/src/sap/fe/macros/messagebundle_el.properties +4 -0
  89. package/src/sap/fe/macros/messagebundle_en.properties +4 -0
  90. package/src/sap/fe/macros/messagebundle_en_GB.properties +4 -0
  91. package/src/sap/fe/macros/messagebundle_en_US_sappsd.properties +4 -0
  92. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +4 -0
  93. package/src/sap/fe/macros/messagebundle_en_US_saptrc.properties +4 -0
  94. package/src/sap/fe/macros/messagebundle_es.properties +7 -3
  95. package/src/sap/fe/macros/messagebundle_es_MX.properties +4 -0
  96. package/src/sap/fe/macros/messagebundle_et.properties +6 -2
  97. package/src/sap/fe/macros/messagebundle_fi.properties +4 -0
  98. package/src/sap/fe/macros/messagebundle_fr.properties +4 -0
  99. package/src/sap/fe/macros/messagebundle_fr_CA.properties +4 -0
  100. package/src/sap/fe/macros/messagebundle_hi.properties +4 -0
  101. package/src/sap/fe/macros/messagebundle_hr.properties +4 -0
  102. package/src/sap/fe/macros/messagebundle_hu.properties +4 -0
  103. package/src/sap/fe/macros/messagebundle_id.properties +4 -0
  104. package/src/sap/fe/macros/messagebundle_it.properties +4 -0
  105. package/src/sap/fe/macros/messagebundle_iw.properties +4 -0
  106. package/src/sap/fe/macros/messagebundle_ja.properties +4 -0
  107. package/src/sap/fe/macros/messagebundle_kk.properties +4 -0
  108. package/src/sap/fe/macros/messagebundle_ko.properties +4 -0
  109. package/src/sap/fe/macros/messagebundle_lt.properties +4 -0
  110. package/src/sap/fe/macros/messagebundle_lv.properties +4 -0
  111. package/src/sap/fe/macros/messagebundle_ms.properties +4 -0
  112. package/src/sap/fe/macros/messagebundle_nl.properties +4 -0
  113. package/src/sap/fe/macros/messagebundle_no.properties +6 -2
  114. package/src/sap/fe/macros/messagebundle_pl.properties +7 -3
  115. package/src/sap/fe/macros/messagebundle_pt.properties +5 -1
  116. package/src/sap/fe/macros/messagebundle_pt_PT.properties +4 -0
  117. package/src/sap/fe/macros/messagebundle_ro.properties +6 -2
  118. package/src/sap/fe/macros/messagebundle_ru.properties +4 -0
  119. package/src/sap/fe/macros/messagebundle_sh.properties +4 -0
  120. package/src/sap/fe/macros/messagebundle_sk.properties +4 -0
  121. package/src/sap/fe/macros/messagebundle_sl.properties +4 -0
  122. package/src/sap/fe/macros/messagebundle_sv.properties +4 -0
  123. package/src/sap/fe/macros/messagebundle_th.properties +7 -3
  124. package/src/sap/fe/macros/messagebundle_tr.properties +4 -0
  125. package/src/sap/fe/macros/messagebundle_uk.properties +4 -0
  126. package/src/sap/fe/macros/messagebundle_vi.properties +7 -3
  127. package/src/sap/fe/macros/messagebundle_zh_CN.properties +7 -3
  128. package/src/sap/fe/macros/messagebundle_zh_TW.properties +4 -0
  129. package/src/sap/fe/macros/microchart/MicroChartHelper.js +10 -3
  130. package/src/sap/fe/macros/microchart/MicroChartHelper.ts +7 -2
  131. package/src/sap/fe/macros/quickView/QuickViewForm.fragment.xml +19 -3
  132. package/src/sap/fe/macros/quickView/QuickViewForm.metadata.js +15 -7
  133. package/src/sap/fe/macros/quickView/QuickViewForm.metadata.ts +13 -5
  134. package/src/sap/fe/macros/share/Share.block.js +339 -0
  135. package/src/sap/fe/macros/share/Share.block.tsx +229 -0
  136. package/src/sap/fe/macros/table/Actions.fragment.xml +0 -2
  137. package/src/sap/fe/macros/table/ColumnContent.fragment.xml +21 -9
  138. package/src/sap/fe/macros/table/Table.fragment.xml +9 -5
  139. package/src/sap/fe/macros/table/Table.metadata.js +42 -21
  140. package/src/sap/fe/macros/table/Table.metadata.ts +50 -25
  141. package/src/sap/fe/macros/table/TableAPI.js +142 -72
  142. package/src/sap/fe/macros/table/TableAPI.ts +75 -7
  143. package/src/sap/fe/macros/table/TableFullScreenUtil.js +1 -1
  144. package/src/sap/fe/macros/table/TableFullScreenUtil.ts +1 -2
  145. package/src/sap/fe/macros/table/TableHelper.js +49 -73
  146. package/src/sap/fe/macros/table/TableHelper.ts +53 -77
  147. package/src/sap/fe/macros/table/delegates/TableDelegate.js +45 -53
  148. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +41 -58
  149. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +6 -4
  150. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +6 -4
  151. package/src/sap/fe/macros/valuehelp/ValueHelpFilterBar.fragment.xml +1 -1
  152. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.js +2 -2
  153. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.ts +1 -1
  154. package/src/sap/fe/macros/visualfilters/VisualFilter.metadata.js +6 -3
  155. package/src/sap/fe/macros/visualfilters/VisualFilter.metadata.ts +3 -2
  156. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +2 -2
  157. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +2 -3
  158. package/src/sap/fe/macros/field/Field.metadata.js +0 -159
  159. package/src/sap/fe/macros/field/Field.metadata.ts +0 -145
  160. package/src/sap/fe/macros/field/PublicField.fragment.xml +0 -39
  161. package/src/sap/fe/macros/share/Share.fragment.xml +0 -22
  162. package/src/sap/fe/macros/share/Share.metadata.js +0 -95
  163. package/src/sap/fe/macros/share/Share.metadata.ts +0 -82
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sapui5/sap.fe.macros",
3
- "version": "1.107.1",
3
+ "version": "1.108.1",
4
4
  "description": "SAPUI5 Library sap.fe.macros",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "author": "SAP SE (https://www.sap.com)",
@@ -6,7 +6,7 @@
6
6
  <copyright>SAP UI development toolkit for HTML5 (SAPUI5)
7
7
  (c) Copyright 2009-2021 SAP SE. All rights reserved
8
8
  </copyright>
9
- <version>1.107.1</version>
9
+ <version>1.108.1</version>
10
10
 
11
11
  <documentation>UI5 library: sap.fe.macros</documentation>
12
12
 
@@ -751,11 +751,11 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/B
751
751
  * @private
752
752
  */
753
753
  getMeasureAttributeIndex: function (iMeasure, oChartAnnotations) {
754
- var _oChartAnnotations$Dy;
754
+ var _oChartAnnotations$Me, _oChartAnnotations$Dy;
755
755
 
756
756
  var aMeasures, sMeasurePropertyPath;
757
757
 
758
- if (oChartAnnotations.Measures.length > 0) {
758
+ if ((oChartAnnotations === null || oChartAnnotations === void 0 ? void 0 : (_oChartAnnotations$Me = oChartAnnotations.Measures) === null || _oChartAnnotations$Me === void 0 ? void 0 : _oChartAnnotations$Me.length) > 0) {
759
759
  aMeasures = oChartAnnotations.Measures;
760
760
  sMeasurePropertyPath = aMeasures[iMeasure].$PropertyPath;
761
761
  } else if ((oChartAnnotations === null || oChartAnnotations === void 0 ? void 0 : (_oChartAnnotations$Dy = oChartAnnotations.DynamicMeasures) === null || _oChartAnnotations$Dy === void 0 ? void 0 : _oChartAnnotations$Dy.length) > 0) {
@@ -994,4 +994,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/B
994
994
  CommonHelper.getSortConditions.requiresIContext = true;
995
995
  return CommonHelper;
996
996
  }, false);
997
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJWYWx1ZUNvbG9yIiwibUxpYnJhcnkiLCJDb21tb25IZWxwZXIiLCJ1c2VGaWVsZFZhbHVlSGVscCIsImxvY2F0aW9uIiwiaHJlZiIsImluZGV4T2YiLCJnZXRQYXRoVG9LZXkiLCJvQ3R4IiwiZ2V0T2JqZWN0IiwiaXNWaXNpYmxlIiwidGFyZ2V0Iiwib0ludGVyZmFjZSIsIm9Nb2RlbCIsImNvbnRleHQiLCJnZXRNb2RlbCIsInNQcm9wZXJ0eVBhdGgiLCJnZXRQYXRoIiwib0Fubm90YXRpb25zIiwiaGlkZGVuIiwiJFBhdGgiLCJpc0RpYWxvZyIsIm9BY3Rpb25Db250ZXh0IiwiaXNDcml0aWNhbCIsIm9BY3Rpb24iLCJBcnJheSIsImlzQXJyYXkiLCIkUGFyYW1ldGVyIiwibGVuZ3RoIiwiZ2V0UGFyYW1ldGVyRWRpdE1vZGUiLCJmaWVsZENvbnRyb2wiLCJpbW11dGFibGUiLCJjb21wdXRlZCIsInNFZGl0TW9kZSIsIkVkaXRNb2RlIiwiRWRpdGFibGUiLCJSZWFkT25seSIsIiRFbnVtTWVtYmVyIiwiRGlzYWJsZWQiLCJnZXRNZXRhUGF0aCIsInVuZGVmaW5lZCIsImlzRGVza3RvcCIsInN5c3RlbSIsImRlc2t0b3AiLCJnZXRUYXJnZXRDb2xsZWN0aW9uIiwib0NvbnRleHQiLCJuYXZDb2xsZWN0aW9uIiwic1BhdGgiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJnZXRNZXRhTW9kZWwiLCJhUGFydHMiLCJzcGxpdCIsImZpbHRlciIsInNQYXJ0IiwiZW50aXR5U2V0IiwibmF2aWdhdGlvbkNvbGxlY3Rpb24iLCJzbGljZSIsImpvaW4iLCJpc1Byb3BlcnR5RmlsdGVyYWJsZSIsInByb3BlcnR5Iiwib0RhdGFGaWVsZCIsInNQcm9wZXJ0eUxvY2F0aW9uUGF0aCIsImdldExvY2F0aW9uRm9yUHJvcGVydHlQYXRoIiwic1Byb3BlcnR5IiwicmVwbGFjZSIsIiRUeXBlIiwiQ29tbW9uVXRpbHMiLCJpTGVuZ3RoIiwic0NvbGxlY3Rpb25QYXRoIiwibGFzdEluZGV4T2YiLCJnb3RvQWN0aW9uUGFyYW1ldGVyIiwic1Byb3BlcnR5TmFtZSIsImdldFBhcmFtZXRlclBhdGgiLCJnZXRFbnRpdHlTZXROYW1lIiwib01ldGFNb2RlbCIsInNFbnRpdHlUeXBlIiwib0VudGl0eUNvbnRhaW5lciIsImtleSIsImdldEFjdGlvblBhdGgiLCJiUmV0dXJuT25seVBhdGgiLCJzQWN0aW9uTmFtZSIsImJDaGVja1N0YXRpY1ZhbHVlIiwic0NvbnRleHRQYXRoIiwic0VudGl0eVR5cGVOYW1lIiwic0VudGl0eU5hbWUiLCJzQmluZGluZ1BhcmFtZXRlciIsImdldE5hdmlnYXRpb25Db250ZXh0IiwiT0RhdGFNb2RlbEFubm90YXRpb25IZWxwZXIiLCJnZXROYXZpZ2F0aW9uUGF0aCIsImJLZWVwUHJvcGVydHkiLCJiU3RhcnRzV2l0aEVudGl0eVR5cGUiLCJzdGFydHNXaXRoIiwicGFydCIsInNoaWZ0IiwicG9wIiwiZ2V0QWN0aW9uQ29udGV4dCIsImdldFBhdGhUb0JvdW5kQWN0aW9uT3ZlcmxvYWQiLCJhZGRTaW5nbGVRdW90ZXMiLCJzVmFsdWUiLCJiRXNjYXBlIiwiZXNjYXBlU2luZ2xlUXVvdGVzIiwiZ2VuZXJhdGVGdW5jdGlvbiIsInNGdW5jTmFtZSIsInNQYXJhbXMiLCJpIiwic0Z1bmN0aW9uIiwiZ2V0SGVhZGVyRGF0YVBvaW50TGlua1Zpc2liaWxpdHkiLCJiTGluayIsImJGaWVsZFZpc2liaWxpdHkiLCJzVmlzaWJpbGl0eUV4cCIsIm9iamVjdFRvU3RyaW5nIiwib1BhcmFtcyIsImlOdW1iZXJPZktleXMiLCJPYmplY3QiLCJrZXlzIiwic0tleSIsInJlbW92ZUVzY2FwZUNoYXJhY3RlcnMiLCJzRXhwcmVzc2lvbiIsInN0cmluZ2lmeU9iamVjdCIsInNTdHJpbmdpZmllZCIsIm9PYmplY3QiLCJKU09OIiwicGFyc2UiLCJvVUk1T2JqZWN0IiwidWk1b2JqZWN0IiwiYXNzaWduIiwic3RyaW5naWZ5Iiwic1R5cGUiLCJMb2ciLCJlcnJvciIsIkVycm9yIiwic3RyaW5naWZ5Q3VzdG9tRGF0YSIsInZEYXRhIiwiQ29udGV4dCIsInBhcnNlQ3VzdG9tRGF0YSIsImhhc093blByb3BlcnR5IiwiX2dldERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhVHlwZSIsInJlcXVlc3RPYmplY3QiLCJnZXRQb3BvdmVyVGV4dCIsImlDb250ZXh0IiwidGhlbiIsIm9EQURFbnRpdHlUeXBlIiwic0JpbmRpbmciLCJJblByb2Nlc3NCeVVzZXJEZXNjcmlwdGlvbiIsIkxhc3RDaGFuZ2VkQnlVc2VyRGVzY3JpcHRpb24iLCJnZXRDb250ZXh0UGF0aCIsIm9WYWx1ZSIsImdldFNvcnRDb25kaXRpb25zIiwib1ByZXNlbnRhdGlvblZhcmlhbnQiLCJzUHJlc2VudGF0aW9uVmFyaWFudFBhdGgiLCJfaXNQcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiIsIlNvcnRPcmRlciIsImFTb3J0Q29uZGl0aW9ucyIsInNvcnRlcnMiLCJzRW50aXR5UGF0aCIsImZvckVhY2giLCJvQ29uZGl0aW9uIiwib1NvcnRQcm9wZXJ0eSIsIm9Tb3J0ZXIiLCJEeW5hbWljUHJvcGVydHkiLCIkQW5ub3RhdGlvblBhdGgiLCJOYW1lIiwiUHJvcGVydHkiLCIkUHJvcGVydHlQYXRoIiwibmFtZSIsImRlc2NlbmRpbmciLCJEZXNjZW5kaW5nIiwicHVzaCIsInNBbm5vdGF0aW9uUGF0aCIsImNyZWF0ZVByZXNlbnRhdGlvblBhdGhDb250ZXh0Iiwib1ByZXNlbnRhdGlvbkNvbnRleHQiLCJhUGF0aHMiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImdldFByZXNzSGFuZGxlckZvckRhdGFGaWVsZEZvcklCTiIsInNDb250ZXh0IiwiYk5hdmlnYXRlV2l0aENvbmZpcm1hdGlvbkRpYWxvZyIsIm1OYXZpZ2F0aW9uUGFyYW1ldGVycyIsIm5hdmlnYXRpb25Db250ZXh0cyIsIlJlcXVpcmVzQ29udGV4dCIsIklubGluZSIsImFwcGxpY2FibGVDb250ZXh0cyIsIlNlbWFudGljT2JqZWN0IiwiQWN0aW9uIiwibm90QXBwbGljYWJsZUNvbnRleHRzIiwibGFiZWwiLCJMYWJlbCIsIk1hcHBpbmciLCJzZW1hbnRpY09iamVjdE1hcHBpbmciLCJnZXRFbnRpdHlTZXQiLCJNb2RlbEhlbHBlciIsImdldEVudGl0eVNldFBhdGgiLCJoYW5kbGVWaXNpYmlsaXR5T2ZNZW51QWN0aW9ucyIsInNWaXNpYmxlVmFsdWUiLCJjb21iaW5lZENvbmRpdGlvbnMiLCJnZXRDcml0aWNhbGl0eUNhbGN1bGF0aW9uQmluZGluZyIsInNJbXByb3ZlbWVudERpcmVjdGlvbiIsInNEZXZpYXRpb25Mb3ciLCJzVG9sZXJhbmNlTG93Iiwic0FjY2VwdGFuY2VMb3ciLCJzQWNjZXB0YW5jZUhpZ2giLCJzVG9sZXJhbmNlSGlnaCIsInNEZXZpYXRpb25IaWdoIiwic0NyaXRpY2FsaXR5RXhwcmVzc2lvbiIsIk5ldXRyYWwiLCJJbmZpbml0eSIsIkdvb2QiLCJDcml0aWNhbCIsIndhcm5pbmciLCJfZ2V0Q3JpdGljYWxpdHlGcm9tRW51bSIsInNDcml0aWNhbGl0eSIsInNJbmRpY2F0b3IiLCJnZXRWYWx1ZUNyaXRpY2FsaXR5Iiwic0RpbWVuc2lvbiIsImFWYWx1ZUNyaXRpY2FsaXR5Iiwic1Jlc3VsdCIsImFWYWx1ZXMiLCJvVkMiLCJWYWx1ZSIsIkNyaXRpY2FsaXR5IiwiZ2V0TWVhc3VyZUF0dHJpYnV0ZUluZGV4IiwiaU1lYXN1cmUiLCJvQ2hhcnRBbm5vdGF0aW9ucyIsImFNZWFzdXJlcyIsInNNZWFzdXJlUHJvcGVydHlQYXRoIiwiTWVhc3VyZXMiLCJEeW5hbWljTWVhc3VyZXMiLCJiTWVhc3VyZUF0dHJpYnV0ZUV4aXN0cyIsImFNZWFzdXJlQXR0cmlidXRlcyIsIk1lYXN1cmVBdHRyaWJ1dGVzIiwiaU1lYXN1cmVBdHRyaWJ1dGUiLCJmbkNoZWNrTWVhc3VyZSIsInNNZWFzdXJlUGF0aCIsIm9NZWFzdXJlQXR0cmlidXRlIiwiaW5kZXgiLCJNZWFzdXJlIiwiRHluYW1pY01lYXN1cmUiLCJzb21lIiwiYmluZCIsImdldE1lYXN1cmVBdHRyaWJ1dGUiLCJzQ2hhcnRBbm5vdGF0aW9uUGF0aCIsInNNZWFzdXJlQXR0cmlidXRlUGF0aCIsIkRhdGFQb2ludCIsImdldE1lYXN1cmVBdHRyaWJ1dGVGb3JNZWFzdXJlIiwic3Vic3RyaW5nIiwiaXNEcmFmdFBhcmVudEVudGl0eUZvckNvbnRhaW5tZW50Iiwib1RhcmdldENvbGxlY3Rpb25Db250YWluc1RhcmdldCIsIm9UYWJsZU1ldGFkYXRhIiwicGFyZW50RW50aXR5U2V0Iiwic1BhcmVudEVudGl0eVNldFBhdGgiLCJvRHJhZnRSb290Iiwib0RyYWZ0Tm9kZSIsImdldERhdGFGcm9tVGVtcGxhdGUiLCJkYXRhRWxlbWVudCIsInNwbGl0UGF0aCIsImRhdGFLZXkiLCJjb25uZWN0ZWREYXRhUGF0aCIsImNvbm5lY3RlZE9iamVjdCIsInRlbXBsYXRlIiwiVGVtcGxhdGUiLCJzcGxpdFRlbXAiLCJ0ZW1wQXJyYXkiLCJ0cmltIiwiRGF0YSIsIm5vdExhc3RJbmRleCIsImVsZW1lbnQiLCJpc0xhc3RJbmRleCIsInRlbXBsYXRlSW5mbyIsImdldERlbGltaXRlciIsInNldE1ldGFNb2RlbCIsImdldFBhcmFtZXRlcnMiLCJvUGFyYW1ldGVySW5mbyIsImdldFBhcmFtZXRlckluZm8iLCJwYXJhbWV0ZXJQcm9wZXJ0aWVzIiwiYnVpbGRBY3Rpb25XcmFwcGVyIiwib1RoaXMiLCJhUGFyYW1zIiwicmVmIiwiaGFuZGxlck1vZHVsZSIsImhhbmRsZXJNZXRob2QiLCJpZCIsIm9BZGRpdGlvbmFsUGFyYW1zIiwiY29udGV4dHMiLCJjb21waWxlRXhwcmVzc2lvbiIsImZuIiwiZ2V0SGlkZGVuUGF0aEV4cHJlc3Npb24iLCJkYXRhRmllbGRBbm5vdGF0aW9ucyIsInJlcXVpcmVzSUNvbnRleHQiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkNvbW1vbkhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uLCBmbiwgcmVmIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IG1MaWJyYXJ5IGZyb20gXCJzYXAvbS9saWJyYXJ5XCI7XG5pbXBvcnQgeyBzeXN0ZW0gfSBmcm9tIFwic2FwL3VpL0RldmljZVwiO1xuaW1wb3J0IEVkaXRNb2RlIGZyb20gXCJzYXAvdWkvbWRjL2VudW0vRWRpdE1vZGVcIjtcbmltcG9ydCBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IE9EYXRhTW9kZWxBbm5vdGF0aW9uSGVscGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQW5ub3RhdGlvbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuXG5jb25zdCBWYWx1ZUNvbG9yID0gbUxpYnJhcnkuVmFsdWVDb2xvcjtcbmNvbnN0IENvbW1vbkhlbHBlciA9IHtcblx0dXNlRmllbGRWYWx1ZUhlbHA6IGZ1bmN0aW9uICgpIHtcblx0XHQvLyBTd2l0Y2ggZnJvbSAobmV3KSBtZGM6VmFsdWVIZWxwIHRvIChvbGQpIG1kY0ZpZWxkOkZpZWxkVmFsdWVIZWxwXG5cdFx0cmV0dXJuIGxvY2F0aW9uLmhyZWYuaW5kZXhPZihcInNhcC1mZS1vbGRGaWVsZFZhbHVlSGVscD10cnVlXCIpID4gLTE7XG5cdH0sXG5cblx0Z2V0UGF0aFRvS2V5OiBmdW5jdGlvbiAob0N0eDogYW55KSB7XG5cdFx0cmV0dXJuIG9DdHguZ2V0T2JqZWN0KCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgaWYgYSBmaWVsZCBpcyB2aXNpYmxlLlxuXHQgKlxuXHQgKiBAcGFyYW0gdGFyZ2V0IFRhcmdldCBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gb0ludGVyZmFjZSBJbnRlcmZhY2UgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgUmV0dXJucyB0cnVlLCBmYWxzZSwgb3IgZXhwcmVzc2lvbiB3aXRoIHBhdGhcblx0ICovXG5cdGlzVmlzaWJsZTogZnVuY3Rpb24gKHRhcmdldDogb2JqZWN0LCBvSW50ZXJmYWNlOiBhbnkpIHtcblx0XHRjb25zdCBvTW9kZWwgPSBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0TW9kZWwoKSxcblx0XHRcdHNQcm9wZXJ0eVBhdGggPSBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0UGF0aCgpLFxuXHRcdFx0b0Fubm90YXRpb25zID0gb01vZGVsLmdldE9iamVjdChgJHtzUHJvcGVydHlQYXRofUBgKSxcblx0XHRcdGhpZGRlbiA9IG9Bbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5cIl07XG5cblx0XHRyZXR1cm4gdHlwZW9mIGhpZGRlbiA9PT0gXCJvYmplY3RcIiA/IFwiez0gISR7XCIgKyBoaWRkZW4uJFBhdGggKyBcIn0gfVwiIDogIWhpZGRlbjtcblx0fSxcblxuXHQvKipcblx0ICogRGV0ZXJtaW5lIGlmIHRoZSBhY3Rpb24gb3BlbnMgdXAgYSBkaWFsb2cuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQWN0aW9uQ29udGV4dFxuXHQgKiBAcGFyYW0gb0ludGVyZmFjZVxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgYSBkaWFsb2cgaXMgbmVlZGVkXG5cdCAqL1xuXHRpc0RpYWxvZzogZnVuY3Rpb24gKG9BY3Rpb25Db250ZXh0OiBhbnksIG9JbnRlcmZhY2U6IGFueSkge1xuXHRcdGNvbnN0IG9Nb2RlbCA9IG9JbnRlcmZhY2UuY29udGV4dC5nZXRNb2RlbCgpLFxuXHRcdFx0c1Byb3BlcnR5UGF0aCA9IG9JbnRlcmZhY2UuY29udGV4dC5nZXRQYXRoKCksXG5cdFx0XHRpc0NyaXRpY2FsID0gb01vZGVsLmdldE9iamVjdChgJHtzUHJvcGVydHlQYXRofS9AJHVpNS5vdmVybG9hZEBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNBY3Rpb25Dcml0aWNhbGApO1xuXHRcdGlmIChpc0NyaXRpY2FsKSB7XG5cdFx0XHRyZXR1cm4gXCJEaWFsb2dcIjtcblx0XHR9IGVsc2UgaWYgKG9BY3Rpb25Db250ZXh0KSB7XG5cdFx0XHRjb25zdCBvQWN0aW9uID0gQXJyYXkuaXNBcnJheShvQWN0aW9uQ29udGV4dCkgPyBvQWN0aW9uQ29udGV4dFswXSA6IG9BY3Rpb25Db250ZXh0O1xuXHRcdFx0aWYgKG9BY3Rpb24uJFBhcmFtZXRlciAmJiBvQWN0aW9uLiRQYXJhbWV0ZXIubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRyZXR1cm4gXCJEaWFsb2dcIjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBcIk5vbmVcIjtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmUgaWYgZmllbGQgaXMgZWRpdGFibGUuXG5cdCAqXG5cdCAqIEBwYXJhbSB0YXJnZXQgVGFyZ2V0IGluc3RhbmNlXG5cdCAqIEBwYXJhbSBvSW50ZXJmYWNlIEludGVyZmFjZSBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBBIEJpbmRpbmcgRXhwcmVzc2lvbiB0byBkZXRlcm1pbmUgaWYgYSBmaWVsZCBzaG91bGQgYmUgZWRpdGFibGUgb3Igbm90LlxuXHQgKi9cblx0Z2V0UGFyYW1ldGVyRWRpdE1vZGU6IGZ1bmN0aW9uICh0YXJnZXQ6IG9iamVjdCwgb0ludGVyZmFjZTogYW55KSB7XG5cdFx0Y29uc3Qgb01vZGVsID0gb0ludGVyZmFjZS5jb250ZXh0LmdldE1vZGVsKCksXG5cdFx0XHRzUHJvcGVydHlQYXRoID0gb0ludGVyZmFjZS5jb250ZXh0LmdldFBhdGgoKSxcblx0XHRcdG9Bbm5vdGF0aW9ucyA9IG9Nb2RlbC5nZXRPYmplY3QoYCR7c1Byb3BlcnR5UGF0aH1AYCksXG5cdFx0XHRmaWVsZENvbnRyb2wgPSBvQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpZWxkQ29udHJvbFwiXSxcblx0XHRcdGltbXV0YWJsZSA9IG9Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ29yZS5WMS5JbW11dGFibGVcIl0sXG5cdFx0XHRjb21wdXRlZCA9IG9Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ29yZS5WMS5Db21wdXRlZFwiXTtcblxuXHRcdGxldCBzRWRpdE1vZGU6IEVkaXRNb2RlIHwgc3RyaW5nID0gRWRpdE1vZGUuRWRpdGFibGU7XG5cblx0XHRpZiAoaW1tdXRhYmxlIHx8IGNvbXB1dGVkKSB7XG5cdFx0XHRzRWRpdE1vZGUgPSBFZGl0TW9kZS5SZWFkT25seTtcblx0XHR9IGVsc2UgaWYgKGZpZWxkQ29udHJvbCkge1xuXHRcdFx0aWYgKGZpZWxkQ29udHJvbC4kRW51bU1lbWJlcikge1xuXHRcdFx0XHRpZiAoZmllbGRDb250cm9sLiRFbnVtTWVtYmVyID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWVsZENvbnRyb2xUeXBlL1JlYWRPbmx5XCIpIHtcblx0XHRcdFx0XHRzRWRpdE1vZGUgPSBFZGl0TW9kZS5SZWFkT25seTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0ZmllbGRDb250cm9sLiRFbnVtTWVtYmVyID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWVsZENvbnRyb2xUeXBlL0luYXBwbGljYWJsZVwiIHx8XG5cdFx0XHRcdFx0ZmllbGRDb250cm9sLiRFbnVtTWVtYmVyID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWVsZENvbnRyb2xUeXBlL0hpZGRlblwiXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHNFZGl0TW9kZSA9IEVkaXRNb2RlLkRpc2FibGVkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoZmllbGRDb250cm9sLiRQYXRoKSB7XG5cdFx0XHRcdHNFZGl0TW9kZSA9XG5cdFx0XHRcdFx0XCJ7PSAle1wiICtcblx0XHRcdFx0XHRmaWVsZENvbnRyb2wuJFBhdGggK1xuXHRcdFx0XHRcdFwifSA8IDMgPyAoJXtcIiArXG5cdFx0XHRcdFx0ZmllbGRDb250cm9sLiRQYXRoICtcblx0XHRcdFx0XHRcIn0gPT09IDAgPyAnXCIgK1xuXHRcdFx0XHRcdEVkaXRNb2RlLkRpc2FibGVkICtcblx0XHRcdFx0XHRcIicgOiAnXCIgK1xuXHRcdFx0XHRcdEVkaXRNb2RlLlJlYWRPbmx5ICtcblx0XHRcdFx0XHRcIicpIDogJ1wiICtcblx0XHRcdFx0XHRFZGl0TW9kZS5FZGl0YWJsZSArXG5cdFx0XHRcdFx0XCInfVwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBzRWRpdE1vZGU7XG5cdH0sXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGNvbXBsZXRlIG1ldGFwYXRoIHRvIHRoZSB0YXJnZXQuXG5cdCAqXG5cdCAqIEBwYXJhbSB0YXJnZXRcblx0ICogQHBhcmFtIG9JbnRlcmZhY2Vcblx0ICogQHJldHVybnMgVGhlIG1ldGFwYXRoXG5cdCAqL1xuXHRnZXRNZXRhUGF0aDogZnVuY3Rpb24gKHRhcmdldDogYW55LCBvSW50ZXJmYWNlOiBhbnkpIHtcblx0XHRyZXR1cm4gKG9JbnRlcmZhY2UgJiYgb0ludGVyZmFjZS5jb250ZXh0ICYmIG9JbnRlcmZhY2UuY29udGV4dC5nZXRQYXRoKCkpIHx8IHVuZGVmaW5lZDtcblx0fSxcblx0aXNEZXNrdG9wOiBmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIHN5c3RlbS5kZXNrdG9wID09PSB0cnVlO1xuXHR9LFxuXHRnZXRUYXJnZXRDb2xsZWN0aW9uOiBmdW5jdGlvbiAob0NvbnRleHQ6IGFueSwgbmF2Q29sbGVjdGlvbj86IGFueSkge1xuXHRcdGxldCBzUGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKTtcblx0XHRpZiAoXG5cdFx0XHRvQ29udGV4dC5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKSA9PT0gXCJzYXAudWkubW9kZWwuQ29udGV4dFwiICYmXG5cdFx0XHQob0NvbnRleHQuZ2V0T2JqZWN0KFwiJGtpbmRcIikgPT09IFwiRW50aXR5U2V0XCIgfHwgb0NvbnRleHQuZ2V0T2JqZWN0KFwiJENvbnRhaW5zVGFyZ2V0XCIpID09PSB0cnVlKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIHNQYXRoO1xuXHRcdH1cblx0XHRpZiAob0NvbnRleHQuZ2V0TW9kZWwpIHtcblx0XHRcdHNQYXRoID1cblx0XHRcdFx0KG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YVBhdGggJiYgb0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhUGF0aChzUGF0aCkpIHx8XG5cdFx0XHRcdG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkuZ2V0TWV0YVBhdGgoc1BhdGgpO1xuXHRcdH1cblx0XHQvL1N1cHBvcnRpbmcgc1BhdGggb2YgYW55IGZvcm1hdCwgZWl0aGVyICcvPGVudGl0eVNldD4vPG5hdmlnYXRpb25Db2xsZWN0aW9uPicgPE9SPiAnLzxlbnRpdHlTZXQ+LyRUeXBlLzxuYXZpZ2F0aW9uQ29sbGVjdGlvbj4nXG5cdFx0Y29uc3QgYVBhcnRzID0gc1BhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihmdW5jdGlvbiAoc1BhcnQ6IGFueSkge1xuXHRcdFx0cmV0dXJuIHNQYXJ0ICYmIHNQYXJ0ICE9IFwiJFR5cGVcIjtcblx0XHR9KTsgLy9maWx0ZXIgb3V0IGVtcHR5IHN0cmluZ3MgYW5kIHBhcnRzIHJlZmVycmluZyB0byAnJFR5cGUnXG5cdFx0Y29uc3QgZW50aXR5U2V0ID0gYC8ke2FQYXJ0c1swXX1gO1xuXHRcdGlmIChhUGFydHMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRyZXR1cm4gZW50aXR5U2V0O1xuXHRcdH1cblx0XHRjb25zdCBuYXZpZ2F0aW9uQ29sbGVjdGlvbiA9IG5hdkNvbGxlY3Rpb24gPT09IHVuZGVmaW5lZCA/IGFQYXJ0cy5zbGljZSgxKS5qb2luKFwiLyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nL1wiKSA6IG5hdkNvbGxlY3Rpb247XG5cdFx0cmV0dXJuIGAke2VudGl0eVNldH0vJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcvJHtuYXZpZ2F0aW9uQ29sbGVjdGlvbn1gOyAvLyB1c2VkIGluIGdvdG9UYXJnZXRFbnRpdHlTZXQgbWV0aG9kIGluIHRoZSBzYW1lIGZpbGVcblx0fSxcblxuXHRpc1Byb3BlcnR5RmlsdGVyYWJsZTogZnVuY3Rpb24gKHByb3BlcnR5OiBhbnksIG9JbnRlcmZhY2U6IGFueSwgb0RhdGFGaWVsZDogYW55KSB7XG5cdFx0Y29uc3Qgb01vZGVsID0gb0ludGVyZmFjZS5jb250ZXh0LmdldE1vZGVsKCksXG5cdFx0XHRzUHJvcGVydHlQYXRoID0gb0ludGVyZmFjZS5jb250ZXh0LmdldFBhdGgoKSxcblx0XHRcdC8vIExvYWNhdGlvblBhdGggd291bGQgYmUgdGhlIHByZWZpeCBvZiBzUHJvcGVydHlQYXRoLCBleGFtcGxlOiBzUHJvcGVydHlQYXRoID0gJy9DdXN0b21lci9TZXQvTmFtZScgLT4gc1Byb3BlcnR5TG9jYXRpb25QYXRoID0gJy9DdXN0b21lci9TZXQnXG5cdFx0XHRzUHJvcGVydHlMb2NhdGlvblBhdGggPSBDb21tb25IZWxwZXIuZ2V0TG9jYXRpb25Gb3JQcm9wZXJ0eVBhdGgob01vZGVsLCBzUHJvcGVydHlQYXRoKSxcblx0XHRcdHNQcm9wZXJ0eSA9IHNQcm9wZXJ0eVBhdGgucmVwbGFjZShgJHtzUHJvcGVydHlMb2NhdGlvblBhdGh9L2AsIFwiXCIpO1xuXG5cdFx0aWYgKFxuXHRcdFx0b0RhdGFGaWVsZCAmJlxuXHRcdFx0KG9EYXRhRmllbGQuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQWN0aW9uXCIgfHxcblx0XHRcdFx0b0RhdGFGaWVsZC4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25cIilcblx0XHQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gQ29tbW9uVXRpbHMuaXNQcm9wZXJ0eUZpbHRlcmFibGUob01vZGVsLCBzUHJvcGVydHlMb2NhdGlvblBhdGgsIHNQcm9wZXJ0eSk7XG5cdH0sXG5cblx0Z2V0TG9jYXRpb25Gb3JQcm9wZXJ0eVBhdGg6IGZ1bmN0aW9uIChvTW9kZWw6IGFueSwgc1Byb3BlcnR5UGF0aDogYW55KSB7XG5cdFx0bGV0IGlMZW5ndGg7XG5cdFx0bGV0IHNDb2xsZWN0aW9uUGF0aCA9IHNQcm9wZXJ0eVBhdGguc2xpY2UoMCwgc1Byb3BlcnR5UGF0aC5sYXN0SW5kZXhPZihcIi9cIikpO1xuXHRcdGlmIChvTW9kZWwuZ2V0T2JqZWN0KGAke3NDb2xsZWN0aW9uUGF0aH0vJGtpbmRgKSA9PT0gXCJFbnRpdHlDb250YWluZXJcIikge1xuXHRcdFx0aUxlbmd0aCA9IHNDb2xsZWN0aW9uUGF0aC5sZW5ndGggKyAxO1xuXHRcdFx0c0NvbGxlY3Rpb25QYXRoID0gc1Byb3BlcnR5UGF0aC5zbGljZShpTGVuZ3RoLCBzUHJvcGVydHlQYXRoLmluZGV4T2YoXCIvXCIsIGlMZW5ndGgpKTtcblx0XHR9XG5cdFx0cmV0dXJuIHNDb2xsZWN0aW9uUGF0aDtcblx0fSxcblx0Z290b0FjdGlvblBhcmFtZXRlcjogZnVuY3Rpb24gKG9Db250ZXh0OiBhbnkpIHtcblx0XHRjb25zdCBzUGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKSxcblx0XHRcdHNQcm9wZXJ0eU5hbWUgPSBvQ29udGV4dC5nZXRPYmplY3QoYCR7c1BhdGh9LyROYW1lYCk7XG5cblx0XHRyZXR1cm4gQ29tbW9uVXRpbHMuZ2V0UGFyYW1ldGVyUGF0aChzUGF0aCwgc1Byb3BlcnR5TmFtZSk7XG5cdH0sXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBlbnRpdHkgc2V0IG5hbWUgZnJvbSB0aGUgZW50aXR5IHR5cGUgbmFtZS5cblx0ICpcblx0ICogQHBhcmFtIG9NZXRhTW9kZWwgT0RhdGEgdjQgbWV0YW1vZGVsIGluc3RhbmNlXG5cdCAqIEBwYXJhbSBzRW50aXR5VHlwZSBFbnRpdHlUeXBlIG9mIHRoZSBhY3Rpb21cblx0ICogQHJldHVybnMgVGhlIEVudGl0eVNldCBvZiB0aGUgYm91bmQgYWN0aW9uXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKi9cblx0Z2V0RW50aXR5U2V0TmFtZTogZnVuY3Rpb24gKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzRW50aXR5VHlwZTogc3RyaW5nKSB7XG5cdFx0Y29uc3Qgb0VudGl0eUNvbnRhaW5lciA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KFwiL1wiKTtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBvRW50aXR5Q29udGFpbmVyKSB7XG5cdFx0XHRpZiAodHlwZW9mIG9FbnRpdHlDb250YWluZXJba2V5XSA9PT0gXCJvYmplY3RcIiAmJiBvRW50aXR5Q29udGFpbmVyW2tleV0uJFR5cGUgPT09IHNFbnRpdHlUeXBlKSB7XG5cdFx0XHRcdHJldHVybiBrZXk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgbWV0YW1vZGVsIHBhdGggY29ycmVjdGx5IGZvciBib3VuZCBhY3Rpb25zIGlmIHVzZWQgd2l0aCBiUmV0dXJuT25seVBhdGggYXMgdHJ1ZSxcblx0ICogZWxzZSByZXR1cm5zIGFuIG9iamVjdCB3aGljaCBoYXMgMyBwcm9wZXJ0aWVzIHJlbGF0ZWQgdG8gdGhlIGFjdGlvbi4gVGhleSBhcmUgdGhlIGVudGl0eSBzZXQgbmFtZSxcblx0ICogdGhlICRQYXRoIHZhbHVlIG9mIHRoZSBPcGVyYXRpb25BdmFpbGFibGUgYW5ub3RhdGlvbiBhbmQgdGhlIGJpbmRpbmcgcGFyYW1ldGVyIG5hbWUuIElmXG5cdCAqIGJDaGVja1N0YXRpY1ZhbHVlIGlzIHRydWUsIHJldHVybnMgdGhlIHN0YXRpYyB2YWx1ZSBvZiBPcGVyYXRpb25BdmFpbGFibGUgYW5ub3RhdGlvbiwgaWYgcHJlc2VudC5cblx0ICogZS5nLiBmb3IgYm91bmQgYWN0aW9uIHNvbWVOYW1lU3BhY2UuU29tZUJvdW5kQWN0aW9uXG5cdCAqIG9mIGVudGl0eSBzZXQgU29tZUVudGl0eVNldCwgdGhlIHN0cmluZyBcIi9Tb21lRW50aXR5U2V0L3NvbWVOYW1lU3BhY2UuU29tZUJvdW5kQWN0aW9uXCIgaXMgcmV0dXJuZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQWN0aW9uIFRoZSBjb250ZXh0IG9iamVjdCBvZiB0aGUgYWN0aW9uXG5cdCAqIEBwYXJhbSBiUmV0dXJuT25seVBhdGggSWYgZmFsc2UsIGFkZGl0aW9uYWwgaW5mbyBpcyByZXR1cm5lZCBhbG9uZyB3aXRoIG1ldGFtb2RlbCBwYXRoIHRvIHRoZSBib3VuZCBhY3Rpb25cblx0ICogQHBhcmFtIHNBY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBib3VuZCBhY3Rpb24gb2YgdGhlIGZvcm0gc29tZU5hbWVTcGFjZS5Tb21lQm91bmRBY3Rpb25cblx0ICogQHBhcmFtIGJDaGVja1N0YXRpY1ZhbHVlIElmIHRydWUsIHRoZSBzdGF0aWMgdmFsdWUgb2YgT3BlcmF0aW9uQXZhaWxhYmxlIGlzIHJldHVybmVkLCBpZiBwcmVzZW50XG5cdCAqIEByZXR1cm5zIFRoZSBzdHJpbmcgb3Igb2JqZWN0IGFzIHNwZWNpZmllZCBieSBiUmV0dXJuT25seVBhdGhcblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqL1xuXHRnZXRBY3Rpb25QYXRoOiBmdW5jdGlvbiAob0FjdGlvbjogYW55LCBiUmV0dXJuT25seVBhdGg6IGJvb2xlYW4sIHNBY3Rpb25OYW1lPzogc3RyaW5nLCBiQ2hlY2tTdGF0aWNWYWx1ZT86IGJvb2xlYW4pIHtcblx0XHRsZXQgc0NvbnRleHRQYXRoID0gb0FjdGlvbi5nZXRQYXRoKCkuc3BsaXQoXCIvQFwiKVswXTtcblxuXHRcdHNBY3Rpb25OYW1lID0gIXNBY3Rpb25OYW1lID8gb0FjdGlvbi5nZXRPYmplY3Qob0FjdGlvbi5nZXRQYXRoKCkpIDogc0FjdGlvbk5hbWU7XG5cblx0XHRpZiAoc0FjdGlvbk5hbWUgJiYgc0FjdGlvbk5hbWUuaW5kZXhPZihcIihcIikgPiAtMSkge1xuXHRcdFx0Ly8gYWN0aW9uIGJvdW5kIHRvIGFub3RoZXIgZW50aXR5IHR5cGVcblx0XHRcdHNBY3Rpb25OYW1lID0gc0FjdGlvbk5hbWUuc3BsaXQoXCIoXCIpWzBdO1xuXHRcdH0gZWxzZSBpZiAob0FjdGlvbi5nZXRPYmplY3Qoc0NvbnRleHRQYXRoKSkge1xuXHRcdFx0Ly8gVE9ETzogdGhpcyBsb2dpYyBzb3VuZHMgd3JvbmcsIHRvIGJlIGNvcnJlY3RlZFxuXHRcdFx0Y29uc3Qgc0VudGl0eVR5cGVOYW1lID0gb0FjdGlvbi5nZXRPYmplY3Qoc0NvbnRleHRQYXRoKS4kVHlwZTtcblx0XHRcdGNvbnN0IHNFbnRpdHlOYW1lID0gdGhpcy5nZXRFbnRpdHlTZXROYW1lKG9BY3Rpb24uZ2V0TW9kZWwoKSwgc0VudGl0eVR5cGVOYW1lKTtcblx0XHRcdGlmIChzRW50aXR5TmFtZSkge1xuXHRcdFx0XHRzQ29udGV4dFBhdGggPSBgLyR7c0VudGl0eU5hbWV9YDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHNDb250ZXh0UGF0aDtcblx0XHR9XG5cblx0XHRpZiAoYkNoZWNrU3RhdGljVmFsdWUpIHtcblx0XHRcdHJldHVybiBvQWN0aW9uLmdldE9iamVjdChgJHtzQ29udGV4dFBhdGh9LyR7c0FjdGlvbk5hbWV9QE9yZy5PRGF0YS5Db3JlLlYxLk9wZXJhdGlvbkF2YWlsYWJsZWApO1xuXHRcdH1cblx0XHRpZiAoYlJldHVybk9ubHlQYXRoKSB7XG5cdFx0XHRyZXR1cm4gYCR7c0NvbnRleHRQYXRofS8ke3NBY3Rpb25OYW1lfWA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNDb250ZXh0UGF0aDogc0NvbnRleHRQYXRoLFxuXHRcdFx0XHRzUHJvcGVydHk6IG9BY3Rpb24uZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aH0vJHtzQWN0aW9uTmFtZX1AT3JnLk9EYXRhLkNvcmUuVjEuT3BlcmF0aW9uQXZhaWxhYmxlLyRQYXRoYCksXG5cdFx0XHRcdHNCaW5kaW5nUGFyYW1ldGVyOiBvQWN0aW9uLmdldE9iamVjdChgJHtzQ29udGV4dFBhdGh9LyR7c0FjdGlvbk5hbWV9L0AkdWk1Lm92ZXJsb2FkLzAvJFBhcmFtZXRlci8wLyROYW1lYClcblx0XHRcdH07XG5cdFx0fVxuXHR9LFxuXG5cdGdldE5hdmlnYXRpb25Db250ZXh0OiBmdW5jdGlvbiAob0NvbnRleHQ6IGFueSkge1xuXHRcdHJldHVybiBPRGF0YU1vZGVsQW5ub3RhdGlvbkhlbHBlci5nZXROYXZpZ2F0aW9uUGF0aChvQ29udGV4dC5nZXRQYXRoKCkpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBwYXRoIHdpdGhvdXQgdGhlIGVudGl0eSB0eXBlIChwb3RlbnRpYWxseSBmaXJzdCkgYW5kIHByb3BlcnR5IChsYXN0KSBwYXJ0IChvcHRpb25hbCkuXG5cdCAqIFRoZSByZXN1bHQgY2FuIGJlIGFuIGVtcHR5IHN0cmluZyBpZiBpdCBpcyBhIHNpbXBsZSBkaXJlY3QgcHJvcGVydHkuXG5cdCAqXG5cdCAqIElmIGFuZCBvbmx5IGlmIHRoZSBnaXZlbiBwcm9wZXJ0eSBwYXRoIHN0YXJ0cyB3aXRoIGEgc2xhc2ggKC8pLCBpdCBpcyBjb25zaWRlcmVkIHRoYXQgdGhlIGVudGl0eSB0eXBlXG5cdCAqIGlzIHBhcnQgb2YgdGhlIHBhdGggYW5kIHdpbGwgYmUgc3RyaXBwZWQgYXdheS5cblx0ICpcblx0ICogQHBhcmFtIHNQcm9wZXJ0eVBhdGhcblx0ICogQHBhcmFtIGJLZWVwUHJvcGVydHlcblx0ICogQHJldHVybnMgVGhlIG5hdmlnYXRpb24gcGF0aFxuXHQgKi9cblx0Z2V0TmF2aWdhdGlvblBhdGg6IGZ1bmN0aW9uIChzUHJvcGVydHlQYXRoOiBhbnksIGJLZWVwUHJvcGVydHk/OiBib29sZWFuKSB7XG5cdFx0Y29uc3QgYlN0YXJ0c1dpdGhFbnRpdHlUeXBlID0gc1Byb3BlcnR5UGF0aC5zdGFydHNXaXRoKFwiL1wiKTtcblx0XHRjb25zdCBhUGFydHMgPSBzUHJvcGVydHlQYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoZnVuY3Rpb24gKHBhcnQ6IGFueSkge1xuXHRcdFx0cmV0dXJuICEhcGFydDtcblx0XHR9KTtcblx0XHRpZiAoYlN0YXJ0c1dpdGhFbnRpdHlUeXBlKSB7XG5cdFx0XHRhUGFydHMuc2hpZnQoKTtcblx0XHR9XG5cdFx0aWYgKCFiS2VlcFByb3BlcnR5KSB7XG5cdFx0XHRhUGFydHMucG9wKCk7XG5cdFx0fVxuXHRcdHJldHVybiBhUGFydHMuam9pbihcIi9cIik7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGNvcnJlY3QgbWV0YW1vZGVsIHBhdGggZm9yIGJvdW5kIGFjdGlvbnMuXG5cdCAqXG5cdCAqIFNpbmNlIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpcnJlc3BlY3RpdmUgb2YgdGhlIGFjdGlvbiB0eXBlLCB0aGlzIHdpbGwgYmUgYXBwbGllZCB0byB1bmJvdW5kIGFjdGlvbnMuXG5cdCAqIEluIHN1Y2ggYSBjYXNlLCBpZiBhbiBpbmNvcnJlY3QgcGF0aCBpcyByZXR1cm5lZCwgaXQgaXMgaWdub3JlZCBkdXJpbmcgdGVtcGxhdGluZy5cblx0ICpcblx0ICogRXhhbXBsZTogZm9yIHRoZSBib3VuZCBhY3Rpb24gc29tZU5hbWVTcGFjZS5Tb21lQm91bmRBY3Rpb24gb2YgZW50aXR5IHNldCBTb21lRW50aXR5U2V0LFxuXHQgKiB0aGUgc3RyaW5nIFwiL1NvbWVFbnRpdHlTZXQvc29tZU5hbWVTcGFjZS5Tb21lQm91bmRBY3Rpb25cIiBpcyByZXR1cm5lZC5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBzdGF0aWNcblx0ICogQG5hbWUgc2FwLmZlLm1hY3Jvcy5Db21tb25IZWxwZXIuZ2V0QWN0aW9uQ29udGV4dFxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLm1hY3Jvcy5Db21tb25IZWxwZXJcblx0ICogQHBhcmFtIG9BY3Rpb24gQ29udGV4dCBvYmplY3QgZm9yIHRoZSBhY3Rpb25cblx0ICogQHJldHVybnMgQ29ycmVjdCBtZXRhbW9kZWwgcGF0aCBmb3IgYm91bmQgYW5kIGluY29ycmVjdCBwYXRoIGZvciB1bmJvdW5kIGFjdGlvbnNcblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqL1xuXHRnZXRBY3Rpb25Db250ZXh0OiBmdW5jdGlvbiAob0FjdGlvbjogb2JqZWN0KSB7XG5cdFx0cmV0dXJuIENvbW1vbkhlbHBlci5nZXRBY3Rpb25QYXRoKG9BY3Rpb24sIHRydWUpO1xuXHR9LFxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgbWV0YW1vZGVsIHBhdGggY29ycmVjdGx5IGZvciBvdmVybG9hZGVkIGJvdW5kIGFjdGlvbnMuIEZvciB1bmJvdW5kIGFjdGlvbnMsXG5cdCAqIHRoZSBpbmNvcnJlY3QgcGF0aCBpcyByZXR1cm5lZCwgYnV0IGlnbm9yZWQgZHVyaW5nIHRlbXBsYXRpbmcuXG5cdCAqIGUuZy4gZm9yIGJvdW5kIGFjdGlvbiBzb21lTmFtZVNwYWNlLlNvbWVCb3VuZEFjdGlvbiBvZiBlbnRpdHkgc2V0IFNvbWVFbnRpdHlTZXQsXG5cdCAqIHRoZSBzdHJpbmcgXCIvU29tZUVudGl0eVNldC9zb21lTmFtZVNwYWNlLlNvbWVCb3VuZEFjdGlvbi9AJHVpNS5vdmVybG9hZC8wXCIgaXMgcmV0dXJuZWQuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAc3RhdGljXG5cdCAqIEBuYW1lIHNhcC5mZS5tYWNyb3MuQ29tbW9uSGVscGVyLmdldFBhdGhUb0JvdW5kQWN0aW9uT3ZlcmxvYWRcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5tYWNyb3MuQ29tbW9uSGVscGVyXG5cdCAqIEBwYXJhbSBvQWN0aW9uIFRoZSBjb250ZXh0IG9iamVjdCBmb3IgdGhlIGFjdGlvblxuXHQgKiBAcmV0dXJucyBUaGUgY29ycmVjdCBtZXRhbW9kZWwgcGF0aCBmb3IgYm91bmQgYWN0aW9uIG92ZXJsb2FkIGFuZCBpbmNvcnJlY3QgcGF0aCBmb3IgdW5ib3VuZCBhY3Rpb25zXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKi9cblx0Z2V0UGF0aFRvQm91bmRBY3Rpb25PdmVybG9hZDogZnVuY3Rpb24gKG9BY3Rpb246IG9iamVjdCkge1xuXHRcdGNvbnN0IHNQYXRoID0gQ29tbW9uSGVscGVyLmdldEFjdGlvblBhdGgob0FjdGlvbiwgdHJ1ZSk7XG5cdFx0cmV0dXJuIGAke3NQYXRofS9AJHVpNS5vdmVybG9hZC8wYDtcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgc3RyaW5nIHdpdGggc2luZ2xlIHF1b3Rlcy5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUubWFjcm9zLkNvbW1vbkhlbHBlclxuXHQgKiBAcGFyYW0gc1ZhbHVlIFNvbWUgc3RyaW5nIHRoYXQgbmVlZHMgdG8gYmUgY29udmVydGVkIGludG8gc2luZ2xlIHF1b3Rlc1xuXHQgKiBAcGFyYW0gW2JFc2NhcGVdIFNob3VsZCB0aGUgc3RyaW5nIGJlIGVzY2FwZWQgYmVmb3JlaGFuZFxuXHQgKiBAcmV0dXJucyAtIFN0cmluZyB3aXRoIHNpbmdsZSBxdW90ZXNcblx0ICovXG5cdGFkZFNpbmdsZVF1b3RlczogZnVuY3Rpb24gKHNWYWx1ZTogc3RyaW5nLCBiRXNjYXBlPzogYm9vbGVhbikge1xuXHRcdGlmIChiRXNjYXBlICYmIHNWYWx1ZSkge1xuXHRcdFx0c1ZhbHVlID0gdGhpcy5lc2NhcGVTaW5nbGVRdW90ZXMoc1ZhbHVlKTtcblx0XHR9XG5cdFx0cmV0dXJuIGAnJHtzVmFsdWV9J2A7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHN0cmluZyB3aXRoIGVzY2FwZWQgc2luZ2xlIHF1b3Rlcy5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUubWFjcm9zLkNvbW1vbkhlbHBlclxuXHQgKiBAcGFyYW0gc1ZhbHVlIFNvbWUgc3RyaW5nIHRoYXQgbmVlZHMgZXNjYXBpbmcgb2Ygc2luZ2xlIHF1b3Rlc1xuXHQgKiBAcmV0dXJucyAtIFN0cmluZyB3aXRoIGVzY2FwZWQgc2luZ2xlIHF1b3Rlc1xuXHQgKi9cblx0ZXNjYXBlU2luZ2xlUXVvdGVzOiBmdW5jdGlvbiAoc1ZhbHVlOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gc1ZhbHVlLnJlcGxhY2UoL1snXS9nLCBcIlxcXFwnXCIpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBmdW5jdGlvbiBzdHJpbmdcblx0ICogVGhlIGZpcnN0IGFyZ3VtZW50IG9mIGdlbmVyYXRlRnVuY3Rpb24gaXMgbmFtZSBvZiB0aGUgZ2VuZXJhdGVkIGZ1bmN0aW9uIHN0cmluZy5cblx0ICogUmVtYWluaW5nIGFyZ3VtZW50cyBvZiBnZW5lcmF0ZUZ1bmN0aW9uIGFyZSBhcmd1bWVudHMgb2YgdGhlIG5ld2x5IGdlbmVyYXRlZCBmdW5jdGlvbiBzdHJpbmcuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLm1hY3Jvcy5Db21tb25IZWxwZXJcblx0ICogQHBhcmFtIHNGdW5jTmFtZSBTb21lIHN0cmluZyBmb3IgdGhlIGZ1bmN0aW9uIG5hbWVcblx0ICogQHBhcmFtIGFyZ3MgVGhlIHJlbWFpbmluZyBhcmd1bWVudHNcblx0ICogQHJldHVybnMgLSBGdW5jdGlvbiBzdHJpbmcgZGVwZW5kcyBvbiBhcmd1bWVudHMgcGFzc2VkXG5cdCAqL1xuXHRnZW5lcmF0ZUZ1bmN0aW9uOiBmdW5jdGlvbiAoc0Z1bmNOYW1lOiBzdHJpbmcsIC4uLmFyZ3M6IHN0cmluZ1tdKSB7XG5cdFx0bGV0IHNQYXJhbXMgPSBcIlwiO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuXHRcdFx0c1BhcmFtcyArPSBhcmdzW2ldO1xuXHRcdFx0aWYgKGkgPCBhcmdzLmxlbmd0aCAtIDEpIHtcblx0XHRcdFx0c1BhcmFtcyArPSBcIiwgXCI7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0bGV0IHNGdW5jdGlvbiA9IGAke3NGdW5jTmFtZX0oKWA7XG5cdFx0aWYgKHNQYXJhbXMpIHtcblx0XHRcdHNGdW5jdGlvbiA9IGAke3NGdW5jTmFtZX0oJHtzUGFyYW1zfSlgO1xuXHRcdH1cblx0XHRyZXR1cm4gc0Z1bmN0aW9uO1xuXHR9LFxuXHQvKlxuXHQgKiBSZXR1cm5zIHRoZSB2aXNpYmlsaXR5IGV4cHJlc3Npb24gZm9yIGRhdGFwb2ludCB0aXRsZS9saW5rXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge3N0cmluZ30gW3NQYXRoXSBhbm5vdGF0aW9uIHBhdGggb2YgZGF0YSBwb2ludCBvciBNaWNyb2NoYXJ0XG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW2JMaW5rXSB0cnVlIGlmIGxpbmsgdmlzaWJpbGl0eSBpcyBiZWluZyBkZXRlcm1pbmVkLCBmYWxzZSBpZiB0aXRsZSB2aXNpYmlsaXR5IGlzIGJlaW5nIGRldGVybWluZWRcblx0ICogQHBhcmFtIHtib29sZWFufSBbYkZpZWxkVmlzaWJpbGl0eV0gdHJ1ZSBpZiBmaWVsZCBpcyB2c2lpYmxlLCBmYWxzZSBvdGhlcndpc2Vcblx0ICogQHJldHVybnMgIHtzdHJpbmd9IHNWaXNpYmlsaXR5RXhwIFVzZWQgdG8gZ2V0IHRoZSAgdmlzaWJpbGl0eSBiaW5kaW5nIGZvciBEYXRhUG9pbnRzIHRpdGxlIGluIHRoZSBIZWFkZXIuXG5cdCAqXG5cdCAqL1xuXG5cdGdldEhlYWRlckRhdGFQb2ludExpbmtWaXNpYmlsaXR5OiBmdW5jdGlvbiAoc1BhdGg6IGFueSwgYkxpbms6IGFueSwgYkZpZWxkVmlzaWJpbGl0eTogYW55KSB7XG5cdFx0bGV0IHNWaXNpYmlsaXR5RXhwO1xuXHRcdGlmIChiRmllbGRWaXNpYmlsaXR5KSB7XG5cdFx0XHRzVmlzaWJpbGl0eUV4cCA9IGJMaW5rXG5cdFx0XHRcdD8gXCJ7PSAke2ludGVybmFsPmlzSGVhZGVyRFBMaW5rVmlzaWJsZS9cIiArIHNQYXRoICsgXCJ9ID09PSB0cnVlICYmIFwiICsgYkZpZWxkVmlzaWJpbGl0eSArIFwifVwiXG5cdFx0XHRcdDogXCJ7PSAke2ludGVybmFsPmlzSGVhZGVyRFBMaW5rVmlzaWJsZS9cIiArIHNQYXRoICsgXCJ9ICE9PSB0cnVlICYmIFwiICsgYkZpZWxkVmlzaWJpbGl0eSArIFwifVwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzVmlzaWJpbGl0eUV4cCA9IGJMaW5rXG5cdFx0XHRcdD8gXCJ7PSAke2ludGVybmFsPmlzSGVhZGVyRFBMaW5rVmlzaWJsZS9cIiArIHNQYXRoICsgXCJ9ID09PSB0cnVlfVwiXG5cdFx0XHRcdDogXCJ7PSAke2ludGVybmFsPmlzSGVhZGVyRFBMaW5rVmlzaWJsZS9cIiArIHNQYXRoICsgXCJ9ICE9PSB0cnVlfVwiO1xuXHRcdH1cblx0XHRyZXR1cm4gc1Zpc2liaWxpdHlFeHA7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIG9iamVjdCB0byBzdHJpbmcoZGlmZmVyZW50IGZyb20gSlNPTi5zdHJpbmdpZnkgb3IudG9TdHJpbmcpLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG1lbWJlcm9mIHNhcC5mZS5tYWNyb3MuQ29tbW9uSGVscGVyXG5cdCAqIEBwYXJhbSBvUGFyYW1zIFNvbWUgb2JqZWN0XG5cdCAqIEByZXR1cm5zIC0gT2JqZWN0IHN0cmluZ1xuXHQgKi9cblx0b2JqZWN0VG9TdHJpbmc6IGZ1bmN0aW9uIChvUGFyYW1zOiBhbnkpIHtcblx0XHRsZXQgaU51bWJlck9mS2V5cyA9IE9iamVjdC5rZXlzKG9QYXJhbXMpLmxlbmd0aCxcblx0XHRcdHNQYXJhbXMgPSBcIlwiO1xuXG5cdFx0Zm9yIChjb25zdCBzS2V5IGluIG9QYXJhbXMpIHtcblx0XHRcdGxldCBzVmFsdWUgPSBvUGFyYW1zW3NLZXldO1xuXHRcdFx0aWYgKHNWYWx1ZSAmJiB0eXBlb2Ygc1ZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdHNWYWx1ZSA9IHRoaXMub2JqZWN0VG9TdHJpbmcoc1ZhbHVlKTtcblx0XHRcdH1cblx0XHRcdHNQYXJhbXMgKz0gYCR7c0tleX06ICR7c1ZhbHVlfWA7XG5cdFx0XHRpZiAoaU51bWJlck9mS2V5cyA+IDEpIHtcblx0XHRcdFx0LS1pTnVtYmVyT2ZLZXlzO1xuXHRcdFx0XHRzUGFyYW1zICs9IFwiLCBcIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gYHsgJHtzUGFyYW1zfX1gO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIGVzY2FwZSBjaGFyYWN0ZXJzIChcXCkgZnJvbSBhbiBleHByZXNzaW9uLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG1lbWJlcm9mIHNhcC5mZS5tYWNyb3MuQ29tbW9uSGVscGVyXG5cdCAqIEBwYXJhbSBzRXhwcmVzc2lvbiBBbiBleHByZXNzaW9uIHdpdGggZXNjYXBlIGNoYXJhY3RlcnNcblx0ICogQHJldHVybnMgRXhwcmVzc2lvbiBzdHJpbmcgd2l0aG91dCBlc2NhcGUgY2hhcmFjdGVycyBvciB1bmRlZmluZWRcblx0ICovXG5cdHJlbW92ZUVzY2FwZUNoYXJhY3RlcnM6IGZ1bmN0aW9uIChzRXhwcmVzc2lvbjogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHNFeHByZXNzaW9uID8gc0V4cHJlc3Npb24ucmVwbGFjZSgvXFxcXD9cXFxcKFt7fV0pL2csIFwiJDFcIikgOiB1bmRlZmluZWQ7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ha2VzIHVwZGF0ZXMgdG8gYSBzdHJpbmdpZmllZCBvYmplY3Qgc28gdGhhdCBpdCB3b3JrcyBwcm9wZXJseSBpbiBhIHRlbXBsYXRlIGJ5IGFkZGluZyB1aTVPYmplY3Q6dHJ1ZS5cblx0ICpcblx0ICogQHBhcmFtIHNTdHJpbmdpZmllZFxuXHQgKiBAcmV0dXJucyBUaGUgdXBkYXRlZCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdFxuXHQgKi9cblx0c3RyaW5naWZ5T2JqZWN0OiBmdW5jdGlvbiAoc1N0cmluZ2lmaWVkOiBzdHJpbmcpIHtcblx0XHRpZiAoIXNTdHJpbmdpZmllZCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3Qgb09iamVjdCA9IEpTT04ucGFyc2Uoc1N0cmluZ2lmaWVkKTtcblx0XHRcdGlmICh0eXBlb2Ygb09iamVjdCA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShvT2JqZWN0KSkge1xuXHRcdFx0XHRjb25zdCBvVUk1T2JqZWN0ID0ge1xuXHRcdFx0XHRcdHVpNW9iamVjdDogdHJ1ZVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRPYmplY3QuYXNzaWduKG9VSTVPYmplY3QsIG9PYmplY3QpO1xuXHRcdFx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkob1VJNU9iamVjdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBzVHlwZSA9IEFycmF5LmlzQXJyYXkob09iamVjdCkgPyBcIkFycmF5XCIgOiB0eXBlb2Ygb09iamVjdDtcblx0XHRcdFx0TG9nLmVycm9yKGBVbmV4cGVjdGVkIG9iamVjdCB0eXBlIGluIHN0cmluZ2lmeU9iamVjdCAoJHtzVHlwZX0pIC0gb25seSB3b3JrcyB3aXRoIG9iamVjdGApO1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJzdHJpbmdpZnlPYmplY3Qgb25seSB3b3JrcyB3aXRoIG9iamVjdHMhXCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogQ3JlYXRlIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBkYXRhLCB0YWtpbmcgY2FyZSB0aGF0IGl0IGlzIG5vdCB0cmVhdGVkIGFzIGEgYmluZGluZyBleHByZXNzaW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0gdkRhdGEgVGhlIGRhdGEgdG8gc3RyaW5naWZ5XG5cdCAqIEByZXR1cm5zIFRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGEuXG5cdCAqL1xuXHRzdHJpbmdpZnlDdXN0b21EYXRhOiBmdW5jdGlvbiAodkRhdGE6IG9iamVjdCkge1xuXHRcdGNvbnN0IG9PYmplY3Q6IGFueSA9IHtcblx0XHRcdHVpNW9iamVjdDogdHJ1ZVxuXHRcdH07XG5cdFx0b09iamVjdFtcImN1c3RvbURhdGFcIl0gPSB2RGF0YSBpbnN0YW5jZW9mIENvbnRleHQgPyB2RGF0YS5nZXRPYmplY3QoKSA6IHZEYXRhO1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShvT2JqZWN0KTtcblx0fSxcblxuXHQvKipcblx0ICogUGFyc2VzIHRoZSBnaXZlbiBkYXRhLCBwb3RlbnRpYWxseSB1bndyYXBzIHRoZSBkYXRhLlxuXHQgKlxuXHQgKiBAcGFyYW0gdkRhdGEgVGhlIGRhdGEgdG8gcGFyc2Vcblx0ICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiB0aGUgZGF0YSBwYXJzaW5nXG5cdCAqL1xuXHRwYXJzZUN1c3RvbURhdGE6IGZ1bmN0aW9uICh2RGF0YTogYW55KSB7XG5cdFx0dkRhdGEgPSB0eXBlb2YgdkRhdGEgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKHZEYXRhKSA6IHZEYXRhO1xuXHRcdGlmICh2RGF0YSAmJiB2RGF0YS5oYXNPd25Qcm9wZXJ0eShcImN1c3RvbURhdGFcIikpIHtcblx0XHRcdHJldHVybiB2RGF0YVtcImN1c3RvbURhdGFcIl07XG5cdFx0fVxuXHRcdHJldHVybiB2RGF0YTtcblx0fSxcblx0LyoqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfZ2V0RHJhZnRBZG1pbmlzdHJhdGl2ZURhdGFUeXBlXG5cdCAqIEBwYXJhbSBvTWV0YU1vZGVsXG5cdCAqIEBwYXJhbSBzRW50aXR5VHlwZSBUaGUgRW50aXR5VHlwZSBuYW1lXG5cdCAqIEByZXR1cm5zIFRoZSBEcmFmdEFkbWluaXN0cmF0aXZlRGF0YVxuXHQgKi9cblx0X2dldERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhVHlwZTogZnVuY3Rpb24gKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzRW50aXR5VHlwZTogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIG9NZXRhTW9kZWwucmVxdWVzdE9iamVjdChgLyR7c0VudGl0eVR5cGV9L0RyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL2ApO1xuXHR9LFxuXHQvKipcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIGdldFBvcG92ZXJUZXh0XG5cdCAqIEBwYXJhbSBpQ29udGV4dFxuXHQgKiBAcGFyYW0gc0VudGl0eVR5cGUgVGhlIEVudGl0eVR5cGUgbmFtZVxuXHQgKiBAcmV0dXJucyBUaGUgQmluZGluZyBFeHByZXNzaW9uIGZvciB0aGUgZHJhZnQgcG9wb3ZlclxuXHQgKi9cblx0Z2V0UG9wb3ZlclRleHQ6IGZ1bmN0aW9uIChpQ29udGV4dDogYW55LCBzRW50aXR5VHlwZTogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIENvbW1vbkhlbHBlci5fZ2V0RHJhZnRBZG1pbmlzdHJhdGl2ZURhdGFUeXBlKGlDb250ZXh0LmdldE1vZGVsKCksIHNFbnRpdHlUeXBlKS50aGVuKGZ1bmN0aW9uIChvREFERW50aXR5VHlwZSkge1xuXHRcdFx0bGV0IHNCaW5kaW5nID1cblx0XHRcdFx0XCJ7cGFydHM6IFt7cGF0aDogJ0hhc0RyYWZ0RW50aXR5JywgdGFyZ2V0VHlwZTogJ2FueSd9LCBcIiArXG5cdFx0XHRcdC8vXCJ7cGF0aDogJ0RyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0xhc3RDaGFuZ2VEYXRlVGltZSd9LCBcIiArXG5cdFx0XHRcdFwie3BhdGg6ICdEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9JblByb2Nlc3NCeVVzZXInfSwgXCIgK1xuXHRcdFx0XHRcIntwYXRoOiAnRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvTGFzdENoYW5nZWRCeVVzZXInfSBcIjtcblx0XHRcdGlmIChvREFERW50aXR5VHlwZS5JblByb2Nlc3NCeVVzZXJEZXNjcmlwdGlvbikge1xuXHRcdFx0XHRzQmluZGluZyArPSBcIiAse3BhdGg6ICdEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9JblByb2Nlc3NCeVVzZXJEZXNjcmlwdGlvbid9XCI7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChvREFERW50aXR5VHlwZS5MYXN0Q2hhbmdlZEJ5VXNlckRlc2NyaXB0aW9uKSB7XG5cdFx0XHRcdHNCaW5kaW5nICs9IFwiLCB7cGF0aDogJ0RyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0xhc3RDaGFuZ2VkQnlVc2VyRGVzY3JpcHRpb24nfVwiO1xuXHRcdFx0fVxuXHRcdFx0c0JpbmRpbmcgKz0gXCJdLCBmb3JtYXR0ZXI6ICdzYXAuZmUubWFjcm9zLmZpZWxkLkZpZWxkUnVudGltZS5mb3JtYXREcmFmdE93bmVyVGV4dEluUG9wb3Zlcid9XCI7XG5cdFx0XHRyZXR1cm4gc0JpbmRpbmc7XG5cdFx0fSk7XG5cdH0sXG5cdGdldENvbnRleHRQYXRoOiBmdW5jdGlvbiAob1ZhbHVlOiBhbnksIG9JbnRlcmZhY2U6IGFueSkge1xuXHRcdGNvbnN0IHNQYXRoID0gb0ludGVyZmFjZSAmJiBvSW50ZXJmYWNlLmNvbnRleHQgJiYgb0ludGVyZmFjZS5jb250ZXh0LmdldFBhdGgoKTtcblx0XHRyZXR1cm4gc1BhdGhbc1BhdGgubGVuZ3RoIC0gMV0gPT09IFwiL1wiID8gc1BhdGguc2xpY2UoMCwgLTEpIDogc1BhdGg7XG5cdH0sXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgc3RyaW5naWZpZWQgSlNPTiBvYmplY3QgY29udGFpbmluZyAgUHJlc2VudGF0aW9uIFZhcmlhbnQgc29ydCBjb25kaXRpb25zLlxuXHQgKlxuXHQgKiBAcGFyYW0gb0NvbnRleHRcblx0ICogQHBhcmFtIG9QcmVzZW50YXRpb25WYXJpYW50IFByZXNlbnRhdGlvbiB2YXJpYW50IEFubm90YXRpb25cblx0ICogQHBhcmFtIHNQcmVzZW50YXRpb25WYXJpYW50UGF0aFxuXHQgKiBAcmV0dXJucyBTdHJpbmdpZmllZCBKU09OIG9iamVjdFxuXHQgKi9cblx0Z2V0U29ydENvbmRpdGlvbnM6IGZ1bmN0aW9uIChvQ29udGV4dDogYW55LCBvUHJlc2VudGF0aW9uVmFyaWFudDogYW55LCBzUHJlc2VudGF0aW9uVmFyaWFudFBhdGg6IHN0cmluZykge1xuXHRcdGlmIChcblx0XHRcdG9QcmVzZW50YXRpb25WYXJpYW50ICYmXG5cdFx0XHRDb21tb25IZWxwZXIuX2lzUHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24oc1ByZXNlbnRhdGlvblZhcmlhbnRQYXRoKSAmJlxuXHRcdFx0b1ByZXNlbnRhdGlvblZhcmlhbnQuU29ydE9yZGVyXG5cdFx0KSB7XG5cdFx0XHRjb25zdCBhU29ydENvbmRpdGlvbnM6IGFueSA9IHtcblx0XHRcdFx0c29ydGVyczogW11cblx0XHRcdH07XG5cblx0XHRcdGNvbnN0IHNFbnRpdHlQYXRoID0gb0NvbnRleHQuZ2V0UGF0aCgwKS5zcGxpdChcIkBcIilbMF07XG5cdFx0XHRvUHJlc2VudGF0aW9uVmFyaWFudC5Tb3J0T3JkZXIuZm9yRWFjaChmdW5jdGlvbiAob0NvbmRpdGlvbjogYW55ID0ge30pIHtcblx0XHRcdFx0bGV0IG9Tb3J0UHJvcGVydHk6IGFueSA9IHt9O1xuXHRcdFx0XHRjb25zdCBvU29ydGVyOiBhbnkgPSB7fTtcblx0XHRcdFx0aWYgKG9Db25kaXRpb24uRHluYW1pY1Byb3BlcnR5KSB7XG5cdFx0XHRcdFx0b1NvcnRQcm9wZXJ0eSA9IG9Db250ZXh0LmdldE1vZGVsKDApLmdldE9iamVjdChzRW50aXR5UGF0aCArIG9Db25kaXRpb24uRHluYW1pY1Byb3BlcnR5LiRBbm5vdGF0aW9uUGF0aCk/Lk5hbWU7XG5cdFx0XHRcdH0gZWxzZSBpZiAob0NvbmRpdGlvbi5Qcm9wZXJ0eSkge1xuXHRcdFx0XHRcdG9Tb3J0UHJvcGVydHkgPSBvQ29uZGl0aW9uLlByb3BlcnR5LiRQcm9wZXJ0eVBhdGg7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG9Tb3J0UHJvcGVydHkpIHtcblx0XHRcdFx0XHRvU29ydGVyLm5hbWUgPSBvU29ydFByb3BlcnR5O1xuXHRcdFx0XHRcdG9Tb3J0ZXIuZGVzY2VuZGluZyA9ICEhb0NvbmRpdGlvbi5EZXNjZW5kaW5nO1xuXHRcdFx0XHRcdGFTb3J0Q29uZGl0aW9ucy5zb3J0ZXJzLnB1c2gob1NvcnRlcik7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIGRlZmluZSB0aGUgcmlnaHQgcGF0aCB0byB0aGUgc29ydCBwcm9wZXJ0eVwiKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYVNvcnRDb25kaXRpb25zKTtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fSxcblx0X2lzUHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb246IGZ1bmN0aW9uIChzQW5ub3RhdGlvblBhdGg6IHN0cmluZykge1xuXHRcdHJldHVybiAoXG5cdFx0XHRzQW5ub3RhdGlvblBhdGguaW5kZXhPZihcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5QcmVzZW50YXRpb25WYXJpYW50XCIpID4gLTEgfHxcblx0XHRcdHNBbm5vdGF0aW9uUGF0aC5pbmRleE9mKFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRcIikgPiAtMVxuXHRcdCk7XG5cdH0sXG5cdGNyZWF0ZVByZXNlbnRhdGlvblBhdGhDb250ZXh0OiBmdW5jdGlvbiAob1ByZXNlbnRhdGlvbkNvbnRleHQ6IGFueSkge1xuXHRcdGNvbnN0IGFQYXRocyA9IG9QcmVzZW50YXRpb25Db250ZXh0LnNQYXRoLnNwbGl0KFwiQFwiKSB8fCBbXTtcblx0XHRjb25zdCBvTW9kZWwgPSBvUHJlc2VudGF0aW9uQ29udGV4dC5nZXRNb2RlbCgpO1xuXHRcdGlmIChhUGF0aHMubGVuZ3RoICYmIGFQYXRoc1thUGF0aHMubGVuZ3RoIC0gMV0uaW5kZXhPZihcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRcIikgPiAtMSkge1xuXHRcdFx0Y29uc3Qgc1BhdGggPSBvUHJlc2VudGF0aW9uQ29udGV4dC5zUGF0aC5zcGxpdChcIi9QcmVzZW50YXRpb25WYXJpYW50XCIpWzBdO1xuXHRcdFx0cmV0dXJuIG9Nb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHtzUGF0aH1Ac2FwdWkubmFtZWApO1xuXHRcdH1cblx0XHRyZXR1cm4gb01vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAke29QcmVzZW50YXRpb25Db250ZXh0LnNQYXRofUBzYXB1aS5uYW1lYCk7XG5cdH0sXG5cdGdldFByZXNzSGFuZGxlckZvckRhdGFGaWVsZEZvcklCTjogZnVuY3Rpb24gKG9EYXRhRmllbGQ6IGFueSwgc0NvbnRleHQ6IHN0cmluZywgYk5hdmlnYXRlV2l0aENvbmZpcm1hdGlvbkRpYWxvZzogYm9vbGVhbikge1xuXHRcdGNvbnN0IG1OYXZpZ2F0aW9uUGFyYW1ldGVyczogYW55ID0ge1xuXHRcdFx0bmF2aWdhdGlvbkNvbnRleHRzOiBzQ29udGV4dCA/IHNDb250ZXh0IDogXCIkeyRzb3VyY2U+L30uZ2V0QmluZGluZ0NvbnRleHQoKVwiXG5cdFx0fTtcblx0XHRpZiAob0RhdGFGaWVsZC5SZXF1aXJlc0NvbnRleHQgJiYgIW9EYXRhRmllbGQuSW5saW5lICYmIGJOYXZpZ2F0ZVdpdGhDb25maXJtYXRpb25EaWFsb2cpIHtcblx0XHRcdG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5hcHBsaWNhYmxlQ29udGV4dHMgPVxuXHRcdFx0XHRcIiR7aW50ZXJuYWw+aWJuL1wiICsgb0RhdGFGaWVsZC5TZW1hbnRpY09iamVjdCArIFwiLVwiICsgb0RhdGFGaWVsZC5BY3Rpb24gKyBcIi9hQXBwbGljYWJsZS99XCI7XG5cdFx0XHRtTmF2aWdhdGlvblBhcmFtZXRlcnMubm90QXBwbGljYWJsZUNvbnRleHRzID1cblx0XHRcdFx0XCIke2ludGVybmFsPmlibi9cIiArIG9EYXRhRmllbGQuU2VtYW50aWNPYmplY3QgKyBcIi1cIiArIG9EYXRhRmllbGQuQWN0aW9uICsgXCIvYU5vdEFwcGxpY2FibGUvfVwiO1xuXHRcdFx0bU5hdmlnYXRpb25QYXJhbWV0ZXJzLmxhYmVsID0gdGhpcy5hZGRTaW5nbGVRdW90ZXMob0RhdGFGaWVsZC5MYWJlbCwgdHJ1ZSk7XG5cdFx0fVxuXHRcdGlmIChvRGF0YUZpZWxkLk1hcHBpbmcpIHtcblx0XHRcdG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5zZW1hbnRpY09iamVjdE1hcHBpbmcgPSB0aGlzLmFkZFNpbmdsZVF1b3RlcyhKU09OLnN0cmluZ2lmeShvRGF0YUZpZWxkLk1hcHBpbmcpKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZ2VuZXJhdGVGdW5jdGlvbihcblx0XHRcdGJOYXZpZ2F0ZVdpdGhDb25maXJtYXRpb25EaWFsb2cgPyBcIi5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlV2l0aENvbmZpcm1hdGlvbkRpYWxvZ1wiIDogXCIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZVwiLFxuXHRcdFx0dGhpcy5hZGRTaW5nbGVRdW90ZXMob0RhdGFGaWVsZC5TZW1hbnRpY09iamVjdCksXG5cdFx0XHR0aGlzLmFkZFNpbmdsZVF1b3RlcyhvRGF0YUZpZWxkLkFjdGlvbiksXG5cdFx0XHR0aGlzLm9iamVjdFRvU3RyaW5nKG1OYXZpZ2F0aW9uUGFyYW1ldGVycylcblx0XHQpO1xuXHR9LFxuXHRnZXRFbnRpdHlTZXQ6IGZ1bmN0aW9uIChvQ29udGV4dDogYW55KSB7XG5cdFx0Y29uc3Qgc1BhdGggPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0cmV0dXJuIE1vZGVsSGVscGVyLmdldEVudGl0eVNldFBhdGgoc1BhdGgpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSB2aXNpYmlsaXR5IG9mIGZvcm0gbWVudSBhY3Rpb25zIGJvdGggaW4gcGF0aCBiYXNlZCBhbmQgc3RhdGljIHZhbHVlIHNjZW5hcmlvcy5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUubWFjcm9zLkNvbW1vbkhlbHBlclxuXHQgKiBAcGFyYW0gc1Zpc2libGVWYWx1ZSBFaXRoZXIgc3RhdGljIGJvb2xlYW4gdmFsdWVzIG9yIEFycmF5IG9mIHBhdGggZXhwcmVzc2lvbnMgZm9yIHZpc2liaWxpdHkgb2YgbWVudSBidXR0b24uXG5cdCAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZGV0ZXJtaW5pbmcgdGhlIHZpc2liaWxpdHkgb2YgbWVudSBhY3Rpb25zLlxuXHQgKi9cblx0aGFuZGxlVmlzaWJpbGl0eU9mTWVudUFjdGlvbnM6IGZ1bmN0aW9uIChzVmlzaWJsZVZhbHVlOiBhbnkpIHtcblx0XHRjb25zdCBjb21iaW5lZENvbmRpdGlvbnMgPSBbXTtcblx0XHRpZiAoQXJyYXkuaXNBcnJheShzVmlzaWJsZVZhbHVlKSkge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzVmlzaWJsZVZhbHVlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChzVmlzaWJsZVZhbHVlW2ldLmluZGV4T2YoXCJ7XCIpID4gLTEgJiYgc1Zpc2libGVWYWx1ZVtpXS5pbmRleE9mKFwiez1cIikgPT09IC0xKSB7XG5cdFx0XHRcdFx0c1Zpc2libGVWYWx1ZVtpXSA9IFwiez1cIiArIHNWaXNpYmxlVmFsdWVbaV0gKyBcIn1cIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoc1Zpc2libGVWYWx1ZVtpXS5zcGxpdChcIns9XCIpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRzVmlzaWJsZVZhbHVlW2ldID0gc1Zpc2libGVWYWx1ZVtpXS5zcGxpdChcIns9XCIpWzFdLnNsaWNlKDAsIC0xKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb21iaW5lZENvbmRpdGlvbnMucHVzaChgKCR7c1Zpc2libGVWYWx1ZVtpXX0pYCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBjb21iaW5lZENvbmRpdGlvbnMubGVuZ3RoID4gMCA/IGB7PSAke2NvbWJpbmVkQ29uZGl0aW9ucy5qb2luKFwiIHx8IFwiKX19YCA6IHNWaXNpYmxlVmFsdWU7XG5cdH0sXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZG8gdGhlIGNhbGN1bGF0aW9uIG9mIGNyaXRpY2FsaXR5IGluIGNhc2UgQ3JpdGljYWxpdHlDYWxjdWxhdGlvbiBwcmVzZW50IGluIHRoZSBhbm5vdGF0aW9uXG5cdCAqXG5cdCAqIFRoZSBjYWxjdWxhdGlvbiBpcyBkb25lIGJ5IGNvbXBhcmluZyBhIHZhbHVlIHRvIHRoZSB0aHJlc2hvbGQgdmFsdWVzIHJlbGV2YW50IGZvciB0aGUgc3BlY2lmaWVkIGltcHJvdmVtZW50IGRpcmVjdGlvbi5cblx0ICogRm9yIGltcHJvdmVtZW50IGRpcmVjdGlvbiBUYXJnZXQsIHRoZSBjcml0aWNhbGl0eSBpcyBjYWxjdWxhdGVkIHVzaW5nIGJvdGggbG93IGFuZCBoaWdoIHRocmVzaG9sZCB2YWx1ZXMuIEl0IHdpbGwgYmVcblx0ICpcblx0ICogLSBQb3NpdGl2ZSBpZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIEFjY2VwdGFuY2VSYW5nZUxvd1ZhbHVlIGFuZCBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIEFjY2VwdGFuY2VSYW5nZUhpZ2hWYWx1ZVxuXHQgKiAtIE5ldXRyYWwgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBUb2xlcmFuY2VSYW5nZUxvd1ZhbHVlIGFuZCBsb3dlciB0aGFuIEFjY2VwdGFuY2VSYW5nZUxvd1ZhbHVlIE9SIGdyZWF0ZXIgdGhhbiBBY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWUgYW5kIGxvd2VyIHRoYW4gb3IgZXF1YWwgdG8gVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWVcblx0ICogLSBDcml0aWNhbCBpZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIERldmlhdGlvblJhbmdlTG93VmFsdWUgYW5kIGxvd2VyIHRoYW4gVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSBPUiBncmVhdGVyIHRoYW4gVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWUgYW5kIGxvd2VyIHRoYW4gb3IgZXF1YWwgdG8gRGV2aWF0aW9uUmFuZ2VIaWdoVmFsdWVcblx0ICogLSBOZWdhdGl2ZSBpZiB0aGUgdmFsdWUgaXMgbG93ZXIgdGhhbiBEZXZpYXRpb25SYW5nZUxvd1ZhbHVlIG9yIGdyZWF0ZXIgdGhhbiBEZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZVxuXHQgKlxuXHQgKiBGb3IgaW1wcm92ZW1lbnQgZGlyZWN0aW9uIE1pbmltaXplLCB0aGUgY3JpdGljYWxpdHkgaXMgY2FsY3VsYXRlZCB1c2luZyB0aGUgaGlnaCB0aHJlc2hvbGQgdmFsdWVzLiBJdCBpc1xuXHQgKiAtIFBvc2l0aXZlIGlmIHRoZSB2YWx1ZSBpcyBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIEFjY2VwdGFuY2VSYW5nZUhpZ2hWYWx1ZVxuXHQgKiAtIE5ldXRyYWwgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBBY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWUgYW5kIGxvd2VyIHRoYW4gb3IgZXF1YWwgdG8gVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWVcblx0ICogLSBDcml0aWNhbCBpZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIFRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlIGFuZCBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIERldmlhdGlvblJhbmdlSGlnaFZhbHVlXG5cdCAqIC0gTmVnYXRpdmUgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBEZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZVxuXHQgKlxuXHQgKiBGb3IgaW1wcm92ZW1lbnQgZGlyZWN0aW9uIE1heGltaXplLCB0aGUgY3JpdGljYWxpdHkgaXMgY2FsY3VsYXRlZCB1c2luZyB0aGUgbG93IHRocmVzaG9sZCB2YWx1ZXMuIEl0IGlzXG5cdCAqXG5cdCAqIC0gUG9zaXRpdmUgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBBY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZVxuXHQgKiAtIE5ldXRyYWwgaWYgdGhlIHZhbHVlIGlzIGxlc3MgdGhhbiBBY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZSBhbmQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIFRvbGVyYW5jZVJhbmdlTG93VmFsdWVcblx0ICogLSBDcml0aWNhbCBpZiB0aGUgdmFsdWUgaXMgbG93ZXIgdGhhbiBUb2xlcmFuY2VSYW5nZUxvd1ZhbHVlIGFuZCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gRGV2aWF0aW9uUmFuZ2VMb3dWYWx1ZVxuXHQgKiAtIE5lZ2F0aXZlIGlmIHRoZSB2YWx1ZSBpcyBsb3dlciB0aGFuIERldmlhdGlvblJhbmdlTG93VmFsdWVcblx0ICpcblx0ICogVGhyZXNob2xkcyBhcmUgb3B0aW9uYWwuIEZvciB1bmFzc2lnbmVkIHZhbHVlcywgZGVmYXVsdHMgYXJlIGRldGVybWluZWQgaW4gdGhpcyBvcmRlcjpcblx0ICpcblx0ICogLSBGb3IgRGV2aWF0aW9uUmFuZ2UsIGFuIG9taXR0ZWQgTG93VmFsdWUgdHJhbnNsYXRlcyBpbnRvIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBudW1iZXIgKC1JTkYpLCBhbiBvbWl0dGVkIEhpZ2hWYWx1ZSB0cmFuc2xhdGVzIGludG8gdGhlIGxhcmdlc3QgcG9zc2libGUgbnVtYmVyICgrSU5GKVxuXHQgKiAtIEZvciBUb2xlcmFuY2VSYW5nZSwgYW4gb21pdHRlZCBMb3dWYWx1ZSB3aWxsIGJlIGluaXRpYWxpemVkIHdpdGggRGV2aWF0aW9uUmFuZ2VMb3dWYWx1ZSwgYW4gb21pdHRlZCBIaWdoVmFsdWUgd2lsbCBiZSBpbml0aWFsaXplZCB3aXRoIERldmlhdGlvblJhbmdlSGlnaFZhbHVlXG5cdCAqIC0gRm9yIEFjY2VwdGFuY2VSYW5nZSwgYW4gb21pdHRlZCBMb3dWYWx1ZSB3aWxsIGJlIGluaXRpYWxpemVkIHdpdGggVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSwgYW4gb21pdHRlZCBIaWdoVmFsdWUgd2lsbCBiZSBpbml0aWFsaXplZCB3aXRoIFRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlLlxuXHQgKlxuXHQgKiBAcGFyYW0gc0ltcHJvdmVtZW50RGlyZWN0aW9uIEltcHJvdmVtZW50RGlyZWN0aW9uIHRvIGJlIHVzZWQgZm9yIGNyZWF0aW5nIHRoZSBjcml0aWNhbGl0eSBiaW5kaW5nXG5cdCAqIEBwYXJhbSBzVmFsdWUgVmFsdWUgZnJvbSBEYXRhcG9pbnQgdG8gYmUgbWVhc3VyZWRcblx0ICogQHBhcmFtIHNEZXZpYXRpb25Mb3cgRXhwcmVzc2lvbkJpbmRpbmcgZm9yIExvd2VyIERldmlhdGlvbiBsZXZlbFxuXHQgKiBAcGFyYW0gc1RvbGVyYW5jZUxvdyBFeHByZXNzaW9uQmluZGluZyBmb3IgTG93ZXIgVG9sZXJhbmNlIGxldmVsXG5cdCAqIEBwYXJhbSBzQWNjZXB0YW5jZUxvdyBFeHByZXNzaW9uQmluZGluZyBmb3IgTG93ZXIgQWNjZXB0YW5jZSBsZXZlbFxuXHQgKiBAcGFyYW0gc0FjY2VwdGFuY2VIaWdoIEV4cHJlc3Npb25CaW5kaW5nIGZvciBIaWdoZXIgQWNjZXB0YW5jZSBsZXZlbFxuXHQgKiBAcGFyYW0gc1RvbGVyYW5jZUhpZ2ggRXhwcmVzc2lvbkJpbmRpbmcgZm9yIEhpZ2hlciBUb2xlcmFuY2UgbGV2ZWxcblx0ICogQHBhcmFtIHNEZXZpYXRpb25IaWdoIEV4cHJlc3Npb25CaW5kaW5nIGZvciBIaWdoZXIgRGV2aWF0aW9uIGxldmVsXG5cdCAqIEByZXR1cm5zIFJldHVybnMgY3JpdGljYWxpdHkgY2FsY3VsYXRpb24gYXMgZXhwcmVzc2lvbiBiaW5kaW5nXG5cdCAqL1xuXHRnZXRDcml0aWNhbGl0eUNhbGN1bGF0aW9uQmluZGluZzogZnVuY3Rpb24gKFxuXHRcdHNJbXByb3ZlbWVudERpcmVjdGlvbjogc3RyaW5nLFxuXHRcdHNWYWx1ZTogc3RyaW5nLFxuXHRcdHNEZXZpYXRpb25Mb3c6IHN0cmluZyB8IG51bWJlcixcblx0XHRzVG9sZXJhbmNlTG93OiBzdHJpbmcgfCBudW1iZXIsXG5cdFx0c0FjY2VwdGFuY2VMb3c6IHN0cmluZyB8IG51bWJlcixcblx0XHRzQWNjZXB0YW5jZUhpZ2g6IHN0cmluZyB8IG51bWJlcixcblx0XHRzVG9sZXJhbmNlSGlnaDogc3RyaW5nIHwgbnVtYmVyLFxuXHRcdHNEZXZpYXRpb25IaWdoOiBzdHJpbmcgfCBudW1iZXJcblx0KSB7XG5cdFx0bGV0IHNDcml0aWNhbGl0eUV4cHJlc3Npb246IHR5cGVvZiBWYWx1ZUNvbG9yIHwgc3RyaW5nID0gVmFsdWVDb2xvci5OZXV0cmFsOyAvLyBEZWZhdWx0IENyaXRpY2FsaXR5IFN0YXRlXG5cblx0XHRzVmFsdWUgPSBgJSR7c1ZhbHVlfWA7XG5cblx0XHQvLyBTZXR0aW5nIFVuYXNzaWduZWQgVmFsdWVzXG5cdFx0c0RldmlhdGlvbkxvdyA9IHNEZXZpYXRpb25Mb3cgfHwgLUluZmluaXR5O1xuXHRcdHNUb2xlcmFuY2VMb3cgPSBzVG9sZXJhbmNlTG93IHx8IHNEZXZpYXRpb25Mb3c7XG5cdFx0c0FjY2VwdGFuY2VMb3cgPSBzQWNjZXB0YW5jZUxvdyB8fCBzVG9sZXJhbmNlTG93O1xuXHRcdHNEZXZpYXRpb25IaWdoID0gc0RldmlhdGlvbkhpZ2ggfHwgSW5maW5pdHk7XG5cdFx0c1RvbGVyYW5jZUhpZ2ggPSBzVG9sZXJhbmNlSGlnaCB8fCBzRGV2aWF0aW9uSGlnaDtcblx0XHRzQWNjZXB0YW5jZUhpZ2ggPSBzQWNjZXB0YW5jZUhpZ2ggfHwgc1RvbGVyYW5jZUhpZ2g7XG5cblx0XHQvLyBEZWFsaW5nIHdpdGggRGVjaW1hbCBhbmQgUGF0aCBiYXNlZCBiaW5nZGluZ3Ncblx0XHRzRGV2aWF0aW9uTG93ID0gc0RldmlhdGlvbkxvdyAmJiAoK3NEZXZpYXRpb25Mb3cgPyArc0RldmlhdGlvbkxvdyA6IGAlJHtzRGV2aWF0aW9uTG93fWApO1xuXHRcdHNUb2xlcmFuY2VMb3cgPSBzVG9sZXJhbmNlTG93ICYmICgrc1RvbGVyYW5jZUxvdyA/ICtzVG9sZXJhbmNlTG93IDogYCUke3NUb2xlcmFuY2VMb3d9YCk7XG5cdFx0c0FjY2VwdGFuY2VMb3cgPSBzQWNjZXB0YW5jZUxvdyAmJiAoK3NBY2NlcHRhbmNlTG93ID8gK3NBY2NlcHRhbmNlTG93IDogYCUke3NBY2NlcHRhbmNlTG93fWApO1xuXHRcdHNBY2NlcHRhbmNlSGlnaCA9IHNBY2NlcHRhbmNlSGlnaCAmJiAoK3NBY2NlcHRhbmNlSGlnaCA/ICtzQWNjZXB0YW5jZUhpZ2ggOiBgJSR7c0FjY2VwdGFuY2VIaWdofWApO1xuXHRcdHNUb2xlcmFuY2VIaWdoID0gc1RvbGVyYW5jZUhpZ2ggJiYgKCtzVG9sZXJhbmNlSGlnaCA/ICtzVG9sZXJhbmNlSGlnaCA6IGAlJHtzVG9sZXJhbmNlSGlnaH1gKTtcblx0XHRzRGV2aWF0aW9uSGlnaCA9IHNEZXZpYXRpb25IaWdoICYmICgrc0RldmlhdGlvbkhpZ2ggPyArc0RldmlhdGlvbkhpZ2ggOiBgJSR7c0RldmlhdGlvbkhpZ2h9YCk7XG5cblx0XHQvLyBDcmVhdGluZyBydW50aW1lIGV4cHJlc3Npb24gYmluZGluZyBmcm9tIGNyaXRpY2FsaXR5IGNhbGN1bGF0aW9uIGZvciBDcml0aWNhbGl0eSBTdGF0ZVxuXHRcdGlmIChzSW1wcm92ZW1lbnREaXJlY3Rpb24uaW5kZXhPZihcIk1pbmltaXplXCIpID4gLTEpIHtcblx0XHRcdHNDcml0aWNhbGl0eUV4cHJlc3Npb24gPVxuXHRcdFx0XHRcIns9IFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPD0gXCIgK1xuXHRcdFx0XHRzQWNjZXB0YW5jZUhpZ2ggK1xuXHRcdFx0XHRcIiA/ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuR29vZCArXG5cdFx0XHRcdFwiJyA6IFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPD0gXCIgK1xuXHRcdFx0XHRzVG9sZXJhbmNlSGlnaCArXG5cdFx0XHRcdFwiID8gJ1wiICtcblx0XHRcdFx0VmFsdWVDb2xvci5OZXV0cmFsICtcblx0XHRcdFx0XCInIDogXCIgK1xuXHRcdFx0XHRcIihcIiArXG5cdFx0XHRcdHNEZXZpYXRpb25IaWdoICtcblx0XHRcdFx0XCIgJiYgXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA8PSBcIiArXG5cdFx0XHRcdHNEZXZpYXRpb25IaWdoICtcblx0XHRcdFx0XCIpID8gJ1wiICtcblx0XHRcdFx0VmFsdWVDb2xvci5Dcml0aWNhbCArXG5cdFx0XHRcdFwiJyA6ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuRXJyb3IgK1xuXHRcdFx0XHRcIicgfVwiO1xuXHRcdH0gZWxzZSBpZiAoc0ltcHJvdmVtZW50RGlyZWN0aW9uLmluZGV4T2YoXCJNYXhpbWl6ZVwiKSA+IC0xKSB7XG5cdFx0XHRzQ3JpdGljYWxpdHlFeHByZXNzaW9uID1cblx0XHRcdFx0XCJ7PSBcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiID49IFwiICtcblx0XHRcdFx0c0FjY2VwdGFuY2VMb3cgK1xuXHRcdFx0XHRcIiA/ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuR29vZCArXG5cdFx0XHRcdFwiJyA6IFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPj0gXCIgK1xuXHRcdFx0XHRzVG9sZXJhbmNlTG93ICtcblx0XHRcdFx0XCIgPyAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLk5ldXRyYWwgK1xuXHRcdFx0XHRcIicgOiBcIiArXG5cdFx0XHRcdFwiKFwiICtcblx0XHRcdFx0c0RldmlhdGlvbkxvdyArXG5cdFx0XHRcdFwiICYmIFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPj0gXCIgK1xuXHRcdFx0XHRzRGV2aWF0aW9uTG93ICtcblx0XHRcdFx0XCIpID8gJ1wiICtcblx0XHRcdFx0VmFsdWVDb2xvci5Dcml0aWNhbCArXG5cdFx0XHRcdFwiJyA6ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuRXJyb3IgK1xuXHRcdFx0XHRcIicgfVwiO1xuXHRcdH0gZWxzZSBpZiAoc0ltcHJvdmVtZW50RGlyZWN0aW9uLmluZGV4T2YoXCJUYXJnZXRcIikgPiAtMSkge1xuXHRcdFx0c0NyaXRpY2FsaXR5RXhwcmVzc2lvbiA9XG5cdFx0XHRcdFwiez0gKFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPD0gXCIgK1xuXHRcdFx0XHRzQWNjZXB0YW5jZUhpZ2ggK1xuXHRcdFx0XHRcIiAmJiBcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiID49IFwiICtcblx0XHRcdFx0c0FjY2VwdGFuY2VMb3cgK1xuXHRcdFx0XHRcIikgPyAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLkdvb2QgK1xuXHRcdFx0XHRcIicgOiBcIiArXG5cdFx0XHRcdFwiKChcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiID49IFwiICtcblx0XHRcdFx0c1RvbGVyYW5jZUxvdyArXG5cdFx0XHRcdFwiICYmIFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPCBcIiArXG5cdFx0XHRcdHNBY2NlcHRhbmNlTG93ICtcblx0XHRcdFx0XCIpIHx8IChcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiID4gXCIgK1xuXHRcdFx0XHRzQWNjZXB0YW5jZUhpZ2ggK1xuXHRcdFx0XHRcIiAmJiBcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiIDw9IFwiICtcblx0XHRcdFx0c1RvbGVyYW5jZUhpZ2ggK1xuXHRcdFx0XHRcIikpID8gJ1wiICtcblx0XHRcdFx0VmFsdWVDb2xvci5OZXV0cmFsICtcblx0XHRcdFx0XCInIDogXCIgK1xuXHRcdFx0XHRcIigoXCIgK1xuXHRcdFx0XHRzRGV2aWF0aW9uTG93ICtcblx0XHRcdFx0XCIgJiYgKFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPj0gXCIgK1xuXHRcdFx0XHRzRGV2aWF0aW9uTG93ICtcblx0XHRcdFx0XCIpICYmIChcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiIDwgXCIgK1xuXHRcdFx0XHRzVG9sZXJhbmNlTG93ICtcblx0XHRcdFx0XCIpKSB8fCAoKFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPiBcIiArXG5cdFx0XHRcdHNUb2xlcmFuY2VIaWdoICtcblx0XHRcdFx0XCIpICYmIFwiICtcblx0XHRcdFx0c0RldmlhdGlvbkhpZ2ggK1xuXHRcdFx0XHRcIiAmJiAoXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA8PSBcIiArXG5cdFx0XHRcdHNEZXZpYXRpb25IaWdoICtcblx0XHRcdFx0XCIpKSkgPyAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLkNyaXRpY2FsICtcblx0XHRcdFx0XCInIDogJ1wiICtcblx0XHRcdFx0VmFsdWVDb2xvci5FcnJvciArXG5cdFx0XHRcdFwiJyB9XCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdExvZy53YXJuaW5nKFwiQ2FzZSBub3Qgc3VwcG9ydGVkLCByZXR1cm5pbmcgdGhlIGRlZmF1bHQgVmFsdWUgTmV1dHJhbFwiKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gc0NyaXRpY2FsaXR5RXhwcmVzc2lvbjtcblx0fSxcblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY3JpdGljYWxpdHkgaW5kaWNhdG9yIGZyb20gYW5ub3RhdGlvbnMgaWYgY3JpdGljYWxpdHkgaXMgRW51bU1lbWJlci5cblx0ICpcblx0ICogQHBhcmFtIHNDcml0aWNhbGl0eSBDcml0aWNhbGl0eSBwcm92aWRlZCBpbiB0aGUgYW5ub3RhdGlvbnNcblx0ICogQHJldHVybnMgUmV0dXJuIHRoZSBpbmRpY2F0b3IgZm9yIGNyaXRpY2FsaXR5XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZ2V0Q3JpdGljYWxpdHlGcm9tRW51bTogZnVuY3Rpb24gKHNDcml0aWNhbGl0eTogc3RyaW5nKSB7XG5cdFx0bGV0IHNJbmRpY2F0b3I7XG5cdFx0aWYgKHNDcml0aWNhbGl0eSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Dcml0aWNhbGl0eVR5cGUvTmVnYXRpdmVcIikge1xuXHRcdFx0c0luZGljYXRvciA9IFZhbHVlQ29sb3IuRXJyb3I7XG5cdFx0fSBlbHNlIGlmIChzQ3JpdGljYWxpdHkgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ3JpdGljYWxpdHlUeXBlL1Bvc2l0aXZlXCIpIHtcblx0XHRcdHNJbmRpY2F0b3IgPSBWYWx1ZUNvbG9yLkdvb2Q7XG5cdFx0fSBlbHNlIGlmIChzQ3JpdGljYWxpdHkgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ3JpdGljYWxpdHlUeXBlL0NyaXRpY2FsXCIpIHtcblx0XHRcdHNJbmRpY2F0b3IgPSBWYWx1ZUNvbG9yLkNyaXRpY2FsO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzSW5kaWNhdG9yID0gVmFsdWVDb2xvci5OZXV0cmFsO1xuXHRcdH1cblx0XHRyZXR1cm4gc0luZGljYXRvcjtcblx0fSxcblx0Z2V0VmFsdWVDcml0aWNhbGl0eTogZnVuY3Rpb24gKHNEaW1lbnNpb246IGFueSwgYVZhbHVlQ3JpdGljYWxpdHk6IGFueSkge1xuXHRcdGxldCBzUmVzdWx0O1xuXHRcdGNvbnN0IGFWYWx1ZXM6IGFueVtdID0gW107XG5cdFx0aWYgKGFWYWx1ZUNyaXRpY2FsaXR5ICYmIGFWYWx1ZUNyaXRpY2FsaXR5Lmxlbmd0aCA+IDApIHtcblx0XHRcdGFWYWx1ZUNyaXRpY2FsaXR5LmZvckVhY2goZnVuY3Rpb24gKG9WQzogYW55KSB7XG5cdFx0XHRcdGlmIChvVkMuVmFsdWUgJiYgb1ZDLkNyaXRpY2FsaXR5LiRFbnVtTWVtYmVyKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc1ZhbHVlID1cblx0XHRcdFx0XHRcdFwiJHtcIiArXG5cdFx0XHRcdFx0XHRzRGltZW5zaW9uICtcblx0XHRcdFx0XHRcdFwifSA9PT0gJ1wiICtcblx0XHRcdFx0XHRcdG9WQy5WYWx1ZSArXG5cdFx0XHRcdFx0XHRcIicgPyAnXCIgK1xuXHRcdFx0XHRcdFx0Q29tbW9uSGVscGVyLl9nZXRDcml0aWNhbGl0eUZyb21FbnVtKG9WQy5Dcml0aWNhbGl0eS4kRW51bU1lbWJlcikgK1xuXHRcdFx0XHRcdFx0XCInXCI7XG5cdFx0XHRcdFx0YVZhbHVlcy5wdXNoKHNWYWx1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0c1Jlc3VsdCA9IGFWYWx1ZXMubGVuZ3RoID4gMCAmJiBhVmFsdWVzLmpvaW4oXCIgOiBcIikgKyBcIiA6IHVuZGVmaW5lZFwiO1xuXHRcdH1cblx0XHRyZXR1cm4gc1Jlc3VsdCA/IFwiez0gXCIgKyBzUmVzdWx0ICsgXCIgfVwiIDogdW5kZWZpbmVkO1xuXHR9LFxuXHQvKipcblx0ICogVG8gZmV0Y2ggbWVhc3VyZSBhdHRyaWJ1dGUgaW5kZXguXG5cdCAqXG5cdCAqIEBwYXJhbSBpTWVhc3VyZSBDaGFydCBBbm5vdGF0aW9uc1xuXHQgKiBAcGFyYW0gb0NoYXJ0QW5ub3RhdGlvbnMgQ2hhcnQgQW5ub3RhdGlvbnNcblx0ICogQHJldHVybnMgTWVhc3VyZUF0dHJpYnV0ZSBpbmRleC5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdGdldE1lYXN1cmVBdHRyaWJ1dGVJbmRleDogZnVuY3Rpb24gKGlNZWFzdXJlOiBhbnksIG9DaGFydEFubm90YXRpb25zOiBhbnkpIHtcblx0XHRsZXQgYU1lYXN1cmVzLCBzTWVhc3VyZVByb3BlcnR5UGF0aDtcblx0XHRpZiAob0NoYXJ0QW5ub3RhdGlvbnMuTWVhc3VyZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0YU1lYXN1cmVzID0gb0NoYXJ0QW5ub3RhdGlvbnMuTWVhc3VyZXM7XG5cdFx0XHRzTWVhc3VyZVByb3BlcnR5UGF0aCA9IGFNZWFzdXJlc1tpTWVhc3VyZV0uJFByb3BlcnR5UGF0aDtcblx0XHR9IGVsc2UgaWYgKG9DaGFydEFubm90YXRpb25zPy5EeW5hbWljTWVhc3VyZXM/Lmxlbmd0aCA+IDApIHtcblx0XHRcdGFNZWFzdXJlcyA9IG9DaGFydEFubm90YXRpb25zLkR5bmFtaWNNZWFzdXJlcztcblx0XHRcdHNNZWFzdXJlUHJvcGVydHlQYXRoID0gYU1lYXN1cmVzW2lNZWFzdXJlXS4kQW5ub3RhdGlvblBhdGg7XG5cdFx0fVxuXHRcdGxldCBiTWVhc3VyZUF0dHJpYnV0ZUV4aXN0cztcblx0XHRjb25zdCBhTWVhc3VyZUF0dHJpYnV0ZXMgPSBvQ2hhcnRBbm5vdGF0aW9ucy5NZWFzdXJlQXR0cmlidXRlcztcblx0XHRsZXQgaU1lYXN1cmVBdHRyaWJ1dGUgPSAtMTtcblx0XHRjb25zdCBmbkNoZWNrTWVhc3VyZSA9IGZ1bmN0aW9uIChzTWVhc3VyZVBhdGg6IGFueSwgb01lYXN1cmVBdHRyaWJ1dGU6IGFueSwgaW5kZXg6IGFueSkge1xuXHRcdFx0aWYgKG9NZWFzdXJlQXR0cmlidXRlKSB7XG5cdFx0XHRcdGlmIChvTWVhc3VyZUF0dHJpYnV0ZS5NZWFzdXJlICYmIG9NZWFzdXJlQXR0cmlidXRlLk1lYXN1cmUuJFByb3BlcnR5UGF0aCA9PT0gc01lYXN1cmVQYXRoKSB7XG5cdFx0XHRcdFx0aU1lYXN1cmVBdHRyaWJ1dGUgPSBpbmRleDtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fSBlbHNlIGlmIChvTWVhc3VyZUF0dHJpYnV0ZS5EeW5hbWljTWVhc3VyZSAmJiBvTWVhc3VyZUF0dHJpYnV0ZS5EeW5hbWljTWVhc3VyZS4kQW5ub3RhdGlvblBhdGggPT09IHNNZWFzdXJlUGF0aCkge1xuXHRcdFx0XHRcdGlNZWFzdXJlQXR0cmlidXRlID0gaW5kZXg7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHRcdGlmIChhTWVhc3VyZUF0dHJpYnV0ZXMpIHtcblx0XHRcdGJNZWFzdXJlQXR0cmlidXRlRXhpc3RzID0gYU1lYXN1cmVBdHRyaWJ1dGVzLnNvbWUoZm5DaGVja01lYXN1cmUuYmluZChudWxsLCBzTWVhc3VyZVByb3BlcnR5UGF0aCkpO1xuXHRcdH1cblx0XHRyZXR1cm4gYk1lYXN1cmVBdHRyaWJ1dGVFeGlzdHMgJiYgaU1lYXN1cmVBdHRyaWJ1dGUgPiAtMSAmJiBpTWVhc3VyZUF0dHJpYnV0ZTtcblx0fSxcblxuXHRnZXRNZWFzdXJlQXR0cmlidXRlOiBmdW5jdGlvbiAob0NvbnRleHQ6IENvbnRleHQpIHtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCxcblx0XHRcdHNDaGFydEFubm90YXRpb25QYXRoID0gb0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdHJldHVybiBvTWV0YU1vZGVsLnJlcXVlc3RPYmplY3Qoc0NoYXJ0QW5ub3RhdGlvblBhdGgpLnRoZW4oZnVuY3Rpb24gKG9DaGFydEFubm90YXRpb25zOiBhbnkpIHtcblx0XHRcdGNvbnN0IGFNZWFzdXJlQXR0cmlidXRlcyA9IG9DaGFydEFubm90YXRpb25zLk1lYXN1cmVBdHRyaWJ1dGVzLFxuXHRcdFx0XHRpTWVhc3VyZUF0dHJpYnV0ZSA9IENvbW1vbkhlbHBlci5nZXRNZWFzdXJlQXR0cmlidXRlSW5kZXgoMCwgb0NoYXJ0QW5ub3RhdGlvbnMpO1xuXHRcdFx0Y29uc3Qgc01lYXN1cmVBdHRyaWJ1dGVQYXRoID1cblx0XHRcdFx0aU1lYXN1cmVBdHRyaWJ1dGUgPiAtMSAmJiBhTWVhc3VyZUF0dHJpYnV0ZXNbaU1lYXN1cmVBdHRyaWJ1dGVdICYmIGFNZWFzdXJlQXR0cmlidXRlc1tpTWVhc3VyZUF0dHJpYnV0ZV0uRGF0YVBvaW50XG5cdFx0XHRcdFx0PyBgJHtzQ2hhcnRBbm5vdGF0aW9uUGF0aH1NZWFzdXJlQXR0cmlidXRlcy8ke2lNZWFzdXJlQXR0cmlidXRlfS9gXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRpZiAoc01lYXN1cmVBdHRyaWJ1dGVQYXRoID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0TG9nLndhcm5pbmcoXCJEYXRhUG9pbnQgbWlzc2luZyBmb3IgdGhlIG1lYXN1cmVcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gc01lYXN1cmVBdHRyaWJ1dGVQYXRoID8gYCR7c01lYXN1cmVBdHRyaWJ1dGVQYXRofURhdGFQb2ludC8kQW5ub3RhdGlvblBhdGgvYCA6IHNNZWFzdXJlQXR0cmlidXRlUGF0aDtcblx0XHR9KTtcblx0fSxcblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbWVhc3VyZUF0dHJpYnV0ZSBmb3IgdGhlIG1lYXN1cmUuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IHRvIHRoZSBtZWFzdXJlIGFubm90YXRpb25cblx0ICogQHJldHVybnMgUGF0aCB0byB0aGUgbWVhc3VyZUF0dHJpYnV0ZSBvZiB0aGUgbWVhc3VyZVxuXHQgKi9cblx0Z2V0TWVhc3VyZUF0dHJpYnV0ZUZvck1lYXN1cmU6IGZ1bmN0aW9uIChvQ29udGV4dDogQ29udGV4dCkge1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0c01lYXN1cmVQYXRoID0gb0NvbnRleHQuZ2V0UGF0aCgpLFxuXHRcdFx0c0NoYXJ0QW5ub3RhdGlvblBhdGggPSBzTWVhc3VyZVBhdGguc3Vic3RyaW5nKDAsIHNNZWFzdXJlUGF0aC5sYXN0SW5kZXhPZihcIk1lYXN1cmVcIikpLFxuXHRcdFx0aU1lYXN1cmUgPSBzTWVhc3VyZVBhdGgucmVwbGFjZSgvLipcXC8vLCBcIlwiKTtcblxuXHRcdHJldHVybiBvTWV0YU1vZGVsLnJlcXVlc3RPYmplY3Qoc0NoYXJ0QW5ub3RhdGlvblBhdGgpLnRoZW4oZnVuY3Rpb24gKG9DaGFydEFubm90YXRpb25zOiBhbnkpIHtcblx0XHRcdGNvbnN0IGFNZWFzdXJlQXR0cmlidXRlcyA9IG9DaGFydEFubm90YXRpb25zLk1lYXN1cmVBdHRyaWJ1dGVzLFxuXHRcdFx0XHRpTWVhc3VyZUF0dHJpYnV0ZSA9IENvbW1vbkhlbHBlci5nZXRNZWFzdXJlQXR0cmlidXRlSW5kZXgoaU1lYXN1cmUsIG9DaGFydEFubm90YXRpb25zKTtcblx0XHRcdGNvbnN0IHNNZWFzdXJlQXR0cmlidXRlUGF0aCA9XG5cdFx0XHRcdGlNZWFzdXJlQXR0cmlidXRlID4gLTEgJiYgYU1lYXN1cmVBdHRyaWJ1dGVzW2lNZWFzdXJlQXR0cmlidXRlXSAmJiBhTWVhc3VyZUF0dHJpYnV0ZXNbaU1lYXN1cmVBdHRyaWJ1dGVdLkRhdGFQb2ludFxuXHRcdFx0XHRcdD8gYCR7c0NoYXJ0QW5ub3RhdGlvblBhdGh9TWVhc3VyZUF0dHJpYnV0ZXMvJHtpTWVhc3VyZUF0dHJpYnV0ZX0vYFxuXHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0aWYgKHNNZWFzdXJlQXR0cmlidXRlUGF0aCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdExvZy53YXJuaW5nKFwiRGF0YVBvaW50IG1pc3NpbmcgZm9yIHRoZSBtZWFzdXJlXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHNNZWFzdXJlQXR0cmlidXRlUGF0aCA/IGAke3NNZWFzdXJlQXR0cmlidXRlUGF0aH1EYXRhUG9pbnQvJEFubm90YXRpb25QYXRoL2AgOiBzTWVhc3VyZUF0dHJpYnV0ZVBhdGg7XG5cdFx0fSk7XG5cdH0sXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZGV0ZXJtaW5lIGlmIHRoZSBjb250YWluZWQgbmF2aWdhdGlvbiBwcm9wZXJ0eSBoYXMgYSBkcmFmdCByb290L25vZGUgcGFyZW50IGVudGl0eVNldC5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIGlzRHJhZnRQYXJlbnRFbnRpdHlGb3JDb250YWlubWVudFxuXHQgKiBAcGFyYW0gb1RhcmdldENvbGxlY3Rpb25Db250YWluc1RhcmdldCBUYXJnZXQgY29sbGVjdGlvbiBoYXMgQ29udGFpbnNUYXJnZXQgcHJvcGVydHlcblx0ICogQHBhcmFtIG9UYWJsZU1ldGFkYXRhIFRhYmxlIG1ldGFkYXRhIGZvciB3aGljaCBkcmFmdCBzdXBwb3J0IHNoYWxsIGJlIGNoZWNrZWRcblx0ICogQHJldHVybnMgUmV0dXJucyB0cnVlIGlmIGRyYWZ0XG5cdCAqL1xuXHRpc0RyYWZ0UGFyZW50RW50aXR5Rm9yQ29udGFpbm1lbnQ6IGZ1bmN0aW9uIChvVGFyZ2V0Q29sbGVjdGlvbkNvbnRhaW5zVGFyZ2V0OiBvYmplY3QsIG9UYWJsZU1ldGFkYXRhOiBhbnkpIHtcblx0XHRpZiAob1RhcmdldENvbGxlY3Rpb25Db250YWluc1RhcmdldCkge1xuXHRcdFx0aWYgKG9UYWJsZU1ldGFkYXRhICYmIG9UYWJsZU1ldGFkYXRhLnBhcmVudEVudGl0eVNldCAmJiBvVGFibGVNZXRhZGF0YS5wYXJlbnRFbnRpdHlTZXQuc1BhdGgpIHtcblx0XHRcdFx0Y29uc3Qgc1BhcmVudEVudGl0eVNldFBhdGggPSBvVGFibGVNZXRhZGF0YS5wYXJlbnRFbnRpdHlTZXQuc1BhdGg7XG5cdFx0XHRcdGNvbnN0IG9EcmFmdFJvb3QgPSBvVGFibGVNZXRhZGF0YS5wYXJlbnRFbnRpdHlTZXQub01vZGVsLmdldE9iamVjdChcblx0XHRcdFx0XHRgJHtzUGFyZW50RW50aXR5U2V0UGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdGBcblx0XHRcdFx0KTtcblx0XHRcdFx0Y29uc3Qgb0RyYWZ0Tm9kZSA9IG9UYWJsZU1ldGFkYXRhLnBhcmVudEVudGl0eVNldC5vTW9kZWwuZ2V0T2JqZWN0KFxuXHRcdFx0XHRcdGAke3NQYXJlbnRFbnRpdHlTZXRQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnROb2RlYFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAob0RyYWZ0Um9vdCB8fCBvRHJhZnROb2RlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIEVuc3VyZXMgdGhlIGRhdGEgaXMgcHJvY2Vzc2VkIGFzIGRlZmluZWQgaW4gdGhlIHRlbXBsYXRlLlxuXHQgKiBTaW5jZSB0aGUgcHJvcGVydHkgRGF0YSBpcyBvZiB0aGUgdHlwZSAnb2JqZWN0JywgaXQgbWF5IG5vdCBiZSBpbiB0aGUgc2FtZSBvcmRlciBhcyByZXF1aXJlZCBieSB0aGUgdGVtcGxhdGUuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLm1hY3Jvcy5Db21tb25IZWxwZXJcblx0ICogQHBhcmFtIGRhdGFFbGVtZW50IFRoZSBkYXRhIHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIHByb2Nlc3NlZC5cblx0ICogQHJldHVybnMgVGhlIGNvcnJlY3QgcGF0aCBhY2NvcmRpbmcgdG8gdGhlIHRlbXBsYXRlLlxuXHQgKi9cblx0Z2V0RGF0YUZyb21UZW1wbGF0ZTogZnVuY3Rpb24gKGRhdGFFbGVtZW50OiBDb250ZXh0KSB7XG5cdFx0Y29uc3Qgc3BsaXRQYXRoID0gZGF0YUVsZW1lbnQuZ2V0UGF0aCgpLnNwbGl0KFwiL1wiKTtcblx0XHRjb25zdCBkYXRhS2V5ID0gc3BsaXRQYXRoW3NwbGl0UGF0aC5sZW5ndGggLSAxXTtcblx0XHRjb25zdCBjb25uZWN0ZWREYXRhUGF0aCA9IGAvJHtzcGxpdFBhdGguc2xpY2UoMSwgLTIpLmpvaW4oXCIvXCIpfS9AYDtcblx0XHRjb25zdCBjb25uZWN0ZWRPYmplY3QgPSBkYXRhRWxlbWVudC5nZXRPYmplY3QoY29ubmVjdGVkRGF0YVBhdGgpIGFzIGFueTtcblx0XHRjb25zdCB0ZW1wbGF0ZSA9IGNvbm5lY3RlZE9iamVjdC5UZW1wbGF0ZTtcblx0XHRjb25zdCBzcGxpdFRlbXAgPSB0ZW1wbGF0ZS5zcGxpdChcIn1cIik7XG5cdFx0Y29uc3QgdGVtcEFycmF5ID0gW107XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzcGxpdFRlbXAubGVuZ3RoIC0gMTsgaSsrKSB7XG5cdFx0XHRjb25zdCBrZXkgPSBzcGxpdFRlbXBbaV0uc3BsaXQoXCJ7XCIpWzFdLnRyaW0oKTtcblx0XHRcdHRlbXBBcnJheS5wdXNoKGtleSk7XG5cdFx0fVxuXHRcdE9iamVjdC5rZXlzKGNvbm5lY3RlZE9iamVjdC5EYXRhKS5mb3JFYWNoKGZ1bmN0aW9uIChzS2V5OiBzdHJpbmcpIHtcblx0XHRcdGlmIChzS2V5LnN0YXJ0c1dpdGgoXCIkXCIpKSB7XG5cdFx0XHRcdGRlbGV0ZSBjb25uZWN0ZWRPYmplY3QuRGF0YVtzS2V5XTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRjb25zdCBpbmRleCA9IE9iamVjdC5rZXlzKGNvbm5lY3RlZE9iamVjdC5EYXRhKS5pbmRleE9mKGRhdGFLZXkpO1xuXHRcdHJldHVybiBgLyR7c3BsaXRQYXRoLnNsaWNlKDEsIC0yKS5qb2luKFwiL1wiKX0vRGF0YS8ke3RlbXBBcnJheVtpbmRleF19YDtcblx0fSxcblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBlbmQgb2YgdGhlIHRlbXBsYXRlIGhhcyBiZWVuIHJlYWNoZWQuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLm1hY3Jvcy5Db21tb25IZWxwZXJcblx0ICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IG9mIHRoZSBjb25uZWN0ZWQgZmllbGRzLlxuXHQgKiBAcGFyYW0gZWxlbWVudCBUaGUgZWxlbWVudCB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyBwcm9jZXNzZWQuXG5cdCAqIEByZXR1cm5zIFRydWUgb3IgRmFsc2UgKGRlcGVuZGluZyBvbiB0aGUgdGVtcGxhdGUgaW5kZXgpLlxuXHQgKi9cblx0bm90TGFzdEluZGV4OiBmdW5jdGlvbiAodGFyZ2V0OiBhbnksIGVsZW1lbnQ6IG9iamVjdCkge1xuXHRcdGNvbnN0IHRlbXBsYXRlID0gdGFyZ2V0LlRlbXBsYXRlO1xuXHRcdGNvbnN0IHNwbGl0VGVtcCA9IHRlbXBsYXRlLnNwbGl0KFwifVwiKTtcblx0XHRjb25zdCB0ZW1wQXJyYXk6IGFueVtdID0gW107XG5cdFx0bGV0IGlzTGFzdEluZGV4ID0gZmFsc2U7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzcGxpdFRlbXAubGVuZ3RoIC0gMTsgaSsrKSB7XG5cdFx0XHRjb25zdCBkYXRhS2V5ID0gc3BsaXRUZW1wW2ldLnNwbGl0KFwie1wiKVsxXS50cmltKCk7XG5cdFx0XHR0ZW1wQXJyYXkucHVzaChkYXRhS2V5KTtcblx0XHR9XG5cblx0XHR0ZW1wQXJyYXkuZm9yRWFjaChmdW5jdGlvbiAodGVtcGxhdGVJbmZvOiBhbnkpIHtcblx0XHRcdGlmICh0YXJnZXQuRGF0YVt0ZW1wbGF0ZUluZm9dID09PSBlbGVtZW50ICYmIHRlbXBBcnJheS5pbmRleE9mKHRlbXBsYXRlSW5mbykgIT09IHRlbXBBcnJheS5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdGlzTGFzdEluZGV4ID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gaXNMYXN0SW5kZXg7XG5cdH0sXG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgdGhlIGRlbGltaXRlciBmcm9tIHRoZSB0ZW1wbGF0ZS5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUubWFjcm9zLkNvbW1vbkhlbHBlclxuXHQgKiBAcGFyYW0gdGVtcGxhdGUgVGhlIHRlbXBsYXRlIHN0cmluZy5cblx0ICogQHJldHVybnMgVGhlIGRlbGltaXRlciBpbiB0aGUgdGVtcGxhdGUgc3RyaW5nLlxuXHQgKi9cblx0Z2V0RGVsaW1pdGVyOiBmdW5jdGlvbiAodGVtcGxhdGU6IHN0cmluZykge1xuXHRcdHJldHVybiB0ZW1wbGF0ZS5zcGxpdChcIn1cIilbMV0uc3BsaXQoXCJ7XCIpWzBdLnRyaW0oKTtcblx0fSxcblxuXHRvTWV0YU1vZGVsOiB1bmRlZmluZWQgYXMgYW55LFxuXHRzZXRNZXRhTW9kZWw6IGZ1bmN0aW9uIChvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCkge1xuXHRcdHRoaXMub01ldGFNb2RlbCA9IG9NZXRhTW9kZWw7XG5cdH0sXG5cblx0Z2V0TWV0YU1vZGVsOiBmdW5jdGlvbiAob0NvbnRleHQ/OiBhbnksIG9JbnRlcmZhY2U/OiBhbnkpIHtcblx0XHRpZiAob0NvbnRleHQpIHtcblx0XHRcdHJldHVybiBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0TW9kZWwoKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMub01ldGFNb2RlbDtcblx0fSxcblxuXHRnZXRQYXJhbWV0ZXJzOiBmdW5jdGlvbiAob0NvbnRleHQ6IGFueSwgb0ludGVyZmFjZTogYW55KSB7XG5cdFx0aWYgKG9Db250ZXh0KSB7XG5cdFx0XHRjb25zdCBvTWV0YU1vZGVsID0gb0ludGVyZmFjZS5jb250ZXh0LmdldE1vZGVsKCk7XG5cdFx0XHRjb25zdCBzUGF0aCA9IG9JbnRlcmZhY2UuY29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRjb25zdCBvUGFyYW1ldGVySW5mbyA9IENvbW1vblV0aWxzLmdldFBhcmFtZXRlckluZm8ob01ldGFNb2RlbCwgc1BhdGgpO1xuXHRcdFx0aWYgKG9QYXJhbWV0ZXJJbmZvLnBhcmFtZXRlclByb3BlcnRpZXMpIHtcblx0XHRcdFx0cmV0dXJuIE9iamVjdC5rZXlzKG9QYXJhbWV0ZXJJbmZvLnBhcmFtZXRlclByb3BlcnRpZXMpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gW107XG5cdH0sXG5cblx0LyoqXG5cdCAqIEJ1aWxkIGFuIGV4cHJlc3Npb24gY2FsbGluZyBhbiBhY3Rpb24gaGFuZGxlciB2aWEgdGhlIEZQTSBoZWxwZXIncyBhY3Rpb25XcmFwcGVyIGZ1bmN0aW9uXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSAnRlBNLmFjdGlvbldyYXBwZXIoKScgZnVuY3Rpb24gaXMgYXZhaWxhYmxlIGF0IHJ1bnRpbWUuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQWN0aW9uIEFjdGlvbiBtZXRhZGF0YVxuXHQgKiBAcGFyYW0gb0FjdGlvbi5oYW5kbGVyTW9kdWxlIE1vZHVsZSBjb250YWluaW5nIHRoZSBhY3Rpb24gaGFuZGxlciBtZXRob2Rcblx0ICogQHBhcmFtIG9BY3Rpb24uaGFuZGxlck1ldGhvZCBBY3Rpb24gaGFuZGxlciBtZXRob2QgbmFtZVxuXHQgKiBAcGFyYW0gW29UaGlzXSBgdGhpc2AgKGlmIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBhIG1hY3JvKVxuXHQgKiBAcGFyYW0gb1RoaXMuaWQgVGhlIHRhYmxlJ3MgSURcblx0ICogQHJldHVybnMgVGhlIGFjdGlvbiB3cmFwcGVyIGJpbmRpbmdcdGV4cHJlc3Npb25cblx0ICovXG5cdGJ1aWxkQWN0aW9uV3JhcHBlcjogZnVuY3Rpb24gKG9BY3Rpb246IHsgaGFuZGxlck1vZHVsZTogc3RyaW5nOyBoYW5kbGVyTWV0aG9kOiBzdHJpbmcgfSwgb1RoaXM6IHsgaWQ6IHN0cmluZyB9IHwgdW5kZWZpbmVkKSB7XG5cdFx0Y29uc3QgYVBhcmFtczogYW55W10gPSBbcmVmKFwiJGV2ZW50XCIpLCBvQWN0aW9uLmhhbmRsZXJNb2R1bGUsIG9BY3Rpb24uaGFuZGxlck1ldGhvZF07XG5cblx0XHRpZiAob1RoaXMgJiYgb1RoaXMuaWQpIHtcblx0XHRcdGNvbnN0IG9BZGRpdGlvbmFsUGFyYW1zID0ge1xuXHRcdFx0XHRjb250ZXh0czogcmVmKFwiJHtpbnRlcm5hbD5zZWxlY3RlZENvbnRleHRzfVwiKVxuXHRcdFx0fTtcblx0XHRcdGFQYXJhbXMucHVzaChvQWRkaXRpb25hbFBhcmFtcyk7XG5cdFx0fVxuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihmbihcIkZQTS5hY3Rpb25XcmFwcGVyXCIsIGFQYXJhbXMpKTtcblx0fSxcblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHZhbHVlIHdoZXRoZXIgb3Igbm90IHRoZSBlbGVtZW50IHNob3VsZCBiZSB2aXNpYmxlIGRlcGVuZGluZyBvbiB0aGUgSGlkZGVuIGFubm90YXRpb24uXG5cdCAqIEl0IGlzIGludmVydGVkIGFzIHRoZSBVSSBlbGVtZW50cyBoYXZlIGEgdmlzaWJsZSBwcm9wZXJ0eSBpbnN0ZWFkIG9mIGFuIGhpZGRlbiBvbmUuXG5cdCAqXG5cdCAqIEBwYXJhbSBkYXRhRmllbGRBbm5vdGF0aW9ucyBUaGUgZGF0YUZpZWxkIE9iamVjdFxuXHQgKiBAcmV0dXJucyBBIHBhdGggb3IgYSBib29sZWFuXG5cdCAqL1xuXHRnZXRIaWRkZW5QYXRoRXhwcmVzc2lvbjogZnVuY3Rpb24gKGRhdGFGaWVsZEFubm90YXRpb25zOiBhbnkpIHtcblx0XHRpZiAoZGF0YUZpZWxkQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuXCJdICE9PSBudWxsKSB7XG5cdFx0XHRjb25zdCBoaWRkZW4gPSBkYXRhRmllbGRBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5cIl07XG5cdFx0XHRyZXR1cm4gdHlwZW9mIGhpZGRlbiA9PT0gXCJvYmplY3RcIiA/IFwiez0gISR7XCIgKyBoaWRkZW4uJFBhdGggKyBcIn0gfVwiIDogIWhpZGRlbjtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn07XG4oQ29tbW9uSGVscGVyLmlzUHJvcGVydHlGaWx0ZXJhYmxlIGFzIGFueSkucmVxdWlyZXNJQ29udGV4dCA9IHRydWU7XG4oQ29tbW9uSGVscGVyLmdldFBvcG92ZXJUZXh0IGFzIGFueSkucmVxdWlyZXNJQ29udGV4dCA9IHRydWU7XG4oQ29tbW9uSGVscGVyLmdldFNvcnRDb25kaXRpb25zIGFzIGFueSkucmVxdWlyZXNJQ29udGV4dCA9IHRydWU7XG5cbmV4cG9ydCBkZWZhdWx0IENvbW1vbkhlbHBlcjtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7O0VBV0EsSUFBTUEsVUFBVSxHQUFHQyxRQUFRLENBQUNELFVBQTVCO0VBQ0EsSUFBTUUsWUFBWSxHQUFHO0lBQ3BCQyxpQkFBaUIsRUFBRSxZQUFZO01BQzlCO01BQ0EsT0FBT0MsUUFBUSxDQUFDQyxJQUFULENBQWNDLE9BQWQsQ0FBc0IsK0JBQXRCLElBQXlELENBQUMsQ0FBakU7SUFDQSxDQUptQjtJQU1wQkMsWUFBWSxFQUFFLFVBQVVDLElBQVYsRUFBcUI7TUFDbEMsT0FBT0EsSUFBSSxDQUFDQyxTQUFMLEVBQVA7SUFDQSxDQVJt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
997
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJWYWx1ZUNvbG9yIiwibUxpYnJhcnkiLCJDb21tb25IZWxwZXIiLCJ1c2VGaWVsZFZhbHVlSGVscCIsImxvY2F0aW9uIiwiaHJlZiIsImluZGV4T2YiLCJnZXRQYXRoVG9LZXkiLCJvQ3R4IiwiZ2V0T2JqZWN0IiwiaXNWaXNpYmxlIiwidGFyZ2V0Iiwib0ludGVyZmFjZSIsIm9Nb2RlbCIsImNvbnRleHQiLCJnZXRNb2RlbCIsInNQcm9wZXJ0eVBhdGgiLCJnZXRQYXRoIiwib0Fubm90YXRpb25zIiwiaGlkZGVuIiwiJFBhdGgiLCJpc0RpYWxvZyIsIm9BY3Rpb25Db250ZXh0IiwiaXNDcml0aWNhbCIsIm9BY3Rpb24iLCJBcnJheSIsImlzQXJyYXkiLCIkUGFyYW1ldGVyIiwibGVuZ3RoIiwiZ2V0UGFyYW1ldGVyRWRpdE1vZGUiLCJmaWVsZENvbnRyb2wiLCJpbW11dGFibGUiLCJjb21wdXRlZCIsInNFZGl0TW9kZSIsIkVkaXRNb2RlIiwiRWRpdGFibGUiLCJSZWFkT25seSIsIiRFbnVtTWVtYmVyIiwiRGlzYWJsZWQiLCJnZXRNZXRhUGF0aCIsInVuZGVmaW5lZCIsImlzRGVza3RvcCIsInN5c3RlbSIsImRlc2t0b3AiLCJnZXRUYXJnZXRDb2xsZWN0aW9uIiwib0NvbnRleHQiLCJuYXZDb2xsZWN0aW9uIiwic1BhdGgiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJnZXRNZXRhTW9kZWwiLCJhUGFydHMiLCJzcGxpdCIsImZpbHRlciIsInNQYXJ0IiwiZW50aXR5U2V0IiwibmF2aWdhdGlvbkNvbGxlY3Rpb24iLCJzbGljZSIsImpvaW4iLCJpc1Byb3BlcnR5RmlsdGVyYWJsZSIsInByb3BlcnR5Iiwib0RhdGFGaWVsZCIsInNQcm9wZXJ0eUxvY2F0aW9uUGF0aCIsImdldExvY2F0aW9uRm9yUHJvcGVydHlQYXRoIiwic1Byb3BlcnR5IiwicmVwbGFjZSIsIiRUeXBlIiwiQ29tbW9uVXRpbHMiLCJpTGVuZ3RoIiwic0NvbGxlY3Rpb25QYXRoIiwibGFzdEluZGV4T2YiLCJnb3RvQWN0aW9uUGFyYW1ldGVyIiwic1Byb3BlcnR5TmFtZSIsImdldFBhcmFtZXRlclBhdGgiLCJnZXRFbnRpdHlTZXROYW1lIiwib01ldGFNb2RlbCIsInNFbnRpdHlUeXBlIiwib0VudGl0eUNvbnRhaW5lciIsImtleSIsImdldEFjdGlvblBhdGgiLCJiUmV0dXJuT25seVBhdGgiLCJzQWN0aW9uTmFtZSIsImJDaGVja1N0YXRpY1ZhbHVlIiwic0NvbnRleHRQYXRoIiwic0VudGl0eVR5cGVOYW1lIiwic0VudGl0eU5hbWUiLCJzQmluZGluZ1BhcmFtZXRlciIsImdldE5hdmlnYXRpb25Db250ZXh0IiwiT0RhdGFNb2RlbEFubm90YXRpb25IZWxwZXIiLCJnZXROYXZpZ2F0aW9uUGF0aCIsImJLZWVwUHJvcGVydHkiLCJiU3RhcnRzV2l0aEVudGl0eVR5cGUiLCJzdGFydHNXaXRoIiwicGFydCIsInNoaWZ0IiwicG9wIiwiZ2V0QWN0aW9uQ29udGV4dCIsImdldFBhdGhUb0JvdW5kQWN0aW9uT3ZlcmxvYWQiLCJhZGRTaW5nbGVRdW90ZXMiLCJzVmFsdWUiLCJiRXNjYXBlIiwiZXNjYXBlU2luZ2xlUXVvdGVzIiwiZ2VuZXJhdGVGdW5jdGlvbiIsInNGdW5jTmFtZSIsInNQYXJhbXMiLCJpIiwic0Z1bmN0aW9uIiwiZ2V0SGVhZGVyRGF0YVBvaW50TGlua1Zpc2liaWxpdHkiLCJiTGluayIsImJGaWVsZFZpc2liaWxpdHkiLCJzVmlzaWJpbGl0eUV4cCIsIm9iamVjdFRvU3RyaW5nIiwib1BhcmFtcyIsImlOdW1iZXJPZktleXMiLCJPYmplY3QiLCJrZXlzIiwic0tleSIsInJlbW92ZUVzY2FwZUNoYXJhY3RlcnMiLCJzRXhwcmVzc2lvbiIsInN0cmluZ2lmeU9iamVjdCIsInNTdHJpbmdpZmllZCIsIm9PYmplY3QiLCJKU09OIiwicGFyc2UiLCJvVUk1T2JqZWN0IiwidWk1b2JqZWN0IiwiYXNzaWduIiwic3RyaW5naWZ5Iiwic1R5cGUiLCJMb2ciLCJlcnJvciIsIkVycm9yIiwic3RyaW5naWZ5Q3VzdG9tRGF0YSIsInZEYXRhIiwiQ29udGV4dCIsInBhcnNlQ3VzdG9tRGF0YSIsImhhc093blByb3BlcnR5IiwiX2dldERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhVHlwZSIsInJlcXVlc3RPYmplY3QiLCJnZXRQb3BvdmVyVGV4dCIsImlDb250ZXh0IiwidGhlbiIsIm9EQURFbnRpdHlUeXBlIiwic0JpbmRpbmciLCJJblByb2Nlc3NCeVVzZXJEZXNjcmlwdGlvbiIsIkxhc3RDaGFuZ2VkQnlVc2VyRGVzY3JpcHRpb24iLCJnZXRDb250ZXh0UGF0aCIsIm9WYWx1ZSIsImdldFNvcnRDb25kaXRpb25zIiwib1ByZXNlbnRhdGlvblZhcmlhbnQiLCJzUHJlc2VudGF0aW9uVmFyaWFudFBhdGgiLCJfaXNQcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiIsIlNvcnRPcmRlciIsImFTb3J0Q29uZGl0aW9ucyIsInNvcnRlcnMiLCJzRW50aXR5UGF0aCIsImZvckVhY2giLCJvQ29uZGl0aW9uIiwib1NvcnRQcm9wZXJ0eSIsIm9Tb3J0ZXIiLCJEeW5hbWljUHJvcGVydHkiLCIkQW5ub3RhdGlvblBhdGgiLCJOYW1lIiwiUHJvcGVydHkiLCIkUHJvcGVydHlQYXRoIiwibmFtZSIsImRlc2NlbmRpbmciLCJEZXNjZW5kaW5nIiwicHVzaCIsInNBbm5vdGF0aW9uUGF0aCIsImNyZWF0ZVByZXNlbnRhdGlvblBhdGhDb250ZXh0Iiwib1ByZXNlbnRhdGlvbkNvbnRleHQiLCJhUGF0aHMiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImdldFByZXNzSGFuZGxlckZvckRhdGFGaWVsZEZvcklCTiIsInNDb250ZXh0IiwiYk5hdmlnYXRlV2l0aENvbmZpcm1hdGlvbkRpYWxvZyIsIm1OYXZpZ2F0aW9uUGFyYW1ldGVycyIsIm5hdmlnYXRpb25Db250ZXh0cyIsIlJlcXVpcmVzQ29udGV4dCIsIklubGluZSIsImFwcGxpY2FibGVDb250ZXh0cyIsIlNlbWFudGljT2JqZWN0IiwiQWN0aW9uIiwibm90QXBwbGljYWJsZUNvbnRleHRzIiwibGFiZWwiLCJMYWJlbCIsIk1hcHBpbmciLCJzZW1hbnRpY09iamVjdE1hcHBpbmciLCJnZXRFbnRpdHlTZXQiLCJNb2RlbEhlbHBlciIsImdldEVudGl0eVNldFBhdGgiLCJoYW5kbGVWaXNpYmlsaXR5T2ZNZW51QWN0aW9ucyIsInNWaXNpYmxlVmFsdWUiLCJjb21iaW5lZENvbmRpdGlvbnMiLCJnZXRDcml0aWNhbGl0eUNhbGN1bGF0aW9uQmluZGluZyIsInNJbXByb3ZlbWVudERpcmVjdGlvbiIsInNEZXZpYXRpb25Mb3ciLCJzVG9sZXJhbmNlTG93Iiwic0FjY2VwdGFuY2VMb3ciLCJzQWNjZXB0YW5jZUhpZ2giLCJzVG9sZXJhbmNlSGlnaCIsInNEZXZpYXRpb25IaWdoIiwic0NyaXRpY2FsaXR5RXhwcmVzc2lvbiIsIk5ldXRyYWwiLCJJbmZpbml0eSIsIkdvb2QiLCJDcml0aWNhbCIsIndhcm5pbmciLCJfZ2V0Q3JpdGljYWxpdHlGcm9tRW51bSIsInNDcml0aWNhbGl0eSIsInNJbmRpY2F0b3IiLCJnZXRWYWx1ZUNyaXRpY2FsaXR5Iiwic0RpbWVuc2lvbiIsImFWYWx1ZUNyaXRpY2FsaXR5Iiwic1Jlc3VsdCIsImFWYWx1ZXMiLCJvVkMiLCJWYWx1ZSIsIkNyaXRpY2FsaXR5IiwiZ2V0TWVhc3VyZUF0dHJpYnV0ZUluZGV4IiwiaU1lYXN1cmUiLCJvQ2hhcnRBbm5vdGF0aW9ucyIsImFNZWFzdXJlcyIsInNNZWFzdXJlUHJvcGVydHlQYXRoIiwiTWVhc3VyZXMiLCJEeW5hbWljTWVhc3VyZXMiLCJiTWVhc3VyZUF0dHJpYnV0ZUV4aXN0cyIsImFNZWFzdXJlQXR0cmlidXRlcyIsIk1lYXN1cmVBdHRyaWJ1dGVzIiwiaU1lYXN1cmVBdHRyaWJ1dGUiLCJmbkNoZWNrTWVhc3VyZSIsInNNZWFzdXJlUGF0aCIsIm9NZWFzdXJlQXR0cmlidXRlIiwiaW5kZXgiLCJNZWFzdXJlIiwiRHluYW1pY01lYXN1cmUiLCJzb21lIiwiYmluZCIsImdldE1lYXN1cmVBdHRyaWJ1dGUiLCJzQ2hhcnRBbm5vdGF0aW9uUGF0aCIsInNNZWFzdXJlQXR0cmlidXRlUGF0aCIsIkRhdGFQb2ludCIsImdldE1lYXN1cmVBdHRyaWJ1dGVGb3JNZWFzdXJlIiwic3Vic3RyaW5nIiwiaXNEcmFmdFBhcmVudEVudGl0eUZvckNvbnRhaW5tZW50Iiwib1RhcmdldENvbGxlY3Rpb25Db250YWluc1RhcmdldCIsIm9UYWJsZU1ldGFkYXRhIiwicGFyZW50RW50aXR5U2V0Iiwic1BhcmVudEVudGl0eVNldFBhdGgiLCJvRHJhZnRSb290Iiwib0RyYWZ0Tm9kZSIsImdldERhdGFGcm9tVGVtcGxhdGUiLCJkYXRhRWxlbWVudCIsInNwbGl0UGF0aCIsImRhdGFLZXkiLCJjb25uZWN0ZWREYXRhUGF0aCIsImNvbm5lY3RlZE9iamVjdCIsInRlbXBsYXRlIiwiVGVtcGxhdGUiLCJzcGxpdFRlbXAiLCJ0ZW1wQXJyYXkiLCJ0cmltIiwiRGF0YSIsIm5vdExhc3RJbmRleCIsImVsZW1lbnQiLCJpc0xhc3RJbmRleCIsInRlbXBsYXRlSW5mbyIsImdldERlbGltaXRlciIsInNldE1ldGFNb2RlbCIsImdldFBhcmFtZXRlcnMiLCJvUGFyYW1ldGVySW5mbyIsImdldFBhcmFtZXRlckluZm8iLCJwYXJhbWV0ZXJQcm9wZXJ0aWVzIiwiYnVpbGRBY3Rpb25XcmFwcGVyIiwib1RoaXMiLCJhUGFyYW1zIiwicmVmIiwiaGFuZGxlck1vZHVsZSIsImhhbmRsZXJNZXRob2QiLCJpZCIsIm9BZGRpdGlvbmFsUGFyYW1zIiwiY29udGV4dHMiLCJjb21waWxlRXhwcmVzc2lvbiIsImZuIiwiZ2V0SGlkZGVuUGF0aEV4cHJlc3Npb24iLCJkYXRhRmllbGRBbm5vdGF0aW9ucyIsInJlcXVpcmVzSUNvbnRleHQiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkNvbW1vbkhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uLCBmbiwgcmVmIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IG1MaWJyYXJ5IGZyb20gXCJzYXAvbS9saWJyYXJ5XCI7XG5pbXBvcnQgeyBzeXN0ZW0gfSBmcm9tIFwic2FwL3VpL0RldmljZVwiO1xuaW1wb3J0IEVkaXRNb2RlIGZyb20gXCJzYXAvdWkvbWRjL2VudW0vRWRpdE1vZGVcIjtcbmltcG9ydCBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IE9EYXRhTW9kZWxBbm5vdGF0aW9uSGVscGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQW5ub3RhdGlvbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuXG5jb25zdCBWYWx1ZUNvbG9yID0gbUxpYnJhcnkuVmFsdWVDb2xvcjtcbmNvbnN0IENvbW1vbkhlbHBlciA9IHtcblx0dXNlRmllbGRWYWx1ZUhlbHA6IGZ1bmN0aW9uICgpIHtcblx0XHQvLyBTd2l0Y2ggZnJvbSAobmV3KSBtZGM6VmFsdWVIZWxwIHRvIChvbGQpIG1kY0ZpZWxkOkZpZWxkVmFsdWVIZWxwXG5cdFx0cmV0dXJuIGxvY2F0aW9uLmhyZWYuaW5kZXhPZihcInNhcC1mZS1vbGRGaWVsZFZhbHVlSGVscD10cnVlXCIpID4gLTE7XG5cdH0sXG5cblx0Z2V0UGF0aFRvS2V5OiBmdW5jdGlvbiAob0N0eDogYW55KSB7XG5cdFx0cmV0dXJuIG9DdHguZ2V0T2JqZWN0KCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgaWYgYSBmaWVsZCBpcyB2aXNpYmxlLlxuXHQgKlxuXHQgKiBAcGFyYW0gdGFyZ2V0IFRhcmdldCBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gb0ludGVyZmFjZSBJbnRlcmZhY2UgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgUmV0dXJucyB0cnVlLCBmYWxzZSwgb3IgZXhwcmVzc2lvbiB3aXRoIHBhdGhcblx0ICovXG5cdGlzVmlzaWJsZTogZnVuY3Rpb24gKHRhcmdldDogb2JqZWN0LCBvSW50ZXJmYWNlOiBhbnkpIHtcblx0XHRjb25zdCBvTW9kZWwgPSBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0TW9kZWwoKSxcblx0XHRcdHNQcm9wZXJ0eVBhdGggPSBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0UGF0aCgpLFxuXHRcdFx0b0Fubm90YXRpb25zID0gb01vZGVsLmdldE9iamVjdChgJHtzUHJvcGVydHlQYXRofUBgKSxcblx0XHRcdGhpZGRlbiA9IG9Bbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5cIl07XG5cblx0XHRyZXR1cm4gdHlwZW9mIGhpZGRlbiA9PT0gXCJvYmplY3RcIiA/IFwiez0gISR7XCIgKyBoaWRkZW4uJFBhdGggKyBcIn0gfVwiIDogIWhpZGRlbjtcblx0fSxcblxuXHQvKipcblx0ICogRGV0ZXJtaW5lIGlmIHRoZSBhY3Rpb24gb3BlbnMgdXAgYSBkaWFsb2cuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQWN0aW9uQ29udGV4dFxuXHQgKiBAcGFyYW0gb0ludGVyZmFjZVxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgYSBkaWFsb2cgaXMgbmVlZGVkXG5cdCAqL1xuXHRpc0RpYWxvZzogZnVuY3Rpb24gKG9BY3Rpb25Db250ZXh0OiBhbnksIG9JbnRlcmZhY2U6IGFueSkge1xuXHRcdGNvbnN0IG9Nb2RlbCA9IG9JbnRlcmZhY2UuY29udGV4dC5nZXRNb2RlbCgpLFxuXHRcdFx0c1Byb3BlcnR5UGF0aCA9IG9JbnRlcmZhY2UuY29udGV4dC5nZXRQYXRoKCksXG5cdFx0XHRpc0NyaXRpY2FsID0gb01vZGVsLmdldE9iamVjdChgJHtzUHJvcGVydHlQYXRofS9AJHVpNS5vdmVybG9hZEBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNBY3Rpb25Dcml0aWNhbGApO1xuXHRcdGlmIChpc0NyaXRpY2FsKSB7XG5cdFx0XHRyZXR1cm4gXCJEaWFsb2dcIjtcblx0XHR9IGVsc2UgaWYgKG9BY3Rpb25Db250ZXh0KSB7XG5cdFx0XHRjb25zdCBvQWN0aW9uID0gQXJyYXkuaXNBcnJheShvQWN0aW9uQ29udGV4dCkgPyBvQWN0aW9uQ29udGV4dFswXSA6IG9BY3Rpb25Db250ZXh0O1xuXHRcdFx0aWYgKG9BY3Rpb24uJFBhcmFtZXRlciAmJiBvQWN0aW9uLiRQYXJhbWV0ZXIubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRyZXR1cm4gXCJEaWFsb2dcIjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBcIk5vbmVcIjtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmUgaWYgZmllbGQgaXMgZWRpdGFibGUuXG5cdCAqXG5cdCAqIEBwYXJhbSB0YXJnZXQgVGFyZ2V0IGluc3RhbmNlXG5cdCAqIEBwYXJhbSBvSW50ZXJmYWNlIEludGVyZmFjZSBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBBIEJpbmRpbmcgRXhwcmVzc2lvbiB0byBkZXRlcm1pbmUgaWYgYSBmaWVsZCBzaG91bGQgYmUgZWRpdGFibGUgb3Igbm90LlxuXHQgKi9cblx0Z2V0UGFyYW1ldGVyRWRpdE1vZGU6IGZ1bmN0aW9uICh0YXJnZXQ6IG9iamVjdCwgb0ludGVyZmFjZTogYW55KSB7XG5cdFx0Y29uc3Qgb01vZGVsID0gb0ludGVyZmFjZS5jb250ZXh0LmdldE1vZGVsKCksXG5cdFx0XHRzUHJvcGVydHlQYXRoID0gb0ludGVyZmFjZS5jb250ZXh0LmdldFBhdGgoKSxcblx0XHRcdG9Bbm5vdGF0aW9ucyA9IG9Nb2RlbC5nZXRPYmplY3QoYCR7c1Byb3BlcnR5UGF0aH1AYCksXG5cdFx0XHRmaWVsZENvbnRyb2wgPSBvQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpZWxkQ29udHJvbFwiXSxcblx0XHRcdGltbXV0YWJsZSA9IG9Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ29yZS5WMS5JbW11dGFibGVcIl0sXG5cdFx0XHRjb21wdXRlZCA9IG9Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ29yZS5WMS5Db21wdXRlZFwiXTtcblxuXHRcdGxldCBzRWRpdE1vZGU6IEVkaXRNb2RlIHwgc3RyaW5nID0gRWRpdE1vZGUuRWRpdGFibGU7XG5cblx0XHRpZiAoaW1tdXRhYmxlIHx8IGNvbXB1dGVkKSB7XG5cdFx0XHRzRWRpdE1vZGUgPSBFZGl0TW9kZS5SZWFkT25seTtcblx0XHR9IGVsc2UgaWYgKGZpZWxkQ29udHJvbCkge1xuXHRcdFx0aWYgKGZpZWxkQ29udHJvbC4kRW51bU1lbWJlcikge1xuXHRcdFx0XHRpZiAoZmllbGRDb250cm9sLiRFbnVtTWVtYmVyID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWVsZENvbnRyb2xUeXBlL1JlYWRPbmx5XCIpIHtcblx0XHRcdFx0XHRzRWRpdE1vZGUgPSBFZGl0TW9kZS5SZWFkT25seTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0ZmllbGRDb250cm9sLiRFbnVtTWVtYmVyID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWVsZENvbnRyb2xUeXBlL0luYXBwbGljYWJsZVwiIHx8XG5cdFx0XHRcdFx0ZmllbGRDb250cm9sLiRFbnVtTWVtYmVyID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWVsZENvbnRyb2xUeXBlL0hpZGRlblwiXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHNFZGl0TW9kZSA9IEVkaXRNb2RlLkRpc2FibGVkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoZmllbGRDb250cm9sLiRQYXRoKSB7XG5cdFx0XHRcdHNFZGl0TW9kZSA9XG5cdFx0XHRcdFx0XCJ7PSAle1wiICtcblx0XHRcdFx0XHRmaWVsZENvbnRyb2wuJFBhdGggK1xuXHRcdFx0XHRcdFwifSA8IDMgPyAoJXtcIiArXG5cdFx0XHRcdFx0ZmllbGRDb250cm9sLiRQYXRoICtcblx0XHRcdFx0XHRcIn0gPT09IDAgPyAnXCIgK1xuXHRcdFx0XHRcdEVkaXRNb2RlLkRpc2FibGVkICtcblx0XHRcdFx0XHRcIicgOiAnXCIgK1xuXHRcdFx0XHRcdEVkaXRNb2RlLlJlYWRPbmx5ICtcblx0XHRcdFx0XHRcIicpIDogJ1wiICtcblx0XHRcdFx0XHRFZGl0TW9kZS5FZGl0YWJsZSArXG5cdFx0XHRcdFx0XCInfVwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBzRWRpdE1vZGU7XG5cdH0sXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGNvbXBsZXRlIG1ldGFwYXRoIHRvIHRoZSB0YXJnZXQuXG5cdCAqXG5cdCAqIEBwYXJhbSB0YXJnZXRcblx0ICogQHBhcmFtIG9JbnRlcmZhY2Vcblx0ICogQHJldHVybnMgVGhlIG1ldGFwYXRoXG5cdCAqL1xuXHRnZXRNZXRhUGF0aDogZnVuY3Rpb24gKHRhcmdldDogYW55LCBvSW50ZXJmYWNlOiBhbnkpIHtcblx0XHRyZXR1cm4gKG9JbnRlcmZhY2UgJiYgb0ludGVyZmFjZS5jb250ZXh0ICYmIG9JbnRlcmZhY2UuY29udGV4dC5nZXRQYXRoKCkpIHx8IHVuZGVmaW5lZDtcblx0fSxcblx0aXNEZXNrdG9wOiBmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIHN5c3RlbS5kZXNrdG9wID09PSB0cnVlO1xuXHR9LFxuXHRnZXRUYXJnZXRDb2xsZWN0aW9uOiBmdW5jdGlvbiAob0NvbnRleHQ6IGFueSwgbmF2Q29sbGVjdGlvbj86IGFueSkge1xuXHRcdGxldCBzUGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKTtcblx0XHRpZiAoXG5cdFx0XHRvQ29udGV4dC5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKSA9PT0gXCJzYXAudWkubW9kZWwuQ29udGV4dFwiICYmXG5cdFx0XHQob0NvbnRleHQuZ2V0T2JqZWN0KFwiJGtpbmRcIikgPT09IFwiRW50aXR5U2V0XCIgfHwgb0NvbnRleHQuZ2V0T2JqZWN0KFwiJENvbnRhaW5zVGFyZ2V0XCIpID09PSB0cnVlKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIHNQYXRoO1xuXHRcdH1cblx0XHRpZiAob0NvbnRleHQuZ2V0TW9kZWwpIHtcblx0XHRcdHNQYXRoID1cblx0XHRcdFx0KG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YVBhdGggJiYgb0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhUGF0aChzUGF0aCkpIHx8XG5cdFx0XHRcdG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkuZ2V0TWV0YVBhdGgoc1BhdGgpO1xuXHRcdH1cblx0XHQvL1N1cHBvcnRpbmcgc1BhdGggb2YgYW55IGZvcm1hdCwgZWl0aGVyICcvPGVudGl0eVNldD4vPG5hdmlnYXRpb25Db2xsZWN0aW9uPicgPE9SPiAnLzxlbnRpdHlTZXQ+LyRUeXBlLzxuYXZpZ2F0aW9uQ29sbGVjdGlvbj4nXG5cdFx0Y29uc3QgYVBhcnRzID0gc1BhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihmdW5jdGlvbiAoc1BhcnQ6IGFueSkge1xuXHRcdFx0cmV0dXJuIHNQYXJ0ICYmIHNQYXJ0ICE9IFwiJFR5cGVcIjtcblx0XHR9KTsgLy9maWx0ZXIgb3V0IGVtcHR5IHN0cmluZ3MgYW5kIHBhcnRzIHJlZmVycmluZyB0byAnJFR5cGUnXG5cdFx0Y29uc3QgZW50aXR5U2V0ID0gYC8ke2FQYXJ0c1swXX1gO1xuXHRcdGlmIChhUGFydHMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRyZXR1cm4gZW50aXR5U2V0O1xuXHRcdH1cblx0XHRjb25zdCBuYXZpZ2F0aW9uQ29sbGVjdGlvbiA9IG5hdkNvbGxlY3Rpb24gPT09IHVuZGVmaW5lZCA/IGFQYXJ0cy5zbGljZSgxKS5qb2luKFwiLyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nL1wiKSA6IG5hdkNvbGxlY3Rpb247XG5cdFx0cmV0dXJuIGAke2VudGl0eVNldH0vJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcvJHtuYXZpZ2F0aW9uQ29sbGVjdGlvbn1gOyAvLyB1c2VkIGluIGdvdG9UYXJnZXRFbnRpdHlTZXQgbWV0aG9kIGluIHRoZSBzYW1lIGZpbGVcblx0fSxcblxuXHRpc1Byb3BlcnR5RmlsdGVyYWJsZTogZnVuY3Rpb24gKHByb3BlcnR5OiBhbnksIG9JbnRlcmZhY2U6IGFueSwgb0RhdGFGaWVsZDogYW55KSB7XG5cdFx0Y29uc3Qgb01vZGVsID0gb0ludGVyZmFjZS5jb250ZXh0LmdldE1vZGVsKCksXG5cdFx0XHRzUHJvcGVydHlQYXRoID0gb0ludGVyZmFjZS5jb250ZXh0LmdldFBhdGgoKSxcblx0XHRcdC8vIExvYWNhdGlvblBhdGggd291bGQgYmUgdGhlIHByZWZpeCBvZiBzUHJvcGVydHlQYXRoLCBleGFtcGxlOiBzUHJvcGVydHlQYXRoID0gJy9DdXN0b21lci9TZXQvTmFtZScgLT4gc1Byb3BlcnR5TG9jYXRpb25QYXRoID0gJy9DdXN0b21lci9TZXQnXG5cdFx0XHRzUHJvcGVydHlMb2NhdGlvblBhdGggPSBDb21tb25IZWxwZXIuZ2V0TG9jYXRpb25Gb3JQcm9wZXJ0eVBhdGgob01vZGVsLCBzUHJvcGVydHlQYXRoKSxcblx0XHRcdHNQcm9wZXJ0eSA9IHNQcm9wZXJ0eVBhdGgucmVwbGFjZShgJHtzUHJvcGVydHlMb2NhdGlvblBhdGh9L2AsIFwiXCIpO1xuXG5cdFx0aWYgKFxuXHRcdFx0b0RhdGFGaWVsZCAmJlxuXHRcdFx0KG9EYXRhRmllbGQuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQWN0aW9uXCIgfHxcblx0XHRcdFx0b0RhdGFGaWVsZC4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25cIilcblx0XHQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gQ29tbW9uVXRpbHMuaXNQcm9wZXJ0eUZpbHRlcmFibGUob01vZGVsLCBzUHJvcGVydHlMb2NhdGlvblBhdGgsIHNQcm9wZXJ0eSk7XG5cdH0sXG5cblx0Z2V0TG9jYXRpb25Gb3JQcm9wZXJ0eVBhdGg6IGZ1bmN0aW9uIChvTW9kZWw6IGFueSwgc1Byb3BlcnR5UGF0aDogYW55KSB7XG5cdFx0bGV0IGlMZW5ndGg7XG5cdFx0bGV0IHNDb2xsZWN0aW9uUGF0aCA9IHNQcm9wZXJ0eVBhdGguc2xpY2UoMCwgc1Byb3BlcnR5UGF0aC5sYXN0SW5kZXhPZihcIi9cIikpO1xuXHRcdGlmIChvTW9kZWwuZ2V0T2JqZWN0KGAke3NDb2xsZWN0aW9uUGF0aH0vJGtpbmRgKSA9PT0gXCJFbnRpdHlDb250YWluZXJcIikge1xuXHRcdFx0aUxlbmd0aCA9IHNDb2xsZWN0aW9uUGF0aC5sZW5ndGggKyAxO1xuXHRcdFx0c0NvbGxlY3Rpb25QYXRoID0gc1Byb3BlcnR5UGF0aC5zbGljZShpTGVuZ3RoLCBzUHJvcGVydHlQYXRoLmluZGV4T2YoXCIvXCIsIGlMZW5ndGgpKTtcblx0XHR9XG5cdFx0cmV0dXJuIHNDb2xsZWN0aW9uUGF0aDtcblx0fSxcblx0Z290b0FjdGlvblBhcmFtZXRlcjogZnVuY3Rpb24gKG9Db250ZXh0OiBhbnkpIHtcblx0XHRjb25zdCBzUGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKSxcblx0XHRcdHNQcm9wZXJ0eU5hbWUgPSBvQ29udGV4dC5nZXRPYmplY3QoYCR7c1BhdGh9LyROYW1lYCk7XG5cblx0XHRyZXR1cm4gQ29tbW9uVXRpbHMuZ2V0UGFyYW1ldGVyUGF0aChzUGF0aCwgc1Byb3BlcnR5TmFtZSk7XG5cdH0sXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBlbnRpdHkgc2V0IG5hbWUgZnJvbSB0aGUgZW50aXR5IHR5cGUgbmFtZS5cblx0ICpcblx0ICogQHBhcmFtIG9NZXRhTW9kZWwgT0RhdGEgdjQgbWV0YW1vZGVsIGluc3RhbmNlXG5cdCAqIEBwYXJhbSBzRW50aXR5VHlwZSBFbnRpdHlUeXBlIG9mIHRoZSBhY3Rpb21cblx0ICogQHJldHVybnMgVGhlIEVudGl0eVNldCBvZiB0aGUgYm91bmQgYWN0aW9uXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKi9cblx0Z2V0RW50aXR5U2V0TmFtZTogZnVuY3Rpb24gKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzRW50aXR5VHlwZTogc3RyaW5nKSB7XG5cdFx0Y29uc3Qgb0VudGl0eUNvbnRhaW5lciA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KFwiL1wiKTtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBvRW50aXR5Q29udGFpbmVyKSB7XG5cdFx0XHRpZiAodHlwZW9mIG9FbnRpdHlDb250YWluZXJba2V5XSA9PT0gXCJvYmplY3RcIiAmJiBvRW50aXR5Q29udGFpbmVyW2tleV0uJFR5cGUgPT09IHNFbnRpdHlUeXBlKSB7XG5cdFx0XHRcdHJldHVybiBrZXk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgbWV0YW1vZGVsIHBhdGggY29ycmVjdGx5IGZvciBib3VuZCBhY3Rpb25zIGlmIHVzZWQgd2l0aCBiUmV0dXJuT25seVBhdGggYXMgdHJ1ZSxcblx0ICogZWxzZSByZXR1cm5zIGFuIG9iamVjdCB3aGljaCBoYXMgMyBwcm9wZXJ0aWVzIHJlbGF0ZWQgdG8gdGhlIGFjdGlvbi4gVGhleSBhcmUgdGhlIGVudGl0eSBzZXQgbmFtZSxcblx0ICogdGhlICRQYXRoIHZhbHVlIG9mIHRoZSBPcGVyYXRpb25BdmFpbGFibGUgYW5ub3RhdGlvbiBhbmQgdGhlIGJpbmRpbmcgcGFyYW1ldGVyIG5hbWUuIElmXG5cdCAqIGJDaGVja1N0YXRpY1ZhbHVlIGlzIHRydWUsIHJldHVybnMgdGhlIHN0YXRpYyB2YWx1ZSBvZiBPcGVyYXRpb25BdmFpbGFibGUgYW5ub3RhdGlvbiwgaWYgcHJlc2VudC5cblx0ICogZS5nLiBmb3IgYm91bmQgYWN0aW9uIHNvbWVOYW1lU3BhY2UuU29tZUJvdW5kQWN0aW9uXG5cdCAqIG9mIGVudGl0eSBzZXQgU29tZUVudGl0eVNldCwgdGhlIHN0cmluZyBcIi9Tb21lRW50aXR5U2V0L3NvbWVOYW1lU3BhY2UuU29tZUJvdW5kQWN0aW9uXCIgaXMgcmV0dXJuZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQWN0aW9uIFRoZSBjb250ZXh0IG9iamVjdCBvZiB0aGUgYWN0aW9uXG5cdCAqIEBwYXJhbSBiUmV0dXJuT25seVBhdGggSWYgZmFsc2UsIGFkZGl0aW9uYWwgaW5mbyBpcyByZXR1cm5lZCBhbG9uZyB3aXRoIG1ldGFtb2RlbCBwYXRoIHRvIHRoZSBib3VuZCBhY3Rpb25cblx0ICogQHBhcmFtIHNBY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBib3VuZCBhY3Rpb24gb2YgdGhlIGZvcm0gc29tZU5hbWVTcGFjZS5Tb21lQm91bmRBY3Rpb25cblx0ICogQHBhcmFtIGJDaGVja1N0YXRpY1ZhbHVlIElmIHRydWUsIHRoZSBzdGF0aWMgdmFsdWUgb2YgT3BlcmF0aW9uQXZhaWxhYmxlIGlzIHJldHVybmVkLCBpZiBwcmVzZW50XG5cdCAqIEByZXR1cm5zIFRoZSBzdHJpbmcgb3Igb2JqZWN0IGFzIHNwZWNpZmllZCBieSBiUmV0dXJuT25seVBhdGhcblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqL1xuXHRnZXRBY3Rpb25QYXRoOiBmdW5jdGlvbiAob0FjdGlvbjogYW55LCBiUmV0dXJuT25seVBhdGg6IGJvb2xlYW4sIHNBY3Rpb25OYW1lPzogc3RyaW5nLCBiQ2hlY2tTdGF0aWNWYWx1ZT86IGJvb2xlYW4pIHtcblx0XHRsZXQgc0NvbnRleHRQYXRoID0gb0FjdGlvbi5nZXRQYXRoKCkuc3BsaXQoXCIvQFwiKVswXTtcblxuXHRcdHNBY3Rpb25OYW1lID0gIXNBY3Rpb25OYW1lID8gb0FjdGlvbi5nZXRPYmplY3Qob0FjdGlvbi5nZXRQYXRoKCkpIDogc0FjdGlvbk5hbWU7XG5cblx0XHRpZiAoc0FjdGlvbk5hbWUgJiYgc0FjdGlvbk5hbWUuaW5kZXhPZihcIihcIikgPiAtMSkge1xuXHRcdFx0Ly8gYWN0aW9uIGJvdW5kIHRvIGFub3RoZXIgZW50aXR5IHR5cGVcblx0XHRcdHNBY3Rpb25OYW1lID0gc0FjdGlvbk5hbWUuc3BsaXQoXCIoXCIpWzBdO1xuXHRcdH0gZWxzZSBpZiAob0FjdGlvbi5nZXRPYmplY3Qoc0NvbnRleHRQYXRoKSkge1xuXHRcdFx0Ly8gVE9ETzogdGhpcyBsb2dpYyBzb3VuZHMgd3JvbmcsIHRvIGJlIGNvcnJlY3RlZFxuXHRcdFx0Y29uc3Qgc0VudGl0eVR5cGVOYW1lID0gb0FjdGlvbi5nZXRPYmplY3Qoc0NvbnRleHRQYXRoKS4kVHlwZTtcblx0XHRcdGNvbnN0IHNFbnRpdHlOYW1lID0gdGhpcy5nZXRFbnRpdHlTZXROYW1lKG9BY3Rpb24uZ2V0TW9kZWwoKSwgc0VudGl0eVR5cGVOYW1lKTtcblx0XHRcdGlmIChzRW50aXR5TmFtZSkge1xuXHRcdFx0XHRzQ29udGV4dFBhdGggPSBgLyR7c0VudGl0eU5hbWV9YDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHNDb250ZXh0UGF0aDtcblx0XHR9XG5cblx0XHRpZiAoYkNoZWNrU3RhdGljVmFsdWUpIHtcblx0XHRcdHJldHVybiBvQWN0aW9uLmdldE9iamVjdChgJHtzQ29udGV4dFBhdGh9LyR7c0FjdGlvbk5hbWV9QE9yZy5PRGF0YS5Db3JlLlYxLk9wZXJhdGlvbkF2YWlsYWJsZWApO1xuXHRcdH1cblx0XHRpZiAoYlJldHVybk9ubHlQYXRoKSB7XG5cdFx0XHRyZXR1cm4gYCR7c0NvbnRleHRQYXRofS8ke3NBY3Rpb25OYW1lfWA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNDb250ZXh0UGF0aDogc0NvbnRleHRQYXRoLFxuXHRcdFx0XHRzUHJvcGVydHk6IG9BY3Rpb24uZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aH0vJHtzQWN0aW9uTmFtZX1AT3JnLk9EYXRhLkNvcmUuVjEuT3BlcmF0aW9uQXZhaWxhYmxlLyRQYXRoYCksXG5cdFx0XHRcdHNCaW5kaW5nUGFyYW1ldGVyOiBvQWN0aW9uLmdldE9iamVjdChgJHtzQ29udGV4dFBhdGh9LyR7c0FjdGlvbk5hbWV9L0AkdWk1Lm92ZXJsb2FkLzAvJFBhcmFtZXRlci8wLyROYW1lYClcblx0XHRcdH07XG5cdFx0fVxuXHR9LFxuXG5cdGdldE5hdmlnYXRpb25Db250ZXh0OiBmdW5jdGlvbiAob0NvbnRleHQ6IGFueSkge1xuXHRcdHJldHVybiBPRGF0YU1vZGVsQW5ub3RhdGlvbkhlbHBlci5nZXROYXZpZ2F0aW9uUGF0aChvQ29udGV4dC5nZXRQYXRoKCkpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBwYXRoIHdpdGhvdXQgdGhlIGVudGl0eSB0eXBlIChwb3RlbnRpYWxseSBmaXJzdCkgYW5kIHByb3BlcnR5IChsYXN0KSBwYXJ0IChvcHRpb25hbCkuXG5cdCAqIFRoZSByZXN1bHQgY2FuIGJlIGFuIGVtcHR5IHN0cmluZyBpZiBpdCBpcyBhIHNpbXBsZSBkaXJlY3QgcHJvcGVydHkuXG5cdCAqXG5cdCAqIElmIGFuZCBvbmx5IGlmIHRoZSBnaXZlbiBwcm9wZXJ0eSBwYXRoIHN0YXJ0cyB3aXRoIGEgc2xhc2ggKC8pLCBpdCBpcyBjb25zaWRlcmVkIHRoYXQgdGhlIGVudGl0eSB0eXBlXG5cdCAqIGlzIHBhcnQgb2YgdGhlIHBhdGggYW5kIHdpbGwgYmUgc3RyaXBwZWQgYXdheS5cblx0ICpcblx0ICogQHBhcmFtIHNQcm9wZXJ0eVBhdGhcblx0ICogQHBhcmFtIGJLZWVwUHJvcGVydHlcblx0ICogQHJldHVybnMgVGhlIG5hdmlnYXRpb24gcGF0aFxuXHQgKi9cblx0Z2V0TmF2aWdhdGlvblBhdGg6IGZ1bmN0aW9uIChzUHJvcGVydHlQYXRoOiBhbnksIGJLZWVwUHJvcGVydHk/OiBib29sZWFuKSB7XG5cdFx0Y29uc3QgYlN0YXJ0c1dpdGhFbnRpdHlUeXBlID0gc1Byb3BlcnR5UGF0aC5zdGFydHNXaXRoKFwiL1wiKTtcblx0XHRjb25zdCBhUGFydHMgPSBzUHJvcGVydHlQYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoZnVuY3Rpb24gKHBhcnQ6IGFueSkge1xuXHRcdFx0cmV0dXJuICEhcGFydDtcblx0XHR9KTtcblx0XHRpZiAoYlN0YXJ0c1dpdGhFbnRpdHlUeXBlKSB7XG5cdFx0XHRhUGFydHMuc2hpZnQoKTtcblx0XHR9XG5cdFx0aWYgKCFiS2VlcFByb3BlcnR5KSB7XG5cdFx0XHRhUGFydHMucG9wKCk7XG5cdFx0fVxuXHRcdHJldHVybiBhUGFydHMuam9pbihcIi9cIik7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGNvcnJlY3QgbWV0YW1vZGVsIHBhdGggZm9yIGJvdW5kIGFjdGlvbnMuXG5cdCAqXG5cdCAqIFNpbmNlIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpcnJlc3BlY3RpdmUgb2YgdGhlIGFjdGlvbiB0eXBlLCB0aGlzIHdpbGwgYmUgYXBwbGllZCB0byB1bmJvdW5kIGFjdGlvbnMuXG5cdCAqIEluIHN1Y2ggYSBjYXNlLCBpZiBhbiBpbmNvcnJlY3QgcGF0aCBpcyByZXR1cm5lZCwgaXQgaXMgaWdub3JlZCBkdXJpbmcgdGVtcGxhdGluZy5cblx0ICpcblx0ICogRXhhbXBsZTogZm9yIHRoZSBib3VuZCBhY3Rpb24gc29tZU5hbWVTcGFjZS5Tb21lQm91bmRBY3Rpb24gb2YgZW50aXR5IHNldCBTb21lRW50aXR5U2V0LFxuXHQgKiB0aGUgc3RyaW5nIFwiL1NvbWVFbnRpdHlTZXQvc29tZU5hbWVTcGFjZS5Tb21lQm91bmRBY3Rpb25cIiBpcyByZXR1cm5lZC5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBzdGF0aWNcblx0ICogQG5hbWUgc2FwLmZlLm1hY3Jvcy5Db21tb25IZWxwZXIuZ2V0QWN0aW9uQ29udGV4dFxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLm1hY3Jvcy5Db21tb25IZWxwZXJcblx0ICogQHBhcmFtIG9BY3Rpb24gQ29udGV4dCBvYmplY3QgZm9yIHRoZSBhY3Rpb25cblx0ICogQHJldHVybnMgQ29ycmVjdCBtZXRhbW9kZWwgcGF0aCBmb3IgYm91bmQgYW5kIGluY29ycmVjdCBwYXRoIGZvciB1bmJvdW5kIGFjdGlvbnNcblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqL1xuXHRnZXRBY3Rpb25Db250ZXh0OiBmdW5jdGlvbiAob0FjdGlvbjogb2JqZWN0KSB7XG5cdFx0cmV0dXJuIENvbW1vbkhlbHBlci5nZXRBY3Rpb25QYXRoKG9BY3Rpb24sIHRydWUpO1xuXHR9LFxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgbWV0YW1vZGVsIHBhdGggY29ycmVjdGx5IGZvciBvdmVybG9hZGVkIGJvdW5kIGFjdGlvbnMuIEZvciB1bmJvdW5kIGFjdGlvbnMsXG5cdCAqIHRoZSBpbmNvcnJlY3QgcGF0aCBpcyByZXR1cm5lZCwgYnV0IGlnbm9yZWQgZHVyaW5nIHRlbXBsYXRpbmcuXG5cdCAqIGUuZy4gZm9yIGJvdW5kIGFjdGlvbiBzb21lTmFtZVNwYWNlLlNvbWVCb3VuZEFjdGlvbiBvZiBlbnRpdHkgc2V0IFNvbWVFbnRpdHlTZXQsXG5cdCAqIHRoZSBzdHJpbmcgXCIvU29tZUVudGl0eVNldC9zb21lTmFtZVNwYWNlLlNvbWVCb3VuZEFjdGlvbi9AJHVpNS5vdmVybG9hZC8wXCIgaXMgcmV0dXJuZWQuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAc3RhdGljXG5cdCAqIEBuYW1lIHNhcC5mZS5tYWNyb3MuQ29tbW9uSGVscGVyLmdldFBhdGhUb0JvdW5kQWN0aW9uT3ZlcmxvYWRcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5tYWNyb3MuQ29tbW9uSGVscGVyXG5cdCAqIEBwYXJhbSBvQWN0aW9uIFRoZSBjb250ZXh0IG9iamVjdCBmb3IgdGhlIGFjdGlvblxuXHQgKiBAcmV0dXJucyBUaGUgY29ycmVjdCBtZXRhbW9kZWwgcGF0aCBmb3IgYm91bmQgYWN0aW9uIG92ZXJsb2FkIGFuZCBpbmNvcnJlY3QgcGF0aCBmb3IgdW5ib3VuZCBhY3Rpb25zXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKi9cblx0Z2V0UGF0aFRvQm91bmRBY3Rpb25PdmVybG9hZDogZnVuY3Rpb24gKG9BY3Rpb246IG9iamVjdCkge1xuXHRcdGNvbnN0IHNQYXRoID0gQ29tbW9uSGVscGVyLmdldEFjdGlvblBhdGgob0FjdGlvbiwgdHJ1ZSk7XG5cdFx0cmV0dXJuIGAke3NQYXRofS9AJHVpNS5vdmVybG9hZC8wYDtcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgc3RyaW5nIHdpdGggc2luZ2xlIHF1b3Rlcy5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUubWFjcm9zLkNvbW1vbkhlbHBlclxuXHQgKiBAcGFyYW0gc1ZhbHVlIFNvbWUgc3RyaW5nIHRoYXQgbmVlZHMgdG8gYmUgY29udmVydGVkIGludG8gc2luZ2xlIHF1b3Rlc1xuXHQgKiBAcGFyYW0gW2JFc2NhcGVdIFNob3VsZCB0aGUgc3RyaW5nIGJlIGVzY2FwZWQgYmVmb3JlaGFuZFxuXHQgKiBAcmV0dXJucyAtIFN0cmluZyB3aXRoIHNpbmdsZSBxdW90ZXNcblx0ICovXG5cdGFkZFNpbmdsZVF1b3RlczogZnVuY3Rpb24gKHNWYWx1ZTogc3RyaW5nLCBiRXNjYXBlPzogYm9vbGVhbikge1xuXHRcdGlmIChiRXNjYXBlICYmIHNWYWx1ZSkge1xuXHRcdFx0c1ZhbHVlID0gdGhpcy5lc2NhcGVTaW5nbGVRdW90ZXMoc1ZhbHVlKTtcblx0XHR9XG5cdFx0cmV0dXJuIGAnJHtzVmFsdWV9J2A7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHN0cmluZyB3aXRoIGVzY2FwZWQgc2luZ2xlIHF1b3Rlcy5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUubWFjcm9zLkNvbW1vbkhlbHBlclxuXHQgKiBAcGFyYW0gc1ZhbHVlIFNvbWUgc3RyaW5nIHRoYXQgbmVlZHMgZXNjYXBpbmcgb2Ygc2luZ2xlIHF1b3Rlc1xuXHQgKiBAcmV0dXJucyAtIFN0cmluZyB3aXRoIGVzY2FwZWQgc2luZ2xlIHF1b3Rlc1xuXHQgKi9cblx0ZXNjYXBlU2luZ2xlUXVvdGVzOiBmdW5jdGlvbiAoc1ZhbHVlOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gc1ZhbHVlLnJlcGxhY2UoL1snXS9nLCBcIlxcXFwnXCIpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBmdW5jdGlvbiBzdHJpbmdcblx0ICogVGhlIGZpcnN0IGFyZ3VtZW50IG9mIGdlbmVyYXRlRnVuY3Rpb24gaXMgbmFtZSBvZiB0aGUgZ2VuZXJhdGVkIGZ1bmN0aW9uIHN0cmluZy5cblx0ICogUmVtYWluaW5nIGFyZ3VtZW50cyBvZiBnZW5lcmF0ZUZ1bmN0aW9uIGFyZSBhcmd1bWVudHMgb2YgdGhlIG5ld2x5IGdlbmVyYXRlZCBmdW5jdGlvbiBzdHJpbmcuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLm1hY3Jvcy5Db21tb25IZWxwZXJcblx0ICogQHBhcmFtIHNGdW5jTmFtZSBTb21lIHN0cmluZyBmb3IgdGhlIGZ1bmN0aW9uIG5hbWVcblx0ICogQHBhcmFtIGFyZ3MgVGhlIHJlbWFpbmluZyBhcmd1bWVudHNcblx0ICogQHJldHVybnMgLSBGdW5jdGlvbiBzdHJpbmcgZGVwZW5kcyBvbiBhcmd1bWVudHMgcGFzc2VkXG5cdCAqL1xuXHRnZW5lcmF0ZUZ1bmN0aW9uOiBmdW5jdGlvbiAoc0Z1bmNOYW1lOiBzdHJpbmcsIC4uLmFyZ3M6IHN0cmluZ1tdKSB7XG5cdFx0bGV0IHNQYXJhbXMgPSBcIlwiO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuXHRcdFx0c1BhcmFtcyArPSBhcmdzW2ldO1xuXHRcdFx0aWYgKGkgPCBhcmdzLmxlbmd0aCAtIDEpIHtcblx0XHRcdFx0c1BhcmFtcyArPSBcIiwgXCI7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0bGV0IHNGdW5jdGlvbiA9IGAke3NGdW5jTmFtZX0oKWA7XG5cdFx0aWYgKHNQYXJhbXMpIHtcblx0XHRcdHNGdW5jdGlvbiA9IGAke3NGdW5jTmFtZX0oJHtzUGFyYW1zfSlgO1xuXHRcdH1cblx0XHRyZXR1cm4gc0Z1bmN0aW9uO1xuXHR9LFxuXHQvKlxuXHQgKiBSZXR1cm5zIHRoZSB2aXNpYmlsaXR5IGV4cHJlc3Npb24gZm9yIGRhdGFwb2ludCB0aXRsZS9saW5rXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge3N0cmluZ30gW3NQYXRoXSBhbm5vdGF0aW9uIHBhdGggb2YgZGF0YSBwb2ludCBvciBNaWNyb2NoYXJ0XG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW2JMaW5rXSB0cnVlIGlmIGxpbmsgdmlzaWJpbGl0eSBpcyBiZWluZyBkZXRlcm1pbmVkLCBmYWxzZSBpZiB0aXRsZSB2aXNpYmlsaXR5IGlzIGJlaW5nIGRldGVybWluZWRcblx0ICogQHBhcmFtIHtib29sZWFufSBbYkZpZWxkVmlzaWJpbGl0eV0gdHJ1ZSBpZiBmaWVsZCBpcyB2c2lpYmxlLCBmYWxzZSBvdGhlcndpc2Vcblx0ICogQHJldHVybnMgIHtzdHJpbmd9IHNWaXNpYmlsaXR5RXhwIFVzZWQgdG8gZ2V0IHRoZSAgdmlzaWJpbGl0eSBiaW5kaW5nIGZvciBEYXRhUG9pbnRzIHRpdGxlIGluIHRoZSBIZWFkZXIuXG5cdCAqXG5cdCAqL1xuXG5cdGdldEhlYWRlckRhdGFQb2ludExpbmtWaXNpYmlsaXR5OiBmdW5jdGlvbiAoc1BhdGg6IGFueSwgYkxpbms6IGFueSwgYkZpZWxkVmlzaWJpbGl0eTogYW55KSB7XG5cdFx0bGV0IHNWaXNpYmlsaXR5RXhwO1xuXHRcdGlmIChiRmllbGRWaXNpYmlsaXR5KSB7XG5cdFx0XHRzVmlzaWJpbGl0eUV4cCA9IGJMaW5rXG5cdFx0XHRcdD8gXCJ7PSAke2ludGVybmFsPmlzSGVhZGVyRFBMaW5rVmlzaWJsZS9cIiArIHNQYXRoICsgXCJ9ID09PSB0cnVlICYmIFwiICsgYkZpZWxkVmlzaWJpbGl0eSArIFwifVwiXG5cdFx0XHRcdDogXCJ7PSAke2ludGVybmFsPmlzSGVhZGVyRFBMaW5rVmlzaWJsZS9cIiArIHNQYXRoICsgXCJ9ICE9PSB0cnVlICYmIFwiICsgYkZpZWxkVmlzaWJpbGl0eSArIFwifVwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzVmlzaWJpbGl0eUV4cCA9IGJMaW5rXG5cdFx0XHRcdD8gXCJ7PSAke2ludGVybmFsPmlzSGVhZGVyRFBMaW5rVmlzaWJsZS9cIiArIHNQYXRoICsgXCJ9ID09PSB0cnVlfVwiXG5cdFx0XHRcdDogXCJ7PSAke2ludGVybmFsPmlzSGVhZGVyRFBMaW5rVmlzaWJsZS9cIiArIHNQYXRoICsgXCJ9ICE9PSB0cnVlfVwiO1xuXHRcdH1cblx0XHRyZXR1cm4gc1Zpc2liaWxpdHlFeHA7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIG9iamVjdCB0byBzdHJpbmcoZGlmZmVyZW50IGZyb20gSlNPTi5zdHJpbmdpZnkgb3IudG9TdHJpbmcpLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG1lbWJlcm9mIHNhcC5mZS5tYWNyb3MuQ29tbW9uSGVscGVyXG5cdCAqIEBwYXJhbSBvUGFyYW1zIFNvbWUgb2JqZWN0XG5cdCAqIEByZXR1cm5zIC0gT2JqZWN0IHN0cmluZ1xuXHQgKi9cblx0b2JqZWN0VG9TdHJpbmc6IGZ1bmN0aW9uIChvUGFyYW1zOiBhbnkpIHtcblx0XHRsZXQgaU51bWJlck9mS2V5cyA9IE9iamVjdC5rZXlzKG9QYXJhbXMpLmxlbmd0aCxcblx0XHRcdHNQYXJhbXMgPSBcIlwiO1xuXG5cdFx0Zm9yIChjb25zdCBzS2V5IGluIG9QYXJhbXMpIHtcblx0XHRcdGxldCBzVmFsdWUgPSBvUGFyYW1zW3NLZXldO1xuXHRcdFx0aWYgKHNWYWx1ZSAmJiB0eXBlb2Ygc1ZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdHNWYWx1ZSA9IHRoaXMub2JqZWN0VG9TdHJpbmcoc1ZhbHVlKTtcblx0XHRcdH1cblx0XHRcdHNQYXJhbXMgKz0gYCR7c0tleX06ICR7c1ZhbHVlfWA7XG5cdFx0XHRpZiAoaU51bWJlck9mS2V5cyA+IDEpIHtcblx0XHRcdFx0LS1pTnVtYmVyT2ZLZXlzO1xuXHRcdFx0XHRzUGFyYW1zICs9IFwiLCBcIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gYHsgJHtzUGFyYW1zfX1gO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIGVzY2FwZSBjaGFyYWN0ZXJzIChcXCkgZnJvbSBhbiBleHByZXNzaW9uLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG1lbWJlcm9mIHNhcC5mZS5tYWNyb3MuQ29tbW9uSGVscGVyXG5cdCAqIEBwYXJhbSBzRXhwcmVzc2lvbiBBbiBleHByZXNzaW9uIHdpdGggZXNjYXBlIGNoYXJhY3RlcnNcblx0ICogQHJldHVybnMgRXhwcmVzc2lvbiBzdHJpbmcgd2l0aG91dCBlc2NhcGUgY2hhcmFjdGVycyBvciB1bmRlZmluZWRcblx0ICovXG5cdHJlbW92ZUVzY2FwZUNoYXJhY3RlcnM6IGZ1bmN0aW9uIChzRXhwcmVzc2lvbjogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHNFeHByZXNzaW9uID8gc0V4cHJlc3Npb24ucmVwbGFjZSgvXFxcXD9cXFxcKFt7fV0pL2csIFwiJDFcIikgOiB1bmRlZmluZWQ7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ha2VzIHVwZGF0ZXMgdG8gYSBzdHJpbmdpZmllZCBvYmplY3Qgc28gdGhhdCBpdCB3b3JrcyBwcm9wZXJseSBpbiBhIHRlbXBsYXRlIGJ5IGFkZGluZyB1aTVPYmplY3Q6dHJ1ZS5cblx0ICpcblx0ICogQHBhcmFtIHNTdHJpbmdpZmllZFxuXHQgKiBAcmV0dXJucyBUaGUgdXBkYXRlZCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdFxuXHQgKi9cblx0c3RyaW5naWZ5T2JqZWN0OiBmdW5jdGlvbiAoc1N0cmluZ2lmaWVkOiBzdHJpbmcpIHtcblx0XHRpZiAoIXNTdHJpbmdpZmllZCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3Qgb09iamVjdCA9IEpTT04ucGFyc2Uoc1N0cmluZ2lmaWVkKTtcblx0XHRcdGlmICh0eXBlb2Ygb09iamVjdCA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShvT2JqZWN0KSkge1xuXHRcdFx0XHRjb25zdCBvVUk1T2JqZWN0ID0ge1xuXHRcdFx0XHRcdHVpNW9iamVjdDogdHJ1ZVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRPYmplY3QuYXNzaWduKG9VSTVPYmplY3QsIG9PYmplY3QpO1xuXHRcdFx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkob1VJNU9iamVjdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBzVHlwZSA9IEFycmF5LmlzQXJyYXkob09iamVjdCkgPyBcIkFycmF5XCIgOiB0eXBlb2Ygb09iamVjdDtcblx0XHRcdFx0TG9nLmVycm9yKGBVbmV4cGVjdGVkIG9iamVjdCB0eXBlIGluIHN0cmluZ2lmeU9iamVjdCAoJHtzVHlwZX0pIC0gb25seSB3b3JrcyB3aXRoIG9iamVjdGApO1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJzdHJpbmdpZnlPYmplY3Qgb25seSB3b3JrcyB3aXRoIG9iamVjdHMhXCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogQ3JlYXRlIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBkYXRhLCB0YWtpbmcgY2FyZSB0aGF0IGl0IGlzIG5vdCB0cmVhdGVkIGFzIGEgYmluZGluZyBleHByZXNzaW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0gdkRhdGEgVGhlIGRhdGEgdG8gc3RyaW5naWZ5XG5cdCAqIEByZXR1cm5zIFRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGEuXG5cdCAqL1xuXHRzdHJpbmdpZnlDdXN0b21EYXRhOiBmdW5jdGlvbiAodkRhdGE6IG9iamVjdCkge1xuXHRcdGNvbnN0IG9PYmplY3Q6IGFueSA9IHtcblx0XHRcdHVpNW9iamVjdDogdHJ1ZVxuXHRcdH07XG5cdFx0b09iamVjdFtcImN1c3RvbURhdGFcIl0gPSB2RGF0YSBpbnN0YW5jZW9mIENvbnRleHQgPyB2RGF0YS5nZXRPYmplY3QoKSA6IHZEYXRhO1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShvT2JqZWN0KTtcblx0fSxcblxuXHQvKipcblx0ICogUGFyc2VzIHRoZSBnaXZlbiBkYXRhLCBwb3RlbnRpYWxseSB1bndyYXBzIHRoZSBkYXRhLlxuXHQgKlxuXHQgKiBAcGFyYW0gdkRhdGEgVGhlIGRhdGEgdG8gcGFyc2Vcblx0ICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiB0aGUgZGF0YSBwYXJzaW5nXG5cdCAqL1xuXHRwYXJzZUN1c3RvbURhdGE6IGZ1bmN0aW9uICh2RGF0YTogYW55KSB7XG5cdFx0dkRhdGEgPSB0eXBlb2YgdkRhdGEgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKHZEYXRhKSA6IHZEYXRhO1xuXHRcdGlmICh2RGF0YSAmJiB2RGF0YS5oYXNPd25Qcm9wZXJ0eShcImN1c3RvbURhdGFcIikpIHtcblx0XHRcdHJldHVybiB2RGF0YVtcImN1c3RvbURhdGFcIl07XG5cdFx0fVxuXHRcdHJldHVybiB2RGF0YTtcblx0fSxcblx0LyoqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfZ2V0RHJhZnRBZG1pbmlzdHJhdGl2ZURhdGFUeXBlXG5cdCAqIEBwYXJhbSBvTWV0YU1vZGVsXG5cdCAqIEBwYXJhbSBzRW50aXR5VHlwZSBUaGUgRW50aXR5VHlwZSBuYW1lXG5cdCAqIEByZXR1cm5zIFRoZSBEcmFmdEFkbWluaXN0cmF0aXZlRGF0YVxuXHQgKi9cblx0X2dldERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhVHlwZTogZnVuY3Rpb24gKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzRW50aXR5VHlwZTogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIG9NZXRhTW9kZWwucmVxdWVzdE9iamVjdChgLyR7c0VudGl0eVR5cGV9L0RyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL2ApO1xuXHR9LFxuXHQvKipcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIGdldFBvcG92ZXJUZXh0XG5cdCAqIEBwYXJhbSBpQ29udGV4dFxuXHQgKiBAcGFyYW0gc0VudGl0eVR5cGUgVGhlIEVudGl0eVR5cGUgbmFtZVxuXHQgKiBAcmV0dXJucyBUaGUgQmluZGluZyBFeHByZXNzaW9uIGZvciB0aGUgZHJhZnQgcG9wb3ZlclxuXHQgKi9cblx0Z2V0UG9wb3ZlclRleHQ6IGZ1bmN0aW9uIChpQ29udGV4dDogYW55LCBzRW50aXR5VHlwZTogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIENvbW1vbkhlbHBlci5fZ2V0RHJhZnRBZG1pbmlzdHJhdGl2ZURhdGFUeXBlKGlDb250ZXh0LmdldE1vZGVsKCksIHNFbnRpdHlUeXBlKS50aGVuKGZ1bmN0aW9uIChvREFERW50aXR5VHlwZSkge1xuXHRcdFx0bGV0IHNCaW5kaW5nID1cblx0XHRcdFx0XCJ7cGFydHM6IFt7cGF0aDogJ0hhc0RyYWZ0RW50aXR5JywgdGFyZ2V0VHlwZTogJ2FueSd9LCBcIiArXG5cdFx0XHRcdC8vXCJ7cGF0aDogJ0RyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0xhc3RDaGFuZ2VEYXRlVGltZSd9LCBcIiArXG5cdFx0XHRcdFwie3BhdGg6ICdEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9JblByb2Nlc3NCeVVzZXInfSwgXCIgK1xuXHRcdFx0XHRcIntwYXRoOiAnRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvTGFzdENoYW5nZWRCeVVzZXInfSBcIjtcblx0XHRcdGlmIChvREFERW50aXR5VHlwZS5JblByb2Nlc3NCeVVzZXJEZXNjcmlwdGlvbikge1xuXHRcdFx0XHRzQmluZGluZyArPSBcIiAse3BhdGg6ICdEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9JblByb2Nlc3NCeVVzZXJEZXNjcmlwdGlvbid9XCI7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChvREFERW50aXR5VHlwZS5MYXN0Q2hhbmdlZEJ5VXNlckRlc2NyaXB0aW9uKSB7XG5cdFx0XHRcdHNCaW5kaW5nICs9IFwiLCB7cGF0aDogJ0RyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0xhc3RDaGFuZ2VkQnlVc2VyRGVzY3JpcHRpb24nfVwiO1xuXHRcdFx0fVxuXHRcdFx0c0JpbmRpbmcgKz0gXCJdLCBmb3JtYXR0ZXI6ICdzYXAuZmUubWFjcm9zLmZpZWxkLkZpZWxkUnVudGltZS5mb3JtYXREcmFmdE93bmVyVGV4dEluUG9wb3Zlcid9XCI7XG5cdFx0XHRyZXR1cm4gc0JpbmRpbmc7XG5cdFx0fSk7XG5cdH0sXG5cdGdldENvbnRleHRQYXRoOiBmdW5jdGlvbiAob1ZhbHVlOiBhbnksIG9JbnRlcmZhY2U6IGFueSkge1xuXHRcdGNvbnN0IHNQYXRoID0gb0ludGVyZmFjZSAmJiBvSW50ZXJmYWNlLmNvbnRleHQgJiYgb0ludGVyZmFjZS5jb250ZXh0LmdldFBhdGgoKTtcblx0XHRyZXR1cm4gc1BhdGhbc1BhdGgubGVuZ3RoIC0gMV0gPT09IFwiL1wiID8gc1BhdGguc2xpY2UoMCwgLTEpIDogc1BhdGg7XG5cdH0sXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgc3RyaW5naWZpZWQgSlNPTiBvYmplY3QgY29udGFpbmluZyAgUHJlc2VudGF0aW9uIFZhcmlhbnQgc29ydCBjb25kaXRpb25zLlxuXHQgKlxuXHQgKiBAcGFyYW0gb0NvbnRleHRcblx0ICogQHBhcmFtIG9QcmVzZW50YXRpb25WYXJpYW50IFByZXNlbnRhdGlvbiB2YXJpYW50IEFubm90YXRpb25cblx0ICogQHBhcmFtIHNQcmVzZW50YXRpb25WYXJpYW50UGF0aFxuXHQgKiBAcmV0dXJucyBTdHJpbmdpZmllZCBKU09OIG9iamVjdFxuXHQgKi9cblx0Z2V0U29ydENvbmRpdGlvbnM6IGZ1bmN0aW9uIChvQ29udGV4dDogYW55LCBvUHJlc2VudGF0aW9uVmFyaWFudDogYW55LCBzUHJlc2VudGF0aW9uVmFyaWFudFBhdGg6IHN0cmluZykge1xuXHRcdGlmIChcblx0XHRcdG9QcmVzZW50YXRpb25WYXJpYW50ICYmXG5cdFx0XHRDb21tb25IZWxwZXIuX2lzUHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24oc1ByZXNlbnRhdGlvblZhcmlhbnRQYXRoKSAmJlxuXHRcdFx0b1ByZXNlbnRhdGlvblZhcmlhbnQuU29ydE9yZGVyXG5cdFx0KSB7XG5cdFx0XHRjb25zdCBhU29ydENvbmRpdGlvbnM6IGFueSA9IHtcblx0XHRcdFx0c29ydGVyczogW11cblx0XHRcdH07XG5cblx0XHRcdGNvbnN0IHNFbnRpdHlQYXRoID0gb0NvbnRleHQuZ2V0UGF0aCgwKS5zcGxpdChcIkBcIilbMF07XG5cdFx0XHRvUHJlc2VudGF0aW9uVmFyaWFudC5Tb3J0T3JkZXIuZm9yRWFjaChmdW5jdGlvbiAob0NvbmRpdGlvbjogYW55ID0ge30pIHtcblx0XHRcdFx0bGV0IG9Tb3J0UHJvcGVydHk6IGFueSA9IHt9O1xuXHRcdFx0XHRjb25zdCBvU29ydGVyOiBhbnkgPSB7fTtcblx0XHRcdFx0aWYgKG9Db25kaXRpb24uRHluYW1pY1Byb3BlcnR5KSB7XG5cdFx0XHRcdFx0b1NvcnRQcm9wZXJ0eSA9IG9Db250ZXh0LmdldE1vZGVsKDApLmdldE9iamVjdChzRW50aXR5UGF0aCArIG9Db25kaXRpb24uRHluYW1pY1Byb3BlcnR5LiRBbm5vdGF0aW9uUGF0aCk/Lk5hbWU7XG5cdFx0XHRcdH0gZWxzZSBpZiAob0NvbmRpdGlvbi5Qcm9wZXJ0eSkge1xuXHRcdFx0XHRcdG9Tb3J0UHJvcGVydHkgPSBvQ29uZGl0aW9uLlByb3BlcnR5LiRQcm9wZXJ0eVBhdGg7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG9Tb3J0UHJvcGVydHkpIHtcblx0XHRcdFx0XHRvU29ydGVyLm5hbWUgPSBvU29ydFByb3BlcnR5O1xuXHRcdFx0XHRcdG9Tb3J0ZXIuZGVzY2VuZGluZyA9ICEhb0NvbmRpdGlvbi5EZXNjZW5kaW5nO1xuXHRcdFx0XHRcdGFTb3J0Q29uZGl0aW9ucy5zb3J0ZXJzLnB1c2gob1NvcnRlcik7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIGRlZmluZSB0aGUgcmlnaHQgcGF0aCB0byB0aGUgc29ydCBwcm9wZXJ0eVwiKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYVNvcnRDb25kaXRpb25zKTtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fSxcblx0X2lzUHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb246IGZ1bmN0aW9uIChzQW5ub3RhdGlvblBhdGg6IHN0cmluZykge1xuXHRcdHJldHVybiAoXG5cdFx0XHRzQW5ub3RhdGlvblBhdGguaW5kZXhPZihcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5QcmVzZW50YXRpb25WYXJpYW50XCIpID4gLTEgfHxcblx0XHRcdHNBbm5vdGF0aW9uUGF0aC5pbmRleE9mKFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRcIikgPiAtMVxuXHRcdCk7XG5cdH0sXG5cdGNyZWF0ZVByZXNlbnRhdGlvblBhdGhDb250ZXh0OiBmdW5jdGlvbiAob1ByZXNlbnRhdGlvbkNvbnRleHQ6IGFueSkge1xuXHRcdGNvbnN0IGFQYXRocyA9IG9QcmVzZW50YXRpb25Db250ZXh0LnNQYXRoLnNwbGl0KFwiQFwiKSB8fCBbXTtcblx0XHRjb25zdCBvTW9kZWwgPSBvUHJlc2VudGF0aW9uQ29udGV4dC5nZXRNb2RlbCgpO1xuXHRcdGlmIChhUGF0aHMubGVuZ3RoICYmIGFQYXRoc1thUGF0aHMubGVuZ3RoIC0gMV0uaW5kZXhPZihcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRcIikgPiAtMSkge1xuXHRcdFx0Y29uc3Qgc1BhdGggPSBvUHJlc2VudGF0aW9uQ29udGV4dC5zUGF0aC5zcGxpdChcIi9QcmVzZW50YXRpb25WYXJpYW50XCIpWzBdO1xuXHRcdFx0cmV0dXJuIG9Nb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHtzUGF0aH1Ac2FwdWkubmFtZWApO1xuXHRcdH1cblx0XHRyZXR1cm4gb01vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAke29QcmVzZW50YXRpb25Db250ZXh0LnNQYXRofUBzYXB1aS5uYW1lYCk7XG5cdH0sXG5cdGdldFByZXNzSGFuZGxlckZvckRhdGFGaWVsZEZvcklCTjogZnVuY3Rpb24gKG9EYXRhRmllbGQ6IGFueSwgc0NvbnRleHQ6IHN0cmluZywgYk5hdmlnYXRlV2l0aENvbmZpcm1hdGlvbkRpYWxvZzogYm9vbGVhbikge1xuXHRcdGNvbnN0IG1OYXZpZ2F0aW9uUGFyYW1ldGVyczogYW55ID0ge1xuXHRcdFx0bmF2aWdhdGlvbkNvbnRleHRzOiBzQ29udGV4dCA/IHNDb250ZXh0IDogXCIkeyRzb3VyY2U+L30uZ2V0QmluZGluZ0NvbnRleHQoKVwiXG5cdFx0fTtcblx0XHRpZiAob0RhdGFGaWVsZC5SZXF1aXJlc0NvbnRleHQgJiYgIW9EYXRhRmllbGQuSW5saW5lICYmIGJOYXZpZ2F0ZVdpdGhDb25maXJtYXRpb25EaWFsb2cpIHtcblx0XHRcdG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5hcHBsaWNhYmxlQ29udGV4dHMgPVxuXHRcdFx0XHRcIiR7aW50ZXJuYWw+aWJuL1wiICsgb0RhdGFGaWVsZC5TZW1hbnRpY09iamVjdCArIFwiLVwiICsgb0RhdGFGaWVsZC5BY3Rpb24gKyBcIi9hQXBwbGljYWJsZS99XCI7XG5cdFx0XHRtTmF2aWdhdGlvblBhcmFtZXRlcnMubm90QXBwbGljYWJsZUNvbnRleHRzID1cblx0XHRcdFx0XCIke2ludGVybmFsPmlibi9cIiArIG9EYXRhRmllbGQuU2VtYW50aWNPYmplY3QgKyBcIi1cIiArIG9EYXRhRmllbGQuQWN0aW9uICsgXCIvYU5vdEFwcGxpY2FibGUvfVwiO1xuXHRcdFx0bU5hdmlnYXRpb25QYXJhbWV0ZXJzLmxhYmVsID0gdGhpcy5hZGRTaW5nbGVRdW90ZXMob0RhdGFGaWVsZC5MYWJlbCwgdHJ1ZSk7XG5cdFx0fVxuXHRcdGlmIChvRGF0YUZpZWxkLk1hcHBpbmcpIHtcblx0XHRcdG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5zZW1hbnRpY09iamVjdE1hcHBpbmcgPSB0aGlzLmFkZFNpbmdsZVF1b3RlcyhKU09OLnN0cmluZ2lmeShvRGF0YUZpZWxkLk1hcHBpbmcpKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZ2VuZXJhdGVGdW5jdGlvbihcblx0XHRcdGJOYXZpZ2F0ZVdpdGhDb25maXJtYXRpb25EaWFsb2cgPyBcIi5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlV2l0aENvbmZpcm1hdGlvbkRpYWxvZ1wiIDogXCIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZVwiLFxuXHRcdFx0dGhpcy5hZGRTaW5nbGVRdW90ZXMob0RhdGFGaWVsZC5TZW1hbnRpY09iamVjdCksXG5cdFx0XHR0aGlzLmFkZFNpbmdsZVF1b3RlcyhvRGF0YUZpZWxkLkFjdGlvbiksXG5cdFx0XHR0aGlzLm9iamVjdFRvU3RyaW5nKG1OYXZpZ2F0aW9uUGFyYW1ldGVycylcblx0XHQpO1xuXHR9LFxuXHRnZXRFbnRpdHlTZXQ6IGZ1bmN0aW9uIChvQ29udGV4dDogYW55KSB7XG5cdFx0Y29uc3Qgc1BhdGggPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0cmV0dXJuIE1vZGVsSGVscGVyLmdldEVudGl0eVNldFBhdGgoc1BhdGgpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSB2aXNpYmlsaXR5IG9mIGZvcm0gbWVudSBhY3Rpb25zIGJvdGggaW4gcGF0aCBiYXNlZCBhbmQgc3RhdGljIHZhbHVlIHNjZW5hcmlvcy5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUubWFjcm9zLkNvbW1vbkhlbHBlclxuXHQgKiBAcGFyYW0gc1Zpc2libGVWYWx1ZSBFaXRoZXIgc3RhdGljIGJvb2xlYW4gdmFsdWVzIG9yIEFycmF5IG9mIHBhdGggZXhwcmVzc2lvbnMgZm9yIHZpc2liaWxpdHkgb2YgbWVudSBidXR0b24uXG5cdCAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZGV0ZXJtaW5pbmcgdGhlIHZpc2liaWxpdHkgb2YgbWVudSBhY3Rpb25zLlxuXHQgKi9cblx0aGFuZGxlVmlzaWJpbGl0eU9mTWVudUFjdGlvbnM6IGZ1bmN0aW9uIChzVmlzaWJsZVZhbHVlOiBhbnkpIHtcblx0XHRjb25zdCBjb21iaW5lZENvbmRpdGlvbnMgPSBbXTtcblx0XHRpZiAoQXJyYXkuaXNBcnJheShzVmlzaWJsZVZhbHVlKSkge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzVmlzaWJsZVZhbHVlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChzVmlzaWJsZVZhbHVlW2ldLmluZGV4T2YoXCJ7XCIpID4gLTEgJiYgc1Zpc2libGVWYWx1ZVtpXS5pbmRleE9mKFwiez1cIikgPT09IC0xKSB7XG5cdFx0XHRcdFx0c1Zpc2libGVWYWx1ZVtpXSA9IFwiez1cIiArIHNWaXNpYmxlVmFsdWVbaV0gKyBcIn1cIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoc1Zpc2libGVWYWx1ZVtpXS5zcGxpdChcIns9XCIpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRzVmlzaWJsZVZhbHVlW2ldID0gc1Zpc2libGVWYWx1ZVtpXS5zcGxpdChcIns9XCIpWzFdLnNsaWNlKDAsIC0xKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb21iaW5lZENvbmRpdGlvbnMucHVzaChgKCR7c1Zpc2libGVWYWx1ZVtpXX0pYCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBjb21iaW5lZENvbmRpdGlvbnMubGVuZ3RoID4gMCA/IGB7PSAke2NvbWJpbmVkQ29uZGl0aW9ucy5qb2luKFwiIHx8IFwiKX19YCA6IHNWaXNpYmxlVmFsdWU7XG5cdH0sXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZG8gdGhlIGNhbGN1bGF0aW9uIG9mIGNyaXRpY2FsaXR5IGluIGNhc2UgQ3JpdGljYWxpdHlDYWxjdWxhdGlvbiBwcmVzZW50IGluIHRoZSBhbm5vdGF0aW9uXG5cdCAqXG5cdCAqIFRoZSBjYWxjdWxhdGlvbiBpcyBkb25lIGJ5IGNvbXBhcmluZyBhIHZhbHVlIHRvIHRoZSB0aHJlc2hvbGQgdmFsdWVzIHJlbGV2YW50IGZvciB0aGUgc3BlY2lmaWVkIGltcHJvdmVtZW50IGRpcmVjdGlvbi5cblx0ICogRm9yIGltcHJvdmVtZW50IGRpcmVjdGlvbiBUYXJnZXQsIHRoZSBjcml0aWNhbGl0eSBpcyBjYWxjdWxhdGVkIHVzaW5nIGJvdGggbG93IGFuZCBoaWdoIHRocmVzaG9sZCB2YWx1ZXMuIEl0IHdpbGwgYmVcblx0ICpcblx0ICogLSBQb3NpdGl2ZSBpZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIEFjY2VwdGFuY2VSYW5nZUxvd1ZhbHVlIGFuZCBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIEFjY2VwdGFuY2VSYW5nZUhpZ2hWYWx1ZVxuXHQgKiAtIE5ldXRyYWwgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBUb2xlcmFuY2VSYW5nZUxvd1ZhbHVlIGFuZCBsb3dlciB0aGFuIEFjY2VwdGFuY2VSYW5nZUxvd1ZhbHVlIE9SIGdyZWF0ZXIgdGhhbiBBY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWUgYW5kIGxvd2VyIHRoYW4gb3IgZXF1YWwgdG8gVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWVcblx0ICogLSBDcml0aWNhbCBpZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIERldmlhdGlvblJhbmdlTG93VmFsdWUgYW5kIGxvd2VyIHRoYW4gVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSBPUiBncmVhdGVyIHRoYW4gVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWUgYW5kIGxvd2VyIHRoYW4gb3IgZXF1YWwgdG8gRGV2aWF0aW9uUmFuZ2VIaWdoVmFsdWVcblx0ICogLSBOZWdhdGl2ZSBpZiB0aGUgdmFsdWUgaXMgbG93ZXIgdGhhbiBEZXZpYXRpb25SYW5nZUxvd1ZhbHVlIG9yIGdyZWF0ZXIgdGhhbiBEZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZVxuXHQgKlxuXHQgKiBGb3IgaW1wcm92ZW1lbnQgZGlyZWN0aW9uIE1pbmltaXplLCB0aGUgY3JpdGljYWxpdHkgaXMgY2FsY3VsYXRlZCB1c2luZyB0aGUgaGlnaCB0aHJlc2hvbGQgdmFsdWVzLiBJdCBpc1xuXHQgKiAtIFBvc2l0aXZlIGlmIHRoZSB2YWx1ZSBpcyBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIEFjY2VwdGFuY2VSYW5nZUhpZ2hWYWx1ZVxuXHQgKiAtIE5ldXRyYWwgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBBY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWUgYW5kIGxvd2VyIHRoYW4gb3IgZXF1YWwgdG8gVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWVcblx0ICogLSBDcml0aWNhbCBpZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIFRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlIGFuZCBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIERldmlhdGlvblJhbmdlSGlnaFZhbHVlXG5cdCAqIC0gTmVnYXRpdmUgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBEZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZVxuXHQgKlxuXHQgKiBGb3IgaW1wcm92ZW1lbnQgZGlyZWN0aW9uIE1heGltaXplLCB0aGUgY3JpdGljYWxpdHkgaXMgY2FsY3VsYXRlZCB1c2luZyB0aGUgbG93IHRocmVzaG9sZCB2YWx1ZXMuIEl0IGlzXG5cdCAqXG5cdCAqIC0gUG9zaXRpdmUgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBBY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZVxuXHQgKiAtIE5ldXRyYWwgaWYgdGhlIHZhbHVlIGlzIGxlc3MgdGhhbiBBY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZSBhbmQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIFRvbGVyYW5jZVJhbmdlTG93VmFsdWVcblx0ICogLSBDcml0aWNhbCBpZiB0aGUgdmFsdWUgaXMgbG93ZXIgdGhhbiBUb2xlcmFuY2VSYW5nZUxvd1ZhbHVlIGFuZCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gRGV2aWF0aW9uUmFuZ2VMb3dWYWx1ZVxuXHQgKiAtIE5lZ2F0aXZlIGlmIHRoZSB2YWx1ZSBpcyBsb3dlciB0aGFuIERldmlhdGlvblJhbmdlTG93VmFsdWVcblx0ICpcblx0ICogVGhyZXNob2xkcyBhcmUgb3B0aW9uYWwuIEZvciB1bmFzc2lnbmVkIHZhbHVlcywgZGVmYXVsdHMgYXJlIGRldGVybWluZWQgaW4gdGhpcyBvcmRlcjpcblx0ICpcblx0ICogLSBGb3IgRGV2aWF0aW9uUmFuZ2UsIGFuIG9taXR0ZWQgTG93VmFsdWUgdHJhbnNsYXRlcyBpbnRvIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBudW1iZXIgKC1JTkYpLCBhbiBvbWl0dGVkIEhpZ2hWYWx1ZSB0cmFuc2xhdGVzIGludG8gdGhlIGxhcmdlc3QgcG9zc2libGUgbnVtYmVyICgrSU5GKVxuXHQgKiAtIEZvciBUb2xlcmFuY2VSYW5nZSwgYW4gb21pdHRlZCBMb3dWYWx1ZSB3aWxsIGJlIGluaXRpYWxpemVkIHdpdGggRGV2aWF0aW9uUmFuZ2VMb3dWYWx1ZSwgYW4gb21pdHRlZCBIaWdoVmFsdWUgd2lsbCBiZSBpbml0aWFsaXplZCB3aXRoIERldmlhdGlvblJhbmdlSGlnaFZhbHVlXG5cdCAqIC0gRm9yIEFjY2VwdGFuY2VSYW5nZSwgYW4gb21pdHRlZCBMb3dWYWx1ZSB3aWxsIGJlIGluaXRpYWxpemVkIHdpdGggVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSwgYW4gb21pdHRlZCBIaWdoVmFsdWUgd2lsbCBiZSBpbml0aWFsaXplZCB3aXRoIFRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlLlxuXHQgKlxuXHQgKiBAcGFyYW0gc0ltcHJvdmVtZW50RGlyZWN0aW9uIEltcHJvdmVtZW50RGlyZWN0aW9uIHRvIGJlIHVzZWQgZm9yIGNyZWF0aW5nIHRoZSBjcml0aWNhbGl0eSBiaW5kaW5nXG5cdCAqIEBwYXJhbSBzVmFsdWUgVmFsdWUgZnJvbSBEYXRhcG9pbnQgdG8gYmUgbWVhc3VyZWRcblx0ICogQHBhcmFtIHNEZXZpYXRpb25Mb3cgRXhwcmVzc2lvbkJpbmRpbmcgZm9yIExvd2VyIERldmlhdGlvbiBsZXZlbFxuXHQgKiBAcGFyYW0gc1RvbGVyYW5jZUxvdyBFeHByZXNzaW9uQmluZGluZyBmb3IgTG93ZXIgVG9sZXJhbmNlIGxldmVsXG5cdCAqIEBwYXJhbSBzQWNjZXB0YW5jZUxvdyBFeHByZXNzaW9uQmluZGluZyBmb3IgTG93ZXIgQWNjZXB0YW5jZSBsZXZlbFxuXHQgKiBAcGFyYW0gc0FjY2VwdGFuY2VIaWdoIEV4cHJlc3Npb25CaW5kaW5nIGZvciBIaWdoZXIgQWNjZXB0YW5jZSBsZXZlbFxuXHQgKiBAcGFyYW0gc1RvbGVyYW5jZUhpZ2ggRXhwcmVzc2lvbkJpbmRpbmcgZm9yIEhpZ2hlciBUb2xlcmFuY2UgbGV2ZWxcblx0ICogQHBhcmFtIHNEZXZpYXRpb25IaWdoIEV4cHJlc3Npb25CaW5kaW5nIGZvciBIaWdoZXIgRGV2aWF0aW9uIGxldmVsXG5cdCAqIEByZXR1cm5zIFJldHVybnMgY3JpdGljYWxpdHkgY2FsY3VsYXRpb24gYXMgZXhwcmVzc2lvbiBiaW5kaW5nXG5cdCAqL1xuXHRnZXRDcml0aWNhbGl0eUNhbGN1bGF0aW9uQmluZGluZzogZnVuY3Rpb24gKFxuXHRcdHNJbXByb3ZlbWVudERpcmVjdGlvbjogc3RyaW5nLFxuXHRcdHNWYWx1ZTogc3RyaW5nLFxuXHRcdHNEZXZpYXRpb25Mb3c6IHN0cmluZyB8IG51bWJlcixcblx0XHRzVG9sZXJhbmNlTG93OiBzdHJpbmcgfCBudW1iZXIsXG5cdFx0c0FjY2VwdGFuY2VMb3c6IHN0cmluZyB8IG51bWJlcixcblx0XHRzQWNjZXB0YW5jZUhpZ2g6IHN0cmluZyB8IG51bWJlcixcblx0XHRzVG9sZXJhbmNlSGlnaDogc3RyaW5nIHwgbnVtYmVyLFxuXHRcdHNEZXZpYXRpb25IaWdoOiBzdHJpbmcgfCBudW1iZXJcblx0KSB7XG5cdFx0bGV0IHNDcml0aWNhbGl0eUV4cHJlc3Npb246IHR5cGVvZiBWYWx1ZUNvbG9yIHwgc3RyaW5nID0gVmFsdWVDb2xvci5OZXV0cmFsOyAvLyBEZWZhdWx0IENyaXRpY2FsaXR5IFN0YXRlXG5cblx0XHRzVmFsdWUgPSBgJSR7c1ZhbHVlfWA7XG5cblx0XHQvLyBTZXR0aW5nIFVuYXNzaWduZWQgVmFsdWVzXG5cdFx0c0RldmlhdGlvbkxvdyA9IHNEZXZpYXRpb25Mb3cgfHwgLUluZmluaXR5O1xuXHRcdHNUb2xlcmFuY2VMb3cgPSBzVG9sZXJhbmNlTG93IHx8IHNEZXZpYXRpb25Mb3c7XG5cdFx0c0FjY2VwdGFuY2VMb3cgPSBzQWNjZXB0YW5jZUxvdyB8fCBzVG9sZXJhbmNlTG93O1xuXHRcdHNEZXZpYXRpb25IaWdoID0gc0RldmlhdGlvbkhpZ2ggfHwgSW5maW5pdHk7XG5cdFx0c1RvbGVyYW5jZUhpZ2ggPSBzVG9sZXJhbmNlSGlnaCB8fCBzRGV2aWF0aW9uSGlnaDtcblx0XHRzQWNjZXB0YW5jZUhpZ2ggPSBzQWNjZXB0YW5jZUhpZ2ggfHwgc1RvbGVyYW5jZUhpZ2g7XG5cblx0XHQvLyBEZWFsaW5nIHdpdGggRGVjaW1hbCBhbmQgUGF0aCBiYXNlZCBiaW5nZGluZ3Ncblx0XHRzRGV2aWF0aW9uTG93ID0gc0RldmlhdGlvbkxvdyAmJiAoK3NEZXZpYXRpb25Mb3cgPyArc0RldmlhdGlvbkxvdyA6IGAlJHtzRGV2aWF0aW9uTG93fWApO1xuXHRcdHNUb2xlcmFuY2VMb3cgPSBzVG9sZXJhbmNlTG93ICYmICgrc1RvbGVyYW5jZUxvdyA/ICtzVG9sZXJhbmNlTG93IDogYCUke3NUb2xlcmFuY2VMb3d9YCk7XG5cdFx0c0FjY2VwdGFuY2VMb3cgPSBzQWNjZXB0YW5jZUxvdyAmJiAoK3NBY2NlcHRhbmNlTG93ID8gK3NBY2NlcHRhbmNlTG93IDogYCUke3NBY2NlcHRhbmNlTG93fWApO1xuXHRcdHNBY2NlcHRhbmNlSGlnaCA9IHNBY2NlcHRhbmNlSGlnaCAmJiAoK3NBY2NlcHRhbmNlSGlnaCA/ICtzQWNjZXB0YW5jZUhpZ2ggOiBgJSR7c0FjY2VwdGFuY2VIaWdofWApO1xuXHRcdHNUb2xlcmFuY2VIaWdoID0gc1RvbGVyYW5jZUhpZ2ggJiYgKCtzVG9sZXJhbmNlSGlnaCA/ICtzVG9sZXJhbmNlSGlnaCA6IGAlJHtzVG9sZXJhbmNlSGlnaH1gKTtcblx0XHRzRGV2aWF0aW9uSGlnaCA9IHNEZXZpYXRpb25IaWdoICYmICgrc0RldmlhdGlvbkhpZ2ggPyArc0RldmlhdGlvbkhpZ2ggOiBgJSR7c0RldmlhdGlvbkhpZ2h9YCk7XG5cblx0XHQvLyBDcmVhdGluZyBydW50aW1lIGV4cHJlc3Npb24gYmluZGluZyBmcm9tIGNyaXRpY2FsaXR5IGNhbGN1bGF0aW9uIGZvciBDcml0aWNhbGl0eSBTdGF0ZVxuXHRcdGlmIChzSW1wcm92ZW1lbnREaXJlY3Rpb24uaW5kZXhPZihcIk1pbmltaXplXCIpID4gLTEpIHtcblx0XHRcdHNDcml0aWNhbGl0eUV4cHJlc3Npb24gPVxuXHRcdFx0XHRcIns9IFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPD0gXCIgK1xuXHRcdFx0XHRzQWNjZXB0YW5jZUhpZ2ggK1xuXHRcdFx0XHRcIiA/ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuR29vZCArXG5cdFx0XHRcdFwiJyA6IFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPD0gXCIgK1xuXHRcdFx0XHRzVG9sZXJhbmNlSGlnaCArXG5cdFx0XHRcdFwiID8gJ1wiICtcblx0XHRcdFx0VmFsdWVDb2xvci5OZXV0cmFsICtcblx0XHRcdFx0XCInIDogXCIgK1xuXHRcdFx0XHRcIihcIiArXG5cdFx0XHRcdHNEZXZpYXRpb25IaWdoICtcblx0XHRcdFx0XCIgJiYgXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA8PSBcIiArXG5cdFx0XHRcdHNEZXZpYXRpb25IaWdoICtcblx0XHRcdFx0XCIpID8gJ1wiICtcblx0XHRcdFx0VmFsdWVDb2xvci5Dcml0aWNhbCArXG5cdFx0XHRcdFwiJyA6ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuRXJyb3IgK1xuXHRcdFx0XHRcIicgfVwiO1xuXHRcdH0gZWxzZSBpZiAoc0ltcHJvdmVtZW50RGlyZWN0aW9uLmluZGV4T2YoXCJNYXhpbWl6ZVwiKSA+IC0xKSB7XG5cdFx0XHRzQ3JpdGljYWxpdHlFeHByZXNzaW9uID1cblx0XHRcdFx0XCJ7PSBcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiID49IFwiICtcblx0XHRcdFx0c0FjY2VwdGFuY2VMb3cgK1xuXHRcdFx0XHRcIiA/ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuR29vZCArXG5cdFx0XHRcdFwiJyA6IFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPj0gXCIgK1xuXHRcdFx0XHRzVG9sZXJhbmNlTG93ICtcblx0XHRcdFx0XCIgPyAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLk5ldXRyYWwgK1xuXHRcdFx0XHRcIicgOiBcIiArXG5cdFx0XHRcdFwiKFwiICtcblx0XHRcdFx0c0RldmlhdGlvbkxvdyArXG5cdFx0XHRcdFwiICYmIFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPj0gXCIgK1xuXHRcdFx0XHRzRGV2aWF0aW9uTG93ICtcblx0XHRcdFx0XCIpID8gJ1wiICtcblx0XHRcdFx0VmFsdWVDb2xvci5Dcml0aWNhbCArXG5cdFx0XHRcdFwiJyA6ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuRXJyb3IgK1xuXHRcdFx0XHRcIicgfVwiO1xuXHRcdH0gZWxzZSBpZiAoc0ltcHJvdmVtZW50RGlyZWN0aW9uLmluZGV4T2YoXCJUYXJnZXRcIikgPiAtMSkge1xuXHRcdFx0c0NyaXRpY2FsaXR5RXhwcmVzc2lvbiA9XG5cdFx0XHRcdFwiez0gKFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPD0gXCIgK1xuXHRcdFx0XHRzQWNjZXB0YW5jZUhpZ2ggK1xuXHRcdFx0XHRcIiAmJiBcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiID49IFwiICtcblx0XHRcdFx0c0FjY2VwdGFuY2VMb3cgK1xuXHRcdFx0XHRcIikgPyAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLkdvb2QgK1xuXHRcdFx0XHRcIicgOiBcIiArXG5cdFx0XHRcdFwiKChcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiID49IFwiICtcblx0XHRcdFx0c1RvbGVyYW5jZUxvdyArXG5cdFx0XHRcdFwiICYmIFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPCBcIiArXG5cdFx0XHRcdHNBY2NlcHRhbmNlTG93ICtcblx0XHRcdFx0XCIpIHx8IChcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiID4gXCIgK1xuXHRcdFx0XHRzQWNjZXB0YW5jZUhpZ2ggK1xuXHRcdFx0XHRcIiAmJiBcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiIDw9IFwiICtcblx0XHRcdFx0c1RvbGVyYW5jZUhpZ2ggK1xuXHRcdFx0XHRcIikpID8gJ1wiICtcblx0XHRcdFx0VmFsdWVDb2xvci5OZXV0cmFsICtcblx0XHRcdFx0XCInIDogXCIgK1xuXHRcdFx0XHRcIigoXCIgK1xuXHRcdFx0XHRzRGV2aWF0aW9uTG93ICtcblx0XHRcdFx0XCIgJiYgKFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPj0gXCIgK1xuXHRcdFx0XHRzRGV2aWF0aW9uTG93ICtcblx0XHRcdFx0XCIpICYmIChcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiIDwgXCIgK1xuXHRcdFx0XHRzVG9sZXJhbmNlTG93ICtcblx0XHRcdFx0XCIpKSB8fCAoKFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPiBcIiArXG5cdFx0XHRcdHNUb2xlcmFuY2VIaWdoICtcblx0XHRcdFx0XCIpICYmIFwiICtcblx0XHRcdFx0c0RldmlhdGlvbkhpZ2ggK1xuXHRcdFx0XHRcIiAmJiAoXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA8PSBcIiArXG5cdFx0XHRcdHNEZXZpYXRpb25IaWdoICtcblx0XHRcdFx0XCIpKSkgPyAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLkNyaXRpY2FsICtcblx0XHRcdFx0XCInIDogJ1wiICtcblx0XHRcdFx0VmFsdWVDb2xvci5FcnJvciArXG5cdFx0XHRcdFwiJyB9XCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdExvZy53YXJuaW5nKFwiQ2FzZSBub3Qgc3VwcG9ydGVkLCByZXR1cm5pbmcgdGhlIGRlZmF1bHQgVmFsdWUgTmV1dHJhbFwiKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gc0NyaXRpY2FsaXR5RXhwcmVzc2lvbjtcblx0fSxcblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY3JpdGljYWxpdHkgaW5kaWNhdG9yIGZyb20gYW5ub3RhdGlvbnMgaWYgY3JpdGljYWxpdHkgaXMgRW51bU1lbWJlci5cblx0ICpcblx0ICogQHBhcmFtIHNDcml0aWNhbGl0eSBDcml0aWNhbGl0eSBwcm92aWRlZCBpbiB0aGUgYW5ub3RhdGlvbnNcblx0ICogQHJldHVybnMgUmV0dXJuIHRoZSBpbmRpY2F0b3IgZm9yIGNyaXRpY2FsaXR5XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZ2V0Q3JpdGljYWxpdHlGcm9tRW51bTogZnVuY3Rpb24gKHNDcml0aWNhbGl0eTogc3RyaW5nKSB7XG5cdFx0bGV0IHNJbmRpY2F0b3I7XG5cdFx0aWYgKHNDcml0aWNhbGl0eSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Dcml0aWNhbGl0eVR5cGUvTmVnYXRpdmVcIikge1xuXHRcdFx0c0luZGljYXRvciA9IFZhbHVlQ29sb3IuRXJyb3I7XG5cdFx0fSBlbHNlIGlmIChzQ3JpdGljYWxpdHkgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ3JpdGljYWxpdHlUeXBlL1Bvc2l0aXZlXCIpIHtcblx0XHRcdHNJbmRpY2F0b3IgPSBWYWx1ZUNvbG9yLkdvb2Q7XG5cdFx0fSBlbHNlIGlmIChzQ3JpdGljYWxpdHkgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ3JpdGljYWxpdHlUeXBlL0NyaXRpY2FsXCIpIHtcblx0XHRcdHNJbmRpY2F0b3IgPSBWYWx1ZUNvbG9yLkNyaXRpY2FsO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzSW5kaWNhdG9yID0gVmFsdWVDb2xvci5OZXV0cmFsO1xuXHRcdH1cblx0XHRyZXR1cm4gc0luZGljYXRvcjtcblx0fSxcblx0Z2V0VmFsdWVDcml0aWNhbGl0eTogZnVuY3Rpb24gKHNEaW1lbnNpb246IGFueSwgYVZhbHVlQ3JpdGljYWxpdHk6IGFueSkge1xuXHRcdGxldCBzUmVzdWx0O1xuXHRcdGNvbnN0IGFWYWx1ZXM6IGFueVtdID0gW107XG5cdFx0aWYgKGFWYWx1ZUNyaXRpY2FsaXR5ICYmIGFWYWx1ZUNyaXRpY2FsaXR5Lmxlbmd0aCA+IDApIHtcblx0XHRcdGFWYWx1ZUNyaXRpY2FsaXR5LmZvckVhY2goZnVuY3Rpb24gKG9WQzogYW55KSB7XG5cdFx0XHRcdGlmIChvVkMuVmFsdWUgJiYgb1ZDLkNyaXRpY2FsaXR5LiRFbnVtTWVtYmVyKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc1ZhbHVlID1cblx0XHRcdFx0XHRcdFwiJHtcIiArXG5cdFx0XHRcdFx0XHRzRGltZW5zaW9uICtcblx0XHRcdFx0XHRcdFwifSA9PT0gJ1wiICtcblx0XHRcdFx0XHRcdG9WQy5WYWx1ZSArXG5cdFx0XHRcdFx0XHRcIicgPyAnXCIgK1xuXHRcdFx0XHRcdFx0Q29tbW9uSGVscGVyLl9nZXRDcml0aWNhbGl0eUZyb21FbnVtKG9WQy5Dcml0aWNhbGl0eS4kRW51bU1lbWJlcikgK1xuXHRcdFx0XHRcdFx0XCInXCI7XG5cdFx0XHRcdFx0YVZhbHVlcy5wdXNoKHNWYWx1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0c1Jlc3VsdCA9IGFWYWx1ZXMubGVuZ3RoID4gMCAmJiBhVmFsdWVzLmpvaW4oXCIgOiBcIikgKyBcIiA6IHVuZGVmaW5lZFwiO1xuXHRcdH1cblx0XHRyZXR1cm4gc1Jlc3VsdCA/IFwiez0gXCIgKyBzUmVzdWx0ICsgXCIgfVwiIDogdW5kZWZpbmVkO1xuXHR9LFxuXHQvKipcblx0ICogVG8gZmV0Y2ggbWVhc3VyZSBhdHRyaWJ1dGUgaW5kZXguXG5cdCAqXG5cdCAqIEBwYXJhbSBpTWVhc3VyZSBDaGFydCBBbm5vdGF0aW9uc1xuXHQgKiBAcGFyYW0gb0NoYXJ0QW5ub3RhdGlvbnMgQ2hhcnQgQW5ub3RhdGlvbnNcblx0ICogQHJldHVybnMgTWVhc3VyZUF0dHJpYnV0ZSBpbmRleC5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdGdldE1lYXN1cmVBdHRyaWJ1dGVJbmRleDogZnVuY3Rpb24gKGlNZWFzdXJlOiBhbnksIG9DaGFydEFubm90YXRpb25zOiBhbnkpIHtcblx0XHRsZXQgYU1lYXN1cmVzLCBzTWVhc3VyZVByb3BlcnR5UGF0aDtcblx0XHRpZiAob0NoYXJ0QW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5sZW5ndGggPiAwKSB7XG5cdFx0XHRhTWVhc3VyZXMgPSBvQ2hhcnRBbm5vdGF0aW9ucy5NZWFzdXJlcztcblx0XHRcdHNNZWFzdXJlUHJvcGVydHlQYXRoID0gYU1lYXN1cmVzW2lNZWFzdXJlXS4kUHJvcGVydHlQYXRoO1xuXHRcdH0gZWxzZSBpZiAob0NoYXJ0QW5ub3RhdGlvbnM/LkR5bmFtaWNNZWFzdXJlcz8ubGVuZ3RoID4gMCkge1xuXHRcdFx0YU1lYXN1cmVzID0gb0NoYXJ0QW5ub3RhdGlvbnMuRHluYW1pY01lYXN1cmVzO1xuXHRcdFx0c01lYXN1cmVQcm9wZXJ0eVBhdGggPSBhTWVhc3VyZXNbaU1lYXN1cmVdLiRBbm5vdGF0aW9uUGF0aDtcblx0XHR9XG5cdFx0bGV0IGJNZWFzdXJlQXR0cmlidXRlRXhpc3RzO1xuXHRcdGNvbnN0IGFNZWFzdXJlQXR0cmlidXRlcyA9IG9DaGFydEFubm90YXRpb25zLk1lYXN1cmVBdHRyaWJ1dGVzO1xuXHRcdGxldCBpTWVhc3VyZUF0dHJpYnV0ZSA9IC0xO1xuXHRcdGNvbnN0IGZuQ2hlY2tNZWFzdXJlID0gZnVuY3Rpb24gKHNNZWFzdXJlUGF0aDogYW55LCBvTWVhc3VyZUF0dHJpYnV0ZTogYW55LCBpbmRleDogYW55KSB7XG5cdFx0XHRpZiAob01lYXN1cmVBdHRyaWJ1dGUpIHtcblx0XHRcdFx0aWYgKG9NZWFzdXJlQXR0cmlidXRlLk1lYXN1cmUgJiYgb01lYXN1cmVBdHRyaWJ1dGUuTWVhc3VyZS4kUHJvcGVydHlQYXRoID09PSBzTWVhc3VyZVBhdGgpIHtcblx0XHRcdFx0XHRpTWVhc3VyZUF0dHJpYnV0ZSA9IGluZGV4O1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG9NZWFzdXJlQXR0cmlidXRlLkR5bmFtaWNNZWFzdXJlICYmIG9NZWFzdXJlQXR0cmlidXRlLkR5bmFtaWNNZWFzdXJlLiRBbm5vdGF0aW9uUGF0aCA9PT0gc01lYXN1cmVQYXRoKSB7XG5cdFx0XHRcdFx0aU1lYXN1cmVBdHRyaWJ1dGUgPSBpbmRleDtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdFx0aWYgKGFNZWFzdXJlQXR0cmlidXRlcykge1xuXHRcdFx0Yk1lYXN1cmVBdHRyaWJ1dGVFeGlzdHMgPSBhTWVhc3VyZUF0dHJpYnV0ZXMuc29tZShmbkNoZWNrTWVhc3VyZS5iaW5kKG51bGwsIHNNZWFzdXJlUHJvcGVydHlQYXRoKSk7XG5cdFx0fVxuXHRcdHJldHVybiBiTWVhc3VyZUF0dHJpYnV0ZUV4aXN0cyAmJiBpTWVhc3VyZUF0dHJpYnV0ZSA+IC0xICYmIGlNZWFzdXJlQXR0cmlidXRlO1xuXHR9LFxuXG5cdGdldE1lYXN1cmVBdHRyaWJ1dGU6IGZ1bmN0aW9uIChvQ29udGV4dDogQ29udGV4dCkge1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0c0NoYXJ0QW5ub3RhdGlvblBhdGggPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0cmV0dXJuIG9NZXRhTW9kZWwucmVxdWVzdE9iamVjdChzQ2hhcnRBbm5vdGF0aW9uUGF0aCkudGhlbihmdW5jdGlvbiAob0NoYXJ0QW5ub3RhdGlvbnM6IGFueSkge1xuXHRcdFx0Y29uc3QgYU1lYXN1cmVBdHRyaWJ1dGVzID0gb0NoYXJ0QW5ub3RhdGlvbnMuTWVhc3VyZUF0dHJpYnV0ZXMsXG5cdFx0XHRcdGlNZWFzdXJlQXR0cmlidXRlID0gQ29tbW9uSGVscGVyLmdldE1lYXN1cmVBdHRyaWJ1dGVJbmRleCgwLCBvQ2hhcnRBbm5vdGF0aW9ucyk7XG5cdFx0XHRjb25zdCBzTWVhc3VyZUF0dHJpYnV0ZVBhdGggPVxuXHRcdFx0XHRpTWVhc3VyZUF0dHJpYnV0ZSA+IC0xICYmIGFNZWFzdXJlQXR0cmlidXRlc1tpTWVhc3VyZUF0dHJpYnV0ZV0gJiYgYU1lYXN1cmVBdHRyaWJ1dGVzW2lNZWFzdXJlQXR0cmlidXRlXS5EYXRhUG9pbnRcblx0XHRcdFx0XHQ/IGAke3NDaGFydEFubm90YXRpb25QYXRofU1lYXN1cmVBdHRyaWJ1dGVzLyR7aU1lYXN1cmVBdHRyaWJ1dGV9L2Bcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdGlmIChzTWVhc3VyZUF0dHJpYnV0ZVBhdGggPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRMb2cud2FybmluZyhcIkRhdGFQb2ludCBtaXNzaW5nIGZvciB0aGUgbWVhc3VyZVwiKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBzTWVhc3VyZUF0dHJpYnV0ZVBhdGggPyBgJHtzTWVhc3VyZUF0dHJpYnV0ZVBhdGh9RGF0YVBvaW50LyRBbm5vdGF0aW9uUGF0aC9gIDogc01lYXN1cmVBdHRyaWJ1dGVQYXRoO1xuXHRcdH0pO1xuXHR9LFxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBtZWFzdXJlQXR0cmlidXRlIGZvciB0aGUgbWVhc3VyZS5cblx0ICpcblx0ICogQHBhcmFtIG9Db250ZXh0IENvbnRleHQgdG8gdGhlIG1lYXN1cmUgYW5ub3RhdGlvblxuXHQgKiBAcmV0dXJucyBQYXRoIHRvIHRoZSBtZWFzdXJlQXR0cmlidXRlIG9mIHRoZSBtZWFzdXJlXG5cdCAqL1xuXHRnZXRNZWFzdXJlQXR0cmlidXRlRm9yTWVhc3VyZTogZnVuY3Rpb24gKG9Db250ZXh0OiBDb250ZXh0KSB7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwsXG5cdFx0XHRzTWVhc3VyZVBhdGggPSBvQ29udGV4dC5nZXRQYXRoKCksXG5cdFx0XHRzQ2hhcnRBbm5vdGF0aW9uUGF0aCA9IHNNZWFzdXJlUGF0aC5zdWJzdHJpbmcoMCwgc01lYXN1cmVQYXRoLmxhc3RJbmRleE9mKFwiTWVhc3VyZVwiKSksXG5cdFx0XHRpTWVhc3VyZSA9IHNNZWFzdXJlUGF0aC5yZXBsYWNlKC8uKlxcLy8sIFwiXCIpO1xuXG5cdFx0cmV0dXJuIG9NZXRhTW9kZWwucmVxdWVzdE9iamVjdChzQ2hhcnRBbm5vdGF0aW9uUGF0aCkudGhlbihmdW5jdGlvbiAob0NoYXJ0QW5ub3RhdGlvbnM6IGFueSkge1xuXHRcdFx0Y29uc3QgYU1lYXN1cmVBdHRyaWJ1dGVzID0gb0NoYXJ0QW5ub3RhdGlvbnMuTWVhc3VyZUF0dHJpYnV0ZXMsXG5cdFx0XHRcdGlNZWFzdXJlQXR0cmlidXRlID0gQ29tbW9uSGVscGVyLmdldE1lYXN1cmVBdHRyaWJ1dGVJbmRleChpTWVhc3VyZSwgb0NoYXJ0QW5ub3RhdGlvbnMpO1xuXHRcdFx0Y29uc3Qgc01lYXN1cmVBdHRyaWJ1dGVQYXRoID1cblx0XHRcdFx0aU1lYXN1cmVBdHRyaWJ1dGUgPiAtMSAmJiBhTWVhc3VyZUF0dHJpYnV0ZXNbaU1lYXN1cmVBdHRyaWJ1dGVdICYmIGFNZWFzdXJlQXR0cmlidXRlc1tpTWVhc3VyZUF0dHJpYnV0ZV0uRGF0YVBvaW50XG5cdFx0XHRcdFx0PyBgJHtzQ2hhcnRBbm5vdGF0aW9uUGF0aH1NZWFzdXJlQXR0cmlidXRlcy8ke2lNZWFzdXJlQXR0cmlidXRlfS9gXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRpZiAoc01lYXN1cmVBdHRyaWJ1dGVQYXRoID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0TG9nLndhcm5pbmcoXCJEYXRhUG9pbnQgbWlzc2luZyBmb3IgdGhlIG1lYXN1cmVcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gc01lYXN1cmVBdHRyaWJ1dGVQYXRoID8gYCR7c01lYXN1cmVBdHRyaWJ1dGVQYXRofURhdGFQb2ludC8kQW5ub3RhdGlvblBhdGgvYCA6IHNNZWFzdXJlQXR0cmlidXRlUGF0aDtcblx0XHR9KTtcblx0fSxcblx0LyoqXG5cdCAqIE1ldGhvZCB0byBkZXRlcm1pbmUgaWYgdGhlIGNvbnRhaW5lZCBuYXZpZ2F0aW9uIHByb3BlcnR5IGhhcyBhIGRyYWZ0IHJvb3Qvbm9kZSBwYXJlbnQgZW50aXR5U2V0LlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgaXNEcmFmdFBhcmVudEVudGl0eUZvckNvbnRhaW5tZW50XG5cdCAqIEBwYXJhbSBvVGFyZ2V0Q29sbGVjdGlvbkNvbnRhaW5zVGFyZ2V0IFRhcmdldCBjb2xsZWN0aW9uIGhhcyBDb250YWluc1RhcmdldCBwcm9wZXJ0eVxuXHQgKiBAcGFyYW0gb1RhYmxlTWV0YWRhdGEgVGFibGUgbWV0YWRhdGEgZm9yIHdoaWNoIGRyYWZ0IHN1cHBvcnQgc2hhbGwgYmUgY2hlY2tlZFxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIHRydWUgaWYgZHJhZnRcblx0ICovXG5cdGlzRHJhZnRQYXJlbnRFbnRpdHlGb3JDb250YWlubWVudDogZnVuY3Rpb24gKG9UYXJnZXRDb2xsZWN0aW9uQ29udGFpbnNUYXJnZXQ6IG9iamVjdCwgb1RhYmxlTWV0YWRhdGE6IGFueSkge1xuXHRcdGlmIChvVGFyZ2V0Q29sbGVjdGlvbkNvbnRhaW5zVGFyZ2V0KSB7XG5cdFx0XHRpZiAob1RhYmxlTWV0YWRhdGEgJiYgb1RhYmxlTWV0YWRhdGEucGFyZW50RW50aXR5U2V0ICYmIG9UYWJsZU1ldGFkYXRhLnBhcmVudEVudGl0eVNldC5zUGF0aCkge1xuXHRcdFx0XHRjb25zdCBzUGFyZW50RW50aXR5U2V0UGF0aCA9IG9UYWJsZU1ldGFkYXRhLnBhcmVudEVudGl0eVNldC5zUGF0aDtcblx0XHRcdFx0Y29uc3Qgb0RyYWZ0Um9vdCA9IG9UYWJsZU1ldGFkYXRhLnBhcmVudEVudGl0eVNldC5vTW9kZWwuZ2V0T2JqZWN0KFxuXHRcdFx0XHRcdGAke3NQYXJlbnRFbnRpdHlTZXRQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290YFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBvRHJhZnROb2RlID0gb1RhYmxlTWV0YWRhdGEucGFyZW50RW50aXR5U2V0Lm9Nb2RlbC5nZXRPYmplY3QoXG5cdFx0XHRcdFx0YCR7c1BhcmVudEVudGl0eVNldFBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdE5vZGVgXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChvRHJhZnRSb290IHx8IG9EcmFmdE5vZGUpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogRW5zdXJlcyB0aGUgZGF0YSBpcyBwcm9jZXNzZWQgYXMgZGVmaW5lZCBpbiB0aGUgdGVtcGxhdGUuXG5cdCAqIFNpbmNlIHRoZSBwcm9wZXJ0eSBEYXRhIGlzIG9mIHRoZSB0eXBlICdvYmplY3QnLCBpdCBtYXkgbm90IGJlIGluIHRoZSBzYW1lIG9yZGVyIGFzIHJlcXVpcmVkIGJ5IHRoZSB0ZW1wbGF0ZS5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUubWFjcm9zLkNvbW1vbkhlbHBlclxuXHQgKiBAcGFyYW0gZGF0YUVsZW1lbnQgVGhlIGRhdGEgdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkLlxuXHQgKiBAcmV0dXJucyBUaGUgY29ycmVjdCBwYXRoIGFjY29yZGluZyB0byB0aGUgdGVtcGxhdGUuXG5cdCAqL1xuXHRnZXREYXRhRnJvbVRlbXBsYXRlOiBmdW5jdGlvbiAoZGF0YUVsZW1lbnQ6IENvbnRleHQpIHtcblx0XHRjb25zdCBzcGxpdFBhdGggPSBkYXRhRWxlbWVudC5nZXRQYXRoKCkuc3BsaXQoXCIvXCIpO1xuXHRcdGNvbnN0IGRhdGFLZXkgPSBzcGxpdFBhdGhbc3BsaXRQYXRoLmxlbmd0aCAtIDFdO1xuXHRcdGNvbnN0IGNvbm5lY3RlZERhdGFQYXRoID0gYC8ke3NwbGl0UGF0aC5zbGljZSgxLCAtMikuam9pbihcIi9cIil9L0BgO1xuXHRcdGNvbnN0IGNvbm5lY3RlZE9iamVjdCA9IGRhdGFFbGVtZW50LmdldE9iamVjdChjb25uZWN0ZWREYXRhUGF0aCkgYXMgYW55O1xuXHRcdGNvbnN0IHRlbXBsYXRlID0gY29ubmVjdGVkT2JqZWN0LlRlbXBsYXRlO1xuXHRcdGNvbnN0IHNwbGl0VGVtcCA9IHRlbXBsYXRlLnNwbGl0KFwifVwiKTtcblx0XHRjb25zdCB0ZW1wQXJyYXkgPSBbXTtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHNwbGl0VGVtcC5sZW5ndGggLSAxOyBpKyspIHtcblx0XHRcdGNvbnN0IGtleSA9IHNwbGl0VGVtcFtpXS5zcGxpdChcIntcIilbMV0udHJpbSgpO1xuXHRcdFx0dGVtcEFycmF5LnB1c2goa2V5KTtcblx0XHR9XG5cdFx0T2JqZWN0LmtleXMoY29ubmVjdGVkT2JqZWN0LkRhdGEpLmZvckVhY2goZnVuY3Rpb24gKHNLZXk6IHN0cmluZykge1xuXHRcdFx0aWYgKHNLZXkuc3RhcnRzV2l0aChcIiRcIikpIHtcblx0XHRcdFx0ZGVsZXRlIGNvbm5lY3RlZE9iamVjdC5EYXRhW3NLZXldO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGNvbnN0IGluZGV4ID0gT2JqZWN0LmtleXMoY29ubmVjdGVkT2JqZWN0LkRhdGEpLmluZGV4T2YoZGF0YUtleSk7XG5cdFx0cmV0dXJuIGAvJHtzcGxpdFBhdGguc2xpY2UoMSwgLTIpLmpvaW4oXCIvXCIpfS9EYXRhLyR7dGVtcEFycmF5W2luZGV4XX1gO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdGhlIGVuZCBvZiB0aGUgdGVtcGxhdGUgaGFzIGJlZW4gcmVhY2hlZC5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUubWFjcm9zLkNvbW1vbkhlbHBlclxuXHQgKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgb2YgdGhlIGNvbm5lY3RlZCBmaWVsZHMuXG5cdCAqIEBwYXJhbSBlbGVtZW50IFRoZSBlbGVtZW50IHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIHByb2Nlc3NlZC5cblx0ICogQHJldHVybnMgVHJ1ZSBvciBGYWxzZSAoZGVwZW5kaW5nIG9uIHRoZSB0ZW1wbGF0ZSBpbmRleCkuXG5cdCAqL1xuXHRub3RMYXN0SW5kZXg6IGZ1bmN0aW9uICh0YXJnZXQ6IGFueSwgZWxlbWVudDogb2JqZWN0KSB7XG5cdFx0Y29uc3QgdGVtcGxhdGUgPSB0YXJnZXQuVGVtcGxhdGU7XG5cdFx0Y29uc3Qgc3BsaXRUZW1wID0gdGVtcGxhdGUuc3BsaXQoXCJ9XCIpO1xuXHRcdGNvbnN0IHRlbXBBcnJheTogYW55W10gPSBbXTtcblx0XHRsZXQgaXNMYXN0SW5kZXggPSBmYWxzZTtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHNwbGl0VGVtcC5sZW5ndGggLSAxOyBpKyspIHtcblx0XHRcdGNvbnN0IGRhdGFLZXkgPSBzcGxpdFRlbXBbaV0uc3BsaXQoXCJ7XCIpWzFdLnRyaW0oKTtcblx0XHRcdHRlbXBBcnJheS5wdXNoKGRhdGFLZXkpO1xuXHRcdH1cblxuXHRcdHRlbXBBcnJheS5mb3JFYWNoKGZ1bmN0aW9uICh0ZW1wbGF0ZUluZm86IGFueSkge1xuXHRcdFx0aWYgKHRhcmdldC5EYXRhW3RlbXBsYXRlSW5mb10gPT09IGVsZW1lbnQgJiYgdGVtcEFycmF5LmluZGV4T2YodGVtcGxhdGVJbmZvKSAhPT0gdGVtcEFycmF5Lmxlbmd0aCAtIDEpIHtcblx0XHRcdFx0aXNMYXN0SW5kZXggPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBpc0xhc3RJbmRleDtcblx0fSxcblxuXHQvKipcblx0ICogRGV0ZXJtaW5lcyB0aGUgZGVsaW1pdGVyIGZyb20gdGhlIHRlbXBsYXRlLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG1lbWJlcm9mIHNhcC5mZS5tYWNyb3MuQ29tbW9uSGVscGVyXG5cdCAqIEBwYXJhbSB0ZW1wbGF0ZSBUaGUgdGVtcGxhdGUgc3RyaW5nLlxuXHQgKiBAcmV0dXJucyBUaGUgZGVsaW1pdGVyIGluIHRoZSB0ZW1wbGF0ZSBzdHJpbmcuXG5cdCAqL1xuXHRnZXREZWxpbWl0ZXI6IGZ1bmN0aW9uICh0ZW1wbGF0ZTogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHRlbXBsYXRlLnNwbGl0KFwifVwiKVsxXS5zcGxpdChcIntcIilbMF0udHJpbSgpO1xuXHR9LFxuXG5cdG9NZXRhTW9kZWw6IHVuZGVmaW5lZCBhcyBhbnksXG5cdHNldE1ldGFNb2RlbDogZnVuY3Rpb24gKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsKSB7XG5cdFx0dGhpcy5vTWV0YU1vZGVsID0gb01ldGFNb2RlbDtcblx0fSxcblxuXHRnZXRNZXRhTW9kZWw6IGZ1bmN0aW9uIChvQ29udGV4dD86IGFueSwgb0ludGVyZmFjZT86IGFueSkge1xuXHRcdGlmIChvQ29udGV4dCkge1xuXHRcdFx0cmV0dXJuIG9JbnRlcmZhY2UuY29udGV4dC5nZXRNb2RlbCgpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5vTWV0YU1vZGVsO1xuXHR9LFxuXG5cdGdldFBhcmFtZXRlcnM6IGZ1bmN0aW9uIChvQ29udGV4dDogYW55LCBvSW50ZXJmYWNlOiBhbnkpIHtcblx0XHRpZiAob0NvbnRleHQpIHtcblx0XHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0TW9kZWwoKTtcblx0XHRcdGNvbnN0IHNQYXRoID0gb0ludGVyZmFjZS5jb250ZXh0LmdldFBhdGgoKTtcblx0XHRcdGNvbnN0IG9QYXJhbWV0ZXJJbmZvID0gQ29tbW9uVXRpbHMuZ2V0UGFyYW1ldGVySW5mbyhvTWV0YU1vZGVsLCBzUGF0aCk7XG5cdFx0XHRpZiAob1BhcmFtZXRlckluZm8ucGFyYW1ldGVyUHJvcGVydGllcykge1xuXHRcdFx0XHRyZXR1cm4gT2JqZWN0LmtleXMob1BhcmFtZXRlckluZm8ucGFyYW1ldGVyUHJvcGVydGllcyk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBbXTtcblx0fSxcblxuXHQvKipcblx0ICogQnVpbGQgYW4gZXhwcmVzc2lvbiBjYWxsaW5nIGFuIGFjdGlvbiBoYW5kbGVyIHZpYSB0aGUgRlBNIGhlbHBlcidzIGFjdGlvbldyYXBwZXIgZnVuY3Rpb25cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgdGhlICdGUE0uYWN0aW9uV3JhcHBlcigpJyBmdW5jdGlvbiBpcyBhdmFpbGFibGUgYXQgcnVudGltZS5cblx0ICpcblx0ICogQHBhcmFtIG9BY3Rpb24gQWN0aW9uIG1ldGFkYXRhXG5cdCAqIEBwYXJhbSBvQWN0aW9uLmhhbmRsZXJNb2R1bGUgTW9kdWxlIGNvbnRhaW5pbmcgdGhlIGFjdGlvbiBoYW5kbGVyIG1ldGhvZFxuXHQgKiBAcGFyYW0gb0FjdGlvbi5oYW5kbGVyTWV0aG9kIEFjdGlvbiBoYW5kbGVyIG1ldGhvZCBuYW1lXG5cdCAqIEBwYXJhbSBbb1RoaXNdIGB0aGlzYCAoaWYgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGEgbWFjcm8pXG5cdCAqIEBwYXJhbSBvVGhpcy5pZCBUaGUgdGFibGUncyBJRFxuXHQgKiBAcmV0dXJucyBUaGUgYWN0aW9uIHdyYXBwZXIgYmluZGluZ1x0ZXhwcmVzc2lvblxuXHQgKi9cblx0YnVpbGRBY3Rpb25XcmFwcGVyOiBmdW5jdGlvbiAob0FjdGlvbjogeyBoYW5kbGVyTW9kdWxlOiBzdHJpbmc7IGhhbmRsZXJNZXRob2Q6IHN0cmluZyB9LCBvVGhpczogeyBpZDogc3RyaW5nIH0gfCB1bmRlZmluZWQpIHtcblx0XHRjb25zdCBhUGFyYW1zOiBhbnlbXSA9IFtyZWYoXCIkZXZlbnRcIiksIG9BY3Rpb24uaGFuZGxlck1vZHVsZSwgb0FjdGlvbi5oYW5kbGVyTWV0aG9kXTtcblxuXHRcdGlmIChvVGhpcyAmJiBvVGhpcy5pZCkge1xuXHRcdFx0Y29uc3Qgb0FkZGl0aW9uYWxQYXJhbXMgPSB7XG5cdFx0XHRcdGNvbnRleHRzOiByZWYoXCIke2ludGVybmFsPnNlbGVjdGVkQ29udGV4dHN9XCIpXG5cdFx0XHR9O1xuXHRcdFx0YVBhcmFtcy5wdXNoKG9BZGRpdGlvbmFsUGFyYW1zKTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGZuKFwiRlBNLmFjdGlvbldyYXBwZXJcIiwgYVBhcmFtcykpO1xuXHR9LFxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgdmFsdWUgd2hldGhlciBvciBub3QgdGhlIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2libGUgZGVwZW5kaW5nIG9uIHRoZSBIaWRkZW4gYW5ub3RhdGlvbi5cblx0ICogSXQgaXMgaW52ZXJ0ZWQgYXMgdGhlIFVJIGVsZW1lbnRzIGhhdmUgYSB2aXNpYmxlIHByb3BlcnR5IGluc3RlYWQgb2YgYW4gaGlkZGVuIG9uZS5cblx0ICpcblx0ICogQHBhcmFtIGRhdGFGaWVsZEFubm90YXRpb25zIFRoZSBkYXRhRmllbGQgT2JqZWN0XG5cdCAqIEByZXR1cm5zIEEgcGF0aCBvciBhIGJvb2xlYW5cblx0ICovXG5cdGdldEhpZGRlblBhdGhFeHByZXNzaW9uOiBmdW5jdGlvbiAoZGF0YUZpZWxkQW5ub3RhdGlvbnM6IGFueSkge1xuXHRcdGlmIChkYXRhRmllbGRBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5cIl0gIT09IG51bGwpIHtcblx0XHRcdGNvbnN0IGhpZGRlbiA9IGRhdGFGaWVsZEFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlblwiXTtcblx0XHRcdHJldHVybiB0eXBlb2YgaGlkZGVuID09PSBcIm9iamVjdFwiID8gXCJ7PSAhJHtcIiArIGhpZGRlbi4kUGF0aCArIFwifSB9XCIgOiAhaGlkZGVuO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufTtcbihDb21tb25IZWxwZXIuaXNQcm9wZXJ0eUZpbHRlcmFibGUgYXMgYW55KS5yZXF1aXJlc0lDb250ZXh0ID0gdHJ1ZTtcbihDb21tb25IZWxwZXIuZ2V0UG9wb3ZlclRleHQgYXMgYW55KS5yZXF1aXJlc0lDb250ZXh0ID0gdHJ1ZTtcbihDb21tb25IZWxwZXIuZ2V0U29ydENvbmRpdGlvbnMgYXMgYW55KS5yZXF1aXJlc0lDb250ZXh0ID0gdHJ1ZTtcblxuZXhwb3J0IGRlZmF1bHQgQ29tbW9uSGVscGVyO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7RUFXQSxJQUFNQSxVQUFVLEdBQUdDLFFBQVEsQ0FBQ0QsVUFBNUI7RUFDQSxJQUFNRSxZQUFZLEdBQUc7SUFDcEJDLGlCQUFpQixFQUFFLFlBQVk7TUFDOUI7TUFDQSxPQUFPQyxRQUFRLENBQUNDLElBQVQsQ0FBY0MsT0FBZCxDQUFzQiwrQkFBdEIsSUFBeUQsQ0FBQyxDQUFqRTtJQUNBLENBSm1CO0lBTXBCQyxZQUFZLEVBQUUsVUFBVUMsSUFBVixFQUFxQjtNQUNsQyxPQUFPQSxJQUFJLENBQUNDLFNBQUwsRUFBUDtJQUNBLENB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
@@ -863,7 +863,7 @@ const CommonHelper = {
863
863
  */
864
864
  getMeasureAttributeIndex: function (iMeasure: any, oChartAnnotations: any) {
865
865
  let aMeasures, sMeasurePropertyPath;
866
- if (oChartAnnotations.Measures.length > 0) {
866
+ if (oChartAnnotations?.Measures?.length > 0) {
867
867
  aMeasures = oChartAnnotations.Measures;
868
868
  sMeasurePropertyPath = aMeasures[iMeasure].$PropertyPath;
869
869
  } else if (oChartAnnotations?.DynamicMeasures?.length > 0) {