footprintjs 10.0.1 → 10.2.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 (368) hide show
  1. package/AGENTS.md +2 -1
  2. package/CLAUDE.md +61 -7
  3. package/README.md +136 -312
  4. package/dist/esm/index.d.ts +62 -2
  5. package/dist/esm/index.js +13 -6
  6. package/dist/esm/lib/attempt/anySignal.d.ts +19 -0
  7. package/dist/esm/lib/attempt/anySignal.js +39 -0
  8. package/dist/esm/lib/attempt/call.d.ts +88 -0
  9. package/dist/esm/lib/attempt/call.js +129 -0
  10. package/dist/esm/lib/attempt/category.d.ts +37 -0
  11. package/dist/esm/lib/attempt/category.js +131 -0
  12. package/dist/esm/lib/attempt/correlation.d.ts +95 -0
  13. package/dist/esm/lib/attempt/correlation.js +178 -0
  14. package/dist/esm/lib/attempt/deadline.d.ts +44 -0
  15. package/dist/esm/lib/attempt/deadline.js +101 -0
  16. package/dist/esm/lib/attempt/decision.d.ts +52 -0
  17. package/dist/esm/lib/attempt/decision.js +134 -0
  18. package/dist/esm/lib/attempt/effect.d.ts +76 -0
  19. package/dist/esm/lib/attempt/effect.js +160 -0
  20. package/dist/esm/lib/attempt/errors.d.ts +41 -0
  21. package/dist/esm/lib/attempt/errors.js +44 -0
  22. package/dist/esm/lib/attempt/index.d.ts +18 -0
  23. package/dist/esm/lib/attempt/index.js +15 -0
  24. package/dist/esm/lib/attempt/name.d.ts +21 -0
  25. package/dist/esm/lib/attempt/name.js +43 -0
  26. package/dist/esm/lib/attempt/observed.d.ts +66 -0
  27. package/dist/esm/lib/attempt/observed.js +171 -0
  28. package/dist/esm/lib/attempt/policy.d.ts +45 -0
  29. package/dist/esm/lib/attempt/policy.js +83 -0
  30. package/dist/esm/lib/attempt/record.d.ts +11 -0
  31. package/dist/esm/lib/attempt/record.js +24 -0
  32. package/dist/esm/lib/attempt/retryLoopContext.d.ts +18 -0
  33. package/dist/esm/lib/attempt/retryLoopContext.js +24 -0
  34. package/dist/esm/lib/attempt/retryLoopTypes.d.ts +18 -0
  35. package/dist/esm/lib/attempt/retryLoopTypes.js +2 -0
  36. package/dist/esm/lib/attempt/runner.d.ts +157 -0
  37. package/dist/esm/lib/attempt/runner.js +523 -0
  38. package/dist/esm/lib/attempt/standalone.d.ts +47 -0
  39. package/dist/esm/lib/attempt/standalone.js +126 -0
  40. package/dist/esm/lib/attempt/types.d.ts +453 -0
  41. package/dist/esm/lib/attempt/types.js +16 -0
  42. package/dist/esm/lib/budget/index.d.ts +9 -0
  43. package/dist/esm/lib/budget/index.js +9 -0
  44. package/dist/esm/lib/budget/timeBudget.d.ts +136 -0
  45. package/dist/esm/lib/budget/timeBudget.js +666 -0
  46. package/dist/esm/lib/builder/FlowChartBuilder.d.ts +88 -3
  47. package/dist/esm/lib/builder/FlowChartBuilder.js +199 -9
  48. package/dist/esm/lib/builder/retryLoop.d.ts +56 -0
  49. package/dist/esm/lib/builder/retryLoop.js +283 -0
  50. package/dist/esm/lib/builder/types.d.ts +35 -1
  51. package/dist/esm/lib/builder/types.js +1 -1
  52. package/dist/esm/lib/decide/decide.js +2 -2
  53. package/dist/esm/lib/decide/index.d.ts +1 -1
  54. package/dist/esm/lib/decide/index.js +2 -2
  55. package/dist/esm/lib/decide/types.d.ts +3 -0
  56. package/dist/esm/lib/decide/types.js +1 -8
  57. package/dist/esm/lib/engine/graph/StageNode.d.ts +11 -1
  58. package/dist/esm/lib/engine/graph/StageNode.js +1 -1
  59. package/dist/esm/lib/engine/graph/prefixNodeTree.js +5 -1
  60. package/dist/esm/lib/engine/handlers/ChildrenExecutor.js +36 -6
  61. package/dist/esm/lib/engine/handlers/DeciderHandler.js +9 -5
  62. package/dist/esm/lib/engine/handlers/ResumeEntry.js +3 -1
  63. package/dist/esm/lib/engine/handlers/SelectorHandler.js +6 -5
  64. package/dist/esm/lib/engine/handlers/StageRunner.d.ts +8 -1
  65. package/dist/esm/lib/engine/handlers/StageRunner.js +36 -9
  66. package/dist/esm/lib/engine/handlers/SubflowExecutor.js +24 -5
  67. package/dist/esm/lib/engine/handlers/commitStage.d.ts +7 -0
  68. package/dist/esm/lib/engine/handlers/commitStage.js +22 -4
  69. package/dist/esm/lib/engine/handlers/stageError.d.ts +9 -0
  70. package/dist/esm/lib/engine/handlers/stageError.js +23 -1
  71. package/dist/esm/lib/engine/index.d.ts +2 -2
  72. package/dist/esm/lib/engine/index.js +1 -1
  73. package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +27 -13
  74. package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.js +68 -40
  75. package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.d.ts +4 -1
  76. package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.js +19 -2
  77. package/dist/esm/lib/engine/narrative/NarrativeFlowRecorder.d.ts +22 -3
  78. package/dist/esm/lib/engine/narrative/NarrativeFlowRecorder.js +61 -9
  79. package/dist/esm/lib/engine/narrative/NullControlFlowNarrativeGenerator.d.ts +1 -0
  80. package/dist/esm/lib/engine/narrative/NullControlFlowNarrativeGenerator.js +2 -1
  81. package/dist/esm/lib/engine/narrative/formatting/sentences.d.ts +23 -0
  82. package/dist/esm/lib/engine/narrative/formatting/sentences.js +127 -1
  83. package/dist/esm/lib/engine/narrative/index.d.ts +2 -2
  84. package/dist/esm/lib/engine/narrative/index.js +1 -1
  85. package/dist/esm/lib/engine/narrative/narrativeTypes.d.ts +27 -21
  86. package/dist/esm/lib/engine/narrative/narrativeTypes.js +1 -1
  87. package/dist/esm/lib/engine/narrative/recorders/ManifestFlowRecorder.d.ts +45 -2
  88. package/dist/esm/lib/engine/narrative/recorders/ManifestFlowRecorder.js +55 -2
  89. package/dist/esm/lib/engine/narrative/recorders/index.d.ts +1 -1
  90. package/dist/esm/lib/engine/narrative/recorders/index.js +1 -1
  91. package/dist/esm/lib/engine/narrative/types.d.ts +74 -5
  92. package/dist/esm/lib/engine/narrative/types.js +1 -1
  93. package/dist/esm/lib/engine/traversal/FlowchartTraverser.d.ts +59 -19
  94. package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +194 -118
  95. package/dist/esm/lib/engine/traversalContext.d.ts +7 -2
  96. package/dist/esm/lib/engine/traversalContext.js +6 -3
  97. package/dist/esm/lib/engine/types.d.ts +52 -57
  98. package/dist/esm/lib/engine/types.js +1 -1
  99. package/dist/esm/lib/errors/terminalFailure.d.ts +29 -0
  100. package/dist/esm/lib/errors/terminalFailure.js +60 -0
  101. package/dist/esm/lib/{decide → filter}/evaluator.d.ts +7 -2
  102. package/dist/esm/lib/filter/evaluator.js +135 -0
  103. package/dist/esm/lib/ids/idempotencyKey.d.ts +14 -0
  104. package/dist/esm/lib/ids/idempotencyKey.js +24 -0
  105. package/dist/esm/lib/memory/StageContext.d.ts +123 -3
  106. package/dist/esm/lib/memory/StageContext.js +245 -4
  107. package/dist/esm/lib/memory/attention.d.ts +26 -0
  108. package/dist/esm/lib/memory/attention.js +171 -0
  109. package/dist/esm/lib/memory/borrowedMutation.d.ts +8 -0
  110. package/dist/esm/lib/memory/borrowedMutation.js +14 -1
  111. package/dist/esm/lib/memory/frameTypes.d.ts +38 -0
  112. package/dist/esm/lib/memory/frameTypes.js +3 -1
  113. package/dist/esm/lib/memory/redaction.d.ts +12 -0
  114. package/dist/esm/lib/memory/redaction.js +54 -5
  115. package/dist/esm/lib/pause/record.js +10 -1
  116. package/dist/esm/lib/pause/types.d.ts +19 -0
  117. package/dist/esm/lib/pause/types.js +17 -1
  118. package/dist/esm/lib/reactive/createTypedScope.js +3 -1
  119. package/dist/esm/lib/reactive/types.d.ts +36 -4
  120. package/dist/esm/lib/reactive/types.js +3 -1
  121. package/dist/esm/lib/recorder/AttemptRecorder.d.ts +141 -0
  122. package/dist/esm/lib/recorder/AttemptRecorder.js +412 -0
  123. package/dist/esm/lib/recorder/ControlDepRecorder.d.ts +36 -2
  124. package/dist/esm/lib/recorder/ControlDepRecorder.js +50 -2
  125. package/dist/esm/lib/recorder/EmitRecorder.d.ts +3 -0
  126. package/dist/esm/lib/recorder/EmitRecorder.js +1 -1
  127. package/dist/esm/lib/recorder/InOutRecorder.d.ts +37 -1
  128. package/dist/esm/lib/recorder/InOutRecorder.js +75 -6
  129. package/dist/esm/lib/recorder/QualityRecorder.d.ts +32 -5
  130. package/dist/esm/lib/recorder/QualityRecorder.js +87 -29
  131. package/dist/esm/lib/recorder/TopologyRecorder.d.ts +35 -5
  132. package/dist/esm/lib/recorder/TopologyRecorder.js +76 -2
  133. package/dist/esm/lib/recorder/attemptMetricRows.d.ts +11 -0
  134. package/dist/esm/lib/recorder/attemptMetricRows.js +202 -0
  135. package/dist/esm/lib/recorder/attemptMetrics.d.ts +7 -0
  136. package/dist/esm/lib/recorder/attemptMetrics.js +165 -0
  137. package/dist/esm/lib/recorder/attemptMetricsTypes.d.ts +114 -0
  138. package/dist/esm/lib/recorder/attemptMetricsTypes.js +2 -0
  139. package/dist/esm/lib/recorder/attemptOTel.d.ts +78 -0
  140. package/dist/esm/lib/recorder/attemptOTel.js +107 -0
  141. package/dist/esm/lib/recorder/attemptSeries.d.ts +81 -0
  142. package/dist/esm/lib/recorder/attemptSeries.js +103 -0
  143. package/dist/esm/lib/recorder/hooks.d.ts +9 -0
  144. package/dist/esm/lib/recorder/hooks.js +4 -1
  145. package/dist/esm/lib/runner/DeferredObserverTier.js +13 -1
  146. package/dist/esm/lib/runner/ExecutionRuntime.d.ts +54 -6
  147. package/dist/esm/lib/runner/ExecutionRuntime.js +57 -5
  148. package/dist/esm/lib/runner/FlowChartExecutor.d.ts +46 -2
  149. package/dist/esm/lib/runner/FlowChartExecutor.js +330 -101
  150. package/dist/esm/lib/runner/RunnableChart.d.ts +6 -0
  151. package/dist/esm/lib/runner/RunnableChart.js +5 -1
  152. package/dist/esm/lib/runner/attach.d.ts +2 -1
  153. package/dist/esm/lib/runner/attach.js +8 -2
  154. package/dist/esm/lib/runner/checkpoint.js +3 -1
  155. package/dist/esm/lib/runner/deadline.d.ts +42 -0
  156. package/dist/esm/lib/runner/deadline.js +90 -0
  157. package/dist/esm/lib/runner/index.d.ts +3 -1
  158. package/dist/esm/lib/runner/index.js +2 -1
  159. package/dist/esm/lib/runner/options.d.ts +17 -0
  160. package/dist/esm/lib/runner/options.js +3 -1
  161. package/dist/esm/lib/runner/recordSink.d.ts +128 -0
  162. package/dist/esm/lib/runner/recordSink.js +296 -0
  163. package/dist/esm/lib/runner/resume.d.ts +3 -0
  164. package/dist/esm/lib/runner/resume.js +22 -2
  165. package/dist/esm/lib/runner/snapshot.d.ts +2 -2
  166. package/dist/esm/lib/runner/snapshot.js +6 -2
  167. package/dist/esm/lib/scope/ScopeFacade.d.ts +118 -4
  168. package/dist/esm/lib/scope/ScopeFacade.js +304 -7
  169. package/dist/esm/lib/scope/recorders/DebugRecorder.d.ts +17 -3
  170. package/dist/esm/lib/scope/recorders/DebugRecorder.js +79 -13
  171. package/dist/esm/lib/scope/recorders/MetricRecorder.d.ts +10 -0
  172. package/dist/esm/lib/scope/recorders/MetricRecorder.js +15 -2
  173. package/dist/esm/lib/scope/runtime.d.ts +3 -0
  174. package/dist/esm/lib/scope/runtime.js +1 -1
  175. package/dist/esm/lib/scope/types.d.ts +6 -0
  176. package/dist/esm/lib/scope/types.js +1 -1
  177. package/dist/esm/lib/sinks/fileSink.d.ts +135 -0
  178. package/dist/esm/lib/sinks/fileSink.js +387 -0
  179. package/dist/esm/recorders.d.ts +8 -2
  180. package/dist/esm/recorders.js +7 -1
  181. package/dist/esm/sinks.d.ts +23 -0
  182. package/dist/esm/sinks.js +23 -0
  183. package/dist/esm/trace.d.ts +2 -2
  184. package/dist/esm/trace.js +1 -1
  185. package/dist/index.js +77 -60
  186. package/dist/lib/attempt/anySignal.js +43 -0
  187. package/dist/lib/attempt/call.js +134 -0
  188. package/dist/lib/attempt/category.js +136 -0
  189. package/dist/lib/attempt/correlation.js +186 -0
  190. package/dist/lib/attempt/deadline.js +112 -0
  191. package/dist/lib/attempt/decision.js +139 -0
  192. package/dist/lib/attempt/effect.js +174 -0
  193. package/dist/lib/attempt/errors.js +49 -0
  194. package/dist/lib/attempt/index.js +26 -0
  195. package/dist/lib/attempt/name.js +48 -0
  196. package/dist/lib/attempt/observed.js +177 -0
  197. package/dist/lib/attempt/policy.js +92 -0
  198. package/dist/lib/attempt/record.js +29 -0
  199. package/dist/lib/attempt/retryLoopContext.js +31 -0
  200. package/dist/lib/attempt/retryLoopTypes.js +3 -0
  201. package/dist/lib/attempt/runner.js +530 -0
  202. package/dist/lib/attempt/standalone.js +130 -0
  203. package/dist/lib/attempt/types.js +17 -0
  204. package/dist/lib/budget/index.js +17 -0
  205. package/dist/lib/budget/timeBudget.js +674 -0
  206. package/dist/lib/builder/FlowChartBuilder.js +199 -9
  207. package/dist/lib/builder/retryLoop.js +287 -0
  208. package/dist/lib/builder/types.js +1 -1
  209. package/dist/lib/decide/decide.js +2 -2
  210. package/dist/lib/decide/index.js +2 -2
  211. package/dist/lib/decide/types.js +1 -8
  212. package/dist/lib/engine/graph/StageNode.js +1 -1
  213. package/dist/lib/engine/graph/prefixNodeTree.js +5 -1
  214. package/dist/lib/engine/handlers/ChildrenExecutor.js +36 -6
  215. package/dist/lib/engine/handlers/DeciderHandler.js +7 -3
  216. package/dist/lib/engine/handlers/ResumeEntry.js +3 -1
  217. package/dist/lib/engine/handlers/SelectorHandler.js +4 -3
  218. package/dist/lib/engine/handlers/StageRunner.js +36 -9
  219. package/dist/lib/engine/handlers/SubflowExecutor.js +24 -5
  220. package/dist/lib/engine/handlers/commitStage.js +24 -5
  221. package/dist/lib/engine/handlers/stageError.js +26 -2
  222. package/dist/lib/engine/index.js +1 -1
  223. package/dist/lib/engine/narrative/CombinedNarrativeRecorder.js +67 -39
  224. package/dist/lib/engine/narrative/FlowRecorderDispatcher.js +19 -2
  225. package/dist/lib/engine/narrative/NarrativeFlowRecorder.js +60 -8
  226. package/dist/lib/engine/narrative/NullControlFlowNarrativeGenerator.js +2 -1
  227. package/dist/lib/engine/narrative/formatting/sentences.js +131 -2
  228. package/dist/lib/engine/narrative/index.js +1 -1
  229. package/dist/lib/engine/narrative/narrativeTypes.js +1 -1
  230. package/dist/lib/engine/narrative/recorders/ManifestFlowRecorder.js +55 -2
  231. package/dist/lib/engine/narrative/recorders/index.js +1 -1
  232. package/dist/lib/engine/narrative/types.js +1 -1
  233. package/dist/lib/engine/traversal/FlowchartTraverser.js +192 -116
  234. package/dist/lib/engine/traversalContext.js +6 -3
  235. package/dist/lib/engine/types.js +1 -1
  236. package/dist/lib/errors/terminalFailure.js +64 -0
  237. package/dist/lib/filter/evaluator.js +139 -0
  238. package/dist/lib/ids/idempotencyKey.js +28 -0
  239. package/dist/lib/memory/StageContext.js +246 -5
  240. package/dist/lib/memory/attention.js +175 -0
  241. package/dist/lib/memory/borrowedMutation.js +16 -2
  242. package/dist/lib/memory/frameTypes.js +3 -1
  243. package/dist/lib/memory/redaction.js +54 -5
  244. package/dist/lib/pause/record.js +10 -1
  245. package/dist/lib/pause/types.js +17 -1
  246. package/dist/lib/reactive/createTypedScope.js +3 -1
  247. package/dist/lib/reactive/types.js +3 -1
  248. package/dist/lib/recorder/AttemptRecorder.js +417 -0
  249. package/dist/lib/recorder/ControlDepRecorder.js +50 -2
  250. package/dist/lib/recorder/EmitRecorder.js +1 -1
  251. package/dist/lib/recorder/InOutRecorder.js +75 -6
  252. package/dist/lib/recorder/QualityRecorder.js +87 -29
  253. package/dist/lib/recorder/TopologyRecorder.js +76 -2
  254. package/dist/lib/recorder/attemptMetricRows.js +209 -0
  255. package/dist/lib/recorder/attemptMetrics.js +174 -0
  256. package/dist/lib/recorder/attemptMetricsTypes.js +3 -0
  257. package/dist/lib/recorder/attemptOTel.js +111 -0
  258. package/dist/lib/recorder/attemptSeries.js +113 -0
  259. package/dist/lib/recorder/hooks.js +4 -1
  260. package/dist/lib/runner/DeferredObserverTier.js +13 -1
  261. package/dist/lib/runner/ExecutionRuntime.js +57 -5
  262. package/dist/lib/runner/FlowChartExecutor.js +330 -101
  263. package/dist/lib/runner/RunnableChart.js +5 -1
  264. package/dist/lib/runner/attach.js +8 -2
  265. package/dist/lib/runner/checkpoint.js +3 -1
  266. package/dist/lib/runner/deadline.js +94 -0
  267. package/dist/lib/runner/index.js +4 -2
  268. package/dist/lib/runner/options.js +3 -1
  269. package/dist/lib/runner/recordSink.js +302 -0
  270. package/dist/lib/runner/resume.js +22 -2
  271. package/dist/lib/runner/snapshot.js +6 -2
  272. package/dist/lib/scope/ScopeFacade.js +303 -6
  273. package/dist/lib/scope/recorders/DebugRecorder.js +79 -13
  274. package/dist/lib/scope/recorders/MetricRecorder.js +15 -2
  275. package/dist/lib/scope/runtime.js +1 -1
  276. package/dist/lib/scope/types.js +1 -1
  277. package/dist/lib/sinks/fileSink.js +392 -0
  278. package/dist/recorders.js +10 -2
  279. package/dist/sinks.js +32 -0
  280. package/dist/trace.js +1 -1
  281. package/dist/types/index.d.ts +62 -2
  282. package/dist/types/lib/attempt/anySignal.d.ts +19 -0
  283. package/dist/types/lib/attempt/call.d.ts +88 -0
  284. package/dist/types/lib/attempt/category.d.ts +37 -0
  285. package/dist/types/lib/attempt/correlation.d.ts +95 -0
  286. package/dist/types/lib/attempt/deadline.d.ts +44 -0
  287. package/dist/types/lib/attempt/decision.d.ts +52 -0
  288. package/dist/types/lib/attempt/effect.d.ts +76 -0
  289. package/dist/types/lib/attempt/errors.d.ts +41 -0
  290. package/dist/types/lib/attempt/index.d.ts +18 -0
  291. package/dist/types/lib/attempt/name.d.ts +21 -0
  292. package/dist/types/lib/attempt/observed.d.ts +66 -0
  293. package/dist/types/lib/attempt/policy.d.ts +45 -0
  294. package/dist/types/lib/attempt/record.d.ts +11 -0
  295. package/dist/types/lib/attempt/retryLoopContext.d.ts +18 -0
  296. package/dist/types/lib/attempt/retryLoopTypes.d.ts +18 -0
  297. package/dist/types/lib/attempt/runner.d.ts +157 -0
  298. package/dist/types/lib/attempt/standalone.d.ts +47 -0
  299. package/dist/types/lib/attempt/types.d.ts +453 -0
  300. package/dist/types/lib/budget/index.d.ts +9 -0
  301. package/dist/types/lib/budget/timeBudget.d.ts +136 -0
  302. package/dist/types/lib/builder/FlowChartBuilder.d.ts +88 -3
  303. package/dist/types/lib/builder/retryLoop.d.ts +56 -0
  304. package/dist/types/lib/builder/types.d.ts +35 -1
  305. package/dist/types/lib/decide/index.d.ts +1 -1
  306. package/dist/types/lib/decide/types.d.ts +3 -0
  307. package/dist/types/lib/engine/graph/StageNode.d.ts +11 -1
  308. package/dist/types/lib/engine/handlers/StageRunner.d.ts +8 -1
  309. package/dist/types/lib/engine/handlers/commitStage.d.ts +7 -0
  310. package/dist/types/lib/engine/handlers/stageError.d.ts +9 -0
  311. package/dist/types/lib/engine/index.d.ts +2 -2
  312. package/dist/types/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +27 -13
  313. package/dist/types/lib/engine/narrative/FlowRecorderDispatcher.d.ts +4 -1
  314. package/dist/types/lib/engine/narrative/NarrativeFlowRecorder.d.ts +22 -3
  315. package/dist/types/lib/engine/narrative/NullControlFlowNarrativeGenerator.d.ts +1 -0
  316. package/dist/types/lib/engine/narrative/formatting/sentences.d.ts +23 -0
  317. package/dist/types/lib/engine/narrative/index.d.ts +2 -2
  318. package/dist/types/lib/engine/narrative/narrativeTypes.d.ts +27 -21
  319. package/dist/types/lib/engine/narrative/recorders/ManifestFlowRecorder.d.ts +45 -2
  320. package/dist/types/lib/engine/narrative/recorders/index.d.ts +1 -1
  321. package/dist/types/lib/engine/narrative/types.d.ts +74 -5
  322. package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +59 -19
  323. package/dist/types/lib/engine/traversalContext.d.ts +7 -2
  324. package/dist/types/lib/engine/types.d.ts +52 -57
  325. package/dist/types/lib/errors/terminalFailure.d.ts +29 -0
  326. package/dist/types/lib/{decide → filter}/evaluator.d.ts +7 -2
  327. package/dist/types/lib/ids/idempotencyKey.d.ts +14 -0
  328. package/dist/types/lib/memory/StageContext.d.ts +123 -3
  329. package/dist/types/lib/memory/attention.d.ts +26 -0
  330. package/dist/types/lib/memory/borrowedMutation.d.ts +8 -0
  331. package/dist/types/lib/memory/frameTypes.d.ts +38 -0
  332. package/dist/types/lib/memory/redaction.d.ts +12 -0
  333. package/dist/types/lib/pause/types.d.ts +19 -0
  334. package/dist/types/lib/reactive/types.d.ts +36 -4
  335. package/dist/types/lib/recorder/AttemptRecorder.d.ts +141 -0
  336. package/dist/types/lib/recorder/ControlDepRecorder.d.ts +36 -2
  337. package/dist/types/lib/recorder/EmitRecorder.d.ts +3 -0
  338. package/dist/types/lib/recorder/InOutRecorder.d.ts +37 -1
  339. package/dist/types/lib/recorder/QualityRecorder.d.ts +32 -5
  340. package/dist/types/lib/recorder/TopologyRecorder.d.ts +35 -5
  341. package/dist/types/lib/recorder/attemptMetricRows.d.ts +11 -0
  342. package/dist/types/lib/recorder/attemptMetrics.d.ts +7 -0
  343. package/dist/types/lib/recorder/attemptMetricsTypes.d.ts +114 -0
  344. package/dist/types/lib/recorder/attemptOTel.d.ts +78 -0
  345. package/dist/types/lib/recorder/attemptSeries.d.ts +81 -0
  346. package/dist/types/lib/recorder/hooks.d.ts +9 -0
  347. package/dist/types/lib/runner/ExecutionRuntime.d.ts +54 -6
  348. package/dist/types/lib/runner/FlowChartExecutor.d.ts +46 -2
  349. package/dist/types/lib/runner/RunnableChart.d.ts +6 -0
  350. package/dist/types/lib/runner/attach.d.ts +2 -1
  351. package/dist/types/lib/runner/deadline.d.ts +42 -0
  352. package/dist/types/lib/runner/index.d.ts +3 -1
  353. package/dist/types/lib/runner/options.d.ts +17 -0
  354. package/dist/types/lib/runner/recordSink.d.ts +128 -0
  355. package/dist/types/lib/runner/resume.d.ts +3 -0
  356. package/dist/types/lib/runner/snapshot.d.ts +2 -2
  357. package/dist/types/lib/scope/ScopeFacade.d.ts +118 -4
  358. package/dist/types/lib/scope/recorders/DebugRecorder.d.ts +17 -3
  359. package/dist/types/lib/scope/recorders/MetricRecorder.d.ts +10 -0
  360. package/dist/types/lib/scope/runtime.d.ts +3 -0
  361. package/dist/types/lib/scope/types.d.ts +6 -0
  362. package/dist/types/lib/sinks/fileSink.d.ts +135 -0
  363. package/dist/types/recorders.d.ts +8 -2
  364. package/dist/types/sinks.d.ts +23 -0
  365. package/dist/types/trace.d.ts +2 -2
  366. package/package.json +20 -6
  367. package/dist/esm/lib/decide/evaluator.js +0 -130
  368. package/dist/lib/decide/evaluator.js +0 -134
@@ -110,6 +110,19 @@ export class FlowRecorderDispatcher {
110
110
  const event = { stageName, message: errorMessage, structuredError, traversalContext, channel: 'flow' };
111
111
  fire(this.recorders, 'onError', event, FLOW_FAILURE);
112
112
  }
113
+ onAttempt(stageName, stageId, record, structuredError, traversalContext) {
114
+ if (this.recorders.length === 0)
115
+ return;
116
+ const event = {
117
+ stageName,
118
+ stageId,
119
+ record,
120
+ ...(structuredError !== undefined && { structuredError }),
121
+ traversalContext,
122
+ channel: 'flow',
123
+ };
124
+ fire(this.recorders, 'onAttempt', event, FLOW_FAILURE);
125
+ }
113
126
  onStageRetry(stageName, stageId, attempt, maxAttempts, delayMs, structuredError, traversalContext) {
114
127
  if (this.recorders.length === 0)
115
128
  return;
@@ -163,10 +176,14 @@ export class FlowRecorderDispatcher {
163
176
  const event = { payload: output, traversalContext };
164
177
  fire(this.recorders, 'onRunEnd', event, FLOW_FAILURE);
165
178
  }
166
- onRunFailed(error, traversalContext) {
179
+ onRunFailed(error, traversalContext, failure) {
167
180
  if (this.recorders.length === 0)
168
181
  return;
169
182
  const event = { structuredError: error, traversalContext };
183
+ // Keep the new safe projection intact across recorder fan-out, without
184
+ // changing the established mutability of the other event fields.
185
+ if (failure)
186
+ Object.defineProperty(event, 'failure', { value: failure, enumerable: true });
170
187
  fire(this.recorders, 'onRunFailed', event, FLOW_FAILURE);
171
188
  }
172
189
  /**
@@ -179,4 +196,4 @@ export class FlowRecorderDispatcher {
179
196
  return narrative?.getSentences() ?? [];
180
197
  }
181
198
  }
182
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvd1JlY29yZGVyRGlzcGF0Y2hlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZW5naW5lL25hcnJhdGl2ZS9GbG93UmVjb3JkZXJEaXNwYXRjaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztHQVdHO0FBSUgsT0FBTyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQWE5RCxtR0FBbUc7QUFDbkcsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFFN0QsTUFBTSxPQUFPLHNCQUFzQjtJQUN6QixTQUFTLEdBQW1CLEVBQUUsQ0FBQztJQUV2QyxzRkFBc0Y7SUFDdEYsTUFBTSxDQUFDLFFBQXNCO1FBQzNCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxrREFBa0Q7SUFDbEQsTUFBTSxDQUFDLEVBQVU7UUFDZixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxzREFBc0Q7SUFDdEQsaUJBQWlCO1FBQ2YsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxrR0FBa0c7SUFDbEcsZUFBZSxDQUF3QyxFQUFVO1FBQy9ELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFrQixDQUFDO0lBQ2xFLENBQUM7SUFFRCw2RUFBNkU7SUFFN0UsZUFBZSxDQUNiLFNBQWlCLEVBQ2pCLFdBQStCLEVBQy9CLGdCQUE4QyxFQUM5QyxTQUFvQjtRQUVwQixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPO1FBQ3hDLE1BQU0sS0FBSyxHQUFtQixFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLENBQUM7UUFDdEYsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxNQUFNLENBQUMsU0FBaUIsRUFBRSxPQUFlLEVBQUUsV0FBb0IsRUFBRSxnQkFBbUM7UUFDbEcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTztRQUN4QyxNQUFNLEtBQUssR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztRQUM5RSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxVQUFVLENBQ1IsV0FBbUIsRUFDbkIsWUFBb0IsRUFDcEIsU0FBa0IsRUFDbEIsa0JBQTJCLEVBQzNCLGdCQUFtQyxFQUNuQyxRQUEyQjtRQUUzQixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPO1FBQ3hDLE1BQU0sS0FBSyxHQUFHO1lBQ1osT0FBTyxFQUFFLFdBQVc7WUFDcEIsTUFBTSxFQUFFLFlBQVk7WUFDcEIsU0FBUztZQUNULFdBQVcsRUFBRSxrQkFBa0I7WUFDL0IsZ0JBQWdCO1lBQ2hCLFFBQVE7U0FDVCxDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsTUFBTSxDQUFDLFdBQW1CLEVBQUUsVUFBb0IsRUFBRSxnQkFBbUM7UUFDbkYsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTztRQUN4QyxNQUFNLEtBQUssR0FBRyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO1FBQzlFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELFVBQVUsQ0FDUixXQUFtQixFQUNuQixhQUF1QixFQUN2QixVQUFrQixFQUNsQixnQkFBbUMsRUFDbkMsUUFBNEI7UUFFNUIsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTztRQUN4QyxNQUFNLEtBQUssR0FBRyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxDQUFDO1FBQzlHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELGNBQWMsQ0FDWixXQUFtQixFQUNuQixTQUFrQixFQUNsQixXQUFvQixFQUNwQixnQkFBbUMsRUFDbkMsV0FBcUM7UUFFckMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTztRQUN4QyxNQUFNLEtBQUssR0FBRyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUMzRixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELGFBQWEsQ0FDWCxXQUFtQixFQUNuQixTQUFrQixFQUNsQixnQkFBbUMsRUFDbkMsV0FBcUM7UUFFckMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTztRQUN4QyxNQUFNLEtBQUssR0FBRyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQzlFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELG1CQUFtQixDQUFDLFNBQWlCLEVBQUUsSUFBWSxFQUFFLFdBQW9CLEVBQUUsYUFBdUI7UUFDaEcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTztRQUN4QyxNQUFNLEtBQUssR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxDQUFDO1FBQzlELElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLHFCQUFxQixFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsTUFBTSxDQUFDLFdBQW1CLEVBQUUsU0FBaUIsRUFBRSxXQUFvQixFQUFFLGdCQUFtQztRQUN0RyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPO1FBQ3hDLE1BQU0sS0FBSyxHQUFHLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLENBQUM7UUFDaEYsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsT0FBTyxDQUNMLFNBQWlCLEVBQ2pCLGdCQUFtQyxFQUNuQyxNQUFlLEVBQ2YscUJBQThCO1FBRTlCLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU87UUFDeEMsTUFBTSxLQUFLLEdBQW1CO1lBQzVCLFNBQVM7WUFDVCxHQUFHLENBQUMsZ0JBQWdCLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO1lBQzdDLEdBQUcsQ0FBQyxNQUFNLEtBQUssU0FBUyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDdkMsR0FBRyxDQUFDLHFCQUFxQixLQUFLLFNBQVMsSUFBSSxFQUFFLHFCQUFxQixFQUFFLENBQUM7U0FDdEUsQ0FBQztRQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELE9BQU8sQ0FDTCxTQUFpQixFQUNqQixZQUFvQixFQUNwQixlQUFvQyxFQUNwQyxnQkFBbUM7UUFFbkMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTztRQUN4QyxNQUFNLEtBQUssR0FBRyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsTUFBZSxFQUFFLENBQUM7UUFDaEgsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsWUFBWSxDQUNWLFNBQWlCLEVBQ2pCLE9BQWUsRUFDZixPQUFlLEVBQ2YsV0FBbUIsRUFDbkIsT0FBZSxFQUNmLGVBQW9DLEVBQ3BDLGdCQUFtQztRQUVuQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPO1FBQ3hDLE1BQU0sS0FBSyxHQUF3QjtZQUNqQyxTQUFTO1lBQ1QsT0FBTztZQUNQLE9BQU87WUFDUCxXQUFXO1lBQ1gsT0FBTztZQUNQLE9BQU8sRUFBRSxlQUFlLENBQUMsT0FBTztZQUNoQyxlQUFlO1lBQ2YsZ0JBQWdCO1lBQ2hCLE9BQU8sRUFBRSxNQUFlO1NBQ3pCLENBQUM7UUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxXQUFXLENBQ1QsU0FBaUIsRUFDakIsT0FBZSxFQUNmLGVBQW9DLEVBQ3BDLGdCQUFtQztRQUVuQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPO1FBQ3hDLE1BQU0sS0FBSyxHQUF1QjtZQUNoQyxTQUFTO1lBQ1QsT0FBTztZQUNQLE9BQU8sRUFBRSxlQUFlLENBQUMsT0FBTztZQUNoQyxlQUFlO1lBQ2YsZ0JBQWdCO1lBQ2hCLE9BQU8sRUFBRSxNQUFlO1NBQ3pCLENBQUM7UUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxPQUFPLENBQ0wsU0FBaUIsRUFDakIsT0FBZSxFQUNmLFNBQWtCLEVBQ2xCLFdBQThCLEVBQzlCLGdCQUFtQztRQUVuQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPO1FBQ3hDLE1BQU0sS0FBSyxHQUFHLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxNQUFlLEVBQUUsQ0FBQztRQUN6RyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxRQUFRLENBQUMsU0FBaUIsRUFBRSxPQUFlLEVBQUUsUUFBaUIsRUFBRSxnQkFBbUM7UUFDakcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTztRQUN4QyxNQUFNLEtBQUssR0FBRyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxNQUFlLEVBQUUsQ0FBQztRQUMzRixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxVQUFVLENBQUMsS0FBYyxFQUFFLGdCQUFtQztRQUM1RCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPO1FBQ3hDLE1BQU0sS0FBSyxHQUFHLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO1FBQ25ELElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELFFBQVEsQ0FBQyxNQUFlLEVBQUUsZ0JBQW1DO1FBQzNELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU87UUFDeEMsTUFBTSxLQUFLLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLGdCQUFnQixFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQTBCLEVBQUUsZ0JBQW1DO1FBQ3pFLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU87UUFDeEMsTUFBTSxLQUFLLEdBQUcsRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLENBQUM7UUFDM0QsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFlBQVk7UUFDVixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUF3QixXQUFXLENBQUMsQ0FBQztRQUMzRSxPQUFPLFNBQVMsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDekMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGbG93UmVjb3JkZXJEaXNwYXRjaGVyIOKAlCBGYW5zIG91dCBjb250cm9sIGZsb3cgZXZlbnRzIHRvIE4gYXR0YWNoZWQgRmxvd1JlY29yZGVycy5cbiAqXG4gKiBJbXBsZW1lbnRzIElDb250cm9sRmxvd05hcnJhdGl2ZSBzbyBpdCBjYW4gcmVwbGFjZSB0aGUgc2luZ2xlXG4gKiBDb250cm9sRmxvd05hcnJhdGl2ZUdlbmVyYXRvciBpbiB0aGUgdHJhdmVyc2VyJ3MgSGFuZGxlckRlcHMuXG4gKlxuICogRXZlcnkgZXZlbnQgZ29lcyB0aHJvdWdoIGByZWNvcmRlci9ob29rcy50cyDCtyBmaXJlYCAodGhlIG9uZSBwZXItcmVjb3JkZXIgbG9vcCk6IGEgZmFpbGluZ1xuICogcmVjb3JkZXIgaXMgd2FybmVkIGFib3V0IGluIGRldiBtb2RlIGFuZCBuZXZlciBicmVha3MgZXhlY3V0aW9uIOKAlCBldmVuIHdoZW4gd2hhdCBpdCB0aHJld1xuICogY2Fubm90IGJlIHR1cm5lZCBpbnRvIGEgc3RyaW5nLlxuICpcbiAqIFdoZW4gbm8gcmVjb3JkZXJzIGFyZSBhdHRhY2hlZCwgZXZlcnkgbWV0aG9kIGlzIGEgZmFzdCBuby1vcCAoZW1wdHkgYXJyYXkgY2hlY2spLlxuICovXG5cbmltcG9ydCB0eXBlIHsgRGVjaXNpb25FdmlkZW5jZSwgU2VsZWN0aW9uRXZpZGVuY2UgfSBmcm9tICcuLi8uLi9kZWNpZGUvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBTdHJ1Y3R1cmVkRXJyb3JJbmZvIH0gZnJvbSAnLi4vLi4vZXJyb3JzL2Vycm9ySW5mby5qcyc7XG5pbXBvcnQgeyBmaXJlLCB3YXJuSW5EZXZNb2RlIH0gZnJvbSAnLi4vLi4vcmVjb3JkZXIvaG9va3MuanMnO1xuaW1wb3J0IHR5cGUgeyBOYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL05hcnJhdGl2ZUZsb3dSZWNvcmRlci5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIEZsb3dCcmVha0V2ZW50LFxuICBGbG93UmVjb3JkZXIsXG4gIEZsb3dTdGFnZUV2ZW50LFxuICBGbG93U3RhZ2VSZXRyeUV2ZW50LFxuICBGbG93VGhyb3R0bGVkRXZlbnQsXG4gIElDb250cm9sRmxvd05hcnJhdGl2ZSxcbiAgU3RhZ2VUeXBlLFxuICBUcmF2ZXJzYWxDb250ZXh0LFxufSBmcm9tICcuL3R5cGVzLmpzJztcblxuLyoqIFRoZSBmbG93IGNoYW5uZWwncyBpc29sYXRpb246IGEgdGhyb3dpbmcgcmVjb3JkZXIgaXMgd2FybmVkIGFib3V0IGluIGRldiBtb2RlLCB0aGVuIHNraXBwZWQuICovXG5jb25zdCBGTE9XX0ZBSUxVUkUgPSB3YXJuSW5EZXZNb2RlKCdGbG93UmVjb3JkZXJEaXNwYXRjaGVyJyk7XG5cbmV4cG9ydCBjbGFzcyBGbG93UmVjb3JkZXJEaXNwYXRjaGVyIGltcGxlbWVudHMgSUNvbnRyb2xGbG93TmFycmF0aXZlIHtcbiAgcHJpdmF0ZSByZWNvcmRlcnM6IEZsb3dSZWNvcmRlcltdID0gW107XG5cbiAgLyoqIEF0dGFjaCBhIEZsb3dSZWNvcmRlci4gRHVwbGljYXRlIElEcyBhcmUgYWxsb3dlZCAoc2FtZSBhcyBzY29wZSBTY29wZVJlY29yZGVyKS4gKi9cbiAgYXR0YWNoKHJlY29yZGVyOiBGbG93UmVjb3JkZXIpOiB2b2lkIHtcbiAgICB0aGlzLnJlY29yZGVycy5wdXNoKHJlY29yZGVyKTtcbiAgfVxuXG4gIC8qKiBEZXRhY2ggYWxsIEZsb3dSZWNvcmRlcnMgd2l0aCB0aGUgZ2l2ZW4gSUQuICovXG4gIGRldGFjaChpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5yZWNvcmRlcnMgPSB0aGlzLnJlY29yZGVycy5maWx0ZXIoKHIpID0+IHIuaWQgIT09IGlkKTtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIGEgZGVmZW5zaXZlIGNvcHkgb2YgYXR0YWNoZWQgcmVjb3JkZXJzLiAqL1xuICBnZXRTY29wZVJlY29yZGVycygpOiBGbG93UmVjb3JkZXJbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLnJlY29yZGVyc107XG4gIH1cblxuICAvKiogRmluZCBhIHJlY29yZGVyIGJ5IElELiBVc2VmdWwgZm9yIHJldHJpZXZpbmcgYnVpbHQtaW4gcmVjb3JkZXJzIGxpa2UgTmFycmF0aXZlRmxvd1JlY29yZGVyLiAqL1xuICBnZXRSZWNvcmRlckJ5SWQ8VCBleHRlbmRzIEZsb3dSZWNvcmRlciA9IEZsb3dSZWNvcmRlcj4oaWQ6IHN0cmluZyk6IFQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJlY29yZGVycy5maW5kKChyKSA9PiByLmlkID09PSBpZCkgYXMgVCB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIOKUgOKUgCBJQ29udHJvbEZsb3dOYXJyYXRpdmUgaW1wbGVtZW50YXRpb24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgb25TdGFnZUV4ZWN1dGVkKFxuICAgIHN0YWdlTmFtZTogc3RyaW5nLFxuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgdHJhdmVyc2FsQ29udGV4dDogVHJhdmVyc2FsQ29udGV4dCB8IHVuZGVmaW5lZCxcbiAgICBzdGFnZVR5cGU6IFN0YWdlVHlwZSxcbiAgKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGV2ZW50OiBGbG93U3RhZ2VFdmVudCA9IHsgc3RhZ2VOYW1lLCBkZXNjcmlwdGlvbiwgdHJhdmVyc2FsQ29udGV4dCwgc3RhZ2VUeXBlIH07XG4gICAgZmlyZSh0aGlzLnJlY29yZGVycywgJ29uU3RhZ2VFeGVjdXRlZCcsIGV2ZW50LCBGTE9XX0ZBSUxVUkUpO1xuICB9XG5cbiAgb25OZXh0KGZyb21TdGFnZTogc3RyaW5nLCB0b1N0YWdlOiBzdHJpbmcsIGRlc2NyaXB0aW9uPzogc3RyaW5nLCB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBldmVudCA9IHsgZnJvbTogZnJvbVN0YWdlLCB0bzogdG9TdGFnZSwgZGVzY3JpcHRpb24sIHRyYXZlcnNhbENvbnRleHQgfTtcbiAgICBmaXJlKHRoaXMucmVjb3JkZXJzLCAnb25OZXh0JywgZXZlbnQsIEZMT1dfRkFJTFVSRSk7XG4gIH1cblxuICBvbkRlY2lzaW9uKFxuICAgIGRlY2lkZXJOYW1lOiBzdHJpbmcsXG4gICAgY2hvc2VuQnJhbmNoOiBzdHJpbmcsXG4gICAgcmF0aW9uYWxlPzogc3RyaW5nLFxuICAgIGRlY2lkZXJEZXNjcmlwdGlvbj86IHN0cmluZyxcbiAgICB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dCxcbiAgICBldmlkZW5jZT86IERlY2lzaW9uRXZpZGVuY2UsXG4gICk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIGRlY2lkZXI6IGRlY2lkZXJOYW1lLFxuICAgICAgY2hvc2VuOiBjaG9zZW5CcmFuY2gsXG4gICAgICByYXRpb25hbGUsXG4gICAgICBkZXNjcmlwdGlvbjogZGVjaWRlckRlc2NyaXB0aW9uLFxuICAgICAgdHJhdmVyc2FsQ29udGV4dCxcbiAgICAgIGV2aWRlbmNlLFxuICAgIH07XG4gICAgZmlyZSh0aGlzLnJlY29yZGVycywgJ29uRGVjaXNpb24nLCBldmVudCwgRkxPV19GQUlMVVJFKTtcbiAgfVxuXG4gIG9uRm9yayhwYXJlbnRTdGFnZTogc3RyaW5nLCBjaGlsZE5hbWVzOiBzdHJpbmdbXSwgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgZXZlbnQgPSB7IHBhcmVudDogcGFyZW50U3RhZ2UsIGNoaWxkcmVuOiBjaGlsZE5hbWVzLCB0cmF2ZXJzYWxDb250ZXh0IH07XG4gICAgZmlyZSh0aGlzLnJlY29yZGVycywgJ29uRm9yaycsIGV2ZW50LCBGTE9XX0ZBSUxVUkUpO1xuICB9XG5cbiAgb25TZWxlY3RlZChcbiAgICBwYXJlbnRTdGFnZTogc3RyaW5nLFxuICAgIHNlbGVjdGVkTmFtZXM6IHN0cmluZ1tdLFxuICAgIHRvdGFsQ291bnQ6IG51bWJlcixcbiAgICB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dCxcbiAgICBldmlkZW5jZT86IFNlbGVjdGlvbkV2aWRlbmNlLFxuICApOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgZXZlbnQgPSB7IHBhcmVudDogcGFyZW50U3RhZ2UsIHNlbGVjdGVkOiBzZWxlY3RlZE5hbWVzLCB0b3RhbDogdG90YWxDb3VudCwgdHJhdmVyc2FsQ29udGV4dCwgZXZpZGVuY2UgfTtcbiAgICBmaXJlKHRoaXMucmVjb3JkZXJzLCAnb25TZWxlY3RlZCcsIGV2ZW50LCBGTE9XX0ZBSUxVUkUpO1xuICB9XG5cbiAgb25TdWJmbG93RW50cnkoXG4gICAgc3ViZmxvd05hbWU6IHN0cmluZyxcbiAgICBzdWJmbG93SWQ/OiBzdHJpbmcsXG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmcsXG4gICAgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQsXG4gICAgbWFwcGVkSW5wdXQ/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGV2ZW50ID0geyBuYW1lOiBzdWJmbG93TmFtZSwgc3ViZmxvd0lkLCBkZXNjcmlwdGlvbiwgdHJhdmVyc2FsQ29udGV4dCwgbWFwcGVkSW5wdXQgfTtcbiAgICBmaXJlKHRoaXMucmVjb3JkZXJzLCAnb25TdWJmbG93RW50cnknLCBldmVudCwgRkxPV19GQUlMVVJFKTtcbiAgfVxuXG4gIG9uU3ViZmxvd0V4aXQoXG4gICAgc3ViZmxvd05hbWU6IHN0cmluZyxcbiAgICBzdWJmbG93SWQ/OiBzdHJpbmcsXG4gICAgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQsXG4gICAgb3V0cHV0U3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGV2ZW50ID0geyBuYW1lOiBzdWJmbG93TmFtZSwgc3ViZmxvd0lkLCB0cmF2ZXJzYWxDb250ZXh0LCBvdXRwdXRTdGF0ZSB9O1xuICAgIGZpcmUodGhpcy5yZWNvcmRlcnMsICdvblN1YmZsb3dFeGl0JywgZXZlbnQsIEZMT1dfRkFJTFVSRSk7XG4gIH1cblxuICBvblN1YmZsb3dSZWdpc3RlcmVkKHN1YmZsb3dJZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIGRlc2NyaXB0aW9uPzogc3RyaW5nLCBzcGVjU3RydWN0dXJlPzogdW5rbm93bik6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBldmVudCA9IHsgc3ViZmxvd0lkLCBuYW1lLCBkZXNjcmlwdGlvbiwgc3BlY1N0cnVjdHVyZSB9O1xuICAgIGZpcmUodGhpcy5yZWNvcmRlcnMsICdvblN1YmZsb3dSZWdpc3RlcmVkJywgZXZlbnQsIEZMT1dfRkFJTFVSRSk7XG4gIH1cblxuICBvbkxvb3AodGFyZ2V0U3RhZ2U6IHN0cmluZywgaXRlcmF0aW9uOiBudW1iZXIsIGRlc2NyaXB0aW9uPzogc3RyaW5nLCB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBldmVudCA9IHsgdGFyZ2V0OiB0YXJnZXRTdGFnZSwgaXRlcmF0aW9uLCBkZXNjcmlwdGlvbiwgdHJhdmVyc2FsQ29udGV4dCB9O1xuICAgIGZpcmUodGhpcy5yZWNvcmRlcnMsICdvbkxvb3AnLCBldmVudCwgRkxPV19GQUlMVVJFKTtcbiAgfVxuXG4gIG9uQnJlYWsoXG4gICAgc3RhZ2VOYW1lOiBzdHJpbmcsXG4gICAgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQsXG4gICAgcmVhc29uPzogc3RyaW5nLFxuICAgIHByb3BhZ2F0ZWRGcm9tU3ViZmxvdz86IHN0cmluZyxcbiAgKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGV2ZW50OiBGbG93QnJlYWtFdmVudCA9IHtcbiAgICAgIHN0YWdlTmFtZSxcbiAgICAgIC4uLih0cmF2ZXJzYWxDb250ZXh0ICYmIHsgdHJhdmVyc2FsQ29udGV4dCB9KSxcbiAgICAgIC4uLihyZWFzb24gIT09IHVuZGVmaW5lZCAmJiB7IHJlYXNvbiB9KSxcbiAgICAgIC4uLihwcm9wYWdhdGVkRnJvbVN1YmZsb3cgIT09IHVuZGVmaW5lZCAmJiB7IHByb3BhZ2F0ZWRGcm9tU3ViZmxvdyB9KSxcbiAgICB9O1xuICAgIGZpcmUodGhpcy5yZWNvcmRlcnMsICdvbkJyZWFrJywgZXZlbnQsIEZMT1dfRkFJTFVSRSk7XG4gIH1cblxuICBvbkVycm9yKFxuICAgIHN0YWdlTmFtZTogc3RyaW5nLFxuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nLFxuICAgIHN0cnVjdHVyZWRFcnJvcjogU3RydWN0dXJlZEVycm9ySW5mbyxcbiAgICB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dCxcbiAgKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGV2ZW50ID0geyBzdGFnZU5hbWUsIG1lc3NhZ2U6IGVycm9yTWVzc2FnZSwgc3RydWN0dXJlZEVycm9yLCB0cmF2ZXJzYWxDb250ZXh0LCBjaGFubmVsOiAnZmxvdycgYXMgY29uc3QgfTtcbiAgICBmaXJlKHRoaXMucmVjb3JkZXJzLCAnb25FcnJvcicsIGV2ZW50LCBGTE9XX0ZBSUxVUkUpO1xuICB9XG5cbiAgb25TdGFnZVJldHJ5KFxuICAgIHN0YWdlTmFtZTogc3RyaW5nLFxuICAgIHN0YWdlSWQ6IHN0cmluZyxcbiAgICBhdHRlbXB0OiBudW1iZXIsXG4gICAgbWF4QXR0ZW1wdHM6IG51bWJlcixcbiAgICBkZWxheU1zOiBudW1iZXIsXG4gICAgc3RydWN0dXJlZEVycm9yOiBTdHJ1Y3R1cmVkRXJyb3JJbmZvLFxuICAgIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0LFxuICApOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgZXZlbnQ6IEZsb3dTdGFnZVJldHJ5RXZlbnQgPSB7XG4gICAgICBzdGFnZU5hbWUsXG4gICAgICBzdGFnZUlkLFxuICAgICAgYXR0ZW1wdCxcbiAgICAgIG1heEF0dGVtcHRzLFxuICAgICAgZGVsYXlNcyxcbiAgICAgIG1lc3NhZ2U6IHN0cnVjdHVyZWRFcnJvci5tZXNzYWdlLFxuICAgICAgc3RydWN0dXJlZEVycm9yLFxuICAgICAgdHJhdmVyc2FsQ29udGV4dCxcbiAgICAgIGNoYW5uZWw6ICdmbG93JyBhcyBjb25zdCxcbiAgICB9O1xuICAgIGZpcmUodGhpcy5yZWNvcmRlcnMsICdvblN0YWdlUmV0cnknLCBldmVudCwgRkxPV19GQUlMVVJFKTtcbiAgfVxuXG4gIG9uVGhyb3R0bGVkKFxuICAgIHN0YWdlTmFtZTogc3RyaW5nLFxuICAgIHN0YWdlSWQ6IHN0cmluZyxcbiAgICBzdHJ1Y3R1cmVkRXJyb3I6IFN0cnVjdHVyZWRFcnJvckluZm8sXG4gICAgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQsXG4gICk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBldmVudDogRmxvd1Rocm90dGxlZEV2ZW50ID0ge1xuICAgICAgc3RhZ2VOYW1lLFxuICAgICAgc3RhZ2VJZCxcbiAgICAgIG1lc3NhZ2U6IHN0cnVjdHVyZWRFcnJvci5tZXNzYWdlLFxuICAgICAgc3RydWN0dXJlZEVycm9yLFxuICAgICAgdHJhdmVyc2FsQ29udGV4dCxcbiAgICAgIGNoYW5uZWw6ICdmbG93JyBhcyBjb25zdCxcbiAgICB9O1xuICAgIGZpcmUodGhpcy5yZWNvcmRlcnMsICdvblRocm90dGxlZCcsIGV2ZW50LCBGTE9XX0ZBSUxVUkUpO1xuICB9XG5cbiAgb25QYXVzZShcbiAgICBzdGFnZU5hbWU6IHN0cmluZyxcbiAgICBzdGFnZUlkOiBzdHJpbmcsXG4gICAgcGF1c2VEYXRhOiB1bmtub3duLFxuICAgIHN1YmZsb3dQYXRoOiByZWFkb25seSBzdHJpbmdbXSxcbiAgICB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dCxcbiAgKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGV2ZW50ID0geyBzdGFnZU5hbWUsIHN0YWdlSWQsIHBhdXNlRGF0YSwgc3ViZmxvd1BhdGgsIHRyYXZlcnNhbENvbnRleHQsIGNoYW5uZWw6ICdmbG93JyBhcyBjb25zdCB9O1xuICAgIGZpcmUodGhpcy5yZWNvcmRlcnMsICdvblBhdXNlJywgZXZlbnQsIEZMT1dfRkFJTFVSRSk7XG4gIH1cblxuICBvblJlc3VtZShzdGFnZU5hbWU6IHN0cmluZywgc3RhZ2VJZDogc3RyaW5nLCBoYXNJbnB1dDogYm9vbGVhbiwgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgZXZlbnQgPSB7IHN0YWdlTmFtZSwgc3RhZ2VJZCwgaGFzSW5wdXQsIHRyYXZlcnNhbENvbnRleHQsIGNoYW5uZWw6ICdmbG93JyBhcyBjb25zdCB9O1xuICAgIGZpcmUodGhpcy5yZWNvcmRlcnMsICdvblJlc3VtZScsIGV2ZW50LCBGTE9XX0ZBSUxVUkUpO1xuICB9XG5cbiAgb25SdW5TdGFydChpbnB1dDogdW5rbm93biwgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgZXZlbnQgPSB7IHBheWxvYWQ6IGlucHV0LCB0cmF2ZXJzYWxDb250ZXh0IH07XG4gICAgZmlyZSh0aGlzLnJlY29yZGVycywgJ29uUnVuU3RhcnQnLCBldmVudCwgRkxPV19GQUlMVVJFKTtcbiAgfVxuXG4gIG9uUnVuRW5kKG91dHB1dDogdW5rbm93biwgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgZXZlbnQgPSB7IHBheWxvYWQ6IG91dHB1dCwgdHJhdmVyc2FsQ29udGV4dCB9O1xuICAgIGZpcmUodGhpcy5yZWNvcmRlcnMsICdvblJ1bkVuZCcsIGV2ZW50LCBGTE9XX0ZBSUxVUkUpO1xuICB9XG5cbiAgb25SdW5GYWlsZWQoZXJyb3I6IFN0cnVjdHVyZWRFcnJvckluZm8sIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0KTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGV2ZW50ID0geyBzdHJ1Y3R1cmVkRXJyb3I6IGVycm9yLCB0cmF2ZXJzYWxDb250ZXh0IH07XG4gICAgZmlyZSh0aGlzLnJlY29yZGVycywgJ29uUnVuRmFpbGVkJywgZXZlbnQsIEZMT1dfRkFJTFVSRSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBzZW50ZW5jZXMgZnJvbSBhbiBhdHRhY2hlZCBOYXJyYXRpdmVGbG93UmVjb3JkZXIgKGxvb2tlZCB1cCBieSBJRCkuXG4gICAqIENhbGxlcnMgdGhhdCBuZWVkIHNlbnRlbmNlcyBzaG91bGQgYXR0YWNoIGEgTmFycmF0aXZlRmxvd1JlY29yZGVyIHdpdGggaWQgJ25hcnJhdGl2ZSdcbiAgICogYW5kIHJldHJpZXZlIGl0IGRpcmVjdGx5IHZpYSBnZXRSZWNvcmRlckJ5SWQoKSBpZiB0aGV5IG5lZWQgdHlwZWQgYWNjZXNzLlxuICAgKi9cbiAgZ2V0U2VudGVuY2VzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBuYXJyYXRpdmUgPSB0aGlzLmdldFJlY29yZGVyQnlJZDxOYXJyYXRpdmVGbG93UmVjb3JkZXI+KCduYXJyYXRpdmUnKTtcbiAgICByZXR1cm4gbmFycmF0aXZlPy5nZXRTZW50ZW5jZXMoKSA/PyBbXTtcbiAgfVxufVxuIl19
199
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvd1JlY29yZGVyRGlzcGF0Y2hlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZW5naW5lL25hcnJhdGl2ZS9GbG93UmVjb3JkZXJEaXNwYXRjaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztHQVdHO0FBTUgsT0FBTyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQWU5RCxtR0FBbUc7QUFDbkcsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFFN0QsTUFBTSxPQUFPLHNCQUFzQjtJQUN6QixTQUFTLEdBQW1CLEVBQUUsQ0FBQztJQUV2QyxzRkFBc0Y7SUFDdEYsTUFBTSxDQUFDLFFBQXNCO1FBQzNCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxrREFBa0Q7SUFDbEQsTUFBTSxDQUFDLEVBQVU7UUFDZixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxzREFBc0Q7SUFDdEQsaUJBQWlCO1FBQ2YsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxrR0FBa0c7SUFDbEcsZUFBZSxDQUF3QyxFQUFVO1FBQy9ELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFrQixDQUFDO0lBQ2xFLENBQUM7SUFFRCw2RUFBNkU7SUFFN0UsZUFBZSxDQUNiLFNBQWlCLEVBQ2pCLFdBQStCLEVBQy9CLGdCQUE4QyxFQUM5QyxT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QyxLQUEwQixFQUFFLGdCQUFtQyxFQUFFLE9BQWdDO1FBQzNHLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU87UUFDeEMsTUFBTSxLQUFLLEdBQXVCLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO1FBQy9FLHVFQUF1RTtRQUN2RSxpRUFBaUU7UUFDakUsSUFBSSxPQUFPO1lBQUUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMzRixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsWUFBWTtRQUNWLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQXdCLFdBQVcsQ0FBQyxDQUFDO1FBQzNFLE9BQU8sU0FBUyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZsb3dSZWNvcmRlckRpc3BhdGNoZXIg4oCUIEZhbnMgb3V0IGNvbnRyb2wgZmxvdyBldmVudHMgdG8gTiBhdHRhY2hlZCBGbG93UmVjb3JkZXJzLlxuICpcbiAqIEltcGxlbWVudHMgSUNvbnRyb2xGbG93TmFycmF0aXZlIHNvIGl0IGNhbiByZXBsYWNlIHRoZSBzaW5nbGVcbiAqIENvbnRyb2xGbG93TmFycmF0aXZlR2VuZXJhdG9yIGluIHRoZSB0cmF2ZXJzZXIncyBIYW5kbGVyRGVwcy5cbiAqXG4gKiBFdmVyeSBldmVudCBnb2VzIHRocm91Z2ggYHJlY29yZGVyL2hvb2tzLnRzIMK3IGZpcmVgICh0aGUgb25lIHBlci1yZWNvcmRlciBsb29wKTogYSBmYWlsaW5nXG4gKiByZWNvcmRlciBpcyB3YXJuZWQgYWJvdXQgaW4gZGV2IG1vZGUgYW5kIG5ldmVyIGJyZWFrcyBleGVjdXRpb24g4oCUIGV2ZW4gd2hlbiB3aGF0IGl0IHRocmV3XG4gKiBjYW5ub3QgYmUgdHVybmVkIGludG8gYSBzdHJpbmcuXG4gKlxuICogV2hlbiBubyByZWNvcmRlcnMgYXJlIGF0dGFjaGVkLCBldmVyeSBtZXRob2QgaXMgYSBmYXN0IG5vLW9wIChlbXB0eSBhcnJheSBjaGVjaykuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBdHRlbXB0UmVjb3JkIH0gZnJvbSAnLi4vLi4vYXR0ZW1wdC90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IERlY2lzaW9uRXZpZGVuY2UsIFNlbGVjdGlvbkV2aWRlbmNlIH0gZnJvbSAnLi4vLi4vZGVjaWRlL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgU3RydWN0dXJlZEVycm9ySW5mbyB9IGZyb20gJy4uLy4uL2Vycm9ycy9lcnJvckluZm8uanMnO1xuaW1wb3J0IHR5cGUgeyBUZXJtaW5hbEZhaWx1cmVDb250ZXh0IH0gZnJvbSAnLi4vLi4vZXJyb3JzL3Rlcm1pbmFsRmFpbHVyZS5qcyc7XG5pbXBvcnQgeyBmaXJlLCB3YXJuSW5EZXZNb2RlIH0gZnJvbSAnLi4vLi4vcmVjb3JkZXIvaG9va3MuanMnO1xuaW1wb3J0IHR5cGUgeyBOYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL05hcnJhdGl2ZUZsb3dSZWNvcmRlci5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIEZsb3dBdHRlbXB0RXZlbnQsXG4gIEZsb3dCcmVha0V2ZW50LFxuICBGbG93UmVjb3JkZXIsXG4gIEZsb3dSdW5GYWlsZWRFdmVudCxcbiAgRmxvd1N0YWdlRXZlbnQsXG4gIEZsb3dTdGFnZVJldHJ5RXZlbnQsXG4gIEZsb3dUaHJvdHRsZWRFdmVudCxcbiAgSUNvbnRyb2xGbG93TmFycmF0aXZlLFxuICBTdGFnZVR5cGUsXG4gIFRyYXZlcnNhbENvbnRleHQsXG59IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vKiogVGhlIGZsb3cgY2hhbm5lbCdzIGlzb2xhdGlvbjogYSB0aHJvd2luZyByZWNvcmRlciBpcyB3YXJuZWQgYWJvdXQgaW4gZGV2IG1vZGUsIHRoZW4gc2tpcHBlZC4gKi9cbmNvbnN0IEZMT1dfRkFJTFVSRSA9IHdhcm5JbkRldk1vZGUoJ0Zsb3dSZWNvcmRlckRpc3BhdGNoZXInKTtcblxuZXhwb3J0IGNsYXNzIEZsb3dSZWNvcmRlckRpc3BhdGNoZXIgaW1wbGVtZW50cyBJQ29udHJvbEZsb3dOYXJyYXRpdmUge1xuICBwcml2YXRlIHJlY29yZGVyczogRmxvd1JlY29yZGVyW10gPSBbXTtcblxuICAvKiogQXR0YWNoIGEgRmxvd1JlY29yZGVyLiBEdXBsaWNhdGUgSURzIGFyZSBhbGxvd2VkIChzYW1lIGFzIHNjb3BlIFNjb3BlUmVjb3JkZXIpLiAqL1xuICBhdHRhY2gocmVjb3JkZXI6IEZsb3dSZWNvcmRlcik6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkZXJzLnB1c2gocmVjb3JkZXIpO1xuICB9XG5cbiAgLyoqIERldGFjaCBhbGwgRmxvd1JlY29yZGVycyB3aXRoIHRoZSBnaXZlbiBJRC4gKi9cbiAgZGV0YWNoKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnJlY29yZGVycyA9IHRoaXMucmVjb3JkZXJzLmZpbHRlcigocikgPT4gci5pZCAhPT0gaWQpO1xuICB9XG5cbiAgLyoqIFJldHVybnMgYSBkZWZlbnNpdmUgY29weSBvZiBhdHRhY2hlZCByZWNvcmRlcnMuICovXG4gIGdldFNjb3BlUmVjb3JkZXJzKCk6IEZsb3dSZWNvcmRlcltdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMucmVjb3JkZXJzXTtcbiAgfVxuXG4gIC8qKiBGaW5kIGEgcmVjb3JkZXIgYnkgSUQuIFVzZWZ1bCBmb3IgcmV0cmlldmluZyBidWlsdC1pbiByZWNvcmRlcnMgbGlrZSBOYXJyYXRpdmVGbG93UmVjb3JkZXIuICovXG4gIGdldFJlY29yZGVyQnlJZDxUIGV4dGVuZHMgRmxvd1JlY29yZGVyID0gRmxvd1JlY29yZGVyPihpZDogc3RyaW5nKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucmVjb3JkZXJzLmZpbmQoKHIpID0+IHIuaWQgPT09IGlkKSBhcyBUIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8g4pSA4pSAIElDb250cm9sRmxvd05hcnJhdGl2ZSBpbXBsZW1lbnRhdGlvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBvblN0YWdlRXhlY3V0ZWQoXG4gICAgc3RhZ2VOYW1lOiBzdHJpbmcsXG4gICAgZGVzY3JpcHRpb246IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICB0cmF2ZXJzYWxDb250ZXh0OiBUcmF2ZXJzYWxDb250ZXh0IHwgdW5kZWZpbmVkLFxuICAgIHN0YWdlVHlwZTogU3RhZ2VUeXBlLFxuICApOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgZXZlbnQ6IEZsb3dTdGFnZUV2ZW50ID0geyBzdGFnZU5hbWUsIGRlc2NyaXB0aW9uLCB0cmF2ZXJzYWxDb250ZXh0LCBzdGFnZVR5cGUgfTtcbiAgICBmaXJlKHRoaXMucmVjb3JkZXJzLCAnb25TdGFnZUV4ZWN1dGVkJywgZXZlbnQsIEZMT1dfRkFJTFVSRSk7XG4gIH1cblxuICBvbk5leHQoZnJvbVN0YWdlOiBzdHJpbmcsIHRvU3RhZ2U6IHN0cmluZywgZGVzY3JpcHRpb24/OiBzdHJpbmcsIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0KTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGV2ZW50ID0geyBmcm9tOiBmcm9tU3RhZ2UsIHRvOiB0b1N0YWdlLCBkZXNjcmlwdGlvbiwgdHJhdmVyc2FsQ29udGV4dCB9O1xuICAgIGZpcmUodGhpcy5yZWNvcmRlcnMsICdvbk5leHQnLCBldmVudCwgRkxPV19GQUlMVVJFKTtcbiAgfVxuXG4gIG9uRGVjaXNpb24oXG4gICAgZGVjaWRlck5hbWU6IHN0cmluZyxcbiAgICBjaG9zZW5CcmFuY2g6IHN0cmluZyxcbiAgICByYXRpb25hbGU/OiBzdHJpbmcsXG4gICAgZGVjaWRlckRlc2NyaXB0aW9uPzogc3RyaW5nLFxuICAgIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0LFxuICAgIGV2aWRlbmNlPzogRGVjaXNpb25FdmlkZW5jZSxcbiAgKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgZGVjaWRlcjogZGVjaWRlck5hbWUsXG4gICAgICBjaG9zZW46IGNob3NlbkJyYW5jaCxcbiAgICAgIHJhdGlvbmFsZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBkZWNpZGVyRGVzY3JpcHRpb24sXG4gICAgICB0cmF2ZXJzYWxDb250ZXh0LFxuICAgICAgZXZpZGVuY2UsXG4gICAgfTtcbiAgICBmaXJlKHRoaXMucmVjb3JkZXJzLCAnb25EZWNpc2lvbicsIGV2ZW50LCBGTE9XX0ZBSUxVUkUpO1xuICB9XG5cbiAgb25Gb3JrKHBhcmVudFN0YWdlOiBzdHJpbmcsIGNoaWxkTmFtZXM6IHN0cmluZ1tdLCB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBldmVudCA9IHsgcGFyZW50OiBwYXJlbnRTdGFnZSwgY2hpbGRyZW46IGNoaWxkTmFtZXMsIHRyYXZlcnNhbENvbnRleHQgfTtcbiAgICBmaXJlKHRoaXMucmVjb3JkZXJzLCAnb25Gb3JrJywgZXZlbnQsIEZMT1dfRkFJTFVSRSk7XG4gIH1cblxuICBvblNlbGVjdGVkKFxuICAgIHBhcmVudFN0YWdlOiBzdHJpbmcsXG4gICAgc2VsZWN0ZWROYW1lczogc3RyaW5nW10sXG4gICAgdG90YWxDb3VudDogbnVtYmVyLFxuICAgIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0LFxuICAgIGV2aWRlbmNlPzogU2VsZWN0aW9uRXZpZGVuY2UsXG4gICk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBldmVudCA9IHsgcGFyZW50OiBwYXJlbnRTdGFnZSwgc2VsZWN0ZWQ6IHNlbGVjdGVkTmFtZXMsIHRvdGFsOiB0b3RhbENvdW50LCB0cmF2ZXJzYWxDb250ZXh0LCBldmlkZW5jZSB9O1xuICAgIGZpcmUodGhpcy5yZWNvcmRlcnMsICdvblNlbGVjdGVkJywgZXZlbnQsIEZMT1dfRkFJTFVSRSk7XG4gIH1cblxuICBvblN1YmZsb3dFbnRyeShcbiAgICBzdWJmbG93TmFtZTogc3RyaW5nLFxuICAgIHN1YmZsb3dJZD86IHN0cmluZyxcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZyxcbiAgICB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dCxcbiAgICBtYXBwZWRJbnB1dD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICApOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgZXZlbnQgPSB7IG5hbWU6IHN1YmZsb3dOYW1lLCBzdWJmbG93SWQsIGRlc2NyaXB0aW9uLCB0cmF2ZXJzYWxDb250ZXh0LCBtYXBwZWRJbnB1dCB9O1xuICAgIGZpcmUodGhpcy5yZWNvcmRlcnMsICdvblN1YmZsb3dFbnRyeScsIGV2ZW50LCBGTE9XX0ZBSUxVUkUpO1xuICB9XG5cbiAgb25TdWJmbG93RXhpdChcbiAgICBzdWJmbG93TmFtZTogc3RyaW5nLFxuICAgIHN1YmZsb3dJZD86IHN0cmluZyxcbiAgICB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dCxcbiAgICBvdXRwdXRTdGF0ZT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICApOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgZXZlbnQgPSB7IG5hbWU6IHN1YmZsb3dOYW1lLCBzdWJmbG93SWQsIHRyYXZlcnNhbENvbnRleHQsIG91dHB1dFN0YXRlIH07XG4gICAgZmlyZSh0aGlzLnJlY29yZGVycywgJ29uU3ViZmxvd0V4aXQnLCBldmVudCwgRkxPV19GQUlMVVJFKTtcbiAgfVxuXG4gIG9uU3ViZmxvd1JlZ2lzdGVyZWQoc3ViZmxvd0lkOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgZGVzY3JpcHRpb24/OiBzdHJpbmcsIHNwZWNTdHJ1Y3R1cmU/OiB1bmtub3duKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGV2ZW50ID0geyBzdWJmbG93SWQsIG5hbWUsIGRlc2NyaXB0aW9uLCBzcGVjU3RydWN0dXJlIH07XG4gICAgZmlyZSh0aGlzLnJlY29yZGVycywgJ29uU3ViZmxvd1JlZ2lzdGVyZWQnLCBldmVudCwgRkxPV19GQUlMVVJFKTtcbiAgfVxuXG4gIG9uTG9vcCh0YXJnZXRTdGFnZTogc3RyaW5nLCBpdGVyYXRpb246IG51bWJlciwgZGVzY3JpcHRpb24/OiBzdHJpbmcsIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0KTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGV2ZW50ID0geyB0YXJnZXQ6IHRhcmdldFN0YWdlLCBpdGVyYXRpb24sIGRlc2NyaXB0aW9uLCB0cmF2ZXJzYWxDb250ZXh0IH07XG4gICAgZmlyZSh0aGlzLnJlY29yZGVycywgJ29uTG9vcCcsIGV2ZW50LCBGTE9XX0ZBSUxVUkUpO1xuICB9XG5cbiAgb25CcmVhayhcbiAgICBzdGFnZU5hbWU6IHN0cmluZyxcbiAgICB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dCxcbiAgICByZWFzb24/OiBzdHJpbmcsXG4gICAgcHJvcGFnYXRlZEZyb21TdWJmbG93Pzogc3RyaW5nLFxuICApOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgZXZlbnQ6IEZsb3dCcmVha0V2ZW50ID0ge1xuICAgICAgc3RhZ2VOYW1lLFxuICAgICAgLi4uKHRyYXZlcnNhbENvbnRleHQgJiYgeyB0cmF2ZXJzYWxDb250ZXh0IH0pLFxuICAgICAgLi4uKHJlYXNvbiAhPT0gdW5kZWZpbmVkICYmIHsgcmVhc29uIH0pLFxuICAgICAgLi4uKHByb3BhZ2F0ZWRGcm9tU3ViZmxvdyAhPT0gdW5kZWZpbmVkICYmIHsgcHJvcGFnYXRlZEZyb21TdWJmbG93IH0pLFxuICAgIH07XG4gICAgZmlyZSh0aGlzLnJlY29yZGVycywgJ29uQnJlYWsnLCBldmVudCwgRkxPV19GQUlMVVJFKTtcbiAgfVxuXG4gIG9uRXJyb3IoXG4gICAgc3RhZ2VOYW1lOiBzdHJpbmcsXG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcsXG4gICAgc3RydWN0dXJlZEVycm9yOiBTdHJ1Y3R1cmVkRXJyb3JJbmZvLFxuICAgIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0LFxuICApOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgZXZlbnQgPSB7IHN0YWdlTmFtZSwgbWVzc2FnZTogZXJyb3JNZXNzYWdlLCBzdHJ1Y3R1cmVkRXJyb3IsIHRyYXZlcnNhbENvbnRleHQsIGNoYW5uZWw6ICdmbG93JyBhcyBjb25zdCB9O1xuICAgIGZpcmUodGhpcy5yZWNvcmRlcnMsICdvbkVycm9yJywgZXZlbnQsIEZMT1dfRkFJTFVSRSk7XG4gIH1cblxuICBvbkF0dGVtcHQoXG4gICAgc3RhZ2VOYW1lOiBzdHJpbmcsXG4gICAgc3RhZ2VJZDogc3RyaW5nLFxuICAgIHJlY29yZDogQXR0ZW1wdFJlY29yZCxcbiAgICBzdHJ1Y3R1cmVkRXJyb3I6IFN0cnVjdHVyZWRFcnJvckluZm8gfCB1bmRlZmluZWQsXG4gICAgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQsXG4gICk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBldmVudDogRmxvd0F0dGVtcHRFdmVudCA9IHtcbiAgICAgIHN0YWdlTmFtZSxcbiAgICAgIHN0YWdlSWQsXG4gICAgICByZWNvcmQsXG4gICAgICAuLi4oc3RydWN0dXJlZEVycm9yICE9PSB1bmRlZmluZWQgJiYgeyBzdHJ1Y3R1cmVkRXJyb3IgfSksXG4gICAgICB0cmF2ZXJzYWxDb250ZXh0LFxuICAgICAgY2hhbm5lbDogJ2Zsb3cnIGFzIGNvbnN0LFxuICAgIH07XG4gICAgZmlyZSh0aGlzLnJlY29yZGVycywgJ29uQXR0ZW1wdCcsIGV2ZW50LCBGTE9XX0ZBSUxVUkUpO1xuICB9XG5cbiAgb25TdGFnZVJldHJ5KFxuICAgIHN0YWdlTmFtZTogc3RyaW5nLFxuICAgIHN0YWdlSWQ6IHN0cmluZyxcbiAgICBhdHRlbXB0OiBudW1iZXIsXG4gICAgbWF4QXR0ZW1wdHM6IG51bWJlcixcbiAgICBkZWxheU1zOiBudW1iZXIsXG4gICAgc3RydWN0dXJlZEVycm9yOiBTdHJ1Y3R1cmVkRXJyb3JJbmZvLFxuICAgIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0LFxuICApOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgZXZlbnQ6IEZsb3dTdGFnZVJldHJ5RXZlbnQgPSB7XG4gICAgICBzdGFnZU5hbWUsXG4gICAgICBzdGFnZUlkLFxuICAgICAgYXR0ZW1wdCxcbiAgICAgIG1heEF0dGVtcHRzLFxuICAgICAgZGVsYXlNcyxcbiAgICAgIG1lc3NhZ2U6IHN0cnVjdHVyZWRFcnJvci5tZXNzYWdlLFxuICAgICAgc3RydWN0dXJlZEVycm9yLFxuICAgICAgdHJhdmVyc2FsQ29udGV4dCxcbiAgICAgIGNoYW5uZWw6ICdmbG93JyBhcyBjb25zdCxcbiAgICB9O1xuICAgIGZpcmUodGhpcy5yZWNvcmRlcnMsICdvblN0YWdlUmV0cnknLCBldmVudCwgRkxPV19GQUlMVVJFKTtcbiAgfVxuXG4gIG9uVGhyb3R0bGVkKFxuICAgIHN0YWdlTmFtZTogc3RyaW5nLFxuICAgIHN0YWdlSWQ6IHN0cmluZyxcbiAgICBzdHJ1Y3R1cmVkRXJyb3I6IFN0cnVjdHVyZWRFcnJvckluZm8sXG4gICAgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQsXG4gICk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBldmVudDogRmxvd1Rocm90dGxlZEV2ZW50ID0ge1xuICAgICAgc3RhZ2VOYW1lLFxuICAgICAgc3RhZ2VJZCxcbiAgICAgIG1lc3NhZ2U6IHN0cnVjdHVyZWRFcnJvci5tZXNzYWdlLFxuICAgICAgc3RydWN0dXJlZEVycm9yLFxuICAgICAgdHJhdmVyc2FsQ29udGV4dCxcbiAgICAgIGNoYW5uZWw6ICdmbG93JyBhcyBjb25zdCxcbiAgICB9O1xuICAgIGZpcmUodGhpcy5yZWNvcmRlcnMsICdvblRocm90dGxlZCcsIGV2ZW50LCBGTE9XX0ZBSUxVUkUpO1xuICB9XG5cbiAgb25QYXVzZShcbiAgICBzdGFnZU5hbWU6IHN0cmluZyxcbiAgICBzdGFnZUlkOiBzdHJpbmcsXG4gICAgcGF1c2VEYXRhOiB1bmtub3duLFxuICAgIHN1YmZsb3dQYXRoOiByZWFkb25seSBzdHJpbmdbXSxcbiAgICB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dCxcbiAgKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGV2ZW50ID0geyBzdGFnZU5hbWUsIHN0YWdlSWQsIHBhdXNlRGF0YSwgc3ViZmxvd1BhdGgsIHRyYXZlcnNhbENvbnRleHQsIGNoYW5uZWw6ICdmbG93JyBhcyBjb25zdCB9O1xuICAgIGZpcmUodGhpcy5yZWNvcmRlcnMsICdvblBhdXNlJywgZXZlbnQsIEZMT1dfRkFJTFVSRSk7XG4gIH1cblxuICBvblJlc3VtZShzdGFnZU5hbWU6IHN0cmluZywgc3RhZ2VJZDogc3RyaW5nLCBoYXNJbnB1dDogYm9vbGVhbiwgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgZXZlbnQgPSB7IHN0YWdlTmFtZSwgc3RhZ2VJZCwgaGFzSW5wdXQsIHRyYXZlcnNhbENvbnRleHQsIGNoYW5uZWw6ICdmbG93JyBhcyBjb25zdCB9O1xuICAgIGZpcmUodGhpcy5yZWNvcmRlcnMsICdvblJlc3VtZScsIGV2ZW50LCBGTE9XX0ZBSUxVUkUpO1xuICB9XG5cbiAgb25SdW5TdGFydChpbnB1dDogdW5rbm93biwgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgZXZlbnQgPSB7IHBheWxvYWQ6IGlucHV0LCB0cmF2ZXJzYWxDb250ZXh0IH07XG4gICAgZmlyZSh0aGlzLnJlY29yZGVycywgJ29uUnVuU3RhcnQnLCBldmVudCwgRkxPV19GQUlMVVJFKTtcbiAgfVxuXG4gIG9uUnVuRW5kKG91dHB1dDogdW5rbm93biwgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgZXZlbnQgPSB7IHBheWxvYWQ6IG91dHB1dCwgdHJhdmVyc2FsQ29udGV4dCB9O1xuICAgIGZpcmUodGhpcy5yZWNvcmRlcnMsICdvblJ1bkVuZCcsIGV2ZW50LCBGTE9XX0ZBSUxVUkUpO1xuICB9XG5cbiAgb25SdW5GYWlsZWQoZXJyb3I6IFN0cnVjdHVyZWRFcnJvckluZm8sIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0LCBmYWlsdXJlPzogVGVybWluYWxGYWlsdXJlQ29udGV4dCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBldmVudDogRmxvd1J1bkZhaWxlZEV2ZW50ID0geyBzdHJ1Y3R1cmVkRXJyb3I6IGVycm9yLCB0cmF2ZXJzYWxDb250ZXh0IH07XG4gICAgLy8gS2VlcCB0aGUgbmV3IHNhZmUgcHJvamVjdGlvbiBpbnRhY3QgYWNyb3NzIHJlY29yZGVyIGZhbi1vdXQsIHdpdGhvdXRcbiAgICAvLyBjaGFuZ2luZyB0aGUgZXN0YWJsaXNoZWQgbXV0YWJpbGl0eSBvZiB0aGUgb3RoZXIgZXZlbnQgZmllbGRzLlxuICAgIGlmIChmYWlsdXJlKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXZlbnQsICdmYWlsdXJlJywgeyB2YWx1ZTogZmFpbHVyZSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcbiAgICBmaXJlKHRoaXMucmVjb3JkZXJzLCAnb25SdW5GYWlsZWQnLCBldmVudCwgRkxPV19GQUlMVVJFKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHNlbnRlbmNlcyBmcm9tIGFuIGF0dGFjaGVkIE5hcnJhdGl2ZUZsb3dSZWNvcmRlciAobG9va2VkIHVwIGJ5IElEKS5cbiAgICogQ2FsbGVycyB0aGF0IG5lZWQgc2VudGVuY2VzIHNob3VsZCBhdHRhY2ggYSBOYXJyYXRpdmVGbG93UmVjb3JkZXIgd2l0aCBpZCAnbmFycmF0aXZlJ1xuICAgKiBhbmQgcmV0cmlldmUgaXQgZGlyZWN0bHkgdmlhIGdldFJlY29yZGVyQnlJZCgpIGlmIHRoZXkgbmVlZCB0eXBlZCBhY2Nlc3MuXG4gICAqL1xuICBnZXRTZW50ZW5jZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IG5hcnJhdGl2ZSA9IHRoaXMuZ2V0UmVjb3JkZXJCeUlkPE5hcnJhdGl2ZUZsb3dSZWNvcmRlcj4oJ25hcnJhdGl2ZScpO1xuICAgIHJldHVybiBuYXJyYXRpdmU/LmdldFNlbnRlbmNlcygpID8/IFtdO1xuICB9XG59XG4iXX0=
@@ -8,7 +8,7 @@
8
8
  * Consumers who want different narrative behavior (windowed loops, adaptive
9
9
  * summarization, etc.) can replace this with a different FlowRecorder.
10
10
  */
11
- import type { FlowBreakEvent, FlowDecisionEvent, FlowErrorEvent, FlowForkEvent, FlowLoopEvent, FlowNextEvent, FlowPauseEvent, FlowRecorder, FlowResumeEvent, FlowSelectedEvent, FlowStageEvent, FlowStageRetryEvent, FlowSubflowEvent } from './types.js';
11
+ import type { FlowAttemptEvent, FlowBreakEvent, FlowDecisionEvent, FlowErrorEvent, FlowForkEvent, FlowLoopEvent, FlowNextEvent, FlowPauseEvent, FlowRecorder, FlowResumeEvent, FlowSelectedEvent, FlowStageEvent, FlowSubflowEvent } from './types.js';
12
12
  export declare class NarrativeFlowRecorder implements FlowRecorder {
13
13
  readonly id: string;
14
14
  private sentences;
@@ -20,6 +20,14 @@ export declare class NarrativeFlowRecorder implements FlowRecorder {
20
20
  * `onStageExecuted` for that stage stays silent — an arrival is told ONCE.
21
21
  */
22
22
  private announcedArrival;
23
+ /**
24
+ * A retried stage's attempt sentences, by `runtimeStageId`, held until the stage's own outcome is known. A
25
+ * stage that FAILED tells its attempts beneath its error sentence — where the combined narrative puts them
26
+ * (`CombinedNarrativeRecorder · flushAttempts`), so the two built-in narratives tell a failure in one order,
27
+ * the stop reason last. A stage that completed (or paused) tells them where they always stood: before the
28
+ * sentence its completion adds.
29
+ */
30
+ private readonly heldAttempts;
23
31
  constructor(id?: string);
24
32
  onStageExecuted(event: FlowStageEvent): void;
25
33
  onNext(_event: FlowNextEvent): void;
@@ -31,11 +39,22 @@ export declare class NarrativeFlowRecorder implements FlowRecorder {
31
39
  onLoop(event: FlowLoopEvent): void;
32
40
  onBreak(event: FlowBreakEvent): void;
33
41
  onError(event: FlowErrorEvent): void;
34
- onStageRetry(event: FlowStageRetryEvent): void;
42
+ /**
43
+ * One sentence per attempt of a retried stage (10.1) — its outcome, duration, cause and decision. It replaces
44
+ * the 9.15 retry sentence (`onStageRetry` is no longer narrated here): the attempt line already says
45
+ * "retrying", and says it for the attempt that stopped the series too. Held until the stage's outcome is
46
+ * known ({@link heldAttempts}); an event with no `runtimeStageId` has nothing to hold it by, so it is told now.
47
+ */
48
+ onAttempt(event: FlowAttemptEvent): void;
35
49
  onPause(event: FlowPauseEvent): void;
36
50
  onResume(event: FlowResumeEvent): void;
37
- /** Returns a defensive copy of accumulated sentences. */
51
+ /**
52
+ * Returns a defensive copy of accumulated sentences. Attempt sentences still held — read mid-stage, before the
53
+ * stage's outcome — come last, so nothing the run did is ever missing from the copy.
54
+ */
38
55
  getSentences(): string[];
39
56
  /** Clears accumulated sentences. Useful for reuse across runs. */
40
57
  clear(): void;
58
+ /** Tell the held attempt sentences of `runtimeStageId`, in order, and stop holding them. */
59
+ private releaseAttempts;
41
60
  }
@@ -8,7 +8,7 @@
8
8
  * Consumers who want different narrative behavior (windowed loops, adaptive
9
9
  * summarization, etc.) can replace this with a different FlowRecorder.
10
10
  */
11
- import { breakSentence, decisionSentence, errorSentence, forkSentence, loopSentence, nextStageSentence, pauseSentence, resumeSentence, validationDetails, validationSentence, } from './formatting/sentences.js';
11
+ import { attemptSentence, breakSentence, decisionSentence, errorSentence, forkSentence, isAttemptTold, loopSentence, nextStageSentence, pauseSentence, resumeSentence, validationDetails, validationSentence, } from './formatting/sentences.js';
12
12
  export class NarrativeFlowRecorder {
13
13
  id;
14
14
  sentences = [];
@@ -20,10 +20,19 @@ export class NarrativeFlowRecorder {
20
20
  * `onStageExecuted` for that stage stays silent — an arrival is told ONCE.
21
21
  */
22
22
  announcedArrival;
23
+ /**
24
+ * A retried stage's attempt sentences, by `runtimeStageId`, held until the stage's own outcome is known. A
25
+ * stage that FAILED tells its attempts beneath its error sentence — where the combined narrative puts them
26
+ * (`CombinedNarrativeRecorder · flushAttempts`), so the two built-in narratives tell a failure in one order,
27
+ * the stop reason last. A stage that completed (or paused) tells them where they always stood: before the
28
+ * sentence its completion adds.
29
+ */
30
+ heldAttempts = new Map();
23
31
  constructor(id) {
24
32
  this.id = id ?? 'narrative';
25
33
  }
26
34
  onStageExecuted(event) {
35
+ this.releaseAttempts(event.traversalContext?.runtimeStageId);
27
36
  const announced = this.announcedArrival;
28
37
  this.announcedArrival = undefined;
29
38
  // Only LINEAR stages produce a "moved on to X" narrative line.
@@ -44,14 +53,17 @@ export class NarrativeFlowRecorder {
44
53
  // Keep this event silent, as CombinedNarrativeRecorder · onNext does.
45
54
  }
46
55
  onDecision(event) {
56
+ this.releaseAttempts(event.traversalContext?.runtimeStageId);
47
57
  this.sentences.push(decisionSentence(event));
48
58
  this.stageNames.push(event.decider);
49
59
  }
50
60
  onFork(event) {
61
+ this.releaseAttempts(event.traversalContext?.runtimeStageId);
51
62
  this.sentences.push(forkSentence(event));
52
63
  this.stageNames.push(undefined);
53
64
  }
54
65
  onSelected(event) {
66
+ this.releaseAttempts(event.traversalContext?.runtimeStageId);
55
67
  const names = event.selected.join(', ');
56
68
  this.sentences.push(`${event.selected.length} of ${event.total} paths were selected: ${names}.`);
57
69
  this.stageNames.push(undefined);
@@ -86,14 +98,33 @@ export class NarrativeFlowRecorder {
86
98
  }
87
99
  this.sentences.push(sentence);
88
100
  this.stageNames.push(event.stageName);
101
+ // A failed stage's attempts go beneath its error sentence, the stop reason last.
102
+ this.releaseAttempts(event.traversalContext?.runtimeStageId);
89
103
  }
90
- onStageRetry(event) {
91
- const wait = event.delayMs > 0 ? ` after waiting ${event.delayMs}ms` : '';
92
- this.sentences.push(`Attempt ${event.attempt} of ${event.maxAttempts} at ${event.stageName} failed ` +
93
- `(${event.message}), so it tried again${wait}.`);
94
- this.stageNames.push(event.stageName);
104
+ /**
105
+ * One sentence per attempt of a retried stage (10.1) — its outcome, duration, cause and decision. It replaces
106
+ * the 9.15 retry sentence (`onStageRetry` is no longer narrated here): the attempt line already says
107
+ * "retrying", and says it for the attempt that stopped the series too. Held until the stage's outcome is
108
+ * known ({@link heldAttempts}); an event with no `runtimeStageId` has nothing to hold it by, so it is told now.
109
+ */
110
+ onAttempt(event) {
111
+ if (!isAttemptTold(event.record))
112
+ return;
113
+ const sentence = attemptSentence(event.stageName, event.record);
114
+ const runtimeStageId = event.traversalContext?.runtimeStageId;
115
+ if (runtimeStageId === undefined) {
116
+ this.sentences.push(sentence);
117
+ this.stageNames.push(event.stageName);
118
+ return;
119
+ }
120
+ const held = this.heldAttempts.get(runtimeStageId);
121
+ if (held)
122
+ held.push({ sentence, stageName: event.stageName });
123
+ else
124
+ this.heldAttempts.set(runtimeStageId, [{ sentence, stageName: event.stageName }]);
95
125
  }
96
126
  onPause(event) {
127
+ this.releaseAttempts(event.traversalContext?.runtimeStageId);
97
128
  this.sentences.push(pauseSentence(event));
98
129
  this.stageNames.push(event.stageName);
99
130
  }
@@ -102,15 +133,36 @@ export class NarrativeFlowRecorder {
102
133
  this.stageNames.push(event.stageName);
103
134
  this.announcedArrival = event.stageName;
104
135
  }
105
- /** Returns a defensive copy of accumulated sentences. */
136
+ /**
137
+ * Returns a defensive copy of accumulated sentences. Attempt sentences still held — read mid-stage, before the
138
+ * stage's outcome — come last, so nothing the run did is ever missing from the copy.
139
+ */
106
140
  getSentences() {
107
- return [...this.sentences];
141
+ const held = [];
142
+ for (const series of this.heldAttempts.values())
143
+ for (const { sentence } of series)
144
+ held.push(sentence);
145
+ return [...this.sentences, ...held];
108
146
  }
109
147
  /** Clears accumulated sentences. Useful for reuse across runs. */
110
148
  clear() {
111
149
  this.sentences = [];
112
150
  this.stageNames = [];
113
151
  this.announcedArrival = undefined;
152
+ this.heldAttempts.clear();
153
+ }
154
+ /** Tell the held attempt sentences of `runtimeStageId`, in order, and stop holding them. */
155
+ releaseAttempts(runtimeStageId) {
156
+ if (runtimeStageId === undefined)
157
+ return;
158
+ const held = this.heldAttempts.get(runtimeStageId);
159
+ if (!held)
160
+ return;
161
+ this.heldAttempts.delete(runtimeStageId);
162
+ for (const { sentence, stageName } of held) {
163
+ this.sentences.push(sentence);
164
+ this.stageNames.push(stageName);
165
+ }
114
166
  }
115
167
  }
116
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmFycmF0aXZlRmxvd1JlY29yZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvbmFycmF0aXZlL05hcnJhdGl2ZUZsb3dSZWNvcmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7O0dBU0c7QUFFSCxPQUFPLEVBQ0wsYUFBYSxFQUNiLGdCQUFnQixFQUNoQixhQUFhLEVBQ2IsWUFBWSxFQUNaLFlBQVksRUFDWixpQkFBaUIsRUFDakIsYUFBYSxFQUNiLGNBQWMsRUFDZCxpQkFBaUIsRUFDakIsa0JBQWtCLEdBQ25CLE1BQU0sMkJBQTJCLENBQUM7QUFpQm5DLE1BQU0sT0FBTyxxQkFBcUI7SUFDdkIsRUFBRSxDQUFTO0lBQ1osU0FBUyxHQUFhLEVBQUUsQ0FBQztJQUNqQyx5RUFBeUU7SUFDakUsVUFBVSxHQUEyQixFQUFFLENBQUM7SUFDaEQ7Ozs7T0FJRztJQUNLLGdCQUFnQixDQUFxQjtJQUU3QyxZQUFZLEVBQVc7UUFDckIsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksV0FBVyxDQUFDO0lBQzlCLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBcUI7UUFDbkMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQ3hDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUM7UUFDbEMsK0RBQStEO1FBQy9ELDhEQUE4RDtRQUM5RCwyREFBMkQ7UUFDM0QsNkRBQTZEO1FBQzdELDJCQUEyQjtRQUMzQixJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssUUFBUTtZQUFFLE9BQU87UUFDekMsSUFBSSxTQUFTLEtBQUssS0FBSyxDQUFDLFNBQVM7WUFBRSxPQUFPO1FBQzFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMs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QUMsU0FBUyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELGtFQUFrRTtJQUNsRSxLQUFLO1FBQ0gsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztJQUNwQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE5hcnJhdGl2ZUZsb3dSZWNvcmRlciDigJQgRGVmYXVsdCBGbG93UmVjb3JkZXIgdGhhdCBnZW5lcmF0ZXMgcGxhaW4tRW5nbGlzaCBuYXJyYXRpdmUuXG4gKlxuICogVGhpcyBpcyB0aGUgRmxvd1JlY29yZGVyIGVxdWl2YWxlbnQgb2YgQ29udHJvbEZsb3dOYXJyYXRpdmVHZW5lcmF0b3IuXG4gKiBQcm9kdWNlcyB0aGUgc2FtZSBzZW50ZW5jZXMsIHNhbWUgZm9ybWF0LCBzYW1lIGJlaGF2aW9yIOKAlCBidXQgYXMgYVxuICogcGx1Z2dhYmxlIEZsb3dSZWNvcmRlciB0aGF0IGNhbiBiZSBzd2FwcGVkLCBleHRlbmRlZCwgb3IgY29tcG9zZWQuXG4gKlxuICogQ29uc3VtZXJzIHdobyB3YW50IGRpZmZlcmVudCBuYXJyYXRpdmUgYmVoYXZpb3IgKHdpbmRvd2VkIGxvb3BzLCBhZGFwdGl2ZVxuICogc3VtbWFyaXphdGlvbiwgZXRjLikgY2FuIHJlcGxhY2UgdGhpcyB3aXRoIGEgZGlmZmVyZW50IEZsb3dSZWNvcmRlci5cbiAqL1xuXG5pbXBvcnQge1xuICBicmVha1NlbnRlbmNlLFxuICBkZWNpc2lvblNlbnRlbmNlLFxuICBlcnJvclNlbnRlbmNlLFxuICBmb3JrU2VudGVuY2UsXG4gIGxvb3BTZW50ZW5jZSxcbiAgbmV4dFN0YWdlU2VudGVuY2UsXG4gIHBhdXNlU2VudGVuY2UsXG4gIHJlc3VtZVNlbnRlbmNlLFxuICB2YWxpZGF0aW9uRGV0YWlscyxcbiAgdmFsaWRhdGlvblNlbnRlbmNlLFxufSBmcm9tICcuL2Zvcm1hdHRpbmcvc2VudGVuY2VzLmpzJztcbmltcG9ydCB0eXBlIHtcbiAgRmxvd0JyZWFrRXZlbnQsXG4gIEZsb3dEZWNpc2lvbkV2ZW50LFxuICBGbG93RXJyb3JFdmVudCxcbiAgRmxvd0ZvcmtFdmVudCxcbiAgRmxvd0xvb3BFdmVudCxcbiAgRmxvd05leHRFdmVudCxcbiAgRmxvd1BhdXNlRXZlbnQsXG4gIEZsb3dSZWNvcmRlcixcbiAgRmxvd1Jlc3VtZUV2ZW50LFxuICBGbG93U2VsZWN0ZWRFdmVudCxcbiAgRmxvd1N0YWdlRXZlbnQsXG4gIEZsb3dTdGFnZVJldHJ5RXZlbnQsXG4gIEZsb3dTdWJmbG93RXZlbnQsXG59IGZyb20gJy4vdHlwZXMuanMnO1xuXG5leHBvcnQgY2xhc3MgTmFycmF0aXZlRmxvd1JlY29yZGVyIGltcGxlbWVudHMgRmxvd1JlY29yZGVyIHtcbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgcHJpdmF0ZSBzZW50ZW5jZXM6IHN0cmluZ1tdID0gW107XG4gIC8qKiBQYXJhbGxlbCBhcnJheTogdGhlIGFjdHVhbCBzdGFnZSBuYW1lIHRoYXQgcHJvZHVjZWQgZWFjaCBzZW50ZW5jZS4gKi9cbiAgcHJpdmF0ZSBzdGFnZU5hbWVzOiAoc3RyaW5nIHwgdW5kZWZpbmVkKVtdID0gW107XG4gIC8qKlxuICAgKiBUaGUgc3RhZ2Ugd2hvc2UgYXJyaXZhbCBgb25Mb29wYCAvIGBvblJlc3VtZWAganVzdCBuYXJyYXRlZC4gSXRzIGNvbXBsZXRpb25cbiAgICogbGluZSB3b3VsZCByZXBlYXQgdGhhdCBhcnJpdmFsIChcIk5leHQsIGl0IG1vdmVkIG9uIHRvIFguXCIpLCBzbyB0aGUgbmV4dFxuICAgKiBgb25TdGFnZUV4ZWN1dGVkYCBmb3IgdGhhdCBzdGFnZSBzdGF5cyBzaWxlbnQg4oCUIGFuIGFycml2YWwgaXMgdG9sZCBPTkNFLlxuICAgKi9cbiAgcHJpdmF0ZSBhbm5vdW5jZWRBcnJpdmFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoaWQ/OiBzdHJpbmcpIHtcbiAgICB0aGlzLmlkID0gaWQgPz8gJ25hcnJhdGl2ZSc7XG4gIH1cblxuICBvblN0YWdlRXhlY3V0ZWQoZXZlbnQ6IEZsb3dTdGFnZUV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgYW5ub3VuY2VkID0gdGhpcy5hbm5vdW5jZWRBcnJpdmFsO1xuICAgIHRoaXMuYW5ub3VuY2VkQXJyaXZhbCA9IHVuZGVmaW5lZDtcbiAgICAvLyBPbmx5IExJTkVBUiBzdGFnZXMgcHJvZHVjZSBhIFwibW92ZWQgb24gdG8gWFwiIG5hcnJhdGl2ZSBsaW5lLlxuICAgIC8vIERlY2lkZXIgLyBmb3JrIC8gc2VsZWN0b3IgLyBzdWJmbG93LW1vdW50IHN0YWdlcyBoYXZlIHRoZWlyXG4gICAgLy8gb3duIGRlZGljYXRlZCBuYXJyYXRpdmUgbGluZXMgZnJvbSBvbkRlY2lzaW9uIC8gb25Gb3JrIC9cbiAgICAvLyBvblNlbGVjdGVkIC8gb25TdWJmbG93RW50cnkg4oCUIGVtaXR0aW5nIGZyb20gaGVyZSB0b28gd291bGRcbiAgICAvLyBkb3VibGUgdXAgdGhlIG5hcnJhdGl2ZS5cbiAgICBpZiAoZXZlbnQuc3RhZ2VUeXBlICE9PSAnbGluZWFyJykgcmV0dXJuO1xuICAgIGlmIChhbm5vdW5jZWQgPT09IGV2ZW50LnN0YWdlTmFtZSkgcmV0dXJuO1xuICAgIHRoaXMuc2VudGVuY2VzLnB1c2gobmV4dFN0YWdlU2VudGVuY2UoZXZlbnQpKTtcbiAgICB0aGlzLnN0YWdlTmFtZXMucHVzaChldmVudC5zdGFnZU5hbWUpO1xuICB9XG5cbiAgb25OZXh0KF9ldmVudDogRmxvd05leHRFdmVudCk6IHZvaWQge1xuICAgIC8vIEFuIGVkZ2UgYW5ub3VuY2VzIGEgZGVzdGluYXRpb24sIG5vdCBpdHMgY29tcGxldGlvbi4gTGluZWFyIHN0YWdlXG4gICAgLy8gc2VudGVuY2VzIGJlbG9uZyB0byBvblN0YWdlRXhlY3V0ZWQ7IG90aGVyIGtpbmRzIGhhdmUgZGVkaWNhdGVkIGhvb2tzLlxuICAgIC8vIEtlZXAgdGhpcyBldmVudCBzaWxlbnQsIGFzIENvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXIgwrcgb25OZXh0IGRvZXMuXG4gIH1cblxuICBvbkRlY2lzaW9uKGV2ZW50OiBGbG93RGVjaXNpb25FdmVudCk6IHZvaWQge1xuICAgIHRoaXMuc2VudGVuY2VzLnB1c2goZGVjaXNpb25TZW50ZW5jZShldmVudCkpO1xuICAgIHRoaXMuc3RhZ2VOYW1lcy5wdXNoKGV2ZW50LmRlY2lkZXIpO1xuICB9XG5cbiAgb25Gb3JrKGV2ZW50OiBGbG93Rm9ya0V2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5zZW50ZW5jZXMucHVzaChmb3JrU2VudGVuY2UoZXZlbnQpKTtcbiAgICB0aGlzLnN0YWdlTmFtZXMucHVzaCh1bmRlZmluZWQpO1xuICB9XG5cbiAgb25TZWxlY3RlZChldmVudDogRmxvd1NlbGVjdGVkRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBuYW1lcyA9IGV2ZW50LnNlbGVjdGVkLmpvaW4oJywgJyk7XG4gICAgdGhpcy5zZW50ZW5jZXMucHVzaChgJHtldmVudC5zZWxlY3RlZC5sZW5ndGh9IG9mICR7ZXZlbnQudG90YWx9IHBhdGhzIHdlcmUgc2VsZWN0ZWQ6ICR7bmFtZXN9LmApO1xuICAgIHRoaXMuc3RhZ2VOYW1lcy5wdXNoKHVuZGVmaW5lZCk7XG4gIH1cblxuICBvblN1YmZsb3dFbnRyeShldmVudDogRmxvd1N1YmZsb3dFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5kZXNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zZW50ZW5jZXMucHVzaChgRW50ZXJpbmcgdGhlICR7ZXZlbnQubmFtZX0gc3ViZmxvdzogJHtldmVudC5kZXNjcmlwdGlvbn0uYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VudGVuY2VzLnB1c2goYEVudGVyaW5nIHRoZSAke2V2ZW50Lm5hbWV9IHN1YmZsb3cuYCk7XG4gICAgfVxuICAgIHRoaXMuc3RhZ2VOYW1lcy5wdXNoKGV2ZW50Lm5hbWUpO1xuICB9XG5cbiAgb25TdWJmbG93RXhpdChldmVudDogRmxvd1N1YmZsb3dFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuc2VudGVuY2VzLnB1c2goYEV4aXRpbmcgdGhlICR7ZXZlbnQubmFtZX0gc3ViZmxvdy5gKTtcbiAgICB0aGlzLnN0YWdlTmFtZXMucHVzaChldmVudC5uYW1lKTtcbiAgfVxuXG4gIG9uTG9vcChldmVudDogRmxvd0xvb3BFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuc2VudGVuY2VzLnB1c2gobG9vcFNlbnRlbmNlKGV2ZW50KSk7XG4gICAgdGhpcy5zdGFnZU5hbWVzLnB1c2goZXZlbnQudGFyZ2V0KTtcbiAgICB0aGlzLmFubm91bmNlZEFycml2YWwgPSBldmVudC50YXJnZXQ7XG4gIH1cblxuICBvbkJyZWFrKGV2ZW50OiBGbG93QnJlYWtFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuc2VudGVuY2VzLnB1c2goYnJlYWtTZW50ZW5jZShldmVudCkpO1xuICAgIHRoaXMuc3RhZ2VOYW1lcy5wdXNoKGV2ZW50LnN0YWdlTmFtZSk7XG4gIH1cblxuICBvbkVycm9yKGV2ZW50OiBGbG93RXJyb3JFdmVudCk6IHZvaWQge1xuICAgIGxldCBzZW50ZW5jZSA9IGVycm9yU2VudGVuY2UoZXZlbnQpO1xuXG4gICAgLy8gRW5yaWNoIHdpdGggZmllbGQtbGV2ZWwgaXNzdWVzIHdoZW4gYXZhaWxhYmxlXG4gICAgaWYgKGV2ZW50LnN0cnVjdHVyZWRFcnJvci5pc3N1ZXMgJiYgZXZlbnQuc3RydWN0dXJlZEVycm9yLmlzc3Vlcy5sZW5ndGggPiAwKSB7XG4gICAgICBzZW50ZW5jZSArPSB2YWxpZGF0aW9uU2VudGVuY2UodmFsaWRhdGlvbkRldGFpbHMoZXZlbnQuc3RydWN0dXJlZEVycm9yLmlzc3VlcykpO1xuICAgIH1cblxuICAgIHRoaXMuc2VudGVuY2VzLnB1c2goc2VudGVuY2UpO1xuICAgIHRoaXMuc3RhZ2VOYW1lcy5wdXNoKGV2ZW50LnN0YWdlTmFtZSk7XG4gIH1cblxuICBvblN0YWdlUmV0cnkoZXZlbnQ6IEZsb3dTdGFnZVJldHJ5RXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB3YWl0ID0gZXZlbnQuZGVsYXlNcyA+IDAgPyBgIGFmdGVyIHdhaXRpbmcgJHtldmVudC5kZWxheU1zfW1zYCA6ICcnO1xuICAgIHRoaXMuc2VudGVuY2VzLnB1c2goXG4gICAgICBgQXR0ZW1wdCAke2V2ZW50LmF0dGVtcHR9IG9mICR7ZXZlbnQubWF4QXR0ZW1wdHN9IGF0ICR7ZXZlbnQuc3RhZ2VOYW1lfSBmYWlsZWQgYCArXG4gICAgICAgIGAoJHtldmVudC5tZXNzYWdlfSksIHNvIGl0IHRyaWVkIGFnYWluJHt3YWl0fS5gLFxuICAgICk7XG4gICAgdGhpcy5zdGFnZU5hbWVzLnB1c2goZXZlbnQuc3RhZ2VOYW1lKTtcbiAgfVxuXG4gIG9uUGF1c2UoZXZlbnQ6IEZsb3dQYXVzZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5zZW50ZW5jZXMucHVzaChwYXVzZVNlbnRlbmNlKGV2ZW50KSk7XG4gICAgdGhpcy5zdGFnZU5hbWVzLnB1c2goZXZlbnQuc3RhZ2VOYW1lKTtcbiAgfVxuXG4gIG9uUmVzdW1lKGV2ZW50OiBGbG93UmVzdW1lRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnNlbnRlbmNlcy5wdXNoKHJlc3VtZVNlbnRlbmNlKGV2ZW50KSk7XG4gICAgdGhpcy5zdGFnZU5hbWVzLnB1c2goZXZlbnQuc3RhZ2VOYW1lKTtcbiAgICB0aGlzLmFubm91bmNlZEFycml2YWwgPSBldmVudC5zdGFnZU5hbWU7XG4gIH1cblxuICAvKiogUmV0dXJucyBhIGRlZmVuc2l2ZSBjb3B5IG9mIGFjY3VtdWxhdGVkIHNlbnRlbmNlcy4gKi9cbiAgZ2V0U2VudGVuY2VzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuc2VudGVuY2VzXTtcbiAgfVxuXG4gIC8qKiBDbGVhcnMgYWNjdW11bGF0ZWQgc2VudGVuY2VzLiBVc2VmdWwgZm9yIHJldXNlIGFjcm9zcyBydW5zLiAqL1xuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLnNlbnRlbmNlcyA9IFtdO1xuICAgIHRoaXMuc3RhZ2VOYW1lcyA9IFtdO1xuICAgIHRoaXMuYW5ub3VuY2VkQXJyaXZhbCA9IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
168
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmFycmF0aXZlRmxvd1JlY29yZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvbmFycmF0aXZlL05hcnJhdGl2ZUZsb3dSZWNvcmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7O0dBU0c7QUFFSCxPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLFlBQVksRUFDWixhQUFhLEVBQ2IsWUFBWSxFQUNaLGlCQUFpQixFQUNqQixhQUFhLEVBQ2IsY0FBYyxFQUNkLGlCQUFpQixFQUNqQixrQkFBa0IsR0FDbkIsTUFBTSwyQkFBMkIsQ0FBQztBQWlCbkMsTUFBTSxPQUFPLHFCQUFxQjtJQUN2QixFQUFFLENBQVM7SUFDWixTQUFTLEdBQWEsRUFBRSxDQUFDO0lBQ2pDLHlFQUF5RTtJQUNqRSxVQUFVLEdBQTJCLEVBQUUsQ0FBQztJQUNoRDs7OztPQUlHO0lBQ0ssZ0JBQWdCLENBQXFCO0lBQzdDOzs7Ozs7T0FNRztJQUNjLFlBQVksR0FBRyxJQUFJLEdBQUcsRUFBMEQsQ0FBQztJQUVsRyxZQUFZLEVBQVc7UUFDckIsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksV0FBVyxDQUFDO0lBQzlCLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBcUI7UUFDbkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDN0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQ3hDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUM7UUFDbEMsK0RBQStEO1FBQy9ELDhEQUE4RDtRQUM5RCwyREFBMkQ7UUFDM0QsNkRBQTZEO1FBQzdELDJCQUEyQjtRQUMzQixJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssUUFBUTtZQUFFLE9BQU87UUFDekMsSUFBSSxTQUFT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QUFRLENBQUMsQ0FBQztRQUN4RyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELGtFQUFrRTtJQUNsRSxLQUFLO1FBQ0gsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztRQUNsQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCw0RkFBNEY7SUFDcEYsZUFBZSxDQUFDLGNBQWtDO1FBQ3hELElBQUksY0FBYyxLQUFLLFNBQVM7WUFBRSxPQUFPO1FBQ3pDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTztRQUNsQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN6QyxLQUFLLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUM7WUFDM0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDOUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTmFycmF0aXZlRmxvd1JlY29yZGVyIOKAlCBEZWZhdWx0IEZsb3dSZWNvcmRlciB0aGF0IGdlbmVyYXRlcyBwbGFpbi1FbmdsaXNoIG5hcnJhdGl2ZS5cbiAqXG4gKiBUaGlzIGlzIHRoZSBGbG93UmVjb3JkZXIgZXF1aXZhbGVudCBvZiBDb250cm9sRmxvd05hcnJhdGl2ZUdlbmVyYXRvci5cbiAqIFByb2R1Y2VzIHRoZSBzYW1lIHNlbnRlbmNlcywgc2FtZSBmb3JtYXQsIHNhbWUgYmVoYXZpb3Ig4oCUIGJ1dCBhcyBhXG4gKiBwbHVnZ2FibGUgRmxvd1JlY29yZGVyIHRoYXQgY2FuIGJlIHN3YXBwZWQsIGV4dGVuZGVkLCBvciBjb21wb3NlZC5cbiAqXG4gKiBDb25zdW1lcnMgd2hvIHdhbnQgZGlmZmVyZW50IG5hcnJhdGl2ZSBiZWhhdmlvciAod2luZG93ZWQgbG9vcHMsIGFkYXB0aXZlXG4gKiBzdW1tYXJpemF0aW9uLCBldGMuKSBjYW4gcmVwbGFjZSB0aGlzIHdpdGggYSBkaWZmZXJlbnQgRmxvd1JlY29yZGVyLlxuICovXG5cbmltcG9ydCB7XG4gIGF0dGVtcHRTZW50ZW5jZSxcbiAgYnJlYWtTZW50ZW5jZSxcbiAgZGVjaXNpb25TZW50ZW5jZSxcbiAgZXJyb3JTZW50ZW5jZSxcbiAgZm9ya1NlbnRlbmNlLFxuICBpc0F0dGVtcHRUb2xkLFxuICBsb29wU2VudGVuY2UsXG4gIG5leHRTdGFnZVNlbnRlbmNlLFxuICBwYXVzZVNlbnRlbmNlLFxuICByZXN1bWVTZW50ZW5jZSxcbiAgdmFsaWRhdGlvbkRldGFpbHMsXG4gIHZhbGlkYXRpb25TZW50ZW5jZSxcbn0gZnJvbSAnLi9mb3JtYXR0aW5nL3NlbnRlbmNlcy5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIEZsb3dBdHRlbXB0RXZlbnQsXG4gIEZsb3dCcmVha0V2ZW50LFxuICBGbG93RGVjaXNpb25FdmVudCxcbiAgRmxvd0Vycm9yRXZlbnQsXG4gIEZsb3dGb3JrRXZlbnQsXG4gIEZsb3dMb29wRXZlbnQsXG4gIEZsb3dOZXh0RXZlbnQsXG4gIEZsb3dQYXVzZUV2ZW50LFxuICBGbG93UmVjb3JkZXIsXG4gIEZsb3dSZXN1bWVFdmVudCxcbiAgRmxvd1NlbGVjdGVkRXZlbnQsXG4gIEZsb3dTdGFnZUV2ZW50LFxuICBGbG93U3ViZmxvd0V2ZW50LFxufSBmcm9tICcuL3R5cGVzLmpzJztcblxuZXhwb3J0IGNsYXNzIE5hcnJhdGl2ZUZsb3dSZWNvcmRlciBpbXBsZW1lbnRzIEZsb3dSZWNvcmRlciB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHByaXZhdGUgc2VudGVuY2VzOiBzdHJpbmdbXSA9IFtdO1xuICAvKiogUGFyYWxsZWwgYXJyYXk6IHRoZSBhY3R1YWwgc3RhZ2UgbmFtZSB0aGF0IHByb2R1Y2VkIGVhY2ggc2VudGVuY2UuICovXG4gIHByaXZhdGUgc3RhZ2VOYW1lczogKHN0cmluZyB8IHVuZGVmaW5lZClbXSA9IFtdO1xuICAvKipcbiAgICogVGhlIHN0YWdlIHdob3NlIGFycml2YWwgYG9uTG9vcGAgLyBgb25SZXN1bWVgIGp1c3QgbmFycmF0ZWQuIEl0cyBjb21wbGV0aW9uXG4gICAqIGxpbmUgd291bGQgcmVwZWF0IHRoYXQgYXJyaXZhbCAoXCJOZXh0LCBpdCBtb3ZlZCBvbiB0byBYLlwiKSwgc28gdGhlIG5leHRcbiAgICogYG9uU3RhZ2VFeGVjdXRlZGAgZm9yIHRoYXQgc3RhZ2Ugc3RheXMgc2lsZW50IOKAlCBhbiBhcnJpdmFsIGlzIHRvbGQgT05DRS5cbiAgICovXG4gIHByaXZhdGUgYW5ub3VuY2VkQXJyaXZhbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogQSByZXRyaWVkIHN0YWdlJ3MgYXR0ZW1wdCBzZW50ZW5jZXMsIGJ5IGBydW50aW1lU3RhZ2VJZGAsIGhlbGQgdW50aWwgdGhlIHN0YWdlJ3Mgb3duIG91dGNvbWUgaXMga25vd24uIEFcbiAgICogc3RhZ2UgdGhhdCBGQUlMRUQgdGVsbHMgaXRzIGF0dGVtcHRzIGJlbmVhdGggaXRzIGVycm9yIHNlbnRlbmNlIOKAlCB3aGVyZSB0aGUgY29tYmluZWQgbmFycmF0aXZlIHB1dHMgdGhlbVxuICAgKiAoYENvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXIgwrcgZmx1c2hBdHRlbXB0c2ApLCBzbyB0aGUgdHdvIGJ1aWx0LWluIG5hcnJhdGl2ZXMgdGVsbCBhIGZhaWx1cmUgaW4gb25lIG9yZGVyLFxuICAgKiB0aGUgc3RvcCByZWFzb24gbGFzdC4gQSBzdGFnZSB0aGF0IGNvbXBsZXRlZCAob3IgcGF1c2VkKSB0ZWxscyB0aGVtIHdoZXJlIHRoZXkgYWx3YXlzIHN0b29kOiBiZWZvcmUgdGhlXG4gICAqIHNlbnRlbmNlIGl0cyBjb21wbGV0aW9uIGFkZHMuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGhlbGRBdHRlbXB0cyA9IG5ldyBNYXA8c3RyaW5nLCBBcnJheTx7IHNlbnRlbmNlOiBzdHJpbmc7IHN0YWdlTmFtZTogc3RyaW5nIH0+PigpO1xuXG4gIGNvbnN0cnVjdG9yKGlkPzogc3RyaW5nKSB7XG4gICAgdGhpcy5pZCA9IGlkID8/ICduYXJyYXRpdmUnO1xuICB9XG5cbiAgb25TdGFnZUV4ZWN1dGVkKGV2ZW50OiBGbG93U3RhZ2VFdmVudCk6IHZvaWQge1xuICAgIHRoaXMucmVsZWFzZUF0dGVtcHRzKGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnJ1bnRpbWVTdGFnZUlkKTtcbiAgICBjb25zdCBhbm5vdW5jZWQgPSB0aGlzLmFubm91bmNlZEFycml2YWw7XG4gICAgdGhpcy5hbm5vdW5jZWRBcnJpdmFsID0gdW5kZWZpbmVkO1xuICAgIC8vIE9ubHkgTElORUFSIHN0YWdlcyBwcm9kdWNlIGEgXCJtb3ZlZCBvbiB0byBYXCIgbmFycmF0aXZlIGxpbmUuXG4gICAgLy8gRGVjaWRlciAvIGZvcmsgLyBzZWxlY3RvciAvIHN1YmZsb3ctbW91bnQgc3RhZ2VzIGhhdmUgdGhlaXJcbiAgICAvLyBvd24gZGVkaWNhdGVkIG5hcnJhdGl2ZSBsaW5lcyBmcm9tIG9uRGVjaXNpb24gLyBvbkZvcmsgL1xuICAgIC8vIG9uU2VsZWN0ZWQgLyBvblN1YmZsb3dFbnRyeSDigJQgZW1pdHRpbmcgZnJvbSBoZXJlIHRvbyB3b3VsZFxuICAgIC8vIGRvdWJsZSB1cCB0aGUgbmFycmF0aXZlLlxuICAgIGlmIChldmVudC5zdGFnZVR5cGUgIT09ICdsaW5lYXInKSByZXR1cm47XG4gICAgaWYgKGFubm91bmNlZCA9PT0gZXZlbnQuc3RhZ2VOYW1lKSByZXR1cm47XG4gICAgdGhpcy5zZW50ZW5jZXMucHVzaChuZXh0U3RhZ2VTZW50ZW5jZShldmVudCkpO1xuICAgIHRoaXMuc3RhZ2VOYW1lcy5wdXNoKGV2ZW50LnN0YWdlTmFtZSk7XG4gIH1cblxuICBvbk5leHQoX2V2ZW50OiBGbG93TmV4dEV2ZW50KTogdm9pZCB7XG4gICAgLy8gQW4gZWRnZSBhbm5vdW5jZXMgYSBkZXN0aW5hdGlvbiwgbm90IGl0cyBjb21wbGV0aW9uLiBMaW5lYXIgc3RhZ2VcbiAgICAvLyBzZW50ZW5jZXMgYmVsb25nIHRvIG9uU3RhZ2VFeGVjdXRlZDsgb3RoZXIga2luZHMgaGF2ZSBkZWRpY2F0ZWQgaG9va3MuXG4gICAgLy8gS2VlcCB0aGlzIGV2ZW50IHNpbGVudCwgYXMgQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlciDCtyBvbk5leHQgZG9lcy5cbiAgfVxuXG4gIG9uRGVjaXNpb24oZXZlbnQ6IEZsb3dEZWNpc2lvbkV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5yZWxlYXNlQXR0ZW1wdHMoZXZlbnQudHJhdmVyc2FsQ29udGV4dD8ucnVudGltZVN0YWdlSWQpO1xuICAgIHRoaXMuc2VudGVuY2VzLnB1c2goZGVjaXNpb25TZW50ZW5jZShldmVudCkpO1xuICAgIHRoaXMuc3RhZ2VOYW1lcy5wdXNoKGV2ZW50LmRlY2lkZXIpO1xuICB9XG5cbiAgb25Gb3JrKGV2ZW50OiBGbG93Rm9ya0V2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5yZWxlYXNlQXR0ZW1wdHMoZXZlbnQudHJhdmVyc2FsQ29udGV4dD8ucnVudGltZVN0YWdlSWQpO1xuICAgIHRoaXMuc2VudGVuY2VzLnB1c2goZm9ya1NlbnRlbmNlKGV2ZW50KSk7XG4gICAgdGhpcy5zdGFnZU5hbWVzLnB1c2godW5kZWZpbmVkKTtcbiAgfVxuXG4gIG9uU2VsZWN0ZWQoZXZlbnQ6IEZsb3dTZWxlY3RlZEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5yZWxlYXNlQXR0ZW1wdHMoZXZlbnQudHJhdmVyc2FsQ29udGV4dD8ucnVudGltZVN0YWdlSWQpO1xuICAgIGNvbnN0IG5hbWVzID0gZXZlbnQuc2VsZWN0ZWQuam9pbignLCAnKTtcbiAgICB0aGlzLnNlbnRlbmNlcy5wdXNoKGAke2V2ZW50LnNlbGVjdGVkLmxlbmd0aH0gb2YgJHtldmVudC50b3RhbH0gcGF0aHMgd2VyZSBzZWxlY3RlZDogJHtuYW1lc30uYCk7XG4gICAgdGhpcy5zdGFnZU5hbWVzLnB1c2godW5kZWZpbmVkKTtcbiAgfVxuXG4gIG9uU3ViZmxvd0VudHJ5KGV2ZW50OiBGbG93U3ViZmxvd0V2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmRlc2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnNlbnRlbmNlcy5wdXNoKGBFbnRlcmluZyB0aGUgJHtldmVudC5uYW1lfSBzdWJmbG93OiAke2V2ZW50LmRlc2NyaXB0aW9ufS5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZW50ZW5jZXMucHVzaChgRW50ZXJpbmcgdGhlICR7ZXZlbnQubmFtZX0gc3ViZmxvdy5gKTtcbiAgICB9XG4gICAgdGhpcy5zdGFnZU5hbWVzLnB1c2goZXZlbnQubmFtZSk7XG4gIH1cblxuICBvblN1YmZsb3dFeGl0KGV2ZW50OiBGbG93U3ViZmxvd0V2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5zZW50ZW5jZXMucHVzaChgRXhpdGluZyB0aGUgJHtldmVudC5uYW1lfSBzdWJmbG93LmApO1xuICAgIHRoaXMuc3RhZ2VOYW1lcy5wdXNoKGV2ZW50Lm5hbWUpO1xuICB9XG5cbiAgb25Mb29wKGV2ZW50OiBGbG93TG9vcEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5zZW50ZW5jZXMucHVzaChsb29wU2VudGVuY2UoZXZlbnQpKTtcbiAgICB0aGlzLnN0YWdlTmFtZXMucHVzaChldmVudC50YXJnZXQpO1xuICAgIHRoaXMuYW5ub3VuY2VkQXJyaXZhbCA9IGV2ZW50LnRhcmdldDtcbiAgfVxuXG4gIG9uQnJlYWsoZXZlbnQ6IEZsb3dCcmVha0V2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5zZW50ZW5jZXMucHVzaChicmVha1NlbnRlbmNlKGV2ZW50KSk7XG4gICAgdGhpcy5zdGFnZU5hbWVzLnB1c2goZXZlbnQuc3RhZ2VOYW1lKTtcbiAgfVxuXG4gIG9uRXJyb3IoZXZlbnQ6IEZsb3dFcnJvckV2ZW50KTogdm9pZCB7XG4gICAgbGV0IHNlbnRlbmNlID0gZXJyb3JTZW50ZW5jZShldmVudCk7XG5cbiAgICAvLyBFbnJpY2ggd2l0aCBmaWVsZC1sZXZlbCBpc3N1ZXMgd2hlbiBhdmFpbGFibGVcbiAgICBpZiAoZXZlbnQuc3RydWN0dXJlZEVycm9yLmlzc3VlcyAmJiBldmVudC5zdHJ1Y3R1cmVkRXJyb3IuaXNzdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHNlbnRlbmNlICs9IHZhbGlkYXRpb25TZW50ZW5jZSh2YWxpZGF0aW9uRGV0YWlscyhldmVudC5zdHJ1Y3R1cmVkRXJyb3IuaXNzdWVzKSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZW50ZW5jZXMucHVzaChzZW50ZW5jZSk7XG4gICAgdGhpcy5zdGFnZU5hbWVzLnB1c2goZXZlbnQuc3RhZ2VOYW1lKTtcbiAgICAvLyBBIGZhaWxlZCBzdGFnZSdzIGF0dGVtcHRzIGdvIGJlbmVhdGggaXRzIGVycm9yIHNlbnRlbmNlLCB0aGUgc3RvcCByZWFzb24gbGFzdC5cbiAgICB0aGlzLnJlbGVhc2VBdHRlbXB0cyhldmVudC50cmF2ZXJzYWxDb250ZXh0Py5ydW50aW1lU3RhZ2VJZCk7XG4gIH1cblxuICAvKipcbiAgICogT25lIHNlbnRlbmNlIHBlciBhdHRlbXB0IG9mIGEgcmV0cmllZCBzdGFnZSAoMTAuMSkg4oCUIGl0cyBvdXRjb21lLCBkdXJhdGlvbiwgY2F1c2UgYW5kIGRlY2lzaW9uLiBJdCByZXBsYWNlc1xuICAgKiB0aGUgOS4xNSByZXRyeSBzZW50ZW5jZSAoYG9uU3RhZ2VSZXRyeWAgaXMgbm8gbG9uZ2VyIG5hcnJhdGVkIGhlcmUpOiB0aGUgYXR0ZW1wdCBsaW5lIGFscmVhZHkgc2F5c1xuICAgKiBcInJldHJ5aW5nXCIsIGFuZCBzYXlzIGl0IGZvciB0aGUgYXR0ZW1wdCB0aGF0IHN0b3BwZWQgdGhlIHNlcmllcyB0b28uIEhlbGQgdW50aWwgdGhlIHN0YWdlJ3Mgb3V0Y29tZSBpc1xuICAgKiBrbm93biAoe0BsaW5rIGhlbGRBdHRlbXB0c30pOyBhbiBldmVudCB3aXRoIG5vIGBydW50aW1lU3RhZ2VJZGAgaGFzIG5vdGhpbmcgdG8gaG9sZCBpdCBieSwgc28gaXQgaXMgdG9sZCBub3cuXG4gICAqL1xuICBvbkF0dGVtcHQoZXZlbnQ6IEZsb3dBdHRlbXB0RXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIWlzQXR0ZW1wdFRvbGQoZXZlbnQucmVjb3JkKSkgcmV0dXJuO1xuICAgIGNvbnN0IHNlbnRlbmNlID0gYXR0ZW1wdFNlbnRlbmNlKGV2ZW50LnN0YWdlTmFtZSwgZXZlbnQucmVjb3JkKTtcbiAgICBjb25zdCBydW50aW1lU3RhZ2VJZCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnJ1bnRpbWVTdGFnZUlkO1xuICAgIGlmIChydW50aW1lU3RhZ2VJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnNlbnRlbmNlcy5wdXNoKHNlbnRlbmNlKTtcbiAgICAgIHRoaXMuc3RhZ2VOYW1lcy5wdXNoKGV2ZW50LnN0YWdlTmFtZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGhlbGQgPSB0aGlzLmhlbGRBdHRlbXB0cy5nZXQocnVudGltZVN0YWdlSWQpO1xuICAgIGlmIChoZWxkKSBoZWxkLnB1c2goeyBzZW50ZW5jZSwgc3RhZ2VOYW1lOiBldmVudC5zdGFnZU5hbWUgfSk7XG4gICAgZWxzZSB0aGlzLmhlbGRBdHRlbXB0cy5zZXQocnVudGltZVN0YWdlSWQsIFt7IHNlbnRlbmNlLCBzdGFnZU5hbWU6IGV2ZW50LnN0YWdlTmFtZSB9XSk7XG4gIH1cblxuICBvblBhdXNlKGV2ZW50OiBGbG93UGF1c2VFdmVudCk6IHZvaWQge1xuICAgIHRoaXMucmVsZWFzZUF0dGVtcHRzKGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnJ1bnRpbWVTdGFnZUlkKTtcbiAgICB0aGlzLnNlbnRlbmNlcy5wdXNoKHBhdXNlU2VudGVuY2UoZXZlbnQpKTtcbiAgICB0aGlzLnN0YWdlTmFtZXMucHVzaChldmVudC5zdGFnZU5hbWUpO1xuICB9XG5cbiAgb25SZXN1bWUoZXZlbnQ6IEZsb3dSZXN1bWVFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuc2VudGVuY2VzLnB1c2gocmVzdW1lU2VudGVuY2UoZXZlbnQpKTtcbiAgICB0aGlzLnN0YWdlTmFtZXMucHVzaChldmVudC5zdGFnZU5hbWUpO1xuICAgIHRoaXMuYW5ub3VuY2VkQXJyaXZhbCA9IGV2ZW50LnN0YWdlTmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgZGVmZW5zaXZlIGNvcHkgb2YgYWNjdW11bGF0ZWQgc2VudGVuY2VzLiBBdHRlbXB0IHNlbnRlbmNlcyBzdGlsbCBoZWxkIOKAlCByZWFkIG1pZC1zdGFnZSwgYmVmb3JlIHRoZVxuICAgKiBzdGFnZSdzIG91dGNvbWUg4oCUIGNvbWUgbGFzdCwgc28gbm90aGluZyB0aGUgcnVuIGRpZCBpcyBldmVyIG1pc3NpbmcgZnJvbSB0aGUgY29weS5cbiAgICovXG4gIGdldFNlbnRlbmNlcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgaGVsZDogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHNlcmllcyBvZiB0aGlzLmhlbGRBdHRlbXB0cy52YWx1ZXMoKSkgZm9yIChjb25zdCB7IHNlbnRlbmNlIH0gb2Ygc2VyaWVzKSBoZWxkLnB1c2goc2VudGVuY2UpO1xuICAgIHJldHVybiBbLi4udGhpcy5zZW50ZW5jZXMsIC4uLmhlbGRdO1xuICB9XG5cbiAgLyoqIENsZWFycyBhY2N1bXVsYXRlZCBzZW50ZW5jZXMuIFVzZWZ1bCBmb3IgcmV1c2UgYWNyb3NzIHJ1bnMuICovXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuc2VudGVuY2VzID0gW107XG4gICAgdGhpcy5zdGFnZU5hbWVzID0gW107XG4gICAgdGhpcy5hbm5vdW5jZWRBcnJpdmFsID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuaGVsZEF0dGVtcHRzLmNsZWFyKCk7XG4gIH1cblxuICAvKiogVGVsbCB0aGUgaGVsZCBhdHRlbXB0IHNlbnRlbmNlcyBvZiBgcnVudGltZVN0YWdlSWRgLCBpbiBvcmRlciwgYW5kIHN0b3AgaG9sZGluZyB0aGVtLiAqL1xuICBwcml2YXRlIHJlbGVhc2VBdHRlbXB0cyhydW50aW1lU3RhZ2VJZDogc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgaWYgKHJ1bnRpbWVTdGFnZUlkID09PSB1bmRlZmluZWQpIHJldHVybjtcbiAgICBjb25zdCBoZWxkID0gdGhpcy5oZWxkQXR0ZW1wdHMuZ2V0KHJ1bnRpbWVTdGFnZUlkKTtcbiAgICBpZiAoIWhlbGQpIHJldHVybjtcbiAgICB0aGlzLmhlbGRBdHRlbXB0cy5kZWxldGUocnVudGltZVN0YWdlSWQpO1xuICAgIGZvciAoY29uc3QgeyBzZW50ZW5jZSwgc3RhZ2VOYW1lIH0gb2YgaGVsZCkge1xuICAgICAgdGhpcy5zZW50ZW5jZXMucHVzaChzZW50ZW5jZSk7XG4gICAgICB0aGlzLnN0YWdlTmFtZXMucHVzaChzdGFnZU5hbWUpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -18,6 +18,7 @@ export declare class NullControlFlowNarrativeGenerator implements IControlFlowNa
18
18
  onLoop(): void;
19
19
  onBreak(): void;
20
20
  onError(): void;
21
+ onAttempt(): void;
21
22
  onStageRetry(): void;
22
23
  onPause(): void;
23
24
  onResume(): void;
@@ -18,6 +18,7 @@ export class NullControlFlowNarrativeGenerator {
18
18
  onLoop() { }
19
19
  onBreak() { }
20
20
  onError() { }
21
+ onAttempt() { }
21
22
  onStageRetry() { }
22
23
  onPause() { }
23
24
  onResume() { }
@@ -28,4 +29,4 @@ export class NullControlFlowNarrativeGenerator {
28
29
  return [];
29
30
  }
30
31
  }
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTnVsbENvbnRyb2xGbG93TmFycmF0aXZlR2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvbmFycmF0aXZlL051bGxDb250cm9sRmxvd05hcnJhdGl2ZUdlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFJSCx5REFBeUQ7QUFDekQsTUFBTSxPQUFPLGlDQUFpQztJQUM1QyxlQUFlLEtBQVUsQ0FBQztJQUMxQixNQUFNLEtBQVUsQ0FBQztJQUNqQixVQUFVLEtBQVUsQ0FBQztJQUNyQixNQUFNLEtBQVUsQ0FBQztJQUNqQixVQUFVLEtBQVUsQ0FBQztJQUNyQixjQUFjLEtBQVUsQ0FBQztJQUN6QixhQUFhLEtBQVUsQ0FBQztJQUN4QixtQkFBbUIsS0FBVSxDQUFDO0lBQzlCLE1BQU0sS0FBVSxDQUFDO0lBQ2pCLE9BQU8sS0FBVSxDQUFDO0lBQ2xCLE9BQU8sS0FBVSxDQUFDO0lBQ2xCLFlBQVksS0FBVSxDQUFDO0lBQ3ZCLE9BQU8sS0FBVSxDQUFDO0lBQ2xCLFFBQVEsS0FBVSxDQUFDO0lBQ25CLFVBQVUsS0FBVSxDQUFDO0lBQ3JCLFFBQVEsS0FBVSxDQUFDO0lBQ25CLFdBQVcsS0FBVSxDQUFDO0lBQ3RCLFlBQVk7UUFDVixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTnVsbENvbnRyb2xGbG93TmFycmF0aXZlR2VuZXJhdG9yIOKAlCBaZXJvLWNvc3Qgbm8tb3AgKE51bGwgT2JqZWN0IHBhdHRlcm4pLlxuICpcbiAqIFdoZW4gbmFycmF0aXZlIGlzIGRpc2FibGVkLCBoYW5kbGVycyBjYWxsIHRoaXMgdW5jb25kaXRpb25hbGx5LlxuICogQWxsIG1ldGhvZHMgYXJlIGVtcHR5IGJvZGllcyDigJQgemVybyBhbGxvY2F0aW9uLCB6ZXJvIHN0cmluZyBmb3JtYXR0aW5nLlxuICogZ2V0U2VudGVuY2VzKCkgcmV0dXJucyBhIGJhcmUgW10gbGl0ZXJhbCB0byBhdm9pZCBldmVuIGEgc2luZ2xlIGFycmF5IGFsbG9jYXRpb24uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBJQ29udHJvbEZsb3dOYXJyYXRpdmUgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uICovXG5leHBvcnQgY2xhc3MgTnVsbENvbnRyb2xGbG93TmFycmF0aXZlR2VuZXJhdG9yIGltcGxlbWVudHMgSUNvbnRyb2xGbG93TmFycmF0aXZlIHtcbiAgb25TdGFnZUV4ZWN1dGVkKCk6IHZvaWQge31cbiAgb25OZXh0KCk6IHZvaWQge31cbiAgb25EZWNpc2lvbigpOiB2b2lkIHt9XG4gIG9uRm9yaygpOiB2b2lkIHt9XG4gIG9uU2VsZWN0ZWQoKTogdm9pZCB7fVxuICBvblN1YmZsb3dFbnRyeSgpOiB2b2lkIHt9XG4gIG9uU3ViZmxvd0V4aXQoKTogdm9pZCB7fVxuICBvblN1YmZsb3dSZWdpc3RlcmVkKCk6IHZvaWQge31cbiAgb25Mb29wKCk6IHZvaWQge31cbiAgb25CcmVhaygpOiB2b2lkIHt9XG4gIG9uRXJyb3IoKTogdm9pZCB7fVxuICBvblN0YWdlUmV0cnkoKTogdm9pZCB7fVxuICBvblBhdXNlKCk6IHZvaWQge31cbiAgb25SZXN1bWUoKTogdm9pZCB7fVxuICBvblJ1blN0YXJ0KCk6IHZvaWQge31cbiAgb25SdW5FbmQoKTogdm9pZCB7fVxuICBvblJ1bkZhaWxlZCgpOiB2b2lkIHt9XG4gIGdldFNlbnRlbmNlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59XG4iXX0=
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTnVsbENvbnRyb2xGbG93TmFycmF0aXZlR2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvbmFycmF0aXZlL051bGxDb250cm9sRmxvd05hcnJhdGl2ZUdlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFJSCx5REFBeUQ7QUFDekQsTUFBTSxPQUFPLGlDQUFpQztJQUM1QyxlQUFlLEtBQVUsQ0FBQztJQUMxQixNQUFNLEtBQVUsQ0FBQztJQUNqQixVQUFVLEtBQVUsQ0FBQztJQUNyQixNQUFNLEtBQVUsQ0FBQztJQUNqQixVQUFVLEtBQVUsQ0FBQztJQUNyQixjQUFjLEtBQVUsQ0FBQztJQUN6QixhQUFhLEtBQVUsQ0FBQztJQUN4QixtQkFBbUIsS0FBVSxDQUFDO0lBQzlCLE1BQU0sS0FBVSxDQUFDO0lBQ2pCLE9BQU8sS0FBVSxDQUFDO0lBQ2xCLE9BQU8sS0FBVSxDQUFDO0lBQ2xCLFNBQVMsS0FBVSxDQUFDO0lBQ3BCLFlBQVksS0FBVSxDQUFDO0lBQ3ZCLE9BQU8sS0FBVSxDQUFDO0lBQ2xCLFFBQVEsS0FBVSxDQUFDO0lBQ25CLFVBQVUsS0FBVSxDQUFDO0lBQ3JCLFFBQVEsS0FBVSxDQUFDO0lBQ25CLFdBQVcsS0FBVSxDQUFDO0lBQ3RCLFlBQVk7UUFDVixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTnVsbENvbnRyb2xGbG93TmFycmF0aXZlR2VuZXJhdG9yIOKAlCBaZXJvLWNvc3Qgbm8tb3AgKE51bGwgT2JqZWN0IHBhdHRlcm4pLlxuICpcbiAqIFdoZW4gbmFycmF0aXZlIGlzIGRpc2FibGVkLCBoYW5kbGVycyBjYWxsIHRoaXMgdW5jb25kaXRpb25hbGx5LlxuICogQWxsIG1ldGhvZHMgYXJlIGVtcHR5IGJvZGllcyDigJQgemVybyBhbGxvY2F0aW9uLCB6ZXJvIHN0cmluZyBmb3JtYXR0aW5nLlxuICogZ2V0U2VudGVuY2VzKCkgcmV0dXJucyBhIGJhcmUgW10gbGl0ZXJhbCB0byBhdm9pZCBldmVuIGEgc2luZ2xlIGFycmF5IGFsbG9jYXRpb24uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBJQ29udHJvbEZsb3dOYXJyYXRpdmUgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uICovXG5leHBvcnQgY2xhc3MgTnVsbENvbnRyb2xGbG93TmFycmF0aXZlR2VuZXJhdG9yIGltcGxlbWVudHMgSUNvbnRyb2xGbG93TmFycmF0aXZlIHtcbiAgb25TdGFnZUV4ZWN1dGVkKCk6IHZvaWQge31cbiAgb25OZXh0KCk6IHZvaWQge31cbiAgb25EZWNpc2lvbigpOiB2b2lkIHt9XG4gIG9uRm9yaygpOiB2b2lkIHt9XG4gIG9uU2VsZWN0ZWQoKTogdm9pZCB7fVxuICBvblN1YmZsb3dFbnRyeSgpOiB2b2lkIHt9XG4gIG9uU3ViZmxvd0V4aXQoKTogdm9pZCB7fVxuICBvblN1YmZsb3dSZWdpc3RlcmVkKCk6IHZvaWQge31cbiAgb25Mb29wKCk6IHZvaWQge31cbiAgb25CcmVhaygpOiB2b2lkIHt9XG4gIG9uRXJyb3IoKTogdm9pZCB7fVxuICBvbkF0dGVtcHQoKTogdm9pZCB7fVxuICBvblN0YWdlUmV0cnkoKTogdm9pZCB7fVxuICBvblBhdXNlKCk6IHZvaWQge31cbiAgb25SZXN1bWUoKTogdm9pZCB7fVxuICBvblJ1blN0YXJ0KCk6IHZvaWQge31cbiAgb25SdW5FbmQoKTogdm9pZCB7fVxuICBvblJ1bkZhaWxlZCgpOiB2b2lkIHt9XG4gIGdldFNlbnRlbmNlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59XG4iXX0=
@@ -1,4 +1,5 @@
1
1
  /** Shared English sentence bodies, with no event capture or recorder state. */
2
+ import type { AttemptRecord } from '../../../attempt/types.js';
2
3
  import type { ValidationIssue } from '../../../schema/errors.js';
3
4
  import type { BreakRenderContext, DecisionRenderContext, ErrorRenderContext, ForkRenderContext, LoopRenderContext, StageRenderContext } from '../narrativeTypes.js';
4
5
  import type { FlowResumeEvent } from '../types.js';
@@ -14,3 +15,25 @@ export declare function validationDetails(issues: readonly ValidationIssue[]): s
14
15
  export declare function errorSentence(ctx: Pick<ErrorRenderContext, 'stageName' | 'message'>): string;
15
16
  /** Callers retain their distinct rules for whether to display empty details. */
16
17
  export declare function validationSentence(details: string): string;
18
+ /**
19
+ * Whether the narrative tells an attempt (P1b). A STAGE series of ONE attempt — a stage run on the attempt runner
20
+ * only because of a `timeoutMs` or the run's deadline — that succeeded or paused says nothing the stage's own line
21
+ * does not, so it is not told (its record is still on the tree and the hook). Every other attempt is — every call
22
+ * and every observed attempt too (P2): the stage's own line never mentions them.
23
+ */
24
+ export declare function isAttemptTold(record: AttemptRecord): boolean;
25
+ /**
26
+ * One attempt of a retried stage, as one sentence (10.1): its outcome and duration, the cause of a failure
27
+ * (`category: message`, the category left out when it is `unknown`), and the decision — the wait before a retry,
28
+ * or why the series stopped. The error is the record's SERVED message, so a redacted error reads redacted here.
29
+ * Under a run deadline the decision also says the time left (P1b).
30
+ *
31
+ * Attempt 1 of 3 at Fetch rate failed in 812ms (rate-limited: 429), retrying in 4s.
32
+ * Attempt 3 of 3 at Fetch rate succeeded in 31ms.
33
+ * Attempt 1 of 4 at Charge card failed in 120ms (permanent: card declined); stopped: retryOn declined.
34
+ * Attempt 2 of 3 at Fetch rate timed out after 40s, retrying in 2s (70s left).
35
+ * Attempt 2 of 4 at Charge card timed out after 20s; stopped: no time left (300ms left, next wait 2s).
36
+ */
37
+ export declare function attemptSentence(stageName: string, record: AttemptRecord): string;
38
+ /** A duration as the narrative says it: whole milliseconds under a second, seconds (one decimal at most) above. */
39
+ export declare function formatDuration(ms: number): string;