changelog shortlog tags branches files raw gz bz2 help

Mercurial > hg > ventivac / changeset: mark-up and fixes for ventisrv-fileformat. right invocation for making the .ps on plan 9, and add a .ps for those who cannot make one.

changeset 124: cc6bd0bff47f
parent 123: d1f69ce075ec
child 125: e6afbc6fb9f9
author: Mechiel Lukkien <mechiel@ueber.net>
date: Mon, 20 Aug 2007 12:16:46 +0200
files: doc/mkfile doc/ventisrv-fileformat.ms doc/ventisrv-fileformat.ps
description: mark-up and fixes for ventisrv-fileformat. right invocation for making the .ps on plan 9, and add a .ps for those who cannot make one.

there seems to be an issue with postscript generation, the em dash does not show on gv (ghostscript) on my openbsd machine, an earlier "<=" symbol showed up as a constant width d on my printer.
     1.1--- a/doc/mkfile	Sun Aug 19 23:19:45 2007 +0200
     1.2+++ b/doc/mkfile	Mon Aug 20 12:16:46 2007 +0200
     1.3@@ -1,23 +1,11 @@
     1.4-#<fonts.pal
     1.5 NPROC = 1
     1.6 FILES = \
     1.7 	ventisrv-fileformat.ps\
     1.8 
     1.9-PRE=$FONTS'.ps 9
    1.10-.nr PS 9
    1.11-.vs 11
    1.12-.nr VS 11
    1.13-.nr dP 1
    1.14-.nr dV 1p
    1.15-.nr dT 4
    1.16-.nr XT 4
    1.17-'
    1.18-
    1.19 all:V: $FILES
    1.20 
    1.21 %.ps:D:	%.ms
    1.22 	cat $stem.ms | tbl | troff -ms | lp -dstdout > $target
    1.23-	#cat $stem.ms | tbl | groff -Tps -ms > test.ps
    1.24 
    1.25 %.pdf: %.ps
    1.26 	ps2pdf <$stem.ps >$stem.pdf
     2.1--- a/doc/ventisrv-fileformat.ms	Sun Aug 19 23:19:45 2007 +0200
     2.2+++ b/doc/ventisrv-fileformat.ms	Mon Aug 20 12:16:46 2007 +0200
     2.3@@ -8,60 +8,193 @@
     2.4 .br
     2.5 August 2007
     2.6 .AB
     2.7-This paper describes the file format used by ventisrv for its data and index file.
     2.8-It also provides some rationalisation for design decisions.
     2.9+This document describes the file format used by
    2.10+.I ventisrv
    2.11+for its data and index file and also explains design decisions.  It should provide enough insight in the file format to help with data recovery.
    2.12 .AE
    2.13 .SH
    2.14 Introduction
    2.15 .PP
    2.16-At startup, ventisrv reads the index file sequentially to read a part of the score of each stored block into memory.  The data file keeps the actual data and all relevant meta-data, enough to reconstruct an index file (though to reconstruct an index file, the data file has to be read entirely).  The data file is a concatenation of a data header and the data contents, compression changes this slightly.  The index file is a concatenation of headers referencing a block in the data file (and in the same order).  The file format is described first for the simple case, without compression, and for this case first the format of the data file, and next the format for the index file.  Then the adjustments made for to the file format to support compression are mentioned.
    2.17+At startup,
    2.18+.I ventisrv
    2.19+reads the index file sequentially from start to end and places a part of the score of each stored block in memory.  The data file keeps the actual data and all relevant meta-data, enough to reconstruct an index file (though to reconstruct an index file, the entire data file has to be read).  The data file is a concatenation of blocks, each consisting of a data header followed by the data itself; compression changes this slightly.  The index file is a concatenation of index headers, each referencing a block in the data file (and in the same order).  The file formats are described first for the simple case, without support for compression;  first the data file format, followed by the index file format.  Then the file format that supports compressed blocks is described.
    2.20 .SH
    2.21 Format of data file
    2.22 .PP
    2.23-First, an empty file (zero length) data file, is simply a data file without any block stored in it.  A block is stored by writing a header, called Dhdr, to the data file, followed by the data itself.  The header is 41 bytes long: a 4 byte magic, 20 byte score, 1 byte data type, 2 byte size, 4 bytes `connection time'.  The fixed magic value is 0x2f9d81e5.  The size field indicates the number of bytes following the header.  Even though 2 bytes can address up to 64 kilobytes, only values up to 56 kilobytes are valid as a consequence of the venti protocol which does not allow larger blocks.  Note that the `zero score', the score belonging to the empty data block, is never stored on disk, it is handled internally by ventisrv, though such a block is valid in the file format.  The score in the header is of course the score of the data following the header.  Ventisrv checks whether the score in the header matches the score it calculates from the data, to detect e.g. disk failures.  The `connection time' is the time (in seconds since UNIX epoch) at which the connection was started.  It is useful to relate blocks to an accidental or malicious batch of writes.
    2.24+An empty (zero length) data file is simply a data file
    2.25+without any blocks stored in it.  A block is stored by writing a header,
    2.26+called
    2.27+.I Dhdr ,
    2.28+to the data file, followed by the data itself.  The header is 31 bytes
    2.29+long: a 4 byte
    2.30+.I magic ,
    2.31+20 byte
    2.32+.I score ,
    2.33+1 byte
    2.34+.I "data type" ,
    2.35+2 byte
    2.36+.I size ,
    2.37+4 bytes 
    2.38+.I "connection time" .
    2.39+The fixed magic value is
    2.40+.CW 0x2f9d81e5 .
    2.41+.I Size
    2.42+indicates the number of bytes following the header, thus size of the data.  Even though 2 bytes can address up to 64 kilobytes, only values up to 56 kilobytes are valid since the venti protocol does not allow larger blocks.  Note that the `zero score'—the score belonging to the zero-length data block—is never stored on disk.  It is handled internally by
    2.43+.I ventisrv ,
    2.44+though such a block is valid in the file format.  The
    2.45+.I score
    2.46+in the header is the score of the data following the header.  During operation
    2.47+.I ventisrv
    2.48+checks whether the score in the header matches the score it calculates from the data, to detect e.g. disk failures.  The
    2.49+.I "connection time"
    2.50+is the time (in seconds since UNIX epoch) at which the venti session (TCP connection) was started.  It can be used to group and relate blocks to an accidental or malicious batch of writes.
    2.51 .PP
    2.52-This is the definition of a Dhdr in Limbo (with functions removed), along with the `magic':
    2.53+This is the definition of the
    2.54+.CW Dhdr
    2.55+in Limbo (with functions removed), along with the 
    2.56+.I magic :
    2.57+.br
    2.58 .P1
    2.59-Dhdrmagic:      con big 16r2f9d81e5;
    2.60+ Dhdrmagic:      con big 16r2f9d81e5;
    2.61 
    2.62-Dhdr: adt {
    2.63-        score:  Score;		# 20 bytes
    2.64-        dtype:  int;		# 1 byte
    2.65-        size:   int;		# 2 bytes
    2.66-        conntime:       big;	# 4 bytes
    2.67-};
    2.68+ Dhdr: adt {
    2.69+        score:		Score;	# 20 bytes
    2.70+        dtype:		int;	# 1 byte
    2.71+        size:		int;	# 2 bytes
    2.72+        conntime:	big;	# 4 bytes
    2.73+ };
    2.74 .P2
    2.75 .SH
    2.76 Format of the index file
    2.77 .PP
    2.78-For each block (header and data) written to the data file, a header is written to the index file.  Headers in the index and data file are always in the same order.  A header in the index file, called Ihdr, is 15 bytes in size: the first 8 bytes of the score (which it 20 bytes), a 1 byte type and a 6 byte offset into the data file.
    2.79+For each block (header and data) written to the data file, an
    2.80+.I Ihdr
    2.81+is written to the index file.  An
    2.82+.I Ihdr
    2.83+is 15 bytes long: the first 8 bytes of the score called
    2.84+.I halfscore ,
    2.85+a 1 byte
    2.86+.I "data type"
    2.87+and a 6 byte
    2.88+.I offset
    2.89+into the data file.
    2.90 .PP
    2.91-Only 8 bytes from the score are stored because storing more is not useful (if they were needed, more main memory would be needed to run the ventisrv than fits into current and future computers).  Also, the index file has to be read into memory at ventisrv startup, so it is best to keep it as small as possible.  Even 8 bytes are more than needed for almost all ventisrv installations.  Note that index headers to not contain a `magic' number and do not have data following them (so perhaps the name `Ihdr' is misleading).
    2.92+Only 8 bytes from the score are stored.  Storing more is not useful: if more bytes were needed, main memory requirements would be exceed
    2.93+the amount of memory that fits in a computer.  Also, the index file has to be read into memory at
    2.94+.I ventisrv
    2.95+startup, so it is best to keep it as small as possible.  Even 8 bytes are more than needed for almost all
    2.96+.I ventisrv
    2.97+installations.  Note that index headers do not contain a `magic' and do not have data following them.
    2.98 .PP
    2.99 Only 6 bytes are used for storing the offset into the data file.  More address space will never be needed because main memory will run out first when storing such large amounts of data.
   2.100+.I Offset
   2.101+is the offset in bytes into the data file to the header of the block that is referenced. Headers in the index and data file always occur in the same order.  This means the offsets in the consecutive index headers are monotonically increasing.
   2.102 .PP
   2.103-Below the definition of an Ihdr in Limbo (with functions removed) is given.  The field `compressed' is only used for compression and can be ignored for now.
   2.104+Below the definition of an
   2.105+.CW Ihdr
   2.106+in Limbo (with functions removed) is given.  The field
   2.107+.I compressed
   2.108+is used only for compression and can be ignored for now.
   2.109+.br
   2.110 .P1
   2.111-Ihdr: adt {
   2.112-        halfscore:      array of byte;	# 8 bytes
   2.113-        dtype:  int;			# 1 byte
   2.114-        offset: big;			# 6 bytes
   2.115-        compressed:     int;
   2.116-};
   2.117+ Ihdr: adt {
   2.118+        halfscore:	array of byte;	# 8 bytes
   2.119+        dtype:		int;		# 1 byte
   2.120+        offset:		big;		# 6 bytes
   2.121+        compressed:	int;
   2.122+ };
   2.123 .P2
   2.124 .SH
   2.125-Format adjustments to support compression
   2.126+File format changes to support compression
   2.127 .PP
   2.128-After the basic ventisrv functionality was implemented, support for compressing blocks of data was added.  The most straight-forward solution would be to add a bit to the index header to indicate whether the block is compressed; and add a similar bit to the header in the data file, along with the size of the compressed payload (i.e. data actually on disk, which will be decompressed in the actual data).  The actual implementation is a bit different.  A new header can now occur in the data file, the Fhdr (F for flate, the compression algorithm used, implemented by Inferno's filter-deflate(2) module.  An Fhdr is of variable size, it can contain information about one or more data blocks.  This is necessary because the compressed payload following the header contains data for multiple blocks.  The only reason for compressing multiple blocks into a single `compressed payload' is that the compression ratio will be higher, because the search history for the compression algorithm will be larger (and it does not have to build up such a history for each block to compress).
   2.129+After the basic
   2.130+.I ventisrv
   2.131+functionality had been implemented, support for compressing blocks of data was added.  The most straight-forward implementation is to add a bit to the
   2.132+.I Ihdr
   2.133+to indicate whether the block is compressed; and add a similar bit to the
   2.134+.I Dhdr ,
   2.135+along with the size of the compressed payload (i.e. data actually on disk, which will be decompressed to the actual data).  The actual implementation is a bit different.  A new header can now occur in the data file, the
   2.136+.I Fhdr
   2.137+(`F' for flate, the compression algorithm used, implemented by Inferno's
   2.138+.I filter-deflate(2)
   2.139+module.
   2.140+An
   2.141+.I Fhdr
   2.142+is of variable length, it contains information about one or more data blocks.  This is necessary because the compressed payload following the header contains data for multiple blocks.  The only reason for compressing multiple blocks into a single `compressed payload' is that the compression ratio will be higher: the search history for the compression algorithm will be larger, and it does not have to build up such a history for each block to compress.
   2.143+.PP
   2.144+The fixed-length part of an
   2.145+.I Fhdr
   2.146+is 7 bytes long:  a 4 byte
   2.147+.I magic ,
   2.148+a 1 byte
   2.149+.I count
   2.150+for the number of blocks stored in the compressed payload, and a 2 byte
   2.151+.I size
   2.152+of the compressed payload.
   2.153+The fixed magic value is
   2.154+.CW 0x78c66a15 .
   2.155+The maximum number of compressed blocks in a single
   2.156+.I Fhdr
   2.157+is 256.  The size of the compressed payload is currently kept <= 56 kilobytes, though they can be up to 64 kilobytes.  The maximum size cannot be much larger because the entire compressed payload up to the needed block has to be decompressed to read that block.
   2.158 .PP
   2.159-The fixed-length part of an Fhdr is 7 bytes long:  a 4 byte magic, a 1 byte count for the number of blocks stored in the compressed payload, and the size of the compressed payload.  The fixed value of the magic is 0x78c66a15.  The maximum number of compressed blocks in a single Fhdr is 256.  The size of the compressed payload is currently kept <= 56 kilobytes, though they can be up to 64 kilobytes.  The maximum size cannot be much larger because the entire compressed payload up to the needed block has to be decompressed when a single block is needed.
   2.160+The variable-length part of the header immediately follows the fixed-length part.  This variable part is made up of a header for each block stored in the compressed payload.  Each such header looks much like a
   2.161+.I Dhdr ,
   2.162+it is 27 bytes in size:  a 20 byte
   2.163+.I score ,
   2.164+1 byte
   2.165+.I "data type" ,
   2.166+2 byte
   2.167+.I size
   2.168+and 4 byte
   2.169+.I "connection time" .
   2.170+.I Size
   2.171+is the size of the uncompressed data.  To illustrate, consider an
   2.172+.I Fhdr
   2.173+that represents two blocks.  On disk, it will start off with 7 bytes of fixed-size header.
   2.174+The 
   2.175+.I count
   2.176+will be set to 2.  This header is followed immediately by 27 bytes for the first block and another 27 bytes for the second block.  After this a compressed payload follows with a
   2.177+.I size
   2.178+specified in the fixed-length part of the header.  Note that the entire header is stored uncompressed on file.  This allows for determining whether a score is present by only reading the header.  Compressing the 27 bytes would not be of much use anyway, since 20 bytes of out 27 are the score, which is random data to the compression algorithm.
   2.179 .PP
   2.180-The variable-length part of the header follows immediately after the fixed-length part.  This variable part is made up of a header for each block stored in the compressed payload.  Each such header looks much like a Dhdr, it is 27 bytes in size:  a 20 byte score, 1 byte date type, 2 byte size and 4 byte connection time.  The size is the size of the uncompressed data.  To illustrate, consider an Fhdr that represents two blocks.  On disk, it will start off with 7 bytes of fixed-size header.  The `count' will be set to 2.  This header is immediately followed by 27 bytes for the first block and another 27 bytes for the second block.  After this a compressed payload follows of the `size' specified in the fixed-length part of the header.  Note that the variable length part of the header is not compressed.  This allows for determining whether a score is present by only reading the header.  Compressing the 27 bytes would not be of much use anyway, since 20 bytes of out 27 are the score, which is a random value to the compression algorithm.
   2.181+The index header changes only slightly:  the most significant bit of the data file
   2.182+.I offset
   2.183+now indicates whether the header in the data file it points to is a
   2.184+.I Dhdr
   2.185+(when the bit is not set) or an
   2.186+.I Fhdr
   2.187+(when it is set).  This value is represented in the
   2.188+.CW Ihdr
   2.189+by the field
   2.190+.I compressed .
   2.191+Headers in the index file are still in the same order of appearance as the blocks in the data file.  Note that each stored score is given a header in the index file.  This includes possible multiple scores in a single
   2.192+.I Fhdr
   2.193+in the data file:  they each get an
   2.194+.I Ihdr ,
   2.195+with the data file offset pointing to the same location in the data file.  A program performing a lookup has to find the right score in the
   2.196+.I Fhdr
   2.197+itself.
   2.198 .PP
   2.199-The index header changes only slightly:  the most significant bit of the `data file offset' now indicates whether the header in the data file it points to is a Dhdr (when the bit is not set) or an Fhdr (when it is set).  Headers in the index file are still in the same order of appearance as the blocks in the data file.  Note that each stored score is given a header in the index file.  This includes possible multiple scores in a single Fhdr in the data file:  they each get an Ihdr, with the data file offset pointing to the same location.
   2.200+.I Ventisrv
   2.201+assumes data will compress to at most 90% of the original size.  When the current compression buffer has no room for another block the
   2.202+.I Fhdr
   2.203+is written to disk.  If
   2.204+.I ventisrv
   2.205+tries adding a compressed block—which was supposed to fit based on the 90%-size assumption—but the maximum compressed buffer size is exceeded, the blocks are written to the data file without compression, as
   2.206+.I Dhdr
   2.207+blocks.
   2.208+In other words,
   2.209+.I Fhdr
   2.210+and
   2.211+.I Dhdr
   2.212+blocks can be mixed freely in the data file.
   2.213 .SH
   2.214 Conclusions
   2.215 .PP
   2.216-Support for compression makes the file format less simple, but not significantly so.  Improvements could be made in the area of compression.  For example, another compression algorithm can be used, one that does not need to build-up compression history as much, or has some predefined histories to choose from.  Also, since compression is relatively slow, a faster compression algorithm would be welcome.  The header format would not necessarily have to change to accommodate for this.
   2.217+Support for compression makes the file format more complex, but not significantly so.  Improvements could be made in the area of compression.  For example, another compression algorithm could be used, one that depends less on building up compression history, or has some predefined histories to choose from.  Also, since compression is relatively slow, a faster compression algorithm would be welcome.  Early detection of whether data is compressible can alleviate the problem of slow compression somewhat.  The header format would not necessarily have to change to accommodate for this.
   2.218 .PP
   2.219-The index and data files contain enough information to cross-check the validity of the data blocks.  Ventisrv performs these checks on the most recently written blocks in these files.  The data file is always written before the index header is written, though not flushed explicitly, so the index file may be flushed in the background by a file system scheduler.  In any case, missing index entries are automatically added by ventisrv at startup, missing data file blocks are a fatal error.  The only remaining problem is the question what to do with a permanently damaged and non-recoverable (e.g. from backup) data block.  Ideally, it should be possible to mark a data block as invalid, at least in the data file.
   2.220+The index and data files contain enough information to cross-check the validity of the data blocks.
   2.221+.I Ventisrv
   2.222+performs such checks on the most recently written blocks in these files at startup.  The data file is always written before the index header is written, though not flushed explicitly, so the index file may be flushed in the background by a file system scheduler.  In any case, missing headers in the index file are automatically added by
   2.223+.I ventisrv
   2.224+at startup, missing data file blocks are a fatal error and need to be resolved manually (by removing the index headers).  The only remaining question is what to do with permanently damaged and non-recoverable (e.g. from backup) data blocks.  Ideally, it should be possible to mark a data block as invalid, at least in the data file.  There is currently no way to mark a block as such.
     3.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2+++ b/doc/ventisrv-fileformat.ps	Mon Aug 20 12:16:46 2007 +0200
     3.3@@ -0,0 +1,2153 @@
     3.4+%!PS-Adobe-2.0
     3.5+%%Version: 0.1
     3.6+%%DocumentFonts: (atend)
     3.7+%%Pages: (atend)
     3.8+%%EndComments
     3.9+%
    3.10+% Version 3.3.2 prologue for troff files.
    3.11+%
    3.12+
    3.13+/#copies 1 store
    3.14+/aspectratio 1 def
    3.15+/formsperpage 1 def
    3.16+/landscape false def
    3.17+/linewidth .3 def
    3.18+/magnification 1 def
    3.19+/margin 0 def
    3.20+/orientation 0 def
    3.21+/resolution 720 def
    3.22+/rotation 1 def
    3.23+/xoffset 0 def
    3.24+/yoffset 0 def
    3.25+
    3.26+/roundpage true def
    3.27+/useclippath true def
    3.28+/pagebbox [0 0 612 792] def
    3.29+
    3.30+/R  /Times-Roman def
    3.31+/I  /Times-Italic def
    3.32+/B  /Times-Bold def
    3.33+/BI /Times-BoldItalic def
    3.34+/H  /Helvetica def
    3.35+/HI /Helvetica-Oblique def
    3.36+/HB /Helvetica-Bold def
    3.37+/HX /Helvetica-BoldOblique def
    3.38+/CW /Courier def
    3.39+/CO /Courier def
    3.40+/CI /Courier-Oblique def
    3.41+/CB /Courier-Bold def
    3.42+/CX /Courier-BoldOblique def
    3.43+/PA /Palatino-Roman def
    3.44+/PI /Palatino-Italic def
    3.45+/PB /Palatino-Bold def
    3.46+/PX /Palatino-BoldItalic def
    3.47+/Hr /Helvetica-Narrow def
    3.48+/Hi /Helvetica-Narrow-Oblique def
    3.49+/Hb /Helvetica-Narrow-Bold def
    3.50+/Hx /Helvetica-Narrow-BoldOblique def
    3.51+/KR /Bookman-Light def
    3.52+/KI /Bookman-LightItalic def
    3.53+/KB /Bookman-Demi def
    3.54+/KX /Bookman-DemiItalic def
    3.55+/AR /AvantGarde-Book def
    3.56+/AI /AvantGarde-BookOblique def
    3.57+/AB /AvantGarde-Demi def
    3.58+/AX /AvantGarde-DemiOblique def
    3.59+/NR /NewCenturySchlbk-Roman def
    3.60+/NI /NewCenturySchlbk-Italic def
    3.61+/NB /NewCenturySchlbk-Bold def
    3.62+/NX /NewCenturySchlbk-BoldItalic def
    3.63+/ZD /ZapfDingbats def
    3.64+/ZI /ZapfChancery-MediumItalic def
    3.65+/S  /S def
    3.66+/S1 /S1 def
    3.67+/GR /Symbol def
    3.68+
    3.69+/inch {72 mul} bind def
    3.70+/min {2 copy gt {exch} if pop} bind def
    3.71+
    3.72+/setup {
    3.73+	counttomark 2 idiv {def} repeat pop
    3.74+
    3.75+	landscape {/orientation 90 orientation add def} if
    3.76+	/scaling 72 resolution div def
    3.77+	linewidth setlinewidth
    3.78+	1 setlinecap
    3.79+
    3.80+	pagedimensions
    3.81+	xcenter ycenter translate
    3.82+	orientation rotation mul rotate
    3.83+	width 2 div neg height 2 div translate
    3.84+	xoffset inch yoffset inch neg translate
    3.85+	margin 2 div dup neg translate
    3.86+	magnification dup aspectratio mul scale
    3.87+	scaling scaling scale
    3.88+
    3.89+	addmetrics
    3.90+	0 0 moveto
    3.91+} def
    3.92+
    3.93+/pagedimensions {
    3.94+	useclippath userdict /gotpagebbox known not and {
    3.95+		/pagebbox [clippath pathbbox newpath] def
    3.96+		roundpage currentdict /roundpagebbox known and {roundpagebbox} if
    3.97+	} if
    3.98+	pagebbox aload pop
    3.99+	4 -1 roll exch 4 1 roll 4 copy
   3.100+	landscape {4 2 roll} if
   3.101+	sub /width exch def
   3.102+	sub /height exch def
   3.103+	add 2 div /xcenter exch def
   3.104+	add 2 div /ycenter exch def
   3.105+	userdict /gotpagebbox true put
   3.106+} def
   3.107+
   3.108+/addmetrics {
   3.109+	/Symbol /S null Sdefs cf
   3.110+	/Times-Roman /S1 StandardEncoding dup length array copy S1defs cf
   3.111+} def
   3.112+
   3.113+/pagesetup {
   3.114+	/page exch def
   3.115+	currentdict /pagedict known currentdict page known and {
   3.116+		page load pagedict exch get cvx exec
   3.117+	} if
   3.118+} def
   3.119+
   3.120+/decodingdefs [
   3.121+	{counttomark 2 idiv {y moveto show} repeat}
   3.122+	{neg /y exch def counttomark 2 idiv {y moveto show} repeat}
   3.123+	{neg moveto {2 index stringwidth pop sub exch div 0 32 4 -1 roll widthshow} repeat}
   3.124+	{neg moveto {spacewidth sub 0.0 32 4 -1 roll widthshow} repeat}
   3.125+	{counttomark 2 idiv {y moveto show} repeat}
   3.126+	{neg setfunnytext}
   3.127+] def
   3.128+
   3.129+/setdecoding {/t decodingdefs 3 -1 roll get bind def} bind def
   3.130+
   3.131+/w {neg moveto show} bind def
   3.132+/m {neg dup /y exch def moveto} bind def
   3.133+/done {/lastpage where {pop lastpage} if} def
   3.134+
   3.135+/f {
   3.136+	dup /font exch def findfont exch
   3.137+	dup /ptsize exch def scaling div dup /size exch def scalefont setfont
   3.138+	linewidth ptsize mul scaling 10 mul div setlinewidth
   3.139+	/spacewidth ( ) stringwidth pop def
   3.140+} bind def
   3.141+
   3.142+/changefont {
   3.143+	/fontheight exch def
   3.144+	/fontslant exch def
   3.145+	currentfont [
   3.146+		1 0
   3.147+		fontheight ptsize div fontslant sin mul fontslant cos div
   3.148+		fontheight ptsize div
   3.149+		0 0
   3.150+	] makefont setfont
   3.151+} bind def
   3.152+
   3.153+/sf {f} bind def
   3.154+
   3.155+/cf {
   3.156+	dup length 2 idiv
   3.157+	/entries exch def
   3.158+	/chtab exch def
   3.159+	/newencoding exch def
   3.160+	/newfont exch def
   3.161+
   3.162+	findfont dup length 1 add dict
   3.163+	/newdict exch def
   3.164+	{1 index /FID ne {newdict 3 1 roll put}{pop pop} ifelse} forall
   3.165+
   3.166+	newencoding type /arraytype eq {newdict /Encoding newencoding put} if
   3.167+
   3.168+	newdict /Metrics entries dict put
   3.169+	newdict /Metrics get
   3.170+	begin
   3.171+		chtab aload pop
   3.172+		1 1 entries {pop def} for
   3.173+		newfont newdict definefont pop
   3.174+	end
   3.175+} bind def
   3.176+
   3.177+%
   3.178+% A few arrays used to adjust reference points and character widths in some
   3.179+% of the printer resident fonts. If square roots are too high try changing
   3.180+% the lines describing /radical and /radicalex to,
   3.181+%
   3.182+%	/radical	[0 -75 550 0]
   3.183+%	/radicalex	[-50 -75 500 0]
   3.184+%
   3.185+% Move braceleftbt a bit - default PostScript character is off a bit.
   3.186+%
   3.187+
   3.188+/Sdefs [
   3.189+	/bracketlefttp		[201 500]
   3.190+	/bracketleftbt		[201 500]
   3.191+	/bracketrighttp		[-81 380]
   3.192+	/bracketrightbt		[-83 380]
   3.193+	/braceleftbt		[203 490]
   3.194+	/bracketrightex		[220 -125 500 0]
   3.195+	/radical		[0 0 550 0]
   3.196+	/radicalex		[-50 0 500 0]
   3.197+	/parenleftex		[-20 -170 0 0]
   3.198+	/integral		[100 -50 500 0]
   3.199+	/infinity		[10 -75 730 0]
   3.200+] def
   3.201+
   3.202+/S1defs [
   3.203+	/underscore		[0 80 500 0]
   3.204+	/endash			[7 90 650 0]
   3.205+] def
   3.206+%
   3.207+% Tries to round clipping path dimensions, as stored in array pagebbox, so they
   3.208+% match one of the known sizes in the papersizes array. Lower left coordinates
   3.209+% are always set to 0.
   3.210+%
   3.211+
   3.212+/roundpagebbox {
   3.213+    7 dict begin
   3.214+	/papersizes [8.5 inch 11 inch 14 inch 17 inch] def
   3.215+
   3.216+	/mappapersize {
   3.217+		/val exch def
   3.218+		/slop .5 inch def
   3.219+		/diff slop def
   3.220+		/j 0 def
   3.221+		0 1 papersizes length 1 sub {
   3.222+			/i exch def
   3.223+			papersizes i get val sub abs
   3.224+			dup diff le {/diff exch def /j i def} {pop} ifelse
   3.225+		} for
   3.226+		diff slop lt {papersizes j get} {val} ifelse
   3.227+	} def
   3.228+
   3.229+	pagebbox 0 0 put
   3.230+	pagebbox 1 0 put
   3.231+	pagebbox dup 2 get mappapersize 2 exch put
   3.232+	pagebbox dup 3 get mappapersize 3 exch put
   3.233+    end
   3.234+} bind def
   3.235+
   3.236+%%EndProlog
   3.237+%%BeginSetup
   3.238+mark
   3.239+%
   3.240+% Encoding vector and redefinition of findfont for the ISO Latin1 standard.
   3.241+% The 18 characters missing from ROM based fonts on older printers are noted
   3.242+% below.
   3.243+%
   3.244+
   3.245+/ISOLatin1Encoding [
   3.246+	/.notdef
   3.247+	/.notdef
   3.248+	/.notdef
   3.249+	/.notdef
   3.250+	/.notdef
   3.251+	/.notdef
   3.252+	/.notdef
   3.253+	/.notdef
   3.254+	/.notdef
   3.255+	/.notdef
   3.256+	/.notdef
   3.257+	/.notdef
   3.258+	/.notdef
   3.259+	/.notdef
   3.260+	/.notdef
   3.261+	/.notdef
   3.262+	/.notdef
   3.263+	/.notdef
   3.264+	/.notdef
   3.265+	/.notdef
   3.266+	/.notdef
   3.267+	/.notdef
   3.268+	/.notdef
   3.269+	/.notdef
   3.270+	/.notdef
   3.271+	/.notdef
   3.272+	/.notdef
   3.273+	/.notdef
   3.274+	/.notdef
   3.275+	/.notdef
   3.276+	/.notdef
   3.277+	/.notdef
   3.278+	/space
   3.279+	/exclam
   3.280+	/quotedbl
   3.281+	/numbersign
   3.282+	/dollar
   3.283+	/percent
   3.284+	/ampersand
   3.285+	/quoteright
   3.286+	/parenleft
   3.287+	/parenright
   3.288+	/asterisk
   3.289+	/plus
   3.290+	/comma
   3.291+	/minus
   3.292+	/period
   3.293+	/slash
   3.294+	/zero
   3.295+	/one
   3.296+	/two
   3.297+	/three
   3.298+	/four
   3.299+	/five
   3.300+	/six
   3.301+	/seven
   3.302+	/eight
   3.303+	/nine
   3.304+	/colon
   3.305+	/semicolon
   3.306+	/less
   3.307+	/equal
   3.308+	/greater
   3.309+	/question
   3.310+	/at
   3.311+	/A
   3.312+	/B
   3.313+	/C
   3.314+	/D
   3.315+	/E
   3.316+	/F
   3.317+	/G
   3.318+	/H
   3.319+	/I
   3.320+	/J
   3.321+	/K
   3.322+	/L
   3.323+	/M
   3.324+	/N
   3.325+	/O
   3.326+	/P
   3.327+	/Q
   3.328+	/R
   3.329+	/S
   3.330+	/T
   3.331+	/U
   3.332+	/V
   3.333+	/W
   3.334+	/X
   3.335+	/Y
   3.336+	/Z
   3.337+	/bracketleft
   3.338+	/backslash
   3.339+	/bracketright
   3.340+	/asciicircum
   3.341+	/underscore
   3.342+	/quoteleft
   3.343+	/a
   3.344+	/b
   3.345+	/c
   3.346+	/d
   3.347+	/e
   3.348+	/f
   3.349+	/g
   3.350+	/h
   3.351+	/i
   3.352+	/j
   3.353+	/k
   3.354+	/l
   3.355+	/m
   3.356+	/n
   3.357+	/o
   3.358+	/p
   3.359+	/q
   3.360+	/r
   3.361+	/s
   3.362+	/t
   3.363+	/u
   3.364+	/v
   3.365+	/w
   3.366+	/x
   3.367+	/y
   3.368+	/z
   3.369+	/braceleft
   3.370+	/bar
   3.371+	/braceright
   3.372+	/asciitilde
   3.373+	/.notdef
   3.374+	/.notdef
   3.375+	/.notdef
   3.376+	/.notdef
   3.377+	/.notdef
   3.378+	/.notdef
   3.379+	/.notdef
   3.380+	/.notdef
   3.381+	/.notdef
   3.382+	/.notdef
   3.383+	/.notdef
   3.384+	/.notdef
   3.385+	/.notdef
   3.386+	/.notdef
   3.387+	/.notdef
   3.388+	/.notdef
   3.389+	/.notdef
   3.390+	/dotlessi
   3.391+	/grave
   3.392+	/acute
   3.393+	/circumflex
   3.394+	/tilde
   3.395+	/macron
   3.396+	/breve
   3.397+	/dotaccent
   3.398+	/dieresis
   3.399+	/.notdef
   3.400+	/ring
   3.401+	/cedilla
   3.402+	/.notdef
   3.403+	/hungarumlaut
   3.404+	/ogonek
   3.405+	/caron
   3.406+	/space
   3.407+	/exclamdown
   3.408+	/cent
   3.409+	/sterling
   3.410+	/currency
   3.411+	/yen
   3.412+	/brokenbar		% missing
   3.413+	/section
   3.414+	/dieresis
   3.415+	/copyright
   3.416+	/ordfeminine
   3.417+	/guillemotleft
   3.418+	/logicalnot
   3.419+	/hyphen
   3.420+	/registered
   3.421+	/macron
   3.422+	/degree			% missing
   3.423+	/plusminus		% missing
   3.424+	/twosuperior		% missing
   3.425+	/threesuperior		% missing
   3.426+	/acute
   3.427+	/mu			% missing
   3.428+	/paragraph
   3.429+	/periodcentered
   3.430+	/cedilla
   3.431+	/onesuperior		% missing
   3.432+	/ordmasculine
   3.433+	/guillemotright
   3.434+	/onequarter		% missing
   3.435+	/onehalf		% missing
   3.436+	/threequarters		% missing
   3.437+	/questiondown
   3.438+	/Agrave
   3.439+	/Aacute
   3.440+	/Acircumflex
   3.441+	/Atilde
   3.442+	/Adieresis
   3.443+	/Aring
   3.444+	/AE
   3.445+	/Ccedilla
   3.446+	/Egrave
   3.447+	/Eacute
   3.448+	/Ecircumflex
   3.449+	/Edieresis
   3.450+	/Igrave
   3.451+	/Iacute
   3.452+	/Icircumflex
   3.453+	/Idieresis
   3.454+	/Eth			% missing
   3.455+	/Ntilde
   3.456+	/Ograve
   3.457+	/Oacute
   3.458+	/Ocircumflex
   3.459+	/Otilde
   3.460+	/Odieresis
   3.461+	/multiply		% missing
   3.462+	/Oslash
   3.463+	/Ugrave
   3.464+	/Uacute
   3.465+	/Ucircumflex
   3.466+	/Udieresis
   3.467+	/Yacute			% missing
   3.468+	/Thorn			% missing
   3.469+	/germandbls
   3.470+	/agrave
   3.471+	/aacute
   3.472+	/acircumflex
   3.473+	/atilde
   3.474+	/adieresis
   3.475+	/aring
   3.476+	/ae
   3.477+	/ccedilla
   3.478+	/egrave
   3.479+	/eacute
   3.480+	/ecircumflex
   3.481+	/edieresis
   3.482+	/igrave
   3.483+	/iacute
   3.484+	/icircumflex
   3.485+	/idieresis
   3.486+	/eth			% missing
   3.487+	/ntilde
   3.488+	/ograve
   3.489+	/oacute
   3.490+	/ocircumflex
   3.491+	/otilde
   3.492+	/odieresis
   3.493+	/divide			% missing
   3.494+	/oslash
   3.495+	/ugrave
   3.496+	/uacute
   3.497+	/ucircumflex
   3.498+	/udieresis
   3.499+	/yacute			% missing
   3.500+	/thorn			% missing
   3.501+	/ydieresis
   3.502+] def
   3.503+
   3.504+/NewFontDirectory FontDirectory maxlength dict def
   3.505+
   3.506+%
   3.507+% Apparently no guarantee findfont is defined in systemdict so the obvious
   3.508+%
   3.509+%	systemdict /findfont get exec
   3.510+%
   3.511+% can generate an error. So far the only exception is a VT600 (version 48.0).
   3.512+%
   3.513+
   3.514+userdict /@RealFindfont known not {
   3.515+	userdict begin
   3.516+		/@RealFindfont systemdict begin /findfont load end def
   3.517+	end
   3.518+} if
   3.519+
   3.520+/findfont {
   3.521+	dup NewFontDirectory exch known not {
   3.522+		dup
   3.523+		%dup systemdict /findfont get exec	% not always in systemdict
   3.524+		dup userdict /@RealFindfont get exec
   3.525+		dup /Encoding get StandardEncoding eq {
   3.526+			dup length dict begin
   3.527+				{1 index /FID ne {def}{pop pop} ifelse} forall
   3.528+				/Encoding ISOLatin1Encoding def
   3.529+				currentdict
   3.530+			end
   3.531+			/DummyFontName exch definefont
   3.532+		} if
   3.533+		NewFontDirectory 3 1 roll put
   3.534+	} if
   3.535+	NewFontDirectory exch get
   3.536+} bind def
   3.537+
   3.538+%%Patch from lp
   3.539+%%EndPatch from lp
   3.540+
   3.541+setup
   3.542+%%EndSetup
   3.543+%%Page: 1 1
   3.544+/saveobj save def
   3.545+mark
   3.546+1 pagesetup
   3.547+12 /Times-Bold f
   3.548+(Ventisrv file) 2349 1230 w
   3.549+(formats) 3010 1230 w
   3.550+10 /Times-Italic f
   3.551+(Mechiel Lukkien) 2549 1470 w
   3.552+(mechiel@xs4all.nl) 2508 1590 w
   3.553+10 /Times-Roman f
   3.554+(Google Summer of Code, for the Plan 9/Inferno project) 1772 1770 w
   3.555+(August 2007) 2623 1890 w
   3.556+10 /Times-Italic f
   3.557+(ABSTRACT) 2643 2270 w
   3.558+10 /Times-Roman f
   3.559+(This) 1330 2530 w
   3.560+(document) 1537 2530 w
   3.561+(describes) 1960 2530 w
   3.562+(the) 2360 2530 w
   3.563+(file) 2511 2530 w
   3.564+(format) 2673 2530 w
   3.565+(used) 2968 2530 w
   3.566+(by) 3180 2530 w
   3.567+10 /Times-Italic f
   3.568+(ventisrv) 3309 2530 w
   3.569+10 /Times-Roman f
   3.570+(for) 3654 2530 w
   3.571+(its) 3800 2530 w
   3.572+(data) 3925 2530 w
   3.573+(and) 4121 2530 w
   3.574+(index) 4295 2530 w
   3.575+(file) 4547 2530 w
   3.576+(and) 1080 2650 w
   3.577+(also) 1253 2650 w
   3.578+(explains) 1443 2650 w
   3.579+(design) 1805 2650 w
   3.580+(decisions.) 2095 2650 w
   3.581+(It) 2546 2650 w
   3.582+(should) 2636 2650 w
   3.583+(provide) 2932 2650 w
   3.584+(enough) 3266 2650 w
   3.585+(insight) 3589 2650 w
   3.586+(in) 3891 2650 w
   3.587+(the) 3997 2650 w
   3.588+(file) 4147 2650 w
   3.589+(format) 4308 2650 w
   3.590+(to) 4602 2650 w
   3.591+(help with data recovery.) 1080 2770 w
   3.592+10 /Times-Bold f
   3.593+(Introduction) 720 3130 w
   3.594+10 /Times-Roman f
   3.595+(At) 970 3286 w
   3.596+(startup,) 1096 3286 w
   3.597+10 /Times-Italic f
   3.598+(ventisrv) 1419 3286 w
   3.599+10 /Times-Roman f
   3.600+(reads) 1761 3286 w
   3.601+(the) 1997 3286 w
   3.602+(index) 2146 3286 w
   3.603+(file) 2395 3286 w
   3.604+(sequentially) 2555 3286 w
   3.605+(from) 3065 3286 w
   3.606+(start) 3286 3286 w
   3.607+(to) 3485 3286 w
   3.608+(end) 3590 3286 w
   3.609+(and) 3761 3286 w
   3.610+(places) 3932 3286 w
   3.611+(a) 4208 3286 w
   3.612+(part) 4279 3286 w
   3.613+(of) 4461 3286 w
   3.614+(the) 4571 3286 w
   3.615+(score) 4720 3286 w
   3.616+(of) 4957 3286 w
   3.617+(each) 720 3406 w
   3.618+(stored) 941 3406 w
   3.619+(block) 1224 3406 w
   3.620+(in) 1485 3406 w
   3.621+(memory.) 1601 3406 w
   3.622+(The) 2022 3406 w
   3.623+(data) 2215 3406 w
   3.624+(file) 2419 3406 w
   3.625+(keeps) 2590 3406 w
   3.626+(the) 2855 3406 w
   3.627+(actual) 3015 3406 w
   3.628+(data) 3291 3406 w
   3.629+(and) 3495 3406 w
   3.630+(all) 3677 3406 w
   3.631+(relevant) 3815 3406 w
   3.632+(meta\255data,) 4174 3406 w
   3.633+(enough) 4630 3406 w
   3.634+(to) 4962 3406 w
   3.635+(reconstruct) 720 3526 w
   3.636+(an) 1194 3526 w
   3.637+(index) 1319 3526 w
   3.638+(file) 1572 3526 w
   3.639+(\(though) 1736 3526 w
   3.640+(to) 2078 3526 w
   3.641+(reconstruct) 2187 3526 w
   3.642+(an) 2661 3526 w
   3.643+(index) 2786 3526 w
   3.644+(file,) 3039 3526 w
   3.645+(the) 3228 3526 w
   3.646+(entire) 3381 3526 w
   3.647+(data) 3639 3526 w
   3.648+(file) 3836 3526 w
   3.649+(has) 4000 3526 w
   3.650+(to) 4165 3526 w
   3.651+(be) 4275 3526 w
   3.652+(read\).) 4401 3526 w
   3.653+(The) 4687 3526 w
   3.654+(data) 4874 3526 w
   3.655+(file) 720 3646 w
   3.656+(is) 885 3646 w
   3.657+(a) 984 3646 w
   3.658+(concatenation) 1060 3646 w
   3.659+(of) 1646 3646 w
   3.660+(blocks,) 1760 3646 w
   3.661+(each) 2077 3646 w
   3.662+(consisting) 2290 3646 w
   3.663+(of) 2727 3646 w
   3.664+(a) 2841 3646 w
   3.665+(data) 2916 3646 w
   3.666+(header) 3113 3646 w
   3.667+(followed) 3409 3646 w
   3.668+(by) 3795 3646 w
   3.669+(the) 3926 3646 w
   3.670+(data) 4079 3646 w
   3.671+(itself;) 4276 3646 w
   3.672+(compression) 4535 3646 w
   3.673+(changes) 720 3766 w
   3.674+(this) 1075 3766 w
   3.675+(slightly.) 1254 3766 w
   3.676+(The) 1640 3766 w
   3.677+(index) 1830 3766 w
   3.678+(file) 2087 3766 w
   3.679+(is) 2255 3766 w
   3.680+(a) 2357 3766 w
   3.681+(concatenation) 2436 3766 w
   3.682+(of) 3025 3766 w
   3.683+(index) 3143 3766 w
   3.684+(headers,) 3400 3766 w
   3.685+(each) 3764 3766 w
   3.686+(referencing) 3981 3766 w
   3.687+(a) 4469 3766 w
   3.688+(block) 4548 3766 w
   3.689+(in) 4805 3766 w
   3.690+(the) 4918 3766 w
   3.691+(data) 720 3886 w
   3.692+(file) 919 3886 w
   3.693+(\(and) 1085 3886 w
   3.694+(in) 1295 3886 w
   3.695+(the) 1406 3886 w
   3.696+(same) 1561 3886 w
   3.697+(order\).) 1799 3886 w
   3.698+(The) 2124 3886 w
   3.699+(file) 2311 3886 w
   3.700+(formats) 2476 3886 w
   3.701+(are) 2813 3886 w
   3.702+(described) 2966 3886 w
   3.703+(first) 3380 3886 w
   3.704+(for) 3573 3886 w
   3.705+(the) 3721 3886 w
   3.706+(simple) 3875 3886 w
   3.707+(case,) 4174 3886 w
   3.708+(without) 4402 3886 w
   3.709+(support) 4740 3886 w
   3.710+(for) 720 4006 w
   3.711+(compression;) 862 4006 w
   3.712+(first) 1446 4006 w
   3.713+(the) 1633 4006 w
   3.714+(data) 1781 4006 w
   3.715+(file) 1973 4006 w
   3.716+(format,) 2132 4006 w
   3.717+(followed) 2449 4006 w
   3.718+(by) 2830 4006 w
   3.719+(the) 2956 4006 w
   3.720+(index) 3105 4006 w
   3.721+(file) 3354 4006 w
   3.722+(format.) 3514 4006 w
   3.723+(Then) 3857 4006 w
   3.724+(the) 4089 4006 w
   3.725+(file) 4238 4006 w
   3.726+(format) 4398 4006 w
   3.727+(that) 4691 4006 w
   3.728+(sup\255) 4868 4006 w
   3.729+(ports compressed blocks is described.) 720 4126 w
   3.730+10 /Times-Bold f
   3.731+(Format of data file) 720 4366 w
   3.732+10 /Times-Roman f
   3.733+(An) 970 4522 w
   3.734+(empty) 1130 4522 w
   3.735+(\(zero) 1418 4522 w
   3.736+(length\)) 1660 4522 w
   3.737+(data) 1981 4522 w
   3.738+(file) 2185 4522 w
   3.739+(is) 2356 4522 w
   3.740+(simply) 2461 4522 w
   3.741+(a) 2772 4522 w
   3.742+(data) 2854 4522 w
   3.743+(file) 3058 4522 w
   3.744+(without) 3229 4522 w
   3.745+(any) 3573 4522 w
   3.746+(blocks) 3756 4522 w
   3.747+(stored) 4056 4522 w
   3.748+(in) 4339 4522 w
   3.749+(it.) 4456 4522 w
   3.750+(A) 4601 4522 w
   3.751+(block) 4712 4522 w
   3.752+(is) 4973 4522 w
   3.753+(stored) 720 4642 w
   3.754+(by) 993 4642 w
   3.755+(writing) 1122 4642 w
   3.756+(a) 1440 4642 w
   3.757+(header,) 1513 4642 w
   3.758+(called) 1831 4642 w
   3.759+10 /Times-Italic f
   3.760+(Dhdr) 2097 4642 w
   3.761+10 /Times-Roman f
   3.762+(,) 2308 4642 w
   3.763+(to) 2361 4642 w
   3.764+(the) 2467 4642 w
   3.765+(data) 2617 4642 w
   3.766+(file,) 2811 4642 w
   3.767+(followed) 2997 4642 w
   3.768+(by) 3380 4642 w
   3.769+(the) 3508 4642 w
   3.770+(data) 3658 4642 w
   3.771+(itself.) 3852 4642 w
   3.772+(The) 4130 4642 w
   3.773+(header) 4313 4642 w
   3.774+(is) 4606 4642 w
   3.775+(31) 4701 4642 w
   3.776+(bytes) 4829 4642 w
   3.777+(long:) 720 4762 w
   3.778+(a) 952 4762 w
   3.779+(4) 1022 4762 w
   3.780+(byte) 1098 4762 w
   3.781+10 /Times-Italic f
   3.782+(magic) 1296 4762 w
   3.783+10 /Times-Roman f
   3.784+(,) 1540 4762 w
   3.785+(20) 1591 4762 w
   3.786+(byte) 1717 4762 w
   3.787+10 /Times-Italic f
   3.788+(score) 1915 4762 w
   3.789+10 /Times-Roman f
   3.790+(,) 2131 4762 w
   3.791+(1) 2182 4762 w
   3.792+(byte) 2258 4762 w
   3.793+10 /Times-Italic f
   3.794+(data) 2456 4762 w
   3.795+(type) 2660 4762 w
   3.796+10 /Times-Roman f
   3.797+(,) 2826 4762 w
   3.798+(2) 2877 4762 w
   3.799+(byte) 2953 4762 w
   3.800+10 /Times-Italic f
   3.801+(size) 3151 4762 w
   3.802+10 /Times-Roman f
   3.803+(,) 3301 4762 w
   3.804+(4) 3353 4762 w
   3.805+(bytes) 3430 4762 w
   3.806+10 /Times-Italic f
   3.807+(connection) 3668 4762 w
   3.808+(time) 4133 4762 w
   3.809+10 /Times-Roman f
   3.810+(.) 4305 4762 w
   3.811+(The) 4382 4762 w
   3.812+(fixed) 4564 4762 w
   3.813+(magic) 4796 4762 w
   3.814+(value) 720 4882 w
   3.815+(is) 976 4882 w
   3.816+10 /Courier f
   3.817+(0x2f9d81e5) 1083 4882 w
   3.818+10 /Times-Roman f
   3.819+(.) 1683 4882 w
   3.820+10 /Times-Italic f
   3.821+(Size) 1773 4882 w
   3.822+10 /Times-Roman f
   3.823+(indicates) 1974 4882 w
   3.824+(the) 2369 4882 w
   3.825+(number) 2531 4882 w
   3.826+(of) 2876 4882 w
   3.827+(bytes) 2998 4882 w
   3.828+(following) 3248 4882 w
   3.829+(the) 3676 4882 w
   3.830+(header,) 3837 4882 w
   3.831+(thus) 4166 4882 w
   3.832+(size) 4372 4882 w
   3.833+(of) 4566 4882 w
   3.834+(the) 4688 4882 w
   3.835+(data.) 4849 4882 w
   3.836+(Even) 720 5002 w
   3.837+(though) 952 5002 w
   3.838+(2) 1257 5002 w
   3.839+(bytes) 1334 5002 w
   3.840+(can) 1572 5002 w
   3.841+(address) 1737 5002 w
   3.842+(up) 2063 5002 w
   3.843+(to) 2190 5002 w
   3.844+(64) 2295 5002 w
   3.845+(kilobytes,) 2422 5002 w
   3.846+(only) 2841 5002 w
   3.847+(values) 3046 5002 w
   3.848+(up) 3328 5002 w
   3.849+(to) 3455 5002 w
   3.850+(56) 3560 5002 w
   3.851+(kilobytes) 3687 5002 w
   3.852+(are) 4081 5002 w
   3.853+(valid) 4229 5002 w
   3.854+(since) 4457 5002 w
   3.855+(the) 4690 5002 w
   3.856+(venti) 4840 5002 w
   3.857+(protocol) 720 5122 w
   3.858+(does) 1088 5122 w
   3.859+(not) 1306 5122 w
   3.860+(allow) 1468 5122 w
   3.861+(larger) 1724 5122 w
   3.862+(blocks.) 1990 5122 w
   3.863+(Note) 2335 5122 w
   3.864+(that) 2563 5122 w
   3.865+(the) 2747 5122 w
   3.866+(`zero) 2903 5122 w
   3.867+(score') 3141 5122 w
   3.868+10 /LucidaSansUnicode20 f
   3.869+(\024) 3384 5122 w
   3.870+10 /Times-Roman f
   3.871+(the) 3484 5122 w
   3.872+(score) 3640 5122 w
   3.873+(belonging) 3884 5122 w
   3.874+(to) 4318 5122 w
   3.875+(the) 4430 5122 w
   3.876+(zero\255length) 4586 5122 w
   3.877+(data) 720 5242 w
   3.878+(block) 913 5242 w
   3.879+10 /LucidaSansUnicode20 f
   3.880+(\024) 1135 5242 w
   3.881+10 /Times-Roman f
   3.882+(is) 1235 5242 w
   3.883+(never) 1329 5242 w
   3.884+(stored) 1577 5242 w
   3.885+(on) 1848 5242 w
   3.886+(disk.) 1975 5242 w
   3.887+(It) 2219 5242 w
   3.888+(is) 2307 5242 w
   3.889+(handled) 2401 5242 w
   3.890+(internally) 2744 5242 w
   3.891+(by) 3154 5242 w
   3.892+10 /Times-Italic f
   3.893+(ventisrv) 3281 5242 w
   3.894+10 /Times-Roman f
   3.895+(,) 3597 5242 w
   3.896+(though) 3650 5242 w
   3.897+(such) 3956 5242 w
   3.898+(a) 4167 5242 w
   3.899+(block) 4239 5242 w
   3.900+(is) 4489 5242 w
   3.901+(valid) 4584 5242 w
   3.902+(in) 4812 5242 w
   3.903+(the) 4918 5242 w
   3.904+(file) 720 5362 w
   3.905+(format.) 879 5362 w
   3.906+(The) 1221 5362 w
   3.907+10 /Times-Italic f
   3.908+(score) 1402 5362 w
   3.909+10 /Times-Roman f
   3.910+(in) 1644 5362 w
   3.911+(the) 1748 5362 w
   3.912+(header) 1896 5362 w
   3.913+(is) 2187 5362 w
   3.914+(the) 2280 5362 w
   3.915+(score) 2428 5362 w
   3.916+(of) 2664 5362 w
   3.917+(the) 2773 5362 w
   3.918+(data) 2921 5362 w
   3.919+(following the header.) 3113 5362 w
   3.920+(During operation) 4014 5362 w
   3.921+10 /Times-Italic f
   3.922+(ventisrv) 4724 5362 w
   3.923+10 /Times-Roman f
   3.924+(checks) 720 5482 w
   3.925+(whether) 1018 5482 w
   3.926+(the) 1366 5482 w
   3.927+(score) 1515 5482 w
   3.928+(in) 1752 5482 w
   3.929+(the) 1857 5482 w
   3.930+(header) 2006 5482 w
   3.931+(matches) 2298 5482 w
   3.932+(the) 2652 5482 w
   3.933+(score) 2801 5482 w
   3.934+(it) 3039 5482 w
   3.935+(calculates) 3123 5482 w
   3.936+(from) 3544 5482 w
   3.937+(the) 3766 5482 w
   3.938+(data,) 3916 5482 w
   3.939+(to) 4135 5482 w
   3.940+(detect) 4241 5482 w
   3.941+(e.g.) 4507 5482 w
   3.942+(disk) 4679 5482 w
   3.943+(fail\255) 4874 5482 w
   3.944+(ures.) 720 5602 w
   3.945+(The) 964 5602 w
   3.946+10 /Times-Italic f
   3.947+(connection) 1147 5602 w
   3.948+(time) 1613 5602 w
   3.949+10 /Times-Roman f
   3.950+(is) 1813 5602 w
   3.951+(the) 1908 5602 w
   3.952+(time) 2058 5602 w
   3.953+(\(in) 2264 5602 w
   3.954+(seconds) 2403 5602 w
   3.955+(since) 2747 5602 w
   3.956+(UNIX) 2980 5602 w
   3.957+(epoch\)) 3257 5602 w
   3.958+(at) 3556 5602 w
   3.959+(which) 3656 5602 w
   3.960+(the) 3927 5602 w
   3.961+(venti) 4076 5602 w
   3.962+(session) 4303 5602 w
   3.963+(\(TCP) 4619 5602 w
   3.964+(con\255) 4863 5602 w
   3.965+(nection\) was started.) 720 5722 w
   3.966+(It can be used to group and relate blocks to an accidental or malicious batch of writes.) 1593 5722 w
   3.967+(This is the definition of the) 970 5878 w
   3.968+10 /Courier f
   3.969+(Dhdr) 2081 5878 w
   3.970+10 /Times-Roman f
   3.971+(in Limbo \(with functions removed\), along with the) 2346 5878 w
   3.972+10 /Times-Italic f
   3.973+(magic) 4403 5878 w
   3.974+10 /Times-Roman f
   3.975+(:) 4647 5878 w
   3.976+9 /Courier f
   3.977+(Dhdrmagic:) 1062 6048 w
   3.978+(con big 16r2f9d81e5;) 1926 6048 w
   3.979+(Dhdr: adt {) 1062 6268 w
   3.980+(score:) 1440 6378 w
   3.981+(Score;) 2304 6378 w
   3.982+(# 20 bytes) 2736 6378 w
   3.983+(dtype:) 1440 6488 w
   3.984+(int;) 2304 6488 w
   3.985+(# 1 byte) 2736 6488 w
   3.986+(size:) 1440 6598 w
   3.987+(int;) 2304 6598 w
   3.988+(# 2 bytes) 2736 6598 w
   3.989+(conntime:) 1440 6708 w
   3.990+(big;) 2304 6708 w
   3.991+(# 4 bytes) 2736 6708 w
   3.992+(};) 1062 6818 w
   3.993+cleartomark
   3.994+showpage
   3.995+saveobj restore
   3.996+%%EndPage: 1 1
   3.997+%%Page: 2 2
   3.998+/saveobj save def
   3.999+mark
  3.1000+2 pagesetup
  3.1001+10 /Times-Roman f
  3.1002+(\255 2 \255) 2797 480 w
  3.1003+10 /Times-Bold f
  3.1004+(Format of the index file) 720 840 w
  3.1005+10 /Times-Roman f
  3.1006+(For) 970 996 w
  3.1007+(each) 1137 996 w
  3.1008+(block) 1347 996 w
  3.1009+(\(header) 1597 996 w
  3.1010+(and) 1923 996 w
  3.1011+(data\)) 2095 996 w
  3.1012+(written) 2322 996 w
  3.1013+(to) 2633 996 w
  3.1014+(the) 2739 996 w
  3.1015+(data) 2889 996 w
  3.1016+(file,) 3083 996 w
  3.1017+(an) 3269 996 w
  3.1018+10 /Times-Italic f
  3.1019+(Ihdr) 3391 996 w
  3.1020+10 /Times-Roman f
  3.1021+(is) 3591 996 w
  3.1022+(written) 3686 996 w
  3.1023+(to) 3997 996 w
  3.1024+(the) 4103 996 w
  3.1025+(index) 4254 996 w
  3.1026+(file.) 4505 996 w
  3.1027+(An) 4717 996 w
  3.1028+10 /Times-Italic f
  3.1029+(Ihdr) 4868 996 w
  3.1030+10 /Times-Roman f
  3.1031+(is) 720 1116 w
  3.1032+(15) 814 1116 w
  3.1033+(bytes) 941 1116 w
  3.1034+(long:) 1179 1116 w
  3.1035+(the) 1411 1116 w
  3.1036+(first) 1559 1116 w
  3.1037+(8) 1746 1116 w
  3.1038+(bytes) 1822 1116 w
  3.1039+(of) 2059 1116 w
  3.1040+(the) 2168 1116 w
  3.1041+(score) 2316 1116 w
  3.1042+(called) 2552 1116 w
  3.1043+10 /Times-Italic f
  3.1044+(halfscore) 2816 1116 w
  3.1045+10 /Times-Roman f
  3.1046+(,) 3188 1116 w
  3.1047+(a) 3239 1116 w
  3.1048+(1) 3309 1116 w
  3.1049+(byte) 3385 1116 w
  3.1050+10 /Times-Italic f
  3.1051+(data) 3583 1116 w
  3.1052+(type) 3787 1116 w
  3.1053+10 /Times-Roman f
  3.1054+(and) 3979 1116 w
  3.1055+(a) 4149 1116 w
  3.1056+(6) 4219 1116 w
  3.1057+(byte) 4295 1116 w
  3.1058+10 /Times-Italic f
  3.1059+(offset) 4493 1116 w
  3.1060+10 /Times-Roman f
  3.1061+(into) 4736 1116 w
  3.1062+(the) 4918 1116 w
  3.1063+(data file.) 720 1236 w
  3.1064+(Only) 970 1392 w
  3.1065+(8) 1199 1392 w
  3.1066+(bytes) 1278 1392 w
  3.1067+(from) 1518 1392 w
  3.1068+(the) 1741 1392 w
  3.1069+(score) 1892 1392 w
  3.1070+(are) 2131 1392 w
  3.1071+(stored.) 2281 1392 w
  3.1072+(Storing) 2604 1392 w
  3.1073+(more) 2928 1392 w
  3.1074+(is) 3162 1392 w
  3.1075+(not) 3258 1392 w
  3.1076+(useful:) 3415 1392 w
  3.1077+(if) 3716 1392 w
  3.1078+(more) 3806 1392 w
  3.1079+(bytes) 4040 1392 w
  3.1080+(were) 4280 1392 w
  3.1081+(needed,) 4503 1392 w
  3.1082+(main) 4840 1392 w
  3.1083+(memory) 720 1512 w
  3.1084+(requirements) 1082 1512 w
  3.1085+(would) 1632 1512 w
  3.1086+(be) 1911 1512 w
  3.1087+(exceed) 2034 1512 w
  3.1088+(the) 2339 1512 w
  3.1089+(amount) 2490 1512 w
  3.1090+(of) 2819 1512 w
  3.1091+(memory) 2931 1512 w
  3.1092+(that) 3293 1512 w
  3.1093+(fits) 3472 1512 w
  3.1094+(in) 3629 1512 w
  3.1095+(a) 3736 1512 w
  3.1096+(computer.) 3809 1512 w
  3.1097+(Also,) 4265 1512 w
  3.1098+(the) 4507 1512 w
  3.1099+(index) 4657 1512 w
  3.1100+(file) 4907 1512 w
  3.1101+(has) 720 1632 w
  3.1102+(to) 880 1632 w
  3.1103+(be) 985 1632 w
  3.1104+(read) 1106 1632 w
  3.1105+(into) 1304 1632 w
  3.1106+(memory) 1487 1632 w
  3.1107+(at) 1847 1632 w
  3.1108+10 /Times-Italic f
  3.1109+(ventisrv) 1946 1632 w
  3.1110+10 /Times-Roman f
  3.1111+(startup,) 2289 1632 w
  3.1112+(so) 2613 1632 w
  3.1113+(it) 2729 1632 w
  3.1114+(is) 2812 1632 w
  3.1115+(best) 2906 1632 w
  3.1116+(to) 3094 1632 w
  3.1117+(keep) 3199 1632 w
  3.1118+(it) 3414 1632 w
  3.1119+(as) 3497 1632 w
  3.1120+(small) 3607 1632 w
  3.1121+(as) 3852 1632 w
  3.1122+(possible.) 3963 1632 w
  3.1123+(Even) 4369 1632 w
  3.1124+(8) 4602 1632 w
  3.1125+(bytes) 4680 1632 w
  3.1126+(are) 4919 1632 w
  3.1127+(more) 720 1752 w
  3.1128+(than) 951 1752 w
  3.1129+(needed) 1149 1752 w
  3.1130+(for) 1457 1752 w
  3.1131+(almost) 1599 1752 w
  3.1132+(all) 1892 1752 w
  3.1133+10 /Times-Italic f
  3.1134+(ventisrv) 2018 1752 w
  3.1135+10 /Times-Roman f
  3.1136+(installations.) 2360 1752 w
  3.1137+(Note) 2920 1752 w
  3.1138+(that) 3140 1752 w
  3.1139+(index) 3316 1752 w
  3.1140+(headers) 3564 1752 w
  3.1141+(do) 3894 1752 w
  3.1142+(not contain a `magic' and) 4020 1752 w
  3.1143+(do not have data following them.) 720 1872 w
  3.1144+(Only) 970 2028 w
  3.1145+(6) 1210 2028 w
  3.1146+(bytes) 1300 2028 w
  3.1147+(are) 1551 2028 w
  3.1148+(used) 1712 2028 w
  3.1149+(for) 1935 2028 w
  3.1150+(storing) 2091 2028 w
  3.1151+(the) 2409 2028 w
  3.1152+(offset) 2571 2028 w
  3.1153+(into) 2838 2028 w
  3.1154+(the) 3034 2028 w
  3.1155+(data) 3197 2028 w
  3.1156+(file.) 3404 2028 w
  3.1157+(More) 3628 2028 w
  3.1158+(address) 3885 2028 w
  3.1159+(space) 4225 2028 w
  3.1160+(will) 4487 2028 w
  3.1161+(never) 4684 2028 w
  3.1162+(be) 4946 2028 w
  3.1163+(needed) 720 2148 w
  3.1164+(because) 1031 2148 w
  3.1165+(main) 1375 2148 w
  3.1166+(memory) 1604 2148 w
  3.1167+(will) 1966 2148 w
  3.1168+(run) 2151 2148 w
  3.1169+(out) 2313 2148 w
  3.1170+(first) 2470 2148 w
  3.1171+(when) 2660 2148 w
  3.1172+(storing) 2905 2148 w
  3.1173+(such) 3212 2148 w
  3.1174+(large) 3424 2148 w
  3.1175+(amounts) 3652 2148 w
  3.1176+(of) 4020 2148 w
  3.1177+(data.) 4132 2148 w
  3.1178+10 /Times-Italic f
  3.1179+(Offset) 4377 2148 w
  3.1180+10 /Times-Roman f
  3.1181+(is) 4645 2148 w
  3.1182+(the) 4741 2148 w
  3.1183+(off\255) 4891 2148 w
  3.1184+(set) 720 2268 w
  3.1185+(in) 858 2268 w
  3.1186+(bytes) 963 2268 w
  3.1187+(into) 1201 2268 w
  3.1188+(the) 1384 2268 w
  3.1189+(data) 1533 2268 w
  3.1190+(file) 1726 2268 w
  3.1191+(to) 1886 2268 w
  3.1192+(the) 1991 2268 w
  3.1193+(header) 2140 2268 w
  3.1194+(of) 2432 2268 w
  3.1195+(the) 2542 2268 w
  3.1196+(block) 2691 2268 w
  3.1197+(that) 2940 2268 w
  3.1198+(is) 3117 2268 w
  3.1199+(referenced.) 3211 2268 w
  3.1200+(Headers) 3682 2268 w
  3.1201+(in) 4035 2268 w
  3.1202+(the) 4141 2268 w
  3.1203+(index) 4291 2268 w
  3.1204+(and) 4541 2268 w
  3.1205+(data) 4713 2268 w
  3.1206+(file) 4907 2268 w
  3.1207+(always) 720 2388 w
  3.1208+(occur) 1025 2388 w
  3.1209+(in) 1274 2388 w
  3.1210+(the) 1380 2388 w
  3.1211+(same) 1530 2388 w
  3.1212+(order.) 1763 2388 w
  3.1213+(This) 2051 2388 w
  3.1214+(means) 2257 2388 w
  3.1215+(the) 2540 2388 w
  3.1216+(offsets) 2689 2388 w
  3.1217+(in) 2982 2388 w
  3.1218+(the) 3087 2388 w
  3.1219+(consecutive) 3236 2388 w
  3.1220+(index) 3734 2388 w
  3.1221+(headers) 3983 2388 w
  3.1222+(are) 4314 2388 w
  3.1223+(monotonically) 4462 2388 w
  3.1224+(increasing.) 720 2508 w
  3.1225+(Below) 970 2664 w
  3.1226+(the) 1259 2664 w
  3.1227+(definition) 1409 2664 w
  3.1228+(of) 1826 2664 w
  3.1229+(an) 1937 2664 w
  3.1230+10 /Courier f
  3.1231+(Ihdr) 2059 2664 w
  3.1232+10 /Times-Roman f
  3.1233+(in) 2327 2664 w
  3.1234+(Limbo) 2433 2664 w
  3.1235+(\(with) 2728 2664 w
  3.1236+(functions) 2967 2664 w
  3.1237+(removed\)) 3367 2664 w
  3.1238+(is) 3777 2664 w
  3.1239+(given.) 3872 2664 w
  3.1240+(The) 4173 2664 w
  3.1241+(field) 4357 2664 w
  3.1242+10 /Times-Italic f
  3.1243+(compressed) 4569 2664 w
  3.1244+10 /Times-Roman f
  3.1245+(is used only for compression and can be ignored for now.) 720 2784 w
  3.1246+9 /Courier f
  3.1247+(Ihdr: adt {) 1062 2954 w
  3.1248+(halfscore:) 1440 3064 w
  3.1249+(array of byte;) 2304 3064 w
  3.1250+(# 8 bytes) 3168 3064 w
  3.1251+(dtype:) 1440 3174 w
  3.1252+(int;) 2304 3174 w
  3.1253+(# 1 byte) 3168 3174 w
  3.1254+(offset:) 1440 3284 w
  3.1255+(big;) 2304 3284 w
  3.1256+(# 6 bytes) 3168 3284 w
  3.1257+(compressed:) 1440 3394 w
  3.1258+(int;) 2304 3394 w
  3.1259+(};) 1062 3504 w
  3.1260+10 /Times-Bold f
  3.1261+(File format changes to support compression) 720 3804 w
  3.1262+10 /Times-Roman f
  3.1263+(After) 970 3960 w
  3.1264+(the) 1210 3960 w
  3.1265+(basic) 1362 3960 w
  3.1266+10 /Times-Italic f
  3.1267+(ventisrv) 1597 3960 w
  3.1268+10 /Times-Roman f
  3.1269+(functionality) 1943 3960 w
  3.1270+(had) 2484 3960 w
  3.1271+(been) 2658 3960 w
  3.1272+(implemented,) 2876 3960 w
  3.1273+(support) 3454 3960 w
  3.1274+(for) 3785 3960 w
  3.1275+(compressing) 3932 3960 w
  3.1276+(blocks) 4468 3960 w
  3.1277+(of) 4760 3960 w
  3.1278+(data) 4874 3960 w
  3.1279+(was) 720 4080 w
  3.1280+(added.) 911 4080 w
  3.1281+(The) 1235 4080 w
  3.1282+(most) 1426 4080 w
  3.1283+(straight\255forward) 1657 4080 w
  3.1284+(implementation) 2341 4080 w
  3.1285+(is) 3005 4080 w
  3.1286+(to) 3108 4080 w
  3.1287+(add) 3222 4080 w
  3.1288+(a) 3401 4080 w
  3.1289+(bit) 3480 4080 w
  3.1290+(to) 3621 4080 w
  3.1291+(the) 3734 4080 w
  3.1292+10 /Times-Italic f
  3.1293+(Ihdr) 3891 4080 w
  3.1294+10 /Times-Roman f
  3.1295+(to) 4098 4080 w
  3.1296+(indicate) 4211 4080 w
  3.1297+(whether) 4562 4080 w
  3.1298+(the) 4918 4080 w
  3.1299+(block) 720 4200 w
  3.1300+(is) 971 4200 w
  3.1301+(compressed;) 1067 4200 w
  3.1302+(and) 1595 4200 w
  3.1303+(add) 1768 4200 w
  3.1304+(a) 1941 4200 w
  3.1305+(similar) 2014 4200 w
  3.1306+(bit) 2321 4200 w
  3.1307+(to) 2456 4200 w
  3.1308+(the) 2563 4200 w
  3.1309+10 /Times-Italic f
  3.1310+(Dhdr) 2714 4200 w
  3.1311+10 /Times-Roman f
  3.1312+(,) 2925 4200 w
  3.1313+(along) 2979 4200 w
  3.1314+(with) 3230 4200 w
  3.1315+(the) 3437 4200 w
  3.1316+(size) 3588 4200 w
  3.1317+(of) 3773 4200 w
  3.1318+(the) 3886 4200 w
  3.1319+(compressed) 4038 4200 w
  3.1320+(payload) 4539 4200 w
  3.1321+(\(i.e.) 4885 4200 w
  3.1322+(data) 720 4320 w
  3.1323+(actually) 920 4320 w
  3.1324+(on) 1269 4320 w
  3.1325+(disk,) 1402 4320 w
  3.1326+(which) 1627 4320 w
  3.1327+(will) 1904 4320 w
  3.1328+(be) 2093 4320 w
  3.1329+(decompressed) 2220 4320 w
  3.1330+(to) 2818 4320 w
  3.1331+(the) 2929 4320 w
  3.1332+(actual) 3084 4320 w
  3.1333+(data\).) 3355 4320 w
  3.1334+(The) 3637 4320 w
  3.1335+(actual) 3825 4320 w
  3.1336+(implementation) 4096 4320 w
  3.1337+(is) 4757 4320 w
  3.1338+(a) 4857 4320 w
  3.1339+(bit) 4934 4320 w
  3.1340+(different.) 720 4440 w
  3.1341+(A) 1144 4440 w
  3.1342+(new) 1247 4440 w
  3.1343+(header) 1444 4440 w
  3.1344+(can) 1740 4440 w
  3.1345+(now) 1909 4440 w
  3.1346+(occur) 2112 4440 w
  3.1347+(in) 2364 4440 w
  3.1348+(the) 2473 4440 w
  3.1349+(data) 2626 4440 w
  3.1350+(file,) 2823 4440 w
  3.1351+(the) 3012 4440 w
  3.1352+10 /Times-Italic f
  3.1353+(Fhdr) 3165 4440 w
  3.1354+10 /Times-Roman f
  3.1355+(\(`F') 3396 4440 w
  3.1356+(for) 3582 4440 w
  3.1357+(flate,) 3729 4440 w
  3.1358+(the) 3962 4440 w
  3.1359+(compression) 4115 4440 w
  3.1360+(algorithm) 4651 4440 w
  3.1361+(used,) 720 4560 w
  3.1362+(implemented) 954 4560 w
  3.1363+(by) 1502 4560 w
  3.1364+(Inferno's) 1628 4560 w
  3.1365+10 /Times-Italic f
  3.1366+(filter\255deflate\(2\)) 2018 4560 w
  3.1367+10 /Times-Roman f
  3.1368+(module.) 2659 4560 w
  3.1369+(An) 3034 4560 w
  3.1370+10 /Times-Italic f
  3.1371+(Fhdr) 3181 4560 w
  3.1372+10 /Times-Roman f
  3.1373+(is of variable length, it contains informa\255) 3406 4560 w
  3.1374+(tion about one or more data blocks.) 720 4680 w
  3.1375+(This is necessary because the compressed payload following the) 2182 4680 w
  3.1376+(header) 4775 4680 w
  3.1377+(contains) 720 4800 w
  3.1378+(data) 1092 4800 w
  3.1379+(for) 1297 4800 w
  3.1380+(multiple) 1452 4800 w
  3.1381+(blocks.) 1825 4800 w
  3.1382+(The) 2174 4800 w
  3.1383+(only) 2367 4800 w
  3.1384+(reason) 2583 4800 w
  3.1385+(for) 2881 4800 w
  3.1386+(compressing) 3035 4800 w
  3.1387+(multiple) 3578 4800 w
  3.1388+(blocks) 3950 4800 w
  3.1389+(into) 4249 4800 w
  3.1390+(a) 4443 4800 w
  3.1391+(single) 4525 4800 w
  3.1392+(`com\255) 4802 4800 w
  3.1393+(pressed) 720 4920 w
  3.1394+(payload') 1050 4920 w
  3.1395+(is) 1430 4920 w
  3.1396+(that) 1529 4920 w
  3.1397+(the) 1711 4920 w
  3.1398+(compression) 1865 4920 w
  3.1399+(ratio) 2402 4920 w
  3.1400+(will) 2617 4920 w
  3.1401+(be) 2805 4920 w
  3.1402+(higher:) 2931 4920 w
  3.1403+(the) 3246 4920 w
  3.1404+(search) 3400 4920 w
  3.1405+(history) 3686 4920 w
  3.1406+(for) 3996 4920 w
  3.1407+(the) 4144 4920 w
  3.1408+(compression) 4298 4920 w
  3.1409+(algo\255) 4835 4920 w
  3.1410+(rithm will be larger, and it does not have to build up such a history for each block to compress.) 720 5040 w
  3.1411+(The) 970 5196 w
  3.1412+(fixed\255length) 1157 5196 w
  3.1413+(part) 1677 5196 w
  3.1414+(of) 1864 5196 w
  3.1415+(an) 1979 5196 w
  3.1416+10 /Times-Italic f
  3.1417+(Fhdr) 2105 5196 w
  3.1418+10 /Times-Roman f
  3.1419+(is) 2337 5196 w
  3.1420+(7) 2437 5196 w
  3.1421+(bytes) 2520 5196 w
  3.1422+(long:) 2764 5196 w
  3.1423+(a) 3028 5196 w
  3.1424+(4) 3105 5196 w
  3.1425+(byte) 3188 5196 w
  3.1426+10 /Times-Italic f
  3.1427+(magic) 3393 5196 w
  3.1428+10 /Times-Roman f
  3.1429+(,) 3637 5196 w
  3.1430+(a) 3695 5196 w
  3.1431+(1) 3772 5196 w
  3.1432+(byte) 3855 5196 w
  3.1433+10 /Times-Italic f
  3.1434+(count) 4060 5196 w
  3.1435+10 /Times-Roman f
  3.1436+(for) 4315 5196 w
  3.1437+(the) 4464 5196 w
  3.1438+(number) 4619 5196 w
  3.1439+(of) 4957 5196 w
  3.1440+(blocks) 720 5316 w
  3.1441+(stored) 1017 5316 w
  3.1442+(in) 1297 5316 w
  3.1443+(the) 1410 5316 w
  3.1444+(compressed) 1567 5316 w
  3.1445+(payload,) 2073 5316 w
  3.1446+(and) 2449 5316 w
  3.1447+(a) 2628 5316 w
  3.1448+(2) 2707 5316 w
  3.1449+(byte) 2792 5316 w
  3.1450+10 /Times-Italic f
  3.1451+(size) 2999 5316 w
  3.1452+10 /Times-Roman f
  3.1453+(of) 3184 5316 w
  3.1454+(the) 3302 5316 w
  3.1455+(compressed) 3459 5316 w
  3.1456+(payload.) 3965 5316 w
  3.1457+(The) 4366 5316 w
  3.1458+(fixed) 4556 5316 w
  3.1459+(magic) 4796 5316 w
  3.1460+(value) 720 5436 w
  3.1461+(is) 964 5436 w
  3.1462+10 /Courier f
  3.1463+(0x78c66a15) 1059 5436 w
  3.1464+10 /Times-Roman f
  3.1465+(.) 1659 5436 w
  3.1466+(The) 1737 5436 w
  3.1467+(maximum) 1920 5436 w
  3.1468+(number) 2354 5436 w
  3.1469+(of) 2687 5436 w
  3.1470+(compressed) 2798 5436 w
  3.1471+(blocks) 3297 5436 w
  3.1472+(in) 3587 5436 w
  3.1473+(a) 3694 5436 w
  3.1474+(single) 3767 5436 w
  3.1475+10 /Times-Italic f
  3.1476+(Fhdr) 4035 5436 w
  3.1477+10 /Times-Roman f
  3.1478+(is) 4264 5436 w
  3.1479+(256.) 4360 5436 w
  3.1480+(The) 4589 5436 w
  3.1481+(size) 4773 5436 w
  3.1482+(of) 4957 5436 w
  3.1483+(the) 720 5556 w
  3.1484+(compressed) 869 5556 w
  3.1485+(payload) 1367 5556 w
  3.1486+(is) 1710 5556 w
  3.1487+(currently) 1803 5556 w
  3.1488+(kept) 2189 5556 w
  3.1489+(<=) 2387 5556 w
  3.1490+(56) 2525 5556 w
  3.1491+(kilobytes,) 2651 5556 w
  3.1492+(though) 3069 5556 w
  3.1493+(they) 3373 5556 w
  3.1494+(can) 3571 5556 w
  3.1495+(be) 3735 5556 w
  3.1496+(up) 3855 5556 w
  3.1497+(to) 3981 5556 w
  3.1498+(64) 4085 5556 w
  3.1499+(kilobytes.) 4211 5556 w
  3.1500+(The) 4654 5556 w
  3.1501+(max\255) 4835 5556 w
  3.1502+(imum) 720 5676 w
  3.1503+(size) 984 5676 w
  3.1504+(cannot) 1170 5676 w
  3.1505+(be) 1467 5676 w
  3.1506+(much) 1592 5676 w
  3.1507+(larger) 1845 5676 w
  3.1508+(because) 2108 5676 w
  3.1509+(the) 2454 5676 w
  3.1510+(entire) 2607 5676 w
  3.1511+(compressed) 2865 5676 w
  3.1512+(payload) 3367 5676 w
  3.1513+(up) 3714 5676 w
  3.1514+(to) 3845 5676 w
  3.1515+(the) 3954 5676 w
  3.1516+(needed) 4107 5676 w
  3.1517+(block) 4420 5676 w
  3.1518+(has) 4673 5676 w
  3.1519+(to) 4837 5676 w
  3.1520+(be) 4946 5676 w
  3.1521+(decompressed to read that block.) 720 5796 w
  3.1522+(The variable\255length part of the header immediately follows the fixed\255length part.) 970 5952 w
  3.1523+(This variable part is) 4244 5952 w
  3.1524+(made) 720 6072 w
  3.1525+(up) 964 6072 w
  3.1526+(of) 1092 6072 w
  3.1527+(a) 1203 6072 w
  3.1528+(header) 1275 6072 w
  3.1529+(for) 1568 6072 w
  3.1530+(each) 1712 6072 w
  3.1531+(block) 1922 6072 w
  3.1532+(stored) 2172 6072 w
  3.1533+(in) 2444 6072 w
  3.1534+(the) 2550 6072 w
  3.1535+(compressed) 2700 6072 w
  3.1536+(payload.) 3199 6072 w
  3.1537+(Each) 3593 6072 w
  3.1538+(such) 3820 6072 w
  3.1539+(header) 4031 6072 w
  3.1540+(looks) 4324 6072 w
  3.1541+(much) 4569 6072 w
  3.1542+(like) 4819 6072 w
  3.1543+(a) 4996 6072 w
  3.1544+10 /Times-Italic f
  3.1545+(Dhdr) 720 6192 w
  3.1546+10 /Times-Roman f
  3.1547+(,) 931 6192 w
  3.1548+(it) 984 6192 w
  3.1549+(is) 1068 6192 w
  3.1550+(27) 1163 6192 w
  3.1551+(bytes) 1291 6192 w
  3.1552+(in) 1530 6192 w
  3.1553+(size:) 1636 6192 w
  3.1554+(a) 1872 6192 w
  3.1555+(20) 1944 6192 w
  3.1556+(byte) 2072 6192 w
  3.1557+10 /Times-Italic f
  3.1558+(score) 2272 6192 w
  3.1559+10 /Times-Roman f
  3.1560+(,) 2488 6192 w
  3.1561+(1) 2542 6192 w
  3.1562+(byte) 2621 6192 w
  3.1563+10 /Times-Italic f
  3.1564+(data) 2822 6192 w
  3.1565+(type) 3029 6192 w
  3.1566+10 /Times-Roman f
  3.1567+(,) 3195 6192 w
  3.1568+(2) 3249 6192 w
  3.1569+(byte) 3328 6192 w
  3.1570+10 /Times-Italic f
  3.1571+(size) 3529 6192 w
  3.1572+10 /Times-Roman f
  3.1573+(and) 3708 6192 w
  3.1574+(4) 3881 6192 w
  3.1575+(byte) 3960 6192 w
  3.1576+10 /Times-Italic f
  3.1577+(connection) 4161 6192 w
  3.1578+(time) 4628 6192 w
  3.1579+10 /Times-Roman f
  3.1580+(.) 4800 6192 w
  3.1581+10 /Times-Italic f
  3.1582+(Size) 4879 6192 w
  3.1583+10 /Times-Roman f
  3.1584+(is) 720 6312 w
  3.1585+(the) 814 6312 w
  3.1586+(size) 963 6312 w
  3.1587+(of) 1145 6312 w
  3.1588+(the) 1255 6312 w
  3.1589+(uncompressed) 1404 6312 w
  3.1590+(data.) 2002 6312 w
  3.1591+(To) 2245 6312 w
  3.1592+(illustrate,) 2383 6312 w
  3.1593+(consider) 2785 6312 w
  3.1594+(an) 3150 6312 w
  3.1595+10 /Times-Italic f
  3.1596+(Fhdr) 3271 6312 w
  3.1597+10 /Times-Roman f
  3.1598+(that) 3498 6312 w
  3.1599+(represents) 3675 6312 w
  3.1600+(two) 4105 6312 w
  3.1601+(blocks.) 4281 6312 w
  3.1602+(On) 4618 6312 w
  3.1603+(disk,) 4766 6312 w
  3.1604+(it) 4984 6312 w
  3.1605+(will) 720 6432 w
  3.1606+(start) 902 6432 w
  3.1607+(off) 1100 6432 w
  3.1608+(with) 1242 6432 w
  3.1609+(7) 1446 6432 w
  3.1610+(bytes) 1522 6432 w
  3.1611+(of) 1759 6432 w
  3.1612+(fixed\255size) 1868 6432 w
  3.1613+(header.) 2287 6432 w
  3.1614+(The) 2628 6432 w
  3.1615+10 /Times-Italic f
  3.1616+(count) 2809 6432 w
  3.1617+10 /Times-Roman f
  3.1618+(will) 3057 6432 w
  3.1619+(be) 3239 6432 w
  3.1620+(set) 3359 6432 w
  3.1621+(to) 3496 6432 w
  3.1622+(2.) 3601 6432 w
  3.1623+(This) 3728 6432 w
  3.1624+(header) 3933 6432 w
  3.1625+(is) 4225 6432 w
  3.1626+(followed) 4319 6432 w
  3.1627+(immedi\255) 4701 6432 w
  3.1628+(ately) 720 6552 w
  3.1629+(by) 940 6552 w
  3.1630+(27) 1066 6552 w
  3.1631+(bytes) 1192 6552 w
  3.1632+(for) 1429 6552 w
  3.1633+(the) 1571 6552 w
  3.1634+(first block and another 27 bytes for the second block.) 1719 6552 w
  3.1635+(After this a compressed pay\255) 3893 6552 w
  3.1636+(load follows with a) 720 6672 w
  3.1637+10 /Times-Italic f
  3.1638+(size) 1514 6672 w
  3.1639+10 /Times-Roman f
  3.1640+(specified in the fixed\255length part of) 1689 6672 w
  3.1641+(the) 3126 6672 w
  3.1642+(header.) 3274 6672 w
  3.1643+(Note) 3615 6672 w
  3.1644+(that) 3835 6672 w
  3.1645+(the) 4011 6672 w
  3.1646+(entire) 4159 6672 w
  3.1647+(header) 4412 6672 w
  3.1648+(is) 4703 6672 w
  3.1649+(stored) 4796 6672 w
  3.1650+(uncompressed) 720 6792 w
  3.1651+(on) 1323 6792 w
  3.1652+(file.) 1455 6792 w
  3.1653+(This) 1670 6792 w
  3.1654+(allows) 1880 6792 w
  3.1655+(for) 2173 6792 w
  3.1656+(determining) 2321 6792 w
  3.1657+(whether) 2836 6792 w
  3.1658+(a) 3189 6792 w
  3.1659+(score) 3265 6792 w
  3.1660+(is) 3507 6792 w
  3.1661+(present) 3606 6792 w
  3.1662+(by) 3926 6792 w
  3.1663+(only) 4058 6792 w
  3.1664+(reading) 4267 6792 w
  3.1665+(the) 4597 6792 w
  3.1666+(header.) 4750 6792 w
  3.1667+(Compressing) 720 6912 w
  3.1668+(the) 1276 6912 w
  3.1669+(27) 1426 6912 w
  3.1670+(bytes) 1554 6912 w
  3.1671+(would) 1793 6912 w
  3.1672+(not) 2071 6912 w
  3.1673+(be) 2227 6912 w
  3.1674+(of) 2349 6912 w
  3.1675+(much) 2460 6912 w
  3.1676+(use) 2710 6912 w
  3.1677+(anyway,) 2871 6912 w
  3.1678+(since) 3234 6912 w
  3.1679+(20) 3467 6912 w
  3.1680+(bytes) 3595 6912 w
  3.1681+(of) 3834 6912 w
  3.1682+(out) 3945 6912 w
  3.1683+(27) 4102 6912 w
  3.1684+(are) 4231 6912 w
  3.1685+(the) 4381 6912 w
  3.1686+(score,) 4532 6912 w
  3.1687+(which) 4796 6912 w
  3.1688+(is random data to the compression algorithm.) 720 7032 w
  3.1689+(The) 970 7188 w
  3.1690+(index) 1155 7188 w
  3.1691+(header) 1407 7188 w
  3.1692+(changes) 1702 7188 w
  3.1693+(only) 2053 7188 w
  3.1694+(slightly:) 2261 7188 w
  3.1695+(the) 2645 7188 w
  3.1696+(most) 2797 7188 w
  3.1697+(significant) 3022 7188 w
  3.1698+(bit) 3474 7188 w
  3.1699+(of) 3610 7188 w
  3.1700+(the) 3723 7188 w
  3.1701+(data) 3875 7188 w
  3.1702+(file) 4071 7188 w
  3.1703+10 /Times-Italic f
  3.1704+(offset) 4234 7188 w
  3.1705+10 /Times-Roman f
  3.1706+(now) 4482 7188 w
  3.1707+(indicates) 4685 7188 w
  3.1708+(whether) 720 7308 w
  3.1709+(the) 1069 7308 w
  3.1710+(header) 1219 7308 w
  3.1711+(in) 1512 7308 w
  3.1712+(the) 1617 7308 w
  3.1713+(data) 1766 7308 w
  3.1714+(file) 1959 7308 w
  3.1715+(it) 2119 7308 w
  3.1716+(points) 2202 7308 w
  3.1717+(to) 2474 7308 w
  3.1718+(is) 2579 7308 w
  3.1719+(a) 2673 7308 w
  3.1720+10 /Times-Italic f
  3.1721+(Dhdr) 2744 7308 w
  3.1722+10 /Times-Roman f
  3.1723+(\(when) 2982 7308 w
  3.1724+(the) 3258 7308 w
  3.1725+(bit) 3407 7308 w
  3.1726+(is) 3540 7308 w
  3.1727+(not) 3634 7308 w
  3.1728+(set\)) 3789 7308 w
  3.1729+(or) 3960 7308 w
  3.1730+(an) 4070 7308 w
  3.1731+10 /Times-Italic f
  3.1732+(Fhdr) 4191 7308 w
  3.1733+10 /Times-Roman f
  3.1734+(\(when) 4418 7308 w
  3.1735+(it) 4694 7308 w
  3.1736+(is) 4777 7308 w
  3.1737+(set\).) 4871 7308 w
  3.1738+cleartomark
  3.1739+showpage
  3.1740+saveobj restore
  3.1741+%%EndPage: 2 2
  3.1742+%%Page: 3 3
  3.1743+/saveobj save def
  3.1744+mark
  3.1745+3 pagesetup
  3.1746+10 /Times-Roman f
  3.1747+(\255 3 \255) 2797 480 w
  3.1748+(This) 720 840 w
  3.1749+(value) 933 840 w
  3.1750+(is) 1184 840 w
  3.1751+(represented) 1286 840 w
  3.1752+(in) 1781 840 w
  3.1753+(the) 1895 840 w
  3.1754+10 /Courier f
  3.1755+(Ihdr) 2053 840 w
  3.1756+10 /Times-Roman f
  3.1757+(by) 2329 840 w
  3.1758+(the) 2465 840 w
  3.1759+(field) 2623 840 w
  3.1760+10 /Times-Italic f
  3.1761+(compressed) 2842 840 w
  3.1762+10 /Times-Roman f
  3.1763+(.) 3313 840 w
  3.1764+(Headers) 3399 840 w
  3.1765+(in) 3761 840 w
  3.1766+(the) 3875 840 w
  3.1767+(index) 4033 840 w
  3.1768+(file) 4291 840 w
  3.1769+(are) 4460 840 w
  3.1770+(still) 4617 840 w
  3.1771+(in) 4804 840 w
  3.1772+(the) 4918 840 w
  3.1773+(same) 720 960 w
  3.1774+(order) 953 960 w
  3.1775+(of) 1191 960 w
  3.1776+(appearance) 1302 960 w
  3.1777+(as) 1777 960 w
  3.1778+(the) 1888 960 w
  3.1779+(blocks) 2038 960 w
  3.1780+(in) 2327 960 w
  3.1781+(the) 2433 960 w
  3.1782+(data) 2583 960 w
  3.1783+(file.) 2777 960 w
  3.1784+(Note) 2988 960 w
  3.1785+(that) 3210 960 w
  3.1786+(each) 3388 960 w
  3.1787+(stored) 3598 960 w
  3.1788+(score) 3870 960 w
  3.1789+(is) 4107 960 w
  3.1790+(given) 4201 960 w
  3.1791+(a) 4450 960 w
  3.1792+(header) 4521 960 w
  3.1793+(in) 4813 960 w
  3.1794+(the) 4918 960 w
  3.1795+(index) 720 1080 w
  3.1796+(file.) 974 1080 w
  3.1797+(This) 1189 1080 w
  3.1798+(includes) 1399 1080 w
  3.1799+(possible) 1764 1080 w
  3.1800+(multiple) 2124 1080 w
  3.1801+(scores) 2490 1080 w
  3.1802+(in) 2771 1080 w
  3.1803+(a) 2881 1080 w
  3.1804+(single) 2957 1080 w
  3.1805+10 /Times-Italic f
  3.1806+(Fhdr) 3228 1080 w
  3.1807+10 /Times-Roman f
  3.1808+(in) 3460 1080 w
  3.1809+(the) 3570 1080 w
  3.1810+(data) 3724 1080 w
  3.1811+(file:) 3922 1080 w
  3.1812+(they) 4141 1080 w
  3.1813+(each) 4346 1080 w
  3.1814+(get) 4561 1080 w
  3.1815+(an) 4716 1080 w
  3.1816+10 /Times-Italic f
  3.1817+(Ihdr) 4843 1080 w
  3.1818+10 /Times-Roman f
  3.1819+(,) 5015 1080 w
  3.1820+(with) 720 1200 w
  3.1821+(the) 928 1200 w
  3.1822+(data) 1080 1200 w
  3.1823+(file) 1276 1200 w
  3.1824+(offset) 1439 1200 w
  3.1825+(pointing) 1696 1200 w
  3.1826+(to) 2060 1200 w
  3.1827+(the) 2168 1200 w
  3.1828+(same) 2320 1200 w
  3.1829+(location) 2555 1200 w
  3.1830+(in) 2907 1200 w
  3.1831+(the) 3015 1200 w
  3.1832+(data) 3167 1200 w
  3.1833+(file.) 3363 1200 w
  3.1834+(A) 3576 1200 w
  3.1835+(program) 3678 1200 w
  3.1836+(performing) 4046 1200 w
  3.1837+(a) 4525 1200 w
  3.1838+(lookup) 4599 1200 w
  3.1839+(has) 4907 1200 w
  3.1840+(to find the right score in the) 720 1320 w
  3.1841+10 /Times-Italic f
  3.1842+(Fhdr) 1855 1320 w
  3.1843+10 /Times-Roman f
  3.1844+(itself.) 2080 1320 w
  3.1845+10 /Times-Italic f
  3.1846+(Ventisrv) 970 1476 w
  3.1847+10 /Times-Roman f
  3.1848+(assumes) 1330 1476 w
  3.1849+(data) 1690 1476 w
  3.1850+(will) 1883 1476 w
  3.1851+(compress) 2066 1476 w
  3.1852+(to) 2470 1476 w
  3.1853+(at) 2576 1476 w
  3.1854+(most) 2676 1476 w
  3.1855+(90%) 2899 1476 w
  3.1856+(of) 3110 1476 w
  3.1857+(the) 3221 1476 w
  3.1858+(original) 3371 1476 w
  3.1859+(size.) 3710 1476 w
  3.1860+(When) 3943 1476 w
  3.1861+(the) 4209 1476 w
  3.1862+(current) 4359 1476 w
  3.1863+(compres\255) 4669 1476 w
  3.1864+(sion) 720 1596 w
  3.1865+(buffer) 915 1596 w
  3.1866+(has) 1186 1596 w
  3.1867+(no) 1347 1596 w
  3.1868+(room) 1475 1596 w
  3.1869+(for) 1714 1596 w
  3.1870+(another) 1858 1596 w
  3.1871+(block) 2185 1596 w
  3.1872+(the) 2435 1596 w
  3.1873+10 /Times-Italic f
  3.1874+(Fhdr) 2584 1596 w
  3.1875+10 /Times-Roman f
  3.1876+(is) 2811 1596 w
  3.1877+(written) 2905 1596 w
  3.1878+(to) 3215 1596 w
  3.1879+(disk.) 3320 1596 w
  3.1880+(If) 3564 1596 w
  3.1881+10 /Times-Italic f
  3.1882+(ventisrv) 3657 1596 w
  3.1883+10 /Times-Roman f
  3.1884+(tries) 4000 1596 w
  3.1885+(adding) 4199 1596 w
  3.1886+(a) 4498 1596 w
  3.1887+(compressed) 4569 1596 w
  3.1888+(block) 720 1716 w
  3.1889+10 /LucidaSansUnicode20 f
  3.1890+(\024) 942 1716 w
  3.1891+10 /Times-Roman f
  3.1892+(which) 1042 1716 w
  3.1893+(was) 1332 1716 w
  3.1894+(supposed) 1533 1716 w
  3.1895+(to) 1951 1716 w
  3.1896+(fit) 2075 1716 w
  3.1897+(based) 2210 1716 w
  3.1898+(on) 2483 1716 w
  3.1899+(the) 2629 1716 w
  3.1900+(90%\255size) 2798 1716 w
  3.1901+(assumption) 3216 1716 w
  3.1902+10 /LucidaSansUnicode20 f
  3.1903+(\024) 3672 1716 w
  3.1904+10 /Times-Roman f
  3.1905+(but) 3772 1716 w
  3.1906+(the) 3947 1716 w
  3.1907+(maximum) 4116 1716 w
  3.1908+(compressed) 4569 1716 w
  3.1909+(buffer) 720 1836 w
  3.1910+(size) 1002 1836 w
  3.1911+(is) 1196 1836 w
  3.1912+(exceeded,) 1302 1836 w
  3.1913+(the) 1736 1836 w
  3.1914+(blocks) 1896 1836 w
  3.1915+(are) 2195 1836 w
  3.1916+(written) 2354 1836 w
  3.1917+(to) 2675 1836 w
  3.1918+(the) 2791 1836 w
  3.1919+(data) 2951 1836 w
  3.1920+(file) 3155 1836 w
  3.1921+(without) 3326 1836 w
  3.1922+(compression,) 3670 1836 w
  3.1923+(as) 4238 1836 w
  3.1924+10 /Times-Italic f
  3.1925+(Dhdr) 4359 1836 w
  3.1926+10 /Times-Roman f
  3.1927+(blocks.) 4608 1836 w
  3.1928+(In) 4957 1836 w
  3.1929+(other words,) 720 1956 w
  3.1930+10 /Times-Italic f
  3.1931+(Fhdr) 1244 1956 w
  3.1932+10 /Times-Roman f
  3.1933+(and) 1469 1956 w
  3.1934+10 /Times-Italic f
  3.1935+(Dhdr) 1638 1956 w
  3.1936+10 /Times-Roman f
  3.1937+(blocks can be mixed freely in the data file.) 1874 1956 w
  3.1938+10 /Times-Bold f
  3.1939+(Conclusions) 720 2196 w
  3.1940+10 /Times-Roman f
  3.1941+(Support) 970 2352 w
  3.1942+(for) 1326 2352 w
  3.1943+(compression) 1481 2352 w
  3.1944+(makes) 2025 2352 w
  3.1945+(the) 2319 2352 w
  3.1946+(file) 2481 2352 w
  3.1947+(format) 2654 2352 w
  3.1948+(more) 2960 2352 w
  3.1949+(complex,) 3205 2352 w
  3.1950+(but) 3614 2352 w
  3.1951+(not) 3782 2352 w
  3.1952+(significantly) 3950 2352 w
  3.1953+(so.) 4490 2352 w
  3.1954+(Improve\255) 4669 2352 w
  3.1955+(ments) 720 2472 w
  3.1956+(could) 995 2472 w
  3.1957+(be) 1253 2472 w
  3.1958+(made) 1383 2472 w
  3.1959+(in) 1635 2472 w
  3.1960+(the) 1749 2472 w
  3.1961+(area) 1907 2472 w
  3.1962+(of) 2108 2472 w
  3.1963+(compression.) 2227 2472 w
  3.1964+(For) 2818 2472 w
  3.1965+(example,) 2993 2472 w
  3.1966+(another) 3391 2472 w
  3.1967+(compression) 3725 2472 w
  3.1968+(algorithm) 4265 2472 w
  3.1969+(could) 4689 2472 w
  3.1970+(be) 4946 2472 w
  3.1971+(used,) 720 2592 w
  3.1972+(one) 956 2592 w
  3.1973+(that) 1128 2592 w
  3.1974+(depends) 1306 2592 w
  3.1975+(less) 1661 2592 w
  3.1976+(on) 1839 2592 w
  3.1977+(building) 1967 2592 w
  3.1978+(up) 2329 2592 w
  3.1979+(compression) 2457 2592 w
  3.1980+(history,) 2990 2592 w
  3.1981+(or) 3321 2592 w
  3.1982+(has) 3432 2592 w
  3.1983+(some) 3593 2592 w
  3.1984+(predefined) 3833 2592 w
  3.1985+(histories) 4288 2592 w
  3.1986+(to) 4656 2592 w
  3.1987+(choose) 4763 2592 w
  3.1988+(from.) 720 2712 w
  3.1989+(Also,) 991 2712 w
  3.1990+(since) 1231 2712 w
  3.1991+(compression) 1462 2712 w
  3.1992+(is) 1993 2712 w
  3.1993+(relatively) 2086 2712 w
  3.1994+(slow,) 2489 2712 w
  3.1995+(a) 2729 2712 w
  3.1996+(faster) 2799 2712 w
  3.1997+(compression) 3046 2712 w
  3.1998+(algorithm) 3577 2712 w
  3.1999+(would) 3992 2712 w
  3.2000+(be) 4268 2712 w
  3.2001+(welcome.) 4388 2712 w
  3.2002+(Early) 4824 2712 w
  3.2003+(detection) 720 2832 w
  3.2004+(of) 1119 2832 w
  3.2005+(whether) 1235 2832 w
  3.2006+(data) 1589 2832 w
  3.2007+(is) 1788 2832 w
  3.2008+(compressible) 1889 2832 w
  3.2009+(can) 2450 2832 w
  3.2010+(alleviate) 2622 2832 w
  3.2011+(the) 2994 2832 w
  3.2012+(problem) 3150 2832 w
  3.2013+(of) 3517 2832 w
  3.2014+(slow) 3634 2832 w
  3.2015+(compression) 3857 2832 w
  3.2016+(somewhat.) 4396 2832 w
  3.2017+(The) 4885 2832 w
  3.2018+(header format would not necessarily have to change to accommodate for this.) 720 2952 w
  3.2019+(The) 970 3108 w
  3.2020+(index) 1159 3108 w
  3.2021+(and) 1415 3108 w
  3.2022+(data) 1593 3108 w
  3.2023+(files) 1793 3108 w
  3.2024+(contain) 1999 3108 w
  3.2025+(enough) 2327 3108 w
  3.2026+(information) 2655 3108 w
  3.2027+(to) 3162 3108 w
  3.2028+(cross\255check) 3275 3108 w
  3.2029+(the) 3780 3108 w
  3.2030+(validity) 3937 3108 w
  3.2031+(of) 4278 3108 w
  3.2032+(the) 4396 3108 w
  3.2033+(data) 4553 3108 w
  3.2034+(blocks.) 4754 3108 w
  3.2035+10 /Times-Italic f
  3.2036+(Ventisrv) 720 3228 w
  3.2037+10 /Times-Roman f
  3.2038+(performs) 1082 3228 w
  3.2039+(such) 1471 3228 w
  3.2040+(checks) 1683 3228 w
  3.2041+(on) 1983 3228 w
  3.2042+(the) 2112 3228 w
  3.2043+(most) 2263 3228 w
  3.2044+(recently) 2487 3228 w
  3.2045+(written) 2837 3228 w
  3.2046+(blocks) 3149 3228 w
  3.2047+(in) 3439 3228 w
  3.2048+(these) 3546 3228 w
  3.2049+(files) 3780 3228 w
  3.2050+(at) 3981 3228 w
  3.2051+(startup.) 4082 3228 w
  3.2052+(The) 4433 3228 w
  3.2053+(data) 4617 3228 w
  3.2054+(file) 4812 3228 w
  3.2055+(is) 4973 3228 w
  3.2056+(always) 720 3348 w
  3.2057+(written) 1031 3348 w
  3.2058+(before) 1348 3348 w
  3.2059+(the) 1636 3348 w
  3.2060+(index) 1792 3348 w
  3.2061+(header) 2048 3348 w
  3.2062+(is) 2347 3348 w
  3.2063+(written,) 2448 3348 w
  3.2064+(though) 2790 3348 w
  3.2065+(not) 3103 3348 w
  3.2066+(flushed) 3266 3348 w
  3.2067+(explicitly,) 3595 3348 w
  3.2068+(so) 4033 3348 w
  3.2069+(the) 4157 3348 w
  3.2070+(index) 4314 3348 w
  3.2071+(file) 4571 3348 w
  3.2072+(may) 4739 3348 w
  3.2073+(be) 4946 3348 w
  3.2074+(flushed) 720 3468 w
  3.2075+(in) 1051 3468 w
  3.2076+(the) 1166 3468 w
  3.2077+(background) 1325 3468 w
  3.2078+(by) 1833 3468 w
  3.2079+(a) 1970 3468 w
  3.2080+(file) 2050 3468 w
  3.2081+(system) 2219 3468 w
  3.2082+(scheduler.) 2533 3468 w
  3.2083+(In) 3001 3468 w
  3.2084+(any) 3120 3468 w
  3.2085+(case,) 3300 3468 w
  3.2086+(missing) 3532 3468 w
  3.2087+(headers) 3880 3468 w
  3.2088+(in) 4220 3468 w
  3.2089+(the) 4334 3468 w
  3.2090+(index) 4492 3468 w
  3.2091+(file) 4750 3468 w
  3.2092+(are) 4919 3468 w
  3.2093+(automatically) 720 3588 w
  3.2094+(added) 1292 3588 w
  3.2095+(by) 1558 3588 w
  3.2096+10 /Times-Italic f
  3.2097+(ventisrv) 1686 3588 w
  3.2098+10 /Times-Roman f
  3.2099+(at) 2030 3588 w
  3.2100+(startup,) 2130 3588 w
  3.2101+(missing) 2455 3588 w
  3.2102+(data) 2795 3588 w
  3.2103+(file) 2989 3588 w
  3.2104+(blocks) 3150 3588 w
  3.2105+(are) 3439 3588 w
  3.2106+(a) 3588 3588 w
  3.2107+(fatal) 3660 3588 w
  3.2108+(error) 3865 3588 w
  3.2109+(and) 4086 3588 w
  3.2110+(need) 4258 3588 w
  3.2111+(to) 4474 3588 w
  3.2112+(be) 4580 3588 w
  3.2113+(resolved) 4702 3588 w
  3.2114+(manually) 720 3708 w
  3.2115+(\(by) 1126 3708 w
  3.2116+(removing) 1293 3708 w
  3.2117+(the) 1710 3708 w
  3.2118+(index) 1866 3708 w
  3.2119+(headers\).) 2122 3708 w
  3.2120+(The) 2543 3708 w
  3.2121+(only) 2732 3708 w
  3.2122+(remaining) 2944 3708 w
  3.2123+(question) 3383 3708 w
  3.2124+(is) 3756 3708 w
  3.2125+(what) 3857 3708 w
  3.2126+(to) 4085 3708 w
  3.2127+(do) 4197 3708 w
  3.2128+(with) 4330 3708 w
  3.2129+(permanently) 4541 3708 w
  3.2130+(damaged) 720 3828 w
  3.2131+(and) 1108 3828 w
  3.2132+(non\255recoverable) 1280 3828 w
  3.2133+(\(e.g.) 1955 3828 w
  3.2134+(from) 2160 3828 w
  3.2135+(backup\)) 2383 3828 w
  3.2136+(data) 2733 3828 w
  3.2137+(blocks.) 2928 3828 w
  3.2138+(Ideally,) 3268 3828 w
  3.2139+(it) 3599 3828 w
  3.2140+(should) 3684 3828 w
  3.2141+(be) 3980 3828 w
  3.2142+(possible) 4103 3828 w
  3.2143+(to) 4460 3828 w
  3.2144+(mark) 4567 3828 w
  3.2145+(a) 4801 3828 w
  3.2146+(data) 4874 3828 w
  3.2147+(block as invalid, at least in the data file.) 720 3948 w
  3.2148+(There is currently no way to mark a block as such.) 2357 3948 w
  3.2149+cleartomark
  3.2150+showpage
  3.2151+saveobj restore
  3.2152+%%EndPage: 3 3
  3.2153+%%Trailer
  3.2154+done
  3.2155+%%DocumentFonts: Times-Roman LucidaSansUnicode20 Times-Italic Times-Bold Courier
  3.2156+%%Pages: 3