From gdesroch@slate.Mines.Colorado.EDU Tue Jan 12 13:07:30 1993 Received: from calvin.sfasu.edu by umaxc.weeg.uiowa.edu (5.61.jnf/920629) on Tue, 12 Jan 93 13:07:22 -0600 id AA31913 with SMTP Received: from slate.Mines.Colorado.EDU by calvin.sfasu.EDU with SMTP (5.59/25-eef) id AA19343; Tue, 12 Jan 93 12:58:27 CST Return-Path: Received: by slate.Mines.Colorado.EDU (AIX 3.2/UCB 5.64/4.03) id AA14492; Tue, 12 Jan 1993 11:55:14 -0700 Date: Tue, 12 Jan 1993 11:55:14 -0700 From: gdesroch@slate.Mines.Colorado.EDU (DESROCHERS GARY FREDERIC) Message-Id: <9301121855.AA14492@slate.Mines.Colorado.EDU> To: hyperc-l@calvin.sfasu.edu Status: R Beta Manual HC.System V3.0 Beta 5 ( In other words a complete mess ) Changes since the last beta version: Since this is a beta version, there is no docs included in the binscii file. The manual and stuff is this below. !!!!!Works on the 6502 also? (Could someone check this for me!)!!!!!!!!! In the HCLogin file ;! is not needed at the beginning of every line. Blank lines and lines starting with ; are ignored if you are using a hclogin file. THIS IS DIFFERENT FROM LAST BETA VERSIONS! An error is given for command lines that HC.System does not recognize. Should help with command spelling errors. Commands and subcommands: setenv: nobrk If you want to load and run a program and do not want the IIgs brk code installed. This will (but does not because I forgot) make it so that /RAM is not automatically be removed. You will have to specify the "setenv ram" option if you still want /RAM removed just like everyone else. opsys: name $addr The addr is another parameter that is now allowed to let program be loaded at any address.(not suggested at $9000 because that is where hc.system resides.) ram Now works properly. Thanks Andy(w). load: fp Should work O.K. now. For those that have the FP library. This Program now loads itself at $9000 so that it can load and run any program you want. You can then setup the environment the way you want with the setenv commands. For instance: ;This line below ignores the opening screen. ignore ;This line below tells HC.System to not install the IIgs brk stuff. ;Opix has its own. setenv NOBRK ;This line below tells HC.System to load opix and execute it both ;at address $2000. setenv opsys opix $2000 ; or you could even use 'setenv basic.system $2000'. I would like to say that this program is not IIgs specific. There are some people that do not think they need this. That is fine with me. I am trying to make it work on all machines so that we can say that HyperC does work on all machines. For normal // users you can still use c.system. I have no qualms with that. Why the new code? I have put in the new code because people have said to me "wouldn't it be nice to....". I have tried to help everyone with putting in the new code. It is real helpful for the people that are trying to switch between different environments (opix not included, Wulf has the same IIgs code, or close to it, that is in this HC.System and it does not need a loading program.). It is also helpful for people using different shells.(With the new code there will be makers and testers) Or for the people who just want to customize there entry into HyperC. The actual manual will start here: ----------------------------------------------------------------------- Manual HC.System V3.0 Programmer: Gary F. Desrochers Special thanks to: Andy Werner Wulf Hofbauer Story: HyperC is a C compiler for the II computers. It is now considered shareware but there is nowhere to send the shareware fee. In 1990 I thought it would be fun to try to get things to work. I used gs.system because I wanted to run it on the IIgs. I started disassembling parts of the system and actually had a complete disassembled version of opsys. I met Andy Werner and we tried to get interest going for HyperC. One of the first things I wanted to do was create a system program that allowed me to use HyperC on the IIgs. This was time I created HC.System. Since that time people have asked me to put different things into HC.System. I had time to put this newer version together so I did. Here it is. It now has other features and works on a 6502 machine also. (This would include the II+ and unenhanced IIe) Introduction: HC.System is a login program for HyperC. It sets up the environment as specified by you the user. This program has different levels of complexity for it. If you are a just learning HyperC then just put an ;!ignore at the beginning of your autoexec file. Once you feel comfortable with the system then try to create a hclogin file and try out some of the other options that are contained in HC.System. This program is also for all users of Apple II computers. While it started out as an intergral part of HyperC, now HC.System can be used by people without HyperC. The only reason for this is that HC.System can load any program that a person would like to load that is in the same directory as HC.System. This feature is a coincidence not a planned result. Since Opix has come out HyperC programers have wanted a way to choose which program they wanted to use to test thier programs. This is what HC.System allows thm to do. Other programmers wanted to use Andy Werners opsys8xx for 658xx computers. There are options that are included in HyperC for this also. Here is a list of what people wanted between this and the last release: - Make HC.System work on the 6502 machines. - get rid of ;! at the beginning of the command lines. - ignore credits. - make own credits. - accept input. - some sort of minor language. - memory variables - able to select opsys, opsys8xx, or the new opix on startup. - load floating point libraries into /RAM. - disconnect /RAM on startup and reconnect on shutdown. - change the name of the program executed first under opsys. - new files so that the commands didn't show up when shell executed autoexec file. 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 ;clc byte 0xfb ;xce byte 0x00 ;brk byte 0x00 ;$00 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 unless the setenv 65802 option is used below. 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. 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. Another reason for using a HCLogin file is to not have to put ;! at the beginning of every line. You only need the ;! for every line in the autoexec file. This is so that the shell does not try to execute the commands. COMMAND LINES: Command lines can be up to 254 characters. HC.System is case insensitive for commands. Proccessing of commands is completed with the finding the end of file when using a hclogin file or when finding any line without a ; at the beginning of it while using an autoexec file. There can be no blank lines in between ; lines in the autoexec file. That does not mean you cannot create a blank line with no command like ;! or ;. See below. 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. ;! - Is treated the same as the comment line above in when using a hclogin file. When using a autoexec file the ; is faster but this line will still be ignored. 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. The filename must be FP65. 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. This subcommand also switches out the your old quit code and places into a place in /RAM and then puts it's own there. When a ProDOS 8 quit call is made it swaps back in the old quit code and reinstalls /RAM. OPSYS - This subcommand allows you to vary the opsys name that you want loaded into memory. Up to 15 characters. Technically 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. There is one more subcommand that can be added onto this subcommand. It is a address value of where to put the program. The default is $0800 since this is to normally be used with HyperC. The syntax would be ;!setenv opsys myprogram $1000. The $ is important. It signifies that it is a hex value. This subcommand will not accept a nonhex value as of this version. 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.) 65802 - This subcommand checks for the proper CPU which is either 65802 or a 65816 not in a IIgs and sets up brk vectors accordingly to use opsys658xx interpreter. (There you go Andy(w). And Thanks!) In the IIgs, this subcommand makes the brk code able to process native mode brks and pass them to the brk entry point at $03f0 NOBRK - This subcommand will remove the installation of the IIgs brk code. Useful for loading programs that do not use brks. It will also stop the unconditional removal of /RAM on the IIgs. You can still use the setenv ram option above. 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. A script like this would be used to select between seperate opsys/shells or for disconnecting /RAM ect. : ;This will ignore the opening screen and /RAM file check. Ignore /RAM ;This is used to take up less space and show what can be done. set $VAR2 = " Which One: " set $VAR3 = " 3) Quit!" ;This will clear the screen and ask my first message about /RAM. do mark clear echo echo echo echo echo " Select an opsys to use" echo " 0) Leave /RAM alone" echo " 1) disconnect /RAM" echo $VAR3 GetKey $VAR2 until ( $last < 4 ) if ( $Last == 2 ) back elseif ( $Last == 3 ) quit elseif ( $LAST == 1 ) ; I now want to make /RAM go away so that I can run some program I have ; that I want to test out. setenv RAM endif ; Now for opsys. ; 0 in $VAR1 means that the old opsys is used. set $Var1 = 0 do clear echo echo echo echo echo " Select an opsys to use" echo " 0) Old opsys" echo " 1) My opsys" echo " 2) opix" echo $VAR3 GetKey $VAR2 until ( $last < 4 ) if ( $Last == 3 ) quit elseif ( $LAST == 2 ) ; Now show that we don't have the old opsys set $Var1 = 1 ; This line below tells HC.System to not install the IIgs brk stuff. ; Opix has its own. setenv NOBRK ; This line below tells HC.System to load opix and execute it both ; at address $2000. setenv opsys opix $2000 elseif ( $LAST == 1 ) setenv opsys myopsys ; Now show that we don't have the old opsys set $Var1 = 1 ; I have a IIgs. My new opsys needs native mode brks to go to my opsys ; so do this. Either that or I am using my IIc with a 65802 and I need ; stuff installed for Andy's new opsys also. setenv 65802 endif ; ; Since this is old opsys specific. It needs to be jumped over if I am ; using a new opsys. ; set $Last = 0 if ( $VAR1 == 0 ) do mark clear echo echo echo echo echo " Select a Shell to use" echo " 0) Old Shell" echo " 1) New Shell" echo $VAR3 GetKey $VAR2 until ( $last < 3 ) endif if ( $Last == 2 ) back elseif ( $Last == 3 ) quit elseif ( $LAST == 1 ) setenv shell myshell Of course, there are probably many more that you could make up. This is just one that I have thought up at the spur of the moment. Thank you for your testing, Gary F. Desrochers FiLeStArTfIlEsTaRt ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789() IHC.SYSTEM AMSdAAAAA8)4OIAI6uCArUBHVwhuAMSdAIIM ggATAMAApCAA(XIAFGSqAk6)pyfh9XIkxCAo8Hp)Q7v5)buAQzv59buAJ7fpqDdd J)fpkD9QQCATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAkKA)yfjNSQqi(b)tq5)p8LmDAtAYSFTgIZqgMMAs6JA wLAgCB8HgKAkAmbQvksAIWA8wbP0AyYDAAiASZ8vCAbmgsAkH)LAQmpUUx0AA2Km u1oAA6KmvkqACAYnCAojAkK6CAYnA2ry)liACAYn1DtyQqLIOPAku35IgMA9I)LA wm5OA1KCp4emOAZn)CAIZWDyMNAkti5GNmpON2JDNmpZNmpXN2ZFN2pGg05HJ)LA w25C3DicGwEkAACmeg8v0Abm)CAIZeAxtaCsNm5INmpVNmpZgkpGR)LAwmZGb0qE Z1Ymc0ama1YmAASmVp8vAASmlx8vgAWmK)LAtmZXwn5YA0KJAIKpdmCrJfA8QA9O QePTQvTyB06DhkMpimN0nAiA3zUkgAGkgGJtA0KAAU4pnGQrwHQhAEbeiWH8AkKA ZiWj9CAowrJAn14Wsjemwm5ZAErGAlMypIAkA093sDvmZemrZim7Zim7ROETQDQs o5q0u1bmC2om9iekNqpbgE5ggBAAZOG79eBsJTKAMAfDwnQyskMCJTA8UANIjxO6 iDZmtCGOQHJPzk6BgIqoY0p0gCGYAkqFnCQm6DNiNCQqg0JJwGZhk066KkcnKQO8 k4OqZqYnpeKABkJpA07pnkMpJzC8oAvIwTSyAAqTkCQvw3QyJksEJ7A8KAPLwDSy sjuBQm5YAk65kCQnDzE6Q0YkKiennCQmZOG7gSBsA0LANkMpNvA8w3JEsjuBQm5Y Akq7kCQnDzE6AkakdCRjd(gjS4I6RwYnjxenCBbmdCBrlCQu56fhwXaA)XIOdCh7 dCh7uCAos3pEwm5YA0rJAlMppIAk(H93oTN0EAMysiOkl2ZEphh)AkJB)X6pnGQm ROMTd(grdGBrRyOTFqvh6H7(pyE8(UIAM(ThILJuQrfssi5(4IJuJDQ6qAfAwLQy DksGxyA8xDi(KogkFqgCxi8PxDi()UgkI)ThgofsKIZ8KogCI7ThgofsFIZ8(UoP pjDYKkMMpLAkuD2Bg2pBC0KAAU4pnOQrwHQhAE7HiuB8UyeARArmJDQsCAJQd)dK QrJlIj(BurO0g15BtCAoFeqAD0KABU4px(B8bAPAsHgowqZmAEbEQCUyfniAamZ3 ofA0qDNydSDIAkKYdKRjnKQrtCQhFe6AcBfAnSQrt6fhFeaBAI6)ayZvNuE8g25D sjOAw25DAErHJ)A8CAJQd)dKQrJnIjOBsiO0u3ZEu2pEQ35DS0q0AkcnJzB8DA9A UWFTwTQyF0aFLA)pdKRrwHQyCkcDgxG8dig7J4OYgCWnE0KAAU4pnWQrxGQhnDPA wDQslkpCAjcmbD7DMKPktmJJFeqBH0KABU4pguC8AELAJXC8hANJBUKygCgpcCSA wjpkFAMFlCBsS1oPX1Im)UamYOVjZiVjQqLIpWAsj0IAgCWnE0KAAU4pnWQrxGQh RAPAwDQsylpCAj8HFArBZKPkg9hcIgB2AkKeBkG(oQA0UaHTQuPK4svD()BIpCBs j0IMghhsiCSqSDioghTnNiHCtCMCtCcitCciN(v)t(v)N())N())tCMCtC8ipC8i m3oAJk6))fejNCQqp(v7v3oEI04)K2KwghCwnKQrtCQhFe6A4AfAwTayE0KN(X4p nWQrw)fhAAKKJ7fsgAdPneQrguB8G0KA(X4pneQrx(fhJAv)IDQkQeCwAka9gBQk OKgou25D925DFeKAB0LABU4puTB8u35Dg25DAELAJVO8HACgQj8wgAG9gUJAg1vj VCAId2MINCYSpWqGb0IAgAWpg55BVCAIFqbqqByMoAe)iKAkAkKKlqRnKAjyCAQv dCYSQXqGghx8dWSrpSC0l0YATCSnMAblNCQqNGZPNG5Pg15Ea6UrR2TjN6RquH5P g15EtCAoFeqAD0KABU4pMNA0xaJKokMAI7H0QDQsAAaenqQrtCQhwf6CBUYbJDQs lBdKAELygCG0E0KAAU4pnWQrwHQhAEbStWE8FeKCJ0q))X4pxmD81Av)naQrtyfh Fe6BpAf)wzfsIraJwzfsxi6EaAN)Q3Dw9AuFgvE8aBfIgzA0bAPPw7D49AOLpmD8 hKqGdKNIpCGOgKq7dKNIghBYI)PoQDQs(HrBQnO8(Hd8w3OkfD77I)PowDQsAEL2 w7f0aDb9g6Mkxi8)EANAw7fsAEbzw7f07Cd8I)PoQDQs(HLBxCL8(HNAQHP8l0qs rAfndORrtyA0NqJWpGZP)0oIgAWkgVpbdWSrtGB8Q35EY1KD90omikakR(TjAkKY R2TjR(TjAkKYR2TjR(TjdORjdWSjAACYU88vsAbndORrdqSjdWSrduSjR2TrdySj R(Trd2SjdaSrd6SjdeSrd(SjdiSrdCTjpCGGhKqTdKNIgAGOO)LAw2JFq0KLT0Yn r0anl0Yns0an90Ynt0ak)0Ynu0akm0Ynv0ann0Ynw0ano0YnghRnimXqSDSoghTn YSFTdaSrg0A0P)LAw2ZGm4eBghRniyaqSDSoghTndaSrgYB8QW5kAAiCZ48vJAbn pCGGm0IAghRniacqSDSoghTndeSrgsE0wW5kAk6MR2TjR(TjdiSj)CAId6xzuPDs 405JdCSrZOW7dCSjdGSrZSW7dGSjdKSrNCQ6Y0pId1KY90omkkakR(Tjdei7dii7 pCGGhK64dKNItCGOw35Jo0aHIAdn)CAId6hzpCBs90IA)0Ykn0Yko0YnghRniCQq SDioghTn)CAIZWGzdOSrgUA8wCpuG0qPmAdniKbqSDynhnang8pop2p0gKKDdKNI iuUqSDCoAmangAqog0p040Zz()BItWAkw3JCAASBDA7oIAATeeAIiubqSDCoAman gAqog0p0g0Zzl9LAAkJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAQAAAAAAKAAAAkJJAAAAAAAAAAAAAAAACAAAAAAAkMAA sCQmPVAAZNFUAAwUAAAAAAAAAAAAZm0AAgKAZG0AAgKADh0BH9ETI4USUVVQYV0T BMUREIAgIAAAAAHAAQAA(TKAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAOdUSFJ1TPxEDTQUQUV0U W5URFdkGFtEVF9RWPh0QMNUJSFURFdELUNFVTBjU1QVRSFUTCpzSLNUQVF1PCRVS I9ERU5UVOxUSJh0VRVETYZUSTxURGlURMVUXjV0UE5URsZUSE5URJh0VtVETSuPA aNJLVCzkBVZKVWUlGT5uXOglDdJQX61lpdpgW6Xl3aJmXutlS9SBD0UQEAlRNFkU Q9kCTl1UINFEMxUR1YjFyADOP5EHLJlQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAbCAsAAgAAAAAAMAAA0wf AAAAAIAAAAAAAAgACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdCEIgYAsM)LAg15y )CAIdyKytePsN2ZsN2JxI0JzJ0IeL2KwL2Kw)nKwBEQjFCQqbmqBpeQhIUIAFCeq I0YCAACwDr8vJ0YnAAKwRaQsQjMCJYe(teO0N3Zyw35xJ263J2Kw(3Kw(34))36) )34)I04)K2KwghCwdK7AAwKAQZEBAUjNAAAAAAAAAAAAEAAAbCAAAEAAAEAA9zAI FCGG(bY)xCAoora)g(vhIhZAJ3fsGAdDdyPIFAJGgAAooN8BEjMqmD5)gAGGg1vj g4YqYM8BMmKYDfAIAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAANUEAN0QDgCaDgCKogCKogCKogCKogCKomDayuX)7mDK5 lze63D68snO60Da5pnv8geu7g(O9znO5u)(4jXu7vCK9NHs000grgCKogCKogCKo gCKogCKogCKogCKogCKogCKoznMooTPogOf6L76zg(orZja(u)aqp6MqNYjjN0QD gCaDgCKogCKogCKogCKogCKogCKogCKogCKogCKoS)Kog2cwgOf60)u7oTPolLf5 u0grN0QDg2QDgCKogCKogCKogCKogCKogCKogCKogCKogCKogCKoXDKojze5l3(7 gqSDgCKogCKogCKogCKogCKogCKogCKogCKogCKogCKovTNo5jMoyXO8(0wwgCKo gCKogCKogCKogCKogCKovnNohDa9gWu8pPf9geu7uOMyzn)0tXO9lbNopPv8g6(7 w66slLMogGO900QtgCKogCKogCKogCKogCKogCKogCKoyfNo0Tf6g6e5gmv4yH(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 yXsEy)u8XDaou)u8DD65hWN0VjRDlLv7n)(46nu7sLe4DDa5t3(7k7e4A0QoAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtCAAQ35BAASLAA4vFAbnbWSr gAC8p65BfKKAdKNIiaUqSDynNDSnflSnwnVyOlsB4IO04hAYNCQqtGr7N)rJQ)LE n0aGR08vRA9viuXqSDynAmangAqog0p0s2Zz5(bMp8rMzm88IaB8pSPEfK6edKNI iCYqSDCoNDSnyAdn)KTux(ej)OTu)KTmIPA8tWP0N(rJtGb7N(7JtGL7N(LEt(rJ N(bEO)7Ju)bMgEr7oALAAAGGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAlKEAaWqblacpsYKAmilpwaKhlahpMBAAUNVQAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABZFAAEjUAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASFkVAAgMAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWBAAzIVQAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAABZFAAQjUAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWBAA1IVQAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABZFAAYjUAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASFkVAAwNAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAWBAA4IVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAABZFAAkjUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA fACOFBr)QI8(iCi49CQdfKLABgAA2Dhy0Diw0DAA0DAAiCAHiExAhDAAQ9IaoFAC II1jJ0aAQAdnAwB9AEA9IAA9QMgoAAgI7jT4tiHCNCcEtCbyNCsEtCrytCMggCMg Ak79AkZ0AjIY1D9)AHYrAHYr5ePoZGLAIGNAQ)PwJ3a9XABswqcrtmAEtC8gMB8g tC7rtCcgMBcgtC7rQAryL2aCL2KwvyEwJ2KsJ2KwpiCw8UIApKUh9UIYpOUh(UI( FCWqggzPgNcEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAtiNAiCsgIo5)ggDew6)HCvfGcQPMS9KAIFACIA1riiUA iAxAhDAApuPO8UIApKUh9UIYpOUh(UI(FCWqggxPtOcENCcEtCh6NCsEtCx6tCcg gCcgAk79AkJYAjY01D9)Qoert6AEQAx6D2qBD2KwGyEwr3KEJABEAvYrAvYrQYIT AnYrAnYru3KKPBPEsiHC5(bMp8rMwmM8ICE8tSPENCR7t(rJNCB7u)7Js(bM5(bM Z(bMI(rMpeP0CV4AQ8er)KTjFCfKAk6QpSUhFVIIAvYrAvYrQcOIALIL07MKAAyA wX2v(DLEmwGAAAwvAAAAAQAAAAAAAAAAAAAAAAAACDAAAUKMCUKSIhESAkA9WMgo AAgIFiW4FiGAMAqAAcLAAEQKiHC8GAKEqCwtBIwv6UIADA)rC8JACDQAFiGIFimA gIOACvGGFiGIFimAwIOAAAAXiDAAGAKEqCwtBMwv6UIADA)rD8JACDQAFiGIFimA gIOAAsGGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AI50