O p Oo  Oo! #@%`')+-/1 3@5`7;=?A C@E`GIKMOQ S@U`WY[]_a c@e`gikmoq s@u`wy{} @` @ `  Oo  Oo! #@%`')+-/1 3@5`7;=?A C@E`GIKMOQ S@U`WY[]_a c@e`gikmoq s@u`wy{} @` @ ` 4PT  t /EDENTRO PRG 7 /E: .  t /E..  t /EEN_WARE!Z_B KFILEFORMDOC 56HOTWAREZNOW IPTPLAY30BS 2iREADME DOC  0"UPDATE DOC  9. 0+ . _ _ _ ___ _ _/| + / __ // \ / _\ / / / __ // _! / /_ \// /\ \\ \ ___ / / / /_ \// /___ / __/ / / \ \\ \ \ \/ / / __/ \_ \ \ \__/\\ \ / / \ \/ /\__\___\ \__/\._/ / ' * \_/ \__\/ / \_/ \__/ \_/| _/ | /__/ . / _ / |/ - --+- - USR HST Dual Standard 14400 / / \/ 285 Megs : | _ / \ _ . . \__ __ _ _ \_/ \_/ _ _ __ __/ : \___ __ _ _ Sysop: Zaphod Beeblebrox _ _ __ ___/ | \___ __ _ _ Control Team EHQ _ _ __ ___/ ---+--- - \_ ICS SHQ _ / | \___ : ___/ : +46-18-262804 \ | / 24 Hours/Day. ' . * \ | / . ._ _/ | \___/|_ | _ \ / _/ __|__ \__! _ / ' | | \ \/ /_\| / /|/_ \/ | | \/ | | \ \ _/ ' \___' \ | | + | | / / \__/\_/ / | | !__! /__/\_| _/ !__! #|/  #: < Advertisment added using -=Bad Ad=- 1.90 by Troed/Sync. BBS: +46-451-91002 > -2 17:04:32 - 11.02.1993 - G Introduction. = The text below was intended to be the documentation on the fileformat used in this release of ProTracker. However, we decided to wait with the actual implementation of the format until having released a couple of versions, because we'd like to hear some comments, suggestions etc. upon it first. So read it lightly, and feel free to post your opinion to one of the authors (see the ReadMe.doc file elsewhere on the disk). Note that since this is only a suggestion, don't start programming a revolutionary new piece of code based on this info yet; we may change the format :)... Here we go... - Signed Tom "Outland" Bech of CryptoBurners. $-**- Protracker release 3.01 Beta. Fileformat documentation. =7 This document includes the complete documentation of the fileformat used in Protracker 3.01, and instructions on how to use it. Fields marked "*Reserved*" are reserved for future use and are guarantied to cause hangup if messed with. General - With this release of Protracker we have decided to change the filestructure of the musicfiles produced with the program. We felt the old format was too obsolete, messy and out of date for us to use any further. So we invented this new format. The format is based upon Interchanged File Format (IFF) chunks, originally developed by Electronic Arts, but now in widely use on the Amiga. The format allows considerable flexibility and does not suffer too severly from changes and updates, and is therefore perfect for our use. The Format - We will in this section introduce and describe each chunk type appearing in a Protracker music file. Look in the next section for the sequencial description. ** Contents of Chunk "VERS": OFFSET Length Contents Meaning -P 0 4 "VERS" Chunk identifier. 4 4 ? Chunk length (in bytes). 8 2 ? Version number (word). 10 6 "PT3.01" Version ID string. -P This chunk is used by Protracker to identify the producer of the module, and if necessary perform upgrade-conversion if the file was made with a pre- vious version of Protracker. There can be at maximum one "VERS" chunk in a Protracker music file. This chunk is not critical; it may be obmitted, but be aware of the possible incompatibility problems that may arise if it's left out. ** Contents of Chunk "INFO": OFFSET Length Contents Meaning -P 0 4 "INFO" Chunk identifier. 4 4 ? Chunk length (in bytes). 8 32 [..??..] Song name (string). 40 2 ? Number of instruments (word). 42 2 ? Number of positions (word). 44 2 ? Number of patterns (word). 46 2 ? Overall volume factor (word). 48 2 0006h Default speed (#VB) (word). 50 2 ? Packed field. See below. -P Protracker uses this chunk to set different internal variables, and to store vital information used in replay and processing of the file. The song name is a maximum 32 Chars long ASCII string. It need not be NULL-terminated. Number of instruments indicates the number of instruments used in the song, it may range from 0 to 65535. At present version number, however, there may be maximum 255 instruments in one song. Number of positions reflects the actual length of the song, that is; how many patterns that will be played during a complete cycle. This number may vary from 0 to 65535. Number of patterns, on the other side, reflects how many _different_ patterns that will be played during the song. This number is used to calculate the total length (in bytes) of the song. The Overall Volume factor is used to compute the final volume of all channels after the individual channel-volumes have been figured out. In this way it is easy to control the loudness of the music from the program/ song itself. Default speed is the number of VBlank frames between each pattern position change, and is as default set to 0006h. The packed field consists of these bits (right to left order): Bit Meaning 0 1 Default -P 0 Filter flag. Filter off. Filter on. 0 1 Timing method. VBlank. CIA timing (BPM). 0 2 File type. Module. Song (no instruments). 0 3 Packstatus. Packed patterns. Raw patterns. 1 4 Length flag. Equal pattern length. Variable pattern length. 0 5 Voices flag. 4 voices. 8 voices. 0 6 Sample res. 8 bit. 16 bit. 0 7 *Reserved*  x 8 *Reserved*  x 9 *Reserved*  x 10 *Reserved*  x 11 *Reserved*  x 12 *Reserved*  x 13 *Reserved*  x 14 *Reserved*  x 15 *Reserved*  x -P There can be at most one "INFO" chunk in a Protracker musicfile. This chunk is vital; it _must_ be present for the replay routine to function properly. ** Contents of Chunk "INST": OFFSET Length Contents Meaning -P 0 4 "INST" Chunk identifier. 4 4 ? Chunk length (in bytes). 8 32 [..??..] Instrument name (string). 40 2 ? Length of instrument (word). 42 2 ? Instrument loop start (word). 44 2 ? Instrument loop length (word). 46 2 ? Instrument volume (word). 48 2 ? Instrument finetuning (integer). -P The "INST" chunk is used to store information about an instruments propertiejs, such as length and volume. The instrument name is a maximum 32 Chars long ASCII string. It need not be NULL-terminated. The Length field describes the length of the instrument (in words) and thus ranges from 0 to 128Kb (65535 words). Instrument Loop Start sets the offset from which to start playing after the first replay. This value may vary from 0 to the instrument length. Instrument Loop End sets the length of the loop to play after the first replay, relative to the loop start value. It may thus vary from 0 to [Ins_len-Loop_start]. Instrument volume indicates which volume to use in the replay of the sample, if the song doesn't say differently. This value varies between 0 and 40h. Instrument finetuning sets the sample-rate correction difference and varies from -7 to 7 (0fff9 to 0007h). There may be any number of "INST" chunks in a Protracker music file, limited to the number of instruments actually used in the song. This chunk is not vital; it may be left out if the song-only bit of the control word in the "INFO" chunk is set. Otherwise, it should result in an error. ** Contents of Chunk "PPOS": OFFSET Length Contents Meaning -P 0 4 "PPOS" Chunk identifier. 4 4 0ffh Chunk length (in bytes). 8 256 [..??..] Pattern position table. -P This chunk contains the table defining which pattern to play in a given song- position. Each entry in the table is a byte indicating which out of 256 possible patterns to play. There may be at maximum one "PPOS" chunk in a Protracker musicfile. This chunk is vital; it _must_ be present to play the song. ** Contents of Chunk "PTRN": OFFSET Length Contents Meaning -P 0 4 "PTRN" Chunk identifier. 4 4 ? Chunk length (in bytes). 8 32 [..??..] Pattern name. 40 ? [..??..] Pattern data. -P This chunk is used in a module of variable pattern length. The chunk must thus appear as many times as there are patterns in the song. The chunk length divided by 8 ( >>3 ) will show the pattern length (default 64). Pattern name is a 32 byte long ASCII string, describing the pattern, eg. "Intro part 3". It need not be NULL-terminated. This chunk is critical; it must be present in the file, or it will be regarded invalid. NOTE: This chunk is not in use in the present version (3.01B), and will be ignored if found. ** Contents of Chunk "SMPL": OFFSET Length Contents Meaning -P 0 4 "SMPL" Chunk identifier. 4 4 ? Chunk length (!in bytes!). 8 ? [..??..] Raw sample data. -P The "SMPL" chunk contains the raw sample data of an instrument. This chunk is not critical; if the song-only bit of the "INFO" chunk is set, it may be obmitted. If, however, the file is a module, then the number of "SMPL" chunks in the file must be equal to or greater than the number of instruments used in the song. If not, the file will be regarded incomplete. ** Contents of Chunk "CMNT": OFFSET Length Contents Meaning -P 0 4 "CMNT" Chunk identifier. 4 4 ? Chunk length (in bytes). 8 ? [..??..] Raw ASCII text. -P The "CMNT" chunk is used for a signature, comments, greetings, date of completion or whatever information the composer wishes to include with his or hers creation. This chunks is not critical; it may be left out and will typically be ignored by most applications. These are the chunks that may appear in a Protracker musicfile. If other chunks are encountered, they will be ignored. Any program dealing with this fileformat should perform tests to determine the validity of the file in consideration. Using the Protracker.library will guarantee correct handling of musicfiles, and we strongly encourage the use of this runtime shared library instead of hacking away on your own. Look elsewhere on this disk for the library documentation, the library can be found in the "LIBS/" directory. The sequenti al format - In this section we will describe how the various chunks are expected to be located within the file. These rules _must_ be followed or it will wreak havoc when tried manipulated with inside Protracker. Here comes the header in table form: OFFSET Length Contents Meaning -P 0 4 "FORM" Indicate start of IFF file. 4 4 ? File length. 8 4 "MODL" IFF type identifier. -O This header must be found in the start of the file, or it will be rejected as not being a Protracker musicfile. From offset 12 in the file, things may vary somewhat. The only rules are these: After a "INST" chunk a "SMPL" or a new "INST" chunk _must_ follow. This "SMPL" chunk will be regarded as the sample data of the instrument(s) preceding it. If after a "INST" chunk another "INST" chunk follows, and the module-flag in the "INFO" chunk is set, then all "INST" chunks following each other will share the same sampledata found in the first "SMPL" chunk after them. Also, all "INST" and "SMPL" chunks must be found in sequence. That is, when a "INST" chunk is found for the first time in a file, all other "INST" and "SMPL" chunks must follow. If this is not so, an error message should be given, and processing terminated. Note that in a song-only file, no "SMPL" chunks should be included. If any "SMPL" chunks are encountered in such a file, they should be ignored and a warning given. All other chunks used in a musicfile may be located anywhere in the file, usually in the beginning of it, but no assumptions of their locations should be taken. Note that all used chunks _must_ be found _before_ the "BODY" chunk, which is the last chunk to be found in the file. Searching for chunks should stop when encountering a "BODY" chunk. The "BODY" chunk is constructed like this: OFFSET Length Contents Meaning -P 0 4 "BODY" Chunk identifier. 4 4 ? Chunk length (in bytes). 8 ? [..??..] Raw pattern data. -O Chunk summary - Now follows a list of the chunks that have meaning in a Protracker musicfile: Chunk Function  Critical? -O "VERS" Contains information about the producer of the file. No "INFO" Contains vital information and standard settings. Yes "INST" Information about instruments; such as length, volume etc. Yes "SMPL" Raw sample data associated with one or more instruments. No "PPOS" Position table. Information about patternsequence. Yes "CMNT" Comments, greetings etc. Contains information in ASCII code. No "PTRN" Pattern data. Used only in modules of varying patternlengths. Yes "BODY" Pattern data. Used in modules of equal patternlengths (default). Yes -O /* End Of File */  THiZ FiLE WAZ DOWNLOADED FROM FiDONET 2:200/600.34 /\ . /\ * . MeGaNeT 66:666/1 . * . / \ . / \ . / \ + / \ . + / / \ / \ + I.C.S Swedish HQ /\ \ / . / \ / . Sync World HQ . / \ \/ / /\/ . \ / / \ \/ + * \ / + . \ \ . . . . \ / \ / SysOp: Troed \/ARCASTIC \/XISTENCE CoSysOp: Zaphod B +46-(0)451-91002 +46-(0)451-91002 +46-(0)451-91002 +46-(0)451-91002 =-=-=-=-=-=-=-=-=-=-=-= USRobotics 16800 DUAL STANDARD =-=-=-=-=-=-=-=-=-=-= Supporting: Atari ST/STE/MSTE/TT/ATW/Falcon030/Super Nintendo/Copiers TextPHiLES: Motorola/Texas Instrument/Phreaking/Hacking/Anarchy/Perverse Diff Info/Fuzzy Logic/Science/Hardwalre Hackz/ up-to-YOU! .oO ACTIVE USERS FROM MORE THAN 14 DIFFERENT COUNTRIES! Oo. DiRECT LiNK TO USA/GERMANY/LUXEMBOURG F0R *FAST* STuFF! +46-(0)451-91002 +46-(0)451-91002 +46-(0)451-91002 +46-(0)451-91002 < Advertisment added using -=Bad Ad=- 1.90 by Troed/Sync. BBS: +46-451-91002 > -2 18:00:52 - 09.02.1993 - n*A *  Protracker 3.00B playroutine * * Written by Tom "Outland" Bech, Ivar "Heatseeker" J. Olsen, * * and Bjarte "Krest" Andreassen of Cryptoburners. * * Based upon Protracker 1.1A playroutine written by Lars Hamre. * * VBlank version. Not optimised in any way. * *A * Call pt_InitMusic before start. Then call pt_PlayMusic at VB. * * To stop the music, call pt_StopMusic. * * Please note that in this version, all SetTempo commands are * * ignored. This assembly language program has been tested with * * the Devpac 3.02, AsmOne 1.2, MCAsm 1.5 and a68k assemblers and* * may have to be modified for other assemblers. * *A ; FileFormat offsets sd_songname EQU 0 ;songname offset sd_sampleinfo EQU 20 ;first sample starts here sd_numofpatt EQU 950 ;number of patterns are stored here sd_pattpos EQU 952 ;pattern positions table is here sd_mahokakt EQU 1080 ;"M.K." :) sd_patterndata EQU 1084 ;first pattern starts at this position ; Song offsets. W/L/B means word/longword/byte length. n_note EQU 0 ;W n_cmd EQU 2 ;W n_cmdlo EQU 3 ;low B of cmd n_start EQU 4 ;L n_length EQU 8 ;W n_loopstart EQU 10 ;L n_replen EQU 14 ;W n_period EQU 16 ;W n_finetune EQU 18 ;B n_volume EQU 19 ;B n_dmabit EQU 20 ;W n_toneportdirec EQU 22 ;B n_toneportspeed EQU 23 ;B n_wantedperiod EQU 24 ;W n_vibratocmd EQU 26 ;B n_vibratopos EQU 27 ;B n_tremolocmd EQU 28 ;B n_tremolopos EQU 29 ;B n_wavecontrol EQU 30 ;B n_glissfunk EQU 31 ;B n_sampleoffset EQU 32 ;B n_pattpos EQU 33 ;B n_loopcount EQU 34 ;B n_funkoffset EQU 35 ;B n_wavestart EQU 36 ;L n_reallength EQU 40 ;W n_trigger EQU 42 ;B n_samplenum EQU 43 ;B pt_InitMusic MOVEM.L D0-D3/A0-A2,-(SP) LEA pt_data,a0 MOVE.L A0,pt_SongDataPtr LEA sd_pattpos(A0),A1 MOVEQ #128-1,D0 MOVEQ #0,D1 MOVEQ #0,D2 moveq #$1e,d3 pt_lop2 MOVE.B (A1)+,D1 CMP.B D2,D1 BLE.B pt_lop MOVE.L D1,D2 pt_lop DBRA D0,pt_lop2 ADDQ.W #1,d2 ASL.L #8,D2 ASL.L #2,D2 LEA 4(A1,D2.L),A2 LEA pt_SampleStarts(PC),A1 ADD.W #2*20+2,A0 ;find first sample length MOVEQ #31-1,D0 pt_lop3 MOVE.L A2,(A1)+ MOVEQ #0,D1 MOVE.W (A0),D1 ASL.L #1,D1 ADD.L D1,A2 ADD.L D3,A0 DBRA D0,pt_lop3 MOVE.B #6,pt_Speed ;default speed OR.B #2,$BFE001 MOVEQ #0,D0 LEA $DFF000,A0 MOVE.W D0,$A8(A0) MOVE.W D0,$B8(A0) MOVE.W D0,$C8(A0) MOVE.W D0,$D8(A0) CLR.B pt_SongPos CLR.B pt_Counter CLR.B pt_PattPos MOVEM.L (SP)+,D0-D3/A0-A2 RTS pt_StopMusic MOVEM.L D0/A0,-(SP) MOVEQ #0,D0 LEA $DFF000,A0 MOVE.W D0,$A8(A0) MOVE.W D0,$B8(A0) MOVE.W D0,$C8(A0) MOVE.W D0,$D8(A0) MOVE.W #$000F,$DFF096 ;stop AudioDMA activity MOVEM.L (SP)+,D0/A0 RTS pt_PlayMusic MOVEM.L D0-D7/A0-A6,-(SP) MOVE.L pt_SongDataPtr(PC),A0 ADDQ.L #1,pt_Counter MOVE.L pt_Counter(PC),D0 CMP.L pt_CurrSpeed(PC),D0 BLO.B pt_NoNewNote CLR.L pt_Counter TST.B pt_PattDelayTime2 BEQ.B pt_GetNewNote BSR.B pt_NoNewAllChannels BRA.W pt_dskip pt_NoNewNote BSR.B pt_NoNewAllChannels BRA.W pt_NoNewPositionYet pt_NoNewAllChannels LEA pt_audchan1temp(PC),A6 LEA $DFF0A0,A5 BSR.W pt_CheckEffects LEA pt_audchan2temp(PC),A6 LEA $DFF0B0,A5 BSR.W pt_CheckEffects LEA pt_audchan3temp(PC),A6 LEA $DFF0C0,A5 BSR.W pt_CheckEffects LEA pt_audchan4temp(PC),A6 LEA $DFF0D0,A5 BRA.W pt_CheckEffects pt_GetNewNote LEA 12(A0),A3 LEA sd_pattpos(A0),A2 LEA sd_patterndata(A0),A0 MOVEQ #0,D1 MOVE.L pt_SongPosition(PC),D0 MOVE.B 0(a2,D0.W),D1 ASL.L #8,D1 ;*1024 ASL.L #2,D1 ADD.L pt_PatternPosition(PC),D1 MOVE.L D1,pt_PatternPtr CLR.W pt_DMACONtemp LEA $DFF0A0,A5 LEA pt_audchan1temp(PC),A6 MOVEQ #1,D2 BSR.W pt_PlayVoice MOVEQ #0,D0 MOVE.B n_volume(A6),D0 MOVE.W D0,8(A5) LEA $DFF0B0,A5 LEA pt_audchan2temp(PC),A6 MOVEQ #2,D2 BSR.B pt_PlayVoice MOVEQ #0,D0 MOVE.B n_volume(A6),D0 MOVE.W D0,8(A5) LEA $DFF0C0,A5 LEA pt_audchan3temp(PC),A6 MOVEQ #3,D2 BSR.B pt_PlayVoice MOVEQ #0,D0 MOVE.B n_volume(A6),D0 MOVE.W D0,8(A5) LEA $DFF0D0,A5 LEA pt_audchan4temp(PC),A6 MOVEQ #4,D2 BSR.B pt_PlayVoice MOVEQ #0,D0 MOVE.B n_volume(A6),D0 MOVE.W D0,8(A5) BRA.W pt_SetDMA pt_CheckMetronome CMP.B pt_MetroChannel,D2 BNE.W pt_Return MOVE.B pt_MetroSpeed,D2 BEQ.W pt_Return MOVE.L pt_PatternPosition,D3 LSR.L #4,D3 DIVU D2,D3 SWAP D3 TST.W D3 BNE.W pt_Return AND.L #$0FFF,(A6) OR.L #$10D6F000,(A6) ;Play sample $1F at period $0D6 (214) RTS pt_PlayVoice TST.L (A6) BNE.B pt_plvskip BSR.W pt_PerNop pt_plvskip MOVE.L 0(a0,D1.L),(A6) ;Read one track from pattern BSR.B pt_CheckMetronome ADDQ.L #4,D1 MOVEQ #0,D2 MOVE.B n_cmd(A6),D2 ;Get lower 4 bits of instrument AND.B #$F0,D2 LSR.B #4,D2 MOVE.B (A6),D0 ;Get higher 4 bits of instrument AND.B #$F0,D0 OR.B D0,D2 TST.B D2 BEQ.B pt_SetRegisters ;Instrument was zero MOVEQ #0,D3 LEA pt_SampleStarts(PC),A1 MOVE D2,D4 MOVE.B D2,n_samplenum(A6) SUBQ.L #1,D2 LSL.L #2,D2 MULU #30,D4 MOVE.L 0(a1,D2.L),n_start(A6) MOVE.W 0(a3,D4.L),n_length(A6) MOVE.W 0(a3,D4.L),n_reallength(A6) MOVE.B 2(A3,D4.L),n_finetune(A6) MOVE.B 3(A3,D4.L),n_volume(A6) MOVE.W 4(A3,D4.L),D3 ;Get repeat TST.W D3 BEQ.B pt_NoLoop MOVE.L n_start(A6),D2 ;Get start ASL.W #1,D3 ADD.L D3,D2 ;Add repeat MOVE.L D2,n_loopstart(A6) MOVE.L D2,n_wavestart(A6) MOVE.W 4(A3,D4.L),D0 ;Get repeat ADD.W 6(A3,D4.L),D0 ;Add replen MOVE.W D0,n_length(A6) MOVE.W 6(A3,D4.L),n_replen(A6) ;Save replen BRA.B pt_SetRegisters pt_NoLoop MOVE.L n_start(A6),D2 ADD.L D3,D2 MOVE.L D2,n_loopstart(A6) MOVE.L D2,n_wavestart(A6) MOVE.W 6(A3,D4.L),n_replen(A6) ;Save replen pt_SetRegisters MOVE.W (A6),D0 AND.W #$0FFF,D0 BEQ.W pt_CheckMoreEffects ;If no note -> MOVE.W 2(A6),D0 AND.W #$0FF0,D0 CMP.W #$0E50,D0 ;finetune? BEQ.B pt_DoSetFineTune MOVE.B 2(A6),D0 AND.B #$0F,D0 CMP.B #3,D0 ;TonePortamento? BEQ.B pt_ChkTonePorta CMP.B #5,D0 ;TonePortamento + VolSlide? BEQ.B pt_ChkTonePorta CMP.B #9,D0 ;Sample Offset? BNE.B pt_SetPeriod BSR.W pt_CheckMoreEffects BRA.B pt_SetPeriod pt_DoSetFineTune BSR.W pt_SetFineTune BRA.B pt_SetPeriod pt_ChkTonePorta BSR.W pt_SetTonePorta BRA.W pt_CheckMoreEffects pt_SetPeriod MOVEM.L D0-D1/A0-A1,-(SP) MOVE.W (A6),D1 AND.W #$0FFF,D1 LEA pt_PeriodTable(PC),A1 MOVEQ #0,D0 MOVEQ #$24,D7 pt_ftuloop CMP.W 0(a1,D0.W),D1 BHS.B pt_ftufound ADDQ.L #2,D0 DBRA D7,pt_ftuloop pt_ftufound MOVEQ #0,D1 MOVE.B n_finetune(A6),D1 MULU #37*2,D1 ADD.L D1,A1 MOVE.W 0(a1,D0.W),n_period(A6) MOVEM.L (SP)+,D0-D1/A0-A1 MOVE.W 2(A6),D0 AND.W #$0FF0,D0 CMP.W #$0ED0,D0 BEQ.W pt_CheckMoreEffects MOVE.W n_dmabit(A6),$DFF096 BTST #2,n_wavecontrol(A6) BNE.B pt_vibnoc CLR.B n_vibratopos(A6) pt_vibnoc BTST #6,n_wavecontrol(A6) BNE.B pt_trenoc CLR.B n_tremolopos(A6) pt_trenoc MOVE.W n_length(A6),4(A5) ;Set length MOVE.L n_start(A6),(A5) ;Set start BNE.B pt_sdmaskp CLR.L n_loopstart(A6) MOVEQ #1,D0 MOVE.W D0,4(A5) MOVE.W D0,n_replen(A6) pt_sdmaskp MOVE.W n_period(A6),D0 MOVE.W D0,6(A5) ;Set period ST n_trigger(A6) MOVE.W n_dmabit(A6),D0 OR.W D0,pt_DMACONtemp BRA.W pt_CheckMoreEffects pt_SetDMA move.b pt_timeout,$bfe701 ;TimerB HI move.b pt_timeout+1,$bfe601 ;TimerB LO move.b #%011001,$bfef01 ;set commandbits: OneShot & CLK & Start pt_timerwait1 btst #0,$bfef01 ;timeout on timerB? (ICR TimerB) bne.s pt_timerwait1 ;nope... MOVE.W pt_DMACONtemp,D0 AND.W pt_ActiveChannels,D0 ;mask out inactive channels OR.W #$8000,D0 MOVE.W D0,$DFF096 move.b pt_timeout,$bfe701 ;TimerB HI move.b pt_timeout+1,$bfe601 ;TimerB LO move.b #%011001,$bfef01 ;set commandbits: OneShot & CLK & Start pt_timerwait2 btst #0,$bfef01 ;timeout on timerB? (ICR TimerB) bne.s pt_timerwait2 ;nope... LEA $DFF000,A5 LEA pt_audchan4temp(PC),A6 MOVE.L n_loopstart(A6),$D0(A5) MOVE.W n_replen(A6),$D4(A5) LEA pt_audchan3temp(PC),A6 MOVE.L n_loopstart(A6),$C0(A5) MOVE.W n_replen(A6),$C4(A5) LEA pt_audchan2temp(PC),A6 MOVE.L n_loopstart(A6),$B0(A5) MOVE.W n_replen(A6),$B4(A5) LEA pt_audchan1temp(PC),A6 MOVE.L n_loopstart(A6),$A0(A5) MOVE.W n_replen(A6),$A4(A5) pt_dskip ADD.L #16,pt_PatternPosition MOVE.B pt_PattDelayTime,D0 BEQ.B pt_dskpc MOVE.B D0,pt_PattDelayTime2 CLR.B pt_PattDelayTime pt_dskpc TST.B pt_PattDelayTime2 BEQ.B pt_dskpa SUBQ.B #1,pt_PattDelayTime2 BEQ.B pt_dskpa SUB.L #16,pt_PatternPosition pt_dskpa TST.B pt_PBreakFlag BEQ.B pt_nnpysk SF pt_PBreakFlag MOVEQ #0,D0 MOVE.B pt_PBreakPosition(PC),D0 LSL.W #4,D0 MOVE.L D0,pt_PatternPosition CLR.B pt_PBreakPosition pt_nnpysk CMP.L #1024,pt_PatternPosition BNE.B pt_NoNewPositionYet pt_NextPosition MOVEQ #0,D0 MOVE.B pt_PBreakPosition(PC),D0 LSL.W #4,D0 MOVE.L D0,pt_PatternPosition CLR.B pt_PBreakPosition CLR.B pt_PosJumpAssert ADDQ.L #1,pt_SongPosition AND.L #$7F,pt_SongPosition MOVE.L pt_SongPosition(PC),D1 MOVE.L pt_SongDataPtr(PC),A0 CMP.B sd_numofpatt(A0),D1 BLO.B pt_NoNewPositionYet CLR.L pt_SongPosition pt_NoNewPositionYet TST.B pt_PosJumpAssert BNE.B pt_NextPosition MOVEM.L (SP)+,D0-D7/A0-A6 RTS pt_CheckEffects BSR.B pt_chkefx2 MOVEQ #0,D0 MOVE.B n_volume(A6),D0 MOVE.W D0,8(A5) RTS pt_chkefx2 BSR.W pt_UpdateFunk MOVE.W n_cmd(A6),D0 AND.W #$0FFF,D0 BEQ.B pt_Return MOVE.B n_cmd(A6),D0 AND.B #$0F,D0 TST.B D0 BEQ.B pt_Arpeggio CMP.B #1,D0 BEQ.W pt_PortaUp CMP.B #2,D0 BEQ.W pt_PortaDown CMP.B #3,D0 BEQ.W pt_TonePortamento CMP.B #4,D0 BEQ.W pt_Vibrato CMP.B #5,D0 BEQ.W pt_TonePlusVolSlide CMP.B #6,D0 BEQ.W pt_VibratoPlusVolSlide CMP.B #$E,D0 BEQ.W pt_ECommands pt_SetBack MOVE.W n_period(A6),6(A5) CMP.B #7,D0 BEQ.W pt_Tremolo CMP.B #$A,D0 BEQ.W pt_VolumeSlide pt_Return RTS pt_PerNop MOVE.W n_period(A6),6(A5) RTS pt_Arpeggio MOVEQ #0,D0 MOVE.L pt_Counter(PC),D0 DIVS #3,D0 SWAP D0 CMP.W #1,D0 BEQ.B pt_Arpeggio1 CMP.W #2,D0 BEQ.B pt_Arpeggio2 pt_Arpeggio0 MOVE.W n_period(A6),D2 BRA.B pt_ArpeggioSet pt_Arpeggio1 MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 LSR.B #4,D0 BRA.B pt_ArpeggioFind pt_Arpeggio2 MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 AND.B #15,D0 pt_ArpeggioFind ASL.W #1,D0 MOVEQ #0,D1 MOVE.B n_finetune(A6),D1 MULU #37*2,D1 LEA pt_PeriodTable(PC),A0 ADD.L D1,A0 MOVEQ #0,D1 MOVE.W n_period(A6),D1 MOVEQ #$24,D7 pt_arploop MOVE.W 0(a0,D0.W),D2 CMP.W (A0),D1 BHS.B pt_ArpeggioSet ADDQ.L #2,A0 DBRA D7,pt_arploop RTS pt_ArpeggioSet MOVE.W D2,6(A5) RTS pt_FinePortaUp TST.L pt_Counter BNE.B pt_Return MOVE.B #$0F,pt_LowMask pt_PortaUp MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 AND.B pt_LowMask,D0 MOVE.B #$FF,pt_LowMask SUB.W D0,n_period(A6) MOVE.W n_period(A6),D0 AND.W #$0FFF,D0 CMP.W #$0071,D0 BPL.B pt_PortaUskip AND.W #$F000,n_period(A6) OR.W #$0071,n_period(A6) pt_PortaUskip MOVE.W n_period(A6),D0 AND.W #$0FFF,D0 MOVE.W D0,6(A5) RTS pt_FinePortaDown TST.L pt_Counter BNE.W pt_Return MOVE.B #$0F,pt_LowMask pt_PortaDown CLR.W D0 MOVE.B n_cmdlo(A6),D0 AND.B pt_LowMask,D0 MOVE.B #$FF,pt_LowMask ADD.W D0,n_period(A6) MOVE.W n_period(A6),D0 AND.W #$0FFF,D0 CMP.W #$0358,D0 BMI.B pt_Portadskip AND.W #$F000,n_period(A6) OR.W #$0358,n_period(A6) pt_Portadskip MOVE.W n_period(A6),D0 AND.W #$0FFF,D0 MOVE.W D0,6(A5) RTS pt_SetTonePorta MOVE.L A0,-(SP) MOVE.W (A6),D2 AND.W #$0FFF,D2 MOVEQ #0,D0 MOVE.B n_finetune(A6),D0 MULU #37*2,D0 LEA pt_PeriodTable(PC),A0 ADD.L D0,A0 MOVEQ #0,D0 pt_StpLoop CMP.W 0(a0,D0.W),D2 BHS.B pt_StpFound ADDQ.W #2,D0 CMP.W #37*2,D0 BLO.B pt_StpLoop MOVEQ #35*2,D0 pt_StpFound MOVE.B n_finetune(A6),D2 AND.B #8,D2 BEQ.B pt_StpGoss TST.W D0 BEQ.B pt_StpGoss SUBQ.W #2,D0 pt_StpGoss MOVE.W 0(a0,D0.W),D2 MOVE.L (SP)+,A0 MOVE.W D2,n_wantedperiod(A6) MOVE.W n_period(A6),D0 CLR.B n_toneportdirec(A6) CMP.W D0,D2 BEQ.B pt_ClearTonePorta BGE.W pt_Return MOVE.B #1,n_toneportdirec(A6) RTS pt_ClearTonePorta CLR.W n_wantedperiod(A6) RTS pt_TonePortamento MOVE.B n_cmdlo(A6),D0 BEQ.B pt_TonePortNoChange MOVE.B D0,n_toneportspeed(A6) CLR.B n_cmdlo(A6) pt_TonePortNoChange TST.W n_wantedperiod(A6) BEQ.W pt_Return MOVEQ #0,D0 MOVE.B n_toneportspeed(A6),D0 TST.B n_toneportdirec(A6) BNE.B pt_TonePortaUp pt_TonePortaDown ADD.W D0,n_period(A6) MOVE.W n_wantedperiod(A6),D0 CMP.W n_period(A6),D0 BGT.B pt_TonePortaSetPer MOVE.W n_wantedperiod(A6),n_period(A6) CLR.W n_wantedperiod(A6) BRA.B pt_TonePortaSetPer pt_TonePortaUp SUB.W D0,n_period(A6) MOVE.W n_wantedperiod(A6),D0 CMP.W n_period(A6),D0 BLT.B pt_TonePortaSetPer MOVE.W n_wantedperiod(A6),n_period(A6) CLR.W n_wantedperiod(A6) pt_TonePortaSetPer MOVE.W n_period(A6),D2 MOVE.B n_glissfunk(A6),D0 AND.B #$0F,D0 BEQ.B pt_GlissSkip MOVEQ #0,D0 MOVE.B n_finetune(A6),D0 MULU #37*2,D0 LEA pt_PeriodTable(PC),A0 ADD.L D0,A0 MOVEQ #0,D0 pt_GlissLoop CMP.W 0(a0,D0.W),D2 BHS.B pt_GlissFound ADDQ.W #2,D0 CMP.W #37*2,D0 BLO.B pt_GlissLoop MOVEQ #35*2,D0 pt_GlissFound MOVE.W 0(a0,D0.W),D2 pt_GlissSkip MOVE.W D2,6(A5) ;Set period RTS pt_Vibrato MOVE.B n_cmdlo(A6),D0 BEQ.B pt_Vibrato2 MOVE.B n_vibratocmd(A6),D2 AND.B #$0F,D0 BEQ.B pt_vibskip AND.B #$F0,D2 OR.B D0,D2 pt_vibskip MOVE.B n_cmdlo(A6),D0 AND.B #$F0,D0 BEQ.B pt_vibskip2 AND.B #$0F,D2 OR.B D0,D2 pt_vibskip2 MOVE.B D2,n_vibratocmd(A6) pt_Vibrato2 MOVE.L A4,-(SP) MOVE.B n_vibratopos(A6),D0 LEA pt_VibratoTable(PC),A4 LSR.W #2,D0 AND.W #$001F,D0 MOVEQ #0,D2 MOVE.B n_wavecontrol(A6),D2 AND.B #$03,D2 BEQ.B pt_vib_sine LSL.B #3,D0 CMP.B #1,D2 BEQ.B pt_vib_rampdown MOVE.B #255,D2 BRA.B pt_vib_set pt_vib_rampdown TST.B n_vibratopos(A6) BPL.B pt_vib_rampdown2 MOVE.B #255,D2 SUB.B D0,D2 BRA.B pt_vib_set pt_vib_rampdown2 MOVE.B D0,D2 BRA.B pt_vib_set pt_vib_sine MOVE.B 0(A4,D0.W),D2 pt_vib_set MOVE.B n_vibratocmd(A6),D0 AND.W #15,D0 MULU D0,D2 LSR.W #7,D2 MOVE.W n_period(A6),D0 TST.B n_vibratopos(A6) BMI.B pt_VibratoNeg ADD.W D2,D0 BRA.B pt_Vibrato3 pt_VibratoNeg SUB.W D2,D0 pt_Vibrato3 MOVE.W D0,6(A5) MOVE.B n_vibratocmd(A6),D0 LSR.W #2,D0 AND.W #$003C,D0 ADD.B D0,n_vibratopos(A6) MOVE.L (SP)+,A4 RTS pt_TonePlusVolSlide BSR.W pt_TonePortNoChange BRA.W pt_VolumeSlide pt_VibratoPlusVolSlide BSR.B pt_Vibrato2 BRA.W pt_VolumeSlide pt_Tremolo MOVE.L A4,-(SP) MOVE.B n_cmdlo(A6),D0 BEQ.B pt_Tremolo2 MOVE.B n_tremolocmd(A6),D2 AND.B #$0F,D0 BEQ.B pt_treskip AND.B #$F0,D2 OR.B D0,D2 pt_treskip MOVE.B n_cmdlo(A6),D0 AND.B #$F0,D0 BEQ.B pt_treskip2 AND.B #$0F,D2 OR.B D0,D2 pt_treskip2 MOVE.B D2,n_tremolocmd(A6) pt_Tremolo2 MOVE.B n_tremolopos(A6),D0 LEA pt_VibratoTable(PC),A4 LSR.W #2,D0 AND.W #$001F,D0 MOVEQ #0,D2 MOVE.B n_wavecontrol(A6),D2 LSR.B #4,D2 AND.B #$03,D2 BEQ.B pt_tre_sine LSL.B #3,D0 CMP.B #1,D2 BEQ.B pt_tre_rampdown MOVE.B #255,D2 BRA.B pt_tre_set pt_tre_rampdown TST.B n_vibratopos(A6) BPL.B pt_tre_rampdown2 MOVE.B #255,D2 SUB.B D0,D2 BRA.B pt_tre_set pt_tre_rampdown2 MOVE.B D0,D2 BRA.B pt_tre_set pt_tre_sine MOVE.B 0(A4,D0.W),D2 pt_tre_set MOVE.B n_tremolocmd(A6),D0 AND.W #15,D0 MULU D0,D2 LSR.W #6,D2 MOVEQ #0,D0 MOVE.B n_volume(A6),D0 TST.B n_tremolopos(A6) BMI.B pt_TremoloNeg ADD.W D2,D0 BRA.B pt_Tremolo3 pt_TremoloNeg SUB.W D2,D0 pt_Tremolo3 BPL.B pt_TremoloSkip CLR.W D0 pt_TremoloSkip CMP.W #$40,D0 BLS.B pt_TremoloOk MOVE.W #$40,D0 pt_TremoloOk MOVE.W D0,8(A5) MOVE.B n_tremolocmd(A6),D0 LSR.W #2,D0 AND.W #$003C,D0 ADD.B D0,n_tremolopos(A6) MOVE.L (SP)+,A4 ADDQ.L #4,SP RTS pt_SampleOffset MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 BEQ.B pt_sononew MOVE.B D0,n_sampleoffset(A6) pt_sononew MOVE.B n_sampleoffset(A6),D0 LSL.W #7,D0 CMP.W n_length(A6),D0 BGE.B pt_sofskip SUB.W D0,n_length(A6) LSL.W #1,D0 ADD.L D0,n_start(A6) RTS pt_sofskip MOVE.W #1,n_length(A6) RTS pt_VolumeSlide MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 LSR.B #4,D0 TST.B D0 BEQ.B pt_VolSlideDown pt_VolSlideUp ADD.B D0,n_volume(A6) CMP.B #$40,n_volume(A6) BMI.B pt_vsuskip MOVE.B #$40,n_volume(A6) pt_vsuskip MOVE.B n_volume(A6),D0 RTS pt_VolSlideDown MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 pt_VolSlideDown2 SUB.B D0,n_volume(A6) BPL.B pt_vsdskip CLR.B n_volume(A6) pt_vsdskip MOVE.B n_volume(A6),D0 RTS pt_PositionJump MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 SUBQ.B #1,D0 MOVE.L D0,pt_SongPosition pt_pj2 CLR.B pt_PBreakPosition ST pt_PosJumpAssert RTS pt_VolumeChange MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 CMP.B #$40,D0 BLS.B pt_VolumeOk MOVEQ #$40,D0 pt_VolumeOk MOVE.B D0,n_volume(A6) RTS  pt_PatternBreak MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 MOVE.L D0,D2 LSR.B #4,D0 MULU #10,D0 AND.B #$0F,D2 ADD.B D2,D0 CMP.B #63,D0 BHI.B pt_pj2 MOVE.B D0,pt_PBreakPosition ST pt_PosJumpAssert RTS pt_SetSpeed MOVE.B 3(A6),D0 AND.W #$FF,D0 BEQ.B pt_SpeedNull ; CMP.W #32,D0 ;change this for lev6/CIA users ; BLO.B normspd ;it updates the countervalues (Tempo) ; MOVE.W D0,RealTempo ;for the BPM timer ; MOVEM.L D0-D7/A0-A6,-(SP) ; ST UpdateTempo ; JSR SetTempo ; MOVEM.L (SP)+,D0-D7/A0-A6 ; RTS pt_normspd CLR.L pt_Counter MOVE.W D0,pt_CurrSpeed+2 RTS pt_SpeedNull RTS pt_CheckMoreEffects MOVE.B 2(A6),D0 AND.B #$0F,D0 CMP.B #$9,D0 BEQ.W pt_SampleOffset CMP.B #$B,D0 BEQ.W pt_PositionJump CMP.B #$D,D0 BEQ.B pt_PatternBreak CMP.B #$E,D0 BEQ.B pt_ECommands CMP.B #$F,D0 BEQ.B pt_SetSpeed CMP.B #$C,D0 BEQ.W pt_VolumeChange BRA.W pt_PerNop pt_ECommands MOVE.B n_cmdlo(A6),D0 AND.B #$F0,D0 LSR.B #4,D0 BEQ.B pt_FilterOnOff CMP.B #1,D0 BEQ.W pt_FinePortaUp CMP.B #2,D0 BEQ.W pt_FinePortaDown CMP.B #3,D0 BEQ.B pt_SetGlissControl CMP.B #4,D0 BEQ.W pt_SetVibratoControl CMP.B #5,D0 BEQ.W pt_SetFineTune CMP.B #6,D0 BEQ.W pt_JumpLoop CMP.B #7,D0 BEQ.W pt_SetTremoloControl CMP.B #8,D0 BEQ.W pt_KarplusStrong CMP.B #$E,D0 BEQ.W pt_PatternDelay CMP.B #9,D0 BEQ.W pt_RetrigNote CMP.B #$A,D0 BEQ.W pt_VolumeFineUp CMP.B #$B,D0 BEQ.W pt_VolumeFineDown CMP.B #$C,D0 BEQ.W pt_NoteCut CMP.B #$D,D0 BEQ.W pt_NoteDelay CMP.B #$F,D0 BEQ.W pt_FunkIt RTS pt_FilterOnOff MOVE.B n_cmdlo(A6),D0 AND.B #1,D0 ASL.B #1,D0 AND.B #$FD,$BFE001 OR.B D0,$BFE001 RTS pt_SetGlissControl MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 AND.B #$F0,n_glissfunk(A6) OR.B D0,n_glissfunk(A6) RTS pt_SetVibratoControl MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 AND.B #$F0,n_wavecontrol(A6) OR.B D0,n_wavecontrol(A6) RTS pt_SetFineTune MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 MOVE.B D0,n_finetune(A6) RTS pt_JumpLoop TST.L pt_Counter BNE.W pt_Return MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 BEQ.B pt_SetLoop TST.B n_loopcount(A6) BEQ.B pt_jumpcnt SUB.B #1,n_loopcount(A6) BEQ.W pt_Return pt_jmploop MOVE.B n_pattpos(A6),pt_PBreakPosition ST pt_PBreakFlag RTS pt_jumpcnt MOVE.B D0,n_loopcount(A6) BRA.B pt_jmploop pt_SetLoop MOVE.L pt_PatternPosition,D0 LSR.L #4,D0 AND.B #63,D0 MOVE.B D0,n_pattpos(A6) RTS pt_SetTremoloControl MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 LSL.B #4,D0 AND.B #$0F,n_wavecontrol(A6) OR.B D0,n_wavecontrol(A6) RTS pt_KarplusStrong MOVEM.L D1-D2/A0-A1,-(SP) MOVE.L n_loopstart(A6),A0 MOVE.L A0,A1 MOVE.W n_replen(A6),D0 ADD.W D0,D0 SUBQ.W #2,D0 pt_karplop MOVE.B (A0),D1 EXT.W D1 MOVE.B 1(A0),D2 EXT.W D2 ADD.W D1,D2 ASR.W #1,D2 MOVE.B D2,(A0)+ DBRA D0,pt_karplop MOVE.B (A0),D1 EXT.W D1 MOVE.B (A1),D2 EXT.W D2 ADD.W D1,D2 ASR.W #1,D2 MOVE.B D2,(A0) MOVEM.L (SP)+,D1-D2/A0-A1 RTS pt_RetrigNote MOVE.L D1,-(SP) MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 BEQ.W pt_rtnend MOVE.L pt_Counter,D1 BNE.B pt_rtnskp MOVE.W n_note(A6),D1 AND.W #$0FFF,D1 BNE.W pt_rtnend MOVE.L pt_Counter,D1 pt_rtnskp DIVU D0,D1 SWAP D1 TST.W D1 BNE.W pt_rtnend pt_DoRetrg MOVE.W n_dmabit(A6),$DFF096 ;Audio DMA off MOVE.L n_start(A6),(A5) ;Set sampledata pointer MOVE.W n_length(A6),4(A5) ;Set length MOVE.W n_period(A6),6(A5) MOVEQ #0,D0 MOVE.B n_volume(A6),D0 move.b pt_timeout,$bfe701 ;TimerB HI move.b pt_timeout+1,$bfe601 ;TimerB LO move.b #%000011001,$bfef01 ;set commandbits: OneShot & CLK & Start pt_timerwait3 btst #0,$bfef01 ;timeout on timerB? (ICR TimerB) bne.s pt_timerwait3 ;nope... MOVE.W n_dmabit(A6),D0 BSET #15,D0 MOVE.W D0,$DFF096 move.b pt_timeout,$bfe701 ;TimerB HI move.b pt_timeout+1,$bfe601 ;TimerB LO move.b #%000011001,$bfef01 ;set commandbits: OneShot & CLK & Start pt_timerwait4 btst #0,$bfef01 ;timeout on timerB? (ICR TimerB) bne.s pt_timerwait4 ;nope... MOVE.L n_loopstart(A6),(A5) MOVE.L n_replen(A6),4(A5) pt_rtnend MOVE.L (SP)+,D1 RTS pt_VolumeFineUp TST.L pt_Counter BNE.W pt_Return MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 AND.B #$F,D0 BRA.W pt_VolSlideUp pt_VolumeFineDown TST.L pt_Counter BNE.W pt_Return MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 BRA.W pt_VolSlideDown2 pt_NoteCut MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 CMP.L pt_Counter,D0 BNE.W pt_Return CLR.B n_volume(A6) RTS pt_NoteDelay MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 CMP.L pt_Counter,D0 BNE.W pt_Return MOVE.W (A6),D0 AND.W #$0FFF,D0 BEQ.W pt_Return MOVE.L D1,-(SP) BRA.W pt_DoRetrg pt_PatternDelay TST.L pt_Counter BNE.W pt_Return MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 TST.B pt_PattDelayTime2 BNE.W pt_Return ADDQ.B #1,D0 MOVE.B D0,pt_PattDelayTime RTS pt_FunkIt TST.L pt_Counter BNE.W pt_Return MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 LSL.B #4,D0 AND.B #$0F,n_glissfunk(A6) OR.B D0,n_glissfunk(A6) TST.B D0 BEQ.W pt_Return pt_UpdateFunk MOVEM.L A0/D1,-(SP) MOVEQ #0,D0 MOVE.B n_glissfunk(A6),D0 LSR.B #4,D0 BEQ.B pt_funkend LEA pt_FunkTable(PC),A0 MOVE.B 0(a0,D0.W),D0 ADD.B D0,n_funkoffset(A6) BTST #7,n_funkoffset(A6) BEQ.B pt_funkend CLR.B n_funkoffset(A6) MOVE.L n_loopstart(A6),D0 MOVEQ #0,D1 MOVE.W n_replen(A6),D1 ADD.L D1,D0 ADD.L D1,D0 MOVE.L n_wavestart(A6),A0 ADDQ.L #1,A0 CMP.L D0,A0 BLO.B pt_funkok MOVE.L n_loopstart(A6),A0 pt_funkok MOVE.L A0,n_wavestart(A6) MOVEQ #-1,D0 SUB.B (A0),D0 MOVE.B D0,(A0) pt_funkend MOVEM.L (SP)+,A0/D1 RTS pt_FunkTable dc.b 0,5,6,7,8,10,11,13,16,19,22,26,32,43,64,128 pt_VibratoTable dc.b 0,24,49,74,97,120,141,161 dc.b 180,197,212,224,235,244,250,253 dc.b 255,253,250,244,235,224,212,197 dc.b 180,161,141,120,97,74,49,24 pt_PeriodTable ; -> Tuning 0 dc.w 856,808,762,720,678,640,604,570,538,508,480,453 dc.w 428,404,381,360,339,320,302,285,269,254,240,226 dc.w 214,202,190,180,170,160,151,143,135,127,120,113,0 ; -> Tuning 1 dc.w 850,802,757,715,674,637,601,567,535,505,477,450 dc.w 425,401,379,357,337,318,300,284,268,253,239,225 dc.w 213,201,189,179,169,159,150,142,134,126,119,113,0 ; -> Tuning 2 dc.w 844,796,752,709,670,632,597,563,532,502,474,447 dc.w 422,398,376,355,335,316,298,282,266,251,237,224 dc.w 211,199,188,177,167,158,149,141,133,125,118,112,0 ; -> Tuning 3 dc.w 838,791,746,704,665,628,592,559,528,498,470,444 dc.w 419,395,373,352,332,314,296,280,264,249,235,222 dc.w 209,198,187,176,166,157,148,140,132,125,118,111,0 ; -> Tuning 4 dc.w 832,785,741,699,660,623,588,555,524,495,467,441 dc.w 416,392,370,350,330,312,294,278,262,247,233,220 dc.w 208,196,185,175,165,156,147,139,131,124,117,110,0 ; -> Tuning 5 dc.w 826,779,736,694,655,619,584,551,520,491,463,437 dc.w 413,390,368,347,328,309,292,276,260,245,232,219 dc.w 206,195,184,174,164,155,146,138,130,123,116,109,0 ; -> Tuning 6 dc.w 820,774,730,689,651,614,580,547,516,487,460,434 dc.w 410,387,365,345,325,307,290,274,258,244,230,217 dc.w 205,193,183,172,163,154,145,137,129,122,115,109,0 ; -> Tuning 7 dc.w 814,768,725,684,646,610,575,543,513,484,457,431 dc.w 407,384,363,342,323,305,288,272,256,242,228,216 dc.w 204,192,181,171,161,152,144,136,128,121,114,108,0 ; -> Tuning -8 dc.w 907,856,808,762,720,678,640,604,570,538,508,480 dc.w 453,428,404,381,360,339,320,302,285,269,254,240 dc.w 226,214,202,190,180,170,160,151,143,135,127,120,0 ; -> Tuning -7 dc.w 900,850,802,757,715,675,636,601,567,535,505,477 dc.w 450,425,401,379,357,337,318,300,284,268,253,238 dc.w 225,212,200,189,179,169,159,150,142,134,126,119,0 ; -> Tuning -6 dc.w 894,844,796,752,709,670,632,597,563,532,502,474 dc.w 447,422,398,376,355,335,316,298,282,266,251,237 dc.w 223,211,199,188,177,167,158,149,141,133,125,118,0 ; -> Tuning -5 dc.w 887,838,791,746,704,665,628,592,559,528,498,470 dc.w 444,419,395,373,352,332,314,296,280,264,249,235 dc.w 222,209,198,187,176,166,157,148,140,132,125,118,0 ; -> Tuning -4 dc.w 881,832,785,741,699,660,623,588,555,524,494,467 dc.w 441,416,392,370,350,330,312,294,278,262,247,233 dc.w 220,208,196,185,175,165,156,147,139,131,123,117,0 ; -> Tuning -3 dc.w 875,826,779,736,694,655,619,584,551,520,491,463 dc.w 437,413,390,368,347,328,309,292,276,260,245,232 dc.w 219,206,195,184,174,164,155,146,138,130,123,116,0 ; -> Tuning -2 dc.w 868,820,774,730,689,651,614,580,547,516,487,460 dc.w 434,410,387,365,345,325,307,290,274,258,244,230 dc.w 217,205,193,183,172,163,154,145,137,129,122,115,0 ; -> Tuning -1 dc.w 862,814,768,725,684,646,610,575,543,513,484,457 dc.w 431,407,384,363,342,323,305,288,272,256,242,228 dc.w 216,203,192,181,171,161,152,144,136,128,121,114,0 pt_audchan1temp dc.l 0,0,0,0,0,$00010000,0,0,0,0,0 pt_audchan2temp dc.l 0,0,0,0,0,$00020000,0,0,0,0,0 pt_audchan3temp dc.l 0,0,0,0,0,$00040000,0,0,0,0,0 pt_audchan4temp dc.l 0,0,0,0,0,$00080000,0,0,0,0,0 pt_SampleStarts dcb.l 31,0 pt_tixmeout dc.w 330 ;CIA-B timeout-value pt_Counter dc.l 0 pt_CurrSpeed dc.l 6 pt_PattPos dc.w 0 pt_DMACONtemp dc.w 0 pt_ActiveChannels dc.w %01 pt_PatternPtr dc.l 0 pt_PatternPosition dc.l 0 pt_SongPosition dc.l 0 pt_SongDataPtr dc.l 0 pt_MetroSpeed dc.b 0 pt_MetroChannel dc.b 0 pt_Speed dc.b 6 pt_SongPos dc.b 0 pt_PBreakPosition dc.b 0 pt_PosJumpAssert dc.b 0 pt_PBreakFlag dc.b 0 pt_LowMask dc.b 0 pt_PattDelayTime dc.b 0 pt_PattDelayTime2 dc.b 0 even  *8 *   Protracker 3.01 * *4 This is a upgrade of ProTracker 1.3/2.0B, and is not based on PT's released after the original release of PT1.3 by Amiga Freelancers, therefore you may find features implemented in Pre PT1.3 releases that this version lacks. However we hope that you'll find this release better than the other PT's around :) We will ship new releases as soon as bugs are fixed, and new features are implemented. Final release is scheduled to the Easter of '93. ProTracker 3.01 was developed from April '92 to January '93 by Ivar Just Olsen, Tom Bech and Bjarte Andreassen. Thanks to these people without whom this program would not have been possible: For demonstration music: Gregorian3 by Krest and Vortex, EX-T-Sheep by Vortex. Amiga Freelancers (especially Lars Hamre) for releasing the Sourcecode of PT1.3/2.0B, Janne S. for numerous suggestions and bugreports, Guardian for testing PT on his NTSC '040 Amiga, ALFred and U4IA for moral support :), Arild "WindWalker" Gjerd for letting us borrow his 50MHz '030 for development, Vishnu for help on the AGA chipset and last but not least a special regard to the rest of our friends in CryptoBurners. We would also like to send our regards to our crew of betatesters! History: o PowerPacker support. Powerpacker.library must be present in the "sys:libs/" directory. Version needed: 35.000 or higher. It is however recommended that you have at least 1MB to use this feature with large modules. Note that this feature will probably be replaced by xpk.library later. o Protracker rearranged to MEDRES (or HIRES perhaps? Hi Buddha! :) 640x200x3. o Format now works with dfx. Remember to specify which drive to format in the "path" string-gadget. o MIDI has been kicked out. o "SpectrumAnalyzer" has been kicked out. o Protracker now works on Kickstart 2.04 and higher (SCS/ECS). o Memory display now displays all memorytypes. o Improved input handler. PT will now live peacefully with Commodities. We hope. o Invented new fileformat based on Interchanged File Format (IFF) chunks. See docs elsewhere on this disk for a discussion of this format. o Hold record mode; waits for keypress before starting to record. o New filerequester. o Screen to back gadgets. You may also use Left Amiga + M/N. o Standalone playroutine supporting Finetune etc. Not fast though :( o Some speedups in the SampleEd. It was awfully slow at marking in MEDRES! o Scroll bars added here and there (but not everywhere ;) o New pointer! The old one was simply too big for the new resolution.. :) o Setupscreen revised and merged into one. o Date and time online at mainscreen. o Task interferance problems fixed (Improved multitasking). No busy waits. o The dragging routine in the sampler draws pixels instead of lines when dragging. o Major rearranging on mainscreen; editor centered and some new buttons for editing, such as cut/paste, up/down octave etc. o You may now click into the different tracks with the left mousebutton! :o o Audio.device channel allocation, to ensure that other programs doesn't mess with your tunes in a multitasking environment. o Chords editor with up to 7 notes. (Hi JanneS :) o PT now works in OS3.0 with AGA chipset (Hi Vishnu). o The sampler works again! ;) o Screen positioning (For people with TV's or multisync/flickerfixer) To do: o Implement the new fijleformat :) - Commands ranging from 0..0xFF (0..255). All commands that CAN run in paralell will do. Lotsa other commands (hi JanneS :). - #Samples and #patterns to word size, I hope it will do for a while! :) - Maximum sample size from 64Kb to 128Kb. It's there, why not use it? o Digital filters and noise-reduction in the Sampler. Planned filters include Lowpass, Highpass and Bandpass (FIR filters). Perhaps Graphic Equalizer too. o Seek zero/loop in sampler. o Fix bug in PLST; choosing [MOUNTL] causes hangup :( o Protracker.library for non-tech programmers wanting to use PT modules in their programs. o Pattern (position<->pattern) editor. o Save module as executable. o Add icon. o Load samples/instruments/patterns from an existing module. o Freehand sample-editing. o ASDR editor for channel modulation. o Optimise/Rewrite Playroutine. o Gain/Finished info when (Power)Packing. o Hypertext on-line help (a la Windows). o Serial comm. to other protrackers. o Fix bugs in general ;) Things you want, but won't get: o Splitting up each track of a pattern into a seperate "pattern", independent of the others. After having talked to many musicians, we all agreed this is all in vain. Nobody seems to be going to use it, due to the serious timing problems that will arise. Use SIDMON instead, if you're really anxious to use this feature ;) o 8 channels Protracker. The Amiga is designed for 4 voices, if this feature is to be implemented, the CPU has to mix the channels realtime, and will use all CPU DMA on lowend Amigas. Forget it. Use StarTrekker if you want it. o Intuition Protracker. Too much work :) maybe some sunny day... o Beer. o MIDI implementation. To get an acceptable sequencer, the entire program would have to be rewritten. Buy a decent MIDI sequencer instead!!! Don't report these known bugs: o Keyrepeat sometimes don't stop in pattern editor. o Turning off audio channels doesn't stop repeating instruments immediately. o Applications that do not allocate the timers properly, will cause the music to stop (eg. ProPlay20). However, this is _not_ ProTrackers fault; PT allocates the used timers gently :) As you see this is not really a bug, but we just want kill potential "bug reports" in birth ;) o PT3.01 does not run properly on Amigas with OS3.0 without AGA chip set. (Why run OS3.0 without AGA when there is almost no difference from OS2.0 when you don't have the AGA chipset) o PT sometimes doesn't work ;) o Load as 31/15 instruments modules, choosing CANCEL, leaves crap in the songname and instrument names. o Amiga + N. Use the gadgets located in the top right of the screen. o PT won't work with various, more or less shabby :), utilities such as screenblankers and likes. o Multitasking problems of various character :) -O Protracker 3.01 has been successfully tested on A/B/C2000 (OS1.2 to OS2.04), A500 (OS1.2 to 2.04), A500+ (OS2.0) and A3000 (OS2.0). All 680x0 CPU's tested. We reccomend that you do not crunch your PT with Imploder/PowerPacker or likes if your Amiga has got MC68040 CPU, due to severe problems with the Code/Data- Cache(s). Tested with MMU too, but not with virtual memory, so be careful if you have got VM-System. All machines were tested with and without HardDisk (except the A3000). Not tested on A4000 and A1200 but should work anyways. Not tested on animals. The authors are not responsible for any damage or loss of data as a result of using this program. This program may not be included in PD libraries or likes without written permission from the authors. Also, your charges for this program may not exceed the expences for disks and postage. You may only spread this program if you include all files on this disk. Contact one of the authors (see below) if you have questions in this direction. -O Please send bugreports and suggestions to the internet account (E-Mail): db62@hp825.bih.no. Please do not flame the account for other reasons, ok? :) The bugreport should include full description of your hardware and your startup- sequence and the sofware you were using when you discovered the bug. Bugreports on BackPlay 1.0B also, please :) We'd prefer that you direct most of the mail to Tom's E-Mail account, but if you don't have access to an Internet account (or E-Mail), or if you for any other reason want to contact one of the other authors, @then you may find the authors addresses below. We do not guarantie any answers, so if you enclose equipment, eg. disks, then don't expect to get them back. However, we will try to answer serious letters as far as we can. Please call our board Home Alone WHQ +477040305 - +4770297 and leave bugreports to Trixal CRB. Please direct all snail (eg. ordinary mail) concerning programming to Ivar. Contact addresses to the authors: Ivar "Olorin" Just Olsen Mobergslien N-5200 OS Norway Tom "Outland" Bech Sre Skogvei 73 N-5037 SOLHEIMSVIKEN Norway Bjarte "Krest" Andreassen Ltvetlia 12 N-5064 STRAUMSGREND Norway /* End of file */ iChanges from 3.00B to 3.01 = - Reads the devices mounted in the system instead of hardcoded ones - "Free" gadget fixed - Sample read/write fixed - Now gets the directory automagically when one is entered in the pathgadget - Fixed bug in chord editor. Sometimes caused division by zero. - Added adjust to chord editor; boosts the volume of the resulting sample to fit the original sample. - Screen adjust gadget is now working :) - Bug in runback fixed. - CIA allocation failures are now displayed. - Tools gadget removed. - Short keys for setup-items caused the switches to be displayed on the main screen. Not anymore :) - Drumpad likewise. - Several smaller bugs fixed. - Added a gadget on the dirscreen for fast browsing through the file type options. - New icon on the out-of-memory requesters :o - Some new gadgets are working! - Minor graphical changes - Decimal numbers on samplelength and loops A`~j `Pack-IceI *Lh,Lga*oMGLA "grѓg f``GP$]t***Ԋ**EL ;H ;C&NN&&Sj&n".扑&&SjN%a*d"ra$dCv !a"H@@Vҩ%QnNuf%Nurf%AQNuCtaTxr1 Hka1 Ag"CvtaTr1 HaBq jD`rptadpt?aBC@!!Q`R   ICE!g`IHL8q'z;!:GI.sj9@ejOv!*1K^3wo$gJ ̙bv ,8gzfyU&T 5 b:n!W/88ϵ zaaRu@Hz"&KBg`x?ؒtr'Gv$H J"EQiA`gڥvr ^"Hp5 W#=R@26DASA$Xrt6ƈgtRHHS, HE< 2̙C!~d&J BŶr0Xwp|6`=;3 Wḻ̌8.~gapg.!K5N!|_mbm`.#)^ zĵ N3E!d\7Adޜdԝ'd'^bsFKY78#| ZUfs[ 2< Q?4`fo$AX`a8S}@\Qc,Tc0nCJV;sh\#"<yY9 g`> 8f3^2hA޲X[|ˀo-e@|1AY&&!|G!* [ DYaF+HlwJ6L@NjPbR+TQV1|`X+6r>C<0<10BN`Q5OB:! 1iس0W_j̦51 3M=f-8fa- YAn`C|Y U BP* T$ (U,B048!P@p*^N3LR~HB4ُ̐xytp(o4V ƄWWCt+%1؂PaHX<98MYF[!jssh03Ssd#iI65U vh6#QٶV$gj2`R9D#3+$4|CC"/R|> &B(0 Є"D#C6I ОH!$ =s@s-.'8>@@6BB&DDDFFHHhJJmLLMNNPP6RR&TTDVVXXhZZm\\M^^``6bb&ddDffhhhjjmllMnnp:,DirOttMvvxx6zz&*Q|~~mM6&Dhuy6&Dhm1i|C@G}~' taFJUjKYMTazYШBaAYC#в24\wwAfc S 2.jmȈ\"`0 ZL0A݉~R@m>m2b2w`0'2 &Mg|2|@<apap>|8#z@BDCQQH]wr7 qa*d"za$dsv !a"H@@Vҩ%Qn'("|f%AQta_xQka+Ag"C vtaT5*1 HaBq jD`rptadpt?aBC@:!Q̸-RpaF wZFaD! ` y%1^RŏNV89fgЗpBF@ @8J & eY'P~!a1sqQ75`dⓂnv l $j1q1310f2=-11-92=pE-THEgEGAM/ s3DING CVEË-qd-HZ tG wRS"es8T"`Sc/G by= Prism whichT i 2placDyɮo h: rDoc]SJudwTredE52BTh!xxsQEah~*en y/WgleadiSynjCgyALTA8VMAX/ S/1.PEqu/oxKeopstarlionHemoroidsWStrg )Sink, Dieu_FUZ/PLICANTS (ORIONA8ELLFIRE) -andCf course to all other MF 3 guys Dg% TXc(aY?ƙ tG 0E&Xg&Is&YKu/(` fTfAHf4*  v a`?gL(U`jGxYHa,a u`KfR-H ke AސC n-> zJ $zG(zKʑtvxz|y-HPAo& P 4U Z @ U  x ū  _NuHL?T@X+cV#*T2n)cQֻD /^|Ju2}2f redrAM 87DB:KXޝK, #!p\eABƻKue@ Mҷ4J$:\xdWBsR1eeNv!J1kTe~Y2"z1  UO d12 bY2nm!-CP(x<:yc e6hXs[cɸ65C6608?i+NƬ=V֙BKCů6*%26[:?G?>s+JDk=|Bn1CXJ :nGBfB )wWI&,eD'j@H<қzEM#doD,|Uc|<@#hVI9jxLxSD g$дRQ e8,G>61<NF;|GRGDOG`/,pr\pl!p)X>`N<:8 FgJGk'e:zBVQ`Fd`: DE:6/-8_h VVE:`~:]:HG?`*n2Ng 6U~P*J.dfg =zY )LjQMH?LNu0'wc"Muzak-dri>8do0SSectaOnfromhdHeavuKillers M / haw GGp1S$~Z8{fLq?-xwqjd_YTPKGC?<852/*(&$" EPvug0 )1-RM%qKܲ)oS▬ɶm0[WJ\  k2ɒ: FanouIloveya!.Jedi-formybaby.g@%DPT AvڪP:6 PufZB U<8<@ 0( VG kL\<,w2p/p" x3xD x ~;w;`Jq 邻! j..Ⴘ J. J.B J YPAiA Ơ,2D( E@8= yJa *z 8M\-<*  rA L < d0$z! m̐2I&h / =qwQaBoP  u QPͦ (.j $ zmSTPAPL6#0}_5X‡wѬy,8z?@?*tnOV  qO>n̈́S!"}ܻ7 iD= osqވx[񆥃~ E9ljLx-~3s}a[#?$W[d ޟ6Qyl^u3d ä ?~LS}734^Q+*j7/.: jsߴ#>}Pp?{pDp;oà5MO];v1":?Ee7#:Z}}%aS %ro7 xf$@߿kn_<VS*X@쌓|羓|cGv0DFjďb<̲0Ml3e?d`j#;> +bf].#xf@phͧG9ی N Nއm dQ$KD?'Z p6{h2pAj@m\,ma> &j` v7uD"8yw-ddͤ\d538S5~A?K[c{0z֙֬,u3flpꙅ(z  06νg0փӀlx t5́ik  .1f-5% ]&cQu x M) I tlϟTnV'ҁ<܊^{e]>[>w:0ՀGB27{6=2һހox" _k23h͌4H@ms~->A&$?\4ݚqf6lƙk?кb|#gWFw>$`^p|DH¼֞ IfN5@fh\1/: # k? KO)hhbO0>0o-a|`<+9  +B @4fo{p>a;/jj38̟3=+w%)!r ZZ~[!T%00ywg)_ H9 󅵔~A_0Zx "EJJGCf;=lT6re@DV m } qT?*P*QF`a9 og_==+"355{.ob_ޏ\;+%|z)A~W?7x5xp+Y. z [P@YDP/Uٳˈ ;Lxx?UT/,"{ZR993_X6Kŧ0 XGaW <Ӈ(ݪVQ{ yOoUcL 7N*P/[ˌbXXsoBO8 AuVV~3{gԷ c w6 f^ ΍aN<y?rox{\T'r|sg 7~f0沮~cGApG88Ča$n:? [>K?3[lˣ7NϪE4~GV||-7SPO ;s#/_?{fރKgbwӾ`X={p߃WKw+r x7=%~އoSz~7I[zr{`h?o!],k vg^~~w> ;;;`}Y:˿r;WuŬ~{^O<'v>x^ ΧC'{~-2G?ٝv)9/~ݹ_8Kû > W9yw}>p@pf`c}???>?}sLPt| '|w=&ͧylnISF@w3V??lg_UH>gޏ|Q}PX ?>j?C|7adľ3a0;`3"'L7?o x܎a8B@y1&s'a2h\.xV>X$֦=??݊aI`=dm>DD{:Q.8w%}o32K[{g[$(??4JF^ɣZe}eB"Cߵx6 y/Y@AU4-j2Eր/p4p8 3 ?\7܍{oq{B<#*M},#}Iq=]78oY oP%B3b ѷp=}WrW!Y3 T @`As/􂳦L4zU12MǸ>+,a ɀF?W\8gq.P"(3qÖ7{pY``{j%#,pM\X8}Eq{$񿪮\pq?T.ܞ,q~* f:Y% ~tJ $@K@I8dp?gu M; %yʏ}a_?7yfS9O ݚeo M?$ܾ x :RV<0\*50ܟ)ПzmQd|`&y}g-OqϯLUAjU Kh+<ϕ*{5kG_w7TX K2} %3d6X4 }@ tz%>rޏW%(ܝ P|nQa?}I05t3[`Ui=' o>Mk2GB$}CZ]k}='{"p>g$=`Zפ I< WOV)tx( A3O@ރ* zևOy4x_P@*gi) <{)WTpޜy j% oS3s~$nvcڰ_-v{_|6(?@<?λϲmp?f|x]ր?pvcΜd%{`} wYgt$V@_+?㷿=>?{,|q,SX9^vD?k/ ^A`_tp}~ݘQ+8'yX90?DGJ N?ooKO?;>?sr P.269ח%'76|V_{{ɣ>}/S$><?ȿd>,La ߖqhJT]/oVW,)%~~j*US|x?'=yˏ` oF"x%;`?K?3}g <֩^O@ׇwaM`o,]mc@|~,<܆e4Y j?y?>~yq{3Tˆ%}|`w?08+f=ɧlafJO>>3a瀛nǞw࠳Yw = (f_^z fYuI_\K p3䬸YR=k?%8אu6 mރ7ږk N>W}upyA,y}%4ͧ\`Gh?:<Χ?t8DN?Y|EqTM򽶀B΄ϔaތiq~Qq2Rc㜳{`]lp;7F8"48?4߇aL݁Vd;emUkj\6` ʒL1>{M3C~RF&+`f$܋jN "Ih~!>yuXs|I˼9;`i p::$vưdb4!8w X'n'7X 6 )[;` g@^,I\a6x5i $l Ox;h΀|na9 <%0tx薼USWRak<8k#FL63{ l(XwZ 7TA x!ձ ov?„%^ ;xxvIx< #ғ`s_JZ9 S͈K*q?mrfG\2ylwxx1]5?|f|zۗ0u9Xvw0޸x̞)q F}__Yge'^,8#3=CƸ`rxAZ=`桧w70هC_@gnoMmjuCo_qaMO?WAR !?ƒއ7͏y;Z~~Q߿3n_h=܀JԬ}(Ǽӛ3oP> xz yg_fK6o/+`{9;m9%wl,= liU\j׼b50M{I?FO7#  h0~\ v̰a8k.df 6@A?@8@NnS5l~PW^Xn(`IfX0,u3l1wn p3Xg~1g;W h -5 :Ђ]&cʘ$k xy@|oe6Etޏx>[>*Xqk y@ns6\v޽/2,~->A+[4V&~4)K]M= kɘloK|,FH¼wޖޟ yWyYXY=뜙# Qo:l- a|`w{ ̧a0C# K> d{3bZiه`'88KῪ]  ߘ߿XXx8 _ٷp{U``/ߍϛs0w貼m]XOKrx|{gD; ʀ # %sw'3o@zppE`n: Փu{a==1s "GzxX=aN Oc„.v pp?zu@{w=ǧ?~\Up]d KO88[F<JO ELOmwZ>0ѷڈU/O)||?-?-iMQE>%'w/Y/=8 8(x>l #no+z\o:HP&|ayi'v#^ie,;;;eg`g^~v}?쿀 o?}X^,xx^^G_>?_|Z=~+X,c_8+;s]mϿpӿڇi,YP| ^|04/ӟ`&^Bov̫|{}x}߀x3LS 0p;G8wg߈py? 20뒙1RDm\óPXG> }O@`_pX+Q0;a@A 0d ı?*?Caow6.DDfqО?XW%CpZO+$ǒQeaݵF)y2Ut1-b֭/2hى؈ ÍChbU,̚bnYǝ8㵐nk7\7GTvx@`AM\dσP :D+ɬɐmXo0{pY``/㸦,q"8='Y6EqX=<ǧ*{ iY% 9G:{ $D8OǑ[dp8 HaSs4`5ˀo ߹hFVV @Oo1 Mۗ70< :Er-l>fL*Hښ y?_ބ+0ϼ( dyX }/K*kNg_%pT57ѓչfy 'ַ(ᾜ> sKO$`0%>ZפIxC '>k_t'xރ an.m_P*$,i Jd{`p諝گ_J3ۃ3_jb';<  Ɣmyg{#wp,|`@Ay_tα}ޑA=>2aŀ@GoQ+8Ǿ'xAXE0-BD~j,y,}ذ3{wYy>5%}@p+|?1w|D69Gj*U*[?uq@2@~?0=~53 كf{ͧmfQnFyoxvy}.;>`%U_J\0@7/w 7=ֿyӇmsDAbVV>4Z|]apm?@iޏ>{p Jcvm@ecjt&mq{/8l |; LM??߇ 9&|#,f$a¦;R @Ӎe)ٗ??ޗ)9J p^b4e8lo;V!p |o \x|JwOwea]2  02T<>>݁ƄNlKguHl! :eWP`^&P0y`U(X1O 6#`xaPR/L @[B WXAW_@?9wfUD3" Ouf?DÔwro.ELu%Wes./IvFՀs@\8v7b]4FW:e-=C̀uBp~FΫ0/.<6Y ~7DpzrrN|0:ּ\1Vxsnx4lf,'#7'fW`J`lYJzo6YGԫuO6N1שbg8+zz-+y 4Hx@F'A GX6\prtvx:<Q1  gl+/ M@G6<wA;^І xA]Nq/ -@<@ PQBV*S~j7(u~*xKWU#ȑ(MU#JMY>9~6pTy yb~f3\M |ǀ(A=ԃzPA=ԃzPA=ԃzPA=  ԃ z P A=   ԃ z P A=  ԃzPA=ԃzPA=ԃzPA=ԃzPA=ԃzPA=ԃzPA=ԃzPA=ԃ z P !A=!!""ԃ"z#P##A=#$$$ԃ%z%P%&A=&&''ԃ'z(P((A=()))ԃ*z*P*+A=++,,ԃ,z-P--A=-...ԃ/z/P/0A=0011ԃ1z2P22A=2333ԃ4z4P45A=5566ԃ6z7P77A=7888ԃ9z9P9:A=::;;ԃ;zz>P>?A=??@@ԃ@zAPAAA=ABBBԃCzCPCDA=DDEEԃEzFPFFA=FGGGԃHzHPHIA=IIJJԃJzKPKKA=KLLLԃMzMPMNA=NNOOԃOzPPPPA=PQQQԃRzRPRSA=SSTTԃTzUPUUA=UVVVԃWzWPWXA=XXYYԃYzZPZZA=Z[[[ԃ\z\P\]A=]]^^@__A=__``ԃ`zaPaaA=bbbcԃczcPddA=ddeeԃezfPffA=ggghԃhzhPiiA=iijjԃjzkPkkA=lllmԃmzmPnnA=nnooԃozpPppA=qqqrԃrzrPssA=ssttԃtzuPuuA=vvvwԃwzwjRx>x`@yy2zz {r|{F;V|`;^|Fa RfLNsU [x] z޸N 8Ah68 9gZNugLi1? @ 2 A  s9 d 2 A S ӠdA  s90d@2PA `s9ь~ǸWp j9 d 2 A s9^A os9_dO2?A /s9dA s 9/ d?2 OA _s 9od2<,d2 A s 9 d2 A d2 A s 9 d2 A !+Y"ς,g< J,Byʳ kY.&ම'n g,Vyvɳ ;>ςlg= ML},>zҳ [MςgC= =, 8.,z3{vٳ hςlg= מ,v{vܳ ;tςlg= YxC- . . ...K(Fӷ,zzԳ KYUςgD d32 "A sY)o.C- . . ...KfkpA `s 9P d@2 0A  s 9d@:4.(" ..+A+X dN l AR+Xs q΂,\\\\\\\ \ \\\\Y d.l вAf+® d޺l Af+ȀɵU%e5UqI\A+{ d豂ly A+Ȫ dԹrʯpN( 20kq!2B%ȸ,Kq2.VƕʸL(e\Kq]2.Jɭ :`\+qrpppppp$/ 4dRlypdp2ppApprOJd2,q.PX1 LlKwAw wsw9@q0m¸G7`\9XB`9Pdd$+ dIa %"A3 Ds  -BUA&+3@.9!.d\q#O,Ÿb\Rq-1n@g WsG97'd0 d2Af:y-Ⱥ%u sd%T<\qrds2tuAF+n&Ȯ'UD̃"l8ƸbZ QAB 3ހ2uq3)8gb܀h׌q\1 qxq8.ǵTWBq'q8.5Dg@ׇp\qm8 - u,Wp\3wrBWbp\ S[ q8.UǀVp\˿q7.Ƶ߸W~o\˾q7.5߸W|o\˽q7.Ƶ޸WzFodAzRo\ q7.U޸xo\wAwn\܍kqi7ƅݸun\ԍkqJw+qA7ܸsZn\ʍ+q!7eܸ[A]upPA]upPA]UuxE^Pw..8 .|k8 .ZI8 . 8 8 . (MPT3</NVu5 KP {9X"ē+pP0kP \pW:\py+._& U W0 \pU W,\pU W(\pe!U #W$%\p'%)U+W -\}p/1U87L9 ;0=?ʂ nWE]6GIWK\ApMOQW S\1pU5XY[]W_\paUceWg\ pikmWo[oqտsxyj{[o}uV[o5V[oV[oV[ouV[o5V[oVݳ[qoVٻ[aouV[Qo5ǕV[AoϕV[1oյוV[!ouߕV[o5V[oV[nV[n=g.,B+#Rutsr_`'7GjgpvvvvRdD:B" .$/(SD6r6 VQΚrV-g5 0@Pf-7[YNn@ ʂ$i| jJj"&*.j26.:>jB+F>J NjRVNZJ^jb+f^jnjrvnz~jކ~ j▯Jj榯j궯j«Ư jҫ֯οJj޿j6  < -S$&(*,.02468:<>@B[FHJLNPRTVXZ\^`bdfhjlnprtvxz|~N>2+q8ra r= ,Wwa+L xw0o &l7w7w$qBY!r'1.qBB2 NV pDyo8pT9Jd8a) a NV Tɔt~ 'g8 WAPG N(<7r'6-qBA5r'4- N3s%J#}7(wʰsXׄ:b,S/E&z,`)J` 5Juмv1^^)*+E>,֕a) Ku5X R`]뚬=V`[q= B+/FJNj R+-VZ^ b++fjnj r+)vz~ +'bŽj +%Bž+#"®j+!¾+Ƭzj+֬r+jj+b`U V,X`U V(X`"e&U *V$.X`2%6U:V >X}`BFUJVNXm`RVUZV^X]`befUjVnXM`r%vUzV~X=`倆UV X-`UVX`eUVX `%UVX)?ʧԞSy O);UԜSq,]b} $(,0R8AzK?B֌"zaw Ad|@?L Z$z@4!J1EYB.$Q RA;ANu~_qzo^KKx=%4CRapppppUaRC37OV[`v%W2%O$f`P@0 Os"D:fUD3Jə&nCTȃHٍهMh x(Tj~ΏqKg6qD\{q>ncƫ=q|A^Pg(NdD>dC.dBvutsr?GUW_3Go9:!k&*JPd aR4%u^e)xyAc ۶k˶ݽA3ɒ%J"3DU+VVEa#۲tr'c{q>.)m3g}\lss>.68o9% S~ߏ[q?nǽw[qjpO.E9QBہ{,,g=B:϶y̳]azv3w]G2$?k>;qjiw&{\h|]g=n-V~'7GW~&#gWG7'տz]{\cs;.w睵g<70Ǵc?/@ d2 A s 9 d2 A2AA+ȀA s09@d2PA` s)q1< % s 9 d2 A s9fAo s_9Od2?A/ s9A s/9 ?d 2O A_ so9d2yXB9d 2 A s9 d 2A6d 2 A s9 d 2ACWȳDY"*yd< YgAʳ\MmqOdzd=P=Y}lgAҳMφzdC={Y@ kp\YlgB-gAvٳўh^{d=YgAvܳtϾ{d= &Z\\\\\\ \ \\\\Q썦o1=Y,gAԳYUD8 3d 2" A &S]Z\\\\\\ \ \\\\! pA` sP9 @d 20 A s9>bpupip]pQpEp9p-p!pp p]\Wd 7V 2ZA 6Ȝj  dLV 7gA3YB<60*$ *. A6\b `s9Pd@20A s9d.Ók K끋+ˀk Ⓒ dLV 2XA6c Ds93d"2A s 8A 3`Ñs-2.DUȸc]£s2WʸR)e\qi2KE8#5 WR`\q0_...n %s49CRda2? 5ppdp2pp( JB9d2fL+ ے wsw9wwd~a,;q0 8;8`W`PP2")  2YRX.b  "s39Dd'5DfPU2D3ABn 2q2CƍȸY'ob\[ qU1.)ĸ7QglW9G7d'2WS 2A 3̼} utds2rlqp;qrds2tuAF+n&Ȯ'UD̃"l8ƸbZ QAB 3ހ2uq3)8gbA 's79GWdUuxHu(tsAr { ( aRdC24%A s9'7dG2WgAw vdv2vvAv'8A9$utsAr qs=u 2&hI(Q 4XBP`$ DBP0$T`P=3@BelRBvA&0Ke(,TdCr392"d!2 %A6 P0r @lPd,Ȃpl`d PdD@ #*0QA 6Ȉ A ȸd @I,@ CYA#Ff0 2,8d[A]upPA]upPA]UuxE^Pw..8 .|k8 .ZI8 . 8 8 .  `T YPAv  8 .+8 <. M8 ^.׀ o8 ..8 w.f 8 U"D5 ̀6%/h Z<&DHL\`dhlptvz|~~|zvtp{?fXTcHD>5dC*&!&ke;ky f& R!4CpJpbdfjlnpp#trrpnljhfdb%B,B0@Ј*(&$" Ec ""$&(*,%dlBtNRTV/Z\^^\Pb`^\\ZXXVTR@HЇ<:8664z \i,ݝ02244688:<@\`B/Dx*x.xz[;Sxc1^/pVYm% E-5gTe2C! #Vw(-13"E&J$رe C&rѓg[e`G`/@l( . =5F/lU2җnB&fj   u ѐgٛ-GeeOh0 *9dis{(X?? F $̄"8gÊw;%A4dMr.B+A!ИiRBL;Wefi,"ofthwy, rIstea\@ng,t mvown dots"tine ( nobod?shGld say, Im a lousy ripper ) J!JֵtCv,]YW`D`B: B- @ۺ~X๛63Q1+x51o7PAK&-Jgfla E*C 9C i@r$  Hd\p)T !@mkB8/a)`pr\Ns efpjj @֠Lx-^m.m0Tmo@m?0: U@ߴV030`cBKBe,Ͳƚ} @JPjYY= z.~A#2.,Te!8PfwT(ju G."z xTI>EHRBR$_0jPlfq]6b[k.uA  @bey:>&<$2: "C $&8(g m>Q#*xTL>:41P61`01Ǚe }7<& Cl@8@H C'6<HBHC`z?lt B_m4<>8DDCv _BHTt@(_:ڨ&NEIFz|eAQ:@ ؃J xA]pЀY" xA]3 / DDxA U /fpPqwRT+KSn\Y ^\ԫ^ܖY:-kV0bRU 2d5  s \-Tƕƕ\[;U 8KKPeg&:hnl>e `,An| DUFBTVZP\*^TH J1ЂLTj!μYB#VT5UV: 0Qfg u0|2|1@l= 4DcB9)B)U*2) `/ut#t#3 :ff ֘L<N8z] x16f.Nr, ~}˛ٰea|m+و*d){6%z|y`Iyx?w|kw"v-/^@u\Stk s[rrTq7@pm"oo^nZ߰0mmal֗#kkJjjlioUhh1ggEffVeebddkccpbbqaan``g__]^^_]=\\([[ZYYcXXBWWVUU_TT2SSRhQQ3POO]NN MLL?K?JWIIHiGGFtEE#DzCC%ByAA @s??>g.=T;nxĈ.Lx  )3?LZjzɀ,Gd+PwȂJxׄ g??@sA AByC%CDzE#EFtGGHiIIJWJKL?LMN NO]OPQ3QRhSST2TU_UVWWXBXYcYZ[[\(\]=]^O^_]_`g`anabqbcpcdkdebefVfgEgh1hiiijljkJkl#llmamn0nno^op"ppq@qqrTrss^st t^tuuTuuv@vvw"wkwwx?xxyyIyyzzAz|zz{%{\{{{|)|Y|||}}8}a}}}}~~>~^~~~~ 7Lat KZ km+$#Zlpnl2$ɀ dff|X-lْ%hҥZ)>.H.*#ق1Pd"\b,ǀ iX*6Gـ#l(4f[*I RoS~\Yv AVk,Av+1!Xq€,B r hQ %XUցpd%- 07jD6"$ (H oE&J$رe C&rѓg|e`G`/@LNuƾ4B dD {I 3:DKH s<#PiuG\V. .A&  & T,F\0 h&xh: 0~ $q}#Cu dE-"MSj$GXJO(L AU ;7X4LUfBMւKPYaU_cZ38%&tD,IpHT`p@Bl WQX,KB;"EKxLRЬDcAHi\@E;@ f^1#%&2`JS#xW@EBUMB'!Dt/VO4DCB l.B.I.JHYrbXniQ``@FUZ욁GfEy'80+ ATĄv,\(Q %C*CK#c:0CGUVIMKUgKUBlh Q V" JKX@SsgTMC4Ld%TAHDBcQ)PKMJJBKmȖ%A8LPIV EWfN.GAPM&3jLU\+-W5\,,P.O.V.h +OfP4OMv/A R)`%ARO{gK`&!PUDBFԁ,l&S wRK;ILQD9gHZO0xVdȄ EFrY͘@jk{Ҵ&2 L8EUA-A EB A^$CUY bTI{e%bq0 ¬%< K8L^YyRGc#ST6 fmPE=&8bYq$nhFW .haFm"UlHPRK$?ULGS,4fGvOy ʢY NXnThDTAFKc-BKa YK.߸uUNppEV{%8M.C.fǑCx)`y c$0KZ4^IȋL< 0f!1QUECHÉ T,IrѨE%JFFiXTAD R<#G)ϰAL Dr:'( FOˎOA@EW/X(RUT4WHICrWE΄SUPPOSB2 OUR1_EGAXMJ1CnaSPA+T4'BOEhjdЄ+K˪COPYRIGHT^BY4- PLFN 1VIABLFMxdE >DEF  DdH\CTOTd<ԀwPIECESR$D ANIMALP?IN9PRODUCTIONGC) 1991-9,?M m1eSp 'DHhZoXm@ru5 XWmA©w ab$HpVO$N 6Jurs]lH"?y@N?H/n' ?2Tough!t#-WAI did-0G<;BbyP^nd leav mXal2nowE O;hI'm sVtell@G!1at`ZiDentrrefuseso wk onp 512 KB Machi ( {(ry fomya ! )Signed, ^?p the coder .  ,80wfUD3"_''U?@ABCDEFGHIJKLMNOPQRSTYVWXYZ[\]^_`abcdefghijklmnopqrstuv2icxyz{|}~sذ07Ĉ.Lx @*&A!P<(A$ MɃ@`:Ğ 0f Q>k6ČaX6ِP6w6 eCY&Ԧ8 `C]l IRnPJ2% I6$A$U Iʆ$h I! TBِ ! `C4$HI! `C4$h a@P#0 {0 <H@BPu0PX/h 6 owU3"/wU3Zp`vT2!@wU3" ` 1K [|^,8G2극o>RXAnL];[2s V$c(x'퀬+7` <8\7"N?G|}X8^FGbuh<\s[_0xޓ|A.^@>g_@`?V/ y 37o}?@O` zͥ}=%vH08|A`v4`8`Tc'Hc3K$b-ρɡ;=S9??zcFF cLfއb.k$` GUh +oրˍ &}&D `ahȗ^KyxN$y{+"އAV< )ӓ]1rpN >VꔋO]10y]$1`>u@wp.Se!yc R20݋҃ND3ul .% e ރKwˣ_ X }̤D4H 4 x 0nq0F/<ѳ;0n'7Y aw,n+{b;XWO JP8@<` b~XtKgnmمٗY (Kp/`<þ7X0VtJ"}00璔c6 x#10`ωrvAt;{e_>O: bwf` /a;=eH{ fWxV?<PA~< fg6;ol _Fmǀ#Ox2Eg|x nhx:sQ><~x1ޅ`9ޥ]1мr|S<0P O*.e:K)

|K@|/ٍ .@,>0π @8;/ATM5(Z뀪o ѐCkz= O>f*x1 20bL0 bJ? Ga%@.dEVDGX [;uvPcqemci`D$H$^XWX"tnncesq  pr$G&dCle*yةbހq,,=diB Is c,ch sm!mPparfoul9matblS2gPen is$>-you !uck " Sign 1nowM.C.?!ANIMAL Mg" ByhwXwuse^ v coolfamnmod-player, o rip 7and gi3crazy whilst trying~fO[QK}@?xn ( T:z2tZD" W `%u9x15@t>S*F 5pbPz:g-9aT2|@p"w"l1\oFP=g ZkQNugfr ( t#f!xH!tv?B0I r8K|b`:37Ms41a  zCU 03' 7Y_OQ2E,wee((CYD"PO#=^wlM Կ!}"$6&#(m**6,,i..0uU22D4466&?85i::6Q<>>@fBB6DDFFH-JJMLLNN6PQ'RRگTTVVMXԹ!ZZگ\\^^`5lbb6ddffP5hJjjMllnn6pQ{rrtvvMxԕ!jWz|m~~MԌ!k`6& &MOz&DM1i%_T`"9|y)n<|%pB 5ad8S4s㓫[Ķx Z<(-0O8@HPiXD`Cԭ!xD "h$m&(\%~+""zjYH(uDDK Q(D  M:D@3hCA,aVLzJ2',Y5+yxb w?nJf@fVI@֙cuAZ  u!k R,?0P86"gkX00<6rt(@f gJmctvkn^%|ULp[hd<جJlD1@u qa+HPc\t6slEm fr*j\a@H^ _]LϰHB4VxY`YAڅ'Q*D`oE(pJk Su &Cu1  "Pn' y.o3=0:ֶ "pP#VYdL {U ̰ 3:Z=0a2KquVr28 giP/O! {& f/ uÂvK@x 1THcNm H"z>3 7 Y<. /3>x@UL FIn #njLLzWp?~Gp\!㞫 pp fda`NWA^vrw nO'7GWgOvutrq0Ε8_z)0'7GWgwvutrpQP@M 1L|!BF# 0<3HP z01؂H# d _ ȀgR`B9Nshaec^_:"g] HG-L3xf0N ֙:7w8 u%:/g `\-])]%]!]\] ] ]]" qpʧPAfԐ @Hّ0 E rpC"Vdnt^pHt:p6p(p/?p\S[~̨!V$#+lQAd (YP  t0f'BIWNr!;QxU ^рwL3@ȕ=x%hYI?ƶpNsgȈ a Nq aJBDD?2aS\\†/ wus\:U:s" :.@P3gdXЁwu)׫ȦRx1Nxt.v.TQ/&.qV6.q΀F HpB(pKz|wWLB81@(pB!?` I!Ns1A!"xW'&)!I/{_RNJC@"(E.,CNi#2B\)SG g @,n?܁EE8-L@SfKʿ1/ږhƉ rZk,o$xk%K|CK 2UI[^D$2DǧgfI|p7 6 zTԕ^a0:hd M?w&M]9C)a` رf J⺎ZN4vj8qvxp !AJ?.JUHHZATHGOQUB0@Ws+g  I{AX̨BAf~ևB(хC KWzj@%!_! l>`~l 8+b!B+j@@F',hH!P/ F:>P< "n[4:g&B|҂D7eI0g-'?RR0Qf BRSP"P/UXh:GOz3 mZ`qni Y?*:U.+ EA zfX$H=֍r1o`24eHAhIhDa"8]n*I!g(X$r& sJ:b R SBJ&6$[ ք(G%D5Y.8Pgݝ0#gD=HV2PV4U0 0`t$uk~0̓j܅gu,sjmHP`VD1)  g Sgk^ Q Lk۲' .ӰeD4H793 R2R "zdҒ'GfdA*kf @bΐ-Az fEf"<aONk$āc@f0THmE9I̔Ԯg~<.ùn}zC: Vɀ'H 4 `4`qcυAM_4!v$u<ÀA,h s[„,4KZ&&t`k.kN ~H`yj{w`pvJ0;Rkc`B@\@>fMH<Չ5gH97 0 ' l%%k*ahA- @n w"A]0`ΈU&9kI1N s^ZhH-0B[^ܰ?rG%!L`=HJB5 ^S6 ?E Y@cp@49^ < ?bʢ pZgB*] zA0r %"Kf6fv|?@JCfaE"*a(md2`a"za&Ea0)d2C(:^& R z2: j@%MM؅:EIvLPrJfPӀB|a51\JX&*^B.ge,E$e jd%COvF s6`don2/6r05,<0a8JFDgOk>0(a"4C~SBfV-` `޼NqCѳk8( A'0.X2I|}A{PI_1~ 1A 1A  0 @ P Q S b c  0 1 P R S b p  0 1 A Q S b c r t ! A>y S b p r t w t |  1 P R p r t u "? @? ~  [ ĿF1Rbu_8` X8,ʀoˠЁEP 0@  pXU*:*@*@a. N8,@APqA!ZBSI)O)!KEPO@!4VxJSg~ :Y|RG96AY PmUP? Qfu\xDzC2:*5"*Ts>O*p.;p NuW?/ 3  +@1JaxŴxaJ1SF&kyϽ w xGt{9.gѢL;%k a.?)hӪ.fj3-dH~ 7H`r=MWxȋQ2dzU8S5=(念YQaExQ]>Ozx+azMC>eKoi"IJ5'mlGyER=u[C%76A|?Z_=Q8;*Y98U@e7V6&t32]4Ei.b7,+ ߩp)V3T'%7*/#N}"h 8IanPA`Lg>?g334C'RXAyd .I MQtBڠ?pe<p F Ԍ0G6X0τ6b} aA؎qxKxbpo!^z|una y;m<'̼lX(\:_L}hS@. xR"|Y7{eQ>, ~k~LxU34UxcO%W;9]w7=k5D^3n%1?0.-2@+*)ni(Oi'x&>Z~%Iu$`X#2"!!$ lO p5Ԁ>$8;&/*?G=sP\M B\Nng'<^x}=$Z~iO0Rz8<1VW$7c6O #,[M`E=8(?!mkQ{zGW4oexZoxoxQ 2 ȿ( 7 ꈎmpS S=9 xT | 1~ MQ pq y< b( L 6Ы!c z濛| FY~n[I:71%x  ~~t=~Ju[ < X<bpn a_R]xC| &  'Vy<[`oylm*a UI6=~1p_&p=MC=g<ّz;Uz )quWk{b XOcF|4'+="~r_ 22_q\uSϨlj憁"^^v oTw|xtmfXZQyK ~DGx=ޑ0)#ěq E0x&l)poSzͥ)3]+4R\HhQP<$VO{vqpEl,gfbg]r3bpkSN'^IZE8@n;D7=2-xn)<$ px="K7 z?XL_߀۵eӨ/Ϭ<ˠ ymx7^U𩀛wkpSs=,~Qz,~xzw+sE7p]lmifNAb_\mY,_UwR=OL]I/F "Bx?<9163s0.*'<$4!<?` # (dWb)y.yx4o%h%H 7_Qx߼qՉP xˌoxƠ/^Wy迺xJ5$ A/ॊ'ޣCOP< zxpGBx~0=|$oz؃wZuqsqzo@m:ku~ig9e ca~_] [ZxXV-BTp^R_=P|QNdLJxIG)xERC|AZ?(> <=:W8{65-3Z1fԑ#<򀎲Շ=L< yu  \ \ 0{2# 8BZMsd4ETVUb H:MB]`n_|zr  $(-0D s8ݔ6HPTmk\\ddhlyt]v!_-$򿝸mX 3"r,C1+{w`xD㿒ݰ?<%AQ<<3Lux&333E'?.ʋ 82P[h0sD48`րOV&0`x|@(B` .9F='1o}PIhwi5xrnaK ;PLt3(0@]k`?B G#z_9eJH՗P  ^?` &@hj)}C |I\7 0NNAdiJO ~ч9*P0.+ܞ\%JDp ]c8@Y@m0 ]0Ni6մ da=7_}WhE 齘"-Y)9v=*x0ͭP38 1?<47J85 ܬ@eT{7%B%?L  T ;a=[J>Ӎ$[gVlU`` ^[l@?M@H+ u03 /~؁gJ06X],ۖ٧ؗ"[lz@{f8`?ɮ7vw0BCXϻ 7?&{Wb;> )1K w;C + 1;`ul#Ocl.(bgM/Zc6Ujض!@kь-PK!1 QQV^}I. B 1XfV|UZ6_ky1k`?QAfp+qnlw!C7`9`z1_ 38{8uVR 0^ɯ1}` J,_!FGq%oz֗E&8.@ p{\Y,<Q^`Հ^UTg?  תT`Ŀ^`^0A … HQX@@>" /g5}` 0: p<`f7=nf0ɢ_Ө0[f]bj K;kܸ5ӞY |3Hgc7 x-q`N<~D+b?_H Cv[rƀ1H@%ۖ= 4GF0T)-9 < QL1 #*$^pzpLp.`i  =0+1>Mz,}L$w, ux'$^+xn8?ȃf^2xVGey#pX~ #I[&f!XBQm~ID!p(~,? @#j !noK^D}n85 ѓ)](0`>)`G);Ϭ8nHu G%Mu@,@#/KUeVUT7=.x.P8zc ^9- ,im8YqH@F}.8څqZ:x?{kgwx[8&&7sK1rÛX?.=Poy˧G)ŃoѺׇ-; /܇͓=x53+̾8Q:`/XWKzbhaUu 6Wlk99vepono%'< /i{Y9Lf\6x+xX>x0Cxytdq-(8 Ȫb.{p.PнBiq~,A`&Ho n 9?+Xw δF<>c(>-]Cx|! χey*Ѫagg$]b"n"ax`t|+FŴօ8 ZqA <¨b)Wb9d X#l(6 { 0 ~G'˃2`+ 0^iiKxG`FD~NUƭIxȀO\. \09>8 d}Rd7,@/2&\ s QC moC\d|Q}ؐa03 fA)H ?2Gi\_U!σW7A6A&???,pM <' Z/?@\9Asr/@Z'<ُq{^,.#(s/@m*P>"! ) "h GȞ ?cxws<`\wb8+1 F;?JBX勤!v;#.%J1. {{(Dk)`%@!h@& ?!||xVJ2~;-$/{?O$(3ge>>/3̣C>3}%ߏAم6l66`0|<Ǚqy>>a`ټ>`3 7'0N~ 7m`?fu"ྏ>:y|"r'#6kc(@vW#hb2>*;b磌cp"?*{"2oh6 b"0~"("&\H"1(2'Ȓar('"a$=8mݾϑ9o}BZ19DxY8Nx>ԁWDOSm5y9Q9O9\a_NDHA9,DqDma?lFP[R[T^x^-c^0EἃY,P?Ec/BHEd~N|'N_g9G98?tw σ*U)}Q|W0G@Ǟ ߚEQ7E1,740E@xu0eED{{D<0?zpy_RKra PDF~"&ex0}T@ySDE@Dž x34@ADDq^V 3ˀAO<@@zy}cy8|G2G9KNވ?TEHY0e dF e?6}W"y#U8TE_ DUOQS/M0OLDQ 5p_po>_AK~ωȌ Bf3("@0(2 O!>b*@`d*K#'" h6@& Ȝr1鼂/yȾȼ//$_AOm-wyv@,M4wM=w\wf;U8@D3" 0;cIxН8\C,iйXY~eyX?^Y9ɯd% )_ 4 8xtnɻ]-܃uEuE 9x˼yfq (/ZC/J9 <'7RqO5B jx{r/<6ՏZ>ިؖy`ē^ xQ_7V|spO+laU0mwK\C2W4.yax?.aI@K\kAϢxi'OPΡGx87,K G!#:7i$$l"57ՈM .q9Aux4!?xp@> Y\p؀}& x9eBn8&? C9t*WW ] xo?O4>6<.pqsKܤ7Sv@0yIT&WY%\KȜ/ ,Ā̈́'WxyK k;WDHVB:ąwޡX/vܢC*=o,dB SA^1wyx(J}DgTL$ x9a LIK~'BBSS'r1S;T$OF MCYN# }3~IYOU FUCKKGTRIGHwQ"8~ <RRa.!A0f +53(w/ul/8oۼlVx`OCou5xɾO{xVxͼ[nu/*6E \S-je ?\^?Ӗs!,x4[x_]^ _E7"F"x*wZ}P%y;~"dKOa\F}]CǛ.!:OSX8-`M x   :Xׁ=!x~?dz}4?Gxپ.~xMޔyµ,X,X-z؟ ;6}S|J 5xs"V}CxJ \\ *2yz`M^*Y-0N:_WH7 ANrZ#FTjPeM܌,n*d<=fF5qL+ <UZYK/˄ʂwmv TC:bS3<xv zD fn8!W`X,Qؿ?_(ω1OXV!A ,XOz'Bn[dυi0{ aO((XoW  Bȁ?/> 8bȏ8L`Jb`?ȇoo /fdOOϼ_=~8+9|E7M/ 6?ә" f%ffGYfYdӱ8/ ֙?kLTYaN< Ἴ-8շ磠(NG]bsCY]+\D>B HJ6 (۶벭:( ?09S00O-2- -#7));,-8!Ϲ] ?3'3+?A C9#65< #; "  ,5 !o _ʐ07%!746)!   /Yľ X-gWy `aGޭhbU& ļ\鳢8W`LLaUyaDvTYN, "`Ҿ%/L[ܽS_g9cJLHSE3Ľ}?DڱPXW 2kZ_\2XVE8?89y/:@Ex>=B3EUX@ +%-5:<9AH3$(-8Gycߝc,0+g  &-6: '(8D{/L>¨ڟؠ)2<@@BLCƿr'Rs:d9`ż=ňh+,7?GMF¿0o2K,9u>4)8BHH ½!۩NS7  0;BD&ߨiS2d&$/ÿLX"*.( ~W9$l3?ƜͷˢcX~8HUaW ί'~Ѧ4fĵHu4"k @ |WHo\ܼ%<' 3W~O,=ybIiO~Gץߺ.P%8ETTS)xހʳ;ĴDP]Y,x,:G %7ER_|OAL&qo񫥡#E- S. :, |zLXd eF(ǿ"2BP\@e()@7A/5AC:>-?<,?/78E8B:Q@/ @_8h84(н?"D\%7aVIb`r)zĔ7baC% E/0NO7l_ j/s0 $]0 ÎK0G>,M8L;ވqrG#s%0;h6/ E(^ X?-0B/?B1?A0gɵ/B`: ?EK?Dqg E2ˢ2/CG7F 9"ðD>-m/@6CwB.O@sfHD݂u/N xwVhF2GE A 7v;LӐ]8`Gl;>=#7=-8l8 J\Kl:$J+E'AUp[ ֋EA}C;C!jM|K85>4yVKѫGM+6cSԽ6 ?1g7 XnB>-N]3;?:G SJNMЭAL??vDB85<'?4g?\ .@A?<r B༹{vG@DH[8` ^/B@n ;2/E/\MPOONMLKJIIHGFEDCCBA?8дCA`ߒٯrC Ԋf\qH.)|$f@^'?#Jsd9j|1&)R 1 m?]WbDe= rq!fH q 'z%jLHzs+"X b iEw SlC8 HVl HP 8 oR@h >k>I  <X1FY ! ) ud -~K i !  g.ȻN`Sn{i ch?c #K Ew8bl 1r  ? /  GFd EG 'DRI  zzJ H=Y> &# }j ~H   _]Z !{Ame/ '롸   rSaR|G`   yi hKA)4Gp!* ?r 5I\^N7*  a&/7>9')*y   ȴ$BS^d_N39 * b^g'7+7Z gcfT0ġ$5D0"" ¸+. Jh$3<>:<3HPC07,DE5,+!°"1?YncH9"о !0/+4v)Fa uc; ,08;%!/. H]  3FOaG"oں8]]> 3MQjmI:IP:%& ?  ȿ (ʰ0CFX\J25RXC#n$qȵZH$0# ;"9;8-Lg_Db/)8[4/" 6K_gR. :>"16 ?<'  0*3#.$&ݷKD ZCɺO"2AK>?&! $7$? .&+C&4#'DMGG@(ˬ/NABRD"{5&ȷµn 42 i$(^fRCB̡&"(z ϸʾ5(*FVG?,-=JD( ?fOѤN' =Z>2:,ä/5b]C761A:#4B͚ŋXs$=>, 8#޾-Qxx]6$H  ׵ɷј %!佘6glV#E7O^b\>񼚮ས+Oqv`KBPT/ Ĺڪۨ4D;:& k_2I@/ )/7[; ԝ +=?L.ø⾯'Ytt o{cE- >B"!pִAG8Lf`=&/>DG<صʯ1Ml|}q[OIپ̿M/@LI3 ռ& +0)+DT@)D$Ѫ46# ?ּKwܛ_2{Ƴ+1:H[\A%_.AN`ihgB>OO/8HADY`TE9迿Om,6DC(~k'FP[_TP7:( v־K(?B4ܼػ 9TB08M^]_d\?#ϧȩOGYZkyV'ļкaú ,JJA.0+ 21g ?4B=! $ *)0XydK Ǯ:7 ڿҵ/a~wU<+&$,>C:%й@hnEؼ®;ź 12 7;::B;* 5&SJ3я7 /7 0o*KRJ7 #*BT?+/5$+   %Z-R>ê:RWWqlA0BDV^BC\$ᵸ9H1̤?E $2)*Ldg]O8l$F[cEȯ,<0%ɸZnxoS;4:SW^:չ. (0+?5 3 $ 'ZkP. "$"EYVZ^K ?^ú 26EG>$ֱ a]`u~y^G %ٿ .9׷ג7ě3@9LaTSTQcO9ʐN`]G2%  ǫ忱˺$>OBR $*>C(P6(ULGEUM־ͪ(<>1 c  켙Jlhbr~{j? ϼ}F 4h|W?- !.'3ag5/.%ά @D5#!-10%"4D8ڼ e^3q~^U/dRE&=#LL>* _ѫ0'7POJA:$ S.  "/*1>G9Dzعɷ.Y$-:@%"'"6JJ96/,@RK8շ/ ?X²5?7m,>EST_Z[9λE[keA I/Siv}b6+&&'8Kώ x t R1@cidN0.9;<.ٸ17$ )GDǻ$.>=DRUPIF:/<(: ɩBjj`I& Ұ3MYXN>0.k'4H6 @UVK#þ&)% /&#&:L[pP\&! ݪH7_MBTZC-뢕䱚<3BacK=73=<4,3_ ' ¹~65F@"#]? +J\ZL=@D=8HH2*+͠7$(1:,# ϻFWWXj|"zlQ5lڬ('1INObO3Z '!1FRML]JO & ҧ22$--µƲ$3).Kl@~nSC3 )"ǹڋ?OKXF! ۼ 5=4F`tqlP# '0ä !?Ea#kD?:8B@50ĜW%KU3aͷ #AVjpD&#ջƺ %7/O§0>' O7N4C[oeB(ມs % %gڸ3Sgr{~|cC54>G> ΰe2-3$K*̸+o+JF3" 0?GQP7! 'һ.   +Ƹ!5Vut[Scl_M ԤוRXD57) ʱ'1(/SYD4==?KM;+42]K*Go6+)<-ΦŶ 8KVG- 'GA$r9#İ$c3:3販(5'3;?JQTC,"& " ɯ  &M]G/"ݮK濪$ 9HPL4LK'(1@ F(F]B)#..B!Mf[)A  ۹@U0 28$ 魍 (>brTOmY(뭝 .6-@=2'75˳) [`$/0;0é"-- '07CN- 苿iCP>>;џ8 %IwyR5+诂#'i)#g  %"+4㼢d?nu&8CZv}opX"FkZC6#!&%  @0;*802SiQ !O?t?@?:+ GeQ) ੏_U(e}~p>&00  -);1"!" #%(%ę%W7g~|q\1 䴶4FID9,+ ,0"ۮĺ BS\N3*<1,($) 7cj &.E<KbC!-Д~=g{v^TG% &Ⱥ  /.F!ө" "BAKG/&,?F0:P@( P"@RD !23?1Ù  #,4(  1Icoc>˴  ̽DSUlcA9H3$ѺyW?)w +7 '& FuW"*344+ $'    &($3%-))$  Ia  &,!E5IJJ<" ļ0.#Uz.:A8Oeɻ2DE3/6*jO 01'+   zd$L\^[< ϿM0/,"4' HӾ ;RZK" ϼû$QfWDOD .qZEA?(#_ Я %M`e^<鶈Ǧ+586;=47/:ù6SYZM- .̵j3\qkOCH3 ¸%DM\QcjiM,$⫎1- 3>LJ ծ+:Rb_]SE;"+D]R˫州3S[LDDC2 ʴ]JvŹ5Peknqe?% ß" +=)'_/.γ0B[ioriS@(ƺ 7 8PV\P/׷/E<+07& 3ٖ)EQTWP8%/4лǾA,$"   *=]WvgP-ĸ "+,0=HXU4VČ搡". /9 # $>H6! &(& -# ab0Im}N, ɽ %:KM?VE |϶7F4'#=O9 @M<*,_ɳO ǻ6Vx~~j'ݿ9(U]TPG9$Ʊߴ/8AKE#ͱ 0Ym]>+  );N$Ѿ "s0S0CWMNE.$<%M_Q@! пúz NBFH8ۺ6GSUUQ%  -俟K;($J\:'6I|H:*  мw:SYBʲL?N4!9=>;@: lLfW='׿@w\A>E; %  '+)W,28-%?ݲϯPH';<ǽ@=,-=9(&*,34ȼ 42!(BXXQ/۸,e{1YPWVI3*$ƿ#-2?BHH@4$}Zd % ۻ;K=25+ ع:󰆎3gl5)# )2*&آE~3_{~uSBN]K*η ɲ˿ׯ 4HL=" '1867 !'PU/9TJ0ӱ +9/>WVE5(%%F?޴ fD%?WkX72?ly[)  պ _68 =UD~KRYP`*gTn uUB| P;+l0f(=:LD+,[y~lDѿk_v=[I'  ,DOE, _\%!+/,  4<5!7ŔĨF>CW\:1FOPH<3;.& ?T`KbmnB)ga!cB;5,5. Ư0\L%)' &+ \W:%ՕYdyi+27QpkaP?1÷5\";J=?LVK/% b.ı/0է*.*_e Disk5z, W} BUFFER.PI14JD=1&ř"Dccfl_J;1@ ŲN1NUB3-.4;{yӷ{X¼ &/=@?D;"F@*#% *2%+:I@- Ԧ5뫠ζ ):COZanbG150TO?M,PQ8",>H?JJ7&!/ ,E;.5(';0  " 12+/(BLD#᳖5Njs^<% B+13568$ &B,!4 &Q`B-o#9O^! !72  $%:B߾f 2?Rl^@/1&'FQP4%)%Ӣ^@YDhg\L>%  r. 7 %Pfmq\~U"  ̨ѿh @ (HV_B))ẳ Pozm`TA0 Ž,DRN8 $,=E6 7X\VZQ9 ʻ21 %X $ :6,$'""ͽ46"EVrzeI7'"'$®Qur_7 ξATWR+4`MVV=&/ ݴ:F<  ˭C 1OH5&)4# ө $CH#HbfgdV?20' ؾƼ,Tp~nF% Կġ[+@8>PUM⺢ .?;(Ŷ &NmnP15ЬM227.:LWckdZYHAӸ+A=ᶟ֯ ', .DA8ǹ #5AXcM,$8NZeaBܸ $#ͱ"@GCA;3+ɘ)?+&?ev]UXZ_cJ̸2ת,>_8LH, /1(  /fJP2 ) 쾥"&685;:1/&8൘M-N^X$ Ԧ<5- /XN>VfT8R5o9ɭV!ur!! e ^΃"[ɿzeLf2ًGœ6NN1Eke0Zf8-*1bDʃkXHtë-0,L*+IIluetHHf0Lc!㈚<*`cYjs\s0۔X-ҽtQJYeV <4E(yRnI'>*bZ\y*ܑH$*;Y~$[wu!O,ZZnezr`v(6``ZB 4s%irp3K_:3MBxk*DtɫD +lj4c9 Y3,X5XUY>w;B`o@-d\ 1I󲔆͑_b'2ԛi0*w4uU~rBu`YĠ.A_1du 0C WA8$sg1B:P2_ Np0+a;ȬKh,DŚa%I D@ <<],PmJ>b2WG.2k -,󮴹#K%*RK:˘:;p_P㚎G_~$ 6JU+AH7qr 2^Cp8'OӔ%< -Nxr? |r6Ф 9H23Zr@`g`#95 :[:+ٜ4Z௬]}ae"o\9TQ[y)1cB0o"Bܬ)֐)ΖbMyܸBuaDrZN*nU%V6 .D'vв4987* I9 06`Z*蠔ʬhg9ui,DLfkU$P$THYZ`lsBYTzKX\ʗui ~+. #q8 {-iZB B b~[:T)IHNԱֺ[XIJXVI9=V*Vy/8ʈ>xH-f~6y66B5=Кϔ,1έвD$Iy[H4jArFHHxtm x*AP#wvus$0Ur[l]H碪$CSC?$BLQYVֱ_¸.r$2BwѿLg1K<Ħ{ :kNHgTT0Bf$$Lj3Μܕ"Ti$<2ܭA6S0ڃ` <K%AM@nf0& TNXyIM)]t`6$q'Z>~*ʲ6)c0v;fĚu%,yʸ4E>4 }Z0xg:09~nfN2{+̲ᦲkhuh]rNH>ADk0<M`r]*,jЬ*^YLyd wloo Ʉ,>$'tr$Y ~ꖚ]sz ܬK @^Hy>BrBpx$v.jz'2oΣ왙ՊߺTT<Z7ȆԣlnĻ6kXZxO(;kC̐&of(B\6*:h``Zr/CD`J08G Id-#-q܇`xxlT`B? !ʓᰌ"6.!ܜyq)ĠmN`0B`rTfD#Bw&q֦Y_:/~xd1Fʎ^ئKN l *7F֮ؗuľr~~ZND,I6(U%Wq00 *<ŠMXlD3q&#g $*BB_6 9 ֍H2:<<粑2rnLҾ0%xBbGg]Ϟ嬾c1*HBTfvx)ῄ71Wy7Tʝ!]r H+rx!HզRD"avE0rH$ A%>GE0_n`"xxggȮxZ֚bHʨ!Uu CT<C Nc A$L"5j7,R2n.(+ n i'n{ ߗ!B;".:=yJ*1@,C=+mFSeD Y z" m1>b7)(u]+JhY!7=,4FYx~:nT /ճG !. @VM 뻿\qk(Ҝ4Ƹذ='dMY=譳\h\إ d߰gȱD q0I$-P_KD:f!{"Ƴ5|G S(."(1:Y\Alf6kk . X$71WՔb%!4GmQj1pP Ϻeym.tl/N Y7˳b=Y4$S`b!W:$ߤWlJ$IM![(é(!SY1 !rFJ.'?Z}SFN;ozJ=I C@1e!5ȌVߐѭS +C1+b@$] ;3W[P=-7W#++o\I*],S(ɽ $V+@IϞ=5@M45M /.ZYԟRw4!*z%.`KG\9+ku[L+ߍ%1FI7E` ?ó唱SPY+.y C(e$^S [E=S:6f\$@4Pfiy̠u4CY@`Qe;J 4 (RG 07M_1Ƴ.'::1q4$i÷M:6_\_!_둗^*.:1(ƻ@\SCg!7$]N!..yU4F :\{\ 1鿲~KS1/ =$罡y=h~C尳ؚ!4g =<}?e!/%ɟ+Fux1!J@eot $77ƪx&1{$Shɳ?=2${4@Lժ~G-/e{F뷽(?[(7-:F! 71ơWߺEnq(ܽ :MFC!7 .ƧGFZI{n(Kطr74[48'5^ɰn63!!MqM g+S4\*r—Vy.nSýX~HI&5:@.=Fkդ8_f* @~n+n+:62H=+ij6HIxM룽f.VV1E@ S|ߋ~(-b{CP׷.)F+ gu4+ߖ>~>kk.Ҫ+.MS.ʿSV{!+VF̰4.+7$(,,'f rV.@\:ê1$$IV:3U4! _I$C1CI!󽧪:֯\V$vZ$g4PP@M=e+@1Ih{CYܛ óA +MbVIYM5z.:4_xC~e!Օ?$!I_M4C:]+b\53 <_b:+ɳ 1MFS\ߓ ?{v4ee=1ϳ8 :Vx7ENߧ+?{un71z̪('_hc'ؓ1ܰ.Y=1rҺ .FIChCſY\{C/_4=:طb\*PLǗ2r.~C$=+뷋 C7=4y- mR]ҥ.e~@(oϭ _NVMP!>aY( - 'kTҫ7q1($!@PSC ͺ8K"3d$a MY+1+1PY'[]_{F+$d 4\qe4?d Ƨs3f (hkF.4iFY Oih4ueחb@S_=պ%k^=nnP$oí@Yn=b&Ebh!Ih\@? ƺ4_kϷ(+/ DuYhM4#1_VycUpskzFR$F帰 !FqCⷷo~Zn c7IP==#ٕ7_nƪF"8( )D!/I"X=C: aVS񳭨G6nQB߽U$ǠFRNo+M\4ܭ.,/Q$7ҺgȲ.Crˢ?h4YV !+7 4(7F@y0Y)Le=YCv7ϊky=W]ڱ?<;dPe77{0\x!=!:M7Eo}.bS̈g.k<"@^3״(ش(Q4@Ts sSVܡ #*]([߯+.1IӤ!P73".(4!fW< 0/DVY4PҤ7ua$!e|"32Xcf:ƭ= H7..{ⲅia0dxmH ` 4:<ɯ˧+ 9Ey 71 ɧ40CY$$Yb1跳gI+I=ɽٗlְ.z-Y LC1-H̭(:aBp(&l^r[s(vY MZP"'1t%M)d$FC+sE{Le-o9,{Y[R`ZȲu !]:.hX::˵@+;;Vm`jI 躺4A )*N7$q1F#yAN.!< ++ⷀkT$L!b6tpi miPä< G\,>$Af(F轳I$V 9KQJRdܺSeeґs+MM4! anI>R$&̤B q3C7Baaɀ_|:!(!k=Szuܬ?%+Q -$(3lYr>-(I_:WŒ\>_-.4++>!$~ ص@CFAq-[#q4.Ұ$=@VO֢/WGC.$M r+!k չ7ɷ:뇷bpp], }znOj+HF܉N {~$OH|(û( pF ]岌C ;qחZ9 !74 ؽ&' \::K ./ (Xu =CSP=i1:ϡZ!=&ҘF 2RZ(_?IF=|1!o=)\ B]=bNu7R"ܷ1.+M'fxV4=MԻo+"k,8MKea [IFܳ:=r +S $v20D@(HUiF1a'e8hS 0Sk@![Ul.I(2VX3ExgMTQ e`yf+I4I=*# 'ݻ$Q`²1%& OCaBȕdRX4( F@3K,5-C(1ɺP7 |%2}b%ɥ҈7w!yy $4P$# 2++H6!& $1IXpXJ 3Y:C^U@W( %$.`ث dG!@:!|L*+!Dc. o! +:hC!4O]3:D nKB^( 9y1@_ L 8 l(a]bR؄ESYx;r5å7ZG|AP sSM;F#ܱ z== 4~S (eC(>\P$ ׋Fe7彤:@k(z'`ճ\N!<z1Y@Pb蹀!-2R=>4F b@ (!1սx|4i@1HɁĒ(.+7;lZ ! n", ̰_e|\xY_.VP11+d.&5UC EE3d@\V:7鯏˰1<3 CF\^C÷ =FFePEkq$GM4mҗ(I1/s0  1M+eP$غҺ4M.;eK褳@F|ҽ:ICP+|p [F⧷^}V,X{Ϸ=474I g,MSMܤut}ZHS_ P7Øz.+gab$=@I Syk?n1+s4T.YS_$5،=q˳ $(뺜=U+4\M$$!CbC?!1Rqf7:!7V  _S롡 %!3WLPF!(|$uI垞 M zr~$.7P!պ$ K:b1՘ pf̰yj._C@ɷ$$Vb. +3xY\mIC$_̎1\F_US:SCFMP;賳)g @] ɤfab=.r:Fp!$ҠEO4MY4(*+/'.Zbe=+4e=̪yPPC1$÷ ?B4CYF 9l 'MMɺ\Q!@@Cv쳤n!Ck@Y p3b.@˽\.SSP Ͻ~q+Vx.R~ ҈5Ƌw.\C+5!:^.$\h[\@i(}aW4MIíÅv.qSz+YCu$ _ 4觞P=u.뛅J51VIu!8w =ءzj Pk][ j$($^VH F@h,5]eY<(ÂOPS.W-y IVٷ4+ =xC.ҳ^UJb\fFe( جEj`FA6Aཤ?TcMS4ڕ7Y7:7 $F=$ߘ4he1D:.(՘ğ&=YW!.,OYM:.ubjէ _D&Ikfnf=:5".! n4!4+@^h1 Iq$$ ɪď$=I.r47 9] !(:$L!(111(Ղe3Dv(~9E |XC H;f$_CC$ ~Au؝x֤$誁] RC=YFÕ ?.@v C!+=P1ʏ!7Co$! +1.$s$1Fjf2,1+Q(FF($$ jý$CY(ixɘa 1:F77@4 !"?p4|Y (c.g1O=,`ɺ.\S+m :eK _ɩ.7 |jíS_=| Ce {SM.+7QZ̭$Pk.(.S\񋈕_~:M:!M3y땩+VέrY\舋b1QP:,'?Y =be!z.1bM̈Q>6(++ؽոk_Y7kFÅҳMF4$,\KP}(Ck4$.ISJPf ҭI_M 1(Ieߏ:g:GI.ե3{C.E.>=1CPI+_u'ä_\Is@bch pVIc!!҇O⺪F\@@=PMCTI:\9`$ϳ+F=I1o腏%C9v7V0 $1 ៚؆.bPVS.! /:VC44 ߠ̽!72rV\M%T]1: (s̷j1S 4_P.?f( =sI4+ d_Q_F!ψpSFSAϺ.>^FhCϡ.͋Y@.1Ra F:bu@ܧ(eKS7!*&,a ?M= Vk.~#.4@k_=(O1+Pgj$S1ekɒGj=Y(74;Փ!Vkei Ck7+3{6 ڗ=\P؞ FI\bחR$⽪|땠.@CeM +*/54@S 3υr1@ChIW~ ߛش67=F79.M ==Fb=_餷C=SI7?3ح4o=.P\!?4!(+uuˣY!5 @Mg$T .=C@77.xftqzIFغɭ  פ@4 çد>/JP+F1([\=MI=7c|'̽ xI+@fս ZH4&:( P C4atњϷ;rB7IPM7>B j, 唙1xYJ<_!G@4HA y @C.7( 5O 3+ ƕG!!:=b| 44ҷ{N4XRc(>3$47qn.$C= ճο =~$Þ3Ĕ.P.M!b Ϫ|+ &+7 z=Yq@:>ðq\k+$(>&:CY{=(H;..Wd]Kߡ) 84@qFZ7B !G1+[]7 (ը +H #ƺ?r7..q,$[$$5`u1&4!FhƗ|#/⿜38( s:1!7n$ɜ1= N,CC@+k1CJΌ Ϧ  ɽ$I=1=nF"O4=SɈy+PF[PuI!VU=!T _ܡ~Ɲs4M0xBI:I+ ++߷:YV1bqCȟa\.SJêVqe4.Y\: !C *c +enV++MV!1C;!ԛ 롂(bbp(SS)?(F7oƒ.k\$@V4$ (S  R_>!b~P 9+C: (>$. Ṵ̂:: $:_G0(!  ̷ðC~{$41@7(1.ú:.ƺ:{~!$+Fi@4 72$ |՞褕={b!$=PFk((/( Ұ SbO? EWEDд'Z?^ZF%5?J 9h 0Y o 7 s U D_ *C$ 3B^ -?!CMe ~f)r^F ^hMoPob?6  第ˀ_zoL-;8Ӥy,Oj-ߤ"DXldXv_@&H x|jTo1_欓O?[++!9193PAV_|X801=?Ή +א/ll$'%Tg@Ct|`5g5L+HL)P%᰸Lʀ5˘"άjK|уV+G8| ||{) XW8XH11 ftM۾dڋ 󶾏^l =?{Dxg"T%?-1OcIlG`+-^|xv|g鷥׃ez˨?1lo廊?JGO|')U^ ;cP?+1-|H_$G%5 Ά{1<,K Gdd!;7o8&9|Pp?5?@ ?M;"+ o?Y$mw!^O8DI8+Th;_^D=&31z-15$rO$1L*C1- ;7C&8)1%\/"K !Ҷ $/ž_o +< &"9VP"!! D-" )55&)+"4j?%13!R <)$5P;T$9$~")!13+- ԇ(v "32 "-b1$A "81T9 G ?!-!Hr%+=)) $ w$!\ "!  %$ 1 8 ~%   /&=1&  $.@@KI3hBD]ZI|#%ΘUC,HllK0l;Ҫط1}l):mHm/q +@'Ƌ݂胸࠼ L!F`:P@HT@0$ŌØƓЬB@XaL2@|p~3r!-F4Maಅͣ؄ vY(1qTr]| YUf@+~ZI>؂G҃Ʃ9Fj59PVE|d=` l !̗׀ 99106r^\0kYW 0@jO?0 ԝփ䃐쉫"4M+)PCbtHFe0K&i6,8 ؝뿑éIfJ6Pcc q47}lLeX9a@`!- ٶȁ݄ȸ01/N"UBw WRT`@bDP]4B(􅸑р#3bX-lqe'.@pTl@\'B@ܓ̊¤u_ɾ͜ M@ @xbevHaIxEy]RҶܴ/G #0Y7d%L]M OrT?/f`n=R- վȀSd9 Cf*VLe:OCxI~glQe@\7mo0542*ŅIJO˽ @(!$XIPAd3sVQ%pIL: ɯƗĂȂÀ` %,%@-0D7ovPEeZlWeDi&E 4 캀Ǜ K 1Xn<ѰĠvX˯G '#3C,HXe`aYQMSM`gRAmPGZ4H0, _&h ! ,)<=;RaAM]h`@dNfT9ZFS.@7,lɪS='Mg ..-'5L5HNI5j`VhMWUaCfXTYD@G48@ $DвJ֬i_01E11@mEfUWXMUStX^RWLP/DԷK Rߞ֭ǜC($='~  +%40EJIMTU`CleX[QYRVDT@PHI@_i(- ,\)ۭ!-F&10@QGXLJT^UVdYY\RDJBNW4G-4%*-6Į4}*"(JOOHGIFQ@01p$ MµhƸC}$ *,yGAEDLNDKJMRPMEDB@123-),'$ie? ?0!?O03o @H-23,;@F??DKGuoVHVVC\JRSOHDA{,! ø?[/.,?7CLRJONMVPMGC7;%0  ͽ {9484GALM?SKCFFAA4142/) U\W~4 u%+)/2>;2@63B8;1] OE$"<;>LLQWQa_epftgrlrtnws|uvpmxyqjkcd^XUTNIk;7,**' ? \Kõ $y-/ "&,(689:=@?A@IGFDL9D?2<540"z*#"J+-1(1)9+"4,/) U_7ǿ½ȷ mKc|G " '#%/&612+/3)8/7ς,%z 1aԿTM%?M %&4.;9_=BACC<@GE233'(+!@ 7sx  !$&(#& *% #+,$* NeWV'&' ) " 55,,@-n$%.$ " (/=|zA3|h9Vho˷lû/w  @? .    [f/S@#HT'2&B E#/: !E>. ׽˟q );!GRغ 4'~ο89;OC-ξ!)"JշO$.I ޕ~(;8'>RE%#&4r?&H)~չVy?0B1x80"4 A!+2߼#?5%M-,5:1$&; C;?15r1:"  (%9 ,<(5q=#=#@ /]+6&ſe4**UA:#%y95|? '01 9 / #0  R{' -2 H"#6W$Y 3 %0*"6G"7cxY*00& z?4/|? 1Yݮ')(,'m$|-%M +,|{ !-wR5$%, %3 4Ԓc.  .&,">o} )! .[+t|n?$$ n(=c*!vl/ O$  &*&"# CE*~"%p/w( ]$;_z8A_ (2'=#)ݳWW#ɛQ輟$e۽ "  O.no q t"0 \9<ǻ ^q"W 9{|!=gw ̗I nd>_ veO9ɓ '^r7y01 3D  q>va} v a5~#_ :B* 7 3{g;azz8{:{eԣ]V&?N N@ NE7i = b ]rw&*x? )'6w]N 2[d ?0tʽ O Mg|)f]k)[hֳ )`7^yH| ]{n {I/Ny} n 2s ˎqo?l+|%cXNu']G(9S0  ;mkI?_ǃ~ !,7܅Zߋ:J"lUIN 1Wv _'+(٩ CoIô>0mc^a/y5n(K</q  S{H/9۴ (( HSt8J:Qqԫ2/V2*? JGNj (?MJ 1vs[ lv,\MA7 6 .HA8Ctك&i {p Op WwG^d4 SyikH[d q:c rsj >KHz |!g p# t 6XOoCĩ )Nu_|tNt Nu&jM:l=]Ѐǂ1[1 g^WMƆuYxM)s^ )xU%N.B. [⡂:eWF=pP%277#m3:. *s4/hӀ-euG&s%A^QdhxA^ _H oxFED/$رe C&rѓg|e`G`/@LNuFP 9<.XF6 `/ " p" 0P #s#&J " QT2 - E2$䣈4 vI(`B  &Jsfx:\AN`9<2$F0&D L[$"-"A$xG l!\4E* *PNEnʐq@o2<~  $Vf nV x $G, s1 dwD f