IMD 1.16: 2/09/2008 18:20:41 84-93656-02 e710 f65602 cartos patch utility maintenance diskette    @0|)wwЀЀtQql)  " }gA `_ M@IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIOS4 MF182042117531504820421175315 820421175315BF65602 VOLCARTOS PATCH MAINTENANCE DISKETTE 84-93656-02 (E710)   IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII_ M@iGyy GGG`HZ@ b G`^Y e IQ BBp@;:9 :7P@ G:پN 8!0. * C'xC# b# }B @0DAJL w+™ЀЀΖQA1"   i ž} š} @EEFF)DEۄF8 џ} ԟ} ̟} * `jUBBI,v BI, # @ G9H@pܾrCHC C GTq` Lg"gEXC P+s=胾P+c fQN p $Rxnj  ޔniZ ތ⊞ } }HGž Ÿ@ALS)"$ C k20j.h( +$`%ꂜ\1 !M' y %'+os慾)sY ed|{ @8 o O m J K i gN )V% t%sLn`"E F. F„ D>) =`;nrgy w"G,{Kq1 A&}E*`(t@% ;c  765y342(.OS:: SYS"iwvc Bc A@6<# Ic B# gIjHc r TITL PATCH - PATCH UTILITY - 93656-12-E710 TITL UTILITY BASE PROGRAM OLDOPS OPTIONS +4 INCLUDE X1/EDB.MAC INCLUDE X1/USERCOMMON.MAC INCLUDE X1/ERB.MAC INCLUDE X1/TDB.MAC INCLUDE X1/E:XXXX.MAC OPTIONS OLDOPS SAVE TITL UTILITY IN ITS OWN ENVIRONMENT UTILITY: REL SHARABLE UTILITY: NAM UTILENV NAM STARTUP EXTR G:Z SEXT DEBUGC EXTR R:HIGH EXTR CLEANUP UTILENV EQU $ * EDB EDB: ERB,,,TDB,0,0 EPD: EMP: 0,0 ERB ERB: TDB TDB: 0,STARTUP,,,0 STARTUP EQU $ COPY =:FFFF,A COPY A,K SET STACK TO TOP OF MEMORY COPY =R:HIGH,A ADD =1,A COPY A,L SET LOWER LIMIT OF STACK JMP *$+1  WORD G:Z GO TO UTILITY PROPER SPACE 2 CLEANUPP EQU $ JSK CLEANUP GOT TO UTILITY'S CLEAN-UP CODE (CLOSES ALL FILES) EMONE EQU $ E:MONE SPACE 2 DBGENTRY EQU $ COPY DEBUGP,X JEQ X,EMONE JMP 0(X)  GO TO DEBUGC (OR SYMPLEC) ONLY IF LINKED IN SPACE 1 DEBUGP WORD DEBUGC LPOOL TITL BASE PAGE CODE NAM CLEANUP: NAM RESTART: NAM JMPDEBUG NAM POSTMTEM ABS :10 CLEANUP: EQU $ JMP *$+1 CLEAN UP AND ABORT WORD CLEANUPP RESTART: EQU $ JMP *$+1 RESTART/START POINT WORD STARTUP POSTMTEM EQU $   JMP *$+1 POSTMORTEM DUMP & SELF-DIAG (NONE) WORD EMONE WORD 0 NO DEBUG TRACE JMPDEBUG EQU $ JMP *$+1  JMP TO DEBUGC (SYMPLEC) WORD DBGENTRY SPACE 1 END EDB TITL PATCH - PATCH UTILITY - 93656-12-E710 TITL CARTOS VERSION SPACE 1 * THE INTERFACE REQUIRES THE FOLLOWING DEFINITION * FILES TO RESIDE ON THE UF DEVICE: * SYSCOMMON.MAC, FIB.MAC, IOB.MAC, * GFN.MAC, ISM.MAC, X:COMMON.MAC, * X:IOERR.MAC SPACE 1 TITL INCLUDE DEFINITION FILES SPACE 3 * INCLUDE X1/SYSCOMMON.MAC * INCLUDE X1/FIB.MAC * INCLUDE X1/GFN.MAC * INCLUDE X1/ISM.MAC * INCLUDE X1/IOB.MAC * INCLUDE X1/X:COMMON.MAC * INCLUDE X1/X:IOERR.MAC OPT OPTIONS =:0004 ERRORS ONLY INCLUDE X1/SYSCOMMON.MAC INCLUDE X1/FIB.MAC INCLUDE X1/GFN.MAC INCLUDE X1/ISM.MAC INCLUDE X1/IOB.MAC INCLUDE X1/X:COMMON.MAC INCLUDE X1/X:IOERR.MAC OPTIONS OPT SAVE END TITL PATCH - PATCH UTILITY - 93656-12-E710 TITL CARTOS VERSION SPACE 1 MACHINE =:100 ASSEMBLE FOR 4/95 * REVISION HISTORY: * * E700 PRB --- CONVERTED FROM OS4PATCH E600 * E710 PRB --- REJECTS ANY RDATA,ADATA OR RES WITHOUT * PRECEDING RORG OR AORG (REA 11706) * REV SET 'E710' OBJNOTE ' *** CARTOS PATCH UTILITY - REVISION E710 ***' * LENGTH OF MESSAGE MACRO LNM WORD #1-$-1*2 ENDM SPACE 1 * I/O CALL MACRO MACRO IO COPY:M =#1,A,FC I:IO IOB JMP #2 ENDM SPACE 1 R:GATD MACRO R:GTOD R:CTODA #(1) ENDM SPACE 1 * TEMPORARY MACROS DBLADD MACRO WORD :260B,#(1)  ENDM SPACE 1 E:ISM MACRO I:ISM #(1) ENDM SPACE 1 E:GFN MACRO COPY:M =0,A,GF:DFUN+#(1) I:GFN #(1) ENDM SPACE 1 GFN:PL MACRO #(1) TSTART: GF:SIZ CHECKP: #(?),1,4 GF:NAME  WORD: #(3),0 GF:PASS WORD: #(4),0 GF:CKW WORD: CKW:GF IFT #(2,?) GF:ISM ORG: #(2) EQU  $ ENDC GF:ISCKW WORD: CKW:IS TEND: ENDM TITL NAM PATCH,START:,G:Z NAM CLEANUP START: EQU $ G:Z EQU $ * COPY:M =CIBUF:,A,IS:UB+ISMPL COPY:M =80,A,IS:BC+ISMPL *  JMP *$+1 WORD PATCH LPOOL SPACE 1 CMDTBL EQU $ COMMAND TAB E WORD 4 4 WORDS PER COMMAND BYTE 'AORG ' WORD AORG BYTE 'RORG ' REL ORG WORD RORG BYTE 'ADATA ' ABS DATA WORD ADATA BYTE 'RDATA ' REL DATA WORD RDATA BYTE 'RES ' RESERVE WORDS WORD RES BYTE 'END ' ALL DONE WORD END BYTE 'AEND ' NEW ABS ORG WORD AEND BYTE 'REND ' NEW REL ORG WORD REND WORD 0 END OF TABLE SPACE 1 *  FUNCTION CODE EQUATES CONNECT EQU CO:%4++CON: CONNECT TO FILE DSCONECT EQU DC:%4++ER: DISCONNECT LUN READFIB EQU FU:%4++RIB: READ FIB READEOF EQU PO:%4++REOF: READ EOF VALUE OPENFC EQU FU:%4++OP: OPEN CLOZFC EQU FU:%4++CL:++ER: CLOSE READUF EQU RE:%4++UF: READ STREAM WRITEUF EQU WR:%4++UF: WRITE STREAM WRITEOF EQU PO:%4++WEOF: WRITE NEW END OF FILE RANDOM EQU OPRAN:++OPBYT:++OPRW: RANDOM BYTE STREAM FILE SPACE 1 * TYPE CO DE EQUATES AORGTC EQU 4 RORGTC EQU 5 ADATTC EQU 6 RDATTC EQU 7 RESTC EQU 8 AENDTC EQU 2 RENDTC EQU 3 NOTETC EQU :6D SPACE 1 * GFN STATUS FLAG EQUATES GFF:FNB SET 7 GFF:SEB SET 0 GFF:DIRB SET  2 GFF:JLUB SET 8 SPACE 1 GFN:PL GFN,ISMPL,GF:FBUF+GFN,GF:PBUF+GFN TC EQU ISMPL+IS:TC TEST CHAR NC EQU ISMPL+IS:NC # OF CHARS HF EQU ISMPL+IS:HF HEX FLAG HV EQU ISMPL+IS:HV HEX VALUE SBUF EQU ISMPL+IS:SB SYMBOL BUFFER BP EQU ISMPL+IS:BP BUFFER POINTER SPACE 1 FIB FIB: ,,,GF:FBUF+GFN,GF:PBUF+GFN SPACE 1 ENDTC RES 1,0 END TC SAVE XEQ RES 1,0 EXECUTE SAVE VALUE RES  1,0 EVALUATION VALUE HAVEORG RES 1,0 TO DETECT AORG/RORG BEFORE ADATA/RDATA/RES SPACE 1 IOB  EQU $ I/O BLOCK LUN WORD 'SI' USE STANDARD INPUT RES 1,0 CFI WORD FP FC  RES 1,0 BCT RES 1,0 BYTE COUNT BUF WORD BUFF ACT RES 1,0 COUNT DONE ST RES 1,0 STATUS SPACE 1 FP RES 2,0 FILE POINTER WP RES 2,0 WRITE POINTER SAVE T1 RES 1,0 CNT RES 1,0 COUNTER FOR WORD WORDS SPACE 1 PROMPT WRITE: 'CI',WP:,6,PCHARS,,ER: PCHARS BYTE ' ' PROMPT2 WRITE: 'CI',WP:,6,PCHARS2,,ER: PCHARS2 BYTE ' PAT..' PROMPT3 WRITE: 'CI',WP:,P3SIZE,PCHARS3,,ER: PCHARS3 BYTE ' PLEASE ENTER YOUR NAME...' P3SIZE EQU $-PCHARS3*2 READID READ: 'CI',FA:,80,PERSON,,ER: BUFF RES 256,0 BUFFER SPACE 1 PATCH EQU $ PATCH BINARY PROGRAMS JST  MSG ANNOUNCE WORD MES0 NOPPER EQU $ JMP NOPRMT I:IO PROMPT2 ISSUE "PAT.." PROMPT UPON REENTRY NOP NOPRMT EQU $ COPY:M =0,A,NOPPER E:RCI ISMPL GET COPY OF COMMAND LINE  COPY:M =CONNECT,A,IO:FC+IOB COPY:M =:1000,A,GF:DUN+GFN USE :1000 FOR INPUT FILE DIR LUN E:GFN GFN  GET FILE NAME JGE A,$+2 ER1J EQU $ JMP ER1 BAD NAME COPY:M GF:DUN+GFN,Q,IO:DUN+IOB TBIT GFF:FNB,A JT OV,PAT1 IF FILENAME READ TBIT GFF:SEB,A JF OV,PAT1A IF BUFFER NOT EMPTY OR BAD NAME COPY TC,A JEQ A,PAT1B 'SI' ALREADY ASSIGNED JMP ER1 BAD NAME PAT1A EQU $ TBIT GFF:DIRB,A JT OV,ER1J ERROR IF DIRECTORY-ONLY SPECIFIED TBIT GFF:JLUB,A JF OV,ER1J ERROR IF LUN-ONLY NOT FLAGGED COPY:M GF:ILUN+GFN,A,IO:LUN+IOB SPECIFIED LUN TO REPLACE 'SI' PAT1B EQU $ COPY:M =READFIB,A,IO:FC+IOB COPY:M =FIB,A,IO:FIB+IOB  I:IO IOB READ FIB FOR CONNECTED LUN JMP ER1 COPY FI:CLAS+FIB,Q SUB =CLASS:FM,Q JNE Q,ER1J ERROR IF NOT FILE DEVICE COPY FI:TYPE+FIB,Q CLSN Q,=FIV:DIR JMP ER1 ERROR IF DIRECTORY FILE JMP PAT2 PAT1 EQU $ AND =GFF:WC,A JNE A,ER1 J IF FILENAME CONTAINS WILD CARD CHARACTER COPY:M =FIB,A,IO:FIB+IOB COPY:M =0,A,FI:FLG+FIB I:IO IOB CONNECT TO FILE NAME JMP ER2 SPACE 1 PAT2 EQU $ COPY:M =OPENFC,A,FC COPY:M =RANDOM,A,IO:FOP+IOB I:IO IOB OPEN BINARY FILE FOR RANDOM READ/WRITE JMP ER3 SPACE 1 IO READEOF,EXIT READ EOF POINTER SPACE 1 COPY =-4,Q COPY =-1,A DBLADD FP,AQ COPYE AQ,FP POSITION CFI 1 BYTE BEFORE ENDTC SPACE 1 COPY:M =4,A,BCT SET TO READ END COPY:M =BUFF,A,BUF IO READUF,EXIT COPY BUFF,A AND =:FF,A END TC  COPY A,ENDTC SAVE IT COPY:M BUFF+1,A,XEQ SAVE EXECUTION SPACE 1 COPY =-3,Q  COPY =-1,A DBLADD FP,AQ COPYE AQ,FP COPYE AQ,WP SAVE WRITE POINTER IN CASE OF ERROR  COPY ENDTC,A SUB =2,A JEQD A,PAT9 OK IF END TYPECODE IS 2 JEQ A,PAT9 OR 3 JMP ER5 ERROR OTHERWISE SPACE 1 ER4J JMP ER4 LPOOL SPACE 1 PAT9  EQU $ GET USER IDENTITY FOR 'PATCHED' NOTE I:IO PROMPT3 NOP I:IO READID NOP  COPY IO:ACT+READID,X ADD =PMSGBLEN,X ADD BASIC NOTE LENGTH TO IDENTITY LENGTH AND =:FF,X  ENSURE ONLY 8 BITS USED COPY PMSG,A "OR WITH NOTE TC AND =:FF00,A OR X,A  COPY A,PMSG NOTE TC + NOTE LENGTH ADD =2,X COPY X,PMSGSZ LENGTH OF TOTAL RECORD COPY =-PMSGTLEN,Q ADD Q,X COPY =PMSG,Y COPY =' ',A SBIT 2,S TAILOOP EQU $  ADD TAIL TO 'PATCHED' NOTE COPYB A,0(Y,X) CLSN Q,=-PMSGTLEN+1&:FF COPY ='*',A ADD =1,X IJNE Q,TAILOOP RBIT 2,S SPACE 1 PAT10 EQU $ COPY:M =0,A,BCT RESET BYTE COUNT COPY A,CNT I:IO PROMPT NOP E:RCI ISMPL READ NEXT COMMAND JNE A,ER4J ERROR COPY A,BP E:ISM ISMPL SCAN COMMAND COPY NC,A JEQ A,ER4K  NOTHING THERE , SO WANTS OUT SPACE 1 JST LOOKUP FIND COMMAND IN TABLE WORD CMDTBL  JNE A,PAT12 COMMAND NOT FOUND JSK 0(X) GO DO IT JMP PAT10 GO READ NEXT COMMAND SPACE 1 PAT12 EQU $ JST MSG INVALID COMMAND WORD ERR12 JMP PAT10 SPACE 1 ER4K JMP ER4 LPOOL AORG EQU $ ABS ORIGIN COPY =AORGTC,A AORG1  EQU $ IMS HAVEORG FLAG ORG READ JSK BTB TC TO BUFFER JSK GHV GET ADDR JNE A,BADINPUT BAD VALUE JSK WTB ADDR(WORD) TO BUFFER JSK WRF  WRITE TO FILE RSK SPACE 1 BADINPUT EQU $ JST MSG BAD INPUT WORD ERR0   JMP ADAT10 SPACE 1 RORG EQU $ REL ORIGIN COPY =RORGTC,A TC JMP AORG1 GO TO COMMON LOGIC FOR ORG SPACE 1 ADATA EQU $ ABS DATA COPY =ADATTC,A TC ADATA1 EQU $ COPY HAVEORG,Q CHECK THAT WE HAVE SEEN AN AORG OR RORG JEQ Q,NORG GET USER TO ENTER ORG DETAILS JSK BTB TYPE CODE TO BUFFER COPY:M BCT,A,T1 SAVE POINTER TO COUNT WORD  COPY =0,X INIT COUNT TO ZERO JSK WTB SPACE 1 JSK GHV GET WORD WORD IN X JNE A,BADINPUT BAD VALUE SPACE 1 ADATA2 EQU $ IMS CNT BUMP WORD WORD COUNT JSK WTB WORD WORD TO BUFFER COPY TC,A SEE IF MORE JEQ A,ADAT8 ALL DONE  JSK GHV GET NEXT WORD JNE A,BADINPUT ERROR, BAD VALUE JMP ADATA2 GO PUT IN BUFFER SPACE 1 ADAT8 EQU $ COPY T1,X BYTE DISP FOR COUNT COPY CNT,A COPY A,Q SHIFT A,RO,8 AND =:FF,Q LOWER BYTE COPY BUF,Y SBIT BY:,S COPY A,0(Y,X) COPY Q,1(Y,X) RBIT BY:,S JSK WRF WRITE TO FILE ADAT10 EQU $ RSK SPACE 1 RDATA EQU $ COPY =RDATTC,A TC JMP ADATA1 SPACE 1 NORG EQU $  WE NEED AORG OR RORG JST MSG WORD ERR6 JMP ADAT10 TRY AGAIN SPACE 1 BADJ  JMP BADINPUT LPOOL SPACE 1 RES EQU $ RES & FILL COPY HAVEORG,Q CHECK THAT WE HAVE SEEN AN AORG OR RORG JEQ Q,NORG GET USER TO ENTER ORG DETAILS COPY =RESTC,A JSK BTB TC TO BUFFER JSK GHV GET COUNT JNE A,BADINPUT BAD JSK WTB  COUNT TO BUFFER JSK GHV GET PATTERN JNE A,BADINPUT BAD JSK WTB  PATTERN TO BUFFER JSK WRF DUMP BUFFER TO FILE RSK SPACE 1 AEND EQU $  END ABSOLUTE JSK GHV GET ABS ADDRESS JNE A,BADJ BAD STUFF COPY =AENDTC,A JMP END05 REND EQU $ END RELOCATABLE JSK GHV GET RELOCATABLE ADDRES JNE A,BADJ BAD STUFF COPY =RENDTC,A END05 EQU $ COPY A,ENDTC SET NEW END TC COPY X,XEQ AND EXECUTION ADDRESS END EQU $ ALL DONE R:GATD DATE GET CURRENT DATE/TIME COPY =0,Q END10 EQU $ COPY =PMSG,Y ADDRESS OF PATCH MESSAGE COPY Q,X X=MESSAGE INDEX SBIT BY:,S COPY 0(X,Y),A GET MESSAGE BYTE RBIT BY:,S JSK BTB STORE BYTE ADD =1,Q BUMP INDEX CSK Q,PMSGSZ DONE? JMP END10 NO, CONTINUE NOP YES END20 EQU $  COPY ENDTC,A END TC JSK BTB TO BUFFER COPY XEQ,X EXECUTION ADDR  JSK WTB JSK WRF WRITE TO FILE SPACE 1 EXIT EQU $ CLEANUP EQU $ IO CLOZFC,$+1 CLOSE FILE IO DSCONECT,EXITONLY DISCONNECT LUN E:MON NORMAL EXIT EXITONLY EQU $ IO   CLOZFC,$+1 CLOSE FILE IO DSCONECT,$+1 DISCONNECT LUN E:MONE ABNORMAL EXIT PMSGSZ WORD 0 HOLDS LENGTH OF 'PATCHED' MESSAGE IN BYTES PMSG BYTE NOTETC,0,'**** PATCHED (' DATE BYTE 'YYMMDDHHMMSSQQ) BY ' PMSGTLEN EQU 6 TAILPIECE LENGTH PMSGBLEN EQU $-PMSG*2+PMSGTLEN-2 PERSON RES 44,0 SPACE 1 BTB EQU  $ BYTE TO BUFFER COPY BCT,X COPY BUF,Y BUFFER ADDR SBIT BY:,S COPY A,0(Y,X) RBIT BY:,S IMS BCT BUMP COUNT RSK LPOOL SPACE 1 WTB  EQU $ WORD IN X TO BUFFER COPY X,A COPY A,Q SHIFT A,RO,8 UPPER BYTE  AND =:FF,Q LOWER BYTE JSK BTB UPPER TO BUFFER COPY Q,A JSK BTB  LOWER TO BUFFER RSK SPACE 1 GHV EQU $ GET HEX VALUE JSK HEX INPUT HEX JEQ A,GHVERROR ERROR COPY Q,VALUE SAVE VALUE GHV10 EQU $ CLSN X,='+' JMP GHV30 ADD CLSN X,='-' JMP GHV40 SUBTRACT CLSN X,='*' JMP GHV50 MULTIPLY CLSN X,='/' JMP GHV60 DIVIDE COPY VALUE,X GET TOTAL VALUE COPY =0,A NO ERRORS RSK AND EXIT GHV30 EQU $ ADD JSK HEX GET NEXT HEX JEQ A,GHVERROR ERROR ADD VALUE,Q DO ADD JMP GHV90 GHV40 EQU $ SUBRTRACT JSK HEX GET NEXT HEX JEQ A,GHVERROR ERROR COPY VALUE,A SUB Q,A COPY A,Q JMP GHV90 GHV50 EQU $ MULTIPLY JSK HEX GET NEXT HEX JEQ A,GHVERROR ERROR COPY =0,A MUL VALUE,AQ JMP GHV90 GHV60 EQU $ DIVIDE JSK HEX GET NEXT HEX JEQ A,GHVERROR ERROR EXCH Q,VALUE COPY =0,A JGE Q,$+2 SUB =1,A DIV VALUE,AQ GHV90 EQU $ COPY Q,VALUE NEW VALUE JMP GHV10 CONTINUE GHVERROR EQU $ COPY =1,A ERROR RSK EXIT SPACE 1 HEX EQU $ GET HEX CONSTANT E:ISM ISMPL COPY NC,A JEQ A,HEX10 NULL COPY HF,Q HEX FLAG JEQ Q,$+2 GO IF HEX COPY =0,A INDICATE ERROR COPY HV,Q GET VALUE COPY TC,X AND TERMINATING CHARACTER HEX10 EQU $ RSK LPOOL SPACE 1 WRF EQU $ WRITE TO FILE COPY:M =BUFF,A,BUF IO WRITEUF,ER4 RSK SPACE 1 LOOKUP EQU $ COMMAND LOOKUP ENT COPY *LOOKUP,Y TABLE ADDR COPY 0(Y),A LENGHT OF COMMAND I WORDS ADD A,A IN BYTES SUB NC,A JLT A,LKP9 TOO LONG LKP2 EQU $ COPY =0,Q LKP3 EQU $ COPY =SBUF,X ADDR OF COMMAND SBIT BY:,S XNX Q COPY 2(Y),A  CHAR FROM TABLE RBIT BY:,S EXCH X,Y COPY A,T1 SBIT BY:,S XNX Q  COPY 0(Y),A CHAR FROM INPUT RBIT BY:,S COPY X,Y ADDR IN TABLE SUB T1,A  JNE A,LKP7 NO MATCH ADD =1,Q NEXT CHAR CSK Q,NC SEE IF DONE  JMP LKP3 NOT DONE NOP COPY *LOOKUP,X COPY 0(X),X LENGTH OF ENTRY COPY 1(Y,X),X ADDR OF PROCESSOR COPY =0,A JMP LKP10 SPACE 1 LKP7 COPY *LOOKUP,X ADDR OF TABLE ADD 0(X),Y BUMP TO NEXT ENTRY ADD =1,Y COPY 1(Y),A JNE A,LKP2   NOT AT END OF TABLE LKP9 COPY =1,A NOT FOUND SPACE 1 LKP10 IMS LOOKUP JMP *LOOKUP SPACE 1 MSG ENT MESSAGE ROUTINE COPY *MSG,X ADDR OF MESSAGE COPY  0(X),A LENGTH COPY A,MESIOB+IO:BCT ADD =1,X ADDR OF TEXT COPY X,MESIOB+IO:BUF I:IO MESIOB WRITE MESSAGE NOP IMS MSG JMP *MSG SPACE 1 MESIOB WRITE: 'UC',FA:,,,,ER: SPACE 1 ER1 EQU $ JST MSG INVALID FILE NAME WORD ERR1  JMP EXITONLY SPACE 1 ER2 EQU $ JST MSG FILE CONNECT FAILURE WORD ERR2  JMP EXITONLY SPACE 1 ER3 EQU $ JST MSG FILE OPENING FAILURE WORD ERR3  JMP EXITONLY SPACE 1 ER4 EQU $ COPYE WP,AQ RESTORE WRITE POINTER COPYE AQ,FP IO WRITEOF,EXITONLY POSITION THERE COPY:M =0,A,BCT RESET BYTE COUNT JMP END20 GO PUT END BACK SPACE 1 ER5 EQU $ JST MSG NOT BINARY FILE WORD ERR5 JMP EXITONLY  SPACE 1 LPOOL SPACE 1 MES0 LNM MES1 BYTE ' PATCH (' DOUBLE REV BYTE ') ' MES1 EQU $ ERR0 LNM ERR1 BYTE ' INVALID HEX VALUE' ERR1 LNM ERR2 BYTE ' INVALID FILE NAME' ERR2 LNM ERR3 BYTE ' FILE CONNECT FAILURE' ERR3 LNM ERR5 BYTE ' FILE OPENING FAILURE' ERR5 LNM ERR6 BYTE ' NOT BINARY FILE?' ERR6 LNM ERR12 BYTE ' PATCH NEEDS AORG OR RORG COMMAND BEFORE DATA COMMAND' ERR12 LNM ERR13 BYTE ' INVALID COMMAND' ERR13 EQU $ LPOOL CIBUF: RES 64,0 COMMAND LINE BUFFER END COPY X,MESIOB+IO:BUF I:IO MESIOB WRITE MESSAGE NOP IMS MSG JMP *MSG SPACE 1 MESIOB WR1PAGE 0001 MACRO (F300) PATCH - PATCH UTILITY - 93656-12-E710 1982/04/21 13:56:48.75 UTILITY BASE PROGRAM SI = DH01.CARTOSPATCH.ASM SO = DH01.CARTOSPATCH.OBJ LO = DH01.CARTOSPATCH.LST 18C3 18C7 0003 OLDOPS OPTIONS +4 1PAGE 0002 MACRO (F300) PATCH - PATCH UTILITY - 93656-12-E710 1982/04/21 13:56:59.50 E:XXXX (MDE) USER MACROS - E:XXXX.MAC - 84-94142-65 (A100) SI = DH01.CARTOSPATCH.ASM SO = DH01.CARTOSPATCH.OBJ LO = DH01.CARTOSPATCH.LST 0010 SAVE 1PAGE 0003 MACRO (F300) PATCH - PATCH UTILITY - 93656-12-E710 1982/04/21 13:56:59.50 UTILITY IN ITS OWN ENVIRONMENT 0000 0002 0012 UTILITY: REL 0013 SHARABLE UTILITY: 0000 0014 NAM UTILENV  002C 0015 NAM STARTUP 0016 EXTR G:Z 0017 SEXT  DEBUGC 0018 EXTR R:HIGH 0019 EXTR CLEANUP 00000000 0020 UTILENV EQU $ 0021 * 0000 0000 0022 EDB EDB: ERB,,,TDB,0,0 0000 0000 0022+ 0002 0000 0022+ 0003 0010 0022+ 0005 0022+ 0006 0022+ 0007 0022+ 0008   0022+ 0009 0022+ 000C 0000 0022+ 000D 0020 0022+ 000E 0000 0022+ 000F AB00 0022+  0000000A 0023 EPD: 00000000 0024 EMP: 0,0 0010 0000 0025 ERB ERB: 0010 0000  0025+ 0011 0000 0025+ 0012 000A 0025+ 0015 0000 0025+ 0016 0000 0025+ 0017 0000 0025+ 0019 FFFF 0025+ 001A FFFF 0025+ 001B FFFF 0025+ 001F AB01 0025+ 0020 0000 0026 TDB TDB:  0,STARTUP,,,0 0020 0026+ 0021 0000 0026+ 0024 0000 0026+ 0023 0001 0026+ 0025 0000 0026+ 0026 0000 0026+ 0027 002C 0026+ 0029 0000 0026+ 002A 0000 0026+ 002B F01E 0026+ 0000002C 0027 STARTUP EQU $ 002C 08FF 0028 COPY =:FFFF,A 002D 7000 0029 COPY A,K  SET STACK TO TOP OF MEMORY 002E 828C 003B 0030 COPY =R:HIGH,A 002F 0B01 0031 ADD =1,A 0030 5000 0032 COPY A,L SET LOWER LIMIT OF STACK 0031 9F80 0032 0033 JMP *$+1 1PAGE 0004 MACRO (F300) PATCH - PATCH UTILITY - 93656-12-E710 1982/04/21 13:57:05.50 UTILITY IN ITS OWN ENVIRONMENT 0032 0002 0034 WORD G:Z GO TO UTILITY PROPER 00000033 0036 CLEANUPP EQU $ 0033 FF88 003C 0037 JSK CLEANUP GOT TO UTILITY'S CLEAN-UP CODE (CLOSES ALL FILES) 00000034 0038 EMONE  EQU $ 0034 7A01 0039 E:MONE 0035 0000 0036 FFFF 0039+ 00000037 0041 DBGENTRY EQU  $ 0037 A282 003A 0042 COPY DEBUGP,X 0038 313B 0034 0043 JEQ X,EMONE 0039 9C80 0000 0044  JMP 0(X) GO TO DEBUGC (OR SYMPLEC) ONLY IF LINKED IN 003A 0000 0046 DEBUGP WORD DEBUGC  0002 0047 LPOOL 003B 0001 R:HIGH 003C 0000 CLEANUP 1PAGE 0005 MACRO (F300) PATCH - PATCH UTILITY - 93656-12-E710 1982/04/21 13:57:06.00 BASE PAGE CODE 0010 0049 NAM CLEANUP: 0012 0050  NAM RESTART: 0017 0051 NAM JMPDEBUG 0014 0052 NAM POSTMTEM  0010 0000 0053 ABS :10 00000010 0054 CLEANUP: EQU $ 0010 9D11 0011 0055 JMP *$+1 CLEAN UP AND ABORT 0011 0033 0056 WORD CLEANUPP 00000012 0057 RESTART: EQU $ 0012 9D13 0013 0058 JMP *$+1 RESTART/START POINT 0013 002C 0059 WORD STARTUP 00000014 0060 POSTMTEM EQU $ 0014 9D15 0015 0061 JMP *$+1 POSTMORTEM DUMP & SELF-DIAG (NONE) 0015 0034 0062 WORD EMONE 0016 0000 0063 WORD 0 NO DEBUG TRACE 00000017  0064 JMPDEBUG EQU $ 0017 9D18 0018 0065 JMP *$+1 JMP TO DEBUGC (SYMPLEC) 0018 0037 0066  WORD DBGENTRY 0000 0068 END EDB 0000 ERRORS (0000/0000) 0000 WARNINGS (0000/0000) 1PAGE 0006 MACRO (F300) PATCH - PATCH UTILITY - 93656-12-E710 1982/04/21 13:57:23.25 CARTOS VERSION SI = DH01.CARTO SPATCH.ASM SO = DH01.CARTOSPATCH.OBJ LO = DH01.CARTOSPATCH.LST 0072 * THE INTERFACE REQUIRES THE FOLLOWING DEFINITION 0073 * FILES TO RESIDE ON THE UF DEVICE: 0074 * SYSCOMMON.MAC, FIB.MAC, IOB.MAC, 0075 * GFN.MAC, ISM.MAC, X:COMMON.MAC, 0076 * X:IOERR.MAC  1PAGE 0007 MACRO (F300) PATCH - PATCH UTILITY - 93656-12-E710 1982/04/21 13:57:23.25 INCLUDE DEFINITION FILES  0080 * INCLUDE X1/SYSCOMMON.MAC 0081 * INCLUDE X1/FIB.MAC 0082 * INCLUDE X1/GFN.MAC 0083 * INCLUDE X1/ISM.MAC 0084 * INCLUDE X1/IOB.MAC 0085 * INCLUDE X1/X:COMMON.MAC 0086 * INCLUDE X1/X:IOERR.MAC 18C3 0004 0087 OPT OPTIONS =:0004 ERRORS ONLY 1PAGE 0008 MACRO (F300) PATCH - PATCH UTILITY - 93656-12-E710 1982/04/21 13:57:39.50 EXCEPTION CLASS I/O ERRORS - X:IOERR - 84-94143-61 (A100) SI = DH01.CARTOSPATCH.ASM SO = DH01.CARTOSPATCH.OBJ LO = DH01.CARTOSPATCH.LST 0096  SAVE 0097 END 0000 ERRORS (0000/0000) 0000 WARNINGS (0000/0000) 1PAGE 0009 MACRO (F300) PATCH - PATCH UTILITY - 93656-12-E710 1982/04/21 13:58:04.75 CARTOS VERSION SI = DH01.CARTOSPATCH.ASM SO = DH01.CARTOSPATCH.OBJ LO = DH01.CARTOSPATCH.LST 0004 0100 0101 MACHINE =:100 ASSEMBLE FOR 4/95  0102 * REVISION HISTORY: 0103 * 0104 * E700 PRB --- CONVERTED FROM OS4PATCH E600 0105 * E710 PRB --- REJECTS ANY RDATA,ADATA OR RES WITHOUT 0106 *  PRECEDING RORG OR AORG (REA 11706) 0107 * 45373130 0108 REV SET 'E710' 0020 0109 OBJNOTE ' *** CARTOS PATCH UTILITY - REVISION E710 ***' 0020 002A 002A 002A  0020 0043 0041 0052 0054 004F 0053 0020 0050 0041 0054 0043  0048 0020 0055 0054 0049 004C 0049 0054 0059 0020 002D 0020 0052 0045 0056 0049 0053 0049 004F 004E 0020 0045 0037  0031 0030 0020 002A 002A 1PAGE 0010 MACRO (F300) PATCH - PATCH UTILITY - 93656-12-E710 1982/04/21  13:58:05.00 CARTOS VERSION 002A 0110 * LENGTH OF MESSAGE 0111 MACRO LNM 0112 WORD #1-$-1*2 0113 ENDM 0115 *  I/O CALL MACRO 0116 MACRO IO 0117 COPY:M =#1,A,FC 0118 I:IO IOB 0119 JMP #2 0120 ENDM 0122 R:GATD MACRO 0123 R:GTOD 0124 R:CTODA #(1) 0125  ENDM 0127 * TEMPORARY MACROS 0128 DBLADD MACRO 0129   WORD :260B,#(1) 0130 ENDM 0132 E:ISM MACRO 0133  I:ISM #(1) 0134 ENDM 0136 E:GFN MACRO 0137 COPY:M =0,A,GF:DFUN+#(1) 0138 I:GFN #(1) 0139 ENDM 0141 GFN:PL MACRO 0142 #(1) TSTART: GF:SIZ 0143 CHECKP: #(?),1,4  0144 GF:NAME WORD: #(3),0 0145 GF:PASS WORD: #(4),0 0146 GF:CKW WORD: CKW:GF 0147 IFT #(2,?) 0148 GF:ISM ORG: 0149 #(2) EQU  $ 0150 ENDC 0151 GF:ISCKW WORD: CKW:IS 0152 TEND: 0153 ENDM 1PAGE 0011 MACRO (F300) PATCH - PATCH UTILITY - 93656-12-E710 1982/04/21 13:58:06.00 CARTOS VERSION 01B8 0155 NAM PATCH,START:,G:Z 0000 0000 02E1 0156  NAM CLEANUP 00000000 0157 START: EQU $ 00000000 0158 G:Z EQU $ 0159 * 0000 8285 0006 0160 COPY:M =CIBUF:,A,IS:UB+ISMPL 0001 86D5 0057 0160+ 0002 0950 0161 COPY:M =80,A,IS:BC+ISMPL 0003 86D4 0058 0161+ 0162 * 0004 9F80 0005 0163 JMP *$+1 0005 01B8  0164 WORD PATCH 0003 0165 LPOOL 0006 0459 CIBUF: 0007 0008 00000009 0167 CMDTBL EQU $ COMMAND TAB 0009 0004 0168 E WORD 4 4 WORDS PER COMMAND 000A 414F  0169 BYTE 'AORG ' 000B 5247 000C 2020 000D 2020 000E 027F 0170 WORD AORG 000F 524F 0171 BYTE 'RORG ' REL ORG 0010 5247 0011 2020 0012 2020 0013 028A 0172 WORD RORG 0014 4144 0173 BYTE 'ADATA ' ABS DATA 0015 4154 0016 4120 0017 2020 0018 028C 0174  WORD ADATA 0019 5244 0175 BYTE 'RDATA ' REL DATA 001A 4154 001B 4120 001C 2020 001D 02A9  0176 WORD RDATA 001E 5245 0177 BYTE 'RES ' RESERVE WORDS 001F 5320 0020 2020 0021 2020 0022 02B6 0178 WORD RES 0023 454E 0179 BYTE 'END ' ALL DONE 0024 4420 0025 2020 0026 2020 0027 02CB 0180 WORD END 0028 4145 0181 BYTE 'AEND ' NEW ABS ORG 0029 4E44 002A 2020 1PAGE 0012 MACRO (F300) PATCH - PATCH UTILITY - 93656-12-E710 1982/04/21 13:58:06.75 CARTOS VERSION 002B 2020 002C 02C2 0182 WORD AEND 002D 5245 0183 BYTE 'REND ' NEW REL ORG 002E 4E44 002F 2020 0030 2020 0031 02C6 0184 WORD REND 0032 0000 0185 WORD 0  END OF TABLE 0187 * FUNCTION CODE EQUATES 00000040 0188 CONNECT EQU CO:%4++CON: CONNECT TO FILE 00004050 0189 DSCONECT EQU DC:%4++ER: DISCONNECT LUN 00000033 0190 READFIB EQU   FU:%4++RIB: READ FIB 00000023 0191 READEOF EQU PO:%4++REOF: READ EOF VALUE 00000030 0192 OPENFC EQU FU:%4++OP: OPEN 00004031 0193 CLOZFC EQU FU:%4++CL:++ER: CLOSE 00000000 0194 READUF EQU RE:%4++UF: READ STREAM 00000010 0195 WRITEUF EQU WR:%4++UF: WRITE STREAM 00000024 0196 WRITEOF EQU PO:%4++WEOF: WRITE NEW END OF FILE 00000000 0197 RANDOM EQU OPRAN:++OPBYT:++OPRW: RANDOM BYTE STREAM FILE 0199 * TYPE CODE EQUATES 00000004 0200 AORGTC EQU 4 00000005 0201 RORGTC EQU 5 00000006 0202 ADATTC EQU 6 00000007 0203 RDATTC EQU 7 00000008 0204 RESTC EQU 8 00000002 0205 AENDTC EQU 2 00000003 0206 RENDTC EQU 3 0000006D 0207  NOTETC EQU :6D 0209 * GFN STATUS FLAG EQUATES 00000007 0210 GFF:FNB SET 7  00000000 0211 GFF:SEB SET 0 00000002 0212 GFF:DIRB SET 2 00000008 0213 GFF:JLUB SET 8 0033 0000 0215 GFN:PL GFN,ISMPL,GF:FBUF+GFN,GF:PBUF+GFN 0033 003E 0215+ 0034 0045 0215+ 003D AB14 0215+ 005A AB15 0215+ 00000049 0216 TC EQU ISMPL+IS:TC TEST CHAR 0000004A 0217 NC EQU ISMPL+IS:NC # OF CHARS 0000004D 0218 HF EQU ISMPL+IS:HF HEX FLAG 0000004E 0219 HV EQU ISMPL+IS:HV HEX VALUE 0000004F 0220 SBUF EQU ISMPL+IS:SB SYMBOL BUFFER 00000056 0221 BP EQU ISMPL+IS:BP BUFFER POINTER 005B 0000 0223 FIB FIB: ,,,GF:FBUF+GFN,GF:PBUF+GFN 005B 0000 0223+ 005C 0000 0223+ 005D 0000 0223+ 0060 003E 0223+ 1PAGE 0013 MACRO (F300) PATCH - PATCH UTILITY - 93656-12-E710 1982/04/21 13:58:09.50 CARTOS VERSION 0061 0045 0223+ 0063 0000 0223+ 0064 0000  0223+ 0065 0000 0223+ 0066 0000 0223+ 0067 0000 0223+ 0068 0000 0223+ 0069 0000 0223+ 006A AB16 0223+ 006B 0000 0225 ENDTC RES 1,0 END TC SAVE 006C 0000 0226 XEQ RES 1,0 EXECUTE SAVE 006D 0000 0227 VALUE RES 1,0 EVALUATION VALUE 006E 0000 0228 HAVEORG RES 1,0 TO DETECT AORG/RORG BEFORE ADATA/RDATA/RES 0000006F 0230 IOB EQU $ I/O BLOCK 006F 5349 0231 LUN WORD 'SI' USE STANDARD INPUT 0070 0000 0232 RES 1,0 0071 0077 0233 CFI WORD FP 0072 0000 0234 FC RES 1,0 0073 0000 0235 BCT RES 1,0 BYTE COUNT 0074 00B8 0236 BUF WORD BUFF 0075 0000 0237 ACT RES 1,0 COUNT DONE 0076 0000 0238 ST RES 1,0 STATUS 0077 0000 0240 FP RES 2,0 FILE POINTER 0079 0000 0241 WP RES 2,0 WRITE POINTER SAVE 007B 0000 0242 T1 RES 1,0 007C 0000 0243 CNT RES 1,0 COUNTER FOR WORD WORDS 007D 0000 0245 PROMPT WRITE: 'CI  ',WP:,6,PCHARS,,ER: 007D 4349 0245+ 007E 0000 0245+ 007F 0000 0245+ 0080 4012 0245+ 0081 0006  0245+ 0082 0087 0245+ 0085 0000 0245+ 0086 AB11 0245+ 0087 203C 0246 PCHARS BYTE ' ' 0088 5041 0089 543E 008A 0000 0247 PROMPT2 WRITE: 'CI',WP:,6,PCHARS2,,ER: 008A 4349 0247+ 008B 0000 0247+ 008C 0000 0247+ 008D 4012 0247+ 008E 0006 0247+ 008F 0094 0247+ 0092 0000 0247+ 0093 AB11 0247+ 0094 2050 0248 PCHARS2 BYTE ' PAT..' 0095 4154 0096 2E2E 1PAGE 0014 MACRO (F300) PATCH - PATCH UTILITY - 93656-12-E710 1982/04/21 13:58:14.50 CARTOS VERSION 0097 0000 0249 PROMPT3 WRITE: 'CI',WP:,P3SIZE,PCHARS3,,ER: 0097 4349 0249+ 0098 0000 0249+ 0099 0000 0249+ 009A 4012 0249+ 009B 001A 0249+ 009C 00A1 0249+ 009F 0000 0249+ 00A0 AB11 0249+ 00A1 2050 0250 PCHARS3 BYTE ' PLEASE ENTER YOUR NAME...' 00A2 4C45 00A3 4153 00A4 4520 00A5 454E 00A6 5445 00A7 5220 00A8 594F 00A9 5552 00AA 204E 00AB 414D 00AC 452E 00AD 2E2E 0000001A 0251 P3SIZE EQU $-PCHARS3*2 00AE 0000 0252 READID READ: 'CI',FA:,80,PERSON,,ER: 00AE 4349 0252+ 00AF 0000 0252+ 00B0 0000 0252+ 00B1 4001 0252+ 00B2 0050 0252+ 00B3 0313  0252+ 00B6 0000 0252+ 00B7 AB11 0252+ 00B8 0000 0253 BUFF RES 256,0 BUFFER 000001B8 0255 PATCH EQU $ PATCH BINARY PROGRAMS 01B8 BFEF 0228 0256 JST MSG ANNOUNCE 01B9 03F6 0257 WORD MES0 000001BA 0258 NOPPER EQU $ 01BA 9E84 01BF 0259 JMP  NOPRMT 01BB 1A36 0260 I:IO PROMPT2 ISSUE "PAT.." PROMPT UPON REENTRY 01BC 0000 01BD 008A  0260+ 01BE 0000 0261 NOP 000001BF 0262 NOPRMT EQU $ 01BF 0900 0263 COPY:M =0,A,NOPPER 01C0 8679 01BA 0263+ 01C1 7A02 0264 E:RCI ISMPL GET COPY OF COMMAND LINE 01C2 0000 01C3 0049 0264+ 01C4 0940 0265 COPY:M =CONNECT,A,IO:FC+IOB 01C5 87E7 022D 0265+ 01C6 82E7 022E 0266  COPY:M =:1000,A,GF:DUN+GFN USE :1000 FOR INPUT FILE DIR LUN 01C7 87E7 022F 0266+ 01C8 0900 0267 E:GFN GFN GET FILE NAME 1PAGE 0015 MACRO (F300) PATCH - PATCH UTILITY - 93656-12-E710 1982/04/21 13:58:18.75 CARTOS VERSION 01C9 87E6 0230 0267+ 01CA 1A3D 0267+ 01CB 0000 01CC 0033 0267+ 01CD 1341 01CF 0268 JGE A,$+2 000001CE 0269 ER1J EQU $ 01CE 9FE2 0231 0270 JMP ER1 BAD NAME 01CF C3DF 022F 0271 COPY:M GF:DUN+GFN,Q,IO:DUN+IOB 01D0 C7D8 0229 0271+ 01D1 007F 0272 TBIT GFF:FNB,A 01D2 365A 01ED 0273 JT OV,PAT1 IF FILENAME READ 01D3 000F 0274 TBIT GFF:SEB,A 01D4 36C3 01D8 0275 JF OV,PAT1A IF BUFFER NOT EMPTY OR BAD NAME 01D5 83D4 022A 0276 COPY TC,A 01D6 1147 01DE 0277 JEQ A,PAT1B 'SI' ALREADY ASSIGNED 01D7 9FD9 0231 0278 JMP ER1   BAD NAME 000001D8 0279 PAT1A EQU $ 01D8 002F 0280 TBIT GFF:DIRB,A 01D9 3634 01CE 0281 JT OV,ER1J ERROR IF DIRECTORY-ONLY SPECIFIED 01DA 008F 0282 TBIT GFF:JLUB,A 01DB 36B2 01CE 0283 JF OV,ER1J ERROR IF LUN-ONLY NOT FLAGGED 01DC 83D5 0232 0284 COPY:M GF:ILUN+GFN,A,IO:LUN+IOB SPECIFIED LUN TO REPLACE 'SI' 01DD 87D5 0233 0284+ 000001DE 0285 PAT1B EQU $ 01DE 0933  0286 COPY:M =READFIB,A,IO:FC+IOB 01DF 87CD 022D 0286+ 01E0 82D3 0234 0287 COPY:M =FIB,A,IO:FIB+IOB 01E1 87C9 022B 0287+ 01E2 1A36 0288 I:IO IOB READ FIB FOR CONNECTED LUN 01E3 0000 01E4 006F 0288+ 01E5 9FCB 0231 0289 JMP ER1 01E6 C3CD 0234 0290 COPY FI:CLAS+FIB,Q 01E7 4AFF  0291 SUB =CLASS:FM,Q 01E8 51A5 01CE 0292 JNE Q,ER1J ERROR IF NOT FILE DEVICE 01E9 C3CB 0235 0293 COPY FI:TYPE+FIB,Q 01EA 4C01 0294 CLSN Q,=FIV:DIR 01EB 9FC5 0231 0295  JMP ER1 ERROR IF DIRECTORY FILE 01EC 9E8A 01F7 0296 JMP PAT2 000001ED 0297 PAT1 EQU $ 01ED 1820 0298 AND =GFF:WC,A 01EE 119F 01CE 0299 JNE A,ER1J IF FILENAME CONTAINS WILD CARD CHARACTER 01EF 82C4 0234 0300 COPY:M =FIB,A,IO:FIB+IOB 01F0 87BA 022B 0300+ 01F1 0900 0301 COPY:M =0,A,FI:FLG+FIB 01F2 87C3 0236 0301+ 01F3 1A36 0302 I:IO IOB CONNECT TO FILE NAME 01F4 0000 01F5 006F 0302+ 01F6 9FC0 0237 0303 JMP ER2 000001F7 0305 PAT2 EQU  $ 01F7 0930 0306 COPY:M =OPENFC,A,FC 01F8 87B4 022D 0306+ 1PAGE 0016 MACRO (F300) PATCH - PATCH UTILITY - 93656-12-E710 1982/04/21 13:58:21.00 CARTOS VERSION 01F9 0900 0307 COPY:M =RANDOM,A,IO:FOP+IOB 01FA 87B0 022B 0307+ 01FB 1A36 0308 I:IO IOB OPEN BINARY FILE FOR RANDOM READ/WRITE 01FC 0000 01FD 006F 0308+ 01FE 9FB9 0238 0309 JMP ER3 01FF 0923 0311 IO READEOF,EXIT READ EOF POINTER 0200 87AC 022D 0311+ 0201 1A36 0311+ 0202 0000 0203 006F 0311+ 0204 9FB4 0239 0311+ 0205 48FC  0313 COPY =-4,Q 0206 08FF 0314 COPY =-1,A 0207 260B 0315 DBLADD FP,AQ 0208 0077 0209 4787 0316 COPYE AQ,FP POSITION CFI 1 BYTE BEFORE ENDTC 020A FE6C 0077 020B 0904 0318 COPY:M =4,A,BCT SET TO READ END 020C 879E 022B 0318+ 020D 82AC 023A 0319 COPY:M =BUFF,A,BUF 020E 879A 0229 0319+ 020F 0900 0320 IO READUF,EXIT 0210 879C 022D 0320+ 0211 1A36 0320+ 0212 0000 0213 006F 0320+ 0214 9FA4 0239 0320+ 0215 83A4 023A 0321 COPY BUFF,A 0216 18FF 0322 AND =:FF,A END TC 0217 87A3 023B 0323 COPY A,ENDTC SAVE IT 0218 83A3 023C 0324  COPY:M BUFF+1,A,XEQ SAVE EXECUTION 0219 87A3 023D 0324+ 021A 48FD 0326 COPY =-3,Q 021B 08F  F 0327 COPY =-1,A 021C 260B 0328 DBLADD FP,AQ 021D 0077 021E 4787 0329 COPYE AQ,FP 021F FE57 0077 0220 4787 0330 COPYE AQ,WP SAVE WRITE POINTER IN CASE OF ERROR 0221 FE57 0079 0222 8398 023B 0331 COPY ENDTC,A 0223 0AFE 0332 SUB =2,A 0224 155A 023F 0333  JEQD A,PAT9 OK IF END TYPECODE IS 2 0225 1159 023F 0334 JEQ A,PAT9 OR 3 0226 9F97 023E 0335 JMP ER5 ERROR OTHERWISE 0227 9F84 022C 0337 ER4J JMP ER4 0017 0338  LPOOL 0228 03BE MSG 1PAGE 0017 MACRO (F300) PATCH - PATCH UTILITY - 93656-12-E710 1982/04/21 13:58:22.75 CARTOS VERSION 0229 0074 022A 0049 TC 022B 0073 022C 03DD ER4 022D 0072 022E 1000 022F 0035 0230 0038 0231 03D4 ER1 0232 003A 0233 006F 0234 005B FIB 0235 005D 0236 005C 0237 03D7 ER2 0238 03DA ER3 0239 02E1 EXIT 023A 00B8 BUFF 023B 006B ENDTC 023C 00B9 023D 006C XEQ 023E 03EA ER5 0000023F 0340 PAT9 EQU $ GET USER IDENTITY FOR 'PATCHED' NOTE 023F 1A36 0341 I:IO PROMPT3 0240 0000 0241 0097 0341+ 0242 0000 0342 NOP  0243 1A36 0343 I:IO READID 0244 0000 0245 00AE 0343+ 0246 0000 0344 NOP 0247 A3B0 0278 0345 COPY IO:ACT+READID,X 0248 2B2A 0346 ADD =PMSGBLEN,X ADD BASIC NOTE LENGTH TO IDENTITY LENGTH 0249 38FF 0347 AND =:FF,X ENSURE ONLY 8 BITS USED 024A 83AA 0275 0348 COPY PMSG,A "OR WITH NOTE TC 024B 96AD 0279 0349 AND =:FF00,A 024C 0027 0350 OR  X,A 024D 87A7 0275 0351 COPY A,PMSG NOTE TC + NOTE LENGTH 024E 2B02 0352 ADD =2,X  024F A7A6 0276 0353 COPY X,PMSGSZ LENGTH OF TOTAL RECORD 0250 48FA 0354 COPY =-PMSGTLEN,Q 0251 2042 0355 ADD Q,X 0252 E2A2 0275 0356 COPY =PMSG,Y 0253 0920 0357  COPY =' ',A 0254 0E25 0358 SBIT 2,S 00000255 0359 TAILOOP EQU $ ADD TAIL TO 'PATCHED' NOTE 0255 84C0 0000 0360 COPYB A,0(Y,X) 0256 4CFB 0361 CLSN Q,=-PMSGTLEN+1&:FF 0257 092A 0362 COPY ='*',A 0258 2B01 0363 ADD =1,X 0259 54BB 0255 0364 IJNE Q,TAILOOP 025A 0E27 0365 RBIT 2,S 1PAGE 0018 MACRO (F300) PATCH - PATCH UTILITY - 93656-12-E710 1982/04/21 13:58:24.25 CARTOS VERSION 0000025B 0367 PAT10 EQU $ 025B 0900 0368 COPY:M =0,A,BCT RESET BYTE COUNT 025C 874E 022B 0368+ 025D 8799 0277 0369 COPY A,CNT 025E 1A36 0370  I:IO PROMPT 025F 0000 0260 007D 0370+ 0261 0000 0371 NOP 0262 7A02 0372 E:RCI  ISMPL READ NEXT COMMAND 0263 0000 0264 0049 0372+ 0265 1181 0227 0373 JNE A,ER4J ERROR 0266 8793 027A 0374 COPY A,BP 0267 1A44 0375 E:ISM ISMPL SCAN COMMAND 0268 0000 0 269 0049 0375+ 026A 8390 027B 0376 COPY NC,A 026B 1148 0274 0377 JEQ A,ER4K NOTHING THERE , SO WANTS OUT 026C BF8F 027C 0379 JST LOOKUP FIND COMMAND IN TABLE 026D 0009 0380  WORD CMDTBL 026E 11C2 0271 0381 JNE A,PAT12 COMMAND NOT FOUND 026F FC80 0000 0382 JSK 0(X) GO DO IT 0270 9E6A 025B 0383 JMP PAT10 GO READ NEXT COMMAND 00000271 0385 PAT12 EQU $ 0271 BF36 0228 0386 JST MSG INVALID COMMAND 0272 0450 0387 WORD ERR12 0273 9E67 025B 0388 JMP PAT10 0274 9F37 022C 0390 ER4K JMP ER4 000A 0391 LPOOL 0275 0300 PMSG 0276 02FF PMSGSZ 0277 007C CNT 0278 00B4 0279 FF00 027A 0056 BP 027B 004A NC 027C 0398 LOOKUP 027D 027E 0000027F 0392 AORG EQU $ ABS ORIGIN 027F 0904 0393 COPY =AORGTC,A 00000280 0394 AORG1 EQU $ 0280 DFAE 02AF 0395 IMS HAVEORG FLAG ORG READ 0281 FFAE 02B0 0396 JSK BTB TC TO BUFFER 0282 FFAE 02B1 0397 JSK GHV GET ADDR 0283 11C3 0287 0398 JNE A,BADINPUT BAD VALUE 0284 FFAD 02B2 0399 JSK WTB ADDR(WORD) TO BUFFER 0285 FFAD 02B3 0400 JSK WRF WRITE TO FILE 0286 2309 0401 RSK 00000287 0403 BADINPUT EQU $ 1PAGE 0019 MACRO (F300) PATCH - PATCH UTILITY - 93656-12-E710 1982/04/21 13:58:26.00 CARTOS VERSION 0287 BF20 0228 0404 JST MSG BAD INPUT 0288 03FE 0405 WORD ERR0 0289 9E9E 02A8 0406 JMP ADAT10 0000028A 0408 RORG EQU $ REL ORIGIN 028A 0905 0409 COPY =RORGTC,A TC 028B 9E74 0280 0410 JMP AORG1 GO TO COMMON LOGIC FOR ORG  0000028C 0412 ADATA EQU $ ABS DATA 028C 0906 0413 COPY =ADATTC,A TC 0000028D 0414 ADATA1 EQU $ 028D C3A1 02AF 0415 COPY HAVEORG,Q CHECK THAT WE HAVE SEEN AN AORG OR RORG 028E 515C 02AB 0416 JEQ Q,NORG GET USER TO ENTER ORG DETAILS 028F FFA0 02B0 0417 JSK BTB TYPE CODE TO BUFFER 0290 831A 022B 0418 COPY:M BCT,A,T1 SAVE POINTER TO COUNT WORD 0291 87A2 02B4 0418+ 0292 2900 0419 COPY =0,X INIT COUNT TO ZERO 0293 FF9E 02B2 0420 JSK WTB  0294 FF9C 02B1 0422 JSK GHV GET WORD WORD IN X 0295 11B1 0287 0423 JNE A,BADINPUT  BAD VALUE 00000296 0425 ADATA2 EQU $ 0296 DF60 0277 0426 IMS CNT BUMP WORD WORD COUNT 0297 FF9A 02B2 0427 JSK WTB WORD WORD TO BUFFER 0298 8311 022A 0428 COPY TC,A  SEE IF MORE 0299 1143 029D 0429 JEQ A,ADAT8 ALL DONE 029A FF96 02B1 0430 JSK GHV  GET NEXT WORD 029B 11AB 0287 0431 JNE A,BADINPUT ERROR, BAD VALUE 029C 9E79 0296 0432  JMP ADATA2 GO PUT IN BUFFER 0000029D 0434 ADAT8 EQU $ 029D A396 02B4 0435 COPY T1,X BYTE DISP FOR COUNT 029E 8358 0277 0436 COPY CNT,A 029F 4000 0437 COPY A,Q 02A0 0E79 0438 SHIFT A,RO,8 02A1 58FF 0439 AND =:FF,Q LOWER BYTE 02A2 E306 0229 0440 COPY BUF,Y 02A3 0E25 0441 SBIT BY:,S 02A4 84C0 0000 0442 COPY A,0(Y,X) 02A5 C4C1 0001 0443 COPY Q,1(Y,X) 02A6 0E27 0444 RBIT BY:,S 02A7 FF8B 02B3 0445 JSK WRF WRITE TO FILE 000002A8 0446 ADAT10 EQU $ 02A8 2309 0447 RSK 000002A9 0449 RDATA EQU $ 02A9 0907 0450 COPY =RDATTC,A TC 02AA 9E62 028D 0451 JMP  ADATA1 000002AB 0453 NORG EQU $ WE NEED AORG OR RORG 02AB BF89 02B5 0454 JST  MSG 02AC 0434 0455 WORD ERR6 02AD 9E7A 02A8 0456 JMP ADAT10 TRY AGAIN 1PAGE 0020 MACRO (F300) PATCH - PATCH UTILITY - 93656-12-E710 1982/04/21 13:58:27.75 CARTOS VERSION 02AE 9E58 0287 0458 BADJ  JMP BADINPUT 0007 0459 LPOOL 02AF 006E HAVEORG 02B0 033F BTB 02B1 0355 GHV 02B2 034D WTB 02B3 038F WRF 02B4 007B T1 02B5 03BE MSG 000002B6 0461 RES EQU $ RES & FILL 02B6 C378 02AF 0462  COPY HAVEORG,Q CHECK THAT WE HAVE SEEN AN AORG OR RORG 02B7 5133 02AB 0463 JEQ Q,NORG GET USER TO ENTER ORG DETAILS 02B8 0908 0464 COPY =RESTC,A 02B9 FF76 02B0 0465 JSK BTB  TC TO BUFFER 02BA FF76 02B1 0466 JSK GHV GET COUNT 02BB 118B 0287 0467 JNE A,BADINPUT BAD 02BC FF75 02B2 0468 JSK WTB COUNT TO BUFFER 02BD FF73 02B1 0469 JSK GHV GET PATTERN 02BE 1188 0287 0470 JNE A,BADINPUT BAD 02BF FF72 02B2 0471 JSK WTB PATTERN TO BUFFER 02C0 FF72 02B3 0472 JSK WRF DUMP BUFFER TO FILE 02C1 2309 0473  RSK 000002C2 0475 AEND EQU $ END ABSOLUTE 02C2 FF6E 02B1 0476 JSK GHV  GET ABS ADDRESS 02C3 11AA 02AE 0477 JNE A,BADJ BAD STUFF 02C4 0902 0478 COPY  =AENDTC,A 02C5 9E83 02C9 0479 JMP END05 000002C6 0480 REND EQU $ END RELOCATABLE 02C6 FF6A 02B1 0481 JSK GHV GET RELOCATABLE ADDRES 02C7 11A6 02AE 0482 JNE A,BADJ BAD STUFF 02C8 0903 0483 COPY =RENDTC,A 000002C9 0484 END05 EQU $ 02C9 87FE 0348 0485 COPY A,ENDTC SET NEW END TC 02CA A7FE 0349 0486 COPY X,XEQ AND EXECUTION ADDRESS 000002CB 0487 END EQU $ ALL DONE 02CB 1A2A 0488 R:GATD DATE GET CURRENT DATE/TIME 02CC 0000 02CD 0000 0488+ 02CE 1A2D 0488+ 02CF 0000 02D0 0309 0488+ 02D1 4900 048 9 COPY =0,Q 000002D2 0490 END10 EQU $ 02D2 E222 0275 0491 COPY =PMSG,Y ADDRESS OF PATCH MESSAGE 02D3 2040 0492 COPY Q,X X=MESSAGE INDEX 02D4 0E25 0493 SBIT BY:,S 02D5 80C0 0000 0494 COPY 0(X,Y),A GET MESSAGE BYTE 02D6 0E27 0495 RBIT BY:,S 02D7 FEE7 033F 0496 JSK BTB STORE BYTE 02D8 4B01 0497 ADD =1,Q BUMP INDEX 02D9 FAA5 02FF 0498 CSK Q,PMSGSZ DONE? 1PAGE 0021 MACRO (F300) PATCH - PATCH UTILITY - 93656-12-E710 1982/04/21 13:58:29.50 CARTOS VERSION 02DA 9E77 02D2 0499 JMP END10 NO, CONTINUE 02DB 0000  0500 NOP YES 000002DC 0501 END20 EQU $ 02DC 83EB 0348 0502 COPY  ENDTC,A END TC 02DD FEE1 033F 0503 JSK BTB TO BUFFER 02DE A3EA 0349 0504 COPY XEQ,X EXECUTION ADDR 02DF FEED 034D 0505 JSK WTB 02E0 FF52 02B3 0506 JSK WRF  WRITE TO FILE 000002E1 0508 EXIT EQU $ 000002E1 0509 CLEANUP EQU $ 02E1 82E8 034A 0510  IO CLOZFC,$+1 CLOSE FILE 02E2 87E3 0346 0510+ 02E3 1A36 0510+ 02E4 0000 02E5 006F 0510+ 02E6 9E80 02E7 0510+ 02E7 82E3 034B 0511 IO DSCONECT,EXITONLY DISCONNECT LUN 02E8 87DD 0346 0511+ 02E9 1A36  0511+ 02EA 0000 02EB 006F 0511+ 02EC 9E83 02F0 0511+ 02ED 7A01 0512 E:MON NORMAL EXIT 02EE 0000 02EF 0000 0512+ 000002F0 0513 EXITONLY EQU $ 02F0 82D9 034A 0514 IO CLOZFC,$+1  CLOSE FILE 02F1 87D4 0346 0514+ 02F2 1A36 0514+ 02F3 0000 02F4 006F 0514+ 02F5 9E80 02F6 0514+ 02F6 82D4 034B 0515 IO DSCONECT,$+1 DISCONNECT LUN 02F7 87CE 0346 0515+ 02F8 1A36 0515+ 02F9 0000 02FA 006F  0515+ 02FB 9E80 02FC 0515+ 02FC 7A01 0516 E:MONE ABNORMAL EXIT 02FD 0000 02FE FFFF 0516+ 02FF 0000 0517 PMSGSZ WORD 0 HOLDS LENGTH OF 'PATCHED' MESSAGE IN BYTES 0300 6D00 0518 PMSG BYTE NOTETC,0,'**** PATCHED (' 0301 2A2A 0302 2A2A 0303 2020 0304 5041 0305 5443 0306 4845 0307 4420 0308 2028 0309 5959 0519 DATE BYTE 'YYMMDDHHMMSSQQ) BY ' 030A 4D4D 1PAGE 0022 MACRO (F300) PATCH - PATCH UTILITY - 93656-12-E710 1982/04/21 13:58:31.75 CARTOS VERSION 030B 4444 030C 4848 030D 4D4D 030E 5353 030F 5151 0310 2920 0311 4259  0312 2020 00000006 0520 PMSGTLEN EQU 6 TAILPIECE LENGTH 0000002A 0521 PMSGBLEN EQU $-PMSG*2+PMSGTLEN-2 0313 0000 0522 PERSON RES 44,0 0000033F 0524 BTB EQU $ BYTE TO BUFFER 033F A38C 034C 0525 COPY BCT,X 0340 E386 0347 0526 COPY BUF,Y BUFFER ADDR 0341 0E25 0527 SBIT BY:,S 0342 84C0 0000 0528 COPY A,0(Y,X) 0343 0E27 0529 RBIT  BY:,S 0344 DF87 034C 0530 IMS BCT BUMP COUNT 0345 2309 0531 RSK 0007 0 532 LPOOL 0346 0072 FC 0347 0074 BUF 0348 006B ENDTC 0349 006C XEQ 034A 4031 CLOZFC 034B 4050 DSCONECT 034C 0073 BCT 0000034D 0534 WTB EQU $ WORD IN X TO BUFFER 034D 0020 0535 COPY X,A  034E 4000 0536 COPY A,Q 034F 0E79 0537 SHIFT A,RO,8 UPPER BYTE 0350 58FF 0538 AND =:FF,Q LOWER BYTE 0351 FE6D 033F 0539 JSK BTB UPPER TO BUFFER 0352 0040 0540 COPY Q,A 0353 FE6B 033F 0541 JSK BTB LOWER TO BUFFER 0354 2309 0542 RSK 00000355 0544 GHV EQU $ GET HEX VALUE 0355 FEA9 037F 0545 JSK HEX INPUT HEX 0356 1166 037D 0546 JEQ A,GHVERROR ERROR 0357 C7B3 038B 0547 COPY Q,VALUE SAVE VALUE 00000358 0548 GHV10 EQU $ 0358 2C2B 0549 CLSN X,='+' 0359 9E89 0363 0550 JMP GHV30 ADD 035A 2C2D 0551 CLSN X,='-' 035B 9E8B 0367 0552 JMP GHV40 SUBTRACT 035C 2C2A 0553 CLSN X,='*' 035D 9E8F 036D 0554 JMP GHV50  MULTIPLY 035E 2C2F 0555 CLSN X,='/' 035F 9E93 0373 0556 JMP GHV60 DIVIDE 0360 A3AA 038B 0557 COPY VALUE,X GET TOTAL VALUE 0361 0900 0558 COPY =0,A NO ERRORS 1PAGE 0023 MACRO (F300) PATCH - PATCH UTILITY - 93656-12-E710 1982/04/21 13:58:33.00 CARTOS VERSION 0362 2309 0559 RSK AND EXIT 00000363 0560 GHV30 EQU $ ADD 0363 FE9B 037F 0561  JSK HEX GET NEXT HEX 0364 1158 037D 0562 JEQ A,GHVERROR ERROR 0365 CBA5 038B 0563  ADD VALUE,Q DO ADD 0366 9E94 037B 0564 JMP GHV90 00000367 0565 GHV40 EQU $ SUBRTRACT 0367 FE97 037F 0566 JSK HEX GET NEXT HEX 0368 1154 037D 0567 JEQ  A,GHVERROR ERROR 0369 83A1 038B 0568 COPY VALUE,A 036A 0043 0569 SUB Q,A 036B 4000 0570 COPY A,Q 036C 9E8E 037B 0571 JMP GHV90 0000036D 0572 GHV50 EQU $  MULTIPLY 036D FE91 037F 0573 JSK HEX GET NEXT HEX 036E 114E 037D 0574 JEQ A,GHVERROR ERROR 036F 0900 0575 COPY =0,A 0370 4780 0576 MUL VALUE,AQ 0371 FCFB 006D 0372 9E88 037B 0577 JMP GHV90 00000373 0578 GHV60 EQU $ DIVIDE 0373 FE8B 037F 0579 JSK HEX GET NEXT HEX 0374 1148 037D 0580 JEQ A,GHVERROR ERROR 0375 D395 038B 0581 EXCH Q,VALUE 0376 0900 0582 COPY =0,A 0377 5341 0379 0583 JGE Q,$+2  0378 0AFF 0584 SUB =1,A 0379 4781 0585 DIV VALUE,AQ 037A FCF2 006D 0000037B  0586 GHV90 EQU $ 037B C78F 038B 0587 COPY Q,VALUE NEW VALUE 037C 9E5B 0358 0588 JMP   GHV10 CONTINUE 0000037D 0589 GHVERROR EQU $ 037D 0901 0590 COPY =1,A ERROR 037E 2309 0591 RSK EXIT 0000037F 0593 HEX EQU $ GET HEX CONSTANT 037F 1A44 0594 E:ISM ISMPL 0380 0000 0381 0049 0594+ 0382 8387 038A 0595 COPY  NC,A 0383 1145 0389 0596 JEQ A,HEX10 NULL 0384 C387 038C 0597 COPY HF,Q HEX FLAG 0385 5141 0387 0598 JEQ Q,$+2 GO IF HEX 0386 0900 0599 COPY =0,A INDICATE ERROR 0387 C385 038D 0600 COPY HV,Q GET VALUE 0388 A385 038E 0601 COPY TC,X  AND TERMINATING CHARACTER 00000389 0602 HEX10 EQU $ 0389 2309 0603 RSK 0005 0604 LPOOL 038A 004A NC 038B 006D VALUE 038C 004D HF 038D 004E HV 1PAGE 0024 MACRO (F300) PATCH - PATCH UTILITY - 93656-12-E710 1982/04/21 13:58:34.50 CARTOS VERSION 038E 0049 TC 0000038F 0606 WRF EQU $ WRITE TO FILE 038F 82DD 03ED 0607 COPY:M =BUFF,A,BUF 0390 8736 0347 0607+ 0391 0910 0608 IO  WRITEUF,ER4 0392 8733 0346 0608+ 0393 1A36 0608+ 0394 0000 0395 006F 0608+ 0396 9EC6 03DD 0608+ 0397 2309 0609 RSK 00000398 0611 LOOKUP EQU $ COMMAND LOOKUP 0398 0E0D 0612  ENT 0399 E37E 0398 0613 COPY *LOOKUP,Y TABLE ADDR 039A 8040 0000 0614 COPY 0(Y),A LENGHT OF COMMAND I WORDS 039B 0002 0615 ADD A,A IN BYTES 039C 8F6D 038A 0616 SUB  NC,A 039D 13DD 03BB 0617 JLT A,LKP9 TOO LONG 0000039E 0618 LKP2 EQU $ 039E 4900  0619 COPY =0,Q 0000039F 0620 LKP3 EQU $ 039F A2CE 03EE 0621 COPY =SBUF,X  ADDR OF COMMAND 03A0 0E25 0622 SBIT BY:,S 03A1 430A 0623 XNX Q 03A2 8042 0002 0624 COPY 2(Y),A CHAR FROM TABLE 03A3 0E27 0625 RBIT BY:,S 03A4 6028 0626  EXCH X,Y 03A5 87C9 03EF 0627 COPY A,T1 03A6 0E25 0628 SBIT BY:,S 03A7 430A 0629 XNX Q 03A8 8040 0000 0630 COPY 0(Y),A CHAR FROM INPUT 03A9 0E27 0631 RBIT BY:,S 03AA 6020 0632 COPY X,Y ADDR IN TABLE 03AB 8FC3 03EF 0633 SUB T1,A  03AC 11C9 03B6 0634 JNE A,LKP7 NO MATCH 03AD 4B01 0635 ADD =1,Q NEXT CHAR 03AE FB5B 038A 0636 CSK Q,NC SEE IF DONE 03AF 9E6F 039F 0637 JMP LKP3 NOT DONE 03B0 0000 0638 NOP 03B1 A366 0398 0639 COPY *LOOKUP,X 03B2 A080 0000 0640 COPY  0(X),X LENGTH OF ENTRY 03B3 A0C1 0001 0641 COPY 1(Y,X),X ADDR OF PROCESSOR 03B4 0900 0642 COPY =0,A 03B5 9E86 03BC 0643 JMP LKP10 03B6 A361 0398 0645 LKP7 COPY *LOOKUP,X   ADDR OF TABLE 03B7 E880 0000 0646 ADD 0(X),Y BUMP TO NEXT ENTRY 03B8 6B01 0647 ADD  =1,Y 03B9 8041 0001 0648 COPY 1(Y),A 03BA 11A3 039E 0649 JNE A,LKP2 NOT AT END OF TABLE 03BB 0901 0650 LKP9 COPY =1,A NOT FOUND 1PAGE 0025 MACRO (F300) PATCH - PATCH UTILITY - 93656-12-E710 1982/04/21 13:58:36.00 CARTOS VERSION 03BC DE5B 0398 0652 LKP10 IMS LOOKUP 03BD 9F5A 0398 0653 JMP *LOOKUP 03BE 0E0D 0655 MSG ENT MESSAGE ROUTINE 03BF A37E 03BE 0656 COPY  *MSG,X ADDR OF MESSAGE 03C0 8080 0000 0657 COPY 0(X),A LENGTH 03C1 868C 03CE 0658 COPY A,MESIOB+IO:BCT 03C2 2B01 0659 ADD =1,X ADDR OF TEXT 03C3 A68B 03CF 0660 COPY X,MESIOB+IO:BUF 03C4 1A36 0661 I:IO MESIOB WRITE MESSAGE 03C5 0000 03C6 03CA 0661+ 03C7 0000 0662 NOP 03C8 DE75 03BE 0663 IMS MSG 03C9 9F74 03BE 0664 JMP *MSG 03CA 0000 0666 MESIOB WRITE: 'UC',FA:,,,,ER: 03CA 5543 0666+ 03CB 0000 0666+ 03CC 0000 0666+ 03CD 4011 0666+ 03CE 0000 0666+ 03CF 0000 0666+ 03D2 0000 0666+ 03D3 AB11 0666+ 000003D4  0668 ER1 EQU $ 03D4 BE69 03BE 0669 JST MSG INVALID FILE NAME 03D5 0408 0670  WORD ERR1 03D6 9F99 03F0 0671 JMP EXITONLY 000003D7 0673 ER2 EQU $ 03D7 BE66 03BE 0674 JST MSG FILE CONNECT FAILURE 03D8 0412 0675 WORD ERR2 03D9 9F96 03F0 0676 JMP EXITONLY 000003DA 0678 ER3 EQU $ 03DA BE63 03BE 0679 JST MSG  FILE OPENING FAILURE 03DB 041E 0680 WORD ERR3 03DC 9F93 03F0 0681 JMP EXITONLY 000003DD 0683 ER4 EQU $ 03DD 4786 0684 COPYE WP,AQ RESTORE WRITE POINTER 03DE FC9A 0079  03DF 4787 0685 COPYE AQ,FP 03E0 FC96 0077 03E1 0924 0686 IO WRITEOF,EXITONLY POSITION THERE 03E2 878E 03F1 0686+ 03E3 1A36 0686+ 03E4 0000 03E5 006F 0686+ 03E6 9F89 03F0 0686+ 03E7 0900 0687 COPY:M =0,A,BCT RESET BYTE COUNT 03E8 8789 03F2 0687+ 1PAGE 0026 MACRO (F300) PATCH - PATCH UTILITY - 93656-12-E710 1982/04/21 13:58:39.00 CARTOS VERSION 03E9 9F89 03F3 0688 JMP END20 GO PUT END BACK  000003EA 0690 ER5 EQU $ 03EA BE53 03BE 0691 JST MSG NOT BINARY FILE 03EB 042A  0692 WORD ERR5 03EC 9F83 03F0 0693 JMP EXITONLY 0009 0695 LPOOL 03ED 00B8 BUFF 03EE 004F SBUF 03EF 007B T1 03F0 02F0 EXITONLY 03F1 0072 FC 03F2 0073 BCT 03F3 02DC END20 03F4 03F5 03F6 000E 0697 MES0 LNM MES1 03F7 2050 0698 BYTE ' PATCH (' 03F8 4154 03F9 4348 03FA 2028 03FB 45373130 0699 DOUBLE REV 03FD 2920 0700 BYTE ') ' 000003FE 0701 MES1 EQU   $ 03FE 0012 0702 ERR0 LNM ERR1 03FF 2049 0703 BYTE ' INVALID HEX VALUE' 0400 4E56 0401 414C 0402 4944 0403 2048 0404 4558 0405 2056 0406 414C 0407 5545 0408 0012 0704 ERR1 LNM ERR2 0409 2049  0705 BYTE ' INVALID FILE NAME' 040A 4E56 040B 414C 040C 4944 040D 2046 040E 494C 040F 4520 0410 4E41  0411 4D45 0412 0016 0706 ERR2 LNM ERR3 0413 2046 0707 BYTE ' FILE CONNECT FAILURE' 0414 494C 0415 4520 0416 434F 0417 4E4E 0418 4543 0419 5420 1PAGE 0027 MACRO (F300) PATCH - PATCH UTILITY - 93656-12-E710 1982/04/21 13:58:39.75 CARTOS VERSION 041A 4641 041B 494C 041C 5552 041D 4520 041E 0016 0708 ERR3 LNM ERR5 041F 2046 0709 BYTE ' FILE OPENING FAILURE' 0420 494C 0421 4520 0422 4F50 0423 454E 0424 494E 0425 4720 0426 4641 0427 494C 0428 5552 0429 4520 042A 0012 0710 ERR5 LNM ERR6 042B 204E 0711 BYTE ' NOT BINARY FILE?' 042C 4F54 042D 2042 042E 494E 042F 4152 0430 5920 0431 4649 0432 4C45 0433 3F20 0434 0036  0712 ERR6 LNM ERR12 0435 2050 0713 BYTE ' PATCH NEEDS AORG OR RORG COMMAND BEFORE DATA COMMAND' 0436 4154 0437 4348 0438 204E 0439 4545 043A 4453 043B 2041 043C 4F52 043D 4720 043E 4F52 043F 2052 0440 4F52 0441 4720 0442 434F 0443 4D4D 0444 414E 0445 4420 0446 4245 0447 464F 0448 5245 0449 2044 044A 4154 044B 4120 044C 434F  044D 4D4D 044E 414E 044F 4420 1PAGE 0028 MACRO (F300) PATCH - PATCH UTILITY - 93656-12-E710 1982/04/21 13:58:40.25 CARTOS VERSION 0450 0010 0714 ERR12 LNM ERR13 0451 2049 0715 BYTE ' INVALID COMMAND' 0452 4E56 0453 414C 0454 4944 0455 2043 0456 4F4D 0457 4D41 0458 4E44 00000459 0716 ERR13 EQU $ 0000 0717 LPOOL 0459 0000 0718 CIBUF: RES 64,0 COMMAND LINE BUFFER 0719 END 0000 ERRORS (0000/0000) 0000 WARNINGS (0000/0000) 1PAGE 0029 MACRO (F300) 1982/04/21 13:58:40.75 SI = DH01.CARTOSPATCH.ASM SO = DH01.CARTOSPATCH.OBJ LO = DH01.CARTOSPATCH.LST **** GRAND-TOTALS **** 0000 ERRORS (0000/0000) 0000 WARNINGS (0000/0000) 1PAGE 0001 PATCH - PATCH UTILITY - 93656-12-E710 CNC (E600) 82/04/21 13:58:44 X 0000 CLEANUP 0019 0037 N 0054 CLEANUP: 0049 0036 CLEANUPP 0056 0041 DBGENTRY 0066 X 0000 DEBUGC 0017 0046 0046 DEBUGP 0042 U 0000 E:XXXX 0008 0022 EDB 0004 0068 0038 EMONE 0043 0062 0025 ERB 0006 0022 X 0000 G:Z 0016 0034 N 0064 JMPDEBUG 0051 U 0000 MAC  0004 0005 0006 0007 0008 0003 OLDOPS 0009 U 0000 ON 0005 N 0060 POSTMTEM 0052 X 0000 R:HIGH 0018 0030 N 0057 RESTART: 0050 N 0027 STARTUP 0015 0026* 0059 0026 TDB 0007 0022 U 0000 USERCOMM 0005 N 0020 UTILENV 0014 0012 UTILITY: 0013 U 0000 X1 0004 0005 0006 0007 0008 00068 SOURCE LINES 1PAGE 0001 PATCH - PATCH UTILITY - 93656-12-E710 CNC (E600) 82/04/21 13:58:44 U 000 0 FIB 0089 U 0000 GFN 0090 U 0000 IOB 0092 U 0000 ISM 0091 U 0000 MAC  0088 0089 0090 0091 0092 0093 0094 U 0000 N 0088 0087 OPT 0095 U 0000 SYSCOMMO 0088 U 0000 X1 0088 0089 0090 0091 0092 0093 0094 U 0000 X:COMMON 0093 U 0000 X:IOERR 0094 00029 SOURCE LINES 1PAGE 0001 PATCH - PATCH UTILITY - 93656-12-E710 CNC (E600) 82/04/21 13:58:49 U 0000 ABNORMAL 0516 0237 ACT 0446 ADAT10 0406 0456 0434 ADAT8 0429 0412 ADATA 0174 0414 ADATA1 0451 0425 ADATA2 0432 0202 ADATTC 0413 0475 AEND 0182 0205 AENDTC 0478  0392 AORG 0170 0394 AORG1 0410 0200 AORGTC 0393 0403 BADINPUT 0398 0423 0431 0458 0467 0470 0458 BADJ 0477 0482 0235 BCT 0318* 0368* 0418 0525 0530* 0687* 0221 BP  0374* 0524 BTB 0396 0417 0465 0496 0503 0539 0541 0236 BUF 0319* 0440 0526 0607*  0253 BUFF 0236 0319 0321 0324 0607 U 0000 BY: 0441 0444 0493 0495 0527 0529 0622 0625 0628 0631 0233 CFI 0718 CIBUF: 0160 U 0000 CKW:GF 0146 U 0000 CKW:IS 0151 U 0000 CL:  0193 U 0000 CLASS:FM 0291 N 0509 CLEANUP 0156 0193 CLOZFC 0510 0514 0167 CMDTBL 0380 0243 CNT 0369* 0426* 0436 U 0000 CO: 0188 U 0000 CON: 0188 0188 CONNECT 0265 0519 DATE 0488 0128 DBLADD U 0000 DC: 0189 0189 DSCONECT 0511 0515 0168  E 0136 E:GFN 0132 E:ISM 0487 END 0180 0484 END05 0479 0490 END10 0499  0501 END20 0688 0225 ENDTC 0323* 0331 0485* 0502 0668 ER1 0270 0278 0289 0295 0269 ER1J 0281 0283 0292 0299 0673 ER2 0303 0678 ER3 0309 0683 ER4 0337 0390 0608* 0337 ER4J 0373 0390 ER4K 0377 0690 ER5 0335 1PAGE 0002 PATCH - PATCH UTILITY - 93656-12-E710 CNC (E600) 82/04/21 13:58:50 U 0000 ER: 0189 0193 0245* 0247* 0249* 0252* 0666* 0702 ERR0 0405 0704 ERR1 0670 0702 0714 ERR12 0387 0712 0716 ERR13 0714 0706 ERR2 0675 0704 0708 ERR3 0680 0706 0710 ERR5 0692 0708 0712 ERR6 0455 0710 0508 EXIT 0311* 0320* 0513 EXITONLY 0511* 0671 0676 0681 0686* 0693 U 0000 FA: 0252* 0666* 0234 FC 0117* 0306* U 0000 FI:CLAS 0290 U 0000 FI:FLG 0301 U 0000 FI:TYPE 0293 0223 FIB 0287 0290 0293 0300 0301 U 0000 FIV:DIR 0294 0240 FP 0233 0315 0316* 0328 0329* 0685* U 0000 FU: 0190 0192 0193 N 0158 G:Z 0155 0146 GF:CKW U 0000 GF:DFUN  0137 U 0000 GF:DUN 0266 0271 U 0000 GF:FBUF 0215 0223 U 0000 GF:ILUN 0284 0151 GF:ISCKW  IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII  IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII! IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII" IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII# IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII$ IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIe820421175315820421175315820421175503e6820421175315820421175315820422103658e820421175315820421175315820421175315e% 820421175315820421175315820421175315820421175315820421175315820421175315e'Ma8203191152272582031911523125820422103531e+d 8204211352470082042113585150820422103603e 8111261410455082042113584100820422103612 e*u8203191156512582031911573450820422103625 e.8204211356167582042113561750820422103633&  e/8201291747167582012917471800820422103645 e0)8111261441242582031911573550820422103654' ( . CARTOSPATCHASMCARTOSPATCHLSTCARTOSPATCHOBJ PATCH SYS CPATCH:ASM JCL CPATCH:LINKJCL CARTOSPATCHMAP 0148 GF:ISM 0144 GF:NAME 0145 GF:PASS U 0000 GF:PBUF 0215 0223 U 0000 GF:SIZ 0142 0212 GFF:DIRB 0280 0210 GFF:FNB 0272 0213 GFF:JLUB 0282 0211 GFF:SEB 0274 U 0000 GFF:WC  0298 U 0000 GFN 0215 0215 0215 0223 0223 0266 0267 0271 0284 0141 GFN:PL 0544 GHV  0397 0422 0430 0466 0469 0476 0481 0548 GHV10 0588 0560 GHV30 0550 0565 GHV40 0552 0572 GHV50 0554 0578 GHV60 0556 0586 GHV90 0564 0571 0577 0589 GHVERROR 0546 0562 0567 0574 0580 0228 HAVEORG 0395* 0415 0462 0593 HEX 0545 0561 0566 0573 0579 06) 02 HEX10 0596 0218 HF 0597 0219 HV 0600 U 0000 IO 0116 U 0000 IO:ACT  0345 1PAGE 0003 PATCH - PATCH UTILITY - 93656-12-E710 CNC (E600) 82/04/21 13:58:50 U 0000 IO:BCT 0658 U 0000 IO:BUF 0660 U 0000 IO:DUN 0271 U 0000 IO:FC 0265 0286 U 0000 IO:FIB 0287 0300 U 0000 IO:FOP 0307 U 0000 IO:LUN 0284 0230 IOB 0118 0265 0271 0284 0286 0287 0288 0300 0302  0307 0308 U 0000 IS:BC 0161 U 0000 IS:BP 0221 U 0000 IS:HF 0218 U 0000 IS:HV 0219  U 0000 IS:NC 0217 U 0000 IS:SB 0220 U 0000 IS:TC 0216 U 0000 IS:UB 0160 U 0000 ISMPL 0160 0161 0215* 0216 0217 0218 0219 0220 0221 0264 0372 0375 0594 0652 LKP10 0643 0618 LKP2 0649 0620 LKP3 0637 0645 LKP7 0634 0650 LKP9 0617 U 0000 LNM  0111 0611 LOOKUP 0379* 0613 0639 0645 0652* 0653 0231 LUN 0697 MES0 0257 0701 MES1  0697 0666 MESIOB 0658 0660 0661 0655 MSG 0256* 0386* 0404* 0454* 0656 0663* 0664 0669* 0674* 0679* 0691* 0217 NC 0376 0595 0616 0636 0258 NOPPER 0263* 0262 NOPRMT 0259 0453 NORG 0416 0463 U 0000 NORMAL 0512 0207 NOTETC 0518 U 0000 OP: 0192 U 0000 OPBYT: 0197 0192 OPENFC 0306 U 0000 OPRAN: 0197 U 0000 OPRW: 0197 0251 P3SIZE 0249* 0297 PAT1 0273 0367 PAT10 0383 0388 0385 PAT12 0381 0279 PAT1A 0275  0285 PAT1B 0277 0305 PAT2 0296 0340 PAT9 0333 0334 N 0255 PATCH 0155 0164  0246 PCHARS 0245* 0248 PCHARS2 0247* 0250 PCHARS3 0249* 0251 0522 PERSON 0252*  0518 PMSG 0348 0351* 0356 0491 0521 1PAGE 0004 PATCH - PATCH UTILITY - 93656-12-E710 CNC (E600) 82/04/21 13:58:51 0521 PMSGBLEN 0346 0517 PMSGSZ 0353* 0498 0520 PMSGTLEN 0354 0361 0521 U 0000 PO:  0191 0196 0245 PROMPT 0370 0247 PROMPT2 0260 0249 PROMPT3 0341 0122 R:GATD 0197 RANDOM 0307 0449 RDATA 0176 0203 RDATTC 0450 U 0000 RE: 0194 0191 READEOF 0311 0190 READFIB 0286 0252 READID 0343 0345 0194 READUF 0320 0480 REND 0184 0206 RENDTC 0483 U 0000 REOF: 0191 0461 RES 0178 0204 RESTC 0464 0108 REV 0699 U 0000 RIB: 0190 0408 RORG 0172 0201 RORGTC 0409 0220 SBUF  0621 0238 ST N 0157 START: 0155 0242 T1 0418* 0435 0627* 0633 0359 TAILOOP 0364 0216 TC 0276 0428 0601 U 0000 UF: 0194 0195 0227 VALUE 0547* 0557 0563 0568 0576 0581* 0585 0587* U 0000 WEOF: 0196 0241 WP 0330* 0684 U 0000 WP: 0245* 0247* 0249* *  U 0000 WR: 0195 0606 WRF 0400 0445 0472 0506 0196 WRITEOF 0686 0195 WRITEUF  0608 0534 WTB 0399 0420 0427 0468 0471 0505 0226 XEQ 0324* 0486* 0504 00622 SOURCE LINES  0518 PMSG 0348 0351* 0356 0491 0521 1PAGE 0004 PATCH - PATCH UTILITY - 93656-12-E710 CNC (E600) 82/04/21 13:58:51 0521 PMSGBLEN 0346 0517 PMSGSZ 0353* 0498 0520 PMSGTLEN 0354 0361 0521 U 0000 PO: JPOSTMTEMJMPDEBUGRESTART:JCLEANUP:STARTUP UTILENV O0SEGMENTBLANK UTILITY:o =KCLEANUP R:HIGH G:Z MDEBUGC NQDB: SMD: SDB: NMDB: R:TDBL im MACRO (F300) @iglllll     k$#%,)gp Ptz1;uttigd3gd,gd4gd7iO0SEGMENTBLANK oim MACRO (F300) @JCLEANUP G:Z START: JPATCH O0SEGMENTBLANK oim MACRO (F300) @m *** CARTOS PATCH UTILImTY - REVISION E710 ***gg PԟYAORG RORG ADATA RDATA RES END AEND REND (3>E=IZ[`>EcSIw }CI@  CI@ PAT.. CI@  PLEASE ENTER YOUR NAME... CI@Pg6 yzI @ =3 A6Z6ÃG/ 646Շ 3͂Ӈ6o JQLŞ ć 6o 0 6o #6oH& w Gl  6o H& w GWGW ZYtIsr 58:o[]\kl66 +*8'+H B %L *+T' N6}zIDIH j6Pg7|VJ ߮#  t áQ\) `CyX@y X%'# b4zXn?UM{ xQ3 vvusrr#  n j *-  I" @%'KwRg6o6ozه6oԇ6o zm**** PATCHE D (YYMMDDHHMMSSQQ) BY ,%'߇# rtkl@1@Ps @yXm@k# fdz,+ ,-,*,/ # X ˥TC@N G Hӕ SA GǏ[ # DIEÇQA Å# JmMNI݇6 36o #  ~@mI%C  B'`(%C @'` K [of akA  [Z ~+6ut UC@ifc GG $6o S*O{rs PATCH (E710 )  INVALID HEX VALUE INVALID FILE NAME FIL E CONNECT FAILURE  FIL E OPENING FAILURE  NOT BINARY FILE? 6 PATCH N EEDS AORG OR RORG COMMAN D BEFORE DATA COMMAND  INVALID COMMAND@+ / 646Շ 3͂Ӈ6o JQLŞ ć 6o 0 6o #6oH& w Gl  6o H& w GWGW ZYtIsr 58:o[]\OVicEdDanoH3 PԟAORG RORG ADATA RDATA RES END AEND  REND ({SICI@  CI@ PAT.. CI@ PLEASE ENTER YOUR NAME... CI@P[[>6 yz @ ={A6Z6ÃG/646Շ 3͂Ӈ6JQLŞ ć 6 0 6 #6H& Gl  6H& GWGW ZY%}")266+*8'+H B %L *+T' N6zDHQj6g7HG ߮# F t áQ\)`CyX@yX%'#  b|zXxQ3 vvusrr# n j *-QI" @%'KwR66zه6ԇ6zm**** PATCHED (YYMMDDHHMMSSQQ) BY ,%'߇# @1@P @yXm@k# fdz,+,-,*,/ # X˥TC@N GHӕ SA GǏ[ # DEÇQA Å# ݇6 36#  ~@mI%C B'`(%C @'` K[of akA [Z ~+6ut UC@iPfZcfGG $6 Sr8$ PATCH (E710)  INVALID HEX VALUE INVALID FILE NAME FILE CONNECT FAILURE  FILE OPENING FAILURE  NOT BINARY FILE? 6 PATCH NEEDS AORG OR RORG COMMAND BEFORE DATA COMMAND  INVALID COMMAND@@@BPE`L`P UY_ `dcelip PHz1;}) sltw}ⅾSYMPLE (F003) - for Help, enter H ƻpP0I@6A0@'PJNƦ ẹ5Y¤A@  NȢ+4 `’@ B Duo6CpA志⛣5HgQ# D5daddp`P\?0VV3=1dH ̆qK恿ƎBuB % ={@x@`@@v Pl = Ah Qf Xd Yb K] L[ SY DW CU w00 &f5I# D# Dv e >`\ XW VUc   SGNBG,1   SYMPLE COMMAND SUMMARY ALT/ALP/ALB - Lists to UC/LO/Both ADP/ADF/ADM/ADZ - Dump device is PT/Floppy/MT/Mini-Floppy - NOT Cartos Ba[,b[,c[,d]]] - Break at a (or b or c or d) An iteration count (;n) may follow a,b,c and d. Ca,b,c - Copy contents of locations a-b to c onwards Da,b[,ex] - Dump locations a-b with execution address :80 [or ex] Fa,b,c - Fill locati, ons a-b with value c G[g[n]] - Display G0 to GZ, [ or Gg only [ or set Gg to n ]] I[S]a - Inspect [Symbolically] location a J[p[,a[,b[,c[,d]]]] Jump to user P, or p, optionally breaking at a,b,c, or d Ka,b,c - Compare contents of locations a-b with c onwards L[S]a,b - List [Symbolically] contents of locations a to b L[S][V]a - List hex [or Symbolic] page from [or in Vicinity of] a LOAD or V - LOAD or Verify previously dumped program - NOT Cartos N and P - Break at Next location or Previous one R[r[n]] - Display User context, [ or Rr only [ or set Rr to n ]] S[S]a,b,c[,R] - Search for c in locations a-b, [ with References to c ]  [ with Symbolic display ] Y - Display SYMPLE memory limits Za,b,c,d - List chain from a, b words per entry, using c as link- word offset, d words output per line ĿĞIƻ }  ? I˰ H{ 1Zǧ1Q*i昞Q$lasDD@I ;RjHކ ,mO cƗq ǿÏ@gË1Ŧz+)ǂ #N /N %vu$ ~{zl &3S/ b܆ʿt G6ˎl. OežI ,(ٿ߂AQAƳ Gd؃ІVLKޥޟ GޝH?Tyޖo GE7rވކsO z@wi St Y VqB@u Xr 0h  XG  u *  ºǽǻƶ ,dA `DM@ q @ @KqK/@H,@K@+ƃF MRAI@AMM)R2ޅ{Pxɂv 2"p2kbhz򾩂c1i2A_ƟI ,QHƚ , RI -HԢ3ʿ҃H@IQĈA˾8Z ,9y1I1z½Fz &u$epuƠ@ Fb@⑾ޏy@|@QE %`w 3 hH}So ʿ˞{ڟž%pudead^T\zZZAW@AN @ ǂ@@QþH`@àQA]GWyߚZ䃌.xk@@`b    6ư° ,QIƬ­ ,ƪ¨ ,Qdƣœ@Aƞޒޖ Jgމo g } P B P Bpo~z B ق P jmT & bQ{ =vwHjTyH|HwffdI#`C 1N&#ȂV#U RPUOaKY GGCX7{0|3{T B X 7 6I|}Iƕ 1Aw + -rr @Aj1{Ixz P R G $ '@JSM JMM `N1^]_d\ZZΞ˃SNq@rȞþ @DCE=??I %C @'BUt@ʩqpAPXSQLYKDC Z A 9 0u@po     / &}HMO}gyusH .M&{xf3AK1a1K .ѾBITY1)̞̿e . IJ @ ! * ; &;%#aH` <5¿*xCkvu *z{`@yS3 h" & :  bl 7f{`@{xyæQArrNRkiBr?Jr?C ,=\Iiu D  * & SǃA@̃A@w†t`@bh.cz % *s- `@N`@I+htL @DC` ?Q A֐Q ?x M  V3S` np     @6 *Q@6 >I@6D@6B@6 (A@6 K=@6 X9@6 Y5 )3? ;fII 0"II q . D%'uI q , L@?6C ? R A@6 O ?@/6MSSOVCY??éNXC w@y@> =:89z - s =x S(9 i㄀A߃eLZwu uxxkn@A` BkkQA1i}VI       ymM.8܀P@KDևBOA@̃=6@6R6@o6@?@6@6C 6@Ƿ/.@6@6 t 6@ y6@@̢1A@o6@_6@O6@6@6 S_@@o6@?H  wu@6‹@@6‹@@6rk @@6I@6D6@^\c 6@y@6@@6Br)@.@K 6+F. 6@"c }CzDx z B|3  @uupqpy| p{ "Ɣp(%'N+p( z a „₟l,,×LT% b ' P| +  ~  Hx F 8I| <H Hz Cr|lw Li2gAonSks  0y `@1I{ f{yk wpP@)p p:CDfABa_r@XCZ Q^ C  , 0 5 9 > Z l s l 4 k  = ):QA(Ã7  y@6YH@QJs@qn ?H@QB hg >bbH@QJZ@XU H@QB PO (J@6HHF X Y )@|@l;rƨ@5¢L -.@|, ('% K X Y\@| ʐ@\@Lj $  lҿ0ξĿɿž ,.ý L @<Ƿ A OO@ @,ǫ @NqB)5 }|.ͿH@Q1H@Q1w ¿ Aw  _ w -xuFĞZl Simk Wh ?H@QB߾ J_߻  V *Sy@PROsr /H =|Il@H@Q@? : 7 324@zJ/vuC '&po g   yyxv  pAmljit ^ Z A xPp\  Z f QA߃ ϾÂڿٞҞ ܾH -Tɞz P_և֟փ ɞ_ ` ( W žiöF{¤@wut c@K|x çLP uw )FLSPTF  & x3~)%'+ts/C <ƎQAŒ%C @'އp{y挢y%'t pn p IjQKƑƗéLPLBLBLTp UC )z* LO 0z1 `CI A ˆ%C @' ApBd FµQ` O v ؿsI ,p@ 9 ueeIDIVpu  p@ILmREV:00  Py D ǿt P T Bnjgg P F M Z W]ZoFDW TV@P LO@C ~ }@Ai C I O P`]6[BkhfBRO6sBS6lFÂ;ne ~ Ɗ抟z ⇢ƒzV@@UCZ9 d8Nam>@  @ n k LIP HIP  IP PIP % > U3# JkB AC B c A a 8  L@ .% E "e  Ntf L, 6 6.  'N *k mm d  d d  d  N     )' *tG %g '>Ea'k d  d N    8  8  k PIP LIP  IP HIP !M.M M II()()()%ED%N()*( a  >@ N V\\N\6\6\k d d@ d d@NN  @  @aa)>@>Bkk*t%*k\NT\%1T\E0nS\5LnS& L&\)P&M'8,&MT&=T&}5&mHVN&Nc&1c&c&T&F&;F&]@ %HbbL.E0& L& LN d d|mF0EBE5E3--E2E1@@@UCZ9 d8Nam>@  @ n k LIP HIP  IP PIP % > U3# JkB AC B c A a 8  L@ .% E "e  Ntf L, 6 6/ CARTOS PATCH UTILITY ASSEMBLE JCL - 84-93656-72-E700 / / JANUARY 1982 / / /  THIS .JCL ASSUMES ALL FILES, INCLUDING MACRO FILES, / ARE ON UF. / / CARTOSPATCH.ASM CONTAINS A GFN:PL MACRO DEFINITION - THIS / COULD PRODUCE CONFLICT WHEN ONE IS SUPPLIED WITH GFN.MAC / as X1=/ron/cartos/bdfs/ MACRO CARTOSPATCH(L=,P=57) AS X2=LO,LO=CARTOSPATCH.LST CNC CARTOSPATCH(P=57*108) AS LO=X2 13561750820422103632/ CARTOS PATCH UTILITY LINK JCL - 84-93656-73-E700 / / JANUARY 1982 / / THIS .JCL FILE ASSUMES ALL FILES ARE ON UF / / / AS X1=LO,LO=CARTOSPATCH.MAP LINK PATCH.SYS=CARTOSPATCH(AB=40,P=57*108)+ DEBUGC(UL) PRINT CARTOSPATCH.MAP AS LO=X1 68204211753158204211753158204221036391PAGE 0001 MULTI-TASKING LINKER (F0) 1982/03/19 11:56:15 FILE USAGE SUMMARY DH.PATCHC.BIN=DH.CARTOSPATCH.OBJ(ABSOLUTE=40,PAGESIZE=57*108)+ 1PAGE 0002 MULTI-TASKING LINKER (F0,EB) 1982/03/19 11:56:19 FILE USAGE SUMMARY NOTE: *** CARTOS PATCH UTILITY - REVISION E710 *** DH.SYMPLEC.LIB(UNCONDITIONAL) NOTE: *** SYMPLE - REV F003 *** NOTE: *** SYMPLEC:IO(CARTOS-IO-INTERFACE) - REV F000 *** NOTE: *** SYMPLE:TAB - REV E002 *** 1PAGE 0003 MULTI-TASKING LINKER (F0,EB,E5,E3,--,E2) 1982/03/19 11:57:24 ALL SYMBOLS S:LDV UNDEFINED, REFERENCED IN DEBUG AT 0E00+0000+007D(SYMPLE) THE TRANSFER ADDR/ ESS IS 0040(UTILITY:) ABSOLUTE SYMBOLS (0000 - FFFE) 0010-CLEANUP: 0012-RESTART: 0014-POSTMTEM 0017-JMPDEBUG MEMORY ABSOLUTE (0040 - 003F) 0040-R:LOW 16E0-R:HIGH SEGMENT UTILITY: (0040 - 007C) ABSOLUTE - RAM, SHAREABLE (0040 - 007C) 0040-UTILENV 006C-STARTUP SEGMENT SYMPLE (007D - 1247) ABSOLUTE - RAM, SHAREABLE (007D - 1247) 007D-DEBUG 009D-RORL 0733-S:NLIN 079C-DEVID 0E02-S:OUT 0F13-SYMPLEIO 0FDC-S:XNX 007D-DEBUG4 009D-S:RORL 0753-S:OPHGR 0B26-S:SPACE 0EBD-S:PATCH 0F44-SYMPLPOP 1248-S:ENDSYM 007D-DEBUGC 009E-S:BPENT 078E-S:OPHSP 0B37-S:HEXOUT 0F11-S:IOINIT 0F5A-S:TABL 1248-S:ENDTAB 007D-SYMPLE 00DA-S:PREG 0797-S:O1C 0DED-S:KBIN SEGMENT BLANK (1248 - 16E0) ABSOLUTE - RAM (1248 - 16E0) 1248-G:Z 1248-START: 1400-PATCH 1529-CLEANUP C H A I N S R:TDBL 0060(UTILITY:) MDB: 0000(0SEGMENT) SDB: 0000(0SEGMENT) SMD: 0000(0SEGMENT) QDB: 0000(0SEGMENT) MISSING: S:LDV, SRF:ER 1 WARNING GE SUMMARY NOTE: *** CARTOS PATCH UTILITY - REVISION E710 *** DH.SYMPLEC.LIB(UNCONDITIONAL) NOTE: *** SYMPLE - REV F003 *** NOTE: *** SYMPLEC:IO(CARTOS-IO-INTERFACE) - REV F000 *** NOTIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII0 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII1 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII2 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII3 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII4 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII5 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII6 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII7 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII8 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII9 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII: IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII; IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII< IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII= IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII> IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII? IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII@ IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIA IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIB IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIID IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIE IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIF IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIH IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJ IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIK IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIL IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII