@sapui5/sap.fe.core 1.94.0 → 1.96.3

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 (182) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AnnotationHelper.js +3 -3
  4. package/src/sap/fe/core/AppComponent.js +10 -41
  5. package/src/sap/fe/core/AppStateHandler.js +18 -4
  6. package/src/sap/fe/core/BaseController.js +1 -1
  7. package/src/sap/fe/core/BusyLocker.js +13 -1
  8. package/src/sap/fe/core/CommonUtils.js +372 -9
  9. package/src/sap/fe/core/ExtensionAPI.js +1 -1
  10. package/src/sap/fe/core/PageController.js +11 -3
  11. package/src/sap/fe/core/RouterProxy.js +59 -69
  12. package/src/sap/fe/core/Synchronization.js +1 -1
  13. package/src/sap/fe/core/TemplateComponent.js +9 -3
  14. package/src/sap/fe/core/TemplateModel.js +1 -1
  15. package/src/sap/fe/core/TransactionHelper.js +157 -111
  16. package/src/sap/fe/core/actions/draft.js +1 -1
  17. package/src/sap/fe/core/actions/messageHandling.js +1 -1
  18. package/src/sap/fe/core/actions/nonDraft.js +1 -1
  19. package/src/sap/fe/core/actions/operations.js +25 -3
  20. package/src/sap/fe/core/actions/sticky.js +1 -1
  21. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +1 -1
  22. package/src/sap/fe/core/controllerextensions/EditFlow.js +89 -54
  23. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +1 -1
  24. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +14 -7
  25. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +128 -25
  26. package/src/sap/fe/core/controllerextensions/InternalRouting.js +197 -210
  27. package/src/sap/fe/core/controllerextensions/KPIManagement.js +844 -168
  28. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +903 -189
  29. package/src/sap/fe/core/controllerextensions/MessageHandler.js +1 -1
  30. package/src/sap/fe/core/controllerextensions/PageReady.js +31 -17
  31. package/src/sap/fe/core/controllerextensions/PageReady.ts +50 -15
  32. package/src/sap/fe/core/controllerextensions/Paginator.js +20 -4
  33. package/src/sap/fe/core/controllerextensions/Placeholder.js +134 -271
  34. package/src/sap/fe/core/controllerextensions/Routing.js +1 -1
  35. package/src/sap/fe/core/controllerextensions/RoutingListener.js +1 -1
  36. package/src/sap/fe/core/controllerextensions/Share.js +20 -7
  37. package/src/sap/fe/core/controllerextensions/SideEffects.js +2 -3
  38. package/src/sap/fe/core/controllerextensions/SideEffects.ts +13 -12
  39. package/src/sap/fe/core/controllerextensions/ViewState.js +174 -7
  40. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +39 -34
  41. package/src/sap/fe/core/controls/ActionParameterDialogValueHelp.fragment.xml +35 -0
  42. package/src/sap/fe/core/controls/CommandExecution.js +1 -1
  43. package/src/sap/fe/core/controls/ConditionalWrapper.js +1 -1
  44. package/src/sap/fe/core/controls/CustomQuickViewPage.js +4 -1
  45. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +1 -1
  46. package/src/sap/fe/core/controls/FieldWrapper.js +1 -1
  47. package/src/sap/fe/core/controls/FilterBar.js +1 -1
  48. package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
  49. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +45 -0
  50. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +5 -8
  51. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +83 -23
  52. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +2 -6
  53. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +25 -18
  54. package/src/sap/fe/core/converters/ConverterContext.js +18 -4
  55. package/src/sap/fe/core/converters/ConverterContext.ts +13 -3
  56. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  57. package/src/sap/fe/core/converters/ManifestSettings.ts +4 -1
  58. package/src/sap/fe/core/converters/MetaModelConverter.js +855 -868
  59. package/src/sap/fe/core/converters/MetaModelConverter.ts +763 -826
  60. package/src/sap/fe/core/converters/annotations/DataField.js +52 -2
  61. package/src/sap/fe/core/converters/annotations/DataField.ts +52 -2
  62. package/src/sap/fe/core/converters/controls/Common/Action.js +6 -1
  63. package/src/sap/fe/core/converters/controls/Common/Action.ts +3 -0
  64. package/src/sap/fe/core/converters/controls/Common/Chart.js +85 -6
  65. package/src/sap/fe/core/converters/controls/Common/Chart.ts +80 -2
  66. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +15 -16
  67. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +16 -30
  68. package/src/sap/fe/core/converters/controls/Common/Form.js +17 -8
  69. package/src/sap/fe/core/converters/controls/Common/Form.ts +11 -3
  70. package/src/sap/fe/core/converters/controls/Common/KPI.js +287 -109
  71. package/src/sap/fe/core/converters/controls/Common/KPI.ts +314 -139
  72. package/src/sap/fe/core/converters/controls/Common/Table.js +273 -105
  73. package/src/sap/fe/core/converters/controls/Common/Table.ts +319 -111
  74. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +8 -20
  75. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +11 -15
  76. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +44 -15
  77. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +41 -19
  78. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +74 -0
  79. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +50 -0
  80. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +15 -7
  81. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +27 -6
  82. package/src/sap/fe/core/converters/helpers/Aggregation.js +18 -30
  83. package/src/sap/fe/core/converters/helpers/Aggregation.ts +17 -28
  84. package/src/sap/fe/core/converters/helpers/BindingHelper.js +3 -2
  85. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +2 -2
  86. package/src/sap/fe/core/converters/helpers/ID.js +1 -1
  87. package/src/sap/fe/core/converters/helpers/ID.ts +2 -2
  88. package/src/sap/fe/core/converters/helpers/IssueManager.js +3 -3
  89. package/src/sap/fe/core/converters/helpers/IssueManager.ts +2 -2
  90. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +11 -6
  91. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +9 -5
  92. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +15 -2
  93. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +14 -14
  94. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +2 -2
  95. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +1 -1
  96. package/src/sap/fe/core/converters/templates/ListReportConverter.js +73 -8
  97. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +70 -10
  98. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +82 -16
  99. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +100 -17
  100. package/src/sap/fe/core/designtime/AppComponent.designtime.js +1 -1
  101. package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
  102. package/src/sap/fe/core/formatters/FPMFormatter.ts +8 -3
  103. package/src/sap/fe/core/fpm/Component.js +2 -2
  104. package/src/sap/fe/core/helpers/BindingExpression.js +17 -2
  105. package/src/sap/fe/core/helpers/BindingExpression.ts +14 -1
  106. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +1 -1
  107. package/src/sap/fe/core/helpers/EditState.js +1 -1
  108. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +1 -3
  109. package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
  110. package/src/sap/fe/core/helpers/ModelHelper.js +28 -1
  111. package/src/sap/fe/core/helpers/PasteHelper.js +7 -1
  112. package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
  113. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -3
  114. package/src/sap/fe/core/helpers/StableIdHelper.js +2 -2
  115. package/src/sap/fe/core/helpers/StableIdHelper.ts +1 -1
  116. package/src/sap/fe/core/library.js +2 -2
  117. package/src/sap/fe/core/library.support.js +1 -1
  118. package/src/sap/fe/core/messagebundle.properties +30 -1
  119. package/src/sap/fe/core/messagebundle_ar.properties +14 -0
  120. package/src/sap/fe/core/messagebundle_bg.properties +14 -0
  121. package/src/sap/fe/core/messagebundle_ca.properties +15 -1
  122. package/src/sap/fe/core/messagebundle_cs.properties +14 -0
  123. package/src/sap/fe/core/messagebundle_cy.properties +14 -0
  124. package/src/sap/fe/core/messagebundle_da.properties +14 -0
  125. package/src/sap/fe/core/messagebundle_de.properties +14 -0
  126. package/src/sap/fe/core/messagebundle_el.properties +14 -0
  127. package/src/sap/fe/core/messagebundle_en.properties +14 -0
  128. package/src/sap/fe/core/messagebundle_en_GB.properties +14 -0
  129. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +14 -0
  130. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +20 -2
  131. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +14 -0
  132. package/src/sap/fe/core/messagebundle_es.properties +21 -7
  133. package/src/sap/fe/core/messagebundle_es_MX.properties +15 -1
  134. package/src/sap/fe/core/messagebundle_et.properties +14 -0
  135. package/src/sap/fe/core/messagebundle_fi.properties +14 -0
  136. package/src/sap/fe/core/messagebundle_fr.properties +18 -4
  137. package/src/sap/fe/core/messagebundle_fr_CA.properties +14 -0
  138. package/src/sap/fe/core/messagebundle_hi.properties +14 -0
  139. package/src/sap/fe/core/messagebundle_hr.properties +14 -0
  140. package/src/sap/fe/core/messagebundle_hu.properties +14 -0
  141. package/src/sap/fe/core/messagebundle_id.properties +14 -0
  142. package/src/sap/fe/core/messagebundle_it.properties +14 -0
  143. package/src/sap/fe/core/messagebundle_iw.properties +15 -1
  144. package/src/sap/fe/core/messagebundle_ja.properties +14 -0
  145. package/src/sap/fe/core/messagebundle_kk.properties +14 -0
  146. package/src/sap/fe/core/messagebundle_ko.properties +14 -0
  147. package/src/sap/fe/core/messagebundle_lt.properties +14 -0
  148. package/src/sap/fe/core/messagebundle_lv.properties +14 -0
  149. package/src/sap/fe/core/messagebundle_ms.properties +14 -0
  150. package/src/sap/fe/core/messagebundle_nl.properties +18 -4
  151. package/src/sap/fe/core/messagebundle_no.properties +15 -1
  152. package/src/sap/fe/core/messagebundle_pl.properties +15 -1
  153. package/src/sap/fe/core/messagebundle_pt.properties +14 -0
  154. package/src/sap/fe/core/messagebundle_pt_PT.properties +14 -0
  155. package/src/sap/fe/core/messagebundle_ro.properties +14 -0
  156. package/src/sap/fe/core/messagebundle_ru.properties +14 -0
  157. package/src/sap/fe/core/messagebundle_sh.properties +14 -0
  158. package/src/sap/fe/core/messagebundle_sk.properties +14 -0
  159. package/src/sap/fe/core/messagebundle_sl.properties +14 -0
  160. package/src/sap/fe/core/messagebundle_sv.properties +14 -0
  161. package/src/sap/fe/core/messagebundle_th.properties +14 -0
  162. package/src/sap/fe/core/messagebundle_tr.properties +14 -0
  163. package/src/sap/fe/core/messagebundle_uk.properties +14 -0
  164. package/src/sap/fe/core/messagebundle_vi.properties +14 -0
  165. package/src/sap/fe/core/messagebundle_zh_CN.properties +14 -0
  166. package/src/sap/fe/core/messagebundle_zh_TW.properties +14 -0
  167. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +1 -1
  168. package/src/sap/fe/core/services/NavigationServiceFactory.js +1 -1
  169. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +1 -1
  170. package/src/sap/fe/core/services/RoutingServiceFactory.js +114 -44
  171. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +2 -2
  172. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +1 -1
  173. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +12 -2
  174. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +1 -1
  175. package/src/sap/fe/core/templating/DataModelPathHelper.js +3 -14
  176. package/src/sap/fe/core/templating/DataModelPathHelper.ts +3 -10
  177. package/src/sap/fe/core/templating/EntitySetHelper.js +13 -3
  178. package/src/sap/fe/core/templating/EntitySetHelper.ts +4 -0
  179. package/src/sap/fe/core/templating/FilterHelper.js +2 -2
  180. package/src/sap/fe/core/templating/FilterHelper.ts +1 -1
  181. package/src/sap/fe/core/templating/UIFormatters.js +41 -3
  182. package/src/sap/fe/core/templating/UIFormatters.ts +74 -2
@@ -33,6 +33,18 @@ sap.ui.define(["./AnnotationEnum"], function (AnnotationEnum) {
33
33
  };
34
34
  _exports.unresolveableExpression = unresolveableExpression;
35
35
 
36
+ function escapeXmlAttribute(inputString) {
37
+ return inputString.replace(/[']/g, function (c) {
38
+ switch (c) {
39
+ case "'":
40
+ return "\\'";
41
+
42
+ default:
43
+ return c;
44
+ }
45
+ });
46
+ }
47
+
36
48
  function hasUnresolveableExpression() {
37
49
  for (var _len = arguments.length, expressions = new Array(_len), _key = 0; _key < _len; _key++) {
38
50
  expressions[_key] = arguments[_key];
@@ -1407,7 +1419,7 @@ sap.ui.define(["./AnnotationEnum"], function (AnnotationEnum) {
1407
1419
  return expr.value.toString();
1408
1420
 
1409
1421
  case "string":
1410
- return "'".concat(expr.value.toString(), "'");
1422
+ return "'".concat(escapeXmlAttribute(expr.value.toString()), "'");
1411
1423
 
1412
1424
  default:
1413
1425
  return "";
@@ -1614,6 +1626,9 @@ sap.ui.define(["./AnnotationEnum"], function (AnnotationEnum) {
1614
1626
  break;
1615
1627
 
1616
1628
  case "string":
1629
+ outValue = "value: '".concat(escapeXmlAttribute(expression.value.toString()), "'");
1630
+ break;
1631
+
1617
1632
  case "boolean":
1618
1633
  outValue = "value: '".concat(expression.value.toString(), "'");
1619
1634
  break;
@@ -1664,4 +1679,4 @@ sap.ui.define(["./AnnotationEnum"], function (AnnotationEnum) {
1664
1679
 
1665
1680
  return _exports;
1666
1681
  }, false);
1667
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkJpbmRpbmdFeHByZXNzaW9uLnRzIl0sIm5hbWVzIjpbInVucmVzb2x2ZWFibGVFeHByZXNzaW9uIiwiX3R5cGUiLCJoYXNVbnJlc29sdmVhYmxlRXhwcmVzc2lvbiIsImV4cHJlc3Npb25zIiwiZmluZCIsImV4cHIiLCJ1bmRlZmluZWQiLCJfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsIiwiYSIsImIiLCJ2YWx1ZSIsIm9wZXJhbmQiLCJvcGVyYXRvciIsIm9wZXJhbmRzIiwibGVuZ3RoIiwiZXZlcnkiLCJleHByZXNzaW9uIiwic29tZSIsIm90aGVyRXhwcmVzc2lvbiIsImNvbmRpdGlvbiIsIm9uVHJ1ZSIsIm9uRmFsc2UiLCJvcGVyYW5kMSIsIm9wZXJhbmQyIiwiYUV4cHJlc3Npb25zIiwiYkV4cHJlc3Npb25zIiwiaW5kZXgiLCJtb2RlbE5hbWUiLCJwYXRoIiwidGFyZ2V0RW50aXR5U2V0IiwiZm4iLCJwYXJhbWV0ZXJzIiwidHlwZSIsImJpbmRpbmdQYXJhbWV0ZXJzIiwib3RoZXJGdW5jdGlvbiIsIm9iaiIsInJlZiIsImZsYXR0ZW5TZXRFeHByZXNzaW9uIiwicmVkdWNlIiwicmVzdWx0IiwiY2FuZGlkYXRlc0ZvckZsYXR0ZW5pbmciLCJmb3JFYWNoIiwiY2FuZGlkYXRlIiwiZSIsInB1c2giLCJoYXNPcHBvc2l0ZUV4cHJlc3Npb25zIiwiaSIsIm5lZ2F0ZWRFeHByZXNzaW9uIiwibm90IiwiaiIsImFuZCIsIm1hcCIsIndyYXBQcmltaXRpdmUiLCJpc1N0YXRpY0ZhbHNlIiwibm9uVHJpdmlhbEV4cHJlc3Npb24iLCJmaWx0ZXIiLCJpc0NvbnN0YW50IiwiY29uc3RhbnQiLCJpc1ZhbGlkIiwib3IiLCJpc1N0YXRpY1RydWUiLCJpc0NvbXBhcmlzb24iLCJlcXVhbCIsImdyZWF0ZXJPckVxdWFsIiwiZ3JlYXRlclRoYW4iLCJub3RFcXVhbCIsImxlc3NPckVxdWFsIiwibGVzc1RoYW4iLCJpc1RydXRoeSIsImJpbmRpbmdFeHByZXNzaW9uIiwidmlzaXRlZE5hdmlnYXRpb25QYXRocyIsInBhdGhWaXNpdG9yIiwidGFyZ2V0UGF0aCIsImxvY2FsUGF0aCIsImNvbmNhdCIsImpvaW4iLCJjb25zdGFudFZhbHVlIiwiQXJyYXkiLCJpc0FycmF5IiwiaXNQcmltaXRpdmVPYmplY3QiLCJ2YWx1ZU9mIiwidmFsIiwiT2JqZWN0Iiwia2V5cyIsImtleSIsInJlc29sdmVCaW5kaW5nU3RyaW5nIiwidGFyZ2V0VHlwZSIsInN0YXJ0c1dpdGgiLCJpc0V4cHJlc3Npb24iLCJzb21ldGhpbmciLCJtYXliZUNvbnN0YW50IiwiaXNCaW5kaW5nIiwibWF5YmVCaW5kaW5nIiwib2JqZWN0VHlwZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImlzQ29tcGxleEFubm90YXRpb25FeHByZXNzaW9uIiwiYW5ub3RhdGlvbkV4cHJlc3Npb24iLCJkZWZhdWx0VmFsdWUiLCJhbm5vdGF0aW9uSWZFeHByZXNzaW9uIiwiSWYiLCJwYXJzZUFubm90YXRpb25Db25kaXRpb24iLCJOb3QiLCJFcSIsIk5lIiwiR3QiLCJHZSIsIkx0IiwiTGUiLCJPciIsIm9yQ29uZGl0aW9uIiwiQW5kIiwiYW5kQ29uZGl0aW9uIiwiYW5ub3RhdGlvbkFwcGx5RXhwcmVzc2lvbiIsImFubm90YXRpb25WYWx1ZSIsImhhc093blByb3BlcnR5IiwiJE9yIiwiJEFuZCIsIiROb3QiLCIkRXEiLCIkTmUiLCIkR3QiLCIkR2UiLCIkTHQiLCIkTGUiLCIkUGF0aCIsIkZ1bmN0aW9uIiwiJEZ1bmN0aW9uIiwiQXBwbHkiLCIkQXBwbHkiLCIkSWYiLCJyZXNvbHZlRW51bVZhbHVlIiwiJEVudW1NZW1iZXIiLCJpZkVsc2UiLCJhcHBseVBhcmFtIiwiYXBwbHlQYXJhbUNvbnZlcnRlZCIsImNvbXBhcmlzb24iLCJsZWZ0T3BlcmFuZCIsInJpZ2h0T3BlcmFuZCIsImxlZnRFeHByZXNzaW9uIiwicmlnaHRFeHByZXNzaW9uIiwiY29uZGl0aW9uRXhwcmVzc2lvbiIsIm9uVHJ1ZUV4cHJlc3Npb24iLCJvbkZhbHNlRXhwcmVzc2lvbiIsImhhc1JlZmVyZW5jZVRvRGVmYXVsdENvbnRleHQiLCJmb3JtYXRSZXN1bHQiLCJmb3JtYXR0ZXJGdW5jdGlvbiIsImNvbnRleHRFbnRpdHlUeXBlIiwicGFyYW1ldGVyRXhwcmVzc2lvbnMiLCJfX2Z1bmN0aW9uTmFtZSIsInNwbGl0IiwiZm9ybWF0dGVyQ2xhc3MiLCJmb3JtYXR0ZXJOYW1lIiwidW5zaGlmdCIsImFkZFR5cGVJbmZvcm1hdGlvbiIsIm9Gb3JtYXRPcHRpb25zIiwiaW5kZXhPZiIsInBhcnNlQXNTdHJpbmciLCJlbXB0eVN0cmluZyIsImZvcm1hdE9wdGlvbnMiLCJvbiIsImZ1bmN0aW9uTmFtZSIsImlzRW1wdHkiLCJpbkV4cHJlc3Npb25zIiwiY29uY2F0ZW5hdGVkIiwidG9TdHJpbmciLCJ0cmFuc2Zvcm1SZWN1cnNpdmVseSIsImluRXhwcmVzc2lvbiIsImV4cHJlc3Npb25UeXBlIiwidHJhbnNmb3JtRnVuY3Rpb24iLCJpbmNsdWRlQWxsRXhwcmVzc2lvbiIsImNvbXBpbGVCaW5kaW5nIiwiZW1iZWRkZWRJbkJpbmRpbmciLCJrZWVwVGFyZ2V0VHlwZSIsImVtYmVkZGVkU2VwYXJhdG9yIiwib3V0UHJvcGVydHkiLCJlbnRyaWVzIiwibyIsInByb3BlcnRpZXMiLCJhcmd1bWVudFN0cmluZyIsImFyZyIsInN1YnN0ciIsIm91dEJpbmRpbmciLCJjb25zdHJhaW50cyIsImNvbXBhcmlzb25QYXJ0IiwiY29tcGlsZVBhdGhQYXJhbWV0ZXIiLCJwYXJhbSIsIm91dHB1dEVuZCIsInNpbmdsZVBhdGgiLCJvdXRWYWx1ZSJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMEtPLE1BQU1BLHVCQUF1RCxHQUFHO0FBQ3RFQyxJQUFBQSxLQUFLLEVBQUU7QUFEK0QsR0FBaEU7OztBQUlBLFdBQVNDLDBCQUFULEdBQWdGO0FBQUEsc0NBQXpDQyxXQUF5QztBQUF6Q0EsTUFBQUEsV0FBeUM7QUFBQTs7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LFVBQXZCLEVBQW1DakIsTUFBbkMsR0FBNEMsQ0FBekUsRUFBNEU7QUFDM0UrSyxVQUFBQSxRQUFRLDRCQUFxQmxCLGNBQWMsQ0FBQzNKLFVBQVUsQ0FBQ2UsVUFBWixDQUFuQyxDQUFSO0FBQ0E7O0FBQ0QsWUFBSTZKLFVBQUosRUFBZ0I7QUFDZixpQkFBT0MsUUFBUDtBQUNBOztBQUNELDBCQUFXQSxRQUFYOztBQUNEO0FBQ0MsZUFBTyxFQUFQO0FBM0NGO0FBNkNBIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRBbmRBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0QW5kQ29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHRDb25kaXRpb25hbENoZWNrT3JWYWx1ZSxcblx0RW50aXR5VHlwZSxcblx0RXFBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0RXFDb25kaXRpb25hbEV4cHJlc3Npb24sXG5cdEdlQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdEdlQ29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHRHdEFubm90YXRpb25FeHByZXNzaW9uLFxuXHRHdENvbmRpdGlvbmFsRXhwcmVzc2lvbixcblx0SWZBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0SWZBbm5vdGF0aW9uRXhwcmVzc2lvblZhbHVlLFxuXHRMZUFubm90YXRpb25FeHByZXNzaW9uLFxuXHRMZUNvbmRpdGlvbmFsRXhwcmVzc2lvbixcblx0THRBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0THRDb25kaXRpb25hbEV4cHJlc3Npb24sXG5cdE5lQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdE5lQ29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHROb3RBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0Tm90Q29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHRPckFubm90YXRpb25FeHByZXNzaW9uLFxuXHRPckNvbmRpdGlvbmFsRXhwcmVzc2lvbixcblx0UGF0aENvbmRpdGlvbkV4cHJlc3Npb24sXG5cdFByb3BlcnR5QW5ub3RhdGlvblZhbHVlXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHsgQXBwbHlBbm5vdGF0aW9uRXhwcmVzc2lvbiwgUGF0aEFubm90YXRpb25FeHByZXNzaW9uIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3R5cGVzL0VkbVwiO1xuaW1wb3J0IHsgRW50aXR5U2V0IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL2Rpc3QvQ29udmVydGVyXCI7XG5pbXBvcnQgeyByZXNvbHZlRW51bVZhbHVlIH0gZnJvbSBcIi4vQW5ub3RhdGlvbkVudW1cIjtcblxudHlwZSBQcmltaXRpdmVUeXBlID0gc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG9iamVjdCB8IG51bGwgfCB1bmRlZmluZWQ7XG5cbnR5cGUgQmFzZUV4cHJlc3Npb248VD4gPSB7XG5cdF90eXBlOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBDb25zdGFudEV4cHJlc3Npb248VD4gPSBCYXNlRXhwcmVzc2lvbjxUPiAmIHtcblx0X3R5cGU6IFwiQ29uc3RhbnRcIjtcblx0dmFsdWU6IFQ7XG59O1xuXG50eXBlIFNldE9wZXJhdG9yID0gXCImJlwiIHwgXCJ8fFwiO1xuZXhwb3J0IHR5cGUgU2V0RXhwcmVzc2lvbiA9IEJhc2VFeHByZXNzaW9uPGJvb2xlYW4+ICYge1xuXHRfdHlwZTogXCJTZXRcIjtcblx0b3BlcmF0b3I6IFNldE9wZXJhdG9yO1xuXHRvcGVyYW5kczogRXhwcmVzc2lvbjxib29sZWFuPltdO1xufTtcblxuZXhwb3J0IHR5cGUgTm90RXhwcmVzc2lvbiA9IEJhc2VFeHByZXNzaW9uPGJvb2xlYW4+ICYge1xuXHRfdHlwZTogXCJOb3RcIjtcblx0b3BlcmFuZDogRXhwcmVzc2lvbjxib29sZWFuPjtcbn07XG5cbmV4cG9ydCB0eXBlIFRydXRoeUV4cHJlc3Npb24gPSBCYXNlRXhwcmVzc2lvbjxib29sZWFuPiAmIHtcblx0X3R5cGU6IFwiVHJ1dGh5XCI7XG5cdG9wZXJhbmQ6IEV4cHJlc3Npb248c3RyaW5nPjtcbn07XG5cbmV4cG9ydCB0eXBlIFJlZmVyZW5jZUV4cHJlc3Npb24gPSBCYXNlRXhwcmVzc2lvbjxvYmplY3Q+ICYge1xuXHRfdHlwZTogXCJSZWZcIjtcblx0cmVmOiBzdHJpbmcgfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgRm9ybWF0dGVyRXhwcmVzc2lvbjxUPiA9IEJhc2VFeHByZXNzaW9uPFQ+ICYge1xuXHRfdHlwZTogXCJGb3JtYXR0ZXJcIjtcblx0Zm46IHN0cmluZztcblx0cGFyYW1ldGVyczogRXhwcmVzc2lvbjxhbnk+W107XG59O1xuXG5leHBvcnQgdHlwZSBDb21wbGV4VHlwZUV4cHJlc3Npb248VD4gPSBCYXNlRXhwcmVzc2lvbjxUPiAmIHtcblx0X3R5cGU6IFwiQ29tcGxleFR5cGVcIjtcblx0dHlwZTogc3RyaW5nO1xuXHRmb3JtYXRPcHRpb25zOiBvYmplY3Q7XG5cdHBhcmFtZXRlcnM6IG9iamVjdDtcblx0YmluZGluZ1BhcmFtZXRlcnM6IEV4cHJlc3Npb248YW55PltdO1xufTtcblxuZXhwb3J0IHR5cGUgRnVuY3Rpb25FeHByZXNzaW9uPFQ+ID0gQmFzZUV4cHJlc3Npb248VD4gJiB7XG5cdF90eXBlOiBcIkZ1bmN0aW9uXCI7XG5cdG9iaj86IEV4cHJlc3Npb248b2JqZWN0Pjtcblx0Zm46IHN0cmluZztcblx0cGFyYW1ldGVyczogRXhwcmVzc2lvbjxhbnk+W107XG59O1xuXG5leHBvcnQgdHlwZSBDb25jYXRFeHByZXNzaW9uID0gQmFzZUV4cHJlc3Npb248c3RyaW5nPiAmIHtcblx0X3R5cGU6IFwiQ29uY2F0XCI7XG5cdGV4cHJlc3Npb25zOiBFeHByZXNzaW9uPHN0cmluZz5bXTtcbn07XG5cbmV4cG9ydCB0eXBlIFVucmVzb2x2ZWFibGVCaW5kaW5nRXhwcmVzc2lvbiA9IEJhc2VFeHByZXNzaW9uPHN0cmluZz4gJiB7XG5cdF90eXBlOiBcIlVucmVzb2x2ZWFibGVcIjtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYgQmluZGluZ0V4cHJlc3Npb25FeHByZXNzaW9uXG4gKi9cbmV4cG9ydCB0eXBlIEJpbmRpbmdFeHByZXNzaW9uRXhwcmVzc2lvbjxUPiA9IEJhc2VFeHByZXNzaW9uPFQ+ICYge1xuXHRfdHlwZTogXCJCaW5kaW5nXCI7XG5cdG1vZGVsTmFtZT86IHN0cmluZztcblx0cGF0aDogc3RyaW5nO1xuXHR0YXJnZXRFbnRpdHlTZXQ/OiBFbnRpdHlTZXQ7XG5cdHR5cGU/OiBzdHJpbmc7XG5cdGNvbnN0cmFpbnRzPzogYW55O1xuXHRwYXJhbWV0ZXJzPzogYW55O1xuXHR0YXJnZXRUeXBlPzogc3RyaW5nO1xuXHRmb3JtYXRPcHRpb25zPzogYW55O1xufTtcblxuZXhwb3J0IHR5cGUgRGVmYXVsdEJpbmRpbmdFeHByZXNzaW9uRXhwcmVzc2lvbjxUPiA9IEJhc2VFeHByZXNzaW9uPFQ+ICYge1xuXHRfdHlwZTogXCJEZWZhdWx0QmluZGluZ1wiO1xuXHRtb2RlbE5hbWU/OiBzdHJpbmc7XG5cdHBhdGg6IHN0cmluZztcblx0dHlwZT86IHN0cmluZztcblx0Y29uc3RyYWludHM/OiBvYmplY3Q7XG5cdHBhcmFtZXRlcnM/OiBhbnk7XG5cdHRhcmdldFR5cGU/OiBzdHJpbmc7XG5cdGZvcm1hdE9wdGlvbnM/OiBvYmplY3Q7XG59O1xuXG5leHBvcnQgdHlwZSBFbWJlZGRlZEJpbmRpbmdFeHByZXNzaW9uPFQ+ID0gQmFzZUV4cHJlc3Npb248VD4gJiB7XG5cdF90eXBlOiBcIkVtYmVkZGVkQmluZGluZ1wiO1xuXHR2YWx1ZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgRW1iZWRkZWRFeHByZXNzaW9uQmluZGluZ0V4cHJlc3Npb248VD4gPSBCYXNlRXhwcmVzc2lvbjxUPiAmIHtcblx0X3R5cGU6IFwiRW1iZWRkZWRFeHByZXNzaW9uQmluZGluZ1wiO1xuXHR2YWx1ZTogc3RyaW5nO1xufTtcblxudHlwZSBDb21wYXJpc29uT3BlcmF0b3IgPSBcIj09PVwiIHwgXCIhPT1cIiB8IFwiPj1cIiB8IFwiPlwiIHwgXCI8PVwiIHwgXCI8XCI7XG5leHBvcnQgdHlwZSBDb21wYXJpc29uRXhwcmVzc2lvbiA9IEJhc2VFeHByZXNzaW9uPGJvb2xlYW4+ICYge1xuXHRfdHlwZTogXCJDb21wYXJpc29uXCI7XG5cdG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3I7XG5cdG9wZXJhbmQxOiBFeHByZXNzaW9uPGFueT47XG5cdG9wZXJhbmQyOiBFeHByZXNzaW9uPGFueT47XG59O1xuXG5leHBvcnQgdHlwZSBJZkVsc2VFeHByZXNzaW9uPFQ+ID0gQmFzZUV4cHJlc3Npb248VD4gJiB7XG5cdF90eXBlOiBcIklmRWxzZVwiO1xuXHRjb25kaXRpb246IEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdG9uVHJ1ZTogRXhwcmVzc2lvbjxUPjtcblx0b25GYWxzZTogRXhwcmVzc2lvbjxUPjtcbn07XG5cbi8qKlxuICogQW4gZXhwcmVzc2lvbiB0aGF0IGV2YWx1YXRlcyB0byB0eXBlIFQuXG4gKlxuICogQHR5cGVkZWYgRXhwcmVzc2lvblxuICovXG5leHBvcnQgdHlwZSBFeHByZXNzaW9uPFQ+ID1cblx0fCBVbnJlc29sdmVhYmxlQmluZGluZ0V4cHJlc3Npb25cblx0fCBDb25zdGFudEV4cHJlc3Npb248VD5cblx0fCBTZXRFeHByZXNzaW9uXG5cdHwgTm90RXhwcmVzc2lvblxuXHR8IFRydXRoeUV4cHJlc3Npb25cblx0fCBDb25jYXRFeHByZXNzaW9uXG5cdHwgQmluZGluZ0V4cHJlc3Npb25FeHByZXNzaW9uPFQ+XG5cdHwgRW1iZWRkZWRCaW5kaW5nRXhwcmVzc2lvbjxUPlxuXHR8IEVtYmVkZGVkRXhwcmVzc2lvbkJpbmRpbmdFeHByZXNzaW9uPFQ+XG5cdHwgRGVmYXVsdEJpbmRpbmdFeHByZXNzaW9uRXhwcmVzc2lvbjxUPlxuXHR8IENvbXBhcmlzb25FeHByZXNzaW9uXG5cdHwgSWZFbHNlRXhwcmVzc2lvbjxUPlxuXHR8IEZvcm1hdHRlckV4cHJlc3Npb248VD5cblx0fCBDb21wbGV4VHlwZUV4cHJlc3Npb248VD5cblx0fCBSZWZlcmVuY2VFeHByZXNzaW9uXG5cdHwgRnVuY3Rpb25FeHByZXNzaW9uPFQ+O1xuXG4vKipcbiAqIEFuIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMgdG8gdHlwZSBULCBvciBhIGNvbnN0YW50IHZhbHVlIG9mIHR5cGUgVFxuICovXG5leHBvcnQgdHlwZSBFeHByZXNzaW9uT3JQcmltaXRpdmU8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+ID0gRXhwcmVzc2lvbjxUPiB8IFQ7XG5cbmV4cG9ydCBjb25zdCB1bnJlc29sdmVhYmxlRXhwcmVzc2lvbjogVW5yZXNvbHZlYWJsZUJpbmRpbmdFeHByZXNzaW9uID0ge1xuXHRfdHlwZTogXCJVbnJlc29sdmVhYmxlXCJcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNVbnJlc29sdmVhYmxlRXhwcmVzc2lvbiguLi5leHByZXNzaW9uczogRXhwcmVzc2lvbjxhbnk+W10pOiBib29sZWFuIHtcblx0cmV0dXJuIGV4cHJlc3Npb25zLmZpbmQoZXhwciA9PiBleHByLl90eXBlID09PSBcIlVucmVzb2x2ZWFibGVcIikgIT09IHVuZGVmaW5lZDtcbn1cbi8qKlxuICogQ2hlY2sgdHdvIGV4cHJlc3Npb25zIGZvciAoZGVlcCkgZXF1YWxpdHkuXG4gKlxuICogQHBhcmFtIGFcbiAqIEBwYXJhbSBiXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSB0d28gZXhwcmVzc2lvbnMgYXJlIGVxdWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsPFQ+KGE6IEV4cHJlc3Npb248VD4sIGI6IEV4cHJlc3Npb248VD4pOiBib29sZWFuIHtcblx0aWYgKGEuX3R5cGUgIT09IGIuX3R5cGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRzd2l0Y2ggKGEuX3R5cGUpIHtcblx0XHRjYXNlIFwiVW5yZXNvbHZlYWJsZVwiOlxuXHRcdFx0cmV0dXJuIGZhbHNlOyAvLyBVbnJlc29sdmVhYmxlIGlzIG5ldmVyIGVxdWFsIHRvIGFueXRoaW5nIGV2ZW4gaXRzZWxmXG5cdFx0Y2FzZSBcIkNvbnN0YW50XCI6XG5cdFx0Y2FzZSBcIkVtYmVkZGVkQmluZGluZ1wiOlxuXHRcdGNhc2UgXCJFbWJlZGRlZEV4cHJlc3Npb25CaW5kaW5nXCI6XG5cdFx0XHRyZXR1cm4gYS52YWx1ZSA9PT0gKGIgYXMgQ29uc3RhbnRFeHByZXNzaW9uPFQ+KS52YWx1ZTtcblxuXHRcdGNhc2UgXCJOb3RcIjpcblx0XHRcdHJldHVybiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGEub3BlcmFuZCwgKGIgYXMgTm90RXhwcmVzc2lvbikub3BlcmFuZCk7XG5cdFx0Y2FzZSBcIlRydXRoeVwiOlxuXHRcdFx0cmV0dXJuIF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoYS5vcGVyYW5kLCAoYiBhcyBUcnV0aHlFeHByZXNzaW9uKS5vcGVyYW5kKTtcblx0XHRjYXNlIFwiU2V0XCI6XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRhLm9wZXJhdG9yID09PSAoYiBhcyBTZXRFeHByZXNzaW9uKS5vcGVyYXRvciAmJlxuXHRcdFx0XHRhLm9wZXJhbmRzLmxlbmd0aCA9PT0gKGIgYXMgU2V0RXhwcmVzc2lvbikub3BlcmFuZHMubGVuZ3RoICYmXG5cdFx0XHRcdGEub3BlcmFuZHMuZXZlcnkoZXhwcmVzc2lvbiA9PlxuXHRcdFx0XHRcdChiIGFzIFNldEV4cHJlc3Npb24pLm9wZXJhbmRzLnNvbWUob3RoZXJFeHByZXNzaW9uID0+IF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoZXhwcmVzc2lvbiwgb3RoZXJFeHByZXNzaW9uKSlcblx0XHRcdFx0KVxuXHRcdFx0KTtcblxuXHRcdGNhc2UgXCJJZkVsc2VcIjpcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoYS5jb25kaXRpb24sIChiIGFzIElmRWxzZUV4cHJlc3Npb248VD4pLmNvbmRpdGlvbikgJiZcblx0XHRcdFx0X2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChhLm9uVHJ1ZSwgKGIgYXMgSWZFbHNlRXhwcmVzc2lvbjxUPikub25UcnVlKSAmJlxuXHRcdFx0XHRfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGEub25GYWxzZSwgKGIgYXMgSWZFbHNlRXhwcmVzc2lvbjxUPikub25GYWxzZSlcblx0XHRcdCk7XG5cblx0XHRjYXNlIFwiQ29tcGFyaXNvblwiOlxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0YS5vcGVyYXRvciA9PSAoYiBhcyBDb21wYXJpc29uRXhwcmVzc2lvbikub3BlcmF0b3IgJiZcblx0XHRcdFx0X2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChhLm9wZXJhbmQxLCAoYiBhcyBDb21wYXJpc29uRXhwcmVzc2lvbikub3BlcmFuZDEpICYmXG5cdFx0XHRcdF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoYS5vcGVyYW5kMiwgKGIgYXMgQ29tcGFyaXNvbkV4cHJlc3Npb24pLm9wZXJhbmQyKVxuXHRcdFx0KTtcblxuXHRcdGNhc2UgXCJDb25jYXRcIjpcblx0XHRcdGNvbnN0IGFFeHByZXNzaW9ucyA9IGEuZXhwcmVzc2lvbnM7XG5cdFx0XHRjb25zdCBiRXhwcmVzc2lvbnMgPSAoYiBhcyBDb25jYXRFeHByZXNzaW9uKS5leHByZXNzaW9ucztcblx0XHRcdGlmIChhRXhwcmVzc2lvbnMubGVuZ3RoICE9PSBiRXhwcmVzc2lvbnMubGVuZ3RoKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBhRXhwcmVzc2lvbnMuZXZlcnkoKGV4cHJlc3Npb24sIGluZGV4KSA9PiB7XG5cdFx0XHRcdHJldHVybiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGV4cHJlc3Npb24sIGJFeHByZXNzaW9uc1tpbmRleF0pO1xuXHRcdFx0fSk7XG5cblx0XHRjYXNlIFwiQmluZGluZ1wiOlxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0YS5tb2RlbE5hbWUgPT09IChiIGFzIEJpbmRpbmdFeHByZXNzaW9uRXhwcmVzc2lvbjxUPikubW9kZWxOYW1lICYmXG5cdFx0XHRcdGEucGF0aCA9PT0gKGIgYXMgQmluZGluZ0V4cHJlc3Npb25FeHByZXNzaW9uPFQ+KS5wYXRoICYmXG5cdFx0XHRcdGEudGFyZ2V0RW50aXR5U2V0ID09PSAoYiBhcyBCaW5kaW5nRXhwcmVzc2lvbkV4cHJlc3Npb248VD4pLnRhcmdldEVudGl0eVNldFxuXHRcdFx0KTtcblxuXHRcdGNhc2UgXCJEZWZhdWx0QmluZGluZ1wiOlxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0YS5tb2RlbE5hbWUgPT09IChiIGFzIERlZmF1bHRCaW5kaW5nRXhwcmVzc2lvbkV4cHJlc3Npb248VD4pLm1vZGVsTmFtZSAmJlxuXHRcdFx0XHRhLnBhdGggPT09IChiIGFzIERlZmF1bHRCaW5kaW5nRXhwcmVzc2lvbkV4cHJlc3Npb248VD4pLnBhdGhcblx0XHRcdCk7XG5cblx0XHRjYXNlIFwiRm9ybWF0dGVyXCI6XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRhLmZuID09PSAoYiBhcyBGb3JtYXR0ZXJFeHByZXNzaW9uPFQ+KS5mbiAmJlxuXHRcdFx0XHRhLnBhcmFtZXRlcnMubGVuZ3RoID09PSAoYiBhcyBGb3JtYXR0ZXJFeHByZXNzaW9uPFQ+KS5wYXJhbWV0ZXJzLmxlbmd0aCAmJlxuXHRcdFx0XHRhLnBhcmFtZXRlcnMuZXZlcnkoKHZhbHVlLCBpbmRleCkgPT4gX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbCgoYiBhcyBGb3JtYXR0ZXJFeHByZXNzaW9uPFQ+KS5wYXJhbWV0ZXJzW2luZGV4XSwgdmFsdWUpKVxuXHRcdFx0KTtcblx0XHRjYXNlIFwiQ29tcGxleFR5cGVcIjpcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGEudHlwZSA9PT0gKGIgYXMgQ29tcGxleFR5cGVFeHByZXNzaW9uPFQ+KS50eXBlICYmXG5cdFx0XHRcdGEuYmluZGluZ1BhcmFtZXRlcnMubGVuZ3RoID09PSAoYiBhcyBDb21wbGV4VHlwZUV4cHJlc3Npb248VD4pLmJpbmRpbmdQYXJhbWV0ZXJzLmxlbmd0aCAmJlxuXHRcdFx0XHRhLmJpbmRpbmdQYXJhbWV0ZXJzLmV2ZXJ5KCh2YWx1ZSwgaW5kZXgpID0+XG5cdFx0XHRcdFx0X2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbCgoYiBhcyBDb21wbGV4VHlwZUV4cHJlc3Npb248VD4pLmJpbmRpbmdQYXJhbWV0ZXJzW2luZGV4XSwgdmFsdWUpXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0Y2FzZSBcIkZ1bmN0aW9uXCI6XG5cdFx0XHRjb25zdCBvdGhlckZ1bmN0aW9uID0gYiBhcyBGdW5jdGlvbkV4cHJlc3Npb248VD47XG5cdFx0XHRpZiAoYS5vYmogPT09IHVuZGVmaW5lZCB8fCBvdGhlckZ1bmN0aW9uLm9iaiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybiBhLm9iaiA9PT0gb3RoZXJGdW5jdGlvbjtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0YS5mbiA9PT0gb3RoZXJGdW5jdGlvbi5mbiAmJlxuXHRcdFx0XHRfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGEub2JqLCBvdGhlckZ1bmN0aW9uLm9iaikgJiZcblx0XHRcdFx0YS5wYXJhbWV0ZXJzLmxlbmd0aCA9PT0gb3RoZXJGdW5jdGlvbi5wYXJhbWV0ZXJzLmxlbmd0aCAmJlxuXHRcdFx0XHRhLnBhcmFtZXRlcnMuZXZlcnkoKHZhbHVlLCBpbmRleCkgPT4gX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChvdGhlckZ1bmN0aW9uLnBhcmFtZXRlcnNbaW5kZXhdLCB2YWx1ZSkpXG5cdFx0XHQpO1xuXG5cdFx0Y2FzZSBcIlJlZlwiOlxuXHRcdFx0cmV0dXJuIGEucmVmID09PSAoYiBhcyBSZWZlcmVuY2VFeHByZXNzaW9uKS5yZWY7XG5cdH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIG5lc3RlZCBTZXRFeHByZXNzaW9uIGJ5IGlubGluaW5nIG9wZXJhbmRzIG9mIHR5cGUgU2V0RXhwcmVzc2lvbiB3aXRoIHRoZSBzYW1lIG9wZXJhdG9yLlxuICpcbiAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBleHByZXNzaW9uIHRvIGZsYXR0ZW5cbiAqIEByZXR1cm5zIHtTZXRFeHByZXNzaW9ufSBBIG5ldyBTZXRFeHByZXNzaW9uIHdpdGggdGhlIHNhbWUgb3BlcmF0b3JcbiAqL1xuZnVuY3Rpb24gZmxhdHRlblNldEV4cHJlc3Npb24oZXhwcmVzc2lvbjogU2V0RXhwcmVzc2lvbik6IFNldEV4cHJlc3Npb24ge1xuXHRyZXR1cm4gZXhwcmVzc2lvbi5vcGVyYW5kcy5yZWR1Y2UoXG5cdFx0KHJlc3VsdDogU2V0RXhwcmVzc2lvbiwgb3BlcmFuZCkgPT4ge1xuXHRcdFx0Y29uc3QgY2FuZGlkYXRlc0ZvckZsYXR0ZW5pbmcgPVxuXHRcdFx0XHRvcGVyYW5kLl90eXBlID09PSBcIlNldFwiICYmIG9wZXJhbmQub3BlcmF0b3IgPT09IGV4cHJlc3Npb24ub3BlcmF0b3IgPyBvcGVyYW5kLm9wZXJhbmRzIDogW29wZXJhbmRdO1xuXHRcdFx0Y2FuZGlkYXRlc0ZvckZsYXR0ZW5pbmcuZm9yRWFjaChjYW5kaWRhdGUgPT4ge1xuXHRcdFx0XHRpZiAocmVzdWx0Lm9wZXJhbmRzLmV2ZXJ5KGUgPT4gIV9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoZSwgY2FuZGlkYXRlKSkpIHtcblx0XHRcdFx0XHRyZXN1bHQub3BlcmFuZHMucHVzaChjYW5kaWRhdGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fSxcblx0XHR7IF90eXBlOiBcIlNldFwiLCBvcGVyYXRvcjogZXhwcmVzc2lvbi5vcGVyYXRvciwgb3BlcmFuZHM6IFtdIH1cblx0KTtcbn1cblxuLyoqXG4gKiBEZXRlY3RzIHdoZXRoZXIgYW4gYXJyYXkgb2YgYm9vbGVhbiBleHByZXNzaW9ucyBjb250YWlucyBhbiBleHByZXNzaW9uIGFuZCBpdHMgbmVnYXRpb24uXG4gKlxuICogQHBhcmFtIGV4cHJlc3Npb25zIEFycmF5IG9mIGV4cHJlc3Npb25zXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBzZXQgb2YgZXhwcmVzc2lvbnMgY29udGFpbnMgYW4gZXhwcmVzc2lvbiBhbmQgaXRzIG5lZ2F0aW9uXG4gKi9cbmZ1bmN0aW9uIGhhc09wcG9zaXRlRXhwcmVzc2lvbnMoZXhwcmVzc2lvbnM6IEV4cHJlc3Npb248Ym9vbGVhbj5bXSk6IGJvb2xlYW4ge1xuXHRpZiAoZXhwcmVzc2lvbnMubGVuZ3RoIDwgMikge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGxldCBpID0gZXhwcmVzc2lvbnMubGVuZ3RoO1xuXHR3aGlsZSAoaS0tKSB7XG5cdFx0Y29uc3QgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25zW2ldO1xuXHRcdGNvbnN0IG5lZ2F0ZWRFeHByZXNzaW9uID0gbm90KGV4cHJlc3Npb24pO1xuXHRcdGZvciAobGV0IGogPSAwOyBqIDwgaTsgaisrKSB7XG5cdFx0XHRpZiAoX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChleHByZXNzaW9uc1tqXSwgbmVnYXRlZEV4cHJlc3Npb24pKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogTG9naWNhbCBgYW5kYCBleHByZXNzaW9uLlxuICpcbiAqIFRoZSBleHByZXNzaW9uIGlzIHNpbXBsaWZpZWQgdG8gZmFsc2UgaWYgdGhpcyBjYW4gYmUgZGVjaWRlZCBzdGF0aWNhbGx5ICh0aGF0IGlzLCBpZiBvbmUgb3BlcmFuZCBpcyBhIGNvbnN0YW50XG4gKiBmYWxzZSBvciBpZiB0aGUgZXhwcmVzc2lvbiBjb250YWlucyBhbiBvcGVyYW5kIGFuZCBpdHMgbmVnYXRpb24pLlxuICpcbiAqIEBwYXJhbSBvcGVyYW5kcyBFeHByZXNzaW9ucyB0byBjb25uZWN0IGJ5IGBhbmRgXG4gKiBAcmV0dXJucyB7RXhwcmVzc2lvbjxib29sZWFuPn0gRXhwcmVzc2lvbiBldmFsdWF0aW5nIHRvIGJvb2xlYW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFuZCguLi5vcGVyYW5kczogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPGJvb2xlYW4+W10pOiBFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgZXhwcmVzc2lvbnMgPSBmbGF0dGVuU2V0RXhwcmVzc2lvbih7XG5cdFx0X3R5cGU6IFwiU2V0XCIsXG5cdFx0b3BlcmF0b3I6IFwiJiZcIixcblx0XHRvcGVyYW5kczogb3BlcmFuZHMubWFwKHdyYXBQcmltaXRpdmUpXG5cdH0pLm9wZXJhbmRzO1xuXG5cdGlmIChoYXNVbnJlc29sdmVhYmxlRXhwcmVzc2lvbiguLi5leHByZXNzaW9ucykpIHtcblx0XHRyZXR1cm4gdW5yZXNvbHZlYWJsZUV4cHJlc3Npb247XG5cdH1cblx0bGV0IGlzU3RhdGljRmFsc2U6IGJvb2xlYW4gPSBmYWxzZTtcblx0Y29uc3Qgbm9uVHJpdmlhbEV4cHJlc3Npb24gPSBleHByZXNzaW9ucy5maWx0ZXIoZXhwcmVzc2lvbiA9PiB7XG5cdFx0aWYgKGlzQ29uc3RhbnQoZXhwcmVzc2lvbikgJiYgIWV4cHJlc3Npb24udmFsdWUpIHtcblx0XHRcdGlzU3RhdGljRmFsc2UgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gIWlzQ29uc3RhbnQoZXhwcmVzc2lvbik7XG5cdH0pO1xuXHRpZiAoaXNTdGF0aWNGYWxzZSkge1xuXHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdH0gZWxzZSBpZiAobm9uVHJpdmlhbEV4cHJlc3Npb24ubGVuZ3RoID09PSAwKSB7XG5cdFx0Ly8gUmVzb2x2ZSB0aGUgY29uc3RhbnQgdGhlblxuXHRcdGNvbnN0IGlzVmFsaWQgPSBleHByZXNzaW9ucy5yZWR1Y2UoKGlzVmFsaWQsIGV4cHJlc3Npb24pID0+IHtcblx0XHRcdHJldHVybiBpc1ZhbGlkICYmIGlzQ29uc3RhbnQoZXhwcmVzc2lvbikgJiYgZXhwcmVzc2lvbi52YWx1ZTtcblx0XHR9LCB0cnVlKTtcblx0XHRyZXR1cm4gY29uc3RhbnQoaXNWYWxpZCk7XG5cdH0gZWxzZSBpZiAobm9uVHJpdmlhbEV4cHJlc3Npb24ubGVuZ3RoID09PSAxKSB7XG5cdFx0cmV0dXJuIG5vblRyaXZpYWxFeHByZXNzaW9uWzBdO1xuXHR9IGVsc2UgaWYgKGhhc09wcG9zaXRlRXhwcmVzc2lvbnMobm9uVHJpdmlhbEV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KGZhbHNlKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0X3R5cGU6IFwiU2V0XCIsXG5cdFx0XHRvcGVyYXRvcjogXCImJlwiLFxuXHRcdFx0b3BlcmFuZHM6IG5vblRyaXZpYWxFeHByZXNzaW9uXG5cdFx0fTtcblx0fVxufVxuXG4vKipcbiAqIExvZ2ljYWwgYG9yYCBleHByZXNzaW9uLlxuICpcbiAqIFRoZSBleHByZXNzaW9uIGlzIHNpbXBsaWZpZWQgdG8gdHJ1ZSBpZiB0aGlzIGNhbiBiZSBkZWNpZGVkIHN0YXRpY2FsbHkgKHRoYXQgaXMsIGlmIG9uZSBvcGVyYW5kIGlzIGEgY29uc3RhbnRcbiAqIHRydWUgb3IgaWYgdGhlIGV4cHJlc3Npb24gY29udGFpbnMgYW4gb3BlcmFuZCBhbmQgaXRzIG5lZ2F0aW9uKS5cbiAqXG4gKiBAcGFyYW0gb3BlcmFuZHMgRXhwcmVzc2lvbnMgdG8gY29ubmVjdCBieSBgb3JgXG4gKiBAcmV0dXJucyB7RXhwcmVzc2lvbjxib29sZWFuPn0gRXhwcmVzc2lvbiBldmFsdWF0aW5nIHRvIGJvb2xlYW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9yKC4uLm9wZXJhbmRzOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8Ym9vbGVhbj5bXSk6IEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBleHByZXNzaW9ucyA9IGZsYXR0ZW5TZXRFeHByZXNzaW9uKHtcblx0XHRfdHlwZTogXCJTZXRcIixcblx0XHRvcGVyYXRvcjogXCJ8fFwiLFxuXHRcdG9wZXJhbmRzOiBvcGVyYW5kcy5tYXAod3JhcFByaW1pdGl2ZSlcblx0fSkub3BlcmFuZHM7XG5cdGlmIChoYXNVbnJlc29sdmVhYmxlRXhwcmVzc2lvbiguLi5leHByZXNzaW9ucykpIHtcblx0XHRyZXR1cm4gdW5yZXNvbHZlYWJsZUV4cHJlc3Npb247XG5cdH1cblx0bGV0IGlzU3RhdGljVHJ1ZTogYm9vbGVhbiA9IGZhbHNlO1xuXHRjb25zdCBub25Ucml2aWFsRXhwcmVzc2lvbiA9IGV4cHJlc3Npb25zLmZpbHRlcihleHByZXNzaW9uID0+IHtcblx0XHRpZiAoaXNDb25zdGFudChleHByZXNzaW9uKSAmJiBleHByZXNzaW9uLnZhbHVlKSB7XG5cdFx0XHRpc1N0YXRpY1RydWUgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gIWlzQ29uc3RhbnQoZXhwcmVzc2lvbikgfHwgZXhwcmVzc2lvbi52YWx1ZTtcblx0fSk7XG5cdGlmIChpc1N0YXRpY1RydWUpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG5cdH0gZWxzZSBpZiAobm9uVHJpdmlhbEV4cHJlc3Npb24ubGVuZ3RoID09PSAwKSB7XG5cdFx0Ly8gUmVzb2x2ZSB0aGUgY29uc3RhbnQgdGhlblxuXHRcdGNvbnN0IGlzVmFsaWQgPSBleHByZXNzaW9ucy5yZWR1Y2UoKGlzVmFsaWQsIGV4cHJlc3Npb24pID0+IHtcblx0XHRcdHJldHVybiBpc1ZhbGlkICYmIGlzQ29uc3RhbnQoZXhwcmVzc2lvbikgJiYgZXhwcmVzc2lvbi52YWx1ZTtcblx0XHR9LCB0cnVlKTtcblx0XHRyZXR1cm4gY29uc3RhbnQoaXNWYWxpZCk7XG5cdH0gZWxzZSBpZiAobm9uVHJpdmlhbEV4cHJlc3Npb24ubGVuZ3RoID09PSAxKSB7XG5cdFx0cmV0dXJuIG5vblRyaXZpYWxFeHByZXNzaW9uWzBdO1xuXHR9IGVsc2UgaWYgKGhhc09wcG9zaXRlRXhwcmVzc2lvbnMobm9uVHJpdmlhbEV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KHRydWUpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB7XG5cdFx0XHRfdHlwZTogXCJTZXRcIixcblx0XHRcdG9wZXJhdG9yOiBcInx8XCIsXG5cdFx0XHRvcGVyYW5kczogbm9uVHJpdmlhbEV4cHJlc3Npb25cblx0XHR9O1xuXHR9XG59XG5cbi8qKlxuICogTG9naWNhbCBgbm90YCBvcGVyYXRvci5cbiAqXG4gKiBAcGFyYW0gb3BlcmFuZCBUaGUgZXhwcmVzc2lvbiB0byByZXZlcnNlXG4gKiBAcmV0dXJucyB7RXhwcmVzc2lvbjxib29sZWFuPn0gVGhlIHJlc3VsdGluZyBleHByZXNzaW9uIHRoYXQgZXZhbHVhdGVzIHRvIGJvb2xlYW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vdChvcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8Ym9vbGVhbj4pOiBFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0b3BlcmFuZCA9IHdyYXBQcmltaXRpdmUob3BlcmFuZCk7XG5cdGlmIChoYXNVbnJlc29sdmVhYmxlRXhwcmVzc2lvbihvcGVyYW5kKSkge1xuXHRcdHJldHVybiB1bnJlc29sdmVhYmxlRXhwcmVzc2lvbjtcblx0fSBlbHNlIGlmIChpc0NvbnN0YW50KG9wZXJhbmQpKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KCFvcGVyYW5kLnZhbHVlKTtcblx0fSBlbHNlIGlmIChcblx0XHR0eXBlb2Ygb3BlcmFuZCA9PT0gXCJvYmplY3RcIiAmJlxuXHRcdG9wZXJhbmQuX3R5cGUgPT09IFwiU2V0XCIgJiZcblx0XHRvcGVyYW5kLm9wZXJhdG9yID09PSBcInx8XCIgJiZcblx0XHRvcGVyYW5kLm9wZXJhbmRzLmV2ZXJ5KGV4cHJlc3Npb24gPT4gaXNDb25zdGFudChleHByZXNzaW9uKSB8fCBpc0NvbXBhcmlzb24oZXhwcmVzc2lvbikpXG5cdCkge1xuXHRcdHJldHVybiBhbmQoLi4ub3BlcmFuZC5vcGVyYW5kcy5tYXAoZXhwcmVzc2lvbiA9PiBub3QoZXhwcmVzc2lvbikpKTtcblx0fSBlbHNlIGlmIChcblx0XHR0eXBlb2Ygb3BlcmFuZCA9PT0gXCJvYmplY3RcIiAmJlxuXHRcdG9wZXJhbmQuX3R5cGUgPT09IFwiU2V0XCIgJiZcblx0XHRvcGVyYW5kLm9wZXJhdG9yID09PSBcIiYmXCIgJiZcblx0XHRvcGVyYW5kLm9wZXJhbmRzLmV2ZXJ5KGV4cHJlc3Npb24gPT4gaXNDb25zdGFudChleHByZXNzaW9uKSB8fCBpc0NvbXBhcmlzb24oZXhwcmVzc2lvbikpXG5cdCkge1xuXHRcdHJldHVybiBvciguLi5vcGVyYW5kLm9wZXJhbmRzLm1hcChleHByZXNzaW9uID0+IG5vdChleHByZXNzaW9uKSkpO1xuXHR9IGVsc2UgaWYgKGlzQ29tcGFyaXNvbihvcGVyYW5kKSkge1xuXHRcdC8vIENyZWF0ZSB0aGUgcmV2ZXJzZSBjb21wYXJpc29uXG5cdFx0c3dpdGNoIChvcGVyYW5kLm9wZXJhdG9yKSB7XG5cdFx0XHRjYXNlIFwiIT09XCI6XG5cdFx0XHRcdHJldHVybiBlcXVhbChvcGVyYW5kLm9wZXJhbmQxLCBvcGVyYW5kLm9wZXJhbmQyKTtcblx0XHRcdGNhc2UgXCI8XCI6XG5cdFx0XHRcdHJldHVybiBncmVhdGVyT3JFcXVhbChvcGVyYW5kLm9wZXJhbmQxLCBvcGVyYW5kLm9wZXJhbmQyKTtcblx0XHRcdGNhc2UgXCI8PVwiOlxuXHRcdFx0XHRyZXR1cm4gZ3JlYXRlclRoYW4ob3BlcmFuZC5vcGVyYW5kMSwgb3BlcmFuZC5vcGVyYW5kMik7XG5cdFx0XHRjYXNlIFwiPT09XCI6XG5cdFx0XHRcdHJldHVybiBub3RFcXVhbChvcGVyYW5kLm9wZXJhbmQxLCBvcGVyYW5kLm9wZXJhbmQyKTtcblx0XHRcdGNhc2UgXCI+XCI6XG5cdFx0XHRcdHJldHVybiBsZXNzT3JFcXVhbChvcGVyYW5kLm9wZXJhbmQxLCBvcGVyYW5kLm9wZXJhbmQyKTtcblx0XHRcdGNhc2UgXCI+PVwiOlxuXHRcdFx0XHRyZXR1cm4gbGVzc1RoYW4ob3BlcmFuZC5vcGVyYW5kMSwgb3BlcmFuZC5vcGVyYW5kMik7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG9wZXJhbmQuX3R5cGUgPT09IFwiTm90XCIpIHtcblx0XHRyZXR1cm4gb3BlcmFuZC5vcGVyYW5kO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB7XG5cdFx0XHRfdHlwZTogXCJOb3RcIixcblx0XHRcdG9wZXJhbmQ6IG9wZXJhbmRcblx0XHR9O1xuXHR9XG59XG5cbi8qKlxuICogRXZhbHVhdGVzIHdoZXRoZXIgYSBiaW5kaW5nIGV4cHJlc3Npb24gaXMgZXF1YWwgdG8gdHJ1ZSB3aXRoIGEgbG9vc2UgZXF1YWxpdHkuXG4gKlxuICogQHBhcmFtIG9wZXJhbmQgVGhlIGV4cHJlc3Npb24gdG8gY2hlY2tcbiAqIEByZXR1cm5zIHtFeHByZXNzaW9uPGJvb2xlYW4+fSBUaGUgcmVzdWx0aW5nIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMgdG8gYm9vbGVhblxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNUcnV0aHkob3BlcmFuZDogRXhwcmVzc2lvbjxzdHJpbmc+KTogRXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGlmIChpc0NvbnN0YW50KG9wZXJhbmQpKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KCEhb3BlcmFuZC52YWx1ZSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdF90eXBlOiBcIlRydXRoeVwiLFxuXHRcdFx0b3BlcmFuZDogb3BlcmFuZFxuXHRcdH07XG5cdH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgYmluZGluZyBleHByZXNzaW9uIHRoYXQgd2lsbCBiZSBldmFsdWF0ZWQgYnkgdGhlIGNvcnJlc3BvbmRpbmcgbW9kZWwuXG4gKlxuICogQHRlbXBsYXRlIFRhcmdldFR5cGVcbiAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIG9uIHRoZSBtb2RlbFxuICogQHBhcmFtIFttb2RlbE5hbWVdIFRoZSBuYW1lIG9mIHRoZSBtb2RlbFxuICogQHBhcmFtIFt2aXNpdGVkTmF2aWdhdGlvblBhdGhzXSBUaGUgcGF0aHMgZnJvbSB0aGUgcm9vdCBlbnRpdHlTZXRcbiAqIEBwYXJhbSBbcGF0aFZpc2l0b3JdIEEgZnVuY3Rpb24gdG8gbW9kaWZ5IHRoZSByZXN1bHRpbmcgcGF0aFxuICogQHJldHVybnMge0JpbmRpbmdFeHByZXNzaW9uRXhwcmVzc2lvbjxUYXJnZXRUeXBlPn0gVGhlIGRlZmF1bHQgYmluZGluZyBleHByZXNzaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiaW5kaW5nRXhwcmVzc2lvbjxUYXJnZXRUeXBlIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdHBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0bW9kZWxOYW1lPzogc3RyaW5nLFxuXHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSA9IFtdLFxuXHRwYXRoVmlzaXRvcj86IEZ1bmN0aW9uXG4pOiBCaW5kaW5nRXhwcmVzc2lvbkV4cHJlc3Npb248VGFyZ2V0VHlwZT4gfCBVbnJlc29sdmVhYmxlQmluZGluZ0V4cHJlc3Npb24ge1xuXHRpZiAocGF0aCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIHVucmVzb2x2ZWFibGVFeHByZXNzaW9uO1xuXHR9XG5cdGxldCB0YXJnZXRQYXRoO1xuXHRpZiAocGF0aFZpc2l0b3IpIHtcblx0XHR0YXJnZXRQYXRoID0gcGF0aFZpc2l0b3IocGF0aCk7XG5cdFx0aWYgKHRhcmdldFBhdGggPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIHVucmVzb2x2ZWFibGVFeHByZXNzaW9uO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRjb25zdCBsb2NhbFBhdGggPSB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLmNvbmNhdCgpO1xuXHRcdGxvY2FsUGF0aC5wdXNoKHBhdGgpO1xuXHRcdHRhcmdldFBhdGggPSBsb2NhbFBhdGguam9pbihcIi9cIik7XG5cdH1cblx0cmV0dXJuIHtcblx0XHRfdHlwZTogXCJCaW5kaW5nXCIsXG5cdFx0bW9kZWxOYW1lOiBtb2RlbE5hbWUsXG5cdFx0cGF0aDogdGFyZ2V0UGF0aFxuXHR9O1xufVxuXG50eXBlIFBsYWluRXhwcmVzc2lvbk9iamVjdCA9IHsgW2luZGV4OiBzdHJpbmddOiBFeHByZXNzaW9uPGFueT4gfTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY29uc3RhbnQgZXhwcmVzc2lvbiBiYXNlZCBvbiBhIHByaW1pdGl2ZSB2YWx1ZS5cbiAqXG4gKiBAdGVtcGxhdGUgVFxuICogQHBhcmFtIHZhbHVlIFRoZSBjb25zdGFudCB0byB3cmFwIGluIGFuIGV4cHJlc3Npb25cbiAqIEByZXR1cm5zIHtDb25zdGFudEV4cHJlc3Npb248VD59IFRoZSBjb25zdGFudCBleHByZXNzaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb25zdGFudDxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4odmFsdWU6IFQpOiBDb25zdGFudEV4cHJlc3Npb248VD4ge1xuXHRsZXQgY29uc3RhbnRWYWx1ZTogVDtcblxuXHRpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcblx0XHRcdGNvbnN0YW50VmFsdWUgPSB2YWx1ZS5tYXAod3JhcFByaW1pdGl2ZSkgYXMgVDtcblx0XHR9IGVsc2UgaWYgKGlzUHJpbWl0aXZlT2JqZWN0KHZhbHVlIGFzIG9iamVjdCkpIHtcblx0XHRcdGNvbnN0YW50VmFsdWUgPSB2YWx1ZS52YWx1ZU9mKCkgYXMgVDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgdmFsID0gdmFsdWUgYXMgeyBbbmFtZTogc3RyaW5nXTogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPGFueT4gfTtcblx0XHRcdGNvbnN0IG9iaiA9IE9iamVjdC5rZXlzKHZhbCkucmVkdWNlKChvYmosIGtleSkgPT4ge1xuXHRcdFx0XHRjb25zdCB2YWx1ZSA9IHdyYXBQcmltaXRpdmUodmFsW2tleV0pO1xuXHRcdFx0XHRpZiAodmFsdWUuX3R5cGUgIT09IFwiQ29uc3RhbnRcIiB8fCB2YWx1ZS52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0b2JqW2tleV0gPSB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gb2JqO1xuXHRcdFx0fSwge30gYXMgUGxhaW5FeHByZXNzaW9uT2JqZWN0KTtcblxuXHRcdFx0Y29uc3RhbnRWYWx1ZSA9IG9iaiBhcyBUO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRjb25zdGFudFZhbHVlID0gdmFsdWU7XG5cdH1cblxuXHRyZXR1cm4geyBfdHlwZTogXCJDb25zdGFudFwiLCB2YWx1ZTogY29uc3RhbnRWYWx1ZSB9O1xufVxuXG50eXBlIEV2YWx1YXRpb25UeXBlID0gXCJib29sZWFuXCI7XG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUJpbmRpbmdTdHJpbmc8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHR2YWx1ZTogc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlcixcblx0dGFyZ2V0VHlwZT86IEV2YWx1YXRpb25UeXBlXG4pOiBDb25zdGFudEV4cHJlc3Npb248VD4gfCBFbWJlZGRlZEJpbmRpbmdFeHByZXNzaW9uPFQ+IHwgRW1iZWRkZWRFeHByZXNzaW9uQmluZGluZ0V4cHJlc3Npb248VD4ge1xuXHRpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgdmFsdWUuc3RhcnRzV2l0aChcIntcIikpIHtcblx0XHRpZiAodmFsdWUuc3RhcnRzV2l0aChcIns9XCIpKSB7XG5cdFx0XHQvLyBFeHByZXNzaW9uIGJpbmRpbmcsIHdlIGNhbiBqdXN0IHJlbW92ZSB0aGUgb3V0ZXIgYmluZGluZyB0aGluZ3Ncblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdF90eXBlOiBcIkVtYmVkZGVkRXhwcmVzc2lvbkJpbmRpbmdcIixcblx0XHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRfdHlwZTogXCJFbWJlZGRlZEJpbmRpbmdcIixcblx0XHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRzd2l0Y2ggKHRhcmdldFR5cGUpIHtcblx0XHRcdGNhc2UgXCJib29sZWFuXCI6XG5cdFx0XHRcdGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgKHZhbHVlID09PSBcInRydWVcIiB8fCB2YWx1ZSA9PT0gXCJmYWxzZVwiKSkge1xuXHRcdFx0XHRcdHJldHVybiBjb25zdGFudCh2YWx1ZSA9PT0gXCJ0cnVlXCIpIGFzIENvbnN0YW50RXhwcmVzc2lvbjxUPjtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gY29uc3RhbnQodmFsdWUpIGFzIENvbnN0YW50RXhwcmVzc2lvbjxUPjtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBjb25zdGFudCh2YWx1ZSkgYXMgQ29uc3RhbnRFeHByZXNzaW9uPFQ+O1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEEgbmFtZWQgcmVmZXJlbmNlLlxuICpcbiAqIEBzZWUgZm5cbiAqXG4gKiBAcGFyYW0gcmVmIFJlZmVyZW5jZVxuICogQHJldHVybnMge1JlZmVyZW5jZUV4cHJlc3Npb259IFRoZSBvYmplY3QgcmVmZXJlbmNlIGJpbmRpbmcgcGFydFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVmKHJlZjogc3RyaW5nIHwgbnVsbCk6IFJlZmVyZW5jZUV4cHJlc3Npb24ge1xuXHRyZXR1cm4geyBfdHlwZTogXCJSZWZcIiwgcmVmIH07XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHR5cGUgaXMgYW4gZXhwcmVzc2lvbi5cbiAqXG4gKiBFdmVyeSBvYmplY3QgaGF2aW5nIGEgcHJvcGVydHkgbmFtZWQgYF90eXBlYCBvZiBzb21lIHZhbHVlIGlzIGNvbnNpZGVyZWQgYW4gZXhwcmVzc2lvbiwgZXZlbiBpZiB0aGVyZSBpcyBhY3R1YWxseVxuICogbm8gc3VjaCBleHByZXNzaW9uIHR5cGUgc3VwcG9ydGVkLlxuICpcbiAqIEBwYXJhbSBzb21ldGhpbmcgVHlwZSB0byBjaGVja1xuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgdHlwZSBpcyBjb25zaWRlcmVkIHRvIGJlIGFuIGV4cHJlc3Npb25cbiAqL1xuZnVuY3Rpb24gaXNFeHByZXNzaW9uPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihzb21ldGhpbmc6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPik6IHNvbWV0aGluZyBpcyBFeHByZXNzaW9uPFQ+IHtcblx0cmV0dXJuIHNvbWV0aGluZyAhPT0gbnVsbCAmJiB0eXBlb2Ygc29tZXRoaW5nID09PSBcIm9iamVjdFwiICYmIChzb21ldGhpbmcgYXMgQmFzZUV4cHJlc3Npb248VD4pLl90eXBlICE9PSB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogV3JhcCBhIHByaW1pdGl2ZSBpbnRvIGEgY29uc3RhbnQgZXhwcmVzc2lvbiBpZiBpdCBpcyBub3QgYWxyZWFkeSBhbiBleHByZXNzaW9uLlxuICpcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAcGFyYW0gc29tZXRoaW5nIFRoZSBvYmplY3QgdG8gd3JhcCBpbiBhIENvbnN0YW50IGV4cHJlc3Npb25cbiAqIEByZXR1cm5zIHtFeHByZXNzaW9uPFQ+fSBFaXRoZXIgdGhlIG9yaWdpbmFsIG9iamVjdCBvciB0aGUgd3JhcHBlZCBvbmUgZGVwZW5kaW5nIG9uIHRoZSBjYXNlXG4gKi9cbmZ1bmN0aW9uIHdyYXBQcmltaXRpdmU8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KHNvbWV0aGluZzogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+KTogRXhwcmVzc2lvbjxUPiB7XG5cdGlmIChpc0V4cHJlc3Npb24oc29tZXRoaW5nKSkge1xuXHRcdHJldHVybiBzb21ldGhpbmc7XG5cdH1cblxuXHRyZXR1cm4gY29uc3RhbnQoc29tZXRoaW5nKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGV4cHJlc3Npb24gb3IgdmFsdWUgcHJvdmlkZWQgaXMgY29uc3RhbnQgb3Igbm90LlxuICpcbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtICBtYXliZUNvbnN0YW50IFRoZSBleHByZXNzaW9uIG9yIHByaW1pdGl2ZSB2YWx1ZSB0aGF0IGlzIHRvIGJlIGNoZWNrZWRcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgaXQgaXMgY29uc3RhbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ29uc3RhbnQ8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KG1heWJlQ29uc3RhbnQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPik6IG1heWJlQ29uc3RhbnQgaXMgQ29uc3RhbnRFeHByZXNzaW9uPFQ+IHtcblx0cmV0dXJuIHR5cGVvZiBtYXliZUNvbnN0YW50ICE9PSBcIm9iamVjdFwiIHx8IChtYXliZUNvbnN0YW50IGFzIEJhc2VFeHByZXNzaW9uPFQ+KS5fdHlwZSA9PT0gXCJDb25zdGFudFwiO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZXhwcmVzc2lvbiBvciB2YWx1ZSBwcm92aWRlZCBpcyBiaW5kaW5nIG9yIG5vdC5cbiAqXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSAgbWF5YmVCaW5kaW5nIFRoZSBleHByZXNzaW9uIG9yIHByaW1pdGl2ZSB2YWx1ZSB0aGF0IGlzIHRvIGJlIGNoZWNrZWRcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgaXQgaXMgYmluZGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNCaW5kaW5nPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihtYXliZUJpbmRpbmc6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPik6IG1heWJlQmluZGluZyBpcyBCaW5kaW5nRXhwcmVzc2lvbkV4cHJlc3Npb248VD4ge1xuXHRyZXR1cm4gdHlwZW9mIG1heWJlQmluZGluZyA9PT0gXCJvYmplY3RcIiAmJiAobWF5YmVCaW5kaW5nIGFzIEJhc2VFeHByZXNzaW9uPFQ+KS5fdHlwZSA9PT0gXCJCaW5kaW5nXCI7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBleHByZXNzaW9uIHByb3ZpZGVkIGlzIGEgY29tcGFyaXNvbiBvciBub3QuXG4gKlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgZXhwcmVzc2lvblxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgZXhwcmVzc2lvbiBpcyBhIENvbXBhcmlzb25FeHByZXNzaW9uXG4gKi9cbmZ1bmN0aW9uIGlzQ29tcGFyaXNvbjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oZXhwcmVzc2lvbjogRXhwcmVzc2lvbjxUPik6IGV4cHJlc3Npb24gaXMgQ29tcGFyaXNvbkV4cHJlc3Npb24ge1xuXHRyZXR1cm4gZXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJDb21wYXJpc29uXCI7XG59XG5cbnR5cGUgQ29tcGxleEFubm90YXRpb25FeHByZXNzaW9uPFA+ID1cblx0fCBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBBcHBseUFubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgSWZBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IE9yQW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBBbmRBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IE5lQW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBFcUFubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgTm90QW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBHdEFubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgR2VBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IExlQW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBMdEFubm90YXRpb25FeHByZXNzaW9uPFA+O1xuXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZU9iamVjdChvYmplY3RUeXBlOiBvYmplY3QpOiBib29sZWFuIHtcblx0c3dpdGNoIChvYmplY3RUeXBlLmNvbnN0cnVjdG9yLm5hbWUpIHtcblx0XHRjYXNlIFwiU3RyaW5nXCI6XG5cdFx0Y2FzZSBcIk51bWJlclwiOlxuXHRcdGNhc2UgXCJCb29sZWFuXCI6XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG4vKipcbiAqIENoZWNrIGlmIHRoZSBwYXNzZWQgYW5ub3RhdGlvbiBleHByZXNzaW9uIGlzIGEgQ29tcGxleEFubm90YXRpb25FeHByZXNzaW9uLlxuICpcbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtICBhbm5vdGF0aW9uRXhwcmVzc2lvbiBUaGUgYW5ub3RhdGlvbiBleHByZXNzaW9uIHRvIGV2YWx1YXRlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBvYmplY3QgaXMgYSB7Q29tcGxleEFubm90YXRpb25FeHByZXNzaW9ufVxuICovXG5mdW5jdGlvbiBpc0NvbXBsZXhBbm5vdGF0aW9uRXhwcmVzc2lvbjxUPihcblx0YW5ub3RhdGlvbkV4cHJlc3Npb246IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPFQ+XG4pOiBhbm5vdGF0aW9uRXhwcmVzc2lvbiBpcyBDb21wbGV4QW5ub3RhdGlvbkV4cHJlc3Npb248VD4ge1xuXHRyZXR1cm4gdHlwZW9mIGFubm90YXRpb25FeHByZXNzaW9uID09PSBcIm9iamVjdFwiICYmICFpc1ByaW1pdGl2ZU9iamVjdChhbm5vdGF0aW9uRXhwcmVzc2lvbiBhcyBvYmplY3QpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIHRoZSBjb3JyZXNwb25kaW5nIGV4cHJlc3Npb24gZm9yIGEgZ2l2ZW4gYW5ub3RhdGlvbiBleHByZXNzaW9uLlxuICpcbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGFubm90YXRpb25FeHByZXNzaW9uIFRoZSBzb3VyY2UgYW5ub3RhdGlvbiBleHByZXNzaW9uXG4gKiBAcGFyYW0gdmlzaXRlZE5hdmlnYXRpb25QYXRocyBUaGUgcGF0aCBmcm9tIHRoZSByb290IGVudGl0eSBzZXRcbiAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgRGVmYXVsdCB2YWx1ZSBpZiB0aGUgYW5ub3RhdGlvbkV4cHJlc3Npb24gaXMgdW5kZWZpbmVkXG4gKiBAcGFyYW0gcGF0aFZpc2l0b3IgQSBmdW5jdGlvbiB0byBtb2RpZnkgdGhlIHJlc3VsdGluZyBwYXRoXG4gKiBAcmV0dXJucyB7RXhwcmVzc2lvbjxUPn0gVGhlIGV4cHJlc3Npb24gZXF1aXZhbGVudCB0byB0aGF0IGFubm90YXRpb24gZXhwcmVzc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gYW5ub3RhdGlvbkV4cHJlc3Npb248VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRhbm5vdGF0aW9uRXhwcmVzc2lvbjogUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8VD4sXG5cdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdID0gW10sXG5cdGRlZmF1bHRWYWx1ZT86IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0cGF0aFZpc2l0b3I/OiBGdW5jdGlvblxuKTogRXhwcmVzc2lvbjxUPiB7XG5cdGlmIChhbm5vdGF0aW9uRXhwcmVzc2lvbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIHdyYXBQcmltaXRpdmUoZGVmYXVsdFZhbHVlIGFzIFQpO1xuXHR9XG5cdGlmICghaXNDb21wbGV4QW5ub3RhdGlvbkV4cHJlc3Npb24oYW5ub3RhdGlvbkV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KGFubm90YXRpb25FeHByZXNzaW9uKTtcblx0fSBlbHNlIHtcblx0XHRzd2l0Y2ggKGFubm90YXRpb25FeHByZXNzaW9uLnR5cGUpIHtcblx0XHRcdGNhc2UgXCJQYXRoXCI6XG5cdFx0XHRcdHJldHVybiBiaW5kaW5nRXhwcmVzc2lvbihhbm5vdGF0aW9uRXhwcmVzc2lvbi5wYXRoLCB1bmRlZmluZWQsIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKTtcblx0XHRcdGNhc2UgXCJJZlwiOlxuXHRcdFx0XHRyZXR1cm4gYW5ub3RhdGlvbklmRXhwcmVzc2lvbihhbm5vdGF0aW9uRXhwcmVzc2lvbi5JZiwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpO1xuXHRcdFx0Y2FzZSBcIk5vdFwiOlxuXHRcdFx0XHRyZXR1cm4gbm90KHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uRXhwcmVzc2lvbi5Ob3QsIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKSkgYXMgRXhwcmVzc2lvbjxUPjtcblx0XHRcdGNhc2UgXCJFcVwiOlxuXHRcdFx0XHRyZXR1cm4gZXF1YWwoXG5cdFx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25FeHByZXNzaW9uLkVxWzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciksXG5cdFx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25FeHByZXNzaW9uLkVxWzFdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcilcblx0XHRcdFx0KSBhcyBFeHByZXNzaW9uPFQ+O1xuXHRcdFx0Y2FzZSBcIk5lXCI6XG5cdFx0XHRcdHJldHVybiBub3RFcXVhbChcblx0XHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvbkV4cHJlc3Npb24uTmVbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKSxcblx0XHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvbkV4cHJlc3Npb24uTmVbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKVxuXHRcdFx0XHQpIGFzIEV4cHJlc3Npb248VD47XG5cdFx0XHRjYXNlIFwiR3RcIjpcblx0XHRcdFx0cmV0dXJuIGdyZWF0ZXJUaGFuKFxuXHRcdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uRXhwcmVzc2lvbi5HdFswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uRXhwcmVzc2lvbi5HdFsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0XHRcdCkgYXMgRXhwcmVzc2lvbjxUPjtcblx0XHRcdGNhc2UgXCJHZVwiOlxuXHRcdFx0XHRyZXR1cm4gZ3JlYXRlck9yRXF1YWwoXG5cdFx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25FeHByZXNzaW9uLkdlWzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciksXG5cdFx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25FeHByZXNzaW9uLkdlWzFdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcilcblx0XHRcdFx0KSBhcyBFeHByZXNzaW9uPFQ+O1xuXHRcdFx0Y2FzZSBcIkx0XCI6XG5cdFx0XHRcdHJldHVybiBsZXNzVGhhbihcblx0XHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvbkV4cHJlc3Npb24uTHRbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKSxcblx0XHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvbkV4cHJlc3Npb24uTHRbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKVxuXHRcdFx0XHQpIGFzIEV4cHJlc3Npb248VD47XG5cdFx0XHRjYXNlIFwiTGVcIjpcblx0XHRcdFx0cmV0dXJuIGxlc3NPckVxdWFsKFxuXHRcdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uRXhwcmVzc2lvbi5MZVswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uRXhwcmVzc2lvbi5MZVsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0XHRcdCkgYXMgRXhwcmVzc2lvbjxUPjtcblx0XHRcdGNhc2UgXCJPclwiOlxuXHRcdFx0XHRyZXR1cm4gb3IoXG5cdFx0XHRcdFx0Li4uKGFubm90YXRpb25FeHByZXNzaW9uLk9yLm1hcChmdW5jdGlvbihvckNvbmRpdGlvbikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihvckNvbmRpdGlvbiwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpO1xuXHRcdFx0XHRcdH0pIGFzIEV4cHJlc3Npb248Ym9vbGVhbj5bXSlcblx0XHRcdFx0KSBhcyBFeHByZXNzaW9uPFQ+O1xuXHRcdFx0Y2FzZSBcIkFuZFwiOlxuXHRcdFx0XHRyZXR1cm4gYW5kKFxuXHRcdFx0XHRcdC4uLihhbm5vdGF0aW9uRXhwcmVzc2lvbi5BbmQubWFwKGZ1bmN0aW9uKGFuZENvbmRpdGlvbikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbmRDb25kaXRpb24sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKTtcblx0XHRcdFx0XHR9KSBhcyBFeHByZXNzaW9uPGJvb2xlYW4+W10pXG5cdFx0XHRcdCkgYXMgRXhwcmVzc2lvbjxUPjtcblx0XHRcdGNhc2UgXCJBcHBseVwiOlxuXHRcdFx0XHRyZXR1cm4gYW5ub3RhdGlvbkFwcGx5RXhwcmVzc2lvbihcblx0XHRcdFx0XHRhbm5vdGF0aW9uRXhwcmVzc2lvbiBhcyBBcHBseUFubm90YXRpb25FeHByZXNzaW9uPHN0cmluZz4sXG5cdFx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0XHRwYXRoVmlzaXRvclxuXHRcdFx0XHQpIGFzIEV4cHJlc3Npb248VD47XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogUGFyc2UgdGhlIGFubm90YXRpb24gY29uZGl0aW9uIGludG8gYW4gZXhwcmVzc2lvbi5cbiAqXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBhbm5vdGF0aW9uVmFsdWUgVGhlIGNvbmRpdGlvbiBvciB2YWx1ZSBmcm9tIHRoZSBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gdmlzaXRlZE5hdmlnYXRpb25QYXRocyBUaGUgcGF0aCBmcm9tIHRoZSByb290IGVudGl0eSBzZXRcbiAqIEBwYXJhbSBwYXRoVmlzaXRvciBBIGZ1bmN0aW9uIHRvIG1vZGlmeSB0aGUgcmVzdWx0aW5nIHBhdGhcbiAqIEByZXR1cm5zIHtFeHByZXNzaW9uPFQ+fSBBbiBlcXVpdmFsZW50IGV4cHJlc3Npb25cbiAqL1xuZnVuY3Rpb24gcGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0YW5ub3RhdGlvblZhbHVlOiBDb25kaXRpb25hbENoZWNrT3JWYWx1ZSxcblx0dmlzaXRlZE5hdmlnYXRpb25QYXRoczogc3RyaW5nW10gPSBbXSxcblx0cGF0aFZpc2l0b3I/OiBGdW5jdGlvblxuKTogRXhwcmVzc2lvbjxUPiB7XG5cdGlmIChhbm5vdGF0aW9uVmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIGFubm90YXRpb25WYWx1ZSAhPT0gXCJvYmplY3RcIikge1xuXHRcdHJldHVybiBjb25zdGFudChhbm5vdGF0aW9uVmFsdWUgYXMgVCk7XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJE9yXCIpKSB7XG5cdFx0cmV0dXJuIG9yKFxuXHRcdFx0Li4uKCgoYW5ub3RhdGlvblZhbHVlIGFzIE9yQ29uZGl0aW9uYWxFeHByZXNzaW9uKS4kT3IubWFwKGZ1bmN0aW9uKG9yQ29uZGl0aW9uKSB7XG5cdFx0XHRcdHJldHVybiBwYXJzZUFubm90YXRpb25Db25kaXRpb24ob3JDb25kaXRpb24sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKTtcblx0XHRcdH0pIGFzIHVua25vd24pIGFzIEV4cHJlc3Npb248Ym9vbGVhbj5bXSlcblx0XHQpIGFzIEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJEFuZFwiKSkge1xuXHRcdHJldHVybiBhbmQoXG5cdFx0XHQuLi4oKChhbm5vdGF0aW9uVmFsdWUgYXMgQW5kQ29uZGl0aW9uYWxFeHByZXNzaW9uKS4kQW5kLm1hcChmdW5jdGlvbihhbmRDb25kaXRpb24pIHtcblx0XHRcdFx0cmV0dXJuIHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbmRDb25kaXRpb24sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKTtcblx0XHRcdH0pIGFzIHVua25vd24pIGFzIEV4cHJlc3Npb248Ym9vbGVhbj5bXSlcblx0XHQpIGFzIEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJE5vdFwiKSkge1xuXHRcdHJldHVybiBub3QoXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oKGFubm90YXRpb25WYWx1ZSBhcyBOb3RDb25kaXRpb25hbEV4cHJlc3Npb24pLiROb3RbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKVxuXHRcdCkgYXMgRXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkRXFcIikpIHtcblx0XHRyZXR1cm4gZXF1YWwoXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oKGFubm90YXRpb25WYWx1ZSBhcyBFcUNvbmRpdGlvbmFsRXhwcmVzc2lvbikuJEVxWzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciksXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oKGFubm90YXRpb25WYWx1ZSBhcyBFcUNvbmRpdGlvbmFsRXhwcmVzc2lvbikuJEVxWzFdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcilcblx0XHQpIGFzIEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJE5lXCIpKSB7XG5cdFx0cmV0dXJuIG5vdEVxdWFsKFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgTmVDb25kaXRpb25hbEV4cHJlc3Npb24pLiROZVswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgTmVDb25kaXRpb25hbEV4cHJlc3Npb24pLiROZVsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0KSBhcyBFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRHdFwiKSkge1xuXHRcdHJldHVybiBncmVhdGVyVGhhbihcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbigoYW5ub3RhdGlvblZhbHVlIGFzIEd0Q29uZGl0aW9uYWxFeHByZXNzaW9uKS4kR3RbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKSxcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbigoYW5ub3RhdGlvblZhbHVlIGFzIEd0Q29uZGl0aW9uYWxFeHByZXNzaW9uKS4kR3RbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKVxuXHRcdCkgYXMgRXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkR2VcIikpIHtcblx0XHRyZXR1cm4gZ3JlYXRlck9yRXF1YWwoXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oKGFubm90YXRpb25WYWx1ZSBhcyBHZUNvbmRpdGlvbmFsRXhwcmVzc2lvbikuJEdlWzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciksXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oKGFubm90YXRpb25WYWx1ZSBhcyBHZUNvbmRpdGlvbmFsRXhwcmVzc2lvbikuJEdlWzFdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcilcblx0XHQpIGFzIEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJEx0XCIpKSB7XG5cdFx0cmV0dXJuIGxlc3NUaGFuKFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgTHRDb25kaXRpb25hbEV4cHJlc3Npb24pLiRMdFswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgTHRDb25kaXRpb25hbEV4cHJlc3Npb24pLiRMdFsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0KSBhcyBFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRMZVwiKSkge1xuXHRcdHJldHVybiBsZXNzT3JFcXVhbChcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbigoYW5ub3RhdGlvblZhbHVlIGFzIExlQ29uZGl0aW9uYWxFeHByZXNzaW9uKS4kTGVbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKSxcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbigoYW5ub3RhdGlvblZhbHVlIGFzIExlQ29uZGl0aW9uYWxFeHByZXNzaW9uKS4kTGVbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKVxuXHRcdCkgYXMgRXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkUGF0aFwiKSkge1xuXHRcdHJldHVybiBiaW5kaW5nRXhwcmVzc2lvbigoYW5ub3RhdGlvblZhbHVlIGFzIFBhdGhDb25kaXRpb25FeHByZXNzaW9uPFQ+KS4kUGF0aCwgdW5kZWZpbmVkLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcik7XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJEFwcGx5XCIpKSB7XG5cdFx0cmV0dXJuIGFubm90YXRpb25FeHByZXNzaW9uKFxuXHRcdFx0e1xuXHRcdFx0XHR0eXBlOiBcIkFwcGx5XCIsXG5cdFx0XHRcdEZ1bmN0aW9uOiAoYW5ub3RhdGlvblZhbHVlIGFzIGFueSkuJEZ1bmN0aW9uLFxuXHRcdFx0XHRBcHBseTogKGFubm90YXRpb25WYWx1ZSBhcyBhbnkpLiRBcHBseVxuXHRcdFx0fSBhcyBULFxuXHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdHBhdGhWaXNpdG9yXG5cdFx0KTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkSWZcIikpIHtcblx0XHRyZXR1cm4gYW5ub3RhdGlvbkV4cHJlc3Npb24oXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6IFwiSWZcIixcblx0XHRcdFx0SWY6IChhbm5vdGF0aW9uVmFsdWUgYXMgYW55KS4kSWZcblx0XHRcdH0gYXMgVCxcblx0XHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsXG5cdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRwYXRoVmlzaXRvclxuXHRcdCk7XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJEVudW1NZW1iZXJcIikpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQocmVzb2x2ZUVudW1WYWx1ZSgoYW5ub3RhdGlvblZhbHVlIGFzIGFueSkuJEVudW1NZW1iZXIpIGFzIFQpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjb25zdGFudChmYWxzZSBhcyBUKTtcblx0fVxufVxuXG4vKipcbiAqIFByb2Nlc3MgdGhlIHtJZkFubm90YXRpb25FeHByZXNzaW9uVmFsdWV9IGludG8gYW4gZXhwcmVzc2lvbi5cbiAqXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBhbm5vdGF0aW9uSWZFeHByZXNzaW9uIEFuIElmIGV4cHJlc3Npb24gcmV0dXJuaW5nIHRoZSB0eXBlIFRcbiAqIEBwYXJhbSB2aXNpdGVkTmF2aWdhdGlvblBhdGhzIFRoZSBwYXRoIGZyb20gdGhlIHJvb3QgZW50aXR5IHNldFxuICogQHBhcmFtIHBhdGhWaXNpdG9yIEEgZnVuY3Rpb24gdG8gbW9kaWZ5IHRoZSByZXN1bHRpbmcgcGF0aFxuICogQHJldHVybnMge0V4cHJlc3Npb248VD59IFRoZSBlcXVpdmFsZW50IGlmRWxzZSBleHByZXNzaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbm5vdGF0aW9uSWZFeHByZXNzaW9uPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0YW5ub3RhdGlvbklmRXhwcmVzc2lvbjogSWZBbm5vdGF0aW9uRXhwcmVzc2lvblZhbHVlPFQ+LFxuXHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSA9IFtdLFxuXHRwYXRoVmlzaXRvcj86IEZ1bmN0aW9uXG4pOiBFeHByZXNzaW9uPFQ+IHtcblx0cmV0dXJuIGlmRWxzZShcblx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvbklmRXhwcmVzc2lvblswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uSWZFeHByZXNzaW9uWzFdIGFzIGFueSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uSWZFeHByZXNzaW9uWzJdIGFzIGFueSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbm5vdGF0aW9uQXBwbHlFeHByZXNzaW9uKFxuXHRhbm5vdGF0aW9uQXBwbHlFeHByZXNzaW9uOiBBcHBseUFubm90YXRpb25FeHByZXNzaW9uPHN0cmluZz4sXG5cdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdID0gW10sXG5cdHBhdGhWaXNpdG9yPzogRnVuY3Rpb25cbik6IEV4cHJlc3Npb248c3RyaW5nPiB7XG5cdHN3aXRjaCAoYW5ub3RhdGlvbkFwcGx5RXhwcmVzc2lvbi5GdW5jdGlvbikge1xuXHRcdGNhc2UgXCJvZGF0YS5jb25jYXRcIjpcblx0XHRcdHJldHVybiBjb25jYXQoXG5cdFx0XHRcdC4uLmFubm90YXRpb25BcHBseUV4cHJlc3Npb24uQXBwbHkubWFwKChhcHBseVBhcmFtOiBhbnkpID0+IHtcblx0XHRcdFx0XHRsZXQgYXBwbHlQYXJhbUNvbnZlcnRlZCA9IGFwcGx5UGFyYW07XG5cdFx0XHRcdFx0aWYgKGFwcGx5UGFyYW0uaGFzT3duUHJvcGVydHkoXCIkUGF0aFwiKSkge1xuXHRcdFx0XHRcdFx0YXBwbHlQYXJhbUNvbnZlcnRlZCA9IHtcblx0XHRcdFx0XHRcdFx0dHlwZTogXCJQYXRoXCIsXG5cdFx0XHRcdFx0XHRcdHBhdGg6IGFwcGx5UGFyYW0uJFBhdGhcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChhcHBseVBhcmFtLmhhc093blByb3BlcnR5KFwiJElmXCIpKSB7XG5cdFx0XHRcdFx0XHRhcHBseVBhcmFtQ29udmVydGVkID0ge1xuXHRcdFx0XHRcdFx0XHR0eXBlOiBcIklmXCIsXG5cdFx0XHRcdFx0XHRcdElmOiBhcHBseVBhcmFtLiRJZlxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGFwcGx5UGFyYW0uaGFzT3duUHJvcGVydHkoXCIkQXBwbHlcIikpIHtcblx0XHRcdFx0XHRcdGFwcGx5UGFyYW1Db252ZXJ0ZWQgPSB7XG5cdFx0XHRcdFx0XHRcdHR5cGU6IFwiQXBwbHlcIixcblx0XHRcdFx0XHRcdFx0RnVuY3Rpb246IGFwcGx5UGFyYW0uJEZ1bmN0aW9uLFxuXHRcdFx0XHRcdFx0XHRBcHBseTogYXBwbHlQYXJhbS4kQXBwbHlcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBhbm5vdGF0aW9uRXhwcmVzc2lvbihhcHBseVBhcmFtQ29udmVydGVkLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCB1bmRlZmluZWQsIHBhdGhWaXNpdG9yKTtcblx0XHRcdFx0fSlcblx0XHRcdCk7XG5cdFx0XHRicmVhaztcblx0fVxufVxuXG4vKipcbiAqIEdlbmVyaWMgaGVscGVyIGZvciB0aGUgY29tcGFyaXNvbiBvcGVyYXRpb25zIChlcXVhbCwgbm90RXF1YWwsIC4uLikuXG4gKlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gb3BlcmF0b3IgVGhlIG9wZXJhdG9yIHRvIGFwcGx5XG4gKiBAcGFyYW0gbGVmdE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIGxlZnQgc2lkZSBvZiB0aGUgb3BlcmF0b3JcbiAqIEBwYXJhbSByaWdodE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIG9wZXJhdG9yXG4gKiBAcmV0dXJucyB7RXhwcmVzc2lvbjxib29sZWFuPn0gQW4gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGNvbXBhcmlzb25cbiAqL1xuZnVuY3Rpb24gY29tcGFyaXNvbjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IsXG5cdGxlZnRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4sXG5cdHJpZ2h0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+XG4pOiBFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgbGVmdEV4cHJlc3Npb24gPSB3cmFwUHJpbWl0aXZlKGxlZnRPcGVyYW5kKTtcblx0Y29uc3QgcmlnaHRFeHByZXNzaW9uID0gd3JhcFByaW1pdGl2ZShyaWdodE9wZXJhbmQpO1xuXHRpZiAoaGFzVW5yZXNvbHZlYWJsZUV4cHJlc3Npb24obGVmdEV4cHJlc3Npb24sIHJpZ2h0RXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gdW5yZXNvbHZlYWJsZUV4cHJlc3Npb247XG5cdH1cblx0aWYgKGlzQ29uc3RhbnQobGVmdEV4cHJlc3Npb24pICYmIGlzQ29uc3RhbnQocmlnaHRFeHByZXNzaW9uKSkge1xuXHRcdGlmIChsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gY29uc3RhbnQobGVmdEV4cHJlc3Npb24udmFsdWUgPT09IHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSk7XG5cdFx0fVxuXG5cdFx0c3dpdGNoIChvcGVyYXRvcikge1xuXHRcdFx0Y2FzZSBcIiE9PVwiOlxuXHRcdFx0XHRyZXR1cm4gY29uc3RhbnQobGVmdEV4cHJlc3Npb24udmFsdWUgIT09IHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSk7XG5cdFx0XHRjYXNlIFwiPFwiOlxuXHRcdFx0XHRyZXR1cm4gY29uc3RhbnQobGVmdEV4cHJlc3Npb24udmFsdWUgPCByaWdodEV4cHJlc3Npb24udmFsdWUpO1xuXHRcdFx0Y2FzZSBcIjw9XCI6XG5cdFx0XHRcdHJldHVybiBjb25zdGFudChsZWZ0RXhwcmVzc2lvbi52YWx1ZSA8PSByaWdodEV4cHJlc3Npb24udmFsdWUpO1xuXHRcdFx0Y2FzZSBcIj5cIjpcblx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KGxlZnRFeHByZXNzaW9uLnZhbHVlID4gcmlnaHRFeHByZXNzaW9uLnZhbHVlKTtcblx0XHRcdGNhc2UgXCI+PVwiOlxuXHRcdFx0XHRyZXR1cm4gY29uc3RhbnQobGVmdEV4cHJlc3Npb24udmFsdWUgPj0gcmlnaHRFeHByZXNzaW9uLnZhbHVlKTtcblx0XHRcdGNhc2UgXCI9PT1cIjpcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBjb25zdGFudChsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gcmlnaHRFeHByZXNzaW9uLnZhbHVlKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdF90eXBlOiBcIkNvbXBhcmlzb25cIixcblx0XHRcdG9wZXJhdG9yOiBvcGVyYXRvcixcblx0XHRcdG9wZXJhbmQxOiBsZWZ0RXhwcmVzc2lvbixcblx0XHRcdG9wZXJhbmQyOiByaWdodEV4cHJlc3Npb25cblx0XHR9O1xuXHR9XG59XG5cbi8qKlxuICogQ29tcGFyaXNvbjogXCJlcXVhbFwiICg9PT0pLlxuICpcbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGxlZnRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSBsZWZ0IHNpZGVcbiAqIEBwYXJhbSByaWdodE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGNvbXBhcmlzb25cbiAqIEByZXR1cm5zIHtFeHByZXNzaW9uPGJvb2xlYW4+fSBBbiBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY29tcGFyaXNvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZXF1YWw8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRsZWZ0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRyaWdodE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogRXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGxlZnRFeHByZXNzaW9uID0gd3JhcFByaW1pdGl2ZShsZWZ0T3BlcmFuZCk7XG5cdGNvbnN0IHJpZ2h0RXhwcmVzc2lvbiA9IHdyYXBQcmltaXRpdmUocmlnaHRPcGVyYW5kKTtcblx0aWYgKGhhc1VucmVzb2x2ZWFibGVFeHByZXNzaW9uKGxlZnRFeHByZXNzaW9uLCByaWdodEV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIHVucmVzb2x2ZWFibGVFeHByZXNzaW9uO1xuXHR9XG5cdGlmIChfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGxlZnRFeHByZXNzaW9uLCByaWdodEV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KHRydWUpO1xuXHR9XG5cblx0Ly8gKChhID09PSBjKSA9PT0gdHJ1ZSkgPT4gKGEgPT09IGMpXG5cdGlmIChsZWZ0RXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJDb21wYXJpc29uXCIgJiYgaXNDb25zdGFudChyaWdodEV4cHJlc3Npb24pICYmIHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSA9PT0gdHJ1ZSkge1xuXHRcdHJldHVybiBsZWZ0RXhwcmVzc2lvbjtcblx0fSBlbHNlIGlmIChsZWZ0RXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJDb21wYXJpc29uXCIgJiYgaXNDb25zdGFudChyaWdodEV4cHJlc3Npb24pICYmIHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSA9PT0gdHJ1ZSkge1xuXHRcdC8vICgoYSA9PT0gYykgPT09IGZhbHNlKSA9PiAhKGEgPT09IGMpXG5cdFx0cmV0dXJuIG5vdChsZWZ0RXhwcmVzc2lvbik7XG5cdH0gZWxzZSBpZiAobGVmdEV4cHJlc3Npb24uX3R5cGUgPT09IFwiSWZFbHNlXCIgJiYgX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChsZWZ0RXhwcmVzc2lvbi5vblRydWUsIHJpZ2h0RXhwcmVzc2lvbikpIHtcblx0XHQvLyAoaWYoeHh4eCkgeyBhYWEgfSBlbHNlIHsgYmJiIH0gKSA9PT0gYWFhIClcblx0XHRyZXR1cm4gb3IobGVmdEV4cHJlc3Npb24uY29uZGl0aW9uLCBlcXVhbChsZWZ0RXhwcmVzc2lvbi5vbkZhbHNlLCByaWdodEV4cHJlc3Npb24pKTtcblx0fSBlbHNlIGlmIChsZWZ0RXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJJZkVsc2VcIiAmJiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGxlZnRFeHByZXNzaW9uLm9uRmFsc2UsIHJpZ2h0RXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gb3Iobm90KGxlZnRFeHByZXNzaW9uLmNvbmRpdGlvbiksIGVxdWFsKGxlZnRFeHByZXNzaW9uLm9uVHJ1ZSwgcmlnaHRFeHByZXNzaW9uKSk7XG5cdH0gZWxzZSBpZiAoXG5cdFx0bGVmdEV4cHJlc3Npb24uX3R5cGUgPT09IFwiSWZFbHNlXCIgJiZcblx0XHRpc0NvbnN0YW50KGxlZnRFeHByZXNzaW9uLm9uVHJ1ZSkgJiZcblx0XHRpc0NvbnN0YW50KHJpZ2h0RXhwcmVzc2lvbikgJiZcblx0XHRpc0NvbnN0YW50KGxlZnRFeHByZXNzaW9uLm9uRmFsc2UpICYmXG5cdFx0IV9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwobGVmdEV4cHJlc3Npb24ub25UcnVlLCByaWdodEV4cHJlc3Npb24pICYmXG5cdFx0IV9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwobGVmdEV4cHJlc3Npb24ub25GYWxzZSwgcmlnaHRFeHByZXNzaW9uKVxuXHQpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHR9XG5cblx0cmV0dXJuIGNvbXBhcmlzb24oXCI9PT1cIiwgbGVmdEV4cHJlc3Npb24sIHJpZ2h0RXhwcmVzc2lvbik7XG59XG5cbi8qKlxuICogQ29tcGFyaXNvbjogXCJub3QgZXF1YWxcIiAoIT09KS5cbiAqXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBsZWZ0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgbGVmdCBzaWRlXG4gKiBAcGFyYW0gcmlnaHRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBjb21wYXJpc29uXG4gKiBAcmV0dXJucyB7RXhwcmVzc2lvbjxib29sZWFuPn0gQW4gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGNvbXBhcmlzb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vdEVxdWFsPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0bGVmdE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0cmlnaHRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBsZWZ0RXhwcmVzc2lvbiA9IHdyYXBQcmltaXRpdmUobGVmdE9wZXJhbmQpO1xuXHRjb25zdCByaWdodEV4cHJlc3Npb24gPSB3cmFwUHJpbWl0aXZlKHJpZ2h0T3BlcmFuZCk7XG5cblx0aWYgKF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwobGVmdEV4cHJlc3Npb24sIHJpZ2h0RXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHR9XG5cblx0Ly8gKChhID09PSBjKSAhPT0gdHJ1ZSkgPT4gIShhID09PSBjKVxuXHRpZiAobGVmdEV4cHJlc3Npb24uX3R5cGUgPT09IFwiQ29tcGFyaXNvblwiICYmIGlzQ29uc3RhbnQocmlnaHRFeHByZXNzaW9uKSAmJiByaWdodEV4cHJlc3Npb24udmFsdWUgPT09IHRydWUpIHtcblx0XHRyZXR1cm4gbm90KGxlZnRFeHByZXNzaW9uKTtcblx0fSBlbHNlIGlmIChsZWZ0RXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJDb21wYXJpc29uXCIgJiYgaXNDb25zdGFudChyaWdodEV4cHJlc3Npb24pICYmIHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSA9PT0gdHJ1ZSkge1xuXHRcdC8vICgoYSA9PT0gYykgIT09IGZhbHNlKSA9PiAoYSA9PT0gYylcblx0XHRyZXR1cm4gbGVmdEV4cHJlc3Npb247XG5cdH0gZWxzZSBpZiAobGVmdEV4cHJlc3Npb24uX3R5cGUgPT09IFwiSWZFbHNlXCIgJiYgX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChsZWZ0RXhwcmVzc2lvbi5vblRydWUsIHJpZ2h0RXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gYW5kKG5vdChsZWZ0RXhwcmVzc2lvbi5jb25kaXRpb24pLCBub3RFcXVhbChsZWZ0RXhwcmVzc2lvbi5vbkZhbHNlLCByaWdodEV4cHJlc3Npb24pKTtcblx0fSBlbHNlIGlmIChsZWZ0RXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJJZkVsc2VcIiAmJiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGxlZnRFeHByZXNzaW9uLm9uRmFsc2UsIHJpZ2h0RXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gYW5kKGxlZnRFeHByZXNzaW9uLmNvbmRpdGlvbiwgbm90RXF1YWwobGVmdEV4cHJlc3Npb24ub25UcnVlLCByaWdodEV4cHJlc3Npb24pKTtcblx0fSBlbHNlIGlmIChcblx0XHRsZWZ0RXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJJZkVsc2VcIiAmJlxuXHRcdGlzQ29uc3RhbnQobGVmdEV4cHJlc3Npb24ub25UcnVlKSAmJlxuXHRcdGlzQ29uc3RhbnQocmlnaHRFeHByZXNzaW9uKSAmJlxuXHRcdGlzQ29uc3RhbnQobGVmdEV4cHJlc3Npb24ub25GYWxzZSkgJiZcblx0XHQhX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChsZWZ0RXhwcmVzc2lvbi5vblRydWUsIHJpZ2h0RXhwcmVzc2lvbikgJiZcblx0XHQhX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChsZWZ0RXhwcmVzc2lvbi5vbkZhbHNlLCByaWdodEV4cHJlc3Npb24pXG5cdCkge1xuXHRcdC8vIElmIHRoZSBsZWZ0IGV4cHJlc3Npb24gaXMgYW4gaWYgZWxzZSB3aGVyZSBib3RoIG9uVHJ1ZSBhbmQgb25GYWxzZSBhcmUgbm90IGVxdWFscyB0byB0aGUgcmlnaHQgZXhwcmVzc2lvbiAtPiBzaW1wbGlmeSBhcyB0cnVlXG5cdFx0cmV0dXJuIGNvbnN0YW50KHRydWUpO1xuXHR9XG5cblx0cmV0dXJuIGNvbXBhcmlzb24oXCIhPT1cIiwgbGVmdEV4cHJlc3Npb24sIHJpZ2h0RXhwcmVzc2lvbik7XG59XG5cbi8qKlxuICogQ29tcGFyaXNvbjogXCJncmVhdGVyIG9yIGVxdWFsXCIgKD49KS5cbiAqXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBsZWZ0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgbGVmdCBzaWRlXG4gKiBAcGFyYW0gcmlnaHRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBjb21wYXJpc29uXG4gKiBAcmV0dXJucyB7RXhwcmVzc2lvbjxib29sZWFuPn0gQW4gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGNvbXBhcmlzb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyZWF0ZXJPckVxdWFsPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0bGVmdE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0cmlnaHRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gY29tcGFyaXNvbihcIj49XCIsIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpO1xufVxuXG4vKipcbiAqIENvbXBhcmlzb246IFwiZ3JlYXRlciB0aGFuXCIgKD4pLlxuICpcbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGxlZnRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSBsZWZ0IHNpZGVcbiAqIEBwYXJhbSByaWdodE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGNvbXBhcmlzb25cbiAqIEByZXR1cm5zIHtFeHByZXNzaW9uPGJvb2xlYW4+fSBBbiBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY29tcGFyaXNvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JlYXRlclRoYW48VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRsZWZ0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRyaWdodE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogRXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBjb21wYXJpc29uKFwiPlwiLCBsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kKTtcbn1cblxuLyoqXG4gKiBDb21wYXJpc29uOiBcImxlc3Mgb3IgZXF1YWxcIiAoPD0pLlxuICpcbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGxlZnRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSBsZWZ0IHNpZGVcbiAqIEBwYXJhbSByaWdodE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGNvbXBhcmlzb25cbiAqIEByZXR1cm5zIHtFeHByZXNzaW9uPGJvb2xlYW4+fSBBbiBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY29tcGFyaXNvblxuICovXG5leHBvcnQgZnVuY3Rpb24gbGVzc09yRXF1YWw8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRsZWZ0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRyaWdodE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogRXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBjb21wYXJpc29uKFwiPD1cIiwgbGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCk7XG59XG5cbi8qKlxuICogQ29tcGFyaXNvbjogXCJsZXNzIHRoYW5cIiAoPCkuXG4gKlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gbGVmdE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIGxlZnQgc2lkZVxuICogQHBhcmFtIHJpZ2h0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgY29tcGFyaXNvblxuICogQHJldHVybnMge0V4cHJlc3Npb248Ym9vbGVhbj59IEFuIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBjb21wYXJpc29uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsZXNzVGhhbjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGxlZnRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4sXG5cdHJpZ2h0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+XG4pOiBFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGNvbXBhcmlzb24oXCI8XCIsIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpO1xufVxuXG4vKipcbiAqIElmLXRoZW4tZWxzZSBleHByZXNzaW9uLlxuICpcbiAqIEV2YWx1YXRlcyB0byBvblRydWUgaWYgdGhlIGNvbmRpdGlvbiBldmFsdWF0ZXMgdG8gdHJ1ZSwgZWxzZSBldmFsdWF0ZXMgdG8gb25GYWxzZS5cbiAqXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBjb25kaXRpb24gVGhlIGNvbmRpdGlvbiB0byBldmFsdWF0ZVxuICogQHBhcmFtIG9uVHJ1ZSBFeHByZXNzaW9uIHJlc3VsdCBpZiB0aGUgY29uZGl0aW9uIGV2YWx1YXRlcyB0byB0cnVlXG4gKiBAcGFyYW0gb25GYWxzZSBFeHByZXNzaW9uIHJlc3VsdCBpZiB0aGUgY29uZGl0aW9uIGV2YWx1YXRlcyB0byBmYWxzZVxuICogQHJldHVybnMge0V4cHJlc3Npb248VD59IFRoZSBleHByZXNzaW9uIHRoYXQgcmVwcmVzZW50cyB0aGlzIGNvbmRpdGlvbmFsIGNoZWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpZkVsc2U8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRjb25kaXRpb246IEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPixcblx0b25UcnVlOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4sXG5cdG9uRmFsc2U6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogRXhwcmVzc2lvbjxUPiB7XG5cdGxldCBjb25kaXRpb25FeHByZXNzaW9uID0gd3JhcFByaW1pdGl2ZShjb25kaXRpb24pO1xuXHRsZXQgb25UcnVlRXhwcmVzc2lvbiA9IHdyYXBQcmltaXRpdmUob25UcnVlKTtcblx0bGV0IG9uRmFsc2VFeHByZXNzaW9uID0gd3JhcFByaW1pdGl2ZShvbkZhbHNlKTtcblxuXHRpZiAoaGFzVW5yZXNvbHZlYWJsZUV4cHJlc3Npb24oY29uZGl0aW9uRXhwcmVzc2lvbiwgb25UcnVlRXhwcmVzc2lvbiwgb25GYWxzZUV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIHVucmVzb2x2ZWFibGVFeHByZXNzaW9uO1xuXHR9XG5cdC8vIHN3YXAgYnJhbmNoZXMgaWYgdGhlIGNvbmRpdGlvbiBpcyBhIG5lZ2F0aW9uXG5cdGlmIChjb25kaXRpb25FeHByZXNzaW9uLl90eXBlID09PSBcIk5vdFwiKSB7XG5cdFx0Ly8gaWZFbHNlKG5vdChYKSwgYSwgYikgLS0+IGlmRWxzZShYLCBiLCBhKVxuXHRcdFtvblRydWVFeHByZXNzaW9uLCBvbkZhbHNlRXhwcmVzc2lvbl0gPSBbb25GYWxzZUV4cHJlc3Npb24sIG9uVHJ1ZUV4cHJlc3Npb25dO1xuXHRcdGNvbmRpdGlvbkV4cHJlc3Npb24gPSBub3QoY29uZGl0aW9uRXhwcmVzc2lvbik7XG5cdH1cblxuXHQvLyBpbmxpbmUgbmVzdGVkIGlmLWVsc2UgZXhwcmVzc2lvbnM6IG9uVHJ1ZSBicmFuY2hcblx0Ly8gaWZFbHNlKFgsIGlmRWxzZShYLCBhLCBiKSwgYykgPT0+IGlmRWxzZShYLCBhLCBjKVxuXHRpZiAob25UcnVlRXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJJZkVsc2VcIiAmJiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGNvbmRpdGlvbkV4cHJlc3Npb24sIG9uVHJ1ZUV4cHJlc3Npb24uY29uZGl0aW9uKSkge1xuXHRcdG9uVHJ1ZUV4cHJlc3Npb24gPSBvblRydWVFeHByZXNzaW9uLm9uVHJ1ZTtcblx0fVxuXG5cdC8vIGlubGluZSBuZXN0ZWQgaWYtZWxzZSBleHByZXNzaW9uczogb25GYWxzZSBicmFuY2hcblx0Ly8gaWZFbHNlKFgsIGEsIGlmRWxzZShYLCBiLCBjKSkgPT0+IGlmRWxzZShYLCBhLCBjKVxuXHRpZiAob25GYWxzZUV4cHJlc3Npb24uX3R5cGUgPT09IFwiSWZFbHNlXCIgJiYgX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChjb25kaXRpb25FeHByZXNzaW9uLCBvbkZhbHNlRXhwcmVzc2lvbi5jb25kaXRpb24pKSB7XG5cdFx0b25GYWxzZUV4cHJlc3Npb24gPSBvbkZhbHNlRXhwcmVzc2lvbi5vbkZhbHNlO1xuXHR9XG5cblx0Ly8gaW5saW5lIG5lc3RlZCBpZi1lbHNlIGV4cHJlc3Npb25zOiBjb25kaXRpb25cblx0aWYgKGNvbmRpdGlvbkV4cHJlc3Npb24uX3R5cGUgPT09IFwiSWZFbHNlXCIpIHtcblx0XHRpZiAoXG5cdFx0XHRpc0NvbnN0YW50KGNvbmRpdGlvbkV4cHJlc3Npb24ub25GYWxzZSkgJiZcblx0XHRcdCFjb25kaXRpb25FeHByZXNzaW9uLm9uRmFsc2UudmFsdWUgJiZcblx0XHRcdGlzQ29uc3RhbnQoY29uZGl0aW9uRXhwcmVzc2lvbi5vblRydWUpICYmXG5cdFx0XHRjb25kaXRpb25FeHByZXNzaW9uLm9uVHJ1ZS52YWx1ZVxuXHRcdCkge1xuXHRcdFx0Ly8gaWZFbHNlKGlmRWxzZShYLCB0cnVlLCBmYWxzZSksIGEsIGIpID09PiBpZkVsc2UoWCwgYSwgYilcblx0XHRcdGNvbmRpdGlvbkV4cHJlc3Npb24gPSBjb25kaXRpb25FeHByZXNzaW9uLmNvbmRpdGlvbjtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0aXNDb25zdGFudChjb25kaXRpb25FeHByZXNzaW9uLm9uRmFsc2UpICYmXG5cdFx0XHRjb25kaXRpb25FeHByZXNzaW9uLm9uRmFsc2UudmFsdWUgJiZcblx0XHRcdGlzQ29uc3RhbnQoY29uZGl0aW9uRXhwcmVzc2lvbi5vblRydWUpICYmXG5cdFx0XHQhY29uZGl0aW9uRXhwcmVzc2lvbi5vblRydWUudmFsdWVcblx0XHQpIHtcblx0XHRcdC8vIGlmRWxzZShpZkVsc2UoWCwgZmFsc2UsIHRydWUpLCBhLCBiKSA9PT4gaWZFbHNlKG5vdChYKSwgYSwgYilcblx0XHRcdGNvbmRpdGlvbkV4cHJlc3Npb24gPSBub3QoY29uZGl0aW9uRXhwcmVzc2lvbi5jb25kaXRpb24pO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRpc0NvbnN0YW50KGNvbmRpdGlvbkV4cHJlc3Npb24ub25UcnVlKSAmJlxuXHRcdFx0IWNvbmRpdGlvbkV4cHJlc3Npb24ub25UcnVlLnZhbHVlICYmXG5cdFx0XHQhaXNDb25zdGFudChjb25kaXRpb25FeHByZXNzaW9uLm9uRmFsc2UpXG5cdFx0KSB7XG5cdFx0XHQvLyBpZkVsc2UoaWZFbHNlKFgsIGZhbHNlLCBhKSwgYiwgYykgPT0+IGlmRWxzZShhbmQobm90KFgpLCBhKSwgYiwgYylcblx0XHRcdGNvbmRpdGlvbkV4cHJlc3Npb24gPSBhbmQobm90KGNvbmRpdGlvbkV4cHJlc3Npb24uY29uZGl0aW9uKSwgY29uZGl0aW9uRXhwcmVzc2lvbi5vbkZhbHNlKTtcblx0XHR9XG5cdH1cblxuXHQvLyBhZ2FpbiBzd2FwIGJyYW5jaGVzIGlmIG5lZWRlZCAoaW4gY2FzZSBvbmUgb2YgdGhlIG9wdGltaXphdGlvbnMgYWJvdmUgbGVkIHRvIGEgbmVnYXRlZCBjb25kaXRpb24pXG5cdGlmIChjb25kaXRpb25FeHByZXNzaW9uLl90eXBlID09PSBcIk5vdFwiKSB7XG5cdFx0Ly8gaWZFbHNlKG5vdChYKSwgYSwgYikgLS0+IGlmRWxzZShYLCBiLCBhKVxuXHRcdFtvblRydWVFeHByZXNzaW9uLCBvbkZhbHNlRXhwcmVzc2lvbl0gPSBbb25GYWxzZUV4cHJlc3Npb24sIG9uVHJ1ZUV4cHJlc3Npb25dO1xuXHRcdGNvbmRpdGlvbkV4cHJlc3Npb24gPSBub3QoY29uZGl0aW9uRXhwcmVzc2lvbik7XG5cdH1cblxuXHQvLyBjb21wdXRlIGV4cHJlc3Npb24gcmVzdWx0IGZvciBjb25zdGFudCBjb25kaXRpb25zXG5cdGlmIChpc0NvbnN0YW50KGNvbmRpdGlvbkV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIGNvbmRpdGlvbkV4cHJlc3Npb24udmFsdWUgPyBvblRydWVFeHByZXNzaW9uIDogb25GYWxzZUV4cHJlc3Npb247XG5cdH1cblxuXHQvLyBjb21wdXRlIGV4cHJlc3Npb24gcmVzdWx0IGlmIG9uVHJ1ZSBhbmQgb25GYWxzZSBicmFuY2hlcyBhcmUgZXF1YWxcblx0aWYgKF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwob25UcnVlRXhwcmVzc2lvbiwgb25GYWxzZUV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIG9uVHJ1ZUV4cHJlc3Npb247XG5cdH1cblxuXHQvLyBJZiBlaXRoZXIgdHJ1ZUV4cHJlc3Npb24gb3IgZmFsc2VFeHByZXNzaW9uIGlzIGEgdmFsdWUgZXF1YWxzIHRvIGZhbHNlIHRoZSBleHByZXNzaW9uIGNhbiBiZSBzaW1wbGlmaWVkXG5cdC8vIElmKENvbmRpdGlvbikgVGhlbiBYWFggRWxzZSBGYWxzZSAtPiBDb25kaXRpb24gJiYgWFhYXG5cdGlmIChpc0NvbnN0YW50KG9uRmFsc2VFeHByZXNzaW9uKSAmJiBvbkZhbHNlRXhwcmVzc2lvbi52YWx1ZSA9PT0gZmFsc2UpIHtcblx0XHRyZXR1cm4gYW5kKGNvbmRpdGlvbkV4cHJlc3Npb24sIG9uVHJ1ZUV4cHJlc3Npb24gYXMgRXhwcmVzc2lvbjxib29sZWFuPikgYXMgRXhwcmVzc2lvbjxUPjtcblx0fVxuXHQvLyBJZihDb25kaXRpb24pIFRoZW4gRmFsc2UgRWxzZSBYWFggLT4gIUNvbmRpdGlvbiAmJiBYWFhcblx0aWYgKGlzQ29uc3RhbnQob25UcnVlRXhwcmVzc2lvbikgJiYgb25UcnVlRXhwcmVzc2lvbi52YWx1ZSA9PT0gZmFsc2UpIHtcblx0XHRyZXR1cm4gYW5kKG5vdChjb25kaXRpb25FeHByZXNzaW9uKSwgb25GYWxzZUV4cHJlc3Npb24gYXMgRXhwcmVzc2lvbjxib29sZWFuPikgYXMgRXhwcmVzc2lvbjxUPjtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0X3R5cGU6IFwiSWZFbHNlXCIsXG5cdFx0Y29uZGl0aW9uOiBjb25kaXRpb25FeHByZXNzaW9uLFxuXHRcdG9uVHJ1ZTogb25UcnVlRXhwcmVzc2lvbixcblx0XHRvbkZhbHNlOiBvbkZhbHNlRXhwcmVzc2lvblxuXHR9O1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBjdXJyZW50IGV4cHJlc3Npb24gaGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBkZWZhdWx0IG1vZGVsICh1bmRlZmluZWQpLlxuICpcbiAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBleHByZXNzaW9uIHRvIGV2YWx1YXRlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZXJlIGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBkZWZhdWx0IGNvbnRleHRcbiAqL1xuZnVuY3Rpb24gaGFzUmVmZXJlbmNlVG9EZWZhdWx0Q29udGV4dChleHByZXNzaW9uOiBFeHByZXNzaW9uPGFueT4pOiBib29sZWFuIHtcblx0c3dpdGNoIChleHByZXNzaW9uLl90eXBlKSB7XG5cdFx0Y2FzZSBcIkNvbnN0YW50XCI6XG5cdFx0Y2FzZSBcIkZvcm1hdHRlclwiOlxuXHRcdGNhc2UgXCJDb21wbGV4VHlwZVwiOlxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdGNhc2UgXCJTZXRcIjpcblx0XHRcdHJldHVybiBleHByZXNzaW9uLm9wZXJhbmRzLnNvbWUoaGFzUmVmZXJlbmNlVG9EZWZhdWx0Q29udGV4dCk7XG5cdFx0Y2FzZSBcIkJpbmRpbmdcIjpcblx0XHRcdHJldHVybiBleHByZXNzaW9uLm1vZGVsTmFtZSA9PT0gdW5kZWZpbmVkO1xuXHRcdGNhc2UgXCJDb21wYXJpc29uXCI6XG5cdFx0XHRyZXR1cm4gaGFzUmVmZXJlbmNlVG9EZWZhdWx0Q29udGV4dChleHByZXNzaW9uLm9wZXJhbmQxKSB8fCBoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KGV4cHJlc3Npb24ub3BlcmFuZDIpO1xuXHRcdGNhc2UgXCJEZWZhdWx0QmluZGluZ1wiOlxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0Y2FzZSBcIklmRWxzZVwiOlxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0aGFzUmVmZXJlbmNlVG9EZWZhdWx0Q29udGV4dChleHByZXNzaW9uLmNvbmRpdGlvbikgfHxcblx0XHRcdFx0aGFzUmVmZXJlbmNlVG9EZWZhdWx0Q29udGV4dChleHByZXNzaW9uLm9uVHJ1ZSkgfHxcblx0XHRcdFx0aGFzUmVmZXJlbmNlVG9EZWZhdWx0Q29udGV4dChleHByZXNzaW9uLm9uRmFsc2UpXG5cdFx0XHQpO1xuXHRcdGNhc2UgXCJOb3RcIjpcblx0XHRjYXNlIFwiVHJ1dGh5XCI6XG5cdFx0XHRyZXR1cm4gaGFzUmVmZXJlbmNlVG9EZWZhdWx0Q29udGV4dChleHByZXNzaW9uLm9wZXJhbmQpO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxudHlwZSBGbjxUPiA9ICgoLi4ucGFyYW1zOiBhbnkpID0+IFQpICYge1xuXHRfX2Z1bmN0aW9uTmFtZTogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiBXcmFwcGVkVHVwbGVcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuLy8gQHRzLWlnbm9yZVxudHlwZSBXcmFwcGVkVHVwbGU8VD4gPSB7IFtLIGluIGtleW9mIFRdOiBXcmFwcGVkVHVwbGU8VFtLXT4gfCBFeHByZXNzaW9uT3JQcmltaXRpdmU8VFtLXT4gfTtcblxuLy8gU28sIHRoaXMgd29ya3MgYnV0IEkgY2Fubm90IGdldCBpdCB0byBjb21waWxlIDpELCBidXQgaXQgc3RpbGwgZG9lcyB3aGF0IGlzIGV4cGVjdGVkLi4uXG5cbi8qKlxuICogQSBmdW5jdGlvbiByZWZlcmVuY2Ugb3IgYSBmdW5jdGlvbiBuYW1lLlxuICovXG50eXBlIEZ1bmN0aW9uT3JOYW1lPFQ+ID0gRm48VD4gfCBzdHJpbmc7XG5cbi8qKlxuICogRnVuY3Rpb24gcGFyYW1ldGVycywgZWl0aGVyIGRlcml2ZWQgZnJvbSB0aGUgZnVuY3Rpb24gb3IgYW4gdW50eXBlZCBhcnJheS5cbiAqL1xudHlwZSBGdW5jdGlvblBhcmFtZXRlcnM8VCwgRiBleHRlbmRzIEZ1bmN0aW9uT3JOYW1lPFQ+PiA9IEYgZXh0ZW5kcyBGbjxUPiA/IFBhcmFtZXRlcnM8Rj4gOiBhbnlbXTtcblxuLyoqXG4gKiBDYWxscyBhIGZvcm1hdHRlciBmdW5jdGlvbiB0byBwcm9jZXNzIHRoZSBwYXJhbWV0ZXJzLlxuICogSWYgcmVxdWlyZUNvbnRleHQgaXMgc2V0IHRvIHRydWUgYW5kIG5vIGNvbnRleHQgaXMgcGFzc2VkIGEgZGVmYXVsdCBjb250ZXh0IHdpbGwgYmUgYWRkZWQgYXV0b21hdGljYWxseS5cbiAqXG4gKiBAdGVtcGxhdGUgVFxuICogQHRlbXBsYXRlIFVcbiAqIEBwYXJhbSBwYXJhbWV0ZXJzIFRoZSBsaXN0IG9mIHBhcmFtZXRlciB0aGF0IHNob3VsZCBtYXRjaCB0aGUgdHlwZSBhbmQgbnVtYmVyIG9mIHRoZSBmb3JtYXR0ZXIgZnVuY3Rpb25cbiAqIEBwYXJhbSBmb3JtYXR0ZXJGdW5jdGlvbiBUaGUgZnVuY3Rpb24gdG8gY2FsbFxuICogQHBhcmFtIFtjb250ZXh0RW50aXR5VHlwZV0gVGhlIGNvbnRleHQgZW50aXR5IHR5cGUgdG8gY29uc2lkZXJcbiAqIEByZXR1cm5zIHtFeHByZXNzaW9uPFQ+fSBUaGUgY29ycmVzcG9uZGluZyBleHByZXNzaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRSZXN1bHQ8VCwgVSBleHRlbmRzIEZuPFQ+Pihcblx0cGFyYW1ldGVyczogV3JhcHBlZFR1cGxlPFBhcmFtZXRlcnM8VT4+LFxuXHRmb3JtYXR0ZXJGdW5jdGlvbjogVSxcblx0Y29udGV4dEVudGl0eVR5cGU/OiBFbnRpdHlUeXBlXG4pOiBFeHByZXNzaW9uPFQ+IHtcblx0Y29uc3QgcGFyYW1ldGVyRXhwcmVzc2lvbnMgPSAocGFyYW1ldGVycyBhcyBhbnlbXSkubWFwKHdyYXBQcmltaXRpdmUpO1xuXG5cdGlmIChoYXNVbnJlc29sdmVhYmxlRXhwcmVzc2lvbiguLi5wYXJhbWV0ZXJFeHByZXNzaW9ucykpIHtcblx0XHRyZXR1cm4gdW5yZXNvbHZlYWJsZUV4cHJlc3Npb247XG5cdH1cblx0aWYgKCEhY29udGV4dEVudGl0eVR5cGUpIHtcblx0XHQvLyBPdGhlcndpc2UsIGlmIHRoZSBjb250ZXh0IGlzIHJlcXVpcmVkIGFuZCBubyBjb250ZXh0IGlzIHByb3ZpZGVkIG1ha2Ugc3VyZSB0byBhZGQgdGhlIGRlZmF1bHQgYmluZGluZ1xuXHRcdGlmICghcGFyYW1ldGVyRXhwcmVzc2lvbnMuc29tZShoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KSkge1xuXHRcdFx0Y29udGV4dEVudGl0eVR5cGUua2V5cy5mb3JFYWNoKGtleSA9PiBwYXJhbWV0ZXJFeHByZXNzaW9ucy5wdXNoKGJpbmRpbmdFeHByZXNzaW9uKGtleS5uYW1lLCBcIlwiKSkpO1xuXHRcdH1cblx0fVxuXG5cdC8vIEZvcm1hdHRlck5hbWUgY2FuIGJlIG9mIGZvcm1hdCBzYXAuZmUuY29yZS54eHgjbWV0aG9kTmFtZSB0byBoYXZlIG11bHRpcGxlIGZvcm1hdHRlciBpbiBvbmUgY2xhc3Ncblx0Y29uc3QgW2Zvcm1hdHRlckNsYXNzLCBmb3JtYXR0ZXJOYW1lXSA9IGZvcm1hdHRlckZ1bmN0aW9uLl9fZnVuY3Rpb25OYW1lLnNwbGl0KFwiI1wiKTtcblxuXHRpZiAoISFmb3JtYXR0ZXJOYW1lICYmIGZvcm1hdHRlck5hbWUubGVuZ3RoID4gMCkge1xuXHRcdHBhcmFtZXRlckV4cHJlc3Npb25zLnVuc2hpZnQoY29uc3RhbnQoZm9ybWF0dGVyTmFtZSkpO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRfdHlwZTogXCJGb3JtYXR0ZXJcIixcblx0XHRmbjogZm9ybWF0dGVyQ2xhc3MsXG5cdFx0cGFyYW1ldGVyczogcGFyYW1ldGVyRXhwcmVzc2lvbnNcblx0fTtcbn1cblxuLyoqXG4gKiBDYWxscyBhIGNvbXBsZXggdHlwZSAgdG8gcHJvY2VzcyB0aGUgcGFyYW1ldGVycy5cbiAqIElmIHJlcXVpcmVDb250ZXh0IGlzIHNldCB0byB0cnVlIGFuZCBubyBjb250ZXh0IGlzIHBhc3NlZCBhIGRlZmF1bHQgY29udGV4dCB3aWxsIGJlIGFkZGVkIGF1dG9tYXRpY2FsbHkuXG4gKlxuICogQHRlbXBsYXRlIFRcbiAqIEB0ZW1wbGF0ZSBVXG4gKiBAcGFyYW0gcGFyYW1ldGVycyBUaGUgbGlzdCBvZiBwYXJhbWV0ZXIgdGhhdCBzaG91bGQgbWF0Y2ggdGhlIHR5cGUgZm9yIHRoZSBjb21wcGxleCB0eXBlXG4gKiBAcGFyYW0gdHlwZSBUaGUgY29tcGxleCB0eXBlIHRvIHVzZVxuICogQHBhcmFtIFtjb250ZXh0RW50aXR5VHlwZV0gVGhlIGNvbnRleHQgZW50aXR5IHR5cGUgdG8gY29uc2lkZXJcbiAqIEByZXR1cm5zIHtFeHByZXNzaW9uPFQ+fSBUaGUgY29ycmVzcG9uZGluZyBleHByZXNzaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRUeXBlSW5mb3JtYXRpb248VCwgVSBleHRlbmRzIEZuPFQ+Pihcblx0cGFyYW1ldGVyczogV3JhcHBlZFR1cGxlPFBhcmFtZXRlcnM8VT4+LFxuXHR0eXBlOiBzdHJpbmcsXG5cdGNvbnRleHRFbnRpdHlUeXBlPzogRW50aXR5VHlwZVxuKTogRXhwcmVzc2lvbjxUPiB7XG5cdGNvbnN0IHBhcmFtZXRlckV4cHJlc3Npb25zID0gKHBhcmFtZXRlcnMgYXMgYW55W10pLm1hcCh3cmFwUHJpbWl0aXZlKTtcblx0aWYgKGhhc1VucmVzb2x2ZWFibGVFeHByZXNzaW9uKC4uLnBhcmFtZXRlckV4cHJlc3Npb25zKSkge1xuXHRcdHJldHVybiB1bnJlc29sdmVhYmxlRXhwcmVzc2lvbjtcblx0fVxuXHQvLyBJZiB0aGVyZSBpcyBvbmx5IG9uZSBwYXJhbWV0ZXIgYW5kIGl0IGlzIGEgY29uc3RhbnQgYW5kIHdlIGRvbid0IGV4cGVjdCB0aGUgY29udGV4dCB0aGVuIHJldHVybiB0aGUgY29uc3RhbnRcblx0aWYgKHBhcmFtZXRlckV4cHJlc3Npb25zLmxlbmd0aCA9PT0gMSAmJiBpc0NvbnN0YW50KHBhcmFtZXRlckV4cHJlc3Npb25zWzBdKSAmJiAhY29udGV4dEVudGl0eVR5cGUpIHtcblx0XHRyZXR1cm4gcGFyYW1ldGVyRXhwcmVzc2lvbnNbMF07XG5cdH0gZWxzZSBpZiAoISFjb250ZXh0RW50aXR5VHlwZSkge1xuXHRcdC8vIE90aGVyd2lzZSwgaWYgdGhlIGNvbnRleHQgaXMgcmVxdWlyZWQgYW5kIG5vIGNvbnRleHQgaXMgcHJvdmlkZWQgbWFrZSBzdXJlIHRvIGFkZCB0aGUgZGVmYXVsdCBiaW5kaW5nXG5cdFx0aWYgKCFwYXJhbWV0ZXJFeHByZXNzaW9ucy5zb21lKGhhc1JlZmVyZW5jZVRvRGVmYXVsdENvbnRleHQpKSB7XG5cdFx0XHRjb250ZXh0RW50aXR5VHlwZS5rZXlzLmZvckVhY2goa2V5ID0+IHBhcmFtZXRlckV4cHJlc3Npb25zLnB1c2goYmluZGluZ0V4cHJlc3Npb24oa2V5Lm5hbWUsIFwiXCIpKSk7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3Qgb0Zvcm1hdE9wdGlvbnMgPVxuXHRcdChwYXJhbWV0ZXJzWzBdIGFzIGFueSk/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnRcIikgPT09IDAgPyB7IHBhcnNlQXNTdHJpbmc6IGZhbHNlLCBlbXB0eVN0cmluZzogXCJcIiB9IDoge307XG5cdHJldHVybiB7XG5cdFx0X3R5cGU6IFwiQ29tcGxleFR5cGVcIixcblx0XHR0eXBlOiB0eXBlLFxuXHRcdGZvcm1hdE9wdGlvbnM6IG9Gb3JtYXRPcHRpb25zLFxuXHRcdHBhcmFtZXRlcnM6IHt9LFxuXHRcdGJpbmRpbmdQYXJhbWV0ZXJzOiBwYXJhbWV0ZXJFeHByZXNzaW9uc1xuXHR9O1xufVxuLyoqXG4gKiBGdW5jdGlvbiBjYWxsLCBvcHRpb25hbGx5IHdpdGggYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBmbiBGdW5jdGlvbiBuYW1lIG9yIHJlZmVyZW5jZSB0byBmdW5jdGlvblxuICogQHBhcmFtIHBhcmFtZXRlcnMgQXJndW1lbnRzXG4gKiBAcGFyYW0gb24gT2JqZWN0IHRvIGNhbGwgdGhlIGZ1bmN0aW9uIG9uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb25FeHByZXNzaW9uPFQ+fSBFeHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgZnVuY3Rpb24gY2FsbCAobm90IHRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uIGNhbGwhKVxuICovXG5leHBvcnQgZnVuY3Rpb24gZm48VCwgVSBleHRlbmRzIEZ1bmN0aW9uT3JOYW1lPFQ+Pihcblx0Zm46IFUsXG5cdHBhcmFtZXRlcnM6IFdyYXBwZWRUdXBsZTxGdW5jdGlvblBhcmFtZXRlcnM8VCwgVT4+LFxuXHRvbj86IEV4cHJlc3Npb25PclByaW1pdGl2ZTxvYmplY3Q+XG4pOiBGdW5jdGlvbkV4cHJlc3Npb248VD4ge1xuXHRjb25zdCBmdW5jdGlvbk5hbWUgPSB0eXBlb2YgZm4gPT09IFwic3RyaW5nXCIgPyBmbiA6IChmbiBhcyBGbjxUPikuX19mdW5jdGlvbk5hbWU7XG5cdHJldHVybiB7XG5cdFx0X3R5cGU6IFwiRnVuY3Rpb25cIixcblx0XHRvYmo6IG9uICE9PSB1bmRlZmluZWQgPyB3cmFwUHJpbWl0aXZlKG9uKSA6IHVuZGVmaW5lZCxcblx0XHRmbjogZnVuY3Rpb25OYW1lLFxuXHRcdHBhcmFtZXRlcnM6IChwYXJhbWV0ZXJzIGFzIGFueVtdKS5tYXAod3JhcFByaW1pdGl2ZSlcblx0fTtcbn1cblxuLyoqXG4gKiBTaG9ydGN1dCBmdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgYSBiaW5kaW5nIHZhbHVlIGlzIG51bGwsIHVuZGVmaW5lZCBvciBlbXB0eS5cbiAqXG4gKiBAcGFyYW0gZXhwcmVzc2lvblxuICogQHJldHVybnMgQSBib29sZWFuIGV4cHJlc3Npb24gZXZhbHVhdGluZyB0aGUgZmFjdCB0aGF0IHRoZSBjdXJyZW50IGVsZW1lbnQgaXMgZW1wdHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHkoZXhwcmVzc2lvbjogRXhwcmVzc2lvbjxzdHJpbmc+KTogRXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGlmIChleHByZXNzaW9uLl90eXBlID09PSBcIkNvbmNhdFwiKSB7XG5cdFx0cmV0dXJuIG9yKC4uLmV4cHJlc3Npb24uZXhwcmVzc2lvbnMubWFwKGlzRW1wdHkpKTtcblx0fVxuXHRyZXR1cm4gb3IoZXF1YWwoZXhwcmVzc2lvbiwgXCJcIiksIGVxdWFsKGV4cHJlc3Npb24sIHVuZGVmaW5lZCksIGVxdWFsKGV4cHJlc3Npb24sIG51bGwpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNhdCguLi5pbkV4cHJlc3Npb25zOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8c3RyaW5nPltdKTogRXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0Y29uc3QgZXhwcmVzc2lvbnMgPSBpbkV4cHJlc3Npb25zLm1hcCh3cmFwUHJpbWl0aXZlKTtcblx0aWYgKGhhc1VucmVzb2x2ZWFibGVFeHByZXNzaW9uKC4uLmV4cHJlc3Npb25zKSkge1xuXHRcdHJldHVybiB1bnJlc29sdmVhYmxlRXhwcmVzc2lvbjtcblx0fVxuXHRpZiAoZXhwcmVzc2lvbnMuZXZlcnkoaXNDb25zdGFudCkpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQoXG5cdFx0XHRleHByZXNzaW9ucy5yZWR1Y2UoKGNvbmNhdGVuYXRlZDogc3RyaW5nLCB2YWx1ZSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gY29uY2F0ZW5hdGVkICsgKHZhbHVlIGFzIENvbnN0YW50RXhwcmVzc2lvbjxhbnk+KS52YWx1ZS50b1N0cmluZygpO1xuXHRcdFx0fSwgXCJcIilcblx0XHQpO1xuXHR9XG5cdHJldHVybiB7XG5cdFx0X3R5cGU6IFwiQ29uY2F0XCIsXG5cdFx0ZXhwcmVzc2lvbnM6IGV4cHJlc3Npb25zXG5cdH07XG59XG5cbmV4cG9ydCB0eXBlIFRyYW5zZm9ybUZ1bmN0aW9uID0gPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlIHwgdW5rbm93bj4oZXhwcmVzc2lvblBhcnQ6IGFueSkgPT4gRXhwcmVzc2lvbjxUPjtcbmV4cG9ydCB0eXBlIEV4cHJlc3Npb25UeXBlID0gUGljazxFeHByZXNzaW9uPGFueT4sIFwiX3R5cGVcIj5bXCJfdHlwZVwiXTtcbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1SZWN1cnNpdmVseTxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZSB8IHVua25vd24+KFxuXHRpbkV4cHJlc3Npb246IEV4cHJlc3Npb248VD4sXG5cdGV4cHJlc3Npb25UeXBlOiBFeHByZXNzaW9uVHlwZSxcblx0dHJhbnNmb3JtRnVuY3Rpb246IFRyYW5zZm9ybUZ1bmN0aW9uLFxuXHRpbmNsdWRlQWxsRXhwcmVzc2lvbjogYm9vbGVhbiA9IGZhbHNlXG4pOiBFeHByZXNzaW9uPFQ+IHtcblx0bGV0IGV4cHJlc3Npb24gPSBpbkV4cHJlc3Npb247XG5cdHN3aXRjaCAoZXhwcmVzc2lvbi5fdHlwZSkge1xuXHRcdGNhc2UgXCJGdW5jdGlvblwiOlxuXHRcdFx0ZXhwcmVzc2lvbi5wYXJhbWV0ZXJzID0gZXhwcmVzc2lvbi5wYXJhbWV0ZXJzLm1hcChleHByZXNzaW9uID0+XG5cdFx0XHRcdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KGV4cHJlc3Npb24sIGV4cHJlc3Npb25UeXBlLCB0cmFuc2Zvcm1GdW5jdGlvbiwgaW5jbHVkZUFsbEV4cHJlc3Npb24pXG5cdFx0XHQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkNvbmNhdFwiOlxuXHRcdFx0ZXhwcmVzc2lvbi5leHByZXNzaW9ucyA9IGV4cHJlc3Npb24uZXhwcmVzc2lvbnMubWFwKGV4cHJlc3Npb24gPT5cblx0XHRcdFx0dHJhbnNmb3JtUmVjdXJzaXZlbHkoZXhwcmVzc2lvbiwgZXhwcmVzc2lvblR5cGUsIHRyYW5zZm9ybUZ1bmN0aW9uLCBpbmNsdWRlQWxsRXhwcmVzc2lvbilcblx0XHRcdCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiQ29tcGxleFR5cGVcIjpcblx0XHRcdGV4cHJlc3Npb24uYmluZGluZ1BhcmFtZXRlcnMgPSBleHByZXNzaW9uLmJpbmRpbmdQYXJhbWV0ZXJzLm1hcChleHByZXNzaW9uID0+XG5cdFx0XHRcdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KGV4cHJlc3Npb24sIGV4cHJlc3Npb25UeXBlLCB0cmFuc2Zvcm1GdW5jdGlvbiwgaW5jbHVkZUFsbEV4cHJlc3Npb24pXG5cdFx0XHQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkZvcm1hdHRlclwiOlxuXHRcdFx0ZXhwcmVzc2lvbi5wYXJhbWV0ZXJzID0gZXhwcmVzc2lvbi5wYXJhbWV0ZXJzLm1hcChleHByZXNzaW9uID0+XG5cdFx0XHRcdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KGV4cHJlc3Npb24sIGV4cHJlc3Npb25UeXBlLCB0cmFuc2Zvcm1GdW5jdGlvbiwgaW5jbHVkZUFsbEV4cHJlc3Npb24pXG5cdFx0XHQpO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFwiSWZFbHNlXCI6XG5cdFx0XHRjb25zdCBvblRydWUgPSB0cmFuc2Zvcm1SZWN1cnNpdmVseShleHByZXNzaW9uLm9uVHJ1ZSwgZXhwcmVzc2lvblR5cGUsIHRyYW5zZm9ybUZ1bmN0aW9uLCBpbmNsdWRlQWxsRXhwcmVzc2lvbik7XG5cdFx0XHRjb25zdCBvbkZhbHNlID0gdHJhbnNmb3JtUmVjdXJzaXZlbHkoZXhwcmVzc2lvbi5vbkZhbHNlLCBleHByZXNzaW9uVHlwZSwgdHJhbnNmb3JtRnVuY3Rpb24sIGluY2x1ZGVBbGxFeHByZXNzaW9uKTtcblx0XHRcdGxldCBjb25kaXRpb24gPSBleHByZXNzaW9uLmNvbmRpdGlvbjtcblx0XHRcdGlmIChpbmNsdWRlQWxsRXhwcmVzc2lvbikge1xuXHRcdFx0XHRjb25kaXRpb24gPSB0cmFuc2Zvcm1SZWN1cnNpdmVseShleHByZXNzaW9uLmNvbmRpdGlvbiwgZXhwcmVzc2lvblR5cGUsIHRyYW5zZm9ybUZ1bmN0aW9uLCBpbmNsdWRlQWxsRXhwcmVzc2lvbik7XG5cdFx0XHR9XG5cdFx0XHRleHByZXNzaW9uID0gaWZFbHNlKGNvbmRpdGlvbiwgb25UcnVlLCBvbkZhbHNlKSBhcyBFeHByZXNzaW9uPFQ+O1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIk5vdFwiOlxuXHRcdFx0aWYgKGluY2x1ZGVBbGxFeHByZXNzaW9uKSB7XG5cdFx0XHRcdGNvbnN0IG9wZXJhbmQgPSB0cmFuc2Zvcm1SZWN1cnNpdmVseShleHByZXNzaW9uLm9wZXJhbmQsIGV4cHJlc3Npb25UeXBlLCB0cmFuc2Zvcm1GdW5jdGlvbiwgaW5jbHVkZUFsbEV4cHJlc3Npb24pO1xuXHRcdFx0XHRleHByZXNzaW9uID0gbm90KG9wZXJhbmQpIGFzIEV4cHJlc3Npb248VD47XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiVHJ1dGh5XCI6XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiU2V0XCI6XG5cdFx0XHRpZiAoaW5jbHVkZUFsbEV4cHJlc3Npb24pIHtcblx0XHRcdFx0ZXhwcmVzc2lvbi5vcGVyYW5kcyA9IGV4cHJlc3Npb24ub3BlcmFuZHMubWFwKGV4cHJlc3Npb24gPT5cblx0XHRcdFx0XHR0cmFuc2Zvcm1SZWN1cnNpdmVseShleHByZXNzaW9uLCBleHByZXNzaW9uVHlwZSwgdHJhbnNmb3JtRnVuY3Rpb24sIGluY2x1ZGVBbGxFeHByZXNzaW9uKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkNvbXBhcmlzb25cIjpcblx0XHRcdGlmIChpbmNsdWRlQWxsRXhwcmVzc2lvbikge1xuXHRcdFx0XHRjb25zdCBvcGVyYW5kMSA9IHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KGV4cHJlc3Npb24ub3BlcmFuZDEsIGV4cHJlc3Npb25UeXBlLCB0cmFuc2Zvcm1GdW5jdGlvbiwgaW5jbHVkZUFsbEV4cHJlc3Npb24pO1xuXHRcdFx0XHRjb25zdCBvcGVyYW5kMiA9IHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KGV4cHJlc3Npb24ub3BlcmFuZDIsIGV4cHJlc3Npb25UeXBlLCB0cmFuc2Zvcm1GdW5jdGlvbiwgaW5jbHVkZUFsbEV4cHJlc3Npb24pO1xuXHRcdFx0XHRleHByZXNzaW9uID0gY29tcGFyaXNvbihleHByZXNzaW9uLm9wZXJhdG9yLCBvcGVyYW5kMSwgb3BlcmFuZDIpIGFzIEV4cHJlc3Npb248VD47XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiRGVmYXVsdEJpbmRpbmdcIjpcblx0XHRjYXNlIFwiUmVmXCI6XG5cdFx0Y2FzZSBcIkJpbmRpbmdcIjpcblx0XHRjYXNlIFwiQ29uc3RhbnRcIjpcblx0XHRcdC8vIERvIG5vdGhpbmdcblx0XHRcdGJyZWFrO1xuXHR9XG5cdGlmIChleHByZXNzaW9uVHlwZSA9PT0gZXhwcmVzc2lvbi5fdHlwZSkge1xuXHRcdGV4cHJlc3Npb24gPSB0cmFuc2Zvcm1GdW5jdGlvbihpbkV4cHJlc3Npb24pO1xuXHR9XG5cdHJldHVybiBleHByZXNzaW9uO1xufVxuXG5leHBvcnQgdHlwZSBCaW5kaW5nRXhwcmVzc2lvbjxUPiA9IFQgfCBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ29tcGlsZSBhbiBleHByZXNzaW9uIGludG8gYW4gZXhwcmVzc2lvbiBiaW5kaW5nLlxuICpcbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGV4cHJlc3Npb24gVGhlIGV4cHJlc3Npb24gdG8gY29tcGlsZVxuICogQHBhcmFtIGVtYmVkZGVkSW5CaW5kaW5nIFdoZXRoZXIgdGhlIGV4cHJlc3Npb24gdG8gY29tcGlsZSBpcyBlbWJlZGRlZCBpbnRvIGFub3RoZXIgZXhwcmVzc2lvblxuICogQHBhcmFtIGtlZXBUYXJnZXRUeXBlIEtlZXAgdGhlIHRhcmdldCB0eXBlIG9mIHRoZSBlbWJlZGRlZCBiaW5kaW5ncyBpbnN0ZWFkIG9mIGNhc3RpbmcgdGhlbSB0byBhbnlcbiAqIEByZXR1cm5zIHtCaW5kaW5nRXhwcmVzc2lvbjxUPn0gVGhlIGNvcnJlc3BvbmRpbmcgZXhwcmVzc2lvbiBiaW5kaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlQmluZGluZzxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGV4cHJlc3Npb246IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0ZW1iZWRkZWRJbkJpbmRpbmc6IGJvb2xlYW4gPSBmYWxzZSxcblx0a2VlcFRhcmdldFR5cGU6IGJvb2xlYW4gPSBmYWxzZVxuKTogQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPiB7XG5cdGNvbnN0IGV4cHIgPSB3cmFwUHJpbWl0aXZlKGV4cHJlc3Npb24pO1xuXHRjb25zdCBlbWJlZGRlZFNlcGFyYXRvciA9IGtlZXBUYXJnZXRUeXBlID8gXCIkXCIgOiBcIiVcIjtcblx0bGV0IG91dFByb3BlcnR5ID0gXCJcIjtcblx0c3dpdGNoIChleHByLl90eXBlKSB7XG5cdFx0Y2FzZSBcIlVucmVzb2x2ZWFibGVcIjpcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0Y2FzZSBcIkNvbnN0YW50XCI6XG5cdFx0XHRpZiAoZXhwci52YWx1ZSA9PT0gbnVsbCkge1xuXHRcdFx0XHRyZXR1cm4gXCJudWxsXCI7XG5cdFx0XHR9XG5cdFx0XHRpZiAoZXhwci52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybiBcInVuZGVmaW5lZFwiO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHR5cGVvZiBleHByLnZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGV4cHIudmFsdWUpKSB7XG5cdFx0XHRcdFx0Y29uc3QgZW50cmllcyA9IGV4cHIudmFsdWUubWFwKGV4cHJlc3Npb24gPT4gY29tcGlsZUJpbmRpbmcoZXhwcmVzc2lvbiwgdHJ1ZSkpO1xuXHRcdFx0XHRcdHJldHVybiBgWyR7ZW50cmllcy5qb2luKFwiLCBcIil9XWA7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gT2JqZWN0c1xuXHRcdFx0XHRcdGNvbnN0IG8gPSBleHByLnZhbHVlIGFzIFBsYWluRXhwcmVzc2lvbk9iamVjdDtcblx0XHRcdFx0XHRjb25zdCBwcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMobykubWFwKGtleSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCB2YWx1ZSA9IG9ba2V5XTtcblx0XHRcdFx0XHRcdHJldHVybiBgJHtrZXl9OiAke2NvbXBpbGVCaW5kaW5nKHZhbHVlLCB0cnVlKX1gO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHJldHVybiBgeyR7cHJvcGVydGllcy5qb2luKFwiLCBcIil9fWA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKGVtYmVkZGVkSW5CaW5kaW5nKSB7XG5cdFx0XHRcdHN3aXRjaCAodHlwZW9mIGV4cHIudmFsdWUpIHtcblx0XHRcdFx0XHRjYXNlIFwibnVtYmVyXCI6XG5cdFx0XHRcdFx0Y2FzZSBcImJpZ2ludFwiOlxuXHRcdFx0XHRcdGNhc2UgXCJib29sZWFuXCI6XG5cdFx0XHRcdFx0XHRyZXR1cm4gZXhwci52YWx1ZS50b1N0cmluZygpO1xuXHRcdFx0XHRcdGNhc2UgXCJzdHJpbmdcIjpcblx0XHRcdFx0XHRcdHJldHVybiBgJyR7ZXhwci52YWx1ZS50b1N0cmluZygpfSdgO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRyZXR1cm4gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGV4cHIudmFsdWUudG9TdHJpbmcoKTtcblx0XHRcdH1cblxuXHRcdGNhc2UgXCJSZWZcIjpcblx0XHRcdHJldHVybiBleHByLnJlZiB8fCBcIm51bGxcIjtcblxuXHRcdGNhc2UgXCJGdW5jdGlvblwiOlxuXHRcdFx0Y29uc3QgYXJndW1lbnRTdHJpbmcgPSBgJHtleHByLnBhcmFtZXRlcnMubWFwKGFyZyA9PiBjb21waWxlQmluZGluZyhhcmcsIHRydWUpKS5qb2luKFwiLCBcIil9YDtcblx0XHRcdHJldHVybiBleHByLm9iaiA9PT0gdW5kZWZpbmVkXG5cdFx0XHRcdD8gYCR7ZXhwci5mbn0oJHthcmd1bWVudFN0cmluZ30pYFxuXHRcdFx0XHQ6IGAke2NvbXBpbGVCaW5kaW5nKGV4cHIub2JqLCB0cnVlKX0uJHtleHByLmZufSgke2FyZ3VtZW50U3RyaW5nfSlgO1xuXHRcdGNhc2UgXCJFbWJlZGRlZEV4cHJlc3Npb25CaW5kaW5nXCI6XG5cdFx0XHRpZiAoZW1iZWRkZWRJbkJpbmRpbmcpIHtcblx0XHRcdFx0cmV0dXJuIGAoJHtleHByLnZhbHVlLnN1YnN0cigyLCBleHByLnZhbHVlLmxlbmd0aCAtIDMpfSlgO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGAke2V4cHIudmFsdWV9YDtcblx0XHRcdH1cblx0XHRjYXNlIFwiRW1iZWRkZWRCaW5kaW5nXCI6XG5cdFx0XHRpZiAoZW1iZWRkZWRJbkJpbmRpbmcpIHtcblx0XHRcdFx0cmV0dXJuIGAke2VtYmVkZGVkU2VwYXJhdG9yfSR7ZXhwci52YWx1ZX1gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGAke2V4cHIudmFsdWV9YDtcblx0XHRcdH1cblx0XHRjYXNlIFwiRGVmYXVsdEJpbmRpbmdcIjpcblx0XHRjYXNlIFwiQmluZGluZ1wiOlxuXHRcdFx0aWYgKGV4cHIudHlwZSB8fCBleHByLnBhcmFtZXRlcnMgfHwgZXhwci50YXJnZXRUeXBlKSB7XG5cdFx0XHRcdGxldCBvdXRCaW5kaW5nID0gXCJcIjtcblx0XHRcdFx0aWYgKGVtYmVkZGVkSW5CaW5kaW5nKSB7XG5cdFx0XHRcdFx0b3V0QmluZGluZyArPSBgJHtlbWJlZGRlZFNlcGFyYXRvcn1gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG91dEJpbmRpbmcgKz0gYHtwYXRoOicke2V4cHIubW9kZWxOYW1lID8gYCR7ZXhwci5tb2RlbE5hbWV9PmAgOiBcIlwifSR7ZXhwci5wYXRofSdgO1xuXHRcdFx0XHRpZiAoZXhwci50eXBlKSB7XG5cdFx0XHRcdFx0b3V0QmluZGluZyArPSBgLCB0eXBlOiAnJHtleHByLnR5cGV9J2A7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGV4cHIuY29uc3RyYWludHMgJiYgT2JqZWN0LmtleXMoZXhwci5jb25zdHJhaW50cykubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdG91dEJpbmRpbmcgKz0gYCwgY29uc3RyYWludHM6ICR7Y29tcGlsZUJpbmRpbmcoZXhwci5jb25zdHJhaW50cyl9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZXhwci5mb3JtYXRPcHRpb25zKSB7XG5cdFx0XHRcdFx0b3V0QmluZGluZyArPSBgLCBmb3JtYXRPcHRpb25zOiAke2NvbXBpbGVCaW5kaW5nKGV4cHIuZm9ybWF0T3B0aW9ucyl9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZXhwci5wYXJhbWV0ZXJzICYmIE9iamVjdC5rZXlzKGV4cHIucGFyYW1ldGVycykubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdG91dEJpbmRpbmcgKz0gYCwgcGFyYW1ldGVyczogJHtjb21waWxlQmluZGluZyhleHByLnBhcmFtZXRlcnMpfWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGV4cHIudGFyZ2V0VHlwZSkge1xuXHRcdFx0XHRcdG91dEJpbmRpbmcgKz0gYCwgdGFyZ2V0VHlwZTogJyR7ZXhwci50YXJnZXRUeXBlfSdgO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG91dEJpbmRpbmcgKz0gXCJ9XCI7XG5cdFx0XHRcdHJldHVybiBvdXRCaW5kaW5nO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKGVtYmVkZGVkSW5CaW5kaW5nKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGAke2VtYmVkZGVkU2VwYXJhdG9yfXske2V4cHIubW9kZWxOYW1lID8gYCR7ZXhwci5tb2RlbE5hbWV9PmAgOiBcIlwifSR7ZXhwci5wYXRofX1gO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybiBgeyR7ZXhwci5tb2RlbE5hbWUgPyBgJHtleHByLm1vZGVsTmFtZX0+YCA6IFwiXCJ9JHtleHByLnBhdGh9fWA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdGNhc2UgXCJDb21wYXJpc29uXCI6XG5cdFx0XHRjb25zdCBjb21wYXJpc29uUGFydCA9IGAke2NvbXBpbGVCaW5kaW5nKGV4cHIub3BlcmFuZDEsIHRydWUpfSAke2V4cHIub3BlcmF0b3J9ICR7Y29tcGlsZUJpbmRpbmcoZXhwci5vcGVyYW5kMiwgdHJ1ZSl9YDtcblx0XHRcdGlmIChlbWJlZGRlZEluQmluZGluZykge1xuXHRcdFx0XHRyZXR1cm4gY29tcGFyaXNvblBhcnQ7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gYHs9ICR7Y29tcGFyaXNvblBhcnR9fWA7XG5cblx0XHRjYXNlIFwiSWZFbHNlXCI6XG5cdFx0XHRpZiAoZW1iZWRkZWRJbkJpbmRpbmcpIHtcblx0XHRcdFx0cmV0dXJuIGAoJHtjb21waWxlQmluZGluZyhleHByLmNvbmRpdGlvbiwgdHJ1ZSl9ID8gJHtjb21waWxlQmluZGluZyhleHByLm9uVHJ1ZSwgdHJ1ZSl9IDogJHtjb21waWxlQmluZGluZyhcblx0XHRcdFx0XHRleHByLm9uRmFsc2UsXG5cdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHQpfSlgO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGB7PSAke2NvbXBpbGVCaW5kaW5nKGV4cHIuY29uZGl0aW9uLCB0cnVlKX0gPyAke2NvbXBpbGVCaW5kaW5nKGV4cHIub25UcnVlLCB0cnVlKX0gOiAke2NvbXBpbGVCaW5kaW5nKFxuXHRcdFx0XHRcdGV4cHIub25GYWxzZSxcblx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdCl9fWA7XG5cdFx0XHR9XG5cblx0XHRjYXNlIFwiU2V0XCI6XG5cdFx0XHRpZiAoZW1iZWRkZWRJbkJpbmRpbmcpIHtcblx0XHRcdFx0cmV0dXJuIGAoJHtleHByLm9wZXJhbmRzLm1hcChleHByZXNzaW9uID0+IGNvbXBpbGVCaW5kaW5nKGV4cHJlc3Npb24sIHRydWUpKS5qb2luKGAgJHtleHByLm9wZXJhdG9yfSBgKX0pYDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBgez0gKCR7ZXhwci5vcGVyYW5kcy5tYXAoZXhwcmVzc2lvbiA9PiBjb21waWxlQmluZGluZyhleHByZXNzaW9uLCB0cnVlKSkuam9pbihgICR7ZXhwci5vcGVyYXRvcn0gYCl9KX1gO1xuXHRcdFx0fVxuXG5cdFx0Y2FzZSBcIkNvbmNhdFwiOlxuXHRcdFx0aWYgKGVtYmVkZGVkSW5CaW5kaW5nKSB7XG5cdFx0XHRcdHJldHVybiBgJHtleHByLmV4cHJlc3Npb25zLm1hcChleHByZXNzaW9uID0+IGNvbXBpbGVCaW5kaW5nKGV4cHJlc3Npb24sIHRydWUsIHRydWUpKS5qb2luKGAgKyBgKX1gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGB7PSAke2V4cHIuZXhwcmVzc2lvbnMubWFwKGV4cHJlc3Npb24gPT4gY29tcGlsZUJpbmRpbmcoZXhwcmVzc2lvbiwgdHJ1ZSwgdHJ1ZSkpLmpvaW4oYCArIGApfSB9YDtcblx0XHRcdH1cblxuXHRcdGNhc2UgXCJOb3RcIjpcblx0XHRcdGlmIChlbWJlZGRlZEluQmluZGluZykge1xuXHRcdFx0XHRyZXR1cm4gYCEke2NvbXBpbGVCaW5kaW5nKGV4cHIub3BlcmFuZCwgdHJ1ZSl9YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBgez0gISR7Y29tcGlsZUJpbmRpbmcoZXhwci5vcGVyYW5kLCB0cnVlKX19YDtcblx0XHRcdH1cblxuXHRcdGNhc2UgXCJUcnV0aHlcIjpcblx0XHRcdGlmIChlbWJlZGRlZEluQmluZGluZykge1xuXHRcdFx0XHRyZXR1cm4gYCEhJHtjb21waWxlQmluZGluZyhleHByLm9wZXJhbmQsIHRydWUpfWA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gYHs9ICEhJHtjb21waWxlQmluZGluZyhleHByLm9wZXJhbmQsIHRydWUpfX1gO1xuXHRcdFx0fVxuXG5cdFx0Y2FzZSBcIkZvcm1hdHRlclwiOlxuXHRcdFx0aWYgKGV4cHIucGFyYW1ldGVycy5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0b3V0UHJvcGVydHkgKz0gYHske2NvbXBpbGVQYXRoUGFyYW1ldGVyKGV4cHIucGFyYW1ldGVyc1swXSwgdHJ1ZSl9LCBmb3JtYXR0ZXI6ICcke2V4cHIuZm59J31gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0UHJvcGVydHkgKz0gYHtwYXJ0czpbJHtleHByLnBhcmFtZXRlcnMubWFwKChwYXJhbTogYW55KSA9PiBjb21waWxlUGF0aFBhcmFtZXRlcihwYXJhbSkpLmpvaW4oXCIsXCIpfV0sIGZvcm1hdHRlcjogJyR7XG5cdFx0XHRcdFx0ZXhwci5mblxuXHRcdFx0XHR9J31gO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGVtYmVkZGVkSW5CaW5kaW5nKSB7XG5cdFx0XHRcdG91dFByb3BlcnR5ID0gYFxcJCR7b3V0UHJvcGVydHl9YDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBvdXRQcm9wZXJ0eTtcblx0XHRjYXNlIFwiQ29tcGxleFR5cGVcIjpcblx0XHRcdGlmIChleHByLmJpbmRpbmdQYXJhbWV0ZXJzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHRvdXRQcm9wZXJ0eSArPSBgeyR7Y29tcGlsZVBhdGhQYXJhbWV0ZXIoZXhwci5iaW5kaW5nUGFyYW1ldGVyc1swXSwgdHJ1ZSl9LCB0eXBlOiAnJHtleHByLnR5cGV9J31gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bGV0IG91dHB1dEVuZDtcblx0XHRcdFx0Ly8gdGhpcyBjb2RlIGlzIGJhc2VkIG9uIHNhcC51aS5tb2RlbC5vZGF0YS52NC5fQW5ub3RhdGlvbkhlbHBlckV4cHJlc3Npb24uZmV0Y2hDdXJyZW5jeU9yVW5pdFxuXHRcdFx0XHRzd2l0Y2ggKGV4cHIudHlwZSkge1xuXHRcdFx0XHRcdGNhc2UgXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Vbml0XCI6XG5cdFx0XHRcdFx0XHRvdXRwdXRFbmQgPSBgLHttb2RlOidPbmVUaW1lJyxwYXRoOicvIyNAQHJlcXVlc3RVbml0c09mTWVhc3VyZScsdGFyZ2V0VHlwZTonYW55J31dLHR5cGU6J3NhcC51aS5tb2RlbC5vZGF0YS50eXBlLlVuaXQnYDtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5DdXJyZW5jeVwiOlxuXHRcdFx0XHRcdFx0b3V0cHV0RW5kID0gYCx7bW9kZTonT25lVGltZScscGF0aDonLyMjQEByZXF1ZXN0Q3VycmVuY3lDb2RlcycsdGFyZ2V0VHlwZTonYW55J31dLHR5cGU6J3NhcC51aS5tb2RlbC5vZGF0YS50eXBlLkN1cnJlbmN5J2A7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0b3V0cHV0RW5kID0gYF0sIHR5cGU6ICcke2V4cHIudHlwZX0nYDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZXhwci5mb3JtYXRPcHRpb25zICYmIE9iamVjdC5rZXlzKGV4cHIuZm9ybWF0T3B0aW9ucykubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdG91dHB1dEVuZCArPSBgLCBmb3JtYXRPcHRpb25zOiAke2NvbXBpbGVCaW5kaW5nKGV4cHIuZm9ybWF0T3B0aW9ucyl9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZXhwci5wYXJhbWV0ZXJzICYmIE9iamVjdC5rZXlzKGV4cHIucGFyYW1ldGVycykubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdG91dHB1dEVuZCArPSBgLCBwYXJhbWV0ZXJzOiAke2NvbXBpbGVCaW5kaW5nKGV4cHIucGFyYW1ldGVycyl9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRvdXRwdXRFbmQgKz0gXCJ9XCI7XG5cdFx0XHRcdG91dFByb3BlcnR5ICs9IGB7bW9kZTonVHdvV2F5JywgcGFydHM6WyR7ZXhwci5iaW5kaW5nUGFyYW1ldGVyc1xuXHRcdFx0XHRcdC5tYXAoKHBhcmFtOiBhbnkpID0+IGNvbXBpbGVQYXRoUGFyYW1ldGVyKHBhcmFtKSlcblx0XHRcdFx0XHQuam9pbihcIixcIil9JHtvdXRwdXRFbmR9YDtcblx0XHRcdH1cblx0XHRcdGlmIChlbWJlZGRlZEluQmluZGluZykge1xuXHRcdFx0XHRvdXRQcm9wZXJ0eSA9IGBcXCQke291dFByb3BlcnR5fWA7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gb3V0UHJvcGVydHk7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBcIlwiO1xuXHR9XG59XG5cbi8qKlxuICogQ29tcGlsZSB0aGUgcGF0aCBwYXJhbWV0ZXIgb2YgYSBmb3JtYXR0ZXIgY2FsbC5cbiAqXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgYmluZGluZyBwYXJ0IHRvIGV2YWx1YXRlXG4gKiBAcGFyYW0gc2luZ2xlUGF0aCBXaGV0aGVyIHRoZXJlIGlzIG9uZSBvciBtdWx0aXBsZSBwYXRoIHRvIGNvbnNpZGVyXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgc3RyaW5nIHNuaXBwZXQgdG8gaW5jbHVkZSBpbiB0aGUgb3ZlcmFsbCBiaW5kaW5nIGRlZmluaXRpb25cbiAqL1xuZnVuY3Rpb24gY29tcGlsZVBhdGhQYXJhbWV0ZXIoZXhwcmVzc2lvbjogRXhwcmVzc2lvbjxhbnk+LCBzaW5nbGVQYXRoOiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcge1xuXHRsZXQgb3V0VmFsdWUgPSBcIlwiO1xuXHRzd2l0Y2ggKGV4cHJlc3Npb24uX3R5cGUpIHtcblx0XHRjYXNlIFwiQ29uc3RhbnRcIjpcblx0XHRcdHN3aXRjaCAodHlwZW9mIGV4cHJlc3Npb24udmFsdWUpIHtcblx0XHRcdFx0Y2FzZSBcIm51bWJlclwiOlxuXHRcdFx0XHRjYXNlIFwiYmlnaW50XCI6XG5cdFx0XHRcdFx0b3V0VmFsdWUgPSBgdmFsdWU6ICR7ZXhwcmVzc2lvbi52YWx1ZS50b1N0cmluZygpfWA7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJzdHJpbmdcIjpcblx0XHRcdFx0Y2FzZSBcImJvb2xlYW5cIjpcblx0XHRcdFx0XHRvdXRWYWx1ZSA9IGB2YWx1ZTogJyR7ZXhwcmVzc2lvbi52YWx1ZS50b1N0cmluZygpfSdgO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdG91dFZhbHVlID0gXCJ2YWx1ZTogJydcIjtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGlmIChzaW5nbGVQYXRoKSB7XG5cdFx0XHRcdHJldHVybiBvdXRWYWx1ZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBgeyR7b3V0VmFsdWV9fWA7XG5cblx0XHRjYXNlIFwiRGVmYXVsdEJpbmRpbmdcIjpcblx0XHRjYXNlIFwiQmluZGluZ1wiOlxuXHRcdFx0b3V0VmFsdWUgPSBgcGF0aDonJHtleHByZXNzaW9uLm1vZGVsTmFtZSA/IGAke2V4cHJlc3Npb24ubW9kZWxOYW1lfT5gIDogXCJcIn0ke2V4cHJlc3Npb24ucGF0aH0nYDtcblxuXHRcdFx0aWYgKGV4cHJlc3Npb24udHlwZSkge1xuXHRcdFx0XHRvdXRWYWx1ZSArPSBgLCB0eXBlIDogJyR7ZXhwcmVzc2lvbi50eXBlfSdgO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0VmFsdWUgKz0gYCwgdGFyZ2V0VHlwZSA6ICdhbnknYDtcblx0XHRcdH1cblx0XHRcdGlmIChleHByZXNzaW9uLmNvbnN0cmFpbnRzICYmIE9iamVjdC5rZXlzKGV4cHJlc3Npb24uY29uc3RyYWludHMpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0b3V0VmFsdWUgKz0gYCwgY29uc3RyYWludHM6ICR7Y29tcGlsZUJpbmRpbmcoZXhwcmVzc2lvbi5jb25zdHJhaW50cyl9YDtcblx0XHRcdH1cblx0XHRcdGlmIChleHByZXNzaW9uLmZvcm1hdE9wdGlvbnMgJiYgT2JqZWN0LmtleXMoZXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdG91dFZhbHVlICs9IGAsIGZvcm1hdE9wdGlvbnM6ICR7Y29tcGlsZUJpbmRpbmcoZXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zKX1gO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGV4cHJlc3Npb24ucGFyYW1ldGVycyAmJiBPYmplY3Qua2V5cyhleHByZXNzaW9uLnBhcmFtZXRlcnMpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0b3V0VmFsdWUgKz0gYCwgcGFyYW1ldGVyczogJHtjb21waWxlQmluZGluZyhleHByZXNzaW9uLnBhcmFtZXRlcnMpfWA7XG5cdFx0XHR9XG5cdFx0XHRpZiAoc2luZ2xlUGF0aCkge1xuXHRcdFx0XHRyZXR1cm4gb3V0VmFsdWU7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gYHske291dFZhbHVlfX1gO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0fVxufVxuIl19
1682
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkJpbmRpbmdFeHByZXNzaW9uLnRzIl0sIm5hbWVzIjpbInVucmVzb2x2ZWFibGVFeHByZXNzaW9uIiwiX3R5cGUiLCJlc2NhcGVYbWxBdHRyaWJ1dGUiLCJpbnB1dFN0cmluZyIsInJlcGxhY2UiLCJjIiwiaGFzVW5yZXNvbHZlYWJsZUV4cHJlc3Npb24iLCJleHByZXNzaW9ucyIsImZpbmQiLCJleHByIiwidW5kZWZpbmVkIiwiX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbCIsImEiLCJiIiwidmFsdWUiLCJvcGVyYW5kIiwib3BlcmF0b3IiLCJvcGVyYW5kcyIsImxlbmd0aCIsImV2ZXJ5IiwiZXhwcmVzc2lvbiIsInNvbWUiLCJvdGhlckV4cHJlc3Npb24iLCJjb25kaXRpb24iLCJvblRydWUiLCJvbkZhbHNlIiwib3BlcmFuZDEiLCJvcGVyYW5kMiIsImFFeHByZXNzaW9ucyIsImJFeHByZXNzaW9ucyIsImluZGV4IiwibW9kZWxOYW1lIiwicGF0aCIsInRhcmdldEVudGl0eVNldCIsImZuIiwicGFyYW1ldGVycyIsInR5cGUiLCJiaW5kaW5nUGFyYW1ldGVycyIsIm90aGVyRnVuY3Rpb24iLCJvYmoiLCJyZWYiLCJmbGF0dGVuU2V0RXhwcmVzc2lvbiIsInJlZHVjZSIsInJlc3VsdCIsImNhbmRpZGF0ZXNGb3JGbGF0dGVuaW5nIiwiZm9yRWFjaCIsImNhbmRpZGF0ZSIsImUiLCJwdXNoIiwiaGFzT3Bwb3NpdGVFeHByZXNzaW9ucyIsImkiLCJuZWdhdGVkRXhwcmVzc2lvbiIsIm5vdCIsImoiLCJhbmQiLCJtYXAiLCJ3cmFwUHJpbWl0aXZlIiwiaXNTdGF0aWNGYWxzZSIsIm5vblRyaXZpYWxFeHByZXNzaW9uIiwiZmlsdGVyIiwiaXNDb25zdGFudCIsImNvbnN0YW50IiwiaXNWYWxpZCIsIm9yIiwiaXNTdGF0aWNUcnVlIiwiaXNDb21wYXJpc29uIiwiZXF1YWwiLCJncmVhdGVyT3JFcXVhbCIsImdyZWF0ZXJUaGFuIiwibm90RXF1YWwiLCJsZXNzT3JFcXVhbCIsImxlc3NUaGFuIiwiaXNUcnV0aHkiLCJiaW5kaW5nRXhwcmVzc2lvbiIsInZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMiLCJwYXRoVmlzaXRvciIsInRhcmdldFBhdGgiLCJsb2NhbFBhdGgiLCJjb25jYXQiLCJqb2luIiwiY29uc3RhbnRWYWx1ZSIsIkFycmF5IiwiaXNBcnJheSIsImlzUHJpbWl0aXZlT2JqZWN0IiwidmFsdWVPZiIsInZhbCIsIk9iamVjdCIsImtleXMiLCJrZXkiLCJyZXNvbHZlQmluZGluZ1N0cmluZyIsInRhcmdldFR5cGUiLCJzdGFydHNXaXRoIiwiaXNFeHByZXNzaW9uIiwic29tZXRoaW5nIiwibWF5YmVDb25zdGFudCIsImlzQmluZGluZyIsIm1heWJlQmluZGluZyIsIm9iamVjdFR5cGUiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJpc0NvbXBsZXhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsImFubm90YXRpb25FeHByZXNzaW9uIiwiZGVmYXVsdFZhbHVlIiwiYW5ub3RhdGlvbklmRXhwcmVzc2lvbiIsIklmIiwicGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uIiwiTm90IiwiRXEiLCJOZSIsIkd0IiwiR2UiLCJMdCIsIkxlIiwiT3IiLCJvckNvbmRpdGlvbiIsIkFuZCIsImFuZENvbmRpdGlvbiIsImFubm90YXRpb25BcHBseUV4cHJlc3Npb24iLCJhbm5vdGF0aW9uVmFsdWUiLCJoYXNPd25Qcm9wZXJ0eSIsIiRPciIsIiRBbmQiLCIkTm90IiwiJEVxIiwiJE5lIiwiJEd0IiwiJEdlIiwiJEx0IiwiJExlIiwiJFBhdGgiLCJGdW5jdGlvbiIsIiRGdW5jdGlvbiIsIkFwcGx5IiwiJEFwcGx5IiwiJElmIiwicmVzb2x2ZUVudW1WYWx1ZSIsIiRFbnVtTWVtYmVyIiwiaWZFbHNlIiwiYXBwbHlQYXJhbSIsImFwcGx5UGFyYW1Db252ZXJ0ZWQiLCJjb21wYXJpc29uIiwibGVmdE9wZXJhbmQiLCJyaWdodE9wZXJhbmQiLCJsZWZ0RXhwcmVzc2lvbiIsInJpZ2h0RXhwcmVzc2lvbiIsImNvbmRpdGlvbkV4cHJlc3Npb24iLCJvblRydWVFeHByZXNzaW9uIiwib25GYWxzZUV4cHJlc3Npb24iLCJoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0IiwiZm9ybWF0UmVzdWx0IiwiZm9ybWF0dGVyRnVuY3Rpb24iLCJjb250ZXh0RW50aXR5VHlwZSIsInBhcmFtZXRlckV4cHJlc3Npb25zIiwiX19mdW5jdGlvbk5hbWUiLCJzcGxpdCIsImZvcm1hdHRlckNsYXNzIiwiZm9ybWF0dGVyTmFtZSIsInVuc2hpZnQiLCJhZGRUeXBlSW5mb3JtYXRpb24iLCJvRm9ybWF0T3B0aW9ucyIsImluZGV4T2YiLCJwYXJzZUFzU3RyaW5nIiwiZW1wdHlTdHJpbmciLCJmb3JtYXRPcHRpb25zIiwib24iLCJmdW5jdGlvbk5hbWUiLCJpc0VtcHR5IiwiaW5FeHByZXNzaW9ucyIsImNvbmNhdGVuYXRlZCIsInRvU3RyaW5nIiwidHJhbnNmb3JtUmVjdXJzaXZlbHkiLCJpbkV4cHJlc3Npb24iLCJleHByZXNzaW9uVHlwZSIsInRyYW5zZm9ybUZ1bmN0aW9uIiwiaW5jbHVkZUFsbEV4cHJlc3Npb24iLCJjb21waWxlQmluZGluZyIsImVtYmVkZGVkSW5CaW5kaW5nIiwia2VlcFRhcmdldFR5cGUiLCJlbWJlZGRlZFNlcGFyYXRvciIsIm91dFByb3BlcnR5IiwiZW50cmllcyIsIm8iLCJwcm9wZXJ0aWVzIiwiYXJndW1lbnRTdHJpbmciLCJhcmciLCJzdWJzdHIiLCJvdXRCaW5kaW5nIiwiY29uc3RyYWludHMiLCJjb21wYXJpc29uUGFydCIsImNvbXBpbGVQYXRoUGFyYW1ldGVyIiwicGFyYW0iLCJvdXRwdXRFbmQiLCJzaW5nbGVQYXRoIiwib3V0VmFsdWUiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTBLTyxNQUFNQSx1QkFBdUQsR0FBRztBQUN0RUMsSUFBQUEsS0FBSyxFQUFFO0FBRCtELEdBQWhFOzs7QUFJUCxXQUFTQyxrQkFBVCxD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LFdBQXZCLEVBQW9DekssTUFBcEMsR0FBNkMsQ0FBM0UsRUFBOEU7QUFDN0UrSyxVQUFBQSxRQUFRLDZCQUFzQmxCLGNBQWMsQ0FBQzNKLFVBQVUsQ0FBQ3VLLFdBQVosQ0FBcEMsQ0FBUjtBQUNBOztBQUNELFlBQUl2SyxVQUFVLENBQUMrSSxhQUFYLElBQTRCN0UsTUFBTSxDQUFDQyxJQUFQLENBQVluRSxVQUFVLENBQUMrSSxhQUF2QixFQUFzQ2pKLE1BQXRDLEdBQStDLENBQS9FLEVBQWtGO0FBQ2pGK0ssVUFBQUEsUUFBUSwrQkFBd0JsQixjQUFjLENBQUMzSixVQUFVLENBQUMrSSxhQUFaLENBQXRDLENBQVI7QUFDQTs7QUFDRCxZQUFJL0ksVUFBVSxDQUFDZSxVQUFYLElBQXlCbUQsTUFBTSxDQUFDQyxJQUFQLENBQVluRSxVQUFVLENBQUNlLFVBQXZCLEVBQW1DakIsTUFBbkMsR0FBNEMsQ0FBekUsRUFBNEU7QUFDM0UrSyxVQUFBQSxRQUFRLDRCQUFxQmxCLGNBQWMsQ0FBQzNKLFVBQVUsQ0FBQ2UsVUFBWixDQUFuQyxDQUFSO0FBQ0E7O0FBQ0QsWUFBSTZKLFVBQUosRUFBZ0I7QUFDZixpQkFBT0MsUUFBUDtBQUNBOztBQUNELDBCQUFXQSxRQUFYOztBQUNEO0FBQ0MsZUFBTyxFQUFQO0FBN0NGO0FBK0NBIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRBbmRBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0QW5kQ29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHRDb25kaXRpb25hbENoZWNrT3JWYWx1ZSxcblx0RW50aXR5VHlwZSxcblx0RXFBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0RXFDb25kaXRpb25hbEV4cHJlc3Npb24sXG5cdEdlQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdEdlQ29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHRHdEFubm90YXRpb25FeHByZXNzaW9uLFxuXHRHdENvbmRpdGlvbmFsRXhwcmVzc2lvbixcblx0SWZBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0SWZBbm5vdGF0aW9uRXhwcmVzc2lvblZhbHVlLFxuXHRMZUFubm90YXRpb25FeHByZXNzaW9uLFxuXHRMZUNvbmRpdGlvbmFsRXhwcmVzc2lvbixcblx0THRBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0THRDb25kaXRpb25hbEV4cHJlc3Npb24sXG5cdE5lQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdE5lQ29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHROb3RBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0Tm90Q29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHRPckFubm90YXRpb25FeHByZXNzaW9uLFxuXHRPckNvbmRpdGlvbmFsRXhwcmVzc2lvbixcblx0UGF0aENvbmRpdGlvbkV4cHJlc3Npb24sXG5cdFByb3BlcnR5QW5ub3RhdGlvblZhbHVlXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHsgQXBwbHlBbm5vdGF0aW9uRXhwcmVzc2lvbiwgUGF0aEFubm90YXRpb25FeHByZXNzaW9uIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3R5cGVzL0VkbVwiO1xuaW1wb3J0IHsgRW50aXR5U2V0IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL2Rpc3QvQ29udmVydGVyXCI7XG5pbXBvcnQgeyByZXNvbHZlRW51bVZhbHVlIH0gZnJvbSBcIi4vQW5ub3RhdGlvbkVudW1cIjtcblxudHlwZSBQcmltaXRpdmVUeXBlID0gc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG9iamVjdCB8IG51bGwgfCB1bmRlZmluZWQ7XG5cbnR5cGUgQmFzZUV4cHJlc3Npb248VD4gPSB7XG5cdF90eXBlOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBDb25zdGFudEV4cHJlc3Npb248VD4gPSBCYXNlRXhwcmVzc2lvbjxUPiAmIHtcblx0X3R5cGU6IFwiQ29uc3RhbnRcIjtcblx0dmFsdWU6IFQ7XG59O1xuXG50eXBlIFNldE9wZXJhdG9yID0gXCImJlwiIHwgXCJ8fFwiO1xuZXhwb3J0IHR5cGUgU2V0RXhwcmVzc2lvbiA9IEJhc2VFeHByZXNzaW9uPGJvb2xlYW4+ICYge1xuXHRfdHlwZTogXCJTZXRcIjtcblx0b3BlcmF0b3I6IFNldE9wZXJhdG9yO1xuXHRvcGVyYW5kczogRXhwcmVzc2lvbjxib29sZWFuPltdO1xufTtcblxuZXhwb3J0IHR5cGUgTm90RXhwcmVzc2lvbiA9IEJhc2VFeHByZXNzaW9uPGJvb2xlYW4+ICYge1xuXHRfdHlwZTogXCJOb3RcIjtcblx0b3BlcmFuZDogRXhwcmVzc2lvbjxib29sZWFuPjtcbn07XG5cbmV4cG9ydCB0eXBlIFRydXRoeUV4cHJlc3Npb24gPSBCYXNlRXhwcmVzc2lvbjxib29sZWFuPiAmIHtcblx0X3R5cGU6IFwiVHJ1dGh5XCI7XG5cdG9wZXJhbmQ6IEV4cHJlc3Npb248c3RyaW5nPjtcbn07XG5cbmV4cG9ydCB0eXBlIFJlZmVyZW5jZUV4cHJlc3Npb24gPSBCYXNlRXhwcmVzc2lvbjxvYmplY3Q+ICYge1xuXHRfdHlwZTogXCJSZWZcIjtcblx0cmVmOiBzdHJpbmcgfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgRm9ybWF0dGVyRXhwcmVzc2lvbjxUPiA9IEJhc2VFeHByZXNzaW9uPFQ+ICYge1xuXHRfdHlwZTogXCJGb3JtYXR0ZXJcIjtcblx0Zm46IHN0cmluZztcblx0cGFyYW1ldGVyczogRXhwcmVzc2lvbjxhbnk+W107XG59O1xuXG5leHBvcnQgdHlwZSBDb21wbGV4VHlwZUV4cHJlc3Npb248VD4gPSBCYXNlRXhwcmVzc2lvbjxUPiAmIHtcblx0X3R5cGU6IFwiQ29tcGxleFR5cGVcIjtcblx0dHlwZTogc3RyaW5nO1xuXHRmb3JtYXRPcHRpb25zOiBvYmplY3Q7XG5cdHBhcmFtZXRlcnM6IG9iamVjdDtcblx0YmluZGluZ1BhcmFtZXRlcnM6IEV4cHJlc3Npb248YW55PltdO1xufTtcblxuZXhwb3J0IHR5cGUgRnVuY3Rpb25FeHByZXNzaW9uPFQ+ID0gQmFzZUV4cHJlc3Npb248VD4gJiB7XG5cdF90eXBlOiBcIkZ1bmN0aW9uXCI7XG5cdG9iaj86IEV4cHJlc3Npb248b2JqZWN0Pjtcblx0Zm46IHN0cmluZztcblx0cGFyYW1ldGVyczogRXhwcmVzc2lvbjxhbnk+W107XG59O1xuXG5leHBvcnQgdHlwZSBDb25jYXRFeHByZXNzaW9uID0gQmFzZUV4cHJlc3Npb248c3RyaW5nPiAmIHtcblx0X3R5cGU6IFwiQ29uY2F0XCI7XG5cdGV4cHJlc3Npb25zOiBFeHByZXNzaW9uPHN0cmluZz5bXTtcbn07XG5cbmV4cG9ydCB0eXBlIFVucmVzb2x2ZWFibGVCaW5kaW5nRXhwcmVzc2lvbiA9IEJhc2VFeHByZXNzaW9uPHN0cmluZz4gJiB7XG5cdF90eXBlOiBcIlVucmVzb2x2ZWFibGVcIjtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYgQmluZGluZ0V4cHJlc3Npb25FeHByZXNzaW9uXG4gKi9cbmV4cG9ydCB0eXBlIEJpbmRpbmdFeHByZXNzaW9uRXhwcmVzc2lvbjxUPiA9IEJhc2VFeHByZXNzaW9uPFQ+ICYge1xuXHRfdHlwZTogXCJCaW5kaW5nXCI7XG5cdG1vZGVsTmFtZT86IHN0cmluZztcblx0cGF0aDogc3RyaW5nO1xuXHR0YXJnZXRFbnRpdHlTZXQ/OiBFbnRpdHlTZXQ7XG5cdHR5cGU/OiBzdHJpbmc7XG5cdGNvbnN0cmFpbnRzPzogYW55O1xuXHRwYXJhbWV0ZXJzPzogYW55O1xuXHR0YXJnZXRUeXBlPzogc3RyaW5nO1xuXHRmb3JtYXRPcHRpb25zPzogYW55O1xufTtcblxuZXhwb3J0IHR5cGUgRGVmYXVsdEJpbmRpbmdFeHByZXNzaW9uRXhwcmVzc2lvbjxUPiA9IEJhc2VFeHByZXNzaW9uPFQ+ICYge1xuXHRfdHlwZTogXCJEZWZhdWx0QmluZGluZ1wiO1xuXHRtb2RlbE5hbWU/OiBzdHJpbmc7XG5cdHBhdGg6IHN0cmluZztcblx0dHlwZT86IHN0cmluZztcblx0Y29uc3RyYWludHM/OiBvYmplY3Q7XG5cdHBhcmFtZXRlcnM/OiBhbnk7XG5cdHRhcmdldFR5cGU/OiBzdHJpbmc7XG5cdGZvcm1hdE9wdGlvbnM/OiBvYmplY3Q7XG59O1xuXG5leHBvcnQgdHlwZSBFbWJlZGRlZEJpbmRpbmdFeHByZXNzaW9uPFQ+ID0gQmFzZUV4cHJlc3Npb248VD4gJiB7XG5cdF90eXBlOiBcIkVtYmVkZGVkQmluZGluZ1wiO1xuXHR2YWx1ZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgRW1iZWRkZWRFeHByZXNzaW9uQmluZGluZ0V4cHJlc3Npb248VD4gPSBCYXNlRXhwcmVzc2lvbjxUPiAmIHtcblx0X3R5cGU6IFwiRW1iZWRkZWRFeHByZXNzaW9uQmluZGluZ1wiO1xuXHR2YWx1ZTogc3RyaW5nO1xufTtcblxudHlwZSBDb21wYXJpc29uT3BlcmF0b3IgPSBcIj09PVwiIHwgXCIhPT1cIiB8IFwiPj1cIiB8IFwiPlwiIHwgXCI8PVwiIHwgXCI8XCI7XG5leHBvcnQgdHlwZSBDb21wYXJpc29uRXhwcmVzc2lvbiA9IEJhc2VFeHByZXNzaW9uPGJvb2xlYW4+ICYge1xuXHRfdHlwZTogXCJDb21wYXJpc29uXCI7XG5cdG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3I7XG5cdG9wZXJhbmQxOiBFeHByZXNzaW9uPGFueT47XG5cdG9wZXJhbmQyOiBFeHByZXNzaW9uPGFueT47XG59O1xuXG5leHBvcnQgdHlwZSBJZkVsc2VFeHByZXNzaW9uPFQ+ID0gQmFzZUV4cHJlc3Npb248VD4gJiB7XG5cdF90eXBlOiBcIklmRWxzZVwiO1xuXHRjb25kaXRpb246IEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdG9uVHJ1ZTogRXhwcmVzc2lvbjxUPjtcblx0b25GYWxzZTogRXhwcmVzc2lvbjxUPjtcbn07XG5cbi8qKlxuICogQW4gZXhwcmVzc2lvbiB0aGF0IGV2YWx1YXRlcyB0byB0eXBlIFQuXG4gKlxuICogQHR5cGVkZWYgRXhwcmVzc2lvblxuICovXG5leHBvcnQgdHlwZSBFeHByZXNzaW9uPFQ+ID1cblx0fCBVbnJlc29sdmVhYmxlQmluZGluZ0V4cHJlc3Npb25cblx0fCBDb25zdGFudEV4cHJlc3Npb248VD5cblx0fCBTZXRFeHByZXNzaW9uXG5cdHwgTm90RXhwcmVzc2lvblxuXHR8IFRydXRoeUV4cHJlc3Npb25cblx0fCBDb25jYXRFeHByZXNzaW9uXG5cdHwgQmluZGluZ0V4cHJlc3Npb25FeHByZXNzaW9uPFQ+XG5cdHwgRW1iZWRkZWRCaW5kaW5nRXhwcmVzc2lvbjxUPlxuXHR8IEVtYmVkZGVkRXhwcmVzc2lvbkJpbmRpbmdFeHByZXNzaW9uPFQ+XG5cdHwgRGVmYXVsdEJpbmRpbmdFeHByZXNzaW9uRXhwcmVzc2lvbjxUPlxuXHR8IENvbXBhcmlzb25FeHByZXNzaW9uXG5cdHwgSWZFbHNlRXhwcmVzc2lvbjxUPlxuXHR8IEZvcm1hdHRlckV4cHJlc3Npb248VD5cblx0fCBDb21wbGV4VHlwZUV4cHJlc3Npb248VD5cblx0fCBSZWZlcmVuY2VFeHByZXNzaW9uXG5cdHwgRnVuY3Rpb25FeHByZXNzaW9uPFQ+O1xuXG4vKipcbiAqIEFuIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMgdG8gdHlwZSBULCBvciBhIGNvbnN0YW50IHZhbHVlIG9mIHR5cGUgVFxuICovXG5leHBvcnQgdHlwZSBFeHByZXNzaW9uT3JQcmltaXRpdmU8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+ID0gRXhwcmVzc2lvbjxUPiB8IFQ7XG5cbmV4cG9ydCBjb25zdCB1bnJlc29sdmVhYmxlRXhwcmVzc2lvbjogVW5yZXNvbHZlYWJsZUJpbmRpbmdFeHByZXNzaW9uID0ge1xuXHRfdHlwZTogXCJVbnJlc29sdmVhYmxlXCJcbn07XG5cbmZ1bmN0aW9uIGVzY2FwZVhtbEF0dHJpYnV0ZShpbnB1dFN0cmluZzogc3RyaW5nKSB7XG5cdHJldHVybiBpbnB1dFN0cmluZy5yZXBsYWNlKC9bJ10vZywgZnVuY3Rpb24oYzogc3RyaW5nKSB7XG5cdFx0c3dpdGNoIChjKSB7XG5cdFx0XHRjYXNlIFwiJ1wiOlxuXHRcdFx0XHRyZXR1cm4gXCJcXFxcJ1wiO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGM7XG5cdFx0fVxuXHR9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1VucmVzb2x2ZWFibGVFeHByZXNzaW9uKC4uLmV4cHJlc3Npb25zOiBFeHByZXNzaW9uPGFueT5bXSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gZXhwcmVzc2lvbnMuZmluZChleHByID0+IGV4cHIuX3R5cGUgPT09IFwiVW5yZXNvbHZlYWJsZVwiKSAhPT0gdW5kZWZpbmVkO1xufVxuLyoqXG4gKiBDaGVjayB0d28gZXhwcmVzc2lvbnMgZm9yIChkZWVwKSBlcXVhbGl0eS5cbiAqXG4gKiBAcGFyYW0gYVxuICogQHBhcmFtIGJcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHR3byBleHByZXNzaW9ucyBhcmUgZXF1YWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWw8VD4oYTogRXhwcmVzc2lvbjxUPiwgYjogRXhwcmVzc2lvbjxUPik6IGJvb2xlYW4ge1xuXHRpZiAoYS5fdHlwZSAhPT0gYi5fdHlwZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHN3aXRjaCAoYS5fdHlwZSkge1xuXHRcdGNhc2UgXCJVbnJlc29sdmVhYmxlXCI6XG5cdFx0XHRyZXR1cm4gZmFsc2U7IC8vIFVucmVzb2x2ZWFibGUgaXMgbmV2ZXIgZXF1YWwgdG8gYW55dGhpbmcgZXZlbiBpdHNlbGZcblx0XHRjYXNlIFwiQ29uc3RhbnRcIjpcblx0XHRjYXNlIFwiRW1iZWRkZWRCaW5kaW5nXCI6XG5cdFx0Y2FzZSBcIkVtYmVkZGVkRXhwcmVzc2lvbkJpbmRpbmdcIjpcblx0XHRcdHJldHVybiBhLnZhbHVlID09PSAoYiBhcyBDb25zdGFudEV4cHJlc3Npb248VD4pLnZhbHVlO1xuXG5cdFx0Y2FzZSBcIk5vdFwiOlxuXHRcdFx0cmV0dXJuIF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoYS5vcGVyYW5kLCAoYiBhcyBOb3RFeHByZXNzaW9uKS5vcGVyYW5kKTtcblx0XHRjYXNlIFwiVHJ1dGh5XCI6XG5cdFx0XHRyZXR1cm4gX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChhLm9wZXJhbmQsIChiIGFzIFRydXRoeUV4cHJlc3Npb24pLm9wZXJhbmQpO1xuXHRcdGNhc2UgXCJTZXRcIjpcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGEub3BlcmF0b3IgPT09IChiIGFzIFNldEV4cHJlc3Npb24pLm9wZXJhdG9yICYmXG5cdFx0XHRcdGEub3BlcmFuZHMubGVuZ3RoID09PSAoYiBhcyBTZXRFeHByZXNzaW9uKS5vcGVyYW5kcy5sZW5ndGggJiZcblx0XHRcdFx0YS5vcGVyYW5kcy5ldmVyeShleHByZXNzaW9uID0+XG5cdFx0XHRcdFx0KGIgYXMgU2V0RXhwcmVzc2lvbikub3BlcmFuZHMuc29tZShvdGhlckV4cHJlc3Npb24gPT4gX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChleHByZXNzaW9uLCBvdGhlckV4cHJlc3Npb24pKVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXG5cdFx0Y2FzZSBcIklmRWxzZVwiOlxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0X2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChhLmNvbmRpdGlvbiwgKGIgYXMgSWZFbHNlRXhwcmVzc2lvbjxUPikuY29uZGl0aW9uKSAmJlxuXHRcdFx0XHRfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGEub25UcnVlLCAoYiBhcyBJZkVsc2VFeHByZXNzaW9uPFQ+KS5vblRydWUpICYmXG5cdFx0XHRcdF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoYS5vbkZhbHNlLCAoYiBhcyBJZkVsc2VFeHByZXNzaW9uPFQ+KS5vbkZhbHNlKVxuXHRcdFx0KTtcblxuXHRcdGNhc2UgXCJDb21wYXJpc29uXCI6XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRhLm9wZXJhdG9yID09IChiIGFzIENvbXBhcmlzb25FeHByZXNzaW9uKS5vcGVyYXRvciAmJlxuXHRcdFx0XHRfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGEub3BlcmFuZDEsIChiIGFzIENvbXBhcmlzb25FeHByZXNzaW9uKS5vcGVyYW5kMSkgJiZcblx0XHRcdFx0X2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChhLm9wZXJhbmQyLCAoYiBhcyBDb21wYXJpc29uRXhwcmVzc2lvbikub3BlcmFuZDIpXG5cdFx0XHQpO1xuXG5cdFx0Y2FzZSBcIkNvbmNhdFwiOlxuXHRcdFx0Y29uc3QgYUV4cHJlc3Npb25zID0gYS5leHByZXNzaW9ucztcblx0XHRcdGNvbnN0IGJFeHByZXNzaW9ucyA9IChiIGFzIENvbmNhdEV4cHJlc3Npb24pLmV4cHJlc3Npb25zO1xuXHRcdFx0aWYgKGFFeHByZXNzaW9ucy5sZW5ndGggIT09IGJFeHByZXNzaW9ucy5sZW5ndGgpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGFFeHByZXNzaW9ucy5ldmVyeSgoZXhwcmVzc2lvbiwgaW5kZXgpID0+IHtcblx0XHRcdFx0cmV0dXJuIF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoZXhwcmVzc2lvbiwgYkV4cHJlc3Npb25zW2luZGV4XSk7XG5cdFx0XHR9KTtcblxuXHRcdGNhc2UgXCJCaW5kaW5nXCI6XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRhLm1vZGVsTmFtZSA9PT0gKGIgYXMgQmluZGluZ0V4cHJlc3Npb25FeHByZXNzaW9uPFQ+KS5tb2RlbE5hbWUgJiZcblx0XHRcdFx0YS5wYXRoID09PSAoYiBhcyBCaW5kaW5nRXhwcmVzc2lvbkV4cHJlc3Npb248VD4pLnBhdGggJiZcblx0XHRcdFx0YS50YXJnZXRFbnRpdHlTZXQgPT09IChiIGFzIEJpbmRpbmdFeHByZXNzaW9uRXhwcmVzc2lvbjxUPikudGFyZ2V0RW50aXR5U2V0XG5cdFx0XHQpO1xuXG5cdFx0Y2FzZSBcIkRlZmF1bHRCaW5kaW5nXCI6XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRhLm1vZGVsTmFtZSA9PT0gKGIgYXMgRGVmYXVsdEJpbmRpbmdFeHByZXNzaW9uRXhwcmVzc2lvbjxUPikubW9kZWxOYW1lICYmXG5cdFx0XHRcdGEucGF0aCA9PT0gKGIgYXMgRGVmYXVsdEJpbmRpbmdFeHByZXNzaW9uRXhwcmVzc2lvbjxUPikucGF0aFxuXHRcdFx0KTtcblxuXHRcdGNhc2UgXCJGb3JtYXR0ZXJcIjpcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGEuZm4gPT09IChiIGFzIEZvcm1hdHRlckV4cHJlc3Npb248VD4pLmZuICYmXG5cdFx0XHRcdGEucGFyYW1ldGVycy5sZW5ndGggPT09IChiIGFzIEZvcm1hdHRlckV4cHJlc3Npb248VD4pLnBhcmFtZXRlcnMubGVuZ3RoICYmXG5cdFx0XHRcdGEucGFyYW1ldGVycy5ldmVyeSgodmFsdWUsIGluZGV4KSA9PiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKChiIGFzIEZvcm1hdHRlckV4cHJlc3Npb248VD4pLnBhcmFtZXRlcnNbaW5kZXhdLCB2YWx1ZSkpXG5cdFx0XHQpO1xuXHRcdGNhc2UgXCJDb21wbGV4VHlwZVwiOlxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0YS50eXBlID09PSAoYiBhcyBDb21wbGV4VHlwZUV4cHJlc3Npb248VD4pLnR5cGUgJiZcblx0XHRcdFx0YS5iaW5kaW5nUGFyYW1ldGVycy5sZW5ndGggPT09IChiIGFzIENvbXBsZXhUeXBlRXhwcmVzc2lvbjxUPikuYmluZGluZ1BhcmFtZXRlcnMubGVuZ3RoICYmXG5cdFx0XHRcdGEuYmluZGluZ1BhcmFtZXRlcnMuZXZlcnkoKHZhbHVlLCBpbmRleCkgPT5cblx0XHRcdFx0XHRfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKChiIGFzIENvbXBsZXhUeXBlRXhwcmVzc2lvbjxUPikuYmluZGluZ1BhcmFtZXRlcnNbaW5kZXhdLCB2YWx1ZSlcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHRjYXNlIFwiRnVuY3Rpb25cIjpcblx0XHRcdGNvbnN0IG90aGVyRnVuY3Rpb24gPSBiIGFzIEZ1bmN0aW9uRXhwcmVzc2lvbjxUPjtcblx0XHRcdGlmIChhLm9iaiA9PT0gdW5kZWZpbmVkIHx8IG90aGVyRnVuY3Rpb24ub2JqID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuIGEub2JqID09PSBvdGhlckZ1bmN0aW9uO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRhLmZuID09PSBvdGhlckZ1bmN0aW9uLmZuICYmXG5cdFx0XHRcdF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoYS5vYmosIG90aGVyRnVuY3Rpb24ub2JqKSAmJlxuXHRcdFx0XHRhLnBhcmFtZXRlcnMubGVuZ3RoID09PSBvdGhlckZ1bmN0aW9uLnBhcmFtZXRlcnMubGVuZ3RoICYmXG5cdFx0XHRcdGEucGFyYW1ldGVycy5ldmVyeSgodmFsdWUsIGluZGV4KSA9PiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKG90aGVyRnVuY3Rpb24ucGFyYW1ldGVyc1tpbmRleF0sIHZhbHVlKSlcblx0XHRcdCk7XG5cblx0XHRjYXNlIFwiUmVmXCI6XG5cdFx0XHRyZXR1cm4gYS5yZWYgPT09IChiIGFzIFJlZmVyZW5jZUV4cHJlc3Npb24pLnJlZjtcblx0fVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgbmVzdGVkIFNldEV4cHJlc3Npb24gYnkgaW5saW5pbmcgb3BlcmFuZHMgb2YgdHlwZSBTZXRFeHByZXNzaW9uIHdpdGggdGhlIHNhbWUgb3BlcmF0b3IuXG4gKlxuICogQHBhcmFtIGV4cHJlc3Npb24gVGhlIGV4cHJlc3Npb24gdG8gZmxhdHRlblxuICogQHJldHVybnMge1NldEV4cHJlc3Npb259IEEgbmV3IFNldEV4cHJlc3Npb24gd2l0aCB0aGUgc2FtZSBvcGVyYXRvclxuICovXG5mdW5jdGlvbiBmbGF0dGVuU2V0RXhwcmVzc2lvbihleHByZXNzaW9uOiBTZXRFeHByZXNzaW9uKTogU2V0RXhwcmVzc2lvbiB7XG5cdHJldHVybiBleHByZXNzaW9uLm9wZXJhbmRzLnJlZHVjZShcblx0XHQocmVzdWx0OiBTZXRFeHByZXNzaW9uLCBvcGVyYW5kKSA9PiB7XG5cdFx0XHRjb25zdCBjYW5kaWRhdGVzRm9yRmxhdHRlbmluZyA9XG5cdFx0XHRcdG9wZXJhbmQuX3R5cGUgPT09IFwiU2V0XCIgJiYgb3BlcmFuZC5vcGVyYXRvciA9PT0gZXhwcmVzc2lvbi5vcGVyYXRvciA/IG9wZXJhbmQub3BlcmFuZHMgOiBbb3BlcmFuZF07XG5cdFx0XHRjYW5kaWRhdGVzRm9yRmxhdHRlbmluZy5mb3JFYWNoKGNhbmRpZGF0ZSA9PiB7XG5cdFx0XHRcdGlmIChyZXN1bHQub3BlcmFuZHMuZXZlcnkoZSA9PiAhX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChlLCBjYW5kaWRhdGUpKSkge1xuXHRcdFx0XHRcdHJlc3VsdC5vcGVyYW5kcy5wdXNoKGNhbmRpZGF0ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9LFxuXHRcdHsgX3R5cGU6IFwiU2V0XCIsIG9wZXJhdG9yOiBleHByZXNzaW9uLm9wZXJhdG9yLCBvcGVyYW5kczogW10gfVxuXHQpO1xufVxuXG4vKipcbiAqIERldGVjdHMgd2hldGhlciBhbiBhcnJheSBvZiBib29sZWFuIGV4cHJlc3Npb25zIGNvbnRhaW5zIGFuIGV4cHJlc3Npb24gYW5kIGl0cyBuZWdhdGlvbi5cbiAqXG4gKiBAcGFyYW0gZXhwcmVzc2lvbnMgQXJyYXkgb2YgZXhwcmVzc2lvbnNcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHNldCBvZiBleHByZXNzaW9ucyBjb250YWlucyBhbiBleHByZXNzaW9uIGFuZCBpdHMgbmVnYXRpb25cbiAqL1xuZnVuY3Rpb24gaGFzT3Bwb3NpdGVFeHByZXNzaW9ucyhleHByZXNzaW9uczogRXhwcmVzc2lvbjxib29sZWFuPltdKTogYm9vbGVhbiB7XG5cdGlmIChleHByZXNzaW9ucy5sZW5ndGggPCAyKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0bGV0IGkgPSBleHByZXNzaW9ucy5sZW5ndGg7XG5cdHdoaWxlIChpLS0pIHtcblx0XHRjb25zdCBleHByZXNzaW9uID0gZXhwcmVzc2lvbnNbaV07XG5cdFx0Y29uc3QgbmVnYXRlZEV4cHJlc3Npb24gPSBub3QoZXhwcmVzc2lvbik7XG5cdFx0Zm9yIChsZXQgaiA9IDA7IGogPCBpOyBqKyspIHtcblx0XHRcdGlmIChfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGV4cHJlc3Npb25zW2pdLCBuZWdhdGVkRXhwcmVzc2lvbikpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBMb2dpY2FsIGBhbmRgIGV4cHJlc3Npb24uXG4gKlxuICogVGhlIGV4cHJlc3Npb24gaXMgc2ltcGxpZmllZCB0byBmYWxzZSBpZiB0aGlzIGNhbiBiZSBkZWNpZGVkIHN0YXRpY2FsbHkgKHRoYXQgaXMsIGlmIG9uZSBvcGVyYW5kIGlzIGEgY29uc3RhbnRcbiAqIGZhbHNlIG9yIGlmIHRoZSBleHByZXNzaW9uIGNvbnRhaW5zIGFuIG9wZXJhbmQgYW5kIGl0cyBuZWdhdGlvbikuXG4gKlxuICogQHBhcmFtIG9wZXJhbmRzIEV4cHJlc3Npb25zIHRvIGNvbm5lY3QgYnkgYGFuZGBcbiAqIEByZXR1cm5zIHtFeHByZXNzaW9uPGJvb2xlYW4+fSBFeHByZXNzaW9uIGV2YWx1YXRpbmcgdG8gYm9vbGVhblxuICovXG5leHBvcnQgZnVuY3Rpb24gYW5kKC4uLm9wZXJhbmRzOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8Ym9vbGVhbj5bXSk6IEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBleHByZXNzaW9ucyA9IGZsYXR0ZW5TZXRFeHByZXNzaW9uKHtcblx0XHRfdHlwZTogXCJTZXRcIixcblx0XHRvcGVyYXRvcjogXCImJlwiLFxuXHRcdG9wZXJhbmRzOiBvcGVyYW5kcy5tYXAod3JhcFByaW1pdGl2ZSlcblx0fSkub3BlcmFuZHM7XG5cblx0aWYgKGhhc1VucmVzb2x2ZWFibGVFeHByZXNzaW9uKC4uLmV4cHJlc3Npb25zKSkge1xuXHRcdHJldHVybiB1bnJlc29sdmVhYmxlRXhwcmVzc2lvbjtcblx0fVxuXHRsZXQgaXNTdGF0aWNGYWxzZTogYm9vbGVhbiA9IGZhbHNlO1xuXHRjb25zdCBub25Ucml2aWFsRXhwcmVzc2lvbiA9IGV4cHJlc3Npb25zLmZpbHRlcihleHByZXNzaW9uID0+IHtcblx0XHRpZiAoaXNDb25zdGFudChleHByZXNzaW9uKSAmJiAhZXhwcmVzc2lvbi52YWx1ZSkge1xuXHRcdFx0aXNTdGF0aWNGYWxzZSA9IHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiAhaXNDb25zdGFudChleHByZXNzaW9uKTtcblx0fSk7XG5cdGlmIChpc1N0YXRpY0ZhbHNlKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KGZhbHNlKTtcblx0fSBlbHNlIGlmIChub25Ucml2aWFsRXhwcmVzc2lvbi5sZW5ndGggPT09IDApIHtcblx0XHQvLyBSZXNvbHZlIHRoZSBjb25zdGFudCB0aGVuXG5cdFx0Y29uc3QgaXNWYWxpZCA9IGV4cHJlc3Npb25zLnJlZHVjZSgoaXNWYWxpZCwgZXhwcmVzc2lvbikgPT4ge1xuXHRcdFx0cmV0dXJuIGlzVmFsaWQgJiYgaXNDb25zdGFudChleHByZXNzaW9uKSAmJiBleHByZXNzaW9uLnZhbHVlO1xuXHRcdH0sIHRydWUpO1xuXHRcdHJldHVybiBjb25zdGFudChpc1ZhbGlkKTtcblx0fSBlbHNlIGlmIChub25Ucml2aWFsRXhwcmVzc2lvbi5sZW5ndGggPT09IDEpIHtcblx0XHRyZXR1cm4gbm9uVHJpdmlhbEV4cHJlc3Npb25bMF07XG5cdH0gZWxzZSBpZiAoaGFzT3Bwb3NpdGVFeHByZXNzaW9ucyhub25Ucml2aWFsRXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB7XG5cdFx0XHRfdHlwZTogXCJTZXRcIixcblx0XHRcdG9wZXJhdG9yOiBcIiYmXCIsXG5cdFx0XHRvcGVyYW5kczogbm9uVHJpdmlhbEV4cHJlc3Npb25cblx0XHR9O1xuXHR9XG59XG5cbi8qKlxuICogTG9naWNhbCBgb3JgIGV4cHJlc3Npb24uXG4gKlxuICogVGhlIGV4cHJlc3Npb24gaXMgc2ltcGxpZmllZCB0byB0cnVlIGlmIHRoaXMgY2FuIGJlIGRlY2lkZWQgc3RhdGljYWxseSAodGhhdCBpcywgaWYgb25lIG9wZXJhbmQgaXMgYSBjb25zdGFudFxuICogdHJ1ZSBvciBpZiB0aGUgZXhwcmVzc2lvbiBjb250YWlucyBhbiBvcGVyYW5kIGFuZCBpdHMgbmVnYXRpb24pLlxuICpcbiAqIEBwYXJhbSBvcGVyYW5kcyBFeHByZXNzaW9ucyB0byBjb25uZWN0IGJ5IGBvcmBcbiAqIEByZXR1cm5zIHtFeHByZXNzaW9uPGJvb2xlYW4+fSBFeHByZXNzaW9uIGV2YWx1YXRpbmcgdG8gYm9vbGVhblxuICovXG5leHBvcnQgZnVuY3Rpb24gb3IoLi4ub3BlcmFuZHM6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPltdKTogRXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGV4cHJlc3Npb25zID0gZmxhdHRlblNldEV4cHJlc3Npb24oe1xuXHRcdF90eXBlOiBcIlNldFwiLFxuXHRcdG9wZXJhdG9yOiBcInx8XCIsXG5cdFx0b3BlcmFuZHM6IG9wZXJhbmRzLm1hcCh3cmFwUHJpbWl0aXZlKVxuXHR9KS5vcGVyYW5kcztcblx0aWYgKGhhc1VucmVzb2x2ZWFibGVFeHByZXNzaW9uKC4uLmV4cHJlc3Npb25zKSkge1xuXHRcdHJldHVybiB1bnJlc29sdmVhYmxlRXhwcmVzc2lvbjtcblx0fVxuXHRsZXQgaXNTdGF0aWNUcnVlOiBib29sZWFuID0gZmFsc2U7XG5cdGNvbnN0IG5vblRyaXZpYWxFeHByZXNzaW9uID0gZXhwcmVzc2lvbnMuZmlsdGVyKGV4cHJlc3Npb24gPT4ge1xuXHRcdGlmIChpc0NvbnN0YW50KGV4cHJlc3Npb24pICYmIGV4cHJlc3Npb24udmFsdWUpIHtcblx0XHRcdGlzU3RhdGljVHJ1ZSA9IHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiAhaXNDb25zdGFudChleHByZXNzaW9uKSB8fCBleHByZXNzaW9uLnZhbHVlO1xuXHR9KTtcblx0aWYgKGlzU3RhdGljVHJ1ZSkge1xuXHRcdHJldHVybiBjb25zdGFudCh0cnVlKTtcblx0fSBlbHNlIGlmIChub25Ucml2aWFsRXhwcmVzc2lvbi5sZW5ndGggPT09IDApIHtcblx0XHQvLyBSZXNvbHZlIHRoZSBjb25zdGFudCB0aGVuXG5cdFx0Y29uc3QgaXNWYWxpZCA9IGV4cHJlc3Npb25zLnJlZHVjZSgoaXNWYWxpZCwgZXhwcmVzc2lvbikgPT4ge1xuXHRcdFx0cmV0dXJuIGlzVmFsaWQgJiYgaXNDb25zdGFudChleHByZXNzaW9uKSAmJiBleHByZXNzaW9uLnZhbHVlO1xuXHRcdH0sIHRydWUpO1xuXHRcdHJldHVybiBjb25zdGFudChpc1ZhbGlkKTtcblx0fSBlbHNlIGlmIChub25Ucml2aWFsRXhwcmVzc2lvbi5sZW5ndGggPT09IDEpIHtcblx0XHRyZXR1cm4gbm9uVHJpdmlhbEV4cHJlc3Npb25bMF07XG5cdH0gZWxzZSBpZiAoaGFzT3Bwb3NpdGVFeHByZXNzaW9ucyhub25Ucml2aWFsRXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdF90eXBlOiBcIlNldFwiLFxuXHRcdFx0b3BlcmF0b3I6IFwifHxcIixcblx0XHRcdG9wZXJhbmRzOiBub25Ucml2aWFsRXhwcmVzc2lvblxuXHRcdH07XG5cdH1cbn1cblxuLyoqXG4gKiBMb2dpY2FsIGBub3RgIG9wZXJhdG9yLlxuICpcbiAqIEBwYXJhbSBvcGVyYW5kIFRoZSBleHByZXNzaW9uIHRvIHJldmVyc2VcbiAqIEByZXR1cm5zIHtFeHByZXNzaW9uPGJvb2xlYW4+fSBUaGUgcmVzdWx0aW5nIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMgdG8gYm9vbGVhblxuICovXG5leHBvcnQgZnVuY3Rpb24gbm90KG9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPik6IEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRvcGVyYW5kID0gd3JhcFByaW1pdGl2ZShvcGVyYW5kKTtcblx0aWYgKGhhc1VucmVzb2x2ZWFibGVFeHByZXNzaW9uKG9wZXJhbmQpKSB7XG5cdFx0cmV0dXJuIHVucmVzb2x2ZWFibGVFeHByZXNzaW9uO1xuXHR9IGVsc2UgaWYgKGlzQ29uc3RhbnQob3BlcmFuZCkpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQoIW9wZXJhbmQudmFsdWUpO1xuXHR9IGVsc2UgaWYgKFxuXHRcdHR5cGVvZiBvcGVyYW5kID09PSBcIm9iamVjdFwiICYmXG5cdFx0b3BlcmFuZC5fdHlwZSA9PT0gXCJTZXRcIiAmJlxuXHRcdG9wZXJhbmQub3BlcmF0b3IgPT09IFwifHxcIiAmJlxuXHRcdG9wZXJhbmQub3BlcmFuZHMuZXZlcnkoZXhwcmVzc2lvbiA9PiBpc0NvbnN0YW50KGV4cHJlc3Npb24pIHx8IGlzQ29tcGFyaXNvbihleHByZXNzaW9uKSlcblx0KSB7XG5cdFx0cmV0dXJuIGFuZCguLi5vcGVyYW5kLm9wZXJhbmRzLm1hcChleHByZXNzaW9uID0+IG5vdChleHByZXNzaW9uKSkpO1xuXHR9IGVsc2UgaWYgKFxuXHRcdHR5cGVvZiBvcGVyYW5kID09PSBcIm9iamVjdFwiICYmXG5cdFx0b3BlcmFuZC5fdHlwZSA9PT0gXCJTZXRcIiAmJlxuXHRcdG9wZXJhbmQub3BlcmF0b3IgPT09IFwiJiZcIiAmJlxuXHRcdG9wZXJhbmQub3BlcmFuZHMuZXZlcnkoZXhwcmVzc2lvbiA9PiBpc0NvbnN0YW50KGV4cHJlc3Npb24pIHx8IGlzQ29tcGFyaXNvbihleHByZXNzaW9uKSlcblx0KSB7XG5cdFx0cmV0dXJuIG9yKC4uLm9wZXJhbmQub3BlcmFuZHMubWFwKGV4cHJlc3Npb24gPT4gbm90KGV4cHJlc3Npb24pKSk7XG5cdH0gZWxzZSBpZiAoaXNDb21wYXJpc29uKG9wZXJhbmQpKSB7XG5cdFx0Ly8gQ3JlYXRlIHRoZSByZXZlcnNlIGNvbXBhcmlzb25cblx0XHRzd2l0Y2ggKG9wZXJhbmQub3BlcmF0b3IpIHtcblx0XHRcdGNhc2UgXCIhPT1cIjpcblx0XHRcdFx0cmV0dXJuIGVxdWFsKG9wZXJhbmQub3BlcmFuZDEsIG9wZXJhbmQub3BlcmFuZDIpO1xuXHRcdFx0Y2FzZSBcIjxcIjpcblx0XHRcdFx0cmV0dXJuIGdyZWF0ZXJPckVxdWFsKG9wZXJhbmQub3BlcmFuZDEsIG9wZXJhbmQub3BlcmFuZDIpO1xuXHRcdFx0Y2FzZSBcIjw9XCI6XG5cdFx0XHRcdHJldHVybiBncmVhdGVyVGhhbihvcGVyYW5kLm9wZXJhbmQxLCBvcGVyYW5kLm9wZXJhbmQyKTtcblx0XHRcdGNhc2UgXCI9PT1cIjpcblx0XHRcdFx0cmV0dXJuIG5vdEVxdWFsKG9wZXJhbmQub3BlcmFuZDEsIG9wZXJhbmQub3BlcmFuZDIpO1xuXHRcdFx0Y2FzZSBcIj5cIjpcblx0XHRcdFx0cmV0dXJuIGxlc3NPckVxdWFsKG9wZXJhbmQub3BlcmFuZDEsIG9wZXJhbmQub3BlcmFuZDIpO1xuXHRcdFx0Y2FzZSBcIj49XCI6XG5cdFx0XHRcdHJldHVybiBsZXNzVGhhbihvcGVyYW5kLm9wZXJhbmQxLCBvcGVyYW5kLm9wZXJhbmQyKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAob3BlcmFuZC5fdHlwZSA9PT0gXCJOb3RcIikge1xuXHRcdHJldHVybiBvcGVyYW5kLm9wZXJhbmQ7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdF90eXBlOiBcIk5vdFwiLFxuXHRcdFx0b3BlcmFuZDogb3BlcmFuZFxuXHRcdH07XG5cdH1cbn1cblxuLyoqXG4gKiBFdmFsdWF0ZXMgd2hldGhlciBhIGJpbmRpbmcgZXhwcmVzc2lvbiBpcyBlcXVhbCB0byB0cnVlIHdpdGggYSBsb29zZSBlcXVhbGl0eS5cbiAqXG4gKiBAcGFyYW0gb3BlcmFuZCBUaGUgZXhwcmVzc2lvbiB0byBjaGVja1xuICogQHJldHVybnMge0V4cHJlc3Npb248Ym9vbGVhbj59IFRoZSByZXN1bHRpbmcgZXhwcmVzc2lvbiB0aGF0IGV2YWx1YXRlcyB0byBib29sZWFuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1RydXRoeShvcGVyYW5kOiBFeHByZXNzaW9uPHN0cmluZz4pOiBFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0aWYgKGlzQ29uc3RhbnQob3BlcmFuZCkpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQoISFvcGVyYW5kLnZhbHVlKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0X3R5cGU6IFwiVHJ1dGh5XCIsXG5cdFx0XHRvcGVyYW5kOiBvcGVyYW5kXG5cdFx0fTtcblx0fVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBiaW5kaW5nIGV4cHJlc3Npb24gdGhhdCB3aWxsIGJlIGV2YWx1YXRlZCBieSB0aGUgY29ycmVzcG9uZGluZyBtb2RlbC5cbiAqXG4gKiBAdGVtcGxhdGUgVGFyZ2V0VHlwZVxuICogQHBhcmFtIHBhdGggVGhlIHBhdGggb24gdGhlIG1vZGVsXG4gKiBAcGFyYW0gW21vZGVsTmFtZV0gVGhlIG5hbWUgb2YgdGhlIG1vZGVsXG4gKiBAcGFyYW0gW3Zpc2l0ZWROYXZpZ2F0aW9uUGF0aHNdIFRoZSBwYXRocyBmcm9tIHRoZSByb290IGVudGl0eVNldFxuICogQHBhcmFtIFtwYXRoVmlzaXRvcl0gQSBmdW5jdGlvbiB0byBtb2RpZnkgdGhlIHJlc3VsdGluZyBwYXRoXG4gKiBAcmV0dXJucyB7QmluZGluZ0V4cHJlc3Npb25FeHByZXNzaW9uPFRhcmdldFR5cGU+fSBUaGUgZGVmYXVsdCBiaW5kaW5nIGV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJpbmRpbmdFeHByZXNzaW9uPFRhcmdldFR5cGUgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0cGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRtb2RlbE5hbWU/OiBzdHJpbmcsXG5cdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdID0gW10sXG5cdHBhdGhWaXNpdG9yPzogRnVuY3Rpb25cbik6IEJpbmRpbmdFeHByZXNzaW9uRXhwcmVzc2lvbjxUYXJnZXRUeXBlPiB8IFVucmVzb2x2ZWFibGVCaW5kaW5nRXhwcmVzc2lvbiB7XG5cdGlmIChwYXRoID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gdW5yZXNvbHZlYWJsZUV4cHJlc3Npb247XG5cdH1cblx0bGV0IHRhcmdldFBhdGg7XG5cdGlmIChwYXRoVmlzaXRvcikge1xuXHRcdHRhcmdldFBhdGggPSBwYXRoVmlzaXRvcihwYXRoKTtcblx0XHRpZiAodGFyZ2V0UGF0aCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gdW5yZXNvbHZlYWJsZUV4cHJlc3Npb247XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IGxvY2FsUGF0aCA9IHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMuY29uY2F0KCk7XG5cdFx0bG9jYWxQYXRoLnB1c2gocGF0aCk7XG5cdFx0dGFyZ2V0UGF0aCA9IGxvY2FsUGF0aC5qb2luKFwiL1wiKTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdF90eXBlOiBcIkJpbmRpbmdcIixcblx0XHRtb2RlbE5hbWU6IG1vZGVsTmFtZSxcblx0XHRwYXRoOiB0YXJnZXRQYXRoXG5cdH07XG59XG5cbnR5cGUgUGxhaW5FeHByZXNzaW9uT2JqZWN0ID0geyBbaW5kZXg6IHN0cmluZ106IEV4cHJlc3Npb248YW55PiB9O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjb25zdGFudCBleHByZXNzaW9uIGJhc2VkIG9uIGEgcHJpbWl0aXZlIHZhbHVlLlxuICpcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAcGFyYW0gdmFsdWUgVGhlIGNvbnN0YW50IHRvIHdyYXAgaW4gYW4gZXhwcmVzc2lvblxuICogQHJldHVybnMge0NvbnN0YW50RXhwcmVzc2lvbjxUPn0gVGhlIGNvbnN0YW50IGV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0YW50PFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPih2YWx1ZTogVCk6IENvbnN0YW50RXhwcmVzc2lvbjxUPiB7XG5cdGxldCBjb25zdGFudFZhbHVlOiBUO1xuXG5cdGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0Y29uc3RhbnRWYWx1ZSA9IHZhbHVlLm1hcCh3cmFwUHJpbWl0aXZlKSBhcyBUO1xuXHRcdH0gZWxzZSBpZiAoaXNQcmltaXRpdmVPYmplY3QodmFsdWUgYXMgb2JqZWN0KSkge1xuXHRcdFx0Y29uc3RhbnRWYWx1ZSA9IHZhbHVlLnZhbHVlT2YoKSBhcyBUO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCB2YWwgPSB2YWx1ZSBhcyB7IFtuYW1lOiBzdHJpbmddOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8YW55PiB9O1xuXHRcdFx0Y29uc3Qgb2JqID0gT2JqZWN0LmtleXModmFsKS5yZWR1Y2UoKG9iaiwga2V5KSA9PiB7XG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gd3JhcFByaW1pdGl2ZSh2YWxba2V5XSk7XG5cdFx0XHRcdGlmICh2YWx1ZS5fdHlwZSAhPT0gXCJDb25zdGFudFwiIHx8IHZhbHVlLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRvYmpba2V5XSA9IHZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBvYmo7XG5cdFx0XHR9LCB7fSBhcyBQbGFpbkV4cHJlc3Npb25PYmplY3QpO1xuXG5cdFx0XHRjb25zdGFudFZhbHVlID0gb2JqIGFzIFQ7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGNvbnN0YW50VmFsdWUgPSB2YWx1ZTtcblx0fVxuXG5cdHJldHVybiB7IF90eXBlOiBcIkNvbnN0YW50XCIsIHZhbHVlOiBjb25zdGFudFZhbHVlIH07XG59XG5cbnR5cGUgRXZhbHVhdGlvblR5cGUgPSBcImJvb2xlYW5cIjtcbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQmluZGluZ1N0cmluZzxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdHZhbHVlOiBzdHJpbmcgfCBib29sZWFuIHwgbnVtYmVyLFxuXHR0YXJnZXRUeXBlPzogRXZhbHVhdGlvblR5cGVcbik6IENvbnN0YW50RXhwcmVzc2lvbjxUPiB8IEVtYmVkZGVkQmluZGluZ0V4cHJlc3Npb248VD4gfCBFbWJlZGRlZEV4cHJlc3Npb25CaW5kaW5nRXhwcmVzc2lvbjxUPiB7XG5cdGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiB2YWx1ZS5zdGFydHNXaXRoKFwie1wiKSkge1xuXHRcdGlmICh2YWx1ZS5zdGFydHNXaXRoKFwiez1cIikpIHtcblx0XHRcdC8vIEV4cHJlc3Npb24gYmluZGluZywgd2UgY2FuIGp1c3QgcmVtb3ZlIHRoZSBvdXRlciBiaW5kaW5nIHRoaW5nc1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0X3R5cGU6IFwiRW1iZWRkZWRFeHByZXNzaW9uQmluZGluZ1wiLFxuXHRcdFx0XHR2YWx1ZTogdmFsdWVcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdF90eXBlOiBcIkVtYmVkZGVkQmluZGluZ1wiLFxuXHRcdFx0XHR2YWx1ZTogdmFsdWVcblx0XHRcdH07XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHN3aXRjaCAodGFyZ2V0VHlwZSkge1xuXHRcdFx0Y2FzZSBcImJvb2xlYW5cIjpcblx0XHRcdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiAodmFsdWUgPT09IFwidHJ1ZVwiIHx8IHZhbHVlID09PSBcImZhbHNlXCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KHZhbHVlID09PSBcInRydWVcIikgYXMgQ29uc3RhbnRFeHByZXNzaW9uPFQ+O1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBjb25zdGFudCh2YWx1ZSkgYXMgQ29uc3RhbnRFeHByZXNzaW9uPFQ+O1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KHZhbHVlKSBhcyBDb25zdGFudEV4cHJlc3Npb248VD47XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQSBuYW1lZCByZWZlcmVuY2UuXG4gKlxuICogQHNlZSBmblxuICpcbiAqIEBwYXJhbSByZWYgUmVmZXJlbmNlXG4gKiBAcmV0dXJucyB7UmVmZXJlbmNlRXhwcmVzc2lvbn0gVGhlIG9iamVjdCByZWZlcmVuY2UgYmluZGluZyBwYXJ0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWYocmVmOiBzdHJpbmcgfCBudWxsKTogUmVmZXJlbmNlRXhwcmVzc2lvbiB7XG5cdHJldHVybiB7IF90eXBlOiBcIlJlZlwiLCByZWYgfTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgdHlwZSBpcyBhbiBleHByZXNzaW9uLlxuICpcbiAqIEV2ZXJ5IG9iamVjdCBoYXZpbmcgYSBwcm9wZXJ0eSBuYW1lZCBgX3R5cGVgIG9mIHNvbWUgdmFsdWUgaXMgY29uc2lkZXJlZCBhbiBleHByZXNzaW9uLCBldmVuIGlmIHRoZXJlIGlzIGFjdHVhbGx5XG4gKiBubyBzdWNoIGV4cHJlc3Npb24gdHlwZSBzdXBwb3J0ZWQuXG4gKlxuICogQHBhcmFtIHNvbWV0aGluZyBUeXBlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSB0eXBlIGlzIGNvbnNpZGVyZWQgdG8gYmUgYW4gZXhwcmVzc2lvblxuICovXG5mdW5jdGlvbiBpc0V4cHJlc3Npb248VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KHNvbWV0aGluZzogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+KTogc29tZXRoaW5nIGlzIEV4cHJlc3Npb248VD4ge1xuXHRyZXR1cm4gc29tZXRoaW5nICE9PSBudWxsICYmIHR5cGVvZiBzb21ldGhpbmcgPT09IFwib2JqZWN0XCIgJiYgKHNvbWV0aGluZyBhcyBCYXNlRXhwcmVzc2lvbjxUPikuX3R5cGUgIT09IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBXcmFwIGEgcHJpbWl0aXZlIGludG8gYSBjb25zdGFudCBleHByZXNzaW9uIGlmIGl0IGlzIG5vdCBhbHJlYWR5IGFuIGV4cHJlc3Npb24uXG4gKlxuICogQHRlbXBsYXRlIFRcbiAqIEBwYXJhbSBzb21ldGhpbmcgVGhlIG9iamVjdCB0byB3cmFwIGluIGEgQ29uc3RhbnQgZXhwcmVzc2lvblxuICogQHJldHVybnMge0V4cHJlc3Npb248VD59IEVpdGhlciB0aGUgb3JpZ2luYWwgb2JqZWN0IG9yIHRoZSB3cmFwcGVkIG9uZSBkZXBlbmRpbmcgb24gdGhlIGNhc2VcbiAqL1xuZnVuY3Rpb24gd3JhcFByaW1pdGl2ZTxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oc29tZXRoaW5nOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4pOiBFeHByZXNzaW9uPFQ+IHtcblx0aWYgKGlzRXhwcmVzc2lvbihzb21ldGhpbmcpKSB7XG5cdFx0cmV0dXJuIHNvbWV0aGluZztcblx0fVxuXG5cdHJldHVybiBjb25zdGFudChzb21ldGhpbmcpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZXhwcmVzc2lvbiBvciB2YWx1ZSBwcm92aWRlZCBpcyBjb25zdGFudCBvciBub3QuXG4gKlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gIG1heWJlQ29uc3RhbnQgVGhlIGV4cHJlc3Npb24gb3IgcHJpbWl0aXZlIHZhbHVlIHRoYXQgaXMgdG8gYmUgY2hlY2tlZFxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiBpdCBpcyBjb25zdGFudFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDb25zdGFudDxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4obWF5YmVDb25zdGFudDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+KTogbWF5YmVDb25zdGFudCBpcyBDb25zdGFudEV4cHJlc3Npb248VD4ge1xuXHRyZXR1cm4gdHlwZW9mIG1heWJlQ29uc3RhbnQgIT09IFwib2JqZWN0XCIgfHwgKG1heWJlQ29uc3RhbnQgYXMgQmFzZUV4cHJlc3Npb248VD4pLl90eXBlID09PSBcIkNvbnN0YW50XCI7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBleHByZXNzaW9uIG9yIHZhbHVlIHByb3ZpZGVkIGlzIGJpbmRpbmcgb3Igbm90LlxuICpcbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtICBtYXliZUJpbmRpbmcgVGhlIGV4cHJlc3Npb24gb3IgcHJpbWl0aXZlIHZhbHVlIHRoYXQgaXMgdG8gYmUgY2hlY2tlZFxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiBpdCBpcyBiaW5kaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0JpbmRpbmc8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KG1heWJlQmluZGluZzogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+KTogbWF5YmVCaW5kaW5nIGlzIEJpbmRpbmdFeHByZXNzaW9uRXhwcmVzc2lvbjxUPiB7XG5cdHJldHVybiB0eXBlb2YgbWF5YmVCaW5kaW5nID09PSBcIm9iamVjdFwiICYmIChtYXliZUJpbmRpbmcgYXMgQmFzZUV4cHJlc3Npb248VD4pLl90eXBlID09PSBcIkJpbmRpbmdcIjtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGV4cHJlc3Npb24gcHJvdmlkZWQgaXMgYSBjb21wYXJpc29uIG9yIG5vdC5cbiAqXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBleHByZXNzaW9uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBleHByZXNzaW9uIGlzIGEgQ29tcGFyaXNvbkV4cHJlc3Npb25cbiAqL1xuZnVuY3Rpb24gaXNDb21wYXJpc29uPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihleHByZXNzaW9uOiBFeHByZXNzaW9uPFQ+KTogZXhwcmVzc2lvbiBpcyBDb21wYXJpc29uRXhwcmVzc2lvbiB7XG5cdHJldHVybiBleHByZXNzaW9uLl90eXBlID09PSBcIkNvbXBhcmlzb25cIjtcbn1cblxudHlwZSBDb21wbGV4QW5ub3RhdGlvbkV4cHJlc3Npb248UD4gPVxuXHR8IFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IEFwcGx5QW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBJZkFubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgT3JBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IEFuZEFubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgTmVBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IEVxQW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBOb3RBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IEd0QW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBHZUFubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgTGVBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IEx0QW5ub3RhdGlvbkV4cHJlc3Npb248UD47XG5cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlT2JqZWN0KG9iamVjdFR5cGU6IG9iamVjdCk6IGJvb2xlYW4ge1xuXHRzd2l0Y2ggKG9iamVjdFR5cGUuY29uc3RydWN0b3IubmFtZSkge1xuXHRcdGNhc2UgXCJTdHJpbmdcIjpcblx0XHRjYXNlIFwiTnVtYmVyXCI6XG5cdFx0Y2FzZSBcIkJvb2xlYW5cIjpcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHBhc3NlZCBhbm5vdGF0aW9uIGV4cHJlc3Npb24gaXMgYSBDb21wbGV4QW5ub3RhdGlvbkV4cHJlc3Npb24uXG4gKlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gIGFubm90YXRpb25FeHByZXNzaW9uIFRoZSBhbm5vdGF0aW9uIGV4cHJlc3Npb24gdG8gZXZhbHVhdGVcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIG9iamVjdCBpcyBhIHtDb21wbGV4QW5ub3RhdGlvbkV4cHJlc3Npb259XG4gKi9cbmZ1bmN0aW9uIGlzQ29tcGxleEFubm90YXRpb25FeHByZXNzaW9uPFQ+KFxuXHRhbm5vdGF0aW9uRXhwcmVzc2lvbjogUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8VD5cbik6IGFubm90YXRpb25FeHByZXNzaW9uIGlzIENvbXBsZXhBbm5vdGF0aW9uRXhwcmVzc2lvbjxUPiB7XG5cdHJldHVybiB0eXBlb2YgYW5ub3RhdGlvbkV4cHJlc3Npb24gPT09IFwib2JqZWN0XCIgJiYgIWlzUHJpbWl0aXZlT2JqZWN0KGFubm90YXRpb25FeHByZXNzaW9uIGFzIG9iamVjdCk7XG59XG5cbi8qKlxuICogR2VuZXJhdGUgdGhlIGNvcnJlc3BvbmRpbmcgZXhwcmVzc2lvbiBmb3IgYSBnaXZlbiBhbm5vdGF0aW9uIGV4cHJlc3Npb24uXG4gKlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gYW5ub3RhdGlvbkV4cHJlc3Npb24gVGhlIHNvdXJjZSBhbm5vdGF0aW9uIGV4cHJlc3Npb25cbiAqIEBwYXJhbSB2aXNpdGVkTmF2aWdhdGlvblBhdGhzIFRoZSBwYXRoIGZyb20gdGhlIHJvb3QgZW50aXR5IHNldFxuICogQHBhcmFtIGRlZmF1bHRWYWx1ZSBEZWZhdWx0IHZhbHVlIGlmIHRoZSBhbm5vdGF0aW9uRXhwcmVzc2lvbiBpcyB1bmRlZmluZWRcbiAqIEBwYXJhbSBwYXRoVmlzaXRvciBBIGZ1bmN0aW9uIHRvIG1vZGlmeSB0aGUgcmVzdWx0aW5nIHBhdGhcbiAqIEByZXR1cm5zIHtFeHByZXNzaW9uPFQ+fSBUaGUgZXhwcmVzc2lvbiBlcXVpdmFsZW50IHRvIHRoYXQgYW5ub3RhdGlvbiBleHByZXNzaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbm5vdGF0aW9uRXhwcmVzc2lvbjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGFubm90YXRpb25FeHByZXNzaW9uOiBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxUPixcblx0dmlzaXRlZE5hdmlnYXRpb25QYXRoczogc3RyaW5nW10gPSBbXSxcblx0ZGVmYXVsdFZhbHVlPzogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRwYXRoVmlzaXRvcj86IEZ1bmN0aW9uXG4pOiBFeHByZXNzaW9uPFQ+IHtcblx0aWYgKGFubm90YXRpb25FeHByZXNzaW9uID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gd3JhcFByaW1pdGl2ZShkZWZhdWx0VmFsdWUgYXMgVCk7XG5cdH1cblx0aWYgKCFpc0NvbXBsZXhBbm5vdGF0aW9uRXhwcmVzc2lvbihhbm5vdGF0aW9uRXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQoYW5ub3RhdGlvbkV4cHJlc3Npb24pO1xuXHR9IGVsc2Uge1xuXHRcdHN3aXRjaCAoYW5ub3RhdGlvbkV4cHJlc3Npb24udHlwZSkge1xuXHRcdFx0Y2FzZSBcIlBhdGhcIjpcblx0XHRcdFx0cmV0dXJuIGJpbmRpbmdFeHByZXNzaW9uKGFubm90YXRpb25FeHByZXNzaW9uLnBhdGgsIHVuZGVmaW5lZCwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpO1xuXHRcdFx0Y2FzZSBcIklmXCI6XG5cdFx0XHRcdHJldHVybiBhbm5vdGF0aW9uSWZFeHByZXNzaW9uKGFubm90YXRpb25FeHByZXNzaW9uLklmLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcik7XG5cdFx0XHRjYXNlIFwiTm90XCI6XG5cdFx0XHRcdHJldHVybiBub3QocGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25FeHByZXNzaW9uLk5vdCwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpKSBhcyBFeHByZXNzaW9uPFQ+O1xuXHRcdFx0Y2FzZSBcIkVxXCI6XG5cdFx0XHRcdHJldHVybiBlcXVhbChcblx0XHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvbkV4cHJlc3Npb24uRXFbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKSxcblx0XHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvbkV4cHJlc3Npb24uRXFbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKVxuXHRcdFx0XHQpIGFzIEV4cHJlc3Npb248VD47XG5cdFx0XHRjYXNlIFwiTmVcIjpcblx0XHRcdFx0cmV0dXJuIG5vdEVxdWFsKFxuXHRcdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uRXhwcmVzc2lvbi5OZVswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uRXhwcmVzc2lvbi5OZVsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0XHRcdCkgYXMgRXhwcmVzc2lvbjxUPjtcblx0XHRcdGNhc2UgXCJHdFwiOlxuXHRcdFx0XHRyZXR1cm4gZ3JlYXRlclRoYW4oXG5cdFx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25FeHByZXNzaW9uLkd0WzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciksXG5cdFx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25FeHByZXNzaW9uLkd0WzFdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcilcblx0XHRcdFx0KSBhcyBFeHByZXNzaW9uPFQ+O1xuXHRcdFx0Y2FzZSBcIkdlXCI6XG5cdFx0XHRcdHJldHVybiBncmVhdGVyT3JFcXVhbChcblx0XHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvbkV4cHJlc3Npb24uR2VbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKSxcblx0XHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvbkV4cHJlc3Npb24uR2VbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKVxuXHRcdFx0XHQpIGFzIEV4cHJlc3Npb248VD47XG5cdFx0XHRjYXNlIFwiTHRcIjpcblx0XHRcdFx0cmV0dXJuIGxlc3NUaGFuKFxuXHRcdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uRXhwcmVzc2lvbi5MdFswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uRXhwcmVzc2lvbi5MdFsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0XHRcdCkgYXMgRXhwcmVzc2lvbjxUPjtcblx0XHRcdGNhc2UgXCJMZVwiOlxuXHRcdFx0XHRyZXR1cm4gbGVzc09yRXF1YWwoXG5cdFx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25FeHByZXNzaW9uLkxlWzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciksXG5cdFx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25FeHByZXNzaW9uLkxlWzFdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcilcblx0XHRcdFx0KSBhcyBFeHByZXNzaW9uPFQ+O1xuXHRcdFx0Y2FzZSBcIk9yXCI6XG5cdFx0XHRcdHJldHVybiBvcihcblx0XHRcdFx0XHQuLi4oYW5ub3RhdGlvbkV4cHJlc3Npb24uT3IubWFwKGZ1bmN0aW9uKG9yQ29uZGl0aW9uKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKG9yQ29uZGl0aW9uLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcik7XG5cdFx0XHRcdFx0fSkgYXMgRXhwcmVzc2lvbjxib29sZWFuPltdKVxuXHRcdFx0XHQpIGFzIEV4cHJlc3Npb248VD47XG5cdFx0XHRjYXNlIFwiQW5kXCI6XG5cdFx0XHRcdHJldHVybiBhbmQoXG5cdFx0XHRcdFx0Li4uKGFubm90YXRpb25FeHByZXNzaW9uLkFuZC5tYXAoZnVuY3Rpb24oYW5kQ29uZGl0aW9uKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFuZENvbmRpdGlvbiwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpO1xuXHRcdFx0XHRcdH0pIGFzIEV4cHJlc3Npb248Ym9vbGVhbj5bXSlcblx0XHRcdFx0KSBhcyBFeHByZXNzaW9uPFQ+O1xuXHRcdFx0Y2FzZSBcIkFwcGx5XCI6XG5cdFx0XHRcdHJldHVybiBhbm5vdGF0aW9uQXBwbHlFeHByZXNzaW9uKFxuXHRcdFx0XHRcdGFubm90YXRpb25FeHByZXNzaW9uIGFzIEFwcGx5QW5ub3RhdGlvbkV4cHJlc3Npb248c3RyaW5nPixcblx0XHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHRcdHBhdGhWaXNpdG9yXG5cdFx0XHRcdCkgYXMgRXhwcmVzc2lvbjxUPjtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBQYXJzZSB0aGUgYW5ub3RhdGlvbiBjb25kaXRpb24gaW50byBhbiBleHByZXNzaW9uLlxuICpcbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGFubm90YXRpb25WYWx1ZSBUaGUgY29uZGl0aW9uIG9yIHZhbHVlIGZyb20gdGhlIGFubm90YXRpb25cbiAqIEBwYXJhbSB2aXNpdGVkTmF2aWdhdGlvblBhdGhzIFRoZSBwYXRoIGZyb20gdGhlIHJvb3QgZW50aXR5IHNldFxuICogQHBhcmFtIHBhdGhWaXNpdG9yIEEgZnVuY3Rpb24gdG8gbW9kaWZ5IHRoZSByZXN1bHRpbmcgcGF0aFxuICogQHJldHVybnMge0V4cHJlc3Npb248VD59IEFuIGVxdWl2YWxlbnQgZXhwcmVzc2lvblxuICovXG5mdW5jdGlvbiBwYXJzZUFubm90YXRpb25Db25kaXRpb248VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRhbm5vdGF0aW9uVmFsdWU6IENvbmRpdGlvbmFsQ2hlY2tPclZhbHVlLFxuXHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSA9IFtdLFxuXHRwYXRoVmlzaXRvcj86IEZ1bmN0aW9uXG4pOiBFeHByZXNzaW9uPFQ+IHtcblx0aWYgKGFubm90YXRpb25WYWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgYW5ub3RhdGlvblZhbHVlICE9PSBcIm9iamVjdFwiKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KGFubm90YXRpb25WYWx1ZSBhcyBUKTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkT3JcIikpIHtcblx0XHRyZXR1cm4gb3IoXG5cdFx0XHQuLi4oKChhbm5vdGF0aW9uVmFsdWUgYXMgT3JDb25kaXRpb25hbEV4cHJlc3Npb24pLiRPci5tYXAoZnVuY3Rpb24ob3JDb25kaXRpb24pIHtcblx0XHRcdFx0cmV0dXJuIHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihvckNvbmRpdGlvbiwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpO1xuXHRcdFx0fSkgYXMgdW5rbm93bikgYXMgRXhwcmVzc2lvbjxib29sZWFuPltdKVxuXHRcdCkgYXMgRXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkQW5kXCIpKSB7XG5cdFx0cmV0dXJuIGFuZChcblx0XHRcdC4uLigoKGFubm90YXRpb25WYWx1ZSBhcyBBbmRDb25kaXRpb25hbEV4cHJlc3Npb24pLiRBbmQubWFwKGZ1bmN0aW9uKGFuZENvbmRpdGlvbikge1xuXHRcdFx0XHRyZXR1cm4gcGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFuZENvbmRpdGlvbiwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpO1xuXHRcdFx0fSkgYXMgdW5rbm93bikgYXMgRXhwcmVzc2lvbjxib29sZWFuPltdKVxuXHRcdCkgYXMgRXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkTm90XCIpKSB7XG5cdFx0cmV0dXJuIG5vdChcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbigoYW5ub3RhdGlvblZhbHVlIGFzIE5vdENvbmRpdGlvbmFsRXhwcmVzc2lvbikuJE5vdFswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0KSBhcyBFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRFcVwiKSkge1xuXHRcdHJldHVybiBlcXVhbChcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbigoYW5ub3RhdGlvblZhbHVlIGFzIEVxQ29uZGl0aW9uYWxFeHByZXNzaW9uKS4kRXFbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKSxcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbigoYW5ub3RhdGlvblZhbHVlIGFzIEVxQ29uZGl0aW9uYWxFeHByZXNzaW9uKS4kRXFbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKVxuXHRcdCkgYXMgRXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkTmVcIikpIHtcblx0XHRyZXR1cm4gbm90RXF1YWwoXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oKGFubm90YXRpb25WYWx1ZSBhcyBOZUNvbmRpdGlvbmFsRXhwcmVzc2lvbikuJE5lWzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciksXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oKGFubm90YXRpb25WYWx1ZSBhcyBOZUNvbmRpdGlvbmFsRXhwcmVzc2lvbikuJE5lWzFdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcilcblx0XHQpIGFzIEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJEd0XCIpKSB7XG5cdFx0cmV0dXJuIGdyZWF0ZXJUaGFuKFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgR3RDb25kaXRpb25hbEV4cHJlc3Npb24pLiRHdFswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgR3RDb25kaXRpb25hbEV4cHJlc3Npb24pLiRHdFsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0KSBhcyBFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRHZVwiKSkge1xuXHRcdHJldHVybiBncmVhdGVyT3JFcXVhbChcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbigoYW5ub3RhdGlvblZhbHVlIGFzIEdlQ29uZGl0aW9uYWxFeHByZXNzaW9uKS4kR2VbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKSxcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbigoYW5ub3RhdGlvblZhbHVlIGFzIEdlQ29uZGl0aW9uYWxFeHByZXNzaW9uKS4kR2VbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKVxuXHRcdCkgYXMgRXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkTHRcIikpIHtcblx0XHRyZXR1cm4gbGVzc1RoYW4oXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oKGFubm90YXRpb25WYWx1ZSBhcyBMdENvbmRpdGlvbmFsRXhwcmVzc2lvbikuJEx0WzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciksXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oKGFubm90YXRpb25WYWx1ZSBhcyBMdENvbmRpdGlvbmFsRXhwcmVzc2lvbikuJEx0WzFdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcilcblx0XHQpIGFzIEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJExlXCIpKSB7XG5cdFx0cmV0dXJuIGxlc3NPckVxdWFsKFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgTGVDb25kaXRpb25hbEV4cHJlc3Npb24pLiRMZVswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgTGVDb25kaXRpb25hbEV4cHJlc3Npb24pLiRMZVsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0KSBhcyBFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRQYXRoXCIpKSB7XG5cdFx0cmV0dXJuIGJpbmRpbmdFeHByZXNzaW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgUGF0aENvbmRpdGlvbkV4cHJlc3Npb248VD4pLiRQYXRoLCB1bmRlZmluZWQsIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkQXBwbHlcIikpIHtcblx0XHRyZXR1cm4gYW5ub3RhdGlvbkV4cHJlc3Npb24oXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6IFwiQXBwbHlcIixcblx0XHRcdFx0RnVuY3Rpb246IChhbm5vdGF0aW9uVmFsdWUgYXMgYW55KS4kRnVuY3Rpb24sXG5cdFx0XHRcdEFwcGx5OiAoYW5ub3RhdGlvblZhbHVlIGFzIGFueSkuJEFwcGx5XG5cdFx0XHR9IGFzIFQsXG5cdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0cGF0aFZpc2l0b3Jcblx0XHQpO1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRJZlwiKSkge1xuXHRcdHJldHVybiBhbm5vdGF0aW9uRXhwcmVzc2lvbihcblx0XHRcdHtcblx0XHRcdFx0dHlwZTogXCJJZlwiLFxuXHRcdFx0XHRJZjogKGFubm90YXRpb25WYWx1ZSBhcyBhbnkpLiRJZlxuXHRcdFx0fSBhcyBULFxuXHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdHBhdGhWaXNpdG9yXG5cdFx0KTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkRW51bU1lbWJlclwiKSkge1xuXHRcdHJldHVybiBjb25zdGFudChyZXNvbHZlRW51bVZhbHVlKChhbm5vdGF0aW9uVmFsdWUgYXMgYW55KS4kRW51bU1lbWJlcikgYXMgVCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KGZhbHNlIGFzIFQpO1xuXHR9XG59XG5cbi8qKlxuICogUHJvY2VzcyB0aGUge0lmQW5ub3RhdGlvbkV4cHJlc3Npb25WYWx1ZX0gaW50byBhbiBleHByZXNzaW9uLlxuICpcbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGFubm90YXRpb25JZkV4cHJlc3Npb24gQW4gSWYgZXhwcmVzc2lvbiByZXR1cm5pbmcgdGhlIHR5cGUgVFxuICogQHBhcmFtIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMgVGhlIHBhdGggZnJvbSB0aGUgcm9vdCBlbnRpdHkgc2V0XG4gKiBAcGFyYW0gcGF0aFZpc2l0b3IgQSBmdW5jdGlvbiB0byBtb2RpZnkgdGhlIHJlc3VsdGluZyBwYXRoXG4gKiBAcmV0dXJucyB7RXhwcmVzc2lvbjxUPn0gVGhlIGVxdWl2YWxlbnQgaWZFbHNlIGV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFubm90YXRpb25JZkV4cHJlc3Npb248VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRhbm5vdGF0aW9uSWZFeHByZXNzaW9uOiBJZkFubm90YXRpb25FeHByZXNzaW9uVmFsdWU8VD4sXG5cdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdID0gW10sXG5cdHBhdGhWaXNpdG9yPzogRnVuY3Rpb25cbik6IEV4cHJlc3Npb248VD4ge1xuXHRyZXR1cm4gaWZFbHNlKFxuXHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uSWZFeHByZXNzaW9uWzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciksXG5cdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25JZkV4cHJlc3Npb25bMV0gYXMgYW55LCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciksXG5cdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25JZkV4cHJlc3Npb25bMl0gYXMgYW55LCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcilcblx0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFubm90YXRpb25BcHBseUV4cHJlc3Npb24oXG5cdGFubm90YXRpb25BcHBseUV4cHJlc3Npb246IEFwcGx5QW5ub3RhdGlvbkV4cHJlc3Npb248c3RyaW5nPixcblx0dmlzaXRlZE5hdmlnYXRpb25QYXRoczogc3RyaW5nW10gPSBbXSxcblx0cGF0aFZpc2l0b3I/OiBGdW5jdGlvblxuKTogRXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0c3dpdGNoIChhbm5vdGF0aW9uQXBwbHlFeHByZXNzaW9uLkZ1bmN0aW9uKSB7XG5cdFx0Y2FzZSBcIm9kYXRhLmNvbmNhdFwiOlxuXHRcdFx0cmV0dXJuIGNvbmNhdChcblx0XHRcdFx0Li4uYW5ub3RhdGlvbkFwcGx5RXhwcmVzc2lvbi5BcHBseS5tYXAoKGFwcGx5UGFyYW06IGFueSkgPT4ge1xuXHRcdFx0XHRcdGxldCBhcHBseVBhcmFtQ29udmVydGVkID0gYXBwbHlQYXJhbTtcblx0XHRcdFx0XHRpZiAoYXBwbHlQYXJhbS5oYXNPd25Qcm9wZXJ0eShcIiRQYXRoXCIpKSB7XG5cdFx0XHRcdFx0XHRhcHBseVBhcmFtQ29udmVydGVkID0ge1xuXHRcdFx0XHRcdFx0XHR0eXBlOiBcIlBhdGhcIixcblx0XHRcdFx0XHRcdFx0cGF0aDogYXBwbHlQYXJhbS4kUGF0aFxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGFwcGx5UGFyYW0uaGFzT3duUHJvcGVydHkoXCIkSWZcIikpIHtcblx0XHRcdFx0XHRcdGFwcGx5UGFyYW1Db252ZXJ0ZWQgPSB7XG5cdFx0XHRcdFx0XHRcdHR5cGU6IFwiSWZcIixcblx0XHRcdFx0XHRcdFx0SWY6IGFwcGx5UGFyYW0uJElmXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoYXBwbHlQYXJhbS5oYXNPd25Qcm9wZXJ0eShcIiRBcHBseVwiKSkge1xuXHRcdFx0XHRcdFx0YXBwbHlQYXJhbUNvbnZlcnRlZCA9IHtcblx0XHRcdFx0XHRcdFx0dHlwZTogXCJBcHBseVwiLFxuXHRcdFx0XHRcdFx0XHRGdW5jdGlvbjogYXBwbHlQYXJhbS4kRnVuY3Rpb24sXG5cdFx0XHRcdFx0XHRcdEFwcGx5OiBhcHBseVBhcmFtLiRBcHBseVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIGFubm90YXRpb25FeHByZXNzaW9uKGFwcGx5UGFyYW1Db252ZXJ0ZWQsIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHVuZGVmaW5lZCwgcGF0aFZpc2l0b3IpO1xuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHRcdGJyZWFrO1xuXHR9XG59XG5cbi8qKlxuICogR2VuZXJpYyBoZWxwZXIgZm9yIHRoZSBjb21wYXJpc29uIG9wZXJhdGlvbnMgKGVxdWFsLCBub3RFcXVhbCwgLi4uKS5cbiAqXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBvcGVyYXRvciBUaGUgb3BlcmF0b3IgdG8gYXBwbHlcbiAqIEBwYXJhbSBsZWZ0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgbGVmdCBzaWRlIG9mIHRoZSBvcGVyYXRvclxuICogQHBhcmFtIHJpZ2h0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgb3BlcmF0b3JcbiAqIEByZXR1cm5zIHtFeHByZXNzaW9uPGJvb2xlYW4+fSBBbiBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY29tcGFyaXNvblxuICovXG5mdW5jdGlvbiBjb21wYXJpc29uPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0b3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcblx0bGVmdE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0cmlnaHRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBsZWZ0RXhwcmVzc2lvbiA9IHdyYXBQcmltaXRpdmUobGVmdE9wZXJhbmQpO1xuXHRjb25zdCByaWdodEV4cHJlc3Npb24gPSB3cmFwUHJpbWl0aXZlKHJpZ2h0T3BlcmFuZCk7XG5cdGlmIChoYXNVbnJlc29sdmVhYmxlRXhwcmVzc2lvbihsZWZ0RXhwcmVzc2lvbiwgcmlnaHRFeHByZXNzaW9uKSkge1xuXHRcdHJldHVybiB1bnJlc29sdmVhYmxlRXhwcmVzc2lvbjtcblx0fVxuXHRpZiAoaXNDb25zdGFudChsZWZ0RXhwcmVzc2lvbikgJiYgaXNDb25zdGFudChyaWdodEV4cHJlc3Npb24pKSB7XG5cdFx0aWYgKGxlZnRFeHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWQgfHwgcmlnaHRFeHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiBjb25zdGFudChsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gcmlnaHRFeHByZXNzaW9uLnZhbHVlKTtcblx0XHR9XG5cblx0XHRzd2l0Y2ggKG9wZXJhdG9yKSB7XG5cdFx0XHRjYXNlIFwiIT09XCI6XG5cdFx0XHRcdHJldHVybiBjb25zdGFudChsZWZ0RXhwcmVzc2lvbi52YWx1ZSAhPT0gcmlnaHRFeHByZXNzaW9uLnZhbHVlKTtcblx0XHRcdGNhc2UgXCI8XCI6XG5cdFx0XHRcdHJldHVybiBjb25zdGFudChsZWZ0RXhwcmVzc2lvbi52YWx1ZSA8IHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSk7XG5cdFx0XHRjYXNlIFwiPD1cIjpcblx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KGxlZnRFeHByZXNzaW9uLnZhbHVlIDw9IHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSk7XG5cdFx0XHRjYXNlIFwiPlwiOlxuXHRcdFx0XHRyZXR1cm4gY29uc3RhbnQobGVmdEV4cHJlc3Npb24udmFsdWUgPiByaWdodEV4cHJlc3Npb24udmFsdWUpO1xuXHRcdFx0Y2FzZSBcIj49XCI6XG5cdFx0XHRcdHJldHVybiBjb25zdGFudChsZWZ0RXhwcmVzc2lvbi52YWx1ZSA+PSByaWdodEV4cHJlc3Npb24udmFsdWUpO1xuXHRcdFx0Y2FzZSBcIj09PVwiOlxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KGxlZnRFeHByZXNzaW9uLnZhbHVlID09PSByaWdodEV4cHJlc3Npb24udmFsdWUpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0X3R5cGU6IFwiQ29tcGFyaXNvblwiLFxuXHRcdFx0b3BlcmF0b3I6IG9wZXJhdG9yLFxuXHRcdFx0b3BlcmFuZDE6IGxlZnRFeHByZXNzaW9uLFxuXHRcdFx0b3BlcmFuZDI6IHJpZ2h0RXhwcmVzc2lvblxuXHRcdH07XG5cdH1cbn1cblxuLyoqXG4gKiBDb21wYXJpc29uOiBcImVxdWFsXCIgKD09PSkuXG4gKlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gbGVmdE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIGxlZnQgc2lkZVxuICogQHBhcmFtIHJpZ2h0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgY29tcGFyaXNvblxuICogQHJldHVybnMge0V4cHJlc3Npb248Ym9vbGVhbj59IEFuIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBjb21wYXJpc29uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbDxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGxlZnRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4sXG5cdHJpZ2h0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+XG4pOiBFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgbGVmdEV4cHJlc3Npb24gPSB3cmFwUHJpbWl0aXZlKGxlZnRPcGVyYW5kKTtcblx0Y29uc3QgcmlnaHRFeHByZXNzaW9uID0gd3JhcFByaW1pdGl2ZShyaWdodE9wZXJhbmQpO1xuXHRpZiAoaGFzVW5yZXNvbHZlYWJsZUV4cHJlc3Npb24obGVmdEV4cHJlc3Npb24sIHJpZ2h0RXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gdW5yZXNvbHZlYWJsZUV4cHJlc3Npb247XG5cdH1cblx0aWYgKF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwobGVmdEV4cHJlc3Npb24sIHJpZ2h0RXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG5cdH1cblxuXHQvLyAoKGEgPT09IGMpID09PSB0cnVlKSA9PiAoYSA9PT0gYylcblx0aWYgKGxlZnRFeHByZXNzaW9uLl90eXBlID09PSBcIkNvbXBhcmlzb25cIiAmJiBpc0NvbnN0YW50KHJpZ2h0RXhwcmVzc2lvbikgJiYgcmlnaHRFeHByZXNzaW9uLnZhbHVlID09PSB0cnVlKSB7XG5cdFx0cmV0dXJuIGxlZnRFeHByZXNzaW9uO1xuXHR9IGVsc2UgaWYgKGxlZnRFeHByZXNzaW9uLl90eXBlID09PSBcIkNvbXBhcmlzb25cIiAmJiBpc0NvbnN0YW50KHJpZ2h0RXhwcmVzc2lvbikgJiYgcmlnaHRFeHByZXNzaW9uLnZhbHVlID09PSB0cnVlKSB7XG5cdFx0Ly8gKChhID09PSBjKSA9PT0gZmFsc2UpID0+ICEoYSA9PT0gYylcblx0XHRyZXR1cm4gbm90KGxlZnRFeHByZXNzaW9uKTtcblx0fSBlbHNlIGlmIChsZWZ0RXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJJZkVsc2VcIiAmJiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGxlZnRFeHByZXNzaW9uLm9uVHJ1ZSwgcmlnaHRFeHByZXNzaW9uKSkge1xuXHRcdC8vIChpZih4eHh4KSB7IGFhYSB9IGVsc2UgeyBiYmIgfSApID09PSBhYWEgKVxuXHRcdHJldHVybiBvcihsZWZ0RXhwcmVzc2lvbi5jb25kaXRpb24sIGVxdWFsKGxlZnRFeHByZXNzaW9uLm9uRmFsc2UsIHJpZ2h0RXhwcmVzc2lvbikpO1xuXHR9IGVsc2UgaWYgKGxlZnRFeHByZXNzaW9uLl90eXBlID09PSBcIklmRWxzZVwiICYmIF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwobGVmdEV4cHJlc3Npb24ub25GYWxzZSwgcmlnaHRFeHByZXNzaW9uKSkge1xuXHRcdHJldHVybiBvcihub3QobGVmdEV4cHJlc3Npb24uY29uZGl0aW9uKSwgZXF1YWwobGVmdEV4cHJlc3Npb24ub25UcnVlLCByaWdodEV4cHJlc3Npb24pKTtcblx0fSBlbHNlIGlmIChcblx0XHRsZWZ0RXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJJZkVsc2VcIiAmJlxuXHRcdGlzQ29uc3RhbnQobGVmdEV4cHJlc3Npb24ub25UcnVlKSAmJlxuXHRcdGlzQ29uc3RhbnQocmlnaHRFeHByZXNzaW9uKSAmJlxuXHRcdGlzQ29uc3RhbnQobGVmdEV4cHJlc3Npb24ub25GYWxzZSkgJiZcblx0XHQhX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChsZWZ0RXhwcmVzc2lvbi5vblRydWUsIHJpZ2h0RXhwcmVzc2lvbikgJiZcblx0XHQhX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChsZWZ0RXhwcmVzc2lvbi5vbkZhbHNlLCByaWdodEV4cHJlc3Npb24pXG5cdCkge1xuXHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdH1cblxuXHRyZXR1cm4gY29tcGFyaXNvbihcIj09PVwiLCBsZWZ0RXhwcmVzc2lvbiwgcmlnaHRFeHByZXNzaW9uKTtcbn1cblxuLyoqXG4gKiBDb21wYXJpc29uOiBcIm5vdCBlcXVhbFwiICghPT0pLlxuICpcbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGxlZnRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSBsZWZ0IHNpZGVcbiAqIEBwYXJhbSByaWdodE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGNvbXBhcmlzb25cbiAqIEByZXR1cm5zIHtFeHByZXNzaW9uPGJvb2xlYW4+fSBBbiBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY29tcGFyaXNvblxuICovXG5leHBvcnQgZnVuY3Rpb24gbm90RXF1YWw8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRsZWZ0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRyaWdodE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogRXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGxlZnRFeHByZXNzaW9uID0gd3JhcFByaW1pdGl2ZShsZWZ0T3BlcmFuZCk7XG5cdGNvbnN0IHJpZ2h0RXhwcmVzc2lvbiA9IHdyYXBQcmltaXRpdmUocmlnaHRPcGVyYW5kKTtcblxuXHRpZiAoX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChsZWZ0RXhwcmVzc2lvbiwgcmlnaHRFeHByZXNzaW9uKSkge1xuXHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdH1cblxuXHQvLyAoKGEgPT09IGMpICE9PSB0cnVlKSA9PiAhKGEgPT09IGMpXG5cdGlmIChsZWZ0RXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJDb21wYXJpc29uXCIgJiYgaXNDb25zdGFudChyaWdodEV4cHJlc3Npb24pICYmIHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSA9PT0gdHJ1ZSkge1xuXHRcdHJldHVybiBub3QobGVmdEV4cHJlc3Npb24pO1xuXHR9IGVsc2UgaWYgKGxlZnRFeHByZXNzaW9uLl90eXBlID09PSBcIkNvbXBhcmlzb25cIiAmJiBpc0NvbnN0YW50KHJpZ2h0RXhwcmVzc2lvbikgJiYgcmlnaHRFeHByZXNzaW9uLnZhbHVlID09PSB0cnVlKSB7XG5cdFx0Ly8gKChhID09PSBjKSAhPT0gZmFsc2UpID0+IChhID09PSBjKVxuXHRcdHJldHVybiBsZWZ0RXhwcmVzc2lvbjtcblx0fSBlbHNlIGlmIChsZWZ0RXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJJZkVsc2VcIiAmJiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGxlZnRFeHByZXNzaW9uLm9uVHJ1ZSwgcmlnaHRFeHByZXNzaW9uKSkge1xuXHRcdHJldHVybiBhbmQobm90KGxlZnRFeHByZXNzaW9uLmNvbmRpdGlvbiksIG5vdEVxdWFsKGxlZnRFeHByZXNzaW9uLm9uRmFsc2UsIHJpZ2h0RXhwcmVzc2lvbikpO1xuXHR9IGVsc2UgaWYgKGxlZnRFeHByZXNzaW9uLl90eXBlID09PSBcIklmRWxzZVwiICYmIF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwobGVmdEV4cHJlc3Npb24ub25GYWxzZSwgcmlnaHRFeHByZXNzaW9uKSkge1xuXHRcdHJldHVybiBhbmQobGVmdEV4cHJlc3Npb24uY29uZGl0aW9uLCBub3RFcXVhbChsZWZ0RXhwcmVzc2lvbi5vblRydWUsIHJpZ2h0RXhwcmVzc2lvbikpO1xuXHR9IGVsc2UgaWYgKFxuXHRcdGxlZnRFeHByZXNzaW9uLl90eXBlID09PSBcIklmRWxzZVwiICYmXG5cdFx0aXNDb25zdGFudChsZWZ0RXhwcmVzc2lvbi5vblRydWUpICYmXG5cdFx0aXNDb25zdGFudChyaWdodEV4cHJlc3Npb24pICYmXG5cdFx0aXNDb25zdGFudChsZWZ0RXhwcmVzc2lvbi5vbkZhbHNlKSAmJlxuXHRcdCFfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGxlZnRFeHByZXNzaW9uLm9uVHJ1ZSwgcmlnaHRFeHByZXNzaW9uKSAmJlxuXHRcdCFfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGxlZnRFeHByZXNzaW9uLm9uRmFsc2UsIHJpZ2h0RXhwcmVzc2lvbilcblx0KSB7XG5cdFx0Ly8gSWYgdGhlIGxlZnQgZXhwcmVzc2lvbiBpcyBhbiBpZiBlbHNlIHdoZXJlIGJvdGggb25UcnVlIGFuZCBvbkZhbHNlIGFyZSBub3QgZXF1YWxzIHRvIHRoZSByaWdodCBleHByZXNzaW9uIC0+IHNpbXBsaWZ5IGFzIHRydWVcblx0XHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG5cdH1cblxuXHRyZXR1cm4gY29tcGFyaXNvbihcIiE9PVwiLCBsZWZ0RXhwcmVzc2lvbiwgcmlnaHRFeHByZXNzaW9uKTtcbn1cblxuLyoqXG4gKiBDb21wYXJpc29uOiBcImdyZWF0ZXIgb3IgZXF1YWxcIiAoPj0pLlxuICpcbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGxlZnRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSBsZWZ0IHNpZGVcbiAqIEBwYXJhbSByaWdodE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGNvbXBhcmlzb25cbiAqIEByZXR1cm5zIHtFeHByZXNzaW9uPGJvb2xlYW4+fSBBbiBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY29tcGFyaXNvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JlYXRlck9yRXF1YWw8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRsZWZ0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRyaWdodE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogRXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBjb21wYXJpc29uKFwiPj1cIiwgbGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCk7XG59XG5cbi8qKlxuICogQ29tcGFyaXNvbjogXCJncmVhdGVyIHRoYW5cIiAoPikuXG4gKlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gbGVmdE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIGxlZnQgc2lkZVxuICogQHBhcmFtIHJpZ2h0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgY29tcGFyaXNvblxuICogQHJldHVybnMge0V4cHJlc3Npb248Ym9vbGVhbj59IEFuIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBjb21wYXJpc29uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmVhdGVyVGhhbjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGxlZnRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4sXG5cdHJpZ2h0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+XG4pOiBFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGNvbXBhcmlzb24oXCI+XCIsIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpO1xufVxuXG4vKipcbiAqIENvbXBhcmlzb246IFwibGVzcyBvciBlcXVhbFwiICg8PSkuXG4gKlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gbGVmdE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIGxlZnQgc2lkZVxuICogQHBhcmFtIHJpZ2h0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgY29tcGFyaXNvblxuICogQHJldHVybnMge0V4cHJlc3Npb248Ym9vbGVhbj59IEFuIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBjb21wYXJpc29uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsZXNzT3JFcXVhbDxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGxlZnRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4sXG5cdHJpZ2h0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+XG4pOiBFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGNvbXBhcmlzb24oXCI8PVwiLCBsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kKTtcbn1cblxuLyoqXG4gKiBDb21wYXJpc29uOiBcImxlc3MgdGhhblwiICg8KS5cbiAqXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBsZWZ0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgbGVmdCBzaWRlXG4gKiBAcGFyYW0gcmlnaHRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBjb21wYXJpc29uXG4gKiBAcmV0dXJucyB7RXhwcmVzc2lvbjxib29sZWFuPn0gQW4gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGNvbXBhcmlzb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxlc3NUaGFuPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0bGVmdE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0cmlnaHRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gY29tcGFyaXNvbihcIjxcIiwgbGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCk7XG59XG5cbi8qKlxuICogSWYtdGhlbi1lbHNlIGV4cHJlc3Npb24uXG4gKlxuICogRXZhbHVhdGVzIHRvIG9uVHJ1ZSBpZiB0aGUgY29uZGl0aW9uIGV2YWx1YXRlcyB0byB0cnVlLCBlbHNlIGV2YWx1YXRlcyB0byBvbkZhbHNlLlxuICpcbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGNvbmRpdGlvbiBUaGUgY29uZGl0aW9uIHRvIGV2YWx1YXRlXG4gKiBAcGFyYW0gb25UcnVlIEV4cHJlc3Npb24gcmVzdWx0IGlmIHRoZSBjb25kaXRpb24gZXZhbHVhdGVzIHRvIHRydWVcbiAqIEBwYXJhbSBvbkZhbHNlIEV4cHJlc3Npb24gcmVzdWx0IGlmIHRoZSBjb25kaXRpb24gZXZhbHVhdGVzIHRvIGZhbHNlXG4gKiBAcmV0dXJucyB7RXhwcmVzc2lvbjxUPn0gVGhlIGV4cHJlc3Npb24gdGhhdCByZXByZXNlbnRzIHRoaXMgY29uZGl0aW9uYWwgY2hlY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlmRWxzZTxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGNvbmRpdGlvbjogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPGJvb2xlYW4+LFxuXHRvblRydWU6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0b25GYWxzZTogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+XG4pOiBFeHByZXNzaW9uPFQ+IHtcblx0bGV0IGNvbmRpdGlvbkV4cHJlc3Npb24gPSB3cmFwUHJpbWl0aXZlKGNvbmRpdGlvbik7XG5cdGxldCBvblRydWVFeHByZXNzaW9uID0gd3JhcFByaW1pdGl2ZShvblRydWUpO1xuXHRsZXQgb25GYWxzZUV4cHJlc3Npb24gPSB3cmFwUHJpbWl0aXZlKG9uRmFsc2UpO1xuXG5cdGlmIChoYXNVbnJlc29sdmVhYmxlRXhwcmVzc2lvbihjb25kaXRpb25FeHByZXNzaW9uLCBvblRydWVFeHByZXNzaW9uLCBvbkZhbHNlRXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gdW5yZXNvbHZlYWJsZUV4cHJlc3Npb247XG5cdH1cblx0Ly8gc3dhcCBicmFuY2hlcyBpZiB0aGUgY29uZGl0aW9uIGlzIGEgbmVnYXRpb25cblx0aWYgKGNvbmRpdGlvbkV4cHJlc3Npb24uX3R5cGUgPT09IFwiTm90XCIpIHtcblx0XHQvLyBpZkVsc2Uobm90KFgpLCBhLCBiKSAtLT4gaWZFbHNlKFgsIGIsIGEpXG5cdFx0W29uVHJ1ZUV4cHJlc3Npb24sIG9uRmFsc2VFeHByZXNzaW9uXSA9IFtvbkZhbHNlRXhwcmVzc2lvbiwgb25UcnVlRXhwcmVzc2lvbl07XG5cdFx0Y29uZGl0aW9uRXhwcmVzc2lvbiA9IG5vdChjb25kaXRpb25FeHByZXNzaW9uKTtcblx0fVxuXG5cdC8vIGlubGluZSBuZXN0ZWQgaWYtZWxzZSBleHByZXNzaW9uczogb25UcnVlIGJyYW5jaFxuXHQvLyBpZkVsc2UoWCwgaWZFbHNlKFgsIGEsIGIpLCBjKSA9PT4gaWZFbHNlKFgsIGEsIGMpXG5cdGlmIChvblRydWVFeHByZXNzaW9uLl90eXBlID09PSBcIklmRWxzZVwiICYmIF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoY29uZGl0aW9uRXhwcmVzc2lvbiwgb25UcnVlRXhwcmVzc2lvbi5jb25kaXRpb24pKSB7XG5cdFx0b25UcnVlRXhwcmVzc2lvbiA9IG9uVHJ1ZUV4cHJlc3Npb24ub25UcnVlO1xuXHR9XG5cblx0Ly8gaW5saW5lIG5lc3RlZCBpZi1lbHNlIGV4cHJlc3Npb25zOiBvbkZhbHNlIGJyYW5jaFxuXHQvLyBpZkVsc2UoWCwgYSwgaWZFbHNlKFgsIGIsIGMpKSA9PT4gaWZFbHNlKFgsIGEsIGMpXG5cdGlmIChvbkZhbHNlRXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJJZkVsc2VcIiAmJiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGNvbmRpdGlvbkV4cHJlc3Npb24sIG9uRmFsc2VFeHByZXNzaW9uLmNvbmRpdGlvbikpIHtcblx0XHRvbkZhbHNlRXhwcmVzc2lvbiA9IG9uRmFsc2VFeHByZXNzaW9uLm9uRmFsc2U7XG5cdH1cblxuXHQvLyBpbmxpbmUgbmVzdGVkIGlmLWVsc2UgZXhwcmVzc2lvbnM6IGNvbmRpdGlvblxuXHRpZiAoY29uZGl0aW9uRXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJJZkVsc2VcIikge1xuXHRcdGlmIChcblx0XHRcdGlzQ29uc3RhbnQoY29uZGl0aW9uRXhwcmVzc2lvbi5vbkZhbHNlKSAmJlxuXHRcdFx0IWNvbmRpdGlvbkV4cHJlc3Npb24ub25GYWxzZS52YWx1ZSAmJlxuXHRcdFx0aXNDb25zdGFudChjb25kaXRpb25FeHByZXNzaW9uLm9uVHJ1ZSkgJiZcblx0XHRcdGNvbmRpdGlvbkV4cHJlc3Npb24ub25UcnVlLnZhbHVlXG5cdFx0KSB7XG5cdFx0XHQvLyBpZkVsc2UoaWZFbHNlKFgsIHRydWUsIGZhbHNlKSwgYSwgYikgPT0+IGlmRWxzZShYLCBhLCBiKVxuXHRcdFx0Y29uZGl0aW9uRXhwcmVzc2lvbiA9IGNvbmRpdGlvbkV4cHJlc3Npb24uY29uZGl0aW9uO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRpc0NvbnN0YW50KGNvbmRpdGlvbkV4cHJlc3Npb24ub25GYWxzZSkgJiZcblx0XHRcdGNvbmRpdGlvbkV4cHJlc3Npb24ub25GYWxzZS52YWx1ZSAmJlxuXHRcdFx0aXNDb25zdGFudChjb25kaXRpb25FeHByZXNzaW9uLm9uVHJ1ZSkgJiZcblx0XHRcdCFjb25kaXRpb25FeHByZXNzaW9uLm9uVHJ1ZS52YWx1ZVxuXHRcdCkge1xuXHRcdFx0Ly8gaWZFbHNlKGlmRWxzZShYLCBmYWxzZSwgdHJ1ZSksIGEsIGIpID09PiBpZkVsc2Uobm90KFgpLCBhLCBiKVxuXHRcdFx0Y29uZGl0aW9uRXhwcmVzc2lvbiA9IG5vdChjb25kaXRpb25FeHByZXNzaW9uLmNvbmRpdGlvbik7XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdGlzQ29uc3RhbnQoY29uZGl0aW9uRXhwcmVzc2lvbi5vblRydWUpICYmXG5cdFx0XHQhY29uZGl0aW9uRXhwcmVzc2lvbi5vblRydWUudmFsdWUgJiZcblx0XHRcdCFpc0NvbnN0YW50KGNvbmRpdGlvbkV4cHJlc3Npb24ub25GYWxzZSlcblx0XHQpIHtcblx0XHRcdC8vIGlmRWxzZShpZkVsc2UoWCwgZmFsc2UsIGEpLCBiLCBjKSA9PT4gaWZFbHNlKGFuZChub3QoWCksIGEpLCBiLCBjKVxuXHRcdFx0Y29uZGl0aW9uRXhwcmVzc2lvbiA9IGFuZChub3QoY29uZGl0aW9uRXhwcmVzc2lvbi5jb25kaXRpb24pLCBjb25kaXRpb25FeHByZXNzaW9uLm9uRmFsc2UpO1xuXHRcdH1cblx0fVxuXG5cdC8vIGFnYWluIHN3YXAgYnJhbmNoZXMgaWYgbmVlZGVkIChpbiBjYXNlIG9uZSBvZiB0aGUgb3B0aW1pemF0aW9ucyBhYm92ZSBsZWQgdG8gYSBuZWdhdGVkIGNvbmRpdGlvbilcblx0aWYgKGNvbmRpdGlvbkV4cHJlc3Npb24uX3R5cGUgPT09IFwiTm90XCIpIHtcblx0XHQvLyBpZkVsc2Uobm90KFgpLCBhLCBiKSAtLT4gaWZFbHNlKFgsIGIsIGEpXG5cdFx0W29uVHJ1ZUV4cHJlc3Npb24sIG9uRmFsc2VFeHByZXNzaW9uXSA9IFtvbkZhbHNlRXhwcmVzc2lvbiwgb25UcnVlRXhwcmVzc2lvbl07XG5cdFx0Y29uZGl0aW9uRXhwcmVzc2lvbiA9IG5vdChjb25kaXRpb25FeHByZXNzaW9uKTtcblx0fVxuXG5cdC8vIGNvbXB1dGUgZXhwcmVzc2lvbiByZXN1bHQgZm9yIGNvbnN0YW50IGNvbmRpdGlvbnNcblx0aWYgKGlzQ29uc3RhbnQoY29uZGl0aW9uRXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gY29uZGl0aW9uRXhwcmVzc2lvbi52YWx1ZSA/IG9uVHJ1ZUV4cHJlc3Npb24gOiBvbkZhbHNlRXhwcmVzc2lvbjtcblx0fVxuXG5cdC8vIGNvbXB1dGUgZXhwcmVzc2lvbiByZXN1bHQgaWYgb25UcnVlIGFuZCBvbkZhbHNlIGJyYW5jaGVzIGFyZSBlcXVhbFxuXHRpZiAoX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChvblRydWVFeHByZXNzaW9uLCBvbkZhbHNlRXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gb25UcnVlRXhwcmVzc2lvbjtcblx0fVxuXG5cdC8vIElmIGVpdGhlciB0cnVlRXhwcmVzc2lvbiBvciBmYWxzZUV4cHJlc3Npb24gaXMgYSB2YWx1ZSBlcXVhbHMgdG8gZmFsc2UgdGhlIGV4cHJlc3Npb24gY2FuIGJlIHNpbXBsaWZpZWRcblx0Ly8gSWYoQ29uZGl0aW9uKSBUaGVuIFhYWCBFbHNlIEZhbHNlIC0+IENvbmRpdGlvbiAmJiBYWFhcblx0aWYgKGlzQ29uc3RhbnQob25GYWxzZUV4cHJlc3Npb24pICYmIG9uRmFsc2VFeHByZXNzaW9uLnZhbHVlID09PSBmYWxzZSkge1xuXHRcdHJldHVybiBhbmQoY29uZGl0aW9uRXhwcmVzc2lvbiwgb25UcnVlRXhwcmVzc2lvbiBhcyBFeHByZXNzaW9uPGJvb2xlYW4+KSBhcyBFeHByZXNzaW9uPFQ+O1xuXHR9XG5cdC8vIElmKENvbmRpdGlvbikgVGhlbiBGYWxzZSBFbHNlIFhYWCAtPiAhQ29uZGl0aW9uICYmIFhYWFxuXHRpZiAoaXNDb25zdGFudChvblRydWVFeHByZXNzaW9uKSAmJiBvblRydWVFeHByZXNzaW9uLnZhbHVlID09PSBmYWxzZSkge1xuXHRcdHJldHVybiBhbmQobm90KGNvbmRpdGlvbkV4cHJlc3Npb24pLCBvbkZhbHNlRXhwcmVzc2lvbiBhcyBFeHByZXNzaW9uPGJvb2xlYW4+KSBhcyBFeHByZXNzaW9uPFQ+O1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRfdHlwZTogXCJJZkVsc2VcIixcblx0XHRjb25kaXRpb246IGNvbmRpdGlvbkV4cHJlc3Npb24sXG5cdFx0b25UcnVlOiBvblRydWVFeHByZXNzaW9uLFxuXHRcdG9uRmFsc2U6IG9uRmFsc2VFeHByZXNzaW9uXG5cdH07XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGN1cnJlbnQgZXhwcmVzc2lvbiBoYXMgYSByZWZlcmVuY2UgdG8gdGhlIGRlZmF1bHQgbW9kZWwgKHVuZGVmaW5lZCkuXG4gKlxuICogQHBhcmFtIGV4cHJlc3Npb24gVGhlIGV4cHJlc3Npb24gdG8gZXZhbHVhdGVcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlcmUgaXMgYSByZWZlcmVuY2UgdG8gdGhlIGRlZmF1bHQgY29udGV4dFxuICovXG5mdW5jdGlvbiBoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KGV4cHJlc3Npb246IEV4cHJlc3Npb248YW55Pik6IGJvb2xlYW4ge1xuXHRzd2l0Y2ggKGV4cHJlc3Npb24uX3R5cGUpIHtcblx0XHRjYXNlIFwiQ29uc3RhbnRcIjpcblx0XHRjYXNlIFwiRm9ybWF0dGVyXCI6XG5cdFx0Y2FzZSBcIkNvbXBsZXhUeXBlXCI6XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0Y2FzZSBcIlNldFwiOlxuXHRcdFx0cmV0dXJuIGV4cHJlc3Npb24ub3BlcmFuZHMuc29tZShoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KTtcblx0XHRjYXNlIFwiQmluZGluZ1wiOlxuXHRcdFx0cmV0dXJuIGV4cHJlc3Npb24ubW9kZWxOYW1lID09PSB1bmRlZmluZWQ7XG5cdFx0Y2FzZSBcIkNvbXBhcmlzb25cIjpcblx0XHRcdHJldHVybiBoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KGV4cHJlc3Npb24ub3BlcmFuZDEpIHx8IGhhc1JlZmVyZW5jZVRvRGVmYXVsdENvbnRleHQoZXhwcmVzc2lvbi5vcGVyYW5kMik7XG5cdFx0Y2FzZSBcIkRlZmF1bHRCaW5kaW5nXCI6XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRjYXNlIFwiSWZFbHNlXCI6XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KGV4cHJlc3Npb24uY29uZGl0aW9uKSB8fFxuXHRcdFx0XHRoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KGV4cHJlc3Npb24ub25UcnVlKSB8fFxuXHRcdFx0XHRoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KGV4cHJlc3Npb24ub25GYWxzZSlcblx0XHRcdCk7XG5cdFx0Y2FzZSBcIk5vdFwiOlxuXHRcdGNhc2UgXCJUcnV0aHlcIjpcblx0XHRcdHJldHVybiBoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KGV4cHJlc3Npb24ub3BlcmFuZCk7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG50eXBlIEZuPFQ+ID0gKCguLi5wYXJhbXM6IGFueSkgPT4gVCkgJiB7XG5cdF9fZnVuY3Rpb25OYW1lOiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIFdyYXBwZWRUdXBsZVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4vLyBAdHMtaWdub3JlXG50eXBlIFdyYXBwZWRUdXBsZTxUPiA9IHsgW0sgaW4ga2V5b2YgVF06IFdyYXBwZWRUdXBsZTxUW0tdPiB8IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUW0tdPiB9O1xuXG4vLyBTbywgdGhpcyB3b3JrcyBidXQgSSBjYW5ub3QgZ2V0IGl0IHRvIGNvbXBpbGUgOkQsIGJ1dCBpdCBzdGlsbCBkb2VzIHdoYXQgaXMgZXhwZWN0ZWQuLi5cblxuLyoqXG4gKiBBIGZ1bmN0aW9uIHJlZmVyZW5jZSBvciBhIGZ1bmN0aW9uIG5hbWUuXG4gKi9cbnR5cGUgRnVuY3Rpb25Pck5hbWU8VD4gPSBGbjxUPiB8IHN0cmluZztcblxuLyoqXG4gKiBGdW5jdGlvbiBwYXJhbWV0ZXJzLCBlaXRoZXIgZGVyaXZlZCBmcm9tIHRoZSBmdW5jdGlvbiBvciBhbiB1bnR5cGVkIGFycmF5LlxuICovXG50eXBlIEZ1bmN0aW9uUGFyYW1ldGVyczxULCBGIGV4dGVuZHMgRnVuY3Rpb25Pck5hbWU8VD4+ID0gRiBleHRlbmRzIEZuPFQ+ID8gUGFyYW1ldGVyczxGPiA6IGFueVtdO1xuXG4vKipcbiAqIENhbGxzIGEgZm9ybWF0dGVyIGZ1bmN0aW9uIHRvIHByb2Nlc3MgdGhlIHBhcmFtZXRlcnMuXG4gKiBJZiByZXF1aXJlQ29udGV4dCBpcyBzZXQgdG8gdHJ1ZSBhbmQgbm8gY29udGV4dCBpcyBwYXNzZWQgYSBkZWZhdWx0IGNvbnRleHQgd2lsbCBiZSBhZGRlZCBhdXRvbWF0aWNhbGx5LlxuICpcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAdGVtcGxhdGUgVVxuICogQHBhcmFtIHBhcmFtZXRlcnMgVGhlIGxpc3Qgb2YgcGFyYW1ldGVyIHRoYXQgc2hvdWxkIG1hdGNoIHRoZSB0eXBlIGFuZCBudW1iZXIgb2YgdGhlIGZvcm1hdHRlciBmdW5jdGlvblxuICogQHBhcmFtIGZvcm1hdHRlckZ1bmN0aW9uIFRoZSBmdW5jdGlvbiB0byBjYWxsXG4gKiBAcGFyYW0gW2NvbnRleHRFbnRpdHlUeXBlXSBUaGUgY29udGV4dCBlbnRpdHkgdHlwZSB0byBjb25zaWRlclxuICogQHJldHVybnMge0V4cHJlc3Npb248VD59IFRoZSBjb3JyZXNwb25kaW5nIGV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFJlc3VsdDxULCBVIGV4dGVuZHMgRm48VD4+KFxuXHRwYXJhbWV0ZXJzOiBXcmFwcGVkVHVwbGU8UGFyYW1ldGVyczxVPj4sXG5cdGZvcm1hdHRlckZ1bmN0aW9uOiBVLFxuXHRjb250ZXh0RW50aXR5VHlwZT86IEVudGl0eVR5cGVcbik6IEV4cHJlc3Npb248VD4ge1xuXHRjb25zdCBwYXJhbWV0ZXJFeHByZXNzaW9ucyA9IChwYXJhbWV0ZXJzIGFzIGFueVtdKS5tYXAod3JhcFByaW1pdGl2ZSk7XG5cblx0aWYgKGhhc1VucmVzb2x2ZWFibGVFeHByZXNzaW9uKC4uLnBhcmFtZXRlckV4cHJlc3Npb25zKSkge1xuXHRcdHJldHVybiB1bnJlc29sdmVhYmxlRXhwcmVzc2lvbjtcblx0fVxuXHRpZiAoISFjb250ZXh0RW50aXR5VHlwZSkge1xuXHRcdC8vIE90aGVyd2lzZSwgaWYgdGhlIGNvbnRleHQgaXMgcmVxdWlyZWQgYW5kIG5vIGNvbnRleHQgaXMgcHJvdmlkZWQgbWFrZSBzdXJlIHRvIGFkZCB0aGUgZGVmYXVsdCBiaW5kaW5nXG5cdFx0aWYgKCFwYXJhbWV0ZXJFeHByZXNzaW9ucy5zb21lKGhhc1JlZmVyZW5jZVRvRGVmYXVsdENvbnRleHQpKSB7XG5cdFx0XHRjb250ZXh0RW50aXR5VHlwZS5rZXlzLmZvckVhY2goa2V5ID0+IHBhcmFtZXRlckV4cHJlc3Npb25zLnB1c2goYmluZGluZ0V4cHJlc3Npb24oa2V5Lm5hbWUsIFwiXCIpKSk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gRm9ybWF0dGVyTmFtZSBjYW4gYmUgb2YgZm9ybWF0IHNhcC5mZS5jb3JlLnh4eCNtZXRob2ROYW1lIHRvIGhhdmUgbXVsdGlwbGUgZm9ybWF0dGVyIGluIG9uZSBjbGFzc1xuXHRjb25zdCBbZm9ybWF0dGVyQ2xhc3MsIGZvcm1hdHRlck5hbWVdID0gZm9ybWF0dGVyRnVuY3Rpb24uX19mdW5jdGlvbk5hbWUuc3BsaXQoXCIjXCIpO1xuXG5cdGlmICghIWZvcm1hdHRlck5hbWUgJiYgZm9ybWF0dGVyTmFtZS5sZW5ndGggPiAwKSB7XG5cdFx0cGFyYW1ldGVyRXhwcmVzc2lvbnMudW5zaGlmdChjb25zdGFudChmb3JtYXR0ZXJOYW1lKSk7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdF90eXBlOiBcIkZvcm1hdHRlclwiLFxuXHRcdGZuOiBmb3JtYXR0ZXJDbGFzcyxcblx0XHRwYXJhbWV0ZXJzOiBwYXJhbWV0ZXJFeHByZXNzaW9uc1xuXHR9O1xufVxuXG4vKipcbiAqIENhbGxzIGEgY29tcGxleCB0eXBlICB0byBwcm9jZXNzIHRoZSBwYXJhbWV0ZXJzLlxuICogSWYgcmVxdWlyZUNvbnRleHQgaXMgc2V0IHRvIHRydWUgYW5kIG5vIGNvbnRleHQgaXMgcGFzc2VkIGEgZGVmYXVsdCBjb250ZXh0IHdpbGwgYmUgYWRkZWQgYXV0b21hdGljYWxseS5cbiAqXG4gKiBAdGVtcGxhdGUgVFxuICogQHRlbXBsYXRlIFVcbiAqIEBwYXJhbSBwYXJhbWV0ZXJzIFRoZSBsaXN0IG9mIHBhcmFtZXRlciB0aGF0IHNob3VsZCBtYXRjaCB0aGUgdHlwZSBmb3IgdGhlIGNvbXBwbGV4IHR5cGVcbiAqIEBwYXJhbSB0eXBlIFRoZSBjb21wbGV4IHR5cGUgdG8gdXNlXG4gKiBAcGFyYW0gW2NvbnRleHRFbnRpdHlUeXBlXSBUaGUgY29udGV4dCBlbnRpdHkgdHlwZSB0byBjb25zaWRlclxuICogQHJldHVybnMge0V4cHJlc3Npb248VD59IFRoZSBjb3JyZXNwb25kaW5nIGV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFR5cGVJbmZvcm1hdGlvbjxULCBVIGV4dGVuZHMgRm48VD4+KFxuXHRwYXJhbWV0ZXJzOiBXcmFwcGVkVHVwbGU8UGFyYW1ldGVyczxVPj4sXG5cdHR5cGU6IHN0cmluZyxcblx0Y29udGV4dEVudGl0eVR5cGU/OiBFbnRpdHlUeXBlXG4pOiBFeHByZXNzaW9uPFQ+IHtcblx0Y29uc3QgcGFyYW1ldGVyRXhwcmVzc2lvbnMgPSAocGFyYW1ldGVycyBhcyBhbnlbXSkubWFwKHdyYXBQcmltaXRpdmUpO1xuXHRpZiAoaGFzVW5yZXNvbHZlYWJsZUV4cHJlc3Npb24oLi4ucGFyYW1ldGVyRXhwcmVzc2lvbnMpKSB7XG5cdFx0cmV0dXJuIHVucmVzb2x2ZWFibGVFeHByZXNzaW9uO1xuXHR9XG5cdC8vIElmIHRoZXJlIGlzIG9ubHkgb25lIHBhcmFtZXRlciBhbmQgaXQgaXMgYSBjb25zdGFudCBhbmQgd2UgZG9uJ3QgZXhwZWN0IHRoZSBjb250ZXh0IHRoZW4gcmV0dXJuIHRoZSBjb25zdGFudFxuXHRpZiAocGFyYW1ldGVyRXhwcmVzc2lvbnMubGVuZ3RoID09PSAxICYmIGlzQ29uc3RhbnQocGFyYW1ldGVyRXhwcmVzc2lvbnNbMF0pICYmICFjb250ZXh0RW50aXR5VHlwZSkge1xuXHRcdHJldHVybiBwYXJhbWV0ZXJFeHByZXNzaW9uc1swXTtcblx0fSBlbHNlIGlmICghIWNvbnRleHRFbnRpdHlUeXBlKSB7XG5cdFx0Ly8gT3RoZXJ3aXNlLCBpZiB0aGUgY29udGV4dCBpcyByZXF1aXJlZCBhbmQgbm8gY29udGV4dCBpcyBwcm92aWRlZCBtYWtlIHN1cmUgdG8gYWRkIHRoZSBkZWZhdWx0IGJpbmRpbmdcblx0XHRpZiAoIXBhcmFtZXRlckV4cHJlc3Npb25zLnNvbWUoaGFzUmVmZXJlbmNlVG9EZWZhdWx0Q29udGV4dCkpIHtcblx0XHRcdGNvbnRleHRFbnRpdHlUeXBlLmtleXMuZm9yRWFjaChrZXkgPT4gcGFyYW1ldGVyRXhwcmVzc2lvbnMucHVzaChiaW5kaW5nRXhwcmVzc2lvbihrZXkubmFtZSwgXCJcIikpKTtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBvRm9ybWF0T3B0aW9ucyA9XG5cdFx0KHBhcmFtZXRlcnNbMF0gYXMgYW55KT8udHlwZT8uaW5kZXhPZihcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludFwiKSA9PT0gMCA/IHsgcGFyc2VBc1N0cmluZzogZmFsc2UsIGVtcHR5U3RyaW5nOiBcIlwiIH0gOiB7fTtcblx0cmV0dXJuIHtcblx0XHRfdHlwZTogXCJDb21wbGV4VHlwZVwiLFxuXHRcdHR5cGU6IHR5cGUsXG5cdFx0Zm9ybWF0T3B0aW9uczogb0Zvcm1hdE9wdGlvbnMsXG5cdFx0cGFyYW1ldGVyczoge30sXG5cdFx0YmluZGluZ1BhcmFtZXRlcnM6IHBhcmFtZXRlckV4cHJlc3Npb25zXG5cdH07XG59XG4vKipcbiAqIEZ1bmN0aW9uIGNhbGwsIG9wdGlvbmFsbHkgd2l0aCBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIGZuIEZ1bmN0aW9uIG5hbWUgb3IgcmVmZXJlbmNlIHRvIGZ1bmN0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVycyBBcmd1bWVudHNcbiAqIEBwYXJhbSBvbiBPYmplY3QgdG8gY2FsbCB0aGUgZnVuY3Rpb24gb25cbiAqIEByZXR1cm5zIHtGdW5jdGlvbkV4cHJlc3Npb248VD59IEV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBmdW5jdGlvbiBjYWxsIChub3QgdGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb24gY2FsbCEpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmbjxULCBVIGV4dGVuZHMgRnVuY3Rpb25Pck5hbWU8VD4+KFxuXHRmbjogVSxcblx0cGFyYW1ldGVyczogV3JhcHBlZFR1cGxlPEZ1bmN0aW9uUGFyYW1ldGVyczxULCBVPj4sXG5cdG9uPzogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPG9iamVjdD5cbik6IEZ1bmN0aW9uRXhwcmVzc2lvbjxUPiB7XG5cdGNvbnN0IGZ1bmN0aW9uTmFtZSA9IHR5cGVvZiBmbiA9PT0gXCJzdHJpbmdcIiA/IGZuIDogKGZuIGFzIEZuPFQ+KS5fX2Z1bmN0aW9uTmFtZTtcblx0cmV0dXJuIHtcblx0XHRfdHlwZTogXCJGdW5jdGlvblwiLFxuXHRcdG9iajogb24gIT09IHVuZGVmaW5lZCA/IHdyYXBQcmltaXRpdmUob24pIDogdW5kZWZpbmVkLFxuXHRcdGZuOiBmdW5jdGlvbk5hbWUsXG5cdFx0cGFyYW1ldGVyczogKHBhcmFtZXRlcnMgYXMgYW55W10pLm1hcCh3cmFwUHJpbWl0aXZlKVxuXHR9O1xufVxuXG4vKipcbiAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiBhIGJpbmRpbmcgdmFsdWUgaXMgbnVsbCwgdW5kZWZpbmVkIG9yIGVtcHR5LlxuICpcbiAqIEBwYXJhbSBleHByZXNzaW9uXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gZXhwcmVzc2lvbiBldmFsdWF0aW5nIHRoZSBmYWN0IHRoYXQgdGhlIGN1cnJlbnQgZWxlbWVudCBpcyBlbXB0eVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eShleHByZXNzaW9uOiBFeHByZXNzaW9uPHN0cmluZz4pOiBFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0aWYgKGV4cHJlc3Npb24uX3R5cGUgPT09IFwiQ29uY2F0XCIpIHtcblx0XHRyZXR1cm4gb3IoLi4uZXhwcmVzc2lvbi5leHByZXNzaW9ucy5tYXAoaXNFbXB0eSkpO1xuXHR9XG5cdHJldHVybiBvcihlcXVhbChleHByZXNzaW9uLCBcIlwiKSwgZXF1YWwoZXhwcmVzc2lvbiwgdW5kZWZpbmVkKSwgZXF1YWwoZXhwcmVzc2lvbiwgbnVsbCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0KC4uLmluRXhwcmVzc2lvbnM6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxzdHJpbmc+W10pOiBFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRjb25zdCBleHByZXNzaW9ucyA9IGluRXhwcmVzc2lvbnMubWFwKHdyYXBQcmltaXRpdmUpO1xuXHRpZiAoaGFzVW5yZXNvbHZlYWJsZUV4cHJlc3Npb24oLi4uZXhwcmVzc2lvbnMpKSB7XG5cdFx0cmV0dXJuIHVucmVzb2x2ZWFibGVFeHByZXNzaW9uO1xuXHR9XG5cdGlmIChleHByZXNzaW9ucy5ldmVyeShpc0NvbnN0YW50KSkge1xuXHRcdHJldHVybiBjb25zdGFudChcblx0XHRcdGV4cHJlc3Npb25zLnJlZHVjZSgoY29uY2F0ZW5hdGVkOiBzdHJpbmcsIHZhbHVlKSA9PiB7XG5cdFx0XHRcdHJldHVybiBjb25jYXRlbmF0ZWQgKyAodmFsdWUgYXMgQ29uc3RhbnRFeHByZXNzaW9uPGFueT4pLnZhbHVlLnRvU3RyaW5nKCk7XG5cdFx0XHR9LCBcIlwiKVxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHRfdHlwZTogXCJDb25jYXRcIixcblx0XHRleHByZXNzaW9uczogZXhwcmVzc2lvbnNcblx0fTtcbn1cblxuZXhwb3J0IHR5cGUgVHJhbnNmb3JtRnVuY3Rpb24gPSA8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGUgfCB1bmtub3duPihleHByZXNzaW9uUGFydDogYW55KSA9PiBFeHByZXNzaW9uPFQ+O1xuZXhwb3J0IHR5cGUgRXhwcmVzc2lvblR5cGUgPSBQaWNrPEV4cHJlc3Npb248YW55PiwgXCJfdHlwZVwiPltcIl90eXBlXCJdO1xuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybVJlY3Vyc2l2ZWx5PFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlIHwgdW5rbm93bj4oXG5cdGluRXhwcmVzc2lvbjogRXhwcmVzc2lvbjxUPixcblx0ZXhwcmVzc2lvblR5cGU6IEV4cHJlc3Npb25UeXBlLFxuXHR0cmFuc2Zvcm1GdW5jdGlvbjogVHJhbnNmb3JtRnVuY3Rpb24sXG5cdGluY2x1ZGVBbGxFeHByZXNzaW9uOiBib29sZWFuID0gZmFsc2Vcbik6IEV4cHJlc3Npb248VD4ge1xuXHRsZXQgZXhwcmVzc2lvbiA9IGluRXhwcmVzc2lvbjtcblx0c3dpdGNoIChleHByZXNzaW9uLl90eXBlKSB7XG5cdFx0Y2FzZSBcIkZ1bmN0aW9uXCI6XG5cdFx0XHRleHByZXNzaW9uLnBhcmFtZXRlcnMgPSBleHByZXNzaW9uLnBhcmFtZXRlcnMubWFwKGV4cHJlc3Npb24gPT5cblx0XHRcdFx0dHJhbnNmb3JtUmVjdXJzaXZlbHkoZXhwcmVzc2lvbiwgZXhwcmVzc2lvblR5cGUsIHRyYW5zZm9ybUZ1bmN0aW9uLCBpbmNsdWRlQWxsRXhwcmVzc2lvbilcblx0XHRcdCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiQ29uY2F0XCI6XG5cdFx0XHRleHByZXNzaW9uLmV4cHJlc3Npb25zID0gZXhwcmVzc2lvbi5leHByZXNzaW9ucy5tYXAoZXhwcmVzc2lvbiA9PlxuXHRcdFx0XHR0cmFuc2Zvcm1SZWN1cnNpdmVseShleHByZXNzaW9uLCBleHByZXNzaW9uVHlwZSwgdHJhbnNmb3JtRnVuY3Rpb24sIGluY2x1ZGVBbGxFeHByZXNzaW9uKVxuXHRcdFx0KTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJDb21wbGV4VHlwZVwiOlxuXHRcdFx0ZXhwcmVzc2lvbi5iaW5kaW5nUGFyYW1ldGVycyA9IGV4cHJlc3Npb24uYmluZGluZ1BhcmFtZXRlcnMubWFwKGV4cHJlc3Npb24gPT5cblx0XHRcdFx0dHJhbnNmb3JtUmVjdXJzaXZlbHkoZXhwcmVzc2lvbiwgZXhwcmVzc2lvblR5cGUsIHRyYW5zZm9ybUZ1bmN0aW9uLCBpbmNsdWRlQWxsRXhwcmVzc2lvbilcblx0XHRcdCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiRm9ybWF0dGVyXCI6XG5cdFx0XHRleHByZXNzaW9uLnBhcmFtZXRlcnMgPSBleHByZXNzaW9uLnBhcmFtZXRlcnMubWFwKGV4cHJlc3Npb24gPT5cblx0XHRcdFx0dHJhbnNmb3JtUmVjdXJzaXZlbHkoZXhwcmVzc2lvbiwgZXhwcmVzc2lvblR5cGUsIHRyYW5zZm9ybUZ1bmN0aW9uLCBpbmNsdWRlQWxsRXhwcmVzc2lvbilcblx0XHRcdCk7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgXCJJZkVsc2VcIjpcblx0XHRcdGNvbnN0IG9uVHJ1ZSA9IHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KGV4cHJlc3Npb24ub25UcnVlLCBleHByZXNzaW9uVHlwZSwgdHJhbnNmb3JtRnVuY3Rpb24sIGluY2x1ZGVBbGxFeHByZXNzaW9uKTtcblx0XHRcdGNvbnN0IG9uRmFsc2UgPSB0cmFuc2Zvcm1SZWN1cnNpdmVseShleHByZXNzaW9uLm9uRmFsc2UsIGV4cHJlc3Npb25UeXBlLCB0cmFuc2Zvcm1GdW5jdGlvbiwgaW5jbHVkZUFsbEV4cHJlc3Npb24pO1xuXHRcdFx0bGV0IGNvbmRpdGlvbiA9IGV4cHJlc3Npb24uY29uZGl0aW9uO1xuXHRcdFx0aWYgKGluY2x1ZGVBbGxFeHByZXNzaW9uKSB7XG5cdFx0XHRcdGNvbmRpdGlvbiA9IHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KGV4cHJlc3Npb24uY29uZGl0aW9uLCBleHByZXNzaW9uVHlwZSwgdHJhbnNmb3JtRnVuY3Rpb24sIGluY2x1ZGVBbGxFeHByZXNzaW9uKTtcblx0XHRcdH1cblx0XHRcdGV4cHJlc3Npb24gPSBpZkVsc2UoY29uZGl0aW9uLCBvblRydWUsIG9uRmFsc2UpIGFzIEV4cHJlc3Npb248VD47XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiTm90XCI6XG5cdFx0XHRpZiAoaW5jbHVkZUFsbEV4cHJlc3Npb24pIHtcblx0XHRcdFx0Y29uc3Qgb3BlcmFuZCA9IHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KGV4cHJlc3Npb24ub3BlcmFuZCwgZXhwcmVzc2lvblR5cGUsIHRyYW5zZm9ybUZ1bmN0aW9uLCBpbmNsdWRlQWxsRXhwcmVzc2lvbik7XG5cdFx0XHRcdGV4cHJlc3Npb24gPSBub3Qob3BlcmFuZCkgYXMgRXhwcmVzc2lvbjxUPjtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJUcnV0aHlcIjpcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJTZXRcIjpcblx0XHRcdGlmIChpbmNsdWRlQWxsRXhwcmVzc2lvbikge1xuXHRcdFx0XHRleHByZXNzaW9uLm9wZXJhbmRzID0gZXhwcmVzc2lvbi5vcGVyYW5kcy5tYXAoZXhwcmVzc2lvbiA9PlxuXHRcdFx0XHRcdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KGV4cHJlc3Npb24sIGV4cHJlc3Npb25UeXBlLCB0cmFuc2Zvcm1GdW5jdGlvbiwgaW5jbHVkZUFsbEV4cHJlc3Npb24pXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiQ29tcGFyaXNvblwiOlxuXHRcdFx0aWYgKGluY2x1ZGVBbGxFeHByZXNzaW9uKSB7XG5cdFx0XHRcdGNvbnN0IG9wZXJhbmQxID0gdHJhbnNmb3JtUmVjdXJzaXZlbHkoZXhwcmVzc2lvbi5vcGVyYW5kMSwgZXhwcmVzc2lvblR5cGUsIHRyYW5zZm9ybUZ1bmN0aW9uLCBpbmNsdWRlQWxsRXhwcmVzc2lvbik7XG5cdFx0XHRcdGNvbnN0IG9wZXJhbmQyID0gdHJhbnNmb3JtUmVjdXJzaXZlbHkoZXhwcmVzc2lvbi5vcGVyYW5kMiwgZXhwcmVzc2lvblR5cGUsIHRyYW5zZm9ybUZ1bmN0aW9uLCBpbmNsdWRlQWxsRXhwcmVzc2lvbik7XG5cdFx0XHRcdGV4cHJlc3Npb24gPSBjb21wYXJpc29uKGV4cHJlc3Npb24ub3BlcmF0b3IsIG9wZXJhbmQxLCBvcGVyYW5kMikgYXMgRXhwcmVzc2lvbjxUPjtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJEZWZhdWx0QmluZGluZ1wiOlxuXHRcdGNhc2UgXCJSZWZcIjpcblx0XHRjYXNlIFwiQmluZGluZ1wiOlxuXHRcdGNhc2UgXCJDb25zdGFudFwiOlxuXHRcdFx0Ly8gRG8gbm90aGluZ1xuXHRcdFx0YnJlYWs7XG5cdH1cblx0aWYgKGV4cHJlc3Npb25UeXBlID09PSBleHByZXNzaW9uLl90eXBlKSB7XG5cdFx0ZXhwcmVzc2lvbiA9IHRyYW5zZm9ybUZ1bmN0aW9uKGluRXhwcmVzc2lvbik7XG5cdH1cblx0cmV0dXJuIGV4cHJlc3Npb247XG59XG5cbmV4cG9ydCB0eXBlIEJpbmRpbmdFeHByZXNzaW9uPFQ+ID0gVCB8IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDb21waWxlIGFuIGV4cHJlc3Npb24gaW50byBhbiBleHByZXNzaW9uIGJpbmRpbmcuXG4gKlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgZXhwcmVzc2lvbiB0byBjb21waWxlXG4gKiBAcGFyYW0gZW1iZWRkZWRJbkJpbmRpbmcgV2hldGhlciB0aGUgZXhwcmVzc2lvbiB0byBjb21waWxlIGlzIGVtYmVkZGVkIGludG8gYW5vdGhlciBleHByZXNzaW9uXG4gKiBAcGFyYW0ga2VlcFRhcmdldFR5cGUgS2VlcCB0aGUgdGFyZ2V0IHR5cGUgb2YgdGhlIGVtYmVkZGVkIGJpbmRpbmdzIGluc3RlYWQgb2YgY2FzdGluZyB0aGVtIHRvIGFueVxuICogQHJldHVybnMge0JpbmRpbmdFeHByZXNzaW9uPFQ+fSBUaGUgY29ycmVzcG9uZGluZyBleHByZXNzaW9uIGJpbmRpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBpbGVCaW5kaW5nPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0ZXhwcmVzc2lvbjogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRlbWJlZGRlZEluQmluZGluZzogYm9vbGVhbiA9IGZhbHNlLFxuXHRrZWVwVGFyZ2V0VHlwZTogYm9vbGVhbiA9IGZhbHNlXG4pOiBCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0Y29uc3QgZXhwciA9IHdyYXBQcmltaXRpdmUoZXhwcmVzc2lvbik7XG5cdGNvbnN0IGVtYmVkZGVkU2VwYXJhdG9yID0ga2VlcFRhcmdldFR5cGUgPyBcIiRcIiA6IFwiJVwiO1xuXHRsZXQgb3V0UHJvcGVydHkgPSBcIlwiO1xuXHRzd2l0Y2ggKGV4cHIuX3R5cGUpIHtcblx0XHRjYXNlIFwiVW5yZXNvbHZlYWJsZVwiOlxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRjYXNlIFwiQ29uc3RhbnRcIjpcblx0XHRcdGlmIChleHByLnZhbHVlID09PSBudWxsKSB7XG5cdFx0XHRcdHJldHVybiBcIm51bGxcIjtcblx0XHRcdH1cblx0XHRcdGlmIChleHByLnZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuIFwidW5kZWZpbmVkXCI7XG5cdFx0XHR9XG5cdFx0XHRpZiAodHlwZW9mIGV4cHIudmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoZXhwci52YWx1ZSkpIHtcblx0XHRcdFx0XHRjb25zdCBlbnRyaWVzID0gZXhwci52YWx1ZS5tYXAoZXhwcmVzc2lvbiA9PiBjb21waWxlQmluZGluZyhleHByZXNzaW9uLCB0cnVlKSk7XG5cdFx0XHRcdFx0cmV0dXJuIGBbJHtlbnRyaWVzLmpvaW4oXCIsIFwiKX1dYDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBPYmplY3RzXG5cdFx0XHRcdFx0Y29uc3QgbyA9IGV4cHIudmFsdWUgYXMgUGxhaW5FeHByZXNzaW9uT2JqZWN0O1xuXHRcdFx0XHRcdGNvbnN0IHByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhvKS5tYXAoa2V5ID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHZhbHVlID0gb1trZXldO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGAke2tleX06ICR7Y29tcGlsZUJpbmRpbmcodmFsdWUsIHRydWUpfWA7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0cmV0dXJuIGB7JHtwcm9wZXJ0aWVzLmpvaW4oXCIsIFwiKX19YDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZW1iZWRkZWRJbkJpbmRpbmcpIHtcblx0XHRcdFx0c3dpdGNoICh0eXBlb2YgZXhwci52YWx1ZSkge1xuXHRcdFx0XHRcdGNhc2UgXCJudW1iZXJcIjpcblx0XHRcdFx0XHRjYXNlIFwiYmlnaW50XCI6XG5cdFx0XHRcdFx0Y2FzZSBcImJvb2xlYW5cIjpcblx0XHRcdFx0XHRcdHJldHVybiBleHByLnZhbHVlLnRvU3RyaW5nKCk7XG5cdFx0XHRcdFx0Y2FzZSBcInN0cmluZ1wiOlxuXHRcdFx0XHRcdFx0cmV0dXJuIGAnJHtlc2NhcGVYbWxBdHRyaWJ1dGUoZXhwci52YWx1ZS50b1N0cmluZygpKX0nYDtcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBleHByLnZhbHVlLnRvU3RyaW5nKCk7XG5cdFx0XHR9XG5cblx0XHRjYXNlIFwiUmVmXCI6XG5cdFx0XHRyZXR1cm4gZXhwci5yZWYgfHwgXCJudWxsXCI7XG5cblx0XHRjYXNlIFwiRnVuY3Rpb25cIjpcblx0XHRcdGNvbnN0IGFyZ3VtZW50U3RyaW5nID0gYCR7ZXhwci5wYXJhbWV0ZXJzLm1hcChhcmcgPT4gY29tcGlsZUJpbmRpbmcoYXJnLCB0cnVlKSkuam9pbihcIiwgXCIpfWA7XG5cdFx0XHRyZXR1cm4gZXhwci5vYmogPT09IHVuZGVmaW5lZFxuXHRcdFx0XHQ/IGAke2V4cHIuZm59KCR7YXJndW1lbnRTdHJpbmd9KWBcblx0XHRcdFx0OiBgJHtjb21waWxlQmluZGluZyhleHByLm9iaiwgdHJ1ZSl9LiR7ZXhwci5mbn0oJHthcmd1bWVudFN0cmluZ30pYDtcblx0XHRjYXNlIFwiRW1iZWRkZWRFeHByZXNzaW9uQmluZGluZ1wiOlxuXHRcdFx0aWYgKGVtYmVkZGVkSW5CaW5kaW5nKSB7XG5cdFx0XHRcdHJldHVybiBgKCR7ZXhwci52YWx1ZS5zdWJzdHIoMiwgZXhwci52YWx1ZS5sZW5ndGggLSAzKX0pYDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBgJHtleHByLnZhbHVlfWA7XG5cdFx0XHR9XG5cdFx0Y2FzZSBcIkVtYmVkZGVkQmluZGluZ1wiOlxuXHRcdFx0aWYgKGVtYmVkZGVkSW5CaW5kaW5nKSB7XG5cdFx0XHRcdHJldHVybiBgJHtlbWJlZGRlZFNlcGFyYXRvcn0ke2V4cHIudmFsdWV9YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBgJHtleHByLnZhbHVlfWA7XG5cdFx0XHR9XG5cdFx0Y2FzZSBcIkRlZmF1bHRCaW5kaW5nXCI6XG5cdFx0Y2FzZSBcIkJpbmRpbmdcIjpcblx0XHRcdGlmIChleHByLnR5cGUgfHwgZXhwci5wYXJhbWV0ZXJzIHx8IGV4cHIudGFyZ2V0VHlwZSkge1xuXHRcdFx0XHRsZXQgb3V0QmluZGluZyA9IFwiXCI7XG5cdFx0XHRcdGlmIChlbWJlZGRlZEluQmluZGluZykge1xuXHRcdFx0XHRcdG91dEJpbmRpbmcgKz0gYCR7ZW1iZWRkZWRTZXBhcmF0b3J9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRvdXRCaW5kaW5nICs9IGB7cGF0aDonJHtleHByLm1vZGVsTmFtZSA/IGAke2V4cHIubW9kZWxOYW1lfT5gIDogXCJcIn0ke2V4cHIucGF0aH0nYDtcblx0XHRcdFx0aWYgKGV4cHIudHlwZSkge1xuXHRcdFx0XHRcdG91dEJpbmRpbmcgKz0gYCwgdHlwZTogJyR7ZXhwci50eXBlfSdgO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChleHByLmNvbnN0cmFpbnRzICYmIE9iamVjdC5rZXlzKGV4cHIuY29uc3RyYWludHMpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRvdXRCaW5kaW5nICs9IGAsIGNvbnN0cmFpbnRzOiAke2NvbXBpbGVCaW5kaW5nKGV4cHIuY29uc3RyYWludHMpfWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGV4cHIuZm9ybWF0T3B0aW9ucykge1xuXHRcdFx0XHRcdG91dEJpbmRpbmcgKz0gYCwgZm9ybWF0T3B0aW9uczogJHtjb21waWxlQmluZGluZyhleHByLmZvcm1hdE9wdGlvbnMpfWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGV4cHIucGFyYW1ldGVycyAmJiBPYmplY3Qua2V5cyhleHByLnBhcmFtZXRlcnMpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRvdXRCaW5kaW5nICs9IGAsIHBhcmFtZXRlcnM6ICR7Y29tcGlsZUJpbmRpbmcoZXhwci5wYXJhbWV0ZXJzKX1gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChleHByLnRhcmdldFR5cGUpIHtcblx0XHRcdFx0XHRvdXRCaW5kaW5nICs9IGAsIHRhcmdldFR5cGU6ICcke2V4cHIudGFyZ2V0VHlwZX0nYDtcblx0XHRcdFx0fVxuXHRcdFx0XHRvdXRCaW5kaW5nICs9IFwifVwiO1xuXHRcdFx0XHRyZXR1cm4gb3V0QmluZGluZztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmIChlbWJlZGRlZEluQmluZGluZykge1xuXHRcdFx0XHRcdHJldHVybiBgJHtlbWJlZGRlZFNlcGFyYXRvcn17JHtleHByLm1vZGVsTmFtZSA/IGAke2V4cHIubW9kZWxOYW1lfT5gIDogXCJcIn0ke2V4cHIucGF0aH19YDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4gYHske2V4cHIubW9kZWxOYW1lID8gYCR7ZXhwci5tb2RlbE5hbWV9PmAgOiBcIlwifSR7ZXhwci5wYXRofX1gO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRjYXNlIFwiQ29tcGFyaXNvblwiOlxuXHRcdFx0Y29uc3QgY29tcGFyaXNvblBhcnQgPSBgJHtjb21waWxlQmluZGluZyhleHByLm9wZXJhbmQxLCB0cnVlKX0gJHtleHByLm9wZXJhdG9yfSAke2NvbXBpbGVCaW5kaW5nKGV4cHIub3BlcmFuZDIsIHRydWUpfWA7XG5cdFx0XHRpZiAoZW1iZWRkZWRJbkJpbmRpbmcpIHtcblx0XHRcdFx0cmV0dXJuIGNvbXBhcmlzb25QYXJ0O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGB7PSAke2NvbXBhcmlzb25QYXJ0fX1gO1xuXG5cdFx0Y2FzZSBcIklmRWxzZVwiOlxuXHRcdFx0aWYgKGVtYmVkZGVkSW5CaW5kaW5nKSB7XG5cdFx0XHRcdHJldHVybiBgKCR7Y29tcGlsZUJpbmRpbmcoZXhwci5jb25kaXRpb24sIHRydWUpfSA/ICR7Y29tcGlsZUJpbmRpbmcoZXhwci5vblRydWUsIHRydWUpfSA6ICR7Y29tcGlsZUJpbmRpbmcoXG5cdFx0XHRcdFx0ZXhwci5vbkZhbHNlLFxuXHRcdFx0XHRcdHRydWVcblx0XHRcdFx0KX0pYDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBgez0gJHtjb21waWxlQmluZGluZyhleHByLmNvbmRpdGlvbiwgdHJ1ZSl9ID8gJHtjb21waWxlQmluZGluZyhleHByLm9uVHJ1ZSwgdHJ1ZSl9IDogJHtjb21waWxlQmluZGluZyhcblx0XHRcdFx0XHRleHByLm9uRmFsc2UsXG5cdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHQpfX1gO1xuXHRcdFx0fVxuXG5cdFx0Y2FzZSBcIlNldFwiOlxuXHRcdFx0aWYgKGVtYmVkZGVkSW5CaW5kaW5nKSB7XG5cdFx0XHRcdHJldHVybiBgKCR7ZXhwci5vcGVyYW5kcy5tYXAoZXhwcmVzc2lvbiA9PiBjb21waWxlQmluZGluZyhleHByZXNzaW9uLCB0cnVlKSkuam9pbihgICR7ZXhwci5vcGVyYXRvcn0gYCl9KWA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gYHs9ICgke2V4cHIub3BlcmFuZHMubWFwKGV4cHJlc3Npb24gPT4gY29tcGlsZUJpbmRpbmcoZXhwcmVzc2lvbiwgdHJ1ZSkpLmpvaW4oYCAke2V4cHIub3BlcmF0b3J9IGApfSl9YDtcblx0XHRcdH1cblxuXHRcdGNhc2UgXCJDb25jYXRcIjpcblx0XHRcdGlmIChlbWJlZGRlZEluQmluZGluZykge1xuXHRcdFx0XHRyZXR1cm4gYCR7ZXhwci5leHByZXNzaW9ucy5tYXAoZXhwcmVzc2lvbiA9PiBjb21waWxlQmluZGluZyhleHByZXNzaW9uLCB0cnVlLCB0cnVlKSkuam9pbihgICsgYCl9YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBgez0gJHtleHByLmV4cHJlc3Npb25zLm1hcChleHByZXNzaW9uID0+IGNvbXBpbGVCaW5kaW5nKGV4cHJlc3Npb24sIHRydWUsIHRydWUpKS5qb2luKGAgKyBgKX0gfWA7XG5cdFx0XHR9XG5cblx0XHRjYXNlIFwiTm90XCI6XG5cdFx0XHRpZiAoZW1iZWRkZWRJbkJpbmRpbmcpIHtcblx0XHRcdFx0cmV0dXJuIGAhJHtjb21waWxlQmluZGluZyhleHByLm9wZXJhbmQsIHRydWUpfWA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gYHs9ICEke2NvbXBpbGVCaW5kaW5nKGV4cHIub3BlcmFuZCwgdHJ1ZSl9fWA7XG5cdFx0XHR9XG5cblx0XHRjYXNlIFwiVHJ1dGh5XCI6XG5cdFx0XHRpZiAoZW1iZWRkZWRJbkJpbmRpbmcpIHtcblx0XHRcdFx0cmV0dXJuIGAhISR7Y29tcGlsZUJpbmRpbmcoZXhwci5vcGVyYW5kLCB0cnVlKX1gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGB7PSAhISR7Y29tcGlsZUJpbmRpbmcoZXhwci5vcGVyYW5kLCB0cnVlKX19YDtcblx0XHRcdH1cblxuXHRcdGNhc2UgXCJGb3JtYXR0ZXJcIjpcblx0XHRcdGlmIChleHByLnBhcmFtZXRlcnMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdG91dFByb3BlcnR5ICs9IGB7JHtjb21waWxlUGF0aFBhcmFtZXRlcihleHByLnBhcmFtZXRlcnNbMF0sIHRydWUpfSwgZm9ybWF0dGVyOiAnJHtleHByLmZufSd9YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG91dFByb3BlcnR5ICs9IGB7cGFydHM6WyR7ZXhwci5wYXJhbWV0ZXJzLm1hcCgocGFyYW06IGFueSkgPT4gY29tcGlsZVBhdGhQYXJhbWV0ZXIocGFyYW0pKS5qb2luKFwiLFwiKX1dLCBmb3JtYXR0ZXI6ICcke1xuXHRcdFx0XHRcdGV4cHIuZm5cblx0XHRcdFx0fSd9YDtcblx0XHRcdH1cblx0XHRcdGlmIChlbWJlZGRlZEluQmluZGluZykge1xuXHRcdFx0XHRvdXRQcm9wZXJ0eSA9IGBcXCQke291dFByb3BlcnR5fWA7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gb3V0UHJvcGVydHk7XG5cdFx0Y2FzZSBcIkNvbXBsZXhUeXBlXCI6XG5cdFx0XHRpZiAoZXhwci5iaW5kaW5nUGFyYW1ldGVycy5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0b3V0UHJvcGVydHkgKz0gYHske2NvbXBpbGVQYXRoUGFyYW1ldGVyKGV4cHIuYmluZGluZ1BhcmFtZXRlcnNbMF0sIHRydWUpfSwgdHlwZTogJyR7ZXhwci50eXBlfSd9YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGxldCBvdXRwdXRFbmQ7XG5cdFx0XHRcdC8vIHRoaXMgY29kZSBpcyBiYXNlZCBvbiBzYXAudWkubW9kZWwub2RhdGEudjQuX0Fubm90YXRpb25IZWxwZXJFeHByZXNzaW9uLmZldGNoQ3VycmVuY3lPclVuaXRcblx0XHRcdFx0c3dpdGNoIChleHByLnR5cGUpIHtcblx0XHRcdFx0XHRjYXNlIFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuVW5pdFwiOlxuXHRcdFx0XHRcdFx0b3V0cHV0RW5kID0gYCx7bW9kZTonT25lVGltZScscGF0aDonLyMjQEByZXF1ZXN0VW5pdHNPZk1lYXN1cmUnLHRhcmdldFR5cGU6J2FueSd9XSx0eXBlOidzYXAudWkubW9kZWwub2RhdGEudHlwZS5Vbml0J2A7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuQ3VycmVuY3lcIjpcblx0XHRcdFx0XHRcdG91dHB1dEVuZCA9IGAse21vZGU6J09uZVRpbWUnLHBhdGg6Jy8jI0BAcmVxdWVzdEN1cnJlbmN5Q29kZXMnLHRhcmdldFR5cGU6J2FueSd9XSx0eXBlOidzYXAudWkubW9kZWwub2RhdGEudHlwZS5DdXJyZW5jeSdgO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdG91dHB1dEVuZCA9IGBdLCB0eXBlOiAnJHtleHByLnR5cGV9J2A7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGV4cHIuZm9ybWF0T3B0aW9ucyAmJiBPYmplY3Qua2V5cyhleHByLmZvcm1hdE9wdGlvbnMpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRvdXRwdXRFbmQgKz0gYCwgZm9ybWF0T3B0aW9uczogJHtjb21waWxlQmluZGluZyhleHByLmZvcm1hdE9wdGlvbnMpfWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGV4cHIucGFyYW1ldGVycyAmJiBPYmplY3Qua2V5cyhleHByLnBhcmFtZXRlcnMpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRvdXRwdXRFbmQgKz0gYCwgcGFyYW1ldGVyczogJHtjb21waWxlQmluZGluZyhleHByLnBhcmFtZXRlcnMpfWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0b3V0cHV0RW5kICs9IFwifVwiO1xuXHRcdFx0XHRvdXRQcm9wZXJ0eSArPSBge21vZGU6J1R3b1dheScsIHBhcnRzOlske2V4cHIuYmluZGluZ1BhcmFtZXRlcnNcblx0XHRcdFx0XHQubWFwKChwYXJhbTogYW55KSA9PiBjb21waWxlUGF0aFBhcmFtZXRlcihwYXJhbSkpXG5cdFx0XHRcdFx0LmpvaW4oXCIsXCIpfSR7b3V0cHV0RW5kfWA7XG5cdFx0XHR9XG5cdFx0XHRpZiAoZW1iZWRkZWRJbkJpbmRpbmcpIHtcblx0XHRcdFx0b3V0UHJvcGVydHkgPSBgXFwkJHtvdXRQcm9wZXJ0eX1gO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG91dFByb3BlcnR5O1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0fVxufVxuXG4vKipcbiAqIENvbXBpbGUgdGhlIHBhdGggcGFyYW1ldGVyIG9mIGEgZm9ybWF0dGVyIGNhbGwuXG4gKlxuICogQHBhcmFtIGV4cHJlc3Npb24gVGhlIGJpbmRpbmcgcGFydCB0byBldmFsdWF0ZVxuICogQHBhcmFtIHNpbmdsZVBhdGggV2hldGhlciB0aGVyZSBpcyBvbmUgb3IgbXVsdGlwbGUgcGF0aCB0byBjb25zaWRlclxuICogQHJldHVybnMge3N0cmluZ30gVGhlIHN0cmluZyBzbmlwcGV0IHRvIGluY2x1ZGUgaW4gdGhlIG92ZXJhbGwgYmluZGluZyBkZWZpbml0aW9uXG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGVQYXRoUGFyYW1ldGVyKGV4cHJlc3Npb246IEV4cHJlc3Npb248YW55Piwgc2luZ2xlUGF0aDogYm9vbGVhbiA9IGZhbHNlKTogc3RyaW5nIHtcblx0bGV0IG91dFZhbHVlID0gXCJcIjtcblx0c3dpdGNoIChleHByZXNzaW9uLl90eXBlKSB7XG5cdFx0Y2FzZSBcIkNvbnN0YW50XCI6XG5cdFx0XHRzd2l0Y2ggKHR5cGVvZiBleHByZXNzaW9uLnZhbHVlKSB7XG5cdFx0XHRcdGNhc2UgXCJudW1iZXJcIjpcblx0XHRcdFx0Y2FzZSBcImJpZ2ludFwiOlxuXHRcdFx0XHRcdG91dFZhbHVlID0gYHZhbHVlOiAke2V4cHJlc3Npb24udmFsdWUudG9TdHJpbmcoKX1gO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwic3RyaW5nXCI6XG5cdFx0XHRcdFx0b3V0VmFsdWUgPSBgdmFsdWU6ICcke2VzY2FwZVhtbEF0dHJpYnV0ZShleHByZXNzaW9uLnZhbHVlLnRvU3RyaW5nKCkpfSdgO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiYm9vbGVhblwiOlxuXHRcdFx0XHRcdG91dFZhbHVlID0gYHZhbHVlOiAnJHtleHByZXNzaW9uLnZhbHVlLnRvU3RyaW5nKCl9J2A7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0b3V0VmFsdWUgPSBcInZhbHVlOiAnJ1wiO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHNpbmdsZVBhdGgpIHtcblx0XHRcdFx0cmV0dXJuIG91dFZhbHVlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGB7JHtvdXRWYWx1ZX19YDtcblxuXHRcdGNhc2UgXCJEZWZhdWx0QmluZGluZ1wiOlxuXHRcdGNhc2UgXCJCaW5kaW5nXCI6XG5cdFx0XHRvdXRWYWx1ZSA9IGBwYXRoOicke2V4cHJlc3Npb24ubW9kZWxOYW1lID8gYCR7ZXhwcmVzc2lvbi5tb2RlbE5hbWV9PmAgOiBcIlwifSR7ZXhwcmVzc2lvbi5wYXRofSdgO1xuXG5cdFx0XHRpZiAoZXhwcmVzc2lvbi50eXBlKSB7XG5cdFx0XHRcdG91dFZhbHVlICs9IGAsIHR5cGUgOiAnJHtleHByZXNzaW9uLnR5cGV9J2A7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvdXRWYWx1ZSArPSBgLCB0YXJnZXRUeXBlIDogJ2FueSdgO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGV4cHJlc3Npb24uY29uc3RyYWludHMgJiYgT2JqZWN0LmtleXMoZXhwcmVzc2lvbi5jb25zdHJhaW50cykubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRvdXRWYWx1ZSArPSBgLCBjb25zdHJhaW50czogJHtjb21waWxlQmluZGluZyhleHByZXNzaW9uLmNvbnN0cmFpbnRzKX1gO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucyAmJiBPYmplY3Qua2V5cyhleHByZXNzaW9uLmZvcm1hdE9wdGlvbnMpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0b3V0VmFsdWUgKz0gYCwgZm9ybWF0T3B0aW9uczogJHtjb21waWxlQmluZGluZyhleHByZXNzaW9uLmZvcm1hdE9wdGlvbnMpfWA7XG5cdFx0XHR9XG5cdFx0XHRpZiAoZXhwcmVzc2lvbi5wYXJhbWV0ZXJzICYmIE9iamVjdC5rZXlzKGV4cHJlc3Npb24ucGFyYW1ldGVycykubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRvdXRWYWx1ZSArPSBgLCBwYXJhbWV0ZXJzOiAke2NvbXBpbGVCaW5kaW5nKGV4cHJlc3Npb24ucGFyYW1ldGVycyl9YDtcblx0XHRcdH1cblx0XHRcdGlmIChzaW5nbGVQYXRoKSB7XG5cdFx0XHRcdHJldHVybiBvdXRWYWx1ZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBgeyR7b3V0VmFsdWV9fWA7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBcIlwiO1xuXHR9XG59XG4iXX0=