From gdesroch@slate.Mines.Colorado.EDU Mon Dec 28 11:01:43 1992 Received: from calvin.sfasu.edu by umaxc.weeg.uiowa.edu (5.61.jnf/920629) on Mon, 28 Dec 92 11:01:37 -0600 id AA16045 with SMTP Received: from slate.Mines.Colorado.EDU by calvin.sfasu.EDU with SMTP (5.59/25-eef) id AA16240; Mon, 28 Dec 92 10:51:09 CST Return-Path: Received: by slate.Mines.Colorado.EDU (AIX 3.2/UCB 5.64/4.03) id AA22162; Mon, 28 Dec 1992 09:47:52 -0700 Date: Mon, 28 Dec 1992 09:47:52 -0700 From: gdesroch@slate.Mines.Colorado.EDU (DESROCHERS GARY FREDERIC) Message-Id: <9212281647.AA22162@slate.Mines.Colorado.EDU> To: hyperc-l@calvin.sfasu.edu Status: R Hello HyperC World, O.K. Here it is. The first Beta version of HC.System. I have checked every command myself but not extensively. If you want to use it go right ahead. I would appreciate any feedback on it as I can get. Happy bug hunting. Gary gdesroch@slate.mines.colorado.edu Beta Manual HC.System V3.0 Beta 1 ( In other words a complete mess ) MISC CHANGES: Works on the 6502 also? In earlier versions of HC.System the credits screen came up no matter what you did and the ;!IGNORE option only jumped over the keypress. Now the credits screen is ignored as well. HC.System now checks for emulation mode on the IIgs on a break. If it finds out that it is in native mode before the brk then it jumps to your old break routine (Mine is GSBUG). So for you people who want to look at your code you need to put the following in your assembler (not cp) code: clc byte 0xfb ;xce I think. From memory. Look it up to be sure. byte 0x00 byte 0x00 Be careful, if you are using GSBug, GSBug seems to reinstall itself on returning with a j command. That means that hc.systems brk routine is thrown into the blue. But it stops the machine from running rampid. At least in native mode. This is a good idea because the brk routine stuff does not work in native mode anyways. It no longer assumes the address of the interpretor. It gets the value at $03f0 instead. Useful if you want the address different and you are designing your own interpretor. This does not mean that the address to jump to originally is the address at $03F0. It still jumps to $0800 to run the loaded program Notice I said the program loaded. It does not really need to be an interpreter. It could be anything.:-) Check out the SETENV command below. You can load your own interpretor or shell. (See discussion on SETENV below) More ;! commands. A new HCLogin file. HCLogin: I got sick of seeing the commands when the shell is loaded. If you do not want this there is a new file that is called 'hclogin' that is looked for first before autoexec. This means that all of your old commands can be switched over to this file and they will work as normal but won't show up when the autoexec file is executed at startup. If you do not want to use the hclogin file your old autoexec file will work as before. COMMAND LINES: Command lines can be up to 254 characters. HC.System is now case insensitive for the ;! commands. Commands do not need to be right after the ;! but they do need to be first on the command line. Since proccessing of commands is completed with the finding of any line without a ; at the beginning of it, there can be no blank lines in between ; lines. That does not mean you cannot create a blank line with no command like ;! or ;. See below. For HC.System commands are lines in your autoexec file that start with ';!SOMETHING'. (Or commented lines starting with ;.) Command lines must contain a Command. Optionally for most commands subcommands may be excluded. Subcommands are seperated from commands on the same line by one or more white spaces. White spaces include spaces, tabs, or commas. Comands and subcommands are case insensitive. !;IGNORE is the same as !;ignore. If you want to make a subcommand line option that contains any of these then you need to use string deliminators. String deliminators are " or ' . Whichever one you use the terminator for that string must be the same value or an end of line. So if you want to put a ' in the string use a " as the diliminators. For example: ;!echo " This doesn't terminate at the '." ;!echo 'He said "nope it will not terminate on the ",s here either"' Be careful of the following: ;!echo Hello! I am going to give a present of gold. This will print: Hello! I am going to give a present of Because a command line can only have 9 subcommands the ECHO command can only output what it is given. Also string deliminators are terminated by an end of command line as well as itself. Single words are just a string of characters with no white spaces. The single word is terminated by a white space or end of line. An example would be the 'Hello!' example above and what the echo prints out. VARIABLES: There is a $LAST variable for GETKEY and GETSTR and $VAR1 - $VAR9 that can be set by you using the SET command. In the future $VAR1-$VAR9 these may be filled in with command line options from programs like Basic.System. All variables are set memory variables. What this means is that they are not saved to disk and the names of them are set. In the future maybe I will allow for the changing of names. Variables can only contain 40 charcters. All variables start with a $. This character is not really unique. If you do: ;! echo $myvar and use a variable that is not already defined in memory the you get: $myval printed out. The set command will think an undefined variable is a string and do nothing. The $LAST variable is overwritten by any GETKEY or GETSTR command. If you want to keep it then you would need to send it to another variable like: ;!SET $VAR1 = $LAST Variables are treated as if they are strings. So if you have the following: ;!echo $var1 and $VAR1 has a string like. Hello There! then it is the same as putting: ;!echo Hello There! or it's equivalence on the command line. BOOLEAN EXPRESSIONS: Boolean expressions must start with the subcommand '(' and end with the subcommand ')'. In the middle there must be three subcommands. All three can be memory variables, deliminated strings or single words. As of right now there are four tests. The tests are >, <, ==, != and =. The == and = act the same. The = is not an assignment character. I strongly suggest that the == is used instead because this may change in the future. A boolean expression will evaluate as FALSE if the syntax is wrong. There will be a message put out with respect to a bad boolean expression. Some examples are: ( $LAST < '1' ) ( Hello = $VAR1 ) if $VAR2 has > contained in it: ( "Who are you?" $VAR2 $VAR3 ) Wrong examples are: ($LAST < '1') - no white space between ( and $LAST or '1' and ) ( $VAR1<$VAR2 ) - no white space between $VAR1 and VAR2 and the <. COMMANDS: ; ;! ;!IGNORE ;!ECHO ;!CLEAR ;!GETKEY ;!GETSTR ;!LOAD ;!SETENV ;!MARK ;!BACK ;!SET ;!QUIT ;!DO ;!UNTIL ;!WHILE ;!ENDWHILE ;!IF ;!ELSE ;!ELSEIF ;!ENDIF ; - Treated as a comment line. ;! - Just a line spacer. The line will be ignored. This can be used to format commands so that there are lines between them. It is faster using the comment line above though. because the interpreter must search throught the whole line for any commands. ;!IGNORE - This command is used to skip over the opening screen that HC.System puts up. It is included for compatability and the /RAM subcommand is the only way to ignore file check when removing /RAM. Subcommands: /RAM - Makes HC.System ignore the file check when disconnecting /RAM. If this is not specified then /RAM is checked for files and if any are found asks you if it is O.K. to delete them. Allows for you to be able to quit out of HyperC without deleting files in /RAM. ;!ECHO - This command outputs a return character unless there is anything after it. ECHO will print up to 9 subcommands. Subcommands: Anything - Anything on the same line as ECHO is outputed to the screen. You could actually design your own opening screen with this. This includes $variables. Check the above discussion on strings or variables above. ;!CLEAR - Clears the screen. ;!GETKEY - This command waits for a keypress. The key is saved and put into the $LAST variable. This command works exactly like the ECHO command above except that when completed printing out the subcommands (if any) it then asks for a keypress. No return is generated at the end. This means that the cursor position is on the same line. To generate a return use another ECHO commnad with no subcomands below it. ;!GETSTR - This command works just like the GETKEY command above with the exception that you can get a whole string terminated by a return put into the $LAST variable.(return removed) ;!LOAD - This command loads into memory what you want to. For this version the only thing it will load is the Floating point stuff if it is in the home directory. To do this use the subcommand below. FP - This subcommand is used to load in the floating point library into /RAM if you have it. Not implemented yet (Andy?). ;!SETENV - This command alters the system and it's environment so that so that you do not need to do things like load different shell or opsys files yourself. RAM - If you do not have a IIgs then you can still disconnect /RAM with this command. It will not restore /RAM as of this version when leaving except as before on the IIgs. This should be in future version or maybe in the next beta version. OPSYS - This subcommand allows you to vary the opsys name that you want loaded into memory. Up to 15 characters. Technically you the program you are going to use does not even need to be opsys or any equivelent environment. Just as long as your program runs at $0800 and exits with a quit call. If you are going to make/use such a program write to me and I will try to send you some of the specifics about /RAM and stuff like that. SHELL - This subcommand allows you to vary the shell name that you want loaded into memory. This is only garanteed to work on the original opsys. It must also be up to 5 characters long. This does not need to be a shell. It could be any program (with a pathname of less then 6 characters that uses opsys. Anyone got anything else modified within opsys then let me know. ;!MARK - Mark sets an internal variable that will alow you to jump back to the line under MARK using the BACK command below. Mark also saves the IF, WHILE, and DO state. So in effect you could jump back into or out of these commands. ;!BACK - Back jumps back to the place last marked as explained above. If no mark has been set the file is jumped back to the beginning. ;!SET - This command sets a variable to a string or another variable. The syntax is : ;!SET $variable = string ;!SET $variable = $variable The first subcomand must be a memory variable. The = must be the second subcommand. The third subcommand must be a memory variable, blank, or deliminated string. ;!QUIT - Quit gets you 'right out of there'. Stops anymore processing, puts up the exiting screen, asks for a keypress, and returns you to the lauching program. ;!DO - The DO command allows for end of loop testing. This also means that there is at least one pass through the DO loop. The testing at the end of the loop is the UNTIL command below. ;!UNTIL - The UNTIL command uses a subcommand of a boolean expression. If the value of the boolean expression is FALSE then the DO loop is excuted again. A TRUE returned by the boolean expression will terminate the DO loop. YOU CANNOT NEST DO-UNTIL COMMANDS! ;!WHILE - The WHILE command takes a boolean expression as explained above as its subcommand. If the expression is evalueated as TRUE the while commands in the while loop are performed. When and if the boolean expression evaluates as FALSE the commands in between the WHILE and the ENDWHILE comands are ignored and execution restarts after the ENDWHILE command. ;!ENDWHILE - This command is the end of the loop for the WHILE expression. All it does is send the processing back to the WHILE command for another test. ENDWHILE also marks the restarting of proccessing after a FALSE is returned by the boolean expression in the WHILE command. ;!IF - This command marks the beginning of processing an if statement. If works just like any other if statement that you may have run into. There is a boolean expression as explained above that is tested and if TRUE the lines after it up to the else, or endif statement if there is no else, are processed. If FALSE the commands after the else, or if no else then after the endif, are processed. YOU CANNOT NEST IF COMMANDS! An error in a boolean expression will evaluate as FALSE. ;!ELSE - Everything before this will be processed and everything after will be ignored if the IF is given a TRUE boolean expression. The oposite is TRUE for a FALSE given to the IF command. ;!ELSEIF - Everything is the same as the ELSE above except that the ELSEIF allows for another boolean operation to be done in the middle of an if. This is only if the last IF boolean expression generated a FALSE. ;!ENDIF - Any if statement processing will end with this statement or a blank line to end processing of the file as explained above. Thank you for your testing, Gary F. Desrochers FiLeStArTfIlEsTaRt ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789() IHC.SYSTEM AgBFAAAAA8)4MIAI5uJAbeRKXkSuAgBFAkQu NCQqp(L)93IB)L6vY2qmCkyvMNA0peyEAAiklBywAyKLfAvAQKEwBBqACAYuw)Sy QjYBNAv9CAIj)CAIosjxQKAsAAyC7c8vDAJKnMBTCAYrn0SjCAord(SqOKAgoLAg dCQqKLAgCAYvd(XKKLAggUP0QCyth48A07OLAAyAkg8vFALKokSrg4AkI)LAQiiH Sz0Aj0qJK0IKP1ILH1IKT0IKY0ILd0ILAACLJk8vLBLLgsNIm0LT)CAIocAywKAk M0aG)0IKP1IKAACK(o8vCAJKgYAsM)LAghiT)CAIoYkyowUrtaB8JPDAPA9OzEQr QHSyCI65g0PIgsNTYBCY2BbIs0gjpCAoR1IAN4KKAkLLkBfKoAVjowE7IzFsoAFz 9eBsoPDAZ)dKwnCAQxq6R5OKR5OKMwEKA0bINk8MJTA8IDNIoEFrp4WuhUVjulLy W1YKAASIsDGAwiCTA07FNk8MJzA8IAfCwzSygkMBojA0owE74IOkghBYUAKYZCQq IiDApqP0i0IAYBCLrDbIsISrwnQyoqA5sIi7AkpizkKO4EQmzAQvwfSyikMLJjC8 OBPJ9CAoJPDASAfDwnQysksDJrA8GAPIMxO6nDJKdCQqoPDAhoITs4QjZqI6sjDA wiCTAAKFzAQvw3QyO08CGAPLMxO6uDJKdCQqoPDAhoITNCQqOyiDozSDsAhjs8Aj owE7sKEs5yiDFaDABkr)4AvNu)fhuziDgyiDQ4KAMxOLmALKzAQvQqTyfniAQ7f0 IjO1QSAwPwK6(XKLEkGG4AQmZ(fpMhTAuGiisySDMxyDuHysgwiBwGCWBAqIpQJz 9iBsAPDACAfAZ)dKQnClsjeDwiCTMh8BuLSbgxyBhgFIg6BsZycAUAbKzAQvZ)dK QnSmsjeDwiCTMh8BgISlgxSMNCQqgwCEtGyeFiDAB0KABUIOtqE8FijAD0q))XIO i6D8c2LA3AfKs0QjoDAos0A7xqBsLAPAd)dKQnCnIjOBsyO0uzyDuyCEQzSDQ0q1 AkMLMNA0JzCCJAfAwLQyuDWMgxCCtCAoFijAD0KABUIOwDQsAE76ZqA8IjiDw(Aw yD53o0AjgcLIpWAsh0IAgCGLC0KAAUIO4MQrxGQh)CPAwDQsylpCAj8HzCrBZKPk g9hchsHI4AQrtCQhFiTA4AfAwPTyC0KN(XIO4MQrw)fhAAKKJ7fsgAdP4UQrguB8 E0KA(XIO4UQrx(fhJAv)IDQkQeCwAka9gBQkhsHIOCgouySD9ySDFiDAB0LABUIO uTB8uzSDgySDAELAJVO8HACgQj8wgAG9gMyqg1vjjsKIsIDINCYSpajGb0IAgAmN gxCbjsKIFqbqqByMoAe)iKAkAkKK2oRnKAjyCAQvdCYSQbjGghx8sMSrgcC0pGye j0YAEBCLMALJNCQqNGiBNGCCgxSEp4UrhYQjN6RquHCCgxSEtCAoFiDAB0KABUIO MNA0xSS2okMAI7H0QDQsAAae4gQrtCQhwjTCBUYbJDQslBdKAELygCG0C0KAAUIO 4MQrwHQhAEbStWE8FijBH0q))XIOxmD81Av)4QQrtyfhFiTBpAf)wzfsIraJwzfs xi6EaAN)Q3Dw9AuFgvE8aBfIgzA0bAPPw7D49AOLpmD8vIqGscDIpCGOuIq7scDI ghBYI)PoQDQs(HrBQnO8(Hd8w3OkfD77I)PowDQsAEL2w7f0aDb9g6Mkxi8)EANA w7fsAEbzw7f07Cd8I)PoQDQs(HLBxCL8(HNAQHP8j0qsrAPLsERrtyA0NmCWpGiB I0oIgAWIgRCHsMSrtGB8QzSEY1KDG0YKikaIhgQjAkKYhYQjhgQjAkKYhYQjhgQj sERjsMSjAACYS88vsALLsERrscSjsMSrsgSjhYQrskSjhgQrsoSjsQSrssSjsUSr swSjsYSrs0SjpCGGvIqTscDIgAGOO)LAwyiEn0KLR0ILo0KLj0ILp0KLG0ILq0aI I0ILr0aIk0ILs0KLl0ILt0KLm0ILghBLimXq3AyLghDLnMBTsQSrg0A0P)LAwyyF k4eBghBLiyaq3AyLghDLsQSrgkB8gEyeQSCRAAiCX48vJALLpCGGk0IAghBLiacq 3AyLghDLsUSrg4E0gEyewSCRAk6MhYQjhgQjsYSj)CAIswxzuPDs4wSJs4RrowU7 s4Rjs8Rro0U7s8RjsASrNCQ6YwCId1KYG0YKkkaIhgQjsUi7sYi7pCGGvI64scDI tCGOwzSJm0aHIANL)CAIswhzpCBsG0IAI0YIl0YIm0ILghBLiCQq3ACMghDL)CAI o4EzsESrgUA8wCytG0qRmANLiKbq3ASLhnKLg0iopyyNuIKDscDIiuUq3AiLAmKL g4iogwyN4wiM()BIt2AkwzCCAASBLAbMIAATxAAIMNAsgIDApyCbuI6uscDIiCYq 3AiLyACLAACLAU2vAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAo0wAAQEAQ9UB Tl1UAAAAAAAAAAAADAAAAgiMDAAQAgiKHAAQMNESJd0TBhgTPRVVFhVRAGwQAQgA AgAAAAAGAAABA4)MBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA Hl0BS9kTMxQREF0TFN1EOVEVHphVLRVRfkVRINURDVyTBVETHxiUTRVRwIFVUV0U B1UN6skUDFkQR9zSUlUVPRkQOVFSMlEVIdlTFxUSGlUUMVEWJV0UF1lRFNFTOV0Y GlEROVEbIdFRFxUSjBQbi4oIeLisjc9IzPy7jM2I0WydlEfJPUC9mYjJvQyFlkUJ SWCavUgJNFkUQZ0ABJFBPpQTZNFUTBxUMVESAAATAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AA7AAIgKAAAA)BwAAAQDAAAAAAgACAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAA gAGAY0PD9XIYg6vh9HLAGiuqBA6)xiEmNkc)gYA0YwSYgWAkHACAoi2w)TMyYYOk OCCYpCW)HAijghxwgwYqgN8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAANUEAN0QDgCaDgCKogCKogCKogCKogCKomDayuX)7mDK5 lze63D68snO60Da5pnv8geu7g(O9znO5u)(4jXu7vCK9NHs000grgCKogCKogCKo gCKogCKogCKogCKogCKogCKoznMooTPogOf6L76zg(orZja(u)aqp6MqNYjjN0QD gCaDgCKogCKogCKogCKogCKogCKogCKogCKogCKoS)Kog2cwgOf60)u7oTPolLf5 u0grN0QDg2QDgCKogCKogCKogCKogCKogCKogCKogCKogCKogCKoXDKojze5l3(7 gqSDgCKogCKogCKogCKogCKogCKogCKogCKogCKogCKovTNo5jMoyXO8(0wwgCKo gCKogCKogCKogCKogCKovnNohDa9gWu8pPf9geu7uOMyzn)0tXO9lbNopPv8g6(7 w66slLMogGO900QsgCKogCKogCKogCKogCKogCKogCKoyfNo0Tf6g6e5gmv4yH(x GDa(EDqryPf5oP(7zLf5NoTDN0QDN0QDN0QDg2QDgCKogCKogCKogCKogCKogCKo gCKogCKogCKo8C6jlLP0gO)8lLNoyXP9O6r7N0gMN0QDgCKogCKogCKogCKogCKo gCKogCKogCKogCKogCKoFDKo0nO(n7e6u6qrN4qryX8Ky)u8pfPogiO9hLv4lv(4 gOP9g6e6v)u4hXO7lDq7yDP(zPf5u)e6z0QoyLfxgK)7g6e6v)u4hXO7lDq7yDP( zPf5u)e6gCaohbfxhXP7unO9hD65mD68zze4NEa5yXsKy)u8unOoh3Moguu81)u8 unO9g6a5h3Moguu8zH(9v7OozDK9hSf5FLTDvLv8pDq8CDq7rPe4vLPopTf9uWu7 CDKorPe4h3OouDa(gS)72HO63Da5rL)7hSe5FnRDvLv8kDq8pLf9geu7g(Mxt)(4 uHe7NEK5yXMHy)u81TOounu8VD65JTtzjDKzt3(7k7e4c0QoyLfxgK)7yXP5n7e6 IfNoFzcyvPOoh3e7hSu7F)RDvLv8kDq8pLf9geu7E7cxJj81gWMzt)(4uHe7NEK5 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtCAAQzyBAASLAA4vFALLqUSr gAC8pyCbtIKAscDIiaUq3ASLyACLflCLwnVyOlsB4IO04hAYNCQqtSz1N)rJQ)LE n0aGR08vRA9viuXq3ASLAmKLg4iogwyNsyiM5(bMp8rMzm88IeB8pSPEtI6escDI iCYq3AiLyACLQiBLyk7LY34vzkLNyk5vDA)v1DNy)aSr0Ydj)eSr0Udj)CRr)aSj )GRr)eSj)Gjz0ct7ghBKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA CvPGgIOEAQlo1AQvIAwnQocAgIs9AAA9AAA9AwB9RMgoAAgIPiW4BgAUS9Ia0HAC 0DAH0DQAiiAAiAxAhDAAtCi4NCcEtKznNCsEtKDotCMgiCMg9CQ2fGNABAGA2Dhy AHYrAHYrAkto0AQvRDQn3Dhyy8Zry8Zrt2AEQIDoD2qBD2KwTAIwyAartiAEtC8i AC8iJ2qBJ2Kw7jDwIAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiCAAIo5)7jBe0DjwvCAHBggU Q9KSIFACQMgoAAgIgIe4AHRrQwcjALRrQ0cjAHYrAHYrAktogBwvA0ZAQoc0M3q9 NABEQ0crtaAEtC8gAC8gN3aFIABEAvYrAvYrtiAgtCciACci7jDAX3KKPBPEsiHC 5(bMp8rMwmM8ICE8tSPENCh1t(rJNCR1u)7Js(bM5(bMZ(bMI(rMpeP0CV4AQgdr )KTjFCfKAk6QpSUhFVIIAvYrAvYrQkMIALIL07MKAAyAOX2vAAJEsBAAA8rJAQAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA lCjwliEAIhkAJQPSDIKAAIiFoFOAoBQhgKQh3CADBkCAhAPAgCh4AcrBC8rqFCQA w)qOfCwAAEgAoBiwoJQhiDQhrhBIoBiwoJQhiDQhAwFMAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAA2IEAaajb2YsNscDA3g1NweDh2YxNMBAAUNVQAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABZFAAEjUAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASFkVAAgMAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWBAAzIVQAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAABZFAAQjUAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWBAA1IVQAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABZFAAYjUAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASFkVAAwNAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAWBAA4IVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAABZFAAkjUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA Ak9k Gary gdesroch@slate.mines.colorado.edu