Skip navigation.

STICKY POST

Commander Kit

STICKY POST

Counter

,

Silverspring 1.6 Demo

Yes indeed.

Descent Audio CD

So well...

The CD that's been playing the last 80 minutes or so was one that has a compilation of all three games' tracks...

Started with a DOS OPL-2 FM rendition of Descent title (Descent.mid), went on with "Contribution", a mix of game03.mid, Descent II tracks (both MIDI renditions and Redbook audio), and so on.

Jerry's 128 kbps MP3 files (quite decently encoded, by the way, though inevitably somewhat woody-sounding) decoded, a copy of tracks off the Definitive Collection Descent II CD, and the Descent II & Descent MIDI files mixed/rendered here. All of that remastered for the CD - with some additional reverb for the old Descent mixes, and all tracks processed by Izotope Trash analogue filter emulation and Waves Stereoimager+ stereo image shaping.

The Izotope Trash DX plugin can improve dynamics with its analogue filter emulation, also its speaker cabinet emulation adds a bit of extra brightness which livens up CD audio.

Waves Stereoimager+ has a Blumlein shuffle implementation, arranging different frequency bands according to psychoacoustic model of perception (humans are most sensitive to upper low/midrange frequencies, midrange usually appears as "wider" and more detailed). Blumlein shuffle also adds a high-frequency crossfeed, which helps listening in headphones.

All of this sounded surprisingly quite lively, even though the old game mixes (game04.mid, game05.mid, game09.mid) all were mixed a tad too bass-heavy (the amp they were mixed on had the bass cut to less than half/treble boosted to maximum). Game09.mid even was quite groove-inducing B)

Jerry's tracks sounded quite warm and engaging after processing, which brings the suspicion of him having mixed with his own AKG headphones (K-340?).

Here's the tracklist:

1. Descent Introduction (OPL2 FM, reverberated).
2. Jerry Berlonghieri - "Contribution".
3. Descent - Game03.mid - "Lunar Military Base".
4. Brian Luzietti - "Crawl"
5. Descent Game01.mid - "Lunar Outpost" (Reason mix).
6. Playstation/Mac Descent (Descent game02.mid) - "Lunar Military Scientific Lab".
7. Descent II Introduction (Descent2.mid).
8. Brian Luzietti - Descent II Title.
9. Bob Brown - "Cold Reality"
10. Descent Game10.mid.
11. Jerry Berlonghieri - "Top Hush"
12. Descent Game12.mid - "Callisto Mining Colony".
13. Jerry Berlonghieri - "Solar Ignite".
14. Descent Game04.mid - "Venus Atmospheric Lab".
15. Jerry Berlonghieri - Descent 3 Credits.
16. Descent Game05.mid - "Venus Sulphur Mine".
17. Descent Game09.mid.
18. Jerry Berlonghieri - "Retribution".

I-Jing (in Russian, For Lain)

Audiotest CD

Volume 1;
Volume 2;
Volume 3.

Update
Digital Silence - 30 seconds.flac - just that;

Moog Soft Sine Pad - Stress Test.flac - a recording of a Moog Mini V Soft Pad, composed of sine waves - a stress/effective dynamic range test for any speakers/headphones;

Audiotest is a relatively small test CD. It lacks phase checks, instrument demos, channel separation checks and the like. Only the basics...

Read more...

Windows Registry Survival Guide

Windows is very susceptible to registry hive corruption. That's anything in \%systemroot%\system32\config . That directory keeps all the registry hives: SAM - password database, SECURITY - security permission/rights database,
default - HKU\Default, software - \HKLM\Software, system - HKLM\System. The same files with the *.alt extension are alternate copies used for the "last known good config" boot option. *.sav is the extension for first-install-run copies of registry hives.

The problem with this is that if the system hive gets corrupted somehow, the whole kaboodle can't boot. And usually when system hive gets corrupted (which is almost certain with, say, BSODs caused by faulty memory sticks), the spare copy also gets corrupted. So "last known good config" may not help much. The "last known good config" option just invokes a copy of the hives made before the last hardware change.

Sometimes the problem is just broken security permissions on the registry files after a dirty shutdown. This can be fixed by moving the registry hives to a different partition, then moving them back in.

And, some notes on preventive maintenance...

Registry hives should be backed up regularly - manually is fine, as long as there's a spare OS around capable of writing to NTFS (many Linux Live CDs can do that). The Windows utility RDisk can also archive registry on removable media.

"Write cache off" is a good option for the system hard drive. Of course it won't help against faulty DIMMs, where data can get corrupted while in RAM and be written back corrupted regardless of the hard drive's cache. But it may help against power cuts.

Which begs for the third - a UPS is a very useful thing.

Also defragmenting the system files, for which System Internals had a utility, helps.

Finally, a simple trick for Windows reinstall without much hassle - an install of Windows from scratch, then all the service pack and such application, drivers install, and - a copy of the old Windows directory over the new one with everything but the new registry hives (and SAM DB, everything in %systemroot%\system32\config) replaced.

Digital & Analogue Recording

, ,

A small essay on digital & analogue recording, as well as what really matters with sound & frequency processing.



Sound is an impulse. An impulse of energy - in this case, the energy is moving air or some other resonant material. Vitality, energy, harmony - all that in the West is treated separately, in Chinese is called "ji" - the life essence itself. Music is a direct incarnation, reflexion of that.

The charge, potential, power of sound impulse is usually notated in frequency terms by humans.

Digital processing involves the conversion of any analogue of an image (or sound) into bit-coded representation. Initially there are only two solid states of a bit - on or off (true/false, yes/no, 1/0, etc.). With more bits assigned, the complexity can be increased, e. g. with several bits representing the position of a character in a mapped alphabet, other bits representing the position of a character within a line, other bits drawing the character onscreen, etc.

In digital representation, a whole of a picture or a fragment of sound is represented in smallest possible fragments - quantums. In the case of imagery, the smallest component of a represented picture is pixel. In the case of sound, it is sample. A pixel is a smallest square dot represented by a bitmapped image; a sample is a fragment of a second, capturing variation from one state of a sound wave to another. The more samples per second, the higher the frequency of sound wave captured, the higher the resolution (and precision) of the digital soundwave, the more natural the sounding.

Read more...

Cowon T2

, ,

The Cowon T2 player is a small "necklace" audio player. It isn't the size of a regular necklace pendant, much larger - a small 80's- (or 70's?-)styled black box.



It is intended as a "PC companion" player, not as a standalone player with an entire music collection. The player didn't come with an AC adapter - it is charged by USB connection (two hours for a full charge).

Read more...

Apache 2 File Sorting by Extension

,

Apache 2 has a "Fancy Indexing" option for file lists.

It can be configured to sort files by extension (not directly though).

The trick is simple - sort files by description by default, with alphabetic descriptions added for file types. So *.exe-files with an "Executable file" description would always be sorted before *.zip-files with a "Zip archive" description.

For the server configuration file (usually httpd.conf):

LoadModule autoindex_module modules/mod_autoindex.so - this ensures the Autoindex (directory reader/indexer) module loads, it is required by the Fancy Indexing.

Include conf/extra/httpd-autoindex.conf - this is the included configuration file itself.

In httpd-autoindex.conf:

IndexOptions FancyIndexing HTMLTable VersionSort DescriptionWidth=* FoldersFirst IgnoreCase NameWidth=*

IndexOrderDefault Ascending Description


The IndexOptions directive takes:

FancyIndexing
- ensures directory sorting is enabled and can be toggled by the sorting type column headers;

HTMLTable - creates a simple single table for the file list. It can cause strange behaviour in really old browsers, but it is necessary for proper UTF-8 read formatting (which can alternate between left-right and right-left);

VersionSort - enables version sorting (where 1.11 will be displayed after 1.8.1);

DescriptionWidth=* and NameWidth=* - the asterisk removes any width limitations - the column will be as wide as the widest name or description;

FoldersFirst - display directories first, not mixed alphabetically with files;

IgnoreCase - ignore case (default behaviour is to sort all capital-letter names first);

The IndexOrderDefault directive is set-up to sort directories by description in ascending order.

The AddIcon directive adds an icon for a new file type.

The AddDescription directive provides a description for a file type:

AddDescription "Zip archive" .zip

With appropriately-described extensions, the file list should be sorted by extension:



Some notes: Apache 2 prioritised directives according to the order they were read in. httpd.conf had icons and descriptions for generic filetypes loaded first:

AddIcon /icons/binary.gif .bin .exe .lib .stub
AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
AddIconByType (TXT,/icons/textdoc.png) text/*
AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip .rar


Those should be moved to a position after the newly added icon/descriptions.

Some little quirks in the way Apache 2 treated extensions: if a description for *.xml came after a description for *.xm, all *.xml would be treated as *.xm . Apache 2 also read only the first extension for sorting, not the last (so .avi.torrent would be sorted with *.avi, not *.torrent), but it generated descriptions correctly, by the last extension.

HeaderName /Fileindex.html
ReadmeName /Filefooter.shtml


Those directives specify the header and the footer for file indexes. The header can provide the background and body setup (fonts, colours, images, etc.). If server-side includes (SSI) are on, files marked as SSI-capable (*.shtml, etc.) will be parsed for includes, so common environment strings like server signature, local time/date, etc. can be inserted into the header or footer.

Quake II Bugs

1. Whenever a new level is loaded in singleplayer, the player's model is reset to that of male/grunt . This doesn't happen when there's already a level snapshot in the savegame (movement to a previously-visited level in a hub). This is on the side of id's default game library, fixed in Generations Gamex86.dll (and probably some other mods). Should be trivial to fix.

2. dmflags CVar affects singleplayer: when the flag for "weapons stay" is set, they do. In singleplayer. The player can't pick a weapon up if he already has one of the same kind. Most likely also at the game library's side.

3. Resurface breath gasp (and probably some other sounds) limited to that of the default male model, regardless of whether gender is set to female or the chosen model has water resurface sounds.

4. Health was always reset to base whenever a level was switched in singleplayer.

Some Ringtones

,

FM Bell Ringtone 1, also ringtone for the "Greens" theme.
FM Bell Ringtone 2;
Ephemeral Piano Ringtone 1;
Ephemeral Piano Ringtone 3, message tone for the "Greens" theme.

Worldcraft 1.6

, ,

The full version of Worldcraft 1.6. It's been getting rare, and 1.6b was nowhere to be found.
It has some little glitches (like [Alt]+[E] not pulling down the "Edit" menu), and it comes with a rather obnoxious "Normandy D-Day" preset, but it's still that old Worldcraft 1.6.

Audio Notes

Misery Loves Co.

Back in the nineties, there was a Swedish Duo called Misery Loves Co.

As is customary in the higher latitudes, Misery Loves Co. music dealt with the struggle of a human self against the cruel-rational life-annihilating ways of the civilisation. The method of Misery Loves Co. was similar to what inspired Dostoyevskyi's work: the clash and mutilations of one's own self in struggle (usually blind-retrieving-clues) against human spoil, translated into words and an intricate, carefully and delicately, almost symphonically-arranged "electric storm".

With some effort, Misery Loves Co. albums might be found, though the last query in a music store chain gave an "out of print" result.

Misery Loves Co. ceased to be in 2000.

Happy (single version off the "Happy?" disc).

Rise And Fall.

Lyrics.

Some covers...

Your Vision Was Never Mine To Share

Not Like Them

Happy?

Donut Studios Winforce 1.4

, , ,

Winforce 1.4 is a process/window manager for Windows 9x/NT.

Here's a screenshot:



Ever since Donut Studios' site went down, Winforce has become another "great-but-nearly-extinct" app.

Codec Settings

, , , ...

These are the settings for the LAME codec and the OGG encoder.

Command lines from Windows batch files.

The LAME "decode" setting from lamedec.bat:

lame.exe -k --decode %1

The "-k" parameter disables bandpassing (of any kind) by the LAME engine. As of LAME 3.93 MMX, the codec cut off all frequencies above 18 KHz even when decoding. This has been filed as a bug.

The LAME "encode" setting from lameenc.bat:

lame.exe -k --noath -q 0 --notemp --cwlimit 48000 -Z --abr 512 -m s --verbose %1 %2 %3 %4 %5 %6

Where "-k" disables all frequency cuts (low-/band-/high-passing), "--noath" disables ATH ("absolute threshold of hearing", an imaginary "lower limit of human hearing"), "-q 0" switches to the highest quality possible (also slowest possible, which is still several times the playback rate on a modern CPU), "--cwlimit 48000" computes tonality for up to 48000 Hz (up from default 8.8717), "-Z" is an experimental feature toggling the scalefac and subblock gain on (which, ahem, tends to make percussion sound a bit better), "--abr ###" sets the average bitrate (like VBR, except the codec attempts to target the bitrate instead of operating in a range between min. rate and max. rate), "-m s" sets the mode to stereo (as opposed to "joint stereo" which enables mid/side channel storage), and "--verbose" does exactly what it says.

The OGG encoder setting from oggcode.bat:

oggenc -q 10 --advanced-encode-option lowpass_frequency=96000 %1

All that this does is enable an undocumented "lowpass frequency" parameter (at 96 KHz in the example). Unjustly undocumented, as this is what has prevented OGG from having been taken seriously by audio folks.

Final - Codec Noise

Here's a bootleg release.
Unreleased or difficult-to-find Final tracks that have never been included in a standalone album.



Tracklist

    1. Final vs. Solaris - Voidbeat 1 (4:33)
    2. Final - Hide (7:27)
    3. Final - Far (8:39)
    4. Final (Justin Broadrick) - Two Chords (9:19)
    5. Final - Failure (4:16)
    6. Final - Alien Soundtracks (6:58)
    7. Final - Dream 1-3 (6:52)
    8. Final - Sticks And Stones (6:49)
    9. Final - Cookie (9:21)
    10. Final - Exit (9:00)

Direct link in case the S-Chapel server goes down.

Mass Murder In The Skies: Was The Plot Feasible?


Flying Toilet Terror Labs - Mass Murder In The Skies: Was The Plot Feasible?

Should help with some of the terror being spread out by the governments (whether intentional, half-intentional, or not).

Quotes:

(...)Or at least that's what we're hearing, and loudly, through the mainstream media and its legions of so-called "terrorism experts." But what do these experts know about chemistry? Less than they know about lobbying for Homeland Security pork, which is what most of them do for a living. But they've seen the same movies that you and I have seen, and so the myth of binary liquid explosives dies hard.

(...)

So the fabled binary liquid explosive - that is, the sudden mixing of hydrogen peroxide and acetone with sulfuric acid to create a plane-killing explosion, is out of the question. Meanwhile, making TATP ahead of time carries a risk that the mission will fail due to premature detonation, although it is the only plausible approach.

Certainly, if we can imagine a group of jihadists smuggling the necessary chemicals and equipment on board, and cooking up TATP in the lavatory, then we've passed from the realm of action blockbusters to that of situation comedy.

Windows Media Audio/Video Decode

, , , ...

WMA, the Windows Media Format, is a format created (well, actually, mostly blueprinted from MP3 with some addition of their own code) by Microsoft for compressed audio transmission (well, actually, more oriented towards sale and lockout of "copyrighted" music).

WMA subsystem, codecs, and associated software (or rather, litter) are bundled with most current versions of Windows.

There is a way to remove WMP.

The problem with WMA is that to play back the WMA files, the player actually has to contact the WMA interface which checks whether there is a licence installed for the files' playback. In other words, with the rest of the WMA subsystem taken down, and with a WMA plugin for a player such as Winamp or XMPlay, it won't be possible to play anything.

Fortunately, there is the mighty MPlayer, a universal media player capable of pretty much anything, originally developed for Unix operating systems. There is also MPUI, a Windows GUI for MPlayer. MPlayer runs great on Windows, taking advantage of any codecs if installed, and includes a "demoronised" version of WMA and WMV codecs which will play back any WMA or WMV file regardless of whether it's licence-protected or not.

For those who have lost their licence files (in a reinstall or somesuch misadventure), or have (rightfully and truthfully) removed the WMP monster altogether, this is a major boon.

To decode to wave, MPlayer has to be run with a "PCM file" output specified, like so:

mplayer -ao pcm:file=smile.wav


The resulting wave file can then be recoded to some other (free) format, or if quality loss is a problem, encoded to a lossless format like FLAC.

Picnic Remade By Picnic

,


Picnic - "The Night" ("Ночь"), a 2001 remake of the 1982 song.

Fall Of Because - "Life Is Easy"

Baldur's Gate II/MacOS X

, , ,

Editing Baldur's Gate II's Baldur.ini under MacOS X has a caveat: Text Edit would automatically replace all Mac-native carriage returns with Unix ones when saving the file.

BBEdit Light worked for saving the file; there should be other text editors for OS X that treat the text file correctly.

Two sample errors caused by Baldur's Gate II unable to parse Baldur.ini (caused by the engine not finding the path to its data files - which should be specified in Baldur.ini):

An Assertion failed in ChDimm.cpp at line number 666
Programmer says: Unable to Open BIF:data:MISSound.bif

An Assertion failed in ChDimm.cpp at line number 645
Programmer says: Unable to Open BIF: data:MISSound.bif

Also, a couple indispensable Baldur.ini switches...

Over Confirm Everything=0

- turns off super-redundant confirmations of the "Are you sure that you are sure..." type (such as confirming if the PC wants to erase a memorised spell, quit/load/save/rest(!) confirmation messages, etc.).

Debug Mode=1

Turns on the debug mode, allowing input of cheats (switch "Cheats=1" in the .ini file) and some "magical" developer features in-game.

Silverspring Soundfont

, , , ...

Silverspring was a GM/GS bank in Soundfont 2.1 format. It was entirely composed of public domain samples (or free-for-use instruments). Originally, there was a bank needed for playing back the classic games' (Descent, Heretic/Hexen, Doom series) MIDI soundtracks. Silverspring was compiled for that.

It was meant as a near-64 MB (depending on version and completeness, the bank size varied from 56 to 80+ megabytes) bank for SB Live cards under NT4. A friend also used the bank (and larger derivatives) under the MacOS X Quicktime synthesiser.

Under NT4 and NT5 native Creative drivers, there was trouble with MIDI playback: the SB Live cards are limited to a 32 MB memory allocation (they can only play back 32 MBs of samples at a time). The "professional" version of SB Live, the EMU APS Live, was specifically limited to 32 MBs max. RAM cache. The SB Live, though, had "unlimited" memory cache limited by RAM size. The Creative Labs drivers never implemented the caching model correctly (keep only 32 Mbs accessible by the card, dynamically managing the rest as PC-only Soundfont cache), always having some kind of trouble with MIDI playback - under NT4 it was instruments/layers dropping out of playback, and the card eventually filling with garbage its own playback channels (after about an hour of playback, the wave channels became inaccessible), under NT5 the engine seemed to be improved a bit, but layers of instruments weren't played back if there were too many of them, pitch often wasn't kept up with (especially noticeable with orchestral string instruments), and the overall sounding was more artificial and plastic compared with NT4. All-in-all, Liveware 3 for NT4 was maybe the last decent-sounding release, in spite of memory management problems (it could play a piece with all the instrument layers in place and as intended, even if the card would bang out after playing back several complex pieces).

There was the kX driver project, but its Soundfont engine didn't support stereo playback, it didn't support Soundfont 2.3 features, it had trouble playing back more than one layer per instrument, trouble switching to non-standard sample frequencies, etc. etc.

It's been a certain surprise the bank is still requested and used by some people (it should sound more or less decent on the Audigy cards, which have no 32-MB limitation and related trouble).

A few days ago, a message came from a Korean Soundfont folk with a New Zealand address, asking for the extras that came with Silverspring 1.5 and any current download links. Well, "current download links" there are none (there used to be a German mirror that eventually went down because of multi-gigabyte traffic), but he did provide a link to a Soundfont review site where Silverspring was commented on.

There the downloaders wrote the bank had poor basses and drums, but the best MIDI guitars in a Soundfont.

Different releases of Silverspring had different guitars (and there was a larger, "more hi-fi" version of Silverspring with different drumkits and attenuation tunings called "Savria" that was made specifically for playing Kevin Schilder's MIDI soundtracks to Raven Software fantasy games): the first version of distorted electrical was called "Quite-distorted Guitar", a multi-layered monster that had a raspy sounding (this piece from Descent shows it off), the second was a triple-layer (left, right, and centre-panned, delayed mono-sample layers) distorted guitar inspired in Justin Broadrick's delayed and reverberated guitar sounding of his Godflesh rock project. The overdriven guitar through most versions was a "Well-overdriven Guitar" instrument, also multi-layered with some barely-noticeable distorted electric muted guitar chords thrown in for a more "metallic" sounding. It was dropped for release 1.5, replaced with a Casio Overdriven guitar that had some trademark reverberation/chorus/layering effects on it. Here is a sample of the Well-overdriven, Bobby Prince' soundtrack to Doom level 1-8, "Sign of Evil".

Basses and percussion... Some of the basses in the public version of Silverspring were replacing the commercial bass instruments that were used for mixing and rendering some pieces; the picked bass instruments different Silverspring versions had, were usually replacing a Sonic Implants sub-bass. The fingered bass in different versions was good though (with its characteristic "Velvet-Undergroundish" sounding), as were the two synthesised basses (the first was a Moog, the second a very-lowpass resonating saw wave bass). The percussion kit was a modified Sound Canvas kit with more stuff thrown in to make it sound more natural (and almost always was replaced by a Natural Studio Kit 5 in actual mixes and renderings, also in the Savria version). Silverspring was used as a "base" bank to build upon, and stack instruments on top of it.

A version was made for the NT5 SB Live drivers, dropping some instruments' complexity, losing layers and so on, with a new drumkit and less complex guitar instruments.

It never quite got through, although it did have good sounding on some pieces (by that time, that was enough), mostly with the Doom/Descent MIDI tracks.

A recording quite never captures the sounding of a good "live" synthesiser (there's always some quantising and dithering involved in 16-bit wave recording that the less discrete "live" playback with instruments mixed with 32-bit interpolation and audio depth doesn't have), but here are some samples...

Descent Level 4 track, one of the earliest versions of Silverspring, all instruments are from the bank. Track-by-track mixing in a wave editor.

Oxygene 10 (Lost Soul), a mix by Howard Farrar for the AWE64 card; usually, Silverspring handled MIDI pieces sequenced for "classic" hardware well; the version is 1.5.5 (NT5), the last one. Additional instruments are an experimental synthesised strings patch that didn't make it into the bank (made with Wavecraft, an analogue emulation non-realtime synthesiser), Yamaha OPL3 FM Bass 1, and Elka Synthex Jarre harp. Recorded under NT5 with SB Live and a custom EAX preset.

Borkesis - a piece from Hexen soundtrack, "live" recording under NT5. All instruments are standard.

...the soundtrack to "Lava Pits", a Heretic level. The only bank instruments here are the synthesised strings, the base fretless bass patch, and the melodic tom.

And a very beautiful piece, reverbed twice, from the Heretic soundtrack, the finale of episode 2.

There was a Canadian musician, Christopher Payne, who composed some albums with instruments from Silverspring and related banks. Also, there was a musician friend who used the instruments from the bank for his own works; he used to have a university band called "Kernel".

There should be other musicians who have played with the bank (although, it was mostly intended for listening to classic games' MIDI tracks with cheap hardware).

An acquainted composer once said the pieces sounded good (mixing-wise), but "compressed". They really might; after all, a lot of lowpassing and other trickery was used for the instruments, with a lot of EQ shaping done during mixing in the track editor. Though, for a Soundfont bank, Silverspring still had some of the more realistic sounding at its time.

Work on an already worked-over project is always akin to flogging a dying horse, so Silverspring most likely won't ever have a "really final" version.

Dedicated To F. Gamers.

Photos


The dog of the aunt of Elf;
The dog of the aunt of Elf;


For Those That Get It.
For Those That Get It, or, "Элвис - козёл".


A Store, part 1.
A Store, part 1.


A Store, part 2.
A Store, part 2.


A Store, part 3.
A Store, part 3.


Elf in Office-store-land.
Elf in Office-store-land.


For Those That Get It.
For Those That Get It.


Active FTP Behind A Router

Piece of advice for those who suffer from lack of active FTP behind their router (DSL modem, etc.): enable forwarding of port 20 to the box that will have the FTP client.

Active FTP requires two connections - client-to-server control connection on port 21 (where the FTP server listens on port 21), and the actual data transfer connection, established server-to-client, which requires the client to listen on port 20.

Most DSL modems (and some restrictive firewalls) will block any listening connections.

MoozE - Surveyor

This track's from the soundtrack to Homeplanet, a space sim-like shooting/tactical game.

Surveyor.

No title

Athena Font

November 2009
S M T W T F S
October 2009December 2009
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30