Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Документация, учебники по Perl.doc
Скачиваний:
3
Добавлен:
29.10.2018
Размер:
1.83 Mб
Скачать

Счетчик посещений

Наверное тоже одним из часто встречающихся приложений CGI являются счетчики посещений. Они стоят практически на каждой страничке, возможно даже и у вас. Но иногда вас не устраивает тот факт, что счетчик лежит где-то в другом месте.Из-за этого скажем невозможно начать счет с произвольного числа.Или еще некоторые счетчики по разному фильтруют 'Reload'. Да и мало ли? Ну а иногда вам хочется просто сделать другой дизайн цифр. То если вы CGI-програмист то возможно имеет смысл написать свой счетчик. И делать с ним что захочется. Вот я так-же написал..... Скрипт данного счетчика обслужевает несколько счетчиков ,им вы присваиваете идентификаторы. Поэтому вы спокойно можете втыкать независимые счетчики в разные страницы сайта и даже давать это делать друзьям. В общем он прост в использовании:<IMG src="cgi-bin/counter.cgi?id=name">, Где name -любое уникальное имя идентифицирующее счетчик.Вытакже можете задать необязательный параметр dig который задает количество цифр в счетчике ,Например: <IMG src="cgi-bin/counter.cgi?id=doom2&dig=9">. .gif'ы в счетчике с прозрачными областями.Что дает дополнительную гибкость к примеру для улучшения внешнего вида с помощью другого фона его иногда имеет смысл запихнуть в "таблицу": <TABLE><TR><TD bgcolor="white"><IMG src="counter.gif"></TD></TR></TABLE>

 

Свои данные он пишет примерно в такой файл counter.dat:

doom2

4 127.0.0.1 906992351

quake2

1 127.0.0.1 906992700

quake

3 127.0.0.1 906992668

doom

1 127.0.0.1 906991960

Вы спросите,зачем столько информации? Чтобы отфильтровывать нажатия Reload. Если с одного IP-адреса между заходами промежуток меньше чем 30 секунд,то счетчик не инкрементируется (Так например поступает счетчик в Rambler'е). Теперь об исходнике.Скрипт получился великоват,потому,что я вместо чтения из файлов решил .gif'ы запихнуть в сам скрипт.Выглядит громоздко , зато пашет как трактор ;))!!

#!/usr/bin/perl

#counter.cgi

$gifheader="GIF89a";

#Использую 14x16 .gif

$digx_size=14;

$digy_size=16;

$datafile="counter.dat";

######################################################

$GifData[0]=

"GIF89a\x0E\x00\x10\x00\xEF\x00\x00C\x03\x03\x03\xFF\xFF\x2F\x2F\x2F\x8B\x03\x03\x7F\x03\x03\x9B\x03\x03\xA7".

"\x03\x03\x5B\x03\x03g\x03\x03\xBF\x03\x03s\x03\x03\xB3\x03\x03O\x03\x03\xCB\x03\x03\xFF\xB7\xB7\x3F\x2B\x1BG3\x23".

"\xF3\xA3\xA3\xEB\x97\x97O\x3B\x2B\xF7\xAB\xAB\xDF\x87\x87\xE7\x8F\x8F\xD3ss\xCBkk\xC7cc\xBF\x5B\x5B\xBBW".

"W\xDB\x7B\x7B\xAFGG\xA7\x3F\x3F\xA3\x3B\x3B\x9B33\xB3OO\x8F\x2B\x2B\x8B\x23\x23\x83\x1F\x1F\x7F\x1B\x1Bw".

"\x17\x17s\x13\x13k\x0F\x0Fg\x0B\x0B_\x07\x07\x5B\x07\x07S\x07\x07\x97\x2F\x2FG\x03\x03C\x03\x03\xFF\xEB\xDF".

"\xFF\xE3\xD3\xFF\xDB\xC7\xFF\xD3\xBB\xFF\xCF\xB3\xFF\xC7\xA7\xFF\xBF\x9B\xFF\xBB\x93\xFF\xB3\x83\xF7\xAB\x7B\xEF\xA3s\xE7\x9B".

"k\xDF\x93c\xD7\x8B\x5B\xCF\x83S\xCB\x7FO\xBF\x7BK\xB3sG\xABoC\xA3k\x3F\x9Bc\x3B\x8F_7\x87".

"W3\x7FS\x2FwO\x2BkG\x27_C\x23S\x3F\x1FK7\x1B\x3F\x2F\x173\x2B\x13\x2B\x23\x0F\xEF\xEF\xEF".

"\xE7\xE7\xE7\xDF\xDF\xDF\xDB\xDB\xDB\xD3\xD3\xD3\xCB\xCB\xCB\xC7\xC7\xC7\xBF\xBF\xBF\xB7\xB7\xB7\xB3\xB3\xB3\xAB\xAB\xAB\xA7\xA7".

"\xA7\x9F\x9F\x9F\x97\x97\x97\x17\x1F\x07\x2F7\x1F\x0F\x17\x03\x23\x2B\x0F\x07\x07\x07oookkkccc\x5B".

"\x5B\x5BWWWOOOGGGCCC\x3B\x3B\x3B777\x13\x13\x13\x27\x27\x27\x23\x23\x23w\xFFo".

"o\xEFgg\xDF__\xCFW\x5B\xBFOS\xAFGK\x9F\x3FC\x937\x3F\x83\x2F7s\x2B\x2Fc\x23\x1B\x1B".

"\x1B\x1FC\x17\x173\x0F\x13\x23\x0B\x0B\x17\x07\x03\x03\x03\xB7\x9F\x87\xAF\x97\x7F\xA7\x8Fw\x9F\x87o\x9B\x7Fk\x93".

"\x7Bc\x8Bs\x5B\x83kW\x7BcOw_KoWCgS\x3F_K7WC3S\x3F\x2F\x9F\x83c".

"\x8FwS\x83kKw_\x3FgS3\x5BG\x2BO\x3B\x23C3\x1B\x7B\x7FcosWgkO\x5Bc".

"GSW\x3BGO3\x3FG\x2B7\x3F\x27\xFF\xFFs\xEB\xDBW\xD7\xBBC\xC3\x9B\x2F\xAF\x7B\x1F\x9B\x5B\x13\x87".

"C\x07s\x2B\x03\xFF\xFF\xFF\xFF\xDB\xDB\xFF\xBB\xBB\xFF\x9B\x9B\xFF\x7B\x7B\xFF__\xFF\x3F\x3F\xFF\x1F\x1F\xFF\x03\x03".

"\xEF\x03\x03\xE3\x03\x03\xD7\x03\x03\x83\x83\x83\x0B\x0B\x0B\x7F\x7F\x7F\xFF\xFF\xFFKKK\x17\x0F\x07\x1F\x17\x0Bww".

"w\x93\x93\x93\x8B\x8B\x8BO\x03\x03\x27S\x1B\xE7\xE7\xFF\xC7\xC7\xFF\xAB\xAB\xFF\x8F\x8F\xFFss\xFFSS\xFF7".

"7\xFF\x1B\x1B\xFF\x03\x03\xFF\x03\x03\xE3\x03\x03\xCB\x03\x03\xB3\x03\x03\x9B\x03\x03\x83\x03\x03k\x03\x03S\xFF\xFF\xFF".

"\xFF\xEB\xDB\xFF\xD7\xBB\xFF\xC7\x9B\xFF\xB3\x7B\xFF\xA3\x5B\xFF\x8F\x3B\xFF\x7F\x1B\xF3s\x17\xEBo\x0F\xDFg\x0F\xD7_".

"\x0B\xCBW\x07\xC3O\x03\xB7G\x03\xAFC\x03\xFF\xFF\xFF\xFF\xFF\xD7\xFF\xFF\xB3\xFF\xFF\x8F\xFF\xFFk\xFF\xFFG\xFF".

"\xFF\x23\xFF\xFF\x03\xA7\x3F\x03\x9F7\x03\x93\x2F\x03\x87\x23\x03O\x3B\x27C\x2F\x1B7\x23\x13\x2F\x1B\x0B\x03\x03S".

"\x03\x03G\x03\x03\x3B\x03\x03\x2F\x03\x03\x23\x03\x03\x17\x03\x03\x0B\xBF\xA7\x8F\xFF\x9FC\xFF\xE7K\xFF\x7B\xFF\xFF\x03".

"\xFF\xCF\x03\xCF\x9F\x03\x9Bo\x03k\xA7kk\x21\xF9\x04\x01\x00\x00\x01\x00\x2C\x00\x00\x00\x00\x0E\x00\x10\x00\x00\x08".

"\x94\x00\x03\x08\x0C\x00\xA0\x60\xC1\x81\x08\x0B\x12\x28\xB0\x60\x40\x81\x83\x03\x01\x1C\x28\xA0\xC0\xE1\x01\x05\x06\x0E\x00\x88".

"h\xC0\x00\x81\x01\x03\x10\x20H\xF0P\x00A\x02\x1D\x09\x20\x00\xC0\xE0\x00I\x02\x1B\x01\x60\x1C\x00S\x00\x80\x91".

"\x05\x06\x00\xB0y\xC0\x00\xCD\x98\x0A\x16\x14\xA8\x291\xA7N\x82\x0A\x12\xFC\xE4i4\x26\x81\x069w\xCA4\xD0".

"\xD0\x29I\x9D6Q6\x7C\xD8\xF0\xE5\xCE\x93\x0B\x3E\xA6L\x60\x60\xA7I\x96\x08\x14\x20\x28\xE0\x91\x80F\x93\x02".

"\x0B\x228\x10R\xA3Y\x846\x0D\x9A\x85\x8B0\x80\x80\xBF\x7F\x11\x06\x04\x00\x3B";

$GifData[1]=

"GIF89a\x0B\x00\x10\x00\xEF\x00\x00C\x03\x03\x03\xFF\xFF\x2F\x2F\x2F\xBF\x03\x03\x8B\x03\x03\xCB\x03\x03\x9B".

"\x03\x03\xA7\x03\x03\xB3\x03\x03\x7F\x03\x03\xD7\x03\x03s\x03\x03G3\x23\x3F\x2B\x1B\x0F\x17\x03O\x3B\x2B\xFF\xB7\xB7".

"\xF7\xAB\xAB\xF3\xA3\xA3\xEB\x97\x97\xE7\x8F\x8F\xDF\x87\x87\xDB\x7B\x7B\xD3ss\xCBkk\xC7cc\xBF\x5B\x5B\xBBW".

"W\xB3OO\xAFGG\xA7\x3F\x3F\xA3\x3B\x3B\x9B33\x97\x2F\x2F\x8F\x2B\x2B\x8B\x23\x23\x83\x1F\x1F\x7F\x1B\x1Bw".

"\x17\x17s\x13\x13k\x0F\x0Fg\x0B\x0B_\x07\x07\x5B\x07\x07S\x07\x07O\x03\x03G\x03\x03C\x03\x03\xFF\xEB\xDF".

"\xFF\xE3\xD3\xFF\xDB\xC7\xFF\xD3\xBB\xFF\xCF\xB3\xFF\xC7\xA7\xFF\xBF\x9B\xFF\xBB\x93\xFF\xB3\x83\xF7\xAB\x7B\xEF\xA3s\xE7\x9B".

"k\xDF\x93c\xD7\x8B\x5B\xCF\x83S\xCB\x7FO\xBF\x7BK\xB3sG\xABoC\xA3k\x3F\x9Bc\x3B\x8F_7\x87".

"W3\x7FS\x2FwO\x2BkG\x27_C\x23S\x3F\x1FK7\x1B\x3F\x2F\x173\x2B\x13\x2B\x23\x0F\xEF\xEF\xEF".

"\xE7\xE7\xE7\xDF\xDF\xDF\xDB\xDB\xDB\xD3\xD3\xD3\xCB\xCB\xCB\xC7\xC7\xC7\xBF\xBF\xBF\xB7\xB7\xB7\xB3\xB3\xB3\xAB\xAB\xAB\xA7\xA7".

"\xA7\x9F\x9F\x9F\x23\x2B\x0F\x93\x93\x93\x2F7\x1F\x83\x83\x83\x7F\x7F\x7F\x17\x1F\x07oookkkccc\x5B".

"\x5B\x5BWWWOOOGGGCCC\x3B\x3B\x3B777\x07\x07\x07\x27\x27\x27\x23\x23\x23w\xFFo".

"o\xEFgg\xDF__\xCFW\x5B\xBFOS\xAFGK\x9F\x3FC\x937\x3F\x83\x2F7s\x2B\x2Fc\x23\x0B\x0B".

"\x0B\x1FC\x17\x173\x0F\x13\x23\x0B\x0B\x17\x07\x03\x03\x03\xB7\x9F\x87\xAF\x97\x7F\xA7\x8Fw\x9F\x87o\x9B\x7Fk\x93".

"\x7Bc\x8Bs\x5B\x83kW\x7BcOw_KoWCgS\x3F_K7WC3S\x3F\x2F\x9F\x83c".

"\x8FwS\x83kKw_\x3FgS3\x5BG\x2BO\x3B\x23C3\x1B\x7B\x7FcosWgkO\x5Bc".

"GSW\x3BGO3\x3FG\x2B7\x3F\x27\xFF\xFFs\xEB\xDBW\xD7\xBBC\xC3\x9B\x2F\xAF\x7B\x1F\x9B\x5B\x13\x87".

"C\x07s\x2B\x03\xFF\xFF\xFF\xFF\xDB\xDB\xFF\xBB\xBB\xFF\x9B\x9B\xFF\x7B\x7B\xFF__\xFF\x3F\x3F\xFF\x1F\x1F\xFF\x03\x03".

"\xEF\x03\x03\xE3\x03\x03www\x13\x13\x13\x1B\x1B\x1B\xFF\xFF\xFFKKK\x17\x0F\x07\x1F\x17\x0B\x97\x97\x97\x8B\x8B".

"\x8Bg\x03\x03\x5B\x03\x03O\x03\x03\x27S\x1B\xE7\xE7\xFF\xC7\xC7\xFF\xAB\xAB\xFF\x8F\x8F\xFFss\xFFSS\xFF7".

"7\xFF\x1B\x1B\xFF\x03\x03\xFF\x03\x03\xE3\x03\x03\xCB\x03\x03\xB3\x03\x03\x9B\x03\x03\x83\x03\x03k\x03\x03S\xFF\xFF\xFF".

"\xFF\xEB\xDB\xFF\xD7\xBB\xFF\xC7\x9B\xFF\xB3\x7B\xFF\xA3\x5B\xFF\x8F\x3B\xFF\x7F\x1B\xF3s\x17\xEBo\x0F\xDFg\x0F\xD7_".

"\x0B\xCBW\x07\xC3O\x03\xB7G\x03\xAFC\x03\xFF\xFF\xFF\xFF\xFF\xD7\xFF\xFF\xB3\xFF\xFF\x8F\xFF\xFFk\xFF\xFFG\xFF".

"\xFF\x23\xFF\xFF\x03\xA7\x3F\x03\x9F7\x03\x93\x2F\x03\x87\x23\x03O\x3B\x27C\x2F\x1B7\x23\x13\x2F\x1B\x0B\x03\x03S".

"\x03\x03G\x03\x03\x3B\x03\x03\x2F\x03\x03\x23\x03\x03\x17\x03\x03\x0B\xBF\xA7\x8F\xFF\x9FC\xFF\xE7K\xFF\x7B\xFF\xFF\x03".

"\xFF\xCF\x03\xCF\x9F\x03\x9Bo\x03k\xA7kk\x21\xF9\x04\x01\x00\x00\x01\x00\x2C\x00\x00\x00\x00\x0B\x00\x10\x00\x00\x08".

"g\x00\x03\x08\x04\x40\xB0\x20\x00\x81\x01\x00\x1C\x40P\xA0\x80\x82\x03\x00\x04\x24\x24p\xC0\xC0\x80\x01\x08\x08D\x04".

"\x40\x80\xE2\x81\x86\x034\x0A0\xC8\xB0\x40\xC8\x88\x01\x04\x8C\xFC\xD8P\x24B\x85\x03Z\xA2\x1Ch\xF1\xA2K\x9A".

"\x17OJ\xC4isf\xC2\x9A\x03\x12\xF8\x04\x60\x00\x81Q\xA1\x3B\x7F\x22\xB8\x88\xF4\x25\x01\x03\x1D\x17\x0C5H".

"0iJ\x95X\x05\x04\x04\x00\x3B";

$GifData[2]=

"GIF89a\x0E\x00\x10\x00\xEF\x00\x00C\x03\x03\x03\xFF\xFF\x2F\x2F\x2F\x7F\x03\x03\xA7\x03\x03\x9B\x03\x03\xB3".

"\x03\x03\xBF\x03\x03\x8B\x03\x03\xEF\x03\x03\xCB\x03\x03s\x03\x03\xD7\x03\x03\xE3\x03\x03g\x03\x03\xFF\xB7\xB7\xF7\xAB\xAB".

"\xF3\xA3\xA3\x3F\x2B\x1B\xEB\x97\x97\xE7\x8F\x8F\xDF\x87\x87\xDB\x7B\x7B\xD3ss\xCBkk\xC7cc\xBF\x5B\x5B\xBBW".

"W\xB3OO\xAFGG\xA7\x3F\x3F\xA3\x3B\x3B\x9B33\x97\x2F\x2F\x8F\x2B\x2B\x8B\x23\x23\x83\x1F\x1F\x7F\x1B\x1Bw".

"\x17\x17s\x13\x13k\x0F\x0Fg\x0B\x0B_\x07\x07\x5B\x07\x07S\x07\x07O\x03\x03G\x03\x03C\x03\x03\xFF\xEB\xDF".

"\xFF\xE3\xD3\xFF\xDB\xC7\xFF\xD3\xBB\xFF\xCF\xB3\xFF\xC7\xA7\xFF\xBF\x9B\xFF\xBB\x93\xFF\xB3\x83\xF7\xAB\x7B\xEF\xA3s\xE7\x9B".

"k\xDF\x93c\xD7\x8B\x5B\xCF\x83S\xCB\x7FO\xBF\x7BK\xB3sG\xABoC\xA3k\x3F\x9Bc\x3B\x8F_7\x87".

"W3\x7FS\x2FwO\x2BkG\x27_C\x23S\x3F\x1FK7\x1B\x3F\x2F\x173\x2B\x13\x2B\x23\x0F\xEF\xEF\xEF".

"\xE7\xE7\xE7\xDF\xDF\xDF\xDB\xDB\xDB\xD3\xD3\xD3\xCB\xCB\xCB\xC7\xC7\xC7\xBF\xBF\xBF\xB7\xB7\xB7\xB3\xB3\xB3\xAB\xAB\xAB\xA7\xA7".

"\xA7\x9F\x9F\x9F\x2F7\x1FO\x3B\x2B\x0F\x17\x03G3\x23\x7F\x7F\x7F\x23\x2B\x0Foookkkccc\x5B".

"\x5B\x5BWWWOOOGGGCCC\x3B\x3B\x3B777\x0B\x0B\x0B\x27\x27\x27\x23\x23\x23w\xFFo".

"o\xEFgg\xDF__\xCFW\x5B\xBFOS\xAFGK\x9F\x3FC\x937\x3F\x83\x2F7s\x2B\x2Fc\x23\x13\x13".

"\x13\x1FC\x17\x173\x0F\x13\x23\x0B\x0B\x17\x07\x03\x03\x03\xB7\x9F\x87\xAF\x97\x7F\xA7\x8Fw\x9F\x87o\x9B\x7Fk\x93".

"\x7Bc\x8Bs\x5B\x83kW\x7BcOw_KoWCgS\x3F_K7WC3S\x3F\x2F\x9F\x83c".

"\x8FwS\x83kKw_\x3FgS3\x5BG\x2BO\x3B\x23C3\x1B\x7B\x7FcosWgkO\x5Bc".

"GSW\x3BGO3\x3FG\x2B7\x3F\x27\xFF\xFFs\xEB\xDBW\xD7\xBBC\xC3\x9B\x2F\xAF\x7B\x1F\x9B\x5B\x13\x87".

"C\x07s\x2B\x03\xFF\xFF\xFF\xFF\xDB\xDB\xFF\xBB\xBB\xFF\x9B\x9B\xFF\x7B\x7B\xFF__\xFF\x3F\x3F\xFF\x1F\x1F\xFF\x03\x03".

"\x17\x1F\x07\x83\x83\x83\x07\x07\x07www\x1B\x1B\x1B\xFF\xFF\xFFKKK\x17\x0F\x07\x1F\x17\x0B\x97\x97\x97\x93\x93".

"\x93\x8B\x8B\x8B\x5B\x03\x03O\x03\x03\x27S\x1B\xE7\xE7\xFF\xC7\xC7\xFF\xAB\xAB\xFF\x8F\x8F\xFFss\xFFSS\xFF7".

"7\xFF\x1B\x1B\xFF\x03\x03\xFF\x03\x03\xE3\x03\x03\xCB\x03\x03\xB3\x03\x03\x9B\x03\x03\x83\x03\x03k\x03\x03S\xFF\xFF\xFF".

"\xFF\xEB\xDB\xFF\xD7\xBB\xFF\xC7\x9B\xFF\xB3\x7B\xFF\xA3\x5B\xFF\x8F\x3B\xFF\x7F\x1B\xF3s\x17\xEBo\x0F\xDFg\x0F\xD7_".

"\x0B\xCBW\x07\xC3O\x03\xB7G\x03\xAFC\x03\xFF\xFF\xFF\xFF\xFF\xD7\xFF\xFF\xB3\xFF\xFF\x8F\xFF\xFFk\xFF\xFFG\xFF".

"\xFF\x23\xFF\xFF\x03\xA7\x3F\x03\x9F7\x03\x93\x2F\x03\x87\x23\x03O\x3B\x27C\x2F\x1B7\x23\x13\x2F\x1B\x0B\x03\x03S".

"\x03\x03G\x03\x03\x3B\x03\x03\x2F\x03\x03\x23\x03\x03\x17\x03\x03\x0B\xBF\xA7\x8F\xFF\x9FC\xFF\xE7K\xFF\x7B\xFF\xFF\x03".

"\xFF\xCF\x03\xCF\x9F\x03\x9Bo\x03k\xA7kk\x21\xF9\x04\x01\x00\x00\x01\x00\x2C\x00\x00\x00\x00\x0E\x00\x10\x00\x00\x08".

"\x8F\x00\x03\x00\x18Hp\x60\x80\x83\x08\x01\x20\x20\xC0\x40\x81\x02\x03\x04\x1C\x00\x40\x28p\xC0B\x03\x05\x0AX\x1C".

"0\xF1\x20\x80\x05\x08\x16\x0C\x18\xB0\x20\xE3\x01\x8E\x1E\x0B\x0E\x1C\x40\xE0\x40\x01\x00\x02\x0E\x0AP9\xC0\x80\x82\x97".

"1\x2B\x2Ah\xD0\xF0\xC0\x01\x03\x1Cc\x02\x18P\x00\x28\x01\x03\x3E\x83\xCE\x24z\xD4\x81\xC5\x900\x85b\xD4\xA8".

"R\x40N\x00\x10\x09pT\xD9\x11\x00\x81\xA3\x04\x12\x88\x15k\x00\xA6\xC0\xAF\x07Z\xFAd\xD0\x00g\xC5\x91\x20".

"\x11\x14\xF8\x8A\xC0\x2CW\xAE9\xAD\xEA\xDD\xAB7\x40\x40\x00\x3B";

$GifData[3]=

"GIF89a\x0E\x00\x10\x00\xEF\x00\x00C\x03\x03\x03\xFF\xFF\x2F\x2F\x2Fs\x03\x03\xBF\x03\x03\xB3\x03\x03\xE3".

"\x03\x03\xCB\x03\x03\x8B\x03\x03\x9B\x03\x03\xD7\x03\x03\xEF\x03\x03\xA7\x03\x03g\x03\x03\x7F\x03\x03G3\x23\xFF\xB7\xB7".

"\xF7\xAB\xAB\xF3\xA3\xA3\xEB\x97\x97\xE7\x8F\x8F\xDF\x87\x87\xDB\x7B\x7B\xD3ss\xCBkk\xC7cc\xBF\x5B\x5B\xBBW".

"W\xB3OO\xAFGG\xA7\x3F\x3F\xA3\x3B\x3BO\x3B\x2B\x3F\x2B\x1B\x8F\x2B\x2B\x8B\x23\x23\x83\x1F\x1F\x7F\x1B\x1Bw".

"\x17\x17s\x13\x13k\x0F\x0Fg\x0B\x0B_\x07\x07\x5B\x07\x07S\x07\x07O\x03\x03G\x03\x03C\x03\x03\xFF\xEB\xDF".

"\xFF\xE3\xD3\xFF\xDB\xC7\xFF\xD3\xBB\x9B33\x97\x2F\x2F\xFF\xCF\xB3\xFF\xBB\x93\xFF\xB3\x83\xF7\xAB\x7B\xEF\xA3s\xE7\x9B".

"k\xDF\x93c\xD7\x8B\x5B\xCF\x83S\xCB\x7FO\xBF\x7BK\xB3sG\xABoC\xA3k\x3F\x9Bc\x3B\x8F_7\x87".

"W3\x7FS\x2FwO\x2BkG\x27_C\x23S\x3F\x1FK7\x1B\x3F\x2F\x173\x2B\x13\x2B\x23\x0F\xEF\xEF\xEF".

"\xE7\xE7\xE7\xDF\xDF\xDF\xDB\xDB\xDB\xD3\xD3\xD3\xCB\xCB\xCB\xC7\xC7\xC7\xBF\xBF\xBF\xB7\xB7\xB7\xB3\xB3\xB3\xAB\xAB\xAB\xA7\xA7".

"\xA7\x9F\x9F\x9F\xFF\xC7\xA7\xFF\xBF\x9B\xFF\xFF\xFF\x83\x83\x83\x17\x1F\x07\x0F\x17\x03oookkkccc\x5B".

"\x5B\x5BWWWOOOGGGCCC\x3B\x3B\x3B777\x17\x0F\x07\x27\x27\x27\x23\x23\x23w\xFFo".

"o\xEFgg\xDF__\xCFW\x5B\xBFOS\xAFGK\x9F\x3FC\x937\x3F\x83\x2F7s\x2B\x2Fc\x23\x1F\x17".

"\x0B\x1FC\x17\x173\x0F\x13\x23\x0B\x0B\x17\x07\x03\x03\x03\xB7\x9F\x87\xAF\x97\x7F\xA7\x8Fw\x9F\x87o\x9B\x7Fk\x93".

"\x7Bc\x8Bs\x5B\x83kW\x7BcOw_KoWCgS\x3F_K7WC3S\x3F\x2F\x9F\x83c".

"\x8FwS\x83kKw_\x3FgS3\x5BG\x2BO\x3B\x23C3\x1B\x7B\x7FcosWgkO\x5Bc".

"GSW\x3BGO3\x3FG\x2B7\x3F\x27\xFF\xFFs\xEB\xDBW\xD7\xBBC\xC3\x9B\x2F\xAF\x7B\x1F\x9B\x5B\x13\x87".

"C\x07s\x2B\x03\xFF\xFF\xFF\xFF\xDB\xDB\xFF\xBB\xBB\xFF\x9B\x9B\xFF\x7B\x7B\xFF__\xFF\x3F\x3F\xFF\x1F\x1F\xFF\x03\x03".

"\x7F\x7F\x7F\x23\x2B\x0F\x2F7\x1F\x07\x07\x07\x0B\x0B\x0B\x13\x13\x13www\x1B\x1B\x1BKKK\x97\x97\x97\x93\x93".

"\x93\x8B\x8B\x8B\x5B\x03\x03O\x03\x03\x27S\x1B\xE7\xE7\xFF\xC7\xC7\xFF\xAB\xAB\xFF\x8F\x8F\xFFss\xFFSS\xFF7".

"7\xFF\x1B\x1B\xFF\x03\x03\xFF\x03\x03\xE3\x03\x03\xCB\x03\x03\xB3\x03\x03\x9B\x03\x03\x83\x03\x03k\x03\x03S\xFF\xFF\xFF".

"\xFF\xEB\xDB\xFF\xD7\xBB\xFF\xC7\x9B\xFF\xB3\x7B\xFF\xA3\x5B\xFF\x8F\x3B\xFF\x7F\x1B\xF3s\x17\xEBo\x0F\xDFg\x0F\xD7_".

"\x0B\xCBW\x07\xC3O\x03\xB7G\x03\xAFC\x03\xFF\xFF\xFF\xFF\xFF\xD7\xFF\xFF\xB3\xFF\xFF\x8F\xFF\xFFk\xFF\xFFG\xFF".

"\xFF\x23\xFF\xFF\x03\xA7\x3F\x03\x9F7\x03\x93\x2F\x03\x87\x23\x03O\x3B\x27C\x2F\x1B7\x23\x13\x2F\x1B\x0B\x03\x03S".

"\x03\x03G\x03\x03\x3B\x03\x03\x2F\x03\x03\x23\x03\x03\x17\x03\x03\x0B\xBF\xA7\x8F\xFF\x9FC\xFF\xE7K\xFF\x7B\xFF\xFF\x03".

"\xFF\xCF\x03\xCF\x9F\x03\x9Bo\x03k\xA7kk\x21\xF9\x04\x01\x00\x00\x01\x00\x2C\x00\x00\x00\x00\x0E\x00\x10\x00\x00\x08".

"\x85\x00\x01\x08\x1C80\x80A\x83\x00\x10\x280\xC0\xF0\x00\x81\x01\x02\x0F\x02p\xC0\xA0\x40\x01\x02\x16\x19\x24h".

"\x00\x00\xE1\x80\x8F\x20\x07\x10\x20\x90\x00\x80\x80\x00\x04\x09\x128\x90\x00\xA2A\x01\x02R\xAEd\x80\xC0\xA4\xC4\x03".

"\x0D\x09\x28\x20P\xF3\x24\xC2\x91\x16u\xF2\xB4\xE9\xF1\x23\x82\x02\x06\x86\xFAD\xA9\xD2\x40\x81\x9E\x29\x07\x12H\xCA".

"1f\x81\x05X\x15\x1Cp\xA8\xA0\x24L\x00\x09\x82Z\xBC\xB8\xD1\x26\x80\x90\x21\x05\xC2d\x1A\xD5\xE4\xDA\x970".

"\xE3\xC6\x3D\x18\x20\x20\x00\x3B";

$GifData[4]=

"GIF89a\x0E\x00\x10\x00\xEF\x00\x00C\x03\x03\x03\xFF\xFF\x2F\x2F\x2F\x7F\x03\x03s\x03\x03\x8B\x03\x03g".

"\x03\x03\xA7\x03\x03\x9B\x03\x03\xB3\x03\x03\xBF\x03\x03\xD7\x03\x03\xE3\x03\x03\xEF\x03\x03S\x07\x07\x5B\x03\x03C\x03\x03".

"\xCBkk\xEB\x97\x97\xE7\x8F\x8F\xDF\x87\x87\xF7\xAB\xAB\xFF\xB7\xB7\xDB\x7B\x7B\xF3\xA3\xA3\xC7cc\xBF\x5B\x5B\xBBW".

"W\xB3OO\xD3ss\xA7\x3F\x3F\xAFGG\x9B33\x97\x2F\x2F\x8F\x2B\x2B\x8B\x23\x23\x83\x1F\x1F\x7F\x1B\x1Bw".

"\x17\x17s\x13\x13k\x0F\x0Fg\x0B\x0B_\x07\x07\x5B\x07\x07\xA3\x3B\x3BO\x03\x03G\x03\x03\x83\x83\x83\xFF\xEB\xDF".

"\xFF\xE3\xD3\xFF\xDB\xC7\xFF\xD3\xBB\xFF\xCF\xB3\xFF\xC7\xA7\xFF\xBF\x9B\xFF\xBB\x93\xFF\xB3\x83\xF7\xAB\x7B\xEF\xA3s\xE7\x9B".

"k\xDF\x93c\xD7\x8B\x5B\xCF\x83S\xCB\x7FO\xBF\x7BK\xB3sG\xABoC\xA3k\x3F\x9Bc\x3B\x8F_7\x87".

"W3\x7FS\x2FwO\x2BkG\x27_C\x23S\x3F\x1FK7\x1B\x3F\x2F\x173\x2B\x13\x2B\x23\x0F\xEF\xEF\xEF".

"\xE7\xE7\xE7\xDF\xDF\xDF\xDB\xDB\xDB\xD3\xD3\xD3\xCB\xCB\xCB\xC7\xC7\xC7\xBF\xBF\xBF\xB7\xB7\xB7\xB3\xB3\xB3\xAB\xAB\xAB\xA7\xA7".

"\xA7\x9F\x9F\x9F\x97\x97\x97\x0F\x17\x03G3\x23\x3F\x2B\x1B\x7F\x7F\x7FwwwoooO\x3B\x2Bccc\x5B".

"\x5B\x5BWWWOOOGGGCCC\x3B\x3B\x3B777\x23\x2B\x0F\x27\x27\x27\x23\x23\x23w\xFFo".

"o\xEFgg\xDF__\xCFW\x5B\xBFOS\xAFGK\x9F\x3FC\x937\x3F\x83\x2F7s\x2B\x2Fc\x23\x2F7".

"\x1F\x1FC\x17\x173\x0F\x13\x23\x0B\x0B\x17\x07\x03\x03\x03\xB7\x9F\x87\xAF\x97\x7F\xA7\x8Fw\x9F\x87o\x9B\x7Fk\x93".

"\x7Bc\x8Bs\x5B\x83kW\x7BcOw_KoWCgS\x3F_K7WC3S\x3F\x2F\x9F\x83c".

"\x8FwS\x83kKw_\x3FgS3\x5BG\x2BO\x3B\x23C3\x1B\x7B\x7FcosWgkO\x5Bc".

"GSW\x3BGO3\x3FG\x2B7\x3F\x27\xFF\xFFs\xEB\xDBW\xD7\xBBC\xC3\x9B\x2F\xAF\x7B\x1F\x9B\x5B\x13\x87".

"C\x07s\x2B\x03\xFF\xFF\xFF\xFF\xDB\xDB\xFF\xBB\xBB\xFF\x9B\x9B\xFF\x7B\x7B\xFF__\xFF\x3F\x3F\xFF\x1F\x1F\xFF\x03\x03".

"\x17\x1F\x07kkk\x07\x07\x07\xCB\x03\x03\x0B\x0B\x0B\x13\x13\x13\x1B\x1B\x1B\xFF\xFF\xFFKKK\x17\x0F\x07\x1F\x17".

"\x0B\x93\x93\x93\x8B\x8B\x8BO\x03\x03\x27S\x1B\xE7\xE7\xFF\xC7\xC7\xFF\xAB\xAB\xFF\x8F\x8F\xFFss\xFFSS\xFF7".

"7\xFF\x1B\x1B\xFF\x03\x03\xFF\x03\x03\xE3\x03\x03\xCB\x03\x03\xB3\x03\x03\x9B\x03\x03\x83\x03\x03k\x03\x03S\xFF\xFF\xFF".

"\xFF\xEB\xDB\xFF\xD7\xBB\xFF\xC7\x9B\xFF\xB3\x7B\xFF\xA3\x5B\xFF\x8F\x3B\xFF\x7F\x1B\xF3s\x17\xEBo\x0F\xDFg\x0F\xD7_".

"\x0B\xCBW\x07\xC3O\x03\xB7G\x03\xAFC\x03\xFF\xFF\xFF\xFF\xFF\xD7\xFF\xFF\xB3\xFF\xFF\x8F\xFF\xFFk\xFF\xFFG\xFF".

"\xFF\x23\xFF\xFF\x03\xA7\x3F\x03\x9F7\x03\x93\x2F\x03\x87\x23\x03O\x3B\x27C\x2F\x1B7\x23\x13\x2F\x1B\x0B\x03\x03S".

"\x03\x03G\x03\x03\x3B\x03\x03\x2F\x03\x03\x23\x03\x03\x17\x03\x03\x0B\xBF\xA7\x8F\xFF\x9FC\xFF\xE7K\xFF\x7B\xFF\xFF\x03".

"\xFF\xCF\x03\xCF\x9F\x03\x9Bo\x03k\xA7kk\x21\xF9\x04\x01\x00\x00\x01\x00\x2C\x00\x00\x00\x00\x0E\x00\x10\x00\x00\x08".

"\x8B\x00\x01\x08\x1C\x18\x60\x20A\x00\x05\x184H\x00\xA0\xE0\x81\x05\x0B\x10\x00\x10\x00\x60\x40\x82\x04\x05\x1AV\x3C".

"\x80\x20\x23\xC5\x01\x07\x0E\x0C\xD08\x00A\xC7\x89\x08C\x8E\x2C8\xA0\x40\x81\x91\x14\x0B\x98\x1C\x29\x90\x40K\x98".

"\x08\x2F\x16H\x10\x92\x80O\x9C\x05\x14\x28\xE0\xF8r\x80O\x03\x28\x83\xF2\x1C\x60\xC0\xC0O\xA4\x14\x0D\x0Et\xCA".

"tb\x80\x00\x02\xB2f\x05\x40\x95\x80\xD5\xAB\x60\x0BR\x85\x1A\x16\x2CW\x02\x05\xBC\x0A\x28\x7B\x15\x80\x83\x07\x04".

"\x0C\x40X\xCBV\xEAW\xB6Z\xB5\x06\x04\x00\x3B";

$GifData[5]=

"GIF89a\x0E\x00\x10\x00\xEF\x00\x00C\x03\x03\x2F\x2F\x2F\x03\xFF\xFF\x7F\x03\x03\x9B\x03\x03\xA7\x03\x03\x8B".

"\x03\x03s\x03\x03\xBF\x03\x03\xB3\x03\x03\xD7\x03\x03\xCB\x03\x03\xEF\x03\x03\xE3\x03\x03\x3F\x2B\x1B\x23\x2B\x0F\xFF\xB7\xB7".

"\xF7\xAB\xAB\xF3\xA3\xA3\xEB\x97\x97\xE7\x8F\x8F\xDF\x87\x87\xDB\x7B\x7B\xD3ss\xCBkk\xC7cc\xBF\x5B\x5B\xBBW".

"W\xB3OO\xAFGG\xA7\x3F\x3F\xA3\x3B\x3B\x9B33\x97\x2F\x2F\x8F\x2B\x2B\x8B\x23\x23\x83\x1F\x1F\x7F\x1B\x1Bw".

"\x17\x17s\x13\x13k\x0F\x0Fg\x0B\x0B_\x07\x07\x5B\x07\x07S\x07\x07O\x03\x03G\x03\x03C\x03\x03\xFF\xEB\xDF".

"\xFF\xE3\xD3\xFF\xDB\xC7\xFF\xD3\xBB\xFF\xCF\xB3\xFF\xC7\xA7\xFF\xBF\x9B\xFF\xBB\x93\xFF\xB3\x83\xF7\xAB\x7B\xEF\xA3s\xE7\x9B".

"k\xDF\x93c\xD7\x8B\x5B\xCF\x83S\xCB\x7FO\xBF\x7BK\xB3sG\xABoC\xA3k\x3F\x9Bc\x3B\x8F_7\x87".

"W3\x7FS\x2FwO\x2BkG\x27_C\x23S\x3F\x1FK7\x1B\x3F\x2F\x173\x2B\x13\x2B\x23\x0F\xEF\xEF\xEF".

"\xE7\xE7\xE7\xDF\xDF\xDF\xDB\xDB\xDB\xD3\xD3\xD3\xCB\xCB\xCB\xC7\xC7\xC7\xBF\xBF\xBF\xB7\xB7\xB7\xB3\xB3\xB3\xAB\xAB\xAB\xA7\xA7".

"\xA7\x9F\x9F\x9F\x1B\x1B\x1B\x17\x1F\x07O\x3B\x2BG3\x23\x7F\x7F\x7Fwwwoookkkccc\x5B".

"\x5B\x5BWWWOOOGGGCCC\x3B\x3B\x3B777KKK\x27\x27\x27\x23\x23\x23w\xFFo".

"o\xEFgg\xDF__\xCFW\x5B\xBFOS\xAFGK\x9F\x3FC\x937\x3F\x83\x2F7s\x2B\x2Fc\x23\x17\x0F".

"\x07\x1FC\x17\x173\x0F\x13\x23\x0B\x0B\x17\x07\x03\x03\x03\xB7\x9F\x87\xAF\x97\x7F\xA7\x8Fw\x9F\x87o\x9B\x7Fk\x93".

"\x7Bc\x8Bs\x5B\x83kW\x7BcOw_KoWCgS\x3F_K7WC3S\x3F\x2F\x9F\x83c".

"\x8FwS\x83kKw_\x3FgS3\x5BG\x2BO\x3B\x23C3\x1B\x7B\x7FcosWgkO\x5Bc".

"GSW\x3BGO3\x3FG\x2B7\x3F\x27\xFF\xFFs\xEB\xDBW\xD7\xBBC\xC3\x9B\x2F\xAF\x7B\x1F\x9B\x5B\x13\x87".

"C\x07s\x2B\x03\xFF\xFF\xFF\xFF\xDB\xDB\xFF\xBB\xBB\xFF\x9B\x9B\xFF\x7B\x7B\xFF__\xFF\x3F\x3F\xFF\x1F\x1F\xFF\x03\x03".

"\x0F\x17\x03\x0B\x0B\x0B\x2F7\x1F\x13\x13\x13\x07\x07\x07\x93\x93\x93\xFF\xFF\xFF\x1F\x17\x0B\x83\x83\x83\x97\x97\x97\x8B\x8B".

"\x8Bg\x03\x03\x5B\x03\x03O\x03\x03\x27S\x1B\xE7\xE7\xFF\xC7\xC7\xFF\xAB\xAB\xFF\x8F\x8F\xFFss\xFFSS\xFF7".

"7\xFF\x1B\x1B\xFF\x03\x03\xFF\x03\x03\xE3\x03\x03\xCB\x03\x03\xB3\x03\x03\x9B\x03\x03\x83\x03\x03k\x03\x03S\xFF\xFF\xFF".

"\xFF\xEB\xDB\xFF\xD7\xBB\xFF\xC7\x9B\xFF\xB3\x7B\xFF\xA3\x5B\xFF\x8F\x3B\xFF\x7F\x1B\xF3s\x17\xEBo\x0F\xDFg\x0F\xD7_".

"\x0B\xCBW\x07\xC3O\x03\xB7G\x03\xAFC\x03\xFF\xFF\xFF\xFF\xFF\xD7\xFF\xFF\xB3\xFF\xFF\x8F\xFF\xFFk\xFF\xFFG\xFF".

"\xFF\x23\xFF\xFF\x03\xA7\x3F\x03\x9F7\x03\x93\x2F\x03\x87\x23\x03O\x3B\x27C\x2F\x1B7\x23\x13\x2F\x1B\x0B\x03\x03S".

"\x03\x03G\x03\x03\x3B\x03\x03\x2F\x03\x03\x23\x03\x03\x17\x03\x03\x0B\xBF\xA7\x8F\xFF\x9FC\xFF\xE7K\xFF\x7B\xFF\xFF\x03".

"\xFF\xCF\x03\xCF\x9F\x03\x9Bo\x03k\xA7kk\x21\xF9\x04\x01\x00\x00\x02\x00\x2C\x00\x00\x00\x00\x0E\x00\x10\x00\x00\x08".

"\x8D\x00\x01\x08\x1CHP\xA0\x00\x01\x00\x0E\x20\x28\x90\x60\x81\x82\x87\x05\x0C\x00\x08\x80P\xE1\x00\x02\x04\x06\x18\x88".

"8\x60\x22\xC2\x01\x08\x08\x1C\x18p\xA0\xA4\x81\x03\x1E\x01\x10\x40\xD0\xB1\xA0\x40\x8A\x2A\x17\xB4\x24\x18\xA0\xE6\xC7\x04".

"\x08\x1C6P\xC0\x12\xC0\xC1\x8A\x08\x10\x24\x88\xC80\xA3\xCF\x8A\x07\x0C\x18\x20i\x60\xA8\xD1\x835\x0B\x5E\x24\x90".

"\x60\xA2K\x81\x03\x0A0\xB4\x9A\x80\x81W\x06\x0B6\x260\x1A\x40\xE5\xCE\xA0\x18\x0B\xF4\x8C\xBA\xB1\x00\x01\xA5\x24".

"\x3B\xDA\xBC\xFA\xD2\x26\xD4\x9Ax\xF1\xFE\x14\x10\x10\x00\x3B";

$GifData[6]=

"GIF89a\x0E\x00\x10\x00\xEF\x00\x00C\x03\x03\x03\xFF\xFF\x2F\x2F\x2F\xBF\x03\x03s\x03\x03\x8B\x03\x03\x9B".

"\x03\x03\xA7\x03\x03\xB3\x03\x03g\x03\x03\xCB\x03\x03\xD7\x03\x03\x7F\x03\x03\xE3\x03\x03\xFF\xB7\xB7\x3F\x2B\x1B\xF7\xAB\xAB".

"G3\x23\xF3\xA3\xA3\xEB\x97\x97\xE7\x8F\x8F\xDF\x87\x87\xDB\x7B\x7B\xD3ss\xCBkk\xC7cc\xBF\x5B\x5B\xBBW".

"W\xB3OO\xAFGG\xA7\x3F\x3F\xA3\x3B\x3B\x9B33\x97\x2F\x2F\x8F\x2B\x2B\x8B\x23\x23\x83\x1F\x1F\x7F\x1B\x1Bw".

"\x17\x17s\x13\x13k\x0F\x0Fg\x0B\x0B_\x07\x07\x5B\x07\x07S\x07\x07O\x03\x03G\x03\x03C\x03\x03\xFF\xEB\xDF".

"\xFF\xE3\xD3\xFF\xDB\xC7\xFF\xD3\xBB\xFF\xCF\xB3\xFF\xC7\xA7\xFF\xBF\x9B\xFF\xBB\x93\xFF\xB3\x83\xF7\xAB\x7B\xEF\xA3s\xE7\x9B".

"k\xDF\x93c\xD7\x8B\x5B\xCF\x83S\xCB\x7FO\xBF\x7BK\xB3sG\xABoC\xA3k\x3F\x9Bc\x3B\x8F_7\x87".

"W3\x7FS\x2FwO\x2BkG\x27_C\x23S\x3F\x1FK7\x1B\x3F\x2F\x173\x2B\x13\x2B\x23\x0F\xEF\xEF\xEF".

"\xE7\xE7\xE7\xDF\xDF\xDF\xDB\xDB\xDB\xD3\xD3\xD3\xCB\xCB\xCB\xC7\xC7\xC7\xBF\xBF\xBF\xB7\xB7\xB7\xB3\xB3\xB3\xAB\xAB\xAB\xA7\xA7".

"\xA7\x9F\x9F\x9F\x0F\x17\x03\x17\x1F\x07O\x3B\x2B\x83\x83\x83\x23\x2B\x0Fwwwoookkkccc\x5B".

"\x5B\x5BWWWOOOGGGCCC\x3B\x3B\x3B777\x17\x0F\x07\x27\x27\x27\x23\x23\x23w\xFFo".

"o\xEFgg\xDF__\xCFW\x5B\xBFOS\xAFGK\x9F\x3FC\x937\x3F\x83\x2F7s\x2B\x2Fc\x23\x1F\x17".

"\x0B\x1FC\x17\x173\x0F\x13\x23\x0B\x0B\x17\x07\x03\x03\x03\xB7\x9F\x87\xAF\x97\x7F\xA7\x8Fw\x9F\x87o\x9B\x7Fk\x93".

"\x7Bc\x8Bs\x5B\x83kW\x7BcOw_KoWCgS\x3F_K7WC3S\x3F\x2F\x9F\x83c".

"\x8FwS\x83kKw_\x3FgS3\x5BG\x2BO\x3B\x23C3\x1B\x7B\x7FcosWgkO\x5Bc".

"GSW\x3BGO3\x3FG\x2B7\x3F\x27\xFF\xFFs\xEB\xDBW\xD7\xBBC\xC3\x9B\x2F\xAF\x7B\x1F\x9B\x5B\x13\x87".

"C\x07s\x2B\x03\xFF\xFF\xFF\xFF\xDB\xDB\xFF\xBB\xBB\xFF\x9B\x9B\xFF\x7B\x7B\xFF__\xFF\x3F\x3F\xFF\x1F\x1F\xFF\x03\x03".

"\xEF\x03\x03\x2F7\x1F\xFF\xFF\xFF\x7F\x7F\x7F\x07\x07\x07\x0B\x0B\x0B\x13\x13\x13\x1B\x1B\x1BKKK\x97\x97\x97\x93\x93".

"\x93\x8B\x8B\x8B\x5B\x03\x03O\x03\x03\x27S\x1B\xE7\xE7\xFF\xC7\xC7\xFF\xAB\xAB\xFF\x8F\x8F\xFFss\xFFSS\xFF7".

"7\xFF\x1B\x1B\xFF\x03\x03\xFF\x03\x03\xE3\x03\x03\xCB\x03\x03\xB3\x03\x03\x9B\x03\x03\x83\x03\x03k\x03\x03S\xFF\xFF\xFF".

"\xFF\xEB\xDB\xFF\xD7\xBB\xFF\xC7\x9B\xFF\xB3\x7B\xFF\xA3\x5B\xFF\x8F\x3B\xFF\x7F\x1B\xF3s\x17\xEBo\x0F\xDFg\x0F\xD7_".

"\x0B\xCBW\x07\xC3O\x03\xB7G\x03\xAFC\x03\xFF\xFF\xFF\xFF\xFF\xD7\xFF\xFF\xB3\xFF\xFF\x8F\xFF\xFFk\xFF\xFFG\xFF".

"\xFF\x23\xFF\xFF\x03\xA7\x3F\x03\x9F7\x03\x93\x2F\x03\x87\x23\x03O\x3B\x27C\x2F\x1B7\x23\x13\x2F\x1B\x0B\x03\x03S".

"\x03\x03G\x03\x03\x3B\x03\x03\x2F\x03\x03\x23\x03\x03\x17\x03\x03\x0B\xBF\xA7\x8F\xFF\x9FC\xFF\xE7K\xFF\x7B\xFF\xFF\x03".

"\xFF\xCF\x03\xCF\x9F\x03\x9Bo\x03k\xA7kk\x21\xF9\x04\x01\x00\x00\x01\x00\x2C\x00\x00\x00\x00\x0E\x00\x10\x00\x00\x08".

"\x93\x00\x03\x08\x0C\x00\xA0\xA0A\x83\x03\x0B\x12\x18\xA0\x60\x81\xC3\x01\x05\x00\x08\x20\x98\xC0\xC0\x01\x04\x08\x0E\x1C\x28".

"\xC0\x80\x81D\x82\x06\x06\x0C\x20\x40\xB2\x24\x01\x89\x00\x08\x18P0\xE0\xE0A\x01\x00\x0A\x1C\x60\xE9R\x80M\x98".

"\x05\x06\x2C\x60\xD8\x40\xE4\x81\x82\x02c\xEA\x1C\x80\xD1\xA2\xC5\x88\x04s6\x40P\x80\x24\x83\xA3\x28\x0B\x20\xE8y".

"\xB0\x80\x81\x880\x13\x0C\xA0j\xD0\x2AV\x90\x3B\x15\x288\x60\x80\x40\x81\xAF\x00\x2A\x12E\xC0\x80d\x82\x93\x13".

"\x09\xA6t\x9B\x20AA\x9B\x03a\xD6\xC4\x3BP\xE0\xCD\x9B\x03\x03\x02\x00\x3B";

$GifData[7]=

"GIF89a\x0E\x00\x10\x00\xEF\x00\x00\x03\xFF\xFFC\x03\x03\x2F\x2F\x2F\x8B\x03\x03s\x03\x03\x9B\x03\x03\xB3".

"\x03\x03\xA7\x03\x03\x7F\x03\x03\xBF\x03\x03g\x03\x03\x0F\x17\x03O\x3B\x2BG3\x23\x3F\x2B\x1B\x7F\x7F\x7F\xFF\xB7\xB7".

"\xF7\xAB\xAB\xF3\xA3\xA3\xEB\x97\x97\xE7\x8F\x8F\xDF\x87\x87\xDB\x7B\x7B\xD3ss\xCBkk\xC7cc\xBF\x5B\x5B\xBBW".

"W\xB3OO\xAFGG\xA7\x3F\x3F\xA3\x3B\x3B\x9B33\x97\x2F\x2F\x8F\x2B\x2B\x8B\x23\x23\x83\x1F\x1F\x7F\x1B\x1Bw".

"\x17\x17s\x13\x13k\x0F\x0Fg\x0B\x0B_\x07\x07\x5B\x07\x07S\x07\x07O\x03\x03G\x03\x03C\x03\x03\xFF\xEB\xDF".

"\xFF\xE3\xD3\xFF\xDB\xC7\xFF\xD3\xBB\xFF\xCF\xB3\xFF\xC7\xA7\xFF\xBF\x9B\xFF\xBB\x93\xFF\xB3\x83\xF7\xAB\x7B\xEF\xA3s\xE7\x9B".

"k\xDF\x93c\xD7\x8B\x5B\xCF\x83S\xCB\x7FO\xBF\x7BK\xB3sG\xABoC\xA3k\x3F\x9Bc\x3B\x8F_7\x87".

"W3\x7FS\x2FwO\x2BkG\x27_C\x23S\x3F\x1FK7\x1B\x3F\x2F\x173\x2B\x13\x2B\x23\x0F\xEF\xEF\xEF".

"\xE7\xE7\xE7\xDF\xDF\xDF\xDB\xDB\xDB\xD3\xD3\xD3\xCB\xCB\xCB\xC7\xC7\xC7\xBF\xBF\xBF\xB7\xB7\xB7\xB3\xB3\xB3\xAB\xAB\xAB\xA7\xA7".

"\xA7\x9F\x9F\x9F\x23\x2B\x0F\x2F7\x1F\x1B\x1B\x1B\x83\x83\x83\x17\x1F\x07wwwoookkkccc\x5B".

"\x5B\x5BWWWOOOGGGCCC\x3B\x3B\x3B777KKK\x27\x27\x27\x23\x23\x23w\xFFo".

"o\xEFgg\xDF__\xCFW\x5B\xBFOS\xAFGK\x9F\x3FC\x937\x3F\x83\x2F7s\x2B\x2Fc\x23\x17\x0F".

"\x07\x1FC\x17\x173\x0F\x13\x23\x0B\x0B\x17\x07\x03\x03\x03\xB7\x9F\x87\xAF\x97\x7F\xA7\x8Fw\x9F\x87o\x9B\x7Fk\x93".

"\x7Bc\x8Bs\x5B\x83kW\x7BcOw_KoWCgS\x3F_K7WC3S\x3F\x2F\x9F\x83c".

"\x8FwS\x83kKw_\x3FgS3\x5BG\x2BO\x3B\x23C3\x1B\x7B\x7FcosWgkO\x5Bc".

"GSW\x3BGO3\x3FG\x2B7\x3F\x27\xFF\xFFs\xEB\xDBW\xD7\xBBC\xC3\x9B\x2F\xAF\x7B\x1F\x9B\x5B\x13\x87".

"C\x07s\x2B\x03\xFF\xFF\xFF\xFF\xDB\xDB\xFF\xBB\xBB\xFF\x9B\x9B\xFF\x7B\x7B\xFF__\xFF\x3F\x3F\xFF\x1F\x1F\xFF\x03\x03".

"\xEF\x03\x03\xE3\x03\x03\xD7\x03\x03\xCB\x03\x03\x07\x07\x07\x0B\x0B\x0B\x13\x13\x13\xFF\xFF\xFF\x1F\x17\x0B\x97\x97\x97\x93\x93".

"\x93\x8B\x8B\x8B\x5B\x03\x03O\x03\x03\x27S\x1B\xE7\xE7\xFF\xC7\xC7\xFF\xAB\xAB\xFF\x8F\x8F\xFFss\xFFSS\xFF7".

"7\xFF\x1B\x1B\xFF\x03\x03\xFF\x03\x03\xE3\x03\x03\xCB\x03\x03\xB3\x03\x03\x9B\x03\x03\x83\x03\x03k\x03\x03S\xFF\xFF\xFF".

"\xFF\xEB\xDB\xFF\xD7\xBB\xFF\xC7\x9B\xFF\xB3\x7B\xFF\xA3\x5B\xFF\x8F\x3B\xFF\x7F\x1B\xF3s\x17\xEBo\x0F\xDFg\x0F\xD7_".

"\x0B\xCBW\x07\xC3O\x03\xB7G\x03\xAFC\x03\xFF\xFF\xFF\xFF\xFF\xD7\xFF\xFF\xB3\xFF\xFF\x8F\xFF\xFFk\xFF\xFFG\xFF".

"\xFF\x23\xFF\xFF\x03\xA7\x3F\x03\x9F7\x03\x93\x2F\x03\x87\x23\x03O\x3B\x27C\x2F\x1B7\x23\x13\x2F\x1B\x0B\x03\x03S".

"\x03\x03G\x03\x03\x3B\x03\x03\x2F\x03\x03\x23\x03\x03\x17\x03\x03\x0B\xBF\xA7\x8F\xFF\x9FC\xFF\xE7K\xFF\x7B\xFF\xFF\x03".

"\xFF\xCF\x03\xCF\x9F\x03\x9Bo\x03k\xA7kk\x21\xF9\x04\x01\x00\x00\x00\x00\x2C\x00\x00\x00\x00\x0E\x00\x10\x00\x00\x08".

"l\x00\x03\x08\x1C8\x10\x80A\x83\x01\x10\x14H\xC0\xF0\x40\x01\x02\x02\x0F\x06\x18P\xA0\xC0\x80\x03\x18\x0F\x0C\x80".

"\x88\x90\x80\xC7\x8F\x04\x0CP\x0C\x20\x00\x00A\x82\x16\x0Dp\x04\x20\xA0\xA5\xCB\x00\x29\x0B\x90\x3CH\x13\xE6\x00\x91".

"3i\x22\xD4\x88\xB3\xA4N\x93\x3Ce\xFA\xD49\xF1\xE6\x80\x9CD\x11\x18EZS\xC1M\x04L\x25\x3A5\x00".

"uhM\x90Q\x11\x9E\xB4J\xD3\xA5\xCB\x80\x00\x3B";

$GifData[8]=

"GIF89a\x0E\x00\x10\x00\xEF\x00\x00C\x03\x03\x03\xFF\xFF\x9B\x03\x03\x2F\x2F\x2F\x8B\x03\x03s\x03\x03g".

"\x03\x03\xCB\x03\x03\xA7\x03\x03\xB3\x03\x03\xBF\x03\x03\xE3\x03\x03\x5B\x03\x03\xD7\x03\x03\x7F\x03\x03\xCBkk\xFF\xB7\xB7".

"\xF7\xAB\xAB\xF3\xA3\xA3\xEB\x97\x97\xE7\x8F\x8F\xDF\x87\x87\xDB\x7B\x7BG3\x23\x3F\x2B\x1B\xC7cc\xBF\x5B\x5B\xBBW".

"W\xB3OO\xAFGG\xA7\x3F\x3F\xA3\x3B\x3B\x9B33\xD3ss\x97\x2F\x2F\x8B\x23\x23\x83\x1F\x1F\x7F\x1B\x1Bw".

"\x17\x17s\x13\x13k\x0F\x0Fg\x0B\x0B_\x07\x07\x5B\x07\x07S\x07\x07O\x03\x03G\x03\x03C\x03\x03\xFF\xEB\xDF".

"\xFF\xE3\xD3\xFF\xDB\xC7\xFF\xD3\xBB\xFF\xCF\xB3\xFF\xC7\xA7\x8F\x2B\x2B\xFF\xBB\x93\xFF\xBF\x9B\xF7\xAB\x7B\xEF\xA3s\xE7\x9B".

"k\xDF\x93c\xD7\x8B\x5B\xCF\x83S\xCB\x7FO\xBF\x7BK\xB3sG\xABoC\xA3k\x3F\x9Bc\x3B\x8F_7\x87".

"W3\x7FS\x2FwO\x2BkG\x27_C\x23S\x3F\x1FK7\x1B\x3F\x2F\x173\x2B\x13\x2B\x23\x0F\xEF\xEF\xEF".

"\xE7\xE7\xE7\xDF\xDF\xDF\xDB\xDB\xDB\xD3\xD3\xD3\xCB\xCB\xCB\xC7\xC7\xC7\xBF\xBF\xBF\xB7\xB7\xB7\xB3\xB3\xB3\xAB\xAB\xAB\xA7\xA7".

"\xA7\x9F\x9F\x9F\x97\x97\x97\x0F\x17\x03\x17\x1F\x07\xFF\xB3\x83\x7F\x7F\x7Fwww\x83\x83\x83O\x3B\x2Bccc\x5B".

"\x5B\x5BWWWOOOGGGCCC\x3B\x3B\x3B777\x23\x2B\x0F\x27\x27\x27\x23\x23\x23w\xFFo".

"o\xEFgg\xDF__\xCFW\x5B\xBFOS\xAFGK\x9F\x3FC\x937\x3F\x83\x2F7s\x2B\x2Fc\x23\x2F7".

"\x1F\x1FC\x17\x173\x0F\x13\x23\x0B\x0B\x17\x07\x03\x03\x03\xB7\x9F\x87\xAF\x97\x7F\xA7\x8Fw\x9F\x87o\x9B\x7Fk\x93".

"\x7Bc\x8Bs\x5B\x83kW\x7BcOw_KoWCgS\x3F_K7WC3S\x3F\x2F\x9F\x83c".

"\x8FwS\x83kKw_\x3FgS3\x5BG\x2BO\x3B\x23C3\x1B\x7B\x7FcosWgkO\x5Bc".

"GSW\x3BGO3\x3FG\x2B7\x3F\x27\xFF\xFFs\xEB\xDBW\xD7\xBBC\xC3\x9B\x2F\xAF\x7B\x1F\x9B\x5B\x13\x87".

"C\x07s\x2B\x03\xFF\xFF\xFF\xFF\xDB\xDB\xFF\xBB\xBB\xFF\x9B\x9B\xFF\x7B\x7B\xFF__\xFF\x3F\x3F\xFF\x1F\x1F\xFF\x03\x03".

"\xEF\x03\x03\x07\x07\x07ooo\x0B\x0B\x0B\x13\x13\x13\x1B\x1B\x1B\xFF\xFF\xFFKKK\x17\x0F\x07kkk\x1F\x17".

"\x0B\x93\x93\x93\x8B\x8B\x8BO\x03\x03\x27S\x1B\xE7\xE7\xFF\xC7\xC7\xFF\xAB\xAB\xFF\x8F\x8F\xFFss\xFFSS\xFF7".

"7\xFF\x1B\x1B\xFF\x03\x03\xFF\x03\x03\xE3\x03\x03\xCB\x03\x03\xB3\x03\x03\x9B\x03\x03\x83\x03\x03k\x03\x03S\xFF\xFF\xFF".

"\xFF\xEB\xDB\xFF\xD7\xBB\xFF\xC7\x9B\xFF\xB3\x7B\xFF\xA3\x5B\xFF\x8F\x3B\xFF\x7F\x1B\xF3s\x17\xEBo\x0F\xDFg\x0F\xD7_".

"\x0B\xCBW\x07\xC3O\x03\xB7G\x03\xAFC\x03\xFF\xFF\xFF\xFF\xFF\xD7\xFF\xFF\xB3\xFF\xFF\x8F\xFF\xFFk\xFF\xFFG\xFF".

"\xFF\x23\xFF\xFF\x03\xA7\x3F\x03\x9F7\x03\x93\x2F\x03\x87\x23\x03O\x3B\x27C\x2F\x1B7\x23\x13\x2F\x1B\x0B\x03\x03S".

"\x03\x03G\x03\x03\x3B\x03\x03\x2F\x03\x03\x23\x03\x03\x17\x03\x03\x0B\xBF\xA7\x8F\xFF\x9FC\xFF\xE7K\xFF\x7B\xFF\xFF\x03".

"\xFF\xCF\x03\xCF\x9F\x03\x9Bo\x03k\xA7kk\x21\xF9\x04\x01\x00\x00\x01\x00\x2C\x00\x00\x00\x00\x0E\x00\x10\x00\x00\x08".

"\x95\x00\x03\x08\x04\x40\xB0\x20\x00\x81\x08\x010\x28\x20\x60\xC1\x82\x04\x02\x0A08\x18\x00\x80\x01\x02\x04\x04\x24P".

"\x20\x40\x00F\x03\x07\x010\xCC\x98\xD1\x81\xC7\x88\x00\x06\x88\xF4x\xA0\xA0\x82\x8C\x05RZD\x40\xA0\x25\xC1\x03".

"\x04\x10\x80\x1CP\xF1b\xC3\x06\x1C\x09\xEC\xE4Y1\x27\x82\xA34S\x12\xB5\x28\x00A\x81\xA7\x08\x04\x80\x1Ch".

"\x40\xA3M\x00\x07\x0EH\x0D\x991\xC1\xD5\x03\x09\x12\x10\x90I\x00\xA2\x80\x03\x0B\x0E\x20P\x20VfU\x8Fl".

"\x3BB\xDCY\xF1\xA9\xDD\xBBJ\x07\x1A48\x80\xA8\xC0\xBE\x80\x03\x0B\x0C\x08\x00\x3B";

$GifData[9]=

"GIF89a\x0E\x00\x10\x00\xEF\x00\x00C\x03\x03\x03\xFF\xFF\x2F\x2F\x2F\xB3\x03\x03\x8B\x03\x03s\x03\x03\x9B".

"\x03\x03\xBF\x03\x03g\x03\x03\xCB\x03\x03\xA7\x03\x03\xE3\x03\x03\x7F\x03\x03\xD7\x03\x03\xEF\x03\x03\x2F7\x1F\xFF\xB7\xB7".

"\xF7\xAB\xAB\xF3\xA3\xA3\xEB\x97\x97\xE7\x8F\x8F\xDF\x87\x87\xDB\x7B\x7B\xD3ss\xCBkk\xC7cc\xBF\x5B\x5B\xBBW".

"W\xB3OO\xAFGG\xA7\x3F\x3F\xA3\x3B\x3B\x9B33\x97\x2F\x2F\x8F\x2B\x2B\x8B\x23\x23\x83\x1F\x1F\x7F\x1B\x1Bw".

"\x17\x17s\x13\x13k\x0F\x0Fg\x0B\x0B_\x07\x07\x5B\x07\x07S\x07\x07O\x03\x03G\x03\x03C\x03\x03\xFF\xEB\xDF".

"\xFF\xE3\xD3\xFF\xDB\xC7\xFF\xD3\xBB\xFF\xCF\xB3\xFF\xC7\xA7\xFF\xBF\x9B\xFF\xBB\x93\xFF\xB3\x83\xF7\xAB\x7B\xEF\xA3s\xE7\x9B".

"k\xDF\x93c\xD7\x8B\x5B\xCF\x83S\xCB\x7FO\xBF\x7BK\xB3sG\xABoC\xA3k\x3F\x9Bc\x3B\x8F_7\x87".

"W3\x7FS\x2FwO\x2BkG\x27_C\x23S\x3F\x1FK7\x1B\x3F\x2F\x173\x2B\x13\x2B\x23\x0F\xEF\xEF\xEF".

"\xE7\xE7\xE7\xDF\xDF\xDF\xDB\xDB\xDB\xD3\xD3\xD3\xCB\xCB\xCB\xC7\xC7\xC7\xBF\xBF\xBF\xB7\xB7\xB7\xB3\xB3\xB3\xAB\xAB\xAB\xA7\xA7".

"\xA7\x9F\x9F\x9FG3\x23\x0F\x17\x03O\x3B\x2B\x3F\x2B\x1B\x7F\x7F\x7Fwwwoookkkccc\x5B".

"\x5B\x5BWWWOOOGGGCCC\x3B\x3B\x3B777\xFF\xFF\xFF\x27\x27\x27\x23\x23\x23w\xFFo".

"o\xEFgg\xDF__\xCFW\x5B\xBFOS\xAFGK\x9F\x3FC\x937\x3F\x83\x2F7s\x2B\x2Fc\x23KK".

"K\x1FC\x17\x173\x0F\x13\x23\x0B\x0B\x17\x07\x03\x03\x03\xB7\x9F\x87\xAF\x97\x7F\xA7\x8Fw\x9F\x87o\x9B\x7Fk\x93".

"\x7Bc\x8Bs\x5B\x83kW\x7BcOw_KoWCgS\x3F_K7WC3S\x3F\x2F\x9F\x83c".

"\x8FwS\x83kKw_\x3FgS3\x5BG\x2BO\x3B\x23C3\x1B\x7B\x7FcosWgkO\x5Bc".

"GSW\x3BGO3\x3FG\x2B7\x3F\x27\xFF\xFFs\xEB\xDBW\xD7\xBBC\xC3\x9B\x2F\xAF\x7B\x1F\x9B\x5B\x13\x87".

"C\x07s\x2B\x03\xFF\xFF\xFF\xFF\xDB\xDB\xFF\xBB\xBB\xFF\x9B\x9B\xFF\x7B\x7B\xFF__\xFF\x3F\x3F\xFF\x1F\x1F\xFF\x03\x03".

"\x23\x2B\x0F\x17\x1F\x07\x07\x07\x07\x13\x13\x13\x0B\x0B\x0B\x17\x0F\x07\x1B\x1B\x1B\x83\x83\x83\x1F\x17\x0B\x97\x97\x97\x93\x93".

"\x93\x8B\x8B\x8B\x5B\x03\x03O\x03\x03\x27S\x1B\xE7\xE7\xFF\xC7\xC7\xFF\xAB\xAB\xFF\x8F\x8F\xFFss\xFFSS\xFF7".

"7\xFF\x1B\x1B\xFF\x03\x03\xFF\x03\x03\xE3\x03\x03\xCB\x03\x03\xB3\x03\x03\x9B\x03\x03\x83\x03\x03k\x03\x03S\xFF\xFF\xFF".

"\xFF\xEB\xDB\xFF\xD7\xBB\xFF\xC7\x9B\xFF\xB3\x7B\xFF\xA3\x5B\xFF\x8F\x3B\xFF\x7F\x1B\xF3s\x17\xEBo\x0F\xDFg\x0F\xD7_".

"\x0B\xCBW\x07\xC3O\x03\xB7G\x03\xAFC\x03\xFF\xFF\xFF\xFF\xFF\xD7\xFF\xFF\xB3\xFF\xFF\x8F\xFF\xFFk\xFF\xFFG\xFF".

"\xFF\x23\xFF\xFF\x03\xA7\x3F\x03\x9F7\x03\x93\x2F\x03\x87\x23\x03O\x3B\x27C\x2F\x1B7\x23\x13\x2F\x1B\x0B\x03\x03S".

"\x03\x03G\x03\x03\x3B\x03\x03\x2F\x03\x03\x23\x03\x03\x17\x03\x03\x0B\xBF\xA7\x8F\xFF\x9FC\xFF\xE7K\xFF\x7B\xFF\xFF\x03".

"\xFF\xCF\x03\xCF\x9F\x03\x9Bo\x03k\xA7kk\x21\xF9\x04\x01\x00\x00\x01\x00\x2C\x00\x00\x00\x00\x0E\x00\x10\x00\x00\x08".

"\x8E\x00\x03\x08\x0C\x00\xA0\x60\xC1\x81\x08\x0B\x2AH\x90\xE0\x40\x81\x83\x03\x01\x10P\x60\x40\xC1\x80\x01\x14\x11\x00\x10".

"\x08\x00\xC1D\x03\x0C\x0A\x14\x18p\xC0\x00\x00\x01\x04\x0D\x10Pip\x40\x02\x03\x0FS\xAE\x24\xD02\x81\x02\x9A".

"\x02\x3A\x12\xD89\x60A\xC3\x06\x07p\x12\x2C\xE0\xF1\x22I\xA0B\x09vDP\x80\x00\x83\x05AO\x0E\xCCi".

"\xF0\xE9\x00\x9C\x06\xB3\x02xz\x40cN\x97\x0D\x168\x60x\xA0\x81I\x019\x0D\x185Z\xD2\xEBP\x91p".

"E\x16D\xABT\xEB\x5C\xBA\x02\xD1\xEA\xDD\x8B0\x20\x00\x3B";

######################################################

sub Number2gif{

my($Number,$digits)=@_;

my($Ascii_Num,$Zeropad,$n_gif,$Gif_Answer,$logsrc,$pal);

my($gif_log_scr_packed,$gif_transps,$gif_img_desc,$gif_dat,$packed_was);

$Gif_Answer="$gifheader"; #GIF89a

$logsrc=pack('S2C3',$digx_size*$digits,$digy_size,pack('B8','01100000'),0,0);

$Gif_Answer .=$logsrc;

$Ascii_Num=''.$Number;

$digits=($digits>length($Ascii_Num)?$digits:length($Ascii_Num));

$Zeropad='0' x $digits;

substr($Zeropad,- length($Ascii_Num),length($Ascii_Num))=$Ascii_Num;

$Ascii_Num=$Zeropad;

foreach(0..length($Ascii_Num)-1){

$n_gif=0+substr($Ascii_Num,$_,1);

$pal=substr($GifData[$n_gif],13,256*3);

$gif_log_scr_packed=unpack('B8',substr($GifData[$n_gif],10,1));

$gif_transps=substr($GifData[$n_gif],13+256*3,8);

$gif_img_desc=substr($GifData[$n_gif],13+256*3+8,10);

$gif_dat=substr($GifData[$n_gif],13+256*3+8+10,length($GifData[$n_gif]));

$gif_dat=substr($gif_dat,0,length($gif_dat)-1);

substr($gif_img_desc,1,2)=pack('S',$_*$digx_size);

$packed_was=unpack('B8',substr($gif_img_desc,9,1));

substr($gif_img_desc,9,1)=pack('B8','1'.

substr($packed_was,1,1).

substr($gif_log_scr_packed,4,1).'00'.substr($gif_log_scr_packed,5,3));

$Gif_Answer.=$gif_transps.$gif_img_desc.$pal.$gif_dat;

}

$Gif_Answer.='\x3B';

return $Gif_Answer;

}

######################################################

sub urldecode{

local($val)=@_;

$val=~s/\+/ /g;

$val=~s/%([0-9A-H]{2})/pack('C',hex($1))/ge;

return $val;

}

sub debug_err{

open DEBUGFILE,">>debug.txt";

print DEBUGFILE $ENV{'SCRIPT_NAME'}.' '.scalar(localtime).' '.@_."\n";

close DEBUGFILE;

}

$query=$ENV{'QUERY_STRING'};

if($query eq ''){print "Content-Type: image/gif\n\n$GifData[0]";}

else{

@fields=split /&/,$query;

foreach(@fields){

if(/^id=(.*)/){$id=urldecode($1);}

if(/^dig=(.*)/){$dig=urldecode($1);}

}

$digits=$dig;

$digits=9 unless($dig);

$cur_ip=$ENV{'REMOTE_ADDR'};

$cur_time=time;

open DATA,"+<$datafile" || debug_err("Cannot open $datafile $!");

@Dat=<DATA>;

chomp(@Dat);

%Counters=@Dat;

($count,$ip,$t)=split /\s+/,$Counters{$id};

$count++ if(($ip!=$cur_ip)||($cur_time-$t>30));

$ip=$cur_ip;

$t=$cur_time;

$Counters{$id}=join ' ',$count,$ip,$t;

seek DATA,0,0;

foreach(keys %Counters){

print DATA "$_\n";

print DATA "$Counters{$_}\n";

}

truncate(DATA,tell(DATA));

close DATA;

print "Content-Type: image/gif\n\n";

print Number2gif($count,$digits);

}

Если вам циферки не понравились вы их легко сможете заменить.Новые .gif'ы либо считайте из файла, либо можете продолжить мою традицию и запихнуть их в строку, в чем вам поможет такой скрипт file2str. (Да и еще не забудьте сменить тогда в скрипте константы $digx_size и $digy_size на новый размер цифр.)

#!/usr/bin/perl

#file2str

unless(@ARGV){die "Usage: file2str file strfile\n";}

open F1,"$ARGV[0]" || die "Cannot open $ARGV[0] $!\n";

open F2,">$ARGV[1]" || die "Cannot open $ARGV[1] $!\n";

binmode(F1);

sysread F1,$filedata,-s F1;

close(F1);

for($i=0;$i<=length($filedata)/32;$i++){

$data=substr($filedata,$i*32,32);

$data=~s/(\W)/sprintf("\\x%02X",unpack('C',$1))/eg;

print F2 "\"$data\".(length($data)==32?".":";")."\n";"

}

close(F2);