unmo3-0.6/0000755000000000000000000000000011231263743011120 5ustar rootrootunmo3-0.6/endian_macros.h0000644000000000000000000000064110371403472014073 0ustar rootroot#ifndef ENDIAN_MACROS_H #define ENDIAN_MACROS_H 1 /* little endian macro */ #define ifget8(f) ((unsigned long)fgetc(f)) #define ifget16(f) ( ifget8(f) | (ifget8(f)<<8UL) ) #define ifget32(f) ( ifget16(f) | (ifget16(f)<<16UL) ) #define iget8(p) ((unsigned char)*(p)) #define iget16(p) ( iget8(p) | (iget8(p+1)<<8UL) ) #define iget32(p) ( iget16(p) | (iget16(p+2)<<16UL) ) #endif // ENDIAN_MACROS_H unmo3-0.6/unmo3.c0000644000000000000000000001562611230605614012333 0ustar rootroot/* * unmo3.c (unpacks and parses .MO3 files) * v0.5 : 24Jan2006, lclevy@free.fr, released under GPL license * * 19Jul2009 : v0.6 = updates for v2.4 encoder (version==5, compressed data at 0x0c, 2x 0 after sample names). * * Special thanks to * Laurent Laubin (PEtite compression removal) * Matthew T. Russotto (http://www.speakeasy.org/~russotto/) for the header compression explanation * Stuart Caie (Kyzer@4u.net) */ #include #include #include #include #include"endian_macros.h" #include"mo3_unpack.h" #include"mo3_parse.h" #include"mo3_mp3.h" #define VERSION "0.6" extern char *compName[]; extern char *resoName[]; void usage() { printf("unmo3 [-d debuglevel] [-a parselevel] [-h outheaderfile] [-s] [-v pattern channel] [-o] filename.mo3\n"); exit(1); } int debug=1; int saveFile(char *filename, unsigned char *buf, long len) { FILE *out; out=(FILE*)fopen(filename,"wb"); if (!out) { perror("fopen"); return -1; } fwrite(buf, len, 1, out); fclose(out); return 0; } #define SAVE_NOTHING -2 #define SAVE_ALL -1 int main(int argc, char *argv[]) { unsigned long uncomp_size; FILE *file; unsigned char *uncomp_header, *ptr; unsigned char *mo3; char *saveName=0, *mo3Name=0; unsigned char *sample1=0; int sampleNr = SAVE_NOTHING; char track=0; unsigned char headerOffset = 8; long mo3Len; int i; int parseLevel=0; struct mo3Data mo3Hdr; char sampleName[50]; int pattern=-1, channel=0, voice; if (argc<2) usage(); i=0; while (imo3Hdr.patternNb)) pattern = 0; if ( (channel < 1) || (channel > mo3Hdr.channelNb) ) channel = 1; voice = findVoiceNumber(pattern, channel, uncomp_header, &mo3Hdr); if (voice!=-1) { printf("\nDisplaying encoded channel #%d of pattern #%d (length %d): unique voice #%d \n", channel, pattern, mo3Hdr.patternLen[i], voice); parseVoice(uncomp_header, mo3Hdr.voicePtr[voice], &mo3Hdr, 4); if (track) { printf("\nDisplaying the channel like in editors:\n"); parseTrack(uncomp_header, mo3Hdr.voicePtr[voice], &mo3Hdr, 0); } } } if (sampleNr!=SAVE_NOTHING) { putchar('\n'); for(i=0; i0 ) { if (mo3Hdr.samples[i].method!=0) { sample1 = malloc(mo3Hdr.samples[i].len); if (!sample1) { perror("malloc"); break; } } else sample1 = 0; if (debug>1) printf("sample#%03d is at offset 0x%x in compressed data\n", i+1, ptr-(mo3+8)); if (mo3Hdr.samples[i].method!=0) { ptr = mo3Hdr.samples[i].method(ptr, sample1, mo3Hdr.samples[i].len); if ( sampleNr==SAVE_ALL || (sampleNr-1)==i ) { sprintf(sampleName,"sample%03d.dat",i+1); saveFile(sampleName, sample1, mo3Hdr.samples[i].len); printf("saving %s (offset 0x%x, length %ld/%ld bytes, compression %s, resolution %s)...\n", sampleName, ptr-(mo3+8), mo3Hdr.samples[i].len, mo3Hdr.samples[i].lenComp, compName[mo3Hdr.samples[i].compression-1], resoName[mo3Hdr.samples[i].reso-1]); } } else { if ( sampleNr==SAVE_ALL || (sampleNr-1)==i ) { if (mo3Hdr.samples[i].compression==MO3COMPR_MP3) sprintf(sampleName,"sample%03d.mp3",i+1); if (mo3Hdr.samples[i].compression==MO3COMPR_OGG) sprintf(sampleName,"sample%03d.ogg",i+1); if (mo3Hdr.samples[i].compression==MO3COMPR_NONE) sprintf(sampleName,"sample%03d.dat",i+1); saveFile(sampleName, ptr, mo3Hdr.samples[i].lenComp); printf("saving %s (offset 0x%x, length %ld/%ld bytes, compression %s, resolution %s)...\n", sampleName, ptr-(mo3+8), mo3Hdr.samples[i].len, mo3Hdr.samples[i].lenComp, compName[mo3Hdr.samples[i].compression-1], resoName[mo3Hdr.samples[i].reso-1]); } ptr+=mo3Hdr.samples[i].lenComp; } if (sample1) free(sample1); } // if len } // for } // if free(mo3Hdr.samples); free(mo3Hdr.patternLen); free(mo3Hdr.voicePtr); free(mo3); free(uncomp_header); return 0; } unmo3-0.6/mo3_parse.c0000644000000000000000000002525211230554544013163 0ustar rootroot/* * parses MO3 files */ #include #include #include #include #include"endian_macros.h" #include"mo3_unpack.h" #include"mo3_parse.h" #define NB_NOTES 12 char *notes[NB_NOTES]={ "C-", "C#", "D-", "D#", "E-", "F-", "F#", "G-", "G#", "A-", "A#", "B-" }; char *compName[] = { "LosslessDelta8", "LosslessDeltaPred8", "LosslessDelta16","LosslessDeltaPred16", "NotCompressed", "mp3", "ogg", "removed" }; char *typeName[] = { "MOD", "XM", "MTM", "IT", "S3M" }; char *resoName[] = { "8bits", "16bits" }; extern int debug; unsigned char * parseSamples(unsigned char *p, int parseLevel, struct mo3Data *mo3Hdr ) { int j, i; int sampleLen = 0x29; mo3Hdr->samples=(struct mo3Sample*)malloc(mo3Hdr->sampleNb*sizeof(struct mo3Sample)); if (!mo3Hdr->samples) { perror("malloc:"); return (unsigned char *)-1; } if (parseLevel>1) printf("Samples table = \n"); for(i=0; isampleNb; i++) { // printf("offset=0x%x\n", p-src); if (parseLevel>1) printf(" Sample#%d name = %s\n", i+1, p); while(*p!=0) p++; if (mo3Hdr->version == 5) p+=2; else p++; if (debug>2) { for(j=0; jsamples[i].len = iget32(p+8); if (parseLevel>2) { printf(" ftune = %d, ", *p-128); printf(" trpose = %0xd, ", *(p+4)); printf(" vol = %d, ", *(p+5)); printf(" size = %ld, ", mo3Hdr->samples[i].len); } mo3Hdr->samples[i].lenComp = iget32(p+35); mo3Hdr->samples[i].flags = iget16(p+20); if (parseLevel>2) { printf(" start = %d, ", iget32(p+12)); printf(" end = %d, ", iget32(p+16)); printf(" comp. size = %ld, ", mo3Hdr->samples[i].lenComp); printf(" flags = %04x " , mo3Hdr->samples[i].flags ); } if (mo3Hdr->samples[i].flags&0x0001) { mo3Hdr->samples[i].reso = MO3RESO_16BITS; mo3Hdr->samples[i].len = mo3Hdr->samples[i].len*2; } else { mo3Hdr->samples[i].reso = MO3RESO_8BITS; } mo3Hdr->samples[i].method = 0; if ( (mo3Hdr->samples[i].flags&0x3000) == 0x2000 ) { if (mo3Hdr->samples[i].reso == MO3RESO_16BITS) { mo3Hdr->samples[i].method = unpackSamp16Delta; mo3Hdr->samples[i].compression = MO3COMPR_LOSSLESS16D; } else { mo3Hdr->samples[i].method = unpackSamp8Delta; mo3Hdr->samples[i].compression = MO3COMPR_LOSSLESS8D; } } // & 0x2000 else { if (mo3Hdr->samples[i].flags&0x4000) { if (mo3Hdr->samples[i].reso == MO3RESO_16BITS) { mo3Hdr->samples[i].method = unpackSamp16DeltaPrediction; mo3Hdr->samples[i].compression = MO3COMPR_LOSSLESS16DP; } else { mo3Hdr->samples[i].method = unpackSamp8DeltaPrediction; mo3Hdr->samples[i].compression = MO3COMPR_LOSSLESS8DP; } } // & 0x4000 else { if (mo3Hdr->samples[i].flags&0x1000) { if (mo3Hdr->samples[i].flags&0x2000) mo3Hdr->samples[i].compression = MO3COMPR_OGG; else mo3Hdr->samples[i].compression = MO3COMPR_MP3; } // lossy compression else { // not compressed or removed if (parseLevel>2) { if (mo3Hdr->samples[i].len>0) { mo3Hdr->samples[i].compression = MO3COMPR_NONE; } else mo3Hdr->samples[i].compression = MO3COMPR_REMOVED; } } } } if (parseLevel>2) { printf("(%s)", compName[mo3Hdr->samples[i].compression-1]); if (mo3Hdr->samples[i].method==0) printf(" %s",resoName[mo3Hdr->samples[i].reso-1]); putchar('\n'); } p+=sampleLen; } // for return p; } int parseVoice(unsigned char *src, long offset, struct mo3Data *mo3Hdr, int parseLevel) { unsigned char *p = src+offset; unsigned char byte; int c,d, i; p+=4; byte = *p++; while(byte!=0) { // each voice is null terminated c = byte&0x0f; d = (byte&0xf0)>>4; if ( c==0 ) { if (parseLevel>3) printf("0*%d ", d); } else { if (parseLevel>3) { if (d>1) printf("[%d*%d, ",d,c); else printf("[%d, ",c); } for(i=0; i3) printf("%x %x ", *p, *(p+1)); p+=2; } if (parseLevel>3) printf("\b] "); } byte = *p++; } if (parseLevel>3) putchar('\n'); return 0; } int parseTrack(unsigned char *src, long offset, struct mo3Data *mo3Hdr, int write) { unsigned char *p = src+offset; unsigned char byte; int c,d, i; char note[3+1]; char empty[]="... .. ..."; char instr[2+1]; char eff1[3+1]; char eff2[3+1]; int oct, notev; int row=0; if (mo3Hdr->type!=MO3TYPE_MOD) { printf("Not supported\n"); return -1; } p+=4; byte = *p++; while(byte!=0) { // each voice is null terminated c = byte&0x0f; d = (byte&0xf0)>>4; if ( c==0 ) { if (!write) for (i=0; ipatternTable; if (pattern >= mo3Hdr->patternNb) { fprintf(stderr, "error: pattern number requested is > number of pattern in module\n"); return -1; } if (channel > mo3Hdr->channelNb) { fprintf(stderr, "error: channel number requested is > number of channel in module\n"); return -1; } p = p + ((mo3Hdr->channelNb*pattern) + channel-1)*2; return iget16(p); } unsigned char * parseInstr(unsigned char *p, int parseLevel, struct mo3Data *mo3Hdr) { int i, j; // unsigned char *p = header; for(i=0; iinstrNb; i++) { if (parseLevel>1) printf(" Instr#%d name = %s\n", i+1, p); while(*p!=0) p++; p++; if (debug>2) { for(j=0; j<4; j++) printf("%02x ", *(p+j)); putchar('\n'); } if (parseLevel>1) { printf(" sample map=\n"); printf(" volume enveloppe : nb nodes=%d\n",*(p+4+480+1)); /* for(j=0x24e; j<0x254; j++) printf("%02x ", *(p+j)); putchar('\n'); */ printf(" panning enveloppe: nb nodes=%d\n",*(p+0x24f)); printf(" pitch enveloppe : nb nodes=%d\n",*(p+0x2b9)); } if (debug>2) { for(j=0x322; j<0x33a; j++) printf("%02x ", *(p+j)); putchar('\n'); } p+=0x33a; } return p; } int parseHeader(unsigned char *src, unsigned long size, int parseLevel, struct mo3Data *mo3Hdr) { unsigned char *p = src; int i, j, k=0; long voiceLen; if (parseLevel>0) printf("Songname = %s\n", src); /* songname terminated by 00 */ while(*p!=0) p++; p++; /* comments terminated by 00 */ while(*p!=0) p++; p++; // p2=p; mo3Hdr->channelNb = *p; mo3Hdr->songLen = iget16(p+1); mo3Hdr->patternNb = iget16(p+5); mo3Hdr->uniqueVoice = iget16(p+7); mo3Hdr->instrNb = iget16(p+9); mo3Hdr->sampleNb = iget16(p+11); mo3Hdr->flags = iget32(p+15); if (parseLevel>0) { printf("Nb channels = %d\n", mo3Hdr->channelNb); printf("Song length = %d\n", mo3Hdr->songLen); printf("Song restart = %d\n", iget16(p+3)); printf("Nb pattern = %d\n", mo3Hdr->patternNb); printf("Nb unique voice = %d\n", mo3Hdr->uniqueVoice); printf("Nb instr = %d\n", mo3Hdr->instrNb); printf("Nb sample = %d\n", mo3Hdr->sampleNb); printf("Ticks/row = %d\n", *(p+13)); printf("Initial tempo = %d\n", *(p+14)); } if (mo3Hdr->flags & 0x0100) mo3Hdr->type = MO3TYPE_IT; else if (mo3Hdr->flags & 0x0002) mo3Hdr->type = MO3TYPE_S3M; else if ( mo3Hdr->flags & 0x0080) mo3Hdr->type = MO3TYPE_MOD; else if (mo3Hdr->flags & 0x0008) mo3Hdr->type = MO3TYPE_MTM; else mo3Hdr->type = MO3TYPE_XM; if (parseLevel>0) { printf("Initial format is "); printf("%s (0x%08lx)\n", typeName[mo3Hdr->type-1], mo3Hdr->flags); } mo3Hdr->voicePtr=(long*)malloc(mo3Hdr->uniqueVoice*sizeof(long)); if (!mo3Hdr->voicePtr) { perror("malloc:"); return -1; } mo3Hdr->patternLen=(short*)malloc(mo3Hdr->patternNb*sizeof(short)); if (!mo3Hdr->patternLen) { perror("malloc:"); return -1; } p+=0x1a6; if (parseLevel>1) printf("Song sequence = "); for(i=0; isongLen; i++) { if (parseLevel>1) printf("%d ",*p); p++; } if (parseLevel>1) putchar('\n'); if (parseLevel>2) printf("Unique voice number for each pattern = "); mo3Hdr->patternTable = p-src; for(i=0; i < mo3Hdr->patternNb * mo3Hdr->channelNb; i++) { if (parseLevel>2) { if ( ((i)%mo3Hdr->channelNb)==0 || i==0) printf("p[%d]: ",(i)/mo3Hdr->channelNb); printf("%d ",iget16(p)); } p+=2; } if (parseLevel>2) putchar('\n'); if (parseLevel>3) printf("Pattern size table = "); for(i=0; i < mo3Hdr->patternNb; i++) { mo3Hdr->patternLen[i] = iget16(p); if (parseLevel>3) printf("%d ",mo3Hdr->patternLen[i]); p+=2; } if (parseLevel>3) putchar('\n'); if (parseLevel>3) printf("Voice data table = "); for(j=0; juniqueVoice; j++) { voiceLen = iget32(p); if (parseLevel>3) printf("v[%d] l=0x%lx ", j, voiceLen); mo3Hdr->voicePtr[k++] = p-src; parseVoice(src, p-src, mo3Hdr, parseLevel); p+=4; p+=voiceLen; } if (parseLevel>3) putchar('\n'); if (parseLevel>1) printf("Instr table = \n"); mo3Hdr->instr = p-src; p = parseInstr(p, parseLevel, mo3Hdr); p = parseSamples(p, parseLevel, mo3Hdr); if (parseLevel>1) printf("end offset=0x%x\n", p-src); return 0; } unmo3-0.6/mo3_mp3.h0000644000000000000000000000015410373423400012540 0ustar rootroot#ifndef MO3_MP3_H #define MO3_MP3_H 1 long getMp3Length(unsigned char *src); #endif // MO3_MP3_H unmo3-0.6/mo3_mp3.c0000644000000000000000000000422211230613720012532 0ustar rootroot/* * mo3_mp3.c */ /* the MP3 header is explained here : * http://mpgedit.org/mpgedit/mpeg_format/mpeghdr.htm * * see also ISO/CEI 11172-3 and ISO/CEI 13818-3 * http://en.wikipedia.org/wiki/MP3 */ #include"endian_macros.h" #include extern int debug; int br1[3][16]={ { 0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, 0}, { 0, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384, 0}, { 0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 0} } ; int br2[2][16]={ { 0, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256, 0}, { 0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, 0} }; int freq[3][4] = { {44100, 48000, 32000, 0}, // L1 {22050, 24000, 16000, 0}, // L2 {11025, 12000, 8000, 0} // L2.5 }; long getMp3Length(unsigned char *src) { unsigned short s; unsigned char *p=src; int version, layer, bitrateI, frequency; int bitrate; s = iget16(p); /* 0000 0000 000vv000 */ version = (s & (3<<3))>>3; if (debug>1) printf("MPEG version bits = %x\n", version); switch(version) { case 0: version=3; break; // 2.5 case 2: break; case 3: version=1; break; default: printf("version=1\n"); } /* 0000 0000 00000ll0 */ layer = (s & (3<<1))>>1; if (debug>1) printf("Layer bits = %x\n", layer); switch(layer) { case 1: layer=3; break; case 2: break; case 3: layer=1; break; default: printf("layer=0\n"); } p+=2; /* bbbb0000 */ bitrateI = (*p & 0xf0)>>4; if (debug>1) printf("Bitrate index = %x\n", bitrateI); if (version==1) { // v1 bitrate = br1[layer][bitrateI]; if (debug) printf("Bitrate = %d kbps\n", bitrate); } else if (version==2 || version==3) { // resp. v2 or v2.5 bitrate = br2[layer][bitrateI]; if (debug>0) printf("Bitrate = %d kbps\n", bitrate); } /* 0000ff00 */ frequency = (*p & (3<<2))>>2; if (debug>1) printf("Frequency bits = %x\n", frequency); if (debug>0) printf("Frequency = %d hz\n", freq[layer][frequency]); return 0; } unmo3-0.6/unmo3.vcproj0000644000000000000000000001040111230360610013370 0ustar rootroot unmo3-0.6/mo3_parse.h0000644000000000000000000000254511230541614013162 0ustar rootroot#ifndef MO3_PARSE_H #define MO3_PARSE_H 1 typedef unsigned char *(*samplePackMethod)(unsigned char *, unsigned char *, long); #define MO3TYPE_MOD 1 #define MO3TYPE_XM 2 #define MO3TYPE_MTM 3 #define MO3TYPE_IT 4 #define MO3TYPE_S3M 5 #define MO3COMPR_LOSSLESS8D 1 #define MO3COMPR_LOSSLESS8DP 2 #define MO3COMPR_LOSSLESS16D 3 #define MO3COMPR_LOSSLESS16DP 4 #define MO3COMPR_NONE 5 #define MO3COMPR_MP3 6 #define MO3COMPR_OGG 7 #define MO3COMPR_REMOVED 8 #define MO3RESO_8BITS 1 #define MO3RESO_16BITS 2 struct mo3Sample { samplePackMethod method; long len; long lenComp; unsigned short flags; char compression; char reso; }; struct mo3Data { char channelNb; short songLen; short uniqueVoice; short patternNb; short instrNb; short sampleNb; struct mo3Sample *samples; short *patternLen; long *voicePtr; long patternTable; long instr; unsigned long flags; int type; int version; }; int parseHeader(unsigned char *src, unsigned long size, int parseLevel, struct mo3Data *mo3Hdr); int parseVoice(unsigned char *src, long offset, struct mo3Data *mo3Hdr, int parseLevel); short findVoiceNumber(short pattern, char channel, unsigned char *mo3, struct mo3Data *mo3Hdr); int parseTrack(unsigned char *src, long offset, struct mo3Data *mo3Hdr, int write); #endif // MO3_PARSE_H unmo3-0.6/16to8.c0000644000000000000000000000042110377437172012153 0ustar rootroot /* convert RAW 16bits samples into 8 bits */ #include int main(int argc, char *argv[]) { unsigned char c; fgetc(stdin); c = fgetc(stdin); while(!feof(stdin)) { putchar(c); fgetc(stdin); c = fgetc(stdin); } } unmo3-0.6/dannyelf_ll.mo30000644000000000000000000057136210357560054014050 0ustar rootrootMO3Danny elfdmia <)E{}@@@E@_  ""(" h! $##%&''(;QEEM M  9 QCEE9QCEk\  !"#$l%&('()*+,O"-."/01(2r3(456"789(:r;(<=>e?4@9ABQCcD/DE9FGQHEIJKLM,NbO(PQR"STUHM2V(WX!UY-_ZQ[k\c/]^_`a(bcdefgXhiQiCjdih?klmn;O$oQpcq6rhs,tu(vrw(xyz0@AE,Ha  Lj! [= 23R E7 @q " 5HC m 0^#8 rXd}xȃJ [ E0:#QcY@8c L31$B2o{H<0P &0I-a0=ܢIpcSh  9L'j ?0 ?l)!skL= }EYH+ <9Wϡ Sðq}9|Xa7m 8 0W v+F &,gO1"5S0:I081.+$,/P6T>P>:4A8f 1x7+ i%= 0TAG"?cbV0B%<(< 66* ;9^/Sm 0;-!;"1 +t01 ] S:51[ 0. f$  24m  V 7579";9;< B@>,@ > < :>"<: _ <:9LJn& 61@&a Y_090 % lpm6rY틨/ VJ8*ULo|y"¦XKaH3 Y" `QE2K67@6H5a 1F! f ovy'؇ 0s!W- k5Ƅ<09); E@] 2X46a.1 prp*p/+Xp_oaPYLӆ7SkzN8(X,_sb;C<;D:;>< ;: >VAe?&1>=5h*_,(;@8A2102Ð3m"m1ڿ3p8i2A2D53'sq-a'Vc0Uۨ4N3?-!?bC3f-1 OW!K@5Tk A   A      D  >A Y b8;@=<>Ð?lB,>Ŀ?wGH987KY: <9^$kBBATR?a>C@95 rp14A-5z8p5x-[-?1y\ap~t}m&v|  v=^1:44s 22p4ʱL+ pEC 1>$@92a^x䛃e 5pSwW }Q1mb5d9+2(<=% b4?(@>`20 V0 0W*چ pw_+ap'1.Ol!-KC$%(7H8276 *;  A0Y3d7>:9<a8Q6d5 a+  c9L#+c Kav?|8*AiW69. "!0'-rW+P9 <:9":"3 03G& ٯo LQ#l:"4 Ψ\-_ͼ 1(? SJkh76320157+cB $. )k`qm0 1[H*3 C °57v 2^-!:bp1=`+B)`'])C./'1Ma ܪTn1UoVI * p۸{IA:BVϕ`-R 1P \ ( z6 _ tI0K!`DޒUjaEA67lOHI?8e m /Í0Rla100? 0:8z {*B pL YLKfK2.Bp@4q=w [% -M2 )5$76Q@2}yCO5 6A2 KY3  &uUG5 'AI :'7n#R*1Ʈ n8Ub2@3X/QX.|0<1=2>q8l *p7b=-׮  5=aRҹ),.& - HQ* $@5,ɓ1d`A <=  g$a3*?+/;)5 8.#1 @ _4@;%`f5 9$6$:$3$C$4$8$:$>$7$;-/Z0!^-H=`0 < -92. : +72, 8 &22/|; PB>0{y_%d14H puV8+T6/8/al!̋{L:n쁪8 ! 6A897d97C99d;<C60O4=ۓa%=cB0Ca=bPN۔%> @]uP(XsP 9;Es!P1:PE=p4<;xP~IA1qU\u(Q6B7C6Q{+A@BAC@9>xX*wT,]1X(wQ9%0b"_b?G H  1> ?A"CD *ɨ!_-s) ;(:wA29$1 3. 4 8 3 723"1201GY0E!W0 19gcU8[ _ax̪1 H=ڲt-]b < >?i1#5Z0eVA!a M69 ^&Z E8&76Ubm43   4"20VV<,1 -W@Ca/ >0d?$<% ΢* }R09Ê) ' 7p+s:m6 B 7 C U+-l9-l-xEH']{a`ጇ0 pxCnB.C 'AB ><,xu@vNH8H;2;,!(2`0ŘpN__ @a՘ ] pvqb7ӂ<>PQ1@+@qsu&}`ޭg:3}  S*m>a? <"51408.@ 0="57d.15= q:"156 9A.)JX795C40Q0@1k+J A+| ]M5! b V5 JW`2Й:v!7?Nci]0w0]Ƿx|uS{^Lnm_Pͯ``t p57ti>ч(4  5 H%AqBi 5r)3)b, .!036V16Qai: uA\ 0+ $!b5!\ Assembled by -mo1-# Original simpso0ns{aӃKTheme coHJosޞL:pKp }dx#utHL:p:pI have nothing tocKDo wiG xPO0er{aӃKM fromkde+xF=0JWhIdid you%Lho1WNL"Tis stupPnicak Tc : :f =0:Y L:p:Vc::f=0:YL:p:Vc::f=0:YL:p:Vc::f=0:YL:p:Vc::f=0:-non prod-F=0XTc:@d+1 B)r@I))%Q(#A 0 ) 44S:a5) 2 F( k hS! 4)S ,? y B" 4-$4P-yG!)(U>APbj&D#j&|fAM)&B%d* 2dV"8DdV> T34^£S)| 8D4x4 Wd)U[$])(xFf)+cl){̊I$I$I$I$Im8+0'G}.3|\?~,x 1/fKuǫ+8e.G++B)"+m :b巰m; Jo(|td>\`3W48[65[cgmstXsp?gqb SZן2㇄PZčrS.`ᵵ?Caё ʜ,#:h wF˅b⺠ QY9>!x@o^ zHN,y8z"ĞM֚ 0y|AeӤ>s2  肻{ n}hу^tD؁[xSlڗlqG74-"Ƈ[i&IZ'^oLϐ\e&LQ̛=L~Zh2fmLr >H9;^91Z3}?xϢ[pzBkώ\s-zm t _Y&[C)`Գ \lCϞG|x2;C ױ^sHwSkӁ6Y: 9<fy?}17I׀ O9p& ן zr6\9} :4Hi:·{Pպ5O󊹝z=˦ fa҂C13ϟ+,/]ˎS>w=9l88hǰw8͆4` _6qH9$I1 b\cNj"O1|aXZloN8Gծ;sryȹ1.;\ʑ:l 1;wJxѵP|b[9gF[BRuL1) tAtZ klm"NI'{ehҐ1a9{9CwLc'u4ō$GW\p"2F$4u!͓rq#tq%ǾLvxȾsƘ"jc %!ve[ v7qǚYvjnaN9s-{;휇v S; I۶!\bg=CTh,o$FLՀ`F7ANdsF0q`-i1 tA:'rvh iϼh#oQY˞66zgsAt6sN5UIxx)ȃ"oBGFC[[o0L#8agn8#``X#a)i90<NcfW:GL[`MFggq#2#l "1ޒd'9ț.;,c9^ 7m6g䞞,s#;z& :q!' Γ:$N$(b@pfƐcclA'ہ(ih=s䦘9i 9`d!%ɀ3Hyρ:,㣹93ь鹂ҽL5'&y;ΓI'fc8I2-9_FyE9&&bDHCZGf#1HmKyɴ&$;(w=6w<=3L{;G@]%2iy9CH23;1ـ;nHɺpƒ i# L7Fyv.a\Cp`Bv$tR'zFᤌg4\359 ;EH9 g`fIy mx@Ɠv2 3inxA/qnedi0m&ɓfqiɠc4%$szqt6r$A#@9Npȃi!2 }BiX;iNy4n(шw<>ԉ$m14zc6ݰv d8٘yLLTX8tl;C41A@m-$so.r`|7#;np /r9Fty3s3LS]<qF;%Fys6n .9ܘ;39"3W4VIN$d拹2d$n)擹R[ٞ^3:7EqbAڨvz޽3?o`0!7.on[ KQ@B?¤=l~~jaۦOg;ރCϗ^}^+@yvDPyi9$G8ǡ$S ;`Qyo|K߾M6tG{F2lEʽrMBa+k>Hlelqo 563<cp]kQfG ?oǤv໇;0|pp!&`]|gj?z1u13.v"mOi^^akRd[Mgxp[-4^#p#\ςw`k~>ATL#> i՞=7DB~zcaizir2bc?@`2\l\J'k8Ѥi49s -/T6Y3\W\ ְj甦-N:Yo,̮"s|ǣ>3u0&,ڎ>X׿baH5Lа{"c?%F?+g@&1uJ:-߽BƔ+ؽ,\DTWcd2c>Lr@D|?njl'u {x 9}0OCc#-gb%1rCqvIf [YiCFzQpsi-:q XػLSG 3g;}M6_aa-`z$.{g M=su„lf4eh5n`=ک n4 <~q}b ߐ"1;0A|ޔ(&1h k+` h&1Z[.ޱ@0+:4"grpV |k7ܧ 1u aBn2M#k%=m͔hCԍ p@0Hsj TݯL8QvN4#L>Qpꞙ4|Ǔq EWmcX$=vj#VGl^mnQ3S|ͧقҕG4囏Yt xyɄG3sӘsdz&76Ov@ocx1 %AQۍ0H.2ʃˎGzףT.FЃlP-2Z<}7@pыawvi<~.jΆ,n\#]: 1K/ 7=c 7qJs> S`^:Z~(x\ɗ:oӶO\ZD>2|>ph;6txZGRL12fkvyٝXY|AmzXñK5s=v=pKLvpjzc<:`Լw[sc7}"$^2Avqf@[VhM*q=,G7.M'fͽ^pʔ㷂=%ܑg7V=LA6tÆ/H^A\zcbe9:A;搎"1Gwφq8@܎HգPEm:1lM:ɟgYH4/yƀ3tקnQ,P'BUe`FL|=Hnz-c%o3m=9~*f8I3ZαĒLyNXXN'tG=8qCb>,:t'AgN8d;N D~\l\6ˠq[C̏v Fut'=`trlsy^zJu4z LEB9uDc_; D^,9F8;tTMg~yygˍ1K#:p-?ZIU!+Hyyν㩎'j{ m ;!۰\8J '<4*St}1 <'Ѯ0cxp:4 |W}nz|B8vG_8i5[/5Y? DzT-#1JZҙL4kݯeVdV_=d"5:b ~$h~F<8,_iqu-GPT.l-M>pSyy2gB~p5&v,B1ձ|Bekp:|c1YtwgExg,˴+ݻ~Е,/! $:xh? Z7Ŵ/H>;s9og\0sqޱ ڰ,tg0q ϢO"mXXB?GwOaO : 5^,GN{2;vw\hα0A| |f֭SãseqrQeg|S@vo?4@k6W1(f {| KQ( p͙< >8цP1\=n1\ ֖z0>?v@?01H-X:v&K9 C<yNBXWx ywuR{% Oytz-|tF|4ɽ8s>|H$F柝T$|i@لsj*t/v#s<(s=1YzF;w}WBu"w<ن;s vXGe-mS(NR;(q5N:5>#.Kf'&$'(>؟>2eΌPOawE 5dc\d{ 3kz/ 4Ӏn>+M0s ҇Rys hϷ 碨[:g F;RT) eCzv XCe&4"@tD^ƻ& G,p gS}Qf=sؙ:}plS2:3ħ$:Kw O@s;{ˣOf]B8 e}n" e6.,:xs%4gy1<2 jaN;0'~&6l4j?Z_@6ގ3X/0'y-;-HaXtG.ori0cx IܱÏAp># n2iӳ2X9(4Ƨo6gt LaHcPk~ḳ&> ܏sp2^tCwuCp{:(c0=Npq$g|qPn3!ϐ΀̈́@{ @A199[Sg}錼at07o#|I:yZ r lc 8D94\`[] #Z+p1KD739aYUUގXOXΜ=~cxۦǑ\rnwLI~y8w9 #.OuW4xtmWU>n3ѼAhpw>2֧qK[g 8ƨns!藺wN`]pgTY2۸ih3}98DXc8% YN#\޴m4:ûq yvga;Bq>7GYz[2r3E,21O/ nϱ!>3\SgN.s[rys2|f yƨـ{ Ff!gd>K33M>ܥl1spf\`y $A])g7O] @9v@D臀S/HE~;K#;4ib jqtO`>f09|sB/1y7=s;>l69};ZPtK!F@ѳyy5OmGV |YyMӢ]=( hH0pƷۦM\0<,`vP'{.["M/Q 7νﲪ|( 8ɓI9<%wO0 L]Л~wZc<"5@g0^E@&ŁMT3膺byc3d>|`';36`Q87y^ hbw%mi+{Hz2 2B]ӏa7Adzf174T wEmQx{w>hːsǎ kq6"tX΄ C48 Gj[vxĠ 2-<4cA1qOZ`t`ާ~\mϜGF:|pX}{0m<ƞGg ?;-Â#i`>K\ 8NiPP<Ԙ{5ٷ.˟,UִHaSaݝO8 qߣ&u_%qNX0@ @#[rkO$ \j=qr{$\PKw} F.JcyD0X/BN+F7'φqbyx##;.L&|136$ֹD16bLcG@m}O8㓀x#gsaP6Cw=s=ӀMi`f}Q s[=ޚ/QV~}83LwUp;By #׹r_ԟ801'F3Cd>+#".ف9g,̾wZ(!(q8%3Y: Bx3ffl.Sr,n01`|ю=cC&:C!˭8@5 P^6C#F|gA1 pgAmA<Ɲg4?9%^7w辱Fˈ?ssy/+Ϙ+4|dqw4#r4`[g2 5v,Lhs3b_7|фN31pJtqEv#hIǷ[͚8xH1C<0C yL3bcݱi@cw7"kur̰9ݤ 5sEMsrgڄ1yNuxR1X`_w@<\ ku 9}&vp=?;=GBԍ:rπNoɛ3* [N-=mKAm=n/!tTc8Ysݡpp7bv!սtd7d|p=;7icN34yN8 OxaS9c8սo+H!H=xxaU! -m ^g~̴0$=:8i(w>CEӷϠ*hX㠰(?HAn{ |(kQ'L:eSPyR!y g>c0ItPQ(#gY[}㘰zy.F=(6IG&LDџ=l^{vu34uN5VmH~8<2Ϩ, 1ϛYr&>;bTߌGTaofLP6]zZIDqFz#B _w%V68ySMyiQ;|bZj4|e6M4[|&,vϭ%M",mTܸȆ 1,$vS9dL`۽|,$!;_Lj604іM̮wIҡ2X>#6L͒te} mX Ӏk,-Ka#˹xCu{)L0~H3npvzD%~bObc8e'ZX6o糑n.MA pZ&nZ&`9,w2>,Cf [g.V(^>> ѩ~>ykn4͊g<ŕNЋ֜\g7~t 8b~`_.O:|AmlȎC<5ak0uO/n1\Df_ΰ >B&Uz|@'/&ghI۴irlz;|E_ghxbx dFS+mR""5ϗ=b1 Cm\V%{FNx v\'? = N:m3gmgxm^\UpMf sz?MYt G=۞2*}0V@$KEin#,7i\ g;YKa&m?kOձ#[F8`w9(gXXyl\a.&{!wẆx>ٛ @ʙڀٙ[`w}|L2;K` v7gwOwخP'`3\>ܺv-}N1}}#-L:-Fzء]X^nO6͏GI`6# x|:|%( ŵ8}6M7#(z~](K3z=vx@ߏ_'g h֎?L ]Gi1TQ'i0m]7 t33Tz WIZꇭ`,P6&3H-?ۗ?=A?_/'e~9-YOp,t=JH73AӣX1v&hWyuW=<6NrFh_Η؄3\ŗm|aObb;;\Ce͡L3y}~Ԝ-:|-0א, `X&o٬f> ]օN4f0:卷o7Lˮ+o%g 1ˡiHꑃ:q9r>vwK͌^v&PfpiDw/'`1Ge#}T“ӹѲ$ut 谂}AR|NgNth<JgC%&MFm|^_ܔ,R aX:GP9ه牦;mXஏ+Aj>wjd*>\.J(Oڬ즲3}jFÎʩ=v9ax~9>Ӛ~38d3`:D^q,LML 2˘oS])s{0hIZGD\wdʍw+5 "~~MJUbbΪ𙼵;|^w{Ƃ LbI90=ZЫM?tx\?y (͞wd֛T8migan|bܧՖcb8;k\T'jֺX>y7[KRQz ~DޚV.>n b"MڌmC4Eh Qì-Y skek-ڛvX!4fbkB;сWF\={xg~6+̠ɤXF??l\Q% "y!C;hA =Ɔ脰6lK@reG>KO3a.pqԨ'Z ͻ%zLNa@;y8}gz:tVļ0AZT/x9 vi{ԲufZF 8ApLM?eRg+Shl! xy96ݍёIm1$'Ӏ!4)C?9}C6- 3B{p2o6 5{6h\aqbr]ͺD>dw&N+ Rة . =ebhzF#90q_I0Fô@t'OXxoCyh͑vLDGILe\f˘O/ԌIcXo7GS[18>鰽+$kRh 'ҧ#yi66#4~e4S F,4:oN`+C+U6hF>~dz/AT/g9cLdnAccڭ;n,ԕ]<{~<σ H,Ѐie8|YsM٠gI-oCӵ!Zg{L &`v7X7;,4T=u'DL^O'įY+8;!ar6o'@%A+DN1GԦM^ly[E`+d["V^?gȐk/=yee0!Ha9.wxy::94ei&Iܺy1}﵁Awf:_gПp3 \>9]NhIJ{٣7`]TymDJrz65-74l Cs~.?o8m3 3R}ӳxŰu,C;}e=M_A)p1LY|̼󉆾(e٥fpczt3YHsA۱ӓDrmT`.T8cjnn@- L#5w[#dc5ɉ-d;>WvW"ygi/ʹsՈ}|8<: lQ]aȊ~^yi,p&3u:5^\DԜnd>ZMlEơ|'iѥzLy/bɃCi=(8L~"kp|~uc׎ ]p^Rsl时?J^{MGo<q hsM սA8`^ԸdZ "F4c X&R:{<_e.\8b%mr]>YlY.ZPkTn55-MO,j:yc0o;B֞ޝY!lð|rĸF< D0N\r>guˎ򐼠|gqMBu yOrX=q2i26AQÄ] 9fA8;l4C=$d< v0AO2VtnJ7Hz04坸H+,þsv=t ao@P-6=4 ́`{9Ӱ4<}y~0糃Ne_2o #cD~8szGn{L|tVlsHFy ^}4 iq|#@0{Cd یo{Qo,O&s?ݥvqCnr|i|iBuCaCI ۜlz1$rsvBr1{3%hGLULBO{A?!3 ƌ2y/'8%i> q33<ۅL 9Av:0q{v<9i}hn8ߴ\m5VlA"ZZGkB&<[VBV'۠s >P[O`$٨a)v_h:K`[j gH'am:x^m5PEx0+aOD<<+Px,|ٯiVIcxMi#ehBHX\gr0X>t k.=gRcairmdhSO%%R^:pv1^t^CNYQ Jp[~ ډF@0Flؖ$v`: h5dv+f@ ܽU̹q[z%)6\9r;^P}3l!yf+EOlanZRtG{0&Ib:6T𰟣lQcJ>7 yt4pllKj]ͽ} khov;g1$d GanRG'ˉ.\a{/ Q{o,x"w:p7:S}7p*=ybd=@m_{P ~}Oftm*p:uYxxt+c6*p0z| #]o| Jh Ŧ_?|30F},NlίGb/=>-}ϑhtl~ PW rd;i/@uf 6fx(@7FG|`Xi}zݗpj>ߊ@M][aqLkl ohb>/HxD$66wnaa7O6s!:-|OA,P'AOA;j7! p=/"Fh ܍D7Tbt ą櫤!A-\|x;S2|3![=c 7ʜ0 织zPuՌмH{A=9nmnttQ_'nu:F8$.\Z{ ?>/6M@oYhH5|nE;~2zMJd.+ߍ38;ӰG[\wA!ѦNe!=Oo +>>)5f y9N̈M.0g:x%j?όr>z[DpN*5g8k◤l~"#/c/Q ?lb:3SWa47e пa)^ -IF'jMo‹U杫0 {Br>/[޲wp>#L=Ѿ<6łpG~SU`ql8"P/̝@Ob\}Ös٢UF4BllLH69ŭ[?hk !J~9'ٸHnmLOuiYt -B/MxҼHg"~^+3;4*@4pkkE65 >.V9_sdZE ]m: 781{<L2jYN/'ͮ;Qړp8+^tԀ^3'r8XS1 @B&HQF+%3};#ê?`晋-nx|N`usks j_H$"gȌHl[l0%Ox|&ΔJ;\@;jaċpiN@+×s'iC58q&>Diq2'٫[N!-mˁu8rf4}/n^ѥ1}p86\G׿#OQN-'FFVo"Q )G/+H3h£C{bpAvl>|s|2I[=Gg>9V |`ߵؙd}u@ĸizy,Sy=Ehtqg3 $\p1s&:xh =:^ fI.)y}.ƷACS?:*?HCQ_@NPrF\Y}XDƧ,:ܽ:.;Jc5\˼G˰fG}RYf~h|aj:2:&.s^!`69l^RΣ?aqIY<7nsPI9G:cZNt5/3cPxd0u돗 ƽOE&#Ǟ0Z8G )8XG({&qi6lS-A|zHvm9v;fwㆋ|v7FW,KaA:|^4X9_KH]lP<Ɯi6-$_~h0r)3d  ZqzY(]Gn-6sy}^9rxxاlAX1C(yO-$d,v4shұG[8'0DfCێCd~|lC81͈Ѽ޴4Wb]D;NN<(}w|T&M"lqAs ٭ nOJ6L"^aq}1ѼCP9Ss.y :0<}O{˵#'f4e[':"mOF',X-|ЏAm=duLMH׎x=eٰth=`AޞYې9wە 96i`茵s FF/ N5ZFJ:@ӟ|8GSn3lqmb qĸŊ#G;GC'@~ g~:sfϳzd0t|HcHxMq[H؎'I;GF >g,q@Hs Ė s\sl?K&k9pʇ9OHه7za/WY7y5X[ Ёos{!G>(M(mVɗ7&<rFLP<.{@%G<':@zgǒNJr?2*sl˔7wHpY;ļV1Hg7=faFSC4Jx92Ƒ$٣j]sCtFN|'_0ـiuOdq]#|lbˣO Þf:G2U:Xr;0<Ƈ@5.1mّ3[]3>"9|ƁqXbgHAO3:lķLs<3c2G&hd3$4Ǖ:yap8Ɔ"mΡ 2vsn@suUIIst<4ї#3`nqatvxls@ђfdyN{>`>qy:DNm>9:k3@2I'n<'>G3c.>cns6AM49CzG'z~)@sNL6$IӢ#hΑ8-2 R-ΜkI&.9& ϛ˃ISc7l<$M]t2LȽ9z>7rY$f̙hxɐ ZGn3c q-rO #ӟ7Fi8=:- 0i|P3)y/t2F4I9&et9InsO!Oc93GY4eOqs/ay`'9''xss3Tr{tP3FGQon tL:Fm1NE&n٬ #O%۷SA99> A"Ƹs1Iϓq 6+ # 9#O1d\&<zd${h@a$I$㛮[ypqFgkbiA Qs*s,Nd2p3fNja6-X er.6#pt53[vmaC u"[\pJt ],X\vqI$I$I$I$I$I$I$I$I$I$I$I$Nf2:-GKli\Z8B\Ѵ9]-i'pu[RO_:Rj_kKim< |tRka6NڜmF"4u4.]%lF6¢zSqX5إխKxEyfEu ;lm6ҋyiwhY59l,";iB4KZ?m6Qzh?Xgs #/^[Fv/V)!R6yg.m#j- 6g`&ҷYvdo ݅m4Z(K 凖S 9S8X%Tr.><b8;U[譈:#{lJ6ɼ-!,6؞"-ݚ.AԪm^Z||FʥD_6/.v:AG\U7ᶸFt8OSd>YxKYm=yfŘmlfCIk9Kzk!g,6lS^6>~ysBQzG6M魭)/M<[1qǷZ4Ώ <EX_"`q|t8\6l2]/5kdZYyiEm0#59L]D5Uʺ E]svY7c]GD9Mk)j̏QKbl':PM:X7Bs-R:vd|Ζޥ(!Y艨自1l0N>:+n6ҏl7)Q1:9#G.h-e</iTӣCniE嗴ȥ9eqrPjfhvqhA_5Sq)|88#iJʄ,MX c^2 ~YCްˎ*G|te]ɟglna|vFr{hxMJ4utاaba,K1*Fɤw{e d:甸~|@Yh9k8s˦cdJ]EJA#(s7:\CXsw9]LO dZA≧0z3fD[UU.hN:9Rˋ*q[>L>zfU6ujGX9y(gti篜F ҍ lǭDYb^ϑ [McV!|r"fϑtEeb;19cY|< 'O\~lG0T.K;4livLS9rQt`Z21~h~cC59Iyѵ[WEi"DeS%!39rҎM -?"/:Q.CntBft8\:5ht#>L[9Ƶ\3rD6vD;k!384y˜k)Ʋ͌^ht͐3f<99,t)hf9:H[!őm1htK:F8<&fEj8Mȼ^hO|Z6.r)0MNZ!ȴyFkdsdht^srs)qH8CHrMH:˝.2.*ظZ8)w%lR=ti*RlNr9=%!HCF͖E[K2sNNN"|3CJ8L'M!\YR<<9G0d\:q(d5Bt^te"̉tf5Xjt(xL%!:hs!3<:G?9jh|V",ѕE֌d'g=O8ZD53Xj1M2[6d,KS)|ń#qMc:Yqa.tecȴy<ΚȎHYsY:1Ey?:!kl8X%J"Jl̈́9bY;6suNL3ST>s5hѰ|ma"qFEZv!։y3XEǬFdM 'Dń؏DX$OC7;XmCR:rѐMh!<=hI榦MX<&CєD<%2;MrPæKMbDl#3#&K3K<<\<2<'M03K'K$iH#%Hd>r9$҈DIgr)y&s&I9^M9rGOX:hNm'u,ڏ\NTE W5g+"ˇ5жyI$I$I$I$I$I$!:"E.-Q%Q^y_-jr;9M?&ьˎ;&vyv,-9`?lB6vCEME9xÞ5il)e,tGhJ/Z%"γ"SUbؕ l榇kXsu$\A#y8ΈZ%~ HGbsqr-GHϚ6W=QǪ{1Fŝ8\֏bPlyf̅\$b>H<ϜzNtXy/%i,ϑ'N\9ӎ6ļ3:"qDZ2Qds<-̎tg,r%dI$I$I$I$I$I$EKBa3RNgecDsC8d= ?$' OɒӖ9 <9'`jFffI3$s &g390Ns2I$䓤fI'3Idæi5# $L&CI33&fs2L'<$NffI0L3NNL'&dIə30Nyafa$I990rs32I$fdg330g2äI3H̓2L':"}F}t)cr u#y-(ЃyK<tyu<(J6X^:YwZN*SOSlɃECt3Dw-g5q y;Q9ӠCTҶV^6;$ |yѤ=-):E(M5obs w>=,h?~nn\L|kHh3s6ZJ>.3e6itL~SywSb&Ř7Am qlJrrM2AL]zMNVD"CkK;4ǰ^rю}/s QFǞ1ѣ= _rN~ K7@]G7Ɔ~30۞Ǖ:G\wVewix>r?=!8two|m'c)3 l2٦ $" .|m17ӥqƌHcAp~}/-!gƖJ:4.Ӿ9-#?*0KN20c[x~emvje,y'61q\tl4͆<\9=&=7ZIu8, wmq qx u+/(O ly4q 4Pejl>FK-. g,fnOk#DW;K2.#3Z_3h?ar7Gy12Ogz;`\X5ɆADSW!|E̩ cʄ΁Ad=:ƥ0ysM:0mG.pu--s}ԯj#'bbEpM)$W~|m&1`pDi:n?P.zLKi,c ?K9u6׎)":2snzky3@-V#A8|&M>xun.4dm9´ ]g6]}zc|XΚ5'BA Rp{Z8}ɸy~.ōVEeO,N< Qmh* i|>J5!O8oqh _IX'*ͫ{{ ;-&[JwIxa#Χˏ 6qHFd~ٸ\3yЋNvBzC[(11Ͽ-8l/tA!j}.V}vXuCowI.Jn?^QBAcL\i ;sIF,^Ҳxr ~<|yK_P7~Z\`㛎$L)M!m|A}8ćk3X\: 6$zuuG!pnv8X <h`ϸ.@Z# j\,\` 8:#igi vNdYfIGaiQ&,91D;L*atNaànaP=6aqɂӀ]k~ ,ؚvҫG[.Hd#iA:X n| qIA({7<)zvk&xV,Xx;4.(8|{&swthd!y?ٴFwRc.e 8%mނ?N)Eg=CJ0 ۀNZ; W*>|i a:l*A˿cpZn2eO% 1:t`4bPӉ`sZ\._,}<] L_0f}4KGX:"Gv[0tONYXᵊ Fa'렋4`yCwS}:Cl=qGbuן.3?|{};j,8a=ˡX`/ޒN.ې큞KY{PА[nx t6e#69qC0alDQΡ È6q:/Ӗd[gi*Nl]Mxe7l l\hh2zƖb-) jz"N:h/pك qgLJQYGss'Zy>gg uҀS#ѭE\;Ï0xeO~۵k}' 6rJ>]AƧ>h:kFAps^,hq21{^~,3v[ti薨e3'0nxK8X4F7; vj="0۵9yLw3ZN:N9 E`^fye.=eH=Qtxu)ri񧞀C֘4J9}/ m+d ю\ox1p?oV>Bݗs2.S}ƈv6/!lϦ$ x.,rᆞL2pǮKRzC\xSFt6Zf7G㼼Ml\+Zr[}1< 4sk)Ѧ7=|4Sazbǟ NnPgpsyFyg ϛLiG{֐.9W9㠼j9 bğ姈mm0읜Uצ s6=!γo8ZYL{z=twͱ>,Ejt 0Ӽ:/>6qu< O>8!NC@v4Au㠮D}y+0D0h0~!ӵDzXn,q͌;thc1Xb= 0F<|'Lnw䆧v4Mz<'LdB0H= 9ΔEhS$F3MqwAts][x,=t3zL8e{ 2۵o /50g ml˚&1;FUC-Ѽ7G91ކ{ fdZrΎ2ۤqsԙX۱Dھn}|0Os0>g;hhl]ѷ#z9;b9+oO1][xxgq4M4lyKG4=G\C A&c/l4(3,{ptatyTD{tbdcR^/rc9DYmI f1OŔ24s#BvГIg:z9za΍A*L,hNaΌ@tMN3A6fs)@hNt^솑pvjOAa8XHl=m!speRDbGɂfI7G q'I8@`r33A MdrMiHfSs2sA@z $vf 68=\2 6RE"w3;rf)$I$l;hΌFtHH7APM60 $fHɐ)QH'7F%D'raS@9( $e$IR)$A\m,f I6fZ iH4I'"'I8f㢃3NnItrqNa肍Lhz 'IN3Eh̓3q 4 $h3.3&I$fĎi84I$IH̙$̒IA4Ih(i&I&MR #NM'0)'8$h4rL$ØII$I$E)6) IrI$M8&M SL7n2fa$M$hE$ÓqI=$L8$Rh0NN.`4P)4 I\fdA0 )`I#Ú s NhD$ "N2a ia'$q($D9'&IL$rMaAMH4)$I"HMEi$i8ɦI"EE$)I$h REi(4 L4I$I3&ERAHIL$Òh(3 I$n '0I4i$QI$I$IE"II$.:)$ 0I$̓ $H.:EI$iARA4RI$M"E 4Pa8$MI$I43E"H& $(A$I$I$QHI&NI$NI\L&i"I$I$I$I$ !34M IMIa$̘rMI$h hI$I$I$)$4SE 3&aɇ4ER)II$)$I"H EI$E"H 4MQA &I&h PIi)$II$E4I$HE$I$RI$I$QE$ $ 4PI$I3$I0I9$I$ ɄI&ra$rI0I$3L$̒I& I"I$I$I$MI$($I$I$I$I$RI)hA$A$A$I& 9$2a$ 90Na$a9a$NI$I& (4R)I$I$I$I$I$I$hH QEhI$a0I$II$I$I$I$I"I$I$I$I$I$I$I$(QEQA&I4I$I$hI$I$I$uS#6lTiG I$I;L;Jõ#&{grwΘj5; -$I$I$I$I$I'Q}/f\$I$I$I$I$st{x$I'A}Iƣ3qf'>! #yK8f`@I$I$I$#wL* h>ȞzIAːΦ< #s`+ڃu#vl*o+@KI$I$IoCJꞷC7!Txp igKwpԺ3`yG[$^>DƂ*0q?/ʼn~=(o5%}[!>^9vh#fhlc6D3i0*rXӞⰝFWНGXqX89cN\GK;Kg,FfIaq,EW3A|>̞Ϥy~ʟ<$3r:Z~:WhCy%l<%6Z DC<{.¥s`ߧ;xA饶^zH>稹 crAi c>:!tM$N ʆ t7A8\aw2W7! 뇩ƩȂj0>3uBl jb0}(gnObħ?GhޥP;pSgM.k7 T8=m6E @8ѬfZ?yX?EXe~ \)'_rmܦzu 7B&% G{+O':ׇm#MtlYר R%g+»aEiI`hDC XAOhxL\Á|#.Ga{sv `a#QFj۹ʑ(+Ia:1 {2T@j q JCehg޷װmτ&Yی۝ <S޹'>v|ݜb;x!Ǡ),+XР #u`;1XD*hb`xG| uqlCM}\Fܼi;5 KOnth<'C6ؤ1 (v/v7`uycڌxt흔61]rwRn]vW?:Aé燤z] Ѕ+L;8 p:z Gc[1El a_0f9j0t~kڤG,æfC6 ;>M< zz*3K ḧ́ϡL?C+û' |Kj4q⺆,a< 8}0|Ȍ'{׳0G ßU6a[v=wE 3BX>+BW~pN~$`P۬Geiٔ|PfEهD^6e~hIK7utb=~ '4NE.oI9{'ezL8'y);K>W 6䈶KiN|i h/D^] 2DN1GiHB0q?X(I~;q6ĝc%iO:NZCr:&ИS=@XhS ^OR7oPF\ޥ.i4YMsKYcdCéc|oG't 1nUa౭+@^d?l\ȋD23s~I%7Nm.h '>'S;O&yǔ+{J*-xnGN~T$z~cޑdsfn_ܨ3R#S֘.bZ1=&&sS85#DN 9}8?]@_6D6~G掘tru=m 7%4)E"I>63j'L#7"a96c$;c:۲də$އSѝ") dfg͚K:DZQ8㙇̙:7-3EƏ0{GqI:kH"~Orf=T67S"<i8u!M7tjbL#<`f{9̄9ĹO3tOIJffiGp=:#H8b=^sg3R\OBrNNdNL2O:@]".po"ABM'&"I$^vh"̒i&:LQNI9z:)"I SzA340k"t9&INqPzGHa93$ g;I$YI-5sY2p v=g̝V|qI$I: (cdmd.G $I$I$Og0|tM2gf1`uǗL,4ZX4X: ϟ/.7@c`v3M̗SG_`~G@k=!< ,0?kІ򋩱|lGO>7 RI'Ql6\;xaNMlƃx'?(V(/; /?G\ 72Bj!?7&G _ȂΣ!?KCmtсA&[Z) ŌTX;Z݇`;[bg)-?<|{q|"$ℾ'jCBf--\n=Ube Aucn6_/Qr 5S0 Cpb6Y$0%ƲnϽ^܇Ctxmj=3p}H/ GZGAuI`c| R/hfmvef8zwhc:lK et>X2=š<| yhn}-o ͭg ?C4FBofhepH&=Qk>.M]kf%|h2y{FǶ.Թ.]h(~r؞G]]Y?|AWcm~tCE9Çh#(ufYئ=8uN3ďe.{DŽk31t0)8ϓ܋ޑ4m-'`$>K[u֎Z (٦}}|uO:@3u:$˞Hy<w Ƕy/%O<1H{*5iSsC>C Sf>4;'}/-Kh~b :Api/ުG|\h:~c7LOr;Ȼ7:vp|_:)&yȣe2fy 1}5#ƌb"#>-).Zq<@͹kvYD:A"BW恫{tAKTð{; `va}Oq硽ّX:tE|#1_FA8V?z(Ye哯~.>du8 de3'7Rݦ: |cƘ6q<3e6M"Kx_ =8gq3pww٦,{|Hxӏ.3_Tу6g Fr "?m?"|xUL/S%~O89ǝcbQXG.Ԇrs~J!fjDØ/i2E Gɳ$P "i {!$H6g3l'tDp 'Øm0siÜI4@n~dq@7sI$Ni336e='i!a$A$Oh0di$dRdO,D$\rIØI=sA$@4ZeI"I ENM$p{eH'8鄓l4a$IBA$ipii$E=3&l۲daE90vI-$M 0䛂rfNZ(&MӘ ="E"I4I3$M$3 $A H I$I&)$sI$iHH$I"H&AI&I$h"hdE)(&I$I4Qi'0I&d̓3$`IMIsE"H4 $I$MRIH&fI0i"I$I$ "H&If)a9I$hi'&s3 90I$ $ 90I9NIQI$H$HHh$I$II 0(I$I$Ih$s $ $i$H&I$EI$H9$I$H4AI$)I(a9$2a"i$R)$IRA$H$I$NI$Na'& s1II"HII$EI& 4I&M$IA&)Iݺ-DbjBu z0+ikgmF,6 ܼMt'^VÝJ%=*]^^Og*m|0/=m/>^"F7!n\#9-/ǁʵ&asemjF ^2zRBkZ{*29dÅkz4a^7xj^Y:hm OCcKRӤ.-xܾ#{kь"Bi/ ϫ>Qy}2H1u<6^:p1ړ¬^G7A6L D~BX8G A\Y<ȧyzyEZ ~y&G,.Za?m`'J~;FGgѷ@y6I8n"GSzb;& Ⱥ1Y9: z&t4dBЊ>w!T?g0|zf1y%ceD.8Tc=>je8gyޠ10Ñ4Ox16<]St֘4|1fOu|l1)& ù!8q68HnΐvE;_19fThgA7SӔ^`1ژ>lXN0|;H<Qm/⋿uXt{vKetJ96dk,/LcÕs_>p,G>Ss0R8FR L;t!> hv]jrƹse"pb1'\06C:p?'5@3dc1uI"`>ˎ}yZPI*9ӷK1 mahGOyG5e8h29id%ˮQ&zRΚ;< 峡Jܱ=ӯ L4+_yyfwMYscoQMỤ?8u t K[;Z@ ?q}d<'.Eik,'g6K,36J928͜vXcP\k|ϠHN9|Du8֓,gȃvke6HÎKnz jo0>GΈ#ۖiQ9^zc.3 LgwqvǔIf`|sN1i=~ٮj"NLxfC csfclx1;p_gМ W#2-s!Ӏ3*˟W}:a>9Ql ݂^v;csxC0sT/D9XƝ':YpASq+|ak8ؚ:/>(ޥ=NQ]s\86d|NRk*{î=("9L>T<4 ;b@cM;IoAD3\B<'d9G?&e >s6!6|h H7ވR ;G>r|2). (9p`n0=>t3C^=奊j‘.{|O+LxhHzqym/q +\ФFl4GddmF {7;~= G֍}߮!EDAlym|tG㳐e/f) .\!{ga.Oѧµq@`nF6s\ƾ4s3۵CI79OۧHf8:}8+Y#-y1 P(j^A\&nu0q,d{ǀ>-χ~e̾h qiCL|%6W69iZg9$h:}.u:0:;zapџ5=L j{(y.QOGopB<:͜p8F9QǠ5pnw"hd\yVY41V+ٝ=F<itzWq'0¶nj,78m؛~@&3R>[\,s}}a~t0xu)v$xZq3o: uril9C6u 8HR>ؼ|mtl5=y{5íEC[Cjgfqh S|1b.|ŖƈW8lfF'\qa@@6=:h}= DtG8 kuٍ&K.-p=m<[4ָrdqPh!ƌg0̼ӎ\cOFUY ӕy.8Ƅ O]->>9ӌ˥jL2'^B~gK&N'Ԅq9fYc;67d[Jxwޖ; QwTe&2]ω1c;칩9cLi9؉2RZ3qL8S5H,pϷCO NF9v;9ȴl KNO3q-2O<358^iC,Bq{,6Zt"֘Ӊp fs0q?6G<th#4nخ <#F| ˹gdK܁+/\a;<֌ɹGK:8 yd3%yO෾"#c6s^ N>B?@49Oo:Ѿc,:N1=;>Ż`)/ ;rÞy|%9ju ^ԅƦlL!yuh4>kόNp4>{CQDOvzpOrGt*oi#92Csc<|d94zyF_9Au^b@K0;|6暹Rg /c@p>ەNLG16;aBhXȲhEz}y xstiGN睪p^jf9ˊQ]68:` ƣ8caeɔv>tx8fOǁj;.d_OrۉC_Hͣq4mҀG/Y7< 񌖷pNtp~SS]gH'_]Ϙۤr:&CO[x|c[ 'ө pb1ӤMFmˈ!;1g|VRws3:Sr O&RYe$Ozy#hۉre=/@1nF9KBV1:hp1a〳mG͗ٔhF~W8c=uuntFˈvGz>-Q9i.~1S΢|3b?cOМ琶0gc[~ЎPt}yh&TɈx o8әxJZ DLakl`4lj/:Kb]>+Bٴb.>Lܺ2׳/9aphѕ\Fo.s2;٘;03nnj =\"z!n =e{bw:U 4:+nC"3;r94z8≼L3ra=;|_vL2|xm|NnN=q0Nn18u%ÜkD{Н*<,'ܴäRp'?9~CKG!=~i)hǽnvO79^2nc-!޳/l;YpwQ&$ F`}17%6~OƖB<сq-4^+O,`u:Ot#x% <9nWrNe8\ª9>1 ψOJHx&uu{;B5åA5-{efV\#R]ڕͳ&H0؎s鄝9`w/Yuy`fpFLX>8IH>y㚺"<[i>{OOWY].\.: `3KG:J]@\tECXW0P7V.}ltar#z9d5#qGL]ǘfE:|j +c{b+=ϸny1rGQt|xļ|8@޳}>jsN\W=/,!r-wū;rP RmNhGL#=xN#ƹáHsӁ!6L?w82[z~q"6Cns8WFI]ޑKT G..,qis цbgEӐd/F.yC9y!za<<`ReZb#eqst0f'n)ouFvYszZc,u:p @xŧ cu:$஍FsP+#gvc{x'Ʀ}6l isTIҬAaf]Ş /2Θ{߻/G1pNR ycNaBקRSIb&˕;) zFqx<+/j6o ml GROжF" A}1y_k[39pΚÝf~z` J4"e13ɩ/7:FZRiH^0|NSLuYVpDDaN3Kuq %`Vp øfsy60s|a{pyg흜BÌkM~yG.jhc4=xdӨ85|=3j4ke3Xii0;yD?& =in ob6[㚵r0˾cOy*;cn g?c4ngcXĴ E>vl<gӕ v;|B=8;m)\gqse}|#xi"rze2k+Բ58 B x. {y4 3QB n*tC<!NDڱ <=$;gb0C[ 8AMΟx`b?cqw;=׎{Ɯ T90ner-3#`NrFžQlL:9r_$3i'6_mFX aB@' L>YGlsЎxJ 1(z4\uc-!q'k`T.?)8 ^LE//kazn@GC8u!嵔9;md6BFS,(Mf>ߜbpF9r{#' o.)b ϸ7ZؘvxՁifx??UKϝ;j5WЗ҃;C j40N^9p6{= yې H=.MY  sA~8-e|9Q<8HzϣrWiglC@wZuDϝU/f njAgZ\>2q5lx59E:x"=ŲGs ;k8ϊ8hڇ|Q3(K8-S]duH> X͎n1߀:{$xD}:|.(/dyX ;?pJ@>ܳ`8@Ӭ$A]-pDĭ<YRyЬʸs6C9y4Y 5:XG}4Uc^ˡgIH:rm+FX=tSF_,<;>m ?G[YR 1ގKƷ%NclL#$yw=azg/6e☳ 6'a&& хL\n4R@ BӎQkW뀝~SLdfmrq|z>s6NxcF:nz258NJ5NIrZzYfa@{?;lsۦܾZ2C::1NXvdv]ׇYysbH0xXgc4sHg?3kc^ G?Qg q|{LO= hJ@-4|G瓕0iۖ)F}{fu tGDu%><3@Ц,Ko  I\ţ"[v9Z"(|'.-=0QzɺˌHNz>mJˢP˄y㈴g#9D=Ͱ~,Q:M9"BR0f2s^?-[3itu BZZ1~Y}jzb20z' ͺƜl+w:HxSvd&ispqs$!QzL6cf6ɗ" ;&~Ge=*gc6@Nc2e°&N|-gwAQen# F<3}f^5=PF\T {;dhݟ./?1FMΕ: P&]閹аjyOK NQv# 7ܶaǟ=C<9('ߗiNìKsO7,qBS~zyѮ <<8 C0j9[w؞7 N.YzRdщi9dj3O}ewØW" O$6F|ˤ.5;EE0,pP<ϥ02njh-rn|8^ jGnЎ"c&N|p udɲMr6eP{C.} Y4>9 я$*yٹVB;3pP}t Xb$Ú4,tǤ}΅ۙJYi yh3b>8W!l./y'΂gW$nU 9RcᗾbMl8!ށ6tP>^:6lPzPSA>K@5%&rJ Z>\i 2@7! }6p"ɥ05Ɓ~`1lu./Bwm> G6Bбoiʍ8,cxs)ְeޞ b K^ϔyj #(x/sᥠSgs&2,Cb5l(mft :[|},<ԕ9upd峃BV MoGp 6M wU +hG`N]_ } 91]t_D6;M8~tBH)K~CG&ĻkF0߈ a>(f`ß1F3Ώ^Z {6͜0m 8yr@@>?[xqtrI-J|oV#G5O~^AEv]Fi [ၣ}F: Ni%NcgmbP?`Gg:`=G~a !o P&L?Β_>|#vuQdɸd->>3hGQsm6y zK*}{ '><@Й.<mgy' ţCQ\8 8cφ X=z7Ore5@0uePu̳G.yS1I<~1ER;c L5!u0ԣ즐sO 9 p 8 K.|簷-X3ᘏƽПhEǎ*RIG7S|\|yE#8XC٨Rxe:~y]XX)E.R vGO<{K7u401{Oq:^A p{Pgxa܇'06V8N{kZ8p1$78f4ܽ>T@Ym, ޶DB5hφz13qح3aQhه73Y쟂}NЃfaq;}!t'heظ0В=+Wnt@;2qxƷQcc= q,}Lj8p찢-t'^{y,^[N?q @\xS`NM}ٝjhv{ǰ uX pg1ktA|30?:{:I[>Pq;plš͟1%;>[rKu6qF=`2a7DŽ9p3/ I"s\%F8s`z=v#چbY"1hOAoP!tDzқr2@gF)u| |a;>yCeN]hbO0exj@>*^3u_E4FuÎ>!a؜~h22a k=K=rpL'˨2p6ywғ®9vIX#O:g(>n+ǧ ' r0γӶzhd,ڕ01erOltd78kW)hqj(~^LqrN+\t&|%۽|x,6'z@_|4@i?K1zgZԼVǝNN Ʒ&6}HLvG_-9Dx8 +CXc-}<7dP~dǚ#}> 6xPeݧsxZӰKױ .AGNn?ʔp8yY> DPp<*>pq=y+[?$'>2i#Md {9K+Լ%Qrӝ>[.: Ɉz4{d8|۞]OeW8ۖ1:lvѕ,&ˬNcCy;cA?)&R>|Gk&yZ@~t W1|`.&.8@>*Öǹ R <1y"K>PwU룤l)|GqWz16P 5DZB4d;ܴGoqτ[;,dx,j' FxN< ñm@VpG\DerX,0c&y/[F c4ߥ#]-8z8G>Nڎ0։Oc_0|B~|9<4iq!3&|drhchp>#/=!GnC;DfQ'x"S#z0탖IR|2O,Y:w=x$+?NZ+]cSBV?=$R1E>P2 j]bǞ= yyڣƽ4q9Bb;\v_|8`0[9}2lj#8WDNgnW=cXv C=9=%#Ŝxݸ>CS#r`sۗQhhB̵(_\0`睰$𭭜sR.j:b8X0 ~-Cǭπvq/a&=dh8ҎA2簌sé`玄N_=@vİhBy9T^ys7]x⦔FcNZ=={̓69'L^33P!SMÄq zs/ƞ)e..@ўu;O=y1583 N8i4iOOp8.r3LZ0c#ϞKOҜ FxQ|Y6YަN1x{)rb6`昷/Jc|ie,9va: `>9:| 8ãtњ"b>wY̰0P_kYN[~qm|ԜlWN]}q|[,sK8{AXK4Ŷ=}q\˳xC;ÚApn;{ -8P]7xO,>/}~s7œ 3\[\II҂d򾄣`uO3;0IfFSԓ54ed.)xhQ)DGˏhGbDjb z20x6#8!^pPAϜ/zʂ=c>CitA3;$ߎ_Ǡ&6_|:|x@4ou Ly=ǘQxy+~ b6q`k 6Jf;3 ۔6 #k"R}BqH]?PQ %i;9 'vCl k!A|q70??*qs V xt3O*ecp/:^`x8)<O8[p:)j󤧥4@y#iMXMi)@6^=hyύ6$n9:v㗠k \-.#4j6: 1L\.qy7x~!6g2x[K-\'!X-=;3Gm*s=VB᰷ N!C1}xEԞű k%%AﳘCе<^Zs6cSLzy;`x( ~|^zr]GIh !ƹ?3e| a7#Fi[<;f6 1Φ_GSg*]MF%}]C$vgbXB.jϑ0hЅrCׅ4^ sà3: s&99-Nz՘o(+K7o\ 1m@_/I=>3" Şĵ>F0{9eyxE DN6э qX-H]ȞCMZ&[)֤;>"e&ȿK>qSl@Ө&Єީ!ށ~lL<>Ky] ONZc*QN_llcDfo@ISvʻ|0DEQ`x u >}SǐY9R,Ϙ9AYmxYG\s! š|RjgÚ |Q6|련?k-#NBe'Z?h0O_S:ɓ7og0C0D^CG1b Z>8b;Q1Le N0G xLYa ^YpcO΁cof4y1{=x1Zp36r !xhi$m9a F#>]\n֔xapOHx1OK!`VE4j^0O>ʩ=u3Ʉ{@yp|};5hOrB!щ-Zz`+H;[Q|`Qx۶O8>66Yx35#qքe>؈03E{H6qq[3Ih@|LN xxO z&4ˆݾe@GN3*N=AiW8|g )ln'zUQmdM%l3Lf);@%=t Ҝ aɈ92:-6[˛@[S2'3;qf'x>׍ˡrhof>f|mK[/3yc^:  φVsk$ȷg?܏3f8džV|><;e\sqhB3~y=}#C 3E?%ۯs7,wڨzKcY)ߩ!stmYlKP?L#!~'QnS|,zBF9AN< &{0fB7T) Ԟtf7z"HGQ<<7 hqG>ƙBsN+kz>4ptã F֘ ̛}$]:'.8Λ 2Ϸl3,O;\ > > |xt 14eֹ>pW8|ϴ q ssF1*OŌ#\xma |XKM`0u1sYہu~R?Ĵ?fby;3\*mG@c:ym6Lq ꏻ:,Hy91 >x5(_Awg7,>q:u n#֥>38DZv<H/FvEGcz围3J\۲ Z0r{f>Ob=*A_""x0;yiݺR|{k #b# 8^8Ε=cϝBiYn:Yf?mغٸ9 ]6]pXvQ>^Ch I<?`9&?\if1gֲ>t%T<5(z#N=9vCY*utAl#oRtkw]jͅiϿ-1{LcShEJ:iZ %M Ǐ>@.qO>oӡ,pͣO0CDA5W,wFav.wHut[p cm)7>{al?xf7ׁ,u1{]n C˜ W4$$ >W?KG|xw5gw8jqǃ0q}<s{"OVKߜhx&6sv@sy 0w+ }-C(In5`:a =E=bz23L[h t=1oWKauЮyh7#=t у0jqc 8׵!H:V g|t/6>o➐4RC L3(zvIB1=>Y|~bm yOƕs`CvR\n93YՖ}R^@-!Kޥ>8pJCCOMJ8:ezrOϟD(}m9x>6r9 18?{E|wƌ?6&t܆ g~Rώ#bN~|8v~1Ꮸt4k@qQB3ڦI炂\N/scMM!<8 {ˎaxIaЃ1鱚##4OhiB\9=sl@4Z5CONM0N#EiE&=T#Z=lkz6{F >h_3Q֥1 h>KF h)r>g V.h3;=!g{G,yQx8RwDg]˰82D:Yq!b E:"b77R.,`֞q"Ljh:t]msg-jzGY0=Ydzf&yia2NL>(ڦr F`Gy\s>zsG iĹ|+-nXb?cHlZ\cBwO;/ut|Ơ;B=h51|,dq#qh,1v|]}ps<:͗z1Ѧ<ưF˘fr-|aYyՈѣc/'N0^tzg10cn:ds, fBǰ3vkKNVyfj9?31<.{Eޘq84>B4.FFiHysw`,?n>R'&~ן̆р9==WYsQqh0LaKatm3nt}>rӌlq.aı:X1Ƒ7%;kLq%[bf0,wW$]$'jd8 'C1ѹ8;!DG\88{oQZ$cΌ 9ԥi]88ag9La9 xHyF63AO-s >фόYs;if+<#mhr9/CQsKR^hn<Xtv/ȼc>;ѭb3#l6L[ kėerJf}ҨMyI;p=AǺg.g8(s2 GͲ:h5=rOI$q Nh=N|1Y< {Л4M4b'kBichsB`7s{1И]nkg9ϚNfඞds39^Gd15A"Α٦""ɩLU7XxyyY'LjKtјJt^98}Dt^S.$$xy^N8psnh&q$n3ͥ{G<$͘։4e3>j9;F2sfхI4lƬvKic0.5 8tvg݉n?HcFa&Ӏy-Bvj4͝4P L= i4F9 h icZ[xnjO[q~xf]2Y:(z4Cݲ<3 ^Mg ٷ<aƚ3:1 &;$T %H8^8sD43)49VZlc<:31)7kLĝh2E#4} R{nqHINg476SRyh9s98S4;KL =$ٜRFyݚ"r kHFE[͢4cLYdm6{6NaI#">|Ngt^4>;MFv29@3:h8N itЃ>aѥ`Sduvly.g"Iݘ@ӜdQ欎23iɀ5sA;8i9E'lH۟{n I=颌ٵ`p$34 f1s@)'lnDyÜ$x>ОII9昐ӆu60ሜm<$cN8]b:xĶeviNq{Nk2NR'k9Gn;I9E3yf!8Y2FEd͝k4 {8ctCdRHhG{g9 ]&KHgF}s#E=-:hF dfF;G1ۤy 9fc#3L\ iraӅ<;ggxc'tX#mr<N|Ӈ1!.4Dנzi& a<&XF6gQvዙ-Cie4RI$H4;)9ьB398we&sp;FEόLKYvv̊M7Ei13 9Ӂns3-&b̓{sga5Y?${ il$Hs$SgH9)96h4[fe0a"gI 2rA6(4Qlqv63d$܊qm993Mrv#IwDʼnͷ&i2l L2,즊M SI&i-6 R.qёL#HPi33-$R S2r&,nHM mTeȲL X''3Hg'#ht$He$R)Ift I$-0M vRH)9ÑE&E4H$L#$E94iK8m4fe738 smFNGIEf!I$)(4HH覊hNqIi -efGAddd )Q2)4ee&S23m6Y`6dgs-4-Gosh˜tQh&$SffA$΋fE$I&ffdQISr-2ǐA##32٘iFeۑ)2I+HIi ddSI@٘qd46䌋h̴Z@2gA# E'$fA$nqe9I:Ri$2EE2m#8;%ђHE zM ) M#6Zi4)2ISMɧ#$d2 s3("(td(&I$ZI9ƘH$dRFe4ffe&h OgEI90e4io\ՑvRh&i&I&fdRFq,H7dw6PM# iAȤIёiRi&MdRi#8覎RFFGE2i4R`ȤFFM#̲NFgq$H̊h9E33"AȤR2 RL#H#$QvQI3̋I$)4dZ;2)43iHs)R:h$2)"ّi$YImIѐlg&H$I9$L6`iёEdI"Ai$I$h#2;5!E9 4fqtdSI&fSIYM$IdL̢iI$FgH0LHZNEhə##,$ACѤ:2I&܃IFEe"̌L6I"љlM4Qi"E$I$HȤE Ne61"3H$i6fRi#')M4Addi+E0`$SNA܍!Ĩh$MHEM6fi4Hh8[FEi죳##3LXQe&t)4dQI&h̢I4fRI4igi&̒s2)RE4 H$i6QGfFE3$d(ȴRI4Qh4es;-$IMMA$EFH&FFI(&P)a#HmHIg#" Ne$HE#3$i`褒MI(m4t2qFE32Il:-4d)33-&h4QAIfH7"w&ђ fd[2 30ђI22)$ٓ32-ƚ4I$E$ffdfvfd (22-fSER(i$H4ąIRFfE: "I6 H$mdm4ERLRFA"Fge33"I4dgfRMIHI1!IMYhȴh4E2hi̊r)4ĆfFFE2(ě̛rr;HZ)EI"2 $H4fdi M&3 FH[)M&I&H6fQmdFE$(ȶI"ё2(9ffR)P3H̦ۓr2h̦Ge8fQh4FfE$3)sE$I4Ql̴dSI(i"ёmI$̊FffEI3#3#"I4dZ33-#I$-E@gdSz:22-44dEtI̊sH8I#2Fe"idR(#32i$i&-Ƙ4h4i#I&Hɣ# vddZMQE)93&̑hMhdwbBI&)$I&̃IIH̢IёH4A$ME&FE&E&̑I3$IHA4vddNfHHS;5"M#2MdRI$FFFgqE2FE$FEe$dhh)ёiIA42 IFFGffHFE A2NTZi&r2:-&s-"E# .qHȣ22-M'3"IMMLȤvSFeE"2e$IvQl4ѐMd̊)#"I4ZI$ 32qe38rM44(E$IRH9ƘHȶMƚM-љFa32 FE$E㢌"Ge4;h$ّ;HR)R 0i$r2hِMZ $fQI4RH"h줒.qMI43)Ei4̂h4fdI"EiH8TFE)$RE Hȷ36ifZh;,즑HhȴHdSMiHI$I$wI4dRM$Hȣ3"FE$Fe$h̤ffds1es2AIR Yi*ENFFFGFI$(̤IM"E#$Z2)4dZ)2)4Si4Z)"EI&FE"2)4dI4Rh)$MfRFe$dRItgb“AWYŲ)$2IK$)$dRNqEI2ِhRI4I$-hvfdZ-EFA92)&I4Z)I"I4dQIdR2fEh̹I$SfqEfa#"ilȤ3iI$32FFAE2)&I4SfA22E4ą$I$M)3)hFe$;hh촎d2 #8;dH3"ӒmљْI"h2 4f\ّH#$fdFfe$dRMIHMI$I$E$ItEdQhwE&gA̹$fdGe"٘ha8̠vdёm3$Z)љHA$I4H4I$I$ёhh 32(ȤIfAḤ"2 4H4̃m̊i$3-QmiFgfAHȤGyMёihIђ3333(̤fdIMffdfdE4fRI"i$2 4RFe I;hg8)#"MI0љI$I$w[2)$I333)$̊M$E-IM32)$E4fd2(42)fe&I6vZhɣ3;h$E3"2)dѦ19FeIHI#2iFffE4vZFe$Feh IFfA2IdHȴP{hdQEI̦H9H8$QH4Z-#$ddFeFe$f--##322 Il줓Ed2)4I$wIdEH4E$HȣљI22)$FFq$Fe2H2(VM'"E&̌I2 $wj2I2)3 2FEEE$I$I$332-)3 HȦHZ)I#"FFFeјhh$A$IȶM$dR23-$ffRGy3)$i&Fe#33 E&I̊I㢒2E$FffE$I4dQIM̃H4RI$iI"љh\E(FM&LHfdQifR3): IE$HȴI4Rl$I$I$fdI# SHȣ0FE$)$dRI"(̤I#"Ge$\I6d QA")4IHfe$lHёI4RMH즑hFqhSEIi&3-dRMI#"I$I8覑ّIM#"l HA&w&̎̃M4EvSFA6RE$hM̃I&E8sͫ!ő}Xk&<*@{γ XqhGxDWNV"{a g=NZf~tYx>|tTb/;,;J4F+.>!/<p: ~yXCڃ[.DFyeä>b9u.@Y^E0^6QA!@xbh~>2Gw`'~}v:Q8b;cugGEt [BkFe7E` !xϖh7D sc'x ,|y϶p萛v4s!>\cD˜zEtNY̗\f?ǡ>1;`Cy.,3y?c #k;=Џ0vԗ L20zu7%iY  ϩ8~1b 9l($D/Le\I;|!xG2p\ Ah{+ ᡗB5 `~9 X# ||O~"?d`|a@4]#M疱…<u:iǡ q;L:|Nv S;CAw0VYk |?j&LV G$5`7ifH 㷓*A#PF5+jZkd> e6h} []؎ސM ``23tB+o˜m_FɌie\#r]MYv8xtj!񣱊nv~:Y5]?>Ǐ@] #^;r﷝>^=v8 4 ,`qvu@[]-؞n9~c0zugFH }r%im3ƴXgno>y:O?XAP[|Ż _b)FbԳs><֖h7z">{j'Y/q8ytზQp+ 7hWƳ 0;s]gH;K3rmofHGz8>9gxzcΣBb猴4w6LUsGq=,h%ff> ~߳kR?h5֖0kY;2ldZC!C8R6ŌD Q.=<9TEc%':ߟ${Sv"٬ 5z =/ ؆! Le қ|@'sq[φѡc.F>D=[V&w ~3CPwSY^1&6P$r5F==8tg(/xX9} ^#-LŃ c.buy`!8\;har9sGT|#`Zq6ԫԎOB$dkFό]l[AN2{E784 Χ|F eH7YpgkLQF6yHID=剸pGfZ'|鏡6 mab/6Qu3-B.q3;8OXi φ~!\qIu^ً}ŁCAnPd65?9j\tib/aگycLE=fT{ҙp|zO~< \Ϧ=@lr2kHΦ?8؞Md4(6Yp3y^# Q>8JMζ^ SX{d{[Rǧ%lC>>} <Rvxdd,ψOG ad:>[\@=:0شjv/y=.AO8aLc2=Hêz6^xޠ_Y9w8V Cn _w;5> sЉА2ό=>p8g8Ҏ=a` KYezp|pyC玆BO}(aӍ[x6\`ɂAhet+3F'0P5v87D$* _Op(RBu5@ss/,QUpn~C@_iζhۧs kd6ǩ/?|#ڱÆfk4W8ɀ9id yGPkfw;r7`NG{|X6s?FPЄOtK@Ԩ>|buMdkö >ySl0tցnέڝ-c c4q>cGeP?vOGGYpnY=zO +1eec6}ƵBHCn{ E=lOK }c' ´4DNpڍc8`F;! E 5F[X}X{ݻ%2DG\b!y0<ؑϺ$LehI2;Gm؁LD6sgO9ee{tcƴZyy !Pg-KǞA"}Fxot: JterZ<6-~;P d8;t\Pnk]ly|b7؆ :q(nkdT0y;f:B;'w~5;`FycPh*=M}{Dd\btQu|s J ^vG!KhIqS/T xɐJO2ٽA:Iw{c~M׌M|)ۑ^'ʰ |8n(gώ #3٭F"r.EVᶘPhd8|[ l7 {tM'2ֈWSiHg:"|OЅ1PwbzlՖy>+kYϜXh|b 0ʅdѣOψ=L7g`'Dq0H:p w>Bto ѧ-`9_':G3;]}: :2A5qC@=㱊tMntClr:~;^qS#6e{}o p]lG`69EwH䑙}fvǔڴ{- cl@ұ4甑w;1O=pD9|X:b(9ٴg)'<- #6:͈a㟰y9ߙ`StitP%f,ϯ* 9ы i`-Yt~/Qԙc߉"@yjY؛ 6=L;sidgJ?NXۡ.KF\ nuuƌG0F<w=U9rn:!-͓yq31wΌ.b [>eڰiѬ^ym14#Yօސ.(؈h\8 ޣ[98v9=9{KY 8;o  Sruۭ4$ /Sܖ40oG6mbx;!ɸ4і#GͨbxCzdG]=X`F-`A@wƼ+,HP,@=s 82H1dz(2JaóƤ 61F/ؾ|ޣ.FN! 4 {9ba1xϖ@h1=$7ir |ln.h1zF?2pf|m]mۑjV8äcyy,nbX,cH};v w=(^ ޹p wI`vcz{pHS[>Ǽ=s.=^q4GCmc1G !3Xaqu00-:SeؾB y}OB)@<}G {Ӊy>c=@u`> 6]Sx_)>1O@<ca@x y9q;3d԰BsNgƄOmlQ`v{sjBLCύsfdqڒ }g[Zs 3zuЌ?0=s=}#E?mQ~8{~Vd{Nݜ~ZFy`$!Ҕ #{G>0bkH!t{ '#xEÁCAG;flH<؅۠qØ9{5n ѵ8L?CYs=u8v:!CV!EHs,q Sn9 9z>;p! h`8^~6UX:n]>A8XY>?0`,Զ{>< v0g2u<~;DyӹPל8ǹ|9R=^yC wsjV@qirg,0γŀ~ǽ;  菂>.tP<>v䐏LEyhN7G{-Mq6gbO,=Av`}ĥ6s=cyYq_#9@Qvhf9VlH֠g3R(҇tk mavETb@ԏÀv8<$<4 Ohtͭ`q>' Tj:Sp;}fHÏE@cN[֬c6ggs;c<1w]gX缏}!0N->Zq& _s$~0?= Oݾr hD'ٜ=T>vސ36a9B ]#}GA<# OJmd fWiͦ;3#ψp< l.{F Ftk<脮F\ߑ|b ڐQ~ǾG`sG6{b1ќspwf"QLwDPŭXy. h~t:B>'˟1w9ezI׼Ň;(x=h r|lY;fßCHt㠀?8yZ!NƬ0-v Ϧ!?SXɞSk"np˞iH<&;~HpBf'㤕"c ԬM:3h˲KY`Z4K,s D<{cѡr=XiOh.g& aЄFdkN>Br1Nݨn=,X y?GVp_X*9i X8qz&zX9r Go,C0=/Ǽ8v.4-|IykH ,Ed :<>}Y{!ľ8zΏX>Gxmr- ߌpGׄkOS·CΞ vvq-`49m.>dq>qZD[ džքǎd7 4mb(FZEdEjXfAFL]`Go0[4y:7:v!y2Z7 瞷?~ _'?Nyc(s(W ^ 8@>JG ѣ!cRzԖo`BhȆvW:xP =&ܴ+782!3ak2N(g3=Ō̦!gZ>'@^9<͡cy'921| ~3ֵyx&CCf@Gnz|14րvsF3PI>>N]Otr_c\i^utǹxÞ+O/9fon{94.G>9P|i 9Zyl> ,14iW9IƝgz;SXev)5:nq] ȵ+^bc6'5 {h\8bTLkn'45cO{t<@y *ru<0.avJ йӆ =(GBGu3|Ӈg\c4q SIkYrKX|߼zx퀳J ؀'q&9t; Fŭcb6}OKs _u8X0M A1Qy|]f#{HCɼ a5 JAzvGfF;v`0nJH섳ݾ\ M2iNa;;3g.mGG5ˉeO SZl-_Μ4]`>qcLp{iހ{ f[#>C<]89h/,^ky=ZAmܐw:>5cH1 ?|flfu2i2ܞ+ݐy>'Y< z1ԛ L} 6ٟ\3m;1vRlS<5Cd^Cyht<1=aT8՘ wy;6 WR :Q1`68h1Y8o(,sg8?4HEƟ8 .,EF"u>usZ}نX>ǂ=Q Y Yw)۞{ 24|m7:yB8I={t{{5h04C{d让m6a6^<<{wŃpšo{:d>C>qdG.Vi7Nvsd:~8p~9pf`㈃lYo"&jy"t@ylO}9֥Ӟ9?;Ϸyp{'l_Cq 0k?1q;08Çc>: u/|yλ{F+|#8*vl 8`AAsG)L3ؙ5GŐt7#cؑc9]f99~v}cG-Pm`98nQvz!0=llNq֠pfŀ}Z8ϖ]de 4 Ky R!-`ҙs0{?Ycl7-τa= X~Cr4xz./oÉbF 9v  c:PJQ'=f6,l m#.,#<G(?5 sv9S:5̅;"p\ hl}k2ߓ>lB&c^z?!YyXv;0y̻~021/x$δ|aɍǖȔ%s{r>:`x@zrl@C+9c#P p hSڊ>GnȈhw\`>ur5r{Ϯ㇀~09-)Ѱa=. xibɂg)S_B`9xxJ'Q1ԈZC  [)d3|lqN&l ϼmB/ޔ 0L#NRA>u3Q<ə0hy0?> :#_Ⴞtf87>Z!B~qK%չIs,kصl'c648] g}=캕\`c )o>8pӏ.gϤ$, Y~30P[:*Ξ8 Ѷ:+{2uQƱ;;I.w{vI`B|Npi0yUy񄞹ڝع.LhyN^Xc|q}}h94>>323y>x[VK息Gtaԅ\lyΊ#?y|&цghMޏ&GRKoa&;21֎`0z6hN 6l059j;NOouRlaEUM nt k7}o)2r3+͒jm.|QpݼB勐3q:öQ3I>Bp fL<\,J吭`[`=4alGV g~:8Z\Z7D'|+/'=(;Ѿm>=3wdg6t8zfU-.Q՛3L^&grt@[qhNϏic3>ep8/ngDOf K:Xe[5ʽGw8IȼXpȧv SAPZAQ6@j~vϩJE6¹rl.;k̋MZ.qZx # _8Jp3x¦ s_%ݸExF/`O?0zN ~64pbG =e凪sVỨ=Q+7;:^19,5G'ajqTlL<بᯛ+VI` '7A;p5-dxYϑmsap+onFm[7CVF<5`qdaߌfqv|EiFh~Lf7gV46Qכvi:+Oο 7z~!Gx0t1Xב$4U&H}1נA~#p㣛2\ |]8gKFf^"$܉P8l ہ>=GB.m,W-q-O/ H6d&qa*ɛ?; DY5`֥8஌? lI\`-pz){x`8Y[ |헃<n2Eϝ< (ۘM@ɩіU3P 8nf 'K@t 3z0Hh==-^1M Iy#K#'>-: GbfLyr\T҇K,k' 'W{\<%@jA}lZt17k"lhj8Lec]"xCƏ8d{;]2ހǂ\AmS.2ӑ`mCic,Xc)w9܁ eG?0M֏PhD}y_(S";zgސu9Y x FTDŽYh +̙JG=fza3c8ss5 w=[25;$Ȯsvx({fG=];q$aL2SEO9*>tJ\t4ݒlАq1<rC#sϓٰ@tΈ87:47=UG&NG3uO;atZ%1. z:Ю{)ltd9P5mH n5,=ay<6/ޠl;q+Ƒ~+y\q O1slb0=c^z#2v~eoAA̽{$; t{#}1=Y1 d섻â펧=,n'-Lށ9ÉѼz<Aӄ0ӸZvgb\ѣ4Js@xLbxη8١ΥKYSS uc0ԏ/aHw۞X^qxp9ΦC}d#b؅w."ˇ͎8P!4y,η=tK;s ͨLr`'Er7:r7%h5:c(v&8>>C怪3Ә Eͺg~d_o>㪮'q w8SwpqV:e>*OETtGZ?s73DqL@x;:O|fdќob"4r $j2x݇|qg'38.8582['9 N}q11=8g̝@ty7D3~}7YϔwmXLvv ƛ4񐑩=s8.9::;ͳʲ 7;{ӜX抑;yBbݼ͘es2_ oDv>q>T_888}I/`}1Y39 4N$'ʰ{=_[ ӎ!9ɿ{0-9O2<猉87Nx20AH Q~1=ai?8U/.`Tƌ, t|sNOIs#ALsnj*7n'94{O i Ȃ(&,M9gnF('0 V>(nsd 1!Ӝ!Oi,9$q-{GE;2{"16¾qNvrsD4g$ϓEŎ{qqhӉ`FoIo7M=68. FOݹńdl.go"pp2{Ad 8FH:<;94ǓӉ d=|ϛt J"gB3hs:qf&g<@l =a`n8ptm8{|V>^ 3tà9x-|dOtNNLl NZ6L`LeTN9ܖ9Nt0Z0On8' ~"1\9r9 l:yj wo3e{ Z2~=o6zh1Cq NS'$ӝSFAOyo#" =S0~a|-߸9)AOM:H,dmf<4@=f鹑t9|@ݢ1:vzwLD}Fٙ &4Gl9s@gI,h{GiL}"sw=78 HX{ty1ӤL#qӦFi!9t )g`Ƒs`;Fcg='''D6'{ܘ1/rN0fOnӠ;vݳ ( =ӶLfn93=I2 3ӑEz`:{34Fɋv d.=7N#a2b`扃2s20w=A.6wT ',:[sāfp^!KmfLrޞSsݡR }Ř9'dԆsNArA&3s0ef0"M8\: AŧL&St@'ӦN('9Ɏݡfv{sr+s80 qAtLl i"FM̑nF9ɏ%,mXl'f)ΜfH/t@0;#O9"0tIwO2dcd{HLcN7x3$<fB`b:s:`h 4Z0 q6㘓0/t\2F`36Lx{󉲨b`^l/6G`t1 o:]w-|0fa=9o1sLΛ ϑ99{<7m30y8Fqt<OF9:Kـlyɋ{1oGeeG9怗yėqȮl#{;Μn`>Us9-3M94e9x^p79Ϝ.{9&v"vaNΈqϑ΀ۙ "df$Ӝ m1{JLD͘T\gb o6s 9sd$9O ';9`8xXHO{dIap^&p8yMrRf+1GGsl9 dm=q8H[Bs2rMɀe=<NfwL0 r{&-{ށ):D `c#I3Hm#80sso ^ ILz/: M:vŽ{ &mbtIiYH2bKn3=6@;s۴a3I& COH3,$n8 =yr,90t܃& 9Ͳ st̙=$ QyFt879 LSސ!9fD,3M{bʉH&0r;`rb Mziy0{!tF."`dېȜv ',tg :n Lݸ'0:q d`wngA{mAn0tt݀TWn748&36g0Ĥ7m#4H! b<n;l>qs9͌:qف فp{'25'Q7L|ɌK6PO:Ӟ68y;9xswny:qa6o ۍUaMKwnr 9{f(1mʂ:!Ng=}gL7"h ;Ę8CN7%`f}`Ƒ``8q0{ߦp0s6`r yho烀wn2c(aA%16x+ݧnlΙ94úfsqgv Λ@ /{6{Gq88'M{މͱ89r#Ax6gN88}(.vc9w0|24Vt&h i-}wlt#Nw`0ΜL 8Ɍh ci?3+A=Ib 3Ɉ0/v'E0 } s#͕; \$ۙFcaӞ&$:o< q 1O:q#(H{3fW981ot^ 01hd<@pACYNs^18N6V9 n ۜ-c@c7n|=yNve}L;x2|{ ӓ0j}LAЗ [= ŋH;[c}9 >|{6}@xswB<6v} nF|4(x à훗p3ˢͳ${x433{|4g F$:[ # 6Enpo8a ܯ')rx˙ \l绖܈F\\-}xzt3q׍oK ?p,Eya@ް^rr5ͼ I賆KÐӋ>y럞#-Fs˵iDSso8ˣ-50d&NmV/>|c2}f ~_}(XZY Pq46 <m; eMːy\L̨ m28o ԻA۸ KI?VÊ72 ۋعh`9yFHSܛdCF\=zC3Rێ>PCh.2>\:͡QXS-# V s92˕.o+O;>D4B`= á3 8w=r Fn\ᣨF=g=-w8};?eY bў<|B> ?!:Z0<>:{A,\l-[Jf=Hz}Fж C| `|sz!6`Gv2k2kWBxy}-UEEٓ tǙنsx_Hz.c8yrȘz{KYQ-6؏hG//;FG=f r!0m08D>h 'mw/, -f[7ÈG`}-\ic6H9#!{6DqO;z'ViqYN t]BBtZ}!\jlv0n4y8%w󿏽.[ޞ|xir>GΞi a 6`!{ahccl9 4u uO[vt9$K Reٍuq0ŨL8Hwzdc9G | wGA M98& 2l ΥthƳFSo\6b^D+6[Sid~n,0{~p0苏`yGy`2?1{Kv3ܯ&0pƥ9mx'/po!.%>$ZvpϞ:(bۓ;p>6^2 EaShf~Ct!sDM4qilkC#Ygd]L~[e >a>2EuZrKS6ACGyk+G:..yl10=_^,A4\v3fqvf ??-XYXMümo6˴m9TuXwx[F.><<8er>>X@O9\55Rፃf. wُ`{K-a? Z4=6X8}yuL%ųt`k.z(xeMi=0}q їGi5eMy,jz76p&e?ME_<>]m I4]6g6 4C:g.%.2?hPԜCy|PY<\xx瀎A@YUVTxr xٔ?CON?SY=\ wGpte?oM@Z~ yΘ`~saMD{$_^NAՋD^=tbc-EdU$:9U=86ǎ|'rYDrχxjC@=; ahrrc0[fzS3zY&/=3z~\{'qL`i4YBx2&}DT(]p,2C>ZC|x?=Zt@vI@6eGJ<4?n6rr"c>맓,n^!oe6i1.a4 0hB3tb Mϩy@mgJ-Bt`v^lXVs(Z~ǽeϸ;-4W/u(/(nu vZ#X ,N6aiH^Y64149Лc>?Hj3Jߔ݀0?|qY ǬJsxl系*n2vm8"^AvtDN|Vm<ҋ(A_}ɇKe2?@tO.351{hX`|uВ GFK,Aqd$]ZPu6S6h񟵋@3C|ƿ#1ifZZY՝ ; eb;:I`@:q3ΚbA;΄zk,Z %1}ថc7N|o]H>CE6~rBNt@d}5F|x=0Wӈ/D{]Fe1r:]b(Y/l)u=2zw_¼v$ DjܹoYm;Ϟ XP=b&۸ouB7G ˖=kvv*. z|x 2ׄ8>uk2.KyveiF]6\9sz}-scޟ&',Xͨy`'n6R@ aԵ%X y=Fwៃlqw %B߅u~4ɾb| Wˆoء-o@x9rN+7a3Qғijd0v:y폀c80hɘݜ9\Wͦ7O U M/3%$pbp(g9gg?ZD^]|U O?|xPM<:noP.KFܑ3[٧P,;b b#7.=& 5h[ih'EvpǠ/ˇ7=eh0:^N(k %Zaᵿ6mdkQrl:gNyy34 ()3b|]Jnm@{}9uJ4YsMYt&,m;$J/]ˁ6x+;ß%FVb!7ųV-:t|= {yf' K\d21."?;^:aH)fg~v&y;,;os$ez aL$/rCɜW F\ل%.%uo Pa]'A×l~ eђK"02; xzk I!`/OE]7hP\p9vdH.><дyې~2t߿$>qm20 /=kN}sOhaƞ޼L:[l;hrihmǭێnqG,AAU募 Ob8|†xfpɊLƒif]I0v'sEi,2vten}mm: (){:&~Cmp{ hdͶt^ N煇zֶzsKT:vqvRyC"g-f-\7@[~Xu ͧ&spىpfidFR n91epqg~tE,;^鬹! /ݐq~\#NIя,~?fmNr>0?<2Y!?(wMy,bůC5v6%Яm6~i|Q|?ϔ 8[.aN\E^x>zvN=`~pغ(.[L ) hxО?I/C͑H*wm jx8=^M L=6%ɨZE_x`8s7^: ϼ j^j282ZQ6g]Fa5GCa-~\lstAןo>oFp G@4u 9}m(EJ:S%ǻ̟,\1_&1~}x OO;IROd6uiF shŔ~ M:ln`OxhbCڷ&n5<{ rc|~i+md=;bls}nɸ̄oQLyM f/o@k\ԡ4<"3Ln_KF=t:GK`h&6:;.!;}gO= Q~9҉=k{e`~j.SNv6.2tVb0 %V CQe A$1|`zr=!r|X)PS0~s>gzm}p,l`|h+ŷcSmH78a$8墏 -أ0p-`'/DSKdW [vxz̠:iw}8D]~2pT>=crnǖ \(MG 2Ks$w?4f una.q>bՅjkR=&`z[Cj|Š-ote8v[2#>pቶ].Xdsp~0u xH`.`k(ra:UİWѦXO|ؠ|!bͦ:χ7>v$HX$41oͦ/A\:J7 eόA*YK֐hcCcM/(xn8eτš%.oqT1ZaOX8`|yA6|AH~ISJ,2ÃMZ, 2{PާblcwRDߠ :by?.ϩO=:yyKaH}mX'KS}7t'|%f0WO㯋{ؑ1,iЅQK/"}ob(K:x&+Ýd|]cڃ5M}cЅ;@xcc\. sn;iZS{Zsn\*|\}byCG, =dCQώ9A) CI=x8.Lo ?ܰfГ<1t?1-٠pȺvrb`of(֯lƌFZaRju,աY@(p@:nZc+@^ `4mg'p :ΔϨW).n7-)>~\q),x% xcncvhP5~{0<1\?3BzVҋi@aq_jD}D?])d-1^n~8q(l!9c❀>QhnEmcaq"Su{oG"ƽۨ]1Onig`睛uX7v7>=J3w|hهzE EvrB0~Ka 8/x˻(\=p;l,@59P]By&䱾 KÅP31gۗ.wGy.1gd/0yvwO:ܼ%n`~|__a=܇6^y0 ;0tix8 37so/OX5*c"w;0.hn,=;xgJL {@Bآ=ǟ+lװ563e<:|1př8|Mmt(vYKFJϏ*A3K`;aE^xC3|qmV nCa6Xq )kh|y=t`6>( ޓEX<垧?ڏ`-R qQ{ЏE4|to amlȋO2sA$K\|dˮ0n7FT':0>4q6<>xc6 w/P[6 g϶ o*816på1|3bJُMFwL ƧƗ 9btAqG|\{@zRCi~Hԙ3,<%iMMK4tvEZJ%#%Rk:5 QMp5v/3wÊA1mŜ~BO&| HKEC'=zk.l~@`K/N ݉ x+/(BC&0{KE>-/kǕ-ǹt~)~p?>$. t۸p|qVoZGX{R1mqBPeGF7f91tTWT5vxrᤐx[r;?ޡ <dP|[ww&JY ?I<_`_ ~К"x=i?sϴƚHLa]NSÈHi80-mU߇$!t[GEGL=;쯮0o׆z^Qri!GC ofAц31qj@S'\<2?{Up>ޏP'2:άi ミ]b 6:h?-:c(>  ? w ky9el* ȣM]~|XgX2si>qobE_MN1]qYh} Å,GJ5o{" N00^J@fߦr3' uXn|M&`Qsi{B.l^ /{V%z<: VfF`k/vpr_o S,`rW<\rZt#g?,KƓKϨMGdٯo>Rţ6lZ-OIaԠ_bۢoNJZq@?u>W:3vc|zg]78{<\lvpR`gcu5=[.~6vuBvIǦY҃_Y22sǦLlsEkʂwx Pi+=dOGv'aSd?æmc&NF>_38sy?(MsAlBԥAcz .ő&ܻr0qDz, 1g$f=@A򃱩{g(>P>wzul:vǼRGQ};qk0t\$;O-pdrӁZ ;/]D^)Tx`ȈQoۛo_}6y0p`0Y_`~Ў|qm'(˖,=~B. 6̍,c.`4cxHlVJ-r uSӆu\9^08pH^ w>CwB:,O G_Ozr|d:Z+ȵңs;?s vz.y憌]2ы+k_O&<566m8ʔ]!~|6avʊ)CF̯޳nbw0hIwaih崽@`Q~zhvKcu[-3POSA-`qn}s-l>\s鰪妞=|pa.[mL:rG:x184[|S|̽ ɴz&)ۋ7Ra2ӇʉO;⇠6|RA{'j\sGi 4Y \].Xz]׮Q|"v<[`!5c@&m>> Puy=R;!C Ov8l0"E1Ŕ&porœ-pӠtQ-$&-RAŽ`G18@[x>؀nb迾߈-S=xx5)[o@ c4բUeϑNH$?GV%yA{} mAI[M~/ds=bf/E4{8brׇ/T|0qxk*u/\M`ǨL ]=dFtðW7&f?@<-=I?6Hq8L 0QՈv>\p;vF^p9NzzX{1oE(-nӽ e:8pӑL2oö˓n+I,0M~sY}iN/\ek“̟u-2 }R„ >cMֲ/|greѣc b`P6\|qԐ 00ץmr\ۆJsw8t\yXoX|@=ݥcw:x!h} m[@>+ppDUeh!xO /N,[\#H`/=<9i'KT%lHME!vIxPZtzOo z7zatg4ǩq ŎJ rm%ð6YZ<7yzra䇐+%'A,H7 eQ-"}cV=4+EFF&~D8N^E[vCM|QrìAOy" Ny˹ @cŗFfm'/Ƃ0>mt5f=M9 ߌ6~.P['A|NغK.^ lh'!ŏ[S#`t<|v4ڄl^$":lL!t2ΆjϦ̝%+E GaNTCp$:睛@{5>ðay clhRbT3ϼ3g.% ?ZR]߃b◳2:Кzm~NQ{Y*xӍɳC&.!|LQ想;2e1}G_VP^ދo4M\ώKƗ(~&-Nd@h?> e POٶ+ITY S6Pۆfy?fMVndiKd,l^=xo[cR˨ Y$;q'sK`ǎ7?p)Ju zѪʔ6> ğ4a::ӕӧ`(c& gM\8muyv2l6~='4H7>y\`vvbkPs'zQykNFC+M0bS0RϬ_]h9act=6A֧(qlh(̥X?Xm N̓R>+>XYg#`vMi"-m#37@=Pa}S?8N=.!YV&O`AatY;y3B>9:=!}xg_tKu>-uiM דJiՙrG-G\fٚ-D~-qC7bYgIH;{)YtىI@wcip$k2iV>|퐟M),"v 6xyFxm?o5H(?:ԝ)Y:c<}a3T#}ͫ yvpA< cCuW--~8M۟EыvtMP N3FS6qbLj? mîF⟗sӽ>/zzΠ yϚytB3Ŷ &v|"{p̌~ .?iHjjBF>?܂0$u>*z}Cj,c}}r }hm7hno6-v됟z1_Eaq[g([8u \l $^\}$V$VNsf/.w^n`? hlauY{M[x ?oCg}Ty&yi 0gGjZts ofk gLd&tӁg͹<cЅpgGOEuh1c ^ذњuYpk^B2|;rE>uIqMi6-'JWrS~V@C?CKj4YԄ>.⓿;?qx8.4er˿ W.? .*KBsiJM_,M r0u8p(Qzi3' AiSF~K:Y:pϛ'C6yd+ui!/iՠbQ=7/Z*"^ G X`t?c韣B/ Ej@N<-(Y|0xC=h@ײb>߁1ǡH`ô!3.8ueFkFImϝ%ږ-51 I|yz-c~|M-lyX#B@Ki޺QS@}+Ǫ ڡ;/?qB7;R:L+Ţ7-6I|߅bg&icd =KrGɵNlQ|g]IMYs)q]6(=iu|i9ϩ ւNYi6CB3qN^ Jqpǡ$jԴfd6ΏCԱeo{~0u a?tiʈNLd͈߸a',\ 4.(;L:jw*c M* {i姓5 J"{[S =yqs!\b2s5 ?P[ɕulN#㦡{R!3yqSO  .:jcisOHG fsgxCt GLsq߉O@Ũ^ .qm`JŚΨRxkAׇF+#0[$ݗ\A7m38vI.ɯ:*vx k;F =/th9H=$="J[\\ iO,Lov4Ygx*tߔS=;0vÒ1riJ(I=D??0ߖpvñ'q28r'=,PG[2ޖ 'YWvnbL=ڏ\tiŹp~xv3@jgv w-D;\K83ɯX%h OrЙTRŇ-ɦar$=h%ʳ| "5Sb|@~,&HaG6o C MԼ`r;>`܅7 7ǥ#Tw>ɥOwp!;/lVw87O4r638/1~Ei.N٣ǖniF nx8FwY|Ћx*qMQ֋/6^hZ<)yMk~l5nFB>3b'͊)-~:F"/Y'a̵\r3c7M\jd7Ɔ^(3So:ז4zT}בx4GTnc GlA561>8g" 'gQpj9 ?Ss[gÎ Gh܅˷)O]\%b6LNDmEZqf:l3śWmm4y8]cjO=ǀ?T҉ 5R<.MS'`<}Ʉ|cMϛ_ZmACnk`2Gm\INGEVxz3>v -|:vKx>.[t06AЧ-6Xx Ֆq.9>z2}Y<,K/g&J+v)OX;ˏPu9@/Ϩv,(쿣0bȌ.{ZoV1nGf#o4ᗩ۞0q͇E(z<G]\Gafa`֪Nz4:#3ZѡSvw.q!A 3VBÇ!U9Ѱn<0ner4rx`m`?t_7aω8>Ҵ X? ?<xDN#`y1lGqBյlZׇh^oVP3i D[ϧnzMл86t.ؾ 7x? qo(խ^8gYA鯛&ӥ,.ujM ^L5xC12w{H?9h\ c؂pB6{`27oaqK^ry*,/&?O^_ޢm .P?,OYtB&8Kլ5&F {%Cm0:[ƾNX&8}D}t݁A k,A'yntǪ]gTf,ZqmЈ0zpL筍)޹edɄvl7I&֘63in<hGGAJU17#H9na3X94!Ǜ<8Ҕj盒<f(t9oyl19vl $a#sܒa90BN$`!틌cr)'==$:䞒I4 $H4A$vIqqNI0I$L$rzI0fA8$$ӒL rOM$NL0pI'IəI3'L ̓i9i$A'ÓI$L$`I'=$IN &{NI$I 㤓IIIzI$rIpI33=7$I0I$I8H&A  99=$ 0E9$8$2OqI'0izI$I$II$H$㤒I$I$i$I'$nL I=$i0a=$I$ØA'NI$ 8$nffIL=4L#fM93$aOI$HI AI=8$BF!$Iyq; $ӞpL r{H$$OM0zpzqMܓ I$A$ON&{i$R $i I$IA$dzfI0!$ܒI&I9=7$ 8&N0a$I=8 'I0 rI& 8$D=$I$I$I4I'I$H$OI$A$IM$ $HH$I'䞓 90ۓI '=&dLN &I$M$A$I=$rf`$$zM$̓'zM9$A$̞NI& &rI0qI&A$II4A$iI$I$II8$I$H$I$I$ $I&I$I8&f`$OI&H$M$ $zI$`'$tI$fqN $rI$  9=7$INI$ӒL :i&N =$I9N =&L BI'=='0b)9== I9I$ =$i930I&I$ $M9$a ̞I90 $I&IpzqM$I8$zI$ӓ2`8&s $I 㸙=&NL$h$I$ӘIrI& I$ܒ{F r{rI$ I&I'='I03OM3'fOI$8`2= ۝9$H8&E9ffE II'rI0BH=$L#I9$H'NI'N $nzi'&p`$MM9$ I=4 NI$Ip`$ӓI$A$v90as3I$pa$NI&N $32a'$A$ 0nfI=$zI8$I$OI$I&NI=$L$I$A$NOIpII'wL'3${IOI$L$rI$a"I$I&INOI$BHRI$Ӄ $I'$I$I9' M${I0I$NI$II$I$II$I$H$NI$ $)$I&II=$H$M'$I0A$i$I$I$I$I$ &NI0H$E$I$I$I$H$M$Na$ $I$I$I I$II$I$I"i$I$III$A$I$MI$iI$I$A$I$I&I$I$I$H$I$I$I$I$I$I$I$I$ $I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$@Iz}w`v{9ם,ȻO$ 2rh؋ݟ˃'O.O8j֛Dƀ?/mˆ ?8֢&IÚ)KیF&7h5x0jEy.u+|<t0~l^L^?kPujwf&.UVY 6cB)vO:PC>7 讟A2U #OhMi>ejg,U)Z5?~Rr0pQxޡSͅFٯ:xm7TzhX%/Ia6qф 9:!DϱhH> ؂v1Hϧ%q2/ Ã\F}Ԍ'i1̋o<#<zxWU,=ԝqDNPv2Zcۡ6]Aܪ82"Ҟ$<ֳ=< iqI>}f#9>N-F? a'`'Ɓ]>>7c7$V.F-GsЪj#cgRWx4 履4\:=0tB\7 M|WzIHarm"LOf#-l p2R;:,覜iK"i"32-")$hM"I'8ȤFc;ge&i#$wFc33)6tNi;e&IRiƒΊ-$I$6wl賢I$ERsI&tR-$MjI6di3I2;I$II&I9itR-$ZI$II":)Ό˸2)ZI"-$E^(撦tRFfE9E3`82NE# -9i[H#$""NqOqGFARI#8Ȥs2-4# M&dZ R("@6RL"H d NqtiHCh+4hOk`菎/=FC*60qiᵛ?|󙑌:2;:2's yE윟sшvs߸-=^wx;=U&è䴀l&0nvst@ko7Us13>c8hO{I? (O6:>FL`=S?^G)`إ3x$cdxYpsqp}4 JWLҾq9u;q|7猸ϻKf^80hHB~^{7E̋OML!N{DZc`=`[Ӟ&HZʧDXtCŝOƀf,r1{ّqwX"6r}1~Z g#FEBzM{5t@F^gƐ e"Q{qAtԇE2i:E&܂2 (4v3$F2H(̴HA΋A2 I2)d{2tZE44$I3# ddNtfY8ȹE$gEI$"RI$I$I$flI$I2II9eّIr̆ڐiFqA4;)(IfM2ېqn\ˍ5gE8H&EI$)$LI$-9I$gI^"I$:)$HI9e3%h4iII$I$I$I$I$I$:)$I$dRI$I$I#$QI$M i"E3-$I$I'<$I$I$d;)$I"/qm"/qI$I$I$I3II$I$/qi$I$I$ّs2I$I$HLRnqM3#)ΊI$I$I$I$I$I$I$I$I$I$I&̊I6dRI$I$I$I$I$I$Ge$I$I$H줒I$I$I$I$;)$I$I$Ge$vR/q{̑I$6ԅ$I$dI$I$I$ΒI $I ΃:3(:H'̷86,Kh4[OxΤg#7',$s(nsKhјǼ'#,D4\#`DOl2FMِQE r;s 8O$w@çȒO37>Go< h$hs:fd{tqt'HibM3ÌCi<'6čޚs `^'yi̦,(FN R;s$( i<%I)'覎lsarr22E&g$2.a34hȹƘffw$ItSi*gee#2:;!I"2"i̴RE2)"I$I$-$fdwII#3M#32I"H4'8̌#9"ME"$I;3)&s)$I3M'8sgeII-gqE9iƚƤ,dR:)$4QsIi$H줓HI"hIwk EƘH:3lȢfFE$d3`iE\#ȤEtRI$"NtsI$i"E45'2 $΂hZI'82;I$ZLZI'8# I$΁EE$I$s2I$΋:)$dwIEI$E'8ȤII&tRI6RiI$ZgEHNqE2)$ќmivvdfA$iki#{<]HِrNq$:22I$Αi8342 $RmdI̶RLddSh$΋Lи[s{m2.5'yvcI[sF(<hwRHtRMSe&RO|xtI6 [O|ۻ ёh:t̉Ӟ#.&$ Gd=7w#H2L I$bzAl5E8$;,IλdޝKct8wXvlfg?2Ƨn@am 6gO~W܁Ѥm"-;q'Vr 1|,\i4cfq:ϲo̅>Hwp>5Wg=8<4ZO`vg[(^ĚRϢLs>hm#sHt=V28>+?0Bb|Lc@Mw8EVZ9Áu'ݗD#^wLjTKg$1md>4؟lsR''vq84jlGac?3/^&"]C 10^sҙ'>Ug`|,MZY}vh,$ ټ, e#3ѶCZ !M lGe\ٜc @܁ɆgR^HN@NYx^tOhΏcӷhSl]h坓z0n.WC43.S/18##GLE1GI/b9#o4/)Ѹi| YhL:yDi:OM/8@y_GV.j(GON)扲=9}xG)wdjq:fbS.LّOIIx! yϢt%1g|4~-sF4&ًQCyxL UyC4hw{,iy̏qxs2bpc!Mq7ƉOPc[ X:bt1-$Lxe>$1:d,CHΚP ¶w9sE9Uw{A 1=in:rq1Mg;&3qѦS{A+^F1ze@؎1 !xdy .zs8D"|@0=ѣK"uX#pVxtQYYݵW6CPOi11۝O8 3u38cxD\:&g6]Mf~}Ϯ4y/9LV3Il=ɭ T2Dc' z-Oa`0cI7[U<`oq+.nN~9Fq.-iSτ 90-Fyd*t |Cl<.q!A rN?e䍘탭,n8h!N{EΔCvɝ12e&vcp>`̑z1>r+7]'٠yNJEQC>+`എcf~`ރr>h}ʊg;qγ `vpOa|gc7~4hϟ@mJqc]_y5;8 3Ӹ#"ijԎ d=L˳Q[Cg\-<qoYc99BXsGx|,iQ.{/F!o9$.ksѐoNf#zOHsOGstӍM%r1Df`_Bq.6CF1dǜǜF;a١t1sϓk|2G3a7;D~_5=keR"Í:5 Ⱥ'=8[Ot&>iKOf܉0fF\HhN7刉LzP9[tQjtKX~AgZ{1 !1ϧtoJ mvc%5:fJ|9C4_%Ã>jd)xnćo~Uch>e6색> !o9Cl>xϣD}x'9Dr1CĻT̉t1f~1Ic~yѱ,g826x{2]f0 jqc! 914x1{3<% ;ͧ0s!߳>h>iωюp<3Yo9W% ϒkpcw3"v^Xr,`u.>(q,5t[kʬ@wf+qC9>.y 'ЉNQiWLfӓΠ6NYI{().NEae dyԆJx` 4ͲI3ԟ`gi}ӏl0VA.yr`ѭ[aNәNi @<Γi9ƃyFq܎ѳ bZ71i5:C:!v}| 0i>blFC{vpzxَGhэd},[ Aӝ:LƌpqO4>cNK9M} MN#XG;p H|Ǒ1df Z7Ê Y7G-"g2ĵ%,s#=<8hƒtM|E844(bE0<;bh<>d.s[O,k#0lw|:t$n#h'lo :Np4csʳ6h 1@QivJru3[CΜ.ݒ:;.`$28z{Xq1g6Zܠd7h<%,bQ^#;Ï%G9-w,"i8YHs@g@{ "ӌN=MކQ>Q$Iة58Fo=8IsGz.tbM\sUqGrd}@y̅SLs{ǂǎbbl<N/5:fwI=,5<T휆6햶a<p3DxV\0/:7&|@Mᇎf46e ˸iϸYӏ hX]R"-8SNDf}G1ӈj~#C-MWecn0yv@hL;Ҿ+ $KfrCƉ8fR[Osc=ѢqQɨ}ԝP!!@ DI#I3, <9&5:/{c@5hPDlJ@qю=ƶw<91u}4^nvm H9aLz^9^FM*BLgf.qL!vsÎq8eŔzGy΄|Fhmľ3H{c;9=9эǙ02j+S 2bk;CA;D^]xG9clBs2q3*_7r{̙jOsv23Ćlj<$ 0lZ&G8۳ϣtK1u0mO8GQo,,?cf,Zr95 1t'DxAAi;23΁ƋO0иl39^gi Ѥ/,=AyrsDž9椯6֐GL!|S ;vy ggt~ޮM=!ϢeƎgVnGD"} -%tr~!;GA9=#F%]ms1'v8\/`vgXg]73'Mc3.ǎpA;zÓ{HS-aR>cHLNW>dsGLqa#sөШs!1>jk`3ǝaj4KaCߓ 3ƎsiĆݰe\zYK3c|<$Љv?3u 8!89>J +N9̉v',Ӡ~<̅;1؉Q"##lN8b&sƎH &o4z#ln';9fYM;84gő|F fNf AB1B~Bl3=Ά Bl 'c)yόf0ۑ&k(gg6Ϟ0O'n5H57%ˣ0΢ãˍY ,сN}+#it2yo9 g3ӗ8`]=;뱞/ gWGs ֈ>8DM%Ͻ|a`ẎK#NjOGD|V?]ClgHm`iy\MX 5u]`3;p1r#sY58a=!G㿹HEߜsGv4`<3c"\='`rHi{ 1`qGa]qbkts@:=~y1(ĺ`H>c]WZ}4m2 <jG`739Rf ;W.jtl%K0GYwF\^cŧ>h7cvNKc#G7D%Px(x{cip sFE۠qX :@&f1<7NkyψtqvGPW#<ȝ%p16!H[0;gtwj xz$ x ;25&8z&<.9tyݑqy9:i06?r9'8`Ey8>|jdq N["Ǯ194Ӭm"Ιpa8s;9 :x·Shޞc#8Hw`$tx-ya; =X'{33grbF v0;nuf(8V!ߢ6Ucć`/GbGy~̹ov=F!~gs9 #`W;\5\;Lh9ى~>pp,o${΋ݖ%h̵!M6lfLݺ 9 3I@9{D|RtѴ;rq >&V'9]O{ut<8+XG f4|G"/tcwڸHq;{~qXYAvfX=ކ>ɜ^$yL[˛-9#Oq28g#Pb{HN}cwc(<1cc bv 2NL4{KXte= ?MX\c薌l nb t 23#>5b<|FOKH4g1ΣR:q}Yy8yV=6eQr?|=wP1}r8@5=58睬xfq'ӡʠ>eoxsn93 ΑљcvoBxCQzzɏqv*+dg"BGϩiy0CǛ{JٳKңDQϐ3B`* qة"3eٲ k`vLN׀v|r{h5#?$x*9C' 9ɶO Y` v .dg͖vCtf1˙ {!${<ąl m3c*ӆ3Yo;0x/n'1qKl3;Hp;=(u%Ϛf,H-eQ8a#ai+'`΁@hq=]qpsOwWz0(8>mx<:D<<G35ֆ@<|;2teyȴgџ;߸x3csp4O+Į睉D{ 8 aj4fK1mX;GkdDl}^x-xf5XOxYƄ&#p2qNFon#s!NU Ӎi\YBcfs^v8ol{9 u=n5'ngc5XϘ2~ȹ!{1~>1cwo!{Fy@:eϏis84߳\LO;݃Mb9H=˩9Yfyew3ḣhJ-IONh"`3-5h,9s̀gLh1;!1〽ϒn;38sco!ۘ gΔI7잦1ƇΎax,gSVHcszX,pљ HEF1QH t,iȆnE:#ds>6}Mc3@GӆeO<=џyu%3Ɋ4GNfv]K:mcG[28h2u clՕww/hH60qzΘC.C7ƜgB0lg۩aÞ;1ԗa 63a{a+LvO1Q Gg0s@sx;tÞGϽ_ Ew'9#wCo>3|}󀙴#܌g t*sEsu_O[0y0&K2m8fC|4Ey9Ɯ1˜F&ihGB!u59v1x9:`)|u%;# fǹFFi:{4ríq6 yǢDG0:tx99ѣ0h383< y&v)#L9QnBnp\I4,Cjs>2юi^z9^Qag4ooӎeu.x?8'tىMCBb,}1 ys@ٶIwy<Ѻ='#s"þ#gCaǨCii65O$tWƘ`]KSƹ393KlsdGoQ|Fu^v&nr:z zn;36֜1xS8w8C@<]wp;̫> ޴;vJ<ۡRiDx:M}:G:4{ONb.9^ K:l43ɢah+<OfM8蟘¢SR;o`3։h{6٣CgAv29t9l&}N &=L=C`ψ:p9˧ z4iֆQTô6٦[WI ecdFtk4?dSqa>ųLy#!l^!`cGfك?r93Fq^9 9,]>"9;jU''SYË!>拉2vy g%A̍;N;ёfyS+N{v* 6oqGW7ǽJ` H֍XO|6I1ֈvI%ۣ qB9>ik1O['3AlH n[V8Ǟs:poѥ|'Bl? fda3e4Cgr@ƳDN o21o=,KG2:k9I(nY-Doog;va4MC-8N\k|'-#ss{- gv@sΌIcvDs'|Fl ^wz<̝?"Ã1|esCȻ.|qm?lƶ|>`l l\Ai.r\x;9LgG3=q|.9'+!{΍ >9Ǒ>1 r)Ϗ8F͏Y>rhЁܯ9;bChfܰ71:# S:l9t܎|p!j~h1 u!-o6fEc1Uaݱ8x:|iɶiqt<8tfO;3>Pv;Nz,sxH|ƈXj;M^˳9L9\]8 i`R;=7C!ϒ;xNp8q Ԍ9sX.KӀY܃8w]$[dWcLFnFgf9nϜ>̊i>Co1Izӌ֘0 w.pcO;YںJS9?N15kOǺ3,r2r\ 4dghn|Hy[s~vAjb;N8snAu*$ކc9dgn<]VYg=gd:{ 13cSa8Ë-hgt -72O${F`B$^ If/:gӐwȌ04OXYXcxu!^bGNJNn"n솃mgTوhy/ t`dZy'6얢rls[q8жYHg?:240#i8;o3GyO kg0Yl' nz-fgn <|рfYoqЈыۚ51P0i˼4M!uޕF9!}';:"ɜ$hǠܫ L9CC3 MKy=15kDǖb#f2WHǃcQS>o,@f1h og͸x6M?3ΌO,{ݻC KTL`nOZXdq,t#s+c~<5'2>q'ϼbӦ|C\esG;B:; 6gr#OK ^rpۏe:Lm/XDO&@[rѦNp36xcfgc+kL?6E92ftd>Lc5:#gub%1{9Zr8Yy̓1s"3hxH?@mΜl@;N_Hc\O{8? c Nu s:8NNY$ver9ϼ #'1-8|蠟|hENv5ÀKZ&; 3Mm.&qĀu͓xN#>O7!1ݑ{e<3ȷBq.";pjx5H]cSaxQs%||ǐ3 CCS7[42۔W] G-C͚`m,p۟:+<s@>~Yi-Ag3s|#kx!)þNw{3ətsCmr]!-ӗQ7S}5A١;#dY^f4 1CnXPg9C0FG}4h='D%s;t l9']g7/<7ӌF31-O0Xi;&!hvQ{$S%O"Nw%-nW ԏN݀=잃=Dwݺ,i3s%OS'!~mC|N[s7jq1s9NLe݃GK;y!h1w<#mFyaByWLǤ'GY1Τ{gPG4g9)d|Ag44K'-#9fEg'qay #xwў\ts/>EgdvC00~ihMu[Fm Cf`ѷ+yAi=igNY|$058؜[C(a6du>8ϙO:7ƞ wp@;~V6{fFDo pis/e8S;2uCtYvIO뽋:3cDF89r9K;6IЉKrc19G^+$<2aƓ1 4Jgٌt"䘹v8R#{|cmD{qXbSƌZ<7:J㾬ܤyƚ m6|gZ"=ۖ|mr=GgE&Ce<F4 N;Mu?%̧@`#tsƍ+)~BcTԒ4*O=W* 9ᇨFGq1 f~rx{ʱ,ea6zt;uc蛞*c:|4fF/&y5u{ "Ne>G8b3Emz@o%1z9σ1٧,k@Y#{2]=لi ;Ӝ *G=9cy@!,B /2ܳ<!ۑh1uRk372y/َ8| fb{Ý0`?C{2-b&{0 âHy@c[9Ncr2vr>6<1&{~c~3h q_ A t[N.3/:MԁxNpv܏r#n<#< hO[bv#=߸e;"#r*೧xK`nyڜ=q\]I_Gt Dh Iyٞٶ=6Z9}L7?2[Dy if 3Þ21vf">fm $$ 54_HLzLN}|c Zh=sl9 /GF< >l>oD;ؘИ؎Cl ve]wFC;v,3=yq5@su'a h\р9Úfs-Zs߱-N%iYqƛpgsGts3V<7qEō/#<\g<ى0Eć5=^Ԟ?x^"u3F'm *Lb'Hͺ,q;YcE qD3ݑC7?Ds8|G8;!e;;F|wC :YAu!&h%@2 >OlxG!I '8Π@x̌}&|h#p;ΰ:e9Ϝz 1hg8Os}(uz>] tqCoG&x=':uwsuLJ/g~Ra @9hspwRYwsSzU!wXt52X0khs@7Ñ#D&{;MƍXp8 H~@s1ON\>i&q6dsSqNh9߆q8?r ٟ9; T\vf?r |x;:KsX ,b!Ԅfˌs=FOp:ds>KQ鳷;Ce"A\Ϻ0> GZ*Cs{Ʊ fyvlj2Ʃ%b>qȯs'ݱ ?!&qqǃ#f˻+~_]0 C ;ȏy=l̅yuj8A<͎x yo+fxGg9 cxǨ0gYvb CR:FQ<}L 5s $糾x "A#˓|tZ4DcQ8{ϸF:, V22n-HDwf:E "eEz12译MjO@Mmw#Ou3;1y:)8l3:*3{LX9Hi<" wrzGxl- 32;:ny vf,v89Pldl[iخpMa{Eih+cjEl l"ao'Xi#"oQ pB29LJAߢE+(-6}>DG`g.gyM&Au7}Wt9f_>V0>#E'F7o<3М]h]|ŖRqmsސ,Ŀ5vt@ކf|sL.LkE[ <%̞&iÆ9xìo~C\>J(4c聜5|i.rg 1zY}lIXKL?Gs[&?lrN6eo@ i oG^79d^]}n4g{}\,scj$˭cl೨<;< 43f^cN{5ϟ.5;| 9ь=iRz6g'F{А y1:oOÈQxp>]ϓ 3.|b<ѡĹzx|q\C{D"tϐ =#tޠx7r{=isQw:RCYw>q/ٝ7dy1﹐:f< ƳN;:4BKg:t@dqF.KΏ@y;oGG=O32GXCLtB^n y盐{4@ltZC9ۙNO|pp2{ 6eyf'N|`ƈ) s-j; {"Qqna@Gq2"tϐ >AOp9nw|$bӧ+s} y':FqG߼ zzF m .c;!Ν@C49x7Ώ@xL!hb7O32z}O{Jv.\sz!3hPcDϟ ɳ-DX#t`d1yѤps}f%<:9ZgNfJw:t@yw tj4 bgy >}ϟ h0<<;aufXt`ƝG#v<1s #̓<[ tqGΌ;Nn#3G[sΑMƢDǿ!ɳs yN@vCcvHpsG#t$4j9;4e0ngc~ h09zyζ4@vgn$!;Gyryۣ0#j N{6a;Iw2y:tE28/d67n(!3tҁ9N<qϞ'K&t4GO'O32z}7oe,tJw=9Ӹ{G D̸N 98ӟ>A(qi2w:Fq/FyKyN~C%<=`F>NdG#=mħ1G7zF>gDu1:s0rxb7 9Τ}9bhlryӧ4e[N> &5b'nyǃ̇{D|ݽ`g>wܝΝP Sӣ#|=o|F1f'N}cDy|X>D[ENOxp49{9AfZI'ю|ds0sQF!yGG'~`qv:8>G~3 KԆ:2i8X$5G=4j9;G1cQ0nAsq>|'mӞ{{ ,tc|`NF wAkj"N #'I:e{ tw9 |;z 0Dw{q/:tx+lwq=m&c쵀a:#ΝP 49;9fϞ|>ftϐ 7y:y0i=h:e;|`ц;  cQy<ݺ|@6ftߐcHl/Ii=I&s6@ k4SӣJ1dOqGON}cF o~z9,F|@O=>2#A:G 2Өl4/98ӟ>Af!Hx=wGw8hbxrw:Fq/q0 >C^ͺysݺ0w͝ΝPpsGu󣘀1dG/1'N|`:K>#1vGa5f9缸qF#84ePN:+ٝ8#;߷ 3=єх1Gx23M:o]NI~$8F{\ Mn(#]:hst!)4(0i̞A 1bo`ۙN3Í"m7"&ȹri& L3&f@'$Y{;2;8A#80ٙgGe8MH$MH$22)amfEh)&љI"I4FaȤHg$2( vdZ2 FFe2)"ё@uNڒ0vnx&8C3Nxy)>XyVןOXyO(׎'篝 F5I ZY>/=f\9Kac)~yZaQcy9TpN5˨4rhJ"bF ;3 <ǀpG:\iigbͷ sZⵞ4NrɎnz:43e !ƳgɗFZR}|^ 9 OAn՛~>.Sa(W}OA;*!*π/gL>dmD} //BFl4n/ .2x~] 񲰪fnywQ;Eb0mBv- vrA~Uzଞ^eiϋEY23`?Gۉ)2'opN; 3^lq;DTx=?'  ,@RaF>cO6 "CC`^:A&p4@>^=WFf> E%65F]at\d,13QAi3-p-d!uyyW*.R 3'Pʛ2ʞN il`6]w%jͭssNӽ#6~ 0ŒnΙ0R`uO6s^(3-e ~^H6[)N Bq:vKOt48Z>ºIhA&q.ץ=yq=d5E=vxY9miٰtX\ZunmmfkrHS{x`j]Dl<{5<.| 698ya(ᣜL =lriD'tV-a#"y>2wږ|p}#cСy gۗӱ9 "D2l\L=Bjvȳק Q-4}+(oZ`Юpq$sF5m-3r/qN a3R?4ҙ8mm!㵟QH+K C+6gOED7Ǐlr!M= oSuȚ3n# N9|΀-_=,hr2"/|6Ȟx,z ~_,$:F]Շ?+Y낱XV[1+&cB>zB~sF$1 t9FZfu]ٙ]NW}gV;Ffnj8B f+qD%ΏePkt`ݎ$. m> ߆ŽӤveq63Ps8>2֌ޔv_Ylx 0ľk¼;t{c13mc˸#^\{"-o\:X4qy5 Ӷ͞@Hފo\sqZ8@Z~IW2ry-it`4·<br+h.}ᄈG#Gai G tK9K|ft04mEg!oc&:=`G?[rt3MB`^69wUiAig|aNt1dٛ|~]FE3]lwkp4>\hc/"BCϺiㆉĎkbQٞ]lf',KEk|sƎ 0ѱ[b m:ZD5Z2# |Rq W<Ӗ p&zGRY6} !i.}.whiO1x>\ ,'-N~Yz١QgF4M8wm 3AӥT&asm)m_1$.8:pǭі΄r~wj2i9L&-V>SsCƄZy03p7\{t9䘏Q.gRSI^ywYOx= kv?|H~zƚ/qsfkʟY E<;6:ȱ dZ1+r˟K!!-Xd2ѰyA7rY^yjx3 oXH]9goaaHgh~hDzعcv;u֢[t@;yK;C A!ntv;ϹbhO癄ѝylyMў^RSt ͪX,2}+',9#nd7+1>&tM@CMCB[cŎE+&büFhqYV!)='ulqpG:,]t"sO4w-,$fu<z4mZ\s9Ƕ|d1x1`:2`[KFmϘ};s# .W9w KOe & `ӱiːǞ^;#0C.>pLWc*cOf7x8#N;1}ٴ 9|~4rc4O` Kr41|6\1dV\wE/h/h&?:v11|NX;DϺ<^9h[E=p 4rc1wFcC񖳏xeǩ:334nU̚6u=4:r R& qO: F|7Ġޖptя$٭a}ZϱG9c1G6O8 A<>[F˲7gtgJcud㧄,"ymDӆ,xz\˒a.v9F;?&츲<&}+இ4gdN[ sgv8p硇8l皻 ?[.üB|b#hsi`>D&ј"'4MfZ4ZTzܨ8ш9Lz^l .NGv8c8h 6OIAa$4c@gQ|+<lpc+DŽq:4M$4Xt0adž2tf#4M%:|P=yCt.<4`Q۱#fQ Y,:0(Ӎf᏾_z:EوG}iݒㅨA`c 'K84\4mSgn6*ES(D`;5 ~8_N|`0 ,q*FQ;LC%itb9>$ԡ}Lj0cx y*٩eñze͎vkKY'ǜDyÜ$14EpC1=9ׅhȥGiٻ2u yrdz,U7t=c}­K6ֳa@svGdM%hƱM>HKDrxa;th"9˭`}DʥPqφ`1܄^u5cA.vyl0xhK۵)`ijR߾Kn 3}Uuχ|iQx-p9Iyd٢̈́AbX~צssQxm<.4`]"fKp'34hQ>j@kep?<$+}B15|i)4`>F AybѹK?v&1xLcPK~y mc3a tUAzQ?gN:E.my)-1GFf~Phρg¢4De[V7ډq3<#~kC B8ǜF]YǮz3ʽS$1c_`˟<ψ8*u?9ӶZs1pF<(}tM>6w]\d˨A<K)+d|l${ @)?h=c Ֆ-{ތѧ!6ѡ1L΁p246םDžhݪm{.eoi ×N.agQp[ | ٠o<&WYÓz|4bk>,>|jTDy.4ux-iÿ4`Z GFxszBb nU?ۥMgqNr^x~:9D9si3Ns{‘H$ RI$wb; yeqgE4Ĉ2ERE2FE$; $fffRI$ёi4Z)3-vSFAdI$))i6tI$I'S$I$I0gaFHSEId2ge$)$FEdQÊiI4Z2 "32 E&䎑m I$&cƘ$I$s,)HI#"I4ff[E&I$ffwcRH)ٙM$l좓FA$Ivӑr($I##'I$O*Ie2;)H2E&Ih̴d2)#2GE4H"H4tdRNERi4gp̨;)4RI$\ӑI$Iّ04$I$ge,a&2 $I$hidR2 m#"e2 6t̊H4ą8"FfEͦtZH$I$I$I${h4F mM:uOOoQa{< H' =Lvdܧl6I:< 8p_79ΰg5_OZz2s~؞bmY3I$}ВsQpGrG͂'0r-gB&iI$F,6ח~L g$Qwf?`:hI$I$~lu84Lb >> t$oRƖ<5a{^L[E z "ILd],2䷷mhpo |:$k;IAlt"z>R6Yf;"yr?p?-WΔ-3E܃ ܰɜXgZ4)ri! IŇ'YZˏi0Q+}7yP%pb=TZwtw Ǖxc(W3=GZܱa8vt!#[Z;5fXy-k4یā{ {߁u"ކDSpԦmoB{~K=?]hKIB;gyi|އ]\:9Y`u<<8R?"GA,xml4} }ϡ6[a>0>6^bO:CNw-XMƟBFcExN~ܺGdf͜8~LJ9p8YbѕwYsO!D=>ͳgU8nsw;'D0"w1R81x="19هS<\'9cP>1;>݌tsE NRYӅq| f8tȃGޓ䳲3)9Ü +{۟9vv6Gd=9Q=XgfϏT[^%m;^t:n>|c<σ'[4vSSyu~NtsNlu5ssEMfiFyx5tZ0/=]9ș'=pt4#Rf8F4xK: \Ky:ĉ콿b' S^4zk c,29I!9X^jNXe.r(ǚ $vgE;J%i!g2z3np1 C!gatdv:f̧Og8is:eY՗EXӅ52ctYӁ9E;'G1\{ǜĕΘĄcSO6'i! N[:9 #O;聋8㰆y˚9vm#:p;?d:nb r;43 ):zvZm{6=<˘d̝56.ܫE2%Σ<5&I93{Gfe5$g3클d\y:p<痷"f.oN4;4$g܋΅A4dHyFe .HwN ܊ #$dt4.44vMF;s.G:GHIǜ .yh9nfdɖ@<0Ӝi$NF66ѓ&o;M"AǛ.ќ3ef-$\t!2w9"EӅ`mi.,%=f 4p ΃`4dLf zi h)NqiL4RA34hHVM0I$I$QӤFy47$[fḨ2.33AH9'82344wdS%fFE2I$I$I;C'$tYz3i$ih4i q i&nE=ųIIibHdmt;)ht$I$I: K4A'\"Q{ DdaRF̛%vf.&Hfә !hSmΉqI$I$O9qwR$Gk@m!`V>i9:39M8.HZiq{332v;iI$I$qH.y܌ٷ ؐ9$h#"f42I.l30YGst[8 2I$I$I'ۜil=5!r-ɒ23Hӆ'Qpri87df"iнь]8$I$I$,Ǹ&\H^FI :fL:@\34zK$QD3NC=qI$I$I$q3tђ-@Ȥ; =h4vSr ә!2-6{gEI$I$I$q;H2%Fl"m&s)3 m"s)3H[ Ms΃IŲ\fM$I$I$I8gl$tg8V2-=L\Id :IHY{2 8Ai0 &;NLI$I$I$.y;lSm.a#03drsqsљGgL`v3E9$I$I$I$ٷ,HH鹙$s36Ęd\qz.ed^L3sdѓfe2s;"I$I$I$NGtgIdG@r(ȴ[MYmN$HDsfM#"a2GI$I$I$I'qRGqٙ:h#hZ2)#&NFGqdtdd22e#4vt4ݧ@4I$I$I$N182Mi"ӑAfI'"s-".IfYr@2 {d^Z 9$I$I$I$dqr(9I4dtRE9 rHRm$Iffh̴hR%I$I$I$IIHiۓIFeeE42i#< gH)'"i,  0ܒI$I$I$N㚑6\HvddfNE0L[h2FEi2ESI9H$$I$I$I$NA73&Әs23I$Ii2 QrFe$hȤiH9\2̓H4P`4I$I$I$I$(ftrIܒI$Ofqi HIEvghiKI$I$I$I'@I8X9I$I9 ddQGL2HE")3"($[3$AqI$I$I$I'M z2,頒I$m)22.q{r-E3HI:)i$I$I$I$S#8q-I$s2)h#3#"n: M"i03AI$I$I$I#H@aI4ѐI$I'"tg2-$HiӘL6.sH$I$I$I$1/ FGI33#L$I$FẸH$\IM$̙m6PEI$I$I$I'vdpN@9#IZI$RI$i˞fHH6;.A#3& i^́3I$I$I$I0fSI2e6H$I70hfR2)tRfa1&fe$2(9$a$I$I$I8ȝ$1FLȽ$H̤I9E' AfdZ2I32)9A&I4sM$a3<$I$I$N;Ew.qېs.FI"i9 &fe$̊iRH̴dM44vS(2I$I$I'332N&E,Gq2I"M9# iffE)&H̹̋I-$H"I$I$I IAR;Ri"̙ѓMΌfvGfAlhI4Zl$fRA HI$I$"q4d3mvRIMSI̠R)fI8Fe4OFH$Z I$I AE 3' d%r-i̤i&M)$R;̐s-h=HfqI$I$FFal31QFM r-F1M$Se$I4i,㢒hs-$E0)I2ItR(^2hs:-4MÙM&IH̴IfFe$ddތ 2A fA"3hIӐLِrMȶI$GffAI4FeHȴi#Å.;,̦fa4H$f[E#̑ofE=dw# ْ)㲒M$)E2GE2dLLftS)"˜S1viLIΌLY2)Fe&tZ)'82Hȣ334 e$ 0-" &[E2:-"FfFIȶI9\GqI$H#"s2([M i"hvQeE4fMP`ͤs-IH袑lɝ M03.a4\Lv2ffPf@aEHh[!tr)$h͔hZ3(ȴHgdH$gqr ) $dfPhɖIZGxem23)$I#"̃IMj@I324,:32s($H4Hjē`3"rI"$.gEE32)$N@)79 q3(̠)ga2Hs%ٓE&-&E$M#2I#"h좒nȤgeAQi: ̹H9Ƙ&˂ 4iNe4dH$fI љmђIIMH4SIQImRI$Feffd&I3#&wBhȤ̃Hhȴh̴w2QgqfyH$NeRMs Q$e62fI4NE4H# Z)Rhh97634d(̣8&IRhdGy'8Ng@tZi&3IљI4M)#3"IEEEIl$2)4p($m$hȴhd)&I$dI Ne7 E6Ffa2II)2)O(2GAM$hA$HdShȤE#"dER)fEM4ZHFA#"̌i4yEْ32-ёm##3 R(4Qi&ёIH4h̳0I#2wIQMZ  #include #include #include #include"mo3_unpack.h" extern int debug; /* unpack macros */ /* shift control bits until it is empty: * a 0 bit means litteral : the next data byte (*s) is copied * a 1 means compressed data * then the next 2 bits determines what is the LZ ptr * ('00' same as previous, else stored in stream (*src)) */ #define READ_CTRL_BIT(n) \ data<<=1; \ carry = (data >= (1<<(n))); \ data&=((1<<(n))-1); \ if (data==0) { \ data = *src++; \ data = (data<<1) + 1; \ carry = (data >= (1<<(n))); \ data&=((1<<(n))-1); \ } /* length coded within control stream : * most significant bit is 1 * than the first bit of each bits pair (noted n1), * until second bit is 0 (noted n0) */ #define DECODE_CTRL_BITS { \ strLen++; \ do { \ READ_CTRL_BIT(8); \ strLen = (strLen<<1) + carry; \ READ_CTRL_BIT(8); \ }while(carry); \ } /* * this smart algorithm has been designed by Ian Luck */ unsigned char * unpack(unsigned char *src, unsigned char *dst, long size) { unsigned short data; char carry; // x86 carry (used to propagate the most significant bit from one byte to another) long strLen; // length of previous string long strOffset; // string offset unsigned char *string; // pointer to previous string unsigned char *initDst; unsigned long ebp, previousPtr; unsigned long initSize; data = 0L; carry = 0; strLen = 0; previousPtr = 0; initDst = dst; initSize = size; *dst++ = *src++; // the first byte is not compressed size--; // bytes left to decompress while (size>0) { READ_CTRL_BIT(8); if (!carry) { // a 0 ctrl bit means 'copy', not compressed byte *dst++ = *src++; size--; } else { // a 1 ctrl bit means compressed bytes are following ebp = 0; // lenth adjustement DECODE_CTRL_BITS; // read length, anf if strLen>3 (coded using more than 1 bits pair) also part of the offset value strLen -=3; if ((long)(strLen)<0) { // means LZ ptr with same previous relative LZ ptr (saved one) strOffset = previousPtr; // restore previous Ptr strLen++; } else { // LZ ptr in ctrl stream strOffset = (strLen<<8) | *src++; // read less significant offset byte from stream strLen = 0; strOffset = ~strOffset; if (strOffset<-1280) ebp++; ebp++; // length is always at least 1 if (strOffset<-32000) ebp++; previousPtr = strOffset; // save current Ptr } // read the next 2 bits as part of strLen READ_CTRL_BIT(8); strLen = (strLen<<1) + carry; READ_CTRL_BIT(8); strLen = (strLen<<1) + carry; if (strLen==0) { // length do not fit in 2 bits DECODE_CTRL_BITS; // decode length : 1 is the most significant bit, strLen+=2; // then first bit of each bits pairs (noted n1), until n0. } strLen = strLen + ebp; // length adjustement size-=strLen; if (size>=0) { string = dst + strOffset; // pointer to previous string for(; strLen>0; strLen--) *dst++ = *string++; // copies it } } // compressed bytes } if ( (dst-initDst)!=initSize ) { fprintf(stderr,"Error: uncompressed data length is different (%d) than expected (%ld)\n", (dst-initDst), initSize); } return src; } /* decode value, encoded as bit pairs (n1), until (n0) */ #define DECODE_VAL(n) { \ do { \ READ_CTRL_BIT((n)); \ val = (val<<1) + carry; \ READ_CTRL_BIT((n)); \ }while(carry); \ } /* decode value , encoded as bit triplets (nn1), until (nn0) */ #define DECODE_TRIBITS \ if (dh<5) { \ do { \ READ_CTRL_BIT(8); \ val = (val<<1) + carry; \ READ_CTRL_BIT(8); \ val = (val<<1) + carry; \ READ_CTRL_BIT(8); \ }while(carry); \ } \ else \ DECODE_VAL(8); /* for 16 bits samples (was unpack2) * * very similar to unpackSamp4, but adapted to 16 bits samples * initial dh=8, * if dh<5 the left most bits may are encoded using bits triplet (nn1), until 'nn0' */ unsigned char * unpackSamp16Delta(unsigned char *src, unsigned char *dst, long size) { unsigned char dh, cl; char carry; unsigned short data; unsigned short *pdst, *psrc, *initDst; unsigned short val; short previous; unsigned long initSize; size/=2; initDst = pdst = (unsigned short *)dst; psrc = (unsigned short *)src; initSize = size; dh = 8; cl = 0; data = 0; // used in READ_CTRL_BIT previous = 0; // initial value is 0, sample values are coded using delta. while(size>0) { val = 0; DECODE_TRIBITS; // decode bits triplets cl = dh; // length in bits of : delta second part (right most bits of delta) and sign bit for(; cl>0; cl--) { READ_CTRL_BIT(8); val = (val<<1) + carry; } cl = 1; if (val>=4) { // bsr ecx, val cl = 15; while( ((1<1) cl--; } dh = dh + cl; dh>>=1; // next length in bits of encoded delta second part carry = val&1; // sign of delta 1=+, 0=not val>>=1; if (carry==0) val=~val; // negative delta val+=previous; // previous value + delta *pdst++ = val; previous = val; size--; } if ( (pdst-initDst)!=initSize ) { fprintf(stderr,"Error: uncompressed data length is different (%d) than expected (%ld)\n", (pdst-initDst), initSize); } return src; } /* for 16 bits samples (was unpack3) * * same as unpackSamp5, but for 16 bits samples */ unsigned char * unpackSamp16DeltaPrediction(unsigned char *src, unsigned char *dst, long size) { /* * NOT TESTED */ unsigned char dh, cl; char carry; short sval; unsigned short data; long next, initSize; unsigned short *pdst, *psrc, *initDst; unsigned short val; short delta, previous; size/=2; dh = 8; cl = 0; data = 0; // used in READ_CTRL_BIT previous = next = 0; // initial and next value are 0, sample values are coded using delta against next (predicted). initDst = pdst = (unsigned short *)dst; psrc = (unsigned short *)src; initSize = size; while(size>0) { val = 0; DECODE_TRIBITS; // decode bits pair : first part of delta (left most bits) cl = dh; // length in bits of : delta second part (right most bits of delta) and sign bit for(; cl>0; cl--) { READ_CTRL_BIT(8); val = (val<<1) + carry; } cl = 1; if (val>=4) { // bsr ecx, val cl = 15; while( ((1<1) cl--; } dh = dh + cl; dh>>=1; // next length in bits of encoded delta second part carry = val&1; // sign of delta 1=+, 0=not val>>=1; if (carry==0) val=~val; // negative delta delta = (short)val; val=val+next; // predicted value + delta *pdst++ = val; sval=(short)val; next = (sval<<1) + (delta>>1) - previous; // corrected next value if (next>32767) // check overflow of next value (signed short) next = 32767; else if (next<-32768) next = -32768; previous = sval; size--; } if ( (pdst-initDst)!=initSize ) { fprintf(stderr,"Error: uncompressed data length is different (%d) than expected (%ld)\n", (pdst-initDst), initSize); } return src; } /* for 8 bits samples (was unpack4) * * 8 bits samples values are encoded as delta. the initial value is 0. * The 4 left most bits of the delta is first encoded using bit pairs (n1), until n0. * for example (1)1 (1)1 (1)0 means 7. for low deltas, it is 00. * then the next bits are encoding the 4 right most bits of the delta, and the delta sign * if sign bit is 0, it means +delta, else it means not(delta) * Here is also coded the length of the next 4 right most bits + sign bit. * This value is initially dh=4, then is divided by 2 each step. The minimal value is 1 for the sign. * dh may be augmented by cl if val >= 4. */ unsigned char * unpackSamp8Delta(unsigned char *src, unsigned char *dst, long size) { unsigned char dh, cl, val, previous; char carry; unsigned short data; long initSize; unsigned char *initDst; initSize = size; initDst = dst; dh = 4; cl = 0; data = 0; // used in READ_CTRL_BIT previous = 0; // initial value is 0, sample values are coded using delta. while(size>0) { val = 0; DECODE_VAL(8); // decode bits pair : first part of delta (4 left most bits) cl = dh; // length in bits of : delta second part (4 right most bits of delta) and sign bit for(; cl>0; cl--) { READ_CTRL_BIT(8); val = (val<<1) + carry; } cl = 1; if (val>=4) { // bsr ecx, val cl = 7; while( ((1<1) cl--; } dh = dh + cl; dh>>=1; // next length in bits of encoded delta second part carry = val&1; // sign of delta 1=+, 0=not val>>=1; if (carry==0) val=~val; // negative delta val+=previous; // previous value + delta // *dst++ = 0; // 8bits->16bits conversion *dst++ = val; previous = val; size--; } if ( (dst-initDst)!=initSize ) { fprintf(stderr,"Error: uncompressed data length is different (%d) than expected (%ld)\n", (dst-initDst), initSize); } return src; } /* for 8 bits samples * * the same encoding method as unpackSamp4, but instead of what is coded * is delta value against predicted value and not only previous value. * for example if 0 and 3 are 2 following samples values, the next predicted one is 7 * and the delta encoded is -4 (real value is 3). then the predicted value is corrected * using recent real value (the prediction is converging to the good value) * it could be called "differential delta coding" */ unsigned char * unpackSamp8DeltaPrediction(unsigned char *src, unsigned char *dst, long size) { unsigned char dh, cl, val; char carry, delta, previous; char sval; unsigned short data; short next; dh = 4; cl = 0; data = 0; // used in READ_CTRL_BIT previous = next = 0; // initial and next value are 0, sample values are coded using delta against next (predicted). while(size>0) { val = 0; DECODE_VAL(8); // decode bits pair : first part of delta (left most bits) cl = dh; // length in bits of : delta second part (right most bits of delta) and sign bit for(; cl>0; cl--) { READ_CTRL_BIT(8); val = (val<<1) + carry; } cl = 1; if (val>=4) { // bsr ecx, val cl = 7; while( ((1<1) cl--; } dh = dh + cl; dh>>=1; // next length in bits of encoded delta second part carry = val&1; // sign of delta 1=+, 0=not val>>=1; if (carry==0) val=~val; // negative delta delta = (char)val; val=val+next; // predicted value + delta // *dst++ = 0; // 8bits->16bits conversion *dst++ = val; sval=(char)val; next = (sval<<1) + (delta>>1) - previous; // corrected next value if (next>127) // check overflow of next value (signed byte) next = 127; else if (next<-128) next = -128; previous = sval; size--; } return src; } unsigned char * notCompressed(unsigned char *src, unsigned char *dst, long size) { memcpy(dst, src, size); dst+=size; return src+size; } unmo3-0.6/README.txt0000644000000000000000000000576411230613030012615 0ustar rootroot unmo3 (opensource) v0.6 ----------------------- 19 Jul 2009 Copyright Laurent Clvy (lclevy@free.fr) This code is under GPLv2 license. ------------------------------------------ * changelog - 19jul2009, code source updated to v0.6 for MO3 v2.4 encoder . version = 5. Also able to handle version = 3 (encoder 2.2) . compressed header at offset 12 instead of 8 . 2 times bytes 0 after samples names instead of 1. . specification updated to v0.91 - 26feb2006, initial version : v0.5 ------------------------------------------ * Introduction The piece of code has been written as a compagnion (validation code) of the document "the unofficial MO3 specification". See http://lclevy.free.fr/mo3 It is targeted to developpers or technical people, not for end users. It can be used by IT/XM/S3M modules specialists (tracker editor developper or modules players) to write a MO3 import loader, or more generally to handle MO3 modules in any way. The MO3 format has been created by Ian Luck (http://www.un4seen.com). If you are looking for a good encoder and decoder (but without the source code) and a good module player, Ian's web site is the right place to go. * Features of unmo3 (opensource version) Here they are: - uncompress the MO3 header and samples with lossless compression - able to save uncompressed header and samples - able to extract mp3 and ogg compressed samples - can display a channel of a given pattern into 2 forms - as encoded inside MO3 file - as it is usually appears in a tracker editor This code has been written under Cygwin/IA32, should work under Linux/IA32, and is supposed portable under other architectures. It will be tested under Solaris/Ultrasparc. If you want to run the auto tests, you have to download "unmo3_test.zip". * Syntax unmo3 [options] filename.mo3 available options are: -a parselevel (from 1-4) Display content of the MO3 file with more (-a 4) or less (-a 1) details -d debuglevel (2) Display some inner-working information -v pattern_number voice_number Display a channel of a given pattern as encoded inside MO3 module (technical output) -o Must be combined with -v. Display a given channel, but as seen in any tracker editor (user friendly output). -h header_output_filename Write the uncompressed MO3 header into a file, for further study for example. -s sample_number | all Save one sample, or all samples of the MO3 module. * Usage - to build the executable #make dep #make - demo you can try #make demo to see a 'demo' - tests #make test for the auto tests : mainly to check the decompression routines ("unmo3_test.zip" archive is required). * Not provided with this code There is remaining work to do to interpret how all IT/XM and S3M effects and samples/instruments parameters are stored AND interpreted by a player. But 80-90% of this work has been done in the documentation. And maybe in a future release I'll write a .mod module writer. Have fun. Laurent unmo3-0.6/mo3_unpack.h0000644000000000000000000000113310373635450013332 0ustar rootroot#ifndef MO3_UNPACK_H #define MO3_UNPACK_H 1 unsigned char * unpack(unsigned char *src, unsigned char *dst, long size); unsigned char * unpackSamp8Delta(unsigned char *src, unsigned char *dst, long size); unsigned char * unpackSamp8DeltaPrediction(unsigned char *src, unsigned char *dst, long size); unsigned char * unpackSamp16Delta(unsigned char *src, unsigned char *dst, long size); unsigned char * unpackSamp16DeltaPrediction(unsigned char *src, unsigned char *dst, long size); unsigned char * notCompressed(unsigned char *src, unsigned char *dst, long size); #endif // MO3_UNPACK_H unmo3-0.6/demo.sh0000644000000000000000000000242410400130024012360 0ustar rootroot#!/bin/bash FILE1=dannyelf_ll.mo3 echo "Summary of $FILE1 contents" ./unmo3 -a 1 $FILE1 echo "----------------------------------------------------------------------" echo "More information (Song Seq, Instruments and Samples names)" sleep 3 ./unmo3 -a 2 $FILE1 echo "----------------------------------------------------------------------" echo "More information (Song Seq, Unique voices, Instruments and Samples infos)" sleep 3 ./unmo3 -a 3 $FILE1 echo "----------------------------------------------------------------------" echo "More information (Song Seq, Unique voices, Pattern decoding, Instruments and Samples infos)" sleep 3 ./unmo3 -a 4 $FILE1 echo "----------------------------------------------------------------------" echo "Save sample #24 (with debug)" sleep 3 ./unmo3 -s 24 -d 1 $FILE1 echo "----------------------------------------------------------------------" echo "Save sample #24 (with more debug)" sleep 3 ./unmo3 -s 24 -d 2 $FILE1 echo "----------------------------------------------------------------------" echo "Show encoding of voice 2 in pattern 1)" sleep 3 ./unmo3 -v 1 2 $FILE1 echo "----------------------------------------------------------------------" echo "Show encoding of voice 2 in pattern 1)" sleep 3 ./unmo3 -v 1 2 -o $FILE1 unmo3-0.6/Makefile0000644000000000000000000000134210400367310012550 0ustar rootroot CC=gcc LINK=${CC} ${LIB_DIR} CFLAGS=-g -Wall ${INCLUDE_DIR} ${DEFINES} LIBS= INCLUDE_DIR=-I. LIB_DIR=-L. SRCS=unmo3.c mo3_unpack.c mo3_parse.c mo3_mp3.c OBJS=$(SRCS:%.c=%.o) MAKEDEPEND=makedepend TARGETS=unmo3 FILES=${SRCS} Makefile mo3_unpack.h mo3_parse.h endian_macros.h README.txt mo3_mp3.h 16to8.c demo.sh dannyelf_ll.mo3 COMPILE=$(CC) -c ${CFLAGS} all: $(TARGETS) unmo3: ${OBJS} ${LINK} -o unmo3 $^ test: unmo3 ./test.sh demo: unmo3 ./demo.sh clean: rm -f *.o $(TARGETS) tar: tar cvf unmo3.tar ${FILES} ziparc: ./zip -9r unmo3-`date +%Y%m%d_%H%M%S`.zip ${FILES} ziptest: ./zip -9r unmo3_test.zip test.sh Testdata .c.o: $(COMPILE) $< dep: $(MAKEDEPEND) -f.depend -- ${CFLAGS} -- ${SRCS} include .depend