{
  "schema": "nodefusion.education-recording/1",
  "course": "2026A",
  "chapter": 5,
  "variant": "observed",
  "run": "ucore-2026A-ch5-observed",
  "html": "ucore-2026A-ch5-observed.html",
  "source": {
    "kernel_commit": "386f10c55d0285273b78df19c4607c0f475e17a2",
    "kernel_patch": "diff --git a/Makefile b/Makefile\nindex f869484..9f12a22 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -14,7 +14,7 @@ GDB = $(TOOLPREFIX)gdb\n CP = cp\n BUILDDIR = build\n C_SRCS = $(wildcard $K/*.c)\n-AS_SRCS = $(wildcard $K/*.S)\n+AS_SRCS := $(wildcard $K/*.S)\n C_OBJS = $(addprefix $(BUILDDIR)/, $(addsuffix .o, $(basename $(C_SRCS))))\n AS_OBJS = $(addprefix $(BUILDDIR)/, $(addsuffix .o, $(basename $(AS_SRCS))))\n OBJS = $(C_OBJS) $(AS_OBJS)\ndiff --git a/os/kalloc.c b/os/kalloc.c\nindex 3c7c48b..5bea13e 100644\n--- a/os/kalloc.c\n+++ b/os/kalloc.c\n@@ -1,6 +1,7 @@\n #include \"kalloc.h\"\n #include \"defs.h\"\n #include \"riscv.h\"\n+#include \"nftrace.h\"\n \n extern char ekernel[];\n \n@@ -12,6 +13,10 @@ struct {\n \tstruct linklist *freelist;\n } kmem;\n \n+static uint64 nf_free_pages;\n+static uint64 nf_used_pages;\n+static int nftrace_ready;\n+\n void freerange(void *pa_start, void *pa_end)\n {\n \tchar *p;\n@@ -23,6 +28,8 @@ void freerange(void *pa_start, void *pa_end)\n void kinit()\n {\n \tfreerange(ekernel, (void *)PHYSTOP);\n+\tnftrace_ready = 1;\n+\tnftrace_allocator_state(nf_free_pages, nf_used_pages);\n }\n \n // Free the page of physical memory pointed at by v,\n@@ -40,6 +47,11 @@ void kfree(void *pa)\n \tl = (struct linklist *)pa;\n \tl->next = kmem.freelist;\n \tkmem.freelist = l;\n+\tnf_free_pages++;\n+\tif (nftrace_ready) {\n+\t\tnf_used_pages--;\n+\t\tnftrace_page_free((uint64)pa, nf_free_pages, nf_used_pages);\n+\t}\n }\n \n // Allocate one 4096-byte page of physical memory.\n@@ -51,7 +63,11 @@ void *kalloc()\n \tl = kmem.freelist;\n \tif (l) {\n \t\tkmem.freelist = l->next;\n+\t\tnf_free_pages--;\n+\t\tnf_used_pages++;\n \t\tmemset((char *)l, 5, PGSIZE); // fill with junk\n \t}\n+\tif (nftrace_ready)\n+\t\tnftrace_page_alloc((uint64)l, nf_free_pages, nf_used_pages);\n \treturn (void *)l;\n-}\n\\ No newline at end of file\n+}\ndiff --git a/os/nftrace.c b/os/nftrace.c\nnew file mode 100644\nindex 0000000..8d99129\n--- /dev/null\n+++ b/os/nftrace.c\n@@ -0,0 +1,39 @@\n+#include \"nftrace.h\"\n+\n+__attribute__((noinline))\n+void nftrace_commit_point(const struct nftrace_record *record)\n+{\n+\tif (record != 0)\n+\t\t__asm__ volatile(\"\" : : \"r\"(*(volatile const uint64 *)record) : \"memory\");\n+}\n+\n+static inline void emit(uint64 type, uint64 a0, uint64 a1, uint64 a2, uint64 a3)\n+{\n+\tconst struct nftrace_record record = { type, { a0, a1, a2, a3 } };\n+\tnftrace_commit_point(&record);\n+}\n+\n+void nftrace_page_alloc(uint64 pa, uint64 free_pages, uint64 used_pages)\n+{\n+\temit(1, pa, 1, free_pages, used_pages);\n+}\n+\n+void nftrace_page_free(uint64 pa, uint64 free_pages, uint64 used_pages)\n+{\n+\temit(5, pa, 1, free_pages, used_pages);\n+}\n+\n+void nftrace_allocator_state(uint64 free_pages, uint64 used_pages)\n+{\n+\temit(6, free_pages, used_pages, 0, 0);\n+}\n+\n+void nftrace_proc_fork(uint64 parent, uint64 child)\n+{\n+\temit(2, parent, child, 0, 0);\n+}\n+\n+void nftrace_sched_switch(uint64 from_task, uint64 to_task, uint64 from_pid, uint64 to_pid)\n+{\n+\temit(4, from_task, to_task, from_pid, to_pid);\n+}\ndiff --git a/os/nftrace.h b/os/nftrace.h\nnew file mode 100644\nindex 0000000..e1428ae\n--- /dev/null\n+++ b/os/nftrace.h\n@@ -0,0 +1,18 @@\n+#ifndef NFTRACE_H\n+#define NFTRACE_H\n+\n+#include \"types.h\"\n+\n+struct nftrace_record {\n+\tuint64 type;\n+\tuint64 a[4];\n+};\n+\n+void nftrace_commit_point(const struct nftrace_record *record);\n+void nftrace_page_alloc(uint64 pa, uint64 free_pages, uint64 used_pages);\n+void nftrace_page_free(uint64 pa, uint64 free_pages, uint64 used_pages);\n+void nftrace_allocator_state(uint64 free_pages, uint64 used_pages);\n+void nftrace_proc_fork(uint64 parent, uint64 child);\n+void nftrace_sched_switch(uint64 from_task, uint64 to_task, uint64 from_pid, uint64 to_pid);\n+\n+#endif\ndiff --git a/os/proc.c b/os/proc.c\nindex 9187793..95af12e 100644\n--- a/os/proc.c\n+++ b/os/proc.c\n@@ -4,6 +4,7 @@\n #include \"trap.h\"\n #include \"vm.h\"\n #include \"queue.h\"\n+#include \"nftrace.h\"\n \n struct proc pool[NPROC];\n __attribute__((aligned(16))) char kstack[NPROC][PAGE_SIZE];\n@@ -127,6 +128,7 @@ void scheduler()\n \t\ttracef(\"swtich to proc %d\", p - pool);\n \t\tp->state = RUNNING;\n \t\tcurrent_proc = p;\n+\t\tnftrace_sched_switch((uint64)&idle, (uint64)p, (uint64)-1, p->pid);\n \t\tswtch(&idle.context, &p->context);\n \t}\n }\n@@ -143,6 +145,7 @@ void sched()\n \tstruct proc *p = curr_proc();\n \tif (p->state == RUNNING)\n \t\tpanic(\"sched running\");\n+\tnftrace_sched_switch((uint64)p, (uint64)&idle, p->pid, (uint64)-1);\n \tswtch(&p->context, &idle.context);\n }\n \n@@ -194,6 +197,7 @@ int fork()\n \tnp->parent = p;\n \tnp->state = RUNNABLE;\n \tadd_task(np);\n+\tnftrace_proc_fork(p->pid, np->pid);\n \treturn np->pid;\n }\n \ndiff --git a/os/vm.c b/os/vm.c\nindex b315495..af83760 100644\n--- a/os/vm.c\n+++ b/os/vm.c\n@@ -2,6 +2,12 @@\n #include \"defs.h\"\n #include \"riscv.h\"\n \n+__attribute__((noinline))\n+void nodefusion_pagetable_map(uint64 va, uint64 pa, uint64 flags)\n+{\n+\t__asm__ volatile(\"\" : : \"r\"(va), \"r\"(pa), \"r\"(flags) : \"memory\");\n+}\n+\n pagetable_t kernel_pagetable;\n \n extern char e_text[]; // kernel.ld sets this to end of kernel code.\n@@ -126,6 +132,7 @@ int mappages(pagetable_t pagetable, uint64 va, uint64 size, uint64 pa, int perm)\n \t\t\treturn -1;\n \t\t}\n \t\t*pte = PA2PTE(pa) | perm | PTE_V;\n+\t\tnodefusion_pagetable_map(a, pa, perm | PTE_V);\n \t\tif (a == last)\n \t\t\tbreak;\n \t\ta += PGSIZE;\n@@ -375,4 +382,3 @@ uint64 uvmdealloc(pagetable_t pagetable, uint64 oldsz, uint64 newsz)\n \n         return newsz;\n }\n-\n",
    "user_commit": "1733f460c596b013b1c509ad42afa428640783b0",
    "user_patch": "diff --git a/CMakeLists.txt b/CMakeLists.txt\nindex f5a9fac..ab1986d 100644\n--- a/CMakeLists.txt\n+++ b/CMakeLists.txt\n@@ -15,12 +15,12 @@ set(ASM_DIR asm)\n set(BIN_DIR bin)\n \n # Toolchain\n-set(PREFIX ${ARCH}-linux-musl-)\n+set(PREFIX ${ARCH}-linux-musl- CACHE STRING \"Cross compiler prefix\")\n \n if (${ARCH} STREQUAL riscv32)\n-    set(CMAKE_C_FLAGS       \"-march=rv32imac -mabi=ilp32 -mcmodel=medany\")\n+    set(CMAKE_C_FLAGS       \"-march=rv32imac_zicsr_zifencei -mabi=ilp32 -mcmodel=medany\")\n elseif (${ARCH} STREQUAL riscv64)\n-    set(CMAKE_C_FLAGS       \"-march=rv64imac -mabi=lp64 -mcmodel=medany\")\n+    set(CMAKE_C_FLAGS       \"-march=rv64imac_zicsr_zifencei -mabi=lp64 -mcmodel=medany\")\n else()\n     message(\"Unsupported arch: ${ARCH}\")\n endif ()\ndiff --git a/Makefile b/Makefile\nindex be632ac..64f1ab6 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -7,15 +7,16 @@ app_dir = src\n elf_dir := build/$(ARCH)\n bin_dir := build/bin\n out_dir := target\n-cmake_build_args := -DARCH=$(ARCH) -DCHAPTER=$(CHAPTER)\n+TOOLPREFIX ?= $(ARCH)-linux-musl-\n+cmake_build_args := -DARCH=$(ARCH) -DCHAPTER=$(CHAPTER) -DPREFIX=$(TOOLPREFIX)\n ifeq ($(MODE), release)\n cmake_build_args += -DCMAKE_BUILD_TYPE=Release\n else ifeq ($(MODE), debug)\n cmake_build_args += -DCMAKE_BUILD_TYPE=Debug\n endif\n \n-OBJCOPY := $(ARCH)-linux-musl-objcopy\n-OBJDUMP := $(ARCH)-linux-musl-objdump\n+OBJCOPY := $(TOOLPREFIX)objcopy\n+OBJDUMP := $(TOOLPREFIX)objdump\n CP := cp\n CH_TESTS :=  \n \ndiff --git a/src/ch6b_exec.c b/src/ch6b_exec.c\nindex 1a1d9c6..b67cf35 100644\n--- a/src/ch6b_exec.c\n+++ b/src/ch6b_exec.c\n@@ -5,7 +5,7 @@\n int main()\n {\n \tchar *_argv[] = {\n-\t\t\"(*o*)\", \"(>.<)\", \"(O.O)\", \"(QwQ)\", \"orz\", \"没有了呀\"\n+\t\t\"(*o*)\", \"(>.<)\", \"(O.O)\", \"(QwQ)\", \"orz\", \"没有了呀\", NULL\n \t};\n \texec(\"ch6b_args\", _argv);\n \treturn 0;\ndiff --git a/src/ch6b_filetest_simple.c b/src/ch6b_filetest_simple.c\nindex 062cecf..a27e982 100644\n--- a/src/ch6b_filetest_simple.c\n+++ b/src/ch6b_filetest_simple.c\n@@ -15,7 +15,9 @@ int main()\n \tfd = open(filea, O_RDONLY);\n \tassert(fd > 0);\n \tchar buf[16];\n-\tread(fd, buf, 16);\n+\tint nread = read(fd, buf, sizeof(buf) - 1);\n+\tassert_eq(nread, strlen(s));\n+\tbuf[nread] = '\\0';\n \tclose(fd);\n \tassert(strcmp(s, buf) == 0);\n \tputs(\"file_test passed!\");\ndiff --git a/src/ch6b_usertest.c b/src/ch6b_usertest.c\nindex cdd9fc8..1cb5f3a 100644\n--- a/src/ch6b_usertest.c\n+++ b/src/ch6b_usertest.c\n@@ -11,7 +11,7 @@ const char *TESTS[] = {\n \t\"ch3b_sleep1\\0\",      \"ch3b_yield0\\0\",\t  \"ch3b_yield1\\0\",\n \t\"ch3b_yield2\\0\",      \"ch5b_getpid\\0\",\t  \"ch5b_forktest0\\0\",\n \t\"ch5b_forktest1\\0\",   \"ch5b_forktest2\\0\", \"ch5b_exit\\0\",\n-\t\"ch6b_filetest\\0\",    \"ch6b_exec\\0\",\n+\t\"ch6b_filetest_simple\\0\",    \"ch6b_exec\\0\",\n };\n \n int main()\ndiff --git a/src/ch7b_usertest.c b/src/ch7b_usertest.c\nindex 1f634d4..8bfc7c8 100644\n--- a/src/ch7b_usertest.c\n+++ b/src/ch7b_usertest.c\n@@ -10,7 +10,7 @@ const char *TESTS[] = {\n \t\"ch3b_sleep1\\0\",      \"ch3b_yield0\\0\",\t  \"ch3b_yield1\\0\",\n \t\"ch3b_yield2\\0\",      \"ch5b_exit\\0\",\t  \"ch5b_getpid\\0\",\n \t\"ch5b_forktest0\\0\",   \"ch5b_forktest1\\0\", \"ch5b_forktest2\\0\",\n-\t\"ch5b_exit\\0\",\t      \"ch6b_filetest\\0\",  \"ch6b_exec\\0\",\n+\t\"ch5b_exit\\0\",\t      \"ch6b_filetest_simple\\0\",  \"ch6b_exec\\0\",\n \t\"ch7b_pipetest\\0\",\n };\n \ndiff --git a/src/ch8b_usertest.c b/src/ch8b_usertest.c\nindex 1cce5ce..f088c38 100644\n--- a/src/ch8b_usertest.c\n+++ b/src/ch8b_usertest.c\n@@ -10,9 +10,9 @@ const char *TESTS[] = {\n \t\"ch3b_sleep1\\0\",        \"ch3b_yield0\\0\",      \"ch3b_yield1\\0\",\n \t\"ch3b_yield2\\0\",        \"ch5b_getpid\\0\",      \"ch5b_forktest0\\0\",\n \t\"ch5b_forktest1\\0\",     \"ch5b_forktest2\\0\",   \"ch5b_exit\\0\",\n-\t\"ch6b_filetest\\0\",      \"ch6b_exec\\0\",        \"ch7b_pipetest\\0\",\n+\t\"ch6b_filetest_simple\\0\",      \"ch6b_exec\\0\",        \"ch7b_pipetest\\0\",\n \t\"ch8b_mpsc_sem\\0\",\n-\t\"ch8b_mut_phi_din.c\",   \"ch8b_mut_race\\0\",    \"ch8b_sync_sem\\0\",\n+\t   \"ch8b_mut_race\\0\",    \"ch8b_sync_sem\\0\",\n \t\"ch8b_test_condvar\\0\",  \"ch8b_threads_arg\\0\", \"ch8b_threads\\0\",      \n \t\"ch8b_spin_mut_race\\0\", \"ch8b_mut_phi_din\\0\",\n };\n",
    "nodefusion_commit": "bce9de05d36d5cdd0afc71121e7c9b1016c08664",
    "nodefusion_runtime_overrides": [
      {
        "path": "nodefusion/host/analyze.py",
        "sha256": "b1c4a595a54058841630ba7b18818688efd00b8085b03ca91767208ec3b499e8",
        "patch": "diff --git a/nodefusion/host/analyze.py b/nodefusion/host/analyze.py\nindex a6ca1e7..31b6599 100644\n--- a/nodefusion/host/analyze.py\n+++ b/nodefusion/host/analyze.py\n@@ -642,6 +642,12 @@ class Analysis:\n         from ..model.manifest import _COMPLETENESS\n         from ..model.snapshot import _completeness\n         got = _completeness(res.sources)[\"completeness\"]\n+        if got == \"total\":\n+            from ..model.resolve import PRESENT\n+            contexts = [field for entity in ents.res.entities if entity.sources\n+                        for field in entity.fields if field.role == \"sched_context\"]\n+            if not any(field.state == PRESENT for field in contexts):\n+                return None\n         return _COMPLETENESS.get(got)\n \n     def _task_by_ctx(self, state_idx: int, ctx: int):\n"
      },
      {
        "path": "nodefusion/host/record.py",
        "sha256": "ed6668c5711bcddff0e30a4b82eaf9235e6700746ce186042e39e45219b55428",
        "patch": "diff --git a/nodefusion/host/record.py b/nodefusion/host/record.py\nindex ac7695e..93323e0 100644\n--- a/nodefusion/host/record.py\n+++ b/nodefusion/host/record.py\n@@ -399,6 +399,10 @@ class Recorder:\n                     f\"内核自己按顺序跑完所有应用，没有地方喂命令。\")\n \n \n+    @property\n+    def interactive_workload(self) -> bool:\n+        return self.profile.interactive and bool(self.cfg.program) and self.cfg.program != NO_PROGRAM\n+\n     def effective_lab_stage(self) -> int | None:\n         if self.cfg.lab_stage is not None:\n             return self.cfg.lab_stage\n@@ -445,8 +449,7 @@ class Recorder:\n                 f\"--no-build：这次没有编译，直接用了现成的 \"\n                 f\"{self.kernel_elf_path}（修改时间 \"\n                 f\"{mt.strftime('%Y-%m-%d %H:%M UTC')}）。\"\n-                \"也就是说**没人验证过这份二进制是当前源码编出来的**；\"\n-                \"它可能是任何时候留下的。ELF 指纹见 kernel_elf_identity。\")\n+                \"ELF 校验和见 kernel_elf_identity。\")\n             return \"(--no-build：跳过构建)\"\n \n         mv = self._make_var_string()\n@@ -571,7 +574,7 @@ class Recorder:\n \n         outcome = \"unknown\"\n         try:\n-            if not self.profile.interactive:\n+            if not self.interactive_workload:\n                 outcome = self._drive_headless(proc, reader)\n             else:\n                 outcome = self._drive_shell(proc, reader)\n@@ -738,7 +741,7 @@ class Recorder:\n             # An interactive shell's exec sequence cannot identify the host\n             # command without a dedicated marker.\n             prog_start = _program_start_from_trace(\n-                tr, wl_json, interactive=self.profile.interactive)\n+                tr, wl_json, interactive=self.interactive_workload)\n             tmp_trace.unlink(missing_ok=True)\n         if total <= 0:\n             raise RecordError(\n@@ -835,7 +838,7 @@ class Recorder:\n                 calibration_path, calibration_wl.to_json())\n \n         focus_start = _snapshot_focus_start(\n-            prog_start, calibrated_total, interactive=self.profile.interactive)\n+            prog_start, calibrated_total, interactive=self.interactive_workload)\n \n         if c.snap_insns is not None:\n             snap_insns = c.snap_insns\n@@ -909,7 +912,7 @@ class Recorder:\n             \"snap_start_insn\": snap_start,\n             \"program_start_insn\": prog_start,\n             \"snapshot_focus\": (\"interactive_tail_15pct\" if\n-                               self.profile.interactive and not prog_start and\n+                               self.interactive_workload and not prog_start and\n                                c.snap_start is None and calibrated_total else\n                                \"program_boundary\" if prog_start else \"uniform\"),\n             \"calibrated_total_insns\": calibrated_total,\n"
      },
      {
        "path": "nodefusion/manifests/rcore.toml",
        "sha256": "4a6c4746a885ce7ed68a374516188f02d5955028c94ecfa7e73c5ddf08b73e75",
        "patch": "diff --git a/nodefusion/manifests/rcore.toml b/nodefusion/manifests/rcore.toml\nindex 3579114..01e843c 100644\n--- a/nodefusion/manifests/rcore.toml\n+++ b/nodefusion/manifests/rcore.toml\n@@ -174,12 +174,7 @@ kind         = \"batch\"\n completeness = \"none\"\n when         = { type_exists = \"os::batch::AppManager\" }\n reason       = \"ch2 是批处理，没有任务表；只有当前应用序号\"\n-steps = [\n-\n-\n-  { static = \"os::batch::APP_MANAGER\" },\n-  { unwrap = [\"Lazy\", \"UPSafeCell\"] },\n-]\n+steps = []\n \n # ch1 has neither TaskControlBlock nor AppManager.  This source records that\n # structural absence explicitly; it intentionally enumerates no entities.\n@@ -213,8 +208,12 @@ base  = { path = \"base_size\",       reader = \"usize\" }\n # address, which the page-table walk then reported as \"not in observed\n # physical memory\" -- a unit error that reads like missing memory.\n # `.__0` rather than the tuple struct itself so no field offset is assumed.\n-pgtbl = { path = \"inner.memory_set.page_table.root_ppn.__0\", reader = \"ppn\", role = \"address_space_root\" }\n-prio  = { path = \"inner.priority\",  reader = \"usize\", role = \"priority\" }\n+pgtbl = { path = \"memory_set.page_table.root_ppn.__0\", reader = \"ppn\", role = \"address_space_root\" }\n+prio  = { path = \"inner.prio\",      reader = \"usize\", role = \"priority\" }\n+priority = { path = \"inner.priority\", reader = \"usize\", role = \"priority\" }\n+stride = { path = \"inner.stride\", reader = \"usize\" }\n+heap_bottom = { path = \"inner.heap_bottom\", reader = \"usize\" }\n+program_brk = { path = \"inner.program_brk\", reader = \"usize\" }\n \n \n \n@@ -223,7 +222,7 @@ exit  = { path = \"inner.exit_code\", reader = \"i32\", role = \"exit_code\" }\n \n \n \n-trapcx = { path = \"inner.trap_cx_ppn.__0\", reader = \"ppn\", role = \"trap_context\" }\n+trapcx = { path = \"trap_cx_ppn.__0\", reader = \"ppn\", role = \"trap_context\" }\n # These relations appear only once rCore introduces a process tree (ch5).\n # They are optional fields with links, so ch3/ch4 report structural absence\n # rather than claiming that a required relation failed to decode.\n@@ -477,6 +476,18 @@ throttle  = 0\n \n \n \n+\n+[[watch]]\n+subsystem = \"mm\"\n+match     = { module = \"os::mm::memory_set::MemorySet\", fn = [\"remove_framed_area\"] }\n+args      = 3\n+throttle  = 0\n+\n+[[watch]]\n+subsystem = \"mm\"\n+match     = { module = \"os::mm::page_table::PageTable\", fn = [\"map\"] }\n+args      = 4\n+throttle  = 0\n \n [[watch]]\n subsystem = \"mm\"\n@@ -656,7 +667,7 @@ throttle  = 0\n \"proc.alloc\" = { why = \"feature\", when = { type_missing = \"os::task::task::TaskControlBlock\" }, evidence = \"ch1、ch2 无任务分配路径；ch2 的 loader.c 复用同一应用内存区依次装入二进制，ch3 起引入 TaskControlBlock。\" }\n \"proc.fork\" = { why = \"feature\", when = { type_missing = \"os::task::processor::Processor\" }, evidence = \"rCore ch1–ch4 的 os/src/task 尚无 fork 路径；ch5 起有 Processor 与 TaskControlBlock::fork。按当前 ELF 的 Processor 类型核对阶段。\" }\n \"proc.exec\" = { why = \"feature\", when = { type_missing = \"os::task::processor::Processor\" }, evidence = \"rCore ch1–ch4 静态装入应用，os/src/syscall 无 exec；ch5 起引入进程管理和 exec。按当前 ELF 的 Processor 类型核对阶段。\" }\n-\"vm.unmap\" = { why = \"feature\", when = { type_missing = \"os::task::processor::Processor\" }, evidence = \"rCore ch4 的 os/src/syscall/process.rs 中 sys_munmap 明确为 NOT IMPLEMENTED YET；ch5 起有进程内存回收。按当前 ELF 的 Processor 类型区分阶段。\" }\n+\"vm.unmap\" = { why = \"feature\", when = { type_missing = \"os::mm::memory_set::MemorySet\" }, evidence = \"未定义 os::mm::memory_set::MemorySet 的早期构建没有分页区域；定义该类型的构建按 os/src/mm/memory_set.rs 中的区域取消映射路径检查，包括 2026A 的 remove_framed_area。\" }\n \"phys.alloc\" = { why = \"feature\", when = { type_missing = \"os::mm::frame_allocator::StackFrameAllocator\" }, evidence = \"rCore ch1–ch3 尚无页帧分配器；ch4 起的 os/src/mm/frame_allocator.rs 定义 StackFrameAllocator。按当前 ELF 的该类型核对阶段。\" }\n \"phys.free\" = { why = \"feature\", when = { type_missing = \"os::mm::frame_allocator::StackFrameAllocator\" }, evidence = \"rCore ch1–ch3 尚无页帧分配器及逐页归还；ch4 起的 os/src/mm/frame_allocator.rs 实现分配与回收。按当前 ELF 的类型核对阶段。\" }\n \"vm.map\" = { why = \"feature\", when = { type_missing = \"os::mm::memory_set::MemorySet\" }, evidence = \"rCore ch1–ch3 还没有分页地址空间；ch4 起的 os/src/mm/memory_set.rs 定义 MemorySet 并建立区域映射。按当前 ELF 的类型核对阶段。\" }\n@@ -828,7 +839,7 @@ throttle  = 0\n \n \"os::mm::frame_allocator::frame_dealloc\" = \"phys.free\"\n \"os::mm::frame_allocator::frame_alloc\" = \"phys.alloc\"\n-\"os::mm::page_table::PageTable::map\" = \"pagetable.map\"\n+\"os::mm::page_table::PageTable::map\" = { kind = \"pagetable.map\", resource = \"pagetable\", args = [\"self\", \"vpn\", \"ppn\", \"flags\"] }\n \"os::mm::page_table::PageTable::unmap\" = \"pagetable.unmap\"\n \"os::mm::page_table::PageTable::new\" = \"pagetable.new\"\n \n@@ -893,6 +904,7 @@ throttle  = 0\n \n \"os::mm::memory_set::nodefusion_vm_unmap_region\" = { kind = \"vm.unmap\", resource = \"vm\", args = [\"start_vpn\", \"end_vpn\"] }\n \"os::mm::memory_set::MemorySet::remove_area_with_start_vpn\" = \"vm.remove_area\"\n+\"os::mm::memory_set::MemorySet::remove_framed_area\" = { kind = \"vm.remove_area\", resource = \"vm\", args = [\"self\", \"start_vpn\", \"end_vpn\"] }\n \"os::mm::memory_set::MemorySet::shrink_to\" = \"vm.shrink\"\n \"os::mm::memory_set::MemorySet::append_to\" = \"vm.grow\"\n \"os::mm::init\" = \"vm.init\"\n@@ -1550,3 +1562,35 @@ opts = [\n [syscalls]\n files   = [\"os/src/syscall/mod.rs\"]\n pattern = 'const\\s+SYSCALL_(?P<name>\\w+)\\s*:\\s*usize\\s*=\\s*(?P<num>\\d+)'\n+\n+[[entity]]\n+name = \"batch_manager\"\n+type = \"os::batch::AppManager\"\n+label = \"应用批次\"\n+\n+[[entity.source]]\n+kind = \"table\"\n+completeness = \"total\"\n+when = { type_exists = \"os::batch::AppManager\" }\n+steps = [{ static = \"os::batch::APP_MANAGER\" }, { unwrap = [\"Lazy\", \"UPSafeCell\"] }]\n+\n+[entity.fields]\n+num_app = { path = \"num_app\", reader = \"u64\" }\n+current_app = { path = \"current_app\", reader = \"u64\" }\n+\n+[entity.table]\n+empty = \"当前没有应用批次。\"\n+  [[entity.table.column]]\n+  key = \"num_app\"\n+  label = \"应用数\"\n+  [[entity.table.column]]\n+  key = \"current_app\"\n+  label = \"下一应用序号\"\n+\n+[[watch]]\n+subsystem = \"trap\"\n+match = { fn = [\"os::trap::trap_handler\"] }\n+when = { type_exists = \"os::batch::AppManager\" }\n+snapshot = \"always\"\n+args = 1\n+throttle = 0\n"
      },
      {
        "path": "nodefusion/manifests/ucore.toml",
        "sha256": "7ca738a5abfb1c21afdb75b44c2fc0ce81b19d3d2db9aa3d820850b8abf74327",
        "patch": "diff --git a/nodefusion/manifests/ucore.toml b/nodefusion/manifests/ucore.toml\nindex 4312842..750f358 100644\n--- a/nodefusion/manifests/ucore.toml\n+++ b/nodefusion/manifests/ucore.toml\n@@ -33,17 +33,29 @@ steps = [\n   { iter = \"array\" },\n ]\n \n+[[entity.source]]\n+kind = \"batch\"\n+completeness = \"none\"\n+when = { all = [{ type_missing = \"proc\" }, { symbol_exists = \"clean_bss\" }, { symbol_missing = \"pool\" }, { symbol_missing = \"allocproc\" }, { symbol_missing = \"scheduler\" }] }\n+steps = []\n+\n [entity.liveness]\n-skip_when = { field = \"state\", equals = \"P_UNUSED\" }\n+skip_when = { field = \"state\", one_of = [\"UNUSED\", \"P_UNUSED\"] }\n \n [entity.fields]\n pid         = { path = \"pid\",         reader = \"i32\",  role = \"id\" }\n state       = { path = \"state\",       reader = \"enum\", enum = \"procstate\", role = \"state\" }\n \n [entity.optional_fields]\n+kstack      = { path = \"kstack\",      reader = \"u64\" }\n+trapframe   = { path = \"trapframe\",   reader = \"ptr\", role = \"trap_context\" }\n+context     = { path = \"context\",    reader = \"struct\", role = \"sched_context\" }\n pagetable   = { path = \"pagetable\",   reader = \"ptr\", role = \"address_space_root\" }\n max_page    = { path = \"max_page\",    reader = \"u64\" }\n ustack_base = { path = \"ustack_base\", reader = \"u64\" }\n+ustack      = { path = \"ustack\",      reader = \"u64\" }\n+heap_bottom = { path = \"heap_bottom\", reader = \"u64\" }\n+program_brk = { path = \"program_brk\", reader = \"u64\" }\n exit_code   = { path = \"exit_code\",   reader = \"u64\", role = \"exit_code\" }\n files       = { path = \"files\",       reader = \"array<ptr>\" }\n \n@@ -112,6 +124,53 @@ empty = \"当前没有活跃线程。\"\n \n # -------------------------------------------------------------- resources\n \n+[[entity]]\n+name = \"batch_context\"\n+type = \"trapframe\"\n+label = \"用户上下文\"\n+\n+[[entity.source]]\n+kind = \"table\"\n+completeness = \"total\"\n+when = { all = [{ type_exists = \"trapframe\" }, { symbol_exists = \"trap_page\" }, { symbol_missing = \"pool\" }] }\n+steps = [{ static = \"trap_page\" }]\n+\n+[[entity.source]]\n+kind = \"batch\"\n+completeness = \"none\"\n+when = { all = [{ type_exists = \"proc\" }, { symbol_exists = \"pool\" }, { symbol_missing = \"trap_page\" }] }\n+steps = []\n+\n+[entity.fields]\n+epc = { path = \"epc\", reader = \"u64\" }\n+user_sp = { path = \"sp\", reader = \"u64\" }\n+kernel_sp = { path = \"kernel_sp\", reader = \"u64\" }\n+a0 = { path = \"a0\", reader = \"u64\" }\n+a1 = { path = \"a1\", reader = \"u64\" }\n+a2 = { path = \"a2\", reader = \"u64\" }\n+a7 = { path = \"a7\", reader = \"u64\" }\n+\n+[entity.table]\n+empty = \"本构建没有独立的批处理上下文。\"\n+  [[entity.table.column]]\n+  key = \"epc\"\n+  label = \"返回地址\"\n+  format = \"hex\"\n+  [[entity.table.column]]\n+  key = \"user_sp\"\n+  label = \"用户栈\"\n+  format = \"hex\"\n+  [[entity.table.column]]\n+  key = \"kernel_sp\"\n+  label = \"内核栈\"\n+  format = \"hex\"\n+  [[entity.table.column]]\n+  key = \"a7\"\n+  label = \"a7\"\n+  [[entity.table.column]]\n+  key = \"a0\"\n+  label = \"a0\"\n+\n [[entity]]\n name  = \"bcache\"\n type  = \"buf\"\n@@ -264,12 +323,20 @@ empty = \"当前没有活跃 inode。\"\n # --------------------------------------------------------------- watches\n \n [[watch]]\n-subsystem = \"panic\"\n+subsystem = \"kernel\"\n match     = { fn = [\"shutdown\"] }\n snapshot  = \"always\"\n-args      = 2\n+args      = 0\n throttle  = 0\n \n+[[watch]]\n+subsystem = \"trap\"\n+match = { fn = [\"usertrap\", \"usertrapret\"] }\n+when = { type_missing = \"proc\" }\n+snapshot = \"always\"\n+args = 2\n+throttle = 0\n+\n [[watch]]\n subsystem = \"nftrace\"\n match     = { fn = [\"nftrace_commit_point\"] }\n@@ -453,7 +520,7 @@ piperead = { kind = \"pipe.read\", resource = \"pipe\" }\n pipewrite = { kind = \"pipe.write\", resource = \"pipe\" }\n pipeclose = { kind = \"pipe.close\", resource = \"pipe\" }\n \n-shutdown = { kind = \"kernel.panic\", args = [\"reason\"] }\n+shutdown = { kind = \"kernel.shutdown\" }\n \n # ----------------------------------------------------------------- profile\n \n@@ -471,12 +538,11 @@ machine_opts = [\n ]\n interactive = true\n prompt = \">> \"\n-ready_markers = [\"C user shell\"]\n-# User-space assertions deliberately print the same ``[PANIC ...]`` prefix as\n-# the kernel logger and then return a non-zero test status.  Treating that text\n-# as a kernel panic truncates aggregate suites halfway through; the shell's\n-# exit line and QEMU termination provide unambiguous outcomes instead.\n-panic_markers = [\"core dumped\"]\n+ready_markers = [\"hello wrold!\", \"C user shell\", \"start scheduler!\"]\n+done_markers = [\"ALL DONE\", \"all app are over!\", \"all apps over\"]\n+# User faults and assertions share the kernel's diagnostic text. Completion\n+# markers, process exit lines and QEMU termination determine the outcome.\n+panic_markers = []\n halt_markers = []\n stdin_preload = true\n stdin_pad = \"\\n\"\n"
      },
      {
        "path": "nodefusion/model/dwarfsrc.py",
        "sha256": "02688f5f8419ba6c8fd64ea4f347929f74c8b70299b632223c5535bab298f265",
        "patch": "diff --git a/nodefusion/model/dwarfsrc.py b/nodefusion/model/dwarfsrc.py\nindex 6716ea1..2dd0640 100644\n--- a/nodefusion/model/dwarfsrc.py\n+++ b/nodefusion/model/dwarfsrc.py\n@@ -99,6 +99,10 @@ class DwarfSource:\n         if not elf.has_dwarf_info():\n             raise RuntimeError(f\"{self.path} 里没有调试信息（.debug_info）\")\n         self.e_machine = elf.header[\"e_machine\"]\n+        symtab = elf.get_section_by_name('.symtab')\n+        self.defined_symbols = (None if symtab is None else\n+                                {s.name for s in symtab.iter_symbols()\n+                                 if s.name and s['st_shndx'] != 'SHN_UNDEF'})\n         self._exec_ranges = self._exec_sections(elf)\n         self._parse(elf.get_dwarf_info())\n         self._index_short()\n"
      },
      {
        "path": "nodefusion/model/kinds.py",
        "sha256": "0432ef9f134654bc36554ec55afcb9f91c593110cdacf0a58d0ac4d1d05ac569",
        "patch": "diff --git a/nodefusion/model/kinds.py b/nodefusion/model/kinds.py\nindex c9da0ea..5551612 100644\n--- a/nodefusion/model/kinds.py\n+++ b/nodefusion/model/kinds.py\n@@ -17,7 +17,7 @@ KINDS: frozenset[str] = frozenset({\n     \"inode.write\",\n     \"interrupt.clock\", \"interrupt.dispatch\", \"interrupt.external\",\n     \"interrupt.other\", \"interrupt.software\", \"interrupt.timer\",\n-    \"kernel.alloc_error\", \"kernel.panic\",\n+    \"kernel.alloc_error\", \"kernel.panic\", \"kernel.shutdown\",\n     \"log.begin\", \"log.commit\", \"log.end\", \"log.install\", \"log.recover\",\n     \"log.write\", \"log.write_blocks\",\n     \"pagetable.freewalk\", \"pagetable.map\", \"pagetable.new\", \"pagetable.unmap\",\n"
      },
      {
        "path": "nodefusion/model/resolve.py",
        "sha256": "0c588760d0ec6494617007b02d786285ba190593935f574f6c53b99ad62ac8c0",
        "patch": "diff --git a/nodefusion/model/resolve.py b/nodefusion/model/resolve.py\nindex 5c9b606..a655199 100644\n--- a/nodefusion/model/resolve.py\n+++ b/nodefusion/model/resolve.py\n@@ -127,6 +127,24 @@ def resolve_path(dw: DwarfSource, start: StructLayout, path: str,\n def eval_when(dw: DwarfSource, pred: dict | None) -> tuple[bool, str]:\n     if not pred:\n         return True, \"无条件\"\n+    if not isinstance(pred, dict) or len(pred) != 1:\n+        return False, \"when 需要一种谓词\"\n+    if 'all' in pred:\n+        children = pred['all']\n+        if not isinstance(children, list) or not children or any(not isinstance(p, dict) or not p for p in children):\n+            return False, \"all 需要非空的谓词数组\"\n+        results = [eval_when(dw, child) for child in children]\n+        return all(hit for hit, _ in results), '；'.join(reason for _, reason in results)\n+    if 'symbol_exists' in pred or 'symbol_missing' in pred:\n+        key = next(iter(pred))\n+        name = pred[key]\n+        if not isinstance(name, str) or not name.strip():\n+            return False, \"符号名不能为空\"\n+        symbols = getattr(dw, 'defined_symbols', None)\n+        if symbols is None:\n+            return False, \"没有完整 ELF 符号表\"\n+        exists = name in symbols\n+        return (exists if key == 'symbol_exists' else not exists), f\"符号 {name} {'在' if exists else '不在'}\"\n \n     if \"type_exists\" in pred:\n         want = pred[\"type_exists\"]\n"
      },
      {
        "path": "nodefusion/model/snapshot.py",
        "sha256": "e9c4ce76b858a9003e43d9eec363e1b88d4024338c3401b7a47a9871fe5dab7a",
        "patch": "diff --git a/nodefusion/model/snapshot.py b/nodefusion/model/snapshot.py\nindex fa095ef..0bf7cb7 100644\n--- a/nodefusion/model/snapshot.py\n+++ b/nodefusion/model/snapshot.py\n@@ -68,6 +68,8 @@ def is_live(entity: Entity, liveness: dict | None) -> bool:\n         return True\n     if \"equals\" in sw:\n         return f.value != sw[\"equals\"]\n+    if \"one_of\" in sw:\n+        return f.value not in sw[\"one_of\"]\n     return True\n \n \n"
      },
      {
        "path": "nodefusion/host/bundle.py",
        "sha256": "f6117f48b073e117dc0ffa6cdf1af4984d173b3a8f16808730e3746b51c2ad33",
        "patch": "diff --git a/nodefusion/host/bundle.py b/nodefusion/host/bundle.py\nindex a31f11f..4a3967a 100644\n--- a/nodefusion/host/bundle.py\n+++ b/nodefusion/host/bundle.py\n@@ -15,6 +15,7 @@ from .analyze import Analysis\n MAX_EVENTS = 150_000\n \n MIN_SPARE_EVENTS = 25_000\n+MIN_KIND_EVENTS = 64\n \n DIAGNOSTIC_PREFIXES = (\"func.\",)\n \n@@ -57,6 +58,25 @@ class Interner:\n         return i\n \n \n+def _kind_budgets(counts: dict[str, int], budget: int) -> tuple[dict[str, int], int]:\n+    if not counts:\n+        return {}, 0\n+    floor = min(MIN_KIND_EVENTS, budget // len(counts))\n+    if floor == 0:\n+        return {kind: int(index < budget) for index, kind in enumerate(counts)}, 0\n+    quotas = {kind: min(count, floor) for kind, count in counts.items()}\n+    remaining = budget - sum(quotas.values())\n+    residual_total = sum(counts.values()) - sum(quotas.values())\n+    cumulative = 0\n+    if residual_total:\n+        for kind, count in counts.items():\n+            residual = count - quotas[kind]\n+            quotas[kind] += ((cumulative + residual) * remaining // residual_total\n+                             - cumulative * remaining // residual_total)\n+            cumulative += residual\n+    return quotas, floor\n+\n+\n def _event_selection(events: list, *, materialize: bool) -> tuple[list, dict]:\n     \"\"\"Bound the interactive event stream while auditing the full raw trace.\"\"\"\n     raw_kinds = Counter(e.kind for e in events)\n@@ -65,7 +85,7 @@ def _event_selection(events: list, *, materialize: bool) -> tuple[list, dict]:\n     if len(events) <= MAX_EVENTS:\n         return (events if materialize else []), {\n             \"applied\": False,\n-            \"policy\": \"kind-preserving/systematic-v3\",\n+            \"policy\": \"kind-preserving/systematic-v5\",\n             \"raw\": len(events), \"retained\": len(events), \"dropped\": 0,\n             \"target_limit\": MAX_EVENTS, \"minimum_spare\": MIN_SPARE_EVENTS,\n             \"always_keep\": \"all events when the raw stream fits\",\n@@ -77,37 +97,32 @@ def _event_selection(events: list, *, materialize: bool) -> tuple[list, dict]:\n         }\n \n     spare_raw = len(events) - priority_raw\n-    semantic_kinds = {k for k in raw_kinds if _is_semantic(k)}\n-    reserved_spare = min(MIN_SPARE_EVENTS, spare_raw)\n+    semantic_counts = {k: count for k, count in raw_kinds.items() if _is_semantic(k)}\n+    reserved_spare = min(MIN_SPARE_EVENTS, spare_raw, MAX_EVENTS)\n     priority_budget = min(priority_raw, MAX_EVENTS - reserved_spare)\n+    quotas, kind_floor = _kind_budgets(semantic_counts, priority_budget)\n     room = MAX_EVENTS - priority_budget\n-    step = max(1, spare_raw // room) if room > 0 and spare_raw else 1\n+    diagnostic_counts = {k: count for k, count in raw_kinds.items() if not _is_semantic(k)}\n+    diagnostic_quotas, diagnostic_floor = _kind_budgets(diagnostic_counts, min(room, spare_raw))\n+    quotas.update(diagnostic_quotas)\n     chosen: list = []\n     retained_kinds: Counter = Counter()\n     dropped_kinds: dict[str, int] = {}\n-    spare_seen = 0\n-    spare_kept = 0\n     semantic_seen = 0\n-    first_kinds: set[str] = set()\n-    nonfirst_seen = 0\n-    nonfirst_total = priority_raw - len(semantic_kinds)\n-    nonfirst_budget = max(0, priority_budget - len(semantic_kinds))\n+    seen_by_kind: Counter = Counter()\n     for e in events:\n         if _is_semantic(e.kind):\n             semantic_seen += 1\n-            if e.kind not in first_kinds:\n-                first_kinds.add(e.kind)\n-                retain = len(first_kinds) <= priority_budget\n-            else:\n-                retain = (nonfirst_total > 0 and\n-                          (nonfirst_seen + 1) * nonfirst_budget // nonfirst_total\n-                          > nonfirst_seen * nonfirst_budget // nonfirst_total)\n-                nonfirst_seen += 1\n+        seen = seen_by_kind[e.kind]\n+        seen_by_kind[e.kind] += 1\n+        quota = quotas[e.kind]\n+        total = raw_kinds[e.kind]\n+        if seen == 0:\n+            retain = quota > 0\n         else:\n-            retain = room > 0 and spare_kept < room and spare_seen % step == 0\n-            spare_seen += 1\n-            if retain:\n-                spare_kept += 1\n+            retain = (quota > 1 and\n+                      seen * (quota - 1) // (total - 1)\n+                      > (seen - 1) * (quota - 1) // (total - 1))\n         if retain:\n             retained_kinds[e.kind] += 1\n             if materialize:\n@@ -120,15 +135,19 @@ def _event_selection(events: list, *, materialize: bool) -> tuple[list, dict]:\n \n     return chosen, {\n         \"applied\": True,\n-        \"policy\": \"kind-preserving/systematic-v3\",\n+        \"policy\": \"kind-preserving/systematic-v5\",\n         \"raw\": len(events), \"retained\": retained, \"dropped\": dropped,\n         \"target_limit\": MAX_EVENTS, \"minimum_spare\": MIN_SPARE_EVENTS,\n-        \"always_keep\": \"first event of each normalized kind within budget\",\n+        \"always_keep\": \"all events of kinds whose count fits their per-kind budget\",\n         \"priority_raw\": priority_raw, \"spare_raw\": spare_raw,\n         \"semantic_budget\": priority_budget,\n+        \"minimum_per_kind\": kind_floor,\n+        \"semantic_kind_budgets\": {k: quotas[k] for k in sorted(semantic_counts)},\n+        \"diagnostic_kind_budgets\": dict(sorted(diagnostic_quotas.items())),\n+        \"minimum_per_diagnostic_kind\": diagnostic_floor,\n         \"semantic_retained\": semantic_seen - sum(v for k, v in dropped_kinds.items()\n                                                 if _is_semantic(k)),\n-        \"spare_budget\": room, \"stride\": step if room > 0 and spare_raw else None,\n+        \"spare_budget\": room, \"stride\": None,\n         \"retained_kinds\": dict(sorted(retained_kinds.items())),\n         \"dropped_kinds\": dict(sorted(dropped_kinds.items())),\n     }\n"
      },
      {
        "path": "nodefusion/tests/test_bundle_shape.py",
        "sha256": "34d227f2726d1820160288b225243b51fe3583839ff52ee245a814eb1c27f81d",
        "patch": "diff --git a/nodefusion/tests/test_bundle_shape.py b/nodefusion/tests/test_bundle_shape.py\nindex 40bd9fe..025791a 100644\n--- a/nodefusion/tests/test_bundle_shape.py\n+++ b/nodefusion/tests/test_bundle_shape.py\n@@ -1,5 +1,6 @@\n \n import sys\n+from collections import Counter\n from pathlib import Path\n from types import SimpleNamespace as NS\n \n@@ -144,7 +145,8 @@ def test_event_selection_metadata_accounts_for_every_raw_event(monkeypatch):\n     assert audit[\"priority_raw\"] == 4\n     assert audit[\"spare_raw\"] == 26\n     assert audit[\"spare_budget\"] == 6\n-    assert audit[\"stride\"] == 4\n+    assert audit[\"stride\"] is None\n+    assert audit['diagnostic_kind_budgets'] == {'func.hot_path': 6}\n     assert sum(audit[\"retained_kinds\"].values()) == audit[\"retained\"]\n     assert sum(audit[\"dropped_kinds\"].values()) == audit[\"dropped\"]\n     assert [e.insn for e in selected[:4]] == [0, 1, 2, 3]\n@@ -156,10 +158,9 @@ def test_bounded_selector_preserves_order_and_systematic_sample(monkeypatch):\n     events = [NS(kind=(\"proc.fork\" if i in {2, 7} else \"func.hot\"), insn=i)\n               for i in range(12)]\n     selected, audit = B._select_events(events)\n-    # Ten diagnostics, four spare slots => old spare[::2][:4], interleaved\n-    # with both semantic events in original timeline order.\n-    assert [event.insn for event in selected] == [0, 2, 3, 5, 7, 8]\n-    assert audit[\"stride\"] == 2\n+    # Four per-kind positions include the first and last diagnostic entries.\n+    assert [event.insn for event in selected] == [0, 2, 4, 7, 8, 11]\n+    assert audit[\"stride\"] is None\n     assert audit[\"retained\"] == 6\n \n \n@@ -178,6 +179,79 @@ def test_large_semantic_stream_stays_browser_bounded(monkeypatch):\n     assert audit[\"raw\"] == audit[\"retained\"] + audit[\"dropped\"]\n \n \n+def test_rare_semantic_events_survive_hot_kinds_without_kernel_allowlists(monkeypatch):\n+    monkeypatch.setattr(B, 'MAX_EVENTS', 200)\n+    monkeypatch.setattr(B, 'MIN_SPARE_EVENTS', 25)\n+    events = [NS(kind='pagetable.map', insn=i) for i in range(5000)]\n+    events += [NS(kind='future_namespace.branch', insn=5000 + i) for i in range(13)]\n+    events += [NS(kind='trap.page_fault', insn=5013 + i) for i in range(4)]\n+    events += [NS(kind='func.loop', insn=5017 + i) for i in range(1000)]\n+    selected, audit = B._select_events(events)\n+    assert len(selected) == audit['retained'] == 200\n+    assert audit['retained_kinds']['future_namespace.branch'] == 13\n+    assert audit['retained_kinds']['trap.page_fault'] == 4\n+    assert audit['retained_kinds']['func.loop'] == 25\n+    assert audit['semantic_retained'] == 175\n+    assert audit['semantic_kind_budgets']['pagetable.map'] == 158\n+    hot = [item.insn for item in selected if item.kind == 'pagetable.map']\n+    assert hot[0] == 0 and hot[-1] == 4999\n+    assert [item.insn for item in selected] == sorted(item.insn for item in selected)\n+    assert B._select_events(events)[0] == selected\n+    empty, accounting = B._event_selection(events, materialize=False)\n+    assert empty == [] and accounting == audit\n+    for kind, count in Counter(item.kind for item in events).items():\n+        assert audit['retained_kinds'].get(kind, 0) + audit['dropped_kinds'].get(kind, 0) == count\n+\n+\n+def test_more_semantic_kinds_than_slots_is_still_bounded(monkeypatch):\n+    monkeypatch.setattr(B, 'MAX_EVENTS', 7)\n+    monkeypatch.setattr(B, 'MIN_SPARE_EVENTS', 2)\n+    events = [NS(kind=f'new.kind{i}', insn=i) for i in range(20)]\n+    events += [NS(kind='func.noise', insn=20 + i) for i in range(20)]\n+    selected, audit = B._select_events(events)\n+    assert len(selected) == 7\n+    assert audit['semantic_retained'] == 5 and audit['retained_kinds']['func.noise'] == 2\n+    assert sum(audit['semantic_kind_budgets'].values()) == 5\n+    assert [item.kind for item in selected[:5]] == [f'new.kind{i}' for i in range(5)]\n+    assert sum(audit['dropped_kinds'].values()) == 33\n+    assert B._event_selection(events, materialize=False)[1] == audit\n+\n+\n+def test_rare_function_entries_survive_hot_diagnostic_functions(monkeypatch):\n+    monkeypatch.setattr(B, 'MAX_EVENTS', 100)\n+    monkeypatch.setattr(B, 'MIN_SPARE_EVENTS', 25)\n+    events = [NS(kind='syscall.enter', insn=i) for i in range(1000)]\n+    events += [NS(kind='func.format', insn=1000 + i) for i in range(2000)]\n+    events += [NS(kind='func.unmap', insn=3000 + i) for i in range(2)]\n+    selected, audit = B._select_events(events)\n+    assert len(selected) == 100\n+    assert audit['retained_kinds']['func.unmap'] == 2\n+    assert audit['retained_kinds']['func.format'] == 23\n+    assert not audit['dropped_kinds'].get('func.unmap')\n+    assert selected[-1] is events[-1]\n+\n+\n+def test_kind_quotas_use_the_budget_without_exceeding_raw_counts():\n+    for counts in [{'one': 1}, {'a': 2, 'b': 1000, 'c': 9},\n+                   {str(index): index + 1 for index in range(100)}]:\n+        total = sum(counts.values())\n+        for budget in range(min(total, 300) + 1):\n+            quotas, floor = B._kind_budgets(counts, budget)\n+            assert sum(quotas.values()) == budget\n+            assert all(0 <= quotas[kind] <= count for kind, count in counts.items())\n+            assert all(quotas[kind] == count for kind, count in counts.items() if count <= floor)\n+\n+\n+def test_diagnostic_reservation_cannot_exceed_total_budget(monkeypatch):\n+    monkeypatch.setattr(B, 'MAX_EVENTS', 4)\n+    monkeypatch.setattr(B, 'MIN_SPARE_EVENTS', 25)\n+    events = [NS(kind='syscall.enter', insn=0)]\n+    events += [NS(kind='func.hot', insn=i) for i in range(1, 30)]\n+    selected, audit = B._select_events(events)\n+    assert len(selected) == 4 and audit['semantic_budget'] == 0\n+    assert audit['dropped_kinds']['syscall.enter'] == 1\n+\n+\n def test_interactive_sampling_does_not_erase_raw_semantic_coverage(monkeypatch):\n     monkeypatch.setattr(B, \"MAX_EVENTS\", 10)\n     monkeypatch.setattr(B, \"MIN_SPARE_EVENTS\", 3)\n"
      },
      {
        "path": "nodefusion/tests/test_kernel_integrations.py",
        "sha256": "8e3ecdcf6ad5ea3b7fa44a3e3244a2c9678255b62c02d8cd48de9cfc1189b376",
        "patch": "diff --git a/nodefusion/tests/test_kernel_integrations.py b/nodefusion/tests/test_kernel_integrations.py\nindex a285e88..b33e6b0 100644\n--- a/nodefusion/tests/test_kernel_integrations.py\n+++ b/nodefusion/tests/test_kernel_integrations.py\n@@ -64,7 +64,7 @@ def test_rcore_patch_and_manifest_agree_on_the_per_region_hook():\n     assert manifest.events[symbol].kind == \"vm.unmap\"\n     assert manifest.events[symbol].args == [\"start_vpn\", \"end_vpn\"]\n     assert manifest.absent[\"vm.unmap\"].when == {\n-        \"type_missing\": \"os::task::processor::Processor\"}\n+        \"type_missing\": \"os::mm::memory_set::MemorySet\"}\n \n \n def test_rcore_patch_exports_exact_physical_allocation_results():\n@@ -79,6 +79,38 @@ def test_rcore_patch_exports_exact_physical_allocation_results():\n     assert \"nodefusion_trace_sched_switch\" in patch\n \n \n+def test_rcore_reference_region_removal_is_an_attempt_not_a_success_event():\n+    manifest = load(ROOT / 'manifests/rcore.toml')\n+    symbol = 'os::mm::memory_set::MemorySet::remove_framed_area'\n+    assert manifest.events[symbol].kind == 'vm.remove_area'\n+    assert manifest.events[symbol].args == ['self', 'start_vpn', 'end_vpn']\n+    dedicated = next(index for index, watch in enumerate(manifest.watches)\n+                     if watch.match.get('fn') == ['remove_framed_area'])\n+    inline = next(index for index, watch in enumerate(manifest.watches)\n+                  if watch.match.get('fn') == ['frame_alloc', 'frame_dealloc', 'unmap', 'init_heap'])\n+    assert dedicated < inline\n+    assert manifest.watches[dedicated].args == 3\n+    assert not manifest.watches[dedicated].inlined\n+\n+\n+def test_rcore_2026a_ch4_observation_patch_preserves_region_acceptance():\n+    patch = (INTEGRATIONS / 'rcore-2026a-ch4-observation.patch').read_text()\n+    assert patch.index('})?;') < patch.index('nodefusion_vm_unmap_region(start.0, end.0);')\n+    assert patch.index('nodefusion_vm_unmap_region(start.0, end.0);') < patch.index('let mut area = self.areas.remove(index);')\n+    assert 'const NFT_ALLOCATOR_STATE: u64 = 6;' in patch\n+    assert 'a: [free_pages as u64, used_pages as u64, 0, 0]' in patch\n+    assert 'nodefusion_trace_page(NFT_KALLOC, paddr, free_pages, used_pages)' in patch\n+    assert 'nodefusion_trace_page(NFT_KFREE, PhysAddr::from(ppn).0, free_pages, used_pages)' in patch\n+    assert 'GlobalAlloc::alloc(&self.0, layout)' in patch\n+    assert 'GlobalAlloc::dealloc(&self.0, ptr, layout)' in patch\n+    manifest = load(ROOT / 'manifests/rcore.toml')\n+    event = manifest.events['os::mm::page_table::PageTable::map']\n+    assert event.kind == 'pagetable.map' and event.args == ['self', 'vpn', 'ppn', 'flags']\n+    rule = next(watch for watch in manifest.watches\n+                if watch.match == {'module': 'os::mm::page_table::PageTable', 'fn': ['map']})\n+    assert rule.args == 4 and not rule.inlined\n+\n+\n def test_rcore_chapter_patches_preserve_per_region_and_scheduler_identity():\n     for chapter in (6, 8):\n         patch = (INTEGRATIONS / f\"rcore-ch{chapter}-nodefusion.patch\").read_text(\n@@ -94,6 +126,43 @@ def test_rcore_chapter_patches_preserve_per_region_and_scheduler_identity():\n     assert \"block_current_and_run_next\" in ch8\n \n \n+def test_2026a_ch5_observation_preserves_allocator_and_switch_semantics():\n+    rust = (INTEGRATIONS / 'rcore-2026a-ch5-observation.patch').read_text()\n+    c = (INTEGRATIONS / 'ucore-2026a-ch5-observation.patch').read_text()\n+    for patch in (rust, c):\n+        assert 'nftrace_commit_point' in patch\n+        assert 'nodefusion_pagetable_map' in patch or '#[inline(never)]' in patch\n+    assert 'self.allocated -= 1;' in rust\n+    assert 'self.allocated += 1;' in rust\n+    assert 'if result.is_some()' in rust\n+    assert 'frame.as_ref().map_or(0, |frame| PhysAddr::from(frame.ppn).0)' in rust\n+    assert 'pub(crate) const NO_TASK: usize = usize::MAX;' in rust\n+    assert 'emit(4, [from_task as u64, to_task as u64, from_pid as u64, to_pid as u64])' in rust\n+    assert 'crate::nftrace::NO_TASK, next_pid' in rust\n+    assert 'crate::nftrace::sched_switch(task_id, idle, pid, crate::nftrace::NO_TASK)' in rust\n+    assert rust.index('add_task(new_task);') < rust.index('crate::nftrace::process_fork(current_task.getpid(), new_pid);')\n+    assert 'nf_used_pages--;' in c\n+    assert 'nf_used_pages++;' in c\n+    assert c.index('nf_used_pages--;') < c.index('nftrace_page_free((uint64)pa, nf_free_pages, nf_used_pages);')\n+    assert c.index('add_task(np);') < c.index('nftrace_proc_fork(p->pid, np->pid);')\n+    assert 'nftrace_sched_switch((uint64)&idle, (uint64)p, (uint64)-1, p->pid);' in c\n+    assert 'nftrace_sched_switch((uint64)p, (uint64)&idle, p->pid, (uint64)-1);' in c\n+    assert c.index('*pte = PA2PTE(pa) | perm | PTE_V;') < c.index('nodefusion_pagetable_map(a, pa, perm | PTE_V);')\n+\n+\n+def test_rcore_2026a_ch5_region_hooks_only_describe_explicit_pte_removal():\n+    patch = (INTEGRATIONS / 'rcore-2026a-ch5-observation.patch').read_text()\n+    assert 'if mapped_end > area.vpn_range.get_start()' in patch\n+    assert 'nodefusion_vm_unmap_region(area.vpn_range.get_start().0, mapped_end.0);' in patch\n+    assert 'if self.vpn_range.get_start() < self.vpn_range.get_end()' in patch\n+    assert 'nodefusion_vm_unmap_region(self.vpn_range.get_start().0, self.vpn_range.get_end().0);' in patch\n+    assert 'if new_end < self.vpn_range.get_end()' in patch\n+    assert 'nodefusion_vm_unmap_region(new_end.0, self.vpn_range.get_end().0);' in patch\n+    # Releasing data-frame ownership on exit leaves the zombie page table alive.\n+    # Do not invent explicit PTE-removal events for that separate operation.\n+    assert 'self.areas.clear();' not in patch\n+\n+\n def test_rcore_ch8_keeps_applicable_vm_and_signal_watchpoints_callable():\n     patch = (INTEGRATIONS / \"rcore-page-table-observation-points.patch\").read_text()\n     assert patch.count(\"#[inline(never)]\") == 6\n@@ -161,7 +230,7 @@ def test_rcore_filesystem_absence_depends_on_the_resolved_build(monkeypatch):\n             (\"proc.alloc\", \"os::task::task::TaskControlBlock\"),\n             (\"proc.fork\", \"os::task::processor::Processor\"),\n             (\"proc.exec\", \"os::task::processor::Processor\"),\n-            (\"vm.unmap\", \"os::task::processor::Processor\"),\n+            (\"vm.unmap\", \"os::mm::memory_set::MemorySet\"),\n             (\"phys.alloc\", \"os::mm::frame_allocator::StackFrameAllocator\"),\n             (\"phys.free\", \"os::mm::frame_allocator::StackFrameAllocator\"),\n             (\"vm.map\", \"os::mm::memory_set::MemorySet\"),\n@@ -189,6 +258,28 @@ def test_ucore_patch_and_manifest_supply_exact_semantics():\n     assert manifest.absent[\"log.commit\"].why == \"feature\"\n \n \n+def test_ucore_2026a_ch4_patch_observes_allocator_results_and_committed_ptes():\n+    patch = (INTEGRATIONS / 'ucore-2026a-ch4-observation.patch').read_text()\n+    paths = [line.split(' b/', 1)[1] for line in patch.splitlines() if line.startswith('diff --git ')]\n+    assert set(paths) == {'os/kalloc.c', 'os/vm.c', 'os/nftrace.c', 'os/nftrace.h'}\n+    assert 'NFT_KALLOC = 1' in patch and 'NFT_KFREE = 5' in patch and 'NFT_ALLOCATOR_STATE = 6' in patch\n+    assert 'nftrace_page_alloc((uint64)l, 1, nf_free_pages, nf_used_pages)' in patch\n+    assert 'nftrace_page_free((uint64)pa, 1, nf_free_pages, nf_used_pages)' in patch\n+    assert 'nftrace_allocator_state(nf_free_pages, nf_used_pages)' in patch\n+    assert patch.index('*pte = PA2PTE(pa) | perm | PTE_V;') < patch.index('nodefusion_pagetable_map(a, pa, perm | PTE_V);')\n+    assert 'const struct nftrace_record record = { type, { a0, a1, a2, a3 } }' in patch\n+\n+\n+def test_ucore_2026a_ch4_page_table_experiment_owns_and_reclaims_its_pages():\n+    patch = (INTEGRATIONS / 'ucore-2026a-ch4-pagetable-experiment.patch').read_text()\n+    assert patch.index('uvmunmap(table, va, 1, 0)') < patch.index('uvmunmap(table, va, 1, 1)')\n+    assert patch.index('uvmunmap(table, TRAMPOLINE, 1, 0)') < patch.index('freewalk(table)')\n+    assert 'walkaddr(table, va + 0x123) != (uint64)frame' in patch\n+    assert 'useraddr(table, va + 0x123) != (uint64)frame + 0x123' in patch\n+    assert 'frame[0x123] != 0x5a' in patch\n+    assert patch.index('kvm_init();') < patch.index('nodefusion_pagetable_experiment();', patch.index('kvm_init();'))\n+\n+\n def test_ucore_showcase_fixes_remain_separate_from_observation_patch():\n     observation = (INTEGRATIONS / \"ucore-nodefusion.patch\").read_text()\n     kernel_fix = (INTEGRATIONS / \"ucore-ch8-showcase.patch\").read_text()\n@@ -204,6 +295,13 @@ def test_ucore_manifest_covers_all_eight_measured_shapes():\n     manifest = load(ROOT / \"manifests\" / \"ucore.toml\")\n     assert manifest.detect == {\"all_symbol\": [\"digits\", \"SBI_SHUTDOWN\"]}\n     assert manifest.derive_feature_absence_from_symbols is True\n+    process = manifest.entity(\"process\")\n+    assert process.liveness[\"skip_when\"] == {\n+        \"field\": \"state\", \"one_of\": [\"UNUSED\", \"P_UNUSED\"]}\n+    fields = {field.name: field for field in process.fields}\n+    assert fields[\"context\"].role == \"sched_context\"\n+    assert fields[\"trapframe\"].role == \"trap_context\"\n+    assert all(fields[name].optional for name in (\"context\", \"trapframe\", \"kstack\"))\n     parent = next(field for field in manifest.entity(\"process\").relations\n                   if field.name == \"parent\")\n     assert parent.optional is True\n"
      },
      {
        "path": "nodefusion/tests/test_resolve.py",
        "sha256": "b14f432eb380c5514b73431978b01b0d715ed9a49f92deb547358fb35dd4d8ec",
        "patch": "diff --git a/nodefusion/tests/test_resolve.py b/nodefusion/tests/test_resolve.py\nindex 0eeed28..585b0a8 100644\n--- a/nodefusion/tests/test_resolve.py\n+++ b/nodefusion/tests/test_resolve.py\n@@ -97,6 +97,30 @@ def test_missing_field_is_absent_not_a_failure():\n     assert resolve_path(dw, tcb, \"inner.priority\").state == ABSENT\n \n \n+def test_rcore_priority_spellings_resolve_without_kernel_branches():\n+    from nodefusion.model.manifest import builtin_dir, load\n+    from nodefusion.model.snapshot import Entity, Field\n+\n+    manifest = load(builtin_dir() / \"rcore.toml\")\n+    specs = [field for entity in manifest.entities if entity.name == \"task\"\n+             for field in entity.fields if field.role == \"priority\"]\n+    assert {field.path for field in specs} == {\"inner.prio\", \"inner.priority\"}\n+    assert all(field.optional for field in specs)\n+    for spelling in (\"prio\", \"priority\", None):\n+        dw, tcb = chain()\n+        if spelling:\n+            dw._s[6].fields[spelling] = 136\n+        fields = {}\n+        for spec in specs:\n+            resolved = resolve_path(dw, tcb, spec.path)\n+            fields[spec.name] = Field(spec.name, resolved.state,\n+                                      value=16 if resolved.state == PRESENT else None,\n+                                      role=spec.role)\n+        entity = Entity(\"task\", 0x1000, fields=fields)\n+        assert entity.role(\"priority\") == (16 if spelling else None)\n+        assert sum(field.ok for field in fields.values()) == (1 if spelling else 0)\n+\n+\n def test_missing_field_names_the_payload_type_not_just_the_wrapper():\n     dw, tcb = chain()\n     why = resolve_path(dw, tcb, \"inner.priority\").reason or \"\"\n"
      }
    ],
    "deployed_source_files": {
      "nodefusion/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
      "nodefusion/_vendor/elftools/__init__.py": "9385fdca231d9ad83e27a59aa1bc59b252efad8c24cf08c9f39e0b543f675746",
      "nodefusion/_vendor/elftools/common/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
      "nodefusion/_vendor/elftools/common/construct_utils.py": "d1de2461e60636b52cfc446d00f7a31f152f2ccc43c1a53bc2ba82187ca1e460",
      "nodefusion/_vendor/elftools/common/exceptions.py": "bedd7aa994281100ba13a40dfaad8b03eec17a725a1c4cb23893572d99bbd1ef",
      "nodefusion/_vendor/elftools/common/utils.py": "36a5f64bfb3aab0dba30d9fa05aa1b3f9fbbf86f297eee27c7c12652f5ac308b",
      "nodefusion/_vendor/elftools/construct/__init__.py": "15104eb011a640e4268a9b9221d07201a0360ff0b1c8b49e252ef41fdfbb35de",
      "nodefusion/_vendor/elftools/construct/adapters.py": "5745745b25eb849174ee5c3179b9867b03e0471633e9eac8276aa439fe4c8841",
      "nodefusion/_vendor/elftools/construct/core.py": "df9719893de6454f5bc4c912afc892bcc278ef45ac1553bf4a409278ba347c9d",
      "nodefusion/_vendor/elftools/construct/debug.py": "491486779e464e0f4a59cfd429d8e93c577a0f0d9b969847e69400a3c86acb1c",
      "nodefusion/_vendor/elftools/construct/lib/__init__.py": "973420ec247c18b9e5488743bb099ae82f19c7287ef31dcb529a7283b6e42eb3",
      "nodefusion/_vendor/elftools/construct/lib/binary.py": "f18e4161a11bc95732bd01c577cbe98373081afd5b4112b02fec51a0e1df2e11",
      "nodefusion/_vendor/elftools/construct/lib/bitstream.py": "ee8081769bed1d00a086399c8749a847c1a48b8d08637506bf7d1229b6e1808a",
      "nodefusion/_vendor/elftools/construct/lib/container.py": "0385a420febf5bac714153ceaadd192ff9d09862bc7e17c203bf759aa18b2bb4",
      "nodefusion/_vendor/elftools/construct/lib/hex.py": "55f82dc36f273347c08e9e469fd497368241453b7a63e69e167ad6b316e5e2c7",
      "nodefusion/_vendor/elftools/construct/macros.py": "0244e84cf4f598ac8da7c3d8f1f09b06112a508e71fb8d381b377f1c0472a4e3",
      "nodefusion/_vendor/elftools/dwarf/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
      "nodefusion/_vendor/elftools/dwarf/abbrevtable.py": "d7d338a6eddd4c1fe02c66d9c2b1c202c36ebcfda28f438a0ac0546dc5a63eb1",
      "nodefusion/_vendor/elftools/dwarf/aranges.py": "399d17d0e3cc18527337d60c1ffc0cfcfc8d5ddcf86af1ef6c359453538344e3",
      "nodefusion/_vendor/elftools/dwarf/callframe.py": "6c77dd3c1b482434d8d86f35922f0c88b1a71c1c19055fa512224d44876a4b5a",
      "nodefusion/_vendor/elftools/dwarf/compileunit.py": "2681263026c2bdd3fd9033e60230024e6b25ca90280df91c3ae0b0fe97bdb9d3",
      "nodefusion/_vendor/elftools/dwarf/constants.py": "30377a1636c5ac41b7a09f7c79c6bae67b49696c4e9b9d904a1a0acaba7dabdb",
      "nodefusion/_vendor/elftools/dwarf/datatype_cpp.py": "b3df1fc9ef56f941e0b38a9ad5da05a3c3821dd1cdc4b440c7c1934bee00a770",
      "nodefusion/_vendor/elftools/dwarf/descriptions.py": "6692ed493344018f4d96fdb70e9b04bdb3ec1428df0448f17fc8ffab2a205851",
      "nodefusion/_vendor/elftools/dwarf/die.py": "b653e8091a49f6926a955d8c05f26c36798ece3d902c00d2b5da10af637bfce7",
      "nodefusion/_vendor/elftools/dwarf/dwarf_expr.py": "db6d4cb9f3f1ee7e85ac1f9286831093d1b65f8c472fe0f9331a7aa164782bcb",
      "nodefusion/_vendor/elftools/dwarf/dwarf_util.py": "2e1cc3030a3cc669e0832e3cb5d4b1e3c82e22ff5a1164e6a878931f8531ce0d",
      "nodefusion/_vendor/elftools/dwarf/dwarfinfo.py": "3cfff046c35f7b063ba4288f1d9bb5167be4f3fdda0af756a299d832d660b75f",
      "nodefusion/_vendor/elftools/dwarf/enums.py": "10d18e4acabc383b8e8527cf4c011874dc9459c3bc30bd65b9212885a146bd7a",
      "nodefusion/_vendor/elftools/dwarf/lineprogram.py": "d9472d85b8c62fe56a7d6371d8cdb8af6268416970bdf909898ccb2606fa850c",
      "nodefusion/_vendor/elftools/dwarf/locationlists.py": "5167c3fb6208e3bafe0a52fc4d48eb164dc84dbd4980643acec19be26639a194",
      "nodefusion/_vendor/elftools/dwarf/namelut.py": "4b62eb965afd3e099835eb8bb9112f2d1ec89cb42adc6b55c1f113b6068d17b3",
      "nodefusion/_vendor/elftools/dwarf/ranges.py": "da3856ee646cf5b305751fa73a2d5fd9b0a21413377ca11cf93ce20e7040386e",
      "nodefusion/_vendor/elftools/dwarf/structs.py": "dfb1d6d755bcc7cf9a0363620e470c5b4a74bf7499a32d82f261652ffe71bef8",
      "nodefusion/_vendor/elftools/dwarf/typeunit.py": "c1bae01e11001941ebd0a10b72d569b4a0800600b3006b20a0b37f88536d1bc9",
      "nodefusion/_vendor/elftools/ehabi/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
      "nodefusion/_vendor/elftools/ehabi/constants.py": "a386df95ebe53338db1cdfe498a06acf8e976007b5fab5c4eed2b8904932caa8",
      "nodefusion/_vendor/elftools/ehabi/decoder.py": "3380c750ed972e33510a42a1d4de725f744cfc156e44a5d50ae199239cacb10e",
      "nodefusion/_vendor/elftools/ehabi/ehabiinfo.py": "e442ea16826888c9903893db8ccd9cb47f9f634476c1837812c84b6ce4be1b4c",
      "nodefusion/_vendor/elftools/ehabi/structs.py": "5ebdda74af71d7637d41eb0510403d8776d3b7ea70f715edc58aabc836aaae87",
      "nodefusion/_vendor/elftools/elf/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
      "nodefusion/_vendor/elftools/elf/constants.py": "d805c36820815a58fce8593206a5527c46009756b9397298d086679b6a9d9f23",
      "nodefusion/_vendor/elftools/elf/descriptions.py": "02771b6d1d4eb829b7334e417f580f78eb253c14f895c427c99b870537d363ef",
      "nodefusion/_vendor/elftools/elf/dynamic.py": "13c2621f118f30c6a8b6a0d999bdf8a7d082f0c2b7713eb4203d7b877082f0f7",
      "nodefusion/_vendor/elftools/elf/elffile.py": "0b8629b86828f0f05dea1200261ffaf1849ae675e52943e88a37e6a5e0b73d51",
      "nodefusion/_vendor/elftools/elf/enums.py": "9beb3eb13c4dfe6e2e75ed5db7a75dbb6da7917ed7ea7ad9c2ab7b697c284256",
      "nodefusion/_vendor/elftools/elf/gnuversions.py": "d22136e3242cf4ff379154b5c830706f3be1d77ee41ffab7efeed57e4876c740",
      "nodefusion/_vendor/elftools/elf/hash.py": "538c9b253f89a4b200eeb9c7d82f9cd0c3ae08146b3295538363ba5fced3627a",
      "nodefusion/_vendor/elftools/elf/notes.py": "17cf2c2a9ec9a0bf8f3415cbaeca42d3ab8f1102556251b290a2814e86f16f63",
      "nodefusion/_vendor/elftools/elf/relocation.py": "b0fd391fe0e293ac7dc5bdad495a8d2e72454442c35291781952fa5016f77b0f",
      "nodefusion/_vendor/elftools/elf/sections.py": "5acbfe427062f3f80cad1d556c4113d60136cbe526636e621a6e820ade5d6ab5",
      "nodefusion/_vendor/elftools/elf/segments.py": "103f945c2c7d67eff713609ea189601e94c0e7122274110c6b20d038a5b8bf74",
      "nodefusion/_vendor/elftools/elf/structs.py": "a0f439925915d7f1a69938673da2cebefd0d10860d60caddc81370ce017d8623",
      "nodefusion/host/__init__.py": "eb4e72c7ca2b3242527b39bd840ced588631e97404cea0e72e3131406cdeec59",
      "nodefusion/host/__main__.py": "13a1a5b340cdcfc1902b62be90e508c7c71886000d5bf087e7854aadf09fb35e",
      "nodefusion/host/analyze.py": "b1c4a595a54058841630ba7b18818688efd00b8085b03ca91767208ec3b499e8",
      "nodefusion/host/assets/app.css": "84035a9ddf0faf3ae1d4ebdd7049c142fcee11c20851afb16f636e7220c71949",
      "nodefusion/host/assets/app.js": "ef4a9150df38c69cc2f382836b6e7ded63d58413e3b930d79b5db119548cc3f2",
      "nodefusion/host/bundle.py": "f6117f48b073e117dc0ffa6cdf1af4984d173b3a8f16808730e3746b51c2ad33",
      "nodefusion/host/callstack.py": "a091f8123f33797a628ebcaabbeae721fe458b009b69cee6697221971b7f2fc0",
      "nodefusion/host/cdp.py": "983be57750320be8265405b3fa4c3490288a34bba5b2f0c32820d51895210264",
      "nodefusion/host/cli.py": "6a2f09d5d4ea15299e3f9cbc0f7a2312a322e9c43beb3837d61b2276787af9dd",
      "nodefusion/host/dwarf.py": "158545b640bd312050c9cef773a19f0de839229cb08925a0298a5bb2751b5993",
      "nodefusion/host/elfid.py": "43c44bed9a69fa2b92fc7520342843e71caf0c6a3849d2b23b54e9a22dfdcfa0",
      "nodefusion/host/guest.py": "6871f08f11b9eda17b8a0618e8b8f43a544ddf05a37d7b530daa18d30d4c455a",
      "nodefusion/host/kernels.py": "10dcd1d97aae33b5b389d4106bdf5867468df41a39ce769300448f6d1727b103",
      "nodefusion/host/layout.py": "2f74bd4970af88fa38519c850fbcc494b8a1e4f5ddf7ed87897a442175f0ab82",
      "nodefusion/host/nfelf.py": "5495b1bc5e3406268ba66054e831dfb3fc8857c47b881d95cd995bafa65c5315",
      "nodefusion/host/nftrace.py": "d4fa97efd6527535ab90e4c623e8211bf8b9bf7d189beee47b56b216718c2f76",
      "nodefusion/host/procview.py": "ae1874f57bafa6b694c50aa3c0185671e60fcf0f784d139ee5e807e2f98e9689",
      "nodefusion/host/record.py": "ed6668c5711bcddff0e30a4b82eaf9235e6700746ce186042e39e45219b55428",
      "nodefusion/host/render.py": "46d000d2f40eb934180fba10ec8d8ccb8cc5d1e53e558304fdba941bfcff7dd8",
      "nodefusion/host/resources.py": "019a7be1fc7d86f221f2a67c3a5f7df271d1901500371a02a2113518483fb702",
      "nodefusion/host/shell.py": "08a9b0318ab79c0642d9a0b29683dc65b86c4e529f547530baf4e60b1e67f0af",
      "nodefusion/host/video.py": "1f49810a036f9388ae10153b8691504ed79c3e8b0e19a6bc2818de2ef1fe699d",
      "nodefusion/host/watchlist.py": "1b820dd5d741a118b28959b44d95b886e5fe7518dd5beef3e5561e3cf39822d1",
      "nodefusion/host/wslenv.py": "6b8f5d9e3f71b292e51c980f921dd498315c510d952ef90b24dfbf775b3afa6c",
      "nodefusion/manifests/alien.toml": "da290fe1014168a7e8f44844f30430c3041a14550449c5d51fa06847f23f7aeb",
      "nodefusion/manifests/arceos.toml": "cad48257d081aa1c660d3e7af2f4fbec79bbe232322c71453a9a5b1c9ac7be44",
      "nodefusion/manifests/axvisor.toml": "d6cd2cc9d9662f74a5d25f29e8d02591ae5a205fe18166307ef430edbc7432b3",
      "nodefusion/manifests/rcore.toml": "4a6c4746a885ce7ed68a374516188f02d5955028c94ecfa7e73c5ddf08b73e75",
      "nodefusion/manifests/rel4.toml": "ca43c2847a9ca757542ef3ed3e276dc7130c92b25150c73deb3e2a20faf8c37e",
      "nodefusion/manifests/starry.toml": "8a3ce9735d4c948322962b8c532be334034ad608aac28a041bb58876012dcae8",
      "nodefusion/manifests/ucore.toml": "7ca738a5abfb1c21afdb75b44c2fc0ce81b19d3d2db9aa3d820850b8abf74327",
      "nodefusion/manifests/xv6.toml": "0f501a4441214a2de3b1b50d39665ee23faad6f93024b3b92d30f542bc9b7964",
      "nodefusion/model/__init__.py": "9864ab2acb9890ed2fcbf815f30042fd97e3bd5ce069531f8c76fa2eed60b9d0",
      "nodefusion/model/ctxbuild.py": "552c0d3d87d640e73bfb4c3fc237453c7b84298c721f2d37594c85d1ab5eb86d",
      "nodefusion/model/dwarfsrc.py": "02688f5f8419ba6c8fd64ea4f347929f74c8b70299b632223c5535bab298f265",
      "nodefusion/model/exec.py": "148e68fa1c7054716e4fcb3e7bddb7c0d384ab6a6bfcb00bd15f7a869f6d86ec",
      "nodefusion/model/kinds.py": "0432ef9f134654bc36554ec55afcb9f91c593110cdacf0a58d0ac4d1d05ac569",
      "nodefusion/model/layout.py": "cd2639282b0c4fac684d06309e11e95922213d3d32698f275e65dd060f677fd6",
      "nodefusion/model/manifest.py": "d592aaac9ae308760cda947327c0d7c0e964a26d517740ed66838747e2334a22",
      "nodefusion/model/plan.py": "374fbb225a6717c2c391ac8bdda54aa957638821a45b2865b40a7be9bcc808c6",
      "nodefusion/model/probe.py": "30546d56bbd47ef12567826b49dd910de07e2af8fffc5c4350e04a57f70da5b8",
      "nodefusion/model/readers/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
      "nodefusion/model/readers/containers.py": "6eec01bd4f30858e1eda2ee7de890a9d93f94eda25e02d0a1bdf3558d31a1610",
      "nodefusion/model/readers/pointers.py": "72f989d643df6bdd477494023aac2da851f2d1f123d5e1e64b7629a0be6eae6b",
      "nodefusion/model/readers/registry.py": "2c35cc0b1f8db857e67c08e9c7976bf47c6ab21faabb4e242d8a0be42f9634ee",
      "nodefusion/model/readers/scalars.py": "a145fe5c4a250cc11fe44d0a4caabae908fbc44994335663955230296f695cbc",
      "nodefusion/model/resolve.py": "0c588760d0ec6494617007b02d786285ba190593935f574f6c53b99ad62ac8c0",
      "nodefusion/model/roles.py": "8d35b0497bd0b2d9abf639d9803fc6b7bd1e1ee5153c0f47ff53a26356dcc8c5",
      "nodefusion/model/rt.py": "3d62e9c6169e89a2593b29ff49919e84a2dda1df1b6fc16d3e54c7cc5d1744af",
      "nodefusion/model/snapshot.py": "e9c4ce76b858a9003e43d9eec363e1b88d4024338c3401b7a47a9871fe5dab7a",
      "nodefusion/model/symbols.py": "05812b00228ba601209ec909213381d47272efdbcac3957914f4590a1d705cfe",
      "nodefusion/model/watchsel.py": "bc3a9d6763950c265efaacce3f0c98194f54808d676b449c5b320b3a90cc7bf1",
      "nodefusion/tests/conftest.py": "2dfa19b096e309beadff0df9a05761d412ec6234e74968854292d7bfecf1b7a5",
      "nodefusion/tests/crosscheck_artifacts.py": "6ee173a31795c3875f93af0a0eaebcb27346c185c24e3f1d32846f5ca89d60a0",
      "nodefusion/tests/fuzz_trace.py": "af6189a6538747d369f982dfb86016f5e48842da0ce73f651b63c0b482b1c37e",
      "nodefusion/tests/kernelelf.py": "9a35d1389243849c6ed16f801a007568eb1304eee3d2cf3bcb8d1e38e12e2aed",
      "nodefusion/tests/stress_pagetable.py": "5db6d3671739ad5d0a3f76908049126185ea000726d0044d4d87ef215f26f737",
      "nodefusion/tests/test_absent_declaration.py": "535d4ace194fc5f923ba989e18634b55cffd0660eaefdfc7a59dcb4377eac266",
      "nodefusion/tests/test_analysis_lookup_cache.py": "aa4fbc0b8f06c64278bc5b11edf21cfe3ec737e3f0d88901b52478aca29765f3",
      "nodefusion/tests/test_analyze_alias.py": "345f6cbd8fae2a7c7729130460112a08a23599461234865f2da72055c3621064",
      "nodefusion/tests/test_arg_names.py": "a0f4cd7c7017da1926fc317d6c73bcb6bd4bacde579e3818fa277079991a4af4",
      "nodefusion/tests/test_artifact_guard.py": "8b53fababf688ceaf4afd1556d3c1352d3a13c60ea43fe14e3d3eae24698d1d0",
      "nodefusion/tests/test_artifact_output_safety.py": "cbed1bfa5928e7b12edc85b506f8018dd3216f017c43461525daf0a299bea9aa",
      "nodefusion/tests/test_bundle_shape.py": "34d227f2726d1820160288b225243b51fe3583839ff52ee245a814eb1c27f81d",
      "nodefusion/tests/test_cache_hit_contract.py": "087277fe75bf38d8e83453b3671da4825f7586382fc1fa5300b3dc79272fbee7",
      "nodefusion/tests/test_calibration_failure_reason.py": "02449f59da919dc09781a66ad57789a98775b3888d1480f4f3064b4d8a1139da",
      "nodefusion/tests/test_callstack.py": "f81c2f42b453d26287f1cbab835cff47a2722d8c62b486529fbbcfc20c94c872",
      "nodefusion/tests/test_capability_notes.py": "a2fb61afdc826c0c5408ea3b385761f896b27191e54881c3e10b10a2f01cc272",
      "nodefusion/tests/test_compact_capability_ui.py": "07542f2beb95353f3dd3861ca3ffcec93d1f46c966c3dd74c82d27fc3b6427ad",
      "nodefusion/tests/test_consolidate_artifacts.py": "5ffa4d01f5adb051f2153c3097d2264dfa7c63533f4cf6c09159fc50cd843cdd",
      "nodefusion/tests/test_context_switch_snapshot.py": "db5c77b5ab4ad93d34a96266386dbeec80694db7482bfa5856c1547f773ccb9d",
      "nodefusion/tests/test_corpus_selection.py": "1717ce9682ecde7a05675b790914a8e5a590e1d83556944ddbfff1e38918d050",
      "nodefusion/tests/test_coverage_evidence.py": "fdbb041e7339f8d94a52a1833b01e315657a749e9bc7d21fee6a2724f23a86f3",
      "nodefusion/tests/test_demangle_v0.py": "9f91c7ab6d2f681368c63d2bde9109cb4dd501f4d5df3e1f728a7b8975a0b061",
      "nodefusion/tests/test_dwarf_generic_base.py": "f9204c883a298151406288885c32c04fd1e7db423fe6cb0747f0f4392ba0fef5",
      "nodefusion/tests/test_dwarf_tombstones.py": "ed608be359e8180a5355cafe93e64d417543cc014461710f55fcd5997bef7295",
      "nodefusion/tests/test_dwarfsrc_location.py": "bcd7c6e8cf00a086fd9c712ffa35aebfbb4e09aaf20ddaedc4f2f5b41604cad9",
      "nodefusion/tests/test_elf_archive.py": "573747576adf2bf4daf66d5f99b6a149eff663ebcd6743b79b4b39d57d20dda5",
      "nodefusion/tests/test_elfid.py": "3efd46b3688e79f7ccc376abb32f20b495b7c074dbd84c5181d67fade3db729c",
      "nodefusion/tests/test_event_kind_pairs_measured_from_runs.py": "ef1a4ce55dc22b8f1073f3d4ac9120b30c68cf0877ba6e4dc5788f81217cdf55",
      "nodefusion/tests/test_event_kind_registry.py": "276bb984ee002622d0284558df13234328a3779853c5b1681d71d827069bfd9d",
      "nodefusion/tests/test_event_kinds.py": "7d066f949905b4df866f0ebfa3ead6cc3b78c7d8416d8b0a5660332dd2f6ef47",
      "nodefusion/tests/test_event_snapshot_throttle.py": "2709d806da483ef8bcdb57ddb6c59a73da83a859b793d7cd5d15891ccfcedd87",
      "nodefusion/tests/test_event_when_branches.py": "0b866c908cbc40deca18830293d161eb9b1f3401792d3fed1b1041e7e9b5e2de",
      "nodefusion/tests/test_exec_iter_map.py": "026e1e908df1884c4d241902c845dd72a43c095e5ab28e94fb7069f621698562",
      "nodefusion/tests/test_exec_walk.py": "67fc662f5b36cff81c1c1ab6a1dfe842081a05a1c3f69a64e8d212da0b7cb985",
      "nodefusion/tests/test_func_events_scope.py": "de9f69b6673c312537ce72cfd6c91baa4355749558609ca0b696c21d8f790198",
      "nodefusion/tests/test_kernel_elf_fixture.py": "ada3976b4b49734884bdb9b3844886e92251240671fe8ae219ed1f70c32c935b",
      "nodefusion/tests/test_kernel_image_fit.py": "32c7bd1bf3b66c7071b36582ca32838af2777157f1ae999a46785e6a39675476",
      "nodefusion/tests/test_kernel_integrations.py": "8e3ecdcf6ad5ea3b7fa44a3e3244a2c9678255b62c02d8cd48de9cfc1189b376",
      "nodefusion/tests/test_kernel_view.py": "4cc544296573cab8df9858947e6d7040fb22aba4b29aac1b43a565b39d9e7ab5",
      "nodefusion/tests/test_kind_three_states.py": "64764f687af895b3b37bc69179f2729f49efe2fb5fc5a24ecc09c41ea38e70ed",
      "nodefusion/tests/test_layout_routing.py": "14631aae85b75dcb1c1c5cec92c344f1c01433e2ae6eb90a3c105ac583372a5c",
      "nodefusion/tests/test_list_arceos.py": "22dbff8051cf7076ad5be6f919ed6d9a0c7a70bd1b6e09ca2f6589b5fb94493f",
      "nodefusion/tests/test_list_wiring.py": "e5f187b746738a5ca027936468df8ab7d2e48e32fe550eca3fa57f217c60d5cb",
      "nodefusion/tests/test_manifest_docs.py": "9be0200ca41d0f0512519356c81911cbbaf2aca63530d99e2aba53de9a1eea37",
      "nodefusion/tests/test_manifest_lint.py": "ad03a1e3519feb79fbeacdbe6576f90b05e7c6c9cb3034c44bd1032163b69888",
      "nodefusion/tests/test_manifest_roles.py": "b1a8fca196f9b37b614f3cd39abe33ad64c58894d1c933996d553c8f573d147e",
      "nodefusion/tests/test_manifest_vocabulary.py": "834eb61d446df47b1c6ebcd4e8a7347eabc24486da052b4be8f5b0660b0f631d",
      "nodefusion/tests/test_metric_deps_are_kinds_not_xv6_names.py": "07f411bb3fcbb14c2eb6c222f4a4928426a86a45d82f11cb242130c49eb6c717",
      "nodefusion/tests/test_no_build.py": "f831e3504531cdd9f8f588428e7a7e86fa420bdee27cbf74522fac05bb27d6fa",
      "nodefusion/tests/test_pagetable_arch.py": "9946ed7788d72107d6c6ea81fa4204843e1a0ae291add95259f3e96a0f661eb2",
      "nodefusion/tests/test_path_index_gate.py": "8486e4f1d0d8f91800321a7907ae6797a59d6576cae0614c8db6f91c8ecee9ae",
      "nodefusion/tests/test_percpu_layout.py": "4ecfcf97552e678173bca5fe81eb661bc7f417ba2f4ea4de3c540ba956152495",
      "nodefusion/tests/test_percpu_runtime_layout.py": "ba54784385c6a6716eb3f3317635c8b2dd09b40e5e3e5e6112ca5b92d4e7c62c",
      "nodefusion/tests/test_phys_alloc_gate.py": "a9a2a0b654cc803871d3702c25d2cfae95f8b1d3d8a881f00579fb3a0ef2fd02",
      "nodefusion/tests/test_plan_iter_map.py": "58fcacc67e31cf6638ce4d846dccf32312ae17caed1d9470d0ba468fd95a4b5a",
      "nodefusion/tests/test_plan_percpu.py": "5ece34163ede167484cc5edd5d3255d8514935af7a385b171b1b64c6e928140e",
      "nodefusion/tests/test_plan_steps.py": "0241755b6c85983779fad700e2eba5332ab595cc64e6297e8358ba4d15f9dfb7",
      "nodefusion/tests/test_procs_gate.py": "8acd3d3e2398fcd008dd4f5bae735183008eb4cecf6f4c09d0fffaefdf50cd8d",
      "nodefusion/tests/test_procview.py": "9f48157ccc96833a83a42f2f3c3eb26a82bd7f6918c0c3c91a6052c5d9657428",
      "nodefusion/tests/test_profile_from_manifest.py": "9f7cf3aa6cb931445e9e6c763bf2c30b1505e4b728f759514033994b5b60b16c",
      "nodefusion/tests/test_rcore_fs_vocabulary.py": "48c49c9f091d4c964715cf55216b8354ea59697a0ef58ec18850f5e8e89f80c5",
      "nodefusion/tests/test_rcore_inlined_halves.py": "fd61e489c857fcaa5cdbe2466e74b1ba6a547eb7b18fd12fbda80ce927c6f516",
      "nodefusion/tests/test_readers_containers.py": "b0f882dd388f9bc3796b8f5d8c29d72c7dd6b5d8b7866055f810a7bbb2295d2f",
      "nodefusion/tests/test_readers_pointers.py": "e15d27e41ca320d960720f6760ffd0ff6216f658c74ab373148dc3307fa24fd8",
      "nodefusion/tests/test_readers_registry.py": "b139bcca13c15f203e73a427d9d6dc5804b97fc76a28d14025325f191cc4a6a5",
      "nodefusion/tests/test_readers_scalars.py": "3a15bf0648767fb8e7d24044aeb61eb312ace64ab51f834e0a2dfe39072b9cd5",
      "nodefusion/tests/test_record_icount.py": "b84db1f0c55683e9ccf8eaafdcef09dd37bb67a5fa555814d4d750ff97f844df",
      "nodefusion/tests/test_recording_tail.py": "833b8e33c6d111b49790beea1ba7ab81b23bd7ea907a2155f981967bcb61a614",
      "nodefusion/tests/test_regenerate_artifact.py": "4b2046cdcc98219c4181ca174f4ca02b6e3b5cfbfdd7bb6506c85112007e21f3",
      "nodefusion/tests/test_resolve.py": "b14f432eb380c5514b73431978b01b0d715ed9a49f92deb547358fb35dd4d8ec",
      "nodefusion/tests/test_resources.py": "0860476f362a770bd04355592a83fdb15aa9df3787c6c740d407cb8ee4fc817e",
      "nodefusion/tests/test_sampled_counts_are_not_exact.py": "7bd598eb07ef0b067cee3460ef0c61d18b8b918ae697d80b01617cf73eaf0a9a",
      "nodefusion/tests/test_shell_verdict.py": "22baff1ad7cb43b5c5574b424812c40b194e30e3800921429659f7b31cbe20f4",
      "nodefusion/tests/test_snapshot.py": "17ef07a10857516f2fd29186157b945ff67490d2cdac94166cf370e96171e034",
      "nodefusion/tests/test_source_combine.py": "506ebb5c6dda153e92b854887fb671cf4aa08d33fd8305b359139a1d38ee4349",
      "nodefusion/tests/test_spec_nftrace_registry.py": "c529a4ed1f86bee4951e4699b09d466d51a5bd0623accc49bff9abcfdf15e615",
      "nodefusion/tests/test_split_rawvec.py": "e80f55fc42e246f3f638979500c7c40548eb0f630c512a93b8eaa00df312eac4",
      "nodefusion/tests/test_switch_attribution.py": "c773376888e9dc2ce87ddbebc14ccb0649ea77da189319692e20aff16eddb73d",
      "nodefusion/tests/test_symbols_static_wrapper.py": "cf634a6545564e8949b9129cee0c5f01f3dcf60effd49883c3b908aa28af7f82",
      "nodefusion/tests/test_trace_complete.py": "ac33d1da9aba97c98c68502188522a253709e96cf3fbb8d3c94b85c661cea366",
      "nodefusion/tests/test_trace_streaming.py": "6c972f95a790afac5b9aa84320038bf0eab41b926126334db7290d095f2b1e10",
      "nodefusion/tests/test_units.py": "c5b167cca227c5620b958329f5461232bc73e22997e5fe58a02859bb3664feef",
      "nodefusion/tests/test_unobservable_does_not_speak_for_the_kernel.py": "448c03147a2306d8205762bdc9a9e0d9e8d5eb0e0c5199d17d80c2f076f87547",
      "nodefusion/tests/test_video_sections.py": "c84c17b471460ae45a25341a8f893768816f57a9eb94e9f9a90e7e20406c4a31",
      "nodefusion/tests/test_watchlist_wire.py": "1e01dd4fde92169c0ab1296dbd249865cddde4173ec8de3c71c39f61356f74c3",
      "nodefusion/tests/test_watchsel.py": "89c8bb635534d079e0502d1c118f32eaa806250d74195a9d99bb71d07aabcd2d",
      "nodefusion/tools/crosscheck_decoder.py": "2f69a3f636d910f93f24939bcd03b41d9b0a17184ce4a4b15250e00f65b47a28",
      "nodefusion/tools/crosscheck_dwarf.py": "b30ecfa371c6959b2522db6d9edabf7e0c7be238feef34ff9411d76a4b4fdf01",
      "nodefusion/tools/crosscheck_layout.py": "d77ebd7aaa1ace070392eca0051f1b34dbf65d08c355edf87101b7e449aa7106",
      "nodefusion/tools/crosscheck_offsetof.py": "732e30d19129e0a1f15e33a2c1f96d940abaa1a26829b8f0d7bc44bf873cdc87",
      "nodefusion/tools/crosscheck_procinfo.py": "c3d6dd588b28d9252ddb712dea0ab8d3212dffed7f9256b9b936860fa0dfb8a9",
      "nodefusion/tools/crosscheck_procs.py": "b497c8fd050c0d6d1e4154eda00c1eef05502d3826546b1165b8a740c6fee562",
      "nodefusion/tools/crosscheck_resources.py": "98b04ac869e3c9e38020728473d480b8ed0b15385bc1d530e466919807ad1ac3",
      "nodefusion/tools/crosscheck_watchsel.py": "52142d49e919f2f040371b404cabdef0d0edbbf977abdcb1af5063b910d0aad8",
      "nodefusion/tools/survey_chapters.py": "6952dbdb8036916acd17bd5f642ea0b62aa10cbbec2bb4227e58f5132683589b",
      "scripts/benchmark_trace.py": "0faf86ba735bc31a20ee8e7ae3d3aad8aef78f0f43cdd33e831658f4e2a71494",
      "scripts/consolidate_artifacts.py": "31700c7f0a1f21fef653e061115b0091aa1a4ce539b9baa9cb48ad914889dadd",
      "scripts/finalize_artifacts.py": "a10224f43e0554eeb347a201dfd29781fbe0a39b979f890cccbec65e76cea9eb",
      "scripts/regenerate_artifact.py": "aed10d1eedc5689b6fd68e84a9bb8ae0c98f7bb8456fd8bd280e8bae470b8e9a"
    },
    "plugin_sha256": "f1d1d8e375ed789b57f0fa06285da182b90951324e09e3f0c3716a38353112f2",
    "source_archive": {
      "path": "/home/joseph/nf/education-2026A-20260927/ucore-2026A-ch5-observed-source.tar.gz",
      "sha256": "de85baf4c96e253819756fe13fe4e8456e066f970404b10659ec19837b3bbc9d",
      "bytes": 994565
    }
  },
  "analysis_source": {
    "nodefusion_commit": "bce9de05d36d5cdd0afc71121e7c9b1016c08664",
    "deployed_source_files": {
      "nodefusion/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
      "nodefusion/_vendor/elftools/__init__.py": "9385fdca231d9ad83e27a59aa1bc59b252efad8c24cf08c9f39e0b543f675746",
      "nodefusion/_vendor/elftools/common/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
      "nodefusion/_vendor/elftools/common/construct_utils.py": "d1de2461e60636b52cfc446d00f7a31f152f2ccc43c1a53bc2ba82187ca1e460",
      "nodefusion/_vendor/elftools/common/exceptions.py": "bedd7aa994281100ba13a40dfaad8b03eec17a725a1c4cb23893572d99bbd1ef",
      "nodefusion/_vendor/elftools/common/utils.py": "36a5f64bfb3aab0dba30d9fa05aa1b3f9fbbf86f297eee27c7c12652f5ac308b",
      "nodefusion/_vendor/elftools/construct/__init__.py": "15104eb011a640e4268a9b9221d07201a0360ff0b1c8b49e252ef41fdfbb35de",
      "nodefusion/_vendor/elftools/construct/adapters.py": "5745745b25eb849174ee5c3179b9867b03e0471633e9eac8276aa439fe4c8841",
      "nodefusion/_vendor/elftools/construct/core.py": "df9719893de6454f5bc4c912afc892bcc278ef45ac1553bf4a409278ba347c9d",
      "nodefusion/_vendor/elftools/construct/debug.py": "491486779e464e0f4a59cfd429d8e93c577a0f0d9b969847e69400a3c86acb1c",
      "nodefusion/_vendor/elftools/construct/lib/__init__.py": "973420ec247c18b9e5488743bb099ae82f19c7287ef31dcb529a7283b6e42eb3",
      "nodefusion/_vendor/elftools/construct/lib/binary.py": "f18e4161a11bc95732bd01c577cbe98373081afd5b4112b02fec51a0e1df2e11",
      "nodefusion/_vendor/elftools/construct/lib/bitstream.py": "ee8081769bed1d00a086399c8749a847c1a48b8d08637506bf7d1229b6e1808a",
      "nodefusion/_vendor/elftools/construct/lib/container.py": "0385a420febf5bac714153ceaadd192ff9d09862bc7e17c203bf759aa18b2bb4",
      "nodefusion/_vendor/elftools/construct/lib/hex.py": "55f82dc36f273347c08e9e469fd497368241453b7a63e69e167ad6b316e5e2c7",
      "nodefusion/_vendor/elftools/construct/macros.py": "0244e84cf4f598ac8da7c3d8f1f09b06112a508e71fb8d381b377f1c0472a4e3",
      "nodefusion/_vendor/elftools/dwarf/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
      "nodefusion/_vendor/elftools/dwarf/abbrevtable.py": "d7d338a6eddd4c1fe02c66d9c2b1c202c36ebcfda28f438a0ac0546dc5a63eb1",
      "nodefusion/_vendor/elftools/dwarf/aranges.py": "399d17d0e3cc18527337d60c1ffc0cfcfc8d5ddcf86af1ef6c359453538344e3",
      "nodefusion/_vendor/elftools/dwarf/callframe.py": "6c77dd3c1b482434d8d86f35922f0c88b1a71c1c19055fa512224d44876a4b5a",
      "nodefusion/_vendor/elftools/dwarf/compileunit.py": "2681263026c2bdd3fd9033e60230024e6b25ca90280df91c3ae0b0fe97bdb9d3",
      "nodefusion/_vendor/elftools/dwarf/constants.py": "30377a1636c5ac41b7a09f7c79c6bae67b49696c4e9b9d904a1a0acaba7dabdb",
      "nodefusion/_vendor/elftools/dwarf/datatype_cpp.py": "b3df1fc9ef56f941e0b38a9ad5da05a3c3821dd1cdc4b440c7c1934bee00a770",
      "nodefusion/_vendor/elftools/dwarf/descriptions.py": "6692ed493344018f4d96fdb70e9b04bdb3ec1428df0448f17fc8ffab2a205851",
      "nodefusion/_vendor/elftools/dwarf/die.py": "b653e8091a49f6926a955d8c05f26c36798ece3d902c00d2b5da10af637bfce7",
      "nodefusion/_vendor/elftools/dwarf/dwarf_expr.py": "db6d4cb9f3f1ee7e85ac1f9286831093d1b65f8c472fe0f9331a7aa164782bcb",
      "nodefusion/_vendor/elftools/dwarf/dwarf_util.py": "2e1cc3030a3cc669e0832e3cb5d4b1e3c82e22ff5a1164e6a878931f8531ce0d",
      "nodefusion/_vendor/elftools/dwarf/dwarfinfo.py": "3cfff046c35f7b063ba4288f1d9bb5167be4f3fdda0af756a299d832d660b75f",
      "nodefusion/_vendor/elftools/dwarf/enums.py": "10d18e4acabc383b8e8527cf4c011874dc9459c3bc30bd65b9212885a146bd7a",
      "nodefusion/_vendor/elftools/dwarf/lineprogram.py": "d9472d85b8c62fe56a7d6371d8cdb8af6268416970bdf909898ccb2606fa850c",
      "nodefusion/_vendor/elftools/dwarf/locationlists.py": "5167c3fb6208e3bafe0a52fc4d48eb164dc84dbd4980643acec19be26639a194",
      "nodefusion/_vendor/elftools/dwarf/namelut.py": "4b62eb965afd3e099835eb8bb9112f2d1ec89cb42adc6b55c1f113b6068d17b3",
      "nodefusion/_vendor/elftools/dwarf/ranges.py": "da3856ee646cf5b305751fa73a2d5fd9b0a21413377ca11cf93ce20e7040386e",
      "nodefusion/_vendor/elftools/dwarf/structs.py": "dfb1d6d755bcc7cf9a0363620e470c5b4a74bf7499a32d82f261652ffe71bef8",
      "nodefusion/_vendor/elftools/dwarf/typeunit.py": "c1bae01e11001941ebd0a10b72d569b4a0800600b3006b20a0b37f88536d1bc9",
      "nodefusion/_vendor/elftools/ehabi/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
      "nodefusion/_vendor/elftools/ehabi/constants.py": "a386df95ebe53338db1cdfe498a06acf8e976007b5fab5c4eed2b8904932caa8",
      "nodefusion/_vendor/elftools/ehabi/decoder.py": "3380c750ed972e33510a42a1d4de725f744cfc156e44a5d50ae199239cacb10e",
      "nodefusion/_vendor/elftools/ehabi/ehabiinfo.py": "e442ea16826888c9903893db8ccd9cb47f9f634476c1837812c84b6ce4be1b4c",
      "nodefusion/_vendor/elftools/ehabi/structs.py": "5ebdda74af71d7637d41eb0510403d8776d3b7ea70f715edc58aabc836aaae87",
      "nodefusion/_vendor/elftools/elf/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
      "nodefusion/_vendor/elftools/elf/constants.py": "d805c36820815a58fce8593206a5527c46009756b9397298d086679b6a9d9f23",
      "nodefusion/_vendor/elftools/elf/descriptions.py": "02771b6d1d4eb829b7334e417f580f78eb253c14f895c427c99b870537d363ef",
      "nodefusion/_vendor/elftools/elf/dynamic.py": "13c2621f118f30c6a8b6a0d999bdf8a7d082f0c2b7713eb4203d7b877082f0f7",
      "nodefusion/_vendor/elftools/elf/elffile.py": "0b8629b86828f0f05dea1200261ffaf1849ae675e52943e88a37e6a5e0b73d51",
      "nodefusion/_vendor/elftools/elf/enums.py": "9beb3eb13c4dfe6e2e75ed5db7a75dbb6da7917ed7ea7ad9c2ab7b697c284256",
      "nodefusion/_vendor/elftools/elf/gnuversions.py": "d22136e3242cf4ff379154b5c830706f3be1d77ee41ffab7efeed57e4876c740",
      "nodefusion/_vendor/elftools/elf/hash.py": "538c9b253f89a4b200eeb9c7d82f9cd0c3ae08146b3295538363ba5fced3627a",
      "nodefusion/_vendor/elftools/elf/notes.py": "17cf2c2a9ec9a0bf8f3415cbaeca42d3ab8f1102556251b290a2814e86f16f63",
      "nodefusion/_vendor/elftools/elf/relocation.py": "b0fd391fe0e293ac7dc5bdad495a8d2e72454442c35291781952fa5016f77b0f",
      "nodefusion/_vendor/elftools/elf/sections.py": "5acbfe427062f3f80cad1d556c4113d60136cbe526636e621a6e820ade5d6ab5",
      "nodefusion/_vendor/elftools/elf/segments.py": "103f945c2c7d67eff713609ea189601e94c0e7122274110c6b20d038a5b8bf74",
      "nodefusion/_vendor/elftools/elf/structs.py": "a0f439925915d7f1a69938673da2cebefd0d10860d60caddc81370ce017d8623",
      "nodefusion/host/__init__.py": "eb4e72c7ca2b3242527b39bd840ced588631e97404cea0e72e3131406cdeec59",
      "nodefusion/host/__main__.py": "13a1a5b340cdcfc1902b62be90e508c7c71886000d5bf087e7854aadf09fb35e",
      "nodefusion/host/analyze.py": "310d26f5c89334c05ee697bb5709a8e8bbce140bcb67f2d3450a09232a3d38b7",
      "nodefusion/host/assets/app.css": "0607be541e6bcd789a1964e74a6677a87d5d593684d6ac809782056ab7c0695a",
      "nodefusion/host/assets/app.js": "c253b16d88ddc73d1c78ec3729800800ad255b923712893dbe12f66faab2aca2",
      "nodefusion/host/bundle.py": "f6117f48b073e117dc0ffa6cdf1af4984d173b3a8f16808730e3746b51c2ad33",
      "nodefusion/host/callstack.py": "a091f8123f33797a628ebcaabbeae721fe458b009b69cee6697221971b7f2fc0",
      "nodefusion/host/cdp.py": "983be57750320be8265405b3fa4c3490288a34bba5b2f0c32820d51895210264",
      "nodefusion/host/cli.py": "6a2f09d5d4ea15299e3f9cbc0f7a2312a322e9c43beb3837d61b2276787af9dd",
      "nodefusion/host/dwarf.py": "158545b640bd312050c9cef773a19f0de839229cb08925a0298a5bb2751b5993",
      "nodefusion/host/elfid.py": "43c44bed9a69fa2b92fc7520342843e71caf0c6a3849d2b23b54e9a22dfdcfa0",
      "nodefusion/host/guest.py": "6871f08f11b9eda17b8a0618e8b8f43a544ddf05a37d7b530daa18d30d4c455a",
      "nodefusion/host/kernels.py": "10dcd1d97aae33b5b389d4106bdf5867468df41a39ce769300448f6d1727b103",
      "nodefusion/host/layout.py": "2f74bd4970af88fa38519c850fbcc494b8a1e4f5ddf7ed87897a442175f0ab82",
      "nodefusion/host/nfelf.py": "5495b1bc5e3406268ba66054e831dfb3fc8857c47b881d95cd995bafa65c5315",
      "nodefusion/host/nftrace.py": "d4fa97efd6527535ab90e4c623e8211bf8b9bf7d189beee47b56b216718c2f76",
      "nodefusion/host/procview.py": "ae1874f57bafa6b694c50aa3c0185671e60fcf0f784d139ee5e807e2f98e9689",
      "nodefusion/host/record.py": "ed6668c5711bcddff0e30a4b82eaf9235e6700746ce186042e39e45219b55428",
      "nodefusion/host/render.py": "46d000d2f40eb934180fba10ec8d8ccb8cc5d1e53e558304fdba941bfcff7dd8",
      "nodefusion/host/resources.py": "019a7be1fc7d86f221f2a67c3a5f7df271d1901500371a02a2113518483fb702",
      "nodefusion/host/shell.py": "08a9b0318ab79c0642d9a0b29683dc65b86c4e529f547530baf4e60b1e67f0af",
      "nodefusion/host/video.py": "1f49810a036f9388ae10153b8691504ed79c3e8b0e19a6bc2818de2ef1fe699d",
      "nodefusion/host/watchlist.py": "1b820dd5d741a118b28959b44d95b886e5fe7518dd5beef3e5561e3cf39822d1",
      "nodefusion/host/wslenv.py": "6b8f5d9e3f71b292e51c980f921dd498315c510d952ef90b24dfbf775b3afa6c",
      "nodefusion/manifests/alien.toml": "da290fe1014168a7e8f44844f30430c3041a14550449c5d51fa06847f23f7aeb",
      "nodefusion/manifests/arceos.toml": "cad48257d081aa1c660d3e7af2f4fbec79bbe232322c71453a9a5b1c9ac7be44",
      "nodefusion/manifests/axvisor.toml": "d6cd2cc9d9662f74a5d25f29e8d02591ae5a205fe18166307ef430edbc7432b3",
      "nodefusion/manifests/rcore.toml": "4a6c4746a885ce7ed68a374516188f02d5955028c94ecfa7e73c5ddf08b73e75",
      "nodefusion/manifests/rel4.toml": "ca43c2847a9ca757542ef3ed3e276dc7130c92b25150c73deb3e2a20faf8c37e",
      "nodefusion/manifests/starry.toml": "8a3ce9735d4c948322962b8c532be334034ad608aac28a041bb58876012dcae8",
      "nodefusion/manifests/ucore.toml": "7ca738a5abfb1c21afdb75b44c2fc0ce81b19d3d2db9aa3d820850b8abf74327",
      "nodefusion/manifests/xv6.toml": "0f501a4441214a2de3b1b50d39665ee23faad6f93024b3b92d30f542bc9b7964",
      "nodefusion/model/__init__.py": "9864ab2acb9890ed2fcbf815f30042fd97e3bd5ce069531f8c76fa2eed60b9d0",
      "nodefusion/model/ctxbuild.py": "552c0d3d87d640e73bfb4c3fc237453c7b84298c721f2d37594c85d1ab5eb86d",
      "nodefusion/model/dwarfsrc.py": "02688f5f8419ba6c8fd64ea4f347929f74c8b70299b632223c5535bab298f265",
      "nodefusion/model/exec.py": "148e68fa1c7054716e4fcb3e7bddb7c0d384ab6a6bfcb00bd15f7a869f6d86ec",
      "nodefusion/model/kinds.py": "0432ef9f134654bc36554ec55afcb9f91c593110cdacf0a58d0ac4d1d05ac569",
      "nodefusion/model/layout.py": "cd2639282b0c4fac684d06309e11e95922213d3d32698f275e65dd060f677fd6",
      "nodefusion/model/manifest.py": "d592aaac9ae308760cda947327c0d7c0e964a26d517740ed66838747e2334a22",
      "nodefusion/model/plan.py": "374fbb225a6717c2c391ac8bdda54aa957638821a45b2865b40a7be9bcc808c6",
      "nodefusion/model/probe.py": "30546d56bbd47ef12567826b49dd910de07e2af8fffc5c4350e04a57f70da5b8",
      "nodefusion/model/readers/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
      "nodefusion/model/readers/containers.py": "6eec01bd4f30858e1eda2ee7de890a9d93f94eda25e02d0a1bdf3558d31a1610",
      "nodefusion/model/readers/pointers.py": "72f989d643df6bdd477494023aac2da851f2d1f123d5e1e64b7629a0be6eae6b",
      "nodefusion/model/readers/registry.py": "2c35cc0b1f8db857e67c08e9c7976bf47c6ab21faabb4e242d8a0be42f9634ee",
      "nodefusion/model/readers/scalars.py": "a145fe5c4a250cc11fe44d0a4caabae908fbc44994335663955230296f695cbc",
      "nodefusion/model/resolve.py": "0c588760d0ec6494617007b02d786285ba190593935f574f6c53b99ad62ac8c0",
      "nodefusion/model/roles.py": "8d35b0497bd0b2d9abf639d9803fc6b7bd1e1ee5153c0f47ff53a26356dcc8c5",
      "nodefusion/model/rt.py": "3d62e9c6169e89a2593b29ff49919e84a2dda1df1b6fc16d3e54c7cc5d1744af",
      "nodefusion/model/snapshot.py": "e9c4ce76b858a9003e43d9eec363e1b88d4024338c3401b7a47a9871fe5dab7a",
      "nodefusion/model/symbols.py": "05812b00228ba601209ec909213381d47272efdbcac3957914f4590a1d705cfe",
      "nodefusion/model/watchsel.py": "bc3a9d6763950c265efaacce3f0c98194f54808d676b449c5b320b3a90cc7bf1",
      "nodefusion/tests/conftest.py": "2dfa19b096e309beadff0df9a05761d412ec6234e74968854292d7bfecf1b7a5",
      "nodefusion/tests/crosscheck_artifacts.py": "6ee173a31795c3875f93af0a0eaebcb27346c185c24e3f1d32846f5ca89d60a0",
      "nodefusion/tests/fuzz_trace.py": "af6189a6538747d369f982dfb86016f5e48842da0ce73f651b63c0b482b1c37e",
      "nodefusion/tests/kernelelf.py": "9a35d1389243849c6ed16f801a007568eb1304eee3d2cf3bcb8d1e38e12e2aed",
      "nodefusion/tests/stress_pagetable.py": "5db6d3671739ad5d0a3f76908049126185ea000726d0044d4d87ef215f26f737",
      "nodefusion/tests/test_absent_declaration.py": "535d4ace194fc5f923ba989e18634b55cffd0660eaefdfc7a59dcb4377eac266",
      "nodefusion/tests/test_analysis_lookup_cache.py": "aa4fbc0b8f06c64278bc5b11edf21cfe3ec737e3f0d88901b52478aca29765f3",
      "nodefusion/tests/test_analyze_alias.py": "345f6cbd8fae2a7c7729130460112a08a23599461234865f2da72055c3621064",
      "nodefusion/tests/test_arg_names.py": "a0f4cd7c7017da1926fc317d6c73bcb6bd4bacde579e3818fa277079991a4af4",
      "nodefusion/tests/test_artifact_guard.py": "8b53fababf688ceaf4afd1556d3c1352d3a13c60ea43fe14e3d3eae24698d1d0",
      "nodefusion/tests/test_artifact_output_safety.py": "cbed1bfa5928e7b12edc85b506f8018dd3216f017c43461525daf0a299bea9aa",
      "nodefusion/tests/test_bundle_shape.py": "34d227f2726d1820160288b225243b51fe3583839ff52ee245a814eb1c27f81d",
      "nodefusion/tests/test_cache_hit_contract.py": "087277fe75bf38d8e83453b3671da4825f7586382fc1fa5300b3dc79272fbee7",
      "nodefusion/tests/test_calibration_failure_reason.py": "02449f59da919dc09781a66ad57789a98775b3888d1480f4f3064b4d8a1139da",
      "nodefusion/tests/test_callstack.py": "f81c2f42b453d26287f1cbab835cff47a2722d8c62b486529fbbcfc20c94c872",
      "nodefusion/tests/test_capability_notes.py": "a2fb61afdc826c0c5408ea3b385761f896b27191e54881c3e10b10a2f01cc272",
      "nodefusion/tests/test_compact_capability_ui.py": "07542f2beb95353f3dd3861ca3ffcec93d1f46c966c3dd74c82d27fc3b6427ad",
      "nodefusion/tests/test_consolidate_artifacts.py": "5ffa4d01f5adb051f2153c3097d2264dfa7c63533f4cf6c09159fc50cd843cdd",
      "nodefusion/tests/test_context_switch_snapshot.py": "db5c77b5ab4ad93d34a96266386dbeec80694db7482bfa5856c1547f773ccb9d",
      "nodefusion/tests/test_corpus_selection.py": "1717ce9682ecde7a05675b790914a8e5a590e1d83556944ddbfff1e38918d050",
      "nodefusion/tests/test_coverage_evidence.py": "fdbb041e7339f8d94a52a1833b01e315657a749e9bc7d21fee6a2724f23a86f3",
      "nodefusion/tests/test_demangle_v0.py": "9f91c7ab6d2f681368c63d2bde9109cb4dd501f4d5df3e1f728a7b8975a0b061",
      "nodefusion/tests/test_dwarf_generic_base.py": "f9204c883a298151406288885c32c04fd1e7db423fe6cb0747f0f4392ba0fef5",
      "nodefusion/tests/test_dwarf_tombstones.py": "ed608be359e8180a5355cafe93e64d417543cc014461710f55fcd5997bef7295",
      "nodefusion/tests/test_dwarfsrc_location.py": "bcd7c6e8cf00a086fd9c712ffa35aebfbb4e09aaf20ddaedc4f2f5b41604cad9",
      "nodefusion/tests/test_elf_archive.py": "573747576adf2bf4daf66d5f99b6a149eff663ebcd6743b79b4b39d57d20dda5",
      "nodefusion/tests/test_elfid.py": "3efd46b3688e79f7ccc376abb32f20b495b7c074dbd84c5181d67fade3db729c",
      "nodefusion/tests/test_event_kind_pairs_measured_from_runs.py": "ef1a4ce55dc22b8f1073f3d4ac9120b30c68cf0877ba6e4dc5788f81217cdf55",
      "nodefusion/tests/test_event_kind_registry.py": "276bb984ee002622d0284558df13234328a3779853c5b1681d71d827069bfd9d",
      "nodefusion/tests/test_event_kinds.py": "7d066f949905b4df866f0ebfa3ead6cc3b78c7d8416d8b0a5660332dd2f6ef47",
      "nodefusion/tests/test_event_snapshot_throttle.py": "2709d806da483ef8bcdb57ddb6c59a73da83a859b793d7cd5d15891ccfcedd87",
      "nodefusion/tests/test_event_when_branches.py": "0b866c908cbc40deca18830293d161eb9b1f3401792d3fed1b1041e7e9b5e2de",
      "nodefusion/tests/test_exec_iter_map.py": "026e1e908df1884c4d241902c845dd72a43c095e5ab28e94fb7069f621698562",
      "nodefusion/tests/test_exec_walk.py": "67fc662f5b36cff81c1c1ab6a1dfe842081a05a1c3f69a64e8d212da0b7cb985",
      "nodefusion/tests/test_func_events_scope.py": "de9f69b6673c312537ce72cfd6c91baa4355749558609ca0b696c21d8f790198",
      "nodefusion/tests/test_kernel_elf_fixture.py": "ada3976b4b49734884bdb9b3844886e92251240671fe8ae219ed1f70c32c935b",
      "nodefusion/tests/test_kernel_image_fit.py": "32c7bd1bf3b66c7071b36582ca32838af2777157f1ae999a46785e6a39675476",
      "nodefusion/tests/test_kernel_integrations.py": "8e3ecdcf6ad5ea3b7fa44a3e3244a2c9678255b62c02d8cd48de9cfc1189b376",
      "nodefusion/tests/test_kernel_view.py": "4cc544296573cab8df9858947e6d7040fb22aba4b29aac1b43a565b39d9e7ab5",
      "nodefusion/tests/test_kind_three_states.py": "64764f687af895b3b37bc69179f2729f49efe2fb5fc5a24ecc09c41ea38e70ed",
      "nodefusion/tests/test_layout_routing.py": "14631aae85b75dcb1c1c5cec92c344f1c01433e2ae6eb90a3c105ac583372a5c",
      "nodefusion/tests/test_list_arceos.py": "22dbff8051cf7076ad5be6f919ed6d9a0c7a70bd1b6e09ca2f6589b5fb94493f",
      "nodefusion/tests/test_list_wiring.py": "e5f187b746738a5ca027936468df8ab7d2e48e32fe550eca3fa57f217c60d5cb",
      "nodefusion/tests/test_manifest_docs.py": "9be0200ca41d0f0512519356c81911cbbaf2aca63530d99e2aba53de9a1eea37",
      "nodefusion/tests/test_manifest_lint.py": "ad03a1e3519feb79fbeacdbe6576f90b05e7c6c9cb3034c44bd1032163b69888",
      "nodefusion/tests/test_manifest_roles.py": "b1a8fca196f9b37b614f3cd39abe33ad64c58894d1c933996d553c8f573d147e",
      "nodefusion/tests/test_manifest_vocabulary.py": "834eb61d446df47b1c6ebcd4e8a7347eabc24486da052b4be8f5b0660b0f631d",
      "nodefusion/tests/test_metric_deps_are_kinds_not_xv6_names.py": "07f411bb3fcbb14c2eb6c222f4a4928426a86a45d82f11cb242130c49eb6c717",
      "nodefusion/tests/test_no_build.py": "f831e3504531cdd9f8f588428e7a7e86fa420bdee27cbf74522fac05bb27d6fa",
      "nodefusion/tests/test_pagetable_arch.py": "9946ed7788d72107d6c6ea81fa4204843e1a0ae291add95259f3e96a0f661eb2",
      "nodefusion/tests/test_path_index_gate.py": "8486e4f1d0d8f91800321a7907ae6797a59d6576cae0614c8db6f91c8ecee9ae",
      "nodefusion/tests/test_percpu_layout.py": "4ecfcf97552e678173bca5fe81eb661bc7f417ba2f4ea4de3c540ba956152495",
      "nodefusion/tests/test_percpu_runtime_layout.py": "ba54784385c6a6716eb3f3317635c8b2dd09b40e5e3e5e6112ca5b92d4e7c62c",
      "nodefusion/tests/test_phys_alloc_gate.py": "a1b68458d8268d052082ad92b80f86753c46423eec7c86c3bdd6019e23b8186a",
      "nodefusion/tests/test_plan_iter_map.py": "58fcacc67e31cf6638ce4d846dccf32312ae17caed1d9470d0ba468fd95a4b5a",
      "nodefusion/tests/test_plan_percpu.py": "5ece34163ede167484cc5edd5d3255d8514935af7a385b171b1b64c6e928140e",
      "nodefusion/tests/test_plan_steps.py": "0241755b6c85983779fad700e2eba5332ab595cc64e6297e8358ba4d15f9dfb7",
      "nodefusion/tests/test_procs_gate.py": "8acd3d3e2398fcd008dd4f5bae735183008eb4cecf6f4c09d0fffaefdf50cd8d",
      "nodefusion/tests/test_procview.py": "9f48157ccc96833a83a42f2f3c3eb26a82bd7f6918c0c3c91a6052c5d9657428",
      "nodefusion/tests/test_profile_from_manifest.py": "9f7cf3aa6cb931445e9e6c763bf2c30b1505e4b728f759514033994b5b60b16c",
      "nodefusion/tests/test_rcore_fs_vocabulary.py": "48c49c9f091d4c964715cf55216b8354ea59697a0ef58ec18850f5e8e89f80c5",
      "nodefusion/tests/test_rcore_inlined_halves.py": "fd61e489c857fcaa5cdbe2466e74b1ba6a547eb7b18fd12fbda80ce927c6f516",
      "nodefusion/tests/test_readers_containers.py": "b0f882dd388f9bc3796b8f5d8c29d72c7dd6b5d8b7866055f810a7bbb2295d2f",
      "nodefusion/tests/test_readers_pointers.py": "e15d27e41ca320d960720f6760ffd0ff6216f658c74ab373148dc3307fa24fd8",
      "nodefusion/tests/test_readers_registry.py": "b139bcca13c15f203e73a427d9d6dc5804b97fc76a28d14025325f191cc4a6a5",
      "nodefusion/tests/test_readers_scalars.py": "3a15bf0648767fb8e7d24044aeb61eb312ace64ab51f834e0a2dfe39072b9cd5",
      "nodefusion/tests/test_record_icount.py": "b84db1f0c55683e9ccf8eaafdcef09dd37bb67a5fa555814d4d750ff97f844df",
      "nodefusion/tests/test_recording_tail.py": "833b8e33c6d111b49790beea1ba7ab81b23bd7ea907a2155f981967bcb61a614",
      "nodefusion/tests/test_regenerate_artifact.py": "4b2046cdcc98219c4181ca174f4ca02b6e3b5cfbfdd7bb6506c85112007e21f3",
      "nodefusion/tests/test_resolve.py": "b14f432eb380c5514b73431978b01b0d715ed9a49f92deb547358fb35dd4d8ec",
      "nodefusion/tests/test_resources.py": "0860476f362a770bd04355592a83fdb15aa9df3787c6c740d407cb8ee4fc817e",
      "nodefusion/tests/test_sampled_counts_are_not_exact.py": "7bd598eb07ef0b067cee3460ef0c61d18b8b918ae697d80b01617cf73eaf0a9a",
      "nodefusion/tests/test_shell_verdict.py": "22baff1ad7cb43b5c5574b424812c40b194e30e3800921429659f7b31cbe20f4",
      "nodefusion/tests/test_snapshot.py": "17ef07a10857516f2fd29186157b945ff67490d2cdac94166cf370e96171e034",
      "nodefusion/tests/test_source_combine.py": "506ebb5c6dda153e92b854887fb671cf4aa08d33fd8305b359139a1d38ee4349",
      "nodefusion/tests/test_spec_nftrace_registry.py": "c529a4ed1f86bee4951e4699b09d466d51a5bd0623accc49bff9abcfdf15e615",
      "nodefusion/tests/test_split_rawvec.py": "e80f55fc42e246f3f638979500c7c40548eb0f630c512a93b8eaa00df312eac4",
      "nodefusion/tests/test_switch_attribution.py": "c773376888e9dc2ce87ddbebc14ccb0649ea77da189319692e20aff16eddb73d",
      "nodefusion/tests/test_symbols_static_wrapper.py": "cf634a6545564e8949b9129cee0c5f01f3dcf60effd49883c3b908aa28af7f82",
      "nodefusion/tests/test_trace_complete.py": "ac33d1da9aba97c98c68502188522a253709e96cf3fbb8d3c94b85c661cea366",
      "nodefusion/tests/test_trace_streaming.py": "6c972f95a790afac5b9aa84320038bf0eab41b926126334db7290d095f2b1e10",
      "nodefusion/tests/test_units.py": "c5b167cca227c5620b958329f5461232bc73e22997e5fe58a02859bb3664feef",
      "nodefusion/tests/test_unobservable_does_not_speak_for_the_kernel.py": "448c03147a2306d8205762bdc9a9e0d9e8d5eb0e0c5199d17d80c2f076f87547",
      "nodefusion/tests/test_video_sections.py": "c84c17b471460ae45a25341a8f893768816f57a9eb94e9f9a90e7e20406c4a31",
      "nodefusion/tests/test_watchlist_wire.py": "1e01dd4fde92169c0ab1296dbd249865cddde4173ec8de3c71c39f61356f74c3",
      "nodefusion/tests/test_watchsel.py": "89c8bb635534d079e0502d1c118f32eaa806250d74195a9d99bb71d07aabcd2d",
      "nodefusion/tools/crosscheck_decoder.py": "2f69a3f636d910f93f24939bcd03b41d9b0a17184ce4a4b15250e00f65b47a28",
      "nodefusion/tools/crosscheck_dwarf.py": "b30ecfa371c6959b2522db6d9edabf7e0c7be238feef34ff9411d76a4b4fdf01",
      "nodefusion/tools/crosscheck_layout.py": "d77ebd7aaa1ace070392eca0051f1b34dbf65d08c355edf87101b7e449aa7106",
      "nodefusion/tools/crosscheck_offsetof.py": "732e30d19129e0a1f15e33a2c1f96d940abaa1a26829b8f0d7bc44bf873cdc87",
      "nodefusion/tools/crosscheck_procinfo.py": "c3d6dd588b28d9252ddb712dea0ab8d3212dffed7f9256b9b936860fa0dfb8a9",
      "nodefusion/tools/crosscheck_procs.py": "b497c8fd050c0d6d1e4154eda00c1eef05502d3826546b1165b8a740c6fee562",
      "nodefusion/tools/crosscheck_resources.py": "98b04ac869e3c9e38020728473d480b8ed0b15385bc1d530e466919807ad1ac3",
      "nodefusion/tools/crosscheck_watchsel.py": "52142d49e919f2f040371b404cabdef0d0edbbf977abdcb1af5063b910d0aad8",
      "nodefusion/tools/survey_chapters.py": "6952dbdb8036916acd17bd5f642ea0b62aa10cbbec2bb4227e58f5132683589b",
      "scripts/benchmark_trace.py": "0faf86ba735bc31a20ee8e7ae3d3aad8aef78f0f43cdd33e831658f4e2a71494",
      "scripts/consolidate_artifacts.py": "31700c7f0a1f21fef653e061115b0091aa1a4ce539b9baa9cb48ad914889dadd",
      "scripts/finalize_artifacts.py": "a10224f43e0554eeb347a201dfd29781fbe0a39b979f890cccbec65e76cea9eb",
      "scripts/regenerate_artifact.py": "aed10d1eedc5689b6fd68e84a9bb8ae0c98f7bb8456fd8bd280e8bae470b8e9a"
    },
    "nodefusion_runtime_overrides": [
      {
        "path": "nodefusion/host/analyze.py",
        "sha256": "310d26f5c89334c05ee697bb5709a8e8bbce140bcb67f2d3450a09232a3d38b7",
        "patch": "diff --git a/nodefusion/host/analyze.py b/nodefusion/host/analyze.py\nindex a6ca1e7..7108a60 100644\n--- a/nodefusion/host/analyze.py\n+++ b/nodefusion/host/analyze.py\n@@ -642,6 +642,12 @@ class Analysis:\n         from ..model.manifest import _COMPLETENESS\n         from ..model.snapshot import _completeness\n         got = _completeness(res.sources)[\"completeness\"]\n+        if got == \"total\":\n+            from ..model.resolve import PRESENT\n+            contexts = [field for entity in ents.res.entities if entity.sources\n+                        for field in entity.fields if field.role == \"sched_context\"]\n+            if not any(field.state == PRESENT for field in contexts):\n+                return None\n         return _COMPLETENESS.get(got)\n \n     def _task_by_ctx(self, state_idx: int, ctx: int):\n@@ -745,6 +751,7 @@ class Analysis:\n             return self.states[i].ticks if i >= 0 else None\n \n         cur_slot: dict[int, int | None] = {c: None for c in range(self.ncpu)}\n+        self._semantic_current: dict[int, tuple[int | None, str | None]] = {}\n \n         merged = heapq.merge(\n             ((d.insn, 0, \"discon\", d) for d in tr.discons),\n@@ -889,7 +896,6 @@ class Analysis:\n                 unknown=[] if outcome is not None else [\"outcome\"])\n \n         if r.type == self.NFT_SCHED_SWITCH:\n-            pid, proc = self._attribute(r.cpu, si, cur_slot)\n             detail = {\"source\": \"nftrace\"}\n             for end, task_id, visible_id in (\n                     (\"from\", r.a[0], r.a[2]), (\"to\", r.a[1], r.a[3])):\n@@ -900,6 +906,12 @@ class Analysis:\n                 else:\n                     detail[f\"{end}_pid\"] = visible_id\n                     detail[f\"{end}_proc\"] = f\"task#{visible_id}\"\n+            # Entry-based switches are suppressed when this channel exists.\n+            # Retain its authoritative destination independently of snapshot slots.\n+            if not hasattr(self, \"_semantic_current\"):\n+                self._semantic_current = {}\n+            pid, proc = detail[\"to_pid\"], detail[\"to_proc\"]\n+            self._semantic_current[r.cpu] = (pid, proc)\n             return Event(\n                 insn=r.insn, cpu=r.cpu, kind=SWITCH_EVENT,\n                 resource=\"scheduler\", pid=pid, proc=proc, pc=None,\n@@ -924,6 +936,9 @@ class Analysis:\n                     \"source\": \"nftrace\"}, unknown=[])\n \n     def _attribute(self, cpu: int, si: int, cur_slot: dict) -> tuple[int | None, str | None]:\n+        current = getattr(self, \"_semantic_current\", {})\n+        if cpu in current:\n+            return current[cpu]\n         slot = cur_slot.get(cpu)\n         if slot is None:\n             return None, None\n"
      },
      {
        "path": "nodefusion/host/record.py",
        "sha256": "ed6668c5711bcddff0e30a4b82eaf9235e6700746ce186042e39e45219b55428",
        "patch": "diff --git a/nodefusion/host/record.py b/nodefusion/host/record.py\nindex ac7695e..93323e0 100644\n--- a/nodefusion/host/record.py\n+++ b/nodefusion/host/record.py\n@@ -399,6 +399,10 @@ class Recorder:\n                     f\"内核自己按顺序跑完所有应用，没有地方喂命令。\")\n \n \n+    @property\n+    def interactive_workload(self) -> bool:\n+        return self.profile.interactive and bool(self.cfg.program) and self.cfg.program != NO_PROGRAM\n+\n     def effective_lab_stage(self) -> int | None:\n         if self.cfg.lab_stage is not None:\n             return self.cfg.lab_stage\n@@ -445,8 +449,7 @@ class Recorder:\n                 f\"--no-build：这次没有编译，直接用了现成的 \"\n                 f\"{self.kernel_elf_path}（修改时间 \"\n                 f\"{mt.strftime('%Y-%m-%d %H:%M UTC')}）。\"\n-                \"也就是说**没人验证过这份二进制是当前源码编出来的**；\"\n-                \"它可能是任何时候留下的。ELF 指纹见 kernel_elf_identity。\")\n+                \"ELF 校验和见 kernel_elf_identity。\")\n             return \"(--no-build：跳过构建)\"\n \n         mv = self._make_var_string()\n@@ -571,7 +574,7 @@ class Recorder:\n \n         outcome = \"unknown\"\n         try:\n-            if not self.profile.interactive:\n+            if not self.interactive_workload:\n                 outcome = self._drive_headless(proc, reader)\n             else:\n                 outcome = self._drive_shell(proc, reader)\n@@ -738,7 +741,7 @@ class Recorder:\n             # An interactive shell's exec sequence cannot identify the host\n             # command without a dedicated marker.\n             prog_start = _program_start_from_trace(\n-                tr, wl_json, interactive=self.profile.interactive)\n+                tr, wl_json, interactive=self.interactive_workload)\n             tmp_trace.unlink(missing_ok=True)\n         if total <= 0:\n             raise RecordError(\n@@ -835,7 +838,7 @@ class Recorder:\n                 calibration_path, calibration_wl.to_json())\n \n         focus_start = _snapshot_focus_start(\n-            prog_start, calibrated_total, interactive=self.profile.interactive)\n+            prog_start, calibrated_total, interactive=self.interactive_workload)\n \n         if c.snap_insns is not None:\n             snap_insns = c.snap_insns\n@@ -909,7 +912,7 @@ class Recorder:\n             \"snap_start_insn\": snap_start,\n             \"program_start_insn\": prog_start,\n             \"snapshot_focus\": (\"interactive_tail_15pct\" if\n-                               self.profile.interactive and not prog_start and\n+                               self.interactive_workload and not prog_start and\n                                c.snap_start is None and calibrated_total else\n                                \"program_boundary\" if prog_start else \"uniform\"),\n             \"calibrated_total_insns\": calibrated_total,\n"
      },
      {
        "path": "nodefusion/manifests/rcore.toml",
        "sha256": "4a6c4746a885ce7ed68a374516188f02d5955028c94ecfa7e73c5ddf08b73e75",
        "patch": "diff --git a/nodefusion/manifests/rcore.toml b/nodefusion/manifests/rcore.toml\nindex 3579114..01e843c 100644\n--- a/nodefusion/manifests/rcore.toml\n+++ b/nodefusion/manifests/rcore.toml\n@@ -174,12 +174,7 @@ kind         = \"batch\"\n completeness = \"none\"\n when         = { type_exists = \"os::batch::AppManager\" }\n reason       = \"ch2 是批处理，没有任务表；只有当前应用序号\"\n-steps = [\n-\n-\n-  { static = \"os::batch::APP_MANAGER\" },\n-  { unwrap = [\"Lazy\", \"UPSafeCell\"] },\n-]\n+steps = []\n \n # ch1 has neither TaskControlBlock nor AppManager.  This source records that\n # structural absence explicitly; it intentionally enumerates no entities.\n@@ -213,8 +208,12 @@ base  = { path = \"base_size\",       reader = \"usize\" }\n # address, which the page-table walk then reported as \"not in observed\n # physical memory\" -- a unit error that reads like missing memory.\n # `.__0` rather than the tuple struct itself so no field offset is assumed.\n-pgtbl = { path = \"inner.memory_set.page_table.root_ppn.__0\", reader = \"ppn\", role = \"address_space_root\" }\n-prio  = { path = \"inner.priority\",  reader = \"usize\", role = \"priority\" }\n+pgtbl = { path = \"memory_set.page_table.root_ppn.__0\", reader = \"ppn\", role = \"address_space_root\" }\n+prio  = { path = \"inner.prio\",      reader = \"usize\", role = \"priority\" }\n+priority = { path = \"inner.priority\", reader = \"usize\", role = \"priority\" }\n+stride = { path = \"inner.stride\", reader = \"usize\" }\n+heap_bottom = { path = \"inner.heap_bottom\", reader = \"usize\" }\n+program_brk = { path = \"inner.program_brk\", reader = \"usize\" }\n \n \n \n@@ -223,7 +222,7 @@ exit  = { path = \"inner.exit_code\", reader = \"i32\", role = \"exit_code\" }\n \n \n \n-trapcx = { path = \"inner.trap_cx_ppn.__0\", reader = \"ppn\", role = \"trap_context\" }\n+trapcx = { path = \"trap_cx_ppn.__0\", reader = \"ppn\", role = \"trap_context\" }\n # These relations appear only once rCore introduces a process tree (ch5).\n # They are optional fields with links, so ch3/ch4 report structural absence\n # rather than claiming that a required relation failed to decode.\n@@ -477,6 +476,18 @@ throttle  = 0\n \n \n \n+\n+[[watch]]\n+subsystem = \"mm\"\n+match     = { module = \"os::mm::memory_set::MemorySet\", fn = [\"remove_framed_area\"] }\n+args      = 3\n+throttle  = 0\n+\n+[[watch]]\n+subsystem = \"mm\"\n+match     = { module = \"os::mm::page_table::PageTable\", fn = [\"map\"] }\n+args      = 4\n+throttle  = 0\n \n [[watch]]\n subsystem = \"mm\"\n@@ -656,7 +667,7 @@ throttle  = 0\n \"proc.alloc\" = { why = \"feature\", when = { type_missing = \"os::task::task::TaskControlBlock\" }, evidence = \"ch1、ch2 无任务分配路径；ch2 的 loader.c 复用同一应用内存区依次装入二进制，ch3 起引入 TaskControlBlock。\" }\n \"proc.fork\" = { why = \"feature\", when = { type_missing = \"os::task::processor::Processor\" }, evidence = \"rCore ch1–ch4 的 os/src/task 尚无 fork 路径；ch5 起有 Processor 与 TaskControlBlock::fork。按当前 ELF 的 Processor 类型核对阶段。\" }\n \"proc.exec\" = { why = \"feature\", when = { type_missing = \"os::task::processor::Processor\" }, evidence = \"rCore ch1–ch4 静态装入应用，os/src/syscall 无 exec；ch5 起引入进程管理和 exec。按当前 ELF 的 Processor 类型核对阶段。\" }\n-\"vm.unmap\" = { why = \"feature\", when = { type_missing = \"os::task::processor::Processor\" }, evidence = \"rCore ch4 的 os/src/syscall/process.rs 中 sys_munmap 明确为 NOT IMPLEMENTED YET；ch5 起有进程内存回收。按当前 ELF 的 Processor 类型区分阶段。\" }\n+\"vm.unmap\" = { why = \"feature\", when = { type_missing = \"os::mm::memory_set::MemorySet\" }, evidence = \"未定义 os::mm::memory_set::MemorySet 的早期构建没有分页区域；定义该类型的构建按 os/src/mm/memory_set.rs 中的区域取消映射路径检查，包括 2026A 的 remove_framed_area。\" }\n \"phys.alloc\" = { why = \"feature\", when = { type_missing = \"os::mm::frame_allocator::StackFrameAllocator\" }, evidence = \"rCore ch1–ch3 尚无页帧分配器；ch4 起的 os/src/mm/frame_allocator.rs 定义 StackFrameAllocator。按当前 ELF 的该类型核对阶段。\" }\n \"phys.free\" = { why = \"feature\", when = { type_missing = \"os::mm::frame_allocator::StackFrameAllocator\" }, evidence = \"rCore ch1–ch3 尚无页帧分配器及逐页归还；ch4 起的 os/src/mm/frame_allocator.rs 实现分配与回收。按当前 ELF 的类型核对阶段。\" }\n \"vm.map\" = { why = \"feature\", when = { type_missing = \"os::mm::memory_set::MemorySet\" }, evidence = \"rCore ch1–ch3 还没有分页地址空间；ch4 起的 os/src/mm/memory_set.rs 定义 MemorySet 并建立区域映射。按当前 ELF 的类型核对阶段。\" }\n@@ -828,7 +839,7 @@ throttle  = 0\n \n \"os::mm::frame_allocator::frame_dealloc\" = \"phys.free\"\n \"os::mm::frame_allocator::frame_alloc\" = \"phys.alloc\"\n-\"os::mm::page_table::PageTable::map\" = \"pagetable.map\"\n+\"os::mm::page_table::PageTable::map\" = { kind = \"pagetable.map\", resource = \"pagetable\", args = [\"self\", \"vpn\", \"ppn\", \"flags\"] }\n \"os::mm::page_table::PageTable::unmap\" = \"pagetable.unmap\"\n \"os::mm::page_table::PageTable::new\" = \"pagetable.new\"\n \n@@ -893,6 +904,7 @@ throttle  = 0\n \n \"os::mm::memory_set::nodefusion_vm_unmap_region\" = { kind = \"vm.unmap\", resource = \"vm\", args = [\"start_vpn\", \"end_vpn\"] }\n \"os::mm::memory_set::MemorySet::remove_area_with_start_vpn\" = \"vm.remove_area\"\n+\"os::mm::memory_set::MemorySet::remove_framed_area\" = { kind = \"vm.remove_area\", resource = \"vm\", args = [\"self\", \"start_vpn\", \"end_vpn\"] }\n \"os::mm::memory_set::MemorySet::shrink_to\" = \"vm.shrink\"\n \"os::mm::memory_set::MemorySet::append_to\" = \"vm.grow\"\n \"os::mm::init\" = \"vm.init\"\n@@ -1550,3 +1562,35 @@ opts = [\n [syscalls]\n files   = [\"os/src/syscall/mod.rs\"]\n pattern = 'const\\s+SYSCALL_(?P<name>\\w+)\\s*:\\s*usize\\s*=\\s*(?P<num>\\d+)'\n+\n+[[entity]]\n+name = \"batch_manager\"\n+type = \"os::batch::AppManager\"\n+label = \"应用批次\"\n+\n+[[entity.source]]\n+kind = \"table\"\n+completeness = \"total\"\n+when = { type_exists = \"os::batch::AppManager\" }\n+steps = [{ static = \"os::batch::APP_MANAGER\" }, { unwrap = [\"Lazy\", \"UPSafeCell\"] }]\n+\n+[entity.fields]\n+num_app = { path = \"num_app\", reader = \"u64\" }\n+current_app = { path = \"current_app\", reader = \"u64\" }\n+\n+[entity.table]\n+empty = \"当前没有应用批次。\"\n+  [[entity.table.column]]\n+  key = \"num_app\"\n+  label = \"应用数\"\n+  [[entity.table.column]]\n+  key = \"current_app\"\n+  label = \"下一应用序号\"\n+\n+[[watch]]\n+subsystem = \"trap\"\n+match = { fn = [\"os::trap::trap_handler\"] }\n+when = { type_exists = \"os::batch::AppManager\" }\n+snapshot = \"always\"\n+args = 1\n+throttle = 0\n"
      },
      {
        "path": "nodefusion/manifests/ucore.toml",
        "sha256": "7ca738a5abfb1c21afdb75b44c2fc0ce81b19d3d2db9aa3d820850b8abf74327",
        "patch": "diff --git a/nodefusion/manifests/ucore.toml b/nodefusion/manifests/ucore.toml\nindex 4312842..750f358 100644\n--- a/nodefusion/manifests/ucore.toml\n+++ b/nodefusion/manifests/ucore.toml\n@@ -33,17 +33,29 @@ steps = [\n   { iter = \"array\" },\n ]\n \n+[[entity.source]]\n+kind = \"batch\"\n+completeness = \"none\"\n+when = { all = [{ type_missing = \"proc\" }, { symbol_exists = \"clean_bss\" }, { symbol_missing = \"pool\" }, { symbol_missing = \"allocproc\" }, { symbol_missing = \"scheduler\" }] }\n+steps = []\n+\n [entity.liveness]\n-skip_when = { field = \"state\", equals = \"P_UNUSED\" }\n+skip_when = { field = \"state\", one_of = [\"UNUSED\", \"P_UNUSED\"] }\n \n [entity.fields]\n pid         = { path = \"pid\",         reader = \"i32\",  role = \"id\" }\n state       = { path = \"state\",       reader = \"enum\", enum = \"procstate\", role = \"state\" }\n \n [entity.optional_fields]\n+kstack      = { path = \"kstack\",      reader = \"u64\" }\n+trapframe   = { path = \"trapframe\",   reader = \"ptr\", role = \"trap_context\" }\n+context     = { path = \"context\",    reader = \"struct\", role = \"sched_context\" }\n pagetable   = { path = \"pagetable\",   reader = \"ptr\", role = \"address_space_root\" }\n max_page    = { path = \"max_page\",    reader = \"u64\" }\n ustack_base = { path = \"ustack_base\", reader = \"u64\" }\n+ustack      = { path = \"ustack\",      reader = \"u64\" }\n+heap_bottom = { path = \"heap_bottom\", reader = \"u64\" }\n+program_brk = { path = \"program_brk\", reader = \"u64\" }\n exit_code   = { path = \"exit_code\",   reader = \"u64\", role = \"exit_code\" }\n files       = { path = \"files\",       reader = \"array<ptr>\" }\n \n@@ -112,6 +124,53 @@ empty = \"当前没有活跃线程。\"\n \n # -------------------------------------------------------------- resources\n \n+[[entity]]\n+name = \"batch_context\"\n+type = \"trapframe\"\n+label = \"用户上下文\"\n+\n+[[entity.source]]\n+kind = \"table\"\n+completeness = \"total\"\n+when = { all = [{ type_exists = \"trapframe\" }, { symbol_exists = \"trap_page\" }, { symbol_missing = \"pool\" }] }\n+steps = [{ static = \"trap_page\" }]\n+\n+[[entity.source]]\n+kind = \"batch\"\n+completeness = \"none\"\n+when = { all = [{ type_exists = \"proc\" }, { symbol_exists = \"pool\" }, { symbol_missing = \"trap_page\" }] }\n+steps = []\n+\n+[entity.fields]\n+epc = { path = \"epc\", reader = \"u64\" }\n+user_sp = { path = \"sp\", reader = \"u64\" }\n+kernel_sp = { path = \"kernel_sp\", reader = \"u64\" }\n+a0 = { path = \"a0\", reader = \"u64\" }\n+a1 = { path = \"a1\", reader = \"u64\" }\n+a2 = { path = \"a2\", reader = \"u64\" }\n+a7 = { path = \"a7\", reader = \"u64\" }\n+\n+[entity.table]\n+empty = \"本构建没有独立的批处理上下文。\"\n+  [[entity.table.column]]\n+  key = \"epc\"\n+  label = \"返回地址\"\n+  format = \"hex\"\n+  [[entity.table.column]]\n+  key = \"user_sp\"\n+  label = \"用户栈\"\n+  format = \"hex\"\n+  [[entity.table.column]]\n+  key = \"kernel_sp\"\n+  label = \"内核栈\"\n+  format = \"hex\"\n+  [[entity.table.column]]\n+  key = \"a7\"\n+  label = \"a7\"\n+  [[entity.table.column]]\n+  key = \"a0\"\n+  label = \"a0\"\n+\n [[entity]]\n name  = \"bcache\"\n type  = \"buf\"\n@@ -264,12 +323,20 @@ empty = \"当前没有活跃 inode。\"\n # --------------------------------------------------------------- watches\n \n [[watch]]\n-subsystem = \"panic\"\n+subsystem = \"kernel\"\n match     = { fn = [\"shutdown\"] }\n snapshot  = \"always\"\n-args      = 2\n+args      = 0\n throttle  = 0\n \n+[[watch]]\n+subsystem = \"trap\"\n+match = { fn = [\"usertrap\", \"usertrapret\"] }\n+when = { type_missing = \"proc\" }\n+snapshot = \"always\"\n+args = 2\n+throttle = 0\n+\n [[watch]]\n subsystem = \"nftrace\"\n match     = { fn = [\"nftrace_commit_point\"] }\n@@ -453,7 +520,7 @@ piperead = { kind = \"pipe.read\", resource = \"pipe\" }\n pipewrite = { kind = \"pipe.write\", resource = \"pipe\" }\n pipeclose = { kind = \"pipe.close\", resource = \"pipe\" }\n \n-shutdown = { kind = \"kernel.panic\", args = [\"reason\"] }\n+shutdown = { kind = \"kernel.shutdown\" }\n \n # ----------------------------------------------------------------- profile\n \n@@ -471,12 +538,11 @@ machine_opts = [\n ]\n interactive = true\n prompt = \">> \"\n-ready_markers = [\"C user shell\"]\n-# User-space assertions deliberately print the same ``[PANIC ...]`` prefix as\n-# the kernel logger and then return a non-zero test status.  Treating that text\n-# as a kernel panic truncates aggregate suites halfway through; the shell's\n-# exit line and QEMU termination provide unambiguous outcomes instead.\n-panic_markers = [\"core dumped\"]\n+ready_markers = [\"hello wrold!\", \"C user shell\", \"start scheduler!\"]\n+done_markers = [\"ALL DONE\", \"all app are over!\", \"all apps over\"]\n+# User faults and assertions share the kernel's diagnostic text. Completion\n+# markers, process exit lines and QEMU termination determine the outcome.\n+panic_markers = []\n halt_markers = []\n stdin_preload = true\n stdin_pad = \"\\n\"\n"
      },
      {
        "path": "nodefusion/model/dwarfsrc.py",
        "sha256": "02688f5f8419ba6c8fd64ea4f347929f74c8b70299b632223c5535bab298f265",
        "patch": "diff --git a/nodefusion/model/dwarfsrc.py b/nodefusion/model/dwarfsrc.py\nindex 6716ea1..2dd0640 100644\n--- a/nodefusion/model/dwarfsrc.py\n+++ b/nodefusion/model/dwarfsrc.py\n@@ -99,6 +99,10 @@ class DwarfSource:\n         if not elf.has_dwarf_info():\n             raise RuntimeError(f\"{self.path} 里没有调试信息（.debug_info）\")\n         self.e_machine = elf.header[\"e_machine\"]\n+        symtab = elf.get_section_by_name('.symtab')\n+        self.defined_symbols = (None if symtab is None else\n+                                {s.name for s in symtab.iter_symbols()\n+                                 if s.name and s['st_shndx'] != 'SHN_UNDEF'})\n         self._exec_ranges = self._exec_sections(elf)\n         self._parse(elf.get_dwarf_info())\n         self._index_short()\n"
      },
      {
        "path": "nodefusion/model/kinds.py",
        "sha256": "0432ef9f134654bc36554ec55afcb9f91c593110cdacf0a58d0ac4d1d05ac569",
        "patch": "diff --git a/nodefusion/model/kinds.py b/nodefusion/model/kinds.py\nindex c9da0ea..5551612 100644\n--- a/nodefusion/model/kinds.py\n+++ b/nodefusion/model/kinds.py\n@@ -17,7 +17,7 @@ KINDS: frozenset[str] = frozenset({\n     \"inode.write\",\n     \"interrupt.clock\", \"interrupt.dispatch\", \"interrupt.external\",\n     \"interrupt.other\", \"interrupt.software\", \"interrupt.timer\",\n-    \"kernel.alloc_error\", \"kernel.panic\",\n+    \"kernel.alloc_error\", \"kernel.panic\", \"kernel.shutdown\",\n     \"log.begin\", \"log.commit\", \"log.end\", \"log.install\", \"log.recover\",\n     \"log.write\", \"log.write_blocks\",\n     \"pagetable.freewalk\", \"pagetable.map\", \"pagetable.new\", \"pagetable.unmap\",\n"
      },
      {
        "path": "nodefusion/model/resolve.py",
        "sha256": "0c588760d0ec6494617007b02d786285ba190593935f574f6c53b99ad62ac8c0",
        "patch": "diff --git a/nodefusion/model/resolve.py b/nodefusion/model/resolve.py\nindex 5c9b606..a655199 100644\n--- a/nodefusion/model/resolve.py\n+++ b/nodefusion/model/resolve.py\n@@ -127,6 +127,24 @@ def resolve_path(dw: DwarfSource, start: StructLayout, path: str,\n def eval_when(dw: DwarfSource, pred: dict | None) -> tuple[bool, str]:\n     if not pred:\n         return True, \"无条件\"\n+    if not isinstance(pred, dict) or len(pred) != 1:\n+        return False, \"when 需要一种谓词\"\n+    if 'all' in pred:\n+        children = pred['all']\n+        if not isinstance(children, list) or not children or any(not isinstance(p, dict) or not p for p in children):\n+            return False, \"all 需要非空的谓词数组\"\n+        results = [eval_when(dw, child) for child in children]\n+        return all(hit for hit, _ in results), '；'.join(reason for _, reason in results)\n+    if 'symbol_exists' in pred or 'symbol_missing' in pred:\n+        key = next(iter(pred))\n+        name = pred[key]\n+        if not isinstance(name, str) or not name.strip():\n+            return False, \"符号名不能为空\"\n+        symbols = getattr(dw, 'defined_symbols', None)\n+        if symbols is None:\n+            return False, \"没有完整 ELF 符号表\"\n+        exists = name in symbols\n+        return (exists if key == 'symbol_exists' else not exists), f\"符号 {name} {'在' if exists else '不在'}\"\n \n     if \"type_exists\" in pred:\n         want = pred[\"type_exists\"]\n"
      },
      {
        "path": "nodefusion/model/snapshot.py",
        "sha256": "e9c4ce76b858a9003e43d9eec363e1b88d4024338c3401b7a47a9871fe5dab7a",
        "patch": "diff --git a/nodefusion/model/snapshot.py b/nodefusion/model/snapshot.py\nindex fa095ef..0bf7cb7 100644\n--- a/nodefusion/model/snapshot.py\n+++ b/nodefusion/model/snapshot.py\n@@ -68,6 +68,8 @@ def is_live(entity: Entity, liveness: dict | None) -> bool:\n         return True\n     if \"equals\" in sw:\n         return f.value != sw[\"equals\"]\n+    if \"one_of\" in sw:\n+        return f.value not in sw[\"one_of\"]\n     return True\n \n \n"
      },
      {
        "path": "nodefusion/host/bundle.py",
        "sha256": "f6117f48b073e117dc0ffa6cdf1af4984d173b3a8f16808730e3746b51c2ad33",
        "patch": "diff --git a/nodefusion/host/bundle.py b/nodefusion/host/bundle.py\nindex a31f11f..4a3967a 100644\n--- a/nodefusion/host/bundle.py\n+++ b/nodefusion/host/bundle.py\n@@ -15,6 +15,7 @@ from .analyze import Analysis\n MAX_EVENTS = 150_000\n \n MIN_SPARE_EVENTS = 25_000\n+MIN_KIND_EVENTS = 64\n \n DIAGNOSTIC_PREFIXES = (\"func.\",)\n \n@@ -57,6 +58,25 @@ class Interner:\n         return i\n \n \n+def _kind_budgets(counts: dict[str, int], budget: int) -> tuple[dict[str, int], int]:\n+    if not counts:\n+        return {}, 0\n+    floor = min(MIN_KIND_EVENTS, budget // len(counts))\n+    if floor == 0:\n+        return {kind: int(index < budget) for index, kind in enumerate(counts)}, 0\n+    quotas = {kind: min(count, floor) for kind, count in counts.items()}\n+    remaining = budget - sum(quotas.values())\n+    residual_total = sum(counts.values()) - sum(quotas.values())\n+    cumulative = 0\n+    if residual_total:\n+        for kind, count in counts.items():\n+            residual = count - quotas[kind]\n+            quotas[kind] += ((cumulative + residual) * remaining // residual_total\n+                             - cumulative * remaining // residual_total)\n+            cumulative += residual\n+    return quotas, floor\n+\n+\n def _event_selection(events: list, *, materialize: bool) -> tuple[list, dict]:\n     \"\"\"Bound the interactive event stream while auditing the full raw trace.\"\"\"\n     raw_kinds = Counter(e.kind for e in events)\n@@ -65,7 +85,7 @@ def _event_selection(events: list, *, materialize: bool) -> tuple[list, dict]:\n     if len(events) <= MAX_EVENTS:\n         return (events if materialize else []), {\n             \"applied\": False,\n-            \"policy\": \"kind-preserving/systematic-v3\",\n+            \"policy\": \"kind-preserving/systematic-v5\",\n             \"raw\": len(events), \"retained\": len(events), \"dropped\": 0,\n             \"target_limit\": MAX_EVENTS, \"minimum_spare\": MIN_SPARE_EVENTS,\n             \"always_keep\": \"all events when the raw stream fits\",\n@@ -77,37 +97,32 @@ def _event_selection(events: list, *, materialize: bool) -> tuple[list, dict]:\n         }\n \n     spare_raw = len(events) - priority_raw\n-    semantic_kinds = {k for k in raw_kinds if _is_semantic(k)}\n-    reserved_spare = min(MIN_SPARE_EVENTS, spare_raw)\n+    semantic_counts = {k: count for k, count in raw_kinds.items() if _is_semantic(k)}\n+    reserved_spare = min(MIN_SPARE_EVENTS, spare_raw, MAX_EVENTS)\n     priority_budget = min(priority_raw, MAX_EVENTS - reserved_spare)\n+    quotas, kind_floor = _kind_budgets(semantic_counts, priority_budget)\n     room = MAX_EVENTS - priority_budget\n-    step = max(1, spare_raw // room) if room > 0 and spare_raw else 1\n+    diagnostic_counts = {k: count for k, count in raw_kinds.items() if not _is_semantic(k)}\n+    diagnostic_quotas, diagnostic_floor = _kind_budgets(diagnostic_counts, min(room, spare_raw))\n+    quotas.update(diagnostic_quotas)\n     chosen: list = []\n     retained_kinds: Counter = Counter()\n     dropped_kinds: dict[str, int] = {}\n-    spare_seen = 0\n-    spare_kept = 0\n     semantic_seen = 0\n-    first_kinds: set[str] = set()\n-    nonfirst_seen = 0\n-    nonfirst_total = priority_raw - len(semantic_kinds)\n-    nonfirst_budget = max(0, priority_budget - len(semantic_kinds))\n+    seen_by_kind: Counter = Counter()\n     for e in events:\n         if _is_semantic(e.kind):\n             semantic_seen += 1\n-            if e.kind not in first_kinds:\n-                first_kinds.add(e.kind)\n-                retain = len(first_kinds) <= priority_budget\n-            else:\n-                retain = (nonfirst_total > 0 and\n-                          (nonfirst_seen + 1) * nonfirst_budget // nonfirst_total\n-                          > nonfirst_seen * nonfirst_budget // nonfirst_total)\n-                nonfirst_seen += 1\n+        seen = seen_by_kind[e.kind]\n+        seen_by_kind[e.kind] += 1\n+        quota = quotas[e.kind]\n+        total = raw_kinds[e.kind]\n+        if seen == 0:\n+            retain = quota > 0\n         else:\n-            retain = room > 0 and spare_kept < room and spare_seen % step == 0\n-            spare_seen += 1\n-            if retain:\n-                spare_kept += 1\n+            retain = (quota > 1 and\n+                      seen * (quota - 1) // (total - 1)\n+                      > (seen - 1) * (quota - 1) // (total - 1))\n         if retain:\n             retained_kinds[e.kind] += 1\n             if materialize:\n@@ -120,15 +135,19 @@ def _event_selection(events: list, *, materialize: bool) -> tuple[list, dict]:\n \n     return chosen, {\n         \"applied\": True,\n-        \"policy\": \"kind-preserving/systematic-v3\",\n+        \"policy\": \"kind-preserving/systematic-v5\",\n         \"raw\": len(events), \"retained\": retained, \"dropped\": dropped,\n         \"target_limit\": MAX_EVENTS, \"minimum_spare\": MIN_SPARE_EVENTS,\n-        \"always_keep\": \"first event of each normalized kind within budget\",\n+        \"always_keep\": \"all events of kinds whose count fits their per-kind budget\",\n         \"priority_raw\": priority_raw, \"spare_raw\": spare_raw,\n         \"semantic_budget\": priority_budget,\n+        \"minimum_per_kind\": kind_floor,\n+        \"semantic_kind_budgets\": {k: quotas[k] for k in sorted(semantic_counts)},\n+        \"diagnostic_kind_budgets\": dict(sorted(diagnostic_quotas.items())),\n+        \"minimum_per_diagnostic_kind\": diagnostic_floor,\n         \"semantic_retained\": semantic_seen - sum(v for k, v in dropped_kinds.items()\n                                                 if _is_semantic(k)),\n-        \"spare_budget\": room, \"stride\": step if room > 0 and spare_raw else None,\n+        \"spare_budget\": room, \"stride\": None,\n         \"retained_kinds\": dict(sorted(retained_kinds.items())),\n         \"dropped_kinds\": dict(sorted(dropped_kinds.items())),\n     }\n"
      },
      {
        "path": "nodefusion/tests/test_bundle_shape.py",
        "sha256": "34d227f2726d1820160288b225243b51fe3583839ff52ee245a814eb1c27f81d",
        "patch": "diff --git a/nodefusion/tests/test_bundle_shape.py b/nodefusion/tests/test_bundle_shape.py\nindex 40bd9fe..025791a 100644\n--- a/nodefusion/tests/test_bundle_shape.py\n+++ b/nodefusion/tests/test_bundle_shape.py\n@@ -1,5 +1,6 @@\n \n import sys\n+from collections import Counter\n from pathlib import Path\n from types import SimpleNamespace as NS\n \n@@ -144,7 +145,8 @@ def test_event_selection_metadata_accounts_for_every_raw_event(monkeypatch):\n     assert audit[\"priority_raw\"] == 4\n     assert audit[\"spare_raw\"] == 26\n     assert audit[\"spare_budget\"] == 6\n-    assert audit[\"stride\"] == 4\n+    assert audit[\"stride\"] is None\n+    assert audit['diagnostic_kind_budgets'] == {'func.hot_path': 6}\n     assert sum(audit[\"retained_kinds\"].values()) == audit[\"retained\"]\n     assert sum(audit[\"dropped_kinds\"].values()) == audit[\"dropped\"]\n     assert [e.insn for e in selected[:4]] == [0, 1, 2, 3]\n@@ -156,10 +158,9 @@ def test_bounded_selector_preserves_order_and_systematic_sample(monkeypatch):\n     events = [NS(kind=(\"proc.fork\" if i in {2, 7} else \"func.hot\"), insn=i)\n               for i in range(12)]\n     selected, audit = B._select_events(events)\n-    # Ten diagnostics, four spare slots => old spare[::2][:4], interleaved\n-    # with both semantic events in original timeline order.\n-    assert [event.insn for event in selected] == [0, 2, 3, 5, 7, 8]\n-    assert audit[\"stride\"] == 2\n+    # Four per-kind positions include the first and last diagnostic entries.\n+    assert [event.insn for event in selected] == [0, 2, 4, 7, 8, 11]\n+    assert audit[\"stride\"] is None\n     assert audit[\"retained\"] == 6\n \n \n@@ -178,6 +179,79 @@ def test_large_semantic_stream_stays_browser_bounded(monkeypatch):\n     assert audit[\"raw\"] == audit[\"retained\"] + audit[\"dropped\"]\n \n \n+def test_rare_semantic_events_survive_hot_kinds_without_kernel_allowlists(monkeypatch):\n+    monkeypatch.setattr(B, 'MAX_EVENTS', 200)\n+    monkeypatch.setattr(B, 'MIN_SPARE_EVENTS', 25)\n+    events = [NS(kind='pagetable.map', insn=i) for i in range(5000)]\n+    events += [NS(kind='future_namespace.branch', insn=5000 + i) for i in range(13)]\n+    events += [NS(kind='trap.page_fault', insn=5013 + i) for i in range(4)]\n+    events += [NS(kind='func.loop', insn=5017 + i) for i in range(1000)]\n+    selected, audit = B._select_events(events)\n+    assert len(selected) == audit['retained'] == 200\n+    assert audit['retained_kinds']['future_namespace.branch'] == 13\n+    assert audit['retained_kinds']['trap.page_fault'] == 4\n+    assert audit['retained_kinds']['func.loop'] == 25\n+    assert audit['semantic_retained'] == 175\n+    assert audit['semantic_kind_budgets']['pagetable.map'] == 158\n+    hot = [item.insn for item in selected if item.kind == 'pagetable.map']\n+    assert hot[0] == 0 and hot[-1] == 4999\n+    assert [item.insn for item in selected] == sorted(item.insn for item in selected)\n+    assert B._select_events(events)[0] == selected\n+    empty, accounting = B._event_selection(events, materialize=False)\n+    assert empty == [] and accounting == audit\n+    for kind, count in Counter(item.kind for item in events).items():\n+        assert audit['retained_kinds'].get(kind, 0) + audit['dropped_kinds'].get(kind, 0) == count\n+\n+\n+def test_more_semantic_kinds_than_slots_is_still_bounded(monkeypatch):\n+    monkeypatch.setattr(B, 'MAX_EVENTS', 7)\n+    monkeypatch.setattr(B, 'MIN_SPARE_EVENTS', 2)\n+    events = [NS(kind=f'new.kind{i}', insn=i) for i in range(20)]\n+    events += [NS(kind='func.noise', insn=20 + i) for i in range(20)]\n+    selected, audit = B._select_events(events)\n+    assert len(selected) == 7\n+    assert audit['semantic_retained'] == 5 and audit['retained_kinds']['func.noise'] == 2\n+    assert sum(audit['semantic_kind_budgets'].values()) == 5\n+    assert [item.kind for item in selected[:5]] == [f'new.kind{i}' for i in range(5)]\n+    assert sum(audit['dropped_kinds'].values()) == 33\n+    assert B._event_selection(events, materialize=False)[1] == audit\n+\n+\n+def test_rare_function_entries_survive_hot_diagnostic_functions(monkeypatch):\n+    monkeypatch.setattr(B, 'MAX_EVENTS', 100)\n+    monkeypatch.setattr(B, 'MIN_SPARE_EVENTS', 25)\n+    events = [NS(kind='syscall.enter', insn=i) for i in range(1000)]\n+    events += [NS(kind='func.format', insn=1000 + i) for i in range(2000)]\n+    events += [NS(kind='func.unmap', insn=3000 + i) for i in range(2)]\n+    selected, audit = B._select_events(events)\n+    assert len(selected) == 100\n+    assert audit['retained_kinds']['func.unmap'] == 2\n+    assert audit['retained_kinds']['func.format'] == 23\n+    assert not audit['dropped_kinds'].get('func.unmap')\n+    assert selected[-1] is events[-1]\n+\n+\n+def test_kind_quotas_use_the_budget_without_exceeding_raw_counts():\n+    for counts in [{'one': 1}, {'a': 2, 'b': 1000, 'c': 9},\n+                   {str(index): index + 1 for index in range(100)}]:\n+        total = sum(counts.values())\n+        for budget in range(min(total, 300) + 1):\n+            quotas, floor = B._kind_budgets(counts, budget)\n+            assert sum(quotas.values()) == budget\n+            assert all(0 <= quotas[kind] <= count for kind, count in counts.items())\n+            assert all(quotas[kind] == count for kind, count in counts.items() if count <= floor)\n+\n+\n+def test_diagnostic_reservation_cannot_exceed_total_budget(monkeypatch):\n+    monkeypatch.setattr(B, 'MAX_EVENTS', 4)\n+    monkeypatch.setattr(B, 'MIN_SPARE_EVENTS', 25)\n+    events = [NS(kind='syscall.enter', insn=0)]\n+    events += [NS(kind='func.hot', insn=i) for i in range(1, 30)]\n+    selected, audit = B._select_events(events)\n+    assert len(selected) == 4 and audit['semantic_budget'] == 0\n+    assert audit['dropped_kinds']['syscall.enter'] == 1\n+\n+\n def test_interactive_sampling_does_not_erase_raw_semantic_coverage(monkeypatch):\n     monkeypatch.setattr(B, \"MAX_EVENTS\", 10)\n     monkeypatch.setattr(B, \"MIN_SPARE_EVENTS\", 3)\n"
      },
      {
        "path": "nodefusion/tests/test_kernel_integrations.py",
        "sha256": "8e3ecdcf6ad5ea3b7fa44a3e3244a2c9678255b62c02d8cd48de9cfc1189b376",
        "patch": "diff --git a/nodefusion/tests/test_kernel_integrations.py b/nodefusion/tests/test_kernel_integrations.py\nindex a285e88..b33e6b0 100644\n--- a/nodefusion/tests/test_kernel_integrations.py\n+++ b/nodefusion/tests/test_kernel_integrations.py\n@@ -64,7 +64,7 @@ def test_rcore_patch_and_manifest_agree_on_the_per_region_hook():\n     assert manifest.events[symbol].kind == \"vm.unmap\"\n     assert manifest.events[symbol].args == [\"start_vpn\", \"end_vpn\"]\n     assert manifest.absent[\"vm.unmap\"].when == {\n-        \"type_missing\": \"os::task::processor::Processor\"}\n+        \"type_missing\": \"os::mm::memory_set::MemorySet\"}\n \n \n def test_rcore_patch_exports_exact_physical_allocation_results():\n@@ -79,6 +79,38 @@ def test_rcore_patch_exports_exact_physical_allocation_results():\n     assert \"nodefusion_trace_sched_switch\" in patch\n \n \n+def test_rcore_reference_region_removal_is_an_attempt_not_a_success_event():\n+    manifest = load(ROOT / 'manifests/rcore.toml')\n+    symbol = 'os::mm::memory_set::MemorySet::remove_framed_area'\n+    assert manifest.events[symbol].kind == 'vm.remove_area'\n+    assert manifest.events[symbol].args == ['self', 'start_vpn', 'end_vpn']\n+    dedicated = next(index for index, watch in enumerate(manifest.watches)\n+                     if watch.match.get('fn') == ['remove_framed_area'])\n+    inline = next(index for index, watch in enumerate(manifest.watches)\n+                  if watch.match.get('fn') == ['frame_alloc', 'frame_dealloc', 'unmap', 'init_heap'])\n+    assert dedicated < inline\n+    assert manifest.watches[dedicated].args == 3\n+    assert not manifest.watches[dedicated].inlined\n+\n+\n+def test_rcore_2026a_ch4_observation_patch_preserves_region_acceptance():\n+    patch = (INTEGRATIONS / 'rcore-2026a-ch4-observation.patch').read_text()\n+    assert patch.index('})?;') < patch.index('nodefusion_vm_unmap_region(start.0, end.0);')\n+    assert patch.index('nodefusion_vm_unmap_region(start.0, end.0);') < patch.index('let mut area = self.areas.remove(index);')\n+    assert 'const NFT_ALLOCATOR_STATE: u64 = 6;' in patch\n+    assert 'a: [free_pages as u64, used_pages as u64, 0, 0]' in patch\n+    assert 'nodefusion_trace_page(NFT_KALLOC, paddr, free_pages, used_pages)' in patch\n+    assert 'nodefusion_trace_page(NFT_KFREE, PhysAddr::from(ppn).0, free_pages, used_pages)' in patch\n+    assert 'GlobalAlloc::alloc(&self.0, layout)' in patch\n+    assert 'GlobalAlloc::dealloc(&self.0, ptr, layout)' in patch\n+    manifest = load(ROOT / 'manifests/rcore.toml')\n+    event = manifest.events['os::mm::page_table::PageTable::map']\n+    assert event.kind == 'pagetable.map' and event.args == ['self', 'vpn', 'ppn', 'flags']\n+    rule = next(watch for watch in manifest.watches\n+                if watch.match == {'module': 'os::mm::page_table::PageTable', 'fn': ['map']})\n+    assert rule.args == 4 and not rule.inlined\n+\n+\n def test_rcore_chapter_patches_preserve_per_region_and_scheduler_identity():\n     for chapter in (6, 8):\n         patch = (INTEGRATIONS / f\"rcore-ch{chapter}-nodefusion.patch\").read_text(\n@@ -94,6 +126,43 @@ def test_rcore_chapter_patches_preserve_per_region_and_scheduler_identity():\n     assert \"block_current_and_run_next\" in ch8\n \n \n+def test_2026a_ch5_observation_preserves_allocator_and_switch_semantics():\n+    rust = (INTEGRATIONS / 'rcore-2026a-ch5-observation.patch').read_text()\n+    c = (INTEGRATIONS / 'ucore-2026a-ch5-observation.patch').read_text()\n+    for patch in (rust, c):\n+        assert 'nftrace_commit_point' in patch\n+        assert 'nodefusion_pagetable_map' in patch or '#[inline(never)]' in patch\n+    assert 'self.allocated -= 1;' in rust\n+    assert 'self.allocated += 1;' in rust\n+    assert 'if result.is_some()' in rust\n+    assert 'frame.as_ref().map_or(0, |frame| PhysAddr::from(frame.ppn).0)' in rust\n+    assert 'pub(crate) const NO_TASK: usize = usize::MAX;' in rust\n+    assert 'emit(4, [from_task as u64, to_task as u64, from_pid as u64, to_pid as u64])' in rust\n+    assert 'crate::nftrace::NO_TASK, next_pid' in rust\n+    assert 'crate::nftrace::sched_switch(task_id, idle, pid, crate::nftrace::NO_TASK)' in rust\n+    assert rust.index('add_task(new_task);') < rust.index('crate::nftrace::process_fork(current_task.getpid(), new_pid);')\n+    assert 'nf_used_pages--;' in c\n+    assert 'nf_used_pages++;' in c\n+    assert c.index('nf_used_pages--;') < c.index('nftrace_page_free((uint64)pa, nf_free_pages, nf_used_pages);')\n+    assert c.index('add_task(np);') < c.index('nftrace_proc_fork(p->pid, np->pid);')\n+    assert 'nftrace_sched_switch((uint64)&idle, (uint64)p, (uint64)-1, p->pid);' in c\n+    assert 'nftrace_sched_switch((uint64)p, (uint64)&idle, p->pid, (uint64)-1);' in c\n+    assert c.index('*pte = PA2PTE(pa) | perm | PTE_V;') < c.index('nodefusion_pagetable_map(a, pa, perm | PTE_V);')\n+\n+\n+def test_rcore_2026a_ch5_region_hooks_only_describe_explicit_pte_removal():\n+    patch = (INTEGRATIONS / 'rcore-2026a-ch5-observation.patch').read_text()\n+    assert 'if mapped_end > area.vpn_range.get_start()' in patch\n+    assert 'nodefusion_vm_unmap_region(area.vpn_range.get_start().0, mapped_end.0);' in patch\n+    assert 'if self.vpn_range.get_start() < self.vpn_range.get_end()' in patch\n+    assert 'nodefusion_vm_unmap_region(self.vpn_range.get_start().0, self.vpn_range.get_end().0);' in patch\n+    assert 'if new_end < self.vpn_range.get_end()' in patch\n+    assert 'nodefusion_vm_unmap_region(new_end.0, self.vpn_range.get_end().0);' in patch\n+    # Releasing data-frame ownership on exit leaves the zombie page table alive.\n+    # Do not invent explicit PTE-removal events for that separate operation.\n+    assert 'self.areas.clear();' not in patch\n+\n+\n def test_rcore_ch8_keeps_applicable_vm_and_signal_watchpoints_callable():\n     patch = (INTEGRATIONS / \"rcore-page-table-observation-points.patch\").read_text()\n     assert patch.count(\"#[inline(never)]\") == 6\n@@ -161,7 +230,7 @@ def test_rcore_filesystem_absence_depends_on_the_resolved_build(monkeypatch):\n             (\"proc.alloc\", \"os::task::task::TaskControlBlock\"),\n             (\"proc.fork\", \"os::task::processor::Processor\"),\n             (\"proc.exec\", \"os::task::processor::Processor\"),\n-            (\"vm.unmap\", \"os::task::processor::Processor\"),\n+            (\"vm.unmap\", \"os::mm::memory_set::MemorySet\"),\n             (\"phys.alloc\", \"os::mm::frame_allocator::StackFrameAllocator\"),\n             (\"phys.free\", \"os::mm::frame_allocator::StackFrameAllocator\"),\n             (\"vm.map\", \"os::mm::memory_set::MemorySet\"),\n@@ -189,6 +258,28 @@ def test_ucore_patch_and_manifest_supply_exact_semantics():\n     assert manifest.absent[\"log.commit\"].why == \"feature\"\n \n \n+def test_ucore_2026a_ch4_patch_observes_allocator_results_and_committed_ptes():\n+    patch = (INTEGRATIONS / 'ucore-2026a-ch4-observation.patch').read_text()\n+    paths = [line.split(' b/', 1)[1] for line in patch.splitlines() if line.startswith('diff --git ')]\n+    assert set(paths) == {'os/kalloc.c', 'os/vm.c', 'os/nftrace.c', 'os/nftrace.h'}\n+    assert 'NFT_KALLOC = 1' in patch and 'NFT_KFREE = 5' in patch and 'NFT_ALLOCATOR_STATE = 6' in patch\n+    assert 'nftrace_page_alloc((uint64)l, 1, nf_free_pages, nf_used_pages)' in patch\n+    assert 'nftrace_page_free((uint64)pa, 1, nf_free_pages, nf_used_pages)' in patch\n+    assert 'nftrace_allocator_state(nf_free_pages, nf_used_pages)' in patch\n+    assert patch.index('*pte = PA2PTE(pa) | perm | PTE_V;') < patch.index('nodefusion_pagetable_map(a, pa, perm | PTE_V);')\n+    assert 'const struct nftrace_record record = { type, { a0, a1, a2, a3 } }' in patch\n+\n+\n+def test_ucore_2026a_ch4_page_table_experiment_owns_and_reclaims_its_pages():\n+    patch = (INTEGRATIONS / 'ucore-2026a-ch4-pagetable-experiment.patch').read_text()\n+    assert patch.index('uvmunmap(table, va, 1, 0)') < patch.index('uvmunmap(table, va, 1, 1)')\n+    assert patch.index('uvmunmap(table, TRAMPOLINE, 1, 0)') < patch.index('freewalk(table)')\n+    assert 'walkaddr(table, va + 0x123) != (uint64)frame' in patch\n+    assert 'useraddr(table, va + 0x123) != (uint64)frame + 0x123' in patch\n+    assert 'frame[0x123] != 0x5a' in patch\n+    assert patch.index('kvm_init();') < patch.index('nodefusion_pagetable_experiment();', patch.index('kvm_init();'))\n+\n+\n def test_ucore_showcase_fixes_remain_separate_from_observation_patch():\n     observation = (INTEGRATIONS / \"ucore-nodefusion.patch\").read_text()\n     kernel_fix = (INTEGRATIONS / \"ucore-ch8-showcase.patch\").read_text()\n@@ -204,6 +295,13 @@ def test_ucore_manifest_covers_all_eight_measured_shapes():\n     manifest = load(ROOT / \"manifests\" / \"ucore.toml\")\n     assert manifest.detect == {\"all_symbol\": [\"digits\", \"SBI_SHUTDOWN\"]}\n     assert manifest.derive_feature_absence_from_symbols is True\n+    process = manifest.entity(\"process\")\n+    assert process.liveness[\"skip_when\"] == {\n+        \"field\": \"state\", \"one_of\": [\"UNUSED\", \"P_UNUSED\"]}\n+    fields = {field.name: field for field in process.fields}\n+    assert fields[\"context\"].role == \"sched_context\"\n+    assert fields[\"trapframe\"].role == \"trap_context\"\n+    assert all(fields[name].optional for name in (\"context\", \"trapframe\", \"kstack\"))\n     parent = next(field for field in manifest.entity(\"process\").relations\n                   if field.name == \"parent\")\n     assert parent.optional is True\n"
      },
      {
        "path": "nodefusion/tests/test_resolve.py",
        "sha256": "b14f432eb380c5514b73431978b01b0d715ed9a49f92deb547358fb35dd4d8ec",
        "patch": "diff --git a/nodefusion/tests/test_resolve.py b/nodefusion/tests/test_resolve.py\nindex 0eeed28..585b0a8 100644\n--- a/nodefusion/tests/test_resolve.py\n+++ b/nodefusion/tests/test_resolve.py\n@@ -97,6 +97,30 @@ def test_missing_field_is_absent_not_a_failure():\n     assert resolve_path(dw, tcb, \"inner.priority\").state == ABSENT\n \n \n+def test_rcore_priority_spellings_resolve_without_kernel_branches():\n+    from nodefusion.model.manifest import builtin_dir, load\n+    from nodefusion.model.snapshot import Entity, Field\n+\n+    manifest = load(builtin_dir() / \"rcore.toml\")\n+    specs = [field for entity in manifest.entities if entity.name == \"task\"\n+             for field in entity.fields if field.role == \"priority\"]\n+    assert {field.path for field in specs} == {\"inner.prio\", \"inner.priority\"}\n+    assert all(field.optional for field in specs)\n+    for spelling in (\"prio\", \"priority\", None):\n+        dw, tcb = chain()\n+        if spelling:\n+            dw._s[6].fields[spelling] = 136\n+        fields = {}\n+        for spec in specs:\n+            resolved = resolve_path(dw, tcb, spec.path)\n+            fields[spec.name] = Field(spec.name, resolved.state,\n+                                      value=16 if resolved.state == PRESENT else None,\n+                                      role=spec.role)\n+        entity = Entity(\"task\", 0x1000, fields=fields)\n+        assert entity.role(\"priority\") == (16 if spelling else None)\n+        assert sum(field.ok for field in fields.values()) == (1 if spelling else 0)\n+\n+\n def test_missing_field_names_the_payload_type_not_just_the_wrapper():\n     dw, tcb = chain()\n     why = resolve_path(dw, tcb, \"inner.priority\").reason or \"\"\n"
      },
      {
        "path": "nodefusion/host/assets/app.css",
        "sha256": "0607be541e6bcd789a1964e74a6677a87d5d593684d6ac809782056ab7c0695a",
        "patch": "diff --git a/nodefusion/host/assets/app.css b/nodefusion/host/assets/app.css\nindex 88f5f82..d7124ab 100644\n--- a/nodefusion/host/assets/app.css\n+++ b/nodefusion/host/assets/app.css\n@@ -460,8 +460,8 @@ tr.sel td { background: color-mix(in oklch, var(--accent) 12%, var(--bg)); }\n   .right { width: 100%; max-height: 340px; border-left: 0; border-top: 1px solid var(--line); padding: 14px; }\n   .main.detail-collapsed .right { display: none; }\n   #evscroll { height: 54vh; }\n-  .trace-grid { grid-template-columns: 1fr; }\n-  .function-tree, .function-sequence { max-height: 42vh; }\n+  .trace-grid { grid-template-columns: 1fr; min-height: 0; align-items: start; }\n+  .function-tree, .function-sequence { min-height: 0; max-height: 42vh; }\n }\n @media (max-width: 560px) {\n   .brand-kicker, .shortcut-hint { display: none; }\n"
      },
      {
        "path": "nodefusion/host/assets/app.js",
        "sha256": "c253b16d88ddc73d1c78ec3729800800ad255b923712893dbe12f66faab2aca2",
        "patch": "diff --git a/nodefusion/host/assets/app.js b/nodefusion/host/assets/app.js\nindex 7f1256e..a87dcd9 100644\n--- a/nodefusion/host/assets/app.js\n+++ b/nodefusion/host/assets/app.js\n@@ -28,6 +28,7 @@ const NF = {\n   selPage: null,\n   selPid: null,\n   filters: { text: '', kind: '', res: '', pid: '', cpu: '', group: '', from: '', to: '' },\n+  functionFilters: {text: '', cpu: '', limit: '80', grouping: null},\n };\n \n /* ------------------------------------------------------------------ 工具 */\n@@ -1641,6 +1642,10 @@ function renderFunctions() {\n   if (returns.nested_entries) grouping.appendChild(new Option('观测调用链', 'stack'));\n   if (returns.nested_entries) grouping.value = 'stack';\n   else if (!entries.some((e) => e.caller)) grouping.value = 'namespace';\n+  search.value = NF.functionFilters.text;\n+  cpu.value = NF.functionFilters.cpu;\n+  limit.value = NF.functionFilters.limit;\n+  if ([...grouping.options].some(option => option.value === NF.functionFilters.grouping)) grouping.value = NF.functionFilters.grouping;\n   controls.appendChild(search); controls.appendChild(cpu); controls.appendChild(grouping);\n   controls.appendChild(limit); p.appendChild(controls);\n \n@@ -1658,6 +1663,7 @@ function renderFunctions() {\n   grid.appendChild(treePanel); grid.appendChild(sequencePanel); p.appendChild(grid);\n \n   function paint() {\n+    NF.functionFilters = {text: search.value, cpu: cpu.value, limit: limit.value, grouping: grouping.value};\n     const q = search.value.trim().toLowerCase();\n     const selectedCpu = cpu.value;\n     const filtered = entries.filter((e) => (!q || e.fn.toLowerCase().includes(q) || e.caller.toLowerCase().includes(q) || (e.path || []).some((name) => name.toLowerCase().includes(q))) && (selectedCpu === '' || String(e.cpu) === selectedCpu));\n"
      },
      {
        "path": "nodefusion/tests/test_phys_alloc_gate.py",
        "sha256": "a1b68458d8268d052082ad92b80f86753c46423eec7c86c3bdd6019e23b8186a",
        "patch": "diff --git a/nodefusion/tests/test_phys_alloc_gate.py b/nodefusion/tests/test_phys_alloc_gate.py\nindex 3cb406d..ec2bc43 100644\n--- a/nodefusion/tests/test_phys_alloc_gate.py\n+++ b/nodefusion/tests/test_phys_alloc_gate.py\n@@ -128,6 +128,51 @@ def test_sched_semantic_record_fills_both_endpoints_without_snapshots():\n     assert event.detail[\"from_proc\"] == \"kernel-task#41\"\n     assert event.detail[\"to_task_id\"] == 42\n     assert event.detail[\"to_pid\"] == 7\n+    assert event.pid == 7\n+    assert a._attribute(0, -1, {}) == (7, \"task#7\")\n+\n+\n+def test_semantic_switch_attribution_survives_missing_and_reused_snapshot_slots():\n+    a = object.__new__(A.Analysis)\n+    a._pid_by_slot_at = lambda *_: (99, \"stale slot\")\n+    slots = {0: 3, 1: 4}\n+    assert a._attribute(0, 0, slots) == (99, \"stale slot\")\n+    a._nftrace_event(NfTraceRec(insn=100, cpu=0, type=a.NFT_SCHED_SWITCH,\n+                              a=(10, 20, a.NFT_NO_TASK, 7)), -1, slots)\n+    assert a._attribute(0, -1, {}) == (7, \"task#7\")\n+    assert a._attribute(0, 200, slots) == (7, \"task#7\")\n+    assert a._attribute(1, 0, slots) == (99, \"stale slot\")\n+    alloc = a._nftrace_event(NfTraceRec(insn=101, cpu=0, type=a.NFT_KALLOC,\n+                                      a=(0x81234000, 1, 9, 1)), -1, {})\n+    assert alloc.pid == 7\n+\n+\n+def test_semantic_switches_track_each_cpu_and_distinguish_pid_zero_from_idle():\n+    a = object.__new__(A.Analysis)\n+    for cpu, pid in [(0, 0), (1, 7)]:\n+        a._nftrace_event(NfTraceRec(insn=100 + cpu, cpu=cpu, type=a.NFT_SCHED_SWITCH,\n+                                  a=(10 + cpu, 20 + cpu, a.NFT_NO_TASK, pid)), -1, {})\n+    assert a._attribute(0, -1, {}) == (0, \"task#0\")\n+    assert a._attribute(1, -1, {}) == (7, \"task#7\")\n+    a._nftrace_event(NfTraceRec(insn=102, cpu=0, type=a.NFT_SCHED_SWITCH,\n+                              a=(20, 10, 0, a.NFT_NO_TASK)), -1, {})\n+    assert a._attribute(0, -1, {}) == (None, \"kernel-task#10\")\n+    assert a._attribute(1, -1, {}) == (7, \"task#7\")\n+\n+\n+def test_rebuilding_events_resets_semantic_ownership_without_using_future_switches():\n+    a = object.__new__(A.Analysis)\n+    a.ncpu = 1\n+    a.states = []\n+    a.events = []\n+    a._semantic_current = {0: (99, \"previous analysis\")}\n+    a.trace = NS(discons=[], watch_hits=[], nftrace=[\n+        NfTraceRec(insn=1, cpu=0, type=a.NFT_KALLOC, a=(0x81234000, 1, 9, 1)),\n+        NfTraceRec(insn=2, cpu=0, type=a.NFT_SCHED_SWITCH, a=(10, 20, a.NFT_NO_TASK, 7)),\n+        NfTraceRec(insn=3, cpu=0, type=a.NFT_KALLOC, a=(0x81235000, 1, 8, 2)),\n+    ])\n+    a.build_events()\n+    assert [event.pid for event in a.events] == [None, 7, 7]\n \n \n def test_kfree_semantic_record_has_physical_range():\n"
      }
    ],
    "source_file_hashes_after": {
      "nodefusion/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
      "nodefusion/_vendor/elftools/__init__.py": "9385fdca231d9ad83e27a59aa1bc59b252efad8c24cf08c9f39e0b543f675746",
      "nodefusion/_vendor/elftools/common/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
      "nodefusion/_vendor/elftools/common/construct_utils.py": "d1de2461e60636b52cfc446d00f7a31f152f2ccc43c1a53bc2ba82187ca1e460",
      "nodefusion/_vendor/elftools/common/exceptions.py": "bedd7aa994281100ba13a40dfaad8b03eec17a725a1c4cb23893572d99bbd1ef",
      "nodefusion/_vendor/elftools/common/utils.py": "36a5f64bfb3aab0dba30d9fa05aa1b3f9fbbf86f297eee27c7c12652f5ac308b",
      "nodefusion/_vendor/elftools/construct/__init__.py": "15104eb011a640e4268a9b9221d07201a0360ff0b1c8b49e252ef41fdfbb35de",
      "nodefusion/_vendor/elftools/construct/adapters.py": "5745745b25eb849174ee5c3179b9867b03e0471633e9eac8276aa439fe4c8841",
      "nodefusion/_vendor/elftools/construct/core.py": "df9719893de6454f5bc4c912afc892bcc278ef45ac1553bf4a409278ba347c9d",
      "nodefusion/_vendor/elftools/construct/debug.py": "491486779e464e0f4a59cfd429d8e93c577a0f0d9b969847e69400a3c86acb1c",
      "nodefusion/_vendor/elftools/construct/lib/__init__.py": "973420ec247c18b9e5488743bb099ae82f19c7287ef31dcb529a7283b6e42eb3",
      "nodefusion/_vendor/elftools/construct/lib/binary.py": "f18e4161a11bc95732bd01c577cbe98373081afd5b4112b02fec51a0e1df2e11",
      "nodefusion/_vendor/elftools/construct/lib/bitstream.py": "ee8081769bed1d00a086399c8749a847c1a48b8d08637506bf7d1229b6e1808a",
      "nodefusion/_vendor/elftools/construct/lib/container.py": "0385a420febf5bac714153ceaadd192ff9d09862bc7e17c203bf759aa18b2bb4",
      "nodefusion/_vendor/elftools/construct/lib/hex.py": "55f82dc36f273347c08e9e469fd497368241453b7a63e69e167ad6b316e5e2c7",
      "nodefusion/_vendor/elftools/construct/macros.py": "0244e84cf4f598ac8da7c3d8f1f09b06112a508e71fb8d381b377f1c0472a4e3",
      "nodefusion/_vendor/elftools/dwarf/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
      "nodefusion/_vendor/elftools/dwarf/abbrevtable.py": "d7d338a6eddd4c1fe02c66d9c2b1c202c36ebcfda28f438a0ac0546dc5a63eb1",
      "nodefusion/_vendor/elftools/dwarf/aranges.py": "399d17d0e3cc18527337d60c1ffc0cfcfc8d5ddcf86af1ef6c359453538344e3",
      "nodefusion/_vendor/elftools/dwarf/callframe.py": "6c77dd3c1b482434d8d86f35922f0c88b1a71c1c19055fa512224d44876a4b5a",
      "nodefusion/_vendor/elftools/dwarf/compileunit.py": "2681263026c2bdd3fd9033e60230024e6b25ca90280df91c3ae0b0fe97bdb9d3",
      "nodefusion/_vendor/elftools/dwarf/constants.py": "30377a1636c5ac41b7a09f7c79c6bae67b49696c4e9b9d904a1a0acaba7dabdb",
      "nodefusion/_vendor/elftools/dwarf/datatype_cpp.py": "b3df1fc9ef56f941e0b38a9ad5da05a3c3821dd1cdc4b440c7c1934bee00a770",
      "nodefusion/_vendor/elftools/dwarf/descriptions.py": "6692ed493344018f4d96fdb70e9b04bdb3ec1428df0448f17fc8ffab2a205851",
      "nodefusion/_vendor/elftools/dwarf/die.py": "b653e8091a49f6926a955d8c05f26c36798ece3d902c00d2b5da10af637bfce7",
      "nodefusion/_vendor/elftools/dwarf/dwarf_expr.py": "db6d4cb9f3f1ee7e85ac1f9286831093d1b65f8c472fe0f9331a7aa164782bcb",
      "nodefusion/_vendor/elftools/dwarf/dwarf_util.py": "2e1cc3030a3cc669e0832e3cb5d4b1e3c82e22ff5a1164e6a878931f8531ce0d",
      "nodefusion/_vendor/elftools/dwarf/dwarfinfo.py": "3cfff046c35f7b063ba4288f1d9bb5167be4f3fdda0af756a299d832d660b75f",
      "nodefusion/_vendor/elftools/dwarf/enums.py": "10d18e4acabc383b8e8527cf4c011874dc9459c3bc30bd65b9212885a146bd7a",
      "nodefusion/_vendor/elftools/dwarf/lineprogram.py": "d9472d85b8c62fe56a7d6371d8cdb8af6268416970bdf909898ccb2606fa850c",
      "nodefusion/_vendor/elftools/dwarf/locationlists.py": "5167c3fb6208e3bafe0a52fc4d48eb164dc84dbd4980643acec19be26639a194",
      "nodefusion/_vendor/elftools/dwarf/namelut.py": "4b62eb965afd3e099835eb8bb9112f2d1ec89cb42adc6b55c1f113b6068d17b3",
      "nodefusion/_vendor/elftools/dwarf/ranges.py": "da3856ee646cf5b305751fa73a2d5fd9b0a21413377ca11cf93ce20e7040386e",
      "nodefusion/_vendor/elftools/dwarf/structs.py": "dfb1d6d755bcc7cf9a0363620e470c5b4a74bf7499a32d82f261652ffe71bef8",
      "nodefusion/_vendor/elftools/dwarf/typeunit.py": "c1bae01e11001941ebd0a10b72d569b4a0800600b3006b20a0b37f88536d1bc9",
      "nodefusion/_vendor/elftools/ehabi/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
      "nodefusion/_vendor/elftools/ehabi/constants.py": "a386df95ebe53338db1cdfe498a06acf8e976007b5fab5c4eed2b8904932caa8",
      "nodefusion/_vendor/elftools/ehabi/decoder.py": "3380c750ed972e33510a42a1d4de725f744cfc156e44a5d50ae199239cacb10e",
      "nodefusion/_vendor/elftools/ehabi/ehabiinfo.py": "e442ea16826888c9903893db8ccd9cb47f9f634476c1837812c84b6ce4be1b4c",
      "nodefusion/_vendor/elftools/ehabi/structs.py": "5ebdda74af71d7637d41eb0510403d8776d3b7ea70f715edc58aabc836aaae87",
      "nodefusion/_vendor/elftools/elf/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
      "nodefusion/_vendor/elftools/elf/constants.py": "d805c36820815a58fce8593206a5527c46009756b9397298d086679b6a9d9f23",
      "nodefusion/_vendor/elftools/elf/descriptions.py": "02771b6d1d4eb829b7334e417f580f78eb253c14f895c427c99b870537d363ef",
      "nodefusion/_vendor/elftools/elf/dynamic.py": "13c2621f118f30c6a8b6a0d999bdf8a7d082f0c2b7713eb4203d7b877082f0f7",
      "nodefusion/_vendor/elftools/elf/elffile.py": "0b8629b86828f0f05dea1200261ffaf1849ae675e52943e88a37e6a5e0b73d51",
      "nodefusion/_vendor/elftools/elf/enums.py": "9beb3eb13c4dfe6e2e75ed5db7a75dbb6da7917ed7ea7ad9c2ab7b697c284256",
      "nodefusion/_vendor/elftools/elf/gnuversions.py": "d22136e3242cf4ff379154b5c830706f3be1d77ee41ffab7efeed57e4876c740",
      "nodefusion/_vendor/elftools/elf/hash.py": "538c9b253f89a4b200eeb9c7d82f9cd0c3ae08146b3295538363ba5fced3627a",
      "nodefusion/_vendor/elftools/elf/notes.py": "17cf2c2a9ec9a0bf8f3415cbaeca42d3ab8f1102556251b290a2814e86f16f63",
      "nodefusion/_vendor/elftools/elf/relocation.py": "b0fd391fe0e293ac7dc5bdad495a8d2e72454442c35291781952fa5016f77b0f",
      "nodefusion/_vendor/elftools/elf/sections.py": "5acbfe427062f3f80cad1d556c4113d60136cbe526636e621a6e820ade5d6ab5",
      "nodefusion/_vendor/elftools/elf/segments.py": "103f945c2c7d67eff713609ea189601e94c0e7122274110c6b20d038a5b8bf74",
      "nodefusion/_vendor/elftools/elf/structs.py": "a0f439925915d7f1a69938673da2cebefd0d10860d60caddc81370ce017d8623",
      "nodefusion/host/__init__.py": "eb4e72c7ca2b3242527b39bd840ced588631e97404cea0e72e3131406cdeec59",
      "nodefusion/host/__main__.py": "13a1a5b340cdcfc1902b62be90e508c7c71886000d5bf087e7854aadf09fb35e",
      "nodefusion/host/analyze.py": "310d26f5c89334c05ee697bb5709a8e8bbce140bcb67f2d3450a09232a3d38b7",
      "nodefusion/host/assets/app.css": "0607be541e6bcd789a1964e74a6677a87d5d593684d6ac809782056ab7c0695a",
      "nodefusion/host/assets/app.js": "c253b16d88ddc73d1c78ec3729800800ad255b923712893dbe12f66faab2aca2",
      "nodefusion/host/bundle.py": "f6117f48b073e117dc0ffa6cdf1af4984d173b3a8f16808730e3746b51c2ad33",
      "nodefusion/host/callstack.py": "a091f8123f33797a628ebcaabbeae721fe458b009b69cee6697221971b7f2fc0",
      "nodefusion/host/cdp.py": "983be57750320be8265405b3fa4c3490288a34bba5b2f0c32820d51895210264",
      "nodefusion/host/cli.py": "6a2f09d5d4ea15299e3f9cbc0f7a2312a322e9c43beb3837d61b2276787af9dd",
      "nodefusion/host/dwarf.py": "158545b640bd312050c9cef773a19f0de839229cb08925a0298a5bb2751b5993",
      "nodefusion/host/elfid.py": "43c44bed9a69fa2b92fc7520342843e71caf0c6a3849d2b23b54e9a22dfdcfa0",
      "nodefusion/host/guest.py": "6871f08f11b9eda17b8a0618e8b8f43a544ddf05a37d7b530daa18d30d4c455a",
      "nodefusion/host/kernels.py": "10dcd1d97aae33b5b389d4106bdf5867468df41a39ce769300448f6d1727b103",
      "nodefusion/host/layout.py": "2f74bd4970af88fa38519c850fbcc494b8a1e4f5ddf7ed87897a442175f0ab82",
      "nodefusion/host/nfelf.py": "5495b1bc5e3406268ba66054e831dfb3fc8857c47b881d95cd995bafa65c5315",
      "nodefusion/host/nftrace.py": "d4fa97efd6527535ab90e4c623e8211bf8b9bf7d189beee47b56b216718c2f76",
      "nodefusion/host/procview.py": "ae1874f57bafa6b694c50aa3c0185671e60fcf0f784d139ee5e807e2f98e9689",
      "nodefusion/host/record.py": "ed6668c5711bcddff0e30a4b82eaf9235e6700746ce186042e39e45219b55428",
      "nodefusion/host/render.py": "46d000d2f40eb934180fba10ec8d8ccb8cc5d1e53e558304fdba941bfcff7dd8",
      "nodefusion/host/resources.py": "019a7be1fc7d86f221f2a67c3a5f7df271d1901500371a02a2113518483fb702",
      "nodefusion/host/shell.py": "08a9b0318ab79c0642d9a0b29683dc65b86c4e529f547530baf4e60b1e67f0af",
      "nodefusion/host/video.py": "1f49810a036f9388ae10153b8691504ed79c3e8b0e19a6bc2818de2ef1fe699d",
      "nodefusion/host/watchlist.py": "1b820dd5d741a118b28959b44d95b886e5fe7518dd5beef3e5561e3cf39822d1",
      "nodefusion/host/wslenv.py": "6b8f5d9e3f71b292e51c980f921dd498315c510d952ef90b24dfbf775b3afa6c",
      "nodefusion/manifests/alien.toml": "da290fe1014168a7e8f44844f30430c3041a14550449c5d51fa06847f23f7aeb",
      "nodefusion/manifests/arceos.toml": "cad48257d081aa1c660d3e7af2f4fbec79bbe232322c71453a9a5b1c9ac7be44",
      "nodefusion/manifests/axvisor.toml": "d6cd2cc9d9662f74a5d25f29e8d02591ae5a205fe18166307ef430edbc7432b3",
      "nodefusion/manifests/rcore.toml": "4a6c4746a885ce7ed68a374516188f02d5955028c94ecfa7e73c5ddf08b73e75",
      "nodefusion/manifests/rel4.toml": "ca43c2847a9ca757542ef3ed3e276dc7130c92b25150c73deb3e2a20faf8c37e",
      "nodefusion/manifests/starry.toml": "8a3ce9735d4c948322962b8c532be334034ad608aac28a041bb58876012dcae8",
      "nodefusion/manifests/ucore.toml": "7ca738a5abfb1c21afdb75b44c2fc0ce81b19d3d2db9aa3d820850b8abf74327",
      "nodefusion/manifests/xv6.toml": "0f501a4441214a2de3b1b50d39665ee23faad6f93024b3b92d30f542bc9b7964",
      "nodefusion/model/__init__.py": "9864ab2acb9890ed2fcbf815f30042fd97e3bd5ce069531f8c76fa2eed60b9d0",
      "nodefusion/model/ctxbuild.py": "552c0d3d87d640e73bfb4c3fc237453c7b84298c721f2d37594c85d1ab5eb86d",
      "nodefusion/model/dwarfsrc.py": "02688f5f8419ba6c8fd64ea4f347929f74c8b70299b632223c5535bab298f265",
      "nodefusion/model/exec.py": "148e68fa1c7054716e4fcb3e7bddb7c0d384ab6a6bfcb00bd15f7a869f6d86ec",
      "nodefusion/model/kinds.py": "0432ef9f134654bc36554ec55afcb9f91c593110cdacf0a58d0ac4d1d05ac569",
      "nodefusion/model/layout.py": "cd2639282b0c4fac684d06309e11e95922213d3d32698f275e65dd060f677fd6",
      "nodefusion/model/manifest.py": "d592aaac9ae308760cda947327c0d7c0e964a26d517740ed66838747e2334a22",
      "nodefusion/model/plan.py": "374fbb225a6717c2c391ac8bdda54aa957638821a45b2865b40a7be9bcc808c6",
      "nodefusion/model/probe.py": "30546d56bbd47ef12567826b49dd910de07e2af8fffc5c4350e04a57f70da5b8",
      "nodefusion/model/readers/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
      "nodefusion/model/readers/containers.py": "6eec01bd4f30858e1eda2ee7de890a9d93f94eda25e02d0a1bdf3558d31a1610",
      "nodefusion/model/readers/pointers.py": "72f989d643df6bdd477494023aac2da851f2d1f123d5e1e64b7629a0be6eae6b",
      "nodefusion/model/readers/registry.py": "2c35cc0b1f8db857e67c08e9c7976bf47c6ab21faabb4e242d8a0be42f9634ee",
      "nodefusion/model/readers/scalars.py": "a145fe5c4a250cc11fe44d0a4caabae908fbc44994335663955230296f695cbc",
      "nodefusion/model/resolve.py": "0c588760d0ec6494617007b02d786285ba190593935f574f6c53b99ad62ac8c0",
      "nodefusion/model/roles.py": "8d35b0497bd0b2d9abf639d9803fc6b7bd1e1ee5153c0f47ff53a26356dcc8c5",
      "nodefusion/model/rt.py": "3d62e9c6169e89a2593b29ff49919e84a2dda1df1b6fc16d3e54c7cc5d1744af",
      "nodefusion/model/snapshot.py": "e9c4ce76b858a9003e43d9eec363e1b88d4024338c3401b7a47a9871fe5dab7a",
      "nodefusion/model/symbols.py": "05812b00228ba601209ec909213381d47272efdbcac3957914f4590a1d705cfe",
      "nodefusion/model/watchsel.py": "bc3a9d6763950c265efaacce3f0c98194f54808d676b449c5b320b3a90cc7bf1",
      "nodefusion/tests/conftest.py": "2dfa19b096e309beadff0df9a05761d412ec6234e74968854292d7bfecf1b7a5",
      "nodefusion/tests/crosscheck_artifacts.py": "6ee173a31795c3875f93af0a0eaebcb27346c185c24e3f1d32846f5ca89d60a0",
      "nodefusion/tests/fuzz_trace.py": "af6189a6538747d369f982dfb86016f5e48842da0ce73f651b63c0b482b1c37e",
      "nodefusion/tests/kernelelf.py": "9a35d1389243849c6ed16f801a007568eb1304eee3d2cf3bcb8d1e38e12e2aed",
      "nodefusion/tests/stress_pagetable.py": "5db6d3671739ad5d0a3f76908049126185ea000726d0044d4d87ef215f26f737",
      "nodefusion/tests/test_absent_declaration.py": "535d4ace194fc5f923ba989e18634b55cffd0660eaefdfc7a59dcb4377eac266",
      "nodefusion/tests/test_analysis_lookup_cache.py": "aa4fbc0b8f06c64278bc5b11edf21cfe3ec737e3f0d88901b52478aca29765f3",
      "nodefusion/tests/test_analyze_alias.py": "345f6cbd8fae2a7c7729130460112a08a23599461234865f2da72055c3621064",
      "nodefusion/tests/test_arg_names.py": "a0f4cd7c7017da1926fc317d6c73bcb6bd4bacde579e3818fa277079991a4af4",
      "nodefusion/tests/test_artifact_guard.py": "8b53fababf688ceaf4afd1556d3c1352d3a13c60ea43fe14e3d3eae24698d1d0",
      "nodefusion/tests/test_artifact_output_safety.py": "cbed1bfa5928e7b12edc85b506f8018dd3216f017c43461525daf0a299bea9aa",
      "nodefusion/tests/test_bundle_shape.py": "34d227f2726d1820160288b225243b51fe3583839ff52ee245a814eb1c27f81d",
      "nodefusion/tests/test_cache_hit_contract.py": "087277fe75bf38d8e83453b3671da4825f7586382fc1fa5300b3dc79272fbee7",
      "nodefusion/tests/test_calibration_failure_reason.py": "02449f59da919dc09781a66ad57789a98775b3888d1480f4f3064b4d8a1139da",
      "nodefusion/tests/test_callstack.py": "f81c2f42b453d26287f1cbab835cff47a2722d8c62b486529fbbcfc20c94c872",
      "nodefusion/tests/test_capability_notes.py": "a2fb61afdc826c0c5408ea3b385761f896b27191e54881c3e10b10a2f01cc272",
      "nodefusion/tests/test_compact_capability_ui.py": "07542f2beb95353f3dd3861ca3ffcec93d1f46c966c3dd74c82d27fc3b6427ad",
      "nodefusion/tests/test_consolidate_artifacts.py": "5ffa4d01f5adb051f2153c3097d2264dfa7c63533f4cf6c09159fc50cd843cdd",
      "nodefusion/tests/test_context_switch_snapshot.py": "db5c77b5ab4ad93d34a96266386dbeec80694db7482bfa5856c1547f773ccb9d",
      "nodefusion/tests/test_corpus_selection.py": "1717ce9682ecde7a05675b790914a8e5a590e1d83556944ddbfff1e38918d050",
      "nodefusion/tests/test_coverage_evidence.py": "fdbb041e7339f8d94a52a1833b01e315657a749e9bc7d21fee6a2724f23a86f3",
      "nodefusion/tests/test_demangle_v0.py": "9f91c7ab6d2f681368c63d2bde9109cb4dd501f4d5df3e1f728a7b8975a0b061",
      "nodefusion/tests/test_dwarf_generic_base.py": "f9204c883a298151406288885c32c04fd1e7db423fe6cb0747f0f4392ba0fef5",
      "nodefusion/tests/test_dwarf_tombstones.py": "ed608be359e8180a5355cafe93e64d417543cc014461710f55fcd5997bef7295",
      "nodefusion/tests/test_dwarfsrc_location.py": "bcd7c6e8cf00a086fd9c712ffa35aebfbb4e09aaf20ddaedc4f2f5b41604cad9",
      "nodefusion/tests/test_elf_archive.py": "573747576adf2bf4daf66d5f99b6a149eff663ebcd6743b79b4b39d57d20dda5",
      "nodefusion/tests/test_elfid.py": "3efd46b3688e79f7ccc376abb32f20b495b7c074dbd84c5181d67fade3db729c",
      "nodefusion/tests/test_event_kind_pairs_measured_from_runs.py": "ef1a4ce55dc22b8f1073f3d4ac9120b30c68cf0877ba6e4dc5788f81217cdf55",
      "nodefusion/tests/test_event_kind_registry.py": "276bb984ee002622d0284558df13234328a3779853c5b1681d71d827069bfd9d",
      "nodefusion/tests/test_event_kinds.py": "7d066f949905b4df866f0ebfa3ead6cc3b78c7d8416d8b0a5660332dd2f6ef47",
      "nodefusion/tests/test_event_snapshot_throttle.py": "2709d806da483ef8bcdb57ddb6c59a73da83a859b793d7cd5d15891ccfcedd87",
      "nodefusion/tests/test_event_when_branches.py": "0b866c908cbc40deca18830293d161eb9b1f3401792d3fed1b1041e7e9b5e2de",
      "nodefusion/tests/test_exec_iter_map.py": "026e1e908df1884c4d241902c845dd72a43c095e5ab28e94fb7069f621698562",
      "nodefusion/tests/test_exec_walk.py": "67fc662f5b36cff81c1c1ab6a1dfe842081a05a1c3f69a64e8d212da0b7cb985",
      "nodefusion/tests/test_func_events_scope.py": "de9f69b6673c312537ce72cfd6c91baa4355749558609ca0b696c21d8f790198",
      "nodefusion/tests/test_kernel_elf_fixture.py": "ada3976b4b49734884bdb9b3844886e92251240671fe8ae219ed1f70c32c935b",
      "nodefusion/tests/test_kernel_image_fit.py": "32c7bd1bf3b66c7071b36582ca32838af2777157f1ae999a46785e6a39675476",
      "nodefusion/tests/test_kernel_integrations.py": "8e3ecdcf6ad5ea3b7fa44a3e3244a2c9678255b62c02d8cd48de9cfc1189b376",
      "nodefusion/tests/test_kernel_view.py": "4cc544296573cab8df9858947e6d7040fb22aba4b29aac1b43a565b39d9e7ab5",
      "nodefusion/tests/test_kind_three_states.py": "64764f687af895b3b37bc69179f2729f49efe2fb5fc5a24ecc09c41ea38e70ed",
      "nodefusion/tests/test_layout_routing.py": "14631aae85b75dcb1c1c5cec92c344f1c01433e2ae6eb90a3c105ac583372a5c",
      "nodefusion/tests/test_list_arceos.py": "22dbff8051cf7076ad5be6f919ed6d9a0c7a70bd1b6e09ca2f6589b5fb94493f",
      "nodefusion/tests/test_list_wiring.py": "e5f187b746738a5ca027936468df8ab7d2e48e32fe550eca3fa57f217c60d5cb",
      "nodefusion/tests/test_manifest_docs.py": "9be0200ca41d0f0512519356c81911cbbaf2aca63530d99e2aba53de9a1eea37",
      "nodefusion/tests/test_manifest_lint.py": "ad03a1e3519feb79fbeacdbe6576f90b05e7c6c9cb3034c44bd1032163b69888",
      "nodefusion/tests/test_manifest_roles.py": "b1a8fca196f9b37b614f3cd39abe33ad64c58894d1c933996d553c8f573d147e",
      "nodefusion/tests/test_manifest_vocabulary.py": "834eb61d446df47b1c6ebcd4e8a7347eabc24486da052b4be8f5b0660b0f631d",
      "nodefusion/tests/test_metric_deps_are_kinds_not_xv6_names.py": "07f411bb3fcbb14c2eb6c222f4a4928426a86a45d82f11cb242130c49eb6c717",
      "nodefusion/tests/test_no_build.py": "f831e3504531cdd9f8f588428e7a7e86fa420bdee27cbf74522fac05bb27d6fa",
      "nodefusion/tests/test_pagetable_arch.py": "9946ed7788d72107d6c6ea81fa4204843e1a0ae291add95259f3e96a0f661eb2",
      "nodefusion/tests/test_path_index_gate.py": "8486e4f1d0d8f91800321a7907ae6797a59d6576cae0614c8db6f91c8ecee9ae",
      "nodefusion/tests/test_percpu_layout.py": "4ecfcf97552e678173bca5fe81eb661bc7f417ba2f4ea4de3c540ba956152495",
      "nodefusion/tests/test_percpu_runtime_layout.py": "ba54784385c6a6716eb3f3317635c8b2dd09b40e5e3e5e6112ca5b92d4e7c62c",
      "nodefusion/tests/test_phys_alloc_gate.py": "a1b68458d8268d052082ad92b80f86753c46423eec7c86c3bdd6019e23b8186a",
      "nodefusion/tests/test_plan_iter_map.py": "58fcacc67e31cf6638ce4d846dccf32312ae17caed1d9470d0ba468fd95a4b5a",
      "nodefusion/tests/test_plan_percpu.py": "5ece34163ede167484cc5edd5d3255d8514935af7a385b171b1b64c6e928140e",
      "nodefusion/tests/test_plan_steps.py": "0241755b6c85983779fad700e2eba5332ab595cc64e6297e8358ba4d15f9dfb7",
      "nodefusion/tests/test_procs_gate.py": "8acd3d3e2398fcd008dd4f5bae735183008eb4cecf6f4c09d0fffaefdf50cd8d",
      "nodefusion/tests/test_procview.py": "9f48157ccc96833a83a42f2f3c3eb26a82bd7f6918c0c3c91a6052c5d9657428",
      "nodefusion/tests/test_profile_from_manifest.py": "9f7cf3aa6cb931445e9e6c763bf2c30b1505e4b728f759514033994b5b60b16c",
      "nodefusion/tests/test_rcore_fs_vocabulary.py": "48c49c9f091d4c964715cf55216b8354ea59697a0ef58ec18850f5e8e89f80c5",
      "nodefusion/tests/test_rcore_inlined_halves.py": "fd61e489c857fcaa5cdbe2466e74b1ba6a547eb7b18fd12fbda80ce927c6f516",
      "nodefusion/tests/test_readers_containers.py": "b0f882dd388f9bc3796b8f5d8c29d72c7dd6b5d8b7866055f810a7bbb2295d2f",
      "nodefusion/tests/test_readers_pointers.py": "e15d27e41ca320d960720f6760ffd0ff6216f658c74ab373148dc3307fa24fd8",
      "nodefusion/tests/test_readers_registry.py": "b139bcca13c15f203e73a427d9d6dc5804b97fc76a28d14025325f191cc4a6a5",
      "nodefusion/tests/test_readers_scalars.py": "3a15bf0648767fb8e7d24044aeb61eb312ace64ab51f834e0a2dfe39072b9cd5",
      "nodefusion/tests/test_record_icount.py": "b84db1f0c55683e9ccf8eaafdcef09dd37bb67a5fa555814d4d750ff97f844df",
      "nodefusion/tests/test_recording_tail.py": "833b8e33c6d111b49790beea1ba7ab81b23bd7ea907a2155f981967bcb61a614",
      "nodefusion/tests/test_regenerate_artifact.py": "4b2046cdcc98219c4181ca174f4ca02b6e3b5cfbfdd7bb6506c85112007e21f3",
      "nodefusion/tests/test_resolve.py": "b14f432eb380c5514b73431978b01b0d715ed9a49f92deb547358fb35dd4d8ec",
      "nodefusion/tests/test_resources.py": "0860476f362a770bd04355592a83fdb15aa9df3787c6c740d407cb8ee4fc817e",
      "nodefusion/tests/test_sampled_counts_are_not_exact.py": "7bd598eb07ef0b067cee3460ef0c61d18b8b918ae697d80b01617cf73eaf0a9a",
      "nodefusion/tests/test_shell_verdict.py": "22baff1ad7cb43b5c5574b424812c40b194e30e3800921429659f7b31cbe20f4",
      "nodefusion/tests/test_snapshot.py": "17ef07a10857516f2fd29186157b945ff67490d2cdac94166cf370e96171e034",
      "nodefusion/tests/test_source_combine.py": "506ebb5c6dda153e92b854887fb671cf4aa08d33fd8305b359139a1d38ee4349",
      "nodefusion/tests/test_spec_nftrace_registry.py": "c529a4ed1f86bee4951e4699b09d466d51a5bd0623accc49bff9abcfdf15e615",
      "nodefusion/tests/test_split_rawvec.py": "e80f55fc42e246f3f638979500c7c40548eb0f630c512a93b8eaa00df312eac4",
      "nodefusion/tests/test_switch_attribution.py": "c773376888e9dc2ce87ddbebc14ccb0649ea77da189319692e20aff16eddb73d",
      "nodefusion/tests/test_symbols_static_wrapper.py": "cf634a6545564e8949b9129cee0c5f01f3dcf60effd49883c3b908aa28af7f82",
      "nodefusion/tests/test_trace_complete.py": "ac33d1da9aba97c98c68502188522a253709e96cf3fbb8d3c94b85c661cea366",
      "nodefusion/tests/test_trace_streaming.py": "6c972f95a790afac5b9aa84320038bf0eab41b926126334db7290d095f2b1e10",
      "nodefusion/tests/test_units.py": "c5b167cca227c5620b958329f5461232bc73e22997e5fe58a02859bb3664feef",
      "nodefusion/tests/test_unobservable_does_not_speak_for_the_kernel.py": "448c03147a2306d8205762bdc9a9e0d9e8d5eb0e0c5199d17d80c2f076f87547",
      "nodefusion/tests/test_video_sections.py": "c84c17b471460ae45a25341a8f893768816f57a9eb94e9f9a90e7e20406c4a31",
      "nodefusion/tests/test_watchlist_wire.py": "1e01dd4fde92169c0ab1296dbd249865cddde4173ec8de3c71c39f61356f74c3",
      "nodefusion/tests/test_watchsel.py": "89c8bb635534d079e0502d1c118f32eaa806250d74195a9d99bb71d07aabcd2d",
      "nodefusion/tools/crosscheck_decoder.py": "2f69a3f636d910f93f24939bcd03b41d9b0a17184ce4a4b15250e00f65b47a28",
      "nodefusion/tools/crosscheck_dwarf.py": "b30ecfa371c6959b2522db6d9edabf7e0c7be238feef34ff9411d76a4b4fdf01",
      "nodefusion/tools/crosscheck_layout.py": "d77ebd7aaa1ace070392eca0051f1b34dbf65d08c355edf87101b7e449aa7106",
      "nodefusion/tools/crosscheck_offsetof.py": "732e30d19129e0a1f15e33a2c1f96d940abaa1a26829b8f0d7bc44bf873cdc87",
      "nodefusion/tools/crosscheck_procinfo.py": "c3d6dd588b28d9252ddb712dea0ab8d3212dffed7f9256b9b936860fa0dfb8a9",
      "nodefusion/tools/crosscheck_procs.py": "b497c8fd050c0d6d1e4154eda00c1eef05502d3826546b1165b8a740c6fee562",
      "nodefusion/tools/crosscheck_resources.py": "98b04ac869e3c9e38020728473d480b8ed0b15385bc1d530e466919807ad1ac3",
      "nodefusion/tools/crosscheck_watchsel.py": "52142d49e919f2f040371b404cabdef0d0edbbf977abdcb1af5063b910d0aad8",
      "nodefusion/tools/survey_chapters.py": "6952dbdb8036916acd17bd5f642ea0b62aa10cbbec2bb4227e58f5132683589b",
      "scripts/benchmark_trace.py": "0faf86ba735bc31a20ee8e7ae3d3aad8aef78f0f43cdd33e831658f4e2a71494",
      "scripts/consolidate_artifacts.py": "31700c7f0a1f21fef653e061115b0091aa1a4ce539b9baa9cb48ad914889dadd",
      "scripts/finalize_artifacts.py": "a10224f43e0554eeb347a201dfd29781fbe0a39b979f890cccbec65e76cea9eb",
      "scripts/regenerate_artifact.py": "aed10d1eedc5689b6fd68e84a9bb8ae0c98f7bb8456fd8bd280e8bae470b8e9a"
    },
    "command": [
      "/home/joseph/nf/venv313/bin/python",
      "-m",
      "scripts.regenerate_artifact",
      "--run",
      "/home/joseph/nf/education-2026A-20260927/runs/ucore-2026A-ch5-observed",
      "--out",
      "/home/joseph/nf/education-2026A-20260927/runs/ucore-2026A-ch5-observed/ucore-2026A-ch5-observed.html",
      "--replace",
      "--strict"
    ],
    "cwd": "/home/joseph/nf/education-2026A-20260927/tool",
    "driver_sha256": "a86cb6178b65789bdf03d54eb85d5b61e084b592b80a02030cf7aa372e539ca3",
    "source_archive": {
      "path": "/home/joseph/nf/education-2026A-20260927/ucore-2026A-ch5-observed-attribution-analysis-source.tar.gz",
      "sha256": "2e74cdf380a5eba0214e63db09ae9bb6454e9f30bd86d1f651728b28cd5392d4",
      "bytes": 629586
    },
    "previous_analysis_path": "/home/joseph/nf/education-2026A-20260927/runs/ucore-2026A-ch5-observed/analysis-before-attribution",
    "previous_html_sha256": "a0e7759bf0339f955c6446705838ce412d76b3d82b598c9ec3e3f5baa36b3dac",
    "source_sha256": {
      "trace.nfb": "3cd86a56a40339abb540a0e46077330ea74a3d05878ee4cdf60d53fb9b9a17ec",
      "manifest.json": "419bb90cf8da8207b1345c5544cba998c97f00a460b26986a8e3fc7984d910fe",
      "watchlist.json": "0f829ecf540d4034f7f5b9831b30f56fd39cd7bd40617234e7723547eab56ab0",
      "kernel_layout.json": "d552bdafec8672b36058e7bcda9ab19a1e0c741d26f592cfc5cef255de2eb4da"
    },
    "event_selection": {
      "applied": true,
      "policy": "kind-preserving/systematic-v5",
      "raw": 7544245,
      "retained": 150000,
      "dropped": 7394245,
      "target_limit": 150000,
      "minimum_spare": 25000,
      "always_keep": "all events of kinds whose count fits their per-kind budget",
      "priority_raw": 2218003,
      "spare_raw": 5326242,
      "semantic_budget": 125000,
      "minimum_per_kind": 64,
      "semantic_kind_budgets": {
        "firmware.trap": 19,
        "interrupt.clock": 79,
        "interrupt.timer": 78,
        "kernel.shutdown": 1,
        "pagetable.map": 1872,
        "phys.alloc": 94,
        "phys.free": 91,
        "proc.alloc": 61,
        "proc.exec": 17,
        "proc.exit": 61,
        "proc.fork": 60,
        "proc.free": 61,
        "proc.initproc": 1,
        "proc.wait": 64,
        "sbi.call": 316,
        "sched.enter": 1,
        "sched.switch": 28550,
        "sched.yield": 7181,
        "sched.yield_to_scheduler": 14306,
        "syscall.dispatch": 14284,
        "syscall.enter": 14284,
        "syscall.exec": 17,
        "syscall.fork": 60,
        "syscall.waitpid": 64,
        "syscall.write": 70,
        "trap.init": 1,
        "trap.userret": 14303,
        "trap.usertrap": 14303,
        "vm.copy": 60,
        "vm.copyout": 7162,
        "vm.free": 61,
        "vm.from_elf": 18,
        "vm.init": 1,
        "vm.kernel_init": 1,
        "vm.map": 81,
        "vm.translate_buffer": 7175,
        "vm.translate_str": 71,
        "vm.unmap": 71
      },
      "diagnostic_kind_budgets": {
        "func.add_task": 1188,
        "func.allocpid": 61,
        "func.clean_bss": 1,
        "func.console_putchar": 82,
        "func.consputc": 66,
        "func.curr_proc": 6247,
        "func.dummy": 7937,
        "func.fetch_task": 1188,
        "func.freepagetable": 61,
        "func.freerange": 1,
        "func.freewalk": 65,
        "func.get_cycle": 625,
        "func.get_id_by_name": 18,
        "func.init_queue": 1,
        "func.kinit": 1,
        "func.kvmmap": 3,
        "func.load_init_app": 1,
        "func.loader": 18,
        "func.loader_init": 1,
        "func.main": 1,
        "func.memmove": 625,
        "func.memset": 207,
        "func.nftrace_allocator_state": 1,
        "func.nftrace_page_alloc": 67,
        "func.nftrace_page_free": 66,
        "func.nftrace_proc_fork": 60,
        "func.nftrace_sched_switch": 2313,
        "func.pop_queue": 1189,
        "func.printf": 21,
        "func.printint": 7,
        "func.push_queue": 1189,
        "func.set_next_timer": 65,
        "func.strlen": 16,
        "func.strncmp": 64,
        "func.strncpy": 16,
        "func.sys_getpid": 2,
        "func.sys_getppid": 2,
        "func.sys_gettimeofday": 624,
        "func.threadid": 2,
        "func.timer_init": 1,
        "func.useraddr": 64,
        "func.uvmcreate": 61,
        "func.walk": 772
      },
      "minimum_per_diagnostic_kind": 64,
      "semantic_retained": 125000,
      "spare_budget": 25000,
      "stride": null,
      "retained_kinds": {
        "firmware.trap": 19,
        "func.add_task": 1188,
        "func.allocpid": 61,
        "func.clean_bss": 1,
        "func.console_putchar": 82,
        "func.consputc": 66,
        "func.curr_proc": 6247,
        "func.dummy": 7937,
        "func.fetch_task": 1188,
        "func.freepagetable": 61,
        "func.freerange": 1,
        "func.freewalk": 65,
        "func.get_cycle": 625,
        "func.get_id_by_name": 18,
        "func.init_queue": 1,
        "func.kinit": 1,
        "func.kvmmap": 3,
        "func.load_init_app": 1,
        "func.loader": 18,
        "func.loader_init": 1,
        "func.main": 1,
        "func.memmove": 625,
        "func.memset": 207,
        "func.nftrace_allocator_state": 1,
        "func.nftrace_page_alloc": 67,
        "func.nftrace_page_free": 66,
        "func.nftrace_proc_fork": 60,
        "func.nftrace_sched_switch": 2313,
        "func.pop_queue": 1189,
        "func.printf": 21,
        "func.printint": 7,
        "func.push_queue": 1189,
        "func.set_next_timer": 65,
        "func.strlen": 16,
        "func.strncmp": 64,
        "func.strncpy": 16,
        "func.sys_getpid": 2,
        "func.sys_getppid": 2,
        "func.sys_gettimeofday": 624,
        "func.threadid": 2,
        "func.timer_init": 1,
        "func.useraddr": 64,
        "func.uvmcreate": 61,
        "func.walk": 772,
        "interrupt.clock": 79,
        "interrupt.timer": 78,
        "kernel.shutdown": 1,
        "pagetable.map": 1872,
        "phys.alloc": 94,
        "phys.free": 91,
        "proc.alloc": 61,
        "proc.exec": 17,
        "proc.exit": 61,
        "proc.fork": 60,
        "proc.free": 61,
        "proc.initproc": 1,
        "proc.wait": 64,
        "sbi.call": 316,
        "sched.enter": 1,
        "sched.switch": 28550,
        "sched.yield": 7181,
        "sched.yield_to_scheduler": 14306,
        "syscall.dispatch": 14284,
        "syscall.enter": 14284,
        "syscall.exec": 17,
        "syscall.fork": 60,
        "syscall.waitpid": 64,
        "syscall.write": 70,
        "trap.init": 1,
        "trap.userret": 14303,
        "trap.usertrap": 14303,
        "vm.copy": 60,
        "vm.copyout": 7162,
        "vm.free": 61,
        "vm.from_elf": 18,
        "vm.init": 1,
        "vm.kernel_init": 1,
        "vm.map": 81,
        "vm.translate_buffer": 7175,
        "vm.translate_str": 71,
        "vm.unmap": 71
      },
      "dropped_kinds": {
        "func.add_task": 255149,
        "func.console_putchar": 4198,
        "func.consputc": 303,
        "func.curr_proc": 1402889,
        "func.dummy": 1786301,
        "func.fetch_task": 255150,
        "func.freewalk": 240,
        "func.get_cycle": 127159,
        "func.memmove": 127375,
        "func.memset": 32643,
        "func.nftrace_page_alloc": 539,
        "func.nftrace_page_free": 473,
        "func.nftrace_sched_switch": 510361,
        "func.pop_queue": 255149,
        "func.push_queue": 255148,
        "func.set_next_timer": 262,
        "func.strncmp": 56,
        "func.sys_gettimeofday": 127160,
        "func.useraddr": 1,
        "func.walk": 160686,
        "interrupt.clock": 248,
        "interrupt.timer": 248,
        "pagetable.map": 30741,
        "phys.alloc": 512,
        "phys.free": 448,
        "proc.wait": 1,
        "sbi.call": 4292,
        "sched.switch": 484124,
        "sched.yield": 120946,
        "sched.yield_to_scheduler": 242031,
        "syscall.dispatch": 241675,
        "syscall.enter": 241675,
        "syscall.waitpid": 1,
        "syscall.write": 97,
        "trap.userret": 241982,
        "trap.usertrap": 241982,
        "vm.copyout": 120622,
        "vm.map": 278,
        "vm.translate_buffer": 120858,
        "vm.translate_str": 113,
        "vm.unmap": 129
      }
    },
    "function_entries": {
      "raw": 6769454,
      "retained": 106508
    },
    "function_returns": {
      "raw": 7754682,
      "matched": 5230498,
      "nested_entries": 5132662
    },
    "pid_attribution": {
      "firmware.trap": {
        "events": 19,
        "with_pid": 0
      },
      "func.main": {
        "events": 1,
        "with_pid": 0
      },
      "func.clean_bss": {
        "events": 1,
        "with_pid": 0
      },
      "func.memset": {
        "events": 207,
        "with_pid": 10
      },
      "func.printf": {
        "events": 21,
        "with_pid": 0
      },
      "func.consputc": {
        "events": 66,
        "with_pid": 0
      },
      "func.console_putchar": {
        "events": 82,
        "with_pid": 74
      },
      "sbi.call": {
        "events": 316,
        "with_pid": 290
      },
      "proc.initproc": {
        "events": 1,
        "with_pid": 0
      },
      "func.init_queue": {
        "events": 1,
        "with_pid": 0
      },
      "func.kinit": {
        "events": 1,
        "with_pid": 0
      },
      "func.freerange": {
        "events": 1,
        "with_pid": 0
      },
      "func.nftrace_allocator_state": {
        "events": 1,
        "with_pid": 0
      },
      "vm.kernel_init": {
        "events": 1,
        "with_pid": 0
      },
      "vm.init": {
        "events": 1,
        "with_pid": 0
      },
      "func.nftrace_page_alloc": {
        "events": 67,
        "with_pid": 58
      },
      "phys.alloc": {
        "events": 94,
        "with_pid": 82
      },
      "func.kvmmap": {
        "events": 3,
        "with_pid": 0
      },
      "vm.map": {
        "events": 81,
        "with_pid": 79
      },
      "func.walk": {
        "events": 772,
        "with_pid": 617
      },
      "pagetable.map": {
        "events": 1872,
        "with_pid": 21
      },
      "func.threadid": {
        "events": 2,
        "with_pid": 0
      },
      "func.printint": {
        "events": 7,
        "with_pid": 0
      },
      "func.loader_init": {
        "events": 1,
        "with_pid": 0
      },
      "func.strlen": {
        "events": 16,
        "with_pid": 0
      },
      "func.strncpy": {
        "events": 16,
        "with_pid": 0
      },
      "trap.init": {
        "events": 1,
        "with_pid": 0
      },
      "func.timer_init": {
        "events": 1,
        "with_pid": 0
      },
      "func.set_next_timer": {
        "events": 65,
        "with_pid": 64
      },
      "interrupt.clock": {
        "events": 79,
        "with_pid": 78
      },
      "func.load_init_app": {
        "events": 1,
        "with_pid": 0
      },
      "func.get_id_by_name": {
        "events": 18,
        "with_pid": 17
      },
      "func.strncmp": {
        "events": 64,
        "with_pid": 56
      },
      "proc.alloc": {
        "events": 61,
        "with_pid": 60
      },
      "func.allocpid": {
        "events": 61,
        "with_pid": 60
      },
      "func.uvmcreate": {
        "events": 61,
        "with_pid": 60
      },
      "func.dummy": {
        "events": 7937,
        "with_pid": 5667
      },
      "func.loader": {
        "events": 18,
        "with_pid": 17
      },
      "vm.from_elf": {
        "events": 18,
        "with_pid": 17
      },
      "func.memmove": {
        "events": 625,
        "with_pid": 624
      },
      "func.add_task": {
        "events": 1188,
        "with_pid": 1187
      },
      "func.push_queue": {
        "events": 1189,
        "with_pid": 1188
      },
      "sched.enter": {
        "events": 1,
        "with_pid": 0
      },
      "func.fetch_task": {
        "events": 1188,
        "with_pid": 0
      },
      "func.pop_queue": {
        "events": 1189,
        "with_pid": 0
      },
      "func.nftrace_sched_switch": {
        "events": 2313,
        "with_pid": 1156
      },
      "sched.switch": {
        "events": 28550,
        "with_pid": 14283
      },
      "trap.userret": {
        "events": 14303,
        "with_pid": 14303
      },
      "func.curr_proc": {
        "events": 6247,
        "with_pid": 6247
      },
      "syscall.enter": {
        "events": 14284,
        "with_pid": 14284
      },
      "trap.usertrap": {
        "events": 14303,
        "with_pid": 14303
      },
      "syscall.dispatch": {
        "events": 14284,
        "with_pid": 14284
      },
      "syscall.write": {
        "events": 70,
        "with_pid": 70
      },
      "vm.translate_str": {
        "events": 71,
        "with_pid": 71
      },
      "vm.translate_buffer": {
        "events": 7175,
        "with_pid": 7175
      },
      "syscall.fork": {
        "events": 60,
        "with_pid": 60
      },
      "vm.copy": {
        "events": 60,
        "with_pid": 60
      },
      "func.nftrace_proc_fork": {
        "events": 60,
        "with_pid": 60
      },
      "proc.fork": {
        "events": 60,
        "with_pid": 60
      },
      "syscall.waitpid": {
        "events": 64,
        "with_pid": 64
      },
      "func.useraddr": {
        "events": 64,
        "with_pid": 64
      },
      "proc.wait": {
        "events": 64,
        "with_pid": 64
      },
      "sched.yield_to_scheduler": {
        "events": 14306,
        "with_pid": 14306
      },
      "syscall.exec": {
        "events": 17,
        "with_pid": 17
      },
      "proc.exec": {
        "events": 17,
        "with_pid": 17
      },
      "vm.unmap": {
        "events": 71,
        "with_pid": 71
      },
      "func.nftrace_page_free": {
        "events": 66,
        "with_pid": 66
      },
      "phys.free": {
        "events": 91,
        "with_pid": 91
      },
      "proc.exit": {
        "events": 61,
        "with_pid": 61
      },
      "proc.free": {
        "events": 61,
        "with_pid": 61
      },
      "func.freepagetable": {
        "events": 61,
        "with_pid": 61
      },
      "vm.free": {
        "events": 61,
        "with_pid": 61
      },
      "func.freewalk": {
        "events": 65,
        "with_pid": 65
      },
      "interrupt.timer": {
        "events": 78,
        "with_pid": 78
      },
      "sched.yield": {
        "events": 7181,
        "with_pid": 7181
      },
      "func.sys_gettimeofday": {
        "events": 624,
        "with_pid": 624
      },
      "func.get_cycle": {
        "events": 625,
        "with_pid": 625
      },
      "vm.copyout": {
        "events": 7162,
        "with_pid": 7162
      },
      "func.sys_getpid": {
        "events": 2,
        "with_pid": 2
      },
      "func.sys_getppid": {
        "events": 2,
        "with_pid": 2
      },
      "kernel.shutdown": {
        "events": 1,
        "with_pid": 0
      }
    }
  },
  "workload": {
    "mode": "basic-tests",
    "user_programs": {
      "ch2b_exit": "aa7aaa87e951156e8d8aada225a8e26ec4da4a84a3be3f6f575d71bc2725b3de",
      "ch2b_hello_world": "c1d34a4a957c1ddf6258fb25560925427b7d896a35fe3ed555a3d118245d55c1",
      "ch2b_power": "b3f1254b033a960e3e042f5e46e1307221734e61059472b9d7d172f72a83e842",
      "ch3b_sleep": "e0dbdf0b7809a16d4d569ae703f69ce9b74efb1e613062fbfab8e3048c856c37",
      "ch3b_sleep1": "ba4571e02bbd2016baaaeca35ba9fc7241da7a4f403cdb57b66ae3ddc7a6e968",
      "ch3b_yield0": "c1e2013e3ed101e4808c924b764ba58f8805e8301c4be9aa72dde598c0f2417c",
      "ch3b_yield1": "7342d736f1ea41c9c430c44bf0f28a1e286400e884d407566e78b98259b6df2e",
      "ch3b_yield2": "3885b238952fb44bec95218c587ed4230b214ae6521579499edad4c12e609662",
      "ch5b_exec_simple": "de491567279bf75d9c3d25030cf244ae9055938d960e3e23af584deda99103ab",
      "ch5b_exit": "769853c03108507318e5b8c15fa2786f5c3e76db3ef529a965c11b006d0066ed",
      "ch5b_forktest0": "dc2feab1411f7017ef8ed6819edd50450b16e69df8a9ef89e71884a6f3fb73a1",
      "ch5b_forktest1": "bdf574d97384b3adb7302d25a34e5dc55eb9e380b96d7ae50f43cde0797ebe24",
      "ch5b_forktest2": "8b7e7656b699cfd8cd10586e05605e907bfd253eb9ca38b6d7ff6c6c2da2911f",
      "ch5b_getpid": "78a9a884f2e2d14d7a4ba236c60cc25d305cbff5447c4c9627feac1778cbbeec",
      "ch5b_usertest": "ae3194bf497853e00fa60636af7f2115832b5268234381eeb8caeee1d3bc4619",
      "usershell": "5b21c877186b45b6c231bcfb0132f387e5ecc9a10a853cb06702a60d84746bc1"
    },
    "loaded_user_elfs": {},
    "embedded_user_apps": {
      "ch2b_exit": {
        "sha256": "aa7aaa87e951156e8d8aada225a8e26ec4da4a84a3be3f6f575d71bc2725b3de",
        "bytes": 6721,
        "start": 2149605376,
        "end": 2149613568,
        "linker_padding_bytes": 1471
      },
      "ch2b_hello_world": {
        "sha256": "c1d34a4a957c1ddf6258fb25560925427b7d896a35fe3ed555a3d118245d55c1",
        "bytes": 6785,
        "start": 2149613568,
        "end": 2149621760,
        "linker_padding_bytes": 1407
      },
      "ch2b_power": {
        "sha256": "b3f1254b033a960e3e042f5e46e1307221734e61059472b9d7d172f72a83e842",
        "bytes": 6905,
        "start": 2149621760,
        "end": 2149629952,
        "linker_padding_bytes": 1287
      },
      "ch3b_sleep": {
        "sha256": "e0dbdf0b7809a16d4d569ae703f69ce9b74efb1e613062fbfab8e3048c856c37",
        "bytes": 7001,
        "start": 2149629952,
        "end": 2149638144,
        "linker_padding_bytes": 1191
      },
      "ch3b_sleep1": {
        "sha256": "ba4571e02bbd2016baaaeca35ba9fc7241da7a4f403cdb57b66ae3ddc7a6e968",
        "bytes": 6873,
        "start": 2149638144,
        "end": 2149646336,
        "linker_padding_bytes": 1319
      },
      "ch3b_yield0": {
        "sha256": "c1e2013e3ed101e4808c924b764ba58f8805e8301c4be9aa72dde598c0f2417c",
        "bytes": 6841,
        "start": 2149646336,
        "end": 2149654528,
        "linker_padding_bytes": 1351
      },
      "ch3b_yield1": {
        "sha256": "7342d736f1ea41c9c430c44bf0f28a1e286400e884d407566e78b98259b6df2e",
        "bytes": 6841,
        "start": 2149654528,
        "end": 2149662720,
        "linker_padding_bytes": 1351
      },
      "ch3b_yield2": {
        "sha256": "3885b238952fb44bec95218c587ed4230b214ae6521579499edad4c12e609662",
        "bytes": 6841,
        "start": 2149662720,
        "end": 2149670912,
        "linker_padding_bytes": 1351
      },
      "ch5b_exec_simple": {
        "sha256": "de491567279bf75d9c3d25030cf244ae9055938d960e3e23af584deda99103ab",
        "bytes": 6769,
        "start": 2149670912,
        "end": 2149679104,
        "linker_padding_bytes": 1423
      },
      "ch5b_exit": {
        "sha256": "769853c03108507318e5b8c15fa2786f5c3e76db3ef529a965c11b006d0066ed",
        "bytes": 7105,
        "start": 2149679104,
        "end": 2149687296,
        "linker_padding_bytes": 1087
      },
      "ch5b_forktest0": {
        "sha256": "dc2feab1411f7017ef8ed6819edd50450b16e69df8a9ef89e71884a6f3fb73a1",
        "bytes": 7417,
        "start": 2149687296,
        "end": 2149695488,
        "linker_padding_bytes": 775
      },
      "ch5b_forktest1": {
        "sha256": "bdf574d97384b3adb7302d25a34e5dc55eb9e380b96d7ae50f43cde0797ebe24",
        "bytes": 7153,
        "start": 2149695488,
        "end": 2149703680,
        "linker_padding_bytes": 1039
      },
      "ch5b_forktest2": {
        "sha256": "8b7e7656b699cfd8cd10586e05605e907bfd253eb9ca38b6d7ff6c6c2da2911f",
        "bytes": 7265,
        "start": 2149703680,
        "end": 2149711872,
        "linker_padding_bytes": 927
      },
      "ch5b_getpid": {
        "sha256": "78a9a884f2e2d14d7a4ba236c60cc25d305cbff5447c4c9627feac1778cbbeec",
        "bytes": 7041,
        "start": 2149711872,
        "end": 2149720064,
        "linker_padding_bytes": 1151
      },
      "ch5b_usertest": {
        "sha256": "ae3194bf497853e00fa60636af7f2115832b5268234381eeb8caeee1d3bc4619",
        "bytes": 7881,
        "start": 2149720064,
        "end": 2149728256,
        "linker_padding_bytes": 311
      },
      "usershell": {
        "sha256": "5b21c877186b45b6c231bcfb0132f387e5ecc9a10a853cb06702a60d84746bc1",
        "bytes": 8273,
        "start": 2149728256,
        "end": 2149736529,
        "linker_padding_bytes": 0
      }
    }
  },
  "versions": {
    "riscv64-unknown-elf-gcc": "riscv64-unknown-elf-gcc (Debian 14.2.0-19) 14.2.0",
    "cmake": "cmake version 3.31.6",
    "qemu-system-riscv64": "QEMU emulator version 10.2.2"
  },
  "build_context": {
    "kernel_commit": "386f10c55d0285273b78df19c4607c0f475e17a2",
    "kernel_patch": "diff --git a/Makefile b/Makefile\nindex f869484..9f12a22 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -14,7 +14,7 @@ GDB = $(TOOLPREFIX)gdb\n CP = cp\n BUILDDIR = build\n C_SRCS = $(wildcard $K/*.c)\n-AS_SRCS = $(wildcard $K/*.S)\n+AS_SRCS := $(wildcard $K/*.S)\n C_OBJS = $(addprefix $(BUILDDIR)/, $(addsuffix .o, $(basename $(C_SRCS))))\n AS_OBJS = $(addprefix $(BUILDDIR)/, $(addsuffix .o, $(basename $(AS_SRCS))))\n OBJS = $(C_OBJS) $(AS_OBJS)\ndiff --git a/os/kalloc.c b/os/kalloc.c\nindex 3c7c48b..5bea13e 100644\n--- a/os/kalloc.c\n+++ b/os/kalloc.c\n@@ -1,6 +1,7 @@\n #include \"kalloc.h\"\n #include \"defs.h\"\n #include \"riscv.h\"\n+#include \"nftrace.h\"\n \n extern char ekernel[];\n \n@@ -12,6 +13,10 @@ struct {\n \tstruct linklist *freelist;\n } kmem;\n \n+static uint64 nf_free_pages;\n+static uint64 nf_used_pages;\n+static int nftrace_ready;\n+\n void freerange(void *pa_start, void *pa_end)\n {\n \tchar *p;\n@@ -23,6 +28,8 @@ void freerange(void *pa_start, void *pa_end)\n void kinit()\n {\n \tfreerange(ekernel, (void *)PHYSTOP);\n+\tnftrace_ready = 1;\n+\tnftrace_allocator_state(nf_free_pages, nf_used_pages);\n }\n \n // Free the page of physical memory pointed at by v,\n@@ -40,6 +47,11 @@ void kfree(void *pa)\n \tl = (struct linklist *)pa;\n \tl->next = kmem.freelist;\n \tkmem.freelist = l;\n+\tnf_free_pages++;\n+\tif (nftrace_ready) {\n+\t\tnf_used_pages--;\n+\t\tnftrace_page_free((uint64)pa, nf_free_pages, nf_used_pages);\n+\t}\n }\n \n // Allocate one 4096-byte page of physical memory.\n@@ -51,7 +63,11 @@ void *kalloc()\n \tl = kmem.freelist;\n \tif (l) {\n \t\tkmem.freelist = l->next;\n+\t\tnf_free_pages--;\n+\t\tnf_used_pages++;\n \t\tmemset((char *)l, 5, PGSIZE); // fill with junk\n \t}\n+\tif (nftrace_ready)\n+\t\tnftrace_page_alloc((uint64)l, nf_free_pages, nf_used_pages);\n \treturn (void *)l;\n-}\n\\ No newline at end of file\n+}\ndiff --git a/os/nftrace.c b/os/nftrace.c\nnew file mode 100644\nindex 0000000..8d99129\n--- /dev/null\n+++ b/os/nftrace.c\n@@ -0,0 +1,39 @@\n+#include \"nftrace.h\"\n+\n+__attribute__((noinline))\n+void nftrace_commit_point(const struct nftrace_record *record)\n+{\n+\tif (record != 0)\n+\t\t__asm__ volatile(\"\" : : \"r\"(*(volatile const uint64 *)record) : \"memory\");\n+}\n+\n+static inline void emit(uint64 type, uint64 a0, uint64 a1, uint64 a2, uint64 a3)\n+{\n+\tconst struct nftrace_record record = { type, { a0, a1, a2, a3 } };\n+\tnftrace_commit_point(&record);\n+}\n+\n+void nftrace_page_alloc(uint64 pa, uint64 free_pages, uint64 used_pages)\n+{\n+\temit(1, pa, 1, free_pages, used_pages);\n+}\n+\n+void nftrace_page_free(uint64 pa, uint64 free_pages, uint64 used_pages)\n+{\n+\temit(5, pa, 1, free_pages, used_pages);\n+}\n+\n+void nftrace_allocator_state(uint64 free_pages, uint64 used_pages)\n+{\n+\temit(6, free_pages, used_pages, 0, 0);\n+}\n+\n+void nftrace_proc_fork(uint64 parent, uint64 child)\n+{\n+\temit(2, parent, child, 0, 0);\n+}\n+\n+void nftrace_sched_switch(uint64 from_task, uint64 to_task, uint64 from_pid, uint64 to_pid)\n+{\n+\temit(4, from_task, to_task, from_pid, to_pid);\n+}\ndiff --git a/os/nftrace.h b/os/nftrace.h\nnew file mode 100644\nindex 0000000..e1428ae\n--- /dev/null\n+++ b/os/nftrace.h\n@@ -0,0 +1,18 @@\n+#ifndef NFTRACE_H\n+#define NFTRACE_H\n+\n+#include \"types.h\"\n+\n+struct nftrace_record {\n+\tuint64 type;\n+\tuint64 a[4];\n+};\n+\n+void nftrace_commit_point(const struct nftrace_record *record);\n+void nftrace_page_alloc(uint64 pa, uint64 free_pages, uint64 used_pages);\n+void nftrace_page_free(uint64 pa, uint64 free_pages, uint64 used_pages);\n+void nftrace_allocator_state(uint64 free_pages, uint64 used_pages);\n+void nftrace_proc_fork(uint64 parent, uint64 child);\n+void nftrace_sched_switch(uint64 from_task, uint64 to_task, uint64 from_pid, uint64 to_pid);\n+\n+#endif\ndiff --git a/os/proc.c b/os/proc.c\nindex 9187793..95af12e 100644\n--- a/os/proc.c\n+++ b/os/proc.c\n@@ -4,6 +4,7 @@\n #include \"trap.h\"\n #include \"vm.h\"\n #include \"queue.h\"\n+#include \"nftrace.h\"\n \n struct proc pool[NPROC];\n __attribute__((aligned(16))) char kstack[NPROC][PAGE_SIZE];\n@@ -127,6 +128,7 @@ void scheduler()\n \t\ttracef(\"swtich to proc %d\", p - pool);\n \t\tp->state = RUNNING;\n \t\tcurrent_proc = p;\n+\t\tnftrace_sched_switch((uint64)&idle, (uint64)p, (uint64)-1, p->pid);\n \t\tswtch(&idle.context, &p->context);\n \t}\n }\n@@ -143,6 +145,7 @@ void sched()\n \tstruct proc *p = curr_proc();\n \tif (p->state == RUNNING)\n \t\tpanic(\"sched running\");\n+\tnftrace_sched_switch((uint64)p, (uint64)&idle, p->pid, (uint64)-1);\n \tswtch(&p->context, &idle.context);\n }\n \n@@ -194,6 +197,7 @@ int fork()\n \tnp->parent = p;\n \tnp->state = RUNNABLE;\n \tadd_task(np);\n+\tnftrace_proc_fork(p->pid, np->pid);\n \treturn np->pid;\n }\n \ndiff --git a/os/vm.c b/os/vm.c\nindex b315495..af83760 100644\n--- a/os/vm.c\n+++ b/os/vm.c\n@@ -2,6 +2,12 @@\n #include \"defs.h\"\n #include \"riscv.h\"\n \n+__attribute__((noinline))\n+void nodefusion_pagetable_map(uint64 va, uint64 pa, uint64 flags)\n+{\n+\t__asm__ volatile(\"\" : : \"r\"(va), \"r\"(pa), \"r\"(flags) : \"memory\");\n+}\n+\n pagetable_t kernel_pagetable;\n \n extern char e_text[]; // kernel.ld sets this to end of kernel code.\n@@ -126,6 +132,7 @@ int mappages(pagetable_t pagetable, uint64 va, uint64 size, uint64 pa, int perm)\n \t\t\treturn -1;\n \t\t}\n \t\t*pte = PA2PTE(pa) | perm | PTE_V;\n+\t\tnodefusion_pagetable_map(a, pa, perm | PTE_V);\n \t\tif (a == last)\n \t\t\tbreak;\n \t\ta += PGSIZE;\n@@ -375,4 +382,3 @@ uint64 uvmdealloc(pagetable_t pagetable, uint64 oldsz, uint64 newsz)\n \n         return newsz;\n }\n-\n",
    "kernel_elf_sha256": "0c5a83dd5a1f36dc423518308ac00d31a7466376bd661547ec5f79fb039ddb58",
    "user_commit": "1733f460c596b013b1c509ad42afa428640783b0",
    "user_patch": "diff --git a/CMakeLists.txt b/CMakeLists.txt\nindex f5a9fac..ab1986d 100644\n--- a/CMakeLists.txt\n+++ b/CMakeLists.txt\n@@ -15,12 +15,12 @@ set(ASM_DIR asm)\n set(BIN_DIR bin)\n \n # Toolchain\n-set(PREFIX ${ARCH}-linux-musl-)\n+set(PREFIX ${ARCH}-linux-musl- CACHE STRING \"Cross compiler prefix\")\n \n if (${ARCH} STREQUAL riscv32)\n-    set(CMAKE_C_FLAGS       \"-march=rv32imac -mabi=ilp32 -mcmodel=medany\")\n+    set(CMAKE_C_FLAGS       \"-march=rv32imac_zicsr_zifencei -mabi=ilp32 -mcmodel=medany\")\n elseif (${ARCH} STREQUAL riscv64)\n-    set(CMAKE_C_FLAGS       \"-march=rv64imac -mabi=lp64 -mcmodel=medany\")\n+    set(CMAKE_C_FLAGS       \"-march=rv64imac_zicsr_zifencei -mabi=lp64 -mcmodel=medany\")\n else()\n     message(\"Unsupported arch: ${ARCH}\")\n endif ()\ndiff --git a/Makefile b/Makefile\nindex be632ac..64f1ab6 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -7,15 +7,16 @@ app_dir = src\n elf_dir := build/$(ARCH)\n bin_dir := build/bin\n out_dir := target\n-cmake_build_args := -DARCH=$(ARCH) -DCHAPTER=$(CHAPTER)\n+TOOLPREFIX ?= $(ARCH)-linux-musl-\n+cmake_build_args := -DARCH=$(ARCH) -DCHAPTER=$(CHAPTER) -DPREFIX=$(TOOLPREFIX)\n ifeq ($(MODE), release)\n cmake_build_args += -DCMAKE_BUILD_TYPE=Release\n else ifeq ($(MODE), debug)\n cmake_build_args += -DCMAKE_BUILD_TYPE=Debug\n endif\n \n-OBJCOPY := $(ARCH)-linux-musl-objcopy\n-OBJDUMP := $(ARCH)-linux-musl-objdump\n+OBJCOPY := $(TOOLPREFIX)objcopy\n+OBJDUMP := $(TOOLPREFIX)objdump\n CP := cp\n CH_TESTS :=  \n \ndiff --git a/src/ch6b_exec.c b/src/ch6b_exec.c\nindex 1a1d9c6..b67cf35 100644\n--- a/src/ch6b_exec.c\n+++ b/src/ch6b_exec.c\n@@ -5,7 +5,7 @@\n int main()\n {\n \tchar *_argv[] = {\n-\t\t\"(*o*)\", \"(>.<)\", \"(O.O)\", \"(QwQ)\", \"orz\", \"没有了呀\"\n+\t\t\"(*o*)\", \"(>.<)\", \"(O.O)\", \"(QwQ)\", \"orz\", \"没有了呀\", NULL\n \t};\n \texec(\"ch6b_args\", _argv);\n \treturn 0;\ndiff --git a/src/ch6b_filetest_simple.c b/src/ch6b_filetest_simple.c\nindex 062cecf..a27e982 100644\n--- a/src/ch6b_filetest_simple.c\n+++ b/src/ch6b_filetest_simple.c\n@@ -15,7 +15,9 @@ int main()\n \tfd = open(filea, O_RDONLY);\n \tassert(fd > 0);\n \tchar buf[16];\n-\tread(fd, buf, 16);\n+\tint nread = read(fd, buf, sizeof(buf) - 1);\n+\tassert_eq(nread, strlen(s));\n+\tbuf[nread] = '\\0';\n \tclose(fd);\n \tassert(strcmp(s, buf) == 0);\n \tputs(\"file_test passed!\");\ndiff --git a/src/ch6b_usertest.c b/src/ch6b_usertest.c\nindex cdd9fc8..1cb5f3a 100644\n--- a/src/ch6b_usertest.c\n+++ b/src/ch6b_usertest.c\n@@ -11,7 +11,7 @@ const char *TESTS[] = {\n \t\"ch3b_sleep1\\0\",      \"ch3b_yield0\\0\",\t  \"ch3b_yield1\\0\",\n \t\"ch3b_yield2\\0\",      \"ch5b_getpid\\0\",\t  \"ch5b_forktest0\\0\",\n \t\"ch5b_forktest1\\0\",   \"ch5b_forktest2\\0\", \"ch5b_exit\\0\",\n-\t\"ch6b_filetest\\0\",    \"ch6b_exec\\0\",\n+\t\"ch6b_filetest_simple\\0\",    \"ch6b_exec\\0\",\n };\n \n int main()\ndiff --git a/src/ch7b_usertest.c b/src/ch7b_usertest.c\nindex 1f634d4..8bfc7c8 100644\n--- a/src/ch7b_usertest.c\n+++ b/src/ch7b_usertest.c\n@@ -10,7 +10,7 @@ const char *TESTS[] = {\n \t\"ch3b_sleep1\\0\",      \"ch3b_yield0\\0\",\t  \"ch3b_yield1\\0\",\n \t\"ch3b_yield2\\0\",      \"ch5b_exit\\0\",\t  \"ch5b_getpid\\0\",\n \t\"ch5b_forktest0\\0\",   \"ch5b_forktest1\\0\", \"ch5b_forktest2\\0\",\n-\t\"ch5b_exit\\0\",\t      \"ch6b_filetest\\0\",  \"ch6b_exec\\0\",\n+\t\"ch5b_exit\\0\",\t      \"ch6b_filetest_simple\\0\",  \"ch6b_exec\\0\",\n \t\"ch7b_pipetest\\0\",\n };\n \ndiff --git a/src/ch8b_usertest.c b/src/ch8b_usertest.c\nindex 1cce5ce..f088c38 100644\n--- a/src/ch8b_usertest.c\n+++ b/src/ch8b_usertest.c\n@@ -10,9 +10,9 @@ const char *TESTS[] = {\n \t\"ch3b_sleep1\\0\",        \"ch3b_yield0\\0\",      \"ch3b_yield1\\0\",\n \t\"ch3b_yield2\\0\",        \"ch5b_getpid\\0\",      \"ch5b_forktest0\\0\",\n \t\"ch5b_forktest1\\0\",     \"ch5b_forktest2\\0\",   \"ch5b_exit\\0\",\n-\t\"ch6b_filetest\\0\",      \"ch6b_exec\\0\",        \"ch7b_pipetest\\0\",\n+\t\"ch6b_filetest_simple\\0\",      \"ch6b_exec\\0\",        \"ch7b_pipetest\\0\",\n \t\"ch8b_mpsc_sem\\0\",\n-\t\"ch8b_mut_phi_din.c\",   \"ch8b_mut_race\\0\",    \"ch8b_sync_sem\\0\",\n+\t   \"ch8b_mut_race\\0\",    \"ch8b_sync_sem\\0\",\n \t\"ch8b_test_condvar\\0\",  \"ch8b_threads_arg\\0\", \"ch8b_threads\\0\",      \n \t\"ch8b_spin_mut_race\\0\", \"ch8b_mut_phi_din\\0\",\n };\n",
    "selected_apps": {
      "ch2b_exit": "aa7aaa87e951156e8d8aada225a8e26ec4da4a84a3be3f6f575d71bc2725b3de",
      "ch2b_hello_world": "c1d34a4a957c1ddf6258fb25560925427b7d896a35fe3ed555a3d118245d55c1",
      "ch2b_power": "b3f1254b033a960e3e042f5e46e1307221734e61059472b9d7d172f72a83e842",
      "ch3b_sleep": "e0dbdf0b7809a16d4d569ae703f69ce9b74efb1e613062fbfab8e3048c856c37",
      "ch3b_sleep1": "ba4571e02bbd2016baaaeca35ba9fc7241da7a4f403cdb57b66ae3ddc7a6e968",
      "ch3b_yield0": "c1e2013e3ed101e4808c924b764ba58f8805e8301c4be9aa72dde598c0f2417c",
      "ch3b_yield1": "7342d736f1ea41c9c430c44bf0f28a1e286400e884d407566e78b98259b6df2e",
      "ch3b_yield2": "3885b238952fb44bec95218c587ed4230b214ae6521579499edad4c12e609662",
      "ch5b_exec_simple": "de491567279bf75d9c3d25030cf244ae9055938d960e3e23af584deda99103ab",
      "ch5b_exit": "769853c03108507318e5b8c15fa2786f5c3e76db3ef529a965c11b006d0066ed",
      "ch5b_forktest0": "dc2feab1411f7017ef8ed6819edd50450b16e69df8a9ef89e71884a6f3fb73a1",
      "ch5b_forktest1": "bdf574d97384b3adb7302d25a34e5dc55eb9e380b96d7ae50f43cde0797ebe24",
      "ch5b_forktest2": "8b7e7656b699cfd8cd10586e05605e907bfd253eb9ca38b6d7ff6c6c2da2911f",
      "ch5b_getpid": "78a9a884f2e2d14d7a4ba236c60cc25d305cbff5447c4c9627feac1778cbbeec",
      "ch5b_usertest": "ae3194bf497853e00fa60636af7f2115832b5268234381eeb8caeee1d3bc4619",
      "usershell": "5b21c877186b45b6c231bcfb0132f387e5ecc9a10a853cb06702a60d84746bc1"
    },
    "reference_kernel_elf_sha256": "b8cd601a84b58b6b7b75a57fbfd81034d69b496258e6ac88610108031f261f66",
    "commands": [
      {
        "argv": [
          "/home/joseph/nf/venv313/bin/python",
          "/home/joseph/nf/education-2026A-20260927/build-ch5-observed.py"
        ],
        "cwd": "/home/joseph/nf/education-2026A-20260927",
        "driver_sha256": "1a7cdf7d354a829d6f1c68f68c91937bb02afbfe22352f876d70313d7bfbf94e",
        "first_course_result": {
          "chapter": 5,
          "mode": "positive",
          "test_commit": "1733f460c596b013b1c509ad42afa428640783b0",
          "bios": "default",
          "status": "PASS",
          "kernel_commit": "386f10c55d0285273b78df19c4607c0f475e17a2",
          "test_patch_sha256": "d553d1307bd8e75060b09c403666435731d053075cee9e54b16396975380e6c6",
          "riscv64-unknown-elf-gcc": "riscv64-unknown-elf-gcc (Debian 14.2.0-19) 14.2.0",
          "qemu-system-riscv64": "QEMU emulator version 10.2.2",
          "base": 1,
          "kernel_sha256": "f876600fc8112b9974087845e11269c325563b26e545d7a503492cc1adbd20b6",
          "qemu_command": [
            "qemu-system-riscv64",
            "-nographic",
            "-machine",
            "virt",
            "-m",
            "128M",
            "-smp",
            "1",
            "-bios",
            "default",
            "-kernel",
            "build/kernel"
          ],
          "qemu_exit": 0,
          "stopped_after_suite": true
        }
      },
      {
        "operation": "copy_reference_user_bins",
        "source": "/home/joseph/nf/education-2026A-20260927/ucore-ch5/user/target/bin",
        "destination": "/home/joseph/nf/education-2026A-20260927/ucore-ch5-observed/user/target/bin",
        "sha256": {
          "ch2b_exit": "aa7aaa87e951156e8d8aada225a8e26ec4da4a84a3be3f6f575d71bc2725b3de",
          "ch2b_hello_world": "c1d34a4a957c1ddf6258fb25560925427b7d896a35fe3ed555a3d118245d55c1",
          "ch2b_power": "b3f1254b033a960e3e042f5e46e1307221734e61059472b9d7d172f72a83e842",
          "ch3b_sleep": "e0dbdf0b7809a16d4d569ae703f69ce9b74efb1e613062fbfab8e3048c856c37",
          "ch3b_sleep1": "ba4571e02bbd2016baaaeca35ba9fc7241da7a4f403cdb57b66ae3ddc7a6e968",
          "ch3b_yield0": "c1e2013e3ed101e4808c924b764ba58f8805e8301c4be9aa72dde598c0f2417c",
          "ch3b_yield1": "7342d736f1ea41c9c430c44bf0f28a1e286400e884d407566e78b98259b6df2e",
          "ch3b_yield2": "3885b238952fb44bec95218c587ed4230b214ae6521579499edad4c12e609662",
          "ch5b_exec_simple": "de491567279bf75d9c3d25030cf244ae9055938d960e3e23af584deda99103ab",
          "ch5b_exit": "769853c03108507318e5b8c15fa2786f5c3e76db3ef529a965c11b006d0066ed",
          "ch5b_forktest0": "dc2feab1411f7017ef8ed6819edd50450b16e69df8a9ef89e71884a6f3fb73a1",
          "ch5b_forktest1": "bdf574d97384b3adb7302d25a34e5dc55eb9e380b96d7ae50f43cde0797ebe24",
          "ch5b_forktest2": "8b7e7656b699cfd8cd10586e05605e907bfd253eb9ca38b6d7ff6c6c2da2911f",
          "ch5b_getpid": "78a9a884f2e2d14d7a4ba236c60cc25d305cbff5447c4c9627feac1778cbbeec",
          "ch5b_usertest": "ae3194bf497853e00fa60636af7f2115832b5268234381eeb8caeee1d3bc4619",
          "usershell": "5b21c877186b45b6c231bcfb0132f387e5ecc9a10a853cb06702a60d84746bc1"
        }
      },
      {
        "argv": [
          "make",
          "build",
          "LOG=info",
          "CHAPTER=5",
          "INIT_PROC=ch5b_usertest"
        ],
        "cwd": "/home/joseph/nf/education-2026A-20260927/ucore-ch5-observed"
      },
      {
        "argv": [
          "qemu-system-riscv64",
          "-nographic",
          "-machine",
          "virt",
          "-m",
          "128M",
          "-smp",
          "1",
          "-bios",
          "default",
          "-kernel",
          "build/kernel"
        ],
        "cwd": "/home/joseph/nf/education-2026A-20260927/ucore-ch5-observed"
      }
    ],
    "driver_sha256": "233a3acda8a71a5f7aea59fd9e200c2489a4fed8222db9ab08888111b394c24f",
    "patches": [
      {
        "path": "/home/joseph/nf/education-2026A-20260927/ucore-2026a-build.patch",
        "sha256": "47950de22450332ea265b179a03ce9bc9b12a1bc83629941f3c27ec08d2ffd9e"
      },
      {
        "path": "/home/joseph/nf/education-2026A-20260927/ucore-2026a-ch5-observation.patch",
        "sha256": "83ca8a9a4185afb98c31def90011e891881e5801adb1446b5494f205ebf9b664"
      }
    ],
    "first_build": {
      "directory": "/home/joseph/nf/education-2026A-20260927/ucore-ch5-observed-first-build",
      "kernel_elf_sha256": "f876600fc8112b9974087845e11269c325563b26e545d7a503492cc1adbd20b6",
      "selected_apps": {
        "ch5b_exec_simple": "d5b65cb54c77dc4e998b2f6d766b1b290a6d56699d1c4056669f8120e94fcf6d",
        "ch5b_exit": "9a2153dfbf3f0f6f1d60c42598f9cda4c43fc9bf97cac1beb962f88acfff2aa3",
        "ch5b_forktest0": "94fc561d2bfb61a38bcc82838298d68afee69a4a62b8543877651f3d7da3bddc",
        "ch5b_forktest1": "9aff055f6b51283069ff1a71e60cdb3edf61f79ea2df960bf4c7d425511fc82d",
        "ch5b_forktest2": "31eec0a1881080c65c9fe5896bfedcae781b98b0bf6bf72e68b4b6465ad45b96",
        "ch5b_getpid": "66de916ae7e1d5cdc756c60b9463db851d9d0960a0122f7a58c2750e146f176e",
        "ch5b_usertest": "af0640f06ebd698ca3d0d99ff867e69057dba0afc6c72111e6da1e571940c056",
        "ch3b_sleep": "e6e05f9f0fa3c25c1c59dc44b9835b156d1222bb708b8736e32cd47bee2317c1",
        "ch3b_sleep1": "7f7108039f42d998c6b1d4e28134e7a9b1b0c03ee186407c004ff5be2e619db5",
        "ch3b_yield0": "77c8c723f57187765f42fb183b2b0e22a0f7a15cf6ea04cdfe4ba73067143936",
        "ch3b_yield1": "3c7f49d7237905509c1bc925f0a059c9b7410e7f47fe6a44368803ecfa98c1c6",
        "ch3b_yield2": "e0c8db523cf9deb5476bb3f25078a183c7b8bea3808a66b5476be750c0ae4832",
        "ch2b_exit": "d5ffd15a67db2c815984fc2adea316add125232cc9c35c49f96fffd9b7dbdf76",
        "ch2b_hello_world": "e4665e891fbae79c8b533f568feea57e0f4a15148ed341abcffcf59176b87d93",
        "ch2b_power": "18de5b17385cdfd9b923858bbfeab2c2481c22b02d41fec495af9f08bed9195c",
        "usershell": "85a14294a1da57e9716fed60856d6c3f24cf9f3d681fade2d6ddecd916205f64"
      },
      "difference": "__FILE__ absolute paths"
    },
    "course_check": {
      "status": "PASS",
      "qemu_exit": 0,
      "stopped_after_suite": true,
      "console_sha256": "b66f488ba4655743fe46000992a311383c072578830155f6aac3fb53c7f4d667",
      "verifier_source_sha256": "ee65ff4e4e69d7792619278ea7d2028efd11843f59c18d50fd67eaf49d6338db"
    },
    "versions": {
      "riscv64-unknown-elf-gcc": "riscv64-unknown-elf-gcc (Debian 14.2.0-19) 14.2.0",
      "cmake": "cmake version 3.31.6",
      "qemu-system-riscv64": "QEMU emulator version 10.2.2"
    }
  },
  "build_command": [
    "make",
    "build",
    "LOG=info",
    "CHAPTER=5",
    "INIT_PROC=ch5b_usertest"
  ],
  "build_cwd": "/home/joseph/nf/education-2026A-20260927/ucore-ch5-observed",
  "record_command": [
    "/home/joseph/nf/venv313/bin/python",
    "-m",
    "nodefusion.host.cli",
    "record",
    "--kernel",
    "/home/joseph/nf/education-2026A-20260927/ucore-ch5-observed",
    "--kernel-kind",
    "ucore",
    "--runs",
    "/home/joseph/nf/education-2026A-20260927/runs",
    "--name",
    "ucore-2026A-ch5-observed",
    "--no-build",
    "--function-returns",
    "--watch-all",
    "--profile",
    "uniform",
    "--snapshots",
    "80",
    "--max-ram-bytes",
    "268435456",
    "--timeout",
    "180",
    "--no-render",
    "--event-stream",
    "never"
  ],
  "record_cwd": "/home/joseph/nf/education-2026A-20260927/tool",
  "analysis_command": [
    "/home/joseph/nf/venv313/bin/python",
    "-m",
    "scripts.regenerate_artifact",
    "--run",
    "/home/joseph/nf/education-2026A-20260927/runs/ucore-2026A-ch5-observed",
    "--out",
    "/home/joseph/nf/education-2026A-20260927/runs/ucore-2026A-ch5-observed/ucore-2026A-ch5-observed.html",
    "--replace",
    "--strict"
  ],
  "analysis_cwd": "/home/joseph/nf/education-2026A-20260927/tool",
  "original_analysis_command": [
    "/home/joseph/nf/venv313/bin/python",
    "-m",
    "scripts.regenerate_artifact",
    "--run",
    "/home/joseph/nf/education-2026A-20260927/runs/ucore-2026A-ch5-observed",
    "--out",
    "/home/joseph/nf/education-2026A-20260927/runs/ucore-2026A-ch5-observed/ucore-2026A-ch5-observed.html",
    "--strict"
  ],
  "original_report": {
    "schema": "nodefusion.artifact-evidence/1",
    "run": "ucore-2026A-ch5-observed",
    "kernel_kind": "ucore",
    "source_sha256": {
      "trace.nfb": "3cd86a56a40339abb540a0e46077330ea74a3d05878ee4cdf60d53fb9b9a17ec",
      "manifest.json": "419bb90cf8da8207b1345c5544cba998c97f00a460b26986a8e3fc7984d910fe",
      "watchlist.json": "0f829ecf540d4034f7f5b9831b30f56fd39cd7bd40617234e7723547eab56ab0",
      "kernel_layout.json": "d552bdafec8672b36058e7bcda9ab19a1e0c741d26f592cfc5cef255de2eb4da"
    },
    "kernel_elf_sha256": "0c5a83dd5a1f36dc423518308ac00d31a7466376bd661547ec5f79fb039ddb58",
    "archive_bytes": {
      "trace.nfb": 1457948326,
      "kernel_elf": 236264
    },
    "html_sha256": "a0e7759bf0339f955c6446705838ce412d76b3d82b598c9ec3e3f5baa36b3dac",
    "html_bytes": 2172919,
    "function_trace": {
      "kind": "return-matched observed frames",
      "raw": 6769454,
      "retained": 106508,
      "returns": 7754682,
      "matched_returns": 5230498,
      "nested_entries": 5132662
    },
    "event_selection": {
      "applied": true,
      "policy": "kind-preserving/systematic-v5",
      "raw": 7544245,
      "retained": 150000,
      "dropped": 7394245,
      "target_limit": 150000,
      "minimum_spare": 25000,
      "always_keep": "all events of kinds whose count fits their per-kind budget",
      "priority_raw": 2218003,
      "spare_raw": 5326242,
      "semantic_budget": 125000,
      "minimum_per_kind": 64,
      "semantic_kind_budgets": {
        "firmware.trap": 19,
        "interrupt.clock": 79,
        "interrupt.timer": 78,
        "kernel.shutdown": 1,
        "pagetable.map": 1872,
        "phys.alloc": 94,
        "phys.free": 91,
        "proc.alloc": 61,
        "proc.exec": 17,
        "proc.exit": 61,
        "proc.fork": 60,
        "proc.free": 61,
        "proc.initproc": 1,
        "proc.wait": 64,
        "sbi.call": 316,
        "sched.enter": 1,
        "sched.switch": 28550,
        "sched.yield": 7181,
        "sched.yield_to_scheduler": 14306,
        "syscall.dispatch": 14284,
        "syscall.enter": 14284,
        "syscall.exec": 17,
        "syscall.fork": 60,
        "syscall.waitpid": 64,
        "syscall.write": 70,
        "trap.init": 1,
        "trap.userret": 14303,
        "trap.usertrap": 14303,
        "vm.copy": 60,
        "vm.copyout": 7162,
        "vm.free": 61,
        "vm.from_elf": 18,
        "vm.init": 1,
        "vm.kernel_init": 1,
        "vm.map": 81,
        "vm.translate_buffer": 7175,
        "vm.translate_str": 71,
        "vm.unmap": 71
      },
      "diagnostic_kind_budgets": {
        "func.add_task": 1188,
        "func.allocpid": 61,
        "func.clean_bss": 1,
        "func.console_putchar": 82,
        "func.consputc": 66,
        "func.curr_proc": 6247,
        "func.dummy": 7937,
        "func.fetch_task": 1188,
        "func.freepagetable": 61,
        "func.freerange": 1,
        "func.freewalk": 65,
        "func.get_cycle": 625,
        "func.get_id_by_name": 18,
        "func.init_queue": 1,
        "func.kinit": 1,
        "func.kvmmap": 3,
        "func.load_init_app": 1,
        "func.loader": 18,
        "func.loader_init": 1,
        "func.main": 1,
        "func.memmove": 625,
        "func.memset": 207,
        "func.nftrace_allocator_state": 1,
        "func.nftrace_page_alloc": 67,
        "func.nftrace_page_free": 66,
        "func.nftrace_proc_fork": 60,
        "func.nftrace_sched_switch": 2313,
        "func.pop_queue": 1189,
        "func.printf": 21,
        "func.printint": 7,
        "func.push_queue": 1189,
        "func.set_next_timer": 65,
        "func.strlen": 16,
        "func.strncmp": 64,
        "func.strncpy": 16,
        "func.sys_getpid": 2,
        "func.sys_getppid": 2,
        "func.sys_gettimeofday": 624,
        "func.threadid": 2,
        "func.timer_init": 1,
        "func.useraddr": 64,
        "func.uvmcreate": 61,
        "func.walk": 772
      },
      "minimum_per_diagnostic_kind": 64,
      "semantic_retained": 125000,
      "spare_budget": 25000,
      "stride": null,
      "retained_kinds": {
        "firmware.trap": 19,
        "func.add_task": 1188,
        "func.allocpid": 61,
        "func.clean_bss": 1,
        "func.console_putchar": 82,
        "func.consputc": 66,
        "func.curr_proc": 6247,
        "func.dummy": 7937,
        "func.fetch_task": 1188,
        "func.freepagetable": 61,
        "func.freerange": 1,
        "func.freewalk": 65,
        "func.get_cycle": 625,
        "func.get_id_by_name": 18,
        "func.init_queue": 1,
        "func.kinit": 1,
        "func.kvmmap": 3,
        "func.load_init_app": 1,
        "func.loader": 18,
        "func.loader_init": 1,
        "func.main": 1,
        "func.memmove": 625,
        "func.memset": 207,
        "func.nftrace_allocator_state": 1,
        "func.nftrace_page_alloc": 67,
        "func.nftrace_page_free": 66,
        "func.nftrace_proc_fork": 60,
        "func.nftrace_sched_switch": 2313,
        "func.pop_queue": 1189,
        "func.printf": 21,
        "func.printint": 7,
        "func.push_queue": 1189,
        "func.set_next_timer": 65,
        "func.strlen": 16,
        "func.strncmp": 64,
        "func.strncpy": 16,
        "func.sys_getpid": 2,
        "func.sys_getppid": 2,
        "func.sys_gettimeofday": 624,
        "func.threadid": 2,
        "func.timer_init": 1,
        "func.useraddr": 64,
        "func.uvmcreate": 61,
        "func.walk": 772,
        "interrupt.clock": 79,
        "interrupt.timer": 78,
        "kernel.shutdown": 1,
        "pagetable.map": 1872,
        "phys.alloc": 94,
        "phys.free": 91,
        "proc.alloc": 61,
        "proc.exec": 17,
        "proc.exit": 61,
        "proc.fork": 60,
        "proc.free": 61,
        "proc.initproc": 1,
        "proc.wait": 64,
        "sbi.call": 316,
        "sched.enter": 1,
        "sched.switch": 28550,
        "sched.yield": 7181,
        "sched.yield_to_scheduler": 14306,
        "syscall.dispatch": 14284,
        "syscall.enter": 14284,
        "syscall.exec": 17,
        "syscall.fork": 60,
        "syscall.waitpid": 64,
        "syscall.write": 70,
        "trap.init": 1,
        "trap.userret": 14303,
        "trap.usertrap": 14303,
        "vm.copy": 60,
        "vm.copyout": 7162,
        "vm.free": 61,
        "vm.from_elf": 18,
        "vm.init": 1,
        "vm.kernel_init": 1,
        "vm.map": 81,
        "vm.translate_buffer": 7175,
        "vm.translate_str": 71,
        "vm.unmap": 71
      },
      "dropped_kinds": {
        "func.add_task": 255149,
        "func.console_putchar": 4198,
        "func.consputc": 303,
        "func.curr_proc": 1402889,
        "func.dummy": 1786301,
        "func.fetch_task": 255150,
        "func.freewalk": 240,
        "func.get_cycle": 127159,
        "func.memmove": 127375,
        "func.memset": 32643,
        "func.nftrace_page_alloc": 539,
        "func.nftrace_page_free": 473,
        "func.nftrace_sched_switch": 510361,
        "func.pop_queue": 255149,
        "func.push_queue": 255148,
        "func.set_next_timer": 262,
        "func.strncmp": 56,
        "func.sys_gettimeofday": 127160,
        "func.useraddr": 1,
        "func.walk": 160686,
        "interrupt.clock": 248,
        "interrupt.timer": 248,
        "pagetable.map": 30741,
        "phys.alloc": 512,
        "phys.free": 448,
        "proc.wait": 1,
        "sbi.call": 4292,
        "sched.switch": 484124,
        "sched.yield": 120946,
        "sched.yield_to_scheduler": 242031,
        "syscall.dispatch": 241675,
        "syscall.enter": 241675,
        "syscall.waitpid": 1,
        "syscall.write": 97,
        "trap.userret": 241982,
        "trap.usertrap": 241982,
        "vm.copyout": 120622,
        "vm.map": 278,
        "vm.translate_buffer": 120858,
        "vm.translate_str": 113,
        "vm.unmap": 129
      }
    },
    "coverage": {
      "status": "complete",
      "percent": 100.0,
      "passed": 2327724,
      "total": 2327724,
      "metrics": {
        "covered": 14,
        "applicable": 14,
        "not_applicable": [
          "bcache_hit_rate",
          "bcache_hits",
          "bcache_reads",
          "disk_io",
          "log_commits"
        ],
        "missing": [],
        "sampled": []
      },
      "semantic_events": {
        "raw": 2218003,
        "unknown": 0,
        "unknown_fields": {},
        "dropped_from_interactive": 2093003
      },
      "snapshots": {
        "checked": 4641,
        "incomplete": 0,
        "physical_memory": 0,
        "physical_counters": 0,
        "processes": 0,
        "resources": 0,
        "pre_initialization": {
          "physical_memory": 0,
          "physical_counters": 2040,
          "processes": 0,
          "resources": 0
        }
      },
      "snapshot_not_applicable": [
        "resources"
      ],
      "manifest_fields": {
        "cells": 97818,
        "states": {
          "absent": 6987,
          "empty": 4263,
          "present": 86568
        },
        "not_applicable": 6987,
        "unresolved": 0
      },
      "full_watch_scope": true,
      "function_watch_drops": 0,
      "function_stacks_available": true,
      "observation_points": {
        "unresolved": [],
        "reported_missing": 48,
        "layout_missing": []
      },
      "blockers": []
    }
  },
  "record_driver_sha256": "e58609fa6200277d5531d137d92204d1dbdb8989ce45aba14298ddc48b9a2a84",
  "record_support_files": {
    "/home/joseph/nf/education-2026A-20260927/build-ch5-observed.py": "1a7cdf7d354a829d6f1c68f68c91937bb02afbfe22352f876d70313d7bfbf94e",
    "/home/joseph/nf/education-2026A-20260927/ucore-2026a-build.patch": "47950de22450332ea265b179a03ce9bc9b12a1bc83629941f3c27ec08d2ffd9e",
    "/home/joseph/nf/education-2026A-20260927/ucore-2026a-ch5-observation.patch": "83ca8a9a4185afb98c31def90011e891881e5801adb1446b5494f205ebf9b664",
    "/home/joseph/nf/education-2026A-20260927/ucore-ch5-observed-reference-apps-qemu.log": "b66f488ba4655743fe46000992a311383c072578830155f6aac3fb53c7f4d667"
  },
  "process_analysis_command": [
    "/home/joseph/nf/venv313/bin/python",
    "/home/joseph/nf/education-2026A-20260927/inspect-ch5-observation-v2.py",
    "rcore-2026A-ch5-basic-observed-v2",
    "ucore-2026A-ch5-observed"
  ],
  "process_analysis_script_sha256": "42e8e2ab333fb36172b6a3e122786bbb95e00c03ccd5b9ad45d4b31caf795dae",
  "process_analysis_cwd": "/home/joseph",
  "process_analysis_source_archive": {
    "path": "/home/joseph/nf/education-2026A-20260927/ch5-process-observations-source.tar.gz",
    "sha256": "a6d77d286e3bcedbbce403eaadcc34998936353eabff373c81dd3641e7e1406a",
    "bytes": 91738
  },
  "observations": {
    "schema": "nodefusion.process-observations/1",
    "run": "ucore-2026A-ch5-observed",
    "driver_sha256": "42e8e2ab333fb36172b6a3e122786bbb95e00c03ccd5b9ad45d4b31caf795dae",
    "trace_sha256": "3cd86a56a40339abb540a0e46077330ea74a3d05878ee4cdf60d53fb9b9a17ec",
    "manifest_sha256": "419bb90cf8da8207b1345c5544cba998c97f00a460b26986a8e3fc7984d910fe",
    "record_status": "completed",
    "nftrace_counts": {
      "6": 1,
      "1": 606,
      "4": 512674,
      "2": 60,
      "5": 539
    },
    "function_entries": {
      "allocpid": 61,
      "allocproc": 61,
      "exec": 17,
      "fork": 60,
      "kalloc": 606,
      "nftrace_allocator_state": 1,
      "nftrace_page_alloc": 606,
      "nftrace_proc_fork": 60,
      "nftrace_sched_switch": 512674,
      "swtch": 512674,
      "sys_exec": 17,
      "sys_wait": 65,
      "uvmunmap": 200,
      "wait": 65
    },
    "allocation_balance": {
      "initial_free_pages": 31131,
      "successful_allocations": 606,
      "allocation_failures": 0,
      "frees": 539,
      "peak_used_pages": 123,
      "final_used_pages": 67,
      "every_record_balanced": true
    },
    "allocator_marks": [
      {
        "insn": 408159847,
        "free": 31131,
        "used": 0
      },
      {
        "insn": 408172231,
        "free": 31130,
        "used": 1
      },
      {
        "insn": 408196989,
        "free": 31129,
        "used": 2
      },
      {
        "insn": 408221684,
        "free": 31128,
        "used": 3
      },
      {
        "insn": 408289439,
        "free": 31127,
        "used": 4
      },
      {
        "insn": 408357131,
        "free": 31126,
        "used": 5
      },
      {
        "insn": 408424823,
        "free": 31125,
        "used": 6
      },
      {
        "insn": 408492515,
        "free": 31124,
        "used": 7
      },
      {
        "insn": 408560207,
        "free": 31123,
        "used": 8
      },
      {
        "insn": 408627899,
        "free": 31122,
        "used": 9
      },
      {
        "insn": 408695591,
        "free": 31121,
        "used": 10
      },
      {
        "insn": 408763283,
        "free": 31120,
        "used": 11
      },
      {
        "insn": 408830975,
        "free": 31119,
        "used": 12
      },
      {
        "insn": 408898667,
        "free": 31118,
        "used": 13
      },
      {
        "insn": 408966359,
        "free": 31117,
        "used": 14
      },
      {
        "insn": 409034051,
        "free": 31116,
        "used": 15
      },
      {
        "insn": 409101743,
        "free": 31115,
        "used": 16
      },
      {
        "insn": 409169435,
        "free": 31114,
        "used": 17
      },
      {
        "insn": 409237127,
        "free": 31113,
        "used": 18
      },
      {
        "insn": 409304819,
        "free": 31112,
        "used": 19
      },
      {
        "insn": 409372511,
        "free": 31111,
        "used": 20
      },
      {
        "insn": 409440203,
        "free": 31110,
        "used": 21
      },
      {
        "insn": 409507895,
        "free": 31109,
        "used": 22
      },
      {
        "insn": 409575587,
        "free": 31108,
        "used": 23
      },
      {
        "insn": 409643279,
        "free": 31107,
        "used": 24
      },
      {
        "insn": 409710971,
        "free": 31106,
        "used": 25
      },
      {
        "insn": 409778663,
        "free": 31105,
        "used": 26
      },
      {
        "insn": 409846355,
        "free": 31104,
        "used": 27
      },
      {
        "insn": 409914047,
        "free": 31103,
        "used": 28
      },
      {
        "insn": 409981739,
        "free": 31102,
        "used": 29
      },
      {
        "insn": 410049431,
        "free": 31101,
        "used": 30
      },
      {
        "insn": 410117123,
        "free": 31100,
        "used": 31
      },
      {
        "insn": 410184815,
        "free": 31099,
        "used": 32
      },
      {
        "insn": 410252507,
        "free": 31098,
        "used": 33
      },
      {
        "insn": 410320199,
        "free": 31097,
        "used": 34
      },
      {
        "insn": 410387891,
        "free": 31096,
        "used": 35
      },
      {
        "insn": 410455583,
        "free": 31095,
        "used": 36
      },
      {
        "insn": 410523275,
        "free": 31094,
        "used": 37
      },
      {
        "insn": 410590967,
        "free": 31093,
        "used": 38
      },
      {
        "insn": 410658659,
        "free": 31092,
        "used": 39
      },
      {
        "insn": 410726351,
        "free": 31091,
        "used": 40
      },
      {
        "insn": 410794043,
        "free": 31090,
        "used": 41
      },
      {
        "insn": 410861735,
        "free": 31089,
        "used": 42
      },
      {
        "insn": 410929427,
        "free": 31088,
        "used": 43
      },
      {
        "insn": 410997119,
        "free": 31087,
        "used": 44
      },
      {
        "insn": 411064811,
        "free": 31086,
        "used": 45
      },
      {
        "insn": 411132503,
        "free": 31085,
        "used": 46
      },
      {
        "insn": 411200195,
        "free": 31084,
        "used": 47
      },
      {
        "insn": 411267887,
        "free": 31083,
        "used": 48
      },
      {
        "insn": 411335579,
        "free": 31082,
        "used": 49
      },
      {
        "insn": 411403271,
        "free": 31081,
        "used": 50
      },
      {
        "insn": 411470963,
        "free": 31080,
        "used": 51
      },
      {
        "insn": 411538655,
        "free": 31079,
        "used": 52
      },
      {
        "insn": 411606347,
        "free": 31078,
        "used": 53
      },
      {
        "insn": 411674039,
        "free": 31077,
        "used": 54
      },
      {
        "insn": 411741731,
        "free": 31076,
        "used": 55
      },
      {
        "insn": 411809423,
        "free": 31075,
        "used": 56
      },
      {
        "insn": 411877115,
        "free": 31074,
        "used": 57
      },
      {
        "insn": 411944807,
        "free": 31073,
        "used": 58
      },
      {
        "insn": 412012499,
        "free": 31072,
        "used": 59
      },
      {
        "insn": 412080191,
        "free": 31071,
        "used": 60
      },
      {
        "insn": 412147883,
        "free": 31070,
        "used": 61
      },
      {
        "insn": 412215575,
        "free": 31069,
        "used": 62
      },
      {
        "insn": 412283267,
        "free": 31068,
        "used": 63
      },
      {
        "insn": 412350959,
        "free": 31067,
        "used": 64
      },
      {
        "insn": 412418651,
        "free": 31066,
        "used": 65
      },
      {
        "insn": 412486396,
        "free": 31065,
        "used": 66
      },
      {
        "insn": 412511091,
        "free": 31064,
        "used": 67
      },
      {
        "insn": 412651986,
        "free": 31063,
        "used": 68
      },
      {
        "insn": 412676734,
        "free": 31062,
        "used": 69
      },
      {
        "insn": 412701429,
        "free": 31061,
        "used": 70
      },
      {
        "insn": 412751374,
        "free": 31060,
        "used": 71
      },
      {
        "insn": 412784322,
        "free": 31059,
        "used": 72
      },
      {
        "insn": 412809017,
        "free": 31058,
        "used": 73
      },
      {
        "insn": 412833760,
        "free": 31057,
        "used": 74
      },
      {
        "insn": 412866795,
        "free": 31056,
        "used": 75
      },
      {
        "insn": 412922467,
        "free": 31055,
        "used": 76
      },
      {
        "insn": 412947215,
        "free": 31054,
        "used": 77
      },
      {
        "insn": 412971910,
        "free": 31053,
        "used": 78
      },
      {
        "insn": 413021931,
        "free": 31052,
        "used": 79
      },
      {
        "insn": 413054871,
        "free": 31051,
        "used": 80
      },
      {
        "insn": 413079566,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 413104374,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 413137514,
        "free": 31048,
        "used": 83
      },
      {
        "insn": 413174733,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 413187184,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 413199702,
        "free": 31051,
        "used": 80
      },
      {
        "insn": 413212149,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 413245167,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 413278202,
        "free": 31048,
        "used": 83
      },
      {
        "insn": 413328979,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 413341430,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 413353948,
        "free": 31051,
        "used": 80
      },
      {
        "insn": 413370024,
        "free": 31052,
        "used": 79
      },
      {
        "insn": 413385995,
        "free": 31053,
        "used": 78
      },
      {
        "insn": 413407396,
        "free": 31054,
        "used": 77
      },
      {
        "insn": 413419790,
        "free": 31055,
        "used": 76
      },
      {
        "insn": 413433976,
        "free": 31056,
        "used": 75
      },
      {
        "insn": 413491047,
        "free": 31055,
        "used": 76
      },
      {
        "insn": 413515795,
        "free": 31054,
        "used": 77
      },
      {
        "insn": 413540490,
        "free": 31053,
        "used": 78
      },
      {
        "insn": 413590511,
        "free": 31052,
        "used": 79
      },
      {
        "insn": 413623451,
        "free": 31051,
        "used": 80
      },
      {
        "insn": 413648146,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 413672954,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 413706094,
        "free": 31048,
        "used": 83
      },
      {
        "insn": 413743283,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 413755734,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 413768252,
        "free": 31051,
        "used": 80
      },
      {
        "insn": 413780699,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 413813717,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 413846752,
        "free": 31048,
        "used": 83
      },
      {
        "insn": 415449400,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 415461851,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 415474369,
        "free": 31051,
        "used": 80
      },
      {
        "insn": 415490445,
        "free": 31052,
        "used": 79
      },
      {
        "insn": 415506416,
        "free": 31053,
        "used": 78
      },
      {
        "insn": 415527817,
        "free": 31054,
        "used": 77
      },
      {
        "insn": 415540211,
        "free": 31055,
        "used": 76
      },
      {
        "insn": 415554397,
        "free": 31056,
        "used": 75
      },
      {
        "insn": 415608978,
        "free": 31055,
        "used": 76
      },
      {
        "insn": 415633726,
        "free": 31054,
        "used": 77
      },
      {
        "insn": 415658421,
        "free": 31053,
        "used": 78
      },
      {
        "insn": 415708442,
        "free": 31052,
        "used": 79
      },
      {
        "insn": 415741382,
        "free": 31051,
        "used": 80
      },
      {
        "insn": 415766077,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 415790885,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 415824025,
        "free": 31048,
        "used": 83
      },
      {
        "insn": 415859300,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 415871751,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 415884269,
        "free": 31051,
        "used": 80
      },
      {
        "insn": 415896716,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 415929734,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 415962769,
        "free": 31048,
        "used": 83
      },
      {
        "insn": 884715359,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 884727810,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 884740328,
        "free": 31051,
        "used": 80
      },
      {
        "insn": 884756404,
        "free": 31052,
        "used": 79
      },
      {
        "insn": 884772375,
        "free": 31053,
        "used": 78
      },
      {
        "insn": 884793776,
        "free": 31054,
        "used": 77
      },
      {
        "insn": 884806170,
        "free": 31055,
        "used": 76
      },
      {
        "insn": 884820356,
        "free": 31056,
        "used": 75
      },
      {
        "insn": 884875357,
        "free": 31055,
        "used": 76
      },
      {
        "insn": 884900105,
        "free": 31054,
        "used": 77
      },
      {
        "insn": 884924800,
        "free": 31053,
        "used": 78
      },
      {
        "insn": 884974821,
        "free": 31052,
        "used": 79
      },
      {
        "insn": 885007761,
        "free": 31051,
        "used": 80
      },
      {
        "insn": 885032456,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 885057264,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 885090404,
        "free": 31048,
        "used": 83
      },
      {
        "insn": 885127709,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 885140160,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 885152678,
        "free": 31051,
        "used": 80
      },
      {
        "insn": 885165125,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 885198143,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 885231178,
        "free": 31048,
        "used": 83
      },
      {
        "insn": 900836623,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 900849074,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 900861592,
        "free": 31051,
        "used": 80
      },
      {
        "insn": 900877668,
        "free": 31052,
        "used": 79
      },
      {
        "insn": 900893639,
        "free": 31053,
        "used": 78
      },
      {
        "insn": 900915040,
        "free": 31054,
        "used": 77
      },
      {
        "insn": 900927434,
        "free": 31055,
        "used": 76
      },
      {
        "insn": 900941620,
        "free": 31056,
        "used": 75
      },
      {
        "insn": 900997041,
        "free": 31055,
        "used": 76
      },
      {
        "insn": 901021789,
        "free": 31054,
        "used": 77
      },
      {
        "insn": 901046484,
        "free": 31053,
        "used": 78
      },
      {
        "insn": 901096505,
        "free": 31052,
        "used": 79
      },
      {
        "insn": 901129445,
        "free": 31051,
        "used": 80
      },
      {
        "insn": 901154140,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 901178948,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 901212088,
        "free": 31048,
        "used": 83
      },
      {
        "insn": 901247511,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 901259962,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 901272480,
        "free": 31051,
        "used": 80
      },
      {
        "insn": 901284927,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 901317945,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 901350980,
        "free": 31048,
        "used": 83
      },
      {
        "insn": 901441908,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 901454359,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 901466877,
        "free": 31051,
        "used": 80
      },
      {
        "insn": 901482953,
        "free": 31052,
        "used": 79
      },
      {
        "insn": 901498924,
        "free": 31053,
        "used": 78
      },
      {
        "insn": 901520325,
        "free": 31054,
        "used": 77
      },
      {
        "insn": 901532719,
        "free": 31055,
        "used": 76
      },
      {
        "insn": 901546905,
        "free": 31056,
        "used": 75
      },
      {
        "insn": 901602326,
        "free": 31055,
        "used": 76
      },
      {
        "insn": 901627074,
        "free": 31054,
        "used": 77
      },
      {
        "insn": 901651769,
        "free": 31053,
        "used": 78
      },
      {
        "insn": 901701790,
        "free": 31052,
        "used": 79
      },
      {
        "insn": 901734730,
        "free": 31051,
        "used": 80
      },
      {
        "insn": 901759425,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 901784233,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 901817373,
        "free": 31048,
        "used": 83
      },
      {
        "insn": 901854810,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 901867261,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 901879779,
        "free": 31051,
        "used": 80
      },
      {
        "insn": 901892226,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 901925244,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 901958279,
        "free": 31048,
        "used": 83
      },
      {
        "insn": 902048735,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 902061186,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 902073704,
        "free": 31051,
        "used": 80
      },
      {
        "insn": 902089780,
        "free": 31052,
        "used": 79
      },
      {
        "insn": 902105751,
        "free": 31053,
        "used": 78
      },
      {
        "insn": 902127152,
        "free": 31054,
        "used": 77
      },
      {
        "insn": 902139546,
        "free": 31055,
        "used": 76
      },
      {
        "insn": 902153732,
        "free": 31056,
        "used": 75
      },
      {
        "insn": 902209153,
        "free": 31055,
        "used": 76
      },
      {
        "insn": 902233901,
        "free": 31054,
        "used": 77
      },
      {
        "insn": 902258596,
        "free": 31053,
        "used": 78
      },
      {
        "insn": 902308617,
        "free": 31052,
        "used": 79
      },
      {
        "insn": 902341557,
        "free": 31051,
        "used": 80
      },
      {
        "insn": 902366252,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 902391060,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 902424200,
        "free": 31048,
        "used": 83
      },
      {
        "insn": 902461743,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 902474194,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 902486712,
        "free": 31051,
        "used": 80
      },
      {
        "insn": 902499159,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 902532177,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 902565212,
        "free": 31048,
        "used": 83
      },
      {
        "insn": 902655668,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 902668119,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 902680637,
        "free": 31051,
        "used": 80
      },
      {
        "insn": 902696713,
        "free": 31052,
        "used": 79
      },
      {
        "insn": 902712684,
        "free": 31053,
        "used": 78
      },
      {
        "insn": 902734085,
        "free": 31054,
        "used": 77
      },
      {
        "insn": 902746479,
        "free": 31055,
        "used": 76
      },
      {
        "insn": 902760665,
        "free": 31056,
        "used": 75
      },
      {
        "insn": 902817061,
        "free": 31055,
        "used": 76
      },
      {
        "insn": 902841809,
        "free": 31054,
        "used": 77
      },
      {
        "insn": 902866504,
        "free": 31053,
        "used": 78
      },
      {
        "insn": 902916525,
        "free": 31052,
        "used": 79
      },
      {
        "insn": 902949465,
        "free": 31051,
        "used": 80
      },
      {
        "insn": 902974160,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 902998968,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 903032108,
        "free": 31048,
        "used": 83
      },
      {
        "insn": 903069847,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 903082298,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 903094816,
        "free": 31051,
        "used": 80
      },
      {
        "insn": 903107263,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 903140281,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 903173316,
        "free": 31048,
        "used": 83
      },
      {
        "insn": 903199361,
        "free": 31047,
        "used": 84
      },
      {
        "insn": 903224109,
        "free": 31046,
        "used": 85
      },
      {
        "insn": 903248804,
        "free": 31045,
        "used": 86
      },
      {
        "insn": 903298825,
        "free": 31044,
        "used": 87
      },
      {
        "insn": 903331765,
        "free": 31043,
        "used": 88
      },
      {
        "insn": 903356460,
        "free": 31042,
        "used": 89
      },
      {
        "insn": 903381268,
        "free": 31041,
        "used": 90
      },
      {
        "insn": 903414408,
        "free": 31040,
        "used": 91
      },
      {
        "insn": 903461997,
        "free": 31041,
        "used": 90
      },
      {
        "insn": 903474448,
        "free": 31042,
        "used": 89
      },
      {
        "insn": 903486966,
        "free": 31043,
        "used": 88
      },
      {
        "insn": 903503042,
        "free": 31044,
        "used": 87
      },
      {
        "insn": 903519013,
        "free": 31045,
        "used": 86
      },
      {
        "insn": 903540414,
        "free": 31046,
        "used": 85
      },
      {
        "insn": 903552808,
        "free": 31047,
        "used": 84
      },
      {
        "insn": 903566994,
        "free": 31048,
        "used": 83
      },
      {
        "insn": 903597858,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 903610309,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 903622827,
        "free": 31051,
        "used": 80
      },
      {
        "insn": 903638903,
        "free": 31052,
        "used": 79
      },
      {
        "insn": 903654874,
        "free": 31053,
        "used": 78
      },
      {
        "insn": 903676275,
        "free": 31054,
        "used": 77
      },
      {
        "insn": 903688669,
        "free": 31055,
        "used": 76
      },
      {
        "insn": 903702855,
        "free": 31056,
        "used": 75
      },
      {
        "insn": 903759539,
        "free": 31055,
        "used": 76
      },
      {
        "insn": 903784287,
        "free": 31054,
        "used": 77
      },
      {
        "insn": 903808982,
        "free": 31053,
        "used": 78
      },
      {
        "insn": 903859003,
        "free": 31052,
        "used": 79
      },
      {
        "insn": 903891943,
        "free": 31051,
        "used": 80
      },
      {
        "insn": 903916638,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 903941446,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 903974586,
        "free": 31048,
        "used": 83
      },
      {
        "insn": 904012175,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 904024626,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 904037144,
        "free": 31051,
        "used": 80
      },
      {
        "insn": 904049591,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 904082609,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 904115644,
        "free": 31048,
        "used": 83
      },
      {
        "insn": 904173986,
        "free": 31047,
        "used": 84
      },
      {
        "insn": 904198734,
        "free": 31046,
        "used": 85
      },
      {
        "insn": 904223429,
        "free": 31045,
        "used": 86
      },
      {
        "insn": 904273450,
        "free": 31044,
        "used": 87
      },
      {
        "insn": 904306390,
        "free": 31043,
        "used": 88
      },
      {
        "insn": 904331085,
        "free": 31042,
        "used": 89
      },
      {
        "insn": 904355893,
        "free": 31041,
        "used": 90
      },
      {
        "insn": 904389033,
        "free": 31040,
        "used": 91
      },
      {
        "insn": 904436023,
        "free": 31041,
        "used": 90
      },
      {
        "insn": 904448474,
        "free": 31042,
        "used": 89
      },
      {
        "insn": 904460992,
        "free": 31043,
        "used": 88
      },
      {
        "insn": 904477068,
        "free": 31044,
        "used": 87
      },
      {
        "insn": 904493039,
        "free": 31045,
        "used": 86
      },
      {
        "insn": 904514440,
        "free": 31046,
        "used": 85
      },
      {
        "insn": 904526834,
        "free": 31047,
        "used": 84
      },
      {
        "insn": 904541020,
        "free": 31048,
        "used": 83
      },
      {
        "insn": 904596878,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 904609329,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 904621847,
        "free": 31051,
        "used": 80
      },
      {
        "insn": 904637923,
        "free": 31052,
        "used": 79
      },
      {
        "insn": 904653894,
        "free": 31053,
        "used": 78
      },
      {
        "insn": 904675295,
        "free": 31054,
        "used": 77
      },
      {
        "insn": 904687689,
        "free": 31055,
        "used": 76
      },
      {
        "insn": 904701875,
        "free": 31056,
        "used": 75
      },
      {
        "insn": 904760243,
        "free": 31055,
        "used": 76
      },
      {
        "insn": 904784991,
        "free": 31054,
        "used": 77
      },
      {
        "insn": 904809686,
        "free": 31053,
        "used": 78
      },
      {
        "insn": 904859707,
        "free": 31052,
        "used": 79
      },
      {
        "insn": 904892647,
        "free": 31051,
        "used": 80
      },
      {
        "insn": 904917342,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 904942150,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 904975290,
        "free": 31048,
        "used": 83
      },
      {
        "insn": 905013009,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 905025460,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 905037978,
        "free": 31051,
        "used": 80
      },
      {
        "insn": 905050425,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 905083443,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 905116478,
        "free": 31048,
        "used": 83
      },
      {
        "insn": 905141787,
        "free": 31047,
        "used": 84
      },
      {
        "insn": 905166535,
        "free": 31046,
        "used": 85
      },
      {
        "insn": 905191230,
        "free": 31045,
        "used": 86
      },
      {
        "insn": 905241251,
        "free": 31044,
        "used": 87
      },
      {
        "insn": 905274191,
        "free": 31043,
        "used": 88
      },
      {
        "insn": 905298886,
        "free": 31042,
        "used": 89
      },
      {
        "insn": 905323694,
        "free": 31041,
        "used": 90
      },
      {
        "insn": 905356834,
        "free": 31040,
        "used": 91
      },
      {
        "insn": 905400648,
        "free": 31039,
        "used": 92
      },
      {
        "insn": 905425396,
        "free": 31038,
        "used": 93
      },
      {
        "insn": 905450091,
        "free": 31037,
        "used": 94
      },
      {
        "insn": 905500112,
        "free": 31036,
        "used": 95
      },
      {
        "insn": 905533052,
        "free": 31035,
        "used": 96
      },
      {
        "insn": 905557747,
        "free": 31034,
        "used": 97
      },
      {
        "insn": 905582555,
        "free": 31033,
        "used": 98
      },
      {
        "insn": 905615695,
        "free": 31032,
        "used": 99
      },
      {
        "insn": 905659513,
        "free": 31031,
        "used": 100
      },
      {
        "insn": 905684261,
        "free": 31030,
        "used": 101
      },
      {
        "insn": 905708956,
        "free": 31029,
        "used": 102
      },
      {
        "insn": 905758977,
        "free": 31028,
        "used": 103
      },
      {
        "insn": 905791917,
        "free": 31027,
        "used": 104
      },
      {
        "insn": 905816612,
        "free": 31026,
        "used": 105
      },
      {
        "insn": 905841420,
        "free": 31025,
        "used": 106
      },
      {
        "insn": 905874560,
        "free": 31024,
        "used": 107
      },
      {
        "insn": 905918382,
        "free": 31023,
        "used": 108
      },
      {
        "insn": 905943130,
        "free": 31022,
        "used": 109
      },
      {
        "insn": 905967825,
        "free": 31021,
        "used": 110
      },
      {
        "insn": 906017846,
        "free": 31020,
        "used": 111
      },
      {
        "insn": 906050786,
        "free": 31019,
        "used": 112
      },
      {
        "insn": 906075481,
        "free": 31018,
        "used": 113
      },
      {
        "insn": 906100289,
        "free": 31017,
        "used": 114
      },
      {
        "insn": 906133429,
        "free": 31016,
        "used": 115
      },
      {
        "insn": 906177226,
        "free": 31017,
        "used": 114
      },
      {
        "insn": 906189677,
        "free": 31018,
        "used": 113
      },
      {
        "insn": 906202195,
        "free": 31019,
        "used": 112
      },
      {
        "insn": 906218271,
        "free": 31020,
        "used": 111
      },
      {
        "insn": 906234242,
        "free": 31021,
        "used": 110
      },
      {
        "insn": 906255643,
        "free": 31022,
        "used": 109
      },
      {
        "insn": 906268037,
        "free": 31023,
        "used": 108
      },
      {
        "insn": 906282223,
        "free": 31024,
        "used": 107
      },
      {
        "insn": 906304053,
        "free": 31025,
        "used": 106
      },
      {
        "insn": 906316504,
        "free": 31026,
        "used": 105
      },
      {
        "insn": 906329022,
        "free": 31027,
        "used": 104
      },
      {
        "insn": 906345098,
        "free": 31028,
        "used": 103
      },
      {
        "insn": 906361069,
        "free": 31029,
        "used": 102
      },
      {
        "insn": 906382470,
        "free": 31030,
        "used": 101
      },
      {
        "insn": 906394864,
        "free": 31031,
        "used": 100
      },
      {
        "insn": 906409050,
        "free": 31032,
        "used": 99
      },
      {
        "insn": 906430880,
        "free": 31033,
        "used": 98
      },
      {
        "insn": 906443331,
        "free": 31034,
        "used": 97
      },
      {
        "insn": 906455849,
        "free": 31035,
        "used": 96
      },
      {
        "insn": 906471925,
        "free": 31036,
        "used": 95
      },
      {
        "insn": 906487896,
        "free": 31037,
        "used": 94
      },
      {
        "insn": 906509297,
        "free": 31038,
        "used": 93
      },
      {
        "insn": 906521691,
        "free": 31039,
        "used": 92
      },
      {
        "insn": 906535877,
        "free": 31040,
        "used": 91
      },
      {
        "insn": 906557707,
        "free": 31041,
        "used": 90
      },
      {
        "insn": 906570158,
        "free": 31042,
        "used": 89
      },
      {
        "insn": 906582676,
        "free": 31043,
        "used": 88
      },
      {
        "insn": 906598752,
        "free": 31044,
        "used": 87
      },
      {
        "insn": 906614723,
        "free": 31045,
        "used": 86
      },
      {
        "insn": 906636124,
        "free": 31046,
        "used": 85
      },
      {
        "insn": 906648518,
        "free": 31047,
        "used": 84
      },
      {
        "insn": 906662704,
        "free": 31048,
        "used": 83
      },
      {
        "insn": 906687957,
        "free": 31047,
        "used": 84
      },
      {
        "insn": 906712705,
        "free": 31046,
        "used": 85
      },
      {
        "insn": 906737400,
        "free": 31045,
        "used": 86
      },
      {
        "insn": 906787421,
        "free": 31044,
        "used": 87
      },
      {
        "insn": 906820361,
        "free": 31043,
        "used": 88
      },
      {
        "insn": 906845056,
        "free": 31042,
        "used": 89
      },
      {
        "insn": 906869864,
        "free": 31041,
        "used": 90
      },
      {
        "insn": 906903004,
        "free": 31040,
        "used": 91
      },
      {
        "insn": 906946834,
        "free": 31039,
        "used": 92
      },
      {
        "insn": 906971582,
        "free": 31038,
        "used": 93
      },
      {
        "insn": 906996277,
        "free": 31037,
        "used": 94
      },
      {
        "insn": 907046298,
        "free": 31036,
        "used": 95
      },
      {
        "insn": 907079238,
        "free": 31035,
        "used": 96
      },
      {
        "insn": 907103933,
        "free": 31034,
        "used": 97
      },
      {
        "insn": 907128741,
        "free": 31033,
        "used": 98
      },
      {
        "insn": 907161881,
        "free": 31032,
        "used": 99
      },
      {
        "insn": 907205715,
        "free": 31031,
        "used": 100
      },
      {
        "insn": 907230463,
        "free": 31030,
        "used": 101
      },
      {
        "insn": 907255158,
        "free": 31029,
        "used": 102
      },
      {
        "insn": 907305179,
        "free": 31028,
        "used": 103
      },
      {
        "insn": 907338119,
        "free": 31027,
        "used": 104
      },
      {
        "insn": 907362814,
        "free": 31026,
        "used": 105
      },
      {
        "insn": 907387622,
        "free": 31025,
        "used": 106
      },
      {
        "insn": 907420762,
        "free": 31024,
        "used": 107
      },
      {
        "insn": 907464600,
        "free": 31023,
        "used": 108
      },
      {
        "insn": 907489348,
        "free": 31022,
        "used": 109
      },
      {
        "insn": 907514043,
        "free": 31021,
        "used": 110
      },
      {
        "insn": 907564064,
        "free": 31020,
        "used": 111
      },
      {
        "insn": 907597004,
        "free": 31019,
        "used": 112
      },
      {
        "insn": 907621699,
        "free": 31018,
        "used": 113
      },
      {
        "insn": 907646507,
        "free": 31017,
        "used": 114
      },
      {
        "insn": 907679647,
        "free": 31016,
        "used": 115
      },
      {
        "insn": 907723489,
        "free": 31015,
        "used": 116
      },
      {
        "insn": 907748237,
        "free": 31014,
        "used": 117
      },
      {
        "insn": 907772932,
        "free": 31013,
        "used": 118
      },
      {
        "insn": 907822953,
        "free": 31012,
        "used": 119
      },
      {
        "insn": 907855893,
        "free": 31011,
        "used": 120
      },
      {
        "insn": 907880588,
        "free": 31010,
        "used": 121
      },
      {
        "insn": 907905396,
        "free": 31009,
        "used": 122
      },
      {
        "insn": 907938536,
        "free": 31008,
        "used": 123
      },
      {
        "insn": 907982343,
        "free": 31009,
        "used": 122
      },
      {
        "insn": 907994794,
        "free": 31010,
        "used": 121
      },
      {
        "insn": 908007312,
        "free": 31011,
        "used": 120
      },
      {
        "insn": 908023388,
        "free": 31012,
        "used": 119
      },
      {
        "insn": 908039359,
        "free": 31013,
        "used": 118
      },
      {
        "insn": 908060760,
        "free": 31014,
        "used": 117
      },
      {
        "insn": 908073154,
        "free": 31015,
        "used": 116
      },
      {
        "insn": 908087340,
        "free": 31016,
        "used": 115
      },
      {
        "insn": 908109170,
        "free": 31017,
        "used": 114
      },
      {
        "insn": 908121621,
        "free": 31018,
        "used": 113
      },
      {
        "insn": 908134139,
        "free": 31019,
        "used": 112
      },
      {
        "insn": 908150215,
        "free": 31020,
        "used": 111
      },
      {
        "insn": 908166186,
        "free": 31021,
        "used": 110
      },
      {
        "insn": 908187587,
        "free": 31022,
        "used": 109
      },
      {
        "insn": 908199981,
        "free": 31023,
        "used": 108
      },
      {
        "insn": 908214167,
        "free": 31024,
        "used": 107
      },
      {
        "insn": 908235997,
        "free": 31025,
        "used": 106
      },
      {
        "insn": 908248448,
        "free": 31026,
        "used": 105
      },
      {
        "insn": 908260966,
        "free": 31027,
        "used": 104
      },
      {
        "insn": 908277042,
        "free": 31028,
        "used": 103
      },
      {
        "insn": 908293013,
        "free": 31029,
        "used": 102
      },
      {
        "insn": 908314414,
        "free": 31030,
        "used": 101
      },
      {
        "insn": 908326808,
        "free": 31031,
        "used": 100
      },
      {
        "insn": 908340994,
        "free": 31032,
        "used": 99
      },
      {
        "insn": 908362824,
        "free": 31033,
        "used": 98
      },
      {
        "insn": 908375275,
        "free": 31034,
        "used": 97
      },
      {
        "insn": 908387793,
        "free": 31035,
        "used": 96
      },
      {
        "insn": 908403869,
        "free": 31036,
        "used": 95
      },
      {
        "insn": 908419840,
        "free": 31037,
        "used": 94
      },
      {
        "insn": 908441241,
        "free": 31038,
        "used": 93
      },
      {
        "insn": 908453635,
        "free": 31039,
        "used": 92
      },
      {
        "insn": 908467821,
        "free": 31040,
        "used": 91
      },
      {
        "insn": 908489651,
        "free": 31041,
        "used": 90
      },
      {
        "insn": 908502102,
        "free": 31042,
        "used": 89
      },
      {
        "insn": 908514620,
        "free": 31043,
        "used": 88
      },
      {
        "insn": 908530696,
        "free": 31044,
        "used": 87
      },
      {
        "insn": 908546667,
        "free": 31045,
        "used": 86
      },
      {
        "insn": 908568068,
        "free": 31046,
        "used": 85
      },
      {
        "insn": 908580462,
        "free": 31047,
        "used": 84
      },
      {
        "insn": 908594648,
        "free": 31048,
        "used": 83
      },
      {
        "insn": 908619921,
        "free": 31047,
        "used": 84
      },
      {
        "insn": 908644669,
        "free": 31046,
        "used": 85
      },
      {
        "insn": 908669364,
        "free": 31045,
        "used": 86
      },
      {
        "insn": 908719385,
        "free": 31044,
        "used": 87
      },
      {
        "insn": 908752325,
        "free": 31043,
        "used": 88
      },
      {
        "insn": 908777020,
        "free": 31042,
        "used": 89
      },
      {
        "insn": 908801828,
        "free": 31041,
        "used": 90
      },
      {
        "insn": 908834968,
        "free": 31040,
        "used": 91
      },
      {
        "insn": 908878818,
        "free": 31039,
        "used": 92
      },
      {
        "insn": 908903566,
        "free": 31038,
        "used": 93
      },
      {
        "insn": 908928261,
        "free": 31037,
        "used": 94
      },
      {
        "insn": 908978282,
        "free": 31036,
        "used": 95
      },
      {
        "insn": 909011222,
        "free": 31035,
        "used": 96
      },
      {
        "insn": 909035917,
        "free": 31034,
        "used": 97
      },
      {
        "insn": 909060725,
        "free": 31033,
        "used": 98
      },
      {
        "insn": 909093865,
        "free": 31032,
        "used": 99
      },
      {
        "insn": 909137719,
        "free": 31031,
        "used": 100
      },
      {
        "insn": 909162467,
        "free": 31030,
        "used": 101
      },
      {
        "insn": 909187162,
        "free": 31029,
        "used": 102
      },
      {
        "insn": 909237183,
        "free": 31028,
        "used": 103
      },
      {
        "insn": 909270123,
        "free": 31027,
        "used": 104
      },
      {
        "insn": 909294818,
        "free": 31026,
        "used": 105
      },
      {
        "insn": 909319626,
        "free": 31025,
        "used": 106
      },
      {
        "insn": 909352766,
        "free": 31024,
        "used": 107
      },
      {
        "insn": 909396624,
        "free": 31023,
        "used": 108
      },
      {
        "insn": 909421372,
        "free": 31022,
        "used": 109
      },
      {
        "insn": 909446067,
        "free": 31021,
        "used": 110
      },
      {
        "insn": 909496088,
        "free": 31020,
        "used": 111
      },
      {
        "insn": 909529028,
        "free": 31019,
        "used": 112
      },
      {
        "insn": 909553723,
        "free": 31018,
        "used": 113
      },
      {
        "insn": 909578531,
        "free": 31017,
        "used": 114
      },
      {
        "insn": 909611671,
        "free": 31016,
        "used": 115
      },
      {
        "insn": 909655486,
        "free": 31017,
        "used": 114
      },
      {
        "insn": 909667937,
        "free": 31018,
        "used": 113
      },
      {
        "insn": 909680455,
        "free": 31019,
        "used": 112
      },
      {
        "insn": 909696531,
        "free": 31020,
        "used": 111
      },
      {
        "insn": 909712502,
        "free": 31021,
        "used": 110
      },
      {
        "insn": 909733903,
        "free": 31022,
        "used": 109
      },
      {
        "insn": 909746297,
        "free": 31023,
        "used": 108
      },
      {
        "insn": 909760483,
        "free": 31024,
        "used": 107
      },
      {
        "insn": 909782737,
        "free": 31025,
        "used": 106
      },
      {
        "insn": 909795188,
        "free": 31026,
        "used": 105
      },
      {
        "insn": 909807706,
        "free": 31027,
        "used": 104
      },
      {
        "insn": 909823782,
        "free": 31028,
        "used": 103
      },
      {
        "insn": 909839753,
        "free": 31029,
        "used": 102
      },
      {
        "insn": 909861154,
        "free": 31030,
        "used": 101
      },
      {
        "insn": 909873548,
        "free": 31031,
        "used": 100
      },
      {
        "insn": 909887734,
        "free": 31032,
        "used": 99
      },
      {
        "insn": 909909988,
        "free": 31033,
        "used": 98
      },
      {
        "insn": 909922439,
        "free": 31034,
        "used": 97
      },
      {
        "insn": 909934957,
        "free": 31035,
        "used": 96
      },
      {
        "insn": 909951033,
        "free": 31036,
        "used": 95
      },
      {
        "insn": 909967004,
        "free": 31037,
        "used": 94
      },
      {
        "insn": 909988405,
        "free": 31038,
        "used": 93
      },
      {
        "insn": 910000799,
        "free": 31039,
        "used": 92
      },
      {
        "insn": 910014985,
        "free": 31040,
        "used": 91
      },
      {
        "insn": 910037239,
        "free": 31041,
        "used": 90
      },
      {
        "insn": 910049690,
        "free": 31042,
        "used": 89
      },
      {
        "insn": 910062208,
        "free": 31043,
        "used": 88
      },
      {
        "insn": 910078284,
        "free": 31044,
        "used": 87
      },
      {
        "insn": 910094255,
        "free": 31045,
        "used": 86
      },
      {
        "insn": 910115656,
        "free": 31046,
        "used": 85
      },
      {
        "insn": 910128050,
        "free": 31047,
        "used": 84
      },
      {
        "insn": 910142236,
        "free": 31048,
        "used": 83
      },
      {
        "insn": 910167525,
        "free": 31047,
        "used": 84
      },
      {
        "insn": 910192273,
        "free": 31046,
        "used": 85
      },
      {
        "insn": 910216968,
        "free": 31045,
        "used": 86
      },
      {
        "insn": 910266989,
        "free": 31044,
        "used": 87
      },
      {
        "insn": 910299929,
        "free": 31043,
        "used": 88
      },
      {
        "insn": 910324624,
        "free": 31042,
        "used": 89
      },
      {
        "insn": 910349432,
        "free": 31041,
        "used": 90
      },
      {
        "insn": 910382572,
        "free": 31040,
        "used": 91
      },
      {
        "insn": 910426438,
        "free": 31039,
        "used": 92
      },
      {
        "insn": 910451186,
        "free": 31038,
        "used": 93
      },
      {
        "insn": 910475881,
        "free": 31037,
        "used": 94
      },
      {
        "insn": 910525902,
        "free": 31036,
        "used": 95
      },
      {
        "insn": 910558842,
        "free": 31035,
        "used": 96
      },
      {
        "insn": 910583537,
        "free": 31034,
        "used": 97
      },
      {
        "insn": 910608345,
        "free": 31033,
        "used": 98
      },
      {
        "insn": 910641485,
        "free": 31032,
        "used": 99
      },
      {
        "insn": 910685355,
        "free": 31031,
        "used": 100
      },
      {
        "insn": 910710103,
        "free": 31030,
        "used": 101
      },
      {
        "insn": 910734798,
        "free": 31029,
        "used": 102
      },
      {
        "insn": 910784819,
        "free": 31028,
        "used": 103
      },
      {
        "insn": 910817759,
        "free": 31027,
        "used": 104
      },
      {
        "insn": 910842454,
        "free": 31026,
        "used": 105
      },
      {
        "insn": 910867262,
        "free": 31025,
        "used": 106
      },
      {
        "insn": 910900402,
        "free": 31024,
        "used": 107
      },
      {
        "insn": 910944276,
        "free": 31023,
        "used": 108
      },
      {
        "insn": 910969024,
        "free": 31022,
        "used": 109
      },
      {
        "insn": 910993719,
        "free": 31021,
        "used": 110
      },
      {
        "insn": 911043740,
        "free": 31020,
        "used": 111
      },
      {
        "insn": 911076680,
        "free": 31019,
        "used": 112
      },
      {
        "insn": 911101375,
        "free": 31018,
        "used": 113
      },
      {
        "insn": 911126183,
        "free": 31017,
        "used": 114
      },
      {
        "insn": 911159323,
        "free": 31016,
        "used": 115
      },
      {
        "insn": 911203201,
        "free": 31015,
        "used": 116
      },
      {
        "insn": 911227949,
        "free": 31014,
        "used": 117
      },
      {
        "insn": 911252644,
        "free": 31013,
        "used": 118
      },
      {
        "insn": 911302665,
        "free": 31012,
        "used": 119
      },
      {
        "insn": 911335605,
        "free": 31011,
        "used": 120
      },
      {
        "insn": 911360300,
        "free": 31010,
        "used": 121
      },
      {
        "insn": 911385108,
        "free": 31009,
        "used": 122
      },
      {
        "insn": 911418248,
        "free": 31008,
        "used": 123
      },
      {
        "insn": 911462497,
        "free": 31009,
        "used": 122
      },
      {
        "insn": 911474948,
        "free": 31010,
        "used": 121
      },
      {
        "insn": 911487466,
        "free": 31011,
        "used": 120
      },
      {
        "insn": 911503542,
        "free": 31012,
        "used": 119
      },
      {
        "insn": 911519513,
        "free": 31013,
        "used": 118
      },
      {
        "insn": 911540914,
        "free": 31014,
        "used": 117
      },
      {
        "insn": 911553308,
        "free": 31015,
        "used": 116
      },
      {
        "insn": 911567494,
        "free": 31016,
        "used": 115
      },
      {
        "insn": 911589748,
        "free": 31017,
        "used": 114
      },
      {
        "insn": 911602199,
        "free": 31018,
        "used": 113
      },
      {
        "insn": 911614717,
        "free": 31019,
        "used": 112
      },
      {
        "insn": 911630793,
        "free": 31020,
        "used": 111
      },
      {
        "insn": 911646764,
        "free": 31021,
        "used": 110
      },
      {
        "insn": 911668165,
        "free": 31022,
        "used": 109
      },
      {
        "insn": 911680559,
        "free": 31023,
        "used": 108
      },
      {
        "insn": 911694745,
        "free": 31024,
        "used": 107
      },
      {
        "insn": 911716999,
        "free": 31025,
        "used": 106
      },
      {
        "insn": 911729450,
        "free": 31026,
        "used": 105
      },
      {
        "insn": 911741968,
        "free": 31027,
        "used": 104
      },
      {
        "insn": 911758044,
        "free": 31028,
        "used": 103
      },
      {
        "insn": 911774015,
        "free": 31029,
        "used": 102
      },
      {
        "insn": 911795416,
        "free": 31030,
        "used": 101
      },
      {
        "insn": 911807810,
        "free": 31031,
        "used": 100
      },
      {
        "insn": 911821996,
        "free": 31032,
        "used": 99
      },
      {
        "insn": 911844250,
        "free": 31033,
        "used": 98
      },
      {
        "insn": 911856701,
        "free": 31034,
        "used": 97
      },
      {
        "insn": 911869219,
        "free": 31035,
        "used": 96
      },
      {
        "insn": 911885295,
        "free": 31036,
        "used": 95
      },
      {
        "insn": 911901266,
        "free": 31037,
        "used": 94
      },
      {
        "insn": 911922667,
        "free": 31038,
        "used": 93
      },
      {
        "insn": 911935061,
        "free": 31039,
        "used": 92
      },
      {
        "insn": 911949247,
        "free": 31040,
        "used": 91
      },
      {
        "insn": 911971501,
        "free": 31041,
        "used": 90
      },
      {
        "insn": 911983952,
        "free": 31042,
        "used": 89
      },
      {
        "insn": 911996470,
        "free": 31043,
        "used": 88
      },
      {
        "insn": 912012546,
        "free": 31044,
        "used": 87
      },
      {
        "insn": 912028517,
        "free": 31045,
        "used": 86
      },
      {
        "insn": 912049918,
        "free": 31046,
        "used": 85
      },
      {
        "insn": 912062312,
        "free": 31047,
        "used": 84
      },
      {
        "insn": 912076498,
        "free": 31048,
        "used": 83
      },
      {
        "insn": 912101807,
        "free": 31047,
        "used": 84
      },
      {
        "insn": 912126555,
        "free": 31046,
        "used": 85
      },
      {
        "insn": 912151250,
        "free": 31045,
        "used": 86
      },
      {
        "insn": 912201271,
        "free": 31044,
        "used": 87
      },
      {
        "insn": 912234211,
        "free": 31043,
        "used": 88
      },
      {
        "insn": 912258906,
        "free": 31042,
        "used": 89
      },
      {
        "insn": 912283714,
        "free": 31041,
        "used": 90
      },
      {
        "insn": 912316854,
        "free": 31040,
        "used": 91
      },
      {
        "insn": 912360740,
        "free": 31039,
        "used": 92
      },
      {
        "insn": 912385488,
        "free": 31038,
        "used": 93
      },
      {
        "insn": 912410183,
        "free": 31037,
        "used": 94
      },
      {
        "insn": 912460204,
        "free": 31036,
        "used": 95
      },
      {
        "insn": 912493144,
        "free": 31035,
        "used": 96
      },
      {
        "insn": 912517839,
        "free": 31034,
        "used": 97
      },
      {
        "insn": 912542647,
        "free": 31033,
        "used": 98
      },
      {
        "insn": 912575787,
        "free": 31032,
        "used": 99
      },
      {
        "insn": 912619677,
        "free": 31031,
        "used": 100
      },
      {
        "insn": 912644425,
        "free": 31030,
        "used": 101
      },
      {
        "insn": 912669120,
        "free": 31029,
        "used": 102
      },
      {
        "insn": 912719141,
        "free": 31028,
        "used": 103
      },
      {
        "insn": 912752081,
        "free": 31027,
        "used": 104
      },
      {
        "insn": 912776776,
        "free": 31026,
        "used": 105
      },
      {
        "insn": 912801584,
        "free": 31025,
        "used": 106
      },
      {
        "insn": 912834724,
        "free": 31024,
        "used": 107
      },
      {
        "insn": 912878618,
        "free": 31023,
        "used": 108
      },
      {
        "insn": 912903366,
        "free": 31022,
        "used": 109
      },
      {
        "insn": 912928061,
        "free": 31021,
        "used": 110
      },
      {
        "insn": 912978082,
        "free": 31020,
        "used": 111
      },
      {
        "insn": 913011022,
        "free": 31019,
        "used": 112
      },
      {
        "insn": 913035717,
        "free": 31018,
        "used": 113
      },
      {
        "insn": 913060525,
        "free": 31017,
        "used": 114
      },
      {
        "insn": 913093665,
        "free": 31016,
        "used": 115
      },
      {
        "insn": 913137922,
        "free": 31017,
        "used": 114
      },
      {
        "insn": 913150373,
        "free": 31018,
        "used": 113
      },
      {
        "insn": 913162891,
        "free": 31019,
        "used": 112
      },
      {
        "insn": 913178967,
        "free": 31020,
        "used": 111
      },
      {
        "insn": 913194938,
        "free": 31021,
        "used": 110
      },
      {
        "insn": 913216339,
        "free": 31022,
        "used": 109
      },
      {
        "insn": 913228733,
        "free": 31023,
        "used": 108
      },
      {
        "insn": 913242919,
        "free": 31024,
        "used": 107
      },
      {
        "insn": 913265173,
        "free": 31025,
        "used": 106
      },
      {
        "insn": 913277624,
        "free": 31026,
        "used": 105
      },
      {
        "insn": 913290142,
        "free": 31027,
        "used": 104
      },
      {
        "insn": 913306218,
        "free": 31028,
        "used": 103
      },
      {
        "insn": 913322189,
        "free": 31029,
        "used": 102
      },
      {
        "insn": 913343590,
        "free": 31030,
        "used": 101
      },
      {
        "insn": 913355984,
        "free": 31031,
        "used": 100
      },
      {
        "insn": 913370170,
        "free": 31032,
        "used": 99
      },
      {
        "insn": 913392424,
        "free": 31033,
        "used": 98
      },
      {
        "insn": 913404875,
        "free": 31034,
        "used": 97
      },
      {
        "insn": 913417393,
        "free": 31035,
        "used": 96
      },
      {
        "insn": 913433469,
        "free": 31036,
        "used": 95
      },
      {
        "insn": 913449440,
        "free": 31037,
        "used": 94
      },
      {
        "insn": 913470841,
        "free": 31038,
        "used": 93
      },
      {
        "insn": 913483235,
        "free": 31039,
        "used": 92
      },
      {
        "insn": 913497421,
        "free": 31040,
        "used": 91
      },
      {
        "insn": 913519675,
        "free": 31041,
        "used": 90
      },
      {
        "insn": 913532126,
        "free": 31042,
        "used": 89
      },
      {
        "insn": 913544644,
        "free": 31043,
        "used": 88
      },
      {
        "insn": 913560720,
        "free": 31044,
        "used": 87
      },
      {
        "insn": 913576691,
        "free": 31045,
        "used": 86
      },
      {
        "insn": 913598092,
        "free": 31046,
        "used": 85
      },
      {
        "insn": 913610486,
        "free": 31047,
        "used": 84
      },
      {
        "insn": 913624672,
        "free": 31048,
        "used": 83
      },
      {
        "insn": 913649997,
        "free": 31047,
        "used": 84
      },
      {
        "insn": 913674745,
        "free": 31046,
        "used": 85
      },
      {
        "insn": 913699440,
        "free": 31045,
        "used": 86
      },
      {
        "insn": 913749461,
        "free": 31044,
        "used": 87
      },
      {
        "insn": 913782401,
        "free": 31043,
        "used": 88
      },
      {
        "insn": 913807096,
        "free": 31042,
        "used": 89
      },
      {
        "insn": 913831904,
        "free": 31041,
        "used": 90
      },
      {
        "insn": 913865044,
        "free": 31040,
        "used": 91
      },
      {
        "insn": 913908946,
        "free": 31039,
        "used": 92
      },
      {
        "insn": 913933694,
        "free": 31038,
        "used": 93
      },
      {
        "insn": 913958389,
        "free": 31037,
        "used": 94
      },
      {
        "insn": 914008410,
        "free": 31036,
        "used": 95
      },
      {
        "insn": 914041350,
        "free": 31035,
        "used": 96
      },
      {
        "insn": 914066045,
        "free": 31034,
        "used": 97
      },
      {
        "insn": 914090853,
        "free": 31033,
        "used": 98
      },
      {
        "insn": 914123993,
        "free": 31032,
        "used": 99
      },
      {
        "insn": 914167899,
        "free": 31031,
        "used": 100
      },
      {
        "insn": 914192647,
        "free": 31030,
        "used": 101
      },
      {
        "insn": 914217342,
        "free": 31029,
        "used": 102
      },
      {
        "insn": 914267363,
        "free": 31028,
        "used": 103
      },
      {
        "insn": 914300303,
        "free": 31027,
        "used": 104
      },
      {
        "insn": 914324998,
        "free": 31026,
        "used": 105
      },
      {
        "insn": 914349806,
        "free": 31025,
        "used": 106
      },
      {
        "insn": 914382946,
        "free": 31024,
        "used": 107
      },
      {
        "insn": 914426856,
        "free": 31023,
        "used": 108
      },
      {
        "insn": 914451604,
        "free": 31022,
        "used": 109
      },
      {
        "insn": 914476299,
        "free": 31021,
        "used": 110
      },
      {
        "insn": 914526320,
        "free": 31020,
        "used": 111
      },
      {
        "insn": 914559260,
        "free": 31019,
        "used": 112
      },
      {
        "insn": 914583955,
        "free": 31018,
        "used": 113
      },
      {
        "insn": 914608763,
        "free": 31017,
        "used": 114
      },
      {
        "insn": 914641903,
        "free": 31016,
        "used": 115
      },
      {
        "insn": 914685817,
        "free": 31015,
        "used": 116
      },
      {
        "insn": 914710565,
        "free": 31014,
        "used": 117
      },
      {
        "insn": 914735260,
        "free": 31013,
        "used": 118
      },
      {
        "insn": 914785281,
        "free": 31012,
        "used": 119
      },
      {
        "insn": 914818221,
        "free": 31011,
        "used": 120
      },
      {
        "insn": 914842916,
        "free": 31010,
        "used": 121
      },
      {
        "insn": 914867724,
        "free": 31009,
        "used": 122
      },
      {
        "insn": 914900864,
        "free": 31008,
        "used": 123
      },
      {
        "insn": 914945131,
        "free": 31009,
        "used": 122
      },
      {
        "insn": 914957582,
        "free": 31010,
        "used": 121
      },
      {
        "insn": 914970100,
        "free": 31011,
        "used": 120
      },
      {
        "insn": 914986176,
        "free": 31012,
        "used": 119
      },
      {
        "insn": 915002147,
        "free": 31013,
        "used": 118
      },
      {
        "insn": 915023548,
        "free": 31014,
        "used": 117
      },
      {
        "insn": 915035942,
        "free": 31015,
        "used": 116
      },
      {
        "insn": 915050128,
        "free": 31016,
        "used": 115
      },
      {
        "insn": 915072382,
        "free": 31017,
        "used": 114
      },
      {
        "insn": 915084833,
        "free": 31018,
        "used": 113
      },
      {
        "insn": 915097351,
        "free": 31019,
        "used": 112
      },
      {
        "insn": 915113427,
        "free": 31020,
        "used": 111
      },
      {
        "insn": 915129398,
        "free": 31021,
        "used": 110
      },
      {
        "insn": 915150799,
        "free": 31022,
        "used": 109
      },
      {
        "insn": 915163193,
        "free": 31023,
        "used": 108
      },
      {
        "insn": 915177379,
        "free": 31024,
        "used": 107
      },
      {
        "insn": 915199633,
        "free": 31025,
        "used": 106
      },
      {
        "insn": 915212084,
        "free": 31026,
        "used": 105
      },
      {
        "insn": 915224602,
        "free": 31027,
        "used": 104
      },
      {
        "insn": 915240678,
        "free": 31028,
        "used": 103
      },
      {
        "insn": 915256649,
        "free": 31029,
        "used": 102
      },
      {
        "insn": 915278050,
        "free": 31030,
        "used": 101
      },
      {
        "insn": 915290444,
        "free": 31031,
        "used": 100
      },
      {
        "insn": 915304630,
        "free": 31032,
        "used": 99
      },
      {
        "insn": 915326884,
        "free": 31033,
        "used": 98
      },
      {
        "insn": 915339335,
        "free": 31034,
        "used": 97
      },
      {
        "insn": 915351853,
        "free": 31035,
        "used": 96
      },
      {
        "insn": 915367929,
        "free": 31036,
        "used": 95
      },
      {
        "insn": 915383900,
        "free": 31037,
        "used": 94
      },
      {
        "insn": 915405301,
        "free": 31038,
        "used": 93
      },
      {
        "insn": 915417695,
        "free": 31039,
        "used": 92
      },
      {
        "insn": 915431881,
        "free": 31040,
        "used": 91
      },
      {
        "insn": 915454135,
        "free": 31041,
        "used": 90
      },
      {
        "insn": 915466586,
        "free": 31042,
        "used": 89
      },
      {
        "insn": 915479104,
        "free": 31043,
        "used": 88
      },
      {
        "insn": 915495180,
        "free": 31044,
        "used": 87
      },
      {
        "insn": 915511151,
        "free": 31045,
        "used": 86
      },
      {
        "insn": 915532552,
        "free": 31046,
        "used": 85
      },
      {
        "insn": 915544946,
        "free": 31047,
        "used": 84
      },
      {
        "insn": 915559132,
        "free": 31048,
        "used": 83
      },
      {
        "insn": 915584477,
        "free": 31047,
        "used": 84
      },
      {
        "insn": 915609225,
        "free": 31046,
        "used": 85
      },
      {
        "insn": 915633920,
        "free": 31045,
        "used": 86
      },
      {
        "insn": 915683941,
        "free": 31044,
        "used": 87
      },
      {
        "insn": 915716881,
        "free": 31043,
        "used": 88
      },
      {
        "insn": 915741576,
        "free": 31042,
        "used": 89
      },
      {
        "insn": 915766384,
        "free": 31041,
        "used": 90
      },
      {
        "insn": 915799524,
        "free": 31040,
        "used": 91
      },
      {
        "insn": 915843446,
        "free": 31039,
        "used": 92
      },
      {
        "insn": 915868194,
        "free": 31038,
        "used": 93
      },
      {
        "insn": 915892889,
        "free": 31037,
        "used": 94
      },
      {
        "insn": 915942910,
        "free": 31036,
        "used": 95
      },
      {
        "insn": 915975850,
        "free": 31035,
        "used": 96
      },
      {
        "insn": 916000545,
        "free": 31034,
        "used": 97
      },
      {
        "insn": 916025353,
        "free": 31033,
        "used": 98
      },
      {
        "insn": 916058493,
        "free": 31032,
        "used": 99
      },
      {
        "insn": 916102419,
        "free": 31031,
        "used": 100
      },
      {
        "insn": 916127167,
        "free": 31030,
        "used": 101
      },
      {
        "insn": 916151862,
        "free": 31029,
        "used": 102
      },
      {
        "insn": 916201883,
        "free": 31028,
        "used": 103
      },
      {
        "insn": 916234823,
        "free": 31027,
        "used": 104
      },
      {
        "insn": 916259518,
        "free": 31026,
        "used": 105
      },
      {
        "insn": 916284326,
        "free": 31025,
        "used": 106
      },
      {
        "insn": 916317466,
        "free": 31024,
        "used": 107
      },
      {
        "insn": 916361396,
        "free": 31023,
        "used": 108
      },
      {
        "insn": 916386144,
        "free": 31022,
        "used": 109
      },
      {
        "insn": 916410839,
        "free": 31021,
        "used": 110
      },
      {
        "insn": 916460860,
        "free": 31020,
        "used": 111
      },
      {
        "insn": 916493800,
        "free": 31019,
        "used": 112
      },
      {
        "insn": 916518495,
        "free": 31018,
        "used": 113
      },
      {
        "insn": 916543303,
        "free": 31017,
        "used": 114
      },
      {
        "insn": 916576443,
        "free": 31016,
        "used": 115
      },
      {
        "insn": 916620718,
        "free": 31017,
        "used": 114
      },
      {
        "insn": 916633169,
        "free": 31018,
        "used": 113
      },
      {
        "insn": 916645687,
        "free": 31019,
        "used": 112
      },
      {
        "insn": 916661763,
        "free": 31020,
        "used": 111
      },
      {
        "insn": 916677734,
        "free": 31021,
        "used": 110
      },
      {
        "insn": 916699135,
        "free": 31022,
        "used": 109
      },
      {
        "insn": 916711529,
        "free": 31023,
        "used": 108
      },
      {
        "insn": 916725715,
        "free": 31024,
        "used": 107
      },
      {
        "insn": 916747969,
        "free": 31025,
        "used": 106
      },
      {
        "insn": 916760420,
        "free": 31026,
        "used": 105
      },
      {
        "insn": 916772938,
        "free": 31027,
        "used": 104
      },
      {
        "insn": 916789014,
        "free": 31028,
        "used": 103
      },
      {
        "insn": 916804985,
        "free": 31029,
        "used": 102
      },
      {
        "insn": 916826386,
        "free": 31030,
        "used": 101
      },
      {
        "insn": 916838780,
        "free": 31031,
        "used": 100
      },
      {
        "insn": 916852966,
        "free": 31032,
        "used": 99
      },
      {
        "insn": 916875220,
        "free": 31033,
        "used": 98
      },
      {
        "insn": 916887671,
        "free": 31034,
        "used": 97
      },
      {
        "insn": 916900189,
        "free": 31035,
        "used": 96
      },
      {
        "insn": 916916265,
        "free": 31036,
        "used": 95
      },
      {
        "insn": 916932236,
        "free": 31037,
        "used": 94
      },
      {
        "insn": 916953637,
        "free": 31038,
        "used": 93
      },
      {
        "insn": 916966031,
        "free": 31039,
        "used": 92
      },
      {
        "insn": 916980217,
        "free": 31040,
        "used": 91
      },
      {
        "insn": 917002471,
        "free": 31041,
        "used": 90
      },
      {
        "insn": 917014922,
        "free": 31042,
        "used": 89
      },
      {
        "insn": 917027440,
        "free": 31043,
        "used": 88
      },
      {
        "insn": 917043516,
        "free": 31044,
        "used": 87
      },
      {
        "insn": 917059487,
        "free": 31045,
        "used": 86
      },
      {
        "insn": 917080888,
        "free": 31046,
        "used": 85
      },
      {
        "insn": 917093282,
        "free": 31047,
        "used": 84
      },
      {
        "insn": 917107468,
        "free": 31048,
        "used": 83
      },
      {
        "insn": 917132829,
        "free": 31047,
        "used": 84
      },
      {
        "insn": 917157577,
        "free": 31046,
        "used": 85
      },
      {
        "insn": 917182272,
        "free": 31045,
        "used": 86
      },
      {
        "insn": 917232293,
        "free": 31044,
        "used": 87
      },
      {
        "insn": 917265233,
        "free": 31043,
        "used": 88
      },
      {
        "insn": 917289928,
        "free": 31042,
        "used": 89
      },
      {
        "insn": 917314736,
        "free": 31041,
        "used": 90
      },
      {
        "insn": 917347876,
        "free": 31040,
        "used": 91
      },
      {
        "insn": 917391814,
        "free": 31039,
        "used": 92
      },
      {
        "insn": 917416562,
        "free": 31038,
        "used": 93
      },
      {
        "insn": 917441257,
        "free": 31037,
        "used": 94
      },
      {
        "insn": 917491278,
        "free": 31036,
        "used": 95
      },
      {
        "insn": 917524218,
        "free": 31035,
        "used": 96
      },
      {
        "insn": 917548913,
        "free": 31034,
        "used": 97
      },
      {
        "insn": 917573721,
        "free": 31033,
        "used": 98
      },
      {
        "insn": 917606861,
        "free": 31032,
        "used": 99
      },
      {
        "insn": 917650803,
        "free": 31031,
        "used": 100
      },
      {
        "insn": 917675551,
        "free": 31030,
        "used": 101
      },
      {
        "insn": 917700246,
        "free": 31029,
        "used": 102
      },
      {
        "insn": 917750267,
        "free": 31028,
        "used": 103
      },
      {
        "insn": 917783207,
        "free": 31027,
        "used": 104
      },
      {
        "insn": 917807902,
        "free": 31026,
        "used": 105
      },
      {
        "insn": 917832710,
        "free": 31025,
        "used": 106
      },
      {
        "insn": 917865850,
        "free": 31024,
        "used": 107
      },
      {
        "insn": 917909796,
        "free": 31023,
        "used": 108
      },
      {
        "insn": 917934544,
        "free": 31022,
        "used": 109
      },
      {
        "insn": 917959239,
        "free": 31021,
        "used": 110
      },
      {
        "insn": 918009260,
        "free": 31020,
        "used": 111
      },
      {
        "insn": 918042200,
        "free": 31019,
        "used": 112
      },
      {
        "insn": 918066895,
        "free": 31018,
        "used": 113
      },
      {
        "insn": 918091703,
        "free": 31017,
        "used": 114
      },
      {
        "insn": 918124843,
        "free": 31016,
        "used": 115
      },
      {
        "insn": 918168793,
        "free": 31015,
        "used": 116
      },
      {
        "insn": 918193541,
        "free": 31014,
        "used": 117
      },
      {
        "insn": 918218236,
        "free": 31013,
        "used": 118
      },
      {
        "insn": 918268257,
        "free": 31012,
        "used": 119
      },
      {
        "insn": 918301197,
        "free": 31011,
        "used": 120
      },
      {
        "insn": 918325892,
        "free": 31010,
        "used": 121
      },
      {
        "insn": 918350700,
        "free": 31009,
        "used": 122
      },
      {
        "insn": 918383840,
        "free": 31008,
        "used": 123
      },
      {
        "insn": 918428125,
        "free": 31009,
        "used": 122
      },
      {
        "insn": 918440576,
        "free": 31010,
        "used": 121
      },
      {
        "insn": 918453094,
        "free": 31011,
        "used": 120
      },
      {
        "insn": 918469170,
        "free": 31012,
        "used": 119
      },
      {
        "insn": 918485141,
        "free": 31013,
        "used": 118
      },
      {
        "insn": 918506542,
        "free": 31014,
        "used": 117
      },
      {
        "insn": 918518936,
        "free": 31015,
        "used": 116
      },
      {
        "insn": 918533122,
        "free": 31016,
        "used": 115
      },
      {
        "insn": 918555376,
        "free": 31017,
        "used": 114
      },
      {
        "insn": 918567827,
        "free": 31018,
        "used": 113
      },
      {
        "insn": 918580345,
        "free": 31019,
        "used": 112
      },
      {
        "insn": 918596421,
        "free": 31020,
        "used": 111
      },
      {
        "insn": 918612392,
        "free": 31021,
        "used": 110
      },
      {
        "insn": 918633793,
        "free": 31022,
        "used": 109
      },
      {
        "insn": 918646187,
        "free": 31023,
        "used": 108
      },
      {
        "insn": 918660373,
        "free": 31024,
        "used": 107
      },
      {
        "insn": 918682627,
        "free": 31025,
        "used": 106
      },
      {
        "insn": 918695078,
        "free": 31026,
        "used": 105
      },
      {
        "insn": 918707596,
        "free": 31027,
        "used": 104
      },
      {
        "insn": 918723672,
        "free": 31028,
        "used": 103
      },
      {
        "insn": 918739643,
        "free": 31029,
        "used": 102
      },
      {
        "insn": 918761044,
        "free": 31030,
        "used": 101
      },
      {
        "insn": 918773438,
        "free": 31031,
        "used": 100
      },
      {
        "insn": 918787624,
        "free": 31032,
        "used": 99
      },
      {
        "insn": 918809878,
        "free": 31033,
        "used": 98
      },
      {
        "insn": 918822329,
        "free": 31034,
        "used": 97
      },
      {
        "insn": 918834847,
        "free": 31035,
        "used": 96
      },
      {
        "insn": 918850923,
        "free": 31036,
        "used": 95
      },
      {
        "insn": 918866894,
        "free": 31037,
        "used": 94
      },
      {
        "insn": 918888295,
        "free": 31038,
        "used": 93
      },
      {
        "insn": 918900689,
        "free": 31039,
        "used": 92
      },
      {
        "insn": 918914875,
        "free": 31040,
        "used": 91
      },
      {
        "insn": 918937129,
        "free": 31041,
        "used": 90
      },
      {
        "insn": 918949580,
        "free": 31042,
        "used": 89
      },
      {
        "insn": 918962098,
        "free": 31043,
        "used": 88
      },
      {
        "insn": 918978174,
        "free": 31044,
        "used": 87
      },
      {
        "insn": 918994145,
        "free": 31045,
        "used": 86
      },
      {
        "insn": 919015546,
        "free": 31046,
        "used": 85
      },
      {
        "insn": 919027940,
        "free": 31047,
        "used": 84
      },
      {
        "insn": 919042126,
        "free": 31048,
        "used": 83
      },
      {
        "insn": 919067507,
        "free": 31047,
        "used": 84
      },
      {
        "insn": 919092255,
        "free": 31046,
        "used": 85
      },
      {
        "insn": 919116950,
        "free": 31045,
        "used": 86
      },
      {
        "insn": 919166971,
        "free": 31044,
        "used": 87
      },
      {
        "insn": 919199911,
        "free": 31043,
        "used": 88
      },
      {
        "insn": 919224606,
        "free": 31042,
        "used": 89
      },
      {
        "insn": 919249414,
        "free": 31041,
        "used": 90
      },
      {
        "insn": 919282554,
        "free": 31040,
        "used": 91
      },
      {
        "insn": 919326512,
        "free": 31039,
        "used": 92
      },
      {
        "insn": 919351260,
        "free": 31038,
        "used": 93
      },
      {
        "insn": 919375955,
        "free": 31037,
        "used": 94
      },
      {
        "insn": 919425976,
        "free": 31036,
        "used": 95
      },
      {
        "insn": 919458916,
        "free": 31035,
        "used": 96
      },
      {
        "insn": 919483611,
        "free": 31034,
        "used": 97
      },
      {
        "insn": 919508419,
        "free": 31033,
        "used": 98
      },
      {
        "insn": 919541559,
        "free": 31032,
        "used": 99
      },
      {
        "insn": 919585521,
        "free": 31031,
        "used": 100
      },
      {
        "insn": 919610269,
        "free": 31030,
        "used": 101
      },
      {
        "insn": 919634964,
        "free": 31029,
        "used": 102
      },
      {
        "insn": 919684985,
        "free": 31028,
        "used": 103
      },
      {
        "insn": 919717925,
        "free": 31027,
        "used": 104
      },
      {
        "insn": 919742620,
        "free": 31026,
        "used": 105
      },
      {
        "insn": 919767428,
        "free": 31025,
        "used": 106
      },
      {
        "insn": 919800568,
        "free": 31024,
        "used": 107
      },
      {
        "insn": 919844534,
        "free": 31023,
        "used": 108
      },
      {
        "insn": 919869282,
        "free": 31022,
        "used": 109
      },
      {
        "insn": 919893977,
        "free": 31021,
        "used": 110
      },
      {
        "insn": 919943998,
        "free": 31020,
        "used": 111
      },
      {
        "insn": 919976938,
        "free": 31019,
        "used": 112
      },
      {
        "insn": 920001633,
        "free": 31018,
        "used": 113
      },
      {
        "insn": 920026441,
        "free": 31017,
        "used": 114
      },
      {
        "insn": 920059581,
        "free": 31016,
        "used": 115
      },
      {
        "insn": 920103874,
        "free": 31017,
        "used": 114
      },
      {
        "insn": 920116325,
        "free": 31018,
        "used": 113
      },
      {
        "insn": 920128843,
        "free": 31019,
        "used": 112
      },
      {
        "insn": 920144919,
        "free": 31020,
        "used": 111
      },
      {
        "insn": 920160890,
        "free": 31021,
        "used": 110
      },
      {
        "insn": 920182291,
        "free": 31022,
        "used": 109
      },
      {
        "insn": 920194685,
        "free": 31023,
        "used": 108
      },
      {
        "insn": 920208871,
        "free": 31024,
        "used": 107
      },
      {
        "insn": 920231125,
        "free": 31025,
        "used": 106
      },
      {
        "insn": 920243576,
        "free": 31026,
        "used": 105
      },
      {
        "insn": 920256094,
        "free": 31027,
        "used": 104
      },
      {
        "insn": 920272170,
        "free": 31028,
        "used": 103
      },
      {
        "insn": 920288141,
        "free": 31029,
        "used": 102
      },
      {
        "insn": 920309542,
        "free": 31030,
        "used": 101
      },
      {
        "insn": 920321936,
        "free": 31031,
        "used": 100
      },
      {
        "insn": 920336122,
        "free": 31032,
        "used": 99
      },
      {
        "insn": 920358376,
        "free": 31033,
        "used": 98
      },
      {
        "insn": 920370827,
        "free": 31034,
        "used": 97
      },
      {
        "insn": 920383345,
        "free": 31035,
        "used": 96
      },
      {
        "insn": 920399421,
        "free": 31036,
        "used": 95
      },
      {
        "insn": 920415392,
        "free": 31037,
        "used": 94
      },
      {
        "insn": 920436793,
        "free": 31038,
        "used": 93
      },
      {
        "insn": 920449187,
        "free": 31039,
        "used": 92
      },
      {
        "insn": 920463373,
        "free": 31040,
        "used": 91
      },
      {
        "insn": 920485627,
        "free": 31041,
        "used": 90
      },
      {
        "insn": 920498078,
        "free": 31042,
        "used": 89
      },
      {
        "insn": 920510596,
        "free": 31043,
        "used": 88
      },
      {
        "insn": 920526672,
        "free": 31044,
        "used": 87
      },
      {
        "insn": 920542643,
        "free": 31045,
        "used": 86
      },
      {
        "insn": 920564044,
        "free": 31046,
        "used": 85
      },
      {
        "insn": 920576438,
        "free": 31047,
        "used": 84
      },
      {
        "insn": 920590624,
        "free": 31048,
        "used": 83
      },
      {
        "insn": 920651055,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 920663506,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 920676024,
        "free": 31051,
        "used": 80
      },
      {
        "insn": 920692100,
        "free": 31052,
        "used": 79
      },
      {
        "insn": 920708071,
        "free": 31053,
        "used": 78
      },
      {
        "insn": 920729472,
        "free": 31054,
        "used": 77
      },
      {
        "insn": 920741866,
        "free": 31055,
        "used": 76
      },
      {
        "insn": 920756052,
        "free": 31056,
        "used": 75
      },
      {
        "insn": 920814537,
        "free": 31055,
        "used": 76
      },
      {
        "insn": 920839285,
        "free": 31054,
        "used": 77
      },
      {
        "insn": 920863980,
        "free": 31053,
        "used": 78
      },
      {
        "insn": 920914001,
        "free": 31052,
        "used": 79
      },
      {
        "insn": 920946941,
        "free": 31051,
        "used": 80
      },
      {
        "insn": 920971636,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 920996444,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 921029584,
        "free": 31048,
        "used": 83
      },
      {
        "insn": 921067433,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 921079884,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 921092402,
        "free": 31051,
        "used": 80
      },
      {
        "insn": 921104849,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 921137867,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 921170902,
        "free": 31048,
        "used": 83
      },
      {
        "insn": 921196210,
        "free": 31047,
        "used": 84
      },
      {
        "insn": 921220958,
        "free": 31046,
        "used": 85
      },
      {
        "insn": 921245653,
        "free": 31045,
        "used": 86
      },
      {
        "insn": 921295674,
        "free": 31044,
        "used": 87
      },
      {
        "insn": 921328614,
        "free": 31043,
        "used": 88
      },
      {
        "insn": 921353309,
        "free": 31042,
        "used": 89
      },
      {
        "insn": 921378117,
        "free": 31041,
        "used": 90
      },
      {
        "insn": 921411257,
        "free": 31040,
        "used": 91
      },
      {
        "insn": 921444967,
        "free": 31039,
        "used": 92
      },
      {
        "insn": 921469715,
        "free": 31038,
        "used": 93
      },
      {
        "insn": 921494410,
        "free": 31037,
        "used": 94
      },
      {
        "insn": 921544431,
        "free": 31036,
        "used": 95
      },
      {
        "insn": 921577371,
        "free": 31035,
        "used": 96
      },
      {
        "insn": 921602066,
        "free": 31034,
        "used": 97
      },
      {
        "insn": 921626874,
        "free": 31033,
        "used": 98
      },
      {
        "insn": 921660014,
        "free": 31032,
        "used": 99
      },
      {
        "insn": 921697745,
        "free": 31033,
        "used": 98
      },
      {
        "insn": 921710196,
        "free": 31034,
        "used": 97
      },
      {
        "insn": 921722714,
        "free": 31035,
        "used": 96
      },
      {
        "insn": 921735161,
        "free": 31034,
        "used": 97
      },
      {
        "insn": 921768179,
        "free": 31033,
        "used": 98
      },
      {
        "insn": 921801214,
        "free": 31032,
        "used": 99
      },
      {
        "insn": 921851991,
        "free": 31033,
        "used": 98
      },
      {
        "insn": 921864442,
        "free": 31034,
        "used": 97
      },
      {
        "insn": 921876960,
        "free": 31035,
        "used": 96
      },
      {
        "insn": 921893036,
        "free": 31036,
        "used": 95
      },
      {
        "insn": 921909007,
        "free": 31037,
        "used": 94
      },
      {
        "insn": 921930408,
        "free": 31038,
        "used": 93
      },
      {
        "insn": 921942802,
        "free": 31039,
        "used": 92
      },
      {
        "insn": 921956988,
        "free": 31040,
        "used": 91
      },
      {
        "insn": 921972756,
        "free": 31041,
        "used": 90
      },
      {
        "insn": 921985207,
        "free": 31042,
        "used": 89
      },
      {
        "insn": 921997725,
        "free": 31043,
        "used": 88
      },
      {
        "insn": 922010172,
        "free": 31042,
        "used": 89
      },
      {
        "insn": 922043190,
        "free": 31041,
        "used": 90
      },
      {
        "insn": 922076225,
        "free": 31040,
        "used": 91
      },
      {
        "insn": 922127002,
        "free": 31041,
        "used": 90
      },
      {
        "insn": 922139453,
        "free": 31042,
        "used": 89
      },
      {
        "insn": 922151971,
        "free": 31043,
        "used": 88
      },
      {
        "insn": 922168047,
        "free": 31044,
        "used": 87
      },
      {
        "insn": 922184018,
        "free": 31045,
        "used": 86
      },
      {
        "insn": 922205419,
        "free": 31046,
        "used": 85
      },
      {
        "insn": 922217813,
        "free": 31047,
        "used": 84
      },
      {
        "insn": 922231999,
        "free": 31048,
        "used": 83
      },
      {
        "insn": 922247140,
        "free": 31047,
        "used": 84
      },
      {
        "insn": 922271888,
        "free": 31046,
        "used": 85
      },
      {
        "insn": 922296583,
        "free": 31045,
        "used": 86
      },
      {
        "insn": 922346604,
        "free": 31044,
        "used": 87
      },
      {
        "insn": 922379544,
        "free": 31043,
        "used": 88
      },
      {
        "insn": 922404239,
        "free": 31042,
        "used": 89
      },
      {
        "insn": 922429047,
        "free": 31041,
        "used": 90
      },
      {
        "insn": 922462187,
        "free": 31040,
        "used": 91
      },
      {
        "insn": 922495905,
        "free": 31039,
        "used": 92
      },
      {
        "insn": 922520653,
        "free": 31038,
        "used": 93
      },
      {
        "insn": 922545348,
        "free": 31037,
        "used": 94
      },
      {
        "insn": 922595369,
        "free": 31036,
        "used": 95
      },
      {
        "insn": 922628309,
        "free": 31035,
        "used": 96
      },
      {
        "insn": 922653004,
        "free": 31034,
        "used": 97
      },
      {
        "insn": 922677812,
        "free": 31033,
        "used": 98
      },
      {
        "insn": 922710952,
        "free": 31032,
        "used": 99
      },
      {
        "insn": 922744674,
        "free": 31031,
        "used": 100
      },
      {
        "insn": 922769422,
        "free": 31030,
        "used": 101
      },
      {
        "insn": 922794117,
        "free": 31029,
        "used": 102
      },
      {
        "insn": 922844138,
        "free": 31028,
        "used": 103
      },
      {
        "insn": 922877078,
        "free": 31027,
        "used": 104
      },
      {
        "insn": 922901773,
        "free": 31026,
        "used": 105
      },
      {
        "insn": 922926581,
        "free": 31025,
        "used": 106
      },
      {
        "insn": 922959721,
        "free": 31024,
        "used": 107
      },
      {
        "insn": 923000466,
        "free": 31025,
        "used": 106
      },
      {
        "insn": 923012917,
        "free": 31026,
        "used": 105
      },
      {
        "insn": 923025435,
        "free": 31027,
        "used": 104
      },
      {
        "insn": 923037882,
        "free": 31026,
        "used": 105
      },
      {
        "insn": 923070900,
        "free": 31025,
        "used": 106
      },
      {
        "insn": 923103935,
        "free": 31024,
        "used": 107
      },
      {
        "insn": 923154712,
        "free": 31025,
        "used": 106
      },
      {
        "insn": 923167163,
        "free": 31026,
        "used": 105
      },
      {
        "insn": 923179681,
        "free": 31027,
        "used": 104
      },
      {
        "insn": 923195757,
        "free": 31028,
        "used": 103
      },
      {
        "insn": 923211728,
        "free": 31029,
        "used": 102
      },
      {
        "insn": 923233129,
        "free": 31030,
        "used": 101
      },
      {
        "insn": 923245523,
        "free": 31031,
        "used": 100
      },
      {
        "insn": 923259709,
        "free": 31032,
        "used": 99
      },
      {
        "insn": 923276440,
        "free": 31033,
        "used": 98
      },
      {
        "insn": 923288891,
        "free": 31034,
        "used": 97
      },
      {
        "insn": 923301409,
        "free": 31035,
        "used": 96
      },
      {
        "insn": 923313856,
        "free": 31034,
        "used": 97
      },
      {
        "insn": 923346874,
        "free": 31033,
        "used": 98
      },
      {
        "insn": 923379909,
        "free": 31032,
        "used": 99
      },
      {
        "insn": 923430686,
        "free": 31033,
        "used": 98
      },
      {
        "insn": 923443137,
        "free": 31034,
        "used": 97
      },
      {
        "insn": 923455655,
        "free": 31035,
        "used": 96
      },
      {
        "insn": 923471731,
        "free": 31036,
        "used": 95
      },
      {
        "insn": 923487702,
        "free": 31037,
        "used": 94
      },
      {
        "insn": 923509103,
        "free": 31038,
        "used": 93
      },
      {
        "insn": 923521497,
        "free": 31039,
        "used": 92
      },
      {
        "insn": 923535683,
        "free": 31040,
        "used": 91
      },
      {
        "insn": 923557403,
        "free": 31041,
        "used": 90
      },
      {
        "insn": 923569854,
        "free": 31042,
        "used": 89
      },
      {
        "insn": 923582372,
        "free": 31043,
        "used": 88
      },
      {
        "insn": 923594819,
        "free": 31042,
        "used": 89
      },
      {
        "insn": 923627837,
        "free": 31041,
        "used": 90
      },
      {
        "insn": 923660872,
        "free": 31040,
        "used": 91
      },
      {
        "insn": 923711649,
        "free": 31041,
        "used": 90
      },
      {
        "insn": 923724100,
        "free": 31042,
        "used": 89
      },
      {
        "insn": 923736618,
        "free": 31043,
        "used": 88
      },
      {
        "insn": 923752694,
        "free": 31044,
        "used": 87
      },
      {
        "insn": 923768665,
        "free": 31045,
        "used": 86
      },
      {
        "insn": 923790066,
        "free": 31046,
        "used": 85
      },
      {
        "insn": 923802460,
        "free": 31047,
        "used": 84
      },
      {
        "insn": 923816646,
        "free": 31048,
        "used": 83
      },
      {
        "insn": 923845188,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 923857639,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 923870157,
        "free": 31051,
        "used": 80
      },
      {
        "insn": 923886233,
        "free": 31052,
        "used": 79
      },
      {
        "insn": 923902204,
        "free": 31053,
        "used": 78
      },
      {
        "insn": 923923605,
        "free": 31054,
        "used": 77
      },
      {
        "insn": 923935999,
        "free": 31055,
        "used": 76
      },
      {
        "insn": 923950185,
        "free": 31056,
        "used": 75
      },
      {
        "insn": 924006465,
        "free": 31055,
        "used": 76
      },
      {
        "insn": 924031213,
        "free": 31054,
        "used": 77
      },
      {
        "insn": 924055908,
        "free": 31053,
        "used": 78
      },
      {
        "insn": 924105929,
        "free": 31052,
        "used": 79
      },
      {
        "insn": 924138869,
        "free": 31051,
        "used": 80
      },
      {
        "insn": 924163564,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 924188372,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 924221512,
        "free": 31048,
        "used": 83
      },
      {
        "insn": 924258971,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 924271422,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 924283940,
        "free": 31051,
        "used": 80
      },
      {
        "insn": 924296387,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 924329405,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 924362440,
        "free": 31048,
        "used": 83
      },
      {
        "insn": 924404299,
        "free": 31047,
        "used": 84
      },
      {
        "insn": 924429047,
        "free": 31046,
        "used": 85
      },
      {
        "insn": 924453742,
        "free": 31045,
        "used": 86
      },
      {
        "insn": 924503763,
        "free": 31044,
        "used": 87
      },
      {
        "insn": 924536703,
        "free": 31043,
        "used": 88
      },
      {
        "insn": 924561398,
        "free": 31042,
        "used": 89
      },
      {
        "insn": 924586206,
        "free": 31041,
        "used": 90
      },
      {
        "insn": 924619346,
        "free": 31040,
        "used": 91
      },
      {
        "insn": 924738751,
        "free": 31041,
        "used": 90
      },
      {
        "insn": 924751202,
        "free": 31042,
        "used": 89
      },
      {
        "insn": 924763720,
        "free": 31043,
        "used": 88
      },
      {
        "insn": 924779796,
        "free": 31044,
        "used": 87
      },
      {
        "insn": 924795767,
        "free": 31045,
        "used": 86
      },
      {
        "insn": 924817168,
        "free": 31046,
        "used": 85
      },
      {
        "insn": 924829562,
        "free": 31047,
        "used": 84
      },
      {
        "insn": 924843748,
        "free": 31048,
        "used": 83
      },
      {
        "insn": 924880361,
        "free": 31049,
        "used": 82
      },
      {
        "insn": 924892812,
        "free": 31050,
        "used": 81
      },
      {
        "insn": 924905330,
        "free": 31051,
        "used": 80
      },
      {
        "insn": 924921406,
        "free": 31052,
        "used": 79
      },
      {
        "insn": 924937377,
        "free": 31053,
        "used": 78
      },
      {
        "insn": 924958778,
        "free": 31054,
        "used": 77
      },
      {
        "insn": 924971172,
        "free": 31055,
        "used": 76
      },
      {
        "insn": 924985358,
        "free": 31056,
        "used": 75
      },
      {
        "insn": 925037208,
        "free": 31057,
        "used": 74
      },
      {
        "insn": 925049659,
        "free": 31058,
        "used": 73
      },
      {
        "insn": 925062177,
        "free": 31059,
        "used": 72
      },
      {
        "insn": 925078253,
        "free": 31060,
        "used": 71
      },
      {
        "insn": 925094224,
        "free": 31061,
        "used": 70
      },
      {
        "insn": 925115625,
        "free": 31062,
        "used": 69
      },
      {
        "insn": 925128019,
        "free": 31063,
        "used": 68
      },
      {
        "insn": 925142205,
        "free": 31064,
        "used": 67
      }
    ],
    "forks": [
      {
        "insn": 413158400,
        "parent_pid": 1,
        "child_pid": 2
      },
      {
        "insn": 413726980,
        "parent_pid": 1,
        "child_pid": 3
      },
      {
        "insn": 415844911,
        "parent_pid": 1,
        "child_pid": 4
      },
      {
        "insn": 885111290,
        "parent_pid": 1,
        "child_pid": 5
      },
      {
        "insn": 901232974,
        "parent_pid": 1,
        "child_pid": 6
      },
      {
        "insn": 901838259,
        "parent_pid": 1,
        "child_pid": 7
      },
      {
        "insn": 902445086,
        "parent_pid": 1,
        "child_pid": 8
      },
      {
        "insn": 903052994,
        "parent_pid": 1,
        "child_pid": 9
      },
      {
        "insn": 903435299,
        "parent_pid": 9,
        "child_pid": 10
      },
      {
        "insn": 903995472,
        "parent_pid": 1,
        "child_pid": 11
      },
      {
        "insn": 904409924,
        "parent_pid": 11,
        "child_pid": 12
      },
      {
        "insn": 904996176,
        "parent_pid": 1,
        "child_pid": 13
      },
      {
        "insn": 905377725,
        "parent_pid": 13,
        "child_pid": 14
      },
      {
        "insn": 905636586,
        "parent_pid": 13,
        "child_pid": 15
      },
      {
        "insn": 905895451,
        "parent_pid": 13,
        "child_pid": 16
      },
      {
        "insn": 906154320,
        "parent_pid": 13,
        "child_pid": 17
      },
      {
        "insn": 906923895,
        "parent_pid": 13,
        "child_pid": 18
      },
      {
        "insn": 907182772,
        "parent_pid": 13,
        "child_pid": 19
      },
      {
        "insn": 907441653,
        "parent_pid": 13,
        "child_pid": 20
      },
      {
        "insn": 907700538,
        "parent_pid": 13,
        "child_pid": 21
      },
      {
        "insn": 907959427,
        "parent_pid": 13,
        "child_pid": 22
      },
      {
        "insn": 908855859,
        "parent_pid": 13,
        "child_pid": 23
      },
      {
        "insn": 909114756,
        "parent_pid": 13,
        "child_pid": 24
      },
      {
        "insn": 909373657,
        "parent_pid": 13,
        "child_pid": 25
      },
      {
        "insn": 909632562,
        "parent_pid": 13,
        "child_pid": 26
      },
      {
        "insn": 910403463,
        "parent_pid": 13,
        "child_pid": 27
      },
      {
        "insn": 910662376,
        "parent_pid": 13,
        "child_pid": 28
      },
      {
        "insn": 910921293,
        "parent_pid": 13,
        "child_pid": 29
      },
      {
        "insn": 911180214,
        "parent_pid": 13,
        "child_pid": 30
      },
      {
        "insn": 911439139,
        "parent_pid": 13,
        "child_pid": 31
      },
      {
        "insn": 912337745,
        "parent_pid": 13,
        "child_pid": 32
      },
      {
        "insn": 912596678,
        "parent_pid": 13,
        "child_pid": 33
      },
      {
        "insn": 912855615,
        "parent_pid": 13,
        "child_pid": 34
      },
      {
        "insn": 913114556,
        "parent_pid": 13,
        "child_pid": 35
      },
      {
        "insn": 913885935,
        "parent_pid": 13,
        "child_pid": 36
      },
      {
        "insn": 914144884,
        "parent_pid": 13,
        "child_pid": 37
      },
      {
        "insn": 914403837,
        "parent_pid": 13,
        "child_pid": 38
      },
      {
        "insn": 914662794,
        "parent_pid": 13,
        "child_pid": 39
      },
      {
        "insn": 914921755,
        "parent_pid": 13,
        "child_pid": 40
      },
      {
        "insn": 915820415,
        "parent_pid": 13,
        "child_pid": 41
      },
      {
        "insn": 916079384,
        "parent_pid": 13,
        "child_pid": 42
      },
      {
        "insn": 916338357,
        "parent_pid": 13,
        "child_pid": 43
      },
      {
        "insn": 916597334,
        "parent_pid": 13,
        "child_pid": 44
      },
      {
        "insn": 917368767,
        "parent_pid": 13,
        "child_pid": 45
      },
      {
        "insn": 917627752,
        "parent_pid": 13,
        "child_pid": 46
      },
      {
        "insn": 917886741,
        "parent_pid": 13,
        "child_pid": 47
      },
      {
        "insn": 918145734,
        "parent_pid": 13,
        "child_pid": 48
      },
      {
        "insn": 918404731,
        "parent_pid": 13,
        "child_pid": 49
      },
      {
        "insn": 919303445,
        "parent_pid": 13,
        "child_pid": 50
      },
      {
        "insn": 919562450,
        "parent_pid": 13,
        "child_pid": 51
      },
      {
        "insn": 919821459,
        "parent_pid": 13,
        "child_pid": 52
      },
      {
        "insn": 920080472,
        "parent_pid": 13,
        "child_pid": 53
      },
      {
        "insn": 921050470,
        "parent_pid": 1,
        "child_pid": 54
      },
      {
        "insn": 921432148,
        "parent_pid": 54,
        "child_pid": 55
      },
      {
        "insn": 921680905,
        "parent_pid": 54,
        "child_pid": 56
      },
      {
        "insn": 922483078,
        "parent_pid": 54,
        "child_pid": 57
      },
      {
        "insn": 922731843,
        "parent_pid": 54,
        "child_pid": 58
      },
      {
        "insn": 922980612,
        "parent_pid": 54,
        "child_pid": 59
      },
      {
        "insn": 924242398,
        "parent_pid": 1,
        "child_pid": 60
      },
      {
        "insn": 924640237,
        "parent_pid": 60,
        "child_pid": 61
      }
    ],
    "switches": {
      "idle_to_process": 256337,
      "process_to_idle": 256337
    },
    "switch_entries": 512674,
    "kernel_start_insn": 10762845,
    "faults": []
  },
  "report": {
    "schema": "nodefusion.artifact-evidence/1",
    "run": "ucore-2026A-ch5-observed",
    "kernel_kind": "ucore",
    "source_sha256": {
      "trace.nfb": "3cd86a56a40339abb540a0e46077330ea74a3d05878ee4cdf60d53fb9b9a17ec",
      "manifest.json": "419bb90cf8da8207b1345c5544cba998c97f00a460b26986a8e3fc7984d910fe",
      "watchlist.json": "0f829ecf540d4034f7f5b9831b30f56fd39cd7bd40617234e7723547eab56ab0",
      "kernel_layout.json": "d552bdafec8672b36058e7bcda9ab19a1e0c741d26f592cfc5cef255de2eb4da"
    },
    "kernel_elf_sha256": "0c5a83dd5a1f36dc423518308ac00d31a7466376bd661547ec5f79fb039ddb58",
    "archive_bytes": {
      "trace.nfb": 1457948326,
      "kernel_elf": 236264
    },
    "html_sha256": "11e64552b794c6fa6da34b001279200cfbb10eae891832273e8b525d9b344ecc",
    "html_bytes": 2576046,
    "function_trace": {
      "kind": "return-matched observed frames",
      "raw": 6769454,
      "retained": 106508,
      "returns": 7754682,
      "matched_returns": 5230498,
      "nested_entries": 5132662
    },
    "event_selection": {
      "applied": true,
      "policy": "kind-preserving/systematic-v5",
      "raw": 7544245,
      "retained": 150000,
      "dropped": 7394245,
      "target_limit": 150000,
      "minimum_spare": 25000,
      "always_keep": "all events of kinds whose count fits their per-kind budget",
      "priority_raw": 2218003,
      "spare_raw": 5326242,
      "semantic_budget": 125000,
      "minimum_per_kind": 64,
      "semantic_kind_budgets": {
        "firmware.trap": 19,
        "interrupt.clock": 79,
        "interrupt.timer": 78,
        "kernel.shutdown": 1,
        "pagetable.map": 1872,
        "phys.alloc": 94,
        "phys.free": 91,
        "proc.alloc": 61,
        "proc.exec": 17,
        "proc.exit": 61,
        "proc.fork": 60,
        "proc.free": 61,
        "proc.initproc": 1,
        "proc.wait": 64,
        "sbi.call": 316,
        "sched.enter": 1,
        "sched.switch": 28550,
        "sched.yield": 7181,
        "sched.yield_to_scheduler": 14306,
        "syscall.dispatch": 14284,
        "syscall.enter": 14284,
        "syscall.exec": 17,
        "syscall.fork": 60,
        "syscall.waitpid": 64,
        "syscall.write": 70,
        "trap.init": 1,
        "trap.userret": 14303,
        "trap.usertrap": 14303,
        "vm.copy": 60,
        "vm.copyout": 7162,
        "vm.free": 61,
        "vm.from_elf": 18,
        "vm.init": 1,
        "vm.kernel_init": 1,
        "vm.map": 81,
        "vm.translate_buffer": 7175,
        "vm.translate_str": 71,
        "vm.unmap": 71
      },
      "diagnostic_kind_budgets": {
        "func.add_task": 1188,
        "func.allocpid": 61,
        "func.clean_bss": 1,
        "func.console_putchar": 82,
        "func.consputc": 66,
        "func.curr_proc": 6247,
        "func.dummy": 7937,
        "func.fetch_task": 1188,
        "func.freepagetable": 61,
        "func.freerange": 1,
        "func.freewalk": 65,
        "func.get_cycle": 625,
        "func.get_id_by_name": 18,
        "func.init_queue": 1,
        "func.kinit": 1,
        "func.kvmmap": 3,
        "func.load_init_app": 1,
        "func.loader": 18,
        "func.loader_init": 1,
        "func.main": 1,
        "func.memmove": 625,
        "func.memset": 207,
        "func.nftrace_allocator_state": 1,
        "func.nftrace_page_alloc": 67,
        "func.nftrace_page_free": 66,
        "func.nftrace_proc_fork": 60,
        "func.nftrace_sched_switch": 2313,
        "func.pop_queue": 1189,
        "func.printf": 21,
        "func.printint": 7,
        "func.push_queue": 1189,
        "func.set_next_timer": 65,
        "func.strlen": 16,
        "func.strncmp": 64,
        "func.strncpy": 16,
        "func.sys_getpid": 2,
        "func.sys_getppid": 2,
        "func.sys_gettimeofday": 624,
        "func.threadid": 2,
        "func.timer_init": 1,
        "func.useraddr": 64,
        "func.uvmcreate": 61,
        "func.walk": 772
      },
      "minimum_per_diagnostic_kind": 64,
      "semantic_retained": 125000,
      "spare_budget": 25000,
      "stride": null,
      "retained_kinds": {
        "firmware.trap": 19,
        "func.add_task": 1188,
        "func.allocpid": 61,
        "func.clean_bss": 1,
        "func.console_putchar": 82,
        "func.consputc": 66,
        "func.curr_proc": 6247,
        "func.dummy": 7937,
        "func.fetch_task": 1188,
        "func.freepagetable": 61,
        "func.freerange": 1,
        "func.freewalk": 65,
        "func.get_cycle": 625,
        "func.get_id_by_name": 18,
        "func.init_queue": 1,
        "func.kinit": 1,
        "func.kvmmap": 3,
        "func.load_init_app": 1,
        "func.loader": 18,
        "func.loader_init": 1,
        "func.main": 1,
        "func.memmove": 625,
        "func.memset": 207,
        "func.nftrace_allocator_state": 1,
        "func.nftrace_page_alloc": 67,
        "func.nftrace_page_free": 66,
        "func.nftrace_proc_fork": 60,
        "func.nftrace_sched_switch": 2313,
        "func.pop_queue": 1189,
        "func.printf": 21,
        "func.printint": 7,
        "func.push_queue": 1189,
        "func.set_next_timer": 65,
        "func.strlen": 16,
        "func.strncmp": 64,
        "func.strncpy": 16,
        "func.sys_getpid": 2,
        "func.sys_getppid": 2,
        "func.sys_gettimeofday": 624,
        "func.threadid": 2,
        "func.timer_init": 1,
        "func.useraddr": 64,
        "func.uvmcreate": 61,
        "func.walk": 772,
        "interrupt.clock": 79,
        "interrupt.timer": 78,
        "kernel.shutdown": 1,
        "pagetable.map": 1872,
        "phys.alloc": 94,
        "phys.free": 91,
        "proc.alloc": 61,
        "proc.exec": 17,
        "proc.exit": 61,
        "proc.fork": 60,
        "proc.free": 61,
        "proc.initproc": 1,
        "proc.wait": 64,
        "sbi.call": 316,
        "sched.enter": 1,
        "sched.switch": 28550,
        "sched.yield": 7181,
        "sched.yield_to_scheduler": 14306,
        "syscall.dispatch": 14284,
        "syscall.enter": 14284,
        "syscall.exec": 17,
        "syscall.fork": 60,
        "syscall.waitpid": 64,
        "syscall.write": 70,
        "trap.init": 1,
        "trap.userret": 14303,
        "trap.usertrap": 14303,
        "vm.copy": 60,
        "vm.copyout": 7162,
        "vm.free": 61,
        "vm.from_elf": 18,
        "vm.init": 1,
        "vm.kernel_init": 1,
        "vm.map": 81,
        "vm.translate_buffer": 7175,
        "vm.translate_str": 71,
        "vm.unmap": 71
      },
      "dropped_kinds": {
        "func.add_task": 255149,
        "func.console_putchar": 4198,
        "func.consputc": 303,
        "func.curr_proc": 1402889,
        "func.dummy": 1786301,
        "func.fetch_task": 255150,
        "func.freewalk": 240,
        "func.get_cycle": 127159,
        "func.memmove": 127375,
        "func.memset": 32643,
        "func.nftrace_page_alloc": 539,
        "func.nftrace_page_free": 473,
        "func.nftrace_sched_switch": 510361,
        "func.pop_queue": 255149,
        "func.push_queue": 255148,
        "func.set_next_timer": 262,
        "func.strncmp": 56,
        "func.sys_gettimeofday": 127160,
        "func.useraddr": 1,
        "func.walk": 160686,
        "interrupt.clock": 248,
        "interrupt.timer": 248,
        "pagetable.map": 30741,
        "phys.alloc": 512,
        "phys.free": 448,
        "proc.wait": 1,
        "sbi.call": 4292,
        "sched.switch": 484124,
        "sched.yield": 120946,
        "sched.yield_to_scheduler": 242031,
        "syscall.dispatch": 241675,
        "syscall.enter": 241675,
        "syscall.waitpid": 1,
        "syscall.write": 97,
        "trap.userret": 241982,
        "trap.usertrap": 241982,
        "vm.copyout": 120622,
        "vm.map": 278,
        "vm.translate_buffer": 120858,
        "vm.translate_str": 113,
        "vm.unmap": 129
      }
    },
    "coverage": {
      "status": "complete",
      "percent": 100.0,
      "passed": 2327724,
      "total": 2327724,
      "metrics": {
        "covered": 14,
        "applicable": 14,
        "not_applicable": [
          "bcache_hit_rate",
          "bcache_hits",
          "bcache_reads",
          "disk_io",
          "log_commits"
        ],
        "missing": [],
        "sampled": []
      },
      "semantic_events": {
        "raw": 2218003,
        "unknown": 0,
        "unknown_fields": {},
        "dropped_from_interactive": 2093003
      },
      "snapshots": {
        "checked": 4641,
        "incomplete": 0,
        "physical_memory": 0,
        "physical_counters": 0,
        "processes": 0,
        "resources": 0,
        "pre_initialization": {
          "physical_memory": 0,
          "physical_counters": 2040,
          "processes": 0,
          "resources": 0
        }
      },
      "snapshot_not_applicable": [
        "resources"
      ],
      "manifest_fields": {
        "cells": 97818,
        "states": {
          "absent": 6987,
          "empty": 4263,
          "present": 86568
        },
        "not_applicable": 6987,
        "unresolved": 0
      },
      "full_watch_scope": true,
      "function_watch_drops": 0,
      "function_stacks_available": true,
      "observation_points": {
        "unresolved": [],
        "reported_missing": 48,
        "layout_missing": []
      },
      "blockers": []
    },
    "source_view": {
      "run": "ucore-2026A-ch5-observed",
      "files": 15,
      "locations": 206,
      "revision": "386f10c55d0285273b78df19c4607c0f475e17a2"
    }
  },
  "console_sha256": "c91316f0b98f167c5614210f3d0128a9386516ff399809924a8637692b4bdab3",
  "outcome": "completed",
  "trace_complete": true,
  "started_utc": "2026-09-27T14:54:52.730270+00:00",
  "qemu_command": "cd \"/home/joseph/nf/education-2026A-20260927/ucore-ch5-observed\" && exec qemu-system-riscv64 -machine virt -bios default -kernel build/kernel -m 128M -smp 1 -nographic -qmp tcp:127.0.0.1:45807,server=on,wait=off -plugin /home/joseph/nf/education-2026A-20260927/tool/nodefusion/plugin/libnf.so,out=/home/joseph/nf/education-2026A-20260927/runs/ucore-2026A-ch5-observed/trace.nfb,sample=200000,snap=200000,maxram=268435456,returns=1,snapstart=0,bootsnap=0,ramsize=134217728,watch=/home/joseph/nf/education-2026A-20260927/runs/ucore-2026A-ch5-observed/watchlist.txt -icount shift=3",
  "archive": {
    "run_path": "/home/joseph/nf/education-2026A-20260927/runs/ucore-2026A-ch5-observed",
    "trace_sha256": "3cd86a56a40339abb540a0e46077330ea74a3d05878ee4cdf60d53fb9b9a17ec",
    "trace_bytes": 1457948326
  }
}
