@sapui5/sap.fe.core 1.141.2 → 1.143.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +4 -1
  3. package/src/sap/fe/core/ActionRuntime.js +78 -23
  4. package/src/sap/fe/core/ActionRuntime.ts +91 -35
  5. package/src/sap/fe/core/AppComponent.js +76 -6
  6. package/src/sap/fe/core/AppComponent.ts +91 -8
  7. package/src/sap/fe/core/AppStateHandler.js +7 -7
  8. package/src/sap/fe/core/AppStateHandler.ts +9 -8
  9. package/src/sap/fe/core/BaseController.js +8 -5
  10. package/src/sap/fe/core/BaseController.ts +6 -1
  11. package/src/sap/fe/core/CommonUtils.js +4 -123
  12. package/src/sap/fe/core/CommonUtils.ts +3 -172
  13. package/src/sap/fe/core/ExtensionAPI.js +3 -11
  14. package/src/sap/fe/core/ExtensionAPI.ts +3 -16
  15. package/src/sap/fe/core/PageController.js +64 -43
  16. package/src/sap/fe/core/PageController.ts +62 -47
  17. package/src/sap/fe/core/TemplateComponent.js +12 -1
  18. package/src/sap/fe/core/TemplateComponent.ts +16 -2
  19. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +37 -24
  20. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +47 -31
  21. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +1 -1
  22. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +4 -0
  23. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +4 -1
  24. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +3 -0
  25. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +5 -3
  26. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +5 -2
  27. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +7 -5
  28. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +22 -2
  29. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +82 -44
  30. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +92 -59
  31. package/src/sap/fe/core/controllerextensions/EditFlow.js +74 -48
  32. package/src/sap/fe/core/controllerextensions/EditFlow.ts +87 -50
  33. package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +9 -7
  34. package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +17 -5
  35. package/src/sap/fe/core/controllerextensions/InternalRouting.js +37 -18
  36. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +49 -17
  37. package/src/sap/fe/core/controllerextensions/KPIManagement.js +30 -15
  38. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +32 -14
  39. package/src/sap/fe/core/controllerextensions/MessageHandler.js +9 -10
  40. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +10 -9
  41. package/src/sap/fe/core/controllerextensions/Paginator.js +2 -2
  42. package/src/sap/fe/core/controllerextensions/Paginator.ts +1 -1
  43. package/src/sap/fe/core/controllerextensions/Placeholder.js +10 -2
  44. package/src/sap/fe/core/controllerextensions/Placeholder.ts +5 -1
  45. package/src/sap/fe/core/controllerextensions/Recommendations.js +3 -3
  46. package/src/sap/fe/core/controllerextensions/Recommendations.ts +2 -2
  47. package/src/sap/fe/core/controllerextensions/Routing.js +4 -4
  48. package/src/sap/fe/core/controllerextensions/Routing.ts +3 -6
  49. package/src/sap/fe/core/controllerextensions/Share.js +5 -5
  50. package/src/sap/fe/core/controllerextensions/Share.ts +4 -4
  51. package/src/sap/fe/core/controllerextensions/SideEffects.js +1 -1
  52. package/src/sap/fe/core/controllerextensions/SideEffects.ts +17 -2
  53. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +2 -2
  54. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +1 -1
  55. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +3 -3
  56. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +3 -2
  57. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +49 -21
  58. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +64 -24
  59. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +37 -3
  60. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +41 -8
  61. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +10 -4
  62. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +6 -1
  63. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +6 -7
  64. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +5 -5
  65. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +2 -2
  66. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +1 -1
  67. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.js +2 -1
  68. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.ts +1 -0
  69. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.js +2 -1
  70. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +1 -0
  71. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +21 -15
  72. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +18 -15
  73. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +7 -6
  74. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +8 -5
  75. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +9 -4
  76. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +10 -4
  77. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +3 -2
  78. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.tsx +2 -1
  79. package/src/sap/fe/core/converters/ManifestSettings.js +7 -1
  80. package/src/sap/fe/core/converters/ManifestSettings.ts +37 -0
  81. package/src/sap/fe/core/converters/ManifestWrapper.js +29 -9
  82. package/src/sap/fe/core/converters/ManifestWrapper.ts +29 -11
  83. package/src/sap/fe/core/converters/MetaModelConverter.js +1 -1
  84. package/src/sap/fe/core/converters/MetaModelConverter.ts +1 -1
  85. package/src/sap/fe/core/converters/annotations/DataField.js +46 -19
  86. package/src/sap/fe/core/converters/annotations/DataField.ts +93 -19
  87. package/src/sap/fe/core/converters/common/AnnotationConverter.js +118 -39
  88. package/src/sap/fe/core/converters/controls/Common/Action.js +58 -21
  89. package/src/sap/fe/core/converters/controls/Common/Action.ts +72 -22
  90. package/src/sap/fe/core/converters/controls/Common/Chart.js +13 -3
  91. package/src/sap/fe/core/converters/controls/Common/Chart.ts +20 -4
  92. package/src/sap/fe/core/converters/controls/Common/Form.js +18 -3
  93. package/src/sap/fe/core/converters/controls/Common/Form.ts +23 -1
  94. package/src/sap/fe/core/converters/controls/Common/Table.js +87 -22
  95. package/src/sap/fe/core/converters/controls/Common/Table.ts +112 -21
  96. package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.js +243 -0
  97. package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.ts +309 -0
  98. package/src/sap/fe/core/converters/controls/Common/table/Columns.js +142 -58
  99. package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +174 -79
  100. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +7 -16
  101. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +6 -17
  102. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +16 -5
  103. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +16 -5
  104. package/src/sap/fe/core/converters/helpers/Aggregation.js +12 -2
  105. package/src/sap/fe/core/converters/helpers/Aggregation.ts +11 -1
  106. package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +27 -3
  107. package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +28 -1
  108. package/src/sap/fe/core/converters/helpers/ID.js +3 -1
  109. package/src/sap/fe/core/converters/helpers/ID.ts +1 -0
  110. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +10 -5
  111. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +13 -1
  112. package/src/sap/fe/core/converters/templates/ListReportConverter.js +11 -3
  113. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +12 -4
  114. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +19 -8
  115. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +18 -7
  116. package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +8 -3
  117. package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +7 -2
  118. package/src/sap/fe/core/flexibility/AppComponent.flexibility.js +55 -0
  119. package/src/sap/fe/core/flexibility/AppComponent.flexibility.ts +65 -0
  120. package/src/sap/fe/core/flexibility/XMLTools.js +71 -0
  121. package/src/sap/fe/core/flexibility/XMLTools.ts +61 -0
  122. package/src/sap/fe/core/fpm/manifest.json +2 -2
  123. package/src/sap/fe/core/helpers/AppStartupHelper.js +79 -25
  124. package/src/sap/fe/core/helpers/AppStartupHelper.ts +92 -32
  125. package/src/sap/fe/core/helpers/DeleteHelper.js +13 -13
  126. package/src/sap/fe/core/helpers/DeleteHelper.ts +17 -15
  127. package/src/sap/fe/core/helpers/ManifestHelper.js +6 -3
  128. package/src/sap/fe/core/helpers/ManifestHelper.ts +3 -0
  129. package/src/sap/fe/core/helpers/MetaModelFunction.js +12 -3
  130. package/src/sap/fe/core/helpers/MetaModelFunction.ts +11 -3
  131. package/src/sap/fe/core/helpers/ModelHelper.js +47 -11
  132. package/src/sap/fe/core/helpers/ModelHelper.ts +62 -15
  133. package/src/sap/fe/core/helpers/PasteHelper.js +6 -2
  134. package/src/sap/fe/core/helpers/PasteHelper.ts +5 -7
  135. package/src/sap/fe/core/helpers/TypeGuards.js +12 -2
  136. package/src/sap/fe/core/helpers/TypeGuards.ts +10 -1
  137. package/src/sap/fe/core/helpers/WebSocket.js +6 -7
  138. package/src/sap/fe/core/helpers/WebSocket.ts +10 -6
  139. package/src/sap/fe/core/library.js +33 -3
  140. package/src/sap/fe/core/library.ts +31 -1
  141. package/src/sap/fe/core/messagebundle.properties +8 -1
  142. package/src/sap/fe/core/messagebundle_ar.properties +8 -1
  143. package/src/sap/fe/core/messagebundle_bg.properties +10 -3
  144. package/src/sap/fe/core/messagebundle_ca.properties +7 -0
  145. package/src/sap/fe/core/messagebundle_cnr.properties +7 -0
  146. package/src/sap/fe/core/messagebundle_cs.properties +7 -0
  147. package/src/sap/fe/core/messagebundle_cy.properties +8 -1
  148. package/src/sap/fe/core/messagebundle_da.properties +7 -0
  149. package/src/sap/fe/core/messagebundle_de.properties +7 -0
  150. package/src/sap/fe/core/messagebundle_el.properties +7 -0
  151. package/src/sap/fe/core/messagebundle_en.properties +8 -1
  152. package/src/sap/fe/core/messagebundle_en_GB.properties +7 -0
  153. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +8 -1
  154. package/src/sap/fe/core/messagebundle_es.properties +8 -1
  155. package/src/sap/fe/core/messagebundle_es_MX.properties +7 -0
  156. package/src/sap/fe/core/messagebundle_et.properties +7 -0
  157. package/src/sap/fe/core/messagebundle_fi.properties +7 -0
  158. package/src/sap/fe/core/messagebundle_fr.properties +16 -9
  159. package/src/sap/fe/core/messagebundle_fr_CA.properties +7 -0
  160. package/src/sap/fe/core/messagebundle_hi.properties +8 -1
  161. package/src/sap/fe/core/messagebundle_hr.properties +7 -0
  162. package/src/sap/fe/core/messagebundle_hu.properties +7 -0
  163. package/src/sap/fe/core/messagebundle_id.properties +7 -0
  164. package/src/sap/fe/core/messagebundle_it.properties +7 -0
  165. package/src/sap/fe/core/messagebundle_iw.properties +7 -0
  166. package/src/sap/fe/core/messagebundle_ja.properties +8 -1
  167. package/src/sap/fe/core/messagebundle_kk.properties +7 -0
  168. package/src/sap/fe/core/messagebundle_ko.properties +7 -0
  169. package/src/sap/fe/core/messagebundle_lt.properties +7 -0
  170. package/src/sap/fe/core/messagebundle_lv.properties +7 -0
  171. package/src/sap/fe/core/messagebundle_mk.properties +7 -0
  172. package/src/sap/fe/core/messagebundle_ms.properties +7 -0
  173. package/src/sap/fe/core/messagebundle_nl.properties +7 -0
  174. package/src/sap/fe/core/messagebundle_no.properties +9 -2
  175. package/src/sap/fe/core/messagebundle_pl.properties +7 -0
  176. package/src/sap/fe/core/messagebundle_pt.properties +7 -0
  177. package/src/sap/fe/core/messagebundle_pt_PT.properties +7 -0
  178. package/src/sap/fe/core/messagebundle_ro.properties +7 -0
  179. package/src/sap/fe/core/messagebundle_ru.properties +7 -0
  180. package/src/sap/fe/core/messagebundle_sh.properties +7 -0
  181. package/src/sap/fe/core/messagebundle_sk.properties +7 -0
  182. package/src/sap/fe/core/messagebundle_sl.properties +7 -0
  183. package/src/sap/fe/core/messagebundle_sr.properties +7 -0
  184. package/src/sap/fe/core/messagebundle_sv.properties +7 -0
  185. package/src/sap/fe/core/messagebundle_th.properties +7 -0
  186. package/src/sap/fe/core/messagebundle_tr.properties +7 -0
  187. package/src/sap/fe/core/messagebundle_uk.properties +7 -0
  188. package/src/sap/fe/core/messagebundle_vi.properties +7 -0
  189. package/src/sap/fe/core/messagebundle_zh_CN.properties +8 -1
  190. package/src/sap/fe/core/messagebundle_zh_TW.properties +7 -0
  191. package/src/sap/fe/core/rootView/Fcl.controller.js +21 -7
  192. package/src/sap/fe/core/rootView/Fcl.controller.ts +22 -5
  193. package/src/sap/fe/core/rootView/NavContainer.controller.js +1 -1
  194. package/src/sap/fe/core/rootView/NavContainer.controller.ts +2 -1
  195. package/src/sap/fe/core/rootView/RootViewBaseController.js +96 -88
  196. package/src/sap/fe/core/rootView/RootViewBaseController.ts +106 -96
  197. package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +1 -1
  198. package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.ts +9 -9
  199. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +14 -10
  200. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +15 -10
  201. package/src/sap/fe/core/services/RoutingServiceFactory.js +9 -4
  202. package/src/sap/fe/core/services/RoutingServiceFactory.ts +13 -6
  203. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +9 -7
  204. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +13 -8
  205. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +57 -5
  206. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +69 -10
  207. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +33 -15
  208. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +31 -11
  209. package/src/sap/fe/core/templating/DisplayModeFormatter.js +4 -5
  210. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +4 -6
  211. package/src/sap/fe/core/templating/UIFormatters.js +17 -2
  212. package/src/sap/fe/core/templating/UIFormatters.ts +25 -1
  213. package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.js +10 -0
  214. package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.ts +369 -0
  215. package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.js +9 -0
  216. package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.ts +49 -0
  217. package/ui5.yaml +2 -0
@@ -1347,4 +1347,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/common/Anno
1347
1347
  }
1348
1348
  return _exports;
1349
1349
  }, false);
1350
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYXJzZVByb3BlcnR5VmFsdWUiLCJhbm5vdGF0aW9uT2JqZWN0IiwicHJvcGVydHlLZXkiLCJjdXJyZW50VGFyZ2V0IiwiYW5ub3RhdGlvbnNMaXN0cyIsIm9DYXBhYmlsaXRpZXMiLCJ2YWx1ZSIsInR5cGUiLCJTdHJpbmciLCJCb29sIiwiSW50IiwiQXJyYXkiLCJpc0FycmF5IiwiY29sbGVjdGlvblZhbHVlIiwiQ29sbGVjdGlvbiIsIm1hcCIsInN1YkFubm90YXRpb25PYmplY3QiLCJzdWJBbm5vdGF0aW9uT2JqZWN0SW5kZXgiLCJwYXJzZUFubm90YXRpb25PYmplY3QiLCJsZW5ndGgiLCJoYXNPd25Qcm9wZXJ0eSIsIiRQYXRoIiwidW5kZWZpbmVkIiwiUGF0aCIsIiREZWNpbWFsIiwiRGVjaW1hbCIsInBhcnNlRmxvYXQiLCIkUHJvcGVydHlQYXRoIiwiUHJvcGVydHlQYXRoIiwiJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJOYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwiJElmIiwiJEFuZCIsIiRPciIsIiROb3QiLCIkRXEiLCIkTmUiLCIkR3QiLCIkR2UiLCIkTHQiLCIkTGUiLCIkQXBwbHkiLCIkRnVuY3Rpb24iLCIkQW5ub3RhdGlvblBhdGgiLCJBbm5vdGF0aW9uUGF0aCIsIiRFbnVtTWVtYmVyIiwiRW51bU1lbWJlciIsIlJlY29yZCIsIm5hbWUiLCJjdXJyZW50T2JqZWN0VGFyZ2V0IiwicGFyc2VkQW5ub3RhdGlvbk9iamVjdCIsInBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uIiwiY29sbGVjdGlvbiIsInN1YkFubm90YXRpb25JbmRleCIsInBhcnNlZEFubm90YXRpb25PYmplY3RSZWNvcmQiLCJwcm9wZXJ0eVZhbHVlcyIsIiRUeXBlIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJzdGFydHNXaXRoIiwicHVzaCIsImNyZWF0ZUFubm90YXRpb25MaXN0cyIsImdldE9yQ3JlYXRlQW5ub3RhdGlvbkxpc3QiLCJ0YXJnZXQiLCJhbm5vdGF0aW9ucyIsImNyZWF0ZVJlZmVyZW5jZUZhY2V0SWQiLCJyZWZlcmVuY2VGYWNldCIsImlkIiwiSUQiLCJUYXJnZXQiLCJwcmVwYXJlSWQiLCJyZW1vdmVDaGFydEFubm90YXRpb25zIiwiZmlsdGVyIiwib1JlY29yZCIsInJlY29yZEFzUmVmRmFjZXQiLCJpbmNsdWRlcyIsInJlbW92ZUlCTkFubm90YXRpb25zIiwiaGFuZGxlUHJlc2VudGF0aW9uVmFyaWFudCIsImFubm90YXRpb25PYmplY3RzIiwiYW5ub3RhdGlvblRhcmdldCIsImFubm90YXRpb25MaXN0cyIsIm91dEFubm90YXRpb25PYmplY3QiLCJNaWNyb0NoYXJ0IiwibG9hZExpYnJhcnkiLCJhbm5vdGF0aW9uS2V5IiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZmllbGRHcm91cEFubm90YXRpb24iLCJEYXRhIiwicHJlc2VudGF0aW9uVmFyaWFudCIsIkNoYXJ0IiwiVmlzdWFsaXphdGlvbnMiLCJmaWx0ZXJSZXN0cmljdGlvbnMiLCJGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zIiwic29tZSIsIkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbiIsIlByb3BlcnR5IiwiQWxsb3dlZEV4cHJlc3Npb25zIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiY3VycmVudE91dEFubm90YXRpb25PYmplY3QiLCJmaW5hbEtleSIsImFubm90YXRpb25PZkFubm90YXRpb25TcGxpdCIsInNwbGl0IiwiYW5ub3RhdGlvblF1YWxpZmllclNwbGl0IiwicXVhbGlmaWVyIiwidGVybSIsImN1cnJlbnRBbm5vdGF0aW9uVGFyZ2V0IiwiYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UiLCJyZWNvcmQiLCJ0eXBlVmFsdWUiLCJwcmVwYXJlUHJvcGVydHkiLCJwcm9wZXJ0eURlZmluaXRpb24iLCJlbnRpdHlUeXBlT2JqZWN0IiwicHJvcGVydHlOYW1lIiwiX3R5cGUiLCJtYXhMZW5ndGgiLCIkTWF4TGVuZ3RoIiwicHJlY2lzaW9uIiwiJFByZWNpc2lvbiIsInNjYWxlIiwiJFNjYWxlIiwibnVsbGFibGUiLCIkTnVsbGFibGUiLCJwcmVwYXJlTmF2aWdhdGlvblByb3BlcnR5IiwibmF2UHJvcGVydHlEZWZpbml0aW9uIiwibmF2UHJvcGVydHlOYW1lIiwicmVmZXJlbnRpYWxDb25zdHJhaW50IiwiJFJlZmVyZW50aWFsQ29uc3RyYWludCIsInNvdXJjZVByb3BlcnR5TmFtZSIsInNvdXJjZVR5cGVOYW1lIiwic291cmNlUHJvcGVydHkiLCJ0YXJnZXRUeXBlTmFtZSIsInRhcmdldFByb3BlcnR5IiwibmF2aWdhdGlvblByb3BlcnR5IiwicGFydG5lciIsIiRQYXJ0bmVyIiwiaXNDb2xsZWN0aW9uIiwiJGlzQ29sbGVjdGlvbiIsImNvbnRhaW5zVGFyZ2V0IiwiJENvbnRhaW5zVGFyZ2V0IiwicHJlcGFyZU5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmciLCJuYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nIiwiZW50aXR5Q29udGFpbmVyTmFtZSIsImZyb21FbnRyaWVzIiwiZW50cmllcyIsIl9yZWYiLCJwYXRoIiwicHJlcGFyZUVudGl0eVNldCIsImVudGl0eVNldERlZmluaXRpb24iLCJlbnRpdHlTZXROYW1lIiwiJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmciLCJlbnRpdHlUeXBlTmFtZSIsInByZXBhcmVTaW5nbGV0b24iLCJzaW5nbGV0b25EZWZpbml0aW9uIiwic2luZ2xldG9uTmFtZSIsInByZXBhcmVBY3Rpb25JbXBvcnQiLCJhY3Rpb25JbXBvcnQiLCJhY3Rpb25JbXBvcnROYW1lIiwiYWN0aW9uTmFtZSIsIiRraW5kIiwiJEFjdGlvbiIsInByZXBhcmVUeXBlRGVmaW5pdGlvbiIsInR5cGVEZWZpbml0aW9uIiwidHlwZU5hbWUiLCJuYW1lc3BhY2VQcmVmaXgiLCJ0eXBlT2JqZWN0Iiwic3Vic3RyaW5nIiwidW5kZXJseWluZ1R5cGUiLCIkVW5kZXJseWluZ1R5cGUiLCJwcmVwYXJlQ29tcGxleFR5cGUiLCJjb21wbGV4VHlwZURlZmluaXRpb24iLCJjb21wbGV4VHlwZU5hbWUiLCJjb21wbGV4VHlwZU9iamVjdCIsInByb3BlcnRpZXMiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsImNvbXBsZXhUeXBlUHJvcGVydGllcyIsInByb3BlcnR5TmFtZU9yTm90Iiwic29ydCIsImEiLCJiIiwiY29tcGxleFR5cGVOYXZpZ2F0aW9uUHJvcGVydGllcyIsInByZXBhcmVFbnRpdHlLZXlzIiwiZW50aXR5VHlwZURlZmluaXRpb24iLCJvTWV0YU1vZGVsRGF0YSIsIiRLZXkiLCIkQmFzZVR5cGUiLCJwcmVwYXJlRW50aXR5VHlwZSIsIm1ldGFNb2RlbERhdGEiLCJpZ25vcmVEYXRhZmllbGREZWZhdWx0IiwiZW50aXR5VHlwZSIsImVudGl0eVByb3BlcnRpZXMiLCJhY3Rpb25zIiwia2V5IiwicHJvcGVydHkiLCJlbnRpdHlLZXkiLCJmaW5kIiwiZW50aXR5VHlwZUFubm90YXRpb25zIiwiJEFubm90YXRpb25zIiwiZmlsdGVyRmFjZXRzIiwiZmlsdGVyRmFjZXRBbm5vdGF0aW9uIiwiaGVhZGVySW5mb0Fubm90YXRpb24iLCJUeXBlTmFtZSIsIlR5cGVOYW1lUGx1cmFsIiwiVGl0bGUiLCJWYWx1ZSIsImVudGl0eVByb3BlcnR5IiwicHJlcGFyZUFjdGlvbiIsImFjdGlvblJhd0RhdGEiLCJvdmVybG9hZFBhcmFtZXRlcnMiLCIkUGFyYW1ldGVyIiwiJElzQm91bmQiLCJvdmVybG9hZCIsInBhcmFtZXRlciIsImpvaW4iLCJwYXJhbWV0ZXJzIiwiaXNCb3VuZCIsImlzRnVuY3Rpb24iLCJzb3VyY2VUeXBlIiwicmV0dXJuVHlwZSIsIiRSZXR1cm5UeXBlIiwicmV0dXJuQ29sbGVjdGlvbiIsInBhcmFtIiwiJE5hbWUiLCJwYXJzZUVudGl0eUNvbnRhaW5lciIsImVudGl0eUNvbnRhaW5lck1ldGFkYXRhIiwic2NoZW1hIiwiZW50aXR5Q29udGFpbmVyIiwiZWxlbWVudE5hbWUiLCJlbGVtZW50VmFsdWUiLCJlbnRpdHlTZXRzIiwic2luZ2xldG9ucyIsImFjdGlvbkltcG9ydHMiLCJwYXJzZUFubm90YXRpb25zIiwiY2FwYWJpbGl0aWVzIiwidmFsdWVzIiwicGFyc2VTY2hlbWEiLCJtZXRhbW9kZWxPYmplY3QiLCJuYW1lc3BhY2UiLCJzbGljZSIsImVudGl0eVR5cGVzIiwiY29tcGxleFR5cGVzIiwidHlwZURlZmluaXRpb25zIiwiYXNzb2NpYXRpb25zIiwiYXNzb2NpYXRpb25TZXRzIiwicGFyc2VNZXRhTW9kZWxFbGVtZW50Iiwic3ViRWxlbWVudFZhbHVlIiwicGFyc2VNZXRhTW9kZWwiLCJtZXRhTW9kZWwiLCJhcmd1bWVudHMiLCJEZWZhdWx0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJyZXN1bHQiLCJpZGVudGlmaWNhdGlvbiIsInZlcnNpb24iLCJyZWZlcmVuY2VzIiwiQW5ub3RhdGlvbkNvbnZlcnRlciIsImxhenkiLCJnZXRPYmplY3QiLCJfZXhwb3J0cyIsImNvbnZlcnRlZE1ldGFNb2RlbE1hcCIsIm1ldGFNb2RlbElETWFwIiwibWV0YU1vZGVsTWFwIiwiV2Vha01hcCIsInZpcnR1YWxQcm9wZXJ0aWVzTWFwIiwiY29udmVydFR5cGVzIiwib01ldGFNb2RlbCIsIm1ldGFNb2RlbElEIiwicGFyc2VkT3V0cHV0IiwiY29udmVydCIsImNyaXRpY2FsaXR5IiwiZm4iLCJnZXRWaXJ0dWFsQ3JpdGljYWxpdHlFeHByZXNzaW9uIiwibWV0YU1vZGVsU3ltYm9sIiwic2V0Iiwib0Vycm9yIiwiRXJyb3IiLCJyZWdpc3RlclZpcnR1YWxQcm9wZXJ0eSIsImNvbnZlcnRlZFR5cGVzIiwiZm5WaXJ0dWFsUHJvcGVydHkiLCJ2aWV3SWQiLCJnZXRNZXRhTW9kZWxCeUlkIiwic3ltYm9sIiwiZ2V0IiwiZ2V0Q29udmVydGVkVHlwZXMiLCJvQ29udGV4dCIsImdldE1vZGVsIiwiaXNBIiwiZGVsZXRlTW9kZWxDYWNoZURhdGEiLCJjb252ZXJ0TWV0YU1vZGVsQ29udGV4dCIsIm9NZXRhTW9kZWxDb250ZXh0IiwiYkluY2x1ZGVWaXNpdGVkT2JqZWN0cyIsIm9Db252ZXJ0ZWRNZXRhZGF0YSIsInNQYXRoIiwiZ2V0UGF0aCIsImFQYXRoU3BsaXQiLCJmaXJzdFBhcnQiLCJiZWdpbkluZGV4IiwidGFyZ2V0RW50aXR5U2V0IiwiZW50aXR5U2V0Iiwic2luZ2xldG9uIiwicmVsYXRpdmVQYXRoIiwibG9jYWxPYmplY3RzIiwicmVsYXRpdmVTcGxpdCIsImlkeCIsImN1cnJlbnRFbnRpdHlTZXQiLCJzTmF2UHJvcFRvQ2hlY2siLCJyZXBsYWNlIiwiYU5hdlByb3BzIiwidGFyZ2V0RW50aXR5VHlwZSIsInNOYXZQcm9wIiwidGFyZ2V0TmF2UHJvcCIsIm5hdlByb3AiLCJ0YXJnZXRUeXBlIiwic2hpZnQiLCJvVGFyZ2V0IiwicmVzb2x2ZVBhdGgiLCJ2aXNpdGVkT2JqZWN0cyIsImNvbmNhdCIsImFjdGlvbiIsInBhcmFtZXRlck5hbWUiLCJlbmRzV2l0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsIm9FbnRpdHlTZXRNZXRhTW9kZWxDb250ZXh0IiwibWV0YU1vZGVsQ29udGV4dCIsInRhcmdldEVudGl0eVNldExvY2F0aW9uIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RGcm9tUGF0aCIsIm9ubHlTZXJ2aWNlT2JqZWN0cyIsImRhdGFNb2RlbE9iamVjdHMiLCJ2aXNpdGVkT2JqZWN0IiwiaXNTZXJ2aWNlT2JqZWN0IiwiaXNFbnRpdHlUeXBlIiwiaXNFbnRpdHlDb250YWluZXIiLCJyb290RW50aXR5U2V0IiwiY3VycmVudEVudGl0eVR5cGUiLCJjdXJyZW50T2JqZWN0IiwibmF2aWdhdGVkUGF0aCIsImkiLCJpc05hdmlnYXRpb25Qcm9wZXJ0eSIsImJvdW5kRW50aXR5U2V0IiwiaXNFbnRpdHlTZXQiLCJpc1NpbmdsZXRvbiIsInN0YXJ0aW5nRW50aXR5U2V0Iiwic3RhcnRpbmdJbmRleCIsImluZGV4T2YiLCJyZXF1aXJlZERhdGFNb2RlbE9iamVjdHMiLCJvdXREYXRhTW9kZWxQYXRoIiwidGFyZ2V0T2JqZWN0IiwiY29udGV4dExvY2F0aW9uIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RFbnRpdHlLZXlzIiwiY29udGV4dCIsImdldE1ldGFNb2RlbCIsIm1ldGFQYXRoIiwiZ2V0TWV0YVBhdGgiLCJkYXRhTW9kZWwiLCJnZXRNZXRhQ29udGV4dCIsInJvb3RTZW1hbnRpY0tleXMiLCJDb21tb24iLCJTZW1hbnRpY0tleSIsInNlbWFudGljS2V5cyIsInJvb3RUZWNobmljYWxLZXlzIiwidGVjaG5pY2FsS2V5cyIsImV4dHJhY3RNb2RlbEFuZFBhdGgiLCJtb2RlbElkIiwidGFyZ2V0UGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0c0ZvclRhcmdldFBhdGgiLCJtZXRhQ29udGV4dCIsImdldENvbnRleHQiLCJnZXRWaXJ0dWFsQmluZGluZ0V4cHJlc3Npb24iLCJ2aXJ0dWFsS2V5IiwicGF0aEluZm9zIiwibWV0aG9kIiwidmlydHVhbFByb3BlcnR5IiwidmlydHVhbFByb3BlcnR5Rm4iLCJleHByZXNzaW9uIiwiY29uc3RhbnQiLCJjcml0aWNhbGl0eVByb3BlcnR5IiwiQ3JpdGljYWxpdHkiLCJjcml0aWNhbGl0eUV4cHJlc3Npb24iLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJiaW5kaW5nUGF0aCIsImZvcm1hdFJlc3VsdCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiTWV0YU1vZGVsQ29udmVydGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgZmlsZSBpcyByZXRyaWV2ZWQgZnJvbSBAc2FwLXV4L2Fubm90YXRpb24tY29udmVydGVyLCBzaGFyZWQgY29kZSB3aXRoIHRvb2wgc3VpdGVcbmltcG9ydCB0eXBlIHtcblx0QWN0aW9uUGFyYW1ldGVyLFxuXHRBbm5vdGF0aW9uTGlzdCxcblx0QW5ub3RhdGlvblJlY29yZCxcblx0QW5ub3RhdGlvblRlcm0sXG5cdENvbnZlcnRlZE1ldGFkYXRhLFxuXHRFbnRpdHlTZXQsXG5cdEVudGl0eVR5cGUsXG5cdEV4cHJlc3Npb24sXG5cdE5hdmlnYXRpb25Qcm9wZXJ0eSxcblx0UmF3QWN0aW9uLFxuXHRSYXdBY3Rpb25JbXBvcnQsXG5cdFJhd0Fubm90YXRpb24sXG5cdFJhd0NvbXBsZXhUeXBlLFxuXHRSYXdFbnRpdHlTZXQsXG5cdFJhd0VudGl0eVR5cGUsXG5cdFJhd01ldGFkYXRhLFxuXHRSYXdOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nLFxuXHRSYXdQcm9wZXJ0eSxcblx0UmF3U2NoZW1hLFxuXHRSYXdTaW5nbGV0b24sXG5cdFJhd1R5cGVEZWZpbml0aW9uLFxuXHRSYXdWNE5hdmlnYXRpb25Qcm9wZXJ0eSxcblx0UmVmZXJlbnRpYWxDb25zdHJhaW50LFxuXHRTZXJ2aWNlT2JqZWN0LFxuXHRTZXJ2aWNlT2JqZWN0QW5kQW5ub3RhdGlvbixcblx0U2luZ2xldG9uXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBBcHBseUV4cHJlc3Npb24sIENvbGxlY3Rpb24sIENvbGxlY3Rpb25FeHByZXNzaW9uLCBQcm9wZXJ0eVZhbHVlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL0Jhc2VFZG1cIjtcbmltcG9ydCB0eXBlIHsgQW5ub3RhdGlvblBhdGgsIFByaW1pdGl2ZVR5cGUsIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlLCBSZWNvcmRDb21wbGV4VHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9FZG1cIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlBbm5vdGF0aW9uc19BbmFseXRpY3MgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0FuYWx5dGljc19FZG1cIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyUmVzdHJpY3Rpb25zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9DYXBhYmlsaXRpZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0RW50aXR5U2V0QW5ub3RhdGlvbnNfQ2FwYWJpbGl0aWVzLFxuXHRFbnRpdHlUeXBlQW5ub3RhdGlvbnNfQ2FwYWJpbGl0aWVzLFxuXHRQcm9wZXJ0eUFubm90YXRpb25zX0NhcGFiaWxpdGllc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NhcGFiaWxpdGllc19FZG1cIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlBbm5vdGF0aW9uc19Db21tb24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vbl9FZG1cIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlBbm5vdGF0aW9uc19Db21tdW5pY2F0aW9uIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tdW5pY2F0aW9uX0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUFubm90YXRpb25zX0NvcmUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvcmVfRWRtXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5QW5ub3RhdGlvbnNfTWVhc3VyZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL01lYXN1cmVzX0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUFubm90YXRpb25zX1BlcnNvbmFsRGF0YSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvUGVyc29uYWxEYXRhX0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUFubm90YXRpb25zX1Nlc3Npb24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1Nlc3Npb25fRWRtXCI7XG5pbXBvcnQgdHlwZSB7XG5cdENoYXJ0LFxuXHREYXRhRmllbGQsXG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFQb2ludCxcblx0RGF0YVBvaW50VHlwZSxcblx0RmFjZXRUeXBlcyxcblx0RmllbGRHcm91cCxcblx0RmlsdGVyRmFjZXRzLFxuXHRIZWFkZXJGYWNldHMsXG5cdEhlYWRlckluZm8sXG5cdExpbmVJdGVtLFxuXHRQcmVzZW50YXRpb25WYXJpYW50LFxuXHRSZWZlcmVuY2VGYWNldCxcblx0VGV4dEFycmFuZ2VtZW50XG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblRlcm1zLCBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIHtcblx0RW50aXR5U2V0QW5ub3RhdGlvbnNfVUksXG5cdEVudGl0eVR5cGVBbm5vdGF0aW9uc19VSSxcblx0UHJvcGVydHlBbm5vdGF0aW9uc19VSVxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJX0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGNvbnN0YW50LCBmb3JtYXRSZXN1bHQsIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgQW5ub3RhdGlvbkNvbnZlcnRlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbW1vblwiO1xuaW1wb3J0IHtcblx0aXNFbnRpdHlDb250YWluZXIsXG5cdGlzRW50aXR5U2V0LFxuXHRpc0VudGl0eVR5cGUsXG5cdGlzTmF2aWdhdGlvblByb3BlcnR5LFxuXHRpc1NlcnZpY2VPYmplY3QsXG5cdGlzU2luZ2xldG9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB0eXBlIHsgRW52aXJvbm1lbnRDYXBhYmlsaXRpZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvRW52aXJvbm1lbnRTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHsgRGVmYXVsdEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL0Vudmlyb25tZW50U2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0Q29udGV4dCwgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT0RhdGFWNENvbnRleHQgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgRXhwYW5kUGF0aFR5cGUsIE1ldGFNb2RlbEVudW0sIE1ldGFNb2RlbFR5cGUsIFJlbmFtZSB9IGZyb20gXCJ0eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcbmltcG9ydCB7IHByZXBhcmVJZCB9IGZyb20gXCIuLi9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5cbmV4cG9ydCB0eXBlIE1ldGFNb2RlbEFjdGlvblBhcmFtZXRlciA9IHtcblx0JFR5cGU6IHN0cmluZztcblx0JE5hbWU6IHN0cmluZztcblx0JE51bGxhYmxlPzogYm9vbGVhbjtcblx0JE1heExlbmd0aD86IG51bWJlcjtcblx0JFByZWNpc2lvbj86IG51bWJlcjtcblx0JFNjYWxlPzogbnVtYmVyO1xuXHQkaXNDb2xsZWN0aW9uPzogYm9vbGVhbjtcbn07XG5leHBvcnQgdHlwZSBNZXRhTW9kZWxBY3Rpb24gPSB7XG5cdCRraW5kOiBcIkFjdGlvblwiIHwgXCJGdW5jdGlvblwiO1xuXHQkSXNCb3VuZDogYm9vbGVhbjtcblx0JEVudGl0eVNldFBhdGg6IHN0cmluZztcblx0JFBhcmFtZXRlcjogTWV0YU1vZGVsQWN0aW9uUGFyYW1ldGVyW107XG5cdCRSZXR1cm5UeXBlOiB7XG5cdFx0JFR5cGU6IHN0cmluZztcblx0XHQkaXNDb2xsZWN0aW9uPzogYm9vbGVhbjtcblx0fTtcbn07XG5cbnR5cGUgTWV0YU1vZGVsQW5ub3RhdGlvbiA9IG51bGwgfCBzdHJpbmcgfCBib29sZWFuIHwgbnVtYmVyIHwgTWV0YU1vZGVsQW5ub3RhdGlvblJlY29yZDtcbnR5cGUgTWV0YU1vZGVsQW5ub3RhdGlvblJlY29yZCA9IHtcblx0JFR5cGU6IHN0cmluZztcblx0JFByb3BlcnR5UGF0aD86IHN0cmluZztcblx0JFBhdGg/OiBzdHJpbmc7XG5cdCREZWNpbWFsPzogc3RyaW5nO1xuXHQkSWY/OiB1bmtub3duO1xuXHQkQW5kPzogdW5rbm93bjtcblx0JE9yPzogdW5rbm93bjtcblx0JE5vdD86IHVua25vd247XG5cdCRFcT86IHVua25vd247XG5cdCROZT86IHVua25vd247XG5cdCRHdD86IHVua25vd247XG5cdCRHZT86IHVua25vd247XG5cdCRMdD86IHVua25vd247XG5cdCRMZT86IHVua25vd247XG5cdCRBcHBseT86IHVua25vd247XG5cdCRGdW5jdGlvbj86IHVua25vd247XG5cdCRBbm5vdGF0aW9uUGF0aD86IHN0cmluZztcblx0JEVudW1NZW1iZXI/OiBzdHJpbmc7XG5cdCROYXZpZ2F0aW9uUHJvcGVydHlQYXRoPzogc3RyaW5nO1xufSAmIHtcblx0W3Byb3BlcnR5S2V5OiBzdHJpbmddOiBNZXRhTW9kZWxBbm5vdGF0aW9uO1xufTtcbmZ1bmN0aW9uIHBhcnNlUHJvcGVydHlWYWx1ZShcblx0YW5ub3RhdGlvbk9iamVjdDogTWV0YU1vZGVsQW5ub3RhdGlvbixcblx0cHJvcGVydHlLZXk6IHN0cmluZyxcblx0Y3VycmVudFRhcmdldDogc3RyaW5nLFxuXHRhbm5vdGF0aW9uc0xpc3RzOiBSZWNvcmQ8c3RyaW5nLCBBbm5vdGF0aW9uTGlzdD4sXG5cdG9DYXBhYmlsaXRpZXM6IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzXG4pOiB7IG5hbWU6IHN0cmluZzsgdmFsdWU6IEV4cHJlc3Npb24gfSB7XG5cdGxldCB2YWx1ZSE6IEV4cHJlc3Npb247XG5cdGlmIChhbm5vdGF0aW9uT2JqZWN0ID09PSBudWxsKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiTnVsbFwiIH07XG5cdH0gZWxzZSBpZiAodHlwZW9mIGFubm90YXRpb25PYmplY3QgPT09IFwic3RyaW5nXCIpIHtcblx0XHR2YWx1ZSA9IHsgdHlwZTogXCJTdHJpbmdcIiwgU3RyaW5nOiBhbm5vdGF0aW9uT2JqZWN0IH07XG5cdH0gZWxzZSBpZiAodHlwZW9mIGFubm90YXRpb25PYmplY3QgPT09IFwiYm9vbGVhblwiKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiQm9vbFwiLCBCb29sOiBhbm5vdGF0aW9uT2JqZWN0IH07XG5cdH0gZWxzZSBpZiAodHlwZW9mIGFubm90YXRpb25PYmplY3QgPT09IFwibnVtYmVyXCIpIHtcblx0XHR2YWx1ZSA9IHsgdHlwZTogXCJJbnRcIiwgSW50OiBhbm5vdGF0aW9uT2JqZWN0IH07XG5cdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhbm5vdGF0aW9uT2JqZWN0KSkge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25WYWx1ZTogQ29sbGVjdGlvbkV4cHJlc3Npb24gPSB7XG5cdFx0XHR0eXBlOiBcIkNvbGxlY3Rpb25cIixcblx0XHRcdENvbGxlY3Rpb246IGFubm90YXRpb25PYmplY3QubWFwKChzdWJBbm5vdGF0aW9uT2JqZWN0LCBzdWJBbm5vdGF0aW9uT2JqZWN0SW5kZXgpID0+XG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbk9iamVjdChcblx0XHRcdFx0XHRzdWJBbm5vdGF0aW9uT2JqZWN0LFxuXHRcdFx0XHRcdGAke2N1cnJlbnRUYXJnZXR9LyR7cHJvcGVydHlLZXl9LyR7c3ViQW5ub3RhdGlvbk9iamVjdEluZGV4fWAsXG5cdFx0XHRcdFx0YW5ub3RhdGlvbnNMaXN0cyxcblx0XHRcdFx0XHRvQ2FwYWJpbGl0aWVzXG5cdFx0XHRcdClcblx0XHRcdCkgYXMgQ29sbGVjdGlvblxuXHRcdH07XG5cdFx0aWYgKGFubm90YXRpb25PYmplY3QubGVuZ3RoID4gMCkge1xuXHRcdFx0aWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkUHJvcGVydHlQYXRoXCIpKSB7XG5cdFx0XHRcdGNvbGxlY3Rpb25WYWx1ZS5Db2xsZWN0aW9uLnR5cGUgPSBcIlByb3BlcnR5UGF0aFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJFBhdGhcIikpIHtcblx0XHRcdFx0Y29sbGVjdGlvblZhbHVlLkNvbGxlY3Rpb24udHlwZSA9IFwiUGF0aFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIikpIHtcblx0XHRcdFx0Y29sbGVjdGlvblZhbHVlLkNvbGxlY3Rpb24udHlwZSA9IFwiTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEFubm90YXRpb25QYXRoXCIpKSB7XG5cdFx0XHRcdGNvbGxlY3Rpb25WYWx1ZS5Db2xsZWN0aW9uLnR5cGUgPSBcIkFubm90YXRpb25QYXRoXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkVHlwZVwiKSkge1xuXHRcdFx0XHRjb2xsZWN0aW9uVmFsdWUuQ29sbGVjdGlvbi50eXBlID0gXCJSZWNvcmRcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRJZlwiKSkge1xuXHRcdFx0XHRjb2xsZWN0aW9uVmFsdWUuQ29sbGVjdGlvbi50eXBlID0gXCJJZlwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJE9yXCIpKSB7XG5cdFx0XHRcdGNvbGxlY3Rpb25WYWx1ZS5Db2xsZWN0aW9uLnR5cGUgPSBcIk9yXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkQW5kXCIpKSB7XG5cdFx0XHRcdGNvbGxlY3Rpb25WYWx1ZS5Db2xsZWN0aW9uLnR5cGUgPSBcIkFuZFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEVxXCIpKSB7XG5cdFx0XHRcdGNvbGxlY3Rpb25WYWx1ZS5Db2xsZWN0aW9uLnR5cGUgPSBcIkVxXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkTmVcIikpIHtcblx0XHRcdFx0Y29sbGVjdGlvblZhbHVlLkNvbGxlY3Rpb24udHlwZSA9IFwiTmVcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiROb3RcIikpIHtcblx0XHRcdFx0Y29sbGVjdGlvblZhbHVlLkNvbGxlY3Rpb24udHlwZSA9IFwiTm90XCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkR3RcIikpIHtcblx0XHRcdFx0Y29sbGVjdGlvblZhbHVlLkNvbGxlY3Rpb24udHlwZSA9IFwiR3RcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRHZVwiKSkge1xuXHRcdFx0XHRjb2xsZWN0aW9uVmFsdWUuQ29sbGVjdGlvbi50eXBlID0gXCJHZVwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEx0XCIpKSB7XG5cdFx0XHRcdGNvbGxlY3Rpb25WYWx1ZS5Db2xsZWN0aW9uLnR5cGUgPSBcIkx0XCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkTGVcIikpIHtcblx0XHRcdFx0Y29sbGVjdGlvblZhbHVlLkNvbGxlY3Rpb24udHlwZSA9IFwiTGVcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRBcHBseVwiKSkge1xuXHRcdFx0XHRjb2xsZWN0aW9uVmFsdWUuQ29sbGVjdGlvbi50eXBlID0gXCJBcHBseVwiO1xuXHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgYW5ub3RhdGlvbk9iamVjdFswXSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHQvLyAkVHlwZSBpcyBvcHRpb25hbC4uLlxuXHRcdFx0XHRjb2xsZWN0aW9uVmFsdWUuQ29sbGVjdGlvbi50eXBlID0gXCJSZWNvcmRcIjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbGxlY3Rpb25WYWx1ZS5Db2xsZWN0aW9uLnR5cGUgPSBcIlN0cmluZ1wiO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR2YWx1ZSA9IGNvbGxlY3Rpb25WYWx1ZTtcblx0fSBlbHNlIGlmICh0eXBlb2YgYW5ub3RhdGlvbk9iamVjdCA9PT0gXCJvYmplY3RcIikge1xuXHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0LiRQYXRoICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHZhbHVlID0geyB0eXBlOiBcIlBhdGhcIiwgUGF0aDogYW5ub3RhdGlvbk9iamVjdC4kUGF0aCB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kRGVjaW1hbCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YWx1ZSA9IHsgdHlwZTogXCJEZWNpbWFsXCIsIERlY2ltYWw6IHBhcnNlRmxvYXQoYW5ub3RhdGlvbk9iamVjdC4kRGVjaW1hbCkgfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJFByb3BlcnR5UGF0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YWx1ZSA9IHsgdHlwZTogXCJQcm9wZXJ0eVBhdGhcIiwgUHJvcGVydHlQYXRoOiBhbm5vdGF0aW9uT2JqZWN0LiRQcm9wZXJ0eVBhdGggfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dmFsdWUgPSB7IHR5cGU6IFwiTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiLCBOYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBhbm5vdGF0aW9uT2JqZWN0LiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoIH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRJZiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YWx1ZSA9IHsgdHlwZTogXCJJZlwiLCAkSWY6IGFubm90YXRpb25PYmplY3QuJElmIGFzIFtFeHByZXNzaW9uLCBFeHByZXNzaW9uLCBFeHByZXNzaW9uXSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kQW5kICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHZhbHVlID0geyB0eXBlOiBcIkFuZFwiLCAkQW5kOiBhbm5vdGF0aW9uT2JqZWN0LiRBbmQgYXMgW0V4cHJlc3Npb24sIEV4cHJlc3Npb25dIH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRPciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YWx1ZSA9IHsgdHlwZTogXCJPclwiLCAkT3I6IGFubm90YXRpb25PYmplY3QuJE9yIGFzIFtFeHByZXNzaW9uLCBFeHByZXNzaW9uXSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kTm90ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHZhbHVlID0geyB0eXBlOiBcIk5vdFwiLCAkTm90OiBhbm5vdGF0aW9uT2JqZWN0LiROb3QgYXMgRXhwcmVzc2lvbiB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kRXEgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dmFsdWUgPSB7IHR5cGU6IFwiRXFcIiwgJEVxOiBhbm5vdGF0aW9uT2JqZWN0LiRFcSBhcyBbRXhwcmVzc2lvbiwgRXhwcmVzc2lvbl0gfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJE5lICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHZhbHVlID0geyB0eXBlOiBcIk5lXCIsICROZTogYW5ub3RhdGlvbk9iamVjdC4kTmUgYXMgW0V4cHJlc3Npb24sIEV4cHJlc3Npb25dIH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRHdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YWx1ZSA9IHsgdHlwZTogXCJHdFwiLCAkR3Q6IGFubm90YXRpb25PYmplY3QuJEd0IGFzIFtFeHByZXNzaW9uLCBFeHByZXNzaW9uXSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kR2UgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dmFsdWUgPSB7IHR5cGU6IFwiR2VcIiwgJEdlOiBhbm5vdGF0aW9uT2JqZWN0LiRHZSBhcyBbRXhwcmVzc2lvbiwgRXhwcmVzc2lvbl0gfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEx0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHZhbHVlID0geyB0eXBlOiBcIkx0XCIsICRMdDogYW5ub3RhdGlvbk9iamVjdC4kTHQgYXMgW0V4cHJlc3Npb24sIEV4cHJlc3Npb25dIH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRMZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YWx1ZSA9IHsgdHlwZTogXCJMZVwiLCAkTGU6IGFubm90YXRpb25PYmplY3QuJExlIGFzIFtFeHByZXNzaW9uLCBFeHByZXNzaW9uXSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kQXBwbHkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dmFsdWUgPSB7IHR5cGU6IFwiQXBwbHlcIiwgJEFwcGx5OiBhbm5vdGF0aW9uT2JqZWN0LiRBcHBseSwgJEZ1bmN0aW9uOiBhbm5vdGF0aW9uT2JqZWN0LiRGdW5jdGlvbiB9IGFzIEFwcGx5RXhwcmVzc2lvbjtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEFubm90YXRpb25QYXRoICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHZhbHVlID0geyB0eXBlOiBcIkFubm90YXRpb25QYXRoXCIsIEFubm90YXRpb25QYXRoOiBhbm5vdGF0aW9uT2JqZWN0LiRBbm5vdGF0aW9uUGF0aCB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kRW51bU1lbWJlciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YWx1ZSA9IHsgdHlwZTogXCJFbnVtTWVtYmVyXCIsIEVudW1NZW1iZXI6IGFubm90YXRpb25PYmplY3QuJEVudW1NZW1iZXIgfTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFsdWUgPSB7XG5cdFx0XHRcdHR5cGU6IFwiUmVjb3JkXCIsXG5cdFx0XHRcdFJlY29yZDogcGFyc2VBbm5vdGF0aW9uT2JqZWN0KGFubm90YXRpb25PYmplY3QsIGN1cnJlbnRUYXJnZXQsIGFubm90YXRpb25zTGlzdHMsIG9DYXBhYmlsaXRpZXMpIGFzIEFubm90YXRpb25SZWNvcmRcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cdHJldHVybiB7XG5cdFx0bmFtZTogcHJvcGVydHlLZXksXG5cdFx0dmFsdWVcblx0fTtcbn1cblxuZnVuY3Rpb24gcGFyc2VBbm5vdGF0aW9uT2JqZWN0KFxuXHRhbm5vdGF0aW9uT2JqZWN0OiBNZXRhTW9kZWxBbm5vdGF0aW9uLFxuXHRjdXJyZW50T2JqZWN0VGFyZ2V0OiBzdHJpbmcsXG5cdGFubm90YXRpb25zTGlzdHM6IFJlY29yZDxzdHJpbmcsIEFubm90YXRpb25MaXN0Pixcblx0b0NhcGFiaWxpdGllczogRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNcbik6IEV4cHJlc3Npb24gfCBBbm5vdGF0aW9uUmVjb3JkIHtcblx0bGV0IHBhcnNlZEFubm90YXRpb25PYmplY3Q6IEV4cHJlc3Npb24gfCBBbm5vdGF0aW9uUmVjb3JkO1xuXHRpZiAoYW5ub3RhdGlvbk9iamVjdCA9PT0gbnVsbCkge1xuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiTnVsbFwiIH07XG5cdH0gZWxzZSBpZiAodHlwZW9mIGFubm90YXRpb25PYmplY3QgPT09IFwic3RyaW5nXCIpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIlN0cmluZ1wiLCBTdHJpbmc6IGFubm90YXRpb25PYmplY3QgfTtcblx0fSBlbHNlIGlmICh0eXBlb2YgYW5ub3RhdGlvbk9iamVjdCA9PT0gXCJib29sZWFuXCIpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIkJvb2xcIiwgQm9vbDogYW5ub3RhdGlvbk9iamVjdCB9O1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBhbm5vdGF0aW9uT2JqZWN0ID09PSBcIm51bWJlclwiKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJJbnRcIiwgSW50OiBhbm5vdGF0aW9uT2JqZWN0IH07XG5cdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhbm5vdGF0aW9uT2JqZWN0KSkge1xuXHRcdGNvbnN0IHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uID0ge1xuXHRcdFx0Y29sbGVjdGlvbjogYW5ub3RhdGlvbk9iamVjdC5tYXAoKHN1YkFubm90YXRpb25PYmplY3QsIHN1YkFubm90YXRpb25JbmRleCkgPT5cblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uT2JqZWN0KHN1YkFubm90YXRpb25PYmplY3QsIGAke2N1cnJlbnRPYmplY3RUYXJnZXR9LyR7c3ViQW5ub3RhdGlvbkluZGV4fWAsIGFubm90YXRpb25zTGlzdHMsIG9DYXBhYmlsaXRpZXMpXG5cdFx0XHQpIGFzIENvbGxlY3Rpb25cblx0XHR9O1xuXHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJFByb3BlcnR5UGF0aFwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIlByb3BlcnR5UGF0aFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJFBhdGhcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJQYXRoXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRBbm5vdGF0aW9uUGF0aFwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIkFubm90YXRpb25QYXRoXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkVHlwZVwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIlJlY29yZFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJElmXCIpKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uLmNvbGxlY3Rpb24udHlwZSA9IFwiSWZcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRBbmRcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJBbmRcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRPclwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIk9yXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkRXFcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJFcVwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJE5lXCIpKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uLmNvbGxlY3Rpb24udHlwZSA9IFwiTmVcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiROb3RcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJOb3RcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRHdFwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIkd0XCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkR2VcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJHZVwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEx0XCIpKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uLmNvbGxlY3Rpb24udHlwZSA9IFwiTHRcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRMZVwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIkxlXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkQXBwbHlcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJBcHBseVwiO1xuXHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgYW5ub3RhdGlvbk9iamVjdFswXSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIlJlY29yZFwiO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJTdHJpbmdcIjtcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSBpZiAodHlwZW9mIGFubm90YXRpb25PYmplY3QgPT09IFwib2JqZWN0XCIpIHtcblx0XHRpZiAoYW5ub3RhdGlvbk9iamVjdC4kQW5ub3RhdGlvblBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJBbm5vdGF0aW9uUGF0aFwiLCBBbm5vdGF0aW9uUGF0aDogYW5ub3RhdGlvbk9iamVjdC4kQW5ub3RhdGlvblBhdGggfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJFBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJQYXRoXCIsIFBhdGg6IGFubm90YXRpb25PYmplY3QuJFBhdGggfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJERlY2ltYWwgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJEZWNpbWFsXCIsIERlY2ltYWw6IHBhcnNlRmxvYXQoYW5ub3RhdGlvbk9iamVjdC4kRGVjaW1hbCkgfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJFByb3BlcnR5UGF0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIlByb3BlcnR5UGF0aFwiLCBQcm9wZXJ0eVBhdGg6IGFubm90YXRpb25PYmplY3QuJFByb3BlcnR5UGF0aCB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kSWYgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJJZlwiLCAkSWY6IGFubm90YXRpb25PYmplY3QuJElmIGFzIFtFeHByZXNzaW9uLCBFeHByZXNzaW9uLCBFeHByZXNzaW9uXSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kQW5kICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiQW5kXCIsICRBbmQ6IGFubm90YXRpb25PYmplY3QuJEFuZCBhcyBbRXhwcmVzc2lvbiwgRXhwcmVzc2lvbl0gfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJE9yICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiT3JcIiwgJE9yOiBhbm5vdGF0aW9uT2JqZWN0LiRPciBhcyBbRXhwcmVzc2lvbiwgRXhwcmVzc2lvbl0gfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJE5vdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIk5vdFwiLCAkTm90OiBhbm5vdGF0aW9uT2JqZWN0LiROb3QgYXMgRXhwcmVzc2lvbiB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kRXEgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJFcVwiLCAkRXE6IGFubm90YXRpb25PYmplY3QuJEVxIGFzIFtFeHByZXNzaW9uLCBFeHByZXNzaW9uXSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kTmUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJOZVwiLCAkTmU6IGFubm90YXRpb25PYmplY3QuJE5lIGFzIFtFeHByZXNzaW9uLCBFeHByZXNzaW9uXSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kR3QgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJHdFwiLCAkR3Q6IGFubm90YXRpb25PYmplY3QuJEd0IGFzIFtFeHByZXNzaW9uLCBFeHByZXNzaW9uXSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kR2UgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJHZVwiLCAkR2U6IGFubm90YXRpb25PYmplY3QuJEdlIGFzIFtFeHByZXNzaW9uLCBFeHByZXNzaW9uXSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kTHQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJMdFwiLCAkTHQ6IGFubm90YXRpb25PYmplY3QuJEx0IGFzIFtFeHByZXNzaW9uLCBFeHByZXNzaW9uXSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kTGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJMZVwiLCAkTGU6IGFubm90YXRpb25PYmplY3QuJExlIGFzIFtFeHByZXNzaW9uLCBFeHByZXNzaW9uXSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kQXBwbHkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHtcblx0XHRcdFx0dHlwZTogXCJBcHBseVwiLFxuXHRcdFx0XHQkQXBwbHk6IGFubm90YXRpb25PYmplY3QuJEFwcGx5LFxuXHRcdFx0XHQkRnVuY3Rpb246IGFubm90YXRpb25PYmplY3QuJEZ1bmN0aW9uXG5cdFx0XHR9IGFzIEFwcGx5RXhwcmVzc2lvbjtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHtcblx0XHRcdFx0dHlwZTogXCJOYXZpZ2F0aW9uUHJvcGVydHlQYXRoXCIsXG5cdFx0XHRcdE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IGFubm90YXRpb25PYmplY3QuJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcblx0XHRcdH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRFbnVtTWVtYmVyICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7XG5cdFx0XHRcdHR5cGU6IFwiRW51bU1lbWJlclwiLFxuXHRcdFx0XHRFbnVtTWVtYmVyOiBhbm5vdGF0aW9uT2JqZWN0LiRFbnVtTWVtYmVyXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBwYXJzZWRBbm5vdGF0aW9uT2JqZWN0UmVjb3JkOiBBbm5vdGF0aW9uUmVjb3JkID0ge1xuXHRcdFx0XHR0eXBlOiBcIlJlY29yZFwiLFxuXHRcdFx0XHRwcm9wZXJ0eVZhbHVlczogW11cblx0XHRcdH07XG5cdFx0XHRpZiAoYW5ub3RhdGlvbk9iamVjdC4kVHlwZSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0UmVjb3JkLnR5cGUgPSBhbm5vdGF0aW9uT2JqZWN0LiRUeXBlO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgcHJvcGVydHlWYWx1ZXM6IFByb3BlcnR5VmFsdWVbXSA9IFtdO1xuXHRcdFx0T2JqZWN0LmtleXMoYW5ub3RhdGlvbk9iamVjdCkuZm9yRWFjaCgocHJvcGVydHlLZXkpID0+IHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHByb3BlcnR5S2V5ICE9PSBcIiRUeXBlXCIgJiZcblx0XHRcdFx0XHRwcm9wZXJ0eUtleSAhPT0gXCIkSWZcIiAmJlxuXHRcdFx0XHRcdHByb3BlcnR5S2V5ICE9PSBcIiRBcHBseVwiICYmXG5cdFx0XHRcdFx0cHJvcGVydHlLZXkgIT09IFwiJEFuZFwiICYmXG5cdFx0XHRcdFx0cHJvcGVydHlLZXkgIT09IFwiJE9yXCIgJiZcblx0XHRcdFx0XHRwcm9wZXJ0eUtleSAhPT0gXCIkTmVcIiAmJlxuXHRcdFx0XHRcdHByb3BlcnR5S2V5ICE9PSBcIiRHdFwiICYmXG5cdFx0XHRcdFx0cHJvcGVydHlLZXkgIT09IFwiJEdlXCIgJiZcblx0XHRcdFx0XHRwcm9wZXJ0eUtleSAhPT0gXCIkTHRcIiAmJlxuXHRcdFx0XHRcdHByb3BlcnR5S2V5ICE9PSBcIiRMZVwiICYmXG5cdFx0XHRcdFx0cHJvcGVydHlLZXkgIT09IFwiJE5vdFwiICYmXG5cdFx0XHRcdFx0cHJvcGVydHlLZXkgIT09IFwiJEVxXCIgJiZcblx0XHRcdFx0XHQhcHJvcGVydHlLZXkuc3RhcnRzV2l0aChcIkBcIilcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cHJvcGVydHlWYWx1ZXMucHVzaChcblx0XHRcdFx0XHRcdHBhcnNlUHJvcGVydHlWYWx1ZShhbm5vdGF0aW9uT2JqZWN0W3Byb3BlcnR5S2V5XSwgcHJvcGVydHlLZXksIGN1cnJlbnRPYmplY3RUYXJnZXQsIGFubm90YXRpb25zTGlzdHMsIG9DYXBhYmlsaXRpZXMpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSBlbHNlIGlmIChwcm9wZXJ0eUtleS5zdGFydHNXaXRoKFwiQFwiKSkge1xuXHRcdFx0XHRcdC8vIEFubm90YXRpb24gb2YgYW5ub3RhdGlvblxuXHRcdFx0XHRcdGNyZWF0ZUFubm90YXRpb25MaXN0cyhcblx0XHRcdFx0XHRcdHsgW3Byb3BlcnR5S2V5XTogYW5ub3RhdGlvbk9iamVjdFtwcm9wZXJ0eUtleV0gfSxcblx0XHRcdFx0XHRcdGN1cnJlbnRPYmplY3RUYXJnZXQsXG5cdFx0XHRcdFx0XHRhbm5vdGF0aW9uc0xpc3RzLFxuXHRcdFx0XHRcdFx0b0NhcGFiaWxpdGllc1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdFJlY29yZC5wcm9wZXJ0eVZhbHVlcyA9IHByb3BlcnR5VmFsdWVzO1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHBhcnNlZEFubm90YXRpb25PYmplY3RSZWNvcmQ7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ITtcbn1cbmZ1bmN0aW9uIGdldE9yQ3JlYXRlQW5ub3RhdGlvbkxpc3QodGFyZ2V0OiBzdHJpbmcsIGFubm90YXRpb25zTGlzdHM6IFJlY29yZDxzdHJpbmcsIEFubm90YXRpb25MaXN0Pik6IEFubm90YXRpb25MaXN0IHtcblx0aWYgKCFhbm5vdGF0aW9uc0xpc3RzLmhhc093blByb3BlcnR5KHRhcmdldCkpIHtcblx0XHRhbm5vdGF0aW9uc0xpc3RzW3RhcmdldF0gPSB7XG5cdFx0XHR0YXJnZXQ6IHRhcmdldCxcblx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdH07XG5cdH1cblx0cmV0dXJuIGFubm90YXRpb25zTGlzdHNbdGFyZ2V0XTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUmVmZXJlbmNlRmFjZXRJZChyZWZlcmVuY2VGYWNldDogTWV0YU1vZGVsVHlwZTxSZWZlcmVuY2VGYWNldD4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRjb25zdCBpZCA9IHJlZmVyZW5jZUZhY2V0LklEID8/IHJlZmVyZW5jZUZhY2V0LlRhcmdldD8uJEFubm90YXRpb25QYXRoO1xuXHRyZXR1cm4gaWQgPyBwcmVwYXJlSWQoaWQpIDogaWQ7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNoYXJ0QW5ub3RhdGlvbnMoYW5ub3RhdGlvbk9iamVjdDogTWV0YU1vZGVsVHlwZTxIZWFkZXJGYWNldHM+IHwgTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPltdKTogdW5rbm93bltdIHtcblx0cmV0dXJuIGFubm90YXRpb25PYmplY3QuZmlsdGVyKChvUmVjb3JkOiBNZXRhTW9kZWxUeXBlPEZhY2V0VHlwZXM+IHwgTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPik6IGJvb2xlYW4gPT4ge1xuXHRcdGNvbnN0IHJlY29yZEFzUmVmRmFjZXQgPSBvUmVjb3JkIGFzIE1ldGFNb2RlbFR5cGU8UmVmZXJlbmNlRmFjZXQ+O1xuXHRcdGlmIChyZWNvcmRBc1JlZkZhY2V0LlRhcmdldCAmJiByZWNvcmRBc1JlZkZhY2V0LlRhcmdldC4kQW5ub3RhdGlvblBhdGgpIHtcblx0XHRcdHJldHVybiAhcmVjb3JkQXNSZWZGYWNldC5UYXJnZXQuJEFubm90YXRpb25QYXRoLmluY2x1ZGVzKGBAJHtVSUFubm90YXRpb25UZXJtcy5DaGFydH1gKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlSUJOQW5ub3RhdGlvbnMoYW5ub3RhdGlvbk9iamVjdDogTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPltdKTogTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPltdIHtcblx0cmV0dXJuIGFubm90YXRpb25PYmplY3QuZmlsdGVyKChvUmVjb3JkOiBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+KTogYm9vbGVhbiA9PiB7XG5cdFx0cmV0dXJuIG9SZWNvcmQuJFR5cGUgIT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVByZXNlbnRhdGlvblZhcmlhbnQoXG5cdGFubm90YXRpb25PYmplY3Q6IEV4cGFuZFBhdGhUeXBlPEFubm90YXRpb25QYXRoPENoYXJ0IHwgRGF0YVBvaW50IHwgTGluZUl0ZW0+PltdXG4pOiBFeHBhbmRQYXRoVHlwZTxBbm5vdGF0aW9uUGF0aDxDaGFydCB8IERhdGFQb2ludCB8IExpbmVJdGVtPj5bXSB7XG5cdHJldHVybiBhbm5vdGF0aW9uT2JqZWN0LmZpbHRlcigob1JlY29yZCk6IGJvb2xlYW4gPT4ge1xuXHRcdHJldHVybiBvUmVjb3JkLiRBbm5vdGF0aW9uUGF0aCAhPT0gYEAke1VJQW5ub3RhdGlvblRlcm1zLkNoYXJ0fWA7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVBbm5vdGF0aW9uTGlzdHMoXG5cdGFubm90YXRpb25PYmplY3RzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0YW5ub3RhdGlvblRhcmdldDogc3RyaW5nLFxuXHRhbm5vdGF0aW9uTGlzdHM6IFJlY29yZDxzdHJpbmcsIEFubm90YXRpb25MaXN0Pixcblx0b0NhcGFiaWxpdGllczogRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNcbik6IHZvaWQge1xuXHRpZiAoT2JqZWN0LmtleXMoYW5ub3RhdGlvbk9iamVjdHMpLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybjtcblx0fVxuXHRjb25zdCBvdXRBbm5vdGF0aW9uT2JqZWN0ID0gZ2V0T3JDcmVhdGVBbm5vdGF0aW9uTGlzdChhbm5vdGF0aW9uVGFyZ2V0LCBhbm5vdGF0aW9uTGlzdHMpO1xuXHRpZiAoIW9DYXBhYmlsaXRpZXMuTWljcm9DaGFydCkge1xuXHRcdGRlbGV0ZSBhbm5vdGF0aW9uT2JqZWN0c1tgQCR7VUlBbm5vdGF0aW9uVGVybXMuQ2hhcnR9YF07XG5cdH0gZWxzZSB7XG5cdFx0b0NhcGFiaWxpdGllcy5sb2FkTGlicmFyeT8uKFwic2FwLnN1aXRlLnVpLm1pY3JvY2hhcnRcIik7XG5cdH1cblxuXHRmb3IgKGNvbnN0IGFubm90YXRpb25LZXkgaW4gYW5ub3RhdGlvbk9iamVjdHMpIHtcblx0XHRsZXQgYW5ub3RhdGlvbk9iamVjdCA9IGFubm90YXRpb25PYmplY3RzW2Fubm90YXRpb25LZXldO1xuXHRcdHN3aXRjaCAoYW5ub3RhdGlvbktleSkge1xuXHRcdFx0Y2FzZSBgQCR7VUlBbm5vdGF0aW9uVGVybXMuSGVhZGVyRmFjZXRzfWA6XG5cdFx0XHRcdGlmICghb0NhcGFiaWxpdGllcy5NaWNyb0NoYXJ0KSB7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbk9iamVjdCA9IHJlbW92ZUNoYXJ0QW5ub3RhdGlvbnMoYW5ub3RhdGlvbk9iamVjdCBhcyBNZXRhTW9kZWxUeXBlPEhlYWRlckZhY2V0cz4pO1xuXHRcdFx0XHRcdGFubm90YXRpb25PYmplY3RzW2Fubm90YXRpb25LZXldID0gYW5ub3RhdGlvbk9iamVjdDtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgYEAke1VJQW5ub3RhdGlvblRlcm1zLklkZW50aWZpY2F0aW9ufWA6XG5cdFx0XHRcdGlmICghb0NhcGFiaWxpdGllcy5JbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdFx0XHRhbm5vdGF0aW9uT2JqZWN0ID0gcmVtb3ZlSUJOQW5ub3RhdGlvbnMoYW5ub3RhdGlvbk9iamVjdCBhcyBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+W10pO1xuXHRcdFx0XHRcdGFubm90YXRpb25PYmplY3RzW2Fubm90YXRpb25LZXldID0gYW5ub3RhdGlvbk9iamVjdDtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgYEAke1VJQW5ub3RhdGlvblRlcm1zLkxpbmVJdGVtfWA6XG5cdFx0XHRcdGlmICghb0NhcGFiaWxpdGllcy5JbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdFx0XHRhbm5vdGF0aW9uT2JqZWN0ID0gcmVtb3ZlSUJOQW5ub3RhdGlvbnMoYW5ub3RhdGlvbk9iamVjdCBhcyBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+W10pO1xuXHRcdFx0XHRcdGFubm90YXRpb25PYmplY3RzW2Fubm90YXRpb25LZXldID0gYW5ub3RhdGlvbk9iamVjdDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIW9DYXBhYmlsaXRpZXMuTWljcm9DaGFydCkge1xuXHRcdFx0XHRcdGFubm90YXRpb25PYmplY3QgPSByZW1vdmVDaGFydEFubm90YXRpb25zKGFubm90YXRpb25PYmplY3QgYXMgTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPltdKTtcblx0XHRcdFx0XHRhbm5vdGF0aW9uT2JqZWN0c1thbm5vdGF0aW9uS2V5XSA9IGFubm90YXRpb25PYmplY3Q7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIGBAJHtVSUFubm90YXRpb25UZXJtcy5GaWVsZEdyb3VwfWA6XG5cdFx0XHRcdGNvbnN0IGZpZWxkR3JvdXBBbm5vdGF0aW9uID0gYW5ub3RhdGlvbk9iamVjdCBhcyBNZXRhTW9kZWxUeXBlPEZpZWxkR3JvdXA+O1xuXHRcdFx0XHRpZiAoIW9DYXBhYmlsaXRpZXMuSW50ZW50QmFzZWROYXZpZ2F0aW9uICYmIGZpZWxkR3JvdXBBbm5vdGF0aW9uLkRhdGEpIHtcblx0XHRcdFx0XHRmaWVsZEdyb3VwQW5ub3RhdGlvbi5EYXRhID0gcmVtb3ZlSUJOQW5ub3RhdGlvbnMoZmllbGRHcm91cEFubm90YXRpb24uRGF0YSk7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbk9iamVjdHNbYW5ub3RhdGlvbktleV0gPSBhbm5vdGF0aW9uT2JqZWN0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghb0NhcGFiaWxpdGllcy5NaWNyb0NoYXJ0ICYmIGZpZWxkR3JvdXBBbm5vdGF0aW9uLkRhdGEpIHtcblx0XHRcdFx0XHRmaWVsZEdyb3VwQW5ub3RhdGlvbi5EYXRhID0gcmVtb3ZlQ2hhcnRBbm5vdGF0aW9ucyhcblx0XHRcdFx0XHRcdGZpZWxkR3JvdXBBbm5vdGF0aW9uLkRhdGFcblx0XHRcdFx0XHQpIGFzIE1ldGFNb2RlbFR5cGU8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcz5bXTtcblx0XHRcdFx0XHRhbm5vdGF0aW9uT2JqZWN0c1thbm5vdGF0aW9uS2V5XSA9IGFubm90YXRpb25PYmplY3Q7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIGBAJHtVSUFubm90YXRpb25UZXJtcy5QcmVzZW50YXRpb25WYXJpYW50fWA6XG5cdFx0XHRcdGNvbnN0IHByZXNlbnRhdGlvblZhcmlhbnQgPSBhbm5vdGF0aW9uT2JqZWN0IGFzIE1ldGFNb2RlbFR5cGU8UHJlc2VudGF0aW9uVmFyaWFudD47XG5cdFx0XHRcdGlmICghb0NhcGFiaWxpdGllcy5DaGFydCAmJiBwcmVzZW50YXRpb25WYXJpYW50LlZpc3VhbGl6YXRpb25zKSB7XG5cdFx0XHRcdFx0cHJlc2VudGF0aW9uVmFyaWFudC5WaXN1YWxpemF0aW9ucyA9IGhhbmRsZVByZXNlbnRhdGlvblZhcmlhbnQocHJlc2VudGF0aW9uVmFyaWFudC5WaXN1YWxpemF0aW9ucyk7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbk9iamVjdHNbYW5ub3RhdGlvbktleV0gPSBhbm5vdGF0aW9uT2JqZWN0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBgQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3RgOlxuXHRcdFx0XHQvLyBUaGlzIHNjZW5hcmlvIGlzIG5lZWRlZCBmb3IgZW5hYmxpbmcgc2VtYW50aWMgZmlsdGVyaW5nIG9uIERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhLWZpbHRlcnMuIEFzIG9mIG5vdyB0aGUgU2luZ2xlUmFuZ2UgYW5ub3RhdGlvbiBpcyByZWFkIGJ5IHRoZVxuXHRcdFx0XHQvLyBGaWVsZEhlbHBlciwgd2hpY2ggc2hvdWxkIG5vdCBpbmNsdWRlIGFueSBwcm9wZXJ0eXNwZWNpZmljIGxvZ2ljLiBXZSB3aWxsIHJlbW92ZSB0aGlzIG9uY2UgdGhlIEZpZWxkSGVscGVyIHJlY2VpdmVzIHRoZSBTaW5nbGVSYW5nZSBkYXRhIGZyb21cblx0XHRcdFx0Ly8gdGhlIGNvbnZlcnRlciBvciBoYXZpbmcgaXQgc2V0IGlzIG5vIGxvbmdlciBhIHByZXJlcXVpc2l0ZSBmb3IgdGhlIHNlbWFudGljIGZpbHRlcmluZy5cblx0XHRcdFx0Y29uc3QgZmlsdGVyUmVzdHJpY3Rpb25zID0gYW5ub3RhdGlvbk9iamVjdHNbYEBPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkZpbHRlclJlc3RyaWN0aW9uc2BdIGFzXG5cdFx0XHRcdFx0fCBNZXRhTW9kZWxUeXBlPEZpbHRlclJlc3RyaWN0aW9ucz5cblx0XHRcdFx0XHR8IHVuZGVmaW5lZDtcblx0XHRcdFx0aWYgKGZpbHRlclJlc3RyaWN0aW9ucz8uRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucz8ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0IWZpbHRlclJlc3RyaWN0aW9ucy5GaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zLnNvbWUoKEZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbikgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9uPy5Qcm9wZXJ0eT8uJFByb3BlcnR5UGF0aC5pbmNsdWRlcyhcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhXCIpO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdGZpbHRlclJlc3RyaWN0aW9ucy5GaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zLnB1c2goXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHQkVHlwZTogXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvblR5cGVcIixcblx0XHRcdFx0XHRcdFx0XHRBbGxvd2VkRXhwcmVzc2lvbnM6IFwiU2luZ2xlUmFuZ2VcIixcblx0XHRcdFx0XHRcdFx0XHRQcm9wZXJ0eToge1xuXHRcdFx0XHRcdFx0XHRcdFx0JFByb3BlcnR5UGF0aDogXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9DcmVhdGlvbkRhdGVUaW1lXCJcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogdW5kZWZpbmVkXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHQkVHlwZTogXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvblR5cGVcIixcblx0XHRcdFx0XHRcdFx0XHRBbGxvd2VkRXhwcmVzc2lvbnM6IFwiU2luZ2xlUmFuZ2VcIixcblx0XHRcdFx0XHRcdFx0XHRQcm9wZXJ0eToge1xuXHRcdFx0XHRcdFx0XHRcdFx0JFByb3BlcnR5UGF0aDogXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9MYXN0Q2hhbmdlRGF0ZVRpbWVcIlxuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiB1bmRlZmluZWRcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cblx0XHRsZXQgY3VycmVudE91dEFubm90YXRpb25PYmplY3QgPSBvdXRBbm5vdGF0aW9uT2JqZWN0O1xuXG5cdFx0Ly8gQ2hlY2sgZm9yIGFubm90YXRpb24gb2YgYW5ub3RhdGlvblxuXHRcdGxldCBmaW5hbEtleSA9IGFubm90YXRpb25LZXk7XG5cdFx0Y29uc3QgYW5ub3RhdGlvbk9mQW5ub3RhdGlvblNwbGl0ID0gYW5ub3RhdGlvbktleS5zcGxpdChcIkBcIik7XG5cdFx0aWYgKGFubm90YXRpb25PZkFubm90YXRpb25TcGxpdC5sZW5ndGggPiAyKSB7XG5cdFx0XHRjdXJyZW50T3V0QW5ub3RhdGlvbk9iamVjdCA9IGdldE9yQ3JlYXRlQW5ub3RhdGlvbkxpc3QoXG5cdFx0XHRcdGAke2Fubm90YXRpb25UYXJnZXR9QCR7YW5ub3RhdGlvbk9mQW5ub3RhdGlvblNwbGl0WzFdfWAsXG5cdFx0XHRcdGFubm90YXRpb25MaXN0c1xuXHRcdFx0KTtcblx0XHRcdGZpbmFsS2V5ID0gYW5ub3RhdGlvbk9mQW5ub3RhdGlvblNwbGl0WzJdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRmaW5hbEtleSA9IGFubm90YXRpb25PZkFubm90YXRpb25TcGxpdFsxXTtcblx0XHR9XG5cblx0XHRjb25zdCBhbm5vdGF0aW9uUXVhbGlmaWVyU3BsaXQgPSBmaW5hbEtleS5zcGxpdChcIiNcIik7XG5cdFx0Y29uc3QgcXVhbGlmaWVyID0gYW5ub3RhdGlvblF1YWxpZmllclNwbGl0WzFdO1xuXHRcdGZpbmFsS2V5ID0gYW5ub3RhdGlvblF1YWxpZmllclNwbGl0WzBdO1xuXG5cdFx0Y29uc3QgcGFyc2VkQW5ub3RhdGlvbk9iamVjdDogUmF3QW5ub3RhdGlvbiA9IHtcblx0XHRcdHRlcm06IGZpbmFsS2V5LFxuXHRcdFx0cXVhbGlmaWVyOiBxdWFsaWZpZXJcblx0XHR9O1xuXHRcdGxldCBjdXJyZW50QW5ub3RhdGlvblRhcmdldCA9IGAke2Fubm90YXRpb25UYXJnZXR9QCR7cGFyc2VkQW5ub3RhdGlvbk9iamVjdC50ZXJtfWA7XG5cdFx0aWYgKHF1YWxpZmllcikge1xuXHRcdFx0Y3VycmVudEFubm90YXRpb25UYXJnZXQgKz0gYCMke3F1YWxpZmllcn1gO1xuXHRcdH1cblx0XHRjb25zdCBhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZSA9IGFubm90YXRpb25PYmplY3QgYXMgTWV0YU1vZGVsQW5ub3RhdGlvbjtcblx0XHRpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UgPT09IG51bGwpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiTnVsbFwiIH07XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiU3RyaW5nXCIsIFN0cmluZzogYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UgfTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZSA9PT0gXCJib29sZWFuXCIpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiQm9vbFwiLCBCb29sOiBhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZSB9O1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mIGFubm90YXRpb25PYmplY3RUb1BhcnNlID09PSBcIm51bWJlclwiKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0geyB0eXBlOiBcIkludFwiLCBJbnQ6IGFubm90YXRpb25PYmplY3RUb1BhcnNlIH07XG5cdFx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFubm90YXRpb25PYmplY3RUb1BhcnNlKSkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uID0gYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UubWFwKChzdWJBbm5vdGF0aW9uT2JqZWN0LCBzdWJBbm5vdGF0aW9uSW5kZXgpID0+XG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbk9iamVjdChcblx0XHRcdFx0XHRzdWJBbm5vdGF0aW9uT2JqZWN0LFxuXHRcdFx0XHRcdGAke2N1cnJlbnRBbm5vdGF0aW9uVGFyZ2V0fS8ke3N1YkFubm90YXRpb25JbmRleH1gLFxuXHRcdFx0XHRcdGFubm90YXRpb25MaXN0cyxcblx0XHRcdFx0XHRvQ2FwYWJpbGl0aWVzXG5cdFx0XHRcdClcblx0XHRcdCkgYXMgQ29sbGVjdGlvbjtcblx0XHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZVswXS5oYXNPd25Qcm9wZXJ0eShcIiRQcm9wZXJ0eVBhdGhcIikpIHtcblx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24udHlwZSA9IFwiUHJvcGVydHlQYXRoXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2VbMF0uaGFzT3duUHJvcGVydHkoXCIkUGF0aFwiKSkge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJQYXRoXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2VbMF0uaGFzT3duUHJvcGVydHkoXCIkTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiKSkge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJOYXZpZ2F0aW9uUHJvcGVydHlQYXRoXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2VbMF0uaGFzT3duUHJvcGVydHkoXCIkQW5ub3RhdGlvblBhdGhcIikpIHtcblx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24udHlwZSA9IFwiQW5ub3RhdGlvblBhdGhcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZVswXS5oYXNPd25Qcm9wZXJ0eShcIiRUeXBlXCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIlJlY29yZFwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RUb1BhcnNlWzBdLmhhc093blByb3BlcnR5KFwiJElmXCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIklmXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2VbMF0uaGFzT3duUHJvcGVydHkoXCIkT3JcIikpIHtcblx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24udHlwZSA9IFwiT3JcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZVswXS5oYXNPd25Qcm9wZXJ0eShcIiRFcVwiKSkge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJFcVwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RUb1BhcnNlWzBdLmhhc093blByb3BlcnR5KFwiJE5lXCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIk5lXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2VbMF0uaGFzT3duUHJvcGVydHkoXCIkTm90XCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIk5vdFwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RUb1BhcnNlWzBdLmhhc093blByb3BlcnR5KFwiJEd0XCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIkd0XCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2VbMF0uaGFzT3duUHJvcGVydHkoXCIkR2VcIikpIHtcblx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24udHlwZSA9IFwiR2VcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZVswXS5oYXNPd25Qcm9wZXJ0eShcIiRMdFwiKSkge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJMdFwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RUb1BhcnNlWzBdLmhhc093blByb3BlcnR5KFwiJExlXCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIkxlXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2VbMF0uaGFzT3duUHJvcGVydHkoXCIkQW5kXCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIkFuZFwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RUb1BhcnNlWzBdLmhhc093blByb3BlcnR5KFwiJEFwcGx5XCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIkFwcGx5XCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIGFubm90YXRpb25PYmplY3RUb1BhcnNlWzBdID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIlJlY29yZFwiO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJTdHJpbmdcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodHlwZW9mIGFubm90YXRpb25PYmplY3RUb1BhcnNlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UuJElmICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJJZlwiLCAkSWY6IGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRJZiBhcyBbRXhwcmVzc2lvbiwgRXhwcmVzc2lvbiwgRXhwcmVzc2lvbl0gfTtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UuJEFuZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiQW5kXCIsICRBbmQ6IGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRBbmQgYXMgW0V4cHJlc3Npb24sIEV4cHJlc3Npb25dIH07XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRPciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiT3JcIiwgJE9yOiBhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZS4kT3IgYXMgW0V4cHJlc3Npb24sIEV4cHJlc3Npb25dIH07XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RUb1BhcnNlLiROb3QgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0geyB0eXBlOiBcIk5vdFwiLCAkTm90OiBhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZS4kTm90IGFzIEV4cHJlc3Npb24gfTtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UuJEVxICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJFcVwiLCAkRXE6IGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRFcSBhcyBbRXhwcmVzc2lvbiwgRXhwcmVzc2lvbl0gfTtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UuJE5lICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJOZVwiLCAkTmU6IGFubm90YXRpb25PYmplY3RUb1BhcnNlLiROZSBhcyBbRXhwcmVzc2lvbiwgRXhwcmVzc2lvbl0gfTtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UuJEd0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJHdFwiLCAkR3Q6IGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRHdCBhcyBbRXhwcmVzc2lvbiwgRXhwcmVzc2lvbl0gfTtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UuJEdlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJHZVwiLCAkR2U6IGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRHZSBhcyBbRXhwcmVzc2lvbiwgRXhwcmVzc2lvbl0gfTtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UuJEx0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJMdFwiLCAkTHQ6IGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRMdCBhcyBbRXhwcmVzc2lvbiwgRXhwcmVzc2lvbl0gfTtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UuJExlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJMZVwiLCAkTGU6IGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRMZSBhcyBbRXhwcmVzc2lvbiwgRXhwcmVzc2lvbl0gfTtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UuJEFwcGx5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHtcblx0XHRcdFx0XHR0eXBlOiBcIkFwcGx5XCIsXG5cdFx0XHRcdFx0JEFwcGx5OiBhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZS4kQXBwbHksXG5cdFx0XHRcdFx0JEZ1bmN0aW9uOiBhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZS4kRnVuY3Rpb25cblx0XHRcdFx0fSBhcyBBcHBseUV4cHJlc3Npb247XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRQYXRoICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJQYXRoXCIsIFBhdGg6IGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRQYXRoIH07XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRBbm5vdGF0aW9uUGF0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7XG5cdFx0XHRcdFx0dHlwZTogXCJBbm5vdGF0aW9uUGF0aFwiLFxuXHRcdFx0XHRcdEFubm90YXRpb25QYXRoOiBhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZS4kQW5ub3RhdGlvblBhdGhcblx0XHRcdFx0fTtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UuJERlY2ltYWwgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0geyB0eXBlOiBcIkRlY2ltYWxcIiwgRGVjaW1hbDogcGFyc2VGbG9hdChhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZS4kRGVjaW1hbCkgfTtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UuJEVudW1NZW1iZXIgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0ge1xuXHRcdFx0XHRcdHR5cGU6IFwiRW51bU1lbWJlclwiLFxuXHRcdFx0XHRcdEVudW1NZW1iZXI6IGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRFbnVtTWVtYmVyXG5cdFx0XHRcdH07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCByZWNvcmQ6IEFubm90YXRpb25SZWNvcmQgPSB7XG5cdFx0XHRcdFx0cHJvcGVydHlWYWx1ZXM6IFtdXG5cdFx0XHRcdH07XG5cdFx0XHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZS4kVHlwZSkge1xuXHRcdFx0XHRcdGNvbnN0IHR5cGVWYWx1ZSA9IGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRUeXBlO1xuXHRcdFx0XHRcdHJlY29yZC50eXBlID0gYCR7dHlwZVZhbHVlfWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgcHJvcGVydHlWYWx1ZXM6IHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogRXhwcmVzc2lvbiB9W10gPSBbXTtcblx0XHRcdFx0Zm9yIChjb25zdCBwcm9wZXJ0eUtleSBpbiBhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZSkge1xuXHRcdFx0XHRcdGlmIChwcm9wZXJ0eUtleSAhPT0gXCIkVHlwZVwiICYmICFwcm9wZXJ0eUtleS5zdGFydHNXaXRoKFwiQFwiKSkge1xuXHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZXMucHVzaChcblx0XHRcdFx0XHRcdFx0cGFyc2VQcm9wZXJ0eVZhbHVlKFxuXHRcdFx0XHRcdFx0XHRcdGFubm90YXRpb25PYmplY3RUb1BhcnNlW3Byb3BlcnR5S2V5XSxcblx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0eUtleSxcblx0XHRcdFx0XHRcdFx0XHRjdXJyZW50QW5ub3RhdGlvblRhcmdldCxcblx0XHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uTGlzdHMsXG5cdFx0XHRcdFx0XHRcdFx0b0NhcGFiaWxpdGllc1xuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAocHJvcGVydHlLZXkuc3RhcnRzV2l0aChcIkBcIikpIHtcblx0XHRcdFx0XHRcdC8vIEFubm90YXRpb24gb2YgcmVjb3JkXG5cdFx0XHRcdFx0XHRjcmVhdGVBbm5vdGF0aW9uTGlzdHMoXG5cdFx0XHRcdFx0XHRcdHsgW3Byb3BlcnR5S2V5XTogYW5ub3RhdGlvbk9iamVjdFRvUGFyc2VbcHJvcGVydHlLZXldIH0sXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRBbm5vdGF0aW9uVGFyZ2V0LFxuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uTGlzdHMsXG5cdFx0XHRcdFx0XHRcdG9DYXBhYmlsaXRpZXNcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJlY29yZC5wcm9wZXJ0eVZhbHVlcyA9IHByb3BlcnR5VmFsdWVzO1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnJlY29yZCA9IHJlY29yZDtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y3VycmVudE91dEFubm90YXRpb25PYmplY3QuYW5ub3RhdGlvbnMucHVzaChwYXJzZWRBbm5vdGF0aW9uT2JqZWN0KTtcblx0fVxufVxuXG5mdW5jdGlvbiBwcmVwYXJlUHJvcGVydHkoXG5cdHByb3BlcnR5RGVmaW5pdGlvbjogTWV0YU1vZGVsUHJvcGVydHksXG5cdGVudGl0eVR5cGVPYmplY3Q6IFJhd0VudGl0eVR5cGUgfCBSYXdDb21wbGV4VHlwZSxcblx0cHJvcGVydHlOYW1lOiBzdHJpbmdcbik6IFJhd1Byb3BlcnR5IHtcblx0cmV0dXJuIHtcblx0XHRfdHlwZTogXCJQcm9wZXJ0eVwiLFxuXHRcdG5hbWU6IHByb3BlcnR5TmFtZSxcblx0XHRmdWxseVF1YWxpZmllZE5hbWU6IGAke2VudGl0eVR5cGVPYmplY3QuZnVsbHlRdWFsaWZpZWROYW1lfS8ke3Byb3BlcnR5TmFtZX1gLFxuXHRcdHR5cGU6IHByb3BlcnR5RGVmaW5pdGlvbi4kVHlwZSxcblx0XHRtYXhMZW5ndGg6IHByb3BlcnR5RGVmaW5pdGlvbi4kTWF4TGVuZ3RoLFxuXHRcdHByZWNpc2lvbjogcHJvcGVydHlEZWZpbml0aW9uLiRQcmVjaXNpb24sXG5cdFx0c2NhbGU6IHByb3BlcnR5RGVmaW5pdGlvbi4kU2NhbGUsXG5cdFx0bnVsbGFibGU6IHByb3BlcnR5RGVmaW5pdGlvbi4kTnVsbGFibGUgPz8gdHJ1ZVxuXHR9O1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlTmF2aWdhdGlvblByb3BlcnR5KFxuXHRuYXZQcm9wZXJ0eURlZmluaXRpb246IE1ldGFNb2RlbE5hdmlnYXRpb25Qcm9wZXJ0eSxcblx0ZW50aXR5VHlwZU9iamVjdDogUmF3RW50aXR5VHlwZSB8IFJhd0NvbXBsZXhUeXBlLFxuXHRuYXZQcm9wZXJ0eU5hbWU6IHN0cmluZ1xuKTogUmF3VjROYXZpZ2F0aW9uUHJvcGVydHkge1xuXHRsZXQgcmVmZXJlbnRpYWxDb25zdHJhaW50OiBSZWZlcmVudGlhbENvbnN0cmFpbnRbXSA9IFtdO1xuXHRpZiAobmF2UHJvcGVydHlEZWZpbml0aW9uLiRSZWZlcmVudGlhbENvbnN0cmFpbnQpIHtcblx0XHRyZWZlcmVudGlhbENvbnN0cmFpbnQgPSBPYmplY3Qua2V5cyhuYXZQcm9wZXJ0eURlZmluaXRpb24uJFJlZmVyZW50aWFsQ29uc3RyYWludCkubWFwKChzb3VyY2VQcm9wZXJ0eU5hbWUpID0+IHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNvdXJjZVR5cGVOYW1lOiBlbnRpdHlUeXBlT2JqZWN0Lm5hbWUsXG5cdFx0XHRcdHNvdXJjZVByb3BlcnR5OiBzb3VyY2VQcm9wZXJ0eU5hbWUsXG5cdFx0XHRcdHRhcmdldFR5cGVOYW1lOiBuYXZQcm9wZXJ0eURlZmluaXRpb24uJFR5cGUsXG5cdFx0XHRcdHRhcmdldFByb3BlcnR5OiBuYXZQcm9wZXJ0eURlZmluaXRpb24uJFJlZmVyZW50aWFsQ29uc3RyYWludFtzb3VyY2VQcm9wZXJ0eU5hbWVdXG5cdFx0XHR9O1xuXHRcdH0pO1xuXHR9XG5cdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eTogUmF3VjROYXZpZ2F0aW9uUHJvcGVydHkgPSB7XG5cdFx0X3R5cGU6IFwiTmF2aWdhdGlvblByb3BlcnR5XCIsXG5cdFx0bmFtZTogbmF2UHJvcGVydHlOYW1lLFxuXHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogYCR7ZW50aXR5VHlwZU9iamVjdC5mdWxseVF1YWxpZmllZE5hbWV9LyR7bmF2UHJvcGVydHlOYW1lfWAsXG5cdFx0cGFydG5lcjogbmF2UHJvcGVydHlEZWZpbml0aW9uLiRQYXJ0bmVyLFxuXHRcdGlzQ29sbGVjdGlvbjogbmF2UHJvcGVydHlEZWZpbml0aW9uLiRpc0NvbGxlY3Rpb24gPyBuYXZQcm9wZXJ0eURlZmluaXRpb24uJGlzQ29sbGVjdGlvbiA6IGZhbHNlLFxuXHRcdGNvbnRhaW5zVGFyZ2V0OiAhIW5hdlByb3BlcnR5RGVmaW5pdGlvbi4kQ29udGFpbnNUYXJnZXQsXG5cdFx0dGFyZ2V0VHlwZU5hbWU6IG5hdlByb3BlcnR5RGVmaW5pdGlvbi4kVHlwZSxcblx0XHRyZWZlcmVudGlhbENvbnN0cmFpbnRcblx0fTtcblxuXHRyZXR1cm4gbmF2aWdhdGlvblByb3BlcnR5O1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlTmF2aWdhdGlvblByb3BlcnR5QmluZGluZyhcblx0bmF2aWdhdGlvblByb3BlcnR5QmluZGluZzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IHVuZGVmaW5lZCxcblx0ZW50aXR5Q29udGFpbmVyTmFtZTogc3RyaW5nXG4pOiBSYXdOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nIHtcblx0aWYgKG5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuXHRcdFx0T2JqZWN0LmVudHJpZXMobmF2aWdhdGlvblByb3BlcnR5QmluZGluZykubWFwKChbcGF0aCwgdGFyZ2V0XSkgPT4gW3BhdGgsIGAke2VudGl0eUNvbnRhaW5lck5hbWV9LyR7dGFyZ2V0fWBdKVxuXHRcdCk7XG5cdH1cblxuXHRyZXR1cm4ge307XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVFbnRpdHlTZXQoZW50aXR5U2V0RGVmaW5pdGlvbjogTWV0YU1vZGVsRW50aXR5U2V0LCBlbnRpdHlTZXROYW1lOiBzdHJpbmcsIGVudGl0eUNvbnRhaW5lck5hbWU6IHN0cmluZyk6IFJhd0VudGl0eVNldCB7XG5cdHJldHVybiB7XG5cdFx0X3R5cGU6IFwiRW50aXR5U2V0XCIsXG5cdFx0bmFtZTogZW50aXR5U2V0TmFtZSxcblx0XHRuYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nOiBwcmVwYXJlTmF2aWdhdGlvblByb3BlcnR5QmluZGluZyhlbnRpdHlTZXREZWZpbml0aW9uLiROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nLCBlbnRpdHlDb250YWluZXJOYW1lKSxcblx0XHRlbnRpdHlUeXBlTmFtZTogZW50aXR5U2V0RGVmaW5pdGlvbi4kVHlwZSxcblx0XHRmdWxseVF1YWxpZmllZE5hbWU6IGAke2VudGl0eUNvbnRhaW5lck5hbWV9LyR7ZW50aXR5U2V0TmFtZX1gXG5cdH07XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVTaW5nbGV0b24oc2luZ2xldG9uRGVmaW5pdGlvbjogTWV0YU1vZGVsU2luZ2xldG9uLCBzaW5nbGV0b25OYW1lOiBzdHJpbmcsIGVudGl0eUNvbnRhaW5lck5hbWU6IHN0cmluZyk6IFJhd1NpbmdsZXRvbiB7XG5cdHJldHVybiB7XG5cdFx0X3R5cGU6IFwiU2luZ2xldG9uXCIsXG5cdFx0bmFtZTogc2luZ2xldG9uTmFtZSxcblx0XHRuYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nOiBwcmVwYXJlTmF2aWdhdGlvblByb3BlcnR5QmluZGluZyhzaW5nbGV0b25EZWZpbml0aW9uLiROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nLCBlbnRpdHlDb250YWluZXJOYW1lKSxcblx0XHRlbnRpdHlUeXBlTmFtZTogc2luZ2xldG9uRGVmaW5pdGlvbi4kVHlwZSxcblx0XHRmdWxseVF1YWxpZmllZE5hbWU6IGAke2VudGl0eUNvbnRhaW5lck5hbWV9LyR7c2luZ2xldG9uTmFtZX1gLFxuXHRcdG51bGxhYmxlOiB0cnVlXG5cdH07XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVBY3Rpb25JbXBvcnQoXG5cdGFjdGlvbkltcG9ydDogTWV0YU1vZGVsQWN0aW9uSW1wb3J0IHwgTWV0YU1vZGVsRnVuY3Rpb25JbXBvcnQsXG5cdGFjdGlvbkltcG9ydE5hbWU6IHN0cmluZyxcblx0ZW50aXR5Q29udGFpbmVyTmFtZTogc3RyaW5nXG4pOiBSYXdBY3Rpb25JbXBvcnQge1xuXHRyZXR1cm4ge1xuXHRcdF90eXBlOiBcIkFjdGlvbkltcG9ydFwiLFxuXHRcdG5hbWU6IGFjdGlvbkltcG9ydE5hbWUsXG5cdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBgJHtlbnRpdHlDb250YWluZXJOYW1lfS8ke2FjdGlvbkltcG9ydE5hbWV9YCxcblx0XHRhY3Rpb25OYW1lOiBhY3Rpb25JbXBvcnQuJGtpbmQgPT09IFwiQWN0aW9uSW1wb3J0XCIgPyBhY3Rpb25JbXBvcnQuJEFjdGlvbiA6IGFjdGlvbkltcG9ydC4kRnVuY3Rpb25cblx0fTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZVR5cGVEZWZpbml0aW9uKHR5cGVEZWZpbml0aW9uOiBNZXRhTW9kZWxUeXBlRGVmaW5pdGlvbiwgdHlwZU5hbWU6IHN0cmluZywgbmFtZXNwYWNlUHJlZml4OiBzdHJpbmcpOiBSYXdUeXBlRGVmaW5pdGlvbiB7XG5cdGNvbnN0IHR5cGVPYmplY3Q6IFJhd1R5cGVEZWZpbml0aW9uID0ge1xuXHRcdF90eXBlOiBcIlR5cGVEZWZpbml0aW9uXCIsXG5cdFx0bmFtZTogdHlwZU5hbWUuc3Vic3RyaW5nKG5hbWVzcGFjZVByZWZpeC5sZW5ndGgpLFxuXHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogdHlwZU5hbWUsXG5cdFx0dW5kZXJseWluZ1R5cGU6IHR5cGVEZWZpbml0aW9uLiRVbmRlcmx5aW5nVHlwZVxuXHR9O1xuXHRyZXR1cm4gdHlwZU9iamVjdDtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZUNvbXBsZXhUeXBlKGNvbXBsZXhUeXBlRGVmaW5pdGlvbjogTWV0YU1vZGVsQ29tcGxleFR5cGUsIGNvbXBsZXhUeXBlTmFtZTogc3RyaW5nLCBuYW1lc3BhY2VQcmVmaXg6IHN0cmluZyk6IFJhd0NvbXBsZXhUeXBlIHtcblx0Y29uc3QgY29tcGxleFR5cGVPYmplY3Q6IFJhd0NvbXBsZXhUeXBlID0ge1xuXHRcdF90eXBlOiBcIkNvbXBsZXhUeXBlXCIsXG5cdFx0bmFtZTogY29tcGxleFR5cGVOYW1lLnN1YnN0cmluZyhuYW1lc3BhY2VQcmVmaXgubGVuZ3RoKSxcblx0XHRmdWxseVF1YWxpZmllZE5hbWU6IGNvbXBsZXhUeXBlTmFtZSxcblx0XHRwcm9wZXJ0aWVzOiBbXSxcblx0XHRuYXZpZ2F0aW9uUHJvcGVydGllczogW11cblx0fTtcblxuXHRjb25zdCBjb21wbGV4VHlwZVByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhjb21wbGV4VHlwZURlZmluaXRpb24pXG5cdFx0LmZpbHRlcigocHJvcGVydHlOYW1lT3JOb3QpID0+IHtcblx0XHRcdGlmIChwcm9wZXJ0eU5hbWVPck5vdCAhPSBcIiRLZXlcIiAmJiBwcm9wZXJ0eU5hbWVPck5vdCAhPSBcIiRraW5kXCIpIHtcblx0XHRcdFx0cmV0dXJuIGNvbXBsZXhUeXBlRGVmaW5pdGlvbltwcm9wZXJ0eU5hbWVPck5vdF0uJGtpbmQgPT09IFwiUHJvcGVydHlcIjtcblx0XHRcdH1cblx0XHR9KVxuXHRcdC5zb3J0KChhLCBiKSA9PiAoYSA+IGIgPyAxIDogLTEpKVxuXHRcdC5tYXAoKHByb3BlcnR5TmFtZSkgPT4ge1xuXHRcdFx0cmV0dXJuIHByZXBhcmVQcm9wZXJ0eShjb21wbGV4VHlwZURlZmluaXRpb25bcHJvcGVydHlOYW1lXSBhcyBNZXRhTW9kZWxQcm9wZXJ0eSwgY29tcGxleFR5cGVPYmplY3QsIHByb3BlcnR5TmFtZSk7XG5cdFx0fSk7XG5cblx0Y29tcGxleFR5cGVPYmplY3QucHJvcGVydGllcyA9IGNvbXBsZXhUeXBlUHJvcGVydGllcztcblx0Y29uc3QgY29tcGxleFR5cGVOYXZpZ2F0aW9uUHJvcGVydGllcyA9IE9iamVjdC5rZXlzKGNvbXBsZXhUeXBlRGVmaW5pdGlvbilcblx0XHQuZmlsdGVyKChwcm9wZXJ0eU5hbWVPck5vdCkgPT4ge1xuXHRcdFx0aWYgKHByb3BlcnR5TmFtZU9yTm90ICE9IFwiJEtleVwiICYmIHByb3BlcnR5TmFtZU9yTm90ICE9IFwiJGtpbmRcIikge1xuXHRcdFx0XHRyZXR1cm4gY29tcGxleFR5cGVEZWZpbml0aW9uW3Byb3BlcnR5TmFtZU9yTm90XS4ka2luZCA9PT0gXCJOYXZpZ2F0aW9uUHJvcGVydHlcIjtcblx0XHRcdH1cblx0XHR9KVxuXHRcdC5zb3J0KChhLCBiKSA9PiAoYSA+IGIgPyAxIDogLTEpKVxuXHRcdC5tYXAoKG5hdlByb3BlcnR5TmFtZSkgPT4ge1xuXHRcdFx0cmV0dXJuIHByZXBhcmVOYXZpZ2F0aW9uUHJvcGVydHkoXG5cdFx0XHRcdGNvbXBsZXhUeXBlRGVmaW5pdGlvbltuYXZQcm9wZXJ0eU5hbWVdIGFzIE1ldGFNb2RlbE5hdmlnYXRpb25Qcm9wZXJ0eSxcblx0XHRcdFx0Y29tcGxleFR5cGVPYmplY3QsXG5cdFx0XHRcdG5hdlByb3BlcnR5TmFtZVxuXHRcdFx0KTtcblx0XHR9KTtcblx0Y29tcGxleFR5cGVPYmplY3QubmF2aWdhdGlvblByb3BlcnRpZXMgPSBjb21wbGV4VHlwZU5hdmlnYXRpb25Qcm9wZXJ0aWVzO1xuXHRyZXR1cm4gY29tcGxleFR5cGVPYmplY3Q7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVFbnRpdHlLZXlzKGVudGl0eVR5cGVEZWZpbml0aW9uOiBNZXRhTW9kZWxFbnRpdHlUeXBlLCBvTWV0YU1vZGVsRGF0YTogTWV0YU1vZGVsQ29udGVudCk6IHN0cmluZ1tdIHtcblx0aWYgKCFlbnRpdHlUeXBlRGVmaW5pdGlvbi4kS2V5ICYmIGVudGl0eVR5cGVEZWZpbml0aW9uLiRCYXNlVHlwZSkge1xuXHRcdHJldHVybiBwcmVwYXJlRW50aXR5S2V5cyhvTWV0YU1vZGVsRGF0YVtlbnRpdHlUeXBlRGVmaW5pdGlvbi4kQmFzZVR5cGVdIGFzIE1ldGFNb2RlbEVudGl0eVR5cGUsIG9NZXRhTW9kZWxEYXRhKTtcblx0fVxuXHRyZXR1cm4gZW50aXR5VHlwZURlZmluaXRpb24uJEtleSA/PyBbXTsgLy9oYW5kbGluZyBvZiBlbnRpdHkgdHlwZXMgd2l0aG91dCBrZXkgYXMgd2VsbCBhcyBiYXNldHlwZVxufVxuXG5mdW5jdGlvbiBwcmVwYXJlRW50aXR5VHlwZShcblx0ZW50aXR5VHlwZURlZmluaXRpb246IE1ldGFNb2RlbEVudGl0eVR5cGUsXG5cdGVudGl0eVR5cGVOYW1lOiBzdHJpbmcsXG5cdG5hbWVzcGFjZVByZWZpeDogc3RyaW5nLFxuXHRtZXRhTW9kZWxEYXRhOiBNZXRhTW9kZWxDb250ZW50LFxuXHRpZ25vcmVEYXRhZmllbGREZWZhdWx0OiBib29sZWFuXG4pOiBSYXdFbnRpdHlUeXBlIHtcblx0Y29uc3QgZW50aXR5VHlwZTogUmF3RW50aXR5VHlwZSA9IHtcblx0XHRfdHlwZTogXCJFbnRpdHlUeXBlXCIsXG5cdFx0bmFtZTogZW50aXR5VHlwZU5hbWUuc3Vic3RyaW5nKG5hbWVzcGFjZVByZWZpeC5sZW5ndGgpLFxuXHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogZW50aXR5VHlwZU5hbWUsXG5cdFx0a2V5czogW10sXG5cdFx0ZW50aXR5UHJvcGVydGllczogW10sXG5cdFx0bmF2aWdhdGlvblByb3BlcnRpZXM6IFtdLFxuXHRcdGFjdGlvbnM6IHt9XG5cdH07XG5cblx0Zm9yIChjb25zdCBrZXkgaW4gZW50aXR5VHlwZURlZmluaXRpb24pIHtcblx0XHRjb25zdCB2YWx1ZSA9IGVudGl0eVR5cGVEZWZpbml0aW9uW2tleV07XG5cblx0XHRzd2l0Y2ggKHZhbHVlLiRraW5kKSB7XG5cdFx0XHRjYXNlIFwiUHJvcGVydHlcIjpcblx0XHRcdFx0Y29uc3QgcHJvcGVydHkgPSBwcmVwYXJlUHJvcGVydHkodmFsdWUsIGVudGl0eVR5cGUsIGtleSk7XG5cdFx0XHRcdGVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTmF2aWdhdGlvblByb3BlcnR5XCI6XG5cdFx0XHRcdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eSA9IHByZXBhcmVOYXZpZ2F0aW9uUHJvcGVydHkodmFsdWUsIGVudGl0eVR5cGUsIGtleSk7XG5cdFx0XHRcdGVudGl0eVR5cGUubmF2aWdhdGlvblByb3BlcnRpZXMucHVzaChuYXZpZ2F0aW9uUHJvcGVydHkpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHRlbnRpdHlUeXBlLmtleXMgPSBwcmVwYXJlRW50aXR5S2V5cyhlbnRpdHlUeXBlRGVmaW5pdGlvbiwgbWV0YU1vZGVsRGF0YSlcblx0XHQubWFwKChlbnRpdHlLZXkpID0+IGVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5maW5kKChwcm9wZXJ0eSkgPT4gcHJvcGVydHkubmFtZSA9PT0gZW50aXR5S2V5KSlcblx0XHQuZmlsdGVyKChwcm9wZXJ0eSkgPT4gcHJvcGVydHkgIT09IHVuZGVmaW5lZCkgYXMgUmF3RW50aXR5VHlwZVtcImtleXNcIl07XG5cblx0Y29uc3QgZW50aXR5VHlwZUFubm90YXRpb25zID0gbWV0YU1vZGVsRGF0YS4kQW5ub3RhdGlvbnNbZW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWVdIGFzIE1ldGFNb2RlbEVudGl0eVR5cGVBbm5vdGF0aW9ucyB8IHVuZGVmaW5lZDtcblx0Ly8gQ2hlY2sgaWYgdGhlcmUgYXJlIGZpbHRlciBmYWNldHMgZGVmaW5lZCBmb3IgdGhlIGVudGl0eVR5cGUgYW5kIGlmIHllcywgY2hlY2sgaWYgYWxsIG9mIHRoZW0gaGF2ZSBhbiBJRFxuXHQvLyBUaGUgSUQgaXMgb3B0aW9uYWwsIGJ1dCBpdCBpcyBpbnRlcm5hbGx5IHRha2VuIGZvciBncm91cGluZyBmaWx0ZXIgZmllbGRzIGFuZCBpZiBpdCdzIG5vdCBwcmVzZW50XG5cdC8vIGEgZmFsbGJhY2sgSUQgbmVlZHMgdG8gYmUgZ2VuZXJhdGVkIGhlcmUuXG5cdGNvbnN0IGZpbHRlckZhY2V0cyA9IGVudGl0eVR5cGVBbm5vdGF0aW9ucz8uW2BAJHtVSUFubm90YXRpb25UZXJtcy5GaWx0ZXJGYWNldHN9YF0gYXMgTWV0YU1vZGVsVHlwZTxGaWx0ZXJGYWNldHM+O1xuXHRmaWx0ZXJGYWNldHM/LmZvckVhY2goKGZpbHRlckZhY2V0QW5ub3RhdGlvbjogTWV0YU1vZGVsVHlwZTxSZWZlcmVuY2VGYWNldD4pID0+IHtcblx0XHRmaWx0ZXJGYWNldEFubm90YXRpb24uSUQgPSBjcmVhdGVSZWZlcmVuY2VGYWNldElkKGZpbHRlckZhY2V0QW5ub3RhdGlvbik7XG5cdH0pO1xuXG5cdC8vIENoZWNrIGlmIGVudGl0eVR5cGUgaGFzIG5vdCBtYW5kYXRvcnkgSGVhZGVySW5mb1xuXHRpZiAoXG5cdFx0ISFlbnRpdHlUeXBlPy5rZXlzLmxlbmd0aCAmJlxuXHRcdG1ldGFNb2RlbERhdGEuJEFubm90YXRpb25zW2VudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lXSAmJlxuXHRcdCFlbnRpdHlUeXBlQW5ub3RhdGlvbnM/LltgQCR7VUlBbm5vdGF0aW9uVGVybXMuSGVhZGVySW5mb31gXVxuXHQpIHtcblx0XHRjb25zdCBoZWFkZXJJbmZvQW5ub3RhdGlvbjogTWV0YU1vZGVsVHlwZTxIZWFkZXJJbmZvPiA9IHtcblx0XHRcdCRUeXBlOiBgJHtVSUFubm90YXRpb25UeXBlcy5IZWFkZXJJbmZvVHlwZX1gLFxuXHRcdFx0VHlwZU5hbWU6IGAke2VudGl0eVR5cGUubmFtZX1gLFxuXHRcdFx0VHlwZU5hbWVQbHVyYWw6IFwiXCIsXG5cdFx0XHRUaXRsZToge1xuXHRcdFx0XHQkVHlwZTogYCR7VUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkfWAsXG5cdFx0XHRcdFZhbHVlOiB7XG5cdFx0XHRcdFx0JFBhdGg6IGAke2VudGl0eVR5cGUua2V5c1swXS5uYW1lfWBcblx0XHRcdFx0fVxuXHRcdFx0fSBhcyBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZD4sXG5cdFx0XHR0ZXJtOiBVSUFubm90YXRpb25UZXJtcy5IZWFkZXJJbmZvXG5cdFx0fTtcblx0XHQvLyBBZGQgdGhlIG1pc3NpbmcgSGVhZGVySW5mb1xuXHRcdChtZXRhTW9kZWxEYXRhLiRBbm5vdGF0aW9uc1tlbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZV0gYXMgTWV0YU1vZGVsRW50aXR5VHlwZUFubm90YXRpb25zKVtgQCR7VUlBbm5vdGF0aW9uVGVybXMuSGVhZGVySW5mb31gXSA9XG5cdFx0XHRoZWFkZXJJbmZvQW5ub3RhdGlvbjtcblx0fVxuXG5cdGZvciAoY29uc3QgZW50aXR5UHJvcGVydHkgb2YgZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzKSB7XG5cdFx0aWYgKCFtZXRhTW9kZWxEYXRhLiRBbm5vdGF0aW9uc1tlbnRpdHlQcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWVdKSB7XG5cdFx0XHRtZXRhTW9kZWxEYXRhLiRBbm5vdGF0aW9uc1tlbnRpdHlQcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWVdID0ge307XG5cdFx0fVxuXHRcdGlmIChcblx0XHRcdCFpZ25vcmVEYXRhZmllbGREZWZhdWx0ICYmXG5cdFx0XHQhKG1ldGFNb2RlbERhdGEuJEFubm90YXRpb25zW2VudGl0eVByb3BlcnR5LmZ1bGx5UXVhbGlmaWVkTmFtZV0gYXMgTWV0YU1vZGVsUHJvcGVydHlBbm5vdGF0aW9ucylbXG5cdFx0XHRcdGBAJHtVSUFubm90YXRpb25UZXJtcy5EYXRhRmllbGREZWZhdWx0fWBcblx0XHRcdF1cblx0XHQpIHtcblx0XHRcdChtZXRhTW9kZWxEYXRhLiRBbm5vdGF0aW9uc1tlbnRpdHlQcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWVdIGFzIE1ldGFNb2RlbFByb3BlcnR5QW5ub3RhdGlvbnMpW1xuXHRcdFx0XHRgQCR7VUlBbm5vdGF0aW9uVGVybXMuRGF0YUZpZWxkRGVmYXVsdH1gXG5cdFx0XHRdID0ge1xuXHRcdFx0XHQkVHlwZTogVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkLFxuXHRcdFx0XHRWYWx1ZTogeyAkUGF0aDogZW50aXR5UHJvcGVydHkubmFtZSB9XG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbnRpdHlUeXBlO1xufVxuZnVuY3Rpb24gcHJlcGFyZUFjdGlvbihhY3Rpb25SYXdEYXRhOiBNZXRhTW9kZWxBY3Rpb24sIGFjdGlvbk5hbWU6IHN0cmluZywgbmFtZXNwYWNlUHJlZml4OiBzdHJpbmcpOiBSYXdBY3Rpb24ge1xuXHRsZXQgb3ZlcmxvYWRQYXJhbWV0ZXJzOiBNZXRhTW9kZWxBY3Rpb25bXCIkUGFyYW1ldGVyXCJdO1xuXHRpZiAoYWN0aW9uUmF3RGF0YS4ka2luZCA9PT0gXCJGdW5jdGlvblwiKSB7XG5cdFx0Ly8gZnVuY3Rpb24gLSBvdmVybG9hZCBpbmNsdWRlcyBhbGwgcGFyYW1ldGVycyAoYm91bmQgZW50aXR5IHR5cGUgX2FuZF8gb3RoZXIgcGFyYW1ldGVycylcblx0XHRvdmVybG9hZFBhcmFtZXRlcnMgPSBhY3Rpb25SYXdEYXRhLiRQYXJhbWV0ZXIgPz8gW107XG5cdH0gZWxzZSB7XG5cdFx0Ly8gYWN0aW9uIC0gb3ZlcmxvYWQgaXMgdGhlIGZpcnN0IHBhcmFtZXRlciBvciB0aGUgZW1wdHkgdW5ib3VuZCBvdmVybG9hZCBpbiBjYXNlIG9mIGFuIHVuYm91bmQgYWN0aW9uXG5cdFx0b3ZlcmxvYWRQYXJhbWV0ZXJzID0gYWN0aW9uUmF3RGF0YS4kSXNCb3VuZCA/IFthY3Rpb25SYXdEYXRhLiRQYXJhbWV0ZXJbMF1dIDogW107XG5cdH1cblxuXHRjb25zdCBvdmVybG9hZCA9IG92ZXJsb2FkUGFyYW1ldGVyc1xuXHRcdC5tYXAoKHBhcmFtZXRlcikgPT4gKHBhcmFtZXRlci4kaXNDb2xsZWN0aW9uID8gYENvbGxlY3Rpb24oJHtwYXJhbWV0ZXIuJFR5cGV9KWAgOiBwYXJhbWV0ZXIuJFR5cGUpKVxuXHRcdC5qb2luKFwiLFwiKTtcblxuXHRjb25zdCBmdWxseVF1YWxpZmllZE5hbWUgPSBgJHthY3Rpb25OYW1lfSgke292ZXJsb2FkfSlgO1xuXG5cdGNvbnN0IHBhcmFtZXRlcnMgPSBhY3Rpb25SYXdEYXRhLiRQYXJhbWV0ZXIgPz8gW107XG5cdHJldHVybiB7XG5cdFx0X3R5cGU6IFwiQWN0aW9uXCIsXG5cdFx0bmFtZTogYWN0aW9uTmFtZS5zdWJzdHJpbmcobmFtZXNwYWNlUHJlZml4Lmxlbmd0aCksXG5cdFx0ZnVsbHlRdWFsaWZpZWROYW1lLFxuXHRcdGlzQm91bmQ6IGFjdGlvblJhd0RhdGEuJElzQm91bmQgPz8gZmFsc2UsXG5cdFx0aXNGdW5jdGlvbjogYWN0aW9uUmF3RGF0YS4ka2luZCA9PT0gXCJGdW5jdGlvblwiLFxuXHRcdHNvdXJjZVR5cGU6IG92ZXJsb2FkUGFyYW1ldGVyc1swXT8uJFR5cGUgPz8gXCJcIixcblx0XHRyZXR1cm5UeXBlOiBhY3Rpb25SYXdEYXRhLiRSZXR1cm5UeXBlPy4kVHlwZSA/PyBcIlwiLFxuXHRcdHJldHVybkNvbGxlY3Rpb246IGFjdGlvblJhd0RhdGEuJFJldHVyblR5cGU/LiRpc0NvbGxlY3Rpb24gPz8gZmFsc2UsXG5cdFx0cGFyYW1ldGVyczogcGFyYW1ldGVycy5tYXAoKHBhcmFtKSA9PiAoe1xuXHRcdFx0X3R5cGU6IFwiQWN0aW9uUGFyYW1ldGVyXCIsXG5cdFx0XHRmdWxseVF1YWxpZmllZE5hbWU6IGAke2Z1bGx5UXVhbGlmaWVkTmFtZX0vJHtwYXJhbS4kTmFtZX1gLFxuXHRcdFx0aXNDb2xsZWN0aW9uOiBwYXJhbS4kaXNDb2xsZWN0aW9uID8/IGZhbHNlLFxuXHRcdFx0bmFtZTogcGFyYW0uJE5hbWUsXG5cdFx0XHR0eXBlOiBwYXJhbS4kVHlwZSxcblx0XHRcdG51bGxhYmxlOiBwYXJhbS4kTnVsbGFibGUgPz8gZmFsc2UsXG5cdFx0XHRtYXhMZW5ndGg6IHBhcmFtLiRNYXhMZW5ndGgsXG5cdFx0XHRwcmVjaXNpb246IHBhcmFtLiRQcmVjaXNpb24sXG5cdFx0XHRzY2FsZTogcGFyYW0uJFNjYWxlXG5cdFx0fSkpXG5cdH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlRW50aXR5Q29udGFpbmVyKFxuXHRuYW1lc3BhY2VQcmVmaXg6IHN0cmluZyxcblx0ZW50aXR5Q29udGFpbmVyTmFtZTogc3RyaW5nLFxuXHRlbnRpdHlDb250YWluZXJNZXRhZGF0YTogTWV0YU1vZGVsRW50aXR5Q29udGFpbmVyLFxuXHRzY2hlbWE6IFJhd1NjaGVtYVxuKTogdm9pZCB7XG5cdHNjaGVtYS5lbnRpdHlDb250YWluZXIgPSB7XG5cdFx0X3R5cGU6IFwiRW50aXR5Q29udGFpbmVyXCIsXG5cdFx0bmFtZTogZW50aXR5Q29udGFpbmVyTmFtZS5zdWJzdHJpbmcobmFtZXNwYWNlUHJlZml4Lmxlbmd0aCksXG5cdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBlbnRpdHlDb250YWluZXJOYW1lXG5cdH07XG5cblx0Zm9yIChjb25zdCBlbGVtZW50TmFtZSBpbiBlbnRpdHlDb250YWluZXJNZXRhZGF0YSkge1xuXHRcdGNvbnN0IGVsZW1lbnRWYWx1ZSA9IGVudGl0eUNvbnRhaW5lck1ldGFkYXRhW2VsZW1lbnROYW1lXTtcblx0XHRzd2l0Y2ggKGVsZW1lbnRWYWx1ZS4ka2luZCkge1xuXHRcdFx0Y2FzZSBcIkVudGl0eVNldFwiOlxuXHRcdFx0XHRzY2hlbWEuZW50aXR5U2V0cy5wdXNoKHByZXBhcmVFbnRpdHlTZXQoZWxlbWVudFZhbHVlLCBlbGVtZW50TmFtZSwgZW50aXR5Q29udGFpbmVyTmFtZSkpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBcIlNpbmdsZXRvblwiOlxuXHRcdFx0XHRzY2hlbWEuc2luZ2xldG9ucy5wdXNoKHByZXBhcmVTaW5nbGV0b24oZWxlbWVudFZhbHVlLCBlbGVtZW50TmFtZSwgZW50aXR5Q29udGFpbmVyTmFtZSkpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJGdW5jdGlvbkltcG9ydFwiOlxuXHRcdFx0Y2FzZSBcIkFjdGlvbkltcG9ydFwiOlxuXHRcdFx0XHRzY2hlbWEuYWN0aW9uSW1wb3J0cy5wdXNoKHByZXBhcmVBY3Rpb25JbXBvcnQoZWxlbWVudFZhbHVlLCBlbGVtZW50TmFtZSwgZW50aXR5Q29udGFpbmVyTmFtZSkpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gcGFyc2VBbm5vdGF0aW9ucyhhbm5vdGF0aW9uczogUmVjb3JkPHN0cmluZywgTWV0YU1vZGVsQW5ub3RhdGlvbnM+LCBjYXBhYmlsaXRpZXM6IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKTogQW5ub3RhdGlvbkxpc3RbXSB7XG5cdGNvbnN0IGFubm90YXRpb25MaXN0czogUmVjb3JkPHN0cmluZywgQW5ub3RhdGlvbkxpc3Q+ID0ge307XG5cdGZvciAoY29uc3QgdGFyZ2V0IGluIGFubm90YXRpb25zKSB7XG5cdFx0Y3JlYXRlQW5ub3RhdGlvbkxpc3RzKGFubm90YXRpb25zW3RhcmdldF0sIHRhcmdldCwgYW5ub3RhdGlvbkxpc3RzLCBjYXBhYmlsaXRpZXMpO1xuXHR9XG5cdHJldHVybiBPYmplY3QudmFsdWVzKGFubm90YXRpb25MaXN0cyk7XG59XG5cbnR5cGUgTWV0YU1vZGVsU2NoZW1hID0ge1xuXHQka2luZDogXCJTY2hlbWFcIjtcbn07XG50eXBlIE1ldGFNb2RlbEVudGl0eVNldCA9IHtcblx0JGtpbmQ6IFwiRW50aXR5U2V0XCI7XG5cdCRUeXBlOiBzdHJpbmc7XG5cdCROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn07XG5cbnR5cGUgTWV0YU1vZGVsVHlwZXM8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PiA9IHtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHQvLyBAdHMtaWdub3JlXG5cdFtrZXkgaW4ga2V5b2YgVF06IE1ldGFNb2RlbFR5cGU8VFtrZXldPjtcbn07XG5leHBvcnQgdHlwZSBNZXRhTW9kZWxFbnRpdHlUeXBlQW5ub3RhdGlvbnMgPSBSZW5hbWU8XCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5cIiwgTWV0YU1vZGVsVHlwZXM8RW50aXR5VHlwZUFubm90YXRpb25zX0NhcGFiaWxpdGllcz4+ICZcblx0UmVuYW1lPFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlwiLCBNZXRhTW9kZWxUeXBlczxFbnRpdHlUeXBlQW5ub3RhdGlvbnNfVUk+PjtcblxuZXhwb3J0IHR5cGUgTWV0YU1vZGVsRW50aXR5U2V0QW5ub3RhdGlvbnMgPSBSZW5hbWU8XCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5cIiwgTWV0YU1vZGVsVHlwZXM8RW50aXR5U2V0QW5ub3RhdGlvbnNfQ2FwYWJpbGl0aWVzPj4gJlxuXHRSZW5hbWU8XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuXCIsIE1ldGFNb2RlbFR5cGVzPEVudGl0eVNldEFubm90YXRpb25zX1VJPj47XG5cbmV4cG9ydCB0eXBlIE1ldGFNb2RlbFByb3BlcnR5QW5ub3RhdGlvbnMgPSBSZW5hbWU8XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlwiLCBNZXRhTW9kZWxUeXBlczxQcm9wZXJ0eUFubm90YXRpb25zX0NvbW1vbj4+ICZcblx0UmVuYW1lPFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlwiLCBNZXRhTW9kZWxUeXBlczxQcm9wZXJ0eUFubm90YXRpb25zX1VJPj4gJlxuXHRSZW5hbWU8XCJAT3JnLk9EYXRhLkNvcmUuVjEuXCIsIE1ldGFNb2RlbFR5cGVzPFByb3BlcnR5QW5ub3RhdGlvbnNfQ29yZT4+ICZcblx0UmVuYW1lPFwiQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuXCIsIE1ldGFNb2RlbFR5cGVzPFByb3BlcnR5QW5ub3RhdGlvbnNfQ2FwYWJpbGl0aWVzPj4gJlxuXHRSZW5hbWU8XCJAT3JnLk9EYXRhLk1lYXN1cmVzLlYxLlwiLCBNZXRhTW9kZWxUeXBlczxQcm9wZXJ0eUFubm90YXRpb25zX01lYXN1cmVzPj4gJlxuXHRSZW5hbWU8XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLlwiLCBNZXRhTW9kZWxUeXBlczxQcm9wZXJ0eUFubm90YXRpb25zX0FuYWx5dGljcz4+ICZcblx0UmVuYW1lPFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuXCIsIE1ldGFNb2RlbFR5cGVzPFByb3BlcnR5QW5ub3RhdGlvbnNfQ29tbXVuaWNhdGlvbj4+ICZcblx0UmVuYW1lPFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlBlcnNvbmFsRGF0YS52MS5cIiwgTWV0YU1vZGVsVHlwZXM8UHJvcGVydHlBbm5vdGF0aW9uc19QZXJzb25hbERhdGE+PiAmXG5cdFJlbmFtZTxcIkBjb20uc2FwLnZvY2FidWxhcmllcy5TZXNzaW9uLnYxLlwiLCBNZXRhTW9kZWxUeXBlczxQcm9wZXJ0eUFubm90YXRpb25zX1Nlc3Npb24+PiAmIHtcblx0XHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dEBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRcIjogTWV0YU1vZGVsRW51bTxUZXh0QXJyYW5nZW1lbnQ+O1xuXHR9O1xudHlwZSBNZXRhTW9kZWxBY3Rpb25JbXBvcnQgPSB7XG5cdCRraW5kOiBcIkFjdGlvbkltcG9ydFwiO1xuXHQkQWN0aW9uOiBzdHJpbmc7XG59O1xudHlwZSBNZXRhTW9kZWxGdW5jdGlvbkltcG9ydCA9IHtcblx0JGtpbmQ6IFwiRnVuY3Rpb25JbXBvcnRcIjtcblx0JEZ1bmN0aW9uOiBzdHJpbmc7XG59O1xudHlwZSBNZXRhTW9kZWxTaW5nbGV0b24gPSB7XG5cdCRraW5kOiBcIlNpbmdsZXRvblwiO1xuXHQkVHlwZTogc3RyaW5nO1xuXHQkTmF2aWdhdGlvblByb3BlcnR5QmluZGluZz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59O1xudHlwZSBNZXRhTW9kZWxFbnRpdHlDb250YWluZXIgPSB7XG5cdCRraW5kOiBcIkVudGl0eUNvbnRhaW5lclwiO1xufSAmIHtcblx0W25hbWU6IHN0cmluZ106IE1ldGFNb2RlbEVudGl0eVNldCB8IE1ldGFNb2RlbFNpbmdsZXRvbiB8IE1ldGFNb2RlbEFjdGlvbkltcG9ydCB8IE1ldGFNb2RlbEZ1bmN0aW9uSW1wb3J0O1xufTtcbnR5cGUgTWV0YU1vZGVsUHJvcGVydHkgPSB7XG5cdCRraW5kOiBcIlByb3BlcnR5XCI7XG5cdCRUeXBlOiBzdHJpbmc7XG5cdCRNYXhMZW5ndGg/OiBudW1iZXI7XG5cdCRQcmVjaXNpb24/OiBudW1iZXI7XG5cdCRTY2FsZT86IG51bWJlcjtcblx0JE51bGxhYmxlPzogYm9vbGVhbjtcbn07XG50eXBlIE1ldGFNb2RlbE5hdmlnYXRpb25Qcm9wZXJ0eSA9IHtcblx0JGtpbmQ6IFwiTmF2aWdhdGlvblByb3BlcnR5XCI7XG5cdCRUeXBlOiBzdHJpbmc7XG5cdCRQYXJ0bmVyPzogc3RyaW5nO1xuXHQkaXNDb2xsZWN0aW9uPzogYm9vbGVhbjtcblx0JENvbnRhaW5zVGFyZ2V0PzogYm9vbGVhbjtcblx0JFJlZmVyZW50aWFsQ29uc3RyYWludDogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn07XG50eXBlIE1ldGFNb2RlbEVudGl0eVR5cGUgPSB7XG5cdCRraW5kOiBcIkVudGl0eVR5cGVcIjtcblx0JEJhc2VUeXBlPzogc3RyaW5nO1xuXHQkS2V5OiBzdHJpbmdbXTtcbn0gJiB7XG5cdFtuYW1lOiBzdHJpbmddOiBNZXRhTW9kZWxQcm9wZXJ0eSB8IE1ldGFNb2RlbE5hdmlnYXRpb25Qcm9wZXJ0eTtcbn07XG50eXBlIE1ldGFNb2RlbENvbXBsZXhUeXBlID0ge1xuXHQka2luZDogXCJDb21wbGV4VHlwZVwiO1xufSAmIHtcblx0W25hbWU6IHN0cmluZ106IE1ldGFNb2RlbFByb3BlcnR5IHwgTWV0YU1vZGVsTmF2aWdhdGlvblByb3BlcnR5O1xufTtcbnR5cGUgTWV0YU1vZGVsVHlwZURlZmluaXRpb24gPSB7XG5cdCRraW5kOiBcIlR5cGVEZWZpbml0aW9uXCI7XG5cdCRVbmRlcmx5aW5nVHlwZTogc3RyaW5nO1xufTtcbnR5cGUgTWV0YU1vZGVsT2JqZWN0ID1cblx0fCBNZXRhTW9kZWxFbnRpdHlTZXRcblx0fCBNZXRhTW9kZWxTY2hlbWFcblx0fCBNZXRhTW9kZWxFbnRpdHlDb250YWluZXJcblx0fCBNZXRhTW9kZWxBY3Rpb25cblx0fCBNZXRhTW9kZWxFbnRpdHlUeXBlXG5cdHwgTWV0YU1vZGVsQ29tcGxleFR5cGVcblx0fCBNZXRhTW9kZWxUeXBlRGVmaW5pdGlvbjtcbnR5cGUgTWV0YU1vZGVsQW5ub3RhdGlvbnMgPSBNZXRhTW9kZWxFbnRpdHlUeXBlQW5ub3RhdGlvbnMgfCBNZXRhTW9kZWxQcm9wZXJ0eUFubm90YXRpb25zIHwgTWV0YU1vZGVsRW50aXR5U2V0QW5ub3RhdGlvbnM7XG5cbnR5cGUgTWV0YU1vZGVsQ29udGVudCA9IHtcblx0JEFubm90YXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBNZXRhTW9kZWxBbm5vdGF0aW9ucz47XG59ICYgUmVjb3JkPHN0cmluZywgTWV0YU1vZGVsT2JqZWN0IHwgTWV0YU1vZGVsT2JqZWN0W10+O1xuZnVuY3Rpb24gcGFyc2VTY2hlbWEobWV0YU1vZGVsRGF0YTogTWV0YU1vZGVsQ29udGVudCwgaWdub3JlRGF0YWZpZWxkRGVmYXVsdDogYm9vbGVhbik6IFJhd1NjaGVtYSB7XG5cdC8vIGFzc3VtaW5nIHRoZXJlIGlzIG9ubHkgb25lIHNjaGVtYS9uYW1lc3BhY2Vcblx0Y29uc3QgbmFtZXNwYWNlUHJlZml4ID1cblx0XHRPYmplY3Qua2V5cyhtZXRhTW9kZWxEYXRhKS5maW5kKChrZXkpID0+IHtcblx0XHRcdGNvbnN0IG1ldGFtb2RlbE9iamVjdCA9IG1ldGFNb2RlbERhdGFba2V5XTtcblx0XHRcdHJldHVybiAhQXJyYXkuaXNBcnJheShtZXRhbW9kZWxPYmplY3QpICYmIG1ldGFtb2RlbE9iamVjdC4ka2luZCA9PT0gXCJTY2hlbWFcIjtcblx0XHR9KSA/PyBcIlwiO1xuXG5cdGNvbnN0IHNjaGVtYTogUmF3U2NoZW1hID0ge1xuXHRcdG5hbWVzcGFjZTogbmFtZXNwYWNlUHJlZml4LnNsaWNlKDAsIC0xKSxcblx0XHRlbnRpdHlDb250YWluZXI6IHsgX3R5cGU6IFwiRW50aXR5Q29udGFpbmVyXCIsIG5hbWU6IFwiXCIsIGZ1bGx5UXVhbGlmaWVkTmFtZTogXCJcIiB9LFxuXHRcdGVudGl0eVNldHM6IFtdLFxuXHRcdGVudGl0eVR5cGVzOiBbXSxcblx0XHRjb21wbGV4VHlwZXM6IFtdLFxuXHRcdHR5cGVEZWZpbml0aW9uczogW10sXG5cdFx0c2luZ2xldG9uczogW10sXG5cdFx0YXNzb2NpYXRpb25zOiBbXSxcblx0XHRhc3NvY2lhdGlvblNldHM6IFtdLFxuXHRcdGFjdGlvbnM6IFtdLFxuXHRcdGFjdGlvbkltcG9ydHM6IFtdLFxuXHRcdGFubm90YXRpb25zOiB7fVxuXHR9O1xuXG5cdGNvbnN0IHBhcnNlTWV0YU1vZGVsRWxlbWVudCA9IChuYW1lOiBzdHJpbmcsIHZhbHVlOiBNZXRhTW9kZWxPYmplY3QpOiB2b2lkID0+IHtcblx0XHRzd2l0Y2ggKHZhbHVlLiRraW5kKSB7XG5cdFx0XHRjYXNlIFwiRW50aXR5Q29udGFpbmVyXCI6XG5cdFx0XHRcdHBhcnNlRW50aXR5Q29udGFpbmVyKG5hbWVzcGFjZVByZWZpeCwgbmFtZSwgdmFsdWUsIHNjaGVtYSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFwiQWN0aW9uXCI6XG5cdFx0XHRjYXNlIFwiRnVuY3Rpb25cIjpcblx0XHRcdFx0c2NoZW1hLmFjdGlvbnMucHVzaChwcmVwYXJlQWN0aW9uKHZhbHVlLCBuYW1lLCBuYW1lc3BhY2VQcmVmaXgpKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgXCJFbnRpdHlUeXBlXCI6XG5cdFx0XHRcdHNjaGVtYS5lbnRpdHlUeXBlcy5wdXNoKHByZXBhcmVFbnRpdHlUeXBlKHZhbHVlLCBuYW1lLCBuYW1lc3BhY2VQcmVmaXgsIG1ldGFNb2RlbERhdGEsIGlnbm9yZURhdGFmaWVsZERlZmF1bHQpKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgXCJDb21wbGV4VHlwZVwiOlxuXHRcdFx0XHRzY2hlbWEuY29tcGxleFR5cGVzLnB1c2gocHJlcGFyZUNvbXBsZXhUeXBlKHZhbHVlLCBuYW1lLCBuYW1lc3BhY2VQcmVmaXgpKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgXCJUeXBlRGVmaW5pdGlvblwiOlxuXHRcdFx0XHRzY2hlbWEudHlwZURlZmluaXRpb25zLnB1c2gocHJlcGFyZVR5cGVEZWZpbml0aW9uKHZhbHVlLCBuYW1lLCBuYW1lc3BhY2VQcmVmaXgpKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiRW50aXR5U2V0XCI6XG5cdFx0XHRjYXNlIFwiU2NoZW1hXCI6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fTtcblxuXHRmb3IgKGNvbnN0IGVsZW1lbnROYW1lIGluIG1ldGFNb2RlbERhdGEpIHtcblx0XHRjb25zdCBlbGVtZW50VmFsdWUgPSBtZXRhTW9kZWxEYXRhW2VsZW1lbnROYW1lXTtcblxuXHRcdGlmIChBcnJheS5pc0FycmF5KGVsZW1lbnRWYWx1ZSkpIHtcblx0XHRcdC8vIHZhbHVlIGNhbiBiZSBhbiBhcnJheSBpbiBjYXNlIG9mIGFjdGlvbnMgb3IgZnVuY3Rpb25zXG5cdFx0XHRmb3IgKGNvbnN0IHN1YkVsZW1lbnRWYWx1ZSBvZiBlbGVtZW50VmFsdWUpIHtcblx0XHRcdFx0cGFyc2VNZXRhTW9kZWxFbGVtZW50KGVsZW1lbnROYW1lLCBzdWJFbGVtZW50VmFsdWUpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRwYXJzZU1ldGFNb2RlbEVsZW1lbnQoZWxlbWVudE5hbWUsIGVsZW1lbnRWYWx1ZSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHNjaGVtYTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTWV0YU1vZGVsKFxuXHRtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRjYXBhYmlsaXRpZXM6IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzID0gRGVmYXVsdEVudmlyb25tZW50Q2FwYWJpbGl0aWVzLFxuXHRpZ25vcmVEYXRhZmllbGREZWZhdWx0ID0gZmFsc2Vcbik6IFJhd01ldGFkYXRhIHtcblx0Y29uc3QgcmVzdWx0OiBPbWl0PFJhd01ldGFkYXRhLCBcInNjaGVtYVwiPiA9IHtcblx0XHRpZGVudGlmaWNhdGlvbjogXCJtZXRhbW9kZWxSZXN1bHRcIixcblx0XHR2ZXJzaW9uOiBcIjQuMFwiLFxuXHRcdHJlZmVyZW5jZXM6IFtdXG5cdH07XG5cblx0Ly8gcGFyc2UgdGhlIHNjaGVtYSB3aGVuIGl0IGlzIGFjY2Vzc2VkIGZvciB0aGUgZmlyc3QgdGltZVxuXHRBbm5vdGF0aW9uQ29udmVydGVyLmxhenkocmVzdWx0IGFzIFJhd01ldGFkYXRhLCBcInNjaGVtYVwiLCAoKSA9PiB7XG5cdFx0Y29uc3QgbWV0YU1vZGVsRGF0YSA9IG1ldGFNb2RlbC5nZXRPYmplY3QoXCIvJFwiKTtcblx0XHRjb25zdCBzY2hlbWEgPSBwYXJzZVNjaGVtYShtZXRhTW9kZWxEYXRhLCBpZ25vcmVEYXRhZmllbGREZWZhdWx0KTtcblxuXHRcdEFubm90YXRpb25Db252ZXJ0ZXIubGF6eShzY2hlbWEuYW5ub3RhdGlvbnMsIFwibWV0YW1vZGVsUmVzdWx0XCIsICgpID0+IHBhcnNlQW5ub3RhdGlvbnMobWV0YU1vZGVsRGF0YS4kQW5ub3RhdGlvbnMsIGNhcGFiaWxpdGllcykpO1xuXG5cdFx0cmV0dXJuIHNjaGVtYTtcblx0fSk7XG5cblx0cmV0dXJuIHJlc3VsdCBhcyBSYXdNZXRhZGF0YTtcbn1cblxuY29uc3QgY29udmVydGVkTWV0YU1vZGVsTWFwOiBSZWNvcmQ8c3RyaW5nLCBDb252ZXJ0ZWRNZXRhZGF0YT4gPSB7fTtcbmNvbnN0IG1ldGFNb2RlbElETWFwOiBSZWNvcmQ8c3RyaW5nLCBTdHJpbmc+ID0ge307XG5jb25zdCBtZXRhTW9kZWxNYXA6IFdlYWtNYXA8U3RyaW5nLCBPRGF0YU1ldGFNb2RlbD4gPSBuZXcgV2Vha01hcCgpO1xuY29uc3QgdmlydHVhbFByb3BlcnRpZXNNYXA6IFJlY29yZDxcblx0c3RyaW5nLFxuXHRSZWNvcmQ8XG5cdFx0c3RyaW5nLFxuXHRcdHtcblx0XHRcdGZuPzogKHBhdGg6IHN0cmluZywgY29udmVydGVkVHlwZXM6IENvbnZlcnRlZE1ldGFkYXRhLCByZWxhdGl2ZVBhdGg/OiBzdHJpbmcpID0+IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPjtcblx0XHRcdHZpZXdJZD86IHN0cmluZztcblx0XHR9XG5cdD5cbj4gPSB7fTtcblxuLyoqXG4gKiBDb252ZXJ0IHRoZSBPRGF0YU1ldGFNb2RlbCBpbnRvIGFub3RoZXIgZm9ybWF0IHRoYXQgYWxsb3dzIGZvciBlYXN5IG1hbmlwdWxhdGlvbiBvZiB0aGUgYW5ub3RhdGlvbnMuXG4gKiBAcGFyYW0gb01ldGFNb2RlbCBUaGUgT0RhdGFNZXRhTW9kZWxcbiAqIEBwYXJhbSBvQ2FwYWJpbGl0aWVzIFRoZSBjdXJyZW50IGNhcGFiaWxpdGllc1xuICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgb2JqZWN0LWxpa2UgYW5ub3RhdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRUeXBlcyhvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgb0NhcGFiaWxpdGllcz86IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKTogQ29udmVydGVkTWV0YWRhdGEge1xuXHRjb25zdCBtZXRhTW9kZWxJRCA9IChvTWV0YU1vZGVsIGFzIHsgaWQ/OiBzdHJpbmcgfSkuaWQhO1xuXHRpZiAoIWNvbnZlcnRlZE1ldGFNb2RlbE1hcC5oYXNPd25Qcm9wZXJ0eShtZXRhTW9kZWxJRCkpIHtcblx0XHRjb25zdCBwYXJzZWRPdXRwdXQgPSBwYXJzZU1ldGFNb2RlbChvTWV0YU1vZGVsLCBvQ2FwYWJpbGl0aWVzKTtcblx0XHR0cnkge1xuXHRcdFx0Y29udmVydGVkTWV0YU1vZGVsTWFwW21ldGFNb2RlbElEXSA9IEFubm90YXRpb25Db252ZXJ0ZXIuY29udmVydChwYXJzZWRPdXRwdXQpO1xuXHRcdFx0dmlydHVhbFByb3BlcnRpZXNNYXBbbWV0YU1vZGVsSURdID0ge1xuXHRcdFx0XHRjcml0aWNhbGl0eTogeyBmbjogZ2V0VmlydHVhbENyaXRpY2FsaXR5RXhwcmVzc2lvbiB9XG5cdFx0XHR9O1xuXHRcdFx0Y29uc3QgbWV0YU1vZGVsU3ltYm9sID0gbmV3IFN0cmluZyhtZXRhTW9kZWxJRCk7XG5cdFx0XHRtZXRhTW9kZWxJRE1hcFttZXRhTW9kZWxJRF0gPSBtZXRhTW9kZWxTeW1ib2w7XG5cdFx0XHRtZXRhTW9kZWxNYXAuc2V0KG1ldGFNb2RlbFN5bWJvbCwgb01ldGFNb2RlbCk7XG5cdFx0fSBjYXRjaCAob0Vycm9yKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3Iob0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBjb252ZXJ0ZWRNZXRhTW9kZWxNYXBbbWV0YU1vZGVsSURdO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyBhIHZpcnR1YWwgcHJvcGVydHkgZm9yIGEgZ2l2ZW4gbWV0YWRhdGEgb2JqZWN0LlxuICogVGhpcyBhbGxvd3MgZm9yIGFkZGluZyBjdXN0b20gcHJvcGVydGllcyB0aGF0IGFyZSBub3QgcGFydCBvZiB0aGUgb3JpZ2luYWwgbW9kZWwgYnV0IGNhbiBiZSBjb21wdXRlZCBvciBkZXJpdmVkIGJhc2VkIG9uIGV4aXN0aW5nIG1ldGFkYXRhLlxuICogQHBhcmFtIGNvbnZlcnRlZFR5cGVzIFRoZSBtZXRhZGF0YSBvYmplY3QgZm9yIHdoaWNoIHRoZSB2aXJ0dWFsIHByb3BlcnR5IGlzIGJlaW5nIHJlZ2lzdGVyZWQuXG4gKiBAcGFyYW0gcHJvcGVydHlOYW1lIFRoZSBuYW1lIG9mIHRoZSB2aXJ0dWFsIHByb3BlcnR5IHRvIHJlZ2lzdGVyLlxuICogQHBhcmFtIGZuVmlydHVhbFByb3BlcnR5IEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBnZW5lcmF0ZXMgdGhlIHZhbHVlIG9mIHRoZSB2aXJ0dWFsIHByb3BlcnR5LiBUaGUgZnVuY3Rpb24gdGFrZXMgdGhlIHBhdGgsIG1ldGFkYXRhLCBhbmQgYW4gb3B0aW9uYWwgcmVsYXRpdmUgcGF0aCBhcyBhcmd1bWVudHMuXG4gKiBAcGFyYW0gdmlld0lkIFRoZSBpZGVudGlmaWVyIGZvciB0aGUgdmlldyBhc3NvY2lhdGVkIHdpdGggdGhlIHZpcnR1YWwgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclZpcnR1YWxQcm9wZXJ0eShcblx0Y29udmVydGVkVHlwZXM6IENvbnZlcnRlZE1ldGFkYXRhLFxuXHRwcm9wZXJ0eU5hbWU6IHN0cmluZyxcblx0Zm5WaXJ0dWFsUHJvcGVydHk6IChwYXRoOiBzdHJpbmcsIGNvbnZlcnRlZFR5cGVzOiBDb252ZXJ0ZWRNZXRhZGF0YSwgcmVsYXRpdmVQYXRoPzogc3RyaW5nKSA9PiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4sXG5cdHZpZXdJZDogc3RyaW5nXG4pOiB2b2lkIHtcblx0Y29uc3QgaWQgPSBPYmplY3Qua2V5cyhjb252ZXJ0ZWRNZXRhTW9kZWxNYXApLmZpbmQoKGlkOiBzdHJpbmcpID0+IGNvbnZlcnRlZE1ldGFNb2RlbE1hcFtpZF0gPT09IGNvbnZlcnRlZFR5cGVzKSA/PyBcIlwiO1xuXHRpZiAoIXZpcnR1YWxQcm9wZXJ0aWVzTWFwW2lkXSkge1xuXHRcdHZpcnR1YWxQcm9wZXJ0aWVzTWFwW2lkXSA9IHt9O1xuXHR9XG5cdHZpcnR1YWxQcm9wZXJ0aWVzTWFwW2lkXVtwcm9wZXJ0eU5hbWVdID0geyBmbjogZm5WaXJ0dWFsUHJvcGVydHksIHZpZXdJZCB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldE1ldGFNb2RlbEJ5SWQoaWQ6IHN0cmluZyk6IE9EYXRhTWV0YU1vZGVsIHwgdW5kZWZpbmVkIHtcblx0Y29uc3Qgc3ltYm9sID0gbWV0YU1vZGVsSURNYXBbaWRdO1xuXHRyZXR1cm4gbWV0YU1vZGVsTWFwLmdldChzeW1ib2wpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnZlcnRlZFR5cGVzKG9Db250ZXh0OiBDb250ZXh0KTogQ29udmVydGVkTWV0YWRhdGEge1xuXHRjb25zdCBvTWV0YU1vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKSBhcyB1bmtub3duIGFzIE9EYXRhTWV0YU1vZGVsO1xuXHRpZiAoIW9NZXRhTW9kZWwuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTWV0YU1vZGVsXCIpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gYSBPRGF0YU1ldGFNb2RlbFwiKTtcblx0fVxuXHRyZXR1cm4gY29udmVydFR5cGVzKG9NZXRhTW9kZWwpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVsZXRlTW9kZWxDYWNoZURhdGEob01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpOiB2b2lkIHtcblx0aWYgKG9NZXRhTW9kZWwpIHtcblx0XHRkZWxldGUgY29udmVydGVkTWV0YU1vZGVsTWFwWyhvTWV0YU1vZGVsIGFzIHVua25vd24gYXMgeyBpZDogc3RyaW5nIH0pLmlkXTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydE1ldGFNb2RlbENvbnRleHQob01ldGFNb2RlbENvbnRleHQ6IENvbnRleHQsIGJJbmNsdWRlVmlzaXRlZE9iamVjdHM6IHRydWUpOiB1bmRlZmluZWQgfCBSZXNvbHZlZFRhcmdldDtcbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0TWV0YU1vZGVsQ29udGV4dChvTWV0YU1vZGVsQ29udGV4dDogQ29udGV4dCk6IHVuZGVmaW5lZCB8IFNlcnZpY2VPYmplY3QgfCBBY3Rpb25QYXJhbWV0ZXIgfCBSZWNvcmRDb21wbGV4VHlwZTtcbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0TWV0YU1vZGVsQ29udGV4dChcblx0b01ldGFNb2RlbENvbnRleHQ6IENvbnRleHQsXG5cdGJJbmNsdWRlVmlzaXRlZE9iamVjdHMgPSBmYWxzZVxuKTogdW5kZWZpbmVkIHwgU2VydmljZU9iamVjdCB8IEFjdGlvblBhcmFtZXRlciB8IFJlY29yZENvbXBsZXhUeXBlIHwgUmVzb2x2ZWRUYXJnZXQge1xuXHRjb25zdCBvQ29udmVydGVkTWV0YWRhdGEgPSBjb252ZXJ0VHlwZXMob01ldGFNb2RlbENvbnRleHQuZ2V0TW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCk7XG5cdGNvbnN0IHNQYXRoID0gb01ldGFNb2RlbENvbnRleHQuZ2V0UGF0aCgpO1xuXG5cdGNvbnN0IGFQYXRoU3BsaXQgPSBzUGF0aC5zcGxpdChcIi9cIik7XG5cdGxldCBmaXJzdFBhcnQgPSBhUGF0aFNwbGl0WzFdO1xuXHRsZXQgYmVnaW5JbmRleCA9IDI7XG5cdGlmIChvQ29udmVydGVkTWV0YWRhdGEuZW50aXR5Q29udGFpbmVyLmZ1bGx5UXVhbGlmaWVkTmFtZSA9PT0gZmlyc3RQYXJ0KSB7XG5cdFx0Zmlyc3RQYXJ0ID0gYVBhdGhTcGxpdFsyXTtcblx0XHRiZWdpbkluZGV4Kys7XG5cdH1cblx0bGV0IHRhcmdldEVudGl0eVNldDogRW50aXR5U2V0IHwgU2luZ2xldG9uID0gb0NvbnZlcnRlZE1ldGFkYXRhLmVudGl0eVNldHMuZmluZChcblx0XHQoZW50aXR5U2V0KSA9PiBlbnRpdHlTZXQubmFtZSA9PT0gZmlyc3RQYXJ0XG5cdCkgYXMgRW50aXR5U2V0O1xuXHRpZiAoIXRhcmdldEVudGl0eVNldCkge1xuXHRcdHRhcmdldEVudGl0eVNldCA9IG9Db252ZXJ0ZWRNZXRhZGF0YS5zaW5nbGV0b25zLmZpbmQoKHNpbmdsZXRvbikgPT4gc2luZ2xldG9uLm5hbWUgPT09IGZpcnN0UGFydCkgYXMgU2luZ2xldG9uO1xuXHR9XG5cdGxldCByZWxhdGl2ZVBhdGggPSBhUGF0aFNwbGl0LnNsaWNlKGJlZ2luSW5kZXgpLmpvaW4oXCIvXCIpO1xuXG5cdGNvbnN0IGxvY2FsT2JqZWN0czogU2VydmljZU9iamVjdFtdID0gW3RhcmdldEVudGl0eVNldF07XG5cdHdoaWxlIChyZWxhdGl2ZVBhdGggJiYgcmVsYXRpdmVQYXRoLmxlbmd0aCA+IDAgJiYgcmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoXCIkTmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1wiKSkge1xuXHRcdGxldCByZWxhdGl2ZVNwbGl0ID0gcmVsYXRpdmVQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRsZXQgaWR4ID0gMDtcblx0XHRsZXQgY3VycmVudEVudGl0eVNldCwgc05hdlByb3BUb0NoZWNrO1xuXG5cdFx0cmVsYXRpdmVTcGxpdCA9IHJlbGF0aXZlU3BsaXQuc2xpY2UoMSk7IC8vIFJlbW92aW5nIFwiJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdcIlxuXHRcdHdoaWxlICghY3VycmVudEVudGl0eVNldCAmJiByZWxhdGl2ZVNwbGl0Lmxlbmd0aCA+IGlkeCkge1xuXHRcdFx0aWYgKHJlbGF0aXZlU3BsaXRbaWR4XSAhPT0gXCIkTmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1wiKSB7XG5cdFx0XHRcdC8vIEZpbmRpbmcgdGhlIGNvcnJlY3QgZW50aXR5U2V0IGZvciB0aGUgbmF2aWdhaXRvbiBwcm9wZXJ0eSBiaW5kaW5nIGV4YW1wbGU6IFwiU2V0L19TYWxlc09yZGVyXCJcblx0XHRcdFx0c05hdlByb3BUb0NoZWNrID0gcmVsYXRpdmVTcGxpdFxuXHRcdFx0XHRcdC5zbGljZSgwLCBpZHggKyAxKVxuXHRcdFx0XHRcdC5qb2luKFwiL1wiKVxuXHRcdFx0XHRcdC5yZXBsYWNlKFwiLyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nXCIsIFwiXCIpO1xuXHRcdFx0XHRjdXJyZW50RW50aXR5U2V0ID0gdGFyZ2V0RW50aXR5U2V0ICYmIHRhcmdldEVudGl0eVNldC5uYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nW3NOYXZQcm9wVG9DaGVja107XG5cdFx0XHR9XG5cdFx0XHRpZHgrKztcblx0XHR9XG5cdFx0aWYgKCFjdXJyZW50RW50aXR5U2V0KSB7XG5cdFx0XHQvLyBGYWxsIGJhY2sgdG8gU2luZ2xlIG5hdiBwcm9wIGlmIGVudGl0eVNldCBpcyBub3QgZm91bmQuXG5cdFx0XHRzTmF2UHJvcFRvQ2hlY2sgPSByZWxhdGl2ZVNwbGl0WzBdO1xuXHRcdH1cblx0XHRjb25zdCBhTmF2UHJvcHMgPSBzTmF2UHJvcFRvQ2hlY2s/LnNwbGl0KFwiL1wiKSB8fCBbXTtcblx0XHRsZXQgdGFyZ2V0RW50aXR5VHlwZSA9IHRhcmdldEVudGl0eVNldCAmJiB0YXJnZXRFbnRpdHlTZXQuZW50aXR5VHlwZTtcblx0XHRmb3IgKGNvbnN0IHNOYXZQcm9wIG9mIGFOYXZQcm9wcykge1xuXHRcdFx0Ly8gUHVzaGluZyBhbGwgbmF2IHByb3BzIHRvIHRoZSB2aXNpdGVkIG9iamVjdHMuIGV4YW1wbGU6IFwiU2V0XCIsIFwiX1NhbGVzT3JkZXJcIiBmb3IgXCJTZXQvX1NhbGVzT3JkZXJcIihpbiBOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nKVxuXHRcdFx0Y29uc3QgdGFyZ2V0TmF2UHJvcCA9IHRhcmdldEVudGl0eVR5cGUgJiYgdGFyZ2V0RW50aXR5VHlwZS5uYXZpZ2F0aW9uUHJvcGVydGllcy5maW5kKChuYXZQcm9wKSA9PiBuYXZQcm9wLm5hbWUgPT09IHNOYXZQcm9wKTtcblx0XHRcdGlmICh0YXJnZXROYXZQcm9wKSB7XG5cdFx0XHRcdGxvY2FsT2JqZWN0cy5wdXNoKHRhcmdldE5hdlByb3ApO1xuXHRcdFx0XHR0YXJnZXRFbnRpdHlUeXBlID0gdGFyZ2V0TmF2UHJvcC50YXJnZXRUeXBlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRhcmdldEVudGl0eVNldCA9XG5cdFx0XHQodGFyZ2V0RW50aXR5U2V0ICYmIGN1cnJlbnRFbnRpdHlTZXQpIHx8ICh0YXJnZXRFbnRpdHlTZXQgJiYgdGFyZ2V0RW50aXR5U2V0Lm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdbcmVsYXRpdmVTcGxpdFswXV0pO1xuXHRcdGlmICh0YXJnZXRFbnRpdHlTZXQpIHtcblx0XHRcdC8vIFB1c2hpbmcgdGhlIHRhcmdldCBlbnRpdHlTZXQgdG8gdmlzaXRlZCBvYmplY3RzXG5cdFx0XHRsb2NhbE9iamVjdHMucHVzaCh0YXJnZXRFbnRpdHlTZXQpO1xuXHRcdH1cblx0XHQvLyBSZS1jYWxjdWxhdGluZyB0aGUgcmVsYXRpdmUgcGF0aFxuXHRcdC8vIEFzIGVhY2ggbmF2aWdhdGlvbiBuYW1lIGlzIGVuY2xvc2VkIGJldHdlZW4gJyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nJyBhbmQgJyQnICh0byBiZSBhYmxlIHRvIGFjY2VzcyB0aGUgZW50aXR5c2V0IGVhc2lseSBpbiB0aGUgbWV0YW1vZGVsKVxuXHRcdC8vIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBjbG9zaW5nICckJyB0byBiZSBhYmxlIHRvIHN3aXRjaCB0byB0aGUgbmV4dCBuYXZpZ2F0aW9uXG5cdFx0cmVsYXRpdmVTcGxpdCA9IHJlbGF0aXZlU3BsaXQuc2xpY2UoYU5hdlByb3BzLmxlbmd0aCB8fCAxKTtcblx0XHRpZiAocmVsYXRpdmVTcGxpdC5sZW5ndGggJiYgcmVsYXRpdmVTcGxpdFswXSA9PT0gXCIkXCIpIHtcblx0XHRcdHJlbGF0aXZlU3BsaXQuc2hpZnQoKTtcblx0XHR9XG5cdFx0cmVsYXRpdmVQYXRoID0gcmVsYXRpdmVTcGxpdC5qb2luKFwiL1wiKTtcblx0fVxuXHRpZiAocmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoXCIkVHlwZVwiKSkge1xuXHRcdC8vIEFzICRUeXBlQCBpcyBhbGxvd2VkIGFzIHdlbGxcblx0XHRpZiAocmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoXCIkVHlwZUBcIikpIHtcblx0XHRcdHJlbGF0aXZlUGF0aCA9IHJlbGF0aXZlUGF0aC5yZXBsYWNlKFwiJFR5cGVcIiwgXCJcIik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFdlJ3JlIGFueXdheSBnb2luZyB0byBsb29rIG9uIHRoZSBlbnRpdHlUeXBlLi4uXG5cdFx0XHRyZWxhdGl2ZVBhdGggPSBhUGF0aFNwbGl0LnNsaWNlKDMpLmpvaW4oXCIvXCIpO1xuXHRcdH1cblx0fVxuXHRpZiAodGFyZ2V0RW50aXR5U2V0ICYmIHJlbGF0aXZlUGF0aC5sZW5ndGgpIHtcblx0XHRjb25zdCBvVGFyZ2V0ID0gdGFyZ2V0RW50aXR5U2V0LmVudGl0eVR5cGUucmVzb2x2ZVBhdGgocmVsYXRpdmVQYXRoLCBiSW5jbHVkZVZpc2l0ZWRPYmplY3RzKTtcblx0XHRpZiAob1RhcmdldCkge1xuXHRcdFx0aWYgKGJJbmNsdWRlVmlzaXRlZE9iamVjdHMpIHtcblx0XHRcdFx0b1RhcmdldC52aXNpdGVkT2JqZWN0cyA9IGxvY2FsT2JqZWN0cy5jb25jYXQob1RhcmdldC52aXNpdGVkT2JqZWN0cyk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0YXJnZXRFbnRpdHlTZXQuZW50aXR5VHlwZSAmJiB0YXJnZXRFbnRpdHlTZXQuZW50aXR5VHlwZS5hY3Rpb25zKSB7XG5cdFx0XHQvLyBpZiB0YXJnZXQgaXMgYW4gYWN0aW9uIG9yIGFuIGFjdGlvbiBwYXJhbWV0ZXJcblx0XHRcdGNvbnN0IGFjdGlvbnMgPSB0YXJnZXRFbnRpdHlTZXQuZW50aXR5VHlwZSAmJiB0YXJnZXRFbnRpdHlTZXQuZW50aXR5VHlwZS5hY3Rpb25zO1xuXHRcdFx0Y29uc3QgcmVsYXRpdmVTcGxpdCA9IHJlbGF0aXZlUGF0aC5zcGxpdChcIi9cIik7XG5cdFx0XHRpZiAoYWN0aW9uc1tyZWxhdGl2ZVNwbGl0WzBdXSkge1xuXHRcdFx0XHRjb25zdCBhY3Rpb24gPSBhY3Rpb25zW3JlbGF0aXZlU3BsaXRbMF1dO1xuXHRcdFx0XHRpZiAocmVsYXRpdmVTcGxpdFsxXSAmJiBhY3Rpb24ucGFyYW1ldGVycykge1xuXHRcdFx0XHRcdGNvbnN0IHBhcmFtZXRlck5hbWUgPSByZWxhdGl2ZVNwbGl0WzFdO1xuXHRcdFx0XHRcdHJldHVybiBhY3Rpb24ucGFyYW1ldGVycy5maW5kKChwYXJhbWV0ZXIpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiBwYXJhbWV0ZXIuZnVsbHlRdWFsaWZpZWROYW1lLmVuZHNXaXRoKGAvJHtwYXJhbWV0ZXJOYW1lfWApO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHJlbGF0aXZlUGF0aC5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0XHRyZXR1cm4gYWN0aW9uO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvVGFyZ2V0O1xuXHR9IGVsc2Uge1xuXHRcdGlmIChiSW5jbHVkZVZpc2l0ZWRPYmplY3RzKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0YXJnZXQ6IHRhcmdldEVudGl0eVNldCxcblx0XHRcdFx0dmlzaXRlZE9iamVjdHM6IGxvY2FsT2JqZWN0c1xuXHRcdFx0fTtcblx0XHR9XG5cdFx0cmV0dXJuIHRhcmdldEVudGl0eVNldDtcblx0fVxufVxuXG5leHBvcnQgdHlwZSBSZXNvbHZlZFRhcmdldDxUIGV4dGVuZHMgU2VydmljZU9iamVjdEFuZEFubm90YXRpb24gPSBTZXJ2aWNlT2JqZWN0PiA9IHtcblx0dGFyZ2V0PzogVCBleHRlbmRzIFNlcnZpY2VPYmplY3QgPyBUIDogQW5ub3RhdGlvblRlcm08VD47XG5cdHZpc2l0ZWRPYmplY3RzOiBTZXJ2aWNlT2JqZWN0QW5kQW5ub3RhdGlvbltdO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxUPihvTWV0YU1vZGVsQ29udGV4dDogQ29udGV4dCwgb0VudGl0eVNldE1ldGFNb2RlbENvbnRleHQ/OiBDb250ZXh0KTogRGF0YU1vZGVsT2JqZWN0UGF0aDxUPiB7XG5cdGNvbnN0IG9Db252ZXJ0ZWRNZXRhZGF0YSA9IGNvbnZlcnRUeXBlcyhvTWV0YU1vZGVsQ29udGV4dC5nZXRNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsKTtcblx0Y29uc3QgbWV0YU1vZGVsQ29udGV4dCA9IGNvbnZlcnRNZXRhTW9kZWxDb250ZXh0KG9NZXRhTW9kZWxDb250ZXh0LCB0cnVlKSBhcyBSZXNvbHZlZFRhcmdldDtcblx0bGV0IHRhcmdldEVudGl0eVNldExvY2F0aW9uO1xuXHRpZiAob0VudGl0eVNldE1ldGFNb2RlbENvbnRleHQgJiYgb0VudGl0eVNldE1ldGFNb2RlbENvbnRleHQuZ2V0UGF0aCgpICE9PSBcIi9cIikge1xuXHRcdHRhcmdldEVudGl0eVNldExvY2F0aW9uID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG9FbnRpdHlTZXRNZXRhTW9kZWxDb250ZXh0KTtcblx0fVxuXHRyZXR1cm4gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RGcm9tUGF0aDxUPihtZXRhTW9kZWxDb250ZXh0LCBvQ29udmVydGVkTWV0YWRhdGEsIHRhcmdldEVudGl0eVNldExvY2F0aW9uKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0RnJvbVBhdGg8VD4oXG5cdG1ldGFNb2RlbENvbnRleHQ6IFJlc29sdmVkVGFyZ2V0LFxuXHRjb252ZXJ0ZWRUeXBlczogQ29udmVydGVkTWV0YWRhdGEsXG5cdHRhcmdldEVudGl0eVNldExvY2F0aW9uPzogRGF0YU1vZGVsT2JqZWN0Q29udGV4dCxcblx0b25seVNlcnZpY2VPYmplY3RzID0gZmFsc2Vcbik6IERhdGFNb2RlbE9iamVjdFBhdGg8VD4ge1xuXHRjb25zdCBkYXRhTW9kZWxPYmplY3RzID0gbWV0YU1vZGVsQ29udGV4dC52aXNpdGVkT2JqZWN0cy5maWx0ZXIoXG5cdFx0KHZpc2l0ZWRPYmplY3QpID0+IGlzU2VydmljZU9iamVjdCh2aXNpdGVkT2JqZWN0KSAmJiAhaXNFbnRpdHlUeXBlKHZpc2l0ZWRPYmplY3QpICYmICFpc0VudGl0eUNvbnRhaW5lcih2aXNpdGVkT2JqZWN0KVxuXHQpO1xuXHRpZiAoXG5cdFx0aXNTZXJ2aWNlT2JqZWN0KG1ldGFNb2RlbENvbnRleHQudGFyZ2V0KSAmJlxuXHRcdCFpc0VudGl0eVR5cGUobWV0YU1vZGVsQ29udGV4dC50YXJnZXQpICYmXG5cdFx0ZGF0YU1vZGVsT2JqZWN0c1tkYXRhTW9kZWxPYmplY3RzLmxlbmd0aCAtIDFdICE9PSBtZXRhTW9kZWxDb250ZXh0LnRhcmdldCAmJlxuXHRcdCFvbmx5U2VydmljZU9iamVjdHNcblx0KSB7XG5cdFx0ZGF0YU1vZGVsT2JqZWN0cy5wdXNoKG1ldGFNb2RlbENvbnRleHQudGFyZ2V0KTtcblx0fVxuXG5cdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0aWVzOiBOYXZpZ2F0aW9uUHJvcGVydHlbXSA9IFtdO1xuXHRjb25zdCByb290RW50aXR5U2V0OiBFbnRpdHlTZXQgPSBkYXRhTW9kZWxPYmplY3RzWzBdIGFzIEVudGl0eVNldDtcblxuXHRsZXQgY3VycmVudEVudGl0eVNldDogRW50aXR5U2V0IHwgU2luZ2xldG9uIHwgdW5kZWZpbmVkID0gcm9vdEVudGl0eVNldDtcblx0bGV0IGN1cnJlbnRFbnRpdHlUeXBlOiBFbnRpdHlUeXBlID0gcm9vdEVudGl0eVNldC5lbnRpdHlUeXBlO1xuXHRsZXQgY3VycmVudE9iamVjdDogU2VydmljZU9iamVjdEFuZEFubm90YXRpb24gfCB1bmRlZmluZWQ7XG5cdGxldCBuYXZpZ2F0ZWRQYXRoID0gW107XG5cblx0Zm9yIChsZXQgaSA9IDE7IGkgPCBkYXRhTW9kZWxPYmplY3RzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y3VycmVudE9iamVjdCA9IGRhdGFNb2RlbE9iamVjdHNbaV07XG5cblx0XHRpZiAoaXNOYXZpZ2F0aW9uUHJvcGVydHkoY3VycmVudE9iamVjdCkpIHtcblx0XHRcdG5hdmlnYXRlZFBhdGgucHVzaChjdXJyZW50T2JqZWN0Lm5hbWUpO1xuXHRcdFx0bmF2aWdhdGlvblByb3BlcnRpZXMucHVzaChjdXJyZW50T2JqZWN0KTtcblx0XHRcdGN1cnJlbnRFbnRpdHlUeXBlID0gY3VycmVudE9iamVjdC50YXJnZXRUeXBlO1xuXHRcdFx0Y29uc3QgYm91bmRFbnRpdHlTZXQ6IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVuZGVmaW5lZCA9IGN1cnJlbnRFbnRpdHlTZXQ/Lm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdbbmF2aWdhdGVkUGF0aC5qb2luKFwiL1wiKV07XG5cdFx0XHRpZiAoYm91bmRFbnRpdHlTZXQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjdXJyZW50RW50aXR5U2V0ID0gYm91bmRFbnRpdHlTZXQ7XG5cdFx0XHRcdG5hdmlnYXRlZFBhdGggPSBbXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKGlzRW50aXR5U2V0KGN1cnJlbnRPYmplY3QpIHx8IGlzU2luZ2xldG9uKGN1cnJlbnRPYmplY3QpKSB7XG5cdFx0XHRjdXJyZW50RW50aXR5U2V0ID0gY3VycmVudE9iamVjdDtcblx0XHRcdGN1cnJlbnRFbnRpdHlUeXBlID0gY3VycmVudEVudGl0eVNldC5lbnRpdHlUeXBlO1xuXHRcdH1cblx0fVxuXG5cdGlmIChuYXZpZ2F0ZWRQYXRoLmxlbmd0aCA+IDApIHtcblx0XHQvLyBQYXRoIHdpdGhvdXQgTmF2aWdhdGlvblByb3BlcnR5QmluZGluZyAtLT4gbm8gdGFyZ2V0IGVudGl0eSBzZXRcblx0XHRjdXJyZW50RW50aXR5U2V0ID0gdW5kZWZpbmVkO1xuXHR9XG5cblx0aWYgKHRhcmdldEVudGl0eVNldExvY2F0aW9uICYmIHRhcmdldEVudGl0eVNldExvY2F0aW9uLnN0YXJ0aW5nRW50aXR5U2V0ICE9PSByb290RW50aXR5U2V0KSB7XG5cdFx0Ly8gSW4gY2FzZSB0aGUgZW50aXR5c2V0IGlzIG5vdCBzdGFydGluZyBmcm9tIHRoZSBzYW1lIGxvY2F0aW9uIGl0IG1heSBtZWFuIHRoYXQgd2UgYXJlIGRvaW5nIHRvbyBtdWNoIHdvcmsgZWFybGllciBmb3Igc29tZSByZWFzb25cblx0XHQvLyBBcyBzdWNoIHdlIG5lZWQgdG8gcmVkZWZpbmUgdGhlIGNvbnRleHQgc291cmNlIGZvciB0aGUgdGFyZ2V0RW50aXR5U2V0TG9jYXRpb25cblx0XHRjb25zdCBzdGFydGluZ0luZGV4ID0gZGF0YU1vZGVsT2JqZWN0cy5pbmRleE9mKHRhcmdldEVudGl0eVNldExvY2F0aW9uLnN0YXJ0aW5nRW50aXR5U2V0KTtcblx0XHRpZiAoc3RhcnRpbmdJbmRleCAhPT0gLTEpIHtcblx0XHRcdC8vIElmIGl0J3Mgbm90IGZvdW5kIEkgZG9uJ3Qga25vdyB3aGF0IHdlIGNhbiBkbyAocHJvYmFibHkgbm90aGluZylcblx0XHRcdGNvbnN0IHJlcXVpcmVkRGF0YU1vZGVsT2JqZWN0cyA9IGRhdGFNb2RlbE9iamVjdHMuc2xpY2UoMCwgc3RhcnRpbmdJbmRleCk7XG5cdFx0XHR0YXJnZXRFbnRpdHlTZXRMb2NhdGlvbi5zdGFydGluZ0VudGl0eVNldCA9IHJvb3RFbnRpdHlTZXQ7XG5cdFx0XHR0YXJnZXRFbnRpdHlTZXRMb2NhdGlvbi5uYXZpZ2F0aW9uUHJvcGVydGllcyA9IHJlcXVpcmVkRGF0YU1vZGVsT2JqZWN0c1xuXHRcdFx0XHQuZmlsdGVyKGlzTmF2aWdhdGlvblByb3BlcnR5KVxuXHRcdFx0XHQuY29uY2F0KHRhcmdldEVudGl0eVNldExvY2F0aW9uLm5hdmlnYXRpb25Qcm9wZXJ0aWVzIGFzIE5hdmlnYXRpb25Qcm9wZXJ0eVtdKTtcblx0XHR9XG5cdH1cblx0Y29uc3Qgb3V0RGF0YU1vZGVsUGF0aCA9IHtcblx0XHRzdGFydGluZ0VudGl0eVNldDogcm9vdEVudGl0eVNldCxcblx0XHR0YXJnZXRFbnRpdHlTZXQ6IGN1cnJlbnRFbnRpdHlTZXQsXG5cdFx0dGFyZ2V0RW50aXR5VHlwZTogY3VycmVudEVudGl0eVR5cGUsXG5cdFx0dGFyZ2V0T2JqZWN0OiBtZXRhTW9kZWxDb250ZXh0LnRhcmdldCxcblx0XHRuYXZpZ2F0aW9uUHJvcGVydGllcyxcblx0XHRjb250ZXh0TG9jYXRpb246IHRhcmdldEVudGl0eVNldExvY2F0aW9uLFxuXHRcdGNvbnZlcnRlZFR5cGVzOiBjb252ZXJ0ZWRUeXBlc1xuXHR9O1xuXHRpZiAoIWlzU2VydmljZU9iamVjdChvdXREYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCkgJiYgb25seVNlcnZpY2VPYmplY3RzKSB7XG5cdFx0b3V0RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QgPSBpc1NlcnZpY2VPYmplY3QoY3VycmVudE9iamVjdCkgPyBjdXJyZW50T2JqZWN0IDogdW5kZWZpbmVkO1xuXHR9XG5cdGlmICghb3V0RGF0YU1vZGVsUGF0aC5jb250ZXh0TG9jYXRpb24pIHtcblx0XHRvdXREYXRhTW9kZWxQYXRoLmNvbnRleHRMb2NhdGlvbiA9IG91dERhdGFNb2RlbFBhdGg7XG5cdH1cblx0cmV0dXJuIG91dERhdGFNb2RlbFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxUPjtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGZldGNoZXMgdGhlIHRlY2huaWNhbCBhbmQgc2VtYW50aWMga2V5cyBvZiBlbnRpdHkgc2V0cy5cbiAqIEBwYXJhbSBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgb2JqZWN0IGNvbnRhaW5pbmcgdGVjaG5pY2FsIGFuZCBzZW1hbnRpYyBrZXlzIG9mIHRoZSBlbnRpdHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdEVudGl0eUtleXMoY29udGV4dDogT0RhdGFWNENvbnRleHQpOiB7XG5cdHRlY2huaWNhbEtleXM6IHN0cmluZ1tdO1xuXHRzZW1hbnRpY0tleXM6IHN0cmluZ1tdO1xufSB7XG5cdGNvbnN0IG1ldGFNb2RlbCA9IGNvbnRleHQ/LmdldE1vZGVsKCk/LmdldE1ldGFNb2RlbCgpO1xuXHRpZiAobWV0YU1vZGVsKSB7XG5cdFx0Y29uc3QgbWV0YVBhdGggPSBtZXRhTW9kZWwuZ2V0TWV0YVBhdGgoY29udGV4dD8uZ2V0UGF0aCgpKTtcblx0XHRjb25zdCBkYXRhTW9kZWwgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KG1ldGFQYXRoKSk7XG5cdFx0Y29uc3Qgcm9vdFNlbWFudGljS2V5cyA9IGRhdGFNb2RlbC50YXJnZXRFbnRpdHlUeXBlLmFubm90YXRpb25zLkNvbW1vbj8uU2VtYW50aWNLZXk7XG5cdFx0bGV0IHNlbWFudGljS2V5czogc3RyaW5nW10gPSBbXTtcblx0XHRpZiAocm9vdFNlbWFudGljS2V5cykge1xuXHRcdFx0c2VtYW50aWNLZXlzID0gcm9vdFNlbWFudGljS2V5cy5tYXAoKGtleSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4ga2V5LnZhbHVlO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGNvbnN0IHJvb3RUZWNobmljYWxLZXlzID0gZGF0YU1vZGVsLnRhcmdldEVudGl0eVR5cGUua2V5cztcblx0XHRsZXQgdGVjaG5pY2FsS2V5czogc3RyaW5nW10gPSBbXTtcblx0XHRpZiAocm9vdFRlY2huaWNhbEtleXMpIHtcblx0XHRcdHRlY2huaWNhbEtleXMgPSByb290VGVjaG5pY2FsS2V5cy5tYXAoKGtleSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4ga2V5Lm5hbWU7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbWFudGljS2V5czogc2VtYW50aWNLZXlzLFxuXHRcdFx0dGVjaG5pY2FsS2V5czogdGVjaG5pY2FsS2V5c1xuXHRcdH07XG5cdH1cblx0cmV0dXJuIHsgdGVjaG5pY2FsS2V5czogW10sIHNlbWFudGljS2V5czogW10gfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RNb2RlbEFuZFBhdGg8VCBleHRlbmRzIHN0cmluZyB8IHVuZGVmaW5lZD4obWV0YVBhdGg6IFQpOiB7IGlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7IHBhdGg6IFQgfSB7XG5cdGlmIChtZXRhUGF0aD8uaW5jbHVkZXMoXCI+XCIpKSB7XG5cdFx0Y29uc3QgW21vZGVsSWQsIC4uLnBhdGhdID0gbWV0YVBhdGguc3BsaXQoXCI+XCIpO1xuXHRcdGNvbnN0IHRhcmdldFBhdGggPSBwYXRoLmpvaW4oXCI+XCIpO1xuXHRcdHJldHVybiB7IGlkOiBtb2RlbElkLCBwYXRoOiB0YXJnZXRQYXRoIGFzIFQgfTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4geyBpZDogdW5kZWZpbmVkLCBwYXRoOiBtZXRhUGF0aCB9O1xuXHR9XG59XG5cbi8qKlxuICogRmV0Y2hlcyB0aGUgRGF0YU1vZGVsIE9iamVjdCBQYXRoIGZvciBhIGdpdmVuIHRhcmdldCBwYXRoLlxuICogQHBhcmFtIHRhcmdldFBhdGhcbiAqIEBwYXJhbSBtZXRhTW9kZWxcbiAqIEByZXR1cm5zIERhdGFNb2RlbCBPYmplY3QgUGF0aCBmb3IgdGFyZ2V0IHBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0c0ZvclRhcmdldFBhdGg8VD4oXG5cdHRhcmdldFBhdGg6IHN0cmluZyxcblx0bWV0YU1vZGVsPzogT0RhdGFNZXRhTW9kZWxcbik6IERhdGFNb2RlbE9iamVjdFBhdGg8VD4gfCB1bmRlZmluZWQge1xuXHRjb25zdCBtZXRhUGF0aCA9IG1ldGFNb2RlbD8uZ2V0TWV0YVBhdGgodGFyZ2V0UGF0aCk7XG5cdGNvbnN0IG1ldGFDb250ZXh0ID0gbWV0YVBhdGggPyBtZXRhTW9kZWw/LmdldENvbnRleHQobWV0YVBhdGgpIDogdW5kZWZpbmVkO1xuXHRyZXR1cm4gbWV0YUNvbnRleHQgJiYgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFDb250ZXh0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gb2YgYSB2aXJ0dWFsIHBhdGguXG4gKiBAcGFyYW0gcGF0aCBUaGUgdmlydHVhbCBwYXRoXG4gKiBAcGFyYW0gY29udmVydGVkVHlwZXMgVGhlIGNvbnZlcnRlZCBtZXRhZGF0YVxuICogQHJldHVybnMgRGF0YU1vZGVsIE9iamVjdCBQYXRoIGZvciB0YXJnZXQgcGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmlydHVhbEJpbmRpbmdFeHByZXNzaW9uKFxuXHRwYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlZFR5cGVzOiBDb252ZXJ0ZWRNZXRhZGF0YVxuKTogeyBleHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj47IHZpZXdJZD86IHN0cmluZyB9IHtcblx0Y29uc3QgdmlydHVhbEtleSA9IFwiQCR1aTUuZmUudmlydHVhbC5cIjtcblx0aWYgKHBhdGguaW5jbHVkZXModmlydHVhbEtleSkpIHtcblx0XHRjb25zdCBpZCA9IE9iamVjdC5rZXlzKGNvbnZlcnRlZE1ldGFNb2RlbE1hcCkuZmluZCgoaWQpID0+IGNvbnZlcnRlZE1ldGFNb2RlbE1hcFtpZF0gPT09IGNvbnZlcnRlZFR5cGVzKTtcblx0XHRpZiAoaWQgJiYgdmlydHVhbFByb3BlcnRpZXNNYXBbaWRdKSB7XG5cdFx0XHRjb25zdCByZWxhdGl2ZVBhdGggPSBwYXRoLnN1YnN0cmluZygwLCBwYXRoLmluZGV4T2YoY29udmVydGVkVHlwZXMubmFtZXNwYWNlKSk7XG5cdFx0XHRjb25zdCBwYXRoSW5mb3MgPSBwYXRoLnNwbGl0KHZpcnR1YWxLZXkpO1xuXHRcdFx0aWYgKHBhdGhJbmZvcy5sZW5ndGggPT09IDIpIHtcblx0XHRcdFx0Y29uc3QgbWV0aG9kID0gcGF0aEluZm9zWzFdO1xuXHRcdFx0XHRjb25zdCB2aXJ0dWFsUHJvcGVydHkgPSBwYXRoSW5mb3NbMF0ucmVwbGFjZShyZWxhdGl2ZVBhdGgsIFwiXCIpO1xuXHRcdFx0XHRjb25zdCB2aXJ0dWFsUHJvcGVydHlGbiA9IHZpcnR1YWxQcm9wZXJ0aWVzTWFwW2lkXVttZXRob2RdO1xuXHRcdFx0XHRpZiAodmlydHVhbFByb3BlcnR5Rm4/LmZuKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdGV4cHJlc3Npb246IHZpcnR1YWxQcm9wZXJ0eUZuLmZuKHZpcnR1YWxQcm9wZXJ0eSwgY29udmVydGVkVHlwZXMsIHJlbGF0aXZlUGF0aCksXG5cdFx0XHRcdFx0XHR2aWV3SWQ6IHZpcnR1YWxQcm9wZXJ0eUZuLnZpZXdJZFxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHsgZXhwcmVzc2lvbjogY29uc3RhbnQodW5kZWZpbmVkKSB9O1xuXHR9XG5cdHJldHVybiB7IGV4cHJlc3Npb246IGNvbnN0YW50KHVuZGVmaW5lZCkgfTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gb2YgYSBjcml0aWNhbGl0eS5cbiAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHBvaW50aW5nIHRvIGEgRGF0YUZpZWxkIG9yIERhdGFQb2ludFxuICogQHBhcmFtIGNvbnZlcnRlZFR5cGVzIFRoZSBjb252ZXJ0ZWQgbWV0YWRhdGFcbiAqIEBwYXJhbSByZWxhdGl2ZVBhdGggVGhlIHJlbGF0aXZlIHBhdGggb2YgdGhlIGJpbmRpbmcgZXhwcmVzc2lvblxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBvZiB0aGUgY3JpdGljYWxpdHlcbiAqL1xuZnVuY3Rpb24gZ2V0VmlydHVhbENyaXRpY2FsaXR5RXhwcmVzc2lvbihcblx0cGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZWRUeXBlczogQ29udmVydGVkTWV0YWRhdGEsXG5cdHJlbGF0aXZlUGF0aD86IHN0cmluZ1xuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+IHtcblx0Y29uc3QgY3JpdGljYWxpdHlQcm9wZXJ0eSA9IGNvbnZlcnRlZFR5cGVzLnJlc29sdmVQYXRoPERhdGFQb2ludFR5cGUgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzPihwYXRoKT8udGFyZ2V0Py5Dcml0aWNhbGl0eTtcblx0Y29uc3QgY3JpdGljYWxpdHlFeHByZXNzaW9uID0gY3JpdGljYWxpdHlQcm9wZXJ0eVxuXHRcdD8gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKFxuXHRcdFx0XHRjcml0aWNhbGl0eVByb3BlcnR5IGFzIHVua25vd24gYXMgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8UHJpbWl0aXZlVHlwZT4sXG5cdFx0XHRcdFtdLFxuXHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdChiaW5kaW5nUGF0aDogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHJlbGF0aXZlUGF0aCA/IGAke3JlbGF0aXZlUGF0aH0ke2JpbmRpbmdQYXRofWAgOiBiaW5kaW5nUGF0aDtcblx0XHRcdFx0fVxuXHRcdCAgKVxuXHRcdDogdW5kZWZpbmVkO1xuXHRpZiAoIWNyaXRpY2FsaXR5RXhwcmVzc2lvbikge1xuXHRcdHJldHVybiBjb25zdGFudCh1bmRlZmluZWQpO1xuXHR9XG5cdHJldHVybiBmb3JtYXRSZXN1bHQoW2NyaXRpY2FsaXR5RXhwcmVzc2lvbl0sIFwiLl9mb3JtYXR0ZXJzLkNyaXRpY2FsaXR5Rm9ybWF0dGVyI2dldENyaXRpY2FsaXR5XCIpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBa0lBLFNBQVNBLGtCQUFrQkEsQ0FDMUJDLGdCQUFxQyxFQUNyQ0MsV0FBbUIsRUFDbkJDLGFBQXFCLEVBQ3JCQyxnQkFBZ0QsRUFDaERDLGFBQXNDLEVBQ0E7SUFDdEMsSUFBSUMsS0FBa0I7SUFDdEIsSUFBSUwsZ0JBQWdCLEtBQUssSUFBSSxFQUFFO01BQzlCSyxLQUFLLEdBQUc7UUFBRUMsSUFBSSxFQUFFO01BQU8sQ0FBQztJQUN6QixDQUFDLE1BQU0sSUFBSSxPQUFPTixnQkFBZ0IsS0FBSyxRQUFRLEVBQUU7TUFDaERLLEtBQUssR0FBRztRQUFFQyxJQUFJLEVBQUUsUUFBUTtRQUFFQyxNQUFNLEVBQUVQO01BQWlCLENBQUM7SUFDckQs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
1350
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYXJzZVByb3BlcnR5VmFsdWUiLCJhbm5vdGF0aW9uT2JqZWN0IiwicHJvcGVydHlLZXkiLCJjdXJyZW50VGFyZ2V0IiwiYW5ub3RhdGlvbnNMaXN0cyIsIm9DYXBhYmlsaXRpZXMiLCJ2YWx1ZSIsInR5cGUiLCJTdHJpbmciLCJCb29sIiwiSW50IiwiQXJyYXkiLCJpc0FycmF5IiwiY29sbGVjdGlvblZhbHVlIiwiQ29sbGVjdGlvbiIsIm1hcCIsInN1YkFubm90YXRpb25PYmplY3QiLCJzdWJBbm5vdGF0aW9uT2JqZWN0SW5kZXgiLCJwYXJzZUFubm90YXRpb25PYmplY3QiLCJsZW5ndGgiLCJoYXNPd25Qcm9wZXJ0eSIsIiRQYXRoIiwidW5kZWZpbmVkIiwiUGF0aCIsIiREZWNpbWFsIiwiRGVjaW1hbCIsInBhcnNlRmxvYXQiLCIkUHJvcGVydHlQYXRoIiwiUHJvcGVydHlQYXRoIiwiJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJOYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwiJElmIiwiJEFuZCIsIiRPciIsIiROb3QiLCIkRXEiLCIkTmUiLCIkR3QiLCIkR2UiLCIkTHQiLCIkTGUiLCIkQXBwbHkiLCIkRnVuY3Rpb24iLCIkQW5ub3RhdGlvblBhdGgiLCJBbm5vdGF0aW9uUGF0aCIsIiRFbnVtTWVtYmVyIiwiRW51bU1lbWJlciIsIlJlY29yZCIsIm5hbWUiLCJjdXJyZW50T2JqZWN0VGFyZ2V0IiwicGFyc2VkQW5ub3RhdGlvbk9iamVjdCIsInBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uIiwiY29sbGVjdGlvbiIsInN1YkFubm90YXRpb25JbmRleCIsInBhcnNlZEFubm90YXRpb25PYmplY3RSZWNvcmQiLCJwcm9wZXJ0eVZhbHVlcyIsIiRUeXBlIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJzdGFydHNXaXRoIiwicHVzaCIsImNyZWF0ZUFubm90YXRpb25MaXN0cyIsImdldE9yQ3JlYXRlQW5ub3RhdGlvbkxpc3QiLCJ0YXJnZXQiLCJhbm5vdGF0aW9ucyIsImNyZWF0ZVJlZmVyZW5jZUZhY2V0SWQiLCJyZWZlcmVuY2VGYWNldCIsImlkIiwiSUQiLCJUYXJnZXQiLCJwcmVwYXJlSWQiLCJyZW1vdmVDaGFydEFubm90YXRpb25zIiwiZmlsdGVyIiwib1JlY29yZCIsInJlY29yZEFzUmVmRmFjZXQiLCJpbmNsdWRlcyIsInJlbW92ZUlCTkFubm90YXRpb25zIiwiaGFuZGxlUHJlc2VudGF0aW9uVmFyaWFudCIsImFubm90YXRpb25PYmplY3RzIiwiYW5ub3RhdGlvblRhcmdldCIsImFubm90YXRpb25MaXN0cyIsIm91dEFubm90YXRpb25PYmplY3QiLCJNaWNyb0NoYXJ0IiwibG9hZExpYnJhcnkiLCJhbm5vdGF0aW9uS2V5IiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZmllbGRHcm91cEFubm90YXRpb24iLCJEYXRhIiwicHJlc2VudGF0aW9uVmFyaWFudCIsIkNoYXJ0IiwiVmlzdWFsaXphdGlvbnMiLCJmaWx0ZXJSZXN0cmljdGlvbnMiLCJGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zIiwic29tZSIsIkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbiIsIlByb3BlcnR5IiwiQWxsb3dlZEV4cHJlc3Npb25zIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiY3VycmVudE91dEFubm90YXRpb25PYmplY3QiLCJmaW5hbEtleSIsImFubm90YXRpb25PZkFubm90YXRpb25TcGxpdCIsInNwbGl0IiwiYW5ub3RhdGlvblF1YWxpZmllclNwbGl0IiwicXVhbGlmaWVyIiwidGVybSIsImN1cnJlbnRBbm5vdGF0aW9uVGFyZ2V0IiwiYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UiLCJyZWNvcmQiLCJ0eXBlVmFsdWUiLCJwcmVwYXJlUHJvcGVydHkiLCJwcm9wZXJ0eURlZmluaXRpb24iLCJlbnRpdHlUeXBlT2JqZWN0IiwicHJvcGVydHlOYW1lIiwiX3R5cGUiLCJtYXhMZW5ndGgiLCIkTWF4TGVuZ3RoIiwicHJlY2lzaW9uIiwiJFByZWNpc2lvbiIsInNjYWxlIiwiJFNjYWxlIiwibnVsbGFibGUiLCIkTnVsbGFibGUiLCJwcmVwYXJlTmF2aWdhdGlvblByb3BlcnR5IiwibmF2UHJvcGVydHlEZWZpbml0aW9uIiwibmF2UHJvcGVydHlOYW1lIiwicmVmZXJlbnRpYWxDb25zdHJhaW50IiwiJFJlZmVyZW50aWFsQ29uc3RyYWludCIsInNvdXJjZVByb3BlcnR5TmFtZSIsInNvdXJjZVR5cGVOYW1lIiwic291cmNlUHJvcGVydHkiLCJ0YXJnZXRUeXBlTmFtZSIsInRhcmdldFByb3BlcnR5IiwibmF2aWdhdGlvblByb3BlcnR5IiwicGFydG5lciIsIiRQYXJ0bmVyIiwiaXNDb2xsZWN0aW9uIiwiJGlzQ29sbGVjdGlvbiIsImNvbnRhaW5zVGFyZ2V0IiwiJENvbnRhaW5zVGFyZ2V0IiwicHJlcGFyZU5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmciLCJuYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nIiwiZW50aXR5Q29udGFpbmVyTmFtZSIsImZyb21FbnRyaWVzIiwiZW50cmllcyIsIl9yZWYiLCJwYXRoIiwicHJlcGFyZUVudGl0eVNldCIsImVudGl0eVNldERlZmluaXRpb24iLCJlbnRpdHlTZXROYW1lIiwiJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmciLCJlbnRpdHlUeXBlTmFtZSIsInByZXBhcmVTaW5nbGV0b24iLCJzaW5nbGV0b25EZWZpbml0aW9uIiwic2luZ2xldG9uTmFtZSIsInByZXBhcmVBY3Rpb25JbXBvcnQiLCJhY3Rpb25JbXBvcnQiLCJhY3Rpb25JbXBvcnROYW1lIiwiYWN0aW9uTmFtZSIsIiRraW5kIiwiJEFjdGlvbiIsInByZXBhcmVUeXBlRGVmaW5pdGlvbiIsInR5cGVEZWZpbml0aW9uIiwidHlwZU5hbWUiLCJuYW1lc3BhY2VQcmVmaXgiLCJ0eXBlT2JqZWN0Iiwic3Vic3RyaW5nIiwidW5kZXJseWluZ1R5cGUiLCIkVW5kZXJseWluZ1R5cGUiLCJwcmVwYXJlQ29tcGxleFR5cGUiLCJjb21wbGV4VHlwZURlZmluaXRpb24iLCJjb21wbGV4VHlwZU5hbWUiLCJjb21wbGV4VHlwZU9iamVjdCIsInByb3BlcnRpZXMiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsImNvbXBsZXhUeXBlUHJvcGVydGllcyIsInByb3BlcnR5TmFtZU9yTm90Iiwic29ydCIsImEiLCJiIiwiY29tcGxleFR5cGVOYXZpZ2F0aW9uUHJvcGVydGllcyIsInByZXBhcmVFbnRpdHlLZXlzIiwiZW50aXR5VHlwZURlZmluaXRpb24iLCJvTWV0YU1vZGVsRGF0YSIsIiRLZXkiLCIkQmFzZVR5cGUiLCJwcmVwYXJlRW50aXR5VHlwZSIsIm1ldGFNb2RlbERhdGEiLCJpZ25vcmVEYXRhZmllbGREZWZhdWx0IiwiZW50aXR5VHlwZSIsImVudGl0eVByb3BlcnRpZXMiLCJhY3Rpb25zIiwia2V5IiwicHJvcGVydHkiLCJlbnRpdHlLZXkiLCJmaW5kIiwiZW50aXR5VHlwZUFubm90YXRpb25zIiwiJEFubm90YXRpb25zIiwiZmlsdGVyRmFjZXRzIiwiZmlsdGVyRmFjZXRBbm5vdGF0aW9uIiwiaGVhZGVySW5mb0Fubm90YXRpb24iLCJUeXBlTmFtZSIsIlR5cGVOYW1lUGx1cmFsIiwiVGl0bGUiLCJWYWx1ZSIsImVudGl0eVByb3BlcnR5IiwicHJlcGFyZUFjdGlvbiIsImFjdGlvblJhd0RhdGEiLCJvdmVybG9hZFBhcmFtZXRlcnMiLCIkUGFyYW1ldGVyIiwiJElzQm91bmQiLCJvdmVybG9hZCIsInBhcmFtZXRlciIsImpvaW4iLCJwYXJhbWV0ZXJzIiwiaXNCb3VuZCIsImlzRnVuY3Rpb24iLCJzb3VyY2VUeXBlIiwicmV0dXJuVHlwZSIsIiRSZXR1cm5UeXBlIiwicmV0dXJuQ29sbGVjdGlvbiIsInBhcmFtIiwiJE5hbWUiLCJwYXJzZUVudGl0eUNvbnRhaW5lciIsImVudGl0eUNvbnRhaW5lck1ldGFkYXRhIiwic2NoZW1hIiwiZW50aXR5Q29udGFpbmVyIiwiZWxlbWVudE5hbWUiLCJlbGVtZW50VmFsdWUiLCJlbnRpdHlTZXRzIiwic2luZ2xldG9ucyIsImFjdGlvbkltcG9ydHMiLCJwYXJzZUFubm90YXRpb25zIiwiY2FwYWJpbGl0aWVzIiwidmFsdWVzIiwicGFyc2VTY2hlbWEiLCJtZXRhbW9kZWxPYmplY3QiLCJuYW1lc3BhY2UiLCJzbGljZSIsImVudGl0eVR5cGVzIiwiY29tcGxleFR5cGVzIiwidHlwZURlZmluaXRpb25zIiwiYXNzb2NpYXRpb25zIiwiYXNzb2NpYXRpb25TZXRzIiwicGFyc2VNZXRhTW9kZWxFbGVtZW50Iiwic3ViRWxlbWVudFZhbHVlIiwicGFyc2VNZXRhTW9kZWwiLCJtZXRhTW9kZWwiLCJhcmd1bWVudHMiLCJEZWZhdWx0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJyZXN1bHQiLCJpZGVudGlmaWNhdGlvbiIsInZlcnNpb24iLCJyZWZlcmVuY2VzIiwiQW5ub3RhdGlvbkNvbnZlcnRlciIsImxhenkiLCJnZXRPYmplY3QiLCJfZXhwb3J0cyIsImNvbnZlcnRlZE1ldGFNb2RlbE1hcCIsIm1ldGFNb2RlbElETWFwIiwibWV0YU1vZGVsTWFwIiwiV2Vha01hcCIsInZpcnR1YWxQcm9wZXJ0aWVzTWFwIiwiY29udmVydFR5cGVzIiwib01ldGFNb2RlbCIsIm1ldGFNb2RlbElEIiwicGFyc2VkT3V0cHV0IiwiY29udmVydCIsImNyaXRpY2FsaXR5IiwiZm4iLCJnZXRWaXJ0dWFsQ3JpdGljYWxpdHlFeHByZXNzaW9uIiwibWV0YU1vZGVsU3ltYm9sIiwic2V0Iiwib0Vycm9yIiwiRXJyb3IiLCJyZWdpc3RlclZpcnR1YWxQcm9wZXJ0eSIsImNvbnZlcnRlZFR5cGVzIiwiZm5WaXJ0dWFsUHJvcGVydHkiLCJ2aWV3SWQiLCJnZXRNZXRhTW9kZWxCeUlkIiwic3ltYm9sIiwiZ2V0IiwiZ2V0Q29udmVydGVkVHlwZXMiLCJvQ29udGV4dCIsImdldE1vZGVsIiwiaXNBIiwiZGVsZXRlTW9kZWxDYWNoZURhdGEiLCJjb252ZXJ0TWV0YU1vZGVsQ29udGV4dCIsIm9NZXRhTW9kZWxDb250ZXh0IiwiYkluY2x1ZGVWaXNpdGVkT2JqZWN0cyIsIm9Db252ZXJ0ZWRNZXRhZGF0YSIsInNQYXRoIiwiZ2V0UGF0aCIsImFQYXRoU3BsaXQiLCJmaXJzdFBhcnQiLCJiZWdpbkluZGV4IiwidGFyZ2V0RW50aXR5U2V0IiwiZW50aXR5U2V0Iiwic2luZ2xldG9uIiwicmVsYXRpdmVQYXRoIiwibG9jYWxPYmplY3RzIiwicmVsYXRpdmVTcGxpdCIsImlkeCIsImN1cnJlbnRFbnRpdHlTZXQiLCJzTmF2UHJvcFRvQ2hlY2siLCJyZXBsYWNlIiwiYU5hdlByb3BzIiwidGFyZ2V0RW50aXR5VHlwZSIsInNOYXZQcm9wIiwidGFyZ2V0TmF2UHJvcCIsIm5hdlByb3AiLCJ0YXJnZXRUeXBlIiwic2hpZnQiLCJvVGFyZ2V0IiwicmVzb2x2ZVBhdGgiLCJ2aXNpdGVkT2JqZWN0cyIsImNvbmNhdCIsImFjdGlvbiIsInBhcmFtZXRlck5hbWUiLCJlbmRzV2l0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsIm9FbnRpdHlTZXRNZXRhTW9kZWxDb250ZXh0IiwibWV0YU1vZGVsQ29udGV4dCIsInRhcmdldEVudGl0eVNldExvY2F0aW9uIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RGcm9tUGF0aCIsIm9ubHlTZXJ2aWNlT2JqZWN0cyIsImRhdGFNb2RlbE9iamVjdHMiLCJ2aXNpdGVkT2JqZWN0IiwiaXNTZXJ2aWNlT2JqZWN0IiwiaXNFbnRpdHlUeXBlIiwiaXNFbnRpdHlDb250YWluZXIiLCJyb290RW50aXR5U2V0IiwiY3VycmVudEVudGl0eVR5cGUiLCJjdXJyZW50T2JqZWN0IiwibmF2aWdhdGVkUGF0aCIsImkiLCJpc05hdmlnYXRpb25Qcm9wZXJ0eSIsImJvdW5kRW50aXR5U2V0IiwiaXNFbnRpdHlTZXQiLCJpc1NpbmdsZXRvbiIsInN0YXJ0aW5nRW50aXR5U2V0Iiwic3RhcnRpbmdJbmRleCIsImluZGV4T2YiLCJyZXF1aXJlZERhdGFNb2RlbE9iamVjdHMiLCJvdXREYXRhTW9kZWxQYXRoIiwidGFyZ2V0T2JqZWN0IiwiY29udGV4dExvY2F0aW9uIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RFbnRpdHlLZXlzIiwiY29udGV4dCIsImdldE1ldGFNb2RlbCIsIm1ldGFQYXRoIiwiZ2V0TWV0YVBhdGgiLCJkYXRhTW9kZWwiLCJnZXRNZXRhQ29udGV4dCIsInJvb3RTZW1hbnRpY0tleXMiLCJDb21tb24iLCJTZW1hbnRpY0tleSIsInNlbWFudGljS2V5cyIsInJvb3RUZWNobmljYWxLZXlzIiwidGVjaG5pY2FsS2V5cyIsImV4dHJhY3RNb2RlbEFuZFBhdGgiLCJtb2RlbElkIiwidGFyZ2V0UGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0c0ZvclRhcmdldFBhdGgiLCJtZXRhQ29udGV4dCIsImdldENvbnRleHQiLCJnZXRWaXJ0dWFsQmluZGluZ0V4cHJlc3Npb24iLCJ2aXJ0dWFsS2V5IiwicGF0aEluZm9zIiwibWV0aG9kIiwidmlydHVhbFByb3BlcnR5IiwidmlydHVhbFByb3BlcnR5Rm4iLCJleHByZXNzaW9uIiwiY29uc3RhbnQiLCJjcml0aWNhbGl0eVByb3BlcnR5IiwiQ3JpdGljYWxpdHkiLCJjcml0aWNhbGl0eUV4cHJlc3Npb24iLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJiaW5kaW5nUGF0aCIsImZvcm1hdFJlc3VsdCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiTWV0YU1vZGVsQ29udmVydGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgZmlsZSBpcyByZXRyaWV2ZWQgZnJvbSBAc2FwLXV4L2Fubm90YXRpb24tY29udmVydGVyLCBzaGFyZWQgY29kZSB3aXRoIHRvb2wgc3VpdGVcbmltcG9ydCB0eXBlIHtcblx0QWN0aW9uUGFyYW1ldGVyLFxuXHRBbm5vdGF0aW9uTGlzdCxcblx0QW5ub3RhdGlvblJlY29yZCxcblx0QW5ub3RhdGlvblRlcm0sXG5cdENvbnZlcnRlZE1ldGFkYXRhLFxuXHRFbnRpdHlTZXQsXG5cdEVudGl0eVR5cGUsXG5cdEV4cHJlc3Npb24sXG5cdE5hdmlnYXRpb25Qcm9wZXJ0eSxcblx0UmF3QWN0aW9uLFxuXHRSYXdBY3Rpb25JbXBvcnQsXG5cdFJhd0Fubm90YXRpb24sXG5cdFJhd0NvbXBsZXhUeXBlLFxuXHRSYXdFbnRpdHlTZXQsXG5cdFJhd0VudGl0eVR5cGUsXG5cdFJhd01ldGFkYXRhLFxuXHRSYXdOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nLFxuXHRSYXdQcm9wZXJ0eSxcblx0UmF3U2NoZW1hLFxuXHRSYXdTaW5nbGV0b24sXG5cdFJhd1R5cGVEZWZpbml0aW9uLFxuXHRSYXdWNE5hdmlnYXRpb25Qcm9wZXJ0eSxcblx0UmVmZXJlbnRpYWxDb25zdHJhaW50LFxuXHRTZXJ2aWNlT2JqZWN0LFxuXHRTZXJ2aWNlT2JqZWN0QW5kQW5ub3RhdGlvbixcblx0U2luZ2xldG9uXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBBcHBseUV4cHJlc3Npb24sIENvbGxlY3Rpb24sIENvbGxlY3Rpb25FeHByZXNzaW9uLCBQcm9wZXJ0eVZhbHVlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL0Jhc2VFZG1cIjtcbmltcG9ydCB0eXBlIHsgQW5ub3RhdGlvblBhdGgsIFByaW1pdGl2ZVR5cGUsIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlLCBSZWNvcmRDb21wbGV4VHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9FZG1cIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlBbm5vdGF0aW9uc19BbmFseXRpY3MgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0FuYWx5dGljc19FZG1cIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyUmVzdHJpY3Rpb25zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9DYXBhYmlsaXRpZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0RW50aXR5U2V0QW5ub3RhdGlvbnNfQ2FwYWJpbGl0aWVzLFxuXHRFbnRpdHlUeXBlQW5ub3RhdGlvbnNfQ2FwYWJpbGl0aWVzLFxuXHRQcm9wZXJ0eUFubm90YXRpb25zX0NhcGFiaWxpdGllc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NhcGFiaWxpdGllc19FZG1cIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlBbm5vdGF0aW9uc19Db21tb24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vbl9FZG1cIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlBbm5vdGF0aW9uc19Db21tdW5pY2F0aW9uIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tdW5pY2F0aW9uX0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUFubm90YXRpb25zX0NvcmUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvcmVfRWRtXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5QW5ub3RhdGlvbnNfTWVhc3VyZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL01lYXN1cmVzX0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUFubm90YXRpb25zX1BlcnNvbmFsRGF0YSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvUGVyc29uYWxEYXRhX0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUFubm90YXRpb25zX1Nlc3Npb24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1Nlc3Npb25fRWRtXCI7XG5pbXBvcnQgdHlwZSB7XG5cdENoYXJ0LFxuXHREYXRhRmllbGQsXG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFQb2ludCxcblx0RGF0YVBvaW50VHlwZSxcblx0RmFjZXRUeXBlcyxcblx0RmllbGRHcm91cCxcblx0RmlsdGVyRmFjZXRzLFxuXHRIZWFkZXJGYWNldHMsXG5cdEhlYWRlckluZm8sXG5cdExpbmVJdGVtLFxuXHRQcmVzZW50YXRpb25WYXJpYW50LFxuXHRSZWZlcmVuY2VGYWNldCxcblx0VGV4dEFycmFuZ2VtZW50XG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblRlcm1zLCBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIHtcblx0RW50aXR5U2V0QW5ub3RhdGlvbnNfVUksXG5cdEVudGl0eVR5cGVBbm5vdGF0aW9uc19VSSxcblx0UHJvcGVydHlBbm5vdGF0aW9uc19VSVxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJX0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGNvbnN0YW50LCBmb3JtYXRSZXN1bHQsIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgQW5ub3RhdGlvbkNvbnZlcnRlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbW1vblwiO1xuaW1wb3J0IHtcblx0aXNFbnRpdHlDb250YWluZXIsXG5cdGlzRW50aXR5U2V0LFxuXHRpc0VudGl0eVR5cGUsXG5cdGlzTmF2aWdhdGlvblByb3BlcnR5LFxuXHRpc1NlcnZpY2VPYmplY3QsXG5cdGlzU2luZ2xldG9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB0eXBlIHsgRW52aXJvbm1lbnRDYXBhYmlsaXRpZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvRW52aXJvbm1lbnRTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHsgRGVmYXVsdEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL0Vudmlyb25tZW50U2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0Q29udGV4dCwgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT0RhdGFWNENvbnRleHQgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgRXhwYW5kUGF0aFR5cGUsIE1ldGFNb2RlbEVudW0sIE1ldGFNb2RlbFR5cGUsIFJlbmFtZSB9IGZyb20gXCJ0eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcbmltcG9ydCB7IHByZXBhcmVJZCB9IGZyb20gXCIuLi9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5cbmV4cG9ydCB0eXBlIE1ldGFNb2RlbEFjdGlvblBhcmFtZXRlciA9IHtcblx0JFR5cGU6IHN0cmluZztcblx0JE5hbWU6IHN0cmluZztcblx0JE51bGxhYmxlPzogYm9vbGVhbjtcblx0JE1heExlbmd0aD86IG51bWJlcjtcblx0JFByZWNpc2lvbj86IG51bWJlcjtcblx0JFNjYWxlPzogbnVtYmVyO1xuXHQkaXNDb2xsZWN0aW9uPzogYm9vbGVhbjtcbn07XG5leHBvcnQgdHlwZSBNZXRhTW9kZWxBY3Rpb24gPSB7XG5cdCRraW5kOiBcIkFjdGlvblwiIHwgXCJGdW5jdGlvblwiO1xuXHQkSXNCb3VuZDogYm9vbGVhbjtcblx0JEVudGl0eVNldFBhdGg6IHN0cmluZztcblx0JFBhcmFtZXRlcjogTWV0YU1vZGVsQWN0aW9uUGFyYW1ldGVyW107XG5cdCRSZXR1cm5UeXBlOiB7XG5cdFx0JFR5cGU6IHN0cmluZztcblx0XHQkaXNDb2xsZWN0aW9uPzogYm9vbGVhbjtcblx0fTtcbn07XG5cbnR5cGUgTWV0YU1vZGVsQW5ub3RhdGlvbiA9IG51bGwgfCBzdHJpbmcgfCBib29sZWFuIHwgbnVtYmVyIHwgTWV0YU1vZGVsQW5ub3RhdGlvblJlY29yZDtcbnR5cGUgTWV0YU1vZGVsQW5ub3RhdGlvblJlY29yZCA9IHtcblx0JFR5cGU6IHN0cmluZztcblx0JFByb3BlcnR5UGF0aD86IHN0cmluZztcblx0JFBhdGg/OiBzdHJpbmc7XG5cdCREZWNpbWFsPzogc3RyaW5nO1xuXHQkSWY/OiB1bmtub3duO1xuXHQkQW5kPzogdW5rbm93bjtcblx0JE9yPzogdW5rbm93bjtcblx0JE5vdD86IHVua25vd247XG5cdCRFcT86IHVua25vd247XG5cdCROZT86IHVua25vd247XG5cdCRHdD86IHVua25vd247XG5cdCRHZT86IHVua25vd247XG5cdCRMdD86IHVua25vd247XG5cdCRMZT86IHVua25vd247XG5cdCRBcHBseT86IHVua25vd247XG5cdCRGdW5jdGlvbj86IHVua25vd247XG5cdCRBbm5vdGF0aW9uUGF0aD86IHN0cmluZztcblx0JEVudW1NZW1iZXI/OiBzdHJpbmc7XG5cdCROYXZpZ2F0aW9uUHJvcGVydHlQYXRoPzogc3RyaW5nO1xufSAmIHtcblx0W3Byb3BlcnR5S2V5OiBzdHJpbmddOiBNZXRhTW9kZWxBbm5vdGF0aW9uO1xufTtcbmZ1bmN0aW9uIHBhcnNlUHJvcGVydHlWYWx1ZShcblx0YW5ub3RhdGlvbk9iamVjdDogTWV0YU1vZGVsQW5ub3RhdGlvbixcblx0cHJvcGVydHlLZXk6IHN0cmluZyxcblx0Y3VycmVudFRhcmdldDogc3RyaW5nLFxuXHRhbm5vdGF0aW9uc0xpc3RzOiBSZWNvcmQ8c3RyaW5nLCBBbm5vdGF0aW9uTGlzdD4sXG5cdG9DYXBhYmlsaXRpZXM6IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzXG4pOiB7IG5hbWU6IHN0cmluZzsgdmFsdWU6IEV4cHJlc3Npb24gfSB7XG5cdGxldCB2YWx1ZSE6IEV4cHJlc3Npb247XG5cdGlmIChhbm5vdGF0aW9uT2JqZWN0ID09PSBudWxsKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiTnVsbFwiIH07XG5cdH0gZWxzZSBpZiAodHlwZW9mIGFubm90YXRpb25PYmplY3QgPT09IFwic3RyaW5nXCIpIHtcblx0XHR2YWx1ZSA9IHsgdHlwZTogXCJTdHJpbmdcIiwgU3RyaW5nOiBhbm5vdGF0aW9uT2JqZWN0IH07XG5cdH0gZWxzZSBpZiAodHlwZW9mIGFubm90YXRpb25PYmplY3QgPT09IFwiYm9vbGVhblwiKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiQm9vbFwiLCBCb29sOiBhbm5vdGF0aW9uT2JqZWN0IH07XG5cdH0gZWxzZSBpZiAodHlwZW9mIGFubm90YXRpb25PYmplY3QgPT09IFwibnVtYmVyXCIpIHtcblx0XHR2YWx1ZSA9IHsgdHlwZTogXCJJbnRcIiwgSW50OiBhbm5vdGF0aW9uT2JqZWN0IH07XG5cdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhbm5vdGF0aW9uT2JqZWN0KSkge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25WYWx1ZTogQ29sbGVjdGlvbkV4cHJlc3Npb24gPSB7XG5cdFx0XHR0eXBlOiBcIkNvbGxlY3Rpb25cIixcblx0XHRcdENvbGxlY3Rpb246IGFubm90YXRpb25PYmplY3QubWFwKChzdWJBbm5vdGF0aW9uT2JqZWN0LCBzdWJBbm5vdGF0aW9uT2JqZWN0SW5kZXgpID0+XG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbk9iamVjdChcblx0XHRcdFx0XHRzdWJBbm5vdGF0aW9uT2JqZWN0LFxuXHRcdFx0XHRcdGAke2N1cnJlbnRUYXJnZXR9LyR7cHJvcGVydHlLZXl9LyR7c3ViQW5ub3RhdGlvbk9iamVjdEluZGV4fWAsXG5cdFx0XHRcdFx0YW5ub3RhdGlvbnNMaXN0cyxcblx0XHRcdFx0XHRvQ2FwYWJpbGl0aWVzXG5cdFx0XHRcdClcblx0XHRcdCkgYXMgQ29sbGVjdGlvblxuXHRcdH07XG5cdFx0aWYgKGFubm90YXRpb25PYmplY3QubGVuZ3RoID4gMCkge1xuXHRcdFx0aWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkUHJvcGVydHlQYXRoXCIpKSB7XG5cdFx0XHRcdGNvbGxlY3Rpb25WYWx1ZS5Db2xsZWN0aW9uLnR5cGUgPSBcIlByb3BlcnR5UGF0aFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJFBhdGhcIikpIHtcblx0XHRcdFx0Y29sbGVjdGlvblZhbHVlLkNvbGxlY3Rpb24udHlwZSA9IFwiUGF0aFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIikpIHtcblx0XHRcdFx0Y29sbGVjdGlvblZhbHVlLkNvbGxlY3Rpb24udHlwZSA9IFwiTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEFubm90YXRpb25QYXRoXCIpKSB7XG5cdFx0XHRcdGNvbGxlY3Rpb25WYWx1ZS5Db2xsZWN0aW9uLnR5cGUgPSBcIkFubm90YXRpb25QYXRoXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkVHlwZVwiKSkge1xuXHRcdFx0XHRjb2xsZWN0aW9uVmFsdWUuQ29sbGVjdGlvbi50eXBlID0gXCJSZWNvcmRcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRJZlwiKSkge1xuXHRcdFx0XHRjb2xsZWN0aW9uVmFsdWUuQ29sbGVjdGlvbi50eXBlID0gXCJJZlwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJE9yXCIpKSB7XG5cdFx0XHRcdGNvbGxlY3Rpb25WYWx1ZS5Db2xsZWN0aW9uLnR5cGUgPSBcIk9yXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkQW5kXCIpKSB7XG5cdFx0XHRcdGNvbGxlY3Rpb25WYWx1ZS5Db2xsZWN0aW9uLnR5cGUgPSBcIkFuZFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEVxXCIpKSB7XG5cdFx0XHRcdGNvbGxlY3Rpb25WYWx1ZS5Db2xsZWN0aW9uLnR5cGUgPSBcIkVxXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkTmVcIikpIHtcblx0XHRcdFx0Y29sbGVjdGlvblZhbHVlLkNvbGxlY3Rpb24udHlwZSA9IFwiTmVcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiROb3RcIikpIHtcblx0XHRcdFx0Y29sbGVjdGlvblZhbHVlLkNvbGxlY3Rpb24udHlwZSA9IFwiTm90XCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkR3RcIikpIHtcblx0XHRcdFx0Y29sbGVjdGlvblZhbHVlLkNvbGxlY3Rpb24udHlwZSA9IFwiR3RcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRHZVwiKSkge1xuXHRcdFx0XHRjb2xsZWN0aW9uVmFsdWUuQ29sbGVjdGlvbi50eXBlID0gXCJHZVwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEx0XCIpKSB7XG5cdFx0XHRcdGNvbGxlY3Rpb25WYWx1ZS5Db2xsZWN0aW9uLnR5cGUgPSBcIkx0XCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkTGVcIikpIHtcblx0XHRcdFx0Y29sbGVjdGlvblZhbHVlLkNvbGxlY3Rpb24udHlwZSA9IFwiTGVcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRBcHBseVwiKSkge1xuXHRcdFx0XHRjb2xsZWN0aW9uVmFsdWUuQ29sbGVjdGlvbi50eXBlID0gXCJBcHBseVwiO1xuXHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgYW5ub3RhdGlvbk9iamVjdFswXSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHQvLyAkVHlwZSBpcyBvcHRpb25hbC4uLlxuXHRcdFx0XHRjb2xsZWN0aW9uVmFsdWUuQ29sbGVjdGlvbi50eXBlID0gXCJSZWNvcmRcIjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbGxlY3Rpb25WYWx1ZS5Db2xsZWN0aW9uLnR5cGUgPSBcIlN0cmluZ1wiO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR2YWx1ZSA9IGNvbGxlY3Rpb25WYWx1ZTtcblx0fSBlbHNlIGlmICh0eXBlb2YgYW5ub3RhdGlvbk9iamVjdCA9PT0gXCJvYmplY3RcIikge1xuXHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0LiRQYXRoICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHZhbHVlID0geyB0eXBlOiBcIlBhdGhcIiwgUGF0aDogYW5ub3RhdGlvbk9iamVjdC4kUGF0aCB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kRGVjaW1hbCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YWx1ZSA9IHsgdHlwZTogXCJEZWNpbWFsXCIsIERlY2ltYWw6IHBhcnNlRmxvYXQoYW5ub3RhdGlvbk9iamVjdC4kRGVjaW1hbCkgfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJFByb3BlcnR5UGF0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YWx1ZSA9IHsgdHlwZTogXCJQcm9wZXJ0eVBhdGhcIiwgUHJvcGVydHlQYXRoOiBhbm5vdGF0aW9uT2JqZWN0LiRQcm9wZXJ0eVBhdGggfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dmFsdWUgPSB7IHR5cGU6IFwiTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiLCBOYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBhbm5vdGF0aW9uT2JqZWN0LiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoIH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRJZiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YWx1ZSA9IHsgdHlwZTogXCJJZlwiLCAkSWY6IGFubm90YXRpb25PYmplY3QuJElmIGFzIFtFeHByZXNzaW9uLCBFeHByZXNzaW9uLCBFeHByZXNzaW9uXSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kQW5kICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHZhbHVlID0geyB0eXBlOiBcIkFuZFwiLCAkQW5kOiBhbm5vdGF0aW9uT2JqZWN0LiRBbmQgYXMgW0V4cHJlc3Npb24sIEV4cHJlc3Npb25dIH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRPciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YWx1ZSA9IHsgdHlwZTogXCJPclwiLCAkT3I6IGFubm90YXRpb25PYmplY3QuJE9yIGFzIFtFeHByZXNzaW9uLCBFeHByZXNzaW9uXSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kTm90ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHZhbHVlID0geyB0eXBlOiBcIk5vdFwiLCAkTm90OiBhbm5vdGF0aW9uT2JqZWN0LiROb3QgYXMgRXhwcmVzc2lvbiB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kRXEgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dmFsdWUgPSB7IHR5cGU6IFwiRXFcIiwgJEVxOiBhbm5vdGF0aW9uT2JqZWN0LiRFcSBhcyBbRXhwcmVzc2lvbiwgRXhwcmVzc2lvbl0gfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJE5lICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHZhbHVlID0geyB0eXBlOiBcIk5lXCIsICROZTogYW5ub3RhdGlvbk9iamVjdC4kTmUgYXMgW0V4cHJlc3Npb24sIEV4cHJlc3Npb25dIH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRHdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YWx1ZSA9IHsgdHlwZTogXCJHdFwiLCAkR3Q6IGFubm90YXRpb25PYmplY3QuJEd0IGFzIFtFeHByZXNzaW9uLCBFeHByZXNzaW9uXSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kR2UgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dmFsdWUgPSB7IHR5cGU6IFwiR2VcIiwgJEdlOiBhbm5vdGF0aW9uT2JqZWN0LiRHZSBhcyBbRXhwcmVzc2lvbiwgRXhwcmVzc2lvbl0gfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEx0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHZhbHVlID0geyB0eXBlOiBcIkx0XCIsICRMdDogYW5ub3RhdGlvbk9iamVjdC4kTHQgYXMgW0V4cHJlc3Npb24sIEV4cHJlc3Npb25dIH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRMZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YWx1ZSA9IHsgdHlwZTogXCJMZVwiLCAkTGU6IGFubm90YXRpb25PYmplY3QuJExlIGFzIFtFeHByZXNzaW9uLCBFeHByZXNzaW9uXSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kQXBwbHkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dmFsdWUgPSB7IHR5cGU6IFwiQXBwbHlcIiwgJEFwcGx5OiBhbm5vdGF0aW9uT2JqZWN0LiRBcHBseSwgJEZ1bmN0aW9uOiBhbm5vdGF0aW9uT2JqZWN0LiRGdW5jdGlvbiB9IGFzIEFwcGx5RXhwcmVzc2lvbjtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEFubm90YXRpb25QYXRoICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHZhbHVlID0geyB0eXBlOiBcIkFubm90YXRpb25QYXRoXCIsIEFubm90YXRpb25QYXRoOiBhbm5vdGF0aW9uT2JqZWN0LiRBbm5vdGF0aW9uUGF0aCB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kRW51bU1lbWJlciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YWx1ZSA9IHsgdHlwZTogXCJFbnVtTWVtYmVyXCIsIEVudW1NZW1iZXI6IGFubm90YXRpb25PYmplY3QuJEVudW1NZW1iZXIgfTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFsdWUgPSB7XG5cdFx0XHRcdHR5cGU6IFwiUmVjb3JkXCIsXG5cdFx0XHRcdFJlY29yZDogcGFyc2VBbm5vdGF0aW9uT2JqZWN0KGFubm90YXRpb25PYmplY3QsIGN1cnJlbnRUYXJnZXQsIGFubm90YXRpb25zTGlzdHMsIG9DYXBhYmlsaXRpZXMpIGFzIEFubm90YXRpb25SZWNvcmRcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cdHJldHVybiB7XG5cdFx0bmFtZTogcHJvcGVydHlLZXksXG5cdFx0dmFsdWVcblx0fTtcbn1cblxuZnVuY3Rpb24gcGFyc2VBbm5vdGF0aW9uT2JqZWN0KFxuXHRhbm5vdGF0aW9uT2JqZWN0OiBNZXRhTW9kZWxBbm5vdGF0aW9uLFxuXHRjdXJyZW50T2JqZWN0VGFyZ2V0OiBzdHJpbmcsXG5cdGFubm90YXRpb25zTGlzdHM6IFJlY29yZDxzdHJpbmcsIEFubm90YXRpb25MaXN0Pixcblx0b0NhcGFiaWxpdGllczogRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNcbik6IEV4cHJlc3Npb24gfCBBbm5vdGF0aW9uUmVjb3JkIHtcblx0bGV0IHBhcnNlZEFubm90YXRpb25PYmplY3Q6IEV4cHJlc3Npb24gfCBBbm5vdGF0aW9uUmVjb3JkO1xuXHRpZiAoYW5ub3RhdGlvbk9iamVjdCA9PT0gbnVsbCkge1xuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiTnVsbFwiIH07XG5cdH0gZWxzZSBpZiAodHlwZW9mIGFubm90YXRpb25PYmplY3QgPT09IFwic3RyaW5nXCIpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIlN0cmluZ1wiLCBTdHJpbmc6IGFubm90YXRpb25PYmplY3QgfTtcblx0fSBlbHNlIGlmICh0eXBlb2YgYW5ub3RhdGlvbk9iamVjdCA9PT0gXCJib29sZWFuXCIpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIkJvb2xcIiwgQm9vbDogYW5ub3RhdGlvbk9iamVjdCB9O1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBhbm5vdGF0aW9uT2JqZWN0ID09PSBcIm51bWJlclwiKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJJbnRcIiwgSW50OiBhbm5vdGF0aW9uT2JqZWN0IH07XG5cdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhbm5vdGF0aW9uT2JqZWN0KSkge1xuXHRcdGNvbnN0IHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uID0ge1xuXHRcdFx0Y29sbGVjdGlvbjogYW5ub3RhdGlvbk9iamVjdC5tYXAoKHN1YkFubm90YXRpb25PYmplY3QsIHN1YkFubm90YXRpb25JbmRleCkgPT5cblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uT2JqZWN0KHN1YkFubm90YXRpb25PYmplY3QsIGAke2N1cnJlbnRPYmplY3RUYXJnZXR9LyR7c3ViQW5ub3RhdGlvbkluZGV4fWAsIGFubm90YXRpb25zTGlzdHMsIG9DYXBhYmlsaXRpZXMpXG5cdFx0XHQpIGFzIENvbGxlY3Rpb25cblx0XHR9O1xuXHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJFByb3BlcnR5UGF0aFwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIlByb3BlcnR5UGF0aFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJFBhdGhcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJQYXRoXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRBbm5vdGF0aW9uUGF0aFwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIkFubm90YXRpb25QYXRoXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkVHlwZVwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIlJlY29yZFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJElmXCIpKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uLmNvbGxlY3Rpb24udHlwZSA9IFwiSWZcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRBbmRcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJBbmRcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRPclwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIk9yXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkRXFcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJFcVwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJE5lXCIpKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uLmNvbGxlY3Rpb24udHlwZSA9IFwiTmVcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiROb3RcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJOb3RcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRHdFwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIkd0XCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkR2VcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJHZVwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEx0XCIpKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uLmNvbGxlY3Rpb24udHlwZSA9IFwiTHRcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRMZVwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIkxlXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkQXBwbHlcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJBcHBseVwiO1xuXHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgYW5ub3RhdGlvbk9iamVjdFswXSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIlJlY29yZFwiO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJTdHJpbmdcIjtcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSBpZiAodHlwZW9mIGFubm90YXRpb25PYmplY3QgPT09IFwib2JqZWN0XCIpIHtcblx0XHRpZiAoYW5ub3RhdGlvbk9iamVjdC4kQW5ub3RhdGlvblBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJBbm5vdGF0aW9uUGF0aFwiLCBBbm5vdGF0aW9uUGF0aDogYW5ub3RhdGlvbk9iamVjdC4kQW5ub3RhdGlvblBhdGggfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJFBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJQYXRoXCIsIFBhdGg6IGFubm90YXRpb25PYmplY3QuJFBhdGggfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJERlY2ltYWwgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJEZWNpbWFsXCIsIERlY2ltYWw6IHBhcnNlRmxvYXQoYW5ub3RhdGlvbk9iamVjdC4kRGVjaW1hbCkgfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJFByb3BlcnR5UGF0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIlByb3BlcnR5UGF0aFwiLCBQcm9wZXJ0eVBhdGg6IGFubm90YXRpb25PYmplY3QuJFByb3BlcnR5UGF0aCB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kSWYgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJJZlwiLCAkSWY6IGFubm90YXRpb25PYmplY3QuJElmIGFzIFtFeHByZXNzaW9uLCBFeHByZXNzaW9uLCBFeHByZXNzaW9uXSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kQW5kICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiQW5kXCIsICRBbmQ6IGFubm90YXRpb25PYmplY3QuJEFuZCBhcyBbRXhwcmVzc2lvbiwgRXhwcmVzc2lvbl0gfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJE9yICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiT3JcIiwgJE9yOiBhbm5vdGF0aW9uT2JqZWN0LiRPciBhcyBbRXhwcmVzc2lvbiwgRXhwcmVzc2lvbl0gfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJE5vdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIk5vdFwiLCAkTm90OiBhbm5vdGF0aW9uT2JqZWN0LiROb3QgYXMgRXhwcmVzc2lvbiB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kRXEgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJFcVwiLCAkRXE6IGFubm90YXRpb25PYmplY3QuJEVxIGFzIFtFeHByZXNzaW9uLCBFeHByZXNzaW9uXSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kTmUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJOZVwiLCAkTmU6IGFubm90YXRpb25PYmplY3QuJE5lIGFzIFtFeHByZXNzaW9uLCBFeHByZXNzaW9uXSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kR3QgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJHdFwiLCAkR3Q6IGFubm90YXRpb25PYmplY3QuJEd0IGFzIFtFeHByZXNzaW9uLCBFeHByZXNzaW9uXSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kR2UgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJHZVwiLCAkR2U6IGFubm90YXRpb25PYmplY3QuJEdlIGFzIFtFeHByZXNzaW9uLCBFeHByZXNzaW9uXSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kTHQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJMdFwiLCAkTHQ6IGFubm90YXRpb25PYmplY3QuJEx0IGFzIFtFeHByZXNzaW9uLCBFeHByZXNzaW9uXSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kTGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJMZVwiLCAkTGU6IGFubm90YXRpb25PYmplY3QuJExlIGFzIFtFeHByZXNzaW9uLCBFeHByZXNzaW9uXSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kQXBwbHkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHtcblx0XHRcdFx0dHlwZTogXCJBcHBseVwiLFxuXHRcdFx0XHQkQXBwbHk6IGFubm90YXRpb25PYmplY3QuJEFwcGx5LFxuXHRcdFx0XHQkRnVuY3Rpb246IGFubm90YXRpb25PYmplY3QuJEZ1bmN0aW9uXG5cdFx0XHR9IGFzIEFwcGx5RXhwcmVzc2lvbjtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHtcblx0XHRcdFx0dHlwZTogXCJOYXZpZ2F0aW9uUHJvcGVydHlQYXRoXCIsXG5cdFx0XHRcdE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IGFubm90YXRpb25PYmplY3QuJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcblx0XHRcdH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRFbnVtTWVtYmVyICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7XG5cdFx0XHRcdHR5cGU6IFwiRW51bU1lbWJlclwiLFxuXHRcdFx0XHRFbnVtTWVtYmVyOiBhbm5vdGF0aW9uT2JqZWN0LiRFbnVtTWVtYmVyXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBwYXJzZWRBbm5vdGF0aW9uT2JqZWN0UmVjb3JkOiBBbm5vdGF0aW9uUmVjb3JkID0ge1xuXHRcdFx0XHR0eXBlOiBcIlJlY29yZFwiLFxuXHRcdFx0XHRwcm9wZXJ0eVZhbHVlczogW11cblx0XHRcdH07XG5cdFx0XHRpZiAoYW5ub3RhdGlvbk9iamVjdC4kVHlwZSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0UmVjb3JkLnR5cGUgPSBhbm5vdGF0aW9uT2JqZWN0LiRUeXBlO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgcHJvcGVydHlWYWx1ZXM6IFByb3BlcnR5VmFsdWVbXSA9IFtdO1xuXHRcdFx0T2JqZWN0LmtleXMoYW5ub3RhdGlvbk9iamVjdCkuZm9yRWFjaCgocHJvcGVydHlLZXkpID0+IHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHByb3BlcnR5S2V5ICE9PSBcIiRUeXBlXCIgJiZcblx0XHRcdFx0XHRwcm9wZXJ0eUtleSAhPT0gXCIkSWZcIiAmJlxuXHRcdFx0XHRcdHByb3BlcnR5S2V5ICE9PSBcIiRBcHBseVwiICYmXG5cdFx0XHRcdFx0cHJvcGVydHlLZXkgIT09IFwiJEFuZFwiICYmXG5cdFx0XHRcdFx0cHJvcGVydHlLZXkgIT09IFwiJE9yXCIgJiZcblx0XHRcdFx0XHRwcm9wZXJ0eUtleSAhPT0gXCIkTmVcIiAmJlxuXHRcdFx0XHRcdHByb3BlcnR5S2V5ICE9PSBcIiRHdFwiICYmXG5cdFx0XHRcdFx0cHJvcGVydHlLZXkgIT09IFwiJEdlXCIgJiZcblx0XHRcdFx0XHRwcm9wZXJ0eUtleSAhPT0gXCIkTHRcIiAmJlxuXHRcdFx0XHRcdHByb3BlcnR5S2V5ICE9PSBcIiRMZVwiICYmXG5cdFx0XHRcdFx0cHJvcGVydHlLZXkgIT09IFwiJE5vdFwiICYmXG5cdFx0XHRcdFx0cHJvcGVydHlLZXkgIT09IFwiJEVxXCIgJiZcblx0XHRcdFx0XHQhcHJvcGVydHlLZXkuc3RhcnRzV2l0aChcIkBcIilcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cHJvcGVydHlWYWx1ZXMucHVzaChcblx0XHRcdFx0XHRcdHBhcnNlUHJvcGVydHlWYWx1ZShhbm5vdGF0aW9uT2JqZWN0W3Byb3BlcnR5S2V5XSwgcHJvcGVydHlLZXksIGN1cnJlbnRPYmplY3RUYXJnZXQsIGFubm90YXRpb25zTGlzdHMsIG9DYXBhYmlsaXRpZXMpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSBlbHNlIGlmIChwcm9wZXJ0eUtleS5zdGFydHNXaXRoKFwiQFwiKSkge1xuXHRcdFx0XHRcdC8vIEFubm90YXRpb24gb2YgYW5ub3RhdGlvblxuXHRcdFx0XHRcdGNyZWF0ZUFubm90YXRpb25MaXN0cyhcblx0XHRcdFx0XHRcdHsgW3Byb3BlcnR5S2V5XTogYW5ub3RhdGlvbk9iamVjdFtwcm9wZXJ0eUtleV0gfSxcblx0XHRcdFx0XHRcdGN1cnJlbnRPYmplY3RUYXJnZXQsXG5cdFx0XHRcdFx0XHRhbm5vdGF0aW9uc0xpc3RzLFxuXHRcdFx0XHRcdFx0b0NhcGFiaWxpdGllc1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdFJlY29yZC5wcm9wZXJ0eVZhbHVlcyA9IHByb3BlcnR5VmFsdWVzO1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHBhcnNlZEFubm90YXRpb25PYmplY3RSZWNvcmQ7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ITtcbn1cbmZ1bmN0aW9uIGdldE9yQ3JlYXRlQW5ub3RhdGlvbkxpc3QodGFyZ2V0OiBzdHJpbmcsIGFubm90YXRpb25zTGlzdHM6IFJlY29yZDxzdHJpbmcsIEFubm90YXRpb25MaXN0Pik6IEFubm90YXRpb25MaXN0IHtcblx0aWYgKCFhbm5vdGF0aW9uc0xpc3RzLmhhc093blByb3BlcnR5KHRhcmdldCkpIHtcblx0XHRhbm5vdGF0aW9uc0xpc3RzW3RhcmdldF0gPSB7XG5cdFx0XHR0YXJnZXQ6IHRhcmdldCxcblx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdH07XG5cdH1cblx0cmV0dXJuIGFubm90YXRpb25zTGlzdHNbdGFyZ2V0XTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUmVmZXJlbmNlRmFjZXRJZChyZWZlcmVuY2VGYWNldDogTWV0YU1vZGVsVHlwZTxSZWZlcmVuY2VGYWNldD4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRjb25zdCBpZCA9IHJlZmVyZW5jZUZhY2V0LklEID8/IHJlZmVyZW5jZUZhY2V0LlRhcmdldD8uJEFubm90YXRpb25QYXRoO1xuXHRyZXR1cm4gaWQgPyBwcmVwYXJlSWQoaWQpIDogaWQ7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNoYXJ0QW5ub3RhdGlvbnMoYW5ub3RhdGlvbk9iamVjdDogTWV0YU1vZGVsVHlwZTxIZWFkZXJGYWNldHM+IHwgTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPltdKTogdW5rbm93bltdIHtcblx0cmV0dXJuIGFubm90YXRpb25PYmplY3QuZmlsdGVyKChvUmVjb3JkOiBNZXRhTW9kZWxUeXBlPEZhY2V0VHlwZXM+IHwgTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPik6IGJvb2xlYW4gPT4ge1xuXHRcdGNvbnN0IHJlY29yZEFzUmVmRmFjZXQgPSBvUmVjb3JkIGFzIE1ldGFNb2RlbFR5cGU8UmVmZXJlbmNlRmFjZXQ+O1xuXHRcdGlmIChyZWNvcmRBc1JlZkZhY2V0LlRhcmdldCAmJiByZWNvcmRBc1JlZkZhY2V0LlRhcmdldC4kQW5ub3RhdGlvblBhdGgpIHtcblx0XHRcdHJldHVybiAhcmVjb3JkQXNSZWZGYWNldC5UYXJnZXQuJEFubm90YXRpb25QYXRoLmluY2x1ZGVzKGBAJHtVSUFubm90YXRpb25UZXJtcy5DaGFydH1gKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlSUJOQW5ub3RhdGlvbnMoYW5ub3RhdGlvbk9iamVjdDogTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPltdKTogTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPltdIHtcblx0cmV0dXJuIGFubm90YXRpb25PYmplY3QuZmlsdGVyKChvUmVjb3JkOiBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+KTogYm9vbGVhbiA9PiB7XG5cdFx0cmV0dXJuIG9SZWNvcmQuJFR5cGUgIT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVByZXNlbnRhdGlvblZhcmlhbnQoXG5cdGFubm90YXRpb25PYmplY3Q6IEV4cGFuZFBhdGhUeXBlPEFubm90YXRpb25QYXRoPENoYXJ0IHwgRGF0YVBvaW50IHwgTGluZUl0ZW0+PltdXG4pOiBFeHBhbmRQYXRoVHlwZTxBbm5vdGF0aW9uUGF0aDxDaGFydCB8IERhdGFQb2ludCB8IExpbmVJdGVtPj5bXSB7XG5cdHJldHVybiBhbm5vdGF0aW9uT2JqZWN0LmZpbHRlcigob1JlY29yZCk6IGJvb2xlYW4gPT4ge1xuXHRcdHJldHVybiBvUmVjb3JkLiRBbm5vdGF0aW9uUGF0aCAhPT0gYEAke1VJQW5ub3RhdGlvblRlcm1zLkNoYXJ0fWA7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVBbm5vdGF0aW9uTGlzdHMoXG5cdGFubm90YXRpb25PYmplY3RzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0YW5ub3RhdGlvblRhcmdldDogc3RyaW5nLFxuXHRhbm5vdGF0aW9uTGlzdHM6IFJlY29yZDxzdHJpbmcsIEFubm90YXRpb25MaXN0Pixcblx0b0NhcGFiaWxpdGllczogRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNcbik6IHZvaWQge1xuXHRpZiAoT2JqZWN0LmtleXMoYW5ub3RhdGlvbk9iamVjdHMpLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybjtcblx0fVxuXHRjb25zdCBvdXRBbm5vdGF0aW9uT2JqZWN0ID0gZ2V0T3JDcmVhdGVBbm5vdGF0aW9uTGlzdChhbm5vdGF0aW9uVGFyZ2V0LCBhbm5vdGF0aW9uTGlzdHMpO1xuXHRpZiAoIW9DYXBhYmlsaXRpZXMuTWljcm9DaGFydCkge1xuXHRcdGRlbGV0ZSBhbm5vdGF0aW9uT2JqZWN0c1tgQCR7VUlBbm5vdGF0aW9uVGVybXMuQ2hhcnR9YF07XG5cdH0gZWxzZSB7XG5cdFx0b0NhcGFiaWxpdGllcy5sb2FkTGlicmFyeT8uKFwic2FwLnN1aXRlLnVpLm1pY3JvY2hhcnRcIik7XG5cdH1cblxuXHRmb3IgKGNvbnN0IGFubm90YXRpb25LZXkgaW4gYW5ub3RhdGlvbk9iamVjdHMpIHtcblx0XHRsZXQgYW5ub3RhdGlvbk9iamVjdCA9IGFubm90YXRpb25PYmplY3RzW2Fubm90YXRpb25LZXldO1xuXHRcdHN3aXRjaCAoYW5ub3RhdGlvbktleSkge1xuXHRcdFx0Y2FzZSBgQCR7VUlBbm5vdGF0aW9uVGVybXMuSGVhZGVyRmFjZXRzfWA6XG5cdFx0XHRcdGlmICghb0NhcGFiaWxpdGllcy5NaWNyb0NoYXJ0KSB7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbk9iamVjdCA9IHJlbW92ZUNoYXJ0QW5ub3RhdGlvbnMoYW5ub3RhdGlvbk9iamVjdCBhcyBNZXRhTW9kZWxUeXBlPEhlYWRlckZhY2V0cz4pO1xuXHRcdFx0XHRcdGFubm90YXRpb25PYmplY3RzW2Fubm90YXRpb25LZXldID0gYW5ub3RhdGlvbk9iamVjdDtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgYEAke1VJQW5ub3RhdGlvblRlcm1zLklkZW50aWZpY2F0aW9ufWA6XG5cdFx0XHRcdGlmICghb0NhcGFiaWxpdGllcy5JbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdFx0XHRhbm5vdGF0aW9uT2JqZWN0ID0gcmVtb3ZlSUJOQW5ub3RhdGlvbnMoYW5ub3RhdGlvbk9iamVjdCBhcyBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+W10pO1xuXHRcdFx0XHRcdGFubm90YXRpb25PYmplY3RzW2Fubm90YXRpb25LZXldID0gYW5ub3RhdGlvbk9iamVjdDtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgYEAke1VJQW5ub3RhdGlvblRlcm1zLkxpbmVJdGVtfWA6XG5cdFx0XHRcdGlmICghb0NhcGFiaWxpdGllcy5JbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdFx0XHRhbm5vdGF0aW9uT2JqZWN0ID0gcmVtb3ZlSUJOQW5ub3RhdGlvbnMoYW5ub3RhdGlvbk9iamVjdCBhcyBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+W10pO1xuXHRcdFx0XHRcdGFubm90YXRpb25PYmplY3RzW2Fubm90YXRpb25LZXldID0gYW5ub3RhdGlvbk9iamVjdDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIW9DYXBhYmlsaXRpZXMuTWljcm9DaGFydCkge1xuXHRcdFx0XHRcdGFubm90YXRpb25PYmplY3QgPSByZW1vdmVDaGFydEFubm90YXRpb25zKGFubm90YXRpb25PYmplY3QgYXMgTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPltdKTtcblx0XHRcdFx0XHRhbm5vdGF0aW9uT2JqZWN0c1thbm5vdGF0aW9uS2V5XSA9IGFubm90YXRpb25PYmplY3Q7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIGBAJHtVSUFubm90YXRpb25UZXJtcy5GaWVsZEdyb3VwfWA6XG5cdFx0XHRcdGNvbnN0IGZpZWxkR3JvdXBBbm5vdGF0aW9uID0gYW5ub3RhdGlvbk9iamVjdCBhcyBNZXRhTW9kZWxUeXBlPEZpZWxkR3JvdXA+O1xuXHRcdFx0XHRpZiAoIW9DYXBhYmlsaXRpZXMuSW50ZW50QmFzZWROYXZpZ2F0aW9uICYmIGZpZWxkR3JvdXBBbm5vdGF0aW9uLkRhdGEpIHtcblx0XHRcdFx0XHRmaWVsZEdyb3VwQW5ub3RhdGlvbi5EYXRhID0gcmVtb3ZlSUJOQW5ub3RhdGlvbnMoZmllbGRHcm91cEFubm90YXRpb24uRGF0YSk7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbk9iamVjdHNbYW5ub3RhdGlvbktleV0gPSBhbm5vdGF0aW9uT2JqZWN0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghb0NhcGFiaWxpdGllcy5NaWNyb0NoYXJ0ICYmIGZpZWxkR3JvdXBBbm5vdGF0aW9uLkRhdGEpIHtcblx0XHRcdFx0XHRmaWVsZEdyb3VwQW5ub3RhdGlvbi5EYXRhID0gcmVtb3ZlQ2hhcnRBbm5vdGF0aW9ucyhcblx0XHRcdFx0XHRcdGZpZWxkR3JvdXBBbm5vdGF0aW9uLkRhdGFcblx0XHRcdFx0XHQpIGFzIE1ldGFNb2RlbFR5cGU8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcz5bXTtcblx0XHRcdFx0XHRhbm5vdGF0aW9uT2JqZWN0c1thbm5vdGF0aW9uS2V5XSA9IGFubm90YXRpb25PYmplY3Q7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIGBAJHtVSUFubm90YXRpb25UZXJtcy5QcmVzZW50YXRpb25WYXJpYW50fWA6XG5cdFx0XHRcdGNvbnN0IHByZXNlbnRhdGlvblZhcmlhbnQgPSBhbm5vdGF0aW9uT2JqZWN0IGFzIE1ldGFNb2RlbFR5cGU8UHJlc2VudGF0aW9uVmFyaWFudD47XG5cdFx0XHRcdGlmICghb0NhcGFiaWxpdGllcy5DaGFydCAmJiBwcmVzZW50YXRpb25WYXJpYW50LlZpc3VhbGl6YXRpb25zKSB7XG5cdFx0XHRcdFx0cHJlc2VudGF0aW9uVmFyaWFudC5WaXN1YWxpemF0aW9ucyA9IGhhbmRsZVByZXNlbnRhdGlvblZhcmlhbnQocHJlc2VudGF0aW9uVmFyaWFudC5WaXN1YWxpemF0aW9ucyk7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbk9iamVjdHNbYW5ub3RhdGlvbktleV0gPSBhbm5vdGF0aW9uT2JqZWN0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBgQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3RgOlxuXHRcdFx0XHQvLyBUaGlzIHNjZW5hcmlvIGlzIG5lZWRlZCBmb3IgZW5hYmxpbmcgc2VtYW50aWMgZmlsdGVyaW5nIG9uIERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhLWZpbHRlcnMuIEFzIG9mIG5vdyB0aGUgU2luZ2xlUmFuZ2UgYW5ub3RhdGlvbiBpcyByZWFkIGJ5IHRoZVxuXHRcdFx0XHQvLyBGaWVsZEhlbHBlciwgd2hpY2ggc2hvdWxkIG5vdCBpbmNsdWRlIGFueSBwcm9wZXJ0eXNwZWNpZmljIGxvZ2ljLiBXZSB3aWxsIHJlbW92ZSB0aGlzIG9uY2UgdGhlIEZpZWxkSGVscGVyIHJlY2VpdmVzIHRoZSBTaW5nbGVSYW5nZSBkYXRhIGZyb21cblx0XHRcdFx0Ly8gdGhlIGNvbnZlcnRlciBvciBoYXZpbmcgaXQgc2V0IGlzIG5vIGxvbmdlciBhIHByZXJlcXVpc2l0ZSBmb3IgdGhlIHNlbWFudGljIGZpbHRlcmluZy5cblx0XHRcdFx0Y29uc3QgZmlsdGVyUmVzdHJpY3Rpb25zID0gYW5ub3RhdGlvbk9iamVjdHNbYEBPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkZpbHRlclJlc3RyaWN0aW9uc2BdIGFzXG5cdFx0XHRcdFx0fCBNZXRhTW9kZWxUeXBlPEZpbHRlclJlc3RyaWN0aW9ucz5cblx0XHRcdFx0XHR8IHVuZGVmaW5lZDtcblx0XHRcdFx0aWYgKGZpbHRlclJlc3RyaWN0aW9ucz8uRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucz8ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0IWZpbHRlclJlc3RyaWN0aW9ucy5GaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zLnNvbWUoKEZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbikgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9uPy5Qcm9wZXJ0eT8uJFByb3BlcnR5UGF0aC5pbmNsdWRlcyhcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhXCIpO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdGZpbHRlclJlc3RyaWN0aW9ucy5GaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zLnB1c2goXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHQkVHlwZTogXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvblR5cGVcIixcblx0XHRcdFx0XHRcdFx0XHRBbGxvd2VkRXhwcmVzc2lvbnM6IFwiU2luZ2xlUmFuZ2VcIixcblx0XHRcdFx0XHRcdFx0XHRQcm9wZXJ0eToge1xuXHRcdFx0XHRcdFx0XHRcdFx0JFByb3BlcnR5UGF0aDogXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9DcmVhdGlvbkRhdGVUaW1lXCJcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogdW5kZWZpbmVkXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHQkVHlwZTogXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvblR5cGVcIixcblx0XHRcdFx0XHRcdFx0XHRBbGxvd2VkRXhwcmVzc2lvbnM6IFwiU2luZ2xlUmFuZ2VcIixcblx0XHRcdFx0XHRcdFx0XHRQcm9wZXJ0eToge1xuXHRcdFx0XHRcdFx0XHRcdFx0JFByb3BlcnR5UGF0aDogXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9MYXN0Q2hhbmdlRGF0ZVRpbWVcIlxuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiB1bmRlZmluZWRcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cblx0XHRsZXQgY3VycmVudE91dEFubm90YXRpb25PYmplY3QgPSBvdXRBbm5vdGF0aW9uT2JqZWN0O1xuXG5cdFx0Ly8gQ2hlY2sgZm9yIGFubm90YXRpb24gb2YgYW5ub3RhdGlvblxuXHRcdGxldCBmaW5hbEtleSA9IGFubm90YXRpb25LZXk7XG5cdFx0Y29uc3QgYW5ub3RhdGlvbk9mQW5ub3RhdGlvblNwbGl0ID0gYW5ub3RhdGlvbktleS5zcGxpdChcIkBcIik7XG5cdFx0aWYgKGFubm90YXRpb25PZkFubm90YXRpb25TcGxpdC5sZW5ndGggPiAyKSB7XG5cdFx0XHRjdXJyZW50T3V0QW5ub3RhdGlvbk9iamVjdCA9IGdldE9yQ3JlYXRlQW5ub3RhdGlvbkxpc3QoXG5cdFx0XHRcdGAke2Fubm90YXRpb25UYXJnZXR9QCR7YW5ub3RhdGlvbk9mQW5ub3RhdGlvblNwbGl0WzFdfWAsXG5cdFx0XHRcdGFubm90YXRpb25MaXN0c1xuXHRcdFx0KTtcblx0XHRcdGZpbmFsS2V5ID0gYW5ub3RhdGlvbk9mQW5ub3RhdGlvblNwbGl0WzJdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRmaW5hbEtleSA9IGFubm90YXRpb25PZkFubm90YXRpb25TcGxpdFsxXTtcblx0XHR9XG5cblx0XHRjb25zdCBhbm5vdGF0aW9uUXVhbGlmaWVyU3BsaXQgPSBmaW5hbEtleS5zcGxpdChcIiNcIik7XG5cdFx0Y29uc3QgcXVhbGlmaWVyID0gYW5ub3RhdGlvblF1YWxpZmllclNwbGl0WzFdO1xuXHRcdGZpbmFsS2V5ID0gYW5ub3RhdGlvblF1YWxpZmllclNwbGl0WzBdO1xuXG5cdFx0Y29uc3QgcGFyc2VkQW5ub3RhdGlvbk9iamVjdDogUmF3QW5ub3RhdGlvbiA9IHtcblx0XHRcdHRlcm06IGZpbmFsS2V5LFxuXHRcdFx0cXVhbGlmaWVyOiBxdWFsaWZpZXJcblx0XHR9O1xuXHRcdGxldCBjdXJyZW50QW5ub3RhdGlvblRhcmdldCA9IGAke2Fubm90YXRpb25UYXJnZXR9QCR7cGFyc2VkQW5ub3RhdGlvbk9iamVjdC50ZXJtfWA7XG5cdFx0aWYgKHF1YWxpZmllcikge1xuXHRcdFx0Y3VycmVudEFubm90YXRpb25UYXJnZXQgKz0gYCMke3F1YWxpZmllcn1gO1xuXHRcdH1cblx0XHRjb25zdCBhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZSA9IGFubm90YXRpb25PYmplY3QgYXMgTWV0YU1vZGVsQW5ub3RhdGlvbjtcblx0XHRpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UgPT09IG51bGwpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiTnVsbFwiIH07XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiU3RyaW5nXCIsIFN0cmluZzogYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UgfTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZSA9PT0gXCJib29sZWFuXCIpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiQm9vbFwiLCBCb29sOiBhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZSB9O1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mIGFubm90YXRpb25PYmplY3RUb1BhcnNlID09PSBcIm51bWJlclwiKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0geyB0eXBlOiBcIkludFwiLCBJbnQ6IGFubm90YXRpb25PYmplY3RUb1BhcnNlIH07XG5cdFx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFubm90YXRpb25PYmplY3RUb1BhcnNlKSkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uID0gYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UubWFwKChzdWJBbm5vdGF0aW9uT2JqZWN0LCBzdWJBbm5vdGF0aW9uSW5kZXgpID0+XG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbk9iamVjdChcblx0XHRcdFx0XHRzdWJBbm5vdGF0aW9uT2JqZWN0LFxuXHRcdFx0XHRcdGAke2N1cnJlbnRBbm5vdGF0aW9uVGFyZ2V0fS8ke3N1YkFubm90YXRpb25JbmRleH1gLFxuXHRcdFx0XHRcdGFubm90YXRpb25MaXN0cyxcblx0XHRcdFx0XHRvQ2FwYWJpbGl0aWVzXG5cdFx0XHRcdClcblx0XHRcdCkgYXMgQ29sbGVjdGlvbjtcblx0XHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZVswXS5oYXNPd25Qcm9wZXJ0eShcIiRQcm9wZXJ0eVBhdGhcIikpIHtcblx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24udHlwZSA9IFwiUHJvcGVydHlQYXRoXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2VbMF0uaGFzT3duUHJvcGVydHkoXCIkUGF0aFwiKSkge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJQYXRoXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2VbMF0uaGFzT3duUHJvcGVydHkoXCIkTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiKSkge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJOYXZpZ2F0aW9uUHJvcGVydHlQYXRoXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2VbMF0uaGFzT3duUHJvcGVydHkoXCIkQW5ub3RhdGlvblBhdGhcIikpIHtcblx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24udHlwZSA9IFwiQW5ub3RhdGlvblBhdGhcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZVswXS5oYXNPd25Qcm9wZXJ0eShcIiRUeXBlXCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIlJlY29yZFwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RUb1BhcnNlWzBdLmhhc093blByb3BlcnR5KFwiJElmXCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIklmXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2VbMF0uaGFzT3duUHJvcGVydHkoXCIkT3JcIikpIHtcblx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24udHlwZSA9IFwiT3JcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZVswXS5oYXNPd25Qcm9wZXJ0eShcIiRFcVwiKSkge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJFcVwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RUb1BhcnNlWzBdLmhhc093blByb3BlcnR5KFwiJE5lXCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIk5lXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2VbMF0uaGFzT3duUHJvcGVydHkoXCIkTm90XCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIk5vdFwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RUb1BhcnNlWzBdLmhhc093blByb3BlcnR5KFwiJEd0XCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIkd0XCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2VbMF0uaGFzT3duUHJvcGVydHkoXCIkR2VcIikpIHtcblx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24udHlwZSA9IFwiR2VcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZVswXS5oYXNPd25Qcm9wZXJ0eShcIiRMdFwiKSkge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJMdFwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RUb1BhcnNlWzBdLmhhc093blByb3BlcnR5KFwiJExlXCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIkxlXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2VbMF0uaGFzT3duUHJvcGVydHkoXCIkQW5kXCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIkFuZFwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RUb1BhcnNlWzBdLmhhc093blByb3BlcnR5KFwiJEFwcGx5XCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIkFwcGx5XCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIGFubm90YXRpb25PYmplY3RUb1BhcnNlWzBdID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIlJlY29yZFwiO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJTdHJpbmdcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodHlwZW9mIGFubm90YXRpb25PYmplY3RUb1BhcnNlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UuJElmICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJJZlwiLCAkSWY6IGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRJZiBhcyBbRXhwcmVzc2lvbiwgRXhwcmVzc2lvbiwgRXhwcmVzc2lvbl0gfTtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UuJEFuZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiQW5kXCIsICRBbmQ6IGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRBbmQgYXMgW0V4cHJlc3Npb24sIEV4cHJlc3Npb25dIH07XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRPciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiT3JcIiwgJE9yOiBhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZS4kT3IgYXMgW0V4cHJlc3Npb24sIEV4cHJlc3Npb25dIH07XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RUb1BhcnNlLiROb3QgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0geyB0eXBlOiBcIk5vdFwiLCAkTm90OiBhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZS4kTm90IGFzIEV4cHJlc3Npb24gfTtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UuJEVxICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJFcVwiLCAkRXE6IGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRFcSBhcyBbRXhwcmVzc2lvbiwgRXhwcmVzc2lvbl0gfTtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UuJE5lICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJOZVwiLCAkTmU6IGFubm90YXRpb25PYmplY3RUb1BhcnNlLiROZSBhcyBbRXhwcmVzc2lvbiwgRXhwcmVzc2lvbl0gfTtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UuJEd0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJHdFwiLCAkR3Q6IGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRHdCBhcyBbRXhwcmVzc2lvbiwgRXhwcmVzc2lvbl0gfTtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UuJEdlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJHZVwiLCAkR2U6IGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRHZSBhcyBbRXhwcmVzc2lvbiwgRXhwcmVzc2lvbl0gfTtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UuJEx0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJMdFwiLCAkTHQ6IGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRMdCBhcyBbRXhwcmVzc2lvbiwgRXhwcmVzc2lvbl0gfTtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UuJExlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJMZVwiLCAkTGU6IGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRMZSBhcyBbRXhwcmVzc2lvbiwgRXhwcmVzc2lvbl0gfTtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UuJEFwcGx5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHtcblx0XHRcdFx0XHR0eXBlOiBcIkFwcGx5XCIsXG5cdFx0XHRcdFx0JEFwcGx5OiBhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZS4kQXBwbHksXG5cdFx0XHRcdFx0JEZ1bmN0aW9uOiBhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZS4kRnVuY3Rpb25cblx0XHRcdFx0fSBhcyBBcHBseUV4cHJlc3Npb247XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRQYXRoICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJQYXRoXCIsIFBhdGg6IGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRQYXRoIH07XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRBbm5vdGF0aW9uUGF0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7XG5cdFx0XHRcdFx0dHlwZTogXCJBbm5vdGF0aW9uUGF0aFwiLFxuXHRcdFx0XHRcdEFubm90YXRpb25QYXRoOiBhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZS4kQW5ub3RhdGlvblBhdGhcblx0XHRcdFx0fTtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UuJERlY2ltYWwgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0geyB0eXBlOiBcIkRlY2ltYWxcIiwgRGVjaW1hbDogcGFyc2VGbG9hdChhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZS4kRGVjaW1hbCkgfTtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UuJEVudW1NZW1iZXIgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0ge1xuXHRcdFx0XHRcdHR5cGU6IFwiRW51bU1lbWJlclwiLFxuXHRcdFx0XHRcdEVudW1NZW1iZXI6IGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRFbnVtTWVtYmVyXG5cdFx0XHRcdH07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCByZWNvcmQ6IEFubm90YXRpb25SZWNvcmQgPSB7XG5cdFx0XHRcdFx0cHJvcGVydHlWYWx1ZXM6IFtdXG5cdFx0XHRcdH07XG5cdFx0XHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZS4kVHlwZSkge1xuXHRcdFx0XHRcdGNvbnN0IHR5cGVWYWx1ZSA9IGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRUeXBlO1xuXHRcdFx0XHRcdHJlY29yZC50eXBlID0gYCR7dHlwZVZhbHVlfWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgcHJvcGVydHlWYWx1ZXM6IHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogRXhwcmVzc2lvbiB9W10gPSBbXTtcblx0XHRcdFx0Zm9yIChjb25zdCBwcm9wZXJ0eUtleSBpbiBhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZSkge1xuXHRcdFx0XHRcdGlmIChwcm9wZXJ0eUtleSAhPT0gXCIkVHlwZVwiICYmICFwcm9wZXJ0eUtleS5zdGFydHNXaXRoKFwiQFwiKSkge1xuXHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZXMucHVzaChcblx0XHRcdFx0XHRcdFx0cGFyc2VQcm9wZXJ0eVZhbHVlKFxuXHRcdFx0XHRcdFx0XHRcdGFubm90YXRpb25PYmplY3RUb1BhcnNlW3Byb3BlcnR5S2V5XSxcblx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0eUtleSxcblx0XHRcdFx0XHRcdFx0XHRjdXJyZW50QW5ub3RhdGlvblRhcmdldCxcblx0XHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uTGlzdHMsXG5cdFx0XHRcdFx0XHRcdFx0b0NhcGFiaWxpdGllc1xuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAocHJvcGVydHlLZXkuc3RhcnRzV2l0aChcIkBcIikpIHtcblx0XHRcdFx0XHRcdC8vIEFubm90YXRpb24gb2YgcmVjb3JkXG5cdFx0XHRcdFx0XHRjcmVhdGVBbm5vdGF0aW9uTGlzdHMoXG5cdFx0XHRcdFx0XHRcdHsgW3Byb3BlcnR5S2V5XTogYW5ub3RhdGlvbk9iamVjdFRvUGFyc2VbcHJvcGVydHlLZXldIH0sXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRBbm5vdGF0aW9uVGFyZ2V0LFxuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uTGlzdHMsXG5cdFx0XHRcdFx0XHRcdG9DYXBhYmlsaXRpZXNcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJlY29yZC5wcm9wZXJ0eVZhbHVlcyA9IHByb3BlcnR5VmFsdWVzO1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnJlY29yZCA9IHJlY29yZDtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y3VycmVudE91dEFubm90YXRpb25PYmplY3QuYW5ub3RhdGlvbnMucHVzaChwYXJzZWRBbm5vdGF0aW9uT2JqZWN0KTtcblx0fVxufVxuXG5mdW5jdGlvbiBwcmVwYXJlUHJvcGVydHkoXG5cdHByb3BlcnR5RGVmaW5pdGlvbjogTWV0YU1vZGVsUHJvcGVydHksXG5cdGVudGl0eVR5cGVPYmplY3Q6IFJhd0VudGl0eVR5cGUgfCBSYXdDb21wbGV4VHlwZSxcblx0cHJvcGVydHlOYW1lOiBzdHJpbmdcbik6IFJhd1Byb3BlcnR5IHtcblx0cmV0dXJuIHtcblx0XHRfdHlwZTogXCJQcm9wZXJ0eVwiLFxuXHRcdG5hbWU6IHByb3BlcnR5TmFtZSxcblx0XHRmdWxseVF1YWxpZmllZE5hbWU6IGAke2VudGl0eVR5cGVPYmplY3QuZnVsbHlRdWFsaWZpZWROYW1lfS8ke3Byb3BlcnR5TmFtZX1gLFxuXHRcdHR5cGU6IHByb3BlcnR5RGVmaW5pdGlvbi4kVHlwZSxcblx0XHRtYXhMZW5ndGg6IHByb3BlcnR5RGVmaW5pdGlvbi4kTWF4TGVuZ3RoLFxuXHRcdHByZWNpc2lvbjogcHJvcGVydHlEZWZpbml0aW9uLiRQcmVjaXNpb24sXG5cdFx0c2NhbGU6IHByb3BlcnR5RGVmaW5pdGlvbi4kU2NhbGUsXG5cdFx0bnVsbGFibGU6IHByb3BlcnR5RGVmaW5pdGlvbi4kTnVsbGFibGUgPz8gdHJ1ZVxuXHR9O1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlTmF2aWdhdGlvblByb3BlcnR5KFxuXHRuYXZQcm9wZXJ0eURlZmluaXRpb246IE1ldGFNb2RlbE5hdmlnYXRpb25Qcm9wZXJ0eSxcblx0ZW50aXR5VHlwZU9iamVjdDogUmF3RW50aXR5VHlwZSB8IFJhd0NvbXBsZXhUeXBlLFxuXHRuYXZQcm9wZXJ0eU5hbWU6IHN0cmluZ1xuKTogUmF3VjROYXZpZ2F0aW9uUHJvcGVydHkge1xuXHRsZXQgcmVmZXJlbnRpYWxDb25zdHJhaW50OiBSZWZlcmVudGlhbENvbnN0cmFpbnRbXSA9IFtdO1xuXHRpZiAobmF2UHJvcGVydHlEZWZpbml0aW9uLiRSZWZlcmVudGlhbENvbnN0cmFpbnQpIHtcblx0XHRyZWZlcmVudGlhbENvbnN0cmFpbnQgPSBPYmplY3Qua2V5cyhuYXZQcm9wZXJ0eURlZmluaXRpb24uJFJlZmVyZW50aWFsQ29uc3RyYWludCkubWFwKChzb3VyY2VQcm9wZXJ0eU5hbWUpID0+IHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNvdXJjZVR5cGVOYW1lOiBlbnRpdHlUeXBlT2JqZWN0Lm5hbWUsXG5cdFx0XHRcdHNvdXJjZVByb3BlcnR5OiBzb3VyY2VQcm9wZXJ0eU5hbWUsXG5cdFx0XHRcdHRhcmdldFR5cGVOYW1lOiBuYXZQcm9wZXJ0eURlZmluaXRpb24uJFR5cGUsXG5cdFx0XHRcdHRhcmdldFByb3BlcnR5OiBuYXZQcm9wZXJ0eURlZmluaXRpb24uJFJlZmVyZW50aWFsQ29uc3RyYWludFtzb3VyY2VQcm9wZXJ0eU5hbWVdXG5cdFx0XHR9O1xuXHRcdH0pO1xuXHR9XG5cdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eTogUmF3VjROYXZpZ2F0aW9uUHJvcGVydHkgPSB7XG5cdFx0X3R5cGU6IFwiTmF2aWdhdGlvblByb3BlcnR5XCIsXG5cdFx0bmFtZTogbmF2UHJvcGVydHlOYW1lLFxuXHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogYCR7ZW50aXR5VHlwZU9iamVjdC5mdWxseVF1YWxpZmllZE5hbWV9LyR7bmF2UHJvcGVydHlOYW1lfWAsXG5cdFx0cGFydG5lcjogbmF2UHJvcGVydHlEZWZpbml0aW9uLiRQYXJ0bmVyLFxuXHRcdGlzQ29sbGVjdGlvbjogbmF2UHJvcGVydHlEZWZpbml0aW9uLiRpc0NvbGxlY3Rpb24gPyBuYXZQcm9wZXJ0eURlZmluaXRpb24uJGlzQ29sbGVjdGlvbiA6IGZhbHNlLFxuXHRcdGNvbnRhaW5zVGFyZ2V0OiAhIW5hdlByb3BlcnR5RGVmaW5pdGlvbi4kQ29udGFpbnNUYXJnZXQsXG5cdFx0dGFyZ2V0VHlwZU5hbWU6IG5hdlByb3BlcnR5RGVmaW5pdGlvbi4kVHlwZSxcblx0XHRyZWZlcmVudGlhbENvbnN0cmFpbnRcblx0fTtcblxuXHRyZXR1cm4gbmF2aWdhdGlvblByb3BlcnR5O1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlTmF2aWdhdGlvblByb3BlcnR5QmluZGluZyhcblx0bmF2aWdhdGlvblByb3BlcnR5QmluZGluZzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IHVuZGVmaW5lZCxcblx0ZW50aXR5Q29udGFpbmVyTmFtZTogc3RyaW5nXG4pOiBSYXdOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nIHtcblx0aWYgKG5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuXHRcdFx0T2JqZWN0LmVudHJpZXMobmF2aWdhdGlvblByb3BlcnR5QmluZGluZykubWFwKChbcGF0aCwgdGFyZ2V0XSkgPT4gW3BhdGgsIGAke2VudGl0eUNvbnRhaW5lck5hbWV9LyR7dGFyZ2V0fWBdKVxuXHRcdCk7XG5cdH1cblxuXHRyZXR1cm4ge307XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVFbnRpdHlTZXQoZW50aXR5U2V0RGVmaW5pdGlvbjogTWV0YU1vZGVsRW50aXR5U2V0LCBlbnRpdHlTZXROYW1lOiBzdHJpbmcsIGVudGl0eUNvbnRhaW5lck5hbWU6IHN0cmluZyk6IFJhd0VudGl0eVNldCB7XG5cdHJldHVybiB7XG5cdFx0X3R5cGU6IFwiRW50aXR5U2V0XCIsXG5cdFx0bmFtZTogZW50aXR5U2V0TmFtZSxcblx0XHRuYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nOiBwcmVwYXJlTmF2aWdhdGlvblByb3BlcnR5QmluZGluZyhlbnRpdHlTZXREZWZpbml0aW9uLiROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nLCBlbnRpdHlDb250YWluZXJOYW1lKSxcblx0XHRlbnRpdHlUeXBlTmFtZTogZW50aXR5U2V0RGVmaW5pdGlvbi4kVHlwZSxcblx0XHRmdWxseVF1YWxpZmllZE5hbWU6IGAke2VudGl0eUNvbnRhaW5lck5hbWV9LyR7ZW50aXR5U2V0TmFtZX1gXG5cdH07XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVTaW5nbGV0b24oc2luZ2xldG9uRGVmaW5pdGlvbjogTWV0YU1vZGVsU2luZ2xldG9uLCBzaW5nbGV0b25OYW1lOiBzdHJpbmcsIGVudGl0eUNvbnRhaW5lck5hbWU6IHN0cmluZyk6IFJhd1NpbmdsZXRvbiB7XG5cdHJldHVybiB7XG5cdFx0X3R5cGU6IFwiU2luZ2xldG9uXCIsXG5cdFx0bmFtZTogc2luZ2xldG9uTmFtZSxcblx0XHRuYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nOiBwcmVwYXJlTmF2aWdhdGlvblByb3BlcnR5QmluZGluZyhzaW5nbGV0b25EZWZpbml0aW9uLiROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nLCBlbnRpdHlDb250YWluZXJOYW1lKSxcblx0XHRlbnRpdHlUeXBlTmFtZTogc2luZ2xldG9uRGVmaW5pdGlvbi4kVHlwZSxcblx0XHRmdWxseVF1YWxpZmllZE5hbWU6IGAke2VudGl0eUNvbnRhaW5lck5hbWV9LyR7c2luZ2xldG9uTmFtZX1gLFxuXHRcdG51bGxhYmxlOiB0cnVlXG5cdH07XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVBY3Rpb25JbXBvcnQoXG5cdGFjdGlvbkltcG9ydDogTWV0YU1vZGVsQWN0aW9uSW1wb3J0IHwgTWV0YU1vZGVsRnVuY3Rpb25JbXBvcnQsXG5cdGFjdGlvbkltcG9ydE5hbWU6IHN0cmluZyxcblx0ZW50aXR5Q29udGFpbmVyTmFtZTogc3RyaW5nXG4pOiBSYXdBY3Rpb25JbXBvcnQge1xuXHRyZXR1cm4ge1xuXHRcdF90eXBlOiBcIkFjdGlvbkltcG9ydFwiLFxuXHRcdG5hbWU6IGFjdGlvbkltcG9ydE5hbWUsXG5cdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBgJHtlbnRpdHlDb250YWluZXJOYW1lfS8ke2FjdGlvbkltcG9ydE5hbWV9YCxcblx0XHRhY3Rpb25OYW1lOiBhY3Rpb25JbXBvcnQuJGtpbmQgPT09IFwiQWN0aW9uSW1wb3J0XCIgPyBhY3Rpb25JbXBvcnQuJEFjdGlvbiA6IGFjdGlvbkltcG9ydC4kRnVuY3Rpb25cblx0fTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZVR5cGVEZWZpbml0aW9uKHR5cGVEZWZpbml0aW9uOiBNZXRhTW9kZWxUeXBlRGVmaW5pdGlvbiwgdHlwZU5hbWU6IHN0cmluZywgbmFtZXNwYWNlUHJlZml4OiBzdHJpbmcpOiBSYXdUeXBlRGVmaW5pdGlvbiB7XG5cdGNvbnN0IHR5cGVPYmplY3Q6IFJhd1R5cGVEZWZpbml0aW9uID0ge1xuXHRcdF90eXBlOiBcIlR5cGVEZWZpbml0aW9uXCIsXG5cdFx0bmFtZTogdHlwZU5hbWUuc3Vic3RyaW5nKG5hbWVzcGFjZVByZWZpeC5sZW5ndGgpLFxuXHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogdHlwZU5hbWUsXG5cdFx0dW5kZXJseWluZ1R5cGU6IHR5cGVEZWZpbml0aW9uLiRVbmRlcmx5aW5nVHlwZVxuXHR9O1xuXHRyZXR1cm4gdHlwZU9iamVjdDtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZUNvbXBsZXhUeXBlKGNvbXBsZXhUeXBlRGVmaW5pdGlvbjogTWV0YU1vZGVsQ29tcGxleFR5cGUsIGNvbXBsZXhUeXBlTmFtZTogc3RyaW5nLCBuYW1lc3BhY2VQcmVmaXg6IHN0cmluZyk6IFJhd0NvbXBsZXhUeXBlIHtcblx0Y29uc3QgY29tcGxleFR5cGVPYmplY3Q6IFJhd0NvbXBsZXhUeXBlID0ge1xuXHRcdF90eXBlOiBcIkNvbXBsZXhUeXBlXCIsXG5cdFx0bmFtZTogY29tcGxleFR5cGVOYW1lLnN1YnN0cmluZyhuYW1lc3BhY2VQcmVmaXgubGVuZ3RoKSxcblx0XHRmdWxseVF1YWxpZmllZE5hbWU6IGNvbXBsZXhUeXBlTmFtZSxcblx0XHRwcm9wZXJ0aWVzOiBbXSxcblx0XHRuYXZpZ2F0aW9uUHJvcGVydGllczogW11cblx0fTtcblxuXHRjb25zdCBjb21wbGV4VHlwZVByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhjb21wbGV4VHlwZURlZmluaXRpb24pXG5cdFx0LmZpbHRlcigocHJvcGVydHlOYW1lT3JOb3QpID0+IHtcblx0XHRcdGlmIChwcm9wZXJ0eU5hbWVPck5vdCAhPSBcIiRLZXlcIiAmJiBwcm9wZXJ0eU5hbWVPck5vdCAhPSBcIiRraW5kXCIpIHtcblx0XHRcdFx0cmV0dXJuIGNvbXBsZXhUeXBlRGVmaW5pdGlvbltwcm9wZXJ0eU5hbWVPck5vdF0uJGtpbmQgPT09IFwiUHJvcGVydHlcIjtcblx0XHRcdH1cblx0XHR9KVxuXHRcdC5zb3J0KChhLCBiKSA9PiAoYSA+IGIgPyAxIDogLTEpKVxuXHRcdC5tYXAoKHByb3BlcnR5TmFtZSkgPT4ge1xuXHRcdFx0cmV0dXJuIHByZXBhcmVQcm9wZXJ0eShjb21wbGV4VHlwZURlZmluaXRpb25bcHJvcGVydHlOYW1lXSBhcyBNZXRhTW9kZWxQcm9wZXJ0eSwgY29tcGxleFR5cGVPYmplY3QsIHByb3BlcnR5TmFtZSk7XG5cdFx0fSk7XG5cblx0Y29tcGxleFR5cGVPYmplY3QucHJvcGVydGllcyA9IGNvbXBsZXhUeXBlUHJvcGVydGllcztcblx0Y29uc3QgY29tcGxleFR5cGVOYXZpZ2F0aW9uUHJvcGVydGllcyA9IE9iamVjdC5rZXlzKGNvbXBsZXhUeXBlRGVmaW5pdGlvbilcblx0XHQuZmlsdGVyKChwcm9wZXJ0eU5hbWVPck5vdCkgPT4ge1xuXHRcdFx0aWYgKHByb3BlcnR5TmFtZU9yTm90ICE9IFwiJEtleVwiICYmIHByb3BlcnR5TmFtZU9yTm90ICE9IFwiJGtpbmRcIikge1xuXHRcdFx0XHRyZXR1cm4gY29tcGxleFR5cGVEZWZpbml0aW9uW3Byb3BlcnR5TmFtZU9yTm90XS4ka2luZCA9PT0gXCJOYXZpZ2F0aW9uUHJvcGVydHlcIjtcblx0XHRcdH1cblx0XHR9KVxuXHRcdC5zb3J0KChhLCBiKSA9PiAoYSA+IGIgPyAxIDogLTEpKVxuXHRcdC5tYXAoKG5hdlByb3BlcnR5TmFtZSkgPT4ge1xuXHRcdFx0cmV0dXJuIHByZXBhcmVOYXZpZ2F0aW9uUHJvcGVydHkoXG5cdFx0XHRcdGNvbXBsZXhUeXBlRGVmaW5pdGlvbltuYXZQcm9wZXJ0eU5hbWVdIGFzIE1ldGFNb2RlbE5hdmlnYXRpb25Qcm9wZXJ0eSxcblx0XHRcdFx0Y29tcGxleFR5cGVPYmplY3QsXG5cdFx0XHRcdG5hdlByb3BlcnR5TmFtZVxuXHRcdFx0KTtcblx0XHR9KTtcblx0Y29tcGxleFR5cGVPYmplY3QubmF2aWdhdGlvblByb3BlcnRpZXMgPSBjb21wbGV4VHlwZU5hdmlnYXRpb25Qcm9wZXJ0aWVzO1xuXHRyZXR1cm4gY29tcGxleFR5cGVPYmplY3Q7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVFbnRpdHlLZXlzKGVudGl0eVR5cGVEZWZpbml0aW9uOiBNZXRhTW9kZWxFbnRpdHlUeXBlLCBvTWV0YU1vZGVsRGF0YTogTWV0YU1vZGVsQ29udGVudCk6IHN0cmluZ1tdIHtcblx0aWYgKCFlbnRpdHlUeXBlRGVmaW5pdGlvbi4kS2V5ICYmIGVudGl0eVR5cGVEZWZpbml0aW9uLiRCYXNlVHlwZSkge1xuXHRcdHJldHVybiBwcmVwYXJlRW50aXR5S2V5cyhvTWV0YU1vZGVsRGF0YVtlbnRpdHlUeXBlRGVmaW5pdGlvbi4kQmFzZVR5cGVdIGFzIE1ldGFNb2RlbEVudGl0eVR5cGUsIG9NZXRhTW9kZWxEYXRhKTtcblx0fVxuXHRyZXR1cm4gZW50aXR5VHlwZURlZmluaXRpb24uJEtleSA/PyBbXTsgLy9oYW5kbGluZyBvZiBlbnRpdHkgdHlwZXMgd2l0aG91dCBrZXkgYXMgd2VsbCBhcyBiYXNldHlwZVxufVxuXG5mdW5jdGlvbiBwcmVwYXJlRW50aXR5VHlwZShcblx0ZW50aXR5VHlwZURlZmluaXRpb246IE1ldGFNb2RlbEVudGl0eVR5cGUsXG5cdGVudGl0eVR5cGVOYW1lOiBzdHJpbmcsXG5cdG5hbWVzcGFjZVByZWZpeDogc3RyaW5nLFxuXHRtZXRhTW9kZWxEYXRhOiBNZXRhTW9kZWxDb250ZW50LFxuXHRpZ25vcmVEYXRhZmllbGREZWZhdWx0OiBib29sZWFuXG4pOiBSYXdFbnRpdHlUeXBlIHtcblx0Y29uc3QgZW50aXR5VHlwZTogUmF3RW50aXR5VHlwZSA9IHtcblx0XHRfdHlwZTogXCJFbnRpdHlUeXBlXCIsXG5cdFx0bmFtZTogZW50aXR5VHlwZU5hbWUuc3Vic3RyaW5nKG5hbWVzcGFjZVByZWZpeC5sZW5ndGgpLFxuXHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogZW50aXR5VHlwZU5hbWUsXG5cdFx0a2V5czogW10sXG5cdFx0ZW50aXR5UHJvcGVydGllczogW10sXG5cdFx0bmF2aWdhdGlvblByb3BlcnRpZXM6IFtdLFxuXHRcdGFjdGlvbnM6IHt9XG5cdH07XG5cblx0Zm9yIChjb25zdCBrZXkgaW4gZW50aXR5VHlwZURlZmluaXRpb24pIHtcblx0XHRjb25zdCB2YWx1ZSA9IGVudGl0eVR5cGVEZWZpbml0aW9uW2tleV07XG5cblx0XHRzd2l0Y2ggKHZhbHVlLiRraW5kKSB7XG5cdFx0XHRjYXNlIFwiUHJvcGVydHlcIjpcblx0XHRcdFx0Y29uc3QgcHJvcGVydHkgPSBwcmVwYXJlUHJvcGVydHkodmFsdWUsIGVudGl0eVR5cGUsIGtleSk7XG5cdFx0XHRcdGVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTmF2aWdhdGlvblByb3BlcnR5XCI6XG5cdFx0XHRcdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eSA9IHByZXBhcmVOYXZpZ2F0aW9uUHJvcGVydHkodmFsdWUsIGVudGl0eVR5cGUsIGtleSk7XG5cdFx0XHRcdGVudGl0eVR5cGUubmF2aWdhdGlvblByb3BlcnRpZXMucHVzaChuYXZpZ2F0aW9uUHJvcGVydHkpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHRlbnRpdHlUeXBlLmtleXMgPSBwcmVwYXJlRW50aXR5S2V5cyhlbnRpdHlUeXBlRGVmaW5pdGlvbiwgbWV0YU1vZGVsRGF0YSlcblx0XHQubWFwKChlbnRpdHlLZXkpID0+IGVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5maW5kKChwcm9wZXJ0eSkgPT4gcHJvcGVydHkubmFtZSA9PT0gZW50aXR5S2V5KSlcblx0XHQuZmlsdGVyKChwcm9wZXJ0eSkgPT4gcHJvcGVydHkgIT09IHVuZGVmaW5lZCkgYXMgUmF3RW50aXR5VHlwZVtcImtleXNcIl07XG5cblx0Y29uc3QgZW50aXR5VHlwZUFubm90YXRpb25zID0gbWV0YU1vZGVsRGF0YS4kQW5ub3RhdGlvbnNbZW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWVdIGFzIE1ldGFNb2RlbEVudGl0eVR5cGVBbm5vdGF0aW9ucyB8IHVuZGVmaW5lZDtcblx0Ly8gQ2hlY2sgaWYgdGhlcmUgYXJlIGZpbHRlciBmYWNldHMgZGVmaW5lZCBmb3IgdGhlIGVudGl0eVR5cGUgYW5kIGlmIHllcywgY2hlY2sgaWYgYWxsIG9mIHRoZW0gaGF2ZSBhbiBJRFxuXHQvLyBUaGUgSUQgaXMgb3B0aW9uYWwsIGJ1dCBpdCBpcyBpbnRlcm5hbGx5IHRha2VuIGZvciBncm91cGluZyBmaWx0ZXIgZmllbGRzIGFuZCBpZiBpdCdzIG5vdCBwcmVzZW50XG5cdC8vIGEgZmFsbGJhY2sgSUQgbmVlZHMgdG8gYmUgZ2VuZXJhdGVkIGhlcmUuXG5cdGNvbnN0IGZpbHRlckZhY2V0cyA9IGVudGl0eVR5cGVBbm5vdGF0aW9ucz8uW2BAJHtVSUFubm90YXRpb25UZXJtcy5GaWx0ZXJGYWNldHN9YF0gYXMgTWV0YU1vZGVsVHlwZTxGaWx0ZXJGYWNldHM+O1xuXHRmaWx0ZXJGYWNldHM/LmZvckVhY2goKGZpbHRlckZhY2V0QW5ub3RhdGlvbjogTWV0YU1vZGVsVHlwZTxSZWZlcmVuY2VGYWNldD4pID0+IHtcblx0XHRmaWx0ZXJGYWNldEFubm90YXRpb24uSUQgPSBjcmVhdGVSZWZlcmVuY2VGYWNldElkKGZpbHRlckZhY2V0QW5ub3RhdGlvbik7XG5cdH0pO1xuXG5cdC8vIENoZWNrIGlmIGVudGl0eVR5cGUgaGFzIG5vdCBtYW5kYXRvcnkgSGVhZGVySW5mb1xuXHRpZiAoXG5cdFx0ISFlbnRpdHlUeXBlPy5rZXlzLmxlbmd0aCAmJlxuXHRcdG1ldGFNb2RlbERhdGEuJEFubm90YXRpb25zW2VudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lXSAmJlxuXHRcdCFlbnRpdHlUeXBlQW5ub3RhdGlvbnM/LltgQCR7VUlBbm5vdGF0aW9uVGVybXMuSGVhZGVySW5mb31gXVxuXHQpIHtcblx0XHRjb25zdCBoZWFkZXJJbmZvQW5ub3RhdGlvbjogTWV0YU1vZGVsVHlwZTxIZWFkZXJJbmZvPiA9IHtcblx0XHRcdCRUeXBlOiBgJHtVSUFubm90YXRpb25UeXBlcy5IZWFkZXJJbmZvVHlwZX1gLFxuXHRcdFx0VHlwZU5hbWU6IGAke2VudGl0eVR5cGUubmFtZX1gLFxuXHRcdFx0VHlwZU5hbWVQbHVyYWw6IFwiXCIsXG5cdFx0XHRUaXRsZToge1xuXHRcdFx0XHQkVHlwZTogYCR7VUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkfWAsXG5cdFx0XHRcdFZhbHVlOiB7XG5cdFx0XHRcdFx0JFBhdGg6IGAke2VudGl0eVR5cGUua2V5c1swXS5uYW1lfWBcblx0XHRcdFx0fVxuXHRcdFx0fSBhcyBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZD4sXG5cdFx0XHR0ZXJtOiBVSUFubm90YXRpb25UZXJtcy5IZWFkZXJJbmZvXG5cdFx0fTtcblx0XHQvLyBBZGQgdGhlIG1pc3NpbmcgSGVhZGVySW5mb1xuXHRcdChtZXRhTW9kZWxEYXRhLiRBbm5vdGF0aW9uc1tlbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZV0gYXMgTWV0YU1vZGVsRW50aXR5VHlwZUFubm90YXRpb25zKVtgQCR7VUlBbm5vdGF0aW9uVGVybXMuSGVhZGVySW5mb31gXSA9XG5cdFx0XHRoZWFkZXJJbmZvQW5ub3RhdGlvbjtcblx0fVxuXG5cdGZvciAoY29uc3QgZW50aXR5UHJvcGVydHkgb2YgZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzKSB7XG5cdFx0aWYgKCFtZXRhTW9kZWxEYXRhLiRBbm5vdGF0aW9uc1tlbnRpdHlQcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWVdKSB7XG5cdFx0XHRtZXRhTW9kZWxEYXRhLiRBbm5vdGF0aW9uc1tlbnRpdHlQcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWVdID0ge307XG5cdFx0fVxuXHRcdGlmIChcblx0XHRcdCFpZ25vcmVEYXRhZmllbGREZWZhdWx0ICYmXG5cdFx0XHQhKG1ldGFNb2RlbERhdGEuJEFubm90YXRpb25zW2VudGl0eVByb3BlcnR5LmZ1bGx5UXVhbGlmaWVkTmFtZV0gYXMgTWV0YU1vZGVsUHJvcGVydHlBbm5vdGF0aW9ucylbXG5cdFx0XHRcdGBAJHtVSUFubm90YXRpb25UZXJtcy5EYXRhRmllbGREZWZhdWx0fWBcblx0XHRcdF1cblx0XHQpIHtcblx0XHRcdChtZXRhTW9kZWxEYXRhLiRBbm5vdGF0aW9uc1tlbnRpdHlQcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWVdIGFzIE1ldGFNb2RlbFByb3BlcnR5QW5ub3RhdGlvbnMpW1xuXHRcdFx0XHRgQCR7VUlBbm5vdGF0aW9uVGVybXMuRGF0YUZpZWxkRGVmYXVsdH1gXG5cdFx0XHRdID0ge1xuXHRcdFx0XHQkVHlwZTogVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkLFxuXHRcdFx0XHRWYWx1ZTogeyAkUGF0aDogZW50aXR5UHJvcGVydHkubmFtZSB9XG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbnRpdHlUeXBlO1xufVxuZnVuY3Rpb24gcHJlcGFyZUFjdGlvbihhY3Rpb25SYXdEYXRhOiBNZXRhTW9kZWxBY3Rpb24sIGFjdGlvbk5hbWU6IHN0cmluZywgbmFtZXNwYWNlUHJlZml4OiBzdHJpbmcpOiBSYXdBY3Rpb24ge1xuXHRsZXQgb3ZlcmxvYWRQYXJhbWV0ZXJzOiBNZXRhTW9kZWxBY3Rpb25bXCIkUGFyYW1ldGVyXCJdO1xuXHRpZiAoYWN0aW9uUmF3RGF0YS4ka2luZCA9PT0gXCJGdW5jdGlvblwiKSB7XG5cdFx0Ly8gZnVuY3Rpb24gLSBvdmVybG9hZCBpbmNsdWRlcyBhbGwgcGFyYW1ldGVycyAoYm91bmQgZW50aXR5IHR5cGUgX2FuZF8gb3RoZXIgcGFyYW1ldGVycylcblx0XHRvdmVybG9hZFBhcmFtZXRlcnMgPSBhY3Rpb25SYXdEYXRhLiRQYXJhbWV0ZXIgPz8gW107XG5cdH0gZWxzZSB7XG5cdFx0Ly8gYWN0aW9uIC0gb3ZlcmxvYWQgaXMgdGhlIGZpcnN0IHBhcmFtZXRlciBvciB0aGUgZW1wdHkgdW5ib3VuZCBvdmVybG9hZCBpbiBjYXNlIG9mIGFuIHVuYm91bmQgYWN0aW9uXG5cdFx0b3ZlcmxvYWRQYXJhbWV0ZXJzID0gYWN0aW9uUmF3RGF0YS4kSXNCb3VuZCA/IFthY3Rpb25SYXdEYXRhLiRQYXJhbWV0ZXJbMF1dIDogW107XG5cdH1cblxuXHRjb25zdCBvdmVybG9hZCA9IG92ZXJsb2FkUGFyYW1ldGVyc1xuXHRcdC5tYXAoKHBhcmFtZXRlcikgPT4gKHBhcmFtZXRlci4kaXNDb2xsZWN0aW9uID8gYENvbGxlY3Rpb24oJHtwYXJhbWV0ZXIuJFR5cGV9KWAgOiBwYXJhbWV0ZXIuJFR5cGUpKVxuXHRcdC5qb2luKFwiLFwiKTtcblxuXHRjb25zdCBmdWxseVF1YWxpZmllZE5hbWUgPSBgJHthY3Rpb25OYW1lfSgke292ZXJsb2FkfSlgO1xuXG5cdGNvbnN0IHBhcmFtZXRlcnMgPSBhY3Rpb25SYXdEYXRhLiRQYXJhbWV0ZXIgPz8gW107XG5cdHJldHVybiB7XG5cdFx0X3R5cGU6IFwiQWN0aW9uXCIsXG5cdFx0bmFtZTogYWN0aW9uTmFtZS5zdWJzdHJpbmcobmFtZXNwYWNlUHJlZml4Lmxlbmd0aCksXG5cdFx0ZnVsbHlRdWFsaWZpZWROYW1lLFxuXHRcdGlzQm91bmQ6IGFjdGlvblJhd0RhdGEuJElzQm91bmQgPz8gZmFsc2UsXG5cdFx0aXNGdW5jdGlvbjogYWN0aW9uUmF3RGF0YS4ka2luZCA9PT0gXCJGdW5jdGlvblwiLFxuXHRcdHNvdXJjZVR5cGU6IG92ZXJsb2FkUGFyYW1ldGVyc1swXT8uJFR5cGUgPz8gXCJcIixcblx0XHRyZXR1cm5UeXBlOiBhY3Rpb25SYXdEYXRhLiRSZXR1cm5UeXBlPy4kVHlwZSA/PyBcIlwiLFxuXHRcdHJldHVybkNvbGxlY3Rpb246IGFjdGlvblJhd0RhdGEuJFJldHVyblR5cGU/LiRpc0NvbGxlY3Rpb24gPz8gZmFsc2UsXG5cdFx0cGFyYW1ldGVyczogcGFyYW1ldGVycy5tYXAoKHBhcmFtKSA9PiAoe1xuXHRcdFx0X3R5cGU6IFwiQWN0aW9uUGFyYW1ldGVyXCIsXG5cdFx0XHRmdWxseVF1YWxpZmllZE5hbWU6IGAke2Z1bGx5UXVhbGlmaWVkTmFtZX0vJHtwYXJhbS4kTmFtZX1gLFxuXHRcdFx0aXNDb2xsZWN0aW9uOiBwYXJhbS4kaXNDb2xsZWN0aW9uID8/IGZhbHNlLFxuXHRcdFx0bmFtZTogcGFyYW0uJE5hbWUsXG5cdFx0XHR0eXBlOiBwYXJhbS4kVHlwZSxcblx0XHRcdG51bGxhYmxlOiBwYXJhbS4kTnVsbGFibGUgPz8gZmFsc2UsXG5cdFx0XHRtYXhMZW5ndGg6IHBhcmFtLiRNYXhMZW5ndGgsXG5cdFx0XHRwcmVjaXNpb246IHBhcmFtLiRQcmVjaXNpb24sXG5cdFx0XHRzY2FsZTogcGFyYW0uJFNjYWxlXG5cdFx0fSkpXG5cdH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlRW50aXR5Q29udGFpbmVyKFxuXHRuYW1lc3BhY2VQcmVmaXg6IHN0cmluZyxcblx0ZW50aXR5Q29udGFpbmVyTmFtZTogc3RyaW5nLFxuXHRlbnRpdHlDb250YWluZXJNZXRhZGF0YTogTWV0YU1vZGVsRW50aXR5Q29udGFpbmVyLFxuXHRzY2hlbWE6IFJhd1NjaGVtYVxuKTogdm9pZCB7XG5cdHNjaGVtYS5lbnRpdHlDb250YWluZXIgPSB7XG5cdFx0X3R5cGU6IFwiRW50aXR5Q29udGFpbmVyXCIsXG5cdFx0bmFtZTogZW50aXR5Q29udGFpbmVyTmFtZS5zdWJzdHJpbmcobmFtZXNwYWNlUHJlZml4Lmxlbmd0aCksXG5cdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBlbnRpdHlDb250YWluZXJOYW1lXG5cdH07XG5cblx0Zm9yIChjb25zdCBlbGVtZW50TmFtZSBpbiBlbnRpdHlDb250YWluZXJNZXRhZGF0YSkge1xuXHRcdGNvbnN0IGVsZW1lbnRWYWx1ZSA9IGVudGl0eUNvbnRhaW5lck1ldGFkYXRhW2VsZW1lbnROYW1lXTtcblx0XHRzd2l0Y2ggKGVsZW1lbnRWYWx1ZS4ka2luZCkge1xuXHRcdFx0Y2FzZSBcIkVudGl0eVNldFwiOlxuXHRcdFx0XHRzY2hlbWEuZW50aXR5U2V0cy5wdXNoKHByZXBhcmVFbnRpdHlTZXQoZWxlbWVudFZhbHVlLCBlbGVtZW50TmFtZSwgZW50aXR5Q29udGFpbmVyTmFtZSkpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBcIlNpbmdsZXRvblwiOlxuXHRcdFx0XHRzY2hlbWEuc2luZ2xldG9ucy5wdXNoKHByZXBhcmVTaW5nbGV0b24oZWxlbWVudFZhbHVlLCBlbGVtZW50TmFtZSwgZW50aXR5Q29udGFpbmVyTmFtZSkpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJGdW5jdGlvbkltcG9ydFwiOlxuXHRcdFx0Y2FzZSBcIkFjdGlvbkltcG9ydFwiOlxuXHRcdFx0XHRzY2hlbWEuYWN0aW9uSW1wb3J0cy5wdXNoKHByZXBhcmVBY3Rpb25JbXBvcnQoZWxlbWVudFZhbHVlLCBlbGVtZW50TmFtZSwgZW50aXR5Q29udGFpbmVyTmFtZSkpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gcGFyc2VBbm5vdGF0aW9ucyhhbm5vdGF0aW9uczogUmVjb3JkPHN0cmluZywgTWV0YU1vZGVsQW5ub3RhdGlvbnM+LCBjYXBhYmlsaXRpZXM6IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKTogQW5ub3RhdGlvbkxpc3RbXSB7XG5cdGNvbnN0IGFubm90YXRpb25MaXN0czogUmVjb3JkPHN0cmluZywgQW5ub3RhdGlvbkxpc3Q+ID0ge307XG5cdGZvciAoY29uc3QgdGFyZ2V0IGluIGFubm90YXRpb25zKSB7XG5cdFx0Y3JlYXRlQW5ub3RhdGlvbkxpc3RzKGFubm90YXRpb25zW3RhcmdldF0sIHRhcmdldCwgYW5ub3RhdGlvbkxpc3RzLCBjYXBhYmlsaXRpZXMpO1xuXHR9XG5cdHJldHVybiBPYmplY3QudmFsdWVzKGFubm90YXRpb25MaXN0cyk7XG59XG5cbnR5cGUgTWV0YU1vZGVsU2NoZW1hID0ge1xuXHQka2luZDogXCJTY2hlbWFcIjtcbn07XG50eXBlIE1ldGFNb2RlbEVudGl0eVNldCA9IHtcblx0JGtpbmQ6IFwiRW50aXR5U2V0XCI7XG5cdCRUeXBlOiBzdHJpbmc7XG5cdCROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn07XG5cbnR5cGUgTWV0YU1vZGVsVHlwZXM8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PiA9IHtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHQvLyBAdHMtaWdub3JlXG5cdFtrZXkgaW4ga2V5b2YgVF06IE1ldGFNb2RlbFR5cGU8VFtrZXldPjtcbn07XG5leHBvcnQgdHlwZSBNZXRhTW9kZWxFbnRpdHlUeXBlQW5ub3RhdGlvbnMgPSBSZW5hbWU8XCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5cIiwgTWV0YU1vZGVsVHlwZXM8RW50aXR5VHlwZUFubm90YXRpb25zX0NhcGFiaWxpdGllcz4+ICZcblx0UmVuYW1lPFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlwiLCBNZXRhTW9kZWxUeXBlczxFbnRpdHlUeXBlQW5ub3RhdGlvbnNfVUk+PjtcblxuZXhwb3J0IHR5cGUgTWV0YU1vZGVsRW50aXR5U2V0QW5ub3RhdGlvbnMgPSBSZW5hbWU8XCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5cIiwgTWV0YU1vZGVsVHlwZXM8RW50aXR5U2V0QW5ub3RhdGlvbnNfQ2FwYWJpbGl0aWVzPj4gJlxuXHRSZW5hbWU8XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuXCIsIE1ldGFNb2RlbFR5cGVzPEVudGl0eVNldEFubm90YXRpb25zX1VJPj47XG5cbmV4cG9ydCB0eXBlIE1ldGFNb2RlbFByb3BlcnR5QW5ub3RhdGlvbnMgPSBSZW5hbWU8XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlwiLCBNZXRhTW9kZWxUeXBlczxQcm9wZXJ0eUFubm90YXRpb25zX0NvbW1vbj4+ICZcblx0UmVuYW1lPFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlwiLCBNZXRhTW9kZWxUeXBlczxQcm9wZXJ0eUFubm90YXRpb25zX1VJPj4gJlxuXHRSZW5hbWU8XCJAT3JnLk9EYXRhLkNvcmUuVjEuXCIsIE1ldGFNb2RlbFR5cGVzPFByb3BlcnR5QW5ub3RhdGlvbnNfQ29yZT4+ICZcblx0UmVuYW1lPFwiQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuXCIsIE1ldGFNb2RlbFR5cGVzPFByb3BlcnR5QW5ub3RhdGlvbnNfQ2FwYWJpbGl0aWVzPj4gJlxuXHRSZW5hbWU8XCJAT3JnLk9EYXRhLk1lYXN1cmVzLlYxLlwiLCBNZXRhTW9kZWxUeXBlczxQcm9wZXJ0eUFubm90YXRpb25zX01lYXN1cmVzPj4gJlxuXHRSZW5hbWU8XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLlwiLCBNZXRhTW9kZWxUeXBlczxQcm9wZXJ0eUFubm90YXRpb25zX0FuYWx5dGljcz4+ICZcblx0UmVuYW1lPFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuXCIsIE1ldGFNb2RlbFR5cGVzPFByb3BlcnR5QW5ub3RhdGlvbnNfQ29tbXVuaWNhdGlvbj4+ICZcblx0UmVuYW1lPFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlBlcnNvbmFsRGF0YS52MS5cIiwgTWV0YU1vZGVsVHlwZXM8UHJvcGVydHlBbm5vdGF0aW9uc19QZXJzb25hbERhdGE+PiAmXG5cdFJlbmFtZTxcIkBjb20uc2FwLnZvY2FidWxhcmllcy5TZXNzaW9uLnYxLlwiLCBNZXRhTW9kZWxUeXBlczxQcm9wZXJ0eUFubm90YXRpb25zX1Nlc3Npb24+PiAmIHtcblx0XHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dEBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRcIjogTWV0YU1vZGVsRW51bTxUZXh0QXJyYW5nZW1lbnQ+O1xuXHR9O1xudHlwZSBNZXRhTW9kZWxBY3Rpb25JbXBvcnQgPSB7XG5cdCRraW5kOiBcIkFjdGlvbkltcG9ydFwiO1xuXHQkQWN0aW9uOiBzdHJpbmc7XG59O1xudHlwZSBNZXRhTW9kZWxGdW5jdGlvbkltcG9ydCA9IHtcblx0JGtpbmQ6IFwiRnVuY3Rpb25JbXBvcnRcIjtcblx0JEZ1bmN0aW9uOiBzdHJpbmc7XG59O1xudHlwZSBNZXRhTW9kZWxTaW5nbGV0b24gPSB7XG5cdCRraW5kOiBcIlNpbmdsZXRvblwiO1xuXHQkVHlwZTogc3RyaW5nO1xuXHQkTmF2aWdhdGlvblByb3BlcnR5QmluZGluZz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59O1xudHlwZSBNZXRhTW9kZWxFbnRpdHlDb250YWluZXIgPSB7XG5cdCRraW5kOiBcIkVudGl0eUNvbnRhaW5lclwiO1xufSAmIHtcblx0W25hbWU6IHN0cmluZ106IE1ldGFNb2RlbEVudGl0eVNldCB8IE1ldGFNb2RlbFNpbmdsZXRvbiB8IE1ldGFNb2RlbEFjdGlvbkltcG9ydCB8IE1ldGFNb2RlbEZ1bmN0aW9uSW1wb3J0O1xufTtcbnR5cGUgTWV0YU1vZGVsUHJvcGVydHkgPSB7XG5cdCRraW5kOiBcIlByb3BlcnR5XCI7XG5cdCRUeXBlOiBzdHJpbmc7XG5cdCRNYXhMZW5ndGg/OiBudW1iZXI7XG5cdCRQcmVjaXNpb24/OiBudW1iZXI7XG5cdCRTY2FsZT86IG51bWJlcjtcblx0JE51bGxhYmxlPzogYm9vbGVhbjtcbn07XG50eXBlIE1ldGFNb2RlbE5hdmlnYXRpb25Qcm9wZXJ0eSA9IHtcblx0JGtpbmQ6IFwiTmF2aWdhdGlvblByb3BlcnR5XCI7XG5cdCRUeXBlOiBzdHJpbmc7XG5cdCRQYXJ0bmVyPzogc3RyaW5nO1xuXHQkaXNDb2xsZWN0aW9uPzogYm9vbGVhbjtcblx0JENvbnRhaW5zVGFyZ2V0PzogYm9vbGVhbjtcblx0JFJlZmVyZW50aWFsQ29uc3RyYWludDogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn07XG50eXBlIE1ldGFNb2RlbEVudGl0eVR5cGUgPSB7XG5cdCRraW5kOiBcIkVudGl0eVR5cGVcIjtcblx0JEJhc2VUeXBlPzogc3RyaW5nO1xuXHQkS2V5OiBzdHJpbmdbXTtcbn0gJiB7XG5cdFtuYW1lOiBzdHJpbmddOiBNZXRhTW9kZWxQcm9wZXJ0eSB8IE1ldGFNb2RlbE5hdmlnYXRpb25Qcm9wZXJ0eTtcbn07XG50eXBlIE1ldGFNb2RlbENvbXBsZXhUeXBlID0ge1xuXHQka2luZDogXCJDb21wbGV4VHlwZVwiO1xufSAmIHtcblx0W25hbWU6IHN0cmluZ106IE1ldGFNb2RlbFByb3BlcnR5IHwgTWV0YU1vZGVsTmF2aWdhdGlvblByb3BlcnR5O1xufTtcbnR5cGUgTWV0YU1vZGVsVHlwZURlZmluaXRpb24gPSB7XG5cdCRraW5kOiBcIlR5cGVEZWZpbml0aW9uXCI7XG5cdCRVbmRlcmx5aW5nVHlwZTogc3RyaW5nO1xufTtcbnR5cGUgTWV0YU1vZGVsT2JqZWN0ID1cblx0fCBNZXRhTW9kZWxFbnRpdHlTZXRcblx0fCBNZXRhTW9kZWxTY2hlbWFcblx0fCBNZXRhTW9kZWxFbnRpdHlDb250YWluZXJcblx0fCBNZXRhTW9kZWxBY3Rpb25cblx0fCBNZXRhTW9kZWxFbnRpdHlUeXBlXG5cdHwgTWV0YU1vZGVsQ29tcGxleFR5cGVcblx0fCBNZXRhTW9kZWxUeXBlRGVmaW5pdGlvbjtcbnR5cGUgTWV0YU1vZGVsQW5ub3RhdGlvbnMgPSBNZXRhTW9kZWxFbnRpdHlUeXBlQW5ub3RhdGlvbnMgfCBNZXRhTW9kZWxQcm9wZXJ0eUFubm90YXRpb25zIHwgTWV0YU1vZGVsRW50aXR5U2V0QW5ub3RhdGlvbnM7XG5cbnR5cGUgTWV0YU1vZGVsQ29udGVudCA9IHtcblx0JEFubm90YXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBNZXRhTW9kZWxBbm5vdGF0aW9ucz47XG59ICYgUmVjb3JkPHN0cmluZywgTWV0YU1vZGVsT2JqZWN0IHwgTWV0YU1vZGVsT2JqZWN0W10+O1xuZnVuY3Rpb24gcGFyc2VTY2hlbWEobWV0YU1vZGVsRGF0YTogTWV0YU1vZGVsQ29udGVudCwgaWdub3JlRGF0YWZpZWxkRGVmYXVsdDogYm9vbGVhbik6IFJhd1NjaGVtYSB7XG5cdC8vIGFzc3VtaW5nIHRoZXJlIGlzIG9ubHkgb25lIHNjaGVtYS9uYW1lc3BhY2Vcblx0Y29uc3QgbmFtZXNwYWNlUHJlZml4ID1cblx0XHRPYmplY3Qua2V5cyhtZXRhTW9kZWxEYXRhKS5maW5kKChrZXkpID0+IHtcblx0XHRcdGNvbnN0IG1ldGFtb2RlbE9iamVjdCA9IG1ldGFNb2RlbERhdGFba2V5XTtcblx0XHRcdHJldHVybiAhQXJyYXkuaXNBcnJheShtZXRhbW9kZWxPYmplY3QpICYmIG1ldGFtb2RlbE9iamVjdC4ka2luZCA9PT0gXCJTY2hlbWFcIjtcblx0XHR9KSA/PyBcIlwiO1xuXG5cdGNvbnN0IHNjaGVtYTogUmF3U2NoZW1hID0ge1xuXHRcdG5hbWVzcGFjZTogbmFtZXNwYWNlUHJlZml4LnNsaWNlKDAsIC0xKSxcblx0XHRlbnRpdHlDb250YWluZXI6IHsgX3R5cGU6IFwiRW50aXR5Q29udGFpbmVyXCIsIG5hbWU6IFwiXCIsIGZ1bGx5UXVhbGlmaWVkTmFtZTogXCJcIiB9LFxuXHRcdGVudGl0eVNldHM6IFtdLFxuXHRcdGVudGl0eVR5cGVzOiBbXSxcblx0XHRjb21wbGV4VHlwZXM6IFtdLFxuXHRcdHR5cGVEZWZpbml0aW9uczogW10sXG5cdFx0c2luZ2xldG9uczogW10sXG5cdFx0YXNzb2NpYXRpb25zOiBbXSxcblx0XHRhc3NvY2lhdGlvblNldHM6IFtdLFxuXHRcdGFjdGlvbnM6IFtdLFxuXHRcdGFjdGlvbkltcG9ydHM6IFtdLFxuXHRcdGFubm90YXRpb25zOiB7fVxuXHR9O1xuXG5cdGNvbnN0IHBhcnNlTWV0YU1vZGVsRWxlbWVudCA9IChuYW1lOiBzdHJpbmcsIHZhbHVlOiBNZXRhTW9kZWxPYmplY3QpOiB2b2lkID0+IHtcblx0XHRzd2l0Y2ggKHZhbHVlLiRraW5kKSB7XG5cdFx0XHRjYXNlIFwiRW50aXR5Q29udGFpbmVyXCI6XG5cdFx0XHRcdHBhcnNlRW50aXR5Q29udGFpbmVyKG5hbWVzcGFjZVByZWZpeCwgbmFtZSwgdmFsdWUsIHNjaGVtYSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFwiQWN0aW9uXCI6XG5cdFx0XHRjYXNlIFwiRnVuY3Rpb25cIjpcblx0XHRcdFx0c2NoZW1hLmFjdGlvbnMucHVzaChwcmVwYXJlQWN0aW9uKHZhbHVlLCBuYW1lLCBuYW1lc3BhY2VQcmVmaXgpKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgXCJFbnRpdHlUeXBlXCI6XG5cdFx0XHRcdHNjaGVtYS5lbnRpdHlUeXBlcy5wdXNoKHByZXBhcmVFbnRpdHlUeXBlKHZhbHVlLCBuYW1lLCBuYW1lc3BhY2VQcmVmaXgsIG1ldGFNb2RlbERhdGEsIGlnbm9yZURhdGFmaWVsZERlZmF1bHQpKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgXCJDb21wbGV4VHlwZVwiOlxuXHRcdFx0XHRzY2hlbWEuY29tcGxleFR5cGVzLnB1c2gocHJlcGFyZUNvbXBsZXhUeXBlKHZhbHVlLCBuYW1lLCBuYW1lc3BhY2VQcmVmaXgpKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgXCJUeXBlRGVmaW5pdGlvblwiOlxuXHRcdFx0XHRzY2hlbWEudHlwZURlZmluaXRpb25zLnB1c2gocHJlcGFyZVR5cGVEZWZpbml0aW9uKHZhbHVlLCBuYW1lLCBuYW1lc3BhY2VQcmVmaXgpKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiRW50aXR5U2V0XCI6XG5cdFx0XHRjYXNlIFwiU2NoZW1hXCI6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fTtcblxuXHRmb3IgKGNvbnN0IGVsZW1lbnROYW1lIGluIG1ldGFNb2RlbERhdGEpIHtcblx0XHRjb25zdCBlbGVtZW50VmFsdWUgPSBtZXRhTW9kZWxEYXRhW2VsZW1lbnROYW1lXTtcblxuXHRcdGlmIChBcnJheS5pc0FycmF5KGVsZW1lbnRWYWx1ZSkpIHtcblx0XHRcdC8vIHZhbHVlIGNhbiBiZSBhbiBhcnJheSBpbiBjYXNlIG9mIGFjdGlvbnMgb3IgZnVuY3Rpb25zXG5cdFx0XHRmb3IgKGNvbnN0IHN1YkVsZW1lbnRWYWx1ZSBvZiBlbGVtZW50VmFsdWUpIHtcblx0XHRcdFx0cGFyc2VNZXRhTW9kZWxFbGVtZW50KGVsZW1lbnROYW1lLCBzdWJFbGVtZW50VmFsdWUpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRwYXJzZU1ldGFNb2RlbEVsZW1lbnQoZWxlbWVudE5hbWUsIGVsZW1lbnRWYWx1ZSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHNjaGVtYTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTWV0YU1vZGVsKFxuXHRtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRjYXBhYmlsaXRpZXM6IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzID0gRGVmYXVsdEVudmlyb25tZW50Q2FwYWJpbGl0aWVzLFxuXHRpZ25vcmVEYXRhZmllbGREZWZhdWx0ID0gZmFsc2Vcbik6IFJhd01ldGFkYXRhIHtcblx0Y29uc3QgcmVzdWx0OiBPbWl0PFJhd01ldGFkYXRhLCBcInNjaGVtYVwiPiA9IHtcblx0XHRpZGVudGlmaWNhdGlvbjogXCJtZXRhbW9kZWxSZXN1bHRcIixcblx0XHR2ZXJzaW9uOiBcIjQuMFwiLFxuXHRcdHJlZmVyZW5jZXM6IFtdXG5cdH07XG5cblx0Ly8gcGFyc2UgdGhlIHNjaGVtYSB3aGVuIGl0IGlzIGFjY2Vzc2VkIGZvciB0aGUgZmlyc3QgdGltZVxuXHRBbm5vdGF0aW9uQ29udmVydGVyLmxhenkocmVzdWx0IGFzIFJhd01ldGFkYXRhLCBcInNjaGVtYVwiLCAoKSA9PiB7XG5cdFx0Y29uc3QgbWV0YU1vZGVsRGF0YSA9IG1ldGFNb2RlbC5nZXRPYmplY3QoXCIvJFwiKTtcblx0XHRjb25zdCBzY2hlbWEgPSBwYXJzZVNjaGVtYShtZXRhTW9kZWxEYXRhLCBpZ25vcmVEYXRhZmllbGREZWZhdWx0KTtcblxuXHRcdEFubm90YXRpb25Db252ZXJ0ZXIubGF6eShzY2hlbWEuYW5ub3RhdGlvbnMsIFwibWV0YW1vZGVsUmVzdWx0XCIsICgpID0+IHBhcnNlQW5ub3RhdGlvbnMobWV0YU1vZGVsRGF0YS4kQW5ub3RhdGlvbnMsIGNhcGFiaWxpdGllcykpO1xuXG5cdFx0cmV0dXJuIHNjaGVtYTtcblx0fSk7XG5cblx0cmV0dXJuIHJlc3VsdCBhcyBSYXdNZXRhZGF0YTtcbn1cblxuY29uc3QgY29udmVydGVkTWV0YU1vZGVsTWFwOiBSZWNvcmQ8c3RyaW5nLCBDb252ZXJ0ZWRNZXRhZGF0YT4gPSB7fTtcbmNvbnN0IG1ldGFNb2RlbElETWFwOiBSZWNvcmQ8c3RyaW5nLCBTdHJpbmc+ID0ge307XG5jb25zdCBtZXRhTW9kZWxNYXA6IFdlYWtNYXA8U3RyaW5nLCBPRGF0YU1ldGFNb2RlbD4gPSBuZXcgV2Vha01hcCgpO1xuY29uc3QgdmlydHVhbFByb3BlcnRpZXNNYXA6IFJlY29yZDxcblx0c3RyaW5nLFxuXHRSZWNvcmQ8XG5cdFx0c3RyaW5nLFxuXHRcdHtcblx0XHRcdGZuPzogKHBhdGg6IHN0cmluZywgY29udmVydGVkVHlwZXM6IENvbnZlcnRlZE1ldGFkYXRhLCByZWxhdGl2ZVBhdGg/OiBzdHJpbmcpID0+IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPjtcblx0XHRcdHZpZXdJZD86IHN0cmluZztcblx0XHR9XG5cdD5cbj4gPSB7fTtcblxuLyoqXG4gKiBDb252ZXJ0IHRoZSBPRGF0YU1ldGFNb2RlbCBpbnRvIGFub3RoZXIgZm9ybWF0IHRoYXQgYWxsb3dzIGZvciBlYXN5IG1hbmlwdWxhdGlvbiBvZiB0aGUgYW5ub3RhdGlvbnMuXG4gKiBAcGFyYW0gb01ldGFNb2RlbCBUaGUgT0RhdGFNZXRhTW9kZWxcbiAqIEBwYXJhbSBvQ2FwYWJpbGl0aWVzIFRoZSBjdXJyZW50IGNhcGFiaWxpdGllc1xuICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgb2JqZWN0LWxpa2UgYW5ub3RhdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRUeXBlcyhvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgb0NhcGFiaWxpdGllcz86IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKTogQ29udmVydGVkTWV0YWRhdGEge1xuXHRjb25zdCBtZXRhTW9kZWxJRCA9IChvTWV0YU1vZGVsIGFzIHsgaWQ/OiBzdHJpbmcgfSkuaWQhO1xuXHRpZiAoIWNvbnZlcnRlZE1ldGFNb2RlbE1hcC5oYXNPd25Qcm9wZXJ0eShtZXRhTW9kZWxJRCkpIHtcblx0XHRjb25zdCBwYXJzZWRPdXRwdXQgPSBwYXJzZU1ldGFNb2RlbChvTWV0YU1vZGVsLCBvQ2FwYWJpbGl0aWVzKTtcblx0XHR0cnkge1xuXHRcdFx0Y29udmVydGVkTWV0YU1vZGVsTWFwW21ldGFNb2RlbElEXSA9IEFubm90YXRpb25Db252ZXJ0ZXIuY29udmVydChwYXJzZWRPdXRwdXQpO1xuXHRcdFx0dmlydHVhbFByb3BlcnRpZXNNYXBbbWV0YU1vZGVsSURdID0ge1xuXHRcdFx0XHRjcml0aWNhbGl0eTogeyBmbjogZ2V0VmlydHVhbENyaXRpY2FsaXR5RXhwcmVzc2lvbiB9XG5cdFx0XHR9O1xuXHRcdFx0Y29uc3QgbWV0YU1vZGVsU3ltYm9sID0gbmV3IFN0cmluZyhtZXRhTW9kZWxJRCk7XG5cdFx0XHRtZXRhTW9kZWxJRE1hcFttZXRhTW9kZWxJRF0gPSBtZXRhTW9kZWxTeW1ib2w7XG5cdFx0XHRtZXRhTW9kZWxNYXAuc2V0KG1ldGFNb2RlbFN5bWJvbCwgb01ldGFNb2RlbCk7XG5cdFx0fSBjYXRjaCAob0Vycm9yKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3Iob0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBjb252ZXJ0ZWRNZXRhTW9kZWxNYXBbbWV0YU1vZGVsSURdO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyBhIHZpcnR1YWwgcHJvcGVydHkgZm9yIGEgZ2l2ZW4gbWV0YWRhdGEgb2JqZWN0LlxuICogVGhpcyBhbGxvd3MgZm9yIGFkZGluZyBjdXN0b20gcHJvcGVydGllcyB0aGF0IGFyZSBub3QgcGFydCBvZiB0aGUgb3JpZ2luYWwgbW9kZWwgYnV0IGNhbiBiZSBjb21wdXRlZCBvciBkZXJpdmVkIGJhc2VkIG9uIGV4aXN0aW5nIG1ldGFkYXRhLlxuICogQHBhcmFtIGNvbnZlcnRlZFR5cGVzIFRoZSBtZXRhZGF0YSBvYmplY3QgZm9yIHdoaWNoIHRoZSB2aXJ0dWFsIHByb3BlcnR5IGlzIGJlaW5nIHJlZ2lzdGVyZWQuXG4gKiBAcGFyYW0gcHJvcGVydHlOYW1lIFRoZSBuYW1lIG9mIHRoZSB2aXJ0dWFsIHByb3BlcnR5IHRvIHJlZ2lzdGVyLlxuICogQHBhcmFtIGZuVmlydHVhbFByb3BlcnR5IEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBnZW5lcmF0ZXMgdGhlIHZhbHVlIG9mIHRoZSB2aXJ0dWFsIHByb3BlcnR5LiBUaGUgZnVuY3Rpb24gdGFrZXMgdGhlIHBhdGgsIG1ldGFkYXRhLCBhbmQgYW4gb3B0aW9uYWwgcmVsYXRpdmUgcGF0aCBhcyBhcmd1bWVudHMuXG4gKiBAcGFyYW0gdmlld0lkIFRoZSBpZGVudGlmaWVyIGZvciB0aGUgdmlldyBhc3NvY2lhdGVkIHdpdGggdGhlIHZpcnR1YWwgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclZpcnR1YWxQcm9wZXJ0eShcblx0Y29udmVydGVkVHlwZXM6IENvbnZlcnRlZE1ldGFkYXRhLFxuXHRwcm9wZXJ0eU5hbWU6IHN0cmluZyxcblx0Zm5WaXJ0dWFsUHJvcGVydHk6IChwYXRoOiBzdHJpbmcsIGNvbnZlcnRlZFR5cGVzOiBDb252ZXJ0ZWRNZXRhZGF0YSwgcmVsYXRpdmVQYXRoPzogc3RyaW5nKSA9PiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4sXG5cdHZpZXdJZDogc3RyaW5nXG4pOiB2b2lkIHtcblx0Y29uc3QgaWQgPSBPYmplY3Qua2V5cyhjb252ZXJ0ZWRNZXRhTW9kZWxNYXApLmZpbmQoKGlkOiBzdHJpbmcpID0+IGNvbnZlcnRlZE1ldGFNb2RlbE1hcFtpZF0gPT09IGNvbnZlcnRlZFR5cGVzKSA/PyBcIlwiO1xuXHRpZiAoIXZpcnR1YWxQcm9wZXJ0aWVzTWFwW2lkXSkge1xuXHRcdHZpcnR1YWxQcm9wZXJ0aWVzTWFwW2lkXSA9IHt9O1xuXHR9XG5cdHZpcnR1YWxQcm9wZXJ0aWVzTWFwW2lkXVtwcm9wZXJ0eU5hbWVdID0geyBmbjogZm5WaXJ0dWFsUHJvcGVydHksIHZpZXdJZCB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldE1ldGFNb2RlbEJ5SWQoaWQ6IHN0cmluZyk6IE9EYXRhTWV0YU1vZGVsIHwgdW5kZWZpbmVkIHtcblx0Y29uc3Qgc3ltYm9sID0gbWV0YU1vZGVsSURNYXBbaWRdO1xuXHRyZXR1cm4gbWV0YU1vZGVsTWFwLmdldChzeW1ib2wpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnZlcnRlZFR5cGVzKG9Db250ZXh0OiBDb250ZXh0KTogQ29udmVydGVkTWV0YWRhdGEge1xuXHRjb25zdCBvTWV0YU1vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKSBhcyB1bmtub3duIGFzIE9EYXRhTWV0YU1vZGVsO1xuXHRpZiAoIW9NZXRhTW9kZWwuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTWV0YU1vZGVsXCIpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gYSBPRGF0YU1ldGFNb2RlbFwiKTtcblx0fVxuXHRyZXR1cm4gY29udmVydFR5cGVzKG9NZXRhTW9kZWwpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVsZXRlTW9kZWxDYWNoZURhdGEob01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpOiB2b2lkIHtcblx0aWYgKG9NZXRhTW9kZWwpIHtcblx0XHRkZWxldGUgY29udmVydGVkTWV0YU1vZGVsTWFwWyhvTWV0YU1vZGVsIGFzIHVua25vd24gYXMgeyBpZDogc3RyaW5nIH0pLmlkXTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydE1ldGFNb2RlbENvbnRleHQob01ldGFNb2RlbENvbnRleHQ6IENvbnRleHQsIGJJbmNsdWRlVmlzaXRlZE9iamVjdHM6IHRydWUpOiB1bmRlZmluZWQgfCBSZXNvbHZlZFRhcmdldDtcbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0TWV0YU1vZGVsQ29udGV4dChvTWV0YU1vZGVsQ29udGV4dDogQ29udGV4dCk6IHVuZGVmaW5lZCB8IFNlcnZpY2VPYmplY3QgfCBBY3Rpb25QYXJhbWV0ZXIgfCBSZWNvcmRDb21wbGV4VHlwZTtcbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0TWV0YU1vZGVsQ29udGV4dChcblx0b01ldGFNb2RlbENvbnRleHQ6IENvbnRleHQsXG5cdGJJbmNsdWRlVmlzaXRlZE9iamVjdHMgPSBmYWxzZVxuKTogdW5kZWZpbmVkIHwgU2VydmljZU9iamVjdCB8IEFjdGlvblBhcmFtZXRlciB8IFJlY29yZENvbXBsZXhUeXBlIHwgUmVzb2x2ZWRUYXJnZXQge1xuXHRjb25zdCBvQ29udmVydGVkTWV0YWRhdGEgPSBjb252ZXJ0VHlwZXMob01ldGFNb2RlbENvbnRleHQuZ2V0TW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCk7XG5cdGNvbnN0IHNQYXRoID0gb01ldGFNb2RlbENvbnRleHQuZ2V0UGF0aCgpO1xuXG5cdGNvbnN0IGFQYXRoU3BsaXQgPSBzUGF0aC5zcGxpdChcIi9cIik7XG5cdGxldCBmaXJzdFBhcnQgPSBhUGF0aFNwbGl0WzFdO1xuXHRsZXQgYmVnaW5JbmRleCA9IDI7XG5cdGlmIChvQ29udmVydGVkTWV0YWRhdGEuZW50aXR5Q29udGFpbmVyLmZ1bGx5UXVhbGlmaWVkTmFtZSA9PT0gZmlyc3RQYXJ0KSB7XG5cdFx0Zmlyc3RQYXJ0ID0gYVBhdGhTcGxpdFsyXTtcblx0XHRiZWdpbkluZGV4Kys7XG5cdH1cblx0bGV0IHRhcmdldEVudGl0eVNldDogRW50aXR5U2V0IHwgU2luZ2xldG9uID0gb0NvbnZlcnRlZE1ldGFkYXRhLmVudGl0eVNldHMuZmluZChcblx0XHQoZW50aXR5U2V0KSA9PiBlbnRpdHlTZXQubmFtZSA9PT0gZmlyc3RQYXJ0XG5cdCkgYXMgRW50aXR5U2V0O1xuXHRpZiAoIXRhcmdldEVudGl0eVNldCkge1xuXHRcdHRhcmdldEVudGl0eVNldCA9IG9Db252ZXJ0ZWRNZXRhZGF0YS5zaW5nbGV0b25zLmZpbmQoKHNpbmdsZXRvbikgPT4gc2luZ2xldG9uLm5hbWUgPT09IGZpcnN0UGFydCkgYXMgU2luZ2xldG9uO1xuXHR9XG5cdGxldCByZWxhdGl2ZVBhdGggPSBhUGF0aFNwbGl0LnNsaWNlKGJlZ2luSW5kZXgpLmpvaW4oXCIvXCIpO1xuXG5cdGNvbnN0IGxvY2FsT2JqZWN0czogU2VydmljZU9iamVjdFtdID0gW3RhcmdldEVudGl0eVNldF07XG5cdHdoaWxlIChyZWxhdGl2ZVBhdGggJiYgcmVsYXRpdmVQYXRoLmxlbmd0aCA+IDAgJiYgcmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoXCIkTmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1wiKSkge1xuXHRcdGxldCByZWxhdGl2ZVNwbGl0ID0gcmVsYXRpdmVQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRsZXQgaWR4ID0gMDtcblx0XHRsZXQgY3VycmVudEVudGl0eVNldCwgc05hdlByb3BUb0NoZWNrO1xuXG5cdFx0cmVsYXRpdmVTcGxpdCA9IHJlbGF0aXZlU3BsaXQuc2xpY2UoMSk7IC8vIFJlbW92aW5nIFwiJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdcIlxuXHRcdHdoaWxlICghY3VycmVudEVudGl0eVNldCAmJiByZWxhdGl2ZVNwbGl0Lmxlbmd0aCA+IGlkeCkge1xuXHRcdFx0aWYgKHJlbGF0aXZlU3BsaXRbaWR4XSAhPT0gXCIkTmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1wiKSB7XG5cdFx0XHRcdC8vIEZpbmRpbmcgdGhlIGNvcnJlY3QgZW50aXR5U2V0IGZvciB0aGUgbmF2aWdhaXRvbiBwcm9wZXJ0eSBiaW5kaW5nIGV4YW1wbGU6IFwiU2V0L19TYWxlc09yZGVyXCJcblx0XHRcdFx0c05hdlByb3BUb0NoZWNrID0gcmVsYXRpdmVTcGxpdFxuXHRcdFx0XHRcdC5zbGljZSgwLCBpZHggKyAxKVxuXHRcdFx0XHRcdC5qb2luKFwiL1wiKVxuXHRcdFx0XHRcdC5yZXBsYWNlKFwiLyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nXCIsIFwiXCIpO1xuXHRcdFx0XHRjdXJyZW50RW50aXR5U2V0ID0gdGFyZ2V0RW50aXR5U2V0ICYmIHRhcmdldEVudGl0eVNldC5uYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nW3NOYXZQcm9wVG9DaGVja107XG5cdFx0XHR9XG5cdFx0XHRpZHgrKztcblx0XHR9XG5cdFx0aWYgKCFjdXJyZW50RW50aXR5U2V0KSB7XG5cdFx0XHQvLyBGYWxsIGJhY2sgdG8gU2luZ2xlIG5hdiBwcm9wIGlmIGVudGl0eVNldCBpcyBub3QgZm91bmQuXG5cdFx0XHRzTmF2UHJvcFRvQ2hlY2sgPSByZWxhdGl2ZVNwbGl0WzBdO1xuXHRcdH1cblx0XHRjb25zdCBhTmF2UHJvcHMgPSBzTmF2UHJvcFRvQ2hlY2s/LnNwbGl0KFwiL1wiKSB8fCBbXTtcblx0XHRsZXQgdGFyZ2V0RW50aXR5VHlwZSA9IHRhcmdldEVudGl0eVNldCAmJiB0YXJnZXRFbnRpdHlTZXQuZW50aXR5VHlwZTtcblx0XHRmb3IgKGNvbnN0IHNOYXZQcm9wIG9mIGFOYXZQcm9wcykge1xuXHRcdFx0Ly8gUHVzaGluZyBhbGwgbmF2IHByb3BzIHRvIHRoZSB2aXNpdGVkIG9iamVjdHMuIGV4YW1wbGU6IFwiU2V0XCIsIFwiX1NhbGVzT3JkZXJcIiBmb3IgXCJTZXQvX1NhbGVzT3JkZXJcIihpbiBOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nKVxuXHRcdFx0Y29uc3QgdGFyZ2V0TmF2UHJvcCA9IHRhcmdldEVudGl0eVR5cGUgJiYgdGFyZ2V0RW50aXR5VHlwZS5uYXZpZ2F0aW9uUHJvcGVydGllcy5maW5kKChuYXZQcm9wKSA9PiBuYXZQcm9wLm5hbWUgPT09IHNOYXZQcm9wKTtcblx0XHRcdGlmICh0YXJnZXROYXZQcm9wKSB7XG5cdFx0XHRcdGxvY2FsT2JqZWN0cy5wdXNoKHRhcmdldE5hdlByb3ApO1xuXHRcdFx0XHR0YXJnZXRFbnRpdHlUeXBlID0gdGFyZ2V0TmF2UHJvcC50YXJnZXRUeXBlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRhcmdldEVudGl0eVNldCA9XG5cdFx0XHQodGFyZ2V0RW50aXR5U2V0ICYmIGN1cnJlbnRFbnRpdHlTZXQpIHx8ICh0YXJnZXRFbnRpdHlTZXQgJiYgdGFyZ2V0RW50aXR5U2V0Lm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdbcmVsYXRpdmVTcGxpdFswXV0pO1xuXHRcdGlmICh0YXJnZXRFbnRpdHlTZXQpIHtcblx0XHRcdC8vIFB1c2hpbmcgdGhlIHRhcmdldCBlbnRpdHlTZXQgdG8gdmlzaXRlZCBvYmplY3RzXG5cdFx0XHRsb2NhbE9iamVjdHMucHVzaCh0YXJnZXRFbnRpdHlTZXQpO1xuXHRcdH1cblx0XHQvLyBSZS1jYWxjdWxhdGluZyB0aGUgcmVsYXRpdmUgcGF0aFxuXHRcdC8vIEFzIGVhY2ggbmF2aWdhdGlvbiBuYW1lIGlzIGVuY2xvc2VkIGJldHdlZW4gJyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nJyBhbmQgJyQnICh0byBiZSBhYmxlIHRvIGFjY2VzcyB0aGUgZW50aXR5c2V0IGVhc2lseSBpbiB0aGUgbWV0YW1vZGVsKVxuXHRcdC8vIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBjbG9zaW5nICckJyB0byBiZSBhYmxlIHRvIHN3aXRjaCB0byB0aGUgbmV4dCBuYXZpZ2F0aW9uXG5cdFx0cmVsYXRpdmVTcGxpdCA9IHJlbGF0aXZlU3BsaXQuc2xpY2UoYU5hdlByb3BzLmxlbmd0aCB8fCAxKTtcblx0XHRpZiAocmVsYXRpdmVTcGxpdC5sZW5ndGggJiYgcmVsYXRpdmVTcGxpdFswXSA9PT0gXCIkXCIpIHtcblx0XHRcdHJlbGF0aXZlU3BsaXQuc2hpZnQoKTtcblx0XHR9XG5cdFx0cmVsYXRpdmVQYXRoID0gcmVsYXRpdmVTcGxpdC5qb2luKFwiL1wiKTtcblx0fVxuXHRpZiAocmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoXCIkVHlwZVwiKSkge1xuXHRcdC8vIEFzICRUeXBlQCBpcyBhbGxvd2VkIGFzIHdlbGxcblx0XHRpZiAocmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoXCIkVHlwZUBcIikpIHtcblx0XHRcdHJlbGF0aXZlUGF0aCA9IHJlbGF0aXZlUGF0aC5yZXBsYWNlKFwiJFR5cGVcIiwgXCJcIik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFdlJ3JlIGFueXdheSBnb2luZyB0byBsb29rIG9uIHRoZSBlbnRpdHlUeXBlLi4uXG5cdFx0XHRyZWxhdGl2ZVBhdGggPSBhUGF0aFNwbGl0LnNsaWNlKDMpLmpvaW4oXCIvXCIpO1xuXHRcdH1cblx0fVxuXHRpZiAodGFyZ2V0RW50aXR5U2V0ICYmIHJlbGF0aXZlUGF0aC5sZW5ndGgpIHtcblx0XHRjb25zdCBvVGFyZ2V0ID0gdGFyZ2V0RW50aXR5U2V0LmVudGl0eVR5cGUucmVzb2x2ZVBhdGgocmVsYXRpdmVQYXRoLCBiSW5jbHVkZVZpc2l0ZWRPYmplY3RzKTtcblx0XHRpZiAob1RhcmdldCkge1xuXHRcdFx0aWYgKGJJbmNsdWRlVmlzaXRlZE9iamVjdHMpIHtcblx0XHRcdFx0b1RhcmdldC52aXNpdGVkT2JqZWN0cyA9IGxvY2FsT2JqZWN0cy5jb25jYXQob1RhcmdldC52aXNpdGVkT2JqZWN0cyk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0YXJnZXRFbnRpdHlTZXQuZW50aXR5VHlwZSAmJiB0YXJnZXRFbnRpdHlTZXQuZW50aXR5VHlwZS5hY3Rpb25zKSB7XG5cdFx0XHQvLyBpZiB0YXJnZXQgaXMgYW4gYWN0aW9uIG9yIGFuIGFjdGlvbiBwYXJhbWV0ZXJcblx0XHRcdGNvbnN0IGFjdGlvbnMgPSB0YXJnZXRFbnRpdHlTZXQuZW50aXR5VHlwZSAmJiB0YXJnZXRFbnRpdHlTZXQuZW50aXR5VHlwZS5hY3Rpb25zO1xuXHRcdFx0Y29uc3QgcmVsYXRpdmVTcGxpdCA9IHJlbGF0aXZlUGF0aC5zcGxpdChcIi9cIik7XG5cdFx0XHRpZiAoYWN0aW9uc1tyZWxhdGl2ZVNwbGl0WzBdXSkge1xuXHRcdFx0XHRjb25zdCBhY3Rpb24gPSBhY3Rpb25zW3JlbGF0aXZlU3BsaXRbMF1dO1xuXHRcdFx0XHRpZiAocmVsYXRpdmVTcGxpdFsxXSAmJiBhY3Rpb24ucGFyYW1ldGVycykge1xuXHRcdFx0XHRcdGNvbnN0IHBhcmFtZXRlck5hbWUgPSByZWxhdGl2ZVNwbGl0WzFdO1xuXHRcdFx0XHRcdHJldHVybiBhY3Rpb24ucGFyYW1ldGVycy5maW5kKChwYXJhbWV0ZXIpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiBwYXJhbWV0ZXIuZnVsbHlRdWFsaWZpZWROYW1lLmVuZHNXaXRoKGAvJHtwYXJhbWV0ZXJOYW1lfWApO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHJlbGF0aXZlUGF0aC5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0XHRyZXR1cm4gYWN0aW9uO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvVGFyZ2V0O1xuXHR9IGVsc2Uge1xuXHRcdGlmIChiSW5jbHVkZVZpc2l0ZWRPYmplY3RzKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0YXJnZXQ6IHRhcmdldEVudGl0eVNldCxcblx0XHRcdFx0dmlzaXRlZE9iamVjdHM6IGxvY2FsT2JqZWN0c1xuXHRcdFx0fTtcblx0XHR9XG5cdFx0cmV0dXJuIHRhcmdldEVudGl0eVNldDtcblx0fVxufVxuXG5leHBvcnQgdHlwZSBSZXNvbHZlZFRhcmdldDxUIGV4dGVuZHMgU2VydmljZU9iamVjdEFuZEFubm90YXRpb24gPSBTZXJ2aWNlT2JqZWN0PiA9IHtcblx0dGFyZ2V0PzogVCBleHRlbmRzIFNlcnZpY2VPYmplY3QgPyBUIDogQW5ub3RhdGlvblRlcm08VD47XG5cdHZpc2l0ZWRPYmplY3RzOiBTZXJ2aWNlT2JqZWN0QW5kQW5ub3RhdGlvbltdO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxUPihvTWV0YU1vZGVsQ29udGV4dDogQ29udGV4dCwgb0VudGl0eVNldE1ldGFNb2RlbENvbnRleHQ/OiBDb250ZXh0KTogRGF0YU1vZGVsT2JqZWN0UGF0aDxUPiB7XG5cdGNvbnN0IG9Db252ZXJ0ZWRNZXRhZGF0YSA9IGNvbnZlcnRUeXBlcyhvTWV0YU1vZGVsQ29udGV4dC5nZXRNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsKTtcblx0Y29uc3QgbWV0YU1vZGVsQ29udGV4dCA9IGNvbnZlcnRNZXRhTW9kZWxDb250ZXh0KG9NZXRhTW9kZWxDb250ZXh0LCB0cnVlKSBhcyBSZXNvbHZlZFRhcmdldDtcblx0bGV0IHRhcmdldEVudGl0eVNldExvY2F0aW9uO1xuXHRpZiAob0VudGl0eVNldE1ldGFNb2RlbENvbnRleHQgJiYgb0VudGl0eVNldE1ldGFNb2RlbENvbnRleHQuZ2V0UGF0aCgpICE9PSBcIi9cIikge1xuXHRcdHRhcmdldEVudGl0eVNldExvY2F0aW9uID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG9FbnRpdHlTZXRNZXRhTW9kZWxDb250ZXh0KTtcblx0fVxuXHRyZXR1cm4gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RGcm9tUGF0aDxUPihtZXRhTW9kZWxDb250ZXh0LCBvQ29udmVydGVkTWV0YWRhdGEsIHRhcmdldEVudGl0eVNldExvY2F0aW9uKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0RnJvbVBhdGg8VD4oXG5cdG1ldGFNb2RlbENvbnRleHQ6IFJlc29sdmVkVGFyZ2V0LFxuXHRjb252ZXJ0ZWRUeXBlczogQ29udmVydGVkTWV0YWRhdGEsXG5cdHRhcmdldEVudGl0eVNldExvY2F0aW9uPzogRGF0YU1vZGVsT2JqZWN0Q29udGV4dCxcblx0b25seVNlcnZpY2VPYmplY3RzID0gZmFsc2Vcbik6IERhdGFNb2RlbE9iamVjdFBhdGg8VD4ge1xuXHRjb25zdCBkYXRhTW9kZWxPYmplY3RzOiBTZXJ2aWNlT2JqZWN0QW5kQW5ub3RhdGlvbltdID0gbWV0YU1vZGVsQ29udGV4dC52aXNpdGVkT2JqZWN0cy5maWx0ZXIoXG5cdFx0KHZpc2l0ZWRPYmplY3QpID0+IGlzU2VydmljZU9iamVjdCh2aXNpdGVkT2JqZWN0KSAmJiAhaXNFbnRpdHlUeXBlKHZpc2l0ZWRPYmplY3QpICYmICFpc0VudGl0eUNvbnRhaW5lcih2aXNpdGVkT2JqZWN0KVxuXHQpO1xuXHRpZiAoXG5cdFx0aXNTZXJ2aWNlT2JqZWN0KG1ldGFNb2RlbENvbnRleHQudGFyZ2V0KSAmJlxuXHRcdCFpc0VudGl0eVR5cGUobWV0YU1vZGVsQ29udGV4dC50YXJnZXQpICYmXG5cdFx0ZGF0YU1vZGVsT2JqZWN0c1tkYXRhTW9kZWxPYmplY3RzLmxlbmd0aCAtIDFdICE9PSBtZXRhTW9kZWxDb250ZXh0LnRhcmdldCAmJlxuXHRcdCFvbmx5U2VydmljZU9iamVjdHNcblx0KSB7XG5cdFx0ZGF0YU1vZGVsT2JqZWN0cy5wdXNoKG1ldGFNb2RlbENvbnRleHQudGFyZ2V0KTtcblx0fVxuXG5cdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0aWVzOiBOYXZpZ2F0aW9uUHJvcGVydHlbXSA9IFtdO1xuXHRjb25zdCByb290RW50aXR5U2V0OiBFbnRpdHlTZXQgPSBkYXRhTW9kZWxPYmplY3RzWzBdIGFzIEVudGl0eVNldDtcblxuXHRsZXQgY3VycmVudEVudGl0eVNldDogRW50aXR5U2V0IHwgU2luZ2xldG9uIHwgdW5kZWZpbmVkID0gcm9vdEVudGl0eVNldDtcblx0bGV0IGN1cnJlbnRFbnRpdHlUeXBlOiBFbnRpdHlUeXBlID0gcm9vdEVudGl0eVNldC5lbnRpdHlUeXBlO1xuXHRsZXQgY3VycmVudE9iamVjdDogU2VydmljZU9iamVjdEFuZEFubm90YXRpb24gfCB1bmRlZmluZWQ7XG5cdGxldCBuYXZpZ2F0ZWRQYXRoID0gW107XG5cblx0Zm9yIChsZXQgaSA9IDE7IGkgPCBkYXRhTW9kZWxPYmplY3RzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y3VycmVudE9iamVjdCA9IGRhdGFNb2RlbE9iamVjdHNbaV07XG5cblx0XHRpZiAoaXNOYXZpZ2F0aW9uUHJvcGVydHkoY3VycmVudE9iamVjdCkpIHtcblx0XHRcdG5hdmlnYXRlZFBhdGgucHVzaChjdXJyZW50T2JqZWN0Lm5hbWUpO1xuXHRcdFx0bmF2aWdhdGlvblByb3BlcnRpZXMucHVzaChjdXJyZW50T2JqZWN0KTtcblx0XHRcdGN1cnJlbnRFbnRpdHlUeXBlID0gY3VycmVudE9iamVjdC50YXJnZXRUeXBlO1xuXHRcdFx0Y29uc3QgYm91bmRFbnRpdHlTZXQ6IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVuZGVmaW5lZCA9IGN1cnJlbnRFbnRpdHlTZXQ/Lm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdbbmF2aWdhdGVkUGF0aC5qb2luKFwiL1wiKV07XG5cdFx0XHRpZiAoYm91bmRFbnRpdHlTZXQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjdXJyZW50RW50aXR5U2V0ID0gYm91bmRFbnRpdHlTZXQ7XG5cdFx0XHRcdG5hdmlnYXRlZFBhdGggPSBbXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKGlzRW50aXR5U2V0KGN1cnJlbnRPYmplY3QpIHx8IGlzU2luZ2xldG9uKGN1cnJlbnRPYmplY3QpKSB7XG5cdFx0XHRjdXJyZW50RW50aXR5U2V0ID0gY3VycmVudE9iamVjdDtcblx0XHRcdGN1cnJlbnRFbnRpdHlUeXBlID0gY3VycmVudEVudGl0eVNldC5lbnRpdHlUeXBlO1xuXHRcdH1cblx0fVxuXG5cdGlmIChuYXZpZ2F0ZWRQYXRoLmxlbmd0aCA+IDApIHtcblx0XHQvLyBQYXRoIHdpdGhvdXQgTmF2aWdhdGlvblByb3BlcnR5QmluZGluZyAtLT4gbm8gdGFyZ2V0IGVudGl0eSBzZXRcblx0XHRjdXJyZW50RW50aXR5U2V0ID0gdW5kZWZpbmVkO1xuXHR9XG5cblx0aWYgKHRhcmdldEVudGl0eVNldExvY2F0aW9uICYmIHRhcmdldEVudGl0eVNldExvY2F0aW9uLnN0YXJ0aW5nRW50aXR5U2V0ICE9PSByb290RW50aXR5U2V0KSB7XG5cdFx0Ly8gSW4gY2FzZSB0aGUgZW50aXR5c2V0IGlzIG5vdCBzdGFydGluZyBmcm9tIHRoZSBzYW1lIGxvY2F0aW9uIGl0IG1heSBtZWFuIHRoYXQgd2UgYXJlIGRvaW5nIHRvbyBtdWNoIHdvcmsgZWFybGllciBmb3Igc29tZSByZWFzb25cblx0XHQvLyBBcyBzdWNoIHdlIG5lZWQgdG8gcmVkZWZpbmUgdGhlIGNvbnRleHQgc291cmNlIGZvciB0aGUgdGFyZ2V0RW50aXR5U2V0TG9jYXRpb25cblx0XHRjb25zdCBzdGFydGluZ0luZGV4ID0gZGF0YU1vZGVsT2JqZWN0cy5pbmRleE9mKHRhcmdldEVudGl0eVNldExvY2F0aW9uLnN0YXJ0aW5nRW50aXR5U2V0KTtcblx0XHRpZiAoc3RhcnRpbmdJbmRleCAhPT0gLTEpIHtcblx0XHRcdC8vIElmIGl0J3Mgbm90IGZvdW5kIEkgZG9uJ3Qga25vdyB3aGF0IHdlIGNhbiBkbyAocHJvYmFibHkgbm90aGluZylcblx0XHRcdGNvbnN0IHJlcXVpcmVkRGF0YU1vZGVsT2JqZWN0cyA9IGRhdGFNb2RlbE9iamVjdHMuc2xpY2UoMCwgc3RhcnRpbmdJbmRleCk7XG5cdFx0XHR0YXJnZXRFbnRpdHlTZXRMb2NhdGlvbi5zdGFydGluZ0VudGl0eVNldCA9IHJvb3RFbnRpdHlTZXQ7XG5cdFx0XHR0YXJnZXRFbnRpdHlTZXRMb2NhdGlvbi5uYXZpZ2F0aW9uUHJvcGVydGllcyA9IHJlcXVpcmVkRGF0YU1vZGVsT2JqZWN0c1xuXHRcdFx0XHQuZmlsdGVyKGlzTmF2aWdhdGlvblByb3BlcnR5KVxuXHRcdFx0XHQuY29uY2F0KHRhcmdldEVudGl0eVNldExvY2F0aW9uLm5hdmlnYXRpb25Qcm9wZXJ0aWVzIGFzIE5hdmlnYXRpb25Qcm9wZXJ0eVtdKTtcblx0XHR9XG5cdH1cblx0Y29uc3Qgb3V0RGF0YU1vZGVsUGF0aCA9IHtcblx0XHRzdGFydGluZ0VudGl0eVNldDogcm9vdEVudGl0eVNldCxcblx0XHR0YXJnZXRFbnRpdHlTZXQ6IGN1cnJlbnRFbnRpdHlTZXQsXG5cdFx0dGFyZ2V0RW50aXR5VHlwZTogY3VycmVudEVudGl0eVR5cGUsXG5cdFx0dGFyZ2V0T2JqZWN0OiBtZXRhTW9kZWxDb250ZXh0LnRhcmdldCxcblx0XHRuYXZpZ2F0aW9uUHJvcGVydGllcyxcblx0XHRjb250ZXh0TG9jYXRpb246IHRhcmdldEVudGl0eVNldExvY2F0aW9uLFxuXHRcdGNvbnZlcnRlZFR5cGVzOiBjb252ZXJ0ZWRUeXBlc1xuXHR9O1xuXHRpZiAoIWlzU2VydmljZU9iamVjdChvdXREYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCkgJiYgb25seVNlcnZpY2VPYmplY3RzKSB7XG5cdFx0b3V0RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QgPSBpc1NlcnZpY2VPYmplY3QoY3VycmVudE9iamVjdCkgPyBjdXJyZW50T2JqZWN0IDogdW5kZWZpbmVkO1xuXHR9XG5cdGlmICghb3V0RGF0YU1vZGVsUGF0aC5jb250ZXh0TG9jYXRpb24pIHtcblx0XHRvdXREYXRhTW9kZWxQYXRoLmNvbnRleHRMb2NhdGlvbiA9IG91dERhdGFNb2RlbFBhdGg7XG5cdH1cblx0cmV0dXJuIG91dERhdGFNb2RlbFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxUPjtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGZldGNoZXMgdGhlIHRlY2huaWNhbCBhbmQgc2VtYW50aWMga2V5cyBvZiBlbnRpdHkgc2V0cy5cbiAqIEBwYXJhbSBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgb2JqZWN0IGNvbnRhaW5pbmcgdGVjaG5pY2FsIGFuZCBzZW1hbnRpYyBrZXlzIG9mIHRoZSBlbnRpdHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdEVudGl0eUtleXMoY29udGV4dDogT0RhdGFWNENvbnRleHQpOiB7XG5cdHRlY2huaWNhbEtleXM6IHN0cmluZ1tdO1xuXHRzZW1hbnRpY0tleXM6IHN0cmluZ1tdO1xufSB7XG5cdGNvbnN0IG1ldGFNb2RlbCA9IGNvbnRleHQ/LmdldE1vZGVsKCk/LmdldE1ldGFNb2RlbCgpO1xuXHRpZiAobWV0YU1vZGVsKSB7XG5cdFx0Y29uc3QgbWV0YVBhdGggPSBtZXRhTW9kZWwuZ2V0TWV0YVBhdGgoY29udGV4dD8uZ2V0UGF0aCgpKTtcblx0XHRjb25zdCBkYXRhTW9kZWwgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KG1ldGFQYXRoKSk7XG5cdFx0Y29uc3Qgcm9vdFNlbWFudGljS2V5cyA9IGRhdGFNb2RlbC50YXJnZXRFbnRpdHlUeXBlLmFubm90YXRpb25zLkNvbW1vbj8uU2VtYW50aWNLZXk7XG5cdFx0bGV0IHNlbWFudGljS2V5czogc3RyaW5nW10gPSBbXTtcblx0XHRpZiAocm9vdFNlbWFudGljS2V5cykge1xuXHRcdFx0c2VtYW50aWNLZXlzID0gcm9vdFNlbWFudGljS2V5cy5tYXAoKGtleSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4ga2V5LnZhbHVlO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGNvbnN0IHJvb3RUZWNobmljYWxLZXlzID0gZGF0YU1vZGVsLnRhcmdldEVudGl0eVR5cGUua2V5cztcblx0XHRsZXQgdGVjaG5pY2FsS2V5czogc3RyaW5nW10gPSBbXTtcblx0XHRpZiAocm9vdFRlY2huaWNhbEtleXMpIHtcblx0XHRcdHRlY2huaWNhbEtleXMgPSByb290VGVjaG5pY2FsS2V5cy5tYXAoKGtleSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4ga2V5Lm5hbWU7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbWFudGljS2V5czogc2VtYW50aWNLZXlzLFxuXHRcdFx0dGVjaG5pY2FsS2V5czogdGVjaG5pY2FsS2V5c1xuXHRcdH07XG5cdH1cblx0cmV0dXJuIHsgdGVjaG5pY2FsS2V5czogW10sIHNlbWFudGljS2V5czogW10gfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RNb2RlbEFuZFBhdGg8VCBleHRlbmRzIHN0cmluZyB8IHVuZGVmaW5lZD4obWV0YVBhdGg6IFQpOiB7IGlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7IHBhdGg6IFQgfSB7XG5cdGlmIChtZXRhUGF0aD8uaW5jbHVkZXMoXCI+XCIpKSB7XG5cdFx0Y29uc3QgW21vZGVsSWQsIC4uLnBhdGhdID0gbWV0YVBhdGguc3BsaXQoXCI+XCIpO1xuXHRcdGNvbnN0IHRhcmdldFBhdGggPSBwYXRoLmpvaW4oXCI+XCIpO1xuXHRcdHJldHVybiB7IGlkOiBtb2RlbElkLCBwYXRoOiB0YXJnZXRQYXRoIGFzIFQgfTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4geyBpZDogdW5kZWZpbmVkLCBwYXRoOiBtZXRhUGF0aCB9O1xuXHR9XG59XG5cbi8qKlxuICogRmV0Y2hlcyB0aGUgRGF0YU1vZGVsIE9iamVjdCBQYXRoIGZvciBhIGdpdmVuIHRhcmdldCBwYXRoLlxuICogQHBhcmFtIHRhcmdldFBhdGhcbiAqIEBwYXJhbSBtZXRhTW9kZWxcbiAqIEByZXR1cm5zIERhdGFNb2RlbCBPYmplY3QgUGF0aCBmb3IgdGFyZ2V0IHBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0c0ZvclRhcmdldFBhdGg8VD4oXG5cdHRhcmdldFBhdGg6IHN0cmluZyxcblx0bWV0YU1vZGVsPzogT0RhdGFNZXRhTW9kZWxcbik6IERhdGFNb2RlbE9iamVjdFBhdGg8VD4gfCB1bmRlZmluZWQge1xuXHRjb25zdCBtZXRhUGF0aCA9IG1ldGFNb2RlbD8uZ2V0TWV0YVBhdGgodGFyZ2V0UGF0aCk7XG5cdGNvbnN0IG1ldGFDb250ZXh0ID0gbWV0YVBhdGggPyBtZXRhTW9kZWw/LmdldENvbnRleHQobWV0YVBhdGgpIDogdW5kZWZpbmVkO1xuXHRyZXR1cm4gbWV0YUNvbnRleHQgJiYgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFDb250ZXh0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gb2YgYSB2aXJ0dWFsIHBhdGguXG4gKiBAcGFyYW0gcGF0aCBUaGUgdmlydHVhbCBwYXRoXG4gKiBAcGFyYW0gY29udmVydGVkVHlwZXMgVGhlIGNvbnZlcnRlZCBtZXRhZGF0YVxuICogQHJldHVybnMgRGF0YU1vZGVsIE9iamVjdCBQYXRoIGZvciB0YXJnZXQgcGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmlydHVhbEJpbmRpbmdFeHByZXNzaW9uKFxuXHRwYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlZFR5cGVzOiBDb252ZXJ0ZWRNZXRhZGF0YVxuKTogeyBleHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj47IHZpZXdJZD86IHN0cmluZyB9IHtcblx0Y29uc3QgdmlydHVhbEtleSA9IFwiQCR1aTUuZmUudmlydHVhbC5cIjtcblx0aWYgKHBhdGguaW5jbHVkZXModmlydHVhbEtleSkpIHtcblx0XHRjb25zdCBpZCA9IE9iamVjdC5rZXlzKGNvbnZlcnRlZE1ldGFNb2RlbE1hcCkuZmluZCgoaWQpID0+IGNvbnZlcnRlZE1ldGFNb2RlbE1hcFtpZF0gPT09IGNvbnZlcnRlZFR5cGVzKTtcblx0XHRpZiAoaWQgJiYgdmlydHVhbFByb3BlcnRpZXNNYXBbaWRdKSB7XG5cdFx0XHRjb25zdCByZWxhdGl2ZVBhdGggPSBwYXRoLnN1YnN0cmluZygwLCBwYXRoLmluZGV4T2YoY29udmVydGVkVHlwZXMubmFtZXNwYWNlKSk7XG5cdFx0XHRjb25zdCBwYXRoSW5mb3MgPSBwYXRoLnNwbGl0KHZpcnR1YWxLZXkpO1xuXHRcdFx0aWYgKHBhdGhJbmZvcy5sZW5ndGggPT09IDIpIHtcblx0XHRcdFx0Y29uc3QgbWV0aG9kID0gcGF0aEluZm9zWzFdO1xuXHRcdFx0XHRjb25zdCB2aXJ0dWFsUHJvcGVydHkgPSBwYXRoSW5mb3NbMF0ucmVwbGFjZShyZWxhdGl2ZVBhdGgsIFwiXCIpO1xuXHRcdFx0XHRjb25zdCB2aXJ0dWFsUHJvcGVydHlGbiA9IHZpcnR1YWxQcm9wZXJ0aWVzTWFwW2lkXVttZXRob2RdO1xuXHRcdFx0XHRpZiAodmlydHVhbFByb3BlcnR5Rm4/LmZuKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdGV4cHJlc3Npb246IHZpcnR1YWxQcm9wZXJ0eUZuLmZuKHZpcnR1YWxQcm9wZXJ0eSwgY29udmVydGVkVHlwZXMsIHJlbGF0aXZlUGF0aCksXG5cdFx0XHRcdFx0XHR2aWV3SWQ6IHZpcnR1YWxQcm9wZXJ0eUZuLnZpZXdJZFxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHsgZXhwcmVzc2lvbjogY29uc3RhbnQodW5kZWZpbmVkKSB9O1xuXHR9XG5cdHJldHVybiB7IGV4cHJlc3Npb246IGNvbnN0YW50KHVuZGVmaW5lZCkgfTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gb2YgYSBjcml0aWNhbGl0eS5cbiAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHBvaW50aW5nIHRvIGEgRGF0YUZpZWxkIG9yIERhdGFQb2ludFxuICogQHBhcmFtIGNvbnZlcnRlZFR5cGVzIFRoZSBjb252ZXJ0ZWQgbWV0YWRhdGFcbiAqIEBwYXJhbSByZWxhdGl2ZVBhdGggVGhlIHJlbGF0aXZlIHBhdGggb2YgdGhlIGJpbmRpbmcgZXhwcmVzc2lvblxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBvZiB0aGUgY3JpdGljYWxpdHlcbiAqL1xuZnVuY3Rpb24gZ2V0VmlydHVhbENyaXRpY2FsaXR5RXhwcmVzc2lvbihcblx0cGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZWRUeXBlczogQ29udmVydGVkTWV0YWRhdGEsXG5cdHJlbGF0aXZlUGF0aD86IHN0cmluZ1xuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+IHtcblx0Y29uc3QgY3JpdGljYWxpdHlQcm9wZXJ0eSA9IGNvbnZlcnRlZFR5cGVzLnJlc29sdmVQYXRoPERhdGFQb2ludFR5cGUgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzPihwYXRoKT8udGFyZ2V0Py5Dcml0aWNhbGl0eTtcblx0Y29uc3QgY3JpdGljYWxpdHlFeHByZXNzaW9uID0gY3JpdGljYWxpdHlQcm9wZXJ0eVxuXHRcdD8gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKFxuXHRcdFx0XHRjcml0aWNhbGl0eVByb3BlcnR5IGFzIHVua25vd24gYXMgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8UHJpbWl0aXZlVHlwZT4sXG5cdFx0XHRcdFtdLFxuXHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdChiaW5kaW5nUGF0aDogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHJlbGF0aXZlUGF0aCA/IGAke3JlbGF0aXZlUGF0aH0ke2JpbmRpbmdQYXRofWAgOiBiaW5kaW5nUGF0aDtcblx0XHRcdFx0fVxuXHRcdCAgKVxuXHRcdDogdW5kZWZpbmVkO1xuXHRpZiAoIWNyaXRpY2FsaXR5RXhwcmVzc2lvbikge1xuXHRcdHJldHVybiBjb25zdGFudCh1bmRlZmluZWQpO1xuXHR9XG5cdHJldHVybiBmb3JtYXRSZXN1bHQoW2NyaXRpY2FsaXR5RXhwcmVzc2lvbl0sIFwiLl9mb3JtYXR0ZXJzLkNyaXRpY2FsaXR5Rm9ybWF0dGVyI2dldENyaXRpY2FsaXR5XCIpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBa0lBLFNBQVNBLGtCQUFrQkEsQ0FDMUJDLGdCQUFxQyxFQUNyQ0MsV0FBbUIsRUFDbkJDLGFBQXFCLEVBQ3JCQyxnQkFBZ0QsRUFDaERDLGFBQXNDLEVBQ0E7SUFDdEMsSUFBSUMsS0FBa0I7SUFDdEIsSUFBSUwsZ0JBQWdCLEtBQUssSUFBSSxFQUFFO01BQzlCSyxLQUFLLEdBQUc7UUFBRUMsSUFBSSxFQUFFO01BQU8sQ0FBQztJQUN6QixDQUFDLE1BQU0sSUFBSSxPQUFPTixnQkFBZ0IsS0FBSyxRQUFRLEVBQUU7TUFDaERLLEtBQUssR0FBRztRQUFFQyxJQUFJLEVBQUUsUUFBUTtRQUFF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