footprintjs 9.46.0 → 9.46.1

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 (56) hide show
  1. package/CLAUDE.md +6 -6
  2. package/dist/esm/lib/decide/evaluator.js +2 -2
  3. package/dist/esm/lib/decide/evidence.js +2 -2
  4. package/dist/esm/lib/engine/handlers/servedPause.js +2 -2
  5. package/dist/esm/lib/memory/RecordFrame.d.ts +41 -6
  6. package/dist/esm/lib/memory/RecordFrame.js +36 -5
  7. package/dist/esm/lib/memory/SharedMemory.d.ts +1 -1
  8. package/dist/esm/lib/memory/SharedMemory.js +2 -2
  9. package/dist/esm/lib/memory/StageContext.d.ts +21 -14
  10. package/dist/esm/lib/memory/StageContext.js +36 -74
  11. package/dist/esm/lib/memory/borrowedMutation.d.ts +1 -1
  12. package/dist/esm/lib/memory/borrowedMutation.js +2 -2
  13. package/dist/esm/lib/memory/honesty.d.ts +4 -3
  14. package/dist/esm/lib/memory/honesty.js +5 -4
  15. package/dist/esm/lib/memory/index.d.ts +4 -2
  16. package/dist/esm/lib/memory/index.js +6 -4
  17. package/dist/esm/lib/memory/placeholders.d.ts +23 -28
  18. package/dist/esm/lib/memory/placeholders.js +24 -29
  19. package/dist/esm/lib/memory/recordCommit.d.ts +5 -3
  20. package/dist/esm/lib/memory/recordCommit.js +7 -5
  21. package/dist/esm/lib/memory/redaction.d.ts +78 -40
  22. package/dist/esm/lib/memory/redaction.js +130 -64
  23. package/dist/esm/lib/memory/runAddress.d.ts +20 -0
  24. package/dist/esm/lib/memory/runAddress.js +25 -0
  25. package/dist/esm/lib/memory/scrub.d.ts +51 -0
  26. package/dist/esm/lib/memory/scrub.js +72 -0
  27. package/dist/esm/lib/memory/utils.d.ts +3 -3
  28. package/dist/esm/lib/memory/utils.js +4 -4
  29. package/dist/lib/decide/evaluator.js +3 -3
  30. package/dist/lib/decide/evidence.js +3 -3
  31. package/dist/lib/engine/handlers/servedPause.js +3 -3
  32. package/dist/lib/memory/RecordFrame.js +36 -5
  33. package/dist/lib/memory/SharedMemory.js +2 -2
  34. package/dist/lib/memory/StageContext.js +42 -80
  35. package/dist/lib/memory/borrowedMutation.js +2 -2
  36. package/dist/lib/memory/honesty.js +5 -4
  37. package/dist/lib/memory/index.js +6 -4
  38. package/dist/lib/memory/placeholders.js +25 -30
  39. package/dist/lib/memory/recordCommit.js +9 -7
  40. package/dist/lib/memory/redaction.js +144 -75
  41. package/dist/lib/memory/runAddress.js +29 -0
  42. package/dist/lib/memory/scrub.js +77 -0
  43. package/dist/lib/memory/utils.js +4 -4
  44. package/dist/types/lib/memory/RecordFrame.d.ts +41 -6
  45. package/dist/types/lib/memory/SharedMemory.d.ts +1 -1
  46. package/dist/types/lib/memory/StageContext.d.ts +21 -14
  47. package/dist/types/lib/memory/borrowedMutation.d.ts +1 -1
  48. package/dist/types/lib/memory/honesty.d.ts +4 -3
  49. package/dist/types/lib/memory/index.d.ts +4 -2
  50. package/dist/types/lib/memory/placeholders.d.ts +23 -28
  51. package/dist/types/lib/memory/recordCommit.d.ts +5 -3
  52. package/dist/types/lib/memory/redaction.d.ts +78 -40
  53. package/dist/types/lib/memory/runAddress.d.ts +20 -0
  54. package/dist/types/lib/memory/scrub.d.ts +51 -0
  55. package/dist/types/lib/memory/utils.d.ts +3 -3
  56. package/package.json +1 -1
@@ -2,7 +2,7 @@
2
2
  * memory/borrowedMutation — the honest boundary's two texts: the dev-mode
3
3
  * REPORT for a write the engine cannot see ({@link borrowedMutationMessage})
4
4
  * and the REFUSAL for a write from a handle held past its stage
5
- * ({@link deadFrameMessage}, thrown by `StageContext.stageWrite`).
5
+ * ({@link deadFrameMessage}, thrown by `ScopeFacade · assertLive`).
6
6
  *
7
7
  * ── The honest boundary ──────────────────────────────────────────────────
8
8
  * The typed scope intercepts every write it can reach: a property at any
@@ -127,4 +127,4 @@ export function borrowedMutationMessage(stageName, key, path) {
127
127
  'This usually comes from mutating an element reached by `find`/`filter`/`for…of`/`forEach`, ' +
128
128
  'which the scope proxy cannot intercept.');
129
129
  }
130
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9ycm93ZWRNdXRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbWVtb3J5L2JvcnJvd2VkTXV0YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFdkMsOEVBQThFO0FBQzlFLFNBQVMsV0FBVyxDQUFDLE1BQWMsRUFBRSxPQUFlLEVBQUUsU0FBa0I7SUFDdEUsSUFBSSxTQUFTO1FBQUUsT0FBTyxHQUFHLE1BQU0sSUFBSSxPQUFPLEdBQUcsQ0FBQztJQUM5QyxPQUFPLE1BQU0sS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7QUFDMUQsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsTUFBZSxFQUFFLEtBQWMsRUFBRSxNQUFNLEdBQUcsRUFBRSxFQUFFLEtBQUssR0FBRyxDQUFDO0lBQ3hGLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDekQsSUFBSSxLQUFLLElBQUksRUFBRTtRQUFFLE9BQU8sTUFBTSxDQUFDLENBQUMsMkNBQTJDO0lBQzNFLElBQUksTUFBTSxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxNQUFNLENBQUM7SUFFaEgsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1QyxJQUFJLGFBQWEsS0FBSyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sTUFBTSxDQUFDO0lBRTFELElBQUksYUFBYSxFQUFFLENBQUM7UUFDbEIsTUFBTSxDQUFDLEdBQUcsTUFBbUIsQ0FBQztRQUM5QixNQUFNLENBQUMsR0FBRyxLQUFrQixDQUFDO1FBQzdCLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsTUFBTTtZQUFFLE9BQU8sTUFBTSxDQUFDO1FBQ3pDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDbEMsTUFBTSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDL0YsSUFBSSxNQUFNLEtBQUssU0FBUztnQkFBRSxPQUFPLE1BQU0sQ0FBQztRQUMxQyxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxHQUFHLE1BQWlDLENBQUM7SUFDNUMsTUFBTSxDQUFDLEdBQUcsS0FBZ0MsQ0FBQztJQUMzQyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdELEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDdkIsTUFBTSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxXQUFXLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDOUYsSUFBSSxNQUFNLEtBQUssU0FBUztZQUFFLE9BQU8sTUFBTSxDQUFDO0lBQzFDLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxTQUFpQixFQUFFLGNBQWtDLEVBQUUsR0FBVztJQUNqRyxNQUFNLElBQUksR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxNQUFNLGNBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsR0FBRyxDQUFDO0lBQ3RGLE9BQU8sQ0FDTCxxQkFBcUIsSUFBSSxnRUFBZ0UsR0FBRyxLQUFLO1FBQ2pHLHNHQUFzRztRQUN0RyxpR0FBaUc7UUFDakcsMEZBQTBGO1FBQzFGLHVFQUF1RSxDQUN4RSxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsd0JBQXdCLENBQUMsU0FBaUIsRUFBRSxHQUFXLEVBQUUsSUFBWTtJQUNuRixNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDekUsT0FBTyxDQUNMLHNCQUFzQixTQUFTLGVBQWUsS0FBSyxvREFBb0Q7UUFDdkcsb0dBQW9HO1FBQ3BHLHdHQUF3RztRQUN4Ryw4RkFBOEY7UUFDOUYsdUJBQXVCLEdBQUcsd0VBQXdFO1FBQ2xHLDRDQUE0QyxDQUM3QyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQUMsU0FBaUIsRUFBRSxHQUFXLEVBQUUsSUFBWTtJQUNsRixNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDekUsT0FBTyxDQUNMLHNCQUFzQixTQUFTLGVBQWUsS0FBSyx3Q0FBd0M7UUFDM0Ysb0dBQW9HO1FBQ3BHLG1HQUFtRztRQUNuRyw0REFBNEQ7UUFDNUQsMENBQTBDO1FBQzFDLEtBQUs7UUFDTCx5REFBeUQ7UUFDekQsd0RBQXdELEdBQUcsY0FBYztRQUN6RSw2RkFBNkY7UUFDN0YseUNBQXlDLENBQzFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBtZW1vcnkvYm9ycm93ZWRNdXRhdGlvbiDigJQgdGhlIGhvbmVzdCBib3VuZGFyeSdzIHR3byB0ZXh0czogdGhlIGRldi1tb2RlXG4gKiBSRVBPUlQgZm9yIGEgd3JpdGUgdGhlIGVuZ2luZSBjYW5ub3Qgc2VlICh7QGxpbmsgYm9ycm93ZWRNdXRhdGlvbk1lc3NhZ2V9KVxuICogYW5kIHRoZSBSRUZVU0FMIGZvciBhIHdyaXRlIGZyb20gYSBoYW5kbGUgaGVsZCBwYXN0IGl0cyBzdGFnZVxuICogKHtAbGluayBkZWFkRnJhbWVNZXNzYWdlfSwgdGhyb3duIGJ5IGBTdGFnZUNvbnRleHQuc3RhZ2VXcml0ZWApLlxuICpcbiAqIOKUgOKUgCBUaGUgaG9uZXN0IGJvdW5kYXJ5IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICogVGhlIHR5cGVkIHNjb3BlIGludGVyY2VwdHMgZXZlcnkgd3JpdGUgaXQgY2FuIHJlYWNoOiBhIHByb3BlcnR5IGF0IGFueVxuICogZGVwdGgsIGFuIGluZGV4ZWQgZWxlbWVudCwgYW4gYXJyYXkgbWV0aG9kLiBXaGF0IGl0IGNhbm5vdCByZWFjaCBpcyBhblxuICogZWxlbWVudCBoYW5kZWQgb3V0IGJ5IGEgUkVBRCBNRVRIT0Qg4oCUIGBmaW5kYCwgYGZpbHRlcmAsIGBmb3LigKZvZmAsIGBmb3JFYWNoYCxcbiAqIGRlc3RydWN0dXJpbmcg4oCUIGJlY2F1c2Ugd3JhcHBpbmcgdGhvc2Ugd291bGQgbWVhbiByZXR1cm5pbmcgcHJveGllcyBvdXQgb2ZcbiAqIGV2ZXJ5IHJlYWQgKGBtYXBgIHdvdWxkIGJ1aWxkIGFuIGFycmF5IG9mIHByb3hpZXMsIGBmaWx0ZXJgIHdvdWxkIGNvbXBhcmVcbiAqIHByb3hpZXMsIGEgcmV0dXJuZWQgdmFsdWUgd291bGQgZXNjYXBlIHRoZSBzdGFnZSBzdGlsbCBib3VuZCB0byBpdCkuIFRoYXQgaXNcbiAqIGEgY29zdCB0aGUgbGlicmFyeSBzaG91bGQgbm90IHBheSwgYW5kIGEgc2VtYW50aWMgY2hhbmdlIGl0IHNob3VsZCBub3QgbWFrZS5cbiAqXG4gKiBTbyB0aGUgYW5zd2VyIGZvciB0aGF0IGZhbWlseSBpcyBub3QgaW50ZXJjZXB0aW9uIOKAlCBpdCBpcyBhIFJFUE9SVC4gQSByZWFkXG4gKiBpcyBCT1JST1dFRDsgbXV0YXRpbmcgaXQgaW4gcGxhY2UgaXMgb3V0IG9mIGNvbnRyYWN0LiBUaGlzIG1vZHVsZSBkZXRlY3RzIHRoZVxuICogdmlvbGF0aW9uIGFmdGVyIHRoZSBmYWN0IGFuZCBuYW1lcyBpdCAoYSBkZXYtbW9kZSB3YXJuaW5nIGF0IGNvbW1pdCDigJQgdGhlXG4gKiB3cml0ZSBhbHJlYWR5IGhhcHBlbmVkLCBzbyBpdCBjYW5ub3QgYmUgcmVmdXNlZCksIGluc3RlYWQgb2YgbGV0dGluZyB0aGUgcnVuXG4gKiBlbmQgd2l0aCBhIGNvbW1pdCBsb2cgdGhhdCBkaXNhZ3JlZXMgd2l0aCBmaW5hbCBzdGF0ZSBhbmQgbm90aGluZyBzYXlpbmcgc28uXG4gKlxuICog4pSA4pSAIEhvdyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAqIGByZWFkVHJhY2tpbmc6ICdmdWxsJ2AgKHRoZSBkZWZhdWx0KSBhbHJlYWR5IHJldGFpbnMgYSBDTE9ORSBvZiBldmVyeSB2YWx1ZVxuICogYSBzdGFnZSByZWFkLiBBdCBjb21taXQsIGEga2V5IHRoZSBzdGFnZSByZWFkIGJ1dCBuZXZlciBXUk9URSBtdXN0IHN0aWxsXG4gKiBob2xkIHdoYXQgaXQgaGVsZCBhdCByZWFkIHRpbWUg4oCUIGNvbW1pdHRlZCBzdGF0ZSBpcyBpbW11dGFibGUtYWZ0ZXItc3dhcCBhbmRcbiAqIHRoZSBidWZmZXIncyB3b3JraW5nIGNvcHkgaXMgcHJpdmF0ZS4gSWYgaXQgZGlmZmVycywgdGhlIG9ubHkgdGhpbmcgdGhhdCBjYW5cbiAqIGhhdmUgY2hhbmdlZCBpdCBpcyB0aGUgc3RhZ2UgaXRzZWxmLCBpbiBwbGFjZS5cbiAqXG4gKiBEZXYtbW9kZSBvbmx5IChgZW5hYmxlRGV2TW9kZSgpYCksIHNvIHRoZSBkZWZhdWx0IHJ1biBwYXlzIG5vdGhpbmcgYW5kIGl0c1xuICogYnl0ZXMgYXJlIHVuY2hhbmdlZC5cbiAqL1xuXG5pbXBvcnQgeyBkZWVwRXF1YWwgfSBmcm9tICcuL3V0aWxzLmpzJztcblxuLyoqIFJlbmRlciBvbmUgcGF0aCBzZWdtZW50IGZvciBhIGh1bWFuOiBgbGluZXNbMF0ucXR5YCwgbm90IGBsaW5lcy4wLnF0eWAuICovXG5mdW5jdGlvbiBqb2luU2VnbWVudChwcmVmaXg6IHN0cmluZywgc2VnbWVudDogc3RyaW5nLCBpbnRvQXJyYXk6IGJvb2xlYW4pOiBzdHJpbmcge1xuICBpZiAoaW50b0FycmF5KSByZXR1cm4gYCR7cHJlZml4fVske3NlZ21lbnR9XWA7XG4gIHJldHVybiBwcmVmaXggPT09ICcnID8gc2VnbWVudCA6IGAke3ByZWZpeH0uJHtzZWdtZW50fWA7XG59XG5cbi8qKlxuICogVGhlIGZpcnN0IHBhdGggYXQgd2hpY2ggYGFmdGVyYCBzdG9wcyBhZ3JlZWluZyB3aXRoIGBiZWZvcmVgLCBvciBgdW5kZWZpbmVkYFxuICogd2hlbiB0aGV5IGFyZSBzdHJ1Y3R1cmFsbHkgZXF1YWwuIERlcHRoLWZpcnN0LCBvd24ga2V5cyBvbmx5IOKAlCB0aGUgc2FtZVxuICogc2hhcGVzIGBkZWVwRXF1YWxgIGhhbmRsZXMsIHNpbmNlIGNvbW1pdHRlZCBzdGF0ZSBpcyBKU09OLXNoYXBlZC5cbiAqXG4gKiBDeWNsZS1zYWZlIGJ5IGNvbnN0cnVjdGlvbjogaXQgb25seSByZWN1cnNlcyBpbnRvIHBhaXJzIHRoYXQgYXJlIG5vdCBhbHJlYWR5XG4gKiBgZGVlcEVxdWFsYCwgYW5kIHN0b3BzIGF0IHRoZSBmaXJzdCBkaXNhZ3JlZW1lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaXJzdERpZmZlcmluZ1BhdGgoYmVmb3JlOiB1bmtub3duLCBhZnRlcjogdW5rbm93biwgcHJlZml4ID0gJycsIGRlcHRoID0gMCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChkZWVwRXF1YWwoYmVmb3JlLCBhZnRlciwgJ2NvcGllcycpKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAoZGVwdGggPj0gMjQpIHJldHVybiBwcmVmaXg7IC8vIHBhdGhvbG9naWNhbCBuZXN0aW5nIOKAlCBuYW1lIHdoYXQgd2UgaGF2ZVxuICBpZiAoYmVmb3JlID09PSBudWxsIHx8IGFmdGVyID09PSBudWxsIHx8IHR5cGVvZiBiZWZvcmUgIT09ICdvYmplY3QnIHx8IHR5cGVvZiBhZnRlciAhPT0gJ29iamVjdCcpIHJldHVybiBwcmVmaXg7XG5cbiAgY29uc3QgYmVmb3JlSXNBcnJheSA9IEFycmF5LmlzQXJyYXkoYmVmb3JlKTtcbiAgaWYgKGJlZm9yZUlzQXJyYXkgIT09IEFycmF5LmlzQXJyYXkoYWZ0ZXIpKSByZXR1cm4gcHJlZml4O1xuXG4gIGlmIChiZWZvcmVJc0FycmF5KSB7XG4gICAgY29uc3QgYSA9IGJlZm9yZSBhcyB1bmtub3duW107XG4gICAgY29uc3QgYiA9IGFmdGVyIGFzIHVua25vd25bXTtcbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gcHJlZml4O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZGVlcGVyID0gZmlyc3REaWZmZXJpbmdQYXRoKGFbaV0sIGJbaV0sIGpvaW5TZWdtZW50KHByZWZpeCwgU3RyaW5nKGkpLCB0cnVlKSwgZGVwdGggKyAxKTtcbiAgICAgIGlmIChkZWVwZXIgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGRlZXBlcjtcbiAgICB9XG4gICAgcmV0dXJuIHByZWZpeDtcbiAgfVxuXG4gIGNvbnN0IGEgPSBiZWZvcmUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IGIgPSBhZnRlciBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3Qga2V5cyA9IG5ldyBTZXQoWy4uLk9iamVjdC5rZXlzKGEpLCAuLi5PYmplY3Qua2V5cyhiKV0pO1xuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgY29uc3QgZGVlcGVyID0gZmlyc3REaWZmZXJpbmdQYXRoKGFba2V5XSwgYltrZXldLCBqb2luU2VnbWVudChwcmVmaXgsIGtleSwgZmFsc2UpLCBkZXB0aCArIDEpO1xuICAgIGlmIChkZWVwZXIgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGRlZXBlcjtcbiAgfVxuICByZXR1cm4gcHJlZml4O1xufVxuXG4vKipcbiAqIFRoZSByZWZ1c2FsIHRleHQgZm9yIGEgd3JpdGUgdGhhdCByZWFjaGVkIGEgZnJhbWUgQUZURVIgaXRzIHN0YWdlIGNvbW1pdHRlZC5cbiAqIEEgc2NvcGUsIGFuZCBldmVyeSBwcm94eSByZWFkIG91dCBvZiBpdCwgaXMgYm91bmQgdG8gdGhlIHN0YWdlIGl0IHdhcyBoYW5kZWRcbiAqIHRvOyBrZXB0IHBhc3QgdGhhdCBzdGFnZSdzIGNvbW1pdCBpdCBoYXMgbm8gZnJhbWUgdG8gbGFuZCBpbiwgc28gdGhlIHdyaXRlXG4gKiB3b3VsZCBzaXQgaW4gYSBidWZmZXIgbm90aGluZyBldmVyIGNvbW1pdHMg4oCUIG5vIHRyYWNlIHJvdywgc3RhdGUgdW5jaGFuZ2VkLlxuICogVGhlIHRocm93IHN1cmZhY2VzIGluIHRoZSBzdGFnZSB0aGF0IG1hZGUgdGhlIHdyaXRlICh0aGUgZW5naW5lJ3MgZXJyb3JcbiAqIHBhdGggbmFtZXMgaXQpOyB0aGlzIHRleHQgbmFtZXMgdGhlIHN0YWdlIHRoZSBoYW5kbGUgY2FtZSBmcm9tLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVhZEZyYW1lTWVzc2FnZShzdGFnZU5hbWU6IHN0cmluZywgcnVudGltZVN0YWdlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCwga2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBmcm9tID0gcnVudGltZVN0YWdlSWQgPyBgXCIke3N0YWdlTmFtZX1cIiAoJHtydW50aW1lU3RhZ2VJZH0pYCA6IGBcIiR7c3RhZ2VOYW1lfVwiYDtcbiAgcmV0dXJuIChcbiAgICBgW2Zvb3RwcmludF0gU3RhZ2UgJHtmcm9tfSBoYXMgYWxyZWFkeSBjb21taXR0ZWQg4oCUIGl0cyBzY29wZSBpcyBkZWFkLCBhbmQgYSB3cml0ZSB0byBcXGAke2tleX1cXGAgYCArXG4gICAgJ2p1c3QgcmVhY2hlZCBpdCBmcm9tIGEgbGF0ZXIgc3RhZ2UgKHRoaXMgZXJyb3IgaXMgcmFpc2VkIGluIHRoYXQgc3RhZ2UpLiBBIHNjb3BlLCBhbmQgYW55dGhpbmcgcmVhZCAnICtcbiAgICAnb3V0IG9mIGl0IChgc2NvcGUua2AsIGBzY29wZS5rLmFyclswXWApLCBiZWxvbmdzIHRvIHRoZSBzdGFnZSBpdCB3YXMgaGFuZGVkIHRvOyBoZWxkIHBhc3QgdGhhdCAnICtcbiAgICBcInN0YWdlJ3MgY29tbWl0IGl0IGhhcyBubyBmcmFtZSB0byBsYW5kIGluLCBzbyB0aGUgd3JpdGUgd291bGQgdmFuaXNoIHdpdGggbm8gdHJhY2Ugcm93LiBcIiArXG4gICAgXCJSZWFkIHRoZSBrZXkgYWdhaW4gdGhyb3VnaCB0aGUgQ1VSUkVOVCBzdGFnZSdzIHNjb3BlIGFuZCB3cml0ZSB0aGVyZS5cIlxuICApO1xufVxuXG4vKipcbiAqIFRoZSB3YXJuaW5nIHRleHQgZm9yIGEga2V5IHRoZSBzdGFnZSBXUk9URSBhZnRlciBjaGFuZ2luZywgaW4gcGxhY2UsIHRoZVxuICogY29tbWl0dGVkIHZhbHVlIGl0IGhhZCByZWFkIGJlZm9yZSBpdHMgZmlyc3Qgd3JpdGUgKGNvcHktb24td3JpdGUsIDkuMjkuMCkuXG4gKiBUaGUgY29tbWl0IGNvbXBhcmVzIHdoYXQgdGhlIHN0YWdlIHdyb3RlIGFnYWluc3QgY29tbWl0dGVkIHN0YXRlIOKAlCB0aGVcbiAqIG9iamVjdCB0aGUgaW4tcGxhY2UgY2hhbmdlIGFsc28gbW92ZWQg4oCUIHNvIGl0IHJlY29yZHMgbm8gY2hhbmdlOiBsaXZlIHN0YXRlXG4gKiBrZWVwcyB0aGUgZWRpdCwgdGhlIGxvZyBhbmQgZXZlcnkgZm9sZCBkbyBub3QuICg5LjI4LjAgcmVjb3JkZWQgaXQgd2hlbiB0aGVcbiAqIGVkaXQgY2FtZSBhZnRlciB0aGUgZmlyc3Qgd3JpdGUsIGJ5IGFjY2lkZW50IG9mIGEgd2hvbGUtc3RhdGUgY2xvbmUuKVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tbWl0dGVkTXV0YXRpb25NZXNzYWdlKHN0YWdlTmFtZTogc3RyaW5nLCBrZXk6IHN0cmluZywgcGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgd2hlcmUgPSBwYXRoID09PSAnJyA/IGtleSA6IGAke2tleX0uJHtwYXRofWAucmVwbGFjZSgvXFwuXFxbL2csICdbJyk7XG4gIHJldHVybiAoXG4gICAgYFtmb290cHJpbnRdIFN0YWdlIFwiJHtzdGFnZU5hbWV9XCIgY2hhbmdlZCBcXGAke3doZXJlfVxcYCBJTiBQTEFDRSBvbiB0aGUgY29tbWl0dGVkIHZhbHVlIGl0IHJlYWQgYmVmb3JlIGAgK1xuICAgICdpdHMgZmlyc3Qgd3JpdGUsIHRoZW4gd3JvdGUgdGhlIGtleS4gVGhlIGNvbW1pdCBjb21wYXJlcyB0aGUgd3JpdHRlbiB2YWx1ZSB3aXRoIGNvbW1pdHRlZCBzdGF0ZSDigJQgJyArXG4gICAgJ3doaWNoIHRoZSBpbi1wbGFjZSBjaGFuZ2UgYWxzbyBtb3ZlZCDigJQgc28gaXQgcmVjb3JkcyBOTyBjaGFuZ2U6IGxpdmUgc3RhdGUga2VlcHMgdGhlIGVkaXQsIHRoZSBjb21taXQgJyArXG4gICAgJ2xvZyBhbmQgZXZlcnkgcmVhZGVyIHRoYXQgZm9sZHMgaXQgZG8gbm90LiBSZWFkcyBhcmUgQk9SUk9XRUQuIEJ1aWxkIHRoZSBuZXh0IHZhbHVlIGluc3RlYWQgJyArXG4gICAgYChcXGBzY29wZS4kc2V0VmFsdWUoJyR7a2V5fScsIHsgLi4udmFsdWUsIOKApiB9KVxcYCksIG9yIHJlYWQgdGhlIGtleSBhZ2FpbiBhZnRlciB0aGUgc3RhZ2UncyBmaXJzdCBgICtcbiAgICBcIndyaXRlIOKAlCB0aGF0IHJlYWQgaXMgdGhlIHN0YWdlJ3Mgb3duIGNvcHkuXCJcbiAgKTtcbn1cblxuLyoqXG4gKiBUaGUgd2FybmluZyB0ZXh0LiBOYW1lcyB0aGUgc3RhZ2UsIHRoZSBleGFjdCBwYXRoIHRoYXQgbW92ZWQsIGFuZCB0aGUgdHdvXG4gKiB3YXlzIHRvIHdyaXRlIGl0IGJhY2sg4oCUIGJlY2F1c2UgXCJ5b3UgbXV0YXRlZCBzb21ldGhpbmdcIiBpcyBub3QgYWN0aW9uYWJsZVxuICogYW5kIHRoaXMgaXMgdGhlIG9uZSBmYWlsdXJlIG1vZGUgdGhlIHdob2xlIGRlc2lnbiBleGlzdHMgdG8gcHJldmVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJvcnJvd2VkTXV0YXRpb25NZXNzYWdlKHN0YWdlTmFtZTogc3RyaW5nLCBrZXk6IHN0cmluZywgcGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgd2hlcmUgPSBwYXRoID09PSAnJyA/IGtleSA6IGAke2tleX0uJHtwYXRofWAucmVwbGFjZSgvXFwuXFxbL2csICdbJyk7XG4gIHJldHVybiAoXG4gICAgYFtmb290cHJpbnRdIFN0YWdlIFwiJHtzdGFnZU5hbWV9XCIgY2hhbmdlZCBcXGAke3doZXJlfVxcYCBJTiBQTEFDRSwgb24gYSB2YWx1ZSBpdCBvbmx5IHJlYWQuIGAgK1xuICAgICdmb290cHJpbnQgbmV2ZXIgc2F3IHRoYXQgd3JpdGU6IHRoZXJlIGlzIG5vIHRyYWNlIHJvdyBmb3IgaXQsIHNvIHRoZSBjb21taXQgbG9nLCB0aGUgY2F1c2FsIGNoYWluICcgK1xuICAgICdhbmQgZXZlcnkgcmVhZGVyIHRoYXQgZm9sZHMgdGhlIGxvZyB3aWxsIGRpc2FncmVlIHdpdGggZmluYWwgc3RhdGUg4oCUIGFuZCB1bmRlciBhIGRpZmZlcmVudCB3cml0ZSAnICtcbiAgICAnb3JkZXIgdGhlIGNoYW5nZSBpcyBkcm9wcGVkIGVudGlyZWx5LiBSZWFkcyBhcmUgQk9SUk9XRUQuICcgK1xuICAgICdXcml0ZSB0aHJvdWdoIHRoZSBzY29wZSBpbnN0ZWFkIChgc2NvcGUuJyArXG4gICAgd2hlcmUgK1xuICAgICcgPSDigKZgIOKAlCBwcm9wZXJ0eSBhbmQgaW5kZXhlZCBhY2Nlc3MgYXJlIGJvdGggdHJhY2tlZCksICcgK1xuICAgIGBvciBoYW5kIGJhY2sgdGhlIHdob2xlIHZhbHVlIHdpdGggXFxgc2NvcGUuJHNldFZhbHVlKCcke2tleX0nLCBuZXh0KVxcYC4gYCArXG4gICAgJ1RoaXMgdXN1YWxseSBjb21lcyBmcm9tIG11dGF0aW5nIGFuIGVsZW1lbnQgcmVhY2hlZCBieSBgZmluZGAvYGZpbHRlcmAvYGZvcuKApm9mYC9gZm9yRWFjaGAsICcgK1xuICAgICd3aGljaCB0aGUgc2NvcGUgcHJveHkgY2Fubm90IGludGVyY2VwdC4nXG4gICk7XG59XG4iXX0=
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9ycm93ZWRNdXRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbWVtb3J5L2JvcnJvd2VkTXV0YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFdkMsOEVBQThFO0FBQzlFLFNBQVMsV0FBVyxDQUFDLE1BQWMsRUFBRSxPQUFlLEVBQUUsU0FBa0I7SUFDdEUsSUFBSSxTQUFTO1FBQUUsT0FBTyxHQUFHLE1BQU0sSUFBSSxPQUFPLEdBQUcsQ0FBQztJQUM5QyxPQUFPLE1BQU0sS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7QUFDMUQsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsTUFBZSxFQUFFLEtBQWMsRUFBRSxNQUFNLEdBQUcsRUFBRSxFQUFFLEtBQUssR0FBRyxDQUFDO0lBQ3hGLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDekQsSUFBSSxLQUFLLElBQUksRUFBRTtRQUFFLE9BQU8sTUFBTSxDQUFDLENBQUMsMkNBQTJDO0lBQzNFLElBQUksTUFBTSxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxNQUFNLENBQUM7SUFFaEgsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1QyxJQUFJLGFBQWEsS0FBSyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8s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QUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDekUsT0FBTyxDQUNMLHNCQUFzQixTQUFTLGVBQWUsS0FBSyx3Q0FBd0M7UUFDM0Ysb0dBQW9HO1FBQ3BHLG1HQUFtRztRQUNuRyw0REFBNEQ7UUFDNUQsMENBQTBDO1FBQzFDLEtBQUs7UUFDTCx5REFBeUQ7UUFDekQsd0RBQXdELEdBQUcsY0FBYztRQUN6RSw2RkFBNkY7UUFDN0YseUNBQXlDLENBQzFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBtZW1vcnkvYm9ycm93ZWRNdXRhdGlvbiDigJQgdGhlIGhvbmVzdCBib3VuZGFyeSdzIHR3byB0ZXh0czogdGhlIGRldi1tb2RlXG4gKiBSRVBPUlQgZm9yIGEgd3JpdGUgdGhlIGVuZ2luZSBjYW5ub3Qgc2VlICh7QGxpbmsgYm9ycm93ZWRNdXRhdGlvbk1lc3NhZ2V9KVxuICogYW5kIHRoZSBSRUZVU0FMIGZvciBhIHdyaXRlIGZyb20gYSBoYW5kbGUgaGVsZCBwYXN0IGl0cyBzdGFnZVxuICogKHtAbGluayBkZWFkRnJhbWVNZXNzYWdlfSwgdGhyb3duIGJ5IGBTY29wZUZhY2FkZSDCtyBhc3NlcnRMaXZlYCkuXG4gKlxuICog4pSA4pSAIFRoZSBob25lc3QgYm91bmRhcnkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gKiBUaGUgdHlwZWQgc2NvcGUgaW50ZXJjZXB0cyBldmVyeSB3cml0ZSBpdCBjYW4gcmVhY2g6IGEgcHJvcGVydHkgYXQgYW55XG4gKiBkZXB0aCwgYW4gaW5kZXhlZCBlbGVtZW50LCBhbiBhcnJheSBtZXRob2QuIFdoYXQgaXQgY2Fubm90IHJlYWNoIGlzIGFuXG4gKiBlbGVtZW50IGhhbmRlZCBvdXQgYnkgYSBSRUFEIE1FVEhPRCDigJQgYGZpbmRgLCBgZmlsdGVyYCwgYGZvcuKApm9mYCwgYGZvckVhY2hgLFxuICogZGVzdHJ1Y3R1cmluZyDigJQgYmVjYXVzZSB3cmFwcGluZyB0aG9zZSB3b3VsZCBtZWFuIHJldHVybmluZyBwcm94aWVzIG91dCBvZlxuICogZXZlcnkgcmVhZCAoYG1hcGAgd291bGQgYnVpbGQgYW4gYXJyYXkgb2YgcHJveGllcywgYGZpbHRlcmAgd291bGQgY29tcGFyZVxuICogcHJveGllcywgYSByZXR1cm5lZCB2YWx1ZSB3b3VsZCBlc2NhcGUgdGhlIHN0YWdlIHN0aWxsIGJvdW5kIHRvIGl0KS4gVGhhdCBpc1xuICogYSBjb3N0IHRoZSBsaWJyYXJ5IHNob3VsZCBub3QgcGF5LCBhbmQgYSBzZW1hbnRpYyBjaGFuZ2UgaXQgc2hvdWxkIG5vdCBtYWtlLlxuICpcbiAqIFNvIHRoZSBhbnN3ZXIgZm9yIHRoYXQgZmFtaWx5IGlzIG5vdCBpbnRlcmNlcHRpb24g4oCUIGl0IGlzIGEgUkVQT1JULiBBIHJlYWRcbiAqIGlzIEJPUlJPV0VEOyBtdXRhdGluZyBpdCBpbiBwbGFjZSBpcyBvdXQgb2YgY29udHJhY3QuIFRoaXMgbW9kdWxlIGRldGVjdHMgdGhlXG4gKiB2aW9sYXRpb24gYWZ0ZXIgdGhlIGZhY3QgYW5kIG5hbWVzIGl0IChhIGRldi1tb2RlIHdhcm5pbmcgYXQgY29tbWl0IOKAlCB0aGVcbiAqIHdyaXRlIGFscmVhZHkgaGFwcGVuZWQsIHNvIGl0IGNhbm5vdCBiZSByZWZ1c2VkKSwgaW5zdGVhZCBvZiBsZXR0aW5nIHRoZSBydW5cbiAqIGVuZCB3aXRoIGEgY29tbWl0IGxvZyB0aGF0IGRpc2FncmVlcyB3aXRoIGZpbmFsIHN0YXRlIGFuZCBub3RoaW5nIHNheWluZyBzby5cbiAqXG4gKiDilIDilIAgSG93IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICogYHJlYWRUcmFja2luZzogJ2Z1bGwnYCAodGhlIGRlZmF1bHQpIGFscmVhZHkgcmV0YWlucyBhIENMT05FIG9mIGV2ZXJ5IHZhbHVlXG4gKiBhIHN0YWdlIHJlYWQuIEF0IGNvbW1pdCwgYSBrZXkgdGhlIHN0YWdlIHJlYWQgYnV0IG5ldmVyIFdST1RFIG11c3Qgc3RpbGxcbiAqIGhvbGQgd2hhdCBpdCBoZWxkIGF0IHJlYWQgdGltZSDigJQgY29tbWl0dGVkIHN0YXRlIGlzIGltbXV0YWJsZS1hZnRlci1zd2FwIGFuZFxuICogdGhlIGJ1ZmZlcidzIHdvcmtpbmcgY29weSBpcyBwcml2YXRlLiBJZiBpdCBkaWZmZXJzLCB0aGUgb25seSB0aGluZyB0aGF0IGNhblxuICogaGF2ZSBjaGFuZ2VkIGl0IGlzIHRoZSBzdGFnZSBpdHNlbGYsIGluIHBsYWNlLlxuICpcbiAqIERldi1tb2RlIG9ubHkgKGBlbmFibGVEZXZNb2RlKClgKSwgc28gdGhlIGRlZmF1bHQgcnVuIHBheXMgbm90aGluZyBhbmQgaXRzXG4gKiBieXRlcyBhcmUgdW5jaGFuZ2VkLlxuICovXG5cbmltcG9ydCB7IGRlZXBFcXVhbCB9IGZyb20gJy4vdXRpbHMuanMnO1xuXG4vKiogUmVuZGVyIG9uZSBwYXRoIHNlZ21lbnQgZm9yIGEgaHVtYW46IGBsaW5lc1swXS5xdHlgLCBub3QgYGxpbmVzLjAucXR5YC4gKi9cbmZ1bmN0aW9uIGpvaW5TZWdtZW50KHByZWZpeDogc3RyaW5nLCBzZWdtZW50OiBzdHJpbmcsIGludG9BcnJheTogYm9vbGVhbik6IHN0cmluZyB7XG4gIGlmIChpbnRvQXJyYXkpIHJldHVybiBgJHtwcmVmaXh9WyR7c2VnbWVudH1dYDtcbiAgcmV0dXJuIHByZWZpeCA9PT0gJycgPyBzZWdtZW50IDogYCR7cHJlZml4fS4ke3NlZ21lbnR9YDtcbn1cblxuLyoqXG4gKiBUaGUgZmlyc3QgcGF0aCBhdCB3aGljaCBgYWZ0ZXJgIHN0b3BzIGFncmVlaW5nIHdpdGggYGJlZm9yZWAsIG9yIGB1bmRlZmluZWRgXG4gKiB3aGVuIHRoZXkgYXJlIHN0cnVjdHVyYWxseSBlcXVhbC4gRGVwdGgtZmlyc3QsIG93biBrZXlzIG9ubHkg4oCUIHRoZSBzYW1lXG4gKiBzaGFwZXMgYGRlZXBFcXVhbGAgaGFuZGxlcywgc2luY2UgY29tbWl0dGVkIHN0YXRlIGlzIEpTT04tc2hhcGVkLlxuICpcbiAqIEN5Y2xlLXNhZmUgYnkgY29uc3RydWN0aW9uOiBpdCBvbmx5IHJlY3Vyc2VzIGludG8gcGFpcnMgdGhhdCBhcmUgbm90IGFscmVhZHlcbiAqIGBkZWVwRXF1YWxgLCBhbmQgc3RvcHMgYXQgdGhlIGZpcnN0IGRpc2FncmVlbWVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpcnN0RGlmZmVyaW5nUGF0aChiZWZvcmU6IHVua25vd24sIGFmdGVyOiB1bmtub3duLCBwcmVmaXggPSAnJywgZGVwdGggPSAwKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGRlZXBFcXVhbChiZWZvcmUsIGFmdGVyLCAnY29waWVzJykpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmIChkZXB0aCA+PSAyNCkgcmV0dXJuIHByZWZpeDsgLy8gcGF0aG9sb2dpY2FsIG5lc3Rpbmcg4oCUIG5hbWUgd2hhdCB3ZSBoYXZlXG4gIGlmIChiZWZvcmUgPT09IG51bGwgfHwgYWZ0ZXIgPT09IG51bGwgfHwgdHlwZW9mIGJlZm9yZSAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIGFmdGVyICE9PSAnb2JqZWN0JykgcmV0dXJuIHByZWZpeDtcblxuICBjb25zdCBiZWZvcmVJc0FycmF5ID0gQXJyYXkuaXNBcnJheShiZWZvcmUpO1xuICBpZiAoYmVmb3JlSXNBcnJheSAhPT0gQXJyYXkuaXNBcnJheShhZnRlcikpIHJldHVybiBwcmVmaXg7XG5cbiAgaWYgKGJlZm9yZUlzQXJyYXkpIHtcbiAgICBjb25zdCBhID0gYmVmb3JlIGFzIHVua25vd25bXTtcbiAgICBjb25zdCBiID0gYWZ0ZXIgYXMgdW5rbm93bltdO1xuICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBwcmVmaXg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBkZWVwZXIgPSBmaXJzdERpZmZlcmluZ1BhdGgoYVtpXSwgYltpXSwgam9pblNlZ21lbnQocHJlZml4LCBTdHJpbmcoaSksIHRydWUpLCBkZXB0aCArIDEpO1xuICAgICAgaWYgKGRlZXBlciAhPT0gdW5kZWZpbmVkKSByZXR1cm4gZGVlcGVyO1xuICAgIH1cbiAgICByZXR1cm4gcHJlZml4O1xuICB9XG5cbiAgY29uc3QgYSA9IGJlZm9yZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3QgYiA9IGFmdGVyIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCBrZXlzID0gbmV3IFNldChbLi4uT2JqZWN0LmtleXMoYSksIC4uLk9iamVjdC5rZXlzKGIpXSk7XG4gIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICBjb25zdCBkZWVwZXIgPSBmaXJzdERpZmZlcmluZ1BhdGgoYVtrZXldLCBiW2tleV0sIGpvaW5TZWdtZW50KHByZWZpeCwga2V5LCBmYWxzZSksIGRlcHRoICsgMSk7XG4gICAgaWYgKGRlZXBlciAhPT0gdW5kZWZpbmVkKSByZXR1cm4gZGVlcGVyO1xuICB9XG4gIHJldHVybiBwcmVmaXg7XG59XG5cbi8qKlxuICogVGhlIHJlZnVzYWwgdGV4dCBmb3IgYSB3cml0ZSB0aGF0IHJlYWNoZWQgYSBmcmFtZSBBRlRFUiBpdHMgc3RhZ2UgY29tbWl0dGVkLlxuICogQSBzY29wZSwgYW5kIGV2ZXJ5IHByb3h5IHJlYWQgb3V0IG9mIGl0LCBpcyBib3VuZCB0byB0aGUgc3RhZ2UgaXQgd2FzIGhhbmRlZFxuICogdG87IGtlcHQgcGFzdCB0aGF0IHN0YWdlJ3MgY29tbWl0IGl0IGhhcyBubyBmcmFtZSB0byBsYW5kIGluLCBzbyB0aGUgd3JpdGVcbiAqIHdvdWxkIHNpdCBpbiBhIGJ1ZmZlciBub3RoaW5nIGV2ZXIgY29tbWl0cyDigJQgbm8gdHJhY2Ugcm93LCBzdGF0ZSB1bmNoYW5nZWQuXG4gKiBUaGUgdGhyb3cgc3VyZmFjZXMgaW4gdGhlIHN0YWdlIHRoYXQgbWFkZSB0aGUgd3JpdGUgKHRoZSBlbmdpbmUncyBlcnJvclxuICogcGF0aCBuYW1lcyBpdCk7IHRoaXMgdGV4dCBuYW1lcyB0aGUgc3RhZ2UgdGhlIGhhbmRsZSBjYW1lIGZyb20uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWFkRnJhbWVNZXNzYWdlKHN0YWdlTmFtZTogc3RyaW5nLCBydW50aW1lU3RhZ2VJZDogc3RyaW5nIHwgdW5kZWZpbmVkLCBrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGZyb20gPSBydW50aW1lU3RhZ2VJZCA/IGBcIiR7c3RhZ2VOYW1lfVwiICgke3J1bnRpbWVTdGFnZUlkfSlgIDogYFwiJHtzdGFnZU5hbWV9XCJgO1xuICByZXR1cm4gKFxuICAgIGBbZm9vdHByaW50XSBTdGFnZSAke2Zyb219IGhhcyBhbHJlYWR5IGNvbW1pdHRlZCDigJQgaXRzIHNjb3BlIGlzIGRlYWQsIGFuZCBhIHdyaXRlIHRvIFxcYCR7a2V5fVxcYCBgICtcbiAgICAnanVzdCByZWFjaGVkIGl0IGZyb20gYSBsYXRlciBzdGFnZSAodGhpcyBlcnJvciBpcyByYWlzZWQgaW4gdGhhdCBzdGFnZSkuIEEgc2NvcGUsIGFuZCBhbnl0aGluZyByZWFkICcgK1xuICAgICdvdXQgb2YgaXQgKGBzY29wZS5rYCwgYHNjb3BlLmsuYXJyWzBdYCksIGJlbG9uZ3MgdG8gdGhlIHN0YWdlIGl0IHdhcyBoYW5kZWQgdG87IGhlbGQgcGFzdCB0aGF0ICcgK1xuICAgIFwic3RhZ2UncyBjb21taXQgaXQgaGFzIG5vIGZyYW1lIHRvIGxhbmQgaW4sIHNvIHRoZSB3cml0ZSB3b3VsZCB2YW5pc2ggd2l0aCBubyB0cmFjZSByb3cuIFwiICtcbiAgICBcIlJlYWQgdGhlIGtleSBhZ2FpbiB0aHJvdWdoIHRoZSBDVVJSRU5UIHN0YWdlJ3Mgc2NvcGUgYW5kIHdyaXRlIHRoZXJlLlwiXG4gICk7XG59XG5cbi8qKlxuICogVGhlIHdhcm5pbmcgdGV4dCBmb3IgYSBrZXkgdGhlIHN0YWdlIFdST1RFIGFmdGVyIGNoYW5naW5nLCBpbiBwbGFjZSwgdGhlXG4gKiBjb21taXR0ZWQgdmFsdWUgaXQgaGFkIHJlYWQgYmVmb3JlIGl0cyBmaXJzdCB3cml0ZSAoY29weS1vbi13cml0ZSwgOS4yOS4wKS5cbiAqIFRoZSBjb21taXQgY29tcGFyZXMgd2hhdCB0aGUgc3RhZ2Ugd3JvdGUgYWdhaW5zdCBjb21taXR0ZWQgc3RhdGUg4oCUIHRoZVxuICogb2JqZWN0IHRoZSBpbi1wbGFjZSBjaGFuZ2UgYWxzbyBtb3ZlZCDigJQgc28gaXQgcmVjb3JkcyBubyBjaGFuZ2U6IGxpdmUgc3RhdGVcbiAqIGtlZXBzIHRoZSBlZGl0LCB0aGUgbG9nIGFuZCBldmVyeSBmb2xkIGRvIG5vdC4gKDkuMjguMCByZWNvcmRlZCBpdCB3aGVuIHRoZVxuICogZWRpdCBjYW1lIGFmdGVyIHRoZSBmaXJzdCB3cml0ZSwgYnkgYWNjaWRlbnQgb2YgYSB3aG9sZS1zdGF0ZSBjbG9uZS4pXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21taXR0ZWRNdXRhdGlvbk1lc3NhZ2Uoc3RhZ2VOYW1lOiBzdHJpbmcsIGtleTogc3RyaW5nLCBwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB3aGVyZSA9IHBhdGggPT09ICcnID8ga2V5IDogYCR7a2V5fS4ke3BhdGh9YC5yZXBsYWNlKC9cXC5cXFsvZywgJ1snKTtcbiAgcmV0dXJuIChcbiAgICBgW2Zvb3RwcmludF0gU3RhZ2UgXCIke3N0YWdlTmFtZX1cIiBjaGFuZ2VkIFxcYCR7d2hlcmV9XFxgIElOIFBMQUNFIG9uIHRoZSBjb21taXR0ZWQgdmFsdWUgaXQgcmVhZCBiZWZvcmUgYCArXG4gICAgJ2l0cyBmaXJzdCB3cml0ZSwgdGhlbiB3cm90ZSB0aGUga2V5LiBUaGUgY29tbWl0IGNvbXBhcmVzIHRoZSB3cml0dGVuIHZhbHVlIHdpdGggY29tbWl0dGVkIHN0YXRlIOKAlCAnICtcbiAgICAnd2hpY2ggdGhlIGluLXBsYWNlIGNoYW5nZSBhbHNvIG1vdmVkIOKAlCBzbyBpdCByZWNvcmRzIE5PIGNoYW5nZTogbGl2ZSBzdGF0ZSBrZWVwcyB0aGUgZWRpdCwgdGhlIGNvbW1pdCAnICtcbiAgICAnbG9nIGFuZCBldmVyeSByZWFkZXIgdGhhdCBmb2xkcyBpdCBkbyBub3QuIFJlYWRzIGFyZSBCT1JST1dFRC4gQnVpbGQgdGhlIG5leHQgdmFsdWUgaW5zdGVhZCAnICtcbiAgICBgKFxcYHNjb3BlLiRzZXRWYWx1ZSgnJHtrZXl9JywgeyAuLi52YWx1ZSwg4oCmIH0pXFxgKSwgb3IgcmVhZCB0aGUga2V5IGFnYWluIGFmdGVyIHRoZSBzdGFnZSdzIGZpcnN0IGAgK1xuICAgIFwid3JpdGUg4oCUIHRoYXQgcmVhZCBpcyB0aGUgc3RhZ2UncyBvd24gY29weS5cIlxuICApO1xufVxuXG4vKipcbiAqIFRoZSB3YXJuaW5nIHRleHQuIE5hbWVzIHRoZSBzdGFnZSwgdGhlIGV4YWN0IHBhdGggdGhhdCBtb3ZlZCwgYW5kIHRoZSB0d29cbiAqIHdheXMgdG8gd3JpdGUgaXQgYmFjayDigJQgYmVjYXVzZSBcInlvdSBtdXRhdGVkIHNvbWV0aGluZ1wiIGlzIG5vdCBhY3Rpb25hYmxlXG4gKiBhbmQgdGhpcyBpcyB0aGUgb25lIGZhaWx1cmUgbW9kZSB0aGUgd2hvbGUgZGVzaWduIGV4aXN0cyB0byBwcmV2ZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYm9ycm93ZWRNdXRhdGlvbk1lc3NhZ2Uoc3RhZ2VOYW1lOiBzdHJpbmcsIGtleTogc3RyaW5nLCBwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB3aGVyZSA9IHBhdGggPT09ICcnID8ga2V5IDogYCR7a2V5fS4ke3BhdGh9YC5yZXBsYWNlKC9cXC5cXFsvZywgJ1snKTtcbiAgcmV0dXJuIChcbiAgICBgW2Zvb3RwcmludF0gU3RhZ2UgXCIke3N0YWdlTmFtZX1cIiBjaGFuZ2VkIFxcYCR7d2hlcmV9XFxgIElOIFBMQUNFLCBvbiBhIHZhbHVlIGl0IG9ubHkgcmVhZC4gYCArXG4gICAgJ2Zvb3RwcmludCBuZXZlciBzYXcgdGhhdCB3cml0ZTogdGhlcmUgaXMgbm8gdHJhY2Ugcm93IGZvciBpdCwgc28gdGhlIGNvbW1pdCBsb2csIHRoZSBjYXVzYWwgY2hhaW4gJyArXG4gICAgJ2FuZCBldmVyeSByZWFkZXIgdGhhdCBmb2xkcyB0aGUgbG9nIHdpbGwgZGlzYWdyZWUgd2l0aCBmaW5hbCBzdGF0ZSDigJQgYW5kIHVuZGVyIGEgZGlmZmVyZW50IHdyaXRlICcgK1xuICAgICdvcmRlciB0aGUgY2hhbmdlIGlzIGRyb3BwZWQgZW50aXJlbHkuIFJlYWRzIGFyZSBCT1JST1dFRC4gJyArXG4gICAgJ1dyaXRlIHRocm91Z2ggdGhlIHNjb3BlIGluc3RlYWQgKGBzY29wZS4nICtcbiAgICB3aGVyZSArXG4gICAgJyA9IOKApmAg4oCUIHByb3BlcnR5IGFuZCBpbmRleGVkIGFjY2VzcyBhcmUgYm90aCB0cmFja2VkKSwgJyArXG4gICAgYG9yIGhhbmQgYmFjayB0aGUgd2hvbGUgdmFsdWUgd2l0aCBcXGBzY29wZS4kc2V0VmFsdWUoJyR7a2V5fScsIG5leHQpXFxgLiBgICtcbiAgICAnVGhpcyB1c3VhbGx5IGNvbWVzIGZyb20gbXV0YXRpbmcgYW4gZWxlbWVudCByZWFjaGVkIGJ5IGBmaW5kYC9gZmlsdGVyYC9gZm9y4oCmb2ZgL2Bmb3JFYWNoYCwgJyArXG4gICAgJ3doaWNoIHRoZSBzY29wZSBwcm94eSBjYW5ub3QgaW50ZXJjZXB0LidcbiAgKTtcbn1cbiJdfQ==
@@ -29,9 +29,10 @@
29
29
  * field means `'truncated'`; they are registered so a reader explains them from the same place.
30
30
  *
31
31
  * NOT HERE: the two strings a redaction leaves where a value was. The engine writes those on every
32
- * redacted run; they live in their own leaf, `memory/placeholders.ts`, so that an app which only
33
- * runs charts does not carry these sentences in its bundle (`HONESTY_CODES` is a pure expression,
34
- * so a bundler drops it wherever nothing reads it).
32
+ * redacted run; the log's lives in its own leaf, `memory/placeholders.ts` (the scope channel's with
33
+ * the verdict, `memory/redaction.ts`), so that an app which only runs charts does not carry these
34
+ * sentences in its bundle (`HONESTY_CODES` is a pure expression, so a bundler drops it wherever
35
+ * nothing reads it).
35
36
  *
36
37
  * WHY L0. This file imports NOTHING, and `slice/` and `time-travel/` (L3) type their codes through
37
38
  * it, so it sits below them — the layer table is `scripts/layering.config.cjs`.
@@ -29,9 +29,10 @@
29
29
  * field means `'truncated'`; they are registered so a reader explains them from the same place.
30
30
  *
31
31
  * NOT HERE: the two strings a redaction leaves where a value was. The engine writes those on every
32
- * redacted run; they live in their own leaf, `memory/placeholders.ts`, so that an app which only
33
- * runs charts does not carry these sentences in its bundle (`HONESTY_CODES` is a pure expression,
34
- * so a bundler drops it wherever nothing reads it).
32
+ * redacted run; the log's lives in its own leaf, `memory/placeholders.ts` (the scope channel's with
33
+ * the verdict, `memory/redaction.ts`), so that an app which only runs charts does not carry these
34
+ * sentences in its bundle (`HONESTY_CODES` is a pure expression, so a bundler drops it wherever
35
+ * nothing reads it).
35
36
  *
36
37
  * WHY L0. This file imports NOTHING, and `slice/` and `time-travel/` (L3) type their codes through
37
38
  * it, so it sits below them — the layer table is `scripts/layering.config.cjs`.
@@ -88,4 +89,4 @@ export const HONESTY_CODES = /* @__PURE__ */ Object.freeze({
88
89
  deleted: "The key's last write in the range asked about left it absent (a delete of the key or of a container around it, or a set of a container that no longer holds it), so the answer is undefined because the record says the key was gone at that point, not because nothing was recorded.",
89
90
  'from-initial-state': "No set or delete of the key, or of a container around it, is in the range asked about, so the answer rests on the value the key had before the run: folded from the initialState passed in when there was one, and otherwise only what the log's merges, appends and nested writes added to it (or nothing), which is partial for a key seeded before the run.",
90
91
  });
91
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9uZXN0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbWVtb3J5L2hvbmVzdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Q0c7QUFFSDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ3pELDZFQUE2RTtJQUM3RSx3QkFBd0IsRUFDdEIsK0xBQStMO0lBQ2pNLGFBQWEsRUFDWCxpVUFBaVU7SUFDblUsZ0JBQWdCLEVBQ2QsNkxBQTZMO0lBQy9MLG9CQUFvQixFQUNsQiwwSUFBMEk7SUFDNUksYUFBYSxFQUNYLG1KQUFtSjtJQUNySixTQUFTLEVBQ1AsOEdBQThHO0lBQ2hILG1HQUFtRztJQUNuRyxXQUFXLEVBQ1QscUlBQXFJO0lBQ3ZJLGVBQWUsRUFDYix1WUFBdVk7SUFDelksY0FBYyxFQUNaLDBOQUEwTjtJQUM1Tiw4RUFBOEU7SUFDOUUsV0FBVyxFQUNULG9PQUFvTztJQUN0TyxLQUFLLEVBQ0gseVFBQXlRO0lBQzNRLCtGQUErRjtJQUMvRixhQUFhLEVBQ1gsNEtBQTRLO0lBQzlLLGtCQUFrQixFQUNoQix1T0FBdU87SUFDek8sYUFBYSxFQUNYLGdMQUFnTDtJQUNsTCw2RUFBNkU7SUFDN0UsYUFBYSxFQUNYLHVOQUF1TjtJQUN6TixVQUFVLEVBQ1IsNlVBQTZVO0lBQy9VLDZFQUE2RTtJQUM3RSxTQUFTLEVBQ1AsZ0xBQWdMO0lBQ2xMLDhFQUE4RTtJQUM5RSxvQkFBb0IsRUFDbEIsc01BQXNNO0lBQ3hNLCtGQUErRjtJQUMvRixRQUFRLEVBQ04sNFdBQTRXO0lBQzlXLHdGQUF3RjtJQUN4RixPQUFPLEVBQ0wsdVJBQXVSO0lBQ3pSLG9CQUFvQixFQUNsQixnV0FBZ1c7Q0FDbFUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBob25lc3R5LnRzIOKAlCB0aGUgT05FIHZvY2FidWxhcnkgZm9yIHdoYXQgYSByZWFkZXIgY2Fubm90IHNlZS5cbiAqXG4gKiBXSFkgVEhJUyBGSUxFIEVYSVNUUy4gQSByZWNvcmRpbmcgY2Fubm90IGFsd2F5cyBhbnN3ZXIgd2hhdCBpdCBpcyBhc2tlZCwgYW5kIHRoZSBsaWJyYXJ5IHNheXNcbiAqIHNvIGluIHNldmVyYWwgcGxhY2VzLCBlYWNoIGluIGl0cyBvd24gd29yZHM6IGEgc2xpY2UgY2FycmllcyBgSG9uZXN0eU5vdGVgcyBhbmQsIHdoZW4gaXQgaGFzIG5vXG4gKiBhbnN3ZXIsIGEgYG1pc3NpbmdgIHJlYXNvbjsgYSBmZWQgZWRnZSBhbmQgYW4gZWxlbWVudCBiaXJ0aCBjYXJyeSBhIGBiYXNpc2A7IGEgZm9sZCBjYXJyaWVzIGFcbiAqIGBiYXNpc2AgYW5kIGl0cyBgcmVkYWN0ZWRgIHBhdGhzOyBhIHN0b3JlZCBsb2cgcmVwb3J0cyBgTG9nR2FwYHM7IGEgY2F1c2FsIG5vZGUgY2Fycmllc1xuICogYGluY29tcGxldGVTb3VyY2VzYCBhbmQgYHRydW5jYXRlZGAuIEEgcmVhZGVyIHRoYXQgd2FudHMgdG8gRVhQTEFJTiBhbnkgb2YgdGhlbSB0byBhIHBlcnNvbiAoYVxuICogd2h5LXBhbmVsLCBhbiBhZ2VudCB0b29sKSBrZXB0IGl0cyBvd24gdGFibGUgb2YgY29kZSDihpIgc2VudGVuY2UsIGFuZCB0YWJsZXMga2VwdCBhcGFydCBkcmlmdC5cbiAqIFRoaXMgZmlsZSBpcyB0aGF0IHRhYmxlLCBvbmNlLlxuICpcbiAqIFdIQVQgSVQgSE9MRFMuXG4gKiAgIC0gYEhPTkVTVFlfQ09ERVNgIOKAlCBhIGZyb3plbiwgY2xvc2VkIHJlZ2lzdHJ5OiBjb2RlIOKGkiB0aGUgT05FIHNlbnRlbmNlIHRoYXQgc2F5cyB3aGF0IHRoZSBjb2RlXG4gKiAgICAgbWVhbnMuIFRoZSBzaGFwZSBvZiBydXN0YydzIGAtLWV4cGxhaW5gIGFuZCBMU1AncyBgRGlhZ25vc3RpYy5jb2RlYDogdGhlIGNvZGUgaXMgdGhlIHN0YWJsZVxuICogICAgIGtleSBhIGNvbnN1bWVyIEJSQU5DSEVTIG9uOyB0aGUgc2VudGVuY2UgaXMgZm9yIHdob2V2ZXIgcmVhZHMgdGhlIHNjcmVlbi4gSXQgaXMgbm90IHRoZVxuICogICAgIHBlci1pbnN0YW5jZSBgZGV0YWlsYCBhIG5vdGUgY2FycmllcyAodGhhdCBuYW1lcyB0aGUga2V5LCB0aGUgYnVkZ2V0LCB0aGUgcm93cykuXG4gKiAgIC0gYEhvbmVzdHlDb2RlYCAvIGBSZWdpc3RlcmVkQ29kZWAg4oCUIHdoYXQgbWFrZXMgdGhlIHJlZ2lzdHJ5IHRoZSBvd25lciBhbmQgbm90IGEgc3VnZ2VzdGlvbjpcbiAqICAgICBlYWNoIHB1YmxpYyB1bmlvbiBvZiB0aGVzZSBjb2RlcyAoYEhvbmVzdHlOb3RlQ29kZWAsIGBNaXNzaW5nU2xpY2VSZWFzb25gLFxuICogICAgIGBNaXNzaW5nUHJvdmVuYW5jZVJlYXNvbmAsIGBGZWRCYXNpc2AsIGBBdHRyaWJ1dGlvbkJhc2lzYCwgYEZvbGRCYXNpc2AsIGFuZCBzaW5jZSA5LjMzLjAgYFZhbHVlQmFzaXNgIC9cbiAqICAgICBgV3JpdGVyQmFzaXNgIOKAlCB0aGUgYmFzaXMgdHdpbnMgb2YgYGNvbW1pdFZhbHVlQXRgIC8gYGZpbmRMYXN0V3JpdGVyYCkgZGVjbGFyZXMgaXRzIG1lbWJlcnNcbiAqICAgICB0aHJvdWdoIGBSZWdpc3RlcmVkQ29kZWAsIHNvIGEgbWVtYmVyIHRoZSByZWdpc3RyeSBkb2VzIG5vdCBob2xkIGZhaWxzIHRvIENPTVBJTEUuIEFuZFxuICogICAgIGB0ZXN0L2FyY2hpdGVjdHVyZS9ob25lc3R5LXZvY2FidWxhcnkudGVzdC50c2AgYXNrcyB0aGUgdHlwZSBjaGVja2VyIGZvciBldmVyeSBleHBvcnRlZCB0eXBlXG4gKiAgICAgYWxpYXMgb2YgYGZvb3RwcmludGpzL3RyYWNlYCB0aGF0IGlzIGEgdW5pb24gb2Ygc3RyaW5nIGxpdGVyYWxzOiBlYWNoIG9uZSBpcyBpbnNpZGUgdGhlXG4gKiAgICAgcmVnaXN0cnkgb3IgaXMgbmFtZWQsIHdpdGggaXRzIHJlYXNvbiwgYXMgbm90IGFuIGhvbmVzdHkgdm9jYWJ1bGFyeS5cbiAqXG4gKiBOTyBPQkpFQ1QgR0FJTlMgQSBGSUVMRCBmcm9tIGJlaW5nIHJlZ2lzdGVyZWQuIFRocmVlIHNpZ25hbHMgY2Fycnkgbm8gY29kZSBvZiB0aGVpciBvd24g4oCUIGFcbiAqIGBMb2dHYXBgIChgJ2xvZy1nYXAnYCksIGBDYXVzYWxOb2RlLmluY29tcGxldGVTb3VyY2VzYCAoYCdpbmNvbXBsZXRlLXNvdXJjZXMnYCkgYW5kXG4gKiBgRm9sZGVkU3RhdGUucmVkYWN0ZWRgIC8gYHJlZGFjdGVkUGF0aHNgIChgJ3JlZGFjdGVkJ2ApIOKAlCBhbmQgYSBgdHJ1bmNhdGVkOiB7IGJ5RGVwdGgsIGJ5Tm9kZXMgfWBcbiAqIGZpZWxkIG1lYW5zIGAndHJ1bmNhdGVkJ2A7IHRoZXkgYXJlIHJlZ2lzdGVyZWQgc28gYSByZWFkZXIgZXhwbGFpbnMgdGhlbSBmcm9tIHRoZSBzYW1lIHBsYWNlLlxuICpcbiAqIE5PVCBIRVJFOiB0aGUgdHdvIHN0cmluZ3MgYSByZWRhY3Rpb24gbGVhdmVzIHdoZXJlIGEgdmFsdWUgd2FzLiBUaGUgZW5naW5lIHdyaXRlcyB0aG9zZSBvbiBldmVyeVxuICogcmVkYWN0ZWQgcnVuOyB0aGV5IGxpdmUgaW4gdGhlaXIgb3duIGxlYWYsIGBtZW1vcnkvcGxhY2Vob2xkZXJzLnRzYCwgc28gdGhhdCBhbiBhcHAgd2hpY2ggb25seVxuICogcnVucyBjaGFydHMgZG9lcyBub3QgY2FycnkgdGhlc2Ugc2VudGVuY2VzIGluIGl0cyBidW5kbGUgKGBIT05FU1RZX0NPREVTYCBpcyBhIHB1cmUgZXhwcmVzc2lvbixcbiAqIHNvIGEgYnVuZGxlciBkcm9wcyBpdCB3aGVyZXZlciBub3RoaW5nIHJlYWRzIGl0KS5cbiAqXG4gKiBXSFkgTDAuIFRoaXMgZmlsZSBpbXBvcnRzIE5PVEhJTkcsIGFuZCBgc2xpY2UvYCBhbmQgYHRpbWUtdHJhdmVsL2AgKEwzKSB0eXBlIHRoZWlyIGNvZGVzIHRocm91Z2hcbiAqIGl0LCBzbyBpdCBzaXRzIGJlbG93IHRoZW0g4oCUIHRoZSBsYXllciB0YWJsZSBpcyBgc2NyaXB0cy9sYXllcmluZy5jb25maWcuY2pzYC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgSE9ORVNUWV9DT0RFUyB9IGZyb20gJ2Zvb3RwcmludGpzL3RyYWNlJztcbiAqXG4gKiBmb3IgKGNvbnN0IHsgY29kZSB9IG9mIGZvcndhcmRTbGljZS5ub3RlcykgY29uc29sZS5sb2coY29kZSwgJ+KGkicsIEhPTkVTVFlfQ09ERVNbY29kZV0pO1xuICogLy8gcmVhZHMtbm90LXJlY29yZGVkIOKGkiBUaGlzIGxvZyBjYXJyaWVzIG5vIHJlY29yZGVkIHJlYWQgYXQgYWxsICh0aGUgcmVhZFRyYWNraW5nOiAnb2ZmJyBzaWduYXR1cmUpLCDigKZcbiAqIEhPTkVTVFlfQ09ERVNbZm9sZGVkU3RhdGUuYmFzaXNdOyAvLyAnbG9nLW9ubHknIOKGkiBObyBpbml0aWFsU3RhdGUgdHJhdmVsbGVkIHdpdGggdGhpcyBsb2cgKOKApiksIOKAplxuICogYGBgXG4gKi9cblxuLyoqXG4gKiBFdmVyeSBob25lc3R5IGNvZGUgdGhlIHRyYWNlIHJlYWRlcnMgKGBmb290cHJpbnRqcy90cmFjZWApIHNwZWFrLCB3aXRoIHRoZSBvbmUgc2VudGVuY2UgdGhhdCBzYXlzXG4gKiB3aGF0IGl0IG1lYW5zLlxuICpcbiAqIEZyb3plbiBhbmQgY2xvc2VkOiB0aGUga2V5cyBhcmUgZXhhY3RseSB0aGUgY29kZXMgYmVsb3csIGFuZCB7QGxpbmsgSG9uZXN0eUNvZGV9IGlzIGRlcml2ZWQgZnJvbVxuICogdGhlbS4gQSBuZXcgY29kZSBpcyBvbmUgbmV3IGxpbmUgaGVyZTogYSB1bmlvbiBkZWNsYXJlZCB0aHJvdWdoIHtAbGluayBSZWdpc3RlcmVkQ29kZX0gY2Fubm90IGhvbGRcbiAqIGEgY29kZSB0aGF0IGlzIG5vdCBvbiBpdCwgYW5kIGB0ZXN0L2FyY2hpdGVjdHVyZS9ob25lc3R5LXZvY2FidWxhcnkudGVzdC50c2AgZmFpbHMgb24gYW4gZXhwb3J0ZWRcbiAqIHR5cGUgYWxpYXMgb2YgYGZvb3RwcmludGpzL3RyYWNlYCB0aGF0IGlzIGEgdW5pb24gb2Ygc3RyaW5nIGxpdGVyYWxzIG5laXRoZXIgaW5zaWRlIHRoZSByZWdpc3RyeVxuICogbm9yIG5hbWVkIHRoZXJlIGFzIG5vdCBhbiBob25lc3R5IHZvY2FidWxhcnkuIFRoZSB2YWx1ZXMgYXJlIHR5cGVkIGBzdHJpbmdgLCBub3QgbGl0ZXJhbCB0eXBlcyxcbiAqIG9uIHB1cnBvc2U6IHRoZSBzZW50ZW5jZXMgYXJlIGZvciBhIHNjcmVlbiBhbmQgbWF5IGJlIHJld29yZGVkOyBhIGNvbnN1bWVyIGJyYW5jaGVzIG9uIHRoZSBLRVkuXG4gKi9cbmV4cG9ydCBjb25zdCBIT05FU1RZX0NPREVTID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5mcmVlemUoe1xuICAvLyDilIDilIAgYSBzbGljZSdzIG5vdGVzIOKAlCBgSG9uZXN0eU5vdGUuY29kZWAgKHNsaWNlLykg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICdjb25zZXJ2YXRpdmUtZmVkLWVkZ2VzJzpcbiAgICBcIkF0IGxlYXN0IG9uZSAnZmVkJyBlZGdlIGlzIHN0YWdlLWxldmVsIChjb25zZXJ2YXRpdmUpOiBpdHMgd3JpdGUgY2FycmllcyBubyBwZXItd3JpdGUgcmVhZCBwcm92ZW5hbmNlLCBzbyB0aGUgZWRnZSBtYXkgbm90IGJlIHJlYWwg4oCUIHR1cm4gb24gd3JpdGVQcm92ZW5hbmNlOiAncmVhZHMtcHJlZml4JyBmb3IgZXhhY3QgZWRnZXMuXCIsXG4gICduZXN0ZWQtcm93cyc6XG4gICAgXCJBIHdyaXRlIHRoaXMgYW5zd2VyIHJlc3RzIG9uIHJlYWNoZWQgdGhlIGtleSBvbmx5IHRocm91Z2ggcGF0aHMgaW5zaWRlIGl0IChhIHN1YmZsb3cncyBpbnB1dCBzZWVkLCBhbiBvdXRwdXRNYXBwZXIgbWVyZ2UtYmFjaywgYSBmb3JrIGNoaWxkJ3MgbmFtZXNwYWNlKSwgc28gaXQgY2hhbmdlZCBwYXJ0IG9mIHRoZSBrZXkncyB2YWx1ZSwgbm90IHRoZSB3aG9sZTogZWFybGllciB3cml0ZXMgbWF5IGFjY291bnQgZm9yIHRoZSByZXN0LCBhbmQgYSByZWFkZXIgb2YgdGhlIGtleSBtYXkgbm90IGhhdmUgcmVhZCB0aGUgcGFydCB0aGF0IHdyaXRlIGNoYW5nZWQuXCIsXG4gICdwcmUtcnVuLW9yaWdpbic6XG4gICAgJ1RoZSB2YWx1ZSBiZWluZyBmb2xsb3dlZCB3YXMgYWJzZW50IG9yIGFscmVhZHkgdGhlcmUgYmVmb3JlIHRoZSBmaXJzdCB3cml0ZSB0aGlzIGxvZyBjYW4gc2VlIChpbml0aWFsIHN0YXRlLCBmcm96ZW4gcnVuIGlucHV0IG9yIGEgY2xvc3VyZSksIHNvIHdobyBwdXQgaXQgdGhlcmUgaXMgb3V0c2lkZSB0aGUgY29tbWl0IGxvZy4nLFxuICAncmVhZHMtbm90LXJlY29yZGVkJzpcbiAgICBcIlRoaXMgbG9nIGNhcnJpZXMgbm8gcmVjb3JkZWQgcmVhZCBhdCBhbGwgKHRoZSByZWFkVHJhY2tpbmc6ICdvZmYnIHNpZ25hdHVyZSksIHNvICdub3RoaW5nIHJlYWQgdGhpcyB2YWx1ZScgaXMgdW5rbm93YWJsZSBoZXJlLCBub3QgdHJ1ZS5cIixcbiAgJ3Vua25vd24ta2V5JzpcbiAgICBcIlRoaXMgbG9nIGhhcyBubyB3cml0ZSBhbmQgbm8gcmVjb3JkZWQgcmVhZCBvZiB0aGUga2V5LCB3aGljaCBpcyBtb3N0IGxpa2VseSBhIHR5cG8gb3IgdGhlIHdyb25nIHJ1bidzIGxvZyByYXRoZXIgdGhhbiBhIHZhcmlhYmxlIHdpdGggbm8gaGlzdG9yeS5cIixcbiAgdHJ1bmNhdGVkOlxuICAgICdBIGJ1ZGdldCAobWF4RGVwdGggb3IgbWF4Tm9kZXMpIGN1dCB0aGUgd2Fsaywgc28gbW9yZSBvZiB0aGUgYW5zd2VyIGV4aXN0cyBiZXlvbmQgdGhlIGhvcml6b24gaXQgc3RvcHBlZCBhdC4nLFxuICAvLyDilIDilIAgd2h5IGEgc2xpY2UgaGFzIG5vIGFuc3dlciDigJQgYG1pc3NpbmdgIChzbGljZS86IE1pc3NpbmdTbGljZVJlYXNvbiwgTWlzc2luZ1Byb3ZlbmFuY2VSZWFzb24pIOKUgFxuICAnZW1wdHktbG9nJzpcbiAgICAnVGhlIGNvbW1pdCBsb2cgaG9sZHMgbm8gY29tbWl0IGF0IGFsbCAobm90aGluZyBoYXMgZXhlY3V0ZWQsIG9yIHRoZSBsb2cgaGFuZGVkIGluIGlzIGVtcHR5KSwgc28gdGhlcmUgaXMgbm8gaGlzdG9yeSB0byBhbnN3ZXIgZnJvbS4nLFxuICAnbmV2ZXItd3JpdHRlbic6XG4gICAgJ05vIGNvbW1pdCBpbiB0aGUgcmFuZ2UgYXNrZWQgYWJvdXQgd3JvdGUgdGhlIGtleSDigJQgbm90IGl0cyB3aG9sZSB2YWx1ZSwgbm90IGEgcGF0aCBpbnNpZGUgaXQsIGFuZCBub3QgYSBjb250YWluZXIgYXJvdW5kIGl0IGluIGEgd2F5IHRoYXQgY2hhbmdlZCBpdCAoYSBmb3J3YXJkIHNsaWNlIG9yIGEgdGltZWxpbmUgYWxzbyBmb3VuZCBubyByZWNvcmRlZCByZWFkIG9uLCBpbnNpZGUgb3IgYXJvdW5kIGl0KSDigJQgc28gdGhlcmUgaXMgbm8gd3JpdGUgdG8gc3RhcnQgZnJvbTogYW55IHZhbHVlIGl0IGhhcyBjYW1lIGZyb20gdGhlIGluaXRpYWwgc3RhdGUsIHRoZSBmcm96ZW4gcnVuIGlucHV0IG9yIGEgY2xvc3VyZSwgbm9uZSBvZiB3aGljaCB0aGUgY29tbWl0IGxvZyBjYW4gc2VlLicsXG4gICdub3QtYW4tYXJyYXknOlxuICAgICdUaGUga2V5IHdhcyB3cml0dGVuLCBidXQgaXRzIHZhbHVlIGF0IHRoZSBwb2ludCBhc2tlZCBhYm91dCBpcyBub3QgYW4gYXJyYXkgKGEgc2NhbGFyIG9yIG9iamVjdCBrZXksIGEgZGVsZXRlZCBrZXksIG9yIGEgbWVyZ2UgdGhhdCBkZWdyYWRlZCBpdCksIHNvIGVsZW1lbnQgcHJvdmVuYW5jZSBkb2VzIG5vdCBhcHBseTogc2xpY2VGb3JLZXkgaXMgdGhlIHF1ZXJ5IGZvciBpdC4nLFxuICAvLyDilIDilIAgaG93IGEgZmVkIGVkZ2Ugd2FzIGF0dHJpYnV0ZWQg4oCUIGBGb3J3YXJkRWRnZS5iYXNpc2AgKHNsaWNlLzogRmVkQmFzaXMpIOKUgFxuICAncGVyLXdyaXRlJzpcbiAgICBcIlRoaXMgZmVkIGVkZ2UgaXMgZXhhY3Q6IHRoZSBkb3duc3RyZWFtIHdyaXRlIGNhcnJpZXMgcGVyLXdyaXRlIHJlYWQgcHJvdmVuYW5jZSAoVHJhY2VFbnRyeS5yZWFkS2V5cywgcmVjb3JkZWQgdW5kZXIgd3JpdGVQcm92ZW5hbmNlOiAncmVhZHMtcHJlZml4JykgYW5kIHRoYXQgbGlzdCBuYW1lcyB0aGUga2V5LCBzbyB0aGUgdmFsdWUgd2FzIHJlYWQgYmVmb3JlIHRoZSB3cml0ZSBpdCBmZWVkcy5cIixcbiAgc3RhZ2U6XG4gICAgJ1RoaXMgZmVkIGVkZ2UgaXMgY29uc2VydmF0aXZlOiB0aGUgZG93bnN0cmVhbSB3cml0ZSBjYXJyaWVzIG5vIHBlci13cml0ZSByZWFkIHByb3ZlbmFuY2UgKHRoZSB3cml0ZVByb3ZlbmFuY2UgZGlhbCB3YXMgb2ZmLCBvciB0aGUgbG9nIGlzIG1peGVkKSwgc28gYWxsIHRoYXQgaXMga25vd24gaXMgdGhhdCBpdHMgc3RhZ2UgcmVhZCB0aGlzIGtleSBhbmQgd3JvdGUgdGhhdCBwYXRoIGluIHNvbWUgb3JkZXIsIGFuZCB0aGUgZWRnZSBtYXkgbm90IGJlIHJlYWwuJyxcbiAgLy8g4pSA4pSAIGhvdyBhbiBlbGVtZW50J3MgYmlydGggd2FzIGF0dHJpYnV0ZWQg4oCUIGBFbGVtZW50QmlydGguYmFzaXNgIChzbGljZS86IEF0dHJpYnV0aW9uQmFzaXMpIOKUgFxuICAnYXBwZW5kLXZlcmInOlxuICAgIFwiVGhlIGVuZ2luZSByZWNvcmRlZCB0aGUgZWxlbWVudCBpbiBhbiBhcHBlbmQgcm93J3MgdGFpbCAoaG93IGNvbW1pdFZhbHVlczogJ2RlbHRhJyByZWNvcmRzIGFuIGFycmF5J3MgZ3Jvd3RoKSwgc28gdGhlIGNvbW1pdCB0aGF0IGFkZGVkIGl0IGlzIGtub3duIGV4YWN0bHksIG5vdCBpbmZlcnJlZC5cIixcbiAgJ3ByZWZpeC1pbmZlcmVuY2UnOlxuICAgICdBIHdob2xlLXZhbHVlIHdyaXRlIChhIHNldCBvciBhIG1lcmdlKSBrZXB0IHRoZSBwcmV2aW91cyBhcnJheSBhcyBpdHMgcHJlZml4LCBzbyB0aGUgbmV3IHRhaWwgaXMgYXR0cmlidXRlZCB0byB0aGF0IGNvbW1pdCBieSBpbmZlcmVuY2U6IGEgd3JpdGUgdGhhdCByZXBsYWNlZCB0aGUgYXJyYXkgd2l0aCBvbmUgdGhhdCBoYXBwZW5zIHRvIGJlZ2luIHRoZSBzYW1lIHdheSBsb29rcyBpZGVudGljYWwuJyxcbiAgJ3dob2xlLXZhbHVlJzpcbiAgICBcIlRoaXMgY29tbWl0IHBsYWNlZCB0aGUgYXJyYXkgd2hvbGVzYWxlICh0aGVyZSB3YXMgbm8gZWFybGllciBhcnJheSwgb3IgdGhlIG5ldyBvbmUgZG9lcyBub3QgYmVnaW4gd2l0aCBpdCksIHNvIGV2ZXJ5IGVsZW1lbnQncyBiaXJ0aCByZXNldHMgdG8gdGhpcyBjb21taXQ6IGV4YWN0LCBidXQgY29hcnNlLlwiLFxuICAvLyDilIDilIAgaG93IGEgZm9sZCB3YXMgZGVyaXZlZCDigJQgYEZvbGRlZFN0YXRlLmJhc2lzYCAodGltZS10cmF2ZWwvKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgJ2luaXRpYWwrbG9nJzpcbiAgICAnVGhlIGZvbGQgc3RhcnRlZCBmcm9tIHRoZSBmb2xkIGJhc2UgdGhhdCB0cmF2ZWxsZWQgd2l0aCB0aGUgbG9nIChpbml0aWFsU3RhdGUpIGFuZCByZXBsYXllZCB0aGUgY29tbWl0IGxvZyBvbnRvIGl0LCBzbyBub3RoaW5nIHNlZWRlZCBiZWZvcmUgdGhlIHJ1biBpcyBtaXNzaW5nOyByb3dzIGl0IGNvdWxkIG5vdCByZWFkIGFyZSBsaXN0ZWQgYXBhcnQsIGluIHNraXBwZWQuJyxcbiAgJ2xvZy1vbmx5JzpcbiAgICAnTm8gaW5pdGlhbFN0YXRlIHRyYXZlbGxlZCB3aXRoIHRoaXMgbG9nIChhIHNuYXBzaG90IHN0b3JlZCBiZWZvcmUgOS4xNywgYSByZWRhY3RlZCBzbmFwc2hvdCBvciBhIGhhbmQtYnVpbHQgbG9nKSwgc28gdGhlIGZvbGQgc3RhcnRlZCBmcm9tIGFuIGVtcHR5IG9iamVjdDogYSBrZXkgc2VlZGVkIGJlZm9yZSB0aGUgcnVuIGlzIHdob2xlIG9ubHkgb25jZSBhIGNvbW1pdCBzaW5jZSB3cm90ZSBpdHMgd2hvbGUgdmFsdWUsIGFuZCB1bnRpbCB0aGVuIGl0IGhvbGRzIGp1c3Qgd2hhdCBpdHMgbWVyZ2VzLCBhcHBlbmRzIGFuZCBuZXN0ZWQgd3JpdGVzIGFkZGVkLCBvciBub3RoaW5nLicsXG4gIC8vIOKUgOKUgCBhIHJvdyBvZiBhIHN0b3JlZCBsb2cgdGhhdCBpcyBub3QgYSBjb21taXQgYnVuZGxlIOKAlCBgTG9nR2FwYCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgJ2xvZy1nYXAnOlxuICAgICdBIHJvdyBvZiB0aGUgc3RvcmVkIGxvZyBjb3VsZCBub3QgYmUgcmVhZCBhcyBhIGNvbW1pdCBidW5kbGUsIHNvIGl0IGtlZXBzIGl0cyBpbmRleCBidXQgY29udHJpYnV0ZXMgbm8gc3RhdGUsIGFuZCBhbnkgZm9sZCB0aGF0IGNyb3NzZXMgaXQgaXMgbWlzc2luZyB3aGF0ZXZlciB0aGF0IHJvdyB3cm90ZS4nLFxuICAvLyDilIDilIAgdW50cmFja2VkIHJlYWRzIGEgc3RhZ2UgYWxzbyBjb25zdW1lZCDigJQgYENhdXNhbE5vZGUuaW5jb21wbGV0ZVNvdXJjZXNgIOKUgFxuICAnaW5jb21wbGV0ZS1zb3VyY2VzJzpcbiAgICAnVGhlIHN0YWdlIGFsc28gY29uc3VtZWQgcmVhZCBwYXRocyB0aGF0IGJ5cGFzcyByZWFkIHRyYWNraW5nIChhcmdzLCBlbnYgb3IgYW4gdW5zaGFkb3dlZCBzaWxlbnQgcmVhZCksIHNvIGEgc2xpY2UgdGhyb3VnaCBpdCBtYXkgYmUgaW5jb21wbGV0ZTogdGhvc2UgcmVhZHMgcHJvZHVjZSBubyByZWFkLXRvLXdyaXRlIGVkZ2UgdG8gZm9sbG93LicsXG4gIC8vIOKUgOKUgCB2YWx1ZXMgc2NydWJiZWQgYXQgd3JpdGUgdGltZSDigJQgYEZvbGRlZFN0YXRlLnJlZGFjdGVkYCAvIGByZWRhY3RlZFBhdGhzYCwgYSB2YWx1ZSBiYXNpcyDilIBcbiAgcmVkYWN0ZWQ6XG4gICAgXCJWYWx1ZXMgYXQgdGhlIHBhdGhzIGxpc3RlZCBpbiByZWRhY3RlZFBhdGhzIChhIGZvbGQncywgb3IgYSBjb21taXQncyBpbiB0aGUgcmFuZ2UgYSBrZXkncyB2YWx1ZSByZXN0cyBvbikgd2VyZSBzY3J1YmJlZCB3aGVuIHRoZXkgd2VyZSB3cml0dGVuIChieSBhIHJlZGFjdGlvbiBwb2xpY3ksIG9yIGEgd3JpdGUgbWFya2VkIHJlZGFjdGVkKSwgc28gd2hlcmUgdGhlIGFuc3dlciBob2xkcyB0aGUgbG9nJ3MgcGxhY2Vob2xkZXIgJ1JFREFDVEVEJywgb3IgbG9zdCBhIGtleSB1bmRlciBhIGNvbnRhaW5lciB0aGUgcGxhY2Vob2xkZXIgcmVwbGFjZWQsIGl0IHN0YW5kcyBpbiBmb3IgYSB2YWx1ZSB0aGUgbG9nIG5ldmVyIHJlY29yZGVkLlwiLFxuICAvLyDilIDilIAgaG93IG9uZSBrZXkncyB2YWx1ZSB3YXMgcmVhZCBvZmYgdGhlIGxvZyDigJQgYFZhbHVlQmFzaXNgIChjb21taXRWYWx1ZUF0V2l0aEJhc2lzKSDilIBcbiAgZGVsZXRlZDpcbiAgICBcIlRoZSBrZXkncyBsYXN0IHdyaXRlIGluIHRoZSByYW5nZSBhc2tlZCBhYm91dCBsZWZ0IGl0IGFic2VudCAoYSBkZWxldGUgb2YgdGhlIGtleSBvciBvZiBhIGNvbnRhaW5lciBhcm91bmQgaXQsIG9yIGEgc2V0IG9mIGEgY29udGFpbmVyIHRoYXQgbm8gbG9uZ2VyIGhvbGRzIGl0KSwgc28gdGhlIGFuc3dlciBpcyB1bmRlZmluZWQgYmVjYXVzZSB0aGUgcmVjb3JkIHNheXMgdGhlIGtleSB3YXMgZ29uZSBhdCB0aGF0IHBvaW50LCBub3QgYmVjYXVzZSBub3RoaW5nIHdhcyByZWNvcmRlZC5cIixcbiAgJ2Zyb20taW5pdGlhbC1zdGF0ZSc6XG4gICAgXCJObyBzZXQgb3IgZGVsZXRlIG9mIHRoZSBrZXksIG9yIG9mIGEgY29udGFpbmVyIGFyb3VuZCBpdCwgaXMgaW4gdGhlIHJhbmdlIGFza2VkIGFib3V0LCBzbyB0aGUgYW5zd2VyIHJlc3RzIG9uIHRoZSB2YWx1ZSB0aGUga2V5IGhhZCBiZWZvcmUgdGhlIHJ1bjogZm9sZGVkIGZyb20gdGhlIGluaXRpYWxTdGF0ZSBwYXNzZWQgaW4gd2hlbiB0aGVyZSB3YXMgb25lLCBhbmQgb3RoZXJ3aXNlIG9ubHkgd2hhdCB0aGUgbG9nJ3MgbWVyZ2VzLCBhcHBlbmRzIGFuZCBuZXN0ZWQgd3JpdGVzIGFkZGVkIHRvIGl0IChvciBub3RoaW5nKSwgd2hpY2ggaXMgcGFydGlhbCBmb3IgYSBrZXkgc2VlZGVkIGJlZm9yZSB0aGUgcnVuLlwiLFxufSBzYXRpc2ZpZXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPik7XG5cbi8qKiBBbnkgY29kZSBpbiB7QGxpbmsgSE9ORVNUWV9DT0RFU30g4oCUIHRoZSBrZXkgYSByZWFkZXIgbG9va3MgYW4gZXhwbGFuYXRpb24gdXAgYnkuICovXG5leHBvcnQgdHlwZSBIb25lc3R5Q29kZSA9IGtleW9mIHR5cGVvZiBIT05FU1RZX0NPREVTO1xuXG4vKipcbiAqIEEgdW5pb24gb2YgaG9uZXN0eSBjb2RlcyBhIHR5cGUgREVDTEFSRVM6IGBUYCBtdXN0IGJlIGEgc3Vic2V0IG9mIHtAbGluayBIb25lc3R5Q29kZX0sIG9yIHRoZVxuICogZGVjbGFyYXRpb24gZmFpbHMgdG8gY29tcGlsZSAoVFMyMzQ0KS5cbiAqXG4gKiBgUmVnaXN0ZXJlZENvZGU8VD5gIGlzIGBUYCDigJQgYW4gaWRlbnRpdHkgYXQgdGhlIHR5cGUgbGV2ZWwg4oCUIHNvIHRoZSB1bmlvbiBrZWVwcyBleGFjdGx5IHRoZVxuICogbWVtYmVycyBpdCB3YXMgd3JpdHRlbiB3aXRoIGFuZCBkb2VzIE5PVCB3aWRlbiB0byBldmVyeSBjb2RlOlxuICogYHR5cGUgRm9sZEJhc2lzID0gUmVnaXN0ZXJlZENvZGU8J2luaXRpYWwrbG9nJyB8ICdsb2ctb25seSc+YC5cbiAqL1xuZXhwb3J0IHR5cGUgUmVnaXN0ZXJlZENvZGU8VCBleHRlbmRzIEhvbmVzdHlDb2RlPiA9IFQ7XG4iXX0=
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9uZXN0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbWVtb3J5L2hvbmVzdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0NHO0FBRUg7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUN6RCw2RUFBNkU7SUFDN0Usd0JBQXdCLEVBQ3RCLCtMQUErTDtJQUNqTSxhQUFhLEVBQ1gsaVVBQWlVO0lBQ25VLGdCQUFnQixFQUNkLDZMQUE2TDtJQUMvTCxvQkFBb0IsRUFDbEIsMElBQTBJO0lBQzVJLGFBQWEsRUFDWCxtSkFBbUo7SUFDckosU0FBUyxFQUNQLDhHQUE4RztJQUNoSCxtR0FBbUc7SUFDbkcsV0FBVyxFQUNULHFJQUFxSTtJQUN2SSxlQUFlLEVBQ2IsdVlBQXVZO0lBQ3pZLGNBQWMsRUFDWiwwTkFBME47SUFDNU4sOEVBQThFO0lBQzlFLFdBQVcsRUFDVCxvT0FBb087SUFDdE8sS0FBSyxFQUNILHlRQUF5UTtJQUMzUSwrRkFBK0Y7SUFDL0YsYUFBYSxFQUNYLDRLQUE0SztJQUM5SyxrQkFBa0IsRUFDaEIsdU9BQXVPO0lBQ3pPLGFBQWEsRUFDWCxnTEFBZ0w7SUFDbEwsNkVBQTZFO0lBQzdFLGFBQWEsRUFDWCx1TkFBdU47SUFDek4sVUFBVSxFQUNSLDZVQUE2VTtJQUMvVSw2RUFBNkU7SUFDN0UsU0FBUyxFQUNQLGdMQUFnTDtJQUNsTCw4RUFBOEU7SUFDOUUsb0JBQW9CLEVBQ2xCLHNNQUFzTTtJQUN4TSwrRkFBK0Y7SUFDL0YsUUFBUSxFQUNOLDRXQUE0VztJQUM5Vyx3RkFBd0Y7SUFDeEYsT0FBTyxFQUNMLHVSQUF1UjtJQUN6UixvQkFBb0IsRUFDbEIsZ1dBQWdXO0NBQ2xVLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogaG9uZXN0eS50cyDigJQgdGhlIE9ORSB2b2NhYnVsYXJ5IGZvciB3aGF0IGEgcmVhZGVyIGNhbm5vdCBzZWUuXG4gKlxuICogV0hZIFRISVMgRklMRSBFWElTVFMuIEEgcmVjb3JkaW5nIGNhbm5vdCBhbHdheXMgYW5zd2VyIHdoYXQgaXQgaXMgYXNrZWQsIGFuZCB0aGUgbGlicmFyeSBzYXlzXG4gKiBzbyBpbiBzZXZlcmFsIHBsYWNlcywgZWFjaCBpbiBpdHMgb3duIHdvcmRzOiBhIHNsaWNlIGNhcnJpZXMgYEhvbmVzdHlOb3RlYHMgYW5kLCB3aGVuIGl0IGhhcyBub1xuICogYW5zd2VyLCBhIGBtaXNzaW5nYCByZWFzb247IGEgZmVkIGVkZ2UgYW5kIGFuIGVsZW1lbnQgYmlydGggY2FycnkgYSBgYmFzaXNgOyBhIGZvbGQgY2FycmllcyBhXG4gKiBgYmFzaXNgIGFuZCBpdHMgYHJlZGFjdGVkYCBwYXRoczsgYSBzdG9yZWQgbG9nIHJlcG9ydHMgYExvZ0dhcGBzOyBhIGNhdXNhbCBub2RlIGNhcnJpZXNcbiAqIGBpbmNvbXBsZXRlU291cmNlc2AgYW5kIGB0cnVuY2F0ZWRgLiBBIHJlYWRlciB0aGF0IHdhbnRzIHRvIEVYUExBSU4gYW55IG9mIHRoZW0gdG8gYSBwZXJzb24gKGFcbiAqIHdoeS1wYW5lbCwgYW4gYWdlbnQgdG9vbCkga2VwdCBpdHMgb3duIHRhYmxlIG9mIGNvZGUg4oaSIHNlbnRlbmNlLCBhbmQgdGFibGVzIGtlcHQgYXBhcnQgZHJpZnQuXG4gKiBUaGlzIGZpbGUgaXMgdGhhdCB0YWJsZSwgb25jZS5cbiAqXG4gKiBXSEFUIElUIEhPTERTLlxuICogICAtIGBIT05FU1RZX0NPREVTYCDigJQgYSBmcm96ZW4sIGNsb3NlZCByZWdpc3RyeTogY29kZSDihpIgdGhlIE9ORSBzZW50ZW5jZSB0aGF0IHNheXMgd2hhdCB0aGUgY29kZVxuICogICAgIG1lYW5zLiBUaGUgc2hhcGUgb2YgcnVzdGMncyBgLS1leHBsYWluYCBhbmQgTFNQJ3MgYERpYWdub3N0aWMuY29kZWA6IHRoZSBjb2RlIGlzIHRoZSBzdGFibGVcbiAqICAgICBrZXkgYSBjb25zdW1lciBCUkFOQ0hFUyBvbjsgdGhlIHNlbnRlbmNlIGlzIGZvciB3aG9ldmVyIHJlYWRzIHRoZSBzY3JlZW4uIEl0IGlzIG5vdCB0aGVcbiAqICAgICBwZXItaW5zdGFuY2UgYGRldGFpbGAgYSBub3RlIGNhcnJpZXMgKHRoYXQgbmFtZXMgdGhlIGtleSwgdGhlIGJ1ZGdldCwgdGhlIHJvd3MpLlxuICogICAtIGBIb25lc3R5Q29kZWAgLyBgUmVnaXN0ZXJlZENvZGVgIOKAlCB3aGF0IG1ha2VzIHRoZSByZWdpc3RyeSB0aGUgb3duZXIgYW5kIG5vdCBhIHN1Z2dlc3Rpb246XG4gKiAgICAgZWFjaCBwdWJsaWMgdW5pb24gb2YgdGhlc2UgY29kZXMgKGBIb25lc3R5Tm90ZUNvZGVgLCBgTWlzc2luZ1NsaWNlUmVhc29uYCxcbiAqICAgICBgTWlzc2luZ1Byb3ZlbmFuY2VSZWFzb25gLCBgRmVkQmFzaXNgLCBgQXR0cmlidXRpb25CYXNpc2AsIGBGb2xkQmFzaXNgLCBhbmQgc2luY2UgOS4zMy4wIGBWYWx1ZUJhc2lzYCAvXG4gKiAgICAgYFdyaXRlckJhc2lzYCDigJQgdGhlIGJhc2lzIHR3aW5zIG9mIGBjb21taXRWYWx1ZUF0YCAvIGBmaW5kTGFzdFdyaXRlcmApIGRlY2xhcmVzIGl0cyBtZW1iZXJzXG4gKiAgICAgdGhyb3VnaCBgUmVnaXN0ZXJlZENvZGVgLCBzbyBhIG1lbWJlciB0aGUgcmVnaXN0cnkgZG9lcyBub3QgaG9sZCBmYWlscyB0byBDT01QSUxFLiBBbmRcbiAqICAgICBgdGVzdC9hcmNoaXRlY3R1cmUvaG9uZXN0eS12b2NhYnVsYXJ5LnRlc3QudHNgIGFza3MgdGhlIHR5cGUgY2hlY2tlciBmb3IgZXZlcnkgZXhwb3J0ZWQgdHlwZVxuICogICAgIGFsaWFzIG9mIGBmb290cHJpbnRqcy90cmFjZWAgdGhhdCBpcyBhIHVuaW9uIG9mIHN0cmluZyBsaXRlcmFsczogZWFjaCBvbmUgaXMgaW5zaWRlIHRoZVxuICogICAgIHJlZ2lzdHJ5IG9yIGlzIG5hbWVkLCB3aXRoIGl0cyByZWFzb24sIGFzIG5vdCBhbiBob25lc3R5IHZvY2FidWxhcnkuXG4gKlxuICogTk8gT0JKRUNUIEdBSU5TIEEgRklFTEQgZnJvbSBiZWluZyByZWdpc3RlcmVkLiBUaHJlZSBzaWduYWxzIGNhcnJ5IG5vIGNvZGUgb2YgdGhlaXIgb3duIOKAlCBhXG4gKiBgTG9nR2FwYCAoYCdsb2ctZ2FwJ2ApLCBgQ2F1c2FsTm9kZS5pbmNvbXBsZXRlU291cmNlc2AgKGAnaW5jb21wbGV0ZS1zb3VyY2VzJ2ApIGFuZFxuICogYEZvbGRlZFN0YXRlLnJlZGFjdGVkYCAvIGByZWRhY3RlZFBhdGhzYCAoYCdyZWRhY3RlZCdgKSDigJQgYW5kIGEgYHRydW5jYXRlZDogeyBieURlcHRoLCBieU5vZGVzIH1gXG4gKiBmaWVsZCBtZWFucyBgJ3RydW5jYXRlZCdgOyB0aGV5IGFyZSByZWdpc3RlcmVkIHNvIGEgcmVhZGVyIGV4cGxhaW5zIHRoZW0gZnJvbSB0aGUgc2FtZSBwbGFjZS5cbiAqXG4gKiBOT1QgSEVSRTogdGhlIHR3byBzdHJpbmdzIGEgcmVkYWN0aW9uIGxlYXZlcyB3aGVyZSBhIHZhbHVlIHdhcy4gVGhlIGVuZ2luZSB3cml0ZXMgdGhvc2Ugb24gZXZlcnlcbiAqIHJlZGFjdGVkIHJ1bjsgdGhlIGxvZydzIGxpdmVzIGluIGl0cyBvd24gbGVhZiwgYG1lbW9yeS9wbGFjZWhvbGRlcnMudHNgICh0aGUgc2NvcGUgY2hhbm5lbCdzIHdpdGhcbiAqIHRoZSB2ZXJkaWN0LCBgbWVtb3J5L3JlZGFjdGlvbi50c2ApLCBzbyB0aGF0IGFuIGFwcCB3aGljaCBvbmx5IHJ1bnMgY2hhcnRzIGRvZXMgbm90IGNhcnJ5IHRoZXNlXG4gKiBzZW50ZW5jZXMgaW4gaXRzIGJ1bmRsZSAoYEhPTkVTVFlfQ09ERVNgIGlzIGEgcHVyZSBleHByZXNzaW9uLCBzbyBhIGJ1bmRsZXIgZHJvcHMgaXQgd2hlcmV2ZXJcbiAqIG5vdGhpbmcgcmVhZHMgaXQpLlxuICpcbiAqIFdIWSBMMC4gVGhpcyBmaWxlIGltcG9ydHMgTk9USElORywgYW5kIGBzbGljZS9gIGFuZCBgdGltZS10cmF2ZWwvYCAoTDMpIHR5cGUgdGhlaXIgY29kZXMgdGhyb3VnaFxuICogaXQsIHNvIGl0IHNpdHMgYmVsb3cgdGhlbSDigJQgdGhlIGxheWVyIHRhYmxlIGlzIGBzY3JpcHRzL2xheWVyaW5nLmNvbmZpZy5janNgLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBIT05FU1RZX0NPREVTIH0gZnJvbSAnZm9vdHByaW50anMvdHJhY2UnO1xuICpcbiAqIGZvciAoY29uc3QgeyBjb2RlIH0gb2YgZm9yd2FyZFNsaWNlLm5vdGVzKSBjb25zb2xlLmxvZyhjb2RlLCAn4oaSJywgSE9ORVNUWV9DT0RFU1tjb2RlXSk7XG4gKiAvLyByZWFkcy1ub3QtcmVjb3JkZWQg4oaSIFRoaXMgbG9nIGNhcnJpZXMgbm8gcmVjb3JkZWQgcmVhZCBhdCBhbGwgKHRoZSByZWFkVHJhY2tpbmc6ICdvZmYnIHNpZ25hdHVyZSksIOKAplxuICogSE9ORVNUWV9DT0RFU1tmb2xkZWRTdGF0ZS5iYXNpc107IC8vICdsb2ctb25seScg4oaSIE5vIGluaXRpYWxTdGF0ZSB0cmF2ZWxsZWQgd2l0aCB0aGlzIGxvZyAo4oCmKSwg4oCmXG4gKiBgYGBcbiAqL1xuXG4vKipcbiAqIEV2ZXJ5IGhvbmVzdHkgY29kZSB0aGUgdHJhY2UgcmVhZGVycyAoYGZvb3RwcmludGpzL3RyYWNlYCkgc3BlYWssIHdpdGggdGhlIG9uZSBzZW50ZW5jZSB0aGF0IHNheXNcbiAqIHdoYXQgaXQgbWVhbnMuXG4gKlxuICogRnJvemVuIGFuZCBjbG9zZWQ6IHRoZSBrZXlzIGFyZSBleGFjdGx5IHRoZSBjb2RlcyBiZWxvdywgYW5kIHtAbGluayBIb25lc3R5Q29kZX0gaXMgZGVyaXZlZCBmcm9tXG4gKiB0aGVtLiBBIG5ldyBjb2RlIGlzIG9uZSBuZXcgbGluZSBoZXJlOiBhIHVuaW9uIGRlY2xhcmVkIHRocm91Z2gge0BsaW5rIFJlZ2lzdGVyZWRDb2RlfSBjYW5ub3QgaG9sZFxuICogYSBjb2RlIHRoYXQgaXMgbm90IG9uIGl0LCBhbmQgYHRlc3QvYXJjaGl0ZWN0dXJlL2hvbmVzdHktdm9jYWJ1bGFyeS50ZXN0LnRzYCBmYWlscyBvbiBhbiBleHBvcnRlZFxuICogdHlwZSBhbGlhcyBvZiBgZm9vdHByaW50anMvdHJhY2VgIHRoYXQgaXMgYSB1bmlvbiBvZiBzdHJpbmcgbGl0ZXJhbHMgbmVpdGhlciBpbnNpZGUgdGhlIHJlZ2lzdHJ5XG4gKiBub3IgbmFtZWQgdGhlcmUgYXMgbm90IGFuIGhvbmVzdHkgdm9jYWJ1bGFyeS4gVGhlIHZhbHVlcyBhcmUgdHlwZWQgYHN0cmluZ2AsIG5vdCBsaXRlcmFsIHR5cGVzLFxuICogb24gcHVycG9zZTogdGhlIHNlbnRlbmNlcyBhcmUgZm9yIGEgc2NyZWVuIGFuZCBtYXkgYmUgcmV3b3JkZWQ7IGEgY29uc3VtZXIgYnJhbmNoZXMgb24gdGhlIEtFWS5cbiAqL1xuZXhwb3J0IGNvbnN0IEhPTkVTVFlfQ09ERVMgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmZyZWV6ZSh7XG4gIC8vIOKUgOKUgCBhIHNsaWNlJ3Mgbm90ZXMg4oCUIGBIb25lc3R5Tm90ZS5jb2RlYCAoc2xpY2UvKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgJ2NvbnNlcnZhdGl2ZS1mZWQtZWRnZXMnOlxuICAgIFwiQXQgbGVhc3Qgb25lICdmZWQnIGVkZ2UgaXMgc3RhZ2UtbGV2ZWwgKGNvbnNlcnZhdGl2ZSk6IGl0cyB3cml0ZSBjYXJyaWVzIG5vIHBlci13cml0ZSByZWFkIHByb3ZlbmFuY2UsIHNvIHRoZSBlZGdlIG1heSBub3QgYmUgcmVhbCDigJQgdHVybiBvbiB3cml0ZVByb3ZlbmFuY2U6ICdyZWFkcy1wcmVmaXgnIGZvciBleGFjdCBlZGdlcy5cIixcbiAgJ25lc3RlZC1yb3dzJzpcbiAgICBcIkEgd3JpdGUgdGhpcyBhbnN3ZXIgcmVzdHMgb24gcmVhY2hlZCB0aGUga2V5IG9ubHkgdGhyb3VnaCBwYXRocyBpbnNpZGUgaXQgKGEgc3ViZmxvdydzIGlucHV0IHNlZWQsIGFuIG91dHB1dE1hcHBlciBtZXJnZS1iYWNrLCBhIGZvcmsgY2hpbGQncyBuYW1lc3BhY2UpLCBzbyBpdCBjaGFuZ2VkIHBhcnQgb2YgdGhlIGtleSdzIHZhbHVlLCBub3QgdGhlIHdob2xlOiBlYXJsaWVyIHdyaXRlcyBtYXkgYWNjb3VudCBmb3IgdGhlIHJlc3QsIGFuZCBhIHJlYWRlciBvZiB0aGUga2V5IG1heSBub3QgaGF2ZSByZWFkIHRoZSBwYXJ0IHRoYXQgd3JpdGUgY2hhbmdlZC5cIixcbiAgJ3ByZS1ydW4tb3JpZ2luJzpcbiAgICAnVGhlIHZhbHVlIGJlaW5nIGZvbGxvd2VkIHdhcyBhYnNlbnQgb3IgYWxyZWFkeSB0aGVyZSBiZWZvcmUgdGhlIGZpcnN0IHdyaXRlIHRoaXMgbG9nIGNhbiBzZWUgKGluaXRpYWwgc3RhdGUsIGZyb3plbiBydW4gaW5wdXQgb3IgYSBjbG9zdXJlKSwgc28gd2hvIHB1dCBpdCB0aGVyZSBpcyBvdXRzaWRlIHRoZSBjb21taXQgbG9nLicsXG4gICdyZWFkcy1ub3QtcmVjb3JkZWQnOlxuICAgIFwiVGhpcyBsb2cgY2FycmllcyBubyByZWNvcmRlZCByZWFkIGF0IGFsbCAodGhlIHJlYWRUcmFja2luZzogJ29mZicgc2lnbmF0dXJlKSwgc28gJ25vdGhpbmcgcmVhZCB0aGlzIHZhbHVlJyBpcyB1bmtub3dhYmxlIGhlcmUsIG5vdCB0cnVlLlwiLFxuICAndW5rbm93bi1rZXknOlxuICAgIFwiVGhpcyBsb2cgaGFzIG5vIHdyaXRlIGFuZCBubyByZWNvcmRlZCByZWFkIG9mIHRoZSBrZXksIHdoaWNoIGlzIG1vc3QgbGlrZWx5IGEgdHlwbyBvciB0aGUgd3JvbmcgcnVuJ3MgbG9nIHJhdGhlciB0aGFuIGEgdmFyaWFibGUgd2l0aCBubyBoaXN0b3J5LlwiLFxuICB0cnVuY2F0ZWQ6XG4gICAgJ0EgYnVkZ2V0IChtYXhEZXB0aCBvciBtYXhOb2RlcykgY3V0IHRoZSB3YWxrLCBzbyBtb3JlIG9mIHRoZSBhbnN3ZXIgZXhpc3RzIGJleW9uZCB0aGUgaG9yaXpvbiBpdCBzdG9wcGVkIGF0LicsXG4gIC8vIOKUgOKUgCB3aHkgYSBzbGljZSBoYXMgbm8gYW5zd2VyIOKAlCBgbWlzc2luZ2AgKHNsaWNlLzogTWlzc2luZ1NsaWNlUmVhc29uLCBNaXNzaW5nUHJvdmVuYW5jZVJlYXNvbikg4pSAXG4gICdlbXB0eS1sb2cnOlxuICAgICdUaGUgY29tbWl0IGxvZyBob2xkcyBubyBjb21taXQgYXQgYWxsIChub3RoaW5nIGhhcyBleGVjdXRlZCwgb3IgdGhlIGxvZyBoYW5kZWQgaW4gaXMgZW1wdHkpLCBzbyB0aGVyZSBpcyBubyBoaXN0b3J5IHRvIGFuc3dlciBmcm9tLicsXG4gICduZXZlci13cml0dGVuJzpcbiAgICAnTm8gY29tbWl0IGluIHRoZSByYW5nZSBhc2tlZCBhYm91dCB3cm90ZSB0aGUga2V5IOKAlCBub3QgaXRzIHdob2xlIHZhbHVlLCBub3QgYSBwYXRoIGluc2lkZSBpdCwgYW5kIG5vdCBhIGNvbnRhaW5lciBhcm91bmQgaXQgaW4gYSB3YXkgdGhhdCBjaGFuZ2VkIGl0IChhIGZvcndhcmQgc2xpY2Ugb3IgYSB0aW1lbGluZSBhbHNvIGZvdW5kIG5vIHJlY29yZGVkIHJlYWQgb24sIGluc2lkZSBvciBhcm91bmQgaXQpIOKAlCBzbyB0aGVyZSBpcyBubyB3cml0ZSB0byBzdGFydCBmcm9tOiBhbnkgdmFsdWUgaXQgaGFzIGNhbWUgZnJvbSB0aGUgaW5pdGlhbCBzdGF0ZSwgdGhlIGZyb3plbiBydW4gaW5wdXQgb3IgYSBjbG9zdXJlLCBub25lIG9mIHdoaWNoIHRoZSBjb21taXQgbG9nIGNhbiBzZWUuJyxcbiAgJ25vdC1hbi1hcnJheSc6XG4gICAgJ1RoZSBrZXkgd2FzIHdyaXR0ZW4sIGJ1dCBpdHMgdmFsdWUgYXQgdGhlIHBvaW50IGFza2VkIGFib3V0IGlzIG5vdCBhbiBhcnJheSAoYSBzY2FsYXIgb3Igb2JqZWN0IGtleSwgYSBkZWxldGVkIGtleSwgb3IgYSBtZXJnZSB0aGF0IGRlZ3JhZGVkIGl0KSwgc28gZWxlbWVudCBwcm92ZW5hbmNlIGRvZXMgbm90IGFwcGx5OiBzbGljZUZvcktleSBpcyB0aGUgcXVlcnkgZm9yIGl0LicsXG4gIC8vIOKUgOKUgCBob3cgYSBmZWQgZWRnZSB3YXMgYXR0cmlidXRlZCDigJQgYEZvcndhcmRFZGdlLmJhc2lzYCAoc2xpY2UvOiBGZWRCYXNpcykg4pSAXG4gICdwZXItd3JpdGUnOlxuICAgIFwiVGhpcyBmZWQgZWRnZSBpcyBleGFjdDogdGhlIGRvd25zdHJlYW0gd3JpdGUgY2FycmllcyBwZXItd3JpdGUgcmVhZCBwcm92ZW5hbmNlIChUcmFjZUVudHJ5LnJlYWRLZXlzLCByZWNvcmRlZCB1bmRlciB3cml0ZVByb3ZlbmFuY2U6ICdyZWFkcy1wcmVmaXgnKSBhbmQgdGhhdCBsaXN0IG5hbWVzIHRoZSBrZXksIHNvIHRoZSB2YWx1ZSB3YXMgcmVhZCBiZWZvcmUgdGhlIHdyaXRlIGl0IGZlZWRzLlwiLFxuICBzdGFnZTpcbiAgICAnVGhpcyBmZWQgZWRnZSBpcyBjb25zZXJ2YXRpdmU6IHRoZSBkb3duc3RyZWFtIHdyaXRlIGNhcnJpZXMgbm8gcGVyLXdyaXRlIHJlYWQgcHJvdmVuYW5jZSAodGhlIHdyaXRlUHJvdmVuYW5jZSBkaWFsIHdhcyBvZmYsIG9yIHRoZSBsb2cgaXMgbWl4ZWQpLCBzbyBhbGwgdGhhdCBpcyBrbm93biBpcyB0aGF0IGl0cyBzdGFnZSByZWFkIHRoaXMga2V5IGFuZCB3cm90ZSB0aGF0IHBhdGggaW4gc29tZSBvcmRlciwgYW5kIHRoZSBlZGdlIG1heSBub3QgYmUgcmVhbC4nLFxuICAvLyDilIDilIAgaG93IGFuIGVsZW1lbnQncyBiaXJ0aCB3YXMgYXR0cmlidXRlZCDigJQgYEVsZW1lbnRCaXJ0aC5iYXNpc2AgKHNsaWNlLzogQXR0cmlidXRpb25CYXNpcykg4pSAXG4gICdhcHBlbmQtdmVyYic6XG4gICAgXCJUaGUgZW5naW5lIHJlY29yZGVkIHRoZSBlbGVtZW50IGluIGFuIGFwcGVuZCByb3cncyB0YWlsIChob3cgY29tbWl0VmFsdWVzOiAnZGVsdGEnIHJlY29yZHMgYW4gYXJyYXkncyBncm93dGgpLCBzbyB0aGUgY29tbWl0IHRoYXQgYWRkZWQgaXQgaXMga25vd24gZXhhY3RseSwgbm90IGluZmVycmVkLlwiLFxuICAncHJlZml4LWluZmVyZW5jZSc6XG4gICAgJ0Egd2hvbGUtdmFsdWUgd3JpdGUgKGEgc2V0IG9yIGEgbWVyZ2UpIGtlcHQgdGhlIHByZXZpb3VzIGFycmF5IGFzIGl0cyBwcmVmaXgsIHNvIHRoZSBuZXcgdGFpbCBpcyBhdHRyaWJ1dGVkIHRvIHRoYXQgY29tbWl0IGJ5IGluZmVyZW5jZTogYSB3cml0ZSB0aGF0IHJlcGxhY2VkIHRoZSBhcnJheSB3aXRoIG9uZSB0aGF0IGhhcHBlbnMgdG8gYmVnaW4gdGhlIHNhbWUgd2F5IGxvb2tzIGlkZW50aWNhbC4nLFxuICAnd2hvbGUtdmFsdWUnOlxuICAgIFwiVGhpcyBjb21taXQgcGxhY2VkIHRoZSBhcnJheSB3aG9sZXNhbGUgKHRoZXJlIHdhcyBubyBlYXJsaWVyIGFycmF5LCBvciB0aGUgbmV3IG9uZSBkb2VzIG5vdCBiZWdpbiB3aXRoIGl0KSwgc28gZXZlcnkgZWxlbWVudCdzIGJpcnRoIHJlc2V0cyB0byB0aGlzIGNvbW1pdDogZXhhY3QsIGJ1dCBjb2Fyc2UuXCIsXG4gIC8vIOKUgOKUgCBob3cgYSBmb2xkIHdhcyBkZXJpdmVkIOKAlCBgRm9sZGVkU3RhdGUuYmFzaXNgICh0aW1lLXRyYXZlbC8pIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAnaW5pdGlhbCtsb2cnOlxuICAgICdUaGUgZm9sZCBzdGFydGVkIGZyb20gdGhlIGZvbGQgYmFzZSB0aGF0IHRyYXZlbGxlZCB3aXRoIHRoZSBsb2cgKGluaXRpYWxTdGF0ZSkgYW5kIHJlcGxheWVkIHRoZSBjb21taXQgbG9nIG9udG8gaXQsIHNvIG5vdGhpbmcgc2VlZGVkIGJlZm9yZSB0aGUgcnVuIGlzIG1pc3Npbmc7IHJvd3MgaXQgY291bGQgbm90IHJlYWQgYXJlIGxpc3RlZCBhcGFydCwgaW4gc2tpcHBlZC4nLFxuICAnbG9nLW9ubHknOlxuICAgICdObyBpbml0aWFsU3RhdGUgdHJhdmVsbGVkIHdpdGggdGhpcyBsb2cgKGEgc25hcHNob3Qgc3RvcmVkIGJlZm9yZSA5LjE3LCBhIHJlZGFjdGVkIHNuYXBzaG90IG9yIGEgaGFuZC1idWlsdCBsb2cpLCBzbyB0aGUgZm9sZCBzdGFydGVkIGZyb20gYW4gZW1wdHkgb2JqZWN0OiBhIGtleSBzZWVkZWQgYmVmb3JlIHRoZSBydW4gaXMgd2hvbGUgb25seSBvbmNlIGEgY29tbWl0IHNpbmNlIHdyb3RlIGl0cyB3aG9sZSB2YWx1ZSwgYW5kIHVudGlsIHRoZW4gaXQgaG9sZHMganVzdCB3aGF0IGl0cyBtZXJnZXMsIGFwcGVuZHMgYW5kIG5lc3RlZCB3cml0ZXMgYWRkZWQsIG9yIG5vdGhpbmcuJyxcbiAgLy8g4pSA4pSAIGEgcm93IG9mIGEgc3RvcmVkIGxvZyB0aGF0IGlzIG5vdCBhIGNvbW1pdCBidW5kbGUg4oCUIGBMb2dHYXBgIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAnbG9nLWdhcCc6XG4gICAgJ0Egcm93IG9mIHRoZSBzdG9yZWQgbG9nIGNvdWxkIG5vdCBiZSByZWFkIGFzIGEgY29tbWl0IGJ1bmRsZSwgc28gaXQga2VlcHMgaXRzIGluZGV4IGJ1dCBjb250cmlidXRlcyBubyBzdGF0ZSwgYW5kIGFueSBmb2xkIHRoYXQgY3Jvc3NlcyBpdCBpcyBtaXNzaW5nIHdoYXRldmVyIHRoYXQgcm93IHdyb3RlLicsXG4gIC8vIOKUgOKUgCB1bnRyYWNrZWQgcmVhZHMgYSBzdGFnZSBhbHNvIGNvbnN1bWVkIOKAlCBgQ2F1c2FsTm9kZS5pbmNvbXBsZXRlU291cmNlc2Ag4pSAXG4gICdpbmNvbXBsZXRlLXNvdXJjZXMnOlxuICAgICdUaGUgc3RhZ2UgYWxzbyBjb25zdW1lZCByZWFkIHBhdGhzIHRoYXQgYnlwYXNzIHJlYWQgdHJhY2tpbmcgKGFyZ3MsIGVudiBvciBhbiB1bnNoYWRvd2VkIHNpbGVudCByZWFkKSwgc28gYSBzbGljZSB0aHJvdWdoIGl0IG1heSBiZSBpbmNvbXBsZXRlOiB0aG9zZSByZWFkcyBwcm9kdWNlIG5vIHJlYWQtdG8td3JpdGUgZWRnZSB0byBmb2xsb3cuJyxcbiAgLy8g4pSA4pSAIHZhbHVlcyBzY3J1YmJlZCBhdCB3cml0ZSB0aW1lIOKAlCBgRm9sZGVkU3RhdGUucmVkYWN0ZWRgIC8gYHJlZGFjdGVkUGF0aHNgLCBhIHZhbHVlIGJhc2lzIOKUgFxuICByZWRhY3RlZDpcbiAgICBcIlZhbHVlcyBhdCB0aGUgcGF0aHMgbGlzdGVkIGluIHJlZGFjdGVkUGF0aHMgKGEgZm9sZCdzLCBvciBhIGNvbW1pdCdzIGluIHRoZSByYW5nZSBhIGtleSdzIHZhbHVlIHJlc3RzIG9uKSB3ZXJlIHNjcnViYmVkIHdoZW4gdGhleSB3ZXJlIHdyaXR0ZW4gKGJ5IGEgcmVkYWN0aW9uIHBvbGljeSwgb3IgYSB3cml0ZSBtYXJrZWQgcmVkYWN0ZWQpLCBzbyB3aGVyZSB0aGUgYW5zd2VyIGhvbGRzIHRoZSBsb2cncyBwbGFjZWhvbGRlciAnUkVEQUNURUQnLCBvciBsb3N0IGEga2V5IHVuZGVyIGEgY29udGFpbmVyIHRoZSBwbGFjZWhvbGRlciByZXBsYWNlZCwgaXQgc3RhbmRzIGluIGZvciBhIHZhbHVlIHRoZSBsb2cgbmV2ZXIgcmVjb3JkZWQuXCIsXG4gIC8vIOKUgOKUgCBob3cgb25lIGtleSdzIHZhbHVlIHdhcyByZWFkIG9mZiB0aGUgbG9nIOKAlCBgVmFsdWVCYXNpc2AgKGNvbW1pdFZhbHVlQXRXaXRoQmFzaXMpIOKUgFxuICBkZWxldGVkOlxuICAgIFwiVGhlIGtleSdzIGxhc3Qgd3JpdGUgaW4gdGhlIHJhbmdlIGFza2VkIGFib3V0IGxlZnQgaXQgYWJzZW50IChhIGRlbGV0ZSBvZiB0aGUga2V5IG9yIG9mIGEgY29udGFpbmVyIGFyb3VuZCBpdCwgb3IgYSBzZXQgb2YgYSBjb250YWluZXIgdGhhdCBubyBsb25nZXIgaG9sZHMgaXQpLCBzbyB0aGUgYW5zd2VyIGlzIHVuZGVmaW5lZCBiZWNhdXNlIHRoZSByZWNvcmQgc2F5cyB0aGUga2V5IHdhcyBnb25lIGF0IHRoYXQgcG9pbnQsIG5vdCBiZWNhdXNlIG5vdGhpbmcgd2FzIHJlY29yZGVkLlwiLFxuICAnZnJvbS1pbml0aWFsLXN0YXRlJzpcbiAgICBcIk5vIHNldCBvciBkZWxldGUgb2YgdGhlIGtleSwgb3Igb2YgYSBjb250YWluZXIgYXJvdW5kIGl0LCBpcyBpbiB0aGUgcmFuZ2UgYXNrZWQgYWJvdXQsIHNvIHRoZSBhbnN3ZXIgcmVzdHMgb24gdGhlIHZhbHVlIHRoZSBrZXkgaGFkIGJlZm9yZSB0aGUgcnVuOiBmb2xkZWQgZnJvbSB0aGUgaW5pdGlhbFN0YXRlIHBhc3NlZCBpbiB3aGVuIHRoZXJlIHdhcyBvbmUsIGFuZCBvdGhlcndpc2Ugb25seSB3aGF0IHRoZSBsb2cncyBtZXJnZXMsIGFwcGVuZHMgYW5kIG5lc3RlZCB3cml0ZXMgYWRkZWQgdG8gaXQgKG9yIG5vdGhpbmcpLCB3aGljaCBpcyBwYXJ0aWFsIGZvciBhIGtleSBzZWVkZWQgYmVmb3JlIHRoZSBydW4uXCIsXG59IHNhdGlzZmllcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTtcblxuLyoqIEFueSBjb2RlIGluIHtAbGluayBIT05FU1RZX0NPREVTfSDigJQgdGhlIGtleSBhIHJlYWRlciBsb29rcyBhbiBleHBsYW5hdGlvbiB1cCBieS4gKi9cbmV4cG9ydCB0eXBlIEhvbmVzdHlDb2RlID0ga2V5b2YgdHlwZW9mIEhPTkVTVFlfQ09ERVM7XG5cbi8qKlxuICogQSB1bmlvbiBvZiBob25lc3R5IGNvZGVzIGEgdHlwZSBERUNMQVJFUzogYFRgIG11c3QgYmUgYSBzdWJzZXQgb2Yge0BsaW5rIEhvbmVzdHlDb2RlfSwgb3IgdGhlXG4gKiBkZWNsYXJhdGlvbiBmYWlscyB0byBjb21waWxlIChUUzIzNDQpLlxuICpcbiAqIGBSZWdpc3RlcmVkQ29kZTxUPmAgaXMgYFRgIOKAlCBhbiBpZGVudGl0eSBhdCB0aGUgdHlwZSBsZXZlbCDigJQgc28gdGhlIHVuaW9uIGtlZXBzIGV4YWN0bHkgdGhlXG4gKiBtZW1iZXJzIGl0IHdhcyB3cml0dGVuIHdpdGggYW5kIGRvZXMgTk9UIHdpZGVuIHRvIGV2ZXJ5IGNvZGU6XG4gKiBgdHlwZSBGb2xkQmFzaXMgPSBSZWdpc3RlcmVkQ29kZTwnaW5pdGlhbCtsb2cnIHwgJ2xvZy1vbmx5Jz5gLlxuICovXG5leHBvcnQgdHlwZSBSZWdpc3RlcmVkQ29kZTxUIGV4dGVuZHMgSG9uZXN0eUNvZGU+ID0gVDtcbiJdfQ==
@@ -10,12 +10,14 @@ export { SharedMemory } from './SharedMemory.js';
10
10
  export { StageContext } from './StageContext.js';
11
11
  export { TransactionBuffer } from './TransactionBuffer.js';
12
12
  export type { RedactionVerdict } from './redaction.js';
13
- export { RedactionRule, redactPatch } from './redaction.js';
13
+ export { RedactionRule } from './redaction.js';
14
+ export { redactPatch } from './scrub.js';
14
15
  export type { RunDials, RunPolicy } from './runPolicy.js';
15
16
  export { DEFAULT_RUN_POLICY, runPolicy } from './runPolicy.js';
16
17
  export type { HonestyCode } from './honesty.js';
17
18
  export { HONESTY_CODES } from './honesty.js';
18
- export { LOG_PLACEHOLDER, SCOPE_PLACEHOLDER } from './placeholders.js';
19
+ export { LOG_PLACEHOLDER } from './placeholders.js';
20
+ export { SCOPE_PLACEHOLDER } from './redaction.js';
19
21
  export type { CommitBundle, CommitValuesMode, FlowControlType, FlowMessage, MemoryPatch, ReadSummaryMarker, ReadTrackingMode, RetentionPolicy, ScopeFactory, StageSnapshot, TraceEntry, UntrackedSource, WriteSummaryMarker, WriteTrackingMode, } from './types.js';
20
22
  export { READ_PREVIEW_LENGTH, SUMMARY_PREVIEW_LENGTH } from './types.js';
21
23
  export { UnknownVerbError } from './verbs.js';
@@ -11,14 +11,16 @@ export { EventLog } from './EventLog.js';
11
11
  export { SharedMemory } from './SharedMemory.js';
12
12
  export { StageContext } from './StageContext.js';
13
13
  export { TransactionBuffer } from './TransactionBuffer.js';
14
- export { RedactionRule, redactPatch } from './redaction.js';
14
+ export { RedactionRule } from './redaction.js';
15
+ export { redactPatch } from './scrub.js';
15
16
  export { DEFAULT_RUN_POLICY, runPolicy } from './runPolicy.js';
16
17
  export { HONESTY_CODES } from './honesty.js';
17
- // The two strings a redaction leaves where a value was (F4a; `REDACTED` is now `SCOPE_PLACEHOLDER`)
18
- export { LOG_PLACEHOLDER, SCOPE_PLACEHOLDER } from './placeholders.js';
18
+ // The two strings a redaction leaves where a value was, one per owner (F4a; split in C4): the record's, the verdict's
19
+ export { LOG_PLACEHOLDER } from './placeholders.js';
20
+ export { SCOPE_PLACEHOLDER } from './redaction.js';
19
21
  export { READ_PREVIEW_LENGTH, SUMMARY_PREVIEW_LENGTH } from './types.js';
20
22
  // The verb law's refusal: a commit row whose verb is not set | merge | append | delete
21
23
  export { UnknownVerbError } from './verbs.js';
22
24
  // Utilities
23
25
  export { applySmartMerge, deepSmartMerge, DELIM, getNestedValue, getRunAndGlobalPaths, normalisePath, pathSegments, setNestedValue, updateNestedValue, updateValue, } from './utils.js';
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21lbW9yeS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwQkFBMEI7QUFDMUI7Ozs7O0dBS0c7QUFFSCxVQUFVO0FBQ1YsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBSTNELE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJNUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSS9ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFN0Msb0dBQW9HO0FBQ3BHLE9BQU8sRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQW1CdkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLHNCQUFzQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXpFLHVGQUF1RjtBQUN2RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFOUMsWUFBWTtBQUNaLE9BQU8sRUFDTCxlQUFlLEVBQ2YsY0FBYyxFQUNkLEtBQUssRUFDTCxjQUFjLEVBQ2Qsb0JBQW9CLEVBQ3BCLGFBQWEsRUFDYixZQUFZLEVBQ1osY0FBYyxFQUNkLGlCQUFpQixFQUNqQixXQUFXLEdBQ1osTUFBTSxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBpc3RhbmJ1bCBpZ25vcmUgZmlsZSAqL1xuLyoqXG4gKiBtZW1vcnkvIOKAlCBGb3VuZGF0aW9uIGxpYnJhcnkgKHplcm8gZXh0ZXJuYWwgZGVwcylcbiAqXG4gKiBUcmFuc2FjdGlvbmFsIHN0YXRlIG1hbmFnZW1lbnQgd2l0aCBuYW1lc3BhY2UgaXNvbGF0aW9uLFxuICogYXRvbWljIGNvbW1pdHMsIGFuZCBldmVudC1zb3VyY2VkIHRpbWUtdHJhdmVsLlxuICovXG5cbi8vIENsYXNzZXNcbmV4cG9ydCB7IERpYWdub3N0aWNDb2xsZWN0b3IgfSBmcm9tICcuL0RpYWdub3N0aWNDb2xsZWN0b3IuanMnO1xuZXhwb3J0IHsgRXZlbnRMb2cgfSBmcm9tICcuL0V2ZW50TG9nLmpzJztcbmV4cG9ydCB7IFNoYXJlZE1lbW9yeSB9IGZyb20gJy4vU2hhcmVkTWVtb3J5LmpzJztcbmV4cG9ydCB7IFN0YWdlQ29udGV4dCB9IGZyb20gJy4vU3RhZ2VDb250ZXh0LmpzJztcbmV4cG9ydCB7IFRyYW5zYWN0aW9uQnVmZmVyIH0gZnJvbSAnLi9UcmFuc2FjdGlvbkJ1ZmZlci5qcyc7XG5cbi8vIFJlZGFjdGlvbiDigJQgdGhlIE9ORSBvd25lciBvZiB0aGUgdmVyZGljdCAoOS4xOS4wKVxuZXhwb3J0IHR5cGUgeyBSZWRhY3Rpb25WZXJkaWN0IH0gZnJvbSAnLi9yZWRhY3Rpb24uanMnO1xuZXhwb3J0IHsgUmVkYWN0aW9uUnVsZSwgcmVkYWN0UGF0Y2ggfSBmcm9tICcuL3JlZGFjdGlvbi5qcyc7XG5cbi8vIFRoZSBydW4ncyBwb2xpY3kg4oCUIHRoZSBmb3VyIGRpYWxzLCB0aGUgcnVsZSwgdGhlIG1pcnJvciBmbGFnIGFzIE9ORSBvYmplY3QgKEY1KVxuZXhwb3J0IHR5cGUgeyBSdW5EaWFscywgUnVuUG9saWN5IH0gZnJvbSAnLi9ydW5Qb2xpY3kuanMnO1xuZXhwb3J0IHsgREVGQVVMVF9SVU5fUE9MSUNZLCBydW5Qb2xpY3kgfSBmcm9tICcuL3J1blBvbGljeS5qcyc7XG5cbi8vIEhvbmVzdHkg4oCUIHRoZSBPTkUgdm9jYWJ1bGFyeSBmb3Igd2hhdCBhIHJlYWRlciBjYW5ub3Qgc2VlIChGNGEpOiBjb2RlIOKGkiB0aGUgb25lIHNlbnRlbmNlXG5leHBvcnQgdHlwZSB7IEhvbmVzdHlDb2RlIH0gZnJvbSAnLi9ob25lc3R5LmpzJztcbmV4cG9ydCB7IEhPTkVTVFlfQ09ERVMgfSBmcm9tICcuL2hvbmVzdHkuanMnO1xuXG4vLyBUaGUgdHdvIHN0cmluZ3MgYSByZWRhY3Rpb24gbGVhdmVzIHdoZXJlIGEgdmFsdWUgd2FzIChGNGE7IGBSRURBQ1RFRGAgaXMgbm93IGBTQ09QRV9QTEFDRUhPTERFUmApXG5leHBvcnQgeyBMT0dfUExBQ0VIT0xERVIsIFNDT1BFX1BMQUNFSE9MREVSIH0gZnJvbSAnLi9wbGFjZWhvbGRlcnMuanMnO1xuXG4vLyBUeXBlc1xuZXhwb3J0IHR5cGUge1xuICBDb21taXRCdW5kbGUsXG4gIENvbW1pdFZhbHVlc01vZGUsXG4gIEZsb3dDb250cm9sVHlwZSxcbiAgRmxvd01lc3NhZ2UsXG4gIE1lbW9yeVBhdGNoLFxuICBSZWFkU3VtbWFyeU1hcmtlcixcbiAgUmVhZFRyYWNraW5nTW9kZSxcbiAgUmV0ZW50aW9uUG9saWN5LFxuICBTY29wZUZhY3RvcnksXG4gIFN0YWdlU25hcHNob3QsXG4gIFRyYWNlRW50cnksXG4gIFVudHJhY2tlZFNvdXJjZSxcbiAgV3JpdGVTdW1tYXJ5TWFya2VyLFxuICBXcml0ZVRyYWNraW5nTW9kZSxcbn0gZnJvbSAnLi90eXBlcy5qcyc7XG5leHBvcnQgeyBSRUFEX1BSRVZJRVdfTEVOR1RILCBTVU1NQVJZX1BSRVZJRVdfTEVOR1RIIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8vIFRoZSB2ZXJiIGxhdydzIHJlZnVzYWw6IGEgY29tbWl0IHJvdyB3aG9zZSB2ZXJiIGlzIG5vdCBzZXQgfCBtZXJnZSB8IGFwcGVuZCB8IGRlbGV0ZVxuZXhwb3J0IHsgVW5rbm93blZlcmJFcnJvciB9IGZyb20gJy4vdmVyYnMuanMnO1xuXG4vLyBVdGlsaXRpZXNcbmV4cG9ydCB7XG4gIGFwcGx5U21hcnRNZXJnZSxcbiAgZGVlcFNtYXJ0TWVyZ2UsXG4gIERFTElNLFxuICBnZXROZXN0ZWRWYWx1ZSxcbiAgZ2V0UnVuQW5kR2xvYmFsUGF0aHMsXG4gIG5vcm1hbGlzZVBhdGgsXG4gIHBhdGhTZWdtZW50cyxcbiAgc2V0TmVzdGVkVmFsdWUsXG4gIHVwZGF0ZU5lc3RlZFZhbHVlLFxuICB1cGRhdGVWYWx1ZSxcbn0gZnJvbSAnLi91dGlscy5qcyc7XG4iXX0=
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21lbW9yeS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwQkFBMEI7QUFDMUI7Ozs7O0dBS0c7QUFFSCxVQUFVO0FBQ1YsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBSTNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBSXpDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUkvRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTdDLHNIQUFzSDtBQUN0SCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFtQm5ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUV6RSx1RkFBdUY7QUFDdkYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRTlDLFlBQVk7QUFDWixPQUFPLEVBQ0wsZUFBZSxFQUNmLGNBQWMsRUFDZCxLQUFLLEVBQ0wsY0FBYyxFQUNkLG9CQUFvQixFQUNwQixhQUFhLEVBQ2IsWUFBWSxFQUNaLGNBQWMsRUFDZCxpQkFBaUIsRUFDakIsV0FBVyxHQUNaLE1BQU0sWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogaXN0YW5idWwgaWdub3JlIGZpbGUgKi9cbi8qKlxuICogbWVtb3J5LyDigJQgRm91bmRhdGlvbiBsaWJyYXJ5ICh6ZXJvIGV4dGVybmFsIGRlcHMpXG4gKlxuICogVHJhbnNhY3Rpb25hbCBzdGF0ZSBtYW5hZ2VtZW50IHdpdGggbmFtZXNwYWNlIGlzb2xhdGlvbixcbiAqIGF0b21pYyBjb21taXRzLCBhbmQgZXZlbnQtc291cmNlZCB0aW1lLXRyYXZlbC5cbiAqL1xuXG4vLyBDbGFzc2VzXG5leHBvcnQgeyBEaWFnbm9zdGljQ29sbGVjdG9yIH0gZnJvbSAnLi9EaWFnbm9zdGljQ29sbGVjdG9yLmpzJztcbmV4cG9ydCB7IEV2ZW50TG9nIH0gZnJvbSAnLi9FdmVudExvZy5qcyc7XG5leHBvcnQgeyBTaGFyZWRNZW1vcnkgfSBmcm9tICcuL1NoYXJlZE1lbW9yeS5qcyc7XG5leHBvcnQgeyBTdGFnZUNvbnRleHQgfSBmcm9tICcuL1N0YWdlQ29udGV4dC5qcyc7XG5leHBvcnQgeyBUcmFuc2FjdGlvbkJ1ZmZlciB9IGZyb20gJy4vVHJhbnNhY3Rpb25CdWZmZXIuanMnO1xuXG4vLyBSZWRhY3Rpb24g4oCUIHRoZSBPTkUgb3duZXIgb2YgdGhlIHZlcmRpY3QgKDkuMTkuMCk7IHRoZSBsb2cncyBzY3J1YiBpcyB0aGUgcmVjb3JkJ3MgKHNjcnViLnRzLCBDNClcbmV4cG9ydCB0eXBlIHsgUmVkYWN0aW9uVmVyZGljdCB9IGZyb20gJy4vcmVkYWN0aW9uLmpzJztcbmV4cG9ydCB7IFJlZGFjdGlvblJ1bGUgfSBmcm9tICcuL3JlZGFjdGlvbi5qcyc7XG5leHBvcnQgeyByZWRhY3RQYXRjaCB9IGZyb20gJy4vc2NydWIuanMnO1xuXG4vLyBUaGUgcnVuJ3MgcG9saWN5IOKAlCB0aGUgZm91ciBkaWFscywgdGhlIHJ1bGUsIHRoZSBtaXJyb3IgZmxhZyBhcyBPTkUgb2JqZWN0IChGNSlcbmV4cG9ydCB0eXBlIHsgUnVuRGlhbHMsIFJ1blBvbGljeSB9IGZyb20gJy4vcnVuUG9saWN5LmpzJztcbmV4cG9ydCB7IERFRkFVTFRfUlVOX1BPTElDWSwgcnVuUG9saWN5IH0gZnJvbSAnLi9ydW5Qb2xpY3kuanMnO1xuXG4vLyBIb25lc3R5IOKAlCB0aGUgT05FIHZvY2FidWxhcnkgZm9yIHdoYXQgYSByZWFkZXIgY2Fubm90IHNlZSAoRjRhKTogY29kZSDihpIgdGhlIG9uZSBzZW50ZW5jZVxuZXhwb3J0IHR5cGUgeyBIb25lc3R5Q29kZSB9IGZyb20gJy4vaG9uZXN0eS5qcyc7XG5leHBvcnQgeyBIT05FU1RZX0NPREVTIH0gZnJvbSAnLi9ob25lc3R5LmpzJztcblxuLy8gVGhlIHR3byBzdHJpbmdzIGEgcmVkYWN0aW9uIGxlYXZlcyB3aGVyZSBhIHZhbHVlIHdhcywgb25lIHBlciBvd25lciAoRjRhOyBzcGxpdCBpbiBDNCk6IHRoZSByZWNvcmQncywgdGhlIHZlcmRpY3Qnc1xuZXhwb3J0IHsgTE9HX1BMQUNFSE9MREVSIH0gZnJvbSAnLi9wbGFjZWhvbGRlcnMuanMnO1xuZXhwb3J0IHsgU0NPUEVfUExBQ0VIT0xERVIgfSBmcm9tICcuL3JlZGFjdGlvbi5qcyc7XG5cbi8vIFR5cGVzXG5leHBvcnQgdHlwZSB7XG4gIENvbW1pdEJ1bmRsZSxcbiAgQ29tbWl0VmFsdWVzTW9kZSxcbiAgRmxvd0NvbnRyb2xUeXBlLFxuICBGbG93TWVzc2FnZSxcbiAgTWVtb3J5UGF0Y2gsXG4gIFJlYWRTdW1tYXJ5TWFya2VyLFxuICBSZWFkVHJhY2tpbmdNb2RlLFxuICBSZXRlbnRpb25Qb2xpY3ksXG4gIFNjb3BlRmFjdG9yeSxcbiAgU3RhZ2VTbmFwc2hvdCxcbiAgVHJhY2VFbnRyeSxcbiAgVW50cmFja2VkU291cmNlLFxuICBXcml0ZVN1bW1hcnlNYXJrZXIsXG4gIFdyaXRlVHJhY2tpbmdNb2RlLFxufSBmcm9tICcuL3R5cGVzLmpzJztcbmV4cG9ydCB7IFJFQURfUFJFVklFV19MRU5HVEgsIFNVTU1BUllfUFJFVklFV19MRU5HVEggfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLy8gVGhlIHZlcmIgbGF3J3MgcmVmdXNhbDogYSBjb21taXQgcm93IHdob3NlIHZlcmIgaXMgbm90IHNldCB8IG1lcmdlIHwgYXBwZW5kIHwgZGVsZXRlXG5leHBvcnQgeyBVbmtub3duVmVyYkVycm9yIH0gZnJvbSAnLi92ZXJicy5qcyc7XG5cbi8vIFV0aWxpdGllc1xuZXhwb3J0IHtcbiAgYXBwbHlTbWFydE1lcmdlLFxuICBkZWVwU21hcnRNZXJnZSxcbiAgREVMSU0sXG4gIGdldE5lc3RlZFZhbHVlLFxuICBnZXRSdW5BbmRHbG9iYWxQYXRocyxcbiAgbm9ybWFsaXNlUGF0aCxcbiAgcGF0aFNlZ21lbnRzLFxuICBzZXROZXN0ZWRWYWx1ZSxcbiAgdXBkYXRlTmVzdGVkVmFsdWUsXG4gIHVwZGF0ZVZhbHVlLFxufSBmcm9tICcuL3V0aWxzLmpzJztcbiJdfQ==
@@ -1,44 +1,39 @@
1
1
  /**
2
- * placeholders.ts — the two strings a redaction leaves where a value was.
2
+ * placeholders.ts — the string a redaction leaves where a value was, in the RECORD.
3
3
  *
4
- * WHY THIS FILE EXISTS. Before F4a six files each spelled one of these strings as a literal, and a
5
- * spelling kept in six places is a placeholder a reader can no longer match on. Every `src/` file
6
- * that writes one now imports it from here, and `test/architecture/placeholders.test.ts` pins that
7
- * no other `src/` file spells either.
4
+ * WHY THIS FILE EXISTS. Before F4a six files each spelled a placeholder as a literal, and a spelling
5
+ * kept in six places is a placeholder a reader can no longer match on. Every `src/` file that writes
6
+ * the log's placeholder imports it from here, and `test/architecture/placeholders.test.ts` pins that
7
+ * no other `src/` file spells it.
8
8
  *
9
- * WHY TWO, AND WHY NOT UNIFIED. Both are historical and stored recordings hold the log one, so
10
- * neither string may change. Which one a reader sees depends on WHERE it reads: the commit log and
11
- * everything served from it say {@link LOG_PLACEHOLDER}; the scope channel says
12
- * {@link SCOPE_PLACEHOLDER} — except `onSubflowExit.outputState`, which carries the log's string
13
- * whenever a policy keeps a mirror (see {@link SCOPE_PLACEHOLDER}).
9
+ * ONE STRING HERE, ITS TWIN ON THE VERDICT'S SIDE (C4, review N2). A redaction leaves one of two
10
+ * strings, and both are historical, so neither may change (stored recordings hold this one). Which
11
+ * one a reader sees depends on WHERE it reads, and each has the owner its reader has:
12
+ * - {@link LOG_PLACEHOLDER} (`'REDACTED'`, here) is a RECORD byte: the commit log and everything
13
+ * served from it — written into the log by the record's scrub (`memory/scrub.ts`, L2), and
14
+ * passed by the two places that serve a mirror (`runner/ExecutionRuntime.ts`, the mirror's
15
+ * seed; `engine/handlers/SubflowExecutor.ts`, a subflow's served state). The readers
16
+ * (`slice/`, `time-travel/`) only name it in their docs: they meet it as data in the log;
17
+ * - `SCOPE_PLACEHOLDER` (`'[REDACTED]'`) is the ENGINE's: the scope channel's retained reads and
18
+ * writes, recorder events, the narrative. It lives beside the verdict that writes it
19
+ * (`memory/redaction.ts`, L4). Until C4 both sat in this file ("two placeholders, one leaf");
20
+ * the record took the engine's string with it.
14
21
  *
15
22
  * WHY A LEAF OF ITS OWN (and not beside `honesty.ts · HONESTY_CODES`). Different readers, different
16
- * reasons to change: these two strings are read by the engine's WRITE path on every redacted run,
17
- * the honesty registry by a reader that explains a recording — and the registry's sentences have no
18
- * business in the bundle of an app that only runs charts. This file imports NOTHING, so it is L0:
19
- * `memory/redaction.ts` (L2) writes both — the log one in `scrubPatch` (and the public `redactPatch`), the scope one in `RedactionRule`
20
- * (`redactPatch` lived in `memory/utils.ts`, L1, until 9.33.0) — the layer table is `scripts/layering.config.cjs`.
23
+ * reasons to change: this string is written on the engine's WRITE path on every redacted run, the
24
+ * honesty registry is read by a reader that explains a recording — and the registry's sentences have
25
+ * no business in the bundle of an app that only runs charts. This file imports NOTHING, so it is L0
26
+ * (the layer table is `scripts/layering.config.cjs`).
21
27
  */
22
28
  /**
23
29
  * What the COMMIT LOG and the redacted MIRROR carry where a value was scrubbed.
24
30
  *
25
- * `memory/redaction.ts · scrubPatch` writes it into the patch the log records (both encodings), and the
31
+ * `memory/scrub.ts · scrubPatch` writes it into the patch the log records (both encodings), and the
26
32
  * mirror's seed is scrubbed with the same string (`runner/ExecutionRuntime.ts`), so a fold of the log
27
33
  * reproduces it (`stateAt` → `FoldedState.redactedPaths`) and a slice or an element birth, which
28
34
  * re-serve the log's bytes, show it too. A subflow's SERVED state is the subflow's own nested mirror
29
35
  * (9.20.0): `subflowResults[*].treeContext.globalContext` under `getSnapshot({ redact: true })`, and
30
36
  * `onSubflowExit.outputState` whenever a policy keeps that mirror — so those carry this string as
31
- * well, not {@link SCOPE_PLACEHOLDER}.
37
+ * well, not the scope channel's `SCOPE_PLACEHOLDER` (`memory/redaction.ts`).
32
38
  */
33
39
  export declare const LOG_PLACEHOLDER = "REDACTED";
34
- /**
35
- * What the SCOPE CHANNEL carries where a value was scrubbed: a scope recorder's read, write and
36
- * commit events, the `stageReads` / `stageWrites` retention, the narrative, a decision's evidence, an
37
- * emit payload matched by `emitPatterns`, and a subflow's narrated seed (`onSubflowEntry`).
38
- *
39
- * NOT every recorder event: `onSubflowExit.outputState` serves the subflow's redacted mirror when a
40
- * policy keeps one, and so carries {@link LOG_PLACEHOLDER} (without a mirror — per-call marks alone —
41
- * it is the subflow's heap retained under the rule, with this string). The string did not change
42
- * when it moved here — it was `REDACTED`, in `memory/redaction.ts`, until then.
43
- */
44
- export declare const SCOPE_PLACEHOLDER = "[REDACTED]";
@@ -1,45 +1,40 @@
1
1
  /**
2
- * placeholders.ts — the two strings a redaction leaves where a value was.
2
+ * placeholders.ts — the string a redaction leaves where a value was, in the RECORD.
3
3
  *
4
- * WHY THIS FILE EXISTS. Before F4a six files each spelled one of these strings as a literal, and a
5
- * spelling kept in six places is a placeholder a reader can no longer match on. Every `src/` file
6
- * that writes one now imports it from here, and `test/architecture/placeholders.test.ts` pins that
7
- * no other `src/` file spells either.
4
+ * WHY THIS FILE EXISTS. Before F4a six files each spelled a placeholder as a literal, and a spelling
5
+ * kept in six places is a placeholder a reader can no longer match on. Every `src/` file that writes
6
+ * the log's placeholder imports it from here, and `test/architecture/placeholders.test.ts` pins that
7
+ * no other `src/` file spells it.
8
8
  *
9
- * WHY TWO, AND WHY NOT UNIFIED. Both are historical and stored recordings hold the log one, so
10
- * neither string may change. Which one a reader sees depends on WHERE it reads: the commit log and
11
- * everything served from it say {@link LOG_PLACEHOLDER}; the scope channel says
12
- * {@link SCOPE_PLACEHOLDER} — except `onSubflowExit.outputState`, which carries the log's string
13
- * whenever a policy keeps a mirror (see {@link SCOPE_PLACEHOLDER}).
9
+ * ONE STRING HERE, ITS TWIN ON THE VERDICT'S SIDE (C4, review N2). A redaction leaves one of two
10
+ * strings, and both are historical, so neither may change (stored recordings hold this one). Which
11
+ * one a reader sees depends on WHERE it reads, and each has the owner its reader has:
12
+ * - {@link LOG_PLACEHOLDER} (`'REDACTED'`, here) is a RECORD byte: the commit log and everything
13
+ * served from it — written into the log by the record's scrub (`memory/scrub.ts`, L2), and
14
+ * passed by the two places that serve a mirror (`runner/ExecutionRuntime.ts`, the mirror's
15
+ * seed; `engine/handlers/SubflowExecutor.ts`, a subflow's served state). The readers
16
+ * (`slice/`, `time-travel/`) only name it in their docs: they meet it as data in the log;
17
+ * - `SCOPE_PLACEHOLDER` (`'[REDACTED]'`) is the ENGINE's: the scope channel's retained reads and
18
+ * writes, recorder events, the narrative. It lives beside the verdict that writes it
19
+ * (`memory/redaction.ts`, L4). Until C4 both sat in this file ("two placeholders, one leaf");
20
+ * the record took the engine's string with it.
14
21
  *
15
22
  * WHY A LEAF OF ITS OWN (and not beside `honesty.ts · HONESTY_CODES`). Different readers, different
16
- * reasons to change: these two strings are read by the engine's WRITE path on every redacted run,
17
- * the honesty registry by a reader that explains a recording — and the registry's sentences have no
18
- * business in the bundle of an app that only runs charts. This file imports NOTHING, so it is L0:
19
- * `memory/redaction.ts` (L2) writes both — the log one in `scrubPatch` (and the public `redactPatch`), the scope one in `RedactionRule`
20
- * (`redactPatch` lived in `memory/utils.ts`, L1, until 9.33.0) — the layer table is `scripts/layering.config.cjs`.
23
+ * reasons to change: this string is written on the engine's WRITE path on every redacted run, the
24
+ * honesty registry is read by a reader that explains a recording — and the registry's sentences have
25
+ * no business in the bundle of an app that only runs charts. This file imports NOTHING, so it is L0
26
+ * (the layer table is `scripts/layering.config.cjs`).
21
27
  */
22
28
  /**
23
29
  * What the COMMIT LOG and the redacted MIRROR carry where a value was scrubbed.
24
30
  *
25
- * `memory/redaction.ts · scrubPatch` writes it into the patch the log records (both encodings), and the
31
+ * `memory/scrub.ts · scrubPatch` writes it into the patch the log records (both encodings), and the
26
32
  * mirror's seed is scrubbed with the same string (`runner/ExecutionRuntime.ts`), so a fold of the log
27
33
  * reproduces it (`stateAt` → `FoldedState.redactedPaths`) and a slice or an element birth, which
28
34
  * re-serve the log's bytes, show it too. A subflow's SERVED state is the subflow's own nested mirror
29
35
  * (9.20.0): `subflowResults[*].treeContext.globalContext` under `getSnapshot({ redact: true })`, and
30
36
  * `onSubflowExit.outputState` whenever a policy keeps that mirror — so those carry this string as
31
- * well, not {@link SCOPE_PLACEHOLDER}.
37
+ * well, not the scope channel's `SCOPE_PLACEHOLDER` (`memory/redaction.ts`).
32
38
  */
33
39
  export const LOG_PLACEHOLDER = 'REDACTED';
34
- /**
35
- * What the SCOPE CHANNEL carries where a value was scrubbed: a scope recorder's read, write and
36
- * commit events, the `stageReads` / `stageWrites` retention, the narrative, a decision's evidence, an
37
- * emit payload matched by `emitPatterns`, and a subflow's narrated seed (`onSubflowEntry`).
38
- *
39
- * NOT every recorder event: `onSubflowExit.outputState` serves the subflow's redacted mirror when a
40
- * policy keeps one, and so carries {@link LOG_PLACEHOLDER} (without a mirror — per-call marks alone —
41
- * it is the subflow's heap retained under the rule, with this string). The string did not change
42
- * when it moved here — it was `REDACTED`, in `memory/redaction.ts`, until then.
43
- */
44
- export const SCOPE_PLACEHOLDER = '[REDACTED]';
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2Vob2xkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tZW1vcnkvcGxhY2Vob2xkZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUVIOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDO0FBRTFDOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogcGxhY2Vob2xkZXJzLnRzIOKAlCB0aGUgdHdvIHN0cmluZ3MgYSByZWRhY3Rpb24gbGVhdmVzIHdoZXJlIGEgdmFsdWUgd2FzLlxuICpcbiAqIFdIWSBUSElTIEZJTEUgRVhJU1RTLiBCZWZvcmUgRjRhIHNpeCBmaWxlcyBlYWNoIHNwZWxsZWQgb25lIG9mIHRoZXNlIHN0cmluZ3MgYXMgYSBsaXRlcmFsLCBhbmQgYVxuICogc3BlbGxpbmcga2VwdCBpbiBzaXggcGxhY2VzIGlzIGEgcGxhY2Vob2xkZXIgYSByZWFkZXIgY2FuIG5vIGxvbmdlciBtYXRjaCBvbi4gRXZlcnkgYHNyYy9gIGZpbGVcbiAqIHRoYXQgd3JpdGVzIG9uZSBub3cgaW1wb3J0cyBpdCBmcm9tIGhlcmUsIGFuZCBgdGVzdC9hcmNoaXRlY3R1cmUvcGxhY2Vob2xkZXJzLnRlc3QudHNgIHBpbnMgdGhhdFxuICogbm8gb3RoZXIgYHNyYy9gIGZpbGUgc3BlbGxzIGVpdGhlci5cbiAqXG4gKiBXSFkgVFdPLCBBTkQgV0hZIE5PVCBVTklGSUVELiBCb3RoIGFyZSBoaXN0b3JpY2FsIGFuZCBzdG9yZWQgcmVjb3JkaW5ncyBob2xkIHRoZSBsb2cgb25lLCBzb1xuICogbmVpdGhlciBzdHJpbmcgbWF5IGNoYW5nZS4gV2hpY2ggb25lIGEgcmVhZGVyIHNlZXMgZGVwZW5kcyBvbiBXSEVSRSBpdCByZWFkczogdGhlIGNvbW1pdCBsb2cgYW5kXG4gKiBldmVyeXRoaW5nIHNlcnZlZCBmcm9tIGl0IHNheSB7QGxpbmsgTE9HX1BMQUNFSE9MREVSfTsgdGhlIHNjb3BlIGNoYW5uZWwgc2F5c1xuICoge0BsaW5rIFNDT1BFX1BMQUNFSE9MREVSfSDigJQgZXhjZXB0IGBvblN1YmZsb3dFeGl0Lm91dHB1dFN0YXRlYCwgd2hpY2ggY2FycmllcyB0aGUgbG9nJ3Mgc3RyaW5nXG4gKiB3aGVuZXZlciBhIHBvbGljeSBrZWVwcyBhIG1pcnJvciAoc2VlIHtAbGluayBTQ09QRV9QTEFDRUhPTERFUn0pLlxuICpcbiAqIFdIWSBBIExFQUYgT0YgSVRTIE9XTiAoYW5kIG5vdCBiZXNpZGUgYGhvbmVzdHkudHMgwrcgSE9ORVNUWV9DT0RFU2ApLiBEaWZmZXJlbnQgcmVhZGVycywgZGlmZmVyZW50XG4gKiByZWFzb25zIHRvIGNoYW5nZTogdGhlc2UgdHdvIHN0cmluZ3MgYXJlIHJlYWQgYnkgdGhlIGVuZ2luZSdzIFdSSVRFIHBhdGggb24gZXZlcnkgcmVkYWN0ZWQgcnVuLFxuICogdGhlIGhvbmVzdHkgcmVnaXN0cnkgYnkgYSByZWFkZXIgdGhhdCBleHBsYWlucyBhIHJlY29yZGluZyDigJQgYW5kIHRoZSByZWdpc3RyeSdzIHNlbnRlbmNlcyBoYXZlIG5vXG4gKiBidXNpbmVzcyBpbiB0aGUgYnVuZGxlIG9mIGFuIGFwcCB0aGF0IG9ubHkgcnVucyBjaGFydHMuIFRoaXMgZmlsZSBpbXBvcnRzIE5PVEhJTkcsIHNvIGl0IGlzIEwwOlxuICogYG1lbW9yeS9yZWRhY3Rpb24udHNgIChMMikgd3JpdGVzIGJvdGgg4oCUIHRoZSBsb2cgb25lIGluIGBzY3J1YlBhdGNoYCAoYW5kIHRoZSBwdWJsaWMgYHJlZGFjdFBhdGNoYCksIHRoZSBzY29wZSBvbmUgaW4gYFJlZGFjdGlvblJ1bGVgXG4gKiAoYHJlZGFjdFBhdGNoYCBsaXZlZCBpbiBgbWVtb3J5L3V0aWxzLnRzYCwgTDEsIHVudGlsIDkuMzMuMCkg4oCUIHRoZSBsYXllciB0YWJsZSBpcyBgc2NyaXB0cy9sYXllcmluZy5jb25maWcuY2pzYC5cbiAqL1xuXG4vKipcbiAqIFdoYXQgdGhlIENPTU1JVCBMT0cgYW5kIHRoZSByZWRhY3RlZCBNSVJST1IgY2Fycnkgd2hlcmUgYSB2YWx1ZSB3YXMgc2NydWJiZWQuXG4gKlxuICogYG1lbW9yeS9yZWRhY3Rpb24udHMgwrcgc2NydWJQYXRjaGAgd3JpdGVzIGl0IGludG8gdGhlIHBhdGNoIHRoZSBsb2cgcmVjb3JkcyAoYm90aCBlbmNvZGluZ3MpLCBhbmQgdGhlXG4gKiBtaXJyb3IncyBzZWVkIGlzIHNjcnViYmVkIHdpdGggdGhlIHNhbWUgc3RyaW5nIChgcnVubmVyL0V4ZWN1dGlvblJ1bnRpbWUudHNgKSwgc28gYSBmb2xkIG9mIHRoZSBsb2dcbiAqIHJlcHJvZHVjZXMgaXQgKGBzdGF0ZUF0YCDihpIgYEZvbGRlZFN0YXRlLnJlZGFjdGVkUGF0aHNgKSBhbmQgYSBzbGljZSBvciBhbiBlbGVtZW50IGJpcnRoLCB3aGljaFxuICogcmUtc2VydmUgdGhlIGxvZydzIGJ5dGVzLCBzaG93IGl0IHRvby4gQSBzdWJmbG93J3MgU0VSVkVEIHN0YXRlIGlzIHRoZSBzdWJmbG93J3Mgb3duIG5lc3RlZCBtaXJyb3JcbiAqICg5LjIwLjApOiBgc3ViZmxvd1Jlc3VsdHNbKl0udHJlZUNvbnRleHQuZ2xvYmFsQ29udGV4dGAgdW5kZXIgYGdldFNuYXBzaG90KHsgcmVkYWN0OiB0cnVlIH0pYCwgYW5kXG4gKiBgb25TdWJmbG93RXhpdC5vdXRwdXRTdGF0ZWAgd2hlbmV2ZXIgYSBwb2xpY3kga2VlcHMgdGhhdCBtaXJyb3Ig4oCUIHNvIHRob3NlIGNhcnJ5IHRoaXMgc3RyaW5nIGFzXG4gKiB3ZWxsLCBub3Qge0BsaW5rIFNDT1BFX1BMQUNFSE9MREVSfS5cbiAqL1xuZXhwb3J0IGNvbnN0IExPR19QTEFDRUhPTERFUiA9ICdSRURBQ1RFRCc7XG5cbi8qKlxuICogV2hhdCB0aGUgU0NPUEUgQ0hBTk5FTCBjYXJyaWVzIHdoZXJlIGEgdmFsdWUgd2FzIHNjcnViYmVkOiBhIHNjb3BlIHJlY29yZGVyJ3MgcmVhZCwgd3JpdGUgYW5kXG4gKiBjb21taXQgZXZlbnRzLCB0aGUgYHN0YWdlUmVhZHNgIC8gYHN0YWdlV3JpdGVzYCByZXRlbnRpb24sIHRoZSBuYXJyYXRpdmUsIGEgZGVjaXNpb24ncyBldmlkZW5jZSwgYW5cbiAqIGVtaXQgcGF5bG9hZCBtYXRjaGVkIGJ5IGBlbWl0UGF0dGVybnNgLCBhbmQgYSBzdWJmbG93J3MgbmFycmF0ZWQgc2VlZCAoYG9uU3ViZmxvd0VudHJ5YCkuXG4gKlxuICogTk9UIGV2ZXJ5IHJlY29yZGVyIGV2ZW50OiBgb25TdWJmbG93RXhpdC5vdXRwdXRTdGF0ZWAgc2VydmVzIHRoZSBzdWJmbG93J3MgcmVkYWN0ZWQgbWlycm9yIHdoZW4gYVxuICogcG9saWN5IGtlZXBzIG9uZSwgYW5kIHNvIGNhcnJpZXMge0BsaW5rIExPR19QTEFDRUhPTERFUn0gKHdpdGhvdXQgYSBtaXJyb3Ig4oCUIHBlci1jYWxsIG1hcmtzIGFsb25lIOKAlFxuICogaXQgaXMgdGhlIHN1YmZsb3cncyBoZWFwIHJldGFpbmVkIHVuZGVyIHRoZSBydWxlLCB3aXRoIHRoaXMgc3RyaW5nKS4gVGhlIHN0cmluZyBkaWQgbm90IGNoYW5nZVxuICogd2hlbiBpdCBtb3ZlZCBoZXJlIOKAlCBpdCB3YXMgYFJFREFDVEVEYCwgaW4gYG1lbW9yeS9yZWRhY3Rpb24udHNgLCB1bnRpbCB0aGVuLlxuICovXG5leHBvcnQgY29uc3QgU0NPUEVfUExBQ0VIT0xERVIgPSAnW1JFREFDVEVEXSc7XG4iXX0=
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2Vob2xkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tZW1vcnkvcGxhY2Vob2xkZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCRztBQUVIOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBwbGFjZWhvbGRlcnMudHMg4oCUIHRoZSBzdHJpbmcgYSByZWRhY3Rpb24gbGVhdmVzIHdoZXJlIGEgdmFsdWUgd2FzLCBpbiB0aGUgUkVDT1JELlxuICpcbiAqIFdIWSBUSElTIEZJTEUgRVhJU1RTLiBCZWZvcmUgRjRhIHNpeCBmaWxlcyBlYWNoIHNwZWxsZWQgYSBwbGFjZWhvbGRlciBhcyBhIGxpdGVyYWwsIGFuZCBhIHNwZWxsaW5nXG4gKiBrZXB0IGluIHNpeCBwbGFjZXMgaXMgYSBwbGFjZWhvbGRlciBhIHJlYWRlciBjYW4gbm8gbG9uZ2VyIG1hdGNoIG9uLiBFdmVyeSBgc3JjL2AgZmlsZSB0aGF0IHdyaXRlc1xuICogdGhlIGxvZydzIHBsYWNlaG9sZGVyIGltcG9ydHMgaXQgZnJvbSBoZXJlLCBhbmQgYHRlc3QvYXJjaGl0ZWN0dXJlL3BsYWNlaG9sZGVycy50ZXN0LnRzYCBwaW5zIHRoYXRcbiAqIG5vIG90aGVyIGBzcmMvYCBmaWxlIHNwZWxscyBpdC5cbiAqXG4gKiBPTkUgU1RSSU5HIEhFUkUsIElUUyBUV0lOIE9OIFRIRSBWRVJESUNUJ1MgU0lERSAoQzQsIHJldmlldyBOMikuIEEgcmVkYWN0aW9uIGxlYXZlcyBvbmUgb2YgdHdvXG4gKiBzdHJpbmdzLCBhbmQgYm90aCBhcmUgaGlzdG9yaWNhbCwgc28gbmVpdGhlciBtYXkgY2hhbmdlIChzdG9yZWQgcmVjb3JkaW5ncyBob2xkIHRoaXMgb25lKS4gV2hpY2hcbiAqIG9uZSBhIHJlYWRlciBzZWVzIGRlcGVuZHMgb24gV0hFUkUgaXQgcmVhZHMsIGFuZCBlYWNoIGhhcyB0aGUgb3duZXIgaXRzIHJlYWRlciBoYXM6XG4gKiAgIC0ge0BsaW5rIExPR19QTEFDRUhPTERFUn0gKGAnUkVEQUNURUQnYCwgaGVyZSkgaXMgYSBSRUNPUkQgYnl0ZTogdGhlIGNvbW1pdCBsb2cgYW5kIGV2ZXJ5dGhpbmdcbiAqICAgICBzZXJ2ZWQgZnJvbSBpdCDigJQgd3JpdHRlbiBpbnRvIHRoZSBsb2cgYnkgdGhlIHJlY29yZCdzIHNjcnViIChgbWVtb3J5L3NjcnViLnRzYCwgTDIpLCBhbmRcbiAqICAgICBwYXNzZWQgYnkgdGhlIHR3byBwbGFjZXMgdGhhdCBzZXJ2ZSBhIG1pcnJvciAoYHJ1bm5lci9FeGVjdXRpb25SdW50aW1lLnRzYCwgdGhlIG1pcnJvcidzXG4gKiAgICAgc2VlZDsgYGVuZ2luZS9oYW5kbGVycy9TdWJmbG93RXhlY3V0b3IudHNgLCBhIHN1YmZsb3cncyBzZXJ2ZWQgc3RhdGUpLiBUaGUgcmVhZGVyc1xuICogICAgIChgc2xpY2UvYCwgYHRpbWUtdHJhdmVsL2ApIG9ubHkgbmFtZSBpdCBpbiB0aGVpciBkb2NzOiB0aGV5IG1lZXQgaXQgYXMgZGF0YSBpbiB0aGUgbG9nO1xuICogICAtIGBTQ09QRV9QTEFDRUhPTERFUmAgKGAnW1JFREFDVEVEXSdgKSBpcyB0aGUgRU5HSU5FJ3M6IHRoZSBzY29wZSBjaGFubmVsJ3MgcmV0YWluZWQgcmVhZHMgYW5kXG4gKiAgICAgd3JpdGVzLCByZWNvcmRlciBldmVudHMsIHRoZSBuYXJyYXRpdmUuIEl0IGxpdmVzIGJlc2lkZSB0aGUgdmVyZGljdCB0aGF0IHdyaXRlcyBpdFxuICogICAgIChgbWVtb3J5L3JlZGFjdGlvbi50c2AsIEw0KS4gVW50aWwgQzQgYm90aCBzYXQgaW4gdGhpcyBmaWxlIChcInR3byBwbGFjZWhvbGRlcnMsIG9uZSBsZWFmXCIpO1xuICogICAgIHRoZSByZWNvcmQgdG9vayB0aGUgZW5naW5lJ3Mgc3RyaW5nIHdpdGggaXQuXG4gKlxuICogV0hZIEEgTEVBRiBPRiBJVFMgT1dOIChhbmQgbm90IGJlc2lkZSBgaG9uZXN0eS50cyDCtyBIT05FU1RZX0NPREVTYCkuIERpZmZlcmVudCByZWFkZXJzLCBkaWZmZXJlbnRcbiAqIHJlYXNvbnMgdG8gY2hhbmdlOiB0aGlzIHN0cmluZyBpcyB3cml0dGVuIG9uIHRoZSBlbmdpbmUncyBXUklURSBwYXRoIG9uIGV2ZXJ5IHJlZGFjdGVkIHJ1biwgdGhlXG4gKiBob25lc3R5IHJlZ2lzdHJ5IGlzIHJlYWQgYnkgYSByZWFkZXIgdGhhdCBleHBsYWlucyBhIHJlY29yZGluZyDigJQgYW5kIHRoZSByZWdpc3RyeSdzIHNlbnRlbmNlcyBoYXZlXG4gKiBubyBidXNpbmVzcyBpbiB0aGUgYnVuZGxlIG9mIGFuIGFwcCB0aGF0IG9ubHkgcnVucyBjaGFydHMuIFRoaXMgZmlsZSBpbXBvcnRzIE5PVEhJTkcsIHNvIGl0IGlzIEwwXG4gKiAodGhlIGxheWVyIHRhYmxlIGlzIGBzY3JpcHRzL2xheWVyaW5nLmNvbmZpZy5janNgKS5cbiAqL1xuXG4vKipcbiAqIFdoYXQgdGhlIENPTU1JVCBMT0cgYW5kIHRoZSByZWRhY3RlZCBNSVJST1IgY2Fycnkgd2hlcmUgYSB2YWx1ZSB3YXMgc2NydWJiZWQuXG4gKlxuICogYG1lbW9yeS9zY3J1Yi50cyDCtyBzY3J1YlBhdGNoYCB3cml0ZXMgaXQgaW50byB0aGUgcGF0Y2ggdGhlIGxvZyByZWNvcmRzIChib3RoIGVuY29kaW5ncyksIGFuZCB0aGVcbiAqIG1pcnJvcidzIHNlZWQgaXMgc2NydWJiZWQgd2l0aCB0aGUgc2FtZSBzdHJpbmcgKGBydW5uZXIvRXhlY3V0aW9uUnVudGltZS50c2ApLCBzbyBhIGZvbGQgb2YgdGhlIGxvZ1xuICogcmVwcm9kdWNlcyBpdCAoYHN0YXRlQXRgIOKGkiBgRm9sZGVkU3RhdGUucmVkYWN0ZWRQYXRoc2ApIGFuZCBhIHNsaWNlIG9yIGFuIGVsZW1lbnQgYmlydGgsIHdoaWNoXG4gKiByZS1zZXJ2ZSB0aGUgbG9nJ3MgYnl0ZXMsIHNob3cgaXQgdG9vLiBBIHN1YmZsb3cncyBTRVJWRUQgc3RhdGUgaXMgdGhlIHN1YmZsb3cncyBvd24gbmVzdGVkIG1pcnJvclxuICogKDkuMjAuMCk6IGBzdWJmbG93UmVzdWx0c1sqXS50cmVlQ29udGV4dC5nbG9iYWxDb250ZXh0YCB1bmRlciBgZ2V0U25hcHNob3QoeyByZWRhY3Q6IHRydWUgfSlgLCBhbmRcbiAqIGBvblN1YmZsb3dFeGl0Lm91dHB1dFN0YXRlYCB3aGVuZXZlciBhIHBvbGljeSBrZWVwcyB0aGF0IG1pcnJvciDigJQgc28gdGhvc2UgY2FycnkgdGhpcyBzdHJpbmcgYXNcbiAqIHdlbGwsIG5vdCB0aGUgc2NvcGUgY2hhbm5lbCdzIGBTQ09QRV9QTEFDRUhPTERFUmAgKGBtZW1vcnkvcmVkYWN0aW9uLnRzYCkuXG4gKi9cbmV4cG9ydCBjb25zdCBMT0dfUExBQ0VIT0xERVIgPSAnUkVEQUNURUQnO1xuIl19
@@ -6,9 +6,11 @@
6
6
  * 1. No payload (the stage staged no write) → an EMPTY bundle goes to the log, and nothing else
7
7
  * moves: live state and the mirror keep their generation. Every executed stage is a cursor stop.
8
8
  * 2. A payload → its names are read first, so a stamp that cannot be read fails the commit before
9
- * anything moves; then its raw rows build live state's next generation, `scrubPatch` puts the
10
- * placeholder at each redacted path that holds a value (in a spine copy, never in the raw
11
- * patch), and the mirror and the log take the scrubbed rows — never the raw ones.
9
+ * anything moves; then its raw rows build live state's next generation, `scrubPatch`
10
+ * (`scrub.ts`, the record's own) puts the placeholder at each redacted path that holds a value
11
+ * (in a spine copy, never in the raw patch), and the mirror and the log take the scrubbed rows —
12
+ * never the raw ones. The redacted paths are data by now: the engine decided them per write
13
+ * (`RecordFrame · write`); nothing here imports the engine's verdict (C4).
12
14
  * 3. The bundle's KEY ORDER is the record's bytes: `overwrite`, `updates`, `redactedPaths`, `trace`,
13
15
  * `stage`, `stageId`, `runtimeStageId`, then `untrackedSources`, `tags` and `phase`, each only
14
16
  * when it has something to say (absent, never empty). `EventLog · record` appends `idx`. The
@@ -6,9 +6,11 @@
6
6
  * 1. No payload (the stage staged no write) → an EMPTY bundle goes to the log, and nothing else
7
7
  * moves: live state and the mirror keep their generation. Every executed stage is a cursor stop.
8
8
  * 2. A payload → its names are read first, so a stamp that cannot be read fails the commit before
9
- * anything moves; then its raw rows build live state's next generation, `scrubPatch` puts the
10
- * placeholder at each redacted path that holds a value (in a spine copy, never in the raw
11
- * patch), and the mirror and the log take the scrubbed rows — never the raw ones.
9
+ * anything moves; then its raw rows build live state's next generation, `scrubPatch`
10
+ * (`scrub.ts`, the record's own) puts the placeholder at each redacted path that holds a value
11
+ * (in a spine copy, never in the raw patch), and the mirror and the log take the scrubbed rows —
12
+ * never the raw ones. The redacted paths are data by now: the engine decided them per write
13
+ * (`RecordFrame · write`); nothing here imports the engine's verdict (C4).
12
14
  * 3. The bundle's KEY ORDER is the record's bytes: `overwrite`, `updates`, `redactedPaths`, `trace`,
13
15
  * `stage`, `stageId`, `runtimeStageId`, then `untrackedSources`, `tags` and `phase`, each only
14
16
  * when it has something to say (absent, never empty). `EventLog · record` appends `idx`. The
@@ -18,7 +20,7 @@
18
20
  * is a continuation — and keeps what is not the record: retention, diagnostics, the dev-mode
19
21
  * warnings and the commit observer.
20
22
  */
21
- import { scrubPatch } from './redaction.js';
23
+ import { scrubPatch } from './scrub.js';
22
24
  /** Record one commit (the module law). `payload` absent = the empty commit. */
23
25
  export function recordCommit(payload, stamp, into) {
24
26
  if (payload === undefined) {
@@ -56,4 +58,4 @@ function namesOf({ stage, stageId, runtimeStageId, untrackedSources, tags, phase
56
58
  phase: phase || undefined,
57
59
  };
58
60
  }
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkQ29tbWl0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tZW1vcnkvcmVjb3JkQ29tbWl0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBR0gsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBMkI1QywrRUFBK0U7QUFDL0UsTUFBTSxVQUFVLFlBQVksQ0FBQyxPQUFrQyxFQUFFLEtBQWtCLEVBQUUsSUFBbUI7SUFDdEcsSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNELE9BQU87SUFDVCxDQUFDO0lBQ0QsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLE1BQU0sRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQ3pDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqRSxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUMvRCxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztJQUMzRCxJQUFJLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25ELElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxhQUFhLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNuRixDQUFDO0FBRUQsdUhBQXVIO0FBQ3ZILFNBQVMsUUFBUSxDQUNmLFNBQXNCLEVBQ3RCLE9BQW9CLEVBQ3BCLGFBQXVCLEVBQ3ZCLEtBQW1CLEVBQ25CLEtBQVk7SUFFWixNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEtBQUssQ0FBQztJQUNoRixNQUFNLE1BQU0sR0FBaUIsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsQ0FBQztJQUMxRyxJQUFJLGdCQUFnQjtRQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztJQUNqRSxJQUFJLElBQUk7UUFBRSxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUM3QixJQUFJLEtBQUs7UUFBRSxNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNoQyxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsZ0hBQWdIO0FBQ2hILFNBQVMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBZTtJQUM3RixPQUFPO1FBQ0wsS0FBSztRQUNMLE9BQU87UUFDUCxjQUFjO1FBQ2QsZ0JBQWdCLEVBQUUsQ0FBQyxnQkFBZ0IsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQztRQUN0RyxJQUFJLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSTtRQUNuRCxLQUFLLEVBQUUsS0FBSyxJQUFJLFNBQVM7S0FDMUIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHJlY29yZENvbW1pdCDigJQgb25lIHN0YWdlJ3MgY29tbWl0IG9udG8gdGhlIHJlY29yZCAoQzEsIEwzKS4gVGhlIG9uZSBvd25lciBvZiBhIGJ1bmRsZSdzIGJ5dGVzIGFuZFxuICogb2Ygd2hlcmUgYSBjb21taXQgbGFuZHM6IGxpdmUgc3RhdGUsIHRoZSByZWRhY3RlZCBtaXJyb3IsIHRoZSBsb2cuXG4gKlxuICogVEhFIExBVzpcbiAqICAgMS4gTm8gcGF5bG9hZCAodGhlIHN0YWdlIHN0YWdlZCBubyB3cml0ZSkg4oaSIGFuIEVNUFRZIGJ1bmRsZSBnb2VzIHRvIHRoZSBsb2csIGFuZCBub3RoaW5nIGVsc2VcbiAqICAgICAgbW92ZXM6IGxpdmUgc3RhdGUgYW5kIHRoZSBtaXJyb3Iga2VlcCB0aGVpciBnZW5lcmF0aW9uLiBFdmVyeSBleGVjdXRlZCBzdGFnZSBpcyBhIGN1cnNvciBzdG9wLlxuICogICAyLiBBIHBheWxvYWQg4oaSIGl0cyBuYW1lcyBhcmUgcmVhZCBmaXJzdCwgc28gYSBzdGFtcCB0aGF0IGNhbm5vdCBiZSByZWFkIGZhaWxzIHRoZSBjb21taXQgYmVmb3JlXG4gKiAgICAgIGFueXRoaW5nIG1vdmVzOyB0aGVuIGl0cyByYXcgcm93cyBidWlsZCBsaXZlIHN0YXRlJ3MgbmV4dCBnZW5lcmF0aW9uLCBgc2NydWJQYXRjaGAgcHV0cyB0aGVcbiAqICAgICAgcGxhY2Vob2xkZXIgYXQgZWFjaCByZWRhY3RlZCBwYXRoIHRoYXQgaG9sZHMgYSB2YWx1ZSAoaW4gYSBzcGluZSBjb3B5LCBuZXZlciBpbiB0aGUgcmF3XG4gKiAgICAgIHBhdGNoKSwgYW5kIHRoZSBtaXJyb3IgYW5kIHRoZSBsb2cgdGFrZSB0aGUgc2NydWJiZWQgcm93cyDigJQgbmV2ZXIgdGhlIHJhdyBvbmVzLlxuICogICAzLiBUaGUgYnVuZGxlJ3MgS0VZIE9SREVSIGlzIHRoZSByZWNvcmQncyBieXRlczogYG92ZXJ3cml0ZWAsIGB1cGRhdGVzYCwgYHJlZGFjdGVkUGF0aHNgLCBgdHJhY2VgLFxuICogICAgICBgc3RhZ2VgLCBgc3RhZ2VJZGAsIGBydW50aW1lU3RhZ2VJZGAsIHRoZW4gYHVudHJhY2tlZFNvdXJjZXNgLCBgdGFnc2AgYW5kIGBwaGFzZWAsIGVhY2ggb25seVxuICogICAgICB3aGVuIGl0IGhhcyBzb21ldGhpbmcgdG8gc2F5IChhYnNlbnQsIG5ldmVyIGVtcHR5KS4gYEV2ZW50TG9nIMK3IHJlY29yZGAgYXBwZW5kcyBgaWR4YC4gVGhlXG4gKiAgICAgIG5hbWVzIGFyZSBuYW1lczogbm8gcmVkYWN0aW9uIHJlYWRzIHRoZW0sIGFuZCBubyBlbmNvZGluZyAoYGNvbW1pdFZhbHVlc2ApIGNoYW5nZXMgdGhlbS5cbiAqXG4gKiBUaGUgZnJhbWUgKGBTdGFnZUNvbnRleHRgKSBkZWNpZGVzIFdIQVQgaXMgY29tbWl0dGVkIOKAlCB0aGUgcGF5bG9hZCwgdGhlIG5hbWVzLCB3aGV0aGVyIHRoZSBidW5kbGVcbiAqIGlzIGEgY29udGludWF0aW9uIOKAlCBhbmQga2VlcHMgd2hhdCBpcyBub3QgdGhlIHJlY29yZDogcmV0ZW50aW9uLCBkaWFnbm9zdGljcywgdGhlIGRldi1tb2RlXG4gKiB3YXJuaW5ncyBhbmQgdGhlIGNvbW1pdCBvYnNlcnZlci5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEV2ZW50TG9nIH0gZnJvbSAnLi9FdmVudExvZy5qcyc7XG5pbXBvcnQgeyBzY3J1YlBhdGNoIH0gZnJvbSAnLi9yZWRhY3Rpb24uanMnO1xuaW1wb3J0IHR5cGUgeyBTaGFyZWRNZW1vcnkgfSBmcm9tICcuL1NoYXJlZE1lbW9yeS5qcyc7XG5pbXBvcnQgdHlwZSB7IFRyYW5zYWN0aW9uQnVmZmVyIH0gZnJvbSAnLi9UcmFuc2FjdGlvbkJ1ZmZlci5qcyc7XG5pbXBvcnQgdHlwZSB7IENvbW1pdEJ1bmRsZSwgQ29tbWl0UGhhc2UsIE1lbW9yeVBhdGNoLCBUcmFjZUVudHJ5LCBVbnRyYWNrZWRTb3VyY2UgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLyoqIE9uZSBzdGFnZSdzIG5ldCBjaGFuZ2UsIGFzIGBUcmFuc2FjdGlvbkJ1ZmZlciDCtyBjb21taXRgIGhhbmRzIGl0IG92ZXIuICovXG5leHBvcnQgdHlwZSBDb21taXRQYXlsb2FkID0gUmV0dXJuVHlwZTxUcmFuc2FjdGlvbkJ1ZmZlclsnY29tbWl0J10+O1xuXG4vKiogV2hhdCBuYW1lcyBhIGNvbW1pdCBvbiB0aGUgcmVjb3JkLCBiZXNpZGUgaXRzIHBheWxvYWQgKGxhdyAzKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWl0U3RhbXAge1xuICBzdGFnZTogc3RyaW5nO1xuICBzdGFnZUlkOiBzdHJpbmc7XG4gIHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmc7XG4gIHVudHJhY2tlZFNvdXJjZXM/OiBSZWFkb25seVNldDxVbnRyYWNrZWRTb3VyY2U+O1xuICB0YWdzPzogcmVhZG9ubHkgc3RyaW5nW107XG4gIHBoYXNlPzogQ29tbWl0UGhhc2U7XG59XG5cbi8qKiBXaGVyZSBhIGNvbW1pdCBsYW5kczogbGl2ZSBzdGF0ZSBhbHdheXM7IHRoZSBtaXJyb3IgYW5kIHRoZSBsb2cgd2hlbiB0aGUgcnVuIGtlZXBzIHRoZW0uICovXG5leHBvcnQgaW50ZXJmYWNlIENvbW1pdFRhcmdldHMge1xuICBzdGF0ZTogU2hhcmVkTWVtb3J5O1xuICBtaXJyb3I/OiBTaGFyZWRNZW1vcnk7XG4gIGxvZz86IEV2ZW50TG9nO1xufVxuXG50eXBlIE5hbWVzID0gUGljazxDb21taXRCdW5kbGUsICdzdGFnZScgfCAnc3RhZ2VJZCcgfCAncnVudGltZVN0YWdlSWQnIHwgJ3VudHJhY2tlZFNvdXJjZXMnIHwgJ3RhZ3MnIHwgJ3BoYXNlJz47XG5cbi8qKiBSZWNvcmQgb25lIGNvbW1pdCAodGhlIG1vZHVsZSBsYXcpLiBgcGF5bG9hZGAgYWJzZW50ID0gdGhlIGVtcHR5IGNvbW1pdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWNvcmRDb21taXQocGF5bG9hZDogQ29tbWl0UGF5bG9hZCB8IHVuZGVmaW5lZCwgc3RhbXA6IENvbW1pdFN0YW1wLCBpbnRvOiBDb21taXRUYXJnZXRzKTogdm9pZCB7XG4gIGlmIChwYXlsb2FkID09PSB1bmRlZmluZWQpIHtcbiAgICBpbnRvLmxvZz8ucmVjb3JkKGJ1bmRsZU9mKHt9LCB7fSwgW10sIFtdLCBuYW1lc09mKHN0YW1wKSkpO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBuYW1lcyA9IG5hbWVzT2Yoc3RhbXApO1xuICBjb25zdCB7IHJlZGFjdGVkUGF0aHMsIHRyYWNlIH0gPSBwYXlsb2FkO1xuICBpbnRvLnN0YXRlLmFwcGx5UGF0Y2gocGF5bG9hZC5vdmVyd3JpdGUsIHBheWxvYWQudXBkYXRlcywgdHJhY2UpO1xuICBjb25zdCBvdmVyd3JpdGUgPSBzY3J1YlBhdGNoKHBheWxvYWQub3ZlcndyaXRlLCByZWRhY3RlZFBhdGhzKTtcbiAgY29uc3QgdXBkYXRlcyA9IHNjcnViUGF0Y2gocGF5bG9hZC51cGRhdGVzLCByZWRhY3RlZFBhdGhzKTtcbiAgaW50by5taXJyb3I/LmFwcGx5UGF0Y2gob3ZlcndyaXRlLCB1cGRhdGVzLCB0cmFjZSk7XG4gIGludG8ubG9nPy5yZWNvcmQoYnVuZGxlT2Yob3ZlcndyaXRlLCB1cGRhdGVzLCBbLi4ucmVkYWN0ZWRQYXRoc10sIHRyYWNlLCBuYW1lcykpO1xufVxuXG4vKiogVEhFIGJ1bmRsZSAobGF3IDMpOiB0aGUgcGF5bG9hZCdzIGZvdXIga2V5cywgdGhlIHRocmVlIG5hbWVzLCB0aGVuIGVhY2ggb3B0aW9uYWwgbmFtZSB0aGF0IGhhcyBzb21ldGhpbmcgdG8gc2F5LiAqL1xuZnVuY3Rpb24gYnVuZGxlT2YoXG4gIG92ZXJ3cml0ZTogTWVtb3J5UGF0Y2gsXG4gIHVwZGF0ZXM6IE1lbW9yeVBhdGNoLFxuICByZWRhY3RlZFBhdGhzOiBzdHJpbmdbXSxcbiAgdHJhY2U6IFRyYWNlRW50cnlbXSxcbiAgbmFtZXM6IE5hbWVzLFxuKTogQ29tbWl0QnVuZGxlIHtcbiAgY29uc3QgeyBzdGFnZSwgc3RhZ2VJZCwgcnVudGltZVN0YWdlSWQsIHVudHJhY2tlZFNvdXJjZXMsIHRhZ3MsIHBoYXNlIH0gPSBuYW1lcztcbiAgY29uc3QgYnVuZGxlOiBDb21taXRCdW5kbGUgPSB7IG92ZXJ3cml0ZSwgdXBkYXRlcywgcmVkYWN0ZWRQYXRocywgdHJhY2UsIHN0YWdlLCBzdGFnZUlkLCBydW50aW1lU3RhZ2VJZCB9O1xuICBpZiAodW50cmFja2VkU291cmNlcykgYnVuZGxlLnVudHJhY2tlZFNvdXJjZXMgPSB1bnRyYWNrZWRTb3VyY2VzO1xuICBpZiAodGFncykgYnVuZGxlLnRhZ3MgPSB0YWdzO1xuICBpZiAocGhhc2UpIGJ1bmRsZS5waGFzZSA9IHBoYXNlO1xuICByZXR1cm4gYnVuZGxlO1xufVxuXG4vKiogVGhlIG5hbWVzLCByZWFkIG9uY2Ug4oCUIGJlZm9yZSBhbnl0aGluZyBtb3ZlcyAobGF3IDIpLiBBbiBvcHRpb25hbCBvbmUgd2l0aCBub3RoaW5nIHRvIHNheSBpcyBgdW5kZWZpbmVkYC4gKi9cbmZ1bmN0aW9uIG5hbWVzT2YoeyBzdGFnZSwgc3RhZ2VJZCwgcnVudGltZVN0YWdlSWQsIHVudHJhY2tlZFNvdXJjZXMsIHRhZ3MsIHBoYXNlIH06IENvbW1pdFN0YW1wKTogTmFtZXMge1xuICByZXR1cm4ge1xuICAgIHN0YWdlLFxuICAgIHN0YWdlSWQsXG4gICAgcnVudGltZVN0YWdlSWQsXG4gICAgdW50cmFja2VkU291cmNlczogIXVudHJhY2tlZFNvdXJjZXMgfHwgdW50cmFja2VkU291cmNlcy5zaXplID09PSAwID8gdW5kZWZpbmVkIDogWy4uLnVudHJhY2tlZFNvdXJjZXNdLFxuICAgIHRhZ3M6ICF0YWdzIHx8IHRhZ3MubGVuZ3RoID09PSAwID8gdW5kZWZpbmVkIDogdGFncyxcbiAgICBwaGFzZTogcGhhc2UgfHwgdW5kZWZpbmVkLFxuICB9O1xufVxuIl19
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkQ29tbWl0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tZW1vcnkvcmVjb3JkQ29tbWl0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFHSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBMkJ4QywrRUFBK0U7QUFDL0UsTUFBTSxVQUFVLFlBQVksQ0FBQyxPQUFrQyxFQUFFLEtBQWtCLEVBQUUsSUFBbUI7SUFDdEcsSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNELE9BQU87SUFDVCxDQUFDO0lBQ0QsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLE1BQU0sRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQ3pDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqRSxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUMvRCxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztJQUMzRCxJQUFJLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25ELElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxhQUFhLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNuRixDQUFDO0FBRUQsdUhBQXVIO0FBQ3ZILFNBQVMsUUFBUSxDQUNmLFNBQXNCLEVBQ3RCLE9BQW9CLEVBQ3BCLGFBQXVCLEVBQ3ZCLEtBQW1CLEVBQ25CLEtBQVk7SUFFWixNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEtBQUssQ0FBQztJQUNoRixNQUFNLE1BQU0sR0FBaUIsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsQ0FBQztJQUMxRyxJQUFJLGdCQUFnQjtRQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztJQUNqRSxJQUFJLElBQUk7UUFBRSxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUM3QixJQUFJLEtBQUs7UUFBRSxNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNoQyxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsZ0hBQWdIO0FBQ2hILFNBQVMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBZTtJQUM3RixPQUFPO1FBQ0wsS0FBSztRQUNMLE9BQU87UUFDUCxjQUFjO1FBQ2QsZ0JBQWdCLEVBQUUsQ0FBQyxnQkFBZ0IsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQztRQUN0RyxJQUFJLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSTtRQUNuRCxLQUFLLEVBQUUsS0FBSyxJQUFJLFNBQVM7S0FDMUIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHJlY29yZENvbW1pdCDigJQgb25lIHN0YWdlJ3MgY29tbWl0IG9udG8gdGhlIHJlY29yZCAoQzEsIEwzKS4gVGhlIG9uZSBvd25lciBvZiBhIGJ1bmRsZSdzIGJ5dGVzIGFuZFxuICogb2Ygd2hlcmUgYSBjb21taXQgbGFuZHM6IGxpdmUgc3RhdGUsIHRoZSByZWRhY3RlZCBtaXJyb3IsIHRoZSBsb2cuXG4gKlxuICogVEhFIExBVzpcbiAqICAgMS4gTm8gcGF5bG9hZCAodGhlIHN0YWdlIHN0YWdlZCBubyB3cml0ZSkg4oaSIGFuIEVNUFRZIGJ1bmRsZSBnb2VzIHRvIHRoZSBsb2csIGFuZCBub3RoaW5nIGVsc2VcbiAqICAgICAgbW92ZXM6IGxpdmUgc3RhdGUgYW5kIHRoZSBtaXJyb3Iga2VlcCB0aGVpciBnZW5lcmF0aW9uLiBFdmVyeSBleGVjdXRlZCBzdGFnZSBpcyBhIGN1cnNvciBzdG9wLlxuICogICAyLiBBIHBheWxvYWQg4oaSIGl0cyBuYW1lcyBhcmUgcmVhZCBmaXJzdCwgc28gYSBzdGFtcCB0aGF0IGNhbm5vdCBiZSByZWFkIGZhaWxzIHRoZSBjb21taXQgYmVmb3JlXG4gKiAgICAgIGFueXRoaW5nIG1vdmVzOyB0aGVuIGl0cyByYXcgcm93cyBidWlsZCBsaXZlIHN0YXRlJ3MgbmV4dCBnZW5lcmF0aW9uLCBgc2NydWJQYXRjaGBcbiAqICAgICAgKGBzY3J1Yi50c2AsIHRoZSByZWNvcmQncyBvd24pIHB1dHMgdGhlIHBsYWNlaG9sZGVyIGF0IGVhY2ggcmVkYWN0ZWQgcGF0aCB0aGF0IGhvbGRzIGEgdmFsdWVcbiAqICAgICAgKGluIGEgc3BpbmUgY29weSwgbmV2ZXIgaW4gdGhlIHJhdyBwYXRjaCksIGFuZCB0aGUgbWlycm9yIGFuZCB0aGUgbG9nIHRha2UgdGhlIHNjcnViYmVkIHJvd3Mg4oCUXG4gKiAgICAgIG5ldmVyIHRoZSByYXcgb25lcy4gVGhlIHJlZGFjdGVkIHBhdGhzIGFyZSBkYXRhIGJ5IG5vdzogdGhlIGVuZ2luZSBkZWNpZGVkIHRoZW0gcGVyIHdyaXRlXG4gKiAgICAgIChgUmVjb3JkRnJhbWUgwrcgd3JpdGVgKTsgbm90aGluZyBoZXJlIGltcG9ydHMgdGhlIGVuZ2luZSdzIHZlcmRpY3QgKEM0KS5cbiAqICAgMy4gVGhlIGJ1bmRsZSdzIEtFWSBPUkRFUiBpcyB0aGUgcmVjb3JkJ3MgYnl0ZXM6IGBvdmVyd3JpdGVgLCBgdXBkYXRlc2AsIGByZWRhY3RlZFBhdGhzYCwgYHRyYWNlYCxcbiAqICAgICAgYHN0YWdlYCwgYHN0YWdlSWRgLCBgcnVudGltZVN0YWdlSWRgLCB0aGVuIGB1bnRyYWNrZWRTb3VyY2VzYCwgYHRhZ3NgIGFuZCBgcGhhc2VgLCBlYWNoIG9ubHlcbiAqICAgICAgd2hlbiBpdCBoYXMgc29tZXRoaW5nIHRvIHNheSAoYWJzZW50LCBuZXZlciBlbXB0eSkuIGBFdmVudExvZyDCtyByZWNvcmRgIGFwcGVuZHMgYGlkeGAuIFRoZVxuICogICAgICBuYW1lcyBhcmUgbmFtZXM6IG5vIHJlZGFjdGlvbiByZWFkcyB0aGVtLCBhbmQgbm8gZW5jb2RpbmcgKGBjb21taXRWYWx1ZXNgKSBjaGFuZ2VzIHRoZW0uXG4gKlxuICogVGhlIGZyYW1lIChgU3RhZ2VDb250ZXh0YCkgZGVjaWRlcyBXSEFUIGlzIGNvbW1pdHRlZCDigJQgdGhlIHBheWxvYWQsIHRoZSBuYW1lcywgd2hldGhlciB0aGUgYnVuZGxlXG4gKiBpcyBhIGNvbnRpbnVhdGlvbiDigJQgYW5kIGtlZXBzIHdoYXQgaXMgbm90IHRoZSByZWNvcmQ6IHJldGVudGlvbiwgZGlhZ25vc3RpY3MsIHRoZSBkZXYtbW9kZVxuICogd2FybmluZ3MgYW5kIHRoZSBjb21taXQgb2JzZXJ2ZXIuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBFdmVudExvZyB9IGZyb20gJy4vRXZlbnRMb2cuanMnO1xuaW1wb3J0IHsgc2NydWJQYXRjaCB9IGZyb20gJy4vc2NydWIuanMnO1xuaW1wb3J0IHR5cGUgeyBTaGFyZWRNZW1vcnkgfSBmcm9tICcuL1NoYXJlZE1lbW9yeS5qcyc7XG5pbXBvcnQgdHlwZSB7IFRyYW5zYWN0aW9uQnVmZmVyIH0gZnJvbSAnLi9UcmFuc2FjdGlvbkJ1ZmZlci5qcyc7XG5pbXBvcnQgdHlwZSB7IENvbW1pdEJ1bmRsZSwgQ29tbWl0UGhhc2UsIE1lbW9yeVBhdGNoLCBUcmFjZUVudHJ5LCBVbnRyYWNrZWRTb3VyY2UgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLyoqIE9uZSBzdGFnZSdzIG5ldCBjaGFuZ2UsIGFzIGBUcmFuc2FjdGlvbkJ1ZmZlciDCtyBjb21taXRgIGhhbmRzIGl0IG92ZXIuICovXG5leHBvcnQgdHlwZSBDb21taXRQYXlsb2FkID0gUmV0dXJuVHlwZTxUcmFuc2FjdGlvbkJ1ZmZlclsnY29tbWl0J10+O1xuXG4vKiogV2hhdCBuYW1lcyBhIGNvbW1pdCBvbiB0aGUgcmVjb3JkLCBiZXNpZGUgaXRzIHBheWxvYWQgKGxhdyAzKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWl0U3RhbXAge1xuICBzdGFnZTogc3RyaW5nO1xuICBzdGFnZUlkOiBzdHJpbmc7XG4gIHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmc7XG4gIHVudHJhY2tlZFNvdXJjZXM/OiBSZWFkb25seVNldDxVbnRyYWNrZWRTb3VyY2U+O1xuICB0YWdzPzogcmVhZG9ubHkgc3RyaW5nW107XG4gIHBoYXNlPzogQ29tbWl0UGhhc2U7XG59XG5cbi8qKiBXaGVyZSBhIGNvbW1pdCBsYW5kczogbGl2ZSBzdGF0ZSBhbHdheXM7IHRoZSBtaXJyb3IgYW5kIHRoZSBsb2cgd2hlbiB0aGUgcnVuIGtlZXBzIHRoZW0uICovXG5leHBvcnQgaW50ZXJmYWNlIENvbW1pdFRhcmdldHMge1xuICBzdGF0ZTogU2hhcmVkTWVtb3J5O1xuICBtaXJyb3I/OiBTaGFyZWRNZW1vcnk7XG4gIGxvZz86IEV2ZW50TG9nO1xufVxuXG50eXBlIE5hbWVzID0gUGljazxDb21taXRCdW5kbGUsICdzdGFnZScgfCAnc3RhZ2VJZCcgfCAncnVudGltZVN0YWdlSWQnIHwgJ3VudHJhY2tlZFNvdXJjZXMnIHwgJ3RhZ3MnIHwgJ3BoYXNlJz47XG5cbi8qKiBSZWNvcmQgb25lIGNvbW1pdCAodGhlIG1vZHVsZSBsYXcpLiBgcGF5bG9hZGAgYWJzZW50ID0gdGhlIGVtcHR5IGNvbW1pdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWNvcmRDb21taXQocGF5bG9hZDogQ29tbWl0UGF5bG9hZCB8IHVuZGVmaW5lZCwgc3RhbXA6IENvbW1pdFN0YW1wLCBpbnRvOiBDb21taXRUYXJnZXRzKTogdm9pZCB7XG4gIGlmIChwYXlsb2FkID09PSB1bmRlZmluZWQpIHtcbiAgICBpbnRvLmxvZz8ucmVjb3JkKGJ1bmRsZU9mKHt9LCB7fSwgW10sIFtdLCBuYW1lc09mKHN0YW1wKSkpO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBuYW1lcyA9IG5hbWVzT2Yoc3RhbXApO1xuICBjb25zdCB7IHJlZGFjdGVkUGF0aHMsIHRyYWNlIH0gPSBwYXlsb2FkO1xuICBpbnRvLnN0YXRlLmFwcGx5UGF0Y2gocGF5bG9hZC5vdmVyd3JpdGUsIHBheWxvYWQudXBkYXRlcywgdHJhY2UpO1xuICBjb25zdCBvdmVyd3JpdGUgPSBzY3J1YlBhdGNoKHBheWxvYWQub3ZlcndyaXRlLCByZWRhY3RlZFBhdGhzKTtcbiAgY29uc3QgdXBkYXRlcyA9IHNjcnViUGF0Y2gocGF5bG9hZC51cGRhdGVzLCByZWRhY3RlZFBhdGhzKTtcbiAgaW50by5taXJyb3I/LmFwcGx5UGF0Y2gob3ZlcndyaXRlLCB1cGRhdGVzLCB0cmFjZSk7XG4gIGludG8ubG9nPy5yZWNvcmQoYnVuZGxlT2Yob3ZlcndyaXRlLCB1cGRhdGVzLCBbLi4ucmVkYWN0ZWRQYXRoc10sIHRyYWNlLCBuYW1lcykpO1xufVxuXG4vKiogVEhFIGJ1bmRsZSAobGF3IDMpOiB0aGUgcGF5bG9hZCdzIGZvdXIga2V5cywgdGhlIHRocmVlIG5hbWVzLCB0aGVuIGVhY2ggb3B0aW9uYWwgbmFtZSB0aGF0IGhhcyBzb21ldGhpbmcgdG8gc2F5LiAqL1xuZnVuY3Rpb24gYnVuZGxlT2YoXG4gIG92ZXJ3cml0ZTogTWVtb3J5UGF0Y2gsXG4gIHVwZGF0ZXM6IE1lbW9yeVBhdGNoLFxuICByZWRhY3RlZFBhdGhzOiBzdHJpbmdbXSxcbiAgdHJhY2U6IFRyYWNlRW50cnlbXSxcbiAgbmFtZXM6IE5hbWVzLFxuKTogQ29tbWl0QnVuZGxlIHtcbiAgY29uc3QgeyBzdGFnZSwgc3RhZ2VJZCwgcnVudGltZVN0YWdlSWQsIHVudHJhY2tlZFNvdXJjZXMsIHRhZ3MsIHBoYXNlIH0gPSBuYW1lcztcbiAgY29uc3QgYnVuZGxlOiBDb21taXRCdW5kbGUgPSB7IG92ZXJ3cml0ZSwgdXBkYXRlcywgcmVkYWN0ZWRQYXRocywgdHJhY2UsIHN0YWdlLCBzdGFnZUlkLCBydW50aW1lU3RhZ2VJZCB9O1xuICBpZiAodW50cmFja2VkU291cmNlcykgYnVuZGxlLnVudHJhY2tlZFNvdXJjZXMgPSB1bnRyYWNrZWRTb3VyY2VzO1xuICBpZiAodGFncykgYnVuZGxlLnRhZ3MgPSB0YWdzO1xuICBpZiAocGhhc2UpIGJ1bmRsZS5waGFzZSA9IHBoYXNlO1xuICByZXR1cm4gYnVuZGxlO1xufVxuXG4vKiogVGhlIG5hbWVzLCByZWFkIG9uY2Ug4oCUIGJlZm9yZSBhbnl0aGluZyBtb3ZlcyAobGF3IDIpLiBBbiBvcHRpb25hbCBvbmUgd2l0aCBub3RoaW5nIHRvIHNheSBpcyBgdW5kZWZpbmVkYC4gKi9cbmZ1bmN0aW9uIG5hbWVzT2YoeyBzdGFnZSwgc3RhZ2VJZCwgcnVudGltZVN0YWdlSWQsIHVudHJhY2tlZFNvdXJjZXMsIHRhZ3MsIHBoYXNlIH06IENvbW1pdFN0YW1wKTogTmFtZXMge1xuICByZXR1cm4ge1xuICAgIHN0YWdlLFxuICAgIHN0YWdlSWQsXG4gICAgcnVudGltZVN0YWdlSWQsXG4gICAgdW50cmFja2VkU291cmNlczogIXVudHJhY2tlZFNvdXJjZXMgfHwgdW50cmFja2VkU291cmNlcy5zaXplID09PSAwID8gdW5kZWZpbmVkIDogWy4uLnVudHJhY2tlZFNvdXJjZXNdLFxuICAgIHRhZ3M6ICF0YWdzIHx8IHRhZ3MubGVuZ3RoID09PSAwID8gdW5kZWZpbmVkIDogdGFncyxcbiAgICBwaGFzZTogcGhhc2UgfHwgdW5kZWZpbmVkLFxuICB9O1xufVxuIl19