footprintjs 9.30.0 → 9.32.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 (149) hide show
  1. package/AGENTS.md +3 -3
  2. package/CLAUDE.md +6 -4
  3. package/dist/esm/index.d.ts +1 -1
  4. package/dist/esm/index.js +2 -2
  5. package/dist/esm/lib/builder/FlowChartBuilder.js +2 -2
  6. package/dist/esm/lib/builder/structure/StructureRecorderDispatcher.js +2 -2
  7. package/dist/esm/lib/capture/circular.d.ts +17 -0
  8. package/dist/esm/lib/capture/circular.js +45 -0
  9. package/dist/esm/lib/capture/envelope.d.ts +1 -1
  10. package/dist/esm/lib/capture/envelope.js +2 -2
  11. package/dist/esm/lib/capture/index.d.ts +7 -1
  12. package/dist/esm/lib/capture/index.js +8 -2
  13. package/dist/esm/lib/capture/invokeHook.d.ts +36 -0
  14. package/dist/esm/lib/capture/invokeHook.js +42 -0
  15. package/dist/esm/lib/capture/summarize.d.ts +13 -0
  16. package/dist/esm/lib/capture/summarize.js +37 -1
  17. package/dist/esm/lib/decide/decide.js +2 -2
  18. package/dist/esm/lib/decide/evaluator.js +5 -4
  19. package/dist/esm/lib/decide/evidence.js +4 -3
  20. package/dist/esm/lib/devMode.d.ts +45 -0
  21. package/dist/esm/lib/devMode.js +96 -0
  22. package/dist/esm/lib/engine/handlers/RuntimeStructureManager.js +2 -2
  23. package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +1 -1
  24. package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.js +2 -2
  25. package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.js +2 -2
  26. package/dist/esm/lib/memory/StageContext.js +5 -4
  27. package/dist/esm/lib/memory/admission.d.ts +1 -1
  28. package/dist/esm/lib/memory/admission.js +2 -2
  29. package/dist/esm/lib/memory/backtrack.d.ts +9 -0
  30. package/dist/esm/lib/memory/backtrack.js +2 -2
  31. package/dist/esm/lib/memory/commitLogUtils.d.ts +21 -3
  32. package/dist/esm/lib/memory/commitLogUtils.js +39 -43
  33. package/dist/esm/lib/memory/equality.d.ts +57 -0
  34. package/dist/esm/lib/memory/equality.js +159 -0
  35. package/dist/esm/lib/memory/honesty.d.ts +88 -0
  36. package/dist/esm/lib/memory/honesty.js +86 -0
  37. package/dist/esm/lib/memory/index.d.ts +5 -1
  38. package/dist/esm/lib/memory/index.js +7 -2
  39. package/dist/esm/lib/memory/merge.d.ts +25 -0
  40. package/dist/esm/lib/memory/merge.js +49 -0
  41. package/dist/esm/lib/memory/paths.d.ts +52 -0
  42. package/dist/esm/lib/memory/paths.js +57 -0
  43. package/dist/esm/lib/memory/placeholders.d.ts +44 -0
  44. package/dist/esm/lib/memory/placeholders.js +45 -0
  45. package/dist/esm/lib/memory/redaction.d.ts +4 -4
  46. package/dist/esm/lib/memory/redaction.js +12 -11
  47. package/dist/esm/lib/memory/utils.d.ts +15 -216
  48. package/dist/esm/lib/memory/utils.js +19 -438
  49. package/dist/esm/lib/memory/verbs.d.ts +289 -0
  50. package/dist/esm/lib/memory/verbs.js +386 -0
  51. package/dist/esm/lib/recorder/BoundaryStateStore.js +2 -2
  52. package/dist/esm/lib/recorder/invokeHook.d.ts +5 -29
  53. package/dist/esm/lib/recorder/invokeHook.js +6 -35
  54. package/dist/esm/lib/runner/DeferredObserverTier.js +3 -3
  55. package/dist/esm/lib/runner/ExecutionRuntime.d.ts +1 -0
  56. package/dist/esm/lib/runner/ExecutionRuntime.js +2 -4
  57. package/dist/esm/lib/runner/FlowChartExecutor.d.ts +1 -1
  58. package/dist/esm/lib/runner/FlowChartExecutor.js +2 -2
  59. package/dist/esm/lib/runner/getSubtreeSnapshot.js +2 -2
  60. package/dist/esm/lib/scope/ScopeFacade.js +6 -4
  61. package/dist/esm/lib/scope/detectCircular.d.ts +9 -43
  62. package/dist/esm/lib/scope/detectCircular.js +10 -121
  63. package/dist/esm/lib/scope/recorders/summarizeValue.d.ts +3 -5
  64. package/dist/esm/lib/scope/recorders/summarizeValue.js +4 -29
  65. package/dist/esm/lib/slice/elementProvenance.d.ts +13 -9
  66. package/dist/esm/lib/slice/elementProvenance.js +54 -63
  67. package/dist/esm/lib/slice/types.d.ts +40 -27
  68. package/dist/esm/lib/slice/types.js +1 -1
  69. package/dist/esm/lib/time-travel/bundles.js +6 -4
  70. package/dist/esm/lib/time-travel/stateAt.d.ts +3 -2
  71. package/dist/esm/lib/time-travel/stateAt.js +4 -3
  72. package/dist/esm/lib/time-travel/types.d.ts +18 -7
  73. package/dist/esm/lib/time-travel/types.js +1 -1
  74. package/dist/esm/trace.d.ts +3 -0
  75. package/dist/esm/trace.js +7 -1
  76. package/dist/index.js +5 -5
  77. package/dist/lib/builder/FlowChartBuilder.js +3 -3
  78. package/dist/lib/builder/structure/StructureRecorderDispatcher.js +3 -3
  79. package/dist/lib/capture/circular.js +49 -0
  80. package/dist/lib/capture/envelope.js +2 -2
  81. package/dist/lib/capture/index.js +11 -2
  82. package/dist/lib/capture/invokeHook.js +46 -0
  83. package/dist/lib/capture/summarize.js +39 -2
  84. package/dist/lib/decide/decide.js +4 -4
  85. package/dist/lib/decide/evaluator.js +6 -5
  86. package/dist/lib/decide/evidence.js +4 -3
  87. package/dist/lib/devMode.js +102 -0
  88. package/dist/lib/engine/handlers/RuntimeStructureManager.js +5 -5
  89. package/dist/lib/engine/narrative/CombinedNarrativeRecorder.js +3 -3
  90. package/dist/lib/engine/narrative/FlowRecorderDispatcher.js +19 -19
  91. package/dist/lib/memory/StageContext.js +7 -6
  92. package/dist/lib/memory/admission.js +2 -2
  93. package/dist/lib/memory/backtrack.js +3 -3
  94. package/dist/lib/memory/commitLogUtils.js +41 -44
  95. package/dist/lib/memory/equality.js +163 -0
  96. package/dist/lib/memory/honesty.js +89 -0
  97. package/dist/lib/memory/index.js +11 -3
  98. package/dist/lib/memory/merge.js +53 -0
  99. package/dist/lib/memory/paths.js +62 -0
  100. package/dist/lib/memory/placeholders.js +48 -0
  101. package/dist/lib/memory/redaction.js +14 -13
  102. package/dist/lib/memory/utils.js +30 -448
  103. package/dist/lib/memory/verbs.js +403 -0
  104. package/dist/lib/recorder/BoundaryStateStore.js +5 -5
  105. package/dist/lib/recorder/invokeHook.js +8 -37
  106. package/dist/lib/runner/DeferredObserverTier.js +6 -6
  107. package/dist/lib/runner/ExecutionRuntime.js +3 -5
  108. package/dist/lib/runner/FlowChartExecutor.js +4 -4
  109. package/dist/lib/runner/getSubtreeSnapshot.js +3 -3
  110. package/dist/lib/scope/ScopeFacade.js +10 -8
  111. package/dist/lib/scope/detectCircular.js +15 -126
  112. package/dist/lib/scope/recorders/summarizeValue.js +7 -32
  113. package/dist/lib/slice/elementProvenance.js +53 -62
  114. package/dist/lib/slice/types.js +1 -1
  115. package/dist/lib/time-travel/bundles.js +6 -4
  116. package/dist/lib/time-travel/stateAt.js +4 -3
  117. package/dist/lib/time-travel/types.js +1 -1
  118. package/dist/trace.js +35 -27
  119. package/dist/types/index.d.ts +1 -1
  120. package/dist/types/lib/capture/circular.d.ts +17 -0
  121. package/dist/types/lib/capture/envelope.d.ts +1 -1
  122. package/dist/types/lib/capture/index.d.ts +7 -1
  123. package/dist/types/lib/capture/invokeHook.d.ts +36 -0
  124. package/dist/types/lib/capture/summarize.d.ts +13 -0
  125. package/dist/types/lib/devMode.d.ts +45 -0
  126. package/dist/types/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +1 -1
  127. package/dist/types/lib/memory/admission.d.ts +1 -1
  128. package/dist/types/lib/memory/backtrack.d.ts +9 -0
  129. package/dist/types/lib/memory/commitLogUtils.d.ts +21 -3
  130. package/dist/types/lib/memory/equality.d.ts +57 -0
  131. package/dist/types/lib/memory/honesty.d.ts +88 -0
  132. package/dist/types/lib/memory/index.d.ts +5 -1
  133. package/dist/types/lib/memory/merge.d.ts +25 -0
  134. package/dist/types/lib/memory/paths.d.ts +52 -0
  135. package/dist/types/lib/memory/placeholders.d.ts +44 -0
  136. package/dist/types/lib/memory/redaction.d.ts +4 -4
  137. package/dist/types/lib/memory/utils.d.ts +15 -216
  138. package/dist/types/lib/memory/verbs.d.ts +289 -0
  139. package/dist/types/lib/recorder/invokeHook.d.ts +5 -29
  140. package/dist/types/lib/runner/ExecutionRuntime.d.ts +1 -0
  141. package/dist/types/lib/runner/FlowChartExecutor.d.ts +1 -1
  142. package/dist/types/lib/scope/detectCircular.d.ts +9 -43
  143. package/dist/types/lib/scope/recorders/summarizeValue.d.ts +3 -5
  144. package/dist/types/lib/slice/elementProvenance.d.ts +13 -9
  145. package/dist/types/lib/slice/types.d.ts +40 -27
  146. package/dist/types/lib/time-travel/stateAt.d.ts +3 -2
  147. package/dist/types/lib/time-travel/types.d.ts +18 -7
  148. package/dist/types/trace.d.ts +3 -0
  149. package/package.json +2 -1
@@ -23,7 +23,7 @@
23
23
  * dispatcher; events fire from the natural mutation points in
24
24
  * FlowChartBuilder (L7.3).
25
25
  */
26
- import { isDevMode } from '../../scope/detectCircular.js';
26
+ import { isDevMode } from '../../devMode.js';
27
27
  /**
28
28
  * Soft cap on the `errors[]` accumulator. Builds with thousands of
29
29
  * stages and a misbehaving recorder that throws on every event would
@@ -180,4 +180,4 @@ export class StructureRecorderDispatcher {
180
180
  }
181
181
  }
182
182
  }
183
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RydWN0dXJlUmVjb3JkZXJEaXNwYXRjaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9idWlsZGVyL3N0cnVjdHVyZS9TdHJ1Y3R1cmVSZWNvcmRlckRpc3BhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdCRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQTRCMUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLDBCQUEwQixHQUFHLEdBQUcsQ0FBQztBQUV2QyxNQUFNLE9BQU8sMkJBQTJCO0lBQzlCLFNBQVMsR0FBd0IsRUFBRSxDQUFDO0lBQzNCLE1BQU0sR0FBMEIsRUFBRSxDQUFDO0lBQzVDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFFM0I7d0VBQ29FO0lBQ3BFLE1BQU0sQ0FBQyxRQUEyQjtRQUNoQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsK0NBQStDO0lBQy9DLE1BQU0sQ0FBQyxFQUFVO1FBQ2YsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQ7MkRBQ3VEO0lBQ3ZELFlBQVk7UUFDVixPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELCtCQUErQjtJQUMvQixlQUFlLENBQWtELEVBQVU7UUFDekUsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQWtCLENBQUM7SUFDbEUsQ0FBQztJQUVELHlFQUF5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R0FBRyxFQUFFLENBQUMsQ0FBQztRQUNoRSxDQUFDO2FBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDZixVQUFVLEVBQUUsZUFBZTtnQkFDM0IsTUFBTSxFQUFFLGVBQWU7Z0JBQ3ZCLE9BQU8sRUFBRSwrREFBK0QsMEJBQTBCLHNDQUFzQztnQkFDeEksS0FBSyxFQUFFLElBQUk7YUFDWixDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsSUFBSSxTQUFTLEVBQUUsRUFBRSxDQUFDO1lBQ2hCLHNDQUFzQztZQUN0QyxPQUFPLENBQUMsSUFBSSxDQUNWLHNEQUFzRCxVQUFVLGNBQWMsTUFBTSxLQUFLLE9BQU8sSUFBSTtnQkFDbEcsMERBQTBELENBQzdELENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTdHJ1Y3R1cmVSZWNvcmRlckRpc3BhdGNoZXIg4oCUIEZhbnMgYnVpbGQtdGltZSBzdHJ1Y3R1cmUgZXZlbnRzIG91dCB0byBOXG4gKiBhdHRhY2hlZCBgU3RydWN0dXJlUmVjb3JkZXJgIGluc3RhbmNlcy5cbiAqXG4gKiBNaXJyb3JzIGBGbG93UmVjb3JkZXJEaXNwYXRjaGVyYCAoZW5naW5lL25hcnJhdGl2ZS8pIGV4YWN0bHk6XG4gKlxuICogICAtIGByZWNvcmRlcnM6IFN0cnVjdHVyZVJlY29yZGVyW11gIOKAlCBhdHRhY2ggb3JkZXIgcHJlc2VydmVkXG4gKiAgIC0gcGVyLWV2ZW50IGZpcmUgbWV0aG9kcyBlYXJseS1yZXR1cm4gd2hlbiBubyByZWNvcmRlcnMgYXR0YWNoZWRcbiAqICAgICAoemVyby1hbGxvY2F0aW9uIGZhc3QgcGF0aClcbiAqICAgLSBwZXItcmVjb3JkZXIgdHJ5L2NhdGNoIGlzb2xhdGVzIGVycm9yczsgb25lIGJhZCByZWNvcmRlciBjYW5ub3RcbiAqICAgICBjYXNjYWRlIGludG8gdGhlIGNoYWluIGJ1aWxkIG9yIHNpYmxpbmcgcmVjb3JkZXJzXG4gKiAgIC0gZXJyb3JzIHJvdXRlIHRvIEJPVEggdGhlIGRldi1tb2RlIGNvbnNvbGUgd2FybmluZyAobWF0Y2hlc1xuICogICAgIEZsb3dSZWNvcmRlckRpc3BhdGNoZXIpIEFORCBhIHN0cnVjdHVyZWQgYGJ1aWxkRXJyb3JzYFxuICogICAgIGFjY3VtdWxhdG9yIHNvIGNvbnN1bWVycyBjYW4gaW5zcGVjdCBmYWlsdXJlcyBwb3N0LWJ1aWxkXG4gKiAgIC0gc3BlYyBwYXlsb2FkcyBhcmUgTk9UIGZyb3plbiBhdCBkaXNwYXRjaCB0aW1lIOKAlCBoYW5kbGVycyBtdXN0XG4gKiAgICAgcmVzcGVjdCB0aGUgYHJlYWRvbmx5YCBtYXJrZXJzIG9uIGV2ZW50IHBheWxvYWQgdHlwZXMgKHRoZVxuICogICAgIGJ1aWxkZXIgc3RpbGwgbmVlZHMgdG8gbXV0YXRlIGBzcGVjLm5leHRgIGFmdGVyIHRoZSBpbW1lZGlhdGVcbiAqICAgICBgb25TdGFnZUFkZGVkYCBmaXJlczsgc2VlIGBmaXJlU3RhZ2VBZGRlZGAgZm9yIHRoZSBmdWxsIG5vdGUsXG4gKiAgICAgYW5kIGBTdHJ1Y3R1cmVSZWNvcmRlci50c2AgaGVhZGVyIFwiU3BlYyBtdXRhdGlvblwiIGZvciB0aGVcbiAqICAgICB0cnVzdC1tb2RlbCBpbXBsaWNhdGlvbnMpXG4gKlxuICogVGhlIGRpc3BhdGNoZXIgaXRzZWxmIG93bnMgTk8gY2hhcnQgc3RhdGUuIFRoZSBidWlsZGVyIG93bnMgdGhlXG4gKiBkaXNwYXRjaGVyOyBldmVudHMgZmlyZSBmcm9tIHRoZSBuYXR1cmFsIG11dGF0aW9uIHBvaW50cyBpblxuICogRmxvd0NoYXJ0QnVpbGRlciAoTDcuMykuXG4gKi9cblxuaW1wb3J0IHsgaXNEZXZNb2RlIH0gZnJvbSAnLi4vLi4vc2NvcGUvZGV0ZWN0Q2lyY3VsYXIuanMnO1xuaW1wb3J0IHR5cGUgeyBGbG93Q2hhcnRTcGVjIH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge1xuICBTdHJ1Y3R1cmVEZWNpZGVyQ29tcGxldGVFdmVudCxcbiAgU3RydWN0dXJlRWRnZUFkZGVkRXZlbnQsXG4gIFN0cnVjdHVyZUxvb3BFZGdlQWRkZWRFdmVudCxcbiAgU3RydWN0dXJlUmVjb3JkZXIsXG4gIFN0cnVjdHVyZVN0YWdlQWRkZWRFdmVudCxcbiAgU3RydWN0dXJlU3RhZ2VUYWdnZWRFdmVudCxcbiAgU3RydWN0dXJlU3ViZmxvd01vdW50ZWRFdmVudCxcbn0gZnJvbSAnLi9TdHJ1Y3R1cmVSZWNvcmRlci5qcyc7XG5cbi8qKiBTdHJ1Y3R1cmVkIGVycm9yIGNhcHR1cmVkIHdoZW4gYSByZWNvcmRlciB0aHJvd3MuIFJlYWQgcG9zdC1idWlsZFxuICogIHZpYSBgYnVpbGRlci5nZXRTdHJ1Y3R1cmVCdWlsZEVycm9ycygpYCDigJQgY2FsbCBvbiB0aGUgQlVJTERFUlxuICogIHJlZmVyZW5jZSAoTk9UIHRoZSBjaGFydCByZXR1cm5lZCBieSBgLmJ1aWxkKClgKS4gQ2FwdHVyZSB0aGVcbiAqICBidWlsZGVyIHJlZmVyZW5jZSBiZWZvcmUgYC5idWlsZCgpYCBpZiB5b3UgbmVlZCBwb3N0LWJ1aWxkIGFjY2Vzcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RydWN0dXJlQnVpbGRFcnJvciB7XG4gIC8qKiBXaGljaCByZWNvcmRlcidzIGhhbmRsZXIgdGhyZXcuICovXG4gIHJlYWRvbmx5IHJlY29yZGVySWQ6IHN0cmluZztcbiAgLyoqIFdoaWNoIGV2ZW50IG1ldGhvZCAoYCdvblN0YWdlQWRkZWQnYCwgYCdvbkVkZ2VBZGRlZCdgLCAuLi4pLiAqL1xuICByZWFkb25seSBtZXRob2Q6IHN0cmluZztcbiAgLyoqIEVycm9yIG1lc3NhZ2UgZXh0cmFjdGVkIGZyb20gdGhlIHRocm93biB2YWx1ZS4gKi9cbiAgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nO1xuICAvKiogVGhlIG9yaWdpbmFsIHRocm93biB2YWx1ZSDigJQgYEVycm9yYCBpbnN0YW5jZSBvciB3aGF0ZXZlciB0aGVcbiAgICogIHJlY29yZGVyIHRocmV3LiBVc2VmdWwgd2hlbiBkaWFnbm9zaXMgbmVlZHMgYSBzdGFjayB0cmFjZS4gKi9cbiAgcmVhZG9ubHkgZXJyb3I6IHVua25vd247XG59XG5cbi8qKlxuICogU29mdCBjYXAgb24gdGhlIGBlcnJvcnNbXWAgYWNjdW11bGF0b3IuIEJ1aWxkcyB3aXRoIHRob3VzYW5kcyBvZlxuICogc3RhZ2VzIGFuZCBhIG1pc2JlaGF2aW5nIHJlY29yZGVyIHRoYXQgdGhyb3dzIG9uIGV2ZXJ5IGV2ZW50IHdvdWxkXG4gKiBvdGhlcndpc2UgcmV0YWluIHVuYm91bmRlZCBge3JlY29yZGVySWQsIG1ldGhvZCwgbWVzc2FnZSwgZXJyb3J9YFxuICogcmVjb3JkcyDigJQgZWFjaCBjbG9zaW5nIG92ZXIgdGhlIHRocm93biB2YWx1ZSAob2Z0ZW4gYW4gRXJyb3Igd2l0aFxuICogYSBjYXB0dXJlZCBzdGFjayksIHByZXZlbnRpbmcgR0Mgb2YgYW55IGNsb3N1cmUgZGF0YSB0aGUgdGhyb3dcbiAqIGNhcHR1cmVkLiBUaGUgY2FwIGlzIGZvciBkaWFnbm9zaXMsIG5vdCBmb3JlbnNpYyBjb21wbGV0ZW5lc3M7XG4gKiBvbmNlIGV4Y2VlZGVkLCBhIHNpbmdsZSBzZW50aW5lbCByZWNvcmQgc2lnbmFscyB0cnVuY2F0aW9uLlxuICovXG5jb25zdCBTVFJVQ1RVUkVfQlVJTERfRVJST1JTX0NBUCA9IDEwMDtcblxuZXhwb3J0IGNsYXNzIFN0cnVjdHVyZVJlY29yZGVyRGlzcGF0Y2hlciB7XG4gIHByaXZhdGUgcmVjb3JkZXJzOiBTdHJ1Y3R1cmVSZWNvcmRlcltdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgZXJyb3JzOiBTdHJ1Y3R1cmVCdWlsZEVycm9yW10gPSBbXTtcbiAgcHJpdmF0ZSBfdHJ1bmNhdGVkID0gZmFsc2U7XG5cbiAgLyoqIEF0dGFjaCBhIGBTdHJ1Y3R1cmVSZWNvcmRlcmAuIE11bHRpcGxlIHJlY29yZGVycyB3aXRoIHRoZSBzYW1lXG4gICAqICBpZCBhcmUgYWxsb3dlZDsgdGhlIGNvbnZlbnRpb24gaXMgb25lIGlkIHBlciBsb2dpY2FsIGNvbmNlcm4uICovXG4gIGF0dGFjaChyZWNvcmRlcjogU3RydWN0dXJlUmVjb3JkZXIpOiB2b2lkIHtcbiAgICB0aGlzLnJlY29yZGVycy5wdXNoKHJlY29yZGVyKTtcbiAgfVxuXG4gIC8qKiBEZXRhY2ggZXZlcnkgcmVjb3JkZXIgd2l0aCB0aGUgZ2l2ZW4gaWQuICovXG4gIGRldGFjaChpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5yZWNvcmRlcnMgPSB0aGlzLnJlY29yZGVycy5maWx0ZXIoKHIpID0+IHIuaWQgIT09IGlkKTtcbiAgfVxuXG4gIC8qKiBEZWZlbnNpdmUgY29weSBvZiB0aGUgYXR0YWNoZWQgcmVjb3JkZXJzIOKAlCB1c2VkIGluIHRlc3RzICsgYnlcbiAgICogIHRvb2xpbmcgdGhhdCB3YW50cyB0byBpbnNwZWN0IHdoYXQncyByZWdpc3RlcmVkLiAqL1xuICBnZXRSZWNvcmRlcnMoKTogU3RydWN0dXJlUmVjb3JkZXJbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLnJlY29yZGVyc107XG4gIH1cblxuICAvKiogRmluZCBvbmUgcmVjb3JkZXIgYnkgaWQuICovXG4gIGdldFJlY29yZGVyQnlJZDxUIGV4dGVuZHMgU3RydWN0dXJlUmVjb3JkZXIgPSBTdHJ1Y3R1cmVSZWNvcmRlcj4oaWQ6IHN0cmluZyk6IFQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJlY29yZGVycy5maW5kKChyKSA9PiByLmlkID09PSBpZCkgYXMgVCB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKiBSZWFkIGFjY3VtdWxhdGVkIGVycm9ycyBmcm9tIHRoaXMgYnVpbGQuIFJldHVybnMgYSBkZWZlbnNpdmUgY29weS4gKi9cbiAgZ2V0RXJyb3JzKCk6IFN0cnVjdHVyZUJ1aWxkRXJyb3JbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmVycm9yc107XG4gIH1cblxuICAvLyDilIDilIAgZmlyZSogbWV0aG9kcyDigJQgY2FsbGVkIGJ5IHRoZSBidWlsZGVyIGF0IGVhY2ggZXZlbnQgbW9tZW50IOKUgOKUgOKUgOKUgOKUgFxuXG4gIGZpcmVTdGFnZUFkZGVkKGV2ZW50OiBTdHJ1Y3R1cmVTdGFnZUFkZGVkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgLy8gTk9URTogYGV2ZW50LnNwZWNgIGlzIE5PVCBmcm96ZW4gaGVyZS4gYG9uU3RhZ2VBZGRlZGAgZmlyZXNcbiAgICAvLyBJTU1FRElBVEVMWSB3aGVuIGEgc3BlYyBub2RlIGlzIGFkZGVkIOKAlCB0aGUgYnVpbGRlciBzdGlsbCBuZWVkc1xuICAgIC8vIHRvIG11dGF0ZSBgc3BlYy5uZXh0YCBsYXRlciAoaW4gdGhlIHN1YnNlcXVlbnQgYGFkZFhgIGNhbGwpLlxuICAgIC8vIEZyZWV6aW5nIGhlcmUgd291bGQgYnJlYWsgdGhlIGJ1aWxkZXIuIEhhbmRsZXIgbXV0YXRpb24gb2ZcbiAgICAvLyBgZXZlbnQuc3BlY2AgaXMgZG9jdW1lbnRlZCBhcyB1bmRlZmluZWQgYmVoYXZpb3Ig4oCUIHNlZSB0aGVcbiAgICAvLyBTdHJ1Y3R1cmVSZWNvcmRlciB0eXBlJ3MgSlNEb2MgKyByZWFkb25seSBtYXJrZXJzIG9uIHRoZVxuICAgIC8vIGV2ZW50IHBheWxvYWQgaW50ZXJmYWNlLlxuICAgIGZvciAoY29uc3QgciBvZiB0aGlzLnJlY29yZGVycykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgci5vblN0YWdlQWRkZWQ/LihldmVudCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5yZWNvcmRFcnJvcihyLmlkLCAnb25TdGFnZUFkZGVkJywgZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmaXJlU3RhZ2VUYWdnZWQoZXZlbnQ6IFN0cnVjdHVyZVN0YWdlVGFnZ2VkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgZm9yIChjb25zdCByIG9mIHRoaXMucmVjb3JkZXJzKSB7XG4gICAgICB0cnkge1xuICAgICAgICByLm9uU3RhZ2VUYWdnZWQ/LihldmVudCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5yZWNvcmRFcnJvcihyLmlkLCAnb25TdGFnZVRhZ2dlZCcsIGVycik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZmlyZUVkZ2VBZGRlZChldmVudDogU3RydWN0dXJlRWRnZUFkZGVkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgLy8gTm8gc3BlYyBvbiB0aGlzIGV2ZW50IOKAlCBwYXNzIHRocm91Z2guXG4gICAgZm9yIChjb25zdCByIG9mIHRoaXMucmVjb3JkZXJzKSB7XG4gICAgICB0cnkge1xuICAgICAgICByLm9uRWRnZUFkZGVkPy4oZXZlbnQpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMucmVjb3JkRXJyb3Ioci5pZCwgJ29uRWRnZUFkZGVkJywgZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmaXJlTG9vcEVkZ2VBZGRlZChldmVudDogU3RydWN0dXJlTG9vcEVkZ2VBZGRlZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGZvciAoY29uc3QgciBvZiB0aGlzLnJlY29yZGVycykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgci5vbkxvb3BFZGdlQWRkZWQ/LihldmVudCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5yZWNvcmRFcnJvcihyLmlkLCAnb25Mb29wRWRnZUFkZGVkJywgZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmaXJlRGVjaWRlckNvbXBsZXRlKGV2ZW50OiBTdHJ1Y3R1cmVEZWNpZGVyQ29tcGxldGVFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBmb3IgKGNvbnN0IHIgb2YgdGhpcy5yZWNvcmRlcnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHIub25EZWNpZGVyQ29tcGxldGU/LihldmVudCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5yZWNvcmRFcnJvcihyLmlkLCAnb25EZWNpZGVyQ29tcGxldGUnLCBlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZpcmVTdWJmbG93TW91bnRlZChldmVudDogU3RydWN0dXJlU3ViZmxvd01vdW50ZWRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBmb3IgKGNvbnN0IHIgb2YgdGhpcy5yZWNvcmRlcnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHIub25TdWJmbG93TW91bnRlZD8uKGV2ZW50KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLnJlY29yZEVycm9yKHIuaWQsICdvblN1YmZsb3dNb3VudGVkJywgZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXh0ZXJuYWxseS1jYWxsYWJsZSBlcnJvciBjYXB0dXJlIGZvciBldmVudHMgdGhlIGJ1aWxkZXIgZmlyZXNcbiAgICogT1VUU0lERSB0aGUgbm9ybWFsIGZpcmUqIGZhbi1vdXQgcGF0aCDigJQgc3BlY2lmaWNhbGx5IHRoZSBzZWVkXG4gICAqIHJlcGxheSBpbiBgRmxvd0NoYXJ0QnVpbGRlci5hdHRhY2hTdHJ1Y3R1cmVSZWNvcmRlcigpYCwgd2hpY2hcbiAgICogdGFyZ2V0cyBvbmUgc3BlY2lmaWMgcmVjb3JkZXIgcmF0aGVyIHRoYW4gZXZlcnkgYXR0YWNoZWQgcmVjb3JkZXIuXG4gICAqXG4gICAqIFNhbWUgb2JzZXJ2YWJpbGl0eSBjb250cmFjdCBhcyB0aGUgaW50ZXJuYWwgYHJlY29yZEVycm9yYDpcbiAgICogYWNjdW11bGF0ZXMgb24gYGdldEVycm9ycygpYCBBTkQgbG9ncyBpbiBkZXYgbW9kZS5cbiAgICovXG4gIHJlY29yZEVycm9yRm9yUmVwbGF5KHJlY29yZGVySWQ6IHN0cmluZywgbWV0aG9kOiBzdHJpbmcsIGVycjogdW5rbm93bik6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkRXJyb3IocmVjb3JkZXJJZCwgbWV0aG9kLCBlcnIpO1xuICB9XG5cbiAgLy8g4pSA4pSAIEludGVybmFscyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBwcml2YXRlIHJlY29yZEVycm9yKHJlY29yZGVySWQ6IHN0cmluZywgbWV0aG9kOiBzdHJpbmcsIGVycjogdW5rbm93bik6IHZvaWQge1xuICAgIGNvbnN0IGUgPSBlcnIgYXMgeyBtZXNzYWdlPzogdW5rbm93biB9IHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSB0eXBlb2YgZT8ubWVzc2FnZSA9PT0gJ3N0cmluZycgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcbiAgICAvLyBTb2Z0IGNhcCB0byBwcmV2ZW50IHVuYm91bmRlZCBncm93dGggKyBjbG9zdXJlIHJldGVudGlvbi4gT25jZVxuICAgIC8vIGhpdCwgcHVzaCBhIHNpbmdsZSBzZW50aW5lbCBkZXNjcmliaW5nIHRoZSB0cnVuY2F0aW9uIGFuZCBkcm9wXG4gICAgLy8gZnVydGhlciByZWNvcmRzIG9uIHRoZSBmbG9vciAoc3RpbGwgbG9nIGluIGRldiBtb2RlIHNvIHRoZVxuICAgIC8vIGNvbnN1bWVyIG5vdGljZXMgdGhlIHNwYW0gYXQgaXRzIHNvdXJjZSkuXG4gICAgaWYgKHRoaXMuZXJyb3JzLmxlbmd0aCA8IFNUUlVDVFVSRV9CVUlMRF9FUlJPUlNfQ0FQKSB7XG4gICAgICB0aGlzLmVycm9ycy5wdXNoKHsgcmVjb3JkZXJJZCwgbWV0aG9kLCBtZXNzYWdlLCBlcnJvcjogZXJyIH0pO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuX3RydW5jYXRlZCkge1xuICAgICAgdGhpcy5fdHJ1bmNhdGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuZXJyb3JzLnB1c2goe1xuICAgICAgICByZWNvcmRlcklkOiAnX190cnVuY2F0ZWRfXycsXG4gICAgICAgIG1ldGhvZDogJ19fdHJ1bmNhdGVkX18nLFxuICAgICAgICBtZXNzYWdlOiBgU3RydWN0dXJlUmVjb3JkZXJEaXNwYXRjaGVyOiBlcnJvciBhY2N1bXVsYXRvciB0cnVuY2F0ZWQgYXQgJHtTVFJVQ1RVUkVfQlVJTERfRVJST1JTX0NBUH0gZW50cmllczsgZnVydGhlciBlcnJvcnMgc3VwcHJlc3NlZC5gLFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBbZm9vdHByaW50XSBTdHJ1Y3R1cmVSZWNvcmRlckRpc3BhdGNoZXI6IHJlY29yZGVyIFwiJHtyZWNvcmRlcklkfVwiIHRocmV3IGluICR7bWV0aG9kfTogJHttZXNzYWdlfS4gYCArXG4gICAgICAgICAgJ1NlZSBidWlsZGVyLmdldFN0cnVjdHVyZUJ1aWxkRXJyb3JzKCkgZm9yIHRoZSBmdWxsIGxpc3QuJyxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbi8qKiBSZS1leHBvcnQgdGhlIEZsb3dDaGFydFNwZWMgdHlwZSBmb3IgZG93bnN0cmVhbSB0eXBlIGNvbXBsZXRlbmVzcy4gKi9cbmV4cG9ydCB0eXBlIHsgRmxvd0NoYXJ0U3BlYyB9O1xuIl19
183
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RydWN0dXJlUmVjb3JkZXJEaXNwYXRjaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9idWlsZGVyL3N0cnVjdHVyZS9TdHJ1Y3R1cmVSZWNvcmRlckRpc3BhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdCRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQTRCN0M7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLDBCQUEwQixHQUFHLEdBQUcsQ0FBQztBQUV2QyxNQUFNLE9BQU8sMkJBQTJCO0lBQzlCLFNBQVMsR0FBd0IsRUFBRSxDQUFDO0lBQzNCLE1BQU0sR0FBMEIsRUFBRSxDQUFDO0lBQzVDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFFM0I7d0VBQ29FO0lBQ3BFLE1BQU0sQ0FBQyxRQUEyQjtRQUNoQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsK0NBQStDO0lBQy9DLE1BQU0sQ0FBQyxFQUFVO1FBQ2YsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQ7MkRBQ3VEO0lBQ3ZELFlBQVk7UUFDVixPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELCtCQUErQjtJQUMvQixlQUFlLENBQWtELEVBQVU7UUFDekUsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQWtCLENBQUM7SUFDbEUsQ0FBQztJQUVELHlFQUF5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R0FBRyxFQUFFLENBQUMsQ0FBQztRQUNoRSxDQUFDO2FBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDZixVQUFVLEVBQUUsZUFBZTtnQkFDM0IsTUFBTSxFQUFFLGVBQWU7Z0JBQ3ZCLE9BQU8sRUFBRSwrREFBK0QsMEJBQTBCLHNDQUFzQztnQkFDeEksS0FBSyxFQUFFLElBQUk7YUFDWixDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsSUFBSSxTQUFTLEVBQUUsRUFBRSxDQUFDO1lBQ2hCLHNDQUFzQztZQUN0QyxPQUFPLENBQUMsSUFBSSxDQUNWLHNEQUFzRCxVQUFVLGNBQWMsTUFBTSxLQUFLLE9BQU8sSUFBSTtnQkFDbEcsMERBQTBELENBQzdELENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTdHJ1Y3R1cmVSZWNvcmRlckRpc3BhdGNoZXIg4oCUIEZhbnMgYnVpbGQtdGltZSBzdHJ1Y3R1cmUgZXZlbnRzIG91dCB0byBOXG4gKiBhdHRhY2hlZCBgU3RydWN0dXJlUmVjb3JkZXJgIGluc3RhbmNlcy5cbiAqXG4gKiBNaXJyb3JzIGBGbG93UmVjb3JkZXJEaXNwYXRjaGVyYCAoZW5naW5lL25hcnJhdGl2ZS8pIGV4YWN0bHk6XG4gKlxuICogICAtIGByZWNvcmRlcnM6IFN0cnVjdHVyZVJlY29yZGVyW11gIOKAlCBhdHRhY2ggb3JkZXIgcHJlc2VydmVkXG4gKiAgIC0gcGVyLWV2ZW50IGZpcmUgbWV0aG9kcyBlYXJseS1yZXR1cm4gd2hlbiBubyByZWNvcmRlcnMgYXR0YWNoZWRcbiAqICAgICAoemVyby1hbGxvY2F0aW9uIGZhc3QgcGF0aClcbiAqICAgLSBwZXItcmVjb3JkZXIgdHJ5L2NhdGNoIGlzb2xhdGVzIGVycm9yczsgb25lIGJhZCByZWNvcmRlciBjYW5ub3RcbiAqICAgICBjYXNjYWRlIGludG8gdGhlIGNoYWluIGJ1aWxkIG9yIHNpYmxpbmcgcmVjb3JkZXJzXG4gKiAgIC0gZXJyb3JzIHJvdXRlIHRvIEJPVEggdGhlIGRldi1tb2RlIGNvbnNvbGUgd2FybmluZyAobWF0Y2hlc1xuICogICAgIEZsb3dSZWNvcmRlckRpc3BhdGNoZXIpIEFORCBhIHN0cnVjdHVyZWQgYGJ1aWxkRXJyb3JzYFxuICogICAgIGFjY3VtdWxhdG9yIHNvIGNvbnN1bWVycyBjYW4gaW5zcGVjdCBmYWlsdXJlcyBwb3N0LWJ1aWxkXG4gKiAgIC0gc3BlYyBwYXlsb2FkcyBhcmUgTk9UIGZyb3plbiBhdCBkaXNwYXRjaCB0aW1lIOKAlCBoYW5kbGVycyBtdXN0XG4gKiAgICAgcmVzcGVjdCB0aGUgYHJlYWRvbmx5YCBtYXJrZXJzIG9uIGV2ZW50IHBheWxvYWQgdHlwZXMgKHRoZVxuICogICAgIGJ1aWxkZXIgc3RpbGwgbmVlZHMgdG8gbXV0YXRlIGBzcGVjLm5leHRgIGFmdGVyIHRoZSBpbW1lZGlhdGVcbiAqICAgICBgb25TdGFnZUFkZGVkYCBmaXJlczsgc2VlIGBmaXJlU3RhZ2VBZGRlZGAgZm9yIHRoZSBmdWxsIG5vdGUsXG4gKiAgICAgYW5kIGBTdHJ1Y3R1cmVSZWNvcmRlci50c2AgaGVhZGVyIFwiU3BlYyBtdXRhdGlvblwiIGZvciB0aGVcbiAqICAgICB0cnVzdC1tb2RlbCBpbXBsaWNhdGlvbnMpXG4gKlxuICogVGhlIGRpc3BhdGNoZXIgaXRzZWxmIG93bnMgTk8gY2hhcnQgc3RhdGUuIFRoZSBidWlsZGVyIG93bnMgdGhlXG4gKiBkaXNwYXRjaGVyOyBldmVudHMgZmlyZSBmcm9tIHRoZSBuYXR1cmFsIG11dGF0aW9uIHBvaW50cyBpblxuICogRmxvd0NoYXJ0QnVpbGRlciAoTDcuMykuXG4gKi9cblxuaW1wb3J0IHsgaXNEZXZNb2RlIH0gZnJvbSAnLi4vLi4vZGV2TW9kZS5qcyc7XG5pbXBvcnQgdHlwZSB7IEZsb3dDaGFydFNwZWMgfSBmcm9tICcuLi90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIFN0cnVjdHVyZURlY2lkZXJDb21wbGV0ZUV2ZW50LFxuICBTdHJ1Y3R1cmVFZGdlQWRkZWRFdmVudCxcbiAgU3RydWN0dXJlTG9vcEVkZ2VBZGRlZEV2ZW50LFxuICBTdHJ1Y3R1cmVSZWNvcmRlcixcbiAgU3RydWN0dXJlU3RhZ2VBZGRlZEV2ZW50LFxuICBTdHJ1Y3R1cmVTdGFnZVRhZ2dlZEV2ZW50LFxuICBTdHJ1Y3R1cmVTdWJmbG93TW91bnRlZEV2ZW50LFxufSBmcm9tICcuL1N0cnVjdHVyZVJlY29yZGVyLmpzJztcblxuLyoqIFN0cnVjdHVyZWQgZXJyb3IgY2FwdHVyZWQgd2hlbiBhIHJlY29yZGVyIHRocm93cy4gUmVhZCBwb3N0LWJ1aWxkXG4gKiAgdmlhIGBidWlsZGVyLmdldFN0cnVjdHVyZUJ1aWxkRXJyb3JzKClgIOKAlCBjYWxsIG9uIHRoZSBCVUlMREVSXG4gKiAgcmVmZXJlbmNlIChOT1QgdGhlIGNoYXJ0IHJldHVybmVkIGJ5IGAuYnVpbGQoKWApLiBDYXB0dXJlIHRoZVxuICogIGJ1aWxkZXIgcmVmZXJlbmNlIGJlZm9yZSBgLmJ1aWxkKClgIGlmIHlvdSBuZWVkIHBvc3QtYnVpbGQgYWNjZXNzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJ1Y3R1cmVCdWlsZEVycm9yIHtcbiAgLyoqIFdoaWNoIHJlY29yZGVyJ3MgaGFuZGxlciB0aHJldy4gKi9cbiAgcmVhZG9ubHkgcmVjb3JkZXJJZDogc3RyaW5nO1xuICAvKiogV2hpY2ggZXZlbnQgbWV0aG9kIChgJ29uU3RhZ2VBZGRlZCdgLCBgJ29uRWRnZUFkZGVkJ2AsIC4uLikuICovXG4gIHJlYWRvbmx5IG1ldGhvZDogc3RyaW5nO1xuICAvKiogRXJyb3IgbWVzc2FnZSBleHRyYWN0ZWQgZnJvbSB0aGUgdGhyb3duIHZhbHVlLiAqL1xuICByZWFkb25seSBtZXNzYWdlOiBzdHJpbmc7XG4gIC8qKiBUaGUgb3JpZ2luYWwgdGhyb3duIHZhbHVlIOKAlCBgRXJyb3JgIGluc3RhbmNlIG9yIHdoYXRldmVyIHRoZVxuICAgKiAgcmVjb3JkZXIgdGhyZXcuIFVzZWZ1bCB3aGVuIGRpYWdub3NpcyBuZWVkcyBhIHN0YWNrIHRyYWNlLiAqL1xuICByZWFkb25seSBlcnJvcjogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBTb2Z0IGNhcCBvbiB0aGUgYGVycm9yc1tdYCBhY2N1bXVsYXRvci4gQnVpbGRzIHdpdGggdGhvdXNhbmRzIG9mXG4gKiBzdGFnZXMgYW5kIGEgbWlzYmVoYXZpbmcgcmVjb3JkZXIgdGhhdCB0aHJvd3Mgb24gZXZlcnkgZXZlbnQgd291bGRcbiAqIG90aGVyd2lzZSByZXRhaW4gdW5ib3VuZGVkIGB7cmVjb3JkZXJJZCwgbWV0aG9kLCBtZXNzYWdlLCBlcnJvcn1gXG4gKiByZWNvcmRzIOKAlCBlYWNoIGNsb3Npbmcgb3ZlciB0aGUgdGhyb3duIHZhbHVlIChvZnRlbiBhbiBFcnJvciB3aXRoXG4gKiBhIGNhcHR1cmVkIHN0YWNrKSwgcHJldmVudGluZyBHQyBvZiBhbnkgY2xvc3VyZSBkYXRhIHRoZSB0aHJvd1xuICogY2FwdHVyZWQuIFRoZSBjYXAgaXMgZm9yIGRpYWdub3Npcywgbm90IGZvcmVuc2ljIGNvbXBsZXRlbmVzcztcbiAqIG9uY2UgZXhjZWVkZWQsIGEgc2luZ2xlIHNlbnRpbmVsIHJlY29yZCBzaWduYWxzIHRydW5jYXRpb24uXG4gKi9cbmNvbnN0IFNUUlVDVFVSRV9CVUlMRF9FUlJPUlNfQ0FQID0gMTAwO1xuXG5leHBvcnQgY2xhc3MgU3RydWN0dXJlUmVjb3JkZXJEaXNwYXRjaGVyIHtcbiAgcHJpdmF0ZSByZWNvcmRlcnM6IFN0cnVjdHVyZVJlY29yZGVyW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBlcnJvcnM6IFN0cnVjdHVyZUJ1aWxkRXJyb3JbXSA9IFtdO1xuICBwcml2YXRlIF90cnVuY2F0ZWQgPSBmYWxzZTtcblxuICAvKiogQXR0YWNoIGEgYFN0cnVjdHVyZVJlY29yZGVyYC4gTXVsdGlwbGUgcmVjb3JkZXJzIHdpdGggdGhlIHNhbWVcbiAgICogIGlkIGFyZSBhbGxvd2VkOyB0aGUgY29udmVudGlvbiBpcyBvbmUgaWQgcGVyIGxvZ2ljYWwgY29uY2Vybi4gKi9cbiAgYXR0YWNoKHJlY29yZGVyOiBTdHJ1Y3R1cmVSZWNvcmRlcik6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkZXJzLnB1c2gocmVjb3JkZXIpO1xuICB9XG5cbiAgLyoqIERldGFjaCBldmVyeSByZWNvcmRlciB3aXRoIHRoZSBnaXZlbiBpZC4gKi9cbiAgZGV0YWNoKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnJlY29yZGVycyA9IHRoaXMucmVjb3JkZXJzLmZpbHRlcigocikgPT4gci5pZCAhPT0gaWQpO1xuICB9XG5cbiAgLyoqIERlZmVuc2l2ZSBjb3B5IG9mIHRoZSBhdHRhY2hlZCByZWNvcmRlcnMg4oCUIHVzZWQgaW4gdGVzdHMgKyBieVxuICAgKiAgdG9vbGluZyB0aGF0IHdhbnRzIHRvIGluc3BlY3Qgd2hhdCdzIHJlZ2lzdGVyZWQuICovXG4gIGdldFJlY29yZGVycygpOiBTdHJ1Y3R1cmVSZWNvcmRlcltdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMucmVjb3JkZXJzXTtcbiAgfVxuXG4gIC8qKiBGaW5kIG9uZSByZWNvcmRlciBieSBpZC4gKi9cbiAgZ2V0UmVjb3JkZXJCeUlkPFQgZXh0ZW5kcyBTdHJ1Y3R1cmVSZWNvcmRlciA9IFN0cnVjdHVyZVJlY29yZGVyPihpZDogc3RyaW5nKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucmVjb3JkZXJzLmZpbmQoKHIpID0+IHIuaWQgPT09IGlkKSBhcyBUIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqIFJlYWQgYWNjdW11bGF0ZWQgZXJyb3JzIGZyb20gdGhpcyBidWlsZC4gUmV0dXJucyBhIGRlZmVuc2l2ZSBjb3B5LiAqL1xuICBnZXRFcnJvcnMoKTogU3RydWN0dXJlQnVpbGRFcnJvcltdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuZXJyb3JzXTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBmaXJlKiBtZXRob2RzIOKAlCBjYWxsZWQgYnkgdGhlIGJ1aWxkZXIgYXQgZWFjaCBldmVudCBtb21lbnQg4pSA4pSA4pSA4pSA4pSAXG5cbiAgZmlyZVN0YWdlQWRkZWQoZXZlbnQ6IFN0cnVjdHVyZVN0YWdlQWRkZWRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAvLyBOT1RFOiBgZXZlbnQuc3BlY2AgaXMgTk9UIGZyb3plbiBoZXJlLiBgb25TdGFnZUFkZGVkYCBmaXJlc1xuICAgIC8vIElNTUVESUFURUxZIHdoZW4gYSBzcGVjIG5vZGUgaXMgYWRkZWQg4oCUIHRoZSBidWlsZGVyIHN0aWxsIG5lZWRzXG4gICAgLy8gdG8gbXV0YXRlIGBzcGVjLm5leHRgIGxhdGVyIChpbiB0aGUgc3Vic2VxdWVudCBgYWRkWGAgY2FsbCkuXG4gICAgLy8gRnJlZXppbmcgaGVyZSB3b3VsZCBicmVhayB0aGUgYnVpbGRlci4gSGFuZGxlciBtdXRhdGlvbiBvZlxuICAgIC8vIGBldmVudC5zcGVjYCBpcyBkb2N1bWVudGVkIGFzIHVuZGVmaW5lZCBiZWhhdmlvciDigJQgc2VlIHRoZVxuICAgIC8vIFN0cnVjdHVyZVJlY29yZGVyIHR5cGUncyBKU0RvYyArIHJlYWRvbmx5IG1hcmtlcnMgb24gdGhlXG4gICAgLy8gZXZlbnQgcGF5bG9hZCBpbnRlcmZhY2UuXG4gICAgZm9yIChjb25zdCByIG9mIHRoaXMucmVjb3JkZXJzKSB7XG4gICAgICB0cnkge1xuICAgICAgICByLm9uU3RhZ2VBZGRlZD8uKGV2ZW50KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLnJlY29yZEVycm9yKHIuaWQsICdvblN0YWdlQWRkZWQnLCBlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZpcmVTdGFnZVRhZ2dlZChldmVudDogU3RydWN0dXJlU3RhZ2VUYWdnZWRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBmb3IgKGNvbnN0IHIgb2YgdGhpcy5yZWNvcmRlcnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHIub25TdGFnZVRhZ2dlZD8uKGV2ZW50KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLnJlY29yZEVycm9yKHIuaWQsICdvblN0YWdlVGFnZ2VkJywgZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmaXJlRWRnZUFkZGVkKGV2ZW50OiBTdHJ1Y3R1cmVFZGdlQWRkZWRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAvLyBObyBzcGVjIG9uIHRoaXMgZXZlbnQg4oCUIHBhc3MgdGhyb3VnaC5cbiAgICBmb3IgKGNvbnN0IHIgb2YgdGhpcy5yZWNvcmRlcnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHIub25FZGdlQWRkZWQ/LihldmVudCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5yZWNvcmRFcnJvcihyLmlkLCAnb25FZGdlQWRkZWQnLCBlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZpcmVMb29wRWRnZUFkZGVkKGV2ZW50OiBTdHJ1Y3R1cmVMb29wRWRnZUFkZGVkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgZm9yIChjb25zdCByIG9mIHRoaXMucmVjb3JkZXJzKSB7XG4gICAgICB0cnkge1xuICAgICAgICByLm9uTG9vcEVkZ2VBZGRlZD8uKGV2ZW50KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLnJlY29yZEVycm9yKHIuaWQsICdvbkxvb3BFZGdlQWRkZWQnLCBlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZpcmVEZWNpZGVyQ29tcGxldGUoZXZlbnQ6IFN0cnVjdHVyZURlY2lkZXJDb21wbGV0ZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGZvciAoY29uc3QgciBvZiB0aGlzLnJlY29yZGVycykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgci5vbkRlY2lkZXJDb21wbGV0ZT8uKGV2ZW50KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLnJlY29yZEVycm9yKHIuaWQsICdvbkRlY2lkZXJDb21wbGV0ZScsIGVycik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZmlyZVN1YmZsb3dNb3VudGVkKGV2ZW50OiBTdHJ1Y3R1cmVTdWJmbG93TW91bnRlZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGZvciAoY29uc3QgciBvZiB0aGlzLnJlY29yZGVycykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgci5vblN1YmZsb3dNb3VudGVkPy4oZXZlbnQpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMucmVjb3JkRXJyb3Ioci5pZCwgJ29uU3ViZmxvd01vdW50ZWQnLCBlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRlcm5hbGx5LWNhbGxhYmxlIGVycm9yIGNhcHR1cmUgZm9yIGV2ZW50cyB0aGUgYnVpbGRlciBmaXJlc1xuICAgKiBPVVRTSURFIHRoZSBub3JtYWwgZmlyZSogZmFuLW91dCBwYXRoIOKAlCBzcGVjaWZpY2FsbHkgdGhlIHNlZWRcbiAgICogcmVwbGF5IGluIGBGbG93Q2hhcnRCdWlsZGVyLmF0dGFjaFN0cnVjdHVyZVJlY29yZGVyKClgLCB3aGljaFxuICAgKiB0YXJnZXRzIG9uZSBzcGVjaWZpYyByZWNvcmRlciByYXRoZXIgdGhhbiBldmVyeSBhdHRhY2hlZCByZWNvcmRlci5cbiAgICpcbiAgICogU2FtZSBvYnNlcnZhYmlsaXR5IGNvbnRyYWN0IGFzIHRoZSBpbnRlcm5hbCBgcmVjb3JkRXJyb3JgOlxuICAgKiBhY2N1bXVsYXRlcyBvbiBgZ2V0RXJyb3JzKClgIEFORCBsb2dzIGluIGRldiBtb2RlLlxuICAgKi9cbiAgcmVjb3JkRXJyb3JGb3JSZXBsYXkocmVjb3JkZXJJZDogc3RyaW5nLCBtZXRob2Q6IHN0cmluZywgZXJyOiB1bmtub3duKTogdm9pZCB7XG4gICAgdGhpcy5yZWNvcmRFcnJvcihyZWNvcmRlcklkLCBtZXRob2QsIGVycik7XG4gIH1cblxuICAvLyDilIDilIAgSW50ZXJuYWxzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIHByaXZhdGUgcmVjb3JkRXJyb3IocmVjb3JkZXJJZDogc3RyaW5nLCBtZXRob2Q6IHN0cmluZywgZXJyOiB1bmtub3duKTogdm9pZCB7XG4gICAgY29uc3QgZSA9IGVyciBhcyB7IG1lc3NhZ2U/OiB1bmtub3duIH0gfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgbWVzc2FnZSA9IHR5cGVvZiBlPy5tZXNzYWdlID09PSAnc3RyaW5nJyA/IGUubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgIC8vIFNvZnQgY2FwIHRvIHByZXZlbnQgdW5ib3VuZGVkIGdyb3d0aCArIGNsb3N1cmUgcmV0ZW50aW9uLiBPbmNlXG4gICAgLy8gaGl0LCBwdXNoIGEgc2luZ2xlIHNlbnRpbmVsIGRlc2NyaWJpbmcgdGhlIHRydW5jYXRpb24gYW5kIGRyb3BcbiAgICAvLyBmdXJ0aGVyIHJlY29yZHMgb24gdGhlIGZsb29yIChzdGlsbCBsb2cgaW4gZGV2IG1vZGUgc28gdGhlXG4gICAgLy8gY29uc3VtZXIgbm90aWNlcyB0aGUgc3BhbSBhdCBpdHMgc291cmNlKS5cbiAgICBpZiAodGhpcy5lcnJvcnMubGVuZ3RoIDwgU1RSVUNUVVJFX0JVSUxEX0VSUk9SU19DQVApIHtcbiAgICAgIHRoaXMuZXJyb3JzLnB1c2goeyByZWNvcmRlcklkLCBtZXRob2QsIG1lc3NhZ2UsIGVycm9yOiBlcnIgfSk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5fdHJ1bmNhdGVkKSB7XG4gICAgICB0aGlzLl90cnVuY2F0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5lcnJvcnMucHVzaCh7XG4gICAgICAgIHJlY29yZGVySWQ6ICdfX3RydW5jYXRlZF9fJyxcbiAgICAgICAgbWV0aG9kOiAnX190cnVuY2F0ZWRfXycsXG4gICAgICAgIG1lc3NhZ2U6IGBTdHJ1Y3R1cmVSZWNvcmRlckRpc3BhdGNoZXI6IGVycm9yIGFjY3VtdWxhdG9yIHRydW5jYXRlZCBhdCAke1NUUlVDVFVSRV9CVUlMRF9FUlJPUlNfQ0FQfSBlbnRyaWVzOyBmdXJ0aGVyIGVycm9ycyBzdXBwcmVzc2VkLmAsXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFtmb290cHJpbnRdIFN0cnVjdHVyZVJlY29yZGVyRGlzcGF0Y2hlcjogcmVjb3JkZXIgXCIke3JlY29yZGVySWR9XCIgdGhyZXcgaW4gJHttZXRob2R9OiAke21lc3NhZ2V9LiBgICtcbiAgICAgICAgICAnU2VlIGJ1aWxkZXIuZ2V0U3RydWN0dXJlQnVpbGRFcnJvcnMoKSBmb3IgdGhlIGZ1bGwgbGlzdC4nLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqIFJlLWV4cG9ydCB0aGUgRmxvd0NoYXJ0U3BlYyB0eXBlIGZvciBkb3duc3RyZWFtIHR5cGUgY29tcGxldGVuZXNzLiAqL1xuZXhwb3J0IHR5cGUgeyBGbG93Q2hhcnRTcGVjIH07XG4iXX0=
@@ -0,0 +1,17 @@
1
+ /**
2
+ * circular — Dev-mode circular reference detection for scope values.
3
+ *
4
+ * Checks if a value contains circular references using a WeakSet traversal.
5
+ * O(n) where n = total nested objects. Uses WeakSet so no memory leak.
6
+ *
7
+ * Gated by the caller — only called in dev mode to avoid production overhead.
8
+ * Same approach as Immer (detect and warn at runtime).
9
+ *
10
+ * A leaf (imports nothing): it moved here from `scope/detectCircular.ts` so the layers
11
+ * below `scope/` need not import upward for it.
12
+ */
13
+ /**
14
+ * Returns true if the value contains circular references.
15
+ * Only checks plain objects and arrays — class instances, Date, Map, etc. are skipped.
16
+ */
17
+ export declare function hasCircularReference(value: unknown, ancestors?: WeakSet<object>): boolean;
@@ -0,0 +1,45 @@
1
+ /**
2
+ * circular — Dev-mode circular reference detection for scope values.
3
+ *
4
+ * Checks if a value contains circular references using a WeakSet traversal.
5
+ * O(n) where n = total nested objects. Uses WeakSet so no memory leak.
6
+ *
7
+ * Gated by the caller — only called in dev mode to avoid production overhead.
8
+ * Same approach as Immer (detect and warn at runtime).
9
+ *
10
+ * A leaf (imports nothing): it moved here from `scope/detectCircular.ts` so the layers
11
+ * below `scope/` need not import upward for it.
12
+ */
13
+ /**
14
+ * Returns true if the value contains circular references.
15
+ * Only checks plain objects and arrays — class instances, Date, Map, etc. are skipped.
16
+ */
17
+ export function hasCircularReference(value, ancestors = new WeakSet()) {
18
+ if (value === null || typeof value !== 'object')
19
+ return false;
20
+ // Skip non-plain objects (Date, Map, Set, class instances) — same as allowlist logic
21
+ if (Array.isArray(value)) {
22
+ if (ancestors.has(value))
23
+ return true;
24
+ ancestors.add(value);
25
+ for (const item of value) {
26
+ if (hasCircularReference(item, ancestors))
27
+ return true;
28
+ }
29
+ ancestors.delete(value); // backtrack — allow diamond references
30
+ return false;
31
+ }
32
+ const ctor = value.constructor;
33
+ if (ctor !== undefined && ctor !== Object)
34
+ return false; // class instance — skip
35
+ if (ancestors.has(value))
36
+ return true;
37
+ ancestors.add(value);
38
+ for (const v of Object.values(value)) {
39
+ if (hasCircularReference(v, ancestors))
40
+ return true;
41
+ }
42
+ ancestors.delete(value); // backtrack — allow diamond references
43
+ return false;
44
+ }
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2lyY3VsYXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NhcHR1cmUvY2lyY3VsYXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0dBV0c7QUFFSDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsS0FBYyxFQUFFLFlBQTZCLElBQUksT0FBTyxFQUFFO0lBQzdGLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFFOUQscUZBQXFGO0lBQ3JGLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3pCLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUN0QyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7WUFDekIsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3pELENBQUM7UUFDRCxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsdUNBQXVDO1FBQ2hFLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFJLEtBQWlDLENBQUMsV0FBVyxDQUFDO0lBQzVELElBQUksSUFBSSxLQUFLLFNBQVMsSUFBSSxJQUFJLEtBQUssTUFBTTtRQUFFLE9BQU8sS0FBSyxDQUFDLENBQUMsd0JBQXdCO0lBRWpGLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUN0QyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXJCLEtBQUssTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFnQyxDQUFDLEVBQUUsQ0FBQztRQUNoRSxJQUFJLG9CQUFvQixDQUFDLENBQUMsRUFBRSxTQUFTLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQztJQUN0RCxDQUFDO0lBQ0QsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLHVDQUF1QztJQUNoRSxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGNpcmN1bGFyIOKAlCBEZXYtbW9kZSBjaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0aW9uIGZvciBzY29wZSB2YWx1ZXMuXG4gKlxuICogQ2hlY2tzIGlmIGEgdmFsdWUgY29udGFpbnMgY2lyY3VsYXIgcmVmZXJlbmNlcyB1c2luZyBhIFdlYWtTZXQgdHJhdmVyc2FsLlxuICogTyhuKSB3aGVyZSBuID0gdG90YWwgbmVzdGVkIG9iamVjdHMuIFVzZXMgV2Vha1NldCBzbyBubyBtZW1vcnkgbGVhay5cbiAqXG4gKiBHYXRlZCBieSB0aGUgY2FsbGVyIOKAlCBvbmx5IGNhbGxlZCBpbiBkZXYgbW9kZSB0byBhdm9pZCBwcm9kdWN0aW9uIG92ZXJoZWFkLlxuICogU2FtZSBhcHByb2FjaCBhcyBJbW1lciAoZGV0ZWN0IGFuZCB3YXJuIGF0IHJ1bnRpbWUpLlxuICpcbiAqIEEgbGVhZiAoaW1wb3J0cyBub3RoaW5nKTogaXQgbW92ZWQgaGVyZSBmcm9tIGBzY29wZS9kZXRlY3RDaXJjdWxhci50c2Agc28gdGhlIGxheWVyc1xuICogYmVsb3cgYHNjb3BlL2AgbmVlZCBub3QgaW1wb3J0IHVwd2FyZCBmb3IgaXQuXG4gKi9cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHZhbHVlIGNvbnRhaW5zIGNpcmN1bGFyIHJlZmVyZW5jZXMuXG4gKiBPbmx5IGNoZWNrcyBwbGFpbiBvYmplY3RzIGFuZCBhcnJheXMg4oCUIGNsYXNzIGluc3RhbmNlcywgRGF0ZSwgTWFwLCBldGMuIGFyZSBza2lwcGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzQ2lyY3VsYXJSZWZlcmVuY2UodmFsdWU6IHVua25vd24sIGFuY2VzdG9yczogV2Vha1NldDxvYmplY3Q+ID0gbmV3IFdlYWtTZXQoKSk6IGJvb2xlYW4ge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuXG4gIC8vIFNraXAgbm9uLXBsYWluIG9iamVjdHMgKERhdGUsIE1hcCwgU2V0LCBjbGFzcyBpbnN0YW5jZXMpIOKAlCBzYW1lIGFzIGFsbG93bGlzdCBsb2dpY1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBpZiAoYW5jZXN0b3JzLmhhcyh2YWx1ZSkpIHJldHVybiB0cnVlO1xuICAgIGFuY2VzdG9ycy5hZGQodmFsdWUpO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiB2YWx1ZSkge1xuICAgICAgaWYgKGhhc0NpcmN1bGFyUmVmZXJlbmNlKGl0ZW0sIGFuY2VzdG9ycykpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBhbmNlc3RvcnMuZGVsZXRlKHZhbHVlKTsgLy8gYmFja3RyYWNrIOKAlCBhbGxvdyBkaWFtb25kIHJlZmVyZW5jZXNcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBjdG9yID0gKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5jb25zdHJ1Y3RvcjtcbiAgaWYgKGN0b3IgIT09IHVuZGVmaW5lZCAmJiBjdG9yICE9PSBPYmplY3QpIHJldHVybiBmYWxzZTsgLy8gY2xhc3MgaW5zdGFuY2Ug4oCUIHNraXBcblxuICBpZiAoYW5jZXN0b3JzLmhhcyh2YWx1ZSkpIHJldHVybiB0cnVlO1xuICBhbmNlc3RvcnMuYWRkKHZhbHVlKTtcblxuICBmb3IgKGNvbnN0IHYgb2YgT2JqZWN0LnZhbHVlcyh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikpIHtcbiAgICBpZiAoaGFzQ2lyY3VsYXJSZWZlcmVuY2UodiwgYW5jZXN0b3JzKSkgcmV0dXJuIHRydWU7XG4gIH1cbiAgYW5jZXN0b3JzLmRlbGV0ZSh2YWx1ZSk7IC8vIGJhY2t0cmFjayDigJQgYWxsb3cgZGlhbW9uZCByZWZlcmVuY2VzXG4gIHJldHVybiBmYWxzZTtcbn1cbiJdfQ==
@@ -26,7 +26,7 @@
26
26
  * clone-safety guarantee — see the dev-warn seam below.
27
27
  *
28
28
  * Dev-warn seam (resolves the isDevMode-would-be-an-engine-import problem):
29
- * This module must not import `scope/detectCircular` (engine territory).
29
+ * This module must not import `devMode` (the dev-mode flag is library state).
30
30
  * Instead, `capture()` accepts {@link CaptureHooks} with an optional
31
31
  * `warn` callback and invokes it on every `'ref'` capture and every
32
32
  * `'clone'` degradation. The WIRING layer (Block 6) binds `warn` to an
@@ -26,7 +26,7 @@
26
26
  * clone-safety guarantee — see the dev-warn seam below.
27
27
  *
28
28
  * Dev-warn seam (resolves the isDevMode-would-be-an-engine-import problem):
29
- * This module must not import `scope/detectCircular` (engine territory).
29
+ * This module must not import `devMode` (the dev-mode flag is library state).
30
30
  * Instead, `capture()` accepts {@link CaptureHooks} with an optional
31
31
  * `warn` callback and invokes it on every `'ref'` capture and every
32
32
  * `'clone'` degradation. The WIRING layer (Block 6) binds `warn` to an
@@ -184,4 +184,4 @@ export function capture(request, policy = 'summary', hooks) {
184
184
  capturedAt,
185
185
  });
186
186
  }
187
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52ZWxvcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NhcHR1cmUvZW52ZWxvcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWdERztBQUVILE9BQU8sRUFBeUIsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQWlFNUUsb0VBQW9FO0FBQ3BFLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLENBQUMsQ0FBQztBQUUzQyx1RUFBdUU7QUFDdkUsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsRUFBRSxDQUFDO0FBRTlDLHlFQUF5RTtBQUN6RSxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxHQUFHLENBQUM7QUEwRDdDOzs7Ozs7R0FNRztBQUNILFNBQVMsWUFBWSxDQUFDLEtBQWM7SUFDbEMsTUFBTSxNQUFNLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUMsTUFBTSxJQUFJLEdBQXFCLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNyRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssU0FBUztRQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztJQUN2RCxJQUFJLE1BQU0sQ0FBQyxPQUFPLEtBQUssU0FBUztRQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztJQUNoRSxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCx3RUFBd0U7QUFDeEUsU0FBUyxjQUFjLENBQ3JCLE1BQWMsRUFDZCxHQUFvQixFQUNwQixLQUFhLEVBQ2IsTUFBdUIsRUFDdkIsU0FBc0I7SUFFdEIsSUFBSSxLQUFjLENBQUM7SUFDbkIsSUFBSSxDQUFDO1FBQ0gsS0FBSyxHQUFJLE1BQTJDLENBQUMsR0FBRyxDQUFD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QUFPLENBQUMsY0FBYztRQUN0QyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7UUFDcEIsT0FBTyxFQUFFLGNBQWMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQztRQUMvQyxVQUFVO0tBQ1gsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogY2FwdHVyZS9lbnZlbG9wZS50cyDigJQgUkZDLTAwMSBCbG9jayAxOiBjYXB0dXJlIGVudmVsb3BlcyArIHBheWxvYWQgc3VtbWFyaXplci5cbiAqXG4gKiBQYXR0ZXJuOiAgUG9pbnQtaW4tdGltZSBjYXB0dXJlLiBBbiBvYnNlcnZlciBldmVudCBpcyBzbmFwc2hvdHRlZCBpbnRvIGFcbiAqICAgICAgICAgICBzZWxmLWNvbnRhaW5lZCwgaW1tdXRhYmxlIGVudmVsb3BlIGF0IHRoZSBtb21lbnQgaXQgaGFwcGVucywgc29cbiAqICAgICAgICAgICBERUxJVkVSWSBjYW4gYmUgZGVmZXJyZWQgKFJGQy0wMDEgXCJvbmUgYmVhdCBiZWhpbmRcIikgd2l0aG91dCB0aGVcbiAqICAgICAgICAgICBwYXlsb2FkIGRyaWZ0aW5nIHVuZGVyIGxhdGVyIGVuZ2luZSBtdXRhdGlvbnMuXG4gKiBSb2xlOiAgICAgVGhlIGNhcHR1cmUgdGllciBvZiB0aGUgZGVmZXJyZWQtb2JzZXJ2ZXIgcGlwZWxpbmVcbiAqICAgICAgICAgICAoYHNyYy9saWIvb2JzZXJ2ZXItcXVldWUvYCkuIFB1cmUgbW9kdWxlIOKAlCBaRVJPIGVuZ2luZSBpbXBvcnRzXG4gKiAgICAgICAgICAgKG9ubHkgYGNhcHR1cmUvYCBpbnRlcm5hbHMpOyB0aGUgZW5naW5lIHdpcmluZyBpcyBSRkMtMDAxXG4gKiAgICAgICAgICAgQmxvY2tzIDbigJMxMC5cbiAqXG4gKiBDYXB0dXJlIHBvbGljaWVzIChSRkMtMDAxIMKnNSk6XG4gKiAgIC0gYCdzdW1tYXJ5J2Ag4oCUIGJvdW5kZWQsIHJlZmVyZW5jZS1mcmVlIHN1bW1hcml6YXRpb24gdmlhXG4gKiAgICAge0BsaW5rIHN1bW1hcml6ZVBheWxvYWR9LiBCdWlsdCBvbiB0aGUgU0FNRSBjbGFzc2lmaWNhdGlvbiBwYXRoIGFzIHRoZVxuICogICAgIHJldGVudGlvbiBtYXJrZXJzIGluIGBzdW1tYXJpemUudHNgICgjMTQgLyAjMTNjLUEpLCBleHRlbmRlZCB3aXRoXG4gKiAgICAgYm91bmRlZCBzdHJ1Y3R1cmFsIGRlc2NlbnQuIFN0cnVjdHVyZWQtY2xvbmUtc2FmZSBieSBjb25zdHJ1Y3Rpb24uXG4gKiAgIC0gYCdjbG9uZSdgICAg4oCUIGBzdHJ1Y3R1cmVkQ2xvbmVgIGF0IGNhcHR1cmUgdGltZSAodGhlIGNhcHR1cmUtdGllclxuICogICAgIHNwZWxsaW5nIG9mIHJldGVudGlvbiBgJ2Z1bGwnYCDigJQgc2VlIHRoZSBtYXBwaW5nIG5vdGVzIGluXG4gKiAgICAgYHBvbGljaWVzLnRzYCkuIElmIHRoZSBwYXlsb2FkIGlzIG5vdCBjbG9uYWJsZSAoZnVuY3Rpb25zLCBzeW1ib2xzLFxuICogICAgIGxpdmUgaGFuZGxlcyksIGNhcHR1cmUgREVHUkFERVMgdG8gYCdzdW1tYXJ5J2AgYW5kIHJlcG9ydHMgdGhyb3VnaCB0aGVcbiAqICAgICBgd2FybmAgaG9vayDigJQgYSBjYXB0dXJlIG11c3QgbmV2ZXIgdGhyb3cgaW50byB0aGUgcHJvZHVjZXIuXG4gKiAgIC0gYCdyZWYnYCAgICAg4oCUIHBhc3MtdGhyb3VnaCBvZiB0aGUgbGl2ZSByZWZlcmVuY2UuIFRoZSBDQUxMRVIgYXNzZXJ0c1xuICogICAgIGltbXV0YWJpbGl0eSBmb3IgdGhlIGRlbGl2ZXJ5IHdpbmRvdyAoc2FmZSBlLmcuIGZvciBjb21taXR0ZWQtc3RhdGVcbiAqICAgICByZWFkcywgcHJvdmVuIGltbXV0YWJsZS1hZnRlci1zd2FwIGluICMxMy8jMTNiKS4gRXhlbXB0IGZyb20gdGhlXG4gKiAgICAgY2xvbmUtc2FmZXR5IGd1YXJhbnRlZSDigJQgc2VlIHRoZSBkZXYtd2FybiBzZWFtIGJlbG93LlxuICpcbiAqIERldi13YXJuIHNlYW0gKHJlc29sdmVzIHRoZSBpc0Rldk1vZGUtd291bGQtYmUtYW4tZW5naW5lLWltcG9ydCBwcm9ibGVtKTpcbiAqICAgVGhpcyBtb2R1bGUgbXVzdCBub3QgaW1wb3J0IGBzY29wZS9kZXRlY3RDaXJjdWxhcmAgKGVuZ2luZSB0ZXJyaXRvcnkpLlxuICogICBJbnN0ZWFkLCBgY2FwdHVyZSgpYCBhY2NlcHRzIHtAbGluayBDYXB0dXJlSG9va3N9IHdpdGggYW4gb3B0aW9uYWxcbiAqICAgYHdhcm5gIGNhbGxiYWNrIGFuZCBpbnZva2VzIGl0IG9uIGV2ZXJ5IGAncmVmJ2AgY2FwdHVyZSBhbmQgZXZlcnlcbiAqICAgYCdjbG9uZSdgIGRlZ3JhZGF0aW9uLiBUaGUgV0lSSU5HIGxheWVyIChCbG9jayA2KSBiaW5kcyBgd2FybmAgdG8gYW5cbiAqICAgYGlzRGV2TW9kZSgpYC1nYXRlZCwgZGVkdXBsaWNhdGVkIGNvbnNvbGUgd2FybmVyOyB0aGUgcHVyZSBtb2R1bGUgc3RheXNcbiAqICAgZW5naW5lLWZyZWUgYW5kIHNpbGVudCBieSBkZWZhdWx0IChubyBob29rcyDih5Igbm8gd2FybmluZywgemVybyBjb3N0KS5cbiAqXG4gKiBTdW1tYXJpemVyIGJvdW5kcyAoZG9jdW1lbnRlZCBjb250cmFjdCwgZXhwb3J0ZWQgYXMgY29uc3RhbnRzKTpcbiAqICAgLSBkZXB0aCAgIOKJpCB7QGxpbmsgUEFZTE9BRF9TVU1NQVJZX01BWF9ERVBUSH0gICAoMykg4oCUIGRlZXBlciBzdHJ1Y3R1cmVcbiAqICAgICBjb2xsYXBzZXMgdG8gYSBjbGFzc2lmaWVkIGxlYWYgd2l0aCBgZGVwdGhDbGlwcGVkOiB0cnVlYC5cbiAqICAgLSBicmVhZHRoIOKJpCB7QGxpbmsgUEFZTE9BRF9TVU1NQVJZX01BWF9FTlRSSUVTfSAoMTYpIHBlciBvYmplY3QvYXJyYXkg4oCUXG4gKiAgICAgdGhlIHJlbWFpbmRlciBpcyBkcm9wcGVkIGFuZCBmbGFnZ2VkIGB0cnVuY2F0ZWQ6IHRydWVgICh0aGUgaG9uZXN0XG4gKiAgICAgYHNpemVgIHN0aWxsIHJlcG9ydHMgdGhlIHJlYWwgY291bnQpLlxuICogICAtIHRvdGFsICAg4omkIHtAbGluayBQQVlMT0FEX1NVTU1BUllfTUFYX05PREVTfSAgICgxMjgpIHN1bW1hcnkgbm9kZXMgcGVyXG4gKiAgICAgcGF5bG9hZCDigJQgYSBnbG9iYWwgYnVkZ2V0IHNvIHdpZGXDl2RlZXAgcGF5bG9hZHMgc3RheSBPKDEpLWJvdW5kZWQuXG4gKiAgIC0gc3RyaW5nIHByZXZpZXdzIOKJpCBgU1VNTUFSWV9QUkVWSUVXX0xFTkdUSGAgKDgwKSBjaGFycy5cbiAqICAgQ3ljbGVzIGFyZSBkZXRlY3RlZCAoYW5jZXN0b3Igc2V0KSBhbmQgZmxhZ2dlZCBgY2lyY3VsYXI6IHRydWVgO1xuICogICB0aHJvd2luZyBnZXR0ZXJzIHlpZWxkIGEgYCd1bnJlYWRhYmxlJ2AgbGVhZjsgc3ltYm9sLWtleWVkIHByb3BlcnRpZXNcbiAqICAgYXJlIGlnbm9yZWQgKHNhbWUgYXMgSlNPTiAvIGBPYmplY3Qua2V5c2ApOyBgTWFwYC9gU2V0YCBhcmUgbGVhdmVzIHdpdGhcbiAqICAgdGhlaXIgUkVBTCBlbnRyeSBjb3VudCAobm8gZGVzY2VudCDigJQgbWF0Y2hlcyBgc3VtbWFyaXplLnRzYCkuXG4gKi9cblxuaW1wb3J0IHsgdHlwZSBTdW1tYXJ5VmFsdWVUeXBlLCBzdW1tYXJpemVXcml0ZVZhbHVlIH0gZnJvbSAnLi9zdW1tYXJpemUuanMnO1xuXG4vKiogV2hpY2ggb2JzZXJ2ZXIgY2hhbm5lbCBwcm9kdWNlZCBhIGNhcHR1cmVkIGV2ZW50IChSRkMtMDAxIMKnNSkuICovXG5leHBvcnQgdHlwZSBDYXB0dXJlQ2hhbm5lbCA9ICdzY29wZScgfCAnZmxvdycgfCAnZW1pdCc7XG5cbi8qKlxuICogSG93IGFuIGV2ZW50IHBheWxvYWQgaXMgbWF0ZXJpYWxpemVkIGludG8gdGhlIGVudmVsb3BlIChSRkMtMDAxIMKnNSkuXG4gKiBTZWUgdGhlIG1vZHVsZSBoZWFkZXIgZm9yIHRoZSBmdWxsIHBlci1wb2xpY3kgY29udHJhY3QuXG4gKi9cbmV4cG9ydCB0eXBlIENhcHR1cmVQb2xpY3kgPSAnc3VtbWFyeScgfCAnY2xvbmUnIHwgJ3JlZic7XG5cbi8qKlxuICogQSBjYXB0dXJlZCBvYnNlcnZlciBldmVudCDigJQgc2VsZi1jb250YWluZWQgYW5kIGltbXV0YWJsZSAoc2hhbGxvdy1mcm96ZW5cbiAqIGF0IGNyZWF0aW9uKS4gYHNlcWAgaXMgdGhlIGFycml2YWwgc3RhbXAgYXNzaWduZWQgYXQgY2FwdHVyZSB1bmRlciB0aGVcbiAqIHNpbmdsZSBKUyB0aHJlYWQ6IGl0IHRvdGFsbHkgb3JkZXJzIGV2ZW50cyBBQ1JPU1MgYWxsIHRocmVlIGNoYW5uZWxzLCBpc1xuICogbW9ub3RvbmljLCBhbmQgaXMgZ2FwLWRldGVjdGFibGUgKGEgZHJvcHBlZCBldmVudCBsZWF2ZXMgYSB2aXNpYmxlIGhvbGVcbiAqIGluIHRoZSBkZWxpdmVyZWQgYHNlcWAgc2VxdWVuY2Ug4oCUIGhvbmVzdCBsb3NzIGFjY291bnRpbmcpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENhcHR1cmVFbnZlbG9wZSB7XG4gIC8qKiBBcnJpdmFsIHN0YW1wIOKAlCB0b3RhbCBvcmRlciBhY3Jvc3MgY2hhbm5lbHM7IGdhcHMgcmV2ZWFsIGRyb3BzLiAqL1xuICByZWFkb25seSBzZXE6IG51bWJlcjtcbiAgLyoqIFByb2R1Y2luZyBvYnNlcnZlciBjaGFubmVsLiAqL1xuICByZWFkb25seSBjaGFubmVsOiBDYXB0dXJlQ2hhbm5lbDtcbiAgLyoqIFByb2R1Y2luZyBob29rIG5hbWUg4oCUIGAnb25Xcml0ZSdgLCBgJ29uU3RhZ2VFeGVjdXRlZCdgLCBgJ29uRW1pdCdgLCAuLi4gKi9cbiAgcmVhZG9ubHkgbWV0aG9kOiBzdHJpbmc7XG4gIC8qKiBUaGUgZXhlY3V0aW9uIHN0ZXAgdGhhdCBwcm9kdWNlZCB0aGUgZXZlbnQgKGBzdGFnZUlkI2V4ZWN1dGlvbkluZGV4YCkuICovXG4gIHJlYWRvbmx5IHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmc7XG4gIC8qKiBUaGUgcnVuIHRoYXQgcHJvZHVjZWQgdGhlIGV2ZW50IChDb252ZW50aW9uIDQgcGVyLXJ1biBzY29waW5nKS4gKi9cbiAgcmVhZG9ubHkgcnVuSWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFBlciB7QGxpbmsgQ2FwdHVyZVBvbGljeX0g4oCUIE5FVkVSIGEgbGl2ZSBlbmdpbmUgcmVmZXJlbmNlIHVuZGVyXG4gICAqIGAnc3VtbWFyeSdgIC8gYCdjbG9uZSdgOyB1bmRlciBgJ3JlZidgIHRoZSBjYWxsZXIgYXNzZXJ0ZWQgaW1tdXRhYmlsaXR5LlxuICAgKi9cbiAgcmVhZG9ubHkgcGF5bG9hZDogdW5rbm93bjtcbiAgLyoqIENhcHR1cmUgd2FsbC1jbG9jayAobXMgZXBvY2ggYnkgZGVmYXVsdDsgaW5qZWN0YWJsZSB2aWEgaG9va3Mubm93KS4gKi9cbiAgcmVhZG9ubHkgY2FwdHVyZWRBdDogbnVtYmVyO1xufVxuXG4vKiogVGhlIHJhdyBldmVudCBkZXNjcmlwdGlvbiBoYW5kZWQgdG8ge0BsaW5rIGNhcHR1cmV9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYXB0dXJlUmVxdWVzdCB7XG4gIC8qKiBBcnJpdmFsIHN0YW1wIOKAlCBhc3NpZ25lZCBieSB0aGUgbWVyZ2VkIHF1ZXVlJ3MgY291bnRlciAoQmxvY2sgMykuICovXG4gIHJlYWRvbmx5IHNlcTogbnVtYmVyO1xuICByZWFkb25seSBjaGFubmVsOiBDYXB0dXJlQ2hhbm5lbDtcbiAgcmVhZG9ubHkgbWV0aG9kOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJ1bklkOiBzdHJpbmc7XG4gIC8qKiBUaGUgTElWRSBwYXlsb2FkIOKAlCBgY2FwdHVyZSgpYCBtYXRlcmlhbGl6ZXMgaXQgcGVyIHBvbGljeS4gKi9cbiAgcmVhZG9ubHkgcGF5bG9hZDogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBFbmdpbmUtZnJlZSBzZWFtcyBpbmplY3RlZCBieSB0aGUgd2lyaW5nIGxheWVyIChCbG9jayA2KS4gVGhlIHB1cmUgbW9kdWxlXG4gKiBuZXZlciBpbXBvcnRzIGRldi1tb2RlIG9yIGNsb2NrIGluZnJhc3RydWN0dXJlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENhcHR1cmVIb29rcyB7XG4gIC8qKlxuICAgKiBEaWFnbm9zdGljIHNpbmsg4oCUIGludm9rZWQgb24gZXZlcnkgYCdyZWYnYCBjYXB0dXJlIChjYWxsZXItYXNzZXJ0ZWRcbiAgICogaW1tdXRhYmlsaXR5KSBhbmQgZXZlcnkgYCdjbG9uZSdgIOKGkiBgJ3N1bW1hcnknYCBkZWdyYWRhdGlvbi4gQmxvY2sgNlxuICAgKiBiaW5kcyB0aGlzIHRvIGFuIGBpc0Rldk1vZGUoKWAtZ2F0ZWQsIGRlZHVwbGljYXRlZCB3YXJuZXIuXG4gICAqL1xuICByZWFkb25seSB3YXJuPzogKG1lc3NhZ2U6IHN0cmluZykgPT4gdm9pZDtcbiAgLyoqIENsb2NrIGZvciBgY2FwdHVyZWRBdGAg4oCUIGRlZmF1bHRzIHRvIGBEYXRlLm5vd2AuIEluamVjdGFibGUgZm9yIHRlc3RzLiAqL1xuICByZWFkb25seSBub3c/OiAoKSA9PiBudW1iZXI7XG59XG5cbi8qKiBNYXggbmVzdGluZyBkZXB0aCBhIHBheWxvYWQgc3VtbWFyeSBkZXNjZW5kcyBiZWZvcmUgY2xpcHBpbmcuICovXG5leHBvcnQgY29uc3QgUEFZTE9BRF9TVU1NQVJZX01BWF9ERVBUSCA9IDM7XG5cbi8qKiBNYXggZW50cmllcyBzdW1tYXJpemVkIHBlciBvYmplY3QvYXJyYXkgbGV2ZWwgYmVmb3JlIHRydW5jYXRpbmcuICovXG5leHBvcnQgY29uc3QgUEFZTE9BRF9TVU1NQVJZX01BWF9FTlRSSUVTID0gMTY7XG5cbi8qKiBHbG9iYWwgcGVyLXBheWxvYWQgYnVkZ2V0IG9mIHN1bW1hcnkgbm9kZXMgKHdpZGXDl2RlZXAgaGFyZCBib3VuZCkuICovXG5leHBvcnQgY29uc3QgUEFZTE9BRF9TVU1NQVJZX01BWF9OT0RFUyA9IDEyODtcblxuLyoqXG4gKiBMZWFmIGNsYXNzaWZpY2F0aW9uIGZvciBhIHN1bW1hcnkgbm9kZSDigJQgdGhlIGBzdW1tYXJpemUudHNgIGZhbWlseSBwbHVzXG4gKiBgJ3VucmVhZGFibGUnYCBmb3IgcHJvcGVydGllcyB3aG9zZSBnZXR0ZXIgdGhyZXcgZHVyaW5nIGNhcHR1cmUuXG4gKi9cbmV4cG9ydCB0eXBlIFBheWxvYWRTdW1tYXJ5VHlwZSA9IFN1bW1hcnlWYWx1ZVR5cGUgfCAndW5yZWFkYWJsZSc7XG5cbi8qKlxuICogT25lIG5vZGUgb2YgYSBwYXlsb2FkIHN1bW1hcnkgdHJlZS4gRXZlcnkgZmllbGQgaXMgYSBwcmltaXRpdmUsIGEgcGxhaW5cbiAqIG9iamVjdCwgb3IgYSBwbGFpbiBhcnJheSDigJQgc3RydWN0dXJlZC1jbG9uZS1zYWZlIGJ5IGNvbnN0cnVjdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXlsb2FkU3VtbWFyeU5vZGUge1xuICAvKiogQ2xhc3NpZmljYXRpb24g4oCUIHNhbWUgcnVsZXMgYXMgdGhlIHJldGVudGlvbiBtYXJrZXJzIChvbmUgY29kZSBwYXRoKS4gKi9cbiAgcmVhZG9ubHkgdHlwZTogUGF5bG9hZFN1bW1hcnlUeXBlO1xuICAvKiogSG9uZXN0IHNpemUgcHJveHk6IHN0cmluZyBsZW5ndGgsIGFycmF5IGxlbmd0aCwgb3Iga2V5L2VudHJ5IGNvdW50LiAqL1xuICByZWFkb25seSBzaXplPzogbnVtYmVyO1xuICAvKiogRmlyc3QgYFNVTU1BUllfUFJFVklFV19MRU5HVEhgIGNoYXJzIOKAlCBwcmltaXRpdmVzL3N0cmluZ3Mgb25seS4gKi9cbiAgcmVhZG9ubHkgcHJldmlldz86IHN0cmluZztcbiAgLyoqIFN1bW1hcml6ZWQgb3duIGVudW1lcmFibGUgc3RyaW5nLWtleWVkIHByb3BlcnRpZXMgKG9iamVjdHMpLiAqL1xuICByZWFkb25seSBmaWVsZHM/OiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBQYXlsb2FkU3VtbWFyeU5vZGU+PjtcbiAgLyoqIFN1bW1hcml6ZWQgbGVhZGluZyBpdGVtcyAoYXJyYXlzKS4gKi9cbiAgcmVhZG9ubHkgaXRlbXM/OiByZWFkb25seSBQYXlsb2FkU3VtbWFyeU5vZGVbXTtcbiAgLyoqIEVudHJpZXMgd2VyZSBvbWl0dGVkIGhlcmUgKGJyZWFkdGggY2FwIG9yIG5vZGUgYnVkZ2V0KS4gKi9cbiAgcmVhZG9ubHkgdHJ1bmNhdGVkPzogYm9vbGVhbjtcbiAgLyoqIFRoaXMgdmFsdWUgaXMgYW4gYW5jZXN0b3Igb2YgaXRzZWxmIOKAlCBkZXNjZW50IHN0b3BwZWQuICovXG4gIHJlYWRvbmx5IGNpcmN1bGFyPzogdHJ1ZTtcbiAgLyoqIHtAbGluayBQQVlMT0FEX1NVTU1BUllfTUFYX0RFUFRIfSByZWFjaGVkIOKAlCBjaGlsZHJlbiBub3QgZGVzY2VuZGVkLiAqL1xuICByZWFkb25seSBkZXB0aENsaXBwZWQ/OiB0cnVlO1xufVxuXG4vKipcbiAqIFJvb3Qgb2YgYSBwYXlsb2FkIHN1bW1hcnkg4oCUIGJyYW5kZWQgc28gY29uc3VtZXJzIChhbmQgdGVzdHMpIGNhbiBkZXRlY3RcbiAqIHRoYXQgYSBwYXlsb2FkIHdhcyBzdW1tYXJpemVkIHJhdGhlciB0aGFuIGNsb25lZC4gU2libGluZyBvZiB0aGVcbiAqIGBfX3JlYWRTdW1tYXJ5YCAvIGBfX3dyaXRlU3VtbWFyeWAgcmV0ZW50aW9uIG1hcmtlcnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGF5bG9hZFN1bW1hcnkgZXh0ZW5kcyBQYXlsb2FkU3VtbWFyeU5vZGUge1xuICAvKiogRGlzY3JpbWluYW50IOKAlCBgJ3N1bW1hcnknYC1wb2xpY3kgZW52ZWxvcGUgcGF5bG9hZHMgY2FycnkgdGhpcy4gKi9cbiAgcmVhZG9ubHkgX19wYXlsb2FkU3VtbWFyeTogdHJ1ZTtcbn1cblxuLyoqIE11dGFibGUgY29uc3RydWN0aW9uIHNoYXBlIGZvciB7QGxpbmsgUGF5bG9hZFN1bW1hcnlOb2RlfS4gKi9cbmludGVyZmFjZSBTdW1tYXJ5Tm9kZURyYWZ0IHtcbiAgdHlwZTogUGF5bG9hZFN1bW1hcnlUeXBlO1xuICBzaXplPzogbnVtYmVyO1xuICBwcmV2aWV3Pzogc3RyaW5nO1xuICBmaWVsZHM/OiBSZWNvcmQ8c3RyaW5nLCBQYXlsb2FkU3VtbWFyeU5vZGU+O1xuICBpdGVtcz86IFBheWxvYWRTdW1tYXJ5Tm9kZVtdO1xuICB0cnVuY2F0ZWQ/OiBib29sZWFuO1xuICBjaXJjdWxhcj86IHRydWU7XG4gIGRlcHRoQ2xpcHBlZD86IHRydWU7XG59XG5cbi8qKiBTaGFyZWQgbXV0YWJsZSBub2RlIGJ1ZGdldCBmb3Igb25lIHtAbGluayBzdW1tYXJpemVQYXlsb2FkfSBjYWxsLiAqL1xuaW50ZXJmYWNlIFN1bW1hcml6ZUJ1ZGdldCB7XG4gIG5vZGVzTGVmdDogbnVtYmVyO1xufVxuXG4vKipcbiAqIENsYXNzaWZ5IG9uZSB2YWx1ZSB0aHJvdWdoIHRoZSBPTkUgY2xhc3NpZmljYXRpb24gcGF0aCBzaGFyZWQgd2l0aCB0aGVcbiAqIHJldGVudGlvbiBtYXJrZXJzLiBHQVRFIE5PVEU6IEJsb2NrIDEgbWF5IG5vdCBtb2RpZnkgYHN1bW1hcml6ZS50c2AsIHNvXG4gKiB0aGUgbW9kdWxlLXByaXZhdGUgYGNsYXNzaWZ5VmFsdWVgIGlzIHJlYWNoZWQgdGhyb3VnaCBpdHMgZXhwb3J0ZWQgZmFjYWRlXG4gKiBhbmQgdGhlIGJyYW5kIGZpZWxkIGlzIGRyb3BwZWQgYnkgZXhwbGljaXQgY29weSDigJQgQmxvY2sgNiBtYXkgZXhwb3J0XG4gKiBgY2xhc3NpZnlWYWx1ZWAgZGlyZWN0bHkgYW5kIGlubGluZSB0aGlzIGhvcC5cbiAqL1xuZnVuY3Rpb24gY2xhc3NpZnlMZWFmKHZhbHVlOiB1bmtub3duKTogU3VtbWFyeU5vZGVEcmFmdCB7XG4gIGNvbnN0IG1hcmtlciA9IHN1bW1hcml6ZVdyaXRlVmFsdWUodmFsdWUpO1xuICBjb25zdCBsZWFmOiBTdW1tYXJ5Tm9kZURyYWZ0ID0geyB0eXBlOiBtYXJrZXIudHlwZSB9O1xuICBpZiAobWFya2VyLnNpemUgIT09IHVuZGVmaW5lZCkgbGVhZi5zaXplID0gbWFya2VyLnNpemU7XG4gIGlmIChtYXJrZXIucHJldmlldyAhPT0gdW5kZWZpbmVkKSBsZWFmLnByZXZpZXcgPSBtYXJrZXIucHJldmlldztcbiAgcmV0dXJuIGxlYWY7XG59XG5cbi8qKiBSZWFkIG9uZSBjaGlsZCBwcm9wZXJ0eSwgY29udmVydGluZyB0aHJvd2luZyBnZXR0ZXJzIGludG8gYSBsZWFmLiAqL1xuZnVuY3Rpb24gc3VtbWFyaXplQ2hpbGQoXG4gIHBhcmVudDogb2JqZWN0LFxuICBrZXk6IHN0cmluZyB8IG51bWJlcixcbiAgZGVwdGg6IG51bWJlcixcbiAgYnVkZ2V0OiBTdW1tYXJpemVCdWRnZXQsXG4gIGFuY2VzdG9yczogU2V0PG9iamVjdD4sXG4pOiBQYXlsb2FkU3VtbWFyeU5vZGUge1xuICBsZXQgY2hpbGQ6IHVua25vd247XG4gIHRyeSB7XG4gICAgY2hpbGQgPSAocGFyZW50IGFzIFJlY29yZDxzdHJpbmcgfCBudW1iZXIsIHVua25vd24+KVtrZXldO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4geyB0eXBlOiAndW5yZWFkYWJsZScsIHByZXZpZXc6ICdbZ2V0dGVyIHRocmV3IGR1cmluZyBjYXB0dXJlXScgfTtcbiAgfVxuICByZXR1cm4gc3VtbWFyaXplTm9kZShjaGlsZCwgZGVwdGgsIGJ1ZGdldCwgYW5jZXN0b3JzKTtcbn1cblxuZnVuY3Rpb24gc3VtbWFyaXplTm9kZShcbiAgdmFsdWU6IHVua25vd24sXG4gIGRlcHRoOiBudW1iZXIsXG4gIGJ1ZGdldDogU3VtbWFyaXplQnVkZ2V0LFxuICBhbmNlc3RvcnM6IFNldDxvYmplY3Q+LFxuKTogUGF5bG9hZFN1bW1hcnlOb2RlIHtcbiAgYnVkZ2V0Lm5vZGVzTGVmdCAtPSAxO1xuICBjb25zdCBsZWFmID0gY2xhc3NpZnlMZWFmKHZhbHVlKTtcblxuICAvLyBPbmx5IHBsYWluIGNvbnRhaW5lcnMgZGVzY2VuZC4gTWFwL1NldCBzdGF5IGxlYXZlcyAocmVhbCBlbnRyeSBjb3VudFxuICAvLyBhbHJlYWR5IG9uIGBzaXplYCDigJQgbWF0Y2hlcyBzdW1tYXJpemUudHMpOyBldmVyeXRoaW5nIGVsc2UgaXMgYSBsZWFmLlxuICBjb25zdCBjb250YWluZXIgPSAobGVhZi50eXBlID09PSAnb2JqZWN0JyB8fCBsZWFmLnR5cGUgPT09ICdhcnJheScpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGw7XG4gIGlmICghY29udGFpbmVyIHx8IHZhbHVlIGluc3RhbmNlb2YgTWFwIHx8IHZhbHVlIGluc3RhbmNlb2YgU2V0KSByZXR1cm4gbGVhZjtcblxuICBjb25zdCBvYmogPSB2YWx1ZSBhcyBvYmplY3Q7XG4gIGlmIChhbmNlc3RvcnMuaGFzKG9iaikpIHJldHVybiB7IC4uLmxlYWYsIGNpcmN1bGFyOiB0cnVlIH07XG4gIGlmIChkZXB0aCA+PSBQQVlMT0FEX1NVTU1BUllfTUFYX0RFUFRIKSByZXR1cm4geyAuLi5sZWFmLCBkZXB0aENsaXBwZWQ6IHRydWUgfTtcbiAgaWYgKGJ1ZGdldC5ub2Rlc0xlZnQgPD0gMCkgcmV0dXJuIHsgLi4ubGVhZiwgdHJ1bmNhdGVkOiB0cnVlIH07XG5cbiAgYW5jZXN0b3JzLmFkZChvYmopO1xuICB0cnkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgY29uc3QgbGltaXQgPSBNYXRoLm1pbih2YWx1ZS5sZW5ndGgsIFBBWUxPQURfU1VNTUFSWV9NQVhfRU5UUklFUyk7XG4gICAgICBjb25zdCBpdGVtczogUGF5bG9hZFN1bW1hcnlOb2RlW10gPSBbXTtcbiAgICAgIGxldCBjbGlwcGVkID0gdmFsdWUubGVuZ3RoID4gbGltaXQ7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbWl0OyBpKyspIHtcbiAgICAgICAgaWYgKGJ1ZGdldC5ub2Rlc0xlZnQgPD0gMCkge1xuICAgICAgICAgIGNsaXBwZWQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGl0ZW1zLnB1c2goc3VtbWFyaXplQ2hpbGQodmFsdWUsIGksIGRlcHRoICsgMSwgYnVkZ2V0LCBhbmNlc3RvcnMpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjbGlwcGVkID8geyAuLi5sZWFmLCBpdGVtcywgdHJ1bmNhdGVkOiB0cnVlIH0gOiB7IC4uLmxlYWYsIGl0ZW1zIH07XG4gICAgfVxuXG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gICAgY29uc3QgbGltaXQgPSBNYXRoLm1pbihrZXlzLmxlbmd0aCwgUEFZTE9BRF9TVU1NQVJZX01BWF9FTlRSSUVTKTtcbiAgICAvLyBCdWlsdCB2aWEgZW50cmllcyArIGZyb21FbnRyaWVzIHNvIGhvc3RpbGUga2V5cyAoJ19fcHJvdG9fXycsIC4uLilcbiAgICAvLyBiZWNvbWUgb3duIGRhdGEgcHJvcGVydGllcyDigJQgbmV2ZXIgcHJvdG90eXBlIHdyaXRlcy5cbiAgICBjb25zdCBlbnRyaWVzOiBBcnJheTxbc3RyaW5nLCBQYXlsb2FkU3VtbWFyeU5vZGVdPiA9IFtdO1xuICAgIGxldCBjbGlwcGVkID0ga2V5cy5sZW5ndGggPiBsaW1pdDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbWl0OyBpKyspIHtcbiAgICAgIGlmIChidWRnZXQubm9kZXNMZWZ0IDw9IDApIHtcbiAgICAgICAgY2xpcHBlZCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZW50cmllcy5wdXNoKFtrZXlzW2ldLCBzdW1tYXJpemVDaGlsZChvYmosIGtleXNbaV0sIGRlcHRoICsgMSwgYnVkZ2V0LCBhbmNlc3RvcnMpXSk7XG4gICAgfVxuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5mcm9tRW50cmllcyhlbnRyaWVzKTtcbiAgICByZXR1cm4gY2xpcHBlZCA/IHsgLi4ubGVhZiwgZmllbGRzLCB0cnVuY2F0ZWQ6IHRydWUgfSA6IHsgLi4ubGVhZiwgZmllbGRzIH07XG4gIH0gZmluYWxseSB7XG4gICAgYW5jZXN0b3JzLmRlbGV0ZShvYmopO1xuICB9XG59XG5cbi8qKlxuICogUHJvZHVjZSBhIGJvdW5kZWQsIHJlZmVyZW5jZS1mcmVlLCBzdHJ1Y3R1cmVkLWNsb25lLXNhZmUgc3VtbWFyeSBvZiBhblxuICogYXJiaXRyYXJ5IHBheWxvYWQuIE5ldmVyIHRocm93czsgbmV2ZXIgaG9sZHMgYSByZWZlcmVuY2UgaW50byB0aGUgc291cmNlXG4gKiB2YWx1ZSAoZXZlcnkgbm9kZSBpcyBhIGZyZXNoIG9iamVjdCB3aG9zZSBmaWVsZHMgYXJlIHByaW1pdGl2ZXMpLiBCb3VuZHNcbiAqIGFyZSBkb2N1bWVudGVkIGluIHRoZSBtb2R1bGUgaGVhZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3VtbWFyaXplUGF5bG9hZChwYXlsb2FkOiB1bmtub3duKTogUGF5bG9hZFN1bW1hcnkge1xuICBjb25zdCBidWRnZXQ6IFN1bW1hcml6ZUJ1ZGdldCA9IHsgbm9kZXNMZWZ0OiBQQVlMT0FEX1NVTU1BUllfTUFYX05PREVTIH07XG4gIGNvbnN0IHJvb3QgPSBzdW1tYXJpemVOb2RlKHBheWxvYWQsIDAsIGJ1ZGdldCwgbmV3IFNldDxvYmplY3Q+KCkpO1xuICByZXR1cm4geyBfX3BheWxvYWRTdW1tYXJ5OiB0cnVlLCAuLi5yb290IH07XG59XG5cbi8qKiBNYXRlcmlhbGl6ZSB0aGUgcGF5bG9hZCBwZXIgcG9saWN5IOKAlCBzZWUgdGhlIG1vZHVsZSBoZWFkZXIgY29udHJhY3QuICovXG5mdW5jdGlvbiBjYXB0dXJlUGF5bG9hZChyZXF1ZXN0OiBDYXB0dXJlUmVxdWVzdCwgcG9saWN5OiBDYXB0dXJlUG9saWN5LCBob29rcz86IENhcHR1cmVIb29rcyk6IHVua25vd24ge1xuICBpZiAocG9saWN5ID09PSAncmVmJykge1xuICAgIGhvb2tzPy53YXJuPy4oXG4gICAgICBgW2Zvb3RwcmludGpzIGNhcHR1cmVdICdyZWYnIGNhcHR1cmUgZm9yICR7cmVxdWVzdC5jaGFubmVsfS4ke3JlcXVlc3QubWV0aG9kfSBwYXNzZXMgYSBMSVZFIHJlZmVyZW5jZSBgICtcbiAgICAgICAgJ3Rocm91Z2ggZGVmZXJyZWQgZGVsaXZlcnkg4oCUIHRoZSBjYWxsZXIgYXNzZXJ0cyB0aGUgcGF5bG9hZCBpcyBpbW11dGFibGUgdW50aWwgZGVsaXZlcmVkLicsXG4gICAgKTtcbiAgICByZXR1cm4gcmVxdWVzdC5wYXlsb2FkO1xuICB9XG4gIGlmIChwb2xpY3kgPT09ICdjbG9uZScpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHN0cnVjdHVyZWRDbG9uZShyZXF1ZXN0LnBheWxvYWQpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgaG9va3M/Lndhcm4/LihcbiAgICAgICAgYFtmb290cHJpbnRqcyBjYXB0dXJlXSAnY2xvbmUnIGNhcHR1cmUgZm9yICR7cmVxdWVzdC5jaGFubmVsfS4ke3JlcXVlc3QubWV0aG9kfSBmYWlsZWQgYCArXG4gICAgICAgICAgXCIoc3RydWN0dXJlZENsb25lIHRocmV3IOKAlCB1bmNsb25hYmxlIHBheWxvYWQpOyBkZWdyYWRlZCB0byAnc3VtbWFyeScuXCIsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHN1bW1hcml6ZVBheWxvYWQocmVxdWVzdC5wYXlsb2FkKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN1bW1hcml6ZVBheWxvYWQocmVxdWVzdC5wYXlsb2FkKTtcbn1cblxuLyoqXG4gKiBDYXB0dXJlIG9uZSBvYnNlcnZlciBldmVudCBpbnRvIGFuIGltbXV0YWJsZSB7QGxpbmsgQ2FwdHVyZUVudmVsb3BlfS5cbiAqXG4gKiBHdWFyYW50ZWVzOlxuICogICAtIE5ldmVyIHRocm93cyBpbnRvIHRoZSBwcm9kdWNlciAoYCdjbG9uZSdgIGRlZ3JhZGF0aW9uLCBzdW1tYXJpemVyXG4gKiAgICAgbmV2ZXItdGhyb3dzIGNvbnRyYWN0KS5cbiAqICAgLSBUaGUgcmV0dXJuZWQgZW52ZWxvcGUgaXMgc2hhbGxvdy1mcm96ZW4g4oCUIGBzZXFgL2BjaGFubmVsYC8uLi4gY2Fubm90XG4gKiAgICAgYmUgcmVhc3NpZ25lZC4gVW5kZXIgYCdzdW1tYXJ5J2AvYCdjbG9uZSdgIHRoZSBwYXlsb2FkIGhvbGRzIG5vIGxpdmVcbiAqICAgICByZWZlcmVuY2UgaW50byB0aGUgc291cmNlOyB1bmRlciBgJ3JlZidgIGl0IGludGVudGlvbmFsbHkgZG9lcy5cbiAqICAgLSBEZWZhdWx0IHBvbGljeSBpcyBgJ3N1bW1hcnknYCAoY2hlYXBlc3Qgc2FmZSB0aWVyKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhcHR1cmUoXG4gIHJlcXVlc3Q6IENhcHR1cmVSZXF1ZXN0LFxuICBwb2xpY3k6IENhcHR1cmVQb2xpY3kgPSAnc3VtbWFyeScsXG4gIGhvb2tzPzogQ2FwdHVyZUhvb2tzLFxuKTogQ2FwdHVyZUVudmVsb3BlIHtcbiAgY29uc3QgY2FwdHVyZWRBdCA9IGhvb2tzPy5ub3cgIT09IHVuZGVmaW5lZCA/IGhvb2tzLm5vdygpIDogRGF0ZS5ub3coKTtcbiAgcmV0dXJuIE9iamVjdC5mcmVlemUoe1xuICAgIHNlcTogcmVxdWVzdC5zZXEsXG4gICAgY2hhbm5lbDogcmVxdWVzdC5jaGFubmVsLFxuICAgIG1ldGhvZDogcmVxdWVzdC5tZXRob2QsXG4gICAgcnVudGltZVN0YWdlSWQ6IHJlcXVlc3QucnVudGltZVN0YWdlSWQsXG4gICAgcnVuSWQ6IHJlcXVlc3QucnVuSWQsXG4gICAgcGF5bG9hZDogY2FwdHVyZVBheWxvYWQocmVxdWVzdCwgcG9saWN5LCBob29rcyksXG4gICAgY2FwdHVyZWRBdCxcbiAgfSk7XG59XG4iXX0=
187
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52ZWxvcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NhcHR1cmUvZW52ZWxvcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWdERztBQUVILE9BQU8sRUFBeUIsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQWlFNUUsb0VBQW9FO0FBQ3BFLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLENBQUMsQ0FBQztBQUUzQyx1RUFBdUU7QUFDdkUsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsRUFBRSxDQUFDO0FBRTlDLHlFQUF5RTtBQUN6RSxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxHQUFHLENBQUM7QUEwRDdDOzs7Ozs7R0FNRztBQUNILFNBQVMsWUFBWSxDQUFDLEtBQWM7SUFDbEMsTUFBTSxNQUFNLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUMsTUFBTSxJQUFJLEdBQXFCLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNyRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssU0FBUztRQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztJQUN2RCxJQUFJLE1BQU0sQ0FBQyxPQUFPLEtBQUssU0FBUztRQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztJQUNoRSxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCx3RUFBd0U7QUFDeEUsU0FBUyxjQUFjLENBQ3JCLE1BQWMsRUFDZCxHQUFvQixFQUNwQixLQUFhLEVBQ2IsTUFBdUIsRUFDdkIsU0FBc0I7SUFFdEIsSUFBSSxLQUFjLENBQUM7SUFDbkIsSUFBSSxDQUFDO1FBQ0gsS0FBSyxHQUFJLE1BQTJDLENBQUMsR0FBRyxDQUFD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QUFPLENBQUMsY0FBYztRQUN0QyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7UUFDcEIsT0FBTyxFQUFFLGNBQWMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQztRQUMvQyxVQUFVO0tBQ1gsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogY2FwdHVyZS9lbnZlbG9wZS50cyDigJQgUkZDLTAwMSBCbG9jayAxOiBjYXB0dXJlIGVudmVsb3BlcyArIHBheWxvYWQgc3VtbWFyaXplci5cbiAqXG4gKiBQYXR0ZXJuOiAgUG9pbnQtaW4tdGltZSBjYXB0dXJlLiBBbiBvYnNlcnZlciBldmVudCBpcyBzbmFwc2hvdHRlZCBpbnRvIGFcbiAqICAgICAgICAgICBzZWxmLWNvbnRhaW5lZCwgaW1tdXRhYmxlIGVudmVsb3BlIGF0IHRoZSBtb21lbnQgaXQgaGFwcGVucywgc29cbiAqICAgICAgICAgICBERUxJVkVSWSBjYW4gYmUgZGVmZXJyZWQgKFJGQy0wMDEgXCJvbmUgYmVhdCBiZWhpbmRcIikgd2l0aG91dCB0aGVcbiAqICAgICAgICAgICBwYXlsb2FkIGRyaWZ0aW5nIHVuZGVyIGxhdGVyIGVuZ2luZSBtdXRhdGlvbnMuXG4gKiBSb2xlOiAgICAgVGhlIGNhcHR1cmUgdGllciBvZiB0aGUgZGVmZXJyZWQtb2JzZXJ2ZXIgcGlwZWxpbmVcbiAqICAgICAgICAgICAoYHNyYy9saWIvb2JzZXJ2ZXItcXVldWUvYCkuIFB1cmUgbW9kdWxlIOKAlCBaRVJPIGVuZ2luZSBpbXBvcnRzXG4gKiAgICAgICAgICAgKG9ubHkgYGNhcHR1cmUvYCBpbnRlcm5hbHMpOyB0aGUgZW5naW5lIHdpcmluZyBpcyBSRkMtMDAxXG4gKiAgICAgICAgICAgQmxvY2tzIDbigJMxMC5cbiAqXG4gKiBDYXB0dXJlIHBvbGljaWVzIChSRkMtMDAxIMKnNSk6XG4gKiAgIC0gYCdzdW1tYXJ5J2Ag4oCUIGJvdW5kZWQsIHJlZmVyZW5jZS1mcmVlIHN1bW1hcml6YXRpb24gdmlhXG4gKiAgICAge0BsaW5rIHN1bW1hcml6ZVBheWxvYWR9LiBCdWlsdCBvbiB0aGUgU0FNRSBjbGFzc2lmaWNhdGlvbiBwYXRoIGFzIHRoZVxuICogICAgIHJldGVudGlvbiBtYXJrZXJzIGluIGBzdW1tYXJpemUudHNgICgjMTQgLyAjMTNjLUEpLCBleHRlbmRlZCB3aXRoXG4gKiAgICAgYm91bmRlZCBzdHJ1Y3R1cmFsIGRlc2NlbnQuIFN0cnVjdHVyZWQtY2xvbmUtc2FmZSBieSBjb25zdHJ1Y3Rpb24uXG4gKiAgIC0gYCdjbG9uZSdgICAg4oCUIGBzdHJ1Y3R1cmVkQ2xvbmVgIGF0IGNhcHR1cmUgdGltZSAodGhlIGNhcHR1cmUtdGllclxuICogICAgIHNwZWxsaW5nIG9mIHJldGVudGlvbiBgJ2Z1bGwnYCDigJQgc2VlIHRoZSBtYXBwaW5nIG5vdGVzIGluXG4gKiAgICAgYHBvbGljaWVzLnRzYCkuIElmIHRoZSBwYXlsb2FkIGlzIG5vdCBjbG9uYWJsZSAoZnVuY3Rpb25zLCBzeW1ib2xzLFxuICogICAgIGxpdmUgaGFuZGxlcyksIGNhcHR1cmUgREVHUkFERVMgdG8gYCdzdW1tYXJ5J2AgYW5kIHJlcG9ydHMgdGhyb3VnaCB0aGVcbiAqICAgICBgd2FybmAgaG9vayDigJQgYSBjYXB0dXJlIG11c3QgbmV2ZXIgdGhyb3cgaW50byB0aGUgcHJvZHVjZXIuXG4gKiAgIC0gYCdyZWYnYCAgICAg4oCUIHBhc3MtdGhyb3VnaCBvZiB0aGUgbGl2ZSByZWZlcmVuY2UuIFRoZSBDQUxMRVIgYXNzZXJ0c1xuICogICAgIGltbXV0YWJpbGl0eSBmb3IgdGhlIGRlbGl2ZXJ5IHdpbmRvdyAoc2FmZSBlLmcuIGZvciBjb21taXR0ZWQtc3RhdGVcbiAqICAgICByZWFkcywgcHJvdmVuIGltbXV0YWJsZS1hZnRlci1zd2FwIGluICMxMy8jMTNiKS4gRXhlbXB0IGZyb20gdGhlXG4gKiAgICAgY2xvbmUtc2FmZXR5IGd1YXJhbnRlZSDigJQgc2VlIHRoZSBkZXYtd2FybiBzZWFtIGJlbG93LlxuICpcbiAqIERldi13YXJuIHNlYW0gKHJlc29sdmVzIHRoZSBpc0Rldk1vZGUtd291bGQtYmUtYW4tZW5naW5lLWltcG9ydCBwcm9ibGVtKTpcbiAqICAgVGhpcyBtb2R1bGUgbXVzdCBub3QgaW1wb3J0IGBkZXZNb2RlYCAodGhlIGRldi1tb2RlIGZsYWcgaXMgbGlicmFyeSBzdGF0ZSkuXG4gKiAgIEluc3RlYWQsIGBjYXB0dXJlKClgIGFjY2VwdHMge0BsaW5rIENhcHR1cmVIb29rc30gd2l0aCBhbiBvcHRpb25hbFxuICogICBgd2FybmAgY2FsbGJhY2sgYW5kIGludm9rZXMgaXQgb24gZXZlcnkgYCdyZWYnYCBjYXB0dXJlIGFuZCBldmVyeVxuICogICBgJ2Nsb25lJ2AgZGVncmFkYXRpb24uIFRoZSBXSVJJTkcgbGF5ZXIgKEJsb2NrIDYpIGJpbmRzIGB3YXJuYCB0byBhblxuICogICBgaXNEZXZNb2RlKClgLWdhdGVkLCBkZWR1cGxpY2F0ZWQgY29uc29sZSB3YXJuZXI7IHRoZSBwdXJlIG1vZHVsZSBzdGF5c1xuICogICBlbmdpbmUtZnJlZSBhbmQgc2lsZW50IGJ5IGRlZmF1bHQgKG5vIGhvb2tzIOKHkiBubyB3YXJuaW5nLCB6ZXJvIGNvc3QpLlxuICpcbiAqIFN1bW1hcml6ZXIgYm91bmRzIChkb2N1bWVudGVkIGNvbnRyYWN0LCBleHBvcnRlZCBhcyBjb25zdGFudHMpOlxuICogICAtIGRlcHRoICAg4omkIHtAbGluayBQQVlMT0FEX1NVTU1BUllfTUFYX0RFUFRIfSAgICgzKSDigJQgZGVlcGVyIHN0cnVjdHVyZVxuICogICAgIGNvbGxhcHNlcyB0byBhIGNsYXNzaWZpZWQgbGVhZiB3aXRoIGBkZXB0aENsaXBwZWQ6IHRydWVgLlxuICogICAtIGJyZWFkdGgg4omkIHtAbGluayBQQVlMT0FEX1NVTU1BUllfTUFYX0VOVFJJRVN9ICgxNikgcGVyIG9iamVjdC9hcnJheSDigJRcbiAqICAgICB0aGUgcmVtYWluZGVyIGlzIGRyb3BwZWQgYW5kIGZsYWdnZWQgYHRydW5jYXRlZDogdHJ1ZWAgKHRoZSBob25lc3RcbiAqICAgICBgc2l6ZWAgc3RpbGwgcmVwb3J0cyB0aGUgcmVhbCBjb3VudCkuXG4gKiAgIC0gdG90YWwgICDiiaQge0BsaW5rIFBBWUxPQURfU1VNTUFSWV9NQVhfTk9ERVN9ICAgKDEyOCkgc3VtbWFyeSBub2RlcyBwZXJcbiAqICAgICBwYXlsb2FkIOKAlCBhIGdsb2JhbCBidWRnZXQgc28gd2lkZcOXZGVlcCBwYXlsb2FkcyBzdGF5IE8oMSktYm91bmRlZC5cbiAqICAgLSBzdHJpbmcgcHJldmlld3Mg4omkIGBTVU1NQVJZX1BSRVZJRVdfTEVOR1RIYCAoODApIGNoYXJzLlxuICogICBDeWNsZXMgYXJlIGRldGVjdGVkIChhbmNlc3RvciBzZXQpIGFuZCBmbGFnZ2VkIGBjaXJjdWxhcjogdHJ1ZWA7XG4gKiAgIHRocm93aW5nIGdldHRlcnMgeWllbGQgYSBgJ3VucmVhZGFibGUnYCBsZWFmOyBzeW1ib2wta2V5ZWQgcHJvcGVydGllc1xuICogICBhcmUgaWdub3JlZCAoc2FtZSBhcyBKU09OIC8gYE9iamVjdC5rZXlzYCk7IGBNYXBgL2BTZXRgIGFyZSBsZWF2ZXMgd2l0aFxuICogICB0aGVpciBSRUFMIGVudHJ5IGNvdW50IChubyBkZXNjZW50IOKAlCBtYXRjaGVzIGBzdW1tYXJpemUudHNgKS5cbiAqL1xuXG5pbXBvcnQgeyB0eXBlIFN1bW1hcnlWYWx1ZVR5cGUsIHN1bW1hcml6ZVdyaXRlVmFsdWUgfSBmcm9tICcuL3N1bW1hcml6ZS5qcyc7XG5cbi8qKiBXaGljaCBvYnNlcnZlciBjaGFubmVsIHByb2R1Y2VkIGEgY2FwdHVyZWQgZXZlbnQgKFJGQy0wMDEgwqc1KS4gKi9cbmV4cG9ydCB0eXBlIENhcHR1cmVDaGFubmVsID0gJ3Njb3BlJyB8ICdmbG93JyB8ICdlbWl0JztcblxuLyoqXG4gKiBIb3cgYW4gZXZlbnQgcGF5bG9hZCBpcyBtYXRlcmlhbGl6ZWQgaW50byB0aGUgZW52ZWxvcGUgKFJGQy0wMDEgwqc1KS5cbiAqIFNlZSB0aGUgbW9kdWxlIGhlYWRlciBmb3IgdGhlIGZ1bGwgcGVyLXBvbGljeSBjb250cmFjdC5cbiAqL1xuZXhwb3J0IHR5cGUgQ2FwdHVyZVBvbGljeSA9ICdzdW1tYXJ5JyB8ICdjbG9uZScgfCAncmVmJztcblxuLyoqXG4gKiBBIGNhcHR1cmVkIG9ic2VydmVyIGV2ZW50IOKAlCBzZWxmLWNvbnRhaW5lZCBhbmQgaW1tdXRhYmxlIChzaGFsbG93LWZyb3plblxuICogYXQgY3JlYXRpb24pLiBgc2VxYCBpcyB0aGUgYXJyaXZhbCBzdGFtcCBhc3NpZ25lZCBhdCBjYXB0dXJlIHVuZGVyIHRoZVxuICogc2luZ2xlIEpTIHRocmVhZDogaXQgdG90YWxseSBvcmRlcnMgZXZlbnRzIEFDUk9TUyBhbGwgdGhyZWUgY2hhbm5lbHMsIGlzXG4gKiBtb25vdG9uaWMsIGFuZCBpcyBnYXAtZGV0ZWN0YWJsZSAoYSBkcm9wcGVkIGV2ZW50IGxlYXZlcyBhIHZpc2libGUgaG9sZVxuICogaW4gdGhlIGRlbGl2ZXJlZCBgc2VxYCBzZXF1ZW5jZSDigJQgaG9uZXN0IGxvc3MgYWNjb3VudGluZykuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2FwdHVyZUVudmVsb3BlIHtcbiAgLyoqIEFycml2YWwgc3RhbXAg4oCUIHRvdGFsIG9yZGVyIGFjcm9zcyBjaGFubmVsczsgZ2FwcyByZXZlYWwgZHJvcHMuICovXG4gIHJlYWRvbmx5IHNlcTogbnVtYmVyO1xuICAvKiogUHJvZHVjaW5nIG9ic2VydmVyIGNoYW5uZWwuICovXG4gIHJlYWRvbmx5IGNoYW5uZWw6IENhcHR1cmVDaGFubmVsO1xuICAvKiogUHJvZHVjaW5nIGhvb2sgbmFtZSDigJQgYCdvbldyaXRlJ2AsIGAnb25TdGFnZUV4ZWN1dGVkJ2AsIGAnb25FbWl0J2AsIC4uLiAqL1xuICByZWFkb25seSBtZXRob2Q6IHN0cmluZztcbiAgLyoqIFRoZSBleGVjdXRpb24gc3RlcCB0aGF0IHByb2R1Y2VkIHRoZSBldmVudCAoYHN0YWdlSWQjZXhlY3V0aW9uSW5kZXhgKS4gKi9cbiAgcmVhZG9ubHkgcnVudGltZVN0YWdlSWQ6IHN0cmluZztcbiAgLyoqIFRoZSBydW4gdGhhdCBwcm9kdWNlZCB0aGUgZXZlbnQgKENvbnZlbnRpb24gNCBwZXItcnVuIHNjb3BpbmcpLiAqL1xuICByZWFkb25seSBydW5JZDogc3RyaW5nO1xuICAvKipcbiAgICogUGVyIHtAbGluayBDYXB0dXJlUG9saWN5fSDigJQgTkVWRVIgYSBsaXZlIGVuZ2luZSByZWZlcmVuY2UgdW5kZXJcbiAgICogYCdzdW1tYXJ5J2AgLyBgJ2Nsb25lJ2A7IHVuZGVyIGAncmVmJ2AgdGhlIGNhbGxlciBhc3NlcnRlZCBpbW11dGFiaWxpdHkuXG4gICAqL1xuICByZWFkb25seSBwYXlsb2FkOiB1bmtub3duO1xuICAvKiogQ2FwdHVyZSB3YWxsLWNsb2NrIChtcyBlcG9jaCBieSBkZWZhdWx0OyBpbmplY3RhYmxlIHZpYSBob29rcy5ub3cpLiAqL1xuICByZWFkb25seSBjYXB0dXJlZEF0OiBudW1iZXI7XG59XG5cbi8qKiBUaGUgcmF3IGV2ZW50IGRlc2NyaXB0aW9uIGhhbmRlZCB0byB7QGxpbmsgY2FwdHVyZX0uICovXG5leHBvcnQgaW50ZXJmYWNlIENhcHR1cmVSZXF1ZXN0IHtcbiAgLyoqIEFycml2YWwgc3RhbXAg4oCUIGFzc2lnbmVkIGJ5IHRoZSBtZXJnZWQgcXVldWUncyBjb3VudGVyIChCbG9jayAzKS4gKi9cbiAgcmVhZG9ubHkgc2VxOiBudW1iZXI7XG4gIHJlYWRvbmx5IGNoYW5uZWw6IENhcHR1cmVDaGFubmVsO1xuICByZWFkb25seSBtZXRob2Q6IHN0cmluZztcbiAgcmVhZG9ubHkgcnVudGltZVN0YWdlSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgcnVuSWQ6IHN0cmluZztcbiAgLyoqIFRoZSBMSVZFIHBheWxvYWQg4oCUIGBjYXB0dXJlKClgIG1hdGVyaWFsaXplcyBpdCBwZXIgcG9saWN5LiAqL1xuICByZWFkb25seSBwYXlsb2FkOiB1bmtub3duO1xufVxuXG4vKipcbiAqIEVuZ2luZS1mcmVlIHNlYW1zIGluamVjdGVkIGJ5IHRoZSB3aXJpbmcgbGF5ZXIgKEJsb2NrIDYpLiBUaGUgcHVyZSBtb2R1bGVcbiAqIG5ldmVyIGltcG9ydHMgZGV2LW1vZGUgb3IgY2xvY2sgaW5mcmFzdHJ1Y3R1cmUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2FwdHVyZUhvb2tzIHtcbiAgLyoqXG4gICAqIERpYWdub3N0aWMgc2luayDigJQgaW52b2tlZCBvbiBldmVyeSBgJ3JlZidgIGNhcHR1cmUgKGNhbGxlci1hc3NlcnRlZFxuICAgKiBpbW11dGFiaWxpdHkpIGFuZCBldmVyeSBgJ2Nsb25lJ2Ag4oaSIGAnc3VtbWFyeSdgIGRlZ3JhZGF0aW9uLiBCbG9jayA2XG4gICAqIGJpbmRzIHRoaXMgdG8gYW4gYGlzRGV2TW9kZSgpYC1nYXRlZCwgZGVkdXBsaWNhdGVkIHdhcm5lci5cbiAgICovXG4gIHJlYWRvbmx5IHdhcm4/OiAobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkO1xuICAvKiogQ2xvY2sgZm9yIGBjYXB0dXJlZEF0YCDigJQgZGVmYXVsdHMgdG8gYERhdGUubm93YC4gSW5qZWN0YWJsZSBmb3IgdGVzdHMuICovXG4gIHJlYWRvbmx5IG5vdz86ICgpID0+IG51bWJlcjtcbn1cblxuLyoqIE1heCBuZXN0aW5nIGRlcHRoIGEgcGF5bG9hZCBzdW1tYXJ5IGRlc2NlbmRzIGJlZm9yZSBjbGlwcGluZy4gKi9cbmV4cG9ydCBjb25zdCBQQVlMT0FEX1NVTU1BUllfTUFYX0RFUFRIID0gMztcblxuLyoqIE1heCBlbnRyaWVzIHN1bW1hcml6ZWQgcGVyIG9iamVjdC9hcnJheSBsZXZlbCBiZWZvcmUgdHJ1bmNhdGluZy4gKi9cbmV4cG9ydCBjb25zdCBQQVlMT0FEX1NVTU1BUllfTUFYX0VOVFJJRVMgPSAxNjtcblxuLyoqIEdsb2JhbCBwZXItcGF5bG9hZCBidWRnZXQgb2Ygc3VtbWFyeSBub2RlcyAod2lkZcOXZGVlcCBoYXJkIGJvdW5kKS4gKi9cbmV4cG9ydCBjb25zdCBQQVlMT0FEX1NVTU1BUllfTUFYX05PREVTID0gMTI4O1xuXG4vKipcbiAqIExlYWYgY2xhc3NpZmljYXRpb24gZm9yIGEgc3VtbWFyeSBub2RlIOKAlCB0aGUgYHN1bW1hcml6ZS50c2AgZmFtaWx5IHBsdXNcbiAqIGAndW5yZWFkYWJsZSdgIGZvciBwcm9wZXJ0aWVzIHdob3NlIGdldHRlciB0aHJldyBkdXJpbmcgY2FwdHVyZS5cbiAqL1xuZXhwb3J0IHR5cGUgUGF5bG9hZFN1bW1hcnlUeXBlID0gU3VtbWFyeVZhbHVlVHlwZSB8ICd1bnJlYWRhYmxlJztcblxuLyoqXG4gKiBPbmUgbm9kZSBvZiBhIHBheWxvYWQgc3VtbWFyeSB0cmVlLiBFdmVyeSBmaWVsZCBpcyBhIHByaW1pdGl2ZSwgYSBwbGFpblxuICogb2JqZWN0LCBvciBhIHBsYWluIGFycmF5IOKAlCBzdHJ1Y3R1cmVkLWNsb25lLXNhZmUgYnkgY29uc3RydWN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBheWxvYWRTdW1tYXJ5Tm9kZSB7XG4gIC8qKiBDbGFzc2lmaWNhdGlvbiDigJQgc2FtZSBydWxlcyBhcyB0aGUgcmV0ZW50aW9uIG1hcmtlcnMgKG9uZSBjb2RlIHBhdGgpLiAqL1xuICByZWFkb25seSB0eXBlOiBQYXlsb2FkU3VtbWFyeVR5cGU7XG4gIC8qKiBIb25lc3Qgc2l6ZSBwcm94eTogc3RyaW5nIGxlbmd0aCwgYXJyYXkgbGVuZ3RoLCBvciBrZXkvZW50cnkgY291bnQuICovXG4gIHJlYWRvbmx5IHNpemU/OiBudW1iZXI7XG4gIC8qKiBGaXJzdCBgU1VNTUFSWV9QUkVWSUVXX0xFTkdUSGAgY2hhcnMg4oCUIHByaW1pdGl2ZXMvc3RyaW5ncyBvbmx5LiAqL1xuICByZWFkb25seSBwcmV2aWV3Pzogc3RyaW5nO1xuICAvKiogU3VtbWFyaXplZCBvd24gZW51bWVyYWJsZSBzdHJpbmcta2V5ZWQgcHJvcGVydGllcyAob2JqZWN0cykuICovXG4gIHJlYWRvbmx5IGZpZWxkcz86IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIFBheWxvYWRTdW1tYXJ5Tm9kZT4+O1xuICAvKiogU3VtbWFyaXplZCBsZWFkaW5nIGl0ZW1zIChhcnJheXMpLiAqL1xuICByZWFkb25seSBpdGVtcz86IHJlYWRvbmx5IFBheWxvYWRTdW1tYXJ5Tm9kZVtdO1xuICAvKiogRW50cmllcyB3ZXJlIG9taXR0ZWQgaGVyZSAoYnJlYWR0aCBjYXAgb3Igbm9kZSBidWRnZXQpLiAqL1xuICByZWFkb25seSB0cnVuY2F0ZWQ/OiBib29sZWFuO1xuICAvKiogVGhpcyB2YWx1ZSBpcyBhbiBhbmNlc3RvciBvZiBpdHNlbGYg4oCUIGRlc2NlbnQgc3RvcHBlZC4gKi9cbiAgcmVhZG9ubHkgY2lyY3VsYXI/OiB0cnVlO1xuICAvKioge0BsaW5rIFBBWUxPQURfU1VNTUFSWV9NQVhfREVQVEh9IHJlYWNoZWQg4oCUIGNoaWxkcmVuIG5vdCBkZXNjZW5kZWQuICovXG4gIHJlYWRvbmx5IGRlcHRoQ2xpcHBlZD86IHRydWU7XG59XG5cbi8qKlxuICogUm9vdCBvZiBhIHBheWxvYWQgc3VtbWFyeSDigJQgYnJhbmRlZCBzbyBjb25zdW1lcnMgKGFuZCB0ZXN0cykgY2FuIGRldGVjdFxuICogdGhhdCBhIHBheWxvYWQgd2FzIHN1bW1hcml6ZWQgcmF0aGVyIHRoYW4gY2xvbmVkLiBTaWJsaW5nIG9mIHRoZVxuICogYF9fcmVhZFN1bW1hcnlgIC8gYF9fd3JpdGVTdW1tYXJ5YCByZXRlbnRpb24gbWFya2Vycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXlsb2FkU3VtbWFyeSBleHRlbmRzIFBheWxvYWRTdW1tYXJ5Tm9kZSB7XG4gIC8qKiBEaXNjcmltaW5hbnQg4oCUIGAnc3VtbWFyeSdgLXBvbGljeSBlbnZlbG9wZSBwYXlsb2FkcyBjYXJyeSB0aGlzLiAqL1xuICByZWFkb25seSBfX3BheWxvYWRTdW1tYXJ5OiB0cnVlO1xufVxuXG4vKiogTXV0YWJsZSBjb25zdHJ1Y3Rpb24gc2hhcGUgZm9yIHtAbGluayBQYXlsb2FkU3VtbWFyeU5vZGV9LiAqL1xuaW50ZXJmYWNlIFN1bW1hcnlOb2RlRHJhZnQge1xuICB0eXBlOiBQYXlsb2FkU3VtbWFyeVR5cGU7XG4gIHNpemU/OiBudW1iZXI7XG4gIHByZXZpZXc/OiBzdHJpbmc7XG4gIGZpZWxkcz86IFJlY29yZDxzdHJpbmcsIFBheWxvYWRTdW1tYXJ5Tm9kZT47XG4gIGl0ZW1zPzogUGF5bG9hZFN1bW1hcnlOb2RlW107XG4gIHRydW5jYXRlZD86IGJvb2xlYW47XG4gIGNpcmN1bGFyPzogdHJ1ZTtcbiAgZGVwdGhDbGlwcGVkPzogdHJ1ZTtcbn1cblxuLyoqIFNoYXJlZCBtdXRhYmxlIG5vZGUgYnVkZ2V0IGZvciBvbmUge0BsaW5rIHN1bW1hcml6ZVBheWxvYWR9IGNhbGwuICovXG5pbnRlcmZhY2UgU3VtbWFyaXplQnVkZ2V0IHtcbiAgbm9kZXNMZWZ0OiBudW1iZXI7XG59XG5cbi8qKlxuICogQ2xhc3NpZnkgb25lIHZhbHVlIHRocm91Z2ggdGhlIE9ORSBjbGFzc2lmaWNhdGlvbiBwYXRoIHNoYXJlZCB3aXRoIHRoZVxuICogcmV0ZW50aW9uIG1hcmtlcnMuIEdBVEUgTk9URTogQmxvY2sgMSBtYXkgbm90IG1vZGlmeSBgc3VtbWFyaXplLnRzYCwgc29cbiAqIHRoZSBtb2R1bGUtcHJpdmF0ZSBgY2xhc3NpZnlWYWx1ZWAgaXMgcmVhY2hlZCB0aHJvdWdoIGl0cyBleHBvcnRlZCBmYWNhZGVcbiAqIGFuZCB0aGUgYnJhbmQgZmllbGQgaXMgZHJvcHBlZCBieSBleHBsaWNpdCBjb3B5IOKAlCBCbG9jayA2IG1heSBleHBvcnRcbiAqIGBjbGFzc2lmeVZhbHVlYCBkaXJlY3RseSBhbmQgaW5saW5lIHRoaXMgaG9wLlxuICovXG5mdW5jdGlvbiBjbGFzc2lmeUxlYWYodmFsdWU6IHVua25vd24pOiBTdW1tYXJ5Tm9kZURyYWZ0IHtcbiAgY29uc3QgbWFya2VyID0gc3VtbWFyaXplV3JpdGVWYWx1ZSh2YWx1ZSk7XG4gIGNvbnN0IGxlYWY6IFN1bW1hcnlOb2RlRHJhZnQgPSB7IHR5cGU6IG1hcmtlci50eXBlIH07XG4gIGlmIChtYXJrZXIuc2l6ZSAhPT0gdW5kZWZpbmVkKSBsZWFmLnNpemUgPSBtYXJrZXIuc2l6ZTtcbiAgaWYgKG1hcmtlci5wcmV2aWV3ICE9PSB1bmRlZmluZWQpIGxlYWYucHJldmlldyA9IG1hcmtlci5wcmV2aWV3O1xuICByZXR1cm4gbGVhZjtcbn1cblxuLyoqIFJlYWQgb25lIGNoaWxkIHByb3BlcnR5LCBjb252ZXJ0aW5nIHRocm93aW5nIGdldHRlcnMgaW50byBhIGxlYWYuICovXG5mdW5jdGlvbiBzdW1tYXJpemVDaGlsZChcbiAgcGFyZW50OiBvYmplY3QsXG4gIGtleTogc3RyaW5nIHwgbnVtYmVyLFxuICBkZXB0aDogbnVtYmVyLFxuICBidWRnZXQ6IFN1bW1hcml6ZUJ1ZGdldCxcbiAgYW5jZXN0b3JzOiBTZXQ8b2JqZWN0Pixcbik6IFBheWxvYWRTdW1tYXJ5Tm9kZSB7XG4gIGxldCBjaGlsZDogdW5rbm93bjtcbiAgdHJ5IHtcbiAgICBjaGlsZCA9IChwYXJlbnQgYXMgUmVjb3JkPHN0cmluZyB8IG51bWJlciwgdW5rbm93bj4pW2tleV07XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7IHR5cGU6ICd1bnJlYWRhYmxlJywgcHJldmlldzogJ1tnZXR0ZXIgdGhyZXcgZHVyaW5nIGNhcHR1cmVdJyB9O1xuICB9XG4gIHJldHVybiBzdW1tYXJpemVOb2RlKGNoaWxkLCBkZXB0aCwgYnVkZ2V0LCBhbmNlc3RvcnMpO1xufVxuXG5mdW5jdGlvbiBzdW1tYXJpemVOb2RlKFxuICB2YWx1ZTogdW5rbm93bixcbiAgZGVwdGg6IG51bWJlcixcbiAgYnVkZ2V0OiBTdW1tYXJpemVCdWRnZXQsXG4gIGFuY2VzdG9yczogU2V0PG9iamVjdD4sXG4pOiBQYXlsb2FkU3VtbWFyeU5vZGUge1xuICBidWRnZXQubm9kZXNMZWZ0IC09IDE7XG4gIGNvbnN0IGxlYWYgPSBjbGFzc2lmeUxlYWYodmFsdWUpO1xuXG4gIC8vIE9ubHkgcGxhaW4gY29udGFpbmVycyBkZXNjZW5kLiBNYXAvU2V0IHN0YXkgbGVhdmVzIChyZWFsIGVudHJ5IGNvdW50XG4gIC8vIGFscmVhZHkgb24gYHNpemVgIOKAlCBtYXRjaGVzIHN1bW1hcml6ZS50cyk7IGV2ZXJ5dGhpbmcgZWxzZSBpcyBhIGxlYWYuXG4gIGNvbnN0IGNvbnRhaW5lciA9IChsZWFmLnR5cGUgPT09ICdvYmplY3QnIHx8IGxlYWYudHlwZSA9PT0gJ2FycmF5JykgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbDtcbiAgaWYgKCFjb250YWluZXIgfHwgdmFsdWUgaW5zdGFuY2VvZiBNYXAgfHwgdmFsdWUgaW5zdGFuY2VvZiBTZXQpIHJldHVybiBsZWFmO1xuXG4gIGNvbnN0IG9iaiA9IHZhbHVlIGFzIG9iamVjdDtcbiAgaWYgKGFuY2VzdG9ycy5oYXMob2JqKSkgcmV0dXJuIHsgLi4ubGVhZiwgY2lyY3VsYXI6IHRydWUgfTtcbiAgaWYgKGRlcHRoID49IFBBWUxPQURfU1VNTUFSWV9NQVhfREVQVEgpIHJldHVybiB7IC4uLmxlYWYsIGRlcHRoQ2xpcHBlZDogdHJ1ZSB9O1xuICBpZiAoYnVkZ2V0Lm5vZGVzTGVmdCA8PSAwKSByZXR1cm4geyAuLi5sZWFmLCB0cnVuY2F0ZWQ6IHRydWUgfTtcblxuICBhbmNlc3RvcnMuYWRkKG9iaik7XG4gIHRyeSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBjb25zdCBsaW1pdCA9IE1hdGgubWluKHZhbHVlLmxlbmd0aCwgUEFZTE9BRF9TVU1NQVJZX01BWF9FTlRSSUVTKTtcbiAgICAgIGNvbnN0IGl0ZW1zOiBQYXlsb2FkU3VtbWFyeU5vZGVbXSA9IFtdO1xuICAgICAgbGV0IGNsaXBwZWQgPSB2YWx1ZS5sZW5ndGggPiBsaW1pdDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGltaXQ7IGkrKykge1xuICAgICAgICBpZiAoYnVkZ2V0Lm5vZGVzTGVmdCA8PSAwKSB7XG4gICAgICAgICAgY2xpcHBlZCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaXRlbXMucHVzaChzdW1tYXJpemVDaGlsZCh2YWx1ZSwgaSwgZGVwdGggKyAxLCBidWRnZXQsIGFuY2VzdG9ycykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNsaXBwZWQgPyB7IC4uLmxlYWYsIGl0ZW1zLCB0cnVuY2F0ZWQ6IHRydWUgfSA6IHsgLi4ubGVhZiwgaXRlbXMgfTtcbiAgICB9XG5cbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICBjb25zdCBsaW1pdCA9IE1hdGgubWluKGtleXMubGVuZ3RoLCBQQVlMT0FEX1NVTU1BUllfTUFYX0VOVFJJRVMpO1xuICAgIC8vIEJ1aWx0IHZpYSBlbnRyaWVzICsgZnJvbUVudHJpZXMgc28gaG9zdGlsZSBrZXlzICgnX19wcm90b19fJywgLi4uKVxuICAgIC8vIGJlY29tZSBvd24gZGF0YSBwcm9wZXJ0aWVzIOKAlCBuZXZlciBwcm90b3R5cGUgd3JpdGVzLlxuICAgIGNvbnN0IGVudHJpZXM6IEFycmF5PFtzdHJpbmcsIFBheWxvYWRTdW1tYXJ5Tm9kZV0+ID0gW107XG4gICAgbGV0IGNsaXBwZWQgPSBrZXlzLmxlbmd0aCA+IGxpbWl0O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGltaXQ7IGkrKykge1xuICAgICAgaWYgKGJ1ZGdldC5ub2Rlc0xlZnQgPD0gMCkge1xuICAgICAgICBjbGlwcGVkID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBlbnRyaWVzLnB1c2goW2tleXNbaV0sIHN1bW1hcml6ZUNoaWxkKG9iaiwga2V5c1tpXSwgZGVwdGggKyAxLCBidWRnZXQsIGFuY2VzdG9ycyldKTtcbiAgICB9XG4gICAgY29uc3QgZmllbGRzID0gT2JqZWN0LmZyb21FbnRyaWVzKGVudHJpZXMpO1xuICAgIHJldHVybiBjbGlwcGVkID8geyAuLi5sZWFmLCBmaWVsZHMsIHRydW5jYXRlZDogdHJ1ZSB9IDogeyAuLi5sZWFmLCBmaWVsZHMgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhbmNlc3RvcnMuZGVsZXRlKG9iaik7XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9kdWNlIGEgYm91bmRlZCwgcmVmZXJlbmNlLWZyZWUsIHN0cnVjdHVyZWQtY2xvbmUtc2FmZSBzdW1tYXJ5IG9mIGFuXG4gKiBhcmJpdHJhcnkgcGF5bG9hZC4gTmV2ZXIgdGhyb3dzOyBuZXZlciBob2xkcyBhIHJlZmVyZW5jZSBpbnRvIHRoZSBzb3VyY2VcbiAqIHZhbHVlIChldmVyeSBub2RlIGlzIGEgZnJlc2ggb2JqZWN0IHdob3NlIGZpZWxkcyBhcmUgcHJpbWl0aXZlcykuIEJvdW5kc1xuICogYXJlIGRvY3VtZW50ZWQgaW4gdGhlIG1vZHVsZSBoZWFkZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdW1tYXJpemVQYXlsb2FkKHBheWxvYWQ6IHVua25vd24pOiBQYXlsb2FkU3VtbWFyeSB7XG4gIGNvbnN0IGJ1ZGdldDogU3VtbWFyaXplQnVkZ2V0ID0geyBub2Rlc0xlZnQ6IFBBWUxPQURfU1VNTUFSWV9NQVhfTk9ERVMgfTtcbiAgY29uc3Qgcm9vdCA9IHN1bW1hcml6ZU5vZGUocGF5bG9hZCwgMCwgYnVkZ2V0LCBuZXcgU2V0PG9iamVjdD4oKSk7XG4gIHJldHVybiB7IF9fcGF5bG9hZFN1bW1hcnk6IHRydWUsIC4uLnJvb3QgfTtcbn1cblxuLyoqIE1hdGVyaWFsaXplIHRoZSBwYXlsb2FkIHBlciBwb2xpY3kg4oCUIHNlZSB0aGUgbW9kdWxlIGhlYWRlciBjb250cmFjdC4gKi9cbmZ1bmN0aW9uIGNhcHR1cmVQYXlsb2FkKHJlcXVlc3Q6IENhcHR1cmVSZXF1ZXN0LCBwb2xpY3k6IENhcHR1cmVQb2xpY3ksIGhvb2tzPzogQ2FwdHVyZUhvb2tzKTogdW5rbm93biB7XG4gIGlmIChwb2xpY3kgPT09ICdyZWYnKSB7XG4gICAgaG9va3M/Lndhcm4/LihcbiAgICAgIGBbZm9vdHByaW50anMgY2FwdHVyZV0gJ3JlZicgY2FwdHVyZSBmb3IgJHtyZXF1ZXN0LmNoYW5uZWx9LiR7cmVxdWVzdC5tZXRob2R9IHBhc3NlcyBhIExJVkUgcmVmZXJlbmNlIGAgK1xuICAgICAgICAndGhyb3VnaCBkZWZlcnJlZCBkZWxpdmVyeSDigJQgdGhlIGNhbGxlciBhc3NlcnRzIHRoZSBwYXlsb2FkIGlzIGltbXV0YWJsZSB1bnRpbCBkZWxpdmVyZWQuJyxcbiAgICApO1xuICAgIHJldHVybiByZXF1ZXN0LnBheWxvYWQ7XG4gIH1cbiAgaWYgKHBvbGljeSA9PT0gJ2Nsb25lJykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gc3RydWN0dXJlZENsb25lKHJlcXVlc3QucGF5bG9hZCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICBob29rcz8ud2Fybj8uKFxuICAgICAgICBgW2Zvb3RwcmludGpzIGNhcHR1cmVdICdjbG9uZScgY2FwdHVyZSBmb3IgJHtyZXF1ZXN0LmNoYW5uZWx9LiR7cmVxdWVzdC5tZXRob2R9IGZhaWxlZCBgICtcbiAgICAgICAgICBcIihzdHJ1Y3R1cmVkQ2xvbmUgdGhyZXcg4oCUIHVuY2xvbmFibGUgcGF5bG9hZCk7IGRlZ3JhZGVkIHRvICdzdW1tYXJ5Jy5cIixcbiAgICAgICk7XG4gICAgICByZXR1cm4gc3VtbWFyaXplUGF5bG9hZChyZXF1ZXN0LnBheWxvYWQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3VtbWFyaXplUGF5bG9hZChyZXF1ZXN0LnBheWxvYWQpO1xufVxuXG4vKipcbiAqIENhcHR1cmUgb25lIG9ic2VydmVyIGV2ZW50IGludG8gYW4gaW1tdXRhYmxlIHtAbGluayBDYXB0dXJlRW52ZWxvcGV9LlxuICpcbiAqIEd1YXJhbnRlZXM6XG4gKiAgIC0gTmV2ZXIgdGhyb3dzIGludG8gdGhlIHByb2R1Y2VyIChgJ2Nsb25lJ2AgZGVncmFkYXRpb24sIHN1bW1hcml6ZXJcbiAqICAgICBuZXZlci10aHJvd3MgY29udHJhY3QpLlxuICogICAtIFRoZSByZXR1cm5lZCBlbnZlbG9wZSBpcyBzaGFsbG93LWZyb3plbiDigJQgYHNlcWAvYGNoYW5uZWxgLy4uLiBjYW5ub3RcbiAqICAgICBiZSByZWFzc2lnbmVkLiBVbmRlciBgJ3N1bW1hcnknYC9gJ2Nsb25lJ2AgdGhlIHBheWxvYWQgaG9sZHMgbm8gbGl2ZVxuICogICAgIHJlZmVyZW5jZSBpbnRvIHRoZSBzb3VyY2U7IHVuZGVyIGAncmVmJ2AgaXQgaW50ZW50aW9uYWxseSBkb2VzLlxuICogICAtIERlZmF1bHQgcG9saWN5IGlzIGAnc3VtbWFyeSdgIChjaGVhcGVzdCBzYWZlIHRpZXIpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FwdHVyZShcbiAgcmVxdWVzdDogQ2FwdHVyZVJlcXVlc3QsXG4gIHBvbGljeTogQ2FwdHVyZVBvbGljeSA9ICdzdW1tYXJ5JyxcbiAgaG9va3M/OiBDYXB0dXJlSG9va3MsXG4pOiBDYXB0dXJlRW52ZWxvcGUge1xuICBjb25zdCBjYXB0dXJlZEF0ID0gaG9va3M/Lm5vdyAhPT0gdW5kZWZpbmVkID8gaG9va3Mubm93KCkgOiBEYXRlLm5vdygpO1xuICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7XG4gICAgc2VxOiByZXF1ZXN0LnNlcSxcbiAgICBjaGFubmVsOiByZXF1ZXN0LmNoYW5uZWwsXG4gICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICBydW50aW1lU3RhZ2VJZDogcmVxdWVzdC5ydW50aW1lU3RhZ2VJZCxcbiAgICBydW5JZDogcmVxdWVzdC5ydW5JZCxcbiAgICBwYXlsb2FkOiBjYXB0dXJlUGF5bG9hZChyZXF1ZXN0LCBwb2xpY3ksIGhvb2tzKSxcbiAgICBjYXB0dXJlZEF0LFxuICB9KTtcbn1cbiJdfQ==
@@ -7,10 +7,16 @@
7
7
  * #14 `readTracking` and #13c-A `writeTracking` dials.
8
8
  * - `summarizeReadValue` / `summarizeWriteValue` — the parameterized
9
9
  * summary-marker builders sharing one classification path.
10
+ * - `summarizeValue` — the human-readable narrative one-liner.
11
+ * - `hasCircularReference` — the dev-mode cycle probe (a leaf).
12
+ * - `invokeRecorderHook` — the one "look up the hook, bind `this`, call it"
13
+ * primitive both recorder delivery tiers share (a leaf).
10
14
  *
11
15
  * RFC-001 (deferred observer delivery) builds its capture tier on this
12
16
  * module — see the mapping notes in `policies.ts`.
13
17
  */
18
+ export { hasCircularReference } from './circular.js';
19
+ export { invokeRecorderHook } from './invokeHook.js';
14
20
  export type { RetentionPolicy } from './policies.js';
15
21
  export type { ReadSummaryMarker, SummaryValueType, WriteSummaryMarker } from './summarize.js';
16
- export { READ_PREVIEW_LENGTH, summarizeReadValue, summarizeWriteValue, SUMMARY_PREVIEW_LENGTH } from './summarize.js';
22
+ export { READ_PREVIEW_LENGTH, summarizeReadValue, summarizeValue, summarizeWriteValue, SUMMARY_PREVIEW_LENGTH, } from './summarize.js';
@@ -8,9 +8,15 @@
8
8
  * #14 `readTracking` and #13c-A `writeTracking` dials.
9
9
  * - `summarizeReadValue` / `summarizeWriteValue` — the parameterized
10
10
  * summary-marker builders sharing one classification path.
11
+ * - `summarizeValue` — the human-readable narrative one-liner.
12
+ * - `hasCircularReference` — the dev-mode cycle probe (a leaf).
13
+ * - `invokeRecorderHook` — the one "look up the hook, bind `this`, call it"
14
+ * primitive both recorder delivery tiers share (a leaf).
11
15
  *
12
16
  * RFC-001 (deferred observer delivery) builds its capture tier on this
13
17
  * module — see the mapping notes in `policies.ts`.
14
18
  */
15
- export { READ_PREVIEW_LENGTH, summarizeReadValue, summarizeWriteValue, SUMMARY_PREVIEW_LENGTH } from './summarize.js';
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NhcHR1cmUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEJBQTBCO0FBQzFCOzs7Ozs7Ozs7Ozs7R0FZRztBQUlILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogaXN0YW5idWwgaWdub3JlIGZpbGUgKi9cbi8qKlxuICogY2FwdHVyZS8g4oCUIFNoYXJlZCB2YWx1ZS1jYXB0dXJlIC8gcmV0ZW50aW9uIHByaW1pdGl2ZXMgKHplcm8gZGVwcywgbGVhZlxuICogbW9kdWxlIOKAlCBgbWVtb3J5L2AgaW1wb3J0cyBpdCwgbmV2ZXIgdGhlIHJldmVyc2UpLlxuICpcbiAqIE9uZSBob21lIGZvciBcIndoYXQgZG8gd2Uga2VlcCBhYm91dCBhIHRyYWNrZWQgb3BlcmF0aW9uJ3MgdmFsdWU/XCI6XG4gKiAgIC0gYFJldGVudGlvblBvbGljeWAg4oCUIHRoZSBgJ2Z1bGwnIHwgJ3N1bW1hcnknIHwgJ29mZidgIGZhbWlseSBiZWhpbmQgdGhlXG4gKiAgICAgIzE0IGByZWFkVHJhY2tpbmdgIGFuZCAjMTNjLUEgYHdyaXRlVHJhY2tpbmdgIGRpYWxzLlxuICogICAtIGBzdW1tYXJpemVSZWFkVmFsdWVgIC8gYHN1bW1hcml6ZVdyaXRlVmFsdWVgIOKAlCB0aGUgcGFyYW1ldGVyaXplZFxuICogICAgIHN1bW1hcnktbWFya2VyIGJ1aWxkZXJzIHNoYXJpbmcgb25lIGNsYXNzaWZpY2F0aW9uIHBhdGguXG4gKlxuICogUkZDLTAwMSAoZGVmZXJyZWQgb2JzZXJ2ZXIgZGVsaXZlcnkpIGJ1aWxkcyBpdHMgY2FwdHVyZSB0aWVyIG9uIHRoaXNcbiAqIG1vZHVsZSDigJQgc2VlIHRoZSBtYXBwaW5nIG5vdGVzIGluIGBwb2xpY2llcy50c2AuXG4gKi9cblxuZXhwb3J0IHR5cGUgeyBSZXRlbnRpb25Qb2xpY3kgfSBmcm9tICcuL3BvbGljaWVzLmpzJztcbmV4cG9ydCB0eXBlIHsgUmVhZFN1bW1hcnlNYXJrZXIsIFN1bW1hcnlWYWx1ZVR5cGUsIFdyaXRlU3VtbWFyeU1hcmtlciB9IGZyb20gJy4vc3VtbWFyaXplLmpzJztcbmV4cG9ydCB7IFJFQURfUFJFVklFV19MRU5HVEgsIHN1bW1hcml6ZVJlYWRWYWx1ZSwgc3VtbWFyaXplV3JpdGVWYWx1ZSwgU1VNTUFSWV9QUkVWSUVXX0xFTkdUSCB9IGZyb20gJy4vc3VtbWFyaXplLmpzJztcbiJdfQ==
19
+ export { hasCircularReference } from './circular.js';
20
+ export { invokeRecorderHook } from './invokeHook.js';
21
+ export { READ_PREVIEW_LENGTH, summarizeReadValue, summarizeValue, summarizeWriteValue, SUMMARY_PREVIEW_LENGTH, } from './summarize.js';
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NhcHR1cmUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEJBQTBCO0FBQzFCOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBRUgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBR3JELE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsa0JBQWtCLEVBQ2xCLGNBQWMsRUFDZCxtQkFBbUIsRUFDbkIsc0JBQXNCLEdBQ3ZCLE1BQU0sZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBpc3RhbmJ1bCBpZ25vcmUgZmlsZSAqL1xuLyoqXG4gKiBjYXB0dXJlLyDigJQgU2hhcmVkIHZhbHVlLWNhcHR1cmUgLyByZXRlbnRpb24gcHJpbWl0aXZlcyAoemVybyBkZXBzLCBsZWFmXG4gKiBtb2R1bGUg4oCUIGBtZW1vcnkvYCBpbXBvcnRzIGl0LCBuZXZlciB0aGUgcmV2ZXJzZSkuXG4gKlxuICogT25lIGhvbWUgZm9yIFwid2hhdCBkbyB3ZSBrZWVwIGFib3V0IGEgdHJhY2tlZCBvcGVyYXRpb24ncyB2YWx1ZT9cIjpcbiAqICAgLSBgUmV0ZW50aW9uUG9saWN5YCDigJQgdGhlIGAnZnVsbCcgfCAnc3VtbWFyeScgfCAnb2ZmJ2AgZmFtaWx5IGJlaGluZCB0aGVcbiAqICAgICAjMTQgYHJlYWRUcmFja2luZ2AgYW5kICMxM2MtQSBgd3JpdGVUcmFja2luZ2AgZGlhbHMuXG4gKiAgIC0gYHN1bW1hcml6ZVJlYWRWYWx1ZWAgLyBgc3VtbWFyaXplV3JpdGVWYWx1ZWAg4oCUIHRoZSBwYXJhbWV0ZXJpemVkXG4gKiAgICAgc3VtbWFyeS1tYXJrZXIgYnVpbGRlcnMgc2hhcmluZyBvbmUgY2xhc3NpZmljYXRpb24gcGF0aC5cbiAqICAgLSBgc3VtbWFyaXplVmFsdWVgIOKAlCB0aGUgaHVtYW4tcmVhZGFibGUgbmFycmF0aXZlIG9uZS1saW5lci5cbiAqICAgLSBgaGFzQ2lyY3VsYXJSZWZlcmVuY2VgIOKAlCB0aGUgZGV2LW1vZGUgY3ljbGUgcHJvYmUgKGEgbGVhZikuXG4gKiAgIC0gYGludm9rZVJlY29yZGVySG9va2Ag4oCUIHRoZSBvbmUgXCJsb29rIHVwIHRoZSBob29rLCBiaW5kIGB0aGlzYCwgY2FsbCBpdFwiXG4gKiAgICAgcHJpbWl0aXZlIGJvdGggcmVjb3JkZXIgZGVsaXZlcnkgdGllcnMgc2hhcmUgKGEgbGVhZikuXG4gKlxuICogUkZDLTAwMSAoZGVmZXJyZWQgb2JzZXJ2ZXIgZGVsaXZlcnkpIGJ1aWxkcyBpdHMgY2FwdHVyZSB0aWVyIG9uIHRoaXNcbiAqIG1vZHVsZSDigJQgc2VlIHRoZSBtYXBwaW5nIG5vdGVzIGluIGBwb2xpY2llcy50c2AuXG4gKi9cblxuZXhwb3J0IHsgaGFzQ2lyY3VsYXJSZWZlcmVuY2UgfSBmcm9tICcuL2NpcmN1bGFyLmpzJztcbmV4cG9ydCB7IGludm9rZVJlY29yZGVySG9vayB9IGZyb20gJy4vaW52b2tlSG9vay5qcyc7XG5leHBvcnQgdHlwZSB7IFJldGVudGlvblBvbGljeSB9IGZyb20gJy4vcG9saWNpZXMuanMnO1xuZXhwb3J0IHR5cGUgeyBSZWFkU3VtbWFyeU1hcmtlciwgU3VtbWFyeVZhbHVlVHlwZSwgV3JpdGVTdW1tYXJ5TWFya2VyIH0gZnJvbSAnLi9zdW1tYXJpemUuanMnO1xuZXhwb3J0IHtcbiAgUkVBRF9QUkVWSUVXX0xFTkdUSCxcbiAgc3VtbWFyaXplUmVhZFZhbHVlLFxuICBzdW1tYXJpemVWYWx1ZSxcbiAgc3VtbWFyaXplV3JpdGVWYWx1ZSxcbiAgU1VNTUFSWV9QUkVWSUVXX0xFTkdUSCxcbn0gZnJvbSAnLi9zdW1tYXJpemUuanMnO1xuIl19
@@ -0,0 +1,36 @@
1
+ /**
2
+ * capture/invokeHook.ts — the ONE per-listener invoke helper (RFC-001 §9 mitigation).
3
+ *
4
+ * Pattern: Single shared "look up the hook, bind `this`, call it" primitive
5
+ * used by BOTH delivery tiers:
6
+ * - inline: `ScopeFacade._invokeHook` / `ScopeFacade.emitEvent`
7
+ * call it per recorder per event (the historical direct call);
8
+ * - deferred: `DeferredObserverTier`'s dispatcher listener calls
9
+ * it per envelope at the flush checkpoint.
10
+ * Because both tiers route through the SAME lookup + `.call(this)`
11
+ * semantics, the two paths cannot drift: a recorder that works
12
+ * inline is invoked identically one beat behind.
13
+ * Role: Invocation primitive only. NO error handling here — the two
14
+ * tiers isolate failures differently by design (inline routes a
15
+ * throw to sibling recorders' `onError` at the dispatch site;
16
+ * deferred routes sync throws AND async rejections through
17
+ * `DeferredDispatcher`'s injected error callback).
18
+ *
19
+ * Lookup semantics: NORMAL property lookup (prototype chain included), the
20
+ * same as the historical `recorder[hook]` read in `ScopeFacade._invokeHook` —
21
+ * class-based recorders declare hooks on their prototype. (The own-property
22
+ * restriction in `hasRecorderMethods` applies only to CHANNEL ROUTING
23
+ * detection, not to invocation.)
24
+ *
25
+ * A leaf (imports nothing): it moved here from `recorder/invokeHook.ts` so `scope/`
26
+ * (the inline tier) and `runner/` (the deferred tier) can share it without `scope/`
27
+ * importing `recorder/` — that edge was part of the memory ⇄ scope ⇄ recorder cycle.
28
+ */
29
+ /**
30
+ * Invoke `recorder[method](event)` with `this` bound to the recorder, iff
31
+ * `method` resolves to a function. Returns the hook's return value (a
32
+ * deferred listener may return a Promise the dispatcher tracks); returns
33
+ * `undefined` when the hook is absent. Throws whatever the hook throws —
34
+ * callers own error isolation.
35
+ */
36
+ export declare function invokeRecorderHook(recorder: object, method: string, event: unknown): unknown;
@@ -0,0 +1,42 @@
1
+ /**
2
+ * capture/invokeHook.ts — the ONE per-listener invoke helper (RFC-001 §9 mitigation).
3
+ *
4
+ * Pattern: Single shared "look up the hook, bind `this`, call it" primitive
5
+ * used by BOTH delivery tiers:
6
+ * - inline: `ScopeFacade._invokeHook` / `ScopeFacade.emitEvent`
7
+ * call it per recorder per event (the historical direct call);
8
+ * - deferred: `DeferredObserverTier`'s dispatcher listener calls
9
+ * it per envelope at the flush checkpoint.
10
+ * Because both tiers route through the SAME lookup + `.call(this)`
11
+ * semantics, the two paths cannot drift: a recorder that works
12
+ * inline is invoked identically one beat behind.
13
+ * Role: Invocation primitive only. NO error handling here — the two
14
+ * tiers isolate failures differently by design (inline routes a
15
+ * throw to sibling recorders' `onError` at the dispatch site;
16
+ * deferred routes sync throws AND async rejections through
17
+ * `DeferredDispatcher`'s injected error callback).
18
+ *
19
+ * Lookup semantics: NORMAL property lookup (prototype chain included), the
20
+ * same as the historical `recorder[hook]` read in `ScopeFacade._invokeHook` —
21
+ * class-based recorders declare hooks on their prototype. (The own-property
22
+ * restriction in `hasRecorderMethods` applies only to CHANNEL ROUTING
23
+ * detection, not to invocation.)
24
+ *
25
+ * A leaf (imports nothing): it moved here from `recorder/invokeHook.ts` so `scope/`
26
+ * (the inline tier) and `runner/` (the deferred tier) can share it without `scope/`
27
+ * importing `recorder/` — that edge was part of the memory ⇄ scope ⇄ recorder cycle.
28
+ */
29
+ /**
30
+ * Invoke `recorder[method](event)` with `this` bound to the recorder, iff
31
+ * `method` resolves to a function. Returns the hook's return value (a
32
+ * deferred listener may return a Promise the dispatcher tracks); returns
33
+ * `undefined` when the hook is absent. Throws whatever the hook throws —
34
+ * callers own error isolation.
35
+ */
36
+ export function invokeRecorderHook(recorder, method, event) {
37
+ const hook = recorder[method];
38
+ if (typeof hook !== 'function')
39
+ return undefined;
40
+ return hook.call(recorder, event);
41
+ }
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW52b2tlSG9vay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvY2FwdHVyZS9pbnZva2VIb29rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyQkc7QUFFSDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsUUFBZ0IsRUFBRSxNQUFjLEVBQUUsS0FBYztJQUNqRixNQUFNLElBQUksR0FBSSxRQUFvQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNELElBQUksT0FBTyxJQUFJLEtBQUssVUFBVTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ2pELE9BQVEsSUFBZ0MsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2pFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGNhcHR1cmUvaW52b2tlSG9vay50cyDigJQgdGhlIE9ORSBwZXItbGlzdGVuZXIgaW52b2tlIGhlbHBlciAoUkZDLTAwMSDCpzkgbWl0aWdhdGlvbikuXG4gKlxuICogUGF0dGVybjogIFNpbmdsZSBzaGFyZWQgXCJsb29rIHVwIHRoZSBob29rLCBiaW5kIGB0aGlzYCwgY2FsbCBpdFwiIHByaW1pdGl2ZVxuICogICAgICAgICAgIHVzZWQgYnkgQk9USCBkZWxpdmVyeSB0aWVyczpcbiAqICAgICAgICAgICAgIC0gaW5saW5lOiAgIGBTY29wZUZhY2FkZS5faW52b2tlSG9va2AgLyBgU2NvcGVGYWNhZGUuZW1pdEV2ZW50YFxuICogICAgICAgICAgICAgICBjYWxsIGl0IHBlciByZWNvcmRlciBwZXIgZXZlbnQgKHRoZSBoaXN0b3JpY2FsIGRpcmVjdCBjYWxsKTtcbiAqICAgICAgICAgICAgIC0gZGVmZXJyZWQ6IGBEZWZlcnJlZE9ic2VydmVyVGllcmAncyBkaXNwYXRjaGVyIGxpc3RlbmVyIGNhbGxzXG4gKiAgICAgICAgICAgICAgIGl0IHBlciBlbnZlbG9wZSBhdCB0aGUgZmx1c2ggY2hlY2twb2ludC5cbiAqICAgICAgICAgICBCZWNhdXNlIGJvdGggdGllcnMgcm91dGUgdGhyb3VnaCB0aGUgU0FNRSBsb29rdXAgKyBgLmNhbGwodGhpcylgXG4gKiAgICAgICAgICAgc2VtYW50aWNzLCB0aGUgdHdvIHBhdGhzIGNhbm5vdCBkcmlmdDogYSByZWNvcmRlciB0aGF0IHdvcmtzXG4gKiAgICAgICAgICAgaW5saW5lIGlzIGludm9rZWQgaWRlbnRpY2FsbHkgb25lIGJlYXQgYmVoaW5kLlxuICogUm9sZTogICAgIEludm9jYXRpb24gcHJpbWl0aXZlIG9ubHkuIE5PIGVycm9yIGhhbmRsaW5nIGhlcmUg4oCUIHRoZSB0d29cbiAqICAgICAgICAgICB0aWVycyBpc29sYXRlIGZhaWx1cmVzIGRpZmZlcmVudGx5IGJ5IGRlc2lnbiAoaW5saW5lIHJvdXRlcyBhXG4gKiAgICAgICAgICAgdGhyb3cgdG8gc2libGluZyByZWNvcmRlcnMnIGBvbkVycm9yYCBhdCB0aGUgZGlzcGF0Y2ggc2l0ZTtcbiAqICAgICAgICAgICBkZWZlcnJlZCByb3V0ZXMgc3luYyB0aHJvd3MgQU5EIGFzeW5jIHJlamVjdGlvbnMgdGhyb3VnaFxuICogICAgICAgICAgIGBEZWZlcnJlZERpc3BhdGNoZXJgJ3MgaW5qZWN0ZWQgZXJyb3IgY2FsbGJhY2spLlxuICpcbiAqIExvb2t1cCBzZW1hbnRpY3M6IE5PUk1BTCBwcm9wZXJ0eSBsb29rdXAgKHByb3RvdHlwZSBjaGFpbiBpbmNsdWRlZCksIHRoZVxuICogc2FtZSBhcyB0aGUgaGlzdG9yaWNhbCBgcmVjb3JkZXJbaG9va11gIHJlYWQgaW4gYFNjb3BlRmFjYWRlLl9pbnZva2VIb29rYCDigJRcbiAqIGNsYXNzLWJhc2VkIHJlY29yZGVycyBkZWNsYXJlIGhvb2tzIG9uIHRoZWlyIHByb3RvdHlwZS4gKFRoZSBvd24tcHJvcGVydHlcbiAqIHJlc3RyaWN0aW9uIGluIGBoYXNSZWNvcmRlck1ldGhvZHNgIGFwcGxpZXMgb25seSB0byBDSEFOTkVMIFJPVVRJTkdcbiAqIGRldGVjdGlvbiwgbm90IHRvIGludm9jYXRpb24uKVxuICpcbiAqIEEgbGVhZiAoaW1wb3J0cyBub3RoaW5nKTogaXQgbW92ZWQgaGVyZSBmcm9tIGByZWNvcmRlci9pbnZva2VIb29rLnRzYCBzbyBgc2NvcGUvYFxuICogKHRoZSBpbmxpbmUgdGllcikgYW5kIGBydW5uZXIvYCAodGhlIGRlZmVycmVkIHRpZXIpIGNhbiBzaGFyZSBpdCB3aXRob3V0IGBzY29wZS9gXG4gKiBpbXBvcnRpbmcgYHJlY29yZGVyL2Ag4oCUIHRoYXQgZWRnZSB3YXMgcGFydCBvZiB0aGUgbWVtb3J5IOKHhCBzY29wZSDih4QgcmVjb3JkZXIgY3ljbGUuXG4gKi9cblxuLyoqXG4gKiBJbnZva2UgYHJlY29yZGVyW21ldGhvZF0oZXZlbnQpYCB3aXRoIGB0aGlzYCBib3VuZCB0byB0aGUgcmVjb3JkZXIsIGlmZlxuICogYG1ldGhvZGAgcmVzb2x2ZXMgdG8gYSBmdW5jdGlvbi4gUmV0dXJucyB0aGUgaG9vaydzIHJldHVybiB2YWx1ZSAoYVxuICogZGVmZXJyZWQgbGlzdGVuZXIgbWF5IHJldHVybiBhIFByb21pc2UgdGhlIGRpc3BhdGNoZXIgdHJhY2tzKTsgcmV0dXJuc1xuICogYHVuZGVmaW5lZGAgd2hlbiB0aGUgaG9vayBpcyBhYnNlbnQuIFRocm93cyB3aGF0ZXZlciB0aGUgaG9vayB0aHJvd3Mg4oCUXG4gKiBjYWxsZXJzIG93biBlcnJvciBpc29sYXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnZva2VSZWNvcmRlckhvb2socmVjb3JkZXI6IG9iamVjdCwgbWV0aG9kOiBzdHJpbmcsIGV2ZW50OiB1bmtub3duKTogdW5rbm93biB7XG4gIGNvbnN0IGhvb2sgPSAocmVjb3JkZXIgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW21ldGhvZF07XG4gIGlmICh0eXBlb2YgaG9vayAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIChob29rIGFzIChlOiB1bmtub3duKSA9PiB1bmtub3duKS5jYWxsKHJlY29yZGVyLCBldmVudCk7XG59XG4iXX0=
@@ -8,6 +8,9 @@
8
8
  *
9
9
  * Deliberately avoids every O(value) operation: no clone, no serialization.
10
10
  * See {@link ReadSummaryMarker} for the honest-cost contract.
11
+ *
12
+ * Also home of {@link summarizeValue} — the narrative one-liner (a string, not a
13
+ * marker) the decide() evidence capture and the combined narrative share.
11
14
  */
12
15
  /** Max characters captured in a summary marker's `preview`. */
13
16
  export declare const SUMMARY_PREVIEW_LENGTH = 80;
@@ -62,4 +65,14 @@ export declare function summarizeReadValue(value: unknown): ReadSummaryMarker;
62
65
  * of {@link summarizeReadValue} — same classification, distinct brand.
63
66
  */
64
67
  export declare function summarizeWriteValue(value: unknown): WriteSummaryMarker;
68
+ /**
69
+ * Human-readable one-line summary of a value, for NARRATIVE output (as opposed to the
70
+ * retention markers above, which are records). Truncates strings, summarizes arrays and
71
+ * objects by count. Shared by `CombinedNarrativeRecorder` and the decide()/select()
72
+ * evidence capture so both format a value the same way.
73
+ *
74
+ * Moved here from `scope/recorders/summarizeValue.ts` (a leaf living in a mid-layer
75
+ * module forced `decide/` and `engine/narrative/` to import it upward).
76
+ */
77
+ export declare function summarizeValue(value: unknown, maxLen: number): string;
65
78
  export {};
@@ -8,6 +8,9 @@
8
8
  *
9
9
  * Deliberately avoids every O(value) operation: no clone, no serialization.
10
10
  * See {@link ReadSummaryMarker} for the honest-cost contract.
11
+ *
12
+ * Also home of {@link summarizeValue} — the narrative one-liner (a string, not a
13
+ * marker) the decide() evidence capture and the combined narrative share.
11
14
  */
12
15
  /** Max characters captured in a summary marker's `preview`. */
13
16
  export const SUMMARY_PREVIEW_LENGTH = 80;
@@ -55,4 +58,37 @@ export function summarizeReadValue(value) {
55
58
  export function summarizeWriteValue(value) {
56
59
  return { __writeSummary: true, ...classifyValue(value) };
57
60
  }
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VtbWFyaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jYXB0dXJlL3N1bW1hcml6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHO0FBRUgsK0RBQStEO0FBQy9ELE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztBQUV6Qzs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsc0JBQXNCLENBQUM7QUFrRDFEOzs7R0FHRztBQUNILFNBQVMsYUFBYSxDQUFDLEtBQWM7SUFDbkMsSUFBSSxLQUFLLEtBQUssSUFBSTtRQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDNUMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM5QixPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsc0JBQXNCLENBQUMsRUFBRSxDQUFDO0lBQ2pHLENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN2RSxJQUFJLEtBQUssWUFBWSxHQUFHLElBQUksS0FBSyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ2pELHlFQUF5RTtRQUN6RSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFDRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzlCLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQWdDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN4RixDQUFDO0lBQ0QsSUFBSSxPQUFPLEtBQUssS0FBSyxVQUFVO1FBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUM3RCxzRUFBc0U7SUFDdEUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEtBQXlCLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLHNCQUFzQixDQUFDLEVBQUUsQ0FBQztBQUM3RyxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEtBQWM7SUFDL0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztBQUMxRCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUFDLEtBQWM7SUFDaEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztBQUMzRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBzdW1tYXJpemUudHMg4oCUIENoZWFwIHZhbHVlIHN1bW1hcml6YXRpb24gZm9yIGAnc3VtbWFyeSdgIHJldGVudGlvbi5cbiAqXG4gKiBFeHRyYWN0ZWQgZnJvbSBgU3RhZ2VDb250ZXh0YCAoIzE0J3MgYHN1bW1hcml6ZVJlYWRWYWx1ZWApIGludG8gYSBzaGFyZWQsXG4gKiBicmFuZC1wYXJhbWV0ZXJpemVkIGhlbHBlciBzbyBib3RoIHNuYXBzaG90LXRyYWNraW5nIGRpYWxzICgjMTRcbiAqIGByZWFkVHJhY2tpbmdgLCAjMTNjLUEgYHdyaXRlVHJhY2tpbmdgKSDigJQgYW5kIGxhdGVyIFJGQy0wMDEncyBkZWZlcnJlZFxuICogb2JzZXJ2ZXIgY2FwdHVyZSB0aWVyIOKAlCBwcm9kdWNlIGlkZW50aWNhbCBzdW1tYXJpZXMgZnJvbSBPTkUgY29kZSBwYXRoLlxuICpcbiAqIERlbGliZXJhdGVseSBhdm9pZHMgZXZlcnkgTyh2YWx1ZSkgb3BlcmF0aW9uOiBubyBjbG9uZSwgbm8gc2VyaWFsaXphdGlvbi5cbiAqIFNlZSB7QGxpbmsgUmVhZFN1bW1hcnlNYXJrZXJ9IGZvciB0aGUgaG9uZXN0LWNvc3QgY29udHJhY3QuXG4gKi9cblxuLyoqIE1heCBjaGFyYWN0ZXJzIGNhcHR1cmVkIGluIGEgc3VtbWFyeSBtYXJrZXIncyBgcHJldmlld2AuICovXG5leHBvcnQgY29uc3QgU1VNTUFSWV9QUkVWSUVXX0xFTkdUSCA9IDgwO1xuXG4vKipcbiAqIENvbXBhdCBhbGlhcyBmb3Ige0BsaW5rIFNVTU1BUllfUFJFVklFV19MRU5HVEh9IOKAlCB0aGUgbmFtZSBzaGlwcGVkIHdpdGhcbiAqICMxNCwga2VwdCBzbyBleGlzdGluZyBpbXBvcnQgcGF0aHMgKGBtZW1vcnkvdHlwZXNgLCB0aGUgbWVtb3J5IGJhcnJlbClcbiAqIHN0YXkgdmFsaWQuIFNhbWUgY29uc3RhbnQ7IHJlYWRzIGFuZCB3cml0ZXMgc2hhcmUgb25lIHByZXZpZXcgY2FwLlxuICovXG5leHBvcnQgY29uc3QgUkVBRF9QUkVWSUVXX0xFTkdUSCA9IFNVTU1BUllfUFJFVklFV19MRU5HVEg7XG5cbi8qKiBgdHlwZW9mYCByZXN1bHQsIHJlZmluZWQgdG8gJ2FycmF5JyAvICdudWxsJyBmb3Igb2JqZWN0cy4gKi9cbmV4cG9ydCB0eXBlIFN1bW1hcnlWYWx1ZVR5cGUgPVxuICB8ICdzdHJpbmcnXG4gIHwgJ251bWJlcidcbiAgfCAnYm9vbGVhbidcbiAgfCAnYmlnaW50J1xuICB8ICdzeW1ib2wnXG4gIHwgJ2Z1bmN0aW9uJ1xuICB8ICdvYmplY3QnXG4gIHwgJ2FycmF5J1xuICB8ICdudWxsJztcblxuLyoqIEJyYW5kLWZyZWUgc3VtbWFyeSBmaWVsZHMgc2hhcmVkIGJ5IGJvdGggbWFya2VyIHNoYXBlcy4gKi9cbmludGVyZmFjZSBWYWx1ZVN1bW1hcnkge1xuICAvKiogYHR5cGVvZmAgcmVzdWx0LCByZWZpbmVkIHRvICdhcnJheScgLyAnbnVsbCcgZm9yIG9iamVjdHMuICovXG4gIHR5cGU6IFN1bW1hcnlWYWx1ZVR5cGU7XG4gIC8qKiBTaXplIHByb3h5OiBzdHJpbmcgbGVuZ3RoLCBhcnJheSBsZW5ndGgsIG9yIG9iamVjdCBrZXkgY291bnQuICovXG4gIHNpemU/OiBudW1iZXI7XG4gIC8qKiBGaXJzdCB7QGxpbmsgU1VNTUFSWV9QUkVWSUVXX0xFTkdUSH0gY2hhcnMg4oCUIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3Mgb25seS4gKi9cbiAgcHJldmlldz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBNYXJrZXIgcmVjb3JkZWQgaW4gYFN0YWdlU25hcHNob3Quc3RhZ2VSZWFkc2AgdW5kZXIgYHJlYWRUcmFja2luZzogJ3N1bW1hcnknYC5cbiAqXG4gKiBIb25lc3QgY29zdCBub3RlOiBgc2l6ZWAgaXMgYSBjaGVhcCBwcm94eSAoc3RyaW5nIGxlbmd0aCAvIGFycmF5IGxlbmd0aCAvXG4gKiBvYmplY3Qga2V5IGNvdW50KSwgTk9UIGEgc2VyaWFsaXplZCBieXRlIGNvdW50IOKAlCBjb21wdXRpbmcgcmVhbCBieXRlIHNpemVcbiAqIHdvdWxkIHJlcXVpcmUgYW4gTyh2YWx1ZSkgc2VyaWFsaXphdGlvbiwgd2hpY2ggaXMgZXhhY3RseSB0aGUgY29zdCB0aGVcbiAqIHN1bW1hcnkgbW9kZSByZW1vdmVzLiBgcHJldmlld2AgaXMgb25seSBwcm9kdWNlZCBmb3IgcHJpbWl0aXZlcyBhbmQgc3RyaW5nc1xuICogKGZpcnN0IHtAbGluayBTVU1NQVJZX1BSRVZJRVdfTEVOR1RIfSBjaGFyYWN0ZXJzKTsgb2JqZWN0cyBhbmQgYXJyYXlzIGNhcnJ5XG4gKiBubyBwcmV2aWV3IGZvciB0aGUgc2FtZSByZWFzb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVhZFN1bW1hcnlNYXJrZXIgZXh0ZW5kcyBWYWx1ZVN1bW1hcnkge1xuICAvKiogRGlzY3JpbWluYW50IOKAlCBsZXRzIHNuYXBzaG90IGNvbnN1bWVycyBkZXRlY3QgbWFya2VyIGVudHJpZXMuICovXG4gIF9fcmVhZFN1bW1hcnk6IHRydWU7XG59XG5cbi8qKlxuICogTWFya2VyIHJlY29yZGVkIGluIGBTdGFnZVNuYXBzaG90LnN0YWdlV3JpdGVzYCAoYW5kIHRoZSBjb21taXQgb2JzZXJ2ZXInc1xuICogbXV0YXRpb25zIHBheWxvYWQpIHVuZGVyIGB3cml0ZVRyYWNraW5nOiAnc3VtbWFyeSdgICgjMTNjLUEpLiBTYW1lIGZpZWxkc1xuICogYW5kIGNvc3QgY29udHJhY3QgYXMge0BsaW5rIFJlYWRTdW1tYXJ5TWFya2VyfTsgZGlzdGluY3QgYnJhbmQgc28gY29uc3VtZXJzXG4gKiBjYW4gdGVsbCB3aGljaCBkaWFsIHByb2R1Y2VkIGFuIGVudHJ5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdyaXRlU3VtbWFyeU1hcmtlciBleHRlbmRzIFZhbHVlU3VtbWFyeSB7XG4gIC8qKiBEaXNjcmltaW5hbnQg4oCUIGxldHMgc25hcHNob3QgY29uc3VtZXJzIGRldGVjdCBtYXJrZXIgZW50cmllcy4gKi9cbiAgX193cml0ZVN1bW1hcnk6IHRydWU7XG59XG5cbi8qKlxuICogVGhlIG9uZSBjbGFzc2lmaWNhdGlvbiBwYXRoIGJvdGggYnJhbmRzIHNoYXJlIOKAlCBldmVyeSBwZXItdHlwZSBydWxlXG4gKiAoaW5jbHVkaW5nIHRoZSBNYXAvU2V0IHJlYWwtZW50cnktY291bnQgaGFuZGxpbmcpIGxpdmVzIGhlcmUgZXhhY3RseSBvbmNlLlxuICovXG5mdW5jdGlvbiBjbGFzc2lmeVZhbHVlKHZhbHVlOiB1bmtub3duKTogVmFsdWVTdW1tYXJ5IHtcbiAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4geyB0eXBlOiAnbnVsbCcgfTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4geyB0eXBlOiAnc3RyaW5nJywgc2l6ZTogdmFsdWUubGVuZ3RoLCBwcmV2aWV3OiB2YWx1ZS5zbGljZSgwLCBTVU1NQVJZX1BSRVZJRVdfTEVOR1RIKSB9O1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIHsgdHlwZTogJ2FycmF5Jywgc2l6ZTogdmFsdWUubGVuZ3RoIH07XG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE1hcCB8fCB2YWx1ZSBpbnN0YW5jZW9mIFNldCkge1xuICAgIC8vIE9iamVjdC5rZXlzKCkgb24gYSBNYXAvU2V0IGlzIGFsd2F5cyBbXSDigJQgcmVwb3J0IHRoZSByZWFsIGVudHJ5IGNvdW50LlxuICAgIHJldHVybiB7IHR5cGU6ICdvYmplY3QnLCBzaXplOiB2YWx1ZS5zaXplIH07XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4geyB0eXBlOiAnb2JqZWN0Jywgc2l6ZTogT2JqZWN0LmtleXModmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLmxlbmd0aCB9O1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHJldHVybiB7IHR5cGU6ICdmdW5jdGlvbicgfTtcbiAgLy8gbnVtYmVyIHwgYm9vbGVhbiB8IGJpZ2ludCB8IHN5bWJvbCDigJQgU3RyaW5nKCkgaXMgTyhyZW5kZXJlZCBsZW5ndGgpXG4gIHJldHVybiB7IHR5cGU6IHR5cGVvZiB2YWx1ZSBhcyBTdW1tYXJ5VmFsdWVUeXBlLCBwcmV2aWV3OiBTdHJpbmcodmFsdWUpLnNsaWNlKDAsIFNVTU1BUllfUFJFVklFV19MRU5HVEgpIH07XG59XG5cbi8qKlxuICogU3VtbWFyaXplIGEgdHJhY2tlZCBSRUFEIGZvciBgcmVhZFRyYWNraW5nOiAnc3VtbWFyeSdgICgjMTQpLiBCeXRlLWlkZW50aWNhbFxuICogb3V0cHV0IHRvIHRoZSBwcmUtZXh0cmFjdGlvbiBgU3RhZ2VDb250ZXh0YC1sb2NhbCBpbXBsZW1lbnRhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1bW1hcml6ZVJlYWRWYWx1ZSh2YWx1ZTogdW5rbm93bik6IFJlYWRTdW1tYXJ5TWFya2VyIHtcbiAgcmV0dXJuIHsgX19yZWFkU3VtbWFyeTogdHJ1ZSwgLi4uY2xhc3NpZnlWYWx1ZSh2YWx1ZSkgfTtcbn1cblxuLyoqXG4gKiBTdW1tYXJpemUgYSB0cmFja2VkIFdSSVRFIGZvciBgd3JpdGVUcmFja2luZzogJ3N1bW1hcnknYCAoIzEzYy1BKS4gU2libGluZ1xuICogb2Yge0BsaW5rIHN1bW1hcml6ZVJlYWRWYWx1ZX0g4oCUIHNhbWUgY2xhc3NpZmljYXRpb24sIGRpc3RpbmN0IGJyYW5kLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3VtbWFyaXplV3JpdGVWYWx1ZSh2YWx1ZTogdW5rbm93bik6IFdyaXRlU3VtbWFyeU1hcmtlciB7XG4gIHJldHVybiB7IF9fd3JpdGVTdW1tYXJ5OiB0cnVlLCAuLi5jbGFzc2lmeVZhbHVlKHZhbHVlKSB9O1xufVxuIl19
61
+ /**
62
+ * Human-readable one-line summary of a value, for NARRATIVE output (as opposed to the
63
+ * retention markers above, which are records). Truncates strings, summarizes arrays and
64
+ * objects by count. Shared by `CombinedNarrativeRecorder` and the decide()/select()
65
+ * evidence capture so both format a value the same way.
66
+ *
67
+ * Moved here from `scope/recorders/summarizeValue.ts` (a leaf living in a mid-layer
68
+ * module forced `decide/` and `engine/narrative/` to import it upward).
69
+ */
70
+ export function summarizeValue(value, maxLen) {
71
+ if (value === undefined)
72
+ return 'undefined';
73
+ if (value === null)
74
+ return 'null';
75
+ if (typeof value === 'string') {
76
+ return value.length <= maxLen ? `"${value}"` : `"${value.slice(0, maxLen - 3)}..."`;
77
+ }
78
+ if (typeof value === 'number' || typeof value === 'boolean')
79
+ return String(value);
80
+ if (Array.isArray(value)) {
81
+ return value.length === 0 ? '[]' : `(${value.length} item${value.length > 1 ? 's' : ''})`;
82
+ }
83
+ if (typeof value === 'object') {
84
+ const keys = Object.keys(value);
85
+ if (keys.length === 0)
86
+ return '{}';
87
+ const preview = keys.slice(0, 4).join(', ');
88
+ const suffix = keys.length > 4 ? `, ... (${keys.length} keys)` : '';
89
+ const result = `{${preview}${suffix}}`;
90
+ return result.length <= maxLen ? result : `{${keys.length} keys}`;
91
+ }
92
+ return String(value);
93
+ }
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VtbWFyaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jYXB0dXJlL3N1bW1hcml6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7OztHQWFHO0FBRUgsK0RBQStEO0FBQy9ELE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztBQUV6Qzs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsc0JBQXNCLENBQUM7QUFrRDFEOzs7R0FHRztBQUNILFNBQVMsYUFBYSxDQUFDLEtBQWM7SUFDbkMsSUFBSSxLQUFLLEtBQUssSUFBSTtRQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDNUMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM5QixPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsc0JBQXNCLENBQUMsRUFBRSxDQUFDO0lBQ2pHLENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN2RSxJQUFJLEtBQUssWUFBWSxHQUFHLElBQUksS0FBSyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ2pELHlFQUF5RTtRQUN6RSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFDRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzlCLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFN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lCBDaGVhcCB2YWx1ZSBzdW1tYXJpemF0aW9uIGZvciBgJ3N1bW1hcnknYCByZXRlbnRpb24uXG4gKlxuICogRXh0cmFjdGVkIGZyb20gYFN0YWdlQ29udGV4dGAgKCMxNCdzIGBzdW1tYXJpemVSZWFkVmFsdWVgKSBpbnRvIGEgc2hhcmVkLFxuICogYnJhbmQtcGFyYW1ldGVyaXplZCBoZWxwZXIgc28gYm90aCBzbmFwc2hvdC10cmFja2luZyBkaWFscyAoIzE0XG4gKiBgcmVhZFRyYWNraW5nYCwgIzEzYy1BIGB3cml0ZVRyYWNraW5nYCkg4oCUIGFuZCBsYXRlciBSRkMtMDAxJ3MgZGVmZXJyZWRcbiAqIG9ic2VydmVyIGNhcHR1cmUgdGllciDigJQgcHJvZHVjZSBpZGVudGljYWwgc3VtbWFyaWVzIGZyb20gT05FIGNvZGUgcGF0aC5cbiAqXG4gKiBEZWxpYmVyYXRlbHkgYXZvaWRzIGV2ZXJ5IE8odmFsdWUpIG9wZXJhdGlvbjogbm8gY2xvbmUsIG5vIHNlcmlhbGl6YXRpb24uXG4gKiBTZWUge0BsaW5rIFJlYWRTdW1tYXJ5TWFya2VyfSBmb3IgdGhlIGhvbmVzdC1jb3N0IGNvbnRyYWN0LlxuICpcbiAqIEFsc28gaG9tZSBvZiB7QGxpbmsgc3VtbWFyaXplVmFsdWV9IOKAlCB0aGUgbmFycmF0aXZlIG9uZS1saW5lciAoYSBzdHJpbmcsIG5vdCBhXG4gKiBtYXJrZXIpIHRoZSBkZWNpZGUoKSBldmlkZW5jZSBjYXB0dXJlIGFuZCB0aGUgY29tYmluZWQgbmFycmF0aXZlIHNoYXJlLlxuICovXG5cbi8qKiBNYXggY2hhcmFjdGVycyBjYXB0dXJlZCBpbiBhIHN1bW1hcnkgbWFya2VyJ3MgYHByZXZpZXdgLiAqL1xuZXhwb3J0IGNvbnN0IFNVTU1BUllfUFJFVklFV19MRU5HVEggPSA4MDtcblxuLyoqXG4gKiBDb21wYXQgYWxpYXMgZm9yIHtAbGluayBTVU1NQVJZX1BSRVZJRVdfTEVOR1RIfSDigJQgdGhlIG5hbWUgc2hpcHBlZCB3aXRoXG4gKiAjMTQsIGtlcHQgc28gZXhpc3RpbmcgaW1wb3J0IHBhdGhzIChgbWVtb3J5L3R5cGVzYCwgdGhlIG1lbW9yeSBiYXJyZWwpXG4gKiBzdGF5IHZhbGlkLiBTYW1lIGNvbnN0YW50OyByZWFkcyBhbmQgd3JpdGVzIHNoYXJlIG9uZSBwcmV2aWV3IGNhcC5cbiAqL1xuZXhwb3J0IGNvbnN0IFJFQURfUFJFVklFV19MRU5HVEggPSBTVU1NQVJZX1BSRVZJRVdfTEVOR1RIO1xuXG4vKiogYHR5cGVvZmAgcmVzdWx0LCByZWZpbmVkIHRvICdhcnJheScgLyAnbnVsbCcgZm9yIG9iamVjdHMuICovXG5leHBvcnQgdHlwZSBTdW1tYXJ5VmFsdWVUeXBlID1cbiAgfCAnc3RyaW5nJ1xuICB8ICdudW1iZXInXG4gIHwgJ2Jvb2xlYW4nXG4gIHwgJ2JpZ2ludCdcbiAgfCAnc3ltYm9sJ1xuICB8ICdmdW5jdGlvbidcbiAgfCAnb2JqZWN0J1xuICB8ICdhcnJheSdcbiAgfCAnbnVsbCc7XG5cbi8qKiBCcmFuZC1mcmVlIHN1bW1hcnkgZmllbGRzIHNoYXJlZCBieSBib3RoIG1hcmtlciBzaGFwZXMuICovXG5pbnRlcmZhY2UgVmFsdWVTdW1tYXJ5IHtcbiAgLyoqIGB0eXBlb2ZgIHJlc3VsdCwgcmVmaW5lZCB0byAnYXJyYXknIC8gJ251bGwnIGZvciBvYmplY3RzLiAqL1xuICB0eXBlOiBTdW1tYXJ5VmFsdWVUeXBlO1xuICAvKiogU2l6ZSBwcm94eTogc3RyaW5nIGxlbmd0aCwgYXJyYXkgbGVuZ3RoLCBvciBvYmplY3Qga2V5IGNvdW50LiAqL1xuICBzaXplPzogbnVtYmVyO1xuICAvKiogRmlyc3Qge0BsaW5rIFNVTU1BUllfUFJFVklFV19MRU5HVEh9IGNoYXJzIOKAlCBwcmltaXRpdmVzIGFuZCBzdHJpbmdzIG9ubHkuICovXG4gIHByZXZpZXc/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogTWFya2VyIHJlY29yZGVkIGluIGBTdGFnZVNuYXBzaG90LnN0YWdlUmVhZHNgIHVuZGVyIGByZWFkVHJhY2tpbmc6ICdzdW1tYXJ5J2AuXG4gKlxuICogSG9uZXN0IGNvc3Qgbm90ZTogYHNpemVgIGlzIGEgY2hlYXAgcHJveHkgKHN0cmluZyBsZW5ndGggLyBhcnJheSBsZW5ndGggL1xuICogb2JqZWN0IGtleSBjb3VudCksIE5PVCBhIHNlcmlhbGl6ZWQgYnl0ZSBjb3VudCDigJQgY29tcHV0aW5nIHJlYWwgYnl0ZSBzaXplXG4gKiB3b3VsZCByZXF1aXJlIGFuIE8odmFsdWUpIHNlcmlhbGl6YXRpb24sIHdoaWNoIGlzIGV4YWN0bHkgdGhlIGNvc3QgdGhlXG4gKiBzdW1tYXJ5IG1vZGUgcmVtb3Zlcy4gYHByZXZpZXdgIGlzIG9ubHkgcHJvZHVjZWQgZm9yIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3NcbiAqIChmaXJzdCB7QGxpbmsgU1VNTUFSWV9QUkVWSUVXX0xFTkdUSH0gY2hhcmFjdGVycyk7IG9iamVjdHMgYW5kIGFycmF5cyBjYXJyeVxuICogbm8gcHJldmlldyBmb3IgdGhlIHNhbWUgcmVhc29uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlYWRTdW1tYXJ5TWFya2VyIGV4dGVuZHMgVmFsdWVTdW1tYXJ5IHtcbiAgLyoqIERpc2NyaW1pbmFudCDigJQgbGV0cyBzbmFwc2hvdCBjb25zdW1lcnMgZGV0ZWN0IG1hcmtlciBlbnRyaWVzLiAqL1xuICBfX3JlYWRTdW1tYXJ5OiB0cnVlO1xufVxuXG4vKipcbiAqIE1hcmtlciByZWNvcmRlZCBpbiBgU3RhZ2VTbmFwc2hvdC5zdGFnZVdyaXRlc2AgKGFuZCB0aGUgY29tbWl0IG9ic2VydmVyJ3NcbiAqIG11dGF0aW9ucyBwYXlsb2FkKSB1bmRlciBgd3JpdGVUcmFja2luZzogJ3N1bW1hcnknYCAoIzEzYy1BKS4gU2FtZSBmaWVsZHNcbiAqIGFuZCBjb3N0IGNvbnRyYWN0IGFzIHtAbGluayBSZWFkU3VtbWFyeU1hcmtlcn07IGRpc3RpbmN0IGJyYW5kIHNvIGNvbnN1bWVyc1xuICogY2FuIHRlbGwgd2hpY2ggZGlhbCBwcm9kdWNlZCBhbiBlbnRyeS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXcml0ZVN1bW1hcnlNYXJrZXIgZXh0ZW5kcyBWYWx1ZVN1bW1hcnkge1xuICAvKiogRGlzY3JpbWluYW50IOKAlCBsZXRzIHNuYXBzaG90IGNvbnN1bWVycyBkZXRlY3QgbWFya2VyIGVudHJpZXMuICovXG4gIF9fd3JpdGVTdW1tYXJ5OiB0cnVlO1xufVxuXG4vKipcbiAqIFRoZSBvbmUgY2xhc3NpZmljYXRpb24gcGF0aCBib3RoIGJyYW5kcyBzaGFyZSDigJQgZXZlcnkgcGVyLXR5cGUgcnVsZVxuICogKGluY2x1ZGluZyB0aGUgTWFwL1NldCByZWFsLWVudHJ5LWNvdW50IGhhbmRsaW5nKSBsaXZlcyBoZXJlIGV4YWN0bHkgb25jZS5cbiAqL1xuZnVuY3Rpb24gY2xhc3NpZnlWYWx1ZSh2YWx1ZTogdW5rbm93bik6IFZhbHVlU3VtbWFyeSB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuIHsgdHlwZTogJ251bGwnIH07XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHsgdHlwZTogJ3N0cmluZycsIHNpemU6IHZhbHVlLmxlbmd0aCwgcHJldmlldzogdmFsdWUuc2xpY2UoMCwgU1VNTUFSWV9QUkVWSUVXX0xFTkdUSCkgfTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiB7IHR5cGU6ICdhcnJheScsIHNpemU6IHZhbHVlLmxlbmd0aCB9O1xuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBNYXAgfHwgdmFsdWUgaW5zdGFuY2VvZiBTZXQpIHtcbiAgICAvLyBPYmplY3Qua2V5cygpIG9uIGEgTWFwL1NldCBpcyBhbHdheXMgW10g4oCUIHJlcG9ydCB0aGUgcmVhbCBlbnRyeSBjb3VudC5cbiAgICByZXR1cm4geyB0eXBlOiAnb2JqZWN0Jywgc2l6ZTogdmFsdWUuc2l6ZSB9O1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHsgdHlwZTogJ29iamVjdCcsIHNpemU6IE9iamVjdC5rZXlzKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5sZW5ndGggfTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSByZXR1cm4geyB0eXBlOiAnZnVuY3Rpb24nIH07XG4gIC8vIG51bWJlciB8IGJvb2xlYW4gfCBiaWdpbnQgfCBzeW1ib2wg4oCUIFN0cmluZygpIGlzIE8ocmVuZGVyZWQgbGVuZ3RoKVxuICByZXR1cm4geyB0eXBlOiB0eXBlb2YgdmFsdWUgYXMgU3VtbWFyeVZhbHVlVHlwZSwgcHJldmlldzogU3RyaW5nKHZhbHVlKS5zbGljZSgwLCBTVU1NQVJZX1BSRVZJRVdfTEVOR1RIKSB9O1xufVxuXG4vKipcbiAqIFN1bW1hcml6ZSBhIHRyYWNrZWQgUkVBRCBmb3IgYHJlYWRUcmFja2luZzogJ3N1bW1hcnknYCAoIzE0KS4gQnl0ZS1pZGVudGljYWxcbiAqIG91dHB1dCB0byB0aGUgcHJlLWV4dHJhY3Rpb24gYFN0YWdlQ29udGV4dGAtbG9jYWwgaW1wbGVtZW50YXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdW1tYXJpemVSZWFkVmFsdWUodmFsdWU6IHVua25vd24pOiBSZWFkU3VtbWFyeU1hcmtlciB7XG4gIHJldHVybiB7IF9fcmVhZFN1bW1hcnk6IHRydWUsIC4uLmNsYXNzaWZ5VmFsdWUodmFsdWUpIH07XG59XG5cbi8qKlxuICogU3VtbWFyaXplIGEgdHJhY2tlZCBXUklURSBmb3IgYHdyaXRlVHJhY2tpbmc6ICdzdW1tYXJ5J2AgKCMxM2MtQSkuIFNpYmxpbmdcbiAqIG9mIHtAbGluayBzdW1tYXJpemVSZWFkVmFsdWV9IOKAlCBzYW1lIGNsYXNzaWZpY2F0aW9uLCBkaXN0aW5jdCBicmFuZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1bW1hcml6ZVdyaXRlVmFsdWUodmFsdWU6IHVua25vd24pOiBXcml0ZVN1bW1hcnlNYXJrZXIge1xuICByZXR1cm4geyBfX3dyaXRlU3VtbWFyeTogdHJ1ZSwgLi4uY2xhc3NpZnlWYWx1ZSh2YWx1ZSkgfTtcbn1cblxuLyoqXG4gKiBIdW1hbi1yZWFkYWJsZSBvbmUtbGluZSBzdW1tYXJ5IG9mIGEgdmFsdWUsIGZvciBOQVJSQVRJVkUgb3V0cHV0IChhcyBvcHBvc2VkIHRvIHRoZVxuICogcmV0ZW50aW9uIG1hcmtlcnMgYWJvdmUsIHdoaWNoIGFyZSByZWNvcmRzKS4gVHJ1bmNhdGVzIHN0cmluZ3MsIHN1bW1hcml6ZXMgYXJyYXlzIGFuZFxuICogb2JqZWN0cyBieSBjb3VudC4gU2hhcmVkIGJ5IGBDb21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyYCBhbmQgdGhlIGRlY2lkZSgpL3NlbGVjdCgpXG4gKiBldmlkZW5jZSBjYXB0dXJlIHNvIGJvdGggZm9ybWF0IGEgdmFsdWUgdGhlIHNhbWUgd2F5LlxuICpcbiAqIE1vdmVkIGhlcmUgZnJvbSBgc2NvcGUvcmVjb3JkZXJzL3N1bW1hcml6ZVZhbHVlLnRzYCAoYSBsZWFmIGxpdmluZyBpbiBhIG1pZC1sYXllclxuICogbW9kdWxlIGZvcmNlZCBgZGVjaWRlL2AgYW5kIGBlbmdpbmUvbmFycmF0aXZlL2AgdG8gaW1wb3J0IGl0IHVwd2FyZCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdW1tYXJpemVWYWx1ZSh2YWx1ZTogdW5rbm93biwgbWF4TGVuOiBudW1iZXIpOiBzdHJpbmcge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuICd1bmRlZmluZWQnO1xuICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiAnbnVsbCc7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlLmxlbmd0aCA8PSBtYXhMZW4gPyBgXCIke3ZhbHVlfVwiYCA6IGBcIiR7dmFsdWUuc2xpY2UoMCwgbWF4TGVuIC0gMyl9Li4uXCJgO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLmxlbmd0aCA9PT0gMCA/ICdbXScgOiBgKCR7dmFsdWUubGVuZ3RofSBpdGVtJHt2YWx1ZS5sZW5ndGggPiAxID8gJ3MnIDogJyd9KWA7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuICd7fSc7XG4gICAgY29uc3QgcHJldmlldyA9IGtleXMuc2xpY2UoMCwgNCkuam9pbignLCAnKTtcbiAgICBjb25zdCBzdWZmaXggPSBrZXlzLmxlbmd0aCA+IDQgPyBgLCAuLi4gKCR7a2V5cy5sZW5ndGh9IGtleXMpYCA6ICcnO1xuICAgIGNvbnN0IHJlc3VsdCA9IGB7JHtwcmV2aWV3fSR7c3VmZml4fX1gO1xuICAgIHJldHVybiByZXN1bHQubGVuZ3RoIDw9IG1heExlbiA/IHJlc3VsdCA6IGB7JHtrZXlzLmxlbmd0aH0ga2V5c31gO1xuICB9XG4gIHJldHVybiBTdHJpbmcodmFsdWUpO1xufVxuIl19