[comp.sys.handhelds] HP-48 MLDL beta 1.01

bson@erice.ai.mit.edu (Jan Brittenson) (03/30/91)

   This is the beta release of the HP-48 Machine Language Development
Library. It is intended for test and review purposes only. No source
code is available.

   I'm working on breakpoints - patience, it is not trivial to get it
right!

   The post is divided into two parts: this, the first part, contains
the user's guide. The second part, posted separately, contains the
code both uuencoded and in Wickes' ASC format. The library is roughly
7kbytes, and so you need 28kbytes of free memory to load the ASC
version.

   The MLDL can not be run from ROM since it's self-modifying (but it
updates the CRC to keep the system from complaining).

						-- Jan Brittenson
						   bson@ai.mit.edu

 O  /
  \/
  /\  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 O  \


MLDL 1.01, MARCH 1991
---------------------


   This is a Machine Language Development Library for the HP-48SX.
The library currently consists of 4 named commands, and has been given
the number 1092 decimal (hex 444). To install it, load the binary file
to your calculator and store it in a suitable port. Turn the
calculator off, then back on, and go to the directory where you wish
to attach it. Enter :p:1092 where `p' is the port you stored it in,
then ATTACH. To remove it, go to the directory where you previously
attached it, enter `:p:1092', press DUP DETACH, then PURGE. The
library does not automatically attach.

Installation example, assuming I/O has been properly set up:

	HOME
	'MLDL' KGET
	MLDL :0:1092 STO

	(Turn the calculator OFF, then back ON)

	:0:1092 ATTACH


Removal example:

	HOME
	:0:1092 ENTER DUP
	DETACH
	PURGE

   The display should briefly flicker as you purge the library from
the port.



LIBRARY COMMANDS
----------------


[Version]

   Returns to level 2 a version string, and to level 1 a copyright
string. They will resemble the output below.


	2: "Saturn MLDL 1.01, March 1991"
	1: "Copyright Jan Brittenson"



[MLDB]

   Saturn ML Debugger. Lets you single-step ML programs, examine
registers and memory contents. Since it single-steps ML it is not
useful for debugging RPL code - unless you wish to follow your RPL
thread on an ML level. MLDB expects an argument in level 1:


	Code object

	        Halts before the first instruction of the code object.
	    Both the PC and A registers are set to the address of the
	    first instruction.

	XLIB

	    The XLIB is must be a code object, which is debugged.

	Binary integer

		Treats the binary integer as the address of a prefixed
	    machine code routine (PMC). Halts at the first instruction
	    of the PMC. PMCs consist of a 5-nybble pointer to the first
	    instruction which is usually, but not always, the address
	    of the PMC plus 5.
	    
	@#3a81 (True)

	Any object other than @#3a81

		Ignored - the debugger returns immediately. In the
	    future, @#3a81 (True) will cause the debugger to use the
	    next object in sequence. It will be possible to include a
	    call to MLDB and precede it with a test to determine
	    whether to actually debug or run free. A user flag test,
	    for instance.


   The debugger uses the PICT for display, but in the future probably
will have its own display GROB. Since all information will not fit on
the display at once, it has been divided into 6 screens. Only one
screen is active at any one time. Switching between screens is done by
means of the 6 menu keys, here refered to as A-F, which correspond to
screen 1 through 6 respectively.

   The sample screens below are from the first instruction of the PMC
at #59CC, and can be reproduced by:

	#59CC MLDB



Screen 1  - General CPU State (key [A])

	|CALL.4 #0679B         |   - Mnemonic
	| 8E4CD0 	       |   - Opcode
	|@:059D1 P:0 CH ST:218 |   - PC, P, Carry, Hex/Dec mode, ST
	|A:000CC C:77794       |   - A.A and C.A
	|B:729A9 D:00F96 HST:2 |   - B.A, D.A, and HST
	|D0:409C1/9540A8240BC9 |   - D0 and 6 bytes @D0
	|D1:77799/000000000000 |   - D1 and 6 bytes @D1
	|RST:00000:00000:00000 |   - Top 3 levels of RSTK


Screen 2  - Arithmetic registers (key [B])

	|CALL.4 #0679B         |   - Mnemonic
	| 8E4CD0 	       |   - Opcode
	|@:059D1 P:0 CH ST:218 |   - PC, P, Carry, Hex/Dec mode, ST
	|A:00000005444000CC    |   - Register A
	|B:000000000007611E    |   - Register B
	|C:000000000007792C    |   - Register C
	|D:00000000000004D0    |   - Register D
	|RST:00000:00000:00000 |   - Top 3 levels of RSTK


Screen 3  - Data registers (key [C])

	|CALL.4 #0679B         |   - Mnemonic
	| 8E4CD0 	       |   - Opcode
	|@:059D1 P:0 CH ST:218 |   - PC, P, Carry, Hex/Dec mode, ST
	|R0:053385D439800040   |   - Register R0
	|R1:00000005444059D1   |   - Register R1
	|R2:0000000000075BC1   |   - Register R2
	|R3:0000000544402E92   |   - Register R3
	|R4:00015075A6375AA1   |   - Register R4
	|RST:00000:00000:00000 |   - Top 3 levels of RSTK


Screen 4  - Return stack (key [D])

	|CALL.4 #0679B         |   - Mnemonic
	| 8E4CD0 	       |   - Opcode
	|@:059D1 P:0 CH ST:218 |   - PC, P, Carry, Hex/Dec mode, ST
	| 		       |
	|RST0:00000 RST4:00000 |   - RSTK levels 0 and 4
	|RST1:00000 RST5:00000 |   - RSTK levels 1 and 5
	|RST2:00000 RST6:00000 |   - RSTK levels 2 and 6
	|RST3:00000 RST7:00000 |   - RSTK levels 3 and 7


Screen 5  - Memory dump (key [E])

	|059A0:56113680913420CC|   - Locations 59A0-59AF
	|059B0:4E0156716FCC56FD|   - Locations 59B0-59BF
	|059C0:015B38D5E0101D95|   - Locations 59C0-59CF
	|059D0:08E4CD08E46C0101|   - Locations 59D0-59DF
	|059E0:D230574911191443|   - Locations 59E0-59EF
	|059F0:4E4A201101311456|   - Locations 59F0-59FF
	|05A00:12280A50143174E7|   - Locations 5A00-5A0F
	|05A10:8E58D01311741431|   - Locations 5A10-5A1F


Screen 6  - ML Instruction Stream (key [F])

	|@:059D1 P:0 CH ST:218 |   - PC, P, Carry, Hex/Dec mode, ST
	| CALL.4 #0679B	       |   - Next 7 instructions
	| CALL.4 #06641	       |
	| MOVE.W A,R1	       |
	| CLR.A C	       |
	| MOVE.P1 #5,C	       |
	| CALL.3 #05B7D	       |
	| MOVE.W R1,C	       |


The MLDB keyboard
-----------------

Moving around is done with the arrow keys and the NXT key:

	up	Decrement PC by 16
	down	Increment PC by 16
	left	Decrement PC by 1
	right	Increment PC by 1
	NXT	Move to next instruction

In addition, there are two mark keys:

	x	(Mulitplication key)
		Sets the mark to the current PC.

	+/-	Swaps the PC and the mark.


[Currently, there is no numerical entry and registers can't be
altered. Have patience, this is an early version.]

   The arrow keys are most useful for moving around in the memory
dump, but can also be used to arbitrarily increment and decrement the
PC to shift the instruction stream by single nybbles.

There are three ways of leaving the debugger:

	delete	(Delete key)
		Exits as is.

	DEL	Restores system registers to their state when the
	  	debugger was entered. Useful if you like to exit
		in the middle of a program and the system registers
		contain random values.

	ON-C	(ON and C keys held down simultenously)
		Panic exit. If you know the machine will crash when
		you exit, such as if the memory has been reconfigured.
		It may also be worth considering ON-A-E if you have
		seriously altered the memory - say if you have stepped
		the garbage collect half-through.


To step the program, use:

	+	Single-steps one instruction, pointed to by the PC.
		Follows CALLs.

	-	Same as +, but does not follows CALLs; instead, the
		program halts when it returns from the CALL.

	.	Redraws the display but otherwise does nothing.



Some system considerations
--------------------------

   The debugger has been designed explicitly so it will not alter any
static system data or depend on the precise machine configuration. The
only system data it modifies is the keyboard buffer, since it relies
on the system to respond to the keyboard interrupt and manage the
buffer.  Testing has shown that interfering with this is results in
poor reliability. Still, there are two instructions the debugger will
refuse to single-step:

	RESET	
		The effect of this would be the same as ON-C.

	CLRB #F,ST
		Executing this instruction would lock up your calculator
		since it would disable all I/O most notably the keyboard.


   In all other aspects is the debugger self-contained, apart from a
system RPL interface to do argument type checking.



A word of caution
-----------------

   The [-] key lets you complete an entire CALL. But beware: the
return stack is replaced by one that will cause the called routine to
return to the debugger. Therefore the routine called cannot rely on
specific return stack contents - or remove return addresses from the
stack - which will invariably result in a system crash. Fortunately,
this seems not to be practised in the HP-48 ROM.

   Despite the efforts put into avoiding system collisions, the HP-48
will still remain a largely unprotected system where the debugger - or
other parts of the MLDL - can still be overwritten, which may result
in memory loss. Since it is stored as a library in a port, it is not
susceptible to general memory allocation, such as dynamic memory
allocation or system display GROB allocations.  But, storing another
library in the same port may cause it to move - extreme caution is
therefore advisable when single-stepping PMC that alters stored port
data. If you are stepping a port store block copy by means of either
[+] or [-], then the MLDL may be overwritten. If you're using [-] to
call a block copy routine within a similar context, then the library
may have moved and the subsequent return will cause a system crash and
possibly memory corruption.

   Single-stepping a machine code program is in no way less dangerous
than allowing it to run uncontrolled. It merely gives you some control
over what happens between instructions. It can even be more dangeours,
hardware may break if left in certain configurations for a period of
time, which may be a fraction of a second. So if you are going to
single-step parts of the system ROM, you should be aware of this risk,
in no way will the author or distributors of the MLDL accept any
responsibilites or liability for such damage, regardless of extent.

   The MLDL is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.



[MLPR]

   Disassembles and prints ML programs. Accepts the same arguments as
MLDB, except @#3a81 and #3ac0 which are not recognized. The program is
printed to the current print device - IR or Serial. In case of
problems, first check your PRTPAR - see pages 602-611 in your Owner's
Manual Volume II. Page 611 explicitly describes the PRTPAR. Each line
consists of a mnemonic preceded by the address. No opcode is included,
since it normally is of low interest. Use ML1 (described below) to
build your own custom disassembler.



[ML1]

   Disassembles one ML instruction; allows you to build your own
disassemblers with special-purpose user interfaces. It takes a binary
integer in level one, and returns two values; in level two the
mnemonic form preceded by the address, and in level one the address of
the next instruction. Thus, it is a simple task to repeatedly call
ML1. Subtracting the addresses will yield the opcode size, and a PEEK
program can be utilized to retrieve it. Or the instructions can be
displayed on the screen from a browser. It is also trivial to extract
the mnemonic from the string, since the string will always be of the
form:

	"xxxxx: m"

where xxxxx is a 5-digit address followed by a colon and a blank. The
last part of the string, m, is the mnemonic.



COMMAND SUMMARY
---------------


|-----------------------------------------------------------------------|
|									|
| Version	Returns version and copyright strings			|
|									|
|				--> "version" "copyright"		|
|									|
|-----------------------------------------------------------------------|
|									|
| MLDB		Saturn Machine Language Debugger			|
|									|
|			obj	--> any1 ... anyN			|
|									|
|-----------------------------------------------------------------------|
|									|
| MLPR		Print Machine Language Program				|
|									|
|			obj	--> obj					|
|									|
|-----------------------------------------------------------------------|
|									|
| ML1		Single-Instruction Machine Language Disassembler	|
|									|
|		      #address	--> "instruction" #next			|
|									|
|-----------------------------------------------------------------------+




XLIB TABLE
----------

Subject to change at random and without notice.
The library number is 444 hexadecimal, 1092 decimal.


	Command		Number
	----------------------
	Version		1092 0
	MLDB		1092 1
	MLPR		1092 2
	ML1		1092 3

						-- Jan Brittenson
						   bson@ai.mit.edu

bson@erice.ai.mit.edu (Jan Brittenson) (03/30/91)

  See the ``Instructions'' posting for details. The first section is
uuencoded, the second used Wickes' ASC format.


 O  /
  \/
  /\  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 O  \


begin 644 mldl
M2%!(4#0X+5A *_!A Q%3871U<FX@34Q$3"#?,2XP,1%$1 $   !0"P   ."D
M J8       "P! !1        P 4                              - #
M  --3#$#0-#$1"04  1-3%!2 G!@528WE_;F!@ 3 " # "H < 0 3BK  P ^
M #!! *L#$"X %@, (P!H!, . "$!D H 60& 1 0 G2U0H1@L*O # %-A='5R
M;B!-3$1,(-\Q+C Q+"!-87)C:" Q.3DQ+"J0 P!#;W!Y<FEG:'0@J2!*86X@
M0G)I='1E;G-O;BLQ@$24 ,PMT ( ^$%F$ #XFV<0 T$2$/@I98#M&P=(1 ? 
MW (N ! T 8"!#Q00<>2'OWD&^"EE@.T;!TA$",#< C8 @+]Y!D$74W$Y\:5>
M$R!!'1=KIM8UCST4!4A$"M#9 K*/T04$G2TPH 62+D!$"3  !"LQ4!($ T!@
MT1R=+2#I D1T /D_L!(#A4#0V0*9?D D [*/8=$<G2T@Z0)$= #Y/[ 2 RLQ
M\/X#G2V K6$-0' !!"LQL!(#2$0%P-P"FP" 'V0& 8._>0882T,R", 24V 1
M$P-8B"Z( !<SKF!M,1)  8O?MP4QUAI3<#$4L0&#SW &$8.!CXDO?0;X9D*%
MOWD&$1R MV#8"HV!1#0 G2W@[!A=0-#9 @-:(.D"1%0 S%FP$@,K,8!$1 "=
M+?#M&,Y-UMD"T?/$W )< ( ?9 8!@!]D!OB;9Q"![F!L2(K?MP4Q%L Q!=<*
MAUY $D$8^)CXTF> G>P&*S&P$@-(1 +0V0*EBB'I D2D )HBIA('LHRQ^6"B
M<2#I D14 ",RX(\Q1#( K /(<8 E RLQ@$04 )TM4*H8DBY 1 KP70783<;!
M89(N0$0( - 1)$VFO60CL_3^ ^\_( 5/T6\@Z0)$9  K,8!$9 #,+9 ) T$7
M<W$9ES$7H''DAQ]D!@.4(& *GF &5@7X0680$/A!9H#.@H*QA($/BQR1<B5S
M]Q$6$1I$$8D>OX(5Z.\@]P=G,E<]01)&",BQZP07)10(449)(H+0OV111#&&
MD @I$$,-00K2  -QA1'V09ZF&F#G^G!I<J"N$.H2Q(?YM0]Q)  75,<48:\N
M07Q$@/[R<:QOAX"Q-,1' "PQ!8.Q--1, "PQ!8.Q--1/ "PQ!7/8CZ3H*B&G
M%#%PQ(^$MT\Q%H!7_.<2$>A2!>H2U'$1@4$51Y!!#:&.&$M#. # $D-!&A9I
M^)$&"&%3[ U1.C'&@A08.R;S 7\? KL? [P?!+T?!;X?!K\?#)  $+\ $JP 
M"]$ $;H +]( ,>XG+.\G)]P &N4 '!(!'?$  &U@&$M#-@+ $D-PK1!M8!A+
M0SP#P!)3<*T0A_QA/P$3Q,B&)W?J<7&M'X9!%T0&YF"G^6$8)' 0Q_Y.06!#
M?M_/' 1FXR?]&/CP06 E?L&/@8\?!$;A 8"Q-'0I "PQ% $PA_D'_D%@\7V)
M?]$?9$& 7I)BU8U_U0 82QCXL.@,)I;2^%<-8!K=!H:Q-%0H "SM<.T0-_XQ
M%D1A%',Q%41AU!E$8=0;1!"W^S$4YD'6%TA!UA5(0193@11D,02!L32T&@ L
M,05QZ@_7"G<B '<< '<6 '<0 '<* '<$@+$25'$$$4Q!!W&J'_=Q#==ZY@]V
MX ]VV@]VU ]VS@]VR ^&L1)C8"??(^&A#Q@6!1?V:I[F\PC]T&00!2$ %T,0
M                                                            
M                                                            
M                                                            
M                                                            
M                                                            
M                    $',!&6,Q%* !C+$TQ&( +#'5$+0(2-<8,S'!&!=1
M#W& T!!U$24!'A)S"!ES41,9LM 94Z;[,1:@,8>0,2< &_1Q 1IS,122,86&
M%Q&*7L6!#KJ!_K71$*0(>&<1%A,@Z>)PV&+C;RIQ(]'(Q(BQ-,0" "R<,=80
MI1)C+%A["'#U8*F/L0,&N3 +N/ .Z> .P3(4/?$M5Z(GCE(B)F1!,51-+_,W
M'4(';F ,*B$&-V1"GQ1,SW2)H"Y1#F&@9B]!&A8(:%<?Y8#0$&-N"(F0,186
M @UOZAIC+#%D0@ 1!F$0!F$0!A"G #'&$F,0IP$-01H62(> =@I8AX!T(1IC
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
MH535!/41=+$Y__\8.QA*54U0'T,7DO/_C[&$T0$0G?/_C[&&(1$$$L0"-70A
M.?__&%L8'0#1.?__&'L8$D$@4$,L01>?\8\",,0D)00B0,&"-$652O_PCP( 
M"E)%5$)#( (4+$A35 *G\8^#(20E- 0B0,&"-$7%,B% X"C_C_0, " 9_T@ 
M0TQ2 /,9_U@ 4T540B "& $L4U2<] __: "@(%5$)30$4*GT#_]X * @540E
M- 4B@!' ,D4E0!G_:!A"4D)# '0:_W@80E)"4R "& $L4U0L$P($G/0/_X@ 
MH"!51.54!%"K] __F "@(%5$513E$@,"Q2* $2! &?^(&$)23D4 E!K_F!A"
M4D51+C$@4"P"& $L$P($G/3/_Z@ H"!51%44!5"<],__J 2@(%5$Y50$4)ST
MS_^X * @541U1 50G/3/_[@$H"!51,5$!5"<],__N B@(%5$=50$4*'TS_^X
M#* @543%5/0A$"& 2?_\CXH "E)%5  42O_\C\H "E)%5$Y:'P(, ISTR/\)
M * @5415% 50G/3(_PD$H"!51.54!%"<],C_B0"@(%5$=40%4)STR/^)!* @
M543%1 50G/3(_XD(H"!51'54!%"E],C_B0R@(%5$Q53D$G  $B& 28_\GX  
M"E)%5 !42H_\G\  "E)%5$Y:+@$'( P"EO+/J( A)%44!4"6\L^HA"$DY50$
M0);RS[B (21U1 5 EO+/N(0A),5$!4"6\L^XB"$D=50$0*'RS[B,(23%5/0A
M$,$R(4 @*?^,BAA"4@ 3*O^,RAA"4DY:'P(,+!,"!);RR F (215% 5 EO+(
M"80A).54!$"6\LB)@"$D=40%0);RR(F$(23%1 5 EO+(B8@A)'54!$"E\LB)
MC"$DQ53D$G  $L$R(4 @*8^<@!A"4@!3*H^<P!A"4DY:+@$'( PL$P($G_&/
MC*%4U03E0@,B,$$P\!G_Z E#04Q,+C0@ A,$!Y3QCXVA5-4$!4"9\8^?,!3$
MQ/0A@%' &,\,  # &,],  !0&<^, $%$1!\!&Y7QS Q 5#3T$<#@*(^L    
MX"B/K$   + ICZR  $%$1"X!!R ;F_+("@Q 5#3D$G  PE 9SPT 0TQ2'P$,
MC/'<!   D_'<"- 1!!+ ,1G/S0 202 !$)ORR(H ,,0DY1)P ,+@*(^L2   
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
(R!;2R(70/'H"
 
end


 O  /
  \/
  /\  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 O  \


%%HP: T(3)A(R)F(.);
"04B20F1630113516475727E602D4C444C402FD13E203131144441000000005B0
0000000E4A206A0000000000000B4000150000000000000C5000000000000000
000000000000000000000000000000000D300030D4C41330040D4C4442410040
D4C40525200706556273796F6E60003100023000A200074000E4A20C3000E300
031400BA3001E200613000320086400CE000121009A000951008444000D9D205
1A81C2A20F30003516475727E602D4C444C402FD13E20313C202D41627368602
13939313C2A209300034F607972796768647029A02A416E602242796474756E6
37F6E6B21308444900CCD20D20008F146601008FB97601301421018F925608DE
B1708444700CCD20E2000143100818F04101174E78FB97608F925608DEB17084
44800CCD20630008FB976014713517931F5AE5310214D171B66A6D53F8D34150
8444A00D9D202BF81D5040D9D2030A5029E2044490030040B213052140300406
1DC1D9D2029E204447009FF30B213058040D9D2099E70442302BF8161DC1D9D2
029E204447009FF30B2130B2130FEF30D9D208DA16D004071040B2130B213084
44500CCD20B90008F146601038FB976081B43423800C2135061131308588E288
007133EA06D613210410B8FD7B50136DA1350713411B1038FC0760113818F898
F2D7608F662458FB976011C1087B068DA0D818444300D9D20ECE81D5040D9D20
30A5029E20444500CC950B2130B21308444400D9D20FDE81ECD46D9D201D3F4C
CD20C50008F146601008F146608FB9760118EE06C684A8FD7B5013610C13507D
A078E5042114818F898F2D7608D9CE60B2130B21308444200D9D205AA8129E20
444A00A9226A21702BC81B9F062A17029E2044450032230EF813442300CA308C
17085230B21308444100D9D205AA8129E20444A00FD5508DD46C1C1629E20444
80000D1142D46ADB46323B4FEF30FEF30250F41DF6029E20444600B213084446
00CCD209903014713717917913710A174E78F1466030490206A0E9066065508F
146601018F146608EC28281B4818F0B8C1192752377F116111A1441198E1FB28
518EFE027F70762375D3142164808C1BBE407152418015649422280DFB461544
13680980920134D014A02D00301758116F14E96AA1067EAF0796270AEA01AE21
4C789F5BF017420071457C4116FAE214C74408EF2F17CAF678081B434C7400C2
1350381B434DC400C21350381B434DF400C21350378DF84A8EA2127A4113074C
F8487BF413610875CF7E21118E2550AE214D1711181451740914D01AE881B434
83000C213414A161968F1960801635CED015A3136C284181B3623F10F7F120BB
F130CBF140DBF150EBF160FBF1C0090001FB0021CA00B01D0011AB00F22D0013
EE72C2FE7272CD00A15E00C12110D11F0000D60681B43463200C213407DA01D6
0681B434C3300C213507DA0178CF16F310314C8C687277AE1717DAF168147144
606E067A9F16814207017CEFE4140634E7FDFCC140663E72DF818F0F140652E7
1CF818F8F140641E10081B43479200C213411003789F70EF14061FD798F71DF1
461408E529265DD8F75D0081B4818F0B8EC062692D8F75D006A1DD60681B4345
8200C2DE07DE0173EF136144164137135144164D9144164DB144017BBF13416E
146D7184146D51841461351841461340181B434BA100C2135017AEF07DA07722
0077C10077610077010077A0007740081B2145174011C4147017AAF17F17D07D
A76EF0670EF067ADF0674DF067ECF0678CF0681B21360672FD321E1AF0816150
716FA6E96E3F80DF0D4601501200713401000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00013710913613410A10C81B434C2600C2135D014B80847D8133131C817115F0
17080D0157115210E121378091371531912B0D91356ABF13610A137809137200
B14F1710A1371341291358687111A8E55C18E0AB18EF5B1D014A808776116131
029E2E078D263EF6A217321D8C4C881B434C2000C2C9136D015A2136C285B780
075F069AF81B30609B03B08B0FE09E0EE01C2341D31FD2752A72E82522624614
1345D4F23F73D12470E606C0A21260734624F941C4FC47980AE215E0160A66F2
14A161808675F15E080D0136E680980913616120D0F6AEA136C2134624001160
160160160160017A00136C2136017A10D014A16184780867A08578084712A136
12A01180180017BCF136E213601740065D075BFD680D00DAF215611368091362
0017CDF1000B060BAF0758FA7C1200B070B0184B77DF120A7212086760602066
70D215E01607D4FCACC709F6D5080887AEA31A09E2F0B6A31138E16913103A62
8C85910313233343536373839314243444546481B434CDFFFC201AF7AE813610
871EF134A6DA84817A0C59F86BA031327802813D0A8BA8A72107C60A0D59E118
13401C4136134C2136D014A1340115A081900670015A016031348087280A6EA6
E6AA131257F913103AE015A016080843A6A149171013114AE015A0160808426C
DF31447261310315A01608086050B666C4185A66200510208535D42475F3F3F3
F3F3F3F31484A13613410881B4340DFFFC2D015A013486A70808437B0FCC8A8C
1CC8A812E4E4735F11813416001317579C062DF31858186036DEF7ACD7710110
A72114C2D0818F04646EAFE80D00D308982E0AF2BFEAFEA9AAF6200185D43524
3525D40515A016013606A8881B434DDFFFC213431B57D30A8480860F115E315D
3173808409087131C276101638190090C1D0713431D514D17101120201230123
01231202D015A01600171FF80842670074EF8084331C06F20310C7FCF8084280
84369107DBF81808362DF31807BAF10813610910381B43478FFFC2134118F677
1031C2726F118780011913401D1A85136134C9113C2136AE015A01363114A626
C2F39D4F46554E215D9179013935751405E26AEF3525544515D51750135E2140
26EEF791FF00A0E135544585D420D81FF01A0E120591FF02A0E1355445342059
1FF03A0E134C4253420791FF040035544584548520791FF05003554454454342
0791FF068005553584F13420591FF078005F405F13420B91FF080034C425E285
02354520991FF0900D185023545C23420E81FF0A00D1001991FF0B0021850234
C2354520091FF0C0094E4002991FF0D00445434E213020520F81FF0FA0E19420
693FF080E000014E444002B93FF080E0800F425E220A002F0092FF010000D100
1B92FF01200021750220E0C240B0B92FF011000D1750220B0C240E0092FFA130
00D1001B92FFA132002114022051C240D0092FFA13800D1001B92FFA13A00214
3022051C240D0292FFA14000D114002D92FFA14800D124022051C20440D0292F
FA14200D114002D92FFA14A00D124020420D0C24051492FFA15000D161A00055
A2FFA15800D161901020025051C20440D010492FFA15200D161A00055A2FFA15
A00D161901020020450D0C2405110291FF1700144444003F91FF1C00355524F1
20801020C24413291FF1600144444003F91FF1800355524F120801020C24403B
91FF1900D12302208120C24403B91FF1D00D12302208120C24413B91FF1A00D1
4302208140C24403B91FF1E00D14302208140C24413B91FF1B00D15302208150
C24403B91FF1F00D15302208150C24413790F200D11302108110C205F90F300D
1051090182002409120C2345A3FFFF808200D1057190182002409120C214792F
FF400A0255445343561792FFF500A0255445343461290F48124253435004990F
581242534340210312020D90F681A455D405E2330210313020D90F7903414C4C
4E2330210313050592FFF42000E4F4053361793FFFF630000E4F4054371994FF
FFF6400000E4F40553A1892FFF80000F45545E235005B92FFF80100F45545E28
5023461992FFF8020094E4E243021461992FFF8030094E4E243023461992FFF8
040055E434E4647461992FFF8050034F4E464947461B92FFF80600D114029444
C23461992FFF807003584554544E461993FFFF80800094E445F4E471794FFFFF
80810A025359461993FFFF808300245535342471693FFFF80880034C4250031A
3FFFF8089003554452402718110C234693FFFF80840034C4250031A3FFFF8085
003554452402718110C214E95FFFFFF808600A025544524340059A5FFFFFF808
700A0255445243502718110C21420893FFFF808681242524340049A3FFFF8087
812425243502718110C214C2312060893FFFF808A81242524340049A3FFFF808
B812425243502718110C234C2312060E95FFFFFF808A00A025544524340059A5
FFFFFF80B600A0255445243502718110C23420993FFFF808D00245535344471D
93FFFF808C81A455D405F1041471D93FFFF808E81A455D405F1043471B93FFFF
808F0094E445F4646471F92FFF80900144444F105B213C23461792FFF80AC025
5435544561792FFF80B00245535343461592FFF80E003525541561092FFF80C0
0D10011A2FFF80F0021130205C234E2619018101A2FFF80D00D1130234E26190
1810C205292FFC8100025C4002B92FFC814002525E4E2750220C0894FFF08818
0000144444003DA4FFF088180800355524E261A00220801020C250C010B92FFF
81900352524E261A002C0494FFF0F81A0000D10011A4FFF0F81A02002161A010
02E0C240B01A4FFF0F81A0100D161A01002B0C240E0991FF8100352524E27520
02C0B93FFFF81B281A455D405F11471B93FFFF81B381A455D405F13471293FFF
F81B481D1001D93FFFF81B68121140214C2053471293FFFF81B581D1001D93FF
FF81B7812114020534C21471F91FF820034C42524022041C28435459A4FF0FF8
2000A02554452434022041C2843545207A1FF838124252434022041C2843545C
2312040E82FFF84FC0000291FF840034C425003F91FF85003554452402208110
C23545C94FF0FF86000A025544524340059A4FF0FF87000A0255445243502208
110C2354520491FF8681242524340047A1FF87812425243502208110C23545C2
312040C94FF0FF88000A0255445E454005BA4FF0FF89000A02554455415E2130
205C220811020491FF88812425E4540049A1FF898124255415E2130205C22081
10C2312040C94FFCFF8A000A02554455415005C94FFCFF8A400A0255445E4540
05C94FFCFF8B000A02554457445005C94FFCFF8B400A0255445C445005C94FFC
FF8B800A025544574540051A4FFCFF8BC00A0255445C454F1201120894FFCFF8
A800A02554450041A4FFCFF8AC00A0255445E4A5F120C020C94F8CFF90000A02
554455415005C94F8CFF90400A0255445E454005C94F8CFF98000A0255445744
5005C94F8CFF98400A0255445C445005C94F8CFF98800A025544574540055A4F
8CFF98C00A0255445C454E21070021120894F8CFF90800A02554450045A4F8CF
F90C00A0255445E4A5E2107002C020692FFC8A08124255415004692FFC8A4812
425E454004692FFC8B08124257445004692FFC8B4812425C445004692FFC8B88
1242574540041A2FFC8BC812425C454F12011C2312040292FFC8A88124250031
A2FFC8AC812425E4A5F120C0C2312040692F8C9008124255415004692F8C9048
12425E454004692F8C9808124257445004692F8C984812425C445004692F8C98
881242574540045A2F8C98C812425C454E210700211C2312040292F8C9088124
250035A2F8C90C812425E4A5E2107002C0C2312040F91FF8C81A455D405E2430
220314030F91FF8E903414C4C4E2430220314070491FF8D81A455D405004991F
F8F903414C4C4F1208150C81FCC000000C81FCC400000591FCC800144444F110
B1591FCCC00445434F110C0E82F8CA0000000E82F8CA0400000B92F8CA080014
4444E2107002B1B92F8CA0C00445434E2107002C0591FCD00034C425F110C0C8
1FCD400000391FCD800D1140210C1391FCDC002114021001B92F8CA800034C42
5E2107002C0E82F8CA8400000092F8CA8800D1001592F8CA8C002110700201C8
1FCE000000591FCE800355524F110B1591FCE40094E434F110C0791FCEC00355
524E4F11001E82F8CB0000000B92F8CB0800355524E2107002B1B92F8CB04009
4E434E2107002C0D92F8CB0C00355524E4E210700201291FCF00035C4E400329
1FCF4003525E4003291FCF800E45474003591FCFC00E4F445F110C0492F8CB80
0035C4E4003492F8CB84003525E4003492F8CB8800E45474003B92F8CB8C00E4
F445E2107002C03900000B302F3F3F310087180137C213711810913610A307A8
581531A0AE511A13414E1617260AE60614E161735007C4C4F00E6E1592172A6D
50D111D23109C2109170A4D5CA1337700137EA011F5650714713517917901849
84B808A05085B808A7A085980887D0AEA3102B6A540D0D6C4CA819F0119C2E61
3615A0180BE087B72808468084715A013686900BEC80846808470115A0819608
1960136879DD018C412E8C822E207EEF161146108307A878177A70134146134D
0104D015A213610BC206ACB81210970707FAF85A03207090119816AC781B4345
05EFC2134114735E1143401100C210C11B134162A4F5890181B4349C4EFC2018
1B434474EFC2134017C101197C1011A751011B7E0011C6A007ACF11814416401
7E107720109702010A791010B721010C01799F75001080114616401D20681B43
4D5000C213407DAC4136C2134D014AC2067A4F13407144871008C07FDD2E65BB
D2E656FD2E656FD2E656FD2E656FC0F1235485E60A44F10A2F437835E3BF3B84
FD15B29D21E29E26E3674AC18E29F21039031131645B13707E3B24634144AD4E
E4BE46155E42E4FD4CD4B81435265F55C55955655355370202020215D7177013
3020215D317301310214D171018C019E7BDF74CF70CF7CBF78BF74BF86A006CE
D310464DF31A36CCF311464CF31246CBF313464BF31446CAF312564AFAEA3103
A62669F808210196800A6CD7AE81361088EF36E134DBE7136D015A01348E586E
8EDD6EA6D50E118134018082101AFEACB109AFE84B8E506E119AC70180821506
BDF808213060DF3125740F31357CFEB6668FE31847DEE75EF741F81B41B491EF
136C213615E2D0E46A8F71FE1466C9F7EDE72EE736C168146738F759E1803105
769E71CE15E07CBF180777E15E0F2F23102808A8603134786E81B434811EFC21
3415E0F2F23184808A86031447D3E7D2E713F706E18315E27F0F761E613C81B4
34030EFC2134017F3E76EF7A3F70FD7F3E16F16F782F7CBD78BD65FB751ED2F2
D5730E72BFC913415677D7E719D6ECB76FDD2E656D73FDD2E652F70FDD2E652F
7DEDD2D57DEDD9E66AEF79DDD2E659E7ECDD2E652F73CDD2E652F78BDD2E652F
759D743F16F758E7B3D729D16F16F737E792D7C3E712D6C3BDAC6C6C201D2DA7
66D3103A627C0DD67DDF1097E2D81B5808241AFDFCA119C21341461347BBD31F
275DC15EB80821C0778D76BC61DAD2E65C981B43486FDFC213401759D76EF73D
D1647CCD16475CD7B7C669AA827B003047400648A816D2812108765D77AF1187
E2F132CA1323103A62744C7A7D633C30174CF30568BF30276BF3066AAF30378A
F3076C9F8E7BAD1341147B8874AA1143401100C210C119A0E109795A789984A7
DDB7D8973CB1371088EDEBD1308E77AD14B96821128135136134761C61B9D606
81B4344BEDFC213407DA018E8ABDF4818F83F072DF14084378CF146818F2F144
134713C7E7B13675BB8730062598537ECF8EC5BDD2A86B8EE6C6133EA13114F8
089714D62298E33BD776F140782074B8315114B80857149171A6E5EE61F87400
69E81371350684A7DCA071351717D1F1461348E89ED1327A0F1400181B4345FC
DFC2135017AEF1187810119711011A7A0011B730011C155717F037EBF7120108
7A10109731010A7C0010B750010C03157717F03D60681B4340ECDFC213407DA0
30609F280C020F2540E60613606840832508503190B662184190A5085104201B
77CDF81B5132CA132071441641371448EF79D1660715C0F616015C0F606786F1
840715C2162A8286080B06B0615C0160A8286150B0615C075201507AF416F150
716F07154716FAFB154764BED60681B43405BDFC213407DA03D6067BBE7ADF15
2716F1567AF516F16F1567AF718F1567063407000132CA132146061641461351
6415E20A163AE215E018096A400515E0819028228190218C18F18F18F18F18F1
8F18F18F18F18515E080D0180AE215E096E2007134070184C660085C8E688D13
08E017D14F96A0017615B280873F610881B434DFBDFC2D5135118808A4511527
151716F17F808842090AB180D00D1521151113780913520310114DD476BE71CD
8CAE7D81B2AE5AB6AB781B43455000C213515F080D0170152115710E12137809
1371531137809137172916DC1C220D015B2137C281B31FF00E611FF016611FF0
2F611FF034711FF065811FF074911FF0FE310F49130F57630F66F11FF8CEC10F
7C621FF8EE321FF8DEA11FF8F0F13FFFF808CF813FFFF808E5713FFFF8086983
3FFFF8087D733FFFF808A1733FFFF808B5633FFFF81B2E213FFFF81B34113FFF
F81B4E023FFFF81B5B123FFFF81B6E223FFFF81B71421FF837A31FF86F931FF8
77931FF88F831FF897831FF8AF731FF8B7730F9173000273D781B41B538DF136
C2136DB14403068E0D5D1660715C00370730777CF8526EA3A82B0672DF54EA82
78CF5AD7D8C16F16F146037DEF108723311806842617376DF136108781307110
130144842615376BF7B5F8CA04D793C1466EEF7D9F13414660EF702C1466EEF1
611466BCF161136134108AF215E37892110C26BAF160136134108AF215E27172
110C26B8F16114686C21DA78DB73EA8CC05D78CE8E9A3D171147108785211806
8526792161136134108AF215E37A12110818F03C265AF160136134108AF215E2
7DE1110818F02C26F7F8EE33D171783B1471448C9F2D8E523D1717F1B16F16F1
471448CAD2D8E603D171700B1471421411448CBB2D8E7E2D17171EA16F16F5AD
853160AF214E10B7251132C2068E4C3D16615E0873D090AD08C9F3D90A7F11B9
6E606ADD0772AD8C152D8436BAF81B434287DFC213510A81B434667DFC213614
A136AE6808A4011527151716F17F90AB180D00D1521151113780913720310114
D1C1038547E8F843D214F10B96E50853AE214D091098E0A1F1127AF97509208E
CB1F1190A8E5D2D16615E090E808CF03D11B8AE6065FC74301098EA03D119C28
18F2286460E6E67E9C8CD41D8446D6F8C041DD0E4E48C72BDD0E451FD0E456F0
710C1460618411C81B381B434B55DFC213407DA74DF70DF7CCF78CF74CF70CF7
CBF78BF81B207DA0714416481B281B4340F4DFC21340714416474DF70DF7CCF7
8CF74CF70CF7CBF872808C612D8C580DC3A71146"


 O  /
  \/
  /\  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 O  \
						-- Jan Brittenson
						   bson@ai.mit.edu