'________________________________________________
'
' M I D I T O O L S - S P 4 C E B A R
'________________________________________________
AUTOMATIC_PLAYBACK=0
'"L" LOCAL, "E" EXTERNAL, "B" BOTH
LOCATION$="L"
'ROM ENTRY FILE NUMBER (0-15)
FILE_IN=4
'"P" PLAY, "C" CONVERT, "M" PLAY ONE TRACK AT A TIME, "R" READ
COMMAND$="P"
'OUTPUT FILE (NX MUSIC EXTRACTED FROM MIDI)
FILE_OUT=15
'NEW TO DO
'X FIX SCREEN FLICKERING IN FAST MIDI FILES, CPU ISN'T AT 100% MOST OF THE TIME
' X THAT IS PROBABLY THE PROBLEM, IT IS, THE METER DOEN'T UPDATE FAST ENOUGH
'- LOAD THE MANY TRACKS INTO AN ARRAY (LIVE: NOTES AND VEL)
'- DISPLAY THE ARRAY ON THE SCREEN
'- ADD SOME ENVELOPE MAYBE
'- READ THE SYNTH TYPE OF EACH TRACK FROM THE FILE
'MOST SIGNIFICANT BITS ARE FIRST: DON'T USE PEEKW OR PEEKL
'BUGS
'- IN RUNNING STATUS FILES: KEY IS ALWAYS 2 WHILE CONVERTING: NO KEY UP COMMANDS
'- MAYBE ALL KEY-UP COMMANDS ARE BLOCKED, BUT ONLY THE CONVERTER REALLY NEEDS IT
'- CONVERSION VELOCITIES ARE 0 TOO OFTEN
' - DATA GOES SOMETHING LIKE THIS
' - HANDLE DT=0 BETTER
'
'
'MERGE THE MIDI FILE READER,PLAYER, AND CONVERTER IN ONE PROGRAM FOR EASY DEVELOPMENT
'AFTER ASKING WHAT FILE TO LOAD, ASK WHAT TO DO:
'- READ MIDI
'- PLAY MIDI
'- CONVERT AND SAVE TO LOCATION (ASK LOCATION)
'
'TO DO:
'- WRITE PALETTE DATA INTO THE PALETTE PART OF THE SIMULATED RAM (SEE MEMORY MAP)
' - PUT THE DATA AS DATA IN CODE, FOR LOOP TROUGH IT, DO SOMETHING LIKE: READ X, POKE(A,X)
'- MORE PLAYBACK OPTIONS AFTER CONVERSION
' - JUST ADD THE TRACK COUNTER, SO THAT YOU CAN SEE IF IT LINES UP
' - ADD AN INDEX ARRAY FOR THE CONVERTOR OUTPUT ARRAY: AT WHAT TIMES DO TRACKS START
' - CHANGE SETTINGS BEFORE PLAYBACK: TRANSPOSE, START TIME
' - MAYBE DO THIS WHILE PLAYING WITH THE KEYBOARD
' - SET PLAYBACK TIME
' - HIT R TO REPLAY THE SONG
' - HIT L TO REWRITE MUSIC DATA
' - SKIP TRACKS OR GO BACK (WITH N AND P)
' - MUSIC FILE TRACK PLAYING OPTIONS: ONE AFTER ANOTHER OR AT THE SAME TIME
'- MORE MIDI PLAYBACK OPTIONS
' - SKIP TRACKS OR GO BACK (WITH N AND P)
'- USE MORE MIDI INFORMATION:
' - PLAYBACK SPEED
' - MIDI INSTRUMENT (LIKE DRUMS)
'- PLAY TRACKS PARALLEL (MELODY, BASS, DRUMS, ALL INSTRUMENTS ALL AT ONCE)
'[DONE] MAKE A FILE IMPORTER:
' - [DONE] IMPORT LOCAL OR EXTERNAL FILES, SPECIFY THE FILE NUMBER
'TEST THE ALGORITHM ON MORE MIDI FILES
'- (SOME ARE POLYPHONIC, SOME ARE MORE COMPLEX, MANY TRACKS)
'[DONE] A MESSAGE WHEN THE FILE IS TOO BIG
'ADD A SCANNING OPTION FOR WHEN THE PROGRAM GETS AN INVALID STATUS BYTE (AND GETS LOST)
' - FIRST ASSUME IT'S MIDI: SKIP 2 BYTES NOPE, IT CAN BE ONE BYTE, JUST SCAN
' - IT'LL SCAN FOR BYTES WITH BIT 7 (MSB) TURNED ON, THIS EITHER MEANS:
' - FIRST PART OF A LONG TIME VALUE
' - OR IT MEANS: NEW STATUS BYTE FOUND, ASSUME THIS, ERROR?: ASSUME THE OTHER OPTION
'MAKE IT WORK WITH BIG FILES:
' - IDEA: MAKE A FUNCTION WHICH LOADS VALUES FROM RAM AND SWAPS OUT THE RAM IF NECCESARY
' - LOAD THE FIRST 16KB IN RAM
' - WHEN IT HAS REACHED THE END: LOAD THE SECOND 16KB
' - IT CAN BE UP TO 32KB: THE CONVERSION OUTPUT WILL BE IN ANOTHER DISK
' - USE BOTH THE INTERNAL AND THE EXTERNAL DISK TO GET 2 X 32KB FILE INPUT
'REPLACE ADDRESS VARIABLE I WITH A, I IS TOO COMMON
'MARIO FILE NOT WORKING:
'- [NOPE] MAYBE IT HAS DETECTED A TOO SMALL LENGTH OF A META EVENT (LENGTH HAS VAR LEN QUANTITY)
'- [NOPE] CHECK HEX EDITOR ASCII
'- THE FILE MAY HAVE BEEN CORRUPTED, CHECK WITH ANOTHER MIDI PLAYER
TOUCHSCREEN
DIM GLOBAL TRACKD(31,2)
DIM GLOBAL INDEX(31)
DIM GLOBAL TA(1,16383)
DIM GLOBAL PLAYING(1,3)
DIM GLOBAL VIRTUAL_VOICE(3,31)
'TA: TRACK ATTRIBUTES
'WRITE MAIN PALETTES
DATA 0,12,8,4,0,56,36,16,0,15,11,7,0,44,40,20,0,63,42,21,0,63,42,21,0,63,42,21,0,63,42,21
FOR I=0 TO 31
READ V
POKE $FF00+I,V
NEXT I
'WRITE MAIN CHARACTERS
DATA "00000000000000000000000000000000"
DATA "00181404040C100C00000C1C1C0C080C"
DATA "004812121200000000247E3612000000"
DATA "0024601B12401B1200001E3F363E3F12"
DATA "000830271021170400000E1F1E1F1F04"
DATA "00401132040C11230022753A142A5723"
DATA "00102A021013001D000C1E3A7E773A1D"
DATA "0010040C1800000000081C3C18000000"
DATA "0008160C0800000600040E3C38180C06"
DATA "0030000002060C180000180C0E1E3C18"
DATA "00002012402708120000040A3E3F2C12"
DATA "000018144027040C0000000C3E3F1C0C"
DATA "0000000010040C1800000000081C3C18"
DATA "00000000603F0000000000001E3F0000"
DATA "000000000010040C0000000000081C0C"
DATA "00040B060C1830200002071E3C787020"
DATA "002058110119031E001C3E7F777F3F1E"
DATA "001024040404403F00081C1C1C1C3E3F"
DATA "00205833060C003F001C3E3F1E3C7E3F"
DATA "002058330041031E001C3E3F06273F1E"
DATA "00665501390101030000337F3F070703"
DATA "00605F003801433E001E3F7C3E073F3E"
DATA "00102E001811031E000C1E7C7E773F1E"
DATA "00603903060C0818001E3F0F1E3C3818"
DATA "002058031811031E001C3E3F7E773F1E"
DATA "002058011941031E001C3E3F1F273F1E"
DATA "000000100C100C00000000080C080C00"
DATA "000000100C100C18000000080C083C18"
DATA "000008160C0000060000040E3C180C06"
DATA "000000603F403F000000001E3F3E3F00"
DATA "0000300000060C18000000180C1E3C18"
DATA "00205833060C100C001C3E3F1E0C080C"
DATA "002058191117001E001C3E777F773C1E"
DATA "001020180119113300081C7E7F7F7733"
DATA "006058031811033E001C3E7F7E777F3E"
DATA "002058131010031E001C3E7370763F1E"
DATA "006050101113063C00183C76777F7E3C"
DATA "00605F001C10003F001E3F787C707E3F"
DATA "00605F001C101030001E3F787C707030"
DATA "00205E1C1111031E001C3E7277773F1E"
DATA "00665501191111330000337F7F777733"
DATA "003006040404001E000C1E1C1C1C3C1E"
DATA "001C09010141031E00020F0707273F1E"
DATA "00645B06041010330002377E7C7C7633"
DATA "006050101010003F0000307070707E3F"
DATA "0042450901191133000023777F7F7733"
DATA "00664501111111330000337F7F777733"
DATA "002058111111031E001C3E7777773F1E"
DATA "006058031E101030001C3E7F7E707030"
DATA "002058111111001F001C3E777B7D3E1F"
DATA "0060580306101033001C3E7F7E7C7633"
DATA "00205F001801033E001E3F3C1E077F3E"
DATA "007027040404040C000E3F1C1C1C1C0C"
DATA "006655111111031E0000337777773F1E"
DATA "006655111103060C00003377773F1E0C"
DATA "00665515011931210000336B7F7F7321"
DATA "00640B06001811330002371E3C7E7733"
DATA "0066550B0604040C000033371E1C1C0C"
DATA "006033060C58003F001E3F1E3C387E3F"
DATA "00302E080808001E000C1E3838383C1E"
DATA "0060000000000101000030180C060301"
DATA "003812020202021E00041E0E0E0E3E1E"
DATA "001020183300000000081C7E33000000"
DATA "000000000000603F0000000000001E3F"
FOR J=0 TO 63
READ V$
FOR I=0 TO 15
V1=ASC(MID$(V$,I*2+1,1))-48
V2=ASC(MID$(V$,I*2+2,2))-48
V1=V1+7*(V1>9)
V2=V2+7*(V2>9)
V=V1*16+V2
TRACE V
POKE $8000+I+J*16,V
NEXT I
NEXT J
FONT 0
GLOBAL TYPE,S,V,V0,V1,V2,V3,F,F1,I,CSIZE,TN,TRACKS,TIME,STATUS,KEY,RECENT80,PITCH,VELOCITY,FILE_PART,ADDR_END,CHANNEL_MODE,K$,O$,OPERATION,DIV,TIME_UNIT,AUTOMATIC_PLAYBACK
I=$A000
TYPE=0
CSIZE=0
TN=0
DT=0
TIME=0
KEY=0
STATUS=0
RECENT80=0
TIME_UNIT=10000
FILE_PART=0
CHANNEL_MODE=0
OPERATION=-1
ROT=0
'S E T U P : U S E R I N P U T
IF AUTOMATIC_PLAYBACK THEN
K$=LOCATION$
F=FILE_IN
O$=COMMAND$
F1=FILE_OUT
ELSE
PRINT "DISK:"
PRINT "LOCAL(L)/EXTERNAL(E)/BOTH(B)"
KEYBOARD ON
REPEAT
K$=INKEY$
IF K$="L" OR K$="E" OR K$="B" THEN PRINT K$
WAIT 1
UNTIL K$="L" OR K$="E" OR K$="B"
PRINT ""
INPUT "FILE NUMBER (1-15) ";F
PRINT ""
PRINT "OPERATION:"
PRINT "READ(R)/PLAY(P)"
PRINT "/CONVERT(C)/PLAY"
PRINT "TRACKS MONO(M)"
DO
O$=INKEY$
IF O$="R" OR O$="P" OR O$="C" OR O$="M" THEN
PRINT O$
EXIT
END IF
WAIT 1
LOOP
IF O$="C" THEN
PRINT ""
INPUT "OUTPUT FILE (1-15) ";F1
END IF
KEYBOARD OFF
CLW
END IF
'B A S I C F I L E I N F O A N D H E A D E R
PAL 3
PRINT "MIDI FILE LOADED"
PRINT "DISK: ";
IF K$="L" THEN
PRINT "LOCAL ";
S=SIZE(F)
COPY ROM(F),S TO $A000
ELSE IF K$="E" THEN
PRINT "EXTERNAL ";
FILES
S=FSIZE(F)
'REMOVE THIS SOON!!!!! - I FORGOT :(
'IF S>$4000 THEN S=$4000
LOAD F,$A000,$4000
ELSE IF K$="B" THEN
PRINT "EXT+LOCAL ";
FILES
S=FSIZE(F)
LOAD F,$A000,$4000
END IF
PRINT F
ADDR_END=$A000+S
PRINT "SIZE:",S
PRINT ""
PAL 0
'PRINT HEX$(S)
'PRINT HEX$(ADDR_END)
'HEADER TYPE ASC CODES 4D546864
'PRINT $6468544D=PEEKL($A000)+63
'RETURNS TRUE -> SIX BITS GET LOST
'THESE FLOAT VARIABLES CAN'T STORE 32-BIT VALUES, THEY PROBABLY HAVE A 6-BIT EXPONENT
'DO
'WAIT 60
'LOOP
'R E A D H E A D E R
PRINT "FORMAT:",256*PEEK($A008)+PEEK($A009)
PRINT "TRACKS:",256*PEEK($A00A)+PEEK($A00B)
D=256*PEEK($A00C)+PEEK($A00D)
D1=D\2^15
D2=D MOD 2^15
IF D1=0 THEN
PRINT "DIVISION:",D2
PRINT "TICKS/QUARTER NOTE"
DIV=D2\24
ELSE IF D1=1 THEN
PRINT "DIVISION:",D2\2^8,D2 MOD 2^8
PRINT "F/S AND TICKS/F"
END IF
PRINT ""
CALL TAP_TO_CONTINUE
'I N D E X T H E F I L E
REPEAT
'V=PEEK(I)
'V1=PEEK(I+1)
'V2=PEEK(I+2)
'V3=PEEK(I+3)
CALL RAM_PEEK4(I)
CALL DETERMINE_TYPE
WAIT 1
UNTIL I=ADDR_END
INDEX(TN)=ADDR_END
TRACKS=TN-1
PRINT ""
'D E T E R M I N E B L O C K T Y P E
SUB DETERMINE_TYPE
IF V0=77 AND V1=84 THEN
IF V2=104 AND V3=100 THEN
TYPE=1
PRINT "HEADER: SIZE=";
ADD I,4
CALL DETERMINE_SIZE
ELSE IF V2=114 AND V3=107 THEN
TYPE=2
PRINT "TRACK: SIZE=";
INDEX(TN)=I
INC TN
ADD I,4
CALL DETERMINE_SIZE
END IF
ELSE
I=ADDR_END
END IF
END SUB
'D E T E R M I N E B L O C K S I Z E
SUB DETERMINE_SIZE
'THESE FLOAT VARIABLES CAN'T STORE 32-BIT VALUES
'BUT THE SIZE CAN'T BE 2^32-1, IT WON'T FIT IN NX, SO IT'S FINE
'MSB FIRST, SWAP THAT
'CSIZE=2^24*PEEK(I)+2^16*PEEK(I+1)+2^8*PEEK(I+2)+PEEK(I+3)
CALL RAM_PEEK4(I)
CSIZE=2^24*V0+2^16*V1+2^8*V2+V3
ADD I,4
PRINT CSIZE
'SKIP_CHUNK
I=I+CSIZE
END SUB
CALL TAP_TO_CONTINUE
'DISPLAY STORED INDEX VALUES
PRINT "INDEX:"
FOR I=0 TO 15
V=INDEX(I)
IF V<>0 THEN PRINT HEX$(V),"";
NEXT I
PRINT ""
PRINT ""
CALL TAP_TO_CONTINUE
'T A P T O C O N T I N U E
SUB TAP_TO_CONTINUE
IF AUTOMATIC_PLAYBACK THEN
CLW
EXIT SUB
END IF
PAL 2
PRINT "TAP TO CONTINUE"
PAL 0
WHILE NOT TAP
WAIT 1
WEND
FOR J=0 TO 16
PRINT ""
NEXT J
CLW
END SUB
'R E A D M I D I
IF O$="R" THEN
TIME=0
FOR J=0 TO TRACKS
PAL 2
PRINT "==================="
PRINT "===== TRACK",J,"====="
PRINT "==================="
PRINT HEX$(INDEX(J)+8)
PRINT ""
PAL 0
'BUG MEMORIAL: FORGOT TO OFFSET THE INDEX VALUES
FOR I=INDEX(J)+8 TO INDEX(J+1)-1
'TRACE " "+HEX$(I)
'DETERMINE DELTA TIME
CALL VAR_LEN_QUANTITY
DT=V
'DT2=DT/TIME_UNIT
PRINT "DT=",V
CALL STATUS(I,J,ROT)
'TRACE HEX$(I-$A000)
PVELOCITY=VELOCITY
PPITCH=PITCH
WAIT 1
WHILE NOT TAP
WAIT 1
WEND
PRINT ""
NEXT I
NEXT J
STOP
PAL 2
PRINT ""
PRINT "==================="
PRINT "=== END OF SONG ==="
PRINT "==================="
PAL 0
'P L A Y M I D I S I N G L E T R A C K
ELSE IF O$="M" THEN
O$="P"
TIME=0
FOR J=0 TO TRACKS
'TRACE "TRACK",HEX$(I-$A000)
FOR I=INDEX(J)+8 TO INDEX(J+1)-1
'TRACE "START",HEX$(I-$A000)
'TRACE " "+HEX$(I)
'DETERMINE DELTA TIME
CALL VAR_LEN_QUANTITY
DT=V
'DT2=DT/TIME_UNIT
DT3=DT\DIV
PRINT "DT=",DT
IF DT3>0 THEN WAIT DT3
CLW
'TRACE "TIME ",HEX$(I-$A000)
CALL STATUS(I,J,ROT)
'TRACE HEX$(I-$A000)
PVELOCITY=VELOCITY
PPITCH=PITCH
'TRACE "END ",HEX$(I-$A000)
NEXT I
NEXT J
STOP
PAL 2
PRINT ""
PRINT "==================="
PRINT "=== END OF SONG ==="
PRINT "==================="
PAL 0
'P L A Y M I D I M U L T I T R A C K
'MULTITRACKPLAYER:
ELSE IF O$="P" THEN
'O$="P"
'BUG MEMORIAL: FORGOT TO OFFSET THE INDEX VALUES (AGAIN): FIRST 8 BYTES AREN'T MIDI
'FILL ARRAY WITH FIRST DT AND ADDR OF EACH TRACK
'FIND LOWEST VALUE OF ARRAY, LOAD ITS PARAMETERS, AND ACT AS IF THERE WAS ONE TRACK
'AFTERWARDS, WRITE THE NEW VALUES TO THE ARRAY
T_ZERO=TIMER
FOR J=0 TO TRACKS
I=INDEX(J)+8
CALL VAR_LEN_QUANTITY
'TRACE V,J,HEX$(I-$A000)
DT=V
DT3=DT\DIV
'DT3=0
ADD TRACKD(J,2),DT
TRACKD(J,0)=TIMER-(DT3>=0)*DT3
TRACKD(J,1)=I
'TRACE J,HEX$(I-$A000),TIMER-(DT3>0)*DT3
NEXT J
'WAIT 60000
TIME=0
'FOR J=0 TO TRACKS
J=0
'DO
'FOR I=INDEX(J)+8 TO INDEX(J+1)-1
I=INDEX(J)+8
'IF TRACKD(0,0)=-1 THEN TRACE TRACKD(0,0)
'DETERMINE DELTA TIME
CALL VAR_LEN_QUANTITY
DT=V
DT3=DT\DIV
ADD TRACKD(J,2),DT
TRACKD(J,0)=TIMER-(DT3>0)*DT3
TRACKD(J,1)=I
PRINT "DT=",V
LOCATE 0,11
PRINT "V PI VE TRACK"
LOCATE 0,0
'REPEAT
DO
'TRACE " "+HEX$(I)
'TRACE "START",J,HEX$(I-$A000)
SOONEST=-1
'IF TRACKD(0,0)<>-1 THEN TRACE "T0",TRACKD(0,0)-TIMER
MIDI_TIMER=TIMER*DIV
'FIND THE LOWEST NUMBER, I COULD USE THE "MIN" FUNCTION
FOR I=0 TO TRACKS
IF (SOONEST<0 OR TRACKD(I,0)0 THEN
'IF (SOONEST<0 OR TRACKD(I,2)0 THEN
'NEW TIME VALUE
SOONEST=T_ZERO+TRACKD(I,2)\DIV
J=I
'TRACE TRACKD(I,0),T_ZERO+TRACKD(I,2)\DIV
'OLD TIME VALUE
'SOONEST=TRACKD(I,0)
'JUST PLAY'S TRACK 1 FOR SOME REASON
'SOONEST=TRACKD(I,2)
END IF
'TRACE I,J,SOONEST-TIMER,TRACKD(I,0)-TIMER
NEXT I
IF SOONEST=-1 THEN EXIT
'IF J=0 THEN TRACE "J=0",TIMER,I,TRACKD(0,0)
'TRACE J,SOONEST-TIMER
'WAIT 60
'TRACE J
I=TRACKD(J,1)
'OLD TIME GENERATOR: EVERYTHING HAS BEEN ROUNDED BADLY BEFORE
'TI=TRACKD(J,0)-TIMER
'NEW TIME GENERATOR: IT'S SHARP AND ACCURATE
TI=TRACKD(J,2)\DIV+T_ZERO-TIMER
'TRACE TRACKD(J,0)-TIMER,TRACKD(J,2)\DIV+T_ZERO-TIMER
IF TI>0 THEN WAIT TI
'CLW
BG FILL 0,5 TO 19,10 CHAR 0
BG TINT 0,12 TO 19,15 PAL 0
LOCATE 0,0
PRINT "TRACK:",J," "
'TRACE "LOAD ",J,HEX$(I-$A000)
CALL STATUS(I,J,ROT)
'TRACE "DONE ",J,HEX$(I-$A000)
'TRACE HEX$(I-$A000)
PVELOCITY=VELOCITY
PPITCH=PITCH
INC I
'DETERMINE DELTA TIME
CALL VAR_LEN_QUANTITY
DT=V
DT3=DT\DIV
ADD TRACKD(J,2),DT
TRACKD(J,0)=TIMER-(DT3>0)*DT3
TRACKD(J,1)=I
PRINT "DT=",V," "
IF I>=INDEX(J+1)-1 THEN TRACKD(J,0)=-1
'IF TRACKD(0,0)=-1 THEN TRACE TRACKD(0,0)
'TRACE "SAVE ",J,HEX$(I-$A000)
LOOP
'UNTIL I>=INDEX(J+1)-1
'NEXT I
'LOOP
'NEXT J
STOP
PAL 2
PRINT ""
PRINT "==================="
PRINT "=== END OF SONG ==="
PRINT "==================="
PAL 0
'C O N V E R T M I D I
ELSE IF O$="C" THEN
PRINT "PLEASE WAIT"
PRINT "FINDING SMALLEST DT"
FOR OPERATION=0 TO 1
TIME=0
FOR J=0 TO TRACKS
FOR I=INDEX(J)+8 TO INDEX(J+1)-1
'TRACE " "+HEX$(I)
'DETERMINE DELTA TIME
CALL VAR_LEN_QUANTITY
DT=V
DT2=DT/TIME_UNIT
IF OPERATION=0 AND V>0 THEN TIME_UNIT=MIN(TIME_UNIT,V)
CALL STATUS(I,J,ROT)
'TRACE HEX$(I-$A000)
'IT NEEDS TO KEEP WRITING NOTES WHILE IT'S DOING CONTROLLER THINGS
IF OPERATION=1 THEN
IF STATUS>$7F AND STATUS<$A0 THEN
FOR A=0 TO DT2-1
IF A+TIME<16384 THEN
'TRACE PPITCH,PVELOCITY
'WAIT VBL
TA(0,A+TIME)=PPITCH
TA(1,A+TIME)=PVELOCITY
ELSE
IF CURSOR.Y>3 THEN CLW
LOCATE 0,0
PAL 1
PRINT TIME
PRINT "CONVERTOR"
PRINT "OUT OF MEMORY"
PAL 0
END IF
NEXT A
END IF
ADD TIME,DT2
END IF
PVELOCITY=VELOCITY
PPITCH=PITCH
NEXT I
NEXT J
IF OPERATION=0 THEN
PRINT "SMALLEST DT=",TIME_UNIT
PRINT "CONVERTING..."
PAL 2
INPUT "PRECISION 1,2,4,8...";PRECISION
KEYBOARD OFF
PAL 0
TIME_UNIT=TIME_UNIT*PRECISION
END IF
NEXT OPERATION
'E N C O D E T O N X
STOP
PRINT "ENCODING NX MUSIC..."
'WRITE TRACK DATA IN NX FORMAT
'TRACKS (6144 BYTES)
FILL $A000,$4000
COPY ROM(14),SIZE(14) TO $A000
ADDR=$A180
FOR J=0 TO 63
FOR I=0 TO 31
K=I+32*J
CALL SAVEDATA(ADDR,TA(0,K),0)
INC ADDR
CALL SAVEDATA(ADDR,TA(1,K),0)
'CALL SAVEDATA(ADDR,TSYNTH(J),4)
INC ADDR
'CALL SAVEDATA(ADDR,TA(2,K),0)
'CALL SAVEDATA(ADDR,TA(3,K),4)
INC ADDR
NEXT I
NEXT J
SAVE 15,"MUSIC",$A000,ADDR-$A000
FILL $A000,$4000
PRINT "DONE"
WAIT 1
'PLAY SONG FROM ARRAY
CLW
LOCATE 0,0
PRINT "TIME"
LOCATE 5,0
PRINT "PIT"
LOCATE 9,0
PRINT "VOL"
'PLAY
FOR I=0 TO TIME
LOCATE 0,1
PRINT " "
LOCATE 0,1
IF I>2047 THEN PAL 1
PRINT I
PAL 0
LOCATE 5,1
PRINT TA(0,I)
LOCATE 9,1
PRINT TA(1,I)
VOLUME 0,TA(1,I),
PITCH=TA(0,I)-24
IF PITCH>0 AND PITCH<97 THEN
'OCT -2
PLAY 0,PITCH
PRINT " "
ELSE IF PITCH<1 THEN
PLAY 0,PITCH MOD 12
PAL 1
PRINT "PITCH TOO LOW"
PAL 0
ELSE
PLAY 0,84+PITCH MOD 12
PAL 1
PRINT "PITCH TOO HIGH"
PAL 0
END IF
WAIT 4
'+PRECISION
NEXT I
CLW
PAL 2
PRINT "==================="
PRINT "=== END OF SONG ==="
PRINT "==================="
PAL 0
END IF
'S U B P R O G R A M S
'S T A T U S I N T E R P R E T E R
SUB STATUS(I,TRACKN,ROT)
'INTERPRET THE STATUS BYTE:
'- 00 TO 7F: NOT A STATUS CODE -> RUNNING STATUS (CONTINUE WITH PREVIOUS STATUS)
'- 80 TO EF: MIDI STATUS CODE -> NEXT IS PITCH -> NEXT IS VELOCITY
' - 9N: KEY DOWN
' - 8N: KEY UP
' N=MIDI CHANNEL NUMBER (0 TO 15)
'- F0=SYSEX 1 -> NEXT IS LENGTH: AMOUNT OF BYTES FOLLOWING
'- F7=SYSEX 2 -> NEXT IS LENGTH: AMOUNT OF BYTES FOLLOWING
'- FF=META -> NEXT IS META-CODE -> NEXT IS LENGTH: AMOUNT OF BYTES FOLLOWING
CALL RAM_PEEK(I)
'TRACE "STATS",HEX$(I-$A000)
'WAIT 30
IF V\128=1 THEN
STATUS=V
INC I
IF O$="P" THEN PRINT " "
ELSE
IF O$<>"C" THEN PRINT "RUNNING STATUS"
END IF
'IF V>=$80 AND V<=$89 THEN TRACE "V1"
'IF STATUS>=$80 AND STATUS<=$89 THEN TRACE "K1"
IF O$<>"C" THEN
PAL 3
PRINT "STATUS:",HEX$(STATUS),"";
END IF
'TRACE "SLOAD",HEX$(I-$A000)
'I N T E R P R E T O R
IF STATUS>$7F AND STATUS<$F0 THEN
'TRACE "S",HEX$(I-$A000)
'MIDI
TRACKM=STATUS AND 16
IF O$<>"C" THEN PRINT "MIDI "
IF STATUS<$A0 THEN
IF STATUS<$90 THEN
IF O$<>"C" THEN PRINT "KEY UP "
KEY=1
RECENT80=1
DT2=INT(DT2+0.5)
ELSE IF STATUS<$A0 THEN
IF O$<>"C" THEN PRINT "KEY DOWN "
KEY=2
DT2=INT(DT2+0.49)
END IF
CALL RAM_PEEK(I)
IF O$<>"C" THEN
PAL 0
PRINT "PITCH=",V,"";
END IF
'ROUTE NOT TAKEN AT PROBLEM
'TRACE 2,HEX$(I-$A000)
'MIDI PITCH STARTS AT 0, IT HAS TO BE TRANSPOSED +1
PITCH=V+1
INC I
CALL RAM_PEEK(I)
IF O$<>"C" THEN PRINT "VEL=",V,""
VELOCITY=V\8
IF O$="P" THEN
'VOLUME 0,VELOCITY,
IF KEY=2 THEN
CALL KEYDOWN(ROT,TRACKN,TRACKM,PITCH,VELOCITY)
ELSE IF KEY=1 THEN
CALL KEYUP(TRACKN,TRACKM,PITCH)
END IF
'TRACE 3,HEX$(I-$A000)
ELSE IF O$="C" AND OPERATION=1 THEN
'TRACE HEX$(I),TIME,VELOCITY,-(KEY=1 OR KEY=2 AND RECENT80=0)
IF KEY=2 AND RECENT80=1 THEN
RECENT80=0
END IF
IF KEY=1 OR (KEY=2 AND RECENT80=0) THEN
FOR A=0 TO DT2-1
IF A+TIME<16384 THEN
TA(0,A+TIME)=PPITCH
TA(1,A+TIME)=PVELOCITY
ELSE
IF CURSOR.Y>3 THEN CLW
LOCATE 0,0
PAL 1
PRINT TIME
PRINT "CONVERTOR"
PRINT "OUT OF MEMORY"
PAL 0
END IF
'TRACE A+TIME
NEXT A
END IF
END IF
ELSE IF STATUS<$B0 THEN
'TRACE "A",HEX$(I-$A000)
'A0-AF
IF O$<>"C" THEN
PRINT "AFTERTOUCH"
PAL 0
CALL RAM_PEEK(I)
PRINT "KEY=",V,"";
LOCATE 0,12+VOI
PAL 2
PRINT VOI,PITCH,VELOCITY," "
LOCATE 0,5
PAL 0
END IF
INC I
CALL RAM_PEEK(I)
IF O$<>"C" THEN PRINT "PRESS=",V
ELSE IF STATUS<$C0 THEN
'TRACE "B",HEX$(I-$A000)
'B0-BF
CALL RAM_PEEK(I)
CTRL=V
IF O$<>"C" THEN
PAL 0
PRINT "CONTR=",HEX$(V),"";
END IF
INC I
CALL RAM_PEEK(I)
IF O$<>"C" THEN PRINT "VAL=",V
IF CTRL=$7E THEN
CHANNEL_MODE=0
STOP
ELSE IF CTRL=$7F THEN
CHANNEL_MODE=1
STOP
END IF
ELSE IF STATUS<$E0 THEN
'TRACE "CD",HEX$(I-$A000)
'C0-DF
IF O$<>"C" THEN
PAL 0
CALL RAM_PEEK(I)
PRINT "VAL=",V
END IF
ELSE
'TRACE "E",HEX$(I-$A000)
'V0=PEEK(I)
CALL RAM_PEEK(I)
V0=V
INC I
CALL RAM_PEEK(I)
V0=V0+256*V
IF O$<>"C" THEN
PAL 0
PRINT "VAL=",V
END IF
END IF
ELSE IF STATUS>$EF THEN
'TRACE "F",HEX$(I-$A000)
IF STATUS=$F0 THEN
'SYSEX 1
IF O$<>"C" THEN
PRINT "SYSEX 1"
PAL 0
END IF
CALL VAR_LEN_QUANTITY
IF O$<>"C" THEN PRINT "LENGTH= ",V
LENGTH=V
ADD I,V-1
ELSE IF STATUS=$F7 THEN
'TRACE "F7",HEX$(I-$A000)
'SYSEX 2
IF O$<>"C" THEN
PRINT "SYSEX 2"
PAL 0
END IF
CALL VAR_LEN_QUANTITY
IF O$<>"C" THEN PRINT "LENGTH= ",V
LENGTH=V
ADD I,V-1
ELSE IF STATUS=$FF THEN
'TRACE "FF",HEX$(I-$A000)
'META
IF O$<>"C" THEN
PRINT "META "
PAL 0
END IF
'V=PEEK(I)
CALL RAM_PEEK(I)
IF O$<>"C" THEN
PRINT "META CODE=",HEX$(V)
IF V=$2F THEN
PAL 1
PRINT "END OF TRACK "
PAL 0
END IF
END IF
INC I
CALL VAR_LEN_QUANTITY
IF O$<>"C" THEN PRINT "LENGTH= ",V
LENGTH=V
'TRACE V
ADD I,V-1
'TRACE "F0",HEX$(I-$A000)
END IF
ELSE
'TRACE "R",HEX$(I-$A000)
IF O$<>"C" THEN
PAL 1
PRINT "RUNNING STATUS"
PAL 0
END IF
END IF
'TRACE 4,HEX$(I-$A000)
CALL VOICESELECT(ROT,TRACKN,PITCH,VELOCITY)
END SUB
'K E Y D O W N
SUB KEYDOWN2(ROT,TRACKN,TRACKM,PITCH,VELOCITY)
'REUSE VIRTUAL VOICES
FOR X=0 TO 31
VAR=VIRTUAL_VOICE(1,X)
IF VAR=PITCH OR VAR=0 THEN
T=X
EXIT
END IF
NEXT X
'WRITE SOUND TO VIRTUAL VOICE
VIRTUAL_VOICE(0,T)=TRACKN*16+TRACKM
VIRTUAL_VOICE(1,T)=PITCH
VIRTUAL_VOICE(2,T)=VELOCITY
VIRTUAL_VOICE(3,T)=TIMER
'FIND OLDEST TRACK ON VOICE
OLDEST=0
VOI=0
FOR X=0 TO 3
IF PLAYING(1,X)>OLDEST THEN
OLDEST=PLAYING(1,X)
VOI=X
END IF
NEXT X
PLAYING(0,VOI)=VIRTUAL_VOICE(0,T)
PLAYING(1,VOI)=VIRTUAL_VOICE(1,T)
OFFSET=0
CALL PLAYSOUND(VOI,PITCH,VELOCITY,OFFSET)
END SUB
SUB PLAYSOUND(VOI,PITCH,VELOCITY,OFFSET)
VOLUME VOI,VELOCITY,
PLAY VOI,PITCH
END SUB
SUB VOICESELECT(ROT,TRACKN,PITCH,VELOCITY)
END SUB
SUB KEYDOWN(ROT,TRACKN,TRACKM,PITCH,VELOCITY)
'CALL KEYDOWN2(ROT,TRACKN,TRACKM,PITCH,VELOCITY)
'EXIT SUB
VOI=ROT
ADD ROT,1,0 TO 3
'VOI=-1
'FIND AVAILABLE VOICES
FOR X=0 TO 3
IF PLAYING(0,X)=PITCH THEN
VOI=X
EXIT
ELSE IF PLAYING(0,X)=0 THEN
VOI=X
EXIT
END IF
NEXT X
'IF VOI=-1 THEN EXIT SUB
'OVERWRITE VOICE IF THE SAME KEY IS ALREADY PRESSED (SAME PITCH)
'TRACE VOI,PITCH,PLAYING(0),PLAYING(1),PLAYING(2),PLAYING(3)
PLAYING(0,VOI)=PITCH
'STOP SOUND
IF VELOCITY=0 THEN
'TRACE "STOP",VOI
PLAYING(0,VOI)=0
STOP VOI
LOCATE 0,12+VOI
PAL 1
'PRINT VOI,PITCH,0," "
PRINT VOI," "
LOCATE 0,5
PAL 0
ELSE
LOCATE 0,12+VOI
PAL 3
PRINT VOI,PITCH,VELOCITY," ";
LOCATE 9,12+VOI
PRINT TRACKN,TRACKM," "
LOCATE 0,5
PAL 0
END IF
'VELOCITY
VELOCITY=-VELOCITY*(VELOCITY>=0 AND VELOCITY<=15)-15*(VELOCITY>15)
VOLUME VOI,VELOCITY,
'TWO OCTAVES DOWN
ADD PITCH,-24
'OCT -2
'PLAY OR CLIP
IF PITCH>0 AND PITCH<97 THEN
PLAY VOI,PITCH
ELSE IF PITCH<1 THEN
PLAY VOI,PITCH AND 12
PRINT "PITCH TOO LOW"
ELSE
PLAY VOI,84+PITCH AND 12
PRINT "PITCH TOO HIGH"
END IF
END SUB
SUB KEYUP(TRACKN,TRACKM,PITCH)
FOR X=0 TO 3
IF PITCH=PLAYING(0,X) THEN
STOP X
PLAYING(0,X)=0
'TRACE "STOP",X
LOCATE 0,12+X
PAL 1
'PRINT X,PITCH,0," "
PRINT X," "
LOCATE 0,5
PAL 0
END IF
NEXT X
END SUB
'V A R I A B L E L E N G T H Q U A N T I T Y
SUB VAR_LEN_QUANTITY
V0=0
REPEAT
V0=V0*128
CALL RAM_PEEK(I)
'PRINT " ",HEX$(V)
ADD V0,V MOD 128
'PRINT " ",HEX$(V0)
INC I
UNTIL V\128=0
V=V0
END SUB
SUB NEW_VAR_LEN_QUANTITY(I,V)
V0=0
V=0
REPEAT
V0=V0*128
CALL RAM_PEEK(I)
'PRINT " ",HEX$(V)
ADD V0,V MOD 128
'PRINT " ",HEX$(V0)
INC I
UNTIL V\128=0
V=V0
END SUB
'THIS FUNCTION SIMULATES A 64KB RAM:
'IF THE ADDRESS IS OUT OF RANGE IT'LL CHANGE THE DATA BLOCK
'CALL RAM_PEEK(I) WILL BE USED INSTEAD OF PEEK(I)
'R A M P E E K
SUB RAM_PEEK(A)
'TRACE HEX$(A-$A000)
IF (A-$A000)\$4000 = FILE_PART THEN
V=PEEK(A-FILE_PART*$4000)
ELSE
'TRACE "SWITCH",FILE_PART
FILE_PART=(A-$A000)\$4000
OFFSET=$4000*(FILE_PART MOD 2)
IF K$<>"B" AND FILE_PART>1 THEN
IF OPERATION<>-1 THEN
PAL 1
PRINT ""
PRINT "OUT OF DATA"
PAL 0
END IF
ELSE
IF K$="L" OR K$="B" AND FILE_PART\2=1 THEN
COPY ROM(F)+OFFSET,-(FILE_PART=1)*(S-$4000)-(FILE_PART=0)*$4000 TO $A000
ELSE IF K$="E" OR K$="B" AND FILE_PART\2=0 THEN
LOAD F,$A000,$4000,OFFSET
END IF
V=PEEK(A-FILE_PART*$4000)
'TRACE "SWITCHED",FILE_PART
END IF
END IF
END SUB
'R A M P E E K F O U R
SUB RAM_PEEK4(A)
CALL RAM_PEEK(A)
V0=V
CALL RAM_PEEK(A+1)
V1=V
CALL RAM_PEEK(A+2)
V2=V
CALL RAM_PEEK(A+3)
V3=V
END SUB
'S A V E
SUB SAVEDATA(ADDR,V,OFFSET)
'BITSHIFT
POKE ADDR,PEEK(ADDR)+INT(V*2^OFFSET)MOD 256
END SUB
'T R A S H
SUB NOT_IN_USE
WHILE 0
'V=PEEK(I)
CALL RAM_PEEK(I)
PRINT HEX$(V)
WHILE NOT TAP
WAIT 1
WEND
INC I
WAIT 1
WEND
END SUB
#4:ZELDA
4D546864000000060001000F00304D54
726B0000002000FF510307530078FF51
030927C030FF51030A2C2A30FF510307
530000FF2F004D54726B0000000400FF
2F004D54726B0000000400FF2F004D54
726B0000000400FF2F004D54726B0000
000400FF2F004D54726B0000000400FF
2F004D54726B0000011500B565000064
0000060C002600006800000000002000
00C50500B50A5800953F7A00457A004A
7A0C853F7A00457A004A7A00953E7100
44710049710C853E7100447100497100
95417F00477F004C7F0C85417F00477F
004C7F00954078004678004B780C8540
78004678004B780095427C00487C004D
7C0C85427C00487C004D7C0095417800
4778004C7803B5077403076803075A03
074E07074A03074E0307520307560307
5A03076003076403076603076A03076C
03076E03077203077403077603077803
077A03077C03077E06077F18077E0307
7C03077A03077803077403077203076E
03076B03076603076203075C03075603
075203074C03074603073E0307380307
3205854C7800477800417800FF2F004D
54726B000008F400B665000064000006
0C002600006800005B19000000002000
00C60600B60A260096457A004A7A0C86
457A004A7A009644710049710C864471
0049710096477F004C7F0C86477F004C
7F00964678004B780C864678004B7800
96487C004D7C0C86487C004D7C009647
78004C7803B6077403076803075A0307
4E07074A03074E03075203075603075A
03076003076403076603076A03076C03
076E0307720307740307760307780307
7A03077C03077E06077F18077E03077C
03077A03077803077403077203076E03
076B03076603076203075C0307560307
5203074C03074603073E030738030732
05864C7800477800963C790B863C7901
963C760B863C7601963A740B863A7401
963A710B863A7101963C7B0B863C7B01
963C760B863C7601963C6C0B863C6C01
963C740B863C7461963C790B863C7901
963C760B863C7601963A740B863A7401
963A710B863A7101963C7B0B863C7B01
963C760B863C7601963C6C0B863C6C01
963C740B863C7461963F790B863F7901
963F760B863F7601963D740B863D7401
963D710B863D7101963F7B0B863F7B01
963F760B863F7601963F6C0B863F6C01
963F740B863F7461963F790B863F7901
963F760B863F7601963D740B863D7401
963D710B863D7101963F7B0B863F7B01
963F760B863F7601963F6C0B863F6C01
963F740B863F7461963C790B863C7901
963C760B863C7601963A740B863A7401
963A710B863A7101963C7B0B863C7B01
963C760B863C7601963C6C0B863C6C01
963C740B863C7461963C790B863C7901
963C760B863C7601963A740B863A7401
963A710B863A7101963C7B0B863C7B01
963C760B863C7601963C6C0B863C6C01
963C740B863C7461963F790B863F7901
963F760B863F7601963D740B863D7401
963D710B863D7101963F7B0B863F7B01
963F760B863F7601963F6C0B863F6C01
963F740B863F7461963F790B863F7901
963F760B863F7601963D740B863D7401
963D710B863D7101963F7B0B863F7B01
963F760B863F7601963F6C0B863F6C01
963F740B863F74619640660C86406600
9640620C86406200963F660C863F6600
963F610C863F61009641680C86416800
9641640C864164009640660C86406600
9640620C864062009642630C86426300
9642610C864261009641620C86416200
96415C0C86415C009644660C86446600
9644630C864463009643640C86436400
96435C0C86435C009640600C86406000
9640600C86406000963F630C863F6300
963F5B0C863F5B009641640C86416400
96415C0C86415C009640660C86406600
9640600C864060009642630C86426300
9642630C864263009641620C86416200
9641600C864160009644610C86446100
9644660C864466009643680C86436800
96436A0C86436A0096445F0C86445F00
96445F0C86445F009643680C86436800
9643620C864362009642630C86426300
9642610C8642610096416A0C86416A00
9641600C8641600096426D0C86426D00
96425F0C86425F009641680C86416800
9641660C8641660096405F0C86405F00
96405D0C86405D00963F5E0C863F5E00
963F540C863F54009644630C86446300
9644660C864466009643600C86436000
96435A0C86435A009642660C86426600
9642610C864261009641660C86416600
96415E0C86415E0096426D0C86426D00
9642630C864263009641680C86416800
9641660C864166009640630C86406300
9640610C86406100963F600C863F6000
963F5E0C863F5E00963C790B863C7901
963C760B863C7601963A740B863A7401
963A710B863A7101963C7B0B863C7B01
963C760B863C7601963C6C0B863C6C01
963C740B863C7461963C790B863C7901
963C760B863C7601963A740B863A7401
963A710B863A7101963C7B0B863C7B01
963C760B863C7601963C6C0B863C6C01
963C740B863C7461963F790B863F7901
963F760B863F7601963D740B863D7401
963D710B863D7101963F7B0B863F7B01
963F760B863F7601963F6C0B863F6C01
963F740B863F7461963F790B863F7901
963F760B863F7601963D740B863D7401
963D710B863D7101963F7B0B863F7B01
963F760B863F7601963F6C0B863F6C01
963F740B863F7461963C790B863C7901
963C760B863C7601963A740B863A7401
963A710B863A7101963C7B0B863C7B01
963C760B863C7601963C6C0B863C6C01
963C740B863C7461963C790B863C7901
963C760B863C7601963A740B863A7401
963A710B863A7101963C7B0B863C7B01
963C760B863C7601963C6C0B863C6C01
963C740B863C7461963F790B863F7901
963F760B863F7601963D740B863D7401
963D710B863D7101963F7B0B863F7B01
963F760B863F7601963F6C0B863F6C01
963F740B863F7461963F790B863F7901
963F760B863F7601963D740B863D7401
963D710B863D7101963F7B0B863F7B01
963F760B863F7601963F6C0B863F6C01
963F740B863F74619640660C86406600
9640620C86406200963F660C863F6600
963F610C863F61009641680C86416800
9641640C864164009640660C86406600
9640620C864062009642630C86426300
9642610C864261009641620C86416200
96415C0C86415C009644660C86446600
9644630C864463009643640C86436400
96435C0C86435C009640600C86406000
9640600C86406000963F630C863F6300
963F5B0C863F5B009641640C86416400
96415C0C86415C009640660C86406600
9640600C864060009642630C86426300
9642630C864263009641620C86416200
9641600C864160009644610C86446100
9644660C864466009643680C86436800
96436A0C86436A0096445F0C86445F00
96445F0C86445F009643680C86436800
9643620C864362009642630C86426300
9642610C8642610096416A0C86416A00
9641600C8641600096426D0C86426D00
96425F0C86425F009641680C86416800
9641660C8641660096405F0C86405F00
96405D0C86405D00963F5E0C863F5E00
963F540C863F54009644630C86446300
9644660C864466009643600C86436000
96435A0C86435A009642660C86426600
9642610C864261009641660C86416600
96415E0C86415E0096426D0C86426D00
9642630C864263009641680C86416800
9641660C864166009640630C86406300
9640610C86406100963F600C863F6000
963F5E0C863F5E00FF2F004D54726B00
00000400FF2F004D54726B0000000400
FF2F004D54726B0000197300B9650000
640000060C0026000068000000000020
0000C97F00B9077B00993E7A0C893E7A
00993D710C893D710099407F0C89407F
00993F780C893F780099417C0C89417C
0099407800247F00317F0C2650018926
5003992651018926510399264B018926
4B0399264B0189264B03992656018926
56039926500189265003992651018926
510399264E0189264E03992650018926
50039926530189265303992656018926
5603992658018926580399265D018926
5D0399265F0189265F03992652018926
5203992655018926550399264F018926
4F039926570189265703992657018926
57039926540189265403992654018926
54039926540189265403992653018926
53039926570189265703992654018926
5403992653018926530399264C018926
4C03992650018926500399264F018926
4F039926520189265203992659018926
5903992664018926640399266C018926
6C03992679018926790399267C018926
7C07407800247F00317F0099247D0048
6B00267D0A89247D02486B00267D0099
486800276500247A0A89247A02486800
27650099247800267B0046660A892478
02267B00466600994663002772002475
0A8924750246630027720099247F0026
7B00486D0A89247F02267B00486D0099
486800277400247A0A89247A02486800
27740099247000267700485E0A892470
02267700485E00994866002478002776
0C8927760099266F0C89266F00992761
0C8927610099267B0C89267B00992763
0C8927630099267D0C89267D0099276A
0C89276A00992671028924780A486600
2671009927650C8927650099267D0048
6B00247D0A89247D02267D00486B0099
276500247A0048680A89247A02276500
48680099267B0046660024780A892478
02267B00466600992772002475004663
0A8924750227720046630099267B0048
6D00247F0A89247F02267B00486D0099
277400247A0048680A89247A02277400
48680099267700485E0024700A892470
02267700485E00992478004866002776
0C8927760099266F0C89266F00992761
0C8927610099267B0C89267B00992763
0C8927630099267D0C89267D0099276A
0C89276A009926710C89267100992765
018924780B48660027650099247D004B
6B00267D0A89247D024B6B00267D0099
4B6800276500247A0A89247A024B6800
27650099247800496600267B0A892478
02496600267B00994963002475002772
0A8924750249630027720099247F0026
7B004B6D0A89247F02267B004B6D0099
4B6800247A0027740A89247A024B6800
277400992470004B5E0026770A892470
024B5E00267700992776002478004B66
0C8927760099266F0C89266F00992761
0C8927610099267B0C89267B00992763
0C8927630099267D0C89267D0099276A
0C89276A00992671028924780A4B6600
2671009927650C8927650099247D004B
6B00267D0A89247D024B6B00267D0099
4B6800276500247A0A89247A024B6800
27650099247800267B0049660A892478
02267B00496600994963002475002772
0A8924750249630027720099247F0026
7B004B6D0A89247F02267B004B6D0099
4B6800277400247A0A89247A024B6800
277400992677004B5E0024700A892470
022677004B5E00992478002776004B66
0C8927760099266F0C89266F00992761
0C8927610099267B0C89267B00992763
0C8927630099267D0C89267D0099276A
0C89276A00992671028924780A4B6600
2671009927650C8927650099486B0026
7D00247D0A89247D02486B00267D0099
247A0027650048680A89247A02276500
48680099466600247800267B0A892478
02466600267B00992475002772004663
0A8924750227720046630099486D0026
7B00247F0A89247F02486D00267B0099
277400247A0048680A89247A02277400
48680099267700247000485E0A892470
02267700485E00994866002776002478
0C8927760099266F0C89266F00992761
0C8927610099267B0C89267B00992763
0C8927630099267D0C89267D0099276A
0C89276A00992671028924780A486600
2671009927650C8927650099267D0024
7D00486B0A89247D02267D00486B0099
276500486800247A0A89247A02276500
48680099267B0024780046660A892478
02267B00466600992475002772004663
0A8924750227720046630099267B0024
7F00486D0A89247F02267B00486D0099
247A0048680027740A89247A02486800
27740099267700485E0024700A892470
02267700485E00994866002776002478
0C8927760099266F0C89266F00992761
0C8927610099267B0C89267B00992763
0C8927630099267D0C89267D0099276A
0C89276A009926710C89267100992765
018924780B48660027650099247D0026
7D004B6B0A89247D02267D004B6B0099
4B6800276500247A0A89247A024B6800
27650099247800267B0049660A892478
02267B00496600992475004963002772
0A89247502496300277200994B6D0024
7F00267B0A89247F024B6D00267B0099
4B6800247A0027740A89247A024B6800
277400992470002677004B5E0A892470
022677004B5E00994B66002478002776
0C8927760099266F0C89266F00992761
0C8927610099267B0C89267B00992763
0C8927630099267D0C89267D0099276A
0C89276A00992671028924780A4B6600
2671009927650C89276500994B6B0024
7D00267D0A89247D024B6B00267D0099
247A004B680027650A89247A024B6800
27650099496600247800267B0A892478
02496600267B00992772002475004963
0A8924750227720049630099267B0024
7F004B6D0A89247F02267B004B6D0099
4B6800277400247A0A89247A024B6800
277400994B5E0024700026770A892470
024B5E00267700994B66002776002478
0C8927760099266F0C89266F00992761
0C8927610099267B0C89267B00992763
0C8927630099267D0C89267D0099276A
0C89276A00992671028924780A4B6600
2671009927650C8927650099247D0026
7D0040660A89247D02267D0040660099
406200276500247A0A89247A02406200
276500992478003F6600267B0A892478
023F6600267B00993F61002772002475
0A892475023F610027720099267B0041
6800247F0A89247F02267B0041680099
277400247A0041640A89247A02277400
4164009926770040660024700A892470
0226770040660099277600406200247D
0A89247D0227760040620099266F0024
7A0042630A89247A02266F0042630099
27610024780042610A89247802276100
42610099267B0024750041620A892475
02267B0041620099415C00276300247F
0A89247F02415C002763009924750026
7D0044660A89247502267D0044660099
446300247F00276A0A89247F02446300
276A0099267100247A0043640A89247A
0226710043640099276500247000435C
0A89247002276500435C009940600024
7D00267D0A89247D02406000267D0099
247A0040600027650A89247A02406000
276500993F6300267B0024780A892478
023F6300267B00992475003F5B002772
0A892475023F5B0027720099247F0041
6400267B0A89247F02416400267B0099
247A00415C0027740A89247A02415C00
2774009940660024700026770A892470
0240660026770099406000247D002776
0A89247D0240600027760099266F0024
7A0042630A89247A02266F0042630099
42630024780027610A89247802426300
27610099247500416200267B0A892475
02416200267B0099416000247F002763
0A89247F0241600027630099267D0044
610024750A89247502267D0044610099
247F00276A0044660A89247F02276A00
44660099436800267100247A0A89247A
0243680026710099436A002470002765
0A89247002436A0027650099247D0046
5F00267D0A89247D02465F00267D0099
465F00247A0027650A89247A02465F00
27650099456800247800267B0A892478
02456800267B00992772004562002475
0A8924750227720045620099267B0044
6300247F0A89247F02267B0044630099
446100247A0027740A89247A02446100
27740099267700436A0024700A892470
02267700436A0099436000247D002776
0A89247D0243600027760099247A0044
6D00266F0A89247A02446D00266F0099
247800276100445F0A89247802276100
445F0099436800267B0024750A892475
02436800267B0099247F002763004366
0A89247F0227630043660099267D0042
5F0024750A89247502267D00425F0099
247F00425D00276A0A89247F02425D00
276A0099247A00415E0026710A89247A
02415E00267100992470002765004154
0A892470022765004154009946630026
7D00247D0A89247D02466300267D0099
276500247A0046660A89247A02276500
46660099267B0045600024780A892478
02267B0045600099247500455A002772
0A89247502455A0027720099267B0044
6600247F0A89247F02267B0044660099
247A0027740044610A89247A02277400
4461009943660026770024700A892470
0243660026770099247D00277600435E
0A89247D02277600435E0099446D0026
6F00247A0A89247A02446D00266F0099
24780044630027610A89247802446300
27610099436800247500267B0A892475
02436800267B0099436600247F002763
0A89247F024366002763009942630024
7500267D0A89247502426300267D0099
247F00426100276A0A89247F02426100
276A0099267100416000247A0A89247A
0226710041600099415E002470002765
0A89247002415E0027650099247D0026
7D00486B0A89247D02267D00486B0099
486800276500247A0A89247A02486800
27650099247800267B0046660A892478
02267B00466600994663002475002772
0A8924750246630027720099247F0026
7B00486D0A89247F02267B00486D0099
486800247A0027740A89247A02486800
27740099247000485E0026770A892470
02485E00267700994866002478002776
0C8927760099266F0C89266F00992761
0C8927610099267B0C89267B00992763
0C8927630099267D0C89267D0099276A
0C89276A00992671028924780A486600
2671009927650C8927650099486B0024
7D00267D0A89247D02486B00267D0099
486800247A0027650A89247A02486800
27650099247800267B0046660A892478
02267B00466600994663002772002475
0A8924750246630027720099247F0048
6D00267B0A89247F02486D00267B0099
486800247A0027740A89247A02486800
27740099247000485E0026770A892470
02485E00267700994866002478002776
0C8927760099266F0C89266F00992761
0C8927610099267B0C89267B00992763
0C8927630099267D0C89267D0099276A
0C89276A009926710C89267100992765
018924780B48660027650099247D004B
6B00267D0A89247D024B6B00267D0099
2765004B6800247A0A89247A02276500
4B680099247800267B0049660A892478
02267B00496600994963002772002475
0A89247502496300277200994B6D0026
7B00247F0A89247F024B6D00267B0099
277400247A004B680A89247A02277400
4B6800992677004B5E0024700A892470
022677004B5E00992478004B66002776
0C8927760099266F0C89266F00992761
0C8927610099267B0C89267B00992763
0C8927630099267D0C89267D0099276A
0C89276A00992671028924780A4B6600
2671009927650C8927650099247D004B
6B00267D0A89247D024B6B00267D0099
4B6800247A0027650A89247A024B6800
27650099247800267B0049660A892478
02267B00496600994963002772002475
0A8924750249630027720099247F004B
6D00267B0A89247F024B6D00267B0099
4B6800247A0027740A89247A024B6800
277400992470004B5E0026770A892470
024B5E00267700992478004B66002776
0C8927760099266F0C89266F00992761
0C8927610099267B0C89267B00992763
0C8927630099267D0C89267D0099276A
0C89276A00992671028924780A4B6600
2671009927650C8927650099267D0048
6B00247D0A89247D02267D00486B0099
486800247A0027650A89247A02486800
27650099267B0046660024780A892478
02267B00466600992772002475004663
0A8924750227720046630099267B0048
6D00247F0A89247F02267B00486D0099
486800247A0027740A89247A02486800
27740099267700485E0024700A892470
02267700485E00994866002776002478
0C8927760099266F0C89266F00992761
0C8927610099267B0C89267B00992763
0C8927630099267D0C89267D0099276A
0C89276A00992671028924780A486600
2671009927650C8927650099247D0048
6B00267D0A89247D02486B00267D0099
276500486800247A0A89247A02276500
48680099466600247800267B0A892478
02466600267B00992772004663002475
0A8924750227720046630099247F0026
7B00486D0A89247F02267B00486D0099
247A0048680027740A89247A02486800
27740099485E0024700026770A892470
02485E00267700994866002478002776
0C8927760099266F0C89266F00992761
0C8927610099267B0C89267B00992763
0C8927630099267D0C89267D0099276A
0C89276A009926710C89267100992765
018924780B48660027650099267D0024
7D004B6B0A89247D02267D004B6B0099
4B6800247A0027650A89247A024B6800
27650099247800496600267B0A892478
02496600267B00992772004963002475
0A8924750227720049630099267B004B
6D00247F0A89247F02267B004B6D0099
4B6800247A0027740A89247A024B6800
277400992470004B5E0026770A892470
024B5E00267700994B66002478002776
0C8927760099266F0C89266F00992761
0C8927610099267B0C89267B00992763
0C8927630099267D0C89267D0099276A
0C89276A00992671028924780A4B6600
2671009927650C8927650099247D004B
6B00267D0A89247D024B6B00267D0099
4B6800276500247A0A89247A024B6800
27650099496600247800267B0A892478
02496600267B00994963002772002475
0A8924750249630027720099247F004B
6D00267B0A89247F024B6D00267B0099
4B6800247A0027740A89247A024B6800
277400992470004B5E0026770A892470
024B5E00267700992478004B66002776
0C8927760099266F0C89266F00992761
0C8927610099267B0C89267B00992763
0C8927630099267D0C89267D0099276A
0C89276A00992671028924780A4B6600
2671009927650C892765009940660026
7D00247D0A89247D02406600267D0099
406200276500247A0A89247A02406200
27650099247800267B003F660A892478
02267B003F6600993F61002772002475
0A892475023F610027720099247F0026
7B0041680A89247F02267B0041680099
277400416400247A0A89247A02277400
4164009926770024700040660A892470
0226770040660099247D002776004062
0A89247D022776004062009942630024
7A00266F0A89247A02426300266F0099
24780027610042610A89247802276100
42610099267B0024750041620A892475
02267B0041620099247F00276300415C
0A89247F02276300415C009944660026
7D0024750A89247502446600267D0099
247F00276A0044630A89247F02276A00
44630099436400267100247A0A89247A
0243640026710099276500247000435C
0A89247002276500435C0099247D0026
7D0040600A89247D02267D0040600099
406000247A0027650A89247A02406000
276500993F6300247800267B0A892478
023F6300267B00992772002475003F5B
0A892475022772003F5B0099247F0026
7B0041640A89247F02267B0041640099
277400415C00247A0A89247A02277400
415C009924700026770040660A892470
0226770040660099277600406000247D
0A89247D022776004060009942630026
6F00247A0A89247A02426300266F0099
27610042630024780A89247802276100
42630099247500267B0041620A892475
02267B0041620099276300416000247F
0A89247F0227630041600099267D0044
610024750A89247502267D0044610099
247F00276A0044660A89247F02276A00
44660099267100436800247A0A89247A
0226710043680099247000276500436A
0A89247002276500436A0099445F0024
7D00267D0A89247D02445F00267D0099
247A00445F0027650A89247A02445F00
27650099436800247800267B0A892478
02436800267B00994362002475002772
0A892475024362002772009942630024
7F00267B0A89247F02426300267B0099
277400247A0042610A89247A02277400
42610099247000416A0026770A892470
02416A0026770099247D004160002776
0A89247D0241600027760099426D0024
7A00266F0A89247A02426D00266F0099
247800425F0027610A89247802425F00
27610099416800247500267B0A892475
02416800267B0099416600247F002763
0A89247F024166002763009924750040
5F00267D0A89247502405F00267D0099
405D00247F00276A0A89247F02405D00
276A00993F5E00247A0026710A89247A
023F5E00267100993F54002765002470
0A892470023F540027650099267D0044
6300247D0A89247D02267D0044630099
276500446600247A0A89247A02276500
44660099267B0024780043600A892478
02267B0043600099435A002772002475
0A89247502435A0027720099267B0024
7F0042660A89247F02267B0042660099
426100247A0027740A89247A02426100
2774009924700041660026770A892470
0241660026770099415E00247D002776
0A89247D02415E0027760099426D0024
7A00266F0A89247A02426D00266F0099
24780042630027610A89247802426300
27610099247500416800267B0A892475
02416800267B0099416600247F002763
0A89247F024166002763009940630024
7500267D0A89247502406300267D0099
406100247F00276A0A89247F02406100
276A0099247A003F600026710A89247A
023F6000267100993F5E002470002765
0A892470023F5E00276500FF2F004D54
726B0000059500BA650000640000060C
0026000068008758000000200000CA0A
00BA0A00000750009A4362003D5B06BA
075A06076406076B0607720607760607
7A06077D06077E06077F24077E06077D
06077C06077A06077806077606077206
077006076C06076A0607680607640607
6006075C060759060756060752068A43
62003D5B00BA0750009A445B003E5606
BA075A06076406076B06077206077606
077A06077D06077E06077F24077E0607
7D06077C06077A060778060776060772
06077006076C06076A06076806076406
076006075C060759060756060752068A
445B003E5600BA0750009A3F5700455A
06BA075A06076406076B060772060776
06077A06077D06077E06077F24077E06
077D06077C06077A0607780607760607
7206077006076C06076A060768060764
06076006075C06075906075606075206
8A3F5700455A00BA0750009A3E5E0044
5706BA075A06076406076B0607720607
7606077A06077D06077E06077F24077E
06077D06077C06077A06077806077606
077206077006076C06076A0607680607
6406076006075C060759060756060752
068A3E5E00445700BA077E009A465700
404A608A465700404A009A3F4A004557
608A3F4A004557009A414A004757608A
414A004757009A404A004657608A404A
004657009A424A004857608A424A0048
57009A414A004757608A414A00475700
9A495700434A608A495700434A009A48
5700424A608A485700424A00BA075000
9A4457003E5606BA075A06076406076B
06077206077606077A06077D06077E06
077F24077E06077D06077C06077A0607
7806077606077206077006076C06076A
06076806076406076006075C06075906
0756060752068A4457003E5600BA0750
009A4558003F5106BA075A0607640607
6B06077206077606077A06077D06077E
06077F24077E06077D06077C06077A06
077806077606077206077006076C0607
6A06076806076406076006075C060759
060756060752068A4558003F5100BA07
50009A3E5C00445706BA075A06076406
076B06077206077606077A06077D0607
7E06077F24077E06077D06077C06077A
06077806077606077206077006076C06
076A06076806076406076006075C0607
59060756060752068A3E5C00445700BA
0750009A4362003D5B06BA075A060764
06076B06077206077606077A06077D06
077E06077F24077E06077D06077C0607
7A06077806077606077206077006076C
06076A06076806076406076006075C06
0759060756060752068A4362003D5B00
BA0750009A3E5600445B06BA075A0607
6406076B06077206077606077A06077D
06077E06077F24077E06077D06077C06
077A0607780607760607720607700607
6C06076A06076806076406076006075C
060759060756060752068A3E5600445B
00BA0750009A455A003F5706BA075A06
076406076B06077206077606077A0607
7D06077E06077F24077E06077D06077C
06077A06077806077606077206077006
076C06076A0607680607640607600607
5C060759060756060752068A455A003F
5700BA0750009A3E5E00445706BA075A
06076406076B06077206077606077A06
077D06077E06077F24077E06077D0607
7C06077A060778060776060772060770
06076C06076A06076806076406076006
075C060759060756060752068A3E5E00
445700BA0750009A413B00475806BA07
5A06076406076B06077206077606077A
06077D06077E06077F24077E06077D06
077C06077A0607780607760607720607
7006076C06076A060768060764060760
06075C060759060756060752068A413B
00475800BA077E009A404A004657608A
404A004657009A4557003F4A608A4557
003F4A009A475700414A608A47570041
4A009A404A004657608A404A00465700
9A485700424A608A485700424A009A47
5700414A608A475700414A009A495700
434A608A495700434A009A424A004857
608A424A00485700FF2F004D54726B00
0004E900BB650000640000060C002600
0068008758000000200000CB0B00BB0A
7F000750009B2B6206BB075A06076406
076B06077206077606077A06077D0607
7E06077F24077E06077D06077C06077A
06077806077606077206077006076C06
076A06076806076406076006075C0607
59060756060752068B2B6200BB075000
9B2C5B06BB075A06076406076B060772
06077606077A06077D06077E06077F24
077E06077D06077C06077A0607780607
7606077206077006076C06076A060768
06076406076006075C06075906075606
0752068B2C5B00BB0750009B2D5A06BB
075A06076406076B0607720607760607
7A06077D06077E06077F24077E06077D
06077C06077A06077806077606077206
077006076C06076A0607680607640607
6006075C060759060756060752068B2D
5A00BB0750009B2C5706BB075A060764
06076B06077206077606077A06077D06
077E06077F24077E06077D06077C0607
7A06077806077606077206077006076C
06076A06076806076406076006075C06
0759060756060752068B2C5700BB077E
009B2E57608B2E57009B2D57608B2D57
009B2F57608B2F57009B2E57608B2E57
009B3057608B3057009B2F57608B2F57
009B3157608B3157009B3057608B3057
00BB0750009B2C5706BB075A06076406
076B06077206077606077A06077D0607
7E06077F24077E06077D06077C06077A
06077806077606077206077006076C06
076A06076806076406076006075C0607
59060756060752068B2C5700BB075000
9B2D5806BB075A06076406076B060772
06077606077A06077D06077E06077F24
077E06077D06077C06077A0607780607
7606077206077006076C06076A060768
06076406076006075C06075906075606
0752068B2D5800BB0750009B2C5706BB
075A06076406076B0607720607760607
7A06077D06077E06077F24077E06077D
06077C06077A06077806077606077206
077006076C06076A0607680607640607
6006075C060759060756060752068B2C
5700BB0750009B2B6206BB075A060764
06076B06077206077606077A06077D06
077E06077F24077E06077D06077C0607
7A06077806077606077206077006076C
06076A06076806076406076006075C06
0759060756060752068B2B6200BB0750
009B2C5B06BB075A06076406076B0607
7206077606077A06077D06077E06077F
24077E06077D06077C06077A06077806
077606077206077006076C06076A0607
6806076406076006075C060759060756
060752068B2C5B00BB0750009B2D5A06
BB075A06076406076B06077206077606
077A06077D06077E06077F24077E0607
7D06077C06077A060778060776060772
06077006076C06076A06076806076406
076006075C060759060756060752068B
2D5A00BB0750009B2C5706BB075A0607
6406076B06077206077606077A06077D
06077E06077F24077E06077D06077C06
077A0607780607760607720607700607
6C06076A06076806076406076006075C
060759060756060752068B2C5700BB07
50009B2F5806BB075A06076406076B06
077206077606077A06077D06077E0607
7F24077E06077D06077C06077A060778
06077606077206077006076C06076A06
076806076406076006075C0607590607
56060752068B2F58009B2E57608B2E57
009B2D57608B2D57009B2F57608B2F57
009B2E57608B2E57009B3057608B3057
009B2F57608B2F57009B3157608B3157
009B3057608B305700FF2F004D54726B
0000000400FF2F004D54726B00000C22
00BD650000640000060C002600006800
8158000000200000CD0D00BD0A3A009D
247B0B8D247B019D24780B8D2478019D
22760B8D2276019D22730B8D2273019D
247D0B8D247D019D24780B8D2478019D
246E0B8D246E019D24760B8D2476019D
246D0B8D246D019D24680B8D2468019D
245E0B8D245E019D24660B8D2466019D
244B0B8D244B019D24460B8D2446019D
243C0B8D243C019D24440B8D2444019D
247B0B8D247B019D24780B8D2478019D
22760B8D2276019D22730B8D2273019D
247D0B8D247D019D24780B8D2478019D
246E0B8D246E019D24760B8D2476019D
246D0B8D246D019D24680B8D2468019D
245E0B8D245E019D24660B8D2466019D
244B0B8D244B019D24460B8D2446019D
243C0B8D243C019D24440B8D2444019D
277B0B8D277B019D27780B8D2778019D
25760B8D2576019D25730B8D2573019D
277D0B8D277D019D27780B8D2778019D
276E0B8D276E019D27760B8D2776019D
276D0B8D276D019D27680B8D2768019D
275E0B8D275E019D27660B8D2766019D
274B0B8D274B019D27460B8D2746019D
273C0B8D273C019D27440B8D2744019D
277B0B8D277B019D27780B8D2778019D
25760B8D2576019D25730B8D2573019D
277D0B8D277D019D27780B8D2778019D
276E0B8D276E019D27760B8D2776019D
276D0B8D276D019D27680B8D2768019D
275E0B8D275E019D27660B8D2766019D
274B0B8D274B019D27460B8D2746019D
273C0B8D273C019D27440B8D2744019D
247B0B8D247B019D24780B8D2478019D
22760B8D2276019D22730B8D2273019D
247D0B8D247D019D24780B8D2478019D
246E0B8D246E019D24760B8D2476019D
246D0B8D246D019D24680B8D2468019D
245E0B8D245E019D24660B8D2466019D
244B0B8D244B019D24460B8D2446019D
243C0B8D243C019D24440B8D2444019D
247B0B8D247B019D24780B8D2478019D
22760B8D2276019D22730B8D2273019D
247D0B8D247D019D24780B8D2478019D
246E0B8D246E019D24760B8D2476019D
246D0B8D246D019D24680B8D2468019D
245E0B8D245E019D24660B8D2466019D
244B0B8D244B019D24460B8D2446019D
243C0B8D243C019D24440B8D2444019D
277B0B8D277B019D27780B8D2778019D
25760B8D2576019D25730B8D2573019D
277D0B8D277D019D27780B8D2778019D
276E0B8D276E019D27760B8D2776019D
276D0B8D276D019D27680B8D2768019D
275E0B8D275E019D27660B8D2766019D
274B0B8D274B019D27460B8D2746019D
273C0B8D273C019D27440B8D2744019D
277B0B8D277B019D27780B8D2778019D
25760B8D2576019D25730B8D2573019D
277D0B8D277D019D27780B8D2778019D
276E0B8D276E019D27760B8D2776019D
276D0B8D276D019D27680B8D2768019D
275E0B8D275E019D27660B8D2766019D
274B0B8D274B019D27460B8D2746019D
273C0B8D273C019D27440B8D2744019D
28660C8D2866009D28620C8D2862009D
27660C8D2766009D27610C8D2761009D
29680C8D2968009D29640C8D2964009D
28660C8D2866009D28620C8D2862009D
2A630C8D2A63009D2A610C8D2A61009D
29620C8D2962009D295C0C8D295C009D
2C660C8D2C66009D2C630C8D2C63009D
2B640C8D2B64009D2B5C0C8D2B5C009D
28600C8D2860009D28600C8D2860009D
27630C8D2763009D275B0C8D275B009D
29640C8D2964009D295C0C8D295C009D
28660C8D2866009D28600C8D2860009D
2A630C8D2A63009D2A630C8D2A63009D
29620C8D2962009D29600C8D2960009D
2C610C8D2C61009D2C660C8D2C66009D
2B680C8D2B68009D2B6A0C8D2B6A009D
2C5F0C8D2C5F009D2C5F0C8D2C5F009D
2B680C8D2B68009D2B620C8D2B62009D
2A630C8D2A63009D2A610C8D2A61009D
296A0C8D296A009D29600C8D2960009D
2A6D0C8D2A6D009D2A5F0C8D2A5F009D
29680C8D2968009D29660C8D2966009D
285F0C8D285F009D285D0C8D285D009D
275E0C8D275E009D27540C8D2754009D
2C630C8D2C63009D2C660C8D2C66009D
2B600C8D2B60009D2B5A0C8D2B5A009D
2A660C8D2A66009D2A610C8D2A61009D
29660C8D2966009D295E0C8D295E009D
2A6D0C8D2A6D009D2A630C8D2A63009D
29680C8D2968009D29660C8D2966009D
28630C8D2863009D28610C8D2861009D
27600C8D2760009D275E0C8D275E009D
247B0B8D247B019D24780B8D2478019D
22760B8D2276019D22730B8D2273019D
247D0B8D247D019D24780B8D2478019D
246E0B8D246E019D24760B8D2476019D
246D0B8D246D019D24680B8D2468019D
245E0B8D245E019D24660B8D2466019D
244B0B8D244B019D24460B8D2446019D
243C0B8D243C019D24440B8D2444019D
247B0B8D247B019D24780B8D2478019D
22760B8D2276019D22730B8D2273019D
247D0B8D247D019D24780B8D2478019D
246E0B8D246E019D24760B8D2476019D
246D0B8D246D019D24680B8D2468019D
245E0B8D245E019D24660B8D2466019D
244B0B8D244B019D24460B8D2446019D
243C0B8D243C019D24440B8D2444019D
277B0B8D277B019D27780B8D2778019D
25760B8D2576019D25730B8D2573019D
277D0B8D277D019D27780B8D2778019D
276E0B8D276E019D27760B8D2776019D
276D0B8D276D019D27680B8D2768019D
275E0B8D275E019D27660B8D2766019D
274B0B8D274B019D27460B8D2746019D
273C0B8D273C019D27440B8D2744019D
277B0B8D277B019D27780B8D2778019D
25760B8D2576019D25730B8D2573019D
277D0B8D277D019D27780B8D2778019D
276E0B8D276E019D27760B8D2776019D
276D0B8D276D019D27680B8D2768019D
275E0B8D275E019D27660B8D2766019D
274B0B8D274B019D27460B8D2746019D
273C0B8D273C019D27440B8D2744019D
247B0B8D247B019D24780B8D2478019D
22760B8D2276019D22730B8D2273019D
247D0B8D247D019D24780B8D2478019D
246E0B8D246E019D24760B8D2476019D
246D0B8D246D019D24680B8D2468019D
245E0B8D245E019D24660B8D2466019D
244B0B8D244B019D24460B8D2446019D
243C0B8D243C019D24440B8D2444019D
247B0B8D247B019D24780B8D2478019D
22760B8D2276019D22730B8D2273019D
247D0B8D247D019D24780B8D2478019D
246E0B8D246E019D24760B8D2476019D
246D0B8D246D019D24680B8D2468019D
245E0B8D245E019D24660B8D2466019D
244B0B8D244B019D24460B8D2446019D
243C0B8D243C019D24440B8D2444019D
277B0B8D277B019D27780B8D2778019D
25760B8D2576019D25730B8D2573019D
277D0B8D277D019D27780B8D2778019D
276E0B8D276E019D27760B8D2776019D
276D0B8D276D019D27680B8D2768019D
275E0B8D275E019D27660B8D2766019D
274B0B8D274B019D27460B8D2746019D
273C0B8D273C019D27440B8D2744019D
277B0B8D277B019D27780B8D2778019D
25760B8D2576019D25730B8D2573019D
277D0B8D277D019D27780B8D2778019D
276E0B8D276E019D27760B8D2776019D
276D0B8D276D019D27680B8D2768019D
275E0B8D275E019D27660B8D2766019D
274B0B8D274B019D27460B8D2746019D
273C0B8D273C019D27440B8D2744019D
28660C8D2866009D28620C8D2862009D
27660C8D2766009D27610C8D2761009D
29680C8D2968009D29640C8D2964009D
28660C8D2866009D28620C8D2862009D
2A630C8D2A63009D2A610C8D2A61009D
29620C8D2962009D295C0C8D295C009D
2C660C8D2C66009D2C630C8D2C63009D
2B640C8D2B64009D2B5C0C8D2B5C009D
28600C8D2860009D28600C8D2860009D
27630C8D2763009D275B0C8D275B009D
29640C8D2964009D295C0C8D295C009D
28660C8D2866009D28600C8D2860009D
2A630C8D2A63009D2A630C8D2A63009D
29620C8D2962009D29600C8D2960009D
2C610C8D2C61009D2C660C8D2C66009D
2B680C8D2B68009D2B6A0C8D2B6A009D
2C5F0C8D2C5F009D2C5F0C8D2C5F009D
2B680C8D2B68009D2B620C8D2B62009D
2A630C8D2A63009D2A610C8D2A61009D
296A0C8D296A009D29600C8D2960009D
2A6D0C8D2A6D009D2A5F0C8D2A5F009D
29680C8D2968009D29660C8D2966009D
285F0C8D285F009D285D0C8D285D009D
275E0C8D275E009D27540C8D2754009D
2C630C8D2C63009D2C660C8D2C66009D
2B600C8D2B60009D2B5A0C8D2B5A009D
2A660C8D2A66009D2A610C8D2A61009D
29660C8D2966009D295E0C8D295E009D
2A6D0C8D2A6D009D2A630C8D2A63009D
29680C8D2968009D29660C8D2966009D
28630C8D2863009D28610C8D2861009D
27600C8D2760009D275E0C8D275E00FF
2F00