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
@@ -0,0 +1,26 @@
1
+ /** Engine-owned attention is collected with retained facts; snapshots only copy this bounded projection. */
2
+ import type { Attention } from 'foottrace';
3
+ import type { AttemptRecord, AttemptSummary } from '../attempt/types.js';
4
+ /** One execution's ownership, pending summary, marks and omission accounting stay in this helper. */
5
+ export declare class StageAttention {
6
+ private marks?;
7
+ private omitted;
8
+ private retryPossible;
9
+ private summary?;
10
+ private terminal?;
11
+ /** A new execution starts fresh; an attempt discard never calls this. No collection is reconstructed. */
12
+ begin(): void;
13
+ /** Called only after the frame retained this attempt. Raw error, target and decision payloads are never read. */
14
+ recordAttempt(record: AttemptRecord, owner: string): void;
15
+ recordSummary(summary: AttemptSummary): void;
16
+ /** A summary-only cut wait has no phantom final attempt; use its actual retained summary. */
17
+ private projectSummary;
18
+ /** Only the explicit retained stage-error path calls this; a diagnostic value never classifies itself. */
19
+ stageFailed(errors: unknown): void;
20
+ attemptDropped(): void;
21
+ /** Keep only bounded exact references; one slot is reserved to disclose omissions. */
22
+ append(attention: Attention): void;
23
+ missing(): void;
24
+ /** Copy already collected bounded marks, never an attempt array, diagnostic bag or execution tree. */
25
+ snapshot(): readonly Attention[];
26
+ }
@@ -0,0 +1,171 @@
1
+ import { buildAttemptId, parseAttemptId } from 'foottrace';
2
+ const MAX_MARKS = 32;
3
+ const MAX_REFERENCES = 16;
4
+ const MAX_REFERENCE_LENGTH = 512;
5
+ const STOPPED_REASONS = new Set(['exhausted', 'declined', 'no-time-left']);
6
+ const MISSING_ATTENTION = Object.freeze({
7
+ kind: 'not-collected',
8
+ reason: 'EVIDENCE_NOT_COLLECTED',
9
+ evidence: Object.freeze([]),
10
+ });
11
+ function validReference(reference) {
12
+ return (typeof reference === 'string' &&
13
+ reference.length > 0 &&
14
+ reference.length <= MAX_REFERENCE_LENGTH &&
15
+ // eslint-disable-next-line no-control-regex -- Match the shared Foottrace evidence-reference boundary.
16
+ !/[\u0000-\u001f\u007f-\u009f]/.test(reference));
17
+ }
18
+ /** Reuse the one attempt grammar, including nested call addresses; never shorten an unaddressable proof. */
19
+ function attemptReference(record, owner) {
20
+ if (typeof record.series !== 'string' ||
21
+ !Number.isSafeInteger(record.attempt) ||
22
+ record.attempt < 1 ||
23
+ record.series.length + String(record.attempt).length + 1 > MAX_REFERENCE_LENGTH)
24
+ return undefined;
25
+ try {
26
+ const candidate = record.series + '@' + record.attempt;
27
+ const parts = parseAttemptId(candidate);
28
+ if (!parts ||
29
+ parts.runtimeStageId !== owner ||
30
+ (record.kind === 'stage' ? parts.call !== undefined : parts.call === undefined))
31
+ return undefined;
32
+ const canonical = buildAttemptId(parts.runtimeStageId, parts.attempt, parts.call);
33
+ return canonical === candidate && validReference(canonical) ? canonical : undefined;
34
+ }
35
+ catch {
36
+ return undefined;
37
+ }
38
+ }
39
+ /** One execution's ownership, pending summary, marks and omission accounting stay in this helper. */
40
+ export class StageAttention {
41
+ marks;
42
+ omitted = false;
43
+ retryPossible = false;
44
+ summary;
45
+ terminal;
46
+ /** A new execution starts fresh; an attempt discard never calls this. No collection is reconstructed. */
47
+ begin() {
48
+ this.marks = undefined;
49
+ this.omitted = false;
50
+ this.retryPossible = false;
51
+ this.summary = undefined;
52
+ this.terminal = undefined;
53
+ }
54
+ /** Called only after the frame retained this attempt. Raw error, target and decision payloads are never read. */
55
+ recordAttempt(record, owner) {
56
+ const reference = attemptReference(record, owner);
57
+ if (record.kind === 'stage' && record.series === owner) {
58
+ if (record.retryLoop === undefined && (record.of ?? 1) > 1)
59
+ this.retryPossible = true;
60
+ if (reference && record.next !== 'retry') {
61
+ this.terminal = { next: record.next, reason: record.reason, effect: record.effect, evidence: reference };
62
+ }
63
+ }
64
+ // The runner calls recordSummary before its final attempt. Finish that pending projection now too.
65
+ this.projectSummary();
66
+ const add = (kind, reason) => {
67
+ if (reference)
68
+ this.append({ kind, reason, evidence: [reference] });
69
+ else
70
+ this.missing();
71
+ };
72
+ if (record.effect === 'unknown')
73
+ add('unknown-effect', 'UNKNOWN_EFFECT_RECORDED');
74
+ if (record.outcome === 'timeout')
75
+ add('timeout', 'TIMEOUT_RECORDED');
76
+ // An SDK's suggested next/reason is not its actual policy; only a later ordinal proves its retry.
77
+ const observed = record.kind === 'observed';
78
+ if ((!observed && record.next === 'retry') || record.attempt > 1)
79
+ add('retried', 'RETRY_RECORDED');
80
+ if (!observed &&
81
+ record.next === 'stop' &&
82
+ STOPPED_REASONS.has(record.reason) &&
83
+ (record.of ?? 1) > 1 &&
84
+ record.retryLoop === undefined)
85
+ add('gave-up', 'RETRY_STOP_RECORDED');
86
+ }
87
+ recordSummary(summary) {
88
+ this.summary = summary;
89
+ this.projectSummary();
90
+ }
91
+ /** A summary-only cut wait has no phantom final attempt; use its actual retained summary. */
92
+ projectSummary() {
93
+ const last = this.summary?.last;
94
+ if (!last)
95
+ return;
96
+ const terminal = this.terminal;
97
+ const matching = terminal?.next === last.next && terminal.reason === last.reason;
98
+ const add = (kind, reason, proof) => {
99
+ const reference = proof ?? 'attemptSummary';
100
+ const key = kind + ':' + reason;
101
+ const marks = this.marks;
102
+ const previous = marks?.get(key);
103
+ if (proof && marks && previous?.evidence.includes('attemptSummary')) {
104
+ marks.set(key, { ...previous, evidence: previous.evidence.filter((item) => item !== 'attemptSummary') });
105
+ }
106
+ this.append({ kind, reason, evidence: [reference] });
107
+ };
108
+ if (last.effect === 'unknown')
109
+ add('unknown-effect', 'UNKNOWN_EFFECT_RECORDED', matching && terminal.effect === 'unknown' ? terminal.evidence : undefined);
110
+ if (this.retryPossible && last.next === 'stop' && STOPPED_REASONS.has(last.reason))
111
+ add('gave-up', 'RETRY_STOP_RECORDED', matching ? terminal.evidence : undefined);
112
+ }
113
+ /** Only the explicit retained stage-error path calls this; a diagnostic value never classifies itself. */
114
+ stageFailed(errors) {
115
+ try {
116
+ const descriptor = errors && typeof errors === 'object'
117
+ ? Object.getOwnPropertyDescriptor(errors, 'stageExecutionError')
118
+ : undefined;
119
+ if (descriptor && Object.hasOwn(descriptor, 'value')) {
120
+ this.append({ kind: 'error', reason: 'ERROR_RECORDED', evidence: ['errors:stageExecutionError'] });
121
+ return;
122
+ }
123
+ }
124
+ catch {
125
+ /* A malformed evidence bag is unavailable, never another stage failure. */
126
+ }
127
+ this.missing();
128
+ }
129
+ attemptDropped() {
130
+ this.append({ kind: 'not-collected', reason: 'EVIDENCE_NOT_COLLECTED', evidence: ['attemptsDropped'] });
131
+ }
132
+ /** Keep only bounded exact references; one slot is reserved to disclose omissions. */
133
+ append(attention) {
134
+ const key = attention.kind + ':' + attention.reason;
135
+ const previous = this.marks?.get(key);
136
+ const references = [...(previous?.evidence ?? [])];
137
+ for (const reference of attention.evidence) {
138
+ if (!validReference(reference)) {
139
+ this.omitted = true;
140
+ continue;
141
+ }
142
+ if (references.includes(reference))
143
+ continue;
144
+ if (references.length >= MAX_REFERENCES) {
145
+ this.omitted = true;
146
+ continue;
147
+ }
148
+ references.push(reference);
149
+ }
150
+ if (attention.kind !== 'not-collected' && references.length === 0) {
151
+ this.omitted = true;
152
+ return;
153
+ }
154
+ if (!previous && (this.marks?.size ?? 0) >= MAX_MARKS - 1) {
155
+ this.omitted = true;
156
+ return;
157
+ }
158
+ (this.marks ??= new Map()).set(key, { kind: attention.kind, reason: attention.reason, evidence: references });
159
+ }
160
+ missing() {
161
+ this.omitted = true;
162
+ }
163
+ /** Copy already collected bounded marks, never an attempt array, diagnostic bag or execution tree. */
164
+ snapshot() {
165
+ const result = [...(this.marks?.values() ?? [])].map((attention) => Object.freeze({ ...attention, evidence: Object.freeze([...attention.evidence]) }));
166
+ if (this.omitted && !result.some((attention) => attention.kind === 'not-collected'))
167
+ result.push(MISSING_ATTENTION);
168
+ return Object.freeze(result);
169
+ }
170
+ }
171
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ZW50aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tZW1vcnkvYXR0ZW50aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBSTNELE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUNyQixNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUM7QUFDMUIsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUM7QUFDakMsTUFBTSxlQUFlLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7QUFDM0UsTUFBTSxpQkFBaUIsR0FBYyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2pELElBQUksRUFBRSxlQUFlO0lBQ3JCLE1BQU0sRUFBRSx3QkFBd0I7SUFDaEMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO0NBQzVCLENBQUMsQ0FBQztBQUVILFNBQVMsY0FBYyxDQUFDLFNBQWtCO0lBQ3hDLE9BQU8sQ0FDTCxPQUFPLFNBQVMsS0FBSyxRQUFRO1FBQzdCLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUNwQixTQUFTLENBQUMsTUFBTSxJQUFJLG9CQUFvQjtRQUN4Qyx1R0FBdUc7UUFDdkcsQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQ2hELENBQUM7QUFDSixDQUFDO0FBRUQsNEdBQTRHO0FBQzVHLFNBQVMsZ0JBQWdCLENBQUMsTUFBcUIsRUFBRSxLQUFhO0lBQzVELElBQ0UsT0FBTyxNQUFNLENBQUMsTUFBTSxLQUFLLFFBQVE7UUFDakMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDckMsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDO1FBQ2xCLE1BQU0sQ0FBQyxNQUFN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LFFBQVEsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ2hILENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDdEIsQ0FBQztJQUVELHNHQUFzRztJQUN0RyxRQUFRO1FBQ04sTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQ2pFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUNsRixDQUFDO1FBQ0YsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksS0FBSyxlQUFlLENBQUM7WUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDcEgsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9CLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBFbmdpbmUtb3duZWQgYXR0ZW50aW9uIGlzIGNvbGxlY3RlZCB3aXRoIHJldGFpbmVkIGZhY3RzOyBzbmFwc2hvdHMgb25seSBjb3B5IHRoaXMgYm91bmRlZCBwcm9qZWN0aW9uLiAqL1xuaW1wb3J0IHR5cGUgeyBBdHRlbnRpb24gfSBmcm9tICdmb290dHJhY2UnO1xuaW1wb3J0IHsgYnVpbGRBdHRlbXB0SWQsIHBhcnNlQXR0ZW1wdElkIH0gZnJvbSAnZm9vdHRyYWNlJztcblxuaW1wb3J0IHR5cGUgeyBBdHRlbXB0UmVjb3JkLCBBdHRlbXB0U3VtbWFyeSB9IGZyb20gJy4uL2F0dGVtcHQvdHlwZXMuanMnO1xuXG5jb25zdCBNQVhfTUFSS1MgPSAzMjtcbmNvbnN0IE1BWF9SRUZFUkVOQ0VTID0gMTY7XG5jb25zdCBNQVhfUkVGRVJFTkNFX0xFTkdUSCA9IDUxMjtcbmNvbnN0IFNUT1BQRURfUkVBU09OUyA9IG5ldyBTZXQoWydleGhhdXN0ZWQnLCAnZGVjbGluZWQnLCAnbm8tdGltZS1sZWZ0J10pO1xuY29uc3QgTUlTU0lOR19BVFRFTlRJT046IEF0dGVudGlvbiA9IE9iamVjdC5mcmVlemUoe1xuICBraW5kOiAnbm90LWNvbGxlY3RlZCcsXG4gIHJlYXNvbjogJ0VWSURFTkNFX05PVF9DT0xMRUNURUQnLFxuICBldmlkZW5jZTogT2JqZWN0LmZyZWV6ZShbXSksXG59KTtcblxuZnVuY3Rpb24gdmFsaWRSZWZlcmVuY2UocmVmZXJlbmNlOiB1bmtub3duKTogcmVmZXJlbmNlIGlzIHN0cmluZyB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHJlZmVyZW5jZSA9PT0gJ3N0cmluZycgJiZcbiAgICByZWZlcmVuY2UubGVuZ3RoID4gMCAmJlxuICAgIHJlZmVyZW5jZS5sZW5ndGggPD0gTUFYX1JFRkVSRU5DRV9MRU5HVEggJiZcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udHJvbC1yZWdleCAtLSBNYXRjaCB0aGUgc2hhcmVkIEZvb3R0cmFjZSBldmlkZW5jZS1yZWZlcmVuY2UgYm91bmRhcnkuXG4gICAgIS9bXFx1MDAwMC1cXHUwMDFmXFx1MDA3Zi1cXHUwMDlmXS8udGVzdChyZWZlcmVuY2UpXG4gICk7XG59XG5cbi8qKiBSZXVzZSB0aGUgb25lIGF0dGVtcHQgZ3JhbW1hciwgaW5jbHVkaW5nIG5lc3RlZCBjYWxsIGFkZHJlc3NlczsgbmV2ZXIgc2hvcnRlbiBhbiB1bmFkZHJlc3NhYmxlIHByb29mLiAqL1xuZnVuY3Rpb24gYXR0ZW1wdFJlZmVyZW5jZShyZWNvcmQ6IEF0dGVtcHRSZWNvcmQsIG93bmVyOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoXG4gICAgdHlwZW9mIHJlY29yZC5zZXJpZXMgIT09ICdzdHJpbmcnIHx8XG4gICAgIU51bWJlci5pc1NhZmVJbnRlZ2VyKHJlY29yZC5hdHRlbXB0KSB8fFxuICAgIHJlY29yZC5hdHRlbXB0IDwgMSB8fFxuICAgIHJlY29yZC5zZXJpZXMubGVuZ3RoICsgU3RyaW5nKHJlY29yZC5hdHRlbXB0KS5sZW5ndGggKyAxID4gTUFYX1JFRkVSRU5DRV9MRU5HVEhcbiAgKVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIHRyeSB7XG4gICAgY29uc3QgY2FuZGlkYXRlID0gcmVjb3JkLnNlcmllcyArICdAJyArIHJlY29yZC5hdHRlbXB0O1xuICAgIGNvbnN0IHBhcnRzID0gcGFyc2VBdHRlbXB0SWQoY2FuZGlkYXRlKTtcbiAgICBpZiAoXG4gICAgICAhcGFydHMgfHxcbiAgICAgIHBhcnRzLnJ1bnRpbWVTdGFnZUlkICE9PSBvd25lciB8fFxuICAgICAgKHJlY29yZC5raW5kID09PSAnc3RhZ2UnID8gcGFydHMuY2FsbCAhPT0gdW5kZWZpbmVkIDogcGFydHMuY2FsbCA9PT0gdW5kZWZpbmVkKVxuICAgIClcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgY2Fub25pY2FsID0gYnVpbGRBdHRlbXB0SWQocGFydHMucnVudGltZVN0YWdlSWQsIHBhcnRzLmF0dGVtcHQsIHBhcnRzLmNhbGwpO1xuICAgIHJldHVybiBjYW5vbmljYWwgPT09IGNhbmRpZGF0ZSAmJiB2YWxpZFJlZmVyZW5jZShjYW5vbmljYWwpID8gY2Fub25pY2FsIDogdW5kZWZpbmVkO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbnR5cGUgVGVybWluYWxQcm9vZiA9IFBpY2s8QXR0ZW1wdFJlY29yZCwgJ25leHQnIHwgJ3JlYXNvbicgfCAnZWZmZWN0Jz4gJiB7IHJlYWRvbmx5IGV2aWRlbmNlOiBzdHJpbmcgfTtcblxuLyoqIE9uZSBleGVjdXRpb24ncyBvd25lcnNoaXAsIHBlbmRpbmcgc3VtbWFyeSwgbWFya3MgYW5kIG9taXNzaW9uIGFjY291bnRpbmcgc3RheSBpbiB0aGlzIGhlbHBlci4gKi9cbmV4cG9ydCBjbGFzcyBTdGFnZUF0dGVudGlvbiB7XG4gIHByaXZhdGUgbWFya3M/OiBNYXA8c3RyaW5nLCBBdHRlbnRpb24+O1xuICBwcml2YXRlIG9taXR0ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZXRyeVBvc3NpYmxlID0gZmFsc2U7XG4gIHByaXZhdGUgc3VtbWFyeT86IEF0dGVtcHRTdW1tYXJ5O1xuICBwcml2YXRlIHRlcm1pbmFsPzogVGVybWluYWxQcm9vZjtcblxuICAvKiogQSBuZXcgZXhlY3V0aW9uIHN0YXJ0cyBmcmVzaDsgYW4gYXR0ZW1wdCBkaXNjYXJkIG5ldmVyIGNhbGxzIHRoaXMuIE5vIGNvbGxlY3Rpb24gaXMgcmVjb25zdHJ1Y3RlZC4gKi9cbiAgYmVnaW4oKTogdm9pZCB7XG4gICAgdGhpcy5tYXJrcyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLm9taXR0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLnJldHJ5UG9zc2libGUgPSBmYWxzZTtcbiAgICB0aGlzLnN1bW1hcnkgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy50ZXJtaW5hbCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKiBDYWxsZWQgb25seSBhZnRlciB0aGUgZnJhbWUgcmV0YWluZWQgdGhpcyBhdHRlbXB0LiBSYXcgZXJyb3IsIHRhcmdldCBhbmQgZGVjaXNpb24gcGF5bG9hZHMgYXJlIG5ldmVyIHJlYWQuICovXG4gIHJlY29yZEF0dGVtcHQocmVjb3JkOiBBdHRlbXB0UmVjb3JkLCBvd25lcjogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgcmVmZXJlbmNlID0gYXR0ZW1wdFJlZmVyZW5jZShyZWNvcmQsIG93bmVyKTtcbiAgICBpZiAocmVjb3JkLmtpbmQgPT09ICdzdGFnZScgJiYgcmVjb3JkLnNlcmllcyA9PT0gb3duZXIpIHtcbiAgICAgIGlmIChyZWNvcmQucmV0cnlMb29wID09PSB1bmRlZmluZWQgJiYgKHJlY29yZC5vZiA/PyAxKSA+IDEpIHRoaXMucmV0cnlQb3NzaWJsZSA9IHRydWU7XG4gICAgICBpZiAocmVmZXJlbmNlICYmIHJlY29yZC5uZXh0ICE9PSAncmV0cnknKSB7XG4gICAgICAgIHRoaXMudGVybWluYWwgPSB7IG5leHQ6IHJlY29yZC5uZXh0LCByZWFzb246IHJlY29yZC5yZWFzb24sIGVmZmVjdDogcmVjb3JkLmVmZmVjdCwgZXZpZGVuY2U6IHJlZmVyZW5jZSB9O1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBUaGUgcnVubmVyIGNhbGxzIHJlY29yZFN1bW1hcnkgYmVmb3JlIGl0cyBmaW5hbCBhdHRlbXB0LiBGaW5pc2ggdGhhdCBwZW5kaW5nIHByb2plY3Rpb24gbm93IHRvby5cbiAgICB0aGlzLnByb2plY3RTdW1tYXJ5KCk7XG4gICAgY29uc3QgYWRkID0gKGtpbmQ6IEF0dGVudGlvblsna2luZCddLCByZWFzb246IEF0dGVudGlvblsncmVhc29uJ10pID0+IHtcbiAgICAgIGlmIChyZWZlcmVuY2UpIHRoaXMuYXBwZW5kKHsga2luZCwgcmVhc29uLCBldmlkZW5jZTogW3JlZmVyZW5jZV0gfSk7XG4gICAgICBlbHNlIHRoaXMubWlzc2luZygpO1xuICAgIH07XG4gICAgaWYgKHJlY29yZC5lZmZlY3QgPT09ICd1bmtub3duJykgYWRkKCd1bmtub3duLWVmZmVjdCcsICdVTktOT1dOX0VGRkVDVF9SRUNPUkRFRCcpO1xuICAgIGlmIChyZWNvcmQub3V0Y29tZSA9PT0gJ3RpbWVvdXQnKSBhZGQoJ3RpbWVvdXQnLCAnVElNRU9VVF9SRUNPUkRFRCcpO1xuICAgIC8vIEFuIFNESydzIHN1Z2dlc3RlZCBuZXh0L3JlYXNvbiBpcyBub3QgaXRzIGFjdHVhbCBwb2xpY3k7IG9ubHkgYSBsYXRlciBvcmRpbmFsIHByb3ZlcyBpdHMgcmV0cnkuXG4gICAgY29uc3Qgb2JzZXJ2ZWQgPSByZWNvcmQua2luZCA9PT0gJ29ic2VydmVkJztcbiAgICBpZiAoKCFvYnNlcnZlZCAmJiByZWNvcmQubmV4dCA9PT0gJ3JldHJ5JykgfHwgcmVjb3JkLmF0dGVtcHQgPiAxKSBhZGQoJ3JldHJpZWQnLCAnUkVUUllfUkVDT1JERUQnKTtcbiAgICBpZiAoXG4gICAgICAhb2JzZXJ2ZWQgJiZcbiAgICAgIHJlY29yZC5uZXh0ID09PSAnc3RvcCcgJiZcbiAgICAgIFNUT1BQRURfUkVBU09OUy5oYXMocmVjb3JkLnJlYXNvbikgJiZcbiAgICAgIChyZWNvcmQub2YgPz8gMSkgPiAxICYmXG4gICAgICByZWNvcmQucmV0cnlMb29wID09PSB1bmRlZmluZWRcbiAgICApXG4gICAgICBhZGQoJ2dhdmUtdXAnLCAnUkVUUllfU1RPUF9SRUNPUkRFRCcpO1xuICB9XG5cbiAgcmVjb3JkU3VtbWFyeShzdW1tYXJ5OiBBdHRlbXB0U3VtbWFyeSk6IHZvaWQge1xuICAgIHRoaXMuc3VtbWFyeSA9IHN1bW1hcnk7XG4gICAgdGhpcy5wcm9qZWN0U3VtbWFyeSgpO1xuICB9XG5cbiAgLyoqIEEgc3VtbWFyeS1vbmx5IGN1dCB3YWl0IGhhcyBubyBwaGFudG9tIGZpbmFsIGF0dGVtcHQ7IHVzZSBpdHMgYWN0dWFsIHJldGFpbmVkIHN1bW1hcnkuICovXG4gIHByaXZhdGUgcHJvamVjdFN1bW1hcnkoKTogdm9pZCB7XG4gICAgY29uc3QgbGFzdCA9IHRoaXMuc3VtbWFyeT8ubGFzdDtcbiAgICBpZiAoIWxhc3QpIHJldHVybjtcbiAgICBjb25zdCB0ZXJtaW5hbCA9IHRoaXMudGVybWluYWw7XG4gICAgY29uc3QgbWF0Y2hpbmcgPSB0ZXJtaW5hbD8ubmV4dCA9PT0gbGFzdC5uZXh0ICYmIHRlcm1pbmFsLnJlYXNvbiA9PT0gbGFzdC5yZWFzb247XG4gICAgY29uc3QgYWRkID0gKGtpbmQ6IEF0dGVudGlvblsna2luZCddLCByZWFzb246IEF0dGVudGlvblsncmVhc29uJ10sIHByb29mPzogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCByZWZlcmVuY2UgPSBwcm9vZiA/PyAnYXR0ZW1wdFN1bW1hcnknO1xuICAgICAgY29uc3Qga2V5ID0ga2luZCArICc6JyArIHJlYXNvbjtcbiAgICAgIGNvbnN0IG1hcmtzID0gdGhpcy5tYXJrcztcbiAgICAgIGNvbnN0IHByZXZpb3VzID0gbWFya3M/LmdldChrZXkpO1xuICAgICAgaWYgKHByb29mICYmIG1hcmtzICYmIHByZXZpb3VzPy5ldmlkZW5jZS5pbmNsdWRlcygnYXR0ZW1wdFN1bW1hcnknKSkge1xuICAgICAgICBtYXJrcy5zZXQoa2V5LCB7IC4uLnByZXZpb3VzLCBldmlkZW5jZTogcHJldmlvdXMuZXZpZGVuY2UuZmlsdGVyKChpdGVtKSA9PiBpdGVtICE9PSAnYXR0ZW1wdFN1bW1hcnknKSB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYXBwZW5kKHsga2luZCwgcmVhc29uLCBldmlkZW5jZTogW3JlZmVyZW5jZV0gfSk7XG4gICAgfTtcbiAgICBpZiAobGFzdC5lZmZlY3QgPT09ICd1bmtub3duJylcbiAgICAgIGFkZChcbiAgICAgICAgJ3Vua25vd24tZWZmZWN0JyxcbiAgICAgICAgJ1VOS05PV05fRUZGRUNUX1JFQ09SREVEJyxcbiAgICAgICAgbWF0Y2hpbmcgJiYgdGVybWluYWwuZWZmZWN0ID09PSAndW5rbm93bicgPyB0ZXJtaW5hbC5ldmlkZW5jZSA6IHVuZGVmaW5lZCxcbiAgICAgICk7XG4gICAgaWYgKHRoaXMucmV0cnlQb3NzaWJsZSAmJiBsYXN0Lm5leHQgPT09ICdzdG9wJyAmJiBTVE9QUEVEX1JFQVNPTlMuaGFzKGxhc3QucmVhc29uKSlcbiAgICAgIGFkZCgnZ2F2ZS11cCcsICdSRVRSWV9TVE9QX1JFQ09SREVEJywgbWF0Y2hpbmcgPyB0ZXJtaW5hbC5ldmlkZW5jZSA6IHVuZGVmaW5lZCk7XG4gIH1cblxuICAvKiogT25seSB0aGUgZXhwbGljaXQgcmV0YWluZWQgc3RhZ2UtZXJyb3IgcGF0aCBjYWxscyB0aGlzOyBhIGRpYWdub3N0aWMgdmFsdWUgbmV2ZXIgY2xhc3NpZmllcyBpdHNlbGYuICovXG4gIHN0YWdlRmFpbGVkKGVycm9yczogdW5rbm93bik6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZXNjcmlwdG9yID1cbiAgICAgICAgZXJyb3JzICYmIHR5cGVvZiBlcnJvcnMgPT09ICdvYmplY3QnXG4gICAgICAgICAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGVycm9ycywgJ3N0YWdlRXhlY3V0aW9uRXJyb3InKVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKGRlc2NyaXB0b3IgJiYgT2JqZWN0Lmhhc093bihkZXNjcmlwdG9yLCAndmFsdWUnKSkge1xuICAgICAgICB0aGlzLmFwcGVuZCh7IGtpbmQ6ICdlcnJvcicsIHJlYXNvbjogJ0VSUk9SX1JFQ09SREVEJywgZXZpZGVuY2U6IFsnZXJyb3JzOnN0YWdlRXhlY3V0aW9uRXJyb3InXSB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLyogQSBtYWxmb3JtZWQgZXZpZGVuY2UgYmFnIGlzIHVuYXZhaWxhYmxlLCBuZXZlciBhbm90aGVyIHN0YWdlIGZhaWx1cmUuICovXG4gICAgfVxuICAgIHRoaXMubWlzc2luZygpO1xuICB9XG5cbiAgYXR0ZW1wdERyb3BwZWQoKTogdm9pZCB7XG4gICAgdGhpcy5hcHBlbmQoeyBraW5kOiAnbm90LWNvbGxlY3RlZCcsIHJlYXNvbjogJ0VWSURFTkNFX05PVF9DT0xMRUNURUQnLCBldmlkZW5jZTogWydhdHRlbXB0c0Ryb3BwZWQnXSB9KTtcbiAgfVxuXG4gIC8qKiBLZWVwIG9ubHkgYm91bmRlZCBleGFjdCByZWZlcmVuY2VzOyBvbmUgc2xvdCBpcyByZXNlcnZlZCB0byBkaXNjbG9zZSBvbWlzc2lvbnMuICovXG4gIGFwcGVuZChhdHRlbnRpb246IEF0dGVudGlvbik6IHZvaWQge1xuICAgIGNvbnN0IGtleSA9IGF0dGVudGlvbi5raW5kICsgJzonICsgYXR0ZW50aW9uLnJlYXNvbjtcbiAgICBjb25zdCBwcmV2aW91cyA9IHRoaXMubWFya3M/LmdldChrZXkpO1xuICAgIGNvbnN0IHJlZmVyZW5jZXMgPSBbLi4uKHByZXZpb3VzPy5ldmlkZW5jZSA/PyBbXSldO1xuICAgIGZvciAoY29uc3QgcmVmZXJlbmNlIG9mIGF0dGVudGlvbi5ldmlkZW5jZSkge1xuICAgICAgaWYgKCF2YWxpZFJlZmVyZW5jZShyZWZlcmVuY2UpKSB7XG4gICAgICAgIHRoaXMub21pdHRlZCA9IHRydWU7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJlZmVyZW5jZXMuaW5jbHVkZXMocmVmZXJlbmNlKSkgY29udGludWU7XG4gICAgICBpZiAocmVmZXJlbmNlcy5sZW5ndGggPj0gTUFYX1JFRkVSRU5DRVMpIHtcbiAgICAgICAgdGhpcy5vbWl0dGVkID0gdHJ1ZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByZWZlcmVuY2VzLnB1c2gocmVmZXJlbmNlKTtcbiAgICB9XG4gICAgaWYgKGF0dGVudGlvbi5raW5kICE9PSAnbm90LWNvbGxlY3RlZCcgJiYgcmVmZXJlbmNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMub21pdHRlZCA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghcHJldmlvdXMgJiYgKHRoaXMubWFya3M/LnNpemUgPz8gMCkgPj0gTUFYX01BUktTIC0gMSkge1xuICAgICAgdGhpcy5vbWl0dGVkID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgKHRoaXMubWFya3MgPz89IG5ldyBNYXAoKSkuc2V0KGtleSwgeyBraW5kOiBhdHRlbnRpb24ua2luZCwgcmVhc29uOiBhdHRlbnRpb24ucmVhc29uLCBldmlkZW5jZTogcmVmZXJlbmNlcyB9KTtcbiAgfVxuXG4gIG1pc3NpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5vbWl0dGVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBDb3B5IGFscmVhZHkgY29sbGVjdGVkIGJvdW5kZWQgbWFya3MsIG5ldmVyIGFuIGF0dGVtcHQgYXJyYXksIGRpYWdub3N0aWMgYmFnIG9yIGV4ZWN1dGlvbiB0cmVlLiAqL1xuICBzbmFwc2hvdCgpOiByZWFkb25seSBBdHRlbnRpb25bXSB7XG4gICAgY29uc3QgcmVzdWx0ID0gWy4uLih0aGlzLm1hcmtzPy52YWx1ZXMoKSA/PyBbXSldLm1hcCgoYXR0ZW50aW9uKSA9PlxuICAgICAgT2JqZWN0LmZyZWV6ZSh7IC4uLmF0dGVudGlvbiwgZXZpZGVuY2U6IE9iamVjdC5mcmVlemUoWy4uLmF0dGVudGlvbi5ldmlkZW5jZV0pIH0pLFxuICAgICk7XG4gICAgaWYgKHRoaXMub21pdHRlZCAmJiAhcmVzdWx0LnNvbWUoKGF0dGVudGlvbikgPT4gYXR0ZW50aW9uLmtpbmQgPT09ICdub3QtY29sbGVjdGVkJykpIHJlc3VsdC5wdXNoKE1JU1NJTkdfQVRURU5USU9OKTtcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZShyZXN1bHQpO1xuICB9XG59XG4iXX0=
@@ -47,6 +47,14 @@ export declare function firstDifferingPath(before: unknown, after: unknown, pref
47
47
  * path names it); this text names the stage the handle came from.
48
48
  */
49
49
  export declare function deadFrameMessage(stageName: string, runtimeStageId: string | undefined, key: string): string;
50
+ /**
51
+ * The refusal raised in an attempt that has ENDED (P1b) — timed out, aborted or
52
+ * failed — when the function behind it touches its scope anyway. The engine
53
+ * stopped waiting for it; whatever it does now would land beside a later
54
+ * attempt (or after the stage's commit), so it is refused. A write or emit is
55
+ * recorded on the stage (`StageSnapshot.lateWrites`) before this is thrown.
56
+ */
57
+ export declare function lateAttemptMessage(stageName: string, series: string, attempt: number, key: string): string;
50
58
  /**
51
59
  * The warning text for a key the stage WROTE after changing, in place, the
52
60
  * committed value it had read before its first write (copy-on-write, 9.29.0).
@@ -92,6 +92,19 @@ export function deadFrameMessage(stageName, runtimeStageId, key) {
92
92
  "stage's commit it has no frame to land in, so the write would vanish with no trace row. " +
93
93
  "Read the key again through the CURRENT stage's scope and write there.");
94
94
  }
95
+ /**
96
+ * The refusal raised in an attempt that has ENDED (P1b) — timed out, aborted or
97
+ * failed — when the function behind it touches its scope anyway. The engine
98
+ * stopped waiting for it; whatever it does now would land beside a later
99
+ * attempt (or after the stage's commit), so it is refused. A write or emit is
100
+ * recorded on the stage (`StageSnapshot.lateWrites`) before this is thrown.
101
+ */
102
+ export function lateAttemptMessage(stageName, series, attempt, key) {
103
+ return (`[footprint] Stage "${stageName}" (${series}): attempt ${attempt} has already ended, and \`${key}\` was ` +
104
+ 'touched through its scope afterwards — refused. The engine stopped waiting for this attempt (its cap, the ' +
105
+ "run's deadline, a cancellation, or its own error); its work must not land beside a later attempt. Pass " +
106
+ '`scope.$attempt().signal` to the calls it makes, so they stop when the attempt does.');
107
+ }
95
108
  /**
96
109
  * The warning text for a key the stage WROTE after changing, in place, the
97
110
  * committed value it had read before its first write (copy-on-write, 9.29.0).
@@ -127,4 +140,4 @@ export function borrowedMutationMessage(stageName, key, path) {
127
140
  'This usually comes from mutating an element reached by `find`/`filter`/`for…of`/`forEach`, ' +
128
141
  'which the scope proxy cannot intercept.');
129
142
  }
130
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9ycm93ZWRNdXRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbWVtb3J5L2JvcnJvd2VkTXV0YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFdEMsOEVBQThFO0FBQzlFLFNBQVMsV0FBVyxDQUFDLE1BQWMsRUFBRSxPQUFlLEVBQUUsU0FBa0I7SUFDdEUsSUFBSSxTQUFTO1FBQUUsT0FBTyxHQUFHLE1BQU0sSUFBSSxPQUFPLEdBQUcsQ0FBQztJQUM5QyxPQUFPLE1BQU0sS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7QUFDMUQsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsTUFBZSxFQUFFLEtBQWMsRUFBRSxNQUFNLEdBQUcsRUFBRSxFQUFFLEtBQUssR0FBRyxDQUFDO0lBQ3hGLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDekQsSUFBSSxLQUFLLElBQUksRUFBRTtRQUFFLE9BQU8sTUFBTSxDQUFDLENBQUMsMkNBQTJDO0lBQzNFLElBQUksTUFBTSxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxNQUFNLENBQUM7SUFFaEgsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1QyxJQUFJLGFBQWEsS0FBSyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8s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QUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDekUsT0FBTyxDQUNMLHNCQUFzQixTQUFTLGVBQWUsS0FBSyx3Q0FBd0M7UUFDM0Ysb0dBQW9HO1FBQ3BHLG1HQUFtRztRQUNuRyw0REFBNEQ7UUFDNUQsMENBQTBDO1FBQzFDLEtBQUs7UUFDTCx5REFBeUQ7UUFDekQsd0RBQXdELEdBQUcsY0FBYztRQUN6RSw2RkFBNkY7UUFDN0YseUNBQXlDLENBQzFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBtZW1vcnkvYm9ycm93ZWRNdXRhdGlvbiDigJQgdGhlIGhvbmVzdCBib3VuZGFyeSdzIHR3byB0ZXh0czogdGhlIGRldi1tb2RlXG4gKiBSRVBPUlQgZm9yIGEgd3JpdGUgdGhlIGVuZ2luZSBjYW5ub3Qgc2VlICh7QGxpbmsgYm9ycm93ZWRNdXRhdGlvbk1lc3NhZ2V9KVxuICogYW5kIHRoZSBSRUZVU0FMIGZvciBhIHdyaXRlIGZyb20gYSBoYW5kbGUgaGVsZCBwYXN0IGl0cyBzdGFnZVxuICogKHtAbGluayBkZWFkRnJhbWVNZXNzYWdlfSwgdGhyb3duIGJ5IGBTY29wZUZhY2FkZSDCtyBhc3NlcnRMaXZlYCkuXG4gKlxuICog4pSA4pSAIFRoZSBob25lc3QgYm91bmRhcnkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gKiBUaGUgdHlwZWQgc2NvcGUgaW50ZXJjZXB0cyBldmVyeSB3cml0ZSBpdCBjYW4gcmVhY2g6IGEgcHJvcGVydHkgYXQgYW55XG4gKiBkZXB0aCwgYW4gaW5kZXhlZCBlbGVtZW50LCBhbiBhcnJheSBtZXRob2QuIFdoYXQgaXQgY2Fubm90IHJlYWNoIGlzIGFuXG4gKiBlbGVtZW50IGhhbmRlZCBvdXQgYnkgYSBSRUFEIE1FVEhPRCDigJQgYGZpbmRgLCBgZmlsdGVyYCwgYGZvcuKApm9mYCwgYGZvckVhY2hgLFxuICogZGVzdHJ1Y3R1cmluZyDigJQgYmVjYXVzZSB3cmFwcGluZyB0aG9zZSB3b3VsZCBtZWFuIHJldHVybmluZyBwcm94aWVzIG91dCBvZlxuICogZXZlcnkgcmVhZCAoYG1hcGAgd291bGQgYnVpbGQgYW4gYXJyYXkgb2YgcHJveGllcywgYGZpbHRlcmAgd291bGQgY29tcGFyZVxuICogcHJveGllcywgYSByZXR1cm5lZCB2YWx1ZSB3b3VsZCBlc2NhcGUgdGhlIHN0YWdlIHN0aWxsIGJvdW5kIHRvIGl0KS4gVGhhdCBpc1xuICogYSBjb3N0IHRoZSBsaWJyYXJ5IHNob3VsZCBub3QgcGF5LCBhbmQgYSBzZW1hbnRpYyBjaGFuZ2UgaXQgc2hvdWxkIG5vdCBtYWtlLlxuICpcbiAqIFNvIHRoZSBhbnN3ZXIgZm9yIHRoYXQgZmFtaWx5IGlzIG5vdCBpbnRlcmNlcHRpb24g4oCUIGl0IGlzIGEgUkVQT1JULiBBIHJlYWRcbiAqIGlzIEJPUlJPV0VEOyBtdXRhdGluZyBpdCBpbiBwbGFjZSBpcyBvdXQgb2YgY29udHJhY3QuIFRoaXMgbW9kdWxlIGRldGVjdHMgdGhlXG4gKiB2aW9sYXRpb24gYWZ0ZXIgdGhlIGZhY3QgYW5kIG5hbWVzIGl0IChhIGRldi1tb2RlIHdhcm5pbmcgYXQgY29tbWl0IOKAlCB0aGVcbiAqIHdyaXRlIGFscmVhZHkgaGFwcGVuZWQsIHNvIGl0IGNhbm5vdCBiZSByZWZ1c2VkKSwgaW5zdGVhZCBvZiBsZXR0aW5nIHRoZSBydW5cbiAqIGVuZCB3aXRoIGEgY29tbWl0IGxvZyB0aGF0IGRpc2FncmVlcyB3aXRoIGZpbmFsIHN0YXRlIGFuZCBub3RoaW5nIHNheWluZyBzby5cbiAqXG4gKiDilIDilIAgSG93IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICogYHJlYWRUcmFja2luZzogJ2Z1bGwnYCAodGhlIGRlZmF1bHQpIGFscmVhZHkgcmV0YWlucyBhIENMT05FIG9mIGV2ZXJ5IHZhbHVlXG4gKiBhIHN0YWdlIHJlYWQuIEF0IGNvbW1pdCwgYSBrZXkgdGhlIHN0YWdlIHJlYWQgYnV0IG5ldmVyIFdST1RFIG11c3Qgc3RpbGxcbiAqIGhvbGQgd2hhdCBpdCBoZWxkIGF0IHJlYWQgdGltZSDigJQgY29tbWl0dGVkIHN0YXRlIGlzIGltbXV0YWJsZS1hZnRlci1zd2FwIGFuZFxuICogdGhlIGJ1ZmZlcidzIHdvcmtpbmcgY29weSBpcyBwcml2YXRlLiBJZiBpdCBkaWZmZXJzLCB0aGUgb25seSB0aGluZyB0aGF0IGNhblxuICogaGF2ZSBjaGFuZ2VkIGl0IGlzIHRoZSBzdGFnZSBpdHNlbGYsIGluIHBsYWNlLlxuICpcbiAqIERldi1tb2RlIG9ubHkgKGBlbmFibGVEZXZNb2RlKClgKSwgc28gdGhlIGRlZmF1bHQgcnVuIHBheXMgbm90aGluZyBhbmQgaXRzXG4gKiBieXRlcyBhcmUgdW5jaGFuZ2VkLlxuICovXG5cbmltcG9ydCB7IGRlZXBFcXVhbCB9IGZyb20gJ2Zvb3R0cmFjZSc7XG5cbi8qKiBSZW5kZXIgb25lIHBhdGggc2VnbWVudCBmb3IgYSBodW1hbjogYGxpbmVzWzBdLnF0eWAsIG5vdCBgbGluZXMuMC5xdHlgLiAqL1xuZnVuY3Rpb24gam9pblNlZ21lbnQocHJlZml4OiBzdHJpbmcsIHNlZ21lbnQ6IHN0cmluZywgaW50b0FycmF5OiBib29sZWFuKTogc3RyaW5nIHtcbiAgaWYgKGludG9BcnJheSkgcmV0dXJuIGAke3ByZWZpeH1bJHtzZWdtZW50fV1gO1xuICByZXR1cm4gcHJlZml4ID09PSAnJyA/IHNlZ21lbnQgOiBgJHtwcmVmaXh9LiR7c2VnbWVudH1gO1xufVxuXG4vKipcbiAqIFRoZSBmaXJzdCBwYXRoIGF0IHdoaWNoIGBhZnRlcmAgc3RvcHMgYWdyZWVpbmcgd2l0aCBgYmVmb3JlYCwgb3IgYHVuZGVmaW5lZGBcbiAqIHdoZW4gdGhleSBhcmUgc3RydWN0dXJhbGx5IGVxdWFsLiBEZXB0aC1maXJzdCwgb3duIGtleXMgb25seSDigJQgdGhlIHNhbWVcbiAqIHNoYXBlcyBgZGVlcEVxdWFsYCBoYW5kbGVzLCBzaW5jZSBjb21taXR0ZWQgc3RhdGUgaXMgSlNPTi1zaGFwZWQuXG4gKlxuICogQ3ljbGUtc2FmZSBieSBjb25zdHJ1Y3Rpb246IGl0IG9ubHkgcmVjdXJzZXMgaW50byBwYWlycyB0aGF0IGFyZSBub3QgYWxyZWFkeVxuICogYGRlZXBFcXVhbGAsIGFuZCBzdG9wcyBhdCB0aGUgZmlyc3QgZGlzYWdyZWVtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmlyc3REaWZmZXJpbmdQYXRoKGJlZm9yZTogdW5rbm93biwgYWZ0ZXI6IHVua25vd24sIHByZWZpeCA9ICcnLCBkZXB0aCA9IDApOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoZGVlcEVxdWFsKGJlZm9yZSwgYWZ0ZXIsICdjb3BpZXMnKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKGRlcHRoID49IDI0KSByZXR1cm4gcHJlZml4OyAvLyBwYXRob2xvZ2ljYWwgbmVzdGluZyDigJQgbmFtZSB3aGF0IHdlIGhhdmVcbiAgaWYgKGJlZm9yZSA9PT0gbnVsbCB8fCBhZnRlciA9PT0gbnVsbCB8fCB0eXBlb2YgYmVmb3JlICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgYWZ0ZXIgIT09ICdvYmplY3QnKSByZXR1cm4gcHJlZml4O1xuXG4gIGNvbnN0IGJlZm9yZUlzQXJyYXkgPSBBcnJheS5pc0FycmF5KGJlZm9yZSk7XG4gIGlmIChiZWZvcmVJc0FycmF5ICE9PSBBcnJheS5pc0FycmF5KGFmdGVyKSkgcmV0dXJuIHByZWZpeDtcblxuICBpZiAoYmVmb3JlSXNBcnJheSkge1xuICAgIGNvbnN0IGEgPSBiZWZvcmUgYXMgdW5rbm93bltdO1xuICAgIGNvbnN0IGIgPSBhZnRlciBhcyB1bmtub3duW107XG4gICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIHByZWZpeDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGRlZXBlciA9IGZpcnN0RGlmZmVyaW5nUGF0aChhW2ldLCBiW2ldLCBqb2luU2VnbWVudChwcmVmaXgsIFN0cmluZyhpKSwgdHJ1ZSksIGRlcHRoICsgMSk7XG4gICAgICBpZiAoZGVlcGVyICE9PSB1bmRlZmluZWQpIHJldHVybiBkZWVwZXI7XG4gICAgfVxuICAgIHJldHVybiBwcmVmaXg7XG4gIH1cblxuICBjb25zdCBhID0gYmVmb3JlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCBiID0gYWZ0ZXIgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IGtleXMgPSBuZXcgU2V0KFsuLi5PYmplY3Qua2V5cyhhKSwgLi4uT2JqZWN0LmtleXMoYildKTtcbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgIGNvbnN0IGRlZXBlciA9IGZpcnN0RGlmZmVyaW5nUGF0aChhW2tleV0sIGJba2V5XSwgam9pblNlZ21lbnQocHJlZml4LCBrZXksIGZhbHNlKSwgZGVwdGggKyAxKTtcbiAgICBpZiAoZGVlcGVyICE9PSB1bmRlZmluZWQpIHJldHVybiBkZWVwZXI7XG4gIH1cbiAgcmV0dXJuIHByZWZpeDtcbn1cblxuLyoqXG4gKiBUaGUgcmVmdXNhbCB0ZXh0IGZvciBhIHdyaXRlIHRoYXQgcmVhY2hlZCBhIGZyYW1lIEFGVEVSIGl0cyBzdGFnZSBjb21taXR0ZWQuXG4gKiBBIHNjb3BlLCBhbmQgZXZlcnkgcHJveHkgcmVhZCBvdXQgb2YgaXQsIGlzIGJvdW5kIHRvIHRoZSBzdGFnZSBpdCB3YXMgaGFuZGVkXG4gKiB0bzsga2VwdCBwYXN0IHRoYXQgc3RhZ2UncyBjb21taXQgaXQgaGFzIG5vIGZyYW1lIHRvIGxhbmQgaW4sIHNvIHRoZSB3cml0ZVxuICogd291bGQgc2l0IGluIGEgYnVmZmVyIG5vdGhpbmcgZXZlciBjb21taXRzIOKAlCBubyB0cmFjZSByb3csIHN0YXRlIHVuY2hhbmdlZC5cbiAqIFRoZSB0aHJvdyBzdXJmYWNlcyBpbiB0aGUgc3RhZ2UgdGhhdCBtYWRlIHRoZSB3cml0ZSAodGhlIGVuZ2luZSdzIGVycm9yXG4gKiBwYXRoIG5hbWVzIGl0KTsgdGhpcyB0ZXh0IG5hbWVzIHRoZSBzdGFnZSB0aGUgaGFuZGxlIGNhbWUgZnJvbS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlYWRGcmFtZU1lc3NhZ2Uoc3RhZ2VOYW1lOiBzdHJpbmcsIHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQsIGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgZnJvbSA9IHJ1bnRpbWVTdGFnZUlkID8gYFwiJHtzdGFnZU5hbWV9XCIgKCR7cnVudGltZVN0YWdlSWR9KWAgOiBgXCIke3N0YWdlTmFtZX1cImA7XG4gIHJldHVybiAoXG4gICAgYFtmb290cHJpbnRdIFN0YWdlICR7ZnJvbX0gaGFzIGFscmVhZHkgY29tbWl0dGVkIOKAlCBpdHMgc2NvcGUgaXMgZGVhZCwgYW5kIGEgd3JpdGUgdG8gXFxgJHtrZXl9XFxgIGAgK1xuICAgICdqdXN0IHJlYWNoZWQgaXQgZnJvbSBhIGxhdGVyIHN0YWdlICh0aGlzIGVycm9yIGlzIHJhaXNlZCBpbiB0aGF0IHN0YWdlKS4gQSBzY29wZSwgYW5kIGFueXRoaW5nIHJlYWQgJyArXG4gICAgJ291dCBvZiBpdCAoYHNjb3BlLmtgLCBgc2NvcGUuay5hcnJbMF1gKSwgYmVsb25ncyB0byB0aGUgc3RhZ2UgaXQgd2FzIGhhbmRlZCB0bzsgaGVsZCBwYXN0IHRoYXQgJyArXG4gICAgXCJzdGFnZSdzIGNvbW1pdCBpdCBoYXMgbm8gZnJhbWUgdG8gbGFuZCBpbiwgc28gdGhlIHdyaXRlIHdvdWxkIHZhbmlzaCB3aXRoIG5vIHRyYWNlIHJvdy4gXCIgK1xuICAgIFwiUmVhZCB0aGUga2V5IGFnYWluIHRocm91Z2ggdGhlIENVUlJFTlQgc3RhZ2UncyBzY29wZSBhbmQgd3JpdGUgdGhlcmUuXCJcbiAgKTtcbn1cblxuLyoqXG4gKiBUaGUgd2FybmluZyB0ZXh0IGZvciBhIGtleSB0aGUgc3RhZ2UgV1JPVEUgYWZ0ZXIgY2hhbmdpbmcsIGluIHBsYWNlLCB0aGVcbiAqIGNvbW1pdHRlZCB2YWx1ZSBpdCBoYWQgcmVhZCBiZWZvcmUgaXRzIGZpcnN0IHdyaXRlIChjb3B5LW9uLXdyaXRlLCA5LjI5LjApLlxuICogVGhlIGNvbW1pdCBjb21wYXJlcyB3aGF0IHRoZSBzdGFnZSB3cm90ZSBhZ2FpbnN0IGNvbW1pdHRlZCBzdGF0ZSDigJQgdGhlXG4gKiBvYmplY3QgdGhlIGluLXBsYWNlIGNoYW5nZSBhbHNvIG1vdmVkIOKAlCBzbyBpdCByZWNvcmRzIG5vIGNoYW5nZTogbGl2ZSBzdGF0ZVxuICoga2VlcHMgdGhlIGVkaXQsIHRoZSBsb2cgYW5kIGV2ZXJ5IGZvbGQgZG8gbm90LiAoOS4yOC4wIHJlY29yZGVkIGl0IHdoZW4gdGhlXG4gKiBlZGl0IGNhbWUgYWZ0ZXIgdGhlIGZpcnN0IHdyaXRlLCBieSBhY2NpZGVudCBvZiBhIHdob2xlLXN0YXRlIGNsb25lLilcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbW1pdHRlZE11dGF0aW9uTWVzc2FnZShzdGFnZU5hbWU6IHN0cmluZywga2V5OiBzdHJpbmcsIHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHdoZXJlID0gcGF0aCA9PT0gJycgPyBrZXkgOiBgJHtrZXl9LiR7cGF0aH1gLnJlcGxhY2UoL1xcLlxcWy9nLCAnWycpO1xuICByZXR1cm4gKFxuICAgIGBbZm9vdHByaW50XSBTdGFnZSBcIiR7c3RhZ2VOYW1lfVwiIGNoYW5nZWQgXFxgJHt3aGVyZX1cXGAgSU4gUExBQ0Ugb24gdGhlIGNvbW1pdHRlZCB2YWx1ZSBpdCByZWFkIGJlZm9yZSBgICtcbiAgICAnaXRzIGZpcnN0IHdyaXRlLCB0aGVuIHdyb3RlIHRoZSBrZXkuIFRoZSBjb21taXQgY29tcGFyZXMgdGhlIHdyaXR0ZW4gdmFsdWUgd2l0aCBjb21taXR0ZWQgc3RhdGUg4oCUICcgK1xuICAgICd3aGljaCB0aGUgaW4tcGxhY2UgY2hhbmdlIGFsc28gbW92ZWQg4oCUIHNvIGl0IHJlY29yZHMgTk8gY2hhbmdlOiBsaXZlIHN0YXRlIGtlZXBzIHRoZSBlZGl0LCB0aGUgY29tbWl0ICcgK1xuICAgICdsb2cgYW5kIGV2ZXJ5IHJlYWRlciB0aGF0IGZvbGRzIGl0IGRvIG5vdC4gUmVhZHMgYXJlIEJPUlJPV0VELiBCdWlsZCB0aGUgbmV4dCB2YWx1ZSBpbnN0ZWFkICcgK1xuICAgIGAoXFxgc2NvcGUuJHNldFZhbHVlKCcke2tleX0nLCB7IC4uLnZhbHVlLCDigKYgfSlcXGApLCBvciByZWFkIHRoZSBrZXkgYWdhaW4gYWZ0ZXIgdGhlIHN0YWdlJ3MgZmlyc3QgYCArXG4gICAgXCJ3cml0ZSDigJQgdGhhdCByZWFkIGlzIHRoZSBzdGFnZSdzIG93biBjb3B5LlwiXG4gICk7XG59XG5cbi8qKlxuICogVGhlIHdhcm5pbmcgdGV4dC4gTmFtZXMgdGhlIHN0YWdlLCB0aGUgZXhhY3QgcGF0aCB0aGF0IG1vdmVkLCBhbmQgdGhlIHR3b1xuICogd2F5cyB0byB3cml0ZSBpdCBiYWNrIOKAlCBiZWNhdXNlIFwieW91IG11dGF0ZWQgc29tZXRoaW5nXCIgaXMgbm90IGFjdGlvbmFibGVcbiAqIGFuZCB0aGlzIGlzIHRoZSBvbmUgZmFpbHVyZSBtb2RlIHRoZSB3aG9sZSBkZXNpZ24gZXhpc3RzIHRvIHByZXZlbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBib3Jyb3dlZE11dGF0aW9uTWVzc2FnZShzdGFnZU5hbWU6IHN0cmluZywga2V5OiBzdHJpbmcsIHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHdoZXJlID0gcGF0aCA9PT0gJycgPyBrZXkgOiBgJHtrZXl9LiR7cGF0aH1gLnJlcGxhY2UoL1xcLlxcWy9nLCAnWycpO1xuICByZXR1cm4gKFxuICAgIGBbZm9vdHByaW50XSBTdGFnZSBcIiR7c3RhZ2VOYW1lfVwiIGNoYW5nZWQgXFxgJHt3aGVyZX1cXGAgSU4gUExBQ0UsIG9uIGEgdmFsdWUgaXQgb25seSByZWFkLiBgICtcbiAgICAnZm9vdHByaW50IG5ldmVyIHNhdyB0aGF0IHdyaXRlOiB0aGVyZSBpcyBubyB0cmFjZSByb3cgZm9yIGl0LCBzbyB0aGUgY29tbWl0IGxvZywgdGhlIGNhdXNhbCBjaGFpbiAnICtcbiAgICAnYW5kIGV2ZXJ5IHJlYWRlciB0aGF0IGZvbGRzIHRoZSBsb2cgd2lsbCBkaXNhZ3JlZSB3aXRoIGZpbmFsIHN0YXRlIOKAlCBhbmQgdW5kZXIgYSBkaWZmZXJlbnQgd3JpdGUgJyArXG4gICAgJ29yZGVyIHRoZSBjaGFuZ2UgaXMgZHJvcHBlZCBlbnRpcmVseS4gUmVhZHMgYXJlIEJPUlJPV0VELiAnICtcbiAgICAnV3JpdGUgdGhyb3VnaCB0aGUgc2NvcGUgaW5zdGVhZCAoYHNjb3BlLicgK1xuICAgIHdoZXJlICtcbiAgICAnID0g4oCmYCDigJQgcHJvcGVydHkgYW5kIGluZGV4ZWQgYWNjZXNzIGFyZSBib3RoIHRyYWNrZWQpLCAnICtcbiAgICBgb3IgaGFuZCBiYWNrIHRoZSB3aG9sZSB2YWx1ZSB3aXRoIFxcYHNjb3BlLiRzZXRWYWx1ZSgnJHtrZXl9JywgbmV4dClcXGAuIGAgK1xuICAgICdUaGlzIHVzdWFsbHkgY29tZXMgZnJvbSBtdXRhdGluZyBhbiBlbGVtZW50IHJlYWNoZWQgYnkgYGZpbmRgL2BmaWx0ZXJgL2Bmb3LigKZvZmAvYGZvckVhY2hgLCAnICtcbiAgICAnd2hpY2ggdGhlIHNjb3BlIHByb3h5IGNhbm5vdCBpbnRlcmNlcHQuJ1xuICApO1xufVxuIl19
143
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9ycm93ZWRNdXRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbWVtb3J5L2JvcnJvd2VkTXV0YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFdEMsOEVBQThFO0FBQzlFLFNBQVMsV0FBVyxDQUFDLE1BQWMsRUFBRSxPQUFlLEVBQUUsU0FBa0I7SUFDdEUsSUFBSSxTQUFTO1FBQUUsT0FBTyxHQUFHLE1BQU0sSUFBSSxPQUFPLEdBQUcsQ0FBQztJQUM5QyxPQUFPLE1BQU0sS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7QUFDMUQsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsTUFBZSxFQUFFLEtBQWMsRUFBRSxNQUFNLEdBQUcsRUFBRSxFQUFFLEtBQUssR0FBRyxDQUFDO0lBQ3hGLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDekQsSUFBSSxLQUFLLElBQUksRUFBRTtRQUFFLE9BQU8sTUFBTSxDQUFDLENBQUMsMkNBQTJDO0lBQzNFLElBQUksTUFBTSxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxNQUFNLENBQUM7SUFFaEgsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1QyxJQUFJLGFBQWEsS0FBSyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8s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QTRDLENBQzdDLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSx1QkFBdUIsQ0FBQyxTQUFpQixFQUFFLEdBQVcsRUFBRSxJQUFZO0lBQ2xGLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN6RSxPQUFPLENBQ0wsc0JBQXNCLFNBQVMsZUFBZSxLQUFLLHdDQUF3QztRQUMzRixvR0FBb0c7UUFDcEcsbUdBQW1HO1FBQ25HLDREQUE0RDtRQUM1RCwwQ0FBMEM7UUFDMUMsS0FBSztRQUNMLHlEQUF5RDtRQUN6RCx3REFBd0QsR0FBRyxjQUFjO1FBQ3pFLDZGQUE2RjtRQUM3Rix5Q0FBeUMsQ0FDMUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIG1lbW9yeS9ib3Jyb3dlZE11dGF0aW9uIOKAlCB0aGUgaG9uZXN0IGJvdW5kYXJ5J3MgdHdvIHRleHRzOiB0aGUgZGV2LW1vZGVcbiAqIFJFUE9SVCBmb3IgYSB3cml0ZSB0aGUgZW5naW5lIGNhbm5vdCBzZWUgKHtAbGluayBib3Jyb3dlZE11dGF0aW9uTWVzc2FnZX0pXG4gKiBhbmQgdGhlIFJFRlVTQUwgZm9yIGEgd3JpdGUgZnJvbSBhIGhhbmRsZSBoZWxkIHBhc3QgaXRzIHN0YWdlXG4gKiAoe0BsaW5rIGRlYWRGcmFtZU1lc3NhZ2V9LCB0aHJvd24gYnkgYFNjb3BlRmFjYWRlIMK3IGFzc2VydExpdmVgKS5cbiAqXG4gKiDilIDilIAgVGhlIGhvbmVzdCBib3VuZGFyeSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAqIFRoZSB0eXBlZCBzY29wZSBpbnRlcmNlcHRzIGV2ZXJ5IHdyaXRlIGl0IGNhbiByZWFjaDogYSBwcm9wZXJ0eSBhdCBhbnlcbiAqIGRlcHRoLCBhbiBpbmRleGVkIGVsZW1lbnQsIGFuIGFycmF5IG1ldGhvZC4gV2hhdCBpdCBjYW5ub3QgcmVhY2ggaXMgYW5cbiAqIGVsZW1lbnQgaGFuZGVkIG91dCBieSBhIFJFQUQgTUVUSE9EIOKAlCBgZmluZGAsIGBmaWx0ZXJgLCBgZm9y4oCmb2ZgLCBgZm9yRWFjaGAsXG4gKiBkZXN0cnVjdHVyaW5nIOKAlCBiZWNhdXNlIHdyYXBwaW5nIHRob3NlIHdvdWxkIG1lYW4gcmV0dXJuaW5nIHByb3hpZXMgb3V0IG9mXG4gKiBldmVyeSByZWFkIChgbWFwYCB3b3VsZCBidWlsZCBhbiBhcnJheSBvZiBwcm94aWVzLCBgZmlsdGVyYCB3b3VsZCBjb21wYXJlXG4gKiBwcm94aWVzLCBhIHJldHVybmVkIHZhbHVlIHdvdWxkIGVzY2FwZSB0aGUgc3RhZ2Ugc3RpbGwgYm91bmQgdG8gaXQpLiBUaGF0IGlzXG4gKiBhIGNvc3QgdGhlIGxpYnJhcnkgc2hvdWxkIG5vdCBwYXksIGFuZCBhIHNlbWFudGljIGNoYW5nZSBpdCBzaG91bGQgbm90IG1ha2UuXG4gKlxuICogU28gdGhlIGFuc3dlciBmb3IgdGhhdCBmYW1pbHkgaXMgbm90IGludGVyY2VwdGlvbiDigJQgaXQgaXMgYSBSRVBPUlQuIEEgcmVhZFxuICogaXMgQk9SUk9XRUQ7IG11dGF0aW5nIGl0IGluIHBsYWNlIGlzIG91dCBvZiBjb250cmFjdC4gVGhpcyBtb2R1bGUgZGV0ZWN0cyB0aGVcbiAqIHZpb2xhdGlvbiBhZnRlciB0aGUgZmFjdCBhbmQgbmFtZXMgaXQgKGEgZGV2LW1vZGUgd2FybmluZyBhdCBjb21taXQg4oCUIHRoZVxuICogd3JpdGUgYWxyZWFkeSBoYXBwZW5lZCwgc28gaXQgY2Fubm90IGJlIHJlZnVzZWQpLCBpbnN0ZWFkIG9mIGxldHRpbmcgdGhlIHJ1blxuICogZW5kIHdpdGggYSBjb21taXQgbG9nIHRoYXQgZGlzYWdyZWVzIHdpdGggZmluYWwgc3RhdGUgYW5kIG5vdGhpbmcgc2F5aW5nIHNvLlxuICpcbiAqIOKUgOKUgCBIb3cg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gKiBgcmVhZFRyYWNraW5nOiAnZnVsbCdgICh0aGUgZGVmYXVsdCkgYWxyZWFkeSByZXRhaW5zIGEgQ0xPTkUgb2YgZXZlcnkgdmFsdWVcbiAqIGEgc3RhZ2UgcmVhZC4gQXQgY29tbWl0LCBhIGtleSB0aGUgc3RhZ2UgcmVhZCBidXQgbmV2ZXIgV1JPVEUgbXVzdCBzdGlsbFxuICogaG9sZCB3aGF0IGl0IGhlbGQgYXQgcmVhZCB0aW1lIOKAlCBjb21taXR0ZWQgc3RhdGUgaXMgaW1tdXRhYmxlLWFmdGVyLXN3YXAgYW5kXG4gKiB0aGUgYnVmZmVyJ3Mgd29ya2luZyBjb3B5IGlzIHByaXZhdGUuIElmIGl0IGRpZmZlcnMsIHRoZSBvbmx5IHRoaW5nIHRoYXQgY2FuXG4gKiBoYXZlIGNoYW5nZWQgaXQgaXMgdGhlIHN0YWdlIGl0c2VsZiwgaW4gcGxhY2UuXG4gKlxuICogRGV2LW1vZGUgb25seSAoYGVuYWJsZURldk1vZGUoKWApLCBzbyB0aGUgZGVmYXVsdCBydW4gcGF5cyBub3RoaW5nIGFuZCBpdHNcbiAqIGJ5dGVzIGFyZSB1bmNoYW5nZWQuXG4gKi9cblxuaW1wb3J0IHsgZGVlcEVxdWFsIH0gZnJvbSAnZm9vdHRyYWNlJztcblxuLyoqIFJlbmRlciBvbmUgcGF0aCBzZWdtZW50IGZvciBhIGh1bWFuOiBgbGluZXNbMF0ucXR5YCwgbm90IGBsaW5lcy4wLnF0eWAuICovXG5mdW5jdGlvbiBqb2luU2VnbWVudChwcmVmaXg6IHN0cmluZywgc2VnbWVudDogc3RyaW5nLCBpbnRvQXJyYXk6IGJvb2xlYW4pOiBzdHJpbmcge1xuICBpZiAoaW50b0FycmF5KSByZXR1cm4gYCR7cHJlZml4fVske3NlZ21lbnR9XWA7XG4gIHJldHVybiBwcmVmaXggPT09ICcnID8gc2VnbWVudCA6IGAke3ByZWZpeH0uJHtzZWdtZW50fWA7XG59XG5cbi8qKlxuICogVGhlIGZpcnN0IHBhdGggYXQgd2hpY2ggYGFmdGVyYCBzdG9wcyBhZ3JlZWluZyB3aXRoIGBiZWZvcmVgLCBvciBgdW5kZWZpbmVkYFxuICogd2hlbiB0aGV5IGFyZSBzdHJ1Y3R1cmFsbHkgZXF1YWwuIERlcHRoLWZpcnN0LCBvd24ga2V5cyBvbmx5IOKAlCB0aGUgc2FtZVxuICogc2hhcGVzIGBkZWVwRXF1YWxgIGhhbmRsZXMsIHNpbmNlIGNvbW1pdHRlZCBzdGF0ZSBpcyBKU09OLXNoYXBlZC5cbiAqXG4gKiBDeWNsZS1zYWZlIGJ5IGNvbnN0cnVjdGlvbjogaXQgb25seSByZWN1cnNlcyBpbnRvIHBhaXJzIHRoYXQgYXJlIG5vdCBhbHJlYWR5XG4gKiBgZGVlcEVxdWFsYCwgYW5kIHN0b3BzIGF0IHRoZSBmaXJzdCBkaXNhZ3JlZW1lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaXJzdERpZmZlcmluZ1BhdGgoYmVmb3JlOiB1bmtub3duLCBhZnRlcjogdW5rbm93biwgcHJlZml4ID0gJycsIGRlcHRoID0gMCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChkZWVwRXF1YWwoYmVmb3JlLCBhZnRlciwgJ2NvcGllcycpKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAoZGVwdGggPj0gMjQpIHJldHVybiBwcmVmaXg7IC8vIHBhdGhvbG9naWNhbCBuZXN0aW5nIOKAlCBuYW1lIHdoYXQgd2UgaGF2ZVxuICBpZiAoYmVmb3JlID09PSBudWxsIHx8IGFmdGVyID09PSBudWxsIHx8IHR5cGVvZiBiZWZvcmUgIT09ICdvYmplY3QnIHx8IHR5cGVvZiBhZnRlciAhPT0gJ29iamVjdCcpIHJldHVybiBwcmVmaXg7XG5cbiAgY29uc3QgYmVmb3JlSXNBcnJheSA9IEFycmF5LmlzQXJyYXkoYmVmb3JlKTtcbiAgaWYgKGJlZm9yZUlzQXJyYXkgIT09IEFycmF5LmlzQXJyYXkoYWZ0ZXIpKSByZXR1cm4gcHJlZml4O1xuXG4gIGlmIChiZWZvcmVJc0FycmF5KSB7XG4gICAgY29uc3QgYSA9IGJlZm9yZSBhcyB1bmtub3duW107XG4gICAgY29uc3QgYiA9IGFmdGVyIGFzIHVua25vd25bXTtcbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gcHJlZml4O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZGVlcGVyID0gZmlyc3REaWZmZXJpbmdQYXRoKGFbaV0sIGJbaV0sIGpvaW5TZWdtZW50KHByZWZpeCwgU3RyaW5nKGkpLCB0cnVlKSwgZGVwdGggKyAxKTtcbiAgICAgIGlmIChkZWVwZXIgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGRlZXBlcjtcbiAgICB9XG4gICAgcmV0dXJuIHByZWZpeDtcbiAgfVxuXG4gIGNvbnN0IGEgPSBiZWZvcmUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IGIgPSBhZnRlciBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3Qga2V5cyA9IG5ldyBTZXQoWy4uLk9iamVjdC5rZXlzKGEpLCAuLi5PYmplY3Qua2V5cyhiKV0pO1xuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgY29uc3QgZGVlcGVyID0gZmlyc3REaWZmZXJpbmdQYXRoKGFba2V5XSwgYltrZXldLCBqb2luU2VnbWVudChwcmVmaXgsIGtleSwgZmFsc2UpLCBkZXB0aCArIDEpO1xuICAgIGlmIChkZWVwZXIgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGRlZXBlcjtcbiAgfVxuICByZXR1cm4gcHJlZml4O1xufVxuXG4vKipcbiAqIFRoZSByZWZ1c2FsIHRleHQgZm9yIGEgd3JpdGUgdGhhdCByZWFjaGVkIGEgZnJhbWUgQUZURVIgaXRzIHN0YWdlIGNvbW1pdHRlZC5cbiAqIEEgc2NvcGUsIGFuZCBldmVyeSBwcm94eSByZWFkIG91dCBvZiBpdCwgaXMgYm91bmQgdG8gdGhlIHN0YWdlIGl0IHdhcyBoYW5kZWRcbiAqIHRvOyBrZXB0IHBhc3QgdGhhdCBzdGFnZSdzIGNvbW1pdCBpdCBoYXMgbm8gZnJhbWUgdG8gbGFuZCBpbiwgc28gdGhlIHdyaXRlXG4gKiB3b3VsZCBzaXQgaW4gYSBidWZmZXIgbm90aGluZyBldmVyIGNvbW1pdHMg4oCUIG5vIHRyYWNlIHJvdywgc3RhdGUgdW5jaGFuZ2VkLlxuICogVGhlIHRocm93IHN1cmZhY2VzIGluIHRoZSBzdGFnZSB0aGF0IG1hZGUgdGhlIHdyaXRlICh0aGUgZW5naW5lJ3MgZXJyb3JcbiAqIHBhdGggbmFtZXMgaXQpOyB0aGlzIHRleHQgbmFtZXMgdGhlIHN0YWdlIHRoZSBoYW5kbGUgY2FtZSBmcm9tLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVhZEZyYW1lTWVzc2FnZShzdGFnZU5hbWU6IHN0cmluZywgcnVudGltZVN0YWdlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCwga2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBmcm9tID0gcnVudGltZVN0YWdlSWQgPyBgXCIke3N0YWdlTmFtZX1cIiAoJHtydW50aW1lU3RhZ2VJZH0pYCA6IGBcIiR7c3RhZ2VOYW1lfVwiYDtcbiAgcmV0dXJuIChcbiAgICBgW2Zvb3RwcmludF0gU3RhZ2UgJHtmcm9tfSBoYXMgYWxyZWFkeSBjb21taXR0ZWQg4oCUIGl0cyBzY29wZSBpcyBkZWFkLCBhbmQgYSB3cml0ZSB0byBcXGAke2tleX1cXGAgYCArXG4gICAgJ2p1c3QgcmVhY2hlZCBpdCBmcm9tIGEgbGF0ZXIgc3RhZ2UgKHRoaXMgZXJyb3IgaXMgcmFpc2VkIGluIHRoYXQgc3RhZ2UpLiBBIHNjb3BlLCBhbmQgYW55dGhpbmcgcmVhZCAnICtcbiAgICAnb3V0IG9mIGl0IChgc2NvcGUua2AsIGBzY29wZS5rLmFyclswXWApLCBiZWxvbmdzIHRvIHRoZSBzdGFnZSBpdCB3YXMgaGFuZGVkIHRvOyBoZWxkIHBhc3QgdGhhdCAnICtcbiAgICBcInN0YWdlJ3MgY29tbWl0IGl0IGhhcyBubyBmcmFtZSB0byBsYW5kIGluLCBzbyB0aGUgd3JpdGUgd291bGQgdmFuaXNoIHdpdGggbm8gdHJhY2Ugcm93LiBcIiArXG4gICAgXCJSZWFkIHRoZSBrZXkgYWdhaW4gdGhyb3VnaCB0aGUgQ1VSUkVOVCBzdGFnZSdzIHNjb3BlIGFuZCB3cml0ZSB0aGVyZS5cIlxuICApO1xufVxuXG4vKipcbiAqIFRoZSByZWZ1c2FsIHJhaXNlZCBpbiBhbiBhdHRlbXB0IHRoYXQgaGFzIEVOREVEIChQMWIpIOKAlCB0aW1lZCBvdXQsIGFib3J0ZWQgb3JcbiAqIGZhaWxlZCDigJQgd2hlbiB0aGUgZnVuY3Rpb24gYmVoaW5kIGl0IHRvdWNoZXMgaXRzIHNjb3BlIGFueXdheS4gVGhlIGVuZ2luZVxuICogc3RvcHBlZCB3YWl0aW5nIGZvciBpdDsgd2hhdGV2ZXIgaXQgZG9lcyBub3cgd291bGQgbGFuZCBiZXNpZGUgYSBsYXRlclxuICogYXR0ZW1wdCAob3IgYWZ0ZXIgdGhlIHN0YWdlJ3MgY29tbWl0KSwgc28gaXQgaXMgcmVmdXNlZC4gQSB3cml0ZSBvciBlbWl0IGlzXG4gKiByZWNvcmRlZCBvbiB0aGUgc3RhZ2UgKGBTdGFnZVNuYXBzaG90LmxhdGVXcml0ZXNgKSBiZWZvcmUgdGhpcyBpcyB0aHJvd24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXRlQXR0ZW1wdE1lc3NhZ2Uoc3RhZ2VOYW1lOiBzdHJpbmcsIHNlcmllczogc3RyaW5nLCBhdHRlbXB0OiBudW1iZXIsIGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIChcbiAgICBgW2Zvb3RwcmludF0gU3RhZ2UgXCIke3N0YWdlTmFtZX1cIiAoJHtzZXJpZXN9KTogYXR0ZW1wdCAke2F0dGVtcHR9IGhhcyBhbHJlYWR5IGVuZGVkLCBhbmQgXFxgJHtrZXl9XFxgIHdhcyBgICtcbiAgICAndG91Y2hlZCB0aHJvdWdoIGl0cyBzY29wZSBhZnRlcndhcmRzIOKAlCByZWZ1c2VkLiBUaGUgZW5naW5lIHN0b3BwZWQgd2FpdGluZyBmb3IgdGhpcyBhdHRlbXB0IChpdHMgY2FwLCB0aGUgJyArXG4gICAgXCJydW4ncyBkZWFkbGluZSwgYSBjYW5jZWxsYXRpb24sIG9yIGl0cyBvd24gZXJyb3IpOyBpdHMgd29yayBtdXN0IG5vdCBsYW5kIGJlc2lkZSBhIGxhdGVyIGF0dGVtcHQuIFBhc3MgXCIgK1xuICAgICdgc2NvcGUuJGF0dGVtcHQoKS5zaWduYWxgIHRvIHRoZSBjYWxscyBpdCBtYWtlcywgc28gdGhleSBzdG9wIHdoZW4gdGhlIGF0dGVtcHQgZG9lcy4nXG4gICk7XG59XG5cbi8qKlxuICogVGhlIHdhcm5pbmcgdGV4dCBmb3IgYSBrZXkgdGhlIHN0YWdlIFdST1RFIGFmdGVyIGNoYW5naW5nLCBpbiBwbGFjZSwgdGhlXG4gKiBjb21taXR0ZWQgdmFsdWUgaXQgaGFkIHJlYWQgYmVmb3JlIGl0cyBmaXJzdCB3cml0ZSAoY29weS1vbi13cml0ZSwgOS4yOS4wKS5cbiAqIFRoZSBjb21taXQgY29tcGFyZXMgd2hhdCB0aGUgc3RhZ2Ugd3JvdGUgYWdhaW5zdCBjb21taXR0ZWQgc3RhdGUg4oCUIHRoZVxuICogb2JqZWN0IHRoZSBpbi1wbGFjZSBjaGFuZ2UgYWxzbyBtb3ZlZCDigJQgc28gaXQgcmVjb3JkcyBubyBjaGFuZ2U6IGxpdmUgc3RhdGVcbiAqIGtlZXBzIHRoZSBlZGl0LCB0aGUgbG9nIGFuZCBldmVyeSBmb2xkIGRvIG5vdC4gKDkuMjguMCByZWNvcmRlZCBpdCB3aGVuIHRoZVxuICogZWRpdCBjYW1lIGFmdGVyIHRoZSBmaXJzdCB3cml0ZSwgYnkgYWNjaWRlbnQgb2YgYSB3aG9sZS1zdGF0ZSBjbG9uZS4pXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21taXR0ZWRNdXRhdGlvbk1lc3NhZ2Uoc3RhZ2VOYW1lOiBzdHJpbmcsIGtleTogc3RyaW5nLCBwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB3aGVyZSA9IHBhdGggPT09ICcnID8ga2V5IDogYCR7a2V5fS4ke3BhdGh9YC5yZXBsYWNlKC9cXC5cXFsvZywgJ1snKTtcbiAgcmV0dXJuIChcbiAgICBgW2Zvb3RwcmludF0gU3RhZ2UgXCIke3N0YWdlTmFtZX1cIiBjaGFuZ2VkIFxcYCR7d2hlcmV9XFxgIElOIFBMQUNFIG9uIHRoZSBjb21taXR0ZWQgdmFsdWUgaXQgcmVhZCBiZWZvcmUgYCArXG4gICAgJ2l0cyBmaXJzdCB3cml0ZSwgdGhlbiB3cm90ZSB0aGUga2V5LiBUaGUgY29tbWl0IGNvbXBhcmVzIHRoZSB3cml0dGVuIHZhbHVlIHdpdGggY29tbWl0dGVkIHN0YXRlIOKAlCAnICtcbiAgICAnd2hpY2ggdGhlIGluLXBsYWNlIGNoYW5nZSBhbHNvIG1vdmVkIOKAlCBzbyBpdCByZWNvcmRzIE5PIGNoYW5nZTogbGl2ZSBzdGF0ZSBrZWVwcyB0aGUgZWRpdCwgdGhlIGNvbW1pdCAnICtcbiAgICAnbG9nIGFuZCBldmVyeSByZWFkZXIgdGhhdCBmb2xkcyBpdCBkbyBub3QuIFJlYWRzIGFyZSBCT1JST1dFRC4gQnVpbGQgdGhlIG5leHQgdmFsdWUgaW5zdGVhZCAnICtcbiAgICBgKFxcYHNjb3BlLiRzZXRWYWx1ZSgnJHtrZXl9JywgeyAuLi52YWx1ZSwg4oCmIH0pXFxgKSwgb3IgcmVhZCB0aGUga2V5IGFnYWluIGFmdGVyIHRoZSBzdGFnZSdzIGZpcnN0IGAgK1xuICAgIFwid3JpdGUg4oCUIHRoYXQgcmVhZCBpcyB0aGUgc3RhZ2UncyBvd24gY29weS5cIlxuICApO1xufVxuXG4vKipcbiAqIFRoZSB3YXJuaW5nIHRleHQuIE5hbWVzIHRoZSBzdGFnZSwgdGhlIGV4YWN0IHBhdGggdGhhdCBtb3ZlZCwgYW5kIHRoZSB0d29cbiAqIHdheXMgdG8gd3JpdGUgaXQgYmFjayDigJQgYmVjYXVzZSBcInlvdSBtdXRhdGVkIHNvbWV0aGluZ1wiIGlzIG5vdCBhY3Rpb25hYmxlXG4gKiBhbmQgdGhpcyBpcyB0aGUgb25lIGZhaWx1cmUgbW9kZSB0aGUgd2hvbGUgZGVzaWduIGV4aXN0cyB0byBwcmV2ZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYm9ycm93ZWRNdXRhdGlvbk1lc3NhZ2Uoc3RhZ2VOYW1lOiBzdHJpbmcsIGtleTogc3RyaW5nLCBwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB3aGVyZSA9IHBhdGggPT09ICcnID8ga2V5IDogYCR7a2V5fS4ke3BhdGh9YC5yZXBsYWNlKC9cXC5cXFsvZywgJ1snKTtcbiAgcmV0dXJuIChcbiAgICBgW2Zvb3RwcmludF0gU3RhZ2UgXCIke3N0YWdlTmFtZX1cIiBjaGFuZ2VkIFxcYCR7d2hlcmV9XFxgIElOIFBMQUNFLCBvbiBhIHZhbHVlIGl0IG9ubHkgcmVhZC4gYCArXG4gICAgJ2Zvb3RwcmludCBuZXZlciBzYXcgdGhhdCB3cml0ZTogdGhlcmUgaXMgbm8gdHJhY2Ugcm93IGZvciBpdCwgc28gdGhlIGNvbW1pdCBsb2csIHRoZSBjYXVzYWwgY2hhaW4gJyArXG4gICAgJ2FuZCBldmVyeSByZWFkZXIgdGhhdCBmb2xkcyB0aGUgbG9nIHdpbGwgZGlzYWdyZWUgd2l0aCBmaW5hbCBzdGF0ZSDigJQgYW5kIHVuZGVyIGEgZGlmZmVyZW50IHdyaXRlICcgK1xuICAgICdvcmRlciB0aGUgY2hhbmdlIGlzIGRyb3BwZWQgZW50aXJlbHkuIFJlYWRzIGFyZSBCT1JST1dFRC4gJyArXG4gICAgJ1dyaXRlIHRocm91Z2ggdGhlIHNjb3BlIGluc3RlYWQgKGBzY29wZS4nICtcbiAgICB3aGVyZSArXG4gICAgJyA9IOKApmAg4oCUIHByb3BlcnR5IGFuZCBpbmRleGVkIGFjY2VzcyBhcmUgYm90aCB0cmFja2VkKSwgJyArXG4gICAgYG9yIGhhbmQgYmFjayB0aGUgd2hvbGUgdmFsdWUgd2l0aCBcXGBzY29wZS4kc2V0VmFsdWUoJyR7a2V5fScsIG5leHQpXFxgLiBgICtcbiAgICAnVGhpcyB1c3VhbGx5IGNvbWVzIGZyb20gbXV0YXRpbmcgYW4gZWxlbWVudCByZWFjaGVkIGJ5IGBmaW5kYC9gZmlsdGVyYC9gZm9y4oCmb2ZgL2Bmb3JFYWNoYCwgJyArXG4gICAgJ3doaWNoIHRoZSBzY29wZSBwcm94eSBjYW5ub3QgaW50ZXJjZXB0LidcbiAgKTtcbn1cbiJdfQ==
@@ -7,9 +7,13 @@
7
7
  * in the record's `types.ts` until C6; the record names nothing outside itself now
8
8
  * (`RECORD_FILES`, scripts/layering.config.cjs), so they sit beside the frame that writes them.
9
9
  *
10
+ * A retried stage's node also carries its attempts (`attempts`, `attemptSummary` — the attempt leaf's types, L0).
11
+ *
10
12
  * A `StageSnapshot` is an `ExecutionTree` (`types.ts`), the shape the record's readers walk:
11
13
  * `commitStops`, `tagStops` and `keysReadFromExecutionTree` take one.
12
14
  */
15
+ import type { Attention } from 'foottrace';
16
+ import type { AttemptRecord, AttemptSummary, LateWrite } from '../attempt/types.js';
13
17
  import type { RetentionPolicy } from '../capture/policies.js';
14
18
  /** Types of control flow decisions captured by the execution engine. */
15
19
  export type FlowControlType = 'next' | 'branch' | 'children' | 'selected' | 'subflow' | 'loop';
@@ -93,6 +97,40 @@ export type StageSnapshot = {
93
97
  metrics: Record<string, unknown>;
94
98
  evals: Record<string, unknown>;
95
99
  flowMessages?: FlowMessage[];
100
+ /**
101
+ * Every attempt of this execution, in order — when it started, how long it took, how it ended, and the
102
+ * retry-or-stop decision that followed (`AttemptRecord`): the stage's own under its retry policy, a `timeoutMs`
103
+ * or a run deadline (10.1, `kind: 'stage'`), and those of the calls it made through `scope.$call` and the
104
+ * outside attempts it reported through `observed()` (P2, `kind: 'call'` / `'observed'`, the first 1000 —
105
+ * `StageContext · MAX_CALL_RECORDS`). Absent when there are none. The commit log never carries attempts: a
106
+ * retried stage is still ONE bundle.
107
+ */
108
+ attempts?: readonly AttemptRecord[];
109
+ /**
110
+ * Call and observed attempt records this execution made past the first 1000 — counted, not kept (each still
111
+ * fired `onAttempt`). Absent when none were dropped.
112
+ */
113
+ attemptsDropped?: number;
114
+ /**
115
+ * The series at a glance — counts per outcome, and how it ended. Stamped when the series ends: absent while it
116
+ * is still running (a snapshot taken mid-stage) and without a policy.
117
+ */
118
+ attemptSummary?: AttemptSummary;
119
+ /**
120
+ * Writes (and emits) an attempt tried AFTER it had ended — timed out, aborted or failed — in the order they came
121
+ * (P1b). Each was dropped at the scope, so none reached the stage's buffer, its commit or a recorder; this is
122
+ * the record that they were tried — the first 100 (`MAX_LATE_WRITES`). An abandoned function can keep running
123
+ * after the run ended, so the list can grow after a snapshot was taken. Names only, never values. Absent when
124
+ * there were none.
125
+ */
126
+ lateWrites?: readonly LateWrite[];
127
+ /**
128
+ * Fixed-reason marks collected as this execution runs. Absent when no fact needs attention.
129
+ * Attempt evidence uses canonical Foottrace attempt IDs. Summary-only and stage-error proof resolves within THIS node
130
+ * through attemptSummary, errors:stageExecutionError or attemptsDropped. Quality marks are read-time recorder work.
131
+ * Marks retain no error text, values, targets or idempotency keys; omitted proof is disclosed as not-collected.
132
+ */
133
+ attention?: readonly Attention[];
96
134
  next?: StageSnapshot;
97
135
  children?: StageSnapshot[];
98
136
  };
@@ -7,8 +7,10 @@
7
7
  * in the record's `types.ts` until C6; the record names nothing outside itself now
8
8
  * (`RECORD_FILES`, scripts/layering.config.cjs), so they sit beside the frame that writes them.
9
9
  *
10
+ * A retried stage's node also carries its attempts (`attempts`, `attemptSummary` — the attempt leaf's types, L0).
11
+ *
10
12
  * A `StageSnapshot` is an `ExecutionTree` (`types.ts`), the shape the record's readers walk:
11
13
  * `commitStops`, `tagStops` and `keysReadFromExecutionTree` take one.
12
14
  */
13
15
  export {};
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWVUeXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbWVtb3J5L2ZyYW1lVHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0dBV0ciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGZyYW1lVHlwZXMudHMg4oCUIHRoZSB0eXBlcyBvZiB0aGUgZW5naW5lJ3MgZnJhbWUgKEw0KTogd2hhdCBvbmUgc3RhZ2UgaW5zaWRlIGEgcnVuIHJlcG9ydHMuXG4gKlxuICogSXRzIHNuYXBzaG90IChgU3RhZ2VTbmFwc2hvdGAsIG9uZSBub2RlIG9mIHRoZSBleGVjdXRpb24gdHJlZSksIGl0cyBmbG93IG1lc3NhZ2VzXG4gKiAoYEZsb3dNZXNzYWdlYCwgYEZsb3dDb250cm9sVHlwZWApIGFuZCB0aGUgdHdvIHJldGVudGlvbiBkaWFscyB0aGF0IHNoYXBlIHdoYXQgdGhlIHNuYXBzaG90XG4gKiBrZWVwcyAoYFJlYWRUcmFja2luZ01vZGVgLCBgV3JpdGVUcmFja2luZ01vZGVgLCBvdmVyIGBjYXB0dXJlL2AncyBgUmV0ZW50aW9uUG9saWN5YCkuIFRoZXkgbGl2ZWRcbiAqIGluIHRoZSByZWNvcmQncyBgdHlwZXMudHNgIHVudGlsIEM2OyB0aGUgcmVjb3JkIG5hbWVzIG5vdGhpbmcgb3V0c2lkZSBpdHNlbGYgbm93XG4gKiAoYFJFQ09SRF9GSUxFU2AsIHNjcmlwdHMvbGF5ZXJpbmcuY29uZmlnLmNqcyksIHNvIHRoZXkgc2l0IGJlc2lkZSB0aGUgZnJhbWUgdGhhdCB3cml0ZXMgdGhlbS5cbiAqXG4gKiBBIGBTdGFnZVNuYXBzaG90YCBpcyBhbiBgRXhlY3V0aW9uVHJlZWAgKGB0eXBlcy50c2ApLCB0aGUgc2hhcGUgdGhlIHJlY29yZCdzIHJlYWRlcnMgd2FsazpcbiAqIGBjb21taXRTdG9wc2AsIGB0YWdTdG9wc2AgYW5kIGBrZXlzUmVhZEZyb21FeGVjdXRpb25UcmVlYCB0YWtlIG9uZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFJldGVudGlvblBvbGljeSB9IGZyb20gJy4uL2NhcHR1cmUvcG9saWNpZXMuanMnO1xuXG4vLyDilIDilIAgRmxvdyBDb250cm9sIE5hcnJhdGl2ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqIFR5cGVzIG9mIGNvbnRyb2wgZmxvdyBkZWNpc2lvbnMgY2FwdHVyZWQgYnkgdGhlIGV4ZWN1dGlvbiBlbmdpbmUuICovXG5leHBvcnQgdHlwZSBGbG93Q29udHJvbFR5cGUgPSAnbmV4dCcgfCAnYnJhbmNoJyB8ICdjaGlsZHJlbicgfCAnc2VsZWN0ZWQnIHwgJ3N1YmZsb3cnIHwgJ2xvb3AnO1xuXG4vKiogQSBzaW5nbGUgZmxvdyBjb250cm9sIG5hcnJhdGl2ZSBlbnRyeS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd01lc3NhZ2Uge1xuICB0eXBlOiBGbG93Q29udHJvbFR5cGU7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHRhcmdldFN0YWdlPzogc3RyaW5nIHwgc3RyaW5nW107XG4gIHJhdGlvbmFsZT86IHN0cmluZztcbiAgY291bnQ/OiBudW1iZXI7XG4gIGl0ZXJhdGlvbj86IG51bWJlcjtcbiAgdGltZXN0YW1wPzogbnVtYmVyO1xufVxuXG4vLyDilIDilIAgUmVhZCAvIFdyaXRlIFRyYWNraW5nICgjMTQsICMxM2MtQSkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vL1xuLy8gVGhlIHBvbGljeSBmYW1pbHkgYW5kIG1hcmtlciBzaGFwZXMgYXJlIG93bmVkIGJ5IGBjYXB0dXJlL2AgKHNoYXJlZCB3aXRoXG4vLyB0aGUgZGVmZXJyZWQtb2JzZXJ2ZXIgY2FwdHVyZSB0aWVyKS5cblxuLyoqXG4gKiBQb2xpY3kgZm9yIGhvdyB0cmFja2VkIHJlYWRzIGFyZSByZWNvcmRlZCBpbnRvIGBTdGFnZVNuYXBzaG90LnN0YWdlUmVhZHNgLlxuICpcbiAqIC0gYCdmdWxsJ2AgKGRlZmF1bHQpIOKAlCBldmVyeSB0cmFja2VkIHJlYWQgYHN0cnVjdHVyZWRDbG9uZWBzIHRoZSB2YWx1ZSBpbnRvXG4gKiAgIHRoZSBzdGFnZSdzIHJlYWQgdmlldy4gQnl0ZS1pZGVudGljYWwgdG8gdGhlIGhpc3RvcmljYWwgYmVoYXZpb3I7IHRoaXMgaXNcbiAqICAgd2hhdCBzbmFwc2hvdCBjb25zdW1lcnMgKGxlbnMsIGFnZW50Zm9vdHByaW50KSBzZWUgdG9kYXkuXG4gKiAtIGAnc3VtbWFyeSdgIOKAlCByZWFkcyByZWNvcmQgYSBjaGVhcCB7QGxpbmsgUmVhZFN1bW1hcnlNYXJrZXJ9ICh0eXBlICsgc2l6ZVxuICogICBwcm94eSArIHNob3J0IHByZXZpZXcpIGluc3RlYWQgb2YgdGhlIGNsb25lZCB2YWx1ZS4gTygxKS1pc2ggcGVyIHJlYWQg4oCUXG4gKiAgIG5vIHZhbHVlIGNsb25lLCBubyBzZXJpYWxpemF0aW9uIG9mIGxhcmdlIG9iamVjdHMuXG4gKiAtIGAnb2ZmJ2Ag4oCUIHJlYWRzIGFyZSBub3QgcmVjb3JkZWQgYXQgYWxsOyBgc3RhZ2VSZWFkc2AgaXMgYWJzZW50IGZyb20gdGhlXG4gKiAgIHNuYXBzaG90LiBaZXJvIHBlci1yZWFkIGNvc3QuIFZhbHVlcyBhcmUgc3RpbGwgcmVhZGFibGUsIGFuZCB0aGVcbiAqICAgYFNjb3BlUmVjb3JkZXIub25SZWFkYCBldmVudCBzdGlsbCBmaXJlcyAoaXQgcGFzc2VzIHRoZSBsaXZlIHJlZmVyZW5jZSBhbmRcbiAqICAgbmV2ZXIgY2xvbmVkKSDigJQgc28gbmFycmF0aXZlIG91dHB1dCBpcyBpZGVudGljYWwgaW4gZXZlcnkgbW9kZS4gVGhlIHBvbGljeVxuICogICBzY29wZXMgT05MWSB0aGUgc25hcHNob3QncyBgc3RhZ2VSZWFkc2AgcGF5bG9hZC5cbiAqXG4gKiBTZXQgdmlhIGBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQsIHsgcmVhZFRyYWNraW5nIH0pYCBvclxuICogYGV4ZWN1dG9yLnNldFJlYWRUcmFja2luZyhtb2RlKWAgKGJlZm9yZSBgcnVuKClgKS5cbiAqXG4gKiBBbGlhcyBvZiB0aGUgc2hhcmVkIHtAbGluayBSZXRlbnRpb25Qb2xpY3l9IGZhbWlseSAoIzEzYy1BKSDigJQga2VwdCBhcyB0aGVcbiAqIHNoaXBwZWQgcHVibGljIG5hbWUgZm9yIHRoZSByZWFkIGRpYWwuXG4gKi9cbmV4cG9ydCB0eXBlIFJlYWRUcmFja2luZ01vZGUgPSBSZXRlbnRpb25Qb2xpY3k7XG5cbi8qKlxuICogUG9saWN5IGZvciBob3cgdHJhY2tlZCB3cml0ZXMgYXJlIHJlY29yZGVkIGludG8gYFN0YWdlU25hcHNob3Quc3RhZ2VXcml0ZXNgXG4gKiAoIzEzYy1BKSDigJQgdGhlIHNpYmxpbmcgb2Yge0BsaW5rIFJlYWRUcmFja2luZ01vZGV9LlxuICpcbiAqIC0gYCdmdWxsJ2AgKGRlZmF1bHQpIOKAlCBldmVyeSB0cmFja2VkIHdyaXRlIGBzdHJ1Y3R1cmVkQ2xvbmVgcyB0aGUgdmFsdWUgaW50b1xuICogICB0aGUgc3RhZ2UncyB3cml0ZSB2aWV3LiBCeXRlLWlkZW50aWNhbCB0byB0aGUgaGlzdG9yaWNhbCBiZWhhdmlvci5cbiAqIC0gYCdzdW1tYXJ5J2Ag4oCUIHdyaXRlcyByZWNvcmQgYSBjaGVhcCB7QGxpbmsgV3JpdGVTdW1tYXJ5TWFya2VyfSBpbnN0ZWFkIG9mXG4gKiAgIHRoZSBjbG9uZWQgdmFsdWUuXG4gKiAtIGAnb2ZmJ2Ag4oCUIHdyaXRlcyBhcmUgbm90IHJlY29yZGVkIGF0IGFsbDsgYHN0YWdlV3JpdGVzYCBpcyBhYnNlbnQgZnJvbSB0aGVcbiAqICAgc25hcHNob3QuIFRoZSB3cml0ZXMgdGhlbXNlbHZlcyBzdGlsbCBjb21taXQgdG8gc2hhcmVkIHN0YXRlIGFuZCBzdGlsbFxuICogICBhcHBlYXIgaW4gdGhlIGNvbW1pdCBsb2cg4oCUIG9ubHkgdGhlIHBlci1zdGFnZSBzbmFwc2hvdCBib29ra2VlcGluZyAoYW5kXG4gKiAgIHRoZXJlZm9yZSB0aGUgY29tbWl0IG9ic2VydmVyJ3MgbXV0YXRpb25zIHBheWxvYWQpIGlzIGFmZmVjdGVkLiAoVGhlXG4gKiAgIGNvbW1pdCBsb2cncyBvd24gdmFsdWUgZW5jb2RpbmcgaGFzIGl0cyBvd24gbG9zc2xlc3MgZGlhbCDigJRcbiAqICAge0BsaW5rIENvbW1pdFZhbHVlc01vZGV9LCAjMTNjLUIuKVxuICpcbiAqIFNldCB2aWEgYG5ldyBGbG93Q2hhcnRFeGVjdXRvcihjaGFydCwgeyB3cml0ZVRyYWNraW5nIH0pYCBvclxuICogYGV4ZWN1dG9yLnNldFdyaXRlVHJhY2tpbmcobW9kZSlgIChiZWZvcmUgYHJ1bigpYCkuIFNlZVxuICogYEZsb3dDaGFydEV4ZWN1dG9yT3B0aW9ucy53cml0ZVRyYWNraW5nYCBmb3IgdGhlIGZ1bGwgb2JzZXJ2YWJsZS1jb25zZXF1ZW5jZVxuICogY29udHJhY3QgKG9uQ29tbWl0IHBheWxvYWQsIHJlZGFjdGlvbiBwcmVjZWRlbmNlLCB3aGF0IGlzIE9VVCBvZiBzY29wZSkuXG4gKi9cbmV4cG9ydCB0eXBlIFdyaXRlVHJhY2tpbmdNb2RlID0gUmV0ZW50aW9uUG9saWN5O1xuXG4vLyDilIDilIAgU3RhZ2UgU25hcHNob3Qg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKiBTZXJpYWxpc2FibGUgcmVwcmVzZW50YXRpb24gb2YgYSBzdGFnZSdzIHN0YXRlIChmb3IgZGVidWdnaW5nIC8gdmlzdWFsaXNhdGlvbikuICovXG5leHBvcnQgdHlwZSBTdGFnZVNuYXBzaG90ID0ge1xuICBpZDogc3RyaW5nO1xuICAvKiogVW5pcXVlIHBlci1leGVjdXRpb24tc3RlcCBpZGVudGlmaWVyLiBGb3JtYXQ6IFtzdWJmbG93UGF0aC9dc3RhZ2VJZCNleGVjdXRpb25JbmRleCAqL1xuICBydW50aW1lU3RhZ2VJZD86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgLyoqIEh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHdoYXQgdGhpcyBzdGFnZSBkb2VzIChmcm9tIGJ1aWxkZXIpLiAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqIFN1YmZsb3cgaWRlbnRpZmllciDigJQgcHJlc2VudCB3aGVuIHRoaXMgc3RhZ2UgaXMgYSBzdWJmbG93IGVudHJ5IHBvaW50LiAqL1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG4gIGlzRGVjaWRlcj86IGJvb2xlYW47XG4gIGlzRm9yaz86IGJvb2xlYW47XG4gIC8qKiBVc2VyLWxldmVsIHdyaXRlcyBtYWRlIGJ5IHRoaXMgc3RhZ2UgKHByZS1uYW1lc3BhY2Uga2V5cyDihpIgdmFsdWVzKS5cbiAgICogIFNoYXBlIGRlcGVuZHMgb24ge0BsaW5rIFdyaXRlVHJhY2tpbmdNb2RlfTogY2xvbmVkIHZhbHVlcyB1bmRlciBgJ2Z1bGwnYFxuICAgKiAgKGRlZmF1bHQpLCB7QGxpbmsgV3JpdGVTdW1tYXJ5TWFya2VyfXMgdW5kZXIgYCdzdW1tYXJ5J2AsIGFic2VudCB1bmRlclxuICAgKiAgYCdvZmYnYC4gUmVkYWN0ZWQgd3JpdGVzIHNob3cgYCdbUkVEQUNURURdJ2AgcmVnYXJkbGVzcyBvZiBtb2RlLiAqL1xuICBzdGFnZVdyaXRlcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvKiogVXNlci1sZXZlbCByZWFkcyBtYWRlIGJ5IHRoaXMgc3RhZ2UgKHByZS1uYW1lc3BhY2Uga2V5cyDihpIgdmFsdWVzIGF0IHJlYWRcbiAgICogIHRpbWUpLiBTaGFwZSBkZXBlbmRzIG9uIHtAbGluayBSZWFkVHJhY2tpbmdNb2RlfTogY2xvbmVkIHZhbHVlcyB1bmRlclxuICAgKiAgYCdmdWxsJ2AgKGRlZmF1bHQpLCB7QGxpbmsgUmVhZFN1bW1hcnlNYXJrZXJ9cyB1bmRlciBgJ3N1bW1hcnknYCwgYWJzZW50XG4gICAqICB1bmRlciBgJ29mZidgLiAqL1xuICBzdGFnZVJlYWRzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGxvZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBlcnJvcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBtZXRyaWNzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgZXZhbHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBmbG93TWVzc2FnZXM/OiBGbG93TWVzc2FnZVtdO1xuICBuZXh0PzogU3RhZ2VTbmFwc2hvdDtcbiAgY2hpbGRyZW4/OiBTdGFnZVNuYXBzaG90W107XG59O1xuIl19
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWVUeXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbWVtb3J5L2ZyYW1lVHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogZnJhbWVUeXBlcy50cyDigJQgdGhlIHR5cGVzIG9mIHRoZSBlbmdpbmUncyBmcmFtZSAoTDQpOiB3aGF0IG9uZSBzdGFnZSBpbnNpZGUgYSBydW4gcmVwb3J0cy5cbiAqXG4gKiBJdHMgc25hcHNob3QgKGBTdGFnZVNuYXBzaG90YCwgb25lIG5vZGUgb2YgdGhlIGV4ZWN1dGlvbiB0cmVlKSwgaXRzIGZsb3cgbWVzc2FnZXNcbiAqIChgRmxvd01lc3NhZ2VgLCBgRmxvd0NvbnRyb2xUeXBlYCkgYW5kIHRoZSB0d28gcmV0ZW50aW9uIGRpYWxzIHRoYXQgc2hhcGUgd2hhdCB0aGUgc25hcHNob3RcbiAqIGtlZXBzIChgUmVhZFRyYWNraW5nTW9kZWAsIGBXcml0ZVRyYWNraW5nTW9kZWAsIG92ZXIgYGNhcHR1cmUvYCdzIGBSZXRlbnRpb25Qb2xpY3lgKS4gVGhleSBsaXZlZFxuICogaW4gdGhlIHJlY29yZCdzIGB0eXBlcy50c2AgdW50aWwgQzY7IHRoZSByZWNvcmQgbmFtZXMgbm90aGluZyBvdXRzaWRlIGl0c2VsZiBub3dcbiAqIChgUkVDT1JEX0ZJTEVTYCwgc2NyaXB0cy9sYXllcmluZy5jb25maWcuY2pzKSwgc28gdGhleSBzaXQgYmVzaWRlIHRoZSBmcmFtZSB0aGF0IHdyaXRlcyB0aGVtLlxuICpcbiAqIEEgcmV0cmllZCBzdGFnZSdzIG5vZGUgYWxzbyBjYXJyaWVzIGl0cyBhdHRlbXB0cyAoYGF0dGVtcHRzYCwgYGF0dGVtcHRTdW1tYXJ5YCDigJQgdGhlIGF0dGVtcHQgbGVhZidzIHR5cGVzLCBMMCkuXG4gKlxuICogQSBgU3RhZ2VTbmFwc2hvdGAgaXMgYW4gYEV4ZWN1dGlvblRyZWVgIChgdHlwZXMudHNgKSwgdGhlIHNoYXBlIHRoZSByZWNvcmQncyByZWFkZXJzIHdhbGs6XG4gKiBgY29tbWl0U3RvcHNgLCBgdGFnU3RvcHNgIGFuZCBga2V5c1JlYWRGcm9tRXhlY3V0aW9uVHJlZWAgdGFrZSBvbmUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBdHRlbnRpb24gfSBmcm9tICdmb290dHJhY2UnO1xuXG5pbXBvcnQgdHlwZSB7IEF0dGVtcHRSZWNvcmQsIEF0dGVtcHRTdW1tYXJ5LCBMYXRlV3JpdGUgfSBmcm9tICcuLi9hdHRlbXB0L3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgUmV0ZW50aW9uUG9saWN5IH0gZnJvbSAnLi4vY2FwdHVyZS9wb2xpY2llcy5qcyc7XG5cbi8vIOKUgOKUgCBGbG93IENvbnRyb2wgTmFycmF0aXZlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogVHlwZXMgb2YgY29udHJvbCBmbG93IGRlY2lzaW9ucyBjYXB0dXJlZCBieSB0aGUgZXhlY3V0aW9uIGVuZ2luZS4gKi9cbmV4cG9ydCB0eXBlIEZsb3dDb250cm9sVHlwZSA9ICduZXh0JyB8ICdicmFuY2gnIHwgJ2NoaWxkcmVuJyB8ICdzZWxlY3RlZCcgfCAnc3ViZmxvdycgfCAnbG9vcCc7XG5cbi8qKiBBIHNpbmdsZSBmbG93IGNvbnRyb2wgbmFycmF0aXZlIGVudHJ5LiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbG93TWVzc2FnZSB7XG4gIHR5cGU6IEZsb3dDb250cm9sVHlwZTtcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgdGFyZ2V0U3RhZ2U/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgcmF0aW9uYWxlPzogc3RyaW5nO1xuICBjb3VudD86IG51bWJlcjtcbiAgaXRlcmF0aW9uPzogbnVtYmVyO1xuICB0aW1lc3RhbXA/OiBudW1iZXI7XG59XG5cbi8vIOKUgOKUgCBSZWFkIC8gV3JpdGUgVHJhY2tpbmcgKCMxNCwgIzEzYy1BKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vXG4vLyBUaGUgcG9saWN5IGZhbWlseSBhbmQgbWFya2VyIHNoYXBlcyBhcmUgb3duZWQgYnkgYGNhcHR1cmUvYCAoc2hhcmVkIHdpdGhcbi8vIHRoZSBkZWZlcnJlZC1vYnNlcnZlciBjYXB0dXJlIHRpZXIpLlxuXG4vKipcbiAqIFBvbGljeSBmb3IgaG93IHRyYWNrZWQgcmVhZHMgYXJlIHJlY29yZGVkIGludG8gYFN0YWdlU25hcHNob3Quc3RhZ2VSZWFkc2AuXG4gKlxuICogLSBgJ2Z1bGwnYCAoZGVmYXVsdCkg4oCUIGV2ZXJ5IHRyYWNrZWQgcmVhZCBgc3RydWN0dXJlZENsb25lYHMgdGhlIHZhbHVlIGludG9cbiAqICAgdGhlIHN0YWdlJ3MgcmVhZCB2aWV3LiBCeXRlLWlkZW50aWNhbCB0byB0aGUgaGlzdG9yaWNhbCBiZWhhdmlvcjsgdGhpcyBpc1xuICogICB3aGF0IHNuYXBzaG90IGNvbnN1bWVycyAobGVucywgYWdlbnRmb290cHJpbnQpIHNlZSB0b2RheS5cbiAqIC0gYCdzdW1tYXJ5J2Ag4oCUIHJlYWRzIHJlY29yZCBhIGNoZWFwIHtAbGluayBSZWFkU3VtbWFyeU1hcmtlcn0gKHR5cGUgKyBzaXplXG4gKiAgIHByb3h5ICsgc2hvcnQgcHJldmlldykgaW5zdGVhZCBvZiB0aGUgY2xvbmVkIHZhbHVlLiBPKDEpLWlzaCBwZXIgcmVhZCDigJRcbiAqICAgbm8gdmFsdWUgY2xvbmUsIG5vIHNlcmlhbGl6YXRpb24gb2YgbGFyZ2Ugb2JqZWN0cy5cbiAqIC0gYCdvZmYnYCDigJQgcmVhZHMgYXJlIG5vdCByZWNvcmRlZCBhdCBhbGw7IGBzdGFnZVJlYWRzYCBpcyBhYnNlbnQgZnJvbSB0aGVcbiAqICAgc25hcHNob3QuIFplcm8gcGVyLXJlYWQgY29zdC4gVmFsdWVzIGFyZSBzdGlsbCByZWFkYWJsZSwgYW5kIHRoZVxuICogICBgU2NvcGVSZWNvcmRlci5vblJlYWRgIGV2ZW50IHN0aWxsIGZpcmVzIChpdCBwYXNzZXMgdGhlIGxpdmUgcmVmZXJlbmNlIGFuZFxuICogICBuZXZlciBjbG9uZWQpIOKAlCBzbyBuYXJyYXRpdmUgb3V0cHV0IGlzIGlkZW50aWNhbCBpbiBldmVyeSBtb2RlLiBUaGUgcG9saWN5XG4gKiAgIHNjb3BlcyBPTkxZIHRoZSBzbmFwc2hvdCdzIGBzdGFnZVJlYWRzYCBwYXlsb2FkLlxuICpcbiAqIFNldCB2aWEgYG5ldyBGbG93Q2hhcnRFeGVjdXRvcihjaGFydCwgeyByZWFkVHJhY2tpbmcgfSlgIG9yXG4gKiBgZXhlY3V0b3Iuc2V0UmVhZFRyYWNraW5nKG1vZGUpYCAoYmVmb3JlIGBydW4oKWApLlxuICpcbiAqIEFsaWFzIG9mIHRoZSBzaGFyZWQge0BsaW5rIFJldGVudGlvblBvbGljeX0gZmFtaWx5ICgjMTNjLUEpIOKAlCBrZXB0IGFzIHRoZVxuICogc2hpcHBlZCBwdWJsaWMgbmFtZSBmb3IgdGhlIHJlYWQgZGlhbC5cbiAqL1xuZXhwb3J0IHR5cGUgUmVhZFRyYWNraW5nTW9kZSA9IFJldGVudGlvblBvbGljeTtcblxuLyoqXG4gKiBQb2xpY3kgZm9yIGhvdyB0cmFja2VkIHdyaXRlcyBhcmUgcmVjb3JkZWQgaW50byBgU3RhZ2VTbmFwc2hvdC5zdGFnZVdyaXRlc2BcbiAqICgjMTNjLUEpIOKAlCB0aGUgc2libGluZyBvZiB7QGxpbmsgUmVhZFRyYWNraW5nTW9kZX0uXG4gKlxuICogLSBgJ2Z1bGwnYCAoZGVmYXVsdCkg4oCUIGV2ZXJ5IHRyYWNrZWQgd3JpdGUgYHN0cnVjdHVyZWRDbG9uZWBzIHRoZSB2YWx1ZSBpbnRvXG4gKiAgIHRoZSBzdGFnZSdzIHdyaXRlIHZpZXcuIEJ5dGUtaWRlbnRpY2FsIHRvIHRoZSBoaXN0b3JpY2FsIGJlaGF2aW9yLlxuICogLSBgJ3N1bW1hcnknYCDigJQgd3JpdGVzIHJlY29yZCBhIGNoZWFwIHtAbGluayBXcml0ZVN1bW1hcnlNYXJrZXJ9IGluc3RlYWQgb2ZcbiAqICAgdGhlIGNsb25lZCB2YWx1ZS5cbiAqIC0gYCdvZmYnYCDigJQgd3JpdGVzIGFyZSBub3QgcmVjb3JkZWQgYXQgYWxsOyBgc3RhZ2VXcml0ZXNgIGlzIGFic2VudCBmcm9tIHRoZVxuICogICBzbmFwc2hvdC4gVGhlIHdyaXRlcyB0aGVtc2VsdmVzIHN0aWxsIGNvbW1pdCB0byBzaGFyZWQgc3RhdGUgYW5kIHN0aWxsXG4gKiAgIGFwcGVhciBpbiB0aGUgY29tbWl0IGxvZyDigJQgb25seSB0aGUgcGVyLXN0YWdlIHNuYXBzaG90IGJvb2trZWVwaW5nIChhbmRcbiAqICAgdGhlcmVmb3JlIHRoZSBjb21taXQgb2JzZXJ2ZXIncyBtdXRhdGlvbnMgcGF5bG9hZCkgaXMgYWZmZWN0ZWQuIChUaGVcbiAqICAgY29tbWl0IGxvZydzIG93biB2YWx1ZSBlbmNvZGluZyBoYXMgaXRzIG93biBsb3NzbGVzcyBkaWFsIOKAlFxuICogICB7QGxpbmsgQ29tbWl0VmFsdWVzTW9kZX0sICMxM2MtQi4pXG4gKlxuICogU2V0IHZpYSBgbmV3IEZsb3dDaGFydEV4ZWN1dG9yKGNoYXJ0LCB7IHdyaXRlVHJhY2tpbmcgfSlgIG9yXG4gKiBgZXhlY3V0b3Iuc2V0V3JpdGVUcmFja2luZyhtb2RlKWAgKGJlZm9yZSBgcnVuKClgKS4gU2VlXG4gKiBgRmxvd0NoYXJ0RXhlY3V0b3JPcHRpb25zLndyaXRlVHJhY2tpbmdgIGZvciB0aGUgZnVsbCBvYnNlcnZhYmxlLWNvbnNlcXVlbmNlXG4gKiBjb250cmFjdCAob25Db21taXQgcGF5bG9hZCwgcmVkYWN0aW9uIHByZWNlZGVuY2UsIHdoYXQgaXMgT1VUIG9mIHNjb3BlKS5cbiAqL1xuZXhwb3J0IHR5cGUgV3JpdGVUcmFja2luZ01vZGUgPSBSZXRlbnRpb25Qb2xpY3k7XG5cbi8vIOKUgOKUgCBTdGFnZSBTbmFwc2hvdCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqIFNlcmlhbGlzYWJsZSByZXByZXNlbnRhdGlvbiBvZiBhIHN0YWdlJ3Mgc3RhdGUgKGZvciBkZWJ1Z2dpbmcgLyB2aXN1YWxpc2F0aW9uKS4gKi9cbmV4cG9ydCB0eXBlIFN0YWdlU25hcHNob3QgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBVbmlxdWUgcGVyLWV4ZWN1dGlvbi1zdGVwIGlkZW50aWZpZXIuIEZvcm1hdDogW3N1YmZsb3dQYXRoL11zdGFnZUlkI2V4ZWN1dGlvbkluZGV4ICovXG4gIHJ1bnRpbWVTdGFnZUlkPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICAvKiogSHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gb2Ygd2hhdCB0aGlzIHN0YWdlIGRvZXMgKGZyb20gYnVpbGRlcikuICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKiogU3ViZmxvdyBpZGVudGlmaWVyIOKAlCBwcmVzZW50IHdoZW4gdGhpcyBzdGFnZSBpcyBhIHN1YmZsb3cgZW50cnkgcG9pbnQuICovXG4gIHN1YmZsb3dJZD86IHN0cmluZztcbiAgaXNEZWNpZGVyPzogYm9vbGVhbjtcbiAgaXNGb3JrPzogYm9vbGVhbjtcbiAgLyoqIFVzZXItbGV2ZWwgd3JpdGVzIG1hZGUgYnkgdGhpcyBzdGFnZSAocHJlLW5hbWVzcGFjZSBrZXlzIOKGkiB2YWx1ZXMpLlxuICAgKiAgU2hhcGUgZGVwZW5kcyBvbiB7QGxpbmsgV3JpdGVUcmFja2luZ01vZGV9OiBjbG9uZWQgdmFsdWVzIHVuZGVyIGAnZnVsbCdgXG4gICAqICAoZGVmYXVsdCksIHtAbGluayBXcml0ZVN1bW1hcnlNYXJrZXJ9cyB1bmRlciBgJ3N1bW1hcnknYCwgYWJzZW50IHVuZGVyXG4gICAqICBgJ29mZidgLiBSZWRhY3RlZCB3cml0ZXMgc2hvdyBgJ1tSRURBQ1RFRF0nYCByZWdhcmRsZXNzIG9mIG1vZGUuICovXG4gIHN0YWdlV3JpdGVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8qKiBVc2VyLWxldmVsIHJlYWRzIG1hZGUgYnkgdGhpcyBzdGFnZSAocHJlLW5hbWVzcGFjZSBrZXlzIOKGkiB2YWx1ZXMgYXQgcmVhZFxuICAgKiAgdGltZSkuIFNoYXBlIGRlcGVuZHMgb24ge0BsaW5rIFJlYWRUcmFja2luZ01vZGV9OiBjbG9uZWQgdmFsdWVzIHVuZGVyXG4gICAqICBgJ2Z1bGwnYCAoZGVmYXVsdCksIHtAbGluayBSZWFkU3VtbWFyeU1hcmtlcn1zIHVuZGVyIGAnc3VtbWFyeSdgLCBhYnNlbnRcbiAgICogIHVuZGVyIGAnb2ZmJ2AuICovXG4gIHN0YWdlUmVhZHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgbG9nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGVycm9yczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIG1ldHJpY3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBldmFsczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGZsb3dNZXNzYWdlcz86IEZsb3dNZXNzYWdlW107XG4gIC8qKlxuICAgKiBFdmVyeSBhdHRlbXB0IG9mIHRoaXMgZXhlY3V0aW9uLCBpbiBvcmRlciDigJQgd2hlbiBpdCBzdGFydGVkLCBob3cgbG9uZyBpdCB0b29rLCBob3cgaXQgZW5kZWQsIGFuZCB0aGVcbiAgICogcmV0cnktb3Itc3RvcCBkZWNpc2lvbiB0aGF0IGZvbGxvd2VkIChgQXR0ZW1wdFJlY29yZGApOiB0aGUgc3RhZ2UncyBvd24gdW5kZXIgaXRzIHJldHJ5IHBvbGljeSwgYSBgdGltZW91dE1zYFxuICAgKiBvciBhIHJ1biBkZWFkbGluZSAoMTAuMSwgYGtpbmQ6ICdzdGFnZSdgKSwgYW5kIHRob3NlIG9mIHRoZSBjYWxscyBpdCBtYWRlIHRocm91Z2ggYHNjb3BlLiRjYWxsYCBhbmQgdGhlXG4gICAqIG91dHNpZGUgYXR0ZW1wdHMgaXQgcmVwb3J0ZWQgdGhyb3VnaCBgb2JzZXJ2ZWQoKWAgKFAyLCBga2luZDogJ2NhbGwnYCAvIGAnb2JzZXJ2ZWQnYCwgdGhlIGZpcnN0IDEwMDAg4oCUXG4gICAqIGBTdGFnZUNvbnRleHQgwrcgTUFYX0NBTExfUkVDT1JEU2ApLiBBYnNlbnQgd2hlbiB0aGVyZSBhcmUgbm9uZS4gVGhlIGNvbW1pdCBsb2cgbmV2ZXIgY2FycmllcyBhdHRlbXB0czogYVxuICAgKiByZXRyaWVkIHN0YWdlIGlzIHN0aWxsIE9ORSBidW5kbGUuXG4gICAqL1xuICBhdHRlbXB0cz86IHJlYWRvbmx5IEF0dGVtcHRSZWNvcmRbXTtcbiAgLyoqXG4gICAqIENhbGwgYW5kIG9ic2VydmVkIGF0dGVtcHQgcmVjb3JkcyB0aGlzIGV4ZWN1dGlvbiBtYWRlIHBhc3QgdGhlIGZpcnN0IDEwMDAg4oCUIGNvdW50ZWQsIG5vdCBrZXB0IChlYWNoIHN0aWxsXG4gICAqIGZpcmVkIGBvbkF0dGVtcHRgKS4gQWJzZW50IHdoZW4gbm9uZSB3ZXJlIGRyb3BwZWQuXG4gICAqL1xuICBhdHRlbXB0c0Ryb3BwZWQ/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgc2VyaWVzIGF0IGEgZ2xhbmNlIOKAlCBjb3VudHMgcGVyIG91dGNvbWUsIGFuZCBob3cgaXQgZW5kZWQuIFN0YW1wZWQgd2hlbiB0aGUgc2VyaWVzIGVuZHM6IGFic2VudCB3aGlsZSBpdFxuICAgKiBpcyBzdGlsbCBydW5uaW5nIChhIHNuYXBzaG90IHRha2VuIG1pZC1zdGFnZSkgYW5kIHdpdGhvdXQgYSBwb2xpY3kuXG4gICAqL1xuICBhdHRlbXB0U3VtbWFyeT86IEF0dGVtcHRTdW1tYXJ5O1xuICAvKipcbiAgICogV3JpdGVzIChhbmQgZW1pdHMpIGFuIGF0dGVtcHQgdHJpZWQgQUZURVIgaXQgaGFkIGVuZGVkIOKAlCB0aW1lZCBvdXQsIGFib3J0ZWQgb3IgZmFpbGVkIOKAlCBpbiB0aGUgb3JkZXIgdGhleSBjYW1lXG4gICAqIChQMWIpLiBFYWNoIHdhcyBkcm9wcGVkIGF0IHRoZSBzY29wZSwgc28gbm9uZSByZWFjaGVkIHRoZSBzdGFnZSdzIGJ1ZmZlciwgaXRzIGNvbW1pdCBvciBhIHJlY29yZGVyOyB0aGlzIGlzXG4gICAqIHRoZSByZWNvcmQgdGhhdCB0aGV5IHdlcmUgdHJpZWQg4oCUIHRoZSBmaXJzdCAxMDAgKGBNQVhfTEFURV9XUklURVNgKS4gQW4gYWJhbmRvbmVkIGZ1bmN0aW9uIGNhbiBrZWVwIHJ1bm5pbmdcbiAgICogYWZ0ZXIgdGhlIHJ1biBlbmRlZCwgc28gdGhlIGxpc3QgY2FuIGdyb3cgYWZ0ZXIgYSBzbmFwc2hvdCB3YXMgdGFrZW4uIE5hbWVzIG9ubHksIG5ldmVyIHZhbHVlcy4gQWJzZW50IHdoZW5cbiAgICogdGhlcmUgd2VyZSBub25lLlxuICAgKi9cbiAgbGF0ZVdyaXRlcz86IHJlYWRvbmx5IExhdGVXcml0ZVtdO1xuICAvKipcbiAgICogRml4ZWQtcmVhc29uIG1hcmtzIGNvbGxlY3RlZCBhcyB0aGlzIGV4ZWN1dGlvbiBydW5zLiBBYnNlbnQgd2hlbiBubyBmYWN0IG5lZWRzIGF0dGVudGlvbi5cbiAgICogQXR0ZW1wdCBldmlkZW5jZSB1c2VzIGNhbm9uaWNhbCBGb290dHJhY2UgYXR0ZW1wdCBJRHMuIFN1bW1hcnktb25seSBhbmQgc3RhZ2UtZXJyb3IgcHJvb2YgcmVzb2x2ZXMgd2l0aGluIFRISVMgbm9kZVxuICAgKiB0aHJvdWdoIGF0dGVtcHRTdW1tYXJ5LCBlcnJvcnM6c3RhZ2VFeGVjdXRpb25FcnJvciBvciBhdHRlbXB0c0Ryb3BwZWQuIFF1YWxpdHkgbWFya3MgYXJlIHJlYWQtdGltZSByZWNvcmRlciB3b3JrLlxuICAgKiBNYXJrcyByZXRhaW4gbm8gZXJyb3IgdGV4dCwgdmFsdWVzLCB0YXJnZXRzIG9yIGlkZW1wb3RlbmN5IGtleXM7IG9taXR0ZWQgcHJvb2YgaXMgZGlzY2xvc2VkIGFzIG5vdC1jb2xsZWN0ZWQuXG4gICAqL1xuICBhdHRlbnRpb24/OiByZWFkb25seSBBdHRlbnRpb25bXTtcbiAgbmV4dD86IFN0YWdlU25hcHNob3Q7XG4gIGNoaWxkcmVuPzogU3RhZ2VTbmFwc2hvdFtdO1xufTtcbiJdfQ==
@@ -224,6 +224,18 @@ export declare class RedactionRule {
224
224
  * channel) applies on top. Clear values keep their identity.
225
225
  */
226
226
  retainDiagnostic(address: readonly string[], value: unknown): unknown;
227
+ /**
228
+ * An idempotency key as records serve it (P3, design §6). The key is a VALUE, and the documented way to make one
229
+ * is from the input or the state (`order-${args.orderId}`) — so it is selected by its NAME (the diagnostic entry
230
+ * `{ idempotencyKey }`: a state rule of that name, or `policy.diagnostics` at `logs.idempotencyKey`) AND by its
231
+ * SOURCES, conservatively, the subflow-mapper taint law's way: when the input it may be derived from holds a
232
+ * selected key at any depth, or the stage read a selected value before making it (`selectedReads`), it is served
233
+ * whole as the placeholder. Never value equality. An inert rule never reads it.
234
+ */
235
+ retainIdempotencyKey(key: string, sources: {
236
+ readonly input?: unknown;
237
+ readonly selectedReads?: number;
238
+ }): string;
227
239
  /**
228
240
  * Retain flow-message text (`flowMessages.description` / `.rationale`): text
229
241
  * the engine composes has no name of its own, so no state selector reaches