From 0aef8914959af9e472852611eb6352c211093d35 Mon Sep 17 00:00:00 2001
From: Russ Cox <rsc@swtch.com>
Date: Sat, 8 Aug 2009 01:07:30 -0700
Subject: [PATCH] shuffle and tweak for formatting. pdf has very good page
 breaks now. would be a good copy for fall 2009.

---
 Makefile    |     1 +
 bootother.S |    14 +-
 console.c   |   241 +-
 defs.h      |     1 +
 dev.h       |     8 -
 elf.h       |    18 -
 exec.c      |     6 +-
 file.c      |     2 +-
 file.h      |    32 +
 fs.c        |     3 +-
 fsvar.h     |    18 -
 picirq.c    |    29 +
 pipe.c      |     3 +-
 proc.c      |   206 +-
 runoff      |    26 +-
 runoff.list |     4 +-
 runoff.spec |    18 +-
 sysfile.c   |     1 -
 timer.c     |    33 -
 trap.c      |     1 +
 uart.c      |     3 +-
 x86.h       |     1 +
 xv6.pdf     |   Bin 146568 -> 147038 bytes
 xv6.ps      | 12872 +++++++++++++++++++++++++-------------------------
 24 files changed, 6869 insertions(+), 6672 deletions(-)
 delete mode 100644 dev.h
 delete mode 100644 fsvar.h

diff --git a/Makefile b/Makefile
index 5943a7e..fe091db 100644
--- a/Makefile
+++ b/Makefile
@@ -128,6 +128,7 @@ PRINT = runoff.list $(FILES)
 
 xv6.pdf: $(PRINT)
 	./runoff
+	ls -l xv6.pdf
 
 print: xv6.pdf
 
diff --git a/bootother.S b/bootother.S
index 47f547e..9005d48 100644
--- a/bootother.S
+++ b/bootother.S
@@ -38,7 +38,7 @@ start:
 //PAGEBREAK!
   # Switch from real to protected mode, using a bootstrap GDT
   # and segment translation that makes virtual addresses 
-  # identical to their physical addresses, so that the 
+  # identical to physical addresses, so that the 
   # effective memory map does not change during the switch.
   lgdt    gdtdesc
   movl    %cr0, %eax
@@ -47,10 +47,10 @@ start:
 
   # Jump to next instruction, but in 32-bit code segment.
   # Switches processor into 32-bit mode.
-  ljmp    $(SEG_KCODE<<3), $protcseg
+  ljmp    $(SEG_KCODE<<3), $start32
 
-  .code32                     # Assemble for 32-bit mode
-protcseg:
+.code32                       # Assemble for 32-bit mode
+start32:
   # Set up the protected-mode data segment registers
   movw    $(SEG_KDATA<<3), %ax    # Our data segment selector
   movw    %ax, %ds                # -> DS: Data Segment
@@ -60,11 +60,11 @@ protcseg:
   movw    %ax, %fs                # -> FS
   movw    %ax, %gs                # -> GS
 
+  # Set up the stack pointer and call into C.
   movl    start-4, %esp
-  movl    start-8, %eax
-  call    *%eax
+  call	*(start-8)
 
-  # If bootmain returns (it shouldn't), trigger a Bochs
+  # If the call returns (it shouldn't), trigger a Bochs
   # breakpoint if running under Bochs, then loop.
   movw    $0x8a00, %ax            # 0x8a00 -> port 0x8a00
   movw    %ax, %dx
diff --git a/console.c b/console.c
index 6834c6a..9d2ef60 100644
--- a/console.c
+++ b/console.c
@@ -7,22 +7,120 @@
 #include "param.h"
 #include "traps.h"
 #include "spinlock.h"
-#include "dev.h"
+#include "fs.h"
+#include "file.h"
 #include "mmu.h"
 #include "proc.h"
 #include "x86.h"
 
-#define CRTPORT 0x3d4
-#define BACKSPACE 0x100
+static void consputc(int);
 
-static ushort *crt = (ushort*)0xb8000;  // CGA memory
+static int panicked = 0;
 
 static struct {
 	struct spinlock lock;
 	int locking;
 } cons;
 
-static int panicked = 0;
+static void
+printint(int xx, int base, int sgn)
+{
+  static char digits[] = "0123456789abcdef";
+  char buf[16];
+  int i = 0, neg = 0;
+  uint x;
+
+  if(sgn && xx < 0){
+    neg = 1;
+    x = -xx;
+  } else
+    x = xx;
+
+  do{
+    buf[i++] = digits[x % base];
+  }while((x /= base) != 0);
+  if(neg)
+    buf[i++] = '-';
+
+  while(--i >= 0)
+    consputc(buf[i]);
+}
+
+//PAGEBREAK: 50
+// Print to the console. only understands %d, %x, %p, %s.
+void
+cprintf(char *fmt, ...)
+{
+  int i, c, state, locking;
+  uint *argp;
+  char *s;
+
+  locking = cons.locking;
+  if(locking)
+    acquire(&cons.lock);
+
+  argp = (uint*)(void*)&fmt + 1;
+  state = 0;
+  for(i = 0; (c = fmt[i] & 0xff) != 0; i++){
+    if(c != '%'){
+      consputc(c);
+      continue;
+    }
+    c = fmt[++i] & 0xff;
+    if(c == 0)
+      break;
+    switch(c){
+    case 'd':
+      printint(*argp++, 10, 1);
+      break;
+    case 'x':
+    case 'p':
+      printint(*argp++, 16, 0);
+      break;
+    case 's':
+      if((s = (char*)*argp++) == 0)
+        s = "(null)";
+      for(; *s; s++)
+        consputc(*s);
+      break;
+    case '%':
+      consputc('%');
+      break;
+    default:
+      // Print unknown % sequence to draw attention.
+      consputc('%');
+      consputc(c);
+      break;
+    }
+  }
+
+  if(locking)
+    release(&cons.lock);
+}
+
+void
+panic(char *s)
+{
+  int i;
+  uint pcs[10];
+  
+  cli();
+  cons.locking = 0;
+  cprintf("cpu%d: panic: ", cpu());
+  cprintf(s);
+  cprintf("\n");
+  getcallerpcs(&s, pcs);
+  for(i=0; i<10; i++)
+    cprintf(" %p", pcs[i]);
+  panicked = 1; // freeze other CPU
+  for(;;)
+    ;
+}
+
+//PAGEBREAK: 50
+#define BACKSPACE 0x100
+#define CRTPORT 0x3d4
+static ushort *crt = (ushort*)0xb8000;  // CGA memory
 
 static void
 cgaputc(int c)
@@ -69,104 +167,7 @@ consputc(int c)
   cgaputc(c);
 }
 
-void
-printint(int xx, int base, int sgn)
-{
-  static char digits[] = "0123456789abcdef";
-  char buf[16];
-  int i = 0, neg = 0;
-  uint x;
-
-  if(sgn && xx < 0){
-    neg = 1;
-    x = 0 - xx;
-  } else {
-    x = xx;
-  }
-
-  do{
-    buf[i++] = digits[x % base];
-  }while((x /= base) != 0);
-  if(neg)
-    buf[i++] = '-';
-
-  while(--i >= 0)
-    consputc(buf[i]);
-}
-
-// Print to the console. only understands %d, %x, %p, %s.
-void
-cprintf(char *fmt, ...)
-{
-  int i, c, state, locking;
-  uint *argp;
-  char *s;
-
-  locking = cons.locking;
-  if(locking)
-    acquire(&cons.lock);
-
-  argp = (uint*)(void*)&fmt + 1;
-  state = 0;
-  for(i = 0; fmt[i]; i++){
-    c = fmt[i] & 0xff;
-    switch(state){
-    case 0:
-      if(c == '%')
-        state = '%';
-      else
-        consputc(c);
-      break;
-    
-    case '%':
-      switch(c){
-      case 'd':
-        printint(*argp++, 10, 1);
-        break;
-      case 'x':
-      case 'p':
-        printint(*argp++, 16, 0);
-        break;
-      case 's':
-        s = (char*)*argp++;
-        if(s == 0)
-          s = "(null)";
-        for(; *s; s++)
-          consputc(*s);
-        break;
-      case '%':
-        consputc('%');
-        break;
-      default:
-        // Print unknown % sequence to draw attention.
-        consputc('%');
-        consputc(c);
-        break;
-      }
-      state = 0;
-      break;
-    }
-  }
-
-  if(locking)
-    release(&cons.lock);
-}
-
-int
-consolewrite(struct inode *ip, char *buf, int n)
-{
-  int i;
-
-  iunlock(ip);
-  acquire(&cons.lock);
-  for(i = 0; i < n; i++)
-    consputc(buf[i] & 0xff);
-  release(&cons.lock);
-  ilock(ip);
-
-  return n;
-}
-
+//PAGEBREAK: 50
 #define INPUT_BUF 128
 struct {
   struct spinlock lock;
@@ -255,6 +256,21 @@ consoleread(struct inode *ip, char *dst, int n)
   return target - n;
 }
 
+int
+consolewrite(struct inode *ip, char *buf, int n)
+{
+  int i;
+
+  iunlock(ip);
+  acquire(&cons.lock);
+  for(i = 0; i < n; i++)
+    consputc(buf[i] & 0xff);
+  release(&cons.lock);
+  ilock(ip);
+
+  return n;
+}
+
 void
 consoleinit(void)
 {
@@ -269,22 +285,3 @@ consoleinit(void)
   ioapicenable(IRQ_KBD, 0);
 }
 
-void
-panic(char *s)
-{
-  int i;
-  uint pcs[10];
-  
-  cli();
-  cons.locking = 0;
-  cprintf("cpu%d: panic: ", cpu());
-  cprintf(s);
-  cprintf("\n");
-  getcallerpcs(&s, pcs);
-  for(i=0; i<10; i++)
-    cprintf(" %p", pcs[i]);
-  panicked = 1; // freeze other CPU
-  for(;;)
-    ;
-}
-
diff --git a/defs.h b/defs.h
index 09fa467..12d04aa 100644
--- a/defs.h
+++ b/defs.h
@@ -91,6 +91,7 @@ void            pipeclose(struct pipe*, int);
 int             piperead(struct pipe*, char*, int);
 int             pipewrite(struct pipe*, char*, int);
 
+//PAGEBREAK: 16
 // proc.c
 struct proc*    copyproc(struct proc*);
 void            exit(void);
diff --git a/dev.h b/dev.h
deleted file mode 100644
index 48d31d3..0000000
--- a/dev.h
+++ /dev/null
@@ -1,8 +0,0 @@
-struct devsw {
-  int (*read)(struct inode*, char*, int);
-  int (*write)(struct inode*, char*, int);
-};
-
-extern struct devsw devsw[];
-
-#define CONSOLE 1
diff --git a/elf.h b/elf.h
index 28bbd23..17f8321 100644
--- a/elf.h
+++ b/elf.h
@@ -40,21 +40,3 @@ struct proghdr {
 #define ELF_PROG_FLAG_EXEC      1
 #define ELF_PROG_FLAG_WRITE     2
 #define ELF_PROG_FLAG_READ      4
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-// Blank page.
diff --git a/exec.c b/exec.c
index 3be3eed..bee960e 100644
--- a/exec.c
+++ b/exec.c
@@ -11,7 +11,7 @@ exec(char *path, char **argv)
 {
   char *mem, *s, *last;
   int i, argc, arglen, len, off;
-  uint sz, sp, argp;
+  uint sz, sp, argp, x;
   struct elfhdr elf;
   struct inode *ip;
   struct proghdr ph;
@@ -67,7 +67,9 @@ exec(char *path, char **argv)
       goto bad;
     if(ph.type != ELF_PROG_LOAD)
       continue;
-    if(ph.va + ph.memsz < ph.va || ph.va + ph.memsz > sz || ph.memsz < ph.filesz)
+    if(ph.va + ph.memsz < ph.va || ph.va + ph.memsz > sz)
+      goto bad;
+    if(ph.memsz < ph.filesz)
       goto bad;
     if(readi(ip, mem + ph.va, ph.offset, ph.filesz) != ph.filesz)
       goto bad;
diff --git a/file.c b/file.c
index 12b1561..e10b824 100644
--- a/file.c
+++ b/file.c
@@ -1,9 +1,9 @@
 #include "types.h"
 #include "defs.h"
 #include "param.h"
+#include "fs.h"
 #include "file.h"
 #include "spinlock.h"
-#include "dev.h"
 
 struct devsw devsw[NDEV];
 struct {
diff --git a/file.h b/file.h
index 1d56145..55918cc 100644
--- a/file.h
+++ b/file.h
@@ -7,3 +7,35 @@ struct file {
   struct inode *ip;
   uint off;
 };
+
+
+// in-core file system types
+
+struct inode {
+  uint dev;           // Device number
+  uint inum;          // Inode number
+  int ref;            // Reference count
+  int flags;          // I_BUSY, I_VALID
+
+  short type;         // copy of disk inode
+  short major;
+  short minor;
+  short nlink;
+  uint size;
+  uint addrs[NDIRECT+1];
+};
+
+#define I_BUSY 0x1
+#define I_VALID 0x2
+
+
+// device implementations
+
+struct devsw {
+  int (*read)(struct inode*, char*, int);
+  int (*write)(struct inode*, char*, int);
+};
+
+extern struct devsw devsw[];
+
+#define CONSOLE 1
diff --git a/fs.c b/fs.c
index fe65338..15b0bfe 100644
--- a/fs.c
+++ b/fs.c
@@ -19,8 +19,7 @@
 #include "spinlock.h"
 #include "buf.h"
 #include "fs.h"
-#include "fsvar.h"
-#include "dev.h"
+#include "file.h"
 
 #define min(a, b) ((a) < (b) ? (a) : (b))
 static void itrunc(struct inode*);
diff --git a/fsvar.h b/fsvar.h
deleted file mode 100644
index 7f135a9..0000000
--- a/fsvar.h
+++ /dev/null
@@ -1,18 +0,0 @@
-// in-core file system types
-
-struct inode {
-  uint dev;           // Device number
-  uint inum;          // Inode number
-  int ref;            // Reference count
-  int flags;          // I_BUSY, I_VALID
-
-  short type;         // copy of disk inode
-  short major;
-  short minor;
-  short nlink;
-  uint size;
-  uint addrs[NDIRECT+1];
-};
-
-#define I_BUSY 0x1
-#define I_VALID 0x2
diff --git a/picirq.c b/picirq.c
index ff86831..1230c13 100644
--- a/picirq.c
+++ b/picirq.c
@@ -82,3 +82,32 @@ picinit(void)
   if(irqmask != 0xFFFF)
     picsetmask(irqmask);
 }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+// Blank page.
diff --git a/pipe.c b/pipe.c
index 3032775..29c01b2 100644
--- a/pipe.c
+++ b/pipe.c
@@ -3,6 +3,7 @@
 #include "param.h"
 #include "mmu.h"
 #include "proc.h"
+#include "fs.h"
 #include "file.h"
 #include "spinlock.h"
 
@@ -72,7 +73,7 @@ pipeclose(struct pipe *p, int writable)
     release(&p->lock);
 }
 
-//PAGEBREAK: 30
+//PAGEBREAK: 40
 int
 pipewrite(struct pipe *p, char *addr, int n)
 {
diff --git a/proc.c b/proc.c
index 4333512..d111008 100644
--- a/proc.c
+++ b/proc.c
@@ -23,6 +23,79 @@ pinit(void)
   initlock(&ptable.lock, "ptable");
 }
 
+//PAGEBREAK: 36
+// Print a process listing to console.  For debugging.
+// Runs when user types ^P on console.
+// No lock to avoid wedging a stuck machine further.
+void
+procdump(void)
+{
+  static char *states[] = {
+  [UNUSED]    "unused",
+  [EMBRYO]    "embryo",
+  [SLEEPING]  "sleep ",
+  [RUNNABLE]  "runble",
+  [RUNNING]   "run   ",
+  [ZOMBIE]    "zombie"
+  };
+  int i;
+  struct proc *p;
+  char *state;
+  uint pc[10];
+  
+  for(p = ptable.proc; p < &ptable.proc[NPROC]; p++){
+    if(p->state == UNUSED)
+      continue;
+    if(p->state >= 0 && p->state < NELEM(states) && states[p->state])
+      state = states[p->state];
+    else
+      state = "???";
+    cprintf("%d %s %s", p->pid, state, p->name);
+    if(p->state == SLEEPING){
+      getcallerpcs((uint*)p->context->ebp+2, pc);
+      for(i=0; i<10 && pc[i] != 0; i++)
+        cprintf(" %p", pc[i]);
+    }
+    cprintf("\n");
+  }
+}
+
+// Set up CPU's kernel segment descriptors.
+// Run once at boot time on each CPU.
+void
+ksegment(void)
+{
+  struct cpu *c1;
+
+  c1 = &cpus[cpu()];
+  c1->gdt[SEG_KCODE] = SEG(STA_X|STA_R, 0, 0x100000 + 64*1024-1, 0);
+  c1->gdt[SEG_KDATA] = SEG(STA_W, 0, 0xffffffff, 0);
+  c1->gdt[SEG_KCPU] = SEG(STA_W, (uint)(&c1->tls+1), 0xffffffff, 0);
+  lgdt(c1->gdt, sizeof(c1->gdt));
+  loadfsgs(SEG_KCPU << 3);
+  
+  // Initialize cpu-local variables.
+  c = c1;
+  cp = 0;
+}
+
+// Set up CPU's segment descriptors and current process task state.
+// If cp==0, set up for "idle" state for when scheduler() is running.
+void
+usegment(void)
+{
+  pushcli();
+  c->gdt[SEG_UCODE] = SEG(STA_X|STA_R, (uint)cp->mem, cp->sz-1, DPL_USER);
+  c->gdt[SEG_UDATA] = SEG(STA_W, (uint)cp->mem, cp->sz-1, DPL_USER);
+  c->gdt[SEG_TSS] = SEG16(STS_T32A, (uint)&c->ts, sizeof(c->ts)-1, 0);
+  c->gdt[SEG_TSS].s = 0;
+  c->ts.ss0 = SEG_KDATA << 3;
+  c->ts.esp0 = (uint)cp->kstack + KSTACKSIZE;
+  ltr(SEG_TSS << 3);
+  popcli();
+}
+
+//PAGEBREAK: 15
 // Look in the process table for an UNUSED proc.
 // If found, change state to EMBRYO and return it.
 // Otherwise return 0.
@@ -67,6 +140,37 @@ found:
   return p;
 }
 
+// Set up first user process.
+void
+userinit(void)
+{
+  struct proc *p;
+  extern char _binary_initcode_start[], _binary_initcode_size[];
+  
+  p = allocproc();
+  initproc = p;
+
+  // Initialize memory from initcode.S
+  p->sz = PAGE;
+  p->mem = kalloc(p->sz);
+  memset(p->mem, 0, p->sz);
+  memmove(p->mem, _binary_initcode_start, (int)_binary_initcode_size);
+
+  memset(p->tf, 0, sizeof(*p->tf));
+  p->tf->cs = (SEG_UCODE << 3) | DPL_USER;
+  p->tf->ds = (SEG_UDATA << 3) | DPL_USER;
+  p->tf->es = p->tf->ds;
+  p->tf->ss = p->tf->ds;
+  p->tf->eflags = FL_IF;
+  p->tf->esp = p->sz;
+  p->tf->eip = 0;  // beginning of initcode.S
+
+  safestrcpy(p->name, "initcode", sizeof(p->name));
+  p->cwd = namei("/");
+
+  p->state = RUNNABLE;
+}
+
 // Grow current process's memory by n bytes.
 // Return 0 on success, -1 on failure.
 int
@@ -86,41 +190,6 @@ growproc(int n)
   return 0;
 }
 
-// Set up CPU's kernel segment descriptors.
-// Run once at boot time on each CPU.
-void
-ksegment(void)
-{
-  struct cpu *c1;
-
-  c1 = &cpus[cpu()];
-  c1->gdt[SEG_KCODE] = SEG(STA_X|STA_R, 0, 0x100000 + 64*1024-1, 0);
-  c1->gdt[SEG_KDATA] = SEG(STA_W, 0, 0xffffffff, 0);
-  c1->gdt[SEG_KCPU] = SEG(STA_W, (uint)(&c1->tls+1), 0xffffffff, 0);
-  lgdt(c1->gdt, sizeof(c1->gdt));
-  loadfsgs(SEG_KCPU << 3);
-  
-  // Initialize cpu-local variables.
-  c = c1;
-  cp = 0;
-}
-
-// Set up CPU's segment descriptors and task state for the current process.
-// If cp==0, set up for "idle" state for when scheduler() is running.
-void
-usegment(void)
-{
-  pushcli();
-  c->gdt[SEG_UCODE] = SEG(STA_X|STA_R, (uint)cp->mem, cp->sz-1, DPL_USER);
-  c->gdt[SEG_UDATA] = SEG(STA_W, (uint)cp->mem, cp->sz-1, DPL_USER);
-  c->gdt[SEG_TSS] = SEG16(STS_T32A, (uint)&c->ts, sizeof(c->ts)-1, 0);
-  c->gdt[SEG_TSS].s = 0;
-  c->ts.ss0 = SEG_KDATA << 3;
-  c->ts.esp0 = (uint)cp->kstack + KSTACKSIZE;
-  ltr(SEG_TSS << 3);
-  popcli();
-}
-
 // Create a new process copying p as the parent.
 // Sets up stack to return as if from system call.
 // Caller must set state of returned proc to RUNNABLE.
@@ -160,37 +229,6 @@ fork(void)
   return pid;
 }
 
-// Set up first user process.
-void
-userinit(void)
-{
-  struct proc *p;
-  extern char _binary_initcode_start[], _binary_initcode_size[];
-  
-  p = allocproc();
-  initproc = p;
-
-  // Initialize memory from initcode.S
-  p->sz = PAGE;
-  p->mem = kalloc(p->sz);
-  memset(p->mem, 0, p->sz);
-  memmove(p->mem, _binary_initcode_start, (int)_binary_initcode_size);
-
-  memset(p->tf, 0, sizeof(*p->tf));
-  p->tf->cs = (SEG_UCODE << 3) | DPL_USER;
-  p->tf->ds = (SEG_UDATA << 3) | DPL_USER;
-  p->tf->es = p->tf->ds;
-  p->tf->ss = p->tf->ds;
-  p->tf->eflags = FL_IF;
-  p->tf->esp = p->sz;
-  p->tf->eip = 0;  // beginning of initcode.S
-
-  safestrcpy(p->name, "initcode", sizeof(p->name));
-  p->cwd = namei("/");
-
-  p->state = RUNNABLE;
-}
-
 //PAGEBREAK: 42
 // Per-CPU process scheduler.
 // Each CPU calls scheduler() after setting itself up.
@@ -440,39 +478,3 @@ wait(void)
   }
 }
 
-// Print a process listing to console.  For debugging.
-// Runs when user types ^P on console.
-// No lock to avoid wedging a stuck machine further.
-void
-procdump(void)
-{
-  static char *states[] = {
-  [UNUSED]    "unused",
-  [EMBRYO]    "embryo",
-  [SLEEPING]  "sleep ",
-  [RUNNABLE]  "runble",
-  [RUNNING]   "run   ",
-  [ZOMBIE]    "zombie"
-  };
-  int i;
-  struct proc *p;
-  char *state;
-  uint pc[10];
-  
-  for(p = ptable.proc; p < &ptable.proc[NPROC]; p++){
-    if(p->state == UNUSED)
-      continue;
-    if(p->state >= 0 && p->state < NELEM(states) && states[p->state])
-      state = states[p->state];
-    else
-      state = "???";
-    cprintf("%d %s %s", p->pid, state, p->name);
-    if(p->state == SLEEPING){
-      getcallerpcs((uint*)p->context->ebp+2, pc);
-      for(i=0; i<10 && pc[i] != 0; i++)
-        cprintf(" %p", pc[i]);
-    }
-    cprintf("\n");
-  }
-}
-
diff --git a/runoff b/runoff
index 3da62b4..21ee8ed 100755
--- a/runoff
+++ b/runoff
@@ -45,6 +45,7 @@ cat toc.ftr >>fmt/toc
 
 # check for bad alignments
 perl -e '
+	$leftwarn = 0;
 	while(<>){
 		chomp;
 		s!#.*!!;
@@ -75,12 +76,35 @@ perl -e '
 				print STDERR "Have no toc for $file\n";
 				next;
 			}
-			if($toc{$file} =~ /^\d\d[^5]/){
+			if($toc{$file} !~ /^\d\d5/){
 				print STDERR "$file does not start on a second half page.\n";
 			}
 			next;
 		}
 		
+		if(/(left|right): (.*)/){
+			$what = $1;
+			$file = $2;
+			if(!defined($toc{$file})){
+				print STDERR "Have no toc for $file\n";
+				next;
+			}
+			# this assumes that sheet 1 of code is a left page
+			# double-check the PDF
+			if(!$leftwarn++) {
+				print STDERR "assuming that sheet 1 is a left page.  double-check!\n";
+			}
+			if($what eq "left" && !($toc{$file} =~ /^\d[13579]0/)){
+				print STDERR "$file does not start on a fresh left page [$toc{$file}]\n";
+			}
+			# why does this not work if I inline $x in the if?
+			$x = ($toc{$file} =~ /^\d[02468]0/);
+			if($what eq "right" && !$x){
+				print STDERR "$file does not start on a fresh right page [$toc{$file}] [$x]\n";
+			}
+			next;
+		}
+		
 		print STDERR "Unknown spec: $_\n";
 	}
 ' fmt/tocdata runoff.spec
diff --git a/runoff.list b/runoff.list
index 5a8a2f9..3bf6c87 100644
--- a/runoff.list
+++ b/runoff.list
@@ -34,12 +34,10 @@ sysproc.c
 
 # file system
 buf.h
-dev.h
 fcntl.h
 stat.h
-file.h
 fs.h
-fsvar.h
+file.h
 ide.c
 bio.c
 fs.c
diff --git a/runoff.spec b/runoff.spec
index 76ecb73..dbd6d5c 100644
--- a/runoff.spec
+++ b/runoff.spec
@@ -12,20 +12,27 @@ even: bootother.S  # mild preference
 # bootmain.c either
 even: main.c
 # mp.c don't care at all
-even: initcode.S
-odd: init.c
+# even: initcode.S
+# odd: init.c
 
 # spinlock.h either
 # spinlock.c either
 even: proc.h  # mild preference
-even: proc.c  # VERY important
+
+# goal is to have two action-packed 2-page spreads,
+# one with
+#     ksegment usegment allocproc userinit growproc fork
+# and another with
+#     scheduler sched yield forkret sleep wakeup1 wakeup
+right: proc.c   # VERY important
+
 # setjmp.S either
 # kalloc.c either
 
 # syscall.h either
 # trapasm.S either
 # traps.h either
-even: trap.c  # important
+# even: trap.c
 # vectors.pl either
 # syscall.c either
 # sysproc.c either
@@ -37,7 +44,7 @@ even: trap.c  # important
 # file.h either
 # fs.h either
 # fsvar.h either
-# even: ide.c
+left: ide.c
 # odd: bio.c
 odd: fs.c   # VERY important
 # file.c either
@@ -46,5 +53,6 @@ odd: fs.c   # VERY important
 
 # even: pipe.c  # mild preference
 # string.c either
+left: kbd.h
 even: console.c
 odd: sh.c
diff --git a/sysfile.c b/sysfile.c
index 4d891c1..ae7d07c 100644
--- a/sysfile.c
+++ b/sysfile.c
@@ -5,7 +5,6 @@
 #include "mmu.h"
 #include "proc.h"
 #include "fs.h"
-#include "fsvar.h"
 #include "file.h"
 #include "fcntl.h"
 
diff --git a/timer.c b/timer.c
index 8fdecee..8df75a9 100644
--- a/timer.c
+++ b/timer.c
@@ -30,36 +30,3 @@ timerinit(void)
   outb(IO_TIMER1, TIMER_DIV(100) / 256);
   picenable(IRQ_TIMER);
 }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-// Blank page
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/trap.c b/trap.c
index 5f1cafb..651a9d6 100644
--- a/trap.c
+++ b/trap.c
@@ -31,6 +31,7 @@ idtinit(void)
   lidt(idt, sizeof(idt));
 }
 
+//PAGEBREAK: 41
 void
 trap(struct trapframe *tf)
 {
diff --git a/uart.c b/uart.c
index 4cd1e0f..576e254 100644
--- a/uart.c
+++ b/uart.c
@@ -5,7 +5,8 @@
 #include "param.h"
 #include "traps.h"
 #include "spinlock.h"
-#include "dev.h"
+#include "fs.h"
+#include "file.h"
 #include "mmu.h"
 #include "proc.h"
 #include "x86.h"
diff --git a/x86.h b/x86.h
index 934b9ec..e754b28 100644
--- a/x86.h
+++ b/x86.h
@@ -122,6 +122,7 @@ sti(void)
   asm volatile("sti");
 }
 
+//PAGEBREAK: 36
 // Layout of the trap frame built on the stack by the
 // hardware and by trapasm.S, and passed to trap().
 struct trapframe {
diff --git a/xv6.pdf b/xv6.pdf
index 16f6d54c268cdc23fb10c03ea657c8c83bcef224..fd4efdecc405868277f8a9664e8b66297dd60676 100644
GIT binary patch
literal 147038
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%0AjY_V0JVC9jPJX4bc2=pfJ9RB8pZL0
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
N9*LsjDjO5Q{{!u2Qo8^E

literal 146568
zcma%@Q;_J~)^>N>wr$(CZQHhO+qP}n*6!}zwr&0UoKJt%dvk8`q~={xwX((>GYN^j
zuqX`!Ei)v^*kxQHBnv)0zMY{ZBsVvmw27^mvpGKN--;rgsD-t&i6cIpsI`H!iLi;0
zov{foFQk*RqltkHq<eOax{lo@C!)_w9eOdG3~DRkRI2rhVSvp>vv?M%#s2o@$PDi|
zBF>#CB1*#KSl<p)vGJ6xT?1THA-#Y@D3jT&H$B{;m(l&3-bWU4(7^@9*4e<2KKF|S
zD~vZK=$_$5ty5brHKFc9f@=oMcfRB9lGtaTkwsPNMqY7#5{dGh#r4c5KDc?u=s>~^
zP2oCsHliM$sFEG(yfx#?v4Z%Np}jj1Wg$d!_gxwC>v#6)`{UIIU74`jT~7Yp!hM|p
z{Y$BnpY+tjz}|zAu%eQ53;IOiqzHi|5>|zzqLnAzB%)qji3B5s?tym3qM5=XqmoF8
zN<@uai8rq&kGlKPh%ur@Nney^Q)sv?9A42TQC#@VM9LzeUqQ>H(^K(;abR;r)-ZER
zePxTs1c=@zI!wWX{R(=ktx>u-f%edbU`ZkEnFnr+YQw1O!l9^Yi)8RB`+~W~_QGaV
z7L(_Rz>@nl&GEvt=F9WeNz@eItlW;@r=w>>_nwy~vT+5KhS27D2yaDov6Fkj-T{}2
zy7oC*pw<rUY_F0rBd1J>$occFWVk0Ba8bBhjkVI`aA2ihQBzh@6dN;cNYjKN@BLWP
z!X+D~m5^c4m68&nvJw<P;OP!7Lns>{{*k7Fsr1wFYrAC1Ga}B^AFARz;SFrDZSHhD
zA!FB1bdL;*djcL4#tC(#d5`3Zd1VR+aw}l|fgA-|2Q8XrOUrySfY4i9^XPfW6_zm?
zfY;_)6$7Hv!U_8}%<cNq=`7I$h#1!J;-De9G&XzM)sQq8i9@Sz0M^eY#mU>SEP?@H
zI*k29#i~EF85odiEAP+YZ<}IolyOp;{4`eeVd`QE8e1q*Ck`Y?bOGe_ukuh1jt{se
zCFeJK;0LX2Ya3q+qi|s(!|x4$?m7`6FN+C5$>UjDfUP)|?S8N30Xl4%A1^m`&4rr@
zy-ysgdw>P0IL3uMJl*Qhu2}_c(XoFWO=f)Pj7ENMS-U;M<k&#B3?!C7rA&jA=~z>D
zi)N03J07~FRh*Zkx@GKbAjG7Lw{z06_{19JP&n`vTeTpz6wu)ZEz`2+@O>0>^z`<2
zivo0ZcDs7Gww9u;#MdI9!ZHQ~>1(0#6~Z&Sxe03RQiCKs>{iXZ69DKNb66;pdTEeC
z-sVMgTa_|Z*-_MY-guYG+|}g_?>%lbeI0JDzkM`C#gP-<oV{<3fYkN<;5J}MiByRm
zSA@V~U~NhYm!0781H~5h+jMlJk>i^@O!Kx5cky5<ZY4X*55Mg9Z#o?}79&DTbm9+A
z<w|ay38VUmeRCH=Q+Y8^nW*O(=Qeqi@IwF*lbeywIwemPt7^s}E?d**mv#{YY$G<v
z?NjP@Bto?>ks64$_5KE=o@!4OEDCgbd&{GYQ=nXHeRW5zh7Ps$E<HLrdRuuq3v0Uh
zNk&S(=}X2fK#hido&bv1fQ09|LCpW-4@^cmL2c8U>-#pE0u=Ikj$;vl3XdgkiKjx=
zpJpXF0?BPeCO}SMIbJkUPg?sUl4RT*%Mw|1BxDA(I7WFk0{dck(0@N&A9h@V=p3&<
z_FKDY2V=RAal4k*>{WFoh&&Sr-+Qq3@O*ZXsl^#^6@N0OLZ5_i(i47(G3KIq>l?y4
zJ`!Q`_eOC@!B{IE(PSwN#Mg&IidxA9-f8=^zXS~~=A-ah4O}Fo(lEe!VhA;jp%J<?
za<_IS+J#vhnVg)QE`jr9%A3PVb!^QeLmsCNZ14WgkSigjD=0}9?3b;nW7W^jII{+D
zA7+Mh8d57~n&{8g<1k38b)?FsG)AFzwG0^Znii!I|GbKR8OLaQ5mUf;^B^A~-G=S?
zxf`mLCId>P<^~1$xuK-W&<0`(o5*@7kjO7$&8ZfTJ^jO0d*yKtH%oE1`vjs=`J%>B
zX^)L{Tu0F@T*5APW%4N6AS^6jbsI5}{J?!80O;QdT^*!JDAdey*2OsFoa&eAZ8uhM
zLq~ky+}<MS`^JJ9{75xV3+9-yWxD=8UxCKd@gE+sSMzvb+uosHl7Z`DKN`O0L!*`X
z%Z=Mpv7*y}blJF|NQ^GpSC=71RYOwMiK>l}7wx|jvI*S~wUjHpy%_m%G`L(0`a}1z
zcl629ixdvy&}KcMfudRRUC3=zq}wMOLp$))^8)89{RMIs?H4Ieu`m*I@;n_8f`)$?
zxH(Zf2Cc}&k?=q<3`ILOCt@R4Es?=HRT*8IHs{82T<j8bl>tSJETy7AeTJYBqH+z%
zqHhR9E15ku0r_d>?{6@#j6SK+x@bQlyucs8fYF?ncGRRqU0t>}Q1qKN8F{jo+3s$J
z7ur6Cj?#4D=R}U-oPmrdj=vYs@w6_Y^GS*pF*)onaZ<=^n;}qcd{JJ7m|@G4t#Lv#
z=<9nXM*>nE(qey*Yb|)gwN3mUY^G|)(68A&JxQ#)jE{)U3=3ews-!OHiXkT?g8H@e
zfbLywJdx<_c;N7BVXXc7V~uNl%yd8WgQmW&y=W~qpwE%HI7Qh<fSF6f&`{Jt_|*5z
z;)7hc16{;mw~3i|aI^TNMrqBBwK<T-x=bnTnbo|#8bCw~s9ITA$J1Gnps5|n`VB%L
z=ZO|-H2sI+n+b{yWRmQTnzI+TFlUR%qvm=oXkuDxn)IWFFm1!tXu>H>T=-nKaqCqr
zibc{rBIp^Uzl<d=!F{<fyTG)pc`fvkh~OCD56{v9k7G-ulVCfE8zb9yT^3^lotniM
zi!@^yx(37-K;?p6a4Vh0k!HRqpEC`is}Km=c)>-^=BPo|{QOf#i@P8gKX8~1oI_nc
z*=8aq%BAZCm|T_2pu*UZjaQPZv>R)~MHbZ6@E_JHJeI(`>T4j*LigCW8+dC<UUeBR
zxvlT1snDcA{OIpzgi|?r!BHsWl{-L>sHOs+APs`<Q&J^6gna9p(-f0QKZ#RahwIFm
zgHQZ={6<79tXxY2%EE)*TDI`tQ}sq!O{9K|!34DV`n#^8ADpjrS9wtoCbq`^jW~bL
z{)I*Vf}wvUBO@yd<bT%~nEt^`49x!-G-=sobs+ex)$JDP^i!IJuJx|3=Zj-8ueWRz
z>L7>KjK_BMim1*{)!lF;Q!AD~fRIPxAHczfF>z;4VfZ@u(#}5YT;JULK40WDc6sFb
zWJui6f<0aPqFVj-*|F)XA@y~dxPExJoVzwS-m<&<3Ei;KYWryFb~A&r*3r%|tE;qi
zhzTL{)m5TpV9$)Bm~QH{Hqljdj`~<%csrlq7^3aF8>o00={S17dwVnP>C~-JgPU4u
za>AptQ<aTH^UJfy2-_c_*`7n~dw)B1d^@_h!tB$C9V0{Z4tL_Zhb$9jVUJRc{b_yO
zlD_9AW^hwHDaa&gdu9H38_yD7Dk+yuJiC*KJU=-*J^#L+0HNzWQ<AarZJ+`XmzbEZ
zRm7i;m6KfNPO}##F%P{A6b}(^xmrLD08Ir_d9s9WfR6OH=~F}juZZA`Dd418ciX|m
zV|z(!gOe3r)Ex?xn+05^E<LBVxbpg#RKlgE<K?32zDOjO<e|T9f9uxd0~$;2k{zMZ
zNZA$i{~!R~kqI{xQt<c6M-r5#tuzitCve=}<oIwuhCaPQBcoa%v4%=Wlv;p$wI@kC
zNXBUA4=#1Tf4|b*-r}LnTaA;_t{yB+hx0V%c#VkPRV33umqnx@%C23lnv(Nhx^Szu
zSxu9hlXcL=j2bx3XdstCEA0PJ9tw7W0mlgkG>}XPJ20zmvra)v%}8A=BKftk;5eXz
zB7%+yl5b2c`{wuVyO$`}E+@fzjxe-(MRf0iQyZp80gsZoLd0i<Z|F8hCAw>cwtQbM
z(AwMaeYorFzi=wFzF#7fK#0`LzW2*TM?9SC6WlEc<_^4?DG1ozgv7A`%#T0X;0-_*
z1jDd}AWP$^QhNL4{rK77AQ>%k5=lsOU(0l#h=F@jJ6__}o~fmRYlhq_6F`*?B(Wh%
z6Nx9Sxjzt<I5|}rTxV{*>A}s<C+aa==-kCva`^uIB3%YS?1%=7a@_zkbP`e32zOV4
zr5BkQnJ@fi;GtRL!5jxy;!nW{p^?<RGNC8a&hp0>Za)$9ENL<!bQmZ%zyP1|?V45D
z%Et}+=O66R4p&&ON1`>vb`g?b87^uWoZfred-aVTQ7c+`;K<)N+gmUoQI;*gQ5q1B
zX6<oIBVUb+F4~r9!_PR;QvHZwu*>v`!t0Jcc;9AacRsgE65Th@i@>B&GaL{MB6=ri
z88s*>F5(RbOhAD%-_f-ZPFPIIfZ1j|AU~_7j_9U7<Zi)6c%p*0wg}F>sq(175IsfS
zQl;eO!X4jH+_0V;`zJFr&8Yu0KbuCS)K>-k0S-ZCajhoGh+!;>$Bc+xK`)yX)Su(a
z?e(}wEN!;qLIDPv_HQ9zg!xp~DI#5#vY)s$g5-!9n1fNCCwCBmuUKnA*8FoL2*?Kj
zsmyn&UsEUBT3@xw;IN$AL@{iNYYG@C9LYFRRz6{f<)Mh{Mm<(>&z{ny>>91fNh5gr
ze(n0at^Lf7FI<>@scmL<!-t<L0j>K76i7sv(14=U-`4<XbClD$zHTi~YfX$$TF|ve
zx2F8U3u==@4jHl}JyPSmQAjC%Kf*ogVI11Bi#Re>fHh@SjjamCi6-`Jx-mDpdMKTX
zHA2{WIKe)@2F@2hoD`wmr+v#h;+b{XA%OqJ(8<H4t&^YoYY?w3<nYSyndsZ+%xL6m
zpn0LU$Pa_NRqv;-W2o{Q&MD0C`gfiWpT9N3&=vuh%UHX{(equbqoTZ0VHtg7J01z9
z=cWQ++c1Ac%u_up2*ykJA0mgiVV*_eg3kA`ch@G%630A<Nx|}r&3^b{W%&A$9%W5~
z+vS35e0h!Ij4aS@M$;r-bYpu}`s&eq#EB$4ln_p76C=qD`eXcu5M_R@rT&{gIMQH&
zdIpKddS6~GzQt8Skb+?<+>7eQ3Ofo%cEP;P8ABG205wp7v~3YjE0-4}r~8+2Cw>N6
zbzZwM=|;VlTfv5tAeN0LXrKsLro6v;T|I-`4W?0QsiV=No#~KoXTtch{oH?0eW8ir
z4MwuJk58VRKXF>P9s47bV%{$I!`%32+!+ZJ<mVQ?%->#bKf^C=E8=KM<wgO<)gu9e
zpoV6|qk@+R!<T&1u85}sm=9gM7polGph`ml92&E7bUx1>zq;^FJNewP_-_m>ub=wP
z*nIR+yWN|{-bUh7x9Ce>_gvk*@T+mGzpq`LXy7mhiQ#;P0wSjjuVm1PKz?N!=4p`#
zfJg```jg)3UAJ<e61jk3P9d(DLh=(@SpQaE2Qr?bH6*b`j#2IooM;73u!}A(PUKt$
zNFEh~4@i>F_T{##!GW=uJ1)`abbs&E0945uC8i)#Qdh*%#9VQ09v4R+dgL0sKfWKy
zPUBrC8x;kFE1H+B?cIw)kcQ$kjJN2PZ%dYdySB}Nvyrwnz>XL&eVU6&B2Rk4mRy#e
zeOM5U7c;saAemE~)xj5xGcuSayH464mxQM??@2GFc$G&i#j(roO-Ot$#|NR-gv=h~
zS1AjF`lC6)-<~X-5GL;RzV@s^_906!@Rjlqq!6#`i4zxz*MSYl5Fq=TOMX8%h4PGf
z=bj!_o$U!&{r;9)C1YS^+yJO=f4;h7(O?vWI)c1p&!=>T2>#R}7iMD2V01|G$k7rA
zGd!0|ecc&SBm|uanaTkn1T}(U^wpsFju<-ECVGw!erN?s00p`L9-V_=uw0xg1DG?3
z{{%q1nz~pDMNmB3*qLRC5KK^Rac>N_)c9Ufv$psM-a@%pq*wGq&|VT9<qg)qS4g1A
zLYcZ*$-P@JT@nKY3P<<`<ZBYyMLAf6AP<2UVEERz3PG)kfej$aynQJDltax^wjv#p
zKr{*=*Svbr49DAqL%vv~K%}uCXhHccyF%X$K0{6b47DU?IHa&u!%LZZ^r#?&Ss1-m
zXuJiugyP|e@ZqVD3bmK6psTY#D9}B*w!D3P`i=2ng|!M+09Tw-UgdRoFsv3cbbK$#
zOO;5A#Zd-Jui0|nk@r*o9;mI(L!NkDN&ChXbd6qE_7FyZJVYVbA^p|i8E@E$tMwn0
z^>2LoH)b(0F#j)RvHugZIQ}!tTDLVCL-09Kdn7{Pm%fqO=1w#n6b>Cl2HIqR79^-+
zjz+bl<w$sV;VAR)_*jhB<kttML@-=iY{{-XuM?C_j{iLSro|KU%LQ?0!|}nXAQ!3E
zj2uglYW?`E|FKRyF~dFM^~Lxi&lOel9=yTnXi{JJ(%_ARa|(|olnq?gjC!Mi&7G9E
zC*Y(i-}c~w&;&*zTi{~w!;Y!TG9!R4{uI$HD2W!N-kfpu+F)&y+2p3ls)5h5yT&w-
zJ^sP1pl{H{aHu>O7OfceW_dTcOm+qwhAPtmhB!N9-k%d*Z(!jBj|WdouHWuT(mV0P
zDv6L8b!X_qp80v4`ps1$E1QxgE4Ta`^aL3BGA{Soa-vx2ca;ur+eO({%`GW#z2$^g
zjM~N3mmp2<rs*d4RdB#N^`W?^sx*dT6@Kz6Brs*lb7#7&F8Hk~den~+q|6HB&*~&O
zB2hEz_2DuX4Vka^_nYHg+(lGI{PyPHz=ai9o)sFj1huBSB6%J$#3eW{@+dsZplP7}
z0M%Y1W_nmsa-{muMej)gSFjs+a~UK2W|kWPUF}?O*rekhlN*=V6SYArV#06|4;tW}
zkJP!HV8_^Fj?g)FD^de!*7W?CYR_#Cf)=@vubzyVp{q0%szU+*b23<Z#c?`diEmm(
zZi-~ZSH#8Oq)AwGpb;=~MsWp`-JNZ`G(5B&zZVNnQ5}-O$c#$rN&$^3fo{&lk_ylW
zS{F)gafEE>L}9Z!?20$;uJ`8l?)Pi#N@<5aNASY?01E&1iug-;l<uSA27LO0lL*LT
z5s=)|w+T2xZx)e3cO}K~b>0_vEmD1j{-kgml;B-Z?)oqd$;4nM>8_x_^-D`ol!o6y
zH!`#SKB<f^p_GI_J1Tox9?Pt3U7;v*)PWO@`=e-U%S$Ea7v2~_*3F>6*KHCNMN=NS
zvWdu60r<DS3axPJ9+p5L2|Fu2%$nX#s@Ab7WaMr%X416>$qu#RX#rHZjJ<R~Jpfe3
z`Q!N!rFwr>sng=9eg`=E(=(BqX4tE8AvO-ieSthU=!X`g9KS?!rZ$eM!Gadf0y5Ct
zPHp&{r2T?O;{-U+m#=Eqqe13|D?JrQtn!ne>#K3Qq;1Uv+Sxd9Z4!nUR?dz_oQjDU
z26V`YP?47iEeX>kd%hCE`4iGSDGzZQ3!VvQ=}%kEg`5aVRP~@tVS()kA4Vt(+Rlp~
zmoQbiny5PC*GeZyMn*6wfdvsN;Q<OBD-lY(s-Mt}?EhTm&xabCjFsOc7QBw!RpZDF
z%-@`<ag=@2<J;Bg;qEU~6BX1w-oE^z;T@7{EzgNSVy9HSI$-(LtYLsGKO8TVvCZ0b
zgvM-GaM2=3TR-?ky6;K)Zh$0QHv`C@7)AgD%mlF>Mj;+_=mEZVb|ZeYsRPw2FLSoi
zIdkx<6qq!vDS%Vv7>V<=nrUSktgIfhq51Tc7{u9b4el{AnS?f*bRJqfo92y}B@^tJ
zNo??2ZA?V{tKPRWjI}I`C4f7{yp9<C(z*H#$IKe_*FHm}#V?->0(rT0$KyBx3Y?jD
z@KJNd!E;A2D+Q#}sMz78Zm+PJ<L^zT9x(<{O&Egqpq6xNe)8F~cN}d~GKuaP`$1u5
zf?p2Jr{nmY&W_~$ZU8##qulzq*SqR$=;0EA6bWqC_PjYdaz7K73SpNGx!?DYt{$@O
z+pDzvvW*X@8PHnAPq8r37)ifv0rWMNN4y__e0x(_cJIu&#`AKxsUbh){Ql(XCw}ui
z18Z#}!Gqx;kmDB+V9auE)KB6(f$k@$)?Gme5Sj`&#!T=^kAF)v9-M_uRW<byr6g4Y
zFjKV%iBv5TU`&YcLq1j$4lXA#l<_{q=SOIvOy}gzd`|*UD{JA@sPkI4&hXxFQH_r%
zfGjc7!Wl|$LHd^%e`~C=D!QAG9HE$%HA>|3rq{C0n+NJ7iX|b6xi1rl7rqOCkW3H8
zN<bw_g6zeY#N6mQk4%ciq@mb&%5I)d1sqdHhwc;v@nn+oI59gMV^cGl8?{cmEImYx
zgk9t{^iq7~hFp+ElYy7hVnMI>Tb=h;c0?OvD-9_JpEupip*2B4f50n?h@Fq!c1`|v
zDbA}hQ*`+{`{fY{K75PKnBTNFw(jgJKvX%CAZqQ#))ieSCYsNYuAbK(ec8Xp1QaIA
z{v$q9M>4L!)7xw{`yG5G#1j~`?I+eSDUE+gi0jVK{q=UqE!G!#q1^X->k|q&-G1(S
z>_f_;5#hK8dDlZU?<-6wVC8NcoLZ{cfWA&+R#Tsd0PUpZe%s&jx~_*Wmy9cqOi>$Y
z#;?Z`mBS#$p>C$I#|DoMZ7B}W>p&lMWN}94_vzqQsM`Q(XG$uRCHP2}7Zkk{2G^gA
z^}c%G=QpH^7$COR;_pK(hu_UFkx5qoi40kaGO&=MLRwnfiHCr}>)T|^^wDwWrx0No
z!yZe9PmIxae2`?n2r~0|$gksP?3)?H&EQ#ev36Q|Y+Ti`3#rk?E;iBVyE3mPog(1)
zk7B#<kQfl+(})++Ez7x(>TwMev6ksr84S8TO{%Y;<Q)P79OZPEAkcv^>*udgZ62Pm
z-~n@?S6=eDtnaE!yO8fsdB$(QqPmG+gEcFTa4#T;jVZ+Q_aKcgxlr{9_=D^=PL5DJ
zq@*Qg$00~rbx)2=XEy&-e@_Wk{T1rJLNLgs5Yl;;=xd%ylJ^oQ3PZ6_!7hdHH0xYD
zG!-CKz)QEh0mM1{w|ouXW{<oLe5(Knozy!BB=ava&9|32Hvh260cO?HEdVwiA6GT~
zGKi@o0P$dmDo_bxk00n-!^FfFMm^CtPs;xD3QzC`&){9ZCxHzXZwMV^XfsKr>punN
zRpn6O+2s1r=qKH8?sE%?ZvvO?jZ)rA&^}G(JZ-+ZR&3BE)^!2WUGOz^43Kq?g9jHD
zUJusvx>2~4R%E=SK#fQ$Pi8<*SVrv+T!AKpJ!psd9+m~8iW>_`TpEdY@g+We)>X}h
zJ?P_$+h1%V^zv)_ikL6@8w{6L9sQp;^)F2NFKfj?|35gz_)lxa_#av;D<!Q7gs)mX
z20W2U`Qxu~Hu`%}1}JnL))t8pWpv|0d|XsVo2$M#4kwbCaVt<Y%A>-LV_7-A(vQcC
z50UW%#Ka%gK091czh3D5Ym-}({6gdbOA1_2+Vz>gw~Te-Aw!Ba?g#f%ha0x|6@t%g
zd3G~$rY;N2;g7)u`98ULP0J~-(Ov;I30`4S;Bih{QN9Sh19A`2){y?+0SlBt{ghrY
zismHw@XYzy(UCpN54YY7p4~B>ptknTObFNMH<P@9aS!9Z{8&PaV#KxU?OXxO0OTi|
zz-~#*1`f7p*^u~pfs`oTXVu3hevCEaXw<dy{1=4e0$4yF@E-C0^Xf*B&`mS;+uotK
zD}zT_uoSJa4yAioPY=`at~`d>3_0u@ZWN%P)PewURvO;*=O2ucyr?lbLCi6jZfDGM
z3UIoTP<iAHv!@#?C8hCVBH-`R<R%iyQ&c$^ms_KB2fA+6ozPMYP3i&*5HaUqI8o3@
zWwLn@&<ST@IW--s@rm_`L&wirB+<8a85RE^$_qyQQmyml@RZI$LQ-%dg6=9K7RM7#
zU5{=!=}Je^XlSAC%WVj>66?HC!yfO>4m8LN%2-91PIXv=tdj!kRg_60!kU=Mrav;i
zxO$X(J<?oeEla3i2ig7%G}7XgkWf?&+9KdNA_~o@t=W;NAgAgfwVVr4Mu(iCuGMmF
zP6qmT0h|^K#X{%&3=)vbQjZNNHL2yiHq;?Sw<9k6z=aYEm)N5p{UQ*6_J9hBP43^F
zqm~s_E90QRH0rjtRWlEunIb|sk?K^7(J{yp`M(seP%gxPda4C1w6K&pA`X-N`+X(f
zWlUQmSH%Q_X!g+Y>`i|$7Dw<3pGkhx@y(8=rJbY+W|>DxDnmjgfQExBXzfbw32rqZ
z_^ktv69)Ksp^}mrUF&ru19k~DaKVSBIQaPyH9G|d=psw04uq>LFW4gp-e|nrdkab(
zIakkGHN=qs3%v43VW!3#_aTr>h;wzK7l2=^m!Ly?rOxj3<;8NLL#dR2W$MET!mqr<
zga8|{KVW0cppFCswn$I~a%QH{s~`getLOR~0Q@=$qy#%cfd5Rb9CXQso|jcX-`BNt
zT|2zougt>H>ls6KNZb^!V%lfHjFjrY-Lhur<vw1}bu29t>x(w%gha3cL<1!C2La}u
z4o<*wL{Qt<qW1uT)=f<p(oOSk8i=Zzns{4D4!g;04>MJxL^q%Yn_7jcjL0@WZqKQ+
zb!E)J#mS46^KZoE$;wV3!fGVK;5ZAhbQfsx7A66=w5}q`Yqpd<n0P}VCAj1&T@-|a
z@6MpETc1vnA7!*crE7~?`P}pP^3vO`Y39@6qq8-A7`u>@n$IYnVRbVV*RlNtiX?~?
z%665_cDiX3Rz(LlH`w92j75jqrhV4d5-9;CTCmO*n*{1<Lnf#?CO8vKuCfFoL0Y_3
zYkiknVp`(z=-BiA?w%xYA@(^OZ#uc2ozCxJYeFp>TziFE*NK6U{Okd=(A6-rvNp#3
z0nx>`J8J106YOv`3lqz{P~>`uFSA2rhY4(_#0mUK>@+jE$h_*WrUBL5D$TvSEB5Ej
zrbWFdnD9)fRyewv{~4+?wgUwG*EuT`M+Hr9MY=%kK7s6WLUh-F*yo3$EdZQXTF~d^
z;dAah-`7tq#Q5otz07Sl>7^|g&&m$As~i{eoP6LY5Cd<tABYODekkbz5!Zy$I%X^b
z((^d^fL6j9Wj#(^_xcv={h6ID7Cu~hV0W2&y!nMvg@~tvivV5a!Wj~nX>Mk9Jp5v=
zj7U~2t3`WmM*s`FxPCva2LWa1HDBGa6TFI=C(;cLoiu-*IlFsIO$J)Rwi0l(0F4hz
zSy4%$*-An<F}^598>6w{WfMbq4@V7-7&E5;;$TXpdz6y3a>#b*SbMQKPS(}!)7vv<
z4nJ-4)iisz9(9^v$$YnTf;FIU^zU18Tlsy_`wjq5h*%jhrIDKVpkn+62nkg%B$bh-
zLQ}_T>ZN_&A&kjhpCG`L^lwPn^DkHWJ!0qrYUCp|T3LC*6f$N3ka=bGkuVFl$Lk^I
z`?!W*9F(84!^s^i0?@xgs+FH+QtGiSaN$F}G#(ULGQJ$0IXMa*45Hpl%L4&9;Lz2x
z1R-k}q;xvx`0YXME90+7?rzxlh2L|rxY~RAbPEp#2#U8#<0-kG%^<nlYk1=ad9C9N
z#(q^&!kA-*izkd9KxGO0^LO!gR$y2@=aVO@IffYF;ztsy7MVexP`q^u<*Y=KQY{vi
zJQQdM_`Ei8?>Qg8Y*ri*f;SrV3F#9SoMCC?Uz5UKt&de$I-<Swj7e&5VgTkf@9;IP
ze_9CiWeMS_#T8wL%b!|T;Kn1}bBck+MZkhCXTC2Vk;P@AbK-3``}~}_y0Yo*@T<Ms
zOjX7_@W4Pcj)+%)nP5d3xX&IBtf(YJUH%=+)w^rgwNK$`yKCsxt**^|RxcQz0RIB6
zcFlSe2C6+oeKrYFg9Bh+I1-u%QBHGfvm&UmPJv=!)ys0lsQ<Lq2RLPP=zh@0@`2iH
z$G~1{t=JQ4y$y`ASVhU#p>1rt@`69Po_I|TVpClKr75@EHpy%QsC0mII@Ovr($haj
zR>MZjm>Fq3>c_ac2vj66F}J{4-HH9#pvU}#NiN;HTZf>TLgZ*+ENron+Auv#mD^Tr
zE!$OG=(BjQJK>8n$a?ABIvE&`1AC)t1{4mvN{e0VzCB~1ON~l<ni-<OmhfmY9b3qn
zSWk{9A5~F(>Ne;nQepLAA=!g-sRxlb#SD1cMM#`-V0q*D;_#7kQ~z$Cl5D;{6LE8p
z&4h%u{V?b?DGbSg@B5(Z9{v^1rggAi*30VSBFX7nM(?&YHS*{`cx&ywmpgUx1Pz>h
zi<y~S%eM7kpq6FYhVd~f(XMs{q`I(D(Yx-A{fQ>#tu6KsBKkM!{1*{1a{Mn5{ZlY8
z{>OspFA@DqFcl&HTQC_%7?CH4z=(`VfClg@t>K!AN01(69Nsv|I-T|6c7Ol}>@Bve
zthA`*oYM)yro?|X{cz~Pe6vIBKe+x652*sBU4DCYeEj91EV1W2J~-a+u>fSdyBDU8
zhZe&hqh3V2(ss^Bc4$Q_n$kS`TWQ!NxCIS?yV*^HdBSw|=<SFzOMAz)nh^T-Be_LL
z8WUv0UXKmiIo7Q*+a;dat{V8ZrnwyOvL!zlWpvHDX!a!s^CD%#cly^eVa=T2W>E-~
zVon|<NlZ3pve_*6_qnq?Ff*}U=H?0Xz5_3}@3x1DO|HEnw%x_V$eilcmrdK&j34T3
zC*Fsb-!70`u8jd~<cOIjM`s$&oX{ye1a!3F*C-&q?VY#~Ks|c${Cj{%zI6i$dESGR
zuZY8Hp+PX++lj*Q`I?s1oh#lgsI%l^G}$Tb2gjfHj*eg}pHRH)jgmpx1Vq8=LP17%
z03H@vh@wM7HZZDkeXi{j<@@1d>y<@@<5Ekj010aYP~$?Ppg57RidtE8zZMjJ@46vy
zY}@msfA5tcq3klCq+j!D8W`4>nQdEeJZi**)RUG@PaKer0OtwSs)YBka6Suj{uwDp
z$9(|54p_hh@|z%Usu&#d30Y{Q%ty_pP+@Y~tFw8D<|?K@nDVSOE6+3&m#qty88V@q
zH=)M5@OuC722hTRq@{WvqNZamgy16?+t#=GG9ga|eO(|;(~m9^;l<|hd^rAs6Rh-c
zxnrg&U~9gm07WRS!ih{8WJm50Fvar-e1sq?LK2XGD^yIdclgLf+|X#_uk$!fZTbO6
zE97)vl*jj6taVPdeNC_)6tNN4H)gIax951LQZWZ}yaShGTu)AuRbot3mO%8?Sg-c8
zXM|Y?{w<IwtS60HSVvkEMG?j3t@jRLwJq6WRqZ;yGxZtev-ghgiUX>7H=p4c9=5c@
z3E<YRkVrFDf2N^x6ddeS{l|+S%yW&LItvMDh@dBy7fUB@8^Xdm1>=MD7`A7+jFQP-
z(HsPUGk@myp~}cOrI5HI7HI_{eVb1DQRM-IV>hvahw7OwC?_ZoVRh?Fs_)0~7tWva
z{u*e~CHb5`+A07NHO_!o#3#7syQGi&j@X6%&`pbN4;DOro}a*Pm6p))e7)1ht%(ub
z*eDUTi(Y;zu>6eriA5}xlVjqV;|+_Po-Wk4b~~$fcg$LJ$Mf^WK`DE|)_}Ha#IeOS
z6%x=Wh_e^cmC3i%xbeV&?187Q-L<1?Y)cSArc@!xt-B*v_}!D^u7A>5Mbp~%;t8>6
z7`rEX3P+y=qKbrIXa(@@r+MlcgLEPArzWtJtnMT~H0n%G`Nfktbw<O^>tQTTIT516
zfjcC$>2!X*We-I7BWYGHwx-0|?p(`btvdKJu4P)*vdK+j#I6@*wk6$xv{;LQ3gK1k
zYph6P+IVRK($;UFbdxGC+oU)5{;=!$9Z8Fmh*B0XDi31MD=sPTV4@@XK=ulbg<=@^
ztq9=FK&-0zuk^f5?<a#?Z~ck!H#Crjs=3}Eh^AQ=fQ{`iH5EMFces-#Tb;kWxbN81
z_ngTEn2GTkF*TKR<-_M<Y__Bp0OA6LQ6ARfAEZ?hT^fjceJH8Mui7?E?ECA6D7xx?
zc47?^zwum?U%zlbLP>0So0Gyvh9Mo^f{l0ysD4#K)5k2(1t=#cQl=oq``u#SWBI4$
zCegWU8-3bs_jTdweS+X{(s6xU!iXvmjrYG7VhRvrxhrim*6aGC$vbWOX!Fka72KMh
zar^juhd1Ds^M>|LCmJxNfG*TVs4Nf=f5R9CsHD)%b63&p@$`dK;zN(bh$9S<8=}Ym
zeqhNS(RinUJFW&mX9XQvMc*ILlzh3dg;h}zXlF0-n2%RST${3jf|&h^9eXeamZ%1~
zcsERq8jF3B2S9?0J|GNp8qT2wSw||$0A_vgUmm9zaG*u_AQpF_Q0alot;5$4Om&~Q
zqf#N=F>leWu1KLu!ZYKBON{fNYPqp6DVLw*CT=iX&HxiqDLn5nC0K4`-5N4%0!eBM
zkuak8HDGKu>Q1RA0VEilrU4YnVd7#SZ0k^m4|jAdVncWJ3`m4V0G{GFjD(*+yg~<I
zZa~{yfS2gqC7ddzl)uw?A&;ZkDk*iXM4mD$4I9cLrkvPK`o@;3Rz4{OMBmS3&6y}c
zuGOE^U5@n230~_`)MBxvl!IXO1ubde&6zlQ`oi26j^2l%?*`WlFAc}3Rb}rGN!{1N
zQJ>4`D#eCb4MR`KKI+!CFUD6bW8&!b`29v%RMmZ!4FDTXslBQbYk3Ez7g>+N&+*Mb
z&?DH7KQMq33Bf`wy^l(5$<f*qf#h6hYcu~>>gS5}2UP7{NtpZfuE3=HeMn!KpSnhA
z$3yH5pET^Zf=j(QWxc$$RaNXpXSE|vS#m-QMcZM93ZW)<l<EF*lmmBc)#gJRMxZJZ
zkk2UOge?9#1b-$4jIM6}8*<Q>JQ7-38pVVU?1}+S8fV$mW~?a@$R1Z1P`=SovKdb~
z%oc;4z&xTdwalbM79Q8~x0~j9Cd0iuAQ3`bl~=_Q#@h7>C;DqOc+f9UXHno9|5~#+
z^)ha>!)UBo{Y(Sd`I)Ap#CDAk)q5#HCJ}EyW&Z&SFD%w~rf19PwgVauZOv&^6onLg
zezykAeG2zp?+w@W<v~Oq!vt`Sq-m~z%Ls@r|3`OthmjLf2*7}ia=T&u#}DwMz-SQ;
ze5)~rSOO~q0idj^x48q}ic5_ZvtbEmL*%4i@cq3P7iq%T%O1%H6^Y7DL%Tl>xJ7=L
zyr2LO!@0Rxw$J$JzXuU2bc0t&0TeQko#(I|(lU5(^;y{?78*AmsFE3cyj-|CyWYpZ
z4Jt!xT2Q}6j?;*ZQ$(OIlAWa`n32-l5U!#QX!PQ3^lgIs>pGWlmZ`{y@|?I;d$NPJ
z7vd)$cUYrNY7akf*M8Vv>3Dt#ar_gT{!b*avi=V?G5u2{G5v=kY10ww?_6$7ZJH>Z
zlF;d*<1hvhBb0$=6qvYcU$TMRUW5Tu0vsRj{)NNLwSlWV94d_}b!CIF%<J8=w5yMT
zhe`55?&ap*;r`^J{JJg44k@WQa@+EWJ>jzJM&;wmahEO5IZuy_uc|CU_2kt{?wU~5
z<%b$?r3*xuEX7no%W7pG3KsW51C}8|ty?!RPo%0)stH+`2A6Efqe*pAU{bGHP4%L9
z+3}%!3)e1_Zl=^jlU1wa+rew6+`IYpWq3FPZnVPa@1)<N2-Ph~uWX~Vy8Czaa3lvO
zt0-5-gmPhVksr-BFUR%U{j}MM;8dHhE}a_O<STr?@rV_@PF{|#c2zv*DvxZIky{ZH
zf_F$Te_~v0(r<PqUrAk*#vm~lV21@{g|Dr&q>((|98A0zMtfB8)S?4uCew8}wwbLV
z(>Hf8oI-x#+agwL++5w;KFHei>)|eqY}D;|2kgjnfytMUcr}nZ90_b}@Yejo5=>Uo
zc;itQ4_(S2cK*Qd(~K-pvJBjMqBg545sNIE2&D}RA7||0a}9pxSvy+Ul;Zp-U`|=C
zu%cN48|p?-(y@Uz?h4|pJ$95pRayT0Xb8>cVLI7uo!mQ6u6p2N7Vv!}>OrjR?XH3Q
zQ1L|m><V-oWXJ>t5!xVSkAS2Vl!aS(l*kCOruC)srF9mUN@23|WO)tJsQ61Qn|uh{
zi#Rjj=|f|66@XxcvqQT~6{jwn_*PGOZ~=I1C|M1oTaX>t`-B_C*d%bAL{L$KGsxN|
zfDl`tDvL4mKrlH+dM1%}QW7?L(0gLXCDs$?nRFQUU55DnI%F?VG(q7WA-#oh4TgQI
zQRyrq8`*jwiWR0v^g{Sg0)TyzWmZkI{)1h8c<%`4*#QaUa2TJEl8O=@d<~8`c`myn
zd7D2yytRAkS7Dqkyc$Qq27(2<RPIcg6dWi3<xAy%s}t@=i11@1ubU-8>37}T9vxrZ
zmbR*MQ#<O25QDo?PzuUKOt{hhFV9@;zoiJttb$ht<r(Na!#v~gJU+n!3m=2m3*;qr
z;~QjPE1*U+36hcKfGD9k6jKE7;R>4M$|D(&#;_yE(vQ?pfEO}Rtir>kYakmzR?v%U
z<+`<e&d*qX-ru`BHM4Vl6gR|m>`88@&&7a#G6Gb-c8l+8Ik!p6W=SIV3F{pn-h-W4
z!UWxZo@|Sp8>b2Ddi;@4tRSf%oVKHRb$3;E{VhNd5N#-B_TIq(`hDW>Q^cM;wtQ`N
z<P#+E$_~^qn--&^8tM_~hWusf<c_YUIwe!XF?mVtH#0Ks)n0iN!Q`}n?`)-qWSqQS
z^1A_+_f!^n?_8#H>xc{y9rNqiD{G$`z~ys&@5WOG^xXSO)RvJR1>)N`_I>838*~=E
zKX3Q;hd6e|1{fEl9dV5NQND9U27t}T;md`NZTNuL3H5a7cmd-d(8F)b1?2$81;|1f
z)Ame$Z~I!b(q$dJ^FeZOK$;)zo4y4SLwf#VPQQFD-s4ylZ`Yl~dNoj=3B8)Dg>0Rw
zo58W+Ltn9Rg4<rbX1y5~QRReZF?ZD&(n>oJ1NFhX;OA8MVj5J#g%3hnZ&d8zEuNEk
z@QCRp-ppYrWjS_PvBsB-V@vkei5P&5_*E|!vat)gy)e~RZF|!u31q@aJ@)nRvZj`n
zmZo;&CvVUVLX0=X(3DYfp+3jM9f$_V$;_iA?K_xfH{^WV&c>W<*FC-UIq&=RGYaN@
z4i^n)4$i>$Xe6{5I5)RVcZ~MKO@ygB!-NUx3=ZlBJf*rl3S?pIYBB6AaIBpBpo6v`
z)@AiAL-=W`NAf*&bu4l=-760SBzVdH7*jqsH;WQK<TlO@Qf9G^KrV-2lp-dJZ%6n^
z+S=Y>88Z1Lx`a7H3nrud<k+ON70@737rax121dad2E+;U?%-D2&mPN%TEKioaqV#~
z!a-An0^!_l)heZJdf*SA&O$f}?JUXv#0>6HMIPUk>4Z=sZ^y(Ap;J!Y?0e}jKfX_b
zg*mgorRqe%vc+PV%LnIxy}4VQmGl+|3B$3;Sj9nyR)ja{V+0ulvL~i2fIg^9p-p{_
zEUQu`l#mlN=-kWR(J{Iba6GzD7UubV`+bgl6oeaiRK&ArKelnMpo~s|Yu{>N4no5k
zUK19UnCrnjD-yMoGy>65t}P?vTS_q9c7tLc*K=rulqg97jp(_(o$(w`h{vm|>uS*m
zl%(Sk^Zc~CdsHnh-H+evmuN9Y*Bm5)4oe`okS~SXCzZ>7weF`TKRy)%oS+<o(Z_`w
z^_IO5&*_CHFMhyIY0@a2P&_^Ba_t#9;8gz{Tw)CCxqm>*vZW8;nWgd&TuXf9AR`Iy
zj24S-$OBpA1?rrDZ{n$7lzF+hbQ1~OYJvigaiE#(O;3VXE`s^qoCdRT$YPrYMAFI5
zr;$y8Q&hn}zt?d8r}OdCju`Ow`QV?L^2w(XG3cT-yR5V|7JqjwS3({^`|fAdhRe5|
zOr&3Zqo|*7ixa0)hQ3Y?vm)?`jhV1I8RQG@m^x{UOlYgoWHURo-<|wfO7dx$jRAu!
zP-b%OGw8R8P}Srv@X#cyDpyDzn`GA0YJEJ_e=i}NVd1qPh#Jz_H53749AtI35;Sq#
zY5er6QUK1xu_AH%H10-OTpP@h0mx9CTH<ZpoapTD{(>?rFk{@)hWUl(u_7ED*aSM1
zB!do<Bj*{n@X#I)oM?$d%&pt%c$qq~N(GQD%^j-{w+R|=Py)JKQr=j1>5ba14^)tm
z$`)(q(s~hA<{Gm9xc$6>I*>rzq85G47er}0q^}*01^M-)5TQ&|YMMRuce}dj^!oS;
zvv(lG=9yyEK3^$55I$s=)hD%b^Ftv*1CYlhR;vkk8Riddp!SqZeax)MnmIA-W?FGw
zB@F(<pHBnKAGo~4C|7Cw>u8a>li+)n;4${}oE?y>BCR&|V%G9UY<qYlk=B@h^sUSa
z8gi?ANrsY7<{Rp?RF?W5*z|84`tP^K{|}q~X`7h-Gux!LX}c*3|JOEM7HRWeZqs>4
z8IsuVH8;qxlLrdQlWdr}uu!Z`?7U1%5>lv<1{KnGlkVnlG&ylFJ&e0kqL<};?VK^b
zy=^pnP<luQpG;d!tTQqQ-1MP!*`ZMTETw#%2;GO&AkOmczvLDdX}10_=`^}wD0>|%
zjg=%*cMXjY$OXA<n~UC#o-a!rC(HG)P-~F}WqA*!2d1)VGfi}uS!>o-S*jnqd1Ta;
zdW`%&nedqnW}o_&43=s^iG(SUYdHxtX*#^<SFg%&_>%(@LO)qzSx-~?5Gg^lypFd{
zH&KrYT>&e(o}>TNox@8{5gk&zhdBz@zDNkUPoE8opn`1?KXAot50Vw4h6onzPwB+^
zDB7uf8t@2P$-NytBtpaTX_EN$=u#iHs-3lb9j#kk<}{d=6Y5u2nlut9aq=jjn{Y-M
zxgSqIdU|WOWQC($;SOfkJbJCNQi_FCbL@ON`mJ`^@%ClP?URl|;tb)Lu&=rJ(FL7f
z<sagAQE!5FQ<p&2%VddQ-B9c3Kaws+pD2h3z7#QzLoms@UxpySxdg`HwK0F8ePEYJ
zD8BVI4ql<l9~<K1mcU?DatbutcckQLnO}xk6JJa$+F1M15D?GO1iQinjV*%oi2MDy
zj|vH2rF&~Awc7|2+Yaz&X#q!{b^=fc^>-SocRQ|50z^-2pH`X^qX2e>KIVg58mR<)
zr%lr!Bi+~tq+H-xCtCZ4?CG5#P9ikRL3%uSw&wRrJr$rE-O%@0+XI5e^+*5B!&PZI
zLT4CkrP3+>z<2urZ2p(j=|$W6>A|U5;)&1cL*VZbN55pJPcTPX!?3j9Y(-Lts0DED
z3f1Jl1@S<*KKqLX6ld>IZ_O&LHYbXL+p}*xrkIrtNzOH^Z25)!Y3?^tk?4aJdOTXP
z>sA>W3r!_uQVJ^|EU_?2>I{`kH#<prUN;b)g5vBSk5@gD>cIP+Q^QAhQj$z&+g*8b
zkAZ73?GyC}^X(w-Bkk{z{nkPxP^}|nif>fYz3^s?f}a|Orm#^eb?WA(yaj1bT0zPu
z%rZB!p2^aSVPs+^Gf^LR5=7>$y)c^JnHJN`7uYaaKtUluYf!q+t@rIW_v@{_c{@!c
zU$@EBqPWXaN!|!%#3L;NNXtV85QZbxOF?LjinkD6M_2-0R9BYH<tG{o=n#!H1M`{(
zfy-+yC>Sj9R@pK_g@dZqoYk@Sj7xDa?zz`l=vUhD*u34^Bf4y|hDY&eX~iCIeY+cf
zk1n&))KN96xf&tnw6prf6kLC8PDzobTue7!6=y0{30`q-+d~$c!xvk?vn>S5q0d7%
z#tXw}EwE!D#%j!Qk@a1Avo&OhURO*`spAB`?_AiCQeft7NEfoBgfhlll1tUzKK!O8
znkvE}@%{UKmzt~I&rWM$;3wT?WU)<&uA=MEw+%LPQ5b>^M}2vp?29_U%lPWyD|g0;
z9M&*Jx@_py5qF$W*#Ih#0%8Dmq^M&=cR%q`2bMepKLDv;#PLP^i;xxZSSlh?H$G@W
znJVUmLJO;Tv^c;85bQ!ViuO4?$pGN4j?J<x7z81r>kZ~3Q4Bvlc20!cO*YC3_NGCT
zNcce8*$~gh?~0KcR1%1A4R(;PNaGI13XFL4!LVgSNMj1;7w^s}aE?`M^I7O#v^PUh
zD1(>x5MsiPc0)$%oPr}V5KerMS2J_%;%Z3gH~$L&CU(oLH3N*g`ECSMWknx6w0b0o
zOw(c)c0fD&Q_@;6i7>mh4V8O1InJ2Me?FW4r=?|JVrKfEmX`USEiLnZ*3vFZ$!+q(
zgWY!VjfnFg!v_0!;9W(C@rOs=g4Zl(Ij}|$v<6+_FUsk0t@{C%H1jYkG#8m4r)|wd
z<3&8NH(cYaGRHmF!N{DSGVG@&C<H3tj>v|%x5kz%>HH}Pw#W1-A~bZ~@FmrGiY%!w
z=D>l~+DN>@APvsnYnS<B#8Va%gW|%6XSKo<7~RZMWrTUWFdLJHG@<%7j0`bKz3`B<
zZI|k#_fjgHHZhE}gR?C*_?&E#9jaG|Gm23}Yj!x+Onz>y_=;d6A|xE;`qury;K*}S
zygYtl_i$mM!P2Zwqa%_=x?NhbRBX9!E09_YPY%og7}Jkm53UWqK?MaMh7Zqw9M544
zn<4bC0MOt^jR*PvA~l}G7~-!=`@aCu5KxUrG5+7EIZV59WP0i)7~QP<7&@)=;j`u9
z@>{vBVmCega(VpG)Z@HsTg@X=N&KmJG7`nx0G)x9LrYr=B7&r=34eZ}kjriIPEcwX
zzws71N<UV~c<+3E%Bl!|3+?1)zXB6yC{tT5mW&*su4pt}=ZM-+^LpZz;5p)@t0Ez3
z(#Rl{QANF|iW?c_>char&e_TKxdH2ZI=>9lvnh8OEIl1i3&~U1B0dx1KYaEUOKWTP
zSa+LUBV8#_wvhrOGt;vt?B$i?cmauN%Bbt2+0_-a=%(?}SZD3Gle{q5dgWF=w>jFo
znlSCk?%{kSufjX6?WqHkOmaRKYFJ0j(}9k?>tgUash8L=mdkDIDa7`;+_FtL_+Ha<
z`$a5wJrybXO=0yj(1L!xRr>8ok8TUmTj{5=a8=M1W)GsAV$#I9nYoy58e_5g&%;S@
zfHgkWIB4Vlh1NJ~V~91u{}(}*_*~<#jsF|pd+V+!U%<>7gFXLPJpW!4{{kB}rvK#{
z=6`Yx^MA-SQ?>`J$Xgdw?Nx}<C_N%AU4SBNI?kM+oecVa{~ge@N|l^k?5CGVNFtf$
zs+Er<EuD0Nn|Q+O{t)U-$KU&^kY{qx{h3>^HsIj|cv(aZ>$A)*fm`Lk6IaBIVg#Tt
zRP_L6iG%kw_|pezB@wkOww|8{n~h0yY2u3>dTPJdf8#?Z$CN!RZk<=$kQPE7RUftl
zjDtD$CF&VWIC~$2S2X{^AeeV^CiPclxQU#$?Wg4Lp52xq8PbjV`os2d*3Jc(qpvH+
zo^tE>dcV(3^svVjD${{^c3f^Gc*g<~9t-jK6|gKMCFB;{sL?bv<X&0yNs~?yUr6#~
zoKF;#*=(h-^~BRa88u)75V4FeOhIuj%~G8})E;_?Q5k=7Ev3easY&DIAq&8xtNG;`
zL?f>(<d}2$3hci?!V-`XJ@LoZ3N#K9f&b_`cZ0>P=mZM?39;gFX3@A#0%QzfU$0FO
zaGrbBp%rWEM!kH4y63hFIRHB(;_4IxNyAgIYtlUKZ=}=Ith9-hJ9VZUO;~tfPFy-W
z#ocN(GR{`Fs=t+12;$ey@lI6S$r|I``E!^yHN|o`Mrnv{QL0WK(XXA3$fR9TH<DlO
z5r1_ERqz{7b2VqrYN9dISoPWR{04)62Bd#~njQ=h{1Cg8v`z6KD!47m=TPfP1oP@D
z23kuF6GZjHhMbR^zdRdJWRW7sRRS64II=ObwJk(VH6g`4DNdoWf@N;9`@%N#92M}u
zl0rY9694!UuNH@ibsE1L(5uG&)X?(I4%jI?a?mY~HMAt=dC46Om;ZH{_s_3Y4wE}`
zEcL6?Wwj6lA}^@ZuU2#Mb$bDkH;k6KXu2wf#~%7psl5gEQ-g>LC{bYrrm1nu<bb3I
z>!P?oOSJ#T*gFPk)-CJWW!pBoY^%$*ZC7>Kwr$(CZQJa!ZGOGp6Z<{;i#|VA#1k>*
z9MA7@=XK}Ik(u%5|4~XYed#ug;!dd+A1|PLzi($!BO&k65+7c6-Pf6o^>F44IN@ky
zT{f!wlkaooeC`j~E(r*aq(OAjKotk|9ahRP(s`=$_f$2a&iR-vG;>JHXe0b1;%Jo_
z(l=Du11g!0{E`X7<X#tJuuL({OiLns4WYFSE&d5_4L7E*tEj*xGbCCzDf1%2WcvaF
zG*Ek|X(cH41ZCMACfK7^#?)Ws)aeY_0;o3VBBSxj*z_oOCLF5ekCH{+Ee=gMP~ju0
z*1VETQ+}YL*6jpAX{1KmNJiag?_Cvc^UFrwY#<u-<~T5|?#`y7&xvvs>o-wlN?=Lp
zd7UD)b-PRQ!M)YHMjEYBP%95_!|LU94O*FS(lt|hWtMLXYx$6ov~Z2C^Z_%N;NuN3
zs`D4KYAxPs&E6mB+#io~3@Fwq)Ku^&mof*2G$=AhxbH>6gA@pY)D^RATv<)FGrFqI
zt8UQY*5^M=oKOAgoX({aN+zktg7lT3Z<>WWY_cuM4;qkHHK6WhKZvDGey%<Ggwave
zsi}_<nK9I@>FtMdgDJ$x?pAXHs(Ki2jZC(*fjDkQEkD8;IlxE8;ed6l)}{;D)C>2U
z;g3^Yzq<ug=Y4;$&F&w+Rot^}i)oPjEph+y0Rzjwl>#h(^8w3$#|J9vHv6my-YYd2
zt@IY)I-)J5C~oH155}5~Y+!G4sL;as)-3Hr@*EluJuW}u+Di*5YFUvI<~<!e9b(~g
zuVH6jRX;@1oL|=h6svg5z~=fIq;VOiZmsKNI+_kUJg0;Q?<zmR+KLBcUtIQ1RA@qT
zegs^@m!<=(d9<6S+p_2Hf_q(e;MrO29^tNRdyu)Jts$@Y2^L%bGKbX5OQzZaQ(S@U
zy)W><Trlk71OC9u{-L%pkdrR{#5xDd?zza?UUYt=M#2!u%VI38zMzO}Wud}?7*J1{
zAEEcY^`tqqv(atbhGboOk~q(}dNYE~g#dNNIJQ94jxNDIuM{gST|pwN298HUBWBNv
z7FZ&eRFCQ<`<utQkSZXz0HT|OIqLXL3jrFQmM+iRV9w2l3J;OR;;Z|Ziqc*rXAPmp
zlfLvh$bFJimF{ItbgyjO5`%|XT-XDfvM5;MG_3xIl%htG{MK<HKd0!Aq-}?|VR3Kw
ziNtZ%860#4d9KiDeHNe!%u+Lnfw!q$El?%aM-GVuJthdZayj{Fqfn!5n>1532l6ql
z=F7~;NE7*B<v@x`Ob94)>}k`Q?F&X1hNW24n8xF8*xELbVegB&A3P&!xLx}OFfl0m
z;p6Cz89fQCLnc5iNuh}8^I9U@Q(33fVaLS5$uKgw&dMQe;Vy3HVFzi2(%X_#6CE?z
zHSFjr<k35goziF93W`zvq!od-mR=^?jLGzmFifEt;V+2Tcbo3acvZN94&Y0}R&!Nt
zqz{|z>jnNbYo!f1{FKp7BuS*0RU}2p>+*kk+CT@a$7dNgWet_rCR$iMCW;$0=MJy}
z9FtVt5jrOeJvVt)MYBJ(77oW-m;e_o467>4qseT*xp3Olb7}C~fn<tdPN_#l_cFK@
z--d9$Mi_Kg+z1nBy@186kd)j^OpRpZ1WY;9f=<GYqmDScP^?^DxqQaxVOxP}B-hiJ
zH*7HJdvfn&QyAxJzPudedi7rq*v5^LJx4fSp4^qsRdsJm58O?Cx0`b#xAd4{oCyz@
z!?(`}2bh<z)B-6)UV>jdrrs6cD+(2mNC7?)9BXeQ;edD?F8{{xXBZj$2u@W1DddKS
zy#~CEZkf@p?Gwx|tyR3qDZ~?e*Q~^;%tZsS8x@d8j^=*Hjd5|!(w{3bBOAi(?zdON
z?r7@vr&7}np^{<`F*vfrzqd9muMq}+?E{WxQHwGp=KWZxqW3Y-pX~q5LZfpluTXNC
zX>PdY6lIGzY_|jl7kbD0b0r?Iy%~!?FeQrs9!O=5v1BWrO1J6Lk<=HC+EZnP?+&7E
zPOoFYda$MHkYQPSFnW}~lvmy;@<EJdJ0Fc3A>zz9DD{WNBS}Z0sp57e_op%|4{$A9
z$xt2klHUO$wC>G`I%P~L(DK_a>l=mMgBT0_7A>f3ny!a~$;Zu=u7}nXSqHj~sX^)a
zj#D34Hal+!wy+Ck#_PsDX#+d9k|qu<JDoDQ`4$4ZZPmQ0sHM{JQTrtAo$dmGF?;LJ
z87NXC`H5Cq@two&3wxjK!;c5F8YvtU{g0sSq`RNUbZ@~=Zh{UVxv}(n69#wMNs^uJ
z#kD#G4{&6P5!jgaR~`e2Smsw7<31z5AH?6$vl#X@{?g2UwD3Pz$iT?-e>L-OE@b)d
zxKMc~W`h;R`&pMCq?N|}+P<D-!#?0izqdApx3L4jqco!5lqy=4{Aq3abG7!{E0Km$
zJYkn!&lE=>0p<0USeOqW<Gpv%(5E5F<=q2B_?XAF+W<j)T5lh;uF;-loCq$;N~^N<
z>C3ljWS8xOZt|3ndNs!ixQCjd5r`!Q;}|EI%CS@bo;^~Dpsx^KfFp)oNMK4Cqt||4
z`q~kgfPS2d%#W!UARB*R!xVLT1t4c$062%{`=K>ma>!H7`=MBh5lnmMsveJ1`=EUS
zts$q&mDZ3@!2TA{No4mV<H;E8u$i(23-6q<g$z(R?s@Ei9i!8{dJc1EqQ{Z3p&RL|
zSpmS8pE6S2eAVf^{W5Q?C$t9o96{j>f@iM3yZ@bVHA<G&qVZ)oUdknvCXK}?Qk0mF
zu|EWUH)I)9y~RJK+q}ijH~w^RG4QxrjWMH_%aiO9WG90=jg$$h_cuNjBot}bBGDyF
zodpb_TOfMb199m%FeSyHI<1$m*4r(WmOW+SdrIq|ddDOwdX4=UX%WP<t$Oz~DSVhD
zp8OA|I0`($r4|Td>gEO1IU<ZXqG_ilo8RHM{ut4mDE&@Ka-u;WfI$>H=|E;q={^e;
zlr-%|7B?I?c?0@jt2q91F$!ghuCU7u<!G~u(#Cc&+wk<(;lPE(r&U)jmrv}pSGbz~
zg&S0KJ317*Wi%d_7VH2LMPe?NhiOMxlVBIV?#j6K9zYuHWRe#3N+g3K>{{|JmQ@~l
zNJ~AmT{AD-7cQqqW<zlHy=EKH^WQC2!js<<^{6Eita`^KC$2kSyxgYe{ZdF<CJWJQ
z=GiSP1)YCd%amn2`6^lh@hdK${Zf5QzV*E_*3)qDfSzayZh-(IvtdIXeQdsR0zai6
zWy|2CQ>9}Y5c;`w!n$?j;K9r7ka2eLZt&9zY!|EA^P<~{P0;6o?Le|vkY?-x3!IDP
znt0vl2(COKp!>F<JxkYfFU1&{&72+e${hz0>5bW+uw^lDZ|@O;)JWOQv%wCI`uI1d
z%<LzC@Im}sYRK)7QCwOae!MU*X~c^;qvH;F1PEzF>8ZS)#utNEnG4S%)k)o}R|adX
z#X?l@yS93sH`fWG@)Pcr?qmcHZu-J`<5bSP3h;El-tawyp|=Z<ncS5loEHy9yg6e7
zFtYFiDRVFbVN(9Ex|Nf>bJs7sFHU+7A$ZKlM2(r%%jwQWC(0wotc6z@7g=4JA#v67
zYV}A#e|4AEJExUCSvj<g_N8Pm(kH@fionehm-gOM#uDf(S|`qR+i~TMC}~^R+NZqX
zTft)Uh!LwAtDEt}4S(LHx*oQ}>71Mw2gbI3sUvG?3#|CnU%?*QOR}}gt7lp@w#*?W
zyE+cUdY{ij%`~7JKKl}Td@3GdX#<!!yC@N=&tIn3y6?b`cYiC=zZ6H$#`Zs19@f7p
zj`hEzxTR~$eO3(co98boJd91O(Y8O5G!F%?P4Qfe-N7pQOk~^Id}kPOxoE$F(){hE
zP-&yUR=W{3Wd4yWhA)0~|08B_FEF*IzpJv~ej_uP)jbkv=toMXJZ_Ojuq)G`fGO{j
zwm@t6RaqE@m!pp)pZknLYZA*RyF()p>T#rlOheH5OZE`wgfiurY>o-zG{>R95T&HK
zim0iJi6lwp9dN=RrlL>>U;Ta7_#WyU-Ozk&=A?H-Yj}|X<kYWxresDDA=&d{@`hCu
zNe_ls-ub#k0i%<+Sj&4r7wwsu(>|+pQ;oD~xeY6w6E|Zl%8uoAr-s65uT_e*5_{pG
zBH@+g2P0`wFUg*aYKDy5uz^8m55)CCn}&+!^DzzP;*nu%dFAPp7s`Sjgd?>gfn34e
zY)gpRgg{~h2oir3{$K!mAP&DtLWfZt#*qKD0M+|a6F`stuZ2)@6sbOt`hS**t`E+N
zE0y7gL4_4ho(SHy^V`&~$5P6tI@$ibpTQ^J74UhlD`y3@k9oZD3vXg+lCKHrV#vA>
zK~2TptF4>W&^h0{Lle^|U4*JmMpN~y(l#L@iFbf^gxL+67cNQamDqwVEBHMhAFoG8
zcUR<Z$t#|Cr4O?xd@b6-RuUI`J@RXD?yhzjw~IG$xUs-xSXDb!Uf#<+R#OjowI=QA
zEB9k;QWZNFdfrDh{I55DNLN?ap_gb^EICroJMUp4Q|N}whBi-(x%#Q94FflQMqE=T
zvRJH)IWNO4R8#Q_(yex?1FduUZ9sf-HYLY*OAq{_9431&j;1NP-dnPR&XiK8NH^}L
z<0aj;6ro1Y#D``FP8bxrF`H=8!piTPtt>3o_uH9jPqq1ugW6g4s@4r=9qT#Y#+tYw
zqCEzmF++ZnA_rasuW_B%%Ux?R?{9B+h|V72Tj}{w%X}Ob2U=j{9Goe}=2~;Ad3@80
zIHnfSOe`aO45C%X?1~PVWgLI@9uxParU<D<q3ZoB3I5j-TuEp-idFyb@;!9jTXJH<
zXaYF%*NOb+r2U5x*cloAJ&=DR0_%T=2&tbo>+BdKKF2k#g$Y-sgQfeOEoUSW<~CT?
z>f$X6fq@G2u^l9}B(o|@U(X&$7lSftD+|%i{iI)>)_mUEt84_?uwq{WJErpIFVn%s
z>u<~RI6%$(kU}&IEHCVvF-|MvBd;jDT20+QH;HV6zLPn$M}d4Ygl(_#8i8e2$PyK9
z(AaNrPur6(Q^5`<GLq+-C|27SoT!mIOPBB(V11)0$p-->LV<4@8=?!$HnagFKS+Tu
zN8dYyv#Nh1z;^0aNK*^!zF>4J$MzFJU`{UE9fAKT*>8r}BY<9J*QrDvRk=8cN#0=5
z(ry8%JiJLT<R8p;x`T<s-{(Y(U|J=DNqBmE{5&X)FyhSu!aw0)Qw#iJ3<{(PU^ayG
zG3vD$nunncS@<GVqPr7%qO<;HlX&<9QSB1KmC0b_;S|Fr<+)2BP_&gC_6V`<B=LK0
zmgUEIY4ub0!fvj-e~gWmKlL;o(+I}J#KZT`g2DrzPz%<^e1hx6D$}F8WkZTIP1uD8
z*Q4yiH|T6M>KM~Qc!ww4$4alXv->#^%S`JZIAxEY;KFYlv;hniU1-~3I7Xz!HxATp
zAGtAS>%N8UQwicogunlSCL&%dcsv4uS&s|-n{bqf?=xfq6P82axl96%AP3OY^e6i-
zR$J-5rh(RBy9z%=(2@|lak~z`bEs<kVW()SZr6R5tNz$q>|i@?@EXRfy(pKciba%#
ztvW|+hEt-ly_lSub9UvM8UA?dPXwI!<ATRbE)r#&`jwgpjBqi!L08H<Ri7b~4-BQ-
z(HVO^6r|}sFQr?;EHTw2k@9#E?|f#1Tkg=H)U#CdrUZFqm>jxtuT*Yi#R@SZEA`A*
z|DpzxRU^yn$TC>-WGhq5LMx7ukehydJv%>ZUoi|J#i_wicEBl48Wk)9W&@C-TAc%}
zyvPOr$cAb?{Ex)38~9aEte1PY{&`2bJY-@2GewvLWLv1Pb3NV>fhRCj=~AN^?BGs2
zsG_z&@o>=u=W&e4u3P4s81thMbxw{wN~O}mR|c61$)Bh|rm?(+N<z5Q8>YK9toro#
z_mLy!+Ozl4q1-%4Cuf{znBfD#zHC!PqONk>06FHA&xco+#uwM;GkR_Am;JSy4y!vs
z;{p&nBO54&-t$i`-UvrdxhH7zk3=31$Y3vxjfpgl@s1^90`I$~W6@Kui}O84@Mm+a
z@+{}LS85l|Hd<NZId*yTYsu2c+N9o{un}atMm~CCrrx0=ZmwYa#N5?tk@i~Sa#=Df
z#TdT*r*P}Fr}n{MJF>5G%!0wRV8IxnC(P6gwL`s#z-;)VU7M~$YG8x?G2lAq$X}in
z>C<AT!Vz`iLYnRPpFY}USM%TVN%JPE7HHb1Q>-vW=Sm*34ddtgeM=8V-s~u<5x>ig
zs>bG^W2fQ0ci*>ji(BCv%w%kq#ScQtnbLwg4+^u6gJtX{vNpXq-C$&+;i%!kbrT>{
zSbl@%iDR?aUcEo(%6op}HoO4o;(8|6$iJ6<(C64B!E-s;RlGR#C|9i--13?qS8H7~
zYbA5yHY$Eqp!U>Ut{o-QDwl8RsX=5w*|2D@*|%=#He{`Wa^6e2`RX>P3Tk+CY%xpL
zW4kT=Li38)qK-qV9N(v{b?U%}zp~HdJ|zm-GF+d`xqba}QCV2~TKTY8N<x@_f(bQ8
zjV08uhV3)rI)$6VAgB*H!@7Z}foe{V1B&B^cmWZcH+RVE8^dtG@c9d_rCE~GqCIMx
zw_<fqbX}v+>bD+hb_&!Fnz8Er8+EaDp|}qP2?fGePzOG$)|{)EWt6&(;#J)HW36)*
z-13tL30&!u2NNc0jC_>!esrsX6Up#jd!jAo8SyW!XXYw3v^vS=Is#p{sSU~faCDt-
zfFYKZ(e|o)$~*5?9o=_sQ;IV!rw$JCqJ3|v*cL6*VcjuJyW=y1_SNm1NwxVDtsk0V
zfIqJ|Hhz59W0%Z*`7l2b!O08pCPrvB4OM`3uKN`%ITPr0fT8QwlSY?k%DkesO;PRP
zN}JP&)--I69*4(ar^++g&ovM&qhpX;h&WHCdx5Z(+JRphE?p4sPGD)Z#F#nZ$aCYQ
zz-tkKrDKHVUxxo_w1s>au5=PkHjX-8E$6&5E97PI3B3#Y==pch`WGWv8UJnn$M!cy
zvi)}$sbVd=A%^gkt;?WL)FD@-|M@H6<W%Q}z**Q+t)ngxp`i^DzW0DLP~%?DPGwhv
z&VHsu1++iR{oTdY<OP!lyp=fsGT$B7wCRYCTdldtGt+?S?iyKu=MhMAVuMaIkm_i^
zaQMdBj@%@M*6y{4kV`E=&mN99G~znA&nd$KGoe<&K36l0){Ki4!UR`!*Mrmzwa;k>
zT;Qvf_Y@TXw7g6zESVv1@BTK=^!=7S^bN(jZEbYFk4bS)qnF9g7duu{JVRSg82!af
z{sj@5kYF2ooyJ<)b8d?m?`%*>u3GAp57>ta7dvR0;Riz9ImuKhfYl<5jH00}idpd6
zntG6RusSBZ7Gs)En!97^A(5{YYm^;+<@~r6SRvv3Ct-{zkUCJY1{zCd7GNlU03l15
z5i_xf)+6}=dEauGXY*kOT+E$&seX1~DO6H%4Xa2+b9?g)8@n8d^V4(6Dn37kF_aVf
z!l86adI?J@J!-}<lIsa(zZN^|sQBe1cJXss9$DLn<0OXVT1Sm2WZX+PBC4M137q=U
zQ%UG4!S!LyFue+ess^)#SreS1XgqK&zz<V(Lpt-53b!dXbK<i$&iLPy4cy)&VzQ@5
zMfXWpDyJf+i4qC0<C;ax!K{+vrf?NMvRFv6*b1n#uH67%AA}OJ3lq{bRL6nV8zYy^
z8A#_H$-m&zM508-&2!p}puiLbzR)sWJdEbut*bt!!g^%MXr#*#D^J~k8O@KU;*%Q}
zfUzU3*26aJRD+z9_|>Jb7w3`UlV2}S5ggn+K{<lM-T_*brm)9wRRCt}r4P(0Fi28K
z)JRrI*hyMRTuEL?Km=ynp4=zgpeF?%-PqqF`JM;lMnxO)6L3Wg3sSy%%Je~xo~2+t
zI9W1(S!ji7#@>)sFGx7{q+-tgv4R!r+0B}jYD{TF(dk6kg9r%BLO4!L6OV7hw!bhk
zeSc>^HBF9#e}Ml|6rx+{FY3!ADx1jo!GN+e6cw)WiI4)BBZd4Y0ZUuXMzlD0JeDET
z(aRk@?M5BFnkCqrRG?P(>j^AhjT5RFza~y7mZ$j;?s$(TgszkJHxetCm2^IWXq@4@
zlATbU6H1=uRL#J7M$PY`y}N!!biyw;mAP<{4j8i*F`;8F5;v_BNH`AxnQ7(B{Pn_d
z`gxq9U!{*0+4rTrn$Vy=YPh&~<<Wa5XT4;+VN!BqT0@)p7s+-3%E?KBE7t96-W4a+
zd9)3Zsw++Hm?7I8P((il6UexfI4+GOF)boyU3`(Dvuvrf=L)KG7%WYD@eOsF%++^K
zK|vmcpVwod9l?Mc-`K`hA?${UJ2~)qx3#?0dTR-luG<y`6O)26534t>p|PJqy!jT#
zL)sl8R2lZ`C$wuqdWEuklg5uubUcv<t{G}2Wp?3{xTz^0`$Xr!Z)DoRKYw?~b{x{Z
zgW3#z!s*hAx7aFHZ-hXUSZnT)JsoCocZ`VqFn6d;{HPnBXSZ%3$AQQfd=KBXk>yZh
zR7aZeWrNf$0S!67zu8;4@npG{TvPQTv~Ndn)A;Fc?0u_VMG^_AtGllADNo?v@OG#w
zDmmn3T8g{^q^dh5AF;y+=%KZL{J@uIg$qS-Q|VD|R8b&4%Jy_{@)MUd8_<I^6m0*D
z9+&(JA+lt^vG51nathS_9W(?d3U%ltp-^9VNr<l}?#cUf;Q$C{WUgdg*1?jx%1_<}
zKgvJ`ZzH~LKswISk~v_Shp$hwA2NATuE|I|-k$CsFAp!br?>kH`y(YIG5BJHxu(iL
zXUctBIS3AXV}S+WApUs>Q01=Ro%sSyBY&#<OTPb+<$v;$Ol<7`V>;OWHXUsLo#{xl
ziOCQ_7~Z+35IKz?qZ_B0__Ef~u70AJ7jDzqELKp=3hlzs=;iH=ODNyzf?fmP*P(1u
zh@uvmnf!7#HAw?EuoJLy?f1|YMR!SW)_y=B4UR+mlLYwFJwV&5PO$>a0|L?nv8#a0
z!13~XL;o?f=tg7Z!QgN%SgI29I8&t!{v&!w#he%vc0-cXU`o7%j8$U3JUYAE$s>PJ
zvD?(2-7xs%MP9p=G6p(-!|MEpTk{*u9vNCNX=8g>Hsb(>w$`lu%Cfp_M`nF68k?lO
zXbbPdTFAJ(j>^?qOI%ctv|^Akq?<K8yH|sq+ghvs)@Q}Ud5Y>_v_KdY;p3es){X3T
z58qkQGhbePUipQ`jMG%{Wcp8WKjeM8k7T7*tNnEX$+Neo+N-e=MJtUr;*;=DIO7Gy
zEbEEKd%Kpm+1J((L6xj%l>SGAZrXb1-H-Si-5l@`OdRbxOOG?YOI#z5_;V}m7wUkK
zXG*J&xhCy4%UtqV?S+<{T>H{@gOp=A#nLS;RJnV~4QIK-Q<CbF@tFnw#j!fNk79?M
z?Dup*Sg&O3=Vun@E3T^FR@Lt&%o)U5ke`qVA-s2vCxg}<8_nv{S(?w?BBnHlKr~zL
zrRuV6LVzY&yNU%~MVu>w%Zk{HVkYH}Bx_}bUj|M&0huy9mD*kk2{lW6S)8fLhiF?e
z3l#TCfs=|HMqi35xLTsG)wmJ#g=|L10*h;Gf2!Z#-oB0=58)l(NC_1JEQYW9b3%C&
zKRH~vO(7a$#wIc*&fkY-A}W~b@uhTQJYAmcn=pvoLZ!Y4?|%6aM<9e<L3>UEDI+2U
z`}-{h`ssrk@@8+NO+OAsrl41xMET&!I5hHN*A&oTl3k*oe`7b69ex|n-i-vPL<c+x
zC$aRrXS6xp7Nk)!D3YH2kQWW(lvtF{k4ADzEG=m4y9t5>8-+3gtp`%~tNf`#KoyHR
zie&^_52hYa$-his8O!p|E8v>1)lXIe>{!@QFeBjl|Ge@y6KKZLjG`Gq*MqM4|9So1
z>+TNw0{TYUFZuiE{SP^@ar}Go*#8D6_Wur?RMl-Z*b%({44YtvWCg@gen!lNKClg-
zT_=mua>NG$sTbOia8fQrDp|$v5wu8U4`07BPz|<DKX{IFi0Sb&SJN9u_bNF&cvJ?U
z;(cYU6F>%9Va>~Qjg#EZ$LETp8?lFmT}hymla^v1d6vjWrI}UL=pVx=6NHHBZM4Qd
zlH7DP!-~TX%!a;mopFik4eo`Entj&Ok$Ey)24EkxH)_|*FoCFTyVs>V(;(?&Ht?M=
z8tUat-I2MNwG~|Oe|;b8#!Mr-I8fGb#0*fizkXZlvq>1WB_6qb#Dlh#fwNlmQzNMY
zs57aZ)TG^gxVuNZdDkkmL||cm`b~sB+t{R6riYp6G+b=Ekpz2y`iq?<bdtZGV?ML9
zBQ&oxA(Gf~not;kdZT@lGmuzyOQ1{1;k<B)VB%GENX(ITKB=;D16=Ip;}Ljfq0pCP
zLSvXCHG@D{KY<dMmUOq5mHJXhrz#dyBiQ3mIc!RhHPIZ_gTlwKUuU~B&eh9B*OCMv
zfC(@~75zQ~9^JGdW5Ly#cW7Z2<l&-Mby=nI1a#j@xn4p-=|@^9InG@sBE0)>EV-o6
z9dUN)F-I4p4Xr5~I(`Wcnp^YL{U&>FxsiNsafH!Q!)_XLZLb>YWB!SgNP_eCd8jw%
zsJYl0HU4lmF8fht(iuc!-XRsZ+kDgEUUB27Xdh3X`t+YGMVpn@9U`{=?ojEUAXpJ9
z>8-!iGD176+2ado655I3tR<;V086{8<-L<rq_@IBnm(isX*3UU==y)Ve^Y1o!|d33
zdi|W%7hkYBd(zR-qg#`@<>^FWP}XkKqwzGQajQf9?XJGVqt8H@Z3yoZ!sLd%cVgGf
zF<6JVX+^wFIEw}J3V~qA`^gEgUdXy3-(k{)jJrYh8gyCi=G$WS0J?Y0U}5Z-0*hr3
zhu-FTA}Cd!PHG*;6!|cr$m<oUV{jKLK4KrI3bTNtSC7EqZYRGZ>$f5n7$=({_vO^B
zQQ&OXOhl9uS_w~XyF&&`V!fp=(%VR44G;l7y2^M8r4MjKmKA9$IrVlS#M%t}02a5Z
zhS1nLf9BRCC$Yi8)*azYr_;Kh0^+3`%&!cs=J??^JAVaqsQX~1>HkhDn*P-MRt@ox
z*I0<$VEC+}HTye_#l2N4_9#&Y_AWdy8Lg7biS_L#!`7CD!y{rg?<QFo?st#a1qfd<
zyC+4Rv?QYT2n#q8oe#;ay{19J>~iR!yEIqx`HA1M-}$NEH0G~d@I1Uy>|f|>u2b|y
zsfaQ&M+veoZ%>Pei8ENBEKgEfOb-R$HO96??>o&fPZP;~Oi32|-3Ju{RpsPhbG2tK
zT1VR;Bvj~(yVEmAbZ^iz3W4R!iUxySsB}vGR|V}--3B1rhgB!p;hY7GyKCVDGYIA3
z-JRpPfO;Pk!g~FLdO01d_F*m4*Qvh<Bs$BW+)f)Pj^G!CmdgZ)5|no?<tT5AvZ++k
zV!H!%G50B|T)Sc@TQ(&%9iTj@*Jkr0v)eDVon0z)Y^))hZ`pa2sT)giry~+!d`7{b
z535&2^px_OJCw?8!WqcP9Sxhe0%JkGn)&6;8V$m+24a<Au>p&OS$<+wwhjRwZiRHs
zR6qEm#N<wKW`B%`@E292%;d_ia;89N%`PVTe{?fiC0&TZb1PL%xo(lw!pj!fxU9O#
z&u#lfRDY_E9D?6;`u5iv1yrx!&WRm94WPTSM&}TE7y7>sBm+Jr?}OOv;~~OifUasr
z5l^!itdjQDO3#L3&~ePufUH9TnVK<FJF_*NT`D2<meOQ@t3qs6iLEMcmCP#&PL#tY
z{_r%arbx(?@Xlp&nssrxPL9Ez#TQypsgDq3+dprosy}11^P(RL{xch4j_`)8X7o2u
znU%dK%Z_YFyFMHZ_rB4e;;&9v5kqp}?sC1&*BlC@Ek5I213n^*ABzc;f}$pv?Xo{m
z1HRnvZ|~oqM{YxOZ&YyqRJ<|@#`HpTZpR#tu=#wE^3@!C!zp@GpSJPJ*=BJ;T*3d=
z9rk;3#1#fvDPn?gT3-|pC&hktqI!4#I7a%=`jPEp`grG#FMiW1n0xdiUgsAI%aK)5
ziccQamgb&J|M?N+d^h%KFu^=5e<8NNSciIHQMjXb^cTP2jrkoL^lyTVzrxl(@#r67
zWM%yKyAk`}#K`{N5u>W5%?2yV=asHqT%#J}YI<eMo&L{tBmUrKJ7V-pUp+wLg=UQ|
zN`)}Ri;-)ca7QCiOEx`Pqz0s!-(I(y88v#EinXUXUosJMbSs3FgD2-^SZfIG(Xd0K
zF+5$<9ZlHajm0$XZFpXR_C^DsUzHG5X8b-ypq=T&P9Slp>(TqYo?+PJ&8Xn|2Od91
z-u+C2-~xXc3H!m{8#pH3VD$<oBX0nYG!y$ydEHECE00N3yBU%KFg5Sd^JM$ral{=8
zKcO7ih=?j~H2<cjTIkfaW!KBET?QZFi!zvq&}O6eDE6H(``t^J+29CktSl3XuQS8j
zJ2lsLda-+i!3Zc&FLDRk$YMmwthK02!9EIwL2|!v{u+{YWFL2K?+iInObIXrGGGcw
z!kwh9+)p*pfK!@$_PN2DvSzfbM1h`f!5kIBEIzehl~yF>2jYPOp{I~1V|o*N=w_;B
ziae25I=d4hRsGw^-rij5E>6-`eA)YLVAyug6b2qcAR2y@M@4|SZGvR8q4Th{EfE(M
zuSgt-vGjh?|FxY|6CrIrOqi;$8Dz?Ecg>Ez%_H%^Q<GNh-po810q&7fpj(yOm?p?>
zBG3eiU2=5Mrn79=m(}SaZLt@_&rt%>s;*ZG;x1btUKM`#g9FxA2JKC#lHY63QGz^u
z4>46|5S5y$3dJFkmM$=VP9~f|iS+s-PQ4Ene`&lZus!J$ViSkrISvBwiEI!8+qVOF
zx3$N-7H*dm4Kc0S7ulw=MR8BPO-}PXv#5NOw?$ZbXX7$X|GDK#-v3B5;D$?653A1I
zUO)kLo=42rMnPu+IjTPppf_-@v$VArn;`E%?KJc^X~#s}B95j_bT+HuI;V>iQYv$H
zZ@tAL)twyiJ~_!NQK&ZpZeEOleRJ-)U-Pkgo5HYSF(;!EQCF(JuoF*5clu6u7bjPb
zS5~HOB*WJa)HeqRU021s&BT@R+;ueW5tP)4;PA!~hhn!{_a`?rsd}G1JFe`Nm8Z*#
zkEgS()&U~fne6s55`X%^v*t4bI)~<Y>TJ6iaLXiBm$&%y5dLSrEIx7}nF!B;4|p%Q
z-%1cVrNs0!3qQ3TIMtEmO6R$;L0mvg)8xoZiVma~mKDs*Dsv;Qe<H8ReU+!PNerG;
z7sHmUI^k506>(hxVDK)gQASmkR){c0-pPz&caPWpTm<En9JY<-6SsG$qzgPJm?^fv
z8}&`GVj9lzDqvPzLv!hr=PanB?WQY#C#RO^r**!g%8X-47u@gk!oly&vN39ae|YvY
z07w-}_Fe-9BeTj=7cxOS4>A=vPvbr2F!`Mx^ru9X4SL`L(`1I;BfM?LG=XKrQ(7Ev
z`ncfv<@$U<P3}Sp+TwD<#P&qxduMZZc-kiiJM-8fz{Z8te+qsCaA`o<P`GWqtHn_1
zC#7}qptzoeWh;9IA2#Dhb+!1MH0b`e!hyD;>Sw2(Zmr%`gGjS$VzN-RP1^Mje_RGp
zx_Yp)#{xOo=1_)E3oatF){0%vw!*c2JP#JS@*~8V${Y|r?FOX%I<qC~q6u;(fQPKR
zvhMpO0R{2B75@mOo;lFW3LqJ594a0A<~cg?xN?!M0CXPt3v0-CS5Iyg>bD{aZax*>
zkLnD)F*XIKuwv!?MT{#A7NE9hq?Yb^OL%{8jk(ixDNPcKBtQinSl{_%pJCv!r%$kZ
ze+$AP;s+Cl8X%}<1w&Fn!SL3C;VuUjKk#4;XwTj2^Sx#`@^T-ThypNh9xu1Lo$W?O
zynf{k&zdUG-`Ns<-L$`o7&tIvM+n@5j|W~H2H{7I5cr7I;E+F(9YbfmgVkV(X<-cB
zU<iW|A+b0J#_}lqXD^o;F|XVk<W6`z@E@;*#4uNq!1<oDv5nybc}Aa<L$XEnmf$8D
zlpzNWTlS&Q2;fq()06r0+@}W}XPh8KP^2nTH(c<yJ2|AczkFM)PG^uD*z(K3h;NP{
zOwTuDedew$v1+W|nilahvmk%{stM+Lzlj<6>Cj$g2+I~ldlzYoS@L6iS#W9g#UEJX
z#j8Z<DN1!BgP5dmpX`O)bVLAsa-2#@x+szlA}Y<<u4Fia3>&j5Lh3zQ`v3fbhK4Iv
z8?XQKLlL)1H5|bCj(Ga?eqd`_#<BQ2Z2gbhVqj(bw=kdMZ@b0u-`On{a~ouFgg;?R
z-nWt0fXe|t&<K<;SBwC#F0iq_(PE~N2iPGs?J2Iy`(5Rc!LY$|H7Pl^mFKg#{C%ln
zA6v}<oBC}oN1UVe1Es$h*Asg+4m9srO%Cp3b>Uo~YKuLWh5vyO+cVfguTS%1Yj$Iv
z`Xr_>P!*aPm!BD)X2edfPGom7eS{z56))C<@8&2EI1hWOpf^OA1B2&=#y3JGTN95x
z85I!cx$m&NT6pZvA{)R{4;${u_11V-$bqijO0Dxx&UB-G_YO&i5Gg#ps531lB*67*
zs2Uq1Gz!5}LNa6)UyV3dCt#F47T(N_=*$G_k7&T+*vE|>SJE8AE3zB8#q;-v=Yu*F
z9-47vTV~L%UEIXhp*3?6R@r25{<hX+i&f1pt^v}%MbR>C9tTZy8jr%9No9CC4ARg;
z-R$xJ)^$_71-gq5Rbz9az%6upN7e8{AHO}2GSlQ;Q)m&GR!>4|^{4Bw-vGi3)L8;^
zBTW}IJHypDnMU%}3A~}Mi8n~GccsK@>C7^feN=I*ABu45LCmqjDahUU8Fvx{JEPDo
z;&Wr`(&5_reF)dvg4=bDkqZ6JDVz6O40wlHl#9d;>T~DtMS_^;KAcW>PS+oq^Yqrf
zl1<=6yGG7jOt(Q2WEZ!-(GSuatHG`(B5z~#(wbFxl63(?3QcZAE1E2R;&9cK2|+Ul
z?jCRyR*U#$^4y4{Il9z%q8$jcy-*)Wc;%OR|Kmh;-Jai|r+`N9uUoUiQ1`B6gINrG
z23(u)wnGdrX|7@NIh4w;NU}Yd(#o9znfgvee7-v)^40QPK1&>il$sP`X3h?N`6Ec~
zHnNMFYu)ay9u_UGLBif*k)<lN@~t)zsOqZCF2OQjQ&(f6c74)v7e%6+QKjy(vtUC7
z<67F);!DOEQr_EB$Sh7NWGEmVt}%?NuzToO@-355B^T?JqEIp9my!Ubj(LF43#Tn=
zQPn_KemxCstyJjt?oK_?C)SLu3(OCY<=dzaHc)q^yZTRQnp*&x>!EY3Gi~Y5KOb+?
z@+etaSiov#T*F0%rHcwyh#uF^u{g?W(^<4G($B)SNxzZ^^TnYYm`_<GsN5`rPGh#R
zW*Q<vDJ72b<{FRX)N;=0gveFm2keb-3sRDUkP>n}J+@;ITuLB%3_r$gFF@lB10a6O
zc7;z;7-(cV2ZuyD05(U(T%!g2>C9AhZFs2ekzl#Qm?cy7)gyBJCxrZRoaV#MvPqkF
z-rn-WhNDJLd_Pv6c9BZD*Di{k2_?2rULhFbwSav^LA!7OEomI9Kn)u4Mm9hu65cd$
z{n1fXVCr=Axsdwe7Z!$pmii*ET7=QKnho_!1F7IiQapFvU>(XK`lZm@&{j!>RA38+
zEL5ooUkb^*)cOjGz1X{n3r<`+dG)jL(bx54?2H86O#V!hOR?5Yc1`>Y*S!NwQ}C0i
zlq=}Eo&#bUARDlE3RZ}Rl3Vb#<OkP@{v0NCssY&Z&yj)B4?q64^9J(JnQaJ)E*#12
zU|PlEJFZER22PwRcNS(Ajz(E5sd12nhoI@0Q|PeeP7CNmWJQhOG3Ip18c}x<(mb0?
z(5#BQ19ylDQNJV@7Dgo(-10qBFam{1UYo&a)ZTd%E<xx49_)0*V51wa?lBNBoA*#A
zm4P~Y17gEV)nAPWBIFX#`}c&vPf`<7c&8!p0}^?p=!m*Vea})m%#4CkBwR48ftJkS
zxFT501We6B-6l9}ad&TWbFsw<#=`LGh6*f1e)0ir!9B?Zzr54Mrz}Fn`@~v;g$L-l
zrB3?f5jWk;YG7LIV-puM*5=rg>J`R2u7q9JKrxeC0h^!ju}OzC#Gfr$qz(>Hx6mE|
zM=T^}wDXR*GM(larVrl49Kpbd=%&Q5&O5&*Lnv_4ajx@$G=ZC!u{2fj_b4iDzlJqZ
z3?wUq*-e-TU4a|Ynv2c}vwcOZ5>dWnZ!naKa(}&TW92mZ9DD>t*1{Y(xi}?se2O9D
zM1v@GzKI70K57qzcFbdDv<?;541MR<c;S4&0_v3u{S|Bei6Q@3Bo>x`D|tBnwn!ZR
zokdc4{f|ZZ+VUB)3~qLY6Mdee1y0ZZ)5mYM9Rs5F2fbNXbK41&aNAh$=e0+nn7GWQ
zKJfB`-k3|zwU_L(-jsFiLChB$4cT!|aIHDnGcs2_!2=F-co@FNTc(RC8{C0<_{qMr
zJ?!D2KmP5Ehy_(c?zcE}t5)tQM82CDM>KE*3skoHJv#*P4)EzVe5c#V&l8dRA2<5)
zQpKu`V77DP*b~4b^+diQ+O|3fD$|O-x}(AVJenW8cKL1S>a5h>=~C7xf!AtjN7f?0
z#kiLn(`;f)YRGRl|KpDop2R2%ENMt|Gv_3w*(rj_T^^KBE^l_DoLrOO=)O)4388{R
z03HYfMG*QFR+Xs(l$FCItSD^a%R0qOY?`zh$yFEY5k$a}C5b>xD^z9=8PmuX>i3iy
zJEcqlg48+&hcj~qNZl<!$XP~1%@>rk+;{T<x06Y!*lzIVp@2usPP8i4dnNK_;35rY
zQ)oZRWbpuI!TH@FPm^tPF%b`ro>0uvwl>dlt#&|AbJ>HFj!=y0YN{WcLRUa(uqflp
z>TRKt839eRhIsk77>f<c6zSB*<REvFwkT)JDd|6)K#i1}fCiIUQU%(LNiUfZ4*@vJ
z)XS6R#wn{b&5NG*SAQff<3QKR6pM;0<PT0<NUQRwvkg*g?_C!tx)xua{J=$@S`>^t
zLLV;22J)}8M^39eI?H|dbH$q?1O=I)znd|OHfOYe9!#3U#?lXz0yIVVw}v>Yukt||
z9%Y;Y|6NX^amE!Kd4rdgnuPt@P&gmZ*gYj_K4Uuj3W4*ClDwjyLx^;RYeA5)=?Znp
z401xtzJFVN(uJN-WnwAb(u6W@)p+svDZ5MJr{fosk>f}${tXnO;94mRC*?|9HKTj(
zCZ^?8W2_aMU~i|Mw0wr09S<pm8viTujP+P>pAwLUFl)=78*ECz+YpZ?1ck~*mLrq-
zNpiyaXzfo=SCJZ}d1oS7H=>SfR)D7ReVtVuh*<qbMPy{s=)c&)aHSuJeI*a*yy~04
zXQYCT(*sQ5f(f|=)3U=Rn2@h2EU@YPD`<*<tiWsdsL6D1j=j~?hqlQSO?Mb2tGGUW
zxTd1Az8e=ZkGZD4$@Fc0%r_mF5?F#9dRxY}LC$o?M|VA==h{dnT-QfJswA;z3Es1i
ziBw*5?Qa!aZ<2F~>3Rfzd-=qWv4~n^1uULWfsG5nTY2H0jm_QN>;XNwsz(T0zzkn}
zPWlBBCzn=XxA!sBzNP%E9};ZeB3V!^UD`BT+GxYUPS5h^8O53fo6dv5E=;PNs)G(`
zfFVINBODiX1IxyY=>5qHk&Vs^0q;q2QZo8y9$d)bM)_sO;35CZe*KDeIqQU%=Wf_1
z|2rz~_`0J=^x?B_TXJETtCd}uLG+6Wo|1YZd%M{6WK-J3?D^_JIupM#EpGWzOK@rI
zOKe}gw>CsAp1?#sGnybM6@@$Cm{O2a<|HTLKE+8lX1IkYBFGO9deOA6vPQp8Nt2L>
zSvGR!Ok|1FDk>|ja73}n&LEU-)e_`aQr~YL4snxqMEy#+vR!EOtbTF$uxhx6$7pB4
z5c7mg#dw}GD`LqSnl@YYwe&qvuz)zj(Qo1j2k~AybH$v!oyy^^tW$jz&<csuZ8hhl
z{4)eH`;ujQ#!t^C*XOVMrIH=qhceNvXwIuz=g6h2aQ7p9AoTTqNSJhyneSko!Us+=
z`uaXISLM+{k<$kJ1JH?JR&iiKqhbnqqjFp6)Ywb;SRr~sej?<%@+~Xy(ljK;uGjV<
zS@6Tk45u}+iAW_YtX%D3q(^rt!xBDBs}U2+A(KGEh9(1KE30Oe54z^%l(C)F!HT~p
zUH+rj|L8h1{l6FE8R-8u5e)SIor_Smw%HJY`Ks3CH|jlVEF<2^+Qu>(P`Q9T3GQ}X
z4RQNHTaw_EQRwh6&yM}JGm;S9oLu>nZ!(xhf&?Fr;_f$1;5mfA^P}n#NQ#ZZ>SLcZ
zf-zyCf6y$59c`!94C4$kITtdWN?*+^7@=oOPu6|5UZ1WK@QxJ%XMj~!a3sTOqS*_z
z*0Ff{5RldjJK}jF|9FE_@?fpG|B_}G_-^POH%f0mJurKxEbV)jxn;$dmMTEafsCMI
z_baj9nud`+NJdH@<(@u7O3KXwdt^PBm)zqj_D27K^OtaJjqtRaz%b&2AX_;g1lE@b
zafv<veY$fhx078^OX#~HykJp@soZJ%%ebb)jeqK8cLOfUo5|*-RENiv6T_JjDVOW~
zxCob!=^N9y-o!p+ma#u2I`*P><^|aVtjMpCBN3PB?JVFWxwZCQf)NKq5edi(<!?=t
zFK?$ox%z4bn=lS5)j!|iobI;yuedtSjey6aFLOJ*J+A5)T_5->^Wv4VMdut|Y*`{!
zp>#sU^ho5^i1-Dh1Ox;m1VjX`Kt)C)V=)Pt1WW=aA<_^TiH-iV!9nOCa1=NRnTE_r
zZX`3B`OgMgAT@+KLOp>I|EPZ~C?T}KpAE8uLzvF0Mm&POmzNFc8?2s|k}&HpmeB;9
z5axx3hwmunnKkm5#<v%-k#C;)X{WQcuUowlrLELH(_-Nifq^yKo|Vsb&U?ykIn;J7
zvq6D|6m}$X<xV-=`h!9-wD4j~*>Fe5Wp$@{Bj~BH4KYcY02>K>TbzwBq+y*N#pX-v
zsvQmwK4VDIOnO%v>EAZ&Z>fE2)~fJnS7GlxYV=4^9z>y_$fD}g7i%fg0M+^iv^7%E
z60$%m2=TN$XE>sHdvb5^>P9zxl8I)VUB@*`mu8%wvGVhy6uKH6*Kti+NMf?S+{S0f
zq#1Yz7do-n4!`(ZqZ1p{!!9m_M$*9+EMmVB2glv<uRN*qop1J*=)_*pu8jCj*4Br9
zkq<Yaz)t?W9nAkQmjc5t<5lLCF5N4m+VsAlQqH)v@VKf-;sj$obUs}3?nvK?0eBS}
z_gKSf($0D<H5L7iG$W6Y={U$O-%_gYV-<M?VLW2n0;s>Dd1z;<XZ1P#0=jYD`;eIc
z+LEvuHv}d5(%^DM;0<tGcMckE0c699=q^<}LOawpwxEvU8gYJntxuvQ=x_1xx}@DE
z%w{a~3`J;gjD8TIf(hEv*^_Lm+wV+0T6i?E^^~V|VZ<foO4_Gj#8DY&e*9!u;A)}K
z#Bk(sQP&?wx;Ia<NutjAw0W>Cc|<WR3F&hQ$>?fxEm2SXyt92uu(s3M?dG^G{ADEI
z)6eZrFaC0k1)NQk@@8>xm8GxMvg#D_zO8!S&(%)82+2{>Heo(>&}d>`ZXshyR>G3t
z)1U5!`vDv<pWgQub^agG`A44U+5gSVGtmFdoecE<C3yZ%S0yRn!6d7&qtEz7(Di%@
zpaVj5Kri|z-+Yz5WfXA-inU)0KG!fVA@LWDW_}X2%tzDNYiS$~DlWULwCoS8J44Iu
z9~c87>MqF{><Hl5z?xK2z=o>pPYa<|_6#QGpHNMQy>u@vd0W8LsWk@Be6$FheuL4t
zGxvY893yRpCGwepfO0SNP#3EKtFjj)Q2KREWI006yTs#E<Nz~vNWLLnj%6C^s?v6r
z=m6LEQ2;jWFH?6&Tw*xrXxEit*z9mxI{l*ZVOo$Ul7Iuzr!6WL;APjM7svhGaa5i%
z->$Q#xNAa>Th%9ihJ74fCW`wf1Ng&G06(i6#@LJ%tBktF$ky!~Vf}QhbtZ^1I_Y2N
z>Q5~j@cbAI91FVcuQvp=x!7z$;kZcmHRi6&e(PK7T*P5vP;<zgK})^n{b0)#BEOgT
zqFsbh3Md-&m}JzYPz!fjfRw?!lfi&c6<maMW8IQ)Gyr{VN5>uA1{)=dP@vQqDE!^M
zrc4DA*jb+Lp?`Mjj%D`B?zn5c6#>=k)-^%JJ!!u(P>yI3s(55gWnpIV!&#gBY@6T(
zi{Hk&qZmPgC97XB5|S1)i$GQL!YJvvK3`F<xJ96GycYz^L=mO-DxIcMD2Z>Ll~c9b
z>glB{adS}<rpoG9w&YX+!P<dTN)GRk1=#fJ&lKzv1>lWh8p<?jxCzJ)bLwAlrmgCF
zuff2niFv(eerFDa8I^u&wt`KXY)VSJmy&f>c|RP~H^8n^``I<I=a6Gh5C}46kutAM
zYZEZ^dk-!;<A(5-Ol{dk9Ubgr;!8~9@okIoj3q`|1t@2m@2%QHI9xBp9EE=wBXh)J
zka&hDM(&`auO%8559rNaz{s6I=yv<oiEaWfysmZwzcmSA?WD(cSB${iCopqBI9zUb
z;^7(8DR+xP^`O+VTy59hk$|rs>=qZmN^buYVvc$Mmbn%;G2!6mfr4kSfCC;Zj`bF(
z^QHuK{^&+o-G=jsED%<V))i5dd5CB(T12-lz=;{Zk4Z;u-MsXTzZU8_w_rD6$;`ry
zm_*I;PlZ8G%wIcqK;qYnhY(;*#Roh_C$WOr<V!x0EkfXF1?2s5)A#Cq-uf-Dmc7Xo
zfXnH5Xm<YHVfV54KEoFM{V@y~Qs&*GND9?kv<x_}RC+)Y&CaXX1#&AF+Pp#;sqKZs
z-R!2DXz+Npc8Ss+NHNFKBb;|}jZI8H%T`;V8s%MRm{0cQ+s-x+N8}z_z0uT#*gH#1
z5WZBo!W6D`-;61^M^jruP_!DK@>}C11I=I#juAPyQ=1AVfjTnPNZ)Evu(HCl0LDvz
zOh{~@=Fep56W+JVZ?5?1P_R!WY2p<zFa<?z>_2xxSlqR>V6ghh!yW>2-sIKKG7tDg
zc>~z4d3(GDc8Obvk67pTVjWSU?z}S{P#mV^4P>54avBK7Pja$9i0GGc@ZHH$mge9C
zR~d5eU+)X$y@n$VpQ&0!*|&F+Wg_TgzE{dw`rm=M<6lbg?RrTg)IkkY{8E((j*3S-
zf%j0b2aE>{174GD;gLjSFgWxN0^^WHWH3354-(@P|9=mk=;M!lZ_tzd2TT7Co%}Zy
z%*gnEM``}QMwb7VGs{&x{up$G@12~z**vp&(&)+-3q3)+U+C0M^XvR|q{94?jYT5K
zN^utPXzy2C3f!-#Fxa&iVRR!M_}5eKP%1tE$#1FGu4`Oh2)zOi-A`b7pnjH`wHI!2
zmM5J>S);0rNDM~n?-0T>{w*&Za_d-Vld7G83lst&2v5Kh&DN>Y@;9SrqTUGZw58`f
zJD1?BATq1)Uhu^e+uMPv0C4%8&04iIR3NS&NBF8vn9qv7md(5Lt2y4MYx+B|Re(}-
z9v;9m^?&Z#ka^Y}1fj&D<}ycntCQG&E7P5I#O=S3aQWsS@y<ZOCCqKi^yFw~#mwS>
z+RmK&AO9&{6=fl{v>DINk&^AzNs&%9;)5RB^C<XjWwvSNIFi|xVTv`yV!A!N=Ew*L
zAiG1dAZ6y$ickY0Ms@{glW0`1V;(K9d<yt-L=7Mq$ocaETQ>J7LP|^rIyL2S{8->l
z6mpL+!ERi5=R{cIx|3Q*{0BSb1QJL-z=Q*H<iJE50PQ|+DC-N=!vLCot|HSugC&S6
zrEIT7^_3vLT=tL?#b7d~<EP$F6Bl$M?}P^TDQNkA;1HvMVT@~fgl2zNu?BW)IuQaL
zOL92<<y;90*jlTz{DGj9OrChm=>FCX?1CSZCPM-_{V5^@#F{E@tTU~%^wt1Lp_Bz*
zTit%PsDmh=_D@QCO^2NkuL^zCnExMR?-ZTc)^6d(wr$(CZQHhuij#`%if!ArZQB)9
zl9PX*eb(Bi{p(`gd~LLE&db@}+2<I&_ov(vSG9W|@asbU)DIq6kG<|v#V-vQ-#Ob5
z#ZwIymYN{tRD-b2EOsz592FTlbE`HXhV`_T$!INGWyFcgqkYb8kDiEE`A0K+r$tJ8
z0{_KZ2)+Yzclyt1c*Do*#{qoxForgq=xX|5d-%P9DGwhfFHS4Uskevot+OGE5Sby{
zi~a87r}(pkr{A^2k=a~@y`1A~979}O8uv#C&3-C#l4=(;h-Bl*PsnP4l&UEttoM|C
zF_EeT{RG`NyG`M1?w>Tfmy-9WF<Y8$H7DZ^*e8ui^*U4}#t~=>Q=NQNFj-R5Zkta#
zd4V0<(dh>nKh-qvJLwBu9PL;fRBQ)dfAyPDA37A}eeE#GCEv6#N$&#i(lyrzRYh_B
zHg|l?UO6HR&w7w@RnshmKm`ki`s5p!-mY`UCQ%(Q8TK?hgq3Km_s==Pfs=Z2<?i-!
zcI13xS>#YhwW4H8$FEAN7jnH8{8P&Wz&f3w<(+N98cS-{q3TkVOyt`5ikG1^rwpPL
zgA6^QxrLG$?+i{2qS;`j*FdUAe<IxO6{%yfR?cK(3<(yw;;Jkew4kaTn9u_JwctSQ
zk!0x_)0A<m*`Q&7RH~<2VlA=43VWtB)4_+hSYan2QW*YZ?vvm|XShq~&2rT>GPAPO
zU$?m`%u=QI;YMm%_GM4(Nc7HcOY-|#Y+v)DkGU#lDxJB~jrB{lyFpZ$jmV!XxYOrX
z;E$V8o{A8ku7);`H&ze@*LkqH25mV_^EBk;YU18V5Hl6ZoQ25A2JsvmNY<d`Wz-p4
z`B&o*Et}BfTqm`3VX1<Xg@EsqXH9$*z1d{PrCFON6?)e8QjO%H4q}ixI%%J<y~DTt
zN^HVyE%qj25NkEWfh{AJr7ZrkX^L8`DdDp(XJg(KEge=6h)vG~Fm&LchHbr8`zB-M
z$fxaY#8#`xoL$C8R5&_=v2~K|bLJgA!2RMR2Si}Hk`^yx<^xec+Iy$s`S250HA&Wa
zRVA44f)Uf{!VHDCs`TWdLu}#`_T_6rGG$i0FRMk%a&*TWUgqVe;t}ffbMbOS%E&z-
z(nBpDUf{e<>Qy=jAs>~%tId(CS_M3VQjXyeWQMgv_l1EH#Jw<$m{PsU6|~RD4Mwh~
zh(Y26E8TJ|X9Nu}^4Y6<qH4X;VPk@MBz>0@bD3EQl_S>{_ZIt2Xcul>2@MC9PDRLL
z(KQ;S<XzH^lPlo&01isKBu?_KrFneyi`L_`V<Q1r)L9*v(X)VKBLqw$68?TbL^eb?
z#9$mGCy7x)!m$4=L`D$_#e;DW|L<b1C++CQ+aI`P^)UCp-!Ffmni*OD?f_$C{0AM*
z_%C(%U!j=&LN-GBmyaVYDn)@(D)1zbr)!B2CG*6Wgw<hd;G^oV53^<NI_1{#WIDuY
zuaoq(HS^r`Beb7^kYK(~_KkK|x^E1rRU0Xo7`xmlfEOv)Twa~!!)~W@X#`%a7QVrS
zroE7#Q)Aj8pdZLpdsh&`;0Q221NAf*QwXc<V0kCt)xeFN7o5O5Ks#_?fhYYITUPL*
zU<SrX`mpFU0}uds*PUH7@&$q*4vgv04BQ1hT51dqKm);ZmKC;Mp@2Pul8sa)KyH!r
z>2X0rawn$LI2?Jl-anbJOUu$M5i~19Niz=<U2W^Ji=WynVdVyH5j>juY{3d9+0kkY
z<2AD?=Pfj~eP@FJOyW}&0e=EQIV;QX)eORR_00DwcoST#2L+rv`noxK`n^aJ%OV3N
z62&w-bT}e?BX5(2?rg#nfspPLOzu#A_n8C(bCBPITr06m&ikZC8EqD~IED#cI}<o>
zE?c9&l4KH&7`3?Fd6?>Ro}~gXNyQ&rtRZ|>i<Qa)03nbc{Eo8MI9GjCXXegqqCxIH
zN4#07H?)VBTX2ck`=tRf6dQ+>L~jd72C0*+3mY4oWcv#j*U5)nSR`G>8-bP#QYxtx
zO`*`?&&I|C|MZ+Yl!RbJ(jaI@`=M7%)X{StiVgefC9ktl$NKSrNeFjgnXO%=!GLUO
zD<#45Msq}E)xylGkrkE=G-2Xt^H1lyq-of|=4ggOlg$`KtYPZ#Jywdgz1j_2cNeH{
z^Wzvop^@$gjrfLYiU*sW`3F0y_WOIr&iYQ!xw0`!9?ozLV6t43QHQP=2v&Sla@y$4
zHPxoTk{|<jOrBYj2~GoJvmZsR@rod9jx(E}j%@b;>8=C50}x&*mwj{Ro=`ZD417tf
zcoqChS5@YNSA}^+owdVzwb+;bbF=V8Nqfsvqjv|GYQJR8wy?@^n*<bHPb$)~QTDO^
z?gP5St)hXs|NM$>;vahI(1j%wlRp#$vH~fHqGy6Tg)3_$ddY3GpvPJ&cwROGIH@(~
zlCFGo6q}W51=1NqZ_|eCh|g&$d{U`1Q>3hFWGeegs;8~E@gDej(u8Zov+L#zXme&=
zwPk&L&$_W9;j6A*<g4%<u*2IhhX>yw?8?~$tp>fq3PD~5uV@{f`CF$HXvLy88xEve
zwsI`%%Wdbz=-=UNIb`(?uS|(Xbd)Z*Qx(r8xbIE5Gp>7eFI{nR?%_`K%p9GqLb3*v
ztYs!tCP^cj@yAL{t42hr?a$>gun#YCBs65c*WG#AZp}ThDx*{kd+z&`+sM%X&(M!4
zb3!r`$-Qpu*8((z^ob;L$2ikAIvN`A(X#gJ+I)sPW}>fhTk!>z!MfdHzSod^j>*YR
zh*d^fIah^^;p<fGW7a-#@tGC!_mOY*P@Hk|0*kjVhsPgteWw6=Jz$xNgzN@#G^JR&
zN0cUF)dy}7M-11cd|e`DxBl^To%k_ua69ljAD*3(lmufD$tZ72URV<zX=m{7t6rIb
z%7!Nk`|B@-%zPbOyx;Xj8%t(zGqEwOcALW{c79)BIjK^c!$Fp_;K)x|x(l^g-D?F<
z2Nv7xbKx0P7Wl3>)9w=+JHPQ@!`4?GN4-6m>#KscL)*|JgL2L#Dd(&7MzZadpmM-)
zC0yIA1P&S-z51sd>sFTh7y8#6LMqw|aAN4>>~H70HVct5<oo$XX5>LgD1B7d4feu*
zKP%bi_?-ICXVMmG>rWE49LCkm$8|`)0IQ#cE%!7O+rj_CX#Pw3Gyh$~^IggFzc5%H
z9(oy5J98Hc0>*y{epUCD-%vyO;?LcOu+#>MxO=ZdBZ0D1O`b~uk;M`m<yh&9(r?N}
zTfgeK*&M0MW=UqV6d7E3&RO}$Hs=eh#{BgV>m|0f`?4OS%KO5?;DgJvu}Fx`5m>cc
zrlTD=v63Z1ix1u-%s0CS`&q-$f&hJvXnJcElka=WD$g#9e9VX>=R)hiyHgif;jW|o
z@SRrFf6xU#UNhh@CJhKt@>{}XaNPp;c)P?)RYkN!><x1m>cyJ+!b$5kdv6DPnCP3m
zb-@LgU#i!HDHx;V8&M$F*F;=+H)_P_!uVi<VEIpAaTR8IStV-E=Iz*zFSBnV)j(3p
z&t~6IGf6RnCUmPB)W0Gb)@rZ!jxkG}#s(ueu7SRn*31=FQIU`Q6-o-i+5!(V$#Cdi
zO!+6Bc~)I<s4S!_vY536RH;TonbUOqAcDFm*pu^CElfUxY{U{W*LU75&h{M4YS{tN
zLI{x>(S{OckEzDKx_VkqS1w{peBBC}^~bJ)Em*%^cLT=nn7vw^pCpiP&zV||w+Wqr
zB7nx<T_dgc2{AMwNruF*>%J+)qJy%k9F!F>VG|-Xw4t7m<OohomT=DmSy=(wTKhm>
z${J^dW5lwbF~zLHJW7yEWzb&dWF^*T0mvHAT~T`-Ykw~PY+YXAFXXtn`YNNJbLN74
zfY?>rnJqw@hFe}T&m3Zu-7?Y+?F^1?0&S}pVyYVs!zo(sR1=?W03$O<Pz>cs-sW|5
zM{ML4aBpZNxkY+Vp#l|eYzu*rX$i?O^E#%~(NOa-TS_6v3i49)!5#6LVwgXU<@_2r
zrB0p9jT}vQaXl@_!Fx<N@m{5cr0(Ua#<)0O-u@BRm=@_X(Q^npah`qslyCY>p%tv<
zC!T%nv6fIu#jow{Fo+IV=rOMwk-6JI;^P<yN`+`e7?|qt^!c<gL0KIeLxFCii%FEl
z&q=#aV%jpM>n&G07B$N_epqo-yt${8vT8Pg<f}>KDpdHguBf@CYYQd15q}oe6rIYZ
zhg3jhzp6YCg=nP9+MA=%XzAe!gY7rL+CTab!02IMd1uO~q-fQF#9!$UwKvm`Lun1;
zg&yAZp~tX}w<UmQNkb{xZd>a{D<(yY_}($-nyVqkH3#;m{DY6h+r$HKVBqS^=N6Ga
zw>>7^mQ|_F&E>qz>FKLUg__|@S-PpmzAT0g*CVIC_D8P93y5nVu1s6`PQ1#?N-6&s
zp_j~j(Qn-v*PqSnvT|*WbkR5s(s|9M9JZOR6va3t=!%X?hBF(Bs~^qY;RpREM4IL3
z@^K`dKjH^kD2Z`$-_npTn`xQ)jt~q`3=RThAHx|o`AIxAcz2vV73)l%iQ?>UhP~w&
zsO)bf67s5dBjbT?wx2Y+U{zDek(S2c&FzaD?I%92pxSg<bj0UJd8X=ocPE`3d}a|J
zoh6cQ_3m-5(HvJ2f!aFqwMYQ*6YQpU^ktUPK>YiL!X~_FQdb5K-DM{57KXkbz7ZM0
zkwL39vO)mS-7{RluGHRB$?ye-p$I+w?H*rQ5Ho$zwuMNZ3^^Xw>_2GLn%u#(si^ij
z9GkQQVM$%RTEi(E8ir^FVkR(ZiiJWm&dp0Qa=m1@IG@6r5+cUxpFHPt4|?El$WcdO
z9G3Zaiy{wv;5Ncb%=CpspBGF&S3UF<eGMu|W?rFVf>AQoe@<Qj)0Y#O7S=ptqdk><
z%<+qnN1eB_gRXnrx5b__n59`MzS0!lGvE#YGUB-GmBM-7ol>JKWfps;#EgY?(+<xU
zBDQVHGIt9<4Z26D{G45xpP4J(-{SQRwIU|mpriim4qSuh$eld!bA?=|<Ye$u(FIaY
zM+|S=S&ZH2VFt>S0?palN9XTYNa7=M`u!mSxmo?I`JAWSU*JLXmY!>Mq>tZ@da(Y#
zUjct{E*V+=ZntJ+`UiFXFG-hb+VUG32!1m)Y4-woA-nHIG|B7bRT_0Ppyj?6YNH(F
zgS)H4Cm4}x?>p|pId!-K)M{Ep36j&3?q=O>uV|HJuxMQ`%(}9_<%C=36E`AoHNXAq
zpcUWt44RYd%VEH=!v1}ydvFwF=<fY5RLz#!Ui>pCz8qo~kU5q{oRPo>P^xRKh5vD9
zw12xZEdS%qSfIGw^I=`%QbrAkqPU^K$C-!(@Y@FUR@E(DK-nc}Q`)u9)tAq*I2TQU
zJrPf&eH{PM#mk}ibX}5oBd{)IJ$t4!m8r9|aJ7=?asF)y3=fnA%T08FG>Iqk<eSg6
zooXi3#83@V8#Wn2H4&@u0hATh0NF+8P1g{}yT0vGD=vfP1?6CgOEoQWH_*%f;BIyr
zgK{I(O({}~d+g3YIxjY$jct1D5(K}K$Sh<lREVQDOUGa|fzG9!jp}E?m>S4HOXH$^
z6k5WXuV-*gZ_u4xpWD$*x%Ewz^b$_ZDAFp4gAr<_Zs7Ef7*3kIX|Uys*sGE2_X2R~
zv74X9^iaNfh~UjCR0XzI;&iwrpoTHI4}zxg@JQ$fw8;<r475)w;}@M8SrCn=zPy=f
zKKlF>9h0C-lG;XOpt>S!%8~>+oMuT_mPBw>+cZZ;>>(IC7@>g>%h0EwwC$a-LCtW-
zo<#n5r0DkwG-5@V@Yp<N#k#RhQWdrQLPWoi`KdHwhr02L>F36J7>r-wLE^#=f8NV)
z+iy&ei)C=+DPbpmI>JG#PYSJ>_R_U?C0W7l5@41eKi}u=-DyMN)SbX*sZ4#oBG8`m
zqg*eP%EvS23VBL{S_sHSGCz_u>R?aTvV*Q3lNg5q0zH*_#5IdJiGb21WS#)18B|9c
zVm{!W5+N^Cb*8Flq4X1*)@TfA;nuUIa*L=3fKo{HP|514Y|&D(SftmduC@m1GS@s@
zY)@q9?e=fD;siUv>qYs7AkWhtm^h`$YW6{ge$^jYQxif@*>b2VNzXVD7w~8jwR$PC
zd|{?eB@BR)jzz~T#bEmB>5V#&j6f(n;t`~Hq4Jb<U|-zlU&r>iZCU;PWhR^7C4xas
zCyxoW`<_G+L!N;Uc@XoFdNTbUs9ChhOa|gF4=3MUQ9fI6($-DQ6IyF6CRMKA-E>Qv
ztFQ9fv>x9G)QU{)E4*`X#$Nkqwz$Jpv<GmF6b;~54gdP<KW<x!!d0r!C*AmkIvhHr
z-OL$J-5YJSd?$=1IsDx-4<ViH3Q;_H_35_uew^(bf95aTL)1w{Q>L5Qv<3}{%um0>
z^cnp|!_Q`Ye4n2J=9mLEd5KHY^7Ih3Jsx%PpiB&SfnO!O1K=*VC+5U5&@6N2f}6Zm
zPB2w|%oEdC{^-SqPqN}sT(0rt(W%{T%>z2iAShh)pJKR@U6M2L+Rf_|3JRTwJQmhv
z8_H6~7b#c-XXG)V@=to3O;`;39p$De0aF+YMrn)BSwcI+%7)=dpFwAc?@r+uX1j?`
zF^^62LX&#{)vx;j5LG$+i7D#$TKjoA0)Pm(Y3?~aBPy**ec2to@SD)SK$~eXLp4Ea
zCipI#Ba6y~n-8U08GTJi_wbgC)dd#)BvG`rbYdxyyl&JNkvV>HVf3c@4fUC%Ne41w
z*~&GY|MGUgx+9X3rH$|ukCy_V!&<ljBS1KhC&3YCh-Q%K(pVcr9Hi_{11HLKb|j%)
z1I(9Z^bQ*Aqh*X=K-`x7ABOJVx|`uIM;zlnVDi3^1K(O)iC)ao#>Lc$fL_eT(8W~5
z)Y#s{l#dU}*~Q7!&=$%gtLlGyLay~0SKxOQAevX`FD{M>e+SQ=Q53}~^JmE?JF<=G
z;cTp0Q*b@?>~u#b3MeX{h4&749j|Sfo8^q*dKlyLJk`w@U1jN!*Pdo^kCfn%81DA1
zN6gQz7u88(QERtpIG_3a7{A-q`J_{63<Z6sSiZHR%A=fh+y@l|SZH(Mxf{03nxz0~
z@<j<dAPESbWsD|HtHyl}Wd#t)|8psd;DHDF;)I{eW~=)XI-tU*j{sBl%MpkRuIyys
zvET7y@nQE7WjoSqDyowPKhKnOf*Z_Kx00a7Y&Ka&XayBzq7y3?F53mCICv0ZmpZ^Y
z1>K$3Ueg>1KczB3;Z?ZX2sN{e;Rw6ecgp-XzR@pc^{T%3AN-+mjlP7xtUZbXW5!k4
z>H!J=SXV&+yzn?jfsrBKg2iGi$|tIKj&7=BeX6o~8Sju8z*-GVEZKRy@!;UKYAkmJ
zI5i1=+uB0uKaQSup0fca04T=!qy99T<UXN#fVy%U(}u5$fs#pWX_yspzBVDZ8D!Yz
zg)65ARBONuz7C4`ltO{Q!=$)!dbiKic_|*EZZct`Wc(7%ZSf?<P(E!_u!DDXr7)Q4
zkh6P(ppy1AE+9fqZZkt&?>=XNo}nxLtkq=WYL2gqxU|~cuMP4_<{#&_r?LuZk!1Vx
z#S$1q-nuqgyjH@6pRzLPdmaAD5Yd25xw)5YBN9-v{M&XNC^O(eD_j0#4Ubkq1f7YP
zik)GOQmAmYn`tbgcWP*DZRsZU<V6p$Br&Be^U8RWiBVhb^%C*T@S7Ex9cEYtOPm9V
z{U)7)q<>3A&-#uQ`tpt_^+PvDk0dEh_qYXubT3o^2^MWT(I62q5^S4vuo{vP-Y@`6
zkXVFR2smC?1P+mNadgAWt-(YlAb0$zq3l7?@0xAAV;j-LRvgc&q3)C4lFaf}cwQz~
z+PSdkHStnNli?SMplEG%B2k5Pih5M4E9ZQ>&r_l4id3mxQ9vzH6DgE{DhqvcBPWp>
z@*i7QvFx8<gfTAPohE8wK?TDplEIcyDtj{*Y|ce$)+Ow-z4XNrU+takpSK%3PDf7{
zfLktIR41|xw(YQRa0V6_3%`U5;{gMz$htls?(eTUqL{sD(!I3n7|{%I{$NZ|1^Yy4
zZyOFwHYRPb3FjO*L>XvehVI(mVULX3XI&Qg*X7$tqy_e?pXtHo!gP|1O6PmN21yGY
zDhMe}k|;n!`_YT54&3>T2}HUrAd}IH)byy<((4H5L+XvM5zG+3HJ{t)l<pV8J!fad
z>n2Vhrncc46RdYCE-3Skh_dxZ6SYxP;tojVFgPDYazQJlkw_Q{=~K;tghY6G*U5Zz
zQLkOg23;woj3}d4$Vb4LDA%3i)jN^x9{A<?MjS;@rnNk+`_Udam!@e=Ziq|6N87AQ
z;|Al*VeEFm3L{_Ke_-XiIH;cChGMeXT3%3ZVU3pcpgUmM2*}4}C&5r~Fe_zYQbx*0
zG7}G_$6qrt^KpFvinn8V{P$@4i)6*f$nv-Ag83ix<iBKDso5%jv#dU^_3Ng>hV6dN
zy-QPOTZS*>Nd_92Ga*l!1p5rDPbADjlUTm(ba=NXn?TrdDPs?pY;<+`dj8hj3SeaH
z`&IK9-4gWSj9)#`H`NORbBj9>aMcTo+a;ILgzMEvhT5eAzb(kcu&e&3r+8tU<}}v>
zdgjD}E5KkMJH@omCnVB)nB?(KuWLZHJFoe^_U=X>$*oSBJ@`QSD4<Q_eZk%jQw+e~
z5p8>Z`g#u};4IM<p#Hf(v4N;ES-lK~-xLlJUf|!)hHr{$3RR$ku8QG}KwM<wPC&Or
z$fSjupdqE_MA<)c;QAww*PBPsWSR+5eBfeHjIhU0ZeuU~rkmB31T;mH1)yCf^Nn4#
z#)4T)06hz<V+u$p_vjLqj9M`Sll!EKrAMuf_Q(;=izAwi25iYv-})5$hvJ&ih`Y}E
zbG?oLe}RkQvfuT=zXqnfP{eyYTa9r8o{CE3FBxH+ICz9h)#o?Z;6{n%@<^F>V(<~x
z-3u14$fFV4PO>yHE(q!Ve4`kX0>mIUX_H{=7D?hFSP)BARig>5AjSFN7{J#j@8I-y
z|MHZCm&2?5(?y`TfX=>i<DHY38@=Mlv}9N4flyK=m2cJrowuruSPjksR6pWtUS81t
zJJ?Gz9x{1R-bT``-F!@|oH;y|qX^QXr?9B#qdWnm`zMF#PhMm-(jDR0zO4DMp>K=i
zp(b#8Ri~c1L&%F%@F?Rm2)9_AT%{=DwkWpZiP?ccP|I}d%rG#UUJ8P)=oynV;`*Hy
znKX}Jcp+EARvdIFfMP3G01kEWk5&#&ZhqeO!EC)Xn*v(x3s6JqX>L^I)Pj;(Bl&l0
zZ7p$Zr7lso?cC4LKOW-{O}4x8*uG&#%}0+F)*W3<B@IUJvTA-6Eu2qM#c%CDSBx~t
z^D%^}>_i2}&cc7hfVSUbr<3IC`*1HJUA6w!md2GzsF!0slx<kC&QL1dXjgNlaoenG
zI)DorcJ%CH<kWEr+t^YxxK=*2p%n=Uj@(#y-G%kD=VIEqcIedV09){Fc>DS`WmJ6)
z{w}_YyVezbzNuw}Xh2{sHCrz}SL6d^teJqQry@+92<yC|+UB=!{4EnqNF<a}Rplz;
zTwseG4ZcEjd)ic$**LR;(O?I(;`_5kSN@?1=YX}vh&c5qt<!{aWeK)BLVdG23?6PB
z?=gdI2*cb_M7eVG{DQUgAkJhh)FU*ZG|+=yp~lkCtp?nu#!|;M*M>t6X$V<$w|)c#
z@0m_fTA1QKp^786@oOWorQr-(u4IH5z?*i!Fmw3_tVah}x0FcE4xax{GY#f|>mW(*
z^d*)i<-S)4@B6881flee$g4Ds>OY%m1MJ=9ZGD*sQy6+v$2~Y*8Mr;UZse2Okime6
zj9`oVeJyYIF^(B3bqQS+i>rJ2uhYDg4Neui*HndbYC0Gni09tC(Ly9dR9}!u-8}`>
z>y_wAsdlm+eyO{7r!rOe7#-_@Z4ZM%9JOtJ<d}z;PZ&+5SY_0$$N>$vmPK>|2`?`A
zkAlx)_qrE@sq|fdv-_mGJ|Es>KsBmMCIdgRQxgItc_28$Q%>IoGBM!vZO|q1f0*Zc
zT@<!}9R<zr!a-$DmZ?K~IbsYH#Dtoi$gaxe$B`?JCQ=+qqTG`}rPm3;5&a33d^Edd
z$6_JF{D+zPmt16G`>Pv;@gERW-{0{6QZD{~Gu0K$DhScbUs5P-zCC?1fN)i&MAStr
z1zx+F2C@sllKiWyW4_8nhWRQ?2;*j};r(*E!To|Kpxolue9a#i_O1hK@D$OTyplF5
zj^gV6Vsp>p#)Dxto=h93_~Y_tXcAsjzWtqqd~2;Z{5`N~Gl{Do72jOf3x*Ey5n|Ol
zn~^4&UymuaR55TddsNl7eKrf&GT#Si1QXgzK)R~B0Vm?`91{x)kbu=ciU4G>r<ZxR
zRAtnc4BWP{PczE<?-+HC6qSSk4(TF+_Dd-WOdw663^PzHX;1=k7jV#w^k`EdC<ku5
zbBw$~4Ve?gWL8v_dKaWf6i|u6?xo3~UOu4a3r+haoL0ts6NIut{T1?e8Kco|Nzg=M
zn@~(cddVQv6^VAc$0w3UIadMhQ=l8Fy%lYl`~@~X6@bwGkkVoUKn5{E5$b?);>-%6
zw75IWzj2&8do#DC$N0AkBfqKsFxPk#M{<Y6*U!@Z@><(9VxH+Kq`gMu<He7y;gjXd
z7w-uNbqjH{Vc1_`PaK0cKQZoqph_RfA7UNOyu~VkA9n5c@95-sXR*8gO1C?XKb2nX
zt*W^>>>mVeV!`Umc&^k6>V%rmqURXJAardu*|S9|Bub&_Tw3Jbb`!*M*?nhu21hI}
z?GA$29ymOIyBBAHhyTb!Q7Z`oHaTsSkFX~$o^Qg6xc(4yd(4}LB`2SK4CpAmnEkW+
z(I>6x=-Gb9^#Z&M`2Id?XCQd+a2LXF@pc6dncQVw(!rKU$vh^d$LVBN@f*pJ@G!Is
zd6l1+_o|^~K_zz%d%)=38+w)cR^MO5)ojjaad2sZWEH}HH1C@Ke89a@c{TAhH6JF3
z1I-f+?XwqO;Ti4^Ay}fvew)f55BDOY@+ujl3Z_nrlkbmcot_me%z=$3Tpx9IcUjzI
z#P4b;cdFHiQvsAYMfR$9D)nKx@Eh`v>6Oj<My-jI)G3G6-3xP%`CdwD*l5^n*dW+M
z*eF;tw)8a<vj(&6oWzA>1kzJ1yIAw@{`dFU=*OujN&StKap9i2&z^L9kGGzwKl^1c
z>f=dapBL%&Ww&5M)hD)BGBX9=ojxhOf><jp_eW+#IT>zUIDb;W?6LM}a3f0k3Ib}!
zodXkz(WU=T_0a>7MIZ^-o!R~Jj-&ZicoW3|i&pb-^WXxUrUB;{^=_g0i{`)ukDWX&
z)2+daI`#41L@=$9l%7PU#yXL2*x)UQSJC9t0mPfgBZXmyJ`+zO#f-7^5S`}$MR1)L
z(R5zWn8*l|)#Z@Puq)_fhS<T~pdd&%nAI1Yo!dvSwJS(ld(CnC;vCM-eh9f+JEuVv
zPp#%=d1R*lw-x71nfz+JE+_62wv&=VLdsN|C3cL&w2XrIIF&qs29493y*PtB{*i?1
z3oUn*m#$$!yGlgMy(>8Ol6bNQwLbY|X^PZ-l}~o9YiB2z9JT&Rn&KAK_Z?j{v3seh
zl~dD8iN%_#mEE3gIyrW9TTCc2)gFUwJo`F+Sah)*sp44^#M4K5?LKY1#m^cJvFW^K
zzth%?&Hi`s4nOeVd}9xG+}HHq1Mx4a7$ejF`F{Qft{CIL1dFNJ#;$*h%;}mmr6VZx
z7-m2BdFx~;OO!IzhaZddDfzq&2H-tg)q62)SN1oPUf?ox@mggB25Z@#X1~+fcLJI9
z1BC70GgS*N+!1XaPwg7Ral?I90<BO;x^+`O)}@8C62o<m3wHAGIB%i&vFF)p4gBk&
z{IrN%VD5OFbXG!+ut00FJdwm4cY)L4h5Yf_5IpaA;D9yM3dX$GfIPzQCn0-XvoLlI
z@%8LQHQCm9fIW!WkkA&6M&hw&K2|k*?^EXnMHO4SL)l*i(bFmN5>yM|3>HOJN-<Gf
z$uE+11XpgGv;5elj{WvM2@7Z-hNx<=LAhyB8_UNEmz8GrLY5Z8!MhWK)my^k`ddX?
z9z9|Lg7=ZeXQZSkptl6`45>HZTne~c1Qw}BGtQe!5ydL`B4w6wF+lF?>j>}ylVrO9
zn<}1u{;3{R6PgP|X&2}LV-MUg0@kvl3ZB0Vm51nALPDWpVRdO^F%v-dm$)C_nRic(
zn$F@KBs9iAghob~6pQduhf;M3(@TsFHb6)8(O%SS(<a2-$`ftAuj7pb7pHE+%OVL%
zRHIPDjb(_J6K|)r>OB4J(q3zZPIoGI#q_v3E|5!uZ}G7S<w<kZz~Thuzdi+E(CVu>
z5f<}(lr`{6fb!yG5I978qXFX6sO|;EAUdyP^uf|-s)I~Ye??S1Ji(}z?^vQCG$nDR
z@W;^#D`wkd{6nQ6RlQE6Tmkm2W0;ku@`VwpYM|x3K_PV;A{lXJ(-M2zDtW4gdm1Z#
zEzB{%4T;t~_|}-zfNuk}dToM-o}rc!n}%y*NWPU@(_Q?96@8@AW=g_%fKmxKQ&}{r
zFlVITF7->TePr?na&NN$&^+W-k#YyN6T>D1r1)o1Iqc18rRm&|9su{cFu4bPUl$EJ
z6rC$M3i35)ii5pjzq(5j%-Nw)92PUi^VjfM(vnUhL^v>eoE*e6Q+EH*82HS4z6e(y
z`)i8a`$Ea>@lZu-A&h?svX(yW{MlGSEQbfIh-1(!Ny@C3x}+7%RZM>pw5&Osi^N9<
zdXJXr_)6tan)`(d)3sqv<$NRF49sZ}>+~>1SWA-C*`UX>DdnVDM`Swhw07?6W80-q
zD!PtV_e@j(`X<(&aP*&-*oTJT{<+d?ffxI~Cyq{OyKm$cin*|b%y2n)V&9g&*kd{e
zKVlC?eR*PlPB?%{d1}2MvyBymZH0*;M+C)}I&*ok!~!Wl-aAK~O0iY*=73K(ldR}|
zuRf6WQ>|U8L~}q8dAR{AKdeehVIg)koPqdClxV!1nMB}?g~5m`1u6q_Px#VVS6H2Q
z?ZS!LhWz>Vn4EABnCSNr*kyKQIYWXEP{9MqwRUqnGu!2h-x&{q&zWDLhdmYbXAI;@
zFYULyW<@gW(m<8IMK!fy`S=GB{&^fz_!um9qYsr7u2EYAoo8T+$&TbZOoA(WqqG3M
zchh&_bX)b3hS{HD1ff>6mm(6G18LyW(;v}N63*;1THcATYa<h)(v07_f+C&Sn3YT^
zZ)CMS5&>gN<;_Kw9qczoWQm47nPhm9^6`@-FYjvOh#^){VIQUZU1T3#9R;l*l0}Fv
zp`!aCut1-^z8f5|C+9nKT?b0#0^l0PC&GJ$lDiF&ZoTIXJX{xn24Fr%s2^d%j9K=a
zO@!Je-kTGKt#DcjsRez=1}e=f3~U<#uj;{$JiJ`)Z8QE7v65%+mTCJ!P8j3?oPvY~
zQ3)^~9!6^)=H|Wd3x4XF0xw;6L$lyTB%(`jf?Z(*yRihj@dGwVRlYKQ+tkCV+JJT_
zhL`1Z*&B*MzYzYRSI60(s0#gUPRLOqG^KJhu5uN3JbS@aOlxvc8_&q>^}9i6SB46w
zvY?wof8|9W27Y4oouP|z@C87q%@&#|h98=NnEZsXX(Qr+A_4L_2*f_Dnz!MLM;VNi
zPtw2Y2XbzgtOp1g4-hh5AS8Ruq5jX_mI8kO=*&F0e|UZTrKef{PjKxYkZp|rmf7|l
zTx0vs9);sYE!{Mh_znG;5&?aT`CtU@h9zUK0O3Sql~yr|lpAv8`wh2Lp+w8-I((wx
z3(fY!t;h52C^-Wc8O9%CzXRI~m&<{23*M&5UVxoCnAPUZSwuIj4YyOr%nk_Wtv7&1
zQvvuM>X>Q^!9RoAtyx5_0D>dzG!sA0kZ|RH%ALLjUI657KV`+(2ik*Y_c|N4+v3Vf
zz!?xvr2oHL6c5|nTOyVjL)jPxC{+-vS7#+Ds4oB6qu{c@)oeEGJ)_idXelKTF#J?X
z0IDZFyhtUAC_rg8$*fD2dtXsobrjn8O|p16%Sh?|6Ahs+ltF4f@keEIa7vsxBrW6t
z$F<GbG#H6A#fpf7FpgqIG6Ok6gajIrxo~I9YTe6;Kv&@!Vghh>(~vj%CsGQy0^u%)
zKegWLOF6|F9bMoR1x^FIgU@8f9zZZ+zJ7fcuHp-*7<w0-&+8A!*AE;RPI$Eleoql(
zm_1e8i3&|^h4kWIOtg=Y`z5;lqnD?ySI>w&*hkg{6HLYp#3{KwdQ3v|g%mqLpZp`c
zX0|Vo<bKdTN!gtRhizF+LqxJAP(dS+!jyRqe$$DBVY;RGhk?!r7MwNYV3?AUDu1j!
z{0@etLk(3;)0)y<Aj<c8hI(!<!nZ8}HA6`%M&uZ@1dY>;!o|zU0(XLITpIi+tS0z=
zYAvriJsQxeH+0=3zU7yr={sdHCvDf4ePWt)B;2HGjW=MbdesV{MiOqXg=Vd%Sk=*5
zuFg9Y?nw<KhW;E*X>SrXH0VJLHE|<pAWp{}yOb~!XW~v+i=UJms$~B;mJx?UgRSpg
zQU(5pr|h_y_tZ1_3akEOY58mA<8t;*@0nUN2|c^X!tc0cYNje<$9WgfJtUm&*SV%m
zYAS+xBL%S*+KwBa`teFt`+B%3BW2{zY?@J~JQGJUG253mKj4Mfm5=9-3%XJ9O9&DA
z1mAjsfCe*}T^!t%E}u(Q1_soaNq1_38OE^*k^-P}tJ(JsK8x5T0ZTFYX2rUQV@gG8
zG?<)W2hMI>S=68{hDpo_Hq|h63VmT%d$0j`s3VqA8~IhHDL!bKUo$K|ojqz8>QhNq
zr}@1pa{JM}Az0P?7%<{cC#<a`vSU#4H8imepk?u;(!6yy@9O0Q-6^ZSNC%4H;7X0L
z2}$OXyRx|coUNFphagb7R~~w)b9AU{cU0*Vr%MhjczR0#wSA0A2+icsHbFkux`Af#
z3NS;EJf1+F?Zw535o-F%mQ;D~6tZXvM)7$sSxI+TgKabxE)lZrUEayU%91j8M?6_s
zVJp3^>9WP>>Mc;!CZQYT+dfqa@+<20g(b5pZ(4{_7;5z9nvzB_e4{1R&5Abx!ez84
z9eU!RVX7GJnV0EO_VrLe1=d$)i@32%GE&y1XQeWy<=qdb+G{JQ?u@6;*Qk1waMr5i
zTFPxT)>qf(@X3Y@$;-`(oyT-sv-8#qJsoO-nNl`ByFL3UCm}ZuH)mK4K!^uBo<F7%
zNGZ41mocUGVJGhZM53$iutv^(mCcs)<O_6aTU7;3azW<Eli6;E#~QagMl#GR5!?mz
zQzs8+#+HT*2-FTsRZ!?fC7UsXGoaG^Yd7ra@QUPKG)W9S)&`};gW|<=YoK=U`3<By
z(p^B;)u2WQ{cKEOR1?iR<@d%tsZfiHp%3S9(!e_xK6P8-lL&Pxfm1i6tLQWOhxi=k
z;L#Qk>81mrBMnMT2y`}qQ^!snH}Uz@GW%1I$0h^`=)nUg6$ol@^K`T+Vuuv;xP>SS
z{`2d31wraekuE%j^V!>UkoN>{jiVC%-*fzLiX1b?-^mr$f7omOmmE2@t^dq%{}p{l
z+k|C7WX*hvc&SvtGqgiPUkz(uZ$^btG~0>=brDLp+G~G&N?cPe=Q=(bvE2vXuj?2d
zz8@!VyJzrzHBjbn>3w2cu`x5e21y<Y9ELLS)8Jg;#In|?BrVhU3S4+RrC-s_*IPh-
zRZuSs>eZYMsh+_IX*J3FO((;M2ZW%wd_PMkAZi0Tc%TgRI1<xK0fCN=hM@yJ@W5C3
zMHk5HtSZFXUEyxM>k)VLr+c`9JCeNlCi%ILg?Qno^<=r%WKuObt3(qAp04k!kULo5
zevDeY{_@BmZ~%kPN0FU}VgNK#pS1&RlvR>%s7IAuSfUNDx6R3`MiFnfz@vD0Rbv5a
zjtFl4Q4~;)(o9!Mvb$S!8Chg8n?>cEo=k082*lPQ1BKg$Xiu7idYNFZp)Q*{YE<94
z2skfOU0yOLT*`B*qYuUaDF#Ln)IPV?$rl8>FKhVv?YF5RtWwbkVVPPV%J=!evwiJz
z%S^JQ!?KJrCU(=VYk^(Dz!)Q|N#P{%tgc&K?ye!EBO7AQGIxO9_Wt-lj$@c#>~N2o
z=ut=v_~ic0QRttuh6k)YL$SGv)wnXcTwa>UhZSbO<Fc9CS5iK0zkP~dW7lUMc1xJX
z?@|>mXXmUzGtIl<y-58L-LvX06XSe5qNN}8W>RN#poS|&;$vL&I9-c3OE#gS5qf@_
z-d-e`xtg$RB6?LCjEAng-bAt&`#V--1Y@g{ioFC&Vl_MgJE@M3Qd05cywt^ZtBE~`
zK;cA}lNW}p{v&4#p2TUimlIDU3AEW}bW|AeN_3Q2a3IGr!_&^CV8JHTrlX8vU)TUW
z*7}zL913geWoSM`-I*9s*dK2Hp8~+t{t>Urk(g_=y*8E}LdOL(T!h3F#v=-)mblTZ
zhCA~ORS2{Q<*U!mCy8%7cy3aTjaFV<kCV%orC;`EAdIgyMFkznqy5>w{wKlP92O(i
zWGvQXB)d`}o^D^aM=km{$L{)O&-gXH8x>iuiAAGfY!@4TDnc8*9C^zErKClb<0|J7
z=jg#8T^zM<h8|w?0~RK`G{Ke6Z+R2<jnBXrWRzn3J~$^)i!b5uJb|5~!g>kB0|K!U
zH~z)5?yRTjs-E^xjvD##-8E6?lG$nKPi+Wec&?|v8iJxs{8@{ULc}i_u^XQ90XON3
z#iArT^mO$4s`b~d-qg|;OUG?hLd){1e?IjZV_78>Q|Wq{o-qZb!G`lkHCsz*P+LDS
zt+J`Mtet~a^RnjS!b3sJR4DwgvGOx6NE_BtZz^Mm3f)md$H3Ms7Wx^x=H<<ISkbW1
zy#y_+oAGNKwt{MCBE)iVEe(|2I`o~ll$$rtzdTiVONE+{bX0e_x;fwf-9@R(1?otu
zhuUSS-YIBVShBIo>8i&D*u=@l0rnv5x>m%8CjKtKhl{CJf`_F+1RXhAHH`ByT-*Z|
zKRJULcz#opM~sN=#du*W4WmD6A`Od(B{;oj)gvbQ<OSSrKz^D(zV`9IX>{Kt;s5pE
z{{N2A{((ow_%DHUe~0qo2-CYbVzy%oX=~Z+3|OoeR{IzhMSqPpPHCo~BuHgdeTVX-
z3Q0y>0|65aPY1p4+}%45fH8oPVP2JQJhnKy?hO05;c=N6dfjP&mvPx$P_k7TalH~!
zh$3~|{K6WIdr3dhl{#3U&rxgku0Uk}H#3nosdzhx5uAhH3McVgeFEbH?Zb@$k^`OS
zTEb1n84#^D4f8*l3AWhnG6O}vaKP#UP{0QE*9K!yU~&eTG#%IW6l;uIWZ8qlG(--B
z8P2_+Bf*;!ISz+!N!pmSmXHzOhLnI)F*HVuR)w9iWmL5yI^eL*MH7V`v$1ajRAcCI
zWlL1N4EF~u>V!qM-ebuDSV07$q=Z2V)Ua|CbP^&Kb4qkrK;#)R&@z>tSj^1f3q~=a
zx8p*a?+TX6Rt65eG8~kKNU)G@HvPq@ZF|L;)DURx*BuH}29yU0W5%(5cTUiwv~m{{
zMy}wX#v{xcjsm^})hhELX0rCdcv{hxr2v6N=YGQcr%jySxM|lRMP)H`EM|5YJp3TB
zY+0Jy(SBn|itmfIq6SqFZTVI3IGh?|FOTs8UC4?-7I28V(~JZTzO`@)<UJ-ld1{Yb
zC`F`Wp8mVRqvO^6^+1O_`ha@Pr5|oW0_PQ_xyCMi61n>U|L~1pSGy3Wb8dX|?9kKF
z)|H3H!fGQcKuNGz2+U@qw+eV&tg6V$;V(tUJ$zA5tu=emIVh8U_W_F#uAj{?YCnWX
zBl#TO(8rFCMjF-M>twG+nv?K1>|X0|<Bp<-G>-KBCht@bUqmOHlsBrfy^sjJ5FZlR
zmDr|spR7v@n6E4adnOZ5qQC#6&LAlSGXz)QH6gxZ&4is$Eh9MA05qz`h*4yEVUE2k
zZDhfD0Jp=rc(=pp&@mN3p;@wKa;8#>sUSL%X#5iq>9HoJ6XZfN%CQe3#-4k_*X1AU
z3OaH$V)D3gdn^+HS|y9-M9gF+W=y8?{&PR<2h%)Vmes-)9+w^x(XGnvy~F(L&z`X2
zjhdEF0m+FJ?Wv&1x3A$qT&*ul9F2~HURIPxq}#i@*J%m|S<*X{Dv9`u)x|Lv*91&S
zh+-pl52e!a*72H)Bz?)Gg_jtUMpdk8?fPrX2$uurt}aPDT^Q9!UDa!5r?BkkCR(uf
z>=5p09^;w@czgOJ<{GH6bHCs7>E>6i$7>zaSzXh^D=q8=@-4<!bE@EpdBQXYz?BCB
zYnXCTKjtcT1ui(zAvrd)aP5j09)Hy|@>=kp!#oP+l%}cM3q6=seEOmE(LwR@`e1T*
z(ujx>Ep~snc~ijS`n-cJX~w+9f83M2wWp2G!BXSYkemUd*3z{Gcmrwn8OXNv8mSbl
zw^-|NafwQ?al*mjT;Buq?!g?>XiFa^h*j3266^$Cm7KADTsbri9Ck=?#VTPHXqU~&
zVC-10bl$W$pk^^l>Y^m_iDaR#UL7@sJJ8i_C7M1;m|^MN0_n(^BMlPrSM(X4A5lxU
zAoh<zj>hO<*$=?B^o|cli@lS^@1LI8@6j7F{|*uW5wk790^s11nPSew0Pz9>b3=`M
z#*D%~b&@hD8?~V)ju|7Pr0`bc0;a0yMCC%w?JcvB?I=(}9cqpHH5NJuDt8;Af-J41
zuKeQ)8&n-cn~ZuMMKp=Bg-Ny0LLibRe3zhJDKlO)UPNYEK(IFHFu5+n0GRg%h&QWl
zIW}hfuD2#tbVtW1$w~FwU1j>Kra|yK#Im=I_82b^KXGBL3Gj5JI7H5(vNn}T*0&eI
zKs1z_f>P736gH4Rq5&eW89zxtdVgtxKo6NwQN22z(*}$rUqFDgFm*K&TM(P-<ooV7
z|JZWi#bLc`=z5$>*=|n=Z>!6e*L@uNriXA&t$k`OG(t(!F&BICbTZu&-jcTZ-$M5<
z6e1%F>)%3`?H`2hzoa3m{l6O))%uR73X5(w;z^|~u8^~?^cV;*)(3_d2EP<c#?@>U
zBPp8hmOq|xDRXFxH0R)>3}5n3uJ`UdM;mVXbeSBUCj88boL|{~R5@MaqIDoR&V<ZE
zBH0}X<G)Lm8fO~~WIupQjD+OgbuBH0qFsus^*>V=#t`a>RiAj)jx##$(IqlO0>gQ|
z5*$v9293t1I%4#eyO6cygWbj-X|n^&xEcq9!S5AumDBLzq;Lo9%vS-h>2|qydW;#T
z_MH!>d*og8ACYe2sZvYLjuCX+%duF!^-HGk+<n9`Vfr*6dJ=+eetN#s)nxGQ;tz;K
zdl9Sfpj3(RM!gX~8m||0i@risMQK?iX|rIgu!&ae_2%zE*ow5zHRXvGAZFlF6<HHU
z4HLWQ?_S^0H(T6Wh!ZVX%okX!B2-xsHepnYj%X!&YZ_`#S`7_rx!x;`@-kGQVp}Iy
zu!+{CEk#B*F(rp<RcYK>Y{||MSTz|LSJmsrYE`XjRLH7hdsnI1R4%DCy4C@j{pZqR
zHYfI^)lqbl5_n#0g?ZCG#%gatZ%KeMf&zjPf+B))+-k2oC4pIPny=CCh&A%R7jlzX
zX`GDCM#qDb5$VXx<Ysb{n+)*whgWjpXgpVAvD7E9-Pbb*1vs*($l!FaX?$;A$5FW+
z`rP{UUpe%EUizb#v$h~S*0D_r6I%^4X41W2njR`P31XdqN+q&dIfVWI$)@gLFSW&G
z^~^{xabX-hz<U53(Xv2eEd<L0_wJ-vqg0bL3tb9vKd^qz#ENzV>HF#So#W#DUa7IO
zOKIlt^qLnU+-sA-x6!fyyRR_YNET{_qJq4V1CR@};ScL9lX~zs&zPmLHO1>}K9Whr
zkL)0`jVTzumou|f93!n{(SH-P@k%)nT2fF4t^RJRm<sGHlNE+-Ddn+iPpq;yjvJ5G
zYqY1O$66Ay;x4wG^@V67dzWlnn>IOM3IL|vvdQpcUnj^zSyaJ1#la4XyO8p!%_(g@
zt6x4GsLT;IFO4&|lQ0+U%2}_6_-sbZQK7hh8mx5p1%2Ar`T))4OYet<Tlq*-Hq8&i
zW68h5f`tBE?~l{=f`A@ComNHOx^Ba(D_>hL;z|#*;w9B~DYHAz4F6e&c!tC~FX|Qs
zYNd_FWUJ`3X+zkeuSNyMG6bKja1VNHY8%FfKUef-G4pdzqxT&SRtZRcp|ZNEZrD~<
zFHT>vv~4@185JjZbDy!=X@U`4)3CmcAOk70sQvU(4dvO+a0-2E+|3f0*(O9K7U`aP
zS?IYnV?bt6tv3zK?vmG(0&(aw@%NC<hPw5;SPmi%0gYIxAt{FlhX3_$PUDyB2NH@;
z80d?qqoWoVlk~;1S(-cOHDm-}s4b<7NP`B8Xa3$`(L=)QF!Ifur=Y)&y<=EUVQ9;r
zIaZlJ4ZM&mrEOB{(64Jvl0fx@kTbH`^ai19W~DNj^wm$3tpL?K%u_14)BZ@=UL`ec
zht%E2+Z<m&d^G1t|1jbH*1P{_!u<m{kMZA<^ET`b*bsbI)M3yhmZ#TaM7CNscp684
zn`*mY1B=!%L22gOvLY2pxMW=(?M%dT)Dyqv(OM1M!kpYXxNs2P15Sp3lKDOPD`Bkk
zyw=+O1RsEsxy3aTGHlH&xaw@Unia+-T;Ig(31X0Wk^E@p=qLjHNJY6FP*Ma(pz%p$
z1e=Hknw}E<pB-7c8?Whp^Ka7_(XEaK+VEkFIzY3Lr*(U;3^Ra-*JE|&30cI0PdvaM
zEPKw{vwQj=P-t=nS`9x2vPpK??<2iu9Ww4XZaAUqU4`Yd&N03R6qKMtPy*<|CpUcu
zLP9%&(DKRP!>7k4M7pfmW?rJkIE56b`ss;7ym45RPKpcj#yC`v%3M-=GywkVR-sW{
znvJ2@EQ!H5iWv{!FqvznIl*(Ly=W-{S?fRc<s5s^yaQmY`WtY^+GAW9rHly75^j#L
z>guYj!YY}PEK3IH-4+wT76WVUUcKP9AQ)>R$f6Yhb0Ug*W^*Xpfol)J0l66yzO)8*
zmT*mNTZ<O;BV`LPcHLox89OYwdl%}bVLOfYkBs?El@E<Fu;nL#a5W;K?7rJ6zFCIz
zX}~*;N9QH=onNgV(Ur_~MYs#t2Ct)Te#(T_yNuHfC`R$kfU<eRLwvc^67dll_erBb
zBvE7&xHX<pRC$WtrSn{i=|5LES3+2Wig`?BjPA7d{i0}BbO@cQ+ISpdTnkqd*rX>-
zryS?I6$dX)QciMKew;wh>pwZ`t4|6MW;nYp4PdGwH@LDIHl52FOs8}8zf33@U9a()
zZ#y~!bu61DlxB!UVj7@<JXyAA{&LR@>CH`=&A$jZIi4{|HH+M>o1FK{w~bNoT)QP4
z$I74gWgV;~4CTKwfv6w(B?BiojnGJW@lH638;FG&TiQuzHDOu=0G!4jyk+jm2LdXr
zkQ1S(MZ6UCUUxn%@wBg(G*Fope{MQ7gus%}HD12=$w|CsjTf7OJ+@sbUe8UumYMZn
zNXtRI_Pqa7V_M?3Fi$y{ISF?+qL@5}(ONE^yF2$ZDT6-j4qbHY`MU#8W)!-(n{@|S
z_ICEu7w)#(=;zg*Z7jU~3JA?DjiqZinYx$UgC(l0B&;is4`%j!HE8bjXY0kAf6+GO
z$ArOh#0e8@@A3`cDMIfxK>3CGRfSX!5XGg7q0I|w$Xs5l^qox3AhV=nO_Xuwv!e^e
z^#uo%z-tp6;19T2)@LX=u51Luu-@+LQ~~i3Roq6$%6YyRxS^&{TXtorDq#RIfTdCK
z04IoFtb=&h>H=Z=S|T<(|8qz9YMU<(ZlpD0o#i_R7s?7z^M@2<GaO)JxNe0NB6k>q
zmdNG2AEb-R=JzF7Dd|QyK$@3gY_+ElHk;n{r5ND$%Ch_?4}Z&tvw5=Lpo()%QzO=y
zSSzU{ZRtC=FA)lPd{KzMs&&b9^qP0wZzrz8z5|MotVveHsOKBfhH6RT2F*wQ{ng7}
z5m}Eng#a~9JoX$%cnrMSTRMgR4`uHdUD>v^Z6~SNso1txtcq<^Y}>YzifvSEqhi}O
zE4HmS56<4_drtk>Uz@9~KH6G;=e$Rsee`}`BfIm$(CFhDOEBNbA^e2a?@ov!iLNBV
z(UxqVyBlgMH3a*>vbPm+(48g>mvksWK1Y+%1-9<cpfINP2q7Dg(hOA%rv`#pG2t;C
zXJL5&p&TUpm-ubPyjVV8w!Me6{!=vnrquzM{_eH?1FnwoAM)yyR;_3G5WOB$BKZ74
zS<c;UHo(F_zy1azTmiq*hr%>TPa%u4;A)4wx;S0oYMcc}CD9kg8z0N!_{PMg!q)>C
z>ha383OZ=QNOQ796^i1Qq6m`CXL^3-WWq$7d8W|T4Ba7sg!riYA?eZ*1okn)dTDK)
zgIdh+NykpnS?a@tYKTbO+8Tiw?oAOG`@|IcK9Qwlq<{5QOGp+1A{7E&(;nS<uB0oo
zLNf-+o-Ob*<@`XBL$wzsO7VduQ$hlfy&=-LKm*TWb}1<7osU1d;S14ZB4eb+GNK&|
zlC?+T3`;Oev<^nZ4*In3M%>zAiqgeL+Jb{}n|9>_e<9qYYn(R%G;i#O8y<gw_I8*2
z()2}cKU^hqlnPpoZJw@9TjPs13TZHr4r%WBk}yD=Oc;th#%h!+IbEvu(`Q$aodei^
zo(TM0CDm93l_4B4LZgV*A{u?~bUf6z8u*|zy`GWP^L}r(=-0)!j=?6JDUl-m$35C0
zn!BGtxU@w<&Ex4_w5EaTau4!a0)V^X1h|GFYTq3LipI#h{N)iEPx!$RlvX}bt)E)x
z)-w=^FLZJ|N=Mi3AQ1%Yf>)ThU6>Z#^f!0z_!)MfCcpW^&s^P!@4ckT3Z%u!b|JG8
z;lZ>K;0%v-zbuD3iT>m{%4;K^h-Jq|I>5auFk8#vIc_VO=$9j0O-G{hxW$;RIn(4a
z@YI-88DQp1bn488D7tUPQXVz7*{N?NX!7Jd`8dNXJnB5hd$xUm{2jEW!%Ae%Qqj5D
zdEuX%>;I%Dh8{j*LD}?xdf3H?cHQNQ^3qHAJD`_PsgqEX(jz>1{=RS(Nw}400OOe;
zm?XfVPeo+OL!3u`ICwa&O;OKEs+m4uetndH)cYEV+09uExo^NM?)XYJImB!*$~jHz
z?0SSG-h}quJzeWwg*eJmKxN^01`ETE`p`JB>a2SKfl0~}uCb*E-vxVq+F`Lr>suX0
zE>0J+Mtc4G7l>){bpv{hUn=b9Ehqh_w&jQrmve_P-uX>fENF=;UMi^0-x-<NvDj0g
z*;0CfDcjy9JOq)MZGp{%7DCIB)QD?E3?qlIV()Zll4iHqv?=iG{_uqUE3IK?`un}@
z4^%tGe~7i4wUV8cLxH$_ctat-3c{W~zyGG=MJfP0Ow<z`%wQnl@j#$4xB|~GaB+UN
zzzeINfNqS*v*s~brRDxk{RxvSf2v=!M7ooKlP)zyB~6Nr&6p-qkZHX0)PN~UZ{e6p
znmvR;Mao0i<}zzxqiIOC<bUbq)2OY{%W%Mo>g`^nab8g+Eop9_0kCF7RM*Uh1&0?i
zT`md{QP`vqO{9>vv`)8=-mzzW^^zdZiaWpb=(D1sl{8(7=3HYG`L0!2m)67oyzGV9
ztjbBqe2+|&hRPCoaFp+keV;CjhqgFwer{7uR;~P0uAQWsq~~@3@3ClPnxh^4Tx60^
zusk>GsXTvXcDL)eePJ&4JiK9Ew=DNm-jX}NQsw0_$2=J)JsWpjFY`(K>J+HCg(=8G
zZ^oa5mVMd0p9DV;I;DGE0|NIsl}!82tYfV5t!NZqi55Mpa@1(Q%p4{V{T|5Edy$tD
z5@-{w&`daa16}EvxyY_r(=w~UO4fM=Axb9XAV=%G5q;wTb$(QL%8H}xgdpg{8B)fI
zP)-a5I!HuMP8Fq+wx_;P*dGKCGDheyg!4ZEq}G>)0A}dl0-@y4*V;gue}&P=Htgu`
zxtFvin9-2lLlRGA1P*QPu!llrSn*Be5BkHND<3c(p(`7Hl?Q$Vh_Y2)AuYn=ya{cl
zs=V{!*~YOjqw@!CdE^pXs1T8LR^c#SM;4~z>}9fZhvLh)gxnZY9kl3d$D0QbU}aao
zk+s2tx2wT!yAOuf(=+&u;+}HTv9N*v{o)S(T&+nMC^H+vE%UL)z!`q|w?JzMvn<dU
z^KXIQIR@7dV)?HyDK;T~i){*$Wb>a7#9z29Rt|=L@l_fBfXib1hrFy=Nt;<d6tJy!
zpZ-MEDLUKzHv;OPNCKtmX{uqWIjl9vf~U+i$PEPVTuj3_Y0yxr1k@w32NNcv-!>3O
zIci+<Kh)yk29nUU8i$(<3=?(d3|Gn$R0e6<e{e+QH;om}8Aoh{Y!aP+t4??~hHIw<
zIUCwbf+8#~?%ASF@-WC$Mxn2Y9H}6n);f<U%pIN}+vACa9kD1BXV?$LyEm2_U-3?)
z|M6{uPU81Lf3j4QCdWWY)7S)wL4@|$XsNYi%R6^RQ%B3IP#<2;(@k>fWMcA+ZbEj1
z%%E%@cf^3xRYY3UkEj!(iqZHxm!0W!eU!!iZ3R0md1$O|0#(qEEk(#lTCgYrL=q4~
z_*B9D7!E^tH9oW$Fhk&f3#5inY63|y{}%X_V^9sj)cy((PxVakMr!vYJCfL_%hK$u
zvUk>54ev25y%4riA5|YS;hlG#CpIs<^Eyn&&u7*PiW&JAor&5va=%;7%(Tx#YNnVm
zri7cTOh_AA_bb=%vg6V8%+MiDoOz@i@K^3|4C<}(knRiM0Ar4$ca25wR~<NbtSE%j
zExD!IdQxv#7Aj6JP8frgajNp%^YWeF)^qI0wcco3>;_4My0+nu&THsfnQaaS8HC%s
zBNwaWX#(^yQAU5Ng7*U`lK5+2!;A>9hrnxtED1G+(EcrO4Z+t2oD%$72stJ67{aUl
zD|~D-wGMlOgiy;Y{^5T8mw>Zy{B3dl2Tl&-KLq6@{`U!U*XErHPIU-}w1p(e9SiS#
z4Ht%FCNpcJ-p%I;Gj3T8iD+)C5&y>nu5ea9bN50>znJIt`kP}L{dxe`ZPz^hOZ#}{
zv^3<e28RpRSeP7Ly4@&z7;5~8u^qnAmA){K19S=;bnm`Rjk9&#Zf`4xlybyRP!6ot
z07kj9>Ei(Iz$YjN<aXzc4^|MIFgjR%tCz|JT+$76OYEup&ac@T^m6e)w|*4fz6qj9
z#+uaCq)Zk*JebIyM^%gS%Xu^1Tq&m&s;Q(a_shnQ5Tbo<f-eX_hIS*{NE_0;pGSDK
zCbOSzYMQjhk+wXYtUaD~EScTtatNXvB5}?phgqo5RL$7Erum&lq~R5TR&G=Y4Zlqr
z*2z&z<C&Ln)Lr<)c*~^jP`^=G?hc+(Y$v`;j{H<K7EaA&<%**dS{D~pI(K$N>qh@-
zzyOle3ylXA0V?B9&`nNAKuAJJ<Tn)Yhbv>~KQI5G|9j;UK6uzQCo2FyT)H;ef7?3f
zNKbnmW?-qkn9;;M`oN~ftNXwyd)^Elad9frLA9AF?_dh}&O0ZuUrk-cE#GURxbLxI
zpis(F+#blKhI$Po9@|rrgo;yk-6(Ob{t*JM2IrB1ti-%y1vpmZ_uQz4-@Avu2y83@
zSyuocXD-aHJUa?aiQvclsFL1yx0S1ili<&d0Ar}lnRzDkOdiov7E7Ty=p64F<d}XR
z=$Lp<T8NRj7*v0&Oit8>93V0MrH}_G7A?Cm^=0vZy$u*6#oJQl9d=Fn6c7lwJnd{X
zNMbQPlpVBM_C4$fa7MG-ugKr6+FeiP%M;PtBL)g75zmaFOsV{TjxYT_b9ArkJ4Bm(
z8b8%{I&T1WHf!L#O!+QcVg4?K?qXeG&%=<2$%0Aka^ly~`y7#l+EOw5@~g8WU1y>t
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

diff --git a/xv6.ps b/xv6.ps
index 4a90f7b..8a4868e 100644
--- a/xv6.ps
+++ b/xv6.ps
@@ -1,4 +1,7 @@
 %!PS-Adobe-3.0
+% Produced by xpdf/pdftops 3.02
+%%Creator: mpage 2.5.6 Januari 2008
+%%Title: <stdin> (mpage)
 %%LanguageLevel: 2
 %%DocumentSuppliedResources: (atend)
 %%DocumentMedia: plain 612 792 0 () ()
@@ -9,8 +12,8 @@
 %%PageMedia: plain
 %%EndDefaults
 %%BeginProlog
-%%BeginResource: procset xpdf 3.00 0
-%%Copyright: Copyright 1996-2004 Glyph & Cog, LLC
+%%BeginResource: procset xpdf 3.02 0
+%%Copyright: Copyright 1996-2007 Glyph & Cog, LLC
 /xpdf 75 dict def xpdf begin
 % PDF special state
 /pdfDictSize 15 def
@@ -542,330 +545,330 @@ C2A9054AD59AE4D5522D8745045620C9C40EAB675A6FE53511D83C04968F37DE
 90435DC2AFD452D1184CEA4CBF9F81F8CD7BE3B6EBA8395A40925FDDEB186DE2
 AB0372CF67C17BEE733C73CA29E00C3909E960A0417FCACC7211EBF3DD7225F0
 6F4FB7DBA35BF59A21014E1066BF090958F991C2BFD22CCA4189376B0BBFE928
-8CE7E8D06A551258E5938EB0F85097E557F3C3BA2C163A2E572B4DF44E90CDF5
-0B39625CC6ACE15BC6517F8A12C1B93F074CC50585B9AB7EDD0B9C5C1A62B70D
-CD8DB8D38BE368A472453A6857C6BD02D53075513414D13BA1A24CE212F22191
-07B898A9017A3A99BDADF041BED9A114BD03BB18F7DE5A50740B185E422B8C48
-309D6D5FE5EA50CC3F908AFA26EE4DEC39EBC3D70FF3BB8B3A3A944A0DCC6146
-32AE70E4FAF468F45769385AA9CE3AEDE458C88F9FE607FF162B8F190654854A
-F7C4EF574ABFF28A9A3305771590FCC4ABD946870EB84C1936CA19FD940EE6AE
-640BC281178A404CC709C437E17C61CABA72E94D3B9BE9F187B807D43F883E55
-1AC39D4BE693E7341918F23D76809DFD06A103726057B354B409C08830817659
-428E7F09A6016535CA1C526AAE92B7D90B7AD619269EB3A6DEEE48BF53C6C228
-C705837B10C2402ED51A306E771911A1016D089DF42372D756E2346265E01962
-B0E784394FEA778F473FE994F2CB393B6C04DB967C8F585947A3F30329F66169
-59627B9268FDEF0DEDD35B31B7D0345E708C959739676FB4CE239AB72D834D51
-E679B4152852C1BA90E23BE472742369FAF00ED1E82BB6ECD8A09CF36B2E57D0
-AEAAB95A829A7E793F38C4D0E6A1355BB9C6AE4F0ADF76BBAE901546ECB36D1E
-7C5650A7999BAAFD6181C1CFECFEA39A2D51C26CA3CC2BAB6EBEB0D31D3532DD
-6A6A565A56A6A01E04ED68112910A0D608024AEEEC0D0F389B5441D0E126935E
-2063B9150A40657F1C88FC5F4BE2C06AE21167DA0F59E651CEDA2CB33349FBF4
-6F5642DE2B5DDFDCF0C0A172D0D1407FDC7C65FF3814709188F506A53C404A19
-02FE1637895E943792E22E22E5D4BCBD766D18D1088F2A11459139D370D4ADBB
-8BC75909D8A85C8E2E85948DEFB74401BF22A6DA4C14C09F1C8F0DF829F1970B
-AE6B468573DC729139A2971EB56517AA6D6525E46B5F9930108C7D4B951EB0C4
-707E410574E7195FA7297A29E6D8B5ABD78A15CD0135F3BD612AD12BB0D154CD
-86556BACB23743FFE1774040A1C435CF8E4409E75CEE0F028FD12BE41556CC6E
-6C850B9053E699C71557FD6B20D83F0BBF57D935CFEDA809B03FD14478C2A8C7
-6609217B9F289342990C415257D8CA8A5174589B50AC913FCE33A9F32CF42140
-F323ED26DD43970B21107F814F9F2CA21C6A88474BDF5EF924956086CB6BC729
-3FBDB874B7A414B14B6BAEACAE671F7944DCC75422E1630F78732131F85ED6BB
-3662518EB04A41F4938B1383CFBEDDEED4096C7615CF8D72101D311FCC95D874
-2C40F7FA4FB122EA1B1B0746E9D808AC671A21F04F7E76A6778E25FC3844078A
-A2A7B87206B299A27BAE8A89530B3D46579AAFCD5B03EAE3429E4B4BAC79F41E
-B68DFBF1ED48C121B7D38C7A51911898175E566ED5D1AF2DBF57EB473BFC8FEA
-44362C8E0CD77857D2FAFFEED06A98AE69E0A74B6B876069A460314E5B1847F8
-EE66F4931FA02F5E38D6857E8D0DD3550CB0B130B75EA89B02971280911B47D1
-A1E387581CF5565A4469BCCED698F1116AB57A4CAE6640E23021B10B62923A87
-1E145BDE3052FCB97EA36112168DA1B986E5A524CD3879E3B59550E8311A074E
-CF7A58F377F7CE22CB1270BA8E009C483D43E9B728D5AD5A124A0D6635F6E9CC
-53D52844E932EAC0CE58FF9A8B1A897C8DE57FC82F9C504FA222FA6BD83C7903
-8F09D475F15F5AAE7C8EE65F17E580D1A1D2979894C0EA1AAA00FAB3B9CBF68A
-67331607E61EADB2D9A24001B7B7E6ECADFC5BA3C8CB741413BA4D7C51A40447
-DBEAB6D524D72ADE296EB5E47F416CA680181035E41D14EC6532874F1DA7EAD3
-0B3A37E788CF39AF0CE722F67B2FADA9B926EBB32BA5F54651030871E19463EE
-3E82753DCB3915636A6851C48B94B7A77943A04BA972A534AF5D6B9CC41330CD
-6723F82581091C8121465769FA47055733456232B6DE1765EEF06223687656D5
-2170B0F8CE41590BB57C4F7B136A7BCA8A5BDAA982C420FB5749320521C180B7
-B8748A630DBD48884C55FCD2E7851E6BA6B81CFE27C7EBCB6D06CCC2E1BEB01D
-5D8AA1287BBB1EEF9E55852223A01E2E9A0757FFBF05DCDD6C045C5B322CD9C2
-51BDBE086B791721C47351C3D27057013C8600D9C229615DC859D530ED795B0C
-27AE86B4E6E7BE747201229D85A77EFD944DD59444C49684CCBF506661144236
-B8E38E0C1068600992ED230AF22B0CC5CA4D8BA1E3FF31F03CFC2BA540721674
-C3BD926730FBF88FCFD59474EA95D4774D133379355068CBFB5AA84306E52242
-467BF66E174CDEAB2CADB5D1B68F8253FDEBB6220A60668B1BCFA2C99B6B0F55
-2582D2ED3D88F3E47D51179A8E78B182E7AFD1E9D659DF8AC57747D2E74F5B39
-466B53A290657A325B6D6E952C5164AF7AE027914864D086BC0114F33B9D9E56
-A2B8A54A0464254F71AA9D975A20CB0AD1A6DCA4290378DDFD9A7118C6AE9ED7
-E050E9131C103B88CB27BE540AD84B655BCE04BE98C8B362703EC149B747CF6C
-45CE28C3690755EF00A86EA467E5D57954BD85CA993A736EFE0B18AFE53A2B2F
-8C7F0318388DFF640FE7D43A5803DBEB8AD80C59AE33EE163B4DBBD47C9EE083
-77B76A5E4ABA6DA587687C10984D8B34F6546E8D64468D228B4C2B16BB6370D6
-7D3F92714082450543341D53016172B4117C55FF506341215DD7726A6F8A217A
-E44F09BA273FEF22924706B0F50083C6E27B7AB6F5CE3C3EF4AFA9AE9DF17DDC
-53482B05A15A136AEDF71343061C0ECAA8C935E446A5F3CF3211C29CCE5C102C
-CEFAF415A5B6C411B3B7B01EC97954F0616F3C1AC4740A03C387E6214FCF78B4
-DD78208D75482CF9DB59A4B319A256935BE68E2E8351FEC06ED34F0CC6307571
-60992C344A45D7B208C9AE1F2880A7AB0366719B029D863A9B6015E29957A5D8
-3FC0A9548E25DBEBF728511CB3F4064CCDA0EAB5F7207C9816325A9932C5DC18
-7B1878F89994366AB65B02C9272B75E542E6A1AF85B677A74F674B4F1F6DB606
-FCF0D54594569ADBB8D98554461DEEA310182F8A42CCAAD24BA155CA17262F42
-A23CF3266C925A3B28C632419864E912F5D846F26B2BA8E41680E3E759C47AE6
-1F05DA9F88DD697109DE7F47AD90981E285C065CB239BBEAD6E351C936D778D5
-ED2F551008D997E8614BAFFA9292F5EC1737BFDDAA3AE5F76949A7CC7A5C9885
-9ED1B1FE17E56886B438B5D03198AEEA1483E261602E0ED3DE3476E2A74336B7
-4BD5F912224950284A62A476292E310C3623C3FC55642B1226078D8C98B8E258
-09BA085A3CBBDE128B69932DDD12C12BEFC96F698FB73C120C7E6C49196C063D
-AC8A0D23B3CC73770A99EF977EF93544099172992239AB7B6BF47E7EF8E0AA92
-1504B4FCC0C8447257BF63808C56467228A651714BB73C36D87F135A2365F9A4
-FDD65073CB982B77A2C8E583327B16681CDB8178502BF35600D063996718888A
-F3489512F4E33DC64E324FFCAD4396AB424A2FD8231D885379B0692386776FFE
-AC1242C735E7EE5CA55E3162044A430BBB5F1D5D23E8F09C883B38C653F81D3B
-48922522123301079AF07E412B0D8B1B388FEC2956DBFC267711619D1B58DFAC
-0D769E5551BE1D806EE8D98483F5F2B390D9B3835602EB2822C3E373016231B7
-C98C540796CFA5029769A9990A4AEE3EAF11C642E57DB4F8094AE067A8743538
-5D75E78C3DF3609A799195FABE087539BF9016802C8D9822E0DC3F054711DE70
-3422E701C6CB98FC04550D5F22C8729650313F56BF47919DE140861C50E71133
-937669C56BD769CF23003964C7364F6E2F18E3BD5E14191DD018785C13A3F687
-8CE0AC2577B5E66823F19F4F67799953E8C90E0B2A57C80C0EDA7F7BAD896039
-F8278D20AE307B9E6998FB1A20D8B35CC49BE10CDD1D8BCF23DB47DD4ABF0580
-34E7334431E4CF87DE972E4A007FDE2BFEE70D66CBC85D0D9574264659EFB7F8
-E02B5E5C655DCE6FFD54EDD844FDEFC4B39D072C188CB5A8F43CD6B2467BC9BE
-B44320B057A90B6A82EDCED67932DA29670662F1FE94E6D2EE1A562D19AD02B9
-D8E23529EAD2627260E56CAD7951B2C982E9CCBA68F9C8B95821E470ACB9C55B
-0A6C23D6E50A02F9E1D7B8C51CB20792638D0C24EEEF6F4BF271608B24A8AC96
-A7D536F1D40B0B85916E2B5325A1FC7000229C8E87ED5BF56D611BBD40A42C94
-4BE0B0CE264D65D2A47BB72E2B242F95157DC15A888CE0C15A8D12DC3EDCE489
-53059B5D2A04FFCC2D234CFF8A16D50E7EF7C95C808ADB52B3656392CFAA2892
-CEA1ADD997F67AF3526815CF1445F57856DEC918A3EF50D9634BDD22C007F0DB
-FEBA17DFDEFD9B60477142D7ABA06FBC976270EBD2FA9CDDA30C9994BC285FB8
-1B38EC16B08B7ABAF390FDDA2561B779A03D576A8C289784442A2A8E15BDB1B2
-2F26F1E0D9BD6DFF68E352D572978437DD65B882CB2720B27A782EE902A65B32
-C7DF2CCEC2C3D1AE1B62BB1E506C7C4CD6F09EBFE5FA1E3A42F9D2D40CC0EF66
-88D3C3BA56BD4E830FB4B096A342C82C97A13DA50908338989413607F7BD2E67
-52E219C6C3954C4737BC9026DBA18FEF07A79E1CDA6820465EDB5DF4366EE92B
-867E158B761270C04E3923B3DE5FCDD9D87832FF9482868A7A7EF14F4E626C5D
-A94903E4D8FCACBA2A8D65789D5425F3D3C77573DC2EDD7F98C9740B702A80CC
-F5408142674DD50707FAA48BFD1EF1DA182634E497B0D02ADA4031ECA6013E86
-1D56FEA51AD28D2A6CD5D39E7D89D1609DF2A5AC3DA3CD28E99E2CE638042213
-2E150804BF8190FE02A6695209C54185EE91F5FDD2DF9C71F6C8DDBA6D0A0EA6
-C8CAFA0CAEAF4385B08287FF18B02F1EC6507991832DE49B691B205D937D79F1
-6D1DC6C6261AFDED7539322A9F0D9A8C6DF31EF96E3D9A712ECB757E30AE7F15
-39F6747AC5CA8F284238E72F143EAF13413DB8FBFC3D41445B66BF6C4741CA91
-E37D58DCA65095B473EB7C726B0DCDB8E17D245BB551EE26B2DFD03F7CFA606B
-C14AE7CA384F7846DAE2FF9DA4C16C355BD03C40C89B162B21A4FFC8ECEE0992
-A7B283B43FE8F745161D079566B92500B33C4E13792666EFB12247F9F42DE42D
-C587786E1C20D501968A6DDFBF4CC6A9D1A589EDEDA93C54E82D355383963B42
-CD996AA920BC5956CFFD2DB72EA6BCD845A04CD09A31A9FFE1F35A68C47A157B
-6C12E69C4AE9AE4F5E68E6922A714A78210DC84570CAE10C507562D952DC5F78
-1A47C7ED427E8A66441F48E66DEA872F63FF179922A3AA0DD210932CE9D35A71
-955DC4C50A441A813F27958519DE45E46D4D3AAC80AD068E934C4CECEDC2AB39
-5B587CC0B2B80816173569E9EF949F0121DC6A34E8D221CD6A6B97355A226B45
-98416C68AC75C066DE8A8C1DB4D333F63F0C04CA10D17334BAE0A17E1668FA3B
-436F49D2DC0B432DBB8431CB2901894B2824D8FEBA7D2F9B451A1ED8F6C9336F
-3C09AEBD5868D4967E2BBB76E547A545F8D84956BB6CB1EA251E70147A44525D
-461BCDAD0EFCD4AE86B75D941517E5E0BD47AD461620C8468A45B50D42FD338B
-9383611A437DA474AACCEE3258F88508290E656F32D04A25509C4067982027C1
-1E1AEDE2DAFB02594436027791D0353FAEDB4E999C53A433E2659F339C4E8350
-3374648805CD7684E83BD6F870F50CD8C5C9460A85E271746B3928F7960C2A33
-45B45DABA86F0467201818F2747C2F2C1B1261DAC00A56CDB4C6607734C4BCDD
-75C51AACF65AE8681C20E74796ECB1275952CF50C0E2E44DF9B6CA7E617F4B16
-9D3796FCC53FD6AA4715E25904CDD9D99D39F3ACA8E0EE2CB32DBCD45E8DB835
-100F7AF3C6355E9D1794A16C53414073403A65500F157F8A2CAF72D76200B903
-A50F371BFBB8EBDCE0C3ACA4185BB2CBB90F0A2ECB48ADEDCB365FCC670B15DF
-2211A605908A650FF1ECF8327D0C02C44EEFA0CA2119ECC94D8AEB9F7A3DDBC0
-FFD77AB26C91753A83C9C6A199CD1522631FEFBEC1B7CD1879C234919E5065D1
-6EADEA7F2DF4EE627412145049488E1439840804248BACA669B34EBFB9A37C39
-8483F48CCF0D45874DB079767167FC78F690904527722737493E5A457B739D23
-8B667D7D6C62F74DE846CFD1D493428F93D0D77FD4F31B8E869FEDDF44812F7F
-7B2A8ABB8D6D009DE8673E9D6289B642520080E1ECD3212D74C9AEEFDAD6F03B
-3AD829DDA8B769F5516989E741861FF3D74909A734FA2AC954D761E0A49E4E54
-D2EAEF07200CBA1C4DBE1F07321D61D3895B3049BADC895B28E2E676F5714C6C
-4C1E3F18DB8C335E20E1C110F792338FCDFBBB31E66C71DBD8EE6AFE6A040AFE
-A36193635100707ABCE2396A5AF4AE02651F9E392F61CAC64F82E7BBF9AA0D41
-590B4D80CBCF01CB1C0D41AFB880B8F2A643BC14D4FF06395EB7DC8E2296BBB3
-D31DE0F896E4C76289808EB079D78234728A58B92706029590297F2FC8D8ACFC
-E2DB33BC6F51F7557CF8E90379A2CBB9F4C52E9E440E16B998C05E8B8A04E21C
-F92A2D7BA5279F8E439D52348E1BD36155FEBDDF2A0589D38E71CF550543873F
-DB3BD7E1C9EEB005E3555D1A8F4E160D40EF5AA2CDDF80E166AA987F5A7FA5CC
-73B806A3466D65A0E94CC58D23D1E5DFFDACF8EE27BCFF552B8AADAB5CB845A0
-4D2C22EC0C2D19F51156631FB0D030852DCB7F9E18BD6289677CCD792EAAE163
-79735AF1C25B78EDC53792BE2C2A9C77C59C9C0B255A59A204AA5EE07BD78B5A
-5C323322B23C6CC2C552EAA869F3EB4EA925953E7F296BB0D66C6ADDE6364B67
-9D52C3B2587DCE7173220D2CB724F4327E28CDE23C49069937E378480DF331F3
-7297CDEED6934BC0722B686E00741D6DD42C8625F7AEF1E32ECC9092F30B1686
-C3830F242FEB01E5D5B755826FFDE99AA0E64357C8CB46A496319698DE316CA7
-EAD6B7CE11ED36A842B277FE5084BE46ED6D00F5C85E2D35E37286A46F160684
-001428657F3218DC8787DE1057B453E3982F116F67945D95CF79E1306C85B1F2
-31C70F21F396BB88A3B05FDAD770B9E805C5C487418BEED6807577FDC12EA1C9
-05B318F199D1C5E7179870599468BFD878920A465686259E09A1E3FB37EBB3F8
-864F9EA6A798A95B97C564D49E74D62B9E7F44562AE0B1326FE6622E87683704
-7340422EEAC561024936949561885388C54D9B7E2F923CD3A293558F26DA3F55
-CF41450CE22E16C1DC1959D640448E9D9259090D4F96CC138AFB8F090782F383
-4D4280A45EDAEDBC77E1012D22976B790F1C2FB9D12A49D30A67025DD0D14200
-D662983D56E91429542BD121A844A47AE91BA21F797DABC1AB56825CEFA4EA47
-00ECC341886D69103F1C4D8799A9DFFDE99FD4FFF8F99D5B6ED3CBAFAEB2066B
-460E23885E34DE13B81B4C41B714AA2FC0BE165947C05B14C0E0B3139AF95380
-5A9CC7AFA523DE5635871D9D54557F13737AF20D5255819D47781E82F65E6AEE
-68839872B2E47951631A799A99731F8F274F1F2ADE086F4E1AC74BA387D7DEBB
-22415882BA7918008CC13877D1D1B4B25BC78A8B176D6E23B0C0CBF431361AF5
-1D4F56CBFFBCF4C7EE0DCB8362D9020F2A6A235D664938E2C8DBD19FAB7DE364
-AC43A835F59DFE26771E94F4659C0509D7B3EA4516544F348A70E4B7B397FD8B
-9EEA50A08C89E565C498F9A4943F71812DB77267C54AA8C10B675965AEE05F12
-5B695F7AA5881027F90D331DA8FCAD97EF697A6C31268BC16FF89CF6DD673F15
-FC1310CA106A37E48D75762611D0AE67496FD1FCB7C6172946A12A2F8B1AA55C
-250C84EE34937F21CC86922AF593B6BDFD56E729B89011F2955EB91644D81E6C
-96AE28F4EE38FE0E0A4B0AAFD38E87710E7F41FECB53B01A9A7100A701449A72
-AA865D3DE7BA1A73FC51FF314C5F5C66A1CA2F6DA71E013191D3299EB9BAEDD1
-A8FC1AAC9073E9C4688E79A433B455A2172398384B616578F730A7052AFF9682
-0BB5054358E6B86B59EE70F3F9C554598B761568A0A06B35035E25120DEB6CB2
-5510E48C460D6D16F535AAD19B5B0BFB1F0D2BE5A8B3DD363D6A62119A1492B1
-586C78570904F5D65490EB8B3DEB6D8EB0FCCBC6F64210107F713F4D8B34C169
-FB1D5BACFAE963A16D377A0CD1D92C3B9B2CD465AFAB34C6D3F76CAF715533AF
-45CB193201C3E13F37B13C1CAF9ED0D03F9D28A933D67ED22AFFA09D665A20A9
-6973D0E58F372C8E482AB45A87FEC96161C1555C87EA868E68C033EDF1113192
-081630EEEEFE87DDFCE00EF4C82EB623CA3E59675E178F741837B9A1129EFE02
-41BE0F26EABF3F36D6B74B470D64AB075A96F6771975767BBE4F106DD54219A3
-1998C6A9F83A50C429CD10A61F045EDE780CB8612E9B8C0C1F38B72EA72C6C4A
-085F168B91CB48E3774AAFCCC3FDF06EC61CF177D143CA5B0DAA83243F62B5A5
-EC7E2566C23548593BA6713281F6268754FBFC91E3439B3849138BB49C0250F2
-B30E9B84A473AF0AFC95B25771FB26A643EC68A382FC9EC7A0177FFAC3F14957
-39A81E48D79C93283561A6627CD0B4E2CF45C083E715C5F52FD634CC68BDC701
-174436C2BE178ED7868E2ACC190EAD2406BF320181FE634092B29056ECE846AF
-F336A067A7B451CB8A55B3B926B6CA7757E1CC945CF4A9EB8C136D5B3387FB08
-384521854B48B8FEFB033815F1DD7B7A598E944929EAD7764F1B1DB3AD44D8A8
-48038369F3B389C6144D25CF5FB0AF7F02DE65AC63636CA934B6E8483B8E68FD
-6B9342641BB38BD805A3ACEEA44C5DACC0A897D442D69D29EDFCC5C2CAD38A56
-213EEC8AD86B4B11090004A934D4E20E1AAB9B7BC8BE606973521A40D7851C1A
-1140D0686C707B65E3119EBC55E38F64BC747C55CED35B56E3A00080AAD828AB
-9210A55A338598291A97F9D79670E059AEBEA965875ED976E91335E2A8DEF713
-95EF33DBCA3056B2769201833AEADA1432628366A890222C37D95375DFEDCDD3
-B08B9AF49D44CD70BD34D860998C42A09B59B871866C04BCA813ED8C5ED37A57
-665390ADD192FEA179E6E521015FE24BFAE1CA89F35ED0B53B4DAAF495D9416C
-FEAFA696991DE7FC317756F0D10B701149AD55B83C9AAB8487E76804B5971E79
-034ECC1BBF32D4AF9DECEA1A54E466CFDE1DC58CA90812E980FF86F9FB7BD1E4
-B8F7C3EDBAF7C31FB6E460485A478136B8C609B676700EF13F6853EDD1769DAA
-485CACE85CBA98FB2AEB34A8B649B37C26A3450D79F1A4BBE346F9DC6E5A9EAE
-7FFD045428526DFF8D7BC5038288AF6AB80EC30EEA5C667F7089EA341981E030
-521FAA7605F39029A8B07A0795E203689BF8401D88E0B378DF54E62F91666563
-1975E1603CF51FDC3DED1325FBACB587B818CFDE077F47BCEA90EA96CA54E077
-A589A30D8E26A29683B978E7B7805C0A611578951FA17EBA1FAEDE4532FDB4F2
-8CBB70249E07C261E9C805A16C32D7B97273D44D7093AA7223F4AF8FF327CC05
-8B5D7352680BFDF70BC067B29749FD58595C4D855108B8AC91C39A46B94CCBF9
-BF5D421A6BBD1D2FCC90181DE02C3D9676E5761B244F36CD35154F5931BF4507
-018903F6D7AF6A82FACF9A00A9C59DF208CC717683B7D14B65F1BF37A652AAFD
-BDB1005ECAF203DDD78F5BA80C0C356521F085DE00CC9168EE261F76CBA3E2AD
-6F83DAC1827844C18784730E874B98D26A39AB76B4DE23BE7B30A88287ECABE2
-A054A8B240821FB70935C5A1626387F5FB7AD1280F99A09D0819A43E314E6CA1
-C541549D1EBEC7DE52AB56270B2EE2BB2797A2F042DFDB4EB3F7B307C4593480
-C107F5ADF09A7522C5F3F0B2C839E2BDD2991F61F563EA9CFCF449BE280DD6DE
-55CB2D6313A7328B8653D8D4A9A105278BC36C452D8DA31A9B834D6A65EEE6C8
-F4168DBF9C3E147A84EE59732AD16AB366381F0B00441999EE78AEDFDA0536E7
-C9A3B4BA7618441904F5DE8958BDA2E2ED9EF15270E3BDE83EED920BA2284CD5
-D5DFFF6820916C7345CE48E9EFDD6D268B4C1EDB957A0DB904EBFC13690A3B25
-2A5D46FC0878E2E58FD82D9ED0AA1406684CE709B24BD19AA0D4F0EE12BCC63D
-978A3F55E6DC9C578EAEDB9C0F4F29507472E2DAB275E7E02978DD8B9426810D
-297060B76959F88CF7725DAFE51CF079DE00B057398B0519BDDBE4EDA857BAA6
-42D18A19EC754F332592B2F6553B0B2BB6E03AB0F35D923430E46B09EF345931
-9C56818E650C6BC6CCC18A6F7BE90659EC2169A6C626D4397348268E8206B864
-19415C7FBA73C0F417A7A80F15584548C1E9241C45BCA2B10840123A3A223D40
-2A5471845853D355900420D36C6D7AD494BF4EB21E98970C835041A9667C4CC3
-FCC136FBFF820FFB5F598D5205CA910B6B30582D7621415CA0797C86D2ADB4B1
-9ADC12710EA65979C5735D2D933D1D8AE021D67F0712E0B4EB85A5026F03B7FF
-8ECCBAEED4F82C4D9F7CC47FC560BC70BE3CD8FE9E338DF601111A5E1E3C5189
-0EEBD61164E7190DB788E267A25E6070885E36FB7873747E82B5E7109C07DB09
-B65CD0B5549CAC0FD173F67061A8461700967DF9AB3A7A3552A4901D2E25A1DD
-115B6B6825219F33CEE41710FD4CED40D8FFC0BEBFE0BE3E21F61010B173408D
-7D62AC6247B95FC3E60B90088CD552D8204D3B8938A7452C0F7B90088F03492F
-BA1E74FDDE953CF9D99078261DCFFA4EF2A6405F9A6E0A3B4B40F839C3F023D3
-05F2E9F43A08D7A11FF9848784783293BB35E69382A34FA65618E3E387DC394D
-0A3945AEA9106CF74329A9059C5750C168C244099C075841FDE9EE67A860CC5B
-5F4C467790F9ACDAE23D9021C7170F679BB6650FBCBC1F2FC2FE12E0E812DAB4
-FA60AE6A0E20696CF707EEEA5A4F4D7317275B876FF709F01E162DD5B7E825A5
-CD42E805396A85D4A6262F5C948A319C9F55D0FF1BD365DB784ED0A3B612003B
-32FD02363DF3E34E9066E9BD587FECEB62E7A95FD4B3AB1C2CCE5A23B727EB0F
-0EDC41FFF1386FDFD8D7D266F176B9F8A772B3BD81605CF7CD1E5562F63C403A
-62153D6CB14214C999D48F8350338CDE3827BE088A4F8CBC0050D80E3F4FCBDD
-FE18FAEDA58E3B5004B8B5CC759E14F59832512506F2DB7EE702ADDDD81622D6
-4B559372245F0AACC6863CFCDBBB43C4BA2DA5E2A749C4FFE06884CA4EB8AEF9
-2C9605DCAD529946BEE9B8D916A509837F0DB35B56A9FEE6B950E65880C4D9E5
-5B2AEA822C3CD924271438683DCC71222A253AD16CEEF78ECFD41CCFCC4DAB19
-F698FDC2B9A0B50E9C91F278C6EF0A3AB894B88F9DF87BCE655105350DA0AE65
-8C18CB46B1B8CC4DD922E0E0A8880B4D9CA3AE96546166429948292E582C27C7
-58C8E7A1FAD01232EBFF57ABABC70A2D9B27983C0306F89FA693FA5D0D8E59CF
-C353E7262AC562858BD2ED80D2746537E5C6C848A6440F094235DC81D8E6AFF1
-C80E344A89B8339A9FC337740EEEA92A658F4322CFAFE1FE0238E865B813DA33
-F75DC912EE95AB560C6AC5EA4FE53A63ADD8CAFEA74E4CA92F13EED378ED5D51
-05B522074C605CECB84468AFF0D7AD57CFA4576EDFCE0F45709E03E724FF88B5
-A04BAA6AAE30B0A3CA0EF28342FC28945086D50A978BEF307A9EF787FE7F30C0
-6E7275227D01D5FBD055F7CFCC8A46AFE69F7B036751044829A3A8A23F0172D7
-D5F45E9E671287A93C2E13567669AAF409DAB427A68D3CF2184D76F95AE960AD
-7426D2C8A3D5B22D288F369CD3633318291A6470DD9C453A95BC281C79A26602
-C376BFB27C1B4C1A211FE252C615365883BC41163252920971A83D0A5E3BDBC7
-DA9161FD6846220B144D92F194D718E62A17074A3137382DBA54BE70C418946E
-FACB7B6F87BC1133F5AEABB4416A29A586971E0E0CE3A2523CF46A7233873EE5
-4701C9E0F40D70CE8782DBA7A30378D0CE3EC44905B94879EEF4A9B99173B2D5
-BD31ECF9A7D0F1641AC0CF5F3AD5A6B0E5364AC0596E349E99729EE93AF80E18
-6FCF51075083394DE6A7E5D9F8046FD09287AAFD06E93C844935D732914F7AFE
-1ECA0D3E09419DA3032BEDB9B77F802198121AF72DCBF718D33760AB5E795A36
-A6B141214195FF215E551F218D43FF7A31DE11DA6EDACA9DE896938B111D9950
-8CF881637E36C32AA229A6C92ED4C86D272EC85837373D1F2570506C7BFF633A
-87D399697BD741A8F11309130ED1914968DE74C66CCA509B332985B594454F3F
-819F43255D89D001FAD93C86BB79384BBABA6B113E3D48EEDCA3CC501A52C0C6
-7CF3FA3CB9FE0FD257D9F4DD1E346E2D7F6CE0CD45CEEB8739DA798F1B7DC021
-6E2B4F910E64EDB9DAFC17D177BD72C73983141BA943E0D1E5183B10B97FC3F3
-5891B4A975D2D5F4739010E24659530CDE1A21B4C5372F7C101CD93F2C4919D7
-345892778924FEAEEB9EA7EF9095D520832C4029B9439EC6F6EE9BBD2B09C3E3
-C4C116C52888BAE3B32757F2C5DFAEC1B385715D58106F6A858ABF0319C96A9E
-18FBEEEC6D10135CC392C8F6F40E458AEBFBE3C86AF26D20A67617BFA4F6C4D9
-71CA38DF06855457D01DFD9829E46442661616246B8F8C108FD3C0703D1FBD37
-683BF60059B4792AC240E437D9E94498A248F8E2CE05701632F6C0462C28676F
-E38EC5BEE0339540D387035DE9716D53790C3185EB64D180AE2A3C1209CA6A6B
-D2631D59A2FC3A339BE9F0486418B7970DF40FEB32DD043D51E09336AC63CAFC
-D1231EA3C77114E60FE2A3B1CEBE7630387F32A9C8C6B8AC0800F421FE95C3AB
-86DDE37060B43E12469A69E88EB98AAC80D95CB202A0806B1D47227814362AC5
-9C658B2C1D3CE3885D691F2F9CC3209155B45464234443ADC78430B1A98EEFD6
-E5070982520A877293BAEF958B03217E3CDF36BABFE7D1F225C1F621453CBCF8
-5D06089A6D09EDF4D4D2FC940F8FDEF1F78190A7B9C497E677E099EC8527C49D
-3F3D1C264878A32F1B92FD4B1F3AFF06AE36180F6893F6E9CD1DBA888A3FF6A4
-DD4DC730B7C3E100E84506CBCC1647C4D37657654F84D4FDFFC8014AF9F139DA
-442BF6E53DC92241CB5E8FF3FBC55057A31C78FE07EF09CDA8C5701FF65EEEBD
-AFFA2E8E24C0694A816A37CCF63AA0D515DF32149BC462EF16942EEF3F8CA2BB
-D2EEB9164D01F92D5597F0C1FFDE270565759AB2662482B99EB1CE8763BCB8D8
-D035E0085440443674BC0DB76BE317599E2E120F69E2BCF40C20F5F225D8336B
-CDA75789949C71580F54A229F96CDCFB0E5A4B5BF702F758D4FE9A5DB382EBCD
-DB77FC39DF9E900C29F84CC9CCACE86756AA03AAD2481F918858EF246554DEC9
-28868CA6C26E1DC96D5C6EC62615442F1FF35980D77091AE953488401A263E53
-0879E8AAA44555C4543E914543567340870FB4C408BB4F2133F1BC782D2E9E84
-B31494DC916E661DADE54E396001ABE568AAF549CC1977B312C646D84014F5BF
-40A48E53DFCD37AC9D6512F0FACB21A2563EC83244ACA4FA526FA8A851FBFBA0
-1EDE61C21238401113DCE80C8BFC413ACB05C380FBED416B4D12CA44995CE106
-08501BF288EFD93BDD2F77E959B32A196D59209E987DA55764F59EAE90E3D049
-4842862ABA2C852DEEA8D0145E67EAB9828292D895D2A44C408F0ED06B98E30A
-5857994DFEE2D36021268DFFDF92B482CFBDD79DF3B0AB7FE6E2AF33BFADAB8E
-D80B54A1A4E3A9CBF4EEAB86E1B68369C8E918601E061B8B76ACBCFC8EE83FD6
-BB9070B61205EA1F73041D9F7FEE1AEC1C17F89D1ED90B6E0AE33D2FE94157C3
-740E56C12BDD55CF274EE181FF17B8CC6C977C7A023AAA6DFACE7843592F0B77
-487660E3E9E18DF91AD9D4FBC487729F6707B4EF7E2AEE6B58BC9B5ACA16E24C
-C849EAFDCE7C2CFC29E9723FED876F6CB28A360F0D15D08E6E59E865486A14BA
-067424003AC7E4E26266AB48881662877C3B4A3CF66DC09BE0E5201E6366AF68
-16FCEB60875767EA6C41D785F76CEAA55BA4D5EE2EA89DEE68E78C4DB15DB077
-660AE121989032C6A9BE22B1245BCB6A909D4F128367D0C6F0C33AFFE8187A5A
-9838981235051BC3017F0511DFD89143FFAD0D845FAA300FF94B264B6AB61A54
-BDECDB15DFBBA0CB7CEDD533CDA9889C1EBBB0679610927ADA384B1A4008DA22
-E2CCE4B5427FD57BEC44124730CC8F956910EC035C3DFD599B5726043555B493
-FB00F363F20F322388001B06250CFA9BCD41D969C012F264A0A373A7E49A60B5
-D17A59AA21F6B5E00D9B1318E2A7DBE53895F59635D293A1F006955F9131A2C0
-54FD3CDDB9835031B443B60A18DBC2BDF1542E408C11E08433C5B83CE5C9EF08
-01758BEBDDA0C5C0A8A6C878D79423E8845D613230BE8DC2FCA1510DE9248087
-CF1ABE53C77F7364F2853012EE1C0B5DA7F4B3C52D474CEE1064B8DAE82073A9
-C3A32D04658D3317DD8CC3A2F4379DCD22783CE461860BB379841AF0FDC98694
-554015E6A246D822818C2D3F341DC3B892BFC715D14C16437F5FA4EB988D8EA1
-DD18F3D5D6ECE2EDB660D746396EDDE7C1A1A34439759E7AE592E6C126330260
-A8371F7EC8F634C729B39E4B1C30335E96E80E33C300097D7F3A044BCEBD053D
-02B99ABE2DE748B036CC9C8C4D5D183066983F026D5AECFBDCB6B911487ED20E
-40F8EAA86B8F73C36BF3E1C6DA2E60429DE261BC91061BB7939BC344CC642A04
-0C75DD191714BC52278A8E889952C6A3
+8CE7E8D06A551258E5938EB0F85097E557F3C3BA2177A88670054C2473FD9D0F
+D9E6EE78BE4DE7D3B32C0A4890438F857B2B893F8CA4A75001BA5A42D90EC4F2
+B0D3E24CE17100E1A20EADBD615C9B006D73287E8A5580ED034E01BB6AFBB7A0
+C1A5D5BE8ED4D234E62C1E772182E6F6963800F7A410EE3FBBC30A5FFB47BBA3
+62C0896EF2CC54DC4ED804FFB912F5407AB4542A2E55201ABBBCED278812B35E
+9703C069C38BF54D0E32CD1C0F7873115DFA318F164F6E50342252E9EFE643D5
+E9C5F46AE46E7E21C3DBA8384CD35EE082D11FE17BF955D48E02736A05C23160
+7592275355E00E6967AC691913925629C1F41E0F49804C413205EF4DD853CD4A
+AFEFEEB55FAA06A85289F680D6670531DF5F087ABFA6D1B9A2C381186F70CB3C
+CE3FC0A3BCABEE4281A7C3DAC0B396BA8CF66077B079929DEFBE76C413ABC1B9
+E14159DE9583E6E10894C743E1C9D3CE4C3676B5A85ACA7E16E3A19B674051C5
+465EC644D5F2AA776BBEC2DA4B1977A85FA5C08E9E4286DD9BD6116B110B7724
+6AD93C41A70B08EE2FA8E1FCCBC5091B57F55D942459893BE6CC261B726BF304
+78E3F84A7C65A1ADB01906F84FEE55EA3E57A3AF2DA474592C95726288B797BF
+F751385F38BA7F09673B57BF2ADD79F0A4A6069CD3C238EEB149D77528B84CDD
+E31D788A4A5476B55DE425A4A120EEF60DEDE1F42FFE488A01D1ED003AEBE51F
+082784D7A5892C9F5806C2914FCB8CA5C4CCDFEF5D4E14DEA1777FEAE33C139B
+355BE39D995C9449B3E55807C695200EF55EA2F7EA676A6770164CB127DA7C07
+260FAEC3E976FFF9A350B8641A4D7B8EB2AF8ADBD241670C96F33EF95252FA03
+F0F65E148FA2466B74557628163CCF600D8C8858D515F09312E45FF4938FFDC6
+2BE334D3D9BDF1293532963B6EE923E356E17762BEF9E43461CFCF403CF9307F
+AC186610ACF18D27F662455921F450FD6B210EDC50F0C450BA94577C18EABFB0
+A4F21370E1E3194DB8B48668BF3342A5B33D10631C2CC5FC0F2495302A7EDDE9
+B46C85BA080BF1BF5AE4E492ACFBEBC7A358D213D0325ADB982E378B621963DD
+E8B0326C8E8162D878D685D25409F83A57577F1C3A0D46D9B6805C68AFEDBC48
+09E4883C54C678FECB4F587F41EBBD6F7B1F656FA528BA27273B92EA24AEA34C
+D31FAB98A48968B19BFBC34DCC9CBC40F4EA35783B607966EEBD88E0752F06EB
+BF3FE55F88183F5A21AB5B3CC322E5C56CCDD19E40EBE24617D02E4AB3E15CDE
+E92DA46DE2357F366ECA16119EA107853FDFE570B7CBEF695FFBCF049E902B4E
+CCC477AF9B9875B6D079FF00A302DAD67363BF90E38CD58C46961F7A53CE0C23
+06B0125C2DFF62A9879D24D9A524BDD035375F95790071CB9ABC08D5FF89A3D5
+583C4C33D9F20AEF1B7A12CE819A6194F7116BC7B171C1BF0454763D10EDCE92
+DBB45261F97E88977722DF2C624DBEAF95D18E5CEFCF466C58958C36A48D4190
+01E72651FD55FC8684C19C3183B306D3A061F16CFA7086C3F51CCBA865D88C9A
+589F25A52DB95453BBD66E89CB1E6C8059858A4898772A5307A3592889AF708B
+EC8CA855D6DD899181CF8DC664EFDF9A8DC9286918B7CD63490660C033471AA8
+2910D2ADF17271D6A680EB97891D247EAFF2A4EC3BF4FF395BCC292402ACBA77
+F7CE635F25EA8D29CCF6DF4121DE62533AD46D3A84E68AD70991E5FEF9EA2EBE
+19C2071821C214700AC9D23586F03E97D71ADC38BC97A4CBE534D318853DD3E1
+968978C85F9EDC6ADE6F0BB3E97A1F3ED7BB9936365D0D15DE805EF048E26BBD
+9A671078FCED2DBFF6A2FA1361EF137091FFD933EB556768D1B33A4E05048FBC
+0E7C672B080578E8F478BB66DAAA9EC09C4F779553D34C0A6A2D9A685A4C040C
+99AAE40D8DB6529065539BFA4681AFDFCC4BE7405875F78865D70BE1815B9E3A
+D243E623E80332D958019217B70E799BD5AF9779DE42F7291E824AF4F8D0E26D
+E76420BD441F4F7516A667BBDD083B40C5FF9476D707B1C10EA2F8C80BE8C9DE
+4DA48BD4AE3E661841CBB3AC4EEE0BEAEC612C7C9C748D0697819680D70F91B6
+F58FE67C3B4F8E64587CAC7BDB08C3A2E594B1AC8E97E77E427A8FEC289B5533
+60CDEA1957D4527DAC116E46169D1B70D742494A567425D0417F3134E623A56C
+CE14F537A4A8163C335D2FB084AAC9B5440BD23BFF9F708B1C7CB2DF361B639A
+B2796CA3BD382D8F26E991C83F1D7449E3C9869B23494A02606E7DA6528797EF
+85ACD89D7553701C04F77C5886CD5EC47AE302F3785944090BFC60818B486514
+1322587334EA1DCA899E1B6FB0653BBB16A15781C25B258028CEB1AAAC52016E
+A8F2F36A157759A3232654C0576C51F06A370BA928CEB3B6481D57745A5CCAC4
+63B5E306C676DE356BD593692C80026EC4F5DD0B89785A2D8650289F2FEDF380
+23F066B6C104EA6789AD199F36300032371B0AE9BCC92AE9E94280AB95E7BE99
+E69EEE109E5A34D8D192181AD22D814F49DFED9B87149C8C3FA247710B996F6B
+52DF6C1ACB344F56878C706E0B4EA2C33274FC47A03E549CCB29D26C1CC50450
+C4F1178015B818357F327FC4098FB65247ACA89F7852A8C5BEF8A61D928D3E29
+792F36AF218C14E22095213B9BF70F4A2AB9F8D41ABAE3F70BFD3E64434ECC5B
+8AF293E0657F662F071403F7B2BB2DC191361860DDC9761CF201A9E5DD64D0F1
+EDC9592D92EB02933A4E063E224301316A22F1676DE180193B1063733D5FBF31
+85C98ED0D8C1C459F41A6DF1A614740EF25462C7748AC4615A4C983E88089255
+ECBF5A92B7DDAC6E9BC0C1AC135977F1536CE490985B364118E7753B1B5D40B0
+40DE97B0EFB6A1E09894B24A32B1B2E2ABC02C64D2ECCCB43B8D2CE9BC9ACCC8
+F570F3AA2252EB95EE46B9452DF2EC804879265A0AB41B42BE6BE78777EF9487
+74F81B1B5D92DC44926F3C8421A432589B8C4B6D98BA9602EDB7CF5BDD7DFBDE
+B6C37D3FD4112313F2D404AD0770C84E9E9BC3AE4E0A12348B096EE17F95BCBC
+874F5F024D3B1E4515FA9457AD089F1C14A6ED93B0A1520C3C8435D8B9CC4FC3
+39DF5D18913CECA2F9FD3DFA46424594315D1400DAC9F2A09299F4C9D7D41E34
+661E0D305E9F62FC4E36BD2FB79021D8CDAABCFAE932E23F74CDA3600121BC33
+517A1F8CF50CFF67224D8F919290534C8CFDF8EA8C688E409BF3E831FBA6B2AC
+0BCB08B086D6B8F6243182E8BEF410B7551E32AB6CF2AC674A3A3A926EDEE757
+F19BFCA5BBAABB1523917BCCFA765E1360DEF6269CDB2F18A55AFA721C9C78E5
+27EB85923D08AC830462E485F9A73F4B092703DF336CDCFD15031619597C731A
+37E3D119025984C85D76C493BDD17187D760AD92E22CFCFE8145D07CD8400522
+0777845D8746C9A6D111E5F1EF2419276113092AA4F5D41526D6F40C40CD93C4
+4896F797DE2387E2382D8F5A068EE0290C64154C77B0D79399D85E81BB3B028F
+96E0CE1AF4021CAAAD279F78B18B54977BE8B5046ADAACC7464AD41B0C0D4E68
+FA2E980EF83C094CB09BFE4FAB84C02C70B88B9D071684DE404BDD0FA567FB66
+EF04E703C9F8580B0A095FF6076E4935A125265C35A49D263E4D3226C1BEE986
+8DEEA8F6ED7541C2EE75BC8FB8330223ACDB932803B4007435B0F36940C86510
+AEED548FD5B9E056EBF6F2484FF612D7681E04D1E87D708D95C64E58385045AC
+2A87E7F6AABA9DAC680524CE99C5E7A4DA70A14873FE4A9E4F58CA6BEB0D109E
+627947411DE2130D783D43CC6D3D6725F79E5BC46E14385EF63D569BFEDDBFC5
+CE454F9B754EBC68A1DE413063FF6005E027DB80750003B112C93CBEABAA04FC
+E07F75A62E7BC5B34E802BAD054E3DD77A436B6A5FCC5B006E38D628F69E0409
+BA8E2D97754CE7C8B00DB026D10E4FDDC3369316BB4E0B944EEC0BF4A5544EF5
+1FA02D9B429267F2C9E852125E556A0D1116D04C2A97BD27C518ED07E952EB11
+2C0B1960FBB05CB5BEBF5C91D1703A671AFF159DF7BA512726FC058213635BA4
+11D64072880D65AEA08C585BE4BBA690528242774855410872E61DA5279908E4
+ABE0948928C1E2E47C61FCB67C9A83E489454F29E18A4E646A6BC5E367D6D84C
+4B70D67CDCAA9B729085EB85582265C17E56FD97C71EB9F3472EF2422269D69F
+AA40ECB9062D232AAF45AAE6EA95223C95F48F435666C06EA821A00F4F614D6D
+457A3CD5AA85614D60B54BC13ABB3264EC1D822FA53ADDC1E7551A9C3CED3A60
+840A2A924BBF48CC951ED9ACBB4B7759CA3A75345DFEA4BD12543421C6E65FC3
+8007DB5EA10F40B4E0797E171F42A0A70486132291040C587F79549AE2A98FA4
+DC43764E8ED321DC920EDF6A79C34839E3C5BB11E7F3CC939AFF71AE82D8BB2B
+2C4CDEE000FAC57BD089D8D5C2D6317F85546F65828A62D32C3D43A2A21EAD07
+7338893F0FC2B7C2C2F0D7F8C066549174C6C411D066AD5CBEC6892C2B092866
+3117CE0F58AFA7A2B061DA228B8CB96E533415F9D9E5F80A3E49529418775E22
+59AC479B3BC8A9A1F01CAEE5D95897730BB50C0CAA2D8974EC9B90339D08A840
+DA8E831BC7D2544A636AC9693861A4A37C8EF436896C65398718B4903598FB0A
+60DA2F1C172D2362FD0CBC94197EA355ABFEBD7E8E6B95ADC8C219FAAC322876
+312B362C88BC3422379422D3DD17841A2C9D1F32FC15EEE6E780745CAD5A61D4
+FA61A2C3394585C89B5D78165009CA3620F333A6F360E06118C4B7BF69E6675B
+57BB57D837E05E1F1F11A3C1276901B507B967BA69B7DE18A17BA10E0DC02828
+811E45FFD3A83CD75E69CB8F8B50F820F7AC6F1DF9776584E7778D683BC6CD2D
+A9D611470E6E7AA289576EBEF0202221847E2A46286DAA4366188B425AC2D3D3
+D883B9412725017F3B6C2F35316AA01EAFDEADE1806C48AF7E82EFDDF2A00245
+DA561354F1761D126C030ED21705D89E255931B47EDB1A52C57183DDD4D33F99
+BAB362278939C80F739554D6BFC7119D941A68F33ECC2901AD2B34C0306C47EE
+2372E7FE3DEEC8B02789420272BB7CC2FF4DF6D23569A118046033C811232A1D
+5BCA1D629A4FF3A2C2492C0243B70C8D090778A766474FBEA9DAB50C3D29B7C5
+66FBB2D444B3C06B7C9241DF74C77DB5ADF648822014C49F9141CA9323594675
+E9640F26D24BF6B9E540034F1ACE1AD766E450865F9DA29B2F8BDF66B4FF8025
+BA11D57A064CCA9B211DAF756A18621F877942D8A30ED103C6186884D68153DD
+BBAF399F3D0DF5169B0E94A214B7D18F672A48B937A13133ABC5E9033734B0A2
+12A7B4DD72BE1886ADE94B968D11D29CCDA8251C2A284287037543A6E240CF67
+0EAB7EF796BD4DBD313FD3DC6D3535674184EABDAD1DA7B0A3AAD4B78CF82241
+E378FBF975403D8FAC2AA692686545D1550E8B9F457A396B3F68493A342D1982
+3E6E24DDA7D014EA1A297C38078A3404F0D87CD299DF9BF3C93FB8F236BBCA14
+F71300C5710A43605ABA308D54DBC954C66F03123393A7379C4F20DBBB03DDD5
+C273C234E8EBE27F93347F1E5B3EC0FFCE0440A205DBA5CAC312245AF05BFCC3
+734795D36BE536F56BBE0E6A42E9E9DD7EFC0B6A032E250BE71996B41B743D7D
+B2C6DF05A46CAB1FE425D0AEE07284E7A556AADB19B9DB7F4FDE477C87DF72D8
+EEC435D249CC2D564C57F2379E9912A0AAF33661D0CCD213BD1A38EAE0D4535C
+08BB493031B1FFD9C030B98C455C9B04304B1E628CB95FFC7FA6AAA12C2D2C83
+9166660FDD6DFC6C0CD04FB951C6BE616A258EDFAAEE4AD926608A4A36B1CD55
+9023D8647CABD029C539163705156A854D36D83EC488258C38C9B1126555D7AC
+68B4B770A5800B06D374230A78C9107963B637E39D6DC7497883032EC3055DE6
+CA392F3B2ABA182FC0C468549655B8392E94DB4D85AA14DA0E3B2D3B3DFCAEE3
+F5CF755FF7A7CE0CD930DE5AF138A6262898C2316902934912FAE3924A9833BD
+8D5B85F35EA4558E1FB9FFAF597F802F89AFFB5B289884A9F9BAED04084DD7E3
+A985178519BD80E3224F8533AA2D954F75096E490ECB780E6CCFF07D91E02D2C
+67AF4A699F81E84134E3EA69467F5514E5F3A73A9936839729E9347BC77B709F
+19137F238C2ADAE3858F31034BBEEEE79079F4B2EBE3081701B1B2FB0F114899
+C59DB78F99ED4B980DA4F04251CEE1F478A470C3954E5E83212726EC6673273F
+A2285C9AD2BCE145C5EBBB946EA0D58449BE7C77332D1F222EC6C5DF2D559BAD
+6E0A3122812688D9D2807F09FC09285FC0B2D3FA570E49A776B00DE85965843A
+B9C936AB2C2D8960EE0FABE64C7C983C546795A4C258E4E73AADF310673C9A2D
+534055FFC79B03C3E455643AFB8629AC355BAA755FB8DD4AACCBB21F2CCF8FB1
+E51E0B5C608EA149C6E6CFE107113C36FC9C85AED43723B11AED08B1B8661C0D
+EB0C7DD1EC047371DE2A4C24A789CA5B186A1AEC4258814A37FE30706D29ED48
+7639345B0CDB29BF192345D5AD372BA3E696964D91CF03748F3950BD649FC102
+A1E09A59AB246350BE4A7831D126472D627758741C8F38B6A01C0DF4C2F27C68
+6ABA6364D88DF009855B73630A4C3FAC44D2F0E2488EB71808D003C12632EE18
+039732BAC01B13E1A4D8C80C8BEF266CD168CB79462C44D0F891B60E0B15CCD8
+81949F998147933D377B10CF3AC3845FC2AA53ACA02AD96DCE8314416D09F2C1
+050AD9AA80448527A9947CC7B9B365C23E950A02FF730D1C3C91CBF14A746E6B
+7A2B87FD9561A4FD6254E9A2A3004B0C9A0C2E59CB914178FB114BECC02CD370
+2DAFA039EAD3D35D6CEDB468C1C42404B88BFB70C275D8636293D1A71CB48CAA
+D971DDB3252B324A5499E419CCE408BC03B688F0D8774D28D7E5D740110DC5CB
+22B3CD013F61BAE5983B56D23143BC45C94CE85769C1846B1E2BFC36DF7BD587
+37919D573819EC3EFAF1EB66E2A07469CE0CE596546EBAB2EEEA5F73645429AC
+551E5C8F16966BC0D32D6E1C9C3EF288EF36F977EF3751931BC881935DFC6C40
+E547AD3A923DC51D1072B085F1B23CA0E191BF3D010EA0A01C83C973B835ED74
+7DFB263E2848A83AB9E06F5071F6D252A1FF14ED1A6AA8BC3DA3996207675678
+CFCFB1E134A18D1CC3ABC395CF287E139C4338CBFFAB27345A1541073127C242
+1DA55018AB81A6B3738BF659347D8D70D86B8F4C40B8A9E991DF788399B5F13B
+50ED46EEE43CADED29594102E07602154608111060499F7C1C03E5372B415F33
+5A741E8EA5E3F41AF934063C94641F1129204EC1019488EA4FF89D7B003CD643
+7D2314441404815203F7FBC2DD130A5E1C5610457E583363D8B439B75C41C3B2
+05E2348A4A826D4DE429E1B61FABE14FD4ECA2C3DB124E738FF3662840AA03B8
+EF40A8D5C60E86C341D1755EF63F1D82DCA856402B949945265283420BB2B4A4
+FBF7023F2C0B36348145F92EF66D292BE48545C5555E670B5EFB973B29FFE465
+92247869BF8E3F0644CD5754A3D35FA3A1DE5BCCC43F0BE41BA782892DCAE8E5
+5EB501686B68B9C2CDDEA53787D795F59E9C827321CF42062C503F4D4B591BD4
+0F2F661B5487F7ECA6694169D335ED8EC725E53AB0CEB25CAEB9F832E93715D8
+8C8BB6F6742B14CD5F3E837A636DB41DD9C109E9771A2F8C7D7A7D12BBCF650A
+BB131F547A894CC90508A936EA97154E81443C052AD474592314BE31FBAB4A79
+4C1992A35BAAE07F6816D542463726930BF25F75AD69AA44E90F55EC8A1AB06B
+232EE37734835402F80EBD4E69C375D3E704B272CC7E2E6C812092E964D2A78D
+A0CF906468847818EFD8E672B97CC730EB2436FF83DAD46F833D95A0EABC3AFE
+7951E829846CB4CB8B2A64A31B86A1E8CF37AC69DC3E43914D73F3559AD19ED5
+5DE7A9BBE5372B8D7F6C06E28FE1363B1B77174F7E97497E98E495EE2F86CED7
+A22F0865DCEAC76FD32BD07072F6636C889A39B646AE1641CF717C70BE57EDB8
+24DB4F1D9C6B4453EF20711E2C33D6D51D7603D9E27999EBEE31BBBB96099D35
+1ED28E3D77B5028CB8245F9F1F085BD495985F61B6CE8CED485AB27FC2D794FC
+5EECBE80BD5052927A9C7BB0E22741016FD77C05161A42984226ACE328CD7491
+878CE3F6D6134629AE55F1F8AAF5E8EC88B121D2F1850103485FFBD67C1F125B
+60EBA8FAF5F8F6BCD056A2050EBC8A9BE882E51A12BA0EB984DDA5F036C74D9C
+46BFE98DFD5AE9DF43DC7D2E6034F977B02D913B54B1F8CB7FA8EF3CB50FC5EC
+4CED60F5F3A3424A0FBE73DFD2ACBA8BAE6EA148B2FEBE28FF278CD323C07AC9
+A2B110E495B78830DD0AB7DF1F59F2625F152434C463082FC4A8024A3EA832EF
+CCDC136026BE3535624BF9388F6DAA69211BA803D28DD7F682316BE640B5DC60
+4F1C17CB2BED14D0E2D976BA9AD98D4A4BB32A5F4E0A4608F779D322AB69C0E0
+D3D946BC374AB7E58129F3C8F4139F41864A6F6B028489EECC5CF08B48B64AC8
+CDA15F607C46D0C84C338301118A1909C41EF10FDE679A3FF3BD43EAE0266C52
+55B90327121EAA3BFC28718549B69464C2A327B412B11A6A6226B4E71067F2E9
+D9AEBE4EE4197BCF55D79E09767680934D4E91F59007698152E26E47CD595996
+FA0C868118EB44D0EDFE8FDE630E0A7EAA32728840543C884A6CEC7CFED9A4FA
+B438669A347B7E8F33CA026BE9D7DE3214DD7A8A9C2B721E6F8074A778294EE2
+D26BBF18385183D9BA7935BDC4920B39DB2A62377E236BB83A0937919F2EC120
+FEE0835B708352C7DED25FA895E667253C32335DED00EC040D75A28ED6B50076
+E4FC37CB853DD6A988348B0E9ECE5EBAA941647B11E99D449C4B367305B25E5F
+875808BB6FA323998593B76EC7596969BA37E9CD0017B9FDBBDD1CAB935B6896
+423D6BAAC8110C443EF8BBC71F839CF4077C2B816B81940A04B07FA1A86021A2
+9D97745C980651014B2D879612549744F8F60C975B0AEA4F58DB91AEDABF590D
+F3565AEE2A42881D52EAAF61A1E0258E529F7192B00005BA29E8DCABAF23CE64
+85B43F3EE8ED421A430295022518E77C7876B9398FC9228A53C5332AC36D7576
+4DEF2E02509C00A50CAEA4B2C22B4F316E85DC0F3B6B1BE11568005E8DC6B4F5
+CD4A74ED1A740B0B79873B6294B3053CC3B4588CD338F3BA38181DA87D50ED1E
+8AE949573B74E2831223FC295196A0AFF9E374ADD0AB7C740AE433E22D5259CF
+D42FC59A1AC0B9B807BAE8B4B5B85178F5DB5B5FA55F15E78F968DBAABEDA411
+815CB3299D75837957E10A294FB8755CF1639F25459242E9D9959549AE6FF26C
+E7D0F8C9D157DE5567F74545FBBDDA11C66C308E823522CA56889D77DFF786D4
+8FA6EF10FCABB728E5EA13518E3738CC5D401253E62EA343D4C263D6C0E140EE
+8069D3786BCD1282699A819FC230F4DD9AD1B7F6583456ED9BB16B27AF6C6BF5
+7533C843529343EB6AAE897F72AC8AD3AC2B86861F184DBA5954287DC6BDD479
+D609146AC26EA9CD5E6FA2D31AAB09E86BC096DC387C5113D372B0E229E59862
+D6E2C4CDF2CFD3493D615F554E3FCCB2D380B807A84285C79E824E8B01115B68
+90A7AD75B40659CF1E00C5C89DDE723311DB89F20582CC9488FE05753E4C0AF8
+F967AC02AED325221AFC0ADF26031746ED14017D1CCAA7876623B24B5574E821
+EBDB7D28D01E41207AE960B7074180257020E4DFE6E154C6CBCF4B0F76D4527D
+F9AEE2796870D0CAD98E1C4C8E1812819CBD41DC23AFBB05590D99960F6A1FE4
+158C92ADE602291F10711FFDA3096574BEA51746F1912B3168BB8487C0D56AA7
+2E29F56BC39ADE17BB04FB5EDBADD1B1FDA28D94A25B6591868279CAD0EC57DC
+EE6D87F27BE4CC137636F020CB67BB3FD49E81FF7A1BC743C34552A2225CAAD4
+F24DCCC5937AB1088F5971C626BEDD244187C6E502DBCF9AF99A8E94D70BFF34
+8DF971DD3D588095607654A4C68E294765B0ABF60CAF606C5820C15ABC981948
+0DEAF345D9512BED22C680297524FEF661F7631F411F49F7CBB1438CD638BAC9
+3DFD95364CF6B5A86866B71DB469BCBE84F4B18C58B83F3DB42F6DE0CDBE79AD
+51B67782C26D2AA1EEDE9298B06B3DB501D69EA70ED1BBD458D56304D4977A90
+537C09A1315CDD3F05CD533C25BEBFA2C3A24120438259A1E6C852696D32B546
+0E5FC8730038DE7261DC9B68BF3B52420FE09212AC0F403992D3476F6B7EF59D
+CD643F03DF57DEF1CEF074F9E2591753EE143ED8F8F0B2E42C7000855F7F06CA
+8AC95D2985028298134EF9ED6035D9E300F78637A0C905000C6E1B7F0F1F681B
+6B5EA55E69C078DF37BB9819B6E1807D241D167D6C2086D4367879E552416576
+6DB68C501F1C9DFFA32640B8DCA7CD767C3BD1703532428B7400BC8C38D5BC4D
+7EF7F908220CCB7C67255AF40B184059175275B8F0FE08D28D82B32B99865863
+D2866C688C927FA70B00878DD16F529DB491D1D6456434BA54883D2EA1C81931
+7C4D71C8A29DC490307C2D9FC709BDAA0B1C07D096AB99B37ED474E510922002
+C0A1EDC4D0F790918E36929A23C2D47AE922520F844122220F0A25743E91CA91
+33933D5041151AA61D1ECCCA11CDA91861AB793A171B7F4F76D913626DCEC3A2
+A1F4F9D8B83D80B0BA340D7DEE1BDCB03291724468B4B6D2037791DC0ADD2090
+0A68AA2EFA4BA42C4F4C6E5FDA61981B12964259ACD12C6FD61B0FB34A5B1A53
+166CA665B5E11D1DC3F0C256B2A59C1E968825144DD00E6A635C26C8EFDC1C57
+D8A6A0D7EA6D94159DC424CDF940B98969F61A5B8D06FF6C0B5369FF0219DEEB
+BB4AB771858F5201D7E1E1F3C2B029A6D4914718212CF04F9F9A8B5D64A39C50
+CFEB0683AA4B13EC31CFE436B07E3942DFCE3FF9D79A403B2B1CA5500D87302F
+3F7320A9E3E584FA56DBB5E1BFAE1A5A8E46874EDD30F815670A8932B3A713F8
+750922840D0384FEBD43826CA3C4A907333E672DF7A83E56209BA1B29A792A0D
+8FD3802E1865A520CD01412513CD3DB48B520BF6EF96619DB2EBDAB56E0C747D
+54028E8D82838CA10605A47AA07512802E28E9474CAD997ED0F5073568F8FECB
+52FEB3794DAED679953A1E09066783C3DB54BFB90615583E298E2BE6C789FE07
+6DD80318DD40D3EDD5D63CFD5E945380760572E5D05BA60538CFA1C824E67B62
+2A52ED82DEF28FD2C15BA114629652C549C371C6CDD4AC9744DEE55CFACC79D6
+FB4AEEDEF908689F10FB78BBF26AFF4C30F016D6EE7F12D93A99C5ABE16B5BFB
+ED7E99BD8824CCE90EE8D79060FA838002DC4BDE312EB540805055294F581E02
+17EA11C2FEFFBF924842805C007060C5F8BDAA97986ADC70A1C2C767B8F8AA3D
+513DE9316C366CC20FCC147DC28A9A4431378995456FEA61BCBAC8F4814EF566
+A09C20A97B44DC85FF402F6356FF4D41FBBC4B9E281F2558BC876E880F1D6E00
+EEBFE74389BD8DDA4DEB3EBABC1134B3A33084AE278F5A0958A94A9885184021
+C1687D37A0EE6D609E1C6F599237AFE90C0B662A26F7B77A49FC006669D147B2
+3E15E8168AEC8FC613A8AA4905C08049556B324EE55DABFDFAD2750C087752EE
+4CEA95F9037DCFED7E65181A40FFC34E578235D6BFD6CFBBA7DB07C42FCF5A70
+4CC0AB4267076DF7C26FFF943856C47C181FECE3C71242FF486E90AAD89838B2
+5FD811C488BE6F554697C09F7A3689C4B70D34F659B6E83B3CFC4FC310C00D22
+E07ECCC0C2313AF5E00E0F905B943D241BA1804D89AA2359A1B69D765F99A475
+78B435E7E97542347D6088CB2E254E2B504D7A238D4E943E5656E0D07AA42D96
+B2AAAA498859DAA8FDDD2E466C43A86CA892EEA228DCFB9620E8B38C6DBC9090
+0C12A9B74005570FE9B3BABCC90E937F08783CA81177ABDFD50B26C7546B760D
+70D725D0E6E84A4076DE94679D13FAA5E0A59048D9445C6E5C880E89BB629811
+7995A190396E414A191AE14796E0DD37E5F55DF3EEA519357E55126C0AB57F65
+AC1541A44701986EFC037029846B0908BCF35E50C8CE64150D39F6F9E766B244
+068625F647C3A821828623458BF1CC290D59409DDBC7F14497F3234119725A34
+E338EE9AF8F1D6367EAC19CFF7D0C9FF9D26222F3680DF6E5FE11683B099152D
+1CE55AC55E8A5C66F9616B09835451595DA23F0B5685D56DCAAE57A91FEDBBD3
+32A021048E7B5F27B33E01C296E8376EACC74D544777205361165F04B9AC80E8
+A3842D72E54A2E3DCCE846DF8852B22F3F6D635E91EE25FF4BE11FC732BCEC3F
+E512C9CEA9827CC632964ECFB6159E736D5F483D58F1380A6D6B5B69DA06957C
+7C6050F7E9FCED0676749563321CC8B024059230018A038765C1C42E665B168C
+850A919D5BFD33D25DE9097F073D0D20B41352D6A173DA87D3F14F622E856ECC
+951CC137475D537A04BF0573DF6E7A4BE31B6936A22AB1CA29408EBAF1818333
+62D68005DD3C96BA2514CC0D7FF7CE7DC70E46E37FC4342999CBF2DBB3AFF11E
+31BD273D3AD3C6CB2FEA548A412505B6B57C3A01D86DE68B4A6B38D8FA9D7257
+6AA9BB5F6928F5FC2170A92C029F270BFF0465E163FA9567A01B0343A6A26DCD
+C572A7CAB93627D42053EC752209F724F249974C10DB889E56FE84CAD479758A
+1877543B4BDA880D90A0D39CC1D681C87F3E2350EF7C088226E680E59DAC2C7C
+70C67AD1584221C01444C6986A7C5D17C8FA8B941151957335DF4F3487A7C935
+E657A16D9C7FCBAF80FA2D18950E9B8EEF27B19F3CA257E5E45DC20EB505A5C5
+47904A5A11BFCDE407DC80B8E7465856F771945A4C131C1891CAED172711E435
+B2D4CD03AEEBFA6CD512DB3410F1762CAF16211CF33A63DEAEC9C5BC55EC0360
+C1B06C072EA39AAC802501E1A30BF2CFC7472A24A59FBA0215A2310101E3D950
+1EA78E3A2CA04F75D08CFA838A5A9C793EDECEBEBAF36F8B5ECBE66B4E47DFBD
+7632C94EFE94689135735A05E1009EDA2C4EEAAD08673A98EEC613F9EE587150
+81AF6FC123FF11CDDCC075897DEB65DB03A2DE5615D456B4222864285C2046DD
+3A06A64BDC38F1802E9AB386A1DCA85F69F82FBDC30854BD69748E1C948CC905
+DDF341CBBCD21E17F15028EDE13BE832A95DFD19E8B006B363B2C8F889395FBA
+4E4ED0D676243ED8C5F26A94A56B6500668BA9D4DB4FC121F28ABF71A3D392D5
+CC5D51845ADA136BAEF21E3E7E02174E93C01816261A5410F874362DE48E4B32
+F74BB7C970D652694253CD5DDC1A060A0D29E555C2A3F29314D298834EDF8C2E
+CE1035AF37E649349AE8BC6C1B5D0B19DCAD2603D66FE3AB30CBC811B66B9E56
+04B6FBB323D3DA968630C2662E3B137A0B693E684ED42BE64BBEB455349ABE08
+B3B7556E0D90E0ADE7A1FD0F0D895CF57CB54F4598D15DD9C2F75BF9FD6433D6
+FB2E4C9393E3D8CF42FEC2C252F0CDC7123187C8F66122E0AC10728BF126BE2B
+21B195C31A4B6B0A3EBE4036253D256890A1FA7FEB8BDDF8F0BC9B37FF609D45
+5F8F1BA00182478950C72F5DA14772494BD08E238BB4B628F4493DFF40DEF43E
+5CC7F61FBA102574E20FEEFB1850889888CCEC3FFF0FD03A6E4FEC28C79C91CA
+C8E0B9EEB8DA1A9C39B58409E809BBD1F6B626072BA54AA0642F01E562BE8231
+94958F8D428C1719C8C6163172BCE32D608E93492F54E40CFFCC3C7582F62E54
+43D580BC1AB42DC235278A2E6F9E8E281D2AEABC2888E879F733B1AC8D466E40
+8CED3A3C8D73E07877EC615DE2FBC6BC2B332EA52AF1E509F93CA26EF5CAD8D4
+359C1CAA4A9270115F0BCCE07C86B0CFA6F55FE621B5949051149D8FF0583584
+ABD5008F5180BE8422A81DAF2D7226FCD1CA3BAE922669229680935F87D0F7B4
+E501C33178090AD11471DBC0B960760315DB6B312147C3157B20741AED4106C6
+A1642AAE9990CEE3E3BB497C0D23E647CA537AA40E9C5C880883E50A48346CCA
+B032C7B217C4709CF7C26FFF94337E9A749558838CFD111E7B2E9FA34907BC32
+038B356AA9388B9641D5DEB451F7E957A2CD4A3F1230CAECF936CE32349D0844
+EF57831E02A4BE13B27F987F975B4952E2E5CC5FAAFC2C623CFDDD60FFEC32B4
+9E57654FA5B0F31B8728B8115A7702115D7B0BF53737D571F991B20FE46CA502
+B9323E2DD21F2389015052FB877A4043247B705E2FA82BEED78F7B52E14F50C2
+4254828740FED6168308368917434BF7DA33839246111EAD470C8ECB2C9E7501
+CAD9F27832AA2004697C5593C6DAF3A359EDD270F843360BA5C670D084B3E5DB
+39CDD47C32D657B2AF8214CCEA7E6DF470DC95A394D66CCDB446F007DC234BAD
+71164B048DCAA6C3E1FEA76177709E661008771D292F9A102D0B0848A7870AC1
+95D65AC6B097EDE74A2487D1A55609530E113F79DD25FEAB12A9789F6789FB5F
+DBA76F13498A1B07E8209BEA2AF45682794A413C6A60096B84E7F3CBE8E13E18
+29A55F67CE95CB76E44FECCEC65A0D801EAB734480209EF74FA4833CF53EB82F
+93D2C94C4BA8AFE4D52890BAFB5435EEC131BE98FB9149E0D9915E18BB8D74A3
+6F7EAEF4392F8546D9630016379AFE4287CA5FBBB48639C114E01D32C4967A53
+CE8F219B1EB0419128EEF2611866A956F9884A5C8334856848443AD43BD5A2DB
+8309558159385D73B973F1094972A03E81B830420832ECAC15CC3DB3200BEC0D
+7AF3A9FB61FCBCAB6B8C5F20065BC6F0
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
@@ -933,6 +936,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -950,7 +955,7 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:04 2008  README  Page 1) 144.161 Tj
+(Aug  8 01:04 2009  README  Page 1) 144.161 Tj
 0 -28.4801 Td
 (xv6 is a re-implementation of Dennis Ritchie's and Ken Thompson\
 's Unix) 305.796 Tj
@@ -1054,7 +1059,7 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:04 2008  table of contents  Page 1) 192.2146 Tj
+(Aug  8 01:04 2009  table of contents  Page 1) 192.2146 Tj
 0 -28.4801 Td
 (The numbers to the left of the file names in the table are shee\
 t numbers.) 318.9016 Tj
@@ -1069,152 +1074,148 @@ t numbers.) 318.9016 Tj
 d sheet numbers.) 345.1126 Tj
 0 -85.4403 Td
 (# basic headers) 65.5277 Tj
--4514.2 TJm
-(# system calls) 61.1592 Tj
--5015.87 TJm
-(# pipes) 30.5796 Tj
+209.536 -85.4403 Td
+(51 pipe.c) 39.3166 Tj
 0 -94.9336 Td
 (01 types.h) 43.6851 Tj
 -7022.54 TJm
-(23 traps.h) 43.6851 Tj
--7022.54 TJm
-(51 pipe.c) 39.3166 Tj
+(# system calls) 61.1592 Tj
 0 -104.427 Td
 (01 param.h) 43.6851 Tj
 -7022.54 TJm
-(24 vectors.pl) 56.7907 Tj
+(24 traps.h) 43.6851 Tj
+-7022.54 TJm
+(# string operations) 83.0018 Tj
 0 -113.9204 Td
 (02 defs.h) 39.3166 Tj
 -7524.2 TJm
-(24 trapasm.S) 52.4222 Tj
--6019.2 TJm
-(# string operations) 83.0018 Tj
+(24 vectors.pl) 56.7907 Tj
+-5517.54 TJm
+(53 string.c) 48.0537 Tj
 0 -123.4137 Td
-(03 x86.h) 34.9481 Tj
+(04 x86.h) 34.9481 Tj
+-8025.87 TJm
+(25 trapasm.S) 52.4222 Tj
+0 -132.9071 Td
+(06 asm.h) 34.9481 Tj
 -8025.87 TJm
 (25 trap.c) 39.3166 Tj
 -7524.2 TJm
-(53 string.c) 48.0537 Tj
-0 -132.9071 Td
-(05 asm.h) 34.9481 Tj
--8025.87 TJm
-(26 syscall.h) 52.4222 Tj
+(# low-level hardware) 87.3703 Tj
 0 -142.4004 Td
 (06 mmu.h) 34.9481 Tj
 -8025.87 TJm
-(26 syscall.c) 52.4222 Tj
+(27 syscall.h) 52.4222 Tj
 -6019.2 TJm
-(# low-level hardware) 87.3703 Tj
+(54 mp.h) 30.5796 Tj
 0 -151.8938 Td
 (08 elf.h) 34.9481 Tj
 -8025.87 TJm
-(28 sysproc.c) 52.4222 Tj
+(27 syscall.c) 52.4222 Tj
 -6019.2 TJm
-(54 mp.h) 30.5796 Tj
-209.536 -161.3872 Td
 (55 mp.c) 30.5796 Tj
+104.768 -161.3872 Td
+(29 sysproc.c) 52.4222 Tj
+-6019.2 TJm
+(56 lapic.c) 43.6851 Tj
 0 -170.8805 Td
 (# startup) 39.3166 Tj
--7524.2 TJm
-(# file system) 56.7907 Tj
--5517.54 TJm
-(56 lapic.c) 43.6851 Tj
+209.536 -170.8805 Td
+(58 ioapic.c) 48.0537 Tj
 0 -180.3739 Td
 (09 bootasm.S) 52.4222 Tj
 -6019.2 TJm
-(29 buf.h) 34.9481 Tj
--8025.87 TJm
-(58 ioapic.c) 48.0537 Tj
+(# file system) 56.7907 Tj
+-5517.54 TJm
+(59 picirq.c) 48.0537 Tj
 0 -189.8672 Td
 (10 bootother.S) 61.1592 Tj
 -5015.87 TJm
-(29 dev.h) 34.9481 Tj
+(30 buf.h) 34.9481 Tj
 -8025.87 TJm
-(59 picirq.c) 48.0537 Tj
+(61 kbd.h) 34.9481 Tj
 0 -199.3606 Td
 (11 bootmain.c) 56.7907 Tj
 -5517.54 TJm
 (30 fcntl.h) 43.6851 Tj
 -7022.54 TJm
-(60 kbd.h) 34.9481 Tj
+(62 kbd.c) 34.9481 Tj
 0 -208.854 Td
 (12 main.c) 39.3166 Tj
 -7524.2 TJm
-(30 stat.h) 39.3166 Tj
+(31 stat.h) 39.3166 Tj
 -7524.2 TJm
-(62 kbd.c) 34.9481 Tj
+(63 console.c) 52.4222 Tj
 104.768 -218.3473 Td
-(31 file.h) 39.3166 Tj
--7524.2 TJm
-(62 console.c) 52.4222 Tj
-0 -227.8407 Td
-(# locks) 30.5796 Tj
--8527.54 TJm
 (31 fs.h) 30.5796 Tj
 -8527.54 TJm
 (66 timer.c) 43.6851 Tj
+0 -227.8407 Td
+(# locks) 30.5796 Tj
+-8527.54 TJm
+(32 file.h) 39.3166 Tj
 0 -237.334 Td
 (13 spinlock.h) 56.7907 Tj
 -5517.54 TJm
-(32 fsvar.h) 43.6851 Tj
-0 -246.8274 Td
-(13 spinlock.c) 56.7907 Tj
--5517.54 TJm
 (33 ide.c) 34.9481 Tj
 -8025.87 TJm
 (# user-level) 52.4222 Tj
-104.768 -256.3208 Td
+0 -246.8274 Td
+(13 spinlock.c) 56.7907 Tj
+-5517.54 TJm
 (35 bio.c) 34.9481 Tj
 -8025.87 TJm
 (67 initcode.S) 56.7907 Tj
+104.768 -256.3208 Td
+(36 fs.c) 30.5796 Tj
+-8527.54 TJm
+(67 usys.S) 39.3166 Tj
 0 -265.8141 Td
 (# processes) 48.0537 Tj
 -6520.87 TJm
-(36 fs.c) 30.5796 Tj
--8527.54 TJm
-(67 init.c) 39.3166 Tj
-0 -275.3075 Td
-(15 proc.h) 39.3166 Tj
--7524.2 TJm
 (44 file.c) 39.3166 Tj
 -7524.2 TJm
-(68 usys.S) 39.3166 Tj
-0 -284.8008 Td
-(16 proc.c) 39.3166 Tj
+(68 init.c) 39.3166 Tj
+0 -275.3075 Td
+(15 proc.h) 39.3166 Tj
 -7524.2 TJm
 (45 sysfile.c) 52.4222 Tj
 -6019.2 TJm
 (68 sh.c) 30.5796 Tj
-0 -294.2942 Td
-(21 swtch.S) 43.6851 Tj
--7022.54 TJm
+0 -284.8008 Td
+(16 proc.c) 39.3166 Tj
+-7524.2 TJm
 (50 exec.c) 39.3166 Tj
+0 -294.2942 Td
+(22 swtch.S) 43.6851 Tj
 0 -303.7876 Td
 (22 kalloc.c) 48.0537 Tj
-0 -341.7606 Td
+-6520.87 TJm
+(# pipes) 30.5796 Tj
+0 -332.2673 Td
 (The source listing is preceded by a cross-reference that lists \
 every defined ) 336.3756 Tj
-0 -351.2539 Td
+0 -341.7606 Td
 (constant, struct, global variable, and function in xv6.  Each e\
 ntry gives,) 323.2701 Tj
-0 -360.7473 Td
+0 -351.254 Td
 (on the same line as the name, the line number \(or, in a few ca\
 ses, numbers\)) 327.6386 Tj
-0 -370.2406 Td
+0 -360.7473 Td
 (where the name is defined.  Successive lines in an entry list t\
 he line) 305.796 Tj
-0 -379.734 Td
+0 -370.2407 Td
 (numbers where the name is used.  For example, this entry:) 249.0053 Tj
-17.4613 -398.7207 Td
+17.4613 -389.2274 Td
 (swtch 2256) 43.6851 Tj
-34.9226 -408.2141 Td
+34.9226 -398.7208 Td
 (0311 1928 1962 2255) 83.0018 Tj
-34.9226 -417.7074 Td
+34.9226 -408.2141 Td
 (2256) 17.4741 Tj
--0 -436.6941 Td
+-0 -427.2008 Td
 (indicates that swtch is defined on line 2256 and is mentioned o\
 n five lines) 327.6386 Tj
--0 -446.1875 Td
+-0 -436.6942 Td
 (on sheets 03, 19, and 22.) 109.2129 Tj
 Q
 Q
@@ -1244,6 +1245,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -1261,207 +1264,207 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:04 2008  cross-references  Page 1) 187.8461 Tj
+(Aug  8 01:04 2009  cross-references  Page 1) 187.8461 Tj
 0 -28.4801 Td
-(acquire 1375) 52.4222 Tj
+(acquire 1373) 52.4222 Tj
 -14045.3 TJm
-(0210 1224 3538) 61.1592 Tj
+(3460 3479 3618) 61.1592 Tj
 17.4613 -37.9735 Td
-(0311 1375 1379 1632) 83.0018 Tj
+(0321 1373 1377 1759) 83.0018 Tj
+-6520.6 TJm
+(bfree 3730) 43.6851 Tj
+17.4613 -47.4664 Td
+(1917 1975 2018 2033) 83.0018 Tj
+-8527.14 TJm
+(3730 4062 4072 4075) 83.0018 Tj
+17.4613 -56.9594 Td
+(2066 2079 2123 2158) 83.0018 Tj
+-6520.6 TJm
+(bget 3566) 39.3166 Tj
+17.4613 -66.4524 Td
+(2315 2362 2616 2971) 83.0018 Tj
+-8527.14 TJm
+(3566 3596 3606) 61.1592 Tj
+17.4613 -75.9453 Td
+(3407 3465 3570 3629) 83.0018 Tj
+-6520.6 TJm
+(binit 3539) 43.6851 Tj
+17.4613 -85.4383 Td
+(3857 3890 3910 3939) 83.0018 Tj
+-8527.14 TJm
+(0210 1229 3539) 61.1592 Tj
+17.4613 -94.9313 Td
+(3954 3964 4424 4440) 83.0018 Tj
 -6520.6 TJm
 (bmap 4010) 39.3166 Tj
-17.4613 -47.4664 Td
-(1820 1871 1918 1933) 83.0018 Tj
+17.4613 -104.4243 Td
+(4456 5213 5234 5255) 83.0018 Tj
 -8527.14 TJm
-(4010 4047 4119 4169) 83.0018 Tj
-17.4613 -56.9594 Td
-(1967 1980 2023 2058) 83.0018 Tj
+(4010 4036 4119 4169) 83.0018 Tj
+17.4613 -113.9172 Td
+(6360 6516 6558 6606) 83.0018 Tj
 -8527.14 TJm
 (4222) 17.4741 Tj
-17.4613 -66.4524 Td
-(2265 2312 2549 2870) 83.0018 Tj
--6520.6 TJm
-(bootmain 1116) 56.7907 Tj
-17.4613 -75.9453 Td
-(3406 3465 3569 3629) 83.0018 Tj
--8527.14 TJm
-(0975 1116) 39.3166 Tj
-17.4613 -85.4383 Td
-(3807 3840 3860 3889) 83.0018 Tj
--6520.6 TJm
-(bootothers 1267) 65.5277 Tj
-17.4613 -94.9313 Td
-(3904 3914 4423 4440) 83.0018 Tj
--8527.14 TJm
-(1207 1236 1267) 61.1592 Tj
-17.4613 -104.4243 Td
-(4456 5217 5255 5277) 83.0018 Tj
--6520.6 TJm
-(BPB 3193) 34.9481 Tj
-17.4613 -113.9172 Td
-(6385 6440 6466 6508) 83.0018 Tj
--8527.14 TJm
-(3193 3196 3712 3714) 83.0018 Tj
 0 -123.4106 Td
-(allocproc 1627) 61.1592 Tj
--13042 TJm
-(3740) 17.4741 Tj
+(allocproc 1754) 61.1592 Tj
+-11035.5 TJm
+(bootmain 1116) 56.7907 Tj
 17.4613 -132.9039 Td
-(1627 1715) 39.3166 Tj
--11537.3 TJm
-(bread 3602) 43.6851 Tj
+(1754 1807 1860) 61.1592 Tj
+-11035.5 TJm
+(0976 1116) 39.3166 Tj
 0 -142.3973 Td
-(alltraps 2456) 56.7907 Tj
--13543.7 TJm
-(0211 3602 3683 3694) 83.0018 Tj
+(alltraps 2506) 56.7907 Tj
+-11537.1 TJm
+(bootothers 1267) 65.5277 Tj
 17.4613 -151.8907 Td
-(2410 2418 2432 2437) 83.0018 Tj
+(2459 2467 2480 2485) 83.0018 Tj
 -8527.14 TJm
-(3713 3739 3867 3961) 83.0018 Tj
+(1210 1236 1267) 61.1592 Tj
 17.4613 -161.3836 Td
-(2455 2456) 39.3166 Tj
--13543.8 TJm
-(3982 4032 4066 4119) 83.0018 Tj
+(2505 2506) 39.3166 Tj
+-11537.3 TJm
+(BPB 3188) 34.9481 Tj
 0 -170.877 Td
-(ALT 6060) 34.9481 Tj
+(ALT 6110) 34.9481 Tj
 -16052 TJm
-(4169 4222) 39.3166 Tj
+(3188 3191 3712 3714) 83.0018 Tj
 17.4613 -180.3703 Td
-(6060 6088 6090) 61.1592 Tj
--9028.94 TJm
-(brelse 3624) 48.0537 Tj
+(6110 6138 6140) 61.1592 Tj
+-11035.5 TJm
+(3740) 17.4741 Tj
 0 -189.8633 Td
-(argfd 4564) 43.6851 Tj
--15048.7 TJm
-(0212 3624 3627 3685) 83.0018 Tj
+(argfd 4563) 43.6851 Tj
+-13042.1 TJm
+(bread 3602) 43.6851 Tj
 17.4613 -199.3567 Td
-(4564 4607 4619 4630) 83.0018 Tj
+(4563 4606 4621 4633) 83.0018 Tj
 -8527.14 TJm
-(3697 3719 3723 3746) 83.0018 Tj
+(0211 3602 3682 3693) 83.0018 Tj
 17.4613 -208.8497 Td
 (4644 4656) 39.3166 Tj
 -13543.8 TJm
-(3875 3967 3970 3991) 83.0018 Tj
+(3713 3739 3811 3832) 83.0018 Tj
 0 -218.343 Td
-(argint 2694) 48.0537 Tj
+(argint 2794) 48.0537 Tj
 -14547 TJm
-(4037 4043 4072 4122) 83.0018 Tj
+(3917 4026 4068 4119) 83.0018 Tj
 17.4613 -227.8364 Td
-(0329 2694 2708 2724) 83.0018 Tj
+(0339 2794 2808 2824) 83.0018 Tj
 -8527.14 TJm
-(4173 4233 4237) 61.1592 Tj
+(4169 4222) 39.3166 Tj
 17.4613 -237.3293 Td
-(2837 2856 2868 4569) 83.0018 Tj
+(2931 2956 2969 4568) 83.0018 Tj
 -6520.6 TJm
-(BSIZE 3157) 43.6851 Tj
+(brelse 3624) 48.0537 Tj
 17.4613 -246.8223 Td
-(4607 4619 4858 4909) 83.0018 Tj
+(4621 4633 4858 4921) 83.0018 Tj
 -8527.14 TJm
-(3157 3169 3187 3193) 83.0018 Tj
+(0212 3624 3627 3684) 83.0018 Tj
 17.4613 -256.3153 Td
-(4910 4957) 39.3166 Tj
+(4922 4957) 39.3166 Tj
 -13543.8 TJm
-(3695 4119 4120 4121) 83.0018 Tj
+(3696 3719 3723 3746) 83.0018 Tj
 0 -265.8086 Td
-(argptr 2704) 48.0537 Tj
+(argptr 2804) 48.0537 Tj
 -14547 TJm
-(4165 4166 4169 4170) 83.0018 Tj
+(3817 3820 3841 3925) 83.0018 Tj
 17.4613 -275.302 Td
-(0330 2704 4607 4619) 83.0018 Tj
+(0340 2804 4621 4633) 83.0018 Tj
 -8527.14 TJm
-(4171 4221 4222 4224) 83.0018 Tj
+(4032 4074 4122 4173) 83.0018 Tj
 17.4613 -284.795 Td
 (4656 4982) 39.3166 Tj
--11537.3 TJm
-(buf 2900) 34.9481 Tj
+-13543.8 TJm
+(4233 4237) 39.3166 Tj
 0 -294.2883 Td
-(argstr 2721) 48.0537 Tj
--14547 TJm
-(0200 0211 0212 0213) 83.0018 Tj
+(argstr 2821) 48.0537 Tj
+-12540.5 TJm
+(BSIZE 3158) 43.6851 Tj
 17.4613 -303.7817 Td
-(0331 2721 4668 4758) 83.0018 Tj
+(0341 2821 4668 4758) 83.0018 Tj
 -8527.14 TJm
-(0253 2900 2904 2905) 83.0018 Tj
+(3158 3168 3182 3188) 83.0018 Tj
 17.4613 -313.2747 Td
-(4858 4908 4923 4935) 83.0018 Tj
+(4858 4906 4920 4935) 83.0018 Tj
 -8527.14 TJm
-(2906 3310 3325 3375) 83.0018 Tj
+(3694 4119 4120 4121) 83.0018 Tj
 17.4613 -322.7676 Td
 (4957) 17.4741 Tj
 -16052.1 TJm
-(3404 3454 3456 3459) 83.0018 Tj
+(4165 4166 4169 4170) 83.0018 Tj
 0 -332.2606 Td
 (BACK 6861) 39.3166 Tj
 -15550.3 TJm
-(3527 3529 3535 3540) 83.0018 Tj
+(4171 4221 4222 4224) 83.0018 Tj
 17.4613 -341.754 Td
 (6861 6974 7120 7389) 83.0018 Tj
--8527.14 TJm
-(3553 3564 3567 3577) 83.0018 Tj
+-6520.6 TJm
+(buf 3000) 34.9481 Tj
 0 -351.2473 Td
 (backcmd 6896 7114) 74.2647 Tj
 -11537 TJm
-(3601 3604 3614 3624) 83.0018 Tj
+(0200 0211 0212 0213) 83.0018 Tj
 17.4613 -360.7407 Td
 (6896 6909 6975 7114) 83.0018 Tj
 -8527.14 TJm
-(3639 3669 3681 3692) 83.0018 Tj
+(0253 3000 3004 3005) 83.0018 Tj
 17.4613 -370.2337 Td
 (7116 7242 7355 7390) 83.0018 Tj
 -8527.14 TJm
-(3707 3732 3854 3955) 83.0018 Tj
+(3006 3310 3325 3328) 83.0018 Tj
 0 -379.727 Td
-(BACKSPACE 6266) 61.1592 Tj
+(BACKSPACE 6450) 61.1592 Tj
 -13042 TJm
-(3979 4013 4055 4105) 83.0018 Tj
+(3375 3404 3454 3456) 83.0018 Tj
 17.4613 -389.2204 Td
-(6266 6284 6313 6476) 83.0018 Tj
+(6450 6467 6526 6532) 83.0018 Tj
 -8527.14 TJm
-(4155 4215 6354 6366) 83.0018 Tj
-17.4613 -398.7133 Td
-(6482) 17.4741 Tj
--16052.1 TJm
-(6369 6372 6435 6442) 83.0018 Tj
-0 -408.2067 Td
+(3459 3527 3531 3535) 83.0018 Tj
+0 -398.7137 Td
 (balloc 3704) 48.0537 Tj
 -14547 TJm
-(6453 6474 6487 6518) 83.0018 Tj
-17.4613 -417.7001 Td
-(3704 3725 4019 4030) 83.0018 Tj
+(3541 3553 3565 3568) 83.0018 Tj
+17.4613 -408.2071 Td
+(3704 3725 4017 4025) 83.0018 Tj
 -8527.14 TJm
-(6984 6987 6988 6989) 83.0018 Tj
-17.4613 -427.193 Td
-(4040) 17.4741 Tj
+(3601 3604 3614 3624) 83.0018 Tj
+17.4613 -417.7001 Td
+(4029) 17.4741 Tj
 -16052.1 TJm
-(7003 7015 7016 7019) 83.0018 Tj
-0 -436.6864 Td
-(BBLOCK 3196) 48.0537 Tj
+(3669 3680 3691 3707) 83.0018 Tj
+0 -427.1934 Td
+(BBLOCK 3191) 48.0537 Tj
 -14547 TJm
-(7020 7021 7025) 61.1592 Tj
-17.4613 -446.1798 Td
-(3196 3713 3739) 61.1592 Tj
--9028.94 TJm
-(bufhead 3535) 52.4222 Tj
-0 -455.6731 Td
-(bfree 3730) 43.6851 Tj
--15048.7 TJm
-(3535 3551 3552 3554) 83.0018 Tj
+(3732 3805 3829 3904) 83.0018 Tj
+17.4613 -436.6868 Td
+(3191 3713 3739) 61.1592 Tj
+-11035.5 TJm
+(4013 4057 4105 4155) 83.0018 Tj
+0 -446.1801 Td
+(B_BUSY 3009) 48.0537 Tj
+-14547 TJm
+(4215 6327 6338 6341) 83.0018 Tj
+17.4613 -455.6735 Td
+(3009 3458 3576 3577) 83.0018 Tj
+-8527.14 TJm
+(6344 6503 6524 6537) 83.0018 Tj
 17.4613 -465.1665 Td
-(3730 4060 4070) 61.1592 Tj
--11035.5 TJm
-(3555 3556 3557 3573) 83.0018 Tj
-0 -474.6594 Td
-(bget 3565) 39.3166 Tj
--15550.3 TJm
-(3587 3633 3634 3635) 83.0018 Tj
-17.4613 -484.1528 Td
-(3565 3596 3606) 61.1592 Tj
--11035.5 TJm
-(3636) 17.4741 Tj
-0 -493.6462 Td
-(binit 3538) 43.6851 Tj
--13042.1 TJm
-(buf_table_lock 3530) 83.0018 Tj
+(3588 3591 3616 3626) 83.0018 Tj
+-8527.14 TJm
+(6568 6601 6608 6984) 83.0018 Tj
+17.4613 -474.6594 Td
+(3638) 17.4741 Tj
+-16052.1 TJm
+(6987 6988 6989 7003) 83.0018 Tj
+0 -484.1528 Td
+(B_DIRTY 3011) 52.4222 Tj
+-14045.3 TJm
+(7015 7016 7019 7020) 83.0018 Tj
+17.4613 -493.6462 Td
+(3011 3387 3416 3421) 83.0018 Tj
+-8527.14 TJm
+(7021 7025) 39.3166 Tj
 Q
 Q
 q
@@ -1478,207 +1481,207 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:04 2008  cross-references  Page 2) 187.8461 Tj
-17.4613 -28.4801 Td
-(3530 3542 3569 3577) 83.0018 Tj
--8527.14 TJm
-(7248 7250 7253 7255) 83.0018 Tj
-17.4613 -37.9735 Td
-(3581 3592 3629 3641) 83.0018 Tj
--8527.14 TJm
-(7258 7260 7263 7264) 83.0018 Tj
-0 -47.4664 Td
-(bwrite 3614) 48.0537 Tj
--14547 TJm
-(7275 7278 7281 7285) 83.0018 Tj
-17.4613 -56.9598 Td
-(0213 3614 3617 3696) 83.0018 Tj
--8527.14 TJm
-(7300 7303 7308 7312) 83.0018 Tj
-17.4613 -66.4531 Td
-(3718 3745 3966 3990) 83.0018 Tj
--8527.14 TJm
-(7313 7316 7321 7322) 83.0018 Tj
-17.4613 -75.9465 Td
-(4041 4172) 39.3166 Tj
--13543.8 TJm
-(7328 7337 7338 7344) 83.0018 Tj
-0 -85.4399 Td
-(bzero 3690) 43.6851 Tj
--15048.7 TJm
-(7345 7351 7352 7361) 83.0018 Tj
-17.4613 -94.9332 Td
-(3690 3736) 39.3166 Tj
--13543.8 TJm
-(7364 7366 7372 7373) 83.0018 Tj
-0 -104.4266 Td
-(B_BUSY 2909) 48.0537 Tj
--14547 TJm
-(7378 7384 7390 7391) 83.0018 Tj
-17.4613 -113.9199 Td
-(2909 3458 3574 3576) 83.0018 Tj
--8527.14 TJm
-(7394) 17.4741 Tj
-17.4613 -123.4133 Td
-(3580 3588 3589 3616) 83.0018 Tj
--6520.6 TJm
-(CONSOLE 2957) 52.4222 Tj
-17.4613 -132.9067 Td
-(3626 3638) 39.3166 Tj
--13543.8 TJm
-(2957 6556 6557) 61.1592 Tj
-0 -142.4 Td
-(B_DIRTY 2911) 52.4222 Tj
--12038.8 TJm
-(console_init 6551) 74.2647 Tj
-17.4613 -151.8934 Td
-(2911 3387 3413 3418) 83.0018 Tj
--8527.14 TJm
-(0216 1231 6551) 61.1592 Tj
-17.4613 -161.3867 Td
-(3460 3479 3618) 61.1592 Tj
--9028.94 TJm
-(console_intr 6462) 74.2647 Tj
-0 -170.8801 Td
-(B_VALID 2910) 52.4222 Tj
+(Aug  8 01:04 2009  cross-references  Page 2) 187.8461 Tj
+0 -28.4801 Td
+(B_VALID 3010) 52.4222 Tj
 -14045.3 TJm
-(0218 6248 6462) 61.1592 Tj
-17.4613 -180.3735 Td
-(2910 3417 3460 3479) 83.0018 Tj
+(7394) 17.4741 Tj
+17.4613 -37.9735 Td
+(3010 3420 3460 3479) 83.0018 Tj
 -6520.6 TJm
-(console_lock 6270) 74.2647 Tj
-17.4613 -189.8668 Td
-(3574 3607) 39.3166 Tj
--13543.8 TJm
-(6270 6385 6431 6440) 83.0018 Tj
-0 -199.3602 Td
-(C 6081 6459) 48.0537 Tj
--14547 TJm
-(6443 6553) 39.3166 Tj
-17.4613 -208.8535 Td
-(6081 6129 6154 6155) 83.0018 Tj
--6520.6 TJm
-(console_read 6501) 74.2647 Tj
-17.4613 -218.3469 Td
-(6156 6157 6158 6160) 83.0018 Tj
+(CONSOLE 3290) 52.4222 Tj
+17.4613 -47.4664 Td
+(3607) 17.4741 Tj
+-16052.1 TJm
+(3290 6621 6622) 61.1592 Tj
+0 -56.9598 Td
+(bwrite 3614) 48.0537 Tj
+-12540.5 TJm
+(consoleinit 6616) 69.8962 Tj
+17.4613 -66.4531 Td
+(0213 3614 3617 3695) 83.0018 Tj
 -8527.14 TJm
-(6501 6557) 39.3166 Tj
-17.4613 -227.8403 Td
-(6459 6469 6472 6479) 83.0018 Tj
+(0216 1222 6616) 61.1592 Tj
+17.4613 -75.9461 Td
+(3718 3745 3816 3840) 83.0018 Tj
 -6520.6 TJm
-(console_write 6435) 78.6333 Tj
-17.4613 -237.3336 Td
-(6489 6519) 39.3166 Tj
+(consoleintr 6512) 69.8962 Tj
+17.4613 -85.4391 Td
+(4030 4172) 39.3166 Tj
 -13543.8 TJm
-(6435 6556) 39.3166 Tj
-0 -246.827 Td
-(CAPSLOCK 6062) 56.7907 Tj
--11537.1 TJm
-(cons_putc 6333) 61.1592 Tj
-17.4613 -256.3203 Td
-(6062 6095 6236) 61.1592 Tj
--11035.5 TJm
-(6333 6372 6396 6414) 83.0018 Tj
-0 -265.8137 Td
-(cga_putc 6301) 56.7907 Tj
+(0218 6298 6512) 61.1592 Tj
+0 -94.9324 Td
+(bzero 3689) 43.6851 Tj
+-13042.1 TJm
+(consoleread 6551) 69.8962 Tj
+17.4613 -104.4258 Td
+(3689 3736) 39.3166 Tj
+-13543.8 TJm
+(6551 6622) 39.3166 Tj
+0 -113.9192 Td
+(C 6131 6509) 48.0537 Tj
+-12540.5 TJm
+(consolewrite 6601) 74.2647 Tj
+17.4613 -123.4125 Td
+(6131 6179 6204 6205) 83.0018 Tj
+-8527.14 TJm
+(6601 6621) 39.3166 Tj
+17.4613 -132.9055 Td
+(6206 6207 6208 6210) 83.0018 Tj
+-6520.6 TJm
+(consputc 6487) 56.7907 Tj
+17.4613 -142.3985 Td
+(6509 6519 6522 6529) 83.0018 Tj
+-8527.14 TJm
+(6314 6344 6366 6384) 83.0018 Tj
+17.4613 -151.8914 Td
+(6539 6569) 39.3166 Tj
+-13543.8 TJm
+(6387 6391 6392 6487) 83.0018 Tj
+0 -161.3848 Td
+(CAPSLOCK 6112) 56.7907 Tj
 -13543.7 TJm
-(6417 6421 6422 6442) 83.0018 Tj
-17.4613 -275.3071 Td
-(6301 6342) 39.3166 Tj
+(6526 6532 6538 6608) 83.0018 Tj
+17.4613 -170.8782 Td
+(6112 6145 6286) 61.1592 Tj
+-9028.94 TJm
+(context 1518) 52.4222 Tj
+0 -180.3715 Td
+(cgaputc 6455) 52.4222 Tj
+-14045.3 TJm
+(0201 0318 1518 1537) 83.0018 Tj
+17.4613 -189.8645 Td
+(6455 6496) 39.3166 Tj
 -13543.8 TJm
-(6476 6482 6488) 61.1592 Tj
-0 -284.8004 Td
-(cli 0464) 34.9481 Tj
--14045.5 TJm
-(context 1515) 52.4222 Tj
-17.4613 -294.2938 Td
-(0464 0466 0914 1028) 83.0018 Tj
--8527.14 TJm
-(0201 0308 1515 1540) 83.0018 Tj
-17.4613 -303.7871 Td
-(1460 6336 6570) 61.1592 Tj
+(1559 1678 1787 1788) 83.0018 Tj
+0 -199.3578 Td
+(cli 0521) 34.9481 Tj
+-16052 TJm
+(1789 1790 1928 1967) 83.0018 Tj
+17.4613 -208.8512 Td
+(0521 0523 0915 1029) 83.0018 Tj
+-6520.6 TJm
+(cprintf 6352) 52.4222 Tj
+17.4613 -218.3442 Td
+(1460 6406 6490) 61.1592 Tj
 -11035.5 TJm
-(1560 1746 1747 1748) 83.0018 Tj
-0 -313.2805 Td
+(0217 1224 1258 1262) 83.0018 Tj
+0 -227.8375 Td
 (cmd 6865) 34.9481 Tj
 -16052 TJm
-(1832 1864 2129) 61.1592 Tj
-17.4613 -322.7739 Td
+(1676 1680 1682 2286) 83.0018 Tj
+17.4613 -237.3309 Td
 (6865 6877 6886 6887) 83.0018 Tj
--6520.6 TJm
-(copyproc 1709) 56.7907 Tj
-17.4613 -332.2672 Td
+-8527.14 TJm
+(2375 2637 2645 2650) 83.0018 Tj
+17.4613 -246.8239 Td
 (6892 6893 6898 6902) 83.0018 Tj
 -8527.14 TJm
-(0292 1709 1762 2812) 83.0018 Tj
-17.4613 -341.7606 Td
+(2882 3410 5637 5761) 83.0018 Tj
+17.4613 -256.3168 Td
 (6906 6915 6918 6923) 83.0018 Tj
--6520.6 TJm
-(cp 1573) 30.5796 Tj
-17.4613 -351.2539 Td
+-8527.14 TJm
+(5912 6352 6408 6409) 83.0018 Tj
+17.4613 -265.8098 Td
 (6931 6937 6941 6951) 83.0018 Tj
 -8527.14 TJm
-(1573 1657 1660 1661) 83.0018 Tj
-17.4613 -360.7473 Td
+(6410 6413) 39.3166 Tj
+17.4613 -275.3028 Td
 (6975 6977 7052 7055) 83.0018 Tj
--8527.14 TJm
-(1662 1663 1664 1665) 83.0018 Tj
-17.4613 -370.2407 Td
+-6520.6 TJm
+(cpu 1557 5751) 56.7907 Tj
+17.4613 -284.7958 Td
 (7057 7058 7059 7060) 83.0018 Tj
 -8527.14 TJm
-(1666 1857 1864 1872) 83.0018 Tj
-17.4613 -379.734 Td
+(0256 0269 1207 1224) 83.0018 Tj
+17.4613 -294.2887 Td
 (7063 7064 7066 7068) 83.0018 Tj
 -8527.14 TJm
-(1886 1905 1923 1924) 83.0018 Tj
-17.4613 -389.2274 Td
+(1255 1256 1258 1262) 83.0018 Tj
+17.4613 -303.7817 Td
 (7069 7070 7071 7072) 83.0018 Tj
 -8527.14 TJm
-(1928 2009 2014 2015) 83.0018 Tj
-17.4613 -398.7207 Td
+(1271 1279 1306 1365) 83.0018 Tj
+17.4613 -313.2747 Td
 (7073 7074 7075 7076) 83.0018 Tj
 -8527.14 TJm
-(2016 2020 2021 2026) 83.0018 Tj
-17.4613 -408.2141 Td
+(1389 1408 1446 1557) 83.0018 Tj
+17.4613 -322.7676 Td
 (7079 7080 7082 7084) 83.0018 Tj
 -8527.14 TJm
-(2030 2038 2039 2066) 83.0018 Tj
-17.4613 -417.7075 Td
+(1568 1577 1705 1707) 83.0018 Tj
+17.4613 -332.2606 Td
 (7085 7086 7087 7088) 83.0018 Tj
 -8527.14 TJm
-(2084 2090 2537 2539) 83.0018 Tj
-17.4613 -427.2008 Td
+(2615 2637 2638 2645) 83.0018 Tj
+17.4613 -341.7536 Td
 (7089 7100 7101 7103) 83.0018 Tj
 -8527.14 TJm
-(2541 2571 2579 2580) 83.0018 Tj
-17.4613 -436.6942 Td
+(2646 2650 2651 5512) 83.0018 Tj
+17.4613 -351.2465 Td
 (7105 7106 7107 7108) 83.0018 Tj
 -8527.14 TJm
-(2586 2591 2696 2710) 83.0018 Tj
-17.4613 -446.1875 Td
+(5513 5751 5761 6408) 83.0018 Tj
+17.4613 -360.7395 Td
 (7109 7110 7113 7114) 83.0018 Tj
--8527.14 TJm
-(2712 2726 2778 2780) 83.0018 Tj
-17.4613 -455.6809 Td
+-6520.6 TJm
+(CR0_PE 0910 1024) 69.8962 Tj
+17.4613 -370.2325 Td
 (7116 7118 7119 7120) 83.0018 Tj
 -8527.14 TJm
-(2783 2784 2812 2845) 83.0018 Tj
-17.4613 -465.1743 Td
+(0956 1056) 39.3166 Tj
+17.4613 -379.7255 Td
 (7121 7122 7212 7213) 83.0018 Tj
--8527.14 TJm
-(2873 4361 4571 4588) 83.0018 Tj
-17.4613 -474.6676 Td
+-6520.6 TJm
+(create 4801) 48.0537 Tj
+17.4613 -389.2184 Td
 (7214 7215 7217 7221) 83.0018 Tj
 -8527.14 TJm
-(4589 4646 4943 4944) 83.0018 Tj
-17.4613 -484.161 Td
+(4801 4821 4834 4838) 83.0018 Tj
+17.4613 -398.7114 Td
 (7224 7230 7231 7234) 83.0018 Tj
 -8527.14 TJm
-(4963 4969 4989 5097) 83.0018 Tj
-17.4613 -493.6543 Td
+(4862 4906 4923) 61.1592 Tj
+17.4613 -408.2044 Td
 (7237 7239 7242 7246) 83.0018 Tj
+-6520.6 TJm
+(CRTPORT 6451) 52.4222 Tj
+17.4613 -417.6973 Td
+(7248 7250 7253 7255) 83.0018 Tj
 -8527.14 TJm
-(5101 5102 5103 5104) 83.0018 Tj
+(6451 6460 6461 6462) 83.0018 Tj
+17.4613 -427.1903 Td
+(7258 7260 7263 7264) 83.0018 Tj
+-8527.14 TJm
+(6463 6479 6480 6481) 83.0018 Tj
+17.4613 -436.6833 Td
+(7275 7278 7281 7285) 83.0018 Tj
+-8527.14 TJm
+(6482) 17.4741 Tj
+17.4613 -446.1762 Td
+(7300 7303 7308 7312) 83.0018 Tj
+-6520.6 TJm
+(CTL 6109) 34.9481 Tj
+17.4613 -455.6692 Td
+(7313 7316 7321 7322) 83.0018 Tj
+-8527.14 TJm
+(6109 6135 6139 6285) 83.0018 Tj
+17.4613 -465.1622 Td
+(7328 7337 7338 7344) 83.0018 Tj
+-6520.6 TJm
+(devsw 3283) 43.6851 Tj
+17.4613 -474.6552 Td
+(7345 7351 7352 7361) 83.0018 Tj
+-8527.14 TJm
+(3283 3288 4108 4110) 83.0018 Tj
+17.4613 -484.1481 Td
+(7364 7366 7372 7373) 83.0018 Tj
+-8527.14 TJm
+(4158 4160 4406 6621) 83.0018 Tj
+17.4613 -493.6411 Td
+(7378 7384 7390 7391) 83.0018 Tj
+-8527.14 TJm
+(6622) 17.4741 Tj
 Q
 Q
 Q
@@ -1707,6 +1710,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -1724,207 +1729,207 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:04 2008  cross-references  Page 3) 187.8461 Tj
-17.4613 -28.4801 Td
-(5105 5106 5258 5279) 83.0018 Tj
--8527.14 TJm
-(4327 4328 4391 4665) 83.0018 Tj
-17.4613 -37.9735 Td
-(6511) 17.4741 Tj
--16052.1 TJm
-(4755 4805) 39.3166 Tj
-0 -47.4664 Td
-(cprintf 6377) 52.4222 Tj
--12038.8 TJm
-(disk_1_present 3327) 83.0018 Tj
-17.4613 -56.9598 Td
-(0217 1221 1255 1262) 83.0018 Tj
--8527.14 TJm
-(3327 3364 3462) 61.1592 Tj
-17.4613 -66.4531 Td
-(2127 2131 2133 2235) 83.0018 Tj
--6520.6 TJm
-(DPL_USER 0664) 56.7907 Tj
-17.4613 -75.9465 Td
-(2328 2565 2573 2578) 83.0018 Tj
--8527.14 TJm
-(0664 1690 1691 1767) 83.0018 Tj
-17.4613 -85.4399 Td
-(2782 5637 5761 5912) 83.0018 Tj
--8527.14 TJm
-(1768 2522 2586) 61.1592 Tj
-17.4613 -94.9332 Td
-(6377 6572 6573 6574) 83.0018 Tj
--6520.6 TJm
-(E0ESC 6066) 43.6851 Tj
-17.4613 -104.4266 Td
-(6577) 17.4741 Tj
--16052.1 TJm
-(6066 6220 6224 6225) 83.0018 Tj
-0 -113.9199 Td
-(cpu 1557 5751) 56.7907 Tj
--13543.7 TJm
-(6227 6230) 39.3166 Tj
-17.4613 -123.4133 Td
-(0256 0269 1221 1255) 83.0018 Tj
--6520.6 TJm
-(elfhdr 0805) 48.0537 Tj
-17.4613 -132.9067 Td
-(1257 1258 1260 1262) 83.0018 Tj
--8527.14 TJm
-(0805 1118 1122 5014) 83.0018 Tj
-17.4613 -142.4 Td
-(1271 1279 1306 1367) 83.0018 Tj
--6520.6 TJm
-(ELF_MAGIC 0802) 61.1592 Tj
-17.4613 -151.8934 Td
-(1391 1408 1442 1461) 83.0018 Tj
--8527.14 TJm
-(0802 1128 5029) 61.1592 Tj
-17.4613 -161.3867 Td
-(1462 1470 1472 1557) 83.0018 Tj
--6520.6 TJm
-(ELF_PROG_LOAD 0836) 78.6333 Tj
-17.4613 -170.8801 Td
-(1568 1674 1677 1794) 83.0018 Tj
--8527.14 TJm
-(0836 5034 5061) 61.1592 Tj
-17.4613 -180.3735 Td
-(1811 1814 1861 1864) 83.0018 Tj
--6520.6 TJm
-(EOI 5663) 34.9481 Tj
-17.4613 -189.8668 Td
-(2548 2565 2566 2573) 83.0018 Tj
--8527.14 TJm
-(5663 5734 5775) 61.1592 Tj
-17.4613 -199.3602 Td
-(2574 2578 2579 5512) 83.0018 Tj
--6520.6 TJm
-(ERROR 5681) 43.6851 Tj
-17.4613 -208.8535 Td
-(5513 5751 5761 6572) 83.0018 Tj
--8527.14 TJm
-(5681 5727) 39.3166 Tj
-0 -218.3469 Td
-(create 4801) 48.0537 Tj
--12540.5 TJm
-(ESR 5666) 34.9481 Tj
-17.4613 -227.8403 Td
-(4801 4843 4862 4911) 83.0018 Tj
--8527.14 TJm
-(5666 5730 5731) 61.1592 Tj
-17.4613 -237.3336 Td
-(4923) 17.4741 Tj
--14045.6 TJm
-(EXEC 6857) 39.3166 Tj
-0 -246.827 Td
-(CRTPORT 6264) 52.4222 Tj
--14045.3 TJm
-(6857 6922 7059 7365) 83.0018 Tj
-17.4613 -256.3203 Td
-(6264 6306 6307 6308) 83.0018 Tj
--6520.6 TJm
-(execcmd 6869 7053) 74.2647 Tj
-17.4613 -265.8137 Td
-(6309 6325 6326 6327) 83.0018 Tj
--8527.14 TJm
-(6869 6910 6923 7053) 83.0018 Tj
-17.4613 -275.3071 Td
-(6328) 17.4741 Tj
--16052.1 TJm
-(7055 7321 7327 7328) 83.0018 Tj
-0 -284.8004 Td
-(CTL 6059) 34.9481 Tj
--16052 TJm
-(7356 7366) 39.3166 Tj
-17.4613 -294.2938 Td
-(6059 6085 6089 6235) 83.0018 Tj
--6520.6 TJm
-(exit 2004) 39.3166 Tj
-0 -303.7871 Td
-(curproc 1789) 52.4222 Tj
--14045.3 TJm
-(0294 2004 2041 2538) 83.0018 Tj
-17.4613 -313.2805 Td
-(0293 1559 1573 1789) 83.0018 Tj
--8527.14 TJm
-(2542 2587 2822 6715) 83.0018 Tj
-17.4613 -322.7739 Td
-(1794 1829 1836) 61.1592 Tj
--11035.5 TJm
-(6718 6776 6781 6811) 83.0018 Tj
-0 -332.2668 Td
-(devsw 2950) 43.6851 Tj
--15048.7 TJm
-(6916 6925 6935 6980) 83.0018 Tj
-17.4613 -341.7602 Td
-(2950 2955 4108 4110) 83.0018 Tj
--8527.14 TJm
-(7028 7035) 39.3166 Tj
-17.4613 -351.2536 Td
-(4158 4160 4407 6556) 83.0018 Tj
--6520.6 TJm
-(fdalloc 4583) 52.4222 Tj
-17.4613 -360.7469 Td
-(6557) 17.4741 Tj
--16052.1 TJm
-(4583 4632 4874 4987) 83.0018 Tj
-0 -370.2403 Td
-(dinode 3173) 48.0537 Tj
--12540.5 TJm
-(fetchint 2666) 56.7907 Tj
-17.4613 -379.7336 Td
-(3173 3187 3855 3868) 83.0018 Tj
--8527.14 TJm
-(0332 2666 2696 4963) 83.0018 Tj
-17.4613 -389.227 Td
-(3956 3962 3980 3983) 83.0018 Tj
--6520.6 TJm
-(fetchstr 2678) 56.7907 Tj
-0 -398.7204 Td
-(dirent 3203) 48.0537 Tj
+(Aug  8 01:04 2009  cross-references  Page 3) 187.8461 Tj
+0 -28.4801 Td
+(dinode 3172) 48.0537 Tj
 -14547 TJm
-(0333 2678 2726 4969) 83.0018 Tj
-17.4613 -408.2137 Td
-(3203 4216 4223 4224) 83.0018 Tj
+(4582 4608 4874 4987) 83.0018 Tj
+17.4613 -37.9735 Td
+(3172 3182 3806 3812) 83.0018 Tj
 -6520.6 TJm
-(file 3100) 39.3166 Tj
-17.4613 -417.7071 Td
+(fetchint 2766) 56.7907 Tj
+17.4613 -47.4664 Td
+(3830 3833 3905 3918) 83.0018 Tj
+-8527.14 TJm
+(0342 2766 2796 4963) 83.0018 Tj
+0 -56.9598 Td
+(dirent 3203) 48.0537 Tj
+-12540.5 TJm
+(fetchstr 2778) 56.7907 Tj
+17.4613 -66.4531 Td
+(3203 4216 4223 4224) 83.0018 Tj
+-8527.14 TJm
+(0343 2778 2826 4969) 83.0018 Tj
+17.4613 -75.9461 Td
 (4255 4705 4754) 61.1592 Tj
--11035.5 TJm
-(0202 0225 0226 0227) 83.0018 Tj
-0 -427.2004 Td
+-9028.94 TJm
+(file 3250) 39.3166 Tj
+0 -85.4395 Td
 (dirlink 4252) 52.4222 Tj
 -14045.3 TJm
-(0229 0230 0231 0286) 83.0018 Tj
-17.4613 -436.6938 Td
+(0202 0225 0226 0227) 83.0018 Tj
+17.4613 -94.9328 Td
 (0234 4252 4267 4275) 83.0018 Tj
 -8527.14 TJm
-(1538 3100 4403 4409) 83.0018 Tj
-17.4613 -446.1872 Td
-(4684 4831 4842) 61.1592 Tj
--11035.5 TJm
-(4418 4425 4426 4427) 83.0018 Tj
-0 -455.6805 Td
+(0229 0230 0231 0287) 83.0018 Tj
+17.4613 -104.4258 Td
+(4684 4833 4837 4838) 83.0018 Tj
+-8527.14 TJm
+(1540 3250 3671 4403) 83.0018 Tj
+0 -113.9192 Td
 (dirlookup 4212) 61.1592 Tj
 -13042 TJm
-(4429 4437 4438 4452) 83.0018 Tj
-17.4613 -465.1739 Td
+(4409 4419 4422 4425) 83.0018 Tj
+17.4613 -123.4125 Td
 (0235 4212 4219 4259) 83.0018 Tj
 -8527.14 TJm
-(4454 4478 4502 4522) 83.0018 Tj
-17.4613 -474.6672 Td
+(4437 4438 4452 4454) 83.0018 Tj
+17.4613 -132.9055 Td
 (4374 4770 4811) 61.1592 Tj
 -11035.5 TJm
-(4558 4564 4567 4583) 83.0018 Tj
-0 -484.1606 Td
+(4476 4502 4522 4557) 83.0018 Tj
+0 -142.3989 Td
 (DIRSIZ 3201) 48.0537 Tj
 -14547 TJm
-(4603 4615 4627 4642) 83.0018 Tj
-17.4613 -493.654 Td
+(4563 4566 4582 4603) 83.0018 Tj
+17.4613 -151.8922 Td
 (3201 3205 4205 4272) 83.0018 Tj
 -8527.14 TJm
-(4653 4855 4979 5155) 83.0018 Tj
+(4617 4629 4642 4653) 83.0018 Tj
+17.4613 -161.3852 Td
+(4328 4329 4391 4665) 83.0018 Tj
+-8527.14 TJm
+(4855 4979 5155 5170) 83.0018 Tj
+17.4613 -170.8782 Td
+(4755 4805) 39.3166 Tj
+-13543.8 TJm
+(6309 6878 6933 6934) 83.0018 Tj
+0 -180.3715 Td
+(DPL_USER 0711) 56.7907 Tj
+-13543.7 TJm
+(7064 7072 7272) 61.1592 Tj
+17.4613 -189.8645 Td
+(0711 1725 1726 1817) 83.0018 Tj
+-6520.6 TJm
+(filealloc 4420) 61.1592 Tj
+17.4613 -199.3575 Td
+(1818 2572 2658 2667) 83.0018 Tj
+-8527.14 TJm
+(0225 4420 4874 5176) 83.0018 Tj
+0 -208.8508 Td
+(E0ESC 6116) 43.6851 Tj
+-13042.1 TJm
+(fileclose 4452) 61.1592 Tj
+17.4613 -218.3442 Td
+(6116 6270 6274 6275) 83.0018 Tj
+-8527.14 TJm
+(0226 2115 4452 4458) 83.0018 Tj
+17.4613 -227.8372 Td
+(6277 6280) 39.3166 Tj
+-13543.8 TJm
+(4647 4876 4990 4991) 83.0018 Tj
+0 -237.3305 Td
+(elfhdr 0855) 48.0537 Tj
+-14547 TJm
+(5204 5206) 39.3166 Tj
+17.4613 -246.8239 Td
+(0855 1118 1123 5014) 83.0018 Tj
+-6520.6 TJm
+(filedup 4438) 52.4222 Tj
+0 -256.3172 Td
+(ELF_MAGIC 0852) 61.1592 Tj
+-13042 TJm
+(0227 1880 4438 4442) 83.0018 Tj
+17.4613 -265.8106 Td
+(0852 1129 5028) 61.1592 Tj
+-11035.5 TJm
+(4610) 17.4741 Tj
+0 -275.304 Td
+(ELF_PROG_LOAD 0886) 78.6333 Tj
+-9028.81 TJm
+(fileinit 4413) 56.7907 Tj
+17.4613 -284.7973 Td
+(0886 5036 5067) 61.1592 Tj
+-11035.5 TJm
+(0228 1230 4413) 61.1592 Tj
+0 -294.2907 Td
+(EOI 5663) 34.9481 Tj
+-14045.5 TJm
+(fileread 4502) 56.7907 Tj
+17.4613 -303.784 Td
+(5663 5734 5775) 61.1592 Tj
+-11035.5 TJm
+(0229 4502 4517 4623) 83.0018 Tj
+0 -313.2774 Td
+(ERROR 5681) 43.6851 Tj
+-13042.1 TJm
+(filestat 4476) 56.7907 Tj
+17.4613 -322.7707 Td
+(5681 5727) 39.3166 Tj
+-13543.8 TJm
+(0230 4476 4658) 61.1592 Tj
+0 -332.2637 Td
+(ESR 5666) 34.9481 Tj
+-14045.5 TJm
+(filewrite 4522) 61.1592 Tj
+17.4613 -341.7571 Td
+(5666 5730 5731) 61.1592 Tj
+-11035.5 TJm
+(0231 4522 4537 4635) 83.0018 Tj
+0 -351.2504 Td
+(exec 5009) 39.3166 Tj
+-13543.8 TJm
+(FL_IF 0660) 43.6851 Tj
+17.4613 -360.7438 Td
+(0222 4972 5009 6768) 83.0018 Tj
+-8527.14 TJm
+(0660 1462 1468 1821) 83.0018 Tj
+17.4613 -370.2368 Td
+(6829 6830 6926 6927) 83.0018 Tj
+-8527.14 TJm
+(1963 5758) 39.3166 Tj
+0 -379.7301 Td
+(EXEC 6857) 39.3166 Tj
+-13543.8 TJm
+(fork 1854) 39.3166 Tj
+17.4613 -389.2235 Td
+(6857 6922 7059 7365) 83.0018 Tj
+-8527.14 TJm
+(0303 1854 2910 6760) 83.0018 Tj
+0 -398.7168 Td
+(execcmd 6869 7053) 74.2647 Tj
+-11537 TJm
+(6823 6825 7043 7045) 83.0018 Tj
+17.4613 -408.2102 Td
+(6869 6910 6923 7053) 83.0018 Tj
+-6520.6 TJm
+(fork1 7039) 43.6851 Tj
+17.4613 -417.7032 Td
+(7055 7321 7327 7328) 83.0018 Tj
+-8527.14 TJm
+(6900 6942 6954 6961) 83.0018 Tj
+17.4613 -427.1962 Td
+(7356 7366) 39.3166 Tj
+-13543.8 TJm
+(6976 7024 7039) 61.1592 Tj
+0 -436.6895 Td
+(exit 2104) 39.3166 Tj
+-13543.8 TJm
+(forkret 1984) 52.4222 Tj
+17.4613 -446.1829 Td
+(0302 2104 2140 2605) 83.0018 Tj
+-8527.14 TJm
+(1616 1790 1984) 61.1592 Tj
+17.4613 -455.6758 Td
+(2609 2659 2668 2916) 83.0018 Tj
+-6520.6 TJm
+(gatedesc 0801) 56.7907 Tj
+17.4613 -465.1688 Td
+(6715 6718 6761 6826) 83.0018 Tj
+-8527.14 TJm
+(0464 0467 0801 2560) 83.0018 Tj
+17.4613 -474.6618 Td
+(6831 6916 6925 6935) 83.0018 Tj
+-6520.6 TJm
+(getcallerpcs 1426) 74.2647 Tj
+17.4613 -484.1548 Td
+(6980 7028 7035) 61.1592 Tj
+-11035.5 TJm
+(0322 1390 1426 1678) 83.0018 Tj
+0 -493.6481 Td
+(fdalloc 4582) 52.4222 Tj
+-14045.3 TJm
+(6411) 17.4741 Tj
 Q
 Q
 q
@@ -1941,207 +1946,207 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:04 2008  cross-references  Page 4) 187.8461 Tj
-17.4613 -28.4801 Td
-(5170 6878 6933 6934) 83.0018 Tj
--8527.14 TJm
-(0236 3952 3972 4821) 83.0018 Tj
-17.4613 -37.9735 Td
-(7064 7072 7272) 61.1592 Tj
--9028.94 TJm
-(IBLOCK 3190) 48.0537 Tj
-0 -47.4664 Td
-(filealloc 4419) 61.1592 Tj
--13042 TJm
-(3190 3867 3961 3982) 83.0018 Tj
-17.4613 -56.9598 Td
-(0225 4419 4874 5176) 83.0018 Tj
--6520.6 TJm
-(ICRHI 5674) 43.6851 Tj
-0 -66.4531 Td
-(fileclose 4452) 61.1592 Tj
--13042 TJm
-(5674 5737 5821 5833) 83.0018 Tj
-17.4613 -75.9465 Td
-(0226 2015 4452 4458) 83.0018 Tj
--6520.6 TJm
-(ICRLO 5667) 43.6851 Tj
-17.4613 -85.4399 Td
-(4473 4647 4876 4990) 83.0018 Tj
--8527.14 TJm
-(5667 5738 5739 5822) 83.0018 Tj
-17.4613 -94.9332 Td
-(4991 5205 5209) 61.1592 Tj
--11035.5 TJm
-(5824 5834) 39.3166 Tj
-0 -104.4266 Td
-(filedup 4438) 52.4222 Tj
--12038.8 TJm
-(ID 5660) 30.5796 Tj
-17.4613 -113.9199 Td
-(0227 1741 4438 4442) 83.0018 Tj
--8527.14 TJm
-(5660 5693 5766) 61.1592 Tj
-17.4613 -123.4133 Td
-(4634) 17.4741 Tj
--14045.6 TJm
-(IDE_BSY 3312) 52.4222 Tj
-0 -132.9067 Td
-(fileinit 4412) 56.7907 Tj
--13543.7 TJm
-(3312 3336) 39.3166 Tj
-17.4613 -142.4 Td
-(0228 1229 4412) 61.1592 Tj
--9028.94 TJm
-(IDE_CMD_READ 3317) 74.2647 Tj
-0 -151.8934 Td
-(fileread 4502) 56.7907 Tj
--13543.7 TJm
-(3317 3391) 39.3166 Tj
-17.4613 -161.3867 Td
-(0229 4502 4517 4609) 83.0018 Tj
--6520.6 TJm
-(IDE_CMD_WRITE 3318) 78.6333 Tj
-0 -170.8801 Td
-(filestat 4478) 56.7907 Tj
--13543.7 TJm
-(3318 3388) 39.3166 Tj
-17.4613 -180.3735 Td
-(0230 4478 4658) 61.1592 Tj
--9028.94 TJm
-(IDE_DF 3314) 48.0537 Tj
-0 -189.8664 Td
-(filewrite 4522) 61.1592 Tj
--13042 TJm
-(3314 3338) 39.3166 Tj
-17.4613 -199.3598 Td
-(0231 4522 4537 4621) 83.0018 Tj
--6520.6 TJm
-(IDE_DRDY 3313) 56.7907 Tj
-0 -208.8532 Td
-(file_table_lock 4408) 87.3703 Tj
--10032 TJm
-(3313 3336) 39.3166 Tj
-17.4613 -218.3465 Td
-(4408 4414 4423 4428) 83.0018 Tj
--6520.6 TJm
-(IDE_ERR 3315) 52.4222 Tj
-17.4613 -227.8399 Td
-(4432 4440 4444 4456) 83.0018 Tj
--8527.14 TJm
-(3315 3338) 39.3166 Tj
-17.4613 -237.3332 Td
-(4460 4466) 39.3166 Tj
--11537.3 TJm
-(ide_init 3351) 56.7907 Tj
-0 -246.8266 Td
-(FL_IF 0610) 43.6851 Tj
--15048.7 TJm
-(0251 1232 3351) 61.1592 Tj
-17.4613 -256.32 Td
-(0610 1462 1468 1771) 83.0018 Tj
--6520.6 TJm
-(ide_intr 3402) 56.7907 Tj
-17.4613 -265.8133 Td
-(1855 5758) 39.3166 Tj
--13543.8 TJm
-(0252 2557 3402) 61.1592 Tj
-0 -275.3067 Td
-(fork1 7039) 43.6851 Tj
--13042.1 TJm
-(ide_lock 3324) 56.7907 Tj
-17.4613 -284.8 Td
-(6900 6942 6954 6961) 83.0018 Tj
--8527.14 TJm
-(3324 3355 3406 3408) 83.0018 Tj
-17.4613 -294.2934 Td
-(6976 7024 7039) 61.1592 Tj
--11035.5 TJm
-(3425 3465 3480 3482) 83.0018 Tj
-0 -303.7868 Td
-(forkret 1880) 52.4222 Tj
--12038.8 TJm
-(ide_rw 3454) 48.0537 Tj
-17.4613 -313.2801 Td
-(1614 1747 1880) 61.1592 Tj
--11035.5 TJm
-(0253 3454 3459 3461) 83.0018 Tj
-0 -322.7735 Td
-(forkret1 2484) 56.7907 Tj
--13543.7 TJm
-(3608 3619) 39.3166 Tj
-17.4613 -332.2664 Td
-(1615 1886 2483 2484) 83.0018 Tj
--6520.6 TJm
-(ide_start_request 3375) 96.1073 Tj
-0 -341.7598 Td
-(gatedesc 0751) 56.7907 Tj
--13543.7 TJm
-(3328 3375 3378 3423) 83.0018 Tj
-17.4613 -351.2532 Td
-(0414 0417 0751 2510) 83.0018 Tj
--8527.14 TJm
-(3475) 17.4741 Tj
-0 -360.7465 Td
-(getcallerpcs 1422) 74.2647 Tj
--9530.47 TJm
-(ide_wait_ready 3332) 83.0018 Tj
-17.4613 -370.2399 Td
-(0312 1392 1422 2129) 83.0018 Tj
--8527.14 TJm
-(3332 3358 3380 3413) 83.0018 Tj
-17.4613 -379.7332 Td
-(6575) 17.4741 Tj
--14045.6 TJm
-(idtinit 2528) 52.4222 Tj
-0 -389.2266 Td
+(Aug  8 01:04 2009  cross-references  Page 4) 187.8461 Tj
+0 -28.4801 Td
 (getcmd 6984) 48.0537 Tj
--14547 TJm
-(0340 1256 2528) 61.1592 Tj
-17.4613 -398.72 Td
+-12540.5 TJm
+(idestart 3375) 56.7907 Tj
+17.4613 -37.9735 Td
 (6984 7015) 39.3166 Tj
--11537.3 TJm
-(idup 3838) 39.3166 Tj
-0 -408.2133 Td
+-13543.8 TJm
+(3328 3375 3378 3426) 83.0018 Tj
+0 -47.4664 Td
 (gettoken 7156) 56.7907 Tj
 -13543.7 TJm
-(0237 1742 3838 4361) 83.0018 Tj
-17.4613 -417.7067 Td
+(3475) 17.4741 Tj
+17.4613 -56.9598 Td
 (7156 7241 7245 7257) 83.0018 Tj
 -6520.6 TJm
-(iget 3803) 39.3166 Tj
-17.4613 -427.2 Td
+(idewait 3332) 52.4222 Tj
+17.4613 -66.4531 Td
 (7270 7271 7307 7311) 83.0018 Tj
 -8527.14 TJm
-(3803 3823 3968 4234) 83.0018 Tj
-17.4613 -436.6934 Td
+(3332 3358 3380 3416) 83.0018 Tj
+17.4613 -75.9465 Td
 (7333) 17.4741 Tj
--16052.1 TJm
-(4359) 17.4741 Tj
-0 -446.1868 Td
-(growproc 1653) 56.7907 Tj
--11537.1 TJm
-(iinit 3789) 43.6851 Tj
-17.4613 -455.6801 Td
-(0295 1653 2858) 61.1592 Tj
--11035.5 TJm
-(0238 1230 3789) 61.1592 Tj
-0 -465.1735 Td
-(holding 1440) 52.4222 Tj
--12038.8 TJm
-(ilock 3852) 43.6851 Tj
-17.4613 -474.6665 Td
-(0313 1378 1404 1440) 83.0018 Tj
+-14045.6 TJm
+(idtinit 2578) 52.4222 Tj
+0 -85.4399 Td
+(growproc 1834) 56.7907 Tj
+-13543.7 TJm
+(0351 1259 2578) 61.1592 Tj
+17.4613 -94.9332 Td
+(0304 1834 2959) 61.1592 Tj
+-9028.94 TJm
+(idup 3888) 39.3166 Tj
+0 -104.4266 Td
+(havedisk1 3327) 61.1592 Tj
+-13042 TJm
+(0237 1881 3888 4361) 83.0018 Tj
+17.4613 -113.9199 Td
+(3327 3364 3462) 61.1592 Tj
+-9028.94 TJm
+(iget 3853) 39.3166 Tj
+0 -123.4133 Td
+(holding 1444) 52.4222 Tj
+-14045.3 TJm
+(3794 3818 3853 3873) 83.0018 Tj
+17.4613 -132.9067 Td
+(0323 1376 1404 1444) 83.0018 Tj
 -8527.14 TJm
-(0239 3852 3858 3878) 83.0018 Tj
-17.4613 -484.1598 Td
-(1859) 17.4741 Tj
--16052.1 TJm
-(4364 4481 4511 4531) 83.0018 Tj
-0 -493.6532 Td
-(ialloc 3952) 48.0537 Tj
+(4234 4359) 39.3166 Tj
+17.4613 -142.4 Td
+(1957) 17.4741 Tj
+-14045.6 TJm
+(iinit 3789) 43.6851 Tj
+0 -151.8934 Td
+(ialloc 3802) 48.0537 Tj
 -14547 TJm
+(0238 1231 3789) 61.1592 Tj
+17.4613 -161.3867 Td
+(0236 3802 3822 4820) 83.0018 Tj
+-6520.6 TJm
+(ilock 3902) 43.6851 Tj
+17.4613 -170.8801 Td
+(4821) 17.4741 Tj
+-16052.1 TJm
+(0239 3902 3908 3928) 83.0018 Tj
+0 -180.3735 Td
+(IBLOCK 3185) 48.0537 Tj
+-14547 TJm
+(4364 4479 4511 4531) 83.0018 Tj
+17.4613 -189.8664 Td
+(3185 3811 3832 3917) 83.0018 Tj
+-8527.14 TJm
 (4672 4683 4693 4762) 83.0018 Tj
+0 -199.3598 Td
+(I_BUSY 3277) 48.0537 Tj
+-14547 TJm
+(4774 4809 4813 4823) 83.0018 Tj
+17.4613 -208.8532 Td
+(3277 3911 3913 3936) 83.0018 Tj
+-8527.14 TJm
+(4867 4937 5023 6563) 83.0018 Tj
+17.4613 -218.3465 Td
+(3940 3957 3959) 61.1592 Tj
+-11035.5 TJm
+(6583 6610) 39.3166 Tj
+0 -227.8399 Td
+(ICRHI 5674) 43.6851 Tj
+-13042.1 TJm
+(inb 0403) 34.9481 Tj
+17.4613 -237.3332 Td
+(5674 5737 5821 5833) 83.0018 Tj
+-8527.14 TJm
+(0403 0928 0936 1154) 83.0018 Tj
+0 -246.8266 Td
+(ICRLO 5667) 43.6851 Tj
+-15048.7 TJm
+(3336 3363 5646 6264) 83.0018 Tj
+17.4613 -256.32 Td
+(5667 5738 5739 5822) 83.0018 Tj
+-8527.14 TJm
+(6267 6461 6463) 61.1592 Tj
+17.4613 -265.8133 Td
+(5824 5834) 39.3166 Tj
+-11537.3 TJm
+(initlock 1361) 56.7907 Tj
+0 -275.3067 Td
+(ID 5660) 30.5796 Tj
+174.613 -275.3067 Td
+(0324 1361 1622 2283) 83.0018 Tj
+17.461 -284.8 Td
+(5660 5693 5766) 61.1592 Tj
+-11035.5 TJm
+(2574 3355 3543 3791) 83.0018 Tj
+-0.0003 -294.2934 Td
+(IDE_BSY 3312) 52.4222 Tj
+-14045.3 TJm
+(4415 5184 6618 6619) 83.0018 Tj
+17.461 -303.7868 Td
+(3312 3336) 39.3166 Tj
+-11537.3 TJm
+(inode 3263) 43.6851 Tj
+-0.0003 -313.2801 Td
+(IDE_CMD_READ 3317) 74.2647 Tj
+-11537 TJm
+(0203 0234 0235 0236) 83.0018 Tj
+17.461 -322.7735 Td
+(3317 3391) 39.3166 Tj
+-13543.8 TJm
+(0237 0239 0240 0241) 83.0018 Tj
+-0.0003 -332.2664 Td
+(IDE_CMD_WRITE 3318) 78.6333 Tj
+-11035.3 TJm
+(0242 0243 0245 0246) 83.0018 Tj
+17.461 -341.7598 Td
+(3318 3388) 39.3166 Tj
+-13543.8 TJm
+(0247 0248 0249 1541) 83.0018 Tj
+-0.0003 -351.2532 Td
+(IDE_DF 3314) 48.0537 Tj
+-14547 TJm
+(3256 3263 3284 3285) 83.0018 Tj
+17.461 -360.7465 Td
+(3314 3338) 39.3166 Tj
+-13543.8 TJm
+(3674 3785 3794 3801) 83.0018 Tj
+-0.0003 -370.2399 Td
+(IDE_DRDY 3313) 56.7907 Tj
+-13543.7 TJm
+(3827 3852 3855 3861) 83.0018 Tj
+17.461 -379.7332 Td
+(3313 3336) 39.3166 Tj
+-13543.8 TJm
+(3887 3888 3902 3934) 83.0018 Tj
+-0.0003 -389.2266 Td
+(IDE_ERR 3315) 52.4222 Tj
+-14045.3 TJm
+(3952 3974 4010 4054) 83.0018 Tj
+17.461 -398.72 Td
+(3315 3338) 39.3166 Tj
+-13543.8 TJm
+(4085 4102 4152 4211) 83.0018 Tj
+-0.0003 -408.2133 Td
+(ideinit 3351) 52.4222 Tj
+-14045.3 TJm
+(4212 4252 4256 4353) 83.0018 Tj
+17.461 -417.7067 Td
+(0251 1232 3351) 61.1592 Tj
+-11035.5 TJm
+(4356 4388 4395 4666) 83.0018 Tj
+-0.0003 -427.2 Td
+(ideintr 3402) 52.4222 Tj
+-14045.3 TJm
+(4702 4753 4800 4804) 83.0018 Tj
+17.461 -436.6934 Td
+(0252 2624 3402) 61.1592 Tj
+-11035.5 TJm
+(4856 4904 4915 4933) 83.0018 Tj
+-0.0003 -446.1868 Td
+(idelock 3324) 52.4222 Tj
+-14045.3 TJm
+(5015 6551 6601) 61.1592 Tj
+17.461 -455.6801 Td
+(3324 3355 3407 3409) 83.0018 Tj
+-6520.6 TJm
+(INPUT_BUF 6500) 61.1592 Tj
+17.461 -465.1735 Td
+(3428 3465 3480 3482) 83.0018 Tj
+-8527.14 TJm
+(6500 6503 6524 6536) 83.0018 Tj
+-0.0003 -474.6665 Td
+(iderw 3454) 43.6851 Tj
+-15048.7 TJm
+(6537 6539 6568) 61.1592 Tj
+17.461 -484.1598 Td
+(0253 3454 3459 3461) 83.0018 Tj
+-6520.6 TJm
+(insl 0412) 39.3166 Tj
+17.461 -493.6532 Td
+(3608 3619) 39.3166 Tj
+-13543.8 TJm
+(0412 0414 1173 3417) 83.0018 Tj
 Q
 Q
 Q
@@ -2170,6 +2175,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -2187,207 +2194,207 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:04 2008  cross-references  Page 5) 187.8461 Tj
-17.4613 -28.4801 Td
-(4774 4809 4813 4825) 83.0018 Tj
--8527.14 TJm
-(5932) 17.4741 Tj
-17.4613 -37.9735 Td
-(4867 4937 5020 6444) 83.0018 Tj
--6520.6 TJm
-(IO_PIC1 5957) 52.4222 Tj
-17.4613 -47.4668 Td
-(6513 6533) 39.3166 Tj
--13543.8 TJm
-(5957 5970 5985 5994) 83.0018 Tj
-0 -56.9602 Td
-(inb 0353) 34.9481 Tj
--16052 TJm
-(5997 6002 6012 6026) 83.0018 Tj
-17.4613 -66.4535 Td
-(0353 0928 0936 1154) 83.0018 Tj
--8527.14 TJm
-(6027) 17.4741 Tj
-17.4613 -75.9469 Td
-(3336 3363 5646 6214) 83.0018 Tj
--6520.6 TJm
-(IO_PIC2 5958) 52.4222 Tj
-17.4613 -85.4403 Td
-(6217 6282 6307 6309) 83.0018 Tj
--8527.14 TJm
-(5958 5971 5986 6015) 83.0018 Tj
-0 -94.9336 Td
-(INDIRECT 3168) 56.7907 Tj
--13543.7 TJm
-(6016 6017 6020 6029) 83.0018 Tj
-17.4613 -104.427 Td
-(3168 4027 4030 4065) 83.0018 Tj
--8527.14 TJm
-(6030) 17.4741 Tj
-17.4613 -113.9203 Td
-(4066 4073) 39.3166 Tj
--11537.3 TJm
-(IO_RTC 5800) 48.0537 Tj
-0 -123.4137 Td
-(initlock 1363) 56.7907 Tj
--13543.7 TJm
-(5800 5813 5814) 61.1592 Tj
-17.4613 -132.9071 Td
-(0314 1363 1620 2231) 83.0018 Tj
--6520.6 TJm
-(IO_TIMER1 6609) 61.1592 Tj
-17.4613 -142.4004 Td
-(2524 3355 3542 3791) 83.0018 Tj
--8527.14 TJm
-(6609 6618 6628 6629) 83.0018 Tj
-17.4613 -151.8938 Td
-(4414 5184 6553 6554) 83.0018 Tj
--6520.6 TJm
-(IPB 3187) 34.9481 Tj
-0 -161.3871 Td
-(inode 3252) 43.6851 Tj
--15048.7 TJm
-(3187 3190 3196 3868) 83.0018 Tj
-17.4613 -170.8805 Td
-(0203 0234 0235 0236) 83.0018 Tj
--8527.14 TJm
-(3962 3983) 39.3166 Tj
-17.4613 -180.3739 Td
-(0237 0239 0240 0241) 83.0018 Tj
--6520.6 TJm
-(iput 3902) 39.3166 Tj
-17.4613 -189.8672 Td
-(0242 0243 0245 0246) 83.0018 Tj
--8527.14 TJm
-(0240 2020 3902 3908) 83.0018 Tj
-17.4613 -199.3606 Td
-(0247 0248 0249 1539) 83.0018 Tj
--8527.14 TJm
-(3927 4260 4382 4471) 83.0018 Tj
-17.4613 -208.8539 Td
-(2951 2952 3106 3252) 83.0018 Tj
--8527.14 TJm
-(4687 4943) 39.3166 Tj
-17.4613 -218.3473 Td
-(3675 3785 3802 3805) 83.0018 Tj
--6520.6 TJm
-(IRQ_ERROR 2384) 61.1592 Tj
-17.4613 -227.8407 Td
-(3811 3837 3838 3852) 83.0018 Tj
--8527.14 TJm
-(2384 5727) 39.3166 Tj
-17.4613 -237.334 Td
-(3884 3902 3924 3951) 83.0018 Tj
--6520.6 TJm
-(IRQ_IDE 2383) 52.4222 Tj
-17.4613 -246.8274 Td
-(3977 4010 4052 4082) 83.0018 Tj
--8527.14 TJm
-(2383 2556 3356 3357) 83.0018 Tj
-17.4613 -256.3207 Td
-(4102 4152 4211 4212) 83.0018 Tj
--6520.6 TJm
-(IRQ_KBD 2382) 52.4222 Tj
-17.4613 -265.8141 Td
-(4252 4256 4353 4356) 83.0018 Tj
--8527.14 TJm
-(2382 2560 6560 6561) 83.0018 Tj
-17.4613 -275.3075 Td
-(4388 4395 4666 4702) 83.0018 Tj
--6520.6 TJm
-(IRQ_OFFSET 2379) 65.5277 Tj
-17.4613 -284.8008 Td
-(4753 4800 4804 4856) 83.0018 Tj
--8527.14 TJm
-(2379 2547 2556 2560) 83.0018 Tj
-17.4613 -294.2942 Td
-(4903 4921 4933 5015) 83.0018 Tj
--8527.14 TJm
-(2564 2591 5707 5714) 83.0018 Tj
-17.4613 -303.7875 Td
-(6435 6501) 39.3166 Tj
--13543.8 TJm
-(5727 5917 5931 5997) 83.0018 Tj
-0 -313.2809 Td
-(INPUT_BUF 6450) 61.1592 Tj
--13042 TJm
-(6016) 17.4741 Tj
-17.4613 -322.7743 Td
-(6450 6453 6474 6486) 83.0018 Tj
--6520.6 TJm
-(IRQ_SLAVE 5960) 61.1592 Tj
-17.4613 -332.2676 Td
-(6487 6489 6518) 61.1592 Tj
--11035.5 TJm
-(5960 5964 6002 6017) 83.0018 Tj
-0 -341.761 Td
-(insl 0362) 39.3166 Tj
--13543.8 TJm
-(IRQ_SPURIOUS 2385) 74.2647 Tj
-17.4613 -351.2543 Td
-(0362 1173 3414) 61.1592 Tj
--11035.5 TJm
-(2385 2564 5707) 61.1592 Tj
-0 -360.7477 Td
+(Aug  8 01:04 2009  cross-references  Page 5) 187.8461 Tj
+0 -28.4801 Td
 (INT_DISABLED 5869) 74.2647 Tj
--9530.47 TJm
-(IRQ_TIMER 2381) 61.1592 Tj
-17.4613 -370.2411 Td
-(5869 5917) 39.3166 Tj
--13543.8 TJm
-(2381 2547 2591 5714) 83.0018 Tj
-0 -379.7344 Td
-(IOAPIC 5858) 48.0537 Tj
--14547 TJm
-(6630) 17.4741 Tj
-17.4613 -389.2278 Td
-(5858 5908) 39.3166 Tj
--11537.3 TJm
-(isdirempty 4702) 65.5277 Tj
-0 -398.7211 Td
-(ioapic_enable 5923) 78.6333 Tj
--11035.3 TJm
-(4702 4709 4778) 61.1592 Tj
-17.4613 -408.2145 Td
-(0256 3357 5923 6561) 83.0018 Tj
--6520.6 TJm
-(ismp 5514) 39.3166 Tj
-0 -417.7079 Td
-(ioapic_id 5516) 61.1592 Tj
--13042 TJm
-(0276 1233 5514 5613) 83.0018 Tj
-17.4613 -427.2012 Td
-(0257 5516 5628 5911) 83.0018 Tj
--8527.14 TJm
-(5905 5925) 39.3166 Tj
-17.4613 -436.6946 Td
-(5912) 17.4741 Tj
--14045.6 TJm
-(itrunc 4052) 48.0537 Tj
-0 -446.1879 Td
-(ioapic_init 5901) 69.8962 Tj
--12038.7 TJm
-(3675 3911 4052) 61.1592 Tj
-17.4613 -455.6813 Td
-(0258 1226 5901 5912) 83.0018 Tj
--6520.6 TJm
-(iunlock 3884) 52.4222 Tj
-0 -465.1747 Td
-(ioapic_read 5884) 69.8962 Tj
--12038.7 TJm
-(0241 3884 3887 3926) 83.0018 Tj
-17.4613 -474.6676 Td
-(5884 5909 5910) 61.1592 Tj
--11035.5 TJm
-(4371 4483 4514 4534) 83.0018 Tj
-0 -484.161 Td
-(ioapic_write 5891) 74.2647 Tj
 -11537 TJm
-(4679 4880 4942 6439) 83.0018 Tj
-17.4613 -493.6543 Td
+(2436 2636 5707) 61.1592 Tj
+17.4613 -37.9735 Td
+(5869 5917) 39.3166 Tj
+-11537.3 TJm
+(IRQ_TIMER 2431) 61.1592 Tj
+0 -47.4664 Td
+(ioapic 5877) 48.0537 Tj
+-14547 TJm
+(2431 2614 2663 5714) 83.0018 Tj
+17.4613 -56.9598 Td
+(5607 5627 5628 5874) 83.0018 Tj
+-8527.14 TJm
+(6680) 17.4741 Tj
+17.4613 -66.4531 Td
+(5877 5886 5887 5893) 83.0018 Tj
+-6520.6 TJm
+(isdirempty 4702) 65.5277 Tj
+17.4613 -75.9465 Td
+(5894 5908) 39.3166 Tj
+-13543.8 TJm
+(4702 4709 4778) 61.1592 Tj
+0 -85.4399 Td
+(IOAPIC 5858) 48.0537 Tj
+-12540.5 TJm
+(ismp 5514) 39.3166 Tj
+17.4613 -94.9332 Td
+(5858 5908) 39.3166 Tj
+-13543.8 TJm
+(0277 1233 5514 5613) 83.0018 Tj
+0 -104.4266 Td
+(ioapicenable 5923) 74.2647 Tj
+-11537 TJm
+(5905 5925) 39.3166 Tj
+17.4613 -113.9199 Td
+(0256 3357 5923 6626) 83.0018 Tj
+-6520.6 TJm
+(itrunc 4054) 48.0537 Tj
+0 -123.4133 Td
+(ioapicid 5516) 56.7907 Tj
+-13543.7 TJm
+(3674 3961 4054) 61.1592 Tj
+17.4613 -132.9067 Td
+(0257 5516 5628 5911) 83.0018 Tj
+-6520.6 TJm
+(iunlock 3934) 52.4222 Tj
+17.4613 -142.4 Td
+(5912) 17.4741 Tj
+-16052.1 TJm
+(0241 3934 3937 3976) 83.0018 Tj
+0 -151.8934 Td
+(ioapicinit 5901) 65.5277 Tj
+-12540.3 TJm
+(4371 4481 4514 4534) 83.0018 Tj
+17.4613 -161.3867 Td
+(0258 1221 5901 5912) 83.0018 Tj
+-8527.14 TJm
+(4679 4880 4942 6556) 83.0018 Tj
+0 -170.8801 Td
+(ioapicread 5884) 65.5277 Tj
+-12540.3 TJm
+(6605) 17.4741 Tj
+17.4613 -180.3735 Td
+(5884 5909 5910) 61.1592 Tj
+-9028.94 TJm
+(iunlockput 3974) 65.5277 Tj
+0 -189.8664 Td
+(ioapicwrite 5891) 69.8962 Tj
+-12038.7 TJm
+(0242 3974 4366 4375) 83.0018 Tj
+17.4613 -199.3598 Td
 (5891 5917 5918 5931) 83.0018 Tj
 -8527.14 TJm
-(6506) 17.4741 Tj
+(4378 4674 4685 4688) 83.0018 Tj
+17.4613 -208.8532 Td
+(5932) 17.4741 Tj
+-16052.1 TJm
+(4696 4766 4771 4779) 83.0018 Tj
+0 -218.3465 Td
+(IO_PIC1 5957) 52.4222 Tj
+-14045.3 TJm
+(4780 4791 4795 4812) 83.0018 Tj
+17.4613 -227.8399 Td
+(5957 5970 5985 5994) 83.0018 Tj
+-8527.14 TJm
+(4816 4840 4869 4877) 83.0018 Tj
+17.4613 -237.3332 Td
+(5997 6002 6012 6026) 83.0018 Tj
+-8527.14 TJm
+(4908 4925 4939 5077) 83.0018 Tj
+17.4613 -246.8266 Td
+(6027) 17.4741 Tj
+-16052.1 TJm
+(5118) 17.4741 Tj
+0 -256.32 Td
+(IO_PIC2 5958) 52.4222 Tj
+-12038.8 TJm
+(iupdate 3827) 52.4222 Tj
+17.4613 -265.8133 Td
+(5958 5971 5986 6015) 83.0018 Tj
+-8527.14 TJm
+(0243 3827 3963 4080) 83.0018 Tj
+17.4613 -275.3067 Td
+(6016 6017 6020 6029) 83.0018 Tj
+-8527.14 TJm
+(4178 4678 4695 4789) 83.0018 Tj
+17.4613 -284.8 Td
+(6030) 17.4741 Tj
+-16052.1 TJm
+(4794 4827 4831) 61.1592 Tj
+0 -294.2934 Td
+(IO_RTC 5800) 48.0537 Tj
+-12540.5 TJm
+(I_VALID 3278) 52.4222 Tj
+17.4613 -303.7868 Td
+(5800 5813 5814) 61.1592 Tj
+-11035.5 TJm
+(3278 3916 3926 3955) 83.0018 Tj
+0 -313.2801 Td
+(IO_TIMER1 6659) 61.1592 Tj
+-11035.5 TJm
+(kalloc 2354) 48.0537 Tj
+17.4613 -322.7735 Td
+(6659 6668 6678 6679) 83.0018 Tj
+-8527.14 TJm
+(0261 1283 1772 1812) 83.0018 Tj
+0 -332.2664 Td
+(IPB 3182) 34.9481 Tj
+-16052 TJm
+(1838 1865 2354 2360) 83.0018 Tj
+17.4613 -341.7598 Td
+(3182 3185 3191 3812) 83.0018 Tj
+-8527.14 TJm
+(2375 5058 5178) 61.1592 Tj
+17.4613 -351.2532 Td
+(3833 3918) 39.3166 Tj
+-11537.3 TJm
+(KBDATAP 6104) 52.4222 Tj
+0 -360.7465 Td
+(iput 3952) 39.3166 Tj
+-15550.3 TJm
+(6104 6267) 39.3166 Tj
+17.4613 -370.2399 Td
+(0240 2120 3952 3958) 83.0018 Tj
+-6520.6 TJm
+(kbdgetc 6256) 52.4222 Tj
+17.4613 -379.7332 Td
+(3977 4260 4382 4471) 83.0018 Tj
+-8527.14 TJm
+(6256 6298) 39.3166 Tj
+17.4613 -389.2266 Td
+(4689 4943) 39.3166 Tj
+-11537.3 TJm
+(kbdintr 6296) 52.4222 Tj
+0 -398.72 Td
+(IRQ_COM1 2433) 56.7907 Tj
+-13543.7 TJm
+(0266 2628 6296) 61.1592 Tj
+17.4613 -408.2133 Td
+(2433 2631) 39.3166 Tj
+-11537.3 TJm
+(KBS_DIB 6103) 52.4222 Tj
+0 -417.7067 Td
+(IRQ_ERROR 2435) 61.1592 Tj
+-13042 TJm
+(6103 6265) 39.3166 Tj
+17.4613 -427.2 Td
+(2435 5727) 39.3166 Tj
+-11537.3 TJm
+(KBSTATP 6102) 52.4222 Tj
+0 -436.6934 Td
+(IRQ_IDE 2434) 52.4222 Tj
+-14045.3 TJm
+(6102 6264) 39.3166 Tj
+17.4613 -446.1868 Td
+(2434 2623 3356 3357) 83.0018 Tj
+-6520.6 TJm
+(KEY_DEL 6128) 52.4222 Tj
+0 -455.6801 Td
+(IRQ_KBD 2432) 52.4222 Tj
+-14045.3 TJm
+(6128 6169 6191 6215) 83.0018 Tj
+17.4613 -465.1735 Td
+(2432 2627 6625 6626) 83.0018 Tj
+-6520.6 TJm
+(KEY_DN 6122) 48.0537 Tj
+0 -474.6665 Td
+(IRQ_SLAVE 5960) 61.1592 Tj
+-13042 TJm
+(6122 6165 6187 6211) 83.0018 Tj
+17.4613 -484.1598 Td
+(5960 5964 6002 6017) 83.0018 Tj
+-6520.6 TJm
+(KEY_END 6120) 52.4222 Tj
+0 -493.6532 Td
+(IRQ_SPURIOUS 2436) 74.2647 Tj
+-11537 TJm
+(6120 6168 6190 6214) 83.0018 Tj
 Q
 Q
 q
@@ -2404,207 +2411,207 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:04 2008  cross-references  Page 6) 187.8461 Tj
+(Aug  8 01:04 2009  cross-references  Page 6) 187.8461 Tj
 0 -28.4801 Td
-(iunlockput 3924) 65.5277 Tj
--10533.8 TJm
-(KEY_RT 6074) 48.0537 Tj
-17.4613 -37.9735 Td
-(0242 3924 4366 4375) 83.0018 Tj
--8527.14 TJm
-(6074 6117 6139 6163) 83.0018 Tj
-17.4613 -47.4664 Td
-(4378 4674 4686 4692) 83.0018 Tj
--6520.6 TJm
-(KEY_UP 6071) 48.0537 Tj
-17.4613 -56.9594 Td
-(4696 4766 4771 4779) 83.0018 Tj
--8527.14 TJm
-(6071 6115 6137 6161) 83.0018 Tj
-17.4613 -66.4524 Td
-(4780 4787 4791 4812) 83.0018 Tj
--6520.6 TJm
-(kfree 2255) 43.6851 Tj
-17.4613 -75.9453 Td
-(4815 4822 4833 4834) 83.0018 Tj
--8527.14 TJm
-(0262 1662 1731 2069) 83.0018 Tj
-17.4613 -85.4383 Td
-(4845 4869 4877 4913) 83.0018 Tj
--8527.14 TJm
-(2070 2236 2255 2260) 83.0018 Tj
-17.4613 -94.9313 Td
-(4925 4939 5069 5112) 83.0018 Tj
--8527.14 TJm
-(5101 5111 5202 5228) 83.0018 Tj
-0 -104.4246 Td
-(iupdate 3977) 52.4222 Tj
--12038.8 TJm
-(kill 1976) 39.3166 Tj
-17.4613 -113.918 Td
-(0243 3913 3977 4077) 83.0018 Tj
--8527.14 TJm
-(0296 1976 2578 2839) 83.0018 Tj
-17.4613 -123.411 Td
-(4178 4678 4695 4790) 83.0018 Tj
--8527.14 TJm
-(6817) 17.4741 Tj
-17.4613 -132.9039 Td
-(4829 4840) 39.3166 Tj
--11537.3 TJm
-(kinit 2225) 43.6851 Tj
-0 -142.3973 Td
-(I_BUSY 3266) 48.0537 Tj
--14547 TJm
-(0263 1227 2225) 61.1592 Tj
-17.4613 -151.8907 Td
-(3266 3861 3863 3886) 83.0018 Tj
--6520.6 TJm
-(KSTACKSIZE 0152) 65.5277 Tj
-17.4613 -161.3836 Td
-(3890 3907 3909 3915) 83.0018 Tj
--8527.14 TJm
-(0152 1283 1284 1680) 83.0018 Tj
-0 -170.877 Td
-(I_VALID 3267) 52.4222 Tj
--14045.3 TJm
-(1719 1723 1731 2070) 83.0018 Tj
-17.4613 -180.3703 Td
-(3267 3866 3876 3905) 83.0018 Tj
--6520.6 TJm
-(lapicw 5690) 48.0537 Tj
-0 -189.8633 Td
-(kalloc 2304) 48.0537 Tj
--14547 TJm
-(5690 5707 5713 5714) 83.0018 Tj
-17.4613 -199.3567 Td
-(0261 1283 1657 1719) 83.0018 Tj
--8527.14 TJm
-(5715 5718 5719 5724) 83.0018 Tj
-17.4613 -208.8497 Td
-(1730 1764 2231 2304) 83.0018 Tj
--8527.14 TJm
-(5727 5730 5731 5734) 83.0018 Tj
-17.4613 -218.3426 Td
-(2310 2328 5052 5178) 83.0018 Tj
--8527.14 TJm
-(5737 5738 5743 5775) 83.0018 Tj
-0 -227.836 Td
-(kalloc_lock 2212) 69.8962 Tj
--12038.7 TJm
-(5821 5822 5824 5833) 83.0018 Tj
-17.4613 -237.3293 Td
-(2212 2231 2265 2293) 83.0018 Tj
--8527.14 TJm
-(5834) 17.4741 Tj
-17.4613 -246.8223 Td
-(2312 2316 2322 2326) 83.0018 Tj
--6520.6 TJm
-(lapic_eoi 5772) 61.1592 Tj
-0 -256.3157 Td
-(KBDATAP 6054) 52.4222 Tj
--14045.3 TJm
-(0271 2554 2558 2562) 83.0018 Tj
-17.4613 -265.809 Td
-(6054 6217) 39.3166 Tj
--13543.8 TJm
-(2567 5772) 39.3166 Tj
-0 -275.3024 Td
-(kbd_getc 6206) 56.7907 Tj
--11537.1 TJm
-(lapic_init 5701) 65.5277 Tj
-17.4613 -284.7958 Td
-(6206 6248) 39.3166 Tj
--13543.8 TJm
-(0272 1220 1258 5701) 83.0018 Tj
-0 -294.2891 Td
-(kbd_intr 6246) 56.7907 Tj
--11537.1 TJm
-(lapic_startap 5805) 78.6333 Tj
-17.4613 -303.7825 Td
-(0266 2561 6246) 61.1592 Tj
--11035.5 TJm
-(0273 1286 5805) 61.1592 Tj
-0 -313.2758 Td
-(KBSTATP 6052) 52.4222 Tj
--12038.8 TJm
-(lgdt 0403) 39.3166 Tj
-17.4613 -322.7692 Td
-(6052 6214) 39.3166 Tj
--13543.8 TJm
-(0403 0411 0954 1054) 83.0018 Tj
-0 -332.2622 Td
-(KBS_DIB 6053) 52.4222 Tj
--14045.3 TJm
-(1700) 17.4741 Tj
-17.4613 -341.7555 Td
-(6053 6215) 39.3166 Tj
--11537.3 TJm
-(lidt 0417) 39.3166 Tj
-0 -351.2489 Td
-(KEY_DEL 6078) 52.4222 Tj
--14045.3 TJm
-(0417 0425 2530) 61.1592 Tj
-17.4613 -360.7422 Td
-(6078 6119 6141 6165) 83.0018 Tj
--6520.6 TJm
-(LINT0 5679) 43.6851 Tj
-0 -370.2356 Td
-(KEY_DN 6072) 48.0537 Tj
--14547 TJm
-(5679 5718) 39.3166 Tj
-17.4613 -379.729 Td
-(6072 6115 6137 6161) 83.0018 Tj
--6520.6 TJm
-(LINT1 5680) 43.6851 Tj
-0 -389.2223 Td
-(KEY_END 6070) 52.4222 Tj
--14045.3 TJm
+(KEY_HOME 6119) 56.7907 Tj
+-13543.7 TJm
 (5680 5719) 39.3166 Tj
-17.4613 -398.7157 Td
-(6070 6118 6140 6164) 83.0018 Tj
+17.4613 -37.9735 Td
+(6119 6168 6190 6214) 83.0018 Tj
 -6520.6 TJm
 (LIST 6860) 39.3166 Tj
-0 -408.209 Td
-(KEY_HOME 6069) 56.7907 Tj
--13543.7 TJm
+0 -47.4664 Td
+(KEY_INS 6127) 52.4222 Tj
+-14045.3 TJm
 (6860 6940 7107 7383) 83.0018 Tj
-17.4613 -417.7024 Td
-(6069 6118 6140 6164) 83.0018 Tj
+17.4613 -56.9598 Td
+(6127 6169 6191 6215) 83.0018 Tj
 -6520.6 TJm
 (listcmd 6890 7101) 74.2647 Tj
-0 -427.1958 Td
-(KEY_INS 6077) 52.4222 Tj
--14045.3 TJm
+0 -66.4531 Td
+(KEY_LF 6123) 48.0537 Tj
+-14547 TJm
 (6890 6911 6941 7101) 83.0018 Tj
-17.4613 -436.6891 Td
-(6077 6119 6141 6165) 83.0018 Tj
+17.4613 -75.9465 Td
+(6123 6167 6189 6213) 83.0018 Tj
 -8527.14 TJm
 (7103 7246 7357 7384) 83.0018 Tj
-0 -446.1825 Td
-(KEY_LF 6073) 48.0537 Tj
--12540.5 TJm
-(LPTPORT 6265) 52.4222 Tj
-17.4613 -455.6758 Td
-(6073 6117 6139 6163) 83.0018 Tj
+0 -85.4399 Td
+(KEY_PGDN 6126) 56.7907 Tj
+-11537.1 TJm
+(loadfsgs 0514) 56.7907 Tj
+17.4613 -94.9332 Td
+(6126 6166 6188 6212) 83.0018 Tj
 -8527.14 TJm
-(6265 6282 6286 6287) 83.0018 Tj
-0 -465.1692 Td
-(KEY_PGDN 6076) 56.7907 Tj
--13543.7 TJm
-(6288) 17.4741 Tj
-17.4613 -474.6622 Td
-(6076 6116 6138 6162) 83.0018 Tj
+(0514 1712) 39.3166 Tj
+0 -104.4266 Td
+(KEY_PGUP 6125) 56.7907 Tj
+-11537.1 TJm
+(ltr 0479) 34.9481 Tj
+17.4613 -113.9199 Td
+(6125 6166 6188 6212) 83.0018 Tj
+-8527.14 TJm
+(0479 0481 1731) 61.1592 Tj
+0 -123.4133 Td
+(KEY_RT 6124) 48.0537 Tj
+-12540.5 TJm
+(MAXARGS 6863) 52.4222 Tj
+17.4613 -132.9067 Td
+(6124 6167 6189 6213) 83.0018 Tj
+-8527.14 TJm
+(6863 6871 6872 7340) 83.0018 Tj
+0 -142.4 Td
+(KEY_UP 6121) 48.0537 Tj
+-12540.5 TJm
+(MAXFILE 3169) 52.4222 Tj
+17.4613 -151.8934 Td
+(6121 6165 6187 6211) 83.0018 Tj
+-8527.14 TJm
+(3169 4165 4166) 61.1592 Tj
+0 -161.3867 Td
+(kfree 2305) 43.6851 Tj
+-13042.1 TJm
+(memcmp 5311) 48.0537 Tj
+17.4613 -170.8801 Td
+(0262 1843 1866 2169) 83.0018 Tj
+-8527.14 TJm
+(0330 5311 5543 5588) 83.0018 Tj
+17.4613 -180.3735 Td
+(2170 2287 2305 2310) 83.0018 Tj
 -6520.6 TJm
-(lpt_putc 6278) 56.7907 Tj
-0 -484.1555 Td
-(KEY_PGUP 6075) 56.7907 Tj
+(memmove 5327) 52.4222 Tj
+17.4613 -189.8668 Td
+(5107 5117 5202 5223) 83.0018 Tj
+-8527.14 TJm
+(0331 1276 1814 1841) 83.0018 Tj
+0 -199.3602 Td
+(kill 2075) 39.3166 Tj
+-15550.3 TJm
+(1871 3683 3839 3924) 83.0018 Tj
+17.4613 -208.8535 Td
+(0305 2075 2650 2933) 83.0018 Tj
+-8527.14 TJm
+(4121 4171 4329 4331) 83.0018 Tj
+17.4613 -218.3469 Td
+(6767) 17.4741 Tj
+-16052.1 TJm
+(5088 5327 6474) 61.1592 Tj
+0 -227.8403 Td
+(kinit 2277) 43.6851 Tj
+-13042.1 TJm
+(memset 5304) 48.0537 Tj
+17.4613 -237.3336 Td
+(0263 1226 2277) 61.1592 Tj
+-11035.5 TJm
+(0332 1789 1813 1816) 83.0018 Tj
+0 -246.827 Td
+(ksegment 1703) 56.7907 Tj
 -13543.7 TJm
-(6278 6341) 39.3166 Tj
-17.4613 -493.6489 Td
-(6075 6116 6138 6162) 83.0018 Tj
+(1842 2313 3694 3814) 83.0018 Tj
+17.4613 -256.3203 Td
+(0309 1219 1257 1703) 83.0018 Tj
+-8527.14 TJm
+(4784 4959 5061 5075) 83.0018 Tj
+0 -265.8137 Td
+(KSTACKSIZE 0152) 65.5277 Tj
+-12540.3 TJm
+(5304 6476 6987 7058) 83.0018 Tj
+17.4613 -275.3071 Td
+(0152 1283 1284 1730) 83.0018 Tj
+-8527.14 TJm
+(7069 7085 7106 7119) 83.0018 Tj
+17.4613 -284.8004 Td
+(1772 1776 1866 2170) 83.0018 Tj
 -6520.6 TJm
-(ltr 0429) 34.9481 Tj
+(microdelay 5781) 65.5277 Tj
+0 -294.2938 Td
+(lapiceoi 5772) 56.7907 Tj
+-13543.7 TJm
+(0274 5781 5823 5825) 83.0018 Tj
+17.4613 -303.7871 Td
+(0271 2621 2625 2629) 83.0018 Tj
+-8527.14 TJm
+(5835) 17.4741 Tj
+17.4613 -313.2805 Td
+(2633 2639 5772) 61.1592 Tj
+-9028.94 TJm
+(min 3673) 34.9481 Tj
+0 -322.7739 Td
+(lapicinit 5701) 61.1592 Tj
+-13042 TJm
+(3673 4120 4170) 61.1592 Tj
+17.4613 -332.2668 Td
+(0272 1218 1256 5701) 83.0018 Tj
+-6520.6 TJm
+(mp 5402) 30.5796 Tj
+0 -341.7602 Td
+(lapicstartap 5805) 74.2647 Tj
+-11537 TJm
+(5402 5507 5536 5542) 83.0018 Tj
+17.4613 -351.2536 Td
+(0273 1286 5805) 61.1592 Tj
+-11035.5 TJm
+(5543 5544 5555 5560) 83.0018 Tj
+0 -360.7469 Td
+(lapicw 5690) 48.0537 Tj
+-14547 TJm
+(5564 5565 5568 5569) 83.0018 Tj
+17.4613 -370.2403 Td
+(5690 5707 5713 5714) 83.0018 Tj
+-8527.14 TJm
+(5580 5583 5585 5587) 83.0018 Tj
+17.4613 -379.7336 Td
+(5715 5718 5719 5724) 83.0018 Tj
+-8527.14 TJm
+(5594 5604 5610 5642) 83.0018 Tj
+17.4613 -389.227 Td
+(5727 5730 5731 5734) 83.0018 Tj
+-6520.6 TJm
+(mpbcpu 5519) 48.0537 Tj
+17.4613 -398.7204 Td
+(5737 5738 5743 5775) 83.0018 Tj
+-8527.14 TJm
+(0278 1218 1255 5519) 83.0018 Tj
+17.4613 -408.2137 Td
+(5821 5822 5824 5833) 83.0018 Tj
+-6520.6 TJm
+(MPBUS 5452) 43.6851 Tj
+17.4613 -417.7071 Td
+(5834) 17.4741 Tj
+-16052.1 TJm
+(5452 5631) 39.3166 Tj
+0 -427.2004 Td
+(lgdt 0453) 39.3166 Tj
+-13543.8 TJm
+(mpconf 5413) 48.0537 Tj
+17.4613 -436.6938 Td
+(0453 0461 0954 1054) 83.0018 Tj
+-8527.14 TJm
+(5413 5579 5582 5587) 83.0018 Tj
+17.4613 -446.1872 Td
+(1711) 17.4741 Tj
+-16052.1 TJm
+(5605) 17.4741 Tj
+0 -455.6805 Td
+(lidt 0467) 39.3166 Tj
+-13543.8 TJm
+(mpconfig 5580) 56.7907 Tj
+17.4613 -465.1739 Td
+(0467 0475 2580) 61.1592 Tj
+-11035.5 TJm
+(5580 5610) 39.3166 Tj
+0 -474.6668 Td
+(LINT0 5679) 43.6851 Tj
+-13042.1 TJm
+(mpinit 5601) 48.0537 Tj
+17.4613 -484.1602 Td
+(5679 5718) 39.3166 Tj
+-13543.8 TJm
+(0279 1217 5601 5637) 83.0018 Tj
+0 -493.6536 Td
+(LINT1 5680) 43.6851 Tj
+-15048.7 TJm
+(5638) 17.4741 Tj
 Q
 Q
 Q
@@ -2633,6 +2640,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -2650,207 +2659,207 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:04 2008  cross-references  Page 7) 187.8461 Tj
-17.4613 -28.4801 Td
-(0429 0431 1701) 61.1592 Tj
--11035.5 TJm
-(5638) 17.4741 Tj
-0 -37.9735 Td
-(MAXARGS 6863) 52.4222 Tj
--12038.8 TJm
-(mp_search 5556) 61.1592 Tj
-17.4613 -47.4664 Td
-(6863 6871 6872 7340) 83.0018 Tj
--8527.14 TJm
-(5556 5585) 39.3166 Tj
-0 -56.9598 Td
-(MAXFILE 3170) 52.4222 Tj
--12038.8 TJm
-(mp_search1 5537) 65.5277 Tj
-17.4613 -66.4531 Td
-(3170 4165 4166) 61.1592 Tj
--11035.5 TJm
-(5537 5564 5568 5571) 83.0018 Tj
-0 -75.9465 Td
-(memcmp 5315) 48.0537 Tj
--12540.5 TJm
-(NADDRS 3166) 48.0537 Tj
-17.4613 -85.4399 Td
-(0320 5315 5543 5588) 83.0018 Tj
--8527.14 TJm
-(3166 3179 3263) 61.1592 Tj
-0 -94.9332 Td
-(memmove 5331) 52.4222 Tj
--12038.8 TJm
-(namecmp 4203) 52.4222 Tj
-17.4613 -104.4266 Td
-(0321 1276 1660 1727) 83.0018 Tj
--8527.14 TJm
-(0244 4203 4228 4765) 83.0018 Tj
-17.4613 -113.9199 Td
-(1737 1780 3684 3874) 83.0018 Tj
--6520.6 TJm
-(namei 4389) 43.6851 Tj
-17.4613 -123.4133 Td
-(3989 4121 4171 4328) 83.0018 Tj
--8527.14 TJm
-(0245 1765 4389 4670) 83.0018 Tj
-17.4613 -132.9067 Td
-(4330 5080 5331 6320) 83.0018 Tj
--8527.14 TJm
-(4865 4935 5018) 61.1592 Tj
-0 -142.4 Td
-(memset 5303) 48.0537 Tj
--12540.5 TJm
-(nameiparent 4396) 69.8962 Tj
-17.4613 -151.8934 Td
-(0322 1217 1661 1746) 83.0018 Tj
--8527.14 TJm
-(0246 4396 4681 4760) 83.0018 Tj
-17.4613 -161.3867 Td
-(1766 2263 3695 3964) 83.0018 Tj
--8527.14 TJm
-(4807) 17.4741 Tj
-17.4613 -170.8801 Td
-(4784 4959 5055 5067) 83.0018 Tj
--6520.6 TJm
-(NBUF 0156) 39.3166 Tj
-17.4613 -180.3735 Td
-(5303 6322 6987 7058) 83.0018 Tj
--8527.14 TJm
-(0156 3529 3553) 61.1592 Tj
-17.4613 -189.8668 Td
-(7069 7085 7106 7119) 83.0018 Tj
--6520.6 TJm
-(NCPU 0153) 39.3166 Tj
-0 -199.3602 Td
-(microdelay 5781) 65.5277 Tj
--12540.3 TJm
-(0153 1568 5512) 61.1592 Tj
-17.4613 -208.8535 Td
-(5781 5823 5825 5835) 83.0018 Tj
--6520.6 TJm
-(NDEV 0158) 39.3166 Tj
-0 -218.3469 Td
-(min 3674) 34.9481 Tj
--16052 TJm
-(0158 4108 4158 4407) 83.0018 Tj
-17.4613 -227.8403 Td
-(3674 4120 4170) 61.1592 Tj
--9028.94 TJm
-(NDIRECT 3167) 52.4222 Tj
-0 -237.3336 Td
-(mp 5402) 30.5796 Tj
-174.613 -237.3336 Td
-(3166 3167 3170 4015) 83.0018 Tj
-17.461 -246.827 Td
-(5402 5507 5536 5542) 83.0018 Tj
--8527.14 TJm
-(4023 4058) 39.3166 Tj
-17.461 -256.3203 Td
-(5543 5544 5555 5560) 83.0018 Tj
--6520.6 TJm
-(NELEM 0346) 43.6851 Tj
-17.461 -265.8137 Td
-(5564 5565 5568 5569) 83.0018 Tj
--8527.14 TJm
-(0346 2123 2779 4961) 83.0018 Tj
-17.461 -275.3071 Td
-(5580 5583 5585 5587) 83.0018 Tj
--6520.6 TJm
-(NFILE 0155) 43.6851 Tj
-17.461 -284.8004 Td
-(5594 5604 5610 5642) 83.0018 Tj
--8527.14 TJm
-(0155 4409 4424) 61.1592 Tj
--0.0003 -294.2938 Td
-(MPBUS 5452) 43.6851 Tj
--13042.1 TJm
-(NINDIRECT 3169) 61.1592 Tj
-17.461 -303.7871 Td
-(5452 5631) 39.3166 Tj
--13543.8 TJm
-(3169 3170 4025 4068) 83.0018 Tj
--0.0003 -313.2805 Td
-(mpconf 5413) 48.0537 Tj
--12540.5 TJm
-(NINODE 0157) 48.0537 Tj
-17.461 -322.7739 Td
-(5413 5579 5582 5587) 83.0018 Tj
--8527.14 TJm
-(0157 3785 3811) 61.1592 Tj
-17.461 -332.2672 Td
-(5605) 17.4741 Tj
--14045.6 TJm
-(NO 6056) 30.5796 Tj
--0.0003 -341.7606 Td
+(Aug  8 01:04 2009  cross-references  Page 7) 187.8461 Tj
+0 -28.4801 Td
 (mpioapic 5439) 56.7907 Tj
--13543.7 TJm
-(6056 6102 6105 6107) 83.0018 Tj
-17.461 -351.2539 Td
+-11537.1 TJm
+(NINDIRECT 3168) 61.1592 Tj
+17.4613 -37.9735 Td
 (5439 5607 5627 5629) 83.0018 Tj
 -8527.14 TJm
-(6108 6109 6110 6112) 83.0018 Tj
--0.0003 -360.7473 Td
+(3168 3169 4022 4070) 83.0018 Tj
+0 -47.4664 Td
+(MPIOAPIC 5453) 56.7907 Tj
+-11537.1 TJm
+(NINODE 0157) 48.0537 Tj
+17.4613 -56.9598 Td
+(5453 5626) 39.3166 Tj
+-13543.8 TJm
+(0157 3785 3861) 61.1592 Tj
+0 -66.4531 Td
 (MPIOINTR 5454) 56.7907 Tj
--13543.7 TJm
-(6124 6127 6129 6130) 83.0018 Tj
-17.461 -370.2407 Td
+-11537.1 TJm
+(NO 6106) 30.5796 Tj
+17.4613 -75.9465 Td
 (5454 5632) 39.3166 Tj
 -13543.8 TJm
-(6131 6132 6134 6152) 83.0018 Tj
--0.0003 -379.734 Td
+(6106 6152 6155 6157) 83.0018 Tj
+0 -85.4399 Td
 (MPLINTR 5455) 52.4222 Tj
 -14045.3 TJm
-(6153 6155 6156 6157) 83.0018 Tj
-17.461 -389.2274 Td
+(6158 6159 6160 6162) 83.0018 Tj
+17.4613 -94.9332 Td
 (5455 5633) 39.3166 Tj
 -13543.8 TJm
-(6158) 17.4741 Tj
--0.0003 -398.7207 Td
+(6174 6177 6179 6180) 83.0018 Tj
+0 -104.4266 Td
 (mpmain 1253) 48.0537 Tj
--12540.5 TJm
-(NOFILE 0154) 48.0537 Tj
-17.461 -408.2141 Td
-(1208 1239 1253 1255) 83.0018 Tj
+-14547 TJm
+(6181 6182 6184 6202) 83.0018 Tj
+17.4613 -113.9199 Td
+(1211 1239 1253 1258) 83.0018 Tj
 -8527.14 TJm
-(0154 1538 1739 2013) 83.0018 Tj
-17.461 -417.7075 Td
+(6203 6205 6206 6207) 83.0018 Tj
+17.4613 -123.4133 Td
 (1285) 17.4741 Tj
 -16052.1 TJm
-(4571 4587) 39.3166 Tj
--0.0003 -427.2008 Td
+(6208) 17.4741 Tj
+0 -132.9067 Td
 (mpproc 5428) 48.0537 Tj
 -12540.5 TJm
-(NPROC 0150) 43.6851 Tj
-17.461 -436.6942 Td
+(NOFILE 0154) 48.0537 Tj
+17.4613 -142.4 Td
 (5428 5606 5619 5624) 83.0018 Tj
 -8527.14 TJm
-(0150 1610 1633 1821) 83.0018 Tj
--0.0003 -446.1875 Td
-(mp_bcpu 5519) 52.4222 Tj
--14045.3 TJm
-(1957 1981 2029 2062) 83.0018 Tj
-17.461 -455.6809 Td
-(0277 1220 1257 5519) 83.0018 Tj
--8527.14 TJm
-(2119) 17.4741 Tj
--0.0003 -465.1743 Td
-(mp_config 5580) 61.1592 Tj
--11035.5 TJm
-(NSEGS 1506) 43.6851 Tj
-17.461 -474.6672 Td
-(5580 5610) 39.3166 Tj
+(0154 1540 1878 2113) 83.0018 Tj
+0 -151.8934 Td
+(MPPROC 5451) 48.0537 Tj
+-14547 TJm
+(4570 4586) 39.3166 Tj
+17.4613 -161.3867 Td
+(5451 5618) 39.3166 Tj
+-11537.3 TJm
+(NPROC 0150) 43.6851 Tj
+0 -170.8801 Td
+(mpsearch 5556) 56.7907 Tj
+-13543.7 TJm
+(0150 1610 1669 1760) 83.0018 Tj
+17.4613 -180.3735 Td
+(5556 5585) 39.3166 Tj
 -13543.8 TJm
-(1506 1562) 39.3166 Tj
--0.0003 -484.1606 Td
-(mp_init 5601) 52.4222 Tj
--12038.8 TJm
+(1918 2057 2080 2129) 83.0018 Tj
+0 -189.8664 Td
+(mpsearch1 5537) 61.1592 Tj
+-13042 TJm
+(2162) 17.4741 Tj
+17.4613 -199.3598 Td
+(5537 5564 5568 5571) 83.0018 Tj
+-6520.6 TJm
+(NSEGS 1508) 43.6851 Tj
+0 -208.8532 Td
+(namecmp 4203) 52.4222 Tj
+-14045.3 TJm
+(1508 1561) 39.3166 Tj
+17.4613 -218.3465 Td
+(0244 4203 4228 4765) 83.0018 Tj
+-6520.6 TJm
 (nulterminate 7352) 74.2647 Tj
-17.461 -493.654 Td
-(0278 1219 5601 5637) 83.0018 Tj
--8527.14 TJm
+0 -227.8399 Td
+(namei 4389) 43.6851 Tj
+-15048.7 TJm
 (7215 7230 7352 7373) 83.0018 Tj
+17.4613 -237.3332 Td
+(0245 1826 4389 4670) 83.0018 Tj
+-8527.14 TJm
+(7379 7380 7385 7386) 83.0018 Tj
+17.4613 -246.8266 Td
+(4865 4935 5021) 61.1592 Tj
+-11035.5 TJm
+(7391) 17.4741 Tj
+0 -256.32 Td
+(nameiparent 4396) 69.8962 Tj
+-10032.1 TJm
+(NUMLOCK 6113) 52.4222 Tj
+17.4613 -265.8133 Td
+(0246 4354 4369 4381) 83.0018 Tj
+-8527.14 TJm
+(6113 6146) 39.3166 Tj
+17.4613 -275.3067 Td
+(4396 4681 4760 4807) 83.0018 Tj
+-6520.6 TJm
+(O_CREATE 3053) 56.7907 Tj
+0 -284.8 Td
+(namex 4354) 43.6851 Tj
+-15048.7 TJm
+(3053 4861 7278 7281) 83.0018 Tj
+17.4613 -294.2934 Td
+(4354 4392 4398) 61.1592 Tj
+-9028.94 TJm
+(O_RDONLY 3050) 56.7907 Tj
+0 -303.7868 Td
+(NBUF 0156) 39.3166 Tj
+-15550.3 TJm
+(3050 4868 7275) 61.1592 Tj
+17.4613 -313.2801 Td
+(0156 3531 3553) 61.1592 Tj
+-9028.94 TJm
+(O_RDWR 3052) 48.0537 Tj
+0 -322.7735 Td
+(ncpu 5515) 39.3166 Tj
+-15550.3 TJm
+(3052 4886 6814 6816) 83.0018 Tj
+17.4613 -332.2664 Td
+(1224 1278 1569 3357) 83.0018 Tj
+-8527.14 TJm
+(7007) 17.4741 Tj
+17.4613 -341.7598 Td
+(5515 5609 5620 5622) 83.0018 Tj
+-6520.6 TJm
+(outb 0421) 39.3166 Tj
+17.4613 -351.2532 Td
+(5623) 17.4741 Tj
+-16052.1 TJm
+(0421 0933 0941 1164) 83.0018 Tj
+0 -360.7465 Td
+(NCPU 0153) 39.3166 Tj
+-15550.3 TJm
+(1165 1166 1167 1168) 83.0018 Tj
+17.4613 -370.2399 Td
+(0153 1568 5512) 61.1592 Tj
+-11035.5 TJm
+(1169 3361 3370 3381) 83.0018 Tj
+0 -379.7332 Td
+(NDEV 0158) 39.3166 Tj
+-15550.3 TJm
+(3382 3383 3384 3385) 83.0018 Tj
+17.4613 -389.2266 Td
+(0158 4108 4158 4406) 83.0018 Tj
+-8527.14 TJm
+(3386 3388 3391 5645) 83.0018 Tj
+0 -398.72 Td
+(NDIRECT 3167) 52.4222 Tj
+-14045.3 TJm
+(5646 5813 5814 5970) 83.0018 Tj
+17.4613 -408.2133 Td
+(3167 3169 3178 3274) 83.0018 Tj
+-8527.14 TJm
+(5971 5985 5986 5994) 83.0018 Tj
+17.4613 -417.7067 Td
+(4015 4020 4024 4025) 83.0018 Tj
+-8527.14 TJm
+(5997 6002 6012 6015) 83.0018 Tj
+17.4613 -427.2 Td
+(4060 4067 4068 4075) 83.0018 Tj
+-8527.14 TJm
+(6016 6017 6020 6026) 83.0018 Tj
+17.4613 -436.6934 Td
+(4076) 17.4741 Tj
+-16052.1 TJm
+(6027 6029 6030 6460) 83.0018 Tj
+0 -446.1868 Td
+(NELEM 0362) 43.6851 Tj
+-15048.7 TJm
+(6462 6479 6480 6481) 83.0018 Tj
+17.4613 -455.6801 Td
+(0362 1672 2879 4961) 83.0018 Tj
+-8527.14 TJm
+(6482 6677 6678 6679) 83.0018 Tj
+0 -465.1735 Td
+(nextpid 1615) 52.4222 Tj
+-12038.8 TJm
+(outsl 0433) 43.6851 Tj
+17.4613 -474.6665 Td
+(1615 1768) 39.3166 Tj
+-13543.8 TJm
+(0433 0435 3389) 61.1592 Tj
+0 -484.1598 Td
+(NFILE 0155) 43.6851 Tj
+-13042.1 TJm
+(outw 0427) 39.3166 Tj
+17.4613 -493.6532 Td
+(0155 4409 4425) 61.1592 Tj
+-11035.5 TJm
+(0427 0982 0984 1082) 83.0018 Tj
 Q
 Q
 q
@@ -2867,207 +2876,207 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:04 2008  cross-references  Page 8) 187.8461 Tj
+(Aug  8 01:04 2009  cross-references  Page 8) 187.8461 Tj
 17.4613 -28.4801 Td
-(7379 7380 7385 7386) 83.0018 Tj
--8527.14 TJm
-(6901 6920 6953 7032) 83.0018 Tj
-17.4613 -37.9735 Td
-(7391) 17.4741 Tj
--16052.1 TJm
-(7045 7228 7272 7306) 83.0018 Tj
-0 -47.4664 Td
-(NUMLOCK 6063) 52.4222 Tj
--14045.3 TJm
-(7310 7336 7341) 61.1592 Tj
-17.4613 -56.9598 Td
-(6063 6096) 39.3166 Tj
--11537.3 TJm
-(parseblock 7301) 65.5277 Tj
-0 -66.4531 Td
-(outb 0371) 39.3166 Tj
--15550.3 TJm
-(7301 7306 7325) 61.1592 Tj
-17.4613 -75.9465 Td
-(0371 0933 0941 1164) 83.0018 Tj
--6520.6 TJm
-(parsecmd 7218) 56.7907 Tj
-17.4613 -85.4399 Td
-(1165 1166 1167 1168) 83.0018 Tj
--8527.14 TJm
-(6902 7025 7218) 61.1592 Tj
-17.4613 -94.9332 Td
-(1169 3361 3370 3381) 83.0018 Tj
--6520.6 TJm
-(parseexec 7317) 61.1592 Tj
-17.4613 -104.4266 Td
-(3382 3383 3384 3385) 83.0018 Tj
--8527.14 TJm
-(7214 7255 7317) 61.1592 Tj
-17.4613 -113.9199 Td
-(3386 3388 3391 5645) 83.0018 Tj
--6520.6 TJm
-(parseline 7235) 61.1592 Tj
-17.4613 -123.4133 Td
-(5646 5813 5814 5970) 83.0018 Tj
--8527.14 TJm
-(7212 7224 7235 7246) 83.0018 Tj
-17.4613 -132.9067 Td
-(5971 5985 5986 5994) 83.0018 Tj
--8527.14 TJm
-(7308) 17.4741 Tj
-17.4613 -142.4 Td
-(5997 6002 6012 6015) 83.0018 Tj
--6520.6 TJm
-(parsepipe 7251) 61.1592 Tj
-17.4613 -151.8934 Td
-(6016 6017 6020 6026) 83.0018 Tj
--8527.14 TJm
-(7213 7239 7251 7258) 83.0018 Tj
-17.4613 -161.3867 Td
-(6027 6029 6030 6286) 83.0018 Tj
--6520.6 TJm
-(parseredirs 7264) 69.8962 Tj
-17.4613 -170.8801 Td
-(6287 6288 6306 6308) 83.0018 Tj
--8527.14 TJm
-(7264 7312 7331 7342) 83.0018 Tj
-17.4613 -180.3735 Td
-(6325 6326 6327 6328) 83.0018 Tj
--6520.6 TJm
-(PCINT 5678) 43.6851 Tj
-17.4613 -189.8668 Td
-(6627 6628 6629) 61.1592 Tj
--11035.5 TJm
-(5678 5724) 39.3166 Tj
-0 -199.3602 Td
-(outsl 0383) 43.6851 Tj
--13042.1 TJm
-(peek 7201) 39.3166 Tj
-17.4613 -208.8535 Td
-(0383 3389) 39.3166 Tj
--13543.8 TJm
-(7201 7225 7240 7244) 83.0018 Tj
-0 -218.3469 Td
-(outw 0377) 39.3166 Tj
--15550.3 TJm
-(7256 7269 7305 7309) 83.0018 Tj
-17.4613 -227.8403 Td
-(0377 1143 1144) 61.1592 Tj
--11035.5 TJm
-(7324 7332) 39.3166 Tj
-0 -237.3336 Td
-(O_CREATE 3003) 56.7907 Tj
--11537.1 TJm
-(pic_enable 5975) 65.5277 Tj
-17.4613 -246.827 Td
-(3003 4861 7278 7281) 83.0018 Tj
--8527.14 TJm
-(0282 3356 5975 6560) 83.0018 Tj
-0 -256.3203 Td
-(O_RDONLY 3000) 56.7907 Tj
+(1084) 17.4741 Tj
+-14045.6 TJm
+(picsetmask 5967) 65.5277 Tj
+0 -37.9735 Td
+(O_WRONLY 3051) 56.7907 Tj
 -13543.7 TJm
-(6630) 17.4741 Tj
-17.4613 -265.8137 Td
-(3000 7275) 39.3166 Tj
--11537.3 TJm
-(pic_init 5982) 56.7907 Tj
-0 -275.3071 Td
-(O_RDWR 3002) 48.0537 Tj
--14547 TJm
-(0283 1225 5982) 61.1592 Tj
-17.4613 -284.8004 Td
-(3002 4868 4886 6764) 83.0018 Tj
--6520.6 TJm
-(pic_setmask 5967) 69.8962 Tj
-17.4613 -294.2938 Td
-(6766 7007) 39.3166 Tj
--13543.8 TJm
 (5967 5977 6033) 61.1592 Tj
-0 -303.7871 Td
-(O_WRONLY 3001) 56.7907 Tj
--11537.1 TJm
-(pinit 1618) 43.6851 Tj
-17.4613 -313.2805 Td
-(3001 4868 4885 4886) 83.0018 Tj
--8527.14 TJm
-(0297 1223 1618) 61.1592 Tj
-17.4613 -322.7739 Td
-(7278 7281) 39.3166 Tj
--11537.3 TJm
-(pipe 5160) 39.3166 Tj
-0 -332.2668 Td
+17.4613 -47.4664 Td
+(3051 4885 4886 7278) 83.0018 Tj
+-6520.6 TJm
+(pinit 1620) 43.6851 Tj
+17.4613 -56.9598 Td
+(7281) 17.4741 Tj
+-16052.1 TJm
+(0306 1227 1620) 61.1592 Tj
+0 -66.4531 Td
 (PAGE 0151) 39.3166 Tj
--15550.3 TJm
-(0204 0287 0288 0289) 83.0018 Tj
-17.4613 -341.7602 Td
-(0151 0152 1763 2233) 83.0018 Tj
+-13543.8 TJm
+(pipe 5160) 39.3166 Tj
+17.4613 -75.9465 Td
+(0151 0152 1811 2284) 83.0018 Tj
 -8527.14 TJm
-(3105 4469 4509 4529) 83.0018 Tj
-17.4613 -351.2536 Td
-(2235 2236 2259 2309) 83.0018 Tj
+(0204 0288 0289 0290) 83.0018 Tj
+17.4613 -85.4399 Td
+(2285 2309 2359 5054) 83.0018 Tj
+-8527.14 TJm
+(3255 4469 4509 4529) 83.0018 Tj
+17.4613 -94.9332 Td
+(5057 5178 5202 5223) 83.0018 Tj
 -8527.14 TJm
 (5160 5172 5178 5184) 83.0018 Tj
-17.4613 -360.7469 Td
-(5049 5051 5178 5202) 83.0018 Tj
+0 -104.4266 Td
+(panic 6401 7032) 65.5277 Tj
+-12540.3 TJm
+(5188 5192 5211 5230) 83.0018 Tj
+17.4613 -113.9199 Td
+(0219 1377 1405 1469) 83.0018 Tj
 -8527.14 TJm
-(5188 5192 5215 5251) 83.0018 Tj
-17.4613 -370.2403 Td
-(5228) 17.4741 Tj
--16052.1 TJm
-(5273 6813 6952 6953) 83.0018 Tj
-0 -379.7336 Td
-(panic 6565 7032) 65.5277 Tj
--10533.8 TJm
-(pipealloc 5170) 61.1592 Tj
-17.4613 -389.227 Td
-(0219 1379 1405 1469) 83.0018 Tj
--8527.14 TJm
-(0286 4984 5170) 61.1592 Tj
-17.4613 -398.7204 Td
-(1471 1856 1858 1860) 83.0018 Tj
+(5251 6763 6952 6953) 83.0018 Tj
+17.4613 -123.4133 Td
+(1471 1958 1960 1962) 83.0018 Tj
 -6520.6 TJm
-(pipeclose 5215) 61.1592 Tj
-17.4613 -408.2137 Td
-(1862 1906 1909 2010) 83.0018 Tj
+(PIPE 6859) 39.3166 Tj
+17.4613 -132.9067 Td
+(1964 2006 2009 2110) 83.0018 Tj
 -8527.14 TJm
-(0287 4469 5215) 61.1592 Tj
-17.4613 -417.7071 Td
-(2041 2260 2271 2310) 83.0018 Tj
+(6859 6950 7086 7377) 83.0018 Tj
+17.4613 -142.4 Td
+(2140 2310 2321 2360) 83.0018 Tj
+-6520.6 TJm
+(pipealloc 5170) 61.1592 Tj
+17.4613 -151.8934 Td
+(2647 3378 3459 3461) 83.0018 Tj
+-8527.14 TJm
+(0287 4984 5170) 61.1592 Tj
+17.4613 -161.3867 Td
+(3463 3596 3617 3627) 83.0018 Tj
+-6520.6 TJm
+(pipeclose 5211) 61.1592 Tj
+17.4613 -170.8801 Td
+(3725 3743 3822 3873) 83.0018 Tj
+-8527.14 TJm
+(0288 4469 5211) 61.1592 Tj
+17.4613 -180.3735 Td
+(3908 3928 3937 3958) 83.0018 Tj
 -6520.6 TJm
 (pipecmd 6884 7080) 74.2647 Tj
-17.4613 -427.2004 Td
-(2575 3378 3459 3461) 83.0018 Tj
+17.4613 -189.8668 Td
+(4036 4219 4267 4275) 83.0018 Tj
 -8527.14 TJm
 (6884 6912 6951 7080) 83.0018 Tj
-17.4613 -436.6938 Td
-(3463 3596 3617 3627) 83.0018 Tj
+17.4613 -199.3602 Td
+(4442 4458 4517 4537) 83.0018 Tj
 -8527.14 TJm
 (7082 7258 7358 7378) 83.0018 Tj
-17.4613 -446.1872 Td
-(3725 3743 3823 3858) 83.0018 Tj
+17.4613 -208.8535 Td
+(4709 4777 4786 4821) 83.0018 Tj
 -6520.6 TJm
-(piperead 5273) 56.7907 Tj
-17.4613 -455.6805 Td
-(3878 3887 3908 3972) 83.0018 Tj
+(piperead 5251) 56.7907 Tj
+17.4613 -218.3469 Td
+(4834 4838 5638 6401) 83.0018 Tj
 -8527.14 TJm
-(0288 4509 5273) 61.1592 Tj
-17.4613 -465.1739 Td
-(4047 4219 4267 4275) 83.0018 Tj
+(0289 4509 5251) 61.1592 Tj
+17.4613 -227.8403 Td
+(6408 6901 6920 6953) 83.0018 Tj
 -6520.6 TJm
 (PIPESIZE 5158) 56.7907 Tj
-17.4613 -474.6672 Td
-(4442 4458 4473 4517) 83.0018 Tj
+17.4613 -237.3336 Td
+(7032 7045 7228 7272) 83.0018 Tj
 -8527.14 TJm
-(5158 5166 5257 5265) 83.0018 Tj
-17.4613 -484.1606 Td
-(4537 4709 4777 4786) 83.0018 Tj
+(5158 5162 5236 5244) 83.0018 Tj
+17.4613 -246.827 Td
+(7306 7310 7336 7341) 83.0018 Tj
 -8527.14 TJm
-(5288) 17.4741 Tj
-17.4613 -493.654 Td
-(4843 5638 6565 6572) 83.0018 Tj
+(5266) 17.4741 Tj
+0 -256.3203 Td
+(panicked 6316) 56.7907 Tj
+-11537.1 TJm
+(pipewrite 5230) 61.1592 Tj
+17.4613 -265.8137 Td
+(6316 6414 6489) 61.1592 Tj
+-11035.5 TJm
+(0290 4529 5230) 61.1592 Tj
+0 -275.3071 Td
+(parseblock 7301) 65.5277 Tj
+-10533.8 TJm
+(popcli 1466) 48.0537 Tj
+17.4613 -284.8004 Td
+(7301 7306 7325) 61.1592 Tj
+-11035.5 TJm
+(0327 1421 1466 1469) 83.0018 Tj
+0 -294.2938 Td
+(parsecmd 7218) 56.7907 Tj
+-13543.7 TJm
+(1471 1732) 39.3166 Tj
+17.4613 -303.7871 Td
+(6902 7025 7218) 61.1592 Tj
+-9028.94 TJm
+(printint 6324) 56.7907 Tj
+0 -313.2805 Td
+(parseexec 7317) 61.1592 Tj
+-13042 TJm
+(6324 6374 6378) 61.1592 Tj
+17.4613 -322.7739 Td
+(7214 7255 7317) 61.1592 Tj
+-9028.94 TJm
+(proc 1529) 39.3166 Tj
+0 -332.2668 Td
+(parseline 7235) 61.1592 Tj
+-13042 TJm
+(0205 0301 0342 0343) 83.0018 Tj
+17.4613 -341.7602 Td
+(7212 7224 7235 7246) 83.0018 Tj
+-8527.14 TJm
+(1204 1208 1357 1529) 83.0018 Tj
+17.4613 -351.2536 Td
+(7308) 17.4741 Tj
+-16052.1 TJm
+(1535 1578 1605 1610) 83.0018 Tj
+0 -360.7469 Td
+(parsepipe 7251) 61.1592 Tj
+-13042 TJm
+(1613 1665 1669 1753) 83.0018 Tj
+17.4613 -370.2403 Td
+(7213 7239 7251 7258) 83.0018 Tj
+-8527.14 TJm
+(1756 1760 1804 1857) 83.0018 Tj
+0 -379.7336 Td
+(parseredirs 7264) 69.8962 Tj
+-12038.7 TJm
+(1910 1918 2055 2057) 83.0018 Tj
+17.4613 -389.227 Td
+(7264 7312 7331 7342) 83.0018 Tj
+-8527.14 TJm
+(2077 2080 2106 2129) 83.0018 Tj
+0 -398.7204 Td
+(PCINT 5678) 43.6851 Tj
+-15048.7 TJm
+(2155 2162 2554 2650) 83.0018 Tj
+17.4613 -408.2137 Td
+(5678 5724) 39.3166 Tj
+-13543.8 TJm
+(2754 2766 2778 2905) 83.0018 Tj
+0 -417.7071 Td
+(peek 7201) 39.3166 Tj
+-15550.3 TJm
+(3306 3667 4555 5003) 83.0018 Tj
+17.4613 -427.2004 Td
+(7201 7225 7240 7244) 83.0018 Tj
+-8527.14 TJm
+(5154 5510 5606 5619) 83.0018 Tj
+17.4613 -436.6938 Td
+(7256 7269 7305 7309) 83.0018 Tj
+-8527.14 TJm
+(5620 5621 6311) 61.1592 Tj
+17.4613 -446.1872 Td
+(7324 7332) 39.3166 Tj
+-11537.3 TJm
+(procdump 1654) 56.7907 Tj
+0 -455.6805 Td
+(picenable 5975) 61.1592 Tj
+-13042 TJm
+(0307 1654 6520) 61.1592 Tj
+17.4613 -465.1739 Td
+(0283 3356 5975 6625) 83.0018 Tj
 -6520.6 TJm
-(pipewrite 5251) 61.1592 Tj
+(proghdr 0874) 52.4222 Tj
+17.4613 -474.6672 Td
+(6680) 17.4741 Tj
+-16052.1 TJm
+(0874 1119 1133 5016) 83.0018 Tj
+0 -484.1606 Td
+(picinit 5982) 52.4222 Tj
+-12038.8 TJm
+(pushcli 1455) 52.4222 Tj
+17.4613 -493.654 Td
+(0284 1220 5982) 61.1592 Tj
+-11035.5 TJm
+(0326 1375 1455 1724) 83.0018 Tj
 Q
 Q
 Q
@@ -3096,6 +3105,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -3113,207 +3124,207 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:04 2008  cross-references  Page 9) 187.8461 Tj
-17.4613 -28.4801 Td
-(0289 4529 5251) 61.1592 Tj
--11035.5 TJm
-(5758) 17.4741 Tj
-0 -37.9735 Td
-(popcli 1466) 48.0537 Tj
--12540.5 TJm
-(REDIR 6858) 43.6851 Tj
-17.4613 -47.4664 Td
-(0317 1417 1466 1469) 83.0018 Tj
--8527.14 TJm
-(6858 6930 7070 7371) 83.0018 Tj
-17.4613 -56.9598 Td
-(1471 1702 1795) 61.1592 Tj
--9028.94 TJm
-(redircmd 6875 7064) 78.6333 Tj
-0 -66.4531 Td
-(printint 6351) 56.7907 Tj
--13543.7 TJm
-(6875 6913 6931 7064) 83.0018 Tj
-17.4613 -75.9465 Td
-(6351 6403 6407) 61.1592 Tj
--11035.5 TJm
-(7066 7275 7278 7281) 83.0018 Tj
-0 -85.4399 Td
-(proc 1529) 39.3166 Tj
--15550.3 TJm
-(7359 7372) 39.3166 Tj
-17.4613 -94.9332 Td
-(0205 0292 0293 0300) 83.0018 Tj
--6520.6 TJm
-(REG_ID 5860) 48.0537 Tj
-17.4613 -104.4266 Td
-(0332 0333 1204 1357) 83.0018 Tj
--8527.14 TJm
-(5860 5910) 39.3166 Tj
-17.4613 -113.9199 Td
-(1529 1535 1559 1605) 83.0018 Tj
--6520.6 TJm
-(REG_TABLE 5862) 61.1592 Tj
-17.4613 -123.4133 Td
-(1610 1611 1626 1630) 83.0018 Tj
--8527.14 TJm
-(5862 5917 5918 5931) 83.0018 Tj
-17.4613 -132.9067 Td
-(1634 1672 1708 1709) 83.0018 Tj
--8527.14 TJm
-(5932) 17.4741 Tj
-17.4613 -142.4 Td
-(1712 1759 1788 1791) 83.0018 Tj
--6520.6 TJm
-(REG_VER 5861) 52.4222 Tj
-17.4613 -151.8934 Td
-(1810 1822 1955 1957) 83.0018 Tj
--8527.14 TJm
-(5861 5909) 39.3166 Tj
-17.4613 -161.3867 Td
-(1978 1981 2006 2029) 83.0018 Tj
--6520.6 TJm
-(release 1402) 52.4222 Tj
-17.4613 -170.8801 Td
-(2055 2063 2115 2120) 83.0018 Tj
--8527.14 TJm
-(0315 1402 1405 1638) 83.0018 Tj
-17.4613 -180.3735 Td
-(2504 2578 2654 2666) 83.0018 Tj
--8527.14 TJm
-(1642 1839 1874 1883) 83.0018 Tj
-17.4613 -189.8668 Td
-(2678 2804 2810 3306) 83.0018 Tj
--8527.14 TJm
-(1919 1932 1969 1987) 83.0018 Tj
-17.4613 -199.3602 Td
-(3667 4555 5003 5154) 83.0018 Tj
--8527.14 TJm
-(1991 2076 2085 2293) 83.0018 Tj
-17.4613 -208.8535 Td
-(5510 5606 5619 5620) 83.0018 Tj
--8527.14 TJm
-(2316 2322 2326 2552) 83.0018 Tj
-17.4613 -218.3469 Td
-(5621 6261) 39.3166 Tj
--13543.8 TJm
-(2874 2879 3408 3425) 83.0018 Tj
-0 -227.8403 Td
-(procdump 2104) 56.7907 Tj
--13543.7 TJm
-(3482 3581 3592 3641) 83.0018 Tj
-17.4613 -237.3336 Td
-(0298 2104 6470) 61.1592 Tj
--11035.5 TJm
-(3814 3830 3842 3864) 83.0018 Tj
-0 -246.827 Td
-(proc_table_lock 1608) 87.3703 Tj
--10032 TJm
-(3892 3910 3919 4428) 83.0018 Tj
-17.4613 -256.3203 Td
-(1608 1620 1632 1638) 83.0018 Tj
--8527.14 TJm
-(4432 4444 4460 4466) 83.0018 Tj
-17.4613 -265.8137 Td
-(1642 1820 1839 1859) 83.0018 Tj
--8527.14 TJm
-(5225 5259 5268 5280) 83.0018 Tj
-17.4613 -275.3071 Td
-(1860 1871 1874 1883) 83.0018 Tj
--8527.14 TJm
-(5291 6431 6443 6497) 83.0018 Tj
-17.4613 -284.8004 Td
-(1917 1918 1931 1932) 83.0018 Tj
--8527.14 TJm
-(6512 6532) 39.3166 Tj
-17.4613 -294.2938 Td
-(1967 1969 1980 1987) 83.0018 Tj
--6520.6 TJm
-(ROOTDEV 0159) 52.4222 Tj
-17.4613 -303.7871 Td
-(1991 2023 2058 2076) 83.0018 Tj
--8527.14 TJm
-(0159 4359) 39.3166 Tj
-17.4613 -313.2805 Td
-(2085 2090) 39.3166 Tj
--11537.3 TJm
-(run 2214) 34.9481 Tj
-0 -322.7739 Td
-(proghdr 0824) 52.4222 Tj
--14045.3 TJm
-(2111 2214 2215 2218) 83.0018 Tj
-17.4613 -332.2668 Td
-(0824 1119 1132 5016) 83.0018 Tj
--8527.14 TJm
-(2257 2266 2267 2269) 83.0018 Tj
-0 -341.7602 Td
-(pushcli 1455) 52.4222 Tj
--14045.3 TJm
-(2307) 17.4741 Tj
-17.4613 -351.2536 Td
-(0316 1377 1455 1676) 83.0018 Tj
--6520.6 TJm
-(runcmd 6906) 48.0537 Tj
-17.4613 -360.7469 Td
-(1793) 17.4741 Tj
--16052.1 TJm
-(6906 6920 6937 6943) 83.0018 Tj
-0 -370.2403 Td
-(readi 4102) 43.6851 Tj
--15048.7 TJm
+(Aug  8 01:04 2009  cross-references  Page 9) 187.8461 Tj
+0 -28.4801 Td
+(readeflags 0485) 65.5277 Tj
+-12540.3 TJm
 (6945 6959 6966 6977) 83.0018 Tj
-17.4613 -379.7336 Td
-(0247 4102 4266 4512) 83.0018 Tj
+17.4613 -37.9735 Td
+(0485 1459 1468 1963) 83.0018 Tj
 -8527.14 TJm
 (7025) 17.4741 Tj
-17.4613 -389.227 Td
-(4708 4709 5027 5032) 83.0018 Tj
--6520.6 TJm
+17.4613 -47.4664 Td
+(5758) 17.4741 Tj
+-14045.6 TJm
 (RUNNING 1526) 52.4222 Tj
-17.4613 -398.7204 Td
-(5059 5065) 39.3166 Tj
--13543.8 TJm
-(1526 1831 1857 2111) 83.0018 Tj
-0 -408.2137 Td
-(readsb 3679) 48.0537 Tj
--14547 TJm
-(2591) 17.4741 Tj
-17.4613 -417.7071 Td
-(3679 3711 3738 3959) 83.0018 Tj
+0 -56.9598 Td
+(readi 4102) 43.6851 Tj
+-15048.7 TJm
+(1526 1661 1927 1961) 83.0018 Tj
+17.4613 -66.4531 Td
+(0247 4102 4266 4512) 83.0018 Tj
+-8527.14 TJm
+(2663) 17.4741 Tj
+17.4613 -75.9461 Td
+(4708 4709 5026 5034) 83.0018 Tj
 -6520.6 TJm
 (safestrcpy 5375) 65.5277 Tj
-0 -427.2004 Td
+17.4613 -85.4391 Td
+(5065 5073) 39.3166 Tj
+-13543.8 TJm
+(0333 1825 5104 5375) 83.0018 Tj
+0 -94.9324 Td
+(readsb 3678) 48.0537 Tj
+-12540.5 TJm
+(sched 1953) 43.6851 Tj
+17.4613 -104.4258 Td
+(3678 3711 3738 3809) 83.0018 Tj
+-8527.14 TJm
+(1953 1958 1960 1962) 83.0018 Tj
+0 -113.9192 Td
 (readsect 1160) 56.7907 Tj
 -13543.7 TJm
-(0323 1781 5097 5375) 83.0018 Tj
-17.4613 -436.6938 Td
+(1964 1977 2025 2139) 83.0018 Tj
+17.4613 -123.4125 Td
 (1160 1195) 39.3166 Tj
 -11537.3 TJm
-(sched 1853) 43.6851 Tj
-0 -446.1872 Td
+(scheduler 1908) 61.1592 Tj
+0 -132.9059 Td
 (readseg 1179) 52.4222 Tj
 -14045.3 TJm
-(1853 1856 1858 1860) 83.0018 Tj
-17.4613 -455.6805 Td
-(1113 1125 1135 1179) 83.0018 Tj
+(0308 1263 1908) 61.1592 Tj
+17.4613 -142.3992 Td
+(1113 1126 1137 1179) 83.0018 Tj
+-6520.6 TJm
+(SCROLLLOCK 6114) 65.5277 Tj
+0 -151.8926 Td
+(REDIR 6858) 43.6851 Tj
+-15048.7 TJm
+(6114 6147) 39.3166 Tj
+17.4613 -161.386 Td
+(6858 6930 7070 7371) 83.0018 Tj
+-6520.6 TJm
+(SECTSIZE 1111) 56.7907 Tj
+0 -170.8793 Td
+(redircmd 6875 7064) 78.6333 Tj
+-11035.3 TJm
+(1111 1173 1186 1189) 83.0018 Tj
+17.4613 -180.3727 Td
+(6875 6913 6931 7064) 83.0018 Tj
 -8527.14 TJm
-(1862 1873 1925 2040) 83.0018 Tj
-0 -465.1739 Td
-(read_ebp 0392) 56.7907 Tj
--11537.1 TJm
-(scheduler 1808) 61.1592 Tj
-17.4613 -474.6668 Td
-(0392 5762) 39.3166 Tj
+(1194) 17.4741 Tj
+17.4613 -189.8657 Td
+(7066 7275 7278 7281) 83.0018 Tj
+-6520.6 TJm
+(SEG 0701) 34.9481 Tj
+17.4613 -199.3586 Td
+(7359 7372) 39.3166 Tj
 -13543.8 TJm
-(0299 1263 1808) 61.1592 Tj
-0 -484.1602 Td
-(read_eflags 0435) 69.8962 Tj
--10032.1 TJm
-(SCROLLLOCK 6064) 65.5277 Tj
-17.4613 -493.6536 Td
-(0435 1459 1468 1855) 83.0018 Tj
+(0701 1708 1709 1710) 83.0018 Tj
+0 -208.852 Td
+(REG_ID 5860) 48.0537 Tj
+-14547 TJm
+(1725 1726) 39.3166 Tj
+17.4613 -218.3453 Td
+(5860 5910) 39.3166 Tj
+-11537.3 TJm
+(SEG16 0706) 43.6851 Tj
+0 -227.8387 Td
+(REG_TABLE 5862) 61.1592 Tj
+-13042 TJm
+(0706 1727) 39.3166 Tj
+17.4613 -237.3321 Td
+(5862 5917 5918 5931) 83.0018 Tj
+-6520.6 TJm
+(SEG_ASM 0608) 52.4222 Tj
+17.4613 -246.825 Td
+(5932) 17.4741 Tj
+-16052.1 TJm
+(0608 0992 0993 1092) 83.0018 Tj
+0 -256.3184 Td
+(REG_VER 5861) 52.4222 Tj
+-14045.3 TJm
+(1093) 17.4741 Tj
+17.4613 -265.8118 Td
+(5861 5909) 39.3166 Tj
+-11537.3 TJm
+(segdesc 0677) 52.4222 Tj
+0 -275.3051 Td
+(release 1402) 52.4222 Tj
+-14045.3 TJm
+(0450 0453 0677 0701) 83.0018 Tj
+17.4613 -284.7985 Td
+(0325 1402 1405 1763) 83.0018 Tj
 -8527.14 TJm
-(6064 6097) 39.3166 Tj
+(0706 1561) 39.3166 Tj
+17.4613 -294.2914 Td
+(1769 1934 1978 1987) 83.0018 Tj
+-6520.6 TJm
+(SEG_KCODE 0907 1021 1502 2500) 126.6869 Tj
+17.4613 -303.7844 Td
+(2019 2032 2068 2086) 83.0018 Tj
+-8527.14 TJm
+(0961 1061 1502 1708) 83.0018 Tj
+17.4613 -313.2774 Td
+(2090 2176 2183 2343) 83.0018 Tj
+-8527.14 TJm
+(2571 2572) 39.3166 Tj
+17.4613 -322.7704 Td
+(2369 2373 2619 2975) 83.0018 Tj
+-6520.6 TJm
+(SEG_KCPU 1504 2502) 78.6333 Tj
+17.4613 -332.2633 Td
+(2980 3409 3428 3482) 83.0018 Tj
+-8527.14 TJm
+(1504 1710 1712 2518) 83.0018 Tj
+17.4613 -341.7563 Td
+(3578 3592 3641 3864) 83.0018 Tj
+-6520.6 TJm
+(SEG_KDATA 0908 1022 1503 2501) 126.6869 Tj
+17.4613 -351.2493 Td
+(3880 3892 3914 3942) 83.0018 Tj
+-8527.14 TJm
+(0966 1066 1503 1709) 83.0018 Tj
+17.4613 -360.7422 Td
+(3960 3969 4428 4432) 83.0018 Tj
+-8527.14 TJm
+(1729 2515) 39.3166 Tj
+17.4613 -370.2352 Td
+(4444 4460 4466 5222) 83.0018 Tj
+-6520.6 TJm
+(SEG_NULLASM 0604) 69.8962 Tj
+17.4613 -379.7282 Td
+(5225 5238 5247 5258) 83.0018 Tj
+-8527.14 TJm
+(0604 0991 1091) 61.1592 Tj
+17.4613 -389.2212 Td
+(5269 6398 6547 6562) 83.0018 Tj
+-6520.6 TJm
+(SEG_TSS 1507) 52.4222 Tj
+17.4613 -398.7141 Td
+(6582 6609) 39.3166 Tj
+-13543.8 TJm
+(1507 1727 1728 1731) 83.0018 Tj
+0 -408.2075 Td
+(ROOTDEV 0159) 52.4222 Tj
+-12038.8 TJm
+(SEG_UCODE 1505) 61.1592 Tj
+17.4613 -417.7008 Td
+(0159 4359) 39.3166 Tj
+-13543.8 TJm
+(1505 1725 1817) 61.1592 Tj
+0 -427.1942 Td
+(ROOTINO 3157) 52.4222 Tj
+-12038.8 TJm
+(SEG_UDATA 1506) 61.1592 Tj
+17.4613 -436.6876 Td
+(3157 4359) 39.3166 Tj
+-13543.8 TJm
+(1506 1726 1818) 61.1592 Tj
+0 -446.1809 Td
+(run 2262) 34.9481 Tj
+-14045.5 TJm
+(SETGATE 0821) 52.4222 Tj
+17.4613 -455.6743 Td
+(1661 2262 2263 2269) 83.0018 Tj
+-8527.14 TJm
+(0821 2571 2572) 61.1592 Tj
+17.4613 -465.1673 Td
+(2307 2316 2317 2319) 83.0018 Tj
+-6520.6 TJm
+(SHIFT 6108) 43.6851 Tj
+17.4613 -474.6602 Td
+(2357) 17.4741 Tj
+-16052.1 TJm
+(6108 6136 6137 6285) 83.0018 Tj
+0 -484.1536 Td
+(runcmd 6906) 48.0537 Tj
+-12540.5 TJm
+(skipelem 4315) 56.7907 Tj
+17.4613 -493.6469 Td
+(6906 6920 6937 6943) 83.0018 Tj
+-8527.14 TJm
+(4315 4363) 39.3166 Tj
 Q
 Q
 q
@@ -3330,207 +3341,207 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:04 2008  cross-references  Page 10) 192.2146 Tj
+(Aug  8 01:04 2009  cross-references  Page 10) 192.2146 Tj
 0 -28.4801 Td
-(SECTSIZE 1111) 56.7907 Tj
--13543.7 TJm
-(5156 5165 6258 6270) 83.0018 Tj
-17.4613 -37.9735 Td
-(1111 1125 1173 1186) 83.0018 Tj
--8527.14 TJm
-(6452) 17.4741 Tj
-17.4613 -47.4664 Td
-(1189 1194) 39.3166 Tj
--11537.3 TJm
-(start 0912 1026 6707) 87.3703 Tj
-0 -56.9598 Td
-(SEG 0654) 34.9481 Tj
--16052 TJm
-(0911 0912 0974 1025) 83.0018 Tj
-17.4613 -66.4531 Td
-(0654 1685 1686 1690) 83.0018 Tj
--8527.14 TJm
-(1026 1073 1074 2229) 83.0018 Tj
-17.4613 -75.9461 Td
-(1691) 17.4741 Tj
--16052.1 TJm
-(2232 2233 2236 6706) 83.0018 Tj
-0 -85.4395 Td
-(SEG16 0659) 43.6851 Tj
+(sleep 2003) 43.6851 Tj
 -15048.7 TJm
-(6707) 17.4741 Tj
-17.4613 -94.9328 Td
-(0659 1687) 39.3166 Tj
--11537.3 TJm
-(stat 3050) 39.3166 Tj
-0 -104.4262 Td
-(segdesc 0627) 52.4222 Tj
--14045.3 TJm
-(0207 0230 0248 3050) 83.0018 Tj
-17.4613 -113.9196 Td
-(0400 0403 0627 0651) 83.0018 Tj
--8527.14 TJm
-(3665 4082 4478 4553) 83.0018 Tj
-17.4613 -123.4125 Td
-(0654 0659 1562) 61.1592 Tj
--11035.5 TJm
-(4654 6753) 39.3166 Tj
-0 -132.9059 Td
-(SEG_ASM 0558) 52.4222 Tj
--12038.8 TJm
-(stati 4082) 43.6851 Tj
-17.4613 -142.3992 Td
-(0558 0985 0986 1081) 83.0018 Tj
--8527.14 TJm
-(0248 4082 4482) 61.1592 Tj
-17.4613 -151.8922 Td
-(1082) 17.4741 Tj
--14045.6 TJm
-(STA_R 0567 0671) 65.5277 Tj
-0 -161.3856 Td
-(SEG_KCODE 1501) 61.1592 Tj
--13042 TJm
-(0567 0671 0985 1081) 83.0018 Tj
-17.4613 -170.8789 Td
-(1501 1685 2521 2522) 83.0018 Tj
--8527.14 TJm
-(1685 1690) 39.3166 Tj
-0 -180.3723 Td
-(SEG_KDATA 1502) 61.1592 Tj
--11035.5 TJm
-(STA_W 0566 0670) 65.5277 Tj
-17.4613 -189.8653 Td
-(1502 1678 1686) 61.1592 Tj
--11035.5 TJm
-(0566 0670 0986 1082) 83.0018 Tj
-0 -199.3586 Td
-(SEG_NULL 0651) 56.7907 Tj
--13543.7 TJm
-(1686 1691) 39.3166 Tj
-17.4613 -208.852 Td
-(0651 1684 1693 1694) 83.0018 Tj
--6520.6 TJm
-(STA_X 0563 0667) 65.5277 Tj
-0 -218.3453 Td
-(SEG_NULLASM 0554) 69.8962 Tj
--12038.7 TJm
-(0563 0667 0985 1081) 83.0018 Tj
-17.4613 -227.8387 Td
-(0554 0984 1080) 61.1592 Tj
--11035.5 TJm
-(1685 1690) 39.3166 Tj
-0 -237.3321 Td
-(SEG_TSS 1505) 52.4222 Tj
--12038.8 TJm
-(sti 0470) 34.9481 Tj
-17.4613 -246.8254 Td
-(1505 1687 1688 1701) 83.0018 Tj
--8527.14 TJm
-(0470 0472 1473 1817) 83.0018 Tj
-0 -256.3188 Td
-(SEG_UCODE 1503) 61.1592 Tj
--11035.5 TJm
-(strlen 5389) 48.0537 Tj
-17.4613 -265.8121 Td
-(1503 1690 1693 1767) 83.0018 Tj
--8527.14 TJm
-(0324 5044 5078 5389) 83.0018 Tj
-0 -275.3055 Td
-(SEG_UDATA 1504) 61.1592 Tj
--13042 TJm
-(7019 7223) 39.3166 Tj
-17.4613 -284.7989 Td
-(1504 1691 1694 1768) 83.0018 Tj
--6520.6 TJm
-(strncmp 5351) 52.4222 Tj
-0 -294.2922 Td
-(SETGATE 0771) 52.4222 Tj
--14045.3 TJm
-(0325 4205 5351) 61.1592 Tj
-17.4613 -303.7856 Td
-(0771 2521 2522) 61.1592 Tj
--9028.94 TJm
-(strncpy 5361) 52.4222 Tj
-0 -313.2789 Td
-(setupsegs 1672) 61.1592 Tj
--13042 TJm
-(0326 4272 5361) 61.1592 Tj
-17.4613 -322.7723 Td
-(0300 1259 1665 1672) 83.0018 Tj
--6520.6 TJm
-(STS_IG32 0685) 56.7907 Tj
-17.4613 -332.2653 Td
-(1830 1837 5106) 61.1592 Tj
--11035.5 TJm
-(0685 0777) 39.3166 Tj
-0 -341.7586 Td
-(SHIFT 6058) 43.6851 Tj
--13042.1 TJm
-(STS_T32A 0682) 56.7907 Tj
-17.4613 -351.252 Td
-(6058 6086 6087 6235) 83.0018 Tj
--8527.14 TJm
-(0682 1687) 39.3166 Tj
-0 -360.7454 Td
-(skipelem 4314) 56.7907 Tj
--11537.1 TJm
-(STS_TG32 0686) 56.7907 Tj
-17.4613 -370.2387 Td
-(4314 4363) 39.3166 Tj
--13543.8 TJm
-(0686 0777) 39.3166 Tj
-0 -379.7321 Td
-(sleep 1903) 43.6851 Tj
--13042.1 TJm
-(STUB 6803 6810 6811 6812 6813 6814) 148.5295 Tj
-17.4613 -389.2254 Td
-(0301 1903 1906 1909) 83.0018 Tj
--8527.14 TJm
-(6810 6811 6812 6813) 83.0018 Tj
-17.4613 -398.7184 Td
-(2090 2109 2877 3480) 83.0018 Tj
--8527.14 TJm
-(6814 6815 6816 6817) 83.0018 Tj
-17.4613 -408.2114 Td
-(3577 3862 5263 5283) 83.0018 Tj
--8527.14 TJm
-(6818 6819 6820 6821) 83.0018 Tj
-17.4613 -417.7043 Td
-(6516 6829) 39.3166 Tj
--13543.8 TJm
-(6822 6823 6824 6825) 83.0018 Tj
-0 -427.1977 Td
-(spinlock 1301) 56.7907 Tj
--13543.7 TJm
-(6826 6827 6828 6829) 83.0018 Tj
-17.4613 -436.6911 Td
-(0206 0301 0311 0313) 83.0018 Tj
+(0733 0827) 39.3166 Tj
+17.4613 -37.9735 Td
+(0311 1659 2003 2006) 83.0018 Tj
 -6520.6 TJm
 (sum 5525) 34.9481 Tj
-17.4613 -446.184 Td
-(0314 0315 0343 1301) 83.0018 Tj
+17.4613 -47.4664 Td
+(2009 2188 2978 3480) 83.0018 Tj
 -8527.14 TJm
 (5525 5527 5529 5531) 83.0018 Tj
-17.4613 -455.677 Td
-(1358 1363 1375 1402) 83.0018 Tj
+17.4613 -56.9594 Td
+(3581 3912 5242 5261) 83.0018 Tj
 -8527.14 TJm
 (5532 5543 5592) 61.1592 Tj
-17.4613 -465.17 Td
-(1440 1606 1608 1903) 83.0018 Tj
--6520.6 TJm
-(superblock 3160) 65.5277 Tj
-17.4613 -474.663 Td
-(2210 2212 2507 2512) 83.0018 Tj
+17.4613 -66.4524 Td
+(6566 6779) 39.3166 Tj
+-11537.3 TJm
+(superblock 3161) 65.5277 Tj
+0 -75.9457 Td
+(spinlock 1301) 56.7907 Tj
+-13543.7 TJm
+(3161 3678 3708 3733) 83.0018 Tj
+17.4613 -85.4391 Td
+(0206 0311 0321 0323) 83.0018 Tj
 -8527.14 TJm
-(3160 3679 3708 3733) 83.0018 Tj
-17.4613 -484.1559 Td
-(3309 3324 3526 3530) 83.0018 Tj
--8527.14 TJm
-(3957) 17.4741 Tj
-17.4613 -493.6489 Td
-(3668 3784 4404 4408) 83.0018 Tj
+(3807) 17.4741 Tj
+17.4613 -94.9321 Td
+(0324 0325 0354 1301) 83.0018 Tj
 -6520.6 TJm
 (SVR 5664) 34.9481 Tj
+17.4613 -104.425 Td
+(1358 1361 1373 1402) 83.0018 Tj
+-8527.14 TJm
+(5664 5707) 39.3166 Tj
+17.4613 -113.918 Td
+(1444 1606 1609 2003) 83.0018 Tj
+-6520.6 TJm
+(swtch 2208) 43.6851 Tj
+17.4613 -123.411 Td
+(2260 2268 2557 2562) 83.0018 Tj
+-8527.14 TJm
+(0318 1928 1967 2207) 83.0018 Tj
+17.4613 -132.9039 Td
+(3309 3324 3526 3530) 83.0018 Tj
+-8527.14 TJm
+(2208) 17.4741 Tj
+17.4613 -142.3969 Td
+(3668 3784 4404 4408) 83.0018 Tj
+-6520.6 TJm
+(syscall 2874) 52.4222 Tj
+17.4613 -151.8899 Td
+(5156 5161 6308 6319) 83.0018 Tj
+-8527.14 TJm
+(0344 2607 2756 2874) 83.0018 Tj
+17.4613 -161.3829 Td
+(6502) 17.4741 Tj
+-14045.6 TJm
+(SYSCALL 6753 6760 6761 6762 6763 67) 152.898 Tj
+0 -170.8762 Td
+(STA_R 0617 0718) 65.5277 Tj
+-12540.3 TJm
+(6760 6761 6762 6763) 83.0018 Tj
+17.4613 -180.3696 Td
+(0617 0718 0992 1092) 83.0018 Tj
+-8527.14 TJm
+(6764 6765 6766 6767) 83.0018 Tj
+17.4613 -189.8625 Td
+(1708 1725) 39.3166 Tj
+-13543.8 TJm
+(6768 6769 6770 6771) 83.0018 Tj
+0 -199.3559 Td
+(start 0914 1028 6707) 87.3703 Tj
+-10032 TJm
+(6772 6773 6774 6775) 83.0018 Tj
+17.4613 -208.8493 Td
+(0913 0914 0975 1027) 83.0018 Tj
+-8527.14 TJm
+(6776 6777 6778 6779) 83.0018 Tj
+17.4613 -218.3422 Td
+(1028 1075 1076 6706) 83.0018 Tj
+-6520.6 TJm
+(sys_chdir 4930) 61.1592 Tj
+17.4613 -227.8352 Td
+(6707) 17.4741 Tj
+-16052.1 TJm
+(2829 2851 4930) 61.1592 Tj
+0 -237.3286 Td
+(stat 3104) 39.3166 Tj
+-13543.8 TJm
+(SYS_chdir 2716) 61.1592 Tj
+17.4613 -246.8219 Td
+(0207 0230 0248 3104) 83.0018 Tj
+-8527.14 TJm
+(2716 2851) 39.3166 Tj
+17.4613 -256.3149 Td
+(3665 4085 4476 4553) 83.0018 Tj
+-6520.6 TJm
+(sys_close 4639) 61.1592 Tj
+17.4613 -265.8079 Td
+(4654 6803) 39.3166 Tj
+-13543.8 TJm
+(2830 2852 4639) 61.1592 Tj
+0 -275.3012 Td
+(stati 4085) 43.6851 Tj
+-13042.1 TJm
+(SYS_close 2707) 61.1592 Tj
+17.4613 -284.7946 Td
+(0248 4085 4480) 61.1592 Tj
+-11035.5 TJm
+(2707 2852) 39.3166 Tj
+0 -294.2879 Td
+(STA_W 0616 0717) 65.5277 Tj
+-10533.8 TJm
+(sys_dup 4601) 52.4222 Tj
+17.4613 -303.7813 Td
+(0616 0717 0993 1093) 83.0018 Tj
+-8527.14 TJm
+(2831 2853 4601) 61.1592 Tj
+17.4613 -313.2743 Td
+(1709 1710 1726) 61.1592 Tj
+-9028.94 TJm
+(SYS_dup 2717) 52.4222 Tj
+0 -322.7676 Td
+(STA_X 0613 0714) 65.5277 Tj
+-12540.3 TJm
+(2717 2853) 39.3166 Tj
+17.4613 -332.2606 Td
+(0613 0714 0992 1092) 83.0018 Tj
+-6520.6 TJm
+(sys_exec 4951) 56.7907 Tj
+17.4613 -341.7536 Td
+(1708 1725) 39.3166 Tj
+-13543.8 TJm
+(2832 2854 4951) 61.1592 Tj
+0 -351.2469 Td
+(sti 0527) 34.9481 Tj
+-14045.5 TJm
+(SYS_exec 2709) 56.7907 Tj
+17.4613 -360.7403 Td
+(0527 0529 1473 1914) 83.0018 Tj
+-8527.14 TJm
+(2709 2854 6711) 61.1592 Tj
+0 -370.2337 Td
+(stosb 0442) 43.6851 Tj
+-13042.1 TJm
+(sys_exit 2914) 56.7907 Tj
+17.4613 -379.727 Td
+(0442 0444 1139 5306) 83.0018 Tj
+-8527.14 TJm
+(2833 2855 2914) 61.1592 Tj
+0 -389.2204 Td
+(strlen 5389) 48.0537 Tj
+-12540.5 TJm
+(SYS_exit 2702) 56.7907 Tj
+17.4613 -398.7137 Td
+(0334 5046 5086 5389) 83.0018 Tj
+-8527.14 TJm
+(2702 2855 6716) 61.1592 Tj
+17.4613 -408.2067 Td
+(7019 7223) 39.3166 Tj
+-11537.3 TJm
+(sys_fork 2908) 56.7907 Tj
+0 -417.7001 Td
+(strncmp 5351) 52.4222 Tj
+-14045.3 TJm
+(2834 2856 2908) 61.1592 Tj
+17.4613 -427.1934 Td
+(0335 4205 5351) 61.1592 Tj
+-9028.94 TJm
+(SYS_fork 2701) 56.7907 Tj
+0 -436.6868 Td
+(strncpy 5361) 52.4222 Tj
+-14045.3 TJm
+(2701 2856) 39.3166 Tj
+17.4613 -446.1801 Td
+(0336 4272 5361) 61.1592 Tj
+-9028.94 TJm
+(sys_fstat 4651) 61.1592 Tj
+0 -455.6735 Td
+(STS_IG32 0732) 56.7907 Tj
+-13543.7 TJm
+(2835 2857 4651) 61.1592 Tj
+17.4613 -465.1669 Td
+(0732 0827) 39.3166 Tj
+-11537.3 TJm
+(SYS_fstat 2713) 61.1592 Tj
+0 -474.6598 Td
+(STS_T32A 0729) 56.7907 Tj
+-13543.7 TJm
+(2713 2857) 39.3166 Tj
+17.4613 -484.1532 Td
+(0729 1727) 39.3166 Tj
+-11537.3 TJm
+(sys_getpid 2937) 65.5277 Tj
+0 -493.6466 Td
+(STS_TG32 0733) 56.7907 Tj
+-13543.7 TJm
+(2836 2858 2937) 61.1592 Tj
 Q
 Q
 Q
@@ -3559,6 +3570,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -3576,207 +3589,207 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:04 2008  cross-references  Page 11) 192.2146 Tj
-17.4613 -28.4801 Td
-(5664 5707) 39.3166 Tj
--11537.3 TJm
-(ticks 2513) 43.6851 Tj
-0 -37.9735 Td
-(swtch 2156) 43.6851 Tj
--15048.7 TJm
-(0341 2513 2550 2551) 83.0018 Tj
-17.4613 -47.4664 Td
-(0308 1832 1864 2155) 83.0018 Tj
--8527.14 TJm
-(2871 2872 2877) 61.1592 Tj
+(Aug  8 01:04 2009  cross-references  Page 11) 192.2146 Tj
+0 -28.4801 Td
+(SYS_getpid 2718) 65.5277 Tj
+-10533.8 TJm
+(taskstate 0751) 61.1592 Tj
+17.4613 -37.9735 Td
+(2718 2858) 39.3166 Tj
+-13543.8 TJm
+(0751 1560) 39.3166 Tj
+0 -47.4664 Td
+(sys_kill 2927) 56.7907 Tj
+-11537.1 TJm
+(TDCR 5685) 39.3166 Tj
 17.4613 -56.9598 Td
-(2156) 17.4741 Tj
--14045.6 TJm
-(tickslock 2512) 61.1592 Tj
+(2837 2859 2927) 61.1592 Tj
+-11035.5 TJm
+(5685 5713) 39.3166 Tj
 0 -66.4531 Td
-(syscall 2774) 52.4222 Tj
--14045.3 TJm
-(0343 2512 2524 2549) 83.0018 Tj
+(SYS_kill 2708) 56.7907 Tj
+-11537.1 TJm
+(T_DEV 3102) 43.6851 Tj
 17.4613 -75.9465 Td
-(0334 2540 2656 2774) 83.0018 Tj
--8527.14 TJm
-(2552 2870 2874 2877) 83.0018 Tj
+(2708 2859) 39.3166 Tj
+-13543.8 TJm
+(3102 4107 4157 4923) 83.0018 Tj
 0 -85.4399 Td
-(SYS_chdir 2616) 61.1592 Tj
--13042 TJm
-(2879) 17.4741 Tj
+(sys_link 4663) 56.7907 Tj
+-11537.1 TJm
+(T_DIR 3100) 43.6851 Tj
 17.4613 -94.9332 Td
-(2616 2751) 39.3166 Tj
--11537.3 TJm
-(TICR 5683) 39.3166 Tj
+(2838 2860 4663) 61.1592 Tj
+-11035.5 TJm
+(3100 4218 4365 4673) 83.0018 Tj
 0 -104.4266 Td
-(SYS_close 2607) 61.1592 Tj
--13042 TJm
-(5683 5715) 39.3166 Tj
+(SYS_link 2714) 56.7907 Tj
+-13543.7 TJm
+(4778 4787 4829 4868) 83.0018 Tj
 17.4613 -113.9199 Td
-(2607 2752) 39.3166 Tj
+(2714 2860) 39.3166 Tj
+-13543.8 TJm
+(4906 4938) 39.3166 Tj
+0 -123.4133 Td
+(sys_mkdir 4901) 61.1592 Tj
+-11035.5 TJm
+(T_FILE 3101) 48.0537 Tj
+17.4613 -132.9067 Td
+(2839 2861 4901) 61.1592 Tj
+-11035.5 TJm
+(3101 4814 4862) 61.1592 Tj
+0 -142.4 Td
+(SYS_mkdir 2715) 61.1592 Tj
+-11035.5 TJm
+(ticks 2563) 43.6851 Tj
+17.4613 -151.8934 Td
+(2715 2861) 39.3166 Tj
+-13543.8 TJm
+(0352 2563 2617 2618) 83.0018 Tj
+0 -161.3867 Td
+(sys_mknod 4913) 61.1592 Tj
+-13042 TJm
+(2972 2973 2978) 61.1592 Tj
+17.4613 -170.8801 Td
+(2840 2862 4913) 61.1592 Tj
+-9028.94 TJm
+(tickslock 2562) 61.1592 Tj
+0 -180.3735 Td
+(SYS_mknod 2711) 61.1592 Tj
+-13042 TJm
+(0354 2562 2574 2616) 83.0018 Tj
+17.4613 -189.8664 Td
+(2711 2862) 39.3166 Tj
+-13543.8 TJm
+(2619 2971 2975 2978) 83.0018 Tj
+0 -199.3598 Td
+(sys_open 4851) 56.7907 Tj
+-13543.7 TJm
+(2980) 17.4741 Tj
+17.4613 -208.8532 Td
+(2841 2863 4851) 61.1592 Tj
+-9028.94 TJm
+(TICR 5683) 39.3166 Tj
+0 -218.3465 Td
+(SYS_open 2710) 56.7907 Tj
+-13543.7 TJm
+(5683 5715) 39.3166 Tj
+17.4613 -227.8399 Td
+(2710 2863) 39.3166 Tj
 -11537.3 TJm
 (TIMER 5675) 43.6851 Tj
-0 -123.4133 Td
-(SYS_dup 2617) 52.4222 Tj
--14045.3 TJm
-(5675 5714) 39.3166 Tj
-17.4613 -132.9067 Td
-(2617 2753) 39.3166 Tj
--11537.3 TJm
-(TIMER_16BIT 6621) 69.8962 Tj
-0 -142.4 Td
-(SYS_exec 2609) 56.7907 Tj
--13543.7 TJm
-(6621 6627) 39.3166 Tj
-17.4613 -151.8934 Td
-(2609 2754 6711) 61.1592 Tj
--9028.94 TJm
-(TIMER_DIV 6616) 61.1592 Tj
-0 -161.3867 Td
-(SYS_exit 2602) 56.7907 Tj
--13543.7 TJm
-(6616 6628 6629) 61.1592 Tj
-17.4613 -170.8801 Td
-(2602 2755 6716) 61.1592 Tj
--9028.94 TJm
-(TIMER_FREQ 6615) 65.5277 Tj
-0 -180.3735 Td
-(SYS_fork 2601) 56.7907 Tj
--13543.7 TJm
-(6615 6616) 39.3166 Tj
-17.4613 -189.8664 Td
-(2601 2756) 39.3166 Tj
--11537.3 TJm
-(timer_init 6624) 65.5277 Tj
-0 -199.3598 Td
-(SYS_fstat 2613) 61.1592 Tj
--13042 TJm
-(0337 1234 6624) 61.1592 Tj
-17.4613 -208.8532 Td
-(2613 2757) 39.3166 Tj
--11537.3 TJm
-(TIMER_MODE 6618) 65.5277 Tj
-0 -218.3465 Td
-(SYS_getpid 2618) 65.5277 Tj
--12540.3 TJm
-(6618 6627) 39.3166 Tj
-17.4613 -227.8399 Td
-(2618 2758) 39.3166 Tj
--11537.3 TJm
-(TIMER_RATEGEN 6620) 78.6333 Tj
 0 -237.3332 Td
-(SYS_kill 2608) 56.7907 Tj
+(sys_pipe 4976) 56.7907 Tj
 -13543.7 TJm
-(6620 6627) 39.3166 Tj
+(5675 5714) 39.3166 Tj
 17.4613 -246.8266 Td
-(2608 2759) 39.3166 Tj
--11537.3 TJm
-(TIMER_SEL0 6619) 65.5277 Tj
+(2842 2864 4976) 61.1592 Tj
+-9028.94 TJm
+(TIMER_16BIT 6671) 69.8962 Tj
 0 -256.32 Td
-(SYS_link 2614) 56.7907 Tj
+(SYS_pipe 2704) 56.7907 Tj
 -13543.7 TJm
-(6619 6627) 39.3166 Tj
+(6671 6677) 39.3166 Tj
 17.4613 -265.8133 Td
-(2614 2760) 39.3166 Tj
+(2704 2864) 39.3166 Tj
 -11537.3 TJm
-(TPR 5662) 34.9481 Tj
+(TIMER_DIV 6666) 61.1592 Tj
 0 -275.3067 Td
-(SYS_mkdir 2615) 61.1592 Tj
--13042 TJm
-(5662 5743) 39.3166 Tj
+(sys_read 4615) 56.7907 Tj
+-13543.7 TJm
+(6666 6678 6679) 61.1592 Tj
 17.4613 -284.8 Td
-(2615 2761) 39.3166 Tj
--11537.3 TJm
-(trap 2534) 39.3166 Tj
+(2843 2865 4615) 61.1592 Tj
+-9028.94 TJm
+(TIMER_FREQ 6665) 65.5277 Tj
 0 -294.2934 Td
-(SYS_mknod 2611) 61.1592 Tj
--13042 TJm
-(2402 2404 2469 2534) 83.0018 Tj
+(SYS_read 2706) 56.7907 Tj
+-13543.7 TJm
+(6665 6666) 39.3166 Tj
 17.4613 -303.7868 Td
-(2611 2762) 39.3166 Tj
--13543.8 TJm
-(2573 2575 2578) 61.1592 Tj
+(2706 2865) 39.3166 Tj
+-11537.3 TJm
+(timerinit 6674) 61.1592 Tj
 0 -313.2801 Td
-(SYS_open 2610) 56.7907 Tj
--11537.1 TJm
-(trapframe 0477) 61.1592 Tj
+(sys_sbrk 2951) 56.7907 Tj
+-13543.7 TJm
+(0347 1234 6674) 61.1592 Tj
 17.4613 -322.7735 Td
-(2610 2763) 39.3166 Tj
--13543.8 TJm
-(0477 1541 1615 1723) 83.0018 Tj
+(2844 2866 2951) 61.1592 Tj
+-9028.94 TJm
+(TIMER_MODE 6668) 65.5277 Tj
 0 -332.2664 Td
-(SYS_pipe 2604) 56.7907 Tj
+(SYS_sbrk 2719) 56.7907 Tj
 -13543.7 TJm
-(2534) 17.4741 Tj
+(6668 6677) 39.3166 Tj
 17.4613 -341.7598 Td
-(2604 2764) 39.3166 Tj
+(2719 2866) 39.3166 Tj
 -11537.3 TJm
-(trapret 2474) 52.4222 Tj
+(TIMER_RATEGEN 6670) 78.6333 Tj
 0 -351.2532 Td
-(SYS_read 2606) 56.7907 Tj
--13543.7 TJm
-(2473 2474 2486) 61.1592 Tj
+(sys_sleep 2965) 61.1592 Tj
+-13042 TJm
+(6670 6677) 39.3166 Tj
 17.4613 -360.7465 Td
-(2606 2765) 39.3166 Tj
--11537.3 TJm
-(tvinit 2516) 48.0537 Tj
+(2845 2867 2965) 61.1592 Tj
+-9028.94 TJm
+(TIMER_SEL0 6669) 65.5277 Tj
 0 -370.2399 Td
-(SYS_sbrk 2619) 56.7907 Tj
--13543.7 TJm
-(0342 1228 2516) 61.1592 Tj
+(SYS_sleep 2720) 61.1592 Tj
+-13042 TJm
+(6669 6677) 39.3166 Tj
 17.4613 -379.7332 Td
-(2619 2766) 39.3166 Tj
+(2720 2867) 39.3166 Tj
 -11537.3 TJm
-(T_DEV 3184) 43.6851 Tj
+(T_IRQ0 2429) 48.0537 Tj
 0 -389.2266 Td
-(SYS_sleep 2620) 61.1592 Tj
--13042 TJm
-(3184 4107 4157 4911) 83.0018 Tj
-17.4613 -398.72 Td
-(2620 2767) 39.3166 Tj
--11537.3 TJm
-(T_DIR 3182) 43.6851 Tj
-0 -408.2133 Td
-(SYS_unlink 2612) 65.5277 Tj
+(sys_unlink 4751) 65.5277 Tj
 -12540.3 TJm
-(3182 4218 4365 4673) 83.0018 Tj
+(2429 2614 2623 2627) 83.0018 Tj
+17.4613 -398.72 Td
+(2846 2868 4751) 61.1592 Tj
+-11035.5 TJm
+(2631 2635 2636 2663) 83.0018 Tj
+0 -408.2133 Td
+(SYS_unlink 2712) 65.5277 Tj
+-12540.3 TJm
+(5707 5714 5727 5917) 83.0018 Tj
 17.4613 -417.7067 Td
-(2612 2768) 39.3166 Tj
+(2712 2868) 39.3166 Tj
 -13543.8 TJm
-(4778 4838 4868 4923) 83.0018 Tj
+(5931 5997 6016) 61.1592 Tj
 0 -427.2 Td
-(SYS_wait 2603) 56.7907 Tj
--13543.7 TJm
-(4938) 17.4741 Tj
+(sys_wait 2921) 56.7907 Tj
+-11537.1 TJm
+(TPR 5662) 34.9481 Tj
 17.4613 -436.6934 Td
-(2603 2769) 39.3166 Tj
--11537.3 TJm
-(T_FILE 3183) 48.0537 Tj
+(2847 2869 2921) 61.1592 Tj
+-11035.5 TJm
+(5662 5743) 39.3166 Tj
 0 -446.1868 Td
-(SYS_write 2605) 61.1592 Tj
--13042 TJm
-(3183 4862) 39.3166 Tj
+(SYS_wait 2703) 56.7907 Tj
+-11537.1 TJm
+(trap 2601) 39.3166 Tj
 17.4613 -455.6801 Td
-(2605 2770) 39.3166 Tj
--11537.3 TJm
-(T_SYSCALL 2376) 61.1592 Tj
+(2703 2869) 39.3166 Tj
+-13543.8 TJm
+(2452 2454 2524 2601) 83.0018 Tj
 0 -465.1735 Td
-(taskstate 0701) 61.1592 Tj
+(sys_write 4627) 61.1592 Tj
 -13042 TJm
-(2376 2522 2536 6712) 83.0018 Tj
+(2645 2647 2650) 61.1592 Tj
 17.4613 -474.6665 Td
-(0701 1561) 39.3166 Tj
--13543.8 TJm
-(6717 6807) 39.3166 Tj
+(2848 2870 4627) 61.1592 Tj
+-9028.94 TJm
+(trapframe 0552) 61.1592 Tj
 0 -484.1598 Td
-(TDCR 5685) 39.3166 Tj
--13543.8 TJm
-(userinit 1757) 56.7907 Tj
+(SYS_write 2705) 61.1592 Tj
+-13042 TJm
+(0552 1536 1780 2601) 83.0018 Tj
 17.4613 -493.6532 Td
-(5685 5713) 39.3166 Tj
--13543.8 TJm
-(0302 1235 1757) 61.1592 Tj
+(2705 2870) 39.3166 Tj
+-11537.3 TJm
+(trapret 2529) 52.4222 Tj
 Q
 Q
 q
@@ -3793,55 +3806,73 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:04 2008  cross-references  Page 12) 192.2146 Tj
-0 -28.4801 Td
+(Aug  8 01:04 2009  cross-references  Page 12) 192.2146 Tj
+17.4613 -28.4801 Td
+(1617 1785 2528 2529) 83.0018 Tj
+-6520.6 TJm
+(waitdisk 1151) 56.7907 Tj
+0 -37.9735 Td
+(T_SYSCALL 2426) 61.1592 Tj
+-13042 TJm
+(1151 1163 1172) 61.1592 Tj
+17.4613 -47.4664 Td
+(2426 2572 2603 6712) 83.0018 Tj
+-6520.6 TJm
+(wakeup 2064) 48.0537 Tj
+17.4613 -56.9598 Td
+(6717 6757) 39.3166 Tj
+-13543.8 TJm
+(0314 2064 2618 3422) 83.0018 Tj
+0 -66.4531 Td
+(tvinit 2566) 48.0537 Tj
+-14547 TJm
+(3639 3941 3966 5216) 83.0018 Tj
+17.4613 -75.9465 Td
+(0353 1228 2566) 61.1592 Tj
+-11035.5 TJm
+(5219 5241 5246 5268) 83.0018 Tj
+0 -85.4399 Td
+(usegment 1722) 56.7907 Tj
+-13543.7 TJm
+(6541) 17.4741 Tj
+17.4613 -94.9332 Td
+(0310 1722 1846 1926) 83.0018 Tj
+-6520.6 TJm
+(wakeup1 2053) 52.4222 Tj
+17.4613 -104.4266 Td
+(5112) 17.4741 Tj
+-16052.1 TJm
+(2053 2067 2126 2133) 83.0018 Tj
+0 -113.9199 Td
+(userinit 1802) 56.7907 Tj
+-11537.1 TJm
+(writei 4152) 48.0537 Tj
+17.4613 -123.4133 Td
+(0312 1235 1802) 61.1592 Tj
+-11035.5 TJm
+(0249 4152 4274 4532) 83.0018 Tj
+0 -132.9067 Td
 (VER 5661) 34.9481 Tj
 -16052 TJm
-(6491) 17.4741 Tj
-17.4613 -37.9735 Td
+(4785 4786) 39.3166 Tj
+17.4613 -142.4 Td
 (5661 5723) 39.3166 Tj
 -11537.3 TJm
-(wakeup1 1953) 52.4222 Tj
-0 -47.4664 Td
-(wait 2053) 39.3166 Tj
+(xchg 0501) 39.3166 Tj
+0 -151.8934 Td
+(wait 2153) 39.3166 Tj
 -15550.3 TJm
-(1953 1968 2026 2033) 83.0018 Tj
-17.4613 -56.9598 Td
-(0303 2053 2829 6783) 83.0018 Tj
+(0501 1260 1382 1419) 83.0018 Tj
+17.4613 -161.3867 Td
+(0313 2153 2923 6762) 83.0018 Tj
 -6520.6 TJm
-(writei 4152) 48.0537 Tj
-17.4613 -66.4531 Td
-(6812 6944 6970 6971) 83.0018 Tj
+(yield 1973) 43.6851 Tj
+17.4613 -170.8801 Td
+(6833 6944 6970 6971) 83.0018 Tj
 -8527.14 TJm
-(0249 4152 4274 4532) 83.0018 Tj
-17.4613 -75.9465 Td
+(0315 1973 2664) 61.1592 Tj
+17.4613 -180.3735 Td
 (7026) 17.4741 Tj
--16052.1 TJm
-(4785 4786) 39.3166 Tj
-0 -85.4399 Td
-(waitdisk 1151) 56.7907 Tj
--11537.1 TJm
-(xchg 0451) 39.3166 Tj
-17.4613 -94.9332 Td
-(1151 1163 1172) 61.1592 Tj
--11035.5 TJm
-(0451 1260 1384 1415) 83.0018 Tj
-0 -104.4266 Td
-(wakeup 1965) 48.0537 Tj
--12540.5 TJm
-(yield 1869) 43.6851 Tj
-17.4613 -113.9199 Td
-(0304 1965 2551 3419) 83.0018 Tj
--8527.14 TJm
-(0305 1869 2592) 61.1592 Tj
-17.4613 -123.4133 Td
-(3639 3891 3916 5220) 83.0018 Tj
--6520.6 TJm
-(_namei 4354) 48.0537 Tj
-17.4613 -132.9067 Td
-(5223 5262 5267 5290) 83.0018 Tj
--8527.14 TJm
-(4354 4392 4398) 61.1592 Tj
 Q
 Q
 Q
@@ -3870,6 +3901,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -3887,7 +3920,7 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:04 2008  xv6/types.h  Page 1) 166.0035 Tj
+(Aug  8 01:04 2009  xv6/types.h  Page 1) 166.0035 Tj
 0 -28.4801 Td
 (0100 typedef unsigned int   uint;) 144.161 Tj
 0 -37.9735 Td
@@ -4006,7 +4039,7 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:04 2008  xv6/param.h  Page 1) 166.0035 Tj
+(Aug  8 01:04 2009  xv6/param.h  Page 1) 166.0035 Tj
 0 -28.4801 Td
 (0150 #define NPROC        64  // maximum number of processes) 262.1109 Tj
 0 -37.9735 Td
@@ -4141,6 +4174,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -4158,7 +4193,7 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:04 2008  xv6/defs.h  Page 1) 161.635 Tj
+(Aug  8 01:04 2009  xv6/defs.h  Page 1) 161.635 Tj
 0 -28.4801 Td
 (0200 struct buf;) 69.8962 Tj
 0 -37.9735 Td
@@ -4192,11 +4227,11 @@ q
 0 -170.8805 Td
 (0215 // console.c) 74.2647 Tj
 0 -180.3739 Td
-(0216 void            console_init\(void\);) 174.7406 Tj
+(0216 void            consoleinit\(void\);) 170.3721 Tj
 0 -189.8672 Td
 (0217 void            cprintf\(char*, ...\);) 179.1091 Tj
 0 -199.3606 Td
-(0218 void            console_intr\(int\(*\)\(void\)\);) 209.6887 Tj
+(0218 void            consoleintr\(int\(*\)\(void\)\);) 205.3202 Tj
 0 -208.8539 Td
 (0219 void            panic\(char*\) __attribute__\(\(noreturn\)\
 \);) 262.1109 Tj
@@ -4279,25 +4314,25 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:04 2008  xv6/defs.h  Page 2) 161.635 Tj
+(Aug  8 01:04 2009  xv6/defs.h  Page 2) 161.635 Tj
 0 -28.4801 Td
 (0250 // ide.c) 56.7907 Tj
 0 -37.9735 Td
-(0251 void            ide_init\(void\);) 157.2665 Tj
+(0251 void            ideinit\(void\);) 152.898 Tj
 0 -47.4668 Td
-(0252 void            ide_intr\(void\);) 157.2665 Tj
+(0252 void            ideintr\(void\);) 152.898 Tj
 0 -56.9602 Td
-(0253 void            ide_rw\(struct buf *\);) 183.4776 Tj
+(0253 void            iderw\(struct buf*\);) 174.7406 Tj
 0 -66.4535 Td
 (0254 ) 21.8426 Tj
 0 -75.9469 Td
 (0255 // ioapic.c) 69.8962 Tj
 0 -85.4403 Td
-(0256 void            ioapic_enable\(int irq, int cpu\);) 231.5313 Tj
+(0256 void            ioapicenable\(int irq, int cpu\);) 227.1628 Tj
 0 -94.9336 Td
-(0257 extern uchar    ioapic_id;) 135.4239 Tj
+(0257 extern uchar    ioapicid;) 131.0554 Tj
 0 -104.427 Td
-(0258 void            ioapic_init\(void\);) 170.3721 Tj
+(0258 void            ioapicinit\(void\);) 166.0035 Tj
 0 -113.9203 Td
 (0259 ) 21.8426 Tj
 0 -123.4137 Td
@@ -4313,7 +4348,7 @@ q
 0 -170.8805 Td
 (0265 // kbd.c) 56.7907 Tj
 0 -180.3739 Td
-(0266 void            kbd_intr\(void\);) 157.2665 Tj
+(0266 void            kbdintr\(void\);) 152.898 Tj
 0 -189.8672 Td
 (0267 ) 21.8426 Tj
 0 -199.3606 Td
@@ -4323,64 +4358,63 @@ q
 0 -218.3473 Td
 (0270 extern volatile uint*    lapic;) 157.2665 Tj
 0 -227.8407 Td
-(0271 void            lapic_eoi\(void\);) 161.635 Tj
+(0271 void            lapiceoi\(void\);) 157.2665 Tj
 0 -237.334 Td
-(0272 void            lapic_init\(int\);) 161.635 Tj
+(0272 void            lapicinit\(int\);) 157.2665 Tj
 0 -246.8274 Td
-(0273 void            lapic_startap\(uchar, uint\);) 209.6887 Tj
+(0273 void            lapicstartap\(uchar, uint\);) 205.3202 Tj
 0 -256.3207 Td
-(0274 ) 21.8426 Tj
+(0274 void            microdelay\(int\);) 161.635 Tj
 0 -265.8141 Td
-(0275 // mp.c) 52.4222 Tj
+(0275 ) 21.8426 Tj
 0 -275.3075 Td
-(0276 extern int      ismp;) 113.5814 Tj
+(0276 // mp.c) 52.4222 Tj
 0 -284.8008 Td
-(0277 int             mp_bcpu\(void\);) 152.898 Tj
+(0277 extern int      ismp;) 113.5814 Tj
 0 -294.2942 Td
-(0278 void            mp_init\(void\);) 152.898 Tj
+(0278 int             mpbcpu\(void\);) 148.5295 Tj
 0 -303.7875 Td
-(0279 void            mp_startthem\(void\);) 174.7406 Tj
+(0279 void            mpinit\(void\);) 148.5295 Tj
 0 -313.2809 Td
-(0280 ) 21.8426 Tj
+(0280 void            mpstartthem\(void\);) 170.3721 Tj
 0 -322.7743 Td
-(0281 // picirq.c) 69.8962 Tj
+(0281 ) 21.8426 Tj
 0 -332.2676 Td
-(0282 void            pic_enable\(int\);) 161.635 Tj
+(0282 // picirq.c) 69.8962 Tj
 0 -341.761 Td
-(0283 void            pic_init\(void\);) 157.2665 Tj
+(0283 void            picenable\(int\);) 157.2665 Tj
 0 -351.2543 Td
-(0284 ) 21.8426 Tj
+(0284 void            picinit\(void\);) 152.898 Tj
 0 -360.7477 Td
-(0285 // pipe.c) 61.1592 Tj
+(0285 ) 21.8426 Tj
 0 -370.2411 Td
-(0286 int             pipealloc\(struct file**, struct file**\);) 266.4794 Tj
+(0286 // pipe.c) 61.1592 Tj
 0 -379.7344 Td
-(0287 void            pipeclose\(struct pipe*, int\);) 218.4257 Tj
+(0287 int             pipealloc\(struct file**, struct file**\);) 266.4794 Tj
 0 -389.2278 Td
-(0288 int             piperead\(struct pipe*, char*, int\);) 244.6368 Tj
+(0288 void            pipeclose\(struct pipe*, int\);) 218.4257 Tj
 0 -398.7211 Td
-(0289 int             pipewrite\(struct pipe*, char*, int\);) 249.0053 Tj
+(0289 int             piperead\(struct pipe*, char*, int\);) 244.6368 Tj
 0 -408.2145 Td
-(0290 ) 21.8426 Tj
+(0290 int             pipewrite\(struct pipe*, char*, int\);) 249.0053 Tj
 0 -417.7079 Td
-(0291 // proc.c) 61.1592 Tj
+(0291 ) 21.8426 Tj
 0 -427.2012 Td
-(0292 struct proc*    copyproc\(struct proc*\);) 192.2146 Tj
+(0292 ) 21.8426 Tj
 0 -436.6946 Td
-(0293 struct proc*    curproc\(void\);) 152.898 Tj
+(0293 ) 21.8426 Tj
 0 -446.1879 Td
-(0294 void            exit\(void\);) 139.7925 Tj
+(0294 ) 21.8426 Tj
 0 -455.6813 Td
-(0295 int             growproc\(int\);) 152.898 Tj
+(0295 ) 21.8426 Tj
 0 -465.1747 Td
-(0296 int             kill\(int\);) 135.4239 Tj
+(0296 ) 21.8426 Tj
 0 -474.668 Td
-(0297 void            pinit\(void\);) 144.161 Tj
+(0297 ) 21.8426 Tj
 0 -484.1614 Td
-(0298 void            procdump\(void\);) 157.2665 Tj
+(0298 ) 21.8426 Tj
 0 -493.6547 Td
-(0299 void            scheduler\(void\) __attribute__\(\(noretur\
-n\)\);) 275.2164 Tj
+(0299 ) 21.8426 Tj
 0 -522.1348 Td
 (Sheet 02) 34.9481 Tj
 Q
@@ -4411,6 +4445,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -4428,103 +4464,105 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:04 2008  xv6/defs.h  Page 3) 161.635 Tj
+(Aug  8 01:04 2009  xv6/defs.h  Page 3) 161.635 Tj
 0 -28.4801 Td
-(0300 void            setupsegs\(struct proc*\);) 196.5831 Tj
+(0300 // proc.c) 61.1592 Tj
 0 -37.9735 Td
-(0301 void            sleep\(void*, struct spinlock*\);) 227.1628 Tj
+(0301 struct proc*    copyproc\(struct proc*\);) 192.2146 Tj
 0 -47.4668 Td
-(0302 void            userinit\(void\);) 157.2665 Tj
+(0302 void            exit\(void\);) 139.7925 Tj
 0 -56.9602 Td
-(0303 int             wait\(void\);) 139.7925 Tj
+(0303 int             fork\(void\);) 139.7925 Tj
 0 -66.4535 Td
-(0304 void            wakeup\(void*\);) 152.898 Tj
+(0304 int             growproc\(int\);) 152.898 Tj
 0 -75.9469 Td
-(0305 void            yield\(void\);) 144.161 Tj
+(0305 int             kill\(int\);) 135.4239 Tj
 0 -85.4403 Td
-(0306 ) 21.8426 Tj
+(0306 void            pinit\(void\);) 144.161 Tj
 0 -94.9336 Td
-(0307 // swtch.S) 65.5277 Tj
+(0307 void            procdump\(void\);) 157.2665 Tj
 0 -104.427 Td
-(0308 void            swtch\(struct context*, struct context*\);) 266.4794 Tj
+(0308 void            scheduler\(void\) __attribute__\(\(noretur\
+n\)\);) 275.2164 Tj
 0 -113.9203 Td
-(0309 ) 21.8426 Tj
+(0309 void            ksegment\(void\);) 157.2665 Tj
 0 -123.4137 Td
-(0310 // spinlock.c) 78.6333 Tj
+(0310 void            usegment\(void\);) 157.2665 Tj
 0 -132.9071 Td
-(0311 void            acquire\(struct spinlock*\);) 205.3202 Tj
+(0311 void            sleep\(void*, struct spinlock*\);) 227.1628 Tj
 0 -142.4004 Td
-(0312 void            getcallerpcs\(void*, uint*\);) 209.6887 Tj
+(0312 void            userinit\(void\);) 157.2665 Tj
 0 -151.8938 Td
-(0313 int             holding\(struct spinlock*\);) 205.3202 Tj
+(0313 int             wait\(void\);) 139.7925 Tj
 0 -161.3871 Td
-(0314 void            initlock\(struct spinlock*, char*\);) 240.2683 Tj
+(0314 void            wakeup\(void*\);) 152.898 Tj
 0 -170.8805 Td
-(0315 void            release\(struct spinlock*\);) 205.3202 Tj
+(0315 void            yield\(void\);) 144.161 Tj
 0 -180.3739 Td
-(0316 void            pushcli\(\);) 135.4239 Tj
+(0316 ) 21.8426 Tj
 0 -189.8672 Td
-(0317 void            popcli\(\);) 131.0554 Tj
+(0317 // swtch.S) 65.5277 Tj
 0 -199.3606 Td
-(0318 ) 21.8426 Tj
+(0318 void            swtch\(struct context**, struct context*\)\
+;) 270.8479 Tj
 0 -208.8539 Td
-(0319 // string.c) 69.8962 Tj
+(0319 ) 21.8426 Tj
 0 -218.3473 Td
-(0320 int             memcmp\(const void*, const void*, uint\);) 262.1109 Tj
+(0320 // spinlock.c) 78.6333 Tj
 0 -227.8407 Td
-(0321 void*           memmove\(void*, const void*, uint\);) 240.2683 Tj
+(0321 void            acquire\(struct spinlock*\);) 205.3202 Tj
 0 -237.334 Td
-(0322 void*           memset\(void*, int, uint\);) 200.9517 Tj
+(0322 void            getcallerpcs\(void*, uint*\);) 209.6887 Tj
 0 -246.8274 Td
-(0323 char*           safestrcpy\(char*, const char*, int\);) 249.0053 Tj
+(0323 int             holding\(struct spinlock*\);) 205.3202 Tj
 0 -256.3207 Td
-(0324 int             strlen\(const char*\);) 179.1091 Tj
+(0324 void            initlock\(struct spinlock*, char*\);) 240.2683 Tj
 0 -265.8141 Td
-(0325 int             strncmp\(const char*, const char*, uint\);) 266.4794 Tj
+(0325 void            release\(struct spinlock*\);) 205.3202 Tj
 0 -275.3075 Td
-(0326 char*           strncpy\(char*, const char*, int\);) 235.8998 Tj
+(0326 void            pushcli\(\);) 135.4239 Tj
 0 -284.8008 Td
-(0327 ) 21.8426 Tj
+(0327 void            popcli\(\);) 131.0554 Tj
 0 -294.2942 Td
-(0328 // syscall.c) 74.2647 Tj
+(0328 ) 21.8426 Tj
 0 -303.7875 Td
-(0329 int             argint\(int, int*\);) 170.3721 Tj
+(0329 // string.c) 69.8962 Tj
 0 -313.2809 Td
-(0330 int             argptr\(int, char**, int\);) 200.9517 Tj
+(0330 int             memcmp\(const void*, const void*, uint\);) 262.1109 Tj
 0 -322.7743 Td
-(0331 int             argstr\(int, char**\);) 179.1091 Tj
+(0331 void*           memmove\(void*, const void*, uint\);) 240.2683 Tj
 0 -332.2676 Td
-(0332 int             fetchint\(struct proc*, uint, int*\);) 244.6368 Tj
+(0332 void*           memset\(void*, int, uint\);) 200.9517 Tj
 0 -341.761 Td
-(0333 int             fetchstr\(struct proc*, uint, char**\);) 253.3738 Tj
+(0333 char*           safestrcpy\(char*, const char*, int\);) 249.0053 Tj
 0 -351.2543 Td
-(0334 void            syscall\(void\);) 152.898 Tj
+(0334 int             strlen\(const char*\);) 179.1091 Tj
 0 -360.7477 Td
-(0335 ) 21.8426 Tj
+(0335 int             strncmp\(const char*, const char*, uint\);) 266.4794 Tj
 0 -370.2411 Td
-(0336 // timer.c) 65.5277 Tj
+(0336 char*           strncpy\(char*, const char*, int\);) 235.8998 Tj
 0 -379.7344 Td
-(0337 void            timer_init\(void\);) 166.0035 Tj
+(0337 ) 21.8426 Tj
 0 -389.2278 Td
-(0338 ) 21.8426 Tj
+(0338 // syscall.c) 74.2647 Tj
 0 -398.7211 Td
-(0339 // trap.c) 61.1592 Tj
+(0339 int             argint\(int, int*\);) 170.3721 Tj
 0 -408.2145 Td
-(0340 void            idtinit\(void\);) 152.898 Tj
+(0340 int             argptr\(int, char**, int\);) 200.9517 Tj
 0 -417.7079 Td
-(0341 extern int      ticks;) 117.9499 Tj
+(0341 int             argstr\(int, char**\);) 179.1091 Tj
 0 -427.2012 Td
-(0342 void            tvinit\(void\);) 148.5295 Tj
+(0342 int             fetchint\(struct proc*, uint, int*\);) 244.6368 Tj
 0 -436.6946 Td
-(0343 extern struct spinlock tickslock;) 166.0035 Tj
+(0343 int             fetchstr\(struct proc*, uint, char**\);) 253.3738 Tj
 0 -446.1879 Td
-(0344 ) 21.8426 Tj
+(0344 void            syscall\(void\);) 152.898 Tj
 0 -455.6813 Td
-(0345 // number of elements in fixed-size array) 200.9517 Tj
+(0345 ) 21.8426 Tj
 0 -465.1747 Td
-(0346 #define NELEM\(x\) \(sizeof\(x\)/sizeof\(\(x\)[0]\)\)) 209.6887 Tj
+(0346 // timer.c) 65.5277 Tj
 0 -474.668 Td
-(0347 ) 21.8426 Tj
+(0347 void            timerinit\(void\);) 161.635 Tj
 0 -484.1614 Td
 (0348 ) 21.8426 Tj
 0 -493.6547 Td
@@ -4547,110 +4585,105 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:04 2008  xv6/x86.h  Page 1) 157.2665 Tj
+(Aug  8 01:04 2009  xv6/defs.h  Page 4) 161.635 Tj
 0 -28.4801 Td
-(0350 // Routines to let C code use special x86 instructions.) 262.1109 Tj
+(0350 // trap.c) 61.1592 Tj
 0 -37.9735 Td
-(0351 ) 21.8426 Tj
+(0351 void            idtinit\(void\);) 152.898 Tj
 0 -47.4668 Td
-(0352 static inline uchar) 104.8443 Tj
+(0352 extern int      ticks;) 117.9499 Tj
 0 -56.9602 Td
-(0353 inb\(ushort port\)) 91.7388 Tj
+(0353 void            tvinit\(void\);) 148.5295 Tj
 0 -66.4535 Td
-(0354 {) 26.2111 Tj
+(0354 extern struct spinlock tickslock;) 166.0035 Tj
 0 -75.9469 Td
-(0355   uchar data;) 78.6333 Tj
+(0355 ) 21.8426 Tj
 0 -85.4403 Td
-(0356 ) 21.8426 Tj
+(0356 // uart.c) 61.1592 Tj
 0 -94.9336 Td
-(0357   asm volatile\("in %1,%0" : "=a" \(data\) : "d" \(port\)\)\
-;) 257.7424 Tj
+(0357 void            uartinit\(void\);) 157.2665 Tj
 0 -104.427 Td
-(0358   return data;) 83.0018 Tj
+(0358 void            uartintr\(void\);) 157.2665 Tj
 0 -113.9203 Td
-(0359 }) 26.2111 Tj
+(0359 void            uartputc\(int\);) 152.898 Tj
 0 -123.4137 Td
 (0360 ) 21.8426 Tj
 0 -132.9071 Td
-(0361 static inline void) 100.4758 Tj
+(0361 // number of elements in fixed-size array) 200.9517 Tj
 0 -142.4004 Td
-(0362 insl\(int port, void *addr, int cnt\)) 174.7406 Tj
+(0362 #define NELEM\(x\) \(sizeof\(x\)/sizeof\(\(x\)[0]\)\)) 209.6887 Tj
 0 -151.8938 Td
-(0363 {) 26.2111 Tj
+(0363 ) 21.8426 Tj
 0 -161.3871 Td
-(0364   asm volatile\("cld\\n\\trepne\\n\\tinsl"     :) 209.6887 Tj
+(0364 ) 21.8426 Tj
 0 -170.8805 Td
-(0365                    "=D" \(addr\), "=c" \(cnt\)    :) 227.1628 Tj
+(0365 ) 21.8426 Tj
 0 -180.3739 Td
-(0366                    "d" \(port\), "0" \(addr\), "1" \(cnt\)\
-  :) 262.1109 Tj
+(0366 ) 21.8426 Tj
 0 -189.8672 Td
-(0367                    "memory", "cc"\);) 174.7406 Tj
+(0367 ) 21.8426 Tj
 0 -199.3606 Td
-(0368 }) 26.2111 Tj
+(0368 ) 21.8426 Tj
 0 -208.8539 Td
 (0369 ) 21.8426 Tj
 0 -218.3473 Td
-(0370 static inline void) 100.4758 Tj
+(0370 ) 21.8426 Tj
 0 -227.8407 Td
-(0371 outb\(ushort port, uchar data\)) 148.5295 Tj
+(0371 ) 21.8426 Tj
 0 -237.334 Td
-(0372 {) 26.2111 Tj
+(0372 ) 21.8426 Tj
 0 -246.8274 Td
-(0373   asm volatile\("out %0,%1" : : "a" \(data\), "d" \(port\)\
-\);) 262.1109 Tj
+(0373 ) 21.8426 Tj
 0 -256.3207 Td
-(0374 }) 26.2111 Tj
+(0374 ) 21.8426 Tj
 0 -265.8141 Td
 (0375 ) 21.8426 Tj
 0 -275.3075 Td
-(0376 static inline void) 100.4758 Tj
+(0376 ) 21.8426 Tj
 0 -284.8008 Td
-(0377 outw\(ushort port, ushort data\)) 152.898 Tj
+(0377 ) 21.8426 Tj
 0 -294.2942 Td
-(0378 {) 26.2111 Tj
+(0378 ) 21.8426 Tj
 0 -303.7875 Td
-(0379   asm volatile\("out %0,%1" : : "a" \(data\), "d" \(port\)\
-\);) 262.1109 Tj
+(0379 ) 21.8426 Tj
 0 -313.2809 Td
-(0380 }) 26.2111 Tj
+(0380 ) 21.8426 Tj
 0 -322.7743 Td
 (0381 ) 21.8426 Tj
 0 -332.2676 Td
-(0382 static inline void) 100.4758 Tj
+(0382 ) 21.8426 Tj
 0 -341.761 Td
-(0383 outsl\(int port, const void *addr, int cnt\)) 205.3202 Tj
+(0383 ) 21.8426 Tj
 0 -351.2543 Td
-(0384 {) 26.2111 Tj
+(0384 ) 21.8426 Tj
 0 -360.7477 Td
-(0385   asm volatile\("cld\\n\\trepne\\n\\toutsl"    :) 209.6887 Tj
+(0385 ) 21.8426 Tj
 0 -370.2411 Td
-(0386                    "=S" \(addr\), "=c" \(cnt\)    :) 227.1628 Tj
+(0386 ) 21.8426 Tj
 0 -379.7344 Td
-(0387                    "d" \(port\), "0" \(addr\), "1" \(cnt\)\
-  :) 262.1109 Tj
+(0387 ) 21.8426 Tj
 0 -389.2278 Td
-(0388                    "cc"\);) 131.0554 Tj
+(0388 ) 21.8426 Tj
 0 -398.7211 Td
-(0389 }) 26.2111 Tj
+(0389 ) 21.8426 Tj
 0 -408.2145 Td
 (0390 ) 21.8426 Tj
 0 -417.7079 Td
-(0391 static inline uint) 100.4758 Tj
+(0391 ) 21.8426 Tj
 0 -427.2012 Td
-(0392 read_ebp\(void\)) 83.0018 Tj
+(0392 ) 21.8426 Tj
 0 -436.6946 Td
-(0393 {) 26.2111 Tj
+(0393 ) 21.8426 Tj
 0 -446.1879 Td
-(0394   uint ebp;) 69.8962 Tj
+(0394 ) 21.8426 Tj
 0 -455.6813 Td
 (0395 ) 21.8426 Tj
 0 -465.1747 Td
-(0396   asm volatile\("movl %%ebp, %0" : "=a" \(ebp\)\);) 222.7942 Tj
+(0396 ) 21.8426 Tj
 0 -474.668 Td
-(0397   return ebp;) 78.6333 Tj
+(0397 ) 21.8426 Tj
 0 -484.1614 Td
-(0398 }) 26.2111 Tj
+(0398 ) 21.8426 Tj
 0 -493.6547 Td
 (0399 ) 21.8426 Tj
 0 -522.1348 Td
@@ -4683,6 +4716,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -4700,105 +4735,108 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:04 2008  xv6/x86.h  Page 2) 157.2665 Tj
+(Aug  8 01:04 2009  xv6/x86.h  Page 1) 157.2665 Tj
 0 -28.4801 Td
-(0400 struct segdesc;) 87.3703 Tj
+(0400 // Routines to let C code use special x86 instructions.) 262.1109 Tj
 0 -37.9735 Td
 (0401 ) 21.8426 Tj
 0 -47.4668 Td
-(0402 static inline void) 100.4758 Tj
+(0402 static inline uchar) 104.8443 Tj
 0 -56.9602 Td
-(0403 lgdt\(struct segdesc *p, int size\)) 166.0035 Tj
+(0403 inb\(ushort port\)) 91.7388 Tj
 0 -66.4535 Td
 (0404 {) 26.2111 Tj
 0 -75.9469 Td
-(0405   volatile ushort pd[3];) 126.6869 Tj
+(0405   uchar data;) 78.6333 Tj
 0 -85.4403 Td
 (0406 ) 21.8426 Tj
 0 -94.9336 Td
-(0407   pd[0] = size-1;) 96.1073 Tj
+(0407   asm volatile\("in %1,%0" : "=a" \(data\) : "d" \(port\)\)\
+;) 257.7424 Tj
 0 -104.427 Td
-(0408   pd[1] = \(uint\)p;) 100.4758 Tj
+(0408   return data;) 83.0018 Tj
 0 -113.9203 Td
-(0409   pd[2] = \(uint\)p >> 16;) 126.6869 Tj
+(0409 }) 26.2111 Tj
 0 -123.4137 Td
 (0410 ) 21.8426 Tj
 0 -132.9071 Td
-(0411   asm volatile\("lgdt \(%0\)" : : "r" \(pd\)\);) 200.9517 Tj
+(0411 static inline void) 100.4758 Tj
 0 -142.4004 Td
-(0412 }) 26.2111 Tj
+(0412 insl\(int port, void *addr, int cnt\)) 174.7406 Tj
 0 -151.8938 Td
-(0413 ) 21.8426 Tj
+(0413 {) 26.2111 Tj
 0 -161.3871 Td
-(0414 struct gatedesc;) 91.7388 Tj
+(0414   asm volatile\("cld; rep insl" :) 161.635 Tj
 0 -170.8805 Td
-(0415 ) 21.8426 Tj
+(0415                "=D" \(addr\), "=c" \(cnt\) :) 196.5831 Tj
 0 -180.3739 Td
-(0416 static inline void) 100.4758 Tj
+(0416                "d" \(port\), "0" \(addr\), "1" \(cnt\) :) 240.2683 Tj
 0 -189.8672 Td
-(0417 lidt\(struct gatedesc *p, int size\)) 170.3721 Tj
+(0417                "memory", "cc"\);) 157.2665 Tj
 0 -199.3606 Td
-(0418 {) 26.2111 Tj
+(0418 }) 26.2111 Tj
 0 -208.8539 Td
-(0419   volatile ushort pd[3];) 126.6869 Tj
+(0419 ) 21.8426 Tj
 0 -218.3473 Td
-(0420 ) 21.8426 Tj
+(0420 static inline void) 100.4758 Tj
 0 -227.8407 Td
-(0421   pd[0] = size-1;) 96.1073 Tj
+(0421 outb\(ushort port, uchar data\)) 148.5295 Tj
 0 -237.334 Td
-(0422   pd[1] = \(uint\)p;) 100.4758 Tj
+(0422 {) 26.2111 Tj
 0 -246.8274 Td
-(0423   pd[2] = \(uint\)p >> 16;) 126.6869 Tj
+(0423   asm volatile\("out %0,%1" : : "a" \(data\), "d" \(port\)\
+\);) 262.1109 Tj
 0 -256.3207 Td
-(0424 ) 21.8426 Tj
+(0424 }) 26.2111 Tj
 0 -265.8141 Td
-(0425   asm volatile\("lidt \(%0\)" : : "r" \(pd\)\);) 200.9517 Tj
+(0425 ) 21.8426 Tj
 0 -275.3075 Td
-(0426 }) 26.2111 Tj
+(0426 static inline void) 100.4758 Tj
 0 -284.8008 Td
-(0427 ) 21.8426 Tj
+(0427 outw\(ushort port, ushort data\)) 152.898 Tj
 0 -294.2942 Td
-(0428 static inline void) 100.4758 Tj
+(0428 {) 26.2111 Tj
 0 -303.7875 Td
-(0429 ltr\(ushort sel\)) 87.3703 Tj
+(0429   asm volatile\("out %0,%1" : : "a" \(data\), "d" \(port\)\
+\);) 262.1109 Tj
 0 -313.2809 Td
-(0430 {) 26.2111 Tj
+(0430 }) 26.2111 Tj
 0 -322.7743 Td
-(0431   asm volatile\("ltr %0" : : "r" \(sel\)\);) 192.2146 Tj
+(0431 ) 21.8426 Tj
 0 -332.2676 Td
-(0432 }) 26.2111 Tj
+(0432 static inline void) 100.4758 Tj
 0 -341.761 Td
-(0433 ) 21.8426 Tj
+(0433 outsl\(int port, const void *addr, int cnt\)) 205.3202 Tj
 0 -351.2543 Td
-(0434 static inline uint) 100.4758 Tj
+(0434 {) 26.2111 Tj
 0 -360.7477 Td
-(0435 read_eflags\(void\)) 96.1073 Tj
+(0435   asm volatile\("cld; rep outsl" :) 166.0035 Tj
 0 -370.2411 Td
-(0436 {) 26.2111 Tj
+(0436                "=S" \(addr\), "=c" \(cnt\) :) 196.5831 Tj
 0 -379.7344 Td
-(0437   uint eflags;) 83.0018 Tj
+(0437                "d" \(port\), "0" \(addr\), "1" \(cnt\) :) 240.2683 Tj
 0 -389.2278 Td
-(0438   asm volatile\("pushfl; popl %0" : "=r" \(eflags\)\);) 240.2683 Tj
+(0438                "cc"\);) 113.5814 Tj
 0 -398.7211 Td
-(0439   return eflags;) 91.7388 Tj
+(0439 }) 26.2111 Tj
 0 -408.2145 Td
-(0440 }) 26.2111 Tj
+(0440 ) 21.8426 Tj
 0 -417.7079 Td
-(0441 ) 21.8426 Tj
+(0441 static inline void) 100.4758 Tj
 0 -427.2012 Td
-(0442 static inline void) 100.4758 Tj
+(0442 stosb\(void *addr, int data, int cnt\)) 179.1091 Tj
 0 -436.6946 Td
-(0443 write_eflags\(uint eflags\)) 131.0554 Tj
+(0443 {) 26.2111 Tj
 0 -446.1879 Td
-(0444 {) 26.2111 Tj
+(0444   asm volatile\("cld; rep stosb" :) 166.0035 Tj
 0 -455.6813 Td
-(0445   asm volatile\("pushl %0; popfl" : : "r" \(eflags\)\);) 244.6368 Tj
+(0445                "=D" \(addr\), "=c" \(cnt\) :) 196.5831 Tj
 0 -465.1747 Td
-(0446 }) 26.2111 Tj
+(0446                "0" \(addr\), "1" \(cnt\), "a" \(data\) :) 240.2683 Tj
 0 -474.668 Td
-(0447 ) 21.8426 Tj
+(0447                "memory", "cc"\);) 157.2665 Tj
 0 -484.1614 Td
-(0448 ) 21.8426 Tj
+(0448 }) 26.2111 Tj
 0 -493.6547 Td
 (0449 ) 21.8426 Tj
 0 -522.1348 Td
@@ -4819,107 +4857,107 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:04 2008  xv6/x86.h  Page 3) 157.2665 Tj
+(Aug  8 01:04 2009  xv6/x86.h  Page 2) 157.2665 Tj
 0 -28.4801 Td
-(0450 static inline uint) 100.4758 Tj
+(0450 struct segdesc;) 87.3703 Tj
 0 -37.9735 Td
-(0451 xchg\(volatile uint *addr, uint newval\)) 187.8461 Tj
+(0451 ) 21.8426 Tj
 0 -47.4668 Td
-(0452 {) 26.2111 Tj
+(0452 static inline void) 100.4758 Tj
 0 -56.9602 Td
-(0453   uint result;) 83.0018 Tj
+(0453 lgdt\(struct segdesc *p, int size\)) 166.0035 Tj
 0 -66.4535 Td
-(0454 ) 21.8426 Tj
+(0454 {) 26.2111 Tj
 0 -75.9469 Td
-(0455   // The + in "+m" denotes a read-modify-write operand.) 262.1109 Tj
+(0455   volatile ushort pd[3];) 126.6869 Tj
 0 -85.4403 Td
-(0456   asm volatile\("lock; xchgl %0, %1" :) 183.4776 Tj
+(0456 ) 21.8426 Tj
 0 -94.9336 Td
-(0457                "+m" \(*addr\), "=a" \(result\) :) 214.0572 Tj
+(0457   pd[0] = size-1;) 96.1073 Tj
 0 -104.427 Td
-(0458                "1" \(newval\) :) 148.5295 Tj
+(0458   pd[1] = \(uint\)p;) 100.4758 Tj
 0 -113.9203 Td
-(0459                "cc"\);) 113.5814 Tj
+(0459   pd[2] = \(uint\)p >> 16;) 126.6869 Tj
 0 -123.4137 Td
-(0460   return result;) 91.7388 Tj
+(0460 ) 21.8426 Tj
 0 -132.9071 Td
-(0461 }) 26.2111 Tj
+(0461   asm volatile\("lgdt \(%0\)" : : "r" \(pd\)\);) 200.9517 Tj
 0 -142.4004 Td
-(0462 ) 21.8426 Tj
+(0462 }) 26.2111 Tj
 0 -151.8938 Td
-(0463 static inline void) 100.4758 Tj
+(0463 ) 21.8426 Tj
 0 -161.3871 Td
-(0464 cli\(void\)) 61.1592 Tj
+(0464 struct gatedesc;) 91.7388 Tj
 0 -170.8805 Td
-(0465 {) 26.2111 Tj
+(0465 ) 21.8426 Tj
 0 -180.3739 Td
-(0466   asm volatile\("cli"\);) 117.9499 Tj
+(0466 static inline void) 100.4758 Tj
 0 -189.8672 Td
-(0467 }) 26.2111 Tj
+(0467 lidt\(struct gatedesc *p, int size\)) 170.3721 Tj
 0 -199.3606 Td
-(0468 ) 21.8426 Tj
+(0468 {) 26.2111 Tj
 0 -208.8539 Td
-(0469 static inline void) 100.4758 Tj
+(0469   volatile ushort pd[3];) 126.6869 Tj
 0 -218.3473 Td
-(0470 sti\(void\)) 61.1592 Tj
+(0470 ) 21.8426 Tj
 0 -227.8407 Td
-(0471 {) 26.2111 Tj
+(0471   pd[0] = size-1;) 96.1073 Tj
 0 -237.334 Td
-(0472   asm volatile\("sti"\);) 117.9499 Tj
+(0472   pd[1] = \(uint\)p;) 100.4758 Tj
 0 -246.8274 Td
-(0473 }) 26.2111 Tj
+(0473   pd[2] = \(uint\)p >> 16;) 126.6869 Tj
 0 -256.3207 Td
 (0474 ) 21.8426 Tj
 0 -265.8141 Td
-(0475 // Layout of the trap frame built on the stack by the) 253.3738 Tj
+(0475   asm volatile\("lidt \(%0\)" : : "r" \(pd\)\);) 200.9517 Tj
 0 -275.3075 Td
-(0476 // hardware and by trapasm.S, and passed to trap\(\).) 244.6368 Tj
+(0476 }) 26.2111 Tj
 0 -284.8008 Td
-(0477 struct trapframe {) 100.4758 Tj
+(0477 ) 21.8426 Tj
 0 -294.2942 Td
-(0478   // registers as pushed by pusha) 166.0035 Tj
+(0478 static inline void) 100.4758 Tj
 0 -303.7875 Td
-(0479   uint edi;) 69.8962 Tj
+(0479 ltr\(ushort sel\)) 87.3703 Tj
 0 -313.2809 Td
-(0480   uint esi;) 69.8962 Tj
+(0480 {) 26.2111 Tj
 0 -322.7743 Td
-(0481   uint ebp;) 69.8962 Tj
+(0481   asm volatile\("ltr %0" : : "r" \(sel\)\);) 192.2146 Tj
 0 -332.2676 Td
-(0482   uint oesp;      // useless & ignored) 187.8461 Tj
+(0482 }) 26.2111 Tj
 0 -341.761 Td
-(0483   uint ebx;) 69.8962 Tj
+(0483 ) 21.8426 Tj
 0 -351.2543 Td
-(0484   uint edx;) 69.8962 Tj
+(0484 static inline uint) 100.4758 Tj
 0 -360.7477 Td
-(0485   uint ecx;) 69.8962 Tj
+(0485 readeflags\(void\)) 91.7388 Tj
 0 -370.2411 Td
-(0486   uint eax;) 69.8962 Tj
+(0486 {) 26.2111 Tj
 0 -379.7344 Td
-(0487 ) 21.8426 Tj
+(0487   uint eflags;) 83.0018 Tj
 0 -389.2278 Td
-(0488   // rest of trap frame) 122.3184 Tj
+(0488   asm volatile\("pushfl; popl %0" : "=r" \(eflags\)\);) 240.2683 Tj
 0 -398.7211 Td
-(0489   ushort es;) 74.2647 Tj
+(0489   return eflags;) 91.7388 Tj
 0 -408.2145 Td
-(0490   ushort padding1;) 100.4758 Tj
+(0490 }) 26.2111 Tj
 0 -417.7079 Td
-(0491   ushort ds;) 74.2647 Tj
+(0491 ) 21.8426 Tj
 0 -427.2012 Td
-(0492   ushort padding2;) 100.4758 Tj
+(0492 ) 21.8426 Tj
 0 -436.6946 Td
-(0493   uint trapno;) 83.0018 Tj
+(0493 ) 21.8426 Tj
 0 -446.1879 Td
 (0494 ) 21.8426 Tj
 0 -455.6813 Td
-(0495   // below here defined by x86 hardware) 192.2146 Tj
+(0495 ) 21.8426 Tj
 0 -465.1747 Td
-(0496   uint err;) 69.8962 Tj
+(0496 ) 21.8426 Tj
 0 -474.668 Td
-(0497   uint eip;) 69.8962 Tj
+(0497 ) 21.8426 Tj
 0 -484.1614 Td
-(0498   ushort cs;) 74.2647 Tj
+(0498 ) 21.8426 Tj
 0 -493.6547 Td
-(0499   ushort padding3;) 100.4758 Tj
+(0499 ) 21.8426 Tj
 0 -522.1348 Td
 (Sheet 04) 34.9481 Tj
 Q
@@ -4950,6 +4988,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -4967,70 +5007,69 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:04 2008  xv6/x86.h  Page 4) 157.2665 Tj
+(Aug  8 01:04 2009  xv6/x86.h  Page 3) 157.2665 Tj
 0 -28.4801 Td
-(0500   uint eflags;) 83.0018 Tj
+(0500 static inline uint) 100.4758 Tj
 0 -37.9735 Td
-(0501 ) 21.8426 Tj
+(0501 xchg\(volatile uint *addr, uint newval\)) 187.8461 Tj
 0 -47.4668 Td
-(0502   // below here only when crossing rings, such as from use\
-r to kernel) 323.2701 Tj
+(0502 {) 26.2111 Tj
 0 -56.9602 Td
-(0503   uint esp;) 69.8962 Tj
+(0503   uint result;) 83.0018 Tj
 0 -66.4535 Td
-(0504   ushort ss;) 74.2647 Tj
+(0504 ) 21.8426 Tj
 0 -75.9469 Td
-(0505   ushort padding4;) 100.4758 Tj
+(0505   // The + in "+m" denotes a read-modify-write operand.) 262.1109 Tj
 0 -85.4403 Td
-(0506 };) 30.5796 Tj
+(0506   asm volatile\("lock; xchgl %0, %1" :) 183.4776 Tj
 0 -94.9336 Td
-(0507 ) 21.8426 Tj
+(0507                "+m" \(*addr\), "=a" \(result\) :) 214.0572 Tj
 0 -104.427 Td
-(0508 ) 21.8426 Tj
+(0508                "1" \(newval\) :) 148.5295 Tj
 0 -113.9203 Td
-(0509 ) 21.8426 Tj
+(0509                "cc"\);) 113.5814 Tj
 0 -123.4137 Td
-(0510 ) 21.8426 Tj
+(0510   return result;) 91.7388 Tj
 0 -132.9071 Td
-(0511 ) 21.8426 Tj
+(0511 }) 26.2111 Tj
 0 -142.4004 Td
 (0512 ) 21.8426 Tj
 0 -151.8938 Td
-(0513 ) 21.8426 Tj
+(0513 static inline void) 100.4758 Tj
 0 -161.3871 Td
-(0514 ) 21.8426 Tj
+(0514 loadfsgs\(ushort v\)) 100.4758 Tj
 0 -170.8805 Td
-(0515 ) 21.8426 Tj
+(0515 {) 26.2111 Tj
 0 -180.3739 Td
-(0516 ) 21.8426 Tj
+(0516   asm volatile\("movw %0, %%fs" : : "r" \(v\)\);) 214.0572 Tj
 0 -189.8672 Td
-(0517 ) 21.8426 Tj
+(0517   asm volatile\("movw %0, %%gs" : : "r" \(v\)\);) 214.0572 Tj
 0 -199.3606 Td
-(0518 ) 21.8426 Tj
+(0518 }) 26.2111 Tj
 0 -208.8539 Td
 (0519 ) 21.8426 Tj
 0 -218.3473 Td
-(0520 ) 21.8426 Tj
+(0520 static inline void) 100.4758 Tj
 0 -227.8407 Td
-(0521 ) 21.8426 Tj
+(0521 cli\(void\)) 61.1592 Tj
 0 -237.334 Td
-(0522 ) 21.8426 Tj
+(0522 {) 26.2111 Tj
 0 -246.8274 Td
-(0523 ) 21.8426 Tj
+(0523   asm volatile\("cli"\);) 117.9499 Tj
 0 -256.3207 Td
-(0524 ) 21.8426 Tj
+(0524 }) 26.2111 Tj
 0 -265.8141 Td
 (0525 ) 21.8426 Tj
 0 -275.3075 Td
-(0526 ) 21.8426 Tj
+(0526 static inline void) 100.4758 Tj
 0 -284.8008 Td
-(0527 ) 21.8426 Tj
+(0527 sti\(void\)) 61.1592 Tj
 0 -294.2942 Td
-(0528 ) 21.8426 Tj
+(0528 {) 26.2111 Tj
 0 -303.7875 Td
-(0529 ) 21.8426 Tj
+(0529   asm volatile\("sti"\);) 117.9499 Tj
 0 -313.2809 Td
-(0530 ) 21.8426 Tj
+(0530 }) 26.2111 Tj
 0 -322.7743 Td
 (0531 ) 21.8426 Tj
 0 -332.2676 Td
@@ -5087,89 +5126,80 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:04 2008  xv6/asm.h  Page 1) 157.2665 Tj
+(Aug  8 01:04 2009  xv6/x86.h  Page 4) 157.2665 Tj
 0 -28.4801 Td
-(0550 //) 30.5796 Tj
+(0550 // Layout of the trap frame built on the stack by the) 253.3738 Tj
 0 -37.9735 Td
-(0551 // assembler macros to create x86 segments) 205.3202 Tj
+(0551 // hardware and by trapasm.S, and passed to trap\(\).) 244.6368 Tj
 0 -47.4668 Td
-(0552 //) 30.5796 Tj
+(0552 struct trapframe {) 100.4758 Tj
 0 -56.9602 Td
-(0553 ) 21.8426 Tj
+(0553   // registers as pushed by pusha) 166.0035 Tj
 0 -66.4535 Td
-(0554 #define SEG_NULLASM                                       \
-      \\) 305.796 Tj
+(0554   uint edi;) 69.8962 Tj
 0 -75.9469 Td
-(0555         .word 0, 0;                                       \
-      \\) 305.796 Tj
+(0555   uint esi;) 69.8962 Tj
 0 -85.4403 Td
-(0556         .byte 0, 0, 0, 0) 126.6869 Tj
+(0556   uint ebp;) 69.8962 Tj
 0 -94.9336 Td
-(0557 ) 21.8426 Tj
+(0557   uint oesp;      // useless & ignored) 187.8461 Tj
 0 -104.427 Td
-(0558 #define SEG_ASM\(type,base,lim\)                          \
-        \\) 305.796 Tj
+(0558   uint ebx;) 69.8962 Tj
 0 -113.9203 Td
-(0559         .word \(\(\(lim\) >> 12\) & 0xffff\), \(\(base\) &\
- 0xffff\);      \\) 305.796 Tj
+(0559   uint edx;) 69.8962 Tj
 0 -123.4137 Td
-(0560         .byte \(\(\(base\) >> 16\) & 0xff\), \(0x90 | \(ty\
-pe\)\),         \\) 305.796 Tj
+(0560   uint ecx;) 69.8962 Tj
 0 -132.9071 Td
-(0561                 \(0xC0 | \(\(\(lim\) >> 28\) & 0xf\)\), \(\
-\(\(base\) >> 24\) & 0xff\)) 332.0071 Tj
+(0561   uint eax;) 69.8962 Tj
 0 -142.4004 Td
 (0562 ) 21.8426 Tj
 0 -151.8938 Td
-(0563 #define STA_X     0x8       // Executable segment) 235.8998 Tj
+(0563   // rest of trap frame) 122.3184 Tj
 0 -161.3871 Td
-(0564 #define STA_E     0x4       // Expand down \(non-executabl\
-e segments\)) 318.9016 Tj
+(0564   ushort gs;) 74.2647 Tj
 0 -170.8805 Td
-(0565 #define STA_C     0x4       // Conforming code segment \(e\
-xecutable only\)) 336.3756 Tj
+(0565   ushort padding1;) 100.4758 Tj
 0 -180.3739 Td
-(0566 #define STA_W     0x2       // Writeable \(non-executable \
-segments\)) 310.1645 Tj
+(0566   ushort fs;) 74.2647 Tj
 0 -189.8672 Td
-(0567 #define STA_R     0x2       // Readable \(executable segme\
-nts\)) 288.322 Tj
+(0567   ushort padding2;) 100.4758 Tj
 0 -199.3606 Td
-(0568 #define STA_A     0x1       // Accessed) 192.2146 Tj
+(0568   ushort es;) 74.2647 Tj
 0 -208.8539 Td
-(0569 ) 21.8426 Tj
+(0569   ushort padding3;) 100.4758 Tj
 0 -218.3473 Td
-(0570 ) 21.8426 Tj
+(0570   ushort ds;) 74.2647 Tj
 0 -227.8407 Td
-(0571 ) 21.8426 Tj
+(0571   ushort padding4;) 100.4758 Tj
 0 -237.334 Td
-(0572 ) 21.8426 Tj
+(0572   uint trapno;) 83.0018 Tj
 0 -246.8274 Td
 (0573 ) 21.8426 Tj
 0 -256.3207 Td
-(0574 ) 21.8426 Tj
+(0574   // below here defined by x86 hardware) 192.2146 Tj
 0 -265.8141 Td
-(0575 ) 21.8426 Tj
+(0575   uint err;) 69.8962 Tj
 0 -275.3075 Td
-(0576 ) 21.8426 Tj
+(0576   uint eip;) 69.8962 Tj
 0 -284.8008 Td
-(0577 ) 21.8426 Tj
+(0577   ushort cs;) 74.2647 Tj
 0 -294.2942 Td
-(0578 ) 21.8426 Tj
+(0578   ushort padding5;) 100.4758 Tj
 0 -303.7875 Td
-(0579 ) 21.8426 Tj
+(0579   uint eflags;) 83.0018 Tj
 0 -313.2809 Td
 (0580 ) 21.8426 Tj
 0 -322.7743 Td
-(0581 ) 21.8426 Tj
+(0581   // below here only when crossing rings, such as from use\
+r to kernel) 323.2701 Tj
 0 -332.2676 Td
-(0582 ) 21.8426 Tj
+(0582   uint esp;) 69.8962 Tj
 0 -341.761 Td
-(0583 ) 21.8426 Tj
+(0583   ushort ss;) 74.2647 Tj
 0 -351.2543 Td
-(0584 ) 21.8426 Tj
+(0584   ushort padding6;) 100.4758 Tj
 0 -360.7477 Td
-(0585 ) 21.8426 Tj
+(0585 };) 30.5796 Tj
 0 -370.2411 Td
 (0586 ) 21.8426 Tj
 0 -379.7344 Td
@@ -5228,6 +5258,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -5245,103 +5277,101 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:04 2008  xv6/mmu.h  Page 1) 157.2665 Tj
+(Aug  8 01:04 2009  xv6/asm.h  Page 1) 157.2665 Tj
 0 -28.4801 Td
-(0600 // This file contains definitions for the) 200.9517 Tj
+(0600 //) 30.5796 Tj
 0 -37.9735 Td
-(0601 // x86 memory management unit \(MMU\).) 179.1091 Tj
+(0601 // assembler macros to create x86 segments) 205.3202 Tj
 0 -47.4668 Td
-(0602 ) 21.8426 Tj
+(0602 //) 30.5796 Tj
 0 -56.9602 Td
-(0603 // Eflags register) 100.4758 Tj
+(0603 ) 21.8426 Tj
 0 -66.4535 Td
-(0604 #define FL_CF           0x00000001      // Carry Flag) 253.3738 Tj
+(0604 #define SEG_NULLASM                                       \
+      \\) 305.796 Tj
 0 -75.9469 Td
-(0605 #define FL_PF           0x00000004      // Parity Flag) 257.7424 Tj
+(0605         .word 0, 0;                                       \
+      \\) 305.796 Tj
 0 -85.4403 Td
-(0606 #define FL_AF           0x00000010      // Auxiliary carry\
- Flag) 297.059 Tj
+(0606         .byte 0, 0, 0, 0) 126.6869 Tj
 0 -94.9336 Td
-(0607 #define FL_ZF           0x00000040      // Zero Flag) 249.0053 Tj
+(0607 ) 21.8426 Tj
 0 -104.427 Td
-(0608 #define FL_SF           0x00000080      // Sign Flag) 249.0053 Tj
+(0608 #define SEG_ASM\(type,base,lim\)                          \
+        \\) 305.796 Tj
 0 -113.9203 Td
-(0609 #define FL_TF           0x00000100      // Trap Flag) 249.0053 Tj
+(0609         .word \(\(\(lim\) >> 12\) & 0xffff\), \(\(base\) &\
+ 0xffff\);      \\) 305.796 Tj
 0 -123.4137 Td
-(0610 #define FL_IF           0x00000200      // Interrupt Enabl\
-e) 279.5849 Tj
+(0610         .byte \(\(\(base\) >> 16\) & 0xff\), \(0x90 | \(ty\
+pe\)\),         \\) 305.796 Tj
 0 -132.9071 Td
-(0611 #define FL_DF           0x00000400      // Direction Flag) 270.8479 Tj
+(0611                 \(0xC0 | \(\(\(lim\) >> 28\) & 0xf\)\), \(\
+\(\(base\) >> 24\) & 0xff\)) 332.0071 Tj
 0 -142.4004 Td
-(0612 #define FL_OF           0x00000800      // Overflow Flag) 266.4794 Tj
+(0612 ) 21.8426 Tj
 0 -151.8938 Td
-(0613 #define FL_IOPL_MASK    0x00003000      // I/O Privilege L\
-evel bitmask) 327.6386 Tj
+(0613 #define STA_X     0x8       // Executable segment) 235.8998 Tj
 0 -161.3871 Td
-(0614 #define FL_IOPL_0       0x00000000      //   IOPL == 0) 257.7424 Tj
+(0614 #define STA_E     0x4       // Expand down \(non-executabl\
+e segments\)) 318.9016 Tj
 0 -170.8805 Td
-(0615 #define FL_IOPL_1       0x00001000      //   IOPL == 1) 257.7424 Tj
+(0615 #define STA_C     0x4       // Conforming code segment \(e\
+xecutable only\)) 336.3756 Tj
 0 -180.3739 Td
-(0616 #define FL_IOPL_2       0x00002000      //   IOPL == 2) 257.7424 Tj
+(0616 #define STA_W     0x2       // Writeable \(non-executable \
+segments\)) 310.1645 Tj
 0 -189.8672 Td
-(0617 #define FL_IOPL_3       0x00003000      //   IOPL == 3) 257.7424 Tj
+(0617 #define STA_R     0x2       // Readable \(executable segme\
+nts\)) 288.322 Tj
 0 -199.3606 Td
-(0618 #define FL_NT           0x00004000      // Nested Task) 257.7424 Tj
+(0618 #define STA_A     0x1       // Accessed) 192.2146 Tj
 0 -208.8539 Td
-(0619 #define FL_RF           0x00010000      // Resume Flag) 257.7424 Tj
+(0619 ) 21.8426 Tj
 0 -218.3473 Td
-(0620 #define FL_VM           0x00020000      // Virtual 8086 mo\
-de) 283.9534 Tj
+(0620 ) 21.8426 Tj
 0 -227.8407 Td
-(0621 #define FL_AC           0x00040000      // Alignment Check) 275.2164 Tj
+(0621 ) 21.8426 Tj
 0 -237.334 Td
-(0622 #define FL_VIF          0x00080000      // Virtual Interru\
-pt Flag) 305.796 Tj
+(0622 ) 21.8426 Tj
 0 -246.8274 Td
-(0623 #define FL_VIP          0x00100000      // Virtual Interru\
-pt Pending) 318.9016 Tj
+(0623 ) 21.8426 Tj
 0 -256.3207 Td
-(0624 #define FL_ID           0x00200000      // ID flag) 240.2683 Tj
+(0624 ) 21.8426 Tj
 0 -265.8141 Td
 (0625 ) 21.8426 Tj
 0 -275.3075 Td
-(0626 // Segment Descriptor) 113.5814 Tj
+(0626 ) 21.8426 Tj
 0 -284.8008 Td
-(0627 struct segdesc {) 91.7388 Tj
+(0627 ) 21.8426 Tj
 0 -294.2942 Td
-(0628   uint lim_15_0 : 16;  // Low bits of segment limit) 244.6368 Tj
+(0628 ) 21.8426 Tj
 0 -303.7875 Td
-(0629   uint base_15_0 : 16; // Low bits of segment base address) 275.2164 Tj
+(0629 ) 21.8426 Tj
 0 -313.2809 Td
-(0630   uint base_23_16 : 8; // Middle bits of segment base addr\
-ess) 288.322 Tj
+(0630 ) 21.8426 Tj
 0 -322.7743 Td
-(0631   uint type : 4;       // Segment type \(see STS_ constant\
-s\)) 279.5849 Tj
+(0631 ) 21.8426 Tj
 0 -332.2676 Td
-(0632   uint s : 1;          // 0 = system, 1 = application) 253.3738 Tj
+(0632 ) 21.8426 Tj
 0 -341.761 Td
-(0633   uint dpl : 2;        // Descriptor Privilege Level) 249.0053 Tj
+(0633 ) 21.8426 Tj
 0 -351.2543 Td
-(0634   uint p : 1;          // Present) 166.0035 Tj
+(0634 ) 21.8426 Tj
 0 -360.7477 Td
-(0635   uint lim_19_16 : 4;  // High bits of segment limit) 249.0053 Tj
+(0635 ) 21.8426 Tj
 0 -370.2411 Td
-(0636   uint avl : 1;        // Unused \(available for software \
-use\)) 288.322 Tj
+(0636 ) 21.8426 Tj
 0 -379.7344 Td
-(0637   uint rsv1 : 1;       // Reserved) 170.3721 Tj
+(0637 ) 21.8426 Tj
 0 -389.2278 Td
-(0638   uint db : 1;         // 0 = 16-bit segment, 1 = 32-bit s\
-egment) 301.4275 Tj
+(0638 ) 21.8426 Tj
 0 -398.7211 Td
-(0639   uint g : 1;          // Granularity: limit scaled by 4K \
-when set) 310.1645 Tj
+(0639 ) 21.8426 Tj
 0 -408.2145 Td
-(0640   uint base_31_24 : 8; // High bits of segment base addres\
-s) 279.5849 Tj
+(0640 ) 21.8426 Tj
 0 -417.7079 Td
-(0641 };) 30.5796 Tj
+(0641 ) 21.8426 Tj
 0 -427.2012 Td
 (0642 ) 21.8426 Tj
 0 -436.6946 Td
@@ -5376,103 +5406,103 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:04 2008  xv6/mmu.h  Page 2) 157.2665 Tj
+(Aug  8 01:04 2009  xv6/mmu.h  Page 1) 157.2665 Tj
 0 -28.4801 Td
-(0650 // Null segment) 87.3703 Tj
+(0650 // This file contains definitions for the) 200.9517 Tj
 0 -37.9735 Td
-(0651 #define SEG_NULL        \(struct segdesc\){ 0,0,0,0,0,0,0,\
-0,0,0,0,0,0 }) 323.2701 Tj
+(0651 // x86 memory management unit \(MMU\).) 179.1091 Tj
 0 -47.4668 Td
 (0652 ) 21.8426 Tj
 0 -56.9602 Td
-(0653 // Normal segment) 96.1073 Tj
+(0653 // Eflags register) 100.4758 Tj
 0 -66.4535 Td
-(0654 #define SEG\(type, base, lim, dpl\) \(struct segdesc\)    \
-                  \\) 340.7441 Tj
+(0654 #define FL_CF           0x00000001      // Carry Flag) 253.3738 Tj
 0 -75.9469 Td
-(0655 { \(\(lim\) >> 12\) & 0xffff, \(base\) & 0xffff, \(\(base\)\
- >> 16\) & 0xff,       \\) 340.7441 Tj
+(0655 #define FL_PF           0x00000004      // Parity Flag) 257.7424 Tj
 0 -85.4403 Td
-(0656     type, 1, dpl, 1, \(uint\) \(lim\) >> 28, 0, 0, 1, 1,  \
-                  \\) 340.7441 Tj
+(0656 #define FL_AF           0x00000010      // Auxiliary carry\
+ Flag) 297.059 Tj
 0 -94.9336 Td
-(0657     \(uint\) \(base\) >> 24 }) 131.0554 Tj
+(0657 #define FL_ZF           0x00000040      // Zero Flag) 249.0053 Tj
 0 -104.427 Td
-(0658 ) 21.8426 Tj
+(0658 #define FL_SF           0x00000080      // Sign Flag) 249.0053 Tj
 0 -113.9203 Td
-(0659 #define SEG16\(type, base, lim, dpl\) \(struct segdesc\)  \
-                  \\) 340.7441 Tj
+(0659 #define FL_TF           0x00000100      // Trap Flag) 249.0053 Tj
 0 -123.4137 Td
-(0660 { \(lim\) & 0xffff, \(base\) & 0xffff, \(\(base\) >> 16\) \
-& 0xff,               \\) 340.7441 Tj
+(0660 #define FL_IF           0x00000200      // Interrupt Enabl\
+e) 279.5849 Tj
 0 -132.9071 Td
-(0661     type, 1, dpl, 1, \(uint\) \(lim\) >> 16, 0, 0, 1, 0,  \
-                  \\) 340.7441 Tj
+(0661 #define FL_DF           0x00000400      // Direction Flag) 270.8479 Tj
 0 -142.4004 Td
-(0662     \(uint\) \(base\) >> 24 }) 131.0554 Tj
+(0662 #define FL_OF           0x00000800      // Overflow Flag) 266.4794 Tj
 0 -151.8938 Td
-(0663 ) 21.8426 Tj
+(0663 #define FL_IOPL_MASK    0x00003000      // I/O Privilege L\
+evel bitmask) 327.6386 Tj
 0 -161.3871 Td
-(0664 #define DPL_USER    0x3     // User DPL) 192.2146 Tj
+(0664 #define FL_IOPL_0       0x00000000      //   IOPL == 0) 257.7424 Tj
 0 -170.8805 Td
-(0665 ) 21.8426 Tj
+(0665 #define FL_IOPL_1       0x00001000      //   IOPL == 1) 257.7424 Tj
 0 -180.3739 Td
-(0666 // Application segment type bits) 161.635 Tj
+(0666 #define FL_IOPL_2       0x00002000      //   IOPL == 2) 257.7424 Tj
 0 -189.8672 Td
-(0667 #define STA_X       0x8     // Executable segment) 235.8998 Tj
+(0667 #define FL_IOPL_3       0x00003000      //   IOPL == 3) 257.7424 Tj
 0 -199.3606 Td
-(0668 #define STA_E       0x4     // Expand down \(non-executabl\
-e segments\)) 318.9016 Tj
+(0668 #define FL_NT           0x00004000      // Nested Task) 257.7424 Tj
 0 -208.8539 Td
-(0669 #define STA_C       0x4     // Conforming code segment \(e\
-xecutable only\)) 336.3756 Tj
+(0669 #define FL_RF           0x00010000      // Resume Flag) 257.7424 Tj
 0 -218.3473 Td
-(0670 #define STA_W       0x2     // Writeable \(non-executable \
-segments\)) 310.1645 Tj
+(0670 #define FL_VM           0x00020000      // Virtual 8086 mo\
+de) 283.9534 Tj
 0 -227.8407 Td
-(0671 #define STA_R       0x2     // Readable \(executable segme\
-nts\)) 288.322 Tj
+(0671 #define FL_AC           0x00040000      // Alignment Check) 275.2164 Tj
 0 -237.334 Td
-(0672 #define STA_A       0x1     // Accessed) 192.2146 Tj
+(0672 #define FL_VIF          0x00080000      // Virtual Interru\
+pt Flag) 305.796 Tj
 0 -246.8274 Td
-(0673 ) 21.8426 Tj
+(0673 #define FL_VIP          0x00100000      // Virtual Interru\
+pt Pending) 318.9016 Tj
 0 -256.3207 Td
-(0674 // System segment type bits) 139.7925 Tj
+(0674 #define FL_ID           0x00200000      // ID flag) 240.2683 Tj
 0 -265.8141 Td
-(0675 #define STS_T16A    0x1     // Available 16-bit TSS) 244.6368 Tj
+(0675 ) 21.8426 Tj
 0 -275.3075 Td
-(0676 #define STS_LDT     0x2     // Local Descriptor Table) 253.3738 Tj
+(0676 // Segment Descriptor) 113.5814 Tj
 0 -284.8008 Td
-(0677 #define STS_T16B    0x3     // Busy 16-bit TSS) 222.7942 Tj
+(0677 struct segdesc {) 91.7388 Tj
 0 -294.2942 Td
-(0678 #define STS_CG16    0x4     // 16-bit Call Gate) 227.1628 Tj
+(0678   uint lim_15_0 : 16;  // Low bits of segment limit) 244.6368 Tj
 0 -303.7875 Td
-(0679 #define STS_TG      0x5     // Task Gate / Coum Transmitio\
-ns) 283.9534 Tj
+(0679   uint base_15_0 : 16; // Low bits of segment base address) 275.2164 Tj
 0 -313.2809 Td
-(0680 #define STS_IG16    0x6     // 16-bit Interrupt Gate) 249.0053 Tj
+(0680   uint base_23_16 : 8; // Middle bits of segment base addr\
+ess) 288.322 Tj
 0 -322.7743 Td
-(0681 #define STS_TG16    0x7     // 16-bit Trap Gate) 227.1628 Tj
+(0681   uint type : 4;       // Segment type \(see STS_ constant\
+s\)) 279.5849 Tj
 0 -332.2676 Td
-(0682 #define STS_T32A    0x9     // Available 32-bit TSS) 244.6368 Tj
+(0682   uint s : 1;          // 0 = system, 1 = application) 253.3738 Tj
 0 -341.761 Td
-(0683 #define STS_T32B    0xB     // Busy 32-bit TSS) 222.7942 Tj
+(0683   uint dpl : 2;        // Descriptor Privilege Level) 249.0053 Tj
 0 -351.2543 Td
-(0684 #define STS_CG32    0xC     // 32-bit Call Gate) 227.1628 Tj
+(0684   uint p : 1;          // Present) 166.0035 Tj
 0 -360.7477 Td
-(0685 #define STS_IG32    0xE     // 32-bit Interrupt Gate) 249.0053 Tj
+(0685   uint lim_19_16 : 4;  // High bits of segment limit) 249.0053 Tj
 0 -370.2411 Td
-(0686 #define STS_TG32    0xF     // 32-bit Trap Gate) 227.1628 Tj
+(0686   uint avl : 1;        // Unused \(available for software \
+use\)) 288.322 Tj
 0 -379.7344 Td
-(0687 ) 21.8426 Tj
+(0687   uint rsv1 : 1;       // Reserved) 170.3721 Tj
 0 -389.2278 Td
-(0688 ) 21.8426 Tj
+(0688   uint db : 1;         // 0 = 16-bit segment, 1 = 32-bit s\
+egment) 301.4275 Tj
 0 -398.7211 Td
-(0689 ) 21.8426 Tj
+(0689   uint g : 1;          // Granularity: limit scaled by 4K \
+when set) 310.1645 Tj
 0 -408.2145 Td
-(0690 ) 21.8426 Tj
+(0690   uint base_31_24 : 8; // High bits of segment base addres\
+s) 279.5849 Tj
 0 -417.7079 Td
-(0691 ) 21.8426 Tj
+(0691 };) 30.5796 Tj
 0 -427.2012 Td
 (0692 ) 21.8426 Tj
 0 -436.6946 Td
@@ -5519,6 +5549,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -5536,90 +5568,98 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:04 2008  xv6/mmu.h  Page 3) 157.2665 Tj
+(Aug  8 01:04 2009  xv6/mmu.h  Page 2) 157.2665 Tj
 0 -28.4801 Td
-(0700 // Task state segment format) 144.161 Tj
+(0700 // Normal segment) 96.1073 Tj
 0 -37.9735 Td
-(0701 struct taskstate {) 100.4758 Tj
+(0701 #define SEG\(type, base, lim, dpl\) \(struct segdesc\)    \
+                  \\) 340.7441 Tj
 0 -47.4668 Td
-(0702   uint link;         // Old ts selector) 192.2146 Tj
+(0702 { \(\(lim\) >> 12\) & 0xffff, \(base\) & 0xffff, \(\(base\)\
+ >> 16\) & 0xff,       \\) 340.7441 Tj
 0 -56.9602 Td
-(0703   uint esp0;         // Stack pointers and segment selecto\
-rs) 283.9534 Tj
+(0703     type, 1, dpl, 1, \(uint\) \(lim\) >> 28, 0, 0, 1, 1,  \
+                  \\) 340.7441 Tj
 0 -66.4535 Td
-(0704   ushort ss0;        //   after an increase in privilege l\
-evel) 292.6905 Tj
+(0704     \(uint\) \(base\) >> 24 }) 131.0554 Tj
 0 -75.9469 Td
-(0705   ushort padding1;) 100.4758 Tj
+(0705 ) 21.8426 Tj
 0 -85.4403 Td
-(0706   uint *esp1;) 78.6333 Tj
+(0706 #define SEG16\(type, base, lim, dpl\) \(struct segdesc\)  \
+                  \\) 340.7441 Tj
 0 -94.9336 Td
-(0707   ushort ss1;) 78.6333 Tj
+(0707 { \(lim\) & 0xffff, \(base\) & 0xffff, \(\(base\) >> 16\) \
+& 0xff,               \\) 340.7441 Tj
 0 -104.427 Td
-(0708   ushort padding2;) 100.4758 Tj
+(0708     type, 1, dpl, 1, \(uint\) \(lim\) >> 16, 0, 0, 1, 0,  \
+                  \\) 340.7441 Tj
 0 -113.9203 Td
-(0709   uint *esp2;) 78.6333 Tj
+(0709     \(uint\) \(base\) >> 24 }) 131.0554 Tj
 0 -123.4137 Td
-(0710   ushort ss2;) 78.6333 Tj
+(0710 ) 21.8426 Tj
 0 -132.9071 Td
-(0711   ushort padding3;) 100.4758 Tj
+(0711 #define DPL_USER    0x3     // User DPL) 192.2146 Tj
 0 -142.4004 Td
-(0712   void *cr3;         // Page directory base) 209.6887 Tj
+(0712 ) 21.8426 Tj
 0 -151.8938 Td
-(0713   uint *eip;         // Saved state from last task switch) 270.8479 Tj
+(0713 // Application segment type bits) 161.635 Tj
 0 -161.3871 Td
-(0714   uint eflags;) 83.0018 Tj
+(0714 #define STA_X       0x8     // Executable segment) 235.8998 Tj
 0 -170.8805 Td
-(0715   uint eax;          // More saved state \(registers\)) 249.0053 Tj
+(0715 #define STA_E       0x4     // Expand down \(non-executabl\
+e segments\)) 318.9016 Tj
 0 -180.3739 Td
-(0716   uint ecx;) 69.8962 Tj
+(0716 #define STA_C       0x4     // Conforming code segment \(e\
+xecutable only\)) 336.3756 Tj
 0 -189.8672 Td
-(0717   uint edx;) 69.8962 Tj
+(0717 #define STA_W       0x2     // Writeable \(non-executable \
+segments\)) 310.1645 Tj
 0 -199.3606 Td
-(0718   uint ebx;) 69.8962 Tj
+(0718 #define STA_R       0x2     // Readable \(executable segme\
+nts\)) 288.322 Tj
 0 -208.8539 Td
-(0719   uint *esp;) 74.2647 Tj
+(0719 #define STA_A       0x1     // Accessed) 192.2146 Tj
 0 -218.3473 Td
-(0720   uint *ebp;) 74.2647 Tj
+(0720 ) 21.8426 Tj
 0 -227.8407 Td
-(0721   uint esi;) 69.8962 Tj
+(0721 // System segment type bits) 139.7925 Tj
 0 -237.334 Td
-(0722   uint edi;) 69.8962 Tj
+(0722 #define STS_T16A    0x1     // Available 16-bit TSS) 244.6368 Tj
 0 -246.8274 Td
-(0723   ushort es;         // Even more saved state \(segment se\
-lectors\)) 305.796 Tj
+(0723 #define STS_LDT     0x2     // Local Descriptor Table) 253.3738 Tj
 0 -256.3207 Td
-(0724   ushort padding4;) 100.4758 Tj
+(0724 #define STS_T16B    0x3     // Busy 16-bit TSS) 222.7942 Tj
 0 -265.8141 Td
-(0725   ushort cs;) 74.2647 Tj
+(0725 #define STS_CG16    0x4     // 16-bit Call Gate) 227.1628 Tj
 0 -275.3075 Td
-(0726   ushort padding5;) 100.4758 Tj
+(0726 #define STS_TG      0x5     // Task Gate / Coum Transmitio\
+ns) 283.9534 Tj
 0 -284.8008 Td
-(0727   ushort ss;) 74.2647 Tj
+(0727 #define STS_IG16    0x6     // 16-bit Interrupt Gate) 249.0053 Tj
 0 -294.2942 Td
-(0728   ushort padding6;) 100.4758 Tj
+(0728 #define STS_TG16    0x7     // 16-bit Trap Gate) 227.1628 Tj
 0 -303.7875 Td
-(0729   ushort ds;) 74.2647 Tj
+(0729 #define STS_T32A    0x9     // Available 32-bit TSS) 244.6368 Tj
 0 -313.2809 Td
-(0730   ushort padding7;) 100.4758 Tj
+(0730 #define STS_T32B    0xB     // Busy 32-bit TSS) 222.7942 Tj
 0 -322.7743 Td
-(0731   ushort fs;) 74.2647 Tj
+(0731 #define STS_CG32    0xC     // 32-bit Call Gate) 227.1628 Tj
 0 -332.2676 Td
-(0732   ushort padding8;) 100.4758 Tj
+(0732 #define STS_IG32    0xE     // 32-bit Interrupt Gate) 249.0053 Tj
 0 -341.761 Td
-(0733   ushort gs;) 74.2647 Tj
+(0733 #define STS_TG32    0xF     // 32-bit Trap Gate) 227.1628 Tj
 0 -351.2543 Td
-(0734   ushort padding9;) 100.4758 Tj
+(0734 ) 21.8426 Tj
 0 -360.7477 Td
-(0735   ushort ldt;) 78.6333 Tj
+(0735 ) 21.8426 Tj
 0 -370.2411 Td
-(0736   ushort padding10;) 104.8443 Tj
+(0736 ) 21.8426 Tj
 0 -379.7344 Td
-(0737   ushort t;          // Trap on task switch) 209.6887 Tj
+(0737 ) 21.8426 Tj
 0 -389.2278 Td
-(0738   ushort iomb;       // I/O map base address) 214.0572 Tj
+(0738 ) 21.8426 Tj
 0 -398.7211 Td
-(0739 };) 30.5796 Tj
+(0739 ) 21.8426 Tj
 0 -408.2145 Td
 (0740 ) 21.8426 Tj
 0 -417.7079 Td
@@ -5658,107 +5698,90 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:04 2008  xv6/mmu.h  Page 4) 157.2665 Tj
+(Aug  8 01:04 2009  xv6/mmu.h  Page 3) 157.2665 Tj
 0 -28.4801 Td
-(0750 // Gate descriptors for interrupts and traps) 214.0572 Tj
+(0750 // Task state segment format) 144.161 Tj
 0 -37.9735 Td
-(0751 struct gatedesc {) 96.1073 Tj
+(0751 struct taskstate {) 100.4758 Tj
 0 -47.4668 Td
-(0752   uint off_15_0 : 16;   // low 16 bits of offset in segmen\
-t) 279.5849 Tj
+(0752   uint link;         // Old ts selector) 192.2146 Tj
 0 -56.9602 Td
-(0753   uint cs : 16;         // code segment selector) 231.5313 Tj
+(0753   uint esp0;         // Stack pointers and segment selecto\
+rs) 283.9534 Tj
 0 -66.4535 Td
-(0754   uint args : 5;        // # args, 0 for interrupt/trap ga\
-tes) 288.322 Tj
+(0754   ushort ss0;        //   after an increase in privilege l\
+evel) 292.6905 Tj
 0 -75.9469 Td
-(0755   uint rsv1 : 3;        // reserved\(should be zero I gues\
-s\)) 279.5849 Tj
+(0755   ushort padding1;) 100.4758 Tj
 0 -85.4403 Td
-(0756   uint type : 4;        // type\(STS_{TG,IG32,TG32}\)) 244.6368 Tj
+(0756   uint *esp1;) 78.6333 Tj
 0 -94.9336 Td
-(0757   uint s : 1;           // must be 0 \(system\)) 218.4257 Tj
+(0757   ushort ss1;) 78.6333 Tj
 0 -104.427 Td
-(0758   uint dpl : 2;         // descriptor\(meaning new\) privi\
-lege level) 310.1645 Tj
+(0758   ushort padding2;) 100.4758 Tj
 0 -113.9203 Td
-(0759   uint p : 1;           // Present) 170.3721 Tj
+(0759   uint *esp2;) 78.6333 Tj
 0 -123.4137 Td
-(0760   uint off_31_16 : 16;  // high bits of offset in segment) 270.8479 Tj
+(0760   ushort ss2;) 78.6333 Tj
 0 -132.9071 Td
-(0761 };) 30.5796 Tj
+(0761   ushort padding3;) 100.4758 Tj
 0 -142.4004 Td
-(0762 ) 21.8426 Tj
+(0762   void *cr3;         // Page directory base) 209.6887 Tj
 0 -151.8938 Td
-(0763 // Set up a normal interrupt/trap gate descriptor.) 240.2683 Tj
+(0763   uint *eip;         // Saved state from last task switch) 270.8479 Tj
 0 -161.3871 Td
-(0764 // - istrap: 1 for a trap \(= exception\) gate, 0 for an i\
-nterrupt gate.) 327.6386 Tj
+(0764   uint eflags;) 83.0018 Tj
 0 -170.8805 Td
-(0765 //   interrupt gate clears FL_IF, trap gate leaves FL_IF a\
-lone) 292.6905 Tj
+(0765   uint eax;          // More saved state \(registers\)) 249.0053 Tj
 0 -180.3739 Td
-(0766 // - sel: Code segment selector for interrupt/trap handler) 275.2164 Tj
+(0766   uint ecx;) 69.8962 Tj
 0 -189.8672 Td
-(0767 // - off: Offset in code segment for interrupt/trap handle\
-r) 279.5849 Tj
+(0767   uint edx;) 69.8962 Tj
 0 -199.3606 Td
-(0768 // - dpl: Descriptor Privilege Level -) 187.8461 Tj
+(0768   uint ebx;) 69.8962 Tj
 0 -208.8539 Td
-(0769 //        the privilege level required for software to inv\
-oke) 288.322 Tj
+(0769   uint *esp;) 74.2647 Tj
 0 -218.3473 Td
-(0770 //        this interrupt/trap gate explicitly using an int\
- instruction.) 332.0071 Tj
+(0770   uint *ebp;) 74.2647 Tj
 0 -227.8407 Td
-(0771 #define SETGATE\(gate, istrap, sel, off, d\)              \
-  \\) 279.5849 Tj
+(0771   uint esi;) 69.8962 Tj
 0 -237.334 Td
-(0772 {                                                         \
-\\) 279.5849 Tj
+(0772   uint edi;) 69.8962 Tj
 0 -246.8274 Td
-(0773   \(gate\).off_15_0 = \(uint\) \(off\) & 0xffff;          \
-      \\) 279.5849 Tj
+(0773   ushort es;         // Even more saved state \(segment se\
+lectors\)) 305.796 Tj
 0 -256.3207 Td
-(0774   \(gate\).cs = \(sel\);                                  \
-    \\) 279.5849 Tj
+(0774   ushort padding4;) 100.4758 Tj
 0 -265.8141 Td
-(0775   \(gate\).args = 0;                                      \
-  \\) 279.5849 Tj
+(0775   ushort cs;) 74.2647 Tj
 0 -275.3075 Td
-(0776   \(gate\).rsv1 = 0;                                      \
-  \\) 279.5849 Tj
+(0776   ushort padding5;) 100.4758 Tj
 0 -284.8008 Td
-(0777   \(gate\).type = \(istrap\) ? STS_TG32 : STS_IG32;       \
-    \\) 279.5849 Tj
+(0777   ushort ss;) 74.2647 Tj
 0 -294.2942 Td
-(0778   \(gate\).s = 0;                                         \
-  \\) 279.5849 Tj
+(0778   ushort padding6;) 100.4758 Tj
 0 -303.7875 Td
-(0779   \(gate\).dpl = \(d\);                                   \
-    \\) 279.5849 Tj
+(0779   ushort ds;) 74.2647 Tj
 0 -313.2809 Td
-(0780   \(gate\).p = 1;                                         \
-  \\) 279.5849 Tj
+(0780   ushort padding7;) 100.4758 Tj
 0 -322.7743 Td
-(0781   \(gate\).off_31_16 = \(uint\) \(off\) >> 16;            \
-      \\) 279.5849 Tj
+(0781   ushort fs;) 74.2647 Tj
 0 -332.2676 Td
-(0782 }) 26.2111 Tj
+(0782   ushort padding8;) 100.4758 Tj
 0 -341.761 Td
-(0783 ) 21.8426 Tj
+(0783   ushort gs;) 74.2647 Tj
 0 -351.2543 Td
-(0784 ) 21.8426 Tj
+(0784   ushort padding9;) 100.4758 Tj
 0 -360.7477 Td
-(0785 ) 21.8426 Tj
+(0785   ushort ldt;) 78.6333 Tj
 0 -370.2411 Td
-(0786 ) 21.8426 Tj
+(0786   ushort padding10;) 104.8443 Tj
 0 -379.7344 Td
-(0787 ) 21.8426 Tj
+(0787   ushort t;          // Trap on task switch) 209.6887 Tj
 0 -389.2278 Td
-(0788 ) 21.8426 Tj
+(0788   ushort iomb;       // I/O map base address) 214.0572 Tj
 0 -398.7211 Td
-(0789 ) 21.8426 Tj
+(0789 };) 30.5796 Tj
 0 -408.2145 Td
 (0790 ) 21.8426 Tj
 0 -417.7079 Td
@@ -5809,6 +5832,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -5826,92 +5851,111 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:04 2008  xv6/elf.h  Page 1) 157.2665 Tj
+(Aug  8 01:04 2009  xv6/mmu.h  Page 4) 157.2665 Tj
 0 -28.4801 Td
-(0800 // Format of an ELF executable file) 174.7406 Tj
+(0800 // Gate descriptors for interrupts and traps) 214.0572 Tj
 0 -37.9735 Td
-(0801 ) 21.8426 Tj
+(0801 struct gatedesc {) 96.1073 Tj
 0 -47.4668 Td
-(0802 #define ELF_MAGIC 0x464C457FU  // "\\x7FELF" in little end\
-ian) 283.9534 Tj
+(0802   uint off_15_0 : 16;   // low 16 bits of offset in segmen\
+t) 279.5849 Tj
 0 -56.9602 Td
-(0803 ) 21.8426 Tj
+(0803   uint cs : 16;         // code segment selector) 231.5313 Tj
 0 -66.4535 Td
-(0804 // File header) 83.0018 Tj
+(0804   uint args : 5;        // # args, 0 for interrupt/trap ga\
+tes) 288.322 Tj
 0 -75.9469 Td
-(0805 struct elfhdr {) 87.3703 Tj
+(0805   uint rsv1 : 3;        // reserved\(should be zero I gues\
+s\)) 279.5849 Tj
 0 -85.4403 Td
-(0806   uint magic;  // must equal ELF_MAGIC) 187.8461 Tj
+(0806   uint type : 4;        // type\(STS_{TG,IG32,TG32}\)) 244.6368 Tj
 0 -94.9336 Td
-(0807   uchar elf[12];) 91.7388 Tj
+(0807   uint s : 1;           // must be 0 \(system\)) 218.4257 Tj
 0 -104.427 Td
-(0808   ushort type;) 83.0018 Tj
+(0808   uint dpl : 2;         // descriptor\(meaning new\) privi\
+lege level) 310.1645 Tj
 0 -113.9203 Td
-(0809   ushort machine;) 96.1073 Tj
+(0809   uint p : 1;           // Present) 170.3721 Tj
 0 -123.4137 Td
-(0810   uint version;) 87.3703 Tj
+(0810   uint off_31_16 : 16;  // high bits of offset in segment) 270.8479 Tj
 0 -132.9071 Td
-(0811   uint entry;) 78.6333 Tj
+(0811 };) 30.5796 Tj
 0 -142.4004 Td
-(0812   uint phoff;) 78.6333 Tj
+(0812 ) 21.8426 Tj
 0 -151.8938 Td
-(0813   uint shoff;) 78.6333 Tj
+(0813 // Set up a normal interrupt/trap gate descriptor.) 240.2683 Tj
 0 -161.3871 Td
-(0814   uint flags;) 78.6333 Tj
+(0814 // - istrap: 1 for a trap \(= exception\) gate, 0 for an i\
+nterrupt gate.) 327.6386 Tj
 0 -170.8805 Td
-(0815   ushort ehsize;) 91.7388 Tj
+(0815 //   interrupt gate clears FL_IF, trap gate leaves FL_IF a\
+lone) 292.6905 Tj
 0 -180.3739 Td
-(0816   ushort phentsize;) 104.8443 Tj
+(0816 // - sel: Code segment selector for interrupt/trap handler) 275.2164 Tj
 0 -189.8672 Td
-(0817   ushort phnum;) 87.3703 Tj
+(0817 // - off: Offset in code segment for interrupt/trap handle\
+r) 279.5849 Tj
 0 -199.3606 Td
-(0818   ushort shentsize;) 104.8443 Tj
+(0818 // - dpl: Descriptor Privilege Level -) 187.8461 Tj
 0 -208.8539 Td
-(0819   ushort shnum;) 87.3703 Tj
+(0819 //        the privilege level required for software to inv\
+oke) 288.322 Tj
 0 -218.3473 Td
-(0820   ushort shstrndx;) 100.4758 Tj
+(0820 //        this interrupt/trap gate explicitly using an int\
+ instruction.) 332.0071 Tj
 0 -227.8407 Td
-(0821 };) 30.5796 Tj
+(0821 #define SETGATE\(gate, istrap, sel, off, d\)              \
+  \\) 279.5849 Tj
 0 -237.334 Td
-(0822 ) 21.8426 Tj
+(0822 {                                                         \
+\\) 279.5849 Tj
 0 -246.8274 Td
-(0823 // Program section header) 131.0554 Tj
+(0823   \(gate\).off_15_0 = \(uint\) \(off\) & 0xffff;          \
+      \\) 279.5849 Tj
 0 -256.3207 Td
-(0824 struct proghdr {) 91.7388 Tj
+(0824   \(gate\).cs = \(sel\);                                  \
+    \\) 279.5849 Tj
 0 -265.8141 Td
-(0825   uint type;) 74.2647 Tj
+(0825   \(gate\).args = 0;                                      \
+  \\) 279.5849 Tj
 0 -275.3075 Td
-(0826   uint offset;) 83.0018 Tj
+(0826   \(gate\).rsv1 = 0;                                      \
+  \\) 279.5849 Tj
 0 -284.8008 Td
-(0827   uint va;) 65.5277 Tj
+(0827   \(gate\).type = \(istrap\) ? STS_TG32 : STS_IG32;       \
+    \\) 279.5849 Tj
 0 -294.2942 Td
-(0828   uint pa;) 65.5277 Tj
+(0828   \(gate\).s = 0;                                         \
+  \\) 279.5849 Tj
 0 -303.7875 Td
-(0829   uint filesz;) 83.0018 Tj
+(0829   \(gate\).dpl = \(d\);                                   \
+    \\) 279.5849 Tj
 0 -313.2809 Td
-(0830   uint memsz;) 78.6333 Tj
+(0830   \(gate\).p = 1;                                         \
+  \\) 279.5849 Tj
 0 -322.7743 Td
-(0831   uint flags;) 78.6333 Tj
+(0831   \(gate\).off_31_16 = \(uint\) \(off\) >> 16;            \
+      \\) 279.5849 Tj
 0 -332.2676 Td
-(0832   uint align;) 78.6333 Tj
+(0832 }) 26.2111 Tj
 0 -341.761 Td
-(0833 };) 30.5796 Tj
+(0833 ) 21.8426 Tj
 0 -351.2543 Td
 (0834 ) 21.8426 Tj
 0 -360.7477 Td
-(0835 // Values for Proghdr type) 135.4239 Tj
+(0835 ) 21.8426 Tj
 0 -370.2411 Td
-(0836 #define ELF_PROG_LOAD           1) 166.0035 Tj
+(0836 ) 21.8426 Tj
 0 -379.7344 Td
 (0837 ) 21.8426 Tj
 0 -389.2278 Td
-(0838 // Flag bits for Proghdr flags) 152.898 Tj
+(0838 ) 21.8426 Tj
 0 -398.7211 Td
-(0839 #define ELF_PROG_FLAG_EXEC      1) 166.0035 Tj
+(0839 ) 21.8426 Tj
 0 -408.2145 Td
-(0840 #define ELF_PROG_FLAG_WRITE     2) 166.0035 Tj
+(0840 ) 21.8426 Tj
 0 -417.7079 Td
-(0841 #define ELF_PROG_FLAG_READ      4) 166.0035 Tj
+(0841 ) 21.8426 Tj
 0 -427.2012 Td
 (0842 ) 21.8426 Tj
 0 -436.6946 Td
@@ -5946,91 +5990,92 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:04 2008  xv6/elf.h  Page 2) 157.2665 Tj
+(Aug  8 01:04 2009  xv6/elf.h  Page 1) 157.2665 Tj
 0 -28.4801 Td
-(0850 // Blank page.) 83.0018 Tj
+(0850 // Format of an ELF executable file) 174.7406 Tj
 0 -37.9735 Td
 (0851 ) 21.8426 Tj
 0 -47.4668 Td
-(0852 ) 21.8426 Tj
+(0852 #define ELF_MAGIC 0x464C457FU  // "\\x7FELF" in little end\
+ian) 283.9534 Tj
 0 -56.9602 Td
 (0853 ) 21.8426 Tj
 0 -66.4535 Td
-(0854 ) 21.8426 Tj
+(0854 // File header) 83.0018 Tj
 0 -75.9469 Td
-(0855 ) 21.8426 Tj
+(0855 struct elfhdr {) 87.3703 Tj
 0 -85.4403 Td
-(0856 ) 21.8426 Tj
+(0856   uint magic;  // must equal ELF_MAGIC) 187.8461 Tj
 0 -94.9336 Td
-(0857 ) 21.8426 Tj
+(0857   uchar elf[12];) 91.7388 Tj
 0 -104.427 Td
-(0858 ) 21.8426 Tj
+(0858   ushort type;) 83.0018 Tj
 0 -113.9203 Td
-(0859 ) 21.8426 Tj
+(0859   ushort machine;) 96.1073 Tj
 0 -123.4137 Td
-(0860 ) 21.8426 Tj
+(0860   uint version;) 87.3703 Tj
 0 -132.9071 Td
-(0861 ) 21.8426 Tj
+(0861   uint entry;) 78.6333 Tj
 0 -142.4004 Td
-(0862 ) 21.8426 Tj
+(0862   uint phoff;) 78.6333 Tj
 0 -151.8938 Td
-(0863 ) 21.8426 Tj
+(0863   uint shoff;) 78.6333 Tj
 0 -161.3871 Td
-(0864 ) 21.8426 Tj
+(0864   uint flags;) 78.6333 Tj
 0 -170.8805 Td
-(0865 ) 21.8426 Tj
+(0865   ushort ehsize;) 91.7388 Tj
 0 -180.3739 Td
-(0866 ) 21.8426 Tj
+(0866   ushort phentsize;) 104.8443 Tj
 0 -189.8672 Td
-(0867 ) 21.8426 Tj
+(0867   ushort phnum;) 87.3703 Tj
 0 -199.3606 Td
-(0868 ) 21.8426 Tj
+(0868   ushort shentsize;) 104.8443 Tj
 0 -208.8539 Td
-(0869 ) 21.8426 Tj
+(0869   ushort shnum;) 87.3703 Tj
 0 -218.3473 Td
-(0870 ) 21.8426 Tj
+(0870   ushort shstrndx;) 100.4758 Tj
 0 -227.8407 Td
-(0871 ) 21.8426 Tj
+(0871 };) 30.5796 Tj
 0 -237.334 Td
 (0872 ) 21.8426 Tj
 0 -246.8274 Td
-(0873 ) 21.8426 Tj
+(0873 // Program section header) 131.0554 Tj
 0 -256.3207 Td
-(0874 ) 21.8426 Tj
+(0874 struct proghdr {) 91.7388 Tj
 0 -265.8141 Td
-(0875 ) 21.8426 Tj
+(0875   uint type;) 74.2647 Tj
 0 -275.3075 Td
-(0876 ) 21.8426 Tj
+(0876   uint offset;) 83.0018 Tj
 0 -284.8008 Td
-(0877 ) 21.8426 Tj
+(0877   uint va;) 65.5277 Tj
 0 -294.2942 Td
-(0878 ) 21.8426 Tj
+(0878   uint pa;) 65.5277 Tj
 0 -303.7875 Td
-(0879 ) 21.8426 Tj
+(0879   uint filesz;) 83.0018 Tj
 0 -313.2809 Td
-(0880 ) 21.8426 Tj
+(0880   uint memsz;) 78.6333 Tj
 0 -322.7743 Td
-(0881 ) 21.8426 Tj
+(0881   uint flags;) 78.6333 Tj
 0 -332.2676 Td
-(0882 ) 21.8426 Tj
+(0882   uint align;) 78.6333 Tj
 0 -341.761 Td
-(0883 ) 21.8426 Tj
+(0883 };) 30.5796 Tj
 0 -351.2543 Td
 (0884 ) 21.8426 Tj
 0 -360.7477 Td
-(0885 ) 21.8426 Tj
+(0885 // Values for Proghdr type) 135.4239 Tj
 0 -370.2411 Td
-(0886 ) 21.8426 Tj
+(0886 #define ELF_PROG_LOAD           1) 166.0035 Tj
 0 -379.7344 Td
 (0887 ) 21.8426 Tj
 0 -389.2278 Td
-(0888 ) 21.8426 Tj
+(0888 // Flag bits for Proghdr flags) 152.898 Tj
 0 -398.7211 Td
-(0889 ) 21.8426 Tj
+(0889 #define ELF_PROG_FLAG_EXEC      1) 166.0035 Tj
 0 -408.2145 Td
-(0890 ) 21.8426 Tj
+(0890 #define ELF_PROG_FLAG_WRITE     2) 166.0035 Tj
 0 -417.7079 Td
-(0891 ) 21.8426 Tj
+(0891 #define ELF_PROG_FLAG_READ      4) 166.0035 Tj
 0 -427.2012 Td
 (0892 ) 21.8426 Tj
 0 -436.6946 Td
@@ -6077,6 +6122,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -6094,7 +6141,7 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:04 2008  xv6/bootasm.S  Page 1) 174.7406 Tj
+(Aug  8 01:04 2009  xv6/bootasm.S  Page 1) 174.7406 Tj
 0 -28.4801 Td
 (0900 #include "asm.h") 91.7388 Tj
 0 -37.9735 Td
@@ -6113,27 +6160,23 @@ n real mode) 323.2701 Tj
 0 -85.4403 Td
 (0906 ) 21.8426 Tj
 0 -94.9336 Td
-(0907 .set PROT_MODE_CSEG, 0x8         # kernel code segment sel\
-ector) 297.059 Tj
+(0907 #define SEG_KCODE 1  // kernel code) 174.7406 Tj
 0 -104.427 Td
-(0908 .set PROT_MODE_DSEG, 0x10        # kernel data segment sel\
-ector) 297.059 Tj
+(0908 #define SEG_KDATA 2  // kernel data+stack) 200.9517 Tj
 0 -113.9203 Td
-(0909 .set CR0_PE_ON,      0x1         # protected mode enable f\
-lag) 288.322 Tj
+(0909 ) 21.8426 Tj
 0 -123.4137 Td
-(0910 ) 21.8426 Tj
+(0910 #define CR0_PE    1  // protected mode enable bit) 235.8998 Tj
 0 -132.9071 Td
-(0911 .globl start) 74.2647 Tj
+(0911 ) 21.8426 Tj
 0 -142.4004 Td
-(0912 start:) 48.0537 Tj
+(0912 .code16                       # Assemble for 16-bit mode) 266.4794 Tj
 0 -151.8938 Td
-(0913   .code16                     # Assemble for 16-bit mode) 266.4794 Tj
+(0913 .globl start) 74.2647 Tj
 0 -161.3871 Td
-(0914   cli                         # Disable interrupts) 240.2683 Tj
+(0914 start:) 48.0537 Tj
 0 -170.8805 Td
-(0915   cld                         # String operations incremen\
-t) 279.5849 Tj
+(0915   cli                         # Disable interrupts) 240.2683 Tj
 0 -180.3739 Td
 (0916 ) 21.8426 Tj
 0 -189.8672 Td
@@ -6224,7 +6267,7 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:04 2008  xv6/bootasm.S  Page 2) 174.7406 Tj
+(Aug  8 01:04 2009  xv6/bootasm.S  Page 2) 174.7406 Tj
 0 -28.4801 Td
 (0950   # Switch from real to protected mode, using a bootstrap \
 GDT) 288.322 Tj
@@ -6240,7 +6283,7 @@ GDT) 288.322 Tj
 0 -75.9469 Td
 (0955   movl    %cr0, %eax) 109.2129 Tj
 0 -85.4403 Td
-(0956   orl     $CR0_PE_ON, %eax) 135.4239 Tj
+(0956   orl     $CR0_PE, %eax) 122.3184 Tj
 0 -94.9336 Td
 (0957   movl    %eax, %cr0) 109.2129 Tj
 0 -104.427 Td
@@ -6250,82 +6293,83 @@ GDT) 288.322 Tj
 0 -123.4137 Td
 (0960   # Switches processor into 32-bit mode.) 196.5831 Tj
 0 -132.9071 Td
-(0961   ljmp    $PROT_MODE_CSEG, $protcseg) 179.1091 Tj
+(0961   ljmp    $\(SEG_KCODE<<3\), $start32) 174.7406 Tj
 0 -142.4004 Td
 (0962 ) 21.8426 Tj
 0 -151.8938 Td
-(0963   .code32                     # Assemble for 32-bit mode) 266.4794 Tj
+(0963 .code32                       # Assemble for 32-bit mode) 266.4794 Tj
 0 -161.3871 Td
-(0964 protcseg:) 61.1592 Tj
+(0964 start32:) 56.7907 Tj
 0 -170.8805 Td
 (0965   # Set up the protected-mode data segment registers) 249.0053 Tj
 0 -180.3739 Td
-(0966   movw    $PROT_MODE_DSEG, %ax    # Our data segment selec\
-tor) 288.322 Tj
+(0966   movw    $\(SEG_KDATA<<3\), %ax    # Our data segment sel\
+ector) 288.322 Tj
 0 -189.8672 Td
 (0967   movw    %ax, %ds                # -> DS: Data Segment) 262.1109 Tj
 0 -199.3606 Td
 (0968   movw    %ax, %es                # -> ES: Extra Segment) 266.4794 Tj
 0 -208.8539 Td
-(0969   movw    %ax, %fs                # -> FS) 200.9517 Tj
+(0969   movw    %ax, %ss                # -> SS: Stack Segment) 266.4794 Tj
 0 -218.3473 Td
-(0970   movw    %ax, %gs                # -> GS) 200.9517 Tj
+(0970   movw    $0, %ax                 # Zero segments not read\
+y for use) 314.533 Tj
 0 -227.8407 Td
-(0971   movw    %ax, %ss                # -> SS: Stack Segment) 266.4794 Tj
+(0971   movw    %ax, %fs                # -> FS) 200.9517 Tj
 0 -237.334 Td
-(0972 ) 21.8426 Tj
+(0972   movw    %ax, %gs                # -> GS) 200.9517 Tj
 0 -246.8274 Td
-(0973   # Set up the stack pointer and call into C.) 218.4257 Tj
+(0973 ) 21.8426 Tj
 0 -256.3207 Td
-(0974   movl    $start, %esp) 117.9499 Tj
+(0974   # Set up the stack pointer and call into C.) 218.4257 Tj
 0 -265.8141 Td
-(0975   call    bootmain) 100.4758 Tj
+(0975   movl    $start, %esp) 117.9499 Tj
 0 -275.3075 Td
-(0976 ) 21.8426 Tj
+(0976   call    bootmain) 100.4758 Tj
 0 -284.8008 Td
-(0977   # If bootmain returns \(it shouldn't\), loop.) 218.4257 Tj
+(0977 ) 21.8426 Tj
 0 -294.2942 Td
-(0978 spin:) 43.6851 Tj
+(0978   # If bootmain returns \(it shouldn't\), trigger a Bochs) 262.1109 Tj
 0 -303.7875 Td
-(0979   jmp     spin) 83.0018 Tj
+(0979   # breakpoint if running under Bochs, then loop.) 235.8998 Tj
 0 -313.2809 Td
-(0980 ) 21.8426 Tj
+(0980   movw    $0x8a00, %ax            # 0x8a00 -> port 0x8a00) 270.8479 Tj
 0 -322.7743 Td
-(0981 # Bootstrap GDT) 87.3703 Tj
+(0981   movw    %ax, %dx) 100.4758 Tj
 0 -332.2676 Td
-(0982 .p2align 2                                # force 4 byte a\
-lignment) 310.1645 Tj
+(0982   outw    %ax, %dx) 100.4758 Tj
 0 -341.761 Td
-(0983 gdt:) 39.3166 Tj
+(0983   movw    $0x8e00, %ax            # 0x8e00 -> port 0x8a00) 270.8479 Tj
 0 -351.2543 Td
-(0984   SEG_NULLASM                             # null seg) 249.0053 Tj
+(0984   outw    %ax, %dx) 100.4758 Tj
 0 -360.7477 Td
-(0985   SEG_ASM\(STA_X|STA_R, 0x0, 0xffffffff\)   # code seg) 249.0053 Tj
+(0985 spin:) 43.6851 Tj
 0 -370.2411 Td
-(0986   SEG_ASM\(STA_W, 0x0, 0xffffffff\)         # data seg) 249.0053 Tj
+(0986   jmp     spin) 83.0018 Tj
 0 -379.7344 Td
 (0987 ) 21.8426 Tj
 0 -389.2278 Td
-(0988 gdtdesc:) 56.7907 Tj
+(0988 # Bootstrap GDT) 87.3703 Tj
 0 -398.7211 Td
-(0989   .word   0x17                            # sizeof\(gdt\) \
-- 1) 279.5849 Tj
+(0989 .p2align 2                                # force 4 byte a\
+lignment) 310.1645 Tj
 0 -408.2145 Td
-(0990   .long   gdt                             # address gdt) 262.1109 Tj
+(0990 gdt:) 39.3166 Tj
 0 -417.7079 Td
-(0991 ) 21.8426 Tj
+(0991   SEG_NULLASM                             # null seg) 249.0053 Tj
 0 -427.2012 Td
-(0992 ) 21.8426 Tj
+(0992   SEG_ASM\(STA_X|STA_R, 0x0, 0xffffffff\)   # code seg) 249.0053 Tj
 0 -436.6946 Td
-(0993 ) 21.8426 Tj
+(0993   SEG_ASM\(STA_W, 0x0, 0xffffffff\)         # data seg) 249.0053 Tj
 0 -446.1879 Td
 (0994 ) 21.8426 Tj
 0 -455.6813 Td
-(0995 ) 21.8426 Tj
+(0995 gdtdesc:) 56.7907 Tj
 0 -465.1747 Td
-(0996 ) 21.8426 Tj
+(0996   .word   \(gdtdesc - gdt - 1\)                           \
+ # sizeof\(gdt\) - 1) 345.1126 Tj
 0 -474.668 Td
-(0997 ) 21.8426 Tj
+(0997   .long   gdt                             # address gdt) 262.1109 Tj
 0 -484.1614 Td
 (0998 ) 21.8426 Tj
 0 -493.6547 Td
@@ -6360,6 +6404,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -6377,7 +6423,7 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:04 2008  xv6/bootother.S  Page 1) 183.4776 Tj
+(Aug  8 01:04 2009  xv6/bootother.S  Page 1) 183.4776 Tj
 0 -28.4801 Td
 (1000 #include "asm.h") 91.7388 Tj
 0 -37.9735 Td
@@ -6428,27 +6474,23 @@ g bootmain) 318.9016 Tj
 0 -218.3473 Td
 (1020 ) 21.8426 Tj
 0 -227.8407 Td
-(1021 .set PROT_MODE_CSEG, 0x8         # kernel code segment sel\
-ector) 297.059 Tj
+(1021 #define SEG_KCODE 1  // kernel code) 174.7406 Tj
 0 -237.334 Td
-(1022 .set PROT_MODE_DSEG, 0x10        # kernel data segment sel\
-ector) 297.059 Tj
+(1022 #define SEG_KDATA 2  // kernel data+stack) 200.9517 Tj
 0 -246.8274 Td
-(1023 .set CR0_PE_ON,      0x1         # protected mode enable f\
-lag) 288.322 Tj
+(1023 ) 21.8426 Tj
 0 -256.3207 Td
-(1024 ) 21.8426 Tj
+(1024 #define CR0_PE    1  // protected mode enable bit) 235.8998 Tj
 0 -265.8141 Td
-(1025 .globl start) 74.2647 Tj
+(1025 ) 21.8426 Tj
 0 -275.3075 Td
-(1026 start:) 48.0537 Tj
+(1026 .code16                       # Assemble for 16-bit mode) 266.4794 Tj
 0 -284.8008 Td
-(1027   .code16                     # Assemble for 16-bit mode) 266.4794 Tj
+(1027 .globl start) 74.2647 Tj
 0 -294.2942 Td
-(1028   cli                         # Disable interrupts) 240.2683 Tj
+(1028 start:) 48.0537 Tj
 0 -303.7875 Td
-(1029   cld                         # String operations incremen\
-t) 279.5849 Tj
+(1029   cli                         # Disable interrupts) 240.2683 Tj
 0 -313.2809 Td
 (1030 ) 21.8426 Tj
 0 -322.7743 Td
@@ -6508,14 +6550,14 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:04 2008  xv6/bootother.S  Page 2) 183.4776 Tj
+(Aug  8 01:04 2009  xv6/bootother.S  Page 2) 183.4776 Tj
 0 -28.4801 Td
 (1050   # Switch from real to protected mode, using a bootstrap \
 GDT) 288.322 Tj
 0 -37.9735 Td
 (1051   # and segment translation that makes virtual addresses) 266.4794 Tj
 0 -47.4668 Td
-(1052   # identical to their physical addresses, so that the) 257.7424 Tj
+(1052   # identical to physical addresses, so that the) 231.5313 Tj
 0 -56.9602 Td
 (1053   # effective memory map does not change during the switch\
 .) 279.5849 Tj
@@ -6524,7 +6566,7 @@ GDT) 288.322 Tj
 0 -75.9469 Td
 (1055   movl    %cr0, %eax) 109.2129 Tj
 0 -85.4403 Td
-(1056   orl     $CR0_PE_ON, %eax) 135.4239 Tj
+(1056   orl     $CR0_PE, %eax) 122.3184 Tj
 0 -94.9336 Td
 (1057   movl    %eax, %cr0) 109.2129 Tj
 0 -104.427 Td
@@ -6534,82 +6576,85 @@ GDT) 288.322 Tj
 0 -123.4137 Td
 (1060   # Switches processor into 32-bit mode.) 196.5831 Tj
 0 -132.9071 Td
-(1061   ljmp    $PROT_MODE_CSEG, $protcseg) 179.1091 Tj
+(1061   ljmp    $\(SEG_KCODE<<3\), $start32) 174.7406 Tj
 0 -142.4004 Td
 (1062 ) 21.8426 Tj
 0 -151.8938 Td
-(1063   .code32                     # Assemble for 32-bit mode) 266.4794 Tj
+(1063 .code32                       # Assemble for 32-bit mode) 266.4794 Tj
 0 -161.3871 Td
-(1064 protcseg:) 61.1592 Tj
+(1064 start32:) 56.7907 Tj
 0 -170.8805 Td
 (1065   # Set up the protected-mode data segment registers) 249.0053 Tj
 0 -180.3739 Td
-(1066   movw    $PROT_MODE_DSEG, %ax    # Our data segment selec\
-tor) 288.322 Tj
+(1066   movw    $\(SEG_KDATA<<3\), %ax    # Our data segment sel\
+ector) 288.322 Tj
 0 -189.8672 Td
 (1067   movw    %ax, %ds                # -> DS: Data Segment) 262.1109 Tj
 0 -199.3606 Td
 (1068   movw    %ax, %es                # -> ES: Extra Segment) 266.4794 Tj
 0 -208.8539 Td
-(1069   movw    %ax, %fs                # -> FS) 200.9517 Tj
+(1069   movw    %ax, %ss                # -> SS: Stack Segment) 266.4794 Tj
 0 -218.3473 Td
-(1070   movw    %ax, %gs                # -> GS) 200.9517 Tj
+(1070   movw    $0, %ax                 # Zero segments not read\
+y for use) 314.533 Tj
 0 -227.8407 Td
-(1071   movw    %ax, %ss                # -> SS: Stack Segment) 266.4794 Tj
+(1071   movw    %ax, %fs                # -> FS) 200.9517 Tj
 0 -237.334 Td
-(1072 ) 21.8426 Tj
+(1072   movw    %ax, %gs                # -> GS) 200.9517 Tj
 0 -246.8274 Td
-(1073   movl    start-4, %esp) 122.3184 Tj
+(1073 ) 21.8426 Tj
 0 -256.3207 Td
-(1074   movl    start-8, %eax) 122.3184 Tj
+(1074   # Set up the stack pointer and call into C.) 218.4257 Tj
 0 -265.8141 Td
-(1075   jmp     *%eax) 87.3703 Tj
+(1075   movl    start-4, %esp) 122.3184 Tj
 0 -275.3075 Td
-(1076 ) 21.8426 Tj
+(1076   call) 48.0537 Tj
+-2507.8 TJm
+(*\(start-8\)) 43.6851 Tj
 0 -284.8008 Td
-(1077 # Bootstrap GDT) 87.3703 Tj
+(1077 ) 21.8426 Tj
 0 -294.2942 Td
-(1078 .p2align 2                                # force 4 byte a\
-lignment) 310.1645 Tj
+(1078   # If the call returns \(it shouldn't\), trigger a Bochs) 262.1109 Tj
 0 -303.7875 Td
-(1079 gdt:) 39.3166 Tj
+(1079   # breakpoint if running under Bochs, then loop.) 235.8998 Tj
 0 -313.2809 Td
-(1080   SEG_NULLASM                             # null seg) 249.0053 Tj
+(1080   movw    $0x8a00, %ax            # 0x8a00 -> port 0x8a00) 270.8479 Tj
 0 -322.7743 Td
-(1081   SEG_ASM\(STA_X|STA_R, 0x0, 0xffffffff\)   # code seg) 249.0053 Tj
+(1081   movw    %ax, %dx) 100.4758 Tj
 0 -332.2676 Td
-(1082   SEG_ASM\(STA_W, 0x0, 0xffffffff\)         # data seg) 249.0053 Tj
+(1082   outw    %ax, %dx) 100.4758 Tj
 0 -341.761 Td
-(1083 ) 21.8426 Tj
+(1083   movw    $0x8e00, %ax            # 0x8e00 -> port 0x8a00) 270.8479 Tj
 0 -351.2543 Td
-(1084 gdtdesc:) 56.7907 Tj
+(1084   outw    %ax, %dx) 100.4758 Tj
 0 -360.7477 Td
-(1085   .word   0x17                            # sizeof\(gdt\) \
-- 1) 279.5849 Tj
+(1085 spin:) 43.6851 Tj
 0 -370.2411 Td
-(1086   .long   gdt                             # address gdt) 262.1109 Tj
+(1086   jmp     spin) 83.0018 Tj
 0 -379.7344 Td
 (1087 ) 21.8426 Tj
 0 -389.2278 Td
-(1088 ) 21.8426 Tj
+(1088 # Bootstrap GDT) 87.3703 Tj
 0 -398.7211 Td
-(1089 ) 21.8426 Tj
+(1089 .p2align 2                                # force 4 byte a\
+lignment) 310.1645 Tj
 0 -408.2145 Td
-(1090 ) 21.8426 Tj
+(1090 gdt:) 39.3166 Tj
 0 -417.7079 Td
-(1091 ) 21.8426 Tj
+(1091   SEG_NULLASM                             # null seg) 249.0053 Tj
 0 -427.2012 Td
-(1092 ) 21.8426 Tj
+(1092   SEG_ASM\(STA_X|STA_R, 0x0, 0xffffffff\)   # code seg) 249.0053 Tj
 0 -436.6946 Td
-(1093 ) 21.8426 Tj
+(1093   SEG_ASM\(STA_W, 0x0, 0xffffffff\)         # data seg) 249.0053 Tj
 0 -446.1879 Td
 (1094 ) 21.8426 Tj
 0 -455.6813 Td
-(1095 ) 21.8426 Tj
+(1095 gdtdesc:) 56.7907 Tj
 0 -465.1747 Td
-(1096 ) 21.8426 Tj
+(1096   .word   \(gdtdesc - gdt - 1\)                           \
+ # sizeof\(gdt\) - 1) 345.1126 Tj
 0 -474.668 Td
-(1097 ) 21.8426 Tj
+(1097   .long   gdt                             # address gdt) 262.1109 Tj
 0 -484.1614 Td
 (1098 ) 21.8426 Tj
 0 -493.6547 Td
@@ -6644,6 +6689,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -6661,7 +6708,7 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:04 2008  xv6/bootmain.c  Page 1) 179.1091 Tj
+(Aug  8 01:04 2009  xv6/bootmain.c  Page 1) 179.1091 Tj
 0 -28.4801 Td
 (1100 // Boot loader.) 87.3703 Tj
 0 -37.9735 Td
@@ -6692,7 +6739,7 @@ arting at) 305.796 Tj
 0 -142.4004 Td
 (1112 ) 21.8426 Tj
 0 -151.8938 Td
-(1113 void readseg\(uint, uint, uint\);) 157.2665 Tj
+(1113 void readseg\(uchar*, uint, uint\);) 166.0035 Tj
 0 -161.3871 Td
 (1114 ) 21.8426 Tj
 0 -170.8805 Td
@@ -6708,59 +6755,59 @@ arting at) 305.796 Tj
 0 -218.3473 Td
 (1120   void \(*entry\)\(void\);) 117.9499 Tj
 0 -227.8407 Td
-(1121 ) 21.8426 Tj
+(1121   uchar* va;) 74.2647 Tj
 0 -237.334 Td
-(1122   elf = \(struct elfhdr*\)0x10000;  // scratch space) 240.2683 Tj
+(1122 ) 21.8426 Tj
 0 -246.8274 Td
-(1123 ) 21.8426 Tj
+(1123   elf = \(struct elfhdr*\)0x10000;  // scratch space) 240.2683 Tj
 0 -256.3207 Td
-(1124   // Read 1st page off disk) 139.7925 Tj
+(1124 ) 21.8426 Tj
 0 -265.8141 Td
-(1125   readseg\(\(uint\)elf, SECTSIZE*8, 0\);) 179.1091 Tj
+(1125   // Read 1st page off disk) 139.7925 Tj
 0 -275.3075 Td
-(1126 ) 21.8426 Tj
+(1126   readseg\(\(uchar*\)elf, 4096, 0\);) 161.635 Tj
 0 -284.8008 Td
-(1127   // Is this an ELF executable?) 157.2665 Tj
+(1127 ) 21.8426 Tj
 0 -294.2942 Td
-(1128   if\(elf->magic != ELF_MAGIC\)) 148.5295 Tj
+(1128   // Is this an ELF executable?) 157.2665 Tj
 0 -303.7875 Td
-(1129     goto bad;) 78.6333 Tj
+(1129   if\(elf->magic != ELF_MAGIC\)) 148.5295 Tj
 0 -313.2809 Td
-(1130 ) 21.8426 Tj
+(1130     return;  // let bootasm.S handle error) 205.3202 Tj
 0 -322.7743 Td
-(1131   // Load each program segment \(ignores ph flags\).) 240.2683 Tj
+(1131 ) 21.8426 Tj
 0 -332.2676 Td
-(1132   ph = \(struct proghdr*\)\(\(uchar*\)elf + elf->phoff\);) 244.6368 Tj
+(1132   // Load each program segment \(ignores ph flags\).) 240.2683 Tj
 0 -341.761 Td
-(1133   eph = ph + elf->phnum;) 126.6869 Tj
+(1133   ph = \(struct proghdr*\)\(\(uchar*\)elf + elf->phoff\);) 244.6368 Tj
 0 -351.2543 Td
-(1134   for\(; ph < eph; ph++\)) 122.3184 Tj
+(1134   eph = ph + elf->phnum;) 126.6869 Tj
 0 -360.7477 Td
-(1135     readseg\(ph->va & 0xFFFFFF, ph->memsz, ph->offset\);) 257.7424 Tj
+(1135   for\(; ph < eph; ph++\) {) 131.0554 Tj
 0 -370.2411 Td
-(1136 ) 21.8426 Tj
+(1136     va = \(uchar*\)\(ph->va & 0xFFFFFF\);) 183.4776 Tj
 0 -379.7344 Td
-(1137   // Call the entry point from the ELF header.) 222.7942 Tj
+(1137     readseg\(va, ph->filesz, ph->offset\);) 196.5831 Tj
 0 -389.2278 Td
-(1138   // Does not return!) 113.5814 Tj
+(1138     if\(ph->memsz > ph->filesz\)) 152.898 Tj
 0 -398.7211 Td
-(1139   entry = \(void\(*\)\(void\)\)\(elf->entry & 0xFFFFFF\);) 235.8998 Tj
+(1139       stosb\(va + ph->filesz, 0, ph->memsz - ph->filesz\);) 266.4794 Tj
 0 -408.2145 Td
-(1140   entry\(\);) 65.5277 Tj
+(1140   }) 34.9481 Tj
 0 -417.7079 Td
 (1141 ) 21.8426 Tj
 0 -427.2012 Td
-(1142 bad:) 39.3166 Tj
+(1142   // Call the entry point from the ELF header.) 222.7942 Tj
 0 -436.6946 Td
-(1143   outw\(0x8A00, 0x8A00\);) 122.3184 Tj
+(1143   // Does not return!) 113.5814 Tj
 0 -446.1879 Td
-(1144   outw\(0x8A00, 0x8E00\);) 122.3184 Tj
+(1144   entry = \(void\(*\)\(void\)\)\(elf->entry & 0xFFFFFF\);) 235.8998 Tj
 0 -455.6813 Td
-(1145   for\(;;\)) 61.1592 Tj
+(1145   entry\(\);) 65.5277 Tj
 0 -465.1747 Td
-(1146     ;) 43.6851 Tj
+(1146 }) 26.2111 Tj
 0 -474.668 Td
-(1147 }) 26.2111 Tj
+(1147 ) 21.8426 Tj
 0 -484.1614 Td
 (1148 ) 21.8426 Tj
 0 -493.6547 Td
@@ -6783,7 +6830,7 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:04 2008  xv6/bootmain.c  Page 2) 179.1091 Tj
+(Aug  8 01:04 2009  xv6/bootmain.c  Page 2) 179.1091 Tj
 0 -28.4801 Td
 (1150 void) 39.3166 Tj
 0 -37.9735 Td
@@ -6844,11 +6891,11 @@ q
 0 -294.2942 Td
 (1178 void) 39.3166 Tj
 0 -303.7875 Td
-(1179 readseg\(uint va, uint count, uint offset\)) 200.9517 Tj
+(1179 readseg\(uchar* va, uint count, uint offset\)) 209.6887 Tj
 0 -313.2809 Td
 (1180 {) 26.2111 Tj
 0 -322.7743 Td
-(1181   uint eva;) 69.8962 Tj
+(1181   uchar* eva;) 78.6333 Tj
 0 -332.2676 Td
 (1182 ) 21.8426 Tj
 0 -341.761 Td
@@ -6858,7 +6905,7 @@ q
 0 -360.7477 Td
 (1185   // Round down to sector boundary.) 174.7406 Tj
 0 -370.2411 Td
-(1186   va &= ~\(SECTSIZE - 1\);) 126.6869 Tj
+(1186   va -= offset % SECTSIZE;) 135.4239 Tj
 0 -379.7344 Td
 (1187 ) 21.8426 Tj
 0 -389.2278 Td
@@ -6879,7 +6926,7 @@ matter --) 314.533 Tj
 0 -446.1879 Td
 (1194   for\(; va < eva; va += SECTSIZE, offset++\)) 209.6887 Tj
 0 -455.6813 Td
-(1195     readsect\(\(uchar*\)va, offset\);) 166.0035 Tj
+(1195     readsect\(va, offset\);) 131.0554 Tj
 0 -465.1747 Td
 (1196 }) 26.2111 Tj
 0 -474.668 Td
@@ -6918,6 +6965,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -6935,7 +6984,7 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:04 2008  xv6/main.c  Page 1) 161.635 Tj
+(Aug  8 01:04 2009  xv6/main.c  Page 1) 161.635 Tj
 0 -28.4801 Td
 (1200 #include "types.h") 100.4758 Tj
 0 -37.9735 Td
@@ -6951,61 +7000,61 @@ q
 0 -85.4403 Td
 (1206 ) 21.8426 Tj
 0 -94.9336 Td
-(1207 static void bootothers\(void\);) 148.5295 Tj
+(1207 __thread struct cpu *c;) 122.3184 Tj
 0 -104.427 Td
-(1208 static void mpmain\(void\) __attribute__\(\(noreturn\)\);) 244.6368 Tj
+(1208 __thread struct proc *cp;) 131.0554 Tj
 0 -113.9203 Td
 (1209 ) 21.8426 Tj
 0 -123.4137 Td
-(1210 // Bootstrap processor starts running C code here.) 240.2683 Tj
+(1210 static void bootothers\(void\);) 148.5295 Tj
 0 -132.9071 Td
-(1211 int) 34.9481 Tj
+(1211 static void mpmain\(void\) __attribute__\(\(noreturn\)\);) 244.6368 Tj
 0 -142.4004 Td
-(1212 main\(void\)) 65.5277 Tj
+(1212 ) 21.8426 Tj
 0 -151.8938 Td
-(1213 {) 26.2111 Tj
+(1213 // Bootstrap processor starts running C code here.) 240.2683 Tj
 0 -161.3871 Td
-(1214   extern char edata[], end[];) 148.5295 Tj
+(1214 int) 34.9481 Tj
 0 -170.8805 Td
-(1215 ) 21.8426 Tj
+(1215 main\(void\)) 65.5277 Tj
 0 -180.3739 Td
-(1216   // clear BSS) 83.0018 Tj
+(1216 {) 26.2111 Tj
 0 -189.8672 Td
-(1217   memset\(edata, 0, end - edata\);) 161.635 Tj
+(1217   mpinit\(\); // collect info about this machine) 222.7942 Tj
 0 -199.3606 Td
-(1218 ) 21.8426 Tj
+(1218   lapicinit\(mpbcpu\(\)\);) 117.9499 Tj
 0 -208.8539 Td
-(1219   mp_init\(\); // collect info about this machine) 227.1628 Tj
+(1219   ksegment\(\);) 78.6333 Tj
 0 -218.3473 Td
-(1220   lapic_init\(mp_bcpu\(\)\);) 126.6869 Tj
+(1220   picinit\(\);       // interrupt controller) 205.3202 Tj
 0 -227.8407 Td
-(1221   cprintf\("\\ncpu%d: starting xv6\\n\\n", cpu\(\)\);) 222.7942 Tj
+(1221   ioapicinit\(\);    // another interrupt controller) 240.2683 Tj
 0 -237.334 Td
-(1222 ) 21.8426 Tj
+(1222   consoleinit\(\);   // I/O devices & their interrupts) 249.0053 Tj
 0 -246.8274 Td
-(1223   pinit\(\);         // process table) 174.7406 Tj
+(1223   uartinit\(\);      // serial port) 166.0035 Tj
 0 -256.3207 Td
-(1224   binit\(\);         // buffer cache) 170.3721 Tj
+(1224   cprintf\("\\ncpu%d: starting xv6\\n\\n", cpu\(\)\);) 222.7942 Tj
 0 -265.8141 Td
-(1225   pic_init\(\);      // interrupt controller) 205.3202 Tj
+(1225 ) 21.8426 Tj
 0 -275.3075 Td
-(1226   ioapic_init\(\);   // another interrupt controller) 240.2683 Tj
+(1226   kinit\(\);         // physical memory allocator) 227.1628 Tj
 0 -284.8008 Td
-(1227   kinit\(\);         // physical memory allocator) 227.1628 Tj
+(1227   pinit\(\);         // process table) 174.7406 Tj
 0 -294.2942 Td
 (1228   tvinit\(\);        // trap vectors) 170.3721 Tj
 0 -303.7875 Td
-(1229   fileinit\(\);      // file table) 161.635 Tj
+(1229   binit\(\);         // buffer cache) 170.3721 Tj
 0 -313.2809 Td
-(1230   iinit\(\);         // inode cache) 166.0035 Tj
+(1230   fileinit\(\);      // file table) 161.635 Tj
 0 -322.7743 Td
-(1231   console_init\(\);  // I/O devices & their interrupts) 249.0053 Tj
+(1231   iinit\(\);         // inode cache) 166.0035 Tj
 0 -332.2676 Td
-(1232   ide_init\(\);      // disk) 135.4239 Tj
+(1232   ideinit\(\);       // disk) 135.4239 Tj
 0 -341.761 Td
 (1233   if\(!ismp\)) 69.8962 Tj
 0 -351.2543 Td
-(1234     timer_init\(\);  // uniprocessor timer) 196.5831 Tj
+(1234     timerinit\(\);   // uniprocessor timer) 196.5831 Tj
 0 -360.7477 Td
 (1235   userinit\(\);      // first user process) 196.5831 Tj
 0 -370.2411 Td
@@ -7054,7 +7103,7 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:04 2008  xv6/main.c  Page 2) 161.635 Tj
+(Aug  8 01:04 2009  xv6/main.c  Page 2) 161.635 Tj
 0 -28.4801 Td
 (1250 // Bootstrap processor gets here after setting up the hard\
 ware.) 297.059 Tj
@@ -7067,17 +7116,17 @@ ware.) 297.059 Tj
 0 -66.4535 Td
 (1254 {) 26.2111 Tj
 0 -75.9469 Td
-(1255   cprintf\("cpu%d: mpmain\\n", cpu\(\)\);) 179.1091 Tj
+(1255   if\(cpu\(\) != mpbcpu\(\)\)) 122.3184 Tj
 0 -85.4403 Td
-(1256   idtinit\(\);) 74.2647 Tj
+(1256     lapicinit\(cpu\(\)\);) 113.5814 Tj
 0 -94.9336 Td
-(1257   if\(cpu\(\) != mp_bcpu\(\)\)) 126.6869 Tj
+(1257   ksegment\(\);) 78.6333 Tj
 0 -104.427 Td
-(1258     lapic_init\(cpu\(\)\);) 117.9499 Tj
+(1258   cprintf\("cpu%d: mpmain\\n", cpu\(\)\);) 179.1091 Tj
 0 -113.9203 Td
-(1259   setupsegs\(0\);) 87.3703 Tj
+(1259   idtinit\(\);) 74.2647 Tj
 0 -123.4137 Td
-(1260   xchg\(&cpus[cpu\(\)].booted, 1\);) 157.2665 Tj
+(1260   xchg\(&c->booted, 1\);) 117.9499 Tj
 0 -132.9071 Td
 (1261 ) 21.8426 Tj
 0 -142.4004 Td
@@ -7131,7 +7180,7 @@ bootother_size\);) 332.0071 Tj
 0 -360.7477 Td
 (1285     *\(void**\)\(code-8\) = mpmain;) 157.2665 Tj
 0 -370.2411 Td
-(1286     lapic_startap\(c->apicid, \(uint\)code\);) 200.9517 Tj
+(1286     lapicstartap\(c->apicid, \(uint\)code\);) 196.5831 Tj
 0 -379.7344 Td
 (1287 ) 21.8426 Tj
 0 -389.2278 Td
@@ -7188,6 +7237,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -7205,7 +7256,7 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:04 2008  xv6/spinlock.h  Page 1) 179.1091 Tj
+(Aug  8 01:04 2009  xv6/spinlock.h  Page 1) 179.1091 Tj
 0 -28.4801 Td
 (1300 // Mutual exclusion lock.) 131.0554 Tj
 0 -37.9735 Td
@@ -7326,7 +7377,7 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:04 2008  xv6/spinlock.c  Page 1) 179.1091 Tj
+(Aug  8 01:04 2009  xv6/spinlock.c  Page 1) 179.1091 Tj
 0 -28.4801 Td
 (1350 // Mutual exclusion spin locks.) 157.2665 Tj
 0 -37.9735 Td
@@ -7348,74 +7399,74 @@ q
 0 -113.9203 Td
 (1359 ) 21.8426 Tj
 0 -123.4137 Td
-(1360 extern int use_console_lock;) 144.161 Tj
+(1360 void) 39.3166 Tj
 0 -132.9071 Td
-(1361 ) 21.8426 Tj
+(1361 initlock\(struct spinlock *lk, char *name\)) 200.9517 Tj
 0 -142.4004 Td
-(1362 void) 39.3166 Tj
+(1362 {) 26.2111 Tj
 0 -151.8938 Td
-(1363 initlock\(struct spinlock *lock, char *name\)) 209.6887 Tj
+(1363   lk->name = name;) 100.4758 Tj
 0 -161.3871 Td
-(1364 {) 26.2111 Tj
+(1364   lk->locked = 0;) 96.1073 Tj
 0 -170.8805 Td
-(1365   lock->name = name;) 109.2129 Tj
+(1365   lk->cpu = 0xffffffff;) 122.3184 Tj
 0 -180.3739 Td
-(1366   lock->locked = 0;) 104.8443 Tj
+(1366 }) 26.2111 Tj
 0 -189.8672 Td
-(1367   lock->cpu = 0xffffffff;) 131.0554 Tj
+(1367 ) 21.8426 Tj
 0 -199.3606 Td
-(1368 }) 26.2111 Tj
+(1368 // Acquire the lock.) 109.2129 Tj
 0 -208.8539 Td
-(1369 ) 21.8426 Tj
+(1369 // Loops \(spins\) until the lock is acquired.) 214.0572 Tj
 0 -218.3473 Td
-(1370 // Acquire the lock.) 109.2129 Tj
+(1370 // Holding a lock for a long time may cause) 209.6887 Tj
 0 -227.8407 Td
-(1371 // Loops \(spins\) until the lock is acquired.) 214.0572 Tj
+(1371 // other CPUs to waste time spinning to acquire it.) 244.6368 Tj
 0 -237.334 Td
-(1372 // Holding a lock for a long time may cause) 209.6887 Tj
+(1372 void) 39.3166 Tj
 0 -246.8274 Td
-(1373 // other CPUs to waste time spinning to acquire it.) 244.6368 Tj
+(1373 acquire\(struct spinlock *lk\)) 144.161 Tj
 0 -256.3207 Td
-(1374 void) 39.3166 Tj
+(1374 {) 26.2111 Tj
 0 -265.8141 Td
-(1375 acquire\(struct spinlock *lock\)) 152.898 Tj
+(1375   pushcli\(\);) 74.2647 Tj
 0 -275.3075 Td
-(1376 {) 26.2111 Tj
+(1376   if\(holding\(lk\)\)) 96.1073 Tj
 0 -284.8008 Td
-(1377   pushcli\(\);) 74.2647 Tj
+(1377     panic\("acquire"\);) 113.5814 Tj
 0 -294.2942 Td
-(1378   if\(holding\(lock\)\)) 104.8443 Tj
+(1378 ) 21.8426 Tj
 0 -303.7875 Td
-(1379     panic\("acquire"\);) 113.5814 Tj
+(1379   // The xchg is atomic.) 126.6869 Tj
 0 -313.2809 Td
-(1380 ) 21.8426 Tj
-0 -322.7743 Td
-(1381   // The xchg is atomic.) 126.6869 Tj
-0 -332.2676 Td
-(1382   // It also serializes, so that reads after acquire are n\
+(1380   // It also serializes, so that reads after acquire are n\
 ot) 283.9534 Tj
+0 -322.7743 Td
+(1381   // reordered before it.) 131.0554 Tj
+0 -332.2676 Td
+(1382   while\(xchg\(&lk->locked, 1\) != 0\)) 170.3721 Tj
 0 -341.761 Td
-(1383   // reordered before it.) 131.0554 Tj
+(1383     ;) 43.6851 Tj
 0 -351.2543 Td
-(1384   while\(xchg\(&lock->locked, 1\) == 1\)) 179.1091 Tj
+(1384 ) 21.8426 Tj
 0 -360.7477 Td
-(1385     ;) 43.6851 Tj
+(1385   // Record info about lock acquisition for debugging.) 257.7424 Tj
 0 -370.2411 Td
-(1386 ) 21.8426 Tj
+(1386   // The +10 is only so that we can tell the difference) 262.1109 Tj
 0 -379.7344 Td
-(1387   // Record info about lock acquisition for debugging.) 257.7424 Tj
+(1387   // between forgetting to initialize lock->cpu) 227.1628 Tj
 0 -389.2278 Td
-(1388   // The +10 is only so that we can tell the difference) 262.1109 Tj
+(1388   // and holding a lock on cpu 0.) 166.0035 Tj
 0 -398.7211 Td
-(1389   // between forgetting to initialize lock->cpu) 227.1628 Tj
+(1389   lk->cpu = cpu\(\) + 10;) 122.3184 Tj
 0 -408.2145 Td
-(1390   // and holding a lock on cpu 0.) 166.0035 Tj
+(1390   getcallerpcs\(&lk, lk->pcs\);) 148.5295 Tj
 0 -417.7079 Td
-(1391   lock->cpu = cpu\(\) + 10;) 131.0554 Tj
+(1391 }) 26.2111 Tj
 0 -427.2012 Td
-(1392   getcallerpcs\(&lock, lock->pcs\);) 166.0035 Tj
+(1392 ) 21.8426 Tj
 0 -436.6946 Td
-(1393 }) 26.2111 Tj
+(1393 ) 21.8426 Tj
 0 -446.1879 Td
 (1394 ) 21.8426 Tj
 0 -455.6813 Td
@@ -7458,6 +7509,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -7475,106 +7528,110 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:04 2008  xv6/spinlock.c  Page 2) 179.1091 Tj
+(Aug  8 01:04 2009  xv6/spinlock.c  Page 2) 179.1091 Tj
 0 -28.4801 Td
 (1400 // Release the lock.) 109.2129 Tj
 0 -37.9735 Td
 (1401 void) 39.3166 Tj
 0 -47.4668 Td
-(1402 release\(struct spinlock *lock\)) 152.898 Tj
+(1402 release\(struct spinlock *lk\)) 144.161 Tj
 0 -56.9602 Td
 (1403 {) 26.2111 Tj
 0 -66.4535 Td
-(1404   if\(!holding\(lock\)\)) 109.2129 Tj
+(1404   if\(!holding\(lk\)\)) 100.4758 Tj
 0 -75.9469 Td
 (1405     panic\("release"\);) 113.5814 Tj
 0 -85.4403 Td
 (1406 ) 21.8426 Tj
 0 -94.9336 Td
-(1407   lock->pcs[0] = 0;) 104.8443 Tj
+(1407   lk->pcs[0] = 0;) 96.1073 Tj
 0 -104.427 Td
-(1408   lock->cpu = 0xffffffff;) 131.0554 Tj
+(1408   lk->cpu = 0xffffffff;) 122.3184 Tj
 0 -113.9203 Td
 (1409 ) 21.8426 Tj
 0 -123.4137 Td
 (1410   // The xchg serializes, so that reads before release are) 275.2164 Tj
 0 -132.9071 Td
-(1411   // not reordered after it.  \(This reordering would be a\
-llowed) 297.059 Tj
+(1411   // not reordered after it.  The 1996 PentiumPro manual \(\
+Volume 3,) 314.533 Tj
 0 -142.4004 Td
-(1412   // by the Intel manuals, but does not happen on current) 270.8479 Tj
+(1412   // 7.2\) says reads can be carried out speculatively and\
+ in) 283.9534 Tj
 0 -151.8938 Td
-(1413   // Intel processors.  The xchg being asm volatile also k\
-eeps) 292.6905 Tj
+(1413   // any order, which implies we need to serialize here.) 266.4794 Tj
 0 -161.3871 Td
-(1414   // gcc from delaying the above assignments.\)) 222.7942 Tj
+(1414   // But the 2007 Intel 64 Architecture Memory Ordering Wh\
+ite) 288.322 Tj
 0 -170.8805 Td
-(1415   xchg\(&lock->locked, 0\);) 131.0554 Tj
+(1415   // Paper says that Intel 64 and IA-32 will not move a lo\
+ad) 283.9534 Tj
 0 -180.3739 Td
-(1416 ) 21.8426 Tj
+(1416   // after a store. So lock->locked = 0 would work here.) 266.4794 Tj
 0 -189.8672 Td
-(1417   popcli\(\);) 69.8962 Tj
+(1417   // The xchg being asm volatile ensures gcc emits it afte\
+r) 279.5849 Tj
 0 -199.3606 Td
-(1418 }) 26.2111 Tj
+(1418   // the above assignments \(and after the critical sectio\
+n\).) 283.9534 Tj
 0 -208.8539 Td
-(1419 ) 21.8426 Tj
+(1419   xchg\(&lk->locked, 0\);) 122.3184 Tj
 0 -218.3473 Td
-(1420 // Record the current call stack in pcs[] by following the\
- %ebp chain.) 327.6386 Tj
+(1420 ) 21.8426 Tj
 0 -227.8407 Td
-(1421 void) 39.3166 Tj
+(1421   popcli\(\);) 69.8962 Tj
 0 -237.334 Td
-(1422 getcallerpcs\(void *v, uint pcs[]\)) 166.0035 Tj
+(1422 }) 26.2111 Tj
 0 -246.8274 Td
-(1423 {) 26.2111 Tj
+(1423 ) 21.8426 Tj
 0 -256.3207 Td
-(1424   uint *ebp;) 74.2647 Tj
+(1424 // Record the current call stack in pcs[] by following the\
+ %ebp chain.) 327.6386 Tj
 0 -265.8141 Td
-(1425   int i;) 56.7907 Tj
+(1425 void) 39.3166 Tj
 0 -275.3075 Td
-(1426 ) 21.8426 Tj
+(1426 getcallerpcs\(void *v, uint pcs[]\)) 166.0035 Tj
 0 -284.8008 Td
-(1427   ebp = \(uint*\)v - 2;) 113.5814 Tj
+(1427 {) 26.2111 Tj
 0 -294.2942 Td
-(1428   for\(i = 0; i < 10; i++\){) 135.4239 Tj
+(1428   uint *ebp;) 74.2647 Tj
 0 -303.7875 Td
-(1429     if\(ebp == 0 || ebp == \(uint*\)0xffffffff\)) 214.0572 Tj
+(1429   int i;) 56.7907 Tj
 0 -313.2809 Td
-(1430       break;) 74.2647 Tj
+(1430 ) 21.8426 Tj
 0 -322.7743 Td
-(1431     pcs[i] = ebp[1];     // saved %eip) 187.8461 Tj
+(1431   ebp = \(uint*\)v - 2;) 113.5814 Tj
 0 -332.2676 Td
-(1432     ebp = \(uint*\)ebp[0]; // saved %ebp) 187.8461 Tj
+(1432   for\(i = 0; i < 10; i++\){) 135.4239 Tj
 0 -341.761 Td
-(1433   }) 34.9481 Tj
+(1433     if\(ebp == 0 || ebp == \(uint*\)0xffffffff\)) 214.0572 Tj
 0 -351.2543 Td
-(1434   for\(; i < 10; i++\)) 109.2129 Tj
+(1434       break;) 74.2647 Tj
 0 -360.7477 Td
-(1435     pcs[i] = 0;) 87.3703 Tj
+(1435     pcs[i] = ebp[1];     // saved %eip) 187.8461 Tj
 0 -370.2411 Td
-(1436 }) 26.2111 Tj
+(1436     ebp = \(uint*\)ebp[0]; // saved %ebp) 187.8461 Tj
 0 -379.7344 Td
-(1437 ) 21.8426 Tj
+(1437   }) 34.9481 Tj
 0 -389.2278 Td
-(1438 // Check whether this cpu is holding the lock.) 222.7942 Tj
+(1438   for\(; i < 10; i++\)) 109.2129 Tj
 0 -398.7211 Td
-(1439 int) 34.9481 Tj
+(1439     pcs[i] = 0;) 87.3703 Tj
 0 -408.2145 Td
-(1440 holding\(struct spinlock *lock\)) 152.898 Tj
+(1440 }) 26.2111 Tj
 0 -417.7079 Td
-(1441 {) 26.2111 Tj
+(1441 ) 21.8426 Tj
 0 -427.2012 Td
-(1442   return lock->locked && lock->cpu == cpu\(\) + 10;) 235.8998 Tj
+(1442 // Check whether this cpu is holding the lock.) 222.7942 Tj
 0 -436.6946 Td
-(1443 }) 26.2111 Tj
+(1443 int) 34.9481 Tj
 0 -446.1879 Td
-(1444 ) 21.8426 Tj
+(1444 holding\(struct spinlock *lock\)) 152.898 Tj
 0 -455.6813 Td
-(1445 ) 21.8426 Tj
+(1445 {) 26.2111 Tj
 0 -465.1747 Td
-(1446 ) 21.8426 Tj
+(1446   return lock->locked && lock->cpu == cpu\(\) + 10;) 235.8998 Tj
 0 -474.668 Td
-(1447 ) 21.8426 Tj
+(1447 }) 26.2111 Tj
 0 -484.1614 Td
 (1448 ) 21.8426 Tj
 0 -493.6547 Td
@@ -7597,7 +7654,7 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:04 2008  xv6/spinlock.c  Page 3) 179.1091 Tj
+(Aug  8 01:04 2009  xv6/spinlock.c  Page 3) 179.1091 Tj
 0 -28.4801 Td
 (1450 // Pushcli/popcli are like cli/sti except that they are ma\
 tched:) 301.4275 Tj
@@ -7619,13 +7676,13 @@ rrupts) 301.4275 Tj
 0 -104.427 Td
 (1458 ) 21.8426 Tj
 0 -113.9203 Td
-(1459   eflags = read_eflags\(\);) 131.0554 Tj
+(1459   eflags = readeflags\(\);) 126.6869 Tj
 0 -123.4137 Td
 (1460   cli\(\);) 56.7907 Tj
 0 -132.9071 Td
-(1461   if\(cpus[cpu\(\)].ncli++ == 0\)) 148.5295 Tj
+(1461   if\(c->ncli++ == 0\)) 109.2129 Tj
 0 -142.4004 Td
-(1462     cpus[cpu\(\)].intena = eflags & FL_IF;) 196.5831 Tj
+(1462     c->intena = eflags & FL_IF;) 157.2665 Tj
 0 -151.8938 Td
 (1463 }) 26.2111 Tj
 0 -161.3871 Td
@@ -7637,15 +7694,15 @@ rrupts) 301.4275 Tj
 0 -189.8672 Td
 (1467 {) 26.2111 Tj
 0 -199.3606 Td
-(1468   if\(read_eflags\(\)&FL_IF\)) 131.0554 Tj
+(1468   if\(readeflags\(\)&FL_IF\)) 126.6869 Tj
 0 -208.8539 Td
 (1469     panic\("popcli - interruptible"\);) 179.1091 Tj
 0 -218.3473 Td
-(1470   if\(--cpus[cpu\(\)].ncli < 0\)) 144.161 Tj
+(1470   if\(--c->ncli < 0\)) 104.8443 Tj
 0 -227.8407 Td
 (1471     panic\("popcli"\);) 109.2129 Tj
 0 -237.334 Td
-(1472   if\(cpus[cpu\(\)].ncli == 0 && cpus[cpu\(\)].intena\)) 235.8998 Tj
+(1472   if\(c->ncli == 0 && c->intena\)) 157.2665 Tj
 0 -246.8274 Td
 (1473     sti\(\);) 65.5277 Tj
 0 -256.3207 Td
@@ -7730,6 +7787,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -7747,63 +7806,65 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:04 2008  xv6/proc.h  Page 1) 161.635 Tj
+(Aug  8 01:04 2009  xv6/proc.h  Page 1) 161.635 Tj
 0 -28.4801 Td
-(1500 // Segments in proc->gdt) 126.6869 Tj
+(1500 // Segments in proc->gdt.) 131.0554 Tj
 0 -37.9735 Td
-(1501 #define SEG_KCODE 1  // kernel code) 174.7406 Tj
+(1501 // Also known to bootasm.S and trapasm.S) 196.5831 Tj
 0 -47.4668 Td
-(1502 #define SEG_KDATA 2  // kernel data+stack) 200.9517 Tj
+(1502 #define SEG_KCODE 1  // kernel code) 174.7406 Tj
 0 -56.9602 Td
-(1503 #define SEG_UCODE 3) 104.8443 Tj
+(1503 #define SEG_KDATA 2  // kernel data+stack) 200.9517 Tj
 0 -66.4535 Td
-(1504 #define SEG_UDATA 4) 104.8443 Tj
+(1504 #define SEG_KCPU  3  // kernel per-cpu data) 209.6887 Tj
 0 -75.9469 Td
-(1505 #define SEG_TSS   5  // this process's task state) 235.8998 Tj
+(1505 #define SEG_UCODE 4) 104.8443 Tj
 0 -85.4403 Td
-(1506 #define NSEGS     6) 104.8443 Tj
+(1506 #define SEG_UDATA 5) 104.8443 Tj
 0 -94.9336 Td
-(1507 ) 21.8426 Tj
+(1507 #define SEG_TSS   6  // this process's task state) 235.8998 Tj
 0 -104.427 Td
-(1508 // Saved registers for kernel context switches.) 227.1628 Tj
+(1508 #define NSEGS     7) 104.8443 Tj
 0 -113.9203 Td
-(1509 // Don't need to save all the %fs etc. segment registers,) 270.8479 Tj
+(1509 ) 21.8426 Tj
 0 -123.4137 Td
-(1510 // because they are constant across kernel contexts.) 249.0053 Tj
+(1510 // Saved registers for kernel context switches.) 227.1628 Tj
 0 -132.9071 Td
-(1511 // Save all the regular registers so we don't need to care) 275.2164 Tj
+(1511 // Don't need to save all the segment registers \(%cs, etc\
+\),) 279.5849 Tj
 0 -142.4004 Td
-(1512 // which are caller save, but not the return register %eax\
-.) 279.5849 Tj
+(1512 // because they are constant across kernel contexts.) 249.0053 Tj
 0 -151.8938 Td
-(1513 // \(Not saving %eax just simplifies the switching code.\)) 266.4794 Tj
+(1513 // Don't need to save %eax, %ecx, %edx, because the) 244.6368 Tj
 0 -161.3871 Td
-(1514 // The layout of context must match code in swtch.S.) 249.0053 Tj
+(1514 // x86 convention is that the caller has saved them.) 249.0053 Tj
 0 -170.8805 Td
-(1515 struct context {) 91.7388 Tj
+(1515 // Contexts are stored at the bottom of the stack they) 257.7424 Tj
 0 -180.3739 Td
-(1516   int eip;) 65.5277 Tj
+(1516 // describe; the stack pointer is the address of the conte\
+xt.) 288.322 Tj
 0 -189.8672 Td
-(1517   int esp;) 65.5277 Tj
+(1517 // The layout of the context must match the code in swtch.\
+S.) 283.9534 Tj
 0 -199.3606 Td
-(1518   int ebx;) 65.5277 Tj
+(1518 struct context {) 91.7388 Tj
 0 -208.8539 Td
-(1519   int ecx;) 65.5277 Tj
+(1519   uint edi;) 69.8962 Tj
 0 -218.3473 Td
-(1520   int edx;) 65.5277 Tj
+(1520   uint esi;) 69.8962 Tj
 0 -227.8407 Td
-(1521   int esi;) 65.5277 Tj
+(1521   uint ebx;) 69.8962 Tj
 0 -237.334 Td
-(1522   int edi;) 65.5277 Tj
+(1522   uint ebp;) 69.8962 Tj
 0 -246.8274 Td
-(1523   int ebp;) 65.5277 Tj
+(1523   uint eip;) 69.8962 Tj
 0 -256.3207 Td
 (1524 };) 30.5796 Tj
 0 -265.8141 Td
 (1525 ) 21.8426 Tj
 0 -275.3075 Td
-(1526 enum proc_state { UNUSED, EMBRYO, SLEEPING, RUNNABLE, RUNN\
-ING, ZOMBIE };) 336.3756 Tj
+(1526 enum procstate { UNUSED, EMBRYO, SLEEPING, RUNNABLE, RUNNI\
+NG, ZOMBIE };) 332.0071 Tj
 0 -284.8008 Td
 (1527 ) 21.8426 Tj
 0 -294.2942 Td
@@ -7811,37 +7872,39 @@ ING, ZOMBIE };) 336.3756 Tj
 0 -303.7875 Td
 (1529 struct proc {) 78.6333 Tj
 0 -313.2809 Td
-(1530   char *mem;                // Start of process memory \(k\
-ernel address\)) 332.0071 Tj
+(1530   char *mem;                   // Start of process memory \
+\(kernel address\)) 345.1126 Tj
 0 -322.7743 Td
-(1531   uint sz;                  // Size of process memory \(by\
-tes\)) 288.322 Tj
+(1531   uint sz;                     // Size of process memory \(\
+bytes\)) 301.4275 Tj
 0 -332.2676 Td
-(1532   char *kstack;             // Bottom of kernel stack for \
-this process) 327.6386 Tj
+(1532   char *kstack;                // Bottom of kernel stack f\
+or this process) 340.7441 Tj
 0 -341.761 Td
-(1533   enum proc_state state;    // Process state) 214.0572 Tj
+(1533   enum procstate state;       // Process state) 222.7942 Tj
 0 -351.2543 Td
-(1534   int pid;                  // Process ID) 200.9517 Tj
+(1534   volatile int pid;            // Process ID) 214.0572 Tj
 0 -360.7477 Td
-(1535   struct proc *parent;      // Parent process) 218.4257 Tj
+(1535   struct proc *parent;         // Parent process) 231.5313 Tj
 0 -370.2411 Td
-(1536   void *chan;               // If non-zero, sleeping on ch\
-an) 283.9534 Tj
+(1536   struct trapframe *tf;        // Trap frame for current s\
+yscall) 301.4275 Tj
 0 -379.7344 Td
-(1537   int killed;               // If non-zero, have been kill\
-ed) 283.9534 Tj
+(1537   struct context *context;     // Switch here to run proce\
+ss) 283.9534 Tj
 0 -389.2278 Td
-(1538   struct file *ofile[NOFILE];  // Open files) 214.0572 Tj
+(1538   void *chan;                  // If non-zero, sleeping on\
+ chan) 297.059 Tj
 0 -398.7211 Td
-(1539   struct inode *cwd;        // Current directory) 231.5313 Tj
+(1539   int killed;                  // If non-zero, have been k\
+illed) 297.059 Tj
 0 -408.2145 Td
-(1540   struct context context;   // Switch here to run process) 270.8479 Tj
+(1540   struct file *ofile[NOFILE];  // Open files) 214.0572 Tj
 0 -417.7079 Td
-(1541   struct trapframe *tf;     // Trap frame for current inte\
-rrupt) 297.059 Tj
+(1541   struct inode *cwd;           // Current directory) 244.6368 Tj
 0 -427.2012 Td
-(1542   char name[16];            // Process name \(debugging\)) 262.1109 Tj
+(1542   char name[16];               // Process name \(debugging\
+\)) 275.2164 Tj
 0 -436.6946 Td
 (1543 };) 30.5796 Tj
 0 -446.1879 Td
@@ -7874,7 +7937,7 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:04 2008  xv6/proc.h  Page 2) 161.635 Tj
+(Aug  8 01:04 2009  xv6/proc.h  Page 2) 161.635 Tj
 0 -28.4801 Td
 (1550 // Process memory is laid out contiguously, low addresses \
 first:) 301.4275 Tj
@@ -7893,26 +7956,26 @@ first:) 301.4275 Tj
 0 -94.9336 Td
 (1557 struct cpu {) 74.2647 Tj
 0 -104.427 Td
-(1558   uchar apicid;               // Local APIC ID) 222.7942 Tj
+(1558   uchar apicid;                // Local APIC ID) 227.1628 Tj
 0 -113.9203 Td
-(1559   struct proc *curproc;       // Process currently running\
-.) 279.5849 Tj
+(1559   struct context *context;     // Switch here to enter sch\
+eduler) 301.4275 Tj
 0 -123.4137 Td
-(1560   struct context context;     // Switch here to enter sche\
-duler) 297.059 Tj
+(1560   struct taskstate ts;         // Used by x86 to find stac\
+k for interrupt) 340.7441 Tj
 0 -132.9071 Td
-(1561   struct taskstate ts;        // Used by x86 to find stack\
- for interrupt) 336.3756 Tj
+(1561   struct segdesc gdt[NSEGS];   // x86 global descriptor ta\
+ble) 288.322 Tj
 0 -142.4004 Td
-(1562   struct segdesc gdt[NSEGS];  // x86 global descriptor tab\
-le) 283.9534 Tj
+(1562   volatile uint booted;        // Has the CPU started?) 257.7424 Tj
 0 -151.8938 Td
-(1563   volatile uint booted;        // Has the CPU started?) 257.7424 Tj
+(1563   int ncli;                    // Depth of pushcli nesting\
+.) 279.5849 Tj
 0 -161.3871 Td
-(1564   int ncli;                   // Depth of pushcli nesting.) 275.2164 Tj
+(1564   int intena;                  // Were interrupts enabled \
+before pushcli?) 340.7441 Tj
 0 -170.8805 Td
-(1565   int intena;                 // Were interrupts enabled b\
-efore pushcli?) 336.3756 Tj
+(1565   void *tls[2];) 87.3703 Tj
 0 -180.3739 Td
 (1566 };) 30.5796 Tj
 0 -189.8672 Td
@@ -7924,21 +7987,24 @@ efore pushcli?) 336.3756 Tj
 0 -218.3473 Td
 (1570 ) 21.8426 Tj
 0 -227.8407 Td
-(1571 // "cp" is a short alias for curproc\(\).) 192.2146 Tj
+(1571 // Per-CPU variables, holding pointers to the) 218.4257 Tj
 0 -237.334 Td
-(1572 // It gets used enough to make this worthwhile.) 227.1628 Tj
+(1572 // current cpu and to the current process.) 205.3202 Tj
 0 -246.8274 Td
-(1573 #define cp curproc\(\)) 109.2129 Tj
+(1573 // The __thread prefix tells gcc to refer to them in the s\
+egment) 301.4275 Tj
 0 -256.3207 Td
-(1574 ) 21.8426 Tj
+(1574 // pointed at by gs; the name __thread derives from the us\
+e) 279.5849 Tj
 0 -265.8141 Td
-(1575 ) 21.8426 Tj
+(1575 // of the same mechanism to provide per-thread storage in) 270.8479 Tj
 0 -275.3075 Td
-(1576 ) 21.8426 Tj
+(1576 // multithreaded user programs.) 157.2665 Tj
 0 -284.8008 Td
-(1577 ) 21.8426 Tj
+(1577 extern __thread struct cpu *c;       // This cpu.) 235.8998 Tj
 0 -294.2942 Td
-(1578 ) 21.8426 Tj
+(1578 extern __thread struct proc *cp;     // Current process on\
+ this cpu.) 318.9016 Tj
 0 -303.7875 Td
 (1579 ) 21.8426 Tj
 0 -313.2809 Td
@@ -8011,6 +8077,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -8028,7 +8096,7 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/proc.c  Page 1) 161.635 Tj
+(Aug  8 01:04 2009  xv6/proc.c  Page 1) 161.635 Tj
 0 -28.4801 Td
 (1600 #include "types.h") 100.4758 Tj
 0 -37.9735 Td
@@ -8046,79 +8114,79 @@ q
 0 -94.9336 Td
 (1607 ) 21.8426 Tj
 0 -104.427 Td
-(1608 struct spinlock proc_table_lock;) 161.635 Tj
+(1608 struct {) 56.7907 Tj
 0 -113.9203 Td
-(1609 ) 21.8426 Tj
+(1609   struct spinlock lock;) 122.3184 Tj
 0 -123.4137 Td
-(1610 struct proc proc[NPROC];) 126.6869 Tj
+(1610   struct proc proc[NPROC];) 135.4239 Tj
 0 -132.9071 Td
-(1611 static struct proc *initproc;) 148.5295 Tj
+(1611 } ptable;) 61.1592 Tj
 0 -142.4004 Td
 (1612 ) 21.8426 Tj
 0 -151.8938 Td
-(1613 int nextpid = 1;) 91.7388 Tj
+(1613 static struct proc *initproc;) 148.5295 Tj
 0 -161.3871 Td
-(1614 extern void forkret\(void\);) 135.4239 Tj
+(1614 ) 21.8426 Tj
 0 -170.8805 Td
-(1615 extern void forkret1\(struct trapframe*\);) 196.5831 Tj
+(1615 int nextpid = 1;) 91.7388 Tj
 0 -180.3739 Td
-(1616 ) 21.8426 Tj
+(1616 extern void forkret\(void\);) 135.4239 Tj
 0 -189.8672 Td
-(1617 void) 39.3166 Tj
+(1617 extern void trapret\(void\);) 135.4239 Tj
 0 -199.3606 Td
-(1618 pinit\(void\)) 69.8962 Tj
+(1618 ) 21.8426 Tj
 0 -208.8539 Td
-(1619 {) 26.2111 Tj
+(1619 void) 39.3166 Tj
 0 -218.3473 Td
-(1620   initlock\(&proc_table_lock, "proc_table"\);) 209.6887 Tj
+(1620 pinit\(void\)) 69.8962 Tj
 0 -227.8407 Td
-(1621 }) 26.2111 Tj
+(1621 {) 26.2111 Tj
 0 -237.334 Td
-(1622 ) 21.8426 Tj
+(1622   initlock\(&ptable.lock, "ptable"\);) 174.7406 Tj
 0 -246.8274 Td
-(1623 // Look in the process table for an UNUSED proc.) 231.5313 Tj
+(1623 }) 26.2111 Tj
 0 -256.3207 Td
-(1624 // If found, change state to EMBRYO and return it.) 240.2683 Tj
+(1624 ) 21.8426 Tj
 0 -265.8141 Td
-(1625 // Otherwise return 0.) 117.9499 Tj
+(1625 ) 21.8426 Tj
 0 -275.3075 Td
-(1626 static struct proc*) 104.8443 Tj
+(1626 ) 21.8426 Tj
 0 -284.8008 Td
-(1627 allocproc\(void\)) 87.3703 Tj
+(1627 ) 21.8426 Tj
 0 -294.2942 Td
-(1628 {) 26.2111 Tj
+(1628 ) 21.8426 Tj
 0 -303.7875 Td
-(1629   int i;) 56.7907 Tj
+(1629 ) 21.8426 Tj
 0 -313.2809 Td
-(1630   struct proc *p;) 96.1073 Tj
+(1630 ) 21.8426 Tj
 0 -322.7743 Td
 (1631 ) 21.8426 Tj
 0 -332.2676 Td
-(1632   acquire\(&proc_table_lock\);) 144.161 Tj
+(1632 ) 21.8426 Tj
 0 -341.761 Td
-(1633   for\(i = 0; i < NPROC; i++\){) 148.5295 Tj
+(1633 ) 21.8426 Tj
 0 -351.2543 Td
-(1634     p = &proc[i];) 96.1073 Tj
+(1634 ) 21.8426 Tj
 0 -360.7477 Td
-(1635     if\(p->state == UNUSED\){) 139.7925 Tj
+(1635 ) 21.8426 Tj
 0 -370.2411 Td
-(1636       p->state = EMBRYO;) 126.6869 Tj
+(1636 ) 21.8426 Tj
 0 -379.7344 Td
-(1637       p->pid = nextpid++;) 131.0554 Tj
+(1637 ) 21.8426 Tj
 0 -389.2278 Td
-(1638       release\(&proc_table_lock\);) 161.635 Tj
+(1638 ) 21.8426 Tj
 0 -398.7211 Td
-(1639       return p;) 87.3703 Tj
+(1639 ) 21.8426 Tj
 0 -408.2145 Td
-(1640     }) 43.6851 Tj
+(1640 ) 21.8426 Tj
 0 -417.7079 Td
-(1641   }) 34.9481 Tj
+(1641 ) 21.8426 Tj
 0 -427.2012 Td
-(1642   release\(&proc_table_lock\);) 144.161 Tj
+(1642 ) 21.8426 Tj
 0 -436.6946 Td
-(1643   return 0;) 69.8962 Tj
+(1643 ) 21.8426 Tj
 0 -446.1879 Td
-(1644 }) 26.2111 Tj
+(1644 ) 21.8426 Tj
 0 -455.6813 Td
 (1645 ) 21.8426 Tj
 0 -465.1747 Td
@@ -8147,105 +8215,100 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/proc.c  Page 2) 161.635 Tj
+(Aug  8 01:04 2009  xv6/proc.c  Page 2) 161.635 Tj
 0 -28.4801 Td
-(1650 // Grow current process's memory by n bytes.) 214.0572 Tj
+(1650 // Print a process listing to console.  For debugging.) 257.7424 Tj
 0 -37.9735 Td
-(1651 // Return old size on success, -1 on failure.) 218.4257 Tj
+(1651 // Runs when user types ^P on console.) 187.8461 Tj
 0 -47.4668 Td
-(1652 int) 34.9481 Tj
+(1652 // No lock to avoid wedging a stuck machine further.) 249.0053 Tj
 0 -56.9602 Td
-(1653 growproc\(int n\)) 87.3703 Tj
+(1653 void) 39.3166 Tj
 0 -66.4535 Td
-(1654 {) 26.2111 Tj
+(1654 procdump\(void\)) 83.0018 Tj
 0 -75.9469 Td
-(1655   char *newmem;) 87.3703 Tj
+(1655 {) 26.2111 Tj
 0 -85.4403 Td
-(1656 ) 21.8426 Tj
+(1656   static char *states[] = {) 139.7925 Tj
 0 -94.9336 Td
-(1657   newmem = kalloc\(cp->sz + n\);) 152.898 Tj
+(1657   [UNUSED]    "unused",) 122.3184 Tj
 0 -104.427 Td
-(1658   if\(newmem == 0\)) 96.1073 Tj
+(1658   [EMBRYO]    "embryo",) 122.3184 Tj
 0 -113.9203 Td
-(1659     return -1;) 83.0018 Tj
+(1659   [SLEEPING]  "sleep ",) 122.3184 Tj
 0 -123.4137 Td
-(1660   memmove\(newmem, cp->mem, cp->sz\);) 174.7406 Tj
+(1660   [RUNNABLE]  "runble",) 122.3184 Tj
 0 -132.9071 Td
-(1661   memset\(newmem + cp->sz, 0, n\);) 161.635 Tj
+(1661   [RUNNING]   "run   ",) 122.3184 Tj
 0 -142.4004 Td
-(1662   kfree\(cp->mem, cp->sz\);) 131.0554 Tj
+(1662   [ZOMBIE]    "zombie") 117.9499 Tj
 0 -151.8938 Td
-(1663   cp->mem = newmem;) 104.8443 Tj
+(1663   };) 39.3166 Tj
 0 -161.3871 Td
-(1664   cp->sz += n;) 83.0018 Tj
+(1664   int i;) 56.7907 Tj
 0 -170.8805 Td
-(1665   setupsegs\(cp\);) 91.7388 Tj
+(1665   struct proc *p;) 96.1073 Tj
 0 -180.3739 Td
-(1666   return cp->sz - n;) 109.2129 Tj
+(1666   char *state;) 83.0018 Tj
 0 -189.8672 Td
-(1667 }) 26.2111 Tj
+(1667   uint pc[10];) 83.0018 Tj
 0 -199.3606 Td
 (1668 ) 21.8426 Tj
 0 -208.8539 Td
-(1669 // Set up CPU's segment descriptors and task state for a g\
-iven process.) 332.0071 Tj
+(1669   for\(p = ptable.proc; p < &ptable.proc[NPROC]; p++\){) 253.3738 Tj
 0 -218.3473 Td
-(1670 // If p==0, set up for "idle" state for when scheduler\(\)\
- is running.) 318.9016 Tj
+(1670     if\(p->state == UNUSED\)) 135.4239 Tj
 0 -227.8407 Td
-(1671 void) 39.3166 Tj
+(1671       continue;) 87.3703 Tj
 0 -237.334 Td
-(1672 setupsegs\(struct proc *p\)) 131.0554 Tj
+(1672     if\(p->state >= 0 && p->state < NELEM\(states\) && sta\
+tes[p->state]\)) 323.2701 Tj
 0 -246.8274 Td
-(1673 {) 26.2111 Tj
+(1673       state = states[p->state];) 157.2665 Tj
 0 -256.3207 Td
-(1674   struct cpu *c;) 91.7388 Tj
+(1674     else) 56.7907 Tj
 0 -265.8141 Td
-(1675 ) 21.8426 Tj
+(1675       state = "???";) 109.2129 Tj
 0 -275.3075 Td
-(1676   pushcli\(\);) 74.2647 Tj
+(1676     cprintf\("%d %s %s", p->pid, state, p->name\);) 231.5313 Tj
 0 -284.8008 Td
-(1677   c = &cpus[cpu\(\)];) 104.8443 Tj
+(1677     if\(p->state == SLEEPING\){) 148.5295 Tj
 0 -294.2942 Td
-(1678   c->ts.ss0 = SEG_KDATA << 3;) 148.5295 Tj
+(1678       getcallerpcs\(\(uint*\)p->context->ebp+2, pc\);) 235.8998 Tj
 0 -303.7875 Td
-(1679   if\(p\)) 52.4222 Tj
+(1679       for\(i=0; i<10 && pc[i] != 0; i++\)) 192.2146 Tj
 0 -313.2809 Td
-(1680     c->ts.esp0 = \(uint\)\(p->kstack + KSTACKSIZE\);) 231.5313 Tj
+(1680         cprintf\(" %p", pc[i]\);) 152.898 Tj
 0 -322.7743 Td
-(1681   else) 48.0537 Tj
+(1681     }) 43.6851 Tj
 0 -332.2676 Td
-(1682     c->ts.esp0 = 0xffffffff;) 144.161 Tj
+(1682     cprintf\("\\n"\);) 100.4758 Tj
 0 -341.761 Td
-(1683 ) 21.8426 Tj
+(1683   }) 34.9481 Tj
 0 -351.2543 Td
-(1684   c->gdt[0] = SEG_NULL;) 122.3184 Tj
+(1684 }) 26.2111 Tj
 0 -360.7477 Td
-(1685   c->gdt[SEG_KCODE] = SEG\(STA_X|STA_R, 0, 0x100000 + 64*1\
-024-1, 0\);) 314.533 Tj
+(1685 ) 21.8426 Tj
 0 -370.2411 Td
-(1686   c->gdt[SEG_KDATA] = SEG\(STA_W, 0, 0xffffffff, 0\);) 244.6368 Tj
+(1686 ) 21.8426 Tj
 0 -379.7344 Td
-(1687   c->gdt[SEG_TSS] = SEG16\(STS_T32A, \(uint\)&c->ts, sizeo\
-f\(c->ts\)-1, 0\);) 327.6386 Tj
+(1687 ) 21.8426 Tj
 0 -389.2278 Td
-(1688   c->gdt[SEG_TSS].s = 0;) 126.6869 Tj
+(1688 ) 21.8426 Tj
 0 -398.7211 Td
-(1689   if\(p\){) 56.7907 Tj
+(1689 ) 21.8426 Tj
 0 -408.2145 Td
-(1690     c->gdt[SEG_UCODE] = SEG\(STA_X|STA_R, \(uint\)p->mem, \
-p->sz-1, DPL_USER\);) 345.1126 Tj
+(1690 ) 21.8426 Tj
 0 -417.7079 Td
-(1691     c->gdt[SEG_UDATA] = SEG\(STA_W, \(uint\)p->mem, p->sz-\
-1, DPL_USER\);) 318.9016 Tj
+(1691 ) 21.8426 Tj
 0 -427.2012 Td
-(1692   } else {) 65.5277 Tj
+(1692 ) 21.8426 Tj
 0 -436.6946 Td
-(1693     c->gdt[SEG_UCODE] = SEG_NULL;) 166.0035 Tj
+(1693 ) 21.8426 Tj
 0 -446.1879 Td
-(1694     c->gdt[SEG_UDATA] = SEG_NULL;) 166.0035 Tj
+(1694 ) 21.8426 Tj
 0 -455.6813 Td
-(1695   }) 34.9481 Tj
+(1695 ) 21.8426 Tj
 0 -465.1747 Td
 (1696 ) 21.8426 Tj
 0 -474.668 Td
@@ -8284,6 +8347,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -8301,107 +8366,112 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/proc.c  Page 3) 161.635 Tj
+(Aug  8 01:04 2009  xv6/proc.c  Page 3) 161.635 Tj
 0 -28.4801 Td
-(1700   lgdt\(c->gdt, sizeof\(c->gdt\)\);) 157.2665 Tj
+(1700 // Set up CPU's kernel segment descriptors.) 209.6887 Tj
 0 -37.9735 Td
-(1701   ltr\(SEG_TSS << 3\);) 109.2129 Tj
+(1701 // Run once at boot time on each CPU.) 183.4776 Tj
 0 -47.4668 Td
-(1702   popcli\(\);) 69.8962 Tj
+(1702 void) 39.3166 Tj
 0 -56.9602 Td
-(1703 }) 26.2111 Tj
+(1703 ksegment\(void\)) 83.0018 Tj
 0 -66.4535 Td
-(1704 ) 21.8426 Tj
+(1704 {) 26.2111 Tj
 0 -75.9469 Td
-(1705 // Create a new process copying p as the parent.) 231.5313 Tj
+(1705   struct cpu *c1;) 96.1073 Tj
 0 -85.4403 Td
-(1706 // Sets up stack to return as if from system call.) 240.2683 Tj
+(1706 ) 21.8426 Tj
 0 -94.9336 Td
-(1707 // Caller must set state of returned proc to RUNNABLE.) 257.7424 Tj
+(1707   c1 = &cpus[cpu\(\)];) 109.2129 Tj
 0 -104.427 Td
-(1708 struct proc*) 74.2647 Tj
+(1708   c1->gdt[SEG_KCODE] = SEG\(STA_X|STA_R, 0, 0x100000 + 64*\
+1024-1, 0\);) 318.9016 Tj
 0 -113.9203 Td
-(1709 copyproc\(struct proc *p\)) 126.6869 Tj
+(1709   c1->gdt[SEG_KDATA] = SEG\(STA_W, 0, 0xffffffff, 0\);) 249.0053 Tj
 0 -123.4137 Td
-(1710 {) 26.2111 Tj
+(1710   c1->gdt[SEG_KCPU] = SEG\(STA_W, \(uint\)\(&c1->tls+1\), \
+0xffffffff, 0\);) 318.9016 Tj
 0 -132.9071 Td
-(1711   int i;) 56.7907 Tj
+(1711   lgdt\(c1->gdt, sizeof\(c1->gdt\)\);) 166.0035 Tj
 0 -142.4004 Td
-(1712   struct proc *np;) 100.4758 Tj
+(1712   loadfsgs\(SEG_KCPU << 3\);) 135.4239 Tj
 0 -151.8938 Td
 (1713 ) 21.8426 Tj
 0 -161.3871 Td
-(1714   // Allocate process.) 117.9499 Tj
+(1714   // Initialize cpu-local variables.) 179.1091 Tj
 0 -170.8805 Td
-(1715   if\(\(np = allocproc\(\)\) == 0\)) 148.5295 Tj
+(1715   c = c1;) 61.1592 Tj
 0 -180.3739 Td
-(1716     return 0;) 78.6333 Tj
+(1716   cp = 0;) 61.1592 Tj
 0 -189.8672 Td
-(1717 ) 21.8426 Tj
+(1717 }) 26.2111 Tj
 0 -199.3606 Td
-(1718   // Allocate kernel stack.) 139.7925 Tj
+(1718 ) 21.8426 Tj
 0 -208.8539 Td
-(1719   if\(\(np->kstack = kalloc\(KSTACKSIZE\)\) == 0\){) 218.4257 Tj
+(1719 // Set up CPU's segment descriptors and current process ta\
+sk state.) 314.533 Tj
 0 -218.3473 Td
-(1720     np->state = UNUSED;) 122.3184 Tj
+(1720 // If cp==0, set up for "idle" state for when scheduler\(\)\
+ is running.) 323.2701 Tj
 0 -227.8407 Td
-(1721     return 0;) 78.6333 Tj
+(1721 void) 39.3166 Tj
 0 -237.334 Td
-(1722   }) 34.9481 Tj
+(1722 usegment\(void\)) 83.0018 Tj
 0 -246.8274 Td
-(1723   np->tf = \(struct trapframe*\)\(np->kstack + KSTACKSIZE\)\
- - 1;) 283.9534 Tj
+(1723 {) 26.2111 Tj
 0 -256.3207 Td
-(1724 ) 21.8426 Tj
+(1724   pushcli\(\);) 74.2647 Tj
 0 -265.8141 Td
-(1725   if\(p\){  // Copy process state from p.) 192.2146 Tj
+(1725   c->gdt[SEG_UCODE] = SEG\(STA_X|STA_R, \(uint\)cp->mem, c\
+p->sz-1, DPL_USER\);) 345.1126 Tj
 0 -275.3075 Td
-(1726     np->parent = p;) 104.8443 Tj
+(1726   c->gdt[SEG_UDATA] = SEG\(STA_W, \(uint\)cp->mem, cp->sz-\
+1, DPL_USER\);) 318.9016 Tj
 0 -284.8008 Td
-(1727     memmove\(np->tf, p->tf, sizeof\(*np->tf\)\);) 214.0572 Tj
+(1727   c->gdt[SEG_TSS] = SEG16\(STS_T32A, \(uint\)&c->ts, sizeo\
+f\(c->ts\)-1, 0\);) 327.6386 Tj
 0 -294.2942 Td
-(1728 ) 21.8426 Tj
+(1728   c->gdt[SEG_TSS].s = 0;) 126.6869 Tj
 0 -303.7875 Td
-(1729     np->sz = p->sz;) 104.8443 Tj
+(1729   c->ts.ss0 = SEG_KDATA << 3;) 148.5295 Tj
 0 -313.2809 Td
-(1730     if\(\(np->mem = kalloc\(np->sz\)\) == 0\){) 196.5831 Tj
+(1730   c->ts.esp0 = \(uint\)cp->kstack + KSTACKSIZE;) 218.4257 Tj
 0 -322.7743 Td
-(1731       kfree\(np->kstack, KSTACKSIZE\);) 179.1091 Tj
+(1731   ltr\(SEG_TSS << 3\);) 109.2129 Tj
 0 -332.2676 Td
-(1732       np->kstack = 0;) 113.5814 Tj
+(1732   popcli\(\);) 69.8962 Tj
 0 -341.761 Td
-(1733       np->state = UNUSED;) 131.0554 Tj
+(1733 }) 26.2111 Tj
 0 -351.2543 Td
-(1734       np->parent = 0;) 113.5814 Tj
+(1734 ) 21.8426 Tj
 0 -360.7477 Td
-(1735       return 0;) 87.3703 Tj
+(1735 ) 21.8426 Tj
 0 -370.2411 Td
-(1736     }) 43.6851 Tj
+(1736 ) 21.8426 Tj
 0 -379.7344 Td
-(1737     memmove\(np->mem, p->mem, np->sz\);) 183.4776 Tj
+(1737 ) 21.8426 Tj
 0 -389.2278 Td
 (1738 ) 21.8426 Tj
 0 -398.7211 Td
-(1739     for\(i = 0; i < NOFILE; i++\)) 157.2665 Tj
+(1739 ) 21.8426 Tj
 0 -408.2145 Td
-(1740       if\(p->ofile[i]\)) 113.5814 Tj
+(1740 ) 21.8426 Tj
 0 -417.7079 Td
-(1741         np->ofile[i] = filedup\(p->ofile[i]\);) 214.0572 Tj
+(1741 ) 21.8426 Tj
 0 -427.2012 Td
-(1742     np->cwd = idup\(p->cwd\);) 139.7925 Tj
+(1742 ) 21.8426 Tj
 0 -436.6946 Td
-(1743   }) 34.9481 Tj
+(1743 ) 21.8426 Tj
 0 -446.1879 Td
 (1744 ) 21.8426 Tj
 0 -455.6813 Td
-(1745   // Set up new context to start executing at forkret \(se\
-e below\).) 310.1645 Tj
+(1745 ) 21.8426 Tj
 0 -465.1747 Td
-(1746   memset\(&np->context, 0, sizeof\(np->context\)\);) 227.1628 Tj
+(1746 ) 21.8426 Tj
 0 -474.668 Td
-(1747   np->context.eip = \(uint\)forkret;) 170.3721 Tj
+(1747 ) 21.8426 Tj
 0 -484.1614 Td
-(1748   np->context.esp = \(uint\)np->tf;) 166.0035 Tj
+(1748 ) 21.8426 Tj
 0 -493.6547 Td
 (1749 ) 21.8426 Tj
 0 -522.1348 Td
@@ -8422,107 +8492,103 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/proc.c  Page 4) 161.635 Tj
+(Aug  8 01:04 2009  xv6/proc.c  Page 4) 161.635 Tj
 0 -28.4801 Td
-(1750   // Clear %eax so that fork system call returns 0 in chil\
-d.) 283.9534 Tj
+(1750 // Look in the process table for an UNUSED proc.) 231.5313 Tj
 0 -37.9735 Td
-(1751   np->tf->eax = 0;) 100.4758 Tj
+(1751 // If found, change state to EMBRYO and return it.) 240.2683 Tj
 0 -47.4668 Td
-(1752   return np;) 74.2647 Tj
+(1752 // Otherwise return 0.) 117.9499 Tj
 0 -56.9602 Td
-(1753 }) 26.2111 Tj
+(1753 static struct proc*) 104.8443 Tj
 0 -66.4535 Td
-(1754 ) 21.8426 Tj
+(1754 allocproc\(void\)) 87.3703 Tj
 0 -75.9469 Td
-(1755 // Set up first user process.) 148.5295 Tj
+(1755 {) 26.2111 Tj
 0 -85.4403 Td
-(1756 void) 39.3166 Tj
+(1756   struct proc *p;) 96.1073 Tj
 0 -94.9336 Td
-(1757 userinit\(void\)) 83.0018 Tj
+(1757   char *sp;) 69.8962 Tj
 0 -104.427 Td
-(1758 {) 26.2111 Tj
+(1758 ) 21.8426 Tj
 0 -113.9203 Td
-(1759   struct proc *p;) 96.1073 Tj
+(1759   acquire\(&ptable.lock\);) 126.6869 Tj
 0 -123.4137 Td
-(1760   extern uchar _binary_initcode_start[], _binary_initcode_\
-size[];) 305.796 Tj
+(1760   for\(p = ptable.proc; p < &ptable.proc[NPROC]; p++\)) 249.0053 Tj
 0 -132.9071 Td
-(1761 ) 21.8426 Tj
+(1761     if\(p->state == UNUSED\)) 135.4239 Tj
 0 -142.4004 Td
-(1762   p = copyproc\(0\);) 100.4758 Tj
+(1762       goto found;) 96.1073 Tj
 0 -151.8938 Td
-(1763   p->sz = PAGE;) 87.3703 Tj
+(1763   release\(&ptable.lock\);) 126.6869 Tj
 0 -161.3871 Td
-(1764   p->mem = kalloc\(p->sz\);) 131.0554 Tj
+(1764   return 0;) 69.8962 Tj
 0 -170.8805 Td
-(1765   p->cwd = namei\("/"\);) 117.9499 Tj
+(1765 ) 21.8426 Tj
 0 -180.3739 Td
-(1766   memset\(p->tf, 0, sizeof\(*p->tf\)\);) 174.7406 Tj
+(1766 found:) 48.0537 Tj
 0 -189.8672 Td
-(1767   p->tf->cs = \(SEG_UCODE << 3\) | DPL_USER;) 205.3202 Tj
+(1767   p->state = EMBRYO;) 109.2129 Tj
 0 -199.3606 Td
-(1768   p->tf->ds = \(SEG_UDATA << 3\) | DPL_USER;) 205.3202 Tj
+(1768   p->pid = nextpid++;) 113.5814 Tj
 0 -208.8539 Td
-(1769   p->tf->es = p->tf->ds;) 126.6869 Tj
+(1769   release\(&ptable.lock\);) 126.6869 Tj
 0 -218.3473 Td
-(1770   p->tf->ss = p->tf->ds;) 126.6869 Tj
+(1770 ) 21.8426 Tj
 0 -227.8407 Td
-(1771   p->tf->eflags = FL_IF;) 126.6869 Tj
+(1771   // Allocate kernel stack if necessary.) 196.5831 Tj
 0 -237.334 Td
-(1772   p->tf->esp = p->sz;) 113.5814 Tj
+(1772   if\(\(p->kstack = kalloc\(KSTACKSIZE\)\) == 0\){) 214.0572 Tj
 0 -246.8274 Td
-(1773 ) 21.8426 Tj
+(1773     p->state = UNUSED;) 117.9499 Tj
 0 -256.3207 Td
-(1774   // Make return address readable; needed for some gcc.) 262.1109 Tj
+(1774     return 0;) 78.6333 Tj
 0 -265.8141 Td
-(1775   p->tf->esp -= 4;) 100.4758 Tj
+(1775   }) 34.9481 Tj
 0 -275.3075 Td
-(1776   *\(uint*\)\(p->mem + p->tf->esp\) = 0xefefefef;) 218.4257 Tj
+(1776   sp = p->kstack + KSTACKSIZE;) 152.898 Tj
 0 -284.8008 Td
 (1777 ) 21.8426 Tj
 0 -294.2942 Td
-(1778   // On entry to user space, start executing at beginning \
-of initcode.S.) 336.3756 Tj
+(1778   // Leave room for trap frame.) 157.2665 Tj
 0 -303.7875 Td
-(1779   p->tf->eip = 0;) 96.1073 Tj
+(1779   sp -= sizeof *p->tf;) 117.9499 Tj
 0 -313.2809 Td
-(1780   memmove\(p->mem, _binary_initcode_start, \(int\)_binary_\
-initcode_size\);) 327.6386 Tj
+(1780   p->tf = \(struct trapframe*\)sp;) 161.635 Tj
 0 -322.7743 Td
-(1781   safestrcpy\(p->name, "initcode", sizeof\(p->name\)\);) 244.6368 Tj
+(1781 ) 21.8426 Tj
 0 -332.2676 Td
-(1782   p->state = RUNNABLE;) 117.9499 Tj
+(1782   // Set up new context to start executing at forkret,) 257.7424 Tj
 0 -341.761 Td
-(1783 ) 21.8426 Tj
+(1783   // which returns to trapret \(see below\).) 205.3202 Tj
 0 -351.2543 Td
-(1784   initproc = p;) 87.3703 Tj
+(1784   sp -= 4;) 65.5277 Tj
 0 -360.7477 Td
-(1785 }) 26.2111 Tj
+(1785   *\(uint*\)sp = \(uint\)trapret;) 148.5295 Tj
 0 -370.2411 Td
 (1786 ) 21.8426 Tj
 0 -379.7344 Td
-(1787 // Return currently running process.) 179.1091 Tj
+(1787   sp -= sizeof *p->context;) 139.7925 Tj
 0 -389.2278 Td
-(1788 struct proc*) 74.2647 Tj
+(1788   p->context = \(struct context*\)sp;) 174.7406 Tj
 0 -398.7211 Td
-(1789 curproc\(void\)) 78.6333 Tj
+(1789   memset\(p->context, 0, sizeof *p->context\);) 214.0572 Tj
 0 -408.2145 Td
-(1790 {) 26.2111 Tj
+(1790   p->context->eip = \(uint\)forkret;) 170.3721 Tj
 0 -417.7079 Td
-(1791   struct proc *p;) 96.1073 Tj
+(1791   return p;) 69.8962 Tj
 0 -427.2012 Td
-(1792 ) 21.8426 Tj
+(1792 }) 26.2111 Tj
 0 -436.6946 Td
-(1793   pushcli\(\);) 74.2647 Tj
+(1793 ) 21.8426 Tj
 0 -446.1879 Td
-(1794   p = cpus[cpu\(\)].curproc;) 135.4239 Tj
+(1794 ) 21.8426 Tj
 0 -455.6813 Td
-(1795   popcli\(\);) 69.8962 Tj
+(1795 ) 21.8426 Tj
 0 -465.1747 Td
-(1796   return p;) 69.8962 Tj
+(1796 ) 21.8426 Tj
 0 -474.668 Td
-(1797 }) 26.2111 Tj
+(1797 ) 21.8426 Tj
 0 -484.1614 Td
 (1798 ) 21.8426 Tj
 0 -493.6547 Td
@@ -8557,6 +8623,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -8574,107 +8642,107 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/proc.c  Page 5) 161.635 Tj
+(Aug  8 01:04 2009  xv6/proc.c  Page 5) 161.635 Tj
 0 -28.4801 Td
-(1800 // Per-CPU process scheduler.) 148.5295 Tj
+(1800 // Set up first user process.) 148.5295 Tj
 0 -37.9735 Td
-(1801 // Each CPU calls scheduler\(\) after setting itself up.) 257.7424 Tj
+(1801 void) 39.3166 Tj
 0 -47.4668 Td
-(1802 // Scheduler never returns.  It loops, doing:) 218.4257 Tj
+(1802 userinit\(void\)) 83.0018 Tj
 0 -56.9602 Td
-(1803 //  - choose a process to run) 148.5295 Tj
+(1803 {) 26.2111 Tj
 0 -66.4535 Td
-(1804 //  - swtch to start running that process) 200.9517 Tj
+(1804   struct proc *p;) 96.1073 Tj
 0 -75.9469 Td
-(1805 //  - eventually that process transfers control) 227.1628 Tj
+(1805   extern char _binary_initcode_start[], _binary_initcode_s\
+ize[];) 301.4275 Tj
 0 -85.4403 Td
-(1806 //      via swtch back to the scheduler.) 196.5831 Tj
+(1806 ) 21.8426 Tj
 0 -94.9336 Td
-(1807 void) 39.3166 Tj
+(1807   p = allocproc\(\);) 100.4758 Tj
 0 -104.427 Td
-(1808 scheduler\(void\)) 87.3703 Tj
+(1808   initproc = p;) 87.3703 Tj
 0 -113.9203 Td
-(1809 {) 26.2111 Tj
+(1809 ) 21.8426 Tj
 0 -123.4137 Td
-(1810   struct proc *p;) 96.1073 Tj
+(1810   // Initialize memory from initcode.S) 187.8461 Tj
 0 -132.9071 Td
-(1811   struct cpu *c;) 91.7388 Tj
+(1811   p->sz = PAGE;) 87.3703 Tj
 0 -142.4004 Td
-(1812   int i;) 56.7907 Tj
+(1812   p->mem = kalloc\(p->sz\);) 131.0554 Tj
 0 -151.8938 Td
-(1813 ) 21.8426 Tj
+(1813   memset\(p->mem, 0, p->sz\);) 139.7925 Tj
 0 -161.3871 Td
-(1814   c = &cpus[cpu\(\)];) 104.8443 Tj
+(1814   memmove\(p->mem, _binary_initcode_start, \(int\)_binary_\
+initcode_size\);) 327.6386 Tj
 0 -170.8805 Td
-(1815   for\(;;\){) 65.5277 Tj
+(1815 ) 21.8426 Tj
 0 -180.3739 Td
-(1816     // Enable interrupts on this processor.) 209.6887 Tj
+(1816   memset\(p->tf, 0, sizeof\(*p->tf\)\);) 174.7406 Tj
 0 -189.8672 Td
-(1817     sti\(\);) 65.5277 Tj
+(1817   p->tf->cs = \(SEG_UCODE << 3\) | DPL_USER;) 205.3202 Tj
 0 -199.3606 Td
-(1818 ) 21.8426 Tj
+(1818   p->tf->ds = \(SEG_UDATA << 3\) | DPL_USER;) 205.3202 Tj
 0 -208.8539 Td
-(1819     // Loop over process table looking for process to run.) 275.2164 Tj
+(1819   p->tf->es = p->tf->ds;) 126.6869 Tj
 0 -218.3473 Td
-(1820     acquire\(&proc_table_lock\);) 152.898 Tj
+(1820   p->tf->ss = p->tf->ds;) 126.6869 Tj
 0 -227.8407 Td
-(1821     for\(i = 0; i < NPROC; i++\){) 157.2665 Tj
+(1821   p->tf->eflags = FL_IF;) 126.6869 Tj
 0 -237.334 Td
-(1822       p = &proc[i];) 104.8443 Tj
+(1822   p->tf->esp = p->sz;) 113.5814 Tj
 0 -246.8274 Td
-(1823       if\(p->state != RUNNABLE\)) 152.898 Tj
+(1823   p->tf->eip = 0;  // beginning of initcode.S) 218.4257 Tj
 0 -256.3207 Td
-(1824         continue;) 96.1073 Tj
+(1824 ) 21.8426 Tj
 0 -265.8141 Td
-(1825 ) 21.8426 Tj
+(1825   safestrcpy\(p->name, "initcode", sizeof\(p->name\)\);) 244.6368 Tj
 0 -275.3075 Td
-(1826       // Switch to chosen process.  It is the process's jo\
-b) 279.5849 Tj
+(1826   p->cwd = namei\("/"\);) 117.9499 Tj
 0 -284.8008 Td
-(1827       // to release proc_table_lock and then reacquire it) 270.8479 Tj
+(1827 ) 21.8426 Tj
 0 -294.2942 Td
-(1828       // before jumping back to us.) 174.7406 Tj
+(1828   p->state = RUNNABLE;) 117.9499 Tj
 0 -303.7875 Td
-(1829       c->curproc = p;) 113.5814 Tj
+(1829 }) 26.2111 Tj
 0 -313.2809 Td
-(1830       setupsegs\(p\);) 104.8443 Tj
+(1830 ) 21.8426 Tj
 0 -322.7743 Td
-(1831       p->state = RUNNING;) 131.0554 Tj
+(1831 // Grow current process's memory by n bytes.) 214.0572 Tj
 0 -332.2676 Td
-(1832       swtch\(&c->context, &p->context\);) 187.8461 Tj
+(1832 // Return 0 on success, -1 on failure.) 187.8461 Tj
 0 -341.761 Td
-(1833 ) 21.8426 Tj
+(1833 int) 34.9481 Tj
 0 -351.2543 Td
-(1834       // Process is done running for now.) 200.9517 Tj
+(1834 growproc\(int n\)) 87.3703 Tj
 0 -360.7477 Td
-(1835       // It should have changed its p->state before coming\
- back.) 301.4275 Tj
+(1835 {) 26.2111 Tj
 0 -370.2411 Td
-(1836       c->curproc = 0;) 113.5814 Tj
+(1836   char *newmem;) 87.3703 Tj
 0 -379.7344 Td
-(1837       setupsegs\(0\);) 104.8443 Tj
+(1837 ) 21.8426 Tj
 0 -389.2278 Td
-(1838     }) 43.6851 Tj
+(1838   newmem = kalloc\(cp->sz + n\);) 152.898 Tj
 0 -398.7211 Td
-(1839     release\(&proc_table_lock\);) 152.898 Tj
+(1839   if\(newmem == 0\)) 96.1073 Tj
 0 -408.2145 Td
-(1840 ) 21.8426 Tj
+(1840     return -1;) 83.0018 Tj
 0 -417.7079 Td
-(1841   }) 34.9481 Tj
+(1841   memmove\(newmem, cp->mem, cp->sz\);) 174.7406 Tj
 0 -427.2012 Td
-(1842 }) 26.2111 Tj
+(1842   memset\(newmem + cp->sz, 0, n\);) 161.635 Tj
 0 -436.6946 Td
-(1843 ) 21.8426 Tj
+(1843   kfree\(cp->mem, cp->sz\);) 131.0554 Tj
 0 -446.1879 Td
-(1844 ) 21.8426 Tj
+(1844   cp->mem = newmem;) 104.8443 Tj
 0 -455.6813 Td
-(1845 ) 21.8426 Tj
+(1845   cp->sz += n;) 83.0018 Tj
 0 -465.1747 Td
-(1846 ) 21.8426 Tj
+(1846   usegment\(\);) 78.6333 Tj
 0 -474.668 Td
-(1847 ) 21.8426 Tj
+(1847   return 0;) 69.8962 Tj
 0 -484.1614 Td
-(1848 ) 21.8426 Tj
+(1848 }) 26.2111 Tj
 0 -493.6547 Td
 (1849 ) 21.8426 Tj
 0 -522.1348 Td
@@ -8695,81 +8763,81 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/proc.c  Page 6) 161.635 Tj
+(Aug  8 01:04 2009  xv6/proc.c  Page 6) 161.635 Tj
 0 -28.4801 Td
-(1850 // Enter scheduler.  Must already hold proc_table_lock) 257.7424 Tj
+(1850 // Create a new process copying p as the parent.) 231.5313 Tj
 0 -37.9735 Td
-(1851 // and have changed curproc[cpu\(\)]->state.) 205.3202 Tj
+(1851 // Sets up stack to return as if from system call.) 240.2683 Tj
 0 -47.4668 Td
-(1852 void) 39.3166 Tj
+(1852 // Caller must set state of returned proc to RUNNABLE.) 257.7424 Tj
 0 -56.9602 Td
-(1853 sched\(void\)) 69.8962 Tj
+(1853 int) 34.9481 Tj
 0 -66.4535 Td
-(1854 {) 26.2111 Tj
+(1854 fork\(void\)) 65.5277 Tj
 0 -75.9469 Td
-(1855   if\(read_eflags\(\)&FL_IF\)) 131.0554 Tj
+(1855 {) 26.2111 Tj
 0 -85.4403 Td
-(1856     panic\("sched interruptible"\);) 166.0035 Tj
+(1856   int i, pid;) 78.6333 Tj
 0 -94.9336 Td
-(1857   if\(cp->state == RUNNING\)) 135.4239 Tj
+(1857   struct proc *np;) 100.4758 Tj
 0 -104.427 Td
-(1858     panic\("sched running"\);) 139.7925 Tj
+(1858 ) 21.8426 Tj
 0 -113.9203 Td
-(1859   if\(!holding\(&proc_table_lock\)\)) 161.635 Tj
+(1859   // Allocate process.) 117.9499 Tj
 0 -123.4137 Td
-(1860     panic\("sched proc_table_lock"\);) 174.7406 Tj
+(1860   if\(\(np = allocproc\(\)\) == 0\)) 148.5295 Tj
 0 -132.9071 Td
-(1861   if\(cpus[cpu\(\)].ncli != 1\)) 139.7925 Tj
+(1861     return -1;) 83.0018 Tj
 0 -142.4004 Td
-(1862     panic\("sched locks"\);) 131.0554 Tj
+(1862 ) 21.8426 Tj
 0 -151.8938 Td
-(1863 ) 21.8426 Tj
+(1863   // Copy process state from p.) 157.2665 Tj
 0 -161.3871 Td
-(1864   swtch\(&cp->context, &cpus[cpu\(\)].context\);) 214.0572 Tj
+(1864   np->sz = cp->sz;) 100.4758 Tj
 0 -170.8805 Td
-(1865 }) 26.2111 Tj
+(1865   if\(\(np->mem = kalloc\(np->sz\)\) == 0\){) 187.8461 Tj
 0 -180.3739 Td
-(1866 ) 21.8426 Tj
+(1866     kfree\(np->kstack, KSTACKSIZE\);) 170.3721 Tj
 0 -189.8672 Td
-(1867 // Give up the CPU for one scheduling round.) 214.0572 Tj
+(1867     np->kstack = 0;) 104.8443 Tj
 0 -199.3606 Td
-(1868 void) 39.3166 Tj
+(1868     np->state = UNUSED;) 122.3184 Tj
 0 -208.8539 Td
-(1869 yield\(void\)) 69.8962 Tj
+(1869     return -1;) 83.0018 Tj
 0 -218.3473 Td
-(1870 {) 26.2111 Tj
+(1870   }) 34.9481 Tj
 0 -227.8407 Td
-(1871   acquire\(&proc_table_lock\);) 144.161 Tj
+(1871   memmove\(np->mem, cp->mem, np->sz\);) 179.1091 Tj
 0 -237.334 Td
-(1872   cp->state = RUNNABLE;) 122.3184 Tj
+(1872   np->parent = cp;) 100.4758 Tj
 0 -246.8274 Td
-(1873   sched\(\);) 65.5277 Tj
+(1873   *np->tf = *cp->tf;) 109.2129 Tj
 0 -256.3207 Td
-(1874   release\(&proc_table_lock\);) 144.161 Tj
+(1874 ) 21.8426 Tj
 0 -265.8141 Td
-(1875 }) 26.2111 Tj
+(1875   // Clear %eax so that fork returns 0 in the child.) 249.0053 Tj
 0 -275.3075 Td
-(1876 ) 21.8426 Tj
+(1876   np->tf->eax = 0;) 100.4758 Tj
 0 -284.8008 Td
-(1877 // A fork child's very first scheduling by scheduler\(\)) 257.7424 Tj
+(1877 ) 21.8426 Tj
 0 -294.2942 Td
-(1878 // will swtch here.  "Return" to user space.) 214.0572 Tj
+(1878   for\(i = 0; i < NOFILE; i++\)) 148.5295 Tj
 0 -303.7875 Td
-(1879 void) 39.3166 Tj
+(1879     if\(cp->ofile[i]\)) 109.2129 Tj
 0 -313.2809 Td
-(1880 forkret\(void\)) 78.6333 Tj
+(1880       np->ofile[i] = filedup\(cp->ofile[i]\);) 209.6887 Tj
 0 -322.7743 Td
-(1881 {) 26.2111 Tj
+(1881   np->cwd = idup\(cp->cwd\);) 135.4239 Tj
 0 -332.2676 Td
-(1882   // Still holding proc_table_lock from scheduler.) 240.2683 Tj
+(1882 ) 21.8426 Tj
 0 -341.761 Td
-(1883   release\(&proc_table_lock\);) 144.161 Tj
+(1883   pid = np->pid;) 91.7388 Tj
 0 -351.2543 Td
-(1884 ) 21.8426 Tj
+(1884   np->state = RUNNABLE;) 122.3184 Tj
 0 -360.7477 Td
-(1885   // Jump into assembly, never to return.) 200.9517 Tj
+(1885 ) 21.8426 Tj
 0 -370.2411 Td
-(1886   forkret1\(cp->tf\);) 104.8443 Tj
+(1886   return pid;) 78.6333 Tj
 0 -379.7344 Td
 (1887 }) 26.2111 Tj
 0 -389.2278 Td
@@ -8826,6 +8894,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -8843,83 +8913,85 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/proc.c  Page 7) 161.635 Tj
+(Aug  8 01:04 2009  xv6/proc.c  Page 7) 161.635 Tj
 0 -28.4801 Td
-(1900 // Atomically release lock and sleep on chan.) 218.4257 Tj
+(1900 // Per-CPU process scheduler.) 148.5295 Tj
 0 -37.9735 Td
-(1901 // Reacquires lock when reawakened.) 174.7406 Tj
+(1901 // Each CPU calls scheduler\(\) after setting itself up.) 257.7424 Tj
 0 -47.4668 Td
-(1902 void) 39.3166 Tj
+(1902 // Scheduler never returns.  It loops, doing:) 218.4257 Tj
 0 -56.9602 Td
-(1903 sleep\(void *chan, struct spinlock *lk\)) 187.8461 Tj
+(1903 //  - choose a process to run) 148.5295 Tj
 0 -66.4535 Td
-(1904 {) 26.2111 Tj
+(1904 //  - swtch to start running that process) 200.9517 Tj
 0 -75.9469 Td
-(1905   if\(cp == 0\)) 78.6333 Tj
+(1905 //  - eventually that process transfers control) 227.1628 Tj
 0 -85.4403 Td
-(1906     panic\("sleep"\);) 104.8443 Tj
+(1906 //      via swtch back to the scheduler.) 196.5831 Tj
 0 -94.9336 Td
-(1907 ) 21.8426 Tj
+(1907 void) 39.3166 Tj
 0 -104.427 Td
-(1908   if\(lk == 0\)) 78.6333 Tj
+(1908 scheduler\(void\)) 87.3703 Tj
 0 -113.9203 Td
-(1909     panic\("sleep without lk"\);) 152.898 Tj
+(1909 {) 26.2111 Tj
 0 -123.4137 Td
-(1910 ) 21.8426 Tj
+(1910   struct proc *p;) 96.1073 Tj
 0 -132.9071 Td
-(1911   // Must acquire proc_table_lock in order to) 218.4257 Tj
+(1911 ) 21.8426 Tj
 0 -142.4004 Td
-(1912   // change p->state and then call sched.) 200.9517 Tj
+(1912   for\(;;\){) 65.5277 Tj
 0 -151.8938 Td
-(1913   // Once we hold proc_table_lock, we can be) 214.0572 Tj
+(1913     // Enable interrupts on this processor.) 209.6887 Tj
 0 -161.3871 Td
-(1914   // guaranteed that we won't miss any wakeup) 218.4257 Tj
+(1914     sti\(\);) 65.5277 Tj
 0 -170.8805 Td
-(1915   // \(wakeup runs with proc_table_lock locked\),) 227.1628 Tj
+(1915 ) 21.8426 Tj
 0 -180.3739 Td
-(1916   // so it's okay to release lk.) 161.635 Tj
+(1916     // Loop over process table looking for process to run.) 275.2164 Tj
 0 -189.8672 Td
-(1917   if\(lk != &proc_table_lock\){) 148.5295 Tj
+(1917     acquire\(&ptable.lock\);) 135.4239 Tj
 0 -199.3606 Td
-(1918     acquire\(&proc_table_lock\);) 152.898 Tj
+(1918     for\(p = ptable.proc; p < &ptable.proc[NPROC]; p++\){) 262.1109 Tj
 0 -208.8539 Td
-(1919     release\(lk\);) 91.7388 Tj
+(1919       if\(p->state != RUNNABLE\)) 152.898 Tj
 0 -218.3473 Td
-(1920   }) 34.9481 Tj
+(1920         continue;) 96.1073 Tj
 0 -227.8407 Td
 (1921 ) 21.8426 Tj
 0 -237.334 Td
-(1922   // Go to sleep.) 96.1073 Tj
+(1922       // Switch to chosen process.  It is the process's jo\
+b) 279.5849 Tj
 0 -246.8274 Td
-(1923   cp->chan = chan;) 100.4758 Tj
+(1923       // to release ptable.lock and then reacquire it) 253.3738 Tj
 0 -256.3207 Td
-(1924   cp->state = SLEEPING;) 122.3184 Tj
+(1924       // before jumping back to us.) 174.7406 Tj
 0 -265.8141 Td
-(1925   sched\(\);) 65.5277 Tj
+(1925       cp = p;) 78.6333 Tj
 0 -275.3075 Td
-(1926 ) 21.8426 Tj
+(1926       usegment\(\);) 96.1073 Tj
 0 -284.8008 Td
-(1927   // Tidy up.) 78.6333 Tj
+(1927       p->state = RUNNING;) 131.0554 Tj
 0 -294.2942 Td
-(1928   cp->chan = 0;) 87.3703 Tj
+(1928       swtch\(&c->context, p->context\);) 183.4776 Tj
 0 -303.7875 Td
 (1929 ) 21.8426 Tj
 0 -313.2809 Td
-(1930   // Reacquire original lock.) 148.5295 Tj
+(1930       // Process is done running for now.) 200.9517 Tj
 0 -322.7743 Td
-(1931   if\(lk != &proc_table_lock\){) 148.5295 Tj
+(1931       // It should have changed its p->state before coming\
+ back.) 301.4275 Tj
 0 -332.2676 Td
-(1932     release\(&proc_table_lock\);) 152.898 Tj
+(1932       cp = 0;) 78.6333 Tj
 0 -341.761 Td
-(1933     acquire\(lk\);) 91.7388 Tj
+(1933     }) 43.6851 Tj
 0 -351.2543 Td
-(1934   }) 34.9481 Tj
+(1934     release\(&ptable.lock\);) 135.4239 Tj
 0 -360.7477 Td
-(1935 }) 26.2111 Tj
+(1935 ) 21.8426 Tj
 0 -370.2411 Td
-(1936 ) 21.8426 Tj
+(1936   }) 34.9481 Tj
 0 -379.7344 Td
-(1937 ) 21.8426 Tj
+(1937 }) 26.2111 Tj
 0 -389.2278 Td
 (1938 ) 21.8426 Tj
 0 -398.7211 Td
@@ -8962,95 +9034,96 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/proc.c  Page 8) 161.635 Tj
+(Aug  8 01:04 2009  xv6/proc.c  Page 8) 161.635 Tj
 0 -28.4801 Td
-(1950 // Wake up all processes sleeping on chan.) 205.3202 Tj
+(1950 // Enter scheduler.  Must hold only ptable.lock) 227.1628 Tj
 0 -37.9735 Td
-(1951 // Proc_table_lock must be held.) 161.635 Tj
+(1951 // and have changed cp->state.) 152.898 Tj
 0 -47.4668 Td
-(1952 static void) 69.8962 Tj
+(1952 void) 39.3166 Tj
 0 -56.9602 Td
-(1953 wakeup1\(void *chan\)) 104.8443 Tj
+(1953 sched\(void\)) 69.8962 Tj
 0 -66.4535 Td
 (1954 {) 26.2111 Tj
 0 -75.9469 Td
-(1955   struct proc *p;) 96.1073 Tj
+(1955   int intena;) 78.6333 Tj
 0 -85.4403 Td
 (1956 ) 21.8426 Tj
 0 -94.9336 Td
-(1957   for\(p = proc; p < &proc[NPROC]; p++\)) 187.8461 Tj
+(1957   if\(!holding\(&ptable.lock\)\)) 144.161 Tj
 0 -104.427 Td
-(1958     if\(p->state == SLEEPING && p->chan == chan\)) 227.1628 Tj
+(1958     panic\("sched ptable.lock"\);) 157.2665 Tj
 0 -113.9203 Td
-(1959       p->state = RUNNABLE;) 135.4239 Tj
+(1959   if\(c->ncli != 1\)) 100.4758 Tj
 0 -123.4137 Td
-(1960 }) 26.2111 Tj
+(1960     panic\("sched locks"\);) 131.0554 Tj
 0 -132.9071 Td
-(1961 ) 21.8426 Tj
+(1961   if\(cp->state == RUNNING\)) 135.4239 Tj
 0 -142.4004 Td
-(1962 // Wake up all processes sleeping on chan.) 205.3202 Tj
+(1962     panic\("sched running"\);) 139.7925 Tj
 0 -151.8938 Td
-(1963 // Proc_table_lock is acquired and released.) 214.0572 Tj
+(1963   if\(readeflags\(\)&FL_IF\)) 126.6869 Tj
 0 -161.3871 Td
-(1964 void) 39.3166 Tj
+(1964     panic\("sched interruptible"\);) 166.0035 Tj
 0 -170.8805 Td
-(1965 wakeup\(void *chan\)) 100.4758 Tj
+(1965 ) 21.8426 Tj
 0 -180.3739 Td
-(1966 {) 26.2111 Tj
+(1966   intena = c->intena;) 113.5814 Tj
 0 -189.8672 Td
-(1967   acquire\(&proc_table_lock\);) 144.161 Tj
+(1967   swtch\(&cp->context, c->context\);) 170.3721 Tj
 0 -199.3606 Td
-(1968   wakeup1\(chan\);) 91.7388 Tj
+(1968   c->intena = intena;) 113.5814 Tj
 0 -208.8539 Td
-(1969   release\(&proc_table_lock\);) 144.161 Tj
+(1969 }) 26.2111 Tj
 0 -218.3473 Td
-(1970 }) 26.2111 Tj
+(1970 ) 21.8426 Tj
 0 -227.8407 Td
-(1971 ) 21.8426 Tj
+(1971 // Give up the CPU for one scheduling round.) 214.0572 Tj
 0 -237.334 Td
-(1972 // Kill the process with the given pid.) 192.2146 Tj
+(1972 void) 39.3166 Tj
 0 -246.8274 Td
-(1973 // Process won't actually exit until it returns) 227.1628 Tj
+(1973 yield\(void\)) 69.8962 Tj
 0 -256.3207 Td
-(1974 // to user space \(see trap in trap.c\).) 187.8461 Tj
+(1974 {) 26.2111 Tj
 0 -265.8141 Td
-(1975 int) 34.9481 Tj
+(1975   acquire\(&ptable.lock\);  ) 135.4239 Tj
 0 -275.3075 Td
-(1976 kill\(int pid\)) 78.6333 Tj
+(1976   cp->state = RUNNABLE;) 122.3184 Tj
 0 -284.8008 Td
-(1977 {) 26.2111 Tj
+(1977   sched\(\);) 65.5277 Tj
 0 -294.2942 Td
-(1978   struct proc *p;) 96.1073 Tj
+(1978   release\(&ptable.lock\);) 126.6869 Tj
 0 -303.7875 Td
-(1979 ) 21.8426 Tj
+(1979 }) 26.2111 Tj
 0 -313.2809 Td
-(1980   acquire\(&proc_table_lock\);) 144.161 Tj
+(1980 ) 21.8426 Tj
 0 -322.7743 Td
-(1981   for\(p = proc; p < &proc[NPROC]; p++\){) 192.2146 Tj
+(1981 // A fork child's very first scheduling by scheduler\(\)) 257.7424 Tj
 0 -332.2676 Td
-(1982     if\(p->pid == pid\){) 117.9499 Tj
+(1982 // will swtch here.  "Return" to user space.) 214.0572 Tj
 0 -341.761 Td
-(1983       p->killed = 1;) 109.2129 Tj
+(1983 void) 39.3166 Tj
 0 -351.2543 Td
-(1984       // Wake process from sleep if necessary.) 222.7942 Tj
+(1984 forkret\(void\)) 78.6333 Tj
 0 -360.7477 Td
-(1985       if\(p->state == SLEEPING\)) 152.898 Tj
+(1985 {) 26.2111 Tj
 0 -370.2411 Td
-(1986         p->state = RUNNABLE;) 144.161 Tj
+(1986   // Still holding ptable.lock from scheduler.) 222.7942 Tj
 0 -379.7344 Td
-(1987       release\(&proc_table_lock\);) 161.635 Tj
+(1987   release\(&ptable.lock\);) 126.6869 Tj
 0 -389.2278 Td
-(1988       return 0;) 87.3703 Tj
+(1988 ) 21.8426 Tj
 0 -398.7211 Td
-(1989     }) 43.6851 Tj
+(1989   // Return to "caller", actually trapret \(see allocproc\)\
+.) 275.2164 Tj
 0 -408.2145 Td
-(1990   }) 34.9481 Tj
+(1990 }) 26.2111 Tj
 0 -417.7079 Td
-(1991   release\(&proc_table_lock\);) 144.161 Tj
+(1991 ) 21.8426 Tj
 0 -427.2012 Td
-(1992   return -1;) 74.2647 Tj
+(1992 ) 21.8426 Tj
 0 -436.6946 Td
-(1993 }) 26.2111 Tj
+(1993 ) 21.8426 Tj
 0 -446.1879 Td
 (1994 ) 21.8426 Tj
 0 -455.6813 Td
@@ -9093,6 +9166,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -9110,94 +9185,93 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/proc.c  Page 9) 161.635 Tj
+(Aug  8 01:04 2009  xv6/proc.c  Page 9) 161.635 Tj
 0 -28.4801 Td
-(2000 // Exit the current process.  Does not return.) 222.7942 Tj
+(2000 // Atomically release lock and sleep on chan.) 218.4257 Tj
 0 -37.9735 Td
-(2001 // Exited processes remain in the zombie state) 222.7942 Tj
+(2001 // Reacquires lock when reawakened.) 174.7406 Tj
 0 -47.4668 Td
-(2002 // until their parent calls wait\(\) to find out they exit\
-ed.) 279.5849 Tj
+(2002 void) 39.3166 Tj
 0 -56.9602 Td
-(2003 void) 39.3166 Tj
+(2003 sleep\(void *chan, struct spinlock *lk\)) 187.8461 Tj
 0 -66.4535 Td
-(2004 exit\(void\)) 65.5277 Tj
+(2004 {) 26.2111 Tj
 0 -75.9469 Td
-(2005 {) 26.2111 Tj
+(2005   if\(cp == 0\)) 78.6333 Tj
 0 -85.4403 Td
-(2006   struct proc *p;) 96.1073 Tj
+(2006     panic\("sleep"\);) 104.8443 Tj
 0 -94.9336 Td
-(2007   int fd;) 61.1592 Tj
+(2007 ) 21.8426 Tj
 0 -104.427 Td
-(2008 ) 21.8426 Tj
+(2008   if\(lk == 0\)) 78.6333 Tj
 0 -113.9203 Td
-(2009   if\(cp == initproc\)) 109.2129 Tj
+(2009     panic\("sleep without lk"\);) 152.898 Tj
 0 -123.4137 Td
-(2010     panic\("init exiting"\);) 135.4239 Tj
+(2010 ) 21.8426 Tj
 0 -132.9071 Td
-(2011 ) 21.8426 Tj
+(2011   // Must acquire ptable.lock in order to) 200.9517 Tj
 0 -142.4004 Td
-(2012   // Close all open files.) 135.4239 Tj
+(2012   // change p->state and then call sched.) 200.9517 Tj
 0 -151.8938 Td
-(2013   for\(fd = 0; fd < NOFILE; fd++\){) 166.0035 Tj
+(2013   // Once we hold ptable.lock, we can be) 196.5831 Tj
 0 -161.3871 Td
-(2014     if\(cp->ofile[fd]\){) 117.9499 Tj
+(2014   // guaranteed that we won't miss any wakeup) 218.4257 Tj
 0 -170.8805 Td
-(2015       fileclose\(cp->ofile[fd]\);) 157.2665 Tj
+(2015   // \(wakeup runs with ptable.lock locked\),) 209.6887 Tj
 0 -180.3739 Td
-(2016       cp->ofile[fd] = 0;) 126.6869 Tj
+(2016   // so it's okay to release lk.) 161.635 Tj
 0 -189.8672 Td
-(2017     }) 43.6851 Tj
+(2017   if\(lk != &ptable.lock\){  ) 139.7925 Tj
 0 -199.3606 Td
-(2018   }) 34.9481 Tj
+(2018     acquire\(&ptable.lock\);  ) 144.161 Tj
 0 -208.8539 Td
-(2019 ) 21.8426 Tj
+(2019     release\(lk\);) 91.7388 Tj
 0 -218.3473 Td
-(2020   iput\(cp->cwd\);) 91.7388 Tj
+(2020   }) 34.9481 Tj
 0 -227.8407 Td
-(2021   cp->cwd = 0;) 83.0018 Tj
+(2021 ) 21.8426 Tj
 0 -237.334 Td
-(2022 ) 21.8426 Tj
+(2022   // Go to sleep.) 96.1073 Tj
 0 -246.8274 Td
-(2023   acquire\(&proc_table_lock\);) 144.161 Tj
+(2023   cp->chan = chan;) 100.4758 Tj
 0 -256.3207 Td
-(2024 ) 21.8426 Tj
+(2024   cp->state = SLEEPING;) 122.3184 Tj
 0 -265.8141 Td
-(2025   // Parent might be sleeping in wait\(\).) 196.5831 Tj
+(2025   sched\(\);) 65.5277 Tj
 0 -275.3075 Td
-(2026   wakeup1\(cp->parent\);) 117.9499 Tj
+(2026 ) 21.8426 Tj
 0 -284.8008 Td
-(2027 ) 21.8426 Tj
+(2027   // Tidy up.) 78.6333 Tj
 0 -294.2942 Td
-(2028   // Pass abandoned children to init.) 183.4776 Tj
+(2028   cp->chan = 0;) 87.3703 Tj
 0 -303.7875 Td
-(2029   for\(p = proc; p < &proc[NPROC]; p++\){) 192.2146 Tj
+(2029 ) 21.8426 Tj
 0 -313.2809 Td
-(2030     if\(p->parent == cp\){) 126.6869 Tj
+(2030   // Reacquire original lock.) 148.5295 Tj
 0 -322.7743 Td
-(2031       p->parent = initproc;) 139.7925 Tj
+(2031   if\(lk != &ptable.lock\){  ) 139.7925 Tj
 0 -332.2676 Td
-(2032       if\(p->state == ZOMBIE\)) 144.161 Tj
+(2032     release\(&ptable.lock\);) 135.4239 Tj
 0 -341.761 Td
-(2033         wakeup1\(initproc\);) 135.4239 Tj
+(2033     acquire\(lk\);) 91.7388 Tj
 0 -351.2543 Td
-(2034     }) 43.6851 Tj
+(2034   }) 34.9481 Tj
 0 -360.7477 Td
-(2035   }) 34.9481 Tj
+(2035 }) 26.2111 Tj
 0 -370.2411 Td
 (2036 ) 21.8426 Tj
 0 -379.7344 Td
-(2037   // Jump into the scheduler, never to return.) 222.7942 Tj
+(2037 ) 21.8426 Tj
 0 -389.2278 Td
-(2038   cp->killed = 0;) 96.1073 Tj
+(2038 ) 21.8426 Tj
 0 -398.7211 Td
-(2039   cp->state = ZOMBIE;) 113.5814 Tj
+(2039 ) 21.8426 Tj
 0 -408.2145 Td
-(2040   sched\(\);) 65.5277 Tj
+(2040 ) 21.8426 Tj
 0 -417.7079 Td
-(2041   panic\("zombie exit"\);) 122.3184 Tj
+(2041 ) 21.8426 Tj
 0 -427.2012 Td
-(2042 }) 26.2111 Tj
+(2042 ) 21.8426 Tj
 0 -436.6946 Td
 (2043 ) 21.8426 Tj
 0 -446.1879 Td
@@ -9230,92 +9304,91 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/proc.c  Page 10) 166.0035 Tj
+(Aug  8 01:04 2009  xv6/proc.c  Page 10) 166.0035 Tj
 0 -28.4801 Td
-(2050 // Wait for a child process to exit and return its pid.) 262.1109 Tj
+(2050 // Wake up all processes sleeping on chan.) 205.3202 Tj
 0 -37.9735 Td
-(2051 // Return -1 if this process has no children.) 218.4257 Tj
+(2051 // The ptable lock must be held.) 161.635 Tj
 0 -47.4668 Td
-(2052 int) 34.9481 Tj
+(2052 static void) 69.8962 Tj
 0 -56.9602 Td
-(2053 wait\(void\)) 65.5277 Tj
+(2053 wakeup1\(void *chan\)) 104.8443 Tj
 0 -66.4535 Td
 (2054 {) 26.2111 Tj
 0 -75.9469 Td
 (2055   struct proc *p;) 96.1073 Tj
 0 -85.4403 Td
-(2056   int i, havekids, pid;) 122.3184 Tj
+(2056 ) 21.8426 Tj
 0 -94.9336 Td
-(2057 ) 21.8426 Tj
+(2057   for\(p = ptable.proc; p < &ptable.proc[NPROC]; p++\)) 249.0053 Tj
 0 -104.427 Td
-(2058   acquire\(&proc_table_lock\);) 144.161 Tj
+(2058     if\(p->state == SLEEPING && p->chan == chan\)) 227.1628 Tj
 0 -113.9203 Td
-(2059   for\(;;\){) 65.5277 Tj
+(2059       p->state = RUNNABLE;) 135.4239 Tj
 0 -123.4137 Td
-(2060     // Scan through table looking for zombie children.) 257.7424 Tj
+(2060 }) 26.2111 Tj
 0 -132.9071 Td
-(2061     havekids = 0;) 96.1073 Tj
+(2061 ) 21.8426 Tj
 0 -142.4004 Td
-(2062     for\(i = 0; i < NPROC; i++\){) 157.2665 Tj
+(2062 // Wake up all processes sleeping on chan.) 205.3202 Tj
 0 -151.8938 Td
-(2063       p = &proc[i];) 104.8443 Tj
+(2063 void) 39.3166 Tj
 0 -161.3871 Td
-(2064       if\(p->state == UNUSED\)) 144.161 Tj
+(2064 wakeup\(void *chan\)) 100.4758 Tj
 0 -170.8805 Td
-(2065         continue;) 96.1073 Tj
+(2065 {) 26.2111 Tj
 0 -180.3739 Td
-(2066       if\(p->parent == cp\){) 135.4239 Tj
+(2066   acquire\(&ptable.lock\);) 126.6869 Tj
 0 -189.8672 Td
-(2067         if\(p->state == ZOMBIE\){) 157.2665 Tj
+(2067   wakeup1\(chan\);) 91.7388 Tj
 0 -199.3606 Td
-(2068           // Found one.) 122.3184 Tj
+(2068   release\(&ptable.lock\);) 126.6869 Tj
 0 -208.8539 Td
-(2069           kfree\(p->mem, p->sz\);) 157.2665 Tj
+(2069 }) 26.2111 Tj
 0 -218.3473 Td
-(2070           kfree\(p->kstack, KSTACKSIZE\);) 192.2146 Tj
+(2070 ) 21.8426 Tj
 0 -227.8407 Td
-(2071           pid = p->pid;) 122.3184 Tj
+(2071 // Kill the process with the given pid.) 192.2146 Tj
 0 -237.334 Td
-(2072           p->state = UNUSED;) 144.161 Tj
+(2072 // Process won't actually exit until it returns) 227.1628 Tj
 0 -246.8274 Td
-(2073           p->pid = 0;) 113.5814 Tj
+(2073 // to user space \(see trap in trap.c\).) 187.8461 Tj
 0 -256.3207 Td
-(2074           p->parent = 0;) 126.6869 Tj
+(2074 int) 34.9481 Tj
 0 -265.8141 Td
-(2075           p->name[0] = 0;) 131.0554 Tj
+(2075 kill\(int pid\)) 78.6333 Tj
 0 -275.3075 Td
-(2076           release\(&proc_table_lock\);) 179.1091 Tj
+(2076 {) 26.2111 Tj
 0 -284.8008 Td
-(2077           return pid;) 113.5814 Tj
+(2077   struct proc *p;) 96.1073 Tj
 0 -294.2942 Td
-(2078         }) 61.1592 Tj
+(2078 ) 21.8426 Tj
 0 -303.7875 Td
-(2079         havekids = 1;) 113.5814 Tj
+(2079   acquire\(&ptable.lock\);) 126.6869 Tj
 0 -313.2809 Td
-(2080       }) 52.4222 Tj
+(2080   for\(p = ptable.proc; p < &ptable.proc[NPROC]; p++\){) 253.3738 Tj
 0 -322.7743 Td
-(2081     }) 43.6851 Tj
+(2081     if\(p->pid == pid\){) 117.9499 Tj
 0 -332.2676 Td
-(2082 ) 21.8426 Tj
+(2082       p->killed = 1;) 109.2129 Tj
 0 -341.761 Td
-(2083     // No point waiting if we don't have any children.) 257.7424 Tj
+(2083       // Wake process from sleep if necessary.) 222.7942 Tj
 0 -351.2543 Td
-(2084     if\(!havekids || cp->killed\){) 161.635 Tj
+(2084       if\(p->state == SLEEPING\)) 152.898 Tj
 0 -360.7477 Td
-(2085       release\(&proc_table_lock\);) 161.635 Tj
+(2085         p->state = RUNNABLE;) 144.161 Tj
 0 -370.2411 Td
-(2086       return -1;) 91.7388 Tj
+(2086       release\(&ptable.lock\);) 144.161 Tj
 0 -379.7344 Td
-(2087     }) 43.6851 Tj
+(2087       return 0;) 87.3703 Tj
 0 -389.2278 Td
-(2088 ) 21.8426 Tj
+(2088     }) 43.6851 Tj
 0 -398.7211 Td
-(2089     // Wait for children to exit.  \(See wakeup1 call in p\
-roc_exit.\)) 314.533 Tj
+(2089   }) 34.9481 Tj
 0 -408.2145 Td
-(2090     sleep\(cp, &proc_table_lock\);) 161.635 Tj
+(2090   release\(&ptable.lock\);) 126.6869 Tj
 0 -417.7079 Td
-(2091   }) 34.9481 Tj
+(2091   return -1;) 74.2647 Tj
 0 -427.2012 Td
 (2092 }) 26.2111 Tj
 0 -436.6946 Td
@@ -9362,6 +9435,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -9379,92 +9454,92 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/proc.c  Page 11) 166.0035 Tj
+(Aug  8 01:04 2009  xv6/proc.c  Page 11) 166.0035 Tj
 0 -28.4801 Td
-(2100 // Print a process listing to console.  For debugging.) 257.7424 Tj
+(2100 // Exit the current process.  Does not return.) 222.7942 Tj
 0 -37.9735 Td
-(2101 // Runs when user types ^P on console.) 187.8461 Tj
+(2101 // Exited processes remain in the zombie state) 222.7942 Tj
 0 -47.4668 Td
-(2102 // No lock to avoid wedging a stuck machine further.) 249.0053 Tj
+(2102 // until their parent calls wait\(\) to find out they exit\
+ed.) 279.5849 Tj
 0 -56.9602 Td
 (2103 void) 39.3166 Tj
 0 -66.4535 Td
-(2104 procdump\(void\)) 83.0018 Tj
+(2104 exit\(void\)) 65.5277 Tj
 0 -75.9469 Td
 (2105 {) 26.2111 Tj
 0 -85.4403 Td
-(2106   static char *states[] = {) 139.7925 Tj
+(2106   struct proc *p;) 96.1073 Tj
 0 -94.9336 Td
-(2107   [UNUSED]    "unused",) 122.3184 Tj
+(2107   int fd;) 61.1592 Tj
 0 -104.427 Td
-(2108   [EMBRYO]    "embryo",) 122.3184 Tj
+(2108 ) 21.8426 Tj
 0 -113.9203 Td
-(2109   [SLEEPING]  "sleep ",) 122.3184 Tj
+(2109   if\(cp == initproc\)) 109.2129 Tj
 0 -123.4137 Td
-(2110   [RUNNABLE]  "runble",) 122.3184 Tj
+(2110     panic\("init exiting"\);) 135.4239 Tj
 0 -132.9071 Td
-(2111   [RUNNING]   "run   ",) 122.3184 Tj
+(2111 ) 21.8426 Tj
 0 -142.4004 Td
-(2112   [ZOMBIE]    "zombie") 117.9499 Tj
+(2112   // Close all open files.) 135.4239 Tj
 0 -151.8938 Td
-(2113   };) 39.3166 Tj
+(2113   for\(fd = 0; fd < NOFILE; fd++\){) 166.0035 Tj
 0 -161.3871 Td
-(2114   int i, j;) 69.8962 Tj
+(2114     if\(cp->ofile[fd]\){) 117.9499 Tj
 0 -170.8805 Td
-(2115   struct proc *p;) 96.1073 Tj
+(2115       fileclose\(cp->ofile[fd]\);) 157.2665 Tj
 0 -180.3739 Td
-(2116   char *state;) 83.0018 Tj
+(2116       cp->ofile[fd] = 0;) 126.6869 Tj
 0 -189.8672 Td
-(2117   uint pc[10];) 83.0018 Tj
+(2117     }) 43.6851 Tj
 0 -199.3606 Td
-(2118 ) 21.8426 Tj
+(2118   }) 34.9481 Tj
 0 -208.8539 Td
-(2119   for\(i = 0; i < NPROC; i++\){) 148.5295 Tj
+(2119 ) 21.8426 Tj
 0 -218.3473 Td
-(2120     p = &proc[i];) 96.1073 Tj
+(2120   iput\(cp->cwd\);) 91.7388 Tj
 0 -227.8407 Td
-(2121     if\(p->state == UNUSED\)) 135.4239 Tj
+(2121   cp->cwd = 0;) 83.0018 Tj
 0 -237.334 Td
-(2122       continue;) 87.3703 Tj
+(2122 ) 21.8426 Tj
 0 -246.8274 Td
-(2123     if\(p->state >= 0 && p->state < NELEM\(states\) && sta\
-tes[p->state]\)) 323.2701 Tj
+(2123   acquire\(&ptable.lock\);) 126.6869 Tj
 0 -256.3207 Td
-(2124       state = states[p->state];) 157.2665 Tj
+(2124 ) 21.8426 Tj
 0 -265.8141 Td
-(2125     else) 56.7907 Tj
+(2125   // Parent might be sleeping in wait\(\).) 196.5831 Tj
 0 -275.3075 Td
-(2126       state = "???";) 109.2129 Tj
+(2126   wakeup1\(cp->parent\);) 117.9499 Tj
 0 -284.8008 Td
-(2127     cprintf\("%d %s %s", p->pid, state, p->name\);) 231.5313 Tj
+(2127 ) 21.8426 Tj
 0 -294.2942 Td
-(2128     if\(p->state == SLEEPING\){) 148.5295 Tj
+(2128   // Pass abandoned children to init.) 183.4776 Tj
 0 -303.7875 Td
-(2129       getcallerpcs\(\(uint*\)p->context.ebp+2, pc\);) 231.5313 Tj
+(2129   for\(p = ptable.proc; p < &ptable.proc[NPROC]; p++\){) 253.3738 Tj
 0 -313.2809 Td
-(2130       for\(j=0; j<10 && pc[j] != 0; j++\)) 192.2146 Tj
+(2130     if\(p->parent == cp\){) 126.6869 Tj
 0 -322.7743 Td
-(2131         cprintf\(" %p", pc[j]\);) 152.898 Tj
+(2131       p->parent = initproc;) 139.7925 Tj
 0 -332.2676 Td
-(2132     }) 43.6851 Tj
+(2132       if\(p->state == ZOMBIE\)) 144.161 Tj
 0 -341.761 Td
-(2133     cprintf\("\\n"\);) 100.4758 Tj
+(2133         wakeup1\(initproc\);) 135.4239 Tj
 0 -351.2543 Td
-(2134   }) 34.9481 Tj
+(2134     }) 43.6851 Tj
 0 -360.7477 Td
-(2135 }) 26.2111 Tj
+(2135   }) 34.9481 Tj
 0 -370.2411 Td
 (2136 ) 21.8426 Tj
 0 -379.7344 Td
-(2137 ) 21.8426 Tj
+(2137   // Jump into the scheduler, never to return.) 222.7942 Tj
 0 -389.2278 Td
-(2138 ) 21.8426 Tj
+(2138   cp->state = ZOMBIE;) 113.5814 Tj
 0 -398.7211 Td
-(2139 ) 21.8426 Tj
+(2139   sched\(\);) 65.5277 Tj
 0 -408.2145 Td
-(2140 ) 21.8426 Tj
+(2140   panic\("zombie exit"\);) 122.3184 Tj
 0 -417.7079 Td
-(2141 ) 21.8426 Tj
+(2141 }) 26.2111 Tj
 0 -427.2012 Td
 (2142 ) 21.8426 Tj
 0 -436.6946 Td
@@ -9499,91 +9574,90 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/swtch.S  Page 1) 166.0035 Tj
+(Aug  8 01:04 2009  xv6/proc.c  Page 12) 166.0035 Tj
 0 -28.4801 Td
-(2150 #   void swtch\(struct context *old, struct context *new\)\
-;) 270.8479 Tj
+(2150 // Wait for a child process to exit and return its pid.) 262.1109 Tj
 0 -37.9735 Td
-(2151 #) 26.2111 Tj
+(2151 // Return -1 if this process has no children.) 218.4257 Tj
 0 -47.4668 Td
-(2152 # Save current register context in old) 187.8461 Tj
+(2152 int) 34.9481 Tj
 0 -56.9602 Td
-(2153 # and then load register context from new.) 205.3202 Tj
+(2153 wait\(void\)) 65.5277 Tj
 0 -66.4535 Td
-(2154 ) 21.8426 Tj
+(2154 {) 26.2111 Tj
 0 -75.9469 Td
-(2155 .globl swtch) 74.2647 Tj
+(2155   struct proc *p;) 96.1073 Tj
 0 -85.4403 Td
-(2156 swtch:) 48.0537 Tj
+(2156   int havekids, pid;) 109.2129 Tj
 0 -94.9336 Td
-(2157   # Save old registers) 117.9499 Tj
+(2157 ) 21.8426 Tj
 0 -104.427 Td
-(2158   movl 4\(%esp\), %eax) 109.2129 Tj
+(2158   acquire\(&ptable.lock\);) 126.6869 Tj
 0 -113.9203 Td
-(2159 ) 21.8426 Tj
+(2159   for\(;;\){) 65.5277 Tj
 0 -123.4137 Td
-(2160   popl 0\(%eax\)  # %eip) 117.9499 Tj
+(2160     // Scan through table looking for zombie children.) 257.7424 Tj
 0 -132.9071 Td
-(2161   movl %esp, 4\(%eax\)) 109.2129 Tj
+(2161     havekids = 0;) 96.1073 Tj
 0 -142.4004 Td
-(2162   movl %ebx, 8\(%eax\)) 109.2129 Tj
+(2162     for\(p = ptable.proc; p < &ptable.proc[NPROC]; p++\){) 262.1109 Tj
 0 -151.8938 Td
-(2163   movl %ecx, 12\(%eax\)) 113.5814 Tj
+(2163       if\(p->parent != cp\)) 131.0554 Tj
 0 -161.3871 Td
-(2164   movl %edx, 16\(%eax\)) 113.5814 Tj
+(2164         continue;) 96.1073 Tj
 0 -170.8805 Td
-(2165   movl %esi, 20\(%eax\)) 113.5814 Tj
+(2165       havekids = 1;) 104.8443 Tj
 0 -180.3739 Td
-(2166   movl %edi, 24\(%eax\)) 113.5814 Tj
+(2166       if\(p->state == ZOMBIE\){) 148.5295 Tj
 0 -189.8672 Td
-(2167   movl %ebp, 28\(%eax\)) 113.5814 Tj
+(2167         // Found one.) 113.5814 Tj
 0 -199.3606 Td
-(2168 ) 21.8426 Tj
+(2168         pid = p->pid;) 113.5814 Tj
 0 -208.8539 Td
-(2169   # Load new registers) 117.9499 Tj
+(2169         kfree\(p->mem, p->sz\);) 148.5295 Tj
 0 -218.3473 Td
-(2170   movl 4\(%esp\), %eax  # not 8\(%esp\) - popped return ad\
-dress above) 305.796 Tj
+(2170         kfree\(p->kstack, KSTACKSIZE\);) 183.4776 Tj
 0 -227.8407 Td
-(2171 ) 21.8426 Tj
+(2171         p->state = UNUSED;) 135.4239 Tj
 0 -237.334 Td
-(2172   movl 28\(%eax\), %ebp) 113.5814 Tj
+(2172         p->pid = 0;) 104.8443 Tj
 0 -246.8274 Td
-(2173   movl 24\(%eax\), %edi) 113.5814 Tj
+(2173         p->parent = 0;) 117.9499 Tj
 0 -256.3207 Td
-(2174   movl 20\(%eax\), %esi) 113.5814 Tj
+(2174         p->name[0] = 0;) 122.3184 Tj
 0 -265.8141 Td
-(2175   movl 16\(%eax\), %edx) 113.5814 Tj
+(2175         p->killed = 0;) 117.9499 Tj
 0 -275.3075 Td
-(2176   movl 12\(%eax\), %ecx) 113.5814 Tj
+(2176         release\(&ptable.lock\);) 152.898 Tj
 0 -284.8008 Td
-(2177   movl 8\(%eax\), %ebx) 109.2129 Tj
+(2177         return pid;) 104.8443 Tj
 0 -294.2942 Td
-(2178   movl 4\(%eax\), %esp) 109.2129 Tj
+(2178       }) 52.4222 Tj
 0 -303.7875 Td
-(2179   pushl 0\(%eax\)  # %eip) 122.3184 Tj
+(2179     }) 43.6851 Tj
 0 -313.2809 Td
 (2180 ) 21.8426 Tj
 0 -322.7743 Td
-(2181   ret) 43.6851 Tj
+(2181     // No point waiting if we don't have any children.) 257.7424 Tj
 0 -332.2676 Td
-(2182 ) 21.8426 Tj
+(2182     if\(!havekids || cp->killed\){) 161.635 Tj
 0 -341.761 Td
-(2183 ) 21.8426 Tj
+(2183       release\(&ptable.lock\);) 144.161 Tj
 0 -351.2543 Td
-(2184 ) 21.8426 Tj
+(2184       return -1;) 91.7388 Tj
 0 -360.7477 Td
-(2185 ) 21.8426 Tj
+(2185     }) 43.6851 Tj
 0 -370.2411 Td
 (2186 ) 21.8426 Tj
 0 -379.7344 Td
-(2187 ) 21.8426 Tj
+(2187     // Wait for children to exit.  \(See wakeup1 call in p\
+roc_exit.\)) 314.533 Tj
 0 -389.2278 Td
-(2188 ) 21.8426 Tj
+(2188     sleep\(cp, &ptable.lock\);  ) 152.898 Tj
 0 -398.7211 Td
-(2189 ) 21.8426 Tj
+(2189   }) 34.9481 Tj
 0 -408.2145 Td
-(2190 ) 21.8426 Tj
+(2190 }) 26.2111 Tj
 0 -417.7079 Td
 (2191 ) 21.8426 Tj
 0 -427.2012 Td
@@ -9632,6 +9706,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -9649,88 +9725,84 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/kalloc.c  Page 1) 170.3721 Tj
+(Aug  8 01:04 2009  xv6/swtch.S  Page 1) 166.0035 Tj
 0 -28.4801 Td
-(2200 // Physical memory allocator, intended to allocate) 240.2683 Tj
+(2200 # Context switch) 91.7388 Tj
 0 -37.9735 Td
-(2201 // memory for user processes. Allocates in 4096-byte "page\
-s".) 288.322 Tj
+(2201 #) 26.2111 Tj
 0 -47.4668 Td
-(2202 // Free list is kept sorted and combines adjacent pages in\
-to) 283.9534 Tj
+(2202 #   void swtch\(struct context **old, struct context *new\)\
+;) 275.2164 Tj
 0 -56.9602 Td
-(2203 // long runs, to make it easier to allocate big segments.) 270.8479 Tj
+(2203 #) 26.2111 Tj
 0 -66.4535 Td
-(2204 // One reason the page size is 4k is that the x86 segment \
-size) 292.6905 Tj
+(2204 # Save current register context in old) 187.8461 Tj
 0 -75.9469 Td
-(2205 // granularity is 4k.) 113.5814 Tj
+(2205 # and then load register context from new.) 205.3202 Tj
 0 -85.4403 Td
 (2206 ) 21.8426 Tj
 0 -94.9336 Td
-(2207 #include "types.h") 100.4758 Tj
+(2207 .globl swtch) 74.2647 Tj
 0 -104.427 Td
-(2208 #include "defs.h") 96.1073 Tj
+(2208 swtch:) 48.0537 Tj
 0 -113.9203 Td
-(2209 #include "param.h") 100.4758 Tj
+(2209   movl 4\(%esp\), %eax) 109.2129 Tj
 0 -123.4137 Td
-(2210 #include "spinlock.h") 113.5814 Tj
+(2210   movl 8\(%esp\), %edx) 109.2129 Tj
 0 -132.9071 Td
 (2211 ) 21.8426 Tj
 0 -142.4004 Td
-(2212 struct spinlock kalloc_lock;) 144.161 Tj
+(2212   # Save old callee-save registers) 170.3721 Tj
 0 -151.8938 Td
-(2213 ) 21.8426 Tj
+(2213   pushl %ebp) 74.2647 Tj
 0 -161.3871 Td
-(2214 struct run {) 74.2647 Tj
+(2214   pushl %ebx) 74.2647 Tj
 0 -170.8805 Td
-(2215   struct run *next;) 104.8443 Tj
+(2215   pushl %esi) 74.2647 Tj
 0 -180.3739 Td
-(2216   int len; // bytes) 104.8443 Tj
+(2216   pushl %edi) 74.2647 Tj
 0 -189.8672 Td
-(2217 };) 30.5796 Tj
+(2217 ) 21.8426 Tj
 0 -199.3606 Td
-(2218 struct run *freelist;) 113.5814 Tj
+(2218   # Switch stacks) 96.1073 Tj
 0 -208.8539 Td
-(2219 ) 21.8426 Tj
+(2219   movl %esp, \(%eax\)) 104.8443 Tj
 0 -218.3473 Td
-(2220 // Initialize free list of physical pages.) 205.3202 Tj
+(2220   movl %edx, %esp) 96.1073 Tj
 0 -227.8407 Td
-(2221 // This code cheats by just considering one megabyte of) 262.1109 Tj
+(2221 ) 21.8426 Tj
 0 -237.334 Td
-(2222 // pages after _end.  Real systems would determine the) 257.7424 Tj
+(2222   # Load new callee-save registers) 170.3721 Tj
 0 -246.8274 Td
-(2223 // amount of memory available in the system and use it all\
-.) 279.5849 Tj
+(2223   popl %edi) 69.8962 Tj
 0 -256.3207 Td
-(2224 void) 39.3166 Tj
+(2224   popl %esi) 69.8962 Tj
 0 -265.8141 Td
-(2225 kinit\(void\)) 69.8962 Tj
+(2225   popl %ebx) 69.8962 Tj
 0 -275.3075 Td
-(2226 {) 26.2111 Tj
+(2226   popl %ebp) 69.8962 Tj
 0 -284.8008 Td
-(2227   extern int end;) 96.1073 Tj
+(2227   ret) 43.6851 Tj
 0 -294.2942 Td
-(2228   uint mem;) 69.8962 Tj
+(2228 ) 21.8426 Tj
 0 -303.7875 Td
-(2229   char *start;) 83.0018 Tj
+(2229 ) 21.8426 Tj
 0 -313.2809 Td
 (2230 ) 21.8426 Tj
 0 -322.7743 Td
-(2231   initlock\(&kalloc_lock, "kalloc"\);) 174.7406 Tj
+(2231 ) 21.8426 Tj
 0 -332.2676 Td
-(2232   start = \(char*\) &end;) 122.3184 Tj
+(2232 ) 21.8426 Tj
 0 -341.761 Td
-(2233   start = \(char*\) \(\(\(uint\)start + PAGE\) & ~\(PAGE-1\
-\)\);) 253.3738 Tj
+(2233 ) 21.8426 Tj
 0 -351.2543 Td
-(2234   mem = 256; // assume computer has 256 pages of RAM) 249.0053 Tj
+(2234 ) 21.8426 Tj
 0 -360.7477 Td
-(2235   cprintf\("mem = %d\\n", mem * PAGE\);) 179.1091 Tj
+(2235 ) 21.8426 Tj
 0 -370.2411 Td
-(2236   kfree\(start, mem * PAGE\);) 139.7925 Tj
+(2236 ) 21.8426 Tj
 0 -379.7344 Td
-(2237 }) 26.2111 Tj
+(2237 ) 21.8426 Tj
 0 -389.2278 Td
 (2238 ) 21.8426 Tj
 0 -398.7211 Td
@@ -9773,99 +9845,102 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/kalloc.c  Page 2) 170.3721 Tj
+(Aug  8 01:04 2009  xv6/kalloc.c  Page 1) 170.3721 Tj
 0 -28.4801 Td
-(2250 // Free the len bytes of memory pointed at by v,) 231.5313 Tj
+(2250 // Physical memory allocator, intended to allocate) 240.2683 Tj
 0 -37.9735 Td
-(2251 // which normally should have been returned by a) 231.5313 Tj
+(2251 // memory for user processes. Allocates in 4096-byte "page\
+s".) 288.322 Tj
 0 -47.4668 Td
-(2252 // call to kalloc\(len\).  \(The exception is when) 227.1628 Tj
+(2252 // Free list is kept sorted and combines adjacent pages in\
+to) 283.9534 Tj
 0 -56.9602 Td
-(2253 // initializing the allocator; see kinit above.\)) 231.5313 Tj
+(2253 // long runs, to make it easier to allocate big segments.) 270.8479 Tj
 0 -66.4535 Td
-(2254 void) 39.3166 Tj
+(2254 // One reason the page size is 4k is that the x86 segment \
+size) 292.6905 Tj
 0 -75.9469 Td
-(2255 kfree\(char *v, int len\)) 122.3184 Tj
+(2255 // granularity is 4k.) 113.5814 Tj
 0 -85.4403 Td
-(2256 {) 26.2111 Tj
+(2256 ) 21.8426 Tj
 0 -94.9336 Td
-(2257   struct run *r, *rend, **rp, *p, *pend;) 196.5831 Tj
+(2257 #include "types.h") 100.4758 Tj
 0 -104.427 Td
-(2258 ) 21.8426 Tj
+(2258 #include "defs.h") 96.1073 Tj
 0 -113.9203 Td
-(2259   if\(len <= 0 || len % PAGE\)) 144.161 Tj
+(2259 #include "param.h") 100.4758 Tj
 0 -123.4137 Td
-(2260     panic\("kfree"\);) 104.8443 Tj
+(2260 #include "spinlock.h") 113.5814 Tj
 0 -132.9071 Td
 (2261 ) 21.8426 Tj
 0 -142.4004 Td
-(2262   // Fill with junk to catch dangling refs.) 209.6887 Tj
+(2262 struct run {) 74.2647 Tj
 0 -151.8938 Td
-(2263   memset\(v, 1, len\);) 109.2129 Tj
+(2263   struct run *next;) 104.8443 Tj
 0 -161.3871 Td
-(2264 ) 21.8426 Tj
+(2264   int len; // bytes) 104.8443 Tj
 0 -170.8805 Td
-(2265   acquire\(&kalloc_lock\);) 126.6869 Tj
+(2265 };) 30.5796 Tj
 0 -180.3739 Td
-(2266   p = \(struct run*\)v;) 113.5814 Tj
+(2266 ) 21.8426 Tj
 0 -189.8672 Td
-(2267   pend = \(struct run*\)\(v + len\);) 161.635 Tj
+(2267 struct {) 56.7907 Tj
 0 -199.3606 Td
-(2268   for\(rp=&freelist; \(r=*rp\) != 0 && r <= pend; rp=&r->n\
-ext\){) 283.9534 Tj
+(2268   struct spinlock lock;) 122.3184 Tj
 0 -208.8539 Td
-(2269     rend = \(struct run*\)\(\(char*\)r + r->len\);) 214.0572 Tj
+(2269   struct run *freelist;) 122.3184 Tj
 0 -218.3473 Td
-(2270     if\(r <= p && p < rend\)) 135.4239 Tj
+(2270 } kmem;) 52.4222 Tj
 0 -227.8407 Td
-(2271       panic\("freeing free page"\);) 166.0035 Tj
+(2271 ) 21.8426 Tj
 0 -237.334 Td
-(2272     if\(pend == r\){  // p next to r: replace r with p) 249.0053 Tj
+(2272 // Initialize free list of physical pages.) 205.3202 Tj
 0 -246.8274 Td
-(2273       p->len = len + r->len;) 144.161 Tj
+(2273 // This code cheats by just considering one megabyte of) 262.1109 Tj
 0 -256.3207 Td
-(2274       p->next = r->next;) 126.6869 Tj
+(2274 // pages after end.  Real systems would determine the) 253.3738 Tj
 0 -265.8141 Td
-(2275       *rp = p;) 83.0018 Tj
+(2275 // amount of memory available in the system and use it all\
+.) 279.5849 Tj
 0 -275.3075 Td
-(2276       goto out;) 87.3703 Tj
+(2276 void) 39.3166 Tj
 0 -284.8008 Td
-(2277     }) 43.6851 Tj
+(2277 kinit\(void\)) 69.8962 Tj
 0 -294.2942 Td
-(2278     if\(rend == p\){  // r next to p: replace p with r) 249.0053 Tj
+(2278 {) 26.2111 Tj
 0 -303.7875 Td
-(2279       r->len += len;) 109.2129 Tj
+(2279   extern char end[];) 109.2129 Tj
 0 -313.2809 Td
-(2280       if\(r->next && r->next == pend\){  // r now next to \
-r->next?) 301.4275 Tj
+(2280   uint len;) 69.8962 Tj
 0 -322.7743 Td
-(2281         r->len += r->next->len;) 157.2665 Tj
+(2281   char *p;) 65.5277 Tj
 0 -332.2676 Td
-(2282         r->next = r->next->next;) 161.635 Tj
+(2282 ) 21.8426 Tj
 0 -341.761 Td
-(2283       }) 52.4222 Tj
+(2283   initlock\(&kmem.lock, "kmem"\);) 157.2665 Tj
 0 -351.2543 Td
-(2284       goto out;) 87.3703 Tj
+(2284   p = \(char*\)\(\(\(uint\)end + PAGE\) & ~\(PAGE-1\)\);) 222.7942 Tj
 0 -360.7477 Td
-(2285     }) 43.6851 Tj
+(2285   len = 256*PAGE; // assume computer has 256 pages of RAM,\
+ 1 MB) 297.059 Tj
 0 -370.2411 Td
-(2286   }) 34.9481 Tj
+(2286   cprintf\("mem = %d\\n", len\);) 148.5295 Tj
 0 -379.7344 Td
-(2287   // Insert p before r in list.) 157.2665 Tj
+(2287   kfree\(p, len\);) 91.7388 Tj
 0 -389.2278 Td
-(2288   p->len = len;) 87.3703 Tj
+(2288 }) 26.2111 Tj
 0 -398.7211 Td
-(2289   p->next = r;) 83.0018 Tj
+(2289 ) 21.8426 Tj
 0 -408.2145 Td
-(2290   *rp = p;) 65.5277 Tj
+(2290 ) 21.8426 Tj
 0 -417.7079 Td
 (2291 ) 21.8426 Tj
 0 -427.2012 Td
-(2292  out:) 43.6851 Tj
+(2292 ) 21.8426 Tj
 0 -436.6946 Td
-(2293   release\(&kalloc_lock\);) 126.6869 Tj
+(2293 ) 21.8426 Tj
 0 -446.1879 Td
-(2294 }) 26.2111 Tj
+(2294 ) 21.8426 Tj
 0 -455.6813 Td
 (2295 ) 21.8426 Tj
 0 -465.1747 Td
@@ -9906,6 +9981,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -9923,97 +10000,100 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/kalloc.c  Page 3) 170.3721 Tj
+(Aug  8 01:04 2009  xv6/kalloc.c  Page 2) 170.3721 Tj
 0 -28.4801 Td
-(2300 // Allocate n bytes of physical memory.) 192.2146 Tj
+(2300 // Free the len bytes of memory pointed at by v,) 231.5313 Tj
 0 -37.9735 Td
-(2301 // Returns a kernel-segment pointer.) 179.1091 Tj
+(2301 // which normally should have been returned by a) 231.5313 Tj
 0 -47.4668 Td
-(2302 // Returns 0 if the memory cannot be allocated.) 227.1628 Tj
+(2302 // call to kalloc\(len\).  \(The exception is when) 227.1628 Tj
 0 -56.9602 Td
-(2303 char*) 43.6851 Tj
+(2303 // initializing the allocator; see kinit above.\)) 231.5313 Tj
 0 -66.4535 Td
-(2304 kalloc\(int n\)) 78.6333 Tj
+(2304 void) 39.3166 Tj
 0 -75.9469 Td
-(2305 {) 26.2111 Tj
+(2305 kfree\(char *v, int len\)) 122.3184 Tj
 0 -85.4403 Td
-(2306   char *p;) 65.5277 Tj
+(2306 {) 26.2111 Tj
 0 -94.9336 Td
-(2307   struct run *r, **rp;) 117.9499 Tj
+(2307   struct run *r, *rend, **rp, *p, *pend;) 196.5831 Tj
 0 -104.427 Td
 (2308 ) 21.8426 Tj
 0 -113.9203 Td
-(2309   if\(n % PAGE || n <= 0\)) 126.6869 Tj
+(2309   if\(len <= 0 || len % PAGE\)) 144.161 Tj
 0 -123.4137 Td
-(2310     panic\("kalloc"\);) 109.2129 Tj
+(2310     panic\("kfree"\);) 104.8443 Tj
 0 -132.9071 Td
 (2311 ) 21.8426 Tj
 0 -142.4004 Td
-(2312   acquire\(&kalloc_lock\);) 126.6869 Tj
+(2312   // Fill with junk to catch dangling refs.) 209.6887 Tj
 0 -151.8938 Td
-(2313   for\(rp=&freelist; \(r=*rp\) != 0; rp=&r->next\){) 227.1628 Tj
+(2313   memset\(v, 1, len\);) 109.2129 Tj
 0 -161.3871 Td
-(2314     if\(r->len == n\){) 109.2129 Tj
+(2314 ) 21.8426 Tj
 0 -170.8805 Td
-(2315       *rp = r->next;) 109.2129 Tj
+(2315   acquire\(&kmem.lock\);) 117.9499 Tj
 0 -180.3739 Td
-(2316       release\(&kalloc_lock\);) 144.161 Tj
+(2316   p = \(struct run*\)v;) 113.5814 Tj
 0 -189.8672 Td
-(2317       return \(char*\)r;) 117.9499 Tj
+(2317   pend = \(struct run*\)\(v + len\);) 161.635 Tj
 0 -199.3606 Td
-(2318     }) 43.6851 Tj
+(2318   for\(rp=&kmem.freelist; \(r=*rp\) != 0 && r <= pend; rp=\
+&r->next\){) 305.796 Tj
 0 -208.8539 Td
-(2319     if\(r->len > n\){) 104.8443 Tj
+(2319     rend = \(struct run*\)\(\(char*\)r + r->len\);) 214.0572 Tj
 0 -218.3473 Td
-(2320       r->len -= n;) 100.4758 Tj
+(2320     if\(r <= p && p < rend\)) 135.4239 Tj
 0 -227.8407 Td
-(2321       p = \(char*\)r + r->len;) 144.161 Tj
+(2321       panic\("freeing free page"\);) 166.0035 Tj
 0 -237.334 Td
-(2322       release\(&kalloc_lock\);) 144.161 Tj
+(2322     if\(rend == p\){  // r before p: expand r to include p) 266.4794 Tj
 0 -246.8274 Td
-(2323       return p;) 87.3703 Tj
+(2323       r->len += len;) 109.2129 Tj
 0 -256.3207 Td
-(2324     }) 43.6851 Tj
+(2324       if\(r->next && r->next == pend\){  // r now next to \
+r->next?) 301.4275 Tj
 0 -265.8141 Td
-(2325   }) 34.9481 Tj
+(2325         r->len += r->next->len;) 157.2665 Tj
 0 -275.3075 Td
-(2326   release\(&kalloc_lock\);) 126.6869 Tj
+(2326         r->next = r->next->next;) 161.635 Tj
 0 -284.8008 Td
-(2327 ) 21.8426 Tj
+(2327       }) 52.4222 Tj
 0 -294.2942 Td
-(2328   cprintf\("kalloc: out of memory\\n"\);) 183.4776 Tj
+(2328       goto out;) 87.3703 Tj
 0 -303.7875 Td
-(2329   return 0;) 69.8962 Tj
+(2329     }) 43.6851 Tj
 0 -313.2809 Td
-(2330 }) 26.2111 Tj
+(2330     if\(pend == r\){  // p before r: expand p to include, \
+replace r) 305.796 Tj
 0 -322.7743 Td
-(2331 ) 21.8426 Tj
+(2331       p->len = len + r->len;) 144.161 Tj
 0 -332.2676 Td
-(2332 ) 21.8426 Tj
+(2332       p->next = r->next;) 126.6869 Tj
 0 -341.761 Td
-(2333 ) 21.8426 Tj
+(2333       *rp = p;) 83.0018 Tj
 0 -351.2543 Td
-(2334 ) 21.8426 Tj
+(2334       goto out;) 87.3703 Tj
 0 -360.7477 Td
-(2335 ) 21.8426 Tj
+(2335     }) 43.6851 Tj
 0 -370.2411 Td
-(2336 ) 21.8426 Tj
+(2336   }) 34.9481 Tj
 0 -379.7344 Td
-(2337 ) 21.8426 Tj
+(2337   // Insert p before r in list.) 157.2665 Tj
 0 -389.2278 Td
-(2338 ) 21.8426 Tj
+(2338   p->len = len;) 87.3703 Tj
 0 -398.7211 Td
-(2339 ) 21.8426 Tj
+(2339   p->next = r;) 83.0018 Tj
 0 -408.2145 Td
-(2340 ) 21.8426 Tj
+(2340   *rp = p;) 65.5277 Tj
 0 -417.7079 Td
 (2341 ) 21.8426 Tj
 0 -427.2012 Td
-(2342 ) 21.8426 Tj
+(2342  out:) 43.6851 Tj
 0 -436.6946 Td
-(2343 ) 21.8426 Tj
+(2343   release\(&kmem.lock\);) 117.9499 Tj
 0 -446.1879 Td
-(2344 ) 21.8426 Tj
+(2344 }) 26.2111 Tj
 0 -455.6813 Td
 (2345 ) 21.8426 Tj
 0 -465.1747 Td
@@ -10042,85 +10122,79 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/traps.h  Page 1) 166.0035 Tj
+(Aug  8 01:04 2009  xv6/kalloc.c  Page 3) 170.3721 Tj
 0 -28.4801 Td
-(2350 // x86 trap and interrupt constants.) 179.1091 Tj
+(2350 // Allocate n bytes of physical memory.) 192.2146 Tj
 0 -37.9735 Td
-(2351 ) 21.8426 Tj
+(2351 // Returns a kernel-segment pointer.) 179.1091 Tj
 0 -47.4668 Td
-(2352 // Processor-defined:) 113.5814 Tj
+(2352 // Returns 0 if the memory cannot be allocated.) 227.1628 Tj
 0 -56.9602 Td
-(2353 #define T_DIVIDE         0      // divide error) 227.1628 Tj
+(2353 char*) 43.6851 Tj
 0 -66.4535 Td
-(2354 #define T_DEBUG          1      // debug exception) 240.2683 Tj
+(2354 kalloc\(int n\)) 78.6333 Tj
 0 -75.9469 Td
-(2355 #define T_NMI            2      // non-maskable interrupt) 270.8479 Tj
+(2355 {) 26.2111 Tj
 0 -85.4403 Td
-(2356 #define T_BRKPT          3      // breakpoint) 218.4257 Tj
+(2356   char *p;) 65.5277 Tj
 0 -94.9336 Td
-(2357 #define T_OFLOW          4      // overflow) 209.6887 Tj
+(2357   struct run *r, **rp;) 117.9499 Tj
 0 -104.427 Td
-(2358 #define T_BOUND          5      // bounds check) 227.1628 Tj
+(2358 ) 21.8426 Tj
 0 -113.9203 Td
-(2359 #define T_ILLOP          6      // illegal opcode) 235.8998 Tj
+(2359   if\(n % PAGE || n <= 0\)) 126.6869 Tj
 0 -123.4137 Td
-(2360 #define T_DEVICE         7      // device not available) 262.1109 Tj
+(2360     panic\("kalloc"\);) 109.2129 Tj
 0 -132.9071 Td
-(2361 #define T_DBLFLT         8      // double fault) 227.1628 Tj
+(2361 ) 21.8426 Tj
 0 -142.4004 Td
-(2362 // #define T_COPROC      9      // reserved \(not used sin\
-ce 486\)) 301.4275 Tj
+(2362   acquire\(&kmem.lock\);) 117.9499 Tj
 0 -151.8938 Td
-(2363 #define T_TSS           10      // invalid task switch seg\
-ment) 292.6905 Tj
+(2363   for\(rp=&kmem.freelist; \(r=*rp\) != 0; rp=&r->next\){) 249.0053 Tj
 0 -161.3871 Td
-(2364 #define T_SEGNP         11      // segment not present) 257.7424 Tj
+(2364     if\(r->len >= n\){) 109.2129 Tj
 0 -170.8805 Td
-(2365 #define T_STACK         12      // stack exception) 240.2683 Tj
+(2365       r->len -= n;) 100.4758 Tj
 0 -180.3739 Td
-(2366 #define T_GPFLT         13      // general protection faul\
-t) 279.5849 Tj
+(2366       p = \(char*\)r + r->len;) 144.161 Tj
 0 -189.8672 Td
-(2367 #define T_PGFLT         14      // page fault) 218.4257 Tj
+(2367       if\(r->len == 0\)) 113.5814 Tj
 0 -199.3606 Td
-(2368 // #define T_RES        15      // reserved) 209.6887 Tj
+(2368         *rp = r->next;) 117.9499 Tj
 0 -208.8539 Td
-(2369 #define T_FPERR         16      // floating point error) 262.1109 Tj
+(2369       release\(&kmem.lock\);) 135.4239 Tj
 0 -218.3473 Td
-(2370 #define T_ALIGN         17      // aligment check) 235.8998 Tj
+(2370       return p;) 87.3703 Tj
 0 -227.8407 Td
-(2371 #define T_MCHK          18      // machine check) 231.5313 Tj
+(2371     }) 43.6851 Tj
 0 -237.334 Td
-(2372 #define T_SIMDERR       19      // SIMD floating point err\
-or) 283.9534 Tj
+(2372   }) 34.9481 Tj
 0 -246.8274 Td
-(2373 ) 21.8426 Tj
+(2373   release\(&kmem.lock\);) 117.9499 Tj
 0 -256.3207 Td
-(2374 // These are arbitrarily chosen, but with care not to over\
-lap) 288.322 Tj
+(2374 ) 21.8426 Tj
 0 -265.8141 Td
-(2375 // processor defined exceptions or interrupt vectors.) 253.3738 Tj
+(2375   cprintf\("kalloc: out of memory\\n"\);) 183.4776 Tj
 0 -275.3075 Td
-(2376 #define T_SYSCALL       48      // system call) 222.7942 Tj
+(2376   return 0;) 69.8962 Tj
 0 -284.8008 Td
-(2377 #define T_DEFAULT      500      // catchall) 209.6887 Tj
+(2377 }) 26.2111 Tj
 0 -294.2942 Td
 (2378 ) 21.8426 Tj
 0 -303.7875 Td
-(2379 #define IRQ_OFFSET      32      // IRQ 0 corresponds to in\
-t IRQ_OFFSET) 327.6386 Tj
+(2379 ) 21.8426 Tj
 0 -313.2809 Td
 (2380 ) 21.8426 Tj
 0 -322.7743 Td
-(2381 #define IRQ_TIMER        0) 135.4239 Tj
+(2381 ) 21.8426 Tj
 0 -332.2676 Td
-(2382 #define IRQ_KBD          1) 135.4239 Tj
+(2382 ) 21.8426 Tj
 0 -341.761 Td
-(2383 #define IRQ_IDE         14) 135.4239 Tj
+(2383 ) 21.8426 Tj
 0 -351.2543 Td
-(2384 #define IRQ_ERROR       19) 135.4239 Tj
+(2384 ) 21.8426 Tj
 0 -360.7477 Td
-(2385 #define IRQ_SPURIOUS    31) 135.4239 Tj
+(2385 ) 21.8426 Tj
 0 -370.2411 Td
 (2386 ) 21.8426 Tj
 0 -379.7344 Td
@@ -10179,6 +10253,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -10196,103 +10272,109 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/vectors.pl  Page 1) 179.1091 Tj
+(Aug  8 01:04 2009  xv6/traps.h  Page 1) 166.0035 Tj
 0 -28.4801 Td
-(2400 #!/usr/bin/perl -w) 100.4758 Tj
+(2400 // x86 trap and interrupt constants.) 179.1091 Tj
 0 -37.9735 Td
 (2401 ) 21.8426 Tj
 0 -47.4668 Td
-(2402 # Generate vectors.S, the trap/interrupt entry points.) 257.7424 Tj
+(2402 // Processor-defined:) 113.5814 Tj
 0 -56.9602 Td
-(2403 # There has to be one entry point per interrupt number) 257.7424 Tj
+(2403 #define T_DIVIDE         0      // divide error) 227.1628 Tj
 0 -66.4535 Td
-(2404 # since otherwise there's no way for trap\(\) to discover) 262.1109 Tj
+(2404 #define T_DEBUG          1      // debug exception) 240.2683 Tj
 0 -75.9469 Td
-(2405 # the interrupt number.) 122.3184 Tj
+(2405 #define T_NMI            2      // non-maskable interrupt) 270.8479 Tj
 0 -85.4403 Td
-(2406 ) 21.8426 Tj
+(2406 #define T_BRKPT          3      // breakpoint) 218.4257 Tj
 0 -94.9336 Td
-(2407 print "# generated by vectors.pl - do not edit\\n";) 240.2683 Tj
+(2407 #define T_OFLOW          4      // overflow) 209.6887 Tj
 0 -104.427 Td
-(2408 print "# handlers\\n";) 113.5814 Tj
+(2408 #define T_BOUND          5      // bounds check) 227.1628 Tj
 0 -113.9203 Td
-(2409 print ".text\\n";) 91.7388 Tj
+(2409 #define T_ILLOP          6      // illegal opcode) 235.8998 Tj
 0 -123.4137 Td
-(2410 print ".globl alltraps\\n";) 135.4239 Tj
+(2410 #define T_DEVICE         7      // device not available) 262.1109 Tj
 0 -132.9071 Td
-(2411 for\(my $i = 0; $i < 256; $i++\){) 157.2665 Tj
+(2411 #define T_DBLFLT         8      // double fault) 227.1628 Tj
 0 -142.4004 Td
-(2412     print ".globl vector$i\\n";) 152.898 Tj
+(2412 // #define T_COPROC      9      // reserved \(not used sin\
+ce 486\)) 301.4275 Tj
 0 -151.8938 Td
-(2413     print "vector$i:\\n";) 126.6869 Tj
+(2413 #define T_TSS           10      // invalid task switch seg\
+ment) 292.6905 Tj
 0 -161.3871 Td
-(2414     if\(\($i < 8 || $i > 14\) && $i != 17\){) 196.5831 Tj
+(2414 #define T_SEGNP         11      // segment not present) 257.7424 Tj
 0 -170.8805 Td
-(2415         print "  pushl \\$0\\n";) 152.898 Tj
+(2415 #define T_STACK         12      // stack exception) 240.2683 Tj
 0 -180.3739 Td
-(2416     }) 43.6851 Tj
+(2416 #define T_GPFLT         13      // general protection faul\
+t) 279.5849 Tj
 0 -189.8672 Td
-(2417     print "  pushl \\$$i\\n";) 139.7925 Tj
+(2417 #define T_PGFLT         14      // page fault) 218.4257 Tj
 0 -199.3606 Td
-(2418     print "  jmp alltraps\\n";) 148.5295 Tj
+(2418 // #define T_RES        15      // reserved) 209.6887 Tj
 0 -208.8539 Td
-(2419 }) 26.2111 Tj
+(2419 #define T_FPERR         16      // floating point error) 262.1109 Tj
 0 -218.3473 Td
-(2420 ) 21.8426 Tj
+(2420 #define T_ALIGN         17      // aligment check) 235.8998 Tj
 0 -227.8407 Td
-(2421 print "\\n# vector table\\n";) 139.7925 Tj
+(2421 #define T_MCHK          18      // machine check) 231.5313 Tj
 0 -237.334 Td
-(2422 print ".data\\n";) 91.7388 Tj
+(2422 #define T_SIMDERR       19      // SIMD floating point err\
+or) 283.9534 Tj
 0 -246.8274 Td
-(2423 print ".globl vectors\\n";) 131.0554 Tj
+(2423 ) 21.8426 Tj
 0 -256.3207 Td
-(2424 print "vectors:\\n";) 104.8443 Tj
+(2424 // These are arbitrarily chosen, but with care not to over\
+lap) 288.322 Tj
 0 -265.8141 Td
-(2425 for\(my $i = 0; $i < 256; $i++\){) 157.2665 Tj
+(2425 // processor defined exceptions or interrupt vectors.) 253.3738 Tj
 0 -275.3075 Td
-(2426     print "  .long vector$i\\n";) 157.2665 Tj
+(2426 #define T_SYSCALL       64     // system call) 218.4257 Tj
 0 -284.8008 Td
-(2427 }) 26.2111 Tj
+(2427 #define T_DEFAULT      500      // catchall) 209.6887 Tj
 0 -294.2942 Td
 (2428 ) 21.8426 Tj
 0 -303.7875 Td
-(2429 # sample output:) 91.7388 Tj
+(2429 #define T_IRQ0          32      // IRQ 0 corresponds to in\
+t T_IRQ) 305.796 Tj
 0 -313.2809 Td
-(2430 #   # handlers) 83.0018 Tj
+(2430 ) 21.8426 Tj
 0 -322.7743 Td
-(2431 #   .text) 61.1592 Tj
+(2431 #define IRQ_TIMER        0) 135.4239 Tj
 0 -332.2676 Td
-(2432 #   .globl alltraps) 104.8443 Tj
+(2432 #define IRQ_KBD          1) 135.4239 Tj
 0 -341.761 Td
-(2433 #   .globl vector0) 100.4758 Tj
+(2433 #define IRQ_COM1         4) 135.4239 Tj
 0 -351.2543 Td
-(2434 #   vector0:) 74.2647 Tj
+(2434 #define IRQ_IDE         14) 135.4239 Tj
 0 -360.7477 Td
-(2435 #     pushl $0) 83.0018 Tj
+(2435 #define IRQ_ERROR       19) 135.4239 Tj
 0 -370.2411 Td
-(2436 #     pushl $0) 83.0018 Tj
+(2436 #define IRQ_SPURIOUS    31) 135.4239 Tj
 0 -379.7344 Td
-(2437 #     jmp alltraps) 100.4758 Tj
+(2437 ) 21.8426 Tj
 0 -389.2278 Td
-(2438 #   ...) 52.4222 Tj
+(2438 ) 21.8426 Tj
 0 -398.7211 Td
-(2439 #) 26.2111 Tj
+(2439 ) 21.8426 Tj
 0 -408.2145 Td
-(2440 #   # vector table) 100.4758 Tj
+(2440 ) 21.8426 Tj
 0 -417.7079 Td
-(2441 #   .data) 61.1592 Tj
+(2441 ) 21.8426 Tj
 0 -427.2012 Td
-(2442 #   .globl vectors) 100.4758 Tj
+(2442 ) 21.8426 Tj
 0 -436.6946 Td
-(2443 #   vectors:) 74.2647 Tj
+(2443 ) 21.8426 Tj
 0 -446.1879 Td
-(2444 #     .long vector0) 104.8443 Tj
+(2444 ) 21.8426 Tj
 0 -455.6813 Td
-(2445 #     .long vector1) 104.8443 Tj
+(2445 ) 21.8426 Tj
 0 -465.1747 Td
-(2446 #     .long vector2) 104.8443 Tj
+(2446 ) 21.8426 Tj
 0 -474.668 Td
-(2447 #   ...) 52.4222 Tj
+(2447 ) 21.8426 Tj
 0 -484.1614 Td
 (2448 ) 21.8426 Tj
 0 -493.6547 Td
@@ -10315,99 +10397,100 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/trapasm.S  Page 1) 174.7406 Tj
+(Aug  8 01:04 2009  xv6/vectors.pl  Page 1) 179.1091 Tj
 0 -28.4801 Td
-(2450 .text) 43.6851 Tj
+(2450 #!/usr/bin/perl -w) 100.4758 Tj
 0 -37.9735 Td
 (2451 ) 21.8426 Tj
 0 -47.4668 Td
-(2452 .set SEG_KDATA_SEL, 0x10   # selector for SEG_KDATA) 244.6368 Tj
+(2452 # Generate vectors.S, the trap/interrupt entry points.) 257.7424 Tj
 0 -56.9602 Td
-(2453 ) 21.8426 Tj
+(2453 # There has to be one entry point per interrupt number) 257.7424 Tj
 0 -66.4535 Td
-(2454   # vectors.S sends all traps here.) 174.7406 Tj
+(2454 # since otherwise there's no way for trap\(\) to discover) 262.1109 Tj
 0 -75.9469 Td
-(2455 .globl alltraps) 87.3703 Tj
+(2455 # the interrupt number.) 122.3184 Tj
 0 -85.4403 Td
-(2456 alltraps:) 61.1592 Tj
+(2456 ) 21.8426 Tj
 0 -94.9336 Td
-(2457   # Build trap frame.) 113.5814 Tj
+(2457 print "# generated by vectors.pl - do not edit\\n";) 240.2683 Tj
 0 -104.427 Td
-(2458   pushl %ds) 69.8962 Tj
+(2458 print "# handlers\\n";) 113.5814 Tj
 0 -113.9203 Td
-(2459   pushl %es) 69.8962 Tj
+(2459 print ".globl alltraps\\n";) 135.4239 Tj
 0 -123.4137 Td
-(2460   pushal) 56.7907 Tj
+(2460 for\(my $i = 0; $i < 256; $i++\){) 157.2665 Tj
 0 -132.9071 Td
-(2461 ) 21.8426 Tj
+(2461     print ".globl vector$i\\n";) 152.898 Tj
 0 -142.4004 Td
-(2462   # Set up data segments.) 131.0554 Tj
+(2462     print "vector$i:\\n";) 126.6869 Tj
 0 -151.8938 Td
-(2463   movl $SEG_KDATA_SEL, %eax) 139.7925 Tj
+(2463     if\(!\($i == 8 || \($i >= 10 && $i <= 14\) || $i == 17\
+\)\){) 270.8479 Tj
 0 -161.3871 Td
-(2464   movw %ax,%ds) 83.0018 Tj
+(2464         print "  pushl \\$0\\n";) 152.898 Tj
 0 -170.8805 Td
-(2465   movw %ax,%es) 83.0018 Tj
+(2465     }) 43.6851 Tj
 0 -180.3739 Td
-(2466 ) 21.8426 Tj
+(2466     print "  pushl \\$$i\\n";) 139.7925 Tj
 0 -189.8672 Td
-(2467   # Call trap\(tf\), where tf=%esp) 161.635 Tj
+(2467     print "  jmp alltraps\\n";) 148.5295 Tj
 0 -199.3606 Td
-(2468   pushl %esp) 74.2647 Tj
+(2468 }) 26.2111 Tj
 0 -208.8539 Td
-(2469   call trap) 69.8962 Tj
+(2469 ) 21.8426 Tj
 0 -218.3473 Td
-(2470   addl $4, %esp) 87.3703 Tj
+(2470 print "\\n# vector table\\n";) 139.7925 Tj
 0 -227.8407 Td
-(2471 ) 21.8426 Tj
+(2471 print ".data\\n";) 91.7388 Tj
 0 -237.334 Td
-(2472   # Return falls through to trapret...) 187.8461 Tj
+(2472 print ".globl vectors\\n";) 131.0554 Tj
 0 -246.8274 Td
-(2473 .globl trapret) 83.0018 Tj
+(2473 print "vectors:\\n";) 104.8443 Tj
 0 -256.3207 Td
-(2474 trapret:) 56.7907 Tj
+(2474 for\(my $i = 0; $i < 256; $i++\){) 157.2665 Tj
 0 -265.8141 Td
-(2475   popal) 52.4222 Tj
+(2475     print "  .long vector$i\\n";) 157.2665 Tj
 0 -275.3075 Td
-(2476   popl %es) 65.5277 Tj
+(2476 }) 26.2111 Tj
 0 -284.8008 Td
-(2477   popl %ds) 65.5277 Tj
+(2477 ) 21.8426 Tj
 0 -294.2942 Td
-(2478   addl $0x8, %esp  # trapno and errcode) 192.2146 Tj
+(2478 # sample output:) 91.7388 Tj
 0 -303.7875 Td
-(2479   iret) 48.0537 Tj
+(2479 #   # handlers) 83.0018 Tj
 0 -313.2809 Td
-(2480 ) 21.8426 Tj
+(2480 #   .globl alltraps) 104.8443 Tj
 0 -322.7743 Td
-(2481   # A forked process switches to user mode by calling) 253.3738 Tj
+(2481 #   .globl vector0) 100.4758 Tj
 0 -332.2676 Td
-(2482   # forkret1\(tf\), where tf is the trap frame to use.) 249.0053 Tj
+(2482 #   vector0:) 74.2647 Tj
 0 -341.761 Td
-(2483 .globl forkret1) 87.3703 Tj
+(2483 #     pushl $0) 83.0018 Tj
 0 -351.2543 Td
-(2484 forkret1:) 61.1592 Tj
+(2484 #     pushl $0) 83.0018 Tj
 0 -360.7477 Td
-(2485   movl 4\(%esp\), %esp) 109.2129 Tj
+(2485 #     jmp alltraps) 100.4758 Tj
 0 -370.2411 Td
-(2486   jmp trapret) 78.6333 Tj
+(2486 #   ...) 52.4222 Tj
 0 -379.7344 Td
-(2487 ) 21.8426 Tj
+(2487 #) 26.2111 Tj
 0 -389.2278 Td
-(2488 ) 21.8426 Tj
+(2488 #   # vector table) 100.4758 Tj
 0 -398.7211 Td
-(2489 ) 21.8426 Tj
+(2489 #   .data) 61.1592 Tj
 0 -408.2145 Td
-(2490 ) 21.8426 Tj
+(2490 #   .globl vectors) 100.4758 Tj
 0 -417.7079 Td
-(2491 ) 21.8426 Tj
+(2491 #   vectors:) 74.2647 Tj
 0 -427.2012 Td
-(2492 ) 21.8426 Tj
+(2492 #     .long vector0) 104.8443 Tj
 0 -436.6946 Td
-(2493 ) 21.8426 Tj
+(2493 #     .long vector1) 104.8443 Tj
 0 -446.1879 Td
-(2494 ) 21.8426 Tj
+(2494 #     .long vector2) 104.8443 Tj
 0 -455.6813 Td
-(2495 ) 21.8426 Tj
+(2495 #   ...) 52.4222 Tj
 0 -465.1747 Td
 (2496 ) 21.8426 Tj
 0 -474.668 Td
@@ -10446,6 +10529,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -10463,109 +10548,107 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/trap.c  Page 1) 161.635 Tj
+(Aug  8 01:04 2009  xv6/trapasm.S  Page 1) 174.7406 Tj
 0 -28.4801 Td
-(2500 #include "types.h") 100.4758 Tj
+(2500 #define SEG_KCODE 1  // kernel code) 174.7406 Tj
 0 -37.9735 Td
-(2501 #include "defs.h") 96.1073 Tj
+(2501 #define SEG_KDATA 2  // kernel data+stack) 200.9517 Tj
 0 -47.4668 Td
-(2502 #include "param.h") 100.4758 Tj
+(2502 #define SEG_KCPU  3  // kernel per-cpu data) 209.6887 Tj
 0 -56.9602 Td
-(2503 #include "mmu.h") 91.7388 Tj
+(2503 ) 21.8426 Tj
 0 -66.4535 Td
-(2504 #include "proc.h") 96.1073 Tj
+(2504   # vectors.S sends all traps here.) 174.7406 Tj
 0 -75.9469 Td
-(2505 #include "x86.h") 91.7388 Tj
+(2505 .globl alltraps) 87.3703 Tj
 0 -85.4403 Td
-(2506 #include "traps.h") 100.4758 Tj
+(2506 alltraps:) 61.1592 Tj
 0 -94.9336 Td
-(2507 #include "spinlock.h") 113.5814 Tj
+(2507   # Build trap frame.) 113.5814 Tj
 0 -104.427 Td
-(2508 ) 21.8426 Tj
+(2508   pushl %ds) 69.8962 Tj
 0 -113.9203 Td
-(2509 // Interrupt descriptor table \(shared by all CPUs\).) 244.6368 Tj
+(2509   pushl %es) 69.8962 Tj
 0 -123.4137 Td
-(2510 struct gatedesc idt[256];) 131.0554 Tj
+(2510   pushl %fs) 69.8962 Tj
 0 -132.9071 Td
-(2511 extern uint vectors[];  // in vectors.S: array of 256 entr\
-y pointers) 318.9016 Tj
+(2511   pushl %gs) 69.8962 Tj
 0 -142.4004 Td
-(2512 struct spinlock tickslock;) 135.4239 Tj
+(2512   pushal) 56.7907 Tj
 0 -151.8938 Td
-(2513 int ticks;) 65.5277 Tj
+(2513 ) 21.8426 Tj
 0 -161.3871 Td
-(2514 ) 21.8426 Tj
+(2514   # Set up data and per-cpu segments.) 183.4776 Tj
 0 -170.8805 Td
-(2515 void) 39.3166 Tj
+(2515   movw $\(SEG_KDATA<<3\), %ax) 139.7925 Tj
 0 -180.3739 Td
-(2516 tvinit\(void\)) 74.2647 Tj
+(2516   movw %ax, %ds) 87.3703 Tj
 0 -189.8672 Td
-(2517 {) 26.2111 Tj
+(2517   movw %ax, %es) 87.3703 Tj
 0 -199.3606 Td
-(2518   int i;) 56.7907 Tj
+(2518   movw $\(SEG_KCPU<<3\), %ax) 135.4239 Tj
 0 -208.8539 Td
-(2519 ) 21.8426 Tj
+(2519   movw %ax, %fs) 87.3703 Tj
 0 -218.3473 Td
-(2520   for\(i = 0; i < 256; i++\)) 135.4239 Tj
+(2520   movw %ax, %gs) 87.3703 Tj
 0 -227.8407 Td
-(2521     SETGATE\(idt[i], 0, SEG_KCODE<<3, vectors[i], 0\);) 249.0053 Tj
+(2521 ) 21.8426 Tj
 0 -237.334 Td
-(2522   SETGATE\(idt[T_SYSCALL], 1, SEG_KCODE<<3, vectors[T_SYSC\
-ALL], DPL_USER\);) 340.7441 Tj
+(2522   # Call trap\(tf\), where tf=%esp) 161.635 Tj
 0 -246.8274 Td
-(2523 ) 21.8426 Tj
+(2523   pushl %esp) 74.2647 Tj
 0 -256.3207 Td
-(2524   initlock\(&tickslock, "time"\);) 157.2665 Tj
+(2524   call trap) 69.8962 Tj
 0 -265.8141 Td
-(2525 }) 26.2111 Tj
+(2525   addl $4, %esp) 87.3703 Tj
 0 -275.3075 Td
 (2526 ) 21.8426 Tj
 0 -284.8008 Td
-(2527 void) 39.3166 Tj
+(2527   # Return falls through to trapret...) 187.8461 Tj
 0 -294.2942 Td
-(2528 idtinit\(void\)) 78.6333 Tj
+(2528 .globl trapret) 83.0018 Tj
 0 -303.7875 Td
-(2529 {) 26.2111 Tj
+(2529 trapret:) 56.7907 Tj
 0 -313.2809 Td
-(2530   lidt\(idt, sizeof\(idt\)\);) 131.0554 Tj
+(2530   popal) 52.4222 Tj
 0 -322.7743 Td
-(2531 }) 26.2111 Tj
+(2531   popl %gs) 65.5277 Tj
 0 -332.2676 Td
-(2532 ) 21.8426 Tj
+(2532   popl %fs) 65.5277 Tj
 0 -341.761 Td
-(2533 void) 39.3166 Tj
+(2533   popl %es) 65.5277 Tj
 0 -351.2543 Td
-(2534 trap\(struct trapframe *tf\)) 135.4239 Tj
+(2534   popl %ds) 65.5277 Tj
 0 -360.7477 Td
-(2535 {) 26.2111 Tj
+(2535   addl $0x8, %esp  # trapno and errcode) 192.2146 Tj
 0 -370.2411 Td
-(2536   if\(tf->trapno == T_SYSCALL\){) 152.898 Tj
+(2536   iret) 48.0537 Tj
 0 -379.7344 Td
-(2537     if\(cp->killed\)) 100.4758 Tj
+(2537 ) 21.8426 Tj
 0 -389.2278 Td
-(2538       exit\(\);) 78.6333 Tj
+(2538 ) 21.8426 Tj
 0 -398.7211 Td
-(2539     cp->tf = tf;) 91.7388 Tj
+(2539 ) 21.8426 Tj
 0 -408.2145 Td
-(2540     syscall\(\);) 83.0018 Tj
+(2540 ) 21.8426 Tj
 0 -417.7079 Td
-(2541     if\(cp->killed\)) 100.4758 Tj
+(2541 ) 21.8426 Tj
 0 -427.2012 Td
-(2542       exit\(\);) 78.6333 Tj
+(2542 ) 21.8426 Tj
 0 -436.6946 Td
-(2543     return;) 69.8962 Tj
+(2543 ) 21.8426 Tj
 0 -446.1879 Td
-(2544   }) 34.9481 Tj
+(2544 ) 21.8426 Tj
 0 -455.6813 Td
 (2545 ) 21.8426 Tj
 0 -465.1747 Td
-(2546   switch\(tf->trapno\){) 113.5814 Tj
+(2546 ) 21.8426 Tj
 0 -474.668 Td
-(2547   case IRQ_OFFSET + IRQ_TIMER:) 152.898 Tj
+(2547 ) 21.8426 Tj
 0 -484.1614 Td
-(2548     if\(cpu\(\) == 0\){) 104.8443 Tj
+(2548 ) 21.8426 Tj
 0 -493.6547 Td
-(2549       acquire\(&tickslock\);) 135.4239 Tj
+(2549 ) 21.8426 Tj
 0 -522.1348 Td
 (Sheet 25) 34.9481 Tj
 Q
@@ -10584,101 +10667,97 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/trap.c  Page 2) 161.635 Tj
+(Aug  8 01:04 2009  xv6/trap.c  Page 1) 161.635 Tj
 0 -28.4801 Td
-(2550       ticks++;) 83.0018 Tj
+(2550 #include "types.h") 100.4758 Tj
 0 -37.9735 Td
-(2551       wakeup\(&ticks\);) 113.5814 Tj
+(2551 #include "defs.h") 96.1073 Tj
 0 -47.4668 Td
-(2552       release\(&tickslock\);) 135.4239 Tj
+(2552 #include "param.h") 100.4758 Tj
 0 -56.9602 Td
-(2553     }) 43.6851 Tj
+(2553 #include "mmu.h") 91.7388 Tj
 0 -66.4535 Td
-(2554     lapic_eoi\(\);) 91.7388 Tj
+(2554 #include "proc.h") 96.1073 Tj
 0 -75.9469 Td
-(2555     break;) 65.5277 Tj
+(2555 #include "x86.h") 91.7388 Tj
 0 -85.4403 Td
-(2556   case IRQ_OFFSET + IRQ_IDE:) 144.161 Tj
+(2556 #include "traps.h") 100.4758 Tj
 0 -94.9336 Td
-(2557     ide_intr\(\);) 87.3703 Tj
+(2557 #include "spinlock.h") 113.5814 Tj
 0 -104.427 Td
-(2558     lapic_eoi\(\);) 91.7388 Tj
+(2558 ) 21.8426 Tj
 0 -113.9203 Td
-(2559     break;) 65.5277 Tj
+(2559 // Interrupt descriptor table \(shared by all CPUs\).) 244.6368 Tj
 0 -123.4137 Td
-(2560   case IRQ_OFFSET + IRQ_KBD:) 144.161 Tj
+(2560 struct gatedesc idt[256];) 131.0554 Tj
 0 -132.9071 Td
-(2561     kbd_intr\(\);) 87.3703 Tj
+(2561 extern uint vectors[];  // in vectors.S: array of 256 entr\
+y pointers) 318.9016 Tj
 0 -142.4004 Td
-(2562     lapic_eoi\(\);) 91.7388 Tj
+(2562 struct spinlock tickslock;) 135.4239 Tj
 0 -151.8938 Td
-(2563     break;) 65.5277 Tj
+(2563 int ticks;) 65.5277 Tj
 0 -161.3871 Td
-(2564   case IRQ_OFFSET + IRQ_SPURIOUS:) 166.0035 Tj
+(2564 ) 21.8426 Tj
 0 -170.8805 Td
-(2565     cprintf\("cpu%d: spurious interrupt at %x:%x\\n",) 244.6368 Tj
+(2565 void) 39.3166 Tj
 0 -180.3739 Td
-(2566             cpu\(\), tf->cs, tf->eip\);) 179.1091 Tj
+(2566 tvinit\(void\)) 74.2647 Tj
 0 -189.8672 Td
-(2567     lapic_eoi\(\);) 91.7388 Tj
+(2567 {) 26.2111 Tj
 0 -199.3606 Td
-(2568     break;) 65.5277 Tj
+(2568   int i;) 56.7907 Tj
 0 -208.8539 Td
 (2569 ) 21.8426 Tj
 0 -218.3473 Td
-(2570   default:) 65.5277 Tj
+(2570   for\(i = 0; i < 256; i++\)) 135.4239 Tj
 0 -227.8407 Td
-(2571     if\(cp == 0 || \(tf->cs&3\) == 0\){) 174.7406 Tj
+(2571     SETGATE\(idt[i], 0, SEG_KCODE<<3, vectors[i], 0\);) 249.0053 Tj
 0 -237.334 Td
-(2572       // In kernel, it must be our mistake.) 209.6887 Tj
+(2572   SETGATE\(idt[T_SYSCALL], 1, SEG_KCODE<<3, vectors[T_SYSC\
+ALL], DPL_USER\);) 340.7441 Tj
 0 -246.8274 Td
-(2573       cprintf\("unexpected trap %d from cpu %d eip %x\\n",) 266.4794 Tj
+(2573 ) 21.8426 Tj
 0 -256.3207 Td
-(2574               tf->trapno, cpu\(\), tf->eip\);) 205.3202 Tj
+(2574   initlock\(&tickslock, "time"\);) 157.2665 Tj
 0 -265.8141 Td
-(2575       panic\("trap"\);) 109.2129 Tj
+(2575 }) 26.2111 Tj
 0 -275.3075 Td
-(2576     }) 43.6851 Tj
+(2576 ) 21.8426 Tj
 0 -284.8008 Td
-(2577     // In user space, assume process misbehaved.) 231.5313 Tj
+(2577 void) 39.3166 Tj
 0 -294.2942 Td
-(2578     cprintf\("pid %d %s: trap %d err %d on cpu %d eip %x -\
-- kill proc\\n",) 336.3756 Tj
+(2578 idtinit\(void\)) 78.6333 Tj
 0 -303.7875 Td
-(2579             cp->pid, cp->name, tf->trapno, tf->err, cpu\(\)\
-, tf->eip\);) 318.9016 Tj
+(2579 {) 26.2111 Tj
 0 -313.2809 Td
-(2580     cp->killed = 1;) 104.8443 Tj
+(2580   lidt\(idt, sizeof\(idt\)\);) 131.0554 Tj
 0 -322.7743 Td
-(2581   }) 34.9481 Tj
+(2581 }) 26.2111 Tj
 0 -332.2676 Td
 (2582 ) 21.8426 Tj
 0 -341.761 Td
-(2583   // Force process exit if it has been killed and is in us\
-er space.) 314.533 Tj
+(2583 ) 21.8426 Tj
 0 -351.2543 Td
-(2584   // \(If it is still executing in the kernel, let it keep\
- running) 305.796 Tj
+(2584 ) 21.8426 Tj
 0 -360.7477 Td
-(2585   // until it gets to the regular system call return.\)) 257.7424 Tj
+(2585 ) 21.8426 Tj
 0 -370.2411 Td
-(2586   if\(cp && cp->killed && \(tf->cs&3\) == DPL_USER\)) 231.5313 Tj
+(2586 ) 21.8426 Tj
 0 -379.7344 Td
-(2587     exit\(\);) 69.8962 Tj
+(2587 ) 21.8426 Tj
 0 -389.2278 Td
 (2588 ) 21.8426 Tj
 0 -398.7211 Td
-(2589   // Force process to give up CPU on clock tick.) 231.5313 Tj
+(2589 ) 21.8426 Tj
 0 -408.2145 Td
-(2590   // If interrupts were on while locks held, would need to\
- check nlock.) 332.0071 Tj
+(2590 ) 21.8426 Tj
 0 -417.7079 Td
-(2591   if\(cp && cp->state == RUNNING && tf->trapno == IRQ_OFFS\
-ET+IRQ_TIMER\)) 327.6386 Tj
+(2591 ) 21.8426 Tj
 0 -427.2012 Td
-(2592     yield\(\);) 74.2647 Tj
+(2592 ) 21.8426 Tj
 0 -436.6946 Td
-(2593 }) 26.2111 Tj
+(2593 ) 21.8426 Tj
 0 -446.1879 Td
 (2594 ) 21.8426 Tj
 0 -455.6813 Td
@@ -10721,6 +10800,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -10738,107 +10819,107 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/syscall.h  Page 1) 174.7406 Tj
+(Aug  8 01:04 2009  xv6/trap.c  Page 2) 161.635 Tj
 0 -28.4801 Td
-(2600 // System call numbers) 117.9499 Tj
+(2600 void) 39.3166 Tj
 0 -37.9735 Td
-(2601 #define SYS_fork    1) 113.5814 Tj
+(2601 trap\(struct trapframe *tf\)) 135.4239 Tj
 0 -47.4668 Td
-(2602 #define SYS_exit    2) 113.5814 Tj
+(2602 {) 26.2111 Tj
 0 -56.9602 Td
-(2603 #define SYS_wait    3) 113.5814 Tj
+(2603   if\(tf->trapno == T_SYSCALL\){) 152.898 Tj
 0 -66.4535 Td
-(2604 #define SYS_pipe    4) 113.5814 Tj
+(2604     if\(cp->killed\)) 100.4758 Tj
 0 -75.9469 Td
-(2605 #define SYS_write   5) 113.5814 Tj
+(2605       exit\(\);) 78.6333 Tj
 0 -85.4403 Td
-(2606 #define SYS_read    6) 113.5814 Tj
+(2606     cp->tf = tf;) 91.7388 Tj
 0 -94.9336 Td
-(2607 #define SYS_close   7) 113.5814 Tj
+(2607     syscall\(\);) 83.0018 Tj
 0 -104.427 Td
-(2608 #define SYS_kill    8) 113.5814 Tj
+(2608     if\(cp->killed\)) 100.4758 Tj
 0 -113.9203 Td
-(2609 #define SYS_exec    9) 113.5814 Tj
+(2609       exit\(\);) 78.6333 Tj
 0 -123.4137 Td
-(2610 #define SYS_open   10) 113.5814 Tj
+(2610     return;) 69.8962 Tj
 0 -132.9071 Td
-(2611 #define SYS_mknod  11) 113.5814 Tj
+(2611   }) 34.9481 Tj
 0 -142.4004 Td
-(2612 #define SYS_unlink 12) 113.5814 Tj
+(2612 ) 21.8426 Tj
 0 -151.8938 Td
-(2613 #define SYS_fstat  13) 113.5814 Tj
+(2613   switch\(tf->trapno\){) 113.5814 Tj
 0 -161.3871 Td
-(2614 #define SYS_link   14) 113.5814 Tj
+(2614   case T_IRQ0 + IRQ_TIMER:) 135.4239 Tj
 0 -170.8805 Td
-(2615 #define SYS_mkdir  15) 113.5814 Tj
+(2615     if\(cpu\(\) == 0\){) 104.8443 Tj
 0 -180.3739 Td
-(2616 #define SYS_chdir  16) 113.5814 Tj
+(2616       acquire\(&tickslock\);) 135.4239 Tj
 0 -189.8672 Td
-(2617 #define SYS_dup    17) 113.5814 Tj
+(2617       ticks++;) 83.0018 Tj
 0 -199.3606 Td
-(2618 #define SYS_getpid 18) 113.5814 Tj
+(2618       wakeup\(&ticks\);) 113.5814 Tj
 0 -208.8539 Td
-(2619 #define SYS_sbrk   19) 113.5814 Tj
+(2619       release\(&tickslock\);) 135.4239 Tj
 0 -218.3473 Td
-(2620 #define SYS_sleep  20) 113.5814 Tj
+(2620     }) 43.6851 Tj
 0 -227.8407 Td
-(2621 ) 21.8426 Tj
+(2621     lapiceoi\(\);) 87.3703 Tj
 0 -237.334 Td
-(2622 ) 21.8426 Tj
+(2622     break;) 65.5277 Tj
 0 -246.8274 Td
-(2623 ) 21.8426 Tj
+(2623   case T_IRQ0 + IRQ_IDE:) 126.6869 Tj
 0 -256.3207 Td
-(2624 ) 21.8426 Tj
+(2624     ideintr\(\);) 83.0018 Tj
 0 -265.8141 Td
-(2625 ) 21.8426 Tj
+(2625     lapiceoi\(\);) 87.3703 Tj
 0 -275.3075 Td
-(2626 ) 21.8426 Tj
+(2626     break;) 65.5277 Tj
 0 -284.8008 Td
-(2627 ) 21.8426 Tj
+(2627   case T_IRQ0 + IRQ_KBD:) 126.6869 Tj
 0 -294.2942 Td
-(2628 ) 21.8426 Tj
+(2628     kbdintr\(\);) 83.0018 Tj
 0 -303.7875 Td
-(2629 ) 21.8426 Tj
+(2629     lapiceoi\(\);) 87.3703 Tj
 0 -313.2809 Td
-(2630 ) 21.8426 Tj
+(2630     break;) 65.5277 Tj
 0 -322.7743 Td
-(2631 ) 21.8426 Tj
+(2631   case T_IRQ0 + IRQ_COM1:) 131.0554 Tj
 0 -332.2676 Td
-(2632 ) 21.8426 Tj
+(2632     uartintr\(\);) 87.3703 Tj
 0 -341.761 Td
-(2633 ) 21.8426 Tj
+(2633     lapiceoi\(\);) 87.3703 Tj
 0 -351.2543 Td
-(2634 ) 21.8426 Tj
+(2634     break;) 65.5277 Tj
 0 -360.7477 Td
-(2635 ) 21.8426 Tj
+(2635   case T_IRQ0 + 7:) 100.4758 Tj
 0 -370.2411 Td
-(2636 ) 21.8426 Tj
+(2636   case T_IRQ0 + IRQ_SPURIOUS:) 148.5295 Tj
 0 -379.7344 Td
-(2637 ) 21.8426 Tj
+(2637     cprintf\("cpu%d: spurious interrupt at %x:%x\\n",) 244.6368 Tj
 0 -389.2278 Td
-(2638 ) 21.8426 Tj
+(2638             cpu\(\), tf->cs, tf->eip\);) 179.1091 Tj
 0 -398.7211 Td
-(2639 ) 21.8426 Tj
+(2639     lapiceoi\(\);) 87.3703 Tj
 0 -408.2145 Td
-(2640 ) 21.8426 Tj
+(2640     break;) 65.5277 Tj
 0 -417.7079 Td
 (2641 ) 21.8426 Tj
 0 -427.2012 Td
-(2642 ) 21.8426 Tj
+(2642   default:) 65.5277 Tj
 0 -436.6946 Td
-(2643 ) 21.8426 Tj
+(2643     if\(cp == 0 || \(tf->cs&3\) == 0\){) 174.7406 Tj
 0 -446.1879 Td
-(2644 ) 21.8426 Tj
+(2644       // In kernel, it must be our mistake.) 209.6887 Tj
 0 -455.6813 Td
-(2645 ) 21.8426 Tj
+(2645       cprintf\("unexpected trap %d from cpu %d eip %x\\n",) 266.4794 Tj
 0 -465.1747 Td
-(2646 ) 21.8426 Tj
+(2646               tf->trapno, cpu\(\), tf->eip\);) 205.3202 Tj
 0 -474.668 Td
-(2647 ) 21.8426 Tj
+(2647       panic\("trap"\);) 109.2129 Tj
 0 -484.1614 Td
-(2648 ) 21.8426 Tj
+(2648     }) 43.6851 Tj
 0 -493.6547 Td
-(2649 ) 21.8426 Tj
+(2649     // In user space, assume process misbehaved.) 231.5313 Tj
 0 -522.1348 Td
 (Sheet 26) 34.9481 Tj
 Q
@@ -10857,106 +10938,109 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/syscall.c  Page 1) 174.7406 Tj
+(Aug  8 01:04 2009  xv6/trap.c  Page 3) 161.635 Tj
 0 -28.4801 Td
-(2650 #include "types.h") 100.4758 Tj
+(2650     cprintf\("pid %d %s: trap %d err %d on cpu %d eip %x -\
+- kill proc\\n",) 336.3756 Tj
 0 -37.9735 Td
-(2651 #include "defs.h") 96.1073 Tj
+(2651             cp->pid, cp->name, tf->trapno, tf->err, cpu\(\)\
+, tf->eip\);) 318.9016 Tj
 0 -47.4668 Td
-(2652 #include "param.h") 100.4758 Tj
+(2652     cp->killed = 1;) 104.8443 Tj
 0 -56.9602 Td
-(2653 #include "mmu.h") 91.7388 Tj
+(2653   }) 34.9481 Tj
 0 -66.4535 Td
-(2654 #include "proc.h") 96.1073 Tj
+(2654 ) 21.8426 Tj
 0 -75.9469 Td
-(2655 #include "x86.h") 91.7388 Tj
+(2655   // Force process exit if it has been killed and is in us\
+er space.) 314.533 Tj
 0 -85.4403 Td
-(2656 #include "syscall.h") 109.2129 Tj
+(2656   // \(If it is still executing in the kernel, let it keep\
+ running) 305.796 Tj
 0 -94.9336 Td
-(2657 ) 21.8426 Tj
+(2657   // until it gets to the regular system call return.\)) 257.7424 Tj
 0 -104.427 Td
-(2658 // User code makes a system call with INT T_SYSCALL.) 249.0053 Tj
+(2658   if\(cp && cp->killed && \(tf->cs&3\) == DPL_USER\)) 231.5313 Tj
 0 -113.9203 Td
-(2659 // System call number in %eax.) 152.898 Tj
+(2659     exit\(\);) 69.8962 Tj
 0 -123.4137 Td
-(2660 // Arguments on the stack, from the user call to the C) 257.7424 Tj
+(2660 ) 21.8426 Tj
 0 -132.9071 Td
-(2661 // library system call function. The saved user %esp point\
-s) 279.5849 Tj
+(2661   // Force process to give up CPU on clock tick.) 231.5313 Tj
 0 -142.4004 Td
-(2662 // to a saved program counter, and then the first argument\
-.) 279.5849 Tj
+(2662   // If interrupts were on while locks held, would need to\
+ check nlock.) 332.0071 Tj
 0 -151.8938 Td
-(2663 ) 21.8426 Tj
+(2663   if\(cp && cp->state == RUNNING && tf->trapno == T_IRQ0+I\
+RQ_TIMER\)) 310.1645 Tj
 0 -161.3871 Td
-(2664 // Fetch the int at addr from process p.) 196.5831 Tj
+(2664     yield\(\);) 74.2647 Tj
 0 -170.8805 Td
-(2665 int) 34.9481 Tj
+(2665 ) 21.8426 Tj
 0 -180.3739 Td
-(2666 fetchint\(struct proc *p, uint addr, int *ip\)) 214.0572 Tj
+(2666   // Check if the process has been killed since we yielded) 275.2164 Tj
 0 -189.8672 Td
-(2667 {) 26.2111 Tj
+(2667   if\(cp && cp->killed && \(tf->cs&3\) == DPL_USER\)) 231.5313 Tj
 0 -199.3606 Td
-(2668   if\(addr >= p->sz || addr+4 > p->sz\)) 183.4776 Tj
+(2668     exit\(\);) 69.8962 Tj
 0 -208.8539 Td
-(2669     return -1;) 83.0018 Tj
+(2669 }) 26.2111 Tj
 0 -218.3473 Td
-(2670   *ip = *\(int*\)\(p->mem + addr\);) 157.2665 Tj
+(2670 ) 21.8426 Tj
 0 -227.8407 Td
-(2671   return 0;) 69.8962 Tj
+(2671 ) 21.8426 Tj
 0 -237.334 Td
-(2672 }) 26.2111 Tj
+(2672 ) 21.8426 Tj
 0 -246.8274 Td
 (2673 ) 21.8426 Tj
 0 -256.3207 Td
-(2674 // Fetch the nul-terminated string at addr from process p.) 275.2164 Tj
+(2674 ) 21.8426 Tj
 0 -265.8141 Td
-(2675 // Doesn't actually copy the string - just sets *pp to poi\
-nt at it.) 314.533 Tj
+(2675 ) 21.8426 Tj
 0 -275.3075 Td
-(2676 // Returns length of string, not including nul.) 227.1628 Tj
+(2676 ) 21.8426 Tj
 0 -284.8008 Td
-(2677 int) 34.9481 Tj
+(2677 ) 21.8426 Tj
 0 -294.2942 Td
-(2678 fetchstr\(struct proc *p, uint addr, char **pp\)) 222.7942 Tj
+(2678 ) 21.8426 Tj
 0 -303.7875 Td
-(2679 {) 26.2111 Tj
+(2679 ) 21.8426 Tj
 0 -313.2809 Td
-(2680   char *s, *ep;) 87.3703 Tj
+(2680 ) 21.8426 Tj
 0 -322.7743 Td
 (2681 ) 21.8426 Tj
 0 -332.2676 Td
-(2682   if\(addr >= p->sz\)) 104.8443 Tj
+(2682 ) 21.8426 Tj
 0 -341.761 Td
-(2683     return -1;) 83.0018 Tj
+(2683 ) 21.8426 Tj
 0 -351.2543 Td
-(2684   *pp = p->mem + addr;) 117.9499 Tj
+(2684 ) 21.8426 Tj
 0 -360.7477 Td
-(2685   ep = p->mem + p->sz;) 117.9499 Tj
+(2685 ) 21.8426 Tj
 0 -370.2411 Td
-(2686   for\(s = *pp; s < ep; s++\)) 139.7925 Tj
+(2686 ) 21.8426 Tj
 0 -379.7344 Td
-(2687     if\(*s == 0\)) 87.3703 Tj
+(2687 ) 21.8426 Tj
 0 -389.2278 Td
-(2688       return s - *pp;) 113.5814 Tj
+(2688 ) 21.8426 Tj
 0 -398.7211 Td
-(2689   return -1;) 74.2647 Tj
+(2689 ) 21.8426 Tj
 0 -408.2145 Td
-(2690 }) 26.2111 Tj
+(2690 ) 21.8426 Tj
 0 -417.7079 Td
 (2691 ) 21.8426 Tj
 0 -427.2012 Td
-(2692 // Fetch the nth 32-bit system call argument.) 218.4257 Tj
+(2692 ) 21.8426 Tj
 0 -436.6946 Td
-(2693 int) 34.9481 Tj
+(2693 ) 21.8426 Tj
 0 -446.1879 Td
-(2694 argint\(int n, int *ip\)) 117.9499 Tj
+(2694 ) 21.8426 Tj
 0 -455.6813 Td
-(2695 {) 26.2111 Tj
+(2695 ) 21.8426 Tj
 0 -465.1747 Td
-(2696   return fetchint\(cp, cp->tf->esp + 4 + 4*n, ip\);) 235.8998 Tj
+(2696 ) 21.8426 Tj
 0 -474.668 Td
-(2697 }) 26.2111 Tj
+(2697 ) 21.8426 Tj
 0 -484.1614 Td
 (2698 ) 21.8426 Tj
 0 -493.6547 Td
@@ -10991,6 +11075,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -11008,110 +11094,105 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/syscall.c  Page 2) 174.7406 Tj
+(Aug  8 01:04 2009  xv6/syscall.h  Page 1) 174.7406 Tj
 0 -28.4801 Td
-(2700 // Fetch the nth word-sized system call argument as a poin\
-ter) 288.322 Tj
+(2700 // System call numbers) 117.9499 Tj
 0 -37.9735 Td
-(2701 // to a block of memory of size n bytes.  Check that the p\
-ointer) 301.4275 Tj
+(2701 #define SYS_fork    1) 113.5814 Tj
 0 -47.4668 Td
-(2702 // lies within the process address space.) 200.9517 Tj
+(2702 #define SYS_exit    2) 113.5814 Tj
 0 -56.9602 Td
-(2703 int) 34.9481 Tj
+(2703 #define SYS_wait    3) 113.5814 Tj
 0 -66.4535 Td
-(2704 argptr\(int n, char **pp, int size\)) 170.3721 Tj
+(2704 #define SYS_pipe    4) 113.5814 Tj
 0 -75.9469 Td
-(2705 {) 26.2111 Tj
+(2705 #define SYS_write   5) 113.5814 Tj
 0 -85.4403 Td
-(2706   int i;) 56.7907 Tj
+(2706 #define SYS_read    6) 113.5814 Tj
 0 -94.9336 Td
-(2707 ) 21.8426 Tj
+(2707 #define SYS_close   7) 113.5814 Tj
 0 -104.427 Td
-(2708   if\(argint\(n, &i\) < 0\)) 122.3184 Tj
+(2708 #define SYS_kill    8) 113.5814 Tj
 0 -113.9203 Td
-(2709     return -1;) 83.0018 Tj
+(2709 #define SYS_exec    9) 113.5814 Tj
 0 -123.4137 Td
-(2710   if\(\(uint\)i >= cp->sz || \(uint\)i+size >= cp->sz\)) 235.8998 Tj
+(2710 #define SYS_open   10) 113.5814 Tj
 0 -132.9071 Td
-(2711     return -1;) 83.0018 Tj
+(2711 #define SYS_mknod  11) 113.5814 Tj
 0 -142.4004 Td
-(2712   *pp = cp->mem + i;) 109.2129 Tj
+(2712 #define SYS_unlink 12) 113.5814 Tj
 0 -151.8938 Td
-(2713   return 0;) 69.8962 Tj
+(2713 #define SYS_fstat  13) 113.5814 Tj
 0 -161.3871 Td
-(2714 }) 26.2111 Tj
+(2714 #define SYS_link   14) 113.5814 Tj
 0 -170.8805 Td
-(2715 ) 21.8426 Tj
+(2715 #define SYS_mkdir  15) 113.5814 Tj
 0 -180.3739 Td
-(2716 // Fetch the nth word-sized system call argument as a stri\
-ng pointer.) 323.2701 Tj
+(2716 #define SYS_chdir  16) 113.5814 Tj
 0 -189.8672 Td
-(2717 // Check that the pointer is valid and the string is nul-t\
-erminated.) 318.9016 Tj
+(2717 #define SYS_dup    17) 113.5814 Tj
 0 -199.3606 Td
-(2718 // \(There is no shared writable memory, so the string can\
-'t change) 310.1645 Tj
+(2718 #define SYS_getpid 18) 113.5814 Tj
 0 -208.8539 Td
-(2719 // between this check and being used by the kernel.\)) 249.0053 Tj
+(2719 #define SYS_sbrk   19) 113.5814 Tj
 0 -218.3473 Td
-(2720 int) 34.9481 Tj
+(2720 #define SYS_sleep  20) 113.5814 Tj
 0 -227.8407 Td
-(2721 argstr\(int n, char **pp\)) 126.6869 Tj
+(2721 ) 21.8426 Tj
 0 -237.334 Td
-(2722 {) 26.2111 Tj
+(2722 ) 21.8426 Tj
 0 -246.8274 Td
-(2723   int addr;) 69.8962 Tj
+(2723 ) 21.8426 Tj
 0 -256.3207 Td
-(2724   if\(argint\(n, &addr\) < 0\)) 135.4239 Tj
+(2724 ) 21.8426 Tj
 0 -265.8141 Td
-(2725     return -1;) 83.0018 Tj
+(2725 ) 21.8426 Tj
 0 -275.3075 Td
-(2726   return fetchstr\(cp, addr, pp\);) 161.635 Tj
+(2726 ) 21.8426 Tj
 0 -284.8008 Td
-(2727 }) 26.2111 Tj
+(2727 ) 21.8426 Tj
 0 -294.2942 Td
 (2728 ) 21.8426 Tj
 0 -303.7875 Td
-(2729 extern int sys_chdir\(void\);) 139.7925 Tj
+(2729 ) 21.8426 Tj
 0 -313.2809 Td
-(2730 extern int sys_close\(void\);) 139.7925 Tj
+(2730 ) 21.8426 Tj
 0 -322.7743 Td
-(2731 extern int sys_dup\(void\);) 131.0554 Tj
+(2731 ) 21.8426 Tj
 0 -332.2676 Td
-(2732 extern int sys_exec\(void\);) 135.4239 Tj
+(2732 ) 21.8426 Tj
 0 -341.761 Td
-(2733 extern int sys_exit\(void\);) 135.4239 Tj
+(2733 ) 21.8426 Tj
 0 -351.2543 Td
-(2734 extern int sys_fork\(void\);) 135.4239 Tj
+(2734 ) 21.8426 Tj
 0 -360.7477 Td
-(2735 extern int sys_fstat\(void\);) 139.7925 Tj
+(2735 ) 21.8426 Tj
 0 -370.2411 Td
-(2736 extern int sys_getpid\(void\);) 144.161 Tj
+(2736 ) 21.8426 Tj
 0 -379.7344 Td
-(2737 extern int sys_kill\(void\);) 135.4239 Tj
+(2737 ) 21.8426 Tj
 0 -389.2278 Td
-(2738 extern int sys_link\(void\);) 135.4239 Tj
+(2738 ) 21.8426 Tj
 0 -398.7211 Td
-(2739 extern int sys_mkdir\(void\);) 139.7925 Tj
+(2739 ) 21.8426 Tj
 0 -408.2145 Td
-(2740 extern int sys_mknod\(void\);) 139.7925 Tj
+(2740 ) 21.8426 Tj
 0 -417.7079 Td
-(2741 extern int sys_open\(void\);) 135.4239 Tj
+(2741 ) 21.8426 Tj
 0 -427.2012 Td
-(2742 extern int sys_pipe\(void\);) 135.4239 Tj
+(2742 ) 21.8426 Tj
 0 -436.6946 Td
-(2743 extern int sys_read\(void\);) 135.4239 Tj
+(2743 ) 21.8426 Tj
 0 -446.1879 Td
-(2744 extern int sys_sbrk\(void\);) 135.4239 Tj
+(2744 ) 21.8426 Tj
 0 -455.6813 Td
-(2745 extern int sys_sleep\(void\);) 139.7925 Tj
+(2745 ) 21.8426 Tj
 0 -465.1747 Td
-(2746 extern int sys_unlink\(void\);) 144.161 Tj
+(2746 ) 21.8426 Tj
 0 -474.668 Td
-(2747 extern int sys_wait\(void\);) 135.4239 Tj
+(2747 ) 21.8426 Tj
 0 -484.1614 Td
-(2748 extern int sys_write\(void\);) 139.7925 Tj
+(2748 ) 21.8426 Tj
 0 -493.6547 Td
 (2749 ) 21.8426 Tj
 0 -522.1348 Td
@@ -11132,104 +11213,106 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/syscall.c  Page 3) 174.7406 Tj
+(Aug  8 01:04 2009  xv6/syscall.c  Page 1) 174.7406 Tj
 0 -28.4801 Td
-(2750 static int \(*syscalls[]\)\(void\) = {) 170.3721 Tj
+(2750 #include "types.h") 100.4758 Tj
 0 -37.9735 Td
-(2751 [SYS_chdir]   sys_chdir,) 126.6869 Tj
+(2751 #include "defs.h") 96.1073 Tj
 0 -47.4668 Td
-(2752 [SYS_close]   sys_close,) 126.6869 Tj
+(2752 #include "param.h") 100.4758 Tj
 0 -56.9602 Td
-(2753 [SYS_dup]     sys_dup,) 117.9499 Tj
+(2753 #include "mmu.h") 91.7388 Tj
 0 -66.4535 Td
-(2754 [SYS_exec]    sys_exec,) 122.3184 Tj
+(2754 #include "proc.h") 96.1073 Tj
 0 -75.9469 Td
-(2755 [SYS_exit]    sys_exit,) 122.3184 Tj
+(2755 #include "x86.h") 91.7388 Tj
 0 -85.4403 Td
-(2756 [SYS_fork]    sys_fork,) 122.3184 Tj
+(2756 #include "syscall.h") 109.2129 Tj
 0 -94.9336 Td
-(2757 [SYS_fstat]   sys_fstat,) 126.6869 Tj
+(2757 ) 21.8426 Tj
 0 -104.427 Td
-(2758 [SYS_getpid]  sys_getpid,) 131.0554 Tj
+(2758 // User code makes a system call with INT T_SYSCALL.) 249.0053 Tj
 0 -113.9203 Td
-(2759 [SYS_kill]    sys_kill,) 122.3184 Tj
+(2759 // System call number in %eax.) 152.898 Tj
 0 -123.4137 Td
-(2760 [SYS_link]    sys_link,) 122.3184 Tj
+(2760 // Arguments on the stack, from the user call to the C) 257.7424 Tj
 0 -132.9071 Td
-(2761 [SYS_mkdir]   sys_mkdir,) 126.6869 Tj
+(2761 // library system call function. The saved user %esp point\
+s) 279.5849 Tj
 0 -142.4004 Td
-(2762 [SYS_mknod]   sys_mknod,) 126.6869 Tj
+(2762 // to a saved program counter, and then the first argument\
+.) 279.5849 Tj
 0 -151.8938 Td
-(2763 [SYS_open]    sys_open,) 122.3184 Tj
+(2763 ) 21.8426 Tj
 0 -161.3871 Td
-(2764 [SYS_pipe]    sys_pipe,) 122.3184 Tj
+(2764 // Fetch the int at addr from process p.) 196.5831 Tj
 0 -170.8805 Td
-(2765 [SYS_read]    sys_read,) 122.3184 Tj
+(2765 int) 34.9481 Tj
 0 -180.3739 Td
-(2766 [SYS_sbrk]    sys_sbrk,) 122.3184 Tj
+(2766 fetchint\(struct proc *p, uint addr, int *ip\)) 214.0572 Tj
 0 -189.8672 Td
-(2767 [SYS_sleep]   sys_sleep,) 126.6869 Tj
+(2767 {) 26.2111 Tj
 0 -199.3606 Td
-(2768 [SYS_unlink]  sys_unlink,) 131.0554 Tj
+(2768   if\(addr >= p->sz || addr+4 > p->sz\)) 183.4776 Tj
 0 -208.8539 Td
-(2769 [SYS_wait]    sys_wait,) 122.3184 Tj
+(2769     return -1;) 83.0018 Tj
 0 -218.3473 Td
-(2770 [SYS_write]   sys_write,) 126.6869 Tj
+(2770   *ip = *\(int*\)\(p->mem + addr\);) 157.2665 Tj
 0 -227.8407 Td
-(2771 };) 30.5796 Tj
+(2771   return 0;) 69.8962 Tj
 0 -237.334 Td
-(2772 ) 21.8426 Tj
+(2772 }) 26.2111 Tj
 0 -246.8274 Td
-(2773 void) 39.3166 Tj
+(2773 ) 21.8426 Tj
 0 -256.3207 Td
-(2774 syscall\(void\)) 78.6333 Tj
+(2774 // Fetch the nul-terminated string at addr from process p.) 275.2164 Tj
 0 -265.8141 Td
-(2775 {) 26.2111 Tj
+(2775 // Doesn't actually copy the string - just sets *pp to poi\
+nt at it.) 314.533 Tj
 0 -275.3075 Td
-(2776   int num;) 65.5277 Tj
+(2776 // Returns length of string, not including nul.) 227.1628 Tj
 0 -284.8008 Td
-(2777 ) 21.8426 Tj
+(2777 int) 34.9481 Tj
 0 -294.2942 Td
-(2778   num = cp->tf->eax;) 109.2129 Tj
+(2778 fetchstr\(struct proc *p, uint addr, char **pp\)) 222.7942 Tj
 0 -303.7875 Td
-(2779   if\(num >= 0 && num < NELEM\(syscalls\) && syscalls[num]\
-\)) 266.4794 Tj
+(2779 {) 26.2111 Tj
 0 -313.2809 Td
-(2780     cp->tf->eax = syscalls[num]\(\);) 170.3721 Tj
+(2780   char *s, *ep;) 87.3703 Tj
 0 -322.7743 Td
-(2781   else {) 56.7907 Tj
+(2781 ) 21.8426 Tj
 0 -332.2676 Td
-(2782     cprintf\("%d %s: unknown sys call %d\\n",) 209.6887 Tj
+(2782   if\(addr >= p->sz\)) 104.8443 Tj
 0 -341.761 Td
-(2783             cp->pid, cp->name, num\);) 179.1091 Tj
+(2783     return -1;) 83.0018 Tj
 0 -351.2543 Td
-(2784     cp->tf->eax = -1;) 113.5814 Tj
+(2784   *pp = p->mem + addr;) 117.9499 Tj
 0 -360.7477 Td
-(2785   }) 34.9481 Tj
+(2785   ep = p->mem + p->sz;) 117.9499 Tj
 0 -370.2411 Td
-(2786 }) 26.2111 Tj
+(2786   for\(s = *pp; s < ep; s++\)) 139.7925 Tj
 0 -379.7344 Td
-(2787 ) 21.8426 Tj
+(2787     if\(*s == 0\)) 87.3703 Tj
 0 -389.2278 Td
-(2788 ) 21.8426 Tj
+(2788       return s - *pp;) 113.5814 Tj
 0 -398.7211 Td
-(2789 ) 21.8426 Tj
+(2789   return -1;) 74.2647 Tj
 0 -408.2145 Td
-(2790 ) 21.8426 Tj
+(2790 }) 26.2111 Tj
 0 -417.7079 Td
 (2791 ) 21.8426 Tj
 0 -427.2012 Td
-(2792 ) 21.8426 Tj
+(2792 // Fetch the nth 32-bit system call argument.) 218.4257 Tj
 0 -436.6946 Td
-(2793 ) 21.8426 Tj
+(2793 int) 34.9481 Tj
 0 -446.1879 Td
-(2794 ) 21.8426 Tj
+(2794 argint\(int n, int *ip\)) 117.9499 Tj
 0 -455.6813 Td
-(2795 ) 21.8426 Tj
+(2795 {) 26.2111 Tj
 0 -465.1747 Td
-(2796 ) 21.8426 Tj
+(2796   return fetchint\(cp, cp->tf->esp + 4 + 4*n, ip\);) 235.8998 Tj
 0 -474.668 Td
-(2797 ) 21.8426 Tj
+(2797 }) 26.2111 Tj
 0 -484.1614 Td
 (2798 ) 21.8426 Tj
 0 -493.6547 Td
@@ -11264,6 +11347,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -11281,105 +11366,110 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/sysproc.c  Page 1) 174.7406 Tj
+(Aug  8 01:04 2009  xv6/syscall.c  Page 2) 174.7406 Tj
 0 -28.4801 Td
-(2800 #include "types.h") 100.4758 Tj
+(2800 // Fetch the nth word-sized system call argument as a poin\
+ter) 288.322 Tj
 0 -37.9735 Td
-(2801 #include "defs.h") 96.1073 Tj
+(2801 // to a block of memory of size n bytes.  Check that the p\
+ointer) 301.4275 Tj
 0 -47.4668 Td
-(2802 #include "param.h") 100.4758 Tj
+(2802 // lies within the process address space.) 200.9517 Tj
 0 -56.9602 Td
-(2803 #include "mmu.h") 91.7388 Tj
+(2803 int) 34.9481 Tj
 0 -66.4535 Td
-(2804 #include "proc.h") 96.1073 Tj
+(2804 argptr\(int n, char **pp, int size\)) 170.3721 Tj
 0 -75.9469 Td
-(2805 ) 21.8426 Tj
+(2805 {) 26.2111 Tj
 0 -85.4403 Td
-(2806 int) 34.9481 Tj
+(2806   int i;) 56.7907 Tj
 0 -94.9336 Td
-(2807 sys_fork\(void\)) 83.0018 Tj
+(2807 ) 21.8426 Tj
 0 -104.427 Td
-(2808 {) 26.2111 Tj
+(2808   if\(argint\(n, &i\) < 0\)) 122.3184 Tj
 0 -113.9203 Td
-(2809   int pid;) 65.5277 Tj
+(2809     return -1;) 83.0018 Tj
 0 -123.4137 Td
-(2810   struct proc *np;) 100.4758 Tj
+(2810   if\(\(uint\)i >= cp->sz || \(uint\)i+size >= cp->sz\)) 235.8998 Tj
 0 -132.9071 Td
-(2811 ) 21.8426 Tj
+(2811     return -1;) 83.0018 Tj
 0 -142.4004 Td
-(2812   if\(\(np = copyproc\(cp\)\) == 0\)) 152.898 Tj
+(2812   *pp = cp->mem + i;) 109.2129 Tj
 0 -151.8938 Td
-(2813     return -1;) 83.0018 Tj
+(2813   return 0;) 69.8962 Tj
 0 -161.3871 Td
-(2814   pid = np->pid;) 91.7388 Tj
+(2814 }) 26.2111 Tj
 0 -170.8805 Td
-(2815   np->state = RUNNABLE;) 122.3184 Tj
+(2815 ) 21.8426 Tj
 0 -180.3739 Td
-(2816   return pid;) 78.6333 Tj
+(2816 // Fetch the nth word-sized system call argument as a stri\
+ng pointer.) 323.2701 Tj
 0 -189.8672 Td
-(2817 }) 26.2111 Tj
+(2817 // Check that the pointer is valid and the string is nul-t\
+erminated.) 318.9016 Tj
 0 -199.3606 Td
-(2818 ) 21.8426 Tj
+(2818 // \(There is no shared writable memory, so the string can\
+'t change) 310.1645 Tj
 0 -208.8539 Td
-(2819 int) 34.9481 Tj
+(2819 // between this check and being used by the kernel.\)) 249.0053 Tj
 0 -218.3473 Td
-(2820 sys_exit\(void\)) 83.0018 Tj
+(2820 int) 34.9481 Tj
 0 -227.8407 Td
-(2821 {) 26.2111 Tj
+(2821 argstr\(int n, char **pp\)) 126.6869 Tj
 0 -237.334 Td
-(2822   exit\(\);) 61.1592 Tj
+(2822 {) 26.2111 Tj
 0 -246.8274 Td
-(2823   return 0;  // not reached) 139.7925 Tj
+(2823   int addr;) 69.8962 Tj
 0 -256.3207 Td
-(2824 }) 26.2111 Tj
+(2824   if\(argint\(n, &addr\) < 0\)) 135.4239 Tj
 0 -265.8141 Td
-(2825 ) 21.8426 Tj
+(2825     return -1;) 83.0018 Tj
 0 -275.3075 Td
-(2826 int) 34.9481 Tj
+(2826   return fetchstr\(cp, addr, pp\);) 161.635 Tj
 0 -284.8008 Td
-(2827 sys_wait\(void\)) 83.0018 Tj
+(2827 }) 26.2111 Tj
 0 -294.2942 Td
-(2828 {) 26.2111 Tj
+(2828 ) 21.8426 Tj
 0 -303.7875 Td
-(2829   return wait\(\);) 91.7388 Tj
+(2829 extern int sys_chdir\(void\);) 139.7925 Tj
 0 -313.2809 Td
-(2830 }) 26.2111 Tj
+(2830 extern int sys_close\(void\);) 139.7925 Tj
 0 -322.7743 Td
-(2831 ) 21.8426 Tj
+(2831 extern int sys_dup\(void\);) 131.0554 Tj
 0 -332.2676 Td
-(2832 int) 34.9481 Tj
+(2832 extern int sys_exec\(void\);) 135.4239 Tj
 0 -341.761 Td
-(2833 sys_kill\(void\)) 83.0018 Tj
+(2833 extern int sys_exit\(void\);) 135.4239 Tj
 0 -351.2543 Td
-(2834 {) 26.2111 Tj
+(2834 extern int sys_fork\(void\);) 135.4239 Tj
 0 -360.7477 Td
-(2835   int pid;) 65.5277 Tj
+(2835 extern int sys_fstat\(void\);) 139.7925 Tj
 0 -370.2411 Td
-(2836 ) 21.8426 Tj
+(2836 extern int sys_getpid\(void\);) 144.161 Tj
 0 -379.7344 Td
-(2837   if\(argint\(0, &pid\) < 0\)) 131.0554 Tj
+(2837 extern int sys_kill\(void\);) 135.4239 Tj
 0 -389.2278 Td
-(2838     return -1;) 83.0018 Tj
+(2838 extern int sys_link\(void\);) 135.4239 Tj
 0 -398.7211 Td
-(2839   return kill\(pid\);) 104.8443 Tj
+(2839 extern int sys_mkdir\(void\);) 139.7925 Tj
 0 -408.2145 Td
-(2840 }) 26.2111 Tj
+(2840 extern int sys_mknod\(void\);) 139.7925 Tj
 0 -417.7079 Td
-(2841 ) 21.8426 Tj
+(2841 extern int sys_open\(void\);) 135.4239 Tj
 0 -427.2012 Td
-(2842 int) 34.9481 Tj
+(2842 extern int sys_pipe\(void\);) 135.4239 Tj
 0 -436.6946 Td
-(2843 sys_getpid\(void\)) 91.7388 Tj
+(2843 extern int sys_read\(void\);) 135.4239 Tj
 0 -446.1879 Td
-(2844 {) 26.2111 Tj
+(2844 extern int sys_sbrk\(void\);) 135.4239 Tj
 0 -455.6813 Td
-(2845   return cp->pid;) 96.1073 Tj
+(2845 extern int sys_sleep\(void\);) 139.7925 Tj
 0 -465.1747 Td
-(2846 }) 26.2111 Tj
+(2846 extern int sys_unlink\(void\);) 144.161 Tj
 0 -474.668 Td
-(2847 ) 21.8426 Tj
+(2847 extern int sys_wait\(void\);) 135.4239 Tj
 0 -484.1614 Td
-(2848 ) 21.8426 Tj
+(2848 extern int sys_write\(void\);) 139.7925 Tj
 0 -493.6547 Td
 (2849 ) 21.8426 Tj
 0 -522.1348 Td
@@ -11400,81 +11490,82 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/sysproc.c  Page 2) 174.7406 Tj
+(Aug  8 01:04 2009  xv6/syscall.c  Page 3) 174.7406 Tj
 0 -28.4801 Td
-(2850 int) 34.9481 Tj
+(2850 static int \(*syscalls[]\)\(void\) = {) 170.3721 Tj
 0 -37.9735 Td
-(2851 sys_sbrk\(void\)) 83.0018 Tj
+(2851 [SYS_chdir]   sys_chdir,) 126.6869 Tj
 0 -47.4668 Td
-(2852 {) 26.2111 Tj
+(2852 [SYS_close]   sys_close,) 126.6869 Tj
 0 -56.9602 Td
-(2853   int addr;) 69.8962 Tj
+(2853 [SYS_dup]     sys_dup,) 117.9499 Tj
 0 -66.4535 Td
-(2854   int n;) 56.7907 Tj
+(2854 [SYS_exec]    sys_exec,) 122.3184 Tj
 0 -75.9469 Td
-(2855 ) 21.8426 Tj
+(2855 [SYS_exit]    sys_exit,) 122.3184 Tj
 0 -85.4403 Td
-(2856   if\(argint\(0, &n\) < 0\)) 122.3184 Tj
+(2856 [SYS_fork]    sys_fork,) 122.3184 Tj
 0 -94.9336 Td
-(2857     return -1;) 83.0018 Tj
+(2857 [SYS_fstat]   sys_fstat,) 126.6869 Tj
 0 -104.427 Td
-(2858   if\(\(addr = growproc\(n\)\) < 0\)) 152.898 Tj
+(2858 [SYS_getpid]  sys_getpid,) 131.0554 Tj
 0 -113.9203 Td
-(2859     return -1;) 83.0018 Tj
+(2859 [SYS_kill]    sys_kill,) 122.3184 Tj
 0 -123.4137 Td
-(2860   return addr;) 83.0018 Tj
+(2860 [SYS_link]    sys_link,) 122.3184 Tj
 0 -132.9071 Td
-(2861 }) 26.2111 Tj
+(2861 [SYS_mkdir]   sys_mkdir,) 126.6869 Tj
 0 -142.4004 Td
-(2862 ) 21.8426 Tj
+(2862 [SYS_mknod]   sys_mknod,) 126.6869 Tj
 0 -151.8938 Td
-(2863 int) 34.9481 Tj
+(2863 [SYS_open]    sys_open,) 122.3184 Tj
 0 -161.3871 Td
-(2864 sys_sleep\(void\)) 87.3703 Tj
+(2864 [SYS_pipe]    sys_pipe,) 122.3184 Tj
 0 -170.8805 Td
-(2865 {) 26.2111 Tj
+(2865 [SYS_read]    sys_read,) 122.3184 Tj
 0 -180.3739 Td
-(2866   int n, ticks0;) 91.7388 Tj
+(2866 [SYS_sbrk]    sys_sbrk,) 122.3184 Tj
 0 -189.8672 Td
-(2867 ) 21.8426 Tj
+(2867 [SYS_sleep]   sys_sleep,) 126.6869 Tj
 0 -199.3606 Td
-(2868   if\(argint\(0, &n\) < 0\)) 122.3184 Tj
+(2868 [SYS_unlink]  sys_unlink,) 131.0554 Tj
 0 -208.8539 Td
-(2869     return -1;) 83.0018 Tj
+(2869 [SYS_wait]    sys_wait,) 122.3184 Tj
 0 -218.3473 Td
-(2870   acquire\(&tickslock\);) 117.9499 Tj
+(2870 [SYS_write]   sys_write,) 126.6869 Tj
 0 -227.8407 Td
-(2871   ticks0 = ticks;) 96.1073 Tj
+(2871 };) 30.5796 Tj
 0 -237.334 Td
-(2872   while\(ticks - ticks0 < n\){) 144.161 Tj
+(2872 ) 21.8426 Tj
 0 -246.8274 Td
-(2873     if\(cp->killed\){) 104.8443 Tj
+(2873 void) 39.3166 Tj
 0 -256.3207 Td
-(2874       release\(&tickslock\);) 135.4239 Tj
+(2874 syscall\(void\)) 78.6333 Tj
 0 -265.8141 Td
-(2875       return -1;) 91.7388 Tj
+(2875 {) 26.2111 Tj
 0 -275.3075 Td
-(2876     }) 43.6851 Tj
+(2876   int num;) 65.5277 Tj
 0 -284.8008 Td
-(2877     sleep\(&ticks, &tickslock\);) 152.898 Tj
+(2877 ) 21.8426 Tj
 0 -294.2942 Td
-(2878   }) 34.9481 Tj
+(2878   num = cp->tf->eax;) 109.2129 Tj
 0 -303.7875 Td
-(2879   release\(&tickslock\);) 117.9499 Tj
+(2879   if\(num >= 0 && num < NELEM\(syscalls\) && syscalls[num]\
+\)) 266.4794 Tj
 0 -313.2809 Td
-(2880   return 0;) 69.8962 Tj
+(2880     cp->tf->eax = syscalls[num]\(\);) 170.3721 Tj
 0 -322.7743 Td
-(2881 }) 26.2111 Tj
+(2881   else {) 56.7907 Tj
 0 -332.2676 Td
-(2882 ) 21.8426 Tj
+(2882     cprintf\("%d %s: unknown sys call %d\\n",) 209.6887 Tj
 0 -341.761 Td
-(2883 ) 21.8426 Tj
+(2883             cp->pid, cp->name, num\);) 179.1091 Tj
 0 -351.2543 Td
-(2884 ) 21.8426 Tj
+(2884     cp->tf->eax = -1;) 113.5814 Tj
 0 -360.7477 Td
-(2885 ) 21.8426 Tj
+(2885   }) 34.9481 Tj
 0 -370.2411 Td
-(2886 ) 21.8426 Tj
+(2886 }) 26.2111 Tj
 0 -379.7344 Td
 (2887 ) 21.8426 Tj
 0 -389.2278 Td
@@ -11531,6 +11622,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -11548,89 +11641,89 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/buf.h  Page 1) 157.2665 Tj
+(Aug  8 01:04 2009  xv6/sysproc.c  Page 1) 174.7406 Tj
 0 -28.4801 Td
-(2900 struct buf {) 74.2647 Tj
+(2900 #include "types.h") 100.4758 Tj
 0 -37.9735 Td
-(2901   int flags;) 74.2647 Tj
+(2901 #include "x86.h") 91.7388 Tj
 0 -47.4668 Td
-(2902   uint dev;) 69.8962 Tj
+(2902 #include "defs.h") 96.1073 Tj
 0 -56.9602 Td
-(2903   uint sector;) 83.0018 Tj
+(2903 #include "param.h") 100.4758 Tj
 0 -66.4535 Td
-(2904   struct buf *prev; // LRU cache list) 183.4776 Tj
+(2904 #include "mmu.h") 91.7388 Tj
 0 -75.9469 Td
-(2905   struct buf *next;) 104.8443 Tj
+(2905 #include "proc.h") 96.1073 Tj
 0 -85.4403 Td
-(2906   struct buf *qnext; // disk queue) 170.3721 Tj
+(2906 ) 21.8426 Tj
 0 -94.9336 Td
-(2907   uchar data[512];) 100.4758 Tj
+(2907 int) 34.9481 Tj
 0 -104.427 Td
-(2908 };) 30.5796 Tj
+(2908 sys_fork\(void\)) 83.0018 Tj
 0 -113.9203 Td
-(2909 #define B_BUSY  0x1  // buffer is locked by some process) 266.4794 Tj
+(2909 {) 26.2111 Tj
 0 -123.4137 Td
-(2910 #define B_VALID 0x2  // buffer has been read from disk) 257.7424 Tj
+(2910   return fork\(\);) 91.7388 Tj
 0 -132.9071 Td
-(2911 #define B_DIRTY 0x4  // buffer needs to be written to disk) 275.2164 Tj
+(2911 }) 26.2111 Tj
 0 -142.4004 Td
 (2912 ) 21.8426 Tj
 0 -151.8938 Td
-(2913 ) 21.8426 Tj
+(2913 int) 34.9481 Tj
 0 -161.3871 Td
-(2914 ) 21.8426 Tj
+(2914 sys_exit\(void\)) 83.0018 Tj
 0 -170.8805 Td
-(2915 ) 21.8426 Tj
+(2915 {) 26.2111 Tj
 0 -180.3739 Td
-(2916 ) 21.8426 Tj
+(2916   exit\(\);) 61.1592 Tj
 0 -189.8672 Td
-(2917 ) 21.8426 Tj
+(2917   return 0;  // not reached) 139.7925 Tj
 0 -199.3606 Td
-(2918 ) 21.8426 Tj
+(2918 }) 26.2111 Tj
 0 -208.8539 Td
 (2919 ) 21.8426 Tj
 0 -218.3473 Td
-(2920 ) 21.8426 Tj
+(2920 int) 34.9481 Tj
 0 -227.8407 Td
-(2921 ) 21.8426 Tj
+(2921 sys_wait\(void\)) 83.0018 Tj
 0 -237.334 Td
-(2922 ) 21.8426 Tj
+(2922 {) 26.2111 Tj
 0 -246.8274 Td
-(2923 ) 21.8426 Tj
+(2923   return wait\(\);) 91.7388 Tj
 0 -256.3207 Td
-(2924 ) 21.8426 Tj
+(2924 }) 26.2111 Tj
 0 -265.8141 Td
 (2925 ) 21.8426 Tj
 0 -275.3075 Td
-(2926 ) 21.8426 Tj
+(2926 int) 34.9481 Tj
 0 -284.8008 Td
-(2927 ) 21.8426 Tj
+(2927 sys_kill\(void\)) 83.0018 Tj
 0 -294.2942 Td
-(2928 ) 21.8426 Tj
+(2928 {) 26.2111 Tj
 0 -303.7875 Td
-(2929 ) 21.8426 Tj
+(2929   int pid;) 65.5277 Tj
 0 -313.2809 Td
 (2930 ) 21.8426 Tj
 0 -322.7743 Td
-(2931 ) 21.8426 Tj
+(2931   if\(argint\(0, &pid\) < 0\)) 131.0554 Tj
 0 -332.2676 Td
-(2932 ) 21.8426 Tj
+(2932     return -1;) 83.0018 Tj
 0 -341.761 Td
-(2933 ) 21.8426 Tj
+(2933   return kill\(pid\);) 104.8443 Tj
 0 -351.2543 Td
-(2934 ) 21.8426 Tj
+(2934 }) 26.2111 Tj
 0 -360.7477 Td
 (2935 ) 21.8426 Tj
 0 -370.2411 Td
-(2936 ) 21.8426 Tj
+(2936 int) 34.9481 Tj
 0 -379.7344 Td
-(2937 ) 21.8426 Tj
+(2937 sys_getpid\(void\)) 91.7388 Tj
 0 -389.2278 Td
-(2938 ) 21.8426 Tj
+(2938 {) 26.2111 Tj
 0 -398.7211 Td
-(2939 ) 21.8426 Tj
+(2939   return cp->pid;) 96.1073 Tj
 0 -408.2145 Td
-(2940 ) 21.8426 Tj
+(2940 }) 26.2111 Tj
 0 -417.7079 Td
 (2941 ) 21.8426 Tj
 0 -427.2012 Td
@@ -11667,73 +11760,73 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/dev.h  Page 1) 157.2665 Tj
+(Aug  8 01:04 2009  xv6/sysproc.c  Page 2) 174.7406 Tj
 0 -28.4801 Td
-(2950 struct devsw {) 83.0018 Tj
+(2950 int) 34.9481 Tj
 0 -37.9735 Td
-(2951   int \(*read\)\(struct inode*, char*, int\);) 200.9517 Tj
+(2951 sys_sbrk\(void\)) 83.0018 Tj
 0 -47.4668 Td
-(2952   int \(*write\)\(struct inode*, char*, int\);) 205.3202 Tj
+(2952 {) 26.2111 Tj
 0 -56.9602 Td
-(2953 };) 30.5796 Tj
+(2953   int addr;) 69.8962 Tj
 0 -66.4535 Td
-(2954 ) 21.8426 Tj
+(2954   int n;) 56.7907 Tj
 0 -75.9469 Td
-(2955 extern struct devsw devsw[];) 144.161 Tj
+(2955 ) 21.8426 Tj
 0 -85.4403 Td
-(2956 ) 21.8426 Tj
+(2956   if\(argint\(0, &n\) < 0\)) 122.3184 Tj
 0 -94.9336 Td
-(2957 #define CONSOLE 1) 96.1073 Tj
+(2957     return -1;) 83.0018 Tj
 0 -104.427 Td
-(2958 ) 21.8426 Tj
+(2958   addr = cp->sz;) 91.7388 Tj
 0 -113.9203 Td
-(2959 ) 21.8426 Tj
+(2959   if\(growproc\(n\) < 0\)) 113.5814 Tj
 0 -123.4137 Td
-(2960 ) 21.8426 Tj
+(2960     return -1;) 83.0018 Tj
 0 -132.9071 Td
-(2961 ) 21.8426 Tj
+(2961   return addr;) 83.0018 Tj
 0 -142.4004 Td
-(2962 ) 21.8426 Tj
+(2962 }) 26.2111 Tj
 0 -151.8938 Td
 (2963 ) 21.8426 Tj
 0 -161.3871 Td
-(2964 ) 21.8426 Tj
+(2964 int) 34.9481 Tj
 0 -170.8805 Td
-(2965 ) 21.8426 Tj
+(2965 sys_sleep\(void\)) 87.3703 Tj
 0 -180.3739 Td
-(2966 ) 21.8426 Tj
+(2966 {) 26.2111 Tj
 0 -189.8672 Td
-(2967 ) 21.8426 Tj
+(2967   int n, ticks0;) 91.7388 Tj
 0 -199.3606 Td
 (2968 ) 21.8426 Tj
 0 -208.8539 Td
-(2969 ) 21.8426 Tj
+(2969   if\(argint\(0, &n\) < 0\)) 122.3184 Tj
 0 -218.3473 Td
-(2970 ) 21.8426 Tj
+(2970     return -1;) 83.0018 Tj
 0 -227.8407 Td
-(2971 ) 21.8426 Tj
+(2971   acquire\(&tickslock\);) 117.9499 Tj
 0 -237.334 Td
-(2972 ) 21.8426 Tj
+(2972   ticks0 = ticks;) 96.1073 Tj
 0 -246.8274 Td
-(2973 ) 21.8426 Tj
+(2973   while\(ticks - ticks0 < n\){) 144.161 Tj
 0 -256.3207 Td
-(2974 ) 21.8426 Tj
+(2974     if\(cp->killed\){) 104.8443 Tj
 0 -265.8141 Td
-(2975 ) 21.8426 Tj
+(2975       release\(&tickslock\);) 135.4239 Tj
 0 -275.3075 Td
-(2976 ) 21.8426 Tj
+(2976       return -1;) 91.7388 Tj
 0 -284.8008 Td
-(2977 ) 21.8426 Tj
+(2977     }) 43.6851 Tj
 0 -294.2942 Td
-(2978 ) 21.8426 Tj
+(2978     sleep\(&ticks, &tickslock\);) 152.898 Tj
 0 -303.7875 Td
-(2979 ) 21.8426 Tj
+(2979   }) 34.9481 Tj
 0 -313.2809 Td
-(2980 ) 21.8426 Tj
+(2980   release\(&tickslock\);) 117.9499 Tj
 0 -322.7743 Td
-(2981 ) 21.8426 Tj
+(2981   return 0;) 69.8962 Tj
 0 -332.2676 Td
-(2982 ) 21.8426 Tj
+(2982 }) 26.2111 Tj
 0 -341.761 Td
 (2983 ) 21.8426 Tj
 0 -351.2543 Td
@@ -11798,6 +11891,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -11815,31 +11910,31 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/fcntl.h  Page 1) 166.0035 Tj
+(Aug  8 01:04 2009  xv6/buf.h  Page 1) 157.2665 Tj
 0 -28.4801 Td
-(3000 #define O_RDONLY  0x000) 122.3184 Tj
+(3000 struct buf {) 74.2647 Tj
 0 -37.9735 Td
-(3001 #define O_WRONLY  0x001) 122.3184 Tj
+(3001   int flags;) 74.2647 Tj
 0 -47.4668 Td
-(3002 #define O_RDWR    0x002) 122.3184 Tj
+(3002   uint dev;) 69.8962 Tj
 0 -56.9602 Td
-(3003 #define O_CREATE  0x200) 122.3184 Tj
+(3003   uint sector;) 83.0018 Tj
 0 -66.4535 Td
-(3004 ) 21.8426 Tj
+(3004   struct buf *prev; // LRU cache list) 183.4776 Tj
 0 -75.9469 Td
-(3005 ) 21.8426 Tj
+(3005   struct buf *next;) 104.8443 Tj
 0 -85.4403 Td
-(3006 ) 21.8426 Tj
+(3006   struct buf *qnext; // disk queue) 170.3721 Tj
 0 -94.9336 Td
-(3007 ) 21.8426 Tj
+(3007   uchar data[512];) 100.4758 Tj
 0 -104.427 Td
-(3008 ) 21.8426 Tj
+(3008 };) 30.5796 Tj
 0 -113.9203 Td
-(3009 ) 21.8426 Tj
+(3009 #define B_BUSY  0x1  // buffer is locked by some process) 266.4794 Tj
 0 -123.4137 Td
-(3010 ) 21.8426 Tj
+(3010 #define B_VALID 0x2  // buffer has been read from disk) 257.7424 Tj
 0 -132.9071 Td
-(3011 ) 21.8426 Tj
+(3011 #define B_DIRTY 0x4  // buffer needs to be written to disk) 275.2164 Tj
 0 -142.4004 Td
 (3012 ) 21.8426 Tj
 0 -151.8938 Td
@@ -11934,21 +12029,21 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/stat.h  Page 1) 161.635 Tj
+(Aug  8 01:04 2009  xv6/fcntl.h  Page 1) 166.0035 Tj
 0 -28.4801 Td
-(3050 struct stat {) 78.6333 Tj
+(3050 #define O_RDONLY  0x000) 122.3184 Tj
 0 -37.9735 Td
-(3051   int dev;     // Device number) 157.2665 Tj
+(3051 #define O_WRONLY  0x001) 122.3184 Tj
 0 -47.4668 Td
-(3052   uint ino;    // Inode number on device) 196.5831 Tj
+(3052 #define O_RDWR    0x002) 122.3184 Tj
 0 -56.9602 Td
-(3053   short type;  // Type of file) 152.898 Tj
+(3053 #define O_CREATE  0x200) 122.3184 Tj
 0 -66.4535 Td
-(3054   short nlink; // Number of links to file) 200.9517 Tj
+(3054 ) 21.8426 Tj
 0 -75.9469 Td
-(3055   uint size;   // Size of file in bytes) 192.2146 Tj
+(3055 ) 21.8426 Tj
 0 -85.4403 Td
-(3056 };) 30.5796 Tj
+(3056 ) 21.8426 Tj
 0 -94.9336 Td
 (3057 ) 21.8426 Tj
 0 -104.427 Td
@@ -12065,6 +12160,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -12082,29 +12179,29 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/file.h  Page 1) 161.635 Tj
+(Aug  8 01:04 2009  xv6/stat.h  Page 1) 161.635 Tj
 0 -28.4801 Td
-(3100 struct file {) 78.6333 Tj
+(3100 #define T_DIR  1   // Directory) 157.2665 Tj
 0 -37.9735 Td
-(3101   enum { FD_CLOSED, FD_NONE, FD_PIPE, FD_INODE } type;) 257.7424 Tj
+(3101 #define T_FILE 2   // File) 135.4239 Tj
 0 -47.4668 Td
-(3102   int ref; // reference count) 148.5295 Tj
+(3102 #define T_DEV  3   // Special device) 179.1091 Tj
 0 -56.9602 Td
-(3103   char readable;) 91.7388 Tj
+(3103 ) 21.8426 Tj
 0 -66.4535 Td
-(3104   char writable;) 91.7388 Tj
+(3104 struct stat {) 78.6333 Tj
 0 -75.9469 Td
-(3105   struct pipe *pipe;) 109.2129 Tj
+(3105   short type;  // Type of file) 152.898 Tj
 0 -85.4403 Td
-(3106   struct inode *ip;) 104.8443 Tj
+(3106   int dev;     // Device number) 157.2665 Tj
 0 -94.9336 Td
-(3107   uint off;) 69.8962 Tj
+(3107   uint ino;    // Inode number on device) 196.5831 Tj
 0 -104.427 Td
-(3108 };) 30.5796 Tj
+(3108   short nlink; // Number of links to file) 200.9517 Tj
 0 -113.9203 Td
-(3109 ) 21.8426 Tj
+(3109   uint size;   // Size of file in bytes) 192.2146 Tj
 0 -123.4137 Td
-(3110 ) 21.8426 Tj
+(3110 };) 30.5796 Tj
 0 -132.9071 Td
 (3111 ) 21.8426 Tj
 0 -142.4004 Td
@@ -12201,7 +12298,7 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/fs.h  Page 1) 152.898 Tj
+(Aug  8 01:04 2009  xv6/fs.h  Page 1) 152.898 Tj
 0 -28.4801 Td
 (3150 // On-disk file system format.) 152.898 Tj
 0 -37.9735 Td
@@ -12217,90 +12314,90 @@ q
 0 -85.4403 Td
 (3156 ) 21.8426 Tj
 0 -94.9336 Td
-(3157 #define BSIZE 512  // block size) 161.635 Tj
+(3157 #define ROOTINO 1  // root i-number) 174.7406 Tj
 0 -104.427 Td
-(3158 ) 21.8426 Tj
+(3158 #define BSIZE 512  // block size) 161.635 Tj
 0 -113.9203 Td
-(3159 // File system super block) 135.4239 Tj
+(3159 ) 21.8426 Tj
 0 -123.4137 Td
-(3160 struct superblock {) 104.8443 Tj
+(3160 // File system super block) 135.4239 Tj
 0 -132.9071 Td
-(3161   uint size;         // Size of file system image \(blocks\
-\)) 275.2164 Tj
+(3161 struct superblock {) 104.8443 Tj
 0 -142.4004 Td
-(3162   uint nblocks;      // Number of data blocks) 218.4257 Tj
+(3162   uint size;         // Size of file system image \(blocks\
+\)) 275.2164 Tj
 0 -151.8938 Td
-(3163   uint ninodes;      // Number of inodes.) 200.9517 Tj
+(3163   uint nblocks;      // Number of data blocks) 218.4257 Tj
 0 -161.3871 Td
-(3164 };) 30.5796 Tj
+(3164   uint ninodes;      // Number of inodes.) 200.9517 Tj
 0 -170.8805 Td
-(3165 ) 21.8426 Tj
+(3165 };) 30.5796 Tj
 0 -180.3739 Td
-(3166 #define NADDRS \(NDIRECT+1\)) 135.4239 Tj
+(3166 ) 21.8426 Tj
 0 -189.8672 Td
 (3167 #define NDIRECT 12) 100.4758 Tj
 0 -199.3606 Td
-(3168 #define INDIRECT 12) 104.8443 Tj
+(3168 #define NINDIRECT \(BSIZE / sizeof\(uint\)\)) 196.5831 Tj
 0 -208.8539 Td
-(3169 #define NINDIRECT \(BSIZE / sizeof\(uint\)\)) 196.5831 Tj
+(3169 #define MAXFILE \(NDIRECT + NINDIRECT\)) 183.4776 Tj
 0 -218.3473 Td
-(3170 #define MAXFILE \(NDIRECT  + NINDIRECT\)) 187.8461 Tj
+(3170 ) 21.8426 Tj
 0 -227.8407 Td
-(3171 ) 21.8426 Tj
+(3171 // On-disk inode structure) 135.4239 Tj
 0 -237.334 Td
-(3172 // On-disk inode structure) 135.4239 Tj
+(3172 struct dinode {) 87.3703 Tj
 0 -246.8274 Td
-(3173 struct dinode {) 87.3703 Tj
+(3173   short type;           // File type) 179.1091 Tj
 0 -256.3207 Td
-(3174   short type;           // File type) 179.1091 Tj
+(3174   short major;          // Major device number \(T_DEV onl\
+y\)) 279.5849 Tj
 0 -265.8141 Td
-(3175   short major;          // Major device number \(T_DEV onl\
+(3175   short minor;          // Minor device number \(T_DEV onl\
 y\)) 279.5849 Tj
 0 -275.3075 Td
-(3176   short minor;          // Minor device number \(T_DEV onl\
-y\)) 279.5849 Tj
-0 -284.8008 Td
-(3177   short nlink;          // Number of links to inode in fil\
+(3176   short nlink;          // Number of links to inode in fil\
 e system) 310.1645 Tj
+0 -284.8008 Td
+(3177   uint size;            // Size of file \(bytes\)) 227.1628 Tj
 0 -294.2942 Td
-(3178   uint size;            // Size of file \(bytes\)) 227.1628 Tj
+(3178   uint addrs[NDIRECT+1];   // Data block addresses) 240.2683 Tj
 0 -303.7875 Td
-(3179   uint addrs[NADDRS];   // Data block addresses) 227.1628 Tj
+(3179 };) 30.5796 Tj
 0 -313.2809 Td
-(3180 };) 30.5796 Tj
+(3180 ) 21.8426 Tj
 0 -322.7743 Td
-(3181 ) 21.8426 Tj
+(3181 // Inodes per block.) 109.2129 Tj
 0 -332.2676 Td
-(3182 #define T_DIR  1   // Directory) 157.2665 Tj
+(3182 #define IPB           \(BSIZE / sizeof\(struct dinode\)\)) 253.3738 Tj
 0 -341.761 Td
-(3183 #define T_FILE 2   // File) 135.4239 Tj
+(3183 ) 21.8426 Tj
 0 -351.2543 Td
-(3184 #define T_DEV  3   // Special device) 179.1091 Tj
+(3184 // Block containing inode i) 139.7925 Tj
 0 -360.7477 Td
-(3185 ) 21.8426 Tj
+(3185 #define IBLOCK\(i\)     \(\(i\) / IPB + 2\)) 183.4776 Tj
 0 -370.2411 Td
-(3186 // Inodes per block.) 109.2129 Tj
+(3186 ) 21.8426 Tj
 0 -379.7344 Td
-(3187 #define IPB           \(BSIZE / sizeof\(struct dinode\)\)) 253.3738 Tj
+(3187 // Bitmap bits per block) 126.6869 Tj
 0 -389.2278 Td
-(3188 ) 21.8426 Tj
+(3188 #define BPB           \(BSIZE*8\)) 157.2665 Tj
 0 -398.7211 Td
-(3189 // Block containing inode i) 139.7925 Tj
+(3189 ) 21.8426 Tj
 0 -408.2145 Td
-(3190 #define IBLOCK\(i\)     \(\(i\) / IPB + 2\)) 183.4776 Tj
+(3190 // Block containing bit for block b) 174.7406 Tj
 0 -417.7079 Td
-(3191 ) 21.8426 Tj
+(3191 #define BBLOCK\(b, ninodes\) \(b/BPB + \(ninodes\)/IPB + 3\
+\)) 257.7424 Tj
 0 -427.2012 Td
-(3192 // Bitmap bits per block) 126.6869 Tj
+(3192 ) 21.8426 Tj
 0 -436.6946 Td
-(3193 #define BPB           \(BSIZE*8\)) 157.2665 Tj
+(3193 ) 21.8426 Tj
 0 -446.1879 Td
 (3194 ) 21.8426 Tj
 0 -455.6813 Td
-(3195 // Block containing bit for block b) 174.7406 Tj
+(3195 ) 21.8426 Tj
 0 -465.1747 Td
-(3196 #define BBLOCK\(b, ninodes\) \(b/BPB + \(ninodes\)/IPB + 3\
-\)) 257.7424 Tj
+(3196 ) 21.8426 Tj
 0 -474.668 Td
 (3197 ) 21.8426 Tj
 0 -484.1614 Td
@@ -12337,6 +12434,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -12354,7 +12453,7 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/fs.h  Page 2) 152.898 Tj
+(Aug  8 01:04 2009  xv6/fs.h  Page 2) 152.898 Tj
 0 -28.4801 Td
 (3200 // Directory is a file containing a sequence of dirent str\
 uctures.) 310.1645 Tj
@@ -12474,89 +12573,89 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/fsvar.h  Page 1) 166.0035 Tj
+(Aug  8 01:04 2009  xv6/file.h  Page 1) 161.635 Tj
 0 -28.4801 Td
-(3250 // in-core file system types) 144.161 Tj
+(3250 struct file {) 78.6333 Tj
 0 -37.9735 Td
-(3251 ) 21.8426 Tj
+(3251   enum { FD_NONE, FD_PIPE, FD_INODE } type;) 209.6887 Tj
 0 -47.4668 Td
-(3252 struct inode {) 83.0018 Tj
+(3252   int ref; // reference count) 148.5295 Tj
 0 -56.9602 Td
-(3253   uint dev;           // Device number) 187.8461 Tj
+(3253   char readable;) 91.7388 Tj
 0 -66.4535 Td
-(3254   uint inum;          // Inode number) 183.4776 Tj
+(3254   char writable;) 91.7388 Tj
 0 -75.9469 Td
-(3255   int ref;            // Reference count) 196.5831 Tj
+(3255   struct pipe *pipe;) 109.2129 Tj
 0 -85.4403 Td
-(3256   int flags;          // I_BUSY, I_VALID) 196.5831 Tj
+(3256   struct inode *ip;) 104.8443 Tj
 0 -94.9336 Td
-(3257 ) 21.8426 Tj
+(3257   uint off;) 69.8962 Tj
 0 -104.427 Td
-(3258   short type;         // copy of disk inode) 209.6887 Tj
+(3258 };) 30.5796 Tj
 0 -113.9203 Td
-(3259   short major;) 83.0018 Tj
+(3259 ) 21.8426 Tj
 0 -123.4137 Td
-(3260   short minor;) 83.0018 Tj
+(3260 ) 21.8426 Tj
 0 -132.9071 Td
-(3261   short nlink;) 83.0018 Tj
+(3261 // in-core file system types) 144.161 Tj
 0 -142.4004 Td
-(3262   uint size;) 74.2647 Tj
+(3262 ) 21.8426 Tj
 0 -151.8938 Td
-(3263   uint addrs[NADDRS];) 113.5814 Tj
+(3263 struct inode {) 83.0018 Tj
 0 -161.3871 Td
-(3264 };) 30.5796 Tj
+(3264   uint dev;           // Device number) 187.8461 Tj
 0 -170.8805 Td
-(3265 ) 21.8426 Tj
+(3265   uint inum;          // Inode number) 183.4776 Tj
 0 -180.3739 Td
-(3266 #define I_BUSY 0x1) 100.4758 Tj
+(3266   int ref;            // Reference count) 196.5831 Tj
 0 -189.8672 Td
-(3267 #define I_VALID 0x2) 104.8443 Tj
+(3267   int flags;          // I_BUSY, I_VALID) 196.5831 Tj
 0 -199.3606 Td
 (3268 ) 21.8426 Tj
 0 -208.8539 Td
-(3269 ) 21.8426 Tj
+(3269   short type;         // copy of disk inode) 209.6887 Tj
 0 -218.3473 Td
-(3270 ) 21.8426 Tj
+(3270   short major;) 83.0018 Tj
 0 -227.8407 Td
-(3271 ) 21.8426 Tj
+(3271   short minor;) 83.0018 Tj
 0 -237.334 Td
-(3272 ) 21.8426 Tj
+(3272   short nlink;) 83.0018 Tj
 0 -246.8274 Td
-(3273 ) 21.8426 Tj
+(3273   uint size;) 74.2647 Tj
 0 -256.3207 Td
-(3274 ) 21.8426 Tj
+(3274   uint addrs[NDIRECT+1];) 126.6869 Tj
 0 -265.8141 Td
-(3275 ) 21.8426 Tj
+(3275 };) 30.5796 Tj
 0 -275.3075 Td
 (3276 ) 21.8426 Tj
 0 -284.8008 Td
-(3277 ) 21.8426 Tj
+(3277 #define I_BUSY 0x1) 100.4758 Tj
 0 -294.2942 Td
-(3278 ) 21.8426 Tj
+(3278 #define I_VALID 0x2) 104.8443 Tj
 0 -303.7875 Td
 (3279 ) 21.8426 Tj
 0 -313.2809 Td
 (3280 ) 21.8426 Tj
 0 -322.7743 Td
-(3281 ) 21.8426 Tj
+(3281 // device implementations) 131.0554 Tj
 0 -332.2676 Td
 (3282 ) 21.8426 Tj
 0 -341.761 Td
-(3283 ) 21.8426 Tj
+(3283 struct devsw {) 83.0018 Tj
 0 -351.2543 Td
-(3284 ) 21.8426 Tj
+(3284   int \(*read\)\(struct inode*, char*, int\);) 200.9517 Tj
 0 -360.7477 Td
-(3285 ) 21.8426 Tj
+(3285   int \(*write\)\(struct inode*, char*, int\);) 205.3202 Tj
 0 -370.2411 Td
-(3286 ) 21.8426 Tj
+(3286 };) 30.5796 Tj
 0 -379.7344 Td
 (3287 ) 21.8426 Tj
 0 -389.2278 Td
-(3288 ) 21.8426 Tj
+(3288 extern struct devsw devsw[];) 144.161 Tj
 0 -398.7211 Td
 (3289 ) 21.8426 Tj
 0 -408.2145 Td
-(3290 ) 21.8426 Tj
+(3290 #define CONSOLE 1) 96.1073 Tj
 0 -417.7079 Td
 (3291 ) 21.8426 Tj
 0 -427.2012 Td
@@ -12605,6 +12704,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -12622,7 +12723,7 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/ide.c  Page 1) 157.2665 Tj
+(Aug  8 01:04 2009  xv6/ide.c  Page 1) 157.2665 Tj
 0 -28.4801 Td
 (3300 // Simple PIO-based \(non-DMA\) IDE driver code.) 222.7942 Tj
 0 -37.9735 Td
@@ -12664,25 +12765,24 @@ q
 0 -208.8539 Td
 (3319 ) 21.8426 Tj
 0 -218.3473 Td
-(3320 // ide_queue points to the buf now being read/written to t\
-he disk.) 310.1645 Tj
+(3320 // idequeue points to the buf now being read/written to th\
+e disk.) 305.796 Tj
 0 -227.8407 Td
-(3321 // ide_queue->qnext points to the next buf to be processed\
-.) 279.5849 Tj
+(3321 // idequeue->qnext points to the next buf to be processed.) 275.2164 Tj
 0 -237.334 Td
-(3322 // You must hold ide_lock while manipulating queue.) 244.6368 Tj
+(3322 // You must hold idelock while manipulating queue.) 240.2683 Tj
 0 -246.8274 Td
 (3323 ) 21.8426 Tj
 0 -256.3207 Td
-(3324 static struct spinlock ide_lock;) 161.635 Tj
+(3324 static struct spinlock idelock;) 157.2665 Tj
 0 -265.8141 Td
-(3325 static struct buf *ide_queue;) 148.5295 Tj
+(3325 static struct buf *idequeue;) 144.161 Tj
 0 -275.3075 Td
 (3326 ) 21.8426 Tj
 0 -284.8008 Td
-(3327 static int disk_1_present;) 135.4239 Tj
+(3327 static int havedisk1;) 113.5814 Tj
 0 -294.2942 Td
-(3328 static void ide_start_request\(\);) 161.635 Tj
+(3328 static void idestart\(struct buf*\);) 170.3721 Tj
 0 -303.7875 Td
 (3329 ) 21.8426 Tj
 0 -313.2809 Td
@@ -12690,7 +12790,7 @@ he disk.) 310.1645 Tj
 0 -322.7743 Td
 (3331 static int) 65.5277 Tj
 0 -332.2676 Td
-(3332 ide_wait_ready\(int check_error\)) 157.2665 Tj
+(3332 idewait\(int checkerr\)) 113.5814 Tj
 0 -341.761 Td
 (3333 {) 26.2111 Tj
 0 -351.2543 Td
@@ -12698,12 +12798,12 @@ he disk.) 310.1645 Tj
 0 -360.7477 Td
 (3335 ) 21.8426 Tj
 0 -370.2411 Td
-(3336   while\(\(\(r = inb\(0x1f7\)\) & IDE_BSY\) || !\(r & IDE_\
-DRDY\)\)) 266.4794 Tj
+(3336   while\(\(\(r = inb\(0x1f7\)\) & \(IDE_BSY|IDE_DRDY\)\) !\
+= IDE_DRDY\)) 283.9534 Tj
 0 -379.7344 Td
 (3337     ;) 43.6851 Tj
 0 -389.2278 Td
-(3338   if\(check_error && \(r & \(IDE_DF|IDE_ERR\)\) != 0\)) 231.5313 Tj
+(3338   if\(checkerr && \(r & \(IDE_DF|IDE_ERR\)\) != 0\)) 218.4257 Tj
 0 -398.7211 Td
 (3339     return -1;) 83.0018 Tj
 0 -408.2145 Td
@@ -12744,11 +12844,11 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/ide.c  Page 2) 157.2665 Tj
+(Aug  8 01:04 2009  xv6/ide.c  Page 2) 157.2665 Tj
 0 -28.4801 Td
 (3350 void) 39.3166 Tj
 0 -37.9735 Td
-(3351 ide_init\(void\)) 83.0018 Tj
+(3351 ideinit\(void\)) 78.6333 Tj
 0 -47.4668 Td
 (3352 {) 26.2111 Tj
 0 -56.9602 Td
@@ -12756,13 +12856,13 @@ q
 0 -66.4535 Td
 (3354 ) 21.8426 Tj
 0 -75.9469 Td
-(3355   initlock\(&ide_lock, "ide"\);) 148.5295 Tj
+(3355   initlock\(&idelock, "ide"\);) 144.161 Tj
 0 -85.4403 Td
-(3356   pic_enable\(IRQ_IDE\);) 117.9499 Tj
+(3356   picenable\(IRQ_IDE\);) 113.5814 Tj
 0 -94.9336 Td
-(3357   ioapic_enable\(IRQ_IDE, ncpu - 1\);) 174.7406 Tj
+(3357   ioapicenable\(IRQ_IDE, ncpu - 1\);) 170.3721 Tj
 0 -104.427 Td
-(3358   ide_wait_ready\(0\);) 109.2129 Tj
+(3358   idewait\(0\);) 78.6333 Tj
 0 -113.9203 Td
 (3359 ) 21.8426 Tj
 0 -123.4137 Td
@@ -12774,7 +12874,7 @@ q
 0 -151.8938 Td
 (3363     if\(inb\(0x1f7\) != 0\){) 126.6869 Tj
 0 -161.3871 Td
-(3364       disk_1_present = 1;) 131.0554 Tj
+(3364       havedisk1 = 1;) 109.2129 Tj
 0 -170.8805 Td
 (3365       break;) 74.2647 Tj
 0 -180.3739 Td
@@ -12792,21 +12892,21 @@ q
 0 -237.334 Td
 (3372 ) 21.8426 Tj
 0 -246.8274 Td
-(3373 // Start the request for b.  Caller must hold ide_lock.) 262.1109 Tj
+(3373 // Start the request for b.  Caller must hold idelock.) 257.7424 Tj
 0 -256.3207 Td
 (3374 static void) 69.8962 Tj
 0 -265.8141 Td
-(3375 ide_start_request\(struct buf *b\)) 161.635 Tj
+(3375 idestart\(struct buf *b\)) 122.3184 Tj
 0 -275.3075 Td
 (3376 {) 26.2111 Tj
 0 -284.8008 Td
 (3377   if\(b == 0\)) 74.2647 Tj
 0 -294.2942 Td
-(3378     panic\("ide_start_request"\);) 157.2665 Tj
+(3378     panic\("idestart"\);) 117.9499 Tj
 0 -303.7875 Td
 (3379 ) 21.8426 Tj
 0 -313.2809 Td
-(3380   ide_wait_ready\(0\);) 109.2129 Tj
+(3380   idewait\(0\);) 78.6333 Tj
 0 -322.7743 Td
 (3381   outb\(0x3f6, 0\);  // generate interrupt) 196.5831 Tj
 0 -332.2676 Td
@@ -12876,6 +12976,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -12893,13 +12995,13 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/ide.c  Page 3) 157.2665 Tj
+(Aug  8 01:04 2009  xv6/ide.c  Page 3) 157.2665 Tj
 0 -28.4801 Td
 (3400 // Interrupt handler.) 113.5814 Tj
 0 -37.9735 Td
 (3401 void) 39.3166 Tj
 0 -47.4668 Td
-(3402 ide_intr\(void\)) 83.0018 Tj
+(3402 ideintr\(void\)) 78.6333 Tj
 0 -56.9602 Td
 (3403 {) 26.2111 Tj
 0 -66.4535 Td
@@ -12907,53 +13009,53 @@ q
 0 -75.9469 Td
 (3405 ) 21.8426 Tj
 0 -85.4403 Td
-(3406   acquire\(&ide_lock\);) 113.5814 Tj
+(3406   // Take first buffer off queue.) 166.0035 Tj
 0 -94.9336 Td
-(3407   if\(\(b = ide_queue\) == 0\){) 139.7925 Tj
+(3407   acquire\(&idelock\);) 109.2129 Tj
 0 -104.427 Td
-(3408     release\(&ide_lock\);) 122.3184 Tj
+(3408   if\(\(b = idequeue\) == 0\){) 135.4239 Tj
 0 -113.9203 Td
-(3409     return;) 69.8962 Tj
+(3409     release\(&idelock\);) 117.9499 Tj
 0 -123.4137 Td
-(3410   }) 34.9481 Tj
+(3410     cprintf\("Spurious IDE interrupt.\\n"\);) 200.9517 Tj
 0 -132.9071 Td
-(3411 ) 21.8426 Tj
+(3411     return;) 69.8962 Tj
 0 -142.4004 Td
-(3412   // Read data if needed.) 131.0554 Tj
+(3412   }) 34.9481 Tj
 0 -151.8938 Td
-(3413   if\(!\(b->flags & B_DIRTY\) && ide_wait_ready\(1\) >= 0\)) 253.3738 Tj
+(3413   idequeue = b->qnext;) 117.9499 Tj
 0 -161.3871 Td
-(3414     insl\(0x1f0, b->data, 512/4\);) 161.635 Tj
+(3414 ) 21.8426 Tj
 0 -170.8805 Td
-(3415 ) 21.8426 Tj
+(3415   // Read data if needed.) 131.0554 Tj
 0 -180.3739 Td
-(3416   // Wake process waiting for this buf.) 192.2146 Tj
+(3416   if\(!\(b->flags & B_DIRTY\) && idewait\(1\) >= 0\)) 222.7942 Tj
 0 -189.8672 Td
-(3417   b->flags |= B_VALID;) 117.9499 Tj
+(3417     insl\(0x1f0, b->data, 512/4\);) 161.635 Tj
 0 -199.3606 Td
-(3418   b->flags &= ~B_DIRTY;) 122.3184 Tj
+(3418 ) 21.8426 Tj
 0 -208.8539 Td
-(3419   wakeup\(b\);) 74.2647 Tj
+(3419   // Wake process waiting for this buf.) 192.2146 Tj
 0 -218.3473 Td
-(3420 ) 21.8426 Tj
+(3420   b->flags |= B_VALID;) 117.9499 Tj
 0 -227.8407 Td
-(3421   // Start disk on next buf in queue.) 183.4776 Tj
+(3421   b->flags &= ~B_DIRTY;) 122.3184 Tj
 0 -237.334 Td
-(3422   if\(\(ide_queue = b->qnext\) != 0\)) 166.0035 Tj
+(3422   wakeup\(b\);) 74.2647 Tj
 0 -246.8274 Td
-(3423     ide_start_request\(ide_queue\);) 166.0035 Tj
+(3423 ) 21.8426 Tj
 0 -256.3207 Td
-(3424 ) 21.8426 Tj
+(3424   // Start disk on next buf in queue.) 183.4776 Tj
 0 -265.8141 Td
-(3425   release\(&ide_lock\);) 113.5814 Tj
+(3425   if\(idequeue != 0\)) 104.8443 Tj
 0 -275.3075 Td
-(3426 }) 26.2111 Tj
+(3426     idestart\(idequeue\);) 122.3184 Tj
 0 -284.8008 Td
 (3427 ) 21.8426 Tj
 0 -294.2942 Td
-(3428 ) 21.8426 Tj
+(3428   release\(&idelock\);) 109.2129 Tj
 0 -303.7875 Td
-(3429 ) 21.8426 Tj
+(3429 }) 26.2111 Tj
 0 -313.2809 Td
 (3430 ) 21.8426 Tj
 0 -322.7743 Td
@@ -13012,7 +13114,7 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/ide.c  Page 4) 157.2665 Tj
+(Aug  8 01:04 2009  xv6/ide.c  Page 4) 157.2665 Tj
 0 -28.4801 Td
 (3450 // Sync buf with disk.) 117.9499 Tj
 0 -37.9735 Td
@@ -13024,7 +13126,7 @@ ALID.) 297.059 Tj
 0 -56.9602 Td
 (3453 void) 39.3166 Tj
 0 -66.4535 Td
-(3454 ide_rw\(struct buf *b\)) 113.5814 Tj
+(3454 iderw\(struct buf *b\)) 109.2129 Tj
 0 -75.9469 Td
 (3455 {) 26.2111 Tj
 0 -85.4403 Td
@@ -13034,27 +13136,27 @@ ALID.) 297.059 Tj
 0 -104.427 Td
 (3458   if\(!\(b->flags & B_BUSY\)\)) 135.4239 Tj
 0 -113.9203 Td
-(3459     panic\("ide_rw: buf not busy"\);) 170.3721 Tj
+(3459     panic\("iderw: buf not busy"\);) 166.0035 Tj
 0 -123.4137 Td
 (3460   if\(\(b->flags & \(B_VALID|B_DIRTY\)\) == B_VALID\)) 227.1628 Tj
 0 -132.9071 Td
-(3461     panic\("ide_rw: nothing to do"\);) 174.7406 Tj
+(3461     panic\("iderw: nothing to do"\);) 170.3721 Tj
 0 -142.4004 Td
-(3462   if\(b->dev != 0 && !disk_1_present\)) 179.1091 Tj
+(3462   if\(b->dev != 0 && !havedisk1\)) 157.2665 Tj
 0 -151.8938 Td
-(3463     panic\("ide disk 1 not present"\);) 179.1091 Tj
+(3463     panic\("idrw: ide disk 1 not present"\);) 205.3202 Tj
 0 -161.3871 Td
 (3464 ) 21.8426 Tj
 0 -170.8805 Td
-(3465   acquire\(&ide_lock\);) 113.5814 Tj
+(3465   acquire\(&idelock\);) 109.2129 Tj
 0 -180.3739 Td
 (3466 ) 21.8426 Tj
 0 -189.8672 Td
-(3467   // Append b to ide_queue.) 139.7925 Tj
+(3467   // Append b to idequeue.) 135.4239 Tj
 0 -199.3606 Td
 (3468   b->qnext = 0;) 87.3703 Tj
 0 -208.8539 Td
-(3469   for\(pp=&ide_queue; *pp; pp=&\(*pp\)->qnext\)) 209.6887 Tj
+(3469   for\(pp=&idequeue; *pp; pp=&\(*pp\)->qnext\)) 205.3202 Tj
 0 -218.3473 Td
 (3470     ;) 43.6851 Tj
 0 -227.8407 Td
@@ -13064,9 +13166,9 @@ ALID.) 297.059 Tj
 0 -246.8274 Td
 (3473   // Start disk if necessary.) 148.5295 Tj
 0 -256.3207 Td
-(3474   if\(ide_queue == b\)) 109.2129 Tj
+(3474   if\(idequeue == b\)) 104.8443 Tj
 0 -265.8141 Td
-(3475     ide_start_request\(b\);) 131.0554 Tj
+(3475     idestart\(b\);) 91.7388 Tj
 0 -275.3075 Td
 (3476 ) 21.8426 Tj
 0 -284.8008 Td
@@ -13076,11 +13178,11 @@ ALID.) 297.059 Tj
 0 -303.7875 Td
 (3479   while\(\(b->flags & \(B_VALID|B_DIRTY\)\) != B_VALID\)) 240.2683 Tj
 0 -313.2809 Td
-(3480     sleep\(b, &ide_lock\);) 126.6869 Tj
+(3480     sleep\(b, &idelock\);) 122.3184 Tj
 0 -322.7743 Td
 (3481 ) 21.8426 Tj
 0 -332.2676 Td
-(3482   release\(&ide_lock\);) 113.5814 Tj
+(3482   release\(&idelock\);) 109.2129 Tj
 0 -341.761 Td
 (3483 }) 26.2111 Tj
 0 -351.2543 Td
@@ -13145,6 +13247,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -13162,7 +13266,7 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/bio.c  Page 1) 157.2665 Tj
+(Aug  8 01:04 2009  xv6/bio.c  Page 1) 157.2665 Tj
 0 -28.4801 Td
 (3500 // Buffer cache.) 91.7388 Tj
 0 -37.9735 Td
@@ -13228,35 +13332,35 @@ o disk.) 305.796 Tj
 0 -294.2942 Td
 (3528 ) 21.8426 Tj
 0 -303.7875 Td
-(3529 struct buf buf[NBUF];) 113.5814 Tj
+(3529 struct {) 56.7907 Tj
 0 -313.2809 Td
-(3530 struct spinlock buf_table_lock;) 157.2665 Tj
+(3530   struct spinlock lock;) 122.3184 Tj
 0 -322.7743 Td
-(3531 ) 21.8426 Tj
+(3531   struct buf buf[NBUF];) 122.3184 Tj
 0 -332.2676 Td
-(3532 // Linked list of all buffers, through prev/next.) 235.8998 Tj
+(3532 ) 21.8426 Tj
 0 -341.761 Td
-(3533 // bufhead->next is most recently used.) 192.2146 Tj
+(3533   // Linked list of all buffers, through prev/next.) 244.6368 Tj
 0 -351.2543 Td
-(3534 // bufhead->tail is least recently used.) 196.5831 Tj
+(3534   // head.next is most recently used.) 183.4776 Tj
 0 -360.7477 Td
-(3535 struct buf bufhead;) 104.8443 Tj
+(3535   struct buf head;) 100.4758 Tj
 0 -370.2411 Td
-(3536 ) 21.8426 Tj
+(3536 } bcache;) 61.1592 Tj
 0 -379.7344 Td
-(3537 void) 39.3166 Tj
+(3537 ) 21.8426 Tj
 0 -389.2278 Td
-(3538 binit\(void\)) 69.8962 Tj
+(3538 void) 39.3166 Tj
 0 -398.7211 Td
-(3539 {) 26.2111 Tj
+(3539 binit\(void\)) 69.8962 Tj
 0 -408.2145 Td
-(3540   struct buf *b;) 91.7388 Tj
+(3540 {) 26.2111 Tj
 0 -417.7079 Td
-(3541 ) 21.8426 Tj
+(3541   struct buf *b;) 91.7388 Tj
 0 -427.2012 Td
-(3542   initlock\(&buf_table_lock, "buf_table"\);) 200.9517 Tj
+(3542 ) 21.8426 Tj
 0 -436.6946 Td
-(3543 ) 21.8426 Tj
+(3543   initlock\(&bcache.lock, "bcache"\);) 174.7406 Tj
 0 -446.1879 Td
 (3544 ) 21.8426 Tj
 0 -455.6813 Td
@@ -13287,73 +13391,74 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/bio.c  Page 2) 157.2665 Tj
+(Aug  8 01:04 2009  xv6/bio.c  Page 2) 157.2665 Tj
 0 -28.4801 Td
 (3550   // Create linked list of buffers) 170.3721 Tj
 0 -37.9735 Td
-(3551   bufhead.prev = &bufhead;) 135.4239 Tj
+(3551   bcache.head.prev = &bcache.head;) 170.3721 Tj
 0 -47.4668 Td
-(3552   bufhead.next = &bufhead;) 135.4239 Tj
+(3552   bcache.head.next = &bcache.head;) 170.3721 Tj
 0 -56.9602 Td
-(3553   for\(b = buf; b < buf+NBUF; b++\){) 170.3721 Tj
+(3553   for\(b = bcache.buf; b < bcache.buf+NBUF; b++\){) 231.5313 Tj
 0 -66.4535 Td
-(3554     b->next = bufhead.next;) 139.7925 Tj
+(3554     b->next = bcache.head.next;) 157.2665 Tj
 0 -75.9469 Td
-(3555     b->prev = &bufhead;) 122.3184 Tj
+(3555     b->prev = &bcache.head;) 139.7925 Tj
 0 -85.4403 Td
-(3556     bufhead.next->prev = b;) 139.7925 Tj
+(3556     b->dev = -1;) 91.7388 Tj
 0 -94.9336 Td
-(3557     bufhead.next = b;) 113.5814 Tj
+(3557     bcache.head.next->prev = b;) 157.2665 Tj
 0 -104.427 Td
-(3558   }) 34.9481 Tj
+(3558     bcache.head.next = b;) 131.0554 Tj
 0 -113.9203 Td
-(3559 }) 26.2111 Tj
+(3559   }) 34.9481 Tj
 0 -123.4137 Td
-(3560 ) 21.8426 Tj
+(3560 }) 26.2111 Tj
 0 -132.9071 Td
-(3561 // Look through buffer cache for sector on device dev.) 257.7424 Tj
+(3561 ) 21.8426 Tj
 0 -142.4004 Td
-(3562 // If not found, allocate fresh block.) 187.8461 Tj
+(3562 // Look through buffer cache for sector on device dev.) 257.7424 Tj
 0 -151.8938 Td
-(3563 // In either case, return locked buffer.) 196.5831 Tj
+(3563 // If not found, allocate fresh block.) 187.8461 Tj
 0 -161.3871 Td
-(3564 static struct buf*) 100.4758 Tj
+(3564 // In either case, return locked buffer.) 196.5831 Tj
 0 -170.8805 Td
-(3565 bget\(uint dev, uint sector\)) 139.7925 Tj
+(3565 static struct buf*) 100.4758 Tj
 0 -180.3739 Td
-(3566 {) 26.2111 Tj
+(3566 bget\(uint dev, uint sector\)) 139.7925 Tj
 0 -189.8672 Td
-(3567   struct buf *b;) 91.7388 Tj
+(3567 {) 26.2111 Tj
 0 -199.3606 Td
-(3568 ) 21.8426 Tj
+(3568   struct buf *b;) 91.7388 Tj
 0 -208.8539 Td
-(3569   acquire\(&buf_table_lock\);) 139.7925 Tj
+(3569 ) 21.8426 Tj
 0 -218.3473 Td
-(3570 ) 21.8426 Tj
+(3570   acquire\(&bcache.lock\);) 126.6869 Tj
 0 -227.8407 Td
-(3571  loop:) 48.0537 Tj
+(3571 ) 21.8426 Tj
 0 -237.334 Td
-(3572   // Try for cached block.) 135.4239 Tj
+(3572  loop:) 48.0537 Tj
 0 -246.8274 Td
-(3573   for\(b = bufhead.next; b != &bufhead; b = b->next\){) 249.0053 Tj
+(3573   // Try for cached block.) 135.4239 Tj
 0 -256.3207 Td
-(3574     if\(\(b->flags & \(B_BUSY|B_VALID\)\) &&) 192.2146 Tj
+(3574   for\(b = bcache.head.next; b != &bcache.head; b = b->nex\
+t\){) 283.9534 Tj
 0 -265.8141 Td
-(3575        b->dev == dev && b->sector == sector\){) 218.4257 Tj
+(3575     if\(b->dev == dev && b->sector == sector\){) 218.4257 Tj
 0 -275.3075 Td
-(3576       if\(b->flags & B_BUSY\){) 144.161 Tj
+(3576       if\(!\(b->flags & B_BUSY\)\){) 157.2665 Tj
 0 -284.8008 Td
-(3577         sleep\(buf, &buf_table_lock\);) 179.1091 Tj
+(3577         b->flags |= B_BUSY;) 139.7925 Tj
 0 -294.2942 Td
-(3578         goto loop;) 100.4758 Tj
+(3578         release\(&bcache.lock\);) 152.898 Tj
 0 -303.7875 Td
-(3579       }) 52.4222 Tj
+(3579         return b;) 96.1073 Tj
 0 -313.2809 Td
-(3580       b->flags |= B_BUSY;) 131.0554 Tj
+(3580       }) 52.4222 Tj
 0 -322.7743 Td
-(3581       release\(&buf_table_lock\);) 157.2665 Tj
+(3581       sleep\(b, &bcache.lock\);) 148.5295 Tj
 0 -332.2676 Td
-(3582       return b;) 87.3703 Tj
+(3582       goto loop;) 91.7388 Tj
 0 -341.761 Td
 (3583     }) 43.6851 Tj
 0 -351.2543 Td
@@ -13363,17 +13468,18 @@ q
 0 -370.2411 Td
 (3586   // Allocate fresh block.) 135.4239 Tj
 0 -379.7344 Td
-(3587   for\(b = bufhead.prev; b != &bufhead; b = b->prev\){) 249.0053 Tj
+(3587   for\(b = bcache.head.prev; b != &bcache.head; b = b->pre\
+v\){) 283.9534 Tj
 0 -389.2278 Td
 (3588     if\(\(b->flags & B_BUSY\) == 0\){) 166.0035 Tj
 0 -398.7211 Td
-(3589       b->flags = B_BUSY;) 126.6869 Tj
+(3589       b->dev = dev;) 104.8443 Tj
 0 -408.2145 Td
-(3590       b->dev = dev;) 104.8443 Tj
+(3590       b->sector = sector;) 131.0554 Tj
 0 -417.7079 Td
-(3591       b->sector = sector;) 131.0554 Tj
+(3591       b->flags = B_BUSY;) 126.6869 Tj
 0 -427.2012 Td
-(3592       release\(&buf_table_lock\);) 157.2665 Tj
+(3592       release\(&bcache.lock\);) 144.161 Tj
 0 -436.6946 Td
 (3593       return b;) 87.3703 Tj
 0 -446.1879 Td
@@ -13418,6 +13524,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -13435,7 +13543,7 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/bio.c  Page 3) 157.2665 Tj
+(Aug  8 01:04 2009  xv6/bio.c  Page 3) 157.2665 Tj
 0 -28.4801 Td
 (3600 // Return a B_BUSY buf with the contents of the indicated \
 disk sector.) 327.6386 Tj
@@ -13454,7 +13562,7 @@ disk sector.) 327.6386 Tj
 0 -94.9336 Td
 (3607   if\(!\(b->flags & B_VALID\)\)) 139.7925 Tj
 0 -104.427 Td
-(3608     ide_rw\(b\);) 83.0018 Tj
+(3608     iderw\(b\);) 78.6333 Tj
 0 -113.9203 Td
 (3609   return b;) 69.8962 Tj
 0 -123.4137 Td
@@ -13462,7 +13570,7 @@ disk sector.) 327.6386 Tj
 0 -132.9071 Td
 (3611 ) 21.8426 Tj
 0 -142.4004 Td
-(3612 // Write buf's contents to disk.  Must be locked.) 235.8998 Tj
+(3612 // Write b's contents to disk.  Must be locked.) 227.1628 Tj
 0 -151.8938 Td
 (3613 void) 39.3166 Tj
 0 -161.3871 Td
@@ -13476,13 +13584,13 @@ disk sector.) 327.6386 Tj
 0 -199.3606 Td
 (3618   b->flags |= B_DIRTY;) 117.9499 Tj
 0 -208.8539 Td
-(3619   ide_rw\(b\);) 74.2647 Tj
+(3619   iderw\(b\);) 69.8962 Tj
 0 -218.3473 Td
 (3620 }) 26.2111 Tj
 0 -227.8407 Td
 (3621 ) 21.8426 Tj
 0 -237.334 Td
-(3622 // Release the buffer buf.) 135.4239 Tj
+(3622 // Release the buffer b.) 126.6869 Tj
 0 -246.8274 Td
 (3623 void) 39.3166 Tj
 0 -256.3207 Td
@@ -13496,7 +13604,7 @@ disk sector.) 327.6386 Tj
 0 -294.2942 Td
 (3628 ) 21.8426 Tj
 0 -303.7875 Td
-(3629   acquire\(&buf_table_lock\);) 139.7925 Tj
+(3629   acquire\(&bcache.lock\);) 126.6869 Tj
 0 -313.2809 Td
 (3630 ) 21.8426 Tj
 0 -322.7743 Td
@@ -13504,23 +13612,23 @@ disk sector.) 327.6386 Tj
 0 -332.2676 Td
 (3632   b->prev->next = b->next;) 135.4239 Tj
 0 -341.761 Td
-(3633   b->next = bufhead.next;) 131.0554 Tj
+(3633   b->next = bcache.head.next;) 148.5295 Tj
 0 -351.2543 Td
-(3634   b->prev = &bufhead;) 113.5814 Tj
+(3634   b->prev = &bcache.head;) 131.0554 Tj
 0 -360.7477 Td
-(3635   bufhead.next->prev = b;) 131.0554 Tj
+(3635   bcache.head.next->prev = b;) 148.5295 Tj
 0 -370.2411 Td
-(3636   bufhead.next = b;) 104.8443 Tj
+(3636   bcache.head.next = b;) 122.3184 Tj
 0 -379.7344 Td
 (3637 ) 21.8426 Tj
 0 -389.2278 Td
 (3638   b->flags &= ~B_BUSY;) 117.9499 Tj
 0 -398.7211 Td
-(3639   wakeup\(buf\);) 83.0018 Tj
+(3639   wakeup\(b\);) 74.2647 Tj
 0 -408.2145 Td
 (3640 ) 21.8426 Tj
 0 -417.7079 Td
-(3641   release\(&buf_table_lock\);) 139.7925 Tj
+(3641   release\(&bcache.lock\);) 126.6869 Tj
 0 -427.2012 Td
 (3642 }) 26.2111 Tj
 0 -436.6946 Td
@@ -13555,7 +13663,7 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/fs.c  Page 1) 152.898 Tj
+(Aug  8 01:04 2009  xv6/fs.c  Page 1) 152.898 Tj
 0 -28.4801 Td
 (3650 // File system implementation.  Four layers:) 214.0572 Tj
 0 -37.9735 Td
@@ -13604,61 +13712,61 @@ ions) 283.9534 Tj
 0 -218.3473 Td
 (3670 #include "fs.h") 87.3703 Tj
 0 -227.8407 Td
-(3671 #include "fsvar.h") 100.4758 Tj
+(3671 #include "file.h") 96.1073 Tj
 0 -237.334 Td
-(3672 #include "dev.h") 91.7388 Tj
+(3672 ) 21.8426 Tj
 0 -246.8274 Td
-(3673 ) 21.8426 Tj
+(3673 #define min\(a, b\) \(\(a\) < \(b\) ? \(a\) : \(b\)\)) 200.9517 Tj
 0 -256.3207 Td
-(3674 #define min\(a, b\) \(\(a\) < \(b\) ? \(a\) : \(b\)\)) 200.9517 Tj
+(3674 static void itrunc\(struct inode*\);) 170.3721 Tj
 0 -265.8141 Td
-(3675 static void itrunc\(struct inode*\);) 170.3721 Tj
+(3675 ) 21.8426 Tj
 0 -275.3075 Td
-(3676 ) 21.8426 Tj
+(3676 // Read the super block.) 126.6869 Tj
 0 -284.8008 Td
-(3677 // Read the super block.) 126.6869 Tj
+(3677 static void) 69.8962 Tj
 0 -294.2942 Td
-(3678 static void) 69.8962 Tj
+(3678 readsb\(int dev, struct superblock *sb\)) 187.8461 Tj
 0 -303.7875 Td
-(3679 readsb\(int dev, struct superblock *sb\)) 187.8461 Tj
+(3679 {) 26.2111 Tj
 0 -313.2809 Td
-(3680 {) 26.2111 Tj
+(3680   struct buf *bp;) 96.1073 Tj
 0 -322.7743 Td
-(3681   struct buf *bp;) 96.1073 Tj
+(3681 ) 21.8426 Tj
 0 -332.2676 Td
-(3682 ) 21.8426 Tj
+(3682   bp = bread\(dev, 1\);) 113.5814 Tj
 0 -341.761 Td
-(3683   bp = bread\(dev, 1\);) 113.5814 Tj
+(3683   memmove\(sb, bp->data, sizeof\(*sb\)\);) 183.4776 Tj
 0 -351.2543 Td
-(3684   memmove\(sb, bp->data, sizeof\(*sb\)\);) 183.4776 Tj
+(3684   brelse\(bp\);) 78.6333 Tj
 0 -360.7477 Td
-(3685   brelse\(bp\);) 78.6333 Tj
+(3685 }) 26.2111 Tj
 0 -370.2411 Td
-(3686 }) 26.2111 Tj
+(3686 ) 21.8426 Tj
 0 -379.7344 Td
-(3687 ) 21.8426 Tj
+(3687 // Zero a block.) 91.7388 Tj
 0 -389.2278 Td
-(3688 // Zero a block.) 91.7388 Tj
+(3688 static void) 69.8962 Tj
 0 -398.7211 Td
-(3689 static void) 69.8962 Tj
+(3689 bzero\(int dev, int bno\)) 122.3184 Tj
 0 -408.2145 Td
-(3690 bzero\(int dev, int bno\)) 122.3184 Tj
+(3690 {) 26.2111 Tj
 0 -417.7079 Td
-(3691 {) 26.2111 Tj
+(3691   struct buf *bp;) 96.1073 Tj
 0 -427.2012 Td
-(3692   struct buf *bp;) 96.1073 Tj
+(3692 ) 21.8426 Tj
 0 -436.6946 Td
-(3693 ) 21.8426 Tj
+(3693   bp = bread\(dev, bno\);) 122.3184 Tj
 0 -446.1879 Td
-(3694   bp = bread\(dev, bno\);) 122.3184 Tj
+(3694   memset\(bp->data, 0, BSIZE\);) 148.5295 Tj
 0 -455.6813 Td
-(3695   memset\(bp->data, 0, BSIZE\);) 148.5295 Tj
+(3695   bwrite\(bp\);) 78.6333 Tj
 0 -465.1747 Td
-(3696   bwrite\(bp\);) 78.6333 Tj
+(3696   brelse\(bp\);) 78.6333 Tj
 0 -474.668 Td
-(3697   brelse\(bp\);) 78.6333 Tj
+(3697 }) 26.2111 Tj
 0 -484.1614 Td
-(3698 }) 26.2111 Tj
+(3698 ) 21.8426 Tj
 0 -493.6547 Td
 (3699 ) 21.8426 Tj
 0 -522.1348 Td
@@ -13691,6 +13799,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -13708,7 +13818,7 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/fs.c  Page 2) 152.898 Tj
+(Aug  8 01:04 2009  xv6/fs.c  Page 2) 152.898 Tj
 0 -28.4801 Td
 (3700 // Blocks.) 65.5277 Tj
 0 -37.9735 Td
@@ -13829,7 +13939,7 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/fs.c  Page 3) 152.898 Tj
+(Aug  8 01:04 2009  xv6/fs.c  Page 3) 152.898 Tj
 0 -28.4801 Td
 (3750 // Inodes.) 65.5277 Tj
 0 -37.9735 Td
@@ -13925,13 +14035,13 @@ ero) 288.322 Tj
 0 -408.2145 Td
 (3790 {) 26.2111 Tj
 0 -417.7079 Td
-(3791   initlock\(&icache.lock, "icache.lock"\);) 196.5831 Tj
+(3791   initlock\(&icache.lock, "icache"\);) 174.7406 Tj
 0 -427.2012 Td
 (3792 }) 26.2111 Tj
 0 -436.6946 Td
 (3793 ) 21.8426 Tj
 0 -446.1879 Td
-(3794 ) 21.8426 Tj
+(3794 static struct inode* iget\(uint dev, uint inum\);) 227.1628 Tj
 0 -455.6813 Td
 (3795 ) 21.8426 Tj
 0 -465.1747 Td
@@ -13972,6 +14082,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -13989,100 +14101,98 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/fs.c  Page 4) 152.898 Tj
+(Aug  8 01:04 2009  xv6/fs.c  Page 4) 152.898 Tj
 0 -28.4801 Td
-(3800 // Find the inode with number inum on device dev) 231.5313 Tj
+(3800 // Allocate a new inode with the given type on device dev.) 275.2164 Tj
 0 -37.9735 Td
-(3801 // and return the in-memory copy.) 166.0035 Tj
+(3801 struct inode*) 78.6333 Tj
 0 -47.4668 Td
-(3802 static struct inode*) 109.2129 Tj
+(3802 ialloc\(uint dev, short type\)) 144.161 Tj
 0 -56.9602 Td
-(3803 iget\(uint dev, uint inum\)) 131.0554 Tj
+(3803 {) 26.2111 Tj
 0 -66.4535 Td
-(3804 {) 26.2111 Tj
+(3804   int inum;) 69.8962 Tj
 0 -75.9469 Td
-(3805   struct inode *ip, *empty;) 139.7925 Tj
+(3805   struct buf *bp;) 96.1073 Tj
 0 -85.4403 Td
-(3806 ) 21.8426 Tj
+(3806   struct dinode *dip;) 113.5814 Tj
 0 -94.9336 Td
-(3807   acquire\(&icache.lock\);) 126.6869 Tj
+(3807   struct superblock sb;) 122.3184 Tj
 0 -104.427 Td
 (3808 ) 21.8426 Tj
 0 -113.9203 Td
-(3809   // Try for cached inode.) 135.4239 Tj
+(3809   readsb\(dev, &sb\);) 104.8443 Tj
 0 -123.4137 Td
-(3810   empty = 0;) 74.2647 Tj
+(3810   for\(inum = 1; inum < sb.ninodes; inum++\){  // loop ove\
+r inode blocks) 327.6386 Tj
 0 -132.9071 Td
-(3811   for\(ip = &icache.inode[0]; ip < &icache.inode[NINODE]; \
-ip++\){) 297.059 Tj
+(3811     bp = bread\(dev, IBLOCK\(inum\)\);) 170.3721 Tj
 0 -142.4004 Td
-(3812     if\(ip->ref > 0 && ip->dev == dev && ip->inum == inum\)\
-{) 275.2164 Tj
+(3812     dip = \(struct dinode*\)bp->data + inum%IPB;) 222.7942 Tj
 0 -151.8938 Td
-(3813       ip->ref++;) 91.7388 Tj
+(3813     if\(dip->type == 0\){  // a free inode) 196.5831 Tj
 0 -161.3871 Td
-(3814       release\(&icache.lock\);) 144.161 Tj
+(3814       memset\(dip, 0, sizeof\(*dip\)\);) 174.7406 Tj
 0 -170.8805 Td
-(3815       return ip;) 91.7388 Tj
+(3815       dip->type = type;) 122.3184 Tj
 0 -180.3739 Td
-(3816     }) 43.6851 Tj
+(3816       bwrite\(bp\);   // mark it allocated on the disk) 249.0053 Tj
 0 -189.8672 Td
-(3817     if\(empty == 0 && ip->ref == 0\)    // Remember empty \
-slot.) 288.322 Tj
+(3817       brelse\(bp\);) 96.1073 Tj
 0 -199.3606 Td
-(3818       empty = ip;) 96.1073 Tj
+(3818       return iget\(dev, inum\);) 148.5295 Tj
 0 -208.8539 Td
-(3819   }) 34.9481 Tj
+(3819     }) 43.6851 Tj
 0 -218.3473 Td
-(3820 ) 21.8426 Tj
+(3820     brelse\(bp\);) 87.3703 Tj
 0 -227.8407 Td
-(3821   // Allocate fresh inode.) 135.4239 Tj
+(3821   }) 34.9481 Tj
 0 -237.334 Td
-(3822   if\(empty == 0\)) 91.7388 Tj
+(3822   panic\("ialloc: no inodes"\);) 148.5295 Tj
 0 -246.8274 Td
-(3823     panic\("iget: no inodes"\);) 148.5295 Tj
+(3823 }) 26.2111 Tj
 0 -256.3207 Td
 (3824 ) 21.8426 Tj
 0 -265.8141 Td
-(3825   ip = empty;) 78.6333 Tj
+(3825 // Copy inode, which has changed, from memory to disk.) 257.7424 Tj
 0 -275.3075 Td
-(3826   ip->dev = dev;) 91.7388 Tj
+(3826 void) 39.3166 Tj
 0 -284.8008 Td
-(3827   ip->inum = inum;) 100.4758 Tj
+(3827 iupdate\(struct inode *ip\)) 131.0554 Tj
 0 -294.2942 Td
-(3828   ip->ref = 1;) 83.0018 Tj
+(3828 {) 26.2111 Tj
 0 -303.7875 Td
-(3829   ip->flags = 0;) 91.7388 Tj
+(3829   struct buf *bp;) 96.1073 Tj
 0 -313.2809 Td
-(3830   release\(&icache.lock\);) 126.6869 Tj
+(3830   struct dinode *dip;) 113.5814 Tj
 0 -322.7743 Td
 (3831 ) 21.8426 Tj
 0 -332.2676 Td
-(3832   return ip;) 74.2647 Tj
+(3832   bp = bread\(ip->dev, IBLOCK\(ip->inum\)\);) 196.5831 Tj
 0 -341.761 Td
-(3833 }) 26.2111 Tj
+(3833   dip = \(struct dinode*\)bp->data + ip->inum%IPB;) 231.5313 Tj
 0 -351.2543 Td
-(3834 ) 21.8426 Tj
+(3834   dip->type = ip->type;) 122.3184 Tj
 0 -360.7477 Td
-(3835 // Increment reference count for ip.) 179.1091 Tj
+(3835   dip->major = ip->major;) 131.0554 Tj
 0 -370.2411 Td
-(3836 // Returns ip to enable ip = idup\(ip1\) idiom.) 218.4257 Tj
+(3836   dip->minor = ip->minor;) 131.0554 Tj
 0 -379.7344 Td
-(3837 struct inode*) 78.6333 Tj
+(3837   dip->nlink = ip->nlink;) 131.0554 Tj
 0 -389.2278 Td
-(3838 idup\(struct inode *ip\)) 117.9499 Tj
+(3838   dip->size = ip->size;) 122.3184 Tj
 0 -398.7211 Td
-(3839 {) 26.2111 Tj
+(3839   memmove\(dip->addrs, ip->addrs, sizeof\(ip->addrs\)\);) 249.0053 Tj
 0 -408.2145 Td
-(3840   acquire\(&icache.lock\);) 126.6869 Tj
+(3840   bwrite\(bp\);) 78.6333 Tj
 0 -417.7079 Td
-(3841   ip->ref++;) 74.2647 Tj
+(3841   brelse\(bp\);) 78.6333 Tj
 0 -427.2012 Td
-(3842   release\(&icache.lock\);) 126.6869 Tj
+(3842 }) 26.2111 Tj
 0 -436.6946 Td
-(3843   return ip;) 74.2647 Tj
+(3843 ) 21.8426 Tj
 0 -446.1879 Td
-(3844 }) 26.2111 Tj
+(3844 ) 21.8426 Tj
 0 -455.6813 Td
 (3845 ) 21.8426 Tj
 0 -465.1747 Td
@@ -14111,97 +14221,100 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/fs.c  Page 5) 152.898 Tj
+(Aug  8 01:04 2009  xv6/fs.c  Page 5) 152.898 Tj
 0 -28.4801 Td
-(3850 // Lock the given inode.) 126.6869 Tj
+(3850 // Find the inode with number inum on device dev) 231.5313 Tj
 0 -37.9735 Td
-(3851 void) 39.3166 Tj
+(3851 // and return the in-memory copy.) 166.0035 Tj
 0 -47.4668 Td
-(3852 ilock\(struct inode *ip\)) 122.3184 Tj
+(3852 static struct inode*) 109.2129 Tj
 0 -56.9602 Td
-(3853 {) 26.2111 Tj
+(3853 iget\(uint dev, uint inum\)) 131.0554 Tj
 0 -66.4535 Td
-(3854   struct buf *bp;) 96.1073 Tj
+(3854 {) 26.2111 Tj
 0 -75.9469 Td
-(3855   struct dinode *dip;) 113.5814 Tj
+(3855   struct inode *ip, *empty;) 139.7925 Tj
 0 -85.4403 Td
 (3856 ) 21.8426 Tj
 0 -94.9336 Td
-(3857   if\(ip == 0 || ip->ref < 1\)) 144.161 Tj
+(3857   acquire\(&icache.lock\);) 126.6869 Tj
 0 -104.427 Td
-(3858     panic\("ilock"\);) 104.8443 Tj
+(3858 ) 21.8426 Tj
 0 -113.9203 Td
-(3859 ) 21.8426 Tj
+(3859   // Try for cached inode.) 135.4239 Tj
 0 -123.4137 Td
-(3860   acquire\(&icache.lock\);) 126.6869 Tj
+(3860   empty = 0;) 74.2647 Tj
 0 -132.9071 Td
-(3861   while\(ip->flags & I_BUSY\)) 139.7925 Tj
+(3861   for\(ip = &icache.inode[0]; ip < &icache.inode[NINODE]; \
+ip++\){) 297.059 Tj
 0 -142.4004 Td
-(3862     sleep\(ip, &icache.lock\);) 144.161 Tj
+(3862     if\(ip->ref > 0 && ip->dev == dev && ip->inum == inum\)\
+{) 275.2164 Tj
 0 -151.8938 Td
-(3863   ip->flags |= I_BUSY;) 117.9499 Tj
+(3863       ip->ref++;) 91.7388 Tj
 0 -161.3871 Td
-(3864   release\(&icache.lock\);) 126.6869 Tj
+(3864       release\(&icache.lock\);) 144.161 Tj
 0 -170.8805 Td
-(3865 ) 21.8426 Tj
+(3865       return ip;) 91.7388 Tj
 0 -180.3739 Td
-(3866   if\(!\(ip->flags & I_VALID\)\){) 148.5295 Tj
+(3866     }) 43.6851 Tj
 0 -189.8672 Td
-(3867     bp = bread\(ip->dev, IBLOCK\(ip->inum\)\);) 205.3202 Tj
+(3867     if\(empty == 0 && ip->ref == 0\)    // Remember empty \
+slot.) 288.322 Tj
 0 -199.3606 Td
-(3868     dip = \(struct dinode*\)bp->data + ip->inum%IPB;) 240.2683 Tj
+(3868       empty = ip;) 96.1073 Tj
 0 -208.8539 Td
-(3869     ip->type = dip->type;) 131.0554 Tj
+(3869   }) 34.9481 Tj
 0 -218.3473 Td
-(3870     ip->major = dip->major;) 139.7925 Tj
+(3870 ) 21.8426 Tj
 0 -227.8407 Td
-(3871     ip->minor = dip->minor;) 139.7925 Tj
+(3871   // Allocate fresh inode.) 135.4239 Tj
 0 -237.334 Td
-(3872     ip->nlink = dip->nlink;) 139.7925 Tj
+(3872   if\(empty == 0\)) 91.7388 Tj
 0 -246.8274 Td
-(3873     ip->size = dip->size;) 131.0554 Tj
+(3873     panic\("iget: no inodes"\);) 148.5295 Tj
 0 -256.3207 Td
-(3874     memmove\(ip->addrs, dip->addrs, sizeof\(ip->addrs\)\);) 257.7424 Tj
+(3874 ) 21.8426 Tj
 0 -265.8141 Td
-(3875     brelse\(bp\);) 87.3703 Tj
+(3875   ip = empty;) 78.6333 Tj
 0 -275.3075 Td
-(3876     ip->flags |= I_VALID;) 131.0554 Tj
+(3876   ip->dev = dev;) 91.7388 Tj
 0 -284.8008 Td
-(3877     if\(ip->type == 0\)) 113.5814 Tj
+(3877   ip->inum = inum;) 100.4758 Tj
 0 -294.2942 Td
-(3878       panic\("ilock: no type"\);) 152.898 Tj
+(3878   ip->ref = 1;) 83.0018 Tj
 0 -303.7875 Td
-(3879   }) 34.9481 Tj
+(3879   ip->flags = 0;) 91.7388 Tj
 0 -313.2809 Td
-(3880 }) 26.2111 Tj
+(3880   release\(&icache.lock\);) 126.6869 Tj
 0 -322.7743 Td
 (3881 ) 21.8426 Tj
 0 -332.2676 Td
-(3882 // Unlock the given inode.) 135.4239 Tj
+(3882   return ip;) 74.2647 Tj
 0 -341.761 Td
-(3883 void) 39.3166 Tj
+(3883 }) 26.2111 Tj
 0 -351.2543 Td
-(3884 iunlock\(struct inode *ip\)) 131.0554 Tj
+(3884 ) 21.8426 Tj
 0 -360.7477 Td
-(3885 {) 26.2111 Tj
+(3885 // Increment reference count for ip.) 179.1091 Tj
 0 -370.2411 Td
-(3886   if\(ip == 0 || !\(ip->flags & I_BUSY\) || ip->ref < 1\)) 253.3738 Tj
+(3886 // Returns ip to enable ip = idup\(ip1\) idiom.) 218.4257 Tj
 0 -379.7344 Td
-(3887     panic\("iunlock"\);) 113.5814 Tj
+(3887 struct inode*) 78.6333 Tj
 0 -389.2278 Td
-(3888 ) 21.8426 Tj
+(3888 idup\(struct inode *ip\)) 117.9499 Tj
 0 -398.7211 Td
-(3889   acquire\(&icache.lock\);) 126.6869 Tj
+(3889 {) 26.2111 Tj
 0 -408.2145 Td
-(3890   ip->flags &= ~I_BUSY;) 122.3184 Tj
+(3890   acquire\(&icache.lock\);) 126.6869 Tj
 0 -417.7079 Td
-(3891   wakeup\(ip\);) 78.6333 Tj
+(3891   ip->ref++;) 74.2647 Tj
 0 -427.2012 Td
 (3892   release\(&icache.lock\);) 126.6869 Tj
 0 -436.6946 Td
-(3893 }) 26.2111 Tj
+(3893   return ip;) 74.2647 Tj
 0 -446.1879 Td
-(3894 ) 21.8426 Tj
+(3894 }) 26.2111 Tj
 0 -455.6813 Td
 (3895 ) 21.8426 Tj
 0 -465.1747 Td
@@ -14242,6 +14355,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -14259,96 +14374,95 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/fs.c  Page 6) 152.898 Tj
+(Aug  8 01:04 2009  xv6/fs.c  Page 6) 152.898 Tj
 0 -28.4801 Td
-(3900 // Caller holds reference to unlocked ip.  Drop reference.) 275.2164 Tj
+(3900 // Lock the given inode.) 126.6869 Tj
 0 -37.9735 Td
 (3901 void) 39.3166 Tj
 0 -47.4668 Td
-(3902 iput\(struct inode *ip\)) 117.9499 Tj
+(3902 ilock\(struct inode *ip\)) 122.3184 Tj
 0 -56.9602 Td
 (3903 {) 26.2111 Tj
 0 -66.4535 Td
-(3904   acquire\(&icache.lock\);) 126.6869 Tj
+(3904   struct buf *bp;) 96.1073 Tj
 0 -75.9469 Td
-(3905   if\(ip->ref == 1 && \(ip->flags & I_VALID\) && ip->nlink\
- == 0\){) 292.6905 Tj
+(3905   struct dinode *dip;) 113.5814 Tj
 0 -85.4403 Td
-(3906     // inode is no longer used: truncate and free inode.) 266.4794 Tj
+(3906 ) 21.8426 Tj
 0 -94.9336 Td
-(3907     if\(ip->flags & I_BUSY\)) 135.4239 Tj
+(3907   if\(ip == 0 || ip->ref < 1\)) 144.161 Tj
 0 -104.427 Td
-(3908       panic\("iput busy"\);) 131.0554 Tj
+(3908     panic\("ilock"\);) 104.8443 Tj
 0 -113.9203 Td
-(3909     ip->flags |= I_BUSY;) 126.6869 Tj
+(3909 ) 21.8426 Tj
 0 -123.4137 Td
-(3910     release\(&icache.lock\);) 135.4239 Tj
+(3910   acquire\(&icache.lock\);) 126.6869 Tj
 0 -132.9071 Td
-(3911     itrunc\(ip\);) 87.3703 Tj
+(3911   while\(ip->flags & I_BUSY\)) 139.7925 Tj
 0 -142.4004 Td
-(3912     ip->type = 0;) 96.1073 Tj
+(3912     sleep\(ip, &icache.lock\);) 144.161 Tj
 0 -151.8938 Td
-(3913     iupdate\(ip\);) 91.7388 Tj
+(3913   ip->flags |= I_BUSY;) 117.9499 Tj
 0 -161.3871 Td
-(3914     acquire\(&icache.lock\);) 135.4239 Tj
+(3914   release\(&icache.lock\);) 126.6869 Tj
 0 -170.8805 Td
-(3915     ip->flags &= ~I_BUSY;) 131.0554 Tj
+(3915 ) 21.8426 Tj
 0 -180.3739 Td
-(3916     wakeup\(ip\);) 87.3703 Tj
+(3916   if\(!\(ip->flags & I_VALID\)\){) 148.5295 Tj
 0 -189.8672 Td
-(3917   }) 34.9481 Tj
+(3917     bp = bread\(ip->dev, IBLOCK\(ip->inum\)\);) 205.3202 Tj
 0 -199.3606 Td
-(3918   ip->ref--;) 74.2647 Tj
+(3918     dip = \(struct dinode*\)bp->data + ip->inum%IPB;) 240.2683 Tj
 0 -208.8539 Td
-(3919   release\(&icache.lock\);) 126.6869 Tj
+(3919     ip->type = dip->type;) 131.0554 Tj
 0 -218.3473 Td
-(3920 }) 26.2111 Tj
+(3920     ip->major = dip->major;) 139.7925 Tj
 0 -227.8407 Td
-(3921 ) 21.8426 Tj
+(3921     ip->minor = dip->minor;) 139.7925 Tj
 0 -237.334 Td
-(3922 // Common idiom: unlock, then put.) 170.3721 Tj
+(3922     ip->nlink = dip->nlink;) 139.7925 Tj
 0 -246.8274 Td
-(3923 void) 39.3166 Tj
+(3923     ip->size = dip->size;) 131.0554 Tj
 0 -256.3207 Td
-(3924 iunlockput\(struct inode *ip\)) 144.161 Tj
+(3924     memmove\(ip->addrs, dip->addrs, sizeof\(ip->addrs\)\);) 257.7424 Tj
 0 -265.8141 Td
-(3925 {) 26.2111 Tj
+(3925     brelse\(bp\);) 87.3703 Tj
 0 -275.3075 Td
-(3926   iunlock\(ip\);) 83.0018 Tj
+(3926     ip->flags |= I_VALID;) 131.0554 Tj
 0 -284.8008 Td
-(3927   iput\(ip\);) 69.8962 Tj
+(3927     if\(ip->type == 0\)) 113.5814 Tj
 0 -294.2942 Td
-(3928 }) 26.2111 Tj
+(3928       panic\("ilock: no type"\);) 152.898 Tj
 0 -303.7875 Td
-(3929 ) 21.8426 Tj
+(3929   }) 34.9481 Tj
 0 -313.2809 Td
-(3930 ) 21.8426 Tj
+(3930 }) 26.2111 Tj
 0 -322.7743 Td
 (3931 ) 21.8426 Tj
 0 -332.2676 Td
-(3932 ) 21.8426 Tj
+(3932 // Unlock the given inode.) 135.4239 Tj
 0 -341.761 Td
-(3933 ) 21.8426 Tj
+(3933 void) 39.3166 Tj
 0 -351.2543 Td
-(3934 ) 21.8426 Tj
+(3934 iunlock\(struct inode *ip\)) 131.0554 Tj
 0 -360.7477 Td
-(3935 ) 21.8426 Tj
+(3935 {) 26.2111 Tj
 0 -370.2411 Td
-(3936 ) 21.8426 Tj
+(3936   if\(ip == 0 || !\(ip->flags & I_BUSY\) || ip->ref < 1\)) 253.3738 Tj
 0 -379.7344 Td
-(3937 ) 21.8426 Tj
+(3937     panic\("iunlock"\);) 113.5814 Tj
 0 -389.2278 Td
 (3938 ) 21.8426 Tj
 0 -398.7211 Td
-(3939 ) 21.8426 Tj
+(3939   acquire\(&icache.lock\);) 126.6869 Tj
 0 -408.2145 Td
-(3940 ) 21.8426 Tj
+(3940   ip->flags &= ~I_BUSY;) 122.3184 Tj
 0 -417.7079 Td
-(3941 ) 21.8426 Tj
+(3941   wakeup\(ip\);) 78.6333 Tj
 0 -427.2012 Td
-(3942 ) 21.8426 Tj
+(3942   release\(&icache.lock\);) 126.6869 Tj
 0 -436.6946 Td
-(3943 ) 21.8426 Tj
+(3943 }) 26.2111 Tj
 0 -446.1879 Td
 (3944 ) 21.8426 Tj
 0 -455.6813 Td
@@ -14379,94 +14493,94 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/fs.c  Page 7) 152.898 Tj
+(Aug  8 01:04 2009  xv6/fs.c  Page 7) 152.898 Tj
 0 -28.4801 Td
-(3950 // Allocate a new inode with the given type on device dev.) 275.2164 Tj
+(3950 // Caller holds reference to unlocked ip.  Drop reference.) 275.2164 Tj
 0 -37.9735 Td
-(3951 struct inode*) 78.6333 Tj
+(3951 void) 39.3166 Tj
 0 -47.4668 Td
-(3952 ialloc\(uint dev, short type\)) 144.161 Tj
+(3952 iput\(struct inode *ip\)) 117.9499 Tj
 0 -56.9602 Td
 (3953 {) 26.2111 Tj
 0 -66.4535 Td
-(3954   int inum;) 69.8962 Tj
+(3954   acquire\(&icache.lock\);) 126.6869 Tj
 0 -75.9469 Td
-(3955   struct buf *bp;) 96.1073 Tj
+(3955   if\(ip->ref == 1 && \(ip->flags & I_VALID\) && ip->nlink\
+ == 0\){) 292.6905 Tj
 0 -85.4403 Td
-(3956   struct dinode *dip;) 113.5814 Tj
+(3956     // inode is no longer used: truncate and free inode.) 266.4794 Tj
 0 -94.9336 Td
-(3957   struct superblock sb;) 122.3184 Tj
+(3957     if\(ip->flags & I_BUSY\)) 135.4239 Tj
 0 -104.427 Td
-(3958 ) 21.8426 Tj
+(3958       panic\("iput busy"\);) 131.0554 Tj
 0 -113.9203 Td
-(3959   readsb\(dev, &sb\);) 104.8443 Tj
+(3959     ip->flags |= I_BUSY;) 126.6869 Tj
 0 -123.4137 Td
-(3960   for\(inum = 1; inum < sb.ninodes; inum++\){  // loop ove\
-r inode blocks) 327.6386 Tj
+(3960     release\(&icache.lock\);) 135.4239 Tj
 0 -132.9071 Td
-(3961     bp = bread\(dev, IBLOCK\(inum\)\);) 170.3721 Tj
+(3961     itrunc\(ip\);) 87.3703 Tj
 0 -142.4004 Td
-(3962     dip = \(struct dinode*\)bp->data + inum%IPB;) 222.7942 Tj
+(3962     ip->type = 0;) 96.1073 Tj
 0 -151.8938 Td
-(3963     if\(dip->type == 0\){  // a free inode) 196.5831 Tj
+(3963     iupdate\(ip\);) 91.7388 Tj
 0 -161.3871 Td
-(3964       memset\(dip, 0, sizeof\(*dip\)\);) 174.7406 Tj
+(3964     acquire\(&icache.lock\);) 135.4239 Tj
 0 -170.8805 Td
-(3965       dip->type = type;) 122.3184 Tj
+(3965     ip->flags = 0;) 100.4758 Tj
 0 -180.3739 Td
-(3966       bwrite\(bp\);   // mark it allocated on the disk) 249.0053 Tj
+(3966     wakeup\(ip\);) 87.3703 Tj
 0 -189.8672 Td
-(3967       brelse\(bp\);) 96.1073 Tj
+(3967   }) 34.9481 Tj
 0 -199.3606 Td
-(3968       return iget\(dev, inum\);) 148.5295 Tj
+(3968   ip->ref--;) 74.2647 Tj
 0 -208.8539 Td
-(3969     }) 43.6851 Tj
+(3969   release\(&icache.lock\);) 126.6869 Tj
 0 -218.3473 Td
-(3970     brelse\(bp\);) 87.3703 Tj
+(3970 }) 26.2111 Tj
 0 -227.8407 Td
-(3971   }) 34.9481 Tj
+(3971 ) 21.8426 Tj
 0 -237.334 Td
-(3972   panic\("ialloc: no inodes"\);) 148.5295 Tj
+(3972 // Common idiom: unlock, then put.) 170.3721 Tj
 0 -246.8274 Td
-(3973 }) 26.2111 Tj
+(3973 void) 39.3166 Tj
 0 -256.3207 Td
-(3974 ) 21.8426 Tj
+(3974 iunlockput\(struct inode *ip\)) 144.161 Tj
 0 -265.8141 Td
-(3975 // Copy inode, which has changed, from memory to disk.) 257.7424 Tj
+(3975 {) 26.2111 Tj
 0 -275.3075 Td
-(3976 void) 39.3166 Tj
+(3976   iunlock\(ip\);) 83.0018 Tj
 0 -284.8008 Td
-(3977 iupdate\(struct inode *ip\)) 131.0554 Tj
+(3977   iput\(ip\);) 69.8962 Tj
 0 -294.2942 Td
-(3978 {) 26.2111 Tj
+(3978 }) 26.2111 Tj
 0 -303.7875 Td
-(3979   struct buf *bp;) 96.1073 Tj
+(3979 ) 21.8426 Tj
 0 -313.2809 Td
-(3980   struct dinode *dip;) 113.5814 Tj
+(3980 ) 21.8426 Tj
 0 -322.7743 Td
 (3981 ) 21.8426 Tj
 0 -332.2676 Td
-(3982   bp = bread\(ip->dev, IBLOCK\(ip->inum\)\);) 196.5831 Tj
+(3982 ) 21.8426 Tj
 0 -341.761 Td
-(3983   dip = \(struct dinode*\)bp->data + ip->inum%IPB;) 231.5313 Tj
+(3983 ) 21.8426 Tj
 0 -351.2543 Td
-(3984   dip->type = ip->type;) 122.3184 Tj
+(3984 ) 21.8426 Tj
 0 -360.7477 Td
-(3985   dip->major = ip->major;) 131.0554 Tj
+(3985 ) 21.8426 Tj
 0 -370.2411 Td
-(3986   dip->minor = ip->minor;) 131.0554 Tj
+(3986 ) 21.8426 Tj
 0 -379.7344 Td
-(3987   dip->nlink = ip->nlink;) 131.0554 Tj
+(3987 ) 21.8426 Tj
 0 -389.2278 Td
-(3988   dip->size = ip->size;) 122.3184 Tj
+(3988 ) 21.8426 Tj
 0 -398.7211 Td
-(3989   memmove\(dip->addrs, ip->addrs, sizeof\(ip->addrs\)\);) 249.0053 Tj
+(3989 ) 21.8426 Tj
 0 -408.2145 Td
-(3990   bwrite\(bp\);) 78.6333 Tj
+(3990 ) 21.8426 Tj
 0 -417.7079 Td
-(3991   brelse\(bp\);) 78.6333 Tj
+(3991 ) 21.8426 Tj
 0 -427.2012 Td
-(3992 }) 26.2111 Tj
+(3992 ) 21.8426 Tj
 0 -436.6946 Td
 (3993 ) 21.8426 Tj
 0 -446.1879 Td
@@ -14511,6 +14625,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -14528,7 +14644,7 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/fs.c  Page 8) 152.898 Tj
+(Aug  8 01:04 2009  xv6/fs.c  Page 8) 152.898 Tj
 0 -28.4801 Td
 (4000 // Inode contents) 96.1073 Tj
 0 -37.9735 Td
@@ -14550,12 +14666,11 @@ re) 283.9534 Tj
 (4007 // Return the disk block address of the nth block in inode\
  ip.) 292.6905 Tj
 0 -104.427 Td
-(4008 // If there is no such block, alloc controls whether one i\
-s allocated.) 327.6386 Tj
+(4008 // If there is no such block, bmap allocates one.) 235.8998 Tj
 0 -113.9203 Td
 (4009 static uint) 69.8962 Tj
 0 -123.4137 Td
-(4010 bmap\(struct inode *ip, uint bn, int alloc\)) 205.3202 Tj
+(4010 bmap\(struct inode *ip, uint bn\)) 157.2665 Tj
 0 -132.9071 Td
 (4011 {) 26.2111 Tj
 0 -142.4004 Td
@@ -14567,71 +14682,71 @@ s allocated.) 327.6386 Tj
 0 -170.8805 Td
 (4015   if\(bn < NDIRECT\){) 104.8443 Tj
 0 -180.3739 Td
-(4016     if\(\(addr = ip->addrs[bn]\) == 0\){) 179.1091 Tj
+(4016     if\(\(addr = ip->addrs[bn]\) == 0\)) 174.7406 Tj
 0 -189.8672 Td
-(4017       if\(!alloc\)) 91.7388 Tj
+(4017       ip->addrs[bn] = addr = balloc\(ip->dev\);) 218.4257 Tj
 0 -199.3606 Td
-(4018         return -1;) 100.4758 Tj
+(4018     return addr;) 91.7388 Tj
 0 -208.8539 Td
-(4019       ip->addrs[bn] = addr = balloc\(ip->dev\);) 218.4257 Tj
+(4019   }) 34.9481 Tj
 0 -218.3473 Td
-(4020     }) 43.6851 Tj
+(4020   bn -= NDIRECT;) 91.7388 Tj
 0 -227.8407 Td
-(4021     return addr;) 91.7388 Tj
+(4021 ) 21.8426 Tj
 0 -237.334 Td
-(4022   }) 34.9481 Tj
+(4022   if\(bn < NINDIRECT\){) 113.5814 Tj
 0 -246.8274 Td
-(4023   bn -= NDIRECT;) 91.7388 Tj
+(4023     // Load indirect block, allocating if necessary.) 249.0053 Tj
 0 -256.3207 Td
-(4024 ) 21.8426 Tj
+(4024     if\(\(addr = ip->addrs[NDIRECT]\) == 0\)) 196.5831 Tj
 0 -265.8141 Td
-(4025   if\(bn < NINDIRECT\){) 113.5814 Tj
+(4025       ip->addrs[NDIRECT] = addr = balloc\(ip->dev\);) 240.2683 Tj
 0 -275.3075 Td
-(4026     // Load indirect block, allocating if necessary.) 249.0053 Tj
+(4026     bp = bread\(ip->dev, addr\);) 152.898 Tj
 0 -284.8008 Td
-(4027     if\(\(addr = ip->addrs[INDIRECT]\) == 0\){) 205.3202 Tj
+(4027     a = \(uint*\)bp->data;) 126.6869 Tj
 0 -294.2942 Td
-(4028       if\(!alloc\)) 91.7388 Tj
+(4028     if\(\(addr = a[bn]\) == 0\){) 144.161 Tj
 0 -303.7875 Td
-(4029         return -1;) 100.4758 Tj
+(4029       a[bn] = addr = balloc\(ip->dev\);) 183.4776 Tj
 0 -313.2809 Td
-(4030       ip->addrs[INDIRECT] = addr = balloc\(ip->dev\);) 244.6368 Tj
+(4030       bwrite\(bp\);) 96.1073 Tj
 0 -322.7743 Td
 (4031     }) 43.6851 Tj
 0 -332.2676 Td
-(4032     bp = bread\(ip->dev, addr\);) 152.898 Tj
+(4032     brelse\(bp\);) 87.3703 Tj
 0 -341.761 Td
-(4033     a = \(uint*\)bp->data;) 126.6869 Tj
+(4033     return addr;) 91.7388 Tj
 0 -351.2543 Td
-(4034 ) 21.8426 Tj
+(4034   }) 34.9481 Tj
 0 -360.7477 Td
-(4035     if\(\(addr = a[bn]\) == 0\){) 144.161 Tj
+(4035 ) 21.8426 Tj
 0 -370.2411 Td
-(4036       if\(!alloc\){) 96.1073 Tj
+(4036   panic\("bmap: out of range"\);) 152.898 Tj
 0 -379.7344 Td
-(4037         brelse\(bp\);) 104.8443 Tj
+(4037 }) 26.2111 Tj
 0 -389.2278 Td
-(4038         return -1;) 100.4758 Tj
+(4038 ) 21.8426 Tj
 0 -398.7211 Td
-(4039       }) 52.4222 Tj
+(4039 ) 21.8426 Tj
 0 -408.2145 Td
-(4040       a[bn] = addr = balloc\(ip->dev\);) 183.4776 Tj
+(4040 ) 21.8426 Tj
 0 -417.7079 Td
-(4041       bwrite\(bp\);) 96.1073 Tj
+(4041 ) 21.8426 Tj
 0 -427.2012 Td
-(4042     }) 43.6851 Tj
+(4042 ) 21.8426 Tj
 0 -436.6946 Td
-(4043     brelse\(bp\);) 87.3703 Tj
+(4043 ) 21.8426 Tj
 0 -446.1879 Td
-(4044     return addr;) 91.7388 Tj
+(4044 ) 21.8426 Tj
 0 -455.6813 Td
-(4045   }) 34.9481 Tj
+(4045 ) 21.8426 Tj
 0 -465.1747 Td
 (4046 ) 21.8426 Tj
 0 -474.668 Td
-(4047   panic\("bmap: out of range"\);) 152.898 Tj
+(4047 ) 21.8426 Tj
 0 -484.1614 Td
-(4048 }) 26.2111 Tj
+(4048 ) 21.8426 Tj
 0 -493.6547 Td
 (4049 ) 21.8426 Tj
 0 -522.1348 Td
@@ -14652,93 +14767,93 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/fs.c  Page 9) 152.898 Tj
+(Aug  8 01:04 2009  xv6/fs.c  Page 9) 152.898 Tj
 0 -28.4801 Td
 (4050 // Truncate inode \(discard contents\).) 183.4776 Tj
 0 -37.9735 Td
-(4051 static void) 69.8962 Tj
+(4051 // Only called after the last dirent referring) 222.7942 Tj
 0 -47.4668 Td
-(4052 itrunc\(struct inode *ip\)) 126.6869 Tj
+(4052 // to this inode has been erased on disk.) 200.9517 Tj
 0 -56.9602 Td
-(4053 {) 26.2111 Tj
+(4053 static void) 69.8962 Tj
 0 -66.4535 Td
-(4054   int i, j;) 69.8962 Tj
+(4054 itrunc\(struct inode *ip\)) 126.6869 Tj
 0 -75.9469 Td
-(4055   struct buf *bp;) 96.1073 Tj
+(4055 {) 26.2111 Tj
 0 -85.4403 Td
-(4056   uint *a;) 65.5277 Tj
+(4056   int i, j;) 69.8962 Tj
 0 -94.9336 Td
-(4057 ) 21.8426 Tj
+(4057   struct buf *bp;) 96.1073 Tj
 0 -104.427 Td
-(4058   for\(i = 0; i < NDIRECT; i++\){) 157.2665 Tj
+(4058   uint *a;) 65.5277 Tj
 0 -113.9203 Td
-(4059     if\(ip->addrs[i]\){) 113.5814 Tj
+(4059 ) 21.8426 Tj
 0 -123.4137 Td
-(4060       bfree\(ip->dev, ip->addrs[i]\);) 174.7406 Tj
+(4060   for\(i = 0; i < NDIRECT; i++\){) 157.2665 Tj
 0 -132.9071 Td
-(4061       ip->addrs[i] = 0;) 122.3184 Tj
+(4061     if\(ip->addrs[i]\){) 113.5814 Tj
 0 -142.4004 Td
-(4062     }) 43.6851 Tj
+(4062       bfree\(ip->dev, ip->addrs[i]\);) 174.7406 Tj
 0 -151.8938 Td
-(4063   }) 34.9481 Tj
+(4063       ip->addrs[i] = 0;) 122.3184 Tj
 0 -161.3871 Td
-(4064 ) 21.8426 Tj
+(4064     }) 43.6851 Tj
 0 -170.8805 Td
-(4065   if\(ip->addrs[INDIRECT]\){) 135.4239 Tj
+(4065   }) 34.9481 Tj
 0 -180.3739 Td
-(4066     bp = bread\(ip->dev, ip->addrs[INDIRECT]\);) 218.4257 Tj
+(4066 ) 21.8426 Tj
 0 -189.8672 Td
-(4067     a = \(uint*\)bp->data;) 126.6869 Tj
+(4067   if\(ip->addrs[NDIRECT]\){) 131.0554 Tj
 0 -199.3606 Td
-(4068     for\(j = 0; j < NINDIRECT; j++\){) 174.7406 Tj
+(4068     bp = bread\(ip->dev, ip->addrs[NDIRECT]\);) 214.0572 Tj
 0 -208.8539 Td
-(4069       if\(a[j]\)) 83.0018 Tj
+(4069     a = \(uint*\)bp->data;) 126.6869 Tj
 0 -218.3473 Td
-(4070         bfree\(ip->dev, a[j]\);) 148.5295 Tj
+(4070     for\(j = 0; j < NINDIRECT; j++\){) 174.7406 Tj
 0 -227.8407 Td
-(4071     }) 43.6851 Tj
+(4071       if\(a[j]\)) 83.0018 Tj
 0 -237.334 Td
-(4072     brelse\(bp\);) 87.3703 Tj
+(4072         bfree\(ip->dev, a[j]\);) 148.5295 Tj
 0 -246.8274 Td
-(4073     ip->addrs[INDIRECT] = 0;) 144.161 Tj
+(4073     }) 43.6851 Tj
 0 -256.3207 Td
-(4074   }) 34.9481 Tj
+(4074     brelse\(bp\);) 87.3703 Tj
 0 -265.8141 Td
-(4075 ) 21.8426 Tj
+(4075     bfree\(ip->dev, ip->addrs[NDIRECT]\);) 192.2146 Tj
 0 -275.3075 Td
-(4076   ip->size = 0;) 87.3703 Tj
+(4076     ip->addrs[NDIRECT] = 0;) 139.7925 Tj
 0 -284.8008 Td
-(4077   iupdate\(ip\);) 83.0018 Tj
+(4077   }) 34.9481 Tj
 0 -294.2942 Td
-(4078 }) 26.2111 Tj
+(4078 ) 21.8426 Tj
 0 -303.7875 Td
-(4079 ) 21.8426 Tj
+(4079   ip->size = 0;) 87.3703 Tj
 0 -313.2809 Td
-(4080 // Copy stat information from inode.) 179.1091 Tj
+(4080   iupdate\(ip\);) 83.0018 Tj
 0 -322.7743 Td
-(4081 void) 39.3166 Tj
+(4081 }) 26.2111 Tj
 0 -332.2676 Td
-(4082 stati\(struct inode *ip, struct stat *st\)) 196.5831 Tj
+(4082 ) 21.8426 Tj
 0 -341.761 Td
-(4083 {) 26.2111 Tj
+(4083 // Copy stat information from inode.) 179.1091 Tj
 0 -351.2543 Td
-(4084   st->dev = ip->dev;) 109.2129 Tj
+(4084 void) 39.3166 Tj
 0 -360.7477 Td
-(4085   st->ino = ip->inum;) 113.5814 Tj
+(4085 stati\(struct inode *ip, struct stat *st\)) 196.5831 Tj
 0 -370.2411 Td
-(4086   st->type = ip->type;) 117.9499 Tj
+(4086 {) 26.2111 Tj
 0 -379.7344 Td
-(4087   st->nlink = ip->nlink;) 126.6869 Tj
+(4087   st->dev = ip->dev;) 109.2129 Tj
 0 -389.2278 Td
-(4088   st->size = ip->size;) 117.9499 Tj
+(4088   st->ino = ip->inum;) 113.5814 Tj
 0 -398.7211 Td
-(4089 }) 26.2111 Tj
+(4089   st->type = ip->type;) 117.9499 Tj
 0 -408.2145 Td
-(4090 ) 21.8426 Tj
+(4090   st->nlink = ip->nlink;) 126.6869 Tj
 0 -417.7079 Td
-(4091 ) 21.8426 Tj
+(4091   st->size = ip->size;) 117.9499 Tj
 0 -427.2012 Td
-(4092 ) 21.8426 Tj
+(4092 }) 26.2111 Tj
 0 -436.6946 Td
 (4093 ) 21.8426 Tj
 0 -446.1879 Td
@@ -14783,6 +14898,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -14800,7 +14917,7 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/fs.c  Page 10) 157.2665 Tj
+(Aug  8 01:04 2009  xv6/fs.c  Page 10) 157.2665 Tj
 0 -28.4801 Td
 (4100 // Read data from inode.) 126.6869 Tj
 0 -37.9735 Td
@@ -14841,7 +14958,7 @@ ajor].read\)) 318.9016 Tj
 0 -199.3606 Td
 (4118   for\(tot=0; tot<n; tot+=m, off+=m, dst+=m\){) 214.0572 Tj
 0 -208.8539 Td
-(4119     bp = bread\(ip->dev, bmap\(ip, off/BSIZE, 0\)\);) 231.5313 Tj
+(4119     bp = bread\(ip->dev, bmap\(ip, off/BSIZE\)\);) 218.4257 Tj
 0 -218.3473 Td
 (4120     m = min\(n - tot, BSIZE - off%BSIZE\);) 196.5831 Tj
 0 -227.8407 Td
@@ -14920,7 +15037,7 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/fs.c  Page 11) 157.2665 Tj
+(Aug  8 01:04 2009  xv6/fs.c  Page 11) 157.2665 Tj
 0 -28.4801 Td
 (4150 // Write data to inode.) 122.3184 Tj
 0 -37.9735 Td
@@ -14949,7 +15066,7 @@ ajor].write\)) 323.2701 Tj
 0 -142.4004 Td
 (4162 ) 21.8426 Tj
 0 -151.8938 Td
-(4163   if\(off + n < off\)) 104.8443 Tj
+(4163   if\(off > ip->size || off + n < off\)) 183.4776 Tj
 0 -161.3871 Td
 (4164     return -1;) 83.0018 Tj
 0 -170.8805 Td
@@ -14961,7 +15078,7 @@ ajor].write\)) 323.2701 Tj
 0 -199.3606 Td
 (4168   for\(tot=0; tot<n; tot+=m, off+=m, src+=m\){) 214.0572 Tj
 0 -208.8539 Td
-(4169     bp = bread\(ip->dev, bmap\(ip, off/BSIZE, 1\)\);) 231.5313 Tj
+(4169     bp = bread\(ip->dev, bmap\(ip, off/BSIZE\)\);) 218.4257 Tj
 0 -218.3473 Td
 (4170     m = min\(n - tot, BSIZE - off%BSIZE\);) 196.5831 Tj
 0 -227.8407 Td
@@ -15052,6 +15169,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -15069,7 +15188,7 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/fs.c  Page 12) 157.2665 Tj
+(Aug  8 01:04 2009  xv6/fs.c  Page 12) 157.2665 Tj
 0 -28.4801 Td
 (4200 // Directories) 83.0018 Tj
 0 -37.9735 Td
@@ -15115,7 +15234,7 @@ q
 0 -227.8407 Td
 (4221   for\(off = 0; off < dp->size; off += BSIZE\){) 218.4257 Tj
 0 -237.334 Td
-(4222     bp = bread\(dp->dev, bmap\(dp, off / BSIZE, 0\)\);) 240.2683 Tj
+(4222     bp = bread\(dp->dev, bmap\(dp, off / BSIZE\)\);) 227.1628 Tj
 0 -246.8274 Td
 (4223     for\(de = \(struct dirent*\)bp->data;) 187.8461 Tj
 0 -256.3207 Td
@@ -15188,14 +15307,14 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/fs.c  Page 13) 157.2665 Tj
+(Aug  8 01:04 2009  xv6/fs.c  Page 13) 157.2665 Tj
 0 -28.4801 Td
-(4250 // Write a new directory entry \(name, ino\) into the dire\
-ctory dp.) 305.796 Tj
+(4250 // Write a new directory entry \(name, inum\) into the dir\
+ectory dp.) 310.1645 Tj
 0 -37.9735 Td
 (4251 int) 34.9481 Tj
 0 -47.4668 Td
-(4252 dirlink\(struct inode *dp, char *name, uint ino\)) 227.1628 Tj
+(4252 dirlink\(struct inode *dp, char *name, uint inum\)) 231.5313 Tj
 0 -56.9602 Td
 (4253 {) 26.2111 Tj
 0 -66.4535 Td
@@ -15238,7 +15357,7 @@ zeof\(de\)\)) 283.9534 Tj
 0 -237.334 Td
 (4272   strncpy\(de.name, name, DIRSIZ\);) 166.0035 Tj
 0 -246.8274 Td
-(4273   de.inum = ino;) 91.7388 Tj
+(4273   de.inum = inum;) 96.1073 Tj
 0 -256.3207 Td
 (4274   if\(writei\(dp, \(char*\)&de, off, sizeof\(de\)\) != siz\
 eof\(de\)\)) 279.5849 Tj
@@ -15322,6 +15441,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -15339,7 +15460,7 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/fs.c  Page 14) 157.2665 Tj
+(Aug  8 01:04 2009  xv6/fs.c  Page 14) 157.2665 Tj
 0 -28.4801 Td
 (4300 // Paths) 56.7907 Tj
 0 -37.9735 Td
@@ -15367,59 +15488,59 @@ a") 275.2164 Tj
 (4310 //   skipelem\("///a//bb", name\) = "bb", setting name = "\
 a") 275.2164 Tj
 0 -132.9071 Td
-(4311 //   skipelem\("", name\) = skipelem\("////", name\) = 0) 249.0053 Tj
+(4311 //   skipelem\("a", name\) = "", setting name = "a") 235.8998 Tj
 0 -142.4004 Td
-(4312 //) 30.5796 Tj
+(4312 //   skipelem\("", name\) = skipelem\("////", name\) = 0) 249.0053 Tj
 0 -151.8938 Td
-(4313 static char*) 74.2647 Tj
+(4313 //) 30.5796 Tj
 0 -161.3871 Td
-(4314 skipelem\(char *path, char *name\)) 161.635 Tj
+(4314 static char*) 74.2647 Tj
 0 -170.8805 Td
-(4315 {) 26.2111 Tj
+(4315 skipelem\(char *path, char *name\)) 161.635 Tj
 0 -180.3739 Td
-(4316   char *s;) 65.5277 Tj
+(4316 {) 26.2111 Tj
 0 -189.8672 Td
-(4317   int len;) 65.5277 Tj
+(4317   char *s;) 65.5277 Tj
 0 -199.3606 Td
-(4318 ) 21.8426 Tj
+(4318   int len;) 65.5277 Tj
 0 -208.8539 Td
-(4319   while\(*path == '/'\)) 113.5814 Tj
+(4319 ) 21.8426 Tj
 0 -218.3473 Td
-(4320     path++;) 69.8962 Tj
+(4320   while\(*path == '/'\)) 113.5814 Tj
 0 -227.8407 Td
-(4321   if\(*path == 0\)) 91.7388 Tj
+(4321     path++;) 69.8962 Tj
 0 -237.334 Td
-(4322     return 0;) 78.6333 Tj
+(4322   if\(*path == 0\)) 91.7388 Tj
 0 -246.8274 Td
-(4323   s = path;) 69.8962 Tj
+(4323     return 0;) 78.6333 Tj
 0 -256.3207 Td
-(4324   while\(*path != '/' && *path != 0\)) 174.7406 Tj
+(4324   s = path;) 69.8962 Tj
 0 -265.8141 Td
-(4325     path++;) 69.8962 Tj
+(4325   while\(*path != '/' && *path != 0\)) 174.7406 Tj
 0 -275.3075 Td
-(4326   len = path - s;) 96.1073 Tj
+(4326     path++;) 69.8962 Tj
 0 -284.8008 Td
-(4327   if\(len >= DIRSIZ\)) 104.8443 Tj
+(4327   len = path - s;) 96.1073 Tj
 0 -294.2942 Td
-(4328     memmove\(name, s, DIRSIZ\);) 148.5295 Tj
+(4328   if\(len >= DIRSIZ\)) 104.8443 Tj
 0 -303.7875 Td
-(4329   else {) 56.7907 Tj
+(4329     memmove\(name, s, DIRSIZ\);) 148.5295 Tj
 0 -313.2809 Td
-(4330     memmove\(name, s, len\);) 135.4239 Tj
+(4330   else {) 56.7907 Tj
 0 -322.7743 Td
-(4331     name[len] = 0;) 100.4758 Tj
+(4331     memmove\(name, s, len\);) 135.4239 Tj
 0 -332.2676 Td
-(4332   }) 34.9481 Tj
+(4332     name[len] = 0;) 100.4758 Tj
 0 -341.761 Td
-(4333   while\(*path == '/'\)) 113.5814 Tj
+(4333   }) 34.9481 Tj
 0 -351.2543 Td
-(4334     path++;) 69.8962 Tj
+(4334   while\(*path == '/'\)) 113.5814 Tj
 0 -360.7477 Td
-(4335   return path;) 83.0018 Tj
+(4335     path++;) 69.8962 Tj
 0 -370.2411 Td
-(4336 }) 26.2111 Tj
+(4336   return path;) 83.0018 Tj
 0 -379.7344 Td
-(4337 ) 21.8426 Tj
+(4337 }) 26.2111 Tj
 0 -389.2278 Td
 (4338 ) 21.8426 Tj
 0 -398.7211 Td
@@ -15462,7 +15583,7 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/fs.c  Page 15) 157.2665 Tj
+(Aug  8 01:04 2009  xv6/fs.c  Page 15) 157.2665 Tj
 0 -28.4801 Td
 (4350 // Look up and return the inode for a path name.) 231.5313 Tj
 0 -37.9735 Td
@@ -15474,7 +15595,7 @@ y the final) 323.2701 Tj
 0 -56.9602 Td
 (4353 static struct inode*) 109.2129 Tj
 0 -66.4535 Td
-(4354 _namei\(char *path, int parent, char *name\)) 205.3202 Tj
+(4354 namex\(char *path, int nameiparent, char *name\)) 222.7942 Tj
 0 -75.9469 Td
 (4355 {) 26.2111 Tj
 0 -85.4403 Td
@@ -15484,7 +15605,7 @@ y the final) 323.2701 Tj
 0 -104.427 Td
 (4358   if\(*path == '/'\)) 100.4758 Tj
 0 -113.9203 Td
-(4359     ip = iget\(ROOTDEV, 1\);) 135.4239 Tj
+(4359     ip = iget\(ROOTDEV, ROOTINO\);) 161.635 Tj
 0 -123.4137 Td
 (4360   else) 48.0537 Tj
 0 -132.9071 Td
@@ -15504,7 +15625,7 @@ y the final) 323.2701 Tj
 0 -199.3606 Td
 (4368     }) 43.6851 Tj
 0 -208.8539 Td
-(4369     if\(parent && *path == '\\0'\){) 161.635 Tj
+(4369     if\(nameiparent && *path == '\\0'\){) 183.4776 Tj
 0 -218.3473 Td
 (4370       // Stop one level early.) 152.898 Tj
 0 -227.8407 Td
@@ -15528,7 +15649,7 @@ y the final) 323.2701 Tj
 0 -313.2809 Td
 (4380   }) 34.9481 Tj
 0 -322.7743 Td
-(4381   if\(parent\){) 78.6333 Tj
+(4381   if\(nameiparent\){) 100.4758 Tj
 0 -332.2676 Td
 (4382     iput\(ip\);) 78.6333 Tj
 0 -341.761 Td
@@ -15550,7 +15671,7 @@ y the final) 323.2701 Tj
 0 -417.7079 Td
 (4391   char name[DIRSIZ];) 109.2129 Tj
 0 -427.2012 Td
-(4392   return _namei\(path, 0, name\);) 157.2665 Tj
+(4392   return namex\(path, 0, name\);) 152.898 Tj
 0 -436.6946 Td
 (4393 }) 26.2111 Tj
 0 -446.1879 Td
@@ -15562,7 +15683,7 @@ y the final) 323.2701 Tj
 0 -474.668 Td
 (4397 {) 26.2111 Tj
 0 -484.1614 Td
-(4398   return _namei\(path, 1, name\);) 157.2665 Tj
+(4398   return namex\(path, 1, name\);) 152.898 Tj
 0 -493.6547 Td
 (4399 }) 26.2111 Tj
 0 -522.1348 Td
@@ -15595,6 +15716,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -15612,7 +15735,7 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/file.c  Page 1) 161.635 Tj
+(Aug  8 01:04 2009  xv6/file.c  Page 1) 161.635 Tj
 0 -28.4801 Td
 (4400 #include "types.h") 100.4758 Tj
 0 -37.9735 Td
@@ -15624,61 +15747,61 @@ q
 0 -66.4535 Td
 (4404 #include "spinlock.h") 113.5814 Tj
 0 -75.9469 Td
-(4405 #include "dev.h") 91.7388 Tj
+(4405 ) 21.8426 Tj
 0 -85.4403 Td
-(4406 ) 21.8426 Tj
+(4406 struct devsw devsw[NDEV];) 131.0554 Tj
 0 -94.9336 Td
-(4407 struct devsw devsw[NDEV];) 131.0554 Tj
+(4407 struct {) 56.7907 Tj
 0 -104.427 Td
-(4408 struct spinlock file_table_lock;) 161.635 Tj
+(4408   struct spinlock lock;) 122.3184 Tj
 0 -113.9203 Td
-(4409 struct file file[NFILE];) 126.6869 Tj
+(4409   struct file file[NFILE];) 135.4239 Tj
 0 -123.4137 Td
-(4410 ) 21.8426 Tj
+(4410 } ftable;) 61.1592 Tj
 0 -132.9071 Td
-(4411 void) 39.3166 Tj
+(4411 ) 21.8426 Tj
 0 -142.4004 Td
-(4412 fileinit\(void\)) 83.0018 Tj
+(4412 void) 39.3166 Tj
 0 -151.8938 Td
-(4413 {) 26.2111 Tj
+(4413 fileinit\(void\)) 83.0018 Tj
 0 -161.3871 Td
-(4414   initlock\(&file_table_lock, "file_table"\);) 209.6887 Tj
+(4414 {) 26.2111 Tj
 0 -170.8805 Td
-(4415 }) 26.2111 Tj
+(4415   initlock\(&ftable.lock, "ftable"\);) 174.7406 Tj
 0 -180.3739 Td
-(4416 ) 21.8426 Tj
+(4416 }) 26.2111 Tj
 0 -189.8672 Td
-(4417 // Allocate a file structure.) 148.5295 Tj
+(4417 ) 21.8426 Tj
 0 -199.3606 Td
-(4418 struct file*) 74.2647 Tj
+(4418 // Allocate a file structure.) 148.5295 Tj
 0 -208.8539 Td
-(4419 filealloc\(void\)) 87.3703 Tj
+(4419 struct file*) 74.2647 Tj
 0 -218.3473 Td
-(4420 {) 26.2111 Tj
+(4420 filealloc\(void\)) 87.3703 Tj
 0 -227.8407 Td
-(4421   int i;) 56.7907 Tj
+(4421 {) 26.2111 Tj
 0 -237.334 Td
-(4422 ) 21.8426 Tj
+(4422   struct file *f;) 96.1073 Tj
 0 -246.8274 Td
-(4423   acquire\(&file_table_lock\);) 144.161 Tj
+(4423 ) 21.8426 Tj
 0 -256.3207 Td
-(4424   for\(i = 0; i < NFILE; i++\){) 148.5295 Tj
+(4424   acquire\(&ftable.lock\);) 126.6869 Tj
 0 -265.8141 Td
-(4425     if\(file[i].type == FD_CLOSED\){) 170.3721 Tj
+(4425   for\(f = ftable.file; f < ftable.file + NFILE; f++\){) 253.3738 Tj
 0 -275.3075 Td
-(4426       file[i].type = FD_NONE;) 148.5295 Tj
+(4426     if\(f->ref == 0\){) 109.2129 Tj
 0 -284.8008 Td
-(4427       file[i].ref = 1;) 117.9499 Tj
+(4427       f->ref = 1;) 96.1073 Tj
 0 -294.2942 Td
-(4428       release\(&file_table_lock\);) 161.635 Tj
+(4428       release\(&ftable.lock\);) 144.161 Tj
 0 -303.7875 Td
-(4429       return file + i;) 117.9499 Tj
+(4429       return f;) 87.3703 Tj
 0 -313.2809 Td
 (4430     }) 43.6851 Tj
 0 -322.7743 Td
 (4431   }) 34.9481 Tj
 0 -332.2676 Td
-(4432   release\(&file_table_lock\);) 144.161 Tj
+(4432   release\(&ftable.lock\);) 126.6869 Tj
 0 -341.761 Td
 (4433   return 0;) 69.8962 Tj
 0 -351.2543 Td
@@ -15694,15 +15817,15 @@ q
 0 -398.7211 Td
 (4439 {) 26.2111 Tj
 0 -408.2145 Td
-(4440   acquire\(&file_table_lock\);) 144.161 Tj
+(4440   acquire\(&ftable.lock\);) 126.6869 Tj
 0 -417.7079 Td
-(4441   if\(f->ref < 1 || f->type == FD_CLOSED\)) 196.5831 Tj
+(4441   if\(f->ref < 1\)) 91.7388 Tj
 0 -427.2012 Td
 (4442     panic\("filedup"\);) 113.5814 Tj
 0 -436.6946 Td
 (4443   f->ref++;) 69.8962 Tj
 0 -446.1879 Td
-(4444   release\(&file_table_lock\);) 144.161 Tj
+(4444   release\(&ftable.lock\);) 126.6869 Tj
 0 -455.6813 Td
 (4445   return f;) 69.8962 Tj
 0 -465.1747 Td
@@ -15731,7 +15854,7 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/file.c  Page 2) 161.635 Tj
+(Aug  8 01:04 2009  xv6/file.c  Page 2) 161.635 Tj
 0 -28.4801 Td
 (4450 // Close file f.  \(Decrement ref count, close when reache\
 s 0.\)) 292.6905 Tj
@@ -15746,15 +15869,15 @@ s 0.\)) 292.6905 Tj
 0 -75.9469 Td
 (4455 ) 21.8426 Tj
 0 -85.4403 Td
-(4456   acquire\(&file_table_lock\);) 144.161 Tj
+(4456   acquire\(&ftable.lock\);) 126.6869 Tj
 0 -94.9336 Td
-(4457   if\(f->ref < 1 || f->type == FD_CLOSED\)) 196.5831 Tj
+(4457   if\(f->ref < 1\)) 91.7388 Tj
 0 -104.427 Td
 (4458     panic\("fileclose"\);) 122.3184 Tj
 0 -113.9203 Td
 (4459   if\(--f->ref > 0\){) 104.8443 Tj
 0 -123.4137 Td
-(4460     release\(&file_table_lock\);) 152.898 Tj
+(4460     release\(&ftable.lock\);) 135.4239 Tj
 0 -132.9071 Td
 (4461     return;) 69.8962 Tj
 0 -142.4004 Td
@@ -15764,9 +15887,9 @@ s 0.\)) 292.6905 Tj
 0 -161.3871 Td
 (4464   f->ref = 0;) 78.6333 Tj
 0 -170.8805 Td
-(4465   f->type = FD_CLOSED;) 117.9499 Tj
+(4465   f->type = FD_NONE;) 109.2129 Tj
 0 -180.3739 Td
-(4466   release\(&file_table_lock\);) 144.161 Tj
+(4466   release\(&ftable.lock\);) 126.6869 Tj
 0 -189.8672 Td
 (4467 ) 21.8426 Tj
 0 -199.3606 Td
@@ -15778,37 +15901,37 @@ s 0.\)) 292.6905 Tj
 0 -227.8407 Td
 (4471     iput\(ff.ip\);) 91.7388 Tj
 0 -237.334 Td
-(4472   else) 48.0537 Tj
+(4472 }) 26.2111 Tj
 0 -246.8274 Td
-(4473     panic\("fileclose"\);) 122.3184 Tj
+(4473 ) 21.8426 Tj
 0 -256.3207 Td
-(4474 }) 26.2111 Tj
+(4474 // Get metadata about file f.) 148.5295 Tj
 0 -265.8141 Td
-(4475 ) 21.8426 Tj
+(4475 int) 34.9481 Tj
 0 -275.3075 Td
-(4476 // Get metadata about file f.) 148.5295 Tj
+(4476 filestat\(struct file *f, struct stat *st\)) 200.9517 Tj
 0 -284.8008 Td
-(4477 int) 34.9481 Tj
+(4477 {) 26.2111 Tj
 0 -294.2942 Td
-(4478 filestat\(struct file *f, struct stat *st\)) 200.9517 Tj
+(4478   if\(f->type == FD_INODE\){) 135.4239 Tj
 0 -303.7875 Td
-(4479 {) 26.2111 Tj
+(4479     ilock\(f->ip\);) 96.1073 Tj
 0 -313.2809 Td
-(4480   if\(f->type == FD_INODE\){) 135.4239 Tj
+(4480     stati\(f->ip, st\);) 113.5814 Tj
 0 -322.7743 Td
-(4481     ilock\(f->ip\);) 96.1073 Tj
+(4481     iunlock\(f->ip\);) 104.8443 Tj
 0 -332.2676 Td
-(4482     stati\(f->ip, st\);) 113.5814 Tj
+(4482     return 0;) 78.6333 Tj
 0 -341.761 Td
-(4483     iunlock\(f->ip\);) 104.8443 Tj
+(4483   }) 34.9481 Tj
 0 -351.2543 Td
-(4484     return 0;) 78.6333 Tj
+(4484   return -1;) 74.2647 Tj
 0 -360.7477 Td
-(4485   }) 34.9481 Tj
+(4485 }) 26.2111 Tj
 0 -370.2411 Td
-(4486   return -1;) 74.2647 Tj
+(4486 ) 21.8426 Tj
 0 -379.7344 Td
-(4487 }) 26.2111 Tj
+(4487 ) 21.8426 Tj
 0 -389.2278 Td
 (4488 ) 21.8426 Tj
 0 -398.7211 Td
@@ -15863,6 +15986,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -15880,7 +16005,7 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/file.c  Page 3) 161.635 Tj
+(Aug  8 01:04 2009  xv6/file.c  Page 3) 161.635 Tj
 0 -28.4801 Td
 (4500 // Read from file f.  Addr is kernel address.) 218.4257 Tj
 0 -37.9735 Td
@@ -15999,7 +16124,7 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/sysfile.c  Page 1) 174.7406 Tj
+(Aug  8 01:04 2009  xv6/sysfile.c  Page 1) 174.7406 Tj
 0 -28.4801 Td
 (4550 #include "types.h") 100.4758 Tj
 0 -37.9735 Td
@@ -16015,83 +16140,83 @@ q
 0 -85.4403 Td
 (4556 #include "fs.h") 87.3703 Tj
 0 -94.9336 Td
-(4557 #include "fsvar.h") 100.4758 Tj
+(4557 #include "file.h") 96.1073 Tj
 0 -104.427 Td
-(4558 #include "file.h") 96.1073 Tj
+(4558 #include "fcntl.h") 100.4758 Tj
 0 -113.9203 Td
-(4559 #include "fcntl.h") 100.4758 Tj
+(4559 ) 21.8426 Tj
 0 -123.4137 Td
-(4560 ) 21.8426 Tj
-0 -132.9071 Td
-(4561 // Fetch the nth word-sized system call argument as a file\
+(4560 // Fetch the nth word-sized system call argument as a file\
  descriptor) 323.2701 Tj
-0 -142.4004 Td
-(4562 // and return both the descriptor and the corresponding st\
+0 -132.9071 Td
+(4561 // and return both the descriptor and the corresponding st\
 ruct file.) 318.9016 Tj
+0 -142.4004 Td
+(4562 static int) 65.5277 Tj
 0 -151.8938 Td
-(4563 static int) 65.5277 Tj
+(4563 argfd\(int n, int *pfd, struct file **pf\)) 196.5831 Tj
 0 -161.3871 Td
-(4564 argfd\(int n, int *pfd, struct file **pf\)) 196.5831 Tj
+(4564 {) 26.2111 Tj
 0 -170.8805 Td
-(4565 {) 26.2111 Tj
+(4565   int fd;) 61.1592 Tj
 0 -180.3739 Td
-(4566   int fd;) 61.1592 Tj
+(4566   struct file *f;) 96.1073 Tj
 0 -189.8672 Td
-(4567   struct file *f;) 96.1073 Tj
+(4567 ) 21.8426 Tj
 0 -199.3606 Td
-(4568 ) 21.8426 Tj
+(4568   if\(argint\(n, &fd\) < 0\)) 126.6869 Tj
 0 -208.8539 Td
-(4569   if\(argint\(n, &fd\) < 0\)) 126.6869 Tj
+(4569     return -1;) 83.0018 Tj
 0 -218.3473 Td
-(4570     return -1;) 83.0018 Tj
+(4570   if\(fd < 0 || fd >= NOFILE || \(f=cp->ofile[fd]\) == 0\)) 257.7424 Tj
 0 -227.8407 Td
-(4571   if\(fd < 0 || fd >= NOFILE || \(f=cp->ofile[fd]\) == 0\)) 257.7424 Tj
+(4571     return -1;) 83.0018 Tj
 0 -237.334 Td
-(4572     return -1;) 83.0018 Tj
+(4572   if\(pfd\)) 61.1592 Tj
 0 -246.8274 Td
-(4573   if\(pfd\)) 61.1592 Tj
+(4573     *pfd = fd;) 83.0018 Tj
 0 -256.3207 Td
-(4574     *pfd = fd;) 83.0018 Tj
+(4574   if\(pf\)) 56.7907 Tj
 0 -265.8141 Td
-(4575   if\(pf\)) 56.7907 Tj
+(4575     *pf = f;) 74.2647 Tj
 0 -275.3075 Td
-(4576     *pf = f;) 74.2647 Tj
+(4576   return 0;) 69.8962 Tj
 0 -284.8008 Td
-(4577   return 0;) 69.8962 Tj
+(4577 }) 26.2111 Tj
 0 -294.2942 Td
-(4578 }) 26.2111 Tj
+(4578 ) 21.8426 Tj
 0 -303.7875 Td
-(4579 ) 21.8426 Tj
+(4579 // Allocate a file descriptor for the given file.) 235.8998 Tj
 0 -313.2809 Td
-(4580 // Allocate a file descriptor for the given file.) 235.8998 Tj
+(4580 // Takes over file reference from caller on success.) 249.0053 Tj
 0 -322.7743 Td
-(4581 // Takes over file reference from caller on success.) 249.0053 Tj
+(4581 static int) 65.5277 Tj
 0 -332.2676 Td
-(4582 static int) 65.5277 Tj
+(4582 fdalloc\(struct file *f\)) 122.3184 Tj
 0 -341.761 Td
-(4583 fdalloc\(struct file *f\)) 122.3184 Tj
+(4583 {) 26.2111 Tj
 0 -351.2543 Td
-(4584 {) 26.2111 Tj
+(4584   int fd;) 61.1592 Tj
 0 -360.7477 Td
-(4585   int fd;) 61.1592 Tj
+(4585 ) 21.8426 Tj
 0 -370.2411 Td
-(4586 ) 21.8426 Tj
+(4586   for\(fd = 0; fd < NOFILE; fd++\){) 166.0035 Tj
 0 -379.7344 Td
-(4587   for\(fd = 0; fd < NOFILE; fd++\){) 166.0035 Tj
+(4587     if\(cp->ofile[fd] == 0\){) 139.7925 Tj
 0 -389.2278 Td
-(4588     if\(cp->ofile[fd] == 0\){) 139.7925 Tj
+(4588       cp->ofile[fd] = f;) 126.6869 Tj
 0 -398.7211 Td
-(4589       cp->ofile[fd] = f;) 126.6869 Tj
+(4589       return fd;) 91.7388 Tj
 0 -408.2145 Td
-(4590       return fd;) 91.7388 Tj
+(4590     }) 43.6851 Tj
 0 -417.7079 Td
-(4591     }) 43.6851 Tj
+(4591   }) 34.9481 Tj
 0 -427.2012 Td
-(4592   }) 34.9481 Tj
+(4592   return -1;) 74.2647 Tj
 0 -436.6946 Td
-(4593   return -1;) 74.2647 Tj
+(4593 }) 26.2111 Tj
 0 -446.1879 Td
-(4594 }) 26.2111 Tj
+(4594 ) 21.8426 Tj
 0 -455.6813 Td
 (4595 ) 21.8426 Tj
 0 -465.1747 Td
@@ -16132,6 +16257,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -16149,81 +16276,81 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/sysfile.c  Page 2) 174.7406 Tj
+(Aug  8 01:04 2009  xv6/sysfile.c  Page 2) 174.7406 Tj
 0 -28.4801 Td
 (4600 int) 34.9481 Tj
 0 -37.9735 Td
-(4601 sys_read\(void\)) 83.0018 Tj
+(4601 sys_dup\(void\)) 78.6333 Tj
 0 -47.4668 Td
 (4602 {) 26.2111 Tj
 0 -56.9602 Td
 (4603   struct file *f;) 96.1073 Tj
 0 -66.4535 Td
-(4604   int n;) 56.7907 Tj
+(4604   int fd;) 61.1592 Tj
 0 -75.9469 Td
-(4605   char *p;) 65.5277 Tj
+(4605 ) 21.8426 Tj
 0 -85.4403 Td
-(4606 ) 21.8426 Tj
+(4606   if\(argfd\(0, 0, &f\) < 0\)) 131.0554 Tj
 0 -94.9336 Td
-(4607   if\(argfd\(0, 0, &f\) < 0 || argint\(2, &n\) < 0 || argp\
-tr\(1, &p, n\) < 0\)) 327.6386 Tj
+(4607     return -1;) 83.0018 Tj
 0 -104.427 Td
-(4608     return -1;) 83.0018 Tj
+(4608   if\(\(fd=fdalloc\(f\)\) < 0\)) 131.0554 Tj
 0 -113.9203 Td
-(4609   return fileread\(f, p, n\);) 139.7925 Tj
+(4609     return -1;) 83.0018 Tj
 0 -123.4137 Td
-(4610 }) 26.2111 Tj
+(4610   filedup\(f\);) 78.6333 Tj
 0 -132.9071 Td
-(4611 ) 21.8426 Tj
+(4611   return fd;) 74.2647 Tj
 0 -142.4004 Td
-(4612 int) 34.9481 Tj
+(4612 }) 26.2111 Tj
 0 -151.8938 Td
-(4613 sys_write\(void\)) 87.3703 Tj
+(4613 ) 21.8426 Tj
 0 -161.3871 Td
-(4614 {) 26.2111 Tj
+(4614 int) 34.9481 Tj
 0 -170.8805 Td
-(4615   struct file *f;) 96.1073 Tj
+(4615 sys_read\(void\)) 83.0018 Tj
 0 -180.3739 Td
-(4616   int n;) 56.7907 Tj
+(4616 {) 26.2111 Tj
 0 -189.8672 Td
-(4617   char *p;) 65.5277 Tj
+(4617   struct file *f;) 96.1073 Tj
 0 -199.3606 Td
-(4618 ) 21.8426 Tj
+(4618   int n;) 56.7907 Tj
 0 -208.8539 Td
-(4619   if\(argfd\(0, 0, &f\) < 0 || argint\(2, &n\) < 0 || argp\
-tr\(1, &p, n\) < 0\)) 327.6386 Tj
+(4619   char *p;) 65.5277 Tj
 0 -218.3473 Td
-(4620     return -1;) 83.0018 Tj
+(4620 ) 21.8426 Tj
 0 -227.8407 Td
-(4621   return filewrite\(f, p, n\);) 144.161 Tj
+(4621   if\(argfd\(0, 0, &f\) < 0 || argint\(2, &n\) < 0 || argp\
+tr\(1, &p, n\) < 0\)) 327.6386 Tj
 0 -237.334 Td
-(4622 }) 26.2111 Tj
+(4622     return -1;) 83.0018 Tj
 0 -246.8274 Td
-(4623 ) 21.8426 Tj
+(4623   return fileread\(f, p, n\);) 139.7925 Tj
 0 -256.3207 Td
-(4624 int) 34.9481 Tj
+(4624 }) 26.2111 Tj
 0 -265.8141 Td
-(4625 sys_dup\(void\)) 78.6333 Tj
+(4625 ) 21.8426 Tj
 0 -275.3075 Td
-(4626 {) 26.2111 Tj
+(4626 int) 34.9481 Tj
 0 -284.8008 Td
-(4627   struct file *f;) 96.1073 Tj
+(4627 sys_write\(void\)) 87.3703 Tj
 0 -294.2942 Td
-(4628   int fd;) 61.1592 Tj
+(4628 {) 26.2111 Tj
 0 -303.7875 Td
-(4629 ) 21.8426 Tj
+(4629   struct file *f;) 96.1073 Tj
 0 -313.2809 Td
-(4630   if\(argfd\(0, 0, &f\) < 0\)) 131.0554 Tj
+(4630   int n;) 56.7907 Tj
 0 -322.7743 Td
-(4631     return -1;) 83.0018 Tj
+(4631   char *p;) 65.5277 Tj
 0 -332.2676 Td
-(4632   if\(\(fd=fdalloc\(f\)\) < 0\)) 131.0554 Tj
+(4632 ) 21.8426 Tj
 0 -341.761 Td
-(4633     return -1;) 83.0018 Tj
+(4633   if\(argfd\(0, 0, &f\) < 0 || argint\(2, &n\) < 0 || argp\
+tr\(1, &p, n\) < 0\)) 327.6386 Tj
 0 -351.2543 Td
-(4634   filedup\(f\);) 78.6333 Tj
+(4634     return -1;) 83.0018 Tj
 0 -360.7477 Td
-(4635   return fd;) 74.2647 Tj
+(4635   return filewrite\(f, p, n\);) 144.161 Tj
 0 -370.2411 Td
 (4636 }) 26.2111 Tj
 0 -379.7344 Td
@@ -16270,7 +16397,7 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/sysfile.c  Page 3) 174.7406 Tj
+(Aug  8 01:04 2009  xv6/sysfile.c  Page 3) 174.7406 Tj
 0 -28.4801 Td
 (4650 int) 34.9481 Tj
 0 -37.9735 Td
@@ -16337,28 +16464,28 @@ zeof\(*st\)\) < 0\)) 314.533 Tj
 0 -322.7743 Td
 (4681   if\(\(dp = nameiparent\(new, name\)\) == 0\)) 196.5831 Tj
 0 -332.2676 Td
-(4682     goto  bad;) 83.0018 Tj
+(4682     goto bad;) 78.6333 Tj
 0 -341.761 Td
 (4683   ilock\(dp\);) 74.2647 Tj
 0 -351.2543 Td
 (4684   if\(dp->dev != ip->dev || dirlink\(dp, name, ip->inum\) \
-< 0\)) 279.5849 Tj
+< 0\){) 283.9534 Tj
 0 -360.7477 Td
-(4685     goto bad;) 78.6333 Tj
+(4685     iunlockput\(dp\);) 104.8443 Tj
 0 -370.2411 Td
-(4686   iunlockput\(dp\);) 96.1073 Tj
+(4686     goto bad;) 78.6333 Tj
 0 -379.7344 Td
-(4687   iput\(ip\);) 69.8962 Tj
+(4687   }) 34.9481 Tj
 0 -389.2278 Td
-(4688   return 0;) 69.8962 Tj
+(4688   iunlockput\(dp\);) 96.1073 Tj
 0 -398.7211 Td
-(4689 ) 21.8426 Tj
+(4689   iput\(ip\);) 69.8962 Tj
 0 -408.2145 Td
-(4690 bad:) 39.3166 Tj
+(4690   return 0;) 69.8962 Tj
 0 -417.7079 Td
-(4691   if\(dp\)) 56.7907 Tj
+(4691 ) 21.8426 Tj
 0 -427.2012 Td
-(4692     iunlockput\(dp\);) 104.8443 Tj
+(4692 bad:) 39.3166 Tj
 0 -436.6946 Td
 (4693   ilock\(ip\);) 74.2647 Tj
 0 -446.1879 Td
@@ -16403,6 +16530,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -16420,7 +16549,7 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/sysfile.c  Page 4) 174.7406 Tj
+(Aug  8 01:04 2009  xv6/sysfile.c  Page 4) 174.7406 Tj
 0 -28.4801 Td
 (4700 // Is the directory dp empty except for "." and ".." ?) 257.7424 Tj
 0 -37.9735 Td
@@ -16541,7 +16670,7 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/sysfile.c  Page 5) 174.7406 Tj
+(Aug  8 01:04 2009  xv6/sysfile.c  Page 5) 174.7406 Tj
 0 -28.4801 Td
 (4750 int) 34.9481 Tj
 0 -37.9735 Td
@@ -16619,27 +16748,27 @@ eof\(de\)\)) 279.5849 Tj
 0 -370.2411 Td
 (4786     panic\("unlink: writei"\);) 144.161 Tj
 0 -379.7344 Td
-(4787   iunlockput\(dp\);) 96.1073 Tj
+(4787   if\(ip->type == T_DIR\){) 126.6869 Tj
 0 -389.2278 Td
-(4788 ) 21.8426 Tj
+(4788     dp->nlink--;) 91.7388 Tj
 0 -398.7211 Td
-(4789   ip->nlink--;) 83.0018 Tj
+(4789     iupdate\(dp\);) 91.7388 Tj
 0 -408.2145 Td
-(4790   iupdate\(ip\);) 83.0018 Tj
+(4790   }) 34.9481 Tj
 0 -417.7079 Td
-(4791   iunlockput\(ip\);) 96.1073 Tj
+(4791   iunlockput\(dp\);) 96.1073 Tj
 0 -427.2012 Td
-(4792   return 0;) 69.8962 Tj
+(4792 ) 21.8426 Tj
 0 -436.6946 Td
-(4793 }) 26.2111 Tj
+(4793   ip->nlink--;) 83.0018 Tj
 0 -446.1879 Td
-(4794 ) 21.8426 Tj
+(4794   iupdate\(ip\);) 83.0018 Tj
 0 -455.6813 Td
-(4795 ) 21.8426 Tj
+(4795   iunlockput\(ip\);) 96.1073 Tj
 0 -465.1747 Td
-(4796 ) 21.8426 Tj
+(4796   return 0;) 69.8962 Tj
 0 -474.668 Td
-(4797 ) 21.8426 Tj
+(4797 }) 26.2111 Tj
 0 -484.1614 Td
 (4798 ) 21.8426 Tj
 0 -493.6547 Td
@@ -16674,6 +16803,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -16691,12 +16822,11 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/sysfile.c  Page 6) 174.7406 Tj
+(Aug  8 01:04 2009  xv6/sysfile.c  Page 6) 174.7406 Tj
 0 -28.4801 Td
 (4800 static struct inode*) 109.2129 Tj
 0 -37.9735 Td
-(4801 create\(char *path, int canexist, short type, short major,\
- short minor\)) 327.6386 Tj
+(4801 create\(char *path, short type, short major, short minor\)) 266.4794 Tj
 0 -47.4668 Td
 (4802 {) 26.2111 Tj
 0 -56.9602 Td
@@ -16716,82 +16846,80 @@ q
 0 -123.4137 Td
 (4810 ) 21.8426 Tj
 0 -132.9071 Td
-(4811   if\(canexist && \(ip = dirlookup\(dp, name, &off\)\) != \
-0\){) 266.4794 Tj
+(4811   if\(\(ip = dirlookup\(dp, name, &off\)\) != 0\){) 214.0572 Tj
 0 -142.4004 Td
 (4812     iunlockput\(dp\);) 104.8443 Tj
 0 -151.8938 Td
 (4813     ilock\(ip\);) 83.0018 Tj
 0 -161.3871 Td
-(4814     if\(ip->type != type || ip->major != major || ip->mino\
-r != minor\){) 323.2701 Tj
+(4814     if\(type == T_FILE && ip->type == T_FILE\)) 214.0572 Tj
 0 -170.8805 Td
-(4815       iunlockput\(ip\);) 113.5814 Tj
+(4815       return ip;) 91.7388 Tj
 0 -180.3739 Td
-(4816       return 0;) 87.3703 Tj
+(4816     iunlockput\(ip\);) 104.8443 Tj
 0 -189.8672 Td
-(4817     }) 43.6851 Tj
+(4817     return 0;) 78.6333 Tj
 0 -199.3606 Td
-(4818     return ip;) 83.0018 Tj
+(4818   }) 34.9481 Tj
 0 -208.8539 Td
-(4819   }) 34.9481 Tj
+(4819 ) 21.8426 Tj
 0 -218.3473 Td
-(4820 ) 21.8426 Tj
+(4820   if\(\(ip = ialloc\(dp->dev, type\)\) == 0\)) 192.2146 Tj
 0 -227.8407 Td
-(4821   if\(\(ip = ialloc\(dp->dev, type\)\) == 0\){) 196.5831 Tj
+(4821     panic\("create: ialloc"\);) 144.161 Tj
 0 -237.334 Td
-(4822     iunlockput\(dp\);) 104.8443 Tj
+(4822 ) 21.8426 Tj
 0 -246.8274 Td
-(4823     return 0;) 78.6333 Tj
+(4823   ilock\(ip\);) 74.2647 Tj
 0 -256.3207 Td
-(4824   }) 34.9481 Tj
+(4824   ip->major = major;) 109.2129 Tj
 0 -265.8141 Td
-(4825   ilock\(ip\);) 74.2647 Tj
+(4825   ip->minor = minor;) 109.2129 Tj
 0 -275.3075 Td
-(4826   ip->major = major;) 109.2129 Tj
+(4826   ip->nlink = 1;) 91.7388 Tj
 0 -284.8008 Td
-(4827   ip->minor = minor;) 109.2129 Tj
+(4827   iupdate\(ip\);) 83.0018 Tj
 0 -294.2942 Td
-(4828   ip->nlink = 1;) 91.7388 Tj
+(4828 ) 21.8426 Tj
 0 -303.7875 Td
-(4829   iupdate\(ip\);) 83.0018 Tj
+(4829   if\(type == T_DIR\){  // Create . and .. entries.) 235.8998 Tj
 0 -313.2809 Td
-(4830 ) 21.8426 Tj
+(4830     dp->nlink++;  // for "..") 148.5295 Tj
 0 -322.7743 Td
-(4831   if\(dirlink\(dp, name, ip->inum\) < 0\){) 187.8461 Tj
+(4831     iupdate\(dp\);) 91.7388 Tj
 0 -332.2676 Td
-(4832     ip->nlink = 0;) 100.4758 Tj
+(4832     // No ip->nlink++ for ".": avoid cyclic ref count.) 257.7424 Tj
 0 -341.761 Td
-(4833     iunlockput\(ip\);) 104.8443 Tj
-0 -351.2543 Td
-(4834     iunlockput\(dp\);) 104.8443 Tj
-0 -360.7477 Td
-(4835     return 0;) 78.6333 Tj
-0 -370.2411 Td
-(4836   }) 34.9481 Tj
-0 -379.7344 Td
-(4837 ) 21.8426 Tj
-0 -389.2278 Td
-(4838   if\(type == T_DIR\){  // Create . and .. entries.) 235.8998 Tj
-0 -398.7211 Td
-(4839     dp->nlink++;  // for "..") 148.5295 Tj
-0 -408.2145 Td
-(4840     iupdate\(dp\);) 91.7388 Tj
-0 -417.7079 Td
-(4841     // No ip->nlink++ for ".": avoid cyclic ref count.) 257.7424 Tj
-0 -427.2012 Td
-(4842     if\(dirlink\(ip, ".", ip->inum\) < 0 || dirlink\(ip, "\
+(4833     if\(dirlink\(ip, ".", ip->inum\) < 0 || dirlink\(ip, "\
 ..", dp->inum\) < 0\)) 340.7441 Tj
+0 -351.2543 Td
+(4834       panic\("create dots"\);) 139.7925 Tj
+0 -360.7477 Td
+(4835   }) 34.9481 Tj
+0 -370.2411 Td
+(4836 ) 21.8426 Tj
+0 -379.7344 Td
+(4837   if\(dirlink\(dp, name, ip->inum\) < 0\)) 183.4776 Tj
+0 -389.2278 Td
+(4838     panic\("create: dirlink"\);) 148.5295 Tj
+0 -398.7211 Td
+(4839 ) 21.8426 Tj
+0 -408.2145 Td
+(4840   iunlockput\(dp\);) 96.1073 Tj
+0 -417.7079 Td
+(4841   return ip;) 74.2647 Tj
+0 -427.2012 Td
+(4842 }) 26.2111 Tj
 0 -436.6946 Td
-(4843       panic\("create dots"\);) 139.7925 Tj
+(4843 ) 21.8426 Tj
 0 -446.1879 Td
-(4844   }) 34.9481 Tj
+(4844 ) 21.8426 Tj
 0 -455.6813 Td
-(4845   iunlockput\(dp\);) 96.1073 Tj
+(4845 ) 21.8426 Tj
 0 -465.1747 Td
-(4846   return ip;) 74.2647 Tj
+(4846 ) 21.8426 Tj
 0 -474.668 Td
-(4847 }) 26.2111 Tj
+(4847 ) 21.8426 Tj
 0 -484.1614 Td
 (4848 ) 21.8426 Tj
 0 -493.6547 Td
@@ -16814,7 +16942,7 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/sysfile.c  Page 7) 174.7406 Tj
+(Aug  8 01:04 2009  xv6/sysfile.c  Page 7) 174.7406 Tj
 0 -28.4801 Td
 (4850 int) 34.9481 Tj
 0 -37.9735 Td
@@ -16840,7 +16968,7 @@ q
 0 -132.9071 Td
 (4861   if\(omode & O_CREATE\){) 122.3184 Tj
 0 -142.4004 Td
-(4862     if\(\(ip = create\(path, 1, T_FILE, 0, 0\)\) == 0\)) 235.8998 Tj
+(4862     if\(\(ip = create\(path, T_FILE, 0, 0\)\) == 0\)) 222.7942 Tj
 0 -151.8938 Td
 (4863       return -1;) 91.7388 Tj
 0 -161.3871 Td
@@ -16852,8 +16980,7 @@ q
 0 -189.8672 Td
 (4867     ilock\(ip\);) 83.0018 Tj
 0 -199.3606 Td
-(4868     if\(ip->type == T_DIR && \(omode & \(O_RDWR|O_WRONLY\)\
-\)\){) 270.8479 Tj
+(4868     if\(ip->type == T_DIR && omode != O_RDONLY\){) 227.1628 Tj
 0 -208.8539 Td
 (4869       iunlockput\(ip\);) 113.5814 Tj
 0 -218.3473 Td
@@ -16948,6 +17075,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -16965,56 +17094,56 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/sysfile.c  Page 8) 174.7406 Tj
+(Aug  8 01:04 2009  xv6/sysfile.c  Page 8) 174.7406 Tj
 0 -28.4801 Td
 (4900 int) 34.9481 Tj
 0 -37.9735 Td
-(4901 sys_mknod\(void\)) 87.3703 Tj
+(4901 sys_mkdir\(void\)) 87.3703 Tj
 0 -47.4668 Td
 (4902 {) 26.2111 Tj
 0 -56.9602 Td
-(4903   struct inode *ip;) 104.8443 Tj
+(4903   char *path;) 78.6333 Tj
 0 -66.4535 Td
-(4904   char *path;) 78.6333 Tj
+(4904   struct inode *ip;) 104.8443 Tj
 0 -75.9469 Td
-(4905   int len;) 65.5277 Tj
+(4905 ) 21.8426 Tj
 0 -85.4403 Td
-(4906   int major, minor;) 104.8443 Tj
+(4906   if\(argstr\(0, &path\) < 0 || \(ip = create\(path, T_DIR\
+, 0, 0\)\) == 0\)) 314.533 Tj
 0 -94.9336 Td
-(4907 ) 21.8426 Tj
+(4907     return -1;) 83.0018 Tj
 0 -104.427 Td
-(4908   if\(\(len=argstr\(0, &path\)\) < 0 ||) 170.3721 Tj
+(4908   iunlockput\(ip\);) 96.1073 Tj
 0 -113.9203 Td
-(4909      argint\(1, &major\) < 0 ||) 148.5295 Tj
+(4909   return 0;) 69.8962 Tj
 0 -123.4137 Td
-(4910      argint\(2, &minor\) < 0 ||) 148.5295 Tj
+(4910 }) 26.2111 Tj
 0 -132.9071 Td
-(4911      \(ip = create\(path, 0, T_DEV, major, minor\)\) == 0\)) 257.7424 Tj
+(4911 ) 21.8426 Tj
 0 -142.4004 Td
-(4912     return -1;) 83.0018 Tj
+(4912 int) 34.9481 Tj
 0 -151.8938 Td
-(4913   iunlockput\(ip\);) 96.1073 Tj
+(4913 sys_mknod\(void\)) 87.3703 Tj
 0 -161.3871 Td
-(4914   return 0;) 69.8962 Tj
+(4914 {) 26.2111 Tj
 0 -170.8805 Td
-(4915 }) 26.2111 Tj
+(4915   struct inode *ip;) 104.8443 Tj
 0 -180.3739 Td
-(4916 ) 21.8426 Tj
+(4916   char *path;) 78.6333 Tj
 0 -189.8672 Td
-(4917 int) 34.9481 Tj
+(4917   int len;) 65.5277 Tj
 0 -199.3606 Td
-(4918 sys_mkdir\(void\)) 87.3703 Tj
+(4918   int major, minor;) 104.8443 Tj
 0 -208.8539 Td
-(4919 {) 26.2111 Tj
+(4919 ) 21.8426 Tj
 0 -218.3473 Td
-(4920   char *path;) 78.6333 Tj
+(4920   if\(\(len=argstr\(0, &path\)\) < 0 ||) 170.3721 Tj
 0 -227.8407 Td
-(4921   struct inode *ip;) 104.8443 Tj
+(4921      argint\(1, &major\) < 0 ||) 148.5295 Tj
 0 -237.334 Td
-(4922 ) 21.8426 Tj
+(4922      argint\(2, &minor\) < 0 ||) 148.5295 Tj
 0 -246.8274 Td
-(4923   if\(argstr\(0, &path\) < 0 || \(ip = create\(path, 0, T_\
-DIR, 0, 0\)\) == 0\)) 327.6386 Tj
+(4923      \(ip = create\(path, T_DEV, major, minor\)\) == 0\)) 244.6368 Tj
 0 -256.3207 Td
 (4924     return -1;) 83.0018 Tj
 0 -265.8141 Td
@@ -17086,7 +17215,7 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/sysfile.c  Page 9) 174.7406 Tj
+(Aug  8 01:04 2009  xv6/sysfile.c  Page 9) 174.7406 Tj
 0 -28.4801 Td
 (4950 int) 34.9481 Tj
 0 -37.9735 Td
@@ -17219,6 +17348,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -17236,7 +17367,7 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/exec.c  Page 1) 161.635 Tj
+(Aug  8 01:04 2009  xv6/exec.c  Page 1) 161.635 Tj
 0 -28.4801 Td
 (5000 #include "types.h") 100.4758 Tj
 0 -37.9735 Td
@@ -17264,7 +17395,7 @@ q
 0 -142.4004 Td
 (5012   int i, argc, arglen, len, off;) 161.635 Tj
 0 -151.8938 Td
-(5013   uint sz, sp, argp;) 109.2129 Tj
+(5013   uint sz, sp, argp, x;) 122.3184 Tj
 0 -161.3871 Td
 (5014   struct elfhdr elf;) 109.2129 Tj
 0 -170.8805 Td
@@ -17274,72 +17405,72 @@ q
 0 -189.8672 Td
 (5017 ) 21.8426 Tj
 0 -199.3606 Td
-(5018   if\(\(ip = namei\(path\)\) == 0\)) 148.5295 Tj
+(5018   mem = 0;) 65.5277 Tj
 0 -208.8539 Td
-(5019     return -1;) 83.0018 Tj
+(5019   sz = 0;) 61.1592 Tj
 0 -218.3473 Td
-(5020   ilock\(ip\);) 74.2647 Tj
+(5020 ) 21.8426 Tj
 0 -227.8407 Td
-(5021 ) 21.8426 Tj
+(5021   if\(\(ip = namei\(path\)\) == 0\)) 148.5295 Tj
 0 -237.334 Td
-(5022   // Compute memory size of new process.) 196.5831 Tj
+(5022     return -1;) 83.0018 Tj
 0 -246.8274 Td
-(5023   mem = 0;) 65.5277 Tj
+(5023   ilock\(ip\);) 74.2647 Tj
 0 -256.3207 Td
-(5024   sz = 0;) 61.1592 Tj
+(5024 ) 21.8426 Tj
 0 -265.8141 Td
-(5025 ) 21.8426 Tj
+(5025   // Check ELF header) 113.5814 Tj
 0 -275.3075 Td
-(5026   // Program segments.) 117.9499 Tj
-0 -284.8008 Td
-(5027   if\(readi\(ip, \(char*\)&elf, 0, sizeof\(elf\)\) < sizeo\
+(5026   if\(readi\(ip, \(char*\)&elf, 0, sizeof\(elf\)\) < sizeo\
 f\(elf\)\)) 275.2164 Tj
+0 -284.8008 Td
+(5027     goto bad;) 78.6333 Tj
 0 -294.2942 Td
-(5028     goto bad;) 78.6333 Tj
+(5028   if\(elf.magic != ELF_MAGIC\)) 144.161 Tj
 0 -303.7875 Td
-(5029   if\(elf.magic != ELF_MAGIC\)) 144.161 Tj
+(5029     goto bad;) 78.6333 Tj
 0 -313.2809 Td
-(5030     goto bad;) 78.6333 Tj
+(5030 ) 21.8426 Tj
 0 -322.7743 Td
-(5031   for\(i=0, off=elf.phoff; i<elf.phnum; i++, off+=sizeof\(\
-ph\)\){) 288.322 Tj
+(5031   // Compute memory size of new process.) 196.5831 Tj
 0 -332.2676 Td
-(5032     if\(readi\(ip, \(char*\)&ph, off, sizeof\(ph\)\) != si\
-zeof\(ph\)\)) 283.9534 Tj
+(5032   // Program segments.) 117.9499 Tj
 0 -341.761 Td
-(5033       goto bad;) 87.3703 Tj
+(5033   for\(i=0, off=elf.phoff; i<elf.phnum; i++, off+=sizeof\(\
+ph\)\){) 288.322 Tj
 0 -351.2543 Td
-(5034     if\(ph.type != ELF_PROG_LOAD\)) 161.635 Tj
+(5034     if\(readi\(ip, \(char*\)&ph, off, sizeof\(ph\)\) != si\
+zeof\(ph\)\)) 283.9534 Tj
 0 -360.7477 Td
-(5035       continue;) 87.3703 Tj
+(5035       goto bad;) 87.3703 Tj
 0 -370.2411 Td
-(5036     if\(ph.memsz < ph.filesz\)) 144.161 Tj
+(5036     if\(ph.type != ELF_PROG_LOAD\)) 161.635 Tj
 0 -379.7344 Td
-(5037       goto bad;) 87.3703 Tj
+(5037       continue;) 87.3703 Tj
 0 -389.2278 Td
-(5038     sz += ph.memsz;) 104.8443 Tj
+(5038     if\(ph.memsz < ph.filesz\)) 144.161 Tj
 0 -398.7211 Td
-(5039   }) 34.9481 Tj
+(5039       goto bad;) 87.3703 Tj
 0 -408.2145 Td
-(5040 ) 21.8426 Tj
+(5040     sz += ph.memsz;) 104.8443 Tj
 0 -417.7079 Td
-(5041   // Arguments.) 87.3703 Tj
+(5041   }) 34.9481 Tj
 0 -427.2012 Td
-(5042   arglen = 0;) 78.6333 Tj
+(5042 ) 21.8426 Tj
 0 -436.6946 Td
-(5043   for\(argc=0; argv[argc]; argc++\)) 166.0035 Tj
+(5043   // Arguments.) 87.3703 Tj
 0 -446.1879 Td
-(5044     arglen += strlen\(argv[argc]\) + 1;) 183.4776 Tj
+(5044   arglen = 0;) 78.6333 Tj
 0 -455.6813 Td
-(5045   arglen = \(arglen+3\) & ~3;) 139.7925 Tj
+(5045   for\(argc=0; argv[argc]; argc++\)) 166.0035 Tj
 0 -465.1747 Td
-(5046   sz += arglen + 4*\(argc+1\);) 144.161 Tj
+(5046     arglen += strlen\(argv[argc]\) + 1;) 183.4776 Tj
 0 -474.668 Td
-(5047 ) 21.8426 Tj
+(5047   arglen = \(arglen+3\) & ~3;) 139.7925 Tj
 0 -484.1614 Td
-(5048   // Stack.) 69.8962 Tj
+(5048   sz += arglen;) 87.3703 Tj
 0 -493.6547 Td
-(5049   sz += PAGE;) 78.6333 Tj
+(5049   sz += 4*\(argc+1\);  // argv data) 166.0035 Tj
 0 -522.1348 Td
 (Sheet 50) 34.9481 Tj
 Q
@@ -17358,111 +17489,111 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/exec.c  Page 2) 161.635 Tj
+(Aug  8 01:04 2009  xv6/exec.c  Page 2) 161.635 Tj
 0 -28.4801 Td
-(5050   // Allocate program memory.) 148.5295 Tj
+(5050   sz += 4;  // argv) 104.8443 Tj
 0 -37.9735 Td
-(5051   sz = \(sz+PAGE-1\) & ~\(PAGE-1\);) 157.2665 Tj
+(5051   sz += 4;  // argc) 104.8443 Tj
 0 -47.4668 Td
-(5052   mem = kalloc\(sz\);) 104.8443 Tj
+(5052 ) 21.8426 Tj
 0 -56.9602 Td
-(5053   if\(mem == 0\)) 83.0018 Tj
+(5053   // Stack.) 69.8962 Tj
 0 -66.4535 Td
-(5054     goto bad;) 78.6333 Tj
+(5054   sz += PAGE;) 78.6333 Tj
 0 -75.9469 Td
-(5055   memset\(mem, 0, sz\);) 113.5814 Tj
+(5055 ) 21.8426 Tj
 0 -85.4403 Td
-(5056 ) 21.8426 Tj
+(5056   // Allocate program memory.) 148.5295 Tj
 0 -94.9336 Td
-(5057   // Load program into memory.) 152.898 Tj
+(5057   sz = \(sz+PAGE-1\) & ~\(PAGE-1\);) 157.2665 Tj
 0 -104.427 Td
-(5058   for\(i=0, off=elf.phoff; i<elf.phnum; i++, off+=sizeof\(\
-ph\)\){) 288.322 Tj
+(5058   mem = kalloc\(sz\);) 104.8443 Tj
 0 -113.9203 Td
-(5059     if\(readi\(ip, \(char*\)&ph, off, sizeof\(ph\)\) != si\
-zeof\(ph\)\)) 283.9534 Tj
+(5059   if\(mem == 0\)) 83.0018 Tj
 0 -123.4137 Td
-(5060       goto bad;) 87.3703 Tj
+(5060     goto bad;) 78.6333 Tj
 0 -132.9071 Td
-(5061     if\(ph.type != ELF_PROG_LOAD\)) 161.635 Tj
+(5061   memset\(mem, 0, sz\);) 113.5814 Tj
 0 -142.4004 Td
-(5062       continue;) 87.3703 Tj
+(5062 ) 21.8426 Tj
 0 -151.8938 Td
-(5063     if\(ph.va + ph.memsz > sz\)) 148.5295 Tj
+(5063   // Load program into memory.) 152.898 Tj
 0 -161.3871 Td
-(5064       goto bad;) 87.3703 Tj
+(5064   for\(i=0, off=elf.phoff; i<elf.phnum; i++, off+=sizeof\(\
+ph\)\){) 288.322 Tj
 0 -170.8805 Td
-(5065     if\(readi\(ip, mem + ph.va, ph.offset, ph.filesz\) != \
-ph.filesz\)) 305.796 Tj
+(5065     if\(readi\(ip, \(char*\)&ph, off, sizeof\(ph\)\) != si\
+zeof\(ph\)\)) 283.9534 Tj
 0 -180.3739 Td
 (5066       goto bad;) 87.3703 Tj
 0 -189.8672 Td
-(5067     memset\(mem + ph.va + ph.filesz, 0, ph.memsz - ph.file\
-sz\);) 288.322 Tj
+(5067     if\(ph.type != ELF_PROG_LOAD\)) 161.635 Tj
 0 -199.3606 Td
-(5068   }) 34.9481 Tj
+(5068       continue;) 87.3703 Tj
 0 -208.8539 Td
-(5069   iunlockput\(ip\);) 96.1073 Tj
+(5069     if\(ph.va + ph.memsz < ph.va || ph.va + ph.memsz > sz\)) 270.8479 Tj
 0 -218.3473 Td
-(5070 ) 21.8426 Tj
+(5070       goto bad;) 87.3703 Tj
 0 -227.8407 Td
-(5071   // Initialize stack.) 117.9499 Tj
+(5071     if\(ph.memsz < ph.filesz\)) 144.161 Tj
 0 -237.334 Td
-(5072   sp = sz;) 65.5277 Tj
+(5072       goto bad;) 87.3703 Tj
 0 -246.8274 Td
-(5073   argp = sz - arglen - 4*\(argc+1\);) 170.3721 Tj
+(5073     if\(readi\(ip, mem + ph.va, ph.offset, ph.filesz\) != \
+ph.filesz\)) 305.796 Tj
 0 -256.3207 Td
-(5074 ) 21.8426 Tj
+(5074       goto bad;) 87.3703 Tj
 0 -265.8141 Td
-(5075   // Copy argv strings and pointers to stack.) 218.4257 Tj
+(5075     memset\(mem + ph.va + ph.filesz, 0, ph.memsz - ph.file\
+sz\);) 288.322 Tj
 0 -275.3075 Td
-(5076   *\(uint*\)\(mem+argp + 4*argc\) = 0;  // argv[argc]) 235.8998 Tj
+(5076   }) 34.9481 Tj
 0 -284.8008 Td
-(5077   for\(i=argc-1; i>=0; i--\){) 139.7925 Tj
+(5077   iunlockput\(ip\);) 96.1073 Tj
 0 -294.2942 Td
-(5078     len = strlen\(argv[i]\) + 1;) 152.898 Tj
+(5078 ) 21.8426 Tj
 0 -303.7875 Td
-(5079     sp -= len;) 83.0018 Tj
+(5079   // Initialize stack.) 117.9499 Tj
 0 -313.2809 Td
-(5080     memmove\(mem+sp, argv[i], len\);) 170.3721 Tj
+(5080   sp = sz;) 65.5277 Tj
 0 -322.7743 Td
-(5081     *\(uint*\)\(mem+argp + 4*i\) = sp;  // argv[i]) 222.7942 Tj
+(5081   argp = sz - arglen - 4*\(argc+1\);) 170.3721 Tj
 0 -332.2676 Td
-(5082   }) 34.9481 Tj
+(5082 ) 21.8426 Tj
 0 -341.761 Td
-(5083 ) 21.8426 Tj
+(5083   // Copy argv strings and pointers to stack.) 218.4257 Tj
 0 -351.2543 Td
-(5084   // Stack frame for main\(argc, argv\), below arguments.) 262.1109 Tj
+(5084   *\(uint*\)\(mem+argp + 4*argc\) = 0;  // argv[argc]) 235.8998 Tj
 0 -360.7477 Td
-(5085   sp = argp;) 74.2647 Tj
+(5085   for\(i=argc-1; i>=0; i--\){) 139.7925 Tj
 0 -370.2411 Td
-(5086   sp -= 4;) 65.5277 Tj
+(5086     len = strlen\(argv[i]\) + 1;) 152.898 Tj
 0 -379.7344 Td
-(5087   *\(uint*\)\(mem+sp\) = argp;) 135.4239 Tj
+(5087     sp -= len;) 83.0018 Tj
 0 -389.2278 Td
-(5088   sp -= 4;) 65.5277 Tj
+(5088     memmove\(mem+sp, argv[i], len\);) 170.3721 Tj
 0 -398.7211 Td
-(5089   *\(uint*\)\(mem+sp\) = argc;) 135.4239 Tj
+(5089     *\(uint*\)\(mem+argp + 4*i\) = sp;  // argv[i]) 222.7942 Tj
 0 -408.2145 Td
-(5090   sp -= 4;) 65.5277 Tj
+(5090   }) 34.9481 Tj
 0 -417.7079 Td
-(5091   *\(uint*\)\(mem+sp\) = 0xffffffff;   // fake return pc) 249.0053 Tj
+(5091 ) 21.8426 Tj
 0 -427.2012 Td
-(5092 ) 21.8426 Tj
+(5092   // Stack frame for main\(argc, argv\), below arguments.) 262.1109 Tj
 0 -436.6946 Td
-(5093   // Save program name for debugging.) 183.4776 Tj
+(5093   sp = argp;) 74.2647 Tj
 0 -446.1879 Td
-(5094   for\(last=s=path; *s; s++\)) 139.7925 Tj
+(5094   sp -= 4;) 65.5277 Tj
 0 -455.6813 Td
-(5095     if\(*s == '/'\)) 96.1073 Tj
+(5095   *\(uint*\)\(mem+sp\) = argp;) 135.4239 Tj
 0 -465.1747 Td
-(5096       last = s+1;) 96.1073 Tj
+(5096   sp -= 4;) 65.5277 Tj
 0 -474.668 Td
-(5097   safestrcpy\(cp->name, last, sizeof\(cp->name\)\);) 227.1628 Tj
+(5097   *\(uint*\)\(mem+sp\) = argc;) 135.4239 Tj
 0 -484.1614 Td
-(5098 ) 21.8426 Tj
+(5098   sp -= 4;) 65.5277 Tj
 0 -493.6547 Td
-(5099 ) 21.8426 Tj
+(5099   *\(uint*\)\(mem+sp\) = 0xffffffff;   // fake return pc) 249.0053 Tj
 0 -522.1348 Td
 (Sheet 50) 34.9481 Tj
 Q
@@ -17493,6 +17624,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -17510,49 +17643,49 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/exec.c  Page 3) 161.635 Tj
+(Aug  8 01:04 2009  xv6/exec.c  Page 3) 161.635 Tj
 0 -28.4801 Td
-(5100   // Commit to the new image.) 148.5295 Tj
+(5100   // Save program name for debugging.) 183.4776 Tj
 0 -37.9735 Td
-(5101   kfree\(cp->mem, cp->sz\);) 131.0554 Tj
+(5101   for\(last=s=path; *s; s++\)) 139.7925 Tj
 0 -47.4668 Td
-(5102   cp->mem = mem;) 91.7388 Tj
+(5102     if\(*s == '/'\)) 96.1073 Tj
 0 -56.9602 Td
-(5103   cp->sz = sz;) 83.0018 Tj
+(5103       last = s+1;) 96.1073 Tj
 0 -66.4535 Td
-(5104   cp->tf->eip = elf.entry;  // main) 174.7406 Tj
+(5104   safestrcpy\(cp->name, last, sizeof\(cp->name\)\);) 227.1628 Tj
 0 -75.9469 Td
-(5105   cp->tf->esp = sp;) 104.8443 Tj
+(5105 ) 21.8426 Tj
 0 -85.4403 Td
-(5106   setupsegs\(cp\);) 91.7388 Tj
+(5106   // Commit to the new image.) 148.5295 Tj
 0 -94.9336 Td
-(5107   return 0;) 69.8962 Tj
+(5107   kfree\(cp->mem, cp->sz\);) 131.0554 Tj
 0 -104.427 Td
-(5108 ) 21.8426 Tj
+(5108   cp->mem = mem;) 91.7388 Tj
 0 -113.9203 Td
-(5109  bad:) 43.6851 Tj
+(5109   cp->sz = sz;) 83.0018 Tj
 0 -123.4137 Td
-(5110   if\(mem\)) 61.1592 Tj
+(5110   cp->tf->eip = elf.entry;  // main) 174.7406 Tj
 0 -132.9071 Td
-(5111     kfree\(mem, sz\);) 104.8443 Tj
+(5111   cp->tf->esp = sp;) 104.8443 Tj
 0 -142.4004 Td
-(5112   iunlockput\(ip\);) 96.1073 Tj
+(5112   usegment\(\);) 78.6333 Tj
 0 -151.8938 Td
-(5113   return -1;) 74.2647 Tj
+(5113   return 0;) 69.8962 Tj
 0 -161.3871 Td
-(5114 }) 26.2111 Tj
+(5114 ) 21.8426 Tj
 0 -170.8805 Td
-(5115 ) 21.8426 Tj
+(5115  bad:) 43.6851 Tj
 0 -180.3739 Td
-(5116 ) 21.8426 Tj
+(5116   if\(mem\)) 61.1592 Tj
 0 -189.8672 Td
-(5117 ) 21.8426 Tj
+(5117     kfree\(mem, sz\);) 104.8443 Tj
 0 -199.3606 Td
-(5118 ) 21.8426 Tj
+(5118   iunlockput\(ip\);) 96.1073 Tj
 0 -208.8539 Td
-(5119 ) 21.8426 Tj
+(5119   return -1;) 74.2647 Tj
 0 -218.3473 Td
-(5120 ) 21.8426 Tj
+(5120 }) 26.2111 Tj
 0 -227.8407 Td
 (5121 ) 21.8426 Tj
 0 -237.334 Td
@@ -17629,7 +17762,7 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/pipe.c  Page 1) 161.635 Tj
+(Aug  8 01:04 2009  xv6/pipe.c  Page 1) 161.635 Tj
 0 -28.4801 Td
 (5150 #include "types.h") 100.4758 Tj
 0 -37.9735 Td
@@ -17653,17 +17786,17 @@ q
 0 -123.4137 Td
 (5160 struct pipe {) 78.6333 Tj
 0 -132.9071 Td
-(5161   int readopen;   // read fd is still open) 205.3202 Tj
+(5161   struct spinlock lock;) 122.3184 Tj
 0 -142.4004 Td
-(5162   int writeopen;  // write fd is still open) 209.6887 Tj
+(5162   char data[PIPESIZE];) 117.9499 Tj
 0 -151.8938 Td
-(5163   uint writep;    // next index to write) 196.5831 Tj
+(5163   uint nread;     // number of bytes read) 200.9517 Tj
 0 -161.3871 Td
-(5164   uint readp;     // next index to read) 192.2146 Tj
+(5164   uint nwrite;    // number of bytes written) 214.0572 Tj
 0 -170.8805 Td
-(5165   struct spinlock lock;) 122.3184 Tj
+(5165   int readopen;   // read fd is still open) 205.3202 Tj
 0 -180.3739 Td
-(5166   char data[PIPESIZE];) 117.9499 Tj
+(5166   int writeopen;  // write fd is still open) 209.6887 Tj
 0 -189.8672 Td
 (5167 };) 30.5796 Tj
 0 -199.3606 Td
@@ -17696,9 +17829,9 @@ q
 0 -322.7743 Td
 (5181   p->writeopen = 1;) 104.8443 Tj
 0 -332.2676 Td
-(5182   p->writep = 0;) 91.7388 Tj
+(5182   p->nwrite = 0;) 91.7388 Tj
 0 -341.761 Td
-(5183   p->readp = 0;) 87.3703 Tj
+(5183   p->nread = 0;) 87.3703 Tj
 0 -351.2543 Td
 (5184   initlock\(&p->lock, "pipe"\);) 148.5295 Tj
 0 -360.7477 Td
@@ -17761,6 +17894,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -17778,7 +17913,7 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/pipe.c  Page 2) 161.635 Tj
+(Aug  8 01:04 2009  xv6/pipe.c  Page 2) 161.635 Tj
 0 -28.4801 Td
 (5200  bad:) 43.6851 Tj
 0 -37.9735 Td
@@ -17786,99 +17921,99 @@ q
 0 -47.4668 Td
 (5202     kfree\(\(char*\)p, PAGE\);) 135.4239 Tj
 0 -56.9602 Td
-(5203   if\(*f0\){) 65.5277 Tj
+(5203   if\(*f0\)) 61.1592 Tj
 0 -66.4535 Td
-(5204     \(*f0\)->type = FD_NONE;) 135.4239 Tj
+(5204     fileclose\(*f0\);) 104.8443 Tj
 0 -75.9469 Td
-(5205     fileclose\(*f0\);) 104.8443 Tj
+(5205   if\(*f1\)) 61.1592 Tj
 0 -85.4403 Td
-(5206   }) 34.9481 Tj
+(5206     fileclose\(*f1\);) 104.8443 Tj
 0 -94.9336 Td
-(5207   if\(*f1\){) 65.5277 Tj
+(5207   return -1;) 74.2647 Tj
 0 -104.427 Td
-(5208     \(*f1\)->type = FD_NONE;) 135.4239 Tj
+(5208 }) 26.2111 Tj
 0 -113.9203 Td
-(5209     fileclose\(*f1\);) 104.8443 Tj
+(5209 ) 21.8426 Tj
 0 -123.4137 Td
-(5210   }) 34.9481 Tj
+(5210 void) 39.3166 Tj
 0 -132.9071 Td
-(5211   return -1;) 74.2647 Tj
+(5211 pipeclose\(struct pipe *p, int writable\)) 192.2146 Tj
 0 -142.4004 Td
-(5212 }) 26.2111 Tj
+(5212 {) 26.2111 Tj
 0 -151.8938 Td
-(5213 ) 21.8426 Tj
+(5213   acquire\(&p->lock\);) 109.2129 Tj
 0 -161.3871 Td
-(5214 void) 39.3166 Tj
+(5214   if\(writable\){) 87.3703 Tj
 0 -170.8805 Td
-(5215 pipeclose\(struct pipe *p, int writable\)) 192.2146 Tj
+(5215     p->writeopen = 0;) 113.5814 Tj
 0 -180.3739 Td
-(5216 {) 26.2111 Tj
+(5216     wakeup\(&p->nread\);) 117.9499 Tj
 0 -189.8672 Td
-(5217   acquire\(&p->lock\);) 109.2129 Tj
+(5217   } else {) 65.5277 Tj
 0 -199.3606 Td
-(5218   if\(writable\){) 87.3703 Tj
+(5218     p->readopen = 0;) 109.2129 Tj
 0 -208.8539 Td
-(5219     p->writeopen = 0;) 113.5814 Tj
+(5219     wakeup\(&p->nwrite\);) 122.3184 Tj
 0 -218.3473 Td
-(5220     wakeup\(&p->readp\);) 117.9499 Tj
+(5220   }) 34.9481 Tj
 0 -227.8407 Td
-(5221   } else {) 65.5277 Tj
+(5221   if\(p->readopen == 0 && p->writeopen == 0\) {) 218.4257 Tj
 0 -237.334 Td
-(5222     p->readopen = 0;) 109.2129 Tj
+(5222     release\(&p->lock\);) 117.9499 Tj
 0 -246.8274 Td
-(5223     wakeup\(&p->writep\);) 122.3184 Tj
+(5223     kfree\(\(char*\)p, PAGE\);) 135.4239 Tj
 0 -256.3207 Td
-(5224   }) 34.9481 Tj
+(5224   } else) 56.7907 Tj
 0 -265.8141 Td
-(5225   release\(&p->lock\);) 109.2129 Tj
+(5225     release\(&p->lock\);) 117.9499 Tj
 0 -275.3075 Td
-(5226 ) 21.8426 Tj
+(5226 }) 26.2111 Tj
 0 -284.8008 Td
-(5227   if\(p->readopen == 0 && p->writeopen == 0\)) 209.6887 Tj
+(5227 ) 21.8426 Tj
 0 -294.2942 Td
-(5228     kfree\(\(char*\)p, PAGE\);) 135.4239 Tj
+(5228 ) 21.8426 Tj
 0 -303.7875 Td
-(5229 }) 26.2111 Tj
+(5229 int) 34.9481 Tj
 0 -313.2809 Td
-(5230 ) 21.8426 Tj
+(5230 pipewrite\(struct pipe *p, char *addr, int n\)) 214.0572 Tj
 0 -322.7743 Td
-(5231 ) 21.8426 Tj
+(5231 {) 26.2111 Tj
 0 -332.2676 Td
-(5232 ) 21.8426 Tj
+(5232   int i;) 56.7907 Tj
 0 -341.761 Td
 (5233 ) 21.8426 Tj
 0 -351.2543 Td
-(5234 ) 21.8426 Tj
+(5234   acquire\(&p->lock\);) 109.2129 Tj
 0 -360.7477 Td
-(5235 ) 21.8426 Tj
+(5235   for\(i = 0; i < n; i++\){) 131.0554 Tj
 0 -370.2411 Td
-(5236 ) 21.8426 Tj
+(5236     while\(p->nwrite == p->nread + PIPESIZE\) {  ) 227.1628 Tj
 0 -379.7344 Td
-(5237 ) 21.8426 Tj
+(5237       if\(p->readopen == 0 || cp->killed\){) 200.9517 Tj
 0 -389.2278 Td
-(5238 ) 21.8426 Tj
+(5238         release\(&p->lock\);) 135.4239 Tj
 0 -398.7211 Td
-(5239 ) 21.8426 Tj
+(5239         return -1;) 100.4758 Tj
 0 -408.2145 Td
-(5240 ) 21.8426 Tj
+(5240       }) 52.4222 Tj
 0 -417.7079 Td
-(5241 ) 21.8426 Tj
+(5241       wakeup\(&p->nread\);) 126.6869 Tj
 0 -427.2012 Td
-(5242 ) 21.8426 Tj
+(5242       sleep\(&p->nwrite, &p->lock\);  ) 179.1091 Tj
 0 -436.6946 Td
-(5243 ) 21.8426 Tj
+(5243     }) 43.6851 Tj
 0 -446.1879 Td
-(5244 ) 21.8426 Tj
+(5244     p->data[p->nwrite++ % PIPESIZE] = addr[i];) 222.7942 Tj
 0 -455.6813 Td
-(5245 ) 21.8426 Tj
+(5245   }) 34.9481 Tj
 0 -465.1747 Td
-(5246 ) 21.8426 Tj
+(5246   wakeup\(&p->nread\);  ) 117.9499 Tj
 0 -474.668 Td
-(5247 ) 21.8426 Tj
+(5247   release\(&p->lock\);) 109.2129 Tj
 0 -484.1614 Td
-(5248 ) 21.8426 Tj
+(5248   return n;) 69.8962 Tj
 0 -493.6547 Td
-(5249 ) 21.8426 Tj
+(5249 }) 26.2111 Tj
 0 -522.1348 Td
 (Sheet 52) 34.9481 Tj
 Q
@@ -17897,11 +18032,11 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/pipe.c  Page 3) 161.635 Tj
+(Aug  8 01:04 2009  xv6/pipe.c  Page 3) 161.635 Tj
 0 -28.4801 Td
 (5250 int) 34.9481 Tj
 0 -37.9735 Td
-(5251 pipewrite\(struct pipe *p, char *addr, int n\)) 214.0572 Tj
+(5251 piperead\(struct pipe *p, char *addr, int n\)) 209.6887 Tj
 0 -47.4668 Td
 (5252 {) 26.2111 Tj
 0 -56.9602 Td
@@ -17911,81 +18046,81 @@ q
 0 -75.9469 Td
 (5255   acquire\(&p->lock\);) 109.2129 Tj
 0 -85.4403 Td
-(5256   for\(i = 0; i < n; i++\){) 131.0554 Tj
+(5256   while\(p->nread == p->nwrite && p->writeopen\){  ) 235.8998 Tj
 0 -94.9336 Td
-(5257     while\(p->writep == p->readp + PIPESIZE\) {) 218.4257 Tj
+(5257     if\(cp->killed\){) 104.8443 Tj
 0 -104.427 Td
-(5258       if\(p->readopen == 0 || cp->killed\){) 200.9517 Tj
+(5258       release\(&p->lock\);) 126.6869 Tj
 0 -113.9203 Td
-(5259         release\(&p->lock\);) 135.4239 Tj
+(5259       return -1;) 91.7388 Tj
 0 -123.4137 Td
-(5260         return -1;) 100.4758 Tj
+(5260     }) 43.6851 Tj
 0 -132.9071 Td
-(5261       }) 52.4222 Tj
+(5261     sleep\(&p->nread, &p->lock\); ) 161.635 Tj
 0 -142.4004 Td
-(5262       wakeup\(&p->readp\);) 126.6869 Tj
+(5262   }) 34.9481 Tj
 0 -151.8938 Td
-(5263       sleep\(&p->writep, &p->lock\);) 170.3721 Tj
+(5263   for\(i = 0; i < n; i++\){  ) 139.7925 Tj
 0 -161.3871 Td
-(5264     }) 43.6851 Tj
+(5264     if\(p->nread == p->nwrite\)) 148.5295 Tj
 0 -170.8805 Td
-(5265     p->data[p->writep++ % PIPESIZE] = addr[i];) 222.7942 Tj
+(5265       break;) 74.2647 Tj
 0 -180.3739 Td
-(5266   }) 34.9481 Tj
+(5266     addr[i] = p->data[p->nread++ % PIPESIZE];) 218.4257 Tj
 0 -189.8672 Td
-(5267   wakeup\(&p->readp\);) 109.2129 Tj
+(5267   }) 34.9481 Tj
 0 -199.3606 Td
-(5268   release\(&p->lock\);) 109.2129 Tj
+(5268   wakeup\(&p->nwrite\);  ) 122.3184 Tj
 0 -208.8539 Td
-(5269   return i;) 69.8962 Tj
+(5269   release\(&p->lock\);) 109.2129 Tj
 0 -218.3473 Td
-(5270 }) 26.2111 Tj
+(5270   return i;) 69.8962 Tj
 0 -227.8407 Td
-(5271 ) 21.8426 Tj
+(5271 }) 26.2111 Tj
 0 -237.334 Td
-(5272 int) 34.9481 Tj
+(5272 ) 21.8426 Tj
 0 -246.8274 Td
-(5273 piperead\(struct pipe *p, char *addr, int n\)) 209.6887 Tj
+(5273 ) 21.8426 Tj
 0 -256.3207 Td
-(5274 {) 26.2111 Tj
+(5274 ) 21.8426 Tj
 0 -265.8141 Td
-(5275   int i;) 56.7907 Tj
+(5275 ) 21.8426 Tj
 0 -275.3075 Td
 (5276 ) 21.8426 Tj
 0 -284.8008 Td
-(5277   acquire\(&p->lock\);) 109.2129 Tj
+(5277 ) 21.8426 Tj
 0 -294.2942 Td
-(5278   while\(p->readp == p->writep && p->writeopen\){) 227.1628 Tj
+(5278 ) 21.8426 Tj
 0 -303.7875 Td
-(5279     if\(cp->killed\){) 104.8443 Tj
+(5279 ) 21.8426 Tj
 0 -313.2809 Td
-(5280       release\(&p->lock\);) 126.6869 Tj
+(5280 ) 21.8426 Tj
 0 -322.7743 Td
-(5281       return -1;) 91.7388 Tj
+(5281 ) 21.8426 Tj
 0 -332.2676 Td
-(5282     }) 43.6851 Tj
+(5282 ) 21.8426 Tj
 0 -341.761 Td
-(5283     sleep\(&p->readp, &p->lock\);) 157.2665 Tj
+(5283 ) 21.8426 Tj
 0 -351.2543 Td
-(5284   }) 34.9481 Tj
+(5284 ) 21.8426 Tj
 0 -360.7477 Td
-(5285   for\(i = 0; i < n; i++\){) 131.0554 Tj
+(5285 ) 21.8426 Tj
 0 -370.2411 Td
-(5286     if\(p->readp == p->writep\)) 148.5295 Tj
+(5286 ) 21.8426 Tj
 0 -379.7344 Td
-(5287       break;) 74.2647 Tj
+(5287 ) 21.8426 Tj
 0 -389.2278 Td
-(5288     addr[i] = p->data[p->readp++ % PIPESIZE];) 218.4257 Tj
+(5288 ) 21.8426 Tj
 0 -398.7211 Td
-(5289   }) 34.9481 Tj
+(5289 ) 21.8426 Tj
 0 -408.2145 Td
-(5290   wakeup\(&p->writep\);) 113.5814 Tj
+(5290 ) 21.8426 Tj
 0 -417.7079 Td
-(5291   release\(&p->lock\);) 109.2129 Tj
+(5291 ) 21.8426 Tj
 0 -427.2012 Td
-(5292   return i;) 69.8962 Tj
+(5292 ) 21.8426 Tj
 0 -436.6946 Td
-(5293 }) 26.2111 Tj
+(5293 ) 21.8426 Tj
 0 -446.1879 Td
 (5294 ) 21.8426 Tj
 0 -455.6813 Td
@@ -18028,6 +18163,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -18045,105 +18182,105 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/string.c  Page 1) 170.3721 Tj
+(Aug  8 01:04 2009  xv6/string.c  Page 1) 170.3721 Tj
 0 -28.4801 Td
 (5300 #include "types.h") 100.4758 Tj
 0 -37.9735 Td
-(5301 ) 21.8426 Tj
+(5301 #include "x86.h") 91.7388 Tj
 0 -47.4668 Td
-(5302 void*) 43.6851 Tj
+(5302 ) 21.8426 Tj
 0 -56.9602 Td
-(5303 memset\(void *dst, int c, uint n\)) 161.635 Tj
+(5303 void*) 43.6851 Tj
 0 -66.4535 Td
-(5304 {) 26.2111 Tj
+(5304 memset\(void *dst, int c, uint n\)) 161.635 Tj
 0 -75.9469 Td
-(5305   char *d;) 65.5277 Tj
+(5305 {) 26.2111 Tj
 0 -85.4403 Td
-(5306 ) 21.8426 Tj
+(5306   stosb\(dst, c, n\);) 104.8443 Tj
 0 -94.9336 Td
-(5307   d = \(char*\)dst;) 96.1073 Tj
+(5307   return dst;) 78.6333 Tj
 0 -104.427 Td
-(5308   while\(n-- > 0\)) 91.7388 Tj
+(5308 }) 26.2111 Tj
 0 -113.9203 Td
-(5309     *d++ = c;) 78.6333 Tj
+(5309 ) 21.8426 Tj
 0 -123.4137 Td
-(5310 ) 21.8426 Tj
+(5310 int) 34.9481 Tj
 0 -132.9071 Td
-(5311   return dst;) 78.6333 Tj
+(5311 memcmp\(const void *v1, const void *v2, uint n\)) 222.7942 Tj
 0 -142.4004 Td
-(5312 }) 26.2111 Tj
+(5312 {) 26.2111 Tj
 0 -151.8938 Td
-(5313 ) 21.8426 Tj
+(5313   const uchar *s1, *s2;) 122.3184 Tj
 0 -161.3871 Td
-(5314 int) 34.9481 Tj
+(5314 ) 21.8426 Tj
 0 -170.8805 Td
-(5315 memcmp\(const void *v1, const void *v2, uint n\)) 222.7942 Tj
+(5315   s1 = v1;) 65.5277 Tj
 0 -180.3739 Td
-(5316 {) 26.2111 Tj
+(5316   s2 = v2;) 65.5277 Tj
 0 -189.8672 Td
-(5317   const uchar *s1, *s2;) 122.3184 Tj
+(5317   while\(n-- > 0\){) 96.1073 Tj
 0 -199.3606 Td
-(5318 ) 21.8426 Tj
+(5318     if\(*s1 != *s2\)) 100.4758 Tj
 0 -208.8539 Td
-(5319   s1 = v1;) 65.5277 Tj
+(5319       return *s1 - *s2;) 122.3184 Tj
 0 -218.3473 Td
-(5320   s2 = v2;) 65.5277 Tj
+(5320     s1++, s2++;) 87.3703 Tj
 0 -227.8407 Td
-(5321   while\(n-- > 0\){) 96.1073 Tj
+(5321   }) 34.9481 Tj
 0 -237.334 Td
-(5322     if\(*s1 != *s2\)) 100.4758 Tj
+(5322 ) 21.8426 Tj
 0 -246.8274 Td
-(5323       return *s1 - *s2;) 122.3184 Tj
+(5323   return 0;) 69.8962 Tj
 0 -256.3207 Td
-(5324     s1++, s2++;) 87.3703 Tj
+(5324 }) 26.2111 Tj
 0 -265.8141 Td
-(5325   }) 34.9481 Tj
+(5325 ) 21.8426 Tj
 0 -275.3075 Td
-(5326 ) 21.8426 Tj
+(5326 void*) 43.6851 Tj
 0 -284.8008 Td
-(5327   return 0;) 69.8962 Tj
+(5327 memmove\(void *dst, const void *src, uint n\)) 209.6887 Tj
 0 -294.2942 Td
-(5328 }) 26.2111 Tj
+(5328 {) 26.2111 Tj
 0 -303.7875 Td
-(5329 ) 21.8426 Tj
+(5329   const char *s;) 91.7388 Tj
 0 -313.2809 Td
-(5330 void*) 43.6851 Tj
+(5330   char *d;) 65.5277 Tj
 0 -322.7743 Td
-(5331 memmove\(void *dst, const void *src, uint n\)) 209.6887 Tj
+(5331 ) 21.8426 Tj
 0 -332.2676 Td
-(5332 {) 26.2111 Tj
+(5332   s = src;) 65.5277 Tj
 0 -341.761 Td
-(5333   const char *s;) 91.7388 Tj
+(5333   d = dst;) 65.5277 Tj
 0 -351.2543 Td
-(5334   char *d;) 65.5277 Tj
+(5334   if\(s < d && s + n > d\){) 131.0554 Tj
 0 -360.7477 Td
-(5335 ) 21.8426 Tj
+(5335     s += n;) 69.8962 Tj
 0 -370.2411 Td
-(5336   s = src;) 65.5277 Tj
+(5336     d += n;) 69.8962 Tj
 0 -379.7344 Td
-(5337   d = dst;) 65.5277 Tj
+(5337     while\(n-- > 0\)) 100.4758 Tj
 0 -389.2278 Td
-(5338   if\(s < d && s + n > d\){) 131.0554 Tj
+(5338       *--d = *--s;) 100.4758 Tj
 0 -398.7211 Td
-(5339     s += n;) 69.8962 Tj
+(5339   } else) 56.7907 Tj
 0 -408.2145 Td
-(5340     d += n;) 69.8962 Tj
+(5340     while\(n-- > 0\)) 100.4758 Tj
 0 -417.7079 Td
-(5341     while\(n-- > 0\)) 100.4758 Tj
+(5341       *d++ = *s++;) 100.4758 Tj
 0 -427.2012 Td
-(5342       *--d = *--s;) 100.4758 Tj
+(5342 ) 21.8426 Tj
 0 -436.6946 Td
-(5343   } else) 56.7907 Tj
+(5343   return dst;) 78.6333 Tj
 0 -446.1879 Td
-(5344     while\(n-- > 0\)) 100.4758 Tj
+(5344 }) 26.2111 Tj
 0 -455.6813 Td
-(5345       *d++ = *s++;) 100.4758 Tj
+(5345 ) 21.8426 Tj
 0 -465.1747 Td
 (5346 ) 21.8426 Tj
 0 -474.668 Td
-(5347   return dst;) 78.6333 Tj
+(5347 ) 21.8426 Tj
 0 -484.1614 Td
-(5348 }) 26.2111 Tj
+(5348 ) 21.8426 Tj
 0 -493.6547 Td
 (5349 ) 21.8426 Tj
 0 -522.1348 Td
@@ -18164,7 +18301,7 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/string.c  Page 2) 170.3721 Tj
+(Aug  8 01:04 2009  xv6/string.c  Page 2) 170.3721 Tj
 0 -28.4801 Td
 (5350 int) 34.9481 Tj
 0 -37.9735 Td
@@ -18295,6 +18432,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -18312,7 +18451,7 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/mp.h  Page 1) 152.898 Tj
+(Aug  8 01:04 2009  xv6/mp.h  Page 1) 152.898 Tj
 0 -28.4801 Td
 (5400 // See MultiProcessor Specification Version 1.[14]) 240.2683 Tj
 0 -37.9735 Td
@@ -18436,7 +18575,7 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/mp.h  Page 2) 152.898 Tj
+(Aug  8 01:04 2009  xv6/mp.h  Page 2) 152.898 Tj
 0 -28.4801 Td
 (5450 // Table entry types) 109.2129 Tj
 0 -37.9735 Td
@@ -18567,6 +18706,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -18584,7 +18725,7 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/mp.c  Page 1) 152.898 Tj
+(Aug  8 01:04 2009  xv6/mp.c  Page 1) 152.898 Tj
 0 -28.4801 Td
 (5500 // Multiprocessor bootstrap.) 144.161 Tj
 0 -37.9735 Td
@@ -18619,13 +18760,13 @@ q
 0 -170.8805 Td
 (5515 int ncpu;) 61.1592 Tj
 0 -180.3739 Td
-(5516 uchar ioapic_id;) 91.7388 Tj
+(5516 uchar ioapicid;) 87.3703 Tj
 0 -189.8672 Td
 (5517 ) 21.8426 Tj
 0 -199.3606 Td
 (5518 int) 34.9481 Tj
 0 -208.8539 Td
-(5519 mp_bcpu\(void\)) 78.6333 Tj
+(5519 mpbcpu\(void\)) 74.2647 Tj
 0 -218.3473 Td
 (5520 {) 26.2111 Tj
 0 -227.8407 Td
@@ -18661,7 +18802,7 @@ q
 0 -370.2411 Td
 (5536 static struct mp*) 96.1073 Tj
 0 -379.7344 Td
-(5537 mp_search1\(uchar *addr, int len\)) 161.635 Tj
+(5537 mpsearch1\(uchar *addr, int len\)) 157.2665 Tj
 0 -389.2278 Td
 (5538 {) 26.2111 Tj
 0 -398.7211 Td
@@ -18705,7 +18846,7 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/mp.c  Page 2) 152.898 Tj
+(Aug  8 01:04 2009  xv6/mp.c  Page 2) 152.898 Tj
 0 -28.4801 Td
 (5550 // Search for the MP Floating Pointer Structure, which acc\
 ording to the) 332.0071 Tj
@@ -18720,7 +18861,7 @@ ording to the) 332.0071 Tj
 0 -75.9469 Td
 (5555 static struct mp*) 96.1073 Tj
 0 -85.4403 Td
-(5556 mp_search\(void\)) 87.3703 Tj
+(5556 mpsearch\(void\)) 83.0018 Tj
 0 -94.9336 Td
 (5557 {) 26.2111 Tj
 0 -104.427 Td
@@ -18736,7 +18877,7 @@ ording to the) 332.0071 Tj
 0 -151.8938 Td
 (5563   if\(\(p = \(\(bda[0x0F]<<8\)|bda[0x0E]\) << 4\)\){) 214.0572 Tj
 0 -161.3871 Td
-(5564     if\(\(mp = mp_search1\(\(uchar*\)p, 1024\)\)\)) 205.3202 Tj
+(5564     if\(\(mp = mpsearch1\(\(uchar*\)p, 1024\)\)\)) 200.9517 Tj
 0 -170.8805 Td
 (5565       return mp;) 91.7388 Tj
 0 -180.3739 Td
@@ -18744,13 +18885,13 @@ ording to the) 332.0071 Tj
 0 -189.8672 Td
 (5567     p = \(\(bda[0x14]<<8\)|bda[0x13]\)*1024;) 196.5831 Tj
 0 -199.3606 Td
-(5568     if\(\(mp = mp_search1\(\(uchar*\)p-1024, 1024\)\)\)) 227.1628 Tj
+(5568     if\(\(mp = mpsearch1\(\(uchar*\)p-1024, 1024\)\)\)) 222.7942 Tj
 0 -208.8539 Td
 (5569       return mp;) 91.7388 Tj
 0 -218.3473 Td
 (5570   }) 34.9481 Tj
 0 -227.8407 Td
-(5571   return mp_search1\(\(uchar*\)0xF0000, 0x10000\);) 222.7942 Tj
+(5571   return mpsearch1\(\(uchar*\)0xF0000, 0x10000\);) 218.4257 Tj
 0 -237.334 Td
 (5572 }) 26.2111 Tj
 0 -246.8274 Td
@@ -18770,7 +18911,7 @@ ording to the) 332.0071 Tj
 0 -303.7875 Td
 (5579 static struct mpconf*) 113.5814 Tj
 0 -313.2809 Td
-(5580 mp_config\(struct mp **pmp\)) 135.4239 Tj
+(5580 mpconfig\(struct mp **pmp\)) 131.0554 Tj
 0 -322.7743 Td
 (5581 {) 26.2111 Tj
 0 -332.2676 Td
@@ -18780,7 +18921,7 @@ ording to the) 332.0071 Tj
 0 -351.2543 Td
 (5584 ) 21.8426 Tj
 0 -360.7477 Td
-(5585   if\(\(mp = mp_search\(\)\) == 0 || mp->physaddr == 0\)) 240.2683 Tj
+(5585   if\(\(mp = mpsearch\(\)\) == 0 || mp->physaddr == 0\)) 235.8998 Tj
 0 -370.2411 Td
 (5586     return 0;) 78.6333 Tj
 0 -379.7344 Td
@@ -18839,6 +18980,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -18856,11 +18999,11 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/mp.c  Page 3) 152.898 Tj
+(Aug  8 01:04 2009  xv6/mp.c  Page 3) 152.898 Tj
 0 -28.4801 Td
 (5600 void) 39.3166 Tj
 0 -37.9735 Td
-(5601 mp_init\(void\)) 78.6333 Tj
+(5601 mpinit\(void\)) 74.2647 Tj
 0 -47.4668 Td
 (5602 {) 26.2111 Tj
 0 -56.9602 Td
@@ -18878,7 +19021,7 @@ q
 0 -113.9203 Td
 (5609   bcpu = &cpus[ncpu];) 113.5814 Tj
 0 -123.4137 Td
-(5610   if\(\(conf = mp_config\(&mp\)\) == 0\)) 170.3721 Tj
+(5610   if\(\(conf = mpconfig\(&mp\)\) == 0\)) 166.0035 Tj
 0 -132.9071 Td
 (5611     return;) 69.8962 Tj
 0 -142.4004 Td
@@ -18915,7 +19058,7 @@ th; p<e; \){) 292.6905 Tj
 0 -284.8008 Td
 (5627       ioapic = \(struct mpioapic*\)p;) 174.7406 Tj
 0 -294.2942 Td
-(5628       ioapic_id = ioapic->apicno;) 166.0035 Tj
+(5628       ioapicid = ioapic->apicno;) 161.635 Tj
 0 -303.7875 Td
 (5629       p += sizeof\(struct mpioapic\);) 174.7406 Tj
 0 -313.2809 Td
@@ -18933,9 +19076,9 @@ th; p<e; \){) 292.6905 Tj
 0 -370.2411 Td
 (5636     default:) 74.2647 Tj
 0 -379.7344 Td
-(5637       cprintf\("mp_init: unknown config type %x\\n", *p\);) 262.1109 Tj
+(5637       cprintf\("mpinit: unknown config type %x\\n", *p\);) 257.7424 Tj
 0 -389.2278 Td
-(5638       panic\("mp_init"\);) 122.3184 Tj
+(5638       panic\("mpinit"\);) 117.9499 Tj
 0 -398.7211 Td
 (5639     }) 43.6851 Tj
 0 -408.2145 Td
@@ -18978,7 +19121,7 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/lapic.c  Page 1) 166.0035 Tj
+(Aug  8 01:04 2009  xv6/lapic.c  Page 1) 166.0035 Tj
 0 -28.4801 Td
 (5650 // The local APIC manages internal \(non-I/O\) interrupts.) 266.4794 Tj
 0 -37.9735 Td
@@ -19120,6 +19263,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -19137,11 +19282,11 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/lapic.c  Page 2) 166.0035 Tj
+(Aug  8 01:04 2009  xv6/lapic.c  Page 2) 166.0035 Tj
 0 -28.4801 Td
 (5700 void) 39.3166 Tj
 0 -37.9735 Td
-(5701 lapic_init\(int c\)) 96.1073 Tj
+(5701 lapicinit\(int c\)) 91.7388 Tj
 0 -47.4668 Td
 (5702 {) 26.2111 Tj
 0 -56.9602 Td
@@ -19153,7 +19298,7 @@ q
 0 -85.4403 Td
 (5706   // Enable local APIC; set spurious interrupt vector.) 257.7424 Tj
 0 -94.9336 Td
-(5707   lapicw\(SVR, ENABLE | \(IRQ_OFFSET+IRQ_SPURIOUS\)\);) 240.2683 Tj
+(5707   lapicw\(SVR, ENABLE | \(T_IRQ0 + IRQ_SPURIOUS\)\);) 231.5313 Tj
 0 -104.427 Td
 (5708 ) 21.8426 Tj
 0 -113.9203 Td
@@ -19168,7 +19313,7 @@ e.) 283.9534 Tj
 0 -151.8938 Td
 (5713   lapicw\(TDCR, X1\);) 104.8443 Tj
 0 -161.3871 Td
-(5714   lapicw\(TIMER, PERIODIC | \(IRQ_OFFSET + IRQ_TIMER\)\);) 253.3738 Tj
+(5714   lapicw\(TIMER, PERIODIC | \(T_IRQ0 + IRQ_TIMER\)\);) 235.8998 Tj
 0 -170.8805 Td
 (5715   lapicw\(TICR, 10000000\);) 131.0554 Tj
 0 -180.3739 Td
@@ -19194,7 +19339,7 @@ e.) 283.9534 Tj
 0 -275.3075 Td
 (5726   // Map error interrupt to IRQ_ERROR.) 187.8461 Tj
 0 -284.8008 Td
-(5727   lapicw\(ERROR, IRQ_OFFSET+IRQ_ERROR\);) 187.8461 Tj
+(5727   lapicw\(ERROR, T_IRQ0 + IRQ_ERROR\);) 179.1091 Tj
 0 -294.2942 Td
 (5728 ) 21.8426 Tj
 0 -303.7875 Td
@@ -19260,7 +19405,7 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/lapic.c  Page 3) 166.0035 Tj
+(Aug  8 01:04 2009  xv6/lapic.c  Page 3) 166.0035 Tj
 0 -28.4801 Td
 (5750 int) 34.9481 Tj
 0 -37.9735 Td
@@ -19275,12 +19420,12 @@ q
 (5755   // Would prefer to panic but even printing is chancy her\
 e:) 283.9534 Tj
 0 -85.4403 Td
-(5756   // everything, including cprintf, calls cpu, at least in\
-directly) 310.1645 Tj
+(5756   // almost everything, including cprintf and panic, calls\
+ cpu,) 297.059 Tj
 0 -94.9336 Td
-(5757   // through acquire and release.) 166.0035 Tj
+(5757   // often indirectly through acquire and release.) 240.2683 Tj
 0 -104.427 Td
-(5758   if\(read_eflags\(\)&FL_IF\){) 135.4239 Tj
+(5758   if\(readeflags\(\)&FL_IF\){) 131.0554 Tj
 0 -113.9203 Td
 (5759     static int n;) 96.1073 Tj
 0 -123.4137 Td
@@ -19289,7 +19434,7 @@ directly) 310.1645 Tj
 (5761       cprintf\("cpu called from %x with interrupts enabled\
 \\n",) 288.322 Tj
 0 -142.4004 Td
-(5762         \(\(uint*\)read_ebp\(\)\)[1]\);) 161.635 Tj
+(5762         __builtin_return_address\(0\)\);) 183.4776 Tj
 0 -151.8938 Td
 (5763   }) 34.9481 Tj
 0 -161.3871 Td
@@ -19309,7 +19454,7 @@ directly) 310.1645 Tj
 0 -227.8407 Td
 (5771 void) 39.3166 Tj
 0 -237.334 Td
-(5772 lapic_eoi\(void\)) 87.3703 Tj
+(5772 lapiceoi\(void\)) 83.0018 Tj
 0 -246.8274 Td
 (5773 {) 26.2111 Tj
 0 -256.3207 Td
@@ -19325,7 +19470,7 @@ directly) 310.1645 Tj
 0 -303.7875 Td
 (5779 // On real hardware would want to tune this dynamically.) 266.4794 Tj
 0 -313.2809 Td
-(5780 static void) 69.8962 Tj
+(5780 void) 39.3166 Tj
 0 -322.7743 Td
 (5781 microdelay\(int us\)) 100.4758 Tj
 0 -332.2676 Td
@@ -19394,6 +19539,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -19411,7 +19558,7 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/lapic.c  Page 4) 166.0035 Tj
+(Aug  8 01:04 2009  xv6/lapic.c  Page 4) 166.0035 Tj
 0 -28.4801 Td
 (5800 #define IO_RTC  0x70) 109.2129 Tj
 0 -37.9735 Td
@@ -19424,7 +19571,7 @@ dr.) 288.322 Tj
 0 -66.4535 Td
 (5804 void) 39.3166 Tj
 0 -75.9469 Td
-(5805 lapic_startap\(uchar apicid, uint addr\)) 187.8461 Tj
+(5805 lapicstartap\(uchar apicid, uint addr\)) 183.4776 Tj
 0 -85.4403 Td
 (5806 {) 26.2111 Tj
 0 -94.9336 Td
@@ -19468,9 +19615,8 @@ r CPU.) 292.6905 Tj
 0 -256.3207 Td
 (5824   lapicw\(ICRLO, INIT | LEVEL\);) 152.898 Tj
 0 -265.8141 Td
-(5825   microdelay\(100\);) 100.4758 Tj
--500.868 TJm
-(// should be 10ms, but too slow in Bochs!) 179.1091 Tj
+(5825   microdelay\(100\);    // should be 10ms, but too slow in\
+ Bochs!) 297.059 Tj
 0 -275.3075 Td
 (5826 ) 21.8426 Tj
 0 -284.8008 Td
@@ -19540,7 +19686,7 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/ioapic.c  Page 1) 170.3721 Tj
+(Aug  8 01:04 2009  xv6/ioapic.c  Page 1) 170.3721 Tj
 0 -28.4801 Td
 (5850 // The I/O APIC manages hardware interrupts for an SMP sys\
 tem.) 292.6905 Tj
@@ -19619,7 +19765,7 @@ ata.) 292.6905 Tj
 0 -341.761 Td
 (5883 static uint) 69.8962 Tj
 0 -351.2543 Td
-(5884 ioapic_read\(int reg\)) 109.2129 Tj
+(5884 ioapicread\(int reg\)) 104.8443 Tj
 0 -360.7477 Td
 (5885 {) 26.2111 Tj
 0 -370.2411 Td
@@ -19633,7 +19779,7 @@ ata.) 292.6905 Tj
 0 -408.2145 Td
 (5890 static void) 69.8962 Tj
 0 -417.7079 Td
-(5891 ioapic_write\(int reg, uint data\)) 161.635 Tj
+(5891 ioapicwrite\(int reg, uint data\)) 157.2665 Tj
 0 -427.2012 Td
 (5892 {) 26.2111 Tj
 0 -436.6946 Td
@@ -19680,6 +19826,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -19697,11 +19845,11 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/ioapic.c  Page 2) 170.3721 Tj
+(Aug  8 01:04 2009  xv6/ioapic.c  Page 2) 170.3721 Tj
 0 -28.4801 Td
 (5900 void) 39.3166 Tj
 0 -37.9735 Td
-(5901 ioapic_init\(void\)) 96.1073 Tj
+(5901 ioapicinit\(void\)) 91.7388 Tj
 0 -47.4668 Td
 (5902 {) 26.2111 Tj
 0 -56.9602 Td
@@ -19717,14 +19865,14 @@ q
 0 -104.427 Td
 (5908   ioapic = \(volatile struct ioapic*\)IOAPIC;) 209.6887 Tj
 0 -113.9203 Td
-(5909   maxintr = \(ioapic_read\(REG_VER\) >> 16\) & 0xFF;) 231.5313 Tj
+(5909   maxintr = \(ioapicread\(REG_VER\) >> 16\) & 0xFF;) 227.1628 Tj
 0 -123.4137 Td
-(5910   id = ioapic_read\(REG_ID\) >> 24;) 166.0035 Tj
+(5910   id = ioapicread\(REG_ID\) >> 24;) 161.635 Tj
 0 -132.9071 Td
-(5911   if\(id != ioapic_id\)) 113.5814 Tj
+(5911   if\(id != ioapicid\)) 109.2129 Tj
 0 -142.4004 Td
-(5912     cprintf\("ioapic_init: id isn't equal to ioapic_id; no\
-t a MP\\n"\);) 318.9016 Tj
+(5912     cprintf\("ioapicinit: id isn't equal to ioapicid; not \
+a MP\\n"\);) 310.1645 Tj
 0 -151.8938 Td
 (5913 ) 21.8426 Tj
 0 -161.3871 Td
@@ -19735,10 +19883,10 @@ bled,) 297.059 Tj
 0 -180.3739 Td
 (5916   for\(i = 0; i <= maxintr; i++\){) 161.635 Tj
 0 -189.8672 Td
-(5917     ioapic_write\(REG_TABLE+2*i, INT_DISABLED | \(IRQ_OFFS\
-ET + i\)\);) 305.796 Tj
+(5917     ioapicwrite\(REG_TABLE+2*i, INT_DISABLED | \(T_IRQ0 + \
+i\)\);) 283.9534 Tj
 0 -199.3606 Td
-(5918     ioapic_write\(REG_TABLE+2*i+1, 0\);) 183.4776 Tj
+(5918     ioapicwrite\(REG_TABLE+2*i+1, 0\);) 179.1091 Tj
 0 -208.8539 Td
 (5919   }) 34.9481 Tj
 0 -218.3473 Td
@@ -19748,7 +19896,7 @@ ET + i\)\);) 305.796 Tj
 0 -237.334 Td
 (5922 void) 39.3166 Tj
 0 -246.8274 Td
-(5923 ioapic_enable\(int irq, int cpunum\)) 170.3721 Tj
+(5923 ioapicenable\(int irq, int cpunum\)) 166.0035 Tj
 0 -256.3207 Td
 (5924 {) 26.2111 Tj
 0 -265.8141 Td
@@ -19764,9 +19912,9 @@ ET + i\)\);) 305.796 Tj
 0 -313.2809 Td
 (5930   // which happens to be that cpu's APIC ID.) 214.0572 Tj
 0 -322.7743 Td
-(5931   ioapic_write\(REG_TABLE+2*irq, IRQ_OFFSET + irq\);) 240.2683 Tj
+(5931   ioapicwrite\(REG_TABLE+2*irq, T_IRQ0 + irq\);) 218.4257 Tj
 0 -332.2676 Td
-(5932   ioapic_write\(REG_TABLE+2*irq+1, cpunum << 24\);) 231.5313 Tj
+(5932   ioapicwrite\(REG_TABLE+2*irq+1, cpunum << 24\);) 227.1628 Tj
 0 -341.761 Td
 (5933 }) 26.2111 Tj
 0 -351.2543 Td
@@ -19819,7 +19967,7 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/picirq.c  Page 1) 170.3721 Tj
+(Aug  8 01:04 2009  xv6/picirq.c  Page 1) 170.3721 Tj
 0 -28.4801 Td
 (5950 // Intel 8259A programmable interrupt controllers.) 240.2683 Tj
 0 -37.9735 Td
@@ -19858,7 +20006,7 @@ ects to master) 336.3756 Tj
 0 -180.3739 Td
 (5966 static void) 69.8962 Tj
 0 -189.8672 Td
-(5967 pic_setmask\(ushort mask\)) 126.6869 Tj
+(5967 picsetmask\(ushort mask\)) 122.3184 Tj
 0 -199.3606 Td
 (5968 {) 26.2111 Tj
 0 -208.8539 Td
@@ -19874,11 +20022,11 @@ ects to master) 336.3756 Tj
 0 -256.3207 Td
 (5974 void) 39.3166 Tj
 0 -265.8141 Td
-(5975 pic_enable\(int irq\)) 104.8443 Tj
+(5975 picenable\(int irq\)) 100.4758 Tj
 0 -275.3075 Td
 (5976 {) 26.2111 Tj
 0 -284.8008 Td
-(5977   pic_setmask\(irqmask & ~\(1<<irq\)\);) 174.7406 Tj
+(5977   picsetmask\(irqmask & ~\(1<<irq\)\);) 170.3721 Tj
 0 -294.2942 Td
 (5978 }) 26.2111 Tj
 0 -303.7875 Td
@@ -19888,7 +20036,7 @@ ects to master) 336.3756 Tj
 0 -322.7743 Td
 (5981 void) 39.3166 Tj
 0 -332.2676 Td
-(5982 pic_init\(void\)) 83.0018 Tj
+(5982 picinit\(void\)) 78.6333 Tj
 0 -341.761 Td
 (5983 {) 26.2111 Tj
 0 -351.2543 Td
@@ -19918,7 +20066,7 @@ ects to master) 336.3756 Tj
 0 -465.1747 Td
 (5996   // ICW2:  Vector offset) 131.0554 Tj
 0 -474.668 Td
-(5997   outb\(IO_PIC1+1, IRQ_OFFSET\);) 152.898 Tj
+(5997   outb\(IO_PIC1+1, T_IRQ0\);) 135.4239 Tj
 0 -484.1614 Td
 (5998 ) 21.8426 Tj
 0 -493.6547 Td
@@ -19953,6 +20101,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -19970,7 +20120,7 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/picirq.c  Page 2) 170.3721 Tj
+(Aug  8 01:04 2009  xv6/picirq.c  Page 2) 170.3721 Tj
 0 -28.4801 Td
 (6000   // ICW3:  \(master PIC\) bit mask of IR lines connected \
 to slaves) 305.796 Tj
@@ -20006,7 +20156,7 @@ to slaves) 305.796 Tj
 0 -170.8805 Td
 (6015   outb\(IO_PIC2, 0x11\);                  // ICW1) 227.1628 Tj
 0 -180.3739 Td
-(6016   outb\(IO_PIC2+1, IRQ_OFFSET + 8\);      // ICW2) 227.1628 Tj
+(6016   outb\(IO_PIC2+1, T_IRQ0 + 8\);      // ICW2) 209.6887 Tj
 0 -189.8672 Td
 (6017   outb\(IO_PIC2+1, IRQ_SLAVE\);           // ICW3) 227.1628 Tj
 0 -199.3606 Td
@@ -20044,7 +20194,7 @@ t) 270.8479 Tj
 0 -332.2676 Td
 (6032   if\(irqmask != 0xFFFF\)) 122.3184 Tj
 0 -341.761 Td
-(6033     pic_setmask\(irqmask\);) 131.0554 Tj
+(6033     picsetmask\(irqmask\);) 126.6869 Tj
 0 -351.2543 Td
 (6034 }) 26.2111 Tj
 0 -360.7477 Td
@@ -20095,106 +20245,105 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/kbd.h  Page 1) 157.2665 Tj
+(Aug  8 01:04 2009  xv6/picirq.c  Page 3) 170.3721 Tj
 0 -28.4801 Td
-(6050 // PC keyboard interface constants) 170.3721 Tj
+(6050 // Blank page.) 83.0018 Tj
 0 -37.9735 Td
 (6051 ) 21.8426 Tj
 0 -47.4668 Td
-(6052 #define KBSTATP         0x64    // kbd controller status p\
-ort\(I\)) 301.4275 Tj
+(6052 ) 21.8426 Tj
 0 -56.9602 Td
-(6053 #define KBS_DIB         0x01    // kbd data in buffer) 253.3738 Tj
+(6053 ) 21.8426 Tj
 0 -66.4535 Td
-(6054 #define KBDATAP         0x60    // kbd data port\(I\)) 244.6368 Tj
+(6054 ) 21.8426 Tj
 0 -75.9469 Td
 (6055 ) 21.8426 Tj
 0 -85.4403 Td
-(6056 #define NO              0) 131.0554 Tj
+(6056 ) 21.8426 Tj
 0 -94.9336 Td
 (6057 ) 21.8426 Tj
 0 -104.427 Td
-(6058 #define SHIFT           \(1<<0\)) 152.898 Tj
+(6058 ) 21.8426 Tj
 0 -113.9203 Td
-(6059 #define CTL             \(1<<1\)) 152.898 Tj
+(6059 ) 21.8426 Tj
 0 -123.4137 Td
-(6060 #define ALT             \(1<<2\)) 152.898 Tj
+(6060 ) 21.8426 Tj
 0 -132.9071 Td
 (6061 ) 21.8426 Tj
 0 -142.4004 Td
-(6062 #define CAPSLOCK        \(1<<3\)) 152.898 Tj
+(6062 ) 21.8426 Tj
 0 -151.8938 Td
-(6063 #define NUMLOCK         \(1<<4\)) 152.898 Tj
+(6063 ) 21.8426 Tj
 0 -161.3871 Td
-(6064 #define SCROLLLOCK      \(1<<5\)) 152.898 Tj
+(6064 ) 21.8426 Tj
 0 -170.8805 Td
 (6065 ) 21.8426 Tj
 0 -180.3739 Td
-(6066 #define E0ESC           \(1<<6\)) 152.898 Tj
+(6066 ) 21.8426 Tj
 0 -189.8672 Td
 (6067 ) 21.8426 Tj
 0 -199.3606 Td
-(6068 // Special keycodes) 104.8443 Tj
+(6068 ) 21.8426 Tj
 0 -208.8539 Td
-(6069 #define KEY_HOME        0xE0) 144.161 Tj
+(6069 ) 21.8426 Tj
 0 -218.3473 Td
-(6070 #define KEY_END         0xE1) 144.161 Tj
+(6070 ) 21.8426 Tj
 0 -227.8407 Td
-(6071 #define KEY_UP          0xE2) 144.161 Tj
+(6071 ) 21.8426 Tj
 0 -237.334 Td
-(6072 #define KEY_DN          0xE3) 144.161 Tj
+(6072 ) 21.8426 Tj
 0 -246.8274 Td
-(6073 #define KEY_LF          0xE4) 144.161 Tj
+(6073 ) 21.8426 Tj
 0 -256.3207 Td
-(6074 #define KEY_RT          0xE5) 144.161 Tj
+(6074 ) 21.8426 Tj
 0 -265.8141 Td
-(6075 #define KEY_PGUP        0xE6) 144.161 Tj
+(6075 ) 21.8426 Tj
 0 -275.3075 Td
-(6076 #define KEY_PGDN        0xE7) 144.161 Tj
+(6076 ) 21.8426 Tj
 0 -284.8008 Td
-(6077 #define KEY_INS         0xE8) 144.161 Tj
+(6077 ) 21.8426 Tj
 0 -294.2942 Td
-(6078 #define KEY_DEL         0xE9) 144.161 Tj
+(6078 ) 21.8426 Tj
 0 -303.7875 Td
 (6079 ) 21.8426 Tj
 0 -313.2809 Td
-(6080 // C\('A'\) == Control-A) 117.9499 Tj
+(6080 ) 21.8426 Tj
 0 -322.7743 Td
-(6081 #define C\(x\) \(x - '@'\)) 117.9499 Tj
+(6081 ) 21.8426 Tj
 0 -332.2676 Td
 (6082 ) 21.8426 Tj
 0 -341.761 Td
-(6083 static uchar shiftcode[256] =) 148.5295 Tj
+(6083 ) 21.8426 Tj
 0 -351.2543 Td
-(6084 {) 26.2111 Tj
+(6084 ) 21.8426 Tj
 0 -360.7477 Td
-(6085   [0x1D] CTL,) 78.6333 Tj
+(6085 ) 21.8426 Tj
 0 -370.2411 Td
-(6086   [0x2A] SHIFT,) 87.3703 Tj
+(6086 ) 21.8426 Tj
 0 -379.7344 Td
-(6087   [0x36] SHIFT,) 87.3703 Tj
+(6087 ) 21.8426 Tj
 0 -389.2278 Td
-(6088   [0x38] ALT,) 78.6333 Tj
+(6088 ) 21.8426 Tj
 0 -398.7211 Td
-(6089   [0x9D] CTL,) 78.6333 Tj
+(6089 ) 21.8426 Tj
 0 -408.2145 Td
-(6090   [0xB8] ALT) 74.2647 Tj
+(6090 ) 21.8426 Tj
 0 -417.7079 Td
-(6091 };) 30.5796 Tj
+(6091 ) 21.8426 Tj
 0 -427.2012 Td
 (6092 ) 21.8426 Tj
 0 -436.6946 Td
-(6093 static uchar togglecode[256] =) 152.898 Tj
+(6093 ) 21.8426 Tj
 0 -446.1879 Td
-(6094 {) 26.2111 Tj
+(6094 ) 21.8426 Tj
 0 -455.6813 Td
-(6095   [0x3A] CAPSLOCK,) 100.4758 Tj
+(6095 ) 21.8426 Tj
 0 -465.1747 Td
-(6096   [0x45] NUMLOCK,) 96.1073 Tj
+(6096 ) 21.8426 Tj
 0 -474.668 Td
-(6097   [0x46] SCROLLLOCK) 104.8443 Tj
+(6097 ) 21.8426 Tj
 0 -484.1614 Td
-(6098 };) 30.5796 Tj
+(6098 ) 21.8426 Tj
 0 -493.6547 Td
 (6099 ) 21.8426 Tj
 0 -522.1348 Td
@@ -20227,6 +20376,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -20244,105 +20395,106 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/kbd.h  Page 2) 157.2665 Tj
+(Aug  8 01:04 2009  xv6/kbd.h  Page 1) 157.2665 Tj
 0 -28.4801 Td
-(6100 static uchar normalmap[256] =) 148.5295 Tj
+(6100 // PC keyboard interface constants) 170.3721 Tj
 0 -37.9735 Td
-(6101 {) 26.2111 Tj
+(6101 ) 21.8426 Tj
 0 -47.4668 Td
-(6102   NO,   0x1B, '1',  '2',  '3',  '4',  '5',  '6',  // 0x00) 270.8479 Tj
+(6102 #define KBSTATP         0x64    // kbd controller status p\
+ort\(I\)) 301.4275 Tj
 0 -56.9602 Td
-(6103   '7',  '8',  '9',  '0',  '-',  '=',  '\\b', '\\t',) 235.8998 Tj
+(6103 #define KBS_DIB         0x01    // kbd data in buffer) 253.3738 Tj
 0 -66.4535 Td
-(6104   'q',  'w',  'e',  'r',  't',  'y',  'u',  'i',  // 0x10) 270.8479 Tj
+(6104 #define KBDATAP         0x60    // kbd data port\(I\)) 244.6368 Tj
 0 -75.9469 Td
-(6105   'o',  'p',  '[',  ']',  '\\n', NO,   'a',  's',) 231.5313 Tj
+(6105 ) 21.8426 Tj
 0 -85.4403 Td
-(6106   'd',  'f',  'g',  'h',  'j',  'k',  'l',  ';',  // 0x20) 270.8479 Tj
+(6106 #define NO              0) 131.0554 Tj
 0 -94.9336 Td
-(6107   '\\'', '`',  NO,   '\\\\', 'z',  'x',  'c',  'v',) 231.5313 Tj
+(6107 ) 21.8426 Tj
 0 -104.427 Td
-(6108   'b',  'n',  'm',  ',',  '.',  '/',  NO,   '*',  // 0x30) 270.8479 Tj
+(6108 #define SHIFT           \(1<<0\)) 152.898 Tj
 0 -113.9203 Td
-(6109   NO,   ' ',  NO,   NO,   NO,   NO,   NO,   NO,) 227.1628 Tj
+(6109 #define CTL             \(1<<1\)) 152.898 Tj
 0 -123.4137 Td
-(6110   NO,   NO,   NO,   NO,   NO,   NO,   NO,   '7',  // 0x40) 270.8479 Tj
+(6110 #define ALT             \(1<<2\)) 152.898 Tj
 0 -132.9071 Td
-(6111   '8',  '9',  '-',  '4',  '5',  '6',  '+',  '1',) 231.5313 Tj
+(6111 ) 21.8426 Tj
 0 -142.4004 Td
-(6112   '2',  '3',  '0',  '.',  NO,   NO,   NO,   NO,   // 0x50) 270.8479 Tj
+(6112 #define CAPSLOCK        \(1<<3\)) 152.898 Tj
 0 -151.8938 Td
-(6113   [0x9C] '\\n',      // KP_Enter) 157.2665 Tj
+(6113 #define NUMLOCK         \(1<<4\)) 152.898 Tj
 0 -161.3871 Td
-(6114   [0xB5] '/',       // KP_Div) 148.5295 Tj
+(6114 #define SCROLLLOCK      \(1<<5\)) 152.898 Tj
 0 -170.8805 Td
-(6115   [0xC8] KEY_UP,    [0xD0] KEY_DN,) 170.3721 Tj
+(6115 ) 21.8426 Tj
 0 -180.3739 Td
-(6116   [0xC9] KEY_PGUP,  [0xD1] KEY_PGDN,) 179.1091 Tj
+(6116 #define E0ESC           \(1<<6\)) 152.898 Tj
 0 -189.8672 Td
-(6117   [0xCB] KEY_LF,    [0xCD] KEY_RT,) 170.3721 Tj
+(6117 ) 21.8426 Tj
 0 -199.3606 Td
-(6118   [0x97] KEY_HOME,  [0xCF] KEY_END,) 174.7406 Tj
+(6118 // Special keycodes) 104.8443 Tj
 0 -208.8539 Td
-(6119   [0xD2] KEY_INS,   [0xD3] KEY_DEL) 170.3721 Tj
+(6119 #define KEY_HOME        0xE0) 144.161 Tj
 0 -218.3473 Td
-(6120 };) 30.5796 Tj
+(6120 #define KEY_END         0xE1) 144.161 Tj
 0 -227.8407 Td
-(6121 ) 21.8426 Tj
+(6121 #define KEY_UP          0xE2) 144.161 Tj
 0 -237.334 Td
-(6122 static uchar shiftmap[256] =) 144.161 Tj
+(6122 #define KEY_DN          0xE3) 144.161 Tj
 0 -246.8274 Td
-(6123 {) 26.2111 Tj
+(6123 #define KEY_LF          0xE4) 144.161 Tj
 0 -256.3207 Td
-(6124   NO,   033,  '!',  '@',  '#',  '$',  '%',  '^',  // 0x00) 270.8479 Tj
+(6124 #define KEY_RT          0xE5) 144.161 Tj
 0 -265.8141 Td
-(6125   '&',  '*',  '\(',  '\)',  '_',  '+',  '\\b', '\\t',) 235.8998 Tj
+(6125 #define KEY_PGUP        0xE6) 144.161 Tj
 0 -275.3075 Td
-(6126   'Q',  'W',  'E',  'R',  'T',  'Y',  'U',  'I',  // 0x10) 270.8479 Tj
+(6126 #define KEY_PGDN        0xE7) 144.161 Tj
 0 -284.8008 Td
-(6127   'O',  'P',  '{',  '}',  '\\n', NO,   'A',  'S',) 231.5313 Tj
+(6127 #define KEY_INS         0xE8) 144.161 Tj
 0 -294.2942 Td
-(6128   'D',  'F',  'G',  'H',  'J',  'K',  'L',  ':',  // 0x20) 270.8479 Tj
+(6128 #define KEY_DEL         0xE9) 144.161 Tj
 0 -303.7875 Td
-(6129   '"',  '~',  NO,   '|',  'Z',  'X',  'C',  'V',) 231.5313 Tj
+(6129 ) 21.8426 Tj
 0 -313.2809 Td
-(6130   'B',  'N',  'M',  '<',  '>',  '?',  NO,   '*',  // 0x30) 270.8479 Tj
+(6130 // C\('A'\) == Control-A) 117.9499 Tj
 0 -322.7743 Td
-(6131   NO,   ' ',  NO,   NO,   NO,   NO,   NO,   NO,) 227.1628 Tj
+(6131 #define C\(x\) \(x - '@'\)) 117.9499 Tj
 0 -332.2676 Td
-(6132   NO,   NO,   NO,   NO,   NO,   NO,   NO,   '7',  // 0x40) 270.8479 Tj
+(6132 ) 21.8426 Tj
 0 -341.761 Td
-(6133   '8',  '9',  '-',  '4',  '5',  '6',  '+',  '1',) 231.5313 Tj
+(6133 static uchar shiftcode[256] =) 148.5295 Tj
 0 -351.2543 Td
-(6134   '2',  '3',  '0',  '.',  NO,   NO,   NO,   NO,   // 0x50) 270.8479 Tj
+(6134 {) 26.2111 Tj
 0 -360.7477 Td
-(6135   [0x9C] '\\n',      // KP_Enter) 157.2665 Tj
+(6135   [0x1D] CTL,) 78.6333 Tj
 0 -370.2411 Td
-(6136   [0xB5] '/',       // KP_Div) 148.5295 Tj
+(6136   [0x2A] SHIFT,) 87.3703 Tj
 0 -379.7344 Td
-(6137   [0xC8] KEY_UP,    [0xD0] KEY_DN,) 170.3721 Tj
+(6137   [0x36] SHIFT,) 87.3703 Tj
 0 -389.2278 Td
-(6138   [0xC9] KEY_PGUP,  [0xD1] KEY_PGDN,) 179.1091 Tj
+(6138   [0x38] ALT,) 78.6333 Tj
 0 -398.7211 Td
-(6139   [0xCB] KEY_LF,    [0xCD] KEY_RT,) 170.3721 Tj
+(6139   [0x9D] CTL,) 78.6333 Tj
 0 -408.2145 Td
-(6140   [0x97] KEY_HOME,  [0xCF] KEY_END,) 174.7406 Tj
+(6140   [0xB8] ALT) 74.2647 Tj
 0 -417.7079 Td
-(6141   [0xD2] KEY_INS,   [0xD3] KEY_DEL) 170.3721 Tj
+(6141 };) 30.5796 Tj
 0 -427.2012 Td
-(6142 };) 30.5796 Tj
+(6142 ) 21.8426 Tj
 0 -436.6946 Td
-(6143 ) 21.8426 Tj
+(6143 static uchar togglecode[256] =) 152.898 Tj
 0 -446.1879 Td
-(6144 ) 21.8426 Tj
+(6144 {) 26.2111 Tj
 0 -455.6813 Td
-(6145 ) 21.8426 Tj
+(6145   [0x3A] CAPSLOCK,) 100.4758 Tj
 0 -465.1747 Td
-(6146 ) 21.8426 Tj
+(6146   [0x45] NUMLOCK,) 96.1073 Tj
 0 -474.668 Td
-(6147 ) 21.8426 Tj
+(6147   [0x46] SCROLLLOCK) 104.8443 Tj
 0 -484.1614 Td
-(6148 ) 21.8426 Tj
+(6148 };) 30.5796 Tj
 0 -493.6547 Td
 (6149 ) 21.8426 Tj
 0 -522.1348 Td
@@ -20363,100 +20515,93 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/kbd.h  Page 3) 157.2665 Tj
+(Aug  8 01:04 2009  xv6/kbd.h  Page 2) 157.2665 Tj
 0 -28.4801 Td
-(6150 static uchar ctlmap[256] =) 135.4239 Tj
+(6150 static uchar normalmap[256] =) 148.5295 Tj
 0 -37.9735 Td
 (6151 {) 26.2111 Tj
 0 -47.4668 Td
-(6152   NO,      NO,      NO,      NO,      NO,      NO,      NO\
-,      NO,) 318.9016 Tj
+(6152   NO,   0x1B, '1',  '2',  '3',  '4',  '5',  '6',  // 0x00) 270.8479 Tj
 0 -56.9602 Td
-(6153   NO,      NO,      NO,      NO,      NO,      NO,      NO\
-,      NO,) 318.9016 Tj
+(6153   '7',  '8',  '9',  '0',  '-',  '=',  '\\b', '\\t',) 235.8998 Tj
 0 -66.4535 Td
-(6154   C\('Q'\),  C\('W'\),  C\('E'\),  C\('R'\),  C\('T'\),  C\
-\('Y'\),  C\('U'\),  C\('I'\),) 336.3756 Tj
+(6154   'q',  'w',  'e',  'r',  't',  'y',  'u',  'i',  // 0x10) 270.8479 Tj
 0 -75.9469 Td
-(6155   C\('O'\),  C\('P'\),  NO,      NO,      '\\r',    NO,   \
-   C\('A'\),  C\('S'\),) 336.3756 Tj
+(6155   'o',  'p',  '[',  ']',  '\\n', NO,   'a',  's',) 231.5313 Tj
 0 -85.4403 Td
-(6156   C\('D'\),  C\('F'\),  C\('G'\),  C\('H'\),  C\('J'\),  C\
-\('K'\),  C\('L'\),  NO,) 318.9016 Tj
+(6156   'd',  'f',  'g',  'h',  'j',  'k',  'l',  ';',  // 0x20) 270.8479 Tj
 0 -94.9336 Td
-(6157   NO,      NO,      NO,      C\('\\\\'\), C\('Z'\),  C\('X\
-'\),  C\('C'\),  C\('V'\),) 336.3756 Tj
+(6157   '\\'', '`',  NO,   '\\\\', 'z',  'x',  'c',  'v',) 231.5313 Tj
 0 -104.427 Td
-(6158   C\('B'\),  C\('N'\),  C\('M'\),  NO,      NO,      C\('/\
-'\),  NO,      NO,) 318.9016 Tj
+(6158   'b',  'n',  'm',  ',',  '.',  '/',  NO,   '*',  // 0x30) 270.8479 Tj
 0 -113.9203 Td
-(6159   [0x9C] '\\r',      // KP_Enter) 157.2665 Tj
+(6159   NO,   ' ',  NO,   NO,   NO,   NO,   NO,   NO,) 227.1628 Tj
 0 -123.4137 Td
-(6160   [0xB5] C\('/'\),    // KP_Div) 148.5295 Tj
+(6160   NO,   NO,   NO,   NO,   NO,   NO,   NO,   '7',  // 0x40) 270.8479 Tj
 0 -132.9071 Td
-(6161   [0xC8] KEY_UP,    [0xD0] KEY_DN,) 170.3721 Tj
+(6161   '8',  '9',  '-',  '4',  '5',  '6',  '+',  '1',) 231.5313 Tj
 0 -142.4004 Td
-(6162   [0xC9] KEY_PGUP,  [0xD1] KEY_PGDN,) 179.1091 Tj
+(6162   '2',  '3',  '0',  '.',  NO,   NO,   NO,   NO,   // 0x50) 270.8479 Tj
 0 -151.8938 Td
-(6163   [0xCB] KEY_LF,    [0xCD] KEY_RT,) 170.3721 Tj
+(6163   [0x9C] '\\n',      // KP_Enter) 157.2665 Tj
 0 -161.3871 Td
-(6164   [0x97] KEY_HOME,  [0xCF] KEY_END,) 174.7406 Tj
+(6164   [0xB5] '/',       // KP_Div) 148.5295 Tj
 0 -170.8805 Td
-(6165   [0xD2] KEY_INS,   [0xD3] KEY_DEL) 170.3721 Tj
+(6165   [0xC8] KEY_UP,    [0xD0] KEY_DN,) 170.3721 Tj
 0 -180.3739 Td
-(6166 };) 30.5796 Tj
+(6166   [0xC9] KEY_PGUP,  [0xD1] KEY_PGDN,) 179.1091 Tj
 0 -189.8672 Td
-(6167 ) 21.8426 Tj
+(6167   [0xCB] KEY_LF,    [0xCD] KEY_RT,) 170.3721 Tj
 0 -199.3606 Td
-(6168 ) 21.8426 Tj
+(6168   [0x97] KEY_HOME,  [0xCF] KEY_END,) 174.7406 Tj
 0 -208.8539 Td
-(6169 ) 21.8426 Tj
+(6169   [0xD2] KEY_INS,   [0xD3] KEY_DEL) 170.3721 Tj
 0 -218.3473 Td
-(6170 ) 21.8426 Tj
+(6170 };) 30.5796 Tj
 0 -227.8407 Td
 (6171 ) 21.8426 Tj
 0 -237.334 Td
-(6172 ) 21.8426 Tj
+(6172 static uchar shiftmap[256] =) 144.161 Tj
 0 -246.8274 Td
-(6173 ) 21.8426 Tj
+(6173 {) 26.2111 Tj
 0 -256.3207 Td
-(6174 ) 21.8426 Tj
+(6174   NO,   033,  '!',  '@',  '#',  '$',  '%',  '^',  // 0x00) 270.8479 Tj
 0 -265.8141 Td
-(6175 ) 21.8426 Tj
+(6175   '&',  '*',  '\(',  '\)',  '_',  '+',  '\\b', '\\t',) 235.8998 Tj
 0 -275.3075 Td
-(6176 ) 21.8426 Tj
+(6176   'Q',  'W',  'E',  'R',  'T',  'Y',  'U',  'I',  // 0x10) 270.8479 Tj
 0 -284.8008 Td
-(6177 ) 21.8426 Tj
+(6177   'O',  'P',  '{',  '}',  '\\n', NO,   'A',  'S',) 231.5313 Tj
 0 -294.2942 Td
-(6178 ) 21.8426 Tj
+(6178   'D',  'F',  'G',  'H',  'J',  'K',  'L',  ':',  // 0x20) 270.8479 Tj
 0 -303.7875 Td
-(6179 ) 21.8426 Tj
+(6179   '"',  '~',  NO,   '|',  'Z',  'X',  'C',  'V',) 231.5313 Tj
 0 -313.2809 Td
-(6180 ) 21.8426 Tj
+(6180   'B',  'N',  'M',  '<',  '>',  '?',  NO,   '*',  // 0x30) 270.8479 Tj
 0 -322.7743 Td
-(6181 ) 21.8426 Tj
+(6181   NO,   ' ',  NO,   NO,   NO,   NO,   NO,   NO,) 227.1628 Tj
 0 -332.2676 Td
-(6182 ) 21.8426 Tj
+(6182   NO,   NO,   NO,   NO,   NO,   NO,   NO,   '7',  // 0x40) 270.8479 Tj
 0 -341.761 Td
-(6183 ) 21.8426 Tj
+(6183   '8',  '9',  '-',  '4',  '5',  '6',  '+',  '1',) 231.5313 Tj
 0 -351.2543 Td
-(6184 ) 21.8426 Tj
+(6184   '2',  '3',  '0',  '.',  NO,   NO,   NO,   NO,   // 0x50) 270.8479 Tj
 0 -360.7477 Td
-(6185 ) 21.8426 Tj
+(6185   [0x9C] '\\n',      // KP_Enter) 157.2665 Tj
 0 -370.2411 Td
-(6186 ) 21.8426 Tj
+(6186   [0xB5] '/',       // KP_Div) 148.5295 Tj
 0 -379.7344 Td
-(6187 ) 21.8426 Tj
+(6187   [0xC8] KEY_UP,    [0xD0] KEY_DN,) 170.3721 Tj
 0 -389.2278 Td
-(6188 ) 21.8426 Tj
+(6188   [0xC9] KEY_PGUP,  [0xD1] KEY_PGDN,) 179.1091 Tj
 0 -398.7211 Td
-(6189 ) 21.8426 Tj
+(6189   [0xCB] KEY_LF,    [0xCD] KEY_RT,) 170.3721 Tj
 0 -408.2145 Td
-(6190 ) 21.8426 Tj
+(6190   [0x97] KEY_HOME,  [0xCF] KEY_END,) 174.7406 Tj
 0 -417.7079 Td
-(6191 ) 21.8426 Tj
+(6191   [0xD2] KEY_INS,   [0xD3] KEY_DEL) 170.3721 Tj
 0 -427.2012 Td
-(6192 ) 21.8426 Tj
+(6192 };) 30.5796 Tj
 0 -436.6946 Td
 (6193 ) 21.8426 Tj
 0 -446.1879 Td
@@ -20501,6 +20646,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -20518,107 +20665,114 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/kbd.c  Page 1) 157.2665 Tj
+(Aug  8 01:04 2009  xv6/kbd.h  Page 3) 157.2665 Tj
 0 -28.4801 Td
-(6200 #include "types.h") 100.4758 Tj
+(6200 static uchar ctlmap[256] =) 135.4239 Tj
 0 -37.9735 Td
-(6201 #include "x86.h") 91.7388 Tj
+(6201 {) 26.2111 Tj
 0 -47.4668 Td
-(6202 #include "defs.h") 96.1073 Tj
+(6202   NO,      NO,      NO,      NO,      NO,      NO,      NO\
+,      NO,) 318.9016 Tj
 0 -56.9602 Td
-(6203 #include "kbd.h") 91.7388 Tj
+(6203   NO,      NO,      NO,      NO,      NO,      NO,      NO\
+,      NO,) 318.9016 Tj
 0 -66.4535 Td
-(6204 ) 21.8426 Tj
+(6204   C\('Q'\),  C\('W'\),  C\('E'\),  C\('R'\),  C\('T'\),  C\
+\('Y'\),  C\('U'\),  C\('I'\),) 336.3756 Tj
 0 -75.9469 Td
-(6205 int) 34.9481 Tj
+(6205   C\('O'\),  C\('P'\),  NO,      NO,      '\\r',    NO,   \
+   C\('A'\),  C\('S'\),) 336.3756 Tj
 0 -85.4403 Td
-(6206 kbd_getc\(void\)) 83.0018 Tj
+(6206   C\('D'\),  C\('F'\),  C\('G'\),  C\('H'\),  C\('J'\),  C\
+\('K'\),  C\('L'\),  NO,) 318.9016 Tj
 0 -94.9336 Td
-(6207 {) 26.2111 Tj
+(6207   NO,      NO,      NO,      C\('\\\\'\), C\('Z'\),  C\('X\
+'\),  C\('C'\),  C\('V'\),) 336.3756 Tj
 0 -104.427 Td
-(6208   static uint shift;) 109.2129 Tj
+(6208   C\('B'\),  C\('N'\),  C\('M'\),  NO,      NO,      C\('/\
+'\),  NO,      NO,) 318.9016 Tj
 0 -113.9203 Td
-(6209   static uchar *charcode[4] = {) 157.2665 Tj
+(6209   [0x9C] '\\r',      // KP_Enter) 157.2665 Tj
 0 -123.4137 Td
-(6210     normalmap, shiftmap, ctlmap, ctlmap) 192.2146 Tj
+(6210   [0xB5] C\('/'\),    // KP_Div) 148.5295 Tj
 0 -132.9071 Td
-(6211   };) 39.3166 Tj
+(6211   [0xC8] KEY_UP,    [0xD0] KEY_DN,) 170.3721 Tj
 0 -142.4004 Td
-(6212   uint st, data, c;) 104.8443 Tj
+(6212   [0xC9] KEY_PGUP,  [0xD1] KEY_PGDN,) 179.1091 Tj
 0 -151.8938 Td
-(6213 ) 21.8426 Tj
+(6213   [0xCB] KEY_LF,    [0xCD] KEY_RT,) 170.3721 Tj
 0 -161.3871 Td
-(6214   st = inb\(KBSTATP\);) 109.2129 Tj
+(6214   [0x97] KEY_HOME,  [0xCF] KEY_END,) 174.7406 Tj
 0 -170.8805 Td
-(6215   if\(\(st & KBS_DIB\) == 0\)) 131.0554 Tj
+(6215   [0xD2] KEY_INS,   [0xD3] KEY_DEL) 170.3721 Tj
 0 -180.3739 Td
-(6216     return -1;) 83.0018 Tj
+(6216 };) 30.5796 Tj
 0 -189.8672 Td
-(6217   data = inb\(KBDATAP\);) 117.9499 Tj
+(6217 ) 21.8426 Tj
 0 -199.3606 Td
 (6218 ) 21.8426 Tj
 0 -208.8539 Td
-(6219   if\(data == 0xE0\){) 104.8443 Tj
+(6219 ) 21.8426 Tj
 0 -218.3473 Td
-(6220     shift |= E0ESC;) 104.8443 Tj
+(6220 ) 21.8426 Tj
 0 -227.8407 Td
-(6221     return 0;) 78.6333 Tj
+(6221 ) 21.8426 Tj
 0 -237.334 Td
-(6222   } else if\(data & 0x80\){) 131.0554 Tj
+(6222 ) 21.8426 Tj
 0 -246.8274 Td
-(6223     // Key released) 104.8443 Tj
+(6223 ) 21.8426 Tj
 0 -256.3207 Td
-(6224     data = \(shift & E0ESC ? data : data & 0x7F\);) 231.5313 Tj
+(6224 ) 21.8426 Tj
 0 -265.8141 Td
-(6225     shift &= ~\(shiftcode[data] | E0ESC\);) 196.5831 Tj
+(6225 ) 21.8426 Tj
 0 -275.3075 Td
-(6226     return 0;) 78.6333 Tj
+(6226 ) 21.8426 Tj
 0 -284.8008 Td
-(6227   } else if\(shift & E0ESC\){) 139.7925 Tj
+(6227 ) 21.8426 Tj
 0 -294.2942 Td
-(6228     // Last character was an E0 escape; or with 0x80) 249.0053 Tj
+(6228 ) 21.8426 Tj
 0 -303.7875 Td
-(6229     data |= 0x80;) 96.1073 Tj
+(6229 ) 21.8426 Tj
 0 -313.2809 Td
-(6230     shift &= ~E0ESC;) 109.2129 Tj
+(6230 ) 21.8426 Tj
 0 -322.7743 Td
-(6231   }) 34.9481 Tj
+(6231 ) 21.8426 Tj
 0 -332.2676 Td
 (6232 ) 21.8426 Tj
 0 -341.761 Td
-(6233   shift |= shiftcode[data];) 139.7925 Tj
+(6233 ) 21.8426 Tj
 0 -351.2543 Td
-(6234   shift ^= togglecode[data];) 144.161 Tj
+(6234 ) 21.8426 Tj
 0 -360.7477 Td
-(6235   c = charcode[shift & \(CTL | SHIFT\)][data];) 214.0572 Tj
+(6235 ) 21.8426 Tj
 0 -370.2411 Td
-(6236   if\(shift & CAPSLOCK\){) 122.3184 Tj
+(6236 ) 21.8426 Tj
 0 -379.7344 Td
-(6237     if\('a' <= c && c <= 'z'\)) 144.161 Tj
+(6237 ) 21.8426 Tj
 0 -389.2278 Td
-(6238       c += 'A' - 'a';) 113.5814 Tj
+(6238 ) 21.8426 Tj
 0 -398.7211 Td
-(6239     else if\('A' <= c && c <= 'Z'\)) 166.0035 Tj
+(6239 ) 21.8426 Tj
 0 -408.2145 Td
-(6240       c += 'a' - 'A';) 113.5814 Tj
+(6240 ) 21.8426 Tj
 0 -417.7079 Td
-(6241   }) 34.9481 Tj
+(6241 ) 21.8426 Tj
 0 -427.2012 Td
-(6242   return c;) 69.8962 Tj
+(6242 ) 21.8426 Tj
 0 -436.6946 Td
-(6243 }) 26.2111 Tj
+(6243 ) 21.8426 Tj
 0 -446.1879 Td
 (6244 ) 21.8426 Tj
 0 -455.6813 Td
-(6245 void) 39.3166 Tj
+(6245 ) 21.8426 Tj
 0 -465.1747 Td
-(6246 kbd_intr\(void\)) 83.0018 Tj
+(6246 ) 21.8426 Tj
 0 -474.668 Td
-(6247 {) 26.2111 Tj
+(6247 ) 21.8426 Tj
 0 -484.1614 Td
-(6248   console_intr\(kbd_getc\);) 131.0554 Tj
+(6248 ) 21.8426 Tj
 0 -493.6547 Td
-(6249 }) 26.2111 Tj
+(6249 ) 21.8426 Tj
 0 -522.1348 Td
 (Sheet 62) 34.9481 Tj
 Q
@@ -20637,109 +20791,107 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/console.c  Page 1) 174.7406 Tj
+(Aug  8 01:04 2009  xv6/kbd.c  Page 1) 157.2665 Tj
 0 -28.4801 Td
-(6250 // Console input and output.) 144.161 Tj
+(6250 #include "types.h") 100.4758 Tj
 0 -37.9735 Td
-(6251 // Input is from the keyboard only.) 174.7406 Tj
+(6251 #include "x86.h") 91.7388 Tj
 0 -47.4668 Td
-(6252 // Output is written to the screen and the printer port.) 266.4794 Tj
+(6252 #include "defs.h") 96.1073 Tj
 0 -56.9602 Td
-(6253 ) 21.8426 Tj
+(6253 #include "kbd.h") 91.7388 Tj
 0 -66.4535 Td
-(6254 #include "types.h") 100.4758 Tj
+(6254 ) 21.8426 Tj
 0 -75.9469 Td
-(6255 #include "defs.h") 96.1073 Tj
+(6255 int) 34.9481 Tj
 0 -85.4403 Td
-(6256 #include "param.h") 100.4758 Tj
+(6256 kbdgetc\(void\)) 78.6333 Tj
 0 -94.9336 Td
-(6257 #include "traps.h") 100.4758 Tj
+(6257 {) 26.2111 Tj
 0 -104.427 Td
-(6258 #include "spinlock.h") 113.5814 Tj
+(6258   static uint shift;) 109.2129 Tj
 0 -113.9203 Td
-(6259 #include "dev.h") 91.7388 Tj
+(6259   static uchar *charcode[4] = {) 157.2665 Tj
 0 -123.4137 Td
-(6260 #include "mmu.h") 91.7388 Tj
+(6260     normalmap, shiftmap, ctlmap, ctlmap) 192.2146 Tj
 0 -132.9071 Td
-(6261 #include "proc.h") 96.1073 Tj
+(6261   };) 39.3166 Tj
 0 -142.4004 Td
-(6262 #include "x86.h") 91.7388 Tj
+(6262   uint st, data, c;) 104.8443 Tj
 0 -151.8938 Td
 (6263 ) 21.8426 Tj
 0 -161.3871 Td
-(6264 #define CRTPORT 0x3d4) 113.5814 Tj
+(6264   st = inb\(KBSTATP\);) 109.2129 Tj
 0 -170.8805 Td
-(6265 #define LPTPORT 0x378) 113.5814 Tj
+(6265   if\(\(st & KBS_DIB\) == 0\)) 131.0554 Tj
 0 -180.3739 Td
-(6266 #define BACKSPACE 0x100) 122.3184 Tj
+(6266     return -1;) 83.0018 Tj
 0 -189.8672 Td
-(6267 ) 21.8426 Tj
+(6267   data = inb\(KBDATAP\);) 117.9499 Tj
 0 -199.3606 Td
-(6268 static ushort *crt = \(ushort*\)0xb8000;  // CGA memory) 253.3738 Tj
+(6268 ) 21.8426 Tj
 0 -208.8539 Td
-(6269 ) 21.8426 Tj
+(6269   if\(data == 0xE0\){) 104.8443 Tj
 0 -218.3473 Td
-(6270 static struct spinlock console_lock;) 179.1091 Tj
+(6270     shift |= E0ESC;) 104.8443 Tj
 0 -227.8407 Td
-(6271 int panicked = 0;) 96.1073 Tj
+(6271     return 0;) 78.6333 Tj
 0 -237.334 Td
-(6272 int use_console_lock = 0;) 131.0554 Tj
+(6272   } else if\(data & 0x80\){) 131.0554 Tj
 0 -246.8274 Td
-(6273 ) 21.8426 Tj
+(6273     // Key released) 104.8443 Tj
 0 -256.3207 Td
-(6274 // Copy console output to parallel port, which you can tel\
-l) 279.5849 Tj
+(6274     data = \(shift & E0ESC ? data : data & 0x7F\);) 231.5313 Tj
 0 -265.8141 Td
-(6275 // .bochsrc to copy to the stdout:) 170.3721 Tj
+(6275     shift &= ~\(shiftcode[data] | E0ESC\);) 196.5831 Tj
 0 -275.3075 Td
-(6276 //   parport1: enabled=1, file="/dev/stdout") 214.0572 Tj
+(6276     return 0;) 78.6333 Tj
 0 -284.8008 Td
-(6277 static void) 69.8962 Tj
+(6277   } else if\(shift & E0ESC\){) 139.7925 Tj
 0 -294.2942 Td
-(6278 lpt_putc\(int c\)) 87.3703 Tj
+(6278     // Last character was an E0 escape; or with 0x80) 249.0053 Tj
 0 -303.7875 Td
-(6279 {) 26.2111 Tj
+(6279     data |= 0x80;) 96.1073 Tj
 0 -313.2809 Td
-(6280   int i;) 56.7907 Tj
+(6280     shift &= ~E0ESC;) 109.2129 Tj
 0 -322.7743 Td
-(6281 ) 21.8426 Tj
+(6281   }) 34.9481 Tj
 0 -332.2676 Td
-(6282   for\(i = 0; !\(inb\(LPTPORT+1\) & 0x80\) && i < 12800; i\
-++\)) 266.4794 Tj
+(6282 ) 21.8426 Tj
 0 -341.761 Td
-(6283     ;) 43.6851 Tj
+(6283   shift |= shiftcode[data];) 139.7925 Tj
 0 -351.2543 Td
-(6284   if\(c == BACKSPACE\)) 109.2129 Tj
+(6284   shift ^= togglecode[data];) 144.161 Tj
 0 -360.7477 Td
-(6285     c = '\\b';) 78.6333 Tj
+(6285   c = charcode[shift & \(CTL | SHIFT\)][data];) 214.0572 Tj
 0 -370.2411 Td
-(6286   outb\(LPTPORT+0, c\);) 113.5814 Tj
+(6286   if\(shift & CAPSLOCK\){) 122.3184 Tj
 0 -379.7344 Td
-(6287   outb\(LPTPORT+2, 0x08|0x04|0x01\);) 170.3721 Tj
+(6287     if\('a' <= c && c <= 'z'\)) 144.161 Tj
 0 -389.2278 Td
-(6288   outb\(LPTPORT+2, 0x08\);) 126.6869 Tj
+(6288       c += 'A' - 'a';) 113.5814 Tj
 0 -398.7211 Td
-(6289 }) 26.2111 Tj
+(6289     else if\('A' <= c && c <= 'Z'\)) 166.0035 Tj
 0 -408.2145 Td
-(6290 ) 21.8426 Tj
+(6290       c += 'a' - 'A';) 113.5814 Tj
 0 -417.7079 Td
-(6291 ) 21.8426 Tj
+(6291   }) 34.9481 Tj
 0 -427.2012 Td
-(6292 ) 21.8426 Tj
+(6292   return c;) 69.8962 Tj
 0 -436.6946 Td
-(6293 ) 21.8426 Tj
+(6293 }) 26.2111 Tj
 0 -446.1879 Td
 (6294 ) 21.8426 Tj
 0 -455.6813 Td
-(6295 ) 21.8426 Tj
+(6295 void) 39.3166 Tj
 0 -465.1747 Td
-(6296 ) 21.8426 Tj
+(6296 kbdintr\(void\)) 78.6333 Tj
 0 -474.668 Td
-(6297 ) 21.8426 Tj
+(6297 {) 26.2111 Tj
 0 -484.1614 Td
-(6298 ) 21.8426 Tj
+(6298   consoleintr\(kbdgetc\);) 122.3184 Tj
 0 -493.6547 Td
-(6299 ) 21.8426 Tj
+(6299 }) 26.2111 Tj
 0 -522.1348 Td
 (Sheet 62) 34.9481 Tj
 Q
@@ -20770,6 +20922,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -20787,100 +20941,103 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/console.c  Page 2) 174.7406 Tj
+(Aug  8 01:04 2009  xv6/console.c  Page 1) 174.7406 Tj
 0 -28.4801 Td
-(6300 static void) 69.8962 Tj
+(6300 // Console input and output.) 144.161 Tj
 0 -37.9735 Td
-(6301 cga_putc\(int c\)) 87.3703 Tj
+(6301 // Input is from the keyboard or serial port.) 218.4257 Tj
 0 -47.4668 Td
-(6302 {) 26.2111 Tj
+(6302 // Output is written to the screen and serial port.) 244.6368 Tj
 0 -56.9602 Td
-(6303   int pos;) 65.5277 Tj
+(6303 ) 21.8426 Tj
 0 -66.4535 Td
-(6304 ) 21.8426 Tj
+(6304 #include "types.h") 100.4758 Tj
 0 -75.9469 Td
-(6305   // Cursor position: col + 80*row.) 174.7406 Tj
+(6305 #include "defs.h") 96.1073 Tj
 0 -85.4403 Td
-(6306   outb\(CRTPORT, 14\);) 109.2129 Tj
+(6306 #include "param.h") 100.4758 Tj
 0 -94.9336 Td
-(6307   pos = inb\(CRTPORT+1\) << 8;) 144.161 Tj
+(6307 #include "traps.h") 100.4758 Tj
 0 -104.427 Td
-(6308   outb\(CRTPORT, 15\);) 109.2129 Tj
+(6308 #include "spinlock.h") 113.5814 Tj
 0 -113.9203 Td
-(6309   pos |= inb\(CRTPORT+1\);) 126.6869 Tj
+(6309 #include "file.h") 96.1073 Tj
 0 -123.4137 Td
-(6310 ) 21.8426 Tj
+(6310 #include "mmu.h") 91.7388 Tj
 0 -132.9071 Td
-(6311   if\(c == '\\n'\)) 87.3703 Tj
+(6311 #include "proc.h") 96.1073 Tj
 0 -142.4004 Td
-(6312     pos += 80 - pos%80;) 122.3184 Tj
+(6312 #include "x86.h") 91.7388 Tj
 0 -151.8938 Td
-(6313   else if\(c == BACKSPACE\){) 135.4239 Tj
+(6313 ) 21.8426 Tj
 0 -161.3871 Td
-(6314     if\(pos > 0\)) 87.3703 Tj
+(6314 static void consputc\(int\);) 135.4239 Tj
 0 -170.8805 Td
-(6315       crt[--pos] = ' ' | 0x0700;) 161.635 Tj
+(6315 ) 21.8426 Tj
 0 -180.3739 Td
-(6316   } else) 56.7907 Tj
+(6316 static int panicked = 0;) 126.6869 Tj
 0 -189.8672 Td
-(6317     crt[pos++] = \(c&0xff\) | 0x0700;  // black on white) 257.7424 Tj
+(6317 ) 21.8426 Tj
 0 -199.3606 Td
-(6318 ) 21.8426 Tj
+(6318 static struct {) 87.3703 Tj
 0 -208.8539 Td
-(6319   if\(\(pos/80\) >= 24\){  // Scroll up.) 179.1091 Tj
+(6319 ) 21.8426 Tj
+-1504.73 TJm
+(struct spinlock lock;) 91.7388 Tj
 0 -218.3473 Td
-(6320     memmove\(crt, crt+80, sizeof\(crt[0]\)*23*80\);) 227.1628 Tj
+(6320 ) 21.8426 Tj
+-1504.73 TJm
+(int locking;) 52.4222 Tj
 0 -227.8407 Td
-(6321     pos -= 80;) 83.0018 Tj
+(6321 } cons;) 52.4222 Tj
 0 -237.334 Td
-(6322     memset\(crt+pos, 0, sizeof\(crt[0]\)*\(24*80 - pos\)\)\
-;) 253.3738 Tj
+(6322 ) 21.8426 Tj
 0 -246.8274 Td
-(6323   }) 34.9481 Tj
+(6323 static void) 69.8962 Tj
 0 -256.3207 Td
-(6324 ) 21.8426 Tj
+(6324 printint\(int xx, int base, int sgn\)) 174.7406 Tj
 0 -265.8141 Td
-(6325   outb\(CRTPORT, 14\);) 109.2129 Tj
+(6325 {) 26.2111 Tj
 0 -275.3075 Td
-(6326   outb\(CRTPORT+1, pos>>8\);) 135.4239 Tj
+(6326   static char digits[] = "0123456789abcdef";) 214.0572 Tj
 0 -284.8008 Td
-(6327   outb\(CRTPORT, 15\);) 109.2129 Tj
+(6327   char buf[16];) 87.3703 Tj
 0 -294.2942 Td
-(6328   outb\(CRTPORT+1, pos\);) 122.3184 Tj
+(6328   int i = 0, neg = 0;) 113.5814 Tj
 0 -303.7875 Td
-(6329   crt[pos] = ' ' | 0x0700;) 135.4239 Tj
+(6329   uint x;) 61.1592 Tj
 0 -313.2809 Td
-(6330 }) 26.2111 Tj
+(6330 ) 21.8426 Tj
 0 -322.7743 Td
-(6331 ) 21.8426 Tj
+(6331   if\(sgn && xx < 0\){) 109.2129 Tj
 0 -332.2676 Td
-(6332 void) 39.3166 Tj
+(6332     neg = 1;) 74.2647 Tj
 0 -341.761 Td
-(6333 cons_putc\(int c\)) 91.7388 Tj
+(6333     x = -xx;) 74.2647 Tj
 0 -351.2543 Td
-(6334 {) 26.2111 Tj
+(6334   } else) 56.7907 Tj
 0 -360.7477 Td
-(6335   if\(panicked\){) 87.3703 Tj
+(6335     x = xx;) 69.8962 Tj
 0 -370.2411 Td
-(6336     cli\(\);) 65.5277 Tj
+(6336 ) 21.8426 Tj
 0 -379.7344 Td
-(6337     for\(;;\)) 69.8962 Tj
+(6337   do{) 43.6851 Tj
 0 -389.2278 Td
-(6338       ;) 52.4222 Tj
+(6338     buf[i++] = digits[x % base];) 161.635 Tj
 0 -398.7211 Td
-(6339   }) 34.9481 Tj
+(6339   }while\(\(x /= base\) != 0\);) 139.7925 Tj
 0 -408.2145 Td
-(6340 ) 21.8426 Tj
+(6340   if\(neg\)) 61.1592 Tj
 0 -417.7079 Td
-(6341   lpt_putc\(c\);) 83.0018 Tj
+(6341     buf[i++] = '-';) 104.8443 Tj
 0 -427.2012 Td
-(6342   cga_putc\(c\);) 83.0018 Tj
+(6342 ) 21.8426 Tj
 0 -436.6946 Td
-(6343 }) 26.2111 Tj
+(6343   while\(--i >= 0\)) 96.1073 Tj
 0 -446.1879 Td
-(6344 ) 21.8426 Tj
+(6344     consputc\(buf[i]\);) 113.5814 Tj
 0 -455.6813 Td
-(6345 ) 21.8426 Tj
+(6345 }) 26.2111 Tj
 0 -465.1747 Td
 (6346 ) 21.8426 Tj
 0 -474.668 Td
@@ -20907,107 +21064,107 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/console.c  Page 3) 174.7406 Tj
+(Aug  8 01:04 2009  xv6/console.c  Page 2) 174.7406 Tj
 0 -28.4801 Td
-(6350 void) 39.3166 Tj
+(6350 // Print to the console. only understands %d, %x, %p, %s.) 270.8479 Tj
 0 -37.9735 Td
-(6351 printint\(int xx, int base, int sgn\)) 174.7406 Tj
+(6351 void) 39.3166 Tj
 0 -47.4668 Td
-(6352 {) 26.2111 Tj
+(6352 cprintf\(char *fmt, ...\)) 122.3184 Tj
 0 -56.9602 Td
-(6353   static char digits[] = "0123456789ABCDEF";) 214.0572 Tj
+(6353 {) 26.2111 Tj
 0 -66.4535 Td
-(6354   char buf[16];) 87.3703 Tj
+(6354   int i, c, state, locking;) 139.7925 Tj
 0 -75.9469 Td
-(6355   int i = 0, neg = 0;) 113.5814 Tj
+(6355   uint *argp;) 78.6333 Tj
 0 -85.4403 Td
-(6356   uint x;) 61.1592 Tj
+(6356   char *s;) 65.5277 Tj
 0 -94.9336 Td
 (6357 ) 21.8426 Tj
 0 -104.427 Td
-(6358   if\(sgn && xx < 0\){) 109.2129 Tj
+(6358   locking = cons.locking;) 131.0554 Tj
 0 -113.9203 Td
-(6359     neg = 1;) 74.2647 Tj
+(6359   if\(locking\)) 78.6333 Tj
 0 -123.4137 Td
-(6360     x = 0 - xx;) 87.3703 Tj
+(6360     acquire\(&cons.lock\);) 126.6869 Tj
 0 -132.9071 Td
-(6361   } else {) 65.5277 Tj
+(6361 ) 21.8426 Tj
 0 -142.4004 Td
-(6362     x = xx;) 69.8962 Tj
+(6362   argp = \(uint*\)\(void*\)&fmt + 1;) 161.635 Tj
 0 -151.8938 Td
-(6363   }) 34.9481 Tj
+(6363   state = 0;) 74.2647 Tj
 0 -161.3871 Td
-(6364 ) 21.8426 Tj
+(6364   for\(i = 0; \(c = fmt[i] & 0xff\) != 0; i++\){) 214.0572 Tj
 0 -170.8805 Td
-(6365   do{) 43.6851 Tj
+(6365     if\(c != '%'\){) 96.1073 Tj
 0 -180.3739 Td
-(6366     buf[i++] = digits[x % base];) 161.635 Tj
+(6366       consputc\(c\);) 100.4758 Tj
 0 -189.8672 Td
-(6367   }while\(\(x /= base\) != 0\);) 139.7925 Tj
+(6367       continue;) 87.3703 Tj
 0 -199.3606 Td
-(6368   if\(neg\)) 61.1592 Tj
+(6368     }) 43.6851 Tj
 0 -208.8539 Td
-(6369     buf[i++] = '-';) 104.8443 Tj
+(6369     c = fmt[++i] & 0xff;) 126.6869 Tj
 0 -218.3473 Td
-(6370 ) 21.8426 Tj
+(6370     if\(c == 0\)) 83.0018 Tj
 0 -227.8407 Td
-(6371   while\(--i >= 0\)) 96.1073 Tj
+(6371       break;) 74.2647 Tj
 0 -237.334 Td
-(6372     cons_putc\(buf[i]\);) 117.9499 Tj
+(6372     switch\(c\){) 83.0018 Tj
 0 -246.8274 Td
-(6373 }) 26.2111 Tj
+(6373     case 'd':) 78.6333 Tj
 0 -256.3207 Td
-(6374 ) 21.8426 Tj
+(6374       printint\(*argp++, 10, 1\);) 157.2665 Tj
 0 -265.8141 Td
-(6375 // Print to the console. only understands %d, %x, %p, %s.) 270.8479 Tj
+(6375       break;) 74.2647 Tj
 0 -275.3075 Td
-(6376 void) 39.3166 Tj
+(6376     case 'x':) 78.6333 Tj
 0 -284.8008 Td
-(6377 cprintf\(char *fmt, ...\)) 122.3184 Tj
+(6377     case 'p':) 78.6333 Tj
 0 -294.2942 Td
-(6378 {) 26.2111 Tj
+(6378       printint\(*argp++, 16, 0\);) 157.2665 Tj
 0 -303.7875 Td
-(6379   int i, c, state, locking;) 139.7925 Tj
+(6379       break;) 74.2647 Tj
 0 -313.2809 Td
-(6380   uint *argp;) 78.6333 Tj
+(6380     case 's':) 78.6333 Tj
 0 -322.7743 Td
-(6381   char *s;) 65.5277 Tj
+(6381       if\(\(s = \(char*\)*argp++\) == 0\)) 174.7406 Tj
 0 -332.2676 Td
-(6382 ) 21.8426 Tj
+(6382         s = "\(null\)";) 113.5814 Tj
 0 -341.761 Td
-(6383   locking = use_console_lock;) 148.5295 Tj
+(6383       for\(; *s; s++\)) 109.2129 Tj
 0 -351.2543 Td
-(6384   if\(locking\)) 78.6333 Tj
+(6384         consputc\(*s\);) 113.5814 Tj
 0 -360.7477 Td
-(6385     acquire\(&console_lock\);) 139.7925 Tj
+(6385       break;) 74.2647 Tj
 0 -370.2411 Td
-(6386 ) 21.8426 Tj
+(6386     case '%':) 78.6333 Tj
 0 -379.7344 Td
-(6387   argp = \(uint*\)\(void*\)&fmt + 1;) 161.635 Tj
+(6387       consputc\('%'\);) 109.2129 Tj
 0 -389.2278 Td
-(6388   state = 0;) 74.2647 Tj
+(6388       break;) 74.2647 Tj
 0 -398.7211 Td
-(6389   for\(i = 0; fmt[i]; i++\){) 135.4239 Tj
+(6389     default:) 74.2647 Tj
 0 -408.2145 Td
-(6390     c = fmt[i] & 0xff;) 117.9499 Tj
+(6390       // Print unknown % sequence to draw attention.) 249.0053 Tj
 0 -417.7079 Td
-(6391     switch\(state\){) 100.4758 Tj
+(6391       consputc\('%'\);) 109.2129 Tj
 0 -427.2012 Td
-(6392     case 0:) 69.8962 Tj
+(6392       consputc\(c\);) 100.4758 Tj
 0 -436.6946 Td
-(6393       if\(c == '%'\)) 100.4758 Tj
+(6393       break;) 74.2647 Tj
 0 -446.1879 Td
-(6394         state = '%';) 109.2129 Tj
+(6394     }) 43.6851 Tj
 0 -455.6813 Td
-(6395       else) 65.5277 Tj
+(6395   }) 34.9481 Tj
 0 -465.1747 Td
-(6396         cons_putc\(c\);) 113.5814 Tj
+(6396 ) 21.8426 Tj
 0 -474.668 Td
-(6397       break;) 74.2647 Tj
+(6397   if\(locking\)) 78.6333 Tj
 0 -484.1614 Td
-(6398 ) 21.8426 Tj
+(6398     release\(&cons.lock\);) 126.6869 Tj
 0 -493.6547 Td
-(6399 ) 21.8426 Tj
+(6399 }) 26.2111 Tj
 0 -522.1348 Td
 (Sheet 63) 34.9481 Tj
 Q
@@ -21038,6 +21195,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -21055,103 +21214,103 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/console.c  Page 4) 174.7406 Tj
+(Aug  8 01:04 2009  xv6/console.c  Page 3) 174.7406 Tj
 0 -28.4801 Td
-(6400     case '%':) 78.6333 Tj
+(6400 void) 39.3166 Tj
 0 -37.9735 Td
-(6401       switch\(c\){) 91.7388 Tj
+(6401 panic\(char *s\)) 83.0018 Tj
 0 -47.4668 Td
-(6402       case 'd':) 87.3703 Tj
+(6402 {) 26.2111 Tj
 0 -56.9602 Td
-(6403         printint\(*argp++, 10, 1\);) 166.0035 Tj
+(6403   int i;) 56.7907 Tj
 0 -66.4535 Td
-(6404         break;) 83.0018 Tj
+(6404   uint pcs[10];) 87.3703 Tj
 0 -75.9469 Td
-(6405       case 'x':) 87.3703 Tj
+(6405 ) 21.8426 Tj
 0 -85.4403 Td
-(6406       case 'p':) 87.3703 Tj
+(6406   cli\(\);) 56.7907 Tj
 0 -94.9336 Td
-(6407         printint\(*argp++, 16, 0\);) 166.0035 Tj
+(6407   cons.locking = 0;) 104.8443 Tj
 0 -104.427 Td
-(6408         break;) 83.0018 Tj
+(6408   cprintf\("cpu%d: panic: ", cpu\(\)\);) 174.7406 Tj
 0 -113.9203 Td
-(6409       case 's':) 87.3703 Tj
+(6409   cprintf\(s\);) 78.6333 Tj
 0 -123.4137 Td
-(6410         s = \(char*\)*argp++;) 139.7925 Tj
+(6410   cprintf\("\\n"\);) 91.7388 Tj
 0 -132.9071 Td
-(6411         if\(s == 0\)) 100.4758 Tj
+(6411   getcallerpcs\(&s, pcs\);) 126.6869 Tj
 0 -142.4004 Td
-(6412           s = "\(null\)";) 122.3184 Tj
+(6412   for\(i=0; i<10; i++\)) 113.5814 Tj
 0 -151.8938 Td
-(6413         for\(; *s; s++\)) 117.9499 Tj
+(6413     cprintf\(" %p", pcs[i]\);) 139.7925 Tj
 0 -161.3871 Td
-(6414           cons_putc\(*s\);) 126.6869 Tj
+(6414   panicked = 1; // freeze other CPU) 174.7406 Tj
 0 -170.8805 Td
-(6415         break;) 83.0018 Tj
+(6415   for\(;;\)) 61.1592 Tj
 0 -180.3739 Td
-(6416       case '%':) 87.3703 Tj
+(6416     ;) 43.6851 Tj
 0 -189.8672 Td
-(6417         cons_putc\('%'\);) 122.3184 Tj
+(6417 }) 26.2111 Tj
 0 -199.3606 Td
-(6418         break;) 83.0018 Tj
+(6418 ) 21.8426 Tj
 0 -208.8539 Td
-(6419       default:) 83.0018 Tj
+(6419 ) 21.8426 Tj
 0 -218.3473 Td
-(6420         // Print unknown % sequence to draw attention.) 257.7424 Tj
+(6420 ) 21.8426 Tj
 0 -227.8407 Td
-(6421         cons_putc\('%'\);) 122.3184 Tj
+(6421 ) 21.8426 Tj
 0 -237.334 Td
-(6422         cons_putc\(c\);) 113.5814 Tj
+(6422 ) 21.8426 Tj
 0 -246.8274 Td
-(6423         break;) 83.0018 Tj
+(6423 ) 21.8426 Tj
 0 -256.3207 Td
-(6424       }) 52.4222 Tj
+(6424 ) 21.8426 Tj
 0 -265.8141 Td
-(6425       state = 0;) 91.7388 Tj
+(6425 ) 21.8426 Tj
 0 -275.3075 Td
-(6426       break;) 74.2647 Tj
+(6426 ) 21.8426 Tj
 0 -284.8008 Td
-(6427     }) 43.6851 Tj
+(6427 ) 21.8426 Tj
 0 -294.2942 Td
-(6428   }) 34.9481 Tj
+(6428 ) 21.8426 Tj
 0 -303.7875 Td
 (6429 ) 21.8426 Tj
 0 -313.2809 Td
-(6430   if\(locking\)) 78.6333 Tj
+(6430 ) 21.8426 Tj
 0 -322.7743 Td
-(6431     release\(&console_lock\);) 139.7925 Tj
+(6431 ) 21.8426 Tj
 0 -332.2676 Td
-(6432 }) 26.2111 Tj
+(6432 ) 21.8426 Tj
 0 -341.761 Td
 (6433 ) 21.8426 Tj
 0 -351.2543 Td
-(6434 int) 34.9481 Tj
+(6434 ) 21.8426 Tj
 0 -360.7477 Td
-(6435 console_write\(struct inode *ip, char *buf, int n\)) 235.8998 Tj
+(6435 ) 21.8426 Tj
 0 -370.2411 Td
-(6436 {) 26.2111 Tj
+(6436 ) 21.8426 Tj
 0 -379.7344 Td
-(6437   int i;) 56.7907 Tj
+(6437 ) 21.8426 Tj
 0 -389.2278 Td
 (6438 ) 21.8426 Tj
 0 -398.7211 Td
-(6439   iunlock\(ip\);) 83.0018 Tj
+(6439 ) 21.8426 Tj
 0 -408.2145 Td
-(6440   acquire\(&console_lock\);) 131.0554 Tj
+(6440 ) 21.8426 Tj
 0 -417.7079 Td
-(6441   for\(i = 0; i < n; i++\)) 126.6869 Tj
+(6441 ) 21.8426 Tj
 0 -427.2012 Td
-(6442     cons_putc\(buf[i] & 0xff\);) 148.5295 Tj
+(6442 ) 21.8426 Tj
 0 -436.6946 Td
-(6443   release\(&console_lock\);) 131.0554 Tj
+(6443 ) 21.8426 Tj
 0 -446.1879 Td
-(6444   ilock\(ip\);) 74.2647 Tj
+(6444 ) 21.8426 Tj
 0 -455.6813 Td
 (6445 ) 21.8426 Tj
 0 -465.1747 Td
-(6446   return n;) 69.8962 Tj
+(6446 ) 21.8426 Tj
 0 -474.668 Td
-(6447 }) 26.2111 Tj
+(6447 ) 21.8426 Tj
 0 -484.1614 Td
 (6448 ) 21.8426 Tj
 0 -493.6547 Td
@@ -21174,107 +21333,106 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/console.c  Page 5) 174.7406 Tj
+(Aug  8 01:04 2009  xv6/console.c  Page 4) 174.7406 Tj
 0 -28.4801 Td
-(6450 #define INPUT_BUF 128) 113.5814 Tj
+(6450 #define BACKSPACE 0x100) 122.3184 Tj
 0 -37.9735 Td
-(6451 struct {) 56.7907 Tj
+(6451 #define CRTPORT 0x3d4) 113.5814 Tj
 0 -47.4668 Td
-(6452   struct spinlock lock;) 122.3184 Tj
+(6452 static ushort *crt = \(ushort*\)0xb8000;  // CGA memory) 253.3738 Tj
 0 -56.9602 Td
-(6453   char buf[INPUT_BUF];) 117.9499 Tj
+(6453 ) 21.8426 Tj
 0 -66.4535 Td
-(6454   uint r;  // Read index) 126.6869 Tj
+(6454 static void) 69.8962 Tj
 0 -75.9469 Td
-(6455   uint w;  // Write index) 131.0554 Tj
+(6455 cgaputc\(int c\)) 83.0018 Tj
 0 -85.4403 Td
-(6456   uint e;  // Edit index) 126.6869 Tj
+(6456 {) 26.2111 Tj
 0 -94.9336 Td
-(6457 } input;) 56.7907 Tj
+(6457   int pos;) 65.5277 Tj
 0 -104.427 Td
 (6458 ) 21.8426 Tj
 0 -113.9203 Td
-(6459 #define C\(x\)  \(\(x\)-'@'\)  // Control-x) 183.4776 Tj
+(6459   // Cursor position: col + 80*row.) 174.7406 Tj
 0 -123.4137 Td
-(6460 ) 21.8426 Tj
+(6460   outb\(CRTPORT, 14\);) 109.2129 Tj
 0 -132.9071 Td
-(6461 void) 39.3166 Tj
+(6461   pos = inb\(CRTPORT+1\) << 8;) 144.161 Tj
 0 -142.4004 Td
-(6462 console_intr\(int \(*getc\)\(void\)\)) 157.2665 Tj
+(6462   outb\(CRTPORT, 15\);) 109.2129 Tj
 0 -151.8938 Td
-(6463 {) 26.2111 Tj
+(6463   pos |= inb\(CRTPORT+1\);) 126.6869 Tj
 0 -161.3871 Td
-(6464   int c;) 56.7907 Tj
+(6464 ) 21.8426 Tj
 0 -170.8805 Td
-(6465 ) 21.8426 Tj
+(6465   if\(c == '\\n'\)) 87.3703 Tj
 0 -180.3739 Td
-(6466   acquire\(&input.lock\);) 122.3184 Tj
+(6466     pos += 80 - pos%80;) 122.3184 Tj
 0 -189.8672 Td
-(6467   while\(\(c = getc\(\)\) >= 0\){) 139.7925 Tj
+(6467   else if\(c == BACKSPACE\){) 135.4239 Tj
 0 -199.3606 Td
-(6468     switch\(c\){) 83.0018 Tj
+(6468     if\(pos > 0\)) 87.3703 Tj
 0 -208.8539 Td
-(6469     case C\('P'\):  // Process listing.) 183.4776 Tj
+(6469       crt[--pos] = ' ' | 0x0700;) 161.635 Tj
 0 -218.3473 Td
-(6470       procdump\(\);) 96.1073 Tj
+(6470   } else) 56.7907 Tj
 0 -227.8407 Td
-(6471       break;) 74.2647 Tj
+(6471     crt[pos++] = \(c&0xff\) | 0x0700;  // black on white) 257.7424 Tj
 0 -237.334 Td
-(6472     case C\('U'\):  // Kill line.) 157.2665 Tj
+(6472 ) 21.8426 Tj
 0 -246.8274 Td
-(6473       while\(input.e != input.w &&) 166.0035 Tj
+(6473   if\(\(pos/80\) >= 24\){  // Scroll up.) 179.1091 Tj
 0 -256.3207 Td
-(6474             input.buf[\(input.e-1\) % INPUT_BUF] != '\\n'\)\
-{) 266.4794 Tj
+(6474     memmove\(crt, crt+80, sizeof\(crt[0]\)*23*80\);) 227.1628 Tj
 0 -265.8141 Td
-(6475         input.e--;) 100.4758 Tj
+(6475     pos -= 80;) 83.0018 Tj
 0 -275.3075 Td
-(6476         cons_putc\(BACKSPACE\);) 148.5295 Tj
+(6476     memset\(crt+pos, 0, sizeof\(crt[0]\)*\(24*80 - pos\)\)\
+;) 253.3738 Tj
 0 -284.8008 Td
-(6477       }) 52.4222 Tj
+(6477   }) 34.9481 Tj
 0 -294.2942 Td
-(6478       break;) 74.2647 Tj
+(6478 ) 21.8426 Tj
 0 -303.7875 Td
-(6479     case C\('H'\):  // Backspace) 152.898 Tj
+(6479   outb\(CRTPORT, 14\);) 109.2129 Tj
 0 -313.2809 Td
-(6480       if\(input.e != input.w\){) 148.5295 Tj
+(6480   outb\(CRTPORT+1, pos>>8\);) 135.4239 Tj
 0 -322.7743 Td
-(6481         input.e--;) 100.4758 Tj
+(6481   outb\(CRTPORT, 15\);) 109.2129 Tj
 0 -332.2676 Td
-(6482         cons_putc\(BACKSPACE\);) 148.5295 Tj
+(6482   outb\(CRTPORT+1, pos\);) 122.3184 Tj
 0 -341.761 Td
-(6483       }) 52.4222 Tj
+(6483   crt[pos] = ' ' | 0x0700;) 135.4239 Tj
 0 -351.2543 Td
-(6484       break;) 74.2647 Tj
+(6484 }) 26.2111 Tj
 0 -360.7477 Td
-(6485     default:) 74.2647 Tj
+(6485 ) 21.8426 Tj
 0 -370.2411 Td
-(6486       if\(c != 0 && input.e-input.r < INPUT_BUF\){) 231.5313 Tj
+(6486 void) 39.3166 Tj
 0 -379.7344 Td
-(6487         input.buf[input.e++ % INPUT_BUF] = c;) 218.4257 Tj
+(6487 consputc\(int c\)) 87.3703 Tj
 0 -389.2278 Td
-(6488         cons_putc\(c\);) 113.5814 Tj
+(6488 {) 26.2111 Tj
 0 -398.7211 Td
-(6489         if\(c == '\\n' || c == C\('D'\) || input.e == inpu\
-t.r+INPUT_BUF\){) 323.2701 Tj
+(6489   if\(panicked\){) 87.3703 Tj
 0 -408.2145 Td
-(6490           input.w = input.e;) 144.161 Tj
+(6490     cli\(\);) 65.5277 Tj
 0 -417.7079 Td
-(6491           wakeup\(&input.r\);) 139.7925 Tj
+(6491     for\(;;\)) 69.8962 Tj
 0 -427.2012 Td
-(6492         }) 61.1592 Tj
+(6492       ;) 52.4222 Tj
 0 -436.6946 Td
-(6493       }) 52.4222 Tj
+(6493   }) 34.9481 Tj
 0 -446.1879 Td
-(6494       break;) 74.2647 Tj
+(6494 ) 21.8426 Tj
 0 -455.6813 Td
-(6495     }) 43.6851 Tj
+(6495   uartputc\(c\);) 83.0018 Tj
 0 -465.1747 Td
-(6496   }) 34.9481 Tj
+(6496   cgaputc\(c\);) 78.6333 Tj
 0 -474.668 Td
-(6497   release\(&input.lock\);) 122.3184 Tj
+(6497 }) 26.2111 Tj
 0 -484.1614 Td
-(6498 }) 26.2111 Tj
+(6498 ) 21.8426 Tj
 0 -493.6547 Td
 (6499 ) 21.8426 Tj
 0 -522.1348 Td
@@ -21307,6 +21465,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -21324,105 +21484,107 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/console.c  Page 6) 174.7406 Tj
+(Aug  8 01:04 2009  xv6/console.c  Page 5) 174.7406 Tj
 0 -28.4801 Td
-(6500 int) 34.9481 Tj
+(6500 #define INPUT_BUF 128) 113.5814 Tj
 0 -37.9735 Td
-(6501 console_read\(struct inode *ip, char *dst, int n\)) 231.5313 Tj
+(6501 struct {) 56.7907 Tj
 0 -47.4668 Td
-(6502 {) 26.2111 Tj
+(6502   struct spinlock lock;) 122.3184 Tj
 0 -56.9602 Td
-(6503   uint target;) 83.0018 Tj
+(6503   char buf[INPUT_BUF];) 117.9499 Tj
 0 -66.4535 Td
-(6504   int c;) 56.7907 Tj
+(6504   uint r;  // Read index) 126.6869 Tj
 0 -75.9469 Td
-(6505 ) 21.8426 Tj
+(6505   uint w;  // Write index) 131.0554 Tj
 0 -85.4403 Td
-(6506   iunlock\(ip\);) 83.0018 Tj
+(6506   uint e;  // Edit index) 126.6869 Tj
 0 -94.9336 Td
-(6507   target = n;) 78.6333 Tj
+(6507 } input;) 56.7907 Tj
 0 -104.427 Td
-(6508   acquire\(&input.lock\);) 122.3184 Tj
+(6508 ) 21.8426 Tj
 0 -113.9203 Td
-(6509   while\(n > 0\){) 87.3703 Tj
+(6509 #define C\(x\)  \(\(x\)-'@'\)  // Control-x) 183.4776 Tj
 0 -123.4137 Td
-(6510     while\(input.r == input.w\){) 152.898 Tj
+(6510 ) 21.8426 Tj
 0 -132.9071 Td
-(6511       if\(cp->killed\){) 113.5814 Tj
+(6511 void) 39.3166 Tj
 0 -142.4004 Td
-(6512         release\(&input.lock\);) 148.5295 Tj
+(6512 consoleintr\(int \(*getc\)\(void\)\)) 152.898 Tj
 0 -151.8938 Td
-(6513         ilock\(ip\);) 100.4758 Tj
+(6513 {) 26.2111 Tj
 0 -161.3871 Td
-(6514         return -1;) 100.4758 Tj
+(6514   int c;) 56.7907 Tj
 0 -170.8805 Td
-(6515       }) 52.4222 Tj
+(6515 ) 21.8426 Tj
 0 -180.3739 Td
-(6516       sleep\(&input.r, &input.lock\);) 174.7406 Tj
+(6516   acquire\(&input.lock\);) 122.3184 Tj
 0 -189.8672 Td
-(6517     }) 43.6851 Tj
+(6517   while\(\(c = getc\(\)\) >= 0\){) 139.7925 Tj
 0 -199.3606 Td
-(6518     c = input.buf[input.r++ % INPUT_BUF];) 200.9517 Tj
+(6518     switch\(c\){) 83.0018 Tj
 0 -208.8539 Td
-(6519     if\(c == C\('D'\)\){  // EOF) 144.161 Tj
+(6519     case C\('P'\):  // Process listing.) 183.4776 Tj
 0 -218.3473 Td
-(6520       if\(n < target\){) 113.5814 Tj
+(6520       procdump\(\);) 96.1073 Tj
 0 -227.8407 Td
-(6521         // Save ^D for next time, to make sure) 222.7942 Tj
+(6521       break;) 74.2647 Tj
 0 -237.334 Td
-(6522         // caller gets a 0-byte result.) 192.2146 Tj
+(6522     case C\('U'\):  // Kill line.) 157.2665 Tj
 0 -246.8274 Td
-(6523         input.r--;) 100.4758 Tj
+(6523       while\(input.e != input.w &&) 166.0035 Tj
 0 -256.3207 Td
-(6524       }) 52.4222 Tj
+(6524             input.buf[\(input.e-1\) % INPUT_BUF] != '\\n'\)\
+{) 266.4794 Tj
 0 -265.8141 Td
-(6525       break;) 74.2647 Tj
+(6525         input.e--;) 100.4758 Tj
 0 -275.3075 Td
-(6526     }) 43.6851 Tj
+(6526         consputc\(BACKSPACE\);) 144.161 Tj
 0 -284.8008 Td
-(6527     *dst++ = c;) 87.3703 Tj
+(6527       }) 52.4222 Tj
 0 -294.2942 Td
-(6528     --n;) 56.7907 Tj
+(6528       break;) 74.2647 Tj
 0 -303.7875 Td
-(6529     if\(c == '\\n'\)) 96.1073 Tj
+(6529     case C\('H'\):  // Backspace) 152.898 Tj
 0 -313.2809 Td
-(6530       break;) 74.2647 Tj
+(6530       if\(input.e != input.w\){) 148.5295 Tj
 0 -322.7743 Td
-(6531   }) 34.9481 Tj
+(6531         input.e--;) 100.4758 Tj
 0 -332.2676 Td
-(6532   release\(&input.lock\);) 122.3184 Tj
+(6532         consputc\(BACKSPACE\);) 144.161 Tj
 0 -341.761 Td
-(6533   ilock\(ip\);) 74.2647 Tj
+(6533       }) 52.4222 Tj
 0 -351.2543 Td
-(6534 ) 21.8426 Tj
+(6534       break;) 74.2647 Tj
 0 -360.7477 Td
-(6535   return target - n;) 109.2129 Tj
+(6535     default:) 74.2647 Tj
 0 -370.2411 Td
-(6536 }) 26.2111 Tj
+(6536       if\(c != 0 && input.e-input.r < INPUT_BUF\){) 231.5313 Tj
 0 -379.7344 Td
-(6537 ) 21.8426 Tj
+(6537         input.buf[input.e++ % INPUT_BUF] = c;) 218.4257 Tj
 0 -389.2278 Td
-(6538 ) 21.8426 Tj
+(6538         consputc\(c\);) 109.2129 Tj
 0 -398.7211 Td
-(6539 ) 21.8426 Tj
+(6539         if\(c == '\\n' || c == C\('D'\) || input.e == inpu\
+t.r+INPUT_BUF\){) 323.2701 Tj
 0 -408.2145 Td
-(6540 ) 21.8426 Tj
+(6540           input.w = input.e;) 144.161 Tj
 0 -417.7079 Td
-(6541 ) 21.8426 Tj
+(6541           wakeup\(&input.r\);) 139.7925 Tj
 0 -427.2012 Td
-(6542 ) 21.8426 Tj
+(6542         }) 61.1592 Tj
 0 -436.6946 Td
-(6543 ) 21.8426 Tj
+(6543       }) 52.4222 Tj
 0 -446.1879 Td
-(6544 ) 21.8426 Tj
+(6544       break;) 74.2647 Tj
 0 -455.6813 Td
-(6545 ) 21.8426 Tj
+(6545     }) 43.6851 Tj
 0 -465.1747 Td
-(6546 ) 21.8426 Tj
+(6546   }) 34.9481 Tj
 0 -474.668 Td
-(6547 ) 21.8426 Tj
+(6547   release\(&input.lock\);) 122.3184 Tj
 0 -484.1614 Td
-(6548 ) 21.8426 Tj
+(6548 }) 26.2111 Tj
 0 -493.6547 Td
 (6549 ) 21.8426 Tj
 0 -522.1348 Td
@@ -21443,81 +21605,81 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/console.c  Page 7) 174.7406 Tj
+(Aug  8 01:04 2009  xv6/console.c  Page 6) 174.7406 Tj
 0 -28.4801 Td
-(6550 void) 39.3166 Tj
+(6550 int) 34.9481 Tj
 0 -37.9735 Td
-(6551 console_init\(void\)) 100.4758 Tj
+(6551 consoleread\(struct inode *ip, char *dst, int n\)) 227.1628 Tj
 0 -47.4668 Td
 (6552 {) 26.2111 Tj
 0 -56.9602 Td
-(6553   initlock\(&console_lock, "console"\);) 183.4776 Tj
+(6553   uint target;) 83.0018 Tj
 0 -66.4535 Td
-(6554   initlock\(&input.lock, "console input"\);) 200.9517 Tj
+(6554   int c;) 56.7907 Tj
 0 -75.9469 Td
 (6555 ) 21.8426 Tj
 0 -85.4403 Td
-(6556   devsw[CONSOLE].write = console_write;) 192.2146 Tj
+(6556   iunlock\(ip\);) 83.0018 Tj
 0 -94.9336 Td
-(6557   devsw[CONSOLE].read = console_read;) 183.4776 Tj
+(6557   target = n;) 78.6333 Tj
 0 -104.427 Td
-(6558   use_console_lock = 1;) 122.3184 Tj
+(6558   acquire\(&input.lock\);) 122.3184 Tj
 0 -113.9203 Td
-(6559 ) 21.8426 Tj
+(6559   while\(n > 0\){) 87.3703 Tj
 0 -123.4137 Td
-(6560   pic_enable\(IRQ_KBD\);) 117.9499 Tj
+(6560     while\(input.r == input.w\){) 152.898 Tj
 0 -132.9071 Td
-(6561   ioapic_enable\(IRQ_KBD, 0\);) 144.161 Tj
+(6561       if\(cp->killed\){) 113.5814 Tj
 0 -142.4004 Td
-(6562 }) 26.2111 Tj
+(6562         release\(&input.lock\);) 148.5295 Tj
 0 -151.8938 Td
-(6563 ) 21.8426 Tj
+(6563         ilock\(ip\);) 100.4758 Tj
 0 -161.3871 Td
-(6564 void) 39.3166 Tj
+(6564         return -1;) 100.4758 Tj
 0 -170.8805 Td
-(6565 panic\(char *s\)) 83.0018 Tj
+(6565       }) 52.4222 Tj
 0 -180.3739 Td
-(6566 {) 26.2111 Tj
+(6566       sleep\(&input.r, &input.lock\);) 174.7406 Tj
 0 -189.8672 Td
-(6567   int i;) 56.7907 Tj
+(6567     }) 43.6851 Tj
 0 -199.3606 Td
-(6568   uint pcs[10];) 87.3703 Tj
+(6568     c = input.buf[input.r++ % INPUT_BUF];) 200.9517 Tj
 0 -208.8539 Td
-(6569 ) 21.8426 Tj
+(6569     if\(c == C\('D'\)\){  // EOF) 144.161 Tj
 0 -218.3473 Td
-(6570   __asm __volatile\("cli"\);) 135.4239 Tj
+(6570       if\(n < target\){) 113.5814 Tj
 0 -227.8407 Td
-(6571   use_console_lock = 0;) 122.3184 Tj
+(6571         // Save ^D for next time, to make sure) 222.7942 Tj
 0 -237.334 Td
-(6572   cprintf\("cpu%d: panic: ", cpu\(\)\);) 174.7406 Tj
+(6572         // caller gets a 0-byte result.) 192.2146 Tj
 0 -246.8274 Td
-(6573   cprintf\(s\);) 78.6333 Tj
+(6573         input.r--;) 100.4758 Tj
 0 -256.3207 Td
-(6574   cprintf\("\\n"\);) 91.7388 Tj
+(6574       }) 52.4222 Tj
 0 -265.8141 Td
-(6575   getcallerpcs\(&s, pcs\);) 126.6869 Tj
+(6575       break;) 74.2647 Tj
 0 -275.3075 Td
-(6576   for\(i=0; i<10; i++\)) 113.5814 Tj
+(6576     }) 43.6851 Tj
 0 -284.8008 Td
-(6577     cprintf\(" %p", pcs[i]\);) 139.7925 Tj
+(6577     *dst++ = c;) 87.3703 Tj
 0 -294.2942 Td
-(6578   panicked = 1; // freeze other CPU) 174.7406 Tj
+(6578     --n;) 56.7907 Tj
 0 -303.7875 Td
-(6579   for\(;;\)) 61.1592 Tj
+(6579     if\(c == '\\n'\)) 96.1073 Tj
 0 -313.2809 Td
-(6580     ;) 43.6851 Tj
+(6580       break;) 74.2647 Tj
 0 -322.7743 Td
-(6581 }) 26.2111 Tj
+(6581   }) 34.9481 Tj
 0 -332.2676 Td
-(6582 ) 21.8426 Tj
+(6582   release\(&input.lock\);) 122.3184 Tj
 0 -341.761 Td
-(6583 ) 21.8426 Tj
+(6583   ilock\(ip\);) 74.2647 Tj
 0 -351.2543 Td
 (6584 ) 21.8426 Tj
 0 -360.7477 Td
-(6585 ) 21.8426 Tj
+(6585   return target - n;) 109.2129 Tj
 0 -370.2411 Td
-(6586 ) 21.8426 Tj
+(6586 }) 26.2111 Tj
 0 -379.7344 Td
 (6587 ) 21.8426 Tj
 0 -389.2278 Td
@@ -21574,6 +21736,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -21591,75 +21755,71 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/timer.c  Page 1) 166.0035 Tj
+(Aug  8 01:04 2009  xv6/console.c  Page 7) 174.7406 Tj
 0 -28.4801 Td
-(6600 // Intel 8253/8254/82C54 Programmable Interval Timer \(PIT\
-\).) 279.5849 Tj
+(6600 int) 34.9481 Tj
 0 -37.9735 Td
-(6601 // Only used on uniprocessors;) 152.898 Tj
+(6601 consolewrite\(struct inode *ip, char *buf, int n\)) 231.5313 Tj
 0 -47.4668 Td
-(6602 // SMP machines use the local APIC timer.) 200.9517 Tj
+(6602 {) 26.2111 Tj
 0 -56.9602 Td
-(6603 ) 21.8426 Tj
+(6603   int i;) 56.7907 Tj
 0 -66.4535 Td
-(6604 #include "types.h") 100.4758 Tj
+(6604 ) 21.8426 Tj
 0 -75.9469 Td
-(6605 #include "defs.h") 96.1073 Tj
+(6605   iunlock\(ip\);) 83.0018 Tj
 0 -85.4403 Td
-(6606 #include "traps.h") 100.4758 Tj
+(6606   acquire\(&cons.lock\);) 117.9499 Tj
 0 -94.9336 Td
-(6607 #include "x86.h") 91.7388 Tj
+(6607   for\(i = 0; i < n; i++\)) 126.6869 Tj
 0 -104.427 Td
-(6608 ) 21.8426 Tj
+(6608     consputc\(buf[i] & 0xff\);) 144.161 Tj
 0 -113.9203 Td
-(6609 #define IO_TIMER1       0x040           // 8253 Timer #1) 266.4794 Tj
+(6609   release\(&cons.lock\);) 117.9499 Tj
 0 -123.4137 Td
-(6610 ) 21.8426 Tj
+(6610   ilock\(ip\);) 74.2647 Tj
 0 -132.9071 Td
-(6611 // Frequency of all three count-down timers;) 214.0572 Tj
+(6611 ) 21.8426 Tj
 0 -142.4004 Td
-(6612 // \(TIMER_FREQ/freq\) is the appropriate count) 218.4257 Tj
+(6612   return n;) 69.8962 Tj
 0 -151.8938 Td
-(6613 // to generate a frequency of freq Hz.) 187.8461 Tj
+(6613 }) 26.2111 Tj
 0 -161.3871 Td
 (6614 ) 21.8426 Tj
 0 -170.8805 Td
-(6615 #define TIMER_FREQ      1193182) 157.2665 Tj
+(6615 void) 39.3166 Tj
 0 -180.3739 Td
-(6616 #define TIMER_DIV\(x\)    \(\(TIMER_FREQ+\(x\)/2\)/\(x\)\)) 231.5313 Tj
+(6616 consoleinit\(void\)) 96.1073 Tj
 0 -189.8672 Td
-(6617 ) 21.8426 Tj
+(6617 {) 26.2111 Tj
 0 -199.3606 Td
-(6618 #define TIMER_MODE      \(IO_TIMER1 + 3\) // timer mode po\
-rt) 275.2164 Tj
+(6618   initlock\(&cons.lock, "console"\);) 170.3721 Tj
 0 -208.8539 Td
-(6619 #define TIMER_SEL0      0x00    // select counter 0) 244.6368 Tj
+(6619   initlock\(&input.lock, "input"\);) 166.0035 Tj
 0 -218.3473 Td
-(6620 #define TIMER_RATEGEN   0x04    // mode 2, rate generator) 270.8479 Tj
+(6620 ) 21.8426 Tj
 0 -227.8407 Td
-(6621 #define TIMER_16BIT     0x30    // r/w counter 16 bits, LS\
-B first) 305.796 Tj
+(6621   devsw[CONSOLE].write = consolewrite;) 187.8461 Tj
 0 -237.334 Td
-(6622 ) 21.8426 Tj
+(6622   devsw[CONSOLE].read = consoleread;) 179.1091 Tj
 0 -246.8274 Td
-(6623 void) 39.3166 Tj
+(6623   cons.locking = 1;) 104.8443 Tj
 0 -256.3207 Td
-(6624 timer_init\(void\)) 91.7388 Tj
+(6624 ) 21.8426 Tj
 0 -265.8141 Td
-(6625 {) 26.2111 Tj
+(6625   picenable\(IRQ_KBD\);) 113.5814 Tj
 0 -275.3075 Td
-(6626   // Interrupt 100 times/sec.) 148.5295 Tj
+(6626   ioapicenable\(IRQ_KBD, 0\);) 139.7925 Tj
 0 -284.8008 Td
-(6627   outb\(TIMER_MODE, TIMER_SEL0 | TIMER_RATEGEN | TIMER_16B\
-IT\);) 288.322 Tj
+(6627 }) 26.2111 Tj
 0 -294.2942 Td
-(6628   outb\(IO_TIMER1, TIMER_DIV\(100\) % 256\);) 196.5831 Tj
+(6628 ) 21.8426 Tj
 0 -303.7875 Td
-(6629   outb\(IO_TIMER1, TIMER_DIV\(100\) / 256\);) 196.5831 Tj
+(6629 ) 21.8426 Tj
 0 -313.2809 Td
-(6630   pic_enable\(IRQ_TIMER\);) 126.6869 Tj
+(6630 ) 21.8426 Tj
 0 -322.7743 Td
-(6631 }) 26.2111 Tj
+(6631 ) 21.8426 Tj
 0 -332.2676 Td
 (6632 ) 21.8426 Tj
 0 -341.761 Td
@@ -21714,71 +21874,75 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/timer.c  Page 2) 166.0035 Tj
+(Aug  8 01:04 2009  xv6/timer.c  Page 1) 166.0035 Tj
 0 -28.4801 Td
-(6650 // Blank page) 78.6333 Tj
+(6650 // Intel 8253/8254/82C54 Programmable Interval Timer \(PIT\
+\).) 279.5849 Tj
 0 -37.9735 Td
-(6651 ) 21.8426 Tj
+(6651 // Only used on uniprocessors;) 152.898 Tj
 0 -47.4668 Td
-(6652 ) 21.8426 Tj
+(6652 // SMP machines use the local APIC timer.) 200.9517 Tj
 0 -56.9602 Td
 (6653 ) 21.8426 Tj
 0 -66.4535 Td
-(6654 ) 21.8426 Tj
+(6654 #include "types.h") 100.4758 Tj
 0 -75.9469 Td
-(6655 ) 21.8426 Tj
+(6655 #include "defs.h") 96.1073 Tj
 0 -85.4403 Td
-(6656 ) 21.8426 Tj
+(6656 #include "traps.h") 100.4758 Tj
 0 -94.9336 Td
-(6657 ) 21.8426 Tj
+(6657 #include "x86.h") 91.7388 Tj
 0 -104.427 Td
 (6658 ) 21.8426 Tj
 0 -113.9203 Td
-(6659 ) 21.8426 Tj
+(6659 #define IO_TIMER1       0x040           // 8253 Timer #1) 266.4794 Tj
 0 -123.4137 Td
 (6660 ) 21.8426 Tj
 0 -132.9071 Td
-(6661 ) 21.8426 Tj
+(6661 // Frequency of all three count-down timers;) 214.0572 Tj
 0 -142.4004 Td
-(6662 ) 21.8426 Tj
+(6662 // \(TIMER_FREQ/freq\) is the appropriate count) 218.4257 Tj
 0 -151.8938 Td
-(6663 ) 21.8426 Tj
+(6663 // to generate a frequency of freq Hz.) 187.8461 Tj
 0 -161.3871 Td
 (6664 ) 21.8426 Tj
 0 -170.8805 Td
-(6665 ) 21.8426 Tj
+(6665 #define TIMER_FREQ      1193182) 157.2665 Tj
 0 -180.3739 Td
-(6666 ) 21.8426 Tj
+(6666 #define TIMER_DIV\(x\)    \(\(TIMER_FREQ+\(x\)/2\)/\(x\)\)) 231.5313 Tj
 0 -189.8672 Td
 (6667 ) 21.8426 Tj
 0 -199.3606 Td
-(6668 ) 21.8426 Tj
+(6668 #define TIMER_MODE      \(IO_TIMER1 + 3\) // timer mode po\
+rt) 275.2164 Tj
 0 -208.8539 Td
-(6669 ) 21.8426 Tj
+(6669 #define TIMER_SEL0      0x00    // select counter 0) 244.6368 Tj
 0 -218.3473 Td
-(6670 ) 21.8426 Tj
+(6670 #define TIMER_RATEGEN   0x04    // mode 2, rate generator) 270.8479 Tj
 0 -227.8407 Td
-(6671 ) 21.8426 Tj
+(6671 #define TIMER_16BIT     0x30    // r/w counter 16 bits, LS\
+B first) 305.796 Tj
 0 -237.334 Td
 (6672 ) 21.8426 Tj
 0 -246.8274 Td
-(6673 ) 21.8426 Tj
+(6673 void) 39.3166 Tj
 0 -256.3207 Td
-(6674 ) 21.8426 Tj
+(6674 timerinit\(void\)) 87.3703 Tj
 0 -265.8141 Td
-(6675 ) 21.8426 Tj
+(6675 {) 26.2111 Tj
 0 -275.3075 Td
-(6676 ) 21.8426 Tj
+(6676   // Interrupt 100 times/sec.) 148.5295 Tj
 0 -284.8008 Td
-(6677 ) 21.8426 Tj
+(6677   outb\(TIMER_MODE, TIMER_SEL0 | TIMER_RATEGEN | TIMER_16B\
+IT\);) 288.322 Tj
 0 -294.2942 Td
-(6678 ) 21.8426 Tj
+(6678   outb\(IO_TIMER1, TIMER_DIV\(100\) % 256\);) 196.5831 Tj
 0 -303.7875 Td
-(6679 ) 21.8426 Tj
+(6679   outb\(IO_TIMER1, TIMER_DIV\(100\) / 256\);) 196.5831 Tj
 0 -313.2809 Td
-(6680 ) 21.8426 Tj
+(6680   picenable\(IRQ_TIMER\);) 122.3184 Tj
 0 -322.7743 Td
-(6681 ) 21.8426 Tj
+(6681 }) 26.2111 Tj
 0 -332.2676 Td
 (6682 ) 21.8426 Tj
 0 -341.761 Td
@@ -21845,6 +22009,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -21862,7 +22028,7 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/initcode.S  Page 1) 179.1091 Tj
+(Aug  8 01:04 2009  xv6/initcode.S  Page 1) 179.1091 Tj
 0 -28.4801 Td
 (6700 # Initial process execs /init.) 152.898 Tj
 0 -37.9735 Td
@@ -21884,7 +22050,7 @@ q
 0 -113.9203 Td
 (6709   pushl $init) 78.6333 Tj
 0 -123.4137 Td
-(6710   pushl $0) 65.5277 Tj
+(6710   pushl $0  // where caller pc would be) 192.2146 Tj
 0 -132.9071 Td
 (6711   movl $SYS_exec, %eax) 117.9499 Tj
 0 -142.4004 Td
@@ -21981,81 +22147,81 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/init.c  Page 1) 161.635 Tj
+(Aug  8 01:04 2009  xv6/usys.S  Page 1) 161.635 Tj
 0 -28.4801 Td
-(6750 // init: The initial user-level program) 192.2146 Tj
+(6750 #include "syscall.h") 109.2129 Tj
 0 -37.9735 Td
-(6751 ) 21.8426 Tj
+(6751 #include "traps.h") 100.4758 Tj
 0 -47.4668 Td
-(6752 #include "types.h") 100.4758 Tj
+(6752 ) 21.8426 Tj
 0 -56.9602 Td
-(6753 #include "stat.h") 96.1073 Tj
+(6753 #define SYSCALL\(name\) \\) 122.3184 Tj
 0 -66.4535 Td
-(6754 #include "user.h") 96.1073 Tj
+(6754   .globl name; \\) 91.7388 Tj
 0 -75.9469 Td
-(6755 #include "fcntl.h") 100.4758 Tj
+(6755   name: \\) 61.1592 Tj
 0 -85.4403 Td
-(6756 ) 21.8426 Tj
+(6756     movl $SYS_ ## name, %eax; \\) 157.2665 Tj
 0 -94.9336 Td
-(6757 char *sh_args[] = { "sh", 0 };) 152.898 Tj
+(6757     int $T_SYSCALL; \\) 113.5814 Tj
 0 -104.427 Td
-(6758 ) 21.8426 Tj
+(6758     ret) 52.4222 Tj
 0 -113.9203 Td
-(6759 int) 34.9481 Tj
+(6759 ) 21.8426 Tj
 0 -123.4137 Td
-(6760 main\(void\)) 65.5277 Tj
+(6760 SYSCALL\(fork\)) 78.6333 Tj
 0 -132.9071 Td
-(6761 {) 26.2111 Tj
+(6761 SYSCALL\(exit\)) 78.6333 Tj
 0 -142.4004 Td
-(6762   int pid, wpid;) 91.7388 Tj
+(6762 SYSCALL\(wait\)) 78.6333 Tj
 0 -151.8938 Td
-(6763 ) 21.8426 Tj
+(6763 SYSCALL\(pipe\)) 78.6333 Tj
 0 -161.3871 Td
-(6764   if\(open\("console", O_RDWR\) < 0\){) 170.3721 Tj
+(6764 SYSCALL\(read\)) 78.6333 Tj
 0 -170.8805 Td
-(6765     mknod\("console", 1, 1\);) 139.7925 Tj
+(6765 SYSCALL\(write\)) 83.0018 Tj
 0 -180.3739 Td
-(6766     open\("console", O_RDWR\);) 144.161 Tj
+(6766 SYSCALL\(close\)) 83.0018 Tj
 0 -189.8672 Td
-(6767   }) 34.9481 Tj
+(6767 SYSCALL\(kill\)) 78.6333 Tj
 0 -199.3606 Td
-(6768   dup\(0\);  // stdout) 109.2129 Tj
+(6768 SYSCALL\(exec\)) 78.6333 Tj
 0 -208.8539 Td
-(6769   dup\(0\);  // stderr) 109.2129 Tj
+(6769 SYSCALL\(open\)) 78.6333 Tj
 0 -218.3473 Td
-(6770 ) 21.8426 Tj
+(6770 SYSCALL\(mknod\)) 83.0018 Tj
 0 -227.8407 Td
-(6771   for\(;;\){) 65.5277 Tj
+(6771 SYSCALL\(unlink\)) 87.3703 Tj
 0 -237.334 Td
-(6772     printf\(1, "init: starting sh\\n"\);) 183.4776 Tj
+(6772 SYSCALL\(fstat\)) 83.0018 Tj
 0 -246.8274 Td
-(6773     pid = fork\(\);) 96.1073 Tj
+(6773 SYSCALL\(link\)) 78.6333 Tj
 0 -256.3207 Td
-(6774     if\(pid < 0\){) 91.7388 Tj
+(6774 SYSCALL\(mkdir\)) 83.0018 Tj
 0 -265.8141 Td
-(6775       printf\(1, "init: fork failed\\n"\);) 192.2146 Tj
+(6775 SYSCALL\(chdir\)) 83.0018 Tj
 0 -275.3075 Td
-(6776       exit\(\);) 78.6333 Tj
+(6776 SYSCALL\(dup\)) 74.2647 Tj
 0 -284.8008 Td
-(6777     }) 43.6851 Tj
+(6777 SYSCALL\(getpid\)) 87.3703 Tj
 0 -294.2942 Td
-(6778     if\(pid == 0\){) 96.1073 Tj
+(6778 SYSCALL\(sbrk\)) 78.6333 Tj
 0 -303.7875 Td
-(6779       exec\("sh", sh_args\);) 135.4239 Tj
+(6779 SYSCALL\(sleep\)) 83.0018 Tj
 0 -313.2809 Td
-(6780       printf\(1, "init: exec sh failed\\n"\);) 205.3202 Tj
+(6780 ) 21.8426 Tj
 0 -322.7743 Td
-(6781       exit\(\);) 78.6333 Tj
+(6781 ) 21.8426 Tj
 0 -332.2676 Td
-(6782     }) 43.6851 Tj
+(6782 ) 21.8426 Tj
 0 -341.761 Td
-(6783     while\(\(wpid=wait\(\)\) >= 0 && wpid != pid\)) 214.0572 Tj
+(6783 ) 21.8426 Tj
 0 -351.2543 Td
-(6784       printf\(1, "zombie!\\n"\);) 148.5295 Tj
+(6784 ) 21.8426 Tj
 0 -360.7477 Td
-(6785   }) 34.9481 Tj
+(6785 ) 21.8426 Tj
 0 -370.2411 Td
-(6786 }) 26.2111 Tj
+(6786 ) 21.8426 Tj
 0 -379.7344 Td
 (6787 ) 21.8426 Tj
 0 -389.2278 Td
@@ -22112,6 +22278,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -22129,81 +22297,81 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/usys.S  Page 1) 161.635 Tj
+(Aug  8 01:04 2009  xv6/init.c  Page 1) 161.635 Tj
 0 -28.4801 Td
-(6800 #include "syscall.h") 109.2129 Tj
+(6800 // init: The initial user-level program) 192.2146 Tj
 0 -37.9735 Td
-(6801 #include "traps.h") 100.4758 Tj
+(6801 ) 21.8426 Tj
 0 -47.4668 Td
-(6802 ) 21.8426 Tj
+(6802 #include "types.h") 100.4758 Tj
 0 -56.9602 Td
-(6803 #define STUB\(name\) \\) 109.2129 Tj
+(6803 #include "stat.h") 96.1073 Tj
 0 -66.4535 Td
-(6804   .globl name; \\) 91.7388 Tj
+(6804 #include "user.h") 96.1073 Tj
 0 -75.9469 Td
-(6805   name: \\) 61.1592 Tj
+(6805 #include "fcntl.h") 100.4758 Tj
 0 -85.4403 Td
-(6806     movl $SYS_ ## name, %eax; \\) 157.2665 Tj
+(6806 ) 21.8426 Tj
 0 -94.9336 Td
-(6807     int $T_SYSCALL; \\) 113.5814 Tj
+(6807 char *argv[] = { "sh", 0 };) 139.7925 Tj
 0 -104.427 Td
-(6808     ret) 52.4222 Tj
+(6808 ) 21.8426 Tj
 0 -113.9203 Td
-(6809 ) 21.8426 Tj
+(6809 int) 34.9481 Tj
 0 -123.4137 Td
-(6810 STUB\(fork\)) 65.5277 Tj
+(6810 main\(void\)) 65.5277 Tj
 0 -132.9071 Td
-(6811 STUB\(exit\)) 65.5277 Tj
+(6811 {) 26.2111 Tj
 0 -142.4004 Td
-(6812 STUB\(wait\)) 65.5277 Tj
+(6812   int pid, wpid;) 91.7388 Tj
 0 -151.8938 Td
-(6813 STUB\(pipe\)) 65.5277 Tj
+(6813 ) 21.8426 Tj
 0 -161.3871 Td
-(6814 STUB\(read\)) 65.5277 Tj
+(6814   if\(open\("console", O_RDWR\) < 0\){) 170.3721 Tj
 0 -170.8805 Td
-(6815 STUB\(write\)) 69.8962 Tj
+(6815     mknod\("console", 1, 1\);) 139.7925 Tj
 0 -180.3739 Td
-(6816 STUB\(close\)) 69.8962 Tj
+(6816     open\("console", O_RDWR\);) 144.161 Tj
 0 -189.8672 Td
-(6817 STUB\(kill\)) 65.5277 Tj
+(6817   }) 34.9481 Tj
 0 -199.3606 Td
-(6818 STUB\(exec\)) 65.5277 Tj
+(6818   dup\(0\);  // stdout) 109.2129 Tj
 0 -208.8539 Td
-(6819 STUB\(open\)) 65.5277 Tj
+(6819   dup\(0\);  // stderr) 109.2129 Tj
 0 -218.3473 Td
-(6820 STUB\(mknod\)) 69.8962 Tj
+(6820 ) 21.8426 Tj
 0 -227.8407 Td
-(6821 STUB\(unlink\)) 74.2647 Tj
+(6821   for\(;;\){) 65.5277 Tj
 0 -237.334 Td
-(6822 STUB\(fstat\)) 69.8962 Tj
+(6822     printf\(1, "init: starting sh\\n"\);) 183.4776 Tj
 0 -246.8274 Td
-(6823 STUB\(link\)) 65.5277 Tj
+(6823     pid = fork\(\);) 96.1073 Tj
 0 -256.3207 Td
-(6824 STUB\(mkdir\)) 69.8962 Tj
+(6824     if\(pid < 0\){) 91.7388 Tj
 0 -265.8141 Td
-(6825 STUB\(chdir\)) 69.8962 Tj
+(6825       printf\(1, "init: fork failed\\n"\);) 192.2146 Tj
 0 -275.3075 Td
-(6826 STUB\(dup\)) 61.1592 Tj
+(6826       exit\(\);) 78.6333 Tj
 0 -284.8008 Td
-(6827 STUB\(getpid\)) 74.2647 Tj
+(6827     }) 43.6851 Tj
 0 -294.2942 Td
-(6828 STUB\(sbrk\)) 65.5277 Tj
+(6828     if\(pid == 0\){) 96.1073 Tj
 0 -303.7875 Td
-(6829 STUB\(sleep\)) 69.8962 Tj
+(6829       exec\("sh", argv\);) 122.3184 Tj
 0 -313.2809 Td
-(6830 ) 21.8426 Tj
+(6830       printf\(1, "init: exec sh failed\\n"\);) 205.3202 Tj
 0 -322.7743 Td
-(6831 ) 21.8426 Tj
+(6831       exit\(\);) 78.6333 Tj
 0 -332.2676 Td
-(6832 ) 21.8426 Tj
+(6832     }) 43.6851 Tj
 0 -341.761 Td
-(6833 ) 21.8426 Tj
+(6833     while\(\(wpid=wait\(\)\) >= 0 && wpid != pid\)) 214.0572 Tj
 0 -351.2543 Td
-(6834 ) 21.8426 Tj
+(6834       printf\(1, "zombie!\\n"\);) 148.5295 Tj
 0 -360.7477 Td
-(6835 ) 21.8426 Tj
+(6835   }) 34.9481 Tj
 0 -370.2411 Td
-(6836 ) 21.8426 Tj
+(6836 }) 26.2111 Tj
 0 -379.7344 Td
 (6837 ) 21.8426 Tj
 0 -389.2278 Td
@@ -22248,7 +22416,7 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/sh.c  Page 1) 152.898 Tj
+(Aug  8 01:04 2009  xv6/sh.c  Page 1) 152.898 Tj
 0 -28.4801 Td
 (6850 // Shell.) 61.1592 Tj
 0 -37.9735 Td
@@ -22379,6 +22547,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -22396,7 +22566,7 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/sh.c  Page 2) 152.898 Tj
+(Aug  8 01:04 2009  xv6/sh.c  Page 2) 152.898 Tj
 0 -28.4801 Td
 (6900 int fork1\(void\);  // Fork but panics on failure.) 231.5313 Tj
 0 -37.9735 Td
@@ -22515,7 +22685,7 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/sh.c  Page 3) 152.898 Tj
+(Aug  8 01:04 2009  xv6/sh.c  Page 3) 152.898 Tj
 0 -28.4801 Td
 (6950   case PIPE:) 74.2647 Tj
 0 -37.9735 Td
@@ -22646,6 +22816,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -22663,7 +22835,7 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/sh.c  Page 4) 152.898 Tj
+(Aug  8 01:04 2009  xv6/sh.c  Page 4) 152.898 Tj
 0 -28.4801 Td
 (7000 int) 34.9481 Tj
 0 -37.9735 Td
@@ -22783,7 +22955,7 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/sh.c  Page 5) 152.898 Tj
+(Aug  8 01:04 2009  xv6/sh.c  Page 5) 152.898 Tj
 0 -28.4801 Td
 (7050 // Constructors) 87.3703 Tj
 0 -37.9735 Td
@@ -22915,6 +23087,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -22932,7 +23106,7 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/sh.c  Page 6) 152.898 Tj
+(Aug  8 01:04 2009  xv6/sh.c  Page 6) 152.898 Tj
 0 -28.4801 Td
 (7100 struct cmd*) 69.8962 Tj
 0 -37.9735 Td
@@ -23051,7 +23225,7 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/sh.c  Page 7) 152.898 Tj
+(Aug  8 01:04 2009  xv6/sh.c  Page 7) 152.898 Tj
 0 -28.4801 Td
 (7150 // Parsing) 65.5277 Tj
 0 -37.9735 Td
@@ -23183,6 +23357,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -23200,7 +23376,7 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/sh.c  Page 8) 152.898 Tj
+(Aug  8 01:04 2009  xv6/sh.c  Page 8) 152.898 Tj
 0 -28.4801 Td
 (7200 int) 34.9481 Tj
 0 -37.9735 Td
@@ -23319,7 +23495,7 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/sh.c  Page 9) 152.898 Tj
+(Aug  8 01:04 2009  xv6/sh.c  Page 9) 152.898 Tj
 0 -28.4801 Td
 (7250 struct cmd*) 69.8962 Tj
 0 -37.9735 Td
@@ -23450,6 +23626,8 @@ pdfStartPage
 false op
 false OP
 {} settransfer
+0 0 612 792 re
+W
 q
 q
 [0.1 0 0 0.1 0 0] cm
@@ -23467,7 +23645,7 @@ q
 [0 -0.9679 1 0 564.72 738.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/sh.c  Page 10) 157.2665 Tj
+(Aug  8 01:04 2009  xv6/sh.c  Page 10) 157.2665 Tj
 0 -28.4801 Td
 (7300 struct cmd*) 69.8962 Tj
 0 -37.9735 Td
@@ -23586,7 +23764,7 @@ q
 [0 -0.9679 1 0 564.72 392.865] Tm
 0 0 Td
 /F8_0 8.7022 Tf
-(Sep  3 10:05 2008  xv6/sh.c  Page 11) 157.2665 Tj
+(Aug  8 01:04 2009  xv6/sh.c  Page 11) 157.2665 Tj
 0 -28.4801 Td
 (7350 // NUL-terminate all the counted strings.) 200.9517 Tj
 0 -37.9735 Td