gmod-3.1.orig/ 40700 1750 1750 0 6413216576 13116 5ustar neurochpneurochpgmod-3.1.orig/ChangeLog100600 1750 1750 46247 6402577432 15023 0ustar neurochpneurochpVersion 3.1 -- now supports awedrv Mon Sep 2 13:29:29 1997 Andrew Robinson * VoiceGUS.C: New module to handle GUS-specific code. Mostly ripped from Voice.C. * VoiceAWE.C: New module to handle AWE-specific code. It still uses some GUS_* commands; these will eventually be eliminated. Mon Sep 1 13:25:15 1997 Claudio Matsuoka * Envelope.C (getY): consider loopEndX outside the loop instead of inside. * load_xm.C (loadXmPattern): Multipy tone portamento value by 16. ------------------------------------------------------------------------------- Version 3.0.6 (back to old format ChangeLog for this release) All changes by Andrew J. Robinson Once again, thanks to Marc Merlin for his testing efforts. Gmod would not be as good as it is now without him. !!! You must resave the xgmod options when using this release. The .xgmodrc file has changed slightly. !!! It's normal for the "GUS: Midi Busy" message to appear in the system log when (x)gmod starts. Check the README for (very slightly) more information. Too many internal changes to mention. Most are not user-visible anyway. Addition of "check magic number" to options. See the man page. Changed comment window so it now has scrollbars. Misc bug fixes. ------------------------------------------------------------------------------- Version 3.0.5: Sun Feb 23 17:22:39 1997 Andrew J. Robinson * Makefile (OFILES): use patsubst, as suggested by Erwin Andreasen * load_xm.c (load_xm_pattern): [and others] Implement remaining xm effects and xm pan envelopes Mon Feb 10 00:17:29 1997 Andrew J. Robinson * load_xm.c, play_voice.c, effects.c: Added support for note-linear slides in XM modules * Voice.h (class Voice): Added mainVolume [a global volume] Sat Feb 8 15:46:22 1997 Andrew J. Robinson * Six69.c, mod.c (load): Changed tuning of looped samples slightly Wed Feb 5 00:57:30 1997 Andrew J. Robinson * s3m.c (load): Copy at most 28 characters for the name of the s3m sample Mon Feb 3 18:31:48 1997 Andrew J. Robinson * Sequencer2.c, load_mod.c, load_s3m.c, load_xm.c: added code for shortening samples if memory is exhaused while loading samples Sun Feb 2 19:11:41 1997 Andrew J. Robinson * load_mod.c (load_module): Use magic instead of the filename to determine whether or not a file needs to be decompressed * load_s3m.c (load_s3m_pattern): calculate where a pattern ends using the pattern length, and don't go beyond that position when loading ----- Released version 3.0.4 ----- Important changes: PAL sample timing is the default when playing MOD files (the default was previously NTSC timing). The up and down arrow keys don't control the mixer volume anymore; they are used to scroll through the samples. The '-e' option has been removed from the ncurses version -- all samples are always shown (since they can now be scrolled through). Mon Jan 27 19:52:10 1997 Andrew J. Robinson * Sequencer.c (open): Don't use GUS PnP workaround if a newer sequencer driver is being used * Voice.c, Voice.h: new class to handle voices * signals.c (timer_handler): scroll samples when using up arrow and down arrow * parse.c (parse_args): Disable '-e' option when using ncurses * Sequencer2.c: Move patch_load here to prevent clash between ncurses and deque * CursesScr.c, CursesScr.h: new class to handle non-X interface Sun Jan 12 16:51:13 1997 Andrew J. Robinson * TrackShell.c (updateTracker): Moved updateTracker here from proc_input.c [update_tracker] Sat Jan 11 01:58:58 1997 Andrew J. Robinson * play_note.c (do_command): Check whether or not a sample is valid before calling set_slideto * load_xm.c (load_xm_module): Create an empty pattern if a pattern is in the playlist but doesn't exist ----- Released version 3.0.3 ----- Mon Dec 2 18:54:50 1996 Andrew J. Robinson * Sequencer.c (open): Do not return an error code if no GUS MIDI device is found Thu Nov 28 00:15:23 1996 Andrew J. Robinson * play_mod.c (play_next_position): Skip a pattern if it does not exist [has not been loaded] * load_s3m.c (load_s3m_module): Take FILE** instead of FILE*, since this function may change mod_fd ----- Released version 3.0.2 ----- Sun Nov 24 16:27:17 1996 Andrew J. Robinson * gmod.c (main): gmod only: skip a module if load fails * TopShell.c (doNext): Unqueue modules that don't load properly, but only if currently "autoplaying" [no user interaction caused the bad module to be loaded] Fri Nov 22 19:42:53 1996 Andrew J. Robinson * load_s3m.c (load_s3m_module): Corrected check of whether or not load_list is empty. * Sequencer.c (open): open /dev/midiXX for write only before opening /dev/sequencer for read and write. This is a workaround for a bug with the GUS PnP card. Fri Nov 22 19:42:53 1996 Peter Federighi * load_mod.c (load_mod_module): Load modules with an xxCH signature Mon Sep 23 18:52:51 1996 Andrew J. Robinson * Envelope.c: Added support for volume fadeout [experimental] ----- Released version 3.0.1 ----- Sun Sep 22 17:12:13 1996 Andrew J. Robinson * Envelope.c: New file. Support for XM volume envelopes [experimental]. * TopShell.c (playClicked): If no module is currently playing, set current_mod before calling pick_random. Mon Sep 16 01:37:46 1996 Andrew J. Robinson * play_mod.c (play_next_position): Fixed a bug in the bugfix for the "pattern delay" command [in version 2.2] * play_mod.c (play_module): Added a 1 second delay before module playback begins to prevent modules from "running together". The time needed to load the module is included in the calculation of the delay. * QueueShell.h (class XQFileDialog): Don't close the QFileDialog after a module has been selected ------------------------------------------------------------------------------- Version 3.0 (Additions/changes by Andrew J. Robinson): Many, many thanks to Marc Merlin for his suggestions and helping me with testing. Changed from FWF widget set to QT. Change user id/group id back to real user id/real group id after opening the sequencer and mixer. This makes it safe to make gmod and xgmod SUID root or SGID root. The PATH and IFS environment variables are not reset anymore. This means that the decompression programs can be located anywhere in the user's path. This is now safe due to the previous change. ------------------------------------------------------------------------------- Version 2.3 (Additions/changes by Andrew J. Robinson): Thanks to Marc Merlin for his many suggestions/bug reports. Some (but not all...yet) have been included in this release. Convert 16 bit samples to 8 bits if they are too long. Changed the way the sequencer is "fed". Doesn't try to load 0 byte XM samples. Added play button to top-level window. Previous and next buttons now work differently. TASD drivers version 3.0 or greater are now REQUIRED. ------------------------------------------------------------------------------- Version 2.2.3 (Additions/changes by Andrew J. Robinson): Fixed bug in 669 pitch slides, caused by the "pattern delay" fix in 2.2. ------------------------------------------------------------------------------- Version 2.2.2 (Additions/changes by Andrew J. Robinson): Modifications to compile with gcc 2.7.2 Modifications to use newer ncurses library. ------------------------------------------------------------------------------- Version 2.2.1 (Additions/changes by Andrew J. Robinson): Handle XM patterns with no data without giving a segmentation fault. ------------------------------------------------------------------------------- Version 2.2 (Additions/changes by Andrew J. Robinson): Fixed bug in "pattern delay" command. Beginning of transition to C++. Initial XM support (incomplete). ------------------------------------------------------------------------------- Version 2.1 (Additions/changes by Andrew J. Robinson): Changed "extended octaves" toggle to a spin label with 3 options: limited octaves, extended octaves, or automatic octaves. ------------------------------------------------------------------------------- Version 2.0.2 Additions/changes by Andrew J. Robinson: Tracking window. Use XtPopup/XtPopdown instead of XtMapWidget/XtUnmapWidget. Remove colors from fallback resources, and put them in an app-defaults file instead. Handle WM_DELETE_WINDOW - closing a window using the window manager will now close only the individual window, not the entire application. Lists don't show their name when they are empty Automatic detection of VoxKit driver version at run time. The OLD_DRIVER compile option is no longer needed -- the binary will work with both driver versions (2.90-2 and 3.0+). Additions/changes by Alex Mohr: Patch for missing initialization of some variables. Patch to fix module lengths (currently in contrib/fix_length.patch) ------------------------------------------------------------------------------- Version 2.0.1 (Additions/changes by Andrew J. Robinson) Error popups on the info screen no longer interfere with playback. Module name is displayed in the main window's title bar. The previous and next buttons now act as though the queue is circular. See the man page for more info. The file queue can be saved and loaded. The "Shuffle" button randomizes the play queue. "Random play" option plays modules in a random order. ------------------------------------------------------------------------------ Version 2.0 (Additions/changes by Andrew J. Robinson) Addition of X interface Support of non-blocking sequencer drivers Too many other changes to mention ------------------------------------------------------------------------------- Version 1.4 (Additions/changes by Andrew J. Robinson) *** Thanks to Lodewijk Voge for help in debugging *** Applied another fix for out-of-tune S3M notes. Fixed volume change when a portamento command is specified. Volume slides occur on tick 0 in S3M version 3.00 modules. Added S3M panning. ------------------------------------------------------------------------------- Version 1.3g (Additions/changes by Andrew J. Robinson) Fixed volume slides in S3M modules when the value is 0x0f or 0xf0. Fixed out-of-tune notes in S3M modules. Check to be sure loop endings don't go beyond the sample length. ------------------------------------------------------------------------------- Version 1.3f (Additions/changes by Andrew J. Robinson) When a volume slide up and volume slide down are specified at the same time in a S3M, the slide down now wins. Fixed sequencer buffer dump timing (again) :-) Pitch slides in S3M modules are affected by the base note of the sample. Temporarily disabled ULT tuning, since it is not handled correctly. ------------------------------------------------------------------------------- Version 1.3e (Additions/changes by Andrew J. Robinson) Fixed handling of pattern break and jump when both are present in the same note position. Fixed S3M out-of-range slide ups/downs (again :-) ) Added "-5" option to use 50 Hz clock frequency with MOD files. Added support for arrow keys, page up, page down. Added a "gmodrc" file to allow configuration by filename. ------------------------------------------------------------------------------- Version 1.3d (Additions/changes by Andrew J. Robinson) Fixed timing of sequencer buffer dumps. ------------------------------------------------------------------------------- Version 1.3c (Additions/changes by Andrew J. Robinson) Fixed loading of S3M modules that require multiple passes. Fixed handling of situation when slide up/down hits the note range limits in S3M modules. Changed valid note range for S3M modules. Shifted all MTM notes up one position (as they should be :-) ). Fixed a bug which sometimes caused notes to be dropped (introduced when adding forward/backward keys). Added "-P" option to specify panning factor. Added support for UltraTracker 1.6 files (ULT format version 4). ------------------------------------------------------------------------------- Version 1.3b Additions/changes by Andrew J. Robinson: Small fixes to lha/zip loading code (see below). Pathnames for decompression programs are no longer absolute. Support the the linear volume mode in VoxWare 2.5 + Added 'b' and 'f' keys to move forward/backward within a module. Changed the way numeric keys are used (now used for numeric argument). Additions/changes by Peter Federighi: Added ability to load lha'd or zip'd modules. Added code to make module filename safe for shell parsing. ------------------------------------------------------------------------------- Version 1.3a (Additions/changes by Andrew J. Robinson) Fixed bugs in S3M effects. Added in-memory compression for S3M modules. Fixed loading of FLT8 modules (maybe?) Added "-q" option for quiet mode. Added "-R" option to randomize play order. ------------------------------------------------------------------------------- Version 1.3 (Additions/changes by Andrew J. Robinson) Added support for "Set Finetune" command Modified effects slightly. Added "-r" option to infinitely repeat modules. (suggested by Wayne Hodgen) Added "-p" option to use PAL timing for playing samples. (PAL timing suggested by Wayne Hodgen) Added "-m" option to select alternate mixer. Fixed bug in tone portamento. Added 'p' key to go to previous module. (suggested by Nan Zou) Added "-z" option for running in background. (Background mode suggested by Nan Zou) Added recognition of SIGTERM, SIGUSR1, and SIGUSR2. Changed (NTSC) sample playing frequency from 8448 Hz to 8363 Hz. Initial S3M support. There is currently VERY LITTLE error checking in the S3M loader, so it may crash. Added "-x" option to extend octaves for MOD files. Display of current position number and pattern number. ------------------------------------------------------------------------------- Version 1.2b (Additions/changes by Andrew J. Robinson) Fixed loading of 15 sample MOD's, which I broke when adding the ability to load compressed modules. :-( Fixed a bug when there was tone portamento with a sample specified. Samples which do not completely load will no longer cause "short file" error (padded with last byte loaded). Some ripped modules are missing the last few bytes. Added "-s" option to ignore "speed 0" commands. ------------------------------------------------------------------------------- Version 1.2a (Additions/changes by Andrew J. Robinson) Added quit, next module, and volume keys. (suggested by Steven Wahlberg) Fixed a bug in pattern breaks. ------------------------------------------------------------------------------- Version 1.2 (Additions/changes by Andrew J. Robinson) -b option to not use BPM changes in MOD files. This is for compatability with older trackers/mods. Recognition of "M&K!" signature. (Suggested by Zygo Blaxell) Recognition of "M!K!" signature. Different exit codes. (also suggested by Zygo Blaxell) If all samples in a MOD file are empty, then gmod no longer tries to play it. This will prevent gmod from trying to play some non-music files. Changed format in which modules are stored in memory. Added "compression" of modules in memory. Fixed a problem with the proper patch sometimes not being selected. Support for all standard 669 commands. Fixed initial panning for 669 modules. Recognition of "Extended 669" format, although extended commands are not yet supported. Modules compressed with 'compress' or 'gzip' can now be played. ------------------------------------------------------------------------------- Version 1.1a (bug fix by Andrew J. Robinson) Fixed a bug with volume when notes were delayed or retriggered. ------------------------------------------------------------------------------- Version 1.1 Many thanks to Robert Sanders for his excellent MTM & ULT loaders, and his numerous great suggestions! Additions/changes by Andrew J. Robinson: 8 channel module support. Period table extended to cover more octaves. Reduction in the number of global variables. Fixed 669 sample loading to load ALL samples. Changed read to fread, lseek to fseek, etc. Added support for log volume in UltraTracker version 1 files. Added support for the panning command. "Set Speed" command now converted to either "Set Ticks" or "Set BPM". Each note can now have two commands. Volume now ranges from 0 to 255. Additions/changes by Robert Sanders: GUS memory checks/memory reporting. MultiTracker (MTM) & UltraTracker (ULT) loaders. "Show empty samples" option. ------------------------------------------------------------------------------- First numbered version! (V1.0) (Additions/bug fixes by Andrew J. Robinson) Made seqbuf_dump more persistent -- if the entire buffer isn't written to the queue, it will keep trying. Improved pitch slides -- they are now linear with respect to period rather than pitch. Added "FLT4" module support. Added the rest of MOD commands except "set finetune" and "invert loop". Added support for tuned samples. Fixed 669 playing -- 669 modules should now play correctly, but 669 effects are not yet supported. Changed calculation of speed. I hope it's right this time :-) Added a small calculation to attempt to minimize loop clicking. ------------------------------------------------------------------------------- Release date: 23 Dec 1993 (Additions/bug fixes by Andrew J. Robinson) Added sync_time after initial set-up. This may help cure a problem with pitch slides sometimes not working. Changed the way bad samples are handled. Now, the channel is turned off if a note is played on that channel using a bad sample. ------------------------------------------------------------------------------- Release date: 22 Dec 1993 (Additions/bug fixes by Andrew J. Robinson) Fixed a misplaced 'if' statement. ------------------------------------------------------------------------------- Release date: 21 Dec 1993 (Additions/bug fixes by Andrew J. Robinson) Added support for arpeggio, tone portamento with vol slide, pattern loops, pattern delays, note cuts, note delays, and the "fine" commands. Corrected (hopefully) volume slides, pitch slides, and speed command. Added code to use "closest note" when period in MOD file does not match a period in the table. Added checks to reduce the number of MIDI events put in the queue. Miscellaneous other small fixes. Notes: The pitch of a note cannot be slid beyond two octaves of its original position. This is a limitation of the Linux sequencer drivers. gmod-3.1.orig/CommentShell.C100600 1750 1750 3203 6402577432 15710 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #include "CommentShell.h" CommentShell::CommentShell(QWidget *w) : QWidget(w, "commentShell") { setMinimumSize(60, 40); setCaption("Xgmod Comment"); commentEdit = new QMultiLineEdit(this, "commentLabel"); commentEdit->setGeometry(5, 5, 200, 160); commentEdit->setReadOnly(TRUE); commentEdit->setFrameStyle(QFrame::Panel | QFrame::Sunken); closeButton = new QPushButton(this, "closeButton"); closeButton->setText("Close"); closeButton->setGeometry(75, 200, 60, 25); closeButton->connect(closeButton, SIGNAL(clicked()), this, SLOT(closeCommentShell())); resize(210, 200); } void CommentShell::setComment(char *text, int lineLen) { char *beginLine, *endLine; char oldChar; beginLine = text; commentEdit->setAutoUpdate(FALSE); commentEdit->clear(); if (!*beginLine || !lineLen) commentEdit->setText(text); else while (*beginLine) { endLine = beginLine + 1; while (*endLine && (*endLine != '\n') && (endLine < (beginLine + lineLen))) endLine++; oldChar = *endLine; *endLine = 0; commentEdit->insertLine(beginLine); *endLine = oldChar; if (oldChar == '\n') endLine++; beginLine = endLine; } commentEdit->repaint(); commentEdit->setAutoUpdate(TRUE); } void CommentShell::showCommentShell() { show(); } void CommentShell::closeCommentShell() { close(); } void CommentShell::resizeEvent(QResizeEvent *) { closeButton->move((width() - 60) / 2, height() - 30); commentEdit->resize(width() - 10, height() - 40); } #ifndef DEPEND #include "CommentShell.moc" #endif gmod-3.1.orig/CommentShell.h100600 1750 1750 1041 6402577432 15753 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #ifndef __CommentShellH #define __CommentShellH #include #include #include class CommentShell : public QWidget { Q_OBJECT public: CommentShell(QWidget *w = 0); void setComment(char *, int); public slots: void showCommentShell(); protected: void resizeEvent(QResizeEvent *); private: QMultiLineEdit *commentEdit; QPushButton *closeButton; private slots: void closeCommentShell(); }; #endif gmod-3.1.orig/xgmod100700 1750 1750 2541340 6402600112 14325 0ustar neurochpneurochpELF4 4 (444ԀԀ! ! ( (9(9< 88/lib/ld-linux.so.1$.]S&2;3f| :_} 5>G R+)#yli 7IurzF^wZs`"O9?dK'E@,h !kV Y%A*x- 6Nn4pPLj/mH T[={MUvX(J1eD a<C\g8c0QtWq ~o Bb "h"8+95o<9 Bx"H<O("VH"]XP"c(9 m`sH{x""ط"ȸ("H&"""8I"x )  &"84 X"gX""#8>18:BX:Ub(9ox GHHسظY (ؼWxFxY)عY8Ȼ^IPTxc8fqؽ x8XWX)Sx"8fȲ_,9xYIYXfL:vX8ؿ XcXBHYH)h6xJ8`رkr|;( XhQx6hq غ9h(H5ND6QȹT[h9iFr6hhHAȽAHNXTX8"k,Ⱦ:CLH9X9eq([m}ȶ,T(XUIh)(j4AU82jȺv(k\oXf(fh{PHfxe$xY/8Y<KfX*jȷkvw(""xc9T""@$ز"<hh&"{q  e, XD h9(I [ xLm 0| (   P P:  > :  " h#  "8 ;C  "T 8C"b f "| Z @ " 0 E )  9T ȴK ȵ i `:T xl" :5 hq d9} 6 K  :  : ; d9 S x.' ؾe Wl  ȱ5 H" X" h(" "  ȳ H ش" " 8b D: H:  ص" " Xc " ض6 (F 8"$ (9 , ("2 :@ :G L "S 8Z Wa "n ,u ( H" h ػ" " " ȼ@   > ȿ" " H" " H: 9libX11.so.6strcpyioctlmemmove_DYNAMIC__ctype_bgetenverrnofgetsmemcpygetuidmallocsleep__environ_initstrrchrcallocwritefprintfstrcatstrstrreadstrncmpstrncpyreallocfreadfopenmemsetfclosestrcmp_finisprintfatexit_GLOBAL_OFFSET_TABLE_exitopenstrchrclosefreeXGetErrorTextXSetErrorHandlerXSetIOErrorHandlerXOpenDisplayXDisplayNameXConnectionNumberXSynchronizeXInternAtomXFreeGCXCloseDisplayXGetWindowPropertyXKillClientXFreeXCreatePixmapXChangePropertyXSetCloseDownModeXCreateGCXFreePixmapXCreateWindowXDestroyWindowXSetWMPropertiesXStoreNameXParseGeometryXDefineCursorXFlushXQueryTreeXTranslateCoordinatesXSyncXBellXPendingXNextEventXRefreshKeyboardMappingXCheckTypedWindowEventXGetWindowAttributesselectXRaiseWindowXGrabKeyboardXAllowEventsXGrabPointerXUngrabKeyboardXUngrabPointerXLookupString__ctype_toupperXCheckIfEventXGetGeometryXClearAreaXGetVisualInfoXVisualIDFromVisualXCreateColormapXFreeColormapXAllocColorXQueryColorsXLookupColorXFreeColorsXFreeCursorXQueryPointerXWarpPointerXCreatePixmapCursorXCreateBitmapFromDataXCreateFontCursorXFreeFont__ctype_tolowerXLoadQueryFontXFreeFontNamesXTextWidthXTextExtentsXListFontsXSetForegroundXFillRectangleXGetImageXCreateImageXPutImageXSetSubwindowModeXCopyAreaXSetClipMaskXSetClipOriginXSetFunctionXChangeGCXSetFillStyleXSetFontXSetBackgroundXSetDashesXSetLineAttributesXSetStippleXSetTileXSetTSOriginXSetRegionXFillPolygonXDrawLinesXDrawLineXDrawPointXDrawRectangleXFillArcsXFillRectanglesXDrawArcsXDrawSegmentsXFillArcXDrawArcXSetArcModeXSetFillRuleXDrawStringXDrawImageStringXCreateRegionXUnionRectWithRegionXPolygonRegionXDestroyRegionXUnionRegionXEmptyRegionXPointInRegionXRectInRegionXOffsetRegionXIntersectRegionXSubtractRegionXXorRegionXEqualRegionXCreateSimpleWindowXSetTransientForHintXChangeWindowAttributesXResizeWindowXSetWMProtocolsXReparentWindowXSetWindowBackgroundPixmapXSetWindowBackgroundXSetWMHintsXSetIconNameXSelectInputXGetInputFocusXSetInputFocusXMapWindowXUnmapWindowXIconifyWindowXLowerWindowXSetWMNormalHintsXMoveWindowXMoveResizeWindowaccessunlink_xstat_IO_stderr_fflushfwrite__uflow__overflowungetcgetpwuidqsortsscanfXGetSelectionOwnerXConvertSelectionXGetAtomNameXSetSelectionOwnerXSendEventlibg++.so.27cerr__opPCc__C6String__strtod_internal__pure_virtual__ls__7ostreamcSprepend__FP6StrRepPCci___brk_addrabort_vt.7ostream.3ios__ls__7ostreamPCcSalloc__FP6StrRepPCcii_vt.3ios__builtin_vec_newScat__FP6StrRepPCciT1i__builtin_vec_delete_nilStrRep__builtin_delete__builtin_newabsfputslibstdc++.so.27logsqrt__writeclose__11fstreambaseendl__FR7ostream_etext_IO_stdout__._8ofstream__rs__7istreamRcclone__t7__bsrep2ZcZt18string_char_traits1Zc_IO_stdin_fseek_vt.8ifstream.3iosreplace__t12basic_string2ZcZt18string_char_traits1ZcUiUiUic__bss_startset_new_handler_._8ifstream__assert_fail_vt.7istream.3iosexp_t12basic_string2ZcZt18string_char_traits1Zc.nilRep_vt.8ofstream.3ios_edata_end__11fstreambaseiPCciireplace__t12basic_string2ZcZt18string_char_traits1ZcUiUiPCcUifileno_exitlibm.so.5libc.so.5bcmpgetgidpopenprintfvsprintfpclosegetgrgid__strtol_internalperrorreadlinkfeofoptargsys_nerrrmdirreaddir_lxstatlseekbzero__libc_initrenameenvironchdir__fpu_controloptindrandsetgidstrtokstrdupgettimeofdaygetoptlocaltimeftellsrandgetppidtimeopendirgetcwdsetlocale__setfpucwclosedirsetuidmkdirvfprintf_sys_nerr_errnoh9999D:L:QH:P:`:::::::;;9;d48444455b5 55555 5$5(5,5054585<5@5KD5H5BL5P5T5X5\5>`5]d5h5l5p5t5<x5|5U550555555J55D555 5525L5555555 55 5 5m5j5~5X5H5666[ 66I666@ 6/$6(6p,60646q86<6@6D6H6L6P6MT6lX6\6`6d6h6gl6p6Pt6x6|66666}6666a6^6666h66366616C666\66(66)66=666x657t7:7 777w77  7$7W(7,7F07i4787 <7c@7D7oH7 L7P7 T7X7 \7`7d7h7l7,p7-t7Gx7|77;777777e7'7|7A777Z77777677 7777T7.7Y77`77v7s78{8?8 8988E88 8$8S(8y,8084888r<8"@8D8H8L8P8T8kX8+\8`8zd8#h8_l8Np8t8Rx8$|8f88V88O8n884888%8u878*88&w54%4%4h%4h%4h%4h%4h %5h(%5h0%5h8p% 5h@`%5hHP%5hP@%5hX0%5h` % 5hh%$5hp%(5hx%,5h%05h%45h%85h%<5h%@5h%D5h%H5hp%L5h`%P5hP%T5h@%X5h0%\5h %`5h%d5h%h5h%l5h%p5h%t5h%x5h%|5h %5h(%5h0%5h8p%5h@`%5hHP%5hP@%5hX0%5h` %5hh%5hp%5hx%5h%5h%5h%5h%5h%5h%5h%5hp%5h`%5hP%5h@%5h0%5h %5h%5h%5h%5h%5h%5h%5h%5h %6h(%6h0%6h8p% 6h@`%6hHP%6hP@%6hX0%6h` % 6hh%$6hp%(6hx%,6h%06h%46h%86h%<6h%@6h%D6h%H6hp%L6h`%P6hP%T6h@%X6h0%\6h %`6h%d6h%h6h%l6h%p6h%t6h%x6h%|6h %6h(%6h0%6h8p%6h@`%6hHP%6hP@%6hX0%6h` %6hh%6hp%6hx%6h%6h%6h%6h%6h%6h%6h%6hp%6h`%6hP%6h@%6h0%6h %6h%6h%6h%6h%6h%6h%6h%6h %7h(%7h0%7h8p% 7h@`%7hHP%7hP@%7hX0%7h` % 7hh%$7hp%(7hx%,7h%07h%47h%87h%<7h%@7h%D7h%H7hp%L7h`%P7hP%T7h@%X7h0%\7h %`7h%d7h%h7h%l7h%p7h%t7h%x7h%|7h %7h(%7h0%7h8p%7h@`%7hHP%7hP@%7hX0%7h` %7hh%7hp%7hx%7h%7h%7h%7h%7h%7h%7h%7hp%7h`%7hP%7h@%7h0%7h %7h%7h%7h%7h%7h%7h%7h%7h %8h(%8h0%8h8p% 8h@`%8hHP%8hP@%8hX0%8h` % 8hh%$8hp%(8hx%,8h%08h%48h%88h%<8h%@8h%D8h%H8hp%L8h`%P8hP%T8h@%X8h0%\8h %`8h%d8h%h8h%l8h%p8h%t8h%x8h%|8h %8h(%8h0%8h8p%8h@`%8hHP%8hP@%8hX0%8h` %8hh%8hp%8hx%8h%8h%8h%8hYЃ1UUUPSQ̀D$(9:P $h ) JUP[&&̀&S4=4t Ѓ;u[Í6ÐUWVSf|$fl$\$$f9|$$}vv9t\JtYL$PJPR u8JPJ؃[^_]Í&&L$ \C9|[^_]ÐUWVSt$1D$~T$ 099 ,:9};76D$E099} |$G \$K9}NjT$U099]09)P}09)‰P\$9}|$L$M099}M29)&&T$U.9)؉ËL$M09)L$ L$AT$ [^_]ÐxP ÐS\$jjSC ) C,C0C8 j4PC<[Ít&&WVSt$|$F ) V8t>B@9tvÈCtjPR@ Ѓ9^8uF8PF,tjhQPF,P3WV[^_Ív&D$@<@(Ðt&UWVS|$$T$(D$,t$0l$8L$E0jPޝƒU,E04D$|L$ QDŽ$L$ Q]0E,T$0D$4D$$D$$PD$,D$,P軝D$8\$ $$8$+$NxBDŽ$$RDŽ$U^|Ã13v DŽ$$QDŽ$U|ËDŽ$$PDŽ$U{D$()K؋L$ 11ۅu$6$ $ $DŽ$$QDŽ$U{ǃ?$$DŽ$$RDŽ$UD{ǃ\$()މt$( $$j$P$R莪 $(D$ $y(t<$$󥍼$$󥋄$9$uD$ |$ t$PU$RT$($QSD$,D$,Py$B($$󥍼$$󥋄$9$$Ro $$󥍄$$$$󥋄$+$$‰Յ|FDŽ$$L$(QDŽ$$D$,T$,R_yÃ13_DŽ$$WDŽ$$V%yDŽ$WDŽ$Vy)C11߅u$L$($v$$$DŽ$$VDŽ$$Sx$$DŽ$VDŽ$SXx8)ʼn$$$jW$P謧 $$$󥋄$+$$‰Յ|TDŽ$$L$(QDŽ$$D$,T$,RwÃ13m&&DŽ$$WDŽ$$VewDŽ$WDŽ$VCw)C11߅u$L$($v$$$DŽ$$VDŽ$$Sv$$DŽ$VDŽ$Sv8)ʼn$$$D$(jT$,R$Q $$󥍄$$$$󥋄$+$$‰Յ|ODŽ$$L$(QDŽ$$D$,T$,RuÃ13h6&DŽ$$WDŽ$$VuDŽ$WDŽ$Vcu)C11߅u$L$($v$$$DŽ$$VDŽ$$St$$DŽ$VDŽ$St8)ʼn$$$D$(jT$,R$Q ԋ$D$(|$$獴$n,[^_]lÍt&$$$l$$<$$@$D$$$v$$$X$󥍼$D$X󥋄$H+$L$x3DŽ$<$QDŽ$DU_sÃ13cDŽ$<$QDŽ$DU,sËDŽ$<$PDŽ$DUsǃ)K17ljۅu)$L$($H $T$T$LDŽ$<$QDŽ$DUrǃ?$L$PDŽ$<$RDŽ$DUDrǃ\$()މt$( $L$Hj$P$R莡 $$l$H+$LNxBDŽ$<$RDŽ$DUqÃ13v DŽ$<$QDŽ$DUlqËDŽ$<$PDŽ$DUAqD$()K؋L$ 11ۅu$H6$T$T$LDŽ$<$QDŽ$DUpǃ?$L$PDŽ$<$RDŽ$DUpǃ\$()މt$( $L$Hj$P$Rޟ $D$ $y(t<$($󥍼$$󥋄$9$,uD$ |$ t$P$RT$($QSD$,D$,PGo$B($$󥍼$($󥋄$49$$Ro $$$<$󥍄$($$$<󥋄$+$$‰Յ|HDŽ$$L$(QDŽ$$D$,T$,RnÃ13a6DŽ$$WDŽ$$VenDŽ$WDŽ$VCn)C11߅u$L$($v$$$DŽ$$VDŽ$$Sm$$ DŽ$VDŽ$Sm8)ʼn$$$D$(jT$,R$Q $$󥍄$$$$󥋄$+$$‰Յ|ODŽ$$L$(QDŽ$$D$,T$,RlÃ13h6&DŽ$$WDŽ$$VlDŽ$WDŽ$Vcl)C11߅u$L$($v$$$DŽ$$VDŽ$$Sk$$DŽ$VDŽ$Sk8)ʼn$$$jW$P $$$󥋄$+$$‰Յ|TDŽ$$L$(QDŽ$$D$,T$,R kÃ13m&&DŽ$$WDŽ$$VjDŽ$WDŽ$Vj)C11߅u$L$($v$$$DŽ$$VDŽ$$S+j$$DŽ$VDŽ$Si8)ʼn$$$D$(jT$,R$QD $$󥍄$$$x$󥋄$|+$$‰Յ|ODŽ$p$pL$(QDŽ$x$xD$,T$,R(iÃ13h6&DŽ$p$pWDŽ$x$xVhDŽ$pWDŽ$xVh)C11߅u$L$($|v$$$DŽ$p$pVDŽ$x$xSKh$$DŽ$pVDŽ$xSh8)ʼn$$|$xjW$Pl $$$󥋄$|+$$‰Յ|TDŽ$p$pL$(QDŽ$x$xD$,T$,RmgÃ13m&&DŽ$p$pWDŽ$x$xV%gDŽ$pWDŽ$xVg)C11߅u$L$($|v$$$DŽ$p$pVDŽ$x$xSf$$DŽ$pVDŽ$xSXf8)ʼn$$|$xD$(jT$,R$Q褕 |$,$h|$$8|$$󥋄$$b@$H$󥍄$\$$4$H󥋄$8+$<$‰Յ|QDŽ$,$,L$(QDŽ$4$4D$,T$,R:eÃ13jt&&DŽ$,$,WDŽ$4$4VdDŽ$,WDŽ$4Vd)C11߅u$L$($8v$D$D$<DŽ$,$,VDŽ$4$4S[d$<$@DŽ$,VDŽ$4S(d8)ʼn$<$8$4jW$P| $p$$\󥋄$8+$<$‰Յ|TDŽ$,$,L$(QDŽ$4$4D$,T$,R}cÃ13m&&DŽ$,$,WDŽ$4$4V5cDŽ$,WDŽ$4Vc)C11߅u$L$($8v$D$D$<DŽ$,$,VDŽ$4$4Sb$<$@DŽ$,VDŽ$4Shb8)ʼn$<$8$4D$(jT$,R$Q贑 $$󥍄$,$$$󥋄$+$ $‰Յ|ODŽ$$L$(QDŽ$$D$,T$,RaÃ13h6&DŽ$$WDŽ$$VUaDŽ$WDŽ$V3a)C11߅u$L$($v$$$ DŽ$$VDŽ$$S`$ $DŽ$VDŽ$S`8)ʼn$ $$D$(jT$,R$Qԏ ԋ$D$(|$$獴$Xv&$$$$9$g $)Ӎ6K$y(u QN$P$RT$ L$ Q+_$@$B($$󥍼$$󥋄$9$a$RL&DŽ$$$$$$T$|$L$x$ D$t$9$T$$󥍼$$󥋄$+$ $x<DŽ$$QDŽ$$PQ^Ã13s6DŽ$$QDŽ$$P^ËDŽ$$RDŽ$$Q]ǃ)K17ljۅu$L$($$$$ DŽ$$QDŽ$$Pk]ǃ?$ $DŽ$$QDŽ$$P&]ǃ\$()މt$($ $jL$|Q$Ps $U$|$x$󥋄$+$ x=DŽ$$RDŽ$$Q\Ã13tvDŽ$$QDŽ$$PE\ËDŽ$$RDŽ$$Q\ǃ)K17ljۅu$&$ $$ DŽ$$RDŽ$$Q[ǃ?$ $DŽ$$RDŽ$$QV[ǃ\$()މt$($ $jT$|RL$|Q覊 $$x(u P葺S$RT$L$QuZ$@$B($$󥍼$$󥋄$9$$R 6$$󥍄$D$p$$󥋄$+$$‰Յ|IDŽ$$L$(QDŽ$$D$,T$,RYÃ13bvDŽ$$WDŽ$$VYDŽ$WDŽ$VY)C11߅u$L$($v$$$DŽ$$VDŽ$$S Y$$DŽ$VDŽ$SX8)ʼn$$$D$(jT$,RL$xQ' $$󥍄$D$l$|$󥋄$+$$‰Յ|UDŽ$t$tL$(QDŽ$|$|D$,T$,RXÃ13n DŽ$t$tWDŽ$|$|VWDŽ$tWDŽ$|VW)C11߅u$L$($v$$$DŽ$t$tVDŽ$|$|S+W$$DŽ$tVDŽ$|SV8)ʼn$$$|D$(jT$,RL$tQG ԋ$D$(|$$(獴$>&D$h$LD$d$T$`$ L$\$$D$X$`T$T$9L$h$8$󥍼$$$8󥋄$(+$,$x7DŽ$D$`PDŽ$$T$`RUÃ13hvDŽ$L$`QDŽ$$D$`PUËDŽ$T$`RDŽ$$L$`Q_Uǃ)K17ljۅu'$L$($(&$4$4$,DŽ$L$`QDŽ$$D$`PTǃ?$,$0DŽ$L$`QDŽ$$D$`PTǃ\$()މt$($,$(jL$\QD$lP |$X$L󥋼$ߋ$(+$,x4DŽ$T$`RDŽ$$L$`QTÃ13fDŽ$L$`QDŽ$$D$`PSËDŽ$T$`RDŽ$$L$`QSŃ)K1uʼnۅu$(v$4 $4$,DŽ$T$`RDŽ$$L$`QASǃ?$,$0DŽ$T$`RDŽ$$L$`QSǃ\$()މt$($,$(jT$\RL$\QR l$h$tD$PUT$h|$X$`󥋄$(+$,x7DŽ$T$`RDŽ$$L$`QbRÃ13hvDŽ$L$`QDŽ$$D$`P+RËDŽ$T$`RDŽ$$L$`QQǃ)K17ljۅu$(t&$4 $4$,DŽ$T$`RDŽ$$L$`QQǃ?$,$0DŽ$T$`RDŽ$$L$`QRQǃ\$()މt$($,$(jT$\RL$XQ袀 $x$x(u P荰S$RT$L$QqP$@$B($$󥍼$$󥋄$9$ C$R.&&$L$L$$󥍄$D$H$$󥋄$+$$‰Յ|NDŽ$$L$(QDŽ$$D$,T$,ROÃ13g&DŽ$$WDŽ$$VODŽ$WDŽ$VcO)C11߅u$L$($v$$$DŽ$$VDŽ$$SN$$DŽ$VDŽ$SN8)ʼn$$$D$(jT$,RL$PQ~ $$󥍄$D$D$$󥋄$+$$‰Յ|UDŽ$$L$(QDŽ$$D$,T$,RMÃ13n DŽ$$WDŽ$$VMDŽ$WDŽ$VM)C11߅u$L$($v$$$DŽ$$VDŽ$$S M$$DŽ$VDŽ$SL8)ʼn$$$jWD$LP/| $T$@$󥋄$؉D$<$+$ЉŅ|TDŽ$$L$(QDŽ$$D$,T$,R-LÃ13m&&DŽ$$WDŽ$$VKDŽ$WDŽ$VK)C11߅uL$<L$($$$$DŽ$$VDŽ$$SKK$$DŽ$VDŽ$SK8)ʼn$$$D$(jT$,RL$HQgz $$󥍄$D$8$l$󥋄$p+$t$‰Յ|UDŽ$d$dL$(QDŽ$l$lD$,T$,RNJÃ13n DŽ$d$dWDŽ$l$lVJDŽ$dWDŽ$lVI)C11߅u$L$($pv$|$|$tDŽ$d$dVDŽ$l$lSkI$t$xDŽ$dVDŽ$lS8I8)ʼn$t$p$lD$(jT$,RL$@Qx |$,$H|$$|$$󥋄$$C@$<$󥍄$PD$4$($<󥋄$,+$0$‰Յ|GDŽ$ $ L$(QDŽ$($(D$,T$,R HÃ13`DŽ$ $ WDŽ$($(VGDŽ$ WDŽ$(VG)C11߅u$L$($,v$8$8$0DŽ$ $ VDŽ$($(SKG$0$4DŽ$ VDŽ$(SG8)ʼn$0$,$(jWD$ǃ?$,$0DŽ$$RDŽ$$U>ǃ\$()މt$( $,$(j$P$Rm $$`$(+$,NxBDŽ$$RDŽ$$U>Ã13v DŽ$$QDŽ$$U=ËDŽ$$PDŽ$$U=D$()K؋L$ 11ۅu$(6$4$4$,DŽ$$QDŽ$$UB=ǃ?$,$0DŽ$$RDŽ$$U=ǃ\$()މt$( $,$(j$P$RNl $PD$ $y(t<$$󥍼$$󥋄$9$ uD$ |$ t$P$RT$($QSD$,D$,P;$B($$󥍼$$󥋄$9$t$RW_ $$$$󥋄$t$$$$$󥋄$+$$‰Յ|JDŽ$$L$(QDŽ$$D$,T$,R;Ã13ct&DŽ$$WDŽ$$V:DŽ$WDŽ$V:)C11߅u$L$($v$$$DŽ$$VDŽ$$S+:$$DŽ$VDŽ$S98)ʼn$$$D$(jT$,R$QDi |$ $(󥋄$D$$T$H$+L$HL$$$3 [^_]ĘÍ&&$$$$$$$$$$6$$$$󥋄$t$$$󥋄$+$$x=DŽ$$RDŽ$Uy8Ã13mv&DŽ$$QDŽ$U<8ËDŽ$$PDŽ$U8ǃ)K17ljۅu)$L$($ $$$DŽ$$QDŽ$U7ǃ?$$DŽ$$RDŽ$UT7ǃ\$()މt$( $$j$P$Rf $$$+$NxBDŽ$$RDŽ$U6Ã13v DŽ$$QDŽ$U|6ËDŽ$$PDŽ$UQ6D$()K؋L$ 11ۅu$6$$$DŽ$$QDŽ$U5ǃ?$$DŽ$$RDŽ$U5ǃ\$()މt$( $$j$P$Rd $D$ $y(t<$$󥍼$$󥋄$9$uD$ |$ t$P赑$RT$($QSD$,D$,PW4$B($$󥍼$$󥋄$9$l$RW $$$$󥋄$t$$$$l$󥋄$p+$t$‰Յ|JDŽ$d$dL$(QDŽ$l$lD$,T$,R3Ã13ct&DŽ$d$dWDŽ$l$lVe3DŽ$dWDŽ$lVC3)C11߅u$L$($pv$|$|$tDŽ$d$dVDŽ$l$lS2$t$xDŽ$dVDŽ$lS28)ʼn$t$p$lD$(jT$,R$Qa $<$󥋄$t$$P$$($<󥋄$,+$0$‰Յ|QDŽ$ $ L$(QDŽ$($(D$,T$,R1Ã13jt&&DŽ$ $ WDŽ$($(Vu1DŽ$ WDŽ$(VS1)C11߅u$L$($,v$8$8$0DŽ$ $ VDŽ$($(S0$0$4DŽ$ VDŽ$(S08)ʼn$0$,$(jW$P_ $d$$P󥋄$,+$0$‰Յ|TDŽ$ $ L$(QDŽ$($(D$,T$,R/Ã13m&&DŽ$ $ WDŽ$($(V/DŽ$ WDŽ$(V/)C11߅u$L$($,v$8$8$0DŽ$ $ VDŽ$($(S/$0$4DŽ$ VDŽ$(S.8)ʼn$0$,$(D$(jT$,R$Q4^ $$󥋄$t$$ $$$󥋄$+$$‰Յ|QDŽ$$L$(QDŽ$$D$,T$,R .Ã13jt&&DŽ$$WDŽ$$V-DŽ$WDŽ$V-)C11߅u$L$($v$$$DŽ$$VDŽ$$S+-$$DŽ$VDŽ$S,8)ʼn$$$jW$PL\ $t$$ $$ 󥋄$+$‰Յ|MDŽ$$T$(RDŽ$$L$,D$,PF,Ã13f&DŽ$$WDŽ$$V,DŽ$WDŽ$V+)C11߅u$L$($v$$$DŽ$$VDŽ$$Sk+$$DŽ$VDŽ$S8+8)ʼn$$$D$(jT$,R$QZ |$,$|$$|$$`󥋄$$&@$$$$󥍄$$$$󥋄$+$$‰Յ|SDŽ$$L$(QDŽ$$D$,T$,R *Ã13l&DŽ$$WDŽ$$V)DŽ$WDŽ$V))C11߅u$L$($v$$$DŽ$$VDŽ$$S+)$$DŽ$VDŽ$S(8)ʼn$$$D$(jT$,R$QDX |$ $󥋄$D$$T$$ $ &&$$$$9$t$,9$k$x(u P觇S$RT$ L$ Q'$@$B($$󥍼$p$󥋄$|9$a$R L&DŽ$$x$$D$|$T$x$L$t$D$pv$9$4$p$󥍼$$p󥋄$+$$x<DŽ$L$|QDŽ$D$|P&Ã13m&DŽ$L$|QDŽ$D$|P{&ËDŽ$T$|RDŽ$L$|QO&ǃ)K17ljۅu'$L$($&$$$DŽ$L$|QDŽ$D$|P%ǃ?$$DŽ$L$|QDŽ$D$|P%ǃ\$()މt$($$jL$xQ$PT $U$|$t$x󥋄$+$x9DŽ$T$|RDŽ$L$|Q$Ã13jt&DŽ$L$|QDŽ$D$|P$ËDŽ$T$|RDŽ$L$|Q$ǃ)K17ljۅu$t&$ $$DŽ$T$|RDŽ$L$|Q!$ǃ?$$DŽ$T$|RDŽ$L$|Q#ǃ\$()މt$($$jT$xRL$xQ2S $$x(u PS$RT$L$Q#$@$B($$󥍼$$󥋄$9$$R薂&&$L$l$\$󥍄$D$h$H$\󥋄$L+$P$‰Յ|NDŽ$@$@L$(QDŽ$H$HD$,T$,RW"Ã13g&DŽ$@$@WDŽ$H$HV"DŽ$@WDŽ$HV!)C11߅u$L$($Lv$X$X$PDŽ$@$@VDŽ$H$HS{!$P$TDŽ$@VDŽ$HSH!8)ʼn$P$L$HD$(jT$,RL$pQP |$ $󥋄$$D$$T$$ $V&D$d$,D$`$T$\$L$X$D$T$@T$PL$d9$t$$󥍼$$󥋄$+$ $x7DŽ$D$\PDŽ$T$\R Ã13hvDŽ$L$\QDŽ$D$\PËDŽ$T$\RDŽ$L$\Qǃ)K17ljۅu'$L$($&$$$ DŽ$L$\QDŽ$D$\P!ǃ?$ $DŽ$L$\QDŽ$D$\Pǃ\$()މt$($ $jL$XQD$hP2N $t|$T$,ߋ$+$ xBDŽ$T$\RDŽ$L$\QMÃ13t&&DŽ$L$\QDŽ$D$\P ËDŽ$T$\RDŽ$L$\QŃ)K1uʼnۅu$v$ $$ DŽ$T$\RDŽ$L$\Qqǃ?$ $DŽ$T$\RDŽ$L$\Q2ǃ\$()މt$($ $jT$XRL$XQL l$d$D$LUT$d|$T$@󥋄$+$ x7DŽ$T$\RDŽ$L$\QÃ13hvDŽ$L$\QDŽ$D$\P[ËDŽ$T$\RDŽ$L$\Q/ǃ)K17ljۅu$t&$ $$ DŽ$T$\RDŽ$L$\Qǃ?$ $DŽ$T$\RDŽ$L$\Qǃ\$()މt$($ $jT$XRL$TQJ $$x(u PzS$RT$L$Q$@$B($$󥍼$$󥋄$9$3$R6z&&$L$H$$󥍄$D$D$$󥋄$+$$‰Յ|NDŽ$$L$(QDŽ$$D$,T$,RÃ13g&DŽ$$WDŽ$$VDŽ$WDŽ$V)C11߅u$L$($v$$$DŽ$$VDŽ$$S$$DŽ$VDŽ$S8)ʼn$$$D$(jT$,RL$LQ7H $$󥍄$D$@$|$󥋄$+$$‰Յ|UDŽ$t$tL$(QDŽ$|$|D$,T$,RÃ13n DŽ$t$tWDŽ$|$|VDŽ$tWDŽ$|V)C11߅u$L$($v$$$DŽ$t$tVDŽ$|$|S;$$DŽ$tVDŽ$|S8)ʼn$$$|jWD$HP_F $t$L$<$ډT$8$+$‰Յ|TDŽ$t$tT$(RDŽ$|$|L$,D$,P]Ã13m&&DŽ$t$tWDŽ$|$|VDŽ$tWDŽ$|V)C11߅uL$8L$($$$$DŽ$t$tVDŽ$|$|S{$$DŽ$tVDŽ$|SH8)ʼn$$$|D$(jT$,RL$DQD $`$󥍄$tD$4$L$`󥋄$P+$T$‰Յ|UDŽ$D$DL$(QDŽ$L$LD$,T$,R~Ã13n DŽ$D$DWDŽ$L$LV5DŽ$DWDŽ$LV)C11߅u$L$($Pv$\$\$TDŽ$D$DVDŽ$L$LS$T$XDŽ$DVDŽ$LSh8)ʼn$T$P$LD$(jT$,RL$:Í6S\$j\6Ss:u$h() hh92P4/j96[Í&&T$L$9sʉÍ&D$P9Í6S\$j5S9u$h() hh9]2P.jJ96[Í&&D$@@@ @@@@ @$@(@,@0Í&&T$D$fPB@PÍD$jhQ@,P+ Ð&D$P$Rh Q@@,P+ ÍT$D$fPBDPZÍT$D$jPB,P2 Ð&WVS\$t$1ɍv9K(~I{8T8A6&[^_ÍT$B$$PhQB,P+D$ Í&VSt$ \$19N(~IV8B(9tZ(JpAݐ[^Í&WVS\$t$1ɍv9K(~I{8TA6&[^_ÍD$@,Ð&L$D$T$ R@Q8PÍ&S\$D$ L$T$RQ@S8P{ [ÍD$T$R@8RFÍ6L$D$T$ R@Q8P1Í&T$D$L$ @R8B09tJ0JpÐ&ST$D$ J8@\tR$RCQCЃ[S\$D$ L$T$RQS$R@S8P'[Í6D$@,P7 ,9Ív&T$D$BH* PRÍD$PPÐT$D$BH* PRÍD$Ít&&T$ D$+D$ÐUWVS]S9xSJx+%Pq6(%PQ/jj-t1ۃ6JC~1ۍ6C~u V}W]Sjjp&5P襲jh 5PWjh4P衚$jjp4PGjjt4PВPPPPPh4P(PS0H Ph:VEP'hE:xtlx}&xt'xu~jjjhq* h* ij3j36jjjh* h* Kj3L3t&jjjh* h* +j3,3t&jjjh* h*  j5 3t&h* >(|tX0|ЃPb)Ã|VS%h+ S+h + S.:S4=:uh + h + .:}+}xj/P/=:t5]9]~-,xUu 4|} 4C9]ӋE+E~XP(]9]~Iu P-+U  jPAhPg) C뽐::::xfj@DPh]S>jSjEP?61l[^_]Í&UWVS\$$@ttPٝ:jD$P-::::@tt ::@tt: :@tt: :PY:@t$: :th:PQ{ :$:D$:D$:D$ hPUjD$,P+L$0+L$8L$0l$<|$4 9~IL$)&)|$|$~1B @B+L$Ⱦ'6&1:ƀtY|::W:$:D$:D$:D$ h:Pe&h+ @lP蝲[^_]ËD$|$ tÍ6 Ív&1Í&Ív&Ív& Ív&1|$ t@ÐD$@H(+ D$t P.Ít&D$L$8ttAjPR@ ЃÍv&D$@Ð&VS\$ t$C+ SVS[^Í6&D$P&Í6D$T$8tt jR׽ÍvD$@Ð&VS\$ t$C+ SVS[^Í6&D$PÍ6T$D$ PR9Í&VS\$ t$C, SyCX, SiC, SyVS/[^Í6&T$D$ PRaÍ&S\$ D$PSp؃[Í6&T$D$ ttPR)Ðt&)Í&D$T$x t t R +Ít&D$T$x tR7Ð&Í&VS\$ t$CX, SiC, SyVS/[^Í6&D$T$8t R+Í6&D$@Ð&VS\$ t$C, SVS[^Í6&D$PÍ6T$D$B- PRÍD$PP5ÐT$D$B- PRÐ1ҹfDfǀDDB~Ð,UWVSD$4$H$X 󥋌$@Qhj$P"&=t1[^_],Ív$H$I iftD$4jm$HP%$LjmP!jl$^P$\P$$`A7$$|$T|$T$`y$1v<tF~19}6  C9|$1ۍv@BC~$919}<}A+~USjD$Pe‰9t1[^_]Ív9[^_]ÍT$L$t"<w%{ :u9 w UWVS$$tJ$SjjD$HPMMtD$t&T$<D$= щL$$S 1tT$f$ffwhjwJF$S 9|$j1\$<\$Hv&0D$4D$0D$1D$:D$;D$ D$$D$($Sjj\$$SL$$ET$1ۍ69\$JHL$L$ Qh09VSPxPL$(ARL$,AЃF\$CxP$Rh Q@@,P |$$u jUPL$,) k&Ph0 L$,QL$,L$,QUP+&Cv&9\$[^_]Í&&tUWVS$D$PD$4$ 󥋼$Ph jD$pP?= t 1[^_]tjD$IP\$$SD$<SE8SPD$xE E EkT$|D$} ‰U$E$EEEE6t:9p:}It:ƀ:t:ƀ:t:ƀ:t:ƀ:t:ǀ:t:1fx~ƂB@9|ƀ\$u@j[^_]Í6|$t|$9xwB?[^_]Í&Kt:9p:}Vt:ƀ:t:ƀ:t:ƀ:t:ƀ: t:D$% €: t:\$FtA 4t&t+@6h8 P $p8 R $=|$\$\$6\$|$9BK=>9t:9p:}Dt:ƀ:t:ƀ:t:ƀ:t:ƀ:t:D$ :t:1z tS|$whhRJ\$(P|$,WPVa t FB 9|D$ 9D$ K19-,D$16 A 9}2xQUB$PvR8P] D$Fʍv&|$t5x8 fEux8  t&16@ 9}3xJ8v\tR$RCQCЃFŐt&|$t)x8 fEu5%x8 &E&D$ &D$tf t==Ht t@HS[^_]Ít&&|$t \6 1fx~ 6uƂB@9||:ƀjPËT$D$B8 PRz_ÍD$PPbÐT$D$B8 PRJ_ÐVST$ t$\$tz8 tK!5&t#!|{$~=o=|h u[^Ív[^Ív t u[^Í6VSL$ t$\$ D/F=+v&65 !6W&=u< w #]$<uBt=+D&u$t&uu#Љˆ6&>u[^ÍUWVST$D$\$l$(t$,1 tF ta=5t&=jf^fW&T$ BE9}׋L$ 9B~f6t  Kt:9p:}Vt:ƀ:t:ƀ:t:ƀ:t:ƀ:t:ǀ:t:v&E68 P $8 S $j^et&&ufL$$fDv&VнTu \t&ɈLt fDf[^_] UWVSl$t$(D$>FD$FD$L$,A <uD$PD$PUMt&&<uD$PD$PU< 1Ҁ|$utxRTm@8P\Ft!%xPB8P]ux@8Pe[/t+~t%|$tL$,AxPWB8PD[ L$4QL$0QPFPFPFPUxP u+L$0QL$0QL$,QL$,QFPFPUD$,L$4QL$0QPFPD$&PD$+PUxP軼 u-L$0QL$0QL$,QL$,QD$&PD$+PUN D$,D$[^_]Ít&&T$D$B9 PRVÍD$PPZÐT$D$B9 PRVÍD$|$ tÍ6 Ív&1Í&Ív&Ív& Ív&1|$ t@ÐD$@H09 D$t PÐSxD$jPB,P. T$ D$%wt/v&6&|:ƀ|:PP^ hJh|:BPRP4w @|@tuZ@x@ttJjP 8PChPkChP &D$D$[ T$D$B9 PRTÍD$PPWÐT$D$B9 PRZTÐUWVS$$j/W蘬ÃuvC0Ѝhjj$R苭 |$$RhWq UWS. uh9 W蜭tFh9 W膭tFh9 WptFh9 WZtFh9 WDeF \&[^_]ĤÐPUWVS$djhA jU耼E, F E A 4D$TD$XmD$\uD$`PD$dD$h$t$PD$4IA 8D$8D$<D$@D$DPD$HD$L$0t$4D$TA <D$D$ D$$D$(PD$,D$0$Lt$󥍼$htA 󥍼$A 󥍼$A 󥍼$ B 󥍼$@B 󥍼$lB 󥍼$$TD$hB U膜hhUfhhU hhU3jhB UhiP1EhhB P3$j$EhP8j2EhP"UhJ L$ jhjjL$0RL$4Ѓ$jhB UhP41ElhB Pf3j$ElP{8 j2ElP"UlJ L$jhjjL$(RL$,jUjh臯PFEp,hB PLUpJ L$jjpj2j L$(RL$,j2EpP!$jUjh$PFEthB P%LUtJ L$(jjPj2hL$8RL$<Ѓ,j2EtP(!1$3PUh謮P;XLxQ D3PD3PD3PD3 PPЃ |3u"D3PDxP3Y&&jAPӔ‹L$jjD3PD3PRL$0PDxPD$8$G /hB UhB ExPlhB UhB E|Pl hC UhB PlhC UhB Prl h&C UhB PXlh5C UhB PAl hDC $tQhB P lhVC $QhB Pl hfC $|QhB PkhxC $QhB Pk hC $lQhB PkhC tPhB Pk hC $|QhC UkkhC UhC $QSk [^_]PÍvD$ǀÐS\$T$} PhC D$ P t&PRhC D$PD$PCpPI[ÃWVS|$t$VhC \$S芩SGtPHVWa[^_Í&WVS|$t$1ۡ|ZxP?j(@tt$PP&&&&أ9| Wk=|5jhyÃu%tPP t&t u =}[^_Ðt&D$jPS\$=|xPGj0}+  /@ttRP|HS=|jxu[Í6&=|)xPj|:B:jAx Í&=|;xPljU|:~ H: :jwÍt&&S\$=|%xPjǃ[Ít&&S\$}BУtSlǃ9|'xPj~=|j+wu[Í=~#@ttY=ÍvD Ív&@S\$H=@SeD tthD P肥t&D )ȅthD hD f=t0u S"fD$<L$<D$@`fD$4L$4D$8 fD$,L$,D$0fD$$L$$D$(pfD$L$D$ fD$L$D$fD$ L$ D$jTߤD C &D C7D C$ED C0SD CfD$L$D$>jR|kW @ ~W T$L$PHT$L$ PHjjjPhcW hVW j~Pp%D [ÍvDÍv&D$T$@,W @ W RPc D$L$8ttAjPR@ ЃÍv&D$@Ð&VS\$ t$CDY SVSH[^Í6&D$PQÍ6T$D$BY PRJÍD$PPe ÐT$D$BY PRÐ UWVSl$ \$(L$4T$F<K C SC  щNKC SC  щNKC SC  щN 9N}F j S^SXsF%S~ ~N<F@ FD~~5UD$PV|$0W|$0W|$0W&ǃ~&FD$[^_]Í&T$D$B\Z PRÍD$PP5ÐT$D$B\Z PRÍT$D$BHZ t RwÍvD$|$ tÍ6 Ív&1Í&Ív&Ív& Ív&1|$ t@ÐD$@HZ D$t P wÐUWVS|$(D$@D$D$t$V?ff %E@ E@ t$^8F9 V:F;  N4F5 V6F7  щ)ȉEt EM<tM<tM<ED}~:t$,VD$PUt$4Vt$4Vt$4Vƃu6&ED$[^_]Í&T$D$Bt^ PR* ÍD$PPEÐT$D$Bt^ PR ÍT$D$BH^ t RlÍvD$|$ tÍ6 Ív&1Í&Ív&Ív& Ív&1|$ t@ÐD$@H^ D$t P0lÐUWVS$$ D$($D$ l$G$7$Pjjt$8t$$D$$P{gMtD$([^_]Í&jD$4P_S8fG.SL$<D$= T$>D$?  щL$4fT$WD$Xff fT$ f|$$VhjD$$PfU4uQUD$(TT$t$V$Peƒ %L$,t$- T$.D$/  щL$$$t$Vj@f$fD$$ff T$t$t$D$P$t$ D$ P$t$$D$$P$t$(D$(P$ t$,D$,P$ t$0D$0PwLt$4D$4P$$t$Vj j$D$ t$ V$D$$t$$V$ D$(t$(V$ D$,t$,V$ D$0t$0VGpD$4t$4V$ $!$$Vj(jD$$P eU4u(UT$(T$D$P$VFdƒ s1f|$v$Pj(jt$`t$ D$ Pdt$,(+L$Tt$U T$VD$W  ͋t$V\$(\$D$P$Vcƒ fL$f|$gL$,D$- T$.D$/  щO\$0D$1 T$2D$3  Ӊ_L$4D$5 T$6D$7  ˉ_ T$:uG<u G< 6G<D$:tO<D$;T$Su*fCFf9C:t 6&St SKpKp {^t0C_D$|$T$({^9u K vucKpCXD$tMS]C[D$zJCYЅ}D$D$$?C[C\9tK\KpK9tDS0‰T$(yD$(t&~ D$(C9T$(C09tS0KpKtIS(‰T$(yD$(6&~ D$(CT$(C(9tS(KpC 9uC {itCiKp{etESfCdBJCbЅ}T$(C`9tfS`Kp CdCe$?CdS<XT$|$?{i|$(S=$@_t&`_______`_______D$(‰пL$(wD$(D$(vD$(@D$(J6&d$(:6&S=vHD$(t&H)D$(T$(~D$(6&}D$(T$(Ci9tSiKpjC)PS Stui{gtcuu D$_D>`FG $uBfL$t8|$t,t$L$AHAD$AHAŻ t&$f|$t&D$$$$Ë$A16$Ë|$D8`D;`C$9|ۋL$A $A ƋA$AD$A$AŋA1$At&$_fL$th~cD$4tY|$L$T9`T=`f|$t L$D ^D _"|$D=^ЉD=_$A$D$ D$ PhQ$G,P$@ 9t$ }/[QFdPL$Q$G,PEà L$QN؃[^_]xÍT$D$B a PRÍD$PPÐT$D$B a PRjÍD$|$ tÍ6 Ív&1Í&Ív&Ív& Ív&1|$ t@ÐD$@H4a D$t PKÐUWVSt$|$~ Fptl~p}{t:9p:}Ot:ƀ:t::t:ƀ:t:F :F@t::t:ƀ:t:fǀ:t:FpuF0)PK^0Fเ)щ…}Ã~v&}1ۊF8ÐUVSuM UEjfPRQV耖F,| F ^pS蹉Pdž\e Vhb PS萘Vh,h,V蚚e[^] UWVS]}MEjfPURQSܕC,| C spVP&ǃ\e Sst WV%@PP<} t U RVVSJh,h,Sʙ؍e[^_]Í&&UVS]hb Sh=Pohb Sjl<Psjhb Sh<P-(jhb Sh<P-hb Sh<Pjhb Shb hj<P)0jhb Shb hA<Pjhb Shb h<Pڽ(jhb Shb h;P豽hb Shc h;P$hc Shc h;Pvhc Sh)c h;PR fjPfjPefjPSfjPA fjP,J jj2RЋJ jj2RЃ J jj2RЋ h?c Sh0c Prhdc ShRc PXhzc Sh0c P>hc Shc P$hc Shc P hc Shc Phc Shc Phc Shc Phc Shc PfjspV0 PVe[^]Ðt&UVS]u C,| C tA jPR@ ЃtA jPR@ ЃtA jPR@ ЃtA jPR@ ЃtA jPR@ ЃtA jPR@ ЃtA jPR@ ЃtA jPR@ ЃtA jPR@ ЃtA jPR@ ЃtA jPR@ ЃtA jPR@ Ѓǃe jPjCpP)VSBe[^]Í6&UWVS}u EP8E\e 0ۋP0tHPc t!thc P4&c )ȅttE]fjPPFpPS躉ESP-Ee jS]SWG\e Ee jSe[^_]Í6&UE@p@]UVSu] Fp@ttSP3t&&)‰ЅtS^pS<SVpe[^]Í&UEp]ÍvUVSuE P^pSS襐fjS詌 PSwVe[^]Ð&UWVS}fjh|T4fjP3fjP3Pd1PX1 jjGpP訍ƒ ERPE1҅tӍu6tXStKjSV2E@PPl, Ee jVEP.Ã뫍&u萅tHjSVE@PP, Ee jVEPÃ븍t&EjPu-k4jjjhc hd fjh|2fjPa2fjPO2fjAFQB)@PADQ@)@PjjQfjAFQB)@PADQ@)@PjjQmGp@PW 3e[^_]Í&&UWVS] UEfjPRMQSh3Phoh d fP$h-d VU}WE\e V艌u)]VSwSWMEe jStF jPR@ ЃWMQMA\e Ee jWEe[^_]Í&UWVS] UEfjPRMQSh2Phh d fP$h2d VU}WE\e V艋u)]VSwSWMEe jStF jPR@ ЃWMQMA\e Ee jWEe[^_]Í&UVS]E PP-PPxufjP#PCpPV E@PSUEe jVSe[^]ÐUWVS]u VP4-PP}fjVP-PCpPW胂 E@PSSUEe jWe[^_]Í&U$WVS}wpVEP}0ۃfjU RP,PV5tVtt;hc P:Gp@PWTWT 4 jjjhc hd EPGpPΊjEPP~e[^_]ÍU,WVS} uVcE\e EpPEP }UPxX 9|SUP~PVVK9}E@P]pS>~S tURhvEPSjEP}EEe jPe[^_]Í6&UVSuPc tthc P6,6&c )ȅtN]fjPNPFpPS0E@PV SEe jS>Ve[^]ÍUS]Pc t!thc P+&c )ȅuhb PPPCpP虃S]]ÍUEP蔇]U,WVSuvDuuV@u)FuuNFVB)щBU苎A j j Qҋ JDR@)ыX jҋuTRj QPҋuJ@BDMEHDP@)AX U RU)ʉRPҋ J@BDMEA URj Qҋ J@BDMEA UR]]SRQҋ J@BDMEA U})׃ǵ}WSRj QҋJ@BDMEp uU])BRMU)։BRS QuPҋuJ@BDMEA U Rj Qҋ JDR@)ыX jҋuTRU RQPҋuJ@BDMEA U Rj Qҋ J@BDMEHDP@)ыX UR U)RPҋ HDP@)AX URu)ΉVPҍe[^_] UdWVS] uVEd E}WE\e SEP9h:d jVP h:d E̋@P%‰t!0ЍH1AMQRS" EĉEu6=e EԋPERV8h:d VPVEPE\e Ee jV Eċ@UPjR EȄe jEPh:d j($]ԃt׊EI61ɍAPRSS 7t&&fjEP+CEP wj}WEPGqjEPy Es CBPE@DEEP@E)SDK@))Љ‰PSuփfjEPBEfjAFQB)@PADQ@)@PjjQEEЄe jPEE؄e jP{Ed W Ee W[jWe[^_]ÍUEU 8t tjR薷]Í6UE@]ÍvUVS]u Ce[^]Ðt&UEP]UEM 8ttA jPR@ Љ]Í6&UE@]ÍvUVS]u Clg SVSe[^]Ðt&UEP]UEU 8t tjRf]Í6UE@]ÍvUVS]u Cg SVSNe[^]Ðt&UEP]UEM 8ttA jPR@ Љ]Í6&UE@]ÍvUVS]u Cg SVSe[^]Ðt&UEP]UUE Blh PRY]Ðt&UEPPs] UUE Blh PR]ÐUVSU] hVCPR@CPVhh 1[^]Ív&U,;Phh 1]Í&UWVSM lhЫ h  j/} P t@&&M ,;Džx}t69lPM t&8-t!xGxM PEP!h E@tthh PWv&h )lju#F9lM 0ۺh E@tthh Pt&&h )ljt0h E@tthh P h )ȅutF9l} 0ۺh E@tthh Pht&&h )ȅt0h E@tthh P- h )ljutF9lvM f0ۺh E@tthh P t&&h )ljt0h E@tthh P  h )ȅutF9l}  i E@t!th i PJ & i )ȅu#F9l} ,;|i E@t!thi P &i )ȅu#F9l,} i E@t!thi P &i )ȅu#F9l}  i E@t!th i P* & i )ȅu5m&E@(i t!tjh(i P t&&(i )ljE9Pw j1҃E@PtQ]苽tWS)SW7E8n jSŭ0i E@tth0i P7 v&0i )ȅuN8i E@t!th8i P &8i )ljut S#E8n jtQ  v>i E@t!th>i Pz &>i )lju5&Di E@t!thDi P* &Di )ȅu5pv&Li E@t!thLi P &Li )lju5 v&M xGxEE8n jPF x}== uVrEn PhTi V E@P]SdjSLjViEP+~$/ujSGލ6PS3͐ei E@t!thei P&ei )ȅuhii EP֐jEPEE8n jP裪P= u)P P,;Phi j> P8;=tjP0;D4;jhi Rn,CkYZjh<,;PtP=t8]SfjSߘPSӔfjSjS$u =E@EE@Et&P]SOSEPO&hEPOt&P]SLOSEPO&hEPrO}h]SWTMlhSQTujpSVShEPWlWVSPuV_DVVV|SfjSjS jVhi j`[^_]Í6U8tJPtС8jP@8ڍ 8tAjPR@Ѓ=to(j6XPX jvCtPP  tPPtPPtPPPC]Í&USjhj Pà EPEPEPEPEPjjjjS4;PP0}u3} u-}u'}u!EtPPlEPc jjj4;PPEjEPjj jS4;PP84jPH]]Í6&U]Í6UVSu=8u>j pÃSCXl 8hhj fPT 8VjPce[^]Ív&U,;]Ít&U]Ít&U0;]Ít&U4;]Ít&U]ÍvUT9}UT,}SE}gME9uu9ptS*֐&};jSE}t MQRu u싾pE{u$tCjPR@ЋM싉du95TuaTE}JEdt2ZEt;}TE9P| 1҅tRTE뱐e[^_]Ít&U tAjPR@Љ]Í&&U(WVS=u\jÃfjfjfjj5S(C8k hhj fPh5EE}UdtxNjlUWÃt^0ҋsM1tC0ut" ¡jSRP3C[W Ed&HQPA ЃE2E]졔PSߍMMWfÃtmWwE؃W˻uVPySK t tr MQPFXRF\Ѓ E jWȹE}tPQEe[^_]Í6&US]SS C0]]Í6&ULWVSDžLtSJQR ҃t5ERMy,WR]E@ WP`URPd҈ƒUR%=Pt8uU,|'URA7t Q}"uW15'=t!PQw ƒ=,t&U |W ƒP Q@PD҈ƒU$t&0@PU@X4}u)}u#1҅}BttQ WPt&&U@Åt 9t&t#&&QDG4/ƒfRPW Q4t2Q4Q W҃ PQt&WPmt&Qtƒzdt Rdzdu9WB4JEE] tA SRPXQP\҃ }6&E E] tA SRPXQP\҃ }l} }u UE]=tG SQPXRP\҃ }`&g4EH45} *9UQWDƒW jBPR ҃4;9UQjW0R"Rƒu؋]4RW0R"RVS"R@4u8u4N{fCfffffS+Vff+ffWRR P8P~=T| >![^_]ÐUS]EP},EEE{,uEvfjSt/EPH,EEEPEP,= {,t]]Ít&&US]fjS{,u =t 1]]ÍU]Í6U0]Í&U]ÍvUVSu=(u>j ÃS}C8m (h5hj fP (VjP tPe[^]Ðt&UU(tGRPڹt9 (yu"tAjPR@Ѓ(tP=(]ÍUWVSM} =,u+1ۡ(@1҅tQaA5t9u_00ҋ t% | &!u  &~uutF0PP4e[^_]ÍvU,u0]Í&&P 9E]UVSu=,u>j PÃS譱C8m ,hhj fP4 ,VPŴ0ۡ,HQPA Ѓu ujjjjF0P"PR<tejj"P!jjjjjh< jF0P"PQ0<tjj"Pj"Pe[^]Ív&UU,RPV,HQPA Ѓ4 ,tAjPR@Ѓ,<tS=<tJj"P= t jjt&$jj"P "P]Ðt&UVS15v [<0tEXvKȅ}C0ȃsC@뭍&1e[^]Ðt&UWVS}P,1t00ۋQ G 9| u G9A}tPyF͐WVPòe[^_]Í6&UWVSU =<+:}=<+zU} ME@B}}}}}}}}Qqt:X +]P+UyK@B]uX pR軹ȍ6&e[^_]ÍUVS[PJQR ҃AUjR>U?B~UE?B}}!6MU@BUIM|t@0M<9| u <9U}t URUM< <RKEMP 9| u P9U}E}tYX +]]P+UUy ME@B]]]]]$;](;/t&&E7t&$;(;$;t&1e[^]Ðt&U(WVStPJQR ҃u1EBHRP ҉EE6M܃}UjRU?B~6UE?B}}!6M9U@BUIM|}tD0M<9| u <9U}t UREUM< <R菶Ã0MS 9| u S9U}Rvus}{?B~Fu}s {S{{~E؋EEUS] tA SRPXQP\҃ }S4? Et&E؍e[^_]ÍvUSj!hhj fP7j!jPj à SfCj hhj fP]]Í&&U t7AjPR@ЃtP.]Ð&UWVS=u EJw} u 1 6&Et&Ѕ}E jEhhj }ƒfRM}EMAQUjRGU?B~UE?B}}!6E9U@BUHE|]}_uw?B~C]uMY q} yQ,Ee[^_] UWVS]5Kȅ}CȃsfVtY9tPj萍&tuEjEPjEPVREȋF0PnƋMw.9DH@tL:t&16&Bwr|&P w%\&-&1҃=tȍv9t׃<uut E}~ Et&1}ĉ}Ef]fuEE,t\P膫ÃE܋tJ PSAXRA\Ѓ =,=<jj"P# }v}}}~E1EEf]fuֈEE}W]̃tJ SPAXRA\Ѓ }t%}t S3E܀}tP3Bv}t S3u܋tJ V}WAXRA\ЈÃ }tV3؍e[^_]Í&UVS] U֋ Aw9CuB=t&&u+z t%9CuB9C uB9C$tFt&1e[^]Ðt&UWVS}U JZe[^]Ðt&UEPԍ]UEU 8tR]Ð&UE@]ÍvUVS]u Ck SVSe[^]Ðt&UEP]UVSEu 8t)t%^t{t SY+SHV?e[^]Í&&UE@]ÍvUVS]u Ck SVSne[^]Ðt&UEPt]UEU 8t tjR]Í6UE@]ÍvUVS]u Cl SVSe[^]Ðt&UEP]UEU 8tRT]Ð&UE@]ÍvUVS]u CXl SVS莖e[^]Ðt&UEP蔞]UUE Bl PRj]Ðt&UEPPm] UUE Bl PRj]Ðt&UEM 8ttA jPR@ Љ]Í6&UE@]ÍvUVS]u Cl SVSne[^]Ðt&UEP]UEM 8ttA jPR@ Љ]Í6&UE@]ÍvUVS]u C8m SVS.e[^]Ðt&UEP4]UEU 8t tjRq]Í6UE@]ÍvUVS]u Cm SVS~e[^]Ðt&UEP]UEM 8ttA jPR@ Љ]Í6&UE@]ÍvUVS]u Cm SVS>e[^]Ðt&UEPD]UUE B8n PRh]Ðt&UEPPk] UUE B8n PRIh]ÐUDPtP/P]Í6&U4WVSME}EPEPj Q跼ƃt(1ҋE9}E̍6D t~}B9UMT:(UЅ|Rz9Du)MD8$M MD8(@t& MЋD M D MtVEЍe[^_]ÐUM| |Ht]ÍU"]Ít&U"]Ít&UWVS=EnEƋѭEtEPEPV|L 46D(LD$ED(@ELz?R-ËD(P9M=?u EM}tD0$6jLPDPV95"=#]"U""M "L"M "E~EA=?t]ELJ ?B?B?Q??P??P? jOÃfjfjfjMQSfCo @hh`n fP }t0}t*T8D4vhhe[^_]Í6U=EtlE="u"P"P˺@t?@HQPAЃ @tAjPR@@]Ít&UEM UuQPErE&HH ]U,WVS="}=#}}W@u =EuN}G}t.}}D8}t&&}X6=?}%E%E ?~ }6} ?~e} ?~e}E#?U#? ЋU#? Ћ}gt&&%@jjPRxÃt/}gH9CYCM&}}}G}}ffEfEffEfEffE=Dt:EP"P}W t E}gcEE@ "E=ED=Puc}ԍPPhph`n fP5P1ۃ9}  C9]}WPP"P}W脾5P19]~>FM)FU)F })lj9E~E؉]܃ C9]ƒ}u8}O@}}D8}&&}܍PP"P}W訾P}g @HQPA Љ¡@@ 9sGjBhh`n fP?}HC@GjSPR|}e[^_]Ít&&UVSuU 0ۀ=Et8EPEPR"P"PetEPEPEPV?u$F@"#D8e[^]Í&&UWVS]u}} wwv hmn ^E  Љ ЉC=1u =Eu C vS e[^_]U=XuXH?]Ðt&UT@t-T\\?HЉ]Í6&hn 薝1]UxTuhn u]ÐHTT?H]Ðt&UH]Ít&UWVS"=E=?@HQPA PCE]@PS1]6URCÉ]tGURNǃUR蠅U9StuċUUF@WP8}맍vtjVUR"P"P }t URʻEjP蔃e[^_]Ív&UEU 8tR蔼]Ð&UE@]ÍvUVS]u Co SVSxe[^]Ðt&UEP$}]UUE Bpo PR\]Ðt&UEPP3_] UUE Bpo PR[]ÐU0jjjhhhhhu hhhhYhhhh@ hhhh$jjhh jhjhhjjh hhjhhjhh jhhhjjhh jhjhwhjjhd hhjhKhjhh 5 jhhh(]Ð&US]M UE}uPRQS PRQS؋]]Í&&US]E PS؋]]ÍUVS]u =0uFC؍e[^]Í6UVS]u =0uFC؍e[^]Í6U WVS]E@UE9}vUE9v E9}sM9s)ȉt*)ȍB҉U1uËE&EE8uE N}}t66&}9u|+E)E@EɉMЙE)ȉE@EɉMЙ,v9~,)uvEɉMЙx&)ȉE@EɉMЙe[^_]ÍUU1 w]Ð&US1ۃ=tm8uIj 5P‹j}hp 8fP@XC<u]]Í&US1ۃ=t1t jPC<uЋ]]Í6&US]蔙t@j aPhhp fPX@@ t&p؋]]Í&&US]E P…up؋]]Ít&UWVS]} 0ɋW fzuLuF fxu?BRfEfUF P@fUfE0fEf9Eu fEf9Ettt#h!p 虍ppj APhhp fP8WjP‹PuVjP‹P @@ }}G @fA t&fufq }} G @fA6&fufq؍e[^_]ÍUUE Љ]Ít&&UVS]u tH ut jPtS輬e[^]Ít&&UVS]u JutjP؍e[^]ÍUE@]ÐUVSuE PÃupJutjPQe[^]Ít&UE@]ÐUE@ ]ÐUME P@ffAȉ]US]xuS@]] US]EPEPEPEPEPEPEPեP该PEUffS؋]]ÍvUUE PRjjjj蘥PjpP被]ÍUWVSE0~CEVuXfEfEfEfEfEfEFPFPEPEPF PFPMQ5b&Bv fEfEfEfEfEfE^辤jjPWMQ莣FjjPWMQu‰V(jjEPEPRFPMQ蓨 $0@P`p&Di6&Y6&"I6&96&)6&46&FPhYp ҈ PMQ.Fe[^_]Í6&Ujh!jhjh jh jhjhjhjh| jhxjhtjhp] UhpShtIhx?h|5h+h!hh hhh]Ð&UUE Bp PRG]Ðt&UEPPK] UUE Bp PRG]ÐUS]M UE}tPRQSC, C  Chcl؋]]ÍUEU @, @  RP袱]Í&&UWVSE} fjfjjhp P_ƍ]VS6U1tt%9tfjPRSӍ&tFjPR@ЃEjP蝀e[^_]ÍvUS]ChS PЋCh]]ÍvUVS]u S PЉshe[^]Ít&UEH jPЉ] UEH jPЉ] UWVSMU fz B===fjfjjhp Q2^ƍ]VS3~ߍ6E1ۅttMC|t7tFjPR@ЃSYjW!c WZ멐t&tFjPR@ЃEjP~t&&Q &B e[^_]Í6UUE @R]Í6&UWVSuFluF RЃFl~fEfEtEURWP苌 EE苢NjN M]GFWB)@VFNB)BÉ)S]GDW@)@VDN@)BÉ)SMPЃ Ve[^_]Ðt&UEM UHlRQP]Ít&USUM JlZ APPRЋ]]Í&UEM UHlRQP]Ít&USUM JlZ APPRЋ]]Í&UVSUu ]MEJlPQSVR>e[^]Ðt&UVSMU Ilq BZ)@PB)@PSRQЍe[^]Ív&UEU 8t tjRFJ]Í6UE@]ÍvUVS]u Cp SVS.^e[^]Ðt&UEPb]UEM 8ttA jPR@ Љ]Í6&UE@]ÍvUVS]u C(q SVSle[^]Ðt&UEPt]UUE Bq PR9A]Ðt&UEPPSD] UUE Bq PR@]ÐUS]1Jp$t&`p 0@Puu`pq  q q q q r r r $r -r ~6&3r n6&9r ^6&?r N6&Dr >6&Kr .6&Rr 6&Zr 6&`r tPher  Phr ~SJ]]ÐUS] CtP"PC]]Ð&UE@@]US=!j0Ãfjfjfjjh@SJCv hhr fP~jܞÃfjfjfjjSXCw hhr fP~j荞ÃfjfjfjjSXCv hhr fP]~ =ufjj$PC]]Í&U tAjPR@ Ѓ tAjPR@Ѓ tAjPR@Ѓ tAjPR@Љ]Ð&UVSP}O]PSKQhr {ސVRÃt)VCS@Phr {Ӎt&&hr {jVQe[^]Í6UWS]C} Sk$r t0r H t&r @Phr R@f@ n@2H ؍e[_] US]@@u HQujS/&9Bt@fjPR>L@@@]]Í&UE0ҋ@@u @xuЉ] US]E @w[$#t&#####hr .6&hs 6&hs 6&hs S蕪؋]]ÍUS]hs Sn؋]]Ðt&UWVS}$ tP$ S<&1tSuFuht Qz$ PWe[^_]Í6&UEf@@ @ 2` @ ` ]ÍUTWVSEpF@IQ*‰VEP\)Et"M QF PP f^&@P]SAEPSw4Et[^ SBPt׊EщO61G}WRS= N M AEEw jP^ U̅t׊EщO61GPRS= Ejj jPIfFF0ۋ}/u tth/u WQ 6/u )u2}7u tth7u W" v7u )utF 6&FE;1ҀotiuF$ЈFE;1ۀmtcu$VˆVfjEPF]9u tth9u Sg&9u )څt.Mjj jQƒFBйf^EPNшNERрៈNMEw jQI7e[^_] U0WVS=EMQPm+E@jjPRCTǃCuV5Ew M@ Q!P(ƒt0H v&1@PRS5; E@PEu\]MQSESP8Ew +]܍EPMQSo SV8Ew jS6j aǍu]VW5Gw _hhr fPAv E@jWPRSEw jV5uWVy5Ew E@fjPRFƒ MPxE@jjPRRƒMPxj ~ÃVS4Cw CC P3Cw K@MXhhr xfP=u E@EЋM@jPMQRQM@xE@P"PǑƃuN]ԋMQSEԋ@P"P蜑ƃEw jS@4Gu hV@V<‹V+V ‰B9~PRAE@EЋM@jSPMQRA<t hXu sM@pQMGB`EEw jPw3EEw jPb3e[^_]Ð&ULWVSU ]}E1M MM@t RPՅEPS<0ۋEzu ttjhzu P> zu )ȅuEP9DPE~u t tjh~u P v&~u )ȅuEP9DPuPEu t$t jhu P諌 &&u )ȅuEP9DPtt 1vEЀ80uxtEԀ80uxtE؀80u xuM E80u%xuE80uxuE80u xuMQZ tt&0ۋE/u t"th/u P&&/u )ȅu2E7u tth7u P v7u )ȅuu E &@E;MQtmtcu ptE?tMQyǃ6Ejj jP 0ۋE躆u tthu Pv&u )ȅu2E캆u tthu P vu )ȅuuNEjj jP膅ËEjj jPrM$9tM(9u M$M(M$9uM(9uv&EMQt|MQsP$]MQ])ȅ| MQG)MQ')EP<$u &&W$u fEu)MQ}m9tEv&E}tM ؃fjEPËMQd 9u  &EMQC)ȅ|MQ-)Ét&MQ)؋ME;MQtotit vru  Ehu EP讚u  t&E}te[^_]Ðt&UWVS} ]EEEBEcEEEBEchEPEEEEEPS( 1ۃ9]EPEPEPEPEPEPEPPW‹E$9:EEfEt fD@uhE9E}` 6&؀}t6E9 uBE9E}:UEEЉEẺE#&&UEEЉEẺEC9]9EPh+Ew E=U9$EfD@u E9EEP\ }t}uEKEKEEE؋PEt PR~EPEP tPEPEPEPEPEPWPEPEPEPEPEPEPhu EP8E@EEM]Ut0H1@PRS%0 VD]SMQ<+MAw Ew jS@+EEw jP++Et[^_]Ít&&UWVS}EuPhu SVSU RW[^_]Í&&U]Í6UE8u@@&P@@H]ÐUE8u@@&PP>@@Љ]ÍUE8u@H&PAHALQ>)Q@)y1]Í&&UVS]SSZe[^] UWS]U E} t0H &1PR;uC@ SP9~e[_]Ð&U0WVSu }}#}t0}Ht&1E>uFx&&VNjÅu$E $E^uFtXT >u+Ft$XSESREv&EEEPEPEPEPURMQWR~}fUfUډ)MUUMM}u }~1fEf9E})Et&&)]܀}t-}t'VVA؃9E}E9E}E}t&}t VV)9E}E9]}]UډU؋MMMЋUf:fMfJfEffHfBfEfEfHfBEe[^_]Ðt&UE8u@@&P@<]Í6UEPt@u]Í&&UE8u@@&PZf@>ffu]Í&&UVSE8t0P P]S jSE@pjS @@e[^]ÐUSEu@ Y&uXtCTjPiCTt&8u+Xt$CjPIC@ t&&1uhv EaE]]ÍvUVS]u E0ҋ@t8uuxu j*@8-tE}t0Z&@@1ۅt%8t j-P\t@C #uۃ @ ~0 &e[^]Ðt&UVSu] S( PV"P|9( u$P%( ƍv&e[^]Í&U]Í&UUEPR}P蟁}]ÍUHWVSuh]SEHt VQJsEPSe<tEw jS_ t&fjEPAƋUjj jRu EMt#9u th9u Q}&9u )ʉхu0Mt9u th9u Q`} v9u )ȉtE}t-Ujj jRuɉMىكKȿމؿƃ ~uEEw jP>؍e[^_]Í6U , tAjPR@, ]Ít&UVSu=, h?xj/ÃfjfjfjjSH9C@v , hhr fP^,  jj3hv P;, jjLh&v P;, jj@h+v P;, jjXh4v P;, jjh:v Pl;, jjVPY;tHVuV薍]VS|SV2 Ew jSfjh&v V tE} tEw jVJEw jVqK&fjh:v V迒 tH} t"Ew jV36&Ew jV&fjh4v V_ tH} t"Ew jVV`Ew jVW>v&} uEw jV2t&Ew jVq0e[^]ÍvUEU 8tRT|]Ð&UE@]ÍvUVS]u C@v SVSN8e[^]Ðt&UEP<]USE] 8ttCw jSS{]]Í&&UE@]ÍvUVS]u Cv SVS7e[^]Ðt&UEPT<]UVSu] MUEfjfPfRQSV'Fv e[^]Í6UVS]u CHw SVS.(e[^]Ðt&USE] 8tNtJCtP"PvCC Cw jPCw jSSz]]ÍUE@]ÍvUVS]u Cw SVS6e[^]Ðt&UEP$;]USE] 8tNtJCtP"PuCC Cw jPCw jSSy]]ÍUE@ HQPA Љ]Ít&UVS]u CHw SVS&e[^]Ðt&UEPt)]UVSu] SVfCfFC F C F C F S F $ЈF S $ЈF S $ЈF S $ЈF S $ЈF S $ЈF S @$ЈF e[^]Ít&&UUE Bw PR]Ðt&UEPP] UUE Bw PRi]Ðt&UUE Bw PRI]Ðt&UEPPc] UUE Bw PR ]ÐUVS]jIxƃFPF} FF3jkhx fP Xf@ @@@``````ߋH@@e[^]Í&UWVS}] G} jwƃCPFPCFCF7hhx fPdWe[^_]UVSu8tP]StSV}jSe[^]ÍUS]C} =ufjjvP؋]]Ív&UWVSu]F} V4} t0} H61@PM QRffZ MHMB$ȈBe[^_]Í&UUE B} Љ]Ít&UWVSu} F} Ju$tCC} jPgSfutVUue[^_]ÍvUWVSu} Ju!tCC} jP S ue[^_]ÐUE@@]Í&&UWVSu] @@ttSPBr t&)‰ЅtJVUt!0H&&1@PSURH@e[^_]Í6UE@ ]UEf@ ff]Ðt&UVSu] Sh"x S%t&Ë@ 9tVfX H@e[^]ÍUE@$] US]@$8E tSM B$ȈBH@]]Ð&UE@]UVSu] cvShLx Rv@9tV@XH@e[^]ÍUE@$]ÍUS]U @t  t&t S U ҊA$ЈAH@]]UE@$]ÍUS]U @t  t&t!Sa U A$ЈAH@]] UE@$]ÍUS]U @t  t&t!S U A$ЈAH@]] UE@]UVS]u @9tSPHH@e[^]Í6&UE@]UVS]u @9tS5PH@e[^] UE@$]ÍUS]U @ t  t&t!S U A$ЈAH@]] US]@@tjS)@]]Í&US]U E9tkERPESPuEUHBttPQm6)ȅÍEE} jPEE} jPtEE]]UUE PR`4]Ív&U=ufjjoP]US]=ufjjoPSP]] U h tAjPR@Љ]Í&&US=h j oÃfjfjfjjS9)C | h hhx fPNh  1ۍvj hÃS 3C{  hhx fPH VP%6e[^]ÍUSU uhx vGJt&0RPg9t xut% tAjPR@ ]]ÍvUS] t0P*=t#8u 9Xu@ P=ېt&]]Í6&US] t0P<t#8u 9Xu@ P7=ېt&]]Í6&UVS]u jVV t V.t @C؍e[^]ÐUVSu] uhyhx hx hx F^K4Ve[^]Ít&UVSu] uhhx hx hx E^u hx EFf Ve[^]ÐUS]E @C;tSa؋]]Ð&UVS]u ;t StSee[^]UVS]u ;t SzFC;tS؍e[^]Í&UUE fMfMEjEPR]Ð&U VS]E UfufuUMjURPQSUMK؍e[^]Í&UEtt+t&&@T]Í@]ÍhCy D= u h(@(@]Í&UVSu= u>j dÃS.C{  hhx fPtD VP2e[^]ÍUSU uhz VCJt&0RPG5t xut% tAjPR@ ]]ÍvUS] t0P 9t#8u 9Xu@ Pg9ېt&]]Í6&US] t0P8t#8u 9Xu@ P9ېt&]]Í6&UVS]u jVV t Vt Vt @C؍e[^]Í&&UVSu] uhhx hx hx A^K4 Ve[^]Ít&UVSu] uhhx hx hx xA^u h6z ]AFf@Vle[^]ÐUS]E @C;tSA؋]]Ð&UVS]u ;t StSaae[^]UVS]u ;t SZFC;tS؍e[^]Í&UEPd@]Ít&&UEPDf@ ff]ÐUEP$@ $]Ít&&UEP@ ]ÍUMЅu$]Ð&uAtTP[]Í&9uAt h}z ?0]UMЅu $]Ð&uAtTP[]Í&9uAt hz F?0]UEP@ $]Ð&UEP@ ]ÍUEP@ ]ÍUEP@ $]Ð&USMӉЃt- tEt&t+96& $)&AT&APd60]]Í&UEtt+t&&@T]Í@]Íhz >= u h0@0@]Í&U= tjh0@= t jh(@p]ÍU]Í6&UEU 8t tjRV]Í6UE@]ÍvUVS]u C{ SVS)e[^]Ðt&UEP$1]UEU 8t tjR]Í6UE@]ÍvUVS]u C{ SVS(e[^]Ðt&UEP0]UEU 8tR]]Ð&UE@]ÍvUVS]u C | SVSe[^]Ðt&UEP]UU EPR i]ÍUVS]u Ch| S0C| S/C| SxVS'e[^]Ðt&UU EPR]ÍUS] EPS؋]]ÍUU EttPRpY]Ít&)Љ]Ív&UEU x t tRZ]ÍvUEU x tR{g]Í&Љ]Ív&UVS]u C| S.C| SxVS&e[^]Ðt&UEU 8tR$[]Ð&UE@]ÍvUVS]u C| SVS^&e[^]Ðt&UEPd.]UUE Bh} PR]Ðt&UEPP] UUE Bh} PRi]Ðt&UVSu] SV.F} fCfFC F C F C F S F $ЈF S $ЈF S $ЈF S $ЈF S $ЈF S $ЈF S @$ЈF e[^]Ít&UU2} tKPRS] UEP$2]Ív&UUE B} PRY]Ðt&UEPPs] UUE B} PR]ÐUE]Í  ]Í6  ]Í6]Í&UWVSu}= uZjXÃfjfjfjhSC   jVh} fP8  M MNMQ~ WVXFM QMNQVDF jVPR\ FjjPREFe[^_]ÍUVS]u C t PVCt PVKtAjPR@ЃKtAjPR@ЃtSyWe[^]Ð&UVSE} u2HtAPR@ Fv&181Åt"KtAPR@ ƃ[uމe[^]Ít&&UVSE} u2HtAPR@ Fv&181Åt"KtAPR@ ƃ[uމe[^]Ít&&UMU EfPRjQ]Í6UMU EfPRjQ]Í6UMU EfPRjQF]Í6UMU EfPRjQ&]Í6UWVSu ]u1~jVSfjfjfjPW%G~ hh} fP5 vKtjVPW 6e[^_]Ít&UWVSu }]= tWttKt&&Ct&&CtjjWP>u}tCt 릍1e[^_]Ít&UWVS}u= } t } t6^t&&^tCPR@ Ѓt&1}t(9|$CPR@ )NjvuW&|L9}H} t} t*v&MQ &MQ &1)@Dv1e[^_]Ít&UEU 8tRS]Ð&UE@]ÍvUVS]u C~ SVSe[^]Ðt&UEPT]UU EPR_]ÍUVS]u CH~ S&C~ S&C~ SxVS~e[^]Ðt&UU EPR]ÍUS] EPS؋]]ÍUU EttPR0P]Ít&)Љ]Ív&UEU x t tRoQ]ÍvUEU x tR;^]Í&Љ]Ív&UVS]u C~ S%C~ SxVS~e[^]Ðt&UEU 8tRQ]Ð&UE@]ÍvUVS]u C~ SVSe[^]Ðt&UEP$%]UEU 8t tjR]Í6UE@]ÍvUVS]u C  SVSn e[^]Ðt&UEP]UEM 8ttA jPR@ Љ]Í6&UE@]ÍvUVS]u Ch SVS.e[^]Ðt&UEP4$]UUE B PRy]Ðt&UEPP] UUE B PR9]ÐUWVSu] t0H v&1@PEPc_ExE9tDB tC퍶&;v tѡ9DP uMCG⍶96tDB tC퐍t&E tBEѡ9Pu_uE}t!0U9Pu}_utE}Z E GM&E+x]@PS^SVF E, jSe[^_]Í&&UVS]u t1fjVS" |jS}u fjٍt&e[^]Í&UWVSEu@ ]PS'ߍvE1҅tӅtsCttPVK)u:M QS<tM QVh j- jW'6t&&W)끐t&EjP'Vh) '-1e[^_]Ít&&UWVS]} uC = u StV>YC C{C CCCC#CtSP؍e[^_]ÍUWVS}G WGGt PKt Wot W;RGt WPGtHGV1"ÃtjWjS}V"6tFjPR@ЃG]PS]MMvMQÃtbMQSMQ$u6E1ۅtt%V?'tfjWCP ͐jMQ%댋_tCjPR@ЃGEjPc_tCjPR@ЃGG ts]PS-$ދE1҅tӅt*V&CC jPR@ Ѓ uŋ_ tCjPR@ЃEjP$M tWJe[^_]ÍUH ]Ít&USE] PPt)ttPS H)؅ &0]]Í&UVSEu PÃ6tDttPVG&&)u [Ít&&0e[^]Ðt&UVS]u Ct PItVUC Ce[^]UVSu] u hP ')~tSVWu ;t 0&F SP8R@<аe[^]Ðt&U]Í6&U0]Í&UWVS}Wuvt&&jV#at&ERP!E1҅tӅt2uV9$C M QWPR@Ѓ uƍ6&EjP"0e[^_]Í6&UMU $Ј]Ðt&UEU PRMi]Í6&UE Pj]UEPTk]UWVS}} U zRƃ}tURV<t0ۄt`t*FtPWdE &؅&t&}tjjFPUR>Љt VUR}t%F tUfRURWURPUR&U Rz;t&e[^_]ÍUWVS}]j rGƃVFd h*h~ fP\' tEtAfjfjW]S[;UfRSjU RUB PV(jS4<6UfRjWU RUB PVTe[^_]Ð&UVSuE Vt[tW82uB]@PSE@VjjPRƃE, jS&jjPRUv1e[^]Ðt&UWVS}u Ft#9tt h Z%VFPG tCfjVP |jFPV B(PB,ЃPhڀ %vj EÃSCd _ hch~ fP% ~tG VjP G VPe[^_]ÍUVS]u C t:VPgt,FK yutAjPR@C e[^]Ít&&UWVSu} ~u;j DÃS,Cd ^hh~ fP$ FWjP h Vh$ WSe[^_]Í6&UVS]u CtGVPt9KyutAjPR@ЃCh Sh$ Ve[^]Í&&UVSMU u]Ѓtdu/BPQ B(PB,ЃPSVh1 * RA P(R@,ЃPSVh^ "0e[^]Ðt&USM U]EHw (RA P(R@,ЃPSSh `"0]]Í&UWVSE} u1ۃt tvā 6&Ɂ j)VKCu,VG P(R@,ЃPSMQhЁ *VG P(R@,ЃPSMQh !e[^_]ÍvU]Í6&U]Í6&UWVS} ] }G}<(uvC<(u;)}ttS}WD? &+E}t0UH &1Et0ډH619u~GF}ttPS}W;&+Eu}|7,u  6&0e[^_]Ít&UUE PRRh j ]ÍU(WVSu ]}t}ttu} tSR}t}W J(QR,҃v P tVR}t}W J(QR,҃ Ph 046&}}VW}}SWUrUZ}W E؃u4E, j}WE, j}W&h h" V}W <t5E, j}WE, j}Wl&&FfjV}W u8h" V}WjE, j}W5E, j}W0ЉU؋}}}}h" S}W}W<t/E, j}WE, j}W&CE}W_u(E, j}WE, j}Wrt&}t }t%6fjSPfjSPE܃ }uGh" S}W}WtUE, jR"UE, jR 0}W S}WVJPMQRT҃<t;S}O Q(RQ,҃PV}O Q(RQ,҃Ph* 8}uUj=ÃfjfjfjjSC _h h~ ƒfRW }WjjVRÃuKj ~=ÃSCԄ hh~ ƒfRh WjSVR5}܋RWORQ}Wj!=Pphh~ ƒfR VS u;j <ÃS@Cd _hh~ ƒfR }W}WRW O URRQ@RQDҍUE, jRUE, jRe[^_]Ít&&ULWVS]}t }uthv Y0 6{u 0vMMQtE uVaE E]ȋMMą]WS5SVE, jSIExXh WMQS<t#E, jVE, jMGMQu/E, jVE, jMt t't&fjWPCfjWPSẼ }u7h WMQSEE, jPeEE, jPm} v]܋MȋAPS]MQ'ƃMQ1EMQVÃ}u&fjMQ@P! V͍0ҋM9 u1t+C tPWU:7Uv&؅utBfjMQ@P jV F1҅tY&VjfjM QP u'M QMȋA P(R@,ЃPh  EE, jPE, jMQ05&Vz Ã}u&fjMQ@P V ̍0ҋM9 u1t+C tPWU 5Uv&؅utBfjMQ@P jVbF1҅tY&V: ;t&}uMȋAM QP*MȋQ E@PBHPBLЃEE, jPEE, jPe[^_]Ð&UEh PO]Ít&&UUBPRP]ÍUVSuF P R@$ЉÃuHV B0PB4ЋV B PB$ЉÃu!FPV B(PB,ЃPh x؍e[^]Í&US=!fEMEpj y3 UMSKfEMEPj J3 UMPHjPjSh- hH j5P!]]Ít&U WVSM uVjjQR[ UPR 6U1ۅtUR,;}uw{}{}Uf~%Uȋu2|}|}uu6}}Mf~U 6&URuփe&UjREe[^_]Ít&&U,WVSM fufu}WYjjQRCC :UPR 6U1ۅt UR3u}~{tpsuԋsu؋Uԉf~'Uȋ}:tutu}} t&u؉uURMf~ Ut&UR}[suԋsu؋Uԉf~'Uȋ}:tutu}} t&u؉uMf~U 6&UR}׃&UjR e[^_]Ít&&U(WVSM uVajjQRK BUPR- 6U1ۅtUR ;}uw{tx{}؋{}܋U؉f~/Uȋu2|}|}uu}܉}uVMf~ Ut&UR}Ssu؋su܋U؉f~'Uȋ}:tutu}} t&u܉uMf~U 6&UR}׃&UjR% e[^_]Ít&&U(WVSM uVajjQR+K BUPR 6U1ۅtUR ;}uw{tx{}؋{}܋U؉f~/Uȋu2|}|}uu}܉}uVMf~ Ut&UR}Ssu؋su܋U؉f~'Uȋ}:tutu}} t&u܉uMf~U 6&UR}׃&UjR e[^_]Ít&&U(WVSM uVajjQRK BUPR 6U1ۅtURl ;}uw{tx{}؋{}܋U؉f~/Uȋu2|}|}uu}܉}uVMf~ Ut&UR}Ssu؋su܋U؉f~'Uȋ}:tutu}} t&u܉uMf~U 6&UR}׃&UjRe[^_]Ít&&UWVS}u ]SE Wj S}> V. tPV B(PB,ЃPE@Ph3  F tK]PSCE1҅tt!1҅tRGP_SѐEjP5EE, jPe[^_]ÍUEPj]Í&&U WVSuFPV B(PB,ЃPh<  hJ  1F]PS]uuvuVwÃVPhX v GVSuVuu6E1ۅttEuV|C PPRH Q(PA,ЃPh\  빍&juVM&EjPu hm  hu  1uFtHP2t9APQ B(PB,ЃPh x GuF Pxču hm R e[^_]Ð&UEM 8ttAjPR@Љ]Í6&UE@]ÍvUVS]u C SVSe[^]Ðt&UEP]UEU 8t tR*]Ít&UE@]ÍvUVS]u CԄ SVSe[^]Ðt&UEP]UEU 8t tjR6]Í6UE@]ÍvUVS]u C SVSe[^]Ðt&UEP]UEM 8ttA jPR@ Љ]Í6&UE@]ÍvUVS]u Cd SVSe[^]Ðt&UEP]UE@]ÍvUMU EPRjQ*]ÍUS]M UEPRQS]]USM] UEPQRS]]UE]ÍUE@ ] UE@]ÍvUE@ ]ÍvUE$] UE$] UE$] UE@]ÍvU!]Ít&UUE B, PR]Ðt&UEPP] UUE B, PR]ÐUE@@@ @@@@@@@@@$@@ @,@@(@4@@0]Ðt&UWVS}E G@_G @GwG@GWUG@GW UG$@G W(UG,@G(W0UG4@G0PW+mURS!mURVmURUR m URURlU RURlU$RURle[^_]Ít&UEE tP6&]Ív&UWVSu} ENW Щ u 9t&09u9uÄ"N W Щ u 9609u G9FuÄNW Щ u909u G9FuÄNW Щ u909u G9FuÄN$W$ Щ u909u G 9F uÄtdN,W, Щ u 9t&09u G(9F(uÄt4N4W4 Щ u 9t&09u G09F0uÄtEEe[^_]Ít&&UVSuh$ÃCPCt6fjjQE9}PQE 9}PjjVjjSW(MF P A $ЈA MF P A $ЈA F @t7P]S茄}W} WSSEP4E蜇 jS]SVE jSe[^_]ÍvUWVSu} 0ҋt9u„t/]WSSVF H jS_v&VB0PB4ЋF ` ?u2F HtAjPR@ ЋF @rt&&0ۋO V fAf9Bu fAf9Btth 96F HtAjPR@ ЃWjPA‹F Pe[^_] UWVS}W辁u]U RS UfRSV请jVWv$jS{jVsWURɂE jWEe[^_]Í&UEP]U=!u0]Í&&!]ÍvU!]ÍvU$WVS}U EPRuVSVÃtGP0R@4ЋMQVWÃjV}؍e[^_]ÐUXWVSuV莰Et MQM QVf ]VSyEt S}WUBjWCMQW]SOS)E WDMQM QVL }t&MAP0R@4ЋMQSMQEjSjW]BEt jVEe[^_]Í&&U(WVS}U E?tIPRuV]WS SVjSe$V jV2&&0e[^_]Ít&U(WVS} h UPuV0]WS6 SVjS$VjVƿEe[^_]Í6&U$WVSu} jP]SӾSt jSW jSre[^_]ÍUUE B$ PR詯]Ðt&UEPPò] UUE B$ PRi]Ðt&UUE Bt PRI]Ðt&UEPPc] UUE Bt PR ]Ðt&UUE B PRi]ÐU0]Í&UWVSE ]<P Eu͙9svCF9rEe[^_]Í6&UM| |Ht]ÍUWVS]}5"ujC hhԇ fP|C ` K !ҊA $ЈA C H C ` C ` S !!B C @C @0҃ } tu}u C f@*}|u9uuC fufpt&C f@u} || C fxu/C f@f@C f@uTh H&fu fpC fxC @PWu V"DPR)e[^_]Ðt&UWVSu}jVMF jjjVV} }F ` F fM fHF fMfHF f@}t12 E yE EPWdÉ߃MQM QW"DPRYtS e[^_]ÍUVS]u jSLC F tC VS&F C FC؍e[^]ÍvUWVS]u C C z8u[C HtAjPR@ ЃC @t P@DЃt=ttP"PC P VS|Le[^_]Í6UWVS]u C th d/ F S t^x:uRC HtAjPR@ ЃC @t P@DЃtP"PC Pa F V BPBPBPSC ` C ` K F P A $ЈA K F P A $ЈA ;t8fjjjjV BPBPVjjSL(F @tPSF vF C FC؍e[^_]Ít&U"]Ít&US]U ʋC @ t 6u3K ҊA $ЈA C ` C @tP@DЋC @]]Í&U!]ÍvUE!]UWVS]u ;txSB0PB4ЃC fxfPǃ~| 6&VEPW"P" S BPBPjjWP"Pe[^_]Í&UWVSM] Cw)uA X&A Xt&MhEMtm t&6&I MI"EUULȋu}|7 rI MI"EUULȋu}|72A HA X&1h? ؍e[^_]Ð&UdWVS]S;E 8u hg vSURcM I AQq="ƅu uƅDžFw"  t E @ X tBuP26&YtS[DӋE @ @uCtSjRQjjE P"R hhԇ fP1ۃ tCyuSjVPR]S蒗My W ORÃP}ÃRfÃI, ~xuADžv9QEP肓J(rDž69T$&0@Ppл&F&V&F Ãv&FV &&V V ӃVF F ŠF F ŠF Ã:1ۋPh E~!؉Njt&!؋ى烽~!؋!؋~!؉Ët&&!؋ى  ًtt&Z,9z]st[ؙ1ۋq(9}%]stSЙ t&&1ۉ19~rUSQ+VWP z(C9-&ShLj u]SSMQY6t7j]ShjSl jjS_ &hjPhjP]stSЙt&1ۉ19~;6SUR&Ǎ >9sƄ(G9wC9Dž1ۍv+t+C~19~:SEP讎Ǎ>9s(G9wC9Ƌ "5"vR41ۃ9} [C9|VWQ"PRMQ聐11ۃ6@+t.[L TD  RVFEP蛍 C뽐t&t WE X S tS H At&&RJDу]SEPjS,E[^_]ÍU< WVS] ux uh 0t&MQz0WR4HSEP螊 MI}E@ "0ۃt} G uuE@ Ht'QjzQR H҃E@ @MI QtRRDHҋ} Gt:]juVSSV7jS߉DžƅuQ6uFExu=j]SSjSI‰9vӅu9sӁtƅt+]juVSYSV蒉jS:DžMtR"Py UZtRЙt&1ۉUzt 9Q}ux19vVEP薊Ëڃ9s! CA9rF9jEP919~U6QSW ljF96Z 1҅tDžQWP" |WR‹EtQ} ffGMI ffyE@ f@MQ Z tZ Ex$uVh]fj}WSSVkjS VEPET t& "DžyMIDžI @QƒWƒQƒ IDž}6M9A"PWeƒPWPƒHڋQW2ƒHH~&~ v~ӥH ӽHH#! H! H@ jj QWjjjPQ="W&(h2hԇ fPy(W@,~yu@Dž|v9||PMQ|G(DxDžt9tt) &&xڃxȉH~&ډ~ ډ~ӥH&ډӽHH#! Ћ! ‹$@&0`&D DAjv&DG6&DAA"6DAAHADft&DGGG2v&DGGGHGDtPt&|t&G u@u7]juVS蠒SVـjS聀DžE@qdhjP1 69~ Vbhhԇ ƒfRFt Vj;t&u'V=| h PVhS  MfEu t& }U Um$Ym MfEu  6 }U Um$Ym MfEu  6 }U Um$Ym MfEu  6 }U Um$Ym MfEu  6 }U Um$Ym MfEu  }U Um$YmS։{Èt y# t& } )ӉDžv9 t1 69I9v(9s F9wt&99v*9s"fJf9w99v89s0RъQVQV9w'699v(9s 9w6Shl _TS&|9|v9v@9s8 )Ӊs9v@9s8 )Ӊs9v@9s8 )Ӊs9v@9s8 )Ӊs9v@9s8 )Ӊs9v@9s8 )Ӊs 9v@9s8 )Ӊs@9v@9s8 )ӉsF9#69v79s/ s9v79s/ s9v79s/ s9v79s/ s9v79s/ s9v79s/ s 9v79s/ s@9v79s/ sF9k6] K Q t"Q S Z&&SSD҃fjSS STV`] S J P ʈP S] S JtPB tVV>t&D]SQS#JSVDžLT jSwTS]SjSfjjS S4VǾ@b jj S SSjj"R"R"R<S SjjjjSW4R"RT(SSDҋ] S Rt<$]SRSISVDž,T jSZV]SjVEE[^_]Ðt&UXWVS}  m] m]EPEPh8h8WEPEPh8uW(EPEPuuWEPEPuh8WEE(fEu &EfEu v&EfEu v&EEfEu &EfEu v&EfEu v&$$h?jjh?]SEuSWV}Ee[^_]ÍvUUE B܉ PRt]Ðt&UEPPx] UUE B܉ PRt]Ðt&UUE B, PRt]Ðt&UEPPw] UUE B, PRYt]Ðt&UUE BT PR]Ðt&UE@ @ $]Ít&&UE@ @ $]Ít&&UE@ @ ]UE@ @ $]Ít&&UE@ @]UMU BPPQ]Ít&US]M UBPPQS#]]ÍUE8]UE@ @] US]E @ PHffCfHfCfHfC؋]]Í&UME @ P@ffAȉ] UE@ @] UE@ @]ÐUU"tfjRP]1]Ív&UWVS}u ="u`já" fjfjfjj=PS}CԊ "jbhĊ fPV" F PH@…}"jPVWRe[^_]ÐU"]Ít&UE""t PR1]Í&U "tAjPR@"]Ít&UEM 8ttAjPR@ Љ]Í6&UE@ HQPA Љ]Ít&UVS]u CԊ SVS}e[^]Ðt&UEP贀]UWVS}u ]W[oGԋ FPQPVRFPRPQjWR(tjWqFPPjWoe[^_]ÍvUWVS}u ]WnGԋ SVWe[^_]Í&US]E M@fUfEEjQPS$q]]Í&USE] MP@ffJHu]]Í6&UWVS]u}M 9PwRZx1ҋ@Ћȉe[^_]Ít&&UVS]u M9PwRx1ҋ@ЋffS؍e[^]ÍUS]EUfEfUM 9PwRw1ҋPE]]Í&&UWVSu ]PURo<t 0:&1&CPPWGUR\Nue[^_]Ít&UWVSu }]PMQn<t 0It&SWjMQ]t"SCPRWGMQNuްe[^_]Í6UWVS} u]>M@9~9PQn<t$0(CPPWGMQlNue[^_]Ít&UWVS] u}M@9~PQm<t 0N~BWMQSMQ{]t"SCPRWGMQNuްe[^_]Í&&UVS]u M9PwRnu1ҋ@ЋffS؍e[^]ÍUWVSE Pu+uffFfFfF@8}X]U69M~;9}9U}UP9}9U}UA6fufufufuUf}f]ERPuVGEe[^_]Ív&U0WVS]u ߁~ع46&}#߉y_$)B߉}À~,}#߉yw$)B߉}ߋEPURMQE PUR$M A1EEUURPiEԋ M A؉ع1Å~1E&&uNEM}tkEP9|1ۍ<E9xw Wr1MyEU9BwPrEM EACu덐]SMQkE jSqie[^_]Í&U(WVS}~}I}t}ujURi }} ]])] }} ]U)U]UDEURE]SE$ MM1}E Em$Ym, U] Q,$fE4 6fEu 6P$F3&6P$ĸ)P $FIU4] GQ,$V$fEz$ V$AP$~lvfEu2FuV $ )‰P $‹ut& )ÉP $IU4] G9}}UR]SWh '}PURgEEE EEE19}][]䐋U4] U)ʉUR] ]SE)HPURM]SU )VEP]S MMMQVE)HPSUR]SEPURn G9}u}t ]S*}t URe[^_]ÍUdWVS}u Rt4h< j]SdEԋ y 1ۍ6'URURSV(E\E\؃C؍t&UVRFUMUȉM̃UM)ʍBUM)ʍJ9~ ʉ~MRQOdEԋ UrEE]E?ES4$]Ex Um]Em]EEm]EEm]E}ċMĵ Mm$ZmfE}ċMĵ Mm$ZmfV| KEEEfEu}U Um$YmfEEEfEu&&}U Um$YmfNESvE}ċMĵ Mm$ZmfE}ċMĵ Mm$ZmfV]SWcGԋ E jS&ce[^_]Ív&UWVSU xWUR<19s"u6SU RVVURC9rEe[^_]Ív&UWVSu} EPVw7UPW3c<u<1ۍ69]v3EPVEPEPSWC e[^_]Ít&UUE B PRb]Ðt&UEPP3e] UUE B PRa]Ðt&UUE B PRa]Ðt&UEPPd] UUE B PRya]ÐUVS]u u h$  ușf3Kș}fK؍e[^]ÍUS]E fD@u h$ 芠E P<$}U Um$XmfCE P<$}U Um$XmfC؋]] UWVSu} ]u h$ șEOșfEff^e[^_]ÍvUVS]u EfD@u h$ 覟EP<$}U Um$XmFEP<$}M Mm$XmffC؍e[^]Í&UMU BPPQx8Po8]Ít&&UVSu] EPV3fEfEPV3fEfCe[^]ÐUUE Bt PR)_]Ðt&UEPPCb] UUE Bt PR^]ÐUS]E C =tuh 輞&v&C="u "؋]]Ít&&UVS]u C C t hތ tSUe[^]Ít&Uh Ý0]Í&UhQ 裝1]Í&U1]Í&U1]Í&UVS&"1ۍv8@t PVC ~e[^]Ít&UWVS}="u'"hM18@@ ~ 8@8@t9~t/jjM QMQǾ8@MQPMQδ~e[^_]Í&UWVS}t}uX"h<h h h W}#h=h h h 10M9tAt}_MIM="l} #MAjPR@+EE }$#}GjPR@+EE$0ҋMA tt„ Eu0ۃ}u}uV B9E u B9E$tu },F @P}$WM QjP覢lfjjW} WMQ}WVjjlQZ8F xth},ubfj}$WM Q]S1*fjjW} WMQ}WF @PjjS 8SlQۦEl jSilt&&E&th Aj}$WM QjP覡hjh fPۚfjjW} WMQ}WMQjjVHDf} f}fMfM}}uMQEPjjBPBЃ}nfFjPR@ P&}~h [/}(~h @t&&}?uh# 6&Eu7MA fxM},tDž|Dt&@|5t&EDž|}u 1&E@6M}u*}G fxËWB0PB4Ѓ9&00Ҁ}u"}u1E@6tUt}uhC +|}|PA @ P}PlQƋE+EPE +EPVlW }(tM(M"PVW }1jVlWMQ} WM$Q} WMQ}WVMP}PlQY4jVlfSֳƃ}(tM(M"PVlWZ }EDžx 9}}u 1 &]܍CH{L|CHPESƒx| RE}t~xEkt&&tEEL=| h&E=| hEEME} +}t}ċ]+]]ƅp|tHA @ tE6&|PVlWҭStQVWӵƅp]SxWVlQѰ}$WM Q}WM QV}PlQDžx1EEE,}tDžxESxWVlQ`pjjVlWjVW}tZjVlQ#}WM Q}$WM Q}WMQV}PMPlW肬4jVW =6&MQ} WM$Q} WMQ}WVMP}PlQ7(}(tjVlW_`[^_]Ív&UUE Bl PR]Ðt&UUE B̎ PRIT]Ðt&UEPPcW] UUE B̎ PR T]Ðt&U"]ÍvU"]Ít&U"]ÍvU"]Ít&U"]Ít&U"]Ít&U#]Ít&U"]Ít&U"]Ít&UE]Ít&UE@$]Í&&UE@$]Í&&UE@]UE]ÍUE@ ]ÐUE}t]Í&&]Ív&U==#uhjh@=#]Ð&UWVS}@==#t%t PW迩Ku=#e[^_]Ív&UWVS} @==#udv;ujjWMQ葳CMK{uSE9uC!Nuh$ MjjWMQGe[^_]Ðt&UVSu] @==#t@69u,@jSV'jSV.jSVt&&JuǍe[^]Í&&US=>#u7>#h@Hh@jSV1H@s~]]Ðt&U=>#tHtPͯ>#]Ív&UWVSM=>#u McMȿ1Ӎ4HE;9K]FH;9K]FH;t9Ktz]FH;tj9Kte{uOKCC QPUR艦}F6% QsMQ jMPPZjMPPB 6}MY;uhʐ 豀MQ0zC fxu-Mf hEP}hE PC f@MfADfAOMtAAHjQPAЋMfADfAMfy<ufAFfADfA>fA<}t^ETPEP*jjMQP]S肣SE PE jS躣EHPEPtMt.ȃPQmjMQjMQMQMQMQ)e[^_]Í&US]fuh ~0 t S8C@t S&<t3tHǃRPsǃt6tHǃvRP3ǃtSJjSjARAfC`Cǃ]]Ít&UEttP]]ÐUVS]E u h% }`PsVt,uSJEPSj(ARAЃ<u*t!u SuSqe[^]Ð&US]E uhV D}w6vh 1}d Ct,ESJEPSj)ARAЃ<u*t!u S=uS]]Ít&US]E uh | vhڑ |Ct,ESJEPSj*ARAЃ<umtdt St SCE$PPP0CE$PPP]]ÐU WVS]} uuh {v&f}fuECt/KMSJEPSj+ARAЃ<u0t't SOVWPPe[^_]Í&UP$R<$]E$SDCP$R<$]E$SDC Mff2t QMfU fUfUfUMQ]S cUBRS[cMMURUMIdAURMQjPddRP҃<u MuE jSvE jSMP]QS_UMQRU܋MQMQSRU܉UԋUU؃UE)zUM)ʍr؉ىƅtuƅ Myt]E$yp]E$yl]E$yh]E$yd]E$y`]E$]SvMVWSQ{,MQMQM䉍QQ jVW}W|8hWaHVWV~$URVNMQMQQQV"V茱 QWSfSjEQPEjSVE9uHtQjJQR ҃jV$jWEjQit&&jVjWDMy?QRWRRRRMQMQPIM p])u܃ jV8E Q|QSpQMxQ]uRRjV׀$RRjV辀Q|QSptQxQu$RRjVwQ|QStQxQt$RRjV:Q|QSpQxQt$RRjVU$RS\VURMQ9IMQ0jjjU܋RRMRRRE(jjU܋RRMRRRBSMQH jSUEఔ jV$E ERR$$URKsۅۅRR$$URsمإ(fEuȓ  t&ȓ }U Um܃$XmE مإfEuȓ t&ȓ }U Um܃$XmEjMRRN RMRRIMURU RMRR+JI QRQRURU RMRRRLjjMRRI,jMRRM tQMQMQURURjURjURR&uURU RURU RMQƅl]Su S/tƅll]MQSGShMQMQSjNjuVlt;hQWSURU RMRRReKVt;hQWSU)RU RMRRRKjSMyu>MQMQURU RMRRRi>< MQMQURU RMRRR>X[^_]ÍU@WVSU4#}$}!} t} ҍJ61ɉM$}$ufft VE}Ufu fufMfMfufNfufMfIfM} W]SIYU$BRSYuuUUuvu}GPtRHuVWjyPIу<u UuE jS 6&UE jR}~}URURURU Ru}WVzDžXƅTTPƅL},tu,>tLƅH},t},?uH}$~PƅTU DhjTVkD} uuu  ff|ɉ -&j UR%f҉ Dž@Dž<Dž$Dž(Dž,Dž0Dž4Dž8Dž DžLu$D &uJtA&U$J9}:DD&t! vfщӀ &DfӉfUTf|n&V}WffUT5  uB16&+ $o u1uN0tA~49$}0ˋ$ 9$9$|مu}_,t щ)ȋ ~ˀ@t& <4 0(4 9U49P)t&&XR9PƅTD}$9GLU,Г t tjhГ RW= v&Г )؅u U9SuU9SuU9S uu$9sthՓ ;" {,S@[X P\t& =~̀8Pfz 9,},@NU}$~<}$W=Dh hN DƒfR? ƅvDƅ09M ,9E )B9U~)B9U~ÄtM}}WU EM]ff|f~fffOff؉fJfufj|WtR8nlV}WSѰSVDžp jSfjV]SOSRjS Džx jVeYd|S}WV) dh|jS`SOSVjSt)tU(RuVSSVjSh]S}WXjSPUjV}Wj=P$h hN ƒfRh=P$h hN ƒfRVWf]SW蹞URW,$uv VWi6WjSxS$DSW6 jSDW\ &DžDžPu}䉽6f fn΁ uCf &&fft}鋕뛍t&&Etu+ C6&Et*MM  )щ 6DžtH]jWRBVWSjjRc=$jV(C=( Džff RDVW jUR RVBVWݷPffUTf|Ct&&ɉQV:ffMTQRPVW"<$jRjuv V\SHASW Pf fuTf|A6&ɉQWj ffMTQV}PU RuVM;$j\W AffD7Gt'RDVWRV(6WDRuV} WURf@t$ʁ*6tcj W&=R VjWRcjjjjV}+WU RuV<vtGRkjVZtjOQW ҃}|Lt!uV}W$1 URu(Vpfj}W聭tDtDRH6TtPV8jUR jURO[^_]Í6UWVS}]M$E(U,t49t/RURPQU RuVuVSWu VnjjSWURuUMNEe[^_]ÍUEM 8ttAjPR@ Љ]Í6&UE@]ÍvUVS]u C SVS^e[^]Ðt&UEP]UUE BP PRi*]Ðt&UUE B PR]Ðt&UEPP] UUE B PR]Ðt&UUE B PRi]Ðt&UEPP] UUE B PR)]ÐUS]U MfBfCfCAfC؋]]Í&US]U MfBfCfffHfCfAfCfHfC؋]]Í6US]M fAff9}fEf&&fUfQfUfAfQf9}fEfQ&fUfQfUUMK؋]]UWVSME U]u98y:A)@AQ)@e[^_]Í&UWVSEU M]u8:x9x;@e[^_]Ív&UEM ff+fPfQf+PfPfQfP] UEM ff+PffQf+PfPfPQfP]Í&&UEM ff+PffQf+PfPfPQfP]Í&&UEM ff+fPfQf+PfPfQfP] UWVSUu fJf+ fZf+Zffff>f)f:ffffvf)frf fJfZfZe[^_]Í&&UEU MffHfPfH]ÐUUE MffJfEfHfBfEfHfB]ÍvUVSEU M]uffHfXfpe[^]Ít&UUffE fHfB]Í6&UUfBfE fHfB]Ð&UEM fffJfPfQfPfJfP]Í6&USM] }t=E9~A9}SA9~ A9}EE;t&&E9|A9SA9| A9EE]]Í6&USMU }t00ff9~PfAf9B}FfAf9B~h| fP[ ‹P e[^]Ít&UWVS}U uuRVUMUMj+à SR]C jNh| ƒfR  }ur5B EfU] ʉUU)fBfUM)A ʉUR RRUR* }th p t&&uVE UE)BRUM)BRPQV=ajMQRQR B EЕ jVljjURSWj7e[^_]Í&&UWVS}}tE 1Ejh*ÃCPC j}h| fPJ VM BPBP‹P jjM QMQW6e[^_] UUE Љ]Ít&&UWVSu} Ju2@ P3!tCC jP0S/)tV)e[^_]ÍUWVSu} Ju/@ P tCC jPS(e[^_]ÍvUWVSfjUURUU :u]S>E WSPV3E E jS:EVPE jVE@ PPU @ P'URURbjURwEe[^_]Ív&UE@x]Ív&UE@ P"]ÍUMU BPP@ P ]Ív&US]M AQ)@PQ )@PRQ@ P]]Ít&UWVS]u }%9t.S3WV@ P"fuf}jjEPjS3e[^_]Ít&&UWVS} ufj]SrE@ P@ P@ PVWjjS3(SURjSEe[^_]ÍUWVS} ufj]SE@ P@ P@ P2VWjjS3(SURqjSEe[^_]ÍUWVS} ufj]SE@ P@ P@ P2#VWjjS2(SURjSEe[^_]ÍUWVS} ufj]S"E@ P@ P@ P#VWjj S>2(SURjSEe[^_]ÍUEU 9t@ PA P%]Í6&]Ív&UUE BЕ PR]Ðt&UEPP] UUE BЕ PRi]Ðt&UUE B PRI]Ðt&UUE PR`]ÍUEPPC] UUE B PR]ÐUWVS]u }UEPRSCC   } hH ;s${(C,fjSC(PC$P+؍e[^_]Í&&UVS]u C  fjS"VSXe[^] UUE z$|8B,tB,fPRB(PB$P6+]Í6UVSu] SV>;2t06F$PV6Re[^]Ít&&UUE B PR]Ðt&UEPP] UUE B PRi]ÐUWVS}u O4tS G4u O4,W4$ÈHDˆ@$<",,L8Dž0Dt$ G4=%}8 ",T %(,\%WP RWHRg@uDu <tFƅHO4<t/%R%RjjW8RƅDƅ@ut&HtW%, Ȼ P %P,R$$P}R jjdjjW8RoW8OW:)@P_<O8)CSRQ4P"RYƃ$&OHL|OH 6Q[Mȃ=| hf[MЋ"]EPh "Rj"SjG>W:)@P_<O8)CSRQ4P"Rƃ0VW,H<D@O4~Dž$ u0@t8SV"Po 6EDž$G6tE$$t(UR$SV"P vO4DtN4RV"SEEEPhV"R^&&H<@ODž$t Y$v$t#$@5u$Q$ڍtQ0RV"R&&8SV"P Dž| W@U_B]GDO@)@EWFOB)BUE$Dž\Dž`DžX$PG($t(TPRXS|PjjjjV"R$_FOB)CSGDO@)@PV"R!$SV"P~LjLSV"P],G7tEURjV"RjO4 fjW <tO4V&Ht@ t Qv&W\RgoQW0R"Ri O40t0R"S[^_]Í&&UEjPb]ÍUWVSu95u 0ҋFt9pdu„t F@dF4$F4FdF tT]PS,ߍvE1ۅtt%WtSq؍EjP95%u V95%u VS F4tVr1 t V3F5uF0P"PjV2'e[^_]ÍU WVSu] ~0F5t1jV&Ft VPmt ^VS\F4MNDF@)MFFVB)fMfAfMf@fEEEEV,EFHPEPY_ MN4VF t[]PSE1҅tt1t BBPB@PF0PB0P"PWSEjPWV }t"MPF0P"P4t&&E}|E 6PTPF0P"Po V EPEPMAPPPЋV MfQB`PBdЃ}tF RЃt W"Pe[^_]Í&U VSu] UEPEPEPBPP@0PC0P"PEUffVe[^]Ív&U S]M UEPEPEPBPPA0P@0P"P{EUffS؋]]Í&UWVS}] wHVEP$]SVM]L|GH VSPG0P"P G`t%HtQjBPB ЃG`@W EPXP\Ѝe[^_]Ðt&U8WVS}]S G`t@t PS u >uxGHL|GHv&PZRPG0P"P G`MHBQjBPB ЃG`@t&&u VEP 0ۃEfxu ~tgu F P@fUfE΍EjP]SSuuV2 jS fjjUBPBPjju VjjuVWDG`t&HtAjPR@ Ѓ6&W"]SjP‹G`PEPG0P"P G5t7jSW ]S`PdjSe[^_]ÐUVSuE P^\SgtP SJhPF0P"PO N4"Pe[^]Í6&UVS]u C`t@t P S!V‹C`PC`@PC0P"P+e[^]Ív&U$VS]u C`t+Ht-AjPR@ Ѓ&&S!VjgP&‹C`PEC`@EEEPC0P"PW e[^]ÍUVS]u C`t@t P S Vq‹C`PC`@PC0P"P e[^]Ív&USM] Q4 8tNt@ t&&1߉Q4Q4t@th ?2PA0P"PS]]Ít&US]T <t8%t Pjjjjjh< jC0P"P %]]ÐUVSu] <t@%t P=jSePjjjh< jF0P"Pj 5%e[^]ÍvUS] <t*9%u"j"P#"P%]] US]T <t/%t P1jjjjC0P"P%]]Ív&US] <t9%uj"P%]]Ív&U%]Ít&U%]Ít&U VSuEPEP"PEP9EtP#V#9uEEe[^]ÍUEPd#@4tjj@0P"PP]Ít&UUB4DujjjjjB0P"P ]Í6UWVSu]MF4DuK}FDV@)@+] }FFVB)@+MttjQS}W} WF0P"Pc e[^_]ÐUWVSu]EV4D}VDN@)B+] }VFNB)B+Ef} f}f}f}fU ffJfUfUffJfUE EUMUM}t't#tjPS}W} WV0R"R ] tA SVPXQP\҃ }tS0me[^_]ÍU WVS}G4eO`GDW@)@EGFWB)ЍXA9E|A9|A9EA 9~PO`AU9~A9}ЉEQ 9~Q9}‹G RuVRЃ WW tpERP(E1҅ttE1ۅtEPtC4uҋC RЃ븍EjPG5t WG0P"P\G4 ƃw4tW#&tW%e[^_]Ít&&US]C7@u{dt؃{dt @dxduP#C4 C4tFtS#6&t SE&C0P"Pk c4SS0]]Í6&US]C5t>PC0P"P]]Í&UVSu^t8C t1fjVP |C P]ƒC RjP F0P"Pe[^]ÐUVSu^t6C t/fjVPm |C PƒC RP.F0P"Pe[^]ÍvUVS]M EUtpfxfx~ prprfx~fx  prp r fx fx~" @p r$@B(B<B@ %BD%RQSe[^]Í6U,WVSuF5f} f}f}f}V8N:fUfMUUUV8NE EutJ VSAXRA\Ѓ }tVJGe[^]ÐU WVS}GT@ I]PSEE1҅tt1҅t9tE}tS1̍E1҅tuh 76u=ԛ } t)VE1҅tu2V'6&V:E1҅tu V2U1t9t`1tt1tES41}@tt uE}PSjVv&EjP0e[^_]Í6&USM] Q@f+Q8fQ@QBCf+Q:fQBQDCf+QfQFCQ8A<]]Í&USM] Q8f+Q@fQ8Q:Cf+QBfQ:Q<Cf+QDfQ<Q>Cf+QFfQ>CQ@AD]]Í&UEU tH46&`4tH4]Í`4]Ð&UE} tH4]Í6&`4]Ðt&UE} t`4]ÍH4@]Ð&UWVSuN0M95È]EEE}tJ WVAXRA\ЈE MQu#ttPd}tWCw}u} tXEF RЃ}ttP&6} uF6 ttF jPR@ ЃE}tP=CEe[^_]US]EK RPҋUU0f}| f}|„t.K URURRw USRVUMUM0MUJ9uMUJ9uu/C MUTRMUTRRҋ]] UEff@]Ít&&UVS]u {tVSșH$v&`0Ppt&C VP8R@<[t&&C VR5t&C VRt&C VRt&C VRt&0VuC fj&uC fjxR|Ѓ6xC VR0~ uC5tG[68C VR0~ uC5t[6C VRt&C VR t&C VRt&C VRt&C V R$h&C V(R,H&C V0R4(&C V8R<Ѐ~t0e[^]Ðt&U]Í6&U]Í6&U]Í6&UUE J PRЉ]Í&UE @ ]Í6UE @ ]Í6UMfjAFQB)@PADQ@)@PjjQR]Í&&UMfjAFQB)@PADQ@)@PjjQ]Í&&U]Í6&U]Í6&U]Í6&U]Í6&U]Í6&UE @]Í6U0]Í&UEU 8tR]Ð&UE@]ÍvUVS]u Cԙ SVS~e[^]Ðt&UEP]UEU 9Pu@@ RP=]Í6&UEU J0jRQP*]ÍUVS]u 9st'jjVSC ts6&CC e[^]Í&UEM 8ttA jPR@ Љ]Í6&UE@]ÍvUVS]u Cd SVS^e[^]Ðt&UEP]UEM 8ttA jPR@ Љ]Í6&UE@]ÍvUVS]u C SVSe[^]Ðt&UEP$]UEU 8t tjR膄]Í6UE@]ÍvUVS]u C SVSne[^]Ðt&UEP]UEM 8ttA jPR@ Љ]Í6&UE@]ÍvUVS]u C< SVS.e[^]Ðt&UEP4]UUE B PRy{]Ðt&UEPP~] UUE B PR9{]ÐUEP @@@@]ÍvUUE EBEBEB EBE BЉ]ÐUEU UPUPUP UPU P]ÍvUEE EUM@@HH @]Í6&UWVSM] u}S $AV $AfEu؛ ؛ }E Em$ZmAS $A V $AfEu؛ ؛ }E Em$ZmEe[^_] UWVS}M ]SP $AR $AfEu  6 }E Em$ZmSAP $A R $AfEu   }E Em$Zmf7fWe[^_]Ít&&U,WVS}M AfD@u}AfD@uouWOMfUfMfMURM QV] }fUfMfMURM QS{VSMQt&&؃fjWuV]VM QS`SVzEl jSwUVRW MU؉U܉QEl jVjwEe[^_]Í&U WVS]UUuVvED SVTzPURvED El jVv1ۍUU}u䐋E@9}?URWSVcURWEPEPU R]$EPEPSVC빐t&]SURsvUBD El jSwvEe[^_]Ív&UEP @@@@]ÍvUVSuEPE Ph?jjh?]SSVe[^]ÍUVSujjEPjjE P]SSVe[^]ÍUVSujjh?E PEPh?]SSVe[^]ÍU(VSu M ]܃fjuuh"]؃fjuuT"]Ejj$E$u؃$]S4SVe[^]Ít&U4WVS]U MJ BJfÈ@s  fEt$>&& fEu؅tuVJt&tBJJ]Ẽ$BJB J]Ẽ$ ]Ẽ$B]Ẽ$B]Ẽ$J ]Ẽ$uV؍e[^_]Ív&USUM 0fD@uaBAfD@uNBAfD@u;B A fD@u(BAfD@uBAfD@uÈ؋]]Í6&USUM 0fD@u_BAfD@uLBAfD@u9B A fD@u&BAfD@uBAfE@t؋]]Í6&US]E C@C@ @$@@$CC Ƀ$$Cʃ$$S<؋]]ÍvUS]E @C@C C$CC$@@ Ƀ$$@ʃ$$S؋]]ÍvUWVS]E}u PuV؍e[^_]ÍvUUE HQHQH QHQHQQRKPKPKPKPvKPmK]Í6&UVSu] EPVxFEPVnFEPVdFEPVZF EPVMFEPVCFEPEPEPEPEPEPSe[^]Ív&UUE B PR)p]Ðt&UEPPCs] UUE B PRo]Ðt&UUE Bl PRo]Ðt&UEPPr] UUE Bl PRo]ÐUS]SC CP0nCT CCC؋]]Ðt&UVS]u S迾C CVPnCT CC@C=w‰SwCFT jVn؍e[^]Ít&UVS]u C CCT jPnVSRe[^]Í6&UVS]u C%=uh ܭ0C&CVPpC@C=w‰SwCFT jVm؍e[^]Ít&&UVS]u C%=uh L0c&VSٽtCjPCnCtC@ &hS追jSe[^]ÍUUB%=u B]Ív&U]Í6&UUM B%=thڜ n0]Ð&9Jr ]ÍvQh E0] UWVS]} uhh fP C%=th)  CuhM ЫR6& C@9v&9rh~ 裫jS諼t&)ȍpC@VPW3e[^_]Í&UWVS]}} ut h =K%=t h̝  6uh &3K9rV)Ή1s@SЉ΍CVPkth$ êjS˻;t&csSBSRWE PR33K9qsqe[^_] UWVS}u ]h@h fP G%=thQ  Guht X6&u 1G&GPK@)9s&BF< tKuG+PЉ)ȍe[^_]Í&US]C%=th p`&&CuhĞ P@&& AS9BrB&h jS]]Í6USM] Q%=th t&&uh3 Tv&B9Aw&؈EQ jEPBPPBTЃtA@Q9BsB؋]] UMU A%=tha .]Ðt&Au h vttHЉ]Ðt&UE]Ít&UE@@]UE]ÍUS]S÷C CPfCT ؋]]US]E PSgCT ؋]]ÍUUE BT PRg]Ðt&UEPPj] UUE BT PRyg]ÐUE ]ÍUEU 8tRT]Ð&UUE B| tR.]Í6UE@| ]ÍUUE ]ÐUE]ÐUS]M UEC` PRQS؋]]Í&UE8$]Í&U UEPEPEPPE]ÍU UEPEPEPPcE]ÍU UEPEPEPP3E]ÍUE@1B1B]US]jjS?P)É@]]Ð&U UEPEPEPP}uEPt ]Ít&EE']ÐU UEPEPEPPcEPGmtnЉ]ÍvUS] C vhh h h 舤']]Ív&US] Cvhh h5 h HL']]Ív&UWVS] }W[cEx EPEPEPPEPEPSEPBPB ЃPsSEPFSFЃPhQ Wv(WMQcMAx E jWcEe[^_]UWVS}] uURVSS <tURVSh] L0f&URVSEW 9uW,9uWO9EtE}thh h h e[^_]Ð&UEU E` EUUUMH] UUE +] U VSu]SSE` EP RPBRPlREUMNe[^]Ít&USUM ]cw l3v~u ~ u 0D&E~,A w$M'9~uuRtEE]]Í6UWVS}0uduuȍe[^_]ÍvUWVSu }cEl~& MEd1ÍE<M))؉E+EUCU<ɍE EE[SvMM &MQWVSh 蟝0e[^_]ÍvUSME UEл\&1Uȋ]]Ít&UUE +1]ÍUSME EE\&1Uȋ]]UUE +] US]EEPE؋]]Ð&UWVSuu h 薜0 jEPUU}WËC@SU<ҋCSB){<CE{<׋CxU<} MMȿU‰0Ƀ{u{uȍe[^_]Í6U0}w} ;w};w }w]Ív&US]EPE]]ÐUS]EPEEEPS]‹EЋ]]Í&UVSu]SLSV%e[^]ÍUS]U B CC` C؋]]Ðt&UVSuU MZ^F` Ve[^]ÐUVSuE EEPNÃuj>Ãu h& s^C PC@PClPSRB)SRBFe[^]Ív&UWVS] uV+YEx }CPWDSPE@PSPSPSPSPS(PhQ VI(VURYUBx E jWYE jVYEe[^_]ÐUWVS}] EuPSVSSVW8e[^_]ÍUWVSM] S»\&1E}QE PW5u]S] SVWV]SEe[^_]ÍUUE PR]ÍUWVSu] CPFPSV)e[^_] USM] 0ҋC9Au9uˆЋ]]Ít&&USM] 0ҋC9Au9tЋ]]Ít&&USM] 9sv&9u C9A0]]Í&USM] 9sv&9u C9A0]]Í&USM] 9vv&9u C9A0]]Í&USM] 9vv&9u C9A0]]Í&U VSuURW]^]^e[^_]ÍUWVS}] W.QG0 wVQG0 SWTGG CPVTG G S $ЈG CGCGe[^_]Í6UWS]CC Sʢ t0ʢ H &ʢ @Phʢ RNVC $C CCe[_]Í&UVS]u KtAjPR@ЃK tAjPR@ЃCCX jPQCX jS QtSe[^]ÐUWVSuE ]PSwSV-SEX jSP0ҋ@t8ut4Ȣ t0Ȣ HvȢ @PhȢ VUN e[^_]UWVS}u @P&]SbEjSPV̢ E@tth̢ P蝭 ̢ )ȅÍEEX jPOtj/EP@P]S E@PWLEX jSOt&&@PW4e[^_]Ð&UWVS}h]SƾhuV踾hE@PU @Pn|hE@PE@PGVWNG0 EX jVNEX jSNe[^_]Í&&UWVSu] fjjj/SDƒuSVcNF0 7v&xt0H1)HPSVse[^_]Í&UWVSu} ]}t(S<tSV贽 U@PR葽E0ҋEHt9uuOExtщJ &1JE9Pw RV1҃E@Ѐ8/t t ;/tE}tj/EP?S]SSV(MF0 EX jS/Me[^_]ÍvUWVSu} ]}t(S<tSV褼 EWPvE0ҋEHt9uuTExtщJ&1JE9Pw RU1҃E@Ѐ8/t t ;/tE}tj/EP/S]SSVLF0 EX jSLe[^_]ÍvUWVS}u >Ȣ thȢ Vt&Ȣ )SEWPKE0 WWN}t=Vw<t0]VS& SWMEX &W<t j/W+VW0j/VukȢ E@t!thȢ P誨&Ȣ )ȅt.΢ tth΢ Vs ΢ )ut.]@PSP SWMEX jSJW<u$O EEX jPnJ(v&]SWLEX jSDJ0e[^_]Ð&UEfjh΢ P ]Ðt&UWVSuU ^t0H v&1@PRSN 0ҋF@t8ut=Vʢ t0ʢ H6&ʢ @Phʢ R.NN e[^_]UEU 9PtPH ]Í&UEU 9PtPH ]Í&UMU A t uҊA $ A ]Í6US]jjSCHQPA Ћ]]ÍUVS]u jjSK Kt1|-APR@ Ѓ9}CVPt1҅t1e[^]Ðt&UUM EB uuuB]Í&PQB@PR]Í&U WVSE }uuUzuUrP]S获VWSUREEX jSG}u1 vUBe[^_]UUM EB uuuB ]Í&PQB@PR]Í&U WVSE }uuUzuUrP]SζVWSUREEX jSF}u1 vUB e[^_]UVSMU Eh]fPRQSE@PƃEX jSFe[^]Í6&UVSMU E]fPRQS/E@PHƃEX jSF0 EX jS>e[^]Í6&UVSEu fjfjPUUR)jjVUR蛕 jUR؍e[^]ÍULWVS] SEPEP=E0 0ҋEHt9utM]SEP=E@0 EEX jP=EX jS E@PdStEj/jEP EExO1E؉EčEEEЉEEEfjKSj/EP Ã)؍xEuGSE9Pw R>F1҃MAЀ8.u$S9Qw RF1҃E@Ѐ8.uE}tF]Iu'SE9Pw RE1҃E@Ѐ8.WCPEPEPrh̢ EP1E؋@PEPEPEP><E0 EX jEPB<E@PEP߫E@PEPlEPEP;E0 EX jEP;EEEPEP:>EX jEP;EX jEP;EX jEP;N&}Nt]h jS诺 Nu0ҋEHt9utjjEP衻]Ȣ t$Ȣ щJ&&Ȣ BPhȢ S^ 0ҋEHt9ut@U̢ t0̢ ЍH t&̢ APh̢ R,? ]SEPL:E@0 EX jSP:EEX jP;:Ee[^_]Í&&UWUt0H61t :/6}]Í&U$WVSMQj$P)Ehh }fPzuuWMtMQjMQh MQj:6MQMQsgMQM Qcg&&1MtMQot&&MQnÃt,MtM Qnt&&M QnǃEMM܅0tk t6EtSMQ0-t&&}tSMQ t&&؅}Vt&WMQF3]MQS93MQSt$vMQ2W29vE}utEtMQn&MQnÃEtM QKn6&M Qmǃ&}t]MY;6&Mu(MAPR@ Ѓ 1ۋMQSMQe MQSM Qee[^_]Ðt&U\WVSMYj$ZÃSaC C }_hh fP:wj ÃSxaC _ h h fPwG .&SBPBЋMA xWPGЃMM؋E$EԋE$EЋE$E̋E$EȋE$EċE$EE$EEEt{j$BÃS`C C ]h"h }fP#vj ÃSa`C ]h$h }fPu fjfj} @PuV]S#M@PfEu4}@Ph tjS%jV衊0v&00ҋM @t8uu$} xu j=M @8.utMu܍v}WߋEià SMQV&EjjSEP臋u}G t VP,uE}u0ۀ}t V1,u}tV+tm}tVQ,VEptE0ۀ}t VR*t&}t V*t}tV*u }u"My .uA t<.y }t-Vw+t }WVE PMQ}W!v&MQVE P}G PGPdMQt}@Ph٣ r}MQhÃ}Whƃt@MASjPaa }WEiÃMA VjPAa }W%i뺍v}tMAjPR@Ѓ}t}GjPR@ЃM}9OuKM9OuC} MQXBttPSˏ&&)؅u }g MI jEPn"jEP胇e[^_]Í&U='tpJX jhlJ1]Ív&U]Í6&UEU 8t tjR!]Í6UE@]ÍvUVS]u C SVS\e[^]Ðt&UEPd]UU EPR谝]ÍUVS]u CX SdC SdC SxVSN\e[^]Ðt&UU EPR ]ÍUS] EPS؋]]ÍUU EttPR]Ít&)Љ]Ív&UEU x t tR?]ÍvUEU x tR ]Í&Љ]Ív&UVS]u C ScC SxVSN[e[^]Ðt&UEU 8tR贏]Ð&UE@]ÍvUVS]u C SVSZe[^]Ðt&UEPb]UUE BX PR9/]Ðt&UEPPS2] UUE BX PR.]ÐUS]C ='uhtJh'lCCC tJC ؋]]ÍvUVS]u C ='uhtJh'6l3CCC tJC ؍e[^]ÐU WVSu} F ='uhtJh'k]WS-E Sj [PʾQ UURUBPBFFF tJF G jW-e[^_]Í&UVS]u C {t tA jPR@ ЃtShe[^]Í&UVS]u {t tA jPR@ C3e[^]Í6&UEjP]Í&&UUE B=tJtB ] B ]ÍvU(VSu1ۍv= t'J A`RAdЈD+؃< t &CӍvD+Ejj jPāe[^]ÍvUVS]u u h kq{ tZA P`R@dЈ<\uSJ jEPAHRALЊUE$ŠEˆ A P`R@dЈ؍e[^]Ít&UVSu] u h "k`~ tVfO ~ tA jSPHR@L&Q jEPBHPBLЊEECe[^]Ðt&UVSu] u h j\~ t VDL~ tA jSPHR@L2Q jEPBHPBLЊEECECECe[^]Í6&UPVSu1ۍv= t'J A`RAdЈD+< t NCӍvD+EjjP}e[^]Ðt&UVSu] u h i\~ t VtL~ tA jSPHR@L2Q jEPBHPBLЊEECECECe[^]Í6&UVSu] u h it~ t Vd~ tA jSPHR@LJQ jEPBHPBLЊEECECECECECECECe[^]ÐUMU EEPRQ]Í&&UWVS]} u;tYEPSEEPvhh fPht$EPRS/&h g؍e[^_]Ív&UWVS}U ]uh gP  t*Kt36VFWKu&A SRPHR@LЉe[^_]ÍvUVSu] >u h 3gv~ tZ\tӡ9DP@uFE\$ 0E$ 0E$ 0EEJ jEPAPRATt&J PAhRAlЉe[^]U WVSufE fEuh f&~ t:Ph ]Sz } 0]HPS}Ht&~ tQ jEPBPPBT3t&UffEf fEEEz jEPGPRGTЉe[^_]Ít&U WVSuuh e ~ t:E Ph ]Sz } 0]HPS}e6~ tQ jE PBPPBTRt&U E% ЉEU % ЉEU ЉEEEz jEPGPRGTЉe[^_]Ðt&U4WVSuE >uh dt&&~ t:$h ]SJ Mԃ0HPSMfv]܀~ tJ jEMt&&UE% ЉEU% ЉEU ЉE؊E߈E؋J jEPAPRATЉe[^_]Ðt&U4WVSuuh c ~ tJEU PRh ]S,z }ԃ0]̉HPS}t&&~ tQ jE PBPPBT6U E% ЉEU % ЉEU ЉE܊EE܊UE% ЉEU% ЉEU ЉE؊EE؋z jEPGPRGTЉe[^_]Í&UWVSu t0H1XSURSVURce[^_]Í6&UWVSu} ]>u h RbSVitSWVe[^_]Í&&UWVS}U ]uh bP  t*Kt36PFWKuv&A SRPPR@TЉe[^_]ÍvUUE PR]ÍUUE PR]Ít&&UUE PR]Ít&&UUE PR]ÍUUE PR]ÍUUE PR]ÍUUE B ]UE@ ]ÍvUE@]ÍvUEtA P@R@DЉ]Ð0]Ív&UE]Ít&UE]ÍUE@ ] UUE B PR ]Ðt&UEPP#] UUE B PRY ]ÐUS]SoC ( CPC S؋]]Í&UWVSuVoF ( ^SF V~} t0} H1@PU RSb$e[^_]ÍUVS]u C ( SCCȩ jPsVS9oe[^]US]CjSoCCC C$]]Ít&UWS}] G%=uh ^G PR@ЃWt0H1@PSRu#e[_]ÍUM0ҋA@t8uu#jA@P}]Í0]Ív&US]uhh- h7 hE ]jSy}]]Ðt&U VS]u C%=uh] ECxuh| )SzVSn0 CuCuth B]06t&&ES@1t@t@S 6t@CtCt  CthPC@P}C t8jjPtC CRjjCPt =6&EG&1Et%Sʦ Ct^Ǧ W&Ѓu&ț 4v&Ϧ Et&Ct Ҧ  vtԦ ut QV oVC@P`xCu#}tEwVC@P?xC{t[CtCPtxC F6jjCPuCPRxC jjCPru E}thS l16&S:=9uj v&jSlEe[^]ÍUWVS]u }C%=uh] Z0SVSSkhSxk{C$C=`:t=9t=9uC <&PBwjjCPctCP*wC jPCPIte[^_]Ðt&UWVS]u }C%=uh] Z0pt&S VSjhSj{C$CvuC 2&jjPqjjCPqC jPCPqe[^_]Ív&US]C%=uBCt#{$t Poq$t&Pv&{$u CP{S8]]ÐUUB%=u BtPq]Ív&U(VSUB%=uB PB@P]S jSt!SS#&&1jEPSe[^]Ð&UWVSu} V%=th֦ IX0Rt&@tjWFPup u0!jWFPr t0ۄt>vWh W؍e[^_]Í6&UVS]S%=th W0G6&@t+S B0PB4ЉƋS B(PB,9t&CP?ne[^]Í6&UWVS]u }h%h- fPX S%=th8 &CuhX W86&@tWVCPq&&CPWjVre[^_]Í&UWVS]u }ut h VS%=t h t&uhΧ aV&@tWVCPxoƃ 6&CPWjVuƃ9tj=9uj&jSgC@tjjCP*n0&&jjCPo 39C }C e[^_]Ð&UWVSu} }u 1t&h{h- fP7V V%=th Fuh  U_6&ÀtEPWVf7t&FPEPWjDžtщJ t&&1Ѝe[^_]US]S%=thL &&Cuhh pTv6&@t;S jEPBHPBLЃuEHt&&66&SB9BwRq&Bt]]ÍUWVSu] V%=th 6&uh S{v&@t+؈EV jEPBPPBTЃtKDt&VJ9JwPRi&؈Btx>@9F }F ؍e[^_]Ðt&UVSu] V%=thۨ v&Fuh Ru yt&@t[V HPB8PB<Ј؈EV jEPBPPBTЃuV HPB8PB<$6&FPSfÃt؍e[^]Í6UUB%=t ]Í6Bu B]Í6Pr]ÍUE]Ít&UE@@]UE]ÍUS]SaC ( CPC ؋]]UUE Bȩ PR]Ðt&UEPP] UUE Bȩ PR]ÐU]Í6&US]SSCL CC ؋]]Ð&UWVS]u SCL t 0H&1@PVS @PgCC ؍e[^_]UWVSu] VFL CPt0H &1@PRVU @PFF e[^_]UWVS}uW;GL ]fjVU RSSWEt jS1@PGG e[^_]ÍUWVS]SCL U RS=U zt!j@"plj{U r t&CU B C ؍e[^_]Ít&UVSu] FPoFt jVjtVdoe[^]ÍvUWVS]U RSU zu!CP0oCI {u#j@[oChh fPWO{U rU B C ؍e[^_]ÐUWS]U t!0H&&1@PRS5 @PCPvnCe[_]Í&&UWS]E @Pt0H &1@PRS @PgCPnCe[_]Í&&UVSuU E]fjPRS莿SVEt jS @PFPmFe[^]Ít&&UE@u0]Ít&&jPl] US]CP(mC]]Í6US]E 8C tC tCPlC]]ÍvUE@]ÐUVSu] fjjj/Seu @"P9Pw R1҃@PV-|e[^]Í6UWVS}u @P6t_]SvSSlj/S@PSrSW GL Et jS &@PW{e[^_]Ð&UVSuE ]PSfjjj.S|u SVy FL &PSV訁Et jSi e[^]Í&&UWVSuE ]PSgfjjj.Sw|ƒu h Vz0Ext0Ht&1)HP]SVEt jS e[^_]Ðt&UWVS} ]uVx EL t*]WS SV Et jSt 6WV fjjj/]S}uh URyt&&PSURUEt jS Ee[^_]Í6&UVSuU Ejjj]fPRS E@PVEt jS e[^]Í&UE@u0]Ít&&jPh] UE@u0]Ít&&jPh] UE@u0]Ít&&jP@h] UE@P]Ít&&UVSuVt)]VS.SV Et jS@PTe[^]Ít&&US]{t{ uSCt f@f%f= 0]]Í&US]{t{ uSCt f@f%f=@ 0]]Í&U@SE0ۋPEPRj_ufEf%f=u؋]]ÍUWVSu} ]S8EL W<u8hSVwUBPBP@PE] }1@PS,wSVFL Et jSe[^_]Í&UEP$%Pd1҅tЉ]Ít&&US]{t{ uSgCu 6&@ ]]Ðt&UEP$%PA[1҅tЉ]Ít&&US]{t{ uSCu 6&@]]Ðt&UVSu] ~t~ u V~tz1t}ʀ@t@ t ttttttF@!9t&&h D60e[^]Ðt&US]{t{ uSCu1@]]ÍU VSu] E` EE{t{ u SCt @(PEP褩EEFEFe[^]Ð&U VSu] E` EE{t{ u S;Ct @ PEP4EEFEFe[^]Ð&UVS]ރ{u j@qdCFRPRj[ tFPcFe[^]Í6UEU 8t tjR6]Í6UE@]ÍvUVS]u C, SVS/e[^]Ðt&UEP7]UU EPRo]ÍUVS]u Ct S6C S6C SxVS.e[^]Ðt&UU EPR]ÍUS] EPS؋]]ÍUU EttPR@`]Ít&)Љ]Ív&UEU x t tRa]ÍvUEU x tRKn]Í&Љ]Ív&UVS]u C S5C SxVS-e[^]Ðt&UEU 8tRa]Ð&UE@]ÍvUVS]u C SVS.-e[^]Ðt&UEP45]UUE Bt PRy]Ðt&UEPP] UUE Bt PR9]ÐUS]C j sa@@jLh fP\A؋]]ÍvUE@ ] UVSu] F }h 0@1ۃj `@@jih fP@ t,SV‹Pjmh xfP@Xe[^]Í&UUE B Љ]Ít&UVS]u C t)H u@t PaP_tS_e[^]Ð&UWVEU H9Jt 0't&pz9tt &e^_]Ðt&UVS]u 9pu&ujjSp&&@tVP Z‹PVRU‹Phh xfP3?xt pt&0e[^]Ðt&UWVSu]}|PV1<t0v@1Ãu SM P@PZ&u+@M KtqvKuat&&u+@M fKt@6fKu0v&p6&WM QVmS Kue[^_]Í&&UVS]u Ju$@t P<_SPB PB$Ћ؍e[^]UWVS]u }v8JSBPBЉh&h fP{=6&@tP^px؍e[^_]Í&UWVSu} 9LJVBPBЉh=h fP<@CtCPRCh@h fP<KtPCPRQQ t&C61ۋv7JVBPBЉhNh fPZ<t&X@tTP6R‹PhTh xfP<Ht'P@PRQ6Q 6&@RPtS+]e[^_]Í&UWVS}]} tu 11Vt&8u9Xu@SM QPPSrQhsh fP_;SM QVP v5JWBPBЉhyh fP;@tP[\pXe[^_]Í&UWVS]} uVS @VWPOe[^_]ÍvUWVS]u }xt jjSpx؍e[^_]Í6&US]MB9E u9Jthܫ m9t&&B@]]Í6&U WVS}}EY9r$1uPh 9&}tZw}t"&}tjt&IU U}6A8EtE9]rM&IE f0}6ff9t E9]rMrt&IU 2}v9t E9]rMD}E9{v'v]u }{MtUUE9Cw܋E1uEU9Pvˉ؍e[^_]Í6U WVSMPE}tRw}tt&}tjt&H] ]JvA8EuEJu6H] f3Jt~6ff9uEJufH] 3JtOv9uEJu8&1ҋH9s%@EȐu }׋MuEU9rEe[^_]ÍvUWVSu}] ߋ9XwPV<t06@WURPLe[^_]Í6UEPh/ o6]Ít&&UUE B PR]Ðt&UEPP] UUE B PRy]Ðt&US]U 9PwRi1ҋ@Ћ]]Í6&UE P"6&)‰&WPLt{Ft4Pt'9Xu PFP`&&}tCMA FKU N&][t&1e[^_]Ít&UVSuE PVÃt*Ft P?VCPB(PB,S?e[^]Í&UWVS}E PW-1tsGt P9?S0?e[^_]ÍUWVSMyA19y vkA4tPAtPM>MQFPB(PB,MЃ^V>ރM빍&AG듍vAt)PM Mt@APMᐍe[^_]ÍUpWVS}WE juh9 1Fu 1wt&@FubNABz v09s u„tA荶9H uF1 &&@FNF@e[^_]Ít&UVSu] ~t/vKtV0~uFt@ t&&1e[^]Ðt&UEU 8t tjRF]Í6UE@]ÍvUVS]u Ct SVSe[^]Ðt&UEP ]UUE B PR]Ðt&UEPP] UUE B PR]Ðt&UE@ ]ÍvUE@]ÐUE9E %]Ít&&UE U]Í&UE ]ÍUE@| @ @@ @@@@]Ít&&UVSuE F| F FF FFFFXtvPV[ue[^]Í6UVS]u C SCt?P CPq uKtAjPR@ЃC| tS4e[^]ÐUVSu] VBPBЋSBPB Ѓt([tPV[uFFFe[^]Í&UVS]u 9suC&{uCt CCK)ʋC9rVhT 1k}9s)9sC9 S)9sCC Jy10ɄtJt@Ju @JusCe[^]Ð&UWVS}1_t'6WM QPB0PB4Ѓ }[FuۋM QVW e[^_]Í6UWVSu] j 2NjVSB PB$Ѓ h1hz fPCFCt FX6^ ^^FFe[^_]ÍvUWVSu] j 52NjVSB PB$Ѓ hEhz fPCF Ct F X6^^^ FFFe[^_]Ít&UWVSE u#MQMQ M9AuMQMQ;y&PMQǃt]_j [1ƋMQMQB EPB$Ѓ hehz fP<ws^~MqAv0e[^_]Ít&UVS]u 9stCsSGFCFtCp&&s ssCCe[^]Ít&UVSuFu1v&9^u9CFt@XFF F;6&9^ uCF @SCBSCBCtF6CtFNFt)P6t&9ZuFBFPƒuN؍e[^]Ðt&UVSu] tCt9Xu Ct9Xth 0Bt&&^VVPB(PB,S.FF1҅uVe[^]UVSuE tfjPVT t,VfÃtVPB(PB,S.0e[^]Ðt&UVSuE tfjPV t,VÃtVPB(PB,S-.0e[^]Ðt&UVSuE PVnt7VÃt(VPB(PB,S-0e[^]Ðt&UWVSu] tCt9Xu Ct9Xth  11v&^V';Sg-FF1҅uVe[^_] USEP1ۅtP-؋]]Í6&US]E PS_u1t&S1ۅtP,؋]]US]ScSm1ۅtP,؋]]ÍvUS]SsS=1ۅtPt,؋]]ÍvUVSu^t%VPB(PB,Љ؋[P;, uFF FFFFt)Pv&@FPue[^]USM] }tA1!6&AQ&9t@BuAt Q&AA]] UWVS}}t_1;v&_w)&WM QPB0PB4Ѓ t[Fuۉ_tw GGe[^_]ÍUEM P1t69 u@Ru]ÍUWVSEX1Džt%WM QPB0PB4Ѓ uF[uۉe[^_]Ít&&UUzu1]Í&&BBB]Í&UUz u1]Í&&JIJB B]Í&UUBt1xtBB@B]Ít&&BB1]ÍUUBt1xtJB@B]Ít&&BB1]ÍUWVS]} WBPBЋSBPB PWO<u![1tvPVWb[F ue[^_]Í&UEU PR0]ÍUEU PR]ÍUWVSu} EPWGVBPBЃ6EHMVEPWB8PB6&h\ .6&ha 6&hf 6&hk 6&&hp WEMQYE 1ېdF؃sC9f MA uV͜E }]@PSwSV-Eĺ jS軝MA E&&}G E&&MA En&&}G EN&&MA E.&&}WVfE@JDž:$0 &`                                                           t&E9Ptff(&xt fvf&ffhjPa 8^uƅ@t&&ƅ8]u ƅMDžv<]<-tBtm<]tiBu ƅ뼋Wƒ9~ӋC9}6Ƅ+C9|xQƄ(J&&8]1F =RCj jV!1ۃ l8+tZ؃f VMyu89fXt*tL:;f VC댃 6wP$ 6&        MA E&&+8+uD3=RWSWV5 ߉PQP 8?uffv:\uBNރ k<u8Jz뻍&e[^_]Ít&UUE Bĺ PR蹔]Ðt&UEPPӗ] UUE Bĺ PRy]ÐUVSuE U9v\2LJt,IKJu69s ACJue[^]Í6&UWS]u180PjPh fPBSWe[_] UVSuE ]u1v&SPV0tDe[^]Ít&UWVSu] tu 13&=;t&tFC +Ѕte[^_]Ít&&U WVS]}u tu);Kt3;UME+Ѕu}tGFKu1e[^_]Ít&&UWVS1 Љ Љ ȍ Љ  ؍ Љ f f4}RGve[^_]Ív&UVS] =v*u Zv*u76&Ff1Ѓf3 ERf1Ѓf3 ERKuf%e[^]Ít&&UVS] =v*u v*u76&Ff1Ѓf3 ERf1Ѓf3 ERKuf%e[^]Ít&&UME BPBPQn]ÍvUVS]u EPSeEPV{<th JEEt P@PS\h؍e[^]ÐUVS]u VS辏C ~@@D؍e[^]ÍUWVS]u SC t 0H&1@PVS赔؍e[^_]Í6&UVSu] SV莐<t 0t @De[^]Í&UWVS]u }xwhS;WV@P# xt0H&&1@PSV؍e[^_]Ív&UWS]}E E},xt0H&&1ǍUGjPRS<<u@ t&&0e[_]Ðt&UWVS}M] 9Jvj}tPBPM6RË ;:tː9 tB:u:ut1҅t+P&&e[^_]ÐUWVSu UME9Swv&tVCPT[ӅtщJt&1҉׀;tvWVS tC;u;u1ۅtE+P &Ѝe[^_] UWSUE EEY}cytb}t'EPS¹&tߊEщJ(&19Qw \t&ڀ}t9r=E8t6Jv&E ;E9rȍv9 tJ9s9r)ىȍe[_] UWVSU} t!0} H&1ƅ}MxuNjv&M9Pxt0H &19v0Mxt0H&1)}Mx׀}t@Ӎ6|VOt!} tVM QP t&&M )ȅtKƍ6Ӆ|6VM QWO tKye[^_]ÍvUVSE] 1ɋPu 1K}t:t8B8uA:u(t&Ë5;:t9uAB:uȍe[^]Í6UWVSEU 1Xu1 t0H 6&1ǀ;tW}t1ttWRSU')v&WRSU UuFC뫍&e[^_]Ít&UWVS}u 0ҋ@t8ut;]SrE SWqG E t&&M9Hw6@P]S SW/G E XE@P]SMQ@PE@PE@MSWՈG E쬻 jS܈e[^_]U WVSuU ]0ɋxt?ut8]SoE SVnF E jSu;vxtI &19vˋ)BPVe[^_]ÍUWVS] uxt0H &1E@t8uE}u9r<]S蓆E SUR菇UB E [6&pE@P]SURVE@PE@USUR2UB E jS6Ee[^_]Í6&UWVSu MMEPՅE xt"0ЍX 1ۋ})߅~eETRPgEP@SPRI WEPE@P E9Pw R膏1҃E@et&}t*]MQVS|E SP蟈E )v]@PSESPtE쬻 jS]SMQ҅MA E jSօEe[^_]Í6&UWVSu MMEPuE xt"0Ѝx 1])~eET;RPSEPE@P U@RWPR ;E9Pw R&1҃E@et&}t*]MQVSE SP?E )v]@PSqESPE쬻 jS袄]SMQrMA E jSvEe[^_]Í6&UVSuE @PEPEHt9t;A9u]SVF E jSe[^]Í&&UVSuE @PEPsEHt9tL:A9u]SVrF E jSye[^]Í&&U WVS} 0ۋPt:ut?}GPEP>&pVEP9DP u?xtщJt&1T9DP u ]t&Ep1҅t$0ЍH 1ɍY2 9DA t6B2DA u<2uj]SkGt 963DA tKuC)S։uVE@PC]S]S"SEPE@ E jSEe[^_]ÍU WVS}] 0ҋ@t8ut@PWOv&@PEPXEpu=Ի tZv;tR9DB tC;u t5DB uCF t!ѡ9DP t;t  F=Ի u9us~ uNE+p@P]SSWG E jSȀe[^_]ÍUWVSu}t0}H v&1Åxt0Ѝx &1;9} r6E )@PVtcE )Pj @Pu C]06@PV踀t2+E @PU PPPo U PSURPwe[^_]ÍvUSMU EEff]EPRQ]]ÍvUWVSuU ]xt0Ѝxt&19r9s=BPVY1&t&))@PPPR)@ PVe[^_]Ív&UWVS}] EuPSWVVSW.e[^_]Í6UWVSEHEEE9DB t ADB u<-uAE6&<+uA‹59DFti]]} Wu ƒ9E|J}DЉEADFu˃}t]9DB t ADB u9uE} t]} 1}tEe[^_]Í&UWVSE} HEE9DB t ADB u9+uA‹59DFtY}wOu ƒЃB]ۍDЉEADFuˋ9DB t 6ADB u9uEt]1}tEe[^_]Í&&USE] SP…t;t=v‹]]Ív&USE] SPt;t =v%]]UUE PR]ÍUUE PRp]ÍUSE] PEjPRt!Et8u&]]ÍUUE PR]E]ÍvUWS]U t!0PRS)&jS؍e[_]Í&UWVS]E u} t&0vN 0utN-t0Ht&1@PVS蕀؍e[^_]Í6&UWVS]E uE6N 10ut!0H1@PVS%؍e[^_]Í6&UWVS}u]ft*Ft%et EtgtGtPh* ҹE%c~cE. ~( 0E0UE&&0MEl@@EU PREPW)e[^_] UWVS]EEzt0ЍH619M xt0ЍH 6&1ɉME PSyt0|xtI &1+MMQj urV_@Et0}ЍHt&1ɋU]sEU 2e[^_]Ív&UWVS]u tjxt0Hv1Et0Ѝx61UDPSy<uG}UPWVP؍e[^_]Í&UWS]U Uxt0Ѝxv1GPSx<u@U@D؍e[_]UME BPBPQT]ÍvUVS]u EPShLEPV+x<thT EEt P@PS O؍e[^]ÐUUE B PR)w]Ðt&UEPPCz] UUE B PRv]ÐUS]U EPRSQC,, C \  ST؋]]Ít&&US]M UEPRQSQC,, C \ S؋]]Í&UVS]S B0PB4j ƃVF jfhػ fP聶ƃe[^]Ð&UVS]u C,, C \ P{6&@xP۫u䋋tAjPR@ЃC, C P C|ǃ jPcuC, C $ VSe[^]Í6UE]UUE ]Í&UWVSu }Fxt VPjAhhػ fP>}*C *9u+UHQPA ЉCt&&{3UVxSPxh URh V聓h URh Vjh* URh VSh; V赉tfjURCe[^_]Í6UVS]u P艩t590tP狃jPFxjSjV譗e[^]Ít&UVS]u P)#&9pu &P脩u1e[^]Í6UWVSu~PӨ98u X&P4u݃tSV1 e[^_]Í&UWVSu~Ps98u X&PԨu݃tSV e[^_]Í&UWVSMqhH V<th1hػ hP hh Ա0ۋMtFttËMP̧tE9ux#v&tBttfjR*MP뺍t WMQA e[^_]Í&UEU 8tR]Ð&UE@]ÍvUVS]u C SVSޜe[^]Ðt&UEP]UUE B PR)q]Ðt&UEPPCt] UUE B PRp]ÐUVS]u EjPVS8C, C  ChP~oCl S Cpctt,h V!tsxjSV^ 6&CxjS؍e[^]ÍUVS]u C, C  Cxt SP)KptAjPR@ ЃChCl jPoVSOe[^]ÍUWVS]u Ch@ttVPGv&)ljuwShtH 6&1@PVRt KptAjPR@ ЃCpCttC R vSze[^_]UWVS]} Cpt@ HpC&j1PõCphh% fP'ECpP B9u B9uEWCpP0ҋCp@ fxuxu„t CpPP;ShChxt jRTCtt+}u%C R6&&fjCFSB)@PCDS@)@PjjSe[^_]Í&&UMU Att t)At$ЈAttA RЉ]Ív&UMU At$ЈAt$HSM=ƋU REEPEPURE 9}ƋURiEfUffrjS^Ee[^_]ÐUHWVSM MQMQÍMȉSQ CPuV CPEP CPEP C PEP C(PEP C0P}W EPEPQ %MQFAB)BEE)‰]SaE 1MQtt@t MA4u PMAPPQh< SE@PtmjjjjQQQQ$b MA QUREԾ jSbjQSjEPEPj(PhhO fPQSDžDž$VQ"Dž@DžMAttVt&WPjPS;SfjEPEPEPQQQC,MAtj8S_Dž\ 1WR6SQGPRCSQBG F~6WR6SQHGPRCSQ/BO F~hQMjjSQVDž jS_jP`MAt$8jt E &EPSSj4fPEPEPEPQQQ:<0jStcPzjjjjQQQQ^Mă$QE@PVMQ QEPjPEEԾ jP`^jEP[^_]Ðt&UWVS]SǍEPEPWWuƃCDS@)@)ECFSB)@EjCh@PCpPC4fPSPh!EPEPjVWM QBe[^_]Ít&&UUE B PR]]Ðt&UEPP`] UUE B PRI]]Ðt&UUE BԾ PR)]]Ðt&UEPPC`] UUE BԾ PR\]ÐUWVS]} uShztuS?uGUSRmUUUUUM)BUM)BMAShztMM e[^_] US]U EjPRSyC, C  Sj CChSb hjjhP*‹ChPfjCh@PfjCh@P޼ fjCh@PyjCh@P.jCh@Pm.ChPJ j jdRЋCh@Ch@$hS ShD ;jjhjPI?‹ChPCh@Ch@ hS Sh PzCh@h| Shj PyCh@ ChCh@Ch@ Ch@Ch@Ch@Ch@Ch@Ch@jS؋]]Í&&UVSuUEjPRVF, F  Vj rFhhjjh\Pk‹FhPfjFh@PA fjFh@PfjFh@P躺jFh@P\,jFh@P, FhPJ j jdRЋFh@Fh@ hS VhD PxFh@h| Vhj PqxFhFh@Fh@ Fh@Fh@Fh@Fh@Fh@Fh@Vnu jV} h VhPx‹FhP V*u2FhH Y FFVB)ЃPFDV@)ЃPjj0&FhH Y FFVB)ЃPFDV@)ЃPjjQЃVFh@ PsfjFh@ PӣFh@ hɿ Vh P)w&Fh@ e[^]Ít&&UVS]u C, C  B<t.ChHt.A jPR@ Ѓ&&Ch@ChPuVSe[^]Ív&UE@hxu!@P] @P]ÍvU WVS}U uu*hchڿ h h q!ERP規} WiƃEGh8uuEE1ۅttQEPGhxtVFS@P ˍt&&jVFS@P 먐&W9t WGh9Lx tRWDPGh@ P'-6fjGFWB)@PGDW@)@PjjWئ}t WyEjPˏe[^_]ÐUWVS}]} u+hhڿ h h &} WÃEGh8uuE1}} M <u9u~HWhztSCM PBP蝬 $&jSCM PBPF륐W9t W=Gh9Lx tRWPGh@ P}-6fjGFWB)@PGDW@)@PjjW舥}tW)e[^_] UWVSuVǃU9ÄtRh h 输 }}}Vhzt!EPM QBP耫 &t&&jEPM QBP9}t V*FhU9uhx t'RVPFh@ P|9&&fjFFVB)@PFDV@)@PjjVhFh9EuVe[^_]Ít&&UWVSu} Fhx VEE|9uEU9EtRh h w }}]}u\VhztEPWBPN !6&jEPWBP}u VFh9EuV)e[^_] UWVSu} VE9ÄtWh h 躑 FhxtW@P̬v&W@PEH9t V@Fh98u^x t WVPFh@ Pz2&fjFFVB)@PFDV@)@PjjV舢Fh98uV(e[^_]Í&&US]Chxt@PGt&@PChCh@ th* P1zS]]ÐUS]Ch@ uS9PSP{]]ÍvUWVS}u Wn9ÄtVh+ h 0 t 1/t&GhxuV@PV@P趬e[^_]ÍUWVS}u W9ÄtVh0 h 谏 t 1/t&GhxuV@PXV@P膬e[^_]ÍUWVS}uWn9ÄtVh7 h 0 uPGhxtVU R@PrVU R@P Gh90ux tVWPGh@ Pixe[^_] UWVS}uGhx u^W9ÄtVh7 h 臎 u3GhxtVU R@P9&VU R@P e[^_]ÍvUE@h]ÐUWVSu} Fh98tVV79ÄtWhB h  u+Fh8Fhx tWV}PFh@ P`wVe[^_]Í&UE@h@]UMU Ah8PtPtA RЉ] U$WVSEPEPEPU REE1MMU R?9WM QÃtAU RMQFjSURE'ƋMQ 'XjUR|G9&WM Qt@ pX61U BFJB)ȍX9u}u9]}]GP&UEEfMffUf fQEe[^_]UWVSu} Fh98t 8VEFhxtVC&&V@PVhFh@WVWVtFh@ t SPTuSV e[^_]UVSu] SVSV7tPVe[^]UE@h@] UVS]u VSޔCh@H VQhPAlЍe[^]ÍUVS]u VSCh@H VQxPA|Ѝe[^]ÍUVSu] SV.Fh@H SPЃFhxtF RЍe[^]Ðt&UVSuFhx tzVYu1FhH Y FFVB)ЃPFDV@)ЃPjj/FhH Y FFVB)ЃPFDV@)ЃPjjQЍe[^]ÍUWVSHS}WOƍVR}VRRmVR R]VR(RM V R0R:V(R8R*V0R@RU$RS0WDO@)B~WFOB)Bto}GDW@_FOBfDžfDž f)Љf f)fjjfjVRHS1S jV }Whz`RRRW_DW@)C+)ˍ{`jjfjRPQ}WFOB)B)‰R`WHV%$VRB}OFWB)уfDžfDžfffAfOhRQ¸RHtAjjjPjd)BR)BRPQV](w&}Wh QR¸RÃtORVjjjjSWFOB)BK I)ʉRjVbG(fjV}GDW@_FOBfDžfDžf)Љff)fjjfjRQHS/Wɼt7WFOB)ʃRWDO@)+`Rj`RS#jR@2t&}W{WIEDžT }ODW@)щȃWFOB)Bу׃WRGWRWROWRWRWRWRWRWR|WRxWR|WR`WtW`W쉽pWQlWQpWRSRPRPVPjWĨ}WPRHhW"jjWhWk;RSRSVSVpW`WlW`WlWxWR`WRWtW|WtWWRWRWRWRWRWRWRWRjWİ}WҷPRhWjjWhWX:WV(=}OFWB)ыfDžfDžfffAfOhRQRwW? PhWjjjSjd)BR)BRPQWX(}GDW@_FOBfDžfDžf)Љff)fjjfjRQhW+}W:t'jjRRhW_jVt<Dž| jWB}G4u@ RR=}WR*;OhRQRdjRSݨSfjSWFOB)BRWDO@)BRjjHVG$4`}W`Wj}WhRfRSRVR*S)ƒR)ʃRPQWhRfRjjV|@GDW@)))ЃOFWB)уfDžfDžffffRVdtlW`W9jjjdWja)BR)BRPQVU(j`W@:Wt&&}Wh QRR~t3jjjjPWFOB)BH I)ʉRjV? fjHRjRDjR9HSjRyjST[^_]Ít&US]E HDP@)PF@B)ƒf fCffKfBfS؋]]ÍULWVS}Ghxt @6@WFunW]WSnfjE PSkmGh@Gh@fjGFWB)@PGDW@)@PjjWZvt&GhxtGu FWDO@)ʃ9LW%hQ Wh腶Gh@*6&Wu]܃fEfEEPWS:SGh@PV茆u V NEEEEUfMGh@uutJ VPAXRA\Ѓ u]E PWSͅSGh@PVu V NEEEẺUfMԋGh@]ċtJ SPAXRA\Ѓ hQ WhwGh@ }t S}t uVe[^_]Ðt&U]Í6&U]Í6&UUE J PRЉ]Í&UWVSu} G=~!=~= t;V藫6&FhxG Vt&VZurVÃ~C&&VZHP8Vt2VV4C9} S 6&jVG 6G e[^_]Í6UWVS}11ۍvW 9}#9] ~SWƃC e[^_]Ít&UWVS}GhxWW@PMVGh@GhPZ @PRsPGDW@)@PWhBPADQ@)@EAFQB)@EMGFWB)fEf@fEEPWQ賂EE u]GDW@)ЍHGFWB)ЍP19E}u)΍9E}])Ӆ}1}1ۋGhPJ SVRЋGh@PWhPBPZfjGh@P Gh@H P?&W@PT]fEfEEPWSɁWhPSBP!Gh@e[^_]Ð&US]Chxuhuhڿ hi h xSCh@PTCh@H PЋCh xt,@fjCFSB)@PCDS@)@PjjS贉Ch@]]ÍUVSuFhxu+V9Ã6SSFh@P蝻 Kue[^]Ít&&US]ChxtC RЃfjCFSB)@PCDS@)@PjjS]]Í6&UHWVS}uu WhM 9J 0ۃ>uW4uF=t=t@t&&WÃ~CW HP(WWC9} S &jWFvzM 9Juċ 1zFEGh@XDP@pF@BEfEfEf)fEf+EfEEfjMMQP@e tGh@GhxSu]MQ@PS~SWV~EE]WSfjEPSdGhx@t&M IDMM A@YFQBfEfEfMf)fEf)fEUfjFPRrd tkV NMEEFEԉUfMfM܍]̋tJ MSM QMAXRA\Ѓ }hSO]v&GhxtW@Ghx@fjGFWB)@PGDW@)@PjjWӅ&&Gh@XDP@pFHBfEfEf)fEf)fEEfj]ăSPFc <iUSGh@PR|ẺEȃ fjEPEP, 9uGh@WFvM 9Jut*v&6zMQ IMEEMAEԉUfMfM܍]̋tJ MSM QMAXRA\Ѓ }S Gh@XDP@pFHBfEfEf)fEf)fEUfjEPRa <t WGh@PN0e[^_]ÍUEPhtB]Í&UEU @hP]Í&UEPhtB]Í&UVS]u S,&PSEEH9Chpe[^]ÍUE@h@]UEU @hP]Í&UWVSuFh@ P\ǃ 1V$- v- - 0- - - - &VPV ttPW))tVPWVVPp18VXt&VVzXV‹Fh9PuVHPV SWVSVQSVWVe[^_]Í6&UVSu] FhtH tA fSP`R@dЃfSV蕠e[^]ÍUU EPR]ÍUVS]u C| ScC ScC SxVS[e[^]Ðt&UU EPR ]ÍUS] EPS؋]]ÍUU EttPRP]Ít&)Љ]Ív&UEU x t tR菎]ÍvUEU x tR[]Í&Љ]Ív&UVS]u C SbC SxVSZe[^]Ðt&UEU 8tR]Ð&UE@]ÍvUVS]u C SVS>Ze[^]Ðt&UEPDb]UUE B| PR.]Ðt&UEPP1] UUE B| PRI.]Ðt&UUE B PR).]Ðt&UEPPC1] UUE B PR-]ÐUVSuE MU]RQPV0F, F $ VfEfEfEfEUMVhNlFpfFtfFvf^zVe[^]Ít&UVSu] f~zu ؃v)8t h lۉ^pVXe[^] UUE fBtR-]Í6&UUE fBvR ]Í6&UMApƒ%fAx $`2 &2 2 2 2  3  3 &fAxt& fAt t t 0uzfAtpt& t t a60uZfAtfAxL& t+ t160t(6&fAtv&fAtffAvfAxfyxufAxA RЉ]Ít&&UWVS}u 0NlVhJ9uNnVjJ9ut2FDV@^FNBffGf)ЉfWf)fWvVhNlOe[^_]Í6&USMU ZAhYl]]Ít&UWVS}] USRGUMUM[xUE)B4)RUM)B)RPQURVXUMOe[^_] UVS]HVC$PVLS VPЋS VSVZ jVO@[^]ÍvU WVS0ɋuVlFhH9uVnFjH9uuvhuu~j^DF@)Cu V uFl+E@))VFFB)Bu NuFn)@))fufuf}fEffHfEffHfEEPuV;e[^_]ÐUhWVS}UWRUUUUWpуMցWÍU SRSRUR SRURSRUR S RURS(RURS0RURUJB$6 &&6 7 07 7 7 tpjWvRWtR0ƒfRURURM Q3&&t0jWtR0ƒfRURURM QXu+jWtRURURM Q#xt&&j0ƒfRURURM QGv&}uJEUM)BfEfUUUUfMfAfMfUUOEU)BffUfEUUEUM)fEfBfUUUuuU RuVEjWtRUR]SSM QW jS<URURURURM Q,VM QjV/6WvRWtR0ƒfRURURURM QjUR_e[^_]Í&&U]Í6&U]Í6&UUE BL PR%]Ðt&UEPP(] UUE BL PRy%]Ðt&UUE B PRY%]Ðt&UEPPs(] UUE B PR%]ÐUS]U EfjjPRSC, C P C|P#ǃ Sv؋]]Í&UVSu] UEfjjPRVF, F P F|PE#dž VSVke[^]US]C P0R@4ЃS豓tuǃ1vǃPS]]ÍvUWVSu] F|@ttSPgv&)ȅuWV|tH 6&1@PSR5( fjFFVB)@PFDV@)@PjjVZte[^_]UME fjAFQB)@PADQ@)@PjjQt]Ðt&U(WVSDžuFDV@^FNBfEfEf)ЉfUf)fUUMV|zt0J1҉uV蟖ÍUSRSRURSRURSRUR S RURS(RURS0RURWU$RWC u7fDžfDžfDžfDžRV]WSfSǃnVuV|RRStj S&F)B9|럍&fRuVBt4)A)щ&t)+WVjRSNjRVT jSWTWVSZSVXW jSVVRjWVjVV jURbuV SQ҃t_fjSURSKyV|RjjVRj$)BR)BRPQSH5(uN SRSjSjUR#Y[^_]ÍUUE B PR9]Ðt&UEPPS"] UUE B PR]Ðt&UUE B< PR]Ðt&UEPP!] UUE B< PR]ÐU ,tAjPR@,]Ít&US]M UEfjPRQSaC, C C|PǃL Sǃǃ!ǃƃ؋]]ÍUVSu] MUEfjPRQVF, F SF|PUVdždž!džƆe[^]ÍUWVS}] uMUEfjPRQWYG, G hd G|P͌WLJLJ!LJƇSW VWe[^_]Ðt&UWVS]} C, C tAjPR@ Ѓ,t,jjSP9ƃt,SP=Vn|C|ǃt jPNC, C $ WS覆e[^_]ÍU WVSu] F|@ttSPy &)ljV|tHt&1@PSRe tAjPR@ Ѓdž,jjVP8ÃCPj&F|@P| 6&x&uj&P{tM8utD8t?P9DPt/he VjL:PCP PCP.MV PQЋEE0ۃ0f}| f}|tDNDF@)FFVB)fAfMf@fEEE0fEf9Eu fEf9Ettt,V EPEPPAt&&fjFFVB)@PFDV@)@PjjVj V:e[^_]UWVS]} t@ HpCv&jzP`h hx fPYEP B9u B9uEWPZn0ҋ@ fxuxu„tPPdS|C|xt jRt)}u#C RS,tjjSP6t @Pe[^_]Í6&UWVS}u ]SHEL VSEW|HBttPQut&)ȅtCE@PW t!G Rv&WJEEt jPe[^_]Ít&&UWVS}WEL uu h WE]S|HBttPQu&)ȅtFE@P]S:tC R&]SwEEt jPe[^_]Ð&UVS]u u!,tjjSP(4tSe[^]ÍUUE ]Í&UME 8ttA RЉ]ÍUWVSu HSV$RSk tNR JBfDž8fDž:fJf8<@DI0jjV|RRRhhjjSQ>(04@D~x}H~BH(RSjh S?jS$$1D@)֍t0 FB)Ӎ\HWnMf1fYjWYE[^_]Í6&UWVS}uWVUUUU}Cfx~:M QV0jh V`‰jV &1ۅ~4tf]tf)]tf]tf)]jW|RRRG4ƒfRWPRUE)BRUM)BRPQWIPM Qe[^_]Í6UWVSuHWEF$PW@VPjPP6&.6&6&6&J,]US]U EfjjPRSC,h C P6ǃ P݂C|S}؋]]Ít&UVSu] UEfjjPRV/F,h F Pdž Pi^|V e[^]Í6US]S B0PB4j!SRǃǃ $C|PSjS+]]Ðt&UVS]u C,h C ǃ jP/ǃ jPC, C $ VSlqe[^]ÍvUWVS} c~h eFcuƌMxuey|Wj VywMA|PfjEPMQ|J9PwR1ҋM@0t&&MA|9s)M]SE MQj Sv E@PjVTW]ÔS贁w69u7+EPSKtVS荃t&&VSكNǍv19u~]ÔVS蹃F9uEE )E]WVS| SVE jSTE]ÔSPNWS169}v&MA|H91^,8(6]C|+,@9Pw R@1҃@P$9pw V1҃@@Њ$][|+,$V(QF{$tR(Sz{&R(Q{NBv&16]C|)H9}?@9pw V|1҃@@ V8Pl{F뺍fj8$QHP@@P]ScDž< j$QHSi@DžD jPjSC[^_]ÍU4WVSEEtEURDMI@)ʉC4}؃E@|EE؉E}ƋMIFE@B)AM؍U܋Eܹ E9uEU)Ӊ]߉}E6M)щMEE1UU䐋M9y|EljEfUfUfUfMfMEE}tKU9zw W1ۃMY]PU RVMQEPURj M  QVEPURMQD}tiWEPxEس t.}t-WEPnxE tE.UR &j ۉ]SVMQEPURG}]Ì} t0} Ѝp1FuVM QS Ext0Ѝp 6&1UZ|9~SEP5j}tMEPQie[^_] U4WVSMMEPWE1ۃ8ctu܍v2MЊ D2C< cu]EPE18ct[}܍v19}+6 M̊D9M8uM96&B9|9uU:MЊD:EFMЀ<cu19u~a}ܐ6<;u$fjMQMQD;PM QMQ<;u$fjMQMQD;PM QMQXF9ue[^_]Ðt&UWVS]u xPSNFPPWS軉e[^_]ÐUWVS]E@} ?}EPwlƍ}ȉ<VW袞FP}Љ(W菞FP}؉8W|FP}4Wi F P}WYF(P}WL0,VEP9E@EE@EE@Et((WEP(W}W(,8P}W4P}WTf`fb`{&EU0Lf\ff^\W(P},fEffXf,ffZXP(WOEUfTfVTPEP& fEf@fEfEWEP}W U,f}ffPf,ffRPW]SUE)Tf}ffLfNLPSU}EL8fHfJHWS[E,Uf,fDfFDPS(vf}fOfUfUfEf@fEfEW҉,REP U}EL8f@fB@W]SUE)Tf}f)ftq}U(L8TffWP}W EULTffW{EU(LfffWP}W謿 E,f}fff,ffWP}Wk E,Uf,ffP=t&f}fGf}f}P}WEP耾 ]S}W=U,f}fff,ffWP}W赾 EPW(=U})TfEfffWP}Wn UE}LffPWEP9 S}W<E,Uf,ffPf}fOfUfUfEf@fEfEW҉,REP+ }WEP+<U}EL8ffWP}Wv UE)Tf}f)ffPWEP< }WEP;U,fEf)ff,ffPWEP },Uf,ffWP}WE,f,f}f}P}WEP }WEP:},fEfff,f)fPWEP# U})MTf|f)f~P|WEP }UEL8fxfzWxP}W贻 EPW':},Uf,ftfvWtP}WyEtfEt&EEfE},f,fEfEWEP}Wt EPWw9},fEffpf,frPpWEP蹺 },fEfflf,f)fnPlWEPx }WEP8},Uf,fhf)fjWhP}W* E,Uf,fdffPdt&UUffMfM,f+,fGfUfUɉ,Q҉,REP }WEP8},fEff`f,fbP`WEPE },fEff\f,f)f^P\WEP }WEPt7},Uf,fXf)fZWXP}W趸 E,Uf,fTfVPT}<,f,ffMfMUU,f+,fGfUfUɉ,Q҉,REPv }WEPv6},fEffPf,fRPPWEP踷 },fEffLf,f)fNPLWEPw }WEP5},Uf,fHf)fJWHP}W) E,Uf,fDfFPDWEP 6&Rh ujEP[^_]Ív&US]M A$Ѓ$Ј]]ÍUS]uhOh: hF hU $<u 1&<t  t&]]Ít&UUE B PR ]Ðt&UEPP#] UUE B PR]Ðt&UUE B PR]Ðt&UEPP] UUE B PRi]ÐU x-tAjPR@x-]Ít&UVSu=x-uYjp:ÃfjfjfjjSC@ x-j4fPFFVB)@PFDV@)@PjjVme[^_]ÍvUS]SStƃShS]]Ð&US]tƃShS CtPSkS=4 fPCFSB)@PCDS@)@PjjS]]Í6UVSuVl=tV|&HS$zF$PS誂 NDF@)FFVB)fAf@f@fB@DDU fRPSVS虇jSz4[^]Ðt&UVSu~pu0jFFVB)@PFDV@)@Pj#'P FpHS`yFpPS FTPSzFp@ P@fDfFDfjPSVVSfjjFFVB)@PFDV@)@PjjFpPjjF$P+i@uFhxt0H61u+FxPj*EP4 uv|}W3Hu^WM‹|+u+HE))ӉC)މu0ҋE@t8uuM)V)fufufufufEfHfEfEffHfEEPu VޙuV +FxppE9Pw Rr1҃E@Ѐ8tpuVx9U~/pЋpl9E} u)։l6&DžluVx9U~+pЋph9E}u)։ht&Džhh9l udh+lPlVEPdVg9lVE@P}W`E`jE@PWH`\0(jEPu\Vv(VW_P+`SWu)ƉP`Vu V"$j\V(EPu VRjE@PuV`Vu VE jdVEPu V lt"lVE@PuVuVu Vp9h}+hPhV]SW 8jE@PuVjuXhVSXVD6 E@PEP EPu V$E jXVٿE jWǿEPu V'fjV˕uuTuV& t*Ft+FxPE@PEPWTt0T uPV})NjuV5t~WTSWTLVu VۚPV/D8PTVWVu V踚,PV D8PSVD8PLVu V腚EE jP蠾jEPҸjEPG<[^_]Ív&UVS]u}!PM fQS6&{tu} SSƃCt)Ct}Ct} tfjCtPS6 CtCt9Cx~CxtdPStu!j3VYV! 0PVjV8jV萀jV'=-u\j ÃfjfjfjjSCh -hhp fPh jEPBe[^]Í&UVS]u C,0 C ` @S -t SPtAjPR@ЃVSe[^]ÍUVSuE PV[!t#]VS赥S @PVjS|e[^]ÍvUEHQPA Љ]ÐU WVSu} VÃE9M~Ph} h( i }}]}uhhp h h 6]WSv}}HQPA ЉEߋE1ۅttAWfjEPESj PPV뻍t&&fjV40V, tF4tt+fjFFVB)@PFDV@)@PjjVEjPe[^_]Í6&UWVSu} VkÃE9M~Ph} h(  }}]}uhhp h h }}HQPA ЉE1ې}}<u9]~;fjEPPjL PPVC뿍t&&fjV0V tF4tt(fjFFVB)@PFDV@)@PjjVAe[^_]Í&UWVSu} V+ÃE9M~Ph h(  }}]}uh8hp h h st&t$jV&fjEPWVfjVVt(fjFFVB)@PFDV@)@PjjVQe[^_]Í&U WVSu} V;ÃE9ˆU~Ph h(  }}]}uhThp h h fjEPWjVPPVfjV0VtEPV tt2EPjVmEPEPVfjjjEPEPVGe[^_]Í&U WVSu} V+ÃE9ˆU~Ph h(  }}]}t$jVIfjEPWj LPKPVfjV0VtEPV tt4EPEPVaEPEPVfjjjEPEPV;e[^_]ÐUWVS}u F PR@Ѓu>F PR@ЃuThhp h h 9&VPCXjPSVWte[^_]Ív&UWVS} u hhp h h 7Ot&W]SVUSPUpjPVWURjSve[^_]ÍU WVSu} V9ÄtWh hL  9| ~HEVtWVtEWPÃ}VWS VB(PB,Љƒ9fPVtC jPR@ ЃV.u dž}t+fjFFVB)@PFDV@)@PjjVjWTe[^_]Ív&US]S3fjSSt"CFSB)@PCDS@)@PjjS]]ÐUVS]u So9r1+t&VP1ɅtA PR@Ѝe[^]UVS]u S9r1+t&VP1ɅtA PR@Ѝe[^]UWVS} uUR9ÄtVh hL m uVWj%PPURGe[^_]Í&UWVS} uUR[9ÄtVh hL  uVWj PPURe[^_]Í&UWVS}uW9ÄtVh hL  u VU RW~e[^_]Ít&UE@4@] UUE fPR]Ð&US]S3+@]]Ðt&UE]UVS]u 9tgS$9EtVh hL  }u9fjPS3 fjPS PSSe[^]Ív&UVSuV2)Ã}1VQ 9~SV!e[^]Ð&UE]UUE PR0]ÍUE$]Í&&UEM ʈ] UE$]Ít&&UMU Ҋ$Ј]Í&&UE]ÍUE} tjP]Ð&jP]Ít&UE$]Í&&UE} tjP]Ð&jPH]Ít&UE]ÍUE} tjP|]Ð&jP]Ít&UE]ÍUE} tjP,]Ð&jP]Ít&UE@]ÍUE} th@P]Ðt&h@PU]ÐUWVS}u W9ÄtVh hL  t 1t&VPS1҅tЍe[^_] US]E t 6t&PSit A SP R@$&&1]]Í&UMt!A jRЉ]Í]Í&UUE J PRЉ]Í&UUE PR]ÍULWVS}MQP$1҅tUWÍEȃSPBCPEPBCPEPBCPEPB C PEPBC(PuVBC0P]SBM9&E@EW u hvVEPBWtVjEP]SSW MQPЃPW MQPЃPjjZjEP]SSW MQPЃPW MQPЃPjjM Q#$jSEPM QEPM Q\SM Q\VM QYMA M QP0UR@4ЃM9WW& u>W MQPЃPWKPjjM QyT6EPM QjM QXW MQPЃPWPjjM Q1w,EPM Q[EPM QajEPe[^_]ÍU WVSuE x@ PVuHE]VSnfjWS`tV#VK9|E}tV4HPVe[^_]Í6US]U tC RRЃt Sհ]]Í&US]E S PPSZ | SMPSK]] UWVS]} GG PSƃt(tS)VSIt8fG f9Cx~ u jdS蝯e[^_]ÍvUWVSu] ~|qVa}VDPV] CB$0 P P j j j j j j j j j j j j j  j   0 VVHPVVV9V^VVH9V@PVVrV9iVIVQVi;)PV;@V*V)É]V7V)ǃVVFH9}V V*HPVV]VH9||VHVV)É]VVo)ǃVb)~VS)1PVGV.E~VE1PV't&V | VPVFHe[^_]ÍUVSu0V}~|~tVPV fjjVPVUe[^]ÍUVSuE PVVV 9~V}t&&V PV@e[^]Í&UVS]t/SS!9tBS@PSS%t&StSHPSSPSe[^] UMU EPRQ]Ð&UUE PR]ÍUMU EfPjRQ]Í6UVS]6JARA Ѓt0jPƃt͋F jPR@ Ѓ뷍v@uJuAShEfjSyfjSMǃjSMfQSMe[^]Ít&UWVS}PÃEWP91t0C WP(R@,Ѓ9~ƋPÃЍt&VWyW`9WS&&PWjEP蜌e[^_]Í6UWVSu} ]uhhp h h HQPA Ѓ9vhhp h h |WSPk 9u@}t;G VP(R@,ЉVY 9~ SV{9~SVe[^_]ÍUWVSu} uhhp h h HQPA Ѓ9Erhhp h8 h MQPÃS VB(PB,ЉNjS VB PB$ЉE9u VtC jPR@ ЃfjMQM QV6V MQPЉ0V}tEPMQV8 ttG9}ufjMQv&fjV+EPVPEPFxPVe[^_]Ív&U S]SEtfjSUHQPA PS } u $8Et Ss}t fjS]]Í&UU-tjjRP膬]Í61]Ív&UVSu] =-uh hp hX h -VP$t-jSVPe[^]Ðt&UEU 8tR]Ð&UE@]ÍvUVS]u Ch SVS讪e[^]Ðt&UEPD]UVS]u C SVS讹e[^]Ðt&UEM 8ttA jPR@ Љ]Í6&UE@]ÍvUVS]u C SVS>e[^]Ðt&UEPD]UU EPR ]ÍUVS]u C@ SC SC SxVS辸e[^]Ðt&UU EPRi]ÍUS] EPSc؋]]ÍUU EttPRp]Ít&)Љ]Ív&UEU x t tR]ÍvUEU x tR{]Í&Љ]Ív&UVS]u C SC SxVS辷e[^]Ðt&UEU 8tR$]Ð&UE@]ÍvUVS]u C SVS^e[^]Ðt&UEPd]UUE B@ PR詋]Ðt&UEPPÎ] UUE B@ PRi]Ðt&UE]ÍUS]SC h CP#؋]]Ív&UE]ÍvUE]ÍUS]SCC ؋]]ÍvUE]ÍUS]C S茉C ؋]]ÍUWS]U t!0H&&1@PRSe[_]ÍU1]Í&UE@]ÐUUE B8 PR]Ðt&UEPP3] UUE B8 PRى]ÐUS]CP萈C C$ CC CCC؋]]Ít&UVS]u K tAjPR@ ЃKtA jPR@ ЃCC jP-tS$e[^]ÍvU- -]Í&&UVSuF j ,ÃS艳C8 ^jXhd fPFFF $ F e[^]Ít&UVS]u C CPt@t ǀCPtݍ6KtAjPR@ЃtSe[^]Í&&U]Í6&U]Í6&U]Í6&U]Í6&U]Í6&UE@HQPA Љ]Ít&UWVSu}MAHQPA Ѓ9E~$MQhq 1 }}MAHQPA ЉE}Džtt1g j APhhd fP8t;M } u%}uuKS} t0} Hv1@PM QR }tMQjPUC sthMAVP(R@,ЃMA tCHt:69tu 1 Hu߅th Y1-t&MASMQP? MQBPBЋe[^_]Í&&UWVSu} 1ۋFPt9xt CFP胻萅tSVe[^_]Ít&&UVSu] FP̺ƒtB$؈BFP)ƒ6e[^]Í&UWVSuE ]jjjjPV2SURWV4(}t WURVe[^_]Ít&UWVSuE ]jjjPjVSURWV(}t WURV@e[^_]Ít&US]M UEPRjjQS]]ÍUVSu] MUEPRQjSV`e[^]Í&US]M UEPRjQjS3]]ÍUVSu] MUEPRQSjVe[^]Í&UUE PjjjjR]Ít&UVSu] |FHQPA Ѓ9|Sh mt&&FSP膯1ɅtAt ǀVAPB0PB4ЃFjP a<tFPR@Ѝe[^]Ðt&US]CPPtHPt ǂS@PB0PB4ЃCjP薳C@1҅t뵐<tCPR@Ћ]]ÐUUE PR1҅tPЉ]ÐUVS]u EPS{tpCPR@Ѝe[^]Í6&UUE PR@t @@]Í61]Ív&UUE PR1҅tP Љ]ÐUWVSu EPEPǃGPtt VR)Љ…ÄuhO tAjPR@ ЃG WtI &1AMQVR蒅 EPBEPRUҍe[^_] UWVSu}WVÃSCxt jRC Et H } W fAf9Bu fAf9BuEK tAjPR@ Ѓ} Wj}P u]ؙ@6jVM QTSà F>u9]}X9]|~ u)E+E+U9}4N1&j~WM QS+U9}+Ee[^_]Í&UVSuU EjPRVEF,P F FTP]SqSaR@PVjVjV$jVj à S,C8 dždždžh AVVtu*j3VJV, 0PVv&jVJjVJjVhVVDQ hpPVQ hpPЃ(jh V%ƆƆƆƆƆƆƆƆƆdždždždždždžjEP0qe[^]Ðt&USMU 8t*Y tpPPЋ]]Í&UEU @,P @ RPҽ]Í&&US1ۍ6 -tAjPR@ Ѓ-C~Ћ]]ÐUS=.t.h 1ۍ6s-t8@ P@fUfE0fEf9Eu fE f9Eu„t)-qjMQjP-RC땍&.=.u ..-E PEPR˿.-]]Ð&UDWVSMQ;ÍuȉSVfSRURYSRURLSRUR? S RUR/S(RUR"S0R]S} WMQmuMQR1҅tu1uVh jQnjV\&MUUUUUUEU)Uu)f@fEfBfUURuhBh h h `SQSd&VS.WS'UR$$UR$$SQPSkVLJDžDžM9}!$&M׋M9u 9~ډÉ9}9u9}u;9uu}t&zuJ_ 9uuDž;vDžzt0J1҉URSXjjjRRhMI uVUR҃PMRVjSC09zt0J&DžQRR]SǍOVRRSuG9ufjVFU)Ӌ+MI uVUR҃f]fEffJfUfJfU]SQGjURSjSuv MQUR҃PWjVQ$jSURVDjjjRRhuv MQUR҃PJRVjQ/0fjVEuM9 ztҍB v&1u9}#zt0J1RRR}WXuV~trjQjVSPJWGPRQjQS6J,WGPRVW|GPRQSJS.jjjjVURURM Qm$jS|!jUR1hjUR覧[^_]Í6&UVSu ETP]Sfj@PS7jSgFe[^]ÐUVSu] SP1҅tt RV Sh* 1e[^]Ív&US]hS辄ƃfjjPSL]]Ðt&US]PS蜄ǃtfjjPS]]Ív&U WVS}u 0Wit 9Fut!fjjPW9Fu]S SWVEEM},G fjRGFWB)@9~!G fj R$dt&M}(G fjfjR 5&GDW@)@9~!G fjfjRЍe[^_]ÍUE]U,WVSM uMQjMA vM 9u}9~NjM 9}ƋM RPL1ۅtuhh hg h D)PWSMQ/9}M U䋉ME6M E䋉MU܃}}hh hi h ɩM HQPA Ѓ9E|hh hy h 荩EPhE M MQPDƒ1tËM MQP"1҅tU9uhh h h Uxt0H &1)PVSR3u]SVkE jS1i]C9]~Eh VjM SPwƒ1t@PV>뾍6&h uV"}t6]MQMQS E@PVE jShVMQihMA E jVmhEe[^_]UEU RP躔1tt,@u .]Ív&]Í1]Ív&UWVS} HQPA Ѓuh }Wzt&} jP1҅t]@PSE} JARA Ѓ9}=h SVP“ƒ1t@PSF맍v]S}WgG E jS gEe[^_]Í&UWS]ǃǃHQPA ЃHPRƒ1txt0H t&&109u9tfjCFSB)@PCDS@)@PjjSe[_]Í&UEP%]UVS]u S5S jVPS1e[^]Ð&US]E S jPPS]]ÐUWVSu} ƆEVPÃEؙ}OM$  0  @ ` P &VEE )6VEE SVͰ&HP;@P+Pt&)؉E1ۅ~]SV%bEVt&0G ~ ftÄt7V G PPЃVg6W Up_HQC(&AB EF8vV5N|KQ\PB6t8X(& V G fP8P<v&V fjE$fPP  t&VJVi5V G fP@PD+v&V fjE$v&F (R,&F Rk&V E$fP P$t&&V E$fPPlt&&Vj06V4u6G]$     0            P    P V fjG fPP .&V fjG fPPЃ  V G fPP+v&V G fP P$v&F (R,~t&&V G fP8P<v&V G fP@PD~&F 0R4ЃvV G fPP.&V G fPPЃ+&F RVEtV^}tG e[^_]Ív&UWVSuV5E} tfjV5+EVƒEЙ}EHQ‰URI Mщƒ}G)U9}]"HQPA Ѓ)HQPA Ѓ9E~uPPV$+ } t%Vi<t9tRE؉PPVI*‰ } tfjPRV-SV6]HQPA ЃH9}U* HQPA ЃPRPV)‰ } tfjPRVL-V(}t\} tDfjV3fjFFVB)@PFDV@)@PjjV-&fjjWV葱} uVRe[^_]Ð&UWVS]S2E} tfjS3+ESƒEЙ}E9uuSƒ9tE)1~׋HQPA Ѓ9~ 1E} t%S<tuPPSt( E9uHQPA ЃH9}HQPA ЃP}tJPPSn'‰ } tfjPRS+WS?Ov&U)y1҉RPS'‰ } tfjPRS*}tZ} t?fjS1fjCFSB)@PCDS@)@PjjS訢vfjjEPS} uSe[^_]Ðt&UdWVSEHQ‰URI MщƒJU9U} }0]KQډURI MщƒJU~eEHQ‰URI MщƒJU9U|)]KQډURI MщƒJvU t&&1҉UERP;ƒ1Ʌt xt0ЍP619U}}]&&]EPS݄ƒ1Ʌt xt0ЍPt&1҅]EPS蓄ƒ1Ʌt xt0ЍP v&19U|I]EPSFƒ1Ʌt xt00ЍP&U t&&1҉U]EPSƒ1Ʌt ΅uhh h h ܖ]]S VE } t-0ҋ} щMQ] SEP\M6&U t$0 ЍH APh Rl[ EE]KQډURI MщJUE9UuMRS߂ƒ1Ʌt xtEщJ &1ҋ]9uE}uE9U| u]9|EE]E9u]9|EЃfjjj EP'Ẽ}}E@P]SV VEP]9~QEP)}>Ext0ЍP 6&1ҋ]EP',Eȃfj]S5,U xt0ЍHv1Q]SVRxt0ЍPv1R]SVC }t5xt!0ЍP&&1ҋE)]]EP}WS ][SVE jEP\TE]HQ‰URI Mщƒ9U|H[ ]EHQ‰URI MщƒRh ]SEЃ uF}č}6fjVj ]SẼ~xE@ E]SC]E)PV]SWvE@P]]SEЃ E jWaSuF}t]rExt0ЍPv1)}t E]؉]REPS, ]؋[uSjV7 Eܨ jEPR]S EP][SEPUҋ]S EfPS)}t.fj[FEPB)CSXDP@)CSjjPE jVKREƀKQډURI Mщƒuhh h h 葑EP} t%0ҋ} щMUQ] SRW EE jPQe[^_]Ít&&U,WVS0ۋutNHQPA Ѓu1jP}1҅t0ɋ@t8uttujPƆ]SOE } t#0} Pu VSVGt&ڸ t%0 H @Ph RNU fjjj EPǃu VjȰPÃ}|uSuVP~ <tuSPA~EuV'tuVuVͧtESuV(9~PuV#HQPA PVR}EuV&EfjV& }|HQPA Ѓ9E|uHQPA ЃEuu܍uuؐ||u^ uVFu+EPuVuVuVE@PEPЃ E jVNG}ԃfjuVj uVǃ념t&Ext0Ht&1+Eԋu^ uVuPEPV E@PEPЃ E jVTNuHQPA PV—V<}t:fjV%fjFFVB)@PFDV@)@PjjV謖uƆHQPA Ѓuh$h h h :uV} t"0} ЍUPu VRvS EE jPaMe[^_]Í&UVS]u HQPA Ѓ9m9| ~JES#tVS赤tEVSSƒ9EEVP~HQ‰URI Mщƒu&C jh Rƃ HQPA PS }t SWS>EHQ‰URI MщƃSƒEЙ}9|}tE}t*EfPCFSB)@PCDS@)@PjjS|ƃe[^]ÍU WVS]E EƃS!EtC 0R4ЃPRwƒ1Ʌt ΋xt0ЍP19~.xt0ЍP v&1҉tQ}uKxt EщJ&&19}C 0R4ЃEPPVVS9~QS\C fjfjRǃS+ƃe[^_]Ív&UWVS]ƃPRZvƒ1Ʌt ExtEщJ19tVSƒ9uEUxt0ЍH1QPVR/xt0ЍP1RPVS @PE@PPЋS fjfjPǃ$}t SSSƃEE jPHe[^_]Í&UWVS]PRtƒ1tƋxt0H &19u&C 0R4VS)ƒ9Mxt0H t&&1PPV fjjPSۜ}t SƃǃSrS|e[^_]Í6UWVS]u}y} t%S<tPS^RPYsƒ1txt0H619~ƃHH~YNFPRrƒ1txt0H 6&1ǃǃfjjVSM} tfjPPSzhSl]fjjPSǃS} uSe[^_]Ðt&UWVS]PRqƒ1txt0H&19|/HQPA H9U}K} t%S<tPS}\ƃH@9HQPA H9}"BǃW RPpƒ1txt0H1fjjVSI} tfjPPSvfjjPShSS[ǃS} uSe[^_]ÐUVS]} t%S<tuPPSs PSZƃHH} ǃPPS‰ } tfjPRSFfjjVSfjjPSϗ hSZSr} uSse[^]Ív&UWVS]HQPA Ѝp9} t%S<tuPPS PSiYƃH@9~PPSA‰ } tfjPRSfjjWS芖fjjPSu hSXS } uSe[^_] UMt/ƁfjAFQB)@PADQ@)@PjjQr]Í&&US]S3tC 0R4ЃU60u uu9S fjfjP ЋS 0P4ЃS ]]U(WVSuVƆfjV99~ϋE9}MRP lƒ1ۅtuhZh hg h E)PWSпƆVQ 6&9}EUEM6EMEU}}hoh hi h i~HQPA Ѓ9E|hph hy h 0~EEPEPjƒ1Ʌt M苆EEPEPjƒ1Ʌt 9]uhuh h h }Ext0ЍP61+UUREPEPjEPjS^]CPEP)]C9]|WPoC萍&ƆxuF jh RЃ EEdžHQ‰URI MщRVΆ VE fjV) fjFFVB)@PFDV@)@PjjV辅0ۋHQPA H9uGRP.iƒ1Ʌt xtщJ &19u.ƆPRhƒ1Ʌt Mxt0ЍP19@PR~hƒ1Ʌt MAPEP?EPV9~QVV @PPЃ\v&EPVƒ9jPEPfjjPV螐t Va džV>e[^_]Ít&US]} t%S<tPSRǃƃ} tfjPPS@ fjjPS؏hSRǃ} u S~Se]]Í&&UWS]PRfƒ1txt0H&&19} t%S<tPShQƃ} tfjPPS hS QfjjPS蟎ǃSL} uSMe[_]Ít&U WVS]ƃƃ} G PSƃ} S虏ƃHQPA ЃH9}'HQPA ЃHƍCTP}}W1P} GP}WVPdƒ1t@Pr}  upƃǃƃt<fjCFSB)@PCDS@)@PjjS螀j}W0ҋ} G tut:9tfjjPSٌfjjPSu$}  u S6t SjEP1e[^_]ÍUWVS}ODG@_FWBfEfEf)fEf)fEUfjE PRe t,tDPWfNƇ+&uj2WNƇM A PW聥ƃ}#M fA f9Gt~ vWƃHQPA ЃH9}(HQPA ЃH&ƍGTP]S.PM APSVP0bƒ1t@PȻ9u 9ujSVMfjVPW ]9~E9}9fjjSW萊Cލv&jEPu/e[^_]Ít&&US]tPSLƃƃƃ9u9uƃ S]]ÍvUS]E x u0ƃPPSfjjPS谉]]Í6&UVSuU EPRV7 <u0}|*V]90 e[^]Ðt&UWVSuV <PVyt,Vl9|RVH RVi~PPVà 9}C*&&V:9~V+)É؃ PV]e[^_]ÍvUWVS}EPR_1t0tEGTP]S,PE PS@PjS- 6&1e[^_]Ít&U WVS]u EPR_ƒ1tExt0H &19}:Mxt0H&1ƍCTP]S/+VM@PS蟷xjSD,e[^_]Ð&UWVS}PgÃGTPEP*1t,SW9~ƋPgÃٍ6&VWjEP+e[^_]Ít&UWVS}] WD)É؃}1PW~}e[^_]Ít&US]P[PEP 0ҋE@t8uu|St SEP:t6<w <v B:uS PPE@PPƃǃS~EE jPi0]]Í6US]Pe6jPjauǃǃS jh Pƃ fjCFSB)@PCDS@)@PjjSx]]Ív&UVSu] SV蛤S]S(S[ @PVV jS)e[^]Í6&UUE M9u9u9u9tJ0ɋ9u9t}tR]ÍUWVSM}WPD[ƒ1tƅuh h hg h 8n] KE|Yڋ9Xw S71҃MA9DP@t,9Yw So71҃@9DP uE}uM}CPt0H t&&1E] E9]~Yڋ9Xw S61҃>}G9DP@t,9_w S61҃@9DP uE}tC땍&M}0ҋ9u9tMQe[^_]Ít&&US]ESP0ҋE@t8uuAjSh PPE@PP:h Sh PKEE jP,]]Ð&US]S3tSVC 0R4Ћ]]Ív&US]h Sh 9PSPƃfjCFSB)@PCDS@)@PjjSt]]Ív&UVS]u 9t*SEfjSVS[{UfRSe[^]Ít&UWVS]} uHQPA ЃH9} $ut&HQPA ЃH~SHQPA ЃH9|&HQPA ЃP6&1҉RP[Wƒ1txt0Ht&19E}}]&&PRVƒ1txt0H1PRVƒ1txt0H19E|IPRfVƒ1txt00H! E t&&1ǃSfjjuVS~}tfjPPSSje[^_]US]U Mtt]]Ít&UE@4@] UUE fPR}]Ð&UUE B PR(]Ðt&UEPP+] UUE B PR(]Ðt&UEM 8ttAjPR@ Љ]Í6&UE@]ÍvUVS]u C8 SVSSe[^]Ðt&UEP[]UUE B PR']Ðt&UEPP+] UUE B PR']ÐUU E}u]Ð]U}u ]Í6&U$WVS]u} EPEPW+]] ]+uu ]j8S6&Et U~1]WR6SMQUGPURCSMQUBG F~̓MMvWR6SMQU躷GPURCSMQ觷UBO F~͸}$tPMQjj]SMQE jS,&Jv&jE P]SNSjfjMQEPEPVMQMQ 0jS蠍e[^_]ÍUWVS]S$E u t>ڸ t0 H & @Ph R* u @tq0ҋE@t8utIU t0 H & @Ph R) 6&h EPBf} }y0ҋE@t8utQU t%0 H @Ph R>) 6&h EP«e ]S/#E E wE Ph St&E ^wu Vh SE &$: &; ; 0< < <  = p= = > `> > pB pB pB pB pB ? P? ? ? @@ @ @ 0A pB pB pB pB pB pB pB pB pB pB pB pB A A  B t&U t$0 H&& @Ph R'6&U t$0 H&& @Ph Rn'[6&U t$0 H&& @Ph R' 6&U t$0 H&& @Ph R&6&U t$0 H&& @Ph R~&k6&U t$0 H&& @Ph R.&6&U t$0 H&& @Ph R%6&U t$0 H&& @Ph R%{6&U$ t$0$ H&&$ @Ph$ R>%+6&U* t$0* H&&* @Ph* R$6&U0 t$00 H&&0 @Ph0 R$6&U7 t$07 H&&7 @Ph7 RN$;6&U< t$0< H&&< @Ph< R#6&U@ t$0@ H&&@ @Ph@ R#6&UE t$0E H&&E @PhE R^#K6&UH t$0H H&&H @PhH R#6&UN t$0N H&&N @PhN R"6&US t$0S H&&S @PhS Rn"[6&UX t$0X H&&X @PhX R" 6&U_ t$0_ H&&_ @Ph_ R!6&Uh t$0h H&&h @Phh R~!nUp t$0p H&&p @Php R.!u Vh{ EP讌 0ҋE@t8utUEPR t&j+]SE@PSe]SuVF EE4 jPE4 jSEe[^_]Ív&UVSu] EhPjV$bP訒F,LdžF |Vt h ZdždžƆdždžjVjV=ejVdV茊tt/M&j#VfjVhfjt&j"VxjVfjV6jVXjVe[^]Ðt&UVS]u C,LǃC |tA jPR@ Ѓt SP辔jP譑VSae[^]Í&US]E PPIPS!]]Ít&&UVSuVoE0VDt} t8]tAtjVc&jVcVie[^]Ðt&UE]Í&UVS]u St e[^]UE%]Ít&&US]jS C4t1S{fjCFSB)@PCDS@)@PjjS`a]]Í6&UMfjAFQB)@PADQ@)@PjjQ"a]Í&&UVS]u h Sh VX7h Sh VD7e[^]Ít&&UVSu] ǃh Vh S;h Vh S;e[^]Í&UEQPAЉ] U WVS}] HQPA ЃujPǓt WuADQ@)@EAFQB)@E3u[}~uVWe)ÃGDW@)ЍHGFWB)ЍPE9E}u)Ήu9E}])Ӄ}}E}1ۋW SuVPЋW PЍe[^_]Ít&&UUE PR]ÍUUE PR]ÍUVSuE PP舗Ãt$CtCth P@PV+e[^]Í6UEǀ]ÍUVSu] SVSV7e[^]Í&&UVSu] SVSV'e[^]Í&&UWVSuUPRNdžvE1ۅttU}WlPCu3fjFFVB)@PFDV@)@PjjV]jW#v뤐&džEjPNe[^_]ÐUEtvB@ tƒzuu1 HH u1 HPЉ]Ít&UWVS}]PSLލvE1ۅtt-VGOKtA RЃǍvLJEjPMe[^_]ÐUUM t @xu@ t)QRu1 P']Ív0]Ív&UEt vRzuB tu1BP]ÍvUWVS}] CPWƃPWZt"tVP+?1҅tBu؍e[^_] UMU EPRQiu1] E]Í6&U0WVSEE MQ谁E]MQS} UMPRJES*EE]ԍvE1҅t1ztEBtEB tP BMLMz6BXtfMMj S@rƃt/)PSMQRjFPMQA9E}6E1t&jSMQ$ǃ &h P9}}}EPbLv&1}tu؃ E P 6&jMQEMQUtMQ5MDE E}t]SM9~ S=puMHQPA PMQYMI MЃ MAxUREPMEPЋME jPJjEP' e[^_]Í&U WVS]MPSH} uMujS&MtMPMMMM6E1҅tօOEPJ~ MjM Qj0toPMhh# fPaOMh@ Qh0 P.Mhb QhU P-MtfjPF~PWMP] F@>PMQ~fjjj MQWMQs |LE@PExt0H v&1)PCPMQ*6&j MQŕE@PMQ"FPE@ttRPLk )‰Ѕt@EP^t0H &1@PRS ME4 jMQF E4 jMQ1 F} M QP?&EjPGe[^_]Ít&&UVSutU fRPm&Ɔ]PSyEދE1ۅtt%VGCtU fRP΍6EjPeFe[^]ÍUS]E PSS\]]Ít&&US]t SS]ǃ]]US]ǃǃSSr#S,_]]Ðt&UVSuE PR71҅tBtK&B t@ @p+&]VSS]pjSbe[^]Í&UWVS}WtJ} uWnzPxI_DG@)CwxWKzPU4p)GDW@)@Wx)Ѝe[^_]ÍvUWVSMQ~ÍEȃSP̰CPEP述CPEP貰CPEP襰 C PEP蕰C(PEP舰C0PEP{}MQPu61҅tU}W MQPЉ|W }WEPЉxMQ,ytM}9pƅlt@t }GuƅlMA}Wt*G RЃ&&x}MAtGEP} WjbjVjjWEPWPbjVjjW%&&tttuTjpt 6EP]SoS|QVjj} W]j$jS"pl&tuVpt.jPfjEP|QVjj} W<$&&jPEP|QVjj} W4 MQtQx|}GpfQtWEPRSjjM QM t&tu'pt &EP} WEPM Q`E@Elt }GPdP]S趭SM Q`}WDžht DžhMY t[C fxuj} WjjjjSjhQ} W C fxjW&MA@j S=gƃtu`ltWpuNh} W_jj)PSh|PxQjh@PW0EPWr_jj)PSh|)ljPxQjhWM Qt^(}Whtunltepu\hM Q^jjjSh|)ljPxQ@Ph@P} W0EPW^jjjSh|)PxWjhQ} W(My=|ЉtM}9luhEP2hEPhhhhP]SH=Eȃ SPEPEPEPEPEPEPԪ EPEPĪEPEP跪EPEP說jS=EPVV||)RFx)ljP}M9fPtQj} WcG$MajEP^=\[^_]ÐUWVS]UPST<1ߐE1ۅtt-W>Ct VUR Fҍ&&EjP5=e[^_]Ít&&UWVS]} fjV}WS_fjV}e[^_]Ðt&U WVSu} WVÃENDF@^FVBfEfEf)fEf)fEEfjWP01 uM QVuE}F RVv&SPs.1t89t=fjFFVB)@PFDV@)@PjjVJPV6_tlC4tFǃSvfjCFSB)@PCDS@)@PjjS+J/6&V:VjVv&Ve[^_]UWVSu} WVEuhENDF@^FVBfEfEf)fEf)fEEfjWP/ uM QVtE}M􉎸fjFFVB)@PFDV@)@PjjV,I|oRP,1ۅtCtPT&VVCt7Cth P*PVMt&&VJVe[^_]Ív&UWVS} 0Gu MA4 uGPMQƃMuǁ| PQEMIDMMA@YFQBfEfEfMf)fEf)fEUfjGPR- uWMQauE}MQ&&MVP0+EtEMYM9uZ9ǃSQfjCFSB)@PCDS@)@PjjSGlt&MMytMQjdMQ MQ| WMQMPQzMPMQXe[^_]Í&&U$WVSMTEEEM A$pa 6&a b b b b b b b b b b b b b b b b b b a b a &Et&Et&MQGMQMRP")ƒ1tEXt+MQrMQIjMQS(wvMQMQMAtVAth P'MPMQ~-6&uEE4 jW 26E0Ҁ}uM fy uA@~Z[M IMUMPR4}E1҅tօEP6F@PW2k0ҋE@t8uuxfjjj&Wl|aXڋE9Xw SN1҃MM܋A9Pt09Qw R#1҃E@L:E9EE4 jP&}tEMQ!MQxMAt'Ath Pj%MPMQEjP4}uMEMt @xu@ t)M QMQu1&P }MËHQPA ЉljvNtL]9u 1&}_MSP)&ƒ1tE0Ҋ@tutM9t6M| PMQVMQMPQe[^_]Í6&UWVSuE @PVRPy%1҅tztzFDV@)VxffEffU1ۍv9~,F SRfEC؍]EPVS@jSWe[^_]ÍvUVS]u fjjVSMStfjjVSzMe[^]ÐUUE B PR]Ðt&UEPP3] UUE B PR]Ðt&UEU 8t tjR6n]Í6UE@]ÍvUVS]u C SVS"e[^]Ðt&UEP+]UUE B4 PRI]Ðt&UEPPc] UUE B4 PR ]ÐUVSEu ]}t@|t P`ft0t&&  e[^]Í6&UWVS}fjURURW<u\G|u]]W@ODUMUu)ETRU])ڋMTR)V)SWNe[^_]ÍvUS]U EPRSC,C  Sd؋]]Ít&&UVSu] UEPRVׄF,F  V SVɅe[^]Í&&US]S B0PB4Ѐc|]] UUE fPR]Ð&UEU @tt fRPV]Í6UUBtt$4fPR1]Í&UEM P|ʈP|]Ðt&UVSuF|t} } tCt t&h\ S <udU ҊF|$ЈF|t VS1Vct0F4t0fjFFVB)@PFDV@)@PjjVEVje[^]ÐUWVS] SptR JYRnv&}SW&MjShRRWQUMUM]U)WPK}P  T jWUUuffVEe[^_]Ðt&UWVS}u ]fjEPEPW*EE)SEE)VWHe[^_]ÍUSUM Z APPRЋ]]ÐUWVS}u ]fjEPEPW]SuVWIe[^_]Í6USUM Z APPRЋ]]ÐU WVS}u]fjEPEPMQ'ESUV)WE )PMQJe[^_]Ít&&UVSMU q BZ)@PB)@PSRQЍe[^]Í&&UHWVSu ]S`SeǍEȃWP跗GPEP誗GPEP蝗GPEP萗 G PEP耗G(PEPsG0PEPfƅCtC|t uL u@]K|ƒ9u$C4%tu&tƅEP]S]KDC@[F]SBfEfEf)fEff)fEUEPEPEPEPRW}WE 1Stt@t ]C4u t ]C|t ]C]CSSP]CPPShd W_E@P}S/oSW|CWS菪jjjjSjjS 0]Chxt؃TPS/]S SEPSfjjjjWjjV,]StҀC|$Ј$ЈC|C4$ЈC|ShdtuS ^u3ME)ȃPUE)ЃPQRV<&hVGME)ȃPUE)ЃPQRV?jPB4jSSjANP5hth| fP,.SS$SV3jPSTSSSjjVLO$jS U}WVFjSSiTSVFjST$]CtC|tghV\FME)@PUE)@PQRVEPV3FME)HPUE)HPAQBRV"&jfjWSSEPEP]C|t6hVESSEPEPVPEEMM0ҋ]Ctt tC4u„tUjhS2SSfjEPME)@PUE)@PQRVKƅ,jSyS9t&j]Ct$fPEPME)@PUE)@PQRV jEPSRSME)ȃPUE)ЃPAQBRV)M$jSd&&Q]C|t:jjfjWME)@PUE)@PQRVEEEE$jSSQ ]Ctt(1tPjfjW&0Ҩtt„t`jEPWQ 1tPjfjEPME)@PUE)@PQRVE$jWQBt&1tPjfjEPME)@PUE)@PQRV$jPQF$xt jVCt>PjjjjSjjVm$SE@Pw]C VRЃuAS_t4hVBME)ȃPUE)ЃPQRV']StҀC|$Ј$ЈC|C4$ЈC|jPDEE jPjEPa"[^_]Ít&UdWVS}u uWWEW\ÍUȃSRSRUR賎SRUR覎SRUR虎 S RUR艎S(RUR|S0RURoE}uEGDW@_FOBfEfEf)ЉfUĉf)fUƋUMĉUMURURURURUR0ɃWtutt uuuEEEEjWhRRWpRG4ƒfRWy[Ph$URURURURuVuV0jUR e[^_]Ít&&UVS]u C|tfjS3VSI~e[^]UUE B PR]Ðt&UEPP] UUE B PR]Ðt&UUE B PRi]Ðt&UEPP] UUE B PR)]ÐUMU Ett(&  ]  ]  ]US]U EPRStC,C  Sd؋]]Ít&&UVSu] UEPRVtF,F  V SVue[^]Í&&US]S B0PB4ЃfjSxc|h( CPtCfjPo]] UWVS]U RS*jU Bh@PS襾SݽƍEPEPU RTPqE9}ƋE|8Uf:frjSEe[^_] UVSUu B|uLJDB@ZFRBfEfEf)fEf)fEEfjVP0e[^]Ðt&U<WVSM MQqhQM:jjSQ$h/j SSCx9C|tPS薖t&hVSe[^_]Ív&UWVS}u G4u F@URURW GDW@_FOBfEfEf)ЉfUf)fUUMUMu(UE)ƒ=RUM)ʃ)RP&vUE)ƒ)RUM)ʃ=RPQUR0WhBufjVRUR ut&0/&uVv&V )ˋU9|U9~9tcSW&ƃ9t VWtWh9wxtVRGWxRW誔fRjLW e[^_]U WVS}u EPEPEPVVVA1ۃuu1FFVB)@)ЋUff_ffJfWf16FDV@)@)ЋUffOffHfGffHfGe[^_] US]CxPSf]]ÐUUPR]Ð&US]M UEPRQS]]Í&UWVS}W>@1ۃuuGDW@&GFWB)@EuGFWB GDW@)ЍP )ʍCЍE 9E~ 6&E)ȃH4E 0ۉ]U)ɉM)ˋGlEwhu9uE=t&&Wtˋu+uUș}u E9~u ދE+0E0e[^_]ÐUWVSu} NDF@^FVBfEfEf)fEf)fEEfjWP <t zt&EPEPEPVNuW9U~E9}3&&M9}@E9|e[^_]ÐU VS]EPEPSsl[h9t=MU)ʋE )؉EB)މuEЙ}ÍEe[^]Ít&U WVS}EPEPW&]9] ~u9uGh569u }+Ohl)ω@U ))މuЙÍt&Gle[^_]ÍvUS]E tAtt&tKtfS蚐ChPAy S蚐ChPaY S蚐ChP聃9 S蚐ChP衃 h  ]] UWVSu}HSF$PSSWU RV,SF jS;<[^_]Í&&UWVS}W@ÍEȃSPrCPEPrCPEPrCPEPr C PEPrC(PEPrC0PEPrEPEPEPWFW;1u])}u GDW@v}GFWB)@t}uGFWB}GDW@)@x}u0x)؉||t))E+x)؉EMt))|SSRQEP)SS|W}WEP(}}t6x)Ë}uTSU)HPVBREPSE+tPVtWEP(SEPV}PUt&&U)HPSBRVEPy|+tPStWVEPZ(EPS}PVEP=}W9u} j}fP]SEM)@PEU)@PQR}W SEM)ȃPEU)ЃPQR}fPj}tP}W; $} j}fP]SEM)@PEU)@PQR}W$ SEM)ȃPEU)ЃPQR}fPj1}uP}W $jh]S0S}W"jS0jW!$jW} t&EM)@PEU)@PQR}W訥} t&EM)@PEU)@PQR}Ww} @&jEP]Sv/SfjEPEM)@PEU)@PQR}W,}W=jjhEM)ȃPEU)ЃPQR}W v} tOEPEM)@PEU)@PQR}fPj}tP}W $} tLEPEM)@PEU)@PQR}fPj1}uP}W $} tDjEP]S%. SEM)@PEU)@PQR}W(jSs.} tDjEP]S- SEM)@PEU)@PQR}W_(jS$.} @t7jEP]S-SjfjEPEP}Wͮ$jS-jEPh[^_]Í&UWVS] uVEP t< ttKtfjjjjjjjjjjjjjj^6jjjjjjjjjjjjjj>6jjjjjjjjjjjjjj6jjjjjjjjjjjjjjjV,W@Exu EEx jP&&}tEEE E EPEEEP}W+U E PuVh(jE$P]S+SM QMQMQMQMQ&,jSQ,M$QMQjjWMQCE@HMP@fUfEPEPMQ VMQjV'Ex jWe[^_]ÍvUWVS}WEP uVEP MMQEP ]SEP EP|H} MMM|M 9M~|Džx|OEx jS`Ex jMQKEx jV9Ex jW&|s|~"|tPW||MtPQm|t@M艍pPQL|~]PS)|OWjjjjjS>U|~|PjjjjjSUjjjjjjjjjjtQT,|PjPjPjWjjjpQT1҃,F9}clvBP{WPsVjSEPTTTB|)PWPVjSEPpT8TB9l|t5||P|JRP|PjREPT|jj|Vjjj]SSt'||PVjSRv||P|RHPRjjSS&&|uGjjjjjjjjjSoR(jjjjjV\RjjjjjMQIR0=t&jjjjjS0RjjjjjV R0jjjjjMQ R} t } E$E$]SI }t#E HP$$jSIh0vE HP$$EHP$$ShIh4CSJ}t$DžxC#}Džx4#Džx4}DžxC&} t } E$E$]SH }t'jEHP$$SHhBShI}tDžx4$}t)DžxC$vDžxC}t Džx4EM$MM$ MM$MM$MċE PMhQ!E$PMdQ%MQƍ}juV[!jx DP]SB% VMQSMQfjEPMQ8jjfjM`QMQ{0jMQxDPMQjjM\QMQL xDPMQjjMXQMQxDPMQ jj}WMQfjEPMQjdQMQ$hQMQjS$jV jdQ$ jhQx Ex j\Q蠼Ex jW莼Ex jXQvEx j`Q^H[^_]ÐUWVSU}u] M$tt1O E(PQSVWEfPE PEP+E(PQSVWEfPE PEP h" fe[^_]ÍUUE Bx PR詻]Ðt&UEPPþ] UUE Bx PRi]Ðt&UUE B PRI]Ðt&UEPPc] UUE B PR ]ÐUS]U EjPRSY$C,P C ؋]]Í6UWVS}W;*!HVSmW.ÍSR`CPP`CP P`CP(P` C P0P`C(P8P`C0P@P`G$PVUuODG@_FWBfDžfDž f)f f+fjjfjW-PSVMV'zjRY$jVm[^_]ÐUS]M UEfjPRQS聋C,( C X SZ~ǃC|ǃǃfǃfǃǃǃfǃfǃǃǃǃǃf؋]]Ðt&UVS]u C,( C X tA jPR@ ЃtA jPR@ ЃtA jPR@ ЃC, C $ VS"e[^] UUE PR]ÍUVS]u VS>,tA VPxR@|ЃtA VPxR@|ЃtA VPxR@|Ѝe[^]Í&&US]Ss7S= ]]ÍUWVS]} uC4}}SDK@)B)U}SFKB)B+uf}fEfEfUfJfUfUffJfUE EUMUM}tS uV Q$Ҁ}tVue[^_]Ð&UVS]U }h it&C|9t]ƉS|0ҋC4@ut„t=S 9|9C|~+fjCFSB)@PCDS@)@PjjSjS-e[^]ÍvUVS]U }h Wrt&9tcƉ0ҋC4@ut„t@S 9|9~+fjCFSB)@PCDS@)@PjjSj@S-e[^]Ív&UUE jPR.]Ív&UUE PjR]Ív&UWVS}u ]MM|efft,؉]W19E~DW1E66&Et"G KSREu߅|\fft#uW29E~;W1E-Et"G NVREu߃fjMQMQWoe[^_]Ðt&UEM fjRQPC] UUE fjPPR] UWVS}0ۋŀt fut futE 9uU9} }E }}EfW]/9E ~ WO/E EE }Éu'EE }f&؉] fLJv&119~,G SRЍ 09M | C9ԉtfLJu t&&fE f)ffW/9E~ W/EEE}Éu(EE}f"؉]fLJEE}f|&&119w|~,vG SRЍ 09M|C9_|׉tfLJu&&fEf)f] +M+E UEw4@u tE}t QSWF" }t hWR(e[^_]Ð&UE] US]U 9thvhF T&f0ҋC4@ut„t+fjCFSB)@PCDS@)@PjjSj`S']]ÍUE] US]U 9thvhv )T&f0ҋC4@ut„t+fjCFSB)@PCDS@)@PjjSjS&]]ÍUWVS}fft 3119~$G SRƃC9܉e[^_]Ít&UWVS}fft G|3t&119w|~$vG SRƃC9_|߉e[^_]Í&U WVSuЉ#] ډF4@MfjVEtfjfjVv tfjfjV  t jV%t j@V%t j@V|%t jVl%ffMt j@VT%߁t jV?%tGf}t fut2ft($fP$fPVWM }tMfjV jV$F4t-]t(fjFFVB)@PFDV@)@PjjVe[^_]UWVSu#] !‰F4@MfjVtfjfjV tfjfjV~ t:V(ƒ9~fjPRVj@V#t9V)9~fjPPVrjV#`tE t fu@t1ft'$fP $fPV` f} j@VG#t jV4#}tLfjVOjV#F4t,t(fjFFVB)@PFDV@)@PjjVe[^_]Ðt&US]M $ˆC4@8t)fQSM%MtS*jSz"]]ÍvU$WVS}u ]EPSWc <EPVW} <fftG SRЃfft t&G VRЃƋEUfEfUffHfEffHfEu]WSFSEPVMfQEM)@PEU)@PQRWe[^_]ÍUWVS}] sxSgES~f7fwfEffHfGffHfGe[^_]ÐUVSufjjEPVPVÃu^|Jv&EtV9E~E}t9u K؍e[^]Ít&UVSufjjEPV#PV ÃuG&EtV9E~E}t9u K؍e[^]Ít&UUE jPR]Ív&UUE jPR]Ív&UVSuU $Ј} jVjhPhh fPX jjV#FxDPVFxDPPЃ,F4@uGt=} t"A R &A RЍe[^]Í6UWVS]} tmftcfft-S PPЃ9| G}tjft`fft*6&S PPЃ9| FVWSe[^_]Ð&USUM t!À t$ψfjPQR]]US]M 0ҋĀt t„t.fjPQSt&fjPQS]]Ðt&UM0ҋĀt t„tfjfjQ]ÍUSUM t!Àt$󈂜fjQPR]]US]M 0ҋt@t„t*fjQPSfjQPS]]Ðt&UM0ҋt@t„tfjfjQ]Ð&U]Í6&UTWVSU JB @Duft*jV=ۊڈHWVU$RW^8uVSxfj@RS <tHN WR҃@Nx9}f@B}Ox9}fBuVMVqD9}ffDF9}ffF}O HRR҃BRWn@RW0ۍ4RVWt0RWuV utpHjPR,S% SFB)BRD@)BRPQV$jSm V$bjV0DF0G$uVS$(R%9}9w|fft1v}W VQ҃}tB94Hv9:u9%fft6&uV WQ҃utB9}fft1 uV WQ҃Pufft+6&}W VQ҃PWVW8@RWQ 8<u8<RRU¤R tVjPRWW)BR)BRPQVA$jWۅ$ۅ$S'fjSWl0ۃuu'f~x~"fjWR; ut^RV u}O VWVUR҃fjVs =}W VWVMQ҃S&fjSW6&uUB9~B9~9uvx+)HFCjPR$WWSVVWV$jW9}x)+HCjPR$VVSWVWV$jW>HS[jSN[^_]Ív&UWVS]C4@ˆUfjSSxSǃ9~ VS9~ WS:UfRSjwSSSe[^_]Ít&&US]fjSPSsPCxPPSS]]ÍUVSEƋjVjhPPhh fPjSSh Vh S?h Vh S+h Vh SS PЉ؍e[^]Í&&UVSEƋjVjhP耾jShh fP$h# Vh Srh4 Vh S^hG Vh SJS PЉ؍e[^]ÐUS]} _jSjhP賽jPh# Sh P讷h4 Sh P蔷hG Sh PzH PЃ}thS vftfjSC4@5ff% fff fC4jS| PCFSB)ЃPCxPS&fjS`C4@uH PЃ}tjS-ff% fff f0ҋC4@ut„t6fjCxPS PCFSB)Sx)ЃPRSsS]]ÍvUS]} _jSjhPcjPuh Sh P[h Sh PAh Sh P'H PЃ}thSu  ftfjSC4@1ff% fff fC4SN PjCxPCDS@)ЃPSR&fjSC4@uH PЃ}thS *vff% fff f0ҋC4@ut„t2fjSz PKxAPQCDS@))ȃPS'S]]Í&UWVS}|u} }u#0Gx9E |W 9E COx9M }.}WE Ph[ fffUftpE )҉U}ƃ}tFE)JE}tWx)ЋUv&})M]9w|#h/h h h 9w|~46]E@ VURЉ]˃9] |F9w|΃}tKU}tUEe[^_]Ð&UWVS}u}u#0Gx9E |W9E JOx9M }.}WE Ph !ffUftpE )҉U}ƃ}tFE)JE}tWx)ЋUv&})M]9$h]h hE h 9~5]E@ VURЉ]˃9] | F9˃}tKU}tUEe[^_]ÐUVSuU fjjEPRVEtVW9E~E}t9^|؍e[^]Í&&UVSuU fjjEPRVEtV9E~E}t9؍e[^]Ít&&UWVS}9] ft;W9E {tvOxE +)Ut&Wx)W;E9] ~&9u|&G SCRƃ9] 9u}0}tM1e[^_]Í6&UWVS}9] ft;WE9E {tvOxE +)Ut&Wx)W;E9] ~&9u|&G SCRƃ9] 9u}0}tM1e[^_]Í6&U4WVSu} u }Et}u+}V9]}V9~E}t0fjFFVB)@PFDV@)@PjjC6&^xVEЃ}NxMt&&FxEVq‰})‰UԃVẼfjEPEPE)PVfjEPEPMQVEEUU,9E}BM))EԃfjjMQMQSMQV$RSE)PR/(}%fjMQPSFxfjMQVxE)+EPSURf6fjjMQMQSMQV$RSE)PR/(}#fjMQPSFx &fjMQWSFxEPV}NxMVEԃ}}^xv&Fx]V‹E})‰UЃV{ǃfjEPEP+EPVofjEPEPWVZEEEUUU,9~B))EЃfjjMQMQSMQV$R+EPQR_.(}}&fjEPMQFx&fjVx)+EPMQURjt&fjjMQMQSMQV$R+EPQR-(}}!fjEPMQFx t&&fjMQMQFxEPMQV`e[^_]ÍUMADQ@)Qx)t]Ív&UMAFQB)Qx)t]Ív&US]SCx)‰@]]ÐUS]SCx)‰@]]ÐUWVSuFDV@)@NxM)ȉEFFVB)@)ȉEMM1Et]fft 91ۋM9~,v9}|$F SCRǃ9E9}}EtcfftF|E>19^|~+M9M"F SCRE9^|EM9M~Et}t}uE9~Et}t}uE9E~EfjMfQVfjMfQVe[^_]ÍUVSuff% E fff f9 0ɋtff@utfftt V0ҋF4@uu&ffШtHX jVJFxDBPFFVB)ЃPjPЃff t?ftVPP6&VPjhP>ff@tV0PjhP=ff}PhPv<A4uA RЃ#ff% tHX V7ƒFxDBPjjFDV@)ЃPPЃfft:ftVPP t&VPjhPh=fftV`PjhP<fftPhPF;A4uA RЃ@t_ff%utGX VƒFxDPV{FxDPPfe[^]Í&&U WVS}WDG@)‰ЋHMtEWFGB)‰ЍHMtE}}E}}EEWPYEU)ЍpEWPXEU)ЍX9]~VGxPj)PW9u~GxPS)ƉPjWfEfEfEfHfEfEfHfEEPWXe[^_]Ív&UWVS}G RЉEtntSfftۉ])&G IMQ׉}W&&Wvŀft-W}߉]M)h6&W΋K|(G SRMЃM)xKy؋E)ȉ&WJU)ʉх}1ɉȍe[^_] UWVS}G RЉEtnO|tVfftۉ])t&&G IMQ׉}W&&Wvft*W}߉]M)eWZ΋_|K|+vG SRMЃM)xKy؋E)ȉ&W U)ʉх}1ɉȍe[^_] UWVS}W.ƃfft҉U}G 19~,6G SRЉƒ9~ )C9։؍e[^_]Í&&UWVS}Wƃfft҉U}A 1ۍ6G SRЉƒ9~ )Cܐ&؍e[^_]Ít&US]C4@0tcte[^]Ðt&UEPD]UE@t$]Í&&UE@t$]Í&&UE@t$]Í&&UE@t$]ÐUE@p]ÍvUE@h@]UE]ÍUS]jjjS]C, C  ChP_Cl ؋]]ÍvUE@t$]Í&&U|0]Ít&UUE B PRy`]Ðt&UEPPc] UUE B PR9`]ÐU ]Ít&US]=0SV tth P能 )ȅth h ~=|0u Sjjjjh h jPf0]]ÐUUE fPR]Ð&UE@t$]Í&&UE]ÍUS]jjS?C, C D ؋]]Ð&U塀0]Ít&UEU @, @ D RP]Í&&UUE B PR^]Ðt&UEPPa] UUE B PRi^]ÐU, ]Ít&U@S]=0S6 tth6 P谻 v6 )ȅth6 h, }=t0u SRfEME0 fEME fEME fEME, j0`> C T Ck C$ UMSKUMSKUMSK UMS(K,fEME܀ fEMEԠ fEME fEME j0輺 @ @ @$ U؋M܉PHUЋMԉPHUȋM̉PH UMĉP(H,jPjSh6 h, jڼPc0]]Í&UUE Ph R軉]Í&UUE Ph R蛉]Í&UUE Ph R蛌]Í&UUE Ph R{]Í&UE]ÍUS]jjjS-C, C  ؋]]ÍU塄0]Ít&UUE B PRy[]Ðt&UEPP^] UUE B PR9[]ÐU ]Ít&US]=0Sf tth P胸 )ȅth h y=t0u S"jjjjh h jPa0]]ÐUE@x]Í6UE@v]Í6UE@t]Í6UEfxz]Í&&UE@p%]Í&&UE@p]UE@p]ÍvUE]ÍUS]jjjS=C, C $ ؋]]ÍU塈0]Ít&UEU @, @ $ RP]Í&&UUE B PRYY]Ðt&UEPPs\] UUE B PRY]ÐU ]Ít&US]=0S tth Pc )ȅth h w=0u Srjjjjh h jθP_0]]ÐUE]ÍUS]fjjjjSW*C, C P C|PVǃ ؋]]Ív&UE]UE@|@]U塌0]Ít&UVS]u C, C P C|ǃ jPWC, C $ VSe[^]ÐUUE B PRiW]Ðt&UEPPZ] UUE B PR)W]ÐU8 ]Ít&U0S]=0pS? tth? Pp v? )ȅth? h8 u=0u SfEMEB fEMEE fEMEPF fEMEG fEMEK fEMEPL jHF @ [ @u @$ @0 @< UMPHUMPHUMPH UMP(H,U؋M܉P4H8UЋMԉP@HDjjjPh? h8 jP\0]̉]Í6UE]ÍUS]fjjjjSw'C, C C|P Tǃx ؋]]Ív&UE]UE]UE]UE]UE@|@]U塐0]Ít&UUE B PRT]Ðt&UEPPW] UUE B PRiT]ÐU ]Ít&UHS]=0S tth P谱 v )ȅth h s=0u SfEMEP[ fEME[ fEMEP\ fEME\ fEMEܠ\ fEME\ fEME\ fEME0] j` C C C$ C0 C<& CH3 CT@ UMSKUMSKUMSK UMS(K,U؋M܉S4K8UЋMԉS@KDUȋM̉SLKPUMĉSXK\fEME j \[ UMPHjPjSh h j賲PY0]]ÍUEh[ P|]Ít&&UE@|]ÍvUE$]Ít&&UE]ÍUS]fjjjjS#C,h C PzPǃ0 P!؋]]Ð&U塔0]Ít&UUE BX PRYQ]Ðt&UEPPsT] UUE BX PRQ]ÐU帀 ]Ít&U0S]=0wSC tth P` v )ȅth h o=t0u SfEME fEME fEME` fEMEp j0 C C C$ UMSKUMSKUMSK UMS(K,fEME܀ fEMEԠ j蔭 @ U؋M܉PHUЋMԉPHjPjSh h jدPV0]̉]Ít&&UUE Ph R]Í&UEh Py]Ít&&UE]ÍUS]jjjSmC, C , ChPMCl ؋]]ÍvU塘0]Ít&UUE B PRN]Ðt&UEPPQ] UUE B PRiN]ÐU ]Ít&US]=0S3 tth P谫 v )ȅth h m=0u SfEME fEME j舫 @ ! UMPHUMPHjPjjh h j˭PT0]]Í&&UUE Ph Rz]Í&UUE Ph! Rz]Í&UE]ÍUS]jjjSmC,0 C ` ؋]]ÍU塜0]Ít&UUE BP PRL]Ðt&UEPPO] UUE BP PRiL]ÐUx ]Ít&UhS]=0S3 tth P谩 v )ȅth hx k=0u SfEME. fEME fEME fEME fEME fEME fEME fEMEİ- fEME1 fEME@2 fEME2 hѨ C C C$ C0 C< CH CT C` Cl Cx UMSKUMSKUMSK UMS(K,U؋M܉S4K8UЋMԉS@KDUȋM̉SLKPUMĉSXK\UMSdKhUMSpKtUMS|fEME@ fEME` jͧ/ @ = UMPHUMPHjPj Sh hx jPP0]]Ít&UEh/ P_t]Ít&&UEh= P?t]Ít&&UEHQPA Љ]ÐUEU RPu1҅tЉ]ÍUU0u u]UWVSu0ۋHQPA H9uKRP"u1҅txtщJ&&19u؍e[^_]Ð&UWEU RPt1҅txt0H &1}]Í&UUE ]Í&UE]UE]UE]ÍUS]jjjS-C,P C ؋]]ÍUEM 8ttAjPR@ Љ]Í6&UE@]ÍvUVS]u CSVSre[^]Ðt&UEPz]U塠0]Ít&UUE B8PRF]Ðt&UEPPJ] UUE B8PRF]ÐU`]Ít&U@S]=0Ss ktthkP vk)ȅthkh`De=0u S2 fEMEH fEMEH fEMEH fEMEI j0蠣vC CC$UMSKUMSKUMSK UMS(K,fEME@ fEME` fEMÈ fEMEĠ j0@ @@$U؋M܉PHUЋMԉPHUȋM̉PH UMĉP(H,jPjShkh`jPK0]]Í&UUE PhRq]Í&UUE PhRq]Í&UUE PhRq]Í&UUE PhRq]Í&UE]ÍUS]jjjS}PC,LǃC |؋]]U塤0]Ít&UUE BlPRC]Ðt&UEPPF] UUE BlPRiC]ÐU帔]Ít&US]=0StthP谠 v)ȅthhb=|0u SBfEMEi fEMEi j舠@ UMPHUMPHjjjPhhjˢPI0]]Í&&UE]ÍUS]jjSOC,C ؋]]Ð&UE@|$]Í&&UE@|$]ÐU塨0]Ít&UEU @,@ RPr]Í&&UUE BPRA]Ðt&UEPPD] UUE BPRIA]ÐU]Ít&US]=0SftthP蓞)ȅthh_=|0u S"jjjjhhjPG0]]ÐUUE fPR]Ð&UE@t$]Í&&UE]ÍUS]jjSOC,C ؋]]Ð&U塬0]Ít&UEU @,@ RP]Í&&UUE BPR?]Ðt&UEPPB] UUE BPRy?]ÐU ]Ít&U@S]=0S tth P v )ȅth h ^=t0u SbfEME`! fEME! fEME! fEME! fEME! fEME" fEME " fEME@" j`  @ - @= @$N @0_ @] UUE B PR ;]ÐU帬 ]Ít&U0S]=0pS tth PP v )ȅth h Y=0u SbfEME fEMEP fEME fEME fEMEP fEME jHؗ @ @ @$ @0 @< UMPHUMPHUMPH UMP(H,U؋M܉P4H8UЋMԉP@HDjjjPh h jϙP@0]̉]Í6UEjP]Í&&US]U EfPBJ)@PB)@PQRSρ]]Ð&UME fPAFQB)@PADQ@)@PjjQ萁]ÍUE@4@] US]U C؋]]ÍUEU ]Ív&UE]UE] UE] UE]UE]UE]UE]UE]UE@|]ÍvUE]ÍUS]fjjjjS C,( C X ؋]]U塴0]Ít&UUE BHPR97]Ðt&UEPPS:] UUE BHPR6]ÐUVS]u Slt90tSl퍶e[^]Í&UWVS]} uSKlt"Qt9t9t Slٍt&ȍe[^_]Ít&UWVSu} EPWVHF \" j 萖ÃS`C^$jjhtfPzvF$ F(t9t4W莩F,VPTQF, hVhPTt&&F,h?ue[^_]ÍvUVS]u C \"C,t SPpQK$tAjPR@ЃVSkHe[^]Í6UUE B(]UE@$HQPA Љ]Ít&UWVSu} ]uF$HQPA ЉÃjFƒzBB F$RjP]c؍e[^_]ÐUS]E PC$Pt C$jPe]]ÍvUE@$HQPAЉ]Ít&UEU R@$Pm1҅tPЉ]Í&&UMU PRA$PytЉ]Ð&UEU R@$P 0҅tPЉ]Í&&USUE ]PB$PtX]]Ít&&UWVSUE }uPB$PÃtK{ u3jjj$ғP葦C h"htfPsVWC P跦t&0e[^_]Ít&UVSUE u]PB$P%t@ tSVP菦&0e[^]Ðt&UVSuE~(t8uzSC t t@ t΀C PRF$P tExt?P thpRM]t&&PV7C  0e[^]Ðt&UE@,] USE] 8t%t!K tA jPR@ ЃS]]Ðt&UE@]ÍvUVS]u CSVS.]e[^]Ðt&UEP4e]UUE B@PRy1]Ðt&UEPP4] UUE B@PR91]ÐUS]SxCC H ؋]]ÍUVSuU E]jPRVxFF H t hVՇe[^]Ív&UVSuE ]jPVwF F H t hV艇e[^]Í&&UVSu] MUEfPRQSVnFF H e[^]Ðt&US]M UEfPRAPPS+CC H ؋]]Ít&US]E PSC؋]] UWVS}u ]WvGG H jSVWP}e[^_]Ít&US]E PSoC @ uhhhhthn؋]]ÐU$WVS}u >u<]SMG P A $ЈA SW E&V fzB t VWՃBRfEfUލE܃fjP]SfjjV BPBPjjVjjSyMG P A $ЈA 4SWEjSǂ$t&]SwVSSWjSe[^_]Ðt&US]E jPS譏؋]]Ít&U WVS}U EuPRVӣ]SVSSWEjS-jV"e[^_]ÍUUE BPRy-]Ðt&UEPP0] UUE BPR9-]Ðt&UUE BPR虁]ÐUS]U EPRS{?C 8# S؋]]Í6UUE B 8#PR?]Ðt&UEh$P]Ít&&UUE Ph$R]Í&UEh)P]Ít&&UUE Ph)Rk]Í&U <tA jPR@ <]Ít&U=<uhhhiM$}( OME PEP} tEPMQv&EP}W考uV(EM9M>EE)M}9} ~ E } EM19]$~A6EPMQPU R}MD9PRjV苻 jjV}WZ"C9]$}(~HE PMQۂ1ۃ9](~.u$uv3PU+U$RPE E$P}W C9](ۀ} t EPMQ EP}W耂19]$uvE$EPU)REE)HPRPE E$PjVĺ jjVMQ!C9]$Gt&}9} 6EEM )M}9}~ E}EM19]$~@EPM}TRPEPMQPjV? jjV}W!C9]$}(~IE PMQ菁1ۃ9](~/}$}}uu$6MQEPVP}WC9](} tEPMQvEP}W019]$~HuvEE$PEE)HPU)RPRE$EPjVx jjVMQG C9]$]S}W1EEjPL'jSe[^_]Í&UUU؋MQIMURBUSCMQ5URJUWSCMQ! F9u$ȉ}UUE+E$HE19u$~=MMԍ6URBUMQIMSCURٱMQWOSCURȱ F9u$jjuVMQN}(thE$P]SjURjyM(QURzM$ɋE)PE)PEE$PE E$PURE,SMQyjSЇ]SURxEjVjS裃e[^_]Í6&UWVS]}(}E PEP@}j WEuuVURU RjW蟰URU RjW菰 URU UUURjWpSURxjjWUR(^SU RjWES]KSjW7 URSjW'U RURZxjjWUR(}}FP] CSjWuFVSjW֯ VEPjWïU$RURwjjWURH(URSjW蘯URURjW舯 VURjWxU(RURwjjWUR(},teE$P]S贅U,RURwjUR wEPEPEPE PUR,SURwjS肅]SURvEEjPjSRe[^_]Ð&UWVS} u]UE$} tPBPBPBPhPBPBPhBPMQSVWMQ^e[^_]Ít&UWVS} u]UE$} tPBPhBPB6PBPBPhBPMQSVWMQe[^_]Ít&UWVS}]u }}}~ }~}hhhhh\G PEPG$PEPSWujWRv1ۃ9}*E)PE)PEPE PW7C9|׃}$t6jWuM$QWu6E)PE)PEPE PW$uVWt]SWujSwjVoe[^_]Ðt&U0WVSu} ],M$(MQMQtSEPo4$EЃt^0ۋUB9E~ B9}ÄtEƒ@ 9s 629rCЍe[^_]ÍU=2u"EPEPL}t22]ÍUix<uЉ]Í6UVSu] 9Xu&@tPAp@@zt&PtIPRSi‹PHt>P9~7)PjPvj"jPf‹P1҃xtډPe[^]Í6UEU P$]Í&&UWVS}]uMQ} ~!~~|u}uh M0 t&Eu h+Ltt΍6& uVMQM9puU ӍB}B>EЅ}M)MMωM MEPAcƃujMQ%EMM HMxX MHMMHMp ]*}tMQjE)Ph ]Ouְe[^_]Ív&UU@@ @@@@@ @@$]Í&&US]@ tPm@ ]]Ív&UDWVSEjhjMPR@PM Q<t 0Efjfjfjh RP%EEEMM9HQMQƋMQM QEԃMPJtj%}jjPWU2(ÃUu*%]C]jSPWU (U}w,ˋMԈAMԃ뜍EP&EM@E }t EMMċMQM Q}1ۍ69]ځ)ЃpǍ)ЃpƉ)Ѓ`E ‹E RSM Qk Cv6EMM9HQMQ}ƋMQM QnEԃM@09s-6 ʈU$ЋMԈAMԃ9rE댍t&]؍EPS.S 1t3S1PS0HPM Q S\1Ǎ&jS/]ESu[jS$e[^_]Í&&UWVSjjj MPR@PM Q<t0b16M 9x~RWQKWMQ?ƃM @9s PFMQUU9rG멐t&e[^_]Ít&UWVSjjj ]PR@P] S <t0&E] ]9XS] S‹]S]SU{ǃUxuK1] 9p])P]SUU}uGF빐16] 9p~BP]SUMuUMuGF&&E &e[^_]Ít&UWVSjjjUPR@PU R<t0&jURPjU RjURPjU RE(U U9PRU RNjURURƃUxu.1ۋU 9X~Rڃ)$GuFC׍v1ۍ6U 9X~"ك$GuFCލv&E`&e[^_]Ít&U,WVSjjjMPR@PM Q<hjM Q jjM Q MHHx tb1M9p~VVQo%A؍y.F릍SebSYby t u 06MB }B 1҅tӋދt79ssv(C9rM&9s<%P}΍&&Dž69H9@PMQËދt)9se(C9rA9s<%P}΍&&QM QËQjS^Dž9v%ƒ uCDž9~ RBt2~ RA9~AF9L &tQc`t QK`[^_]Ít&UWVSu }]SX@ t u6uSVzt& uuSV/v&x u uEPV)t&x u8uEPVr& uEPVZ 9x uVEPo8&x uhq?t&&Wh?]SURjSEe[^_]UWVS}u Mz tz uAv]Sv&9JuVWT QBPjBPBPEP3C 1҅tE@ 1Ʌt[9sRBA9rEHP@PRQT ]SWjSe[^_]ÐUWVS0ҋ} x tx$ut]S"S}WxjS} z u%]jWSfjS}WjS_}jjjBPBP]ShjS2$jjS%jS} x 1} 9p:VW3Ã@؉VEP¹9v2C$t u BאIӍ&F녍&} x 1v} 9p~"VW$.Fݍ6&16} 9p~rVWkÃxVEPO¹9s:C(t uB&I9wF눍t&]S}WjSt&&jhjBPBPPS164Fy@Fҍ&&} x ue1v} 9pVW[Ã@ VP8ƒ9sCB9rF먐&} x 1v} 9p~"VWk.Fߍt&&16} 9p~RVWÃHVPƒ9s(CB9rF뫍&SSVS}WjSjVE[^_]Í&U4WVSM x u]SCQ&&x t*]j M QSMfQSuV!t&HM@EjjjuVQ]S0hjSS$jjSFhS jM Qp%EEju VWMD%$9Et9]KSV8%9EtSV"uD%9EtE}jM QuD%EE}OWM QD%9EtFWu V%9Et-WVWVMD%9uE}t EHPu ViMD%EEv}VEjEP7EE19}~Ӌu܉uM؉M܋EH9tGPEPEv&EWu VE1ۃ9]6twtsEH9tkEH9tcSM4uGSu04u+u2كM4uu24tCM̋u܊1‰كMs%uԋ%9EuE ‹M܋üEC9]4Gv&}6jEPEE19}M܉Mu؉u܋EH9tGPEPEv&EWM QE1ۃ9]6ű%9E~CM EH9}CM ~؃M EH9}؃M EC9]YG ]SuVCjS[Ee[^_]Í&&UEP ]U(VSuU EPR]SS E؃t SVMjSE؍e[^]ÍUXWVSuVEHURU RV ]VSEHS}W襆jWURW]SSy E WmURU RV }t SURjSjWƆEHjVdEe[^_]Í&U(VSuM Ux t7RQ]SlVSeS EjSE 0e[^]Ðt&U$WVS}] hPuVSV V3 jV[e[^_] U$WVSu} jP]ScS= t SWjSe[^_]Ð&U WVSuE PEPc0ҋE@t8uffjjj/]SfE|J‹E9Pw R1҃EPt0H1@PRSe fjjj\]SOfE|C‹E9Pw R1҃EPt0Ht&1@PRS fjfjh]SGEPjE@PS5J |L‹E9Pw R1҃E]Pt0H t&&1@PRS EUBRPbjEPFH0ҋE@t8utAUt 0Hv&@PhR ]SV1F EHjS8e[^_]ÍUVSu0ҋx uxu„tnC 1҅tы[1ҍ6؅}C9} Bt&1҉ك9} v@B9|jV0jV&PjV]SjVTe[^]Ít&&US]SCP7C CP$C CCC C؋]]Ð&UWVS}u ]WKSGP`G PG GwG Ge[^_]Ív&UWVS}u ]WSGPQ`VGPG`GGG Ge[^_] UVS]u Ct PPOC t P@OCCHjP#CC HjPjStSOe[^]Í6&UWVS}E ]uPWw_fjfjSGPADUWw UW$e[^_]ÍU 2tAjPR@ 2]Ít&US= 2yj OÃSC 2hhtfP/ 2 hPo Hh hy jhhh@ hЉ hhh,h@ hЉ jhhhh@ hЉ hhhJ(h@ hЉ jh h,h@ hЉ hhh(h@ hЉ jhh"h@ hЉ jhh)(hД h` hh-h6h hШ hh:hF]] UVSu= 2uJ 2PO#ÃtF@ttVPK&)‰Ѕu6 2P#봍v1e[^]Ðt&UWVS}u]= 2uSV0t?TufPU RURj(XMPhrhtfPL- 2$SjP[e[^_]ÐUUE PR]ÍUUE B]UWSU ]t0H t&&1@PRSe[_]ÍUUE B]UWSU ]t0H t&&1@PRSe[_]ÍUVS]u Ct PJVWCe[^]ÍvUVS]u C t PJVWC e[^]ÍvU(VSEP]S[jSC<uS6S^jS 6jS1e[^]Í&UWVSu= 2uV B0PB4ЉEV jEPBHPBL1҃9}6|*uD*B9|1~uP~LD( 2PW Ãt3jjEPCPAu 2P ѐ&xF MQP8R@<Љe[^_]ÍU0WVSuEP~uE0ҋFHt9uF@P}WjW<tjW~FPÃtOE0ҋFHt9uu.FPttSR3G )Љ…tE}t )t%jEP*jEPN EP]SUR J@MQBDЈh tjEPjS UUMMu‹]EĉEtt tu f}u}~jEPjEP }t:u}t/u}t$jEPYjEP} &&t t"6u t&6& uE#&UԉUu EQEPWURMQ}W:Ex ujWjEPt&&UR MMQB8EPR<҃}E uE1ې9]~{MI lEPURIHMQl@LU ME  QSWUR J@MQBDЈdC댍UR MMQB8EPR<҃]{t[ؙ&1E@ EMx-MI SEUPQHURILщƃ 9uMyԃ}GjuVȉA؍}jVȉA؍}9V]y]4V>Ehht}fP !}lEEEUtM9M(E@ P`URHdщlE@ P`URHdщlt;tT lt7lt>6&EEE+EPt&&MMAt&E@ P`URHdщ]E@ P`URHdщ]E+EuUt&l;MI A`EPQd҉lFl$FKut$UR J`MQBdЉpF@UR J`MQBdЃlMI A`EPQd҉lKt4dl$pvdFpFKut lF}}}E)t6ME@ VURHHMQ@LЉÃ 9UMlMd19t~GE)p6dlBd  dBlC9pɋE^dlF}MQ&}Dž|1EUtv9}MI A`EPQd҉ÃMI A`EPQd҉Ãt&t?v&t+t6Dž|GM)Etpt&}d&UR J`MQBdЉ|UR J`MQBdЉߋU)|Mtt&E@ SVPHURHLу tE@ P`URHdу|SE@ P`URHdуdPV7|ރ }?M6E@ SUMRHHMQ@LЉƃ 9 My&jWjEP &W8NjURs}s>xM6MEU4MI xPWQHURILщd x9uKd9s8d d@ dR щ d9rMxt WB9]SMQjjEPjSjURlP[^_] UpWVS]CESuVtEPuV'UJtRЙ&&1ɉM0ҋMy uy„t4E@ЉJ}JMETt&&UJ u5B@J}J>EEv&uuMjS_jEEPjh|]S3fEfEUru6uEBUSuVE(UBErufEfEfEEuruE E BEЋRUԍuVEPUz }RP6ljEX1ɍ6E9H~ DBDBBBAݐt&uV E@EPWrPuVRTU҃ t W60ҋMy uyt„t!]juVSSVjSG}t}uHExOMvEX uVWEPTRsPuV[T]Ӄ OyvEP4EuVjEPm3u~O}u_WEPËMUrrΉu9sC$ˆA9MwE@tRIt&&WEPƒE@M9s6BAAA9rE@ EuVEPuVPURFTЃ -6&}t uV)5jEPsjEPe[^_]Í&&UlWVS}=p]]G P`R@dЉ9fHfEf $ƒt5tt\#u^G jd]SPXR@\Gt&t q-&f] u#u%G jd]SPXR@\Ѓ =pQe[^_]ÐUWVSWH)V<)MISQ jPBHPBLЃPu*x9DBtDB u-jP/jP)xw^$ &Њ   Њ   &DžDt&Dž4t&Dž $t&jSjV`)jW&3QQuDž&QtH=wH=w v#jPjP(V6~h hthh{%PjQQQSx u&jS^jP (t&&B}Bs  IQ 0Dž69Q QQBHPBLЋQPƋ<9s(KC  ʉݍ6&it&Qo0 Dž9Y QQPPCHPCLЃ 9|ADž69"QP诿NjuKvN11ۍ6Q||҃ ƒC~؈ЈG6&u'NQ@GNur6}F6NtZQQËQt  Ћt Љ뤍t&t&u7jShjS9 jjS, w&ug@PP1ۃ69|D)ؙ ‰ RSPĽ C&&SMQ jMQ5jS荻jPO$ jP>$h[^_]ÐUE@@Ph]Ðt&UWVSS"W"MIDžDžPmhSR$hWG$Q h,VBXPB\ƅ PjVS$u"jPVW$9uƅt"(jj jP"Q h,SBXPB\ƅPjSPZ$u(jPSP=$9uƅt"(jj jPa"H=wH=v$jP膹jPH"v6=pt4A h,SPXR@\Ѓ t]hSZ&tjjjQQS苾x uLjSjP!jPҸjP! hjS裺 jjS薺Dž1jSºhV%Ëy v9sS9DPt Bt&L:V9DPt B&L: A09u G9~t WP˹DžhS8A h,QPXR@\Ѓ t$hQ[$Ã6&SMQjMQjSjP jPt[^_]ÐUWVS]CtSEpP舶E@lE@hUC@PRmlPE@PhuV'tP 0щHPVBPtPRTTҋhPE@Ph V['tP 0щHPVBPtPRTT҃ E@Ph#V'tP 0щHPVBPtPRTTjS,Ex t*]jpPS~SpP豵jSYExt*]jpPS{SpP~jS&jpPնƒʉ ATˉTyjpP舶ƒʉ ATˉTy91ۍ60+xC ~ 6W+xC~t#1ۍu6)؊+x+xC~1]jEP`DždDž`E@\ly llX\\0CxC%T(xC(xFCdl9du4hH9`}%``PEP蚵Džd\f,CGX C CtP 0ɍ}щHPXPBPtPRTTҋX1 v&?th?StP 0ɍ}щHPEPBPtPRTTҍE EHjPjEP^H[^_]ÐUWVSu]Ut=t"0H 1@PSVxDw j{V@5xu j.@vM A P`R@dЉÃty"u߃to1M A P`R@dЉÃtQ"tG9xu}*PV4G‹9Pw R1҃@Ј륍&u 0$&9PwRq1ҋ@e[^_]Í6&UPWVS]SE DžhS4}tSjEPXE@H UBPRRAXPI\у jv&} tJE t!0ЍH1ɍAPRS# &&EHjS( Efjfjh:]SjjE@PS. }jSE t&EPE PPuVXƒtjSfEHjV t&EPEPEPEPhDE@P''jSEHjVT &Uԁ }{jSEHjV jEPUjEPEHjV &EEHjPEEHjPjEPjEP`EHj 6&PDžTHjPXDž\HjP}`DždHjPbjhPEEHjP<EEHjP' jEP%jEPEHj vjRjEPEPEP fjfjh9EP@(EfjEP躲EHEEEEPE PPV€PE EPE ]EPVS-6 SPMEHjSۿUExtI &1QEPVR7]SP=PP; PVEHjS]EHjPEEHjP-0ۋExu j(MA8cu#9Qw j 1҃E@Ѐ8 tfjjhPP0ƒ|Ext0ЍHt&1QBPVSb6|SVEHjS`fjfjhThSjjE@PS? fjjj Vc/ƒ| RV.`PļDžd XP諼Dž\ PP蒼DžT Ext0ЍP &1҃ wt)6&g6HjjVS/5`SP蟿DžLHjS*@jjVS4XSPfDžDHjS8jjVS4PSP-Dž PDžTHjP賹XDž\HjP蘹`DždHOiEHt!thiQt&&i)ʅt:hPEP@PE@PEP} t&hphSjjE@PS~+6&ExtщJ1RjVSt0@PP^ PPEP@PE@PEP DžHjP)jhP EEHjPEHjPq&DžE9E1EPE PPP€fPEP`ƃEXt߈щJ &1ډ}uPff19}9zCPEP1ȈFGǍEƄ(19}~>69v4EPSPKPEPʈF]ЃG9}t&}tEPEPjEPjEPdjEP EEHjP$[^_]Í&UVSu]SxR)ȊxRRt&&wRRR]Ít&UtWVS}jMQuVfMx t(]jQSܳSVjS轡&MQVh9]SuEHM@E1E]vM9M}\MQEP蟣E1ۃv9]~/M4 VMQuGWVMQ Cѐt&E맍t&&E@~EEPE MAP]S:8hMQhWhMQhMQhhuMA@PV茿E@PhhS2KPMP KPKPKPMPJPIPJPIPJPHPJPHPJEHjV2EP]SbSIS(PEP~ƒ Ex$t0%9u%SPMQPhEP#Ct&%P%PPSPMQPhEP"SEԋ@PhEPIPGLPI'6&EM9MMQEPNjEE@PEP"1ۃ69]~o;PEPPMQƃUӋE9Pw R޺1҃EP}u%؍PE9Pw R贺1҃EPFC덐UUE9Pw R苺1҃Eԋ@hEԋ@PhhEPHP3KPHPHPHE&h]SrHPJjMQKjEPjS6EԃEHjPðjEPUjEPje[^_]UEU 8tR]Ð&UE@]ÍvUEPT]UVS]u CSVS~e[^]Ðt&UUE PR]ÍUUE jjPRL]Ð&UEPd]UEP]UEP]US]E PS?؋]]ÍUMU EjPRQ]ÍUUE jjPR]Ð&US]E fjfjfjPSC؋]]Í&UEU 8tR]Ð&UE@]ÍvUEP]UVS]u CHSVSe[^]Ðt&UUE jjPR]Ð&UMU EjPRQ]ÍUS]M UEfjfPfRQSCH؋]]Í6&USE] 8t*t&jCPCHjSS ]]UE@]ÍvUVS]u CSVS>e[^]Ðt&UEPD]UEU 8tR ]Ð&UE@]ÍvUVS]u CSVSe[^]Ðt&UEP$]UUE BHPR]Ðt&UEPP3] UUE BHPR٬]ÐUUfE }tf ]Í6&ff!]ÍUEtAjPR@Љ]Ít&&U(WVSutNAjVj PQP҃}}uLj ÃSC]hht}ƒfRk u}j\: E܃P6]܃Su܃ uV}܃} uF@F0uVb0}܃L}Whht}ƒfRURuVU RSU$R}W$URuVQ}Wu܈VWVWVW8G:O<_>fUfEffJfUffJfUUMV N$W@GBOD_FfUfEffJfUffJfUUMV(N,UEH׉u‹}܈WH ˆWIU(RuV]}@‹u܈VPW,VTW0VXVj}We[^_]Í6&UWVS}tWJjWj!ARAЃMtyuhhvMQƃGPVt VW]^G PS<t SW\^ G$PSl<t SW>NMW Щ u909UuG9Ftt FPWjF8Gt%PWJkF8Gt%PWkG8O:W<_>fEfMffHfEffHfEG@OBWD_FfEfMffHfEffHfEEPF Pt#F&N")@PF$V )@PQRWEPF(PTt#F.N*)@PF,V()@PQRW]GHP^0S4tfjSWy VH8tfRWN VI8tfRW^LG(PS<t SWU@VP8tfRW}FTG,FXG0t2jSjF PDjFP9 jVё VpMyutAjPR@LJe[^_]ÍvUVS]u u hVC PI S[e[^]Ív&UVS]u u hfC 8tC P C p@h P4MS[e[^]Ðt&UVS]u u hC 8tC Pb C @@V PLS.[e[^]Ðt&UVS]u u hVC$PiS]e[^]Ív&UWVSu} u he^$;tF$P ^${hCP:LKtAjPR@ ЃCV]e[^_]Ðt&UWVSu} u h^$;tF$Pa ^$CWCPKKtAjPR@ ЃCV\e[^_]Ðt&UVS]u u hcs,0ftt„tuSJEPSj0ARAЍe[^]Ðt&UWVS]u u h.9s0tqC4C0t P^tOC4<t6x{4@<u{4P‰S0{4PVR &C00ftt„t%C4EC0ESJEPSj1ARAЍe[^_]Í&US]u h^'0ft 8E uuAM fQjS t#M MSJEPSj3ARAЃSg]]ÍvUWVS}E P8X:H<p>ff_ffHfGffHfGe[^_]Ít&&UWVS]u }u hOfs8f{:fMfKtBfuf}fEfHfEfEfHfEMMSJEPSj4ARAЃtSf fjSe[^_]Ív&UWVS}E P@XBHDpFff_ffHfGffHfGe[^_]Ít&&UWVS]u }u hOfs@f{BfMfKDfMfKFtBfuf}fEfHfEfEfHfEMMSJEPSj5ARAЃtSe fjSe[^_]Ív&US]u h0ft 8E uuAM fQj S t#M MSJEPSj6ARAЃS*e]]ÍvUEH]ÍvU(WVS]u h}tu{HWM QV / {Hu ECHfD@uZCTfD@uLCLfD@u6CPfD@u&CXfD@uC\fD@uEt)KHMMMSJEPSj7ARAЃ}t fj 6 ufjS_&Sce[^_]UVSuEPE P^HS')fjSVe[^]ÐUVSuEPE P^HS7)fjSVze[^]ÐUVSuE PEP^HSG)fjSVJe[^]ÐUVS]E PsHV[)fjVSe[^]Ðt&UWVS]tvfCBfC@fC:fC8CHjQPAfCDfCuV#{HfjSe[^_] UWVS]C P}WC$PuVjSURSURURURU RSz,VSWS~jVfjW^e[^_]Ít&UVSu] MQ BPBPjjQCPPVQe[^]Ð&UWVS]}uj@@@ h+htfPxpxU R PCe[^_]Ðt&US]jjhSz؋]]ÐUS]E PjhSX؋]] US]M UEPRQS'؋]]Í&&UUE Љ]Ít&&UVS]u Ju P'tSe[^]Ðt&UVSu8t]VSdSVjSe[^]ÍUVS]u JuP؍e[^]ÍUVSuE PRPR P]SSVjS e[^]ÐUVS]u 9pt S(pe[^]Ív&UVS]u 9pt Spe[^]Ív&UVSu] VS PSAe[^]Ív&UWVSUE E0:9tIG9FuEG9Fu=VO ȩ u9&09u G 9F uÄtEEe[^_]Ít&&USM] B PBPQUrƒ@PRCrPzF]]ÍvUWVS}u E@EEPWymEPWlm]SWOFEPEPS]S SV jSIe[^_]Í&UWVS]} uj@ @@hGhtfPpWP?@e[^_]Ít&US]jhS|؋]]ÍvUS]E PhSZ؋]]ÐUS]U EPRS;؋]]Í6UVSuE ]jPVSjP‹Pe[^]ÍUUE Љ]Ít&&UWVS]u z8u(HtAjPR@ ЃP tSe[^_]ÍUVSu8t]VSSVjSue[^]ÍUWVS]u z8u%HtAjPR@ ЃPe؍e[^_]Í&UVSuE BuBPBP]Swt&PBP]SBSVjSe[^]Ð&UVS]u 9ptu hROSpe[^]Ð&UVSu] VSP=e[^]Ív&UVS]u S@HtAjPR@ ЃVjPE‹Pe[^]Ðt&UWVSEM 1M99tLG9FuHV O M Щ u 9609Uu G9FuÄtM MR9PuEEe[^_]Ð&UVSu] BPBPVmPAxu @PVe[^]Ít&&U$WVS}E@EEPWh]SWAE<uEuVVWVS]SJSU R@ jSjVM-t&&%PS]SSU RjS^e[^_]Í6USE] 8t6t2jCLPjC P'jCPjS~ SS]]Ít&UE@]ÍvUVS]u CSVS莿e[^]Ðt&UEP]UUE BPRٓ]Ðt&UEPP] UUE BPR虓]Ðt&UUE BHPRy]Ðt&UEPP蓖] UUE BHPR9]ÐUVSu8t]VStSV jSe[^]ÍUUPUPEPP&hpf]S$jEPdjS#e[^_]Í&UWVSE uPVgE`V]SC"S}WbjS#VDž|xtMpMl}]ątC P@R@DЃ0<EPxQe|~}t hj|UBwV]SxQ6}%PS]SStQjSS BwxpQ,EpQxQ-}fPpQ]SStQjSEjpt&u[EPxQ[0E؃@xuhhhhCEPEPtQz f6BXlQHE`]S5E`WuVlQxQIlQWSxQ/ SVuEt*tdt+ t6Wt&]VWS%.v]VWSv]VWSv]VWSEStQjS0jEP"jWEE`jPuE`jlQ])t&uV!]SMQ:jSjEP`jVo`[^_]Í6UEU RP]Í&UWVS}u ]S訌E`SWSV E`jS豍e[^_]Ðt&UUE BPR艍]Ðt&UEPP裐] UUE BPRI]Ðt&UUE B`PR)]Ðt&UEPPC] UUE B`PR]ÐUS]U EPRSKC  =2uS ؋]]ÍU希]Ít&UMU EPRhQ觫]ÍvUMU EPRhQg]ÍvUh] UU=2ue=!u R?fEME j UMPHjPjjhhjP2]Ðt&UE]ÍUS]jjSC ؋]] U2]Ít&UEhP]Ít&&UUE fPR蜢]Ð&UE$] UUE PR]ÍUE@]ÍvUUE B PRɝ]Ðt&UUE B<PR虊]Ðt&UEPP賍] UUE B<PRY]ÐUS]U EPRS軜C # SFC$؋]]Ít&&UVS]u C #{$t SVSe[^] UVS]u {$t SyUS(VS9C$e[^]Í&UVS]u C$ufjVS&&PS VSC$e[^]ÍUS]C$tPSڠC$]]ÍUS]E 8t0$&{(t SSKF]]Í6U3t( 3tAjPR@3]Ð&US=3uEj ÃS1C3hhhfPh ]]Í&UVS]u UECHPRC$P} t SVCH{He[^]ÍUVS]CHP/ s$hdV莲jjVA3 SjP0e[^]Ðt&UWVS} u=3u3xu;jLÃjjSՙC tjjC$Pav&jP(VWURPe[^_] UVS]u C tC$CDjPVSe[^]Í6&UEU 8t tjRƎ]Í6UE@]ÍvUVS]u CSVS订e[^]Ðt&UEPD]UEM 8ttA jPR@ Љ]Í6&UE@]ÍvUVS]u CSVSne[^]Ðt&UEPt]UUE BPR蹅]Ðt&UEPPӈ] UUE BPRy]ÐUVSujjV~ F8jÃCCjShfPC e[^]Ív&UWVS}] jjW G8j1ƃFFj_hfPF 7SWWe[^_]Ít&&USEB ÅttɋR ]]Ð&UWVS}] @ EsPWʄ<t0V X t<}CMyE)‰Ѕ~PjBPe[^_] UVSu]|!SVJ<t0L X C}CP1} tP@P } tVe[^]Ív&UVS]p SS<p e[^]Í&&UWVS}u ]ShVSU@ B SW虂G8EjS蠂e[^_]Ít&UEM 9H v P]Ð&Qh0] UVSE] 9X wSh+&&@Eكu2e[^]Ív&UVSE] 9X wSh P+&&@Eكu 2e[^]Ív&USEM 9H v/P0ˈQh70]]ÍUWVSuE 8G 9B uJGRJx @AJy hcve[^_]Ív&UWVSuE 8G 9B uJGRJx@AJy h&e[^_]Ív&UWVSuE 8G 9B uJGRJx0@AJy hֿe[^_]Ív&UVSu] @ PEPZEHB҈CAHu]SiSVF8EjSe[^]Ít&&UWVS}E u]PSVSmSWcG8EjSje[^_]Í&&UWVS}E u]PSDVS]SWG8EjS e[^_]Í&&UWVS}E u]PSVSMSW~G8EjS~e[^_]Í&&UWVSu} X SV(XtPR@PV[e[^_]Ðt&UVS]u EPSSEPV<th誽E}tPR@PSU؍e[^] UME UQȉ]Í6&UUE PR ]ÍUUE }tPRJ]ÍPR]Ðt&UE@ ]ÐUUE PR]ÍUE P<]Uj~@@]Í&&US]E PS|C8؋]] UUE BPR|]Ðt&UUE BPR|]Ðt&UEPP] UUE BPRY|]ÐUS]C P`R@dЉƒt 9DP uۉЋ]]Ív&UE@@@PEiE]Í6US]E CCCS?؋]]ÍU WVS}u G]VSp{E Sj PE Q UURUBPBGGWF jV8{e[^_]ÍUWVS}] uGj([PZSVP_GGWee[^_]Í6&UVS]u C{t tA jPR@ ЃtSe[^]Í&UE@@@ @]Ív&UVS]u {t tA jPR@ C3e[^]Í6&UEjP]Í&&UVS]u tPt&hV؍e[^]Ít&&UVSE01VN\ZЋV B`PBdЉƒBЃvtF RPpR@tЉ؍e[^]UVSE1StЋS B`PBdЉƒBЃvBȃw(S B`PBdЉƒ9DPutC RPpR@tЉe[^]UVSE01V^%ۍDЍV B`PBdЉƒ9DPuփtF RPpR@tЉ؍e[^]ÍUVSE01V7DPt\ ;\F P`R@dЉƒ9DPuătF RPpR@tЉ؍e[^]Ít&UWVS}G%  @t=~&&P(Ãu10&-t++H SQpPAtЃ&Wjt 1PÃ0u|H Q`PAdЉá;xuWbu WzCЃwqH SQpPAtW@UCσw(H SQpPAtW%-t+uWƃ-uމe[^_]Ít&&UWVSEEEj@]Sm1MQƃ =@ /FՃ:C$  P  0 P           P P P P P P P P P P P @ P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P @ t&;6&+6&6& 6&1ҋM􍄉3UtudtMA VPpR@tЃE9xw WY}1҃E@jS]E jStE~v&G‹E9Pw R }1҃E@ЉEPB9u PSMA P`R@dЉƃEE jPse[^_]Í6UVS]u ;tSft&h؍e[^]Ít&&UVS]u ;tSjft&h趲؍e[^]Ít&&UVS]u ;tS*hv؍e[^]Ít&&UVS]u ;tSh6؍e[^]Ít&&UVS]u ;tSh؍e[^]Ít&&UVS]u ;tSjh趱؍e[^]Ít&&UVS]u ;t S vhv؍e[^]Ít&&UVS]u ;tSh6؍e[^]Ít&&UWVS}?uhv}GGƋP Ãud]6&9DX uNu}J SApRAt0&؋} G} }J A`RAdЉÃu} Ee[^_]Ít&UWVS} M9uuh%F0 u f26&uetE&gtGE%E.Fc~c ~ 0E0UE t&0EEl@@EU PREP]S~tSVI4&z }0]HPS}GPRGTЉe[^_]Í&U8WVSu>uh)} t0} H1E̋F+}F.~7WEhh}fPs&&]Љ]WF P]S4 FuJ WSAPRAT1 J ]S] SAPRATЃ tJ W]SAPRATЃ E9Et3}t-]Ss"6&J ]S] SAPRATЉe[^_]Ít&&UVSuE ^ځʀVfjPh0V^e[^]ÐUVSu] EJ PSAHRALЉe[^]Ít&UVSu] EJ PSAPRATЉe[^]Ít&UUB$ BЉ]Ív&UUB$ BЉ]Ív&UUB$ @BЉ]Ív&UUB$ BЉ]Ív&UEj Pr]Í&&US] tA P R@$Љ؋]]Ít&&UVSutTC P`R@dЉƒt;9DP tC P`R@dЉƒuۃtC RPpR@tЉe[^]ÍvUS]S؋]]Ív&UEU HPȉ]Ít&&UE@]ÍvUEU H P ȉ]Ít&&UE@ ]ÍvUEU HPȉ]Ít&&UE@]ÍvUUJE !ȉBȉ]Í&USMUY!#U ЉA؋]]ÍUEPM щHЉ]Í6&UEU HPȉ]Ít&&UE@]ÍvUEtA P@R@DЉ]Ð0]Ív&UE]Ít&UE]ÍUE@] UUE B PRyc]Ðt&UEPPf] UUE B PR9c]ÐUWVSu] EfjjPSV.5F|PF,X%dž %F %VT!dždžt VS+~]VS\V%ǃu S;X S;XjjV*SFDV@)@PVwtt*;&jV4fjVv&j"V4jV05jEPR\e[^_]ÍUVS]u C,X%ǃ %C %tA jPR@ Ѓt PCt SP}jC|PC, C $ VSe[^] U]Í6&US]C4t1SfjCFSB)@PCDS@)@PjjS ]]Ít&U]Í6&UVS]u S|h` ShH Vh Shs Ve[^]Í&&UVS]u S|h` ShH V苄h Shs Vwe[^]Í&&UEQD|PAЉ]Í6UVS]u0ҋC9E u>u„t3K CFSB)@PFPC:PjPS0e[^]Í6UUE PR]ÍUUE PR]ÍUWVSuF4M Q^|SǃGM QSF|fjFFVB)@PFDV@)@PjjV!_tgPV>C4t5SJfjCFSB)@PCDS@)@PjjS蔧r6VJVSnI\F|fjFFVB)@PFDV@)@PjjV聯GthD P<PVpe[^_]ÍUEǀ]ÍU,WVS}U u]EPRSmSWVŦEEODG@_FWBfEfEf)fEf)fEEfj]SP苌 <t0&SWyu10ҋututWW~0Kv&uV NEEEEUfMW ]SBPBЀ}tS1e[^_]Ðt&UUEJ PARAЉ]ÍvUMA|fjAFQB)@PADQ@)@PjjQ购]U0WVS}O|QR1҅tZMW|RWQUMUM UMfUfMfEfEUMfUfAfMUUt SIUuuVWRb UUdBFRB)@SFKB)BUUU9~/EUMfUfMڍURWP U܉Ufuf)ujuVSDe[^_]Í6&UVSE]PSEދE1ۅtt1V論KtA RЃǍ&EjP%e[^]ÍUWVSuUPRēNMMM萋E1҅tׅEPG@PMQS0ҋE@t8ufjjj&MQXڋE9Xw Sdc1҃MMA9P9Qw R5c1҃E@9DXtL:uijVj0FP#hyh fP6h Vh Pxh Vh PxPPPY$ Gt"VPIG@4tfjPpLE!jMQ;Y_v}t9N MFFVB)@PMADQ@)@PMPЃ VVժVE jPe[^_]Í&US]C|S,S&]] UMfjAFQB)@PADQ@)@PjjQ[]Í&U0WVSMt P/M{uǁuSBPB ЉÍP躵C|6HuUMhh fPE MQPPMADQ@)@EEEQEEEEEuEEMJARA Ѓ9EMMQPu1҅t11ҋG t @ pP]ÐU塜4u,ujhp'jjhP"44]Ít&US]'t th'S')؅uC&&'tth'SЛ ')؅t1]]Ít&US]CPtFjS膓9th>h'h'h(wURU RV Jt&&VURU RV@PWjSō jS9t h(we[^_]Í&U]Í6&U]Í6&U`WVS}E 8(t PWMX‹tXt!t+KPWv&+PEC ECECECEEC$E{uEBxt0Hv1PB@PjjjC PCPV蚑C E EPjjCPVe[^_]Ít&&U=4tS(jhSn6]Ív&U]Í6&UUE B(PR96]Ðt&UEPPS9] UUE B(PR5]ÐS4=4t Ѓ;u[Í6Ðout of memory6)@/dev/sequencer/dev/midi%02d1writeReady()2activated(int)1readReady()write /dev/sequencerSequencerQObjectwriteReady()readReady()0uuu|||h h  h h Cannot open /dev/sequencerXgmod ErrorCannot determine number of synthsCannot determine synth informationGravis Ultrasound not detectedHOME/.gmodrcr/usr/etc/gmodrcLoad Failed0p`PP pP p  p`P p  `ВБ`@`В`@`pp@P p  Гh h Гh h 669p`P@0M.K.M!K!M&K!FLTCHNOCTACHMODrbgunzip -c %s%slha pq unzip -p JNMTMMAS_UTrack_VSCRMExtended Module: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890-_=+.,/6p`P@00pP p  @`h h p`h h MultiTracker v%d.%dp`P@0 SCRSScreamTracker v%x.%02xS3M-Tracker v%x.%02xrb0 Pph h ph h UltraTracker v%dvrbXM6p`P@0h h h h pinvalid indexoptShellXgmod OptionsplayGroupPlay OptionsBreak Infinite LoopsIgnore Speed0 CommandsloadGroupLoad Options50 Hz Clock FrequencyNTSC Sample TimingDisable BPM TemposCheck magic numberQueue OptionsUnqueue After PlayRandom OrderHighlight CurrentoctaveGroupOctave SelectionLimitedExtendedAutomaticsaveButtonSave1saveClicked()2clicked()closeButtonClose1closex()HOME/.xgmodrcCannot open Xgmod ErrorError writing Error reading OptShellQWidgetshowOptShell()closex()saveClicked()vоuu|||Pа`@P` 0@P0h h h h chP:rRv:Xgmod 3.1Original source (C) Hannu Savolainen, 1993 MTM/ULT loaders by Robert Sanders Continuing development by Andrew J. Robinson Usage: %s [options] [modfile . . .] Options: -c DISABLE compression of modules in memory -h Help -P Set panning factor to x percent (-100 to 100) -r Infinitely repeat module -R Randomize module play order -v x Set volume to x (0 - 255) %s: panning factor must be between -100 and 100. %s: volume must be between 0 and 255. Usage: %s [options] modfile . . . Use %s -h for help. Y@8@Y@8@?Pph h ph h Y@8@h h h h 0p`P@ ` h h p ` h h nobpmntscnospeed0extend50hz#define backWidth 16 #define backHeight 15 static unsigned char backBits[] = { 0x80, 0x80, 0xc0, 0xc0, 0xe0, 0xe0, 0xf0, 0xf0, 0xf8, 0xf8, 0xfc, 0xfc, 0xfe, 0xfe, 0xff, 0xff, 0xfe, 0xfe, 0xfc, 0xfc, 0xf8, 0xf8, 0xf0, 0xf0, 0xe0, 0xe0, 0xc0, 0xc0, 0x80, 0x80};#define forwardWidth 16 #define forwardHeight 15 static unsigned char forwardBits[] = { 0x01, 0x01, 0x03, 0x03, 0x07, 0x07, 0x0f, 0x0f, 0x1f, 0x1f, 0x3f, 0x3f, 0x7f, 0x7f, 0xff, 0xff, 0x7f, 0x7f, 0x3f, 0x3f, 0x1f, 0x1f, 0x0f, 0x0f, 0x07, 0x07, 0x03, 0x03, 0x01, 0x01};#define previousWidth 18 #define previousHeight 15 static unsigned char previousBits[] = { 0x03, 0x02, 0x02, 0x03, 0x03, 0x03, 0x83, 0x83, 0x03, 0xc3, 0xc3, 0x03, 0xe3, 0xe3, 0x03, 0xf3, 0xf3, 0x03, 0xfb, 0xfb, 0x03, 0xff, 0xff, 0x03, 0xfb, 0xfb, 0x03, 0xf3, 0xf3, 0x03, 0xe3, 0xe3, 0x03, 0xc3, 0xc3, 0x03, 0x83, 0x83, 0x03, 0x03, 0x03, 0x03, 0x03, 0x02, 0x02};#define nextWidth 18 #define nextHeight 15 static unsigned char nextBits[] = { 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x07, 0x07, 0x03, 0x0f, 0x0f, 0x03, 0x1f, 0x1f, 0x03, 0x3f, 0x3f, 0x03, 0x7f, 0x7f, 0x03, 0xff, 0xff, 0x03, 0x7f, 0x7f, 0x03, 0x3f, 0x3f, 0x03, 0x1f, 0x1f, 0x03, 0x0f, 0x0f, 0x03, 0x07, 0x07, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x03};#define playWidth 15 #define playHeight 15 static unsigned char playBits[] = { 0x08, 0x00, 0x18, 0x00, 0x38, 0x00, 0x78, 0x00, 0xf8, 0x00, 0xf8, 0x01, 0xf8, 0x03, 0xf8, 0x07, 0xf8, 0x03, 0xf8, 0x01, 0xf8, 0x00, 0x78, 0x00, 0x38, 0x00, 0x18, 0x00, 0x08, 0x00, };#define stopWidth 15 #define stopHeight 15 static unsigned char stopBits[] = { 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f};topShellbackButtonforwButtonprevButtonnextButtonplayButtonstopButtonqueueButtonQueuev_A kA s<optionButtonOptionsvA A Us<trackButtonTrack6A A s<sampleButtonSamplesvA B <commentButtonComment6(B 6B U<exitButtonExit\B gB <Xgmod 3.1fileLabelnameLabelCopyright 1997 by Andrew J RobinsonEEE:00000 CH1backClicked()2clicked()1forwardClicked()1previousClicked()1nextClicked()1playClicked()1stopClicked()1showQueueShell()1showOptShell()1showTrackShell()1showSampleShell()1showCommentShell()1quit()1setChannels(int)2channelSignal(int)1setRandom()2currentDeleted()EEE:%03d%03d:%03d%02d CHTopShellQWidgetbackClicked()forwardClicked()playClicked()nextClicked()previousClicked()stopClicked()setRandom()channelSignal(int)6p`P@0 pP p  0@pP p  PоPu@u|||Pа`@P` 0@P0pP p   h h 0 h h char & basic_string >::at(unsigned int)/usr/include/g++/std/bastring.h!(pos >= length ())const char & basic_string >::at(unsigned int) consttrackShellXgmod TrackerpatternListcloseButtonClose1closeTrackShell()2clicked()C-C#D-D#E-F-F#G-G#A-A#B-[%03d] STO ... %s%01d TrackShellQWidgetshowTrackShell()setChannels(int)closeTrackShell()6p$оp$u`$"#u|||Pа`@P`0@P0$$h h $$h h addButtonAddsaveButtonSavecurrentButtonCurrentplayButtonPlayremoveButtonRemoveclearButtonClearshuffleButtonShufflecloseButtonClosequeueShellXgmod Queue1addClicked()2clicked()1saveClicked()1currentClicked()1playClicked()1removeClicked()1clearClicked()1shuffleClicked()1closeClicked()queueList2selected(int)Xgmod - Add1loadFileSelected(const char *)2fileSelected(const char *)Xgmod - Save1saveFileSelected(const char *)rCannot open fileXgmod Error@(#)GMOD-PLAYLISTNo module is selectedw@(#)GMOD-PLAYLIST %s XQFileDialogQFileDialogdone(int)QueueShellQWidgetcurrentClicked()showQueueShell()closeClicked()addClicked()saveClicked()playClicked()removeClicked()clearClicked()shuffleClicked()loadFileSelected(const char*)saveFileSelected(const char*)currentDeleted()4о4up4P1`1u|||Pа`@P`'0@P04о4u4`0p0u|||P```  P``@@P0405p5@5p5P p  7P756`65657P766`606657P7 7p6P p  `77h h 77h h sampleShellXgmod SamplessampleListcloseButtonClose1closeSampleShell()2clicked()[%03d] [xxx] SampleShellQWidgetshowSampleShell()closeSampleShell()6;о;u;p::u|||Pа`@P`90@P0;;h h ;;h h <<<<p<`<P<@<0<commentShellXgmod CommentcommentLabelcloseButtonClose1closeCommentShell()2clicked()CommentShellQWidgetshowCommentShell()closeCommentShell()6@о@u@??u|||Pа`@P` ?0@P00ApA@ApAP p  AAh h AAh h pED`EPE@E0E EEEFFh h FFh h GE GGGGpG`GPG@GG GGGGpG`GPG@G)@@I`Ih h pI`Ih h IGI0J JJJIII@JI0J JJJIII)@KKh h LKh h  L`J@LLLLLLpL`LL@LLLLLLpL`LpNNh h NNh h  OLNOOOOOpO`OO@OOOOOOpO`OU@QQh h QQh h QORRRpR`RPR@R0RRRRRpR`RPR@R0RXYh h  YYh h YR ZYYpXpY`YPY@YZ ZZZZpZ`ZPZ@ZV@p@V{A`kZf@ml0m mmmlll0rPrh h `rPrh h srsrrrrrrPw0sZfxwxwwwwwwx0x}p`P@0 *filterEditpathBoxdirListfileListnameEditfilterLabelFilter:Name:dirLabelDirectories:fileLabelFiles:okButtonOKfilterButtonFiltercancelButtonCancel2selected(int)1fileSelected(int)2highlighted(int)1fileHighlighted(int)1dirSelected(int)2activated(int)1pathSelected(int)2clicked()1okClicked()2returnPressed()1filterClicked()1cancelClicked()Cannot open or read directory.Sorryqfiledlg.cppOpenSave As/ЗpP p  0@pP p  h h 0h h textqmsgbox.cppbuttonOk2clicked()1accept()HelveticaYes1reject()Noh h h h QApplication: There should be only one application objectqapp.cppQApplication::setColorSpec: This function must be called before the QApplication object is createdQApplication::notify: Unexpected null receivervpx @y `y 0p@pP p  px @y `y  `0pP p  ph h h h X Error: %s Major opcode: %d%s: Fatal IO error: client killed-display-fn-font-bg-background-fg-foreground-name-title-geometry-iconic-style=windowsmotif-sync-nograb-dograb/proc/%d/cmdlinegdbQt: gdb: -nograb added to command-line options Use the -dograb option to enforce grabbing%s: cannot connect to X server %sWM_DELETE_WINDOWISO-8859-1_XSETROOT_IDqapp_x11.cppdesktopWM_STATEQApplication::postEvent: Unexpeced null receiverQSocketNotifier: Internal errorreadwriteexceptionQSocketNotifier: Multiple socket notifiers for same socket %d and type %s2lastWindowClosed()@Pp P p  px @y `y  `0pP p  ppP p  0p@pP p  pP p  h h 0h h pPx @y `y @pP p  ppPx @y `y 0pP p  @`h h `h h qcol_x11.cppQColor::setRgb: RGB parameter(s) out of rangeQColor::enterAllocContext: Context stack overflowQColor::leaveAllocContext: Context stack underflow`pp@x @y `y h h h h QColor::setHsv: HSV parameters out of range  h h   h h qcur_x11.cppQCursor: Cannot create bitmap cursor; invalid bitmap(s)QCursor::update: Invalid cursor shape %d6h h  h h QPushButtonpx @y `y @PpP p  h h h h TimerMouseButtonPressMouseButtonReleaseMouseButtonDblClickMouseMoveKeyPressKeyReleaseFocusInFocusOutEnterLeavePaintMoveResizeCreateDestroyCloseQuitQEvent: Posted event %s cannot be stack variable, ignoredQEvent: Posted event %d cannot be stack variable, ignoredqfnt_x11.cpp{ [%s]}6x13timescourierold englishhelvetica7x138x139x15fixed-*-helvetica-medium-r-*-*-*-120-*-*-*-*-*-*-*-courier-medium-r-*-*-*-120-*-*-*-*-*-*-*-times-medium-r-*-*-*-120-*-*-*-*-*-*-*-lucida-medium-r-*-*-*-120-*-*-*-*-*-*-*-helvetica-*-*-*-*-*-120-*-*-*-*-*-*-*-courier-*-*-*-*-*-120-*-*-*-*-*-*-*-times-*-*-*-*-*-120-*-*-*-*-*-*-*-lucida-*-*-*-*-*-120-*-*-*-*-*-*-*-helvetica-*-*-*-*-*-*-*-*-*-*-*-*-*-courier-*-*-*-*-*-*-*-*-*-*-*-*-*-times-*-*-*-*-*-*-*-*-*-*-*-*-*-lucida-*-*-*-*-*-*-*-*-*-*-*-*QFont::lastResortFont: Cannot find any reasonable fontiso8859175QFont::load: Internal errorQFont::load: Cache overflow errorkscjisxgb0normalBA-%s-%s-%s-%s-%s-%s-*-%i-%i-%i-%s-*-%s-%s-*-%s-*-*-*-*-*-*-*-*-*-*-*-*QFontMetrics: Invalid font metricsQFontInfo: Invalid font infomediumbolddemiboldblacklightBBBpBx @y `y 0CpC@CpBx @y `y  EpECp`DDpDpCx @y `y  EpE@EpD F@Fh h `F@Fh h FFh h FFh h qfont.cppQFont::setPointSize: Point size <= 0 (%d)QFont::setWeight: Value out of range (%d)arialhelveticahelvtms rmntimesQFontMetrics::~QFontMetrics: Internal errorwidget != 0ASSERT: "%s" in %s (%d)painter != 0QFontMetrics: Get font metrics between QPainter::begin() and QPainter::end()QFontMetrics::font: You can only get the font when you get the QFontMetrics from either QWidget::fontMetrics() or QPainter::fontMetrics() Avoid this function. It will be removed in a future version of QtQFontInfo::~QFontInfo: Internal errorQFontInfo: Get font info between QPainter::begin() and QPainter::end()QFontInfo::underline: Invalid font infoQFontInfo::strikeOut: Invalid font infoQFontInfo::font: You can only get the font when you get the QFontInfo from either QWidget::fontInfo() or QPainter::fontInfo() Avoid this function. It will be removed in a future version of Qt6aPa ap`P p  aaap`aP p  a0bbpax @y `y cd`b@c c@bbbcdpc@c cbbbcdcpcP p   d@dh h `d@dh h @Ipeeh h eeh h qmetaobj.cppv0kpk@kpkx @y `y mPmkl`lklkmPmll`l0llkmPm mplP p  mmmp`mx @y `y n@nnpmP p  Pnpnh h npnh h CHILD: Object %s does not inherit %sCHILD: No such child object %sQObjectQObject::event: Null events are not permittedqobject.cppQObject::insertChild: Cannot reparent a widget, use QWidget::recreate() insteadQObject::insertChild: Object %s::%s already in list1cleanupEventFilter()2destroyed()QObject::%s: Attempt to %s non-signal %s::%sQObject::%s: Use the SIGNAL macro to %s %s::%sQObject::%s: Use the SLOT or SIGNAL macro to %s %s::%sslotsignalQObject::%s: Parentheses expected, %s %s::%sQObject::%s: No such %s %s::%s%s::initMetaObject(): Warning: The class "%s" contains the Q_OBJECT macro, but inherits from the "%s" class, which does not contain the Q_OBJECT macro. Signal/slot behavior is undefined. (null)QObject::connect: Cannot connect %s::%s to %s::%sbindconnectQObject::connect: Incompatible sender/receiver arguments %s::%s --> %s::%sQObject::disconnect: Unexpected null parameterdisconnectunbindQObject::disconnect: No such signal %s::%sdestroyed()QObject: Object %s::%s has no meta objectcleanupEventFilter()????%s%s::%sOBJECT %s::%s SIGNALS OUT %s --> %s::%s %s SIGNALS IN %s::%s60px @y `y `pp@P p  Дpx @y `y P`p P p  q0uuЖ tu|||h h  h h qpalette.cppvph h h h QPixmap::setMask: The pixmap and the mask must have the same sizeBMP6 @h h `@h h h h h h @qpm_x11.cppQPixmap: Invalid pixmap parametersQPixmap::operator=: Cannot assign to pixmap during paintingQPixmap::metric: Invalid metric commandQPixmap::convertToImage: Cannot convert a null pixmapQPixmap::convertToImage: Invalid depth %dQPixmap::convertToImage: Display not supported (bpp=%d)QPixmap::convertFromImage: Cannot convert a null imageQPixmap::setImageData: DISPLAY NOT SUPPORTED (BPP=%d)QPixmap::xForm: DISPLAY NOT SUPPORTED (BPP=%d)??@?h h h h 0Ph h pPh h @`@qpmcache.cppv0pi > s!!! i=%d, w=%d, h=%d6??@QPointArray::bezier: The array must have 4 control points6@@?h h h h 0h h P0h h QPoint: Attempt to divide point by zeroh h h h QPaintDevice: Must construct a QApplication before a QPaintDeviceQPaintDevice: Cannot destroy paint device that is being paintedQPaintDevice::cmd: Device has no command interfaceQPaintDevice::metrics: Device has no metric informationqptd_x11.cppsrc != 0ASSERT: "%s" in %s (%d)dst != 0bitBlt: Cannot bitBlt from devicebitBlt: Cannot bitBlt to or from devicebitBlt: Invalid ROP codebitBlt: Cannot bitBlt to devicebitBlt: Incompatible destination pixmap` @  h h   h h `QPainter: Internal error; no available GCqptr_x11.cppQPainter::redirect: The pdev argument cannot be 0QPainter: You called begin() but not end()QPainter::setFont: Will be reset by begin()$qt-brush$%dQPainter::begin: Painter is already activeQPainter::begin: Paint device cannot be nullQPainter::begin: Another QPainter is already painting this device; A paint device can only be painted by one QPainter at a timeQPainter::begin: Cannot paint null pixmapQPainter::end: Missing begin() or begin() failedQPainter::setBackgroundColor: Call begin() firstQPainter::setBackgroundMode: Call begin() firstQPainter::setBackgroundMode: Invalid modeQPainter::setRasterOp: Call begin() firstQPainter::setRasterOp: Invalid ROP codeQPainter::setBrushOrigin: Call begin() first@?txinv == FALSEASSERT: "%s" in %s (%d)@?QPainter::map: Internal errorQPainter::mapInv: Internal errorQPainter::setClipping: Will be reset by begin()QPainter::setClipRegion: Will be reset by begin()v?9RFQ??9RFQ?QPainter::drawQuadBezier: Cubic Bezier needs 4 control points6@&%sx%s_%i_%i_%i_%i_%i_%i_%i$qt$%s,%g,%g,%g,%g,%g,%g,%sv@?qptrQPainter::drawText: Internal text info is invalidЈp`x @y `y @ h h @ h h `h h h h h h h h qrgn_x11.cppQRegion: Invalid region type6 @h h `@h h h h h h QSocketNotifier: Invalid socket specified6 @h h `@h h QWidget::setMinimumSize: The smallest allowed size is (0,0)QWidget::setMaximumSize: The largest allowed size is (%d,%d)QWidget::metric: Invalid metric commandv`pp@x @y `y  pP p  `pp0x @y `y  pP p  0Ph h pPh h h h h h qwidget.cppdeferredMoves->find((long)this) == 0ASSERT: "%s" in %s (%d)deferredResizes->find((long)this) == 0it.count() == 0QWidget::focusNextPrevChild: Internal errorppPx @y `y 0p`x @y `y p`x @y `y P pP p  p`x @y `y @pP p  Pph h ph h ??5<ư>h h h h  h h @ h h QBuffer::setBuffer: Buffer is openQBuffer::open: Buffer already openQBuffer::at: Buffer is not openQBuffer::at: Index %d out of rangeqbuffer.cppQBuffer::readBlock: Buffer not openQBuffer::readBlock: Read operation not permittedQBuffer::readBlock: Buffer read errorQBuffer::writeBlock: Null pointer errorQBuffer::writeBlock: Buffer not openQBuffer::writeBlock: Write operation not permittedQBuffer::writeBlock: Memory allocation errorQBuffer::readLine: Buffer not openQBuffer::readLine: Read operation not permittedQBuffer::getch: Buffer not openQBuffer::getch: Read operation not permittedQBuffer::getch: Buffer read errorQBuffer::putch: Buffer not openQBuffer::putch: Write operation not permittedQBuffer::ungetch: Buffer not openQBuffer::ungetch: Read operation not permitted60 @p 0h h P0h h pJanFebMarAprMayJunJulAugSepOctNovDecMonTueWedThuFriSatSunqdatetm.cppmonth > 0 && month <= 12ASSERT: "%s" in %s (%d)weekday > 0 && weekday <= 7%s %s %d %dQDate::setYMD: Invalid date %04d/%02d/%02dyear() == y && month() == m && day() == d%.2d:%.2d:%.2dQTime::setHMS Invalid time %02d:%02d:%02d.%03dQTime::currentTime(QTime *): Null pointer not allowedQDateTime::setTime_t: Cannot get localtime%s %s %d %s %d @ h h ` @ h h .*/..QDir::remove: Empty or null file nameQDir::rename: Empty or null file name(s)QDir::exists: Empty or null file nameQDir::currentDirPath: getcwd() failedQDir::currentDirPath: stat(".") failedHOME/..qdir.cppQDir::readDirEntries: Cannot read the directory: %sQDir::readDirEntries: Cannot close the directory: %s6`- - p- p@- P p  @/ / - . . - @.  . @/ / . . . `. @.  . @/ / P/ p / P p  / / h h / / h h QDataStream: No deviceqdstream.cpp%d %g @1 0> P> h h p> P> h h QFile::setName: File is openqfile.cppfileName != 0ASSERT: "%s" in %s (%d)QFile::open: File already openQFile::open: No file name specifiedQFile::open: File access not specifieda+aw+r+rwQFile::at: File is not openQFile::at: Cannot set file position %dQFile::atEnd: File is not openQFile::readBlock: File not openQFile::readBlock: Read operation not permittedQFile::writeBlock: Null pointer errorQFile::writeBlock: File not openQFile::writeBlock: Write operation not permittedQFile::readLine: File not openQFile::readLine: Read operation not permittedQFile::getch: File not openQFile::getch: Read operation not permittedQFile::putch: File not openQFile::putch: Write operation not permittedQFile::ungetch: File not openQFile::ungetch: Read operation not permitted6@? @ D PE E L F F G G H I J `K L M h h  M M h h qfileinf.cpp.QFileInfo::permission: permissionSpec is 0 [ `[ 0[ p[ P p  ] @] [ p\ P\ p[ \ [ ] @] \ p\ P\  \ \ [ ] @] ] p\ P p  P] p] h h ] p] h h qgarray.cppQGArray: Cannot allocate array with negative lengthQGArray::resetRawData: Inconsistent argumentsQGArray::find: Index %d out of rangeQGArray::at: Absolute index %d out of rangeh 0h h h Ph 0h h h ^ 0i h h qgcache.cppcount() == 0ASSERT: "%s" in %s (%d)ci->node == 0ci->node != 0ci != 0 && ci->node != 0QGCache::QGCache(QGCache &): Cannot copy a cacheQGCache::operator=: Cannot copy a cachekey != 0 && data != 0key != 0dumps > 0CACHE STATISTICS:scache contains %d item%s, with a total cost of %dmaximum cost is %d, cache is %d%% full.find() has been called %d time%s%d of these were hits, items found had a total cost of %d.havehas%d item%s %s been inserted with a total cost of %d.werewas%d item%s %s too large or had too low priority to be inserted.%d item%s %s been thrown away with a total cost of %d.Statistics from internal dictionary class:it != 06@  v px @y `y w w pi ppw P p  w w w ppw P p  w x h h  x x h h px n l pQGDict::hash: Invalid null keyqgdict.cppQGDict::look: Attempt to insert null itemDICTIONARY STATISTICS:Empty!Array size = %d# items = %dReal dist = %gRand dist = %gReal/Rand = %g6?@dict->iteratorsASSERT: "%s" in %s (%d)QGDictIterator::toFirst: Dictionary has been deletedQGDictIterator::operator(): Dictionary has been deletedQGDictIterator::operator++: Dictionary has been deletedv   p` P p  Ј  h h   h h @   { px @y `y QGList::locate: Index %d out of rangeqglist.cppQGList::removeNode: Corrupted nodeQGList::takeNode: Corrupted nodelist->iteratorsASSERT: "%s" in %s (%d)QGListIterator::toFirst: List has been deletedQGListIterator::toLast: List has been deleted6@ ` h h  ` h h   ` pP p  1.2qglobal.cppwordSize != 0ASSERT: "%s" in %s (%d)bigEndian != 0qSysInfo: Unsupported system word size %dqSysInfo: Unsupported system data type sizeqSysInfo: Inconsistent system byte order In file %s, line %d: Out of memoryYou are using obsolete functions in the Qt library. Call the function qSuppressObsoleteWarnings() to suppress obsolete warnings. ::%s::%s: This function is obsolete, use %s instead%s::%s: This function is obsolete.Qt%sv   p x @y `y 0 P h h p P h h qgvector.cppQGVector::insert: Index %d out of rangeQGVector::remove: Index %d out of rangeQGVector::take: Index %d out of rangeQGVector::bsearch: Cannot search for null objectQGVector::findRef: Index %d out of rangeQGVector::find: Index %d out of rangeQGVector::operator[]: Index %d out of range  h h 0  h h P  P p  Т QIODevice::setType: Specified type out of rangeQIODevice::setMode: Specified mode out of rangeQIODevice::setState: Specified state out of rangeQIODevice::at: Index %d out of range    0 ^ CHR %c (%d) BOL EOL BOW EOW ANY\x%.2X CCL %s CLO OPT ENDqregexp.cpp 0 h h P 0 h h qstring.cppQDataStream: Not enough memory to read QByteArrayQString::setNum: Invalid format char '%c'QDataStream: Not enough memory to read QString  h h   h h qbttngrp.cpp2pressed()1buttonPressed()2released()1buttonReleased()2clicked()1buttonClicked()QRadioButtonQButtonbt->inherits("QButton")ASSERT: "%s" in %s (%d)P  ` p0 P p    h h   h h QButtonGroupqbutton.cpp1autoRepeatSlot()QButton::setOn: Only toggle buttons may be switchedtimerQTimer2timeout()1timerSlot()  h h   h h  @ h h ` @ h h $qt_check_%d_%d_%dqchkbox.cpp@ ` h h  ` h h   h h   h h QComboBox::%s Index %d out of rangeQComboBox::%s Index %i out of range2selected(int)1internalActivate(int)2highlighted(int)1internalHighlight(int)2activated(int)this is not /bin/ed2returnPressed()1returnPressed()qcombo.cpplist != 0ASSERT: "%s" in %s (%d)strings != 0insertItemremoveItemtextpixmapchangeItemsetCurrentItem1internalClickTimeout()d->usingListBoxv/ 00 . `/ @/ `. . . / 00 / `/ @/ / . . / 00 0 p/ P p  @0 `0 h h 0 `0 h h 0 0 h h 0 0 h h QFrame::setFrameStyle: Incomplete frame style69 09 h h P9 09 h h p9 9 h h 9 9 h h ? ? h h ? ? h h ? @ h h 0@ @ h h 1acceleratorSlot()qlabel.cpp%gx1buddyDied()2destroyed()accel label accelN N N p`N x @y `y N N h h O N h h 0O PO h h pO PO h h %*lx%*li%*lo%*gAQLCDNumber::setNumDigits: Max 99 digits allowed?QLCDNumber::drawSegment: Internal error. Illegal segment id: %d qlcdnum.cppfill || shadowASSERT: "%s" in %s (%d)v  h h   h h  @ h h ` @ h h qlined.cpp2dataChanged()1clipboardChanged()  Ы p x @y `y  0 h h P 0 h h p  h h   h h QListBox::%s: Index %i out of rangeQListBox::%s: Index %d out of rangeqlistbox.cppinsertStrListlist != 0ASSERT: "%s" in %s (%d)strings != 0insertItemlbi != 0text != 0lbi->text() != 0removeItemchangeItemsetCurrentItemitemlbi(uint)index <= itemList->count()(uint)index < itemList->count()qlb_maxLenDict@  P p x @y `y  0  p Ь p   0  p P p    ` @  @     p @        p P p   @ h h ` @ h h             `     h h   h h x()qmenudta.cppQMenuData::insertItem: Index %d out of rangeQMenuData::insertItem: Circular popup menu ignoredQMenuData::removeItem: Index %d out of range6`         p P p    h h 0  h h QMultiLineEdit::paintCell, no text at line %dqmlined.cppbufferASSERT: "%s" in %s (%d)QMultiLineEdit::textWidth: Couldn't find contents at line %dsmarkBeginY >= 0markEndY < (int)contents->count()firstS != lastS oldLinenumLines() != 02dataChanged()1clipboardChanged()6  6 h h @6  6 h h 6 6 6 p`6 P p  6 7 h h  7 7 h h x()ShiftCtrl+CtrlAlt+AltF%d%cEscTabBacktabBackspaceReturnEnterInsDelPausePrintSysReqHomeEndLeftUpRightDownPgUpPgDownCapsLockNumLockScrollLock<%d?>QPopupMenu: Parent must be null2activatedRedirect(int)1subActivated(int)2highlightedRedirect(int)1subHighlighted(int)QPopupMenu: Popup has invalid menu itemqpopmenu.cpp2activated(int)1accelActivated(int)2destroyed()1accelDestroyed()f f h h f f h h 0g pg @g pg P p  g g h h g g h h QDialog$qt_push_%d_%d_%d_%d_%dqpushbt.cppx  x h h @x  x h h `x x h h x x h h QButtonGroup$qt_radio_%d_%d_%dqradiobt.cppv  h h   h h  @ h h ` @ h h QScrollBar_Private::action internal errorqDrawArrow: Requested GUI style not supported @ h h ` @ h h   h h   h h QTableView::setNumRows: Negative argument.QTableView::setNumCols: Negative argument.QTableView::setCellWidth: Argument out of rangeQTableView::setCellHeight: Argument out of rangeqtablevw.cpp2valueChanged(int)1verSbValue(int)2sliderMoved(int)1verSbSliding(int)2sliderReleased()1verSbSlidingDone()1horSbValue(int)1horSbSliding(int)1horSbSlidingDone()QTableView::findRawRow: internal error: yPos < frameWidth() && goOutsideView not supported. (%d,%d)r < nRowsASSERT: "%s" in %s (%d)QTableView::findRawCol: intermal error: xPos < frameWidth() && goOutsideView not supported. (%d,%d)c < nColsP оP u @ P u|||Pа`@P`  0@P0  h h   h h   h h   h h QFileDialogQDialogfileSelected(int)fileHighlighted(int)dirSelected(int)pathSelected(int)okClicked()filterClicked()cancelClicked()fileHighlighted(const char*)fileSelected(const char*)dirEntered(const char*)vоu` @ P u|||P```  P``@@P0   pp P p  p      p P p      p P p   pP P p    h h   h h QMessageBoxQDialog0 о0 u  0 u|||P```  P`@@P0`  h h   h h QApplicationQObjectquit()lastWindowClosed()0uu   u|||  h h @  h h QDialogQWidgetdone(int)accept()reject()оu ` p u|||P```  P` @@P0  h h @  h h QSocketNotifierQObjectactivated(int)pu ` p u|||  h h   h h QWidgetQObjectPоPu @ P u|||Pа`@P` 0@P0 0 h h P 0 h h QButtonGroupQGroupBoxbuttonPressed()buttonReleased()buttonClicked()pressed(int)released(int)clicked(int) о u p  u|||Pа`@P`;  5 0@P05 8 9   h h   h h QButtonQWidgettimerSlot()autoRepeatSlot()pressed()released()clicked()toggled(bool)6 0  p P p   о u@ 0 @ u|||Pа``    P@    0@P0 @ P P p h h  p h h QCheckBoxQButton6 о u   u|||Pа` `    P@    0@P0    @ h h ` @ h h QComboBoxQWidgetinternalActivate(int)internalHighlight(int)internalClickTimeout()returnPressed()activated(int)highlighted(int)activated(const char*)highlighted(const char*)6 о & @   u|||.  P  а`   " 0" " `" P`  0@P0P p h h  p h h QFrameQWidget@ о@ u0   u|||Pа`@P`4  5 0@P05 8 9 p  h h   h h QGroupBoxQFramev о u   u|||Pа`@P`;  5 0@P05 8 9 `  h h   h h QLabelQFramesetText(const char*)setPixmap(const QPixmap&)setNum(int)setNum(double)acceleratorSlot()buddyDied()6B оB u   u|||Pа`H @P`4  5 0@P05  J 9  @ h h ` @ h h QLCDNumberQFramedisplay(int)display(double)display(const char*)setHexMode()setDecMode()setOctMode()setBinMode()setSmallDecimalPoint(bool)overflow()6W оW u`   u|||Pа`@P`4 `] 0@P05 p] 9 p  h h   h h QLineEditQWidgetsetText(const char*)selectAll()deselect()clipboardChanged()textChanged(const char*)returnPressed()6 о u   P |||Pа`0     P  0  0@P0  @ h h ` @ h h QListBoxQTableViewhighlighted(int)selected(int) о u   @ |||  `  `   0  P   0@P05 8 9 P        @ h h ` @ h h QMultiLineEditQTableViewclear()setText(const char*)append(const char*)deselect()selectAll()setReadOnly(bool)setOverwriteMode(bool)paste()copyText()cut()clipboardChanged()textChanged()returnPressed()vP оP u   0 |||   /  `% ) 0* ' P P    0@P05 8 9 P      @ 0  @  `    P P  @  # $    pP P p    h h    h h QPopupMenuQTableViewsubActivated(int)subHighlighted(int)accelActivated(int)accelDestroyed()activated(int)highlighted(int)activatedRedirect(int)highlightedRedirect(int)vHHPD HD HE HPF HF HF PD оPD u @ P e |||  R R S \ ] _  a P`[  0@P05 8 0G S @S   PT    @ h h ` @ h h QPushButtonQButtonsetOn(bool)toggle()v о u   u|||Pа`k  l l j `    Pw    0@P0 Pm Pv @ ` h h  ` h h QRadioButtonQButtonv о u   u|||Pа`z `    P@    0@P0z {   0 h h P 0 h h QScrollBarQWidgetvalueChanged(int)sliderPressed()sliderMoved(int)sliderReleased()nextLine()prevLine()nextPage()prevPage()P# о` І  P# u@# p   ||| а` ` 0  P P`P @ 0@P0# # h h # # h h QTableViewQFramehorSbValue(int)horSbSliding(int)horSbSlidingDone()verSbValue(int)verSbSliding(int)verSbSlidingDone()@ о@ u' # # u|||   `@P`  0@P05 8 9 P     ' ' h h ' ' h h x()qaccel.cpp2destroyed()1tlwDestroyed()QAccel: An accelerator must have a parent widgetv- @- - p, P p  P- p- h h - p- h h qbitmap.cppdata->bitmapASSERT: "%s" in %s (%d)vP1 p1 h h 1 p1 h h 1 @TEXTPIXMAPqclipbrd.cppv03 P3 h h p3 P3 h h ()3 4 h h 04 4 h h qdrawutl.cppp && lineWidth >= 0 && midLineWidth >= 0ASSERT: "%s" in %s (%d)w > 0 && h > 0 && lineWidth >= 0 && midLineWidth >= 0w > 0 && h > 0 && lineWidth >= 0$qt-drawitem-%xvH @H H h h I H h h 0I PI h h pI PI h h qimage.cppQImage::color: Index %d out of rangeQImage::setColor: Index %d out of rangeQImage::scanLine: Index %d out of rangeQImage::create: Bit order is required for 1 bpp imagesQImage::create: 24-bpp images no longer supported, use 32-bpp insteadQImage::convertDepth: Image is a null imageQImage::convertDepth: Depth %d not supportedBMP[a-zA-Z][a-zA-Z0-9_]*dummy^BMT^P1PBM^P4PBMRAW^P2PGM^P5PGMRAW^P3PPM^P6PPMRAWPNM^#defineXBM/\*.XPM.\*/XPMQImageIO::write: No such image format handler: %sBMmcc <= 255ASSERT: "%s" in %s (%d)Qt: %s output not supported in this version^#define[ ]+[a-zA-Z0-9_]+[ ]+[0-9]+0x#define %s_width %d #define %s_height %d static char %s_bits[] = { }; %d %d %d %d c ^c #[a-zA-Z0-9]*$%xc none [a-z] .#abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" []={static char*/* XPM */"%s c None""%s c #%02x%02x%02x",};` p  p@ x @y `y    p x @y `y  0  p P p  `  p p@ x @y `y  б h h  б h h qpainter.cppQPainter::restore: Empty stack errorQPainter::setPen: Will be reset by begin()QPainter::setBrush: Will be reset by begin()QPainter::setTabStops: Will be reset by begin()QPainter::setTabArray: Will be reset by begin()QPainter::setViewXForm: Will be reset by begin()QPainter::setWindow: Will be reset by begin()QPainter::setViewport: Will be reset by begin()QPainter::setWorldXForm: Will be reset by begin()QPainter::setWorldMatrix: Will be reset by begin()QBrush::setStyle: CustomPattern is for internal use6   pP P p    h h 0  h h P p h h  p h h QRegion: Internal cmd errorQRegion::exec: Internal errorqregion.cpp!rgn.data->bop.isNull()ASSERT: "%s" in %s (%d)6@ ` h h  ` h h   h h   h h x()QSignal2x()QSignal: Internal errorQObjectv 0uup @  u|||0 P h h p P h h x()qtimer.cpp  uЖ tu|||@  P p x @y `y    p P p   0 h h P 0 h h qbitarry.cppQBitArray::testBit: Index %d out of rangeQBitArray::setBit: Index %d out of rangeQBitArray::clearBit: Index %d out of rangeQBitArray::toggleBit: Index %d out of rangeQBitArray::operator&=: Bit arrays have different sizeQBitArray::operator|=: Bit arrays have different sizeQBitArray::operator^=: Bit arrays have different sizeQDataStream: Not enough memory to read QBitArray6    0 P h h p P h h 0QTextStream: No deviceqtstream.cpp P p h h  p h h x()2activatedRedirect(int)1subActivated(int)2highlightedRedirect(int)1subHighlighted(int)qmenubar.cpp2activated(int)1accelActivated(int)2destroyed()1accelDestroyed()  h h 0  h h p   pP P p    h h   h h QRangeControl::setRange: minValue > maxValuev   QAccelQObjecttlwDestroyed()activated(int)v@) 0u,     u|||0 P h h p P h h QClipboardQObjectownerDestroyed()dataChanged()62  ' u   u' || 0 h h P 0 h h QTimerQObjecttimeout()v  u p  u|||  h h    h h QMenuBarQFramesubActivated(int)subHighlighted(int)accelActivated(int)accelDestroyed()activated(int)highlighted(int)     @  о   @ P u|||P   @   p P`4  0@PP 5 `    h h   h h internalClipboardOwnerTEXTPIXMAPqclb_x11.cppQClipboard::data: PIXMAP format not supportedQClipboard::data: Unknown format: %sXGetSelectionOwner(dpy,XA_PRIMARY) == winASSERT: "%s" in %s (%d)QT_SELECTIONQClipboard::setData: PIXMAP format not supportedQClipboard::setData: Unknown format: %sQClipboard::setData: Cannot set X11 selection owner( ( h h ( ( h h 2/-`*(%#!P@0(` @ p hPLt4X(\:}hS@. xqke_ZUPKGC?<9630-*(&$"  #/;GS8op* d@(#) Xgmod 3.1 - Copyright (C) 1997 by Andrew J. Robinson   $%#!9 ; < = > @ uI xI {I ~I I I I I I I I I K L << L L A<<L (L <<0L ;L <<@L ML <TL `L A<fL tL <|L L <1JaxxaJ1s_L;,    ,;L_s (08@HPX`hpx (08@HPX`hpx$Id: qfiledlg.cpp,v 2.4 1997/01/09 16:21:27 paul Exp $$Id: qmsgbox.cpp,v 2.8 1997/03/23 17:51:15 hanord Exp $$Id: qapp.cpp,v 2.10 1997/02/26 14:16:33 hanord Exp $$Id: qapp_x11.cpp,v 2.32 1997/03/20 18:44:28 agulbra Exp $X<<;L>\L=;>`=<<L?}j j j   c a `  PWQRSTUV   !!""##$%& =*+,-./$Id: qcol_x11.cpp,v 2.9 1997/02/27 15:39:53 hanord Exp $$Id: qcolor.cpp,v 2.3 1997/03/10 12:03:20 hanord Exp $$Id: qcur_x11.cpp,v 2.2 1997/03/10 11:57:21 hanord Exp $ptx|?? 088880 @` px<x<>7#x~wcAx#7><>?Acw~ ,Ll$Id: qdialog.cpp,v 2.4 1996/11/26 15:12:03 hanord Exp $$Id: qevent.cpp,v 2.2 1997/03/12 09:06:47 aavit Exp $$Id: qfnt_x11.cpp,v 2.14 1997/04/04 15:54:13 hanord Exp $r s #s (s -s 3s _s s s s t &t It mt t t t $Id: qfont.cpp,v 2.9 1997/04/04 15:54:13 hanord Exp $vx |x x |x x x $Id: qmetaobj.cpp,v 2.4 1997/01/31 17:13:58 hanord Exp $$Id: qobject.cpp,v 2.20 1997/04/04 16:30:35 hanord Exp $$Id: qpalette.cpp,v 2.4 1997/02/09 17:04:25 hanord Exp $$Id: qpixmap.cpp,v 2.11 1997/03/22 16:18:37 hanord Exp $$Id: qpm_x11.cpp,v 2.9 1997/03/22 16:18:37 hanord Exp $$Id: qpmcache.cpp,v 2.1 1996/10/06 19:13:48 agulbra Exp $$Id: qpntarry.cpp,v 2.0 1996/09/24 10:15:58 agulbra Exp $$Id: qpoint.cpp,v 2.0 1996/09/24 10:15:58 agulbra Exp $$Id: qptd_x11.cpp,v 2.6 1997/03/18 09:56:20 hanord Exp $  $Id: qptr_x11.cpp,v 2.16 1997/04/01 14:47:46 aavit Exp $wwUUUUUUUUDD""DD                                            @@ @@ @@ @@""""AAAA""""AAAAR#Z#b#j#r#z####$b$$$  $Id: qrect.cpp,v 2.1 1996/11/25 14:52:44 agulbra Exp $$Id: qrgn_x11.cpp,v 2.0 1996/09/24 10:16:02 agulbra Exp $$Id: qwid_x11.cpp,v 2.23 1997/04/01 17:07:45 hanord Exp $$Id: qwidget.cpp,v 2.34 1997/04/02 10:32:01 hanord Exp $$Id: qwmatrix.cpp,v 2.0 1996/09/24 10:16:05 agulbra Exp $$Id: qbuffer.cpp,v 2.6 1997/02/09 17:11:39 hanord Exp $$Id: qcollect.cpp,v 2.0 1996/09/24 10:16:08 agulbra Exp $$Id: qdatetm.cpp,v 2.3 1997/02/03 14:20:15 hanord Exp $      Ġ Ƞ ̠ Р Ԡ ؠ ܠ       $Id: qdir.cpp,v 2.3 1997/03/30 15:22:50 hanord Exp $$Id: qdstream.cpp,v 2.2 1997/02/05 10:02:50 hanord Exp $$Id: qfile.cpp,v 2.4 1997/03/11 18:45:29 hanord Exp $$Id: qfileinf.cpp,v 2.4 1997/03/26 18:58:57 hanord Exp $$Id: qgarray.cpp,v 2.2 1997/01/26 19:38:46 agulbra Exp $$Id: qgcache.cpp,v 2.1 1996/10/06 19:13:50 agulbra Exp $$Id: qgdict.cpp,v 2.5 1997/01/30 11:38:05 hanord Exp $$Id: qglist.cpp,v 2.0 1996/09/24 10:16:12 agulbra Exp $$Id: qglobal.cpp,v 2.8 1997/03/14 15:26:29 eiriken Exp $$Id: qgvector.cpp,v 2.2 1997/03/14 14:41:48 hanord Exp $$Id: qiodev.cpp,v 2.5 1997/02/27 20:14:41 agulbra Exp $$Id: qregexp.cpp,v 2.1 1997/03/11 12:10:31 hanord Exp $$Id: qstring.cpp,v 2.5 1997/03/11 12:00:48 paul Exp $$Id: qbttngrp.cpp,v 2.3 1997/02/25 08:59:28 hanord Exp $$Id: qbutton.cpp,v 2.10 1997/03/25 16:26:05 hanord Exp $$Id: qchkbox.cpp,v 2.3 1997/03/25 13:20:42 hanord Exp $$Id: qcombo.cpp,v 2.26 1997/03/26 22:21:54 hanord Exp $$Id: qframe.cpp,v 2.0 1996/09/24 10:16:17 agulbra Exp $$Id: qgrpbox.cpp,v 2.0 1996/09/24 10:16:18 agulbra Exp $$Id: qlabel.cpp,v 2.8 1997/03/22 16:26:12 hanord Exp $$Id: qlcdnum.cpp,v 2.2 1997/03/12 15:31:52 paul Exp $ccccccccccccccccccccccccccc ccc$Id: qlined.cpp,v 2.16 1997/04/07 12:50:58 agulbra Exp $$Id: qlistbox.cpp,v 2.22 1997/03/16 13:45:27 paul Exp $$Id: qmenudta.cpp,v 2.3 1997/03/18 10:08:46 hanord Exp $ $Id: qpopmenu.cpp,v 2.11 1997/03/26 22:21:54 hanord Exp $$Id: qpushbt.cpp,v 2.14 1997/03/25 16:26:05 hanord Exp $$Id: qradiobt.cpp,v 2.3 1997/03/25 13:20:43 hanord Exp $                                 $Id: qscrbar.cpp,v 2.10 1997/03/14 21:20:55 hanord Exp $$Id: qtablevw.cpp,v 2.18 1997/03/16 13:36:29 paul Exp $$Id: qaccel.cpp,v 2.2 1996/10/07 08:23:18 hanord Exp $$Id: qbitmap.cpp,v 2.0 1996/09/24 10:15:45 agulbra Exp $$Id: qclipbrd.cpp,v 2.2 1997/01/14 09:23:58 hanord Exp $$Id: qconnect.cpp,v 2.1 1996/11/25 15:25:51 hanord Exp $$Id: qdrawutl.cpp,v 2.4 1997/03/22 16:18:36 hanord Exp $$Id: qimage.cpp,v 2.30 1997/03/26 13:32:16 hanord Exp $$Id: qpainter.cpp,v 2.5 1997/03/06 14:08:53 hanord Exp $$Id: qregion.cpp,v 2.0 1996/09/24 10:16:02 agulbra Exp $$Id: qsignal.cpp,v 2.0 1996/09/24 10:16:02 agulbra Exp $$Id: qtimer.cpp,v 2.3 1996/12/18 13:52:14 hanord Exp $$Id: qbitarry.cpp,v 2.0 1996/09/24 10:16:07 agulbra Exp $$Id: qtstream.cpp,v 2.4 1997/01/13 12:59:55 hanord Exp $0123456789abcdef0123456789ABCDEF$Id: qmenubar.cpp,v 2.8 1997/03/18 12:41:17 hanord Exp $$Id: qrangect.cpp,v 2.1 1996/11/29 15:00:18 eiriken Exp $$Id: qclb_x11.cpp,v 2.1 1997/01/15 11:22:07 hanord Exp $ ``0-  ( `- p P( 8~αޱ.>N^n~β޲.>N^n~γ޳.>N^n~δ޴.>N^n~ε޵.>N^n~ζ޶.>N^n~η޷.>N^n~θ޸.>N^n~ι޹.>N^n~κ޺.>N^n~λ޻.>N^n~μ޼.>N^n~ν޽.>N^n~ξ޾.>N^n~ο޿.>N^n~7 l r | ` ) <| 4(GCC: (GNU) 2.7.2.l.3GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.l.301.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.01.symtab.strtab.shstrtab.interp.hash.dynsym.dynstr.rel.bss.rel.plt.init.plt.text.fini.rodata.data.ctors.dtors.got.dynamic.bss.comment.noteԀ#) || 1<< 9 (()B )K``1Qhh1PV@Th\ )  b() (j(9( |p4 w4Ĥ ~4 8 d9d hd  0  gmod-3.1.orig/gmod100700 1750 1750 507024 6402577717 14144 0ustar neurochpneurochpELF@4̊4 (444ԀԀ4488484xl/lib/ld-linux.so.1au6)r2"dT3S:W-NXVKC'H.t9a187P5f0Fb _IY<;(iqe>OcoG#ZhQlR?4]L\M ^ jB!$kEsU*,&`%+Dp Amn=[ @g /Jh"'1o8 >PT\"b(<i8Tu8|H"h"xP""84 Pȓؓ"""[(8Xhx&Ȕ"ؔ& "# )("/8R6h"<ICKȕ"Rؕ"WG]pdP  j&"r(8y8XP"jؖgL"("(Ȓ0$ P18 "JH "_h "pC"~Ȗ"Z@"ED "Hl6@" W8x5="D"J("QؒXX"_f o6uF84 T"THWX"x,x>"libncurses.so.4strcpyioctl_DYNAMIC__ctype_bgetenverrno__strtol_internal_IO_stdout_fgetsmemcpy_IO_stderr_endwinperrormallocsleepselect__environ_initstrrchrnewpadcallocwritefprintfwrefreshstrcatcbreakwaddnstrmvwprintwkeypadreadstrncmpstrncpyreallocnoechoscrollokfreadnewwinfopenmemsetinitscrfclosetimewmovedelwin_finisprintfatexitwgetch_GLOBAL_OFFSET_TABLE_COLSexitwclrtoeolopenprefreshstrchrwtimeoutLINESwprintwclosefreelibg++.so.27cerr__pure_virtual__overflow___brk_addrabort__ls__7ostreamPCcstrcmp__builtin_vec_new__builtin_vec_delete__builtin_delete__builtin_newabsfputslibstdc++.so.27logsqrt__writeendl__FR7ostream_etextfflushfseek__bss_startset_new_handler__uflow__assert_failexpfwrite_edata_endfileno_exitlibm.so.5libc.so.5bcmpgetgidpopenprintfpclosegetuidoptargsys_nerrbzero__libc_initenviron_IO_stdin___fpu_controloptindstrstrrandsetgidsignalstrdupgettimeofdaygetoptsrand__setfpucwsetuid_sys_nerr_errno=8 asght[\]^>_M    ` c$d(,048B<@DHLPPTX\i`jdkhllpt x!|"#$%mn&oR'(p)*+,D./0E3Fq4G56H78r:;<z5%%h%h%h%h%h %h(%h0%h8p%h@`%hHP%hP@%hX0%h` %hh% hp%hx%h%h%h% h%$h%(h%,h%0hp%4h`%8hP%<h@%@h0%Dh %Hh%Lh%Ph%Th%Xh%\h%`h%dh %hh(%lh0%ph8p%th@`%xhHP%|hP@%hX0%h` %hh%hp%hx%h%h%h%h%h%h%h%hp%h`%hP%h@%h0%h %h%h%h%h%h%h%h%h %h(%h0%h8p%h@`%hHP%hP@%hX0%h` YЃ1UUUPSQ̀D$84P$hP eP[&&̀&S=t Ѓ;u[Í6ÐUWVSf|$fl$\$$f9|$$}vv9t\EtYL$PEPR? u8EPE؃[^_]Í&&L$ \C9|[^_]ÐUWVSt$1D$~T$ <49 859};76D$E<49} |$G \$K9}NjT$U<49]<4)P}<4)‰P\$9}|$L$M<49}M>4)&&T$U:4)؉ËL$M<4)L$ L$AT$ [^_]ÐxP ÐS\$CC Cj4PiC[ WVSt$|$Vt=B@9t6ÈCtjPR@ Ѓ9^uFPFtjhQPFPt V[^_Ít&&D$@@(Ðt&UWVS|$$T$(D$,t$0l$8L$]t&RW\cDRW ‰$AXuAZAX&&AZQYRW ‰$A^ЈA_A^VRWP:t&h V $6&Fh P $|$D$ D$l$$Yl$RWB93fJJp &&&\$@ƻ1ɍ69OIWB(9t Z(JpA hAPjAxvhAPjX&hAPjUD&&%6& 6&D$4PRWPa7!6&uRW\ vRW‰X<@=ROщZ<$B=&؍ROBgBhph+`j@APjA6&@j@APjAPVRWPw8 jRT$\$\$d$GD$P:;T$Wt $< ؈BgBv&tRO$D9RO؈D9rv&t&41ɐ9O~OIW\A鐍t&1ɍ69O~#IW\A6&D$D$[^_]Í,WVS\$<=5hD$8P5Ph5R T$85B[t$8{(u SVCP诲CC(|$ s|$ sD$9D$$u Sw5[^_,ÍvVSt$ Fx(t+uj8 t&&1Vxύv[^Í&UWVS|$\$ l$$_ jhQGP 59|5}5ƀ5555ƀ55ƀ55f5fǀ5H 59|5}5ƀ55ƀ5 555ƀ55ƀ55ƀ55ƀ55ƀ55Wt;B@9tÈCtjPR@ Ѓ9_uGP c_[P&pK$vBtfBB B B B BBfBBBBBBBBB fB"B$B(B*B,B0B4B8dB9fB:B<B@BDfBFBHBLBPBTBXBYBZB[B\B]B^fB`BbBcBdBeBfBgBhBiBlBp%4B 4Bt#xKt$[&&_[PpK!BtfBB B B B BBfBBBBBBBBB fB"B$B(B*B,B0B4B8dB9fB:B<B@BDfBFBHBLBPBTBXBYBZB[B\B]B^fB`BbBcBdBeBfBgBhBiBlBp%4B 4Bt#xKt$w169w~7L$(QPvGP-_ KhFэ&WZjhQGP [^_]ÍWVS$ \$ShvMGPu t|$jhhp nG u[^_ÍSh QP tu19\$~7vu/\$E0jPޝƒU,E04D$|L$ QDŽ$L$ Q]0E,T$0D$4D$$D$$PD$,D$,P軝D$8\$ $(D$ $y(t<$$󥍼$$󥋄$9$uD$ |$ t$PU$RT$($QSD$,D$,Py$B($$󥍼$$󥋄$9$$Ro $$󥍄$$$$󥋄$+$$‰Յ|FDŽ$$L$(QDŽ$$D$,T$,R_yÃ13_DŽ$$WDŽ$$V%yDŽ$WDŽ$Vy)C11߅u$L$($v$$$DŽ$$VDŽ$$Sx$$DŽ$VDŽ$SXx8)ʼn$$$jW$P\ $$$󥋄$+$$‰Յ|TDŽ$$L$(QDŽ$$D$,T$,RwÃ13m&&DŽ$$WDŽ$$VewDŽ$WDŽ$VCw)C11߅u$L$($v$$$DŽ$$VDŽ$$Sv$$DŽ$VDŽ$Sv8)ʼn$$$D$(jT$,R$Q蔰 $$󥍄$$$$󥋄$+$$‰Յ|ODŽ$$L$(QDŽ$$D$,T$,RuÃ13h6&DŽ$$WDŽ$$VuDŽ$WDŽ$Vcu)C11߅u$L$($v$$$DŽ$$VDŽ$$St$$DŽ$VDŽ$St8)ʼn$$$D$(jT$,R$Q贮 ԋ$D$(|$$獴$n,[^_]lÍt&$$$l$$<$$@$D$$$v$$$X$󥍼$D$X󥋄$H+$L$x3DŽ$<$QDŽ$DU_sÃ13cDŽ$<$QDŽ$DU,sËDŽ$<$PDŽ$DUsǃ)K17ljۅu)$L$($H $T$T$LDŽ$<$QDŽ$DUrǃ?$L$PDŽ$<$RDŽ$DUDrǃ\$()މt$( $L$Hj$P$R> $$l$H+$LNxBDŽ$<$RDŽ$DUqÃ13v DŽ$<$QDŽ$DUlqËDŽ$<$PDŽ$DUAqD$()K؋L$ 11ۅu$H6$T$T$LDŽ$<$QDŽ$DUpǃ?$L$PDŽ$<$RDŽ$DUpǃ\$()މt$( $L$Hj$P$R莪 $D$ $y(t<$($󥍼$$󥋄$9$,uD$ |$ t$P$RT$($QSD$,D$,PGo$B($$󥍼$($󥋄$49$$Ro $$$<$󥍄$($$$<󥋄$+$$‰Յ|HDŽ$$L$(QDŽ$$D$,T$,RnÃ13a6DŽ$$WDŽ$$VenDŽ$WDŽ$VCn)C11߅u$L$($v$$$DŽ$$VDŽ$$Sm$$ DŽ$VDŽ$Sm8)ʼn$$$D$(jT$,R$Q蔧 $$󥍄$$$$󥋄$+$$‰Յ|ODŽ$$L$(QDŽ$$D$,T$,RlÃ13h6&DŽ$$WDŽ$$VlDŽ$WDŽ$Vcl)C11߅u$L$($v$$$DŽ$$VDŽ$$Sk$$DŽ$VDŽ$Sk8)ʼn$$$jW$P輥 $$$󥋄$+$$‰Յ|TDŽ$$L$(QDŽ$$D$,T$,R kÃ13m&&DŽ$$WDŽ$$VjDŽ$WDŽ$Vj)C11߅u$L$($v$$$DŽ$$VDŽ$$S+j$$DŽ$VDŽ$Si8)ʼn$$$D$(jT$,R$Q $$󥍄$$$x$󥋄$|+$$‰Յ|ODŽ$p$pL$(QDŽ$x$xD$,T$,R(iÃ13h6&DŽ$p$pWDŽ$x$xVhDŽ$pWDŽ$xVh)C11߅u$L$($|v$$$DŽ$p$pVDŽ$x$xSKh$$DŽ$pVDŽ$xSh8)ʼn$$|$xjW$P $$$󥋄$|+$$‰Յ|TDŽ$p$pL$(QDŽ$x$xD$,T$,RmgÃ13m&&DŽ$p$pWDŽ$x$xV%gDŽ$pWDŽ$xVg)C11߅u$L$($|v$$$DŽ$p$pVDŽ$x$xSf$$DŽ$pVDŽ$xSXf8)ʼn$$|$xD$(jT$,R$QT |$,$h|$$8|$$󥋄$$b@$H$󥍄$\$$4$H󥋄$8+$<$‰Յ|QDŽ$,$,L$(QDŽ$4$4D$,T$,R:eÃ13jt&&DŽ$,$,WDŽ$4$4VdDŽ$,WDŽ$4Vd)C11߅u$L$($8v$D$D$<DŽ$,$,VDŽ$4$4S[d$<$@DŽ$,VDŽ$4S(d8)ʼn$<$8$4jW$P, $p$$\󥋄$8+$<$‰Յ|TDŽ$,$,L$(QDŽ$4$4D$,T$,R}cÃ13m&&DŽ$,$,WDŽ$4$4V5cDŽ$,WDŽ$4Vc)C11߅u$L$($8v$D$D$<DŽ$,$,VDŽ$4$4Sb$<$@DŽ$,VDŽ$4Shb8)ʼn$<$8$4D$(jT$,R$Qd $$󥍄$,$$$󥋄$+$ $‰Յ|ODŽ$$L$(QDŽ$$D$,T$,RaÃ13h6&DŽ$$WDŽ$$VUaDŽ$WDŽ$V3a)C11߅u$L$($v$$$ DŽ$$VDŽ$$S`$ $DŽ$VDŽ$S`8)ʼn$ $$D$(jT$,R$Q脚 ԋ$D$(|$$獴$Xv&$$$$9$g $)Ӎ6K$y(u QN$P$RT$ L$ Q+_$@$B($$󥍼$$󥋄$9$a$RL&DŽ$$$$$$T$|$L$x$ D$t$9$T$$󥍼$$󥋄$+$ $x<DŽ$$QDŽ$$PQ^Ã13s6DŽ$$QDŽ$$P^ËDŽ$$RDŽ$$Q]ǃ)K17ljۅu$L$($$$$ DŽ$$QDŽ$$Pk]ǃ?$ $DŽ$$QDŽ$$P&]ǃ\$()މt$($ $jL$|Q$P# $U$|$x$󥋄$+$ x=DŽ$$RDŽ$$Q\Ã13tvDŽ$$QDŽ$$PE\ËDŽ$$RDŽ$$Q\ǃ)K17ljۅu$&$ $$ DŽ$$RDŽ$$Q[ǃ?$ $DŽ$$RDŽ$$QV[ǃ\$()މt$($ $jT$|RL$|QV $$x(u P葺S$RT$L$QuZ$@$B($$󥍼$$󥋄$9$$R 6$$󥍄$D$p$$󥋄$+$$‰Յ|IDŽ$$L$(QDŽ$$D$,T$,RYÃ13bvDŽ$$WDŽ$$VYDŽ$WDŽ$VY)C11߅u$L$($v$$$DŽ$$VDŽ$$S Y$$DŽ$VDŽ$SX8)ʼn$$$D$(jT$,RL$xQג $$󥍄$D$l$|$󥋄$+$$‰Յ|UDŽ$t$tL$(QDŽ$|$|D$,T$,RXÃ13n DŽ$t$tWDŽ$|$|VWDŽ$tWDŽ$|VW)C11߅u$L$($v$$$DŽ$t$tVDŽ$|$|S+W$$DŽ$tVDŽ$|SV8)ʼn$$$|D$(jT$,RL$tQ ԋ$D$(|$$(獴$>&D$h$LD$d$T$`$ L$\$$D$X$`T$T$9L$h$8$󥍼$$$8󥋄$(+$,$x7DŽ$D$`PDŽ$$T$`RUÃ13hvDŽ$L$`QDŽ$$D$`PUËDŽ$T$`RDŽ$$L$`Q_Uǃ)K17ljۅu'$L$($(&$4$4$,DŽ$L$`QDŽ$$D$`PTǃ?$,$0DŽ$L$`QDŽ$$D$`PTǃ\$()މt$($,$(jL$\QD$lP袎 |$X$L󥋼$ߋ$(+$,x4DŽ$T$`RDŽ$$L$`QTÃ13fDŽ$L$`QDŽ$$D$`PSËDŽ$T$`RDŽ$$L$`QSŃ)K1uʼnۅu$(v$4 $4$,DŽ$T$`RDŽ$$L$`QASǃ?$,$0DŽ$T$`RDŽ$$L$`QSǃ\$()މt$($,$(jT$\RL$\Q l$h$tD$PUT$h|$X$`󥋄$(+$,x7DŽ$T$`RDŽ$$L$`QbRÃ13hvDŽ$L$`QDŽ$$D$`P+RËDŽ$T$`RDŽ$$L$`QQǃ)K17ljۅu$(t&$4 $4$,DŽ$T$`RDŽ$$L$`QQǃ?$,$0DŽ$T$`RDŽ$$L$`QRQǃ\$()މt$($,$(jT$\RL$XQR $x$x(u P荰S$RT$L$QqP$@$B($$󥍼$$󥋄$9$ C$R.&&$L$L$$󥍄$D$H$$󥋄$+$$‰Յ|NDŽ$$L$(QDŽ$$D$,T$,ROÃ13g&DŽ$$WDŽ$$VODŽ$WDŽ$VcO)C11߅u$L$($v$$$DŽ$$VDŽ$$SN$$DŽ$VDŽ$SN8)ʼn$$$D$(jT$,RL$PQ跈 $$󥍄$D$D$$󥋄$+$$‰Յ|UDŽ$$L$(QDŽ$$D$,T$,RMÃ13n DŽ$$WDŽ$$VMDŽ$WDŽ$VM)C11߅u$L$($v$$$DŽ$$VDŽ$$S M$$DŽ$VDŽ$SL8)ʼn$$$jWD$LP߆ $T$@$󥋄$؉D$<$+$ЉŅ|TDŽ$$L$(QDŽ$$D$,T$,R-LÃ13m&&DŽ$$WDŽ$$VKDŽ$WDŽ$VK)C11߅uL$<L$($$$$DŽ$$VDŽ$$SKK$$DŽ$VDŽ$SK8)ʼn$$$D$(jT$,RL$HQ $$󥍄$D$8$l$󥋄$p+$t$‰Յ|UDŽ$d$dL$(QDŽ$l$lD$,T$,RNJÃ13n DŽ$d$dWDŽ$l$lVJDŽ$dWDŽ$lVI)C11߅u$L$($pv$|$|$tDŽ$d$dVDŽ$l$lSkI$t$xDŽ$dVDŽ$lS8I8)ʼn$t$p$lD$(jT$,RL$@Q7 |$,$H|$$|$$󥋄$$C@$<$󥍄$PD$4$($<󥋄$,+$0$‰Յ|GDŽ$ $ L$(QDŽ$($(D$,T$,R HÃ13`DŽ$ $ WDŽ$($(VGDŽ$ WDŽ$(VG)C11߅u$L$($,v$8$8$0DŽ$ $ VDŽ$($(SKG$0$4DŽ$ VDŽ$(SG8)ʼn$0$,$(jWD$ǃ?$,$0DŽ$$RDŽ$$U>ǃ\$()މt$( $,$(j$P$Rx $$`$(+$,NxBDŽ$$RDŽ$$U>Ã13v DŽ$$QDŽ$$U=ËDŽ$$PDŽ$$U=D$()K؋L$ 11ۅu$(6$4$4$,DŽ$$QDŽ$$UB=ǃ?$,$0DŽ$$RDŽ$$U=ǃ\$()މt$( $,$(j$P$Rv $PD$ $y(t<$$󥍼$$󥋄$9$ uD$ |$ t$P$RT$($QSD$,D$,P;$B($$󥍼$$󥋄$9$t$RW_ $$$$󥋄$t$$$$$󥋄$+$$‰Յ|JDŽ$$L$(QDŽ$$D$,T$,R;Ã13ct&DŽ$$WDŽ$$V:DŽ$WDŽ$V:)C11߅u$L$($v$$$DŽ$$VDŽ$$S+:$$DŽ$VDŽ$S98)ʼn$$$D$(jT$,R$Qs |$ $(󥋄$D$$T$H$+L$HL$$$3 [^_]ĘÍ&&$$$$$$$$$$6$$$$󥋄$t$$$󥋄$+$$x=DŽ$$RDŽ$Uy8Ã13mv&DŽ$$QDŽ$U<8ËDŽ$$PDŽ$U8ǃ)K17ljۅu)$L$($ $$$DŽ$$QDŽ$U7ǃ?$$DŽ$$RDŽ$UT7ǃ\$()މt$( $$j$P$RNq $$$+$NxBDŽ$$RDŽ$U6Ã13v DŽ$$QDŽ$U|6ËDŽ$$PDŽ$UQ6D$()K؋L$ 11ۅu$6$$$DŽ$$QDŽ$U5ǃ?$$DŽ$$RDŽ$U5ǃ\$()މt$( $$j$P$Ro $D$ $y(t<$$󥍼$$󥋄$9$uD$ |$ t$P赑$RT$($QSD$,D$,PW4$B($$󥍼$$󥋄$9$l$RW $$$$󥋄$t$$$$l$󥋄$p+$t$‰Յ|JDŽ$d$dL$(QDŽ$l$lD$,T$,R3Ã13ct&DŽ$d$dWDŽ$l$lVe3DŽ$dWDŽ$lVC3)C11߅u$L$($pv$|$|$tDŽ$d$dVDŽ$l$lS2$t$xDŽ$dVDŽ$lS28)ʼn$t$p$lD$(jT$,R$Ql $<$󥋄$t$$P$$($<󥋄$,+$0$‰Յ|QDŽ$ $ L$(QDŽ$($(D$,T$,R1Ã13jt&&DŽ$ $ WDŽ$($(Vu1DŽ$ WDŽ$(VS1)C11߅u$L$($,v$8$8$0DŽ$ $ VDŽ$($(S0$0$4DŽ$ VDŽ$(S08)ʼn$0$,$(jW$Pj $d$$P󥋄$,+$0$‰Յ|TDŽ$ $ L$(QDŽ$($(D$,T$,R/Ã13m&&DŽ$ $ WDŽ$($(V/DŽ$ WDŽ$(V/)C11߅u$L$($,v$8$8$0DŽ$ $ VDŽ$($(S/$0$4DŽ$ VDŽ$(S.8)ʼn$0$,$(D$(jT$,R$Qh $$󥋄$t$$ $$$󥋄$+$$‰Յ|QDŽ$$L$(QDŽ$$D$,T$,R .Ã13jt&&DŽ$$WDŽ$$V-DŽ$WDŽ$V-)C11߅u$L$($v$$$DŽ$$VDŽ$$S+-$$DŽ$VDŽ$S,8)ʼn$$$jW$Pf $t$$ $$ 󥋄$+$‰Յ|MDŽ$$T$(RDŽ$$L$,D$,PF,Ã13f&DŽ$$WDŽ$$V,DŽ$WDŽ$V+)C11߅u$L$($v$$$DŽ$$VDŽ$$Sk+$$DŽ$VDŽ$S8+8)ʼn$$$D$(jT$,R$Q4e |$,$|$$|$$`󥋄$$&@$$$$󥍄$$$$󥋄$+$$‰Յ|SDŽ$$L$(QDŽ$$D$,T$,R *Ã13l&DŽ$$WDŽ$$V)DŽ$WDŽ$V))C11߅u$L$($v$$$DŽ$$VDŽ$$S+)$$DŽ$VDŽ$S(8)ʼn$$$D$(jT$,R$Qb |$ $󥋄$D$$T$$ $ &&$$$$9$t$,9$k$x(u P觇S$RT$ L$ Q'$@$B($$󥍼$p$󥋄$|9$a$R L&DŽ$$x$$D$|$T$x$L$t$D$pv$9$4$p$󥍼$$p󥋄$+$$x<DŽ$L$|QDŽ$D$|P&Ã13m&DŽ$L$|QDŽ$D$|P{&ËDŽ$T$|RDŽ$L$|QO&ǃ)K17ljۅu'$L$($&$$$DŽ$L$|QDŽ$D$|P%ǃ?$$DŽ$L$|QDŽ$D$|P%ǃ\$()މt$($$jL$xQ$P_ $U$|$t$x󥋄$+$x9DŽ$T$|RDŽ$L$|Q$Ã13jt&DŽ$L$|QDŽ$D$|P$ËDŽ$T$|RDŽ$L$|Q$ǃ)K17ljۅu$t&$ $$DŽ$T$|RDŽ$L$|Q!$ǃ?$$DŽ$T$|RDŽ$L$|Q#ǃ\$()މt$($$jT$xRL$xQ] $$x(u PS$RT$L$Q#$@$B($$󥍼$$󥋄$9$$R薂&&$L$l$\$󥍄$D$h$H$\󥋄$L+$P$‰Յ|NDŽ$@$@L$(QDŽ$H$HD$,T$,RW"Ã13g&DŽ$@$@WDŽ$H$HV"DŽ$@WDŽ$HV!)C11߅u$L$($Lv$X$X$PDŽ$@$@VDŽ$H$HS{!$P$TDŽ$@VDŽ$HSH!8)ʼn$P$L$HD$(jT$,RL$pQG[ |$ $󥋄$$D$$T$$ $V&D$d$,D$`$T$\$L$X$D$T$@T$PL$d9$t$$󥍼$$󥋄$+$ $x7DŽ$D$\PDŽ$T$\R Ã13hvDŽ$L$\QDŽ$D$\PËDŽ$T$\RDŽ$L$\Qǃ)K17ljۅu'$L$($&$$$ DŽ$L$\QDŽ$D$\P!ǃ?$ $DŽ$L$\QDŽ$D$\Pǃ\$()މt$($ $jL$XQD$hPX $t|$T$,ߋ$+$ xBDŽ$T$\RDŽ$L$\QMÃ13t&&DŽ$L$\QDŽ$D$\P ËDŽ$T$\RDŽ$L$\QŃ)K1uʼnۅu$v$ $$ DŽ$T$\RDŽ$L$\Qqǃ?$ $DŽ$T$\RDŽ$L$\Q2ǃ\$()މt$($ $jT$XRL$XQ2W l$d$D$LUT$d|$T$@󥋄$+$ x7DŽ$T$\RDŽ$L$\QÃ13hvDŽ$L$\QDŽ$D$\P[ËDŽ$T$\RDŽ$L$\Q/ǃ)K17ljۅu$t&$ $$ DŽ$T$\RDŽ$L$\Qǃ?$ $DŽ$T$\RDŽ$L$\Qǃ\$()މt$($ $jT$XRL$TQU $$x(u PzS$RT$L$Q$@$B($$󥍼$$󥋄$9$3$R6z&&$L$H$$󥍄$D$D$$󥋄$+$$‰Յ|NDŽ$$L$(QDŽ$$D$,T$,RÃ13g&DŽ$$WDŽ$$VDŽ$WDŽ$V)C11߅u$L$($v$$$DŽ$$VDŽ$$S$$DŽ$VDŽ$S8)ʼn$$$D$(jT$,RL$LQR $$󥍄$D$@$|$󥋄$+$$‰Յ|UDŽ$t$tL$(QDŽ$|$|D$,T$,RÃ13n DŽ$t$tWDŽ$|$|VDŽ$tWDŽ$|V)C11߅u$L$($v$$$DŽ$t$tVDŽ$|$|S;$$DŽ$tVDŽ$|S8)ʼn$$$|jWD$HPQ $t$L$<$ډT$8$+$‰Յ|TDŽ$t$tT$(RDŽ$|$|L$,D$,P]Ã13m&&DŽ$t$tWDŽ$|$|VDŽ$tWDŽ$|V)C11߅uL$8L$($$$$DŽ$t$tVDŽ$|$|S{$$DŽ$tVDŽ$|SH8)ʼn$$$|D$(jT$,RL$DQGO $`$󥍄$tD$4$L$`󥋄$P+$T$‰Յ|UDŽ$D$DL$(QDŽ$L$LD$,T$,R~Ã13n DŽ$D$DWDŽ$L$LV5DŽ$DWDŽ$LV)C11߅u$L$($Pv$\$\$TDŽ$D$DVDŽ$L$LS$T$XDŽ$DVDŽ$LSh8)ʼn$T$P$LD$(jT$,RL$u D3CF 9|M A u*Dž<Dž<z|(DžXDžXDž1ې449}C~|uM A fff1ffAqxPhQBP% Džvp9tM A pt)ĉl=;w_<)9} (QPlV% ^(SPlQs% ڋ)މv&1҅~"MPSjlP5'9"1ۋu F 9}5hS%F ؉ECǍ&Džh6h?1M A 9thlXff@f ‰fdЀf=w؋XVffFf ‰f % dfX\uX\DžtcPPSO)u F 9rF9v}u M AAu F9r M A9vX wX txvXtX6}t\uDžX6}tDžX\wvDžXjt&&\tV\ \A6\‹\‰\\\u F fxEhʋEdhLEXLE\LEDEDEDEDG6v&ht&}tJ1u ~ t?6jjj@{P{Pw&f{GM A 9|̋p |uhDž9}Iv1ۋM y t&_ffCu F 9|ヅ9|u F 1ۍ69~pjLQ$@H4@@@ @f@@@@<@@@D@@H C듍t&&61ۍ69 JH\EP[DGPxVSMPxP\FRFЃxxCxPh Q@@PA }$u jQuP Pt&MP]hu$VMDžPVP2v&Cv&9xPhQBP 9t6&p1L[^_]Ít&&@UWVS|$T1D$1t$XF F5F8FYxjhQ@P xPh Q@@P xD$D$PhQBPt$(t$ 1=@@=~1vA@=~1vE@=~WPUZhWB D$(u1[^_]@Ðt&Pj0jD$,P0tD$Pg 1[^_]@Í6|$ uD$!}A+~USjD$P‰9t1[^_]Ív9[^_]ÍT$L$t"<w%{ :u9 w UWVS$$tJ$SjjD$HPGMMtD$t&T$<D$= щL$$S 1tT$f$ffwhj wEF$S 9|$j1\$<\$Hv&0D$4D$0D$1D$:D$;D$ D$$D$($Sjj\$$SL$$?ET$$D$lL$ tD$tD$PtD$LtD$HtD$D$WT$T$TT$ \$P\$ |$L|$ T$HT$ \$ Sj|$8WL$0\$,$Z&&$WjjD$iPL$0n$D$TD$XD$\D$`D$ L$ |$t!\$,|$ \$@G|$kvD$@|$PtT$T\T$1ۍ69\$ JHL$L$ Qh<4VSPxPL$(ARL$,AЃF\$CxPh Q@@P |$$u#jUPPL$,) nv&PhL$,QL$,L$,QUP+&Cv&9\$[^_]Í&&tUWVS$D$PD$4$ 󥋼$Ph jD$pP_= t 1[^_]tjD$IP\$$SD$<StSE8Pb$E E Ek$$ ‰U$E$EEEE6=t5jPPPffPRj1Ð&@9%Ð& UWVSH9| h[^_] À~T4tH=u" 7[^_] 19}6ƂB@9|ƀ\$$u!@[^_] Í|$$t|$$9xwB[^_] Í&K59|5}5ƀ55ƀ55ƀ55ƀ5 5D$$% €5 5\$$AtA 4t&t+@6P $R $ =|$(\$$\$ \$(|$$9==1z t[|$ whhRE\$4P|$8WPV|$0l$t FB 9|D$,9D$,[19-<D$16 A 9}2xQUPvRP|$$1 D$Fl$Ív|$t5 fEu&16@ 9}CxJv\tRCQC|$ЃFl$뾍&&|$t) fEu9  E&D$,&=5t D$(&tf t==Ht t@H[^_] Í6&|$t $\6   1fx~ 6uƂB@9|⡈5ƀVST$ t$\$tz8 tK!5&t#!|{$~=o=|h u[^Ív[^Ív t u[^Í6VSL$ t$\$ D/F=+v&65 !6W&=u< w #]$<uBt=+D&u$t&uu#Љˆ6&>u[^ÍUWVST$D$\$l$(t$,1 tF taF=t&= f^f&T$ BE9}׋L$ 9=~f6t E6P $S $ j^et&&ufL$$fDv&VнTu \t&ɈLt fDf[^_] UWVSl$t$(D$>FD$FD$L$,A <uD$PD$PUt&&<uD$PD$PU 1Ҁ|$utxRTm@PFt!%x PBPux@Pe/t+~t%|$tL$,AxPWBPD L$4QL$0QPFPFPFPUxPH u+L$0QL$0QL$,QL$,QFPFPU D$,L$4QL$0QPFPD$&PD$+PUxP u-L$0QL$0QL$,QL$,QD$&PD$+PU D$,D$[^_]Ít&&D$|$ tÍ6 Ív&1Í&Ív&Ív& Ív&1|$ t@ÐD$@HD$t PÐWS$1 T$ $x@$=(t x@D$ jjRSx@@PLx@D$ =5t $6xP9=$|$t59|5}5ƀ55ƀ55ƀ55ƀ55ǀ55xPW[ 0ۡxP~xPtxPTu=$t (x@$t#N5u$(1$L$t j[_ÐxjPBP uA$u9$<u45ƀD$P5PP $$ÐUWVS$$j/WHÃuvC0Ѝhjj$R |$$RhWQ UWS uh4WtFh:WtFh?WptFhHWZtF hOWDeF \&[^_]ĤÐVSt$thpV* tJtV tKt&It&8u;@ PuÃ+q6&p6&nt$vpb`9+0+y-t&&fbx&nc6th&q7Rtjt&S 0u 5 )5,5n&0u5 5,5.&5&5&5xP7 VhMPD$D$ 0uP t&&ƒd~SdL6 t_VhMPD$D$ 0uP )Љ…}1҉ЉD$VhM P2 ,lt&&jjP#5?&&=,u,00Tډ08u@ PTÃ6[^Ív&hpjhpj hpj Ð&D$|$ tÍ6 Ív&1Í&Ív&Ív& Ív&1|$ t@ÐD$@HD$t PÐ UWVSl$ \$(L$4T$ tjhCP jjCP tjh CPn jjCP tjhCPF jhCP3jhQC P#[Ít&VSt$ \$>ut V [^Ít&&VS\$ t$;u0jjCP\ tjVCP CP[^Í&&VS\$ t$;u0jjCP tjVCPh CP[^Í&&T$D$:uPhoj jBP8ÍVS\$ t$;u9jjCP tjVCP CP CP[^Ðt&T$D$:uPhj jB PÍVS\$ t$;u;+D$PhtjjCPVhtjjCPm(CP[^ÍvVS\$ D$t$;u5Phj jC P2VhjjC P(C P[^Ðt&D$|$ tÍ6 Ív&1Í&Ív&Ív& Ív&1|$ t@ÐD$@HxD$t P`Ð1Í&UWVS\$0l$4t$8S t9uC { S@JHCPCPClPA RA$ЉƒC9tSKpS@JHCPC4PA(RA,Љƒ C9tSKpSP{TutD$Su*fCFf9C:t 6&St SKpKp {^t0C_D$|$T$({^9u K vucKpCXD$tMS]C[D$z6CYЅ}D$D$$?C[C\9tK\KpK9tDS0‰T$(yD$(t&~ D$(C9T$(C09tS0KpKtIS(‰T$(yD$(6&~ D$(CT$(C(9tS(KpC 9uC {itCiKp{etESfCdB6CbЅ}T$(C`9tfS`Kp CdCe$?CdS<XT$|$?{i|$(S=$t&Q     Q     D$(‰пL$(wD$(D$(vD$(@D$(J6&d$(:6&S=vHD$(t&H)D$(T$(~D$(6&}D$(T$(Ci9tSiKpjC)PS Stui{gtcuu D$F<K C SC  щNKC SC  щNKC SC  щN 9N}F j S^S訯F%S&~ ~N<F@ FD~~5UD$PV|$0W|$0W|$0Wzǃ~&FD$[^_]Í&T$D$BHt R菰ÍvD$|$ tÍ6 Ív&1Í&Ív&Ív& Ív&1|$ t@ÐD$@HD$t PÐUWVS|$(D$@D$D$t$V?ff %E@ E@ t$^8F9 V:F;  N4F5 V6F7  щ)ȉEt EM<tM<tM<ED}~:t$,VD$PUt$4Vt$4Vt$4Vƃu6&ED$[^_]Í&T$D$BH t RߦÍvD$|$ tÍ6 Ív&1Í&Ív&Ív& Ív&1|$ t@ÐD$@H D$t P0ÐUWVS$$ D$($D$ l$G$7$Pjjt$8t$$D$$P苤MtD$([^_]Í&jD$4P_SG.S薺L$<D$= T$>D$?  щL$4fT$WD$Xff fT$ f|$$VhjD$$PU4uQUD$(TT$t$V$Phƒ %L$,t$- T$.D$/  щL$$$t$Vj@f$fD$$ff T$t$t$D$P$t$ D$ P$t$$D$$P$t$(D$(P$ t$,D$,P$ t$0D$0PwLt$4D$4P$$t$Vj j$D$ t$ V$D$$t$$V$ D$(t$(V$ D$,t$,V$ D$0t$0VGpD$4t$4V+$ $!$$Vj(jD$$P0U4u(UT$(T$D$P$V趑ƒ s1f|$v$Pj(jt$`t$ D$ P¡t$,(+L$Tt$U T$VD$W  ͋t$V\$(\$D$P$Vƒ fL$f|$gL$,D$- T$.D$/  щO\$0D$1 T$2D$3  Ӊ_L$4D$5 T$6D$7  ˉ_ T$:uG<u G< 6G<D$:tO<D$;T$_D>`FG $uBfL$t8|$t,t$L$AHAD$AHAŻ t&$f|$t&D$$$$Ë$A16$Ë|$D8`D;`C$9|ۋL$A $A ƋA$AD$A$AŋA1$At&$_fL$th~cD$4tY|$L$T9`T=`f|$t L$D ^D _"|$D=^ЉD=_$D$ D$ PhQ$GP 9t$ }0&;FdPL$Q$GP:à L$Qk؃[^_]xÍD$|$ tÍ6 Ív&1Í&Ív&Ív& Ív&1|$ t@ÐD$@H"D$t PÐT$D$BÍUWVST$:Bt P7PL$$QT$ BfjP1L$(Q 1l$9t$ ~ZL$T$z{tVhX"U t&]"D$CPCPC PCPCPUha"W讘 F렋T$ L$QAHPL$A PjjjjT$0BP[^_]ÍL$|$~A+A Q9}BQ 6A~HAHPA PjjjAPAP輗ËD$|$ tÍ6 Ív&1Í&Ív&Ív& Ív&1|$ t@ÐD$@H"D$t PÐS\${ CpB蒪59|5}5ƀ55L$ 55ƀ55C 55ƀ55ƀ55ƀ55ƀ55[Í6&1[ÍUWVSt$|$~ Fptϩ~p}{59|5}$5ƀ5555ƀ55F 5F@555ƀ55fǀ55FpqF0)P處^0Fเ)щ…}Ã~v&}1ۊF8N^n~Γޓ.>N^n~Δޔ.>N^n~Εޕ.>N^n~Ζޖ.$. P P H  hHGCC: (GNU) 2.7.2.l.3GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.1GCC: (GNU) 2.7.2.l.301.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.01.symtab.strtab.shstrtab.interp.hash.dynsym.dynstr.rel.bss.rel.plt.init.plt.text.fini.rodata.data.ctors.dtors.got.dynamic.bss.comment.noteԀ#`) HHP1 9 HB hKPPQXXV@@v\P PbX Xj848pw~Ȃ@p,gmod-3.1.orig/CursesScr.C100600 1750 1750 6560 6402577432 15243 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #include #include "CursesScr.h" #include "Sample.h" CursesScr::CursesScr(unsigned char background) { background_ = background; if (!background) { #ifdef USE_NCURSES initscr(); cbreak(); noecho(); infoWin = newwin(6, 0, 0, 0); scrollok(infoWin, FALSE); memWin = newwin(1, 0, LINES - 2, 0); scrollok(memWin, FALSE); posWin = newwin(1, 0, LINES - 1, 0); scrollok(posWin, FALSE); keypad(posWin, TRUE); wtimeout(posWin, 0); mvwaddstr(infoWin, 0, 0, "File:"); mvwaddstr(infoWin, 1, 0, "Name:"); mvwaddstr(infoWin, 2, 0, "Channels:"); mvwaddstr(infoWin, 2, 14, "Type:"); waddstr(memWin, "=== bytes of total onboard used ==="); waddstr(posWin, "Position 000/000, Pattern 000"); #else struct termios newTermio; oldFlags_ = fcntl(0, F_GETFL); fcntl(0, F_SETFL, oldFlags_ | O_NONBLOCK); tcgetattr(0, &oldTermio_); newTermio = oldTermio_; newTermio.c_lflag = 0; newTermio.c_cc[VTIME] = 0; newTermio.c_cc[VMIN] = 0; tcsetattr(0, TCSANOW, &newTermio); #endif } } CursesScr::~CursesScr() { if (!background_) { #ifdef USE_NCURSES endwin(); #else fcntl(0, F_SETFL, oldFlags_); tcsetattr(0, TCSANOW, &oldTermio_); #endif } } void CursesScr::moduleFile(const char *fileName) { if (!background_) { #ifdef USE_NCURSES mvwaddstr(infoWin, 0, 6, fileName); wclrtoeol(infoWin); #else fputs("\n\n\nFile: ", stdout); fputs(fileName, stdout); fputs("\n", stdout); #endif } } void CursesScr::moduleTitle(const char *name) { if (!background_) { #ifdef USE_NCURSES mvwaddstr(infoWin, 1, 6, name); wclrtoeol(infoWin); #else fputs("Name: ", stdout); fputs(name, stdout); fputs("\n", stdout); #endif } } void CursesScr::setChannels(int numChannels) { if (!background_) { #ifdef USE_NCURSES mvwprintw(infoWin, 2, 10, "%02d", numChannels); #else printf("Channels: %02d ", numChannels); #endif } } void CursesScr::setType(const char *type) { if (!background_) { #ifdef USE_NCURSES mvwaddstr(infoWin, 2, 20, type); wclrtoeol(infoWin); wrefresh(infoWin); #else fputs("Type: ", stdout); fputs(type, stdout); fputs("\n\n", stdout); #endif } } void CursesScr::setMaxPosition(int maxPosition) { if (!background_) { #ifdef USE_NCURSES mvwprintw(posWin, 0, 13, "%03d", maxPosition); #else // fill in later #endif } } void CursesScr::setMem(int avail, int total) { if (!background_) { #ifdef USE_NCURSES mvwprintw(memWin, 0, 4, "%7d", total - avail); mvwprintw(memWin, 0, 21, "%7d", total); wrefresh(memWin); #else printf("=== %d bytes of %d total onboard used ===\n", total - avail, total); #endif } } void CursesScr::setPos(unsigned int pos, unsigned int pat) { if (!background_) { #ifdef USE_NCURSES //mvwprintw(posWin, 0, 0, "Position %03d, Pattern %03d", pos, pat); mvwprintw(posWin, 0, 9, "%03d", pos); mvwprintw(posWin, 0, 26, "%03d", pat); wrefresh(posWin); #else printf("Position %03d, Pattern %03d\r", pos, pat); fflush(stdout); #endif } } gmod-3.1.orig/CursesScr.h100600 1750 1750 1623 6402577432 15303 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #ifndef CURSESSCR_H #define CURSESSCR_H #ifdef USE_NCURSES #include #else #include #include #endif class Sample; class CursesScr { public: CursesScr(unsigned char); ~CursesScr(); void moduleFile(const char *); void moduleTitle(const char *); void setChannels(int); void setType(const char *); void setMaxPosition(int); void setMem(int, int); void setPos(unsigned int, unsigned int); int getChar(); private: unsigned char background_; #ifdef USE_NCURSES WINDOW *infoWin; WINDOW *memWin; WINDOW *posWin; #else long oldFlags_; struct termios oldTermio_; #endif }; inline int CursesScr::getChar() { if (!background_) { #ifdef USE_NCURSES return wgetch(posWin); #else return getchar(); #endif } else return EOF; } #endif gmod-3.1.orig/Envelope.C100600 1750 1750 4320 6402577432 15074 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #include #include "defines.h" #include "Envelope.h" void Envelope::load(int numPoints, int sustainPoint, int loopStartPoint, int loopEndPoint, int typeFlags, unsigned short fadeout, int baseVal, unsigned char *data) { int i, prevX, prevY; unsigned char *dataPtr = data; fadeRate = fadeout; baseValue_ = baseVal; if (!(typeFlags & 0x01)) { numSegments = 0; return; } sustainOn = typeFlags & 0x02; loopOn = typeFlags & 0x04; numSegments = numPoints - 1; if (envelope != 0) delete [] envelope; envelope = new EnvelopeSegment[numSegments]; if (sustainOn) sustainX = INTEL_SHORT(dataPtr + (sustainPoint * 4)); if (loopOn) { loopStartX = INTEL_SHORT(dataPtr + (loopStartPoint * 4)); loopEndX = INTEL_SHORT(dataPtr + (loopEndPoint * 4)); } prevX = INTEL_SHORT(dataPtr); dataPtr += 2; prevY = INTEL_SHORT(dataPtr); dataPtr += 2; for (i = 0; i < numSegments; i++) { envelope[i].startX = prevX; envelope[i].startY = prevY; prevX = envelope[i].endX = INTEL_SHORT(dataPtr); dataPtr += 2; prevY = envelope[i].endY = INTEL_SHORT(dataPtr); dataPtr += 2; envelope[i].m = double(envelope[i].endY - envelope[i].startY) / double(envelope[i].endX - envelope[i].startX); envelope[i].b = double(envelope[i].startY) - double(envelope[i].m * envelope[i].startX); } } int Envelope::getY(int &x, char inSustain, unsigned short *fade) const { int y; if (numSegments == 0) y = baseValue_; else { if ((sustainOn) && (inSustain == MY_TRUE) && (x > sustainX)) x = sustainX; if ((loopOn) && (x >= loopEndX)) x = loopStartX; if (x > envelope[numSegments - 1].endX) x = envelope[numSegments - 1].endX; for (int i = 0; i < numSegments; i++) { if ((envelope[i].startX <= x) && (envelope[i].endX >= x)) y = envelope[i].m * x + envelope[i].b; } x++; } if ((inSustain == MY_FALSE) && fade) { y = (y * (*fade)) / 65535; if (fadeRate <= *fade) *fade -= fadeRate; else *fade = 0; } return (y); } gmod-3.1.orig/Envelope.h100600 1750 1750 1430 6402577432 15140 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #ifndef __EnvelopeH #define __EnvelopeH struct EnvelopeSegment { int startX, startY; int endX, endY; double m, b; }; class Envelope { public: Envelope(); ~Envelope(); void load(int, int, int, int, int, unsigned short, int, unsigned char *); int getY(int &, char, unsigned short * = 0) const; private: struct EnvelopeSegment *envelope; int baseValue_; int numSegments; int sustainX; int loopOn; int sustainOn; int loopStartX; int loopEndX; unsigned short fadeRate; }; inline Envelope::Envelope() : envelope(0), numSegments(0), loopOn(0), sustainOn(0), fadeRate(0) { } inline Envelope::~Envelope() { if (envelope != 0) delete [] envelope; } #endif gmod-3.1.orig/Makefile100600 1750 1750 3642 6402577432 14661 0ustar neurochpneurochp# AWE_SUPPORT will compile in support for awedrv (for AWE cards) # USE_LOCAL will cause gmod to use a copy of soundcard.h found in the # current directory. # USE_NCURSES will compile gmod with support for special keys (arrows, etc). # The ncurses library must be installed to compile with this defined. # USE_X will compile gmod with and X interface. # Note: do not define both USE_NCURSES and USE_X at the same time. # Use the next line for shared libqt #LIBS = -lX11 -lqt # Use the next line for static libqt LIBS = -lX11 /usr/local/qt/lib/libqt.a DEFINES = -DUSE_X -DAWE_SUPPORT INCLUDES = -I/usr/local/qt/include LIBDIRS = -L/usr/X11R6/lib -L/usr/local/qt/lib CC = g++ CFLAGS = -O2 -m486 -fomit-frame-pointer -fno-strength-reduce -w #CFLAGS = -Wall -g # Where to put the binary and man page BINDIR = /usr/local/bin MANDIR = /usr/local/man/man1 CFILES = compress.C cvt_period.C Sequencer.C \ gmod.C init.C load_669.C load_mod.C load_mtm.C \ load_s3m.C load_ult.C load_xm.C misc.C OptShell.C parse.C \ play_mod.C play_note.C proc_input.C \ read_rc.C TopShell.C TrackShell.C QueueShell.C SampleShell.C \ CommentShell.C Envelope.C Sample.C \ Six69.C mod.C mtm.C s3m.C ult.C xm.C Voice.C Sequencer2.C \ VoiceGUS.C VoiceAWE.C OFILES := $(patsubst %.C, %.o, $(CFILES)) MOCFILES = Sequencer.moc OptShell.moc TopShell.moc TrackShell.moc SampleShell.moc CommentShell.moc QueueShell.moc xgmod: .depend $(MOCFILES) $(OFILES) $(CC) -o xgmod $(LIBDIRS) $(OFILES) $(LIBS) .C.o: $(CC) $(CFLAGS) $(INCLUDES) $(DEFINES) -c $< %.moc: %.h /usr/local/qt/bin/moc $< -o $@ .depend: $(CC) $(DEFINES) -MM -DDEPEND $(INCLUDES) $(CFILES) > .depend #clean added by Peter Federighi .PHONY: clean clean: rm -f $(OFILES) $(MOCFILES) xgmod core .depend .PHONY: install install: xgmod install -o bin -g bin -m 755 -s xgmod $(BINDIR)/xgmod install -o bin -g info -m 644 xgmod.1 $(MANDIR)/xgmod.1 ifeq (.depend,$(wildcard .depend)) include .depend endif gmod-3.1.orig/Makefile.gmod100600 1750 1750 3002 6402577432 15574 0ustar neurochpneurochp# AWE_SUPPORT will compile in support for awedrv (for AWE cards) # USE_LOCAL will cause gmod to use a copy of soundcard.h found in the # current directory. # USE_NCURSES will compile gmod with support for special keys (arrows, etc). # The ncurses library must be installed to compile with this defined. # USE_X will compile gmod with and X interface. # Note: do not define both USE_NCURSES and USE_X at the same time. DEFINES = -DUSE_NCURSES -DAWE_SUPPORT LIBS = -lncurses CFLAGS = -O2 -m486 -fomit-frame-pointer -fno-strength-reduce -w -I/usr/include/ncurses #CFLAGS = -g -Wall -I/usr/include/ncurses CC = g++ # Where to put the binary and man page BINDIR = /usr/local/bin MANDIR = /usr/local/man/man1 CFILES = compress.C cvt_period.C Sequencer.C gmod.C init.C \ load_669.C load_mod.C load_mtm.C load_s3m.C load_ult.C load_xm.C \ misc.C parse.C Sample.C play_mod.C play_note.C \ proc_event.C proc_input.C read_rc.C signals.C Envelope.C \ CursesScr.C Voice.C Six69.C mod.C mtm.C s3m.C ult.C xm.C Sequencer2.C \ SampleShell.C VoiceAWE.C VoiceGUS.C OFILES := $(patsubst %.C, %.o, $(CFILES)) gmod: .depend $(OFILES) $(CC) -o gmod $(OFILES) $(LIBS) .C.o: $(CC) $(CFLAGS) $(DEFINES) -c $< .depend: $(CC) $(DEFINES) -MM $(CFILES) > .depend #clean added by Peter Federighi .PHONY: clean clean: rm -f $(OFILES) gmod core .depend .PHONY: install install: gmod install -o bin -g bin -m 755 -s gmod $(BINDIR)/gmod install -o bin -g info -m 644 gmod.1 $(MANDIR)/gmod.1 ifeq (.depend,$(wildcard .depend)) include .depend endif gmod-3.1.orig/OptShell.C100600 1750 1750 12213 6402577432 15071 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #include #include #include #include #include "OptShell.h" OptShell::OptShell(QWidget *w) : QWidget(w, "optShell") { setMinimumSize(380, 270); setMaximumSize(380, 270); resize(380, 270); setCaption("Xgmod Options"); playGroup = new QButtonGroup(this, "playGroup"); playGroup->setTitle("Play Options"); playCheckBox[0] = new QCheckBox(playGroup); playCheckBox[0]->setText("Break Infinite Loops"); playCheckBox[0]->setGeometry(10,15,160,25); playCheckBox[1] = new QCheckBox(playGroup); playCheckBox[1]->setText("Ignore Speed0 Commands"); playCheckBox[1]->setGeometry(10,45,160,25); //playGroup->setGeometry(5,155,180,75); playGroup->setGeometry(5,160,180,75); loadGroup = new QButtonGroup(this, "loadGroup"); loadGroup->setTitle("Load Options"); loadCheckBox[0] = new QCheckBox(loadGroup); loadCheckBox[0]->setText("50 Hz Clock Frequency"); loadCheckBox[0]->setGeometry(10,15,160,25); loadCheckBox[1] = new QCheckBox(loadGroup); loadCheckBox[1]->setText("NTSC Sample Timing"); loadCheckBox[1]->setGeometry(10,45,160,25); loadCheckBox[2] = new QCheckBox(loadGroup); loadCheckBox[2]->setText("Disable BPM Tempos"); loadCheckBox[2]->setGeometry(10,75,160,25); loadCheckBox[3] = new QCheckBox(loadGroup); loadCheckBox[3]->setText("Check magic number"); loadCheckBox[3]->setGeometry(10, 105, 160, 25); loadGroup->setGeometry(5,5,180,140); queueGroup = new QButtonGroup(this, "loadGroup"); queueGroup->setTitle("Queue Options"); queueCheckBox[0] = new QCheckBox(queueGroup); queueCheckBox[0]->setText("Unqueue After Play"); queueCheckBox[0]->setGeometry(10,15,160,25); queueCheckBox[1] = new QCheckBox(queueGroup); queueCheckBox[1]->setText("Random Order"); queueCheckBox[1]->setGeometry(10,45,160,25); queueCheckBox[2] = new QCheckBox(queueGroup); queueCheckBox[2]->setText("Highlight Current"); queueCheckBox[2]->setGeometry(10,75,160,25); queueGroup->setGeometry(195,125,180,110); octaveGroup = new QButtonGroup(this, "octaveGroup"); octaveGroup->setTitle("Octave Selection"); octaveButton[0] = new QRadioButton(octaveGroup); octaveButton[0]->setText("Limited"); octaveButton[0]->setGeometry(10, 15, 160, 25); octaveButton[1] = new QRadioButton(octaveGroup); octaveButton[1]->setText("Extended"); octaveButton[1]->setGeometry(10, 45, 160, 25); octaveButton[2] = new QRadioButton(octaveGroup); octaveButton[2]->setText("Automatic"); octaveButton[2]->setGeometry(10, 75, 160, 25); octaveGroup->setGeometry(195, 5, 180, 110); saveButton = new QPushButton(this, "saveButton"); saveButton->setText("Save"); saveButton->setGeometry(127, 240, 60, 25); connect(saveButton, SIGNAL(clicked()), this, SLOT(saveClicked())); closeButton = new QPushButton(this, "closeButton"); closeButton->setText("Close"); closeButton->setGeometry(192, 240, 60, 25); connect(closeButton, SIGNAL(clicked()), SLOT(closex())); if (!loadOptions()) octaveButton[0]->setChecked(TRUE); } int OptShell::octaveSelected() const { int i; for (i = 0; i < 3; i++) if (octaveButton[i]->isChecked() == TRUE) return i; return 0; } void OptShell::showOptShell() { show(); } void OptShell::saveClicked() { String filename; int i; filename = getenv("HOME"); filename += "/.xgmodrc"; ofstream outStream(filename); if (!outStream) { filename.prepend("Cannot open\n"); QMessageBox::message("Xgmod Error", filename, 0, this); return; } for (i = 0; i < 2; i++) { if (playCheckBox[i]->isChecked() == TRUE) outStream << '1'; else outStream << '0'; } for (i = 0; i < 4; i++) { if (loadCheckBox[i]->isChecked() == TRUE) outStream << '1'; else outStream << '0'; } for (i = 0; i < 3; i++) { if (queueCheckBox[i]->isChecked() == TRUE) outStream << '1'; else outStream << '0'; } outStream << (char)(octaveSelected() + '0'); if (!outStream) { filename.prepend("Error writing\n"); QMessageBox::message("Xgmod Error", filename, 0, this); return; } outStream.close(); } int OptShell::loadOptions() { String filename; int i; char input; filename = getenv("HOME"); filename += "/.xgmodrc"; ifstream inStream(filename); if (!inStream) { filename.prepend("Cannot open\n"); QMessageBox::message("Xgmod Error", filename); return 0; } for (i = 0; i < 2; i++) { inStream >> input; if (input == '1') playCheckBox[i]->setChecked(TRUE); } for (i = 0; i < 4; i++) { inStream >> input; if (input == '1') loadCheckBox[i]->setChecked(TRUE); } for (i = 0; i < 3; i++) { inStream >> input; if (input == '1') queueCheckBox[i]->setChecked(TRUE); } inStream >> input; input -= '0'; octaveButton[input]->setChecked(TRUE); if (!inStream) { filename.prepend("Error reading\n"); QMessageBox::message("Xgmod Error", filename); return 0; } inStream.close(); return 1; } #ifndef DEPEND #include "OptShell.moc" #endif gmod-3.1.orig/OptShell.h100600 1750 1750 3775 6402577432 15133 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #ifndef __OptShellH #define __OptShellH #include #include #include #include #include #include class OptShell : public QWidget { Q_OBJECT public: OptShell(QWidget *w = 0); bool highlightChecked() const; bool fiftyhzChecked() const; bool ntscChecked() const; bool magicChecked() const; bool bpmChecked() const; bool speed0Checked() const; bool loopBreakChecked() const; bool randomChecked() const; bool removeChecked() const; bool absoluteChecked() const; int octaveSelected() const; public slots: void showOptShell(); private: int loadOptions(); QButtonGroup *playGroup; QButtonGroup *loadGroup; QButtonGroup *octaveGroup; QButtonGroup *queueGroup; QCheckBox *playCheckBox[2]; QCheckBox *loadCheckBox[4]; QCheckBox *queueCheckBox[3]; QRadioButton *octaveButton[3]; QPushButton *saveButton; QPushButton *closeButton; private slots: void closex(); void saveClicked(); }; inline bool OptShell::highlightChecked() const { return queueCheckBox[2]->isChecked(); } inline bool OptShell::fiftyhzChecked() const { return loadCheckBox[0]->isChecked(); } inline bool OptShell::ntscChecked() const { return loadCheckBox[1]->isChecked(); } inline bool OptShell::magicChecked() const { return loadCheckBox[3]->isChecked(); } inline bool OptShell::bpmChecked() const { return loadCheckBox[2]->isChecked(); } inline bool OptShell::speed0Checked() const { return playCheckBox[1]->isChecked(); } inline bool OptShell::loopBreakChecked() const { return playCheckBox[0]->isChecked(); } inline bool OptShell::randomChecked() const { return queueCheckBox[1]->isChecked(); } inline bool OptShell::removeChecked() const { return queueCheckBox[0]->isChecked(); } inline bool OptShell::absoluteChecked() const { return queueCheckBox[3]->isChecked(); } inline void OptShell::closex() { close(); } #endif gmod-3.1.orig/OutBuffer.h100600 1750 1750 330 6402577432 15242 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #ifndef OutBuffer_h #define OutBuffer_h struct OutBuffer { int n_bytes; int offset; char buffer[2048]; }; #endif gmod-3.1.orig/POLICY100600 1750 1750 1000 6402577432 14125 0ustar neurochpneurochpGMOD Copying/Usage Policy: gmod and Xgmod are Copyright (C) 1996 by Andrew Robinson. Portions of the source not written by Andrew Robinson may be copyrighted by their authors. This program (executable and source) may be freely distributed. If you use any of the source code of this program, you must retain the copyright notice and credit the authors of gmod in the source code and documentation. That's it! Of course, donations are always welcome. :-) -- Andrew J. Robinson gmod-3.1.orig/QueueShell.C100600 1750 1750 20230 6402577432 15411 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #include #include #include "defines.h" #include "structs.h" #include "globals.h" #include "protos.h" #include "QueueShell.h" #include "OptShell.h" #include "Sequencer.h" struct qInfoArray QueueShell::buttonInfo[8] = { {"addButton", "Add", 0, 60, 60, 25}, {"saveButton", "Save", 65, 60, 60, 25}, {"currentButton", "Current", 130, 60, 60, 25}, {"playButton", "Play", 195, 60, 60, 25}, {"removeButton", "Remove", 0, 30, 60, 25}, {"clearButton", "Clear", 65, 30, 60, 25}, {"shuffleButton", "Shuffle", 130, 30, 60, 25}, {"closeButton", "Close", 195, 30, 60, 25} }; QueueShell::QueueShell(QWidget *w) : QWidget(w, "queueShell") { int i; setMinimumSize(265, 75); setCaption("Xgmod Queue"); for (i = 0; i < 8; i++) { buttons[i] = new QPushButton(this, buttonInfo[i].name); buttons[i]->setText(buttonInfo[i].label); buttons[i]->setGeometry(buttonInfo[i].x + 5, 270 - buttonInfo[i].y, buttonInfo[i].width, buttonInfo[i].height); } connect (buttons[0], SIGNAL(clicked()), this, SLOT(addClicked())); connect (buttons[1], SIGNAL(clicked()), this, SLOT(saveClicked())); connect (buttons[2], SIGNAL(clicked()), this, SLOT(currentClicked())); connect (buttons[3], SIGNAL(clicked()), this, SLOT(playClicked())); connect (buttons[4], SIGNAL(clicked()), this, SLOT(removeClicked())); connect (buttons[5], SIGNAL(clicked()), this, SLOT(clearClicked())); connect (buttons[6], SIGNAL(clicked()), this, SLOT(shuffleClicked())); connect (buttons[7], SIGNAL(clicked()), this, SLOT(closeClicked())); queueList = new QListBox(this, "queueList"); queueList->setGeometry(5, 5, 255, 200); connect(queueList, SIGNAL(selected(int)), this, SLOT(playClicked())); loadDialog = new XQFileDialog; loadDialog->setCaption("Xgmod - Add"); connect (loadDialog, SIGNAL(fileSelected(const char *)), this, SLOT(loadFileSelected(const char *))); saveDialog = new QFileDialog; saveDialog->setCaption("Xgmod - Save"); connect (saveDialog, SIGNAL(fileSelected(const char *)), this, SLOT(saveFileSelected(const char *))); resize (265, 270); } void QueueShell::showQueueShell() { show(); } void QueueShell::closeClicked() { close(); } void QueueShell::resizeEvent(QResizeEvent *) { int i; for (i = 0; i < 8; i++) buttons[i]->move((width() - 255) / 2 + buttonInfo[i].x, height() - buttonInfo[i].y); queueList->resize(width() - 10, height() - 70); } void QueueShell::addClicked() { loadDialog->show(); } void QueueShell::saveClicked() { saveDialog->show(); } void QueueShell::addModule (int addPlace, const char *filename) { if (currentMod >= addPlace) currentMod++; xInfo.nrFileStrings++; xInfo.fileStrings = (char * *)realloc (xInfo.fileStrings, sizeof (char *) * xInfo.nrFileStrings); memmove (xInfo.fileStrings + addPlace + 1, xInfo.fileStrings + addPlace, (xInfo.nrFileStrings - addPlace - 1) * sizeof (char *)); xInfo.fileStrings[addPlace] = strdup (filename); queueList->insertItem(filename, addPlace); } void QueueShell::loadFileSelected (const char *filename) { int addPlace; FILE *fp; char buffer[BUFSIZ]; addPlace = queueList->currentItem(); if (addPlace == -1) addPlace = queueList->count() - 1; if ((fp = fopen (filename, "r")) == NULL) { QMessageBox::message("Xgmod Error", "Cannot open file", 0, loadDialog); return; } fgets (buffer, BUFSIZ, fp); queueList->setAutoUpdate(FALSE); if (!memcmp (buffer, "@(#)GMOD-PLAYLIST", 17)) while (fgets (buffer, BUFSIZ, fp) != NULL) { buffer[strlen (buffer) - 1] = '\0'; addPlace++; addModule (addPlace, buffer); } else { addPlace++; addModule (addPlace, filename); } fclose (fp); queueList->setCurrentItem(addPlace); queueList->repaint(); queueList->setAutoUpdate(TRUE); } void QueueShell::currentClicked() { int highlightMod; if (currentMod < 0) highlightMod = -currentMod - 1; else highlightMod = currentMod; if (highlightMod < xInfo.nrFileStrings) { queueList->setCurrentItem(highlightMod); queueList->centerCurrentItem(); } else queueList->setCurrentItem(-1); } void QueueShell::playClicked() { int oCurrentMod; extern Sequencer *seq; if (queueList->currentItem() != -1) { oCurrentMod = currentMod; currentMod = queueList->currentItem(); // stop playback and deallocate current module if (oCurrentMod >= 0) { seq->stopPlayback (); endModule (0); } // start playback of the new module if (!startPlayback (0)) currentMod = -currentMod - 1; } else QMessageBox::message("Xgmod Error", "No module is selected", 0, this); } void QueueShell::saveFileSelected(const char *filename) { FILE *fp; int i; if ((fp = fopen (filename, "w")) == NULL) QMessageBox::message("Xgmod Error", "Cannot open file", 0, saveDialog); else { fprintf (fp, "@(#)GMOD-PLAYLIST\n"); for (i = 0; i < xInfo.nrFileStrings; i++) fprintf (fp, "%s\n", (xInfo.fileStrings)[i]); fclose (fp); } } void QueueShell::removeModule(int current) { int highlight = queueList->currentItem(); queueList->removeItem(current); if (highlight != -1) { if (highlight >= queueList->count()) highlight--; queueList->setCurrentItem(highlight); } free (xInfo.fileStrings[current]); xInfo.nrFileStrings--; if (xInfo.nrFileStrings != current) memmove (xInfo.fileStrings + current, xInfo.fileStrings + current + 1, (xInfo.nrFileStrings - current) * sizeof (char *)); xInfo.fileStrings = (char * *)realloc (xInfo.fileStrings, sizeof (char *) * xInfo.nrFileStrings); } void QueueShell::removeClicked() { int current; unsigned char lstopFlag = 0; //extern TopShell *topShell; extern OptShell *optShell; extern Sequencer *seq; if ((current = queueList->currentItem()) != -1) { removeModule(current); if (current == currentMod) { lstopFlag = STOP_GOTO; // stop playback and deallocate current module if (currentMod >= 0) { seq->stopPlayback (); endModule (0); } if (currentMod >= xInfo.nrFileStrings) currentMod = -1; if (xInfo.nrFileStrings > 0) { if (optShell->randomChecked() == TRUE) currentMod = rand () % xInfo.nrFileStrings; } } else if (current < currentMod) currentMod--; else if (current == (-currentMod - 1)) emit currentDeleted(); if (xInfo.nrFileStrings == 0) { currentMod = -1; emit currentDeleted(); } //topShell->checkButtons (); // start playback of new module if current module was deleted if ((lstopFlag == STOP_GOTO) && (currentMod >= 0)) if (!startPlayback (0)) currentMod = -currentMod - 1; } else QMessageBox::message("Xgmod Error", "No module is selected", 0, this); } void QueueShell::clearClicked() { int i, oCurrentMod; extern Sequencer *seq; queueList->clear(); for (i = 0; i < xInfo.nrFileStrings; i++) free (xInfo.fileStrings[i]); free (xInfo.fileStrings); xInfo.nrFileStrings = 0; xInfo.fileStrings = NULL; oCurrentMod = currentMod; currentMod = -1; // stop playback and deallocate current module if (oCurrentMod >= 0) { seq->stopPlayback (); endModule (0); } //topShell->checkButtons (); emit currentDeleted(); } void QueueShell::shuffleClicked() { int i, swapNum; char *tmpString; int current = queueList->currentItem(); for (i = 0; i < xInfo.nrFileStrings; i++) { swapNum = rand () % xInfo.nrFileStrings; tmpString = xInfo.fileStrings[i]; xInfo.fileStrings[i] = xInfo.fileStrings[swapNum]; xInfo.fileStrings[swapNum] = tmpString; if (currentMod == i) currentMod = swapNum; else if (swapNum == currentMod) currentMod = i; } queueList->setAutoUpdate(FALSE); queueList->clear(); for (i = 0; i < xInfo.nrFileStrings; i++) queueList->insertItem(xInfo.fileStrings[i]); if (current != -1) queueList->setCurrentItem(current); queueList->repaint(); queueList->setAutoUpdate(TRUE); } #ifndef DEPEND #include "QueueShell.moc" #endif gmod-3.1.orig/QueueShell.h100600 1750 1750 2710 6402577432 15441 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #ifndef __QueueShellH #define __QueueShellH #include #undef Unsorted #include #include #include #include class TopShell; struct qInfoArray { char *name, *label; int x, y, width, height; }; // XQFileDialog is a special QFileDialog which doesn't close when a file // is selected class XQFileDialog : public QFileDialog { Q_OBJECT protected slots: void done(int); }; inline void XQFileDialog::done(int r) { if (r == Rejected) QFileDialog::done(Rejected); }; class QueueShell : public QWidget { Q_OBJECT signals: void currentDeleted(); public: QueueShell(QWidget *w = 0); void addFile(const char *); void removeModule(int); public slots: void currentClicked(); protected: void resizeEvent(QResizeEvent *); private: void addModule(int, const char *); QListBox *queueList; QPushButton *buttons[8]; QFileDialog *saveDialog; XQFileDialog *loadDialog; static struct qInfoArray buttonInfo[8]; private slots: void showQueueShell(); void closeClicked(); void addClicked(); void saveClicked(); void playClicked(); void removeClicked(); void clearClicked(); void shuffleClicked(); void loadFileSelected(const char *); void saveFileSelected(const char *); }; inline void QueueShell::addFile(const char *filename) { queueList->insertItem(filename); } #endif gmod-3.1.orig/README100600 1750 1750 5010 6402577606 14073 0ustar neurochpneurochpWelcome to GMOD, a music module player for Linux, with support for the Gravis Ultrasound card and AWE cards. The following module formats are supported: MOD (various versions) 8 channel 669 MultiTracker (MTM) ScreamTracker III (S3M) UltraTracker (ULT) FastTracker (XM) General Requirements: 1) Linux kernel configured with the GUS sequencer driver or with awedrv. The driver must be version 3.0 or greater (do cat /dev/sndstat to check). The driver must be configured with MIDI interface support. The Ultrasound project's driver does not work properly with xgmod and gmod. 2) A GUS card or an AWE card Additional Requirements to compile the source with X support: 1) libqt 1.1 or greater. For more information on this library, check out http://www.troll.no 4) XFree 3.1 or greater. XFree 2.1 may also work. Additional Requirements to use the precompiled xgmod binary: 1) XFree 3.1 or greater 3) libc 5.4.7 or greater shared library 4) libg++/libstdc++ 27.2.1 or greater shared libraries Additional Requirements to use the precompiled gmod binary: 1) libc 5.4.7 or greater. 2) libg++/libstdc++ 27.2.1 or greater. 3) ncurses 4.0 shared library COMPILING: Two Makefiles are included with this package. Use "Makefile" to produce xgmod (gmod with an X interface), or use "Makefile.gmod" to produce gmod (gmod without the X interface). Edit the "DEFINES" and "LIBS" lines in each file to match your system setup and preferences. Always do 'make clean' before compiling a new version to remove any old object files. The contrib directory contains contributed patches which may be applied before compiling. Use them at your own risk. INSTALLATION: Doing 'make install' will compile and install the binaries in the location specified in the makefile. - OR - Copy/move the binaries to whatever directory you normally keep your executables in. gmod and Xgmod may be safely SUID root or SGID root if the permissions of the sequencer require it. For more information, refer to the man pages (gmod.1 and xgmod.1) and ChangeLog. Unfortunately, the man pages are currently somewhat out of date. !!! IMPORTANT NOTE !!! When (x)gmod starts up, you may see the following message in your system log: GUS: Midi busy This is perfectly normal. It is a side effect of a workaround for a bug in the USS/Lite drivers when used with the GUS PnP cards. Please send any comments, suggestions, etc. regarding this version to me, Andrew J. Robinson (arobinso@nyx.net). There is also a Xgmod WWW page available through http://www.nyx.net/~arobinso. gmod-3.1.orig/Sample.C100600 1750 1750 715 6402577432 14524 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #ifdef USE_LOCAL #include "soundcard.h" #else #include #endif #include "Sample.h" void Sample::getPatchInfo(struct patch_info &patch) const { patch.mode = mode_; patch.len = length_; patch.loop_start = loopStart; patch.loop_end = loopEnd; patch.base_note = baseNote_; /* set real base note here */ patch.base_freq = baseFreq_; } gmod-3.1.orig/Sample.h100600 1750 1750 4741 6402577432 14614 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #ifndef __SampleH #define __SampleH #include #ifdef USE_NCURSES #include #endif #include "defines.h" class Sequencer; class Sample { public: Sample(); virtual ~Sample() {}; virtual int load(Sequencer &, FILE *, int, int, void * = 0, void * = 0) = 0; virtual int slideRate(int, unsigned char) const; virtual int volumeEnvelopeY(int &, char inSustain, unsigned short *) const { return (inSustain ? 64 : 0); } virtual int panEnvelopeY(int &, char) const { return 32; } virtual void decode(char *) const {} virtual int pan() const { return -1; } virtual int vibratoDepth() const { return -1; } virtual int vibratoRate() const { return 0; } virtual int vibratoType() const { return -1; } void cutFactor(int c) { cutFactor_ = c; } int cutFactor() const { return cutFactor_; } int number() const { return sampleNum_; } short finetune() const { return finetune_; } unsigned char volume() const { return volume_; } const char *name() const { return name_; } void getPatchInfo(struct patch_info &) const; int ok() const { return ok_; } #ifndef USE_X #ifdef USE_NCURSES void printInfo(WINDOW *, int); #else void printInfo(int, const unsigned char); #endif #endif protected: int sampleNum_; int length_; int loopStart; int loopEnd; int ok_; short finetune_; unsigned char cutFactor_; unsigned char volume_; char name_[SAMPNAME_LEN]; unsigned int mode_; unsigned int baseFreq_; unsigned int baseNote_; }; #ifndef USE_X #ifdef USE_NCURSES inline void Sample::printInfo(WINDOW *win, int i) { char num[4]; if (ok_) sprintf(num, "%03d", i); else strcpy(num, "xxx"); wprintw(win, "%s: L%06u B%06u E%06u V%03u %s\n", num, length_, loopStart, loopEnd, volume_, name_); } #else inline void Sample::printInfo(int i, unsigned char showEmpty) { char num[4]; if ((length_ > 0) || showEmpty) { if (ok_) sprintf(num, "%03d", i); else strcpy(num, "xxx"); PRINTF("%s: L%06u B%06u E%06u V%03u %s\n", num, length_, loopStart, loopEnd, volume_, name_); } } #endif #endif inline int Sample::slideRate(int rate, unsigned char slideDir) const { if (slideDir == SLIDE_POS) return rate; else return -rate; } inline Sample::Sample() : length_(0), loopStart(0), loopEnd(0), ok_(0), finetune_(0), cutFactor_(1), volume_(0), mode_(0), baseFreq_(0), baseNote_(0) { name_[0] = '\0'; } #endif gmod-3.1.orig/SampleShell.C100600 1750 1750 5143 6402577432 15534 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #include #include "SampleShell.h" #ifdef USE_X SampleShell::SampleShell(QWidget *w) : QWidget(w, "sampleShell") { setMinimumSize(70, 40); setCaption("Xgmod Samples"); sampleList = new QListBox(this, "sampleList"); sampleList->setGeometry(5, 5, 200, 160); closeButton = new QPushButton(this, "closeButton"); closeButton->setText("Close"); closeButton->setGeometry(75, 200, 60, 25); connect(closeButton, SIGNAL(clicked()), this, SLOT(closeSampleShell())); resize(210, 200); } void SampleShell::showSampleShell() { show(); } void SampleShell::closeSampleShell() { close(); } void SampleShell::resizeEvent(QResizeEvent *) { closeButton->move((width() - 60) / 2, height() - 30); sampleList->resize(width() - 10, height() - 40); } void SampleShell::setSamples(Sample **samples, int nrSamples) { int i; char sampleName[SAMPNAME_LEN + 6]; sampleList->setAutoUpdate(FALSE); sampleList->clear(); for (i = 0; i < nrSamples; i++) { if (samples[i]->ok()) sprintf(sampleName, "[%03d] ", i); else strcpy(sampleName, "[xxx] "); strcat(sampleName, samples[i]->name()); sampleList->insertItem(sampleName); } sampleList->repaint(); sampleList->setAutoUpdate(TRUE); } #ifndef DEPEND #include "SampleShell.moc" #endif #else /* !USE_X */ #ifndef USE_NCURSES SampleShell::SampleShell(int background, int showEmpty) : background_(background), showEmpty_(showEmpty) { } #else SampleShell::SampleShell(int background) : background_(background), sampleWin_(0) { } #endif void SampleShell::setSamples(Sample **samples, int nrSamples) { if (!background_) { int i; #ifdef USE_NCURSES if (sampleWin_) delwin(sampleWin_); sampleWin_ = newpad(nrSamples, COLS); scrollok(sampleWin_, FALSE); sampleLines_ = LINES - 6; // if (sampleLines_ > nrSamples) // sampleLines_ = nrSamples; for (i = 0; i < nrSamples; i++) samples[i]->printInfo(sampleWin_, i); nrSamples_ = nrSamples; firstVisible_ = 0; prefresh(sampleWin_, 0, 0, 4, 0, 4 + sampleLines_ - 1, COLS - 1); #else for (i = 0; i < nrSamples; i++) samples[i]->printInfo(i, showEmpty_); #endif } } #ifdef USE_NCURSES void SampleShell::scrollSamples(int direction) { if (direction > 0) { if (firstVisible_ < (nrSamples_ - sampleLines_)) firstVisible_++; } else { if (firstVisible_ > 0) firstVisible_--; } prefresh(sampleWin_, firstVisible_, 0, 4, 0, 4 + sampleLines_ - 1, COLS - 1); } #endif #endif gmod-3.1.orig/SampleShell.h100600 1750 1750 1717 6402577432 15604 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #ifndef __SampleShellH #define __SampleShellH #include "defines.h" #include "structs.h" #include "Sample.h" #ifdef USE_X #include #include #include class SampleShell : public QWidget { Q_OBJECT public: SampleShell(QWidget *w = 0); void setSamples(Sample **, int); public slots: void showSampleShell(); protected: void resizeEvent(QResizeEvent *); private: QListBox *sampleList; QPushButton *closeButton; private slots: void closeSampleShell(); }; #else /* !USE_X */ class SampleShell { public: #ifdef USE_NCURSES SampleShell(int); void scrollSamples(int); #else SampleShell(int, int); #endif void setSamples(Sample **, int); private: int background_; #ifdef USE_NCURSES int firstVisible_; int nrSamples_; int sampleLines_; WINDOW *sampleWin_; #else int showEmpty_; #endif }; #endif #endif gmod-3.1.orig/Sequencer.C100600 1750 1750 23446 6402577432 15303 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #include #include #include #ifdef USE_LOCAL #include "soundcard.h" #else #include #endif #include #ifdef AWE_SUPPORT #include #endif #include "VoiceGUS.h" #ifdef AWE_SUPPORT #include "VoiceAWE.h" #endif #include "commands.h" #include "defines.h" #include "structs.h" #include "protos.h" #include "globals.h" #include "Sequencer.h" #include #ifdef USE_X #include "TopShell.h" #endif struct OutBuffer { int nBytes; int offset; char buffer[2048]; }; void seqbuf_dump() { extern Sequencer *seq; seq->dump(); } Sequencer::Sequencer() : seqfd_(-1), songFinished_(0), voices_(0) { bufferList = new deque; } Sequencer::~Sequencer() { if (voices_) delete [] voices_; if (seqfd_ != -1) { ioctl(seqfd_, SNDCTL_SEQ_RESET, 0); ::close(seqfd_); } }; int Sequencer::bufferSize() const { return bufferList->size(); } int Sequencer::doCommand(int channel, int command, int parm, int parm2, int note, struct songInfo *songChar, struct optionsInfo *options) { int processedEffect = 1; switch (command) { case CMD_ARPEG: if (parm) voices_[channel].arpeg(parm); break; case CMD_NOP: break; case CMD_SET_PAN: voices_[channel].pan(parm); break; case CMD_VOLUME: voices_[channel].volume(parm); break; case CMD_VIBRA_WAVE: voices_[channel].vibratoWave(parm); break; case CMD_TREMOLO_WAVE: voices_[channel].tremoloWave(parm); break; case CMD_GLISSANDO: voices_[channel].glissando(parm); break; case CMD_CUT_NOTE: voices_[channel].cutNote(parm); break; case CMD_FINEVOLUP: voices_[channel].fineVol(parm); break; case CMD_VOLSLIDE: voices_[channel].volSlide(parm); break; case CMD_PORTANDVOL: voices_[channel].portAndVol(parm); break; case CMD_VIBRATO: voices_[channel].vibrato(parm); break; case CMD_VIBRASPEED: voices_[channel].vibratoSpeed(parm); break; case CMD_TREMOLO: voices_[channel].tremolo(parm); break; case CMD_TREMOR: voices_[channel].tremor(parm); break; case CMD_SETENV_POS: voices_[channel].setEnvelopePos(parm); break; case CMD_FINETUNE: parm &= 0x0f; if (parm <= 7) voices_[channel].finetune(12.5 * parm); else voices_[channel].finetune(12.5 * (parm - 16)); break; case CMD_GLOBAL_VOL: mainVolume(options->mainVolume * parm / 255); break; case CMD_SLIDEUP: if (parm > 0) voices_[channel].slideTo(parm, songChar->highestNote, SLIDE_UP, songChar->slideType, 256); break; case CMD_SLIDEDOWN: if (parm > 0) voices_[channel].slideTo(parm, songChar->lowestNote, SLIDE_DOWN, songChar->slideType, 256); break; case CMD_SLIDETO: voices_[channel].slideTo(parm, note, SLIDE_PORT, songChar->slideType, 256); break; case CMD_SETOFFSET: voices_[channel].offset(parm * 256); break; case CMD_SETOFFSET_1024: voices_[channel].offset(parm * 1024); break; case CMD_SETOFFSET_FINE: voices_[channel].offset(((parm * 256) + parm2) * 4); break; case CMD_DELAY_NOTE: if (parm == 0) parm = 1; voices_[channel].delayNote(parm); break; case CMD_RETRIGGER: voices_[channel].retrigger(parm, 0); break; case CMD_RETRIGVOL: voices_[channel].retrigger(parm & 0x0f, (parm >> 4) & 0x0f); break; case CMD_FINEVOLDOWN: voices_[channel].fineVol(-parm); break; case CMD_FINEPORTUP: if (parm > 0) voices_[channel].slideTo(parm, songChar->highestNote, SLIDE_ONCE, songChar->slideType, 256); break; case CMD_FINEPORTDOWN: if (parm > 0) voices_[channel].slideTo(parm, songChar->lowestNote, SLIDE_ONCE, songChar->slideType, 256); break; case CMD_XFINEPORTUP: if (parm > 0) voices_[channel].slideTo(parm, songChar->highestNote, SLIDE_ONCE, songChar->slideType, 64); break; case CMD_XFINEPORTDOWN: if (parm > 0) voices_[channel].slideTo(parm, songChar->lowestNote, SLIDE_ONCE, songChar->slideType, 64); break; case CMD_VIBRAANDVOL: voices_[channel].vibrato(0); voices_[channel].volSlide(parm); break; case CMD_PANSLIDE: if (parm & 0xf0) voices_[channel].panSlide((parm >> 4) & 0x0f); else voices_[channel].panSlide(-(parm & 0x0f)); break; case CMD_GLOBALVOL_SLIDE: if ((parm >> 4) & 0x0f) globalVolSlide(VOL_SLIDE_RATE * ((parm >> 4) & 0x0f)); else globalVolSlide(-VOL_SLIDE_RATE * (parm & 0x0f)); break; default: processedEffect = 0; break; } return processedEffect; } void Sequencer::dump() { SEQ_DECLAREBUF(); OutBuffer *bufferEntry; if (_seqbufptr > 0) { bufferEntry = new OutBuffer; memcpy(bufferEntry->buffer, _seqbuf, _seqbufptr); bufferEntry->nBytes = _seqbufptr; bufferEntry->offset = 0; bufferList->push_back(bufferEntry); _seqbufptr = 0; } } void Sequencer::force() { int firstTime = 1; while (bufferList->size() != 0) { if (!firstTime) sleep(1); else firstTime = 0; write(); } } void Sequencer::numVoices(int num, int volType, const Sample *samp) { SEQ_DECLAREBUF(); numVoices_ = num; if (num < 14) num = 14; sync(); GUS_NUMVOICES(gusDev_, num); SEQ_VOLUME_MODE(gusDev_, VOL_METHOD_LINEAR); if (voices_) delete [] voices_; #ifdef AWE_SUPPORT if (synthType_ == SAMPLE_TYPE_AWE32) voices_ = new VoiceAWE[numVoices_]; else #endif voices_ = new VoiceGUS[numVoices_]; for (int i = 0; i < numVoices_; i++) { voices_[i].init(gusDev_, samp); voices_[i].volType(volType); } force(); sync(); } int Sequencer::open() { SEQ_DECLAREBUF(); int i, n; struct synth_info info; struct midi_info midi; #ifndef OSS_GETVERSION #define OSS_GETVERSION _IOR('M', 118, int) #endif // Versions of the driver prior to 0x0307f0 may have a problem // when used with the GUS PnP, so attempt to work around the // problem if ((ioctl(seqfd_, OSS_GETVERSION, &n) == -1) || (n < 0x0307f0)) { if ((seqfd_ = ::open("/dev/sequencer", O_WRONLY | O_NONBLOCK, 0)) == -1) return -1; if (ioctl(seqfd_, SNDCTL_SEQ_NRMIDIS, &n) != -1) { int midiDev = -1; for (i = 0; (i < n) && (midiDev == -1); i++) { midi.device = i; if ((ioctl(seqfd_, SNDCTL_MIDI_INFO, &midi) != -1) && (midi.dev_type == SNDCARD_GUS)) midiDev = i; } ::close(seqfd_); if (midiDev != -1) { char midiName[12]; sprintf(midiName, "/dev/midi%02d", midiDev); ::open(midiName, O_WRONLY | O_NONBLOCK, 0); } } } if ((seqfd_ = ::open("/dev/sequencer", O_RDWR | O_NONBLOCK, 0)) == -1) return -1; if (ioctl(seqfd_, SNDCTL_SEQ_NRSYNTHS, &n) == -1) return -2; gusDev_ = -1; for (i = 0; (i < n) && (gusDev_ == -1); i++) { info.device = i; if (ioctl(seqfd_, SNDCTL_SYNTH_INFO, &info) == -1) return -3; if (info.synth_type == SYNTH_TYPE_SAMPLE && (info.synth_subtype == SAMPLE_TYPE_GUS #ifdef AWE_SUPPORT || info.synth_subtype == SAMPLE_TYPE_AWE32 #endif )) { gusDev_ = i; synthType_ = info.synth_subtype; } } if (gusDev_ == -1) return -4; #ifdef USE_X writeNotifier_ = new QSocketNotifier(seqfd_, QSocketNotifier::Write); writeNotifier_->setEnabled(FALSE); QObject::connect(writeNotifier_, SIGNAL(activated(int)), this, SLOT(writeReady())); readNotifier_ = new QSocketNotifier(seqfd_, QSocketNotifier::Read); readNotifier_->setEnabled(FALSE); QObject::connect(readNotifier_, SIGNAL(activated(int)), this, SLOT(readReady())); #endif GUS_NUMVOICES(gusDev_, 32); dump(); force(); ioctl(seqfd_, SNDCTL_SEQ_SYNC, 0); ioctl(seqfd_, SNDCTL_SEQ_RESET, 0); return (seqfd_); } #ifdef USE_X void Sequencer::readReady() { unsigned int seqInput; extern TopShell *topShell; while ((seqInput = procInput()) != ECHO_NONE) if (seqInput == ECHO_END) { songFinished_ = 0; topShell->doNext(1); } } #endif void Sequencer::stopPlayback() { SEQ_DECLAREBUF(); OutBuffer *bufferItem; extern double nextTime; nextTime = 0; #ifdef USE_X writeEnabled(FALSE); #endif ioctl(seqfd_, SNDCTL_SEQ_RESET, 0); while (bufferList->size() != 0) { bufferItem = bufferList->front(); delete bufferItem; bufferList->pop_front(); } _seqbufptr = 0; #ifdef USE_X songFinished_ = 0; #else SEQ_ECHO_BACK(ECHO_END); dump(); force(); ioctl(seqfd_, SNDCTL_SEQ_SYNC, 0); #endif } int Sequencer::write() { OutBuffer *bufferItem; int result; bufferItem = bufferList->front(); if ((result = ::write(seqfd_, bufferItem->buffer + bufferItem->offset, bufferItem->nBytes)) == -1) { if (errno != EAGAIN) { perror("write /dev/sequencer"); exit(ERR_SEQUENCER); } } else if (result != bufferItem->nBytes) { bufferItem->nBytes -= result; bufferItem->offset += result; } else { delete bufferItem; bufferList->pop_front(); } return (result); } #ifdef USE_X void Sequencer::writeReady() { SEQ_DECLAREBUF(); do { while ((bufferSize() < 1) && (!songFinished_)) if ((songFinished_ = playNextPosition())) { syncTime(); SEQ_ECHO_BACK(ECHO_END); dump(); } } while ((bufferSize() > 0) && (write() != -1)); if ((bufferSize() == 0) && (songFinished_)) { writeEnabled(FALSE); songFinished_ = 0; } } #endif #if defined(USE_X) && !defined(DEPEND) #include "Sequencer.moc" #endif gmod-3.1.orig/Sequencer.h100600 1750 1750 6347 6402577432 15331 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #ifndef SequencerH_ #define SequencerH_ #include #include #include #include #include #ifdef USE_X #include #include #endif #include "Voice.h" struct OutBuffer; class Sample; struct songInfo; struct optionsInfo; template class deque; class Sequencer #ifdef USE_X : public QObject #endif { #ifdef USE_X Q_OBJECT #endif public: Sequencer(); ~Sequencer(); int bufferSize() const; void close() const { ::close(seqfd_); }; int doCommand(int, int, int, int, int, songInfo *, optionsInfo *); int doTick(int chan, int tick, songInfo *s) { return voices_[chan].doTick(gusDev_, tick, s); }; void doUpdates(int chan) { voices_[chan].doUpdates(gusDev_); }; void dump(); void force(); int memory() const; void numVoices(int, int, const Sample *); int open(); void panFactor(int factor); int patchLoad(FILE *, int, Sample &, int &, int) const; int read(char *) const; void resetSamples() const; void stopPlayback(); void sync() const; int write(); // The following functions provide access to the sequencer voices. They // will be removed once the sequencer does the command processing. void mainVolume(int vol); void globalVolSlide(int amt); void pan(int chan, int amt) { voices_[chan].pan(amt); } void sample(int chan, Sample *s) { voices_[chan].sample(s); } void keyOff(int chan) { voices_[chan].keyOff(); } void note(int chan, int n, int t) { voices_[chan].note(n, t); } void resetEffects(int chan, int p) { voices_[chan].resetEffects(p); } // The following function provides access to the sequencer file descriptor. // It will be removed later. int seqFd() const { return seqfd_; }; #ifdef USE_X void readEnabled(bool); void writeEnabled(bool); #endif private: int gusDev_; int numVoices_; int seqfd_; int songFinished_; int synthType_; Voice *voices_; // bufferList is a pointer so deque.h doesn't need to be included deque *bufferList; #ifdef USE_X QSocketNotifier *writeNotifier_; QSocketNotifier *readNotifier_; private slots: void writeReady(); void readReady(); #endif }; inline void Sequencer::globalVolSlide(int amt) { for (int i = 0; i < numVoices_; i++) voices_[i].globalVolSlide(amt); } inline void Sequencer::mainVolume(int vol) { for (int i = 0; i < numVoices_; i++) voices_[i].mainVolume(vol); } inline int Sequencer::memory() const { int memory; memory = gusDev_; ioctl(seqfd_, SNDCTL_SYNTH_MEMAVL, &memory); return (memory); } inline void Sequencer::panFactor(int factor) { for (int i = 0; i < numVoices_; i++) voices_[i].panFactor(factor); } inline int Sequencer::read(char *inbuf) const { return (::read(seqfd_, inbuf, 4)); } #ifdef USE_X inline void Sequencer::readEnabled(bool status) { readNotifier_->setEnabled(status); } #endif inline void Sequencer::resetSamples() const { ioctl(seqfd_, SNDCTL_SEQ_RESETSAMPLES, &gusDev_); } inline void Sequencer::sync() const { ioctl(seqfd_, SNDCTL_SEQ_SYNC, 0); } #ifdef USE_X inline void Sequencer::writeEnabled(bool status) { writeNotifier_->setEnabled(status); } #endif #endif gmod-3.1.orig/Sequencer2.C100600 1750 1750 10300 6402577432 15346 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #include #include #ifdef USE_LOCAL #include "soundcard.h" #else #include #endif #include "Sample.h" #include "Sequencer.h" int Sequencer::patchLoad(FILE * modFd, int sampleNum, Sample &samp, int &bytesRead, int cutFactor) const { int xBytesRead; int len; unsigned short loopFlags; int loopStart; int loopEnd; int i, rc; struct patch_info tpatch; struct patch_info *patch; memset(&tpatch, 0, sizeof(patch_info)); samp.getPatchInfo(tpatch); patch = (struct patch_info *)malloc(sizeof(struct patch_info) + tpatch.len + 2); memcpy(patch, &tpatch, sizeof(struct patch_info)); patch->key = GUS_PATCH; patch->low_note = 0; patch->high_note = 0x7fffffff; patch->volume = 0; patch->panning = -112; patch->device_no = gusDev_; patch->instr_no = sampleNum; len = patch->len; /* fix loopEnd if necessary */ if (patch->loop_end > len) patch->loop_end = len; loopStart = patch->loop_start; loopEnd = patch->loop_end; if (loopStart >= loopEnd) patch->mode &= ~WAVE_LOOPING; loopFlags = patch->mode; if ((bytesRead = fread(patch->data, 1, len, modFd)) != len) { if (((loopFlags & WAVE_16_BITS) && (bytesRead > 1)) || (!(loopFlags & WAVE_16_BITS) && (bytesRead > 0))) { /* Warning: Short sample */ xBytesRead = bytesRead; if ((loopFlags & WAVE_16_BITS) && ((bytesRead % 2) != 0)) xBytesRead--; i = xBytesRead - (len - bytesRead); if (i < 0) i = 0; if ((loopFlags & WAVE_16_BITS) && ((i % 2) != 0)) i--; memcpy(patch->data + xBytesRead, patch->data + i, len - xBytesRead); } else { free(patch); return -ENODATA; } } /* "decode" sample if necessary */ samp.decode(patch->data); /* convert 16 bits to 8 if necessary */ if ((loopFlags & WAVE_16_BITS) && ((len > 256*1024) || (cutFactor > 1))) { for (i = 0; i < len - 1; i+= 2) patch->data[i / 2] = patch->data[i + 1]; len = (patch->len /= 2); loopStart = (patch->loop_start /= 2); loopEnd = (patch->loop_end /= 2); loopFlags &= ~WAVE_16_BITS; patch->base_freq /= 2; } /* extend looped samples, since length might equal loop end */ if (loopFlags & WAVE_LOOPING) { if (loopFlags & WAVE_16_BITS) { if (len >= 2) { patch->data[len] = patch->data[len - 2]; patch->data[len + 1] = patch->data[len - 1]; len += 2; patch->len += 2; } } else if (len >= 1) { patch->data[len] = patch->data[len - 1]; len++; (patch->len)++; } } /* Shorten samples to fit in memory. Do not shorten a looped sample if */ /* the start and end are not evenly divisible by cutFactor; otherwise, */ /* the sample may go out of tune. */ if ((cutFactor == 2) && (loopFlags & WAVE_LOOPING) && (loopStart % 2) && (loopEnd % 2)) { loopStart = (patch->loop_start -= 1); loopEnd = (patch->loop_end -= 1); i = 2; } else i = 1; if ((cutFactor > 1) && !((loopFlags & WAVE_LOOPING) && ((loopStart % cutFactor) || (loopEnd % cutFactor)))) { samp.cutFactor(i * cutFactor); for (i = 0; i < len / cutFactor; i++) patch->data[i] = patch->data[i * cutFactor]; len = (patch->len /= cutFactor); loopStart = (patch->loop_start /= cutFactor); loopEnd = (patch->loop_end /= cutFactor); patch->base_freq /= cutFactor; } else samp.cutFactor(i); /* try to remove loop clicking */ if ((loopFlags & WAVE_LOOPING) && (loopEnd >= 2) && !(loopFlags & WAVE_16_BITS)) { patch->data[loopEnd] = patch->data[loopStart]; if (loopFlags & WAVE_UNSIGNED) patch->data[loopEnd - 1] = ((unsigned char)(patch->data[loopEnd - 2]) + (unsigned char)(patch->data[loopEnd])) / 2; else patch->data[loopEnd - 1] = ((signed char)(patch->data[loopEnd - 2]) + (signed char)(patch->data[loopEnd])) / 2; } if (memory() < len) rc = -ENOSPC; else { #define write ::write #define seqfd seqfd_ rc = SEQ_WRPATCH2(patch, sizeof(struct patch_info) + len); #undef write } free(patch); return rc; } gmod-3.1.orig/Six69.C100600 1750 1750 2272 6402577432 14245 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #include #include #ifdef USE_LOCAL #include "soundcard.h" #else #include #endif #include "Six69.h" #include "Sequencer.h" void removeNoprint(char *); int Six69_sample::load(Sequencer &seq, FILE * modFd, int sampleNo, int cutFactor, void *header, void *) { int bytesRead; unsigned char *buf = (unsigned char *)header; sampleNum_ = sampleNo; mode_ = WAVE_UNSIGNED; length_ = INTEL_LONG(buf + 13); loopStart = INTEL_LONG(buf + 17); loopEnd = INTEL_LONG(buf + 21); if (loopEnd > length_) loopEnd = 0; #if 0 else if (loopEnd == length_) loopEnd--; if (loopEnd < loopStart) { loopStart = 0; loopEnd = 0; } #endif strncpy(name_, buf, 13); name_[13] = '\0'; removeNoprint(name_); #if 0 if (loopEnd == 0) loopEnd = 1; if (loopEnd >= length_) loopEnd = 1; #endif if (loopEnd > 2) mode_ |= WAVE_LOOPING; baseFreq_ = NTSC_RATE; baseNote_ = C2FREQ; if (length_ > 0) ok_ = !seq.patchLoad(modFd, sampleNo, *this, bytesRead, cutFactor); else ok_ = 0; return bytesRead; } gmod-3.1.orig/Six69.h100600 1750 1750 414 6402577432 14266 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #ifndef Six69_h #define Six69_h #include "Sample.h" class Six69_sample : public Sample { public: int load(Sequencer &, FILE *, int, int, void *, void *); }; #endif gmod-3.1.orig/TopShell.C100600 1750 1750 21554 6402577432 15101 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #include #include #include #include "defines.h" #include "structs.h" #include "globals.h" #include "protos.h" #include "Sequencer.h" #include "CommentShell.h" #include "OptShell.h" #include "TopShell.h" #include "TrackShell.h" #include "QueueShell.h" #include "SampleShell.h" const char *TopShell::backXbm = "#define backWidth 16 #define backHeight 15 static unsigned char backBits[] = { 0x80, 0x80, 0xc0, 0xc0, 0xe0, 0xe0, 0xf0, 0xf0, 0xf8, 0xf8, 0xfc, 0xfc, 0xfe, 0xfe, 0xff, 0xff, 0xfe, 0xfe, 0xfc, 0xfc, 0xf8, 0xf8, 0xf0, 0xf0, 0xe0, 0xe0, 0xc0, 0xc0, 0x80, 0x80};"; const char *TopShell::forwardXbm = "#define forwardWidth 16 #define forwardHeight 15 static unsigned char forwardBits[] = { 0x01, 0x01, 0x03, 0x03, 0x07, 0x07, 0x0f, 0x0f, 0x1f, 0x1f, 0x3f, 0x3f, 0x7f, 0x7f, 0xff, 0xff, 0x7f, 0x7f, 0x3f, 0x3f, 0x1f, 0x1f, 0x0f, 0x0f, 0x07, 0x07, 0x03, 0x03, 0x01, 0x01};"; const char *TopShell::previousXbm = "#define previousWidth 18 #define previousHeight 15 static unsigned char previousBits[] = { 0x03, 0x02, 0x02, 0x03, 0x03, 0x03, 0x83, 0x83, 0x03, 0xc3, 0xc3, 0x03, 0xe3, 0xe3, 0x03, 0xf3, 0xf3, 0x03, 0xfb, 0xfb, 0x03, 0xff, 0xff, 0x03, 0xfb, 0xfb, 0x03, 0xf3, 0xf3, 0x03, 0xe3, 0xe3, 0x03, 0xc3, 0xc3, 0x03, 0x83, 0x83, 0x03, 0x03, 0x03, 0x03, 0x03, 0x02, 0x02};"; const char *TopShell::nextXbm = "#define nextWidth 18 #define nextHeight 15 static unsigned char nextBits[] = { 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x07, 0x07, 0x03, 0x0f, 0x0f, 0x03, 0x1f, 0x1f, 0x03, 0x3f, 0x3f, 0x03, 0x7f, 0x7f, 0x03, 0xff, 0xff, 0x03, 0x7f, 0x7f, 0x03, 0x3f, 0x3f, 0x03, 0x1f, 0x1f, 0x03, 0x0f, 0x0f, 0x03, 0x07, 0x07, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x03};"; const char *TopShell::playXbm = "#define playWidth 15 #define playHeight 15 static unsigned char playBits[] = { 0x08, 0x00, 0x18, 0x00, 0x38, 0x00, 0x78, 0x00, 0xf8, 0x00, 0xf8, 0x01, 0xf8, 0x03, 0xf8, 0x07, 0xf8, 0x03, 0xf8, 0x01, 0xf8, 0x00, 0x78, 0x00, 0x38, 0x00, 0x18, 0x00, 0x08, 0x00, };"; const char *TopShell::stopXbm = "#define stopWidth 15 #define stopHeight 15 static unsigned char stopBits[] = { 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f};"; struct infoArray { char *name; const char *pixmap; int size; int x, y, width, height; }; TopShell::TopShell(CommentShell *commentShell, OptShell *optShell, QueueShell *queueShell, SampleShell *sampleShell, TrackShell *trackShell) : QWidget(0, "topShell"), doRandom(1) { struct infoArray buttonInfo[12] = { {"backButton", backXbm, 272, 12, 80, 30, 30}, {"forwButton", forwardXbm, 281, 47, 80, 30, 30}, {"prevButton", previousXbm, 377, 83, 80, 30, 30}, {"nextButton", nextXbm, 365, 117, 80, 30, 30}, {"playButton", playXbm, 271, 152, 80, 30, 30}, {"stopButton", stopXbm, 272, 187, 80, 30, 30}, {"queueButton", "Queue", 0, 20, 115, 60, 25}, {"optionButton", "Options", 0, 85, 115, 60, 25}, {"trackButton", "Track", 0, 150, 115, 60, 25}, {"sampleButton", "Samples", 0, 20, 145, 60, 25}, {"commentButton", "Comment", 0, 85, 145, 60, 25}, {"exitButton", "Exit", 0, 150, 145, 60, 25} }; int i, j = 0; setCaption(HEADING); setMinimumSize(230, 175); setMaximumSize(230, 175); resize(230, 175); fileLabel = new QLabel(this, "fileLabel"); fileLabel->setText(HEADING); fileLabel->setAlignment(AlignCenter); fileLabel->setFrameStyle(QFrame::Panel | QFrame::Sunken); fileLabel->setGeometry(5, 5, 220, 20); nameLabel = new QLabel(this, "nameLabel"); nameLabel->setText("Copyright 1997 by Andrew J Robinson"); nameLabel->setAlignment(AlignCenter); nameLabel->setFrameStyle(QFrame::Panel | QFrame::Sunken); nameLabel->setGeometry(5, 25, 220, 20); positionLcd = new QLCDNumber(7, this); positionLcd->display("EEE:000"); positionLcd->setGeometry(12, 50, 112, 25); positionLcd->setFrameStyle(QFrame::Panel | QFrame::Sunken); channelLcd = new QLCDNumber(5, this); channelLcd->display("00 CH"); channelLcd->setGeometry(136, 50, 80, 25); channelLcd->setFrameStyle(QFrame::Panel | QFrame::Sunken); for (i = 0; i < 12; i++) { button[i] = new QPushButton(this, buttonInfo[i].name); button[i]->setGeometry(buttonInfo[i].x, buttonInfo[i].y, buttonInfo[i].width, buttonInfo[i].height); if (buttonInfo[i].size == 0) button[i]->setText(buttonInfo[i].pixmap); else { pixmaps[j] = new QPixmap; pixmaps[j]->loadFromData((const uchar *)buttonInfo[i].pixmap, buttonInfo[i].size); button[i]->setPixmap(*pixmaps[j]); j++; } } connect(button[0], SIGNAL(clicked()), this, SLOT(backClicked())); connect(button[1], SIGNAL(clicked()), this, SLOT(forwardClicked())); connect(button[2], SIGNAL(clicked()), this, SLOT(previousClicked())); connect(button[3], SIGNAL(clicked()), this, SLOT(nextClicked())); connect(button[4], SIGNAL(clicked()), this, SLOT(playClicked())); connect(button[5], SIGNAL(clicked()), this, SLOT(stopClicked())); connect(button[6], SIGNAL(clicked()), queueShell, SLOT(showQueueShell())); connect(button[7], SIGNAL(clicked()), optShell, SLOT(showOptShell())); connect(button[8], SIGNAL(clicked()), trackShell, SLOT(showTrackShell())); connect(button[9], SIGNAL(clicked()), sampleShell, SLOT(showSampleShell())); connect(button[10], SIGNAL(clicked()), commentShell, SLOT(showCommentShell())); connect(button[11], SIGNAL(clicked()), qApp, SLOT(quit())); connect(this, SIGNAL(channelSignal(int)), trackShell, SLOT(setChannels(int))); connect(queueShell, SIGNAL(currentDeleted()), this, SLOT(setRandom())); } void TopShell::setRandom() { doRandom = 1; } void TopShell::setPosition(int position) { char positionDisplay[8]; if (position < 0) sprintf(positionDisplay, "EEE:%03d", maxPosition); else sprintf(positionDisplay, "%03d:%03d", position, maxPosition); positionLcd->display(positionDisplay); } void TopShell::setChannels(int channels) { char channelDisplay[6]; sprintf(channelDisplay, "%02d CH", channels); channelLcd->display(channelDisplay); emit(channelSignal(channels)); } void TopShell::doNext(int skipError) { extern Sequencer *seq; extern OptShell *optShell; extern QueueShell *queueShell; int startOk = 0; if (currentMod >= 0) { seq->stopPlayback (); endModule (0); if (optShell->removeChecked() == TRUE) queueShell->removeModule(currentMod); else currentMod++; } else currentMod = -currentMod; do { if (currentMod >= xInfo.nrFileStrings) currentMod = -1; pickRandom (); if (currentMod >= 0) { if (!(startOk = startPlayback (0))) { if (skipError) queueShell->removeModule(currentMod); else currentMod = -currentMod - 1; } } } while (skipError && !startOk && (currentMod >= 0)); } void TopShell::nextClicked() { doNext(0); } void TopShell::previousClicked() { extern Sequencer *seq; extern OptShell *optShell; extern QueueShell *queueShell; if (currentMod >= 0) { seq->stopPlayback(); endModule (0); } if (currentMod < 0) currentMod = -currentMod - 2; else { if (optShell->removeChecked() == TRUE) queueShell->removeModule(currentMod); if (currentMod >= 0) currentMod--; } pickRandom (); if (currentMod >= 0) if (!startPlayback (0)) currentMod = -currentMod - 1; } void TopShell::forwardClicked() { extern int startPos; extern Sequencer *seq; if (currentMod >= 0) { seq->stopPlayback(); endModule(STOP_FORWBACK); startPos = actualPos + 1; startPlayback(STOP_FORWBACK); } } void TopShell::backClicked() { extern int startPos; extern Sequencer *seq; if (currentMod >= 0) { seq->stopPlayback(); endModule(STOP_FORWBACK); if (actualPos > 0) startPos = actualPos - 1; else startPos = 0; startPlayback(STOP_FORWBACK); } } void TopShell::stopClicked() { extern Sequencer *seq; if (currentMod >= 0) { seq->stopPlayback(); endModule(0); currentMod = -currentMod - 1; doRandom = 0; } } void TopShell::playClicked() { extern Sequencer *seq; if (currentMod < 0) { currentMod = -currentMod - 1; if (doRandom) { pickRandom(); doRandom = 0; } if (currentMod >= xInfo.nrFileStrings) currentMod = -1; } else { seq->stopPlayback(); endModule(0); } if (currentMod >= 0) if (!startPlayback (0)) currentMod = -currentMod - 1; } void TopShell::pickRandom(void) { extern OptShell *optShell; if (xInfo.nrFileStrings > 0) { if (optShell->randomChecked() == TRUE) currentMod = rand () % xInfo.nrFileStrings; } } #ifndef DEPEND #include "TopShell.moc" #endif gmod-3.1.orig/TopShell.h100600 1750 1750 3020 6402577432 15112 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #ifndef __TopShellH #define __TopShellH #include #include #include #include #include #include class CommentShell; class OptShell; class QueueShell; class TrackShell; class SampleShell; class TopShell : public QWidget { Q_OBJECT signals: void channelSignal(int); public: TopShell(CommentShell *, OptShell *, QueueShell *, SampleShell *, TrackShell *); void moduleFile(const char *); void moduleTitle(const char *); void setPosition(int); void setChannels(int); void setMaxPosition(int); void doNext(int); private: void pickRandom(); static const char *backXbm; static const char *forwardXbm; static const char *previousXbm; static const char *nextXbm; static const char *playXbm; static const char *stopXbm; QLabel *fileLabel; QLabel *nameLabel; QLCDNumber *positionLcd; QLCDNumber *channelLcd; QPushButton *button[12]; QPixmap *pixmaps[6]; int maxPosition; int doRandom; private slots: void backClicked(); void forwardClicked(); void playClicked(); void nextClicked(); void previousClicked(); void stopClicked(); void setRandom(); }; inline void TopShell::setMaxPosition(int position) { maxPosition = position; } inline void TopShell::moduleFile(const char *modFile) { fileLabel->setText(modFile); } inline void TopShell::moduleTitle(const char *modTitle) { nameLabel->setText(modTitle); } #endif gmod-3.1.orig/TrackShell.C100600 1750 1750 4504 6402577432 15357 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #include #include #include "TrackShell.h" TrackShell::TrackShell(QWidget *w) : QWidget(w, "trackShell") { setMinimumSize(70, 40); setCaption("Xgmod Tracker"); patternList = new QListBox(this, "patternList"); patternList->setGeometry(5, 5, 140, 160); patternList->setScrollBar(FALSE); patternList->setAutoScrollBar(FALSE); patternList->setBottomScrollBar(FALSE); patternList->setAutoBottomScrollBar(FALSE); closeButton = new QPushButton(this, "closeButton"); closeButton->setText("Close"); closeButton->setGeometry(40, 200, 60, 25); connect(closeButton, SIGNAL(clicked()), this, SLOT(closeTrackShell())); resize(150, 170); } void TrackShell::showTrackShell() { show(); } void TrackShell::closeTrackShell() { close(); } void TrackShell::resizeEvent(QResizeEvent *) { closeButton->move((width() - 60) / 2, height() - 30); patternList->resize(width() - 10, height() - 40); } void TrackShell::setChannels(int channels) { resize((patternList->fontMetrics()).maxWidth() * (channels * 4 + 6) + 20, height()); nrChannels = channels; } void TrackShell::updateTracker(int pos, int patternLen, short voiceTable[MAX_POSITION][MAX_TRACK], struct noteInfo *patternTable[MAX_PATTERN * MAX_TRACK]) { static char *notes[] = {"C-", "C#", "D-", "D#", "E-", "F-", "F#", "G-", "G#", "A-", "A#", "B-"}; int pat, channel; int note, voice, octave; char noteStr[8]; string trackString; patternList->setAutoUpdate(FALSE); patternList->clear(); for (pat = 0; pat < patternLen; pat++) { sprintf (noteStr, "[%03d] ", pat); trackString = noteStr; for (channel = 0; channel < nrChannels; channel++) { voice = voiceTable[pos][channel]; note = (patternTable[voice])[pat].note; if (note == NOTE_STOP) trackString += "STO "; else if ((note == 0) || (note > 127)) trackString += "... "; else { octave = note / 12; note = note % 12; sprintf(noteStr, "%s%01d ", notes[note], octave); trackString += noteStr; } } trackString += '\0'; patternList->insertItem(trackString.data()); } patternList->repaint(); patternList->setAutoUpdate(TRUE); } #ifndef DEPEND #include "TrackShell.moc" #endif gmod-3.1.orig/TrackShell.h100600 1750 1750 1616 6402577432 15425 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #ifndef __TrackShellH #define __TrackShellH #include #include #include #include "defines.h" // #include "structs.h" // for "pattern" type class TrackShell : public QWidget { Q_OBJECT public: TrackShell(QWidget *w = 0); void insertLine(const char *); void setCurrent(int); void updateTracker(int, int, short [MAX_POSITION][MAX_TRACK], struct noteInfo *[MAX_PATTERN * MAX_TRACK]); public slots: void showTrackShell(); void setChannels(int); protected: void resizeEvent(QResizeEvent *); private: QListBox *patternList; QPushButton *closeButton; int nrChannels; private slots: void closeTrackShell(); }; inline void TrackShell::setCurrent(int current) { patternList->setCurrentItem(current); patternList->centerCurrentItem(); } #endif gmod-3.1.orig/Voice.C100600 1750 1750 27340 6402577432 14413 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #include #include #include "defines.h" #include "structs.h" #include "defines.h" #include "Sample.h" #include "Voice.h" void periodToNote(int, int *, int *); void syncTime(); unsigned char Voice::numVoices_ = 0; short Voice::vibraTable[][NUM_VIBRA] = { /* sine wave */ {0, 24, 49, 74, 97, 120, 141, 161, 180, 197, 212, 224, 235, 244, 250, 253, 255, 253, 250, 244, 235, 224, 212, 197, 180, 161, 141, 120, 97, 74, 49, 24, 0, -24, -49, -74, -97, -120, -141, -161, -180, -197, -212, -224, -235, -244, -250, -253, -255, -253, -250, -244, -235, -224, -212, -197, -180, -161, -141, -120, -97, -74, -49, -24}, /* ramp down wave */ {0, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120, 128, 136, 144, 152, 160, 168, 176, 184, 192, 200, 208, 216, 224, 232, 240, 248, -255, -248, -240, -232, -224, -216, -208, -200, -192, -184, -176, -168, -160, -152, -144, -136, -128, -120, -112, -104, -96, -88, -80, -72, -64, -56, -48, -40, -32, -24, -16, -8}, /* square wave */ {255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255}, }; int Voice::doPreUpdates(int) { return 0; } int Voice::doTick(int dev, int tickNo, songInfo *songChar) { int scratch; if (delayCount_ && (delayCount_ == tickNo)) delayCount_ = 0; if (!delayCount_) { envelopeVol(sample_->volumeEnvelopeY(volumeEnvelopePos_, inVolumeSustain_, &fadeVol_)); envelopePan(sample_->panEnvelopeY(panEnvelopePos_, inPanSustain_)); if (slidePitch_ && slideRate_ && (((slidePitch_ == SLIDE_ONCE) && !tickNo) || ((slidePitch_ != SLIDE_ONCE) && tickNo))) { int bend; if (songChar->slideType == SLIDE_PERIOD_LIN) { slidePeriod_ -= slideRate_; periodToNote(slidePeriod_ / 256, &scratch, &bend); } else if (songChar->slideType == SLIDE_FREQ_LIN) { slidePeriod_ = (int)((111978.0 * 256.0) / (111978.0 / (slidePeriod_ / 256) + (slideRate_ / 256.0))); periodToNote(slidePeriod_ / 256, &scratch, &bend); } else /* note linear (specific to XM) */ { slidePeriod_ += (100 * slideRate_) / (16 * 256); scratch = slidePeriod_ / 100; bend = slidePeriod_ % 100; } if ((slidePitch_ == SLIDE_PORT) && glissando_) { if (bend > 0) scratch += 1; bend = 0; } pitchbender_ = (scratch * 100 + bend) - (note_ * 100); if (((slideRate_ < 0) && (pitchbender_ <= slideGoal_)) || ((slideRate_ > 0) && (pitchbender_ >= slideGoal_))) { if ((songChar->type != MODULE_S3M) || (slidePitch_ == SLIDE_PORT)) { if (slidePitch_ == SLIDE_PORT) lastNote_ = 0; pitchbender_ = slideGoal_; slidePeriod_ = slidePeriodGoal_; slideRate_ = 0; slidePitch_ = 0; } else if (!(flagVol_ & SLIDE_VOL) && (pitchbender_ != slideGoal_)) { flagVol_ |= SLIDE_VOL; whatChanged_ |= VOL_CHANGED; } } else if (flagVol_ & SLIDE_VOL) { flagVol_ &= ~SLIDE_VOL; whatChanged_ |= VOL_CHANGED; } whatChanged_ |= BEND_CHANGED; } if (tremor_) { scratch = tickNo % tremTotal_; if (scratch == tremor_) { flagVol_ |= TREMOR_VOL; whatChanged_ |= VOL_CHANGED; } else if (!scratch) { flagVol_ &= ~TREMOR_VOL; whatChanged_ |= VOL_CHANGED; } } if (tickNo) { if (tremolo_) { unsigned char vol; vol = vibraTable[tremoloWave_ & 0x03][tremoloPosition_] * tremoloDepth_ * VOL_SLIDE_RATE / 128; tremoloPosition_ += tremolo_; tremoloPosition_ %= NUM_VIBRA; if (vol != tremoloVol_) { tremoloVol_ = vol; whatChanged_ |= VOL_CHANGED; } } if (panSlide_) { scratch = pan_ + panSlide_; if (scratch < 0) { scratch = 0; panSlide_ = 0; } else if (scratch > 255) { scratch = 255; panSlide_ = 0; } pan(scratch); } if (globalVolSlide_) { scratch = mainVolume_ + globalVolSlide_; if (scratch < 0) { scratch = 0; globalVolSlide_ = 0; } else if (scratch > 255) { scratch = 255; globalVolSlide_ = 0; } mainVolume(scratch); } if (cutCount_ == tickNo) { cutCount_ = 0; volume(0); // stop volume/pan envelopes too? } if (vibraRate_) { // This is always period-linear. It should really be note-linear // for XM modules. scratch = (vibraTable[vibraWave_ & 0x03][vibraPosition_] * vibraDepth_) / 128; if (scratch != vibraBend_) { vibraBend_ = scratch; whatChanged_ |= BEND_CHANGED; } vibraPosition_ += vibraRate_; vibraPosition_ %= NUM_VIBRA; } if (retrigger_) if (!(tickNo % retrigger_)) { scratch = volume_; switch (retrigVol_) { case 0: case 8: break; case 6: scratch = (scratch * 2) / 3; break; case 7: scratch /= 2; break; case 14: scratch = (scratch * 3) / 2; break; case 15: scratch *= 2; break; default: if (retrigVol_ > 8) scratch += ((1 << (retrigVol_ - 9)) * VOL_SLIDE_RATE); else scratch -= ((1 << (retrigVol_ - 1)) * VOL_SLIDE_RATE); break; } if (scratch > 255) scratch = 255; else if (scratch < 0) scratch = 0; volume(scratch); note(note_, SLIDE_NO_TYPE); } } if (!(fineVol_ && tickNo) && (volSlide_ && (tickNo || fineVol_ || songChar->volOnZero))) { scratch = volume_ + volSlide_; if (scratch > 255) { scratch = 255; volSlide_ = 0; } else if (scratch < 0) { scratch = 0; volSlide_ = 0; } volume(scratch); } if (arpegNum_) { arpegCurr_ = tickNo % arpegNum_; if (arpegBend_ != arpegNote_[arpegCurr_]) { arpegBend_ = arpegNote_[arpegCurr_]; whatChanged_ |= BEND_CHANGED; } } } return doPreUpdates(dev); } void Voice::init(int dev, const Sample *samp) { SEQ_DECLAREBUF(); SEQ_CONTROL(dev, channel_, CTRL_PITCH_BENDER_RANGE, 8192); sample(samp); whatChanged_ &= ~(SAMPLE_CHANGED | NOTE_CHANGED); SEQ_SET_PATCH(dev, channel_, sample_->number()); } void Voice::keyOff() { inVolumeSustain_ = MY_FALSE; inPanSustain_ = MY_FALSE; } void Voice::note(int note, int slideType) { extern unsigned short periodTable[]; whatChanged_ |= NOTE_CHANGED; note_ = note; if (tremoloWave_ <= 3) tremoloPosition_ = 0; volumeEnvelopePos_ = 0; inVolumeSustain_ = MY_TRUE; fadeVol_ = 65535; envelopeVol(sample_->volumeEnvelopeY(volumeEnvelopePos_, MY_TRUE, &fadeVol_)); panEnvelopePos_ = 0; inPanSustain_ = MY_TRUE; envelopePan(sample_->panEnvelopeY(panEnvelopePos_, MY_TRUE)); if (slideType != SLIDE_NO_TYPE) { if (slideType == SLIDE_NOTE_LIN) slidePeriod_ = note * 100; else slidePeriod_ = periodTable[note - NOTE_BASE] * 256; if (pitchbender_) { pitchbender_ = 0; whatChanged_ |= BEND_CHANGED; } if (flagVol_ & SLIDE_VOL) { flagVol_ &= ~SLIDE_VOL; whatChanged_ |= VOL_CHANGED; } } if (vibraWave_ <= 3) vibraPosition_ = 0; }; void Voice::offset(int pos) { offset_ = pos / sample_->cutFactor(); whatChanged_ |= OFFSET_CHANGED; } void Voice::resetEffects(int doReset) { if (doReset) { if (tremor_) { tremor_ = 0; if (flagVol_ & TREMOR_VOL) { flagVol_ &= ~TREMOR_VOL; whatChanged_ |= VOL_CHANGED; } } if (tremolo_) { tremolo_ = 0; tremoloVol_ = 0; whatChanged_ |= VOL_CHANGED; } if (vibraBend_) { vibraBend_ = 0; whatChanged_ |= BEND_CHANGED; } if (arpegBend_) { arpegBend_ = 0; whatChanged_ |= BEND_CHANGED; } arpegNum_ = 0; cutCount_ = 0; delayCount_ = 0; fineVol_ = 0; retrigger_ = 0; slidePitch_ = 0; vibraRate_ = sample_->vibratoRate(); volSlide_ = 0; if (sample_->vibratoDepth() >= 0) vibraDepth_ = sample_->vibratoDepth(); } else if (slidePitch_ == SLIDE_ONCE) slidePitch_ = 0; } void Voice::sample(const Sample *samp) { if (sample_ != samp) { if (samp) { sample_ = samp; if (samp->ok()) { if (flagVol_ & SAMPLE_VOL) { flagVol_ &= ~SAMPLE_VOL; whatChanged_ |= VOL_CHANGED; } // always force note retrigger if the sample changes whatChanged_ |= SAMPLE_CHANGED | NOTE_CHANGED; } } if (!samp || !samp->ok()) { if (!(flagVol_ & SAMPLE_VOL)) { flagVol_ |= SAMPLE_VOL; whatChanged_ |= VOL_CHANGED; } } } if (sample_->pan() >= 0) pan(sample_->pan()); if (sample_->vibratoType() >= 0) vibratoWave(sample_->vibratoType()); finetune(sample_->finetune()); volume(sample_->volume()); } void Voice::setEnvelopePos(int pos) { volumeEnvelopePos_ = pos; panEnvelopePos_ = pos; } void Voice::slideTo(int rate, int note, int type, int slideType, int rateMult) { /* slide up/down should never have rate or note set to 0 */ extern unsigned short periodTable[]; int size, currNote; unsigned char setDir = 1; slidePitch_ = type; if (rate) { if (type == SLIDE_PORT) lastRate_ = rate; } else rate = lastRate_; if (!note) /* only PORT should have 0 note */ { if (!lastNote_) { /* last port completed */ slidePitch_ = 0; return; } slideRate_ = sample_->slideRate(rate * rateMult, slideDir_); note = lastNote_; setDir = 0; } else if (type == SLIDE_PORT) lastNote_ = note; currNote = note_ * 100 + pitchbender_; size = (note * 100) - currNote; if (!size) { slidePitch_ = 0; if (type == SLIDE_PORT) { lastNote_ = 0; slideDir_ = SLIDE_NEG; } return; } if (setDir) { if (size < 0) { if (type == SLIDE_PORT) slideDir_ = SLIDE_NEG; rate = -rate; } else { if (type == SLIDE_PORT) slideDir_ = SLIDE_POS; } slideRate_ = sample_->slideRate(rate * rateMult, SLIDE_POS); } slideGoal_ = pitchbender_ + size; if (slideType == SLIDE_NOTE_LIN) slidePeriodGoal_ = note * 100; else slidePeriodGoal_ = periodTable[note - NOTE_BASE] * 256; } void Voice::startNote(int dev, int note) { SEQ_DECLAREBUF(); int vol; if (flagVol_) vol = 0; else { vol = ((((volume_ * envelopeVol_) / 64) + tremoloVol_) * mainVolume_) / 255; if (vol > 255) vol = 255; else if (vol < 0) vol = 0; } if ((note != 255) || (vol != lastVol_)) { lastVol_ = vol; if (volType_ == VOL_LOG) { int newVolume; unsigned char bits; bits = (vol & 0xf0) >> 4; newVolume = 1 << bits; vol &= 0x0f; if (bits >= 4) { newVolume |= (vol << (bits - 4)); for (bits -= 4; bits > 0; bits--) newVolume |= (1 << (bits - 1)); } else newVolume |= (vol >> (4 - bits)); vol = (unsigned char)(newVolume / 256); } else vol /= 2; syncTime(); SEQ_START_NOTE(dev, channel_, note, (unsigned char)vol); } } void Voice::vibrato(int amount) { int depth; vibraRate_ = (amount >> 4) & 0x0f; if (!vibraRate_) vibraRate_ = vibraOldRate_; else vibraOldRate_ = vibraRate_; depth = (amount & 0x0f); if (depth) vibraDepth_ = depth; } gmod-3.1.orig/Voice.h100600 1750 1750 14754 6402577432 14465 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #ifndef VOICE_H #define VOICE_H #include #ifdef USE_LOCAL #include "soundcard.h" #else #include #endif #include "defines.h" #define VOL_CHANGED 0x01 #define NOTE_CHANGED 0x02 #define PAN_CHANGED 0x04 #define KEY_CHANGED 0x10 #define BEND_CHANGED 0x20 #define OFFSET_CHANGED 0x40 #define SAMPLE_CHANGED 0x80 #define TREMOR_VOL 0x01 #define SAMPLE_VOL 0x02 #define SLIDE_VOL 0x04 class Sample; struct songInfo; class Voice { public: Voice() : arpegBend_(0), arpegNum_(0), channel_(0), cutCount_(0), delayCount_(0), envelopePan_(0), envelopeVol_(0), finetune_(0), fineVol_(0), flagVol_(SAMPLE_VOL), glissando_(0), globalVolSlide_(0), inPanSustain_(0), inVolumeSustain_(0), lastBend_(INT_MAX), lastNote_(0), lastRate_(0), lastVol_(INT_MAX), mainVolume_(255), noteDelayed_(0), offset_(0), pan_(0), panEnvelopePos_(0), panFactor_(100), panSlide_(0), pitchbender_(0), retrigger_(0), //retrigVol_(0), sample_(0), slideDir_(0), slideGoal_(0), slidePeriod_(0), slidePeriodGoal_(0), slidePitch_(0), slideRate_(0), tremolo_(0), tremoloDepth_(0), tremoloOld_(0), tremoloPosition_(0), tremoloVol_(0), tremoloWave_(0), tremor_(0), vibraBend_(0), vibraDepth_(0), vibraOldRate_(0), vibraPosition_(0), vibraRate_(0), vibraWave_(0), volSlide_(0), volType_(0), volume_(0), volumeEnvelopePos_(0), whatChanged_(VOL_CHANGED | PAN_CHANGED | BEND_CHANGED) { channel_ = numVoices_++; }; virtual ~Voice() { numVoices_--; }; virtual void doUpdates(int) = 0; void arpeg(int); void cutNote(int parm) { cutCount_ = parm; } void delayNote(int amt) { delayCount_ = amt; } int doTick(int, int, songInfo *); void finetune(int); void fineVol(int); void glissando(int parm) { glissando_ = parm; } void globalVolSlide(int amt) { globalVolSlide_ = amt; } void init(int, const Sample *); void keyOff(); void mainVolume(int); void note(int, int); void offset(int pos); void pan(int); void panFactor(int factor) { panFactor_ = factor; } void panSlide(int amt) { panSlide_ = amt; } void portAndVol(int parm); void resetEffects(int); void retrigger(int p, int v) { retrigger_ = p; retrigVol_ = v; } void sample(const Sample *); void setEnvelopePos(int); void slideTo(int, int, int, int, int); void tremolo(int); void tremoloWave(int); void tremor(int); void vibrato(int); void vibratoSpeed(int speed) { vibraOldRate_ = speed; } void vibratoWave(int wave); void volType(int type) { volType_ = type; } void volSlide(int); void volume(int); protected: virtual int doPreUpdates(int); virtual void startNote(int, int); void envelopePan(int); void envelopeVol(int vol); static unsigned char numVoices_; static short vibraTable[][NUM_VIBRA]; unsigned char arpegCurr_; short arpegBend_; short arpegNote_[3]; unsigned char arpegNum_; unsigned char channel_; unsigned char cutCount_; unsigned char delayCount_; unsigned char envelopePan_; // 0..64 unsigned char envelopeVol_; // 0..64 unsigned short fadeVol_; short finetune_; unsigned char fineVol_; unsigned char flagVol_; unsigned char glissando_; signed char globalVolSlide_; char inPanSustain_; char inVolumeSustain_; int lastBend_; unsigned char lastNote_; short lastRate_; int lastVol_; unsigned char mainVolume_; // 0..255 unsigned char note_; unsigned char noteDelayed_; int offset_; unsigned char pan_; // 0..255 int panEnvelopePos_; signed char panFactor_; signed char panSlide_; short pitchbender_; unsigned char retrigger_; unsigned char retrigVol_; const Sample *sample_; unsigned char slideDir_; short slideGoal_; int slidePeriod_; int slidePeriodGoal_; unsigned char slidePitch_; int slideRate_; unsigned char tremolo_; unsigned char tremoloDepth_; unsigned char tremoloOld_; unsigned char tremoloPosition_; signed char tremoloVol_; // -128..127 (adjustment) unsigned char tremoloWave_; unsigned char tremor_; unsigned char tremTotal_; short vibraBend_; unsigned char vibraDepth_; unsigned char vibraOldRate_; unsigned char vibraPosition_; unsigned char vibraRate_; unsigned char vibraWave_; signed char volSlide_; unsigned char volType_; unsigned char volume_; // 0..255 int volumeEnvelopePos_; unsigned char whatChanged_; }; inline void Voice::arpeg(int amount) { arpegNum_ = 3; arpegCurr_ = 0; arpegNote_[0] = 0; arpegNote_[1] = ((amount >> 4) & 0x0f) * 100; arpegNote_[2] = (amount & 0x0f) * 100; } inline void Voice::envelopePan(int pan) { if (envelopePan_ != pan) { envelopePan_ = pan; whatChanged_ |= PAN_CHANGED; } } inline void Voice::envelopeVol(int vol) { if (envelopeVol_ != vol) { envelopeVol_ = vol; whatChanged_ |= VOL_CHANGED; } } inline void Voice::finetune(int parm) { if (finetune_ != parm) { finetune_ = parm; whatChanged_ |= BEND_CHANGED; } } inline void Voice::fineVol(int parm) { volSlide_ = VOL_SLIDE_RATE * parm; fineVol_ = 1; } inline void Voice::mainVolume(int vol) { if (mainVolume_ != vol) { mainVolume_ = vol; whatChanged_ |= VOL_CHANGED; } } inline void Voice::pan(int panVal) { if (pan_ != panVal) { pan_ = panVal; whatChanged_ |= PAN_CHANGED; } } inline void Voice::tremolo(int amount) { tremolo_ = (amount >> 4) & 0x0f; if (!tremolo_) tremolo_ = tremoloOld_; else tremoloOld_ = tremolo_; if (amount &= 0x0f) tremoloDepth_ = amount; } inline void Voice::tremoloWave(int parm) { if ((parm & 0x03) == 0x03) parm -= 1; tremoloWave_ = parm; } inline void Voice::tremor(int amount) { tremor_ = (amount >> 4) & 0x0f; tremTotal_ = tremor_ + (amount & 0x0f); if (!tremTotal_) tremor_ = 0; } inline void Voice::vibratoWave(int wave) { if ((wave & 0x03) == 0x03) wave--; vibraWave_ = wave; } inline void Voice::volSlide(int parm) { if (parm & 0xf0) volSlide_ = VOL_SLIDE_RATE * ((parm >> 4) & 0x0f); else volSlide_ = -VOL_SLIDE_RATE * (parm & 0x0f); fineVol_ = 0; } inline void Voice::portAndVol(int parm) { volSlide(parm); slidePitch_ = SLIDE_PORT; // this was 1, but I think SLIDE_PORT is right } inline void Voice::volume(int vol) { if (volume_ != vol) { volume_ = vol; whatChanged_ |= VOL_CHANGED; } }; #endif gmod-3.1.orig/VoiceAWE.C100600 1750 1750 5676 6402577432 14740 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #ifdef AWE_SUPPORT #include #include #include #include "defines.h" #include "structs.h" #include "defines.h" #include "Sample.h" #include "VoiceAWE.h" void syncTime(); int VoiceAWE::doPreUpdates(int dev) { SEQ_DECLAREBUF(); if (!delayCount_) { if (whatChanged_ & (NOTE_CHANGED | OFFSET_CHANGED)) { syncTime(); SEQ_STOP_NOTE(dev, channel_, 0, 127); return 1; } } return 0; } void VoiceAWE::doUpdates(int dev) { SEQ_DECLAREBUF(); if (!delayCount_) { if (whatChanged_ & (SAMPLE_CHANGED | PAN_CHANGED | OFFSET_CHANGED | KEY_CHANGED)) syncTime(); if (whatChanged_ & SAMPLE_CHANGED) SEQ_SET_PATCH(dev, channel_, sample_->number()); if (whatChanged_ & PAN_CHANGED) { int panVal; panVal = pan_ + (envelopePan_ - 32) * (128 - abs(128 - pan_)) / 32; if (panVal > 255) panVal = 255; else if (panVal < 0) panVal = 0; if (panFactor_ != 100) { panVal -= 128; panVal = (panVal * panFactor_) / 100; panVal += 128; } SEQ_CONTROL(dev, channel_, CTL_PAN, panVal); if (!(whatChanged_ & NOTE_CHANGED)) { panVal = ((panVal * 2) - 240) / 32 + 7; GUS_VOICEBALA(dev, channel_, panVal); } } if (whatChanged_ & OFFSET_CHANGED) { SEQ_START_NOTE(dev, channel_, note_, 0); GUS_VOICE_POS(dev, channel_, offset_); lastVol_ = 0; startNote(dev, 255); } else if (whatChanged_ & NOTE_CHANGED) startNote(dev, note_); else if (whatChanged_ & VOL_CHANGED) startNote(dev, 255); if (whatChanged_ & BEND_CHANGED) { int bend = pitchbender_ + vibraBend_ + arpegBend_ + finetune_; if (bend != lastBend_) { lastBend_ = bend; syncTime(); SEQ_BENDER(dev, channel_, bend + 8192); } } if (whatChanged_ & KEY_CHANGED) { SEQ_STOP_NOTE(dev, channel_, 0, 127); } whatChanged_ = 0; } } void VoiceAWE::startNote(int dev, int note) { SEQ_DECLAREBUF(); int vol; if (flagVol_) vol = 0; else { vol = ((((volume_ * envelopeVol_) / 64) + tremoloVol_) * mainVolume_) / 255; if (vol > 255) vol = 255; else if (vol < 0) vol = 0; } if ((note != 255) || (vol != lastVol_)) { lastVol_ = vol; if (volType_ == VOL_LOG) { int newVolume; unsigned char bits; bits = (vol & 0xf0) >> 4; newVolume = 1 << bits; vol &= 0x0f; if (bits >= 4) { newVolume |= (vol << (bits - 4)); for (bits -= 4; bits > 0; bits--) newVolume |= (1 << (bits - 1)); } else newVolume |= (vol >> (4 - bits)); vol = (unsigned char)(newVolume / 256); } else vol /= 2; syncTime(); SEQ_CONTROL(dev, channel_, CTL_EXPRESSION, vol << 7); SEQ_START_NOTE(dev, channel_, note, 127); } } #endif gmod-3.1.orig/VoiceAWE.h100600 1750 1750 447 6402577432 14754 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #ifndef VOICEAWE_H #define VOICEAWE_H #include "Voice.h" class VoiceAWE : public Voice { public: void doUpdates(int); private: int doPreUpdates(int); void startNote(int, int); }; #endif gmod-3.1.orig/VoiceGUS.C100600 1750 1750 3366 6402577432 14754 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #include #include #include "defines.h" #include "structs.h" #include "defines.h" #include "Sample.h" #include "VoiceGUS.h" void syncTime(); void VoiceGUS::doUpdates(int dev) { SEQ_DECLAREBUF(); if (!delayCount_) { if (whatChanged_ & (SAMPLE_CHANGED | PAN_CHANGED | OFFSET_CHANGED | KEY_CHANGED)) syncTime(); if (whatChanged_ & SAMPLE_CHANGED) SEQ_SET_PATCH(dev, channel_, sample_->number()); if (whatChanged_ & PAN_CHANGED) { int panVal; panVal = pan_ + (envelopePan_ - 32) * (128 - abs(128 - pan_)) / 32; if (panVal > 255) panVal = 255; else if (panVal < 0) panVal = 0; if (panFactor_ != 100) { panVal -= 128; panVal = (panVal * panFactor_) / 100; panVal += 128; } SEQ_CONTROL(dev, channel_, CTL_PAN, panVal); if (!(whatChanged_ & NOTE_CHANGED)) { panVal = ((panVal * 2) - 240) / 32 + 7; GUS_VOICEBALA(dev, channel_, panVal); } } if (whatChanged_ & NOTE_CHANGED) startNote(dev, note_); else if (whatChanged_ & VOL_CHANGED) startNote(dev, 255); if (whatChanged_ & BEND_CHANGED) { int bend = pitchbender_ + vibraBend_ + arpegBend_ + finetune_; if (bend != lastBend_) { lastBend_ = bend; syncTime(); SEQ_BENDER(dev, channel_, bend + 8192); } } if (whatChanged_ & OFFSET_CHANGED) { // restart note to prevent click if (!(whatChanged_ & NOTE_CHANGED)) startNote(dev, note_); GUS_VOICE_POS(dev, channel_, offset_); } if (whatChanged_ & KEY_CHANGED) GUS_VOICEOFF(dev, channel_); whatChanged_ = 0; } } gmod-3.1.orig/VoiceGUS.h100600 1750 1750 350 6402577432 14767 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #ifndef VOICEGUS_H #define VOICEGUS_H #include "Voice.h" class VoiceGUS : public Voice { public: void doUpdates(int); }; #endif gmod-3.1.orig/commands.h100600 1750 1750 3055 6402577432 15171 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson /* This file is part of the GMOD package */ #ifndef __commandsH #define __commandsH #define CMD_ARPEG 0x00 #define CMD_SLIDEUP 0x01 #define CMD_SLIDEDOWN 0x02 #define CMD_SLIDETO 0x03 #define CMD_VIBRATO 0x04 #define CMD_PORTANDVOL 0x05 #define CMD_VIBRAANDVOL 0x06 #define CMD_TREMOLO 0x07 #define CMD_SETOFFSET 0x09 #define CMD_VOLSLIDE 0x0a #define CMD_JUMP 0x0b #define CMD_VOLUME 0x0c #define CMD_BREAK 0x0d #define CMD_EXTENDED 0x0e #define CMD_SPEED 0x0f #define CMD_NOP 0xfe /* "extended" commands */ #define CMD_FINEPORTUP 0xe1 #define CMD_FINEPORTDOWN 0xe2 #define CMD_GLISSANDO 0xe3 #define CMD_VIBRA_WAVE 0xe4 #define CMD_FINETUNE 0xe5 #define CMD_PATTERN_LOOP 0xe6 #define CMD_TREMOLO_WAVE 0xe7 #define CMD_SET_PAN 0xe8 #define CMD_RETRIGGER 0xe9 #define CMD_FINEVOLUP 0xea #define CMD_FINEVOLDOWN 0xeb #define CMD_CUT_NOTE 0xec #define CMD_DELAY_NOTE 0xed #define CMD_DELAY_PAT 0xee /* more commands */ #define CMD_SET_TICKS 0x10 #define CMD_SET_BPM 0x11 #define CMD_TREMOR 0x12 #define CMD_ARPEG2 0x13 #define CMD_INFO 0x14 #define CMD_RETRIGVOL 0x15 #define CMD_GLOBAL_VOL 0x16 #define CMD_SETOFFSET_1024 0x17 #define CMD_SETOFFSET_FINE 0x18 #define CMD_KEYOFF 0x19 #define CMD_VIBRASPEED 0x20 #define CMD_XFINEPORTUP 0x21 #define CMD_XFINEPORTDOWN 0x22 #define CMD_PANSLIDE 0x23 #define CMD_GLOBALVOL_SLIDE 0x24 #define CMD_SETENV_POS 0x25 #endif gmod-3.1.orig/compress.C100600 1750 1750 1342 6402577432 15153 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #include #include #include "defines.h" #include "structs.h" #include "globals.h" short compressVoice (short lastVoice, short position, int notesPerTrack, int skip, short firstVoice = 0) { int voice; for (voice = (int)firstVoice; voice < lastVoice; voice++) { if (voice == position) { voice += (skip - 1); } else if ((patternTable[voice] != NULL) && !bcmp (patternTable[voice], patternTable[position], sizeof (struct noteInfo) * notesPerTrack)) { free (patternTable[position]); patternTable[position] = NULL; return voice; } } return position; } gmod-3.1.orig/cvt_period.C100600 1750 1750 2252 6402577432 15457 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #include #include "defines.h" #include "structs.h" #include "globals.h" void periodToNote (int period, int *note, int *pitchbend) { int low = 0, middle = 0, high = NUM_PERIODS - 1; int diff, diffHigh, diffLow; *pitchbend = 0; if (period > periodTable[0]) period = periodTable[0]; else if (period < periodTable[NUM_PERIODS - 1]) period = periodTable[NUM_PERIODS - 1]; while (high >= low) { middle = (high + low) / 2; if (period == periodTable[middle]) break; else if (period < periodTable[middle]) low = middle + 1; else high = middle - 1; } if (period != periodTable[middle]) { diffHigh = abs (period - periodTable[high]); diffLow = abs (period - periodTable[low]); if (diffLow < diffHigh) middle = low; else middle = high; if (period < periodTable[middle]) diff = periodTable[middle] - periodTable[middle + 1]; else diff = periodTable[middle - 1] - periodTable[middle]; *pitchbend = (periodTable[middle] - period) * 100 / diff; } *note = middle + NOTE_BASE; } gmod-3.1.orig/defines.h100600 1750 1750 11611 6402577432 15022 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #ifndef __definesH #define __definesH #ifdef USE_X #define IDENT "@(#) Xgmod 3.1 - Copyright (C) 1997 by Andrew J. Robinson" #define HEADING "Xgmod 3.1" #else #define IDENT "@(#) gmod version 3.1 - Copyright (C) 1997 by Andrew J. Robinson" #define HEADING "GMOD version 3.1\nCopyright (C) 1997 by Andrew J. Robinson\n" #endif #define MY_TRUE 1 #define MY_FALSE 0 /* module types */ #define MODULE_NOT_S3M 0 #define MODULE_S3M 1 #define MODULE_XM 2 /* frequencies */ #define C2FREQ 261632 #define NTSC_RATE 8363 #define PAL_RATE 8287 #define CVT_MOD_SPEED(x) ((x) < 32 ? CMD_SET_TICKS : CMD_SET_BPM) #define MIN(a, b) ((a) < (b) ? (a) : (b)) #define BYTE(x) (*(u_char *)(x)) #define INTEL_SHORT(x) (BYTE(x) | (BYTE(x+1) <<8)) #define REV_SHORT(x) (BYTE(x) <<8 | BYTE(x+1)) #define INTEL_LONG(x) (INTEL_SHORT(x) | (INTEL_SHORT(x+2) <<16)) #define TICKS_PER_DIVISION(x) (ticksPerDivision = x) #define TEMPO(x, y) ((x) ? (tickDuration = ((double)y * 100.0 / (24.0 * x))) : 0 ) #define MAX_TRACK 32 #define MAX_PATTERN 256 #define MAX_POSITION 256 #define MAX_SAMPLES 255 #define HDR_SIZE 0x30 /* number of bytes to read to determine module type */ #define VOL_SLIDE_RATE 4 /* rate for volume slides, bigger is faster */ /* slide defines */ #define SLIDE_UP 1 /* slide up */ #define SLIDE_DOWN 2 /* slide down */ #define SLIDE_ONCE 3 /* only slide once */ #define SLIDE_PORT 4 /* tone portamento */ #define SLIDE_NEG 0 /* positive rate */ #define SLIDE_POS 1 /* negative rate */ #define SLIDE_PERIOD_LIN 0 #define SLIDE_FREQ_LIN 1 #define SLIDE_NOTE_LIN 2 #define SLIDE_NO_TYPE 3 #define SLIDE_RATE_669 2 /* panning flags */ #define PAN_NO_HARDWARE 0 #define PAN_HARDWARE 1 /* move types (bit flags) */ #define MOVE_LOOP 0x01 #define MOVE_JUMP 0x02 #define MOVE_EXIT 0x04 #define MOVE_FORWBACK 0x08 #define MOVE_BREAK 0x10 /* volume types */ #define VOL_LINEAR 0 #define VOL_LOG 1 /* patch types */ #define PATCH_NORMAL 0 #define PATCH_XM 1 /* octave types */ #define OCTAVE_LIMIT 0 #define OCTAVE_EXTEND 1 #define OCTAVE_AUTO 2 /* exit codes */ #define ERR_NOERROR 0 /* no error - normal termination */ #define ERR_BADARGS 50 /* bad arguments */ #define ERR_SEQUENCER 51 /* error accessing sequencer */ #define ERR_BADLOAD 52 /* error loading a module */ #define ERR_NOGUS 53 /* no GUS found */ #define ERR_FORK 54 /* error forking */ /* timer state */ #define TIMER_OFF 0 #define TIMER_ON 1 /* terminal state */ #define TERMINAL_RAW 0 #define TERMINAL_RESTORE 1 /* stop types (non-zero) */ #define STOP_NEXT 1 /* stop current, go to next */ #define STOP_EXIT 2 /* stop current and exit */ #define STOP_PREV 3 /* stop current, go to previous */ #define STOP_FORWBACK 4 /* move forward or backward patterns */ #ifdef USE_X #define STOP_GOTO 5 /* go to a specific module */ #endif /* special orders */ #define ORDER_STOP -1 /* stop playing */ #define ORDER_SKIP -2 /* skip position */ /* special notes */ #define NOTE_STOP 254 /* stop note playing */ #define NOTE_LAST 255 /* use last note played on channel */ /* mixer defines */ #define MIXER_MIN_VOL 0 #define MIXER_MAX_VOL 100 /* echo events */ #define ECHO_NONE 0x00 /* nothing */ #define ECHO_MESSAGE 0x01 /* time to display a message */ #define ECHO_END 0x02 /* end of module */ #define ECHO_SPEED0 0x03 /* speed 0 command */ #define ECHO_LOOP 0x04 /* infinite loop detected */ #define ECHO_PATTERN 0x05 /* position within the current pattern */ #define NUM_PERIODS 127 /* number of periods in period table */ #define NUM_VIBRA 64 /* number of values in vibrato table */ #define NOTE_BASE 1 /* lowest note possible */ /* modified and added to by Peter Federighi */ #define GDECOMP_PGM "gunzip -c " /* program for decompression */ #define LHADECOMP_PGM "lha pq " /* lha decompression */ #define ZIPDECOMP_PGM "unzip -p " /* zip decompression */ #define GCOMPRESSED 2 /* start with 2 since FALSE */ #define LHACOMPRESSED 3 /* and TRUE take up 0 and 1 */ #define ZIPCOMPRESSED 4 /* rc file defines */ #define MAX_RC_LEN 161 /* maximum length of a line in the rc file */ #define RC_NAME "/usr/etc/gmodrc" /* name of system rc file */ #define USER_RC_NAME "/.gmodrc" /* name of a user's rc file */ /* string lengths */ #define NAME_LEN 33 /* length of module name (ULT longest) */ #define DESC_LEN 40 /* length of description */ #define SAMPNAME_LEN 33 /* length of sample name (ULT longest) */ /* print define */ #ifdef USE_NCURSES #define FPUTS addstr #define PRINTF printw #else #define FPUTS(s) fputs(s, stdout) #define PRINTF printf #endif /* misc limits */ #define MAX_CUT 4 /* maximum amount to cut samples */ #endif gmod-3.1.orig/globals.h100600 1750 1750 1556 6402577432 15017 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson /* This file is part of the GMOD package */ #ifndef __globalsH #define __globalsH extern int patternLen[MAX_POSITION]; extern int patternTempo[MAX_POSITION]; extern struct noteInfo *patternTable[MAX_PATTERN * MAX_TRACK]; extern struct voiceInfo voices[MAX_TRACK]; extern int tune[MAX_POSITION]; extern short voiceTable[MAX_POSITION][MAX_TRACK]; extern double tickDuration; extern int mixerfd; extern double thisTime, nextTime; extern int ticksPerDivision; extern double clockRate; /* HZ */ extern unsigned short periodTable[]; #ifndef USE_X extern unsigned char stopFlag; #endif extern unsigned char background; extern int actualPos; extern int positionChange; extern unsigned int seqInput; #ifdef USE_X extern struct xStruct xInfo; extern int currentMod; #endif #endif gmod-3.1.orig/gmod.1100600 1750 1750 14323 6402600306 14232 0ustar neurochpneurochp.TH GMOD 1 "1996 Mar 03" "Version 2.3" "USER APPLICATIONS" .SH NAME gmod \- play music modules .SH SYNOPSIS .B gmod [\-bcehlMnqrRsxz] [\-m mixer] [\-P pan-factor] [\-v volume] [module...] .SH DESCRIPTION This manual page documents .BR gmod , a music module file player for Linux, with support for the Gravis Ultrasound card and AWE cards. .B Gmod is capable of playing 669, MOD, Multitracker (MTM), Scream Tracker III (S3M), Ultratracker (ULT), and FastTracker (XM) files. .PP Modules compressed with \fBcompress\fP, \fBgzip\fP, \fBlharc\fP, or \fBzip\fP can be played by .BR gmod , if gunzip, lharc, and/or zip are installed. .PP The modules will be played in the order specified on the command line. The following keys can be used while the module is playing, unless the .I "\-z" option was specified (special keys -- arrows, etc -- only work if gmod was compiled with ncurses support): .TP .I "b, left arrow" Move backwards positions. .TP .I "f, right arrow" Move forward positions. .TP .I "n, next page" Next module. .TP .I "p, previous page" Previous module. .TP .I "q" Quit. .TP .I "+" Increase sequencer volume by . .TP .I "-" Decrease sequencer volume by . .TP .I "up arrow" Scroll sample list up. .TP .I "down arrow" Scroll sample list down. .TP .I "0..9" Set numeric argument. For example, keying 1 0 will set the numeric argument to 10. The argument will remain in effect until a command which uses the argument is executed and a new argument is entered. For example, 10ff will advance 20 positions, and 10f5f will advance 15 positions. .PP In addition, .B gmod understands the following signals: .TP .I "SIGTERM" Quit. .TP .I "SIGUSR1" Previous module. .TP .I "SIGUSR2" Next module. .SH OPTIONS .TP .B "\-b" (MOD only) Disable BPM tempos. Specifying this option will cause .B gmod to treat all speed commands as changes to the number of ticks per note. .TP .B "\-c" Disable compression of modules in memory. Normally, modules are compressed in memory in order to use less space. Specifying this option will save some CPU time. .TP .B "\-e" Show empty samples. Use this option to display information about all samples in a module, even if some are empty. (Not supported for S3M modules). This option only works if gmod was compiled without ncurses support. .TP .B "\-h" Display help. .TP .B "\-l" Break infinite pattern loops in modules. .TP .B "\-m \fImixer\fP" Use mixer number .IR mixer . .B Gmod will attempt to use /dev/mixer if this option is not specified. Specifying this option will cause .B gmod to use /dev/mixer\fIn\fP, where .I n is the specified mixer. Valid values are 0 to 15. .TP .B "\-M" (MOD only) Check magic number. Do not play modules which do not have a magic number. Old 15 channel modules do not have magic numbers. .TP .B "\-n" (MOD only) Use NTSC sample timing. This option should be used with modules composed on NTSC (non-European) machines. .TP .B "\-P \fIpan-factor\fP" Set the panning factor. Valid values are -100 to 100. Higher absolute values produce more panning. Negative values cause the left/right channels to be swapped. The default value is 100. .TP .B "\-q" Quiet mode. No text output will be produced. .TP .B "-r" Infinitely repeat the current module. .TP .B "-R" Randomize the play order of the modules. .TP .B "-s" (MOD only) Ignore "speed 0" commands. Ordinarily, "speed 0" commands cause playing to stop. Use this option if a module seems to suddenly stop in the middle. .TP .B "-v \fIvolume\fP" Set the volume to .I volume. Valid values are 0 to 255. The default value is 255. .TP .B "-x" (MOD only) Extend octaves. Normally, the range of notes in modules is limited to what is specified by the standard. This option removes that restriction. .TP .B "-z" Background mode. This option does not put .B gmod in the background; rather, it allows .B gmod to run in the background. The keys that can be normally used while a module is playing no longer work, and the display of the current position and pattern is disabled. .TP .B "-5" (MOD only) Use 50 Hz clock frequency. Specifying this option will cause speed changes to be calculated using a 50 Hz frequency base. The default value is 60 Hz. .SH THE GMODRC FILE The gmodrc file is used to determine settings to be used for particular modules. GMOD will first look for a file named .gmodrc in the user's home directory, and if it is not found, it will look for /usr/etc/gmodrc. The gmodrc settings are combined with the options given on the command line. The format of the file is: .PP filename(without path) option ... .PP For example, if mymodule.mod uses NTSC sample timing and speed 0 commands should be ignored, the following line could be entered in the gmodrc file: .PP mymodule.mod ntsc nospeed0 .PP Spacing is not important, but case is significant. The module name must start at the leftmost position of the line. The length of the line is limited to 160 characters. .PP Valid options are (corresponding command-line options are in parenthesis): nobpm (-b), ntsc (-n), nospeed0 (-s), extend (-x), and 50hz (-5) .SH NOTES This applies only if gmod is compiled without linear volume support: Setting the sequencer volume to anything greater than approximately 60 when gmod's volume .I "(\-v)" is set to 255 will cause volume clipping. Lower gmod volumes will allow higher sequencer volumes before clipping occurs. .PP MOD files use various timing methods. Different methods and the corresponding options are listed below: .PP NTSC (60 Hz) CIA: -n .PP PAL (50 Hz) CIA: no options (default) .PP NTSC (60 Hz) Vblank: -bn .PP PAL (50 Hz) Vblank: -b5 .SH DIAGNOSTICS The exit codes are: .TP 0 Normal termination. .TP 50 Bad arguments. .TP 51 An error occurred while attempting to access the sequencer. .TP 52 An error occurred while attempting to load a module .TP 53 No GUS card was found. .SH AUTHORS Original source by Hannu Savolainen. .PP MultiTracker/Ultratracker loading by Robert Sanders. .PP Many other modifications have been performed by Andrew J. Robinson . Andrew is currently the maintainer of gmod. Please direct any comments, questions, bug reports, etc. to him. There is current a gmod WWW page available through http://www.nyx.net/~arobinso. .PP gmod is Copyright (C) 1996 by Andrew J. Robinson. gmod-3.1.orig/gmod.C100600 1750 1750 22475 6402577434 14302 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson /* * gmod.c - Module player for GUS and Linux. * (C) Hannu Savolainen, 1993 * * NOTE! This program doesn't try to be a complete module player. * It's just a too I used while developing the driver. In * addition it can be used as an example on programming * the VoxWare Sound Driver with GUS. */ /* * Many modifications have been done by Andrew J. Robinson. * Refer to the ChangeLog for details. */ #include #include #include #include #include #ifdef USE_LOCAL #include "soundcard.h" #else #include #endif #include #include #include #include /* for randomize */ #include /* for randomize */ #include "defines.h" #include "structs.h" #include "tables.h" #include "protos.h" #ifdef USE_X #include #include #include "TopShell.h" #include "TrackShell.h" #include "OptShell.h" #include "QueueShell.h" #include "CommentShell.h" #else #include "CursesScr.h" #endif #include "SampleShell.h" #include "Sequencer.h" #include "Sample.h" SEQ_DEFINEBUF (2048); int patternLen[MAX_POSITION]; int patternTempo[MAX_POSITION]; struct noteInfo *patternTable[MAX_PATTERN * MAX_TRACK]; struct voiceInfo voices[MAX_TRACK]; int tune[MAX_POSITION]; short voiceTable[MAX_POSITION][MAX_TRACK]; double tickDuration; int mixerfd; Sample *samples[MAX_SAMPLES]; double thisTime, nextTime; int ticksPerDivision; #ifndef USE_X unsigned char stopFlag = 0; #endif unsigned char background = 0; int actualPos = 0; int positionChange = 0; unsigned int seqInput = ECHO_NONE; struct xStruct xInfo; int currentMod; #ifdef USE_X TopShell *topShell; TrackShell *trackShell; OptShell *optShell; QueueShell *queueShell; CommentShell *commentShell; char * emptyList[] = { "" }; #else CursesScr *cursScreen; #endif SampleShell *sampleShell; void readRc (FILE *, char *, struct optionsInfo *); unsigned int procInput (void); void setSignals (void); #ifdef USE_X struct optionsInfo options = {255, 0, 1, 1, 0, 0, 0, 255, 0, 0, 100, 0, 0}; #else struct optionsInfo options = {255, 0, 0, 1, 1, 0, 0, 0, 255, 0, 0, 100, 0, 0}; #endif struct optionsInfo savedOpt; FILE *rcFp = NULL; struct songInfo songChar; int startPos = 0; Sequencer *seq; int main (int argc, char *argv[]) { static char ident[] = IDENT; int i, seqOpenRet, nameStart, numFiles, randSwap; #ifndef USE_X int exitCode = ERR_NOERROR; char mixerName[13]; int mixDevmask; #endif char *tmpArgv, *rcFilename; // do all the opens first in case the process is SUID or SGID Sequencer lseq; seq = &lseq; seqOpenRet = lseq.open(); #ifndef USE_X if (options.mixer == 255) sprintf (mixerName, "%s", "/dev/mixer"); else sprintf (mixerName, "%s%u", "/dev/mixer", options.mixer); mixerfd = open (mixerName, O_RDWR, 0); #endif // drop SUID and SGID priveledge if we have it setuid(getuid()); setgid(getgid()); songChar.comment = (char *)calloc (1, 1); for (i = 0; i < MAX_PATTERN * MAX_TRACK; i++) patternTable[i] = NULL; for (i = 0; i < MAX_SAMPLES; i++) samples[i] = 0; #ifdef USE_X QApplication a(argc, argv); commentShell = new CommentShell; optShell = new OptShell; queueShell = new QueueShell; sampleShell = new SampleShell; trackShell = new TrackShell; topShell = new TopShell(commentShell, optShell, queueShell, sampleShell, trackShell); a.setMainWidget(topShell); topShell->show(); #endif nameStart = parseArgs (argc, argv, &options); #ifdef USE_X savedOpt.extendOct = options.extendOct; #endif #ifndef USE_X printf (HEADING); printf ("Original source (C) Hannu Savolainen, 1993\n"); printf ("MTM/ULT loaders by Robert Sanders\n"); printf ("Continuing development by Andrew J. Robinson\n\n"); if (nameStart == argc) { printf ("\nUsage: %s [options] modfile . . .\n", argv[0]); printf ("Use %s -h for help.\n\n", argv[0]); exit (ERR_BADARGS); } #endif switch (seqOpenRet) { case -1: #ifdef USE_X QMessageBox::message("Xgmod Error", "Cannot open /dev/sequencer"); #else perror ("/dev/sequencer"); #endif exit (ERR_SEQUENCER); case -2: #ifdef USE_X QMessageBox::message("Xgmod Error", "Cannot determine number of synths"); #else perror ("/dev/sequencer"); #endif exit (ERR_SEQUENCER); case -3: #ifdef USE_X QMessageBox::message("Xgmod Error", "Cannot determine synth information"); #else perror ("/dev/sequencer"); #endif exit (ERR_SEQUENCER); case -4: #ifdef USE_X QMessageBox::message("Xgmod Error", "Gravis Ultrasound not detected"); #else fprintf (stderr, "Gravis Ultrasound not detected\n"); #endif exit (ERR_NOGUS); } #ifndef USE_X if (options.mixer == 255) sprintf (mixerName, "%s", "/dev/mixer"); else sprintf (mixerName, "%s%u", "/dev/mixer", options.mixer); if (mixerfd == -1) printf ("Mixer (%s) not available.\n", mixerName); else { ioctl (mixerfd, SOUND_MIXER_READ_DEVMASK, &mixDevmask); if (!(mixDevmask & SOUND_MASK_SYNTH)) { printf ("This mixer (%s) does not support volume control.\n", mixerName); close (mixerfd); mixerfd = -1; } } #endif if ((tmpArgv = getenv ("HOME")) != NULL) { rcFilename = (char *) malloc (strlen (tmpArgv) + 9); strcpy (rcFilename, tmpArgv); strcat (rcFilename, USER_RC_NAME); rcFp = fopen (rcFilename, "r"); free (rcFilename); } if (rcFp == NULL) rcFp = fopen (RC_NAME, "r"); #ifndef USE_X cursScreen = new CursesScr(background); #ifdef USE_NCURSES sampleShell = new SampleShell(background); #else sampleShell = new SampleShell(background, options.showEmptySamples); #endif #endif /* USE_X */ numFiles = argc - nameStart; srand (time (NULL)); if (options.randomize) { for (i = nameStart; i < argc; i++) { randSwap = nameStart + (rand () % numFiles); tmpArgv = argv[i]; argv[i] = argv[randSwap]; argv[randSwap] = tmpArgv; } } xInfo.nrFileStrings = argc - nameStart; #ifndef USE_X #define String char * #endif if (xInfo.nrFileStrings > 0) { xInfo.fileStrings = (char * *)malloc (sizeof (char *) * xInfo.nrFileStrings); for (i = nameStart; i < argc; i++) { xInfo.fileStrings[i - nameStart] = strdup (argv[i]); #ifdef USE_X queueShell->addFile(xInfo.fileStrings[i - nameStart]); #endif } } else xInfo.fileStrings = NULL; savedOpt = options; #ifdef USE_X seq->readEnabled(TRUE); #else setSignals (); #endif //seq->stopAllChannels(MY_FALSE); #ifdef USE_X currentMod = -1; a.exec(); #else currentMod = 0; while ((stopFlag != STOP_EXIT) && (currentMod < xInfo.nrFileStrings)) { if (startPlayback (stopFlag)) { seqInput = ECHO_NONE; while (seqInput != ECHO_END) { NoXProcessEvent (); } ioctl(seq->seqFd(), SNDCTL_SEQ_RESET, 0); startPos = endModule (stopFlag); switch (stopFlag) { case STOP_FORWBACK: startPos = actualPos + positionChange; if (startPos < 0) startPos = 0; break; case STOP_EXIT: break; case STOP_PREV: if (currentMod > 0) currentMod--; startPos = 0; break; default: case STOP_NEXT: currentMod++; startPos = 0; break; } } else { currentMod++; startPos = 0; } } //SEQ_DUMPBUF (); //lseq.close(); // destructor does close fclose (rcFp); delete cursScreen; exit (exitCode); #endif /* not USE_X */ } int startPlayback(unsigned char lstopFlag) { int loadRc = 0; int startDelay; extern char played[MAX_POSITION]; #ifdef USE_X extern TopShell *topShell; #endif #ifdef USE_X if (optShell->highlightChecked() == TRUE) queueShell->currentClicked(); #endif if (lstopFlag != STOP_FORWBACK) { struct timeval tvStart, tvEnd; startPos = 0; gettimeofday(&tvStart, NULL); options = savedOpt; #ifdef USE_X if (optShell->fiftyhzChecked() == TRUE) options.use_50hz = 1; else options.use_50hz = 0; if (optShell->ntscChecked() == TRUE) options.ntsc = 1; else options.ntsc = 0; if (optShell->bpmChecked() == TRUE) options.bpmTempos = 0; else options.bpmTempos = 1; options.extendOct = optShell->octaveSelected(); options.checkMagic = optShell->magicChecked(); #endif if (rcFp != NULL) { readRc (rcFp, xInfo.fileStrings[currentMod], &options); } loadRc = loadModule (xInfo.fileStrings[currentMod], &songChar, options); gettimeofday(&tvEnd, NULL); tvEnd.tv_sec -= tvStart.tv_sec; if (tvStart.tv_usec > tvEnd.tv_usec) { tvEnd.tv_sec -= 1; tvEnd.tv_usec = tvEnd.tv_usec + 1000000 - tvStart.tv_usec; } else tvEnd.tv_usec -= tvStart.tv_usec; if (tvEnd.tv_sec >= 1) startDelay = 0; else startDelay = (1000000 - tvEnd.tv_usec) / 10000; } else { loadRc = 1; startDelay = 0; // prevent "rewind" from detecting a loop played[startPos] = 0; } #ifndef USE_X stopFlag = 0; #endif if (loadRc) { actualPos = 0; positionChange = 0; playModule(startPos, &songChar, options, startDelay); } #ifdef USE_X else topShell->moduleTitle("Load Failed"); #endif return (loadRc); } gmod-3.1.orig/init.C100600 1750 1750 553 6402577434 14250 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #include "defines.h" #include "structs.h" #include "globals.h" void initVoices () { int i; for (i = 0; i < MAX_TRACK; i++) { voices[i].pattern = 0; voices[i].position = 0; voices[i].loopTimes = 0; voices[i].lastInfo = 0; } } gmod-3.1.orig/load_669.C100600 1750 1750 14623 6402577434 14673 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #include #include #include #include #include #ifdef USE_LOCAL #include "soundcard.h" #else #include #endif #include #include "commands.h" #include "defines.h" #include "structs.h" #include "globals.h" #include "protos.h" #include "Six69.h" int load_669_module(FILE * modFd, struct songInfo *songChar, struct optionsInfo options, unsigned char *buffer) { extern Sample *samples[]; extern Sequencer *seq; int i; int samplePtr; int position; int voice; unsigned char *tunePtr, *lenPtr, *tempoPtr; /* array 0-127 */ unsigned char header[0x1f1]; /* changed from 1084 */ unsigned char *sampleInfox; int nrSamples; /* 16 or 32 samples */ int slen, npat; int formatVersion = 0; memcpy (header, buffer, HDR_SIZE); if (fread(header + HDR_SIZE, 1, sizeof(header) - HDR_SIZE, modFd) != sizeof(header) - HDR_SIZE) { /* short file (header) */ return 0; } if (INTEL_SHORT(header) != 0x6669) formatVersion = 1; songChar->comment = (char *)realloc(songChar->comment, 109); bzero(songChar->comment, 109); strncpy(songChar->comment, header + 2, 108); songChar->commentLineLen = 36; npat = header[0x6f]; songChar->nrPatterns = npat; tunePtr = &header[0x71]; for (slen = 0; slen < 128 && tunePtr[slen] != 0xff; slen++); for (i = 0; i < slen; i++) tune[i] = tunePtr[i]; lenPtr = &header[0x171]; for (i = 0; i < 0x80; i++) patternLen[i] = lenPtr[i] + 1; tempoPtr = &header[0xf1]; for (i = 0; i < slen; i++) patternTempo[i] = tempoPtr[i]; nrSamples = header[0x6e]; if ((sampleInfox = (unsigned char *)malloc(nrSamples * 0x19)) == NULL) { /* Could not allocate memory for sample information */ return 0; } if (fread(sampleInfox, 1, nrSamples * 0x19, modFd) != (nrSamples * 0x19)) { /* Could not read sample information */ free(sampleInfox); return 0; } songChar->nrSamples = nrSamples; songChar->nrTracks = npat * 8; songChar->songlength = slen; songChar->nrChannels = 8; songChar->lowestNote = 36; songChar->highestNote = 99; songChar->playSpeed = 4; songChar->tempo = 75; songChar->volType = VOL_LINEAR; songChar->volOnZero = MY_FALSE; songChar->slideType = SLIDE_FREQ_LIN; songChar->clockSpeed = 60; strcpy (songChar->desc, "669"); for (position = 0; position < npat; position++) { unsigned char patterns[0x600]; int pat, channel, x; /* int pp = 0x1f1 + (nrSamples * 0x19) + (position * 0x600); */ for (voice = 0; voice < songChar->nrChannels; voice++) if ((patternTable[position * songChar->nrChannels + voice] = (struct noteInfo *) malloc (sizeof (struct noteInfo) * 64)) == NULL) { /* Can't allocate memory for a pattern */ free(sampleInfox); return 0; } if ((x = fread(patterns, 1, 0x600, modFd)) != 0x600) { /* Short file */ free(sampleInfox); return 0; } for (pat = 0; pat < 64; pat++) { for (channel = 0; channel < 8; channel++) { unsigned char *p; unsigned vol, period, sample, effect, params; unsigned effect1 = 0, effect2 = 0, parm1 = 0, parm2 = 0; p = &patterns[pat * 24 + channel * 3]; if (p[0] >= 0xfe) { sample = 0; period = 0; } else { period = (p[0] >> 2) + 36; /* AJR: changed from 48 */ sample = (((p[0] << 4) & 0x30) | ((p[1] >> 4) & 0x0f)) + 1; } effect = (p[2] >> 4); params = p[2] & 0x0f; vol = (p[1] & 0x0f) * 17; if (period) { effect1 = CMD_VOLUME; parm1 = vol; } if (p[0] == 0xfe) { effect1 = CMD_VOLUME; parm1 = vol; } if (p[2] == 0xff) { effect2 = CMD_NOP; } else switch (effect) { case 0: /* a - Portamento up */ parm2 = params * SLIDE_RATE_669; if (parm2 == 0) effect2 = 0; else effect2 = CMD_SLIDEUP; break; case 1: /* b - Portamento down */ parm2 = params * SLIDE_RATE_669; if (parm2 == 0) effect2 = 0; else effect2 = CMD_SLIDEDOWN; break; case 2: /* c - Port to note */ parm2 = params * SLIDE_RATE_669; if (parm2 == 0) effect2 = 0; else effect2 = CMD_SLIDETO; break; case 3: /* d - Frequency adjust */ parm2 = params * SLIDE_RATE_669; if (parm2 == 0) effect2 = 0; else effect2 = CMD_FINEPORTUP; break; case 4: /* e - Frequency vibrato */ parm2 = 0x70 || params; if (parm2 == 0x70) effect2 = 0; else effect2 = CMD_VIBRATO; break; case 5: /* f - Set tempo */ if ((params == 0) && (formatVersion == 1)) parm2 = 1; else parm2 = params; if (parm2 == 0) effect2 = 0; else effect2 = CMD_SET_TICKS; break; default: effect2 = 0; parm2 = 0; } if (period) if (period < songChar->lowestNote) period = songChar->lowestNote; else if (period > songChar->highestNote) period = songChar->highestNote; voice = position * songChar->nrChannels + channel; voiceTable[position][channel] = voice; (patternTable[voice])[pat].note = period; (patternTable[voice])[pat].sample = sample; (patternTable[voice])[pat].command[0] = effect1; (patternTable[voice])[pat].parm1[0] = parm1; (patternTable[voice])[pat].parm2[0] = 0; (patternTable[voice])[pat].command[1] = effect2; (patternTable[voice])[pat].parm1[1] = parm2; (patternTable[voice])[pat].parm2[1] = 0; } } if (options.compress) for (channel = 0; channel < songChar->nrChannels; channel++) voiceTable[position][channel] = compressVoice(voiceTable[position][channel], voiceTable[position][channel], 64, 1); } samplePtr = 0x1f1 + (nrSamples * 0x19) + (npat * 0x600); /* Location where the * first sample is * stored */ // totalMem = 0; for (i = 0; i < nrSamples; i++) { samples[i] = new Six69_sample; samples[i]->load(*seq, modFd, i, 1, &sampleInfox[i * 0x19]); } /* set panning */ for (i = 0; i < songChar->nrChannels; i++) if ((i % 2) == 0) songChar->panning[i] = 0; else songChar->panning[i] = 255; free(sampleInfox); return 1; } gmod-3.1.orig/load_mod.C100600 1750 1750 32633 6402577434 15127 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #include #include #include #include #ifdef USE_LOCAL #include "soundcard.h" #else #include #endif #include #include #include #ifdef USE_X #include "TopShell.h" #include "CommentShell.h" #else #include "CursesScr.h" #endif #include "SampleShell.h" #include "commands.h" #include "defines.h" #include "structs.h" #include "globals.h" #include "protos.h" #include "Sequencer.h" #include "mod.h" /* prototype */ char *fixName(char *theString); int catchup(FILE *, int, int *); int loadModModule (FILE ** modFd, struct songInfo *songChar, struct optionsInfo options, unsigned char *buffer, char *command) { extern Sample *samples[]; extern Sequencer *seq; int i; int gusOnboardMem; int samplePtr, patternLoc; int position; int voice; unsigned char *tunePtr; /* array 0-127 */ unsigned char header[1084]; int nrSamples; /* 16 or 32 samples */ int slen, npat; int patSize, patTmpSize, offset; char mname[21]; int bend; unsigned char isFlt8 = MY_FALSE; int cutFactor = 1; memcpy(header, buffer, HDR_SIZE); if (fread(header + HDR_SIZE, 1, sizeof(header) - HDR_SIZE, *modFd) != sizeof(header) - HDR_SIZE) { /* Short header */ return 0; } strncpy(mname, (char *)header, 20); mname[20] = '\0'; removeNoprint(mname); strcpy(songChar->name, mname); if (!memcmp(&header[1080], "M.K.", 4) || !memcmp(&header[1080], "M!K!", 4) || !memcmp(&header[1080], "M&K!", 4)) { nrSamples = 31; songChar->nrChannels = 4; } else if (!memcmp(&header[1080], "FLT", 3)) { nrSamples = 31; songChar->nrChannels = 4; if (header[1083] == '8') isFlt8 = MY_TRUE; } else if (!memcmp(&header[1081], "CHN", 3)) { nrSamples = 31; songChar->nrChannels = header[1080] - 48; } else if (!memcmp(&header[1080], "OCTA", 4)) { nrSamples = 31; songChar->nrChannels = 8; } else if (!memcmp(&header[1082], "CH", 2)) { nrSamples = 31; songChar->nrChannels = strtol(&header[1080], NULL, 10); } else if (!options.checkMagic) { nrSamples = 15; songChar->nrChannels = 4; } else return 0; if (options.extendOct == OCTAVE_EXTEND) { songChar->lowestNote = NOTE_BASE; songChar->highestNote = NOTE_BASE + NUM_PERIODS - 1; } else { songChar->lowestNote = 48; songChar->highestNote = 83; } sprintf (songChar->desc, "MOD"); songChar->nrSamples = nrSamples; songChar->playSpeed = 6; songChar->tempo = 125; songChar->volType = VOL_LINEAR; songChar->volOnZero = MY_FALSE; songChar->slideType = SLIDE_PERIOD_LIN; if (options.use_50hz) songChar->clockSpeed = 50; else songChar->clockSpeed = 60; for (i = 0; i < songChar->nrChannels; i++) songChar->panning[i] = panning (i); patSize = 64 * songChar->nrChannels * 4; if (nrSamples == 31) { samplePtr = patternLoc = 1084; slen = header[950]; tunePtr = &header[952]; } else { samplePtr = patternLoc = 600; slen = header[470]; tunePtr = &header[472]; } npat = 0; for (i = 0; i < 128; i++) { tune[i] = tunePtr[i]; if (tunePtr[i] > npat) npat = tunePtr[i]; } npat++; if (isFlt8 == MY_TRUE) npat++; songChar->nrTracks = npat * songChar->nrChannels; songChar->songlength = slen; songChar->nrPatterns = npat; gusOnboardMem = seq->memory(); for (position = 0; position < npat; position++) { unsigned char patterns[64][songChar->nrChannels][4]; int pat, channel; int pp = patternLoc + (position * patSize); if (pp < sizeof(header)) { patTmpSize = sizeof (header) - pp; if (patTmpSize > patSize) { memcpy(patterns, &header[pp], patSize); patTmpSize = 0; } else { memcpy(patterns, &header[pp], patTmpSize); offset = patTmpSize; patTmpSize = patSize - patTmpSize; } } else { patTmpSize = patSize; offset = 0; } if (patTmpSize > 0) if (fread ((char *) patterns + offset, 1, patTmpSize, *modFd) != patTmpSize) { /* Short file */ return 0; } for (voice = 0; voice < songChar->nrChannels; voice++) if ((patternTable[position * songChar->nrChannels + voice] = (struct noteInfo *) malloc (sizeof (struct noteInfo) * 64)) == NULL) { /* Can't allocate memory for a pattern */ return 0; } for (pat = 0; pat < 64; pat++) { for (channel = 0; channel < songChar->nrChannels; channel++) { unsigned short tmp; unsigned char *p; unsigned period, sample, effect, params, note; p = &patterns[pat][channel][0]; tmp = (p[0] << 8) | p[1]; sample = (tmp >> 8) & 0x10; period = MIN (tmp & 0xFFF, 1023); tmp = (p[2] << 8) | p[3]; sample |= tmp >> 12; effect = (tmp >> 8) & 0xF; params = tmp & 0xFF; if (effect == CMD_EXTENDED) { effect = ((CMD_EXTENDED << 4) & 0xf0) + ((params >> 4) & 0x0f); params &= 0x0f; } note = 0; if (period) { /* Convert period to a Midi note number */ periodToNote (period, (int *)¬e, &bend); if (((note < songChar->lowestNote) || (note > songChar->highestNote)) && (options.extendOct == OCTAVE_AUTO)) { songChar->lowestNote = NOTE_BASE; songChar->highestNote = NOTE_BASE + NUM_PERIODS - 1; } if (note < songChar->lowestNote) note = songChar->lowestNote; else if (note > songChar->highestNote) note = songChar->highestNote; } switch (effect) { case CMD_SPEED: if (options.tolerant && (params == 0)) effect = 0; else if (options.bpmTempos) effect = CVT_MOD_SPEED (params); else effect = CMD_SET_TICKS; break; case CMD_VOLUME: if (params > 0) params = (params * 4) - 1; break; case CMD_BREAK: params = ((params >> 4) & 0x0f) * 10 + (params & 0x0f); break; case CMD_SET_PAN: params *= 17; break; } voice = position * songChar->nrChannels + channel; voiceTable[position][channel] = voice; (patternTable[voice])[pat].note = note; (patternTable[voice])[pat].sample = sample; (patternTable[voice])[pat].command[0] = effect; (patternTable[voice])[pat].parm1[0] = params; (patternTable[voice])[pat].parm2[0] = 0; (patternTable[voice])[pat].command[1] = 0; (patternTable[voice])[pat].parm1[1] = 0; (patternTable[voice])[pat].parm2[1] = 0; } } if (options.compress) for (channel = 0; channel < songChar->nrChannels; channel++) voiceTable[position][channel] = compressVoice (voiceTable[position][channel], voiceTable[position][channel], 64, 1); } if (isFlt8 == MY_TRUE) { for (position = 0; position < npat; position += 2) for (i = 0; i < songChar->nrChannels; i++) voiceTable[position][i + 4] = voiceTable[position + 1][i]; songChar->nrChannels = 8; } samplePtr += (npat * patSize); /* Location where the first sample is stored */ //printf("Calculated %d, real %d\n", samplePtr, ftell(*modFd)); for (i = 0; i < nrSamples; i++) samples[i] = new MOD_sample; do { i = 0; while (i < nrSamples) { if ((samples[i]->load(*seq, *modFd, i, cutFactor, &header[20 + (i * 30)], &options.ntsc) == -ENOSPC) && (cutFactor < MAX_CUT)) { cutFactor++; i = nrSamples + 1; seq->resetSamples(); if (!command) fseek(*modFd, samplePtr, SEEK_SET); else { pclose(*modFd); *modFd = popen(command, "rb"); slen = 0; // reusing slen here! catchup(*modFd, samplePtr, &slen); } } else i++; } } while (i != nrSamples); if (gusOnboardMem == seq->memory()) return 0; return 1; } int loadModule(char *name, struct songInfo *songChar, struct optionsInfo options) { extern Sample *samples[]; #ifndef USE_X extern CursesScr *cursScreen; #endif int i; unsigned char header[HDR_SIZE]; char *command = NULL; int retVal; int gusOnboardMem; FILE *modFd; char compressed = MY_FALSE; #ifdef USE_X extern TopShell *topShell; extern CommentShell *commentShell; char *slashpos, tmpChar = '\0'; #endif extern SampleShell *sampleShell; /* added by Peter Federighi */ char *fixedname = NULL; extern Sequencer *seq; songChar->type = MODULE_NOT_S3M; songChar->globalVol = 255; songChar->name[0] = '\0'; songChar->desc[0] = '\0'; songChar->comment[0] = '\0'; seq->sync(); seq->resetSamples(); gusOnboardMem = seq->memory(); for (i = 0; i < MAX_POSITION; i++) patternLen[i] = 64; for (i = 0; i < MAX_POSITION; i++) patternTempo[i] = 0; for (i = 0; i < MAX_PATTERN * MAX_TRACK; i++) patternTable[i] = NULL; #ifndef USE_X cursScreen->moduleFile(name); #else if ((slashpos = strrchr(name, '/')) == NULL) slashpos = name; else slashpos++; if (strlen(slashpos) > 33) { tmpChar = slashpos[33]; slashpos[33] = '\0'; } topShell->moduleFile(slashpos); if (tmpChar != '\0') slashpos[33] = tmpChar; #endif if (!(modFd = fopen(name, "rb"))) return 0; if (fread(header, 1, sizeof (header), modFd) != sizeof (header)) { fclose(modFd); return 0; } if ((header[0] == 31) && ((header[1] == 139) || (header[1] == 157))) compressed = GCOMPRESSED; else if ((header[2] == '-') && (header[3] == 'l') && ((header[4] == 'h') || (header[4] == 'z')) && (header[6] == '-')) compressed = LHACOMPRESSED; else if ((header[0] == 'P') && (header[1] == 'K') && (header[2] == 3) && (header[3] == 4)) compressed = ZIPCOMPRESSED; if (compressed) { /* modified by Peter Federighi */ fixedname = fixName (name); switch (compressed) { case GCOMPRESSED: command = (char *) malloc (strlen (fixedname) + strlen (GDECOMP_PGM) + 1); sprintf (command, "%s%s", GDECOMP_PGM, fixedname); break; case LHACOMPRESSED: command = (char *) malloc (strlen (fixedname) + strlen (LHADECOMP_PGM) + 1); sprintf (command, "%s%s", LHADECOMP_PGM, fixedname); break; case ZIPCOMPRESSED: command = (char *) malloc (strlen (fixedname) + strlen (ZIPDECOMP_PGM) + 1); sprintf (command, "%s%s", ZIPDECOMP_PGM, fixedname); break; default: break; } fclose(modFd); modFd = popen (command, "rb"); if (!modFd) { free(command); free(fixedname); return 0; } if (fread(header, 1, sizeof(header), modFd) != sizeof(header)) { free(command); free(fixedname); return 0; } } if ((*(unsigned short *) &header[0] == 0x6669) || !memcmp(header, "JN", 2)) retVal = load_669_module(modFd, songChar, options, header); else if (!memcmp(header, "MTM", 3)) retVal = loadMtmModule(modFd, songChar, header); else if (!memcmp(header, "MAS_UTrack_V", 12)) retVal = loadUltModule(modFd, songChar, options, header); else if (!memcmp(&header[0x2c], "SCRM", 4)) { songChar->type = MODULE_S3M; retVal = loadS3mModule(&modFd, songChar, options, header, command); } else if (!memcmp(header, "Extended Module: ", 17)) retVal = loadXmModule(&modFd, songChar, options, header, command); else retVal = loadModModule(&modFd, songChar, options, header, command); if (compressed == MY_FALSE) fclose (modFd); else { free (command); free (fixedname); /* added by Peter Federighi */ pclose (modFd); } if (!retVal) freePatterns (); else { #ifdef USE_X topShell->moduleTitle(songChar->name); topShell->setMaxPosition(songChar->songlength); topShell->setChannels(songChar->nrChannels); commentShell->setComment(songChar->comment, songChar->commentLineLen); sampleShell->setSamples(samples, songChar->nrSamples); #else cursScreen->moduleTitle(songChar->name); cursScreen->setChannels(songChar->nrChannels); cursScreen->setType(songChar->desc); cursScreen->setMaxPosition(songChar->songlength); sampleShell->setSamples(samples, songChar->nrSamples); cursScreen->setMem(seq->memory(), gusOnboardMem); #endif } return (retVal); } /* * Added by Peter Federighi (allanon@u.washington.edu) to fix names so they can * be parsed by 'sh' properly for the 'popen' calls. */ char * fixName (char *theString) { short counter, numinvalid = 0, pos = 0, length = strlen (theString); char *newName; char *validChar = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz" "1234567890-_=+.,/\0"; if (length == 0) return NULL; /* First, find out how many invalid characters there are */ for (counter = 0; counter < length; counter++) { if (strchr (validChar, theString[counter]) == NULL) numinvalid += 1; } /* malloc memory for new string, leave it to the user to free() it*/ newName = (char *)malloc (length + numinvalid + 1); /* create new string, valid for command line parsing */ for (counter = 0; counter < length; counter++) { if (strchr (validChar, theString[counter]) == NULL) { newName[pos] = '\\'; newName[pos + 1] = theString[counter]; pos += 2; } else { newName[pos] = theString[counter]; pos++; } } /* either do this or make the for loop go to 'counter <= length' */ newName[length + numinvalid] = '\0'; return newName; } gmod-3.1.orig/load_mtm.C100600 1750 1750 17046 6402577434 15146 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #include #ifdef USE_LOCAL #include "soundcard.h" #else #include #endif #include #include #include #include #include #include "commands.h" #include "defines.h" #include "structs.h" #include "globals.h" #include "protos.h" #include "mtm.h" #define HEADER_SIZE 66 #define SAMPLE_SIZE 37 #define TRACK_SIZE 192 #define PATTERN_SIZE 64 #define NOTES_PER_TRACK 64 #define NR_CHANNELS 32 typedef struct { char magic[3]; /* must be "MTM" */ u_char version; /* upper 4 bits - major, lower minor */ char name[20]; /* null-term song name string */ u_short nrSavedTracks; /* number of tracks saved */ u_char lastSavedPattern; /* last pattern number saved */ u_char lastPlayedPattern; /* last pattern to play (songlength-1) */ u_short commentLen; /* length of extra comment field */ u_char nrSamples; /* number of samples saved (NOS) */ u_char attribute; /* currently defined as 0 */ u_char bpt; /* beats per track */ u_char nrPlayedTracks; /* number of tracks toplay back */ u_char panPositions[32]; /* pan positions for each voice (0-15) */ } mtmHeader; typedef struct { u_char pitch; u_char instrument; u_char effect; u_char argument; } mtmNote; typedef struct { mtmNote notes[NOTES_PER_TRACK]; } mtmTrack; typedef struct { u_short tracks[NR_CHANNELS]; } mtmPattern; void dumpMtmHeader (mtmHeader * h, struct songInfo *songChar) { strncpy (songChar->name, h->name, 20); songChar->name[20] = '\0'; sprintf (songChar->desc, "MultiTracker v%d.%d", h->version >> 4, h->version & 0x0f); } #define PITCH(p) ((*(u_char *)(p))>>2) #define INSTRUMENT(p) (((*(u_char *)(p)<<4) | (*((u_char *)(p)+1)>>4)) & 077) #define EFFECT(p) (*((u_char *)(p)+1) & 0xf) #define ARGUMENT(p) (*((u_char *)(p)+2)) static mtmTrack getTrack (char *buf) { mtmTrack t; int i; for (i = 0; i < NOTES_PER_TRACK; i++, buf += 3) { t.notes[i].pitch = PITCH (buf); t.notes[i].instrument = INSTRUMENT (buf); t.notes[i].effect = EFFECT (buf); t.notes[i].argument = ARGUMENT (buf); } return (t); } static mtmPattern getPattern (char *buf) { mtmPattern p; int i; for (i = 0; i < NR_CHANNELS; i++, buf += 2) p.tracks[i] = INTEL_SHORT (buf); return (p); } int loadMtmModule(FILE * modFd, struct songInfo *songChar, unsigned char *buffer) { extern Sample *samples[]; extern Sequencer *seq; mtmHeader header; int totalSampleSize, i; char *rawData; unsigned char *sampleData; mtmTrack *tracks; mtmPattern *patterns; u_char order[128]; int tracki, notei, pati; int voice; int params, effect, sample, note; songChar->lowestNote = 36; songChar->highestNote = 98; songChar->volType = VOL_LINEAR; songChar->volOnZero = MY_FALSE; songChar->slideType = SLIDE_PERIOD_LIN; songChar->clockSpeed = 60; /* read in header */ rawData = (char *) malloc (HEADER_SIZE); memcpy (rawData, buffer, HDR_SIZE); fread (rawData + HDR_SIZE, 1, HEADER_SIZE - HDR_SIZE, modFd); memcpy (&header.magic, rawData, 3); header.version = BYTE (rawData + 3); memcpy (header.name, rawData + 4, 20); header.nrSavedTracks = INTEL_SHORT (rawData + 24); header.lastSavedPattern = BYTE (rawData + 26); header.lastPlayedPattern = BYTE (rawData + 27); header.commentLen = INTEL_SHORT (rawData + 28); header.nrSamples = BYTE (rawData + 30); header.attribute = BYTE (rawData + 31); header.bpt = BYTE (rawData + 32); header.nrPlayedTracks = BYTE (rawData + 33); memcpy (header.panPositions, rawData + 34, 32); songChar->nrSamples = header.nrSamples; free (rawData); dumpMtmHeader (&header, songChar); /* ======== get sample data =============================== */ totalSampleSize = SAMPLE_SIZE * header.nrSamples; sampleData = (unsigned char *)malloc(totalSampleSize); fread (sampleData, 1, totalSampleSize, modFd); fread (order, 1, 128, modFd); /* =========== read tracks ============== */ rawData = (char *) malloc (TRACK_SIZE); tracks = (mtmTrack *) malloc (sizeof (mtmTrack)); patternTable[0] = (struct noteInfo *) calloc (1, sizeof (struct noteInfo) * NOTES_PER_TRACK); for (i = 0; i < header.nrSavedTracks; i++) { fread (rawData, 1, TRACK_SIZE, modFd); tracks[0] = getTrack (rawData); patternTable[i + 1] = (struct noteInfo *) malloc (sizeof (struct noteInfo) * NOTES_PER_TRACK); for (notei = 0; notei < NOTES_PER_TRACK; notei++) { params = tracks[0].notes[notei].argument; effect = tracks[0].notes[notei].effect; sample = tracks[0].notes[notei].instrument; note = tracks[0].notes[notei].pitch; if (effect == CMD_EXTENDED) { effect = ((CMD_EXTENDED << 4) & 0xf0) + ((params >> 4) & 0x0f); params &= 0x0f; } if (note) /* note->period */ { note = note + 3 * 12; /* shift up 3 octaves */ } switch (effect) { case CMD_SPEED: effect = CVT_MOD_SPEED (params); break; case CMD_VOLUME: if (params > 0) params = (params * 4) - 1; break; case CMD_BREAK: params = ((params >> 4) & 0x0f) * 10 + (params & 0x0f); break; case CMD_SET_PAN: params *= 17; break; } (patternTable[i + 1])[notei].note = note; (patternTable[i + 1])[notei].sample = sample; (patternTable[i + 1])[notei].command[0] = effect; (patternTable[i + 1])[notei].parm1[0] = params; (patternTable[i + 1])[notei].parm2[0] = 0; (patternTable[i + 1])[notei].command[1] = 0; (patternTable[i + 1])[notei].parm1[1] = 0; (patternTable[i + 1])[notei].parm2[1] = 0; } } free (rawData); /* =========== read patterns ============== */ rawData = (char *) malloc (PATTERN_SIZE * (header.lastSavedPattern + 1)); patterns = (mtmPattern *) malloc (sizeof (mtmPattern) * (header.lastSavedPattern + 1)); fread (rawData, 1, PATTERN_SIZE * (header.lastSavedPattern + 1), modFd); for (i = 0; i <= header.lastSavedPattern; i++) patterns[i] = getPattern (rawData + i * PATTERN_SIZE); free (rawData); for (i = 0; i <= header.lastSavedPattern; i++) for (voice = 0; voice < NR_CHANNELS; voice++) voiceTable[i][voice] = patterns[i].tracks[voice]; songChar->comment = (char *) realloc (songChar->comment, header.commentLen + 1); bzero (songChar->comment, header.commentLen + 1); fread (songChar->comment, 1, header.commentLen, modFd); songChar->commentLineLen = 0; for (i = 0; i < header.nrSamples; i++) { samples[i] = new MTM_sample; samples[i]->load(*seq, modFd, i, 1, sampleData + i * SAMPLE_SIZE); } songChar->nrTracks = header.nrSavedTracks + 1; songChar->songlength = header.lastPlayedPattern + 1; songChar->nrChannels = header.nrPlayedTracks; songChar->playSpeed = 6; songChar->tempo = 125; songChar->nrPatterns = header.lastSavedPattern + 1; /* copy pattern orders into the tune area */ for (i = 0; i <= header.lastPlayedPattern; i++) { tune[i] = order[i]; } /* determine maximum channel actually used */ songChar->nrChannels = 0; for (tracki = 0; tracki < header.nrPlayedTracks; tracki++) for (pati = 0; pati < (header.lastSavedPattern + 1); pati++) if ((tracki > songChar->nrChannels) && (patterns[pati].tracks[tracki])) songChar->nrChannels = tracki; songChar->nrChannels++; /* set proper panning */ for (i = 0; i < songChar->nrChannels; i++) songChar->panning[i] = (header.panPositions[i] & 0x0f) * 17; /* all done */ free(sampleData); free (tracks); free (patterns); return (1); } gmod-3.1.orig/load_s3m.C100600 1750 1750 30212 6402577434 15041 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #include #include #include #ifdef USE_LOCAL #include "soundcard.h" #else #include #endif #include #include #include #include "commands.h" #include "defines.h" #include "structs.h" #include "globals.h" #include "protos.h" #include "Sequencer.h" #include "s3m.h" struct listNode { struct listNode *prev, *next; unsigned int number; unsigned int location; char type; }; static unsigned char s3mEffectTab[] = {CMD_SET_TICKS, CMD_JUMP, CMD_BREAK, CMD_VOLSLIDE, /* A B C D */ CMD_SLIDEDOWN, CMD_SLIDEUP, CMD_SLIDETO, CMD_VIBRATO, /* E F G H */ CMD_TREMOR, CMD_ARPEG2, CMD_VIBRAANDVOL, CMD_PORTANDVOL, /* I J K L */ CMD_INFO, CMD_INFO, CMD_SETOFFSET, CMD_INFO, /* M N O P */ CMD_RETRIGVOL, CMD_TREMOLO, CMD_EXTENDED, CMD_SET_BPM, /* Q R S T */ CMD_INFO, CMD_GLOBAL_VOL, CMD_INFO, CMD_INFO, /* U V W X */ CMD_INFO, CMD_INFO}; /* Y Z */ void insertInList (struct listNode *list, char type, int number, unsigned int location) { struct listNode *current = list->next; struct listNode *node; node = (struct listNode *) malloc (sizeof (struct listNode)); node->type = type; node->number = number; node->location = location; while ((current != list) && (current->location < node->location)) current = current->next; node->next = current; node->prev = current->prev; (current->prev)->next = node; current->prev = node; } int catchup(FILE *modFd, int wanted, int *filePos) { char input[1024]; int bytesToRead; int readCount; while (wanted > *filePos) { bytesToRead = wanted - *filePos; if (bytesToRead > 1024) bytesToRead = 1024; readCount = fread(input, 1, bytesToRead, modFd); (*filePos) += readCount; if (readCount != bytesToRead) return 0; } return 1; } void cvtS3mEffect (unsigned char *effect, unsigned char *parm) { if ((*effect > 0) && (*effect <= 26)) *effect = s3mEffectTab[*effect - 1]; else *effect = CMD_INFO; if ((*effect == CMD_SET_BPM) && (*parm <= 0x20)) *effect = CMD_INFO; } void loadS3mPattern (FILE * modFd, int patNo, struct songInfo *songChar, unsigned char channelMap[], int *filePos) { int i; unsigned char hasNote, hasVolume, hasCommand; int readBytes, voice; unsigned char channel, note, instrument, volume, command, info; unsigned char buffer[100]; int index; int patternEnd; if (modFd) { int bytesRead; bytesRead = fread(buffer, 1, 2, modFd); (*filePos) += bytesRead; if (bytesRead != 2) patternEnd = 0; else patternEnd = *filePos + INTEL_SHORT(buffer); } for (i = 0; i < songChar->nrChannels; i++) { voiceTable[patNo][i] = (patNo * songChar->nrChannels) + i; patternTable[voiceTable[patNo][i]] = (struct noteInfo *) calloc (1, sizeof (struct noteInfo) * 64); } if (modFd) { for (i = 0; i < 64; i++) { while (*filePos < patternEnd) { hasNote = 0; hasVolume = 0; hasCommand = 0; readBytes = 0; index = 0; note = instrument = volume = command = info = 0; fread (buffer, 1, 1, modFd); (*filePos) += 1; if (buffer[0] == 0) break; channel = channelMap[buffer[0] & 31]; if (buffer[0] & 32) { hasNote = 1; readBytes += 2; } if (buffer[0] & 64) { hasVolume = 1; readBytes += 1; } if (buffer[0] & 128) { hasCommand = 1; readBytes += 2; } fread (buffer, readBytes, 1, modFd); (*filePos) += readBytes; if (hasNote) { if (buffer[0] == 255) /* empty note */ note = /* NOTE_LAST; */ 0; else if (buffer[0] == 254) /* stop sample */ note = NOTE_STOP; else { note = ((buffer[0] >> 4) & 0x0f) * 12 + (buffer[0] & 0x0f) + 12; if (note < songChar->lowestNote) note = songChar->lowestNote; else if (note > songChar->highestNote) note = songChar->highestNote; } instrument = buffer[1]; index += 2; } if (hasVolume) { volume = buffer[index]; if (volume > 0) volume = volume * 4 - 1; index += 1; } if (hasCommand) { command = buffer[index]; info = buffer[index + 1]; cvtS3mEffect (&command, &info); } if (channel != 255) { voice = voiceTable[patNo][channel]; (patternTable[voice])[i].note = note; (patternTable[voice])[i].sample = instrument; if (hasVolume) { (patternTable[voice])[i].command[0] = CMD_VOLUME; (patternTable[voice])[i].parm1[0] = volume; } else { (patternTable[voice])[i].command[0] = 0; (patternTable[voice])[i].parm1[0] = 0; } (patternTable[voice])[i].parm2[0] = 0; (patternTable[voice])[i].command[1] = command; (patternTable[voice])[i].parm1[1] = info; (patternTable[voice])[i].parm2[1] = 0; } } } } } unsigned int loadS3mIns (FILE * modFd, unsigned char *sampleInf, int *filePos) { unsigned int retVal; fread (sampleInf, 0x50, 1, modFd); (*filePos) += 0x50; retVal = INTEL_SHORT (sampleInf + 0x0e) * 16; if (strncmp ((char *)(sampleInf + 0x4c), "SCRS", 4) != 0) retVal = 0; return retVal; } int loadS3mModule (FILE ** modFd, struct songInfo *songChar, struct optionsInfo options, unsigned char *buffer, char *command) { extern Sample *samples[]; extern Sequencer *seq; int i; unsigned char header[0x60]; int nrSamples; int slen, npat, loadpat = 0; char mname[29]; unsigned short flags; unsigned char *rawData, *sampleInf; unsigned int currentSamp; struct listNode loadList, *currentList, *tmpList; struct listNode sampleList; unsigned short loopFlags = 0; int filePosition; unsigned char channelMap[32]; int maxLoaded = 0; unsigned short version; int reloadSamples = 0; int cutFactor = 1; loadList.next = loadList.prev = &loadList; sampleList.next = sampleList.prev = &sampleList; memcpy (header, buffer, HDR_SIZE); if (fread (header + HDR_SIZE, 1, sizeof (header) - HDR_SIZE, *modFd) != sizeof (header) - HDR_SIZE) { /* Short header */ return 0; } strncpy (mname, (char *)header, 28); mname[28] = '\0'; removeNoprint (mname); strcpy (songChar->name, mname); nrSamples = INTEL_SHORT (&header[0x22]); flags = INTEL_SHORT (&header[0x26]); songChar->nrSamples = nrSamples; songChar->nrChannels = 0; for (i = 0; i < 32; i++) channelMap[i] = 255; for (i = 0x40; i < (0x40 + 32); i++) if (header[i] <= 15) { channelMap[i - 0x40] = songChar->nrChannels; if (header[i] <= 7) songChar->panning[songChar->nrChannels] = 0; else songChar->panning[songChar->nrChannels] = 255; songChar->nrChannels++; } if (flags & 16) { /* amiga limits */ songChar->lowestNote = 48; songChar->highestNote = 83; } else { songChar->lowestNote = 12; songChar->highestNote = 107; } version = INTEL_SHORT (&header[0x28]); if (((version >> 12) & 0x0f) == 0x01) sprintf (songChar->desc, "ScreamTracker v%x.%02x", (version >> 8) & 0x0f, version & 0xff); else sprintf (songChar->desc, "S3M-Tracker v%x.%02x", (version >> 8) & 0x0f, version & 0xff); if ((version == 0x1300) || (flags & 64)) songChar->volOnZero = MY_TRUE; else songChar->volOnZero = MY_FALSE; songChar->globalVol = header[0x30]; if (songChar->globalVol > 0) songChar->globalVol = (songChar->globalVol * 4) - 1; else songChar->globalVol = 255; songChar->playSpeed = header[0x31]; if ((songChar->tempo = header[0x32]) <= 0x20) songChar->tempo = 125; songChar->volType = VOL_LINEAR; songChar->slideType = SLIDE_PERIOD_LIN; songChar->clockSpeed = 60; slen = INTEL_SHORT (&header[0x20]); npat = INTEL_SHORT (&header[0x24]); songChar->nrTracks = npat * songChar->nrChannels; songChar->songlength = slen; rawData = (unsigned char *) malloc (slen); fread (rawData, slen, 1, *modFd); for (i = 0; i < slen; i++) { tune[i] = rawData[i]; if (tune[i] == 255) tune[i] = ORDER_STOP; else if (tune[i] == 254) tune[i] = ORDER_SKIP; else if (tune[i] > loadpat) loadpat = tune[i]; } loadpat++; songChar->nrPatterns = loadpat; free (rawData); if (INTEL_SHORT (&header[0x2a]) == 2) loopFlags = WAVE_UNSIGNED; sampleInf = (unsigned char *) malloc (nrSamples * 0x50); rawData = (unsigned char *) malloc (nrSamples * 2); fread (rawData, nrSamples, 2, *modFd); for (i = 0; i < nrSamples; i++) if ((currentSamp = INTEL_SHORT (&rawData[i * 2]) * 16) > 0) insertInList (&loadList, 'I', i, currentSamp); free (rawData); rawData = (unsigned char *) malloc (npat * 2); fread (rawData, npat, 2, *modFd); for (i = 0; i < loadpat; i++) if ((currentSamp = INTEL_SHORT (&rawData[i * 2]) * 16) > 0) insertInList (&loadList, 'P', i, currentSamp); else insertInList(&loadList, 'E', i, 0xffff * 16); free (rawData); filePosition = 0x60 + slen + (nrSamples * 2) + (npat * 2); if (header[0x35] == 252) { rawData = (unsigned char *) malloc (32); fread (rawData, 32, 1, *modFd); filePosition += 32; for (i = 0; i < 32; i++) if ((channelMap[i] != 255) && (rawData[i] & 32)) songChar->panning[channelMap[i]] = (rawData[i] & 0x0f) * 17; } for (i = 0; i < nrSamples; i++) samples[i] = new S3M_sample; do { currentList = loadList.next; while (currentList != &loadList) { if (currentList->location < filePosition) currentList = currentList->next; else { if ((currentList->type == 'P') || (currentList->type == 'E')) { if (currentList->type == 'P') { catchup (*modFd, currentList->location, &filePosition); loadS3mPattern (*modFd, currentList->number, songChar, channelMap, &filePosition); } else loadS3mPattern(0, currentList->number, songChar, channelMap, &filePosition); if (options.compress) { if (currentList->number > maxLoaded) maxLoaded = currentList->number; for (i = 0; i < songChar->nrChannels; i++) voiceTable[currentList->number][i] = compressVoice ((maxLoaded + 1) * songChar->nrChannels, voiceTable[currentList->number][i], 64, songChar->nrChannels - i); } } else if (currentList->type == 'I') { catchup (*modFd, currentList->location, &filePosition); currentSamp = loadS3mIns (*modFd, sampleInf + (currentList->number * 0x50), &filePosition); if (currentSamp != 0) insertInList (&loadList, 'S', currentList->number, currentSamp); } else { insertInList(&sampleList, 'S', currentList->number, currentList->location); catchup (*modFd, currentList->location, &filePosition); i = samples[currentList->number]-> load(*seq, *modFd, currentList->number, cutFactor, &loopFlags, sampleInf + (currentList->number * 0x50)); if (i < 0) { filePosition -= i; reloadSamples = 1; } else filePosition += i; } (currentList->prev)->next = currentList->next; (currentList->next)->prev = currentList->prev; tmpList = currentList->next; free (currentList); currentList = tmpList; } } if ((reloadSamples) && (cutFactor < MAX_CUT)) { seq->resetSamples(); reloadSamples = 0; cutFactor++; currentList = sampleList.next; while (currentList != &sampleList) { insertInList(&loadList, 'S', currentList->number, currentList->location); tmpList = currentList->next; free(currentList); currentList = tmpList; } sampleList.prev = sampleList.next = &sampleList; } if (loadList.next != &loadList) { if (command == NULL) /* not compressed */ fseek (*modFd, 0, SEEK_SET); else { pclose (*modFd); *modFd = popen (command, "rb"); } filePosition = 0; } } while (loadList.next != &loadList); currentList = sampleList.next; while (currentList != &sampleList) { tmpList = currentList->next; free(currentList); currentList = tmpList; } free (sampleInf); return 1; } gmod-3.1.orig/load_ult.C100600 1750 1750 22213 6402577434 15145 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #include #ifdef USE_LOCAL #include "soundcard.h" #else #include #endif #include #include #include #include #include #include "commands.h" #include "defines.h" #include "structs.h" #include "globals.h" #include "protos.h" #include "ult.h" #define HEADER_SIZE 48 #define SAMPLE_SIZE 64 #define TRACK_SIZE 192 #define PATTERN_SIZE 64 #define NOTES_PER_TRACK 64 #define NR_CHANNELS 32 #define REPEAT_NOTE 0xfc /* note signifying a RLE pattern */ typedef struct { char title[33]; int version; int textLen; char *text; int nrSamples; int nrChannels; int nrPatterns; int order[256]; int panPositions[32]; int sampleOffset; int patternOffset; /* int eohOffset; */ } ultHeader; typedef struct { int a; } ultPattern; void convertUltEffect (u_long *, u_long *); void dumpUltHeader (ultHeader * h, struct songInfo *songChar) { sprintf (songChar->desc, "UltraTracker v%d", h->version); strcpy (songChar->name, h->title); if (h->version >= 2 && h->textLen) { songChar->comment = (char *) realloc (songChar->comment, h->textLen + 1); bzero (songChar->comment, h->textLen + 1); strncpy (songChar->comment, h->text, h->textLen); songChar->commentLineLen = 32; } } ultHeader getUltHeader (FILE * modFd, unsigned char *buffer, u_char **sampleData) { int i; u_char *rawData; u_char tmpchar; int totalSampleSize; ultHeader header; u_long sampleSize = SAMPLE_SIZE; /* read in first part of header */ rawData = (unsigned char *) malloc (HEADER_SIZE); memcpy (rawData, buffer, HDR_SIZE); /* HEADER_SIZE == HDR_SIZE ! */ /* fread (rawData, 1, HEADER_SIZE, modFd); */ memcpy (header.title, rawData + 15, 32); /* copy song title */ header.title[32] = 0; rawData[15] = 0; /* terminate "V00x" in magic number. * WARNING: may overwrite title, so copy * title first */ /* get format version: * 2 has header+47 defined as a textLen byte, * 3 has pan-position table after NOP byte */ header.version = atoi ((char *)(rawData + 12)); if (header.version >= 2) header.textLen = rawData[47] * 32; else header.textLen = 0; free (rawData); if (header.textLen) { header.text = (char *)malloc (header.textLen + 1); fread (header.text, 1, header.textLen, modFd); header.text[header.textLen] = 0; } else header.text = NULL; /* get samples */ fread (&tmpchar, 1, 1, modFd); header.nrSamples = tmpchar; header.sampleOffset = HEADER_SIZE + header.textLen + 1; /* ======== get sample data =============================== */ /* version 4 files have C2 frequency */ if (header.version >= 4) sampleSize += 2; totalSampleSize = sampleSize * header.nrSamples; *sampleData = (u_char *)malloc(totalSampleSize); fread (*sampleData, 1, totalSampleSize, modFd); rawData = (unsigned char *)malloc (258); fread (rawData, 1, 258, modFd); for (i = 0; i < 256; i++) header.order[i] = (unsigned) rawData[i]; /* these are stored as "last channel" and "last pattern", * so we add one to make it ordinal */ header.nrChannels = rawData[i++] + 1; header.nrPatterns = rawData[i] + 1; header.patternOffset = header.sampleOffset + header.nrSamples * sampleSize + 258; if (header.version >= 3) { fread (rawData, 1, header.nrChannels, modFd); for (i = 0; i < header.nrChannels; i++) header.panPositions[i] = rawData[i]; header.patternOffset += header.nrChannels; } else { for (i = 0; i < header.nrChannels; i++) header.panPositions[i] = 7; } free (rawData); return (header); } int loadUltModule (FILE * modFd, struct songInfo *songChar, struct optionsInfo options, unsigned char *buffer) { extern Sample *samples[]; extern Sequencer *seq; ultHeader header; int i; u_char *sampleData; int chani, notei, pati, absi; int voice; int sampleSize; #ifdef DEBUG int tn = 0; #endif songChar->lowestNote = 36; songChar->highestNote = 95; songChar->volOnZero = MY_FALSE; songChar->slideType = SLIDE_PERIOD_LIN; songChar->clockSpeed = 60; header = getUltHeader(modFd, buffer, &sampleData); songChar->nrSamples = header.nrSamples; songChar->nrPatterns = header.nrPatterns; /* ========== copy pattern order into tune[] ============== */ #ifdef SHOW_ORDER for (i = 0; i < 256 && header.order[i] != 255; i++) printf ("%03d%c", header.order[i], (i + 1) % 20 ? ' ' : '\n'); putchar ('\n'); #endif /* copy pattern orders into the tune area and find song length * NB: not in the docs, but apparently empty patterns are set * to 255; I'm assuming the first 255 ends the song. */ songChar->songlength = 0; for (i = 0; i < 256 && header.order[i] != 255; i++) { tune[i] = header.order[i]; songChar->songlength++; } songChar->nrTracks = header.nrPatterns * header.nrChannels; songChar->nrChannels = header.nrChannels; songChar->playSpeed = 6; songChar->tempo = 125; /* set panning */ for (i = 0; i < header.nrChannels; i++) songChar->panning[i] = (header.panPositions[i] & 0x0f) * 17; dumpUltHeader (&header, songChar); /* get patterns from file */ for (chani = 0; chani < header.nrChannels; chani++) { /* allocate memory for track */ for (pati = 0; pati < header.nrPatterns; pati++) patternTable[header.nrPatterns * chani + pati] = (struct noteInfo *) malloc (sizeof (struct noteInfo) * NOTES_PER_TRACK); for (absi = 0; absi < (NOTES_PER_TRACK * header.nrPatterns);) { unsigned char *p; u_char noteBytes[7]; int repeat; u_long param[2], note, effect[2], sample, param2; fread (noteBytes, 1, 5, modFd); if (noteBytes[0] == REPEAT_NOTE) { fread (noteBytes + 5, 1, 2, modFd); repeat = noteBytes[1]; if (repeat == 0) { repeat = 1; } p = noteBytes + 2; } else { repeat = 1; p = noteBytes; } note = p[0]; sample = p[1]; effect[0] = p[2] >> 4;/* are these switched? */ effect[1] = p[2] & 0xf; param[0] = INTEL_SHORT (p + 3) >> 8; param[1] = INTEL_SHORT (p + 3) & 0xff; convertUltEffect (&effect[0], ¶m[0]); convertUltEffect (&effect[1], ¶m[1]); /* special case for setoffset fine */ if ((effect[0] == CMD_SETOFFSET_1024) && (effect[1] == CMD_SETOFFSET_1024)) { effect[0] = CMD_SETOFFSET_FINE; effect[1] = 0; param2 = param[1]; param[1] = 0; } else param2 = 0; if (note) /* note->period */ { note = note + 3 * 12 - 1; /* shift up 3 octaves */ } for (i = 0; i < repeat && absi < (NOTES_PER_TRACK * header.nrPatterns); i++) { pati = absi / NOTES_PER_TRACK; notei = absi % NOTES_PER_TRACK; voice = header.nrPatterns * chani + pati; voiceTable[pati][chani] = voice; (patternTable[voice])[notei].note = note; (patternTable[voice])[notei].sample = sample; (patternTable[voice])[notei].command[0] = effect[0]; (patternTable[voice])[notei].parm1[0] = param[0]; (patternTable[voice])[notei].parm2[0] = param2; (patternTable[voice])[notei].command[1] = effect[1]; (patternTable[voice])[notei].parm1[1] = param[1]; (patternTable[voice])[notei].parm2[1] = 0; absi++; #ifdef DEBUG tn++; #endif } #ifdef DEBUG if (i != repeat) fprintf (stderr, "bail: i:%d repeat:%d\n", i, repeat); #endif } if (options.compress) for (pati = 0; pati < header.nrPatterns; pati++) voiceTable[pati][chani] = compressVoice (voiceTable[pati][chani], voiceTable[pati][chani], NOTES_PER_TRACK, 1); } sampleSize = SAMPLE_SIZE; if (header.version >= 4) sampleSize += 2; for (i = 0; i < header.nrSamples; i++) { samples[i] = new ULT_sample; samples[i]->load(*seq, modFd, i, 1, sampleData + i * sampleSize, &header.version); } /* all done */ free (sampleData); if (header.textLen) free (header.text); /* song text of size header.textLen */ if (header.version == 1) songChar->volType = VOL_LOG; else songChar->volType = VOL_LINEAR; return (1); } void convertUltEffect (u_long * effect, u_long * param) { switch (*effect) { case 0: /* arpeggio */ case 1: /* portamento up */ case 2: /* portamento down */ case 3: /* tone portamento */ case 4: /* vibrato */ case 7: /* tremolo */ case 0xa: /* volslide */ case 0xc: /* volume */ break; case 9: /* sample offset */ *effect = CMD_SETOFFSET_1024; break; case 0xd: /* pattern break */ *param = ((*param >> 4) & 0x0f) * 10 + (*param & 0x0f); break; case 0xe: *effect = (0xe0) + ((*param >> 4) & 0x0f); *param &= 0x0f; break; case 0xf: /* set speed */ *effect = CVT_MOD_SPEED (*param); break; case 5: /* special sample commands */ *effect = 0; *param = 0; break; case 0xb: /* set balance */ *effect = CMD_SET_PAN; *param = (*param & 0x0f) * 17; break; default: *effect = 0; *param = 0; } } gmod-3.1.orig/load_xm.C100600 1750 1750 22322 6402577434 14766 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #include #include #include #include #ifdef USE_LOCAL #include "soundcard.h" #else #include #endif #include "defines.h" #include "structs.h" #include "globals.h" #include "protos.h" #include "commands.h" #include "Sequencer.h" #include "xm.h" int catchup(FILE *, int, int *); static unsigned char xmEffectTab[] = {CMD_ARPEG, CMD_SLIDEUP, CMD_SLIDEDOWN, CMD_SLIDETO, /* 0 1 2 3 */ CMD_VIBRATO, CMD_PORTANDVOL, CMD_VIBRAANDVOL, CMD_TREMOLO, /* 4 5 6 7 */ CMD_SET_PAN, CMD_SETOFFSET, CMD_VOLSLIDE, CMD_JUMP, /* 8 9 A B */ CMD_VOLUME, CMD_BREAK, CMD_EXTENDED, CMD_SPEED, /* C D E F */ CMD_GLOBAL_VOL, CMD_GLOBALVOL_SLIDE, CMD_INFO, CMD_INFO, /* G H I J */ CMD_KEYOFF, CMD_SETENV_POS, CMD_INFO, CMD_INFO, /* K L M N */ CMD_INFO, CMD_PANSLIDE, CMD_INFO, CMD_RETRIGVOL, /* O P Q R */ CMD_INFO, CMD_TREMOR, CMD_INFO, CMD_INFO, /* S T U V */ CMD_INFO, CMD_XFINEPORTUP, CMD_INFO, CMD_INFO}; /* W X Y Z */ void loadXmPattern (FILE * modFd, int patNo, struct songInfo *songChar, int *filePos, unsigned char compress, u_short numBytes) { int i, j, voice; int hasNote, hasInstr, hasVolume, hasCommand, hasInfo, index; u_char note, instrument, volume, command, info, volCommand; u_char buffer[100]; for (i = 0; i < songChar->nrChannels; i++) { voiceTable[patNo][i] = (patNo * songChar->nrChannels) + i; patternTable[voiceTable[patNo][i]] = (struct noteInfo *) calloc (1, sizeof (struct noteInfo) * patternLen[patNo]); } if (numBytes > 0) { for (j = 0; j < patternLen[patNo]; j++) { for (i = 0; i < songChar->nrChannels; i++) { hasNote = 0; hasInstr = 0; hasVolume = 0; hasCommand = 0; hasInfo = 0; info = 0; index = 0; voice = voiceTable[patNo][i]; note = instrument = volume = command = info = 0; fread (buffer, 1, 1, modFd); *filePos += 1; if ((buffer[0] & 0x80) > 0) { if (buffer[0] & 0x01) hasNote = 1; if (buffer[0] & 0x02) hasInstr = 1; if (buffer[0] & 0x04) hasVolume = 1; if (buffer[0] & 0x08) hasCommand = 1; if (buffer[0] & 0x10) hasInfo = 1; fread (buffer, 1, hasNote + hasInstr + hasVolume + hasCommand + hasInfo, modFd); *filePos += (hasNote + hasInstr + hasVolume + hasCommand + hasInfo); } else { fread (buffer + 1, 1, 4, modFd); *filePos += 4; hasNote = hasInstr = hasVolume = hasCommand = hasInfo = 1; } if (hasNote) { note = buffer[index++] + 11; if (note >= 108) note = NOTE_STOP; } if (hasInstr) instrument = buffer[index++]; if (hasVolume) { volume = buffer[index++]; switch (volume & 0xf0) { case 0x10: /* set volume */ case 0x20: case 0x30: case 0x40: case 0x50: if (volume <= 0x50) { volume -= 0x10; if (volume > 0) volume = volume * 4 - 1; volCommand = CMD_VOLUME; } else hasVolume = 0; break; case 0x60: /* volslide down */ volume &= 0x0f; volCommand = CMD_VOLSLIDE; break; case 0x70: /* volslide up */ volume = (volume << 4) & 0xf0; volCommand = CMD_VOLSLIDE; break; case 0x80: /* fine volside down */ volume &= 0x0f; volCommand = CMD_FINEVOLDOWN; break; case 0x90: /* fine volside up */ volume &= 0x0f; volCommand = CMD_FINEVOLUP; break; case 0xa0: /* vibrato speed */ volume &= 0x0f; volCommand = CMD_VIBRASPEED; break; case 0xb0: /* vibrato */ volume &= 0x0f; volCommand = CMD_VIBRATO; break; case 0xc0: /* set panning */ volume = (volume & 0x0f) * 17; volCommand = CMD_SET_PAN; break; case 0xd0: // panning slide left volume &= 0x0f; volCommand = CMD_PANSLIDE; break; case 0xe0: // panning slide right volume = (volume << 4) & 0xf0; volCommand = CMD_PANSLIDE; break; case 0xf0: /* tone portamento */ volume = (volume & 0x0f) << 4; volCommand = CMD_SLIDETO; break; default: /* unsupported */ hasVolume = 0; } } if (hasCommand) { command = buffer[index++]; if (command < 36) command = xmEffectTab[command]; else command = CMD_INFO; } if (hasInfo) info = buffer[index++]; switch (command) { //case CMD_SET_PAN: //info = (info >> 4) & 0x0f; //break; case CMD_SPEED: command = CVT_MOD_SPEED (info); break; case CMD_VOLUME: if (info > 0) info = (info * 4) - 1; break; case CMD_BREAK: info = ((info >> 4) & 0x0f) * 10 + (info & 0x0f); break; case CMD_EXTENDED: command = ((CMD_EXTENDED << 4) & 0xf0) + ((info >> 4) & 0x0f); info &= 0x0f; break; case CMD_KEYOFF: note = NOTE_STOP; if (hasInfo) command = CMD_INFO; else command = 0; break; case CMD_XFINEPORTUP: if ((info & 0xf0) == 0x20) command = CMD_XFINEPORTDOWN; info &= 0x0f; } (patternTable[voice])[j].note = note; (patternTable[voice])[j].sample = instrument; if (hasVolume) { (patternTable[voice])[j].command[0] = volCommand; (patternTable[voice])[j].parm1[0] = volume; } (patternTable[voice])[j].command[1] = command; (patternTable[voice])[j].parm1[1] = info; } } } if (compress) { for (i = 0; i < songChar->nrChannels; i++) { for (j = 0; (j < patNo) && (voiceTable[patNo][i] == (patNo * songChar->nrChannels + i)); j++) if (patternLen[j] == patternLen[patNo]) voiceTable[patNo][i] = compressVoice ((j + 1) * songChar->nrChannels, voiceTable[patNo][i], patternLen[patNo], 1, j * songChar->nrChannels); if (voiceTable[patNo][i] == (patNo * songChar->nrChannels + i)) voiceTable[patNo][i] = compressVoice(voiceTable[patNo][i], voiceTable[patNo][i], patternLen[patNo], 1, (patNo * songChar->nrChannels)); } } } void loadXmSamples(FILE ** modFd, int nrSamples, int *filePos, char *command) { extern Sample *samples[]; extern Sequencer *seq; int cutFactor = 1; int i; int oldPos = *filePos; for (i = 0; i < nrSamples; i++) samples[i] = new XM_sample; do { i = 0; while (i < nrSamples) { if ((samples[i]->load(*seq, *modFd, i, cutFactor, periodTable, filePos) < 0) && (cutFactor < MAX_CUT)) { cutFactor++; i = nrSamples + 1; // cause repeat of outer loop seq->resetSamples(); if (!command) { fseek(*modFd, oldPos, SEEK_SET); *filePos = oldPos; } else { pclose(*modFd); *modFd = popen(command, "rb"); *filePos = 0; catchup(*modFd, oldPos, filePos); } } else i++; } } while (i != nrSamples); } int loadXmModule (FILE ** modFd, struct songInfo *songChar, struct optionsInfo options, unsigned char *buffer, char *command) { unsigned char header[336]; char mname[21]; int i; unsigned int maxpat; long headerSize; int filePos = 336, oldPos; memcpy (header, buffer, HDR_SIZE); if (fread (header + HDR_SIZE, 1, sizeof (header) - HDR_SIZE, *modFd) != sizeof (header) - HDR_SIZE) return 0; strncpy (mname, (char *)(header + 17), 20); mname[20] = '\0'; removeNoprint (mname); strcpy (songChar->name, mname); songChar->nrChannels = INTEL_SHORT(header + 68); songChar->lowestNote = 11; songChar->highestNote = 107; songChar->nrSamples = INTEL_SHORT(header + 72); songChar->playSpeed = INTEL_SHORT(header + 76); songChar->tempo = INTEL_SHORT(header + 78); songChar->volType = VOL_LINEAR; songChar->volOnZero = MY_FALSE; songChar->clockSpeed = 60; songChar->type = MODULE_XM; sprintf(songChar->desc, "XM"); if (INTEL_SHORT(header + 74) & 0x01) songChar->slideType = SLIDE_NOTE_LIN; else songChar->slideType = SLIDE_PERIOD_LIN; for (i = 0; i < songChar->nrChannels; i++) songChar->panning[i] = 128; maxpat = songChar->nrPatterns = INTEL_SHORT(header + 70); for (i = 0; i < 256; i++) { tune[i] = BYTE(header + 80 + i); if (tune[i] >= maxpat) { maxpat = tune[i] + 1; loadXmPattern(*modFd, tune[i], songChar, &filePos, options.compress, 0); } } songChar->nrTracks = songChar->nrPatterns * songChar->nrChannels; songChar->songlength = INTEL_SHORT(header + 64); headerSize = INTEL_LONG(header + 60); catchup (*modFd, filePos + (headerSize - 276), &filePos); for (i = 0; i < songChar->nrPatterns; i++) { fread (header, 1, 9, *modFd); filePos += 9; headerSize = INTEL_LONG(header); catchup (*modFd, filePos + (headerSize - 9), &filePos); patternLen[i] = INTEL_SHORT(header + 5); oldPos = filePos; loadXmPattern (*modFd, i, songChar, &filePos, options.compress, INTEL_SHORT(header + 7)); catchup (*modFd, oldPos + INTEL_SHORT(header + 7), &filePos); } songChar->nrPatterns = maxpat; loadXmSamples(modFd, songChar->nrSamples, &filePos, command); return 1; } gmod-3.1.orig/misc.C100600 1750 1750 2546 6402577434 14264 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #include #include /* for "free" */ #include /* for "isprint */ #include /* for "pause" */ #ifdef USE_LOCAL #include "soundcard.h" #else #include #endif #include #include "defines.h" #include "structs.h" #include "globals.h" #include "Sample.h" int panning (int ch) { static int panningTab[] = {0, 255, 255, 0}; return panningTab[ch % 4]; } double lastSync; double lastDump; void syncTime () { SEQ_DECLAREBUF(); if (nextTime > thisTime) { SEQ_WAIT_TIME ((long) nextTime); thisTime = nextTime; } } void freePatterns () { int i; extern Sample *samples[]; for (i = 0; i < MAX_PATTERN * MAX_TRACK; i++) if (patternTable[i] != NULL) { free (patternTable[i]); patternTable[i] = NULL; } for (i = 0; i < MAX_SAMPLES; i++) if (samples[i]) { delete samples[i]; samples[i] = 0; } } void removeNoprint (char *string) { char *str2 = string; /* remove non-printable characters */ while (*str2 != '\0') { if (!isprint (*str2)) *str2 = '?'; str2++; } #if 0 /* remove trailing blanks */ str2--; while ((str2 >= string) && (*str2 == ' ')) str2--; *(str2 + 1) = '\0'; #endif } gmod-3.1.orig/mod.C100600 1750 1750 2523 6402577434 14103 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #include #include #include "mod.h" #include "Sequencer.h" void removeNoprint(char *); int MOD_sample::load(Sequencer &seq, FILE * modFd, int sampleNo, int cutFactor, void *header, void *pf) { int bytesRead = 0; int rc = -EINVAL; unsigned char ntscflag = *((unsigned char *)pf); unsigned char *buf = (unsigned char *)header; sampleNum_ = sampleNo; length_ = REV_SHORT(buf + 22) * 2; loopStart = REV_SHORT(buf + 26) * 2; loopEnd = loopStart + (REV_SHORT(buf + 28) * 2); #if 0 if (loopStart > length_) loopStart = 0; if (loopEnd <= loopStart) loopEnd = loopStart + 2; #endif ok_ = 0; if (loopEnd > 2) mode_ = WAVE_LOOPING; else mode_ = 0; strncpy(name_, buf, 22); name_[22] = '\0'; removeNoprint(name_); baseNote_ = C2FREQ; /* Middle C */ baseFreq_ = ((ntscflag == 1) ? NTSC_RATE : PAL_RATE); volume_ = BYTE(buf + 25); if (volume_ > 0) volume_ = (volume_ * 4) - 1; else volume_ = 0; finetune_ = BYTE(buf + 24) & 0x0f; if (finetune_ <= 7) finetune_ *= 12.5; else finetune_ = (short)(12.5 * (finetune_ - 16)); if (length_ > 0) rc = seq.patchLoad(modFd, sampleNo, *this, bytesRead, cutFactor); if (!rc) ok_ = 1; return rc; } gmod-3.1.orig/mod.h100600 1750 1750 404 6402577434 14124 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #ifndef modH #define modH #include "Sample.h" class MOD_sample : public Sample { public: int load(Sequencer &, FILE *, int, int, void *, void *); }; #endif gmod-3.1.orig/contrib/ 40700 1750 1750 0 6304142450 14542 5ustar neurochpneurochpgmod-3.1.orig/contrib/README100600 1750 1750 236 6212374056 15511 0ustar neurochpneurochpThis directory contains contributed patches which have not yet become part of the "official" gmod source. Use them at your own risk. -- Andrew Robinson gmod-3.1.orig/contrib/fix_length.patch100600 1750 1750 12152 6212374056 20041 0ustar neurochpneurochpHere's a context-diff patch for gmod 2.0.1 which adds in the -C option. It checks (uncompressed) songs to see if their length matches what gmod read in. If the file is longer (has garbage tacked onto the end), the program moves the song to .old, then strips off the garbage. The -C option is really only useful for cleaning up stuff that you've ripped. --Alexander Mohr --begin included file-- *** gmod.c Sat Apr 8 07:17:43 1995 --- ../ngmod/gmod.c Sun Apr 23 12:02:19 1995 *************** *** 104,113 **** struct song_info song_char; #ifdef USE_X struct options_info options = ! {255, 0, 1, 1, 0, 0, 0, 255, 0, 0, 100, 0}; #else struct options_info options = ! {255, 0, 0, 1, 1, 0, 0, 0, 255, 0, 0, 100, 0}; #endif struct options_info saved_opt; #ifndef USE_X --- 104,113 ---- struct song_info song_char; #ifdef USE_X struct options_info options = ! {255, 0, 1, 1, 0, 0, 0, 255, 0, 0, 100, 0, 0}; #else struct options_info options = ! {255, 0, 0, 1, 1, 0, 0, 0, 255, 0, 0, 100, 0, 0}; #endif struct options_info saved_opt; #ifndef USE_X *** load_mod.c Sat Apr 8 07:17:43 1995 --- ../ngmod/load_mod.c Sun Apr 23 12:41:47 1995 *************** *** 570,584 **** else ret_val = load_mod_module (mod_fd, name, song_char, options, header); if (compressed == MY_FALSE) ! fclose (mod_fd); else { free (command); free (fixedname); /* added by Peter Federighi */ pclose (mod_fd); } ! if (!ret_val) free_patterns (0); else --- 572,658 ---- else ret_val = load_mod_module (mod_fd, name, song_char, options, header); + if (compressed == MY_FALSE) ! { ! if ( feof( mod_fd ) ) ! { ! fprintf( stderr, "Error: EOF Encountered.\n" ); ! fclose( mod_fd ); ! } ! else if ( options.check_only ) /* Added by Alexander Mohr */ ! { ! int true_length; ! int is_eof; ! ! true_length = ftell( mod_fd ); ! fgetc( mod_fd ); ! is_eof = feof( mod_fd ); ! fprintf( stdout, "%s Length: %7d\n", ! is_eof ? "Check Passed" : "Check FAILED", ! true_length ); ! fclose (mod_fd); ! if ( !is_eof ) ! { ! char tmp_name[400]; ! printf( "Attempting to fix %s...\n", name ); ! sprintf( tmp_name, "%s.old", name ); ! if ( link( name, tmp_name ) != 0 ) ! { ! printf( "Unable to link %s to %s.\n", name, tmp_name ); ! } ! else if ( unlink( name ) != 0 ) ! { ! printf( "Unable to unlink %s.\n", name ); ! } ! else ! { ! unsigned char *storage; ! storage = (unsigned char *)malloc( true_length * sizeof( unsigned char ) ); ! if ((mod_fd = fopen (tmp_name, "rb")) == NULL) ! { ! printf( "Unable to open %s.\n", tmp_name ); ! } ! else if ( fread( storage, sizeof( unsigned char ), true_length, mod_fd ) ! != true_length ) ! { ! printf( "Unable to read %d from %s.\n", true_length, tmp_name ); ! } ! else ! { ! fclose( mod_fd ); ! if ((mod_fd = fopen (name, "wb")) == NULL) ! { ! printf( "Unable to open %s for writing.\n", name ); ! } ! else if ( fwrite( storage, sizeof( unsigned char ), true_length, mod_fd ) ! != true_length ) ! { ! printf( "Unable to write %d to %s.\n", true_length, name ); ! } ! else ! { ! fclose( mod_fd ); ! printf( "%s successfully fixed.\n", name ); ! } ! } ! free( storage ); ! } ! } ! ret_val = 0; ! } ! else ! { ! fclose (mod_fd); ! } ! } else { free (command); free (fixedname); /* added by Peter Federighi */ pclose (mod_fd); } ! if (!ret_val) free_patterns (0); else *** parse.c Sat Apr 8 07:17:44 1995 --- ../ngmod/parse.c Sun Apr 23 11:59:16 1995 *************** *** 26,34 **** int option, num_err = 0; #ifdef USE_X ! while ((option = getopt (argc, argv, "chP:rRv:")) != -1) #else ! while ((option = getopt (argc, argv, "bcehlm:pP:qrRsv:xz5")) != -1) #endif switch (option) { --- 26,34 ---- int option, num_err = 0; #ifdef USE_X ! while ((option = getopt (argc, argv, "cChP:rRv:")) != -1) #else ! while ((option = getopt (argc, argv, "bcCehlm:pP:qrRsv:xz5")) != -1) #endif switch (option) { *************** *** 42,47 **** --- 42,48 ---- printf (" -b DISABLE BPM tempos\n"); #endif printf (" -c DISABLE compression of modules in memory\n"); + printf (" -C Check and fix mod length (doesn't play songs)\n"); #ifndef USE_X printf (" -e Show empty samples (for messages)\n"); #endif *************** *** 74,79 **** --- 75,83 ---- break; case 'c': options->compress = 0; + break; + case 'C': + options->check_only = 1; break; case 'e': options->show_empty_samples = 1; *** structs.h Sat Apr 8 07:17:44 1995 --- ../ngmod/structs.h Sun Apr 23 12:02:23 1995 *************** *** 121,126 **** --- 121,127 ---- unsigned char randomize; signed char pan_factor; unsigned char use_50hz; + unsigned char check_only; }; struct sample_info --end-- gmod-3.1.orig/contrib/zip.patch100600 1750 1750 2347 6304142426 16475 0ustar neurochpneurochpContributed by Erwin Andreasen: The modification I'd suggest is to make unzip unzip only s3m/mod/mtm/ult/xm files from the zip archives. --- load_mod.c.orig Sat Feb 1 15:25:15 1997 +++ load_mod.c Sat Feb 1 20:06:27 1997 @@ -569,8 +569,8 @@ load_module (char *name, struct song_inf break; case ZIPCOMPRESSED: command = (char *) malloc (strlen (fixedname) + - strlen (ZIPDECOMP_PGM) + 1); - sprintf (command, "%s%s", ZIPDECOMP_PGM, fixedname); + strlen (ZIPDECOMP_PGM) + strlen(ZIPDECOMP_PARAMS) + 1); + sprintf (command, "%s%s%s", ZIPDECOMP_PGM, fixedname, ZIPDECOMP_PARAMS); break; default: break; --- defines.h.orig Sat Feb 1 14:30:52 1997 +++ defines.h Sat Feb 1 16:01:42 1997 @@ -141,7 +141,8 @@ /* modified and added to by Peter Federighi */ #define GDECOMP_PGM "gunzip -c " /* program for decompression */ #define LHADECOMP_PGM "lha pq " /* lha decompression */ -#define ZIPDECOMP_PGM "unzip -p " /* zip decompression */ +#define ZIPDECOMP_PGM "unzip -qq -C -p " /* zip decompression: Quiet, Case Insensitive, Pipe */ +#define ZIPDECOMP_PARAMS " *s3m *mod *ult *669 *xm *mtm 2> /dev/null" #define GCOMPRESSED 2 /* start with 2 since FALSE */ #define LHACOMPRESSED 3 /* and TRUE take up 0 and 1 */ gmod-3.1.orig/mtm.C100600 1750 1750 2464 6402577434 14125 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #include #include "mtm.h" #include "Sequencer.h" void removeNoprint(char *); int MTM_sample::load (Sequencer &seq, FILE * modFd, int sampleNo, int cutFactor, void *header, void *) { #define MTM_ATTRIBUTE_16BIT 1 int bytesRead; unsigned char *buf = (unsigned char *)header; sampleNum_ = sampleNo; mode_ = WAVE_UNSIGNED; ok_ = 0; memcpy(name_, buf, 22); name_[22] = '\0'; removeNoprint(name_); length_ = INTEL_LONG(buf + 22); loopStart = INTEL_LONG(buf + 26); loopEnd = INTEL_LONG(buf + 30); finetune_ = *(buf + 34) & 0x0f; if (finetune_ <= 7) finetune_ *= 12.5; else finetune_ = (short)(12.5 * (finetune_ - 16)); volume_ = *(buf + 35); if (volume_ > 0) volume_ = volume_ * 4 - 1; if (*(buf + 36) & MTM_ATTRIBUTE_16BIT) mode_ |= WAVE_16_BITS; /* found a mod with lots of samples with loopEnds of 2. played fine * without them. should I check that here? */ if (loopEnd > 2) mode_ |= WAVE_LOOPING; #if 0 else loopEnd = loopStart = 0; #endif baseNote_ = C2FREQ; /* was 261630 - Middle C */ baseFreq_ = NTSC_RATE; if (length_ > 0) ok_ = !seq.patchLoad(modFd, sampleNo, *this, bytesRead, cutFactor); return bytesRead; } gmod-3.1.orig/mtm.h100600 1750 1750 404 6402577434 14142 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #ifndef mtmH #define mtmH #include "Sample.h" class MTM_sample : public Sample { public: int load(Sequencer &, FILE *, int, int, void *, void *); }; #endif gmod-3.1.orig/parse.C100600 1750 1750 10005 6402577434 14450 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #include #include #include #include #include "defines.h" #include "structs.h" #include "globals.h" int parseArgs (int argc, char *argv[], struct optionsInfo *options) { extern char *optarg; extern int optind; int option, numErr = 0; #ifdef USE_X while ((option = getopt (argc, argv, "chP:rRv:")) != -1) #else #ifdef USE_NCURSES while ((option = getopt (argc, argv, "bchlm:MnP:qrRsv:xz5")) != -1) #else while ((option = getopt (argc, argv, "bcehlm:MnP:qrRsv:xz5")) != -1) #endif #endif switch (option) { case 'h': printf (HEADING); printf ("Original source (C) Hannu Savolainen, 1993\n"); printf ("MTM/ULT loaders by Robert Sanders\n"); printf ("Continuing development by Andrew J. Robinson\n\n"); printf ("Usage: %s [options] [modfile . . .]\n\n", argv[0]); printf ("Options:\n"); #ifndef USE_X printf (" -b DISABLE BPM tempos\n"); #endif printf (" -c DISABLE compression of modules in memory\n"); #ifndef USE_X #ifndef USE_NCURSES printf (" -e Show empty samples (for messages)\n"); #endif #endif printf (" -h Help\n"); #ifndef USE_X printf (" -l Break infinite loops\n"); printf (" -m x Use mixer number x (0 - 15)\n"); printf (" -M Check magic numbers\n"); printf (" -n Use NTSC sample timing\n"); #endif printf (" -P Set panning factor to x percent (-100 to 100)\n"); #ifndef USE_X printf (" -q Quiet mode\n"); #endif printf (" -r Infinitely repeat module\n"); printf (" -R Randomize module play order\n"); #ifndef USE_X printf (" -s Ignore speed 0 commands\n"); #endif printf (" -v x Set volume to x (0 - 255)\n"); #ifndef USE_X printf (" -x Extend octaves\n"); printf (" -z Background mode\n"); printf (" -5 Use 50 Hz clock frequency\n\n"); printf ("One or more MultiTracker, UltraTracker, MOD (4/6/8 channel), S3M,\n"); printf ("669, or XM files should be listed on the command line.\n"); #endif exit (ERR_NOERROR); #ifndef USE_X case 'b': options->bpmTempos = 0; break; #endif case 'c': options->compress = 0; break; #ifndef USE_X #ifndef USE_NCURSES case 'e': options->showEmptySamples = 1; break; #endif #endif #ifndef USE_X case 'l': options->loopBreaker = 1; /* override repeat */ options->repeat = 0; break; case 'm': option = atoi (optarg); if ((option > 15) || (option < 0)) { printf ("%s: mixer number must be between 0 and 15.\n", argv[0]); numErr = 1; } else options->mixer = option; break; case 'M': options->checkMagic = 1; break; case 'n': options->ntsc = 1; break; #endif case 'P': option = atoi (optarg); if ((option > 100) || (option < -100)) { printf ("%s: panning factor must be between -100 and 100.\n", argv[0]); numErr = 1; } else options->panFactor = option; break; #ifndef USE_X case 'q': fclose (stdout); fclose (stderr); break; #endif case 'r': options->repeat = 1; /* override loop breaker */ #ifndef USE_X options->loopBreaker = 0; #endif break; case 'R': options->randomize = 1; break; #ifndef USE_X case 's': options->tolerant = 1; break; #endif case 'v': option = atoi (optarg); if ((option > 255) || (option < 0)) { printf ("%s: volume must be between 0 and 255.\n", argv[0]); numErr = 1; } else options->mainVolume = option; break; #ifndef USE_X case 'x': options->extendOct = OCTAVE_EXTEND; break; case 'z': background = 1; break; case '5': options->use_50hz = 1; break; #endif case '?': numErr = 1; break; case ':': numErr = 1; break; } if (numErr) { printf ("\nUsage: %s [options] modfile . . .\n", argv[0]); printf ("Use %s -h for help.\n\n", argv[0]); exit (ERR_BADARGS); } return optind; } gmod-3.1.orig/play_mod.C100600 1750 1750 13416 6402577434 15153 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #include #include #include #include #include #ifdef USE_LOCAL #include "soundcard.h" #else #include #endif #include #include #include #include "defines.h" #include "structs.h" #include "globals.h" #include "protos.h" #ifdef USE_X #include "TopShell.h" #endif #include "Sequencer.h" int position; int jumpToPos; struct optionsInfo pOptions; struct songInfo *pSongChar; char played[MAX_POSITION]; struct effectInfo effects; int patStart; double savedTd; int savedTpd; int savedPosition; void playModule (int startPosition, struct songInfo *songCharX, struct optionsInfo optionsX, int startDelay) { SEQ_DECLAREBUF(); int i; extern Sequencer *seq; extern Sample *samples[]; pOptions = optionsX; pSongChar = songCharX; memset(&effects, 0, sizeof(effects)); initVoices(); for (i = 0; i < MAX_SAMPLES && !samples[i]; i++) ; seq->numVoices(pSongChar->nrChannels, pSongChar->volType, samples[i]); seq->panFactor(pOptions.panFactor); #ifdef USE_X seq->writeEnabled(TRUE); #endif if (startPosition == 0) for (i = 0; i < pSongChar->songlength; i++) played[i] = MY_FALSE; SEQ_START_TIMER (); for (i = 0; i < pSongChar->nrChannels; i++) { seq->mainVolume(pOptions.mainVolume * pSongChar->globalVol / 255); seq->pan(i, pSongChar->panning[i]); } nextTime = 0.0; if (startPosition == 0) { TICKS_PER_DIVISION (pSongChar->playSpeed); TEMPO (pSongChar->tempo, pSongChar->clockSpeed); } else { ticksPerDivision = savedTpd; tickDuration = savedTd; } thisTime = 0.0; if (startPosition == 0) nextTime += startDelay; // was tickDuration syncTime (); position = startPosition; jumpToPos = 0; patStart = 0; playNextPosition(); } int doRepeat() { if ((position >= pSongChar->songlength) && (pOptions.repeat)) { playModule(0, pSongChar, pOptions, 0); return (0); } return (position >= pSongChar->songlength); } int playNextPosition() { SEQ_DECLAREBUF(); int extraTicks; int i; int voice; int tick, pattern, channel, pos, goTo; extern Sequencer *seq; savedPosition = 0; if (position >= pSongChar->songlength) return (doRepeat()); if ((played[position] > MY_FALSE) && !(jumpToPos & MOVE_LOOP)) { #ifdef USE_X syncTime (); SEQ_ECHO_BACK (ECHO_LOOP); #else if (pOptions.loopBreaker == 1) { position = pSongChar->songlength; return (doRepeat()); } else #endif for (i = 0; i < pSongChar->songlength; i++) played[i] = MY_FALSE; } played[position] = MY_TRUE; // queued pos = tune[position]; if (pos == ORDER_STOP) { position = pSongChar->songlength; return (doRepeat()); } else if ((pos == ORDER_SKIP) || (pos >= pSongChar->nrPatterns)) { position++; return (doRepeat()); } syncTime (); SEQ_ECHO_BACK ((((unsigned int) position << 16) & 0x00ff0000) | (((unsigned int) pos << 8) & 0x0000ff00) | ECHO_MESSAGE); if (patternTempo[pos]) { if (patternTempo[pos] < 32) TICKS_PER_DIVISION(patternTempo[pos]); else TEMPO(patternTempo[pos], pSongChar->clockSpeed); } jumpToPos = 0; for (pattern = patStart; pattern < patternLen[pos] && jumpToPos == 0; pattern++) { #ifdef USE_X syncTime (); SEQ_ECHO_BACK(((unsigned int)pattern << 8) | ECHO_PATTERN); #endif for (channel = 0; channel < pSongChar->nrChannels; channel++) { voice = voiceTable[pos][channel]; if ((goTo = playNote (channel, position, pattern, &((patternTable[voice])[pattern]), pSongChar, &effects, &pOptions)) != 0) jumpToPos |= goTo; } /* nextTime += tickDuration; */ for (extraTicks = 0; extraTicks <= effects.delayNotes; extraTicks++) { for (tick = 0; tick < ticksPerDivision; tick++) { int didPreUpdate = 0; for (channel = 0; channel < pSongChar->nrChannels; channel++) didPreUpdate |= seq->doTick(channel, tick, pSongChar); if (didPreUpdate) nextTime += (tickDuration > 1 ? 1 : tickDuration); for (channel = 0; channel < pSongChar->nrChannels; channel++) seq->doUpdates(channel); if (didPreUpdate) { if (tickDuration > 1) nextTime += tickDuration - 1; } else nextTime += tickDuration; } } effects.delayNotes = 0; #ifndef USE_X if (stopFlag) jumpToPos = MOVE_EXIT; #endif } /* pattern */ patStart = 0; if (jumpToPos & MOVE_LOOP) { patStart = effects.pattern; effects.pattern = 0; position -= 1; } if (jumpToPos & MOVE_JUMP) { patStart = effects.pattern; position = effects.position - 1; } if (jumpToPos & MOVE_BREAK) { patStart = effects.pattern; } if (jumpToPos & MOVE_EXIT) { savedPosition = position; position = pSongChar->songlength - 1; } /* } if (pOptions.repeat) startPosition = 0; } while (pOptions.repeat #ifndef USE_X && !stopFlag #endif ); */ position++; //return (position >= pSongChar->songlength); return (doRepeat()); } int endModule(unsigned char lstopFlag) { #ifdef USE_X extern TopShell *topShell; // extern TrackShell *trackShell; #endif int i; if (lstopFlag != STOP_FORWBACK) freePatterns (); else { savedTpd = ticksPerDivision; savedTd = tickDuration; // prevent a loop from being detected for (i = 0; i < pSongChar->songlength; i++) if (played[i] == MY_TRUE) played[i] = 0; // prevent loop detection by "rewind" played[actualPos] = 0; } #ifdef USE_X topShell->setPosition(-1); #endif return (savedPosition); } gmod-3.1.orig/play_note.C100600 1750 1750 15366 6402577434 15347 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #ifdef USE_LOCAL #include "soundcard.h" #else #include #endif #include #include "commands.h" #include "defines.h" #include "structs.h" #include "globals.h" #include "protos.h" #include "Sample.h" #include "Sequencer.h" static unsigned char s3mExtendTab[] = {CMD_INFO, CMD_GLISSANDO, CMD_FINETUNE, CMD_VIBRA_WAVE, /* S0 S1 S2 S3 */ CMD_TREMOLO_WAVE, CMD_INFO, CMD_INFO, CMD_INFO, /* S4 S5 S6 S7 */ CMD_SET_PAN, CMD_INFO, CMD_INFO, CMD_PATTERN_LOOP, /* S8 S9 SA SB */ CMD_CUT_NOTE, CMD_DELAY_NOTE, CMD_DELAY_PAT, CMD_INFO}; /* SC SD SE SF */ void cvtXmPlay (int channel, unsigned char *effect, unsigned char *parm) { switch (*effect) { case CMD_SLIDEUP: case CMD_SLIDEDOWN: case CMD_SLIDETO: case CMD_VIBRATO: case CMD_PORTANDVOL: case CMD_VIBRAANDVOL: case CMD_TREMOLO: case CMD_VOLSLIDE: case CMD_FINEVOLUP: case CMD_FINEVOLDOWN: case CMD_PANSLIDE: case CMD_RETRIGVOL: case CMD_GLOBALVOL_SLIDE: case CMD_XFINEPORTUP: case CMD_XFINEPORTDOWN: if (*parm == 0) *parm = voices[channel].lastInfo; else voices[channel].lastInfo = *parm; break; case CMD_GLOBAL_VOL: if (*parm) voices[channel].lastInfo = *parm; // the following check is needed because *parm is an unsigned char if (*parm >= 64) *parm = 255; else if (*parm) *parm = (*parm * 4) - 1; break; default: if (*parm != 0) voices[channel].lastInfo = *parm; if (*effect == CMD_INFO) { *effect = 0; *parm = 0; } } } void cvtS3mPlay (int channel, unsigned char *effect, unsigned char *parm) { switch (*effect) { case 0: break; case CMD_VOLSLIDE: if (*parm == 0) *parm = voices[channel].lastInfo; else voices[channel].lastInfo = *parm; if ((*parm > 0xf0) && (*parm < 0xff)) { *effect = CMD_FINEVOLDOWN; *parm &= 0x0f; } else if (((*parm & 0x0f) == 0x0f) && ((*parm & 0xf0) > 0)) { *effect = CMD_FINEVOLUP; *parm = (*parm >> 4) & 0x0f; } // else if (((*parm & 0x0f) != 0) && ((*parm & 0xf0) != 0)) else if (*parm & 0x0f) // slide down overrides slide up *parm &= 0x0f; break; case CMD_PORTANDVOL: case CMD_VIBRAANDVOL: if (*parm == 0) *parm = voices[channel].lastInfo; else voices[channel].lastInfo = *parm; if (*parm & 0x0f) *parm &= 0x0f; break; case CMD_SLIDEUP: if (*parm == 0) *parm = voices[channel].lastInfo; else voices[channel].lastInfo = *parm; if (*parm >= 0xf0) { *effect = CMD_FINEPORTUP; *parm &= 0x0f; } else if (*parm >= 0xe0) { *effect = CMD_XFINEPORTUP; *parm &= 0x0f; } break; case CMD_SLIDEDOWN: if (*parm == 0) *parm = voices[channel].lastInfo; else voices[channel].lastInfo = *parm; if (*parm >= 0xf0) { *effect = CMD_FINEPORTDOWN; *parm &= 0x0f; } else if (*parm >= 0xe0) { *effect = CMD_XFINEPORTDOWN; *parm &= 0x0f; } break; case CMD_ARPEG2: if (*parm == 0) *parm = voices[channel].lastInfo; else voices[channel].lastInfo = *parm; *effect = CMD_ARPEG; break; case CMD_TREMOR: case CMD_SLIDETO: case CMD_VIBRATO: case CMD_RETRIGVOL: if (*parm == 0) *parm = voices[channel].lastInfo; else voices[channel].lastInfo = *parm; break; case CMD_BREAK: voices[channel].lastInfo = *parm; *parm = ((*parm >> 4) & 0x0f) * 10 + (*parm & 0x0f); break; case CMD_FINETUNE: voices[channel].lastInfo = *parm; *parm &= 0x0f; if (*parm >= 8) *parm -= 8; else *parm += 8; break; case CMD_GLOBAL_VOL: voices[channel].lastInfo = *parm; if (*parm > 0) *parm = (*parm * 4) - 1; break; case CMD_EXTENDED: voices[channel].lastInfo = *parm; *effect = s3mExtendTab[(*parm & 0xf0) >> 4]; *parm &= 0x0f; if (*effect == CMD_SET_PAN) *parm *= 17; break; default: voices[channel].lastInfo = *parm; } if (*effect == CMD_INFO) { *effect = 0; *parm = 0; } } int doCommand(int channel, int command, int parm, int position, int pattern, struct songInfo *songChar, struct effectInfo *effects ) { #ifdef USE_X SEQ_DECLAREBUF(); #endif int jump = 0; switch (command) { case CMD_JUMP: jump = MOVE_JUMP; effects->position = parm; effects->pattern = 0; break; case CMD_BREAK: jump = MOVE_BREAK; if (((position + 1) < songChar->songlength) && (parm < patternLen[tune[position + 1]])) effects->pattern = parm; else effects->pattern = 0; break; case CMD_SET_TICKS: if (parm) TICKS_PER_DIVISION (parm); else { #ifdef USE_X syncTime (); SEQ_ECHO_BACK (ECHO_SPEED0); #else jump = MOVE_EXIT; #endif } break; case CMD_SET_BPM: TEMPO (parm, songChar->clockSpeed); break; case CMD_DELAY_PAT: effects->delayNotes = parm; break; case CMD_PATTERN_LOOP: if (parm == 0) voices[channel].pattern = pattern; else { effects->loopChan = channel; if (voices[channel].loopTimes == 0) { voices[channel].loopTimes = parm; effects->pattern = voices[channel].pattern; jump = MOVE_LOOP; } else if (--voices[channel].loopTimes > 0) { effects->pattern = voices[channel].pattern; jump = MOVE_LOOP; } } break; } return jump; } int playNote (int channel, int position, int pattern, struct noteInfo *pat, struct songInfo *songChar, struct effectInfo *effects, struct optionsInfo *options) { extern Sample *samples[]; extern Sequencer *seq; int jump = 0; int note = pat->note; unsigned char command = pat->command[1], param = pat->parm1[1]; if (songChar->type == MODULE_S3M) cvtS3mPlay (channel, &command, ¶m); else if (songChar->type == MODULE_XM) cvtXmPlay (channel, &command, ¶m); seq->resetEffects(channel, (command != CMD_NOP) || note); if (pat->sample) seq->sample(channel, samples[pat->sample - 1]); if (note == NOTE_STOP) { seq->keyOff(channel); note = 0; } else if (note && (pat->command[0] != CMD_SLIDETO) && (command != CMD_SLIDETO)) seq->note(channel, note, songChar->slideType); if (!seq->doCommand(channel, pat->command[0], pat->parm1[0], pat->parm2[0], pat->note, songChar, options)) jump = doCommand(channel, pat->command[0], pat->parm1[0], position, pattern, songChar, effects); if (!seq->doCommand(channel, command, param, pat->parm2[1], pat->note, songChar, options)) jump |= doCommand(channel, command, param, position, pattern, songChar, effects); return jump; } gmod-3.1.orig/proc_event.C100600 1750 1750 2514 6402577434 15470 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #ifndef USE_X #include #include #include #include "defines.h" #include "structs.h" #include "globals.h" #include "protos.h" #include "Sequencer.h" void NoXProcessEvent () { fd_set readFds, writeFds; static int songFinished = 0; static int writeEnabled = 1; extern Sequencer *seq; SEQ_DECLAREBUF(); FD_ZERO (&readFds); FD_ZERO (&writeFds); FD_SET (0, &readFds); /* standard input */ FD_SET (seq->seqFd(), &readFds); if (writeEnabled) FD_SET (seq->seqFd(), &writeFds); select (seq->seqFd() + 1, &readFds, &writeFds, NULL, NULL); if (FD_ISSET (seq->seqFd(), &writeFds)) { if (stopFlag) songFinished = 1; do { while ((seq->bufferSize() < 1) && (!songFinished)) if ((songFinished = playNextPosition())) { syncTime(); SEQ_ECHO_BACK(ECHO_END); seq->dump(); } } while ((seq->bufferSize() > 0) && (seq->write() != -1)); if ((seq->bufferSize() == 0) && (songFinished)) writeEnabled = 0; } if (FD_ISSET (seq->seqFd(), &readFds)) { seqInput = procInput (); if (seqInput == ECHO_END) { songFinished = 0; writeEnabled = 1; } } if (FD_ISSET (0, &readFds)) timerHandler (-1); } #endif gmod-3.1.orig/proc_input.C100600 1750 1750 3221 6402577434 15502 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #include #include #include #ifdef USE_LOCAL #include "soundcard.h" #else #include #endif #include "defines.h" #include "structs.h" #include "globals.h" #ifdef USE_X #include #include "TrackShell.h" #include "OptShell.h" #include "TopShell.h" #else #include "CursesScr.h" #endif #include "Sequencer.h" unsigned int procInput (void) { unsigned int seqInput; extern Sequencer *seq; extern char played[MAX_POSITION]; #ifdef USE_X extern TrackShell *trackShell; extern OptShell *optShell; extern TopShell *topShell; #else extern CursesScr *cursScreen; #endif if (seq->read ((char *)(&seqInput)) == 4) { if ((seqInput & 0xff) == SEQ_ECHO) { seqInput >>= 8; switch (seqInput & 0xff) { case ECHO_MESSAGE: actualPos = (seqInput >> 16) & 0xff; played[actualPos] = 2; // played #ifdef USE_X topShell->setPosition(actualPos); trackShell->updateTracker(tune[actualPos], patternLen[tune[actualPos]], voiceTable, patternTable); #else cursScreen->setPos(actualPos, (seqInput >> 8) & 0xff); #endif break; #ifdef USE_X case ECHO_SPEED0: if (optShell->speed0Checked() == FALSE) topShell->doNext(1); break; case ECHO_LOOP: if (optShell->loopBreakChecked() == TRUE) topShell->doNext(1); break; case ECHO_PATTERN: trackShell->setCurrent(seqInput >> 8); break; #endif } } else seqInput = ECHO_NONE; } else seqInput = ECHO_NONE; return (seqInput); } gmod-3.1.orig/protos.h100600 1750 1750 4261 6402577434 14720 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson /* This file is part of the GMOD package */ #ifndef __protosH #define __protosH #ifndef STDIO__H #include #endif /* in compress.c */ short compressVoice (short lastVoice, short position, int notesPerTrack, int skip, short firstVoice = 0); /* in cvtPeriod.c */ void periodToNote (int period, int *note, int *pitchbend); /* in gmod.c */ int startPlayback (unsigned char); /* in init.c */ void initVoices (void); /* int load_669.c */ int load_669_module (FILE * modFd, struct songInfo *songChar, struct optionsInfo options, unsigned char *buffer); /* in loadMod.c */ int loadModule (char *name, struct songInfo *songChar, struct optionsInfo options); /* in loadMtm.c */ int loadMtmModule (FILE * modFd, struct songInfo *songChar, unsigned char *buffer); /* in loadS3m.c */ int loadS3mModule (FILE ** modFd, struct songInfo *songChar, struct optionsInfo options, unsigned char *buffer, char *command); /* in loadUlt.c */ int loadUltModule (FILE * modFd, struct songInfo *songChar, struct optionsInfo options, unsigned char *buffer); /* in loadXm.c */ int loadXmModule (FILE ** modFd, struct songInfo *songChar, struct optionsInfo options, unsigned char *buffer, char *command); /* in misc.c */ int panning (int ch); void syncTime (void); void freePatterns(); void removeNoprint (char *string); /* in parse.c */ int parseArgs (int argc, char *argv[], struct optionsInfo *options); /* in playMod.c */ void playModule (int startPosition, struct songInfo *songChar, struct optionsInfo options, int startDelay); int playNextPosition (void); int endModule (unsigned char); /* in playNote.c */ int playNote (int channel, int position, int pattern, struct noteInfo *pat, struct songInfo *songChar, struct effectInfo *effects, struct optionsInfo *options); #ifndef USE_X /* in procEvent.c */ void NoXProcessEvent (void); #endif /* in procInput.c */ unsigned int procInput (void); #ifndef USE_X /* in signals.c */ void timerSet (int mode); void timerHandler (int sig); /* in terminal.c */ void terminalSet (int mode); #endif #endif gmod-3.1.orig/read_rc.C100600 1750 1750 2011 6402577434 14713 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #include #include #include "defines.h" #include "structs.h" void readRc (FILE * rcFp, char *filename, struct optionsInfo *options) { char *strPtr; int nameLen; char rcLine[MAX_RC_LEN]; if ((strPtr = strrchr (filename, '/')) == NULL) strPtr = filename; else strPtr++; if ((nameLen = strlen (strPtr)) > 0) { fseek (rcFp, 0, SEEK_SET); while (fgets (rcLine, MAX_RC_LEN, rcFp) != NULL) { if (!strncmp (strPtr, rcLine, nameLen)) { #ifndef USE_X //fprintf (stderr, "rc: %s\n", rcLine); #endif if (strstr (rcLine, "nobpm") != NULL) options->bpmTempos = 0; if (strstr (rcLine, "ntsc") != NULL) options->ntsc = 1; if (strstr (rcLine, "nospeed0") != NULL) options->tolerant = 1; if (strstr (rcLine, "extend") != NULL) options->extendOct = 1; if (strstr (rcLine, "50hz") != NULL) options->use_50hz = 1; } } } } gmod-3.1.orig/s3m.C100600 1750 1750 2220 6402577434 14020 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #include #include #include "s3m.h" #include "Sequencer.h" void removeNoprint(char *); int S3M_sample::load(Sequencer &seq, FILE * modFd, int sampleNo, int cutFactor, void *lf, void *bf) { unsigned char *buffer = (unsigned char *)bf; int bytesRead; int rc; sampleNum_ = sampleNo; ok_ = 0; mode_ = *((unsigned int *)lf); length_ = INTEL_LONG(&buffer[0x10]); if (length_ == 0) return 0; loopStart = INTEL_LONG(&buffer[0x14]); loopEnd = INTEL_LONG(&buffer[0x18]); volume_ = buffer[0x1c]; if (buffer[0x1f] & 0x01) mode_ |= WAVE_LOOPING; if (buffer[0x1f] & 0x04) mode_ |= WAVE_16_BITS; baseFreq_ = INTEL_LONG(&buffer[0x20]); strncpy(name_, (char *)&buffer[0x30], 28); name_[28] = '\0'; removeNoprint(name_); baseNote_ = C2FREQ; /* Middle C */ if (volume_ > 0) volume_ = (volume_ * 4) - 1; else volume_ = 0; rc = seq.patchLoad(modFd, sampleNo, *this, bytesRead, cutFactor); if (!rc) ok_ = 1; else if (rc == -ENOSPC) bytesRead = -bytesRead; return bytesRead; } gmod-3.1.orig/s3m.h100600 1750 1750 725 6402577434 14055 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #ifndef s3mH #define s3mH #include "Sample.h" class S3M_sample : public Sample { public: int load(Sequencer &, FILE *, int, int, void *, void *); int slideRate(int, unsigned char) const; }; inline int S3M_sample::slideRate(int rate, unsigned char slideDir) const { return ((int)(double(Sample::slideRate(rate, slideDir)) * (baseFreq_ / 8363.0))); } #endif gmod-3.1.orig/signals.C100600 1750 1750 6731 6402577434 14771 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #ifndef USE_X #include #include #include #include #ifdef USE_LOCAL #include "soundcard.h" #else #include #endif #include #include #include "CursesScr.h" #include "SampleShell.h" #include "defines.h" #include "structs.h" #include "globals.h" #include "protos.h" #include "Sequencer.h" void timerHandler (int sig) { extern CursesScr *cursScreen; #ifdef USE_NCURSES extern SampleShell *sampleShell; #endif int keypress = EOF; unsigned int volume; int tmpVolume; static int resetArg = MY_FALSE; /* char message[80]; */ static unsigned int keyedArg = 0; extern Sequencer *seq; if (sig != -1) signal (sig, timerHandler); switch (sig) { case -1: keypress = cursScreen->getChar(); break; case SIGTERM: keypress = 'q'; break; case SIGUSR1: keypress = 'p'; break; case SIGUSR2: keypress = 'n'; break; } while (keypress != EOF) { switch (keypress) { #ifdef USE_NCURSES case KEY_LEFT: #endif case 'b': if (keyedArg == 0) positionChange--; else positionChange -= keyedArg; resetArg = MY_TRUE; stopFlag = STOP_FORWBACK; seq->stopPlayback (); break; #ifdef USE_NCURSES case KEY_RIGHT: #endif case 'f': if (keyedArg == 0) positionChange++; else positionChange += keyedArg; resetArg = MY_TRUE; stopFlag = STOP_FORWBACK; seq->stopPlayback (); break; #ifdef USE_NCURSES case KEY_NPAGE: #endif case 'n': stopFlag = STOP_NEXT; seq->stopPlayback (); break; #ifdef USE_NCURSES case KEY_PPAGE: #endif case 'p': stopFlag = STOP_PREV; seq->stopPlayback (); break; case 'q': stopFlag = STOP_EXIT; seq->stopPlayback (); break; //#ifdef USE_NCURSES // case KEY_UP: //#endif case '+': if (mixerfd != -1) { ioctl (mixerfd, MIXER_READ (SOUND_MIXER_SYNTH), &volume); volume &= 0xff; if (keyedArg == 0) tmpVolume = (int) volume + 1; else tmpVolume = (int) volume + keyedArg; if (tmpVolume > MIXER_MAX_VOL) tmpVolume = MIXER_MAX_VOL; volume = tmpVolume * 256 + tmpVolume; ioctl (mixerfd, MIXER_WRITE (SOUND_MIXER_SYNTH), &volume); } resetArg = MY_TRUE; break; //#ifdef USE_NCURSES // case KEY_DOWN: //#endif case '-': if (mixerfd != -1) { ioctl (mixerfd, MIXER_READ (SOUND_MIXER_SYNTH), &volume); volume &= 0xff; if (keyedArg == 0) tmpVolume = (int) volume - 1; else tmpVolume = (int) volume - keyedArg; if (tmpVolume < MIXER_MIN_VOL) tmpVolume = MIXER_MIN_VOL; volume = tmpVolume * 256 + tmpVolume; ioctl (mixerfd, MIXER_WRITE (SOUND_MIXER_SYNTH), &volume); } resetArg = MY_TRUE; break; #ifdef USE_NCURSES case KEY_UP: sampleShell->scrollSamples(-1); break; case KEY_DOWN: sampleShell->scrollSamples(1); break; #endif case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (resetArg == MY_TRUE) { resetArg = MY_FALSE; keyedArg = 0; } keyedArg = (keyedArg * 10) + (keypress - '0'); break; } keypress = cursScreen->getChar(); } } void setSignals (void) { signal (SIGTERM, timerHandler); signal (SIGUSR1, timerHandler); signal (SIGUSR2, timerHandler); } #endif /* USE_X */ gmod-3.1.orig/structs.h100600 1750 1750 3424 6402577434 15101 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson /* This file is part of the GMOD package */ #ifndef __structsH #define __structsH struct noteInfo { unsigned char note; unsigned char sample; unsigned char command[2]; unsigned char parm1[2], parm2[2]; }; struct voiceInfo { short position; /* for "pattern-loop" command */ short pattern; /* for "pattern-loop" command */ unsigned char loopTimes; /* for "pattern-loop" command */ unsigned char lastInfo; }; struct effectInfo { short pattern; /* position in pattern for jumps, etc */ short position; /* position in song for jumps, etc */ unsigned char delayNotes; /* for "pattern delay" command */ unsigned char loopChan; /* for "pattern loop" command */ }; struct songInfo { short nrTracks; short songlength; unsigned int nrSamples; unsigned int nrPatterns; unsigned char type; unsigned char nrChannels; unsigned char lowestNote; unsigned char highestNote; unsigned char playSpeed; unsigned char tempo; unsigned char volType; unsigned char volOnZero; unsigned char slideType; unsigned char panning[MAX_TRACK]; unsigned char globalVol; unsigned char clockSpeed; unsigned char commentLineLen; char name[NAME_LEN]; char desc[DESC_LEN]; char *comment; }; struct optionsInfo { unsigned char mainVolume; #ifndef USE_X unsigned char loopBreaker; #endif unsigned char showEmptySamples; unsigned char bpmTempos; unsigned char compress; unsigned char tolerant; unsigned char repeat; unsigned char ntsc; unsigned char mixer; unsigned char extendOct; unsigned char randomize; signed char panFactor; unsigned char use_50hz; unsigned char checkMagic; }; struct xStruct { char **fileStrings; int nrFileStrings; }; #endif gmod-3.1.orig/tables.h100600 1750 1750 1743 6402577434 14646 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson /* This file is part of the GMOD package */ #ifndef __tablesH #define __tablesH unsigned short periodTable[] = { 12928, 12192, 11520, 10848, 10240, 9664, 9120, 8606, 8128, 7680, 7248, 6848, 6464, 6096, 5760, 5424, 5120, 4832, 4560, 4304, 4064, 3840, 3624, 3424, 3232, 3048, 2880, 2712, 2560, 2416, 2280, 2152, 2032, 1920, 1812, 1712, 1616, 1524, 1440, 1356, 1280, 1208, 1140, 1076, 1016, 960, 906, 856, 808, 762, 720, 678, 640, 604, 570, 538, 508, 480, 453, 428, 404, 381, 360, 339, 320, 302, 285, 269, 254, 240, 226, 214, 202, 190, 180, 170, 160, 151, 143, 135, 127, 120, 113, 107, 101, 95, 90, 85, 80, 75, 71, 67, 63, 60, 57, 54, 51, 48, 45, 42, 40, 38, 36, 34, 32, 30, 28, 27, 25, 24, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 13, 12, 11, 11, 10, 9, 9 }; int bytePanTable[16] = { -128, -112, -96, -84, -72, -60, -48, -36, 35, 47, 59, 71, 83, 56, 111, 127 }; #endif gmod-3.1.orig/ult.C100600 1750 1750 2624 6402577434 14132 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #include "ult.h" #include "Sequencer.h" void removeNoprint(char *); int ULT_sample::load(Sequencer &seq, FILE * modFd, int sampleNo, int cutFactor, void *header, void *version) { #define SAMP_16BIT 4 #define SAMP_LOOP 8 #define SAMP_REVERSE 16 int bytesRead = 0; unsigned char *buf = (unsigned char *)header; int loop = 0; sampleNum_ = sampleNo; mode_ = 0; memcpy(name_, buf, 32); name_[32] = 0; removeNoprint(name_); loopStart = INTEL_LONG(buf + 44); loopEnd = INTEL_LONG(buf + 48); loop = BYTE(buf + 61); volume_ = BYTE(buf + 60); if (*((int *)version) >= 4) { baseFreq_ = (unsigned short) (INTEL_SHORT (buf + 62)); //s.finetune = (signed short)(INTEL_SHORT(buf + 64)); } else { baseFreq_ = NTSC_RATE; //s.finetune = (signed short)(INTEL_SHORT(buf + 62)); } /* calculate length in "samples" and turn it into bytes */ length_ = INTEL_LONG(buf + 56) - INTEL_LONG(buf + 52); if (loop & SAMP_16BIT) length_ *= 2; if (loop & SAMP_16BIT) mode_ |= WAVE_16_BITS; if (loop & SAMP_LOOP) mode_ |= WAVE_LOOPING; if (loop & SAMP_REVERSE) mode_ |= WAVE_BIDIR_LOOP; baseNote_ = C2FREQ; if (length_ > 0) ok_ = !seq.patchLoad(modFd, sampleNo, *this, bytesRead, cutFactor); else ok_ = 0; return bytesRead; } gmod-3.1.orig/ult.h100600 1750 1750 404 6402577434 14151 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #ifndef ultH #define ultH #include "Sample.h" class ULT_sample : public Sample { public: int load(Sequencer &, FILE *, int, int, void *, void *); }; #endif gmod-3.1.orig/xgmod.1100600 1750 1750 16617 6402600306 14432 0ustar neurochpneurochp.TH XGMOD 1 "1996 Mar 03" "Version 2.3" "USER APPLICATIONS" .SH NAME xgmod \- play music modules .SH SYNOPSIS .B xgmod [\-chrR] [\-P pan-factor] [\-v volume] [module...] .SH DESCRIPTION This manual page documents .BR xgmod , a music module file player for Linux and X, with support for the Gravis Ultrasound card and AWE cards. .B Xgmod is capable of playing 669, MOD, Multitracker (MTM), Scream Tracker III (S3M), Ultratracker (ULT), and FastTracker (XM) files. .PP If modules are listed on the command line, those modules will be added to the file queue. Modules compressed with \fBcompress\fP, \fBgzip\fP, \fBlharc\fP, or \fBzip\fP can be played by .BR gmod , if gunzip, lharc, and/or zip are installed. .SH OPTIONS .TP .B "\-c" Disable compression of modules in memory. Normally, modules are compressed in memory in order to use less space. Specifying this option will save some CPU time. .TP .B "\-h" Display help. .TP .B "\-P \fIpan-factor\fP" Set the panning factor. Valid values are -100 to 100. Higher absolute values produce more panning. Negative values cause the left/right channels to be swapped. The default value is 100. .TP .B "-r" Infinitely repeat the current module. .TP .B "-R" Randomize the play order of the modules. .TP .B "-v \fIvolume\fP" Set the volume to .I volume. Valid values are 0 to 255. The default value is 255. .SH THE XGMOD WINDOW The Xgmod main window contains a number of buttons. .TP .B "Double Left Arrow" Move to the previous song position (rewind) .TP .B "Double Right Arrow" Move to the next song position (forward) .TP .B "Double Left Arrow with bar" Play previous module in queue. If there is no previous module (the module currently playing is the first module in the queue), playback will stop. .TP .B "Double Right Arrow with bar" Play next module in queue. If there is no next module (the module currently playing is the last module in the queue), playback will stop. .TP .B "Single Right Arrow" Begin playback of the current module. .TP .B "Square" Stop playback .TP .B "Queue" Pop up the queue window .TP .B "Options" Pop up to options window .TP .B "Track" Pop up the tracking window .TP .B "Samples" Pop up the sample information window .TP .B "Comment" Pop up the module comment window .TP .B "Exit" Exit Xgmod .SH THE QUEUE WINDOW The queue window displays all files currently in the play queue. Double clicking on a file will start playback of that module. A number of buttons are provided for manipulating the queue. .TP .B "Add" Pop up the file selector to add files to the queue .TP .B "Save" Save the current file queue .TP .B "Current" Highlight the module currently playing in the file queue list .TP .B "Play" Start playback with the module currently highlighted in the file queue list .TP .B "Remove" Remove the highlighted file from the file queue .TP .B "Clear" Remove all files from the file queue .TP .B "Shuffle" Randomize the order of the files in the file queue. .TP .B "Close" Close the queue window .SH THE OPTIONS WINDOW The options window contains four groups of options. The first group, play options, are effective immediately after they are pressed. The second group, load options, are checked only when a module is loaded. The third group contains toggles to control the file queue. The fourth group controls the selection of octaves when loading a module. By default, all the options are off. .TP .B "Break Infinite Loops [play]" If this toggle is enabled, infinite loops in modules will be broken. .TP .B "Ignore Speed0 Commands [play]" Speed 0 commands normally cause a module to stop playing. Enabling this toggle will cause all speed 0 commands to be ignored. .TP .B "50 Hz Clock Freq [load]" Enabling this toggle will cause modules to be played using a 50 Hz base clock frequency. This option is effective for MOD files only. .TP .B "NTSC Sample Timing [load]" If this toggle is enabled, samples will be playing using NTSC (as opposed to PAL) sample timing. This option is effective for MOD files only. .TP .B "Disable BPM Tempos [load]" Enabling this toggle will cause all speed changes to be considered "ticks per division" changes. This option is effective for MOD files only. .TP .B "Check magic number [load]" Check the magic number in MOD files. If the MOD file does not have a magic number, then it will not be loaded. Old 15 channel MODs do not have magic numbers. .TP .B "Unqueue After Play [queue]" If this toggle is enabled, the module will be removed from the file queue after it has been played. .TP .B "Random Order [queue]" Play the modules in the file queue in a random order. Clicking "previous module" or "next module" in the main window will select another module randomly. .TP .B "Highlight Current [queue]" Highlight the current module in the file queue whenever a new module is loaded. .TP .B "Limited [octave selection]" Use the standard octave range for MOD files. .TP .B "Extended [octave selection]" Use an extended octave range for MOD files. .TP .B "Automatic [octave selection]" Use the standard octave range if all notes in the MOD file fall within the standard range; otherwise, the extended octave range will be used. .TP .B "Save" Save the options into the .xgmodrc file. .TP .B "Close" Close the options window. .SH THE GMODRC FILE The gmodrc file is used to determine settings to be used for particular modules. The gmodrc settings will always override the settings in the options window. GMOD will first look for a file named .gmodrc in the user's home directory, and if it is not found, it will look for /usr/etc/gmodrc. The gmodrc settings are combined with the options given on the command line. The format of the file is: .PP filename(without path) option ... .PP For example, if mymodule.mod uses NTSC sample timing and speed 0 commands should be ignored, the following line could be entered in the gmodrc file: .PP mymodule.mod ntsc nospeed0 .PP Spacing is not important, but case is significant. The module name must start at the leftmost position of the line. The length of the line is limited to 160 characters. .PP Valid options are: nobpm (ignore BPM tempos), ntsc (use NTSC sample timing), nospeed0 (ignore speed 0 commands), extend (extended octaves), and 50hz (use 50 Hz clock frequency) .SH NOTES This applies only if gmod is compiled without linear volume support: Setting the sequencer volume to anything greater than approximately 60 when gmod's volume .I "(\-v)" is set to 255 will cause volume clipping. Lower gmod volumes will allow higher sequencer volumes before clipping occurs. .PP MOD files use various timing methods. Different methods and the corresponding options are listed below: .PP NTSC (60 Hz) CIA: NTSC sample timing .PP PAL (50 Hz) CIA: no options (default) .PP NTSC (60 Hz) Vblank: NTSC sample timing, Ignore BPM tempos .PP PAL (50 Hz) Vblank: Ignore BPM tempos, 50 Hz clock frequency .SH DIAGNOSTICS The exit codes are: .TP 0 Normal termination. .TP 50 Bad arguments. .TP 51 An error occurred while attempting to access the sequencer. .TP 52 An error occurred while attempting to load a module .TP 53 No GUS card was found. .SH AUTHORS Original source by Hannu Savolainen. .PP MultiTracker/Ultratracker loading by Robert Sanders. .PP Many other modifications have been performed by Andrew J. Robinson . Andrew is currently the maintainer of gmod. Please direct any comments, questions, bug reports, etc. to him. There is currently a Xgmod WWW page available through http://www.nyx.net/~arobinso .PP Xgmod is Copyright (C) 1996 by Andrew J. Robinson. gmod-3.1.orig/xm.C100600 1750 1750 7536 6402577434 13761 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #include #include #include "xm.h" #include "Sequencer.h" int catchup(FILE *, int, int *); void removeNoprint(char *); int XM_sample::load(Sequencer &seq, FILE * modFd, int sampleNo, int cutFactor, void *pt, void *fp) { u_char header[214]; u_long headerSize, skipLength; u_short numSamples; int bytesRead = 0; int readCount; unsigned short *periodTable = (unsigned short *)pt; int *filePos = (int *)fp; ok_ = 0; sampleNum_ = sampleNo; readCount = fread(header, 1, 29, modFd); *filePos += readCount; if (readCount != 29) return bytesRead; strncpy(name_, (char *)(header + 4), 22); name_[22] = '\0'; removeNoprint(name_); headerSize = INTEL_LONG(header); numSamples = INTEL_SHORT(header + 27); if (numSamples > 0) { readCount = fread(header, 1, 214, modFd); *filePos += readCount; if (readCount != 214) return bytesRead; if (!catchup(modFd, *filePos + (headerSize - 243), filePos)) return bytesRead; headerSize = INTEL_LONG(header); volumeEnvelope.load(int(header[196]), int(header[198]), int(header[199]), int(header[200]), int(header[204]), (unsigned short)(INTEL_SHORT(header + 210)), 64, header + 100); panEnvelope.load(int(header[197]), int(header[201]), int(header[202]), int(header[203]), int(header[205]), 0, 32, header + 148); vibratoDepth_ = header[208]; vibratoRate_ = header[209]; readCount = fread(header, 1, 40, modFd); *filePos += readCount; if (readCount != 40) return bytesRead; if (!catchup(modFd, *filePos + (headerSize - 40), filePos)) return bytesRead; skipLength = 0; /* skip any remaining sample headers */ while(numSamples > 1) { readCount = fread(header + 40, 1, 40, modFd); *filePos += readCount; if (readCount != 40) return bytesRead; skipLength += INTEL_LONG(header + 40); if (!catchup(modFd, *filePos + (headerSize - 40), filePos)) return bytesRead; ; numSamples--; } length_ = INTEL_LONG(header); loopStart = INTEL_LONG(header + 4); loopEnd = loopStart + INTEL_LONG(header + 8); if ((BYTE(header + 14) & 0x03) == 1) mode_ = WAVE_LOOPING; else if ((BYTE(header + 14) & 0x03) == 2) mode_ = WAVE_LOOPING | WAVE_BIDIR_LOOP; else mode_ = 0; if ((BYTE(header + 14) & 0x10) > 0) mode_ |= WAVE_16_BITS; panning_ = header[15]; // should check range of relative note!! if (((signed char)(header[16])) != 0) baseNote_ = 111978496 / periodTable[-((signed char)(header[16])) + 60 - NOTE_BASE]; else baseNote_ = C2FREQ; baseFreq_ = NTSC_RATE; if (length_ > 0) { int rc; rc = seq.patchLoad(modFd, sampleNo, *this, bytesRead, cutFactor); if (!rc) ok_ = 1; *filePos += bytesRead; skipLength += length_ - bytesRead; if (rc == -ENOSPC) bytesRead = -bytesRead; } if (BYTE(header + 12) > 0) volume_ = (BYTE(header + 12) * 4) - 1; else volume_ = 0; finetune_ = (signed char)(BYTE(header + 13)) * 100 / 128; /* skip any remaining samples for this instrument */ catchup(modFd, *filePos + skipLength, filePos); } else catchup(modFd, *filePos + (headerSize - 29), filePos); return bytesRead; } void XM_sample::decode(char *data) const { signed short oldVal, newVal; int i; oldVal = 0; if (mode_ & WAVE_16_BITS) { for (i = 0; i < length_; i+=2) { newVal = (signed short)(INTEL_SHORT(data + i)) + oldVal; data[i] = newVal & 0x00ff; data[i+1] = (newVal & 0xff00) >> 8; oldVal = newVal; } } else { for (i = 0; i < length_; i++) { newVal = (signed short)(data[i]) + oldVal; data[i] = newVal; oldVal = newVal; } } } gmod-3.1.orig/xm.h100600 1750 1750 1577 6402577434 14025 0ustar neurochpneurochp// -*-C++-*- // This file is part of the gmod package // Copyright (C) 1997 by Andrew J. Robinson #ifndef xmH #define xmH #include "Sample.h" #include "Envelope.h" class XM_sample : public Sample { public: int load(Sequencer &, FILE *, int, int, void *, void *); int volumeEnvelopeY(int &a, char c, unsigned short *b) const { return volumeEnvelope.getY(a, c, b); } int panEnvelopeY(int &a, char c) const { return panEnvelope.getY(a, c); } void decode(char *) const; int pan() const { return panning_; } int vibratoDepth() const { return vibratoDepth_; } int vibratoRate() const { return vibratoRate_; } int vibratoType() const { return vibratoType_; } private: Envelope volumeEnvelope; Envelope panEnvelope; unsigned char panning_; unsigned char vibratoType_; //unsigned char vibratoSweep_; unsigned char vibratoDepth_; unsigned char vibratoRate_; }; #endif