Browse Source

Plan 9 from Bell Labs 2003-06-24

David du Colombier 21 years ago
parent
commit
24988d81ad
6 changed files with 887 additions and 2685 deletions
  1. 71 0
      386/bin/fossil/conf
  2. 71 0
      386/bin/venti/conf
  3. 370 367
      dist/replica/plan9.db
  4. 371 0
      dist/replica/plan9.log
  5. 4 2
      sys/man/3/usb
  6. 0 2316
      sys/src/9/port/devsdp.c

+ 71 - 0
386/bin/fossil/conf

@@ -0,0 +1,71 @@
+#!/bin/rc
+# THIS FILE IS AUTOMATICALLY GENERATED
+# FROM /sys/src/cmd/fossil/conf.rc.  DO NOT EDIT.
+
+
+# the fossil configuration is stored at the 127kB offset in the disk
+# and extends for at most 1 kB.
+
+rfork e
+fn usage {
+	echo 'usage: fossil/conf [-w] /dev/sdC0/fossil' >[1=2]
+	exit usage
+}
+
+wflag=no
+while(! ~ $#* 0 && ~ $1 -* && ! ~ $1 --){
+	switch($1){
+	case -w
+		wflag=yes
+	case *
+		usage
+	}
+	shift
+}
+if(~ $1 --)
+	shift
+
+if(~ $wflag no && ! ~ $#* 1)
+	usage
+if(~ $wflag yes && ! ~ $#* 1 2)
+	usage
+
+disk=$1
+if(! test -f $disk){
+	echo 'unknown disk' $1 >[1=2]
+	exit nodisk
+}
+
+fn sigexit {
+	rm -f /tmp/fossilconf.$pid
+}
+
+if(~ $wflag yes){
+	{echo fossil config; cat $2} >/tmp/fossilconf.$pid || exit oops
+	if(! test -s /tmp/fossilconf.$pid){
+		echo 'config is empty; will not install' >[1=2]
+		exit emptyconfig
+	}
+	if(test `{ls -l /tmp/fossilconf.$pid | awk '{print $6}'} -gt 1024){
+		echo 'config is too long; max is a little less than a kilobyte' >[1=2]
+		exit toolong
+	}
+	dd -quiet 1 -bs 1024 -count 1 -if $disk -iseek 127 \
+		>/tmp/_fossilconf.old || exit backup
+	dd -quiet 1 -count 2 </dev/zero >>/tmp/fossilconf.$pid || exit dd
+	dd -quiet 1 -bs 1024 -count 1 -if /tmp/fossilconf.$pid \
+		-trunc 0 -of $disk -oseek 127 || exit dd2
+	exit 0
+}
+
+dd -quiet 1 -bs 1024 -count 1 -if $disk -iseek 127 |
+	aux/zerotrunc >/tmp/fossilconf.$pid
+
+if(! cmp -s <{sed 1q /tmp/fossilconf.$pid} <{echo fossil config}){
+	echo 'config has bad header' >[1=2]
+	exit badconfig
+}
+
+sed 1d /tmp/fossilconf.$pid
+exit 0
+

+ 71 - 0
386/bin/venti/conf

@@ -0,0 +1,71 @@
+#!/bin/rc
+# THIS FILE IS AUTOMATICALLY GENERATED
+# FROM /sys/src/cmd/fossil/conf.rc.  DO NOT EDIT.
+
+
+# the venti configuration is stored at the 248kB offset in the first index
+# partition and extends for at most 8 kB.
+
+rfork e
+fn usage {
+	echo 'usage: venti/conf [-w] /dev/sdC0/v.arenas' >[1=2]
+	exit usage
+}
+
+wflag=no
+while(! ~ $#* 0 && ~ $1 -* && ! ~ $1 --){
+	switch($1){
+	case -w
+		wflag=yes
+	case *
+		usage
+	}
+	shift
+}
+if(~ $1 --)
+	shift
+
+if(~ $wflag no && ! ~ $#* 1)
+	usage
+if(~ $wflag yes && ! ~ $#* 1 2)
+	usage
+
+disk=$1
+if(! test -f $disk){
+	echo 'unknown disk' $1 >[1=2]
+	exit nodisk
+}
+
+fn sigexit {
+	#rm -f /tmp/venticonf.$pid
+}
+
+if(~ $wflag yes){
+	{echo venti config; cat $2} >/tmp/venticonf.$pid || exit oops
+	if(! test -s /tmp/venticonf.$pid){
+		echo 'config is empty; will not install' >[1=2]
+		exit emptyconfig
+	}
+	if(test `{ls -l /tmp/venticonf.$pid | awk '{print $6}'} -gt 8192){
+		echo 'config is too long; max is a little less than eight kilobytes' >[1=2]
+		exit toolong
+	}
+	dd -quiet 1 -bs 1024 -count 8 -if $disk -iseek 248 \
+		>/tmp/_venticonf.old || exit backup
+	dd -quiet 1 -count 2 </dev/zero >> /tmp/venticonf.$pid || exit dd
+	dd -quiet 1 -bs 1024 -count 8 -if /tmp/venticonf.$pid \
+		-of $disk -trunc 0 -oseek 248 || exit dd2
+	exit 0
+}
+
+dd -quiet 1 -bs 1024 -count 8 -if $disk -iseek 248 |
+	aux/zerotrunc >/tmp/venticonf.$pid
+
+if(! cmp <{sed 1q /tmp/venticonf.$pid} <{echo venti config}){
+	echo 'config has bad header' >[1=2]
+	exit badconfig
+}
+
+sed 1d /tmp/venticonf.$pid
+exit 0
+

+ 370 - 367
dist/replica/plan9.db

@@ -9,25 +9,25 @@
 386/9loaddebug - 775 sys sys 1045538097 259969
 386/9loadlite - 775 sys sys 1032215927 124616
 386/9loadlitedebug - 775 sys sys 1045538098 183665
-386/9pc - 775 sys sys 1053200962 1798859
+386/9pc - 775 sys sys 1056364430 1822650
 386/9pc.gz - 664 sys sys 1040006338 614078
-386/9pccpu - 775 sys sys 1053200967 1463526
+386/9pccpu - 775 sys sys 1056364435 1474348
 386/9pccpu.gz - 664 sys sys 1040006341 504177
-386/9pcdisk - 775 sys sys 1053200974 2004660
+386/9pcdisk - 775 sys sys 1056364442 2049101
 386/9pcdisk.gz - 664 sys sys 1040006345 703136
-386/9pxeload - 775 sys sys 1056073259 180364
+386/9pxeload - 775 sys sys 1056364444 180364
 386/_9pcdisk.gz - 664 sys sys 1039764191 695837
 386/bin - 20000000775 sys sys 1018897690 0
-386/bin/8a - 775 sys sys 1045537931 113390
+386/bin/8a - 775 sys sys 1056364159 113410
 386/bin/8c - 775 sys sys 1048744992 298685
 386/bin/8l - 775 sys sys 1045537932 107923
-386/bin/9660srv - 775 sys sys 1045537932 105209
-386/bin/aan - 775 sys sys 1045537933 128318
-386/bin/acid - 775 sys sys 1046265116 378280
-386/bin/acme - 775 sys sys 1050868836 417821
+386/bin/9660srv - 775 sys sys 1056364160 105231
+386/bin/aan - 775 sys sys 1056364161 129086
+386/bin/acid - 775 sys sys 1056364162 378300
+386/bin/acme - 775 sys sys 1056364164 417918
 386/bin/ape - 20000000775 sys sys 1016944144 0
 386/bin/ape/basename - 775 sys sys 1048744993 132430
-386/bin/ape/cc - 775 sys sys 1045537935 68930
+386/bin/ape/cc - 775 sys sys 1056364165 69060
 386/bin/ape/diff - 775 sys sys 1048744994 345866
 386/bin/ape/diff3 - 775 sys sys 1048744996 184572
 386/bin/ape/dirname - 775 sys sys 1048744997 132209
@@ -39,113 +39,113 @@
 386/bin/ape/sed - 775 sys sys 1048745002 157596
 386/bin/ape/sh - 775 sys sys 1052191981 476284
 386/bin/ape/stty - 775 sys sys 1039758529 41577
-386/bin/ape/tar - 775 sys sys 1039758529 60413
+386/bin/ape/tar - 775 sys sys 1056364165 60433
 386/bin/ape/uname - 775 sys sys 1048745005 132335
-386/bin/ar - 775 sys sys 1046656902 113306
-386/bin/archfs - 775 sys sys 1053200891 142724
-386/bin/ascii - 775 sys sys 1039758530 63264
+386/bin/ar - 775 sys sys 1056364166 113326
+386/bin/archfs - 775 sys sys 1056364166 142746
+386/bin/ascii - 775 sys sys 1056364167 63286
 386/bin/astro - 775 sys sys 1039758530 139263
 386/bin/auth - 20000000775 sys sys 1016920815 0
-386/bin/auth/aescbc - 775 sys sys 1045537938 120957
-386/bin/auth/asn12rsa - 775 sys sys 1053200891 117861
-386/bin/auth/authsrv - 775 sys sys 1052191982 162705
-386/bin/auth/changeuser - 775 sys sys 1045537939 96090
-386/bin/auth/convkeys - 775 sys sys 1046656929 86221
-386/bin/auth/convkeys2 - 775 sys sys 1046656929 86237
-386/bin/auth/cron - 775 sys sys 1053200892 141315
-386/bin/auth/debug - 775 sys sys 1045537941 98167
+386/bin/auth/aescbc - 775 sys sys 1056364168 121640
+386/bin/auth/asn12rsa - 775 sys sys 1056364169 118224
+386/bin/auth/authsrv - 775 sys sys 1056364170 162727
+386/bin/auth/changeuser - 775 sys sys 1056364170 96113
+386/bin/auth/convkeys - 775 sys sys 1056364171 86307
+386/bin/auth/convkeys2 - 775 sys sys 1056364171 86323
+386/bin/auth/cron - 775 sys sys 1056364172 141337
+386/bin/auth/debug - 775 sys sys 1056364173 98195
 386/bin/auth/disable - 775 sys sys 1020319057 146
 386/bin/auth/enable - 775 sys sys 1020319057 134
-386/bin/auth/factotum - 775 sys sys 1053200893 308685
-386/bin/auth/fgui - 775 sys sys 1045537942 211917
-386/bin/auth/guard.srv - 775 sys sys 1045537943 139879
+386/bin/auth/factotum - 775 sys sys 1056364174 309094
+386/bin/auth/fgui - 775 sys sys 1056364176 212785
+386/bin/auth/guard.srv - 775 sys sys 1056364177 140570
 386/bin/auth/iam - 775 sys sys 1039758534 51077
-386/bin/auth/keyfs - 775 sys sys 1055797591 116737
-386/bin/auth/login - 775 sys sys 1053200894 101393
-386/bin/auth/newns - 775 sys sys 1053200894 86051
-386/bin/auth/pemdecode - 775 sys sys 1048622918 59616
-386/bin/auth/pemencode - 775 sys sys 1048622919 58345
+386/bin/auth/keyfs - 775 sys sys 1056364178 116737
+386/bin/auth/login - 775 sys sys 1056364178 101415
+386/bin/auth/newns - 775 sys sys 1056364179 86073
+386/bin/auth/pemdecode - 775 sys sys 1056364179 59636
+386/bin/auth/pemencode - 775 sys sys 1056364180 58365
 386/bin/auth/printnetkey - 775 sys sys 1039758534 40969
-386/bin/auth/rsa2csr - 775 sys sys 1053200895 177973
-386/bin/auth/rsa2pub - 775 sys sys 1053200896 141860
-386/bin/auth/rsa2ssh - 775 sys sys 1053200896 137255
-386/bin/auth/rsa2x509 - 775 sys sys 1053200897 181979
-386/bin/auth/rsafill - 775 sys sys 1053200898 141928
-386/bin/auth/rsagen - 775 sys sys 1053200899 152876
+386/bin/auth/rsa2csr - 775 sys sys 1056364180 178336
+386/bin/auth/rsa2pub - 775 sys sys 1056364181 142223
+386/bin/auth/rsa2ssh - 775 sys sys 1056364182 137618
+386/bin/auth/rsa2x509 - 775 sys sys 1056364183 182342
+386/bin/auth/rsafill - 775 sys sys 1056364184 142291
+386/bin/auth/rsagen - 775 sys sys 1056364185 153239
 386/bin/auth/secretpem - 775 sys sys 1045537944 118526
-386/bin/auth/secstore - 775 sys sys 1053200900 187583
-386/bin/auth/secstored - 775 sys sys 1053200901 193769
-386/bin/auth/secuser - 775 sys sys 1053200902 150223
+386/bin/auth/secstore - 775 sys sys 1056364186 187992
+386/bin/auth/secstored - 775 sys sys 1056364187 194114
+386/bin/auth/secuser - 775 sys sys 1056364188 150569
 386/bin/auth/status - 775 sys sys 1020319060 738
-386/bin/auth/uniq - 775 sys sys 1039758536 61773
-386/bin/auth/warning - 775 sys sys 1053200903 98067
-386/bin/auth/wrkey - 775 sys sys 1046656932 73497
+386/bin/auth/uniq - 775 sys sys 1056364188 61793
+386/bin/auth/warning - 775 sys sys 1056364189 98089
+386/bin/auth/wrkey - 775 sys sys 1056364189 73583
 386/bin/aux - 20000000775 sys sys 1016920817 0
-386/bin/aux/9pcon - 775 sys sys 1039758536 96151
-386/bin/aux/LOCK - 775 sys sys 1045537946 58692
+386/bin/aux/9pcon - 775 sys sys 1056364190 96179
+386/bin/aux/LOCK - 775 sys sys 1056364190 58714
 386/bin/aux/X509gen - 775 sys sys 1048341826 129186
 386/bin/aux/accupoint - 775 sys sys 1039758537 41111
-386/bin/aux/acidleak - 775 sys sys 1050557201 68064
-386/bin/aux/apm - 775 sys sys 1053200904 175838
-386/bin/aux/astarld - 775 sys sys 1039758537 63522
-386/bin/aux/cddb - 775 sys sys 1039758537 70432
-386/bin/aux/clog - 775 sys sys 1039758538 65408
-386/bin/aux/consolefs - 775 sys sys 1045537948 153752
+386/bin/aux/acidleak - 775 sys sys 1056364191 68086
+386/bin/aux/apm - 775 sys sys 1056364192 175935
+386/bin/aux/astarld - 775 sys sys 1056364192 63544
+386/bin/aux/cddb - 775 sys sys 1056364193 70460
+386/bin/aux/clog - 775 sys sys 1056364193 65430
+386/bin/aux/consolefs - 775 sys sys 1056364194 154510
 386/bin/aux/conswdir - 775 sys sys 1042440488 38855
 386/bin/aux/cropmarks - 775 sys sys 1020319062 1808
-386/bin/aux/data2s - 775 sys sys 1039758538 59178
-386/bin/aux/depend - 775 sys sys 1045537948 145890
-386/bin/aux/disksim - 775 sys sys 1053200905 146000
+386/bin/aux/data2s - 775 sys sys 1056364194 59200
+386/bin/aux/depend - 775 sys sys 1056364195 146648
+386/bin/aux/disksim - 775 sys sys 1056364196 146022
 386/bin/aux/download - 775 sys sys 1048745014 175067
-386/bin/aux/faxreceive - 775 sys sys 1045537949 83421
-386/bin/aux/faxsend - 775 sys sys 1045537950 88819
-386/bin/aux/flashfs - 775 sys sys 1053200906 161812
-386/bin/aux/g3p9bit - 775 sys sys 1039758539 65837
+386/bin/aux/faxreceive - 775 sys sys 1056364196 83443
+386/bin/aux/faxsend - 775 sys sys 1056364197 88849
+386/bin/aux/flashfs - 775 sys sys 1056364198 161834
+386/bin/aux/g3p9bit - 775 sys sys 1056364198 65857
 386/bin/aux/getflags - 775 sys sys 1039758540 44343
 386/bin/aux/grabit - 775 sys sys 1020319063 1244
 386/bin/aux/hardcopy - 775 sys sys 1020319063 1699
 386/bin/aux/isvmware - 775 sys sys 1032486791 23997
-386/bin/aux/lines - 775 sys sys 1039758540 59152
-386/bin/aux/listen - 775 sys sys 1053200907 105147
-386/bin/aux/listen1 - 775 sys sys 1053200907 91442
+386/bin/aux/lines - 775 sys sys 1056364199 59174
+386/bin/aux/listen - 775 sys sys 1056364200 105169
+386/bin/aux/listen1 - 775 sys sys 1056364200 91464
 386/bin/aux/lpdaemon - 775 sys sys 1048745018 165127
 386/bin/aux/lpdsend - 775 sys sys 1048745019 153335
 386/bin/aux/lpsend - 775 sys sys 1039758540 53107
-386/bin/aux/mapd - 775 sys sys 1045537952 190971
-386/bin/aux/mkflashfs - 775 sys sys 1045537952 66243
-386/bin/aux/mklatinkbd - 775 sys sys 1039758541 62863
-386/bin/aux/mnihongo - 775 sys sys 1045537952 136431
+386/bin/aux/mapd - 775 sys sys 1056364201 191654
+386/bin/aux/mkflashfs - 775 sys sys 1056364202 66263
+386/bin/aux/mklatinkbd - 775 sys sys 1056364202 62883
+386/bin/aux/mnihongo - 775 sys sys 1056364203 137116
 386/bin/aux/mouse - 775 sys sys 1039758541 44473
-386/bin/aux/ms2 - 775 sys sys 1045537953 84053
-386/bin/aux/mswordstrings - 775 sys sys 1039758542 64268
-386/bin/aux/na - 775 sys sys 1045537953 152774
-386/bin/aux/nfsmount - 775 sys sys 1048745020 231410
-386/bin/aux/nfsserver - 775 sys sys 1050868838 171093
-386/bin/aux/olefs - 775 sys sys 1053200908 145636
-386/bin/aux/p9bitpost - 775 sys sys 1047307246 128070
+386/bin/aux/ms2 - 775 sys sys 1056364203 84073
+386/bin/aux/mswordstrings - 775 sys sys 1056364204 64290
+386/bin/aux/na - 775 sys sys 1056364204 153457
+386/bin/aux/nfsmount - 775 sys sys 1056364206 232174
+386/bin/aux/nfsserver - 775 sys sys 1056364207 171115
+386/bin/aux/olefs - 775 sys sys 1056364207 145658
+386/bin/aux/p9bitpost - 775 sys sys 1056364208 128092
 386/bin/aux/pcmcia - 775 sys sys 1039758543 46790
-386/bin/aux/pcnfsd - 775 sys sys 1050868839 126787
-386/bin/aux/portmap - 775 sys sys 1049840989 141624
-386/bin/aux/portmapper - 775 sys sys 1050868840 125675
+386/bin/aux/pcnfsd - 775 sys sys 1056364209 126809
+386/bin/aux/portmap - 775 sys sys 1056364210 141721
+386/bin/aux/portmapper - 775 sys sys 1056364210 125697
 386/bin/aux/postgif - 775 sys sys 1048745022 174648
 386/bin/aux/postprint - 775 sys sys 1048745023 159149
 386/bin/aux/postreverse - 775 sys sys 1048745024 164587
 386/bin/aux/posttek - 775 sys sys 1048745025 162347
 386/bin/aux/rdwr - 775 sys sys 1039758544 38800
-386/bin/aux/reboot - 775 sys sys 1045537955 59052
-386/bin/aux/samterm - 775 sys sys 1045537956 244816
-386/bin/aux/searchfs - 775 sys sys 1045537956 90977
-386/bin/aux/sprog - 775 sys sys 1039758545 77768
+386/bin/aux/reboot - 775 sys sys 1056364211 59072
+386/bin/aux/samterm - 775 sys sys 1056364212 245576
+386/bin/aux/searchfs - 775 sys sys 1056364213 90997
+386/bin/aux/sprog - 775 sys sys 1056364213 77788
 386/bin/aux/ssh_genkey - 775 sys sys 1045537957 194629
-386/bin/aux/sshserve - 775 sys sys 1053200909 249988
-386/bin/aux/stub - 775 sys sys 1053200910 136360
+386/bin/aux/sshserve - 775 sys sys 1056364214 250351
+386/bin/aux/stub - 775 sys sys 1056364215 136382
 386/bin/aux/tcpostio - 775 sys sys 1048745028 196997
-386/bin/aux/text2post - 775 sys sys 1039758546 77253
-386/bin/aux/timesync - 775 sys sys 1054017074 127890
-386/bin/aux/tr2post - 775 sys sys 1045537960 175522
-386/bin/aux/trampoline - 775 sys sys 1045537960 81157
-386/bin/aux/typepasswd - 775 sys sys 1045537960 68154
-386/bin/aux/vga - 775 sys sys 1054551530 300312
+386/bin/aux/text2post - 775 sys sys 1056364215 77273
+386/bin/aux/timesync - 775 sys sys 1056364216 128107
+386/bin/aux/tr2post - 775 sys sys 1056364217 176207
+386/bin/aux/trampoline - 775 sys sys 1056364218 81185
+386/bin/aux/typepasswd - 775 sys sys 1056364218 68176
+386/bin/aux/vga - 775 sys sys 1056364219 300334
 386/bin/aux/vmmousepoll - 775 sys sys 1032480572 41434
 386/bin/aux/vmware - 775 sys sys 1049428256 453
 386/bin/aux/vmwarefs - 775 sys sys 1045537962 102172
@@ -153,317 +153,320 @@
 386/bin/awd - 775 sys sys 1038443108 5033
 386/bin/awk - 775 sys sys 1048745031 316908
 386/bin/basename - 775 sys sys 1039758547 38375
-386/bin/bc - 775 sys sys 1039758548 80389
-386/bin/bind - 775 sys sys 1045537963 58305
+386/bin/bc - 775 sys sys 1056364220 80411
+386/bin/bind - 775 sys sys 1056364221 58325
 386/bin/bitsy - 20000000775 sys sys 1018721039 0
-386/bin/bitsy/bitsyload - 775 sys sys 1045537963 62107
-386/bin/bitsy/keyboard - 775 sys sys 1045537964 301457
+386/bin/bitsy/bitsyload - 775 sys sys 1056364221 62129
+386/bin/bitsy/keyboard - 775 sys sys 1056364222 302323
 386/bin/bitsy/light - 775 sys sys 1020319072 242
-386/bin/bitsy/params - 775 sys sys 1039758549 57274
-386/bin/bitsy/pencal - 775 sys sys 1045537965 115172
-386/bin/bitsy/prompter - 775 sys sys 1045537965 283641
-386/bin/bunzip2 - 775 sys sys 1039758550 96083
-386/bin/bzip2 - 775 sys sys 1045537966 112670
-386/bin/cal - 775 sys sys 1039758550 66676
-386/bin/calendar - 775 sys sys 1045537966 78193
+386/bin/bitsy/params - 775 sys sys 1056364223 57294
+386/bin/bitsy/pencal - 775 sys sys 1056364223 115857
+386/bin/bitsy/prompter - 775 sys sys 1056364225 284511
+386/bin/bunzip2 - 775 sys sys 1056364225 96103
+386/bin/bzip2 - 775 sys sys 1056364226 112690
+386/bin/cal - 775 sys sys 1056364226 66698
+386/bin/calendar - 775 sys sys 1056364227 78213
 386/bin/cat - 775 sys sys 1039758550 37944
-386/bin/cdfs - 775 sys sys 1053200912 163166
-386/bin/cfs - 775 sys sys 1053200913 129768
-386/bin/chgrp - 775 sys sys 1039758551 58493
-386/bin/chmod - 775 sys sys 1045537967 61739
-386/bin/cleanname - 775 sys sys 1039758551 56650
-386/bin/clock - 775 sys sys 1045537968 155230
+386/bin/cdfs - 775 sys sys 1056364228 163188
+386/bin/cfs - 775 sys sys 1056364229 129790
+386/bin/chgrp - 775 sys sys 1056364229 58515
+386/bin/chmod - 775 sys sys 1056364230 61759
+386/bin/cleanname - 775 sys sys 1056364230 56670
+386/bin/clock - 775 sys sys 1056364231 155915
 386/bin/cmp - 775 sys sys 1039758552 41134
-386/bin/colors - 775 sys sys 1045537968 147404
-386/bin/comm - 775 sys sys 1039758552 60001
-386/bin/con - 775 sys sys 1046656902 76495
-386/bin/cp - 775 sys sys 1045537969 62690
-386/bin/cpp - 775 sys sys 1045537969 148380
-386/bin/cpu - 775 sys sys 1053200914 138045
-386/bin/crop - 775 sys sys 1046656903 115587
+386/bin/colors - 775 sys sys 1056364232 148089
+386/bin/comm - 775 sys sys 1056364232 60023
+386/bin/con - 775 sys sys 1056364233 76525
+386/bin/cp - 775 sys sys 1056364233 62712
+386/bin/cpp - 775 sys sys 1056364234 149065
+386/bin/cpu - 775 sys sys 1056364235 138067
+386/bin/crop - 775 sys sys 1056364235 115607
 386/bin/date - 775 sys sys 1039758553 43976
-386/bin/db - 775 sys sys 1046368788 323629
-386/bin/dc - 775 sys sys 1045537970 97871
-386/bin/dd - 775 sys sys 1039758554 46046
-386/bin/deroff - 775 sys sys 1045537971 73202
-386/bin/dict - 775 sys sys 1039758555 168316
-386/bin/diff - 775 sys sys 1045537971 82265
+386/bin/db - 775 sys sys 1056364237 323651
+386/bin/dc - 775 sys sys 1056364238 97891
+386/bin/dd - 775 sys sys 1056364238 46261
+386/bin/deroff - 775 sys sys 1056364239 73222
+386/bin/dict - 775 sys sys 1056364240 168338
+386/bin/diff - 775 sys sys 1056364240 82287
 386/bin/disk - 20000000775 sys sys 984788664 0
-386/bin/disk/dump9660 - 775 sys sys 1045537971 151530
-386/bin/disk/exsort - 775 sys sys 1039758556 58789
-386/bin/disk/fdisk - 775 sys sys 1050868841 106887
-386/bin/disk/format - 775 sys sys 1045537972 91869
-386/bin/disk/kfs - 775 sys sys 1053200915 249412
+386/bin/disk/dump9660 - 775 sys sys 1056364241 151552
+386/bin/disk/exsort - 775 sys sys 1056364242 58811
+386/bin/disk/fdisk - 775 sys sys 1056364242 106909
+386/bin/disk/format - 775 sys sys 1056364243 91891
+386/bin/disk/kfs - 775 sys sys 1056364244 249498
 386/bin/disk/kfscmd - 775 sys sys 1039758557 38719
 386/bin/disk/ksync - 775 sys sys 1020319074 302
-386/bin/disk/mbr - 775 sys sys 1045537973 72337
+386/bin/disk/mbr - 775 sys sys 1056364245 72359
 386/bin/disk/mk9660 - 775 sys sys 1020319074 144
-386/bin/disk/mkext - 775 sys sys 1045537974 77821
-386/bin/disk/mkfs - 775 sys sys 1045537974 87447
+386/bin/disk/mkext - 775 sys sys 1056364245 77841
+386/bin/disk/mkfs - 775 sys sys 1056364246 87469
 386/bin/disk/mksacfs - 775 sys sys 1020319074 71451
-386/bin/disk/prep - 775 sys sys 1045537974 98786
+386/bin/disk/prep - 775 sys sys 1056364247 99395
 386/bin/disk/sacfs - 775 sys sys 1020319075 79882
-386/bin/dossrv - 775 sys sys 1045537975 139903
-386/bin/du - 775 sys sys 1045537975 63067
-386/bin/echo - 775 sys sys 1039758558 55830
-386/bin/ed - 775 sys sys 1045537975 92166
+386/bin/dossrv - 775 sys sys 1056364248 139926
+386/bin/du - 775 sys sys 1056364248 63087
+386/bin/echo - 775 sys sys 1056364248 55850
+386/bin/ed - 775 sys sys 1056364249 92095
 386/bin/eqn - 775 sys sys 1048745036 240244
-386/bin/execnet - 775 sys sys 1053200916 173774
-386/bin/exportfs - 775 sys sys 1053200917 146269
-386/bin/faces - 775 sys sys 1048745039 189109
-386/bin/factor - 775 sys sys 1039758559 60135
-386/bin/file - 775 sys sys 1048745039 117281
-386/bin/fmt - 775 sys sys 1039758560 63811
-386/bin/fortune - 775 sys sys 1045537977 66332
+386/bin/execnet - 775 sys sys 1056364250 173778
+386/bin/exportfs - 775 sys sys 1056364251 146299
+386/bin/ext2srv - 775 sys sys 1056364252 176277
+386/bin/faces - 775 sys sys 1056364253 189795
+386/bin/factor - 775 sys sys 1056364253 60157
+386/bin/file - 775 sys sys 1056364254 117303
+386/bin/fmt - 775 sys sys 1056364254 63831
+386/bin/fortune - 775 sys sys 1056364255 66354
 386/bin/fossil - 20000000775 sys sys 1042005470 0
-386/bin/fossil/flchk - 775 sys sys 1050557202 228602
-386/bin/fossil/flfmt - 775 sys sys 1050557203 226596
-386/bin/fossil/fossil - 775 sys sys 1053200918 338796
-386/bin/freq - 775 sys sys 1039758560 60443
+386/bin/fossil/conf - 775 sys sys 1056364255 1497
+386/bin/fossil/flchk - 775 sys sys 1056364256 231855
+386/bin/fossil/flfmt - 775 sys sys 1056364257 229849
+386/bin/fossil/fossil - 775 sys sys 1056364259 344661
+386/bin/freq - 775 sys sys 1056364259 60465
 386/bin/fs - 20000000775 sys sys 954380769 0
-386/bin/fs/32vfs - 775 sys sys 1039758560 96155
-386/bin/fs/cpiofs - 775 sys sys 1039758560 94985
-386/bin/fs/tapfs - 775 sys sys 1039758561 97453
-386/bin/fs/tarfs - 775 sys sys 1039758561 95839
-386/bin/fs/tpfs - 775 sys sys 1039758561 94691
-386/bin/fs/v10fs - 775 sys sys 1039758561 96202
-386/bin/fs/v6fs - 775 sys sys 1039758562 96121
-386/bin/ftpfs - 775 sys sys 1048745044 149314
-386/bin/getmap - 775 sys sys 1039758562 63678
-386/bin/gif - 775 sys sys 1045537981 156120
+386/bin/fs/32vfs - 775 sys sys 1056364260 96177
+386/bin/fs/cpiofs - 775 sys sys 1056364260 95007
+386/bin/fs/tapfs - 775 sys sys 1056364261 97475
+386/bin/fs/tarfs - 775 sys sys 1056364262 95859
+386/bin/fs/tpfs - 775 sys sys 1056364262 94713
+386/bin/fs/v10fs - 775 sys sys 1056364263 96224
+386/bin/fs/v6fs - 775 sys sys 1056364263 96143
+386/bin/ftpfs - 775 sys sys 1056364264 149459
+386/bin/getmap - 775 sys sys 1056364265 63698
+386/bin/gif - 775 sys sys 1056364265 156803
 386/bin/grap - 775 sys sys 1048745045 275664
-386/bin/graph - 775 sys sys 1045537982 127364
-386/bin/grep - 775 sys sys 1039758563 77890
+386/bin/graph - 775 sys sys 1056364266 128047
+386/bin/grep - 775 sys sys 1056364267 77912
 386/bin/gs - 775 sys sys 1047057912 11099179
-386/bin/gunzip - 775 sys sys 1045538012 79921
-386/bin/gzip - 775 sys sys 1045538013 84018
-386/bin/hayes - 775 sys sys 1045538013 63555
-386/bin/hget - 775 sys sys 1053200919 220272
-386/bin/history - 775 sys sys 1045538014 72138
-386/bin/hoc - 775 sys sys 1045538014 98958
-386/bin/html2ms - 775 sys sys 1039758564 64730
-386/bin/htmlfmt - 775 sys sys 1050435574 159132
-386/bin/iconv - 775 sys sys 1046656908 112829
-386/bin/idiff - 775 sys sys 1045538015 75495
-386/bin/import - 775 sys sys 1053200920 88029
-386/bin/iostats - 775 sys sys 1045538016 98803
+386/bin/gunzip - 775 sys sys 1056364267 79943
+386/bin/gzip - 775 sys sys 1056364268 84038
+386/bin/hayes - 775 sys sys 1056364268 63577
+386/bin/hget - 775 sys sys 1056364269 220684
+386/bin/history - 775 sys sys 1056364270 72158
+386/bin/hoc - 775 sys sys 1056364270 98978
+386/bin/html2ms - 775 sys sys 1056364271 64752
+386/bin/htmlfmt - 775 sys sys 1056364272 159154
+386/bin/iconv - 775 sys sys 1056364273 112849
+386/bin/idiff - 775 sys sys 1056364273 75517
+386/bin/import - 775 sys sys 1056364274 88051
+386/bin/iostats - 775 sys sys 1056364274 98565
 386/bin/ip - 20000000775 sys sys 1016920851 0
-386/bin/ip/dhcpclient - 775 sys sys 1052191982 92362
-386/bin/ip/dhcpd - 775 sys sys 1052191983 145129
-386/bin/ip/dhcpleases - 775 sys sys 1045538017 84658
-386/bin/ip/ftpd - 775 sys sys 1053200921 167397
-386/bin/ip/gping - 775 sys sys 1045538018 179663
+386/bin/ip/dhcpclient - 775 sys sys 1056364275 92384
+386/bin/ip/dhcpd - 775 sys sys 1056364276 145151
+386/bin/ip/dhcpleases - 775 sys sys 1056364276 84688
+386/bin/ip/ftpd - 775 sys sys 1056364277 167419
+386/bin/ip/gping - 775 sys sys 1056364278 180356
 386/bin/ip/hogports - 775 sys sys 1039758567 43296
 386/bin/ip/httpd - 20000000775 sys sys 1016920846 0
-386/bin/ip/httpd/httpd - 775 sys sys 1053200922 287956
-386/bin/ip/httpd/imagemap - 775 sys sys 1045538020 113660
-386/bin/ip/httpd/man2html - 775 sys sys 1045538020 121928
-386/bin/ip/httpd/save - 775 sys sys 1045538021 130989
-386/bin/ip/httpd/wikipost - 775 sys sys 1045538021 111347
-386/bin/ip/imap4d - 775 sys sys 1053200923 233807
-386/bin/ip/ipconfig - 775 sys sys 1052191983 102973
-386/bin/ip/ping - 775 sys sys 1039758569 74005
-386/bin/ip/ppp - 775 sys sys 1053200924 215324
-386/bin/ip/pppoe - 775 sys sys 1050419688 75481
-386/bin/ip/pptp - 775 sys sys 1050419688 123946
-386/bin/ip/pptpd - 775 sys sys 1045538024 123603
-386/bin/ip/rarpd - 775 sys sys 1045538024 107221
-386/bin/ip/rexexec - 775 sys sys 1053200925 87004
-386/bin/ip/rip - 775 sys sys 1050868852 89821
-386/bin/ip/rlogind - 775 sys sys 1045538025 66387
-386/bin/ip/telnetd - 775 sys sys 1053200925 120322
-386/bin/ip/tftpd - 775 sys sys 1045538025 102539
-386/bin/ip/traceroute - 775 sys sys 1039758572 70850
+386/bin/ip/httpd/httpd - 775 sys sys 1056364279 288320
+386/bin/ip/httpd/imagemap - 775 sys sys 1056364280 113683
+386/bin/ip/httpd/man2html - 775 sys sys 1056364281 121949
+386/bin/ip/httpd/save - 775 sys sys 1056364282 131012
+386/bin/ip/httpd/wikipost - 775 sys sys 1056364282 111370
+386/bin/ip/imap4d - 775 sys sys 1056364283 233876
+386/bin/ip/ipconfig - 775 sys sys 1056364284 102995
+386/bin/ip/ping - 775 sys sys 1056364285 74035
+386/bin/ip/ppp - 775 sys sys 1056364286 215444
+386/bin/ip/pppoe - 775 sys sys 1056364286 75503
+386/bin/ip/pptp - 775 sys sys 1056364287 124043
+386/bin/ip/pptpd - 775 sys sys 1056364288 124298
+386/bin/ip/rarpd - 775 sys sys 1056364288 107251
+386/bin/ip/rexexec - 775 sys sys 1056364289 87026
+386/bin/ip/rip - 775 sys sys 1056364290 89843
+386/bin/ip/rlogind - 775 sys sys 1056364290 66409
+386/bin/ip/telnetd - 775 sys sys 1056364291 120344
+386/bin/ip/tftpd - 775 sys sys 1056364292 102563
+386/bin/ip/traceroute - 775 sys sys 1056364292 70872
 386/bin/ip/udpecho - 775 sys sys 1050868853 43574
-386/bin/join - 775 sys sys 1045538026 114439
-386/bin/jpg - 775 sys sys 1045538027 172815
-386/bin/kprof - 775 sys sys 1045538027 101902
-386/bin/ktrace - 775 sys sys 1045538028 115129
-386/bin/lens - 775 sys sys 1045538028 122376
-386/bin/lex - 775 sys sys 1039758573 97530
-386/bin/lnfs - 775 sys sys 1045538028 100759
-386/bin/look - 775 sys sys 1039758574 64460
-386/bin/ls - 775 sys sys 1046656916 81368
-386/bin/mc - 775 sys sys 1045538029 129044
-386/bin/md5sum - 775 sys sys 1039758574 59713
-386/bin/mk - 775 sys sys 1045538030 141372
-386/bin/mkdir - 775 sys sys 1045538030 57839
-386/bin/mkpaqfs - 775 sys sys 1045538030 93494
-386/bin/mkstate - 775 sys sys 1039758575 62173
-386/bin/mntgen - 775 sys sys 1053200926 136912
-386/bin/mount - 775 sys sys 1053200927 71730
-386/bin/ms2html - 775 sys sys 1045538031 102447
-386/bin/mtime - 775 sys sys 1045538032 57878
-386/bin/mv - 775 sys sys 1045538032 64996
+386/bin/join - 775 sys sys 1056364293 115124
+386/bin/jpg - 775 sys sys 1056364294 173498
+386/bin/kprof - 775 sys sys 1056364295 101924
+386/bin/ktrace - 775 sys sys 1056364296 115151
+386/bin/lens - 775 sys sys 1056364296 123061
+386/bin/lex - 775 sys sys 1056364297 97550
+386/bin/lnfs - 775 sys sys 1056364298 100781
+386/bin/look - 775 sys sys 1056364298 64482
+386/bin/ls - 775 sys sys 1056364299 81355
+386/bin/mc - 775 sys sys 1056364300 129727
+386/bin/md5sum - 775 sys sys 1056364300 59735
+386/bin/mk - 775 sys sys 1056364301 143580
+386/bin/mkdir - 775 sys sys 1056364301 57859
+386/bin/mkpaqfs - 775 sys sys 1056364302 93514
+386/bin/mkstate - 775 sys sys 1056364303 62195
+386/bin/mntgen - 775 sys sys 1056364304 136934
+386/bin/mount - 775 sys sys 1056364304 71752
+386/bin/ms2html - 775 sys sys 1056364305 102469
+386/bin/mtime - 775 sys sys 1056364305 57898
+386/bin/mv - 775 sys sys 1056364306 65018
 386/bin/ndb - 20000000775 sys sys 985743147 0
-386/bin/ndb/cs - 775 sys sys 1056041639 143631
-386/bin/ndb/csquery - 775 sys sys 1039758577 60136
-386/bin/ndb/dns - 775 sys sys 1056041636 216829
-386/bin/ndb/dnsdebug - 775 sys sys 1050868855 186511
-386/bin/ndb/dnsquery - 775 sys sys 1039758578 62442
-386/bin/ndb/dnstcp - 775 sys sys 1050868856 185296
-386/bin/ndb/ipquery - 775 sys sys 1045538035 91678
-386/bin/ndb/mkdb - 775 sys sys 1039758578 62632
-386/bin/ndb/mkhash - 775 sys sys 1045538035 82294
-386/bin/ndb/mkhosts - 775 sys sys 1045538035 83238
-386/bin/ndb/query - 775 sys sys 1045538036 81036
-386/bin/netkey - 775 sys sys 1039758579 70753
-386/bin/netstat - 775 sys sys 1045538036 81379
-386/bin/news - 775 sys sys 1045538036 70512
-386/bin/nfs - 775 sys sys 1053200929 317033
-386/bin/nm - 775 sys sys 1045538037 123227
-386/bin/nntpfs - 775 sys sys 1053200930 163097
-386/bin/ns - 775 sys sys 1039758580 63830
-386/bin/p - 775 sys sys 1043589869 63785
-386/bin/page - 775 sys sys 1045665599 215429
-386/bin/paqfs - 775 sys sys 1045538039 108076
-386/bin/passwd - 775 sys sys 1039758581 81058
+386/bin/ndb/cs - 775 sys sys 1056364307 143921
+386/bin/ndb/csquery - 775 sys sys 1056364307 60158
+386/bin/ndb/dns - 775 sys sys 1056364308 216571
+386/bin/ndb/dnsdebug - 775 sys sys 1056364309 188863
+386/bin/ndb/dnsquery - 775 sys sys 1056364309 62464
+386/bin/ndb/dnstcp - 775 sys sys 1056364310 187648
+386/bin/ndb/ipquery - 775 sys sys 1056364311 91700
+386/bin/ndb/mkdb - 775 sys sys 1056364311 62654
+386/bin/ndb/mkhash - 775 sys sys 1056364312 82316
+386/bin/ndb/mkhosts - 775 sys sys 1056364313 83260
+386/bin/ndb/query - 775 sys sys 1056364313 81058
+386/bin/netkey - 775 sys sys 1056364314 70775
+386/bin/netstat - 775 sys sys 1056364314 81403
+386/bin/news - 775 sys sys 1056364315 70534
+386/bin/nfs - 775 sys sys 1056364316 317130
+386/bin/nm - 775 sys sys 1056364317 123249
+386/bin/nntpfs - 775 sys sys 1056364318 163124
+386/bin/ns - 775 sys sys 1056364318 63850
+386/bin/p - 775 sys sys 1056364319 63805
+386/bin/page - 775 sys sys 1056364320 216114
+386/bin/paqfs - 775 sys sys 1056364321 108098
+386/bin/passwd - 775 sys sys 1056364321 80240
 386/bin/pbd - 775 sys sys 1038443175 4663
-386/bin/pcc - 775 sys sys 1048745060 66255
+386/bin/pcc - 775 sys sys 1056364322 66385
 386/bin/pic - 775 sys sys 1048745061 300459
 386/bin/pipefile - 775 sys sys 1039758581 39893
-386/bin/plot - 775 sys sys 1045538040 219623
-386/bin/plumb - 775 sys sys 1039758582 65473
-386/bin/plumber - 775 sys sys 1045538041 169961
-386/bin/png - 775 sys sys 1045538041 158163
-386/bin/ppm - 775 sys sys 1045538042 147179
-386/bin/pr - 775 sys sys 1050868856 76569
+386/bin/plot - 775 sys sys 1056364323 220308
+386/bin/plumb - 775 sys sys 1056364323 65493
+386/bin/plumber - 775 sys sys 1056364325 170719
+386/bin/png - 775 sys sys 1056364326 158846
+386/bin/ppm - 775 sys sys 1056364327 147862
+386/bin/pr - 775 sys sys 1056364327 76591
 386/bin/primes - 775 sys sys 1039758583 39290
-386/bin/prof - 775 sys sys 1045538043 106378
-386/bin/proof - 775 sys sys 1045538044 175773
-386/bin/ps - 775 sys sys 1039758584 64633
+386/bin/prof - 775 sys sys 1056364328 106400
+386/bin/proof - 775 sys sys 1056364329 176456
+386/bin/ps - 775 sys sys 1056364329 64653
 386/bin/pwd - 775 sys sys 1039758584 37188
-386/bin/ramfs - 775 sys sys 1045538044 89923
-386/bin/rc - 775 sys sys 1045538044 140122
-386/bin/rdbfs - 775 sys sys 1053200931 170453
-386/bin/read - 775 sys sys 1039758585 56544
+386/bin/ramfs - 775 sys sys 1056364330 89911
+386/bin/rc - 775 sys sys 1056364331 141610
+386/bin/rdbfs - 775 sys sys 1056364332 170550
+386/bin/read - 775 sys sys 1056364332 56564
 386/bin/replica - 20000000775 sys sys 1018321168 0
-386/bin/replica/applychanges - 775 sys sys 1045538045 99047
-386/bin/replica/applylog - 775 sys sys 1054017074 99904
+386/bin/replica/applychanges - 775 sys sys 1056364333 99069
+386/bin/replica/applylog - 775 sys sys 1056364334 99926
 386/bin/replica/changes - 775 sys sys 1020319082 42
-386/bin/replica/compactdb - 775 sys sys 1039758586 77913
+386/bin/replica/compactdb - 775 sys sys 1056364334 77933
 386/bin/replica/pull - 775 sys sys 1020319083 39
 386/bin/replica/push - 775 sys sys 1020319083 39
 386/bin/replica/scan - 775 sys sys 1020319083 39
 386/bin/replica/setupdirs - 775 sys sys 1020319083 44
-386/bin/replica/updatedb - 775 sys sys 1045538046 95942
-386/bin/resample - 775 sys sys 1046656917 120374
-386/bin/rio - 775 sys sys 1046368790 302875
-386/bin/rm - 775 sys sys 1045538047 60036
-386/bin/rtstats - 775 sys sys 1048745063 177363
-386/bin/rx - 775 sys sys 1054017075 79737
-386/bin/sam - 775 sys sys 1045538049 156896
-386/bin/scat - 775 sys sys 1045538050 282041
-386/bin/scp - 775 sys sys 1053200932 150552
-386/bin/scuzz - 775 sys sys 1039758589 110998
-386/bin/sed - 775 sys sys 1039758589 88430
+386/bin/replica/updatedb - 775 sys sys 1056364335 95964
+386/bin/resample - 775 sys sys 1056364336 120394
+386/bin/rio - 775 sys sys 1056364337 303633
+386/bin/rm - 775 sys sys 1056364337 60056
+386/bin/rtstats - 775 sys sys 1056364338 178121
+386/bin/rx - 775 sys sys 1056364339 79759
+386/bin/sam - 775 sys sys 1056364340 156918
+386/bin/scat - 775 sys sys 1056364341 282726
+386/bin/scp - 775 sys sys 1056364342 150897
+386/bin/scuzz - 775 sys sys 1056364343 111018
+386/bin/sed - 775 sys sys 1056364343 88450
 386/bin/seq - 775 sys sys 1039758589 38817
-386/bin/sha1sum - 775 sys sys 1039758589 59581
-386/bin/size - 775 sys sys 1045538050 76295
+386/bin/sha1sum - 775 sys sys 1056364344 59603
+386/bin/size - 775 sys sys 1056364344 76317
 386/bin/sleep - 775 sys sys 1038443184 3423
-386/bin/snap - 775 sys sys 1045538051 288724
-386/bin/snapfs - 775 sys sys 1053200934 360207
+386/bin/snap - 775 sys sys 1056364346 288744
+386/bin/snapfs - 775 sys sys 1056364347 360229
 386/bin/sniffer - 775 sys sys 1038443185 99028
-386/bin/snoopy - 775 sys sys 1048800312 153933
-386/bin/sort - 775 sys sys 1039758591 81296
+386/bin/snoopy - 775 sys sys 1056364348 154149
+386/bin/sort - 775 sys sys 1056364349 81316
 386/bin/spin - 775 sys sys 1048745068 649685
-386/bin/split - 775 sys sys 1045538055 74227
-386/bin/srv - 775 sys sys 1053200934 80873
+386/bin/split - 775 sys sys 1056364349 74247
+386/bin/srv - 775 sys sys 1056364350 80895
 386/bin/srvfs - 775 sys sys 1039758592 39914
-386/bin/srvold9p - 775 sys sys 1045538056 130539
-386/bin/ssh - 775 sys sys 1053200935 209848
-386/bin/sshnet - 775 sys sys 1053200937 283860
-386/bin/stats - 775 sys sys 1056035466 188475
-386/bin/strings - 775 sys sys 1039758593 60879
-386/bin/strip - 775 sys sys 1045538058 60829
+386/bin/srvold9p - 775 sys sys 1056364351 131232
+386/bin/ssh - 775 sys sys 1056364352 210193
+386/bin/sshnet - 775 sys sys 1056364353 284280
+386/bin/stats - 775 sys sys 1056364354 188475
+386/bin/strings - 775 sys sys 1056364355 60901
+386/bin/strip - 775 sys sys 1056364355 60851
 386/bin/sum - 775 sys sys 1039758593 40355
-386/bin/swap - 775 sys sys 1045538059 60847
-386/bin/syscall - 775 sys sys 1039758594 72631
-386/bin/tail - 775 sys sys 1045538059 64885
-386/bin/tar - 775 sys sys 1045538059 81328
-386/bin/tbl - 775 sys sys 1039758594 111800
+386/bin/swap - 775 sys sys 1056364356 60869
+386/bin/syscall - 775 sys sys 1056364356 72651
+386/bin/tail - 775 sys sys 1056364357 64907
+386/bin/tar - 775 sys sys 1056364357 81348
+386/bin/tbl - 775 sys sys 1056364358 111820
 386/bin/tcs - 775 sys sys 1045538060 257039
 386/bin/tee - 775 sys sys 1039758595 38926
-386/bin/telco - 775 sys sys 1045538061 105058
-386/bin/telnet - 775 sys sys 1045538061 80803
-386/bin/test - 775 sys sys 1045538061 63916
-386/bin/time - 775 sys sys 1039758596 59810
-386/bin/tlsclient - 775 sys sys 1053200940 195962
-386/bin/tlssrv - 775 sys sys 1053200941 196282
-386/bin/togif - 775 sys sys 1046656904 189087
-386/bin/topng - 775 sys sys 1046656905 137971
-386/bin/toppm - 775 sys sys 1046656905 164524
-386/bin/touch - 775 sys sys 1039758597 63209
-386/bin/tprof - 775 sys sys 1045538064 273469
-386/bin/tr - 775 sys sys 1039758598 60540
+386/bin/telco - 775 sys sys 1056364359 105080
+386/bin/telnet - 775 sys sys 1056364359 80831
+386/bin/test - 775 sys sys 1056364360 63938
+386/bin/time - 775 sys sys 1056364360 59832
+386/bin/tlsclient - 775 sys sys 1056364361 196325
+386/bin/tlssrv - 775 sys sys 1056364362 196645
+386/bin/togif - 775 sys sys 1056364363 189770
+386/bin/topng - 775 sys sys 1056364364 137991
+386/bin/toppm - 775 sys sys 1056364365 165207
+386/bin/touch - 775 sys sys 1056364366 63231
+386/bin/tprof - 775 sys sys 1056364367 273491
+386/bin/tr - 775 sys sys 1056364368 60560
 386/bin/troff - 775 sys sys 1048745077 352988
-386/bin/troff2html - 775 sys sys 1039758598 81032
-386/bin/tweak - 775 sys sys 1045538066 190337
-386/bin/unicode - 775 sys sys 1039758599 61093
-386/bin/uniq - 775 sys sys 1039758599 60560
-386/bin/units - 775 sys sys 1039758599 73879
+386/bin/troff2html - 775 sys sys 1056364368 81052
+386/bin/tweak - 775 sys sys 1056364369 191022
+386/bin/unicode - 775 sys sys 1056364370 61115
+386/bin/uniq - 775 sys sys 1056364370 60580
+386/bin/units - 775 sys sys 1056364371 73899
 386/bin/unmount - 775 sys sys 1039758599 37108
-386/bin/unzip - 775 sys sys 1050868857 90110
+386/bin/unzip - 775 sys sys 1056364371 90133
 386/bin/upas - 20000000775 sys sys 1016857390 0
-386/bin/upas/aliasmail - 775 sys sys 1048745078 100889
-386/bin/upas/deliver - 775 sys sys 1054925546 97154
-386/bin/upas/filter - 775 sys sys 1048745080 145569
-386/bin/upas/fs - 775 sys sys 1053200942 330787
-386/bin/upas/list - 775 sys sys 1045538069 81422
-386/bin/upas/marshal - 775 sys sys 1052831584 128669
-386/bin/upas/ml - 775 sys sys 1048745083 118089
-386/bin/upas/mlmgr - 775 sys sys 1048745084 100986
-386/bin/upas/mlowner - 775 sys sys 1046779558 90400
-386/bin/upas/nedmail - 775 sys sys 1048745085 148503
-386/bin/upas/pop3 - 775 sys sys 1053200944 255655
-386/bin/upas/qer - 775 sys sys 1048745087 98530
-386/bin/upas/ratfs - 775 sys sys 1045538073 112392
-386/bin/upas/runq - 775 sys sys 1048745088 111315
-386/bin/upas/scanmail - 775 sys sys 1048745089 127491
-386/bin/upas/send - 775 sys sys 1053200945 189099
-386/bin/upas/smtp - 775 sys sys 1053200946 268847
-386/bin/upas/smtpd - 775 sys sys 1053200947 312355
-386/bin/upas/testscan - 775 sys sys 1045538077 82381
-386/bin/upas/token - 775 sys sys 1039758605 76178
-386/bin/upas/vf - 775 sys sys 1045538077 90532
+386/bin/upas/aliasmail - 775 sys sys 1056364372 101747
+386/bin/upas/deliver - 775 sys sys 1056397816 98261
+386/bin/upas/filter - 775 sys sys 1056364374 145705
+386/bin/upas/fs - 775 sys sys 1056364375 331545
+386/bin/upas/list - 775 sys sys 1056364376 81442
+386/bin/upas/marshal - 775 sys sys 1056364377 129414
+386/bin/upas/ml - 775 sys sys 1056364378 118225
+386/bin/upas/mlmgr - 775 sys sys 1056364379 101122
+386/bin/upas/mlowner - 775 sys sys 1056364379 90420
+386/bin/upas/nedmail - 775 sys sys 1056364380 149925
+386/bin/upas/pop3 - 775 sys sys 1056364381 256132
+386/bin/upas/qer - 775 sys sys 1056364382 98666
+386/bin/upas/ratfs - 775 sys sys 1056364383 112414
+386/bin/upas/runq - 775 sys sys 1056364383 111451
+386/bin/upas/scanmail - 775 sys sys 1056364384 127737
+386/bin/upas/send - 775 sys sys 1056364385 189233
+386/bin/upas/smtp - 775 sys sys 1056364386 269559
+386/bin/upas/smtpd - 775 sys sys 1056364388 312832
+386/bin/upas/testscan - 775 sys sys 1056364389 82401
+386/bin/upas/token - 775 sys sys 1056364389 76198
+386/bin/upas/vf - 775 sys sys 1056364390 90554
 386/bin/usb - 20000000775 sys sys 1019538890 0
-386/bin/usb/usbaudio - 775 sys sys 1045538078 175445
-386/bin/usb/usbd - 775 sys sys 1045538079 122021
-386/bin/usb/usbmouse - 775 sys sys 1045538079 137425
-386/bin/vac - 775 sys sys 1048745094 171338
-386/bin/vacfs - 775 sys sys 1048745095 177536
+386/bin/usb/usbaudio - 775 sys sys 1056364391 176315
+386/bin/usb/usbd - 775 sys sys 1056364392 122990
+386/bin/usb/usbmouse - 775 sys sys 1056364393 138183
+386/bin/vac - 775 sys sys 1056364394 171476
+386/bin/vacfs - 775 sys sys 1056364395 177651
 386/bin/venti - 20000000775 sys sys 947360466 0
-386/bin/venti/buildindex - 775 sys sys 1048745096 157290
-386/bin/venti/checkarenas - 775 sys sys 1048745097 159642
-386/bin/venti/checkindex - 775 sys sys 1048745098 158096
-386/bin/venti/clumpstats - 775 sys sys 1048745099 147291
-386/bin/venti/copy - 775 sys sys 1048745100 104314
-386/bin/venti/findscore - 775 sys sys 1048745101 131067
-386/bin/venti/fmtarenas - 775 sys sys 1048745102 132921
-386/bin/venti/fmtindex - 775 sys sys 1048745103 146121
-386/bin/venti/fmtisect - 775 sys sys 1048745104 147546
-386/bin/venti/rdarena - 775 sys sys 1048745105 130813
-386/bin/venti/read - 775 sys sys 1045538086 100640
-386/bin/venti/sync - 775 sys sys 1045538086 99790
-386/bin/venti/syncindex - 775 sys sys 1048745106 172643
-386/bin/venti/venti - 775 sys sys 1048745107 249539
-386/bin/venti/verifyarena - 775 sys sys 1048745108 105163
-386/bin/venti/wrarena - 775 sys sys 1048745109 178914
-386/bin/venti/write - 775 sys sys 1045538089 100592
-386/bin/vncs - 775 sys sys 1053200950 442350
-386/bin/vncv - 775 sys sys 1053200951 270466
-386/bin/vt - 775 sys sys 1045538092 170883
-386/bin/vtdump - 775 sys sys 1048745114 160951
+386/bin/venti/buildindex - 775 sys sys 1056364396 160755
+386/bin/venti/checkarenas - 775 sys sys 1056364397 164707
+386/bin/venti/checkindex - 775 sys sys 1056364398 161561
+386/bin/venti/clumpstats - 775 sys sys 1056364399 150754
+386/bin/venti/conf - 775 sys sys 1056364399 1506
+386/bin/venti/copy - 775 sys sys 1056364400 104507
+386/bin/venti/findscore - 775 sys sys 1056364401 131629
+386/bin/venti/fmtarenas - 775 sys sys 1056364402 132874
+386/bin/venti/fmtindex - 775 sys sys 1056364403 151117
+386/bin/venti/fmtisect - 775 sys sys 1056364404 151001
+386/bin/venti/rdarena - 775 sys sys 1056364405 131355
+386/bin/venti/read - 775 sys sys 1056364405 100780
+386/bin/venti/sync - 775 sys sys 1056364406 99930
+386/bin/venti/syncindex - 775 sys sys 1056364407 176177
+386/bin/venti/venti - 775 sys sys 1056364408 252761
+386/bin/venti/verifyarena - 775 sys sys 1056364409 104872
+386/bin/venti/wrarena - 775 sys sys 1056364410 181842
+386/bin/venti/write - 775 sys sys 1056364411 100732
+386/bin/vncs - 775 sys sys 1056364413 442713
+386/bin/vncv - 775 sys sys 1056364414 270829
+386/bin/vt - 775 sys sys 1056364415 171566
+386/bin/vtdump - 775 sys sys 1056364416 161091
 386/bin/wc - 775 sys sys 1039758615 42416
-386/bin/webcookies - 775 sys sys 1053200952 162992
-386/bin/webfs - 775 sys sys 1053200954 350803
-386/bin/wikifs - 775 sys sys 1053200955 197584
-386/bin/winwatch - 775 sys sys 1045538096 141063
-386/bin/xd - 775 sys sys 1039758616 62802
+386/bin/webcookies - 775 sys sys 1056364417 163015
+386/bin/webfs - 775 sys sys 1056364419 351240
+386/bin/wikifs - 775 sys sys 1056364420 197606
+386/bin/winwatch - 775 sys sys 1056364421 141746
+386/bin/xd - 775 sys sys 1056364421 62824
 386/bin/xmr - 775 sys sys 1039758616 40652
 386/bin/xms - 775 sys sys 1039758617 41233
-386/bin/yacc - 775 sys sys 1045538096 100853
-386/bin/zip - 775 sys sys 1045538096 89317
+386/bin/yacc - 775 sys sys 1056364422 100873
+386/bin/zip - 775 sys sys 1056364422 89339
 386/include - 20000000775 sys sys 953243048 0
 386/include/ape - 20000000775 sys sys 944946041 0
 386/include/ape/float.h - 664 sys sys 969656988 1643
@@ -472,7 +475,7 @@
 386/include/ape/ureg.h - 664 sys sys 944946041 812
 386/include/u.h - 664 sys sys 1042604326 1450
 386/include/ureg.h - 664 sys sys 944946012 523
-386/init - 775 sys sys 1053200956 97967
+386/init - 775 sys sys 1056364423 97989
 386/ld.com - 775 sys sys 1032215930 64488
 386/lib - 20000000775 sys sys 1016826328 0
 386/lib/ape - 20000000775 sys sys 944969312 0
@@ -484,34 +487,34 @@
 386/lib/ape/libregexp.a - 664 sys sys 1050868861 47234
 386/lib/ape/libv.a - 664 sys sys 1050868861 19540
 386/lib/lib9p.a - 664 sys sys 1050585062 80292
-386/lib/libString.a - 664 sys sys 1045538115 18554
+386/lib/libString.a - 664 sys sys 1056364448 22324
 386/lib/libauth.a - 664 sys sys 1053200975 53594
-386/lib/libauthsrv.a - 664 sys sys 1048622923 33706
+386/lib/libauthsrv.a - 664 sys sys 1056364449 33962
 386/lib/libbin.a - 664 sys sys 1045538115 2556
 386/lib/libbio.a - 664 sys sys 1045538115 28390
-386/lib/libc.a - 664 sys sys 1050557206 499524
+386/lib/libc.a - 664 sys sys 1056364451 499548
 386/lib/libcontrol.a - 664 sys sys 1045538117 243448
 386/lib/libdisk.a - 664 sys sys 1048622925 43692
 386/lib/libdraw.a - 664 sys sys 1045538119 372606
 386/lib/libflate.a - 664 sys sys 1045538119 77880
 386/lib/libframe.a - 664 sys sys 1045538119 65832
-386/lib/libgeometry.a - 664 sys sys 1045538120 50806
+386/lib/libgeometry.a - 664 sys sys 1056364452 50806
 386/lib/libhtml.a - 664 sys sys 1045538120 220944
 386/lib/libhttpd.a - 664 sys sys 1048622926 98914
 386/lib/libip.a - 664 sys sys 1050868861 32560
-386/lib/libl.a - 664 sys sys 1045538121 5412
+386/lib/libl.a - 664 sys sys 1056364452 5412
 386/lib/libmach.a - 664 sys sys 1045538123 743792
 386/lib/libmemdraw.a - 664 sys sys 1051110557 292604
 386/lib/libmemlayer.a - 664 sys sys 1051110558 47650
-386/lib/libmp.a - 664 sys sys 1053200976 77064
-386/lib/libndb.a - 664 sys sys 1050868862 52836
+386/lib/libmp.a - 664 sys sys 1056364453 77924
+386/lib/libndb.a - 664 sys sys 1056364453 52836
 386/lib/libplumb.a - 664 sys sys 1045538125 19000
 386/lib/libregexp.a - 664 sys sys 1045538126 37356
-386/lib/libscribble.a - 664 sys sys 1045538126 108138
+386/lib/libscribble.a - 664 sys sys 1056364454 108138
 386/lib/libsec.a - 664 sys sys 1048799711 643936
-386/lib/libstdio.a - 664 sys sys 1055700387 128500
+386/lib/libstdio.a - 664 sys sys 1056364455 128500
 386/lib/libsunrpc.a - 664 sys sys 1050868863 357292
-386/lib/libthread.a - 664 sys sys 1055700446 71726
+386/lib/libthread.a - 664 sys sys 1056364455 71726
 386/lib/libventi.a - 664 sys sys 1048622928 97938
 386/mbr - 775 sys sys 1022125974 407
 386/mkfile - 664 sys sys 948141303 46
@@ -570,13 +573,13 @@ acme/acid/mips - 20000000775 sys sys 1015011246 0
 acme/acid/sparc - 20000000775 sys sys 1015011246 0
 acme/bin - 20000000775 sys sys 1017457907 0
 acme/bin/386 - 20000000775 sys sys 1015011570 0
-acme/bin/386/News - 775 sys sys 1045538112 126431
-acme/bin/386/Wiki - 775 sys sys 1045538113 124615
+acme/bin/386/News - 775 sys sys 1056364445 127189
+acme/bin/386/Wiki - 775 sys sys 1056364446 125373
 acme/bin/386/acd - 775 sys sys 1032232412 137068
 acme/bin/386/adict - 775 sys sys 1015011247 99806
 acme/bin/386/mkwnew - 775 sys sys 1045538113 39475
-acme/bin/386/spout - 775 sys sys 1045538113 60277
-acme/bin/386/win - 775 sys sys 1053200975 179794
+acme/bin/386/spout - 775 sys sys 1056364446 60299
+acme/bin/386/win - 775 sys sys 1056364447 179891
 acme/bin/Battery - 775 sys sys 1017457907 451
 acme/bin/Perl - 775 sys sys 1015011260 230
 acme/bin/README - 664 sys sys 1015011256 174
@@ -633,7 +636,7 @@ acme/bin/unind - 755 sys sys 1015011256 27
 acme/bin/wnew - 775 sys sys 1046184422 84
 acme/mail - 20000000775 sys sys 1015011265 0
 acme/mail/386 - 20000000775 sys sys 1015011538 0
-acme/mail/386/Mail - 775 sys sys 1045538114 176629
+acme/mail/386/Mail - 775 sys sys 1056364448 177497
 acme/mail/Mail - 775 sys sys 1015011264 202
 acme/mail/alpha - 20000000775 sys sys 1015011521 0
 acme/mail/arm - 20000000775 sys sys 1015011525 0
@@ -4745,7 +4748,7 @@ sys/man/3/srv - 664 sys sys 958419690 1470
 sys/man/3/ssl - 664 sys sys 1018386776 3413
 sys/man/3/tls - 664 sys sys 1045501496 7018
 sys/man/3/uart - 664 sys sys 1017679309 1398
-sys/man/3/usb - 664 sys sys 1019866708 6648
+sys/man/3/usb - 664 sys sys 1056364534 6670
 sys/man/3/vga - 664 sys sys 1020356225 4827
 sys/man/4 - 20000000775 sys sys 1018581459 0
 sys/man/4/0intro - 664 sys sys 944959699 472
@@ -5247,7 +5250,7 @@ sys/src/9/port/devproc.c - 664 sys sys 1047952847 23450
 sys/src/9/port/devrealtime.c - 664 sys sys 1055688366 16209
 sys/src/9/port/devroot.c - 664 sys sys 1048912313 4015
 sys/src/9/port/devsd.c - 664 sys sys 1055688396 28669
-sys/src/9/port/devsdp.c - 664 sys sys 1055688405 44800
+sys/src/9/port/devsdp.c - 664 sys sys 1055688405 0
 sys/src/9/port/devsegment.c - 664 sys sys 1017679394 9600
 sys/src/9/port/devsrv.c - 664 sys sys 1014931174 5146
 sys/src/9/port/devssl.c - 664 sys sys 1045063590 26100

+ 371 - 0
dist/replica/plan9.log

@@ -12354,3 +12354,374 @@
 1056337267 0 c sys/src/9/mtx/mtx - 664 sys sys 1056336297 416
 1056337267 1 c sys/src/9/pc/mkfile - 664 sys sys 1056336303 3092
 1056339068 0 c sys/src/cmd/mk/plan9.c - 664 sys sys 1056337347 6921
+1056364356 0 c 386/bin/8a - 775 sys sys 1056364159 113410
+1056364356 1 c 386/bin/9660srv - 775 sys sys 1056364160 105231
+1056364356 2 c 386/bin/aan - 775 sys sys 1056364161 129086
+1056364356 3 c 386/bin/acid - 775 sys sys 1056364162 378300
+1056364356 4 c 386/bin/acme - 775 sys sys 1056364164 417918
+1056364356 5 c 386/bin/ar - 775 sys sys 1056364166 113326
+1056364356 6 c 386/bin/archfs - 775 sys sys 1056364166 142746
+1056364356 7 c 386/bin/ascii - 775 sys sys 1056364167 63286
+1056364356 8 c 386/bin/bc - 775 sys sys 1056364220 80411
+1056364356 9 c 386/bin/bind - 775 sys sys 1056364221 58325
+1056364356 10 c 386/bin/bitsy/bitsyload - 775 sys sys 1056364221 62129
+1056364356 11 c 386/bin/bitsy/keyboard - 775 sys sys 1056364222 302323
+1056364356 12 c 386/bin/bitsy/params - 775 sys sys 1056364223 57294
+1056364356 13 c 386/bin/bitsy/pencal - 775 sys sys 1056364223 115857
+1056364356 14 c 386/bin/bitsy/prompter - 775 sys sys 1056364225 284511
+1056364356 15 c 386/bin/bunzip2 - 775 sys sys 1056364225 96103
+1056364356 16 c 386/bin/bzip2 - 775 sys sys 1056364226 112690
+1056364356 17 c 386/bin/cal - 775 sys sys 1056364226 66698
+1056364356 18 c 386/bin/calendar - 775 sys sys 1056364227 78213
+1056364356 19 c 386/bin/cdfs - 775 sys sys 1056364228 163188
+1056364356 20 c 386/bin/cfs - 775 sys sys 1056364229 129790
+1056364356 21 c 386/bin/chgrp - 775 sys sys 1056364229 58515
+1056364356 22 c 386/bin/chmod - 775 sys sys 1056364230 61759
+1056364356 23 c 386/bin/cleanname - 775 sys sys 1056364230 56670
+1056364356 24 c 386/bin/clock - 775 sys sys 1056364231 155915
+1056364356 25 c 386/bin/colors - 775 sys sys 1056364232 148089
+1056364356 26 c 386/bin/comm - 775 sys sys 1056364232 60023
+1056364356 27 c 386/bin/con - 775 sys sys 1056364233 76525
+1056364356 28 c 386/bin/cp - 775 sys sys 1056364233 62712
+1056364356 29 c 386/bin/cpp - 775 sys sys 1056364234 149065
+1056364356 30 c 386/bin/cpu - 775 sys sys 1056364235 138067
+1056364356 31 c 386/bin/crop - 775 sys sys 1056364235 115607
+1056364356 32 c 386/bin/db - 775 sys sys 1056364237 323651
+1056364356 33 c 386/bin/dc - 775 sys sys 1056364238 97891
+1056364356 34 c 386/bin/dd - 775 sys sys 1056364238 46261
+1056364356 35 c 386/bin/deroff - 775 sys sys 1056364239 73222
+1056364356 36 c 386/bin/dict - 775 sys sys 1056364240 168338
+1056364356 37 c 386/bin/diff - 775 sys sys 1056364240 82287
+1056364356 38 c 386/bin/dossrv - 775 sys sys 1056364248 139926
+1056364356 39 c 386/bin/du - 775 sys sys 1056364248 63087
+1056364356 40 c 386/bin/echo - 775 sys sys 1056364248 55850
+1056364356 41 c 386/bin/ed - 775 sys sys 1056364249 92095
+1056364356 42 c 386/bin/exportfs - 775 sys sys 1056364251 146299
+1056364356 43 c 386/bin/faces - 775 sys sys 1056364253 189795
+1056364356 44 c 386/bin/factor - 775 sys sys 1056364253 60157
+1056364356 45 c 386/bin/fs/32vfs - 775 sys sys 1056364260 96177
+1056364356 46 c 386/bin/fs/cpiofs - 775 sys sys 1056364260 95007
+1056364356 47 c 386/bin/fs/tapfs - 775 sys sys 1056364261 97475
+1056364356 48 c 386/bin/fs/tarfs - 775 sys sys 1056364262 95859
+1056364356 49 c 386/bin/fs/tpfs - 775 sys sys 1056364262 94713
+1056364356 50 c 386/bin/fs/v10fs - 775 sys sys 1056364263 96224
+1056364356 51 c 386/bin/fs/v6fs - 775 sys sys 1056364263 96143
+1056364356 52 c 386/bin/getmap - 775 sys sys 1056364265 63698
+1056364356 53 c 386/bin/gunzip - 775 sys sys 1056364267 79943
+1056364356 54 c 386/bin/gzip - 775 sys sys 1056364268 84038
+1056364356 55 c 386/bin/hget - 775 sys sys 1056364269 220684
+1056364356 56 c 386/bin/history - 775 sys sys 1056364270 72158
+1056364356 57 c 386/bin/htmlfmt - 775 sys sys 1056364272 159154
+1056364356 58 c 386/bin/iconv - 775 sys sys 1056364273 112849
+1056364356 59 c 386/bin/idiff - 775 sys sys 1056364273 75517
+1056364356 60 c 386/bin/lnfs - 775 sys sys 1056364298 100781
+1056364356 61 c 386/bin/nntpfs - 775 sys sys 1056364318 163124
+1056364356 62 c 386/bin/png - 775 sys sys 1056364326 158846
+1056364356 63 c 386/bin/replica/applychanges - 775 sys sys 1056364333 99069
+1056364356 64 c 386/bin/replica/applylog - 775 sys sys 1056364334 99926
+1056364356 65 c 386/bin/replica/compactdb - 775 sys sys 1056364334 77933
+1056364356 66 c 386/bin/replica/updatedb - 775 sys sys 1056364335 95964
+1056364356 67 c 386/bin/resample - 775 sys sys 1056364336 120394
+1056364356 68 c 386/bin/rtstats - 775 sys sys 1056364338 178121
+1056364356 69 c 386/bin/sha1sum - 775 sys sys 1056364344 59603
+1056364356 70 c 386/bin/snap - 775 sys sys 1056364346 288744
+1056364356 71 c 386/bin/snapfs - 775 sys sys 1056364347 360229
+1056364356 72 c 386/bin/srvold9p - 775 sys sys 1056364351 131232
+1056364356 73 c 386/bin/file - 775 sys sys 1056364254 117303
+1056364356 74 c 386/bin/fmt - 775 sys sys 1056364254 63831
+1056364356 75 c 386/bin/fortune - 775 sys sys 1056364255 66354
+1056364356 76 c 386/bin/freq - 775 sys sys 1056364259 60465
+1056364356 77 c 386/bin/ftpfs - 775 sys sys 1056364264 149459
+1056364356 78 c 386/bin/gif - 775 sys sys 1056364265 156803
+1056364356 79 c 386/bin/graph - 775 sys sys 1056364266 128047
+1056364356 80 c 386/bin/grep - 775 sys sys 1056364267 77912
+1056364356 81 c 386/bin/hayes - 775 sys sys 1056364268 63577
+1056364356 82 c 386/bin/hoc - 775 sys sys 1056364270 98978
+1056364356 83 c 386/bin/html2ms - 775 sys sys 1056364271 64752
+1056364356 84 c 386/bin/import - 775 sys sys 1056364274 88051
+1056364356 85 c 386/bin/iostats - 775 sys sys 1056364274 98565
+1056364356 86 c 386/bin/join - 775 sys sys 1056364293 115124
+1056364356 87 c 386/bin/jpg - 775 sys sys 1056364294 173498
+1056364356 88 c 386/bin/kprof - 775 sys sys 1056364295 101924
+1056364356 89 c 386/bin/ktrace - 775 sys sys 1056364296 115151
+1056364356 90 c 386/bin/lens - 775 sys sys 1056364296 123061
+1056364356 91 c 386/bin/lex - 775 sys sys 1056364297 97550
+1056364356 92 c 386/bin/look - 775 sys sys 1056364298 64482
+1056364356 93 c 386/bin/ls - 775 sys sys 1056364299 81355
+1056364356 94 c 386/bin/mc - 775 sys sys 1056364300 129727
+1056364356 95 c 386/bin/md5sum - 775 sys sys 1056364300 59735
+1056364356 96 c 386/bin/mk - 775 sys sys 1056364301 143580
+1056364356 97 c 386/bin/mkdir - 775 sys sys 1056364301 57859
+1056364356 98 c 386/bin/mount - 775 sys sys 1056364304 71752
+1056364356 99 c 386/bin/ms2html - 775 sys sys 1056364305 102469
+1056364356 100 c 386/bin/mv - 775 sys sys 1056364306 65018
+1056364356 101 c 386/bin/netkey - 775 sys sys 1056364314 70775
+1056364356 102 c 386/bin/netstat - 775 sys sys 1056364314 81403
+1056364356 103 c 386/bin/news - 775 sys sys 1056364315 70534
+1056364356 104 c 386/bin/nm - 775 sys sys 1056364317 123249
+1056364356 105 c 386/bin/ns - 775 sys sys 1056364318 63850
+1056364356 106 c 386/bin/p - 775 sys sys 1056364319 63805
+1056364356 107 c 386/bin/page - 775 sys sys 1056364320 216114
+1056364356 108 c 386/bin/passwd - 775 sys sys 1056364321 80240
+1056364356 109 c 386/bin/pcc - 775 sys sys 1056364322 66385
+1056364356 110 c 386/bin/plot - 775 sys sys 1056364323 220308
+1056364356 111 c 386/bin/plumb - 775 sys sys 1056364323 65493
+1056364356 112 c 386/bin/plumber - 775 sys sys 1056364325 170719
+1056364356 113 c 386/bin/ppm - 775 sys sys 1056364327 147862
+1056364356 114 c 386/bin/pr - 775 sys sys 1056364327 76591
+1056364356 115 c 386/bin/prof - 775 sys sys 1056364328 106400
+1056364356 116 c 386/bin/proof - 775 sys sys 1056364329 176456
+1056364356 117 c 386/bin/ps - 775 sys sys 1056364329 64653
+1056364356 118 c 386/bin/ramfs - 775 sys sys 1056364330 89911
+1056364356 119 c 386/bin/rc - 775 sys sys 1056364331 141610
+1056364356 120 c 386/bin/rdbfs - 775 sys sys 1056364332 170550
+1056364356 121 c 386/bin/read - 775 sys sys 1056364332 56564
+1056364356 122 c 386/bin/rio - 775 sys sys 1056364337 303633
+1056364356 123 c 386/bin/rm - 775 sys sys 1056364337 60056
+1056364356 124 c 386/bin/rx - 775 sys sys 1056364339 79759
+1056364356 125 c 386/bin/sam - 775 sys sys 1056364340 156918
+1056364356 126 c 386/bin/scat - 775 sys sys 1056364341 282726
+1056364356 127 c 386/bin/scp - 775 sys sys 1056364342 150897
+1056364356 128 c 386/bin/scuzz - 775 sys sys 1056364343 111018
+1056364356 129 c 386/bin/sed - 775 sys sys 1056364343 88450
+1056364356 130 c 386/bin/size - 775 sys sys 1056364344 76317
+1056364356 131 c 386/bin/snoopy - 775 sys sys 1056364348 154149
+1056364356 132 c 386/bin/sort - 775 sys sys 1056364349 81316
+1056364356 133 c 386/bin/split - 775 sys sys 1056364349 74247
+1056364356 134 c 386/bin/srv - 775 sys sys 1056364350 80895
+1056364356 135 c 386/bin/ssh - 775 sys sys 1056364352 210193
+1056364356 136 c 386/bin/stats - 775 sys sys 1056364354 188475
+1056364356 137 c 386/bin/strings - 775 sys sys 1056364355 60901
+1056364356 138 c 386/bin/strip - 775 sys sys 1056364355 60851
+1056364356 139 c 386/bin/swap - 775 sys sys 1056364356 60869
+1056364356 140 c 386/bin/ape/cc - 775 sys sys 1056364165 69060
+1056364356 141 c 386/bin/ape/tar - 775 sys sys 1056364165 60433
+1056364356 142 c 386/bin/auth/aescbc - 775 sys sys 1056364168 121640
+1056364356 143 c 386/bin/auth/asn12rsa - 775 sys sys 1056364169 118224
+1056364356 144 c 386/bin/auth/authsrv - 775 sys sys 1056364170 162727
+1056364356 145 c 386/bin/auth/changeuser - 775 sys sys 1056364170 96113
+1056364356 146 c 386/bin/auth/convkeys - 775 sys sys 1056364171 86307
+1056364356 147 c 386/bin/auth/convkeys2 - 775 sys sys 1056364171 86323
+1056364356 148 c 386/bin/auth/cron - 775 sys sys 1056364172 141337
+1056364356 149 c 386/bin/auth/debug - 775 sys sys 1056364173 98195
+1056364356 150 c 386/bin/auth/factotum - 775 sys sys 1056364174 309094
+1056364356 151 c 386/bin/auth/fgui - 775 sys sys 1056364176 212785
+1056364356 152 c 386/bin/auth/guard.srv - 775 sys sys 1056364177 140570
+1056364356 153 c 386/bin/auth/keyfs - 775 sys sys 1056364178 116737
+1056364356 154 c 386/bin/auth/login - 775 sys sys 1056364178 101415
+1056364356 155 c 386/bin/auth/newns - 775 sys sys 1056364179 86073
+1056364356 156 c 386/bin/auth/pemdecode - 775 sys sys 1056364179 59636
+1056364356 157 c 386/bin/auth/pemencode - 775 sys sys 1056364180 58365
+1056364356 158 c 386/bin/auth/rsa2csr - 775 sys sys 1056364180 178336
+1056364356 159 c 386/bin/auth/rsa2pub - 775 sys sys 1056364181 142223
+1056364356 160 c 386/bin/auth/rsa2ssh - 775 sys sys 1056364182 137618
+1056364356 161 c 386/bin/auth/rsa2x509 - 775 sys sys 1056364183 182342
+1056364356 162 c 386/bin/auth/rsafill - 775 sys sys 1056364184 142291
+1056364356 163 c 386/bin/auth/rsagen - 775 sys sys 1056364185 153239
+1056364356 164 c 386/bin/auth/secstore - 775 sys sys 1056364186 187992
+1056364356 165 c 386/bin/auth/secstored - 775 sys sys 1056364187 194114
+1056364356 166 c 386/bin/auth/secuser - 775 sys sys 1056364188 150569
+1056364356 167 c 386/bin/auth/uniq - 775 sys sys 1056364188 61793
+1056364356 168 c 386/bin/auth/warning - 775 sys sys 1056364189 98089
+1056364356 169 c 386/bin/auth/wrkey - 775 sys sys 1056364189 73583
+1056364356 170 c 386/bin/aux/9pcon - 775 sys sys 1056364190 96179
+1056364356 171 c 386/bin/aux/LOCK - 775 sys sys 1056364190 58714
+1056364356 172 c 386/bin/aux/acidleak - 775 sys sys 1056364191 68086
+1056364356 173 c 386/bin/aux/apm - 775 sys sys 1056364192 175935
+1056364356 174 c 386/bin/aux/astarld - 775 sys sys 1056364192 63544
+1056364356 175 c 386/bin/aux/cddb - 775 sys sys 1056364193 70460
+1056364356 176 c 386/bin/aux/clog - 775 sys sys 1056364193 65430
+1056364356 177 c 386/bin/aux/consolefs - 775 sys sys 1056364194 154510
+1056364356 178 c 386/bin/aux/data2s - 775 sys sys 1056364194 59200
+1056364356 179 c 386/bin/aux/depend - 775 sys sys 1056364195 146648
+1056364356 180 c 386/bin/aux/disksim - 775 sys sys 1056364196 146022
+1056364356 181 c 386/bin/aux/faxreceive - 775 sys sys 1056364196 83443
+1056364356 182 c 386/bin/aux/faxsend - 775 sys sys 1056364197 88849
+1056364356 183 c 386/bin/aux/flashfs - 775 sys sys 1056364198 161834
+1056364356 184 c 386/bin/aux/g3p9bit - 775 sys sys 1056364198 65857
+1056364356 185 c 386/bin/aux/lines - 775 sys sys 1056364199 59174
+1056364356 186 c 386/bin/aux/listen - 775 sys sys 1056364200 105169
+1056364356 187 c 386/bin/aux/listen1 - 775 sys sys 1056364200 91464
+1056364356 188 c 386/bin/aux/mapd - 775 sys sys 1056364201 191654
+1056364356 189 c 386/bin/aux/mkflashfs - 775 sys sys 1056364202 66263
+1056364356 190 c 386/bin/aux/mklatinkbd - 775 sys sys 1056364202 62883
+1056364356 191 c 386/bin/aux/mnihongo - 775 sys sys 1056364203 137116
+1056364356 192 c 386/bin/aux/ms2 - 775 sys sys 1056364203 84073
+1056364356 193 c 386/bin/aux/mswordstrings - 775 sys sys 1056364204 64290
+1056364356 194 c 386/bin/aux/na - 775 sys sys 1056364204 153457
+1056364356 195 c 386/bin/aux/nfsmount - 775 sys sys 1056364206 232174
+1056364356 196 c 386/bin/aux/nfsserver - 775 sys sys 1056364207 171115
+1056364356 197 c 386/bin/aux/olefs - 775 sys sys 1056364207 145658
+1056364356 198 c 386/bin/aux/p9bitpost - 775 sys sys 1056364208 128092
+1056364356 199 c 386/bin/aux/pcnfsd - 775 sys sys 1056364209 126809
+1056364356 200 c 386/bin/aux/portmap - 775 sys sys 1056364210 141721
+1056364356 201 c 386/bin/aux/portmapper - 775 sys sys 1056364210 125697
+1056364356 202 c 386/bin/aux/reboot - 775 sys sys 1056364211 59072
+1056364356 203 c 386/bin/aux/samterm - 775 sys sys 1056364212 245576
+1056364356 204 c 386/bin/aux/searchfs - 775 sys sys 1056364213 90997
+1056364356 205 c 386/bin/aux/sprog - 775 sys sys 1056364213 77788
+1056364356 206 c 386/bin/aux/sshserve - 775 sys sys 1056364214 250351
+1056364356 207 c 386/bin/aux/stub - 775 sys sys 1056364215 136382
+1056364356 208 c 386/bin/aux/text2post - 775 sys sys 1056364215 77273
+1056364356 209 c 386/bin/aux/timesync - 775 sys sys 1056364216 128107
+1056364356 210 c 386/bin/aux/tr2post - 775 sys sys 1056364217 176207
+1056364356 211 c 386/bin/aux/trampoline - 775 sys sys 1056364218 81185
+1056364356 212 c 386/bin/aux/typepasswd - 775 sys sys 1056364218 68176
+1056364356 213 c 386/bin/aux/vga - 775 sys sys 1056364219 300334
+1056364356 214 c 386/bin/disk/dump9660 - 775 sys sys 1056364241 151552
+1056364356 215 c 386/bin/disk/exsort - 775 sys sys 1056364242 58811
+1056364356 216 c 386/bin/disk/fdisk - 775 sys sys 1056364242 106909
+1056364356 217 c 386/bin/disk/format - 775 sys sys 1056364243 91891
+1056364356 218 c 386/bin/disk/kfs - 775 sys sys 1056364244 249498
+1056364356 219 c 386/bin/disk/mbr - 775 sys sys 1056364245 72359
+1056364356 220 c 386/bin/disk/mkext - 775 sys sys 1056364245 77841
+1056364356 221 c 386/bin/disk/mkfs - 775 sys sys 1056364246 87469
+1056364356 222 c 386/bin/disk/prep - 775 sys sys 1056364247 99395
+1056364356 223 c 386/bin/execnet - 775 sys sys 1056364250 173778
+1056364356 224 a 386/bin/ext2srv - 775 sys sys 1056364252 176277
+1056364356 225 a 386/bin/fossil/conf - 775 sys sys 1056364255 1497
+1056364356 226 c 386/bin/fossil/flchk - 775 sys sys 1056364256 231855
+1056364356 227 c 386/bin/fossil/flfmt - 775 sys sys 1056364257 229849
+1056364356 228 c 386/bin/fossil/fossil - 775 sys sys 1056364259 344661
+1056364356 229 c 386/bin/ip/dhcpclient - 775 sys sys 1056364275 92384
+1056364356 230 c 386/bin/ip/dhcpd - 775 sys sys 1056364276 145151
+1056364356 231 c 386/bin/ip/dhcpleases - 775 sys sys 1056364276 84688
+1056364356 232 c 386/bin/ip/ftpd - 775 sys sys 1056364277 167419
+1056364356 233 c 386/bin/ip/gping - 775 sys sys 1056364278 180356
+1056364356 234 c 386/bin/ip/httpd/httpd - 775 sys sys 1056364279 288320
+1056364356 235 c 386/bin/ip/httpd/imagemap - 775 sys sys 1056364280 113683
+1056364356 236 c 386/bin/ip/httpd/man2html - 775 sys sys 1056364281 121949
+1056364356 237 c 386/bin/ip/httpd/save - 775 sys sys 1056364282 131012
+1056364356 238 c 386/bin/ip/httpd/wikipost - 775 sys sys 1056364282 111370
+1056364356 239 c 386/bin/ip/imap4d - 775 sys sys 1056364283 233876
+1056364356 240 c 386/bin/ip/ipconfig - 775 sys sys 1056364284 102995
+1056364356 241 c 386/bin/ip/ping - 775 sys sys 1056364285 74035
+1056364356 242 c 386/bin/ip/ppp - 775 sys sys 1056364286 215444
+1056364356 243 c 386/bin/ip/pppoe - 775 sys sys 1056364286 75503
+1056364356 244 c 386/bin/ip/pptp - 775 sys sys 1056364287 124043
+1056364356 245 c 386/bin/ip/pptpd - 775 sys sys 1056364288 124298
+1056364356 246 c 386/bin/ip/rarpd - 775 sys sys 1056364288 107251
+1056364356 247 c 386/bin/ip/rexexec - 775 sys sys 1056364289 87026
+1056364356 248 c 386/bin/ip/rip - 775 sys sys 1056364290 89843
+1056364356 249 c 386/bin/ip/rlogind - 775 sys sys 1056364290 66409
+1056364356 250 c 386/bin/ip/telnetd - 775 sys sys 1056364291 120344
+1056364356 251 c 386/bin/ip/tftpd - 775 sys sys 1056364292 102563
+1056364356 252 c 386/bin/ip/traceroute - 775 sys sys 1056364292 70872
+1056364356 253 c 386/bin/mkpaqfs - 775 sys sys 1056364302 93514
+1056364356 254 c 386/bin/mkstate - 775 sys sys 1056364303 62195
+1056364356 255 c 386/bin/mntgen - 775 sys sys 1056364304 136934
+1056364356 256 c 386/bin/mtime - 775 sys sys 1056364305 57898
+1056364356 257 c 386/bin/ndb/cs - 775 sys sys 1056364307 143921
+1056364356 258 c 386/bin/ndb/csquery - 775 sys sys 1056364307 60158
+1056364356 259 c 386/bin/ndb/dns - 775 sys sys 1056364308 216571
+1056364356 260 c 386/bin/ndb/dnsdebug - 775 sys sys 1056364309 188863
+1056364356 261 c 386/bin/ndb/dnsquery - 775 sys sys 1056364309 62464
+1056364356 262 c 386/bin/ndb/dnstcp - 775 sys sys 1056364310 187648
+1056364356 263 c 386/bin/ndb/ipquery - 775 sys sys 1056364311 91700
+1056364356 264 c 386/bin/ndb/mkdb - 775 sys sys 1056364311 62654
+1056364356 265 c 386/bin/ndb/mkhash - 775 sys sys 1056364312 82316
+1056364356 266 c 386/bin/ndb/mkhosts - 775 sys sys 1056364313 83260
+1056364356 267 c 386/bin/ndb/query - 775 sys sys 1056364313 81058
+1056364356 268 c 386/bin/nfs - 775 sys sys 1056364316 317130
+1056364356 269 c 386/bin/paqfs - 775 sys sys 1056364321 108098
+1056364356 270 c 386/bin/sshnet - 775 sys sys 1056364353 284280
+1056364356 271 c 386/bin/syscall - 775 sys sys 1056364356 72651
+1056364356 272 c 386/bin/tail - 775 sys sys 1056364357 64907
+1056364356 273 c 386/bin/tar - 775 sys sys 1056364357 81348
+1056364356 274 c 386/bin/tbl - 775 sys sys 1056364358 111820
+1056364356 275 c 386/bin/telco - 775 sys sys 1056364359 105080
+1056364356 276 c 386/bin/telnet - 775 sys sys 1056364359 80831
+1056364356 277 c 386/bin/test - 775 sys sys 1056364360 63938
+1056364356 278 c 386/bin/time - 775 sys sys 1056364360 59832
+1056364356 279 c 386/bin/tlsclient - 775 sys sys 1056364361 196325
+1056364356 280 c 386/bin/tlssrv - 775 sys sys 1056364362 196645
+1056364356 281 c 386/bin/togif - 775 sys sys 1056364363 189770
+1056364356 282 c 386/bin/toppm - 775 sys sys 1056364365 165207
+1056366156 0 c 386/9pc - 775 sys sys 1056364430 1822650
+1056366156 1 c 386/9pccpu - 775 sys sys 1056364435 1474348
+1056366156 2 c 386/9pcdisk - 775 sys sys 1056364442 2049101
+1056366156 3 c 386/9pxeload - 775 sys sys 1056364444 180364
+1056366156 4 c 386/bin/topng - 775 sys sys 1056364364 137991
+1056366156 5 c 386/bin/troff2html - 775 sys sys 1056364368 81052
+1056366156 6 c 386/bin/unzip - 775 sys sys 1056364371 90133
+1056366156 7 c 386/bin/usb/usbaudio - 775 sys sys 1056364391 176315
+1056366156 8 c 386/bin/usb/usbd - 775 sys sys 1056364392 122990
+1056366156 9 c 386/bin/usb/usbmouse - 775 sys sys 1056364393 138183
+1056366156 10 c 386/bin/venti/buildindex - 775 sys sys 1056364396 160755
+1056366156 11 c 386/bin/venti/checkarenas - 775 sys sys 1056364397 164707
+1056366156 12 c 386/bin/venti/checkindex - 775 sys sys 1056364398 161561
+1056366156 13 c 386/bin/venti/clumpstats - 775 sys sys 1056364399 150754
+1056366156 14 a 386/bin/venti/conf - 775 sys sys 1056364399 1506
+1056366156 15 c 386/bin/venti/copy - 775 sys sys 1056364400 104507
+1056366156 16 c 386/bin/venti/findscore - 775 sys sys 1056364401 131629
+1056366156 17 c 386/bin/venti/fmtarenas - 775 sys sys 1056364402 132874
+1056366156 18 c 386/bin/venti/fmtindex - 775 sys sys 1056364403 151117
+1056366156 19 c 386/bin/venti/fmtisect - 775 sys sys 1056364404 151001
+1056366156 20 c 386/bin/venti/rdarena - 775 sys sys 1056364405 131355
+1056366156 21 c 386/bin/venti/read - 775 sys sys 1056364405 100780
+1056366156 22 c 386/bin/venti/sync - 775 sys sys 1056364406 99930
+1056366156 23 c 386/bin/venti/syncindex - 775 sys sys 1056364407 176177
+1056366156 24 c 386/bin/venti/venti - 775 sys sys 1056364408 252761
+1056366156 25 c 386/bin/venti/verifyarena - 775 sys sys 1056364409 104872
+1056366156 26 c 386/bin/venti/wrarena - 775 sys sys 1056364410 181842
+1056366156 27 c 386/bin/venti/write - 775 sys sys 1056364411 100732
+1056366156 28 c 386/bin/vncs - 775 sys sys 1056364413 442713
+1056366156 29 c 386/bin/vncv - 775 sys sys 1056364414 270829
+1056366156 30 c 386/bin/webcookies - 775 sys sys 1056364417 163015
+1056366156 31 c 386/bin/wikifs - 775 sys sys 1056364420 197606
+1056366156 32 c 386/bin/zip - 775 sys sys 1056364422 89339
+1056366156 33 c 386/bin/vtdump - 775 sys sys 1056364416 161091
+1056366156 34 c 386/bin/webfs - 775 sys sys 1056364419 351240
+1056366156 35 c 386/bin/winwatch - 775 sys sys 1056364421 141746
+1056366156 36 c 386/bin/touch - 775 sys sys 1056364366 63231
+1056366156 37 c 386/bin/tprof - 775 sys sys 1056364367 273491
+1056366156 38 c 386/bin/tr - 775 sys sys 1056364368 60560
+1056366156 39 c 386/bin/tweak - 775 sys sys 1056364369 191022
+1056366156 40 c 386/bin/unicode - 775 sys sys 1056364370 61115
+1056366156 41 c 386/bin/uniq - 775 sys sys 1056364370 60580
+1056366156 42 c 386/bin/units - 775 sys sys 1056364371 73899
+1056366156 43 c 386/bin/upas/aliasmail - 775 sys sys 1056364372 101747
+1056366156 44 c 386/bin/upas/deliver - 775 sys sys 1056364373 98303
+1056366156 45 c 386/bin/upas/filter - 775 sys sys 1056364374 145705
+1056366156 46 c 386/bin/upas/fs - 775 sys sys 1056364375 331545
+1056366156 47 c 386/bin/upas/list - 775 sys sys 1056364376 81442
+1056366156 48 c 386/bin/upas/marshal - 775 sys sys 1056364377 129414
+1056366156 49 c 386/bin/upas/ml - 775 sys sys 1056364378 118225
+1056366156 50 c 386/bin/upas/mlmgr - 775 sys sys 1056364379 101122
+1056366156 51 c 386/bin/upas/mlowner - 775 sys sys 1056364379 90420
+1056366156 52 c 386/bin/upas/nedmail - 775 sys sys 1056364380 149925
+1056366156 53 c 386/bin/upas/pop3 - 775 sys sys 1056364381 256132
+1056366156 54 c 386/bin/upas/qer - 775 sys sys 1056364382 98666
+1056366156 55 c 386/bin/upas/ratfs - 775 sys sys 1056364383 112414
+1056366156 56 c 386/bin/upas/runq - 775 sys sys 1056364383 111451
+1056366156 57 c 386/bin/upas/scanmail - 775 sys sys 1056364384 127737
+1056366156 58 c 386/bin/upas/send - 775 sys sys 1056364385 189233
+1056366156 59 c 386/bin/upas/smtp - 775 sys sys 1056364386 269559
+1056366156 60 c 386/bin/upas/smtpd - 775 sys sys 1056364388 312832
+1056366156 61 c 386/bin/upas/testscan - 775 sys sys 1056364389 82401
+1056366156 62 c 386/bin/upas/token - 775 sys sys 1056364389 76198
+1056366156 63 c 386/bin/upas/vf - 775 sys sys 1056364390 90554
+1056366156 64 c 386/bin/vac - 775 sys sys 1056364394 171476
+1056366156 65 c 386/bin/vacfs - 775 sys sys 1056364395 177651
+1056366156 66 c 386/bin/vt - 775 sys sys 1056364415 171566
+1056366156 67 c 386/bin/xd - 775 sys sys 1056364421 62824
+1056366156 68 c 386/bin/yacc - 775 sys sys 1056364422 100873
+1056366156 69 c 386/init - 775 sys sys 1056364423 97989
+1056366156 70 c 386/lib/libString.a - 664 sys sys 1056364448 22324
+1056366156 71 c 386/lib/libauthsrv.a - 664 sys sys 1056364449 33962
+1056366156 72 c 386/lib/libc.a - 664 sys sys 1056364451 499548
+1056366156 73 c 386/lib/libgeometry.a - 664 sys sys 1056364452 50806
+1056366156 74 c 386/lib/libl.a - 664 sys sys 1056364452 5412
+1056366156 75 c 386/lib/libmp.a - 664 sys sys 1056364453 77924
+1056366156 76 c 386/lib/libndb.a - 664 sys sys 1056364453 52836
+1056366156 77 c 386/lib/libscribble.a - 664 sys sys 1056364454 108138
+1056366156 78 c 386/lib/libstdio.a - 664 sys sys 1056364455 128500
+1056366156 79 c 386/lib/libthread.a - 664 sys sys 1056364455 71726
+1056366156 80 c acme/bin/386/News - 775 sys sys 1056364445 127189
+1056366156 81 c acme/bin/386/Wiki - 775 sys sys 1056364446 125373
+1056366156 82 c acme/bin/386/spout - 775 sys sys 1056364446 60299
+1056366156 83 c acme/bin/386/win - 775 sys sys 1056364447 179891
+1056366156 84 c acme/mail/386/Mail - 775 sys sys 1056364448 177497
+1056366156 85 c sys/man/3/usb - 664 sys sys 1056364534 6670
+1056391380 0 c sys/src/9/port/devsdp.c - 664 sys sys 1055688405 0
+1056398466 0 c 386/bin/upas/deliver - 775 sys sys 1056397816 98261

+ 4 - 2
sys/man/3/usb

@@ -110,12 +110,14 @@ is the endpoint to be configured, and
 .I mode
 is
 .B r
-for read only, or
+for read only,
 .B w
+for write only, or
+.B rw
 for reading and writing.
 In the first form,
 .I maxpkt
-is the maximum packet size to be used (between 1 and 2048),
+is the maximum packet size to be used (between 8 and 1023),
 and
 .I nbuf
 is the number of buffers to be allocated by the driver.

+ 0 - 2316
sys/src/9/port/devsdp.c

@@ -1,2316 +0,0 @@
-#include "u.h"
-#include "../port/lib.h"
-#include "mem.h"
-#include "dat.h"
-#include "fns.h"
-#include "../port/netif.h"
-#include "../port/error.h"
-
-#include	<libsec.h>
-#include "../port/thwack.h"
-
-/*
- * sdp - secure datagram protocol
- */
-
-typedef struct Sdp Sdp;
-typedef struct Conv Conv;
-typedef struct OneWay OneWay;
-typedef struct Stats Stats;
-typedef struct AckPkt AckPkt;
-typedef struct Algorithm Algorithm;
-typedef struct CipherRc4 CipherRc4;
-
-enum
-{
-	Qtopdir=	1,		/* top level directory */
-
-	Qsdpdir,			/* sdp directory */
-	Qclone,
-	Qlog,
-
-	Qconvdir,			/* directory per conversation */
-	Qctl,
-	Qdata,				/* unreliable packet channel */
-	Qcontrol,			/* reliable control channel */
-	Qstatus,
-	Qstats,
-	Qrstats,
-
-	MaxQ,
-
-	Maxconv= 256,		// power of 2
-	Nfs= 4,			// number of file systems
-	MaxRetries=	12,
-	KeepAlive = 300,	// keep alive in seconds - should probably be about 60 but is higher to avoid linksys bug
-	SecretLength= 32,	// a secret per direction
-	SeqMax = (1<<24),
-	SeqWindow = 32,
-	NCompStats = 8,
-};
-
-#define TYPE(x) 	(((ulong)(x).path) & 0xff)
-#define CONV(x) 	((((ulong)(x).path) >> 8)&(Maxconv-1))
-#define QID(x, y) 	(((x)<<8) | (y))
-
-struct Stats
-{
-	ulong	outPackets;
-	ulong	outDataPackets;
-	ulong	outDataBytes;
-	ulong	outCompDataBytes;
-	ulong	outCompBytes;
-	ulong	outCompStats[NCompStats];
-	ulong	inPackets;
-	ulong	inDataPackets;
-	ulong	inDataBytes;
-	ulong	inCompDataBytes;
-	ulong	inMissing;
-	ulong	inDup;
-	ulong	inReorder;
-	ulong	inBadComp;
-	ulong	inBadAuth;
-	ulong	inBadSeq;
-	ulong	inBadOther;
-};
-
-struct OneWay
-{
-	Rendez	statsready;
-
-	ulong	seqwrap;	// number of wraps of the sequence number
-	ulong	seq;
-	ulong	window;
-
-	uchar	secret[SecretLength];
-
-	QLock	controllk;
-	Rendez	controlready;
-	Block	*controlpkt;		// control channel
-	ulong	controlseq;
-
-	void	*cipherstate;	// state cipher
-	int		cipherivlen;	// initial vector length
-	int		cipherblklen;	// block length
-	int		(*cipher)(OneWay*, uchar *buf, int len);
-
-	void	*authstate;		// auth state
-	int		authlen;		// auth data length in bytes
-	int		(*auth)(OneWay*, uchar *buf, int len);
-
-	void	*compstate;
-	int		(*comp)(Conv*, int subtype, ulong seq, Block **);
-};
-
-// conv states
-enum {
-	CFree,
-	CInit,
-	CDial,
-	CAccept,
-	COpen,
-	CLocalClose,
-	CRemoteClose,
-	CClosed,
-};
-
-struct Conv {
-	QLock;
-	Sdp	*sdp;
-	int	id;
-
-	int ref;	// holds conv up
-
-	int state;
-
-	int dataopen;	// ref count of opens on Qdata
-	int controlopen;	// ref count of opens on Qcontrol
-	int reader;		// reader proc has been started
-
-	Stats	lstats;
-	Stats	rstats;
-	
-	ulong	lastrecv;	// time last packet was received 
-	ulong	timeout;
-	int		retries;
-
-	// the following pair uniquely define conversation on this port
-	ulong dialid;
-	ulong acceptid;
-
-	QLock readlk;		// protects readproc
-	Proc *readproc;
-
-	Chan *chan;		// packet channel
-	char *channame;
-
-	char owner[KNAMELEN];		/* protections */
-	int	perm;
-
-	Algorithm *auth;
-	Algorithm *cipher;
-	Algorithm *comp;
-
-	int drop;
-
-	OneWay	in;
-	OneWay	out;
-};
-
-struct Sdp {
-	QLock;
-	Log;
-	int	nconv;
-	Conv *conv[Maxconv];
-	int ackproc;
-};
-
-enum {
-	TConnect,
-	TControl,
-	TData,
-	TCompData,
-};
-
-enum {
-	ControlMesg,
-	ControlAck,
-};
-
-enum {
-	ThwackU,
-	ThwackC,
-};
-
-enum {
-	ConOpenRequest,
-	ConOpenAck,
-	ConOpenAckAck,
-	ConClose,
-	ConCloseAck,
-	ConReset,
-};
-
-struct AckPkt
-{
-	uchar	cseq[4];
-	uchar	outPackets[4];
-	uchar	outDataPackets[4];
-	uchar	outDataBytes[4];
-	uchar	outCompDataBytes[4];
-	uchar	outCompStats[4*NCompStats];
-	uchar	inPackets[4];
-	uchar	inDataPackets[4];
-	uchar	inDataBytes[4];
-	uchar	inCompDataBytes[4];
-	uchar	inMissing[4];
-	uchar	inDup[4];
-	uchar	inReorder[4];
-	uchar	inBadComp[4];
-	uchar	inBadAuth[4];
-	uchar	inBadSeq[4];
-	uchar	inBadOther[4];
-};
-
-struct Algorithm
-{
-	char 	*name;
-	int		keylen;		// in bytes
-	void	(*init)(Conv*);
-};
-
-enum {
-	RC4forward	= 10*1024*1024,	// maximum skip forward
-	RC4back = 100*1024,		// maximum look back
-};
-
-struct CipherRc4
-{
-	ulong cseq;	// current byte sequence number
-	RC4state current;
-
-	int ovalid;	// old is valid
-	ulong lgseq; // last good sequence
-	ulong oseq;	// old byte sequence number
-	RC4state old;
-};
-
-static Dirtab sdpdirtab[]={
-	"log",		{Qlog},		0,	0666,
-	"clone",	{Qclone},		0,	0666,
-};
-
-static Dirtab convdirtab[]={
-	"ctl",		{Qctl},	0,	0666,
-	"data",		{Qdata},	0,	0666,
-	"control",	{Qcontrol},	0,	0666,
-	"status",	{Qstatus},	0,	0444,
-	"stats",	{Qstats},	0,	0444,
-	"rstats",	{Qrstats},	0,	0444,
-};
-
-static int m2p[] = {
-	[OREAD]		4,
-	[OWRITE]	2,
-	[ORDWR]		6
-};
-
-enum {
-	Logcompress=	(1<<0),
-	Logauth=	(1<<1),
-	Loghmac=	(1<<2),
-};
-
-static Logflag logflags[] =
-{
-	{ "compress",	Logcompress, },
-	{ "auth",	Logauth, },
-	{ "hmac",	Loghmac, },
-	{ nil,		0, },
-};
-
-static Dirtab	*dirtab[MaxQ];
-static Sdp sdptab[Nfs];
-static char *convstatename[] = {
-	[CFree]		"Free",
-	[CInit]		"Init",
-	[CDial]		"Dial",
-	[CAccept]	"Accept",
-	[COpen]		"Open",
-	[CLocalClose] "LocalClose",
-	[CRemoteClose] "RemoteClose",
-	[CClosed]	"Closed",
-};
-
-static int sdpgen(Chan *c, char*, Dirtab*, int, int s, Dir *dp);
-static Conv *sdpclone(Sdp *sdp);
-static void sdpackproc(void *a);
-static void onewaycleanup(OneWay *ow);
-static int readready(void *a);
-static int controlread();
-static void convsetstate(Conv *c, int state);
-static Block *readcontrol(Conv *c, int n);
-static void writecontrol(Conv *c, void *p, int n, int wait);
-static Block *readdata(Conv *c, int n);
-static long writedata(Conv *c, Block *b);
-static void convderef(Conv *c);
-static Block *conviput(Conv *c, Block *b, int control);
-static void conviconnect(Conv *c, int op, Block *b);
-static void convicontrol(Conv *c, int op, Block *b);
-static Block *convicomp(Conv *c, int op, ulong, Block *b);
-static void convoput(Conv *c, int type, int subtype, Block *b);
-static void convoconnect(Conv *c, int op, ulong dialid, ulong acceptid);
-static void convopenchan(Conv *c, char *path);
-static void convstats(Conv *c, int local, char *buf, int n);
-static void convreader(void *a);
-
-static void setalg(Conv *c, char *name, Algorithm *tab, Algorithm **);
-static void setsecret(OneWay *cc, char *secret);
-
-static void nullcipherinit(Conv*c);
-static void descipherinit(Conv*c);
-static void rc4cipherinit(Conv*c);
-static void nullauthinit(Conv*c);
-static void shaauthinit(Conv*c);
-static void md5authinit(Conv*c);
-static void nullcompinit(Conv*c);
-static void thwackcompinit(Conv*c);
-
-static Algorithm cipheralg[] =
-{
-	"null",			0,	nullcipherinit,
-	"des_56_cbc",	7,	descipherinit,
-	"rc4_128",		16,	rc4cipherinit,
-	"rc4_256",		32,	rc4cipherinit,
-	nil,			0,	nil,
-};
-
-static Algorithm authalg[] =
-{
-	"null",			0,	nullauthinit,
-	"hmac_sha1_96",	16,	shaauthinit,
-	"hmac_md5_96",	16,	md5authinit,
-	nil,			0,	nil,
-};
-
-static Algorithm compalg[] =
-{
-	"null",			0,	nullcompinit,
-	"thwack",		0,	thwackcompinit,
-	nil,			0,	nil,
-};
-
-
-static void
-sdpinit(void)
-{
-	int i;
-	Dirtab *dt;
-	
-	// setup dirtab with non directory entries
-	for(i=0; i<nelem(sdpdirtab); i++) {
-		dt = sdpdirtab + i;
-		dirtab[TYPE(dt->qid)] = dt;
-	}
-
-	for(i=0; i<nelem(convdirtab); i++) {
-		dt = convdirtab + i;
-		dirtab[TYPE(dt->qid)] = dt;
-	}
-
-}
-
-static Chan*
-sdpattach(char* spec)
-{
-	Chan *c;
-	int dev;
-	char buf[100];
-	Sdp *sdp;
-	int start;
-
-	dev = atoi(spec);
-	if(dev<0 || dev >= Nfs)
-		error("bad specification");
-
-	c = devattach('E', spec);
-	c->qid = (Qid){QID(0, Qtopdir), 0, QTDIR};
-	c->dev = dev;
-
-	sdp = sdptab + dev;
-	qlock(sdp);
-	start = sdp->ackproc == 0;
-	sdp->ackproc = 1;
-	qunlock(sdp);
-
-	if(start) {
-		snprint(buf, sizeof(buf), "sdpackproc%d", dev);
-		kproc(buf, sdpackproc, sdp);
-	}
-	
-	return c;
-}
-
-static Walkqid*
-sdpwalk(Chan *c, Chan *nc, char **name, int nname)
-{
-	return devwalk(c, nc, name, nname, 0, 0, sdpgen);
-}
-
-static int
-sdpstat(Chan* c, uchar* db, int n)
-{
-	return devstat(c, db, n, nil, 0, sdpgen);
-}
-
-static Chan*
-sdpopen(Chan* ch, int omode)
-{
-	int perm;
-	Sdp *sdp;
-	Conv *c;
-
-	omode &= 3;
-	perm = m2p[omode];
-	USED(perm);
-
-	sdp = sdptab + ch->dev;
-
-	switch(TYPE(ch->qid)) {
-	default:
-		break;
-	case Qtopdir:
-	case Qsdpdir:
-	case Qconvdir:
-		if(omode != OREAD)
-			error(Eperm);
-		break;
-	case Qlog:
-		logopen(sdp);
-		break;
-	case Qclone:
-		c = sdpclone(sdp);
-		if(c == nil)
-			error(Enodev);
-		ch->qid.path = QID(c->id, Qctl);
-		break;
-	case Qdata:
-	case Qctl:
-	case Qstatus:
-	case Qcontrol:
-	case Qstats:
-	case Qrstats:
-		c = sdp->conv[CONV(ch->qid)];
-		qlock(c);
-		if(waserror()) {
-			qunlock(c);
-			nexterror();
-		}
-		if((perm & (c->perm>>6)) != perm)
-		if(strcmp(up->user, c->owner) != 0 || (perm & c->perm) != perm)
-				error(Eperm);
-
-		c->ref++;
-		if(TYPE(ch->qid) == Qdata) {
-			c->dataopen++;
-			// kill reader if Qdata is opened for the first time
-			if(c->dataopen == 1)
-			if(c->readproc != nil)
-				postnote(c->readproc, 1, "interrupt", 0);
-		} else if(TYPE(ch->qid) == Qcontrol) {	
-			c->controlopen++;
-		}
-		qunlock(c);
-		poperror();
-		break;
-	}
-	ch->mode = openmode(omode);
-	ch->flag |= COPEN;
-	ch->offset = 0;
-	return ch;
-}
-
-static void
-sdpclose(Chan* ch)
-{
-	Sdp *sdp  = sdptab + ch->dev;
-	Conv *c;
-
-	if(!(ch->flag & COPEN))
-		return;
-	switch(TYPE(ch->qid)) {
-	case Qlog:
-		logclose(sdp);
-		break;
-	case Qctl:
-	case Qstatus:
-	case Qstats:
-	case Qrstats:
-		c = sdp->conv[CONV(ch->qid)];
-		qlock(c);
-		convderef(c);
-		qunlock(c);
-		break;
-
-	case Qdata:
-		c = sdp->conv[CONV(ch->qid)];
-		qlock(c);
-		c->dataopen--;
-		convderef(c);
-		if(c->dataopen == 0)
-		if(c->reader == 0)
-		if(c->chan != nil)
-		if(!waserror()) {
-			kproc("convreader", convreader, c);
-			c->reader = 1;
-			c->ref++;
-			poperror();
-		}
-		qunlock(c);
-		break;
-
-	case Qcontrol:
-		c = sdp->conv[CONV(ch->qid)];
-		qlock(c);
-		c->controlopen--;
-		convderef(c);
-		if(c->controlopen == 0 && c->ref != 0) {
-			switch(c->state) {
-			default:
-				convsetstate(c, CClosed);
-				break;
-			case CAccept:
-			case COpen:
-				convsetstate(c, CLocalClose);
-				break;
-			}
-		}
-		qunlock(c);
-		break;
-	}
-}
-
-static long
-sdpread(Chan *ch, void *a, long n, vlong off)
-{
-	char buf[256];
-	char *s;
-	Sdp *sdp = sdptab + ch->dev;
-	Conv *c;
-	Block *b;
-	int rv;
-
-	USED(off);
-	switch(TYPE(ch->qid)) {
-	default:
-		error(Eperm);
-	case Qtopdir:
-	case Qsdpdir:
-	case Qconvdir:
-		return devdirread(ch, a, n, 0, 0, sdpgen);
-	case Qlog:
-		return logread(sdp, a, off, n);
-	case Qstatus:
-		c = sdp->conv[CONV(ch->qid)];
-		qlock(c);
-		n = readstr(off, a, n, convstatename[c->state]);
-		qunlock(c);
-		return n;
-	case Qctl:
-		sprint(buf, "%lud", CONV(ch->qid));
-		return readstr(off, a, n, buf);
-	case Qcontrol:
-		b = readcontrol(sdp->conv[CONV(ch->qid)], n);
-		if(b == nil)
-			return 0;
-		if(BLEN(b) < n)
-			n = BLEN(b);
-		memmove(a, b->rp, n);
-		freeb(b);
-		return n;
-	case Qdata:
-		b = readdata(sdp->conv[CONV(ch->qid)], n);
-		if(b == nil)
-			return 0;
-		if(BLEN(b) < n)
-			n = BLEN(b);
-		memmove(a, b->rp, n);
-		freeb(b);
-		return n;
-	case Qstats:
-	case Qrstats:
-		c = sdp->conv[CONV(ch->qid)];
-		s = smalloc(1000);
-		convstats(c, TYPE(ch->qid) == Qstats, s, 1000);
-		rv = readstr(off, a, n, s);
-		free(s);
-		return rv;
-	}
-}
-
-static Block*
-sdpbread(Chan* ch, long n, ulong offset)
-{
-	Sdp *sdp = sdptab + ch->dev;
-
-	if(TYPE(ch->qid) != Qdata)
-		return devbread(ch, n, offset);
-	return readdata(sdp->conv[CONV(ch->qid)], n);
-}
-
-
-static long
-sdpwrite(Chan *ch, void *a, long n, vlong off)
-{
-	Sdp *sdp = sdptab + ch->dev;
-	Cmdbuf *cb;
-	char *arg0;
-	char *p;
-	Conv *c;
-	Block *b;
-	
-	USED(off);
-	switch(TYPE(ch->qid)) {
-	default:
-		error(Eperm);
-	case Qctl:
-		c = sdp->conv[CONV(ch->qid)];
-		cb = parsecmd(a, n);
-		qlock(c);
-		if(waserror()) {
-			qunlock(c);
-			free(cb);
-			nexterror();
-		}
-		if(cb->nf == 0)
-			error("short write");
-		arg0 = cb->f[0];
-		if(strcmp(arg0, "accept") == 0) {
-			if(cb->nf != 2)
-				error("usage: accect file");
-			convopenchan(c, cb->f[1]);
-		} else if(strcmp(arg0, "dial") == 0) {
-			if(cb->nf != 2)
-				error("usage: accect file");
-			convopenchan(c, cb->f[1]);
-			convsetstate(c, CDial);
-		} else if(strcmp(arg0, "drop") == 0) {
-			if(cb->nf != 2)
-				error("usage: drop permil");
-			c->drop = atoi(cb->f[1]);
-		} else if(strcmp(arg0, "cipher") == 0) {
-			if(cb->nf != 2)
-				error("usage: cipher alg");
-			setalg(c, cb->f[1], cipheralg, &c->cipher);
-		} else if(strcmp(arg0, "auth") == 0) {
-			if(cb->nf != 2)
-				error("usage: auth alg");
-			setalg(c, cb->f[1], authalg, &c->auth);
-		} else if(strcmp(arg0, "comp") == 0) {
-			if(cb->nf != 2)
-				error("usage: comp alg");
-			setalg(c, cb->f[1], compalg, &c->comp);
-		} else if(strcmp(arg0, "insecret") == 0) {
-			if(cb->nf != 2)
-				error("usage: insecret secret");
-			setsecret(&c->in, cb->f[1]);
-			if(c->cipher)
-				c->cipher->init(c);
-			if(c->auth)
-				c->auth->init(c);
-		} else if(strcmp(arg0, "outsecret") == 0) {
-			if(cb->nf != 2)
-				error("usage: outsecret secret");
-			setsecret(&c->out, cb->f[1]);
-			if(c->cipher)
-				c->cipher->init(c);
-			if(c->auth)
-				c->auth->init(c);
-		} else
-			error("unknown control request");
-		poperror();
-		qunlock(c);
-		free(cb);
-		return n;
-	case Qlog:
-		cb = parsecmd(a, n);
-		p = logctl(sdp, cb->nf, cb->f, logflags);
-		free(cb);
-		if(p != nil)
-			error(p);
-		return n;
-	case Qcontrol:
-		writecontrol(sdp->conv[CONV(ch->qid)], a, n, 0);
-		return n;
-	case Qdata:
-		b = allocb(n);
-		memmove(b->wp, a, n);
-		b->wp += n;
-		return writedata(sdp->conv[CONV(ch->qid)], b);
-	}
-}
-
-long
-sdpbwrite(Chan *ch, Block *bp, ulong offset)
-{
-	Sdp *sdp = sdptab + ch->dev;
-
-	if(TYPE(ch->qid) != Qdata)
-		return devbwrite(ch, bp, offset);
-	return writedata(sdp->conv[CONV(ch->qid)], bp);
-}
-
-static int
-sdpgen(Chan *c, char*, Dirtab*, int, int s, Dir *dp)
-{
-	Sdp *sdp = sdptab + c->dev;
-	int type = TYPE(c->qid);
-	Dirtab *dt;
-	Qid qid;
-
-	if(s == DEVDOTDOT){
-		switch(TYPE(c->qid)){
-		case Qtopdir:
-		case Qsdpdir:
-			snprint(up->genbuf, sizeof(up->genbuf), "#E%ld", c->dev);
-			mkqid(&qid, Qtopdir, 0, QTDIR);
-			devdir(c, qid, up->genbuf, 0, eve, 0555, dp);
-			break;
-		case Qconvdir:
-			snprint(up->genbuf, sizeof(up->genbuf), "%d", s);
-			mkqid(&qid, Qsdpdir, 0, QTDIR);
-			devdir(c, qid, up->genbuf, 0, eve, 0555, dp);
-			break;
-		default:
-			panic("sdpwalk %llux", c->qid.path);
-		}
-		return 1;
-	}
-
-	switch(type) {
-	default:
-		// non directory entries end up here
-		if(c->qid.type & QTDIR)
-			panic("sdpgen: unexpected directory");	
-		if(s != 0)
-			return -1;
-		dt = dirtab[TYPE(c->qid)];
-		if(dt == nil)
-			panic("sdpgen: unknown type: %lud", TYPE(c->qid));
-		devdir(c, c->qid, dt->name, dt->length, eve, dt->perm, dp);
-		return 1;
-	case Qtopdir:
-		if(s != 0)
-			return -1;
-		mkqid(&qid, QID(0, Qsdpdir), 0, QTDIR);
-		devdir(c, qid, "sdp", 0, eve, 0555, dp);
-		return 1;
-	case Qsdpdir:
-		if(s<nelem(sdpdirtab)) {
-			dt = sdpdirtab+s;
-			devdir(c, dt->qid, dt->name, dt->length, eve, dt->perm, dp);
-			return 1;
-		}
-		s -= nelem(sdpdirtab);
-		if(s >= sdp->nconv)
-			return -1;
-		mkqid(&qid, QID(s, Qconvdir), 0, QTDIR);
-		snprint(up->genbuf, sizeof(up->genbuf), "%d", s);
-		devdir(c, qid, up->genbuf, 0, eve, 0555, dp);
-		return 1;
-	case Qconvdir:
-		if(s>=nelem(convdirtab))
-			return -1;
-		dt = convdirtab+s;
-		mkqid(&qid, QID(CONV(c->qid),TYPE(dt->qid)), 0, QTFILE);
-		devdir(c, qid, dt->name, dt->length, eve, dt->perm, dp);
-		return 1;
-	}
-}
-
-static Conv*
-sdpclone(Sdp *sdp)
-{
-	Conv *c, **pp, **ep;
-
-	c = nil;
-	ep = sdp->conv + nelem(sdp->conv);
-	qlock(sdp);
-	if(waserror()) {
-		qunlock(sdp);
-		nexterror();
-	}
-	for(pp = sdp->conv; pp < ep; pp++) {
-		c = *pp;
-		if(c == nil){
-			c = malloc(sizeof(Conv));
-			if(c == nil)
-				error(Enomem);
-			memset(c, 0, sizeof(Conv));
-			qlock(c);
-			c->sdp = sdp;
-			c->id = pp - sdp->conv;
-			*pp = c;
-			sdp->nconv++;
-			break;
-		}
-		if(c->ref == 0 && canqlock(c)){
-			if(c->ref == 0)
-				break;
-			qunlock(c);
-		}
-	}
-	poperror();
-	qunlock(sdp);
-
-	if(pp >= ep)
-		return nil;
-
-	assert(c->state == CFree);
-	// set ref to 2 - 1 ref for open - 1 ref for channel state
-	c->ref = 2;
-	c->state = CInit;
-	c->in.window = ~0;
-	strncpy(c->owner, up->user, sizeof(c->owner));
-	c->perm = 0660;
-	qunlock(c);
-
-	return c;
-}
-
-// assume c is locked
-static void
-convretryinit(Conv *c)
-{
-	c->retries = 0;
-	// +2 to avoid rounding effects.
-	c->timeout = TK2SEC(m->ticks) + 2;
-}
-
-// assume c is locked
-static int
-convretry(Conv *c, int reset)
-{
-	c->retries++;
-	if(c->retries > MaxRetries) {
-		if(reset)
-			convoconnect(c, ConReset, c->dialid, c->acceptid);
-		convsetstate(c, CClosed);
-		return 0;
-	}
-	c->timeout = TK2SEC(m->ticks) + (c->retries+1);
-	return 1;
-}
-
-// assumes c is locked
-static void
-convtimer(Conv *c, ulong sec)
-{
-	Block *b;
-
-	if(c->timeout > sec)
-		return;
-
-	switch(c->state) {
-	case CInit:
-		break;
-	case CDial:
-		if(convretry(c, 1))
-			convoconnect(c, ConOpenRequest, c->dialid, 0);
-		break;
-	case CAccept:
-		if(convretry(c, 1))
-			convoconnect(c, ConOpenAck, c->dialid, c->acceptid);
-		break;
-	case COpen:
-		b = c->out.controlpkt;
-		if(b != nil) {
-			if(convretry(c, 1))
-				convoput(c, TControl, ControlMesg, copyblock(b, blocklen(b)));
-			break;
-		}
-
-		c->timeout = c->lastrecv + KeepAlive;
-		if(c->timeout > sec)
-			break;
-		// keepalive - randomly spaced between KeepAlive and 2*KeepAlive
-		if(c->timeout + KeepAlive > sec && nrand(c->lastrecv + 2*KeepAlive - sec) > 0)
-			break;
-		// can not use writecontrol
-		b = allocb(4);
-		c->out.controlseq++;
-		hnputl(b->wp, c->out.controlseq);
-		b->wp += 4;
-		c->out.controlpkt = b;
-		convretryinit(c);
-		if(!waserror()) {
-			convoput(c, TControl, ControlMesg, copyblock(b, blocklen(b)));
-			poperror();
-		}
-		break;
-	case CLocalClose:
-		if(convretry(c, 0))
-			convoconnect(c, ConClose, c->dialid, c->acceptid);
-		break;
-	case CRemoteClose:
-	case CClosed:
-		break;
-	}
-}
-
-
-static void
-sdpackproc(void *a)
-{
-	Sdp *sdp = a;
-	ulong sec;
-	int i;
-	Conv *c;
-
-	for(;;) {
-		tsleep(&up->sleep, return0, 0, 1000);
-		sec = TK2SEC(m->ticks);
-		qlock(sdp);
-		for(i=0; i<sdp->nconv; i++) {
-			c = sdp->conv[i];
-			if(c->ref == 0)
-				continue;
-			qunlock(sdp);
-			qlock(c);
-			if(c->ref > 0 && !waserror()) {
-				convtimer(c, sec);
-				poperror();
-			}
-			qunlock(c);
-			qlock(sdp);
-		}
-		qunlock(sdp);
-	}
-}
-
-Dev sdpdevtab = {
-	'E',
-	"sdp",
-
-	devreset,
-	sdpinit,
-	devshutdown,
-	sdpattach,
-	sdpwalk,
-	sdpstat,
-	sdpopen,
-	devcreate,
-	sdpclose,
-	sdpread,
-	devbread,
-	sdpwrite,
-	devbwrite,
-	devremove,
-	devwstat,
-};
-
-// assume hold lock on c
-static void
-convsetstate(Conv *c, int state)
-{
-
-if(0)print("convsetstate %d: %s -> %s\n", c->id, convstatename[c->state], convstatename[state]);
-
-	switch(state) {
-	default:
-		panic("setstate: bad state: %d", state);
-	case CDial:
-		assert(c->state == CInit);
-		c->dialid = (rand()<<16) + rand();
-		convretryinit(c);
-		convoconnect(c, ConOpenRequest, c->dialid, 0);
-		break;
-	case CAccept:
-		assert(c->state == CInit);
-		c->acceptid = (rand()<<16) + rand();
-		convretryinit(c);
-		convoconnect(c, ConOpenAck, c->dialid, c->acceptid);
-		break;
-	case COpen:
-		assert(c->state == CDial || c->state == CAccept);
-		c->lastrecv = TK2SEC(m->ticks);
-		if(c->state == CDial) {
-			convretryinit(c);
-			convoconnect(c, ConOpenAckAck, c->dialid, c->acceptid);
-			hnputl(c->in.secret, c->acceptid);
-			hnputl(c->in.secret+4, c->dialid);
-			hnputl(c->out.secret, c->dialid);
-			hnputl(c->out.secret+4, c->acceptid);
-		} else {
-			hnputl(c->in.secret, c->dialid);
-			hnputl(c->in.secret+4, c->acceptid);
-			hnputl(c->out.secret, c->acceptid);
-			hnputl(c->out.secret+4, c->dialid);
-		}
-		setalg(c, "hmac_md5_96", authalg, &c->auth);
-		break;
-	case CLocalClose:
-		assert(c->state == CAccept || c->state == COpen);
-		convretryinit(c);
-		convoconnect(c, ConClose, c->dialid, c->acceptid);
-		break;
-	case CRemoteClose:
-		wakeup(&c->in.controlready);
-		wakeup(&c->out.controlready);
-		break;
-	case CClosed:
-		wakeup(&c->in.controlready);
-		wakeup(&c->out.controlready);
-		if(c->readproc)
-			postnote(c->readproc, 1, "interrupt", 0);
-		if(c->state != CClosed)
-			convderef(c);
-		break;
-	}
-	c->state = state;
-}
-
-
-//assumes c is locked
-static void
-convderef(Conv *c)
-{
-	c->ref--;
-	if(c->ref > 0) {
-		return;
-	}
-	assert(c->ref == 0);
-	assert(c->dataopen == 0);
-	assert(c->controlopen == 0);
-if(0)print("convderef: %d: ref == 0!\n", c->id);
-	c->state = CFree;
-	if(c->chan) {	
-		cclose(c->chan);
-		c->chan = nil;
-	}
-	if(c->channame) {
-		free(c->channame);
-		c->channame = nil;
-	}
-	c->cipher = nil;
-	c->auth = nil;
-	c->comp = nil;
-	strcpy(c->owner, "network");
-	c->perm = 0660;
-	c->dialid = 0;
-	c->acceptid = 0;
-	c->timeout = 0;
-	c->retries = 0;
-	c->drop = 0;
-	onewaycleanup(&c->in);
-	onewaycleanup(&c->out);
-	memset(&c->lstats, 0, sizeof(Stats));
-	memset(&c->rstats, 0, sizeof(Stats));
-}
-
-static void
-onewaycleanup(OneWay *ow)
-{
-	if(ow->controlpkt)
-		freeb(ow->controlpkt);
-	if(ow->authstate)
-		free(ow->authstate);
-	if(ow->cipherstate)
-		free(ow->cipherstate);
-	if(ow->compstate)
-		free(ow->compstate);
-	memset(ow, 0, sizeof(OneWay));
-}
-
-
-// assumes conv is locked
-static void
-convopenchan(Conv *c, char *path)
-{
-	if(c->state != CInit || c->chan != nil)
-		error("already connected");
-	c->chan = namec(path, Aopen, ORDWR, 0);
-	c->channame = smalloc(strlen(path)+1);
-	strcpy(c->channame, path);
-	if(waserror()) {
-		cclose(c->chan);
-		c->chan = nil;
-		free(c->channame);
-		c->channame = nil;
-		nexterror();
-	}
-	kproc("convreader", convreader, c);
-
-	assert(c->reader == 0 && c->ref > 0);
-	// after kproc in case it fails
-	c->reader = 1;
-	c->ref++;
-
-	poperror();
-}
-
-static void
-convstats(Conv *c, int local, char *buf, int n)
-{
-	Stats *stats;
-	char *p, *ep;
-	int i;
-
-	if(local) {
-		stats = &c->lstats;
-	} else {
-		if(!waserror()) {
-			writecontrol(c, 0, 0, 1);
-			poperror();
-		}
-		stats = &c->rstats;
-	}
-
-	qlock(c);
-	p = buf;
-	ep = buf + n;
-	p += snprint(p, ep-p, "outPackets: %lud\n", stats->outPackets);
-	p += snprint(p, ep-p, "outDataPackets: %lud\n", stats->outDataPackets);
-	p += snprint(p, ep-p, "outDataBytes: %lud\n", stats->outDataBytes);
-	p += snprint(p, ep-p, "outCompDataBytes: %lud\n", stats->outCompDataBytes);
-	for(i=0; i<NCompStats; i++) {
-		if(stats->outCompStats[i] == 0)
-			continue;
-		p += snprint(p, ep-p, "outCompStats[%d]: %lud\n", i, stats->outCompStats[i]);
-	}
-	p += snprint(p, ep-p, "inPackets: %lud\n", stats->inPackets);
-	p += snprint(p, ep-p, "inDataPackets: %lud\n", stats->inDataPackets);
-	p += snprint(p, ep-p, "inDataBytes: %lud\n", stats->inDataBytes);
-	p += snprint(p, ep-p, "inCompDataBytes: %lud\n", stats->inCompDataBytes);
-	p += snprint(p, ep-p, "inMissing: %lud\n", stats->inMissing);
-	p += snprint(p, ep-p, "inDup: %lud\n", stats->inDup);
-	p += snprint(p, ep-p, "inReorder: %lud\n", stats->inReorder);
-	p += snprint(p, ep-p, "inBadComp: %lud\n", stats->inBadComp);
-	p += snprint(p, ep-p, "inBadAuth: %lud\n", stats->inBadAuth);
-	p += snprint(p, ep-p, "inBadSeq: %lud\n", stats->inBadSeq);
-	p += snprint(p, ep-p, "inBadOther: %lud\n", stats->inBadOther);
-	USED(p);
-	qunlock(c);
-}
-
-// c is locked
-static void
-convack(Conv *c)
-{
-	Block *b;
-	AckPkt *ack;
-	Stats *s;
-	int i;
-
-	b = allocb(sizeof(AckPkt));
-	ack = (AckPkt*)b->wp;
-	b->wp += sizeof(AckPkt);
-	s = &c->lstats;
-	hnputl(ack->cseq, c->in.controlseq);
-	hnputl(ack->outPackets, s->outPackets);
-	hnputl(ack->outDataPackets, s->outDataPackets);
-	hnputl(ack->outDataBytes, s->outDataBytes);
-	hnputl(ack->outCompDataBytes, s->outCompDataBytes);
-	for(i=0; i<NCompStats; i++)
-		hnputl(ack->outCompStats+i*4, s->outCompStats[i]);
-	hnputl(ack->inPackets, s->inPackets);
-	hnputl(ack->inDataPackets, s->inDataPackets);
-	hnputl(ack->inDataBytes, s->inDataBytes);
-	hnputl(ack->inCompDataBytes, s->inCompDataBytes);
-	hnputl(ack->inMissing, s->inMissing);
-	hnputl(ack->inDup, s->inDup);
-	hnputl(ack->inReorder, s->inReorder);
-	hnputl(ack->inBadComp, s->inBadComp);
-	hnputl(ack->inBadAuth, s->inBadAuth);
-	hnputl(ack->inBadSeq, s->inBadSeq);
-	hnputl(ack->inBadOther, s->inBadOther);
-	convoput(c, TControl, ControlAck, b);
-}
-
-
-// assume we hold lock for c
-static Block *
-conviput(Conv *c, Block *b, int control)
-{
-	int type, subtype;
-	ulong seq, seqwrap;
-	long seqdiff;
-	int pad;
-
-	c->lstats.inPackets++;
-
-	if(BLEN(b) < 4) {
-		c->lstats.inBadOther++;
-		freeb(b);
-		return nil;
-	}
-	
-	type = b->rp[0] >> 4;
-	subtype = b->rp[0] & 0xf;
-	b->rp += 1;
-	if(type == TConnect) {
-		conviconnect(c, subtype, b);
-		return nil;
-	}
-
-	switch(c->state) {
-	case CInit:
-	case CDial:
-		c->lstats.inBadOther++;
-		convoconnect(c, ConReset, c->dialid, c->acceptid);
-		convsetstate(c, CClosed);
-		break;
-	case CAccept:
-	case CRemoteClose:
-	case CLocalClose:
-		c->lstats.inBadOther++;
-		freeb(b);
-		return nil;
-	}
-
-	seq = (b->rp[0]<<16) + (b->rp[1]<<8) + b->rp[2];
-	b->rp += 3;
-
-	seqwrap = c->in.seqwrap;
-	seqdiff = seq - c->in.seq;
-	if(seqdiff < -(SeqMax*3/4)) {
-		seqwrap++;
-		seqdiff += SeqMax;
-	} else if(seqdiff > SeqMax*3/4) {
-		seqwrap--;
-		seqdiff -= SeqMax;
-	}
-
-	if(seqdiff <= 0) {
-		if(seqdiff <= -SeqWindow) {
-if(0)print("old sequence number: %ld (%ld %ld)\n", seq, c->in.seqwrap, seqdiff);
-			c->lstats.inBadSeq++;
-			freeb(b);
-			return nil;
-		}
-
-		if(c->in.window & (1<<-seqdiff)) {
-if(0)print("dup sequence number: %ld (%ld %ld)\n", seq, c->in.seqwrap, seqdiff);
-			c->lstats.inDup++;
-			freeb(b);
-			return nil;
-		}
-
-		c->lstats.inReorder++;
-	}
-
-	// ok the sequence number looks ok
-if(0) print("coniput seq=%ulx\n", seq);
-	if(c->in.auth != 0) {
-		if(!(*c->in.auth)(&c->in, b->rp-4, BLEN(b)+4)) {
-if(0)print("bad auth %ld\n", BLEN(b)+4);
-			c->lstats.inBadAuth++;
-			freeb(b);
-			return nil;
-		}
-		b->wp -= c->in.authlen;
-	}
-
-	if(c->in.cipher != 0) {
-		if(!(*c->in.cipher)(&c->in, b->rp, BLEN(b))) {
-if(0)print("bad cipher\n");
-			c->lstats.inBadOther++;
-			freeb(b);
-			return nil;
-		}
-		b->rp += c->in.cipherivlen;
-		if(c->in.cipherblklen > 1) {
-			pad = b->wp[-1];
-			if(pad > BLEN(b)) {
-if(0)print("pad too big\n");
-				c->lstats.inBadOther++;
-				freeb(b);
-				return nil;
-			}
-			b->wp -= pad;
-		}
-	}
-
-	// ok the packet is good
-	if(seqdiff > 0) {
-		while(seqdiff > 0 && c->in.window != 0) {
-			if((c->in.window & (1<<(SeqWindow-1))) == 0) {
-				c->lstats.inMissing++;
-			}
-			c->in.window <<= 1;
-			seqdiff--;
-		}
-		if(seqdiff > 0) {
-			c->lstats.inMissing += seqdiff;
-			seqdiff = 0;
-		}
-		c->in.seq = seq;
-		c->in.seqwrap = seqwrap;
-	}
-	c->in.window |= 1<<-seqdiff;
-	c->lastrecv = TK2SEC(m->ticks);
-
-	switch(type) {
-	case TControl:
-		convicontrol(c, subtype, b);
-		return nil;
-	case TData:
-		c->lstats.inDataPackets++;
-		c->lstats.inDataBytes += BLEN(b);
-		if(control)
-			break;
-		return b;
-	case TCompData:
-		c->lstats.inDataPackets++;
-		c->lstats.inCompDataBytes += BLEN(b);
-		b = convicomp(c, subtype, seq, b);
-		if(b == nil) {
-			c->lstats.inBadComp++;
-			return nil;
-		}
-		c->lstats.inDataBytes += BLEN(b);
-		if(control)
-			break;
-		return b;
-	}
-if(0)print("dropping packet id=%d: type=%d n=%ld control=%d\n", c->id, type, BLEN(b), control);
-	c->lstats.inBadOther++;
-	freeb(b);
-	return nil;
-}
-
-// assume hold conv lock
-static void
-conviconnect(Conv *c, int subtype, Block *b)
-{
-	ulong dialid;
-	ulong acceptid;
-
-	if(BLEN(b) != 8) {
-		freeb(b);
-		return;
-	}
-	dialid = nhgetl(b->rp);
-	acceptid = nhgetl(b->rp + 4);
-	freeb(b);
-
-if(0)print("conviconnect: %s: %d %uld %uld\n", convstatename[c->state], subtype, dialid, acceptid);
-
-	if(subtype == ConReset) {
-		convsetstate(c, CClosed);
-		return;
-	}
-
-	switch(c->state) {
-	default:
-		panic("unknown state: %d", c->state);
-	case CInit:
-		break;
-	case CDial:
-		if(dialid != c->dialid)
-			goto Reset;
-		break;
-	case CAccept:
-	case COpen:
-	case CLocalClose:
-	case CRemoteClose:
-		if(dialid != c->dialid
-		|| subtype != ConOpenRequest && acceptid != c->acceptid)
-			goto Reset;
-		break;
-	case CClosed:
-		goto Reset;
-	}
-
-	switch(subtype) {
-	case ConOpenRequest:
-		switch(c->state) {
-		case CInit:
-			c->dialid = dialid;
-			convsetstate(c, CAccept);
-			return;
-		case CAccept:
-		case COpen:
-			// duplicate ConOpenRequest that we ignore
-			return;
-		}
-		break;
-	case ConOpenAck:
-		switch(c->state) {
-		case CDial:
-			c->acceptid = acceptid;
-			convsetstate(c, COpen);
-			return;
-		case COpen:
-			// duplicate that we have to ack
-			convoconnect(c, ConOpenAckAck, acceptid, dialid);
-			return;
-		}
-		break;
-	case ConOpenAckAck:
-		switch(c->state) {
-		case CAccept:
-			convsetstate(c, COpen);
-			return;
-		case COpen:
-		case CLocalClose:
-		case CRemoteClose:
-			// duplicate that we ignore
-			return;
-		}
-		break;
-	case ConClose:
-		switch(c->state) {
-		case COpen:
-			convoconnect(c, ConCloseAck, dialid, acceptid);
-			convsetstate(c, CRemoteClose);
-			return;
-		case CRemoteClose:
-			// duplicate ConClose
-			convoconnect(c, ConCloseAck, dialid, acceptid);
-			return;
-		}
-		break;
-	case ConCloseAck:
-		switch(c->state) {
-		case CLocalClose:
-			convsetstate(c, CClosed);
-			return;
-		}
-		break;
-	}
-Reset:
-	// invalid connection message - reset to sender
-if(1)print("invalid conviconnect - sending reset\n");
-	convoconnect(c, ConReset, dialid, acceptid);
-	convsetstate(c, CClosed);
-}
-
-static void
-convicontrol(Conv *c, int subtype, Block *b)
-{
-	ulong cseq;
-	AckPkt *ack;
-	int i;
-
-	if(BLEN(b) < 4)
-		return;
-	cseq = nhgetl(b->rp);
-	
-	switch(subtype){
-	case ControlMesg:
-		if(cseq == c->in.controlseq) {
-if(0)print("duplicate control packet: %ulx\n", cseq);
-			// duplicate control packet
-			freeb(b);
-			if(c->in.controlpkt == nil)
-				convack(c);
-			return;
-		}
-
-		if(cseq != c->in.controlseq+1)
-			return;
-		c->in.controlseq = cseq;
-		b->rp += 4;
-		if(BLEN(b) == 0) {
-			// just a ping
-			freeb(b);
-			convack(c);
-		} else {
-			c->in.controlpkt = b;
-if(0) print("recv %ld size=%ld\n", cseq, BLEN(b));
-			wakeup(&c->in.controlready);
-		}
-		return;
-	case ControlAck:
-		if(cseq != c->out.controlseq)
-			return;
-		if(BLEN(b) < sizeof(AckPkt))
-			return;
-		ack = (AckPkt*)(b->rp);
-		c->rstats.outPackets = nhgetl(ack->outPackets);
-		c->rstats.outDataPackets = nhgetl(ack->outDataPackets);
-		c->rstats.outDataBytes = nhgetl(ack->outDataBytes);
-		c->rstats.outCompDataBytes = nhgetl(ack->outCompDataBytes);
-		for(i=0; i<NCompStats; i++)
-			c->rstats.outCompStats[i] = nhgetl(ack->outCompStats + 4*i);
-		c->rstats.inPackets = nhgetl(ack->inPackets);
-		c->rstats.inDataPackets = nhgetl(ack->inDataPackets);
-		c->rstats.inDataBytes = nhgetl(ack->inDataBytes);
-		c->rstats.inCompDataBytes = nhgetl(ack->inCompDataBytes);
-		c->rstats.inMissing = nhgetl(ack->inMissing);
-		c->rstats.inDup = nhgetl(ack->inDup);
-		c->rstats.inReorder = nhgetl(ack->inReorder);
-		c->rstats.inBadComp = nhgetl(ack->inBadComp);
-		c->rstats.inBadAuth = nhgetl(ack->inBadAuth);
-		c->rstats.inBadSeq = nhgetl(ack->inBadSeq);
-		c->rstats.inBadOther = nhgetl(ack->inBadOther);
-		freeb(b);
-		freeb(c->out.controlpkt);
-		c->out.controlpkt = nil;
-		c->timeout = c->lastrecv + KeepAlive;
-		wakeup(&c->out.controlready);
-		return;
-	}
-}
-
-static Block*
-convicomp(Conv *c, int subtype, ulong seq, Block *b)
-{
-	if(c->in.comp == nil) {
-		freeb(b);
-		return nil;
-	}
-	if(!(*c->in.comp)(c, subtype, seq, &b))
-		return nil;
-	return b;
-}
-
-// c is locked
-static void
-convwriteblock(Conv *c, Block *b)
-{
-	// simulated errors
-	if(c->drop && nrand(c->drop) == 0)
-		return;
-
-	if(waserror()) {
-		convsetstate(c, CClosed);
-		nexterror();
-	}
-	devtab[c->chan->type]->bwrite(c->chan, b, 0);
-	poperror();
-}
-
-
-// assume hold conv lock
-static void
-convoput(Conv *c, int type, int subtype, Block *b)
-{
-	int pad;
-	
-	c->lstats.outPackets++;
-	/* Make room for sdp trailer */
-	if(c->out.cipherblklen > 1)
-		pad = c->out.cipherblklen - (BLEN(b) + c->out.cipherivlen) % c->out.cipherblklen;
-	else
-		pad = 0;
-
-	b = padblock(b, -(pad+c->out.authlen));
-
-	if(pad) {
-		memset(b->wp, 0, pad-1);
-		b->wp[pad-1] = pad;
-		b->wp += pad;
-	}
-
-	/* Make space to fit sdp header */
-	b = padblock(b, 4 + c->out.cipherivlen);
-	b->rp[0] = (type << 4) | subtype;
-	c->out.seq++;
-	if(c->out.seq == (1<<24)) {
-		c->out.seq = 0;
-		c->out.seqwrap++;
-	}
-	b->rp[1] = c->out.seq>>16;
-	b->rp[2] = c->out.seq>>8;
-	b->rp[3] = c->out.seq;
-	
-	if(c->out.cipher)
-		(*c->out.cipher)(&c->out, b->rp+4, BLEN(b)-4);
-
-	// auth
-	if(c->out.auth) {
-		b->wp += c->out.authlen;
-		(*c->out.auth)(&c->out, b->rp, BLEN(b));
-	}
-	
-	convwriteblock(c, b);
-}
-
-// assume hold conv lock
-static void
-convoconnect(Conv *c, int op, ulong dialid, ulong acceptid)
-{
-	Block *b;
-
-	c->lstats.outPackets++;
-	assert(c->chan != nil);
-	b = allocb(9);
-	b->wp[0] = (TConnect << 4) | op;
-	hnputl(b->wp+1, dialid);
-	hnputl(b->wp+5, acceptid);
-	b->wp += 9;
-
-	if(!waserror()) {
-		convwriteblock(c, b);
-		poperror();
-	}
-}
-
-static Block *
-convreadblock(Conv *c, int n)
-{
-	Block *b;
-	Chan *ch;
-
-	qlock(&c->readlk);
-	if(waserror()) {
-		c->readproc = nil;
-		qunlock(&c->readlk);
-		nexterror();
-	}
-	qlock(c);
-	if(c->state == CClosed) {
-		qunlock(c);
-		error("closed");
-	}
-	c->readproc = up;
-	ch = c->chan;
-	assert(c->ref > 0);
-	qunlock(c);
-
-	b = devtab[ch->type]->bread(ch, n, 0);
-	c->readproc = nil;
-	poperror();
-	qunlock(&c->readlk);
-
-	return b;
-}
-
-static int
-readready(void *a)
-{
-	Conv *c = a;
-
-	return c->in.controlpkt != nil || (c->state == CClosed) || (c->state == CRemoteClose);
-}
-
-static Block *
-readcontrol(Conv *c, int n)
-{
-	Block *b;
-
-	USED(n);
-
-	qlock(&c->in.controllk);
-	if(waserror()) {
-		qunlock(&c->in.controllk);
-		nexterror();
-	}
-	qlock(c);	// this lock is not held during the sleep below
-
-	for(;;) {
-		if(c->chan == nil || c->state == CClosed) {
-			qunlock(c);
-if(0)print("readcontrol: return error - state = %s\n", convstatename[c->state]);
-			error("conversation closed");
-		}
-
-		if(c->in.controlpkt != nil)
-			break;
-
-		if(c->state == CRemoteClose) {
-			qunlock(c);
-if(0)print("readcontrol: return nil - state = %s\n", convstatename[c->state]);
-			poperror();
-			return nil;
-		}
-		qunlock(c);
-		sleep(&c->in.controlready, readready, c);
-		qlock(c);
-	}
-
-	convack(c);
-
-	b = c->in.controlpkt;
-	c->in.controlpkt = nil;
-	qunlock(c);
-	poperror();
-	qunlock(&c->in.controllk);
-	return b;
-}
-
-
-static int
-writeready(void *a)
-{
-	Conv *c = a;
-
-	return c->out.controlpkt == nil || (c->state == CClosed) || (c->state == CRemoteClose);
-}
-
-// c is locked
-static void
-writewait(Conv *c)
-{
-	for(;;) {
-		if(c->state == CFree || c->state == CInit ||
-		   c->state == CClosed || c->state == CRemoteClose)
-			error("conversation closed");
-
-		if(c->state == COpen && c->out.controlpkt == nil)
-			break;
-
-		qunlock(c);
-		if(waserror()) {
-			qlock(c);
-			nexterror();
-		}
-		sleep(&c->out.controlready, writeready, c);
-		poperror();
-		qlock(c);
-	}
-}
-
-static void
-writecontrol(Conv *c, void *p, int n, int wait)
-{
-	Block *b;
-
-	qlock(&c->out.controllk);
-	qlock(c);
-	if(waserror()) {
-		qunlock(c);
-		qunlock(&c->out.controllk);
-		nexterror();
-	}
-	writewait(c);
-	b = allocb(4+n);
-	c->out.controlseq++;
-	hnputl(b->wp, c->out.controlseq);
-	memmove(b->wp+4, p, n);
-	b->wp += 4+n;
-	c->out.controlpkt = b;
-	convretryinit(c);
-	convoput(c, TControl, ControlMesg, copyblock(b, blocklen(b)));
-	if(wait)
-		writewait(c);
-	poperror();
-	qunlock(c);
-	qunlock(&c->out.controllk);
-}
-
-static Block *
-readdata(Conv *c, int n)
-{
-	Block *b;
-	int nn;
-
-	for(;;) {
-
-		// some slack for tunneling overhead
-		nn = n + 100;
-
-		// make sure size is big enough for control messages
-		if(nn < 1000)
-			nn = 1000;
-		b = convreadblock(c, nn);
-		if(b == nil)
-			return nil;
-		qlock(c);
-		if(waserror()) {
-			qunlock(c);
-			return nil;
-		}
-		b = conviput(c, b, 0);
-		poperror();
-		qunlock(c);
-		if(b != nil) {
-			if(BLEN(b) > n)
-				b->wp = b->rp + n;
-			return b;
-		}
-	}
-}
-
-static long
-writedata(Conv *c, Block *b)
-{
-	int n;
-	ulong seq;
-	int subtype;
-
-	qlock(c);
-	if(waserror()) {
-		qunlock(c);
-		nexterror();
-	}
-
-	if(c->state != COpen) {
-		freeb(b);
-		error("conversation not open");
-	}
-
-	n = BLEN(b);
-	c->lstats.outDataPackets++;
-	c->lstats.outDataBytes += n;
-
-	if(c->out.comp != nil) {
-		// must generate same value as convoput
-		seq = (c->out.seq + 1) & (SeqMax-1);
-
-		subtype = (*c->out.comp)(c, 0, seq, &b);
-		c->lstats.outCompDataBytes += BLEN(b);
-		convoput(c, TCompData, subtype, b);
-	} else
-		convoput(c, TData, 0, b);
-
-	poperror();
-	qunlock(c);
-	return n;
-}
-
-static void
-convreader(void *a)
-{
-	Conv *c = a;
-	Block *b;
-
-	qlock(c);
-	assert(c->reader == 1);
-	while(c->dataopen == 0 && c->state != CClosed) {
-		qunlock(c);
-		b = nil;
-		if(!waserror()) {
-			b = convreadblock(c, 2000);
-			poperror();
-		}
-		qlock(c);
-		if(b == nil) {
-			if(strcmp(up->errstr, Eintr) != 0) {
-				convsetstate(c, CClosed);
-				break;
-			}
-		} else if(!waserror()) {
-			conviput(c, b, 1);
-			poperror();
-		}
-	}
-	c->reader = 0;
-	convderef(c);
-	qunlock(c);
-	pexit("hangup", 1);
-}
-
-
-/* ciphers, authenticators, and compressors  */
-
-static void
-setalg(Conv *c, char *name, Algorithm *alg, Algorithm **p)
-{
-	for(; alg->name; alg++)
-		if(strcmp(name, alg->name) == 0)
-			break;
-	if(alg->name == nil)
-		error("unknown algorithm");
-
-	*p = alg;
-	alg->init(c);
-}
-
-static void
-setsecret(OneWay *ow, char *secret)
-{
-	char *p;
-	int i, c;
-	
-	i = 0;
-	memset(ow->secret, 0, sizeof(ow->secret));
-	for(p=secret; *p; p++) {
-		if(i >= sizeof(ow->secret)*2)
-			break;
-		c = *p;
-		if(c >= '0' && c <= '9')
-			c -= '0';
-		else if(c >= 'a' && c <= 'f')
-			c -= 'a'-10;
-		else if(c >= 'A' && c <= 'F')
-			c -= 'A'-10;
-		else
-			error("bad character in secret");
-		if((i&1) == 0)
-			c <<= 4;
-		ow->secret[i>>1] |= c;
-		i++;
-	}
-}
-
-static void
-setkey(uchar *key, int n, OneWay *ow, char *prefix)
-{
-	uchar ibuf[SHA1dlen], obuf[MD5dlen], salt[10];
-	int i, round = 0;
-
-	while(n > 0){
-		for(i=0; i<round+1; i++)
-			salt[i] = 'A'+round;
-		sha1((uchar*)prefix, strlen(prefix), ibuf, sha1(salt, round+1, nil, nil));
-		md5(ibuf, SHA1dlen, obuf, md5(ow->secret, sizeof(ow->secret), nil, nil));
-		i = (n<MD5dlen) ? n : MD5dlen;
-		memmove(key, obuf, i);
-		key += i;
-		n -= i;
-		if(++round > sizeof salt)
-			panic("setkey: you ask too much");
-	}
-}
-
-static void
-cipherfree(Conv *c)
-{
-	if(c->in.cipherstate) {
-		free(c->in.cipherstate);
-		c->in.cipherstate = nil;
-	}
-	if(c->out.cipherstate) {
-		free(c->out.cipherstate);
-		c->out.cipherstate = nil;
-	}
-	c->in.cipher = nil;
-	c->in.cipherblklen = 0;
-	c->out.cipherblklen = 0;
-	c->in.cipherivlen = 0;
-	c->out.cipherivlen = 0;
-}
-
-static void
-authfree(Conv *c)
-{
-	if(c->in.authstate) {
-		free(c->in.authstate);
-		c->in.authstate = nil;
-	}
-	if(c->out.authstate) {
-		free(c->out.authstate);
-		c->out.authstate = nil;
-	}
-	c->in.auth = nil;
-	c->in.authlen = 0;
-	c->out.authlen = 0;
-}
-
-static void
-compfree(Conv *c)
-{
-	if(c->in.compstate) {
-		free(c->in.compstate);
-		c->in.compstate = nil;
-	}
-	if(c->out.compstate) {
-		free(c->out.compstate);
-		c->out.compstate = nil;
-	}
-	c->in.comp = nil;
-}
-
-static void
-nullcipherinit(Conv *c)
-{
-	cipherfree(c);
-}
-
-static int
-desencrypt(OneWay *ow, uchar *p, int n)
-{
-	uchar *pp, *ip, *eip, *ep;
-	DESstate *ds = ow->cipherstate;
-
-	if(n < 8 || (n & 0x7 != 0))
-		return 0;
-	ep = p + n;
-	memmove(p, ds->ivec, 8);
-	for(p += 8; p < ep; p += 8){
-		pp = p;
-		ip = ds->ivec;
-		for(eip = ip+8; ip < eip; )
-			*pp++ ^= *ip++;
-		block_cipher(ds->expanded, p, 0);
-		memmove(ds->ivec, p, 8);
-	}
-	return 1;
-}
-
-static int
-desdecrypt(OneWay *ow, uchar *p, int n)
-{
-	uchar tmp[8];
-	uchar *tp, *ip, *eip, *ep;
-	DESstate *ds = ow->cipherstate;
-
-	if(n < 8 || (n & 0x7 != 0))
-		return 0;
-	ep = p + n;
-	memmove(ds->ivec, p, 8);
-	p += 8;
-	while(p < ep){
-		memmove(tmp, p, 8);
-		block_cipher(ds->expanded, p, 1);
-		tp = tmp;
-		ip = ds->ivec;
-		for(eip = ip+8; ip < eip; ){
-			*p++ ^= *ip;
-			*ip++ = *tp++;
-		}
-	}
-	return 1;
-}
-
-static void
-descipherinit(Conv *c)
-{
-	uchar key[8];
-	uchar ivec[8];
-	int i;
-	int n = c->cipher->keylen;
-
-	cipherfree(c);
-	
-	if(n > sizeof(key))
-		n = sizeof(key);
-
-	/* in */
-	memset(key, 0, sizeof(key));
-	setkey(key, n, &c->in, "cipher");
-	memset(ivec, 0, sizeof(ivec));
-	c->in.cipherblklen = 8;
-	c->in.cipherivlen = 8;
-	c->in.cipher = desdecrypt;
-	c->in.cipherstate = smalloc(sizeof(DESstate));
-	setupDESstate(c->in.cipherstate, key, ivec);
-	
-	/* out */
-	memset(key, 0, sizeof(key));
-	setkey(key, n, &c->out, "cipher");
-	for(i=0; i<8; i++)
-		ivec[i] = nrand(256);
-	c->out.cipherblklen = 8;
-	c->out.cipherivlen = 8;
-	c->out.cipher = desencrypt;
-	c->out.cipherstate = smalloc(sizeof(DESstate));
-	setupDESstate(c->out.cipherstate, key, ivec);
-}
-
-static int
-rc4encrypt(OneWay *ow, uchar *p, int n)
-{
-	CipherRc4 *cr = ow->cipherstate;
-
-	if(n < 4)
-		return 0;
-
-	hnputl(p, cr->cseq);
-	p += 4;
-	n -= 4;
-	rc4(&cr->current, p, n);
-	cr->cseq += n;
-	return 1;
-}
-
-static int
-rc4decrypt(OneWay *ow, uchar *p, int n)
-{
-	CipherRc4 *cr = ow->cipherstate;
-	RC4state tmpstate;
-	ulong seq;
-	long d, dd;
-
-	if(n < 4)
-		return 0;
-
-	seq = nhgetl(p);
-	p += 4;
-	n -= 4;
-	d = seq-cr->cseq;
-	if(d == 0) {
-		rc4(&cr->current, p, n);
-		cr->cseq += n;
-		if(cr->ovalid) {
-			dd = cr->cseq - cr->lgseq;
-			if(dd > RC4back)
-				cr->ovalid = 0;
-		}
-	} else if(d > 0) {
-//print("missing packet: %uld %ld\n", seq, d);
-		// this link is hosed 
-		if(d > RC4forward)
-			return 0;
-		cr->lgseq = seq;
-		if(!cr->ovalid) {
-			cr->ovalid = 1;
-			cr->oseq = cr->cseq;
-			memmove(&cr->old, &cr->current, sizeof(RC4state));
-		}
-		rc4skip(&cr->current, d);
-		rc4(&cr->current, p, n);
-		cr->cseq = seq+n;
-	} else {
-//print("reordered packet: %uld %ld\n", seq, d);
-		dd = seq - cr->oseq;
-		if(!cr->ovalid || -d > RC4back || dd < 0)
-			return 0;
-		memmove(&tmpstate, &cr->old, sizeof(RC4state));
-		rc4skip(&tmpstate, dd);
-		rc4(&tmpstate, p, n);
-		return 1;
-	}
-
-	// move old state up
-	if(cr->ovalid) {
-		dd = cr->cseq - RC4back - cr->oseq;
-		if(dd > 0) {
-			rc4skip(&cr->old, dd);
-			cr->oseq += dd;
-		}
-	}
-
-	return 1;
-}
-
-static void
-rc4cipherinit(Conv *c)
-{
-	uchar key[32];
-	CipherRc4 *cr;
-	int n;
-
-	cipherfree(c);
-
-	n = c->cipher->keylen;
-	if(n > sizeof(key))
-		n = sizeof(key);
-
-	/* in */
-	memset(key, 0, sizeof(key));
-	setkey(key, n, &c->in, "cipher");
-	c->in.cipherblklen = 1;
-	c->in.cipherivlen = 4;
-	c->in.cipher = rc4decrypt;
-	cr = smalloc(sizeof(CipherRc4));
-	memset(cr, 0, sizeof(*cr));
-	setupRC4state(&cr->current, key, n);
-	c->in.cipherstate = cr;
-
-	/* out */
-	memset(key, 0, sizeof(key));
-	setkey(key, n, &c->out, "cipher");
-	c->out.cipherblklen = 1;
-	c->out.cipherivlen = 4;
-	c->out.cipher = rc4encrypt;
-	cr = smalloc(sizeof(CipherRc4));
-	memset(cr, 0, sizeof(*cr));
-	setupRC4state(&cr->current, key, n);
-	c->out.cipherstate = cr;
-}
-
-static void
-nullauthinit(Conv *c)
-{
-	authfree(c);
-}
-
-static void
-shaauthinit(Conv *c)
-{
-	authfree(c);
-}
-
-static void
-seanq_hmac_md5(uchar hash[MD5dlen], ulong wrap, uchar *t, long tlen, uchar *key, long klen)
-{
-	uchar ipad[65], opad[65], wbuf[4];
-	int i;
-	DigestState *digest;
-	uchar innerhash[MD5dlen];
-
-	for(i=0; i<64; i++){
-		ipad[i] = 0x36;
-		opad[i] = 0x5c;
-	}
-	ipad[64] = opad[64] = 0;
-	for(i=0; i<klen; i++){
-		ipad[i] ^= key[i];
-		opad[i] ^= key[i];
-	}
-	hnputl(wbuf, wrap);
-	digest = md5(ipad, 64, nil, nil);
-	digest = md5(wbuf, sizeof(wbuf), nil, digest);
-	md5(t, tlen, innerhash, digest);
-	digest = md5(opad, 64, nil, nil);
-	md5(innerhash, MD5dlen, hash, digest);
-}
-
-static int
-md5auth(OneWay *ow, uchar *t, int tlen)
-{
-	uchar hash[MD5dlen];
-	int r;
-
-	if(tlen < ow->authlen)
-		return 0;
-	tlen -= ow->authlen;
-
-	memset(hash, 0, MD5dlen);
-	seanq_hmac_md5(hash, ow->seqwrap, t, tlen, (uchar*)ow->authstate, 16);
-	r = memcmp(t+tlen, hash, ow->authlen) == 0;
-	memmove(t+tlen, hash, ow->authlen);
-	return r;
-}
-
-static void
-md5authinit(Conv *c)
-{
-	int keylen;
-
-	authfree(c);
-
-	keylen = c->auth->keylen;
-	if(keylen > 16)
-		keylen = 16;
-
-	/* in */
-	c->in.authstate = smalloc(16);
-	memset(c->in.authstate, 0, 16);
-	setkey(c->in.authstate, keylen, &c->in, "auth");
-	c->in.authlen = 12;
-	c->in.auth = md5auth;
-	
-	/* out */
-	c->out.authstate = smalloc(16);
-	memset(c->out.authstate, 0, 16);
-	setkey(c->out.authstate, keylen, &c->out, "auth");
-	c->out.authlen = 12;
-	c->out.auth = md5auth;
-}
-
-static void
-nullcompinit(Conv *c)
-{
-	compfree(c);
-}
-
-static int
-thwackcomp(Conv *c, int, ulong seq, Block **bp)
-{
-	Block *b, *bb;
-	int nn;
-	ulong ackseq;
-	uchar mask;
-
-	// add ack info
-	b = padblock(*bp, 4);
-
-	ackseq = unthwackstate(c->in.compstate, &mask);
-	b->rp[0] = mask;
-	b->rp[1] = ackseq>>16;
-	b->rp[2] = ackseq>>8;
-	b->rp[3] = ackseq;
-
-	bb = allocb(BLEN(b));
-	nn = thwack(c->out.compstate, bb->wp, b->rp, BLEN(b), seq, c->lstats.outCompStats);
-	if(nn < 0) {
-		freeb(bb);
-		*bp = b;
-		return ThwackU;
-	} else {
-		bb->wp += nn;
-		freeb(b);
-		*bp = bb;
-		return ThwackC;
-	}
-}
-
-static int
-thwackuncomp(Conv *c, int subtype, ulong seq, Block **bp)
-{
-	Block *b, *bb;
-	ulong mask;
-	ulong mseq;
-	int n;
-
-	switch(subtype) {
-	default:
-		return 0;
-	case ThwackU:
-		b = *bp;
-		mask = b->rp[0];
-		mseq = (b->rp[1]<<16) | (b->rp[2]<<8) | b->rp[3];
-		b->rp += 4;
-		thwackack(c->out.compstate, mseq, mask);
-		return 1;
-	case ThwackC:
-		bb = *bp;
-		b = allocb(ThwMaxBlock);
-		n = unthwack(c->in.compstate, b->wp, ThwMaxBlock, bb->rp, BLEN(bb), seq);
-		freeb(bb);
-		if(n < 0) {
-if(0)print("unthwack failed: %d\n", n);
-			freeb(b);
-			return 0;
-		}
-		b->wp += n;
-		mask = b->rp[0];
-		mseq = (b->rp[1]<<16) | (b->rp[2]<<8) | b->rp[3];
-		thwackack(c->out.compstate, mseq, mask);
-		b->rp += 4;
-		*bp = b;
-		return 1;
-	}
-}
-
-static void
-thwackcompinit(Conv *c)
-{
-	compfree(c);
-
-	c->in.compstate = malloc(sizeof(Unthwack));
-	if(c->in.compstate == nil)
-		error(Enomem);
-	unthwackinit(c->in.compstate);
-	c->out.compstate = malloc(sizeof(Thwack));
-	if(c->out.compstate == nil)
-		error(Enomem);
-	thwackinit(c->out.compstate);
-	c->in.comp = thwackuncomp;
-	c->out.comp = thwackcomp;
-}