aboutsummaryrefslogtreecommitdiffstats
path: root/doc
diff options
context:
space:
mode:
Diffstat (limited to 'doc')
-rwxr-xr-xdoc/lua_api.pl274
-rw-r--r--doc/markdown/migration.md (renamed from doc/migration.md)0
-rw-r--r--doc/rspamd.lyx4299
-rw-r--r--doc/rspamd.pdf10845
-rw-r--r--doc/rspamd.texi1969
-rw-r--r--doc/why-rspamd.html392
-rw-r--r--doc/why-rspamd.pod333
-rw-r--r--doc/why-rspamd.txt240
8 files changed, 0 insertions, 18352 deletions
diff --git a/doc/lua_api.pl b/doc/lua_api.pl
deleted file mode 100755
index e4225b40a..000000000
--- a/doc/lua_api.pl
+++ /dev/null
@@ -1,274 +0,0 @@
-#!/usr/bin/env perl
-
-use strict;
-use warnings;
-use Data::Dumper;
-use Digest::MD5 qw(md5_hex);
-
-use constant {
- STATE_READ_SKIP => 0,
- STATE_READ_CONTENT => 1,
-};
-
-my $state = STATE_READ_SKIP;
-my $content;
-my %modules = ();
-my $cur_module;
-
-sub print_module_markdown {
- my ( $mname, $m ) = @_;
-
- print <<EOD;
-## Module `$mname` {#$m->{'id'}}
-
-$m->{'data'}
-EOD
- if ( $m->{'example'} ) {
- print <<EOD;
-
-Example:
-
-~~~lua
-$m->{'example'}
-~~~
-EOD
- }
-
- sub print_func {
- my ($f) = @_;
-
- my $name = $f->{'name'};
- my $id = $f->{'id'};
- print "> [`$name`](#$id)\n\n";
- }
-
- print "\n###Brief content:\n\n";
- print "**Functions**:\n\n";
- foreach ( @{ $m->{'functions'} } ) {
- print_func($_);
- }
- print "\n\n**Methods**:\n\n";
- foreach ( @{ $m->{'methods'} } ) {
- print_func($_);
- }
-}
-
-sub print_function_markdown {
- my ( $type, $fname, $f ) = @_;
-
- print <<EOD;
-### $type `$fname` {#$f->{'id'}}
-
-$f->{'data'}
-EOD
- print "\n**Parameters:**\n\n";
- if ( $f->{'params'} && scalar @{ $f->{'params'} } > 0 ) {
- foreach ( @{ $f->{'params'} } ) {
- if ( $_->{'type'} ) {
- print
- "- `$_->{'name'} \{$_->{'type'}\}`: $_->{'description'}\n";
- }
- else {
- print "- `$_->{'name'}`: $_->{'description'}\n";
- }
- }
- }
- else {
- print "\tnothing\n";
- }
- print "\n**Returns:**\n\n";
- if ( $f->{'return'} && $f->{'return'}->{'description'} ) {
- $_ = $f->{'return'};
- if ( $_->{'type'} ) {
- print "- `\{$_->{'type'}\}`: $_->{'description'}\n";
- }
- else {
- print "- $_->{'description'}\n";
- }
- }
- else {
- print "\tnothing\n";
- }
- if ( $f->{'example'} ) {
- print <<EOD;
-
-Example:
-
-~~~lua
-$f->{'example'}
-~~~
-EOD
- }
-}
-
-sub print_markdown {
- while ( my ( $mname, $m ) = each %modules ) {
- print_module_markdown( $mname, $m );
-
- print
-"\n## Functions\n\nThe module `$mname` defines the following functions.\n\n";
- foreach ( @{ $m->{'functions'} } ) {
- print_function_markdown( "Function", $_->{'name'}, $_ );
- print "\nBack to [module description](#$m->{'id'}).\n\n";
-
- }
- print
-"\n## Methods\n\nThe module `$mname` defines the following methods.\n\n";
- foreach ( @{ $m->{'methods'} } ) {
- print_function_markdown( "Method", $_->{'name'}, $_ );
- print "\nBack to [module description](#$m->{'id'}).\n\n";
-
- }
- print "\nBack to [top](#).\n\n";
- }
-}
-
-sub make_id {
- my ( $name, $prefix ) = @_;
-
- if ( !$prefix ) {
- $prefix = "f";
- }
- $name =~ /^(\S+).*$/;
- return substr( $prefix . md5_hex($1), 0, 6 );
-}
-
-sub substitute_data_keywords {
- my ($line) = @_;
-
- if ( $line =~ /^.*\@see\s+(\S+)\s*.*$/ ) {
- my $name = $1;
- my $id = make_id($name);
- return $line =~ s/\@see\s+\S+/[`$name`](#$id)/r;
- }
-
- return $line;
-}
-
-sub parse_function {
- my ( $func, @data ) = @_;
-
- my ( $type, $name ) = ( $func =~ /^\@(\w+)\s*(.+)\s*$/ );
-
- my $f = {
- name => $name,
- data => '',
- example => undef,
- id => make_id($name),
- };
- my $example = 0;
-
- foreach (@data) {
- if (/^\@param\s*(?:\{([^}]+)\})?\s*(\S+)\s*(.+)?\s*$/) {
- my $p = { name => $2, type => $1, description => $3 };
- push @{ $f->{'params'} }, $p;
- }
- elsif (/^\@return\s*(?:\{([^}]+)\})?\s*(.+)?\s*$/) {
- my $r = { type => $1, description => $2 };
- $f->{'return'} = $r;
- }
- elsif (/^\@example$/) {
- $example = 1;
- }
- elsif ( $_ ne $func ) {
- if ($example) {
- $f->{'example'} .= $_;
- }
- else {
- $f->{'data'} .= substitute_data_keywords($_);
- }
- }
- }
- if ( $f->{'data'} ) {
- chomp $f->{'data'};
- }
- if ( $f->{'example'} ) {
- chomp $f->{'example'};
- }
-
- if ( $type eq "function" ) {
- push @{ $cur_module->{'functions'} }, $f;
- }
- else {
- push @{ $cur_module->{'methods'} }, $f;
- }
-}
-
-sub parse_module {
- my ( $module, @data ) = @_;
-
- my ($name) = ( $module =~ /^\@module\s*(.+)\s*$/ );
-
- $modules{$name} = {
- functions => [],
- methods => [],
- data => '',
- example => undef,
- id => make_id( $name, 'm' ),
- };
- my $f = $modules{$name};
- my $example = 0;
-
- foreach (@data) {
- if (/^\@example$/) {
- $example = 1;
- }
- elsif ( $_ ne $module ) {
- if ($example) {
- $f->{'example'} .= $_;
- }
- else {
- $f->{'data'} .= substitute_data_keywords($_);
- }
- }
- }
- if ( $f->{'data'} ) {
- chomp $f->{'data'};
- }
- if ( $f->{'example'} ) {
- chomp $f->{'example'};
- }
- $cur_module = $f;
-}
-
-sub parse_content {
- my @func = grep /^\@function|method.+$/, @_;
- if ( scalar @func > 0 ) {
- parse_function( $func[0], @_ );
- }
- else {
- my @module = grep /^\@module.+$/, @_;
- if ( scalar @module > 0 ) {
- parse_module( $module[0], @_ );
- }
- }
-}
-
-while (<>) {
- if ( $state == STATE_READ_SKIP ) {
- if ( $_ =~ /^\s*\/\*\*\*$/ ) {
- $state = STATE_READ_CONTENT;
- $content = "";
- }
- }
- elsif ( $state == STATE_READ_CONTENT ) {
- if ( $_ =~ /^\s*\*\/$/ ) {
- $state = STATE_READ_SKIP;
- parse_content( split /^/, $content );
- $content = "";
- }
- else {
- my ($line) = ( $_ =~ /^(?:\s*\*\s)?(.+)\s*$/ );
- if ($line) {
- $content .= $line . "\n";
- }
- else {
- # Preserve empty lines
- $content .= "\n";
- }
- }
- }
-}
-
-#print Dumper( \%modules );
-print_markdown;
diff --git a/doc/migration.md b/doc/markdown/migration.md
index 954c60f6d..954c60f6d 100644
--- a/doc/migration.md
+++ b/doc/markdown/migration.md
diff --git a/doc/rspamd.lyx b/doc/rspamd.lyx
deleted file mode 100644
index 420d1446c..000000000
--- a/doc/rspamd.lyx
+++ /dev/null
@@ -1,4299 +0,0 @@
-#LyX 1.6.4 created this file. For more info see http://www.lyx.org/
-\lyxformat 345
-\begin_document
-\begin_header
-\textclass book
-\begin_preamble
-\usepackage{indentfirst}
-\frenchspacing
-\end_preamble
-\use_default_options false
-\language russian
-\inputencoding utf8
-\font_roman cmr
-\font_sans cmss
-\font_typewriter cmtt
-\font_default_family sfdefault
-\font_sc false
-\font_osf false
-\font_sf_scale 100
-\font_tt_scale 100
-
-\graphics default
-\paperfontsize default
-\spacing single
-\use_hyperref true
-\pdf_title "Rspamd"
-\pdf_author "Vsevolod Stakhov"
-\pdf_bookmarks true
-\pdf_bookmarksnumbered true
-\pdf_bookmarksopen false
-\pdf_bookmarksopenlevel 1
-\pdf_breaklinks false
-\pdf_pdfborder true
-\pdf_colorlinks true
-\pdf_backref false
-\pdf_pdfusetitle true
-\papersize a4paper
-\use_geometry false
-\use_amsmath 0
-\use_esint 0
-\cite_engine basic
-\use_bibtopic false
-\paperorientation portrait
-\secnumdepth 3
-\tocdepth 3
-\paragraph_separation indent
-\defskip medskip
-\quotes_language french
-\papercolumns 1
-\papersides 1
-\paperpagestyle fancy
-\tracking_changes false
-\output_changes false
-\author ""
-\author ""
-\end_header
-
-\begin_body
-
-\begin_layout Title
-Руководство по системе фильтрации спама rspamd.
-\end_layout
-
-\begin_layout Date
-22.03.2010
-\end_layout
-
-\begin_layout Author
-Стахов Всеволод.
-\end_layout
-
-\begin_layout Standard
-\begin_inset CommandInset toc
-LatexCommand tableofcontents
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-
-\end_layout
-
-\begin_layout Chapter
-Общая информация и возможности rspamd
-\end_layout
-
-\begin_layout Standard
-Rspamd - это система, предназначенная для фильтрации спама.
- Изначально rspamd разрабатывался как фильтр для электронной почты, но он
- может применяться и для другого типа сообщений (например, для jabber или
- icq сообщений).
- В основе rspamd лежит концепция асинхронной обработки входящих сообщений.
- Для этого применяется библиотека libevent.
- Это накладывает определенные ограничения на возможности rspamd, так как
- для любой блокирующей операции (например, чтение из сетевого сокета) необходимо
- регистрировать отдельное событие и его обработчика, но дает преимущества
- в скорости работы системы и уменьшает различные служебные затраты (например,
- на создание процессов или потоков).
- Rspamd поддерживает встроенные фильтры на языке lua, что позволяет писать
- собственные фильтры без необходимости пересборки системы.
- Rspamd настраивается путем редактирования конфигурационного файла.
- Также имеется управляющий интерфейс, посредством которого можно различным
- образом управлять работой системы и получать ее текущее состояние.
- Rspamd поддерживает различные типы фильтров: фильтры на основе регулярных
- выражений, фильтры на основе DNS запросов, фильтры на основе статистики,
- фильтры по различным спискам и другие типы фильтров (например, фильтры,
- написанные на языке lua и выполняющие различные действия по анализу сообщений).
- Rspamd имеет протокол, совместимый с системой spamassassin (в дальнейшем
- протокол spamc), а также его расширение - rspamc, позволяющее передавать
- больше информации фильтру, что ускоряет обработку сообщений.
- Система rspamd состоит из двух основных частей: монитор процессов и процессы,
- осуществляющие обработку (workers).
- Монитор процессов отвечает за старт системы, открытие/закрытие журналов
- работы, а также обеспечивает непрерывную работу рабочих процессов и их
- перезапуск при необходимости.
-\end_layout
-
-\begin_layout Chapter
-Установка rspamd
-\end_layout
-
-\begin_layout Section
-Требования
-\end_layout
-
-\begin_layout Itemize
-GNU C компилятор (работоспособность проверялась на gcc 4.2.1)
-\end_layout
-
-\begin_layout Itemize
-cmake -
-\begin_inset CommandInset href
-LatexCommand href
-name "http://cmake.org/"
-target "http://cmake.org/"
-
-\end_inset
-
- используется для конфигурации сборки и генерации Makefile.
- Необходимая версия - не менее 2.6.
-\end_layout
-
-\begin_layout Itemize
-glib -
-\begin_inset CommandInset href
-LatexCommand href
-name "http://ftp.gnome.org/"
-target "http://ftp.gnome.org/pub/GNOME/sources/glib/2.20/"
-
-\end_inset
-
- используется для различного рода утилит и структур хранения данных (хеши,
- деревья, списки).
- Необходимая версия - не менее 2.16.
-\end_layout
-
-\begin_layout Itemize
-gmime -
-\begin_inset CommandInset href
-LatexCommand href
-name "http://ftp.acc.umu.se"
-target "http://ftp.acc.umu.se/pub/GNOME/sources/gmime/2.2/"
-
-\end_inset
-
- используется для разбора mime структуры сообщений.
- Необходимая версия 2.2.
- Работа с gmime 2.4 и старше не проверялась.
-\end_layout
-
-\begin_layout Itemize
-lua -
-\begin_inset CommandInset href
-LatexCommand href
-name "http://www.lua.org/"
-target "http://www.lua.org/download.html"
-
-\end_inset
-
- используется для работы lua плагинов (без liblua работа rspamd возможна,
- но без поддержки lua плагинов).
- Версия необходима не меньше, чем 5.1.
-\end_layout
-
-\begin_layout Itemize
-libevent -
-\begin_inset CommandInset href
-LatexCommand href
-name "http://www.monkey.org/~provos/libevent/"
-target "http://www.monkey.org/~provos/libevent/"
-
-\end_inset
-
- используется для кросс-платформенной обработки асинхронных событий, а также
- для определения DNS имен (также асинхронного).
-\end_layout
-
-\begin_layout Section
-Установка
-\end_layout
-
-\begin_layout Standard
-Для сборки rspamd необходимо скачать архив (самая свежая версия может быть
- найдена на
-\begin_inset CommandInset href
-LatexCommand href
-name "http://cebka.pp.ru/distfiles/"
-target "http://cebka.pp.ru/distfiles/"
-
-\end_inset
-
-).
- После этого необходимо распаковать архив и скомпилировать код:
-\end_layout
-
-\begin_layout LyX-Code
-$ tar xzf rspamd-x.x.x.tar.gz
-\end_layout
-
-\begin_layout LyX-Code
-$ cd rspamd-x.x.x
-\end_layout
-
-\begin_layout LyX-Code
-$ cmake .
-\end_layout
-
-\begin_layout LyX-Code
-$ make
-\end_layout
-
-\begin_layout Standard
-Установка осуществляется стандартным
-\end_layout
-
-\begin_layout LyX-Code
-# make install
-\end_layout
-
-\begin_layout Standard
-В процессе установки копируются исполняемые файлы rspamd: bin/rspamd и bin/rspam
-c, а также примеры конфигурации и плагины, устанавливающиеся в каталог etc/rspam
-d/.
- Также для ОС FreeBSD устанавливается стартовый скрипт rspamd.sh в каталог
- etc/rc.d.
-
-\end_layout
-
-\begin_layout Section
-Запуск
-\end_layout
-
-\begin_layout Standard
-Rspamd запускается либо из стартового скрипта, либо непосредственно вызовом
- rspamd.
- Доступные опции командной строки:
-\end_layout
-
-\begin_layout Code
--h: Показать справочную информацию и выйти
-\end_layout
-
-\begin_layout Code
--t: Проверить конфигурационный файл и выйти
-\end_layout
-
-\begin_layout Code
--C: Показать содержимое кеша символов и выйти
-\end_layout
-
-\begin_layout Code
--V Показать все переменные rspamd и выйти
-\end_layout
-
-\begin_layout Code
--f: Не выполнять демонизацию
-\end_layout
-
-\begin_layout Code
--c: Указать путь до конфигурационного файла (по умолчанию используется
- /usr/local/etc/rspamd.conf)
-\end_layout
-
-\begin_layout Code
--u: Пользователь, под которым осуществлять работу rspamd
-\end_layout
-
-\begin_layout Code
--g: Группа, под которой осуществять работу rspamd
-\end_layout
-
-\begin_layout Standard
-Если rspamd запускается от суперпользователя, то после создания лог-файла,
- PID-файла, а также сокетов, принимающих соединения, осуществляется сброс
- привиллегий до пользователя и группы, указанных в опциях командной строки
- (таким образом, все рабочие процессы работают от указанного пользователя
- и группы).
-\end_layout
-
-\begin_layout Chapter
-Общие принципы работы
-\end_layout
-
-\begin_layout Standard
-Прежде чем приступать к настройке rspamd необходимо понять основные принципы
- функционирования системы.
-\end_layout
-
-\begin_layout Section
-Планирование и запуск рабочих процессов
-\end_layout
-
-\begin_layout Standard
-При запуске rspamd происходят следующие действия:
-\end_layout
-
-\begin_layout Enumerate
-Запускается главный процесс (rspamd main)
-\end_layout
-
-\begin_layout Enumerate
-Инициализируются конфигурационные параметры по умолчанию
-\end_layout
-
-\begin_layout Enumerate
-Читаются параметры командной строки
-\end_layout
-
-\begin_layout Enumerate
-Настраивается журналирование ошибок в терминал
-\end_layout
-
-\begin_layout Enumerate
-Читается и парсится конфигурационный файл
-\end_layout
-
-\begin_layout Enumerate
-Инициализируются модули
-\end_layout
-
-\begin_layout Enumerate
-Модули читают свои конфигурационные параметры
-\end_layout
-
-\begin_layout Enumerate
-Устанавливаются лимиты
-\end_layout
-
-\begin_layout Enumerate
-Настраивается журналирование, указанное в конфигурационном файле
-\end_layout
-
-\begin_layout Enumerate
-Происходит демонизация (если не указан флаг -f)
-\end_layout
-
-\begin_layout Enumerate
-Настраивается обработка сигналов головным процессом
-\end_layout
-
-\begin_layout Enumerate
-Записывается PID-файл
-\end_layout
-
-\begin_layout Enumerate
-Инициализируются lua плагины
-\end_layout
-
-\begin_layout Enumerate
-Инициализируется подсистема событий и mime парсер
-\end_layout
-
-\begin_layout Enumerate
-Загружается кеш символов
-\end_layout
-
-\begin_layout Enumerate
-Порождаются рабочие процессы (сброс привиллегий осуществляется сразу же
- после вызова fork)
-\end_layout
-
-\begin_layout Enumerate
-Начинается цикл обработки сигналов
-\end_layout
-
-\begin_layout Standard
-Головной процесс rspamd реагирует на следующие сигналы:
-\end_layout
-
-\begin_layout Itemize
-SIGTERM - послать всем рабочим процессам SIGTERM, дождаться их завершения
- и выйти
-\end_layout
-
-\begin_layout Itemize
-SIGINT - то же, что и SIGTERM
-\end_layout
-
-\begin_layout Itemize
-SIGHUP - переинициализировать журналирование и породить новые рабочие процессы,
- завершив старые (при этом, существующие рабочие процессы завершают работу,
- обработав уже полученные соединения)
-\end_layout
-
-\begin_layout Itemize
-SIGCHLD - головной процесс получает этот сигнал при завершении работы рабочего
- процесса.
- Если рабочий процесс завершился некорректно, то планируется его перезапуск
- через 2 секунды.
-\end_layout
-
-\begin_layout Itemize
-SIGUSR2 - приходит от рабочего процесса, когда тот успешно инициализируется
-\end_layout
-
-\begin_layout Itemize
-SIGALARM - сигнализирует о необходимости запуска рабочего процесса, который
- был запланирован после получения SIGCHLD
-\end_layout
-
-\begin_layout Standard
-Таким образом, головной процесс отвечает за инициализацию, конфигурацию,
- работу с PID-файлом, работу с журналированием, а также за порождение рабочих
- процессов.
- В ходе работы головной процесс постоянно следит за работой рабочих процессов
- и обеспечивает перезапуск некорректно завершившихся рабочих процессов.
- Для ротации файлов журналирования рабочему процессу необходимо послать
- сигнал SIGHUP.
-\end_layout
-
-\begin_layout Section
-Логика обработки сообщений
-\end_layout
-
-\begin_layout Standard
-Инициализация рабочего процесса предельно проста: происходит переинициализация
- libevent, а также инициализация DNS resolver'а.
- После этого рабочий процесс устанавливает обработчик готовности к чтению
- слушающего сокета (этот сокет создается в головном процессе и передается
- рабочему процессу как параметр).
- При готовности к чтению на слущающем сокете рабочий процесс создает новый
- объект типа worker_task и делается accept на слушающем сокете.
- После этого rspamd обрабатывает протокол rspamc (или же spamc) и читает
- сообщение.
- После окончания получения сообщения rspamd декодирует его содержимое и
- начинает обработку.
- Для более простого изложения принципов работы rspamd необходимо описать
- некоторые понятия:
-\end_layout
-
-\begin_layout Itemize
-Символ - это правило фильтрации rspamd, например, некоторое регулярное выражение
- или же запрос к DNS или же любое другое действие.
- Символ имеет собственный вес и имя.
- Таким образом, символ можно считать результатом работы одного правила фильтраци
-и.
- Если это правило сработало, то оно добавляет символ с определенным весом
- и атрибутами, если нет, то символ не добавляется.
-\end_layout
-
-\begin_layout Itemize
-Метрика - это набор логически связанных правил и связанных с ними символов.
- Такая группа имеет свой предел очков, после набора которых сообщение считается
- по этой метрике спамом.
- Очки формируются после подсчета весов символов, добавленных в метрику (при
- этом, разумеется, несработавшие правила символов не добавляют и их вес
- равен нулю) и обработки этих весов функцией консолидации.
- По умолчанию такой функцией является функция-факторизатор, которая просто
- считает вес каждого символа равным константе, заданной в конфигурационном
- файле для этого символа, например, следующие параметры в конфигурационном
- файле задают вес символа MIME_HTML_ONLY равный одному, а вес символа FAKE_HTML
- - восьми:
-\end_layout
-
-\begin_layout LyX-Code
-"MIME_HTML_ONLY" = 1;
-\end_layout
-
-\begin_layout LyX-Code
-"FAKE_HTML" = 8;
-\end_layout
-
-\begin_layout Itemize
-Модуль - это набор правил rspamd, который обеспечивает общие проверки.
- Например, модуль проверки регулярных выражений или модуль проверки URL'ей
- по
-\begin_inset Quotes eld
-\end_inset
-
-черным
-\begin_inset Quotes erd
-\end_inset
-
- спискам.
- Модули также могут быть написаны на языке LUA.
- Каждый модуль регистрирует символы, соответствующие сконфигурированным
- в нем правилам, в таблице символов заданной метрики (или метрики по умолчанию
-
-\begin_inset Quotes eld
-\end_inset
-
-default
-\begin_inset Quotes erd
-\end_inset
-
-).
-\end_layout
-
-\begin_layout Itemize
-Таблица символов метрики - это таблица, хранящая данные о зарегистрированных
- символах, таблица отсортирована, чтобы обеспечить проверку самых
-\begin_inset Quotes eld
-\end_inset
-
-удобных
-\begin_inset Quotes erd
-\end_inset
-
- правил в первую очередь.
- Критерий
-\begin_inset Quotes eld
-\end_inset
-
-удобности
-\begin_inset Quotes erd
-\end_inset
-
- составляется из трех составляющих: веса правила, частоты его срабатывания
- и времени его выполнения.
- Чем больше вес, частота срабатывания и меньше время выполнения, тем раньше
- будет проверено это правило.
-\end_layout
-
-\begin_layout Itemize
-Классификатор - это алгоритм, обеспечивающий определение принадлежности
- сообщения к какому-либо классу.
- Класс определяется символом (например символ SPAM, имеющий вес 5 и символ
- HAM, имеющий вес -5).
- Принадлежность к классу обеспечивается либо статистически, путем разбора
- текста сообщения на токены и сравнения с известными токенами, хранящимися
- на диске в виде файла токенов (statfile), либо же иным алгоритмом (например,
- нейросетью).
- В результате работы классификатора определяется соответствие сообщения
- какому-либо классу и добавления соответствующего этому классу символа.
- Классификатор отличается от обычного модуля тем, что он не просто проверяет
- какие-либо характеристики сообщения, а сравнивает содержание сообщения
- с известными ему наборами.
- То есть, классификатор для его работы необходимо обучать на различных наборах.
- В настоящее время в rspamd реализован алгоритм классификации winnow и разбора
- на токены OSB.
- О них будет написано в дальнейшем.
-\end_layout
-
-\begin_layout Standard
-Обработка осуществляется по следующей логике:
-\end_layout
-
-\begin_layout Itemize
-для каждой метрики выбирается таблица символов и выбираются по очереди символы
- (по степени
-\begin_inset Quotes eld
-\end_inset
-
-удобности
-\begin_inset Quotes erd
-\end_inset
-
-)
-\end_layout
-
-\begin_layout Itemize
-для каждого символа вызывается соответствующее правило
-\end_layout
-
-\begin_layout Itemize
-после вызова очередного правила проверяется, не превысил ли результат метрики
- порогового результата
-\end_layout
-
-\begin_layout Itemize
-при превышении порога сообщение считается по этой метрике спамом и больше
- символов из этой метрики не проверяется
-\end_layout
-
-\begin_layout Itemize
-для сообщения проверяется принадлежность к какому-либо классу для корректировки
- результата
-\end_layout
-
-\begin_layout Itemize
-после определения принадлежности к классу происходит окончательный пересчет
- очков по метрике и при совпадении критериев автообучения происходит автообучени
-е классификатора
-\end_layout
-
-\begin_layout Standard
-После обработки сообщений для каждой из метрик выводится результат.
- Если используется протокол spamc, то считается только метрика
-\begin_inset Quotes eld
-\end_inset
-
-default
-\begin_inset Quotes erd
-\end_inset
-
-, а дополнительные метрики добавляются как заголовки вида X-Spam-Status:
- metric; result.
- Для протокола rspamc выводятся результаты всех метрик, что позволяет настраиват
-ь различные группы правил и осуществлять фильтрацию сообщений не только
- как spam/ham, а задавать различные критерии оценки.
-\end_layout
-
-\begin_layout Chapter
-Настройка rspamd
-\end_layout
-
-\begin_layout Section
-Общие правила настройки
-\end_layout
-
-\begin_layout Standard
-Файл конфигурации rspamd имеет следующий синтаксис:
-\end_layout
-
-\begin_layout LyX-Code
-param = value;
-\end_layout
-
-\begin_layout Standard
-Точка с запятой является обязательной в конце каждой директивы.
- Некоторые директивы являются составными и обрамляются фигурными скобками,
- например:
-\end_layout
-
-\begin_layout LyX-Code
-section {
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-param = value;
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-};
-\end_layout
-
-\begin_layout Standard
-Также позволяется включать другие файлы (точка с запятой в конце директивы
- не нужна):
-\end_layout
-
-\begin_layout LyX-Code
-.include /path/to/file
-\end_layout
-
-\begin_layout Standard
-В конфигурационном файле допускается определять и использовать переменные:
-\end_layout
-
-\begin_layout LyX-Code
-$var = "some text";
-\end_layout
-
-\begin_layout LyX-Code
-param = "${var}";
-\end_layout
-
-\begin_layout Standard
-Приведенный фрагмент определяет переменную $var и присваивает параметру
-
-\begin_inset Quotes eld
-\end_inset
-
-param
-\begin_inset Quotes erd
-\end_inset
-
- значение
-\begin_inset Quotes eld
-\end_inset
-
-some text
-\begin_inset Quotes erd
-\end_inset
-
-.
- Переменные имеют глобальную область действия, обрамление переменных фигурными
- скобками при использовании (вида ${some_variable}) обязательно.
- Большинство строк конфигурационного файла обрамляется двойными кавычками.
- Одинарные кавычки применяются только при конфигурации модуля (это поведение
- подлежит пересмотру в следующих версиях):
-\end_layout
-
-\begin_layout LyX-Code
-.module 'name' {
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-param = "value";
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-};
-\end_layout
-
-\begin_layout Subsection
-Определения списков
-\end_layout
-
-\begin_layout Standard
-В rspamd многие параметры задаются в виде списков.
- Списки задаются ссылкой на файл или же http ресурс.
- Основное отличие таких файлов в том, что rspamd проверяет изменения в таких
- файлах (примерно раз в минуту, используя случайный разброс) и перегружает
- списки при их модификации.
- Таким же образом организована загрузка списков через http, только вместо
- modification time используется HTTP 1.1 заголовок If-Modified-Since, в ответ
- на который http сервер может выдать ответ 304: Not modified, в таком случае
- rspamd не перечитывает список.
- Списками задаются те параметры, которые могут содержать много значений
- и которые могут часто меняться.
- Для того, чтобы не приходилось выполнять перезапуск rspamd списки перечитываютс
-я по мере их обновления.
- Определения списков выглядят следующим образом:
-\end_layout
-
-\begin_layout Itemize
-http список:
-\end_layout
-
-\begin_layout LyX-Code
-param = "http://test.ru:81/some/path.php";
-\end_layout
-
-\begin_layout LyX-Code
-param = "http://test.ru/some/other.txt";
-\end_layout
-
-\begin_layout Itemize
-file список:
-\end_layout
-
-\begin_layout LyX-Code
-param = "file:///var/run/rspamd/some.file";
-\end_layout
-
-\begin_layout Section
-Общие параметры конфигурации
-\end_layout
-
-\begin_layout Standard
-Общие параметры не принадлежат никакой секции и позволяют задавать общие
- настройки системы.
-\end_layout
-
-\begin_layout Itemize
-pidfile - путь до PID-файла:
-\end_layout
-
-\begin_layout LyX-Code
-pidfile = "/var/run/rspamd.pid";
-\end_layout
-
-\begin_layout Itemize
-statfile_pool_size - размер пула файлов статистики в памяти.
- Может быть с суффиксом, определяющим единицы измерение (по умолчанию байты):
- K - килобайты, M - мегабайты, G - гигабайты.
-\end_layout
-
-\begin_layout LyX-Code
-statfile_pool_size = 40M;
-\end_layout
-
-\begin_layout Itemize
-raw_mode - если этот параметр равен
-\begin_inset Quotes eld
-\end_inset
-
-yes
-\begin_inset Quotes erd
-\end_inset
-
-, то rspamd не осуществляет перекодировку сообщений в utf8, в этом режиме
- проверка сообщений осуществляется быстрее, но при этом одинаковые сообщения
- в разных кодировках будут обрабатываться как разные.
-\end_layout
-
-\begin_layout LyX-Code
-raw_mode = yes;
-\end_layout
-
-\begin_layout Itemize
-filters - строка, содержащая список включенных модулей, имена модулей разделяютс
-я запятыми и/или пробелами.
-\end_layout
-
-\begin_layout LyX-Code
-filters = "surbl,regexp,chartable,emails";
-\end_layout
-
-\begin_layout Section
-Настройка процессов
-\end_layout
-
-\begin_layout Standard
-Данные секции служат для определения параметров рабочих процессов.
- Общие параметры рабочего процесса:
-\end_layout
-
-\begin_layout Itemize
-type - тип рабочего процесса:
-\end_layout
-
-\begin_deeper
-\begin_layout Itemize
-normal - обычный процесс обработки сообщений
-\end_layout
-
-\begin_layout Itemize
-controller - управляющий процесс
-\end_layout
-
-\begin_layout Itemize
-lmtp - процесс обработки сообщений по протоколу lmtp
-\end_layout
-
-\begin_layout Itemize
-fuzzy - хранилище хешей
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-type = "normal";
-\end_layout
-
-\begin_layout Itemize
-bind_socket - параметры слушающего сокета процесса, может определять либо
- tcp сокет, либо unix сокет:
-\end_layout
-
-\begin_deeper
-\begin_layout Itemize
-host:port - осуществляет bind на указанные host и port
-\end_layout
-
-\begin_layout Itemize
-*:port - осуществляет bind на указанные port на всех локальных адресах
-\end_layout
-
-\begin_layout Itemize
-/path/to/socket - осуществляет bind на указанный unix socket
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-bind_socket = localhost:11334;
-\end_layout
-
-\begin_layout Itemize
-count - количество процессов данного типа.
- По умолчанию это число равно числу логических процессоров в системе.
-\end_layout
-
-\begin_layout LyX-Code
-count = 1;
-\end_layout
-
-\begin_layout Standard
-Для процессов типа
-\begin_inset Quotes eld
-\end_inset
-
-controller
-\begin_inset Quotes erd
-\end_inset
-
- можно также указать пароль для привиллегированных команд параметром password,
- а для процессов типа
-\begin_inset Quotes eld
-\end_inset
-
-fuzzy
-\begin_inset Quotes erd
-\end_inset
-
- необходимо указать путь к файлу, который будет использован как хранилище
- хешей параметром hashfile.
- Пример настройки рабочих процессов:
-\end_layout
-
-\begin_layout LyX-Code
-worker {
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
- type = "normal";
-\end_layout
-
-\begin_layout LyX-Code
- count = 1;
-\end_layout
-
-\begin_layout LyX-Code
- bind_socket = *:11333;
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-};
-\end_layout
-
-\begin_layout LyX-Code
-
-\end_layout
-
-\begin_layout LyX-Code
-worker {
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
- type = "controller";
-\end_layout
-
-\begin_layout LyX-Code
- bind_socket = localhost:11334;
-\end_layout
-
-\begin_layout LyX-Code
- count = 1;
-\end_layout
-
-\begin_layout LyX-Code
- password = "q1";
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-};
-\end_layout
-
-\begin_layout LyX-Code
-worker {
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
- type = "fuzzy";
-\end_layout
-
-\begin_layout LyX-Code
- bind_socket = localhost:11335;
-\end_layout
-
-\begin_layout LyX-Code
- count = 1;
-\end_layout
-
-\begin_layout LyX-Code
- hashfile = "/tmp/fuzzy.db";
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-};
-\end_layout
-
-\begin_layout Section
-Настройки журналирования
-\end_layout
-
-\begin_layout Standard
-Данные настройки определяют тип журналирования и его параметры.
-\end_layout
-
-\begin_layout Itemize
-log_type - тип журналирования:
-\end_layout
-
-\begin_deeper
-\begin_layout Itemize
-console - журналирование в stderr
-\end_layout
-
-\begin_layout Itemize
-syslog - журналирование через syslog
-\end_layout
-
-\begin_layout Itemize
-file - журналирование в файл
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-log_type = console;
-\end_layout
-
-\begin_layout Itemize
-log_level - уровень ведения журнала
-\end_layout
-
-\begin_deeper
-\begin_layout Itemize
-DEBUG - журналирование отладочной информации
-\end_layout
-
-\begin_layout Itemize
-INFO - журналирование информационных событий
-\end_layout
-
-\begin_layout Itemize
-WARN - журналирование только предупреждений
-\end_layout
-
-\begin_layout Itemize
-ERROR - журналирование только ошибок
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-log_level = INFO;
-\end_layout
-
-\begin_layout Itemize
-log_facility - используется для журналирования в syslog и определяет назначение
- сообщений.
- Более подробно об этом можно узнать из man syslog.
-\end_layout
-
-\begin_layout LyX-Code
-log_facility = "LOG_MAIL";
-\end_layout
-
-\begin_layout Itemize
-log_file - используется для журналирования в файл и путь к файлу журнала.
-\end_layout
-
-\begin_layout LyX-Code
-log_file = "/var/log/rspamd.log";
-\end_layout
-
-\begin_layout Standard
-Пример настройки журналирования:
-\end_layout
-
-\begin_layout LyX-Code
-logging {
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
- log_type = file;
-\end_layout
-
-\begin_layout LyX-Code
- log_level = INFO;
-\end_layout
-
-\begin_layout LyX-Code
- log_file = "/var/log/rspamd.log"
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-};
-\end_layout
-
-\begin_layout Section
-Настройки метрики
-\end_layout
-
-\begin_layout Standard
-Для настроек метрик используются секции
-\begin_inset Quotes eld
-\end_inset
-
-metric
-\begin_inset Quotes erd
-\end_inset
-
-.
- Основные параметры метрик:
-\end_layout
-
-\begin_layout Itemize
-name - имя метрики.
-\end_layout
-
-\begin_layout LyX-Code
-name = "default";
-\end_layout
-
-\begin_layout Itemize
-required_score - минимальное число очков, необходимое, чтобы сообщение считалось
- спамом по данной метрике.
-\end_layout
-
-\begin_layout LyX-Code
-required_score = 10;
-\end_layout
-
-\begin_layout Itemize
-cache_file - путь до файла, содержащего кеш символов метрики (используется,
- чтобы сохранить статистику
-\begin_inset Quotes eld
-\end_inset
-
-удобности
-\begin_inset Quotes erd
-\end_inset
-
- символов метрики, чтобы при перезапуске rspamd не терять накопленных данных).
-\end_layout
-
-\begin_layout LyX-Code
-cache_file = "/var/run/rspamd/metric.cache";
-\end_layout
-
-\begin_layout Standard
-Пример настройки метрики:
-\end_layout
-
-\begin_layout LyX-Code
-metric {
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
- name = "default";
-\end_layout
-
-\begin_layout LyX-Code
- required_score = 10.1;
-\end_layout
-
-\begin_layout LyX-Code
- cache_file = "/tmp/symbols.cache";
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-};
-\end_layout
-
-\begin_layout Section
-Настройка классификаторов
-\end_layout
-
-\begin_layout Standard
-Для настройки классификаторов используются секции
-\begin_inset Quotes eld
-\end_inset
-
-classifier
-\begin_inset Quotes erd
-\end_inset
-
-.
- Общие настройки классфикатора:
-\end_layout
-
-\begin_layout Itemize
-type - алгоритм классификатора (в настоящее время определен только
-\begin_inset Quotes eld
-\end_inset
-
-winnow
-\begin_inset Quotes erd
-\end_inset
-
-).
-\end_layout
-
-\begin_layout LyX-Code
-type = "winnow";
-\end_layout
-
-\begin_layout Itemize
-tokenizer - алгоритм разбиения сообщения на токены (в настоящее время определен
- только
-\begin_inset Quotes eld
-\end_inset
-
-osb-text
-\begin_inset Quotes erd
-\end_inset
-
-).
-\end_layout
-
-\begin_layout LyX-Code
-tokenizer = "osb-text";
-\end_layout
-
-\begin_layout Standard
-Также каждый классификатор может содержать определения классов и соответствующих
- им файлов токенов.
- Для этого используется подсекция statfile, содержащая следующие параметры:
-\end_layout
-
-\begin_layout Itemize
-symbol - имя класса и имя символа, используемого для данного класса.
-\end_layout
-
-\begin_layout LyX-Code
-symbol = "WINNOW_SPAM";
-\end_layout
-
-\begin_layout Itemize
-path - путь до файла.
-\end_layout
-
-\begin_layout LyX-Code
-path = "/var/run/rspamd/winnow.spam";
-\end_layout
-
-\begin_layout Itemize
-size - размер данного файла.
- Также может иметь суффикс размерности.
-\end_layout
-
-\begin_layout LyX-Code
-size = 100M;
-\end_layout
-
-\begin_layout Standard
-Внутри каждого определения класса можно использовать подсекцию autolearn,
- определяющую условия, при которых происходит автоматическое обучение данного
- класса.
- Секция имеет следующие параметры:
-\end_layout
-
-\begin_layout Itemize
-min_mark - минимальное число очков, при котором осуществляется обучение.
-\end_layout
-
-\begin_layout LyX-Code
-min_mark = 10.1;
-\end_layout
-
-\begin_layout Itemize
-max_mark - максимальное число очков, при котором осуществляется обучение.
-\end_layout
-
-\begin_layout LyX-Code
-max_mark = 0.1;
-\end_layout
-
-\begin_layout Standard
-Автообучение происходит, если данное сообщение отвечает данным критериям.
- То есть, логично обучать класификатор HAM сообщениями, указав максимальное
- количество очков, близкое к нулю и SPAM сообщениями, указав минимальное
- число очков, близкое к срабатыванию триггера SPAM для данной метрики.
- Таким образом, классифицируемые как спам сообщения обучают класс SPAM,
- а классифицируемые как HAM (то есть, на них не сработали правила метрики)
- - обучают класс HAM.
-\end_layout
-
-\begin_layout Standard
-Пример определения классификатора:
-\end_layout
-
-\begin_layout LyX-Code
-classifier {
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-type = "winnow";
-\end_layout
-
-\begin_layout LyX-Code
-tokenizer = "osb-text";
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-statfile {
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-symbol = "WINNOW_SPAM";
-\end_layout
-
-\begin_layout LyX-Code
-path = "/tmp/test.spam";
-\end_layout
-
-\begin_layout LyX-Code
-size = 10M;
-\end_layout
-
-\begin_layout LyX-Code
-
-\end_layout
-
-\begin_layout LyX-Code
-autolearn {
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-min_mark = 10.0;
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-};
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-};
-\end_layout
-
-\begin_layout LyX-Code
-
-\end_layout
-
-\begin_layout LyX-Code
-statfile {
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-symbol = "WINNOW_HAM";
-\end_layout
-
-\begin_layout LyX-Code
-path = "/tmp/test.ham";
-\end_layout
-
-\begin_layout LyX-Code
-size = 10M;
-\end_layout
-
-\begin_layout LyX-Code
-
-\end_layout
-
-\begin_layout LyX-Code
-autolearn {
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-max_mark = 0.1;
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-};
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-};
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-};
-\end_layout
-
-\begin_layout Subsection
-Настройка синхронизации статистики
-\end_layout
-
-\begin_layout Standard
-Статистические данные можно синхронизировать между несколькими rspamd.
- Для этого используется master/slave синхронизация и бинарный лог изменений
- в статистическом файле.
- Для настройки синхронизации используются следующие параметры при определении
- статистического файла:
-\end_layout
-
-\begin_layout LyX-Code
-statfile {
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-...
-\end_layout
-
-\begin_layout LyX-Code
-binlog = "slave";
-\end_layout
-
-\begin_layout LyX-Code
-binlog_master = "somehost:11334";
-\end_layout
-
-\begin_layout LyX-Code
-...
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-};
-\end_layout
-
-\begin_layout LyX-Code
-...
-\end_layout
-
-\begin_layout LyX-Code
-statfile {
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-...
-\end_layout
-
-\begin_layout LyX-Code
-binlog = "master";
-\end_layout
-
-\begin_layout LyX-Code
-...
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-};
-\end_layout
-
-\begin_layout Standard
-При настройке slave для синхронизации указывается адрес master для данного
- файла.
- Этот адрес фактически является адресом контроллера, который сконфигурирован
- работать с данным файлом как master.
- Если rspamd настроен работать с данным файлом статистики как master, то
- создается специальный файл с таким же именем, как файл статистики, но имеющим
- суффикс .binlog.
- В данный файл записываются ревизии и изменения, внесенные в файл статистики.
- Данный файл хранит фиксированное число изменений и ротируется при переполнении.
- Синхронизация производится всеми slave хостами с промежутком от 1-й до
- 2-х минут.
- При этом, нет разницы, в каком состоянии был файл статистики на slave хосте
- - после синхронизации файл статистики на slave будет в точности совпадать
- с файлом статистики на master'е.
- Обновления файлов статистики являются инкрементальными, то есть передаются
- только изменения, а не файлы целиком.
- Синхронизация файлов статистики позволяет легко построить кластер rspamd,
- которые работают и обучаются идентично (хотя обучение должно производиться
- через контроллер мастера).
-\end_layout
-
-\begin_layout Section
-Настройка коэффициентов символов
-\end_layout
-
-\begin_layout Standard
-Для настройки коэффициентов применяется секция
-\begin_inset Quotes eld
-\end_inset
-
-factors
-\begin_inset Quotes erd
-\end_inset
-
-.
- Данная секция состоит из набора определений вида
-\end_layout
-
-\begin_layout LyX-Code
-"СИМВОЛ" = вес;
-\end_layout
-
-\begin_layout Standard
-например:
-\end_layout
-
-\begin_layout LyX-Code
-"R_UNDISC_RCPT" = 5;
-\end_layout
-
-\begin_layout LyX-Code
-"MISSING_MID" = 3;
-\end_layout
-
-\begin_layout LyX-Code
-"R_RCVD_SPAMBOTS" = 3;
-\end_layout
-
-\begin_layout LyX-Code
-"R_TO_SEEMS_AUTO" = 3;
-\end_layout
-
-\begin_layout LyX-Code
-"R_MISSING_CHARSET" = 5;
-\end_layout
-
-\begin_layout Standard
-В секции
-\begin_inset Quotes fld
-\end_inset
-
-factors
-\begin_inset Quotes frd
-\end_inset
-
- также можно задать параметр grow_factor, который задает коэффициент приращения
- при добавлении символов в метрику.
- Работает это так: допустим, добавляется первый символ - его реальный вес
- будет равен 1 * factor (то есть, если factor равен 1, то и реальный вес
- будет равен 1), после чего следующий символ будет иметь реальный вес grow_facto
-r * factor (например, если grow_factor = 1.1, то реальный вес будет 1.1 *
- factor), далее следующий будет иметь вес (1 + ((grow_factor) - 1)*2)*factor
- (то есть, при предыдущем grow_factor, реальный вес будет 1.2 * factor, следующий
- символ 1.3, затем 1.4 и.т.д.).
- Данная возможность позволяет увеличивать вес письмам, проходящим по нескольким
- правилам.
- Правила с отрицательным весом не увеличивают grow_factor и не модифицируются
- им (то есть, реальный вес таких правил равен 1 * factor).
- Пример задания параметра grow_factor:
-\end_layout
-
-\begin_layout LyX-Code
-grow_factor = 1.1;
-\end_layout
-
-\begin_layout Standard
-Также существует возможность создавать
-\begin_inset Quotes fld
-\end_inset
-
-составные
-\begin_inset Quotes frd
-\end_inset
-
- символы - символы, которые являются комбинацией других символов.
- Это нужно для возможности указывать, что комбинация определенных символов
- имеет больший (или, наоборот, меньший) вес, чем сумма весов нескольких
- символов.
- Составные символы представляют собой логические выражения из других символов,
- например:
-\end_layout
-
-\begin_layout LyX-Code
-composites {
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-COMPOSITE_SYMBOL1 =
-\begin_inset Quotes fld
-\end_inset
-
-SYMBOL1 & (SYMBOL2 | SYMBOL3)
-\begin_inset Quotes frd
-\end_inset
-
-;
-\end_layout
-
-\begin_layout LyX-Code
-COMPOSITE_SYMBOL2 =
-\begin_inset Quotes fld
-\end_inset
-
-SYMBOL3 & !SYMBOL4
-\begin_inset Quotes frd
-\end_inset
-
-;
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-};
-\end_layout
-
-\begin_layout Standard
-При добавлении составного символа все символы, входящие в него, удаляются
- из результата.
- То есть, при срабатывании COMPOSITE_SYMBOL1 из предыдущего примера символы
- SYMBOL1, SYMBOL2 и SYMBOL3 в ответе не появятся.
-\end_layout
-
-\begin_layout Section
-Представления и настройки
-\end_layout
-
-\begin_layout Subsection
-Представления
-\end_layout
-
-\begin_layout Standard
-В rspamd существует возможность настройки правил, которые будут проверяться,
- исходя из определенных критериев.
- Представления настраиваются в конфигурационном файле rspamd и позволяют
- разделить правила, исходя из входящих данных, например, заголовок From
- письма или же по ip, откуда нам пришло данное письмо.
- Представления проверяются при проверке любого правила и при совпадении
- данных письма проверяются не все символы, а те, которые заданы данным представл
-ением.
- При настройки представлений задаются входные данные письма (from и ip)
- и символы, которые должны проверяться.
- Входные данные могут дублироваться, то есть, можно задать несколько from
- и несколько ip, задаются эти параметры либо в виде регулярных выражений:
-\end_layout
-
-\begin_layout LyX-Code
-from =
-\begin_inset Quotes fld
-\end_inset
-
-/^.*@somedomain.com$
-\begin_inset Quotes frd
-\end_inset
-
-;
-\end_layout
-
-\begin_layout LyX-Code
-from =
-\begin_inset Quotes fld
-\end_inset
-
-/^.*@otherdoma[a-z]+.com$
-\begin_inset Quotes frd
-\end_inset
-
-;
-\end_layout
-
-\begin_layout Standard
-либо в виде map:
-\end_layout
-
-\begin_layout LyX-Code
-from =
-\begin_inset Quotes fld
-\end_inset
-
-file:///usr/local/etc/rspamd/from.map
-\begin_inset Quotes frd
-\end_inset
-
-;
-\end_layout
-
-\begin_layout LyX-Code
-ip =
-\begin_inset Quotes fld
-\end_inset
-
-http://somehost:81/ip.map
-\begin_inset Quotes frd
-\end_inset
-
-;
-\end_layout
-
-\begin_layout Standard
-Символы также могут быть заданы несколькими директивами symbols (которые
- будут объединены в список):
-\end_layout
-
-\begin_layout LyX-Code
-symbols =
-\begin_inset Quotes fld
-\end_inset
-
-/^.*URIBL.*$/
-\begin_inset Quotes frd
-\end_inset
-
-;
-\end_layout
-
-\begin_layout Standard
-Пример задания представления в конфигурационном файле:
-\end_layout
-
-\begin_layout LyX-Code
-view {
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-ip = "file:///usr/local/etc/rspamd/ip_internal.inc";
-\end_layout
-
-\begin_layout LyX-Code
-skip_check = yes;
-\end_layout
-
-\begin_layout LyX-Code
-from = "file:///usr/local/etc/rspamd/from_internal.inc";
-\end_layout
-
-\begin_layout LyX-Code
-symbols = "/^.*URIBL.*$/";
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-};
-\end_layout
-
-\begin_layout Standard
-Директива
-\begin_inset Quotes fld
-\end_inset
-
-skip_check
-\begin_inset Quotes frd
-\end_inset
-
- используется для пропуска всех проверок rspamd для данного представлений.
- В результате при использовании протокола rspamc 1.1 вместо маркера спама
- (True или False) будет маркер пропуска (Skip).
- При использовании spamc или же rspamc 1.0 будет стандартный маркер False
- (так как реально у письма будет 0 баллов).
-\end_layout
-
-\begin_layout Subsection
-Пользовательские настройки
-\end_layout
-
-\begin_layout Standard
-Пользовательские настройки, в отличие от представлений, дают возможность
- выбора правил, а также настройки граничных значений баллов письма, исходя
- из получателя письма.
- При этом, настройки можно задавать индивидуально пользователю или же всему
- домену пользователя.
- Индивидуальные настройки пользователя перекрывают настройки домена.
- При выборе настроек используются следующие данные (учитывая последовательность)
-:
-\end_layout
-
-\begin_layout Enumerate
-проверяется заголовок Deliver-To, передаваемый при использовании протокола
- rspamc;
-\end_layout
-
-\begin_layout Enumerate
-проверяется заголовок User, передаваемый MTA exim при использовании любого
- протокола;
-\end_layout
-
-\begin_layout Enumerate
-проверяется первый получатель письма из заголовка rspamc Rcpt;
-\end_layout
-
-\begin_layout Enumerate
-проверяется первый получатель письма из заголовка mime To.
-\end_layout
-
-\begin_layout Standard
-Необходимо обратить внимание , что при наличии нескольких получателей, будет
- проверяться только первый из них, чтобы избегать двусмысленного поведения.
- Сами настройки задаются в json файлах, так как данные файлы могут содержать
- очень много информации о пользователях, и хранить это все в конфигурационном
- файле нецелесообразно.
- Для задания пользовательских настроек используется секция
-\begin_inset Quotes fld
-\end_inset
-
-settings
-\begin_inset Quotes frd
-\end_inset
-
-, которая содержит всего два параметра: user_settings и domain_settings.
- Например:
-\end_layout
-
-\begin_layout LyX-Code
-settings {
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-user_settings = "http://somehost/users.php";
-\end_layout
-
-\begin_layout LyX-Code
-domain_settings = "http://somehost/domains.php";
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-};
-\end_layout
-
-\begin_layout Standard
-Формат соответствующих json файлов достаточно прост - это массив объектов,
- задающих настройки.
- Объект настройки содержит следующие параметры:
-\end_layout
-
-\begin_layout Itemize
-name - имя пользователя или домена;
-\end_layout
-
-\begin_layout Itemize
-metrics - объект, задающий предельные очки по метрикам, вида
-\begin_inset Quotes fld
-\end_inset
-
-metric_name
-\begin_inset Quotes frd
-\end_inset
-
- -> score;
-\end_layout
-
-\begin_layout Itemize
-factors - объект, задающий индивидуальные настройки множителей вида
-\begin_inset Quotes fld
-\end_inset
-
-symbol
-\begin_inset Quotes frd
-\end_inset
-
- -> score;
-\end_layout
-
-\begin_layout Itemize
-want_spam - булево значение, при задании его как true, rspamd отключает
- проверки для данного пользователя.
-\end_layout
-
-\begin_layout Standard
-Пример json настроек:
-\end_layout
-
-\begin_layout LyX-Code
-[
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-{
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-"name":"somedomain.ru",
-\end_layout
-
-\begin_layout LyX-Code
-"metrics":{"default":11},
-\end_layout
-
-\begin_layout LyX-Code
-"factors":{"R_FUZZY":10.1},
-\end_layout
-
-\begin_layout LyX-Code
-"want_spam":false
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-},
-\end_layout
-
-\begin_layout LyX-Code
-{
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-"name":"some.other.domain.com",
-\end_layout
-
-\begin_layout LyX-Code
-"metrics":{"default":5.5},
-\end_layout
-
-\begin_layout LyX-Code
-"factors":{"URIBL":20.3},
-\end_layout
-
-\begin_layout LyX-Code
-"want_spam":false
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-}
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-]
-\end_layout
-
-\begin_layout Standard
-Файлы настроек перезагружаются по мере обновления, как и любые другие файлы
- списков.
-\end_layout
-
-\begin_layout Chapter
-Настройка модулей
-\end_layout
-
-\begin_layout Section
-Настройка модуля surbl
-\end_layout
-
-\begin_layout Standard
-Модуль surbl служит для проверки URL'ей в письме на различных
-\begin_inset Quotes eld
-\end_inset
-
-черных
-\begin_inset Quotes erd
-\end_inset
-
- списках.
- Модуль делает следующее: для каждого из url, найденных в сообщении, извлекает
- доменный компонент (2-го или 3-го уровня), добавляет суффикс имени surbl
- и делает dns запрос.
- При успешном определении такого имени добавляется символ.
- Пример работы:
-\end_layout
-
-\begin_layout LyX-Code
-URL (http://some.test.ru/index.html) -> test.ru + (insecure-bl.rambler.ru) ->
-\end_layout
-
-\begin_layout LyX-Code
-resolve test.ru.insecure-bl.rambler.ru -> 127.0.0.1 -> add symbol
-\end_layout
-
-\begin_layout Standard
-Параметры настройки:
-\end_layout
-
-\begin_layout LyX-Code
-.module 'surbl' {
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
- # Определение суффикса SURBL
-\end_layout
-
-\begin_layout LyX-Code
- # Символы '%b' заменяются на значение определенного бита
-\end_layout
-
-\begin_layout LyX-Code
- suffix_%b_SURBL_MULTI = "multi.surbl.org";
-\end_layout
-
-\begin_layout LyX-Code
-
-\end_layout
-
-\begin_layout LyX-Code
- # Суффикс для каждого из бит
-\end_layout
-
-\begin_layout LyX-Code
- bit_2 = "SC"; # sc.surbl.org
-\end_layout
-
-\begin_layout LyX-Code
- bit_4 = "WS"; # ws.surbl.org
-\end_layout
-
-\begin_layout LyX-Code
- bit_8 = "PH"; # ph.surbl.org
-\end_layout
-
-\begin_layout LyX-Code
- bit_16 = "OB"; # ob.surbl.org
-\end_layout
-
-\begin_layout LyX-Code
- bit_32 = "AB"; # ab.surbl.org
-\end_layout
-
-\begin_layout LyX-Code
- bit_64 = "JP"; # jp.surbl.org
-\end_layout
-
-\begin_layout LyX-Code
-
-\end_layout
-
-\begin_layout LyX-Code
- # Имя метрики
-\end_layout
-
-\begin_layout LyX-Code
- metric = "default";
-\end_layout
-
-\begin_layout LyX-Code
- # Список доменов, для которых необходимо использовать 3 доменных
-\end_layout
-
-\begin_layout LyX-Code
- # компонента, вместо двух
-\end_layout
-
-\begin_layout LyX-Code
- 2tld = "file:///etc/rspamd/2tld.inc";
-\end_layout
-
-\begin_layout LyX-Code
- # Список URL'ей, которые не будут проверяться этим модулем
-\end_layout
-
-\begin_layout LyX-Code
- whitelist = "file:///etc/rspamd/surbl-whitelist.inc";
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-};
-\end_layout
-
-\begin_layout Standard
-Некоторые пояснения по данной конфигурации.
- Модуль SURBL может осуществлять проверку битов в полученном от DNS сервера
- ответе, и вставлять соответствующий символ.
- Это используется для проверки сразу нескольких списков одним DNS запросе.
- Тогда ответ сервера содержит списки, в которых встретился данный URL в
- виде битов адреса.
- Более подробно с этим можно ознакомиться тут:
-\begin_inset CommandInset href
-LatexCommand href
-name "http://www.surbl.org/lists.html#multi"
-target "http://www.surbl.org/lists.html#multi"
-
-\end_inset
-
-.
- Список 2tld используется для задания списка доменов, для которых необходимо
- проверять не два уровня доменного имени, а три.
- Например, это актуально для виртуальных хостингов или же специальных зон
- для доменов третьего уровня, например org.ru или pp.ru.
-\end_layout
-
-\begin_layout Section
-Настройка модуля regexp
-\end_layout
-
-\begin_layout Standard
-Модуль regexp является очень важным в работе rspamd, так как определяет
- все правила фильтрации сообщений по регулярным выражениям.
- Модуль работает с логическими выражениями из регулярных выражений, поэтому
- его настройка выглядит достаточно запутанной.
- Однако, если пользоваться переменными, то логика работы становится более
- понятной.
- При настройке самого модуля используются простые директивы вида:
-\end_layout
-
-\begin_layout Code
-ИМЯ_СИМВОЛА = "логическое выражение"
-\end_layout
-
-\begin_layout Standard
-Само логическое выражение содержит различные регулярные выражения и функции,
- объединенные символами логики:
-\end_layout
-
-\begin_layout Itemize
-& - логическое
-\begin_inset Quotes eld
-\end_inset
-
-\begin_inset Quotes erd
-\end_inset
-
-
-\end_layout
-
-\begin_layout Itemize
-| - логическое
-\begin_inset Quotes eld
-\end_inset
-
-ИЛИ
-\begin_inset Quotes erd
-\end_inset
-
-
-\end_layout
-
-\begin_layout Itemize
-! - логическое отрицание
-\end_layout
-
-\begin_layout Standard
-Приоритет операций может изменяться скобками, например:
-\end_layout
-
-\begin_layout LyX-Code
-A & B | C - выполняется слева направо A & B затем | C
-\end_layout
-
-\begin_layout LyX-Code
-A & (B | C) - выполняется как (B | C) затем & A
-\end_layout
-
-\begin_layout Standard
-Сами регулярные выражения совместимы с perl regular expressions.
- Их синтаксис можно изучить в соответствующей литературе:
-\begin_inset CommandInset href
-LatexCommand href
-name "http://perldoc.perl.org/perlre.html"
-target "http://perldoc.perl.org/perlre.html"
-
-\end_inset
-
-.
- У rspamd есть дополнительные флаги, определяющие, в какой части сообщения
- искать заданное регулярное выражение:
-\end_layout
-
-\begin_layout Itemize
-r - "сырой" незакодированный в utf8 regexp
-\end_layout
-
-\begin_layout Itemize
-H - ищет по заголовкам сообщения
-\end_layout
-
-\begin_layout Itemize
-M - ищет по всему сообщению (в "сыром" виде, то есть без mime декодинга)
-
-\end_layout
-
-\begin_layout Itemize
-P - ищет по всем текстовым mime частям
-\end_layout
-
-\begin_layout Itemize
-U - ищет по url
-\end_layout
-
-\begin_layout Itemize
-X - ищет по "сырым" хедерам (опять же без декодирования)
-\end_layout
-
-\begin_layout Standard
-Если в регулярном выражении встречаются символы двойной кавычки (
-\begin_inset Quotes eld
-\end_inset
-
-) или же слэша (/), то их необходимо экранировать обратным слэшем (при этом
- сам обратный слэш экранировать необязательно):
-\end_layout
-
-\begin_layout LyX-Code
-
-\backslash
-"
-\backslash
-/
-\end_layout
-
-\begin_layout Standard
-Для поиска по заголовкам формат регулярного выражения несколько меняется:
-\end_layout
-
-\begin_layout LyX-Code
-Имя_заголовка=/регулярное_выражение/H
-\end_layout
-
-\begin_layout Standard
-При поиске по заголовкам происходит поиск заголовков с таким именем и сравнение
- их значений с регулярным выражением, пока это выражение не будет найдено,
- либо пока не будут проверены все заголовки с таким именем.
- Для multipart сообщений происходит поиск заголовков по всем частям сообщения.
- Это справедливо для всех функций, работающих с заголовками.
- Поиск по
-\begin_inset Quotes eld
-\end_inset
-
-сырым
-\begin_inset Quotes erd
-\end_inset
-
- заголовкам происходит без учета mime частей - только по заголовкам самого
- сообщения.
- При этом, хотя и не происходит декодирования заголовков, но происходит
- их де-фолдинг (фолдинг - перенос заголовков по строчкам).
- Модуль regexp также может использовать внутри логических выражений встроенные
- функции rspamd.
- Встроенные функции всегда возвращат логическое значение (истина или ложь)
- и могут принимать аргументы (в том числе аргументы, являющиеся логическими
- выражениями).
- Список встроенных функций:
-\end_layout
-
-\begin_layout Itemize
-header_exists - принимает в качестве аргумента имя хедера, возвращает true,
- если такой заголовок существует
-\end_layout
-
-\begin_layout Itemize
-compare_parts_distance - принимает в качестве аргумента число от 0 до 100,
- которое отражает разницу в процентах между частями письма.
- Функция работает с сообщениями, содержащими 2 текстовые части (text/plain
- и text/html) и возвращает true тогда, когда эти части различаются более
- чем на n процентов.
- Если аргумент не указан, то по умолчанию ищется различие в 100% (полностью
- разные части).
-\end_layout
-
-\begin_layout Itemize
-compare_transfer_encoding - сравнивает Content-Transfer-Encoding с заданной
- строкой
-\end_layout
-
-\begin_layout Itemize
-content_type_compare_param - сравнивает параметр content-type заголовка
- с регулярным выражением или строкой:
-\end_layout
-
-\begin_layout LyX-Code
-content_type_compare_param(Charset, /windows-
-\backslash
-d+/)
-\end_layout
-
-\begin_layout LyX-Code
-content_type_compare_param(Charset, ascii)
-\end_layout
-
-\begin_layout Itemize
-content_type_has_param - проверяет, есть ли в заголовке content-type определенны
-й параметр
-\end_layout
-
-\begin_layout Itemize
-content_type_is_subtype - сравнивает подтип content-type с регулярным выражением
- или строкой
-\end_layout
-
-\begin_layout Itemize
-content_type_is_type - сравнивает тип content-type с регулярным выражением
- или строкой
-\end_layout
-
-\begin_layout LyX-Code
-content_type_is_type(text)
-\end_layout
-
-\begin_layout LyX-Code
-content_type_is_subtype(/?.html/)
-\end_layout
-
-\begin_layout Itemize
-regexp_match_number - принимает в качестве первого параметра число, которое
- означает порог сработавших регэкспов и список регэкспов или функций, которые
- должны проверяться.
- Если число сработавших регэкспов или функций больше порога, функция возвращает
- TRUE, иначе - FALSE, например:
-\end_layout
-
-\begin_layout LyX-Code
-regexp_match_number(2, ${__RE1}, ${__RE2}, header_exists(Subject))
-\end_layout
-
-\begin_layout Itemize
-has_only_html_part - функция возвращает TRUE, если в сообщении есть только
- одна HTML часть
-\end_layout
-
-\begin_layout Itemize
-compare_recipients_distance - вычисляет процент схожих получателей письма.
- Принимает аргумент - порог в процентах похожести.
-
-\end_layout
-
-\begin_layout Itemize
-is_recipients_sorted - возвращает TRUE, если список получателей сортирован
- (работает только если число получателей >= 5).
-
-\end_layout
-
-\begin_layout Itemize
-is_html_balanced - возвращает TRUE, если теги всех html частей сбалансированы
-
-\end_layout
-
-\begin_layout Itemize
-has_html_tag - возвращает TRUE, если заданный html тег найден
-\end_layout
-
-\begin_layout Standard
-Данные функции были созданы для решения задач, которые сложно или же невозможно
- решить при помощи обычных регулярных выражений.
- При конфигурации модуля regexp целесообразно определить все логические
- выражения в отдельных переменных, подключить их при помощи директивы .include
- и задавать символы как:
-\end_layout
-
-\begin_layout LyX-Code
-СИМВОЛ="${переменная}";
-\end_layout
-
-\begin_layout Standard
-иначе конфигурация модуля будет практически нечитаемой из-за обилия регулярных
- выражений.
-\end_layout
-
-\begin_layout Section
-Настройка модуля spf
-\end_layout
-
-\begin_layout Standard
-Модуль spf предназначен для проверки spf записей для отправителя письма.
- Технология SPF позволяет определить в DNS TXT запись для данного домена
- с определениями, с каких ip адресов или сетей допустима отправка почты
- для данного домена.
- Также spf позволяет создавать
-\begin_inset Quotes fld
-\end_inset
-
-черные списки
-\begin_inset Quotes frd
-\end_inset
-
- для данного домена - адреса, с которых запрещена отправка почты для домена.
- Rspamd может получать spf записи, и проверять, возможна ли отправка почты
- данного домена с данного ip.
- При этом возможно добавление 3-х символов:
-\end_layout
-
-\begin_layout Itemize
-FAIL - отправка запрещена
-\end_layout
-
-\begin_layout Itemize
-SOFTFAIL - отправка явно не разрешена, но и явно не запрещена
-\end_layout
-
-\begin_layout Itemize
-ALLOW - отправка явно разрешена
-\end_layout
-
-\begin_layout Standard
-Для задания этих символов можно использовать настройки модуля spf:
-\end_layout
-
-\begin_layout LyX-Code
-.module 'spf' {
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-symbol_fail = "SPF_FAIL";
-\end_layout
-
-\begin_layout LyX-Code
-symbol_softfail = "SPF_SOFTFAIL";
-\end_layout
-
-\begin_layout LyX-Code
-symbol_allow = "SPF_ALLOW";
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-};
-\end_layout
-
-\begin_layout Standard
-Коэффициенты для данных символов лучше определить следующим образом: высокий
- вес для символа FAIL, достаточно низкий вес для символа SOFTFAIL и отрицательны
-й вес для символа ALLOW.
-\end_layout
-
-\begin_layout Chapter
-Cтатистические алгоритмы
-\end_layout
-
-\begin_layout Section
-Winnow и OSB
-\end_layout
-
-\begin_layout Standard
-В rspamd используется алгоритм ортогональных разреженных биграмм (OSB),
- который основан на следующем принципе:
-\end_layout
-
-\begin_layout Code
-\begin_inset listings
-inline false
-status open
-
-\begin_layout Quotation
-
-\end_layout
-
-\begin_layout Quotation
-
-\end_layout
-
-\begin_layout Quotation
-
- н -----------------------------------
-\end_layout
-
-\begin_layout Quotation
-
- а -----------------------------------
-\end_layout
-
-\begin_layout Quotation
-
- б -----------------------------------
-\end_layout
-
-\begin_layout Quotation
-
- о | w1 | w2 | w3 | w4 | w5 |
-\end_layout
-
-\begin_layout Quotation
-
- р | | | | | | --> выходные токены
-\end_layout
-
-\begin_layout Quotation
-
- ы -----------------------------------
-\end_layout
-
-\begin_layout Quotation
-
- / Текущий набор хешей и весов
-\end_layout
-
-\begin_layout Quotation
-
- /
-\end_layout
-
-\begin_layout Quotation
-
-Входные токены
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-То есть, процесс преобразования можно представить следующим образом: для
- каждого набора весов (w1..w5) составляется набор хешей.
- Токены образуются из текста.
- Например, возьмем некое письмо и наложим на него окно:
-\end_layout
-
-\begin_layout LyX-Code
-"Мама мыла раму."
-\end_layout
-
-\begin_layout LyX-Code
-|________|
-\end_layout
-
-\begin_layout Standard
-В данном окне создаются 2 токена:
-\end_layout
-
-\begin_layout Standard
-h("Мама"), h("мыла"), где h - хеш функция.
-\end_layout
-
-\begin_layout Standard
-Дальше окно двигается вправо на один токен и опять создаются 2 токена: h("мыла")
-, h("раму")
-\end_layout
-
-\begin_layout Standard
-В rspamd используется окно в 5 токенов и используются пары:
-\end_layout
-
-\begin_layout LyX-Code
-1 - 5 -- h1
-\end_layout
-
-\begin_layout LyX-Code
-2 - 5 -- h2
-\end_layout
-
-\begin_layout LyX-Code
-3 - 5 -- h3
-\end_layout
-
-\begin_layout LyX-Code
-4 - 5 -- h4
-\end_layout
-
-\begin_layout Standard
-Каждый такой токен состоит из двух хешей (h1 и h2).
- То есть каждое слово текста может давать до 5-ти токенов.
- Это делается для того, чтобы в статистических алгоритмах учитывать не индивидуа
-льные слова, и их сочетания, чтобы уменьшить ошибку.
-\end_layout
-
-\begin_layout Standard
-После этого мы должны вычислить принадлежность потока выходных токенов к
- некоторому классу.
- Для этого используется алгоритм Winnow.
- Идея алгоритма очень проста:
-\end_layout
-
-\begin_layout Enumerate
-Каждый возможный входной токен имеет вес 1.0 (то есть, нас интересуют только
- те токены, которые не равны 1.0)
-\end_layout
-
-\begin_layout Enumerate
-Для обучения проделываем следующие шаги:
-\end_layout
-
-\begin_deeper
-\begin_layout Enumerate
-генерируем набор токенов путем OSB алгоритма
-\end_layout
-
-\begin_layout Enumerate
-удаляем все дупликаты
-\end_layout
-
-\begin_layout Enumerate
-если данный входной набор принадлежит классу (например, спам или неспам),
- то умножаем вес каждого встреченного токена на т.н.
- Promotion Constant, которая равна 1,23
-\end_layout
-
-\begin_layout Enumerate
-если данный входной набор не принадлежит классу, то умножаем каждый найденный
- токен на Demotion Constant в данном классе, которая равна 0,83
-\end_layout
-
-\begin_layout Enumerate
-абсолютно неважно, сколько раз встречался данный токен во входном потоке,
- мы его умножаем на promotion или demotion только один раз
-\end_layout
-
-\end_deeper
-\begin_layout Enumerate
-Для классификации потока мы поступаем следующим образом:
-\end_layout
-
-\begin_deeper
-\begin_layout Enumerate
-генерируем набор токенов путем OSB алгоритма
-\end_layout
-
-\begin_layout Enumerate
-удаляем все дупликаты
-\end_layout
-
-\begin_layout Enumerate
-суммируем веса всех токенов, найденных в каждом из файлов данных статистики
- (при этом те токены, которые мы не нашли, имеют вес 1)
-\end_layout
-
-\begin_layout Enumerate
-затем мы делим полученную сумму на число токенов и смотрим, какой из классов
- (файлов данных) набрал больше очков и делаем заключение о принадлежности
- входного текста к классу
-\end_layout
-
-\end_deeper
-\begin_layout Standard
-Файлы данных статистики представляют собой следующие структуры:
-\end_layout
-
-\begin_layout LyX-Code
-{
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-Header,
-\end_layout
-
-\begin_layout LyX-Code
-{ feature_block1..feature_blockN }
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-}
-\end_layout
-
-\begin_layout Standard
-Заголовок файла очень прост:
-\end_layout
-
-\begin_layout LyX-Code
-struct {
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-char magic[3] = { 'r', 's', 'd' };
-\end_layout
-
-\begin_layout LyX-Code
-u_char version[2] = { '1', '0' };
-\end_layout
-
-\begin_layout LyX-Code
-uint64_t create_time;
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-}
-\end_layout
-
-\begin_layout Standard
-Каждый feature_block состоит из 4-х полей:
-\end_layout
-
-\begin_layout LyX-Code
-struct {
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-uint32_t hash1;
-\end_layout
-
-\begin_layout LyX-Code
-uint32_t hash2;
-\end_layout
-
-\begin_layout LyX-Code
-double value;
-\end_layout
-
-\begin_layout LyX-Code
-uint32_t last_access;
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-}
-\end_layout
-
-\begin_layout Standard
-Итого 16 байт на каждый feature.
- 0-е значения показывают свободную ячейку.
- Значение hash1 используется в качестве индекса:
-\end_layout
-
-\begin_layout LyX-Code
-idx = hash1 % filesize;
-\end_layout
-
-\begin_layout Standard
-Где filesize - размер в количестве feature_block'ов.
- При этом данный токен должен помещаться в заданную ячейку или ячейку за
- ним.
- При этом образуется цепочка токенов:
-\end_layout
-
-\begin_layout Standard
-\begin_inset listings
-inline false
-status open
-
-\begin_layout Plain Layout
-
-idx
-\end_layout
-
-\begin_layout Plain Layout
-
-
-\backslash
-
-\end_layout
-
-\begin_layout Plain Layout
-
-| занят | занят | занят | свободен |
-\end_layout
-
-\begin_layout Plain Layout
-
-
-\backslash
------^
-\backslash
------^
-\backslash
------^
-\end_layout
-
-\end_inset
-
-При этом, длина такой цепочки должна быть лимитирована некоторым разумным
- числом, например 128.
- Тогда максимальное время доступа будет не более 128-и итераций.
- Если мы не нашли за 128 итераций свободную ячейку, то мы можем поместить
- новый токен на место того, который меньше всего использовался (min (last_access
-)).
- При этом при доступе к ячейке необходимо обновлять last_access:
-\end_layout
-
-\begin_layout Code
-last_access = now - creation_time.
-
-\end_layout
-
-\begin_layout Standard
-Такая организация позволяет замещать только наименее используемые токены.
-\end_layout
-
-\begin_layout Chapter
-Протокол rspamc
-\end_layout
-
-\begin_layout Standard
-Формат запроса схож с http:
-\end_layout
-
-\begin_layout LyX-Code
-COMMAND RSPAMC/1.0
-\end_layout
-
-\begin_layout Standard
-При этом допустимы следующие команды:
-\end_layout
-
-\begin_layout Itemize
-CHECK - проверить сообщение и выдать результат по каждой из метрик (не выводя
- символов)
-\end_layout
-
-\begin_layout Itemize
-SYMBOLS - проверить сообщение, выдать результат по каждой из метрик и символы
- по каждой из метрик
-\end_layout
-
-\begin_layout Itemize
-PROCESS - проверить сообщение, выдать результат по каждой из метрик, а затем
- вывести исходное сообщение
-\end_layout
-
-\begin_layout Itemize
-PING - не принимая сообщение выдать готовность к работе
-\end_layout
-
-\begin_layout Standard
-Также в зависимости от подключенных плагинов могут быть доступны другие
- команды протокола, например URLS (вывести все найденные в сообщении url'и)
- или EMAILS.
-\end_layout
-
-\begin_layout Standard
-Формат ответа:
-\end_layout
-
-\begin_layout LyX-Code
-SPAMD/1.1 0 EX_OK
-\end_layout
-
-\begin_layout LyX-Code
-
-\backslash
- /
-\backslash
-/
-\end_layout
-
-\begin_layout LyX-Code
-Версия Код ошибки
-\end_layout
-
-\begin_layout LyX-Code
-Spam: False ; 2 / 5
-\end_layout
-
-\begin_layout Standard
-Это формат совместимости с sa-spamd (без метрик).
- Новый формат ответа:
-\end_layout
-
-\begin_layout LyX-Code
-RSPAMD/1.0 0 EX_OK
-\end_layout
-
-\begin_layout LyX-Code
-Metric: Name; Spam_Result; Spam_Mark / Spam_Mark_Required
-\end_layout
-
-\begin_layout LyX-Code
-Metric: Name2 ; Spam_Result2 ; Spam_Mark2 / Spam_Mark_Required2
-\end_layout
-
-\begin_layout Standard
-Заголовков типа metric может быть несколько.
- Формат вывода символов:
-\end_layout
-
-\begin_layout LyX-Code
-SYMBOL1, SYMBOL2, SYMBOL3 -- формат совместимости с sa-spamd
-\end_layout
-
-\begin_layout LyX-Code
-Symbol: Name; Param1,Param2,Param3 -- формат rspamd
-\end_layout
-
-\begin_layout Standard
-Формат ответа зависит от формата запроса:
-\end_layout
-
-\begin_layout LyX-Code
-PROCESS SPAMC/1.2
-\end_layout
-
-\begin_layout LyX-Code
-
-\backslash
- /
-\backslash
- /
-\end_layout
-
-\begin_layout LyX-Code
-Команда Версия
-\end_layout
-
-\begin_layout Standard
-В любом из режимов работы поддерживаются следующие заголовки:
-\end_layout
-
-\begin_layout Itemize
-Content-Length - длина сообщения
-\end_layout
-
-\begin_layout Itemize
-Helo - HELO, полученный от клиента
-\end_layout
-
-\begin_layout Itemize
-From - MAIL FROM
-\end_layout
-
-\begin_layout Itemize
-IP - IP клиента
-\end_layout
-
-\begin_layout Itemize
-Recipient-Number - число реципиентов
-\end_layout
-
-\begin_layout Itemize
-Rcpt - реципиент
-\end_layout
-
-\begin_layout Itemize
-Queue-ID - идентификатор очереди
-\end_layout
-
-\begin_layout Standard
-Эти значения могут использоваться в фильтрах rspamd.
-\end_layout
-
-\begin_layout Chapter
-Клиент rspamc
-\end_layout
-
-\begin_layout Standard
-Клиент rspamc представляет собой программу, написанную на perl и предназначенную
- для работы с системой rspamd.
- Rspamc принимает следующие аргументы:
-\end_layout
-
-\begin_layout Itemize
--с: определяет путь к конфигурационному файлу rspamd, используется для работы
- с локальным rspamd
-\end_layout
-
-\begin_layout Itemize
--h: определяет адрес удаленного rspamd сервера
-\end_layout
-
-\begin_layout Itemize
--p: определяет порт для удаленного rspamd сервера
-\end_layout
-
-\begin_layout Itemize
--P: определяет пароль для работы с привиллегированными командами rspamd
-\end_layout
-
-\begin_layout Itemize
--s: определяет имя символа для обучения классификатора
-\end_layout
-
-\begin_layout Standard
-Последним аргументом rspamc принимает команду.
- Если команда не задана, то используется команда SYMBOLS.
- Команды, принимаемые rspamc:
-\end_layout
-
-\begin_layout Itemize
-команды по обработке сообщений:
-\end_layout
-
-\begin_deeper
-\begin_layout Itemize
-symbols - по данной команде проверяется сообщение, переданное через stdin
- rspamc
-\end_layout
-
-\begin_layout Itemize
-check - по данной команде выводится только результат по метрикам без символов
-\end_layout
-
-\begin_layout Itemize
-process - возвращает не только символы, но и исходное сообщение
-\end_layout
-
-\begin_layout Itemize
-urls - выводит все найденные url'и
-\end_layout
-
-\begin_layout Itemize
-emails - выводит все найденные адреса e-mail в сообщении
-\end_layout
-
-\end_deeper
-\begin_layout Itemize
-команды по работе с управляющим интерфейсом
-\end_layout
-
-\begin_deeper
-\begin_layout Itemize
-stat - выводит статистику работы
-\end_layout
-
-\begin_layout Itemize
-learn - обучает классификатор по определенному классу (указанному опцией
- -s)
-\end_layout
-
-\begin_layout Itemize
-shutdown - останавливает систему rspamd
-\end_layout
-
-\begin_layout Itemize
-uptime - выводит время работы rspamd
-\end_layout
-
-\begin_layout Itemize
-counters - выводит значения счетчиков символов
-\end_layout
-
-\begin_layout Itemize
-fuzzy_add - добавляет fuzzy hash в хранилище
-\end_layout
-
-\begin_layout Itemize
-fuzzy_del - удаляет fuzzy hash из хранилища
-\end_layout
-
-\end_deeper
-\begin_layout Chapter
-LUA API плагинов
-\end_layout
-
-\begin_layout Standard
-Rspamd позволяет реализовывать различную логику в виде lua плагинов, для
- чего используется директива modules.
- Данная директива позволяет задавать пути к каталогам, содержащим скрипты
- на lua:
-\end_layout
-
-\begin_layout LyX-Code
-modules {
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-module_path =
-\begin_inset Quotes fld
-\end_inset
-
-/some/path/
-\begin_inset Quotes frd
-\end_inset
-
-;
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-};
-\end_layout
-
-\begin_layout Standard
-При инициализации rspamd загружает все файлы вида *.lua и выполняет их (при
- ошибке в коде плагинов rspamd запускаться не будет, выдавая ошибку конфигурации
-, при указанной опции -t будет проверяться не только синтаксис конфигурационного
- файла, но и синтаксис плагинов).
- При этом, определяется глобальная переменная rspamd_config, позволяющая
- извлекать опции конфигурации и регистрировать правила и соответствующие
- им символы.
- Таким образом, каждый lua плагин условно можно разделить на две части:
- исполняемый код, выполняющий настройку опций модуля, регистрирующий функции
- правил (callbacks), и собственно обработчики правил.
-
-\end_layout
-
-\begin_layout Section
-Настройка lua модуля
-\end_layout
-
-\begin_layout Standard
-Для извлечения параметров конфигурации и регистрации обработчиков правил
- применяется глобальная переменная rspamd_config, которая обладает рядом
- полезных методов:
-\end_layout
-
-\begin_layout Itemize
-get_module_opt (module_name, option_name) - возвращает значение опции option_nam
-e для модуля с именем module_name.
- То есть, если в конфигурационном файле есть следующая запись:
-\end_layout
-
-\begin_layout LyX-Code
-module 'test' {
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-param =
-\begin_inset Quotes fld
-\end_inset
-
-value
-\begin_inset Quotes frd
-\end_inset
-
-;
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-};
-\end_layout
-
-\begin_deeper
-\begin_layout Standard
-То вызов rspamd_config:get_module_opt('test', 'param') вернет строку 'value';
-\end_layout
-
-\end_deeper
-\begin_layout Itemize
-get_all_opts (module_name) - возвращает таблицу из всех опций для данного
- модуля, ключом служит имя опции:
-\end_layout
-
-\begin_layout LyX-Code
-local opts = rspamd_config:get_all_opts('test')
-\end_layout
-
-\begin_layout LyX-Code
-if opts then
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-var = opts['param']
-\end_layout
-
-\begin_layout LyX-Code
-for k,v in pairs opts do
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-print (
-\begin_inset Quotes fld
-\end_inset
-
-Param:
-\begin_inset Quotes frd
-\end_inset
-
- ..
- k ..
-
-\begin_inset Quotes fld
-\end_inset
-
- Value:
-\begin_inset Quotes frd
-\end_inset
-
- ..
- v)
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-end
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-end
-\end_layout
-
-\begin_layout Itemize
-get_metric (name) - возвращает объект метрики с данным именем
-\end_layout
-
-\begin_layout Itemize
-register_function(name, callback) - регистрирует функцию lua для использования
- в логических выражениях rspamd, callback в данном случае - строка с именем
- функции, пример применения:
-\end_layout
-
-\begin_layout LyX-Code
-function some_func(task, arg1, arg2)
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-return false
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-end
-\end_layout
-
-\begin_layout LyX-Code
-rspamd_config:register_function('lua_func', 'some_func')
-\end_layout
-
-\begin_layout Standard
-Объект метрики используется для регистрации символов:
-\end_layout
-
-\begin_layout Itemize
-register_symbol (symbol, initial_weight, callback) - symbol определяет имя
- символа, initial_weight - изначальный вес, callback - строка с именем функции:
-\end_layout
-
-\begin_layout LyX-Code
-local m = rspamd_config:get_metric('default')
-\end_layout
-
-\begin_layout LyX-Code
-if m then
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-m:register_symbol('TEST', 1.0, 'some_callback')
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-end
-\end_layout
-
-\begin_layout Standard
-После регистрации обработчика символа этот обработчик будет вызываться rspamd
- обычным образом, используя планировщик символов (это подробно описано в
- 3.2).
-\end_layout
-
-\begin_layout Section
-Обработчик правила
-\end_layout
-
-\begin_layout Standard
-Обработчик правила - это функция, реализующая логику правила.
- В качестве параметра она принимает объект task, из которого можно извлечь
- различную информацию о сообщении.
- После выполнения логики работы обработчик может вставить символ, используя
- тот же объект task.
- Таким образом типичная функция-обработчик выглядит следующим образом:
-\end_layout
-
-\begin_layout LyX-Code
-function some_callback(task)
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-if some_condition(task) then
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-task:insert_result(metric, symbol, 1)
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-end
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-end
-\end_layout
-
-\begin_layout Standard
-Функция insert_result принимает в качестве параметров имя метрики, имя символа,
- вес и необязательный список строковых параметров, которые будут ассоциированы
- с этим символом.
- Объект task предоставляет ряд функций, позволяющих создать логику правила
- фильтрации:
-\end_layout
-
-\begin_layout Itemize
-get_received_headers() - возвращает массив из обработанных заголовков Received
- в виде таблицы:
-\end_layout
-
-\begin_deeper
-\begin_layout Itemize
-h['from_hostname'] - hostname, откуда получено сообщение
-\end_layout
-
-\begin_layout Itemize
-h['from_ip'] - ip, откуда получено сообщение
-\end_layout
-
-\begin_layout Itemize
-h['real_hostname'] - hostname, распознанное самим релеем
-\end_layout
-
-\begin_layout Itemize
-h['real_ip'] - ip, который соответствует real_hostname
-\end_layout
-
-\begin_layout Itemize
-h['by_hostname'] - hostname самого релея
-\end_layout
-
-\begin_layout Standard
-received заголовки в массиве идут в обратном порядке, то есть, первые релеи
- письма будут первыми элементами массива
-\end_layout
-
-\end_deeper
-\begin_layout Itemize
-get_raw_headers() - возвращает строку, содержащую все заголовки сообщения
- в неразобранном виде
-\end_layout
-
-\begin_layout Itemize
-get_text_parts() - возвращает массив объектов типа text_part
-\end_layout
-
-\begin_layout Itemize
-get_urls() - возвращает массив строк, содержащих извлеченные из сообщения
- URL'и
-\end_layout
-
-\begin_layout Itemize
-get_message() - возвращает объект типа сообщение
-\end_layout
-
-\begin_layout Itemize
-get_recipients() - возвращает массив получателей письма, переданных в ходе
- smtp диалога (командами RCPT TO:)
-\end_layout
-
-\begin_layout Itemize
-get_from() - возвращает адрес отправителя письма, переданных в ходе smtp
- диалога (команда MAIL FROM:)
-\end_layout
-
-\begin_layout Itemize
-get_helo() - возвращает значение HELO
-\end_layout
-
-\begin_layout Itemize
-get_from_ip() - возвращает ip адрес, откуда нам пришло данное письмо
-\end_layout
-
-\begin_layout Standard
-Объект
-\begin_inset Quotes fld
-\end_inset
-
-message
-\begin_inset Quotes frd
-\end_inset
-
- применяется для манипуляций с заголовками:
-\end_layout
-
-\begin_layout Itemize
-get_header(headername) - возвращает массив всех значений заголовков с таким
- именем (может быть массив из одного элемента, если такой заголовок в сообщении
- представлен единожды)
-\end_layout
-
-\begin_layout Itemize
-set_header(headername, headervalue) - устанавливает заданный заголовок
-\end_layout
-
-\begin_layout Standard
-Объект text_part предназначен для манипуляций с текстовым содержимым сообщения:
-\end_layout
-
-\begin_layout Itemize
-get_content() - возвращает текстовое содержимое части
-\end_layout
-
-\begin_layout Itemize
-is_html() - возвращает true, если данная часть представляет собой HTML
-\end_layout
-
-\begin_layout Itemize
-is_empty() - возвращает true, если данная часть не содержит текста
-\end_layout
-
-\begin_layout Itemize
-get_fuzzy() - возвращает строку с нечетким хешем для данного сообщения
-\end_layout
-
-\begin_layout Standard
-Пример функции-обработчика:
-\end_layout
-
-\begin_layout LyX-Code
-function received_cb (task)
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-local recvh = task:get_received_headers()
-\end_layout
-
-\begin_layout LyX-Code
-for _,rh in ipairs(recvh) do
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-if rh['real_ip'] then
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-local parts = task:get_text_parts()
-\end_layout
-
-\begin_layout LyX-Code
-for _,part in ipairs(parts) do
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-if not part:is_empty() then
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-local text = part:get_content()
-\end_layout
-
-\begin_layout LyX-Code
-if some_filter(text) then
-\end_layout
-
-\begin_layout LyX-Code
-task:insert_result(metric, symbol, 1)
-\end_layout
-
-\begin_layout LyX-Code
-end
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-end
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-end
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-end
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-end
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-end
-\end_layout
-
-\begin_layout Section
-Использование DNS
-\end_layout
-
-\begin_layout Standard
-Для многих задач фильтрации сообщений используются различные DNS запросы,
- поэтому lua интерфейс предоставляет возможность планирования DNS запросов,
- используя объект task:
-\end_layout
-
-\begin_layout Itemize
-resolve_dns_a(host, callback) - выполняет прямое преобразование имени host,
- после чего вызывает обработчик callback
-\end_layout
-
-\begin_layout Itemize
-resolve_dns_ptr(ip, callback) - то же, что и предыдущее, но выполняет обратное
- преобразование ip
-\end_layout
-
-\begin_layout Standard
-Так как DNS преобразования осуществляются асинхронно, то необходимо задавать
- обработчик, который будет вызываться по завершению DNS запроса.
- Обработчик имеет следующий вид:
-\end_layout
-
-\begin_layout LyX-Code
-function dns_cb(task, to_resolve, results, err)
-\end_layout
-
-\begin_layout Itemize
-task - объект task
-\end_layout
-
-\begin_layout Itemize
-to_resolve - строка, содержащая имя хоста или ip, для которого выполнялось
- преобразование
-\end_layout
-
-\begin_layout Itemize
-results - массив, содержащий ip адреса (для прямого преобразования) или
- же имя хоста (для обратного).
- В случае ошибки этот параметр имеет значение nil
-\end_layout
-
-\begin_layout Itemize
-err - строка, описывающая ошибку (или nil, если преобразование успешно завершило
-сь)
-\end_layout
-
-\begin_layout Standard
-Пример функции-обработчика результатов DNS запроса:
-\end_layout
-
-\begin_layout LyX-Code
-function dns_cb(task, to_resolve, results, err)
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-if results then
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-local _,_,rbl = string.find(to_resolve, '%d+
-\backslash
-.%d+
-\backslash
-.%d+
-\backslash
-.%d+
-\backslash
-.(.+)')
-\end_layout
-
-\begin_layout LyX-Code
-task:insert_result(metric, symbol, 1, rbl)
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-end
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-end
-\end_layout
-
-\begin_layout Section
-Использование файлов-списков
-\end_layout
-
-\begin_layout Standard
-В lua плагинах можно задавать и использовать файлы списков, как это описано
- в п.
- 4.1.
- Это полезно, когда в lua необходимо использовать некоторые данные, которые
- бы асинхронно обновлялись в процессе работы rspamd.
- API по работе со списками сожержит следующие функции:
-\end_layout
-
-\begin_layout Itemize
-rspamd_config:add_radix_map (string) - добавляет определение списка, содержащего
- ip адреса и сети.
- При удачном добавлении возвращается объект типа rspamd_radix, который может
- использоваться в обработчиках символов для определения наличия в каком-либо
- списке заданного ip;
-\end_layout
-
-\begin_layout Itemize
-rspamd_config:add_hash_map (string) - добавляет определение списка строк
- (доменов), при успешном добавлении возвращает объект типа rspamd_hash.
-\end_layout
-
-\begin_layout Standard
-Использовать списки целесообразно в функциях-обработчкиках, так как сразу
- же после добавления эти списки могут оказаться пустыми.
- Объекты, возвращаемые функциями, регистрирующими файлы списков, имеют метод
- get_key, позволяющий определить наличие какого-либо элемента в списке.
- Для списков ip адресов этот объект принимает целое число, для списка строк
- - строку.
- Простой пример использования списков.
-\end_layout
-
-\begin_layout Standard
-Регистрация:
-\end_layout
-
-\begin_layout LyX-Code
-local radix_list = nil
-\end_layout
-
-\begin_layout LyX-Code
-local host_list = nil
-\end_layout
-
-\begin_layout LyX-Code
-radix_list = rspamd_config:add_radix_map ('http://somehost/ip.list')
-\end_layout
-
-\begin_layout LyX-Code
-host_list = rspamd_config:add_hash_map ('http://otherhost/host.list')
-\end_layout
-
-\begin_layout Standard
-Использование в обработчике символа:
-\end_layout
-
-\begin_layout LyX-Code
-function check_whitelist (task)
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
--- check client's ip
-\end_layout
-
-\begin_layout LyX-Code
-local ipn = task:get_from_ip_num()
-\end_layout
-
-\begin_layout LyX-Code
-if ipn and radix_list then
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-local key = radix_list:get_key(ipn)
-\end_layout
-
-\begin_layout LyX-Code
-if key then
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-task:insert_result(metric, symbol_ip, 1)
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-end
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-end
-\end_layout
-
-\begin_layout LyX-Code
-
-\end_layout
-
-\begin_layout LyX-Code
--- check client's from domain
-\end_layout
-
-\begin_layout LyX-Code
-local from = task:get_from()
-\end_layout
-
-\begin_layout LyX-Code
-if from and host_list then
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
--- extract domain part
-\end_layout
-
-\begin_layout LyX-Code
-local _,_,domain = string.find(from, '@(.+)>?$')
-\end_layout
-
-\begin_layout LyX-Code
-local key = host_list:get_key(domain)
-\end_layout
-
-\begin_layout LyX-Code
-if key then
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-task:insert_result(metric, symbol_from, 1)
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-end
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-end
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-end
-\end_layout
-
-\begin_layout Chapter
-Perl API rspamd
-\end_layout
-
-\begin_layout Standard
-Для обработки сообщений системой rspamd было создано простое perl api для
- проверки сообщений системой rspamd и обучения системы rspamd.
- Данное API содержится в модуле Mail::Rspamd::Client.
- Использование API достаточно тривиально:
-\end_layout
-
-\begin_layout LyX-Code
-#!/usr/bin/perl -w
-\end_layout
-
-\begin_layout LyX-Code
-
-\end_layout
-
-\begin_layout LyX-Code
-use Mail::Rspamd::Client;
-\end_layout
-
-\begin_layout LyX-Code
-
-\end_layout
-
-\begin_layout LyX-Code
-my $testmsg;
-\end_layout
-
-\begin_layout LyX-Code
-while (<>) {
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-$testmsg .= $_;
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-}
-\end_layout
-
-\begin_layout LyX-Code
-my $client = new Mail::Rspamd::Client(
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-{
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-port => 11333,
-\end_layout
-
-\begin_layout LyX-Code
-hosts => ['localhost:11333',],
-\end_layout
-
-\begin_layout LyX-Code
-ip => '127.0.0.1'
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-}
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-);
-\end_layout
-
-\begin_layout LyX-Code
-
-\end_layout
-
-\begin_layout LyX-Code
-if ($client->ping()) {
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-print "Ping is ok
-\backslash
-n";
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-}
-\end_layout
-
-\begin_layout LyX-Code
-my $result = $client->check($testmsg);
-\end_layout
-
-\begin_layout LyX-Code
-
-\end_layout
-
-\begin_layout LyX-Code
-if ($result && $result->{'default'}->{'isspam'} eq 'True') {
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-print "spam
-\backslash
-n";
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-} else {
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-print "ham
-\backslash
-n";
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-}
-\end_layout
-
-\begin_layout Standard
-Результаты обработки сообщения возвращаются в виде ссылки на хеш, который
- индексирован по метрикам.
- Каждая из метрик, в свою очередь, также является ссылкой на хеш, содержащий
- поля:
-\end_layout
-
-\begin_layout Itemize
-isspam - строка 'True' или 'False'
-\end_layout
-
-\begin_layout Itemize
-score - вес сообщения
-\end_layout
-
-\begin_layout Itemize
-threshold - предельный вес данной метрики
-\end_layout
-
-\begin_layout Itemize
-symbols - массив символов для данного сообщения
-\end_layout
-
-\begin_layout Standard
-Модуль имеет внутреннюю логику работы с несколькими серверами rspamd, выбирая
- каждый раз случайный сервер, а также помечая долго не работающие сервера,
- исключая их из списка активных на некоторое время.
- При создании Mail::Rspamd::Client также можно указать параметр from (значение
- SMTP команды mail from), параметр rcpt (массив SMTP команд rcpt to) и user
- (авторизированный пользователь SMTP).
- Полный список параметров:
-\end_layout
-
-\begin_layout Itemize
-username - имя пользователя (строка)
-\end_layout
-
-\begin_layout Itemize
-ip - ip адрес, с которого пришло сообщение (строка)
-\end_layout
-
-\begin_layout Itemize
-subject - тема письма (для не mime сообщений)
-\end_layout
-
-\begin_layout Itemize
-timeout - время ожидания в секундах (число)
-\end_layout
-
-\begin_layout Itemize
-password - пароль для команд котроллера (строка)
-\end_layout
-
-\begin_layout Itemize
-statfile - имя символа файла статистики для обучения (строка)
-\end_layout
-
-\begin_layout Itemize
-weight - вес сообщения для команд fuzzy_add и learn (число)
-\end_layout
-
-\begin_layout Itemize
-imap_search - строка поиска по IMAP (строка)
-\end_layout
-
-\begin_layout Standard
-Для выполнения команды на всех серверах используется команда do_all_cmd,
- возвращающая хеш вида host => %results.
-
-\end_layout
-
-\begin_layout Chapter
-Использование HTTP Redirector
-\end_layout
-
-\begin_layout Standard
-HTTP редиректор представляет собой утилиту, которая умеет проверять различные
- способы HTTP редиректов и выдавать реальный URL для любого заданного.
- Данная утилита предназначена для проверки URL'ей вида tinyurl.com, youfrog.com
- и прочих сервисов
-\begin_inset Quotes fld
-\end_inset
-
-коротких
-\begin_inset Quotes frd
-\end_inset
-
- URL'ей.
- HTTP редиректор работает как обычный HTTP сервер и принимает стандартные
- запросы вида:
-\end_layout
-
-\begin_layout LyX-Code
-GET /url_to_resolve HTTP/1.0
-\end_layout
-
-\begin_layout LyX-Code
-
-\end_layout
-
-\begin_layout Standard
-Для работы URL редиректор требует ряд perl модулей:
-\end_layout
-
-\begin_layout Itemize
-HTTP::Request - обработка HTTP запросов;
-\end_layout
-
-\begin_layout Itemize
-POE (Component::Server::TCP Filter::HTTPD Component::Client::HTTP) - для
- асинхронной обработки соединений;
-\end_layout
-
-\begin_layout Itemize
-HTML::HeadParser - для парсинга HTTP заголовков;
-\end_layout
-
-\begin_layout Itemize
-SWF::Element - для обработки SWF (adobe flash) редиректов;
-\end_layout
-
-\begin_layout Itemize
-Cache::Memcached::Fast - для хранения кеша URL'ей;
-\end_layout
-
-\begin_layout Itemize
-Digest::SHA256 - для индексации хеша;
-\end_layout
-
-\begin_layout Itemize
-Proc::Daemon, Proc::PidUtil - для демонизации и управления процессом;
-\end_layout
-
-\begin_layout Itemize
-URI::Escape - для нормализации URL'ей.
-\end_layout
-
-\begin_layout Standard
-Настройка утилиты осуществляется правкой скрипта rspamd-redirector, конфигурацио
-нные параметры находятся в хеше %cfg:
-\end_layout
-
-\begin_layout LyX-Code
-our %cfg = (
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-port => 8080, # Порт для приема соединений
-\end_layout
-
-\begin_layout LyX-Code
-max_size => 102400, # Максимальный размер принимаемых
- данных
-\end_layout
-
-\begin_layout LyX-Code
-http_timeout => 5, # Таймаут соединений (секунды)
-\end_layout
-
-\begin_layout LyX-Code
-max_rec => 5, # Максимум подзапросов
-\end_layout
-
-\begin_layout LyX-Code
-pidfile => '/var/run/rspamd/redirector.pid',# Путь до файла pid'а
-\end_layout
-
-\begin_layout LyX-Code
-logfile => '/var/log/rspamd-redirector.log',# Путь до log файла
-\end_layout
-
-\begin_layout LyX-Code
-do_log => 0, # Включить логирование запросов
-\end_layout
-
-\begin_layout LyX-Code
-debug => 0, # Включить отладочную информацию
-\end_layout
-
-\begin_layout LyX-Code
-memcached_servers => # Сервера кеша URL'ей
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-[
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-{ address => 'localhost:11211', weight => 2.5 },
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-],
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-digest_bits => 256, # Число бит в ключе кеша
-\end_layout
-
-\begin_layout LyX-Code
-cache_expire => 3600, # Время в секундах хранения
- записи кеша
-\end_layout
-
-\begin_layout LyX-Code
-user => '@RSPAMD_USER@', # Пользователь
-\end_layout
-
-\begin_layout LyX-Code
-group => '@RSPAMD_GROUP@', # Группа
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-);
-\end_layout
-
-\begin_layout Standard
-Для работы с redirector'ом необходимо учитывать следующее: при определенни
- редиректа rspamd-redirector делает полноценный http запрос, то есть, если
- мы будем пытаться разрешить запросы с различными GET параметрами в URL
- (например http://some_evil_host/unsubscribe?email=good@email.com), то тем
- самым можем занести
-\begin_inset Quotes fld
-\end_inset
-
-хорошие
-\begin_inset Quotes frd
-\end_inset
-
- адреса в списки спамеров.
- Кроме этого, появляется возможность организовать атаку на некоторый http
- сервер, послав много писем, содержащих его адрес.
- Поэтому проверять редиректы можно только у проверенных доменов.
- Для этого используются настройки модуля surbl в самом rspamd (так как именно
- модуль surbl отвечает за работу с редиректором):
-\end_layout
-
-\begin_layout LyX-Code
-.module 'surbl' {
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-...
-\end_layout
-
-\begin_layout LyX-Code
-redirector = "localhost:8080";
-\end_layout
-
-\begin_layout LyX-Code
-# Connect timeout for redirector
-\end_layout
-
-\begin_layout LyX-Code
-redirector_connect_timeout = "1s";
-\end_layout
-
-\begin_layout LyX-Code
-# IO timeout for redirector
-\end_layout
-
-\begin_layout LyX-Code
-redirector_read_timeout = "10s";
-\end_layout
-
-\begin_layout LyX-Code
-# Maps for hosts that should be checked with redirector
-\end_layout
-
-\begin_layout LyX-Code
-redirector_hosts_map = "http://some_host/redirector.hosts";
-\end_layout
-
-\begin_layout LyX-Code
-...
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-};
-\end_layout
-
-\begin_layout Standard
-При этом список redirector_hosts_map содержит домены, которые будут перед
- проверкой по surbl листам проверяться на наличие редиректов (то есть, именно
- в том виде, что будет при surbl запросе - 2 или 3 компонента имени хоста).
- Кеш URL'ей обязателен для работы редиректора, так как в противном случае
- массовая рассылка с одинаковым URL'ем приведет к большому числу http запросов.
- Кроме этого, кеш URL'ей существенно ускоряет работу редиректора.
- Лог файл редиректора позволяет увидеть, какие редиректы были распознаны
- и их тип: HTTP редирект, HTML редирект (тег meta refresh), JavaScript редирект
- (location = ...), SWF редирект или же кешированный редирект (найденный в memcached
-).
- Взаимодействие с редиректором возможно не только из rspamd, но и из любого
- другого приложения, работающего по HTTP протоколу.
-\end_layout
-
-\begin_layout Chapter
-Хранилище нечетких хешей
-\end_layout
-
-\begin_layout Standard
-Нечеткий хеш (fuzzy hash) отличается от обычного тем, что при небольшом
- изменении в исходном тексте, он также меняется незначительно.
- Традиционный (криптографический) хеш в таком случае меняется сильно.
- Эта особенность позволяет использовать нечеткие хеши для определения степени
- похожести текстов (у похожих текстов будут похожие нечеткие хеши).
- Эта операция является более быстрой, чем сравнение текстов, кроме этого,
- нечеткие хеши можно хранить, сравнивая с ними впоследствие полученные сообщения.
- В rspamd есть возможность использования хранилища нечетких хешей для проверки
- сообщений.
- При этом считаются хеши всех текстовых частей сообщения, а затем эти хеши
- проверяются на наличие в хранилище (с определенным процентом ошибки).
- Для хранилища хешей создается специальный процесс fuzzy, который работает
- с рабочим процессом rspamd по UDP протоколу.
- Несколько хранилищ создают общее хранилище хешей, каждый из элементов которого
- содержит часть хешей.
- При добавлении или удалении нового хранилища в общее хранилище, все данные
- хешей теряются (возможно, это будет устранено в будущем).
- При проверке хеша выбирается одно из хранилищ (соответственно хешу) и на
- него шлется запрос.
- При записи хеша выбирается то же самое хранилище, что и при проверке.
- Запись и удаление хеша из общего хранилища обеспечивается командами fuzzy_add
- и fuzzy_del на любом из контроллеров, использующих данное хранилище.
- Это можно делать, например, используя клиент rspamc:
-\end_layout
-
-\begin_layout LyX-Code
-rspamc fuzzy_add < message_to_add.eml
-\end_layout
-
-\begin_layout LyX-Code
-rspamd fuzzy_del < message_to_del.eml
-\end_layout
-
-\begin_layout Standard
-Настройка хранилища обеспечивается созданием записи для процесса fuzzy storage:
-\end_layout
-
-\begin_layout LyX-Code
-worker {
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-type = "fuzzy";
-\end_layout
-
-\begin_layout LyX-Code
-# Bind socket for fuzzy interface
-\end_layout
-
-\begin_layout LyX-Code
-bind_socket = *:11335;
-\end_layout
-
-\begin_layout LyX-Code
-count = 1;
-\end_layout
-
-\begin_layout LyX-Code
-# Path to filesystem storage
-\end_layout
-
-\begin_layout LyX-Code
-hashfile = "/tmp/fuzzy.db";
-\end_layout
-
-\begin_layout LyX-Code
-# Expire time for hashes in storage (h - for hours, d - for days)
-\end_layout
-
-\begin_layout LyX-Code
-expire = "10d";
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-};
-\end_layout
-
-\begin_layout Standard
-Для увеличения производительности хранилища можно заменить нечеткий поиск
- на поиск точного соответствия, а также установкой libJudy (
-\begin_inset CommandInset href
-LatexCommand href
-name "judy arrays"
-target "http://judy.sourceforge.net"
-
-\end_inset
-
-).
- После этого необходимо пересобрать rspamd (libJudy обнаруживается автоматически
-) и указать в настройках fuzzy worker'а параметр:
-\end_layout
-
-\begin_layout LyX-Code
-use_judy = "yes";
-\end_layout
-
-\begin_layout Standard
-Настройка hashfile используется для указания файла, в который периодически
- будут записываться полученные в хранилище хеши (частота синхронизации с
- файлом зависит от интенсивности модификаций в хранилище, также синхронизация
- происходит при завершении процесса fuzzy storage).
- Для настройки клиентской части хранилища используется модуль fuzzy_check:
-\end_layout
-
-\begin_layout LyX-Code
-.module 'fuzzy_check' {
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-metric = "default";
-\end_layout
-
-\begin_layout LyX-Code
-symbol = "R_FUZZY";
-\end_layout
-
-\begin_layout LyX-Code
-# List of fuzzy storage servers, separated by ',' or ';' or simple by spaces
-
-\end_layout
-
-\begin_layout LyX-Code
-servers = "localhost:11335;some_host:11335";
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-};
-\end_layout
-
-\begin_layout Standard
-После настройки клиентской части с указанными серверами начинает работать
- как рабочий процесс (для проверки сообщений), так и контроллер (для записи/удал
-ения хешей из хранилища).
-
-\end_layout
-
-\begin_layout Chapter
-CGI интерфейс rspamd
-\end_layout
-
-\begin_layout Standard
-Rspamd имеет простой интерфейс для управления кластером серверов при помощи
- веб браузера.
- Интерфейс позволяет выполнять основные команды (проверка сообщений, обучение
- rspamd, операции с fuzzy хешами, статистика) на выбранных серверах.
- Для передачи сообщения rspamd используется либо поле текстового ввода,
- либо непосредственная загрузка файла.
- Если используется поле текстового ввода и сообщение вводится в него без
- mime заголовков (например, для обучения), то интерфейс автоматически вставляет
- заголовки по умолчанию и передает составленное таким образом сообщение
- для обработки rspamd.
- Запуск CGI интерфейса возможен двумя способами: как standalone сервера
- и как cgi скрипта.
- Первый способ подходит для тестовой работы или же для использования в один
- поток.
- Второй способ лишен этиго недостатка, но требует наличия настроенного веб
- сервера.
- Для работы с rspamd используется модуль Mail::Rspamd::Client, описанный
- ранее.
- Аргументы запуска CGI интерфейса:
-\end_layout
-
-\begin_layout Itemize
--standalone - запуск в виде standalone http сервера
-\end_layout
-
-\begin_layout Itemize
--port - порт для запуска
-\end_layout
-
-\begin_layout Itemize
--host - имя хоста для запуска standalone сервера
-\end_layout
-
-\begin_layout Itemize
--cfg - имя файла, содержащего список серверов, с которыми будет работать
- CGI интерфейс
-\end_layout
-
-\end_body
-\end_document
diff --git a/doc/rspamd.pdf b/doc/rspamd.pdf
deleted file mode 100644
index c230a3435..000000000
--- a/doc/rspamd.pdf
+++ /dev/null
@@ -1,10845 +0,0 @@
-%PDF-1.4
-%
-5 0 obj
-<< /S /GoTo /D (chapter.1) >>
-endobj
-8 0 obj
-(\376\377\0001\000\040\004\036\004\061\004\111\004\060\004\117\000\040\004\070\004\075\004\104\004\076\004\100\004\074\004\060\004\106\004\070\004\117\000\040\004\070\000\040\004\062\004\076\004\067\004\074\004\076\004\066\004\075\004\076\004\101\004\102\004\070\000\040\000r\000s\000p\000a\000m\000d)
-endobj
-9 0 obj
-<< /S /GoTo /D (chapter.2) >>
-endobj
-12 0 obj
-(\376\377\0002\000\040\004\043\004\101\004\102\004\060\004\075\004\076\004\062\004\072\004\060\000\040\000r\000s\000p\000a\000m\000d)
-endobj
-13 0 obj
-<< /S /GoTo /D (section.2.1) >>
-endobj
-16 0 obj
-(\376\377\0002\000.\0001\000\040\004\042\004\100\004\065\004\061\004\076\004\062\004\060\004\075\004\070\004\117)
-endobj
-17 0 obj
-<< /S /GoTo /D (section.2.2) >>
-endobj
-20 0 obj
-(\376\377\0002\000.\0002\000\040\004\043\004\101\004\102\004\060\004\075\004\076\004\062\004\072\004\060)
-endobj
-21 0 obj
-<< /S /GoTo /D (section.2.3) >>
-endobj
-24 0 obj
-(\376\377\0002\000.\0003\000\040\004\027\004\060\004\077\004\103\004\101\004\072)
-endobj
-25 0 obj
-<< /S /GoTo /D (chapter.3) >>
-endobj
-28 0 obj
-(\376\377\0003\000\040\004\036\004\061\004\111\004\070\004\065\000\040\004\077\004\100\004\070\004\075\004\106\004\070\004\077\004\113\000\040\004\100\004\060\004\061\004\076\004\102\004\113)
-endobj
-29 0 obj
-<< /S /GoTo /D (section.3.1) >>
-endobj
-32 0 obj
-(\376\377\0003\000.\0001\000\040\004\037\004\073\004\060\004\075\004\070\004\100\004\076\004\062\004\060\004\075\004\070\004\065\000\040\004\070\000\040\004\067\004\060\004\077\004\103\004\101\004\072\000\040\004\100\004\060\004\061\004\076\004\107\004\070\004\105\000\040\004\077\004\100\004\076\004\106\004\065\004\101\004\101\004\076\004\062)
-endobj
-33 0 obj
-<< /S /GoTo /D (section.3.2) >>
-endobj
-36 0 obj
-(\376\377\0003\000.\0002\000\040\004\033\004\076\004\063\004\070\004\072\004\060\000\040\004\076\004\061\004\100\004\060\004\061\004\076\004\102\004\072\004\070\000\040\004\101\004\076\004\076\004\061\004\111\004\065\004\075\004\070\004\071)
-endobj
-37 0 obj
-<< /S /GoTo /D (chapter.4) >>
-endobj
-40 0 obj
-(\376\377\0004\000\040\004\035\004\060\004\101\004\102\004\100\004\076\004\071\004\072\004\060\000\040\000r\000s\000p\000a\000m\000d)
-endobj
-41 0 obj
-<< /S /GoTo /D (section.4.1) >>
-endobj
-44 0 obj
-(\376\377\0004\000.\0001\000\040\004\036\004\061\004\111\004\070\004\065\000\040\004\077\004\100\004\060\004\062\004\070\004\073\004\060\000\040\004\075\004\060\004\101\004\102\004\100\004\076\004\071\004\072\004\070)
-endobj
-45 0 obj
-<< /S /GoTo /D (subsection.4.1.1) >>
-endobj
-48 0 obj
-(\376\377\0004\000.\0001\000.\0001\000\040\004\036\004\077\004\100\004\065\004\064\004\065\004\073\004\065\004\075\004\070\004\117\000\040\004\101\004\077\004\070\004\101\004\072\004\076\004\062)
-endobj
-49 0 obj
-<< /S /GoTo /D (section.4.2) >>
-endobj
-52 0 obj
-(\376\377\0004\000.\0002\000\040\004\036\004\061\004\111\004\070\004\065\000\040\004\077\004\060\004\100\004\060\004\074\004\065\004\102\004\100\004\113\000\040\004\072\004\076\004\075\004\104\004\070\004\063\004\103\004\100\004\060\004\106\004\070\004\070)
-endobj
-53 0 obj
-<< /S /GoTo /D (section.4.3) >>
-endobj
-56 0 obj
-(\376\377\0004\000.\0003\000\040\004\035\004\060\004\101\004\102\004\100\004\076\004\071\004\072\004\060\000\040\004\077\004\100\004\076\004\106\004\065\004\101\004\101\004\076\004\062)
-endobj
-57 0 obj
-<< /S /GoTo /D (section.4.4) >>
-endobj
-60 0 obj
-(\376\377\0004\000.\0004\000\040\004\035\004\060\004\101\004\102\004\100\004\076\004\071\004\072\004\070\000\040\004\066\004\103\004\100\004\075\004\060\004\073\004\070\004\100\004\076\004\062\004\060\004\075\004\070\004\117)
-endobj
-61 0 obj
-<< /S /GoTo /D (section.4.5) >>
-endobj
-64 0 obj
-(\376\377\0004\000.\0005\000\040\004\035\004\060\004\101\004\102\004\100\004\076\004\071\004\072\004\070\000\040\004\074\004\065\004\102\004\100\004\070\004\072\004\070)
-endobj
-65 0 obj
-<< /S /GoTo /D (section.4.6) >>
-endobj
-68 0 obj
-(\376\377\0004\000.\0006\000\040\004\035\004\060\004\101\004\102\004\100\004\076\004\071\004\072\004\060\000\040\004\072\004\073\004\060\004\101\004\101\004\070\004\104\004\070\004\072\004\060\004\102\004\076\004\100\004\076\004\062)
-endobj
-69 0 obj
-<< /S /GoTo /D (subsection.4.6.1) >>
-endobj
-72 0 obj
-(\376\377\0004\000.\0006\000.\0001\000\040\004\035\004\060\004\101\004\102\004\100\004\076\004\071\004\072\004\060\000\040\004\101\004\070\004\075\004\105\004\100\004\076\004\075\004\070\004\067\004\060\004\106\004\070\004\070\000\040\004\101\004\102\004\060\004\102\004\070\004\101\004\102\004\070\004\072\004\070)
-endobj
-73 0 obj
-<< /S /GoTo /D (section.4.7) >>
-endobj
-76 0 obj
-(\376\377\0004\000.\0007\000\040\004\035\004\060\004\101\004\102\004\100\004\076\004\071\004\072\004\060\000\040\004\072\004\076\004\115\004\104\004\104\004\070\004\106\004\070\004\065\004\075\004\102\004\076\004\062\000\040\004\101\004\070\004\074\004\062\004\076\004\073\004\076\004\062)
-endobj
-77 0 obj
-<< /S /GoTo /D (section.4.8) >>
-endobj
-80 0 obj
-(\376\377\0004\000.\0008\000\040\004\037\004\100\004\065\004\064\004\101\004\102\004\060\004\062\004\073\004\065\004\075\004\070\004\117\000\040\004\070\000\040\004\075\004\060\004\101\004\102\004\100\004\076\004\071\004\072\004\070)
-endobj
-81 0 obj
-<< /S /GoTo /D (subsection.4.8.1) >>
-endobj
-84 0 obj
-(\376\377\0004\000.\0008\000.\0001\000\040\004\037\004\100\004\065\004\064\004\101\004\102\004\060\004\062\004\073\004\065\004\075\004\070\004\117)
-endobj
-85 0 obj
-<< /S /GoTo /D (subsection.4.8.2) >>
-endobj
-88 0 obj
-(\376\377\0004\000.\0008\000.\0002\000\040\004\037\004\076\004\073\004\114\004\067\004\076\004\062\004\060\004\102\004\065\004\073\004\114\004\101\004\072\004\070\004\065\000\040\004\075\004\060\004\101\004\102\004\100\004\076\004\071\004\072\004\070)
-endobj
-89 0 obj
-<< /S /GoTo /D (chapter.5) >>
-endobj
-92 0 obj
-(\376\377\0005\000\040\004\035\004\060\004\101\004\102\004\100\004\076\004\071\004\072\004\060\000\040\004\074\004\076\004\064\004\103\004\073\004\065\004\071)
-endobj
-93 0 obj
-<< /S /GoTo /D (section.5.1) >>
-endobj
-96 0 obj
-(\376\377\0005\000.\0001\000\040\004\035\004\060\004\101\004\102\004\100\004\076\004\071\004\072\004\060\000\040\004\074\004\076\004\064\004\103\004\073\004\117\000\040\000s\000u\000r\000b\000l)
-endobj
-97 0 obj
-<< /S /GoTo /D (section.5.2) >>
-endobj
-100 0 obj
-(\376\377\0005\000.\0002\000\040\004\035\004\060\004\101\004\102\004\100\004\076\004\071\004\072\004\060\000\040\004\074\004\076\004\064\004\103\004\073\004\117\000\040\000r\000e\000g\000e\000x\000p)
-endobj
-101 0 obj
-<< /S /GoTo /D (section.5.3) >>
-endobj
-104 0 obj
-(\376\377\0005\000.\0003\000\040\004\035\004\060\004\101\004\102\004\100\004\076\004\071\004\072\004\060\000\040\004\074\004\076\004\064\004\103\004\073\004\117\000\040\000s\000p\000f)
-endobj
-105 0 obj
-<< /S /GoTo /D (chapter.6) >>
-endobj
-108 0 obj
-(\376\377\0006\000\040\000C\004\102\004\060\004\102\004\070\004\101\004\102\004\070\004\107\004\065\004\101\004\072\004\070\004\065\000\040\004\060\004\073\004\063\004\076\004\100\004\070\004\102\004\074\004\113)
-endobj
-109 0 obj
-<< /S /GoTo /D (section.6.1) >>
-endobj
-112 0 obj
-(\376\377\0006\000.\0001\000\040\000W\000i\000n\000n\000o\000w\000\040\004\070\000\040\000O\000S\000B)
-endobj
-113 0 obj
-<< /S /GoTo /D (chapter.7) >>
-endobj
-116 0 obj
-(\376\377\0007\000\040\004\037\004\100\004\076\004\102\004\076\004\072\004\076\004\073\000\040\000r\000s\000p\000a\000m\000c)
-endobj
-117 0 obj
-<< /S /GoTo /D (chapter.8) >>
-endobj
-120 0 obj
-(\376\377\0008\000\040\004\032\004\073\004\070\004\065\004\075\004\102\000\040\000r\000s\000p\000a\000m\000c)
-endobj
-121 0 obj
-<< /S /GoTo /D (chapter.9) >>
-endobj
-124 0 obj
-(\376\377\0009\000\040\000L\000U\000A\000\040\000A\000P\000I\000\040\004\077\004\073\004\060\004\063\004\070\004\075\004\076\004\062)
-endobj
-125 0 obj
-<< /S /GoTo /D (section.9.1) >>
-endobj
-128 0 obj
-(\376\377\0009\000.\0001\000\040\004\035\004\060\004\101\004\102\004\100\004\076\004\071\004\072\004\060\000\040\000l\000u\000a\000\040\004\074\004\076\004\064\004\103\004\073\004\117)
-endobj
-129 0 obj
-<< /S /GoTo /D (section.9.2) >>
-endobj
-132 0 obj
-(\376\377\0009\000.\0002\000\040\004\036\004\061\004\100\004\060\004\061\004\076\004\102\004\107\004\070\004\072\000\040\004\077\004\100\004\060\004\062\004\070\004\073\004\060)
-endobj
-133 0 obj
-<< /S /GoTo /D (section.9.3) >>
-endobj
-136 0 obj
-(\376\377\0009\000.\0003\000\040\004\030\004\101\004\077\004\076\004\073\004\114\004\067\004\076\004\062\004\060\004\075\004\070\004\065\000\040\000D\000N\000S)
-endobj
-137 0 obj
-<< /S /GoTo /D (section.9.4) >>
-endobj
-140 0 obj
-(\376\377\0009\000.\0004\000\040\004\030\004\101\004\077\004\076\004\073\004\114\004\067\004\076\004\062\004\060\004\075\004\070\004\065\000\040\004\104\004\060\004\071\004\073\004\076\004\062\000-\004\101\004\077\004\070\004\101\004\072\004\076\004\062)
-endobj
-141 0 obj
-<< /S /GoTo /D (chapter.10) >>
-endobj
-144 0 obj
-(\376\377\0001\0000\000\040\000P\000e\000r\000l\000\040\000A\000P\000I\000\040\000r\000s\000p\000a\000m\000d)
-endobj
-145 0 obj
-<< /S /GoTo /D (chapter.11) >>
-endobj
-148 0 obj
-(\376\377\0001\0001\000\040\004\030\004\101\004\077\004\076\004\073\004\114\004\067\004\076\004\062\004\060\004\075\004\070\004\065\000\040\000H\000T\000T\000P\000\040\000R\000e\000d\000i\000r\000e\000c\000t\000o\000r)
-endobj
-149 0 obj
-<< /S /GoTo /D (chapter.12) >>
-endobj
-152 0 obj
-(\376\377\0001\0002\000\040\004\045\004\100\004\060\004\075\004\070\004\073\004\070\004\111\004\065\000\040\004\075\004\065\004\107\004\065\004\102\004\072\004\070\004\105\000\040\004\105\004\065\004\110\004\065\004\071)
-endobj
-153 0 obj
-<< /S /GoTo /D (chapter.13) >>
-endobj
-156 0 obj
-(\376\377\0001\0003\000\040\000C\000G\000I\000\040\004\070\004\075\004\102\004\065\004\100\004\104\004\065\004\071\004\101\000\040\000r\000s\000p\000a\000m\000d)
-endobj
-157 0 obj
-<< /S /GoTo /D [158 0 R /Fit ] >>
-endobj
-160 0 obj <<
-/Length 234
-/Filter /FlateDecode
->>
-stream
-xuQ=kAWX|lROM8*p$)y x0Ea+RR{qӚ\R fUȧٙmGz
-N_bX=(iLwfzgmͯX9QHbp[q;!i.p+ev:^{۴6:]6IE2
-= d'
-endstream
-endobj
-158 0 obj <<
-/Type /Page
-/Contents 160 0 R
-/Resources 159 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 165 0 R
->> endobj
-161 0 obj <<
-/D [158 0 R /XYZ 124.802 735.021 null]
->> endobj
-162 0 obj <<
-/D [158 0 R /XYZ 124.802 717.021 null]
->> endobj
-159 0 obj <<
-/Font << /F19 163 0 R /F20 164 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-200 0 obj <<
-/Length 1221
-/Filter /FlateDecode
->>
-stream
-xZM6Q:X%g隢 K@&YhEˏ!EK:}XHkQJ5j^)9}=Lf|PpM{`-s@έ;?~pUē^{;ЌH@ތjv{&tJv=6
-wto(neLy?V<OxxCH0_$7;݉G^ҿ~Z^ 0LF C?Ψ|8ਡ5GC6hp?Z+g
-X(!O@Tsp @B@ e`旯IפGLb <\2Vs S.DKHUZiW =s\g1uf]s ո
-endstream
-endobj
-199 0 obj <<
-/Type /Page
-/Contents 200 0 R
-/Resources 198 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 165 0 R
-/Annots [ 166 0 R 167 0 R 168 0 R 169 0 R 170 0 R 171 0 R 172 0 R 173 0 R 174 0 R 175 0 R 176 0 R 177 0 R 178 0 R 179 0 R 180 0 R 181 0 R 182 0 R 183 0 R 184 0 R 185 0 R 186 0 R 187 0 R 188 0 R 189 0 R 190 0 R 191 0 R 192 0 R 193 0 R 194 0 R ]
->> endobj
-166 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [123.806 562.658 351.142 573.781]
-/Subtype /Link
-/A << /S /GoTo /D (chapter.1) >>
->> endobj
-167 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [123.806 540.742 225.81 551.865]
-/Subtype /Link
-/A << /S /GoTo /D (chapter.2) >>
->> endobj
-168 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [138.746 528.787 215.163 539.91]
-/Subtype /Link
-/A << /S /GoTo /D (section.2.1) >>
->> endobj
-169 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [138.746 518.769 208.081 527.678]
-/Subtype /Link
-/A << /S /GoTo /D (section.2.2) >>
->> endobj
-170 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [138.746 504.877 193.279 515.723]
-/Subtype /Link
-/A << /S /GoTo /D (section.2.3) >>
->> endobj
-171 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [123.806 482.962 263 494.084]
-/Subtype /Link
-/A << /S /GoTo /D (chapter.3) >>
->> endobj
-172 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [138.746 471.006 351.314 482.129]
-/Subtype /Link
-/A << /S /GoTo /D (section.3.1) >>
->> endobj
-173 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [138.746 459.051 293.144 470.174]
-/Subtype /Link
-/A << /S /GoTo /D (section.3.2) >>
->> endobj
-174 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [123.806 437.136 227.082 448.259]
-/Subtype /Link
-/A << /S /GoTo /D (chapter.4) >>
->> endobj
-175 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [138.746 425.181 280.015 436.303]
-/Subtype /Link
-/A << /S /GoTo /D (section.4.1) >>
->> endobj
-176 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [161.655 413.226 289.713 424.072]
-/Subtype /Link
-/A << /S /GoTo /D (subsection.4.1.1) >>
->> endobj
-177 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [138.746 401.27 310.034 412.393]
-/Subtype /Link
-/A << /S /GoTo /D (section.4.2) >>
->> endobj
-178 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [138.746 389.315 256.305 400.161]
-/Subtype /Link
-/A << /S /GoTo /D (section.4.3) >>
->> endobj
-179 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [138.746 377.36 286.337 388.206]
-/Subtype /Link
-/A << /S /GoTo /D (section.4.4) >>
->> endobj
-180 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [138.746 365.405 249.748 376.251]
-/Subtype /Link
-/A << /S /GoTo /D (section.4.5) >>
->> endobj
-181 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [138.746 353.45 288.468 364.572]
-/Subtype /Link
-/A << /S /GoTo /D (section.4.6) >>
->> endobj
-182 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [161.655 341.495 361.509 352.341]
-/Subtype /Link
-/A << /S /GoTo /D (subsection.4.6.1) >>
->> endobj
-183 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [138.746 329.539 326.427 340.662]
-/Subtype /Link
-/A << /S /GoTo /D (section.4.7) >>
->> endobj
-184 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [138.746 317.584 286.005 328.43]
-/Subtype /Link
-/A << /S /GoTo /D (section.4.8) >>
->> endobj
-185 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [161.655 305.629 261.257 316.475]
-/Subtype /Link
-/A << /S /GoTo /D (subsection.4.8.1) >>
->> endobj
-186 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [161.655 293.674 322.499 304.52]
-/Subtype /Link
-/A << /S /GoTo /D (subsection.4.8.2) >>
->> endobj
-187 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [123.806 271.759 234.378 282.605]
-/Subtype /Link
-/A << /S /GoTo /D (chapter.5) >>
->> endobj
-188 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [138.746 259.803 266.901 270.926]
-/Subtype /Link
-/A << /S /GoTo /D (section.5.1) >>
->> endobj
-189 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [138.746 247.848 273.984 258.694]
-/Subtype /Link
-/A << /S /GoTo /D (section.5.2) >>
->> endobj
-190 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [138.746 235.893 259.016 247.016]
-/Subtype /Link
-/A << /S /GoTo /D (section.5.3) >>
->> endobj
-191 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [123.806 213.978 272.172 224.824]
-/Subtype /Link
-/A << /S /GoTo /D (chapter.6) >>
->> endobj
-192 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [138.746 203.959 228.734 212.869]
-/Subtype /Link
-/A << /S /GoTo /D (section.6.1) >>
->> endobj
-193 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [123.806 180.107 222.061 190.953]
-/Subtype /Link
-/A << /S /GoTo /D (chapter.7) >>
->> endobj
-194 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [123.806 158.192 211.63 169.038]
-/Subtype /Link
-/A << /S /GoTo /D (chapter.8) >>
->> endobj
-202 0 obj <<
-/D [199 0 R /XYZ 124.802 587.506 null]
->> endobj
-198 0 obj <<
-/Font << /F31 201 0 R /F32 203 0 R /F18 204 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-213 0 obj <<
-/Length 622
-/Filter /FlateDecode
->>
-stream
-xVKo1{Xc{8GK+JP*D@
-&_8xGg&i3xu7:n8DhN-s MNVN2khDɦ#gX/Y{j%J6!9O
-a( }m
-endstream
-endobj
-212 0 obj <<
-/Type /Page
-/Contents 213 0 R
-/Resources 211 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 165 0 R
-/Annots [ 195 0 R 196 0 R 197 0 R 205 0 R 206 0 R 207 0 R 208 0 R 209 0 R 210 0 R ]
->> endobj
-195 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [123.806 706.062 229.564 714.971]
-/Subtype /Link
-/A << /S /GoTo /D (chapter.9) >>
->> endobj
-196 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [138.746 692.17 259.32 703.292]
-/Subtype /Link
-/A << /S /GoTo /D (section.9.1) >>
->> endobj
-197 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [138.746 680.215 254.575 691.337]
-/Subtype /Link
-/A << /S /GoTo /D (section.9.2) >>
->> endobj
-205 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [138.746 670.196 252.168 679.105]
-/Subtype /Link
-/A << /S /GoTo /D (section.9.3) >>
->> endobj
-206 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [138.746 656.304 302.218 667.427]
-/Subtype /Link
-/A << /S /GoTo /D (section.9.4) >>
->> endobj
-207 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [123.806 634.389 216.569 645.512]
-/Subtype /Link
-/A << /S /GoTo /D (chapter.10) >>
->> endobj
-208 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [123.806 614.41 296.477 623.596]
-/Subtype /Link
-/A << /S /GoTo /D (chapter.11) >>
->> endobj
-209 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [123.806 590.558 275.063 601.404]
-/Subtype /Link
-/A << /S /GoTo /D (chapter.12) >>
->> endobj
-210 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [123.806 568.643 249.742 579.765]
-/Subtype /Link
-/A << /S /GoTo /D (chapter.13) >>
->> endobj
-214 0 obj <<
-/D [212 0 R /XYZ 124.802 735.021 null]
->> endobj
-211 0 obj <<
-/Font << /F33 215 0 R /F32 203 0 R /F18 204 0 R /F16 216 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-219 0 obj <<
-/Length 2045
-/Filter /FlateDecode
->>
-stream
-xڥZIDWf&#b8pF8,@ Zcό@J4^ ?n/=:!s)!? >Pb88 oW<-9-G>4÷^~Xשz 4'e_UvuY=Gw˙,i^( <KDY
-xǤ@Sչ"'! pe4~~[RO|K(htSN/F)%~2XIH,Rm(WR^Dq\T^ w>A:~xИdhq(HгlWBUJ'9gq L=I
-I
-!z~y3uV7%d}g=|0,K
-b.&yf?nR# dfqU V Kˋ!2қ^#55}m19*j]ٛFwS9צc;( WѬALPb.0j`]bz }ٗffRLu@ĢrJsYꇵkI#ci}[A"=N a2BEgX[wE`+Vz =cpUڭڪbp
-n84ӥa
-)*5I#=QntkkM{կW.H$WUYWE&ʶ!1(?QXl/?vD }n90+_7# a
-@tHLo5e\F-TtEG%iʣ2)7Ujbp܁[8XUR`6ҷQbQWBLr 5w Txu1Wrv(iE_nZ{=\5iu>2s.5.2+e]\v0n+Ѓ"] 9b F,v6w bao՜L6ph{kuťoln45:m1
-(N =({׹_Nh?[PbKs|߀euR5j@O$F9ӄ.m IS4'涗3]%j㍲Ҟ{)).A<_S.ߜr|l9n"I7)] . >k,66\D7e4)'sR힕bwT`kZ V-m30uMz D~<Q ?(a(ݑDNT ]2 f{`i6 TΣH+LÓ|HH^)D'jSK]z
-^YF*4$ok\ʵtX۾:Z ƱƘL`N7 e"iW"
-endstream
-endobj
-218 0 obj <<
-/Type /Page
-/Contents 219 0 R
-/Resources 217 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 165 0 R
->> endobj
-220 0 obj <<
-/D [218 0 R /XYZ 124.802 735.021 null]
->> endobj
-6 0 obj <<
-/D [218 0 R /XYZ 124.802 717.021 null]
->> endobj
-217 0 obj <<
-/Font << /F36 221 0 R /F31 201 0 R /F18 204 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-230 0 obj <<
-/Length 1538
-/Filter /FlateDecode
->>
-stream
-xڵXKo7W,V@sc Т=%=(lÖ4y,J]t83|֕ޟhtz2jն6T畱^uVʹ:=>֟vopi=k\vo Th,]5Wq"źsm ,I
-~m_K(bsƢx|kYtpʀ>&A7Yp|cLB;_om6j,uf+x\
-u袂tj]3mN@(
-@dRTеp;N[: T"2E>_t2ڥrEs(hq /BRBr qIiOEPHM \lRbu􁠀bTuځ=3(rNmBj)Iη8΄F]F3,"Ƈ
-O~4IኽH.wYhM0]civ//V"B0R0MіXX$K1V ~'=4xL(VI44^Rqs%m{S+&X[Q}cH]
-V4 +
-=eNg-;mRmn29
-R/-̝x\S7u
-(3] fR5|'4g7_n#-w"Aܣ4Y\ŭ|HhL'ې,mH¨XJLfuuNmd$(]r!z 6}[D4(.YXyl(bJԿ=QzurGK a0XTe$
-Nt
-S~:) (( kP)T
-endstream
-endobj
-229 0 obj <<
-/Type /Page
-/Contents 230 0 R
-/Resources 228 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 165 0 R
-/Annots [ 222 0 R 223 0 R 224 0 R 225 0 R 226 0 R 227 0 R ]
->> endobj
-222 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[0 1 1]
-/Rect [185.706 479.731 264.89 491.684]
-/Subtype/Link/A<</Type/Action/S/URI/URI(http://cmake.org/)>>
->> endobj
-223 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[0 1 1]
-/Rect [174.5 448.389 269.538 460.342]
-/Subtype/Link/A<</Type/Action/S/URI/URI(http://ftp.gnome.org/pub/GNOME/sources/glib/2.20/)>>
->> endobj
-224 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[0 1 1]
-/Rect [186.263 405.091 278.645 417.044]
-/Subtype/Link/A<</Type/Action/S/URI/URI(http://ftp.acc.umu.se/pub/GNOME/sources/gmime/2.2/)>>
->> endobj
-225 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[0 1 1]
-/Rect [168.994 361.794 257.53 373.747]
-/Subtype/Link/A<</Type/Action/S/URI/URI(http://www.lua.org/download.html)>>
->> endobj
-226 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[0 1 1]
-/Rect [188.83 318.496 372.598 330.449]
-/Subtype/Link/A<</Type/Action/S/URI/URI(http://www.monkey.org/~provos/libevent/)>>
->> endobj
-227 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[0 1 1]
-/Rect [200.567 227.307 321.39 239.26]
-/Subtype/Link/A<</Type/Action/S/URI/URI(http://cebka.pp.ru/distfiles/)>>
->> endobj
-231 0 obj <<
-/D [229 0 R /XYZ 124.802 735.021 null]
->> endobj
-10 0 obj <<
-/D [229 0 R /XYZ 124.802 717.021 null]
->> endobj
-14 0 obj <<
-/D [229 0 R /XYZ 124.802 537.915 null]
->> endobj
-18 0 obj <<
-/D [229 0 R /XYZ 124.802 280.328 null]
->> endobj
-228 0 obj <<
-/Font << /F36 221 0 R /F31 201 0 R /F38 232 0 R /F14 233 0 R /F18 204 0 R /F39 234 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-237 0 obj <<
-/Length 1357
-/Filter /FlateDecode
->>
-stream
-xڥXKo7WqhW$oM P \RN
-Ik'/3Ç 7CS/+n3nƎ2]i*t۫}oF.KpaiB|umfJ2 >5\
-9<c4zq'IYS ,-LYKq"k9lW=$
-%C-eqcm73j`|cBJN\.v.=-2ŞRGW7MMWo<7170avȰ|-*! 1kТp
-e!bT=®5YDT` kfg j|>d0D34:2
-p2uR'Lahj8ǜ
-!'d$7:}Cnυ5;5Mu(nL҃)p 
-O-f;;#O}b٘M]vp=zĵ\44L,jWt$!YAJ,-:} Tv$[Jdh}Jt(`Z2#l߫x=oXVkr5*/
-endstream
-endobj
-236 0 obj <<
-/Type /Page
-/Contents 237 0 R
-/Resources 235 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 165 0 R
->> endobj
-238 0 obj <<
-/D [236 0 R /XYZ 124.802 735.021 null]
->> endobj
-22 0 obj <<
-/D [236 0 R /XYZ 124.802 653.209 null]
->> endobj
-235 0 obj <<
-/Font << /F33 215 0 R /F18 204 0 R /F38 232 0 R /F16 216 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-241 0 obj <<
-/Length 1154
-/Filter /FlateDecode
->>
-stream
-xXˎ4WdّH]e;axV,zwHAW0.?:I. b1]:uT9fy0÷Fy}3s:
-:=O+_h (
-Wa6L`vŅGc~;,g7xmFKc諷Ս.C|󏧗7<o"G==635yWF5i{+vȄ0)Ϋ
-݌~
-0g-B
-e)E=Ο\F]@xNs↵QN)b93㘣Ȭqqf 89HPu2ul;xй@Lؑiդʐ+&3*NSEyCH,L8a5&oLV.YD
-Zp eGѺRh0gLk]dQ}y[zf[$t1ٚs,U5e+ъ SUVfх$hFu
-&rۻiLAiY+ S_1RxWz!}5Dx^޸AS-=^wG*-+.UP/ct}LݨuTx^&i9Eߡ
-BIWě8]_D
-'JG%b*|jb9`i,L\ )f`Bɪ7D{[Jq}6,ރ8GAVwj^[qi_nu"S#0"obEz2
-endstream
-endobj
-240 0 obj <<
-/Type /Page
-/Contents 241 0 R
-/Resources 239 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 259 0 R
->> endobj
-242 0 obj <<
-/D [240 0 R /XYZ 124.802 735.021 null]
->> endobj
-26 0 obj <<
-/D [240 0 R /XYZ 124.802 717.021 null]
->> endobj
-30 0 obj <<
-/D [240 0 R /XYZ 124.802 501.334 null]
->> endobj
-243 0 obj <<
-/D [240 0 R /XYZ 124.802 457.279 null]
->> endobj
-244 0 obj <<
-/D [240 0 R /XYZ 124.802 436.8 null]
->> endobj
-245 0 obj <<
-/D [240 0 R /XYZ 124.802 417.429 null]
->> endobj
-246 0 obj <<
-/D [240 0 R /XYZ 124.802 397.503 null]
->> endobj
-247 0 obj <<
-/D [240 0 R /XYZ 124.802 377.578 null]
->> endobj
-248 0 obj <<
-/D [240 0 R /XYZ 124.802 357.653 null]
->> endobj
-249 0 obj <<
-/D [240 0 R /XYZ 124.802 337.727 null]
->> endobj
-250 0 obj <<
-/D [240 0 R /XYZ 124.802 317.802 null]
->> endobj
-251 0 obj <<
-/D [240 0 R /XYZ 124.802 299.814 null]
->> endobj
-252 0 obj <<
-/D [240 0 R /XYZ 124.802 277.952 null]
->> endobj
-253 0 obj <<
-/D [240 0 R /XYZ 124.802 257.473 null]
->> endobj
-254 0 obj <<
-/D [240 0 R /XYZ 124.802 238.101 null]
->> endobj
-255 0 obj <<
-/D [240 0 R /XYZ 124.802 218.176 null]
->> endobj
-256 0 obj <<
-/D [240 0 R /XYZ 124.802 198.25 null]
->> endobj
-257 0 obj <<
-/D [240 0 R /XYZ 124.802 178.325 null]
->> endobj
-258 0 obj <<
-/D [240 0 R /XYZ 124.802 158.4 null]
->> endobj
-239 0 obj <<
-/Font << /F36 221 0 R /F31 201 0 R /F18 204 0 R /F38 232 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-262 0 obj <<
-/Length 2722
-/Filter /FlateDecode
->>
-stream
-xڵZKo7WmG7{rˮA6.7YH~z AVw,ֻ>3~{ٗ1κ0dOn>}L}k`=}}2->wU:)}X4-GSIarO*VMT'QL[O+Uد\t۫_"5JJW~2w7;3H?슠lW2$zU`g_&6y2qF< <dۍ 7Wsl!"e H
-ٛ Z3lkyfr9 ',D2bhyN
-[Fn3YAz
-qĵx587+kׂG_-nkN2$eiL,-e^Y\4kEDVuK.s^ .+Q4vPr)ơB.3'2+-`Yi@D<Tf4+7r}+ =.;nmwaQE1Z{oqOk'Ȕ$50C׬FEaPo![ %?1囆&<\)4BJ}Ý[DKZB1~P+n7홳p5U!V),EpuI+<u}8j1k1 >GWJLS\ p-SJ~i hf[W!UxC(?,s*z?P02̆: bxva\ld8}hz/)pQ椨8f<+ yw$֙ڲF"Г9wrńK ?3>-Sl_Ͼ{w{ߨ;i- VSCˊ'8H[ÑT,S[^5Irgs٢]Ӂ[h `a7N[#a'H=֯N')0WY7+T07O]X0y#
-o޾+2Shn'X^\[k
-W5|3_!*+ey<9t==a4
-]BAV:'
-GaZ0K.y9dKvIӮQ8Rbϡ(L[~bAm5lRjpEJ䘚&=6,_&P}Z_ /Pv9C,9"
--)rR&odx6̞C<1zȡ%'F-;
-ZvK 0ŽSn_f'] $a.}%]^߇;ǜ)Y
-6kGĠl7GADObm4Juf%d5K
-
- p ?l<tpp8@ >34#Mn9;D1+ʁуOu]UoFQ7
-z?9vk-N?rylw
-͖w2]G r&VP-7Ƽw_p0xܕur^N
-endstream
-endobj
-261 0 obj <<
-/Type /Page
-/Contents 262 0 R
-/Resources 260 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 259 0 R
->> endobj
-263 0 obj <<
-/D [261 0 R /XYZ 124.802 735.021 null]
->> endobj
-264 0 obj <<
-/D [261 0 R /XYZ 124.802 717.021 null]
->> endobj
-34 0 obj <<
-/D [261 0 R /XYZ 124.802 390.063 null]
->> endobj
-260 0 obj <<
-/Font << /F33 215 0 R /F18 204 0 R /F14 233 0 R /F38 232 0 R /F16 216 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-267 0 obj <<
-/Length 2829
-/Filter /FlateDecode
->>
-stream
-xڵَ}
-Gkyͫ?z^_^[(_/n;!9\К_M ϋYr=_f4ڳDJ. :tiI()\D>H5T̓ʖ[bͷOg8G?ɋg_²iCCʥmKqF_Dc[])xznSrZ7dR1f'jD"#EtnUx rR `:0}ۓ1sK"4#Z-VQ((YjWwQMCu#)}뗟p[PK%
-nՏ|fM6[8Ȏ3mI?OX,_mtoG?cҕK@r7P[LgamF%E.ZdTzDX$m<6CD hî-C59[В
-\UhJ:AXF,/TB0eCB3z#]Jbt!b?_Cv%-@75*V6 1"-km`_O l@ގ ܣ#WX ܀%^ 7E-hr.o3F\3$=ڥoSgB`$Nt"KmD hȟ.+@Db`Z*lXG'("^kGU-sAHD*w$FD]c.%p2Ebr{^"RzҸlʥ*qjP94B1m*Z O^ t)5,$b0zN#q6.osm"7T$wGA__5٫KkEyޔ26.ó!N?h*dm.'>@:TN+u܉f!rإ&yBsۖwVTًjRW^Ԧo9QM*by$wsYg h*c0
-(:)V5g֖^/65w
-endstream
-endobj
-266 0 obj <<
-/Type /Page
-/Contents 267 0 R
-/Resources 265 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 259 0 R
->> endobj
-268 0 obj <<
-/D [266 0 R /XYZ 124.802 735.021 null]
->> endobj
-265 0 obj <<
-/Font << /F33 215 0 R /F18 204 0 R /F39 234 0 R /F14 233 0 R /F16 216 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-271 0 obj <<
-/Length 1175
-/Filter /FlateDecode
->>
-stream
-xڝXKo6Q X
-ߔ[@nP a;m,;Ù!)V79+S7 OoÛΩeZYY[<EA}dcθ <jx&X8:j.j\w\QK$#w`$lܱQ[]aChTY0#zr(Ӈû
-fV"wuP
-~ `R-R]
-%ovk<'v$gPz9ӥׅrӜ]{uKu\˵0l#'8LΫ{0Ps-S98\meșЍj⑮<Ţ;
-endstream
-endobj
-270 0 obj <<
-/Type /Page
-/Contents 271 0 R
-/Resources 269 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 259 0 R
->> endobj
-272 0 obj <<
-/D [270 0 R /XYZ 124.802 735.021 null]
->> endobj
-269 0 obj <<
-/Font << /F33 215 0 R /F14 233 0 R /F18 204 0 R /F16 216 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-275 0 obj <<
-/Length 1290
-/Filter /FlateDecode
->>
-stream
-xڭXoF ~_!jr?yҊ ok1x qA$KA89"?ȏ<^TO/l..P_m>WڸSkZkjsU`.~Nԍ^{خ_揈KUN[AўA'{OMm n}p=\1lWiZa}Fֵ:]"`M!hjHO|LJDn wji c-h#1ՄJ؞^GRx+*~A304o8 0Dkt"hrt+ #kLO_lvp/LH^~ )9{o6ih?=[~]GD'>$)Fml 1-O%RajHB`NmET{R7Vm1e:˚HN#`d'LE0c,ZMe - 35o8bNB#(-z̸"AU5s}:^P<͢T&:Q/w/[,W"$,G)Zϭ6P&"$)T2R SCĬz5IY M|&|bqR?ŴT
-,oK0ׯfX{}ix#\m^b<I0v/i,;i"StXcST> z +p<-s0\ڿƛ gI_x/ kY'ԑ_7_z=psO;SDz^}CEtf`_4`,`8 g
-@&b̐KBeӁ45p@rJ#|$T6ʨ;g{?p0;>?( s(-LY'e?.O4:n,x2AՎT0)@-3wuc<ee.Cd|,OLx@;g ,J@[RB̴^:
-&pxBԿ=Q,|ܢJ `1tr'4|pUړptIQ xS n|S M +aFh|iUջ>rafzMX #6a'zHB, [۟=1pG75Սe/Z^ͺe MOJJU?s'ծaCeLo/cjdxzf{ؽU^NUΑV#_7-T
-endstream
-endobj
-274 0 obj <<
-/Type /Page
-/Contents 275 0 R
-/Resources 273 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 259 0 R
->> endobj
-276 0 obj <<
-/D [274 0 R /XYZ 124.802 735.021 null]
->> endobj
-38 0 obj <<
-/D [274 0 R /XYZ 124.802 717.021 null]
->> endobj
-42 0 obj <<
-/D [274 0 R /XYZ 124.802 537.915 null]
->> endobj
-273 0 obj <<
-/Font << /F36 221 0 R /F31 201 0 R /F38 232 0 R /F18 204 0 R /F39 234 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-279 0 obj <<
-/Length 2207
-/Filter /FlateDecode
->>
-stream
-xڽYK7W4r
-iSX%V愌Bv & 20\hcgFӋ)AB> ³zȡйmӛqWxd-^|PS\O[&[BxE@T:7DtɂLYJX#9 4ng1?8f T1CxN .j5%$5093"brӘye
-/u}ōsDh9b;ZM#Nk (َu,BRgET]ƙ}bN*֬=Uy3t)!;)F{Nq"ݻtZ iQFA"=UlNUcJg{ķ$ ^.|:ax)C8"ӷʪe9#Pngx9o7Ϙ,F~2Zqb$F;=-a/^ )fM+Ɲq*\C1jэJ;=79ѕjU~z<m9p娐 /=\ 2w$r9J*Fї_XU3(f4ŷԜq.]0XuibKdA4gYxNxUKs
-Z.pñ,w]w1f,#fǻ;=vx B'[໽$uZrÒno}!l#s&,L$iL(%չ P.t5؜6j9T /S%M~Ȣ4bf\E)Nc;$ ]0ܘ*0ö#T378tp:1wt0gUiXڹD Pv7EX_L]./z1֒?7c|_%-Dq}$Dz<Nj%^ r((g>i~frC3ag䑈˔hqq"xW+ht5&Y[Jx,%Sݜ7'* v^NI#DĘ "{N_aAϔepMZ!{9&5S_hW0?U3
-tH_ߤn<ݠ'ne,7_8v GqNkwkhjCCn-fؓD/
-=i.9lңz[qPRQ?\vgfK]Oυ+Nn ܰ%J; #1Azk.P2`0wP= BEEG<NT̡qCoo*:<ˌc=QjO> ^2푝RI?.%Q敲]k VA xfڒy $/5Ğ~}s:fH)Nrӑ`1'ϬbNla~ژ1_#>UL=lOL'+)C 6YFJgc24u3Z\ŵYA nJd>|0߃mo~[6v}%u5``uo7ד?(
-endstream
-endobj
-278 0 obj <<
-/Type /Page
-/Contents 279 0 R
-/Resources 277 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 259 0 R
->> endobj
-280 0 obj <<
-/D [278 0 R /XYZ 124.802 735.021 null]
->> endobj
-46 0 obj <<
-/D [278 0 R /XYZ 124.802 717.021 null]
->> endobj
-50 0 obj <<
-/D [278 0 R /XYZ 124.802 453.57 null]
->> endobj
-277 0 obj <<
-/Font << /F33 215 0 R /F40 281 0 R /F18 204 0 R /F14 233 0 R /F39 234 0 R /F38 232 0 R /F16 216 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-284 0 obj <<
-/Length 1508
-/Filter /FlateDecode
->>
-stream
-xڽXKoFW>IAH{I=hR @-
-Ykò2'rIAz D33߼ɲ26e22M3.TQ2YYl2>U!QnHOb'pw w{mk1vGi[Sw)89>SbW*)R A)rXsᅫL>O_2~f׃_X6w/?fU{L*YXkWfhlt圫ReOaL=J,28С`񲀲J@ @ҷ<0B)h3gp@ϒWy Y9px6Q
-ާەJ%=T=Ec}j׹ <4gܶY@;^x a=ꓓZ`H 'UauG}px*2hn T:Zɝ2JݖA`X
-Bo:)8fO5..UW(@CёF,<Cjjڑ-+._ts1ެƝ|NR [RCa^QSE(ܳ+06il
-G.|&sA:luaJ2o武7 ۝=~ _<E=eAmIlhqiJ#4D~ڣ8%R#3t#3h~PԖ`dAY<~ҝ9;kS4OfH۲mc̶B%KA!Eqyg2Sq_ _05 Qs(mв"O P,bG0bXNCJEt^OooA [ǻJsv O?\ hB6;
-:'s9X-NX| O)VW7Wa*ᏭB፛,mw6]=6
-3/pyS˯hB@.z}RrRn^e1?=S:bƗZa*+L0r`y?F7
-endstream
-endobj
-283 0 obj <<
-/Type /Page
-/Contents 284 0 R
-/Resources 282 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 286 0 R
->> endobj
-285 0 obj <<
-/D [283 0 R /XYZ 124.802 735.021 null]
->> endobj
-54 0 obj <<
-/D [283 0 R /XYZ 124.802 717.021 null]
->> endobj
-282 0 obj <<
-/Font << /F33 215 0 R /F38 232 0 R /F18 204 0 R /F14 233 0 R /F32 203 0 R /F39 234 0 R /F16 216 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-289 0 obj <<
-/Length 1359
-/Filter /FlateDecode
->>
-stream
-xڵXKo8W9@EMZ4 Zu 1 Ij-_Rg87!i6hvy3τJRjuƸ$dI+$\kݽL]
-I/fE{ΔvT0#H)3*)øu
-!8 STP.sМ/ߠǷaGYh훳l|N>DEM]fB
-b./ZȘ$w^CBUh:Ziퟱ"$Y9a"آ-Q@]yܪݍ?Ctz u V^so28Җ;, -,t؁Q=$T(3)Knvvu|5&QhA/ FisFSy)эv4~TCVtC ʙ"mX?m86|6?matI<b\\%sjXUzeiV2S˃;kEV}9%,[fbkhfhPlX\9 ҳ+e-Gʷoq>+_.aMp@UzYXba=#g»Og`7*Φ`׳U/& k >;2g`m؅GnீD:v^mLcP?: C> `g=2TQKxV
-h1 !nP<+-6` tؾ@hgaE;Z~6JaӌI7W)O2'8
-BgSbn#d9tѨGڊ
-nՒ 5oO V&ۦDhQӐ׌ z ѫ_ A8&ťIpϱ}f:%]֖vMGU{ ^ԋԸqZ_.v|lb:*n{UH|HƦ*tT7+E-_Vh'ڔ)dzsqͨhj|5\Ƿ@͵s+͓҃'ؘb 8!^y]xʋ,0
-<P킊}de_j&N}Th^)݊5ZrƓBr:b!M}SFd#79xw`Qײz6T[Npj
-endstream
-endobj
-288 0 obj <<
-/Type /Page
-/Contents 289 0 R
-/Resources 287 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 286 0 R
->> endobj
-290 0 obj <<
-/D [288 0 R /XYZ 124.802 735.021 null]
->> endobj
-58 0 obj <<
-/D [288 0 R /XYZ 124.802 717.021 null]
->> endobj
-62 0 obj <<
-/D [288 0 R /XYZ 124.802 246.417 null]
->> endobj
-287 0 obj <<
-/Font << /F33 215 0 R /F38 232 0 R /F18 204 0 R /F14 233 0 R /F32 203 0 R /F39 234 0 R /F16 216 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-293 0 obj <<
-/Length 1737
-/Filter /FlateDecode
->>
-stream
-xXKoFW>QI{=hR4@G "+=I%ڴz(rgfggy-),HNjE[}A
-͛Z]\\oJQz\)KN%+j~ϼK6fs^/Ke xZ $D잴5˄'΋ 7F5ecLW㊖Q>yӋѧ5!MLa[R\ywtUpkM-x5}D}Ow[&mlv~}Y7L?؇(Hw3*ˋњ'Pi`!@<>̯. KhyYهNƴL~֣
-HNL1xĒJ-DF<5SffELR
-_D-m5ja.Avw3]]WXgxZ'Irg[΂FC+٪aeG-2<|n-.&9YŬvIò ʤdv؅CN<Cc5sN`
-DmR"<y͔
-7ef`mGk!FMVSXDMJb <lϝgl
-oR4#7"voB<e8KE%y甊
-M{_寯ɋo\\o$
-&89yw&Oh2jrm/vDR0e%|Z$8Z&,}2^~b(-64 L
-endstream
-endobj
-292 0 obj <<
-/Type /Page
-/Contents 293 0 R
-/Resources 291 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 286 0 R
->> endobj
-294 0 obj <<
-/D [292 0 R /XYZ 124.802 735.021 null]
->> endobj
-66 0 obj <<
-/D [292 0 R /XYZ 124.802 523.324 null]
->> endobj
-291 0 obj <<
-/Font << /F33 215 0 R /F39 234 0 R /F14 233 0 R /F18 204 0 R /F38 232 0 R /F16 216 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-297 0 obj <<
-/Length 1553
-/Filter /FlateDecode
->>
-stream
-xڭX[oG~Xi-e7s]>PJBiC Xqoh̜9sYƗ>Xwܾs_R}HNjSΫS2vUw"^עUQJ՗K.%W|R/ٔڞOymO(-[j΀rʤ9&|9v`(DU#SZOZv~|ɓj!M0ߌVVoHumW}Wݻ jj >[&}n
-LReӊZg(Sl`}x.@ XrV
-Q҆R@bzBv
-"pu(n'َl~8CM}x-sAO4_M9AB>9s߈f2ʎI%mI P2W%-d"NC:h,AƞGaY%.
-$`SSBV/͂̇cऄy
-
-"2Կ7H9R4qpCBw+ǝN0x51CICCbB[ڀ>`BU:AR3NzAMwƥ c )f~1A"멝Tsγ~qs?:-ywX,F1H\5ay8:-&0/Rtqjq6_VWe.//^-,0ʪΆ9ɰ=曡٪L1vR˟9n,
-*jۊC@NSg y0l/,vߋ\gw-#7wah:˖ۮS(er-q1ܖqIߑ%Vv섿0PUV=Tg vc[xAT'B-F|2\Wix"Sәݏ, (dc
-2v'X&ZgT5-"pk5&7d5GI t<DC wR#oiyp;|1:(
-)W5w HA]4\aSSPa v%xCJꕅb߶m r!.*D}jqQj\QfI_w0idLxéH\L<M
-endstream
-endobj
-296 0 obj <<
-/Type /Page
-/Contents 297 0 R
-/Resources 295 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 286 0 R
->> endobj
-298 0 obj <<
-/D [296 0 R /XYZ 124.802 735.021 null]
->> endobj
-70 0 obj <<
-/D [296 0 R /XYZ 124.802 260.486 null]
->> endobj
-295 0 obj <<
-/Font << /F33 215 0 R /F39 234 0 R /F14 233 0 R /F18 204 0 R /F40 281 0 R /F16 216 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-301 0 obj <<
-/Length 2552
-/Filter /FlateDecode
->>
-stream
-xڭr_1ŋgio:,ю\EKs\,ZRe%">@cC.;Eo׺ۍ;\wxIeIitw7/s+-+m+d օOmV>ZV |t>6ۄukaga3"5qJMR0U$- &~,S_./O.m=9?lAbLB[/Mxc'F?N=zoQ}nv ?
-;xzw8ۻwnnlD7Gߝ
-D7Iݻo~v+||{d;^҆ɹ{91 ̝Өv
-H<A~=z(NDEH)523j24deRú(9hP<cn> )|{$=͕MpJr3 ii$AՠMV
-X`RkדdKFbQک>2zfb |\2 }b}m7CuSh1'+Ṷ{F'=F-1gqY-伈BM,IX!-HpIY^iO[:VE+~7m"TkN]L>xq;׹
-hM,,
-)p {~`3Uut,jtr\\;Kk<AI섣2l$Ml8 c˖SiWW]\%9c&/~ӫhFO_jbmst}r|W#ֳcGq..哈s݋þ>kj~~xWO~>8LQS8DQ֭N{c;;*MUzk 9YOra^".tI^2>CY0@i7uʾleѬaSQn>/2S*r+4<i(Ji^/z` (KU޻ c!aUb+WEo|ͷ.Fq=%<.Uo'(A|z-V-nSkb˳? ӮyNFs|-&E"CpeW Y'kzV+Y`֭&Q?UYStVg JclJύ-u5y=D1 '' ґׁBEʯKQY](`o)
-RSXޓ($3%yik%%Ce/p^gNJ#cCk8HE!<˜~H}꠼M}J-ɕYӲf_u fYi(7=ޕitSgJ`""O˵G{fJx7r%]D _g%+i\
-FX+I738(d '
-<RG8:/Oi\Hi[35 Rx5Rx+@(7ad/U=P${l2m@o/tzd3EX
-endstream
-endobj
-300 0 obj <<
-/Type /Page
-/Contents 301 0 R
-/Resources 299 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 286 0 R
->> endobj
-302 0 obj <<
-/D [300 0 R /XYZ 124.802 735.021 null]
->> endobj
-74 0 obj <<
-/D [300 0 R /XYZ 124.802 423.274 null]
->> endobj
-299 0 obj <<
-/Font << /F33 215 0 R /F39 234 0 R /F18 204 0 R /F38 232 0 R /F16 216 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-305 0 obj <<
-/Length 2097
-/Filter /FlateDecode
->>
-stream
-xڭYYo7~ׯA!֊7wh&ENc*r%93<V,Aΐbw칔U[FB Mmήwc7TOƘ\v.v~ssZ3?nTJ5/9g^z}ڸH&cr҄)2P T uY:'D9~{kg/GFU<} ^].F޳=|YZM).*dmx[1D (9ʪ-k+lt(r~y7j_Ssd:n;pZs)
-kTsJM)cZSJ1M&,b%k<кcr^ZD$)kp4j=&&@VuEЂ?8R$L>
-0
-[M1 %txx2'aJs`FCwu2bRXt8Ilj0Q Ned1=Au$?$
-;TDwM>sް'!vS^'b\אUT)-SZ78oNN_=O'x3}N)?qu0.`1 t>b,,*ָRzĻJC8T%iű"iMO,AřbñH/\b@+̪<9
-I/:֨1ڌSl}Y[)Rb%ކS&Kcդf `8RDhD%xݬ'Pv)U#,#3$ H wiRxGrUŁc7r _0I²g(=
-vYxtEcV*C%`
-v7KaQu/a(4hS#em%@CuQeƻbq*UO!naCbk:N;T4Qf>&2;/C߰]T.O#1#yY#*Q~eJP^RO#-aHnDw_9
-B!2Dִ!ΖShÏktf:a?mGfjTG"tqZt7̴0 oVc)ca2Ƕ6qՄT) Ը`(Yɦ\6pB2%1(,鴱8sjҗ?`l/tOUBGߋ@>(fB3bz:S@(
-[@I*v=";L@f/,nmZK4 d"`6TXn/{'uhL!VC불Sxџ2[̀(~nVw5΍%JpNc1m_iZEbkMa}\i~hhSrq}9\\/GwQZ6+__:f~{d6.//ng3g7a|M0vW?߯bǀIgUhϗnۮCUDɅ^Y8f H ;l[m{,T,]WH>^v]2ouԺpD= Ho³
-Ϗ=lxu~h@Vi(p(rWxȃoK77Ep-GSk)LZ0㶘l{/(
-endstream
-endobj
-304 0 obj <<
-/Type /Page
-/Contents 305 0 R
-/Resources 303 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 286 0 R
->> endobj
-306 0 obj <<
-/D [304 0 R /XYZ 124.802 735.021 null]
->> endobj
-78 0 obj <<
-/D [304 0 R /XYZ 124.802 473.439 null]
->> endobj
-82 0 obj <<
-/D [304 0 R /XYZ 124.802 442.542 null]
->> endobj
-303 0 obj <<
-/Font << /F33 215 0 R /F39 234 0 R /F18 204 0 R /F38 232 0 R /F40 281 0 R /F16 216 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-309 0 obj <<
-/Length 2312
-/Filter /FlateDecode
->>
-stream
-xY[ ~ׯX}Xge$.4@k<٩q*˱SInsӮ"%y냠C~а揳/f˗R6~ei>4\~`r M>ӾܾJr{ܿ0}vIZd cz~ڸ{(cr>)2-Ts"ϹZ(W~ル}u7nj;g
-p7yiX/WC@k~CzCUe{hVLON }>l/OüaXnNt{Oﶏ>;rv+ӻb6ǒ
-`H2[aMR{f{YCu\w:0ֻH S.yxuy>sUZ:A 22O
-ƽOig'i'|3F{?Ջ1 @B 𯉇@  [ٶ6%&ل8)\3#ST*%ڴ 7iv&rd /=s"R?/T8G_4Iż(=m-ލ#&Z̪֒RtS 2zF"Olsk \7=E.4˖MTpxUX-L6NSȜV[R 1[36(|v⊡Jyc\h%[C(H&f`Pih1G~9
-ѲD KxTy>OsY[nOzLG26cat!C,f{R1o)^ewJQW,:*+UjA^_wQYs@9*
-]v6Lqv |"MLuq?-4dAoTE\E&,byE(Y 9qM€c}I\^ʴDv.W=yv۽EYE\
-XY:Sm='n ?SIm/&Ac{뼵;ons:lGJCH.A1t,{QD/-<xsxST#Q%In"H&Gu
- Ʊ7SF?
-endstream
-endobj
-308 0 obj <<
-/Type /Page
-/Contents 309 0 R
-/Resources 307 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 315 0 R
->> endobj
-310 0 obj <<
-/D [308 0 R /XYZ 124.802 735.021 null]
->> endobj
-86 0 obj <<
-/D [308 0 R /XYZ 124.802 556.022 null]
->> endobj
-311 0 obj <<
-/D [308 0 R /XYZ 124.802 460.225 null]
->> endobj
-312 0 obj <<
-/D [308 0 R /XYZ 124.802 429.236 null]
->> endobj
-313 0 obj <<
-/D [308 0 R /XYZ 124.802 397.694 null]
->> endobj
-314 0 obj <<
-/D [308 0 R /XYZ 124.802 378.107 null]
->> endobj
-307 0 obj <<
-/Font << /F33 215 0 R /F39 234 0 R /F18 204 0 R /F40 281 0 R /F14 233 0 R /F16 216 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-318 0 obj <<
-/Length 876
-/Filter /FlateDecode
->>
-stream
-xڥVn1}WXw
-@6}MU\(@BΌl-=3x{;j*^9h2y]r'<y"/sXK?NKQմgBk
-g:=OXg|4]_a4}<G}U hWQ'd
-m;
- wbb"j1%R8ftzØƷN)A"߸`$Gou(٥ZiP=Ȃ
-ym=uJZ*X7TI=φfU#٪\]M6
-bVϷ&ޡz6/&7m6W7 tu8<<=;
-$ɰwʴ66?2h[fɡA)LԂhtR;Bµ"r?-#/eԖdu5jZK,
-endstream
-endobj
-317 0 obj <<
-/Type /Page
-/Contents 318 0 R
-/Resources 316 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 315 0 R
->> endobj
-319 0 obj <<
-/D [317 0 R /XYZ 124.802 735.021 null]
->> endobj
-316 0 obj <<
-/Font << /F33 215 0 R /F14 233 0 R /F18 204 0 R /F39 234 0 R /F16 216 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-323 0 obj <<
-/Length 1348
-/Filter /FlateDecode
->>
-stream
-xڝWmkF_!i$kߥ 4oGJC?Jcb'{WJ{wvgvWIgfy[Ǭ̾?*z>?}'tBk]Ƹ,gZB*/_'D)ueJ|>ꉚ6kXfMe`Y.bPҚ?{gŧBb-AjﵘjM6(BUd!Tk*U2YD'%7jw[.j͵cQYy {D^EDQNs)*DtPxc0 )AeS{3Y/w8GHRd'AVy6@v`N]&oOe9qXQ+EEa+f Ti6ZL0zL :%?BVM9z +k4 i
-VR `n\3v9n> 똟H5 `rȞ3^Nv(\Ze'8rw#j,#D*ȠV61TN4̧_{; $i;CEc'C{߯(T@;c ~*A&p~* ŊS ---ڰ`$ŬYAxr^%E[t$`s49Hy4#3E1촸*$D=F2ZTU*8#uKY28Jl+]t:}StMll>[^CN|~e]=nu@YJXjm߂pl:iqS7˥i,Ǧ]Nlqk gLakJ8!)hq[#+Ǯ2_  `L/w0Na󋱞tR4:^/io!v(6|y Q><ADQ} `UȊk3cYV_/acވfV6^ۏۏތ# xGh:FQznXu׼7zw}Ñ}_.8p>λ8O/tnAbC􀢷@?;PlXdI MmW}ݍMg0iltOq !OgL7;xM:C]ӽ}J鰻LNԹ$v~P0.$)TQtL
-#1<~C۰׍azُjCvmn6lS,_v'C5Q, irCJ= sGm8W r3"-РDak֫gPys{rތoz災z+,ق=oG
-endstream
-endobj
-322 0 obj <<
-/Type /Page
-/Contents 323 0 R
-/Resources 321 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 315 0 R
->> endobj
-324 0 obj <<
-/D [322 0 R /XYZ 124.802 735.021 null]
->> endobj
-90 0 obj <<
-/D [322 0 R /XYZ 124.802 717.021 null]
->> endobj
-94 0 obj <<
-/D [322 0 R /XYZ 124.802 537.915 null]
->> endobj
-321 0 obj <<
-/Font << /F36 221 0 R /F31 201 0 R /F38 232 0 R /F18 204 0 R /F39 234 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-328 0 obj <<
-/Length 2461
-/Filter /FlateDecode
->>
-stream
-xڵZob]wPn4)R[AFcT' C3pw:+Ճ\r83 \X<fmܴVfv=OfZ!;;;t3/!woV&.hM_WfG`W>Sv5gz]n\Vv7s3VP+x<#O[jW.tRPJz=xx.ǯ5zSu^^/PRzӴkt#,I
-I|FAXOPfYx? 9uj_ykK.gP,ΎxJG˒bb`y_|Qؕ/8-FH/6gu>(O
-(i.q!9kWxg'
-TW ]݄FRYPp^@-F\m"q
-a/D*3fW8F L gUUɈfW[jܠtw(34ʌB4AG[UWkI_>`Zf T'bL~]_6K"u`-
-3YK*=<߈Ǎ*!9M8f*f{v[%Z45嗍DL=[o<_%9 vc_2;Y9(g9O$1
-ӜpEj(␑Q•ݨ)EEɄYUӋmix[p*)4#])λd0@ ne1Pic񆎰Ԡl92JCs,S#Da4ro F*#J+Dr*G噲u$`߳s4ݱY]9'nc~=/M0@ZMI&DəQZkz0Ŝ4kw7F[=i03ixx
-3Yn|k-5cW=WX`:Z-+Y&~bmk4'B^XJofm"Sz&B8] RP 0P&v_S;b8]QB%WZ7/1C?9hb5BʠĂ*H&zg} 798DŽ;`٧lp#HAy|'K:<wCKdA|8k+HZ8dlmcm1bn| "DiȐJ +/>/pD Ѫ0nex2#lGs(D~?Ǩw'9Q=W+VIc@j8ާɽj#\lSt8Ӏ[v]>X$NTOnIL
-\q5z㳛 |?cG N2呜ўe /2k3|U G˃NViIS^LC7E}>/RfxFt˙ފL`T+u7".v[w8C
-sDd*LeRӵb07Q ɍH1WP–H?ްNJÚ}1#p GvWoaZ>\GmݚtVp@+I
-:oցa%n|xuz0%q10PҾi BQ[FFXy{ {?ϗ{]NOv \8+16r+4e;D56員Q6""F`XiV54Hg.'#
-df>BHl˛z]i39}0DCao=rgD='&RX ht8q+^r Vqt|?-<7`s6ldCd.JBۄzAݓOwelf3>_czmlHP&ŚNIڭXt
-ձ//" D
-endstream
-endobj
-327 0 obj <<
-/Type /Page
-/Contents 328 0 R
-/Resources 326 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 315 0 R
-/Annots [ 320 0 R 325 0 R ]
->> endobj
-320 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[0 1 1]
-/Rect [205.353 643.796 368.977 655.748]
-/Subtype/Link/A<</Type/Action/S/URI/URI(http://www.surbl.org/lists.html#multi)>>
->> endobj
-325 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[0 1 1]
-/Rect [346.306 297.324 493.468 309.276]
-/Subtype/Link/A<</Type/Action/S/URI/URI(http://perldoc.perl.org/perlre.html)>>
->> endobj
-329 0 obj <<
-/D [327 0 R /XYZ 124.802 735.021 null]
->> endobj
-98 0 obj <<
-/D [327 0 R /XYZ 124.802 582.031 null]
->> endobj
-326 0 obj <<
-/Font << /F33 215 0 R /F18 204 0 R /F38 232 0 R /F14 233 0 R /F39 234 0 R /F16 216 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-332 0 obj <<
-/Length 2481
-/Filter /FlateDecode
->>
-stream
-xZݏ_!(`ߔ %6Ed
-䂅8kߗ̐C7 `Xp>~!}#-nulroTf xmcnf:ﴴﴓ/\[~ު8jʚ8R]|^ٸիVoUքB4]fFEmXU{Gq׻w/dh$JWy8.~U4aFlk$cx'~l~^\Ҳa;t8F~lZm"F׼{'xzSQ3NoZNRsF*aw\
-Q{ȕu 8\OIEWg3IP, VZh9oe<x֡~^}:mwr  DhF&:iתY.;M/Sf%,X.QϲQ!ktH-fXlrjS6Ͳ,$=y@ /i<nk58&$2
-xeпfN3C~ +ޮ3®CTPq*j+"CnĘ)1 )63k("`q
-RRV4\tL`3Xd`7rB.?^OK|j(˭]ϳ̾gx6_)JF!I-aQTё>*f>O(~y,6J$/6P,1,U΅$li)3tu&MtdM1)%1B`ɂ/;Rd9 pKga8pf21C#
-3 xd !x83],]xFScp{yZrd@s xRE=&9&lNs(4Pk^raΆ$'iހ8`mSŔ i*^j9<%ɼ5iW^6m<qb(+T EW7#b~/':0TO4NQŚ:~Y+Ii~0_;%&̢4r Ne Md.yX3՛qZ f@J%Bi"P=v M u Un*Gj^ ӲgrS7#Mϔ a}MZrb9W%d_W1ĦG23~á_9jO=&JOcG 3_cv:/v]Q6)5cT)lx]C`%s5Z0]`R]aą?0ԓI]ݫ%P-/mx@"=_JJ) #Ĥ:0)UV99+RU eIVK
-endstream
-endobj
-331 0 obj <<
-/Type /Page
-/Contents 332 0 R
-/Resources 330 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 315 0 R
->> endobj
-333 0 obj <<
-/D [331 0 R /XYZ 124.802 735.021 null]
->> endobj
-330 0 obj <<
-/Font << /F33 215 0 R /F18 204 0 R /F39 234 0 R /F14 233 0 R /F16 216 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-336 0 obj <<
-/Length 2231
-/Filter /FlateDecode
->>
-stream
-xڵZmo#_A=s"-RnMzV
-ݺmLi͵͚8:S]ޝ٨\ yl0FoBϺ4W%FXGwpl8kr ЈF2(S~Ï 4Ջ978񮹘{"^p͢bx[a;v]my0WVltΥl֎|xCS_}CHE^ګ3iغU7sK\֥?cs`
-3ɘɐWʂiK ƅapx%}OnbΑG]P{۲֨bY7 Nb>K' p< *b^#I\h@Yg*b z<Z*~ 8>H9?H`0q`IyA[
-:W` ?-/' +A"`fat˯V*GZ)K:6Ki
-FLV8]9FR 5!=Mq4fSn GW.'Cj#iJ'aŞ\p|oD~/9vQןO/Ώ\8xa03
-r:N8_wo-=UBAn08q 1WӣF.(KCtIKsmB|{E"`ǹT!K){} Œ4)$jIpk^߫=jC;uhZ]E+Sy ċl
-YإZ=! Eҗ^v+qzj鲰z[SX/A1fT5du{zm $"F(5+8"-V~{qPD)ل]<6*-_x~ >h cKGQ}ovT'T<d@IK2$E LWe=߾]G[AOS(zm62&P2a$|9j0y|㛖3@"M= 9tg$Fa]z.!
- 0*ua84 .o~Ԓć5Ug|Ϟ!*<^.էJ^Ht“;6˓~y: ]LQxex1b1@}s〦ǁ/M$dk2~5i$å RzNuS3;)#E~G#@K.=[>c2+BnCn[
-endstream
-endobj
-335 0 obj <<
-/Type /Page
-/Contents 336 0 R
-/Resources 334 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 315 0 R
->> endobj
-337 0 obj <<
-/D [335 0 R /XYZ 124.802 735.021 null]
->> endobj
-102 0 obj <<
-/D [335 0 R /XYZ 124.802 299.092 null]
->> endobj
-334 0 obj <<
-/Font << /F33 215 0 R /F39 234 0 R /F14 233 0 R /F18 204 0 R /F38 232 0 R /F16 216 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-340 0 obj <<
-/Length 669
-/Filter /FlateDecode
->>
-stream
-xڭUKAϯhip~Uwϊv%=l#„(QULtH<xhzR]UWHIzưF4N;0R3opҳŚO@kdi,Kߠz1+ׁ BkIs~VLI!!p6(>zV
-L [+a[?Hk&i{[f^aջJUa_酄ŜmQM7PhX(sN4Lt:(D SD`ƤQZ\vM%\M¤X)6خVQVݭwy &t>hʋg"Bl3ܑL0[vvv@VpdmHtɶhWvqb4hOBĘf7wKW|1pr^p8:\R^rh] ԡ\&-8:s>>ԙ.GAt5 S(Vűryz~j*҈I3"&kP֜ i_A~LF:iEIlh,9N`=V/դS"Mii^-SkCZwh+सvNtJD# w
-endstream
-endobj
-339 0 obj <<
-/Type /Page
-/Contents 340 0 R
-/Resources 338 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 342 0 R
->> endobj
-341 0 obj <<
-/D [339 0 R /XYZ 124.802 735.021 null]
->> endobj
-338 0 obj <<
-/Font << /F33 215 0 R /F18 204 0 R /F39 234 0 R /F16 216 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-345 0 obj <<
-/Length 1358
-/Filter /FlateDecode
->>
-stream
-xXOo%5 S4Oqb'3=p($.{J(BH+(^;y3}*$Xē؎ywW7_4R
-48@@70\p~v|>G=iQ)˘NͲ``<gY~pq3*Bed<;kkH"W47uDFQǫ Ç3.b
-eNI>za|D9'Ua0[RHND+8B~y_yf-S<<=
-/534˅" h,pN"TD[sb\dl9;eR#439ˠ6_[p
-Ca=
-endstream
-endobj
-344 0 obj <<
-/Type /Page
-/Contents 345 0 R
-/Resources 343 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 342 0 R
->> endobj
-346 0 obj <<
-/D [344 0 R /XYZ 124.802 735.021 null]
->> endobj
-106 0 obj <<
-/D [344 0 R /XYZ 124.802 717.021 null]
->> endobj
-110 0 obj <<
-/D [344 0 R /XYZ 124.802 508.027 null]
->> endobj
-347 0 obj <<
-/D [344 0 R /XYZ 124.802 452.975 null]
->> endobj
-348 0 obj <<
-/D [344 0 R /XYZ 124.802 454.912 null]
->> endobj
-349 0 obj <<
-/D [344 0 R /XYZ 124.802 442.957 null]
->> endobj
-350 0 obj <<
-/D [344 0 R /XYZ 124.802 431.002 null]
->> endobj
-351 0 obj <<
-/D [344 0 R /XYZ 124.802 419.047 null]
->> endobj
-352 0 obj <<
-/D [344 0 R /XYZ 124.802 407.091 null]
->> endobj
-353 0 obj <<
-/D [344 0 R /XYZ 124.802 395.136 null]
->> endobj
-354 0 obj <<
-/D [344 0 R /XYZ 124.802 383.181 null]
->> endobj
-355 0 obj <<
-/D [344 0 R /XYZ 124.802 371.226 null]
->> endobj
-356 0 obj <<
-/D [344 0 R /XYZ 124.802 359.271 null]
->> endobj
-357 0 obj <<
-/D [344 0 R /XYZ 124.802 347.316 null]
->> endobj
-358 0 obj <<
-/D [344 0 R /XYZ 124.802 335.36 null]
->> endobj
-343 0 obj <<
-/Font << /F36 221 0 R /F31 201 0 R /F38 232 0 R /F18 204 0 R /F14 233 0 R /F39 234 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-361 0 obj <<
-/Length 2152
-/Filter /FlateDecode
->>
-stream
-xZKs7ﯘU-i6T.
-Qƕ\D[ %w&CYqqX/%Ҭ 'ۣϏ-T4i*l/oEskD7}5^6~0szBps~\uh-f<\ҟmۨ[
- $C@X,P6]v` *o%ʯz Asʞ6s9ǂ
-tYE #h/ґin0tt0L2`fpD5ζd<ܖH*મut(
-r, 2`P.l0(Vt;I!svhtцU4RΊJG]?] UҬv@ރFjrzMQݴ^=cXM.]Vȼ)DEM;<v/U*NQMMLi4!&VYi> ;=@鼆 N6r F,9ѢEk˲qDnӲrR!/>,0>N2Ww!L4 gٙiZXc6_\_!]_Ϯ)BKI]2z?,Yn¡
-zDi
-wj<4WT=,7*zCflU%ԓāy/H,]̠Ӥ(9b9knޫXB٣4+󺙵1~--_C] E{~h Gt}%c+R.r<*^av`:.}:9K紣8MՉ7JI9`s) ;r~JÖpo'uT"@cܭY|sG sT Al4nvZiOv+:;j S#k{;VN1j6*Uokك:%u*7U]*g VO(ĽN[^.;lP% & ;p!z ]5a]/}Vm95ӷy7FhЧ/j ߖkSOػ(rl849/^koaa#`|QX;z']}#<yJnGO|,"Xl
-endstream
-endobj
-360 0 obj <<
-/Type /Page
-/Contents 361 0 R
-/Resources 359 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 342 0 R
->> endobj
-362 0 obj <<
-/D [360 0 R /XYZ 124.802 735.021 null]
->> endobj
-363 0 obj <<
-/D [360 0 R /XYZ 124.802 630.082 null]
->> endobj
-364 0 obj <<
-/D [360 0 R /XYZ 124.802 598.099 null]
->> endobj
-365 0 obj <<
-/D [360 0 R /XYZ 124.802 575.419 null]
->> endobj
-366 0 obj <<
-/D [360 0 R /XYZ 124.802 559.376 null]
->> endobj
-367 0 obj <<
-/D [360 0 R /XYZ 124.802 543.887 null]
->> endobj
-368 0 obj <<
-/D [360 0 R /XYZ 124.802 505.041 null]
->> endobj
-369 0 obj <<
-/D [360 0 R /XYZ 124.802 465.642 null]
->> endobj
-370 0 obj <<
-/D [360 0 R /XYZ 124.802 422.483 null]
->> endobj
-371 0 obj <<
-/D [360 0 R /XYZ 124.802 399.249 null]
->> endobj
-372 0 obj <<
-/D [360 0 R /XYZ 124.802 383.207 null]
->> endobj
-373 0 obj <<
-/D [360 0 R /XYZ 124.802 367.718 null]
->> endobj
-374 0 obj <<
-/D [360 0 R /XYZ 124.802 328.318 null]
->> endobj
-359 0 obj <<
-/Font << /F33 215 0 R /F18 204 0 R /F39 234 0 R /F16 216 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-377 0 obj <<
-/Length 1529
-/Filter /FlateDecode
->>
-stream
-xXnFWvM&Ł`9,AF%6{z(  Ӭ}y]%ճՓte]02tݻ %{߿ի׃a4'I|{0N^j8f7sb?H瓤sbSU9<stf+\I89T"=1 _~^)Tv ZuWwew_vRy>%ҫ䊠"{~%pu, np?yp3sJ̊OXp&n^nק7è'v?W~
- _r\ zv+;.wp~?NE!]"6l4=l>%ƏgwQ(F<?F[Z7kl^j%nӳr'U`B=TQ +J 15$8=@PPy%G4%s7ųX!d-\,gl]*Da o"Be
-&S-H)H_w3R
-_f5hYVBe A:((H Q9%abw(yԾR҂u]/x\v6[b>C ];\E5Ķ+u@o25,TXJoBczDuk3t}љ=FrVƜx+u}]b{OfR UQ#~)}\/:%3X_s"sBWx[+a% 3[6#LILn:L&f
-LG]M4̤ *'_\ x'.`0$$)場{;'XeZцpHMtҨdѣN^w KE+OPK]ZoLJxf
-OA%y˜J\{ðǑ3!}ցx4.
-yz0UHlT1='ⴎ Oj-Q8[B*蒡1gTўۮ]GBm38חq%MuKw |]=6DG1ԗbdR 22Xf\ۈUjJ
-,aK,g{tVϕVYn7)vf9Bɮ?(9v#46sm8C[k ;b2m6&Ui1 vsv\[0,
-K @xU'`<ٛH<:ܫ2NSd\LUK#
-\UhR`qɉ+24qvam&V'1vj}` S)υM5E2]sW\"=;`,ЄT^%X.:LAk2]Ύ.,8/S5 oq)Wxf#b
-I텵TA:4<ϏWrwo
-endstream
-endobj
-376 0 obj <<
-/Type /Page
-/Contents 377 0 R
-/Resources 375 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 342 0 R
->> endobj
-378 0 obj <<
-/D [376 0 R /XYZ 124.802 735.021 null]
->> endobj
-379 0 obj <<
-/D [376 0 R /XYZ 124.802 482.281 null]
->> endobj
-380 0 obj <<
-/D [376 0 R /XYZ 124.802 483.895 null]
->> endobj
-381 0 obj <<
-/D [376 0 R /XYZ 124.802 471.94 null]
->> endobj
-382 0 obj <<
-/D [376 0 R /XYZ 124.802 459.984 null]
->> endobj
-383 0 obj <<
-/D [376 0 R /XYZ 124.802 448.029 null]
->> endobj
-375 0 obj <<
-/Font << /F33 215 0 R /F39 234 0 R /F18 204 0 R /F14 233 0 R /F16 216 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-386 0 obj <<
-/Length 1287
-/Filter /FlateDecode
->>
-stream
-xڵXKoFWV0}/ID!@0mZ+ه>HQ2m aŊ? V|8b]1FbGjZ&
-#E#e[,o_kdյnZ*~y U-ۮo.^tV]rp{-ۭ[ZTRt-NjUSMTQk4APT+48W,>LWª+4*I+U! +YԂ7 ]fZ ]W"o؈c,;[RE)$iIq0Y#d54ںݖAҡE!Jִ~hGj;v #
-ygcЋj%qJ ? JR%tÙ&c2E͛86 SfFar39 G2C"S|OXy5Lqn agώ7Qj|M;Q\P%:Cu ?s8tJT"\ l=mY{i!g?; `K!W1-Djv o8 o.?\.a]r''ՙe)YCiP Yb/
-endstream
-endobj
-385 0 obj <<
-/Type /Page
-/Contents 386 0 R
-/Resources 384 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 342 0 R
->> endobj
-387 0 obj <<
-/D [385 0 R /XYZ 124.802 735.021 null]
->> endobj
-114 0 obj <<
-/D [385 0 R /XYZ 124.802 717.021 null]
->> endobj
-384 0 obj <<
-/Font << /F36 221 0 R /F31 201 0 R /F18 204 0 R /F39 234 0 R /F14 233 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-390 0 obj <<
-/Length 769
-/Filter /FlateDecode
->>
-stream
-xVN@+8bk! 3s 8BS՛L `K{7BŻUs`h4WaZAX]مl \+<1fuY *0@hat,pbݓr_ EPBi[7R
-gA7C ~T[Ye6s)2ER||<ZT|ѹ%Ÿ8TP
-endstream
-endobj
-389 0 obj <<
-/Type /Page
-/Contents 390 0 R
-/Resources 388 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 342 0 R
->> endobj
-391 0 obj <<
-/D [389 0 R /XYZ 124.802 735.021 null]
->> endobj
-388 0 obj <<
-/Font << /F33 215 0 R /F18 204 0 R /F39 234 0 R /F14 233 0 R /F16 216 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-394 0 obj <<
-/Length 1390
-/Filter /FlateDecode
->>
-stream
-xXo4"od&x$@B P hU'=ٽ
-Mx7ߌ?|Fۋ7_~m|Uv hJ7ޘj~ie6yo?Mϛ c;l~6&CK5hM\Ɍ}?\mI ؏^{M 2 J&8RgHi IC_.p԰nfYw<ؤ贼ƺ
-a=f5rM'`s`<otk+qU@I0G<_j0I
-tէ_wh%-h1V`U*G$$M蓡9='S<M%f]L{o+UslNO&pL?^h h,AY:h_u1Fie,W/yϔʬ3Y^tKA!Lwx~ƘQܡI
-Wgp$04XrG!KQ?%b!&ii}5#MOd|@0 gP<$Tv9E"0h`la?P1q
-&U0g^,dX. iM ̥Xƚlq""/6Ԭd˫N9+mr]DJ X.rb_60+Vd_*h;SGJ,uՑu%W$Uiؐb4D"%`M6*u#g]y[Nz(ݻ^^,WcFAfg8a;[8=ͱ@]9d2+t;9ht# q@(>j#8g'->r_PmG/z-\e'JNgɺz\ݲ/~>~tuμtp.
-endstream
-endobj
-393 0 obj <<
-/Type /Page
-/Contents 394 0 R
-/Resources 392 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 396 0 R
->> endobj
-395 0 obj <<
-/D [393 0 R /XYZ 124.802 735.021 null]
->> endobj
-118 0 obj <<
-/D [393 0 R /XYZ 124.802 717.021 null]
->> endobj
-392 0 obj <<
-/Font << /F36 221 0 R /F31 201 0 R /F18 204 0 R /F14 233 0 R /F32 203 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-399 0 obj <<
-/Length 389
-/Filter /FlateDecode
->>
-stream
-xڝMO@+H]gv=ހBAQ$F~ZE¡f睝yEx{qS!3B6JjEฐT5LSF
-5O<(d[|TR0>Ϫz?-nY5w@ e77_ldPPrYwn5KGpc$!:""KN)"T&] 8.BM3Qx߿}-?w$O!!96SEXɂݯd,*
-JZ.kU
-2bԯSǬNӄl<\œ,%˼\-}OU 3?Tz[w ƴIkT{\ܜH ؆Tt4#a
-&ȍ+%)NC3j;0
-endstream
-endobj
-398 0 obj <<
-/Type /Page
-/Contents 399 0 R
-/Resources 397 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 396 0 R
->> endobj
-400 0 obj <<
-/D [398 0 R /XYZ 124.802 735.021 null]
->> endobj
-397 0 obj <<
-/Font << /F33 215 0 R /F32 203 0 R /F18 204 0 R /F16 216 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-403 0 obj <<
-/Length 1666
-/Filter /FlateDecode
->>
-stream
-xڕXKo#7 W-3[3 zmѢHOM7hH1:cd=(hx&5J)\l2 TF F~jګNc;9ȒMX/Ah:3(?ɣn?4 kmG*fG\1MgePӡ^7{X$, ۰AS< -mnxuX5~aSٴyT^.iIN 5*h:a2
-l5>R>6 ޑ5 ǽ201xΠ a2."5ϥ,ano/=/a>(ӓ-]8Z&gTz*+L#$fӣ*YI.yI7b#I/K
-.ᤉw,,(|ө` I4G:lﬔ&GuϛW
-Ǥ4O6O,; KQ#C
-'
-
-Bl-)ky@({ZRx[XӬYofr
-ݸ(Rʼ,B;w{gl0r
-VdN[26
-ER5'PV:UUEI9X>/bP.}X"R$Š!'
-k <>zjQkY`N6n0
-endstream
-endobj
-402 0 obj <<
-/Type /Page
-/Contents 403 0 R
-/Resources 401 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 396 0 R
->> endobj
-404 0 obj <<
-/D [402 0 R /XYZ 124.802 735.021 null]
->> endobj
-122 0 obj <<
-/D [402 0 R /XYZ 124.802 717.021 null]
->> endobj
-126 0 obj <<
-/D [402 0 R /XYZ 124.802 313.483 null]
->> endobj
-401 0 obj <<
-/Font << /F36 221 0 R /F31 201 0 R /F18 204 0 R /F39 234 0 R /F38 232 0 R /F14 233 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-407 0 obj <<
-/Length 1787
-/Filter /FlateDecode
->>
-stream
-xڥYK6W6`|!ҢA) e-o P-:aAC ͐+Ld~~].jl6[fR*s*pl}ׅ*&v|Fi+(sV?\&Ư.]RUI.EkFI<뀮ANz'~ G1jqfz6w$QE&Q~3Qd O|BU-,d_$l\gFKv& gl+DYtA7U&Ҟ?y^w$77(f7U5^<ٴ~N"5EhW8odgXSN`
-61+gŒq mXrE121#sRuYqݰq.67
-dnPD='vuL<% )x}*Q,;vzMn9=o̷Z2?~nf^Z:{:7;ـ蛏CB;e?V[pb7آ-Jg~=60r-(sKs
-_EA*Y?}Y i
-+kT.8d3"b@ M{ܯ)!t81 1)WU֐N!&^a(>[9҄2D n.Xm>v?_>mݖA91yA+*'0ʮ|
- 猻ފ-ƙc"Vߛ]D $sɥy#X$2$(rLLes';p[TSlSA IhP}jRaD!u={nX"
-G:C+akWW
-
-kR(T^ 5e٫{WR/@kyYۂ+j9F9]RX|4,ՈNi'6<?#O2 PTQ3spq@F
-endstream
-endobj
-406 0 obj <<
-/Type /Page
-/Contents 407 0 R
-/Resources 405 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 396 0 R
->> endobj
-408 0 obj <<
-/D [406 0 R /XYZ 124.802 735.021 null]
->> endobj
-130 0 obj <<
-/D [406 0 R /XYZ 124.802 245.367 null]
->> endobj
-405 0 obj <<
-/Font << /F33 215 0 R /F14 233 0 R /F18 204 0 R /F39 234 0 R /F38 232 0 R /F16 216 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-411 0 obj <<
-/Length 2041
-/Filter /FlateDecode
->>
-stream
-xڽYKs6WjFR[IdI:8ql%ԯJJ]`I9xD
->\{VMZzRSΥht=mtMa]|o޻pWpg=϶ Q'/&LdPUT~N.'?4<|]n[ZzY^ƍ_?'~X(+/B9^j\mjr9V\.7tn/?^_?2<Qj.Z_h#WPE+}xm@?|R6Lyп P+ hSz?V 7
- 6z4*xjmޒJ𞄻o-(j\ABDv7ES``k2QWÅ#kk9.;6z5Ő?JGH3D>+ 10Rld_ lk'{β0ePMD6A?rjؚ EϬp'E+͇*tw kt 1'+pHP:h);[\L# ``) ^elh }>TGpQsbE2oayySKMd:SURP]g0%Ζhsn)RZHi,^ -t<<=:[.Wȫ<ʩzt]G$Q 9mj"3)х) >%+CS|Gd :mUUK6@}ԛ01\|0SL6>NZq„dFqRvNR=-uɧzsu||ĚݞxG%G5yt@%P*Qܖe6\~~f@.GYS_A>Pbg3gHw7!we|"Jz5Q}+[2kJGH`
-EWݱ+1
-}mċ +\uU译w)f D_M&R>G QKG^ g u9vFK%R>fFTsRAXT=.
-endstream
-endobj
-410 0 obj <<
-/Type /Page
-/Contents 411 0 R
-/Resources 409 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 396 0 R
->> endobj
-412 0 obj <<
-/D [410 0 R /XYZ 124.802 735.021 null]
->> endobj
-409 0 obj <<
-/Font << /F33 215 0 R /F39 234 0 R /F18 204 0 R /F14 233 0 R /F32 203 0 R /F16 216 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-415 0 obj <<
-/Length 1694
-/Filter /FlateDecode
->>
-stream
-xڵXYoF~ׯ[$@b.
-_ qU)/p
-Rx}
-{s;ЫqеE!v(/WJ)x:4h8%Pa!2x\N:SF]8WRGNf3LZbw+ly|*0g NOgk#<Ν|Rkebn){)Ӗ7D(MX! r*x{DBnbkdr=ŝ9 6X*T IGIÂT&EOIMy&ͦ,h"=\a
-endstream
-endobj
-414 0 obj <<
-/Type /Page
-/Contents 415 0 R
-/Resources 413 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 396 0 R
->> endobj
-416 0 obj <<
-/D [414 0 R /XYZ 124.802 735.021 null]
->> endobj
-134 0 obj <<
-/D [414 0 R /XYZ 124.802 364.715 null]
->> endobj
-413 0 obj <<
-/Font << /F33 215 0 R /F14 233 0 R /F18 204 0 R /F39 234 0 R /F38 232 0 R /F16 216 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-419 0 obj <<
-/Length 2179
-/Filter /FlateDecode
->>
-stream
-xڭYo# _/IvogER$-EOq ,,,]$]>jW<Zc?RX7yrS%iZ* _ݭg]cy휛k)ŸkCߍ
-y- &<k7gDN ,^U;c\X
-=oAԆһG?s9UG̦QIOw|{w ,<>_n~ITJ4k_#K5^7+J7KSYw77¶{!}`'^De{:kcY/y:
-y^.Lvk: ʡ ӧ6})ZTKc(CjT؅P IrҒ,)lj2C$ǽQD::D:%8ĘHrLnU)*n?O59uW#On^[egq!X_ː_ִx Llr`mjzN+Tyʞ׻q2Tw-iEl[d\.78GZ٭]Cceս&R'p6_EٻdM
-LDصn(NMШȔ[aV R$Y+Hi5V.< pLyLi
-
-d"%S2VF՘:GNGH mbfRX</&:wFi&>YidË:Idzg(rHJ &ZJCB0Y'bGo< v •i~ Z* P 0u0iS.WƊ^V B2Z=8Lkf]@+|tɩ@rg@T
-=o^.HK^>wB|yfFXaI2~
-^=A (9A$tBPS&}Pqpq0նΌڶntغŷ1IkF%
-c0JL|Rְ)or 7S C915zycy$Q5%
-^NKB(_7Jn|bLu,]Od"'HȠ&DF&@%f!|Į#g*)ϫx:kꜲ lMI
-"RPD NεٽEg~ǢŨ=(i%_ݔxPDi(s._N?'E2b]q|oqY g8o\?}[ @O$^qET A!dװ`haS6HqJT@mEwm9)x4MƳYٰY$iXry긮C,*
-, !~~{3{3hJ:WMz bLv'Ҵ~n?ԛN%M}AyO^ `ֻ"g H}7.ΨЛiR $vz^/:y
-endstream
-endobj
-418 0 obj <<
-/Type /Page
-/Contents 419 0 R
-/Resources 417 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 421 0 R
->> endobj
-420 0 obj <<
-/D [418 0 R /XYZ 124.802 735.021 null]
->> endobj
-138 0 obj <<
-/D [418 0 R /XYZ 124.802 502.274 null]
->> endobj
-417 0 obj <<
-/Font << /F33 215 0 R /F14 233 0 R /F18 204 0 R /F39 234 0 R /F38 232 0 R /F16 216 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-424 0 obj <<
-/Length 612
-/Filter /FlateDecode
->>
-stream
-xTMo@+PX5] "#QB(` %ebǩ+;;3o{ h[:gҗhB8 >R,(еb瞔ҍ%4bB#aS<b1( 8s83 Ri;
-`8
-B1NaQͩ{a{0Cژ$8fy_:?
-D'Nۧ(2H^!YB5%|qHoNV"
-X=o _&OocY䵞6*v.@zPVnӤ
-j{xe_:io׹6$^5*.vq}WE\ +VXICdC\掻zc|<ԍ(,qq@GĐ2O}#<KGIah;͛NU]*M.,hX}ߖ)v)yTh'W`VIQX mlPƝl[+1t՝wIO(k1kˤδ^UQgFQ[s_ߘFs1Y]މb/9R?r#lS{=O 
-endstream
-endobj
-423 0 obj <<
-/Type /Page
-/Contents 424 0 R
-/Resources 422 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 421 0 R
->> endobj
-425 0 obj <<
-/D [423 0 R /XYZ 124.802 735.021 null]
->> endobj
-422 0 obj <<
-/Font << /F33 215 0 R /F39 234 0 R /F16 216 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-428 0 obj <<
-/Length 1025
-/Filter /FlateDecode
->>
-stream
-xڝVmo6_eE-wJn+aE%J,Ա]A0*
-I^{;&,7i
-cNf7 (He2N>sdVnr.sr>eYef:c<qli9cI\fRnT*62ݵ52㱨R*5wLE! k
-  Pè{FfڄD_f5OVM
-=,3^FK.n QE\bF㳐|Xx kaHg.
-]=/ .kBDE.@s)XMo'b
-}5`5#B{qx4Ǭ{^,;
-R<!/hR W8]r+;:X [MRgajN 7(v.,BN@
-endstream
-endobj
-427 0 obj <<
-/Type /Page
-/Contents 428 0 R
-/Resources 426 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 421 0 R
->> endobj
-429 0 obj <<
-/D [427 0 R /XYZ 124.802 735.021 null]
->> endobj
-142 0 obj <<
-/D [427 0 R /XYZ 124.802 717.021 null]
->> endobj
-426 0 obj <<
-/Font << /F36 221 0 R /F31 201 0 R /F18 204 0 R /F39 234 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-432 0 obj <<
-/Length 1404
-/Filter /FlateDecode
->>
-stream
-xXo6~_iMd[:X,[S68d__ǣ(EvYGCB?'&?<J1'˂h^dLޤל.5\޳sRRdR:8 ^^˫ xzGvzr6;fiЄ2Q̝dyK:!$\BSX'W'O8⠼*Av~Q*#%'nv5] 2˘N;,^ljHIx2׍/95w&~څv(II\<k
-RZ Us+Bx ZkڂJtCW-dڋ4=kV>me˶nz(x$X/IK1 Ic1PNqOrSi9ΖR<2Le2<|Jw,+{;<g̬m9]QX)kOsԵ
- įhtqaq.AI
-g@y3ٖIÚ0/=}+cKctTC#+izDNB L P$;ŰtDVe,|#Mڣ;]okF+2]i>NWBUu=^:O땱qä2n
-S%]uM/O|8
-؎ r{3#{83N=j7!4nwۦ_~7?V;nbHGJ&%)=&_
-endstream
-endobj
-431 0 obj <<
-/Type /Page
-/Contents 432 0 R
-/Resources 430 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 421 0 R
->> endobj
-433 0 obj <<
-/D [431 0 R /XYZ 124.802 735.021 null]
->> endobj
-430 0 obj <<
-/Font << /F33 215 0 R /F14 233 0 R /F18 204 0 R /F16 216 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-436 0 obj <<
-/Length 1373
-/Filter /FlateDecode
->>
-stream
-xڵXKoFWR"z+#n#TvHK;C.IM SZ|c-LdD|:;;.SpNlvIePӪz͖_{-X}4֓2rwP&3P'^2MYLf5: j<|FzkXP_f6QI4^zߎ2AN(rSdc++G1 r:[0)2 FSHt{3dt.>lx<Y&:F*RXSeDz-68|NNocLʢƧ85}itɼk"r_?r[Ѝp7uaQ@]woX< S:&rc^AmH!
-6,P'):FL9ґu).R28O(z1D5(슉ׇگ??7b ?# -(}NXT߬@:² e+ڌSQ]Ļ,yځn-ŲAh{j:M)YbD$6tmFdj<gOL~xk"Q'_kٔV=k;Hд(Ή^$"ȹ6zlPY^S&N)<tP$=)z}5D9~wkO5@e!t1kԺ$k>H,uZ*.Wt(2t8VC1t͚~R<vTYmD>9A%,)~'ixѶ۪}w{|0a]/:
-endstream
-endobj
-435 0 obj <<
-/Type /Page
-/Contents 436 0 R
-/Resources 434 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 421 0 R
->> endobj
-437 0 obj <<
-/D [435 0 R /XYZ 124.802 735.021 null]
->> endobj
-146 0 obj <<
-/D [435 0 R /XYZ 124.802 717.021 null]
->> endobj
-434 0 obj <<
-/Font << /F36 221 0 R /F31 201 0 R /F18 204 0 R /F39 234 0 R /F14 233 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-440 0 obj <<
-/Length 2315
-/Filter /FlateDecode
->>
-stream
-xڕYYs7~篘JDV#ܘqʻMoRI+OEc6
-8{wf[i0uӶOX0pn܇v8>.mK[* Fqj}u8sUj
-95z~0*A#9
-oxSѱYub7Ml6MM¨
-Jr
-MxIVYݯ%b7xRdH'>6گ  `@r eN1aFV0Y[LNg҈ɣh@iɊ5'S%I!!'p堰!=xwmFC℀K;U4RO$;B e_)ERX;| LԚ
-r8gdf">c"5OT̝LJ,ѯ2tt=YRdԋfe d[ /
->.Y^oC)2d>` E*08O\E0 #ѲqN1TR, g3D1WڎƿL=FeRn`l[vqo ((hj[bi'V-dMۇ*(
-@2d
-Le|p%YePoݭNB"{ޮ$HBz7//|WڏǏ"ۺxS!{|ljgq a {GFaӫ";((T}XTίÀ*x~wnVx3>2 vg
-M$\PK
-"+razw8 EoL -/)85L{?v~AF4|,}4ABA.RϊŘ%Yi=UOnZ]!m5K@ǗTJܡ-hWioq .&"i"26 I&(2)7^邜}g ?
-<<݉(Aa/_by=PKoDZ6!©fp 3 ]bOԍծZU>z6?I
-endstream
-endobj
-439 0 obj <<
-/Type /Page
-/Contents 440 0 R
-/Resources 438 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 421 0 R
->> endobj
-441 0 obj <<
-/D [439 0 R /XYZ 124.802 735.021 null]
->> endobj
-438 0 obj <<
-/Font << /F33 215 0 R /F39 234 0 R /F18 204 0 R /F16 216 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-444 0 obj <<
-/Length 756
-/Filter /FlateDecode
->>
-stream
-xڍUKo1])Yl$.@ Tt(Ii<lU+f>CJջz}f,ؠKengQ6:ACi,
-@$_yXbˡHr}~JNrA#7EX/ hl4 s-1D,)ћ)<@C٤0!>ҋ!SLI4 Kp7PYoeG_؆$žKݤKtcvH% b18وqqpQ JF&)oH(]pӹzNT)7)Qt~Xv}]_IG?)"dʱ ★X@[zx}#BVmI_S
-O-C%a&7=+Z=v>\ylbK!{wtvWl֛by^/غt;rZv&]le}kWd5˅0FC_$f4x ~b<SQ %"<b:|KASpd`D"9r!yHqv5fړ+y&<Xfo4ȩ#x8+xVvѫ<6 KI#v2m
-endstream
-endobj
-443 0 obj <<
-/Type /Page
-/Contents 444 0 R
-/Resources 442 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 446 0 R
->> endobj
-445 0 obj <<
-/D [443 0 R /XYZ 124.802 735.021 null]
->> endobj
-442 0 obj <<
-/Font << /F33 215 0 R /F18 204 0 R /F16 216 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-449 0 obj <<
-/Length 1927
-/Filter /FlateDecode
->>
-stream
-xڥYIo7We\H$%hSSS,vP$%>8#=ȷ-{Fm~~m5`F7kFk˛ ŴO޾N?sC~i_0I>,Lmvnڒ_ؠ@O߽3 2uO Pe&I߳i裂O0LL(tfu:k v2ٙ`@ٳ\U^oߤ%f! 6:mQa?咇⽼ sdj!^
->rсoW|#i=Nޓ\ʡ}') q[,z¤9t9(ȥimB3oDёhޕȎhD>%~(P6X?B 0tP{Gy=󮇸rJtCA 1fXp"<x4hxNQp]Iஆ+3vt4,TǑ zd
-M+$,&#ǒ("FS*TRq$]5.U@Ն qIX!B.j
-`R^EeQr-8ėj~bM*`6K<sb1;2U΋{tdS=t R$څrj s-ņ.)W<m%W)M6{a*ĊFc%2/5;GBD$"mά#X58a7t-t|USRtҔZ\2)6I*5!'z#*7ƚ6>  ^;5YwF0@5p8_@`B9S#pK-g9?/\@W,GbL6V%΀bgWƳXHuEvd2aW11pN 9Hd _mT{{Mf-q$>#5i=g>rˇ.,*~MWH,uv*Ӊ]v
-ښF<ɹkJԢRǜ3( xL 䐒H-hrbZ
-endstream
-endobj
-448 0 obj <<
-/Type /Page
-/Contents 449 0 R
-/Resources 447 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 446 0 R
->> endobj
-450 0 obj <<
-/D [448 0 R /XYZ 124.802 735.021 null]
->> endobj
-150 0 obj <<
-/D [448 0 R /XYZ 124.802 717.021 null]
->> endobj
-447 0 obj <<
-/Font << /F36 221 0 R /F31 201 0 R /F18 204 0 R /F39 234 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-454 0 obj <<
-/Length 1483
-/Filter /FlateDecode
->>
-stream
-xڕXKO#GW[C{fQ. !r.+d81xtuU?f/p@ݞwW}U +>~Bʢ.k#Lqu_HJuaeUfya|-TҭZ^Kܟu2R('Sc;ZGo͐ VݙF6<UaiuB@JNTc W'.GWFy
-^pʊ g[/VY1w+e]=骐JuuQg̖LWo&S-w5em-f{)e<`Aoq9:ݮN~˾ 1<-6$aX~ hZ/|np4#O}nӞ~>L2['w4hdYlNM#ֱزYgʮavوUJeQԐ,rS 1Qk (P)I$9)iY @GJ2=& T*^( w!Lr`LA(l
-OScRfPyzzCT"] CrPyP
-?@eAa:i^]`*栺oڣ7
-HBź_v,kWhC[qܦYӲW%Z2.Iz;"6| g)AEMU5!8{zRY,C}=D\28q|KG$\EmN|=j`1/g/Z#NiBu@&+laLluc*T}dWp3 "9K(v ~W =mlr 5G=4woo3#z Ocz^tzVvys?- uWe闛޿0~\[ܭE/i Hymfۆ<u|B~YCX=.7T5{v[f0hnq.>k׫aP| jh"UJ9ʈN׆2l) _Aܳ ^exj¯3f&{*·$/A0!{ Drw"
-0NȐS3Ԥiw'M)A ep2!eFƔծLUFǔ_I
-endstream
-endobj
-453 0 obj <<
-/Type /Page
-/Contents 454 0 R
-/Resources 452 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 446 0 R
-/Annots [ 451 0 R ]
->> endobj
-451 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[0 1 1]
-/Rect [415.067 615.9 462.869 627.853]
-/Subtype/Link/A<</Type/Action/S/URI/URI(http://judy.sourceforge.net)>>
->> endobj
-455 0 obj <<
-/D [453 0 R /XYZ 124.802 735.021 null]
->> endobj
-452 0 obj <<
-/Font << /F33 215 0 R /F39 234 0 R /F18 204 0 R /F16 216 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-458 0 obj <<
-/Length 1453
-/Filter /FlateDecode
->>
-stream
-xڭXnF+x
-{H%QQ
-J(kªA
--ȔYOt,SZPn3)Aߙ89'3j*%eE
- tV"=0ƗG{̀N@XE25@BAC-!GK],O"/OqA|%Nk(C0@ɠ%iY~$2%ZiӯyR cݸY&rQ<d}F,{"< ,^D/5,ֱz/:"9J ZU")+"(2\FC^:"Z<&lHyc9E.;법kC#sӎ9kQ,ګ6^I q>LFrx{fv;`rXiR XuB
-քy=P[&,թS"&V`G
- %
-S~?BpĈBcM5E`}@jLf r5ά9 Gp߳>&yfF:RC)X2n QR.'Wa'()ar,)Ydtuֵ6ׁSZUam"
-5Z2^Ф͆iFHSvHSN}_pW˞+ ٶk"tR
-(7~WDq]P'!37k|'ûk#tPi
-vD
-
-endstream
-endobj
-457 0 obj <<
-/Type /Page
-/Contents 458 0 R
-/Resources 456 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 446 0 R
->> endobj
-459 0 obj <<
-/D [457 0 R /XYZ 124.802 735.021 null]
->> endobj
-154 0 obj <<
-/D [457 0 R /XYZ 124.802 717.021 null]
->> endobj
-456 0 obj <<
-/Font << /F36 221 0 R /F31 201 0 R /F18 204 0 R /F14 233 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-460 0 obj <<
-/Length 119
-/Filter /FlateDecode
->>
-stream
-x373T0Pb3 3KCB.S
-
-endstream
-endobj
-461 0 obj <<
-/Length 290
-/Filter /FlateDecode
->>
-stream
-x͒1N0Ebir "0]eH
-()@P'GQr) D5Ig{s{9_ٖe[kAds^;/ﴫ({bSveʪ{~lpe{~.8?PgcL*g-"R@X=F
-endstream
-endobj
-462 0 obj <<
-/Length 117
-/Filter /FlateDecode
->>
-stream
-x373T0Pb3 3KCB.S
-endstream
-endobj
-463 0 obj <<
-/Length 228
-/Filter /FlateDecode
->>
-stream
-xڕбn1 `#$"y#_ӥ(zRءQ@2t8z2JƥĩęɱBp"qwEa#0f%;듔E7K!:]ȩ&Z#R <a*?#7EZRZۡ$6jZg&6wD˵IjZhcD[m=T
-endstream
-endobj
-464 0 obj <<
-/Length 189
-/Filter /FlateDecode
->>
-stream
-xuб@
-@'Dc%޵i,ňOb7|˵Kdmq^@'%zS<p#d)DR9X*NTts2:2>uW!V}kR%khi*8bNҋk@6`,<
-endstream
-endobj
-465 0 obj <<
-/Length 160
-/Filter /FlateDecode
->>
-stream
-x33ҳ4V0P0V54S03P01SH1*25(As<L͸=\
-%E\N
-\.
-\.
- D5~
-endstream
-endobj
-466 0 obj <<
-/Length 226
-/Filter /FlateDecode
->>
-stream
-x}j0pl3 !NJcdMG!zr*ćttR<TKjd*Z6dvl-w-i6|:,o\Yg5+
-endstream
-endobj
-467 0 obj <<
-/Length 233
-/Filter /FlateDecode
->>
-stream
-xuNAPZ
-#wA1
-(ZZ`}{
-r㿃hOWוr%y+y~ _*<-ŏ=@fW/NJvsy.xz.kKDn (
-endstream
-endobj
-468 0 obj <<
-/Length 197
-/Filter /FlateDecode
->>
-stream
-xM1@%&x.6QL0XFhk,,=, K_g?fc qf2c2s7HbC8]ac_+l|]b<CEΘVR1OZ1:{=U6Zr%)
-TNw43秶V䷵$I:s+s6=kkEʒcB*u
-endstream
-endobj
-469 0 obj <<
-/Length 243
-/Filter /FlateDecode
->>
-stream
-xڍнJ19R,L7f8y[ZY^yu">[nvmJOBۅ)͖za6\ \R鈻Y-^sm}c^hwB7)
-"Tl&&KNW"3.3ɳATQ,wk'}9L~d/~vh+ʳN6I2c}':m;
-endstream
-endobj
-470 0 obj <<
-/Length 232
-/Filter /FlateDecode
->>
-stream
-xM1N@б(<'`cbGt  *
-DAI>SQr.),fSPI릾j*Y Z굼UzҖ7'Wˡa+<c w;i{*@@ %Xl-!Ⱌv2㯉8 q/I'AT䎮Q9洰SF?1s%{JXo^f.vgS bێ<
-endstream
-endobj
-471 0 obj <<
-/Length 153
-/Filter /FlateDecode
->>
-stream
-x333P0P0bS#3CB.K
-e
-
-endstream
-endobj
-472 0 obj <<
-/Length 114
-/Filter /FlateDecode
->>
-stream
-x3533V0P
-@-\.
- 00oO;v^r
-
-endstream
-endobj
-473 0 obj <<
-/Length 210
-/Filter /FlateDecode
->>
-stream
-xڵ1@EXL B
-endstream
-endobj
-474 0 obj <<
-/Length 111
-/Filter /FlateDecode
->>
-stream
-x3533V0P
-@-\.
-D6E``d=o``
-endstream
-endobj
-475 0 obj <<
-/Length 214
-/Filter /FlateDecode
->>
-stream
-xڵ=@XLa b"VJ--4ZG(c!q&:W̛¨QD=Ha@ADhzu+wdhTʦt<و|T)-}V"L\_k`|fY.t-7'kln_zk6nM^Io,|-Э%<8pC>
-endstream
-endobj
-476 0 obj <<
-/Length 203
-/Filter /FlateDecode
->>
-stream
-xڵ=
-@GX&G\@BLL!he!Vjih-G)-KMҌiOLD!s`Qۑ[Z8+6 JЕOhz$
-}~'
-endstream
-endobj
-477 0 obj <<
-/Length 116
-/Filter /FlateDecode
->>
-stream
-x3533V0P
-endstream
-endobj
-478 0 obj <<
-/Length 233
-/Filter /FlateDecode
->>
-stream
-xej0/xܢG=Am7ɐ&v25;4$h~=G w
-OOzQffAPJoVU廜:.G,WTc]M5aw 0OPېc&+em曰M7r+cA I83geHQَ{N֙T9̯:!8D5aai/[bg p~0:
-endstream
-endobj
-479 0 obj <<
-/Length 128
-/Filter /FlateDecode
->>
-stream
-x3331W0PP54S0T01SH1*25P
-endstream
-endobj
-480 0 obj <<
-/Length 161
-/Filter /FlateDecode
->>
-stream
-x3537T0P
-endstream
-endobj
-481 0 obj <<
-/Length 207
-/Filter /FlateDecode
->>
-stream
-xuα@
-@Qk;OiBcJtI*q>hh֒ESnq^%h
-:,*cub߶:osmn[u.܉ℛPkjQdZ*w|VPE)W[W%GI
-endstream
-endobj
-482 0 obj <<
-/Length 87
-/Filter /FlateDecode
->>
-stream
-x3634R0P04
-
-)\\@$2ɹ\N\@.}0PRTʥ
-endstream
-endobj
-483 0 obj <<
-/Length 144
-/Filter /FlateDecode
->>
-stream
-x3530T0Pb 3sCB.c
-endstream
-endobj
-484 0 obj <<
-/Length 247
-/Filter /FlateDecode
->>
-stream
-x}j0 @ h}upB3کCtءG;۟O'x`NR'!ݴmm/}ݳ9nx_wt[ۡ;n
-endstream
-endobj
-485 0 obj <<
-/Length 209
-/Filter /FlateDecode
->>
-stream
-xڵѱ
-0
-#__/"zwB\ tԙ;%72ӥh];xZX%h]7=]5CSv%|
-endstream
-endobj
-486 0 obj <<
-/Length 263
-/Filter /FlateDecode
->>
-stream
-xڅбJ@ )Gȼ&K*p`
-A+J--ͣݣV,Lq5
-W ӞVTə4T+H//蹼y^s3K\J=p u*!c3hЧLtg5T{nݾShw ,|u/0
-endstream
-endobj
-487 0 obj <<
-/Length 243
-/Filter /FlateDecode
->>
-stream
-xڝn0b@%{ A"Q*N*D(y ]H0$}K^PN'
-*gSAĜWFIӀ~)2zE|F}
-endstream
-endobj
-281 0 obj <<
-/Type /Font
-/Subtype /Type3
-/Name /F40
-/FontMatrix [0.01004 0 0 0.01004 0 0]
-/FontBBox [ 2 -19 77 71 ]
-/Resources << /ProcSet [ /PDF /ImageB ] >>
-/FirstChar 46
-/LastChar 255
-/Widths 488 0 R
-/Encoding 489 0 R
-/CharProcs 490 0 R
->> endobj
-488 0 obj
-[31.12 0 0 56.01 56.01 0 56.01 0 56.01 0 56.01 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77.1 82.75 77.1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 53.71 0 53.71 0 62.93 50.88 0 49.79 59.82 59.82 54.51 60.28 0 57.63 56.01 57.63 57.63 49.79 51.63 0 0 51.4 62.47 0 0 0 0 0 53.71 0 0 57.74 ]
-endobj
-489 0 obj <<
-/Type /Encoding
-/Differences [46/a46 47/.notdef 49/a49/a50 51/.notdef 52/a52 53/.notdef 54/a54 55/.notdef 56/a56 57/.notdef 205/a205/a206/a207 208/.notdef 224/a224 225/.notdef 226/a226 227/.notdef 228/a228/a229 230/.notdef 231/a231/a232/a233/a234/a235 236/.notdef 237/a237/a238/a239/a240/a241/a242 243/.notdef 245/a245/a246 247/.notdef 252/a252 253/.notdef 255/a255]
->> endobj
-490 0 obj <<
-/a46 482 0 R
-/a49 483 0 R
-/a50 484 0 R
-/a52 485 0 R
-/a54 486 0 R
-/a56 487 0 R
-/a205 460 0 R
-/a206 461 0 R
-/a207 462 0 R
-/a224 463 0 R
-/a226 464 0 R
-/a228 465 0 R
-/a229 466 0 R
-/a231 467 0 R
-/a232 468 0 R
-/a233 469 0 R
-/a234 470 0 R
-/a235 471 0 R
-/a237 472 0 R
-/a238 473 0 R
-/a239 474 0 R
-/a240 475 0 R
-/a241 476 0 R
-/a242 477 0 R
-/a245 478 0 R
-/a246 479 0 R
-/a252 480 0 R
-/a255 481 0 R
->> endobj
-491 0 obj <<
-/Length 184
-/Filter /FlateDecode
->>
-stream
-xm=` .߁1D'㤎]ċ8p n #~$(}L<L6y6-<vf{Ś\(]p9% ED-4
-,iu8q/aoM
-endstream
-endobj
-492 0 obj <<
-/Length 190
-/Filter /FlateDecode
->>
-stream
-x}0K:#pO`i1NI4
-Kd0FMj\ijx@½%\PPGL2P[2;|=7P~K<Ls 9y|9#l K#vӜ_[ZCN _CF,a8[NXTQ
-endstream
-endobj
-493 0 obj <<
-/Length 218
-/Filter /FlateDecode
->>
-stream
-xڝ1N@4
-AT
-(
-o̤/`tR27V֯ifhh`+-RN]dvg9
-endstream
-endobj
-494 0 obj <<
-/Length 183
-/Filter /FlateDecode
->>
-stream
-x313T0P0bCSCCB.c
-endstream
-endobj
-495 0 obj <<
-/Length 147
-/Filter /FlateDecode
->>
-stream
-x313T0P0b#SCCB.c HrW0
-\.
-
-endstream
-endobj
-496 0 obj <<
-/Length 145
-/Filter /FlateDecode
->>
-stream
-x313T0P0bCSCCB.c
-
-endstream
-endobj
-497 0 obj <<
-/Length 227
-/Filter /FlateDecode
->>
-stream
-xڍ=N@\4
-AT(PR$ގk 7eUI"Q|{;5袥aC]8<r@HaV;z~__S~EO-5kVE*#TPˎaa'\Bكoҝ\Q4pf<`2ߔO$̘gD<gTIcfKo=uӖ
-endstream
-endobj
-498 0 obj <<
-/Length 120
-/Filter /FlateDecode
->>
-stream
-x313T0P0b#SCCB.c HrW0
-\.
-?c4 N%'W 
-endstream
-endobj
-499 0 obj <<
-/Length 108
-/Filter /FlateDecode
->>
-stream
-x313T0P0bc SCCB.crAɹ\N\
-\@Q.}O_T.}
-endstream
-endobj
-500 0 obj <<
-/Length 156
-/Filter /FlateDecode
->>
-stream
-x313T0P0U5T0҆
-)\\&@A "ɥ`l¥U()*Mw
-pV0wQ6T0tQ``HX`'$@DD?`AH?` @OjhPՓ+
-endstream
-endobj
-501 0 obj <<
-/Length 218
-/Filter /FlateDecode
->>
-stream
-xE=n@E.,MvNm M,#EPR%)SB9QPr.]lȢOLt&c&FRf1K~|<MәDH%_whPK}O4|3Eӵs|@F
-āA֤Ha8pn\]ϭGН-8j<\
-8hPHF=a,o>U.k9s
-endstream
-endobj
-502 0 obj <<
-/Length 123
-/Filter /FlateDecode
->>
-stream
-x313T0P0bCSCCB.cs
-endstream
-endobj
-503 0 obj <<
-/Length 177
-/Filter /FlateDecode
->>
-stream
-x313T0P0b#SCCB.c HrW0
-\.
- B`W${1y 01h͇q|Fa  l?`!'W 
-endstream
-endobj
-504 0 obj <<
-/Length 194
-/Filter /FlateDecode
->>
-stream
-xU-@%&c 迨
-P$u
-endstream
-endobj
-505 0 obj <<
-/Length 170
-/Filter /FlateDecode
->>
-stream
-xŐ1
-@ERxt)R-n!he!VB9EqW7seϨxAƘxң3U5ݮr 쀾"h `,T'uID x
-Zpqol
-endstream
-endobj
-506 0 obj <<
-/Length 174
-/Filter /FlateDecode
->>
-stream
-x313T0P0bSCCB.cs I$r9yr+s{
-endstream
-endobj
-507 0 obj <<
-/Length 197
-/Filter /FlateDecode
->>
-stream
-xڕС0jrf{::"#a
-֤FscT,r0ʖSiNfEN
-endstream
-endobj
-508 0 obj <<
-/Length 236
-/Filter /FlateDecode
->>
-stream
-xu1N@ E"a|$H" *
-DH$*\!G2HQwmT
-娔DJsՠg?x#Um<>r\Iq+wn˜24wC0MLNLtA 9
-endstream
-endobj
-509 0 obj <<
-/Length 124
-/Filter /FlateDecode
->>
-stream
-x313T0P0b#SCCB.c HrW0
-\.
-@†H0 z(QՓ+
-endstream
-endobj
-510 0 obj <<
-/Length 167
-/Filter /FlateDecode
->>
-stream
-x1@G(LtYY
-+D
-,ZZhq@IaGhf'_Ϭgɂ#}SqblF.b27+e=Z3bÏB&.ْ`9:Rs)U*H]J^w¤%HRQC
-endstream
-endobj
-511 0 obj <<
-/Length 189
-/Filter /FlateDecode
->>
-stream
-xe;@!$p,1q ,ZZh.F5\5o2s? q98^}G|9^0vV2#kgdfAYL{NELi iww?>,
-ʐ
-] xBi
-endstream
-endobj
-512 0 obj <<
-/Length 197
-/Filter /FlateDecode
->>
-stream
-xڍϯ
-P#)>tœ &5m.b_CYN wzto,NvE69Wh .-rZeD/@sL@56Mo%n} :}
-endstream
-endobj
-513 0 obj <<
-/Length 226
-/Filter /FlateDecode
->>
-stream
-xE1n@б\ M<'m JHqT)"*L(iRZt)GLᏱEW23ɢ}ɟ\YV>>xUs&Ւg9pzy^Jz-NS={kg`g?EJEAJ>.dt
-&JI0r熻qM 5.M_f[݆{GZ>_?WKq{
-endstream
-endobj
-514 0 obj <<
-/Length 192
-/Filter /FlateDecode
->>
-stream
-xڭ=
-@ )"U F0Xmb aҔ)®p)6
-GqBQ@O[SQ6{
-t&NExޡ9OA
-q@#~8
-endstream
-endobj
-515 0 obj <<
-/Length 182
-/Filter /FlateDecode
->>
-stream
-xڥϱ
-@ Y| j;:9::(}{{3!HŔĔ'tIio _Q[z>^WnEWtL(>a]Q3-c'4
-endstream
-endobj
-516 0 obj <<
-/Length 191
-/Filter /FlateDecode
->>
-stream
-xm=
-@ x Ղ?`
-A+ RK E[)S,;h%Xfh<
-}:ex\T:8^pVQ>EmqF;)C}FE$
-endstream
-endobj
-517 0 obj <<
-/Length 187
-/Filter /FlateDecode
->>
-stream
-xڝ=
-@g"#Xraˀ!N;GYg!BR@[]/w%ܔ|q&?,Lƹ
--0遍~*?um
-endstream
-endobj
-518 0 obj <<
-/Length 182
-/Filter /FlateDecode
->>
-stream
-xڍ1
-@EIk9
-n!he!Vjihh%GL2Φօ}g?ofǜlS>'t#k5?;2{Zd܆L]rBC\"iJzD=[5/jLAOQ~ߏ@B_Zh4J5Ϋ^RMuZ9uEJ
-endstream
-endobj
-519 0 obj <<
-/Length 193
-/Filter /FlateDecode
->>
-stream
-xڕα@ .<} L &`qRG;[pqᾤ 5)+H+9s<^&|XLפ*L,r0S⺡MNMC
-endstream
-endobj
-520 0 obj <<
-/Length 201
-/Filter /FlateDecode
->>
-stream
-xmPE4K BBrmM>}}V́;ܹiԥS=T'u9&a+NFF⻥OK+ VZ[( f#2;܃J>PDCv@Z }•cC
-7'* 4u.7mp b2rcZI_
-endstream
-endobj
-521 0 obj <<
-/Length 154
-/Filter /FlateDecode
->>
-stream
-x313T0P0asSCCB.c
-%E\N
-@BA,@Az H?*;
-endstream
-endobj
-522 0 obj <<
-/Length 253
-/Filter /FlateDecode
->>
-stream
-x}J@#E`}!k.p`
-A+ RK E#U(y[,gǰzqꜟJz`;볟 Z.(wk~x|ws%{/xv
-endstream
-endobj
-523 0 obj <<
-/Length 161
-/Filter /FlateDecode
->>
-stream
-x313T0P0bcSCCB.
-%E\N
-@B4Pe,B @d ?  B~o
-endstream
-endobj
-524 0 obj <<
-/Length 132
-/Filter /FlateDecode
->>
-stream
-x313T0P0bcKS#CB.cC
-@-\.
-  @x@@?C1;}pA|.WO@.
-endstream
-endobj
-525 0 obj <<
-/Length 169
-/Filter /FlateDecode
->>
-stream
-x͏=
-@_#d.͟
-B Fp !VbnxK q\`eW񊉣~2c!G<h͞rCjaJj<)3#֤
-^id
-:
-endstream
-endobj
-526 0 obj <<
-/Length 198
-/Filter /FlateDecode
->>
-stream
-xڝ;@%$p.H)L0VjiVW(x[_~0E_cƃ=2b4gA ΄Sp)-8l<g]AaQ+?Pc4 oLu5ZԌ0v-L!skܶͅM2^deADW>sQy
-endstream
-endobj
-527 0 obj <<
-/Length 115
-/Filter /FlateDecode
->>
-stream
-x313T0P0b ebUel䃹 \.'O.pc.}(BIQi*Sm`Pz<7
-endstream
-endobj
-528 0 obj <<
-/Length 171
-/Filter /FlateDecode
->>
-stream
-xڽ=
-@[&G\@7!Q1#X^,7[n8ȃW3r9Al&]'-\,cx܎` s0 n ==Cbq1 SeKvI'mr/)T8R`5zf
-endstream
-endobj
-529 0 obj <<
-/Length 155
-/Filter /FlateDecode
->>
-stream
-x313T0P0bcc3CB.
-%E\N
-@QhX.O$$PD2`
-endstream
-endobj
-530 0 obj <<
-/Length 183
-/Filter /FlateDecode
->>
-stream
-x}=@XLvNBLH0XF[٣Q8ab^2}KJ)*%Kw4 +@@)juE]VQzB[_
-endstream
-endobj
-531 0 obj <<
-/Length 200
-/Filter /FlateDecode
->>
-stream
-xڥ=
-@g fI"SZYZZ(ښͣ[.(wS|7q4HRYs_8 LWCNv?$#(%p:lHj&5pGٌs V,S*7;(&A]t, -GT@8=F>
-$_ȥF<5ޯ
-endstream
-endobj
-532 0 obj <<
-/Length 211
-/Filter /FlateDecode
->>
-stream
-xڭ=
-@ 4 وVVb&7J{ Lig
-Z
-6_B޼q;QH1.#ܡ$ )ѯO-3 # ƒcM?n0O$!Wɾb|31P_6rilxz+=Տ>jO=]quBVŴ~[)D\|kse8'vG
-endstream
-endobj
-533 0 obj <<
-/Length 158
-/Filter /FlateDecode
->>
-stream
-xڭ1
-@ПJuj!Fp A+ RKAEh9JAqc![̃I`4-ØԈmjw쎜{Vky\Y\/|9êe_Hx+5C8#$RC\B"
-endstream
-endobj
-534 0 obj <<
-/Length 185
-/Filter /FlateDecode
->>
-stream
-xM1
-@4!s7q5@T0XErr,,2ԎgDM&rv=pr^ًYMyaoY!RrGB7 }KD#"eZSW!("PB Ca}96A=<Uīwy^A
-endstream
-endobj
-535 0 obj <<
-/Length 155
-/Filter /FlateDecode
->>
-stream
-x313T0P0bc 3CB.cS
-endstream
-endobj
-536 0 obj <<
-/Length 148
-/Filter /FlateDecode
->>
-stream
-x313T0P0bcc3CB.
-%E\N
-@QhX.O`
-endstream
-endobj
-537 0 obj <<
-/Length 186
-/Filter /FlateDecode
->>
-stream
-x5=
-0W:oN`B`A'qRGE7^̭ ء4ؔ? ,&Q@>0[}pb*Q)QzܟvI>>yG:J^]S |-,ZH
-endstream
-endobj
-538 0 obj <<
-/Length 174
-/Filter /FlateDecode
->>
-stream
-x313T0P0bcc3CB.
-%E\N
-@QhX.O `?
-endstream
-endobj
-539 0 obj <<
-/Length 202
-/Filter /FlateDecode
->>
-stream
-xE;
-PEoH!LUBBBN!۲t @!L@,a̻{ې lfOÄܒZrɌOp>ܘW!kJ/LnRQ;H(+
-O
-endstream
-endobj
-540 0 obj <<
-/Length 237
-/Filter /FlateDecode
->>
-stream
-xEαj@ dz)CB=ҩCɔdnvj:t&=$%p!:d-"zX!ZnhyxDQd}LKႲ)ֳ[{vȭ+OPy5 @U-G[;z[*
-endstream
-endobj
-541 0 obj <<
-/Length 176
-/Filter /FlateDecode
->>
-stream
-x}1
-P S2Y<9*BV N⤎G(Ϥc|?!?'S3>gt#͔+^wr~ÏB.9#W!H"Px+"B I /
-endstream
-endobj
-542 0 obj <<
-/Length 190
-/Filter /FlateDecode
->>
-stream
-x}0K:#pO`i1NI4
-Kd0FMj\ijx@½%\PPGL2P[2;|=7P~K<Ls 9y|9#l K#vӜ_[ZCN _CF,a8[NXTQ
-endstream
-endobj
-543 0 obj <<
-/Length 122
-/Filter /FlateDecode
->>
-stream
-x313T0P0bSCCB.c3 I$r9yr+q{
-endstream
-endobj
-544 0 obj <<
-/Length 181
-/Filter /FlateDecode
->>
-stream
-x313T0P0b#SCCB.c HrW0
-\.
-
-endstream
-endobj
-545 0 obj <<
-/Length 218
-/Filter /FlateDecode
->>
-stream
-xE=n@E.,MvNm M,#EPR%)SB9QPr.]lȢOLt&c&FRf1K~|<MәDH%_whPK}O4|3Eӵs|@F
-āA֤Ha8pn\]ϭGН-8j<\
-8hPHF=a,o>U.k9s
-endstream
-endobj
-546 0 obj <<
-/Length 156
-/Filter /FlateDecode
->>
-stream
-x313T0P0T5T01R05TH1*21P
-endstream
-endobj
-547 0 obj <<
-/Length 177
-/Filter /FlateDecode
->>
-stream
-x313T0P0b#SCCB.c HrW0
-\.
- B`W${1y 01h͇q|Fa  l?`!'W 
-endstream
-endobj
-548 0 obj <<
-/Length 170
-/Filter /FlateDecode
->>
-stream
-xŐ1
-@ERxt)R-n!he!VB9EqW7seϨxAƘxң3U5ݮr 쀾"h `,T'uID x
-Zpqol
-endstream
-endobj
-549 0 obj <<
-/Length 119
-/Filter /FlateDecode
->>
-stream
-x313T0P0b#SCCB.c HrW0
-\.
-!Å
-endstream
-endobj
-550 0 obj <<
-/Length 218
-/Filter /FlateDecode
->>
-stream
-xڝ1N@4
-AT
-(
-o̤/`tR27V֯ifhh`+-RN]dvg9
-endstream
-endobj
-551 0 obj <<
-/Length 124
-/Filter /FlateDecode
->>
-stream
-x313T0P0b#SCCB.c HrW0
-\.
-@†H0 z(QՓ+
-endstream
-endobj
-552 0 obj <<
-/Length 149
-/Filter /FlateDecode
->>
-stream
-x313T0P0b#SCCB.c HrW0
-\.
-?c '?@<` Yj00
-endstream
-endobj
-553 0 obj <<
-/Length 191
-/Filter /FlateDecode
->>
-stream
-xm=
-@ x Ղ?`
-A+ RK E[)S,;h%Xfh<
-}:ex\T:8^pVQ>EmqF;)C}FE$
-endstream
-endobj
-554 0 obj <<
-/Length 219
-/Filter /FlateDecode
->>
-stream
-x}1nPDQ mHؒ),9U(2E"s4(]Xwt)vg̬U ]Zz*Gepu+V;J{=K>,v@<0w ё ,!]`&pwŦh[ܳY3t{$xA`V M_@Ơ cֈXʶwy
-endstream
-endobj
-555 0 obj <<
-/Length 178
-/Filter /FlateDecode
->>
-stream
-xe1
-@D7X'pV 1[ZYZZ(Z'GQr)@3vS8Rv >t# q8])dku ? |lM\FD: QO5e
-/3Ⱦ%tuC$3j UfZC+O;
-endstream
-endobj
-556 0 obj <<
-/Length 121
-/Filter /FlateDecode
->>
-stream
-x313T0P0b ebU \Dr.'~8ϥ&=}JJS ]  b<]
-endstream
-endobj
-557 0 obj <<
-/Length 159
-/Filter /FlateDecode
->>
-stream
-x313T0
-endstream
-endobj
-558 0 obj <<
-/Length 201
-/Filter /FlateDecode
->>
-stream
-xmPE4K BBrmM>}}V́;ܹiԥS=T'u9&a+NFF⻥OK+ VZ[( f#2;܃J>PDCv@Z }•cC
-7'* 4u.7mp b2rcZI_
-endstream
-endobj
-559 0 obj <<
-/Length 230
-/Filter /FlateDecode
->>
-stream
-x=J@'LGyBV᪅SZYgiݑMc*6,|;tγñ3^U>}  [5Kh+~Y>Y\sfwYA:t[~$9|ll|
-endstream
-endobj
-560 0 obj <<
-/Length 187
-/Filter /FlateDecode
->>
-stream
-xM
-@ ,}x-WNI*
-nGGrPQ ܟMg%eTHܜN9ϴUvG@)fM,(G[>MM-
-+Uya4P ADlp/XZ
-endstream
-endobj
-561 0 obj <<
-/Length 181
-/Filter /FlateDecode
->>
-stream
-x313T0P0bcc3CB.
-%E\N
-@QhX.Og $D&=A$wDIRDڃͩ@0
-endstream
-endobj
-562 0 obj <<
-/Length 223
-/Filter /FlateDecode
->>
-stream
-xڅ1kP-~s1$
-63ک8c&_+5BwTqǻ?8zHG8$I3i'3 >(1HAJ_3IPn0K
-endstream
-endobj
-563 0 obj <<
-/Length 200
-/Filter /FlateDecode
->>
-stream
-xUα
-@
-YUp*
- N%Jcr]t%G F#܅pX@BljW8 tك.& \;5I]ީERӊn#z+~!&hjŷC"C*fueNlɪjM: ۳r"!޶4aa _om
-endstream
-endobj
-564 0 obj <<
-/Length 145
-/Filter /FlateDecode
->>
-stream
-x313T0P0bcc3CB.
-%E\N
-@QhX.O@ "I8&!dALɃ Lн @
-endstream
-endobj
-565 0 obj <<
-/Length 172
-/Filter /FlateDecode
->>
-stream
-x313T0
-%E\N
-\.
-\.
-?ad=<A
-endstream
-endobj
-566 0 obj <<
-/Length 121
-/Filter /FlateDecode
->>
-stream
-x313T0P0bcc3CB.
-%E\N
-@QhX.Og $D!3r.WO@.
-endstream
-endobj
-567 0 obj <<
-/Length 183
-/Filter /FlateDecode
->>
-stream
-x}=@XLvNBLH0XF[٣Q8ab^2}KJ)*%Kw4 +@@)juE]VQzB[_
-endstream
-endobj
-568 0 obj <<
-/Length 117
-/Filter /FlateDecode
->>
-stream
-x313T0P0bcc3CB.
-%E\N
-@QhX.O@
-endstream
-endobj
-569 0 obj <<
-/Length 200
-/Filter /FlateDecode
->>
-stream
-xڥ=
-@g fI"SZYZZ(ښͣ[.(wS|7q4HRYs_8 LWCNv?$#(%p:lHj&5pGٌs V,S*7;(&A]t, -GT@8=F>
-$_ȥF<5ޯ
-endstream
-endobj
-570 0 obj <<
-/Length 182
-/Filter /FlateDecode
->>
-stream
-xڍ1
-@EIk9
-n!he!Vjihh%GL2Φօ}g?ofǜlS>'t#k5?;2{Zd܆L]rBC\"iJzD=[5/jLAOQ~ߏ@B_Zh4J5Ϋ^RMuZ9uEJ
-endstream
-endobj
-571 0 obj <<
-/Length 126
-/Filter /FlateDecode
->>
-stream
-x313T0P0b#c3CB.c HrW0
-endstream
-endobj
-572 0 obj <<
-/Length 237
-/Filter /FlateDecode
->>
-stream
-xEαj@ dz)CB=ҩCɔdnvj:t&=$%p!:d-"zX!ZnhyxDQd}LKႲ)ֳ[{vȭ+OPy5 @U-G[;z[*
-endstream
-endobj
-573 0 obj <<
-/Length 219
-/Filter /FlateDecode
->>
-stream
-xڥ=126V?VbģGXZ# ΛZoQMF7){Zx\cFiNnB!B7:xHn3Gף ap*ڧ ߵ'(Po`.|͒,IֆvnmMV{巶0vю]h*Mi5uɧ 8E
-endstream
-endobj
-574 0 obj <<
-/Length 202
-/Filter /FlateDecode
->>
-stream
-xE;
-PEoH!LUBBBN!۲t @!L@,a̻{ې lfOÄܒZrɌOp>ܘW!kJ/LnRQ;H(+
-O
-endstream
-endobj
-575 0 obj <<
-/Length 138
-/Filter /FlateDecode
->>
-stream
-x313T0P0T54R01Q06SH1*21(X@s<L=\
-%E\N
-\.
-\.
-I8Z 8L0
-endstream
-endobj
-576 0 obj <<
-/Length 149
-/Filter /FlateDecode
->>
-stream
-x313T0P0bcc3CB.
-%E\N
-@QhX.Og $D &`RLIf0
-endstream
-endobj
-577 0 obj <<
-/Length 123
-/Filter /FlateDecode
->>
-stream
-x313T0
-%E\N
-\.
-\.
-? q 5 @H$DՓ+
-endstream
-endobj
-578 0 obj <<
-/Length 174
-/Filter /FlateDecode
->>
-stream
-x313T0P0bc3CB.#
-endstream
-endobj
-579 0 obj <<
-/Length 161
-/Filter /FlateDecode
->>
-stream
-xڕ=
-1 LB`
-A+ --Gۣ
-endstream
-endobj
-580 0 obj <<
-/Length 186
-/Filter /FlateDecode
->>
-stream
-xm1
-1EgB#U
-+BBRPQx4#XZ
-`  /u?JzHz@5\,6{,%ijSTvFe@UӪ|
-endstream
-endobj
-581 0 obj <<
-/Length 178
-/Filter /FlateDecode
->>
-stream
-x313T0
-%E\N
-\.
-\.
- nH? )D6I{Y
-endstream
-endobj
-582 0 obj <<
-/Length 183
-/Filter /FlateDecode
->>
-stream
-xUα
-0['0SV08ͣQ$]A}]r2[)WUb9s7,VNWh=V̚S0n.
-endstream
-endobj
-583 0 obj <<
-/Length 117
-/Filter /FlateDecode
->>
-stream
-x313T0PT02W06U05RH1*22
-(
-
-endstream
-endobj
-584 0 obj <<
-/Length 183
-/Filter /FlateDecode
->>
-stream
-x313T0P0a csCB.c
-? PX , V 6Y 45`@Ԁv)\\\
-endstream
-endobj
-585 0 obj <<
-/Length 182
-/Filter /FlateDecode
->>
-stream
-x313T0P0bCcsCB.c
-~? 00``?A3005u ,Xl
-\t MR\=
-endstream
-endobj
-586 0 obj <<
-/Length 113
-/Filter /FlateDecode
->>
-stream
-x313T0P04F
-F
-)\\@ IrW04
-s{*r;8+
-endstream
-endobj
-587 0 obj <<
-/Length 168
-/Filter /FlateDecode
->>
-stream
-x313T0P0bCSCCB.cs
-endstream
-endobj
-588 0 obj <<
-/Length 251
-/Filter /FlateDecode
->>
-stream
-xڅJA'\!Ls ޱƅ+,J--;y4B[O"hWf,4s n,͡c%:IRc{l3yz|c;9?Tj
-fDTP&E{h+9G2D~>/BGE$E7~ }KvmV:$,H@%j}W}azH O#bA=b2~|0
-endstream
-endobj
-589 0 obj <<
-/Length 247
-/Filter /FlateDecode
->>
-stream
-x5ϱN0 `G"y#/
-!0Z6 sI1{
-endstream
-endobj
-590 0 obj <<
-/Length 148
-/Filter /FlateDecode
->>
-stream
-x313T0P04U02R06P05TH1*24(YBs< M=\
-%E\N
-\.
-\.
- ? 0`77g.`r
-
-endstream
-endobj
-591 0 obj <<
-/Length 192
-/Filter /FlateDecode
->>
-stream
-xڅ1PDPl Ċ1D+ cmq@IA;WL0 v xlagnEt4'g'Ty!n{<c Z-VS!)Q
-):)j` ?`Hju^Lv{F
-endstream
-endobj
-592 0 obj <<
-/Length 187
-/Filter /FlateDecode
->>
-stream
-xڅO;
-Pl {I*L!he!Vj)h-G,-$q̃T;LNuihuɗV'/2O4Ĭxq7 $$M
-|
-,G\W{F9^ـ"J[|rY"ֱ4nT?pGrjݬc_e*[M*
-endstream
-endobj
-593 0 obj <<
-/Length 171
-/Filter /FlateDecode
->>
-stream
-x313T0P0S0W0P01VH1*26(%s< =\
-%E\N
-@QhX.OXǏ?1 ɁԀԂ
-endstream
-endobj
-594 0 obj <<
-/Length 116
-/Filter /FlateDecode
->>
-stream
-x313T0P0V0S01T01QH1*26E-ɹ\N\
-\@Q.}O_T.}
-endstream
-endobj
-595 0 obj <<
-/Length 136
-/Filter /FlateDecode
->>
-stream
-x313T0P04U54R0 R
- M
-F0\.'O.pC.}BIQi*S!BA,???PP'W 
-endstream
-endobj
-596 0 obj <<
-/Length 103
-/Filter /FlateDecode
->>
-stream
-x313T0P0W04S06W02TH1*2 (B$s<,=L=}JJS ]  b<]0 szrr
-endstream
-endobj
-597 0 obj <<
-/Length 99
-/Filter /FlateDecode
->>
-stream
-x313T0P04F
-
-)\\@
-p{IO_T.}
-endstream
-endobj
-598 0 obj <<
-/Length 157
-/Filter /FlateDecode
->>
-stream
-x313T0P0U5W0T0PH1*26
-(Bds<=\
-%E\N
-\.
-\.
- @
-endstream
-endobj
-599 0 obj <<
-/Length 107
-/Filter /FlateDecode
->>
-stream
-x313T0P04F
-f
-)\\@ IrW04
-s{*r;8+
-endstream
-endobj
-600 0 obj <<
-/Length 155
-/Filter /FlateDecode
->>
-stream
-x313T0P04U54R06P06SH1*24
-(Xs< M=\
-%E\N
-\.
-\.
- A
-endstream
-endobj
-601 0 obj <<
-/Length 167
-/Filter /FlateDecode
->>
-stream
-x313T0P0U0Q0T01SH1*26(%s<=\
-%E\N
-\.
-\.
- L@
-endstream
-endobj
-602 0 obj <<
-/Length 162
-/Filter /FlateDecode
->>
-stream
-x]
-0->KNZ N⤎>cbMN8>] y GGbO%T2[0YFK&pOdLSA<MB +bJʰ_Z>ZZFHW 2"L}Tߩoﻭ "Іֺ?
-endstream
-endobj
-603 0 obj <<
-/Length 110
-/Filter /FlateDecode
->>
-stream
-x313T0P0V04U01T06UH1*26
-(Aes<͹=\
-%E\N
-\.
-\.
-
-
-endstream
-endobj
-604 0 obj <<
-/Length 239
-/Filter /FlateDecode
->>
-stream
-xڍ1N0Dg"o|$Q6ZZHPQ *!p!eU8
-endstream
-endobj
-605 0 obj <<
-/Length 114
-/Filter /FlateDecode
->>
-stream
-x313T0P04W5W01T0PH1*22(Bs<=\
-%E\N
-\.
-\.
-a`?r
-
-endstream
-endobj
-606 0 obj <<
-/Length 152
-/Filter /FlateDecode
->>
-stream
-x313T0P0U5W0T0PH1*26
-(Bds<=\
-%E\N
-\.
-\.
- @N5 D؁{! ?8
-
-endstream
-endobj
-607 0 obj <<
-/Length 116
-/Filter /FlateDecode
->>
-stream
-x313T0P0V5W02W0PH1*22
-(Bds<=\
-%E\N
-\.
-\.
-c``pzrr
-endstream
-endobj
-608 0 obj <<
-/Length 137
-/Filter /FlateDecode
->>
-stream
-x%;
-1F;]]hL!he!Vjih7eIY@5`NKnn;[.>Yʬz8nQuĥ>W#D*L"QCĶ5e" ьwO)B
-endstream
-endobj
-609 0 obj <<
-/Length 104
-/Filter /FlateDecode
->>
-stream
-x313T0P0UеP0T5RH1*26
-(A$s<≠=}JJS ]  b<]
-endstream
-endobj
-610 0 obj <<
-/Length 175
-/Filter /FlateDecode
->>
-stream
-xڵ 0DQXK
-D h%##6HWYM0p sf؜Tz2{XKf1)Kd*rdGR/RA-%a|ݠЂV$QoeUG+O;a
-endstream
-endobj
-611 0 obj <<
-/Length 96
-/Filter /FlateDecode
->>
-stream
-x313T0P0T5W02S0PH1*2
-(Bes≮=\
-%E\N
-\.
-\.
-(\\\
-endstream
-endobj
-612 0 obj <<
-/Length 171
-/Filter /FlateDecode
->>
-stream
-xڵ 0EQ  miCp
- (0 i~ϧ{~37 <&
-~9JϓJu }s7&xܟnKœ(4^Jq^.JNQr?)F#PQ1H)3R;;J~.؆xC?ZOYb
-endstream
-endobj
-613 0 obj <<
-/Length 263
-/Filter /FlateDecode
->>
-stream
-xuνJ@YRoyMry),J--$ba#*Āb8Gi+9/w]iF ftQ5 sʟjN\`v 1f!]b:ڣ5a&Hz
-endstream
-endobj
-614 0 obj <<
-/Length 191
-/Filter /FlateDecode
->>
-stream
-xڍ1
-@EGR2'pa!F0Xr!E8 I 33;MR(oSJb:xEk%GU/hvd-Lkg4fAs \102w{(` UO\+rBZt%p#'*=J@ ҿϫFa;Whn I
-endstream
-endobj
-615 0 obj <<
-/Length 203
-/Filter /FlateDecode
->>
-stream
-xڝ=
-@_L#8MLRL!he!Vjih'({!q-6߲`}t!'<8 91 ũ piNfqJf)c2ot=̜w{@
-endstream
-endobj
-616 0 obj <<
-/Length 141
-/Filter /FlateDecode
->>
-stream
-x313T0P
-endstream
-endobj
-617 0 obj <<
-/Length 222
-/Filter /FlateDecode
->>
-stream
-xe1N1E*i| .-V
-Ab $(U
-endstream
-endobj
-618 0 obj <<
-/Length 226
-/Filter /FlateDecode
->>
-stream
-xEнN0 J^ @ZHHCL @>ZlDZTe}9W|Qps}ů}PYkP|N#5[ Sj~??ScNzDDFM&4=:4WL
-endstream
-endobj
-619 0 obj <<
-/Length 181
-/Filter /FlateDecode
->>
-stream
-xڕ=@!$p. b&ZY+h pJLh$%^5Y (xTHN)74 U[QcL uM
-endstream
-endobj
-620 0 obj <<
-/Length 207
-/Filter /FlateDecode
->>
-stream
-xڥ=
-@4{t&)!BBB,xxqFE惝}ov)ZRGk;Sʱڬ)Nюe6aܠOi(Zb>$\Cǹ.5Tº)7
-P \)'ߘ'-,e$9ґ i `AY ֚
-
-endstream
-endobj
-621 0 obj <<
-/Length 241
-/Filter /FlateDecode
->>
-stream
-xm1N0E"4 @TE"Th+)S
-endstream
-endobj
-622 0 obj <<
-/Length 183
-/Filter /FlateDecode
->>
-stream
-xڕͽ
-0
-'`010%p1 iBt*Rt 2;nB)4_T+~Ѭ.:\M
-endstream
-endobj
-623 0 obj <<
-/Length 213
-/Filter /FlateDecode
->>
-stream
-x}O
-@`qM>!zI
-0XɧSW؈p w3s3Y:'sÄ1P{~s8Ӵ$4'tcot=w {* (D`D:y#jAԠBQS
-ժ?|R3{6nR}Zn
-endstream
-endobj
-234 0 obj <<
-/Type /Font
-/Subtype /Type3
-/Name /F39
-/FontMatrix [0.01204 0 0 0.01204 0 0]
-/FontBBox [ -1 -19 45 58 ]
-/Resources << /ProcSet [ /PDF /ImageB ] >>
-/FirstChar 33
-/LastChar 255
-/Widths 624 0 R
-/Encoding 625 0 R
-/CharProcs 626 0 R
->> endobj
-624 0 obj
-[43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 0 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 0 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 0 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 43.59 43.59 0 0 43.59 43.59 0 0 0 0 43.59 0 43.59 43.59 43.59 0 43.59 43.59 0 43.59 43.59 0 0 0 0 43.59 0 0 0 0 0 0 0 0 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 43.59 0 0 43.59 43.59 43.59 43.59 43.59 ]
-endobj
-625 0 obj <<
-/Type /Encoding
-/Differences [33/a33/a34/a35/a36/a37/a38/a39/a40/a41/a42/a43/a44/a45/a46/a47/a48/a49/a50/a51/a52/a53/a54/a55/a56 57/.notdef 58/a58/a59/a60/a61/a62/a63/a64/a65/a66/a67/a68/a69/a70/a71/a72/a73/a74/a75/a76/a77/a78/a79/a80 81/.notdef 82/a82/a83/a84/a85/a86/a87/a88/a89/a90/a91/a92/a93/a94/a95 96/.notdef 97/a97/a98/a99/a100/a101/a102/a103/a104/a105/a106/a107/a108/a109/a110/a111/a112/a113/a114/a115/a116/a117/a118/a119/a120/a121/a122/a123/a124/a125 126/.notdef 190/a190/a191 192/.notdef 194/a194/a195 196/.notdef 200/a200 201/.notdef 202/a202/a203/a204 205/.notdef 206/a206/a207 208/.notdef 209/a209/a210 211/.notdef 215/a215 216/.notdef 224/a224/a225/a226/a227/a228/a229/a230/a231/a232/a233/a234/a235/a236/a237/a238/a239/a240/a241/a242/a243/a244/a245/a246/a247/a248 249/.notdef 251/a251/a252/a253/a254/a255]
->> endobj
-626 0 obj <<
-/a33 586 0 R
-/a34 583 0 R
-/a35 587 0 R
-/a36 588 0 R
-/a37 589 0 R
-/a38 613 0 R
-/a39 590 0 R
-/a40 591 0 R
-/a41 592 0 R
-/a42 593 0 R
-/a43 594 0 R
-/a44 595 0 R
-/a45 596 0 R
-/a46 597 0 R
-/a47 598 0 R
-/a48 615 0 R
-/a49 616 0 R
-/a50 617 0 R
-/a51 618 0 R
-/a52 619 0 R
-/a53 620 0 R
-/a54 621 0 R
-/a55 622 0 R
-/a56 623 0 R
-/a58 599 0 R
-/a59 600 0 R
-/a60 601 0 R
-/a61 603 0 R
-/a62 602 0 R
-/a63 614 0 R
-/a64 604 0 R
-/a65 491 0 R
-/a66 492 0 R
-/a67 493 0 R
-/a68 494 0 R
-/a69 495 0 R
-/a70 496 0 R
-/a71 497 0 R
-/a72 498 0 R
-/a73 499 0 R
-/a74 500 0 R
-/a75 501 0 R
-/a76 502 0 R
-/a77 503 0 R
-/a78 504 0 R
-/a79 505 0 R
-/a80 506 0 R
-/a82 507 0 R
-/a83 508 0 R
-/a84 509 0 R
-/a85 510 0 R
-/a86 511 0 R
-/a87 512 0 R
-/a88 513 0 R
-/a89 514 0 R
-/a90 515 0 R
-/a91 605 0 R
-/a92 606 0 R
-/a93 607 0 R
-/a94 608 0 R
-/a95 609 0 R
-/a97 516 0 R
-/a98 517 0 R
-/a99 518 0 R
-/a100 519 0 R
-/a101 520 0 R
-/a102 521 0 R
-/a103 522 0 R
-/a104 523 0 R
-/a105 524 0 R
-/a106 525 0 R
-/a107 526 0 R
-/a108 527 0 R
-/a109 528 0 R
-/a110 529 0 R
-/a111 530 0 R
-/a112 531 0 R
-/a113 532 0 R
-/a114 533 0 R
-/a115 534 0 R
-/a116 535 0 R
-/a117 536 0 R
-/a118 537 0 R
-/a119 538 0 R
-/a120 539 0 R
-/a121 540 0 R
-/a122 541 0 R
-/a123 610 0 R
-/a124 611 0 R
-/a125 612 0 R
-/a190 584 0 R
-/a191 585 0 R
-/a194 542 0 R
-/a195 543 0 R
-/a200 544 0 R
-/a202 545 0 R
-/a203 546 0 R
-/a204 547 0 R
-/a206 548 0 R
-/a207 549 0 R
-/a209 550 0 R
-/a210 551 0 R
-/a215 552 0 R
-/a224 553 0 R
-/a225 554 0 R
-/a226 555 0 R
-/a227 556 0 R
-/a228 557 0 R
-/a229 558 0 R
-/a230 559 0 R
-/a231 560 0 R
-/a232 561 0 R
-/a233 562 0 R
-/a234 563 0 R
-/a235 564 0 R
-/a236 565 0 R
-/a237 566 0 R
-/a238 567 0 R
-/a239 568 0 R
-/a240 569 0 R
-/a241 570 0 R
-/a242 571 0 R
-/a243 572 0 R
-/a244 573 0 R
-/a245 574 0 R
-/a246 575 0 R
-/a247 576 0 R
-/a248 577 0 R
-/a251 578 0 R
-/a252 579 0 R
-/a253 580 0 R
-/a254 581 0 R
-/a255 582 0 R
->> endobj
-627 0 obj
-[777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8]
-endobj
-628 0 obj <<
-/Length 277
-/Filter /FlateDecode
->>
-stream
-xڝұN02XP?i"DR)`b@L
-(y#GH ı~y_^F宒%p[ O<X<mŽ}E XoeQؙX"{i
-endstream
-endobj
-629 0 obj <<
-/Length 252
-/Filter /FlateDecode
->>
-stream
-xӱn0`G H'1 S$Jfb ã(y\/:[2BxH>;g+[159#,]eg|@ϗ_h@/pÕ[Fq+:QŢyDUT*jyrWBT)W xS!4
-T:!UHI%jF'/~> TFOD D>9&>u>( "sJw+
-endstream
-endobj
-630 0 obj <<
-/Length 272
-/Filter /FlateDecode
->>
-stream
-xmӱN0aG"ݒG=nZR)`b@L
-endstream
-endobj
-631 0 obj <<
-/Length 329
-/Filter /FlateDecode
->>
-stream
-xՓN@!$ (pwH3D+ cGQxJ
-8;Kstˢ8;anr_JxjNv_77?`ݐ7
-
-KXb#H-#[/ZO,RI:Y}y-*% "ckqtvQ[h`t#Ix3'F5cqf#3vHF^ao8 1ꪏ,z
-15u` vBuԮh V6CIUZ C8ғ'H/SnXYr
-endstream
-endobj
-632 0 obj <<
-/Length 321
-/Filter /FlateDecode
->>
-stream
-xڅJ@' layx\<ZYZZ(ںy<J!e
-ɺ; zBLfv^Tg ιӒK^.0*}0e7nLUi[6YϏW﮹0ن ΟLa9
-vn$y@ 6c0%9_>֞}ْO_3Wdd@: tl1]:PN-i!i*PJAJe-zapH D92c r
-\VQo8z܉^vfw?ēޟx+jA,ܛ_8@5
-endstream
-endobj
-633 0 obj <<
-/Length 440
-/Filter /FlateDecode
->>
-stream
-x}?n0ppD38  کC)!A;S[)AW?RCGdwj7~ܙz+4~n>=
-˦jLxnkS]/|5u^LxQÈ<^4 ER(O knMtORF7dbUjޢ 2ף~0y4"=qaΡt؛z"7b.1z˱@.1Hz5cVz+ݣh pF!AZLq!HS/#K>vs;Wčc1zi|4$1KO.݉A.ឞ鯇sً/4w7J/YbŎGw[Aa`8'f.[c
-endstream
-endobj
-634 0 obj <<
-/Length 257
-/Filter /FlateDecode
->>
-stream
-xڝJ@ba<Btν<VrZZ(Z'Q%?mllcgvfU<ݬ39%n$gK+뜹]V%+y}y{䰻>^j셨#-T:bEޠ3ޣ5tT'+ܘ94Dat4
-,
-endstream
-endobj
-635 0 obj <<
-/Length 232
-/Filter /FlateDecode
->>
-stream
-xݒ;@ R # $EH<$R[mJ
-r"g"jK$|#f{xSAㄲ6 1),D;h~(,ōE3QfN +,d@~9VFW5[g+`ou h=<+i؀D
-endstream
-endobj
-636 0 obj <<
-/Length 256
-/Filter /FlateDecode
->>
-stream
-xڍбJ@9R,LGyDU<Vbh<Z%2őM@+\~dwL
-9˥ל߹,Iyypxpe͝|~|q_Ka'Od(с0Z1oT'r`$`"3 U|^{NQKv8=ԊxVڕv'Lvc _ӞD#:G2o~6cjYE~L,PjhB#Bj ] \j!Viu
-endstream
-endobj
-637 0 obj <<
-/Length 171
-/Filter /FlateDecode
->>
-stream
-x31ԳT0P0b  3CB.
-endstream
-endobj
-638 0 obj <<
-/Length 303
-/Filter /FlateDecode
->>
-stream
-xڭN@PL#ܼr\<)L0VjiG!0ع |3?-wۜtF'-=Fv״Cϸ1r٥cV_fs1;НHc} 3;RfN]d~N 졙@ur䛪zh=κz٧߇BиN)OWU%ÂMs2ʆ']! 6g!]j\:P&<h/r8O6s7zc7yf*=Ԟ^m# D5)Q
-endstream
-endobj
-639 0 obj <<
-/Length 114
-/Filter /FlateDecode
->>
-stream
-x3635T0P
-endstream
-endobj
-640 0 obj <<
-/Length 99
-/Filter /FlateDecode
->>
-stream
-x3635T0P
-endstream
-endobj
-641 0 obj <<
-/Length 178
-/Filter /FlateDecode
->>
-stream
-x?
-P C!K`Nk T NzGPgDǗ FL"kMIS9|4 % vٔkg6f!1BD. !
-endstream
-endobj
-642 0 obj <<
-/Length 234
-/Filter /FlateDecode
->>
-stream
-xڽ
-0O[|4-MAAAѹ}>JAz%Ċ&zbG4ԏ&X:xF$ ͆lf!h%]/#jJ1m:%'\8|w65ESWG4]
-endstream
-endobj
-643 0 obj <<
-/Length 246
-/Filter /FlateDecode
->>
-stream
-x͒n1 ƍh@gDA کbj;v
-آ:+"jh  4;1<|_c߇Z|i}f|VQ9tZCQ:Uxw3
-endstream
-endobj
-644 0 obj <<
-/Length 163
-/Filter /FlateDecode
->>
-stream
-x1
-@ a9lj!Fp A+ RK Eh%G2Śu! ,QNsJi)4iM Sr/XYT;KT+^Q5o3j UMښ
-endstream
-endobj
-645 0 obj <<
-/Length 252
-/Filter /FlateDecode
->>
-stream
-xMбN@ `W"yKPҲE*E"L 02`C\%pc#A3|IˋV*i伖v#/5sZюۥƻã4-[+sZj{y:pZ鑈֪#QT`Pc )lnS43
-
-endstream
-endobj
-646 0 obj <<
-/Length 170
-/Filter /FlateDecode
->>
-stream
-xС@ &=}p
-endstream
-endobj
-647 0 obj <<
-/Length 324
-/Filter /FlateDecode
->>
-stream
-xuұN0
-endstream
-endobj
-648 0 obj <<
-/Length 281
-/Filter /FlateDecode
->>
-stream
-xuN@XL#OH3D+ cuZZhG7 \'agMB;|</VpU+\W +oڰA}s>?_o\~KW<qsLDZbj#j)3(:R*G^b$VkRt=rB*R@!
-Ms(h4M x̋uyԁۆ>os9(oe(}&PkމO<gG[/iΒg ]{$8
-endstream
-endobj
-649 0 obj <<
-/Length 350
-/Filter /FlateDecode
->>
-stream
-xڍJ0,KymWSa]=yOу(y{(gIvAL1iiZ^TMmiz2M;VUo~U}1U/
-endstream
-endobj
-650 0 obj <<
-/Length 273
-/Filter /FlateDecode
->>
-stream
-xmұN0aYxr\\ &:9'ut\WMP9i!24_[p\4؉6KۈRݼñQPݚc;ZPēySb)bNYPQQ$#RA藔Cʂr,^r䥂pdJ4{rKM\8L
-endstream
-endobj
-651 0 obj <<
-/Length 205
-/Filter /FlateDecode
->>
-stream
-xڳ3V0P0b  #CB. S
-endstream
-endobj
-652 0 obj <<
-/Length 122
-/Filter /FlateDecode
->>
-stream
-xڳ43P0P04
-F
-)\\@ IrW07
-s{*r;8+r(DUry(a
-'W 
-endstream
-endobj
-653 0 obj <<
-/Length 329
-/Filter /FlateDecode
->>
-stream
-xՓN@!$ (pwH3D+ cGQxJ
-8;Kstˢ8;anr_JxjNv_77?`ݐ7
-
-KXb#H-#[/ZO,RI:Y}y-*% "ckqtvQ[h`t#Ix3'F5cqf#3vHF^ao8 1ꪏ,z
-15u` vBuԮh V6CIUZ C8ғ'H/SnXYr
-endstream
-endobj
-654 0 obj <<
-/Length 121
-/Filter /FlateDecode
->>
-stream
-xڳ43P0P04
-F
-)\\@ IrW07
-s{*r;8+r(DUry(z?Y@~5jz8%Փ+
-endstream
-endobj
-655 0 obj <<
-/Length 123
-/Filter /FlateDecode
->>
-stream
-xڳ4ҳT0P0b s #CB. C
-@-\.
-alO#f?@k䁶@=e2G\=
-endstream
-endobj
-656 0 obj <<
-/Length 359
-/Filter /FlateDecode
->>
-stream
-xmMN@!,Hf:'0I,Lt¸.]ht G(sa0O&6i 7ʕn zKZ[%n-\ܵE{>lq-rm.L>iaffa #{lpU(saPDRrR.DQFb<
-aQΓ3Gބ7p06
-{#yP"01NI75S. HRƬCu"nM^C_Lrl!c59`4\3=bYhF*Fkߗš0k1y"}dpe%mx2M
-endstream
-endobj
-657 0 obj <<
-/Length 257
-/Filter /FlateDecode
->>
-stream
-xڝJ@ba<Btν<VrZZ(Z'Q%?mllcgvfU<ݬ39%n$gK+뜹]V%+y}y{䰻>^j셨#-T:bEޠ3ޣ5tT'+ܘ94Dat4
-,
-endstream
-endobj
-658 0 obj <<
-/Length 315
-/Filter /FlateDecode
->>
-stream
-xڽ=NP
-U%[W\A]^=秗{W/Nr)эk7OBG1A57jbfnw$ IV(ńc^L3(i|縫~@|OeRvQd(|c^'OT#KpR49vfK/1%?`k_ou{g1~3GF3y^3/FZqL=Ű+Ƹ]o7Gt
-endstream
-endobj
-659 0 obj <<
-/Length 208
-/Filter /FlateDecode
->>
-stream
-x}б0
-
-d)DT P.N%S3@B_OS5VC]6u,3* NGc:eebD7)|`5 Xg/a:
-endstream
-endobj
-660 0 obj <<
-/Length 114
-/Filter /FlateDecode
->>
-stream
-x3530W0P
-endstream
-endobj
-661 0 obj <<
-/Length 179
-/Filter /FlateDecode
->>
-stream
-x3733W0P0Q5T07Q05QH1*2(Cs<,=\
-%E\N
-\.
-\.
- C=|FB$1Pр`3A ? P( (A)@/°
-endstream
-endobj
-662 0 obj <<
-/Length 256
-/Filter /FlateDecode
->>
-stream
-xڍбJ@9R,LGyDU<Vbh<Z%2őM@+\~dwL
-9˥ל߹,Iyypxpe͝|~|q_Ka'Od(с0Z1oT'r`$`"3 U|^{NQKv8=ԊxVڕv'Lvc _ӞD#:G2o~6cjYE~L,PjhB#Bj ] \j!Viu
-endstream
-endobj
-663 0 obj <<
-/Length 360
-/Filter /FlateDecode
->>
-stream
-xe1N@Eri{ *R.@T@Iږb c?3:wθ-]]ܖ}pWZLw]Q秗{W/N|銍V̍7>G+ "z+ Q7sDaNv:lM=c\x3Ϡ14,E0A )#ІP" E "0u(HBI$:u;zF9Ymb>_ݠcΘ4ƻ$J:$4KZC/4mou[qӝ: /];=rv/=FV6Gw6d:\M+w0_oߞn]/\>
-endstream
-endobj
-664 0 obj <<
-/Length 258
-/Filter /FlateDecode
->>
-stream
-xuMJAKF]ОN+*tzh}9,g|tWeVT ]WT/-' .VR-g﹌}ﯟw[
-7zvCP
-endstream
-endobj
-665 0 obj <<
-/Length 217
-/Filter /FlateDecode
->>
-stream
-xUϱj@   Zlk M 
-ɔ!dj;fhi˛ՏGct@n?h<
-_<4s ȇ,{4oA7o z}
-5VGhVh{nP*<P$ Vp c2!'{G1!ꅎhL,(LR0\PcBgA11a.eX_߆u;L1
-endstream
-endobj
-666 0 obj <<
-/Length 267
-/Filter /FlateDecode
->>
-stream
-xڝұJ0S:Ghh)pIs>JcŐxI $INJىԖ6[ ;3Flo0`{I؎W ݫ^u8U1@= Om&^n+p
-endstream
-endobj
-667 0 obj <<
-/Length 260
-/Filter /FlateDecode
->>
-stream
-xU1N0EJi9IAҲH@Q%jrH\ 2`-[OOvZVh{H`_qˋgRjHyS)+}{}rs}[~)†ama6
-endstream
-endobj
-668 0 obj <<
-/Length 171
-/Filter /FlateDecode
->>
-stream
-x3734W0P0b3SSCB.3
-%E\N
-\.
-\.
- <C [5;]O,
-endstream
-endobj
-669 0 obj <<
-/Length 274
-/Filter /FlateDecode
->>
-stream
-xu1N0PG)"M#'eH
-()@P;+-
-;R"jR6*2I~"ӧ[~)gn#AdHY&NJzL?^e2WP{e|;#m|Q LPIetP$NࠁqfU
-endstream
-endobj
-670 0 obj <<
-/Length 120
-/Filter /FlateDecode
->>
-stream
-x373P0Pb3#SCB.S#
-endstream
-endobj
-671 0 obj <<
-/Length 234
-/Filter /FlateDecode
->>
-stream
-xڽ
-0O[|4-MAAAѹ}>JAz%Ċ&zbG4ԏ&X:xF$ ͆lf!h%]/#jJ1m:%'\8|w65ESWG4]
-endstream
-endobj
-672 0 obj <<
-/Length 118
-/Filter /FlateDecode
->>
-stream
-x373P0Pb3#SCB.S#
-endstream
-endobj
-673 0 obj <<
-/Length 246
-/Filter /FlateDecode
->>
-stream
-x͒n1 ƍh@gDA کbj;v
-آ:+"jh  4;1<|_c߇Z|i}f|VQ9tZCQ:Uxw3
-endstream
-endobj
-674 0 obj <<
-/Length 221
-/Filter /FlateDecode
->>
-stream
-xڽ+@gSdLй
-r#[<"换59\d.rBNi#5[S nao,xkn`" $\*@)J@FU)HC /n?VVLw_smݮNKڻz9X?தj{y\}
-endstream
-endobj
-675 0 obj <<
-/Length 122
-/Filter /FlateDecode
->>
-stream
-x3336W0P0bSKSCB.SS
- I;bՓ+
-endstream
-endobj
-676 0 obj <<
-/Length 292
-/Filter /FlateDecode
->>
-stream
-xeѱN@%$;/yvg"VJ--4Z=#`.{gDk<(6Xj>5xy5?zyM#V5|Es_oPlqVh٢RD&71vfr䱂cv̨АSIhȨczR7ÏUi]'8$Iz,@;(|UȁN/q{Cd6#*l* %_b$ȂeGw?2!-FYϔO} 'cPVBi.'
-endstream
-endobj
-677 0 obj <<
-/Length 310
-/Filter /FlateDecode
->>
-stream
-x;N0RDr#d.
-D Bόzh(vЧ ]4Ut|ZR]ӢB=Zj*bRF7T*7*_mAN5+0DO `kxˀ
-endstream
-endobj
-678 0 obj <<
-/Length 281
-/Filter /FlateDecode
->>
-stream
-xuN@XL#OH3D+ cuZZhG7 \'agMB;|</VpU+\W +oڰA}s>?_o\~KW<qsLDZbj#j)3(:R*G^b$VkRt=rB*R@!
-Ms(h4M x̋uyԁۆ>os9(oe(}&PkމO<gG[/iΒg ]{$8
-endstream
-endobj
-679 0 obj <<
-/Length 130
-/Filter /FlateDecode
->>
-stream
-x3736Q0PT5T07V05QH1*23D Rɹ\N\
-f\@q.}O_T.}
-endstream
-endobj
-680 0 obj <<
-/Length 144
-/Filter /FlateDecode
->>
-stream
-x37ֳ0Q0Pb3SSCB.SS
-endstream
-endobj
-681 0 obj <<
-/Length 147
-/Filter /FlateDecode
->>
-stream
-x3435V0PT5T040Q05QH1*4
-(Cs<,M=\
-%E\N
-\.
-\.
-300`bealC mfaʖ
-endstream
-endobj
-682 0 obj <<
-/Length 197
-/Filter /FlateDecode
->>
-stream
-xڳ43P0Pb SCB.s
-endstream
-endobj
-683 0 obj <<
-/Length 179
-/Filter /FlateDecode
->>
-stream
-x33ճ0W0Pb3CSCB.SC
-@-\.
-@?(( 8
-endstream
-endobj
-684 0 obj <<
-/Length 239
-/Filter /FlateDecode
->>
-stream
-xڍJAD+xOHpBL=!(-||J>a{ikҮ"2𘚭~>\O$h1H!ȋbOdTIvE슲dյ?J6Tc3j8Jt̬ # X&DQcAY H+^D\$Α8ݾz-_t[[t YϞh><-äMPOd>yej7ֻn6mdRT>Ė
-endstream
-endobj
-685 0 obj <<
-/Length 238
-/Filter /FlateDecode
->>
-stream
-xڅбn0`G"#
-]f%K,ЮИIǘ 8%MTBoh-yU;q]mhĄ[!ט7W3 fW҉b."DH ̦W@N\Wǜ]ƾr=xbTNgxma
-endstream
-endobj
-686 0 obj <<
-/Length 102
-/Filter /FlateDecode
->>
-stream
-x31ճP0P0T02Q0T06TH1*26
-(C$s<͹=BIQi*S!BA,B?
-endstream
-endobj
-687 0 obj <<
-/Length 89
-/Filter /FlateDecode
->>
-stream
-x334W0P04F
-&
-)\\@
-p{IO_T.}
-endstream
-endobj
-688 0 obj <<
-/Length 157
-/Filter /FlateDecode
->>
-stream
-x337T0P04
-&
-)\\&
-  ,ɥ`bɥU()*Mw
-pV0wQ`
-endstream
-endobj
-689 0 obj <<
-/Length 298
-/Filter /FlateDecode
->>
-stream
-xڍ1N0Eg"49B|Adw;K" *
-D.SX<G
-DJ^$žW[Rkg4'^8bN}~|awV=v'jq<)"Q~Fdt0ēt * t7dSib 6aڙWnO0׈]FPJ
-endstream
-endobj
-690 0 obj <<
-/Length 318
-/Filter /FlateDecode
->>
-stream
-xڥJ0SȥyV[a]=yAP}>JBHa#2
-1'XWtګm[Wƻ]^Ǔ+WgPrε;0b0iq;јdD^_ KvĐSCql1#rSNV8٠+E X_7RE30:cXmVS] A ҋtZlAFo˞$%ق >'/*S3|)Ê呕RXTWSԑbFz
-Nk{Yg"Hcel|p筻v?
-
-endstream
-endobj
-691 0 obj <<
-/Length 233
-/Filter /FlateDecode
->>
-stream
-xѱn0`#[x b )M2TjUcVI^%oRq5HeY'۲b]`K?nO(sߎ#lkX`) ~>n
-endstream
-endobj
-692 0 obj <<
-/Length 258
-/Filter /FlateDecode
->>
-stream
-xŒJ@ S
-r#4/-VXWAOēzÊG#̡4&U*|L2I=(iC5VTV\Fjϭmݵ7n{{I%=#;JXçs;gw A<Ba5aLBY5SH$d<F/)"Y#t ĶcD7;x‹ztҜ ;t<wž16D?!zT#F c3-;2&
-endstream
-endobj
-693 0 obj <<
-/Length 303
-/Filter /FlateDecode
->>
-stream
-xڅ;N@E.,MG\
-|&ؓWXP*@}P7Po=BA\I=:!b*#)G7*#[Q
-i
-isf 7#ⳒC<Ȕȼ%ؖ2uq= R]( &'}$KxmjoS ["||q]Rzk cVI6gp| ;
-endstream
-endobj
-694 0 obj <<
-/Length 220
-/Filter /FlateDecode
->>
-stream
-xڭѱ
-PA8KyZxs hƆf{4Gpto^5!ADg.:q"? x}?;31-zز>v9"A{#LJ8lH˫!2)RE ŃhB
-AYfK#m"PDRRh NAN
-N]Ju*ۡZ'Զ_b}?6atV
-endstream
-endobj
-695 0 obj <<
-/Length 283
-/Filter /FlateDecode
->>
-stream
-xڭN@ 2%P
-endstream
-endobj
-696 0 obj <<
-/Length 322
-/Filter /FlateDecode
->>
-stream
-xڍ=N0mmM
-|!e()g<?old)gؘ8\Skl{Sƚ
-Ǧۛ jL=ݛ~GJ>3%
-<*>Z0'G2CwB`c5xrs/`^[ )=/x4
-;"Bx'BIvCBj_U!
-7d2JUkQ:կ& #.- HḂ!,Хw"F
-eonF&
-endstream
-endobj
-232 0 obj <<
-/Type /Font
-/Subtype /Type3
-/Name /F38
-/FontMatrix [0.00836 0 0 0.00836 0 0]
-/FontBBox [ 1 -25 127 86 ]
-/Resources << /ProcSet [ /PDF /ImageB ] >>
-/FirstChar 45
-/LastChar 255
-/Widths 697 0 R
-/Encoding 698 0 R
-/CharProcs 699 0 R
->> endobj
-697 0 obj
-[45.8 38.17 0 0 68.71 68.71 68.71 68.71 68.71 68.71 68.71 68.71 68.71 0 0 0 0 0 0 0 0 91.69 0 99.32 0 0 0 0 0 0 0 0 0 98.1 100.54 0 0 0 76.34 0 0 0 129.93 0 0 0 0 0 0 0 0 0 65.87 70.68 0 0 62.66 41.99 68.71 0 32.51 0 0 32.51 0 70.68 68.71 70.68 0 46.79 52.67 0 70.68 0 93.58 63.04 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 83.97 95.58 0 0 99.3 0 95.58 100.54 95.58 0 0 92.9 91.76 0 0 0 0 0 0 0 0 0 0 0 0 65.87 68.71 65.87 55.07 77.67 62.66 101.21 61.07 73.84 73.84 66.86 74.17 92.28 70.68 68.71 70.68 70.68 61.07 62.37 63.04 105.03 63.04 77.34 73.84 0 108.53 0 93.58 65.87 61.07 0 70.34 ]
-endobj
-698 0 obj <<
-/Type /Encoding
-/Differences [45/a45/a46 47/.notdef 49/a49/a50/a51/a52/a53/a54/a55/a56/a57 58/.notdef 66/a66 67/.notdef 68/a68 69/.notdef 78/a78/a79 80/.notdef 83/a83 84/.notdef 87/a87 88/.notdef 97/a97/a98 99/.notdef 101/a101/a102/a103 104/.notdef 105/a105 106/.notdef 108/a108 109/.notdef 110/a110/a111/a112 113/.notdef 114/a114/a115 116/.notdef 117/a117 118/.notdef 119/a119/a120 121/.notdef 199/a199/a200 201/.notdef 203/a203 204/.notdef 205/a205/a206/a207 208/.notdef 210/a210/a211 212/.notdef 224/a224/a225/a226/a227/a228/a229/a230/a231/a232/a233/a234/a235/a236/a237/a238/a239/a240/a241/a242/a243/a244/a245/a246/a247 248/.notdef 249/a249 250/.notdef 251/a251/a252/a253 254/.notdef 255/a255]
->> endobj
-699 0 obj <<
-/a45 686 0 R
-/a46 687 0 R
-/a49 688 0 R
-/a50 689 0 R
-/a51 690 0 R
-/a52 691 0 R
-/a53 692 0 R
-/a54 693 0 R
-/a55 694 0 R
-/a56 695 0 R
-/a57 696 0 R
-/a66 628 0 R
-/a68 629 0 R
-/a78 630 0 R
-/a79 631 0 R
-/a83 632 0 R
-/a87 633 0 R
-/a97 634 0 R
-/a98 635 0 R
-/a101 636 0 R
-/a102 637 0 R
-/a103 638 0 R
-/a105 639 0 R
-/a108 640 0 R
-/a110 641 0 R
-/a111 642 0 R
-/a112 643 0 R
-/a114 644 0 R
-/a115 645 0 R
-/a117 646 0 R
-/a119 647 0 R
-/a120 648 0 R
-/a199 649 0 R
-/a200 650 0 R
-/a203 651 0 R
-/a205 652 0 R
-/a206 653 0 R
-/a207 654 0 R
-/a210 655 0 R
-/a211 656 0 R
-/a224 657 0 R
-/a225 658 0 R
-/a226 659 0 R
-/a227 660 0 R
-/a228 661 0 R
-/a229 662 0 R
-/a230 663 0 R
-/a231 664 0 R
-/a232 665 0 R
-/a233 666 0 R
-/a234 667 0 R
-/a235 668 0 R
-/a236 669 0 R
-/a237 670 0 R
-/a238 671 0 R
-/a239 672 0 R
-/a240 673 0 R
-/a241 674 0 R
-/a242 675 0 R
-/a243 676 0 R
-/a244 677 0 R
-/a245 678 0 R
-/a246 679 0 R
-/a247 680 0 R
-/a249 681 0 R
-/a251 682 0 R
-/a252 683 0 R
-/a253 684 0 R
-/a255 685 0 R
->> endobj
-700 0 obj <<
-/Length 131
-/Filter /FlateDecode
->>
-stream
-x34431W0P0
-
-)\\@0,ɥ`ḁU()*Mw
-pV0wQ6T0tQ|v Q(sIef=i
-endstream
-endobj
-701 0 obj <<
-/Length 319
-/Filter /FlateDecode
->>
-stream
-x͒1N0E4M
-endstream
-endobj
-702 0 obj <<
-/Length 265
-/Filter /FlateDecode
->>
-stream
-xڕұ@5&{V$&Rhea+rh<p%qw gѰa8h Q.2}Y{qBzŦOz&I's/>9"=uᆒ zR'*atRtlڽnԂR^(P 4HUOZ|oO\r(|nz _&R̪\]-$^꾲/ʾ*A6ԁd![vxcP/mg<suP4MhIvħ
-endstream
-endobj
-703 0 obj <<
-/Length 208
-/Filter /FlateDecode
->>
-stream
-x
-@
-endstream
-endobj
-704 0 obj <<
-/Length 342
-/Filter /FlateDecode
->>
-stream
-x픱N@!$7/JNH3D+ cGG().M [3(NP@'gpyR"ŻJ\-p{ob׈R7f]-|~||wwR{xP<fZȎTab$=fudP>S N,Xm,fU{#l$])
-3z=Iɱ=vxz(:Q=u=!f23}حr_WgpGpaXs-Z{V.: MF.P*rfm;53@Y$
-f Vp bƔĸy׍v5
-endstream
-endobj
-705 0 obj <<
-/Length 170
-/Filter /FlateDecode
->>
-stream
-xӱ
-1
- vtr'utPt 7:ڦe/ $SHʉP"4hG oP EUX>~ѬH Z=>G:2r%,#wQ6}"+MG,>{`a`oD^
-endstream
-endobj
-706 0 obj <<
-/Length 384
-/Filter /FlateDecode
->>
-stream
-xڵN0Fe%?+eTD$02`-G!cmiU?绷r*|IυBrA{Kolհ/Ӭjn+V\jY 3%(ўRCcnaGkEy :2f$(p
-;Q:Ej[ag]詂hz>]5B/%dq=?ъC%sЫcD ,uo1\|&OaH`&e(-0\~V?l#Zm]#\.b7)9%2Vp \Q ic.uĥQ
-endstream
-endobj
-707 0 obj <<
-/Length 429
-/Filter /FlateDecode
->>
-stream
-xڽN0e%P
-endstream
-endobj
-708 0 obj <<
-/Length 297
-/Filter /FlateDecode
->>
-stream
-xӱJ0,} l+xSz;:9A9wktsfKIs—CTze4QϪmFhֽnu۪mү/oZ_FU}^` DdA," g$D
-dN`Y2Α!aJP9=!KbYip NHARmMV@9VUU,9wHW!](e>waG܅g 1 ?1ǿ?uѫ bp
-endstream
-endobj
-709 0 obj <<
-/Length 339
-/Filter /FlateDecode
->>
-stream
-x1N0E4M
-D =bbp.poGᭅXb\ȷ{XU_r)C^cbq U9h=n~[B%KJ2 ҍn'&vaUS1v4KRi(\QGt䩚F,7_l?TPD3LۈKƚeۈXz=0fM@/as^%;^*1aMaCsJmpF]GS^n="9yPwH*"'\
-endstream
-endobj
-710 0 obj <<
-/Length 439
-/Filter /FlateDecode
->>
-stream
-xڭԽN@%Wl z9ϊD
-,ZZh> ca##PRƝ@*%9wDZ&ϲՑZCK}'^o3yզT^/Uz߫/ϯ*\\&٭*O#^
-X- 9n])f*l\مͳa i?, )8BC
-G@0*fa^ f8;h&gokdD+sp逭䔝.SUlg̱IBF42`FDP"B3[z~>pa=!!",sBwHM3F@ЌZN-|7
-= TgR;
-endstream
-endobj
-711 0 obj <<
-/Length 275
-/Filter /FlateDecode
->>
-stream
-x͓N0et {V%LJȀDed
-Q󸃬+c0<2 @Y_kw$&Tg79,={
-endstream
-endobj
-712 0 obj <<
-/Length 403
-/Filter /FlateDecode
->>
-stream
-x͔?N0[e%G/
-4y.]@kYpev(0!B/)eL+@,TShO)D sP=&C)'oIQ]G,zƒ.;u>
-endstream
-endobj
-713 0 obj <<
-/Length 444
-/Filter /FlateDecode
->>
-stream
-xڥN0Su+ @J"" & 7#G!qF:4CrytB__<_\}W3^?ԦT^/UzG*-ϻJ77:WV?:{QVG
-BY@r䖰KbDÀN45mDVQ#;e#\f/jc=0#DHĖhG8ۋb@,a N1LVNk$-bAC(ebDK(
-q9Y\pf9. W#@8U'1 x h'^=u Ahj:" 4T! XErз?L$D%4F7E(nK
-endstream
-endobj
-221 0 obj <<
-/Type /Font
-/Subtype /Type3
-/Name /F36
-/FontMatrix [0.00581 0 0 0.00581 0 0]
-/FontBBox [ 3 -2 103 117 ]
-/Resources << /ProcSet [ /PDF /ImageB ] >>
-/FirstChar 48
-/LastChar 235
-/Widths 714 0 R
-/Encoding 715 0 R
-/CharProcs 716 0 R
->> endobj
-714 0 obj
-[100.67 100.67 100.67 100.67 100.67 100.67 100.67 100.67 100.67 100.67 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 110.47 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 96.87 0 96.87 0 0 0 0 0 0 0 0 107.52 ]
-endobj
-715 0 obj <<
-/Type /Encoding
-/Differences [48/a48/a49/a50/a51/a52/a53/a54/a55/a56/a57 58/.notdef 195/a195 196/.notdef 224/a224 225/.notdef 226/a226 227/.notdef 235/a235]
->> endobj
-716 0 obj <<
-/a48 704 0 R
-/a49 705 0 R
-/a50 706 0 R
-/a51 707 0 R
-/a52 708 0 R
-/a53 709 0 R
-/a54 710 0 R
-/a55 711 0 R
-/a56 712 0 R
-/a57 713 0 R
-/a195 700 0 R
-/a224 701 0 R
-/a226 702 0 R
-/a235 703 0 R
->> endobj
-717 0 obj <<
-/Length 121
-/Filter /FlateDecode
->>
-stream
-x3135R0P0bc3SSCB.#
-endstream
-endobj
-718 0 obj <<
-/Length 228
-/Filter /FlateDecode
->>
-stream
-xmαJ@o"0M^ป'pWSZY `eh>J+5E~;Yct_^iC-/+9u'Zst }{}<ZFojn(-~ـ8#J^Q0Cc0D_:sNar$_΂[-> ,,
-%s'l"aAZқMY'W Tc|
-endstream
-endobj
-719 0 obj <<
-/Length 235
-/Filter /FlateDecode
->>
-stream
-xu1N0ЉRX`3
-endstream
-endobj
-720 0 obj <<
-/Length 188
-/Filter /FlateDecode
->>
-stream
-xڕν
-@ + At-('𮶵kotrP?Q_ I+F!=ړ,o)$G$'KROt8oH&{$S^zVSBĢ
- i
-endstream
-endobj
-721 0 obj <<
-/Length 226
-/Filter /FlateDecode
->>
-stream
-xڕϿjAna s=b!j WJ!`R
-nGG8̜EH:_1;dySpnyΟ9)_6[d?9oR&[}";YL9#;e銊Һ„pQ*+j .+xs7xĕ\ }rR /:tKuNTc'ې'jiT2Dׂ+X
-endstream
-endobj
-722 0 obj <<
-/Length 243
-/Filter /FlateDecode
->>
-stream
-xmJ@O"p}dXW0 j)h()SDm>{uuVZjG+9}Mjag"VNbkx|JV+-*@ Ps&[ D>#E@rI~2<vKi6 bD1 FŞ~ 00!?*B~I&)=d5!y"`;e+ Mo
-endstream
-endobj
-723 0 obj <<
-/Length 197
-/Filter /FlateDecode
->>
-stream
-xڕα
-@ HB}Ѽ]`A'u(GQ|TZ?$w#3ihdȎhC!s8cТZp*Yz?WS2f5wHPQY 4a:B@ 8 1n
--SQR-8
-d_Ѯ+J_<!t<5~
-endstream
-endobj
-724 0 obj <<
-/Length 265
-/Filter /FlateDecode
->>
-stream
-xMJ@Eo[8м$AB`B]W҅E ;#Ǜ*y{wquLZZj}%OR7KmN~&wlֺ₲<>H\i%Jo*-o])L O[
-`;d1a3X`LpM6{{x<P#zz[\6&GiHl]>SHp|tO01l6 i4,e3zwgRS@v
-endstream
-endobj
-725 0 obj <<
-/Length 237
-/Filter /FlateDecode
->>
-stream
-xu1N0бRD@\
-
-endstream
-endobj
-216 0 obj <<
-/Type /Font
-/Subtype /Type3
-/Name /F16
-/FontMatrix [0.01204 0 0 0.01204 0 0]
-/FontBBox [ 2 -2 41 56 ]
-/Resources << /ProcSet [ /PDF /ImageB ] >>
-/FirstChar 49
-/LastChar 57
-/Widths 726 0 R
-/Encoding 727 0 R
-/CharProcs 728 0 R
->> endobj
-726 0 obj
-[41.52 41.52 41.52 41.52 41.52 41.52 41.52 41.52 41.52 ]
-endobj
-727 0 obj <<
-/Type /Encoding
-/Differences [49/a49/a50/a51/a52/a53/a54/a55/a56/a57]
->> endobj
-728 0 obj <<
-/a49 717 0 R
-/a50 718 0 R
-/a51 719 0 R
-/a52 720 0 R
-/a53 721 0 R
-/a54 722 0 R
-/a55 723 0 R
-/a56 724 0 R
-/a57 725 0 R
->> endobj
-729 0 obj <<
-/Length 235
-/Filter /FlateDecode
->>
-stream
-xUбj0`['lf2.C2Li-jM*~<fVN*I_XbNȱx `:Οp]0 |_>^0S1uSN:&^B;grA3pU9IF2x&UB$)n Ќ'( #GҾ$t5 "
-endstream
-endobj
-730 0 obj <<
-/Length 247
-/Filter /FlateDecode
->>
-stream
-x}нJ@
-(F#8r ?laɚ='_Hyt[}@Mm}Ɗf1`H Ggͥ
-endstream
-endobj
-731 0 obj <<
-/Length 246
-/Filter /FlateDecode
->>
-stream
-xڍj@ e 5hHޠ wΟB!NJct(~JTt~gt|4ѽD(ڽFD o*-$
-endstream
-endobj
-732 0 obj <<
-/Length 235
-/Filter /FlateDecode
->>
-stream
-xڅѱN@ `W"y#O%TvTD$P'`d
-vY~ç̚JdD$G[o=Cܙ
-endstream
-endobj
-733 0 obj <<
-/Length 159
-/Filter /FlateDecode
->>
-stream
-x33T0P
-%E\N
-\.
-\.
-
-endstream
-endobj
-734 0 obj <<
-/Length 147
-/Filter /FlateDecode
->>
-stream
-x313P0P0bS3S CB. HrW0
-endstream
-endobj
-735 0 obj <<
-/Length 250
-/Filter /FlateDecode
->>
-stream
-x};N0 )"M#x.
-VK-GR@;R,$Rdi..[ro:z#Mnz~mFh[:?^nȣѣ'
-endstream
-endobj
-736 0 obj <<
-/Length 166
-/Filter /FlateDecode
->>
-stream
-x3г0R0P
-endstream
-endobj
-737 0 obj <<
-/Length 127
-/Filter /FlateDecode
->>
-stream
-x3230W0P
-F\@Q.}O_T.}
-B BdpY
-endstream
-endobj
-738 0 obj <<
-/Length 144
-/Filter /FlateDecode
->>
-stream
-x31ѳP0P0bcS CB.cS
-endstream
-endobj
-739 0 obj <<
-/Length 292
-/Filter /FlateDecode
->>
-stream
-xeAN 
-endstream
-endobj
-740 0 obj <<
-/Length 233
-/Filter /FlateDecode
->>
-stream
-xuбn0`[ H' $P:Dڎ%k!OGȫPAֱ  "w|.n[130·
-7Cd} ʷ
-endstream
-endobj
-741 0 obj <<
-/Length 272
-/Filter /FlateDecode
->>
-stream
-xڅ1N@ E&G_
-endstream
-endobj
-742 0 obj <<
-/Length 207
-/Filter /FlateDecode
->>
-stream
-xڅ=
-@ )xdN+PG(9B!̮ED4oxv44 yD1 ZC&$q8,G%kP/9EvPsJQgK15
-č'=
-endstream
-endobj
-743 0 obj <<
-/Length 230
-/Filter /FlateDecode
->>
-stream
-xmб0#LnX h`"QLd08Fg}4G`thkELL(_zG'I"G25siN{
-F9UQUKy܎QrRBh b
-endstream
-endobj
-744 0 obj <<
-/Length 257
-/Filter /FlateDecode
->>
-stream
-xu1N@E4{BpED)9Z#t0;QDiVfv W%ׁovT*znsuKgj*U{Ϗw*W\&n
-m0jVgfS&B9E1)V19O_jLoFA vH$jL)59هK?]GOTR{~
-endstream
-endobj
-745 0 obj <<
-/Length 145
-/Filter /FlateDecode
->>
-stream
-x3535T0P04f
-
-)\\
- es<L =\
-%E\N
-\.
-@b<]
-
-endstream
-endobj
-746 0 obj <<
-/Length 216
-/Filter /FlateDecode
->>
-stream
-x}бj0x0ܒG@+)झ Ph !S1CC:ۏG#x tbl_ٲs͚rCe=|ʓ9paɼ=η7cǎLGDf
-e#} e5
-endstream
-endobj
-747 0 obj <<
-/Length 299
-/Filter /FlateDecode
->>
-stream
-xeѱN0`G,ݒG$@2E*E"L 02`C# o7V#zRL԰ْ뮚\{D9WBUbSo.o`@v.c<9wאOEB\"_BkXKt7J֨tDE:TBu9_Aɇf hP5׌P-*ߖ*U[-#mԒF9R&YR*'R "E%|Q#IDx(3ԆG_^$%GV#ܒ"a$Ɇb$'Qgv<
-endstream
-endobj
-748 0 obj <<
-/Length 294
-/Filter /FlateDecode
->>
-stream
-xMN@\A2 >.^Er&ZY+h<o!?Xl>fv>;߹mqv[W_Jߴ#.c/^jqj޸-*W>j{tD$$M:I@;EI:lZȀC&D)<Jfr (Qʠ e$)ƔAcʀџʹp4+%/`LmV^c̾Oe}@?P}ð!!뚲ĵ̔a.jzѫVPDt
-endstream
-endobj
-749 0 obj <<
-/Length 143
-/Filter /FlateDecode
->>
-stream
-x31ѳP0P0bSS CB.3
-endstream
-endobj
-750 0 obj <<
-/Length 268
-/Filter /FlateDecode
->>
-stream
-xuNP`Ls^y=5HheaBh<
-%afNA4|9sg/
-ʨ%3z 3Z,=7F_r;z){zG
-endstream
-endobj
-751 0 obj <<
-/Length 272
-/Filter /FlateDecode
->>
-stream
-xUбJ@ W#>I<[8O0Xm6oGM4ba+vn93 N~iVWzEJ_x͒_-;,uXv'顮ZWm4@$jy&_BN 5
-TI1OlQE4 d,SԚ
-B1ƹ/\b c\Q8Qk47/8ƌˌxY=lLxa~}P
-endstream
-endobj
-752 0 obj <<
-/Length 261
-/Filter /FlateDecode
->>
-stream
-xE1N@G(H^vk"VJ--4Z8#}b,_3{׸uvXkp?8h^u_Z\=y "Y"y$JEY
-dIzz`=x@o7Kdo7Kd/1mř2fD|ў6VOo{)Tdp4m(W m<l윿
-endstream
-endobj
-753 0 obj <<
-/Length 213
-/Filter /FlateDecode
->>
-stream
-x}ѽ0[x ,@t"ALd08FWxP&>˯w_/\]%+yݶmD M'{|>wa4L7/iX6cNAl06z^&PS[2*uf>.Ɵ(kd*v!Օ]ȔL(ki#ȥM?)
-endstream
-endobj
-754 0 obj <<
-/Length 164
-/Filter /FlateDecode
->>
-stream
-x3533S0P
-endstream
-endobj
-755 0 obj <<
-/Length 272
-/Filter /FlateDecode
->>
-stream
-xڅ1N@ E&G_
-endstream
-endobj
-756 0 obj <<
-/Length 163
-/Filter /FlateDecode
->>
-stream
-x3533S0P
-endstream
-endobj
-757 0 obj <<
-/Length 254
-/Filter /FlateDecode
->>
-stream
-xM1N0A)"M#' #H" *
-D hqfD5rM"Yv7dOgNZ͹<ֺ F֫D=5\_6x|z}{iewcM$W5
-endstream
-endobj
-758 0 obj <<
-/Length 294
-/Filter /FlateDecode
->>
-stream
-xMN@\A2 >.^Er&ZY+h<o!?Xl>fv>;߹mqv[W_Jߴ#.c/^jqj޸-*W>j{tD$$M:I@;EI:lZȀC&D)<Jfr (Qʠ e$)ƔAcʀџʹp4+%/`LmV^c̾Oe}@?P}ð!!뚲ĵ̔a.jzѫVPDt
-endstream
-endobj
-759 0 obj <<
-/Length 197
-/Filter /FlateDecode
->>
-stream
-xm1
-@/4!s݄"U F0Xuy=GHg@qQYx]NSyă㔷(N4 -yl'+g|:w#r"T TJd.j\
-endstream
-endobj
-760 0 obj <<
-/Length 264
-/Filter /FlateDecode
->>
-stream
-xuнJ@
-endstream
-endobj
-761 0 obj <<
-/Length 189
-/Filter /FlateDecode
->>
-stream
-xUα
-0
-endstream
-endobj
-762 0 obj <<
-/Length 129
-/Filter /FlateDecode
->>
-stream
-x3635S0P
-endstream
-endobj
-763 0 obj <<
-/Length 199
-/Filter /FlateDecode
->>
-stream
-xuб03 $B@ILtr0Nx4G`d k!Kk5&)4xȟ+5֎;rɚeY2G
-h}Q aѪ:_t
-0r)J]*U23\ AG cH n$t
-endstream
-endobj
-764 0 obj <<
-/Length 196
-/Filter /FlateDecode
->>
-stream
-xڅ1
-@RIknŠ`L!he!Vj)hf9GHi!'A+Wa <~ÔZ 6&#5[Kf1b@&_N8#3m2< $H@ %§H?jRvH/J\:VDj"BNYA+zоX,
-endstream
-endobj
-765 0 obj <<
-/Length 261
-/Filter /FlateDecode
->>
-stream
-x-1N0mi>hPZZHPQ *}`ndl
-6fF*,6S;k+OHAh*
-endstream
-endobj
-766 0 obj <<
-/Length 198
-/Filter /FlateDecode
->>
-stream
-x]=
-@_*axt U0X٣y=BJq'
-|y{l;t&;bD̆"d%_/#j)oá3F$%K d""(|T"
-?E$R)z+_ 
-E-#mQ;Z
-<5^"Ci3sZ vPQ
-endstream
-endobj
-767 0 obj <<
-/Length 201
-/Filter /FlateDecode
->>
-stream
-x==
-@ir .I
-+P4<G&`5^ bš8kT)~]ie
-
-K&^'Q3XwmCٹ}#UNRH ?S/kF_?U7đ"MXIAɉ2c)
-endstream
-endobj
-768 0 obj <<
-/Length 245
-/Filter /FlateDecode
->>
-stream
-xڅбJ@?L}sn<VbYZ(Zz
-A:9ϷW}
-endstream
-endobj
-769 0 obj <<
-/Length 194
-/Filter /FlateDecode
->>
-stream
-x=;
-@ )vN&W+PN+6[FoŌTR 1H>KwІƋA9 lʭ<+n)3IO\z;\QbAтbap;倶hI٪H{Gp@wECZݒn@Q'bGUxh45K;W
-endstream
-endobj
-770 0 obj <<
-/Length 175
-/Filter /FlateDecode
->>
-stream
-xmν@ .<}n$7`Ah<
-p#0ۦ)OEsJth3@#.2yAV#7O(r?6kXFL+n\8o#ʘZK0ViT5q-poXt
-endstream
-endobj
-771 0 obj <<
-/Length 220
-/Filter /FlateDecode
->>
-stream
-xUͱN02X%{ҨrJPN ;jdMjR$cZN'兼Mx/5ʚ(Ƹx^dX5 zxjvCO@;-@2|; 6;&RT0LD;1O.'c܁vPP~TvD[fNm3Q 0L x
-endstream
-endobj
-772 0 obj <<
-/Length 152
-/Filter /FlateDecode
->>
-stream
-x31ҳT0P0bScsCB.c
-endstream
-endobj
-773 0 obj <<
-/Length 208
-/Filter /FlateDecode
->>
-stream
-xm1N04
-$(PRv.]X&Q
-
-Wfp-sswo>;jrO^?4{HNcr=;=ܰ'wg gl `DZdD#2!aFuNU&+uBU62S1YRcg٘0ꖈ0A45 lV$ZhF?ہ*\
-endstream
-endobj
-774 0 obj <<
-/Length 151
-/Filter /FlateDecode
->>
-stream
-x31ҳT0P0bScsCB.c
-endstream
-endobj
-775 0 obj <<
-/Length 224
-/Filter /FlateDecode
->>
-stream
-x}1n@б(,MG\
-)."*JPRAm߄X|tay,
-GZ=jgh&c0zd*%]cI؈g/6& ]9]
-s%
-Qk8AK3'y;]54DxկW/\ʠ$SSVӜǨ7nUMHݲfm+$lL
-endstream
-endobj
-776 0 obj <<
-/Length 197
-/Filter /FlateDecode
->>
-stream
-xu=
-@_&2uI),J--d)qJxxܳYNGt4p;Ҹ 4#3טLz 3^NؒFTLH
-endstream
-endobj
-777 0 obj <<
-/Length 133
-/Filter /FlateDecode
->>
-stream
-x330S0PbcsCB.c
-endstream
-endobj
-778 0 obj <<
-/Length 230
-/Filter /FlateDecode
->>
-stream
-xM=N@RD&G\
-endstream
-endobj
-779 0 obj <<
-/Length 286
-/Filter /FlateDecode
->>
-stream
-xڍҽJ@
-endstream
-endobj
-780 0 obj <<
-/Length 222
-/Filter /FlateDecode
->>
-stream
-x51j@EB09A֒+@T*qetaYC.&EԥUJkRcgv):NUV* FVo|z{zBZ7JVu \/.6m2.뀴[
-endstream
-endobj
-781 0 obj <<
-/Length 170
-/Filter /FlateDecode
->>
-stream
-xu100KmZI;`A3pFBE )=ך-h&#R1E1%P zGS|OJ _;ryAn$gt$h2 Zn߀׺jvIa"HO_
-endstream
-endobj
-782 0 obj <<
-/Length 152
-/Filter /FlateDecode
->>
-stream
-x3133V0P04&
-
-)\\Ʀ@ IrW06
-s{*r;8+r(DUry(`
-endstream
-endobj
-783 0 obj <<
-/Length 153
-/Filter /FlateDecode
->>
-stream
-x3333S0P
-endstream
-endobj
-784 0 obj <<
-/Length 173
-/Filter /FlateDecode
->>
-stream
-x333P0P0S54V03S06WH1*2(¤s<L-=\
-%E\N
-\.
-\.
- 0?ь?0EC7`@ `@G`ЀNC 0:"?ь?\=
-endstream
-endobj
-785 0 obj <<
-/Length 194
-/Filter /FlateDecode
->>
-stream
-xm=0p ,D&Ltr0NUf#024TC4/7I#L$3dxILudK;8!.WxO[A4c,hxj Qe1CQ&-`kZOICq_~PRuԄ1t66oop
-endstream
-endobj
-786 0 obj <<
-/Length 170
-/Filter /FlateDecode
->>
-stream
-xu1
-P H!K`N{ҩP+A'qRGEWۣ(=BD1 ĥ,M'܌ ^9ɯsfKΡY_z?sJKAKa~AbN
-endstream
-endobj
-787 0 obj <<
-/Length 194
-/Filter /FlateDecode
->>
-stream
-xu=
-Pa!l#d//1U0X`9G)SI+f?Y7!y҉\aQsh]4&rɎcNxEJ' # H$DJ"<LDE?$"@}ZxE”`t
--pDDTy
-endstream
-endobj
-788 0 obj <<
-/Length 198
-/Filter /FlateDecode
->>
-stream
-x]αJ@?Xf!IqX-'BB,->Z%2EȺZi1 3];jmn74)s!^܋v4?]Nq'}m~q<-bedP*P+3d'ZŸ6ke6]C$7Z\͜v'@7ZBL*<'\
-endstream
-endobj
-789 0 obj <<
-/Length 94
-/Filter /FlateDecode
->>
-stream
-xMɻ@PE|c&#q BT(xU]mixtԄiI1.v̐ɩ2
-^e@m
-endstream
-endobj
-790 0 obj <<
-/Length 89
-/Filter /FlateDecode
->>
-stream
-x3230W0P
-\
-\
-%E\N
-\.
-\.
- 'W 
-endstream
-endobj
-791 0 obj <<
-/Length 233
-/Filter /FlateDecode
->>
-stream
-xmпN0?I۔lJȀbF͏GȘ!T]~'OW|' ^YcM/lYq&ϴ%{)m?\sMvw5Wm(
-R0*Y=P~u/贛c\8qd:ǐT>.3Y̒Ke o
-endstream
-endobj
-792 0 obj <<
-/Length 161
-/Filter /FlateDecode
->>
-stream
-x3135R0P
-endstream
-endobj
-793 0 obj <<
-/Length 227
-/Filter /FlateDecode
->>
-stream
-xe=
-@ )D +T,h9GL!Afn&^bJ;^v 0~څG9]43t9_hF1%h&N(`>!
-r%N/e
-endstream
-endobj
-794 0 obj <<
-/Length 246
-/Filter /FlateDecode
->>
-stream
-x]1N@Eei # $("*L>#"aƎ)j_zɁ+ZrUs}o%
-l^M=m\LyϏw[.oyWrxf
-endstream
-endobj
-795 0 obj <<
-/Length 217
-/Filter /FlateDecode
->>
-stream
-xu1nP `G"yy`OKȋD
-*`N TÞ(#P*WokT(XqE+]׵4}'ޭ
-endstream
-endobj
-796 0 obj <<
-/Length 216
-/Filter /FlateDecode
->>
-stream
-xڕ=
-@ ira6V‚?`
-A+ RK E[r"8ά6
-B ;//6d)uR;%ۣ&=D]zϓ9 cOx8m1̆$-eg_D
-ISjU+{\9Ҩ;BM3Us5חMUBۗw} 8fY5̲ _?&89>
-endstream
-endobj
-797 0 obj <<
-/Length 253
-/Filter /FlateDecode
->>
-stream
-xUбN02G
- (3@%z)^IcR* ~3O`ߢeۂ]nT )(57k=II 2THR_p x_z
-endstream
-endobj
-798 0 obj <<
-/Length 184
-/Filter /FlateDecode
->>
-stream
-x3135R0P04R5T05P05QH1*26P\.'O.pcs.}8BIQi*S!BA,`#f
-
-endstream
-endobj
-799 0 obj <<
-/Length 258
-/Filter /FlateDecode
->>
-stream
-xeN0 ]u%
-VLMtpW=7!~s
-endstream
-endobj
-800 0 obj <<
-/Length 256
-/Filter /FlateDecode
->>
-stream
-x]1N@YXisqw+  
-()@ƾW ov<!(d]eqVe&r:Jʕ<‹
-3)3kη82?q2z#D~ 0ՖjGjOjl"M
-endstream
-endobj
-215 0 obj <<
-/Type /Font
-/Subtype /Type3
-/Name /F33
-/FontMatrix [0.01204 0 0 0.01204 0 0]
-/FontBBox [ -1 -17 89 60 ]
-/Resources << /ProcSet [ /PDF /ImageB ] >>
-/FirstChar 45
-/LastChar 255
-/Widths 801 0 R
-/Encoding 802 0 R
-/CharProcs 803 0 R
->> endobj
-801 0 obj
-[27.68 23.07 0 41.52 41.52 41.52 41.52 41.52 41.52 41.52 41.52 41.52 41.52 0 0 0 0 0 0 0 55.36 55.36 53.05 59.97 49.59 47.28 55.36 58.82 23.07 0 0 44.98 72.66 58.82 61.12 53.05 0 53.63 46.13 56.51 57.09 0 78.42 55.36 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 44.98 0 0 0 50.74 57.66 0 57.66 59.05 0 57.66 61.12 57.66 0 0 0 55.36 0 55.36 0 0 0 0 0 0 0 0 0 0 39.9 41.52 39.9 33.56 44.75 36.91 61.35 36.91 44.63 44.63 40.6 43.82 55.59 42.9 41.52 42.9 42.9 36.91 38.06 38.29 63.66 38.29 45.55 44.63 63.66 64.58 0 56.74 39.9 36.91 0 42.79 ]
-endobj
-802 0 obj <<
-/Type /Encoding
-/Differences [45/a45/a46 47/.notdef 48/a48/a49/a50/a51/a52/a53/a54/a55/a56/a57 58/.notdef 65/a65/a66/a67/a68/a69/a70/a71/a72/a73 74/.notdef 76/a76/a77/a78/a79/a80 81/.notdef 82/a82/a83/a84/a85 86/.notdef 87/a87/a88 89/.notdef 195/a195 196/.notdef 199/a199/a200 201/.notdef 202/a202/a203 204/.notdef 205/a205/a206/a207 208/.notdef 211/a211 212/.notdef 213/a213 214/.notdef 224/a224/a225/a226/a227/a228/a229/a230/a231/a232/a233/a234/a235/a236/a237/a238/a239/a240/a241/a242/a243/a244/a245/a246/a247/a248/a249 250/.notdef 251/a251/a252/a253 254/.notdef 255/a255]
->> endobj
-803 0 obj <<
-/a45 789 0 R
-/a46 790 0 R
-/a48 791 0 R
-/a49 792 0 R
-/a50 793 0 R
-/a51 794 0 R
-/a52 795 0 R
-/a53 796 0 R
-/a54 797 0 R
-/a55 798 0 R
-/a56 799 0 R
-/a57 800 0 R
-/a65 729 0 R
-/a66 730 0 R
-/a67 731 0 R
-/a68 732 0 R
-/a69 733 0 R
-/a70 734 0 R
-/a71 735 0 R
-/a72 736 0 R
-/a73 737 0 R
-/a76 738 0 R
-/a77 739 0 R
-/a78 740 0 R
-/a79 741 0 R
-/a80 742 0 R
-/a82 743 0 R
-/a83 744 0 R
-/a84 745 0 R
-/a85 746 0 R
-/a87 747 0 R
-/a88 748 0 R
-/a195 749 0 R
-/a199 750 0 R
-/a200 751 0 R
-/a202 752 0 R
-/a203 753 0 R
-/a205 754 0 R
-/a206 755 0 R
-/a207 756 0 R
-/a211 757 0 R
-/a213 758 0 R
-/a224 759 0 R
-/a225 760 0 R
-/a226 761 0 R
-/a227 762 0 R
-/a228 763 0 R
-/a229 764 0 R
-/a230 765 0 R
-/a231 766 0 R
-/a232 767 0 R
-/a233 768 0 R
-/a234 769 0 R
-/a235 770 0 R
-/a236 771 0 R
-/a237 772 0 R
-/a238 773 0 R
-/a239 774 0 R
-/a240 775 0 R
-/a241 776 0 R
-/a242 777 0 R
-/a243 778 0 R
-/a244 779 0 R
-/a245 780 0 R
-/a246 781 0 R
-/a247 782 0 R
-/a248 783 0 R
-/a249 784 0 R
-/a251 785 0 R
-/a252 786 0 R
-/a253 787 0 R
-/a255 788 0 R
->> endobj
-804 0 obj <<
-/Length 244
-/Filter /FlateDecode
->>
-stream
-x]1N@qf0nXI&ZY+؍vh#PR>:L^g .\pɯ)<ꇗw6T<r(T4wq|b{;~|fYfLnNZPwꄶ _+sO~
-endstream
-endobj
-805 0 obj <<
-/Length 210
-/Filter /FlateDecode
->>
-stream
-xuν
-@ B>yV
-~I(}񒣶$$
-ijOQ2s7Ƕ=c4k{&oY!ْ `-ZWb b*ѯEO'?ruU;MNum2ԝl T~7U7O-yY04E_UiR-
-endstream
-endobj
-806 0 obj <<
-/Length 226
-/Filter /FlateDecode
->>
-stream
-xڭ=nA F=@rGX_
- wQh(!]'4Q5M{Jn:g 7J/F۬x8m^T]{A<^1F
-endstream
-endobj
-807 0 obj <<
-/Length 196
-/Filter /FlateDecode
->>
-stream
-xڥб0[x ,$a"AL`qRGh<
-@6/k"]+ 0G ^Cx@:..w%#F1;|=7~!O!g**ƴ7X3ˆZH'gdOi̸Gftnmz:Lq̜F6[lMiHIR
- O
-endstream
-endobj
-808 0 obj <<
-/Length 110
-/Filter /FlateDecode
->>
-stream
-x33T0P
-%E\N
-\.
-\.
-nhH
-endstream
-endobj
-809 0 obj <<
-/Length 107
-/Filter /FlateDecode
->>
-stream
-x313P0P0bS CB.c3
-endstream
-endobj
-810 0 obj <<
-/Length 232
-/Filter /FlateDecode
->>
-stream
-xڝбn0C n(Nhš* کC vN͏#xd@'@iթ','H.c$JyYfEێˊdg+^sf_N%e?TW3!kCDL
-Akq"4 #^]y"wlEtF8[ߢ,4k%w^#O]į]D0@Kƴlb^$i-a
-endstream
-endobj
-811 0 obj <<
-/Length 104
-/Filter /FlateDecode
->>
-stream
-x3г0R0P
-endstream
-endobj
-812 0 obj <<
-/Length 88
-/Filter /FlateDecode
->>
-stream
-x3230W0P
-endstream
-endobj
-813 0 obj <<
-/Length 132
-/Filter /FlateDecode
->>
-stream
-x332T0P0V5R06R0PH1*2
-(Aes<,=\
-%E\N
-\.
-@b<]? },
-endstream
-endobj
-814 0 obj <<
-/Length 249
-/Filter /FlateDecode
->>
-stream
-xE;N0`G),M#' EZHPQ *
-Ea ʰޡݠS%H 1͐'Qr5rf:뛁>BgB wd y$чIZXTZ^lQӪ|N:+/ܜ7Xt?3uv
-endstream
-endobj
-815 0 obj <<
-/Length 99
-/Filter /FlateDecode
->>
-stream
-x31ѳP0P0b#S CB.c
-endstream
-endobj
-816 0 obj <<
-/Length 231
-/Filter /FlateDecode
->>
-stream
-xm̱jP#Y|jAI!IvP:;4$!skutWv8|fe.=/NMhO^%XݣeU>n`z\Kj#/į\nDD+: D
-endstream
-endobj
-817 0 obj <<
-/Length 188
-/Filter /FlateDecode
->>
-stream
-xM1PP6=$#AL0XF[&^()Ȳżdfb!/!aI[@ ʹʷ|
-CPC Ng86?[agza!,g"}W e[a;f{ba)L*_=!]%#m'-i!,gMBctG#:=|xb
-endstream
-endobj
-818 0 obj <<
-/Length 249
-/Filter /FlateDecode
->>
-stream
-xڭ1n0 Eix0G0/H2`
-1? |& =T6L2@&fivщ^v8!3@KkE3b3uif@=֎МUn/K=
-endstream
-endobj
-819 0 obj <<
-/Length 168
-/Filter /FlateDecode
->>
-stream
-x3530U0P0bKS CB.C
-@-\.
-?
-endstream
-endobj
-820 0 obj <<
-/Length 281
-/Filter /FlateDecode
->>
-stream
-xڭ1N0E4
-
-endstream
-endobj
-821 0 obj <<
-/Length 209
-/Filter /FlateDecode
->>
-stream
-xeϱ
-@ +B>B^kIG:v7HO.!$'C^؛L9Y%; D|,'}YLzc-?+l'Wl)] Ja@7*8n>S_Wf9s7p,"Fz"KA=7cڙw`P:=}
-endstream
-endobj
-822 0 obj <<
-/Length 247
-/Filter /FlateDecode
->>
-stream
-x}=JAK&hd0uc6lYWpA#Yphs9„,SqM>U)ZZR*sBxݳfe|~|_?H~#ϕ[7BQQԙ.T5e L:)RHRg9Q0Y"5V:+ Fhr 7(? /ohq% 8IfS|#|
-endstream
-endobj
-823 0 obj <<
-/Length 104
-/Filter /FlateDecode
->>
-stream
-x3535T0P0bScS CB.K
-
-endstream
-endobj
-824 0 obj <<
-/Length 168
-/Filter /FlateDecode
->>
-stream
-x1
-@EX;݄hB"Xh9GL!
-Y>qsv8q6cLJL'4!RM֯vȖd+cv{
-endstream
-endobj
-825 0 obj <<
-/Length 244
-/Filter /FlateDecode
->>
-stream
-xm;N1ᱶ4a} 8-@T@Iv)o#d2ffG
-
-?vzafn5%ni?-_}Bl=kv2%ڵyXMj
- GNPE4@ƳABa^?ᒃP(G%:]O )vh
-endstream
-endobj
-826 0 obj <<
-/Length 301
-/Filter /FlateDecode
->>
-stream
-xe?K0,'WystPtӶ~_$q0`>Mٻ!y}99\r~˂Jl\EͳsY<;U'gCl)/%gTA
-ZFuTyABytşvT{5PF\/ʱhTD`b&(TQ у4Ԑ 5RlH"HCjѡ YW= $HD/v6[AA Y}Q =ZՍֈfv LJ
-endstream
-endobj
-827 0 obj <<
-/Length 277
-/Filter /FlateDecode
->>
-stream
-xM1N0E'4Ml,)@T@Ijf({)?c#xy;w~;u]ׁ8o(/n-܏w?'eYΐBdfTP6Q|$
-¤qߨ$ ,!H̔Ex|NXU-,`zPRBE7&"mTV)fӗ$p$ QZԔ2X%!#7u'@S>{Ё
-endstream
-endobj
-828 0 obj <<
-/Length 229
-/Filter /FlateDecode
->>
-stream
-x=N@\XG9ѭ $(LJuGɕ|27h8KYI+\H׎8q^Qyӳf;9w7ұ|~+e f69MqRF#nip'ZPU APU:A![DJi2h-B٨:#SjYM"P/#~7h5 b?Il
-endstream
-endobj
-829 0 obj <<
-/Length 183
-/Filter /FlateDecode
->>
-stream
-xu
-P ES:Ah~@_KB`A'qRGEBcZD.g=.%Kh.>ɷ91/lhzFSv9Y4,{, _B:yDvA;5R`dV~Yj2Ͱ}s O:
-endstream
-endobj
-830 0 obj <<
-/Length 180
-/Filter /FlateDecode
->>
-stream
-xڽ
-084NZ N⤎Q;J\lI -h)?;#I u_90d Q-=+|" :jJNh :Âk 0vY \ըiah@_ xZUD
-$u}
-endstream
-endobj
-831 0 obj <<
-/Length 179
-/Filter /FlateDecode
->>
-stream
-x36ӳ4T0P0V5T06U0TH1*2 (@es< =\
-%E\N
-@QhX.O 00! 8̱?4 h:?t[>Փ+
-endstream
-endobj
-832 0 obj <<
-/Length 187
-/Filter /FlateDecode
->>
-stream
-xڽ10 E]uG$1E*E"L @077G;4$p0!I2I{'ڋ2쎘[k(.E ([qCZ{q6a6^ T2
-endstream
-endobj
-833 0 obj <<
-/Length 193
-/Filter /FlateDecode
->>
-stream
-xm1@E?RL!G`.+HHaRK v8Gd!R:k=/Bpģ!=HGNxo.wJRRGĤdԚORtt 0@n ҵZk+ JAO\ e.d?:+azqw"B_c(/,]o鹭k@ UH
-endstream
-endobj
-834 0 obj <<
-/Length 133
-/Filter /FlateDecode
->>
-stream
-x3236W0P0b# 3CCB.#3
-endstream
-endobj
-835 0 obj <<
-/Length 234
-/Filter /FlateDecode
->>
-stream
-x}J14y h6\pVrZZ(ښ<Z%re$?Ɲo܎7/vm/OWڏdD@Fd[x|!bG#J݄a6R殔2&itR:N0A Gܼ-E"T) ,f$
-endstream
-endobj
-836 0 obj <<
-/Length 142
-/Filter /FlateDecode
->>
-stream
-x31ҳT0P0bcs3CB.c4H$r9yr+p{
-endstream
-endobj
-837 0 obj <<
-/Length 95
-/Filter /FlateDecode
->>
-stream
-x3Գ0Q0P0bCSsCB.
-endstream
-endobj
-838 0 obj <<
-/Length 128
-/Filter /FlateDecode
->>
-stream
-x3234Q0P5U54W04S05WH1*22P
-
-endstream
-endobj
-839 0 obj <<
-/Length 196
-/Filter /FlateDecode
->>
-stream
-xڽ;@%$p.bKVJ--4ZGÛx:)?M| ̱$|NFYtԇӕJGvYFv[nÏB.9%[!H`D=;Pnx38=:h@`'@|,o兿E3RxE Ju# TfPڤ'< 'w
-endstream
-endobj
-840 0 obj <<
-/Length 89
-/Filter /FlateDecode
->>
-stream
-x3Գ0Q0P0bC3CB.s
-endstream
-endobj
-841 0 obj <<
-/Length 165
-/Filter /FlateDecode
->>
-stream
-xL;@\BA; !V$[heaB{=
-GX;̎b2̔d>)3>ft"cǢ=SHI|JRvH֛g$gH5,{b%0{O[Yt`b BG:z
-endstream
-endobj
-842 0 obj <<
-/Length 137
-/Filter /FlateDecode
->>
-stream
-x31ҳT0P0bcsc CB.crAɹ\N\
-\@Q.}O_T.}
-endstream
-endobj
-843 0 obj <<
-/Length 190
-/Filter /FlateDecode
->>
-stream
-xڍ1PDPl X &RheaBp4()w-hm^1Md6刧<DdJq諨sP^qY9Lq&ol,@ 5I  PAMV#h
-endstream
-endobj
-844 0 obj <<
-/Length 189
-/Filter /FlateDecode
->>
-stream
-xڭ;@!$pD+D
-,ZZhq@IAv5cibxNb1ĚN!^jF}x4G#cP*_8J7
-QeI0,$\e&i@(0<+ vJ!
-endstream
-endobj
-845 0 obj <<
-/Length 189
-/Filter /FlateDecode
->>
-stream
-xڭ;@XL 肋jD
-,ZZh޹#PRi(MlţC48&hhfx
-H8nG $z%9l :,0>
-\P?`>xm
-endstream
-endobj
-846 0 obj <<
-/Length 133
-/Filter /FlateDecode
->>
-stream
-x336W0P0b#sc CB.#rAɹ\N\
-F\@Q.}O_T.}
-endstream
-endobj
-847 0 obj <<
-/Length 188
-/Filter /FlateDecode
->>
-stream
-xM;
-@ irt"1),DBQrh{!dcW")(ATˆ]g¼D8E5UvD/Qm,Lg E)m}
-endstream
-endobj
-848 0 obj <<
-/Length 133
-/Filter /FlateDecode
->>
-stream
-x3ԳT0P0T5T0P01WH1*22
-(X@ds≮=\
-%E\N
-\.
-\.
-ch`
-endstream
-endobj
-849 0 obj <<
-/Length 127
-/Filter /FlateDecode
->>
-stream
-x31ҳT0P0S5T06CB.c4$r9yr+p{
-endstream
-endobj
-850 0 obj <<
-/Length 182
-/Filter /FlateDecode
->>
-stream
-xM;
-@?X&G=k V-,J--měh#L BUlCQ4J!WєF= dT!TxH&U_ r@%r2K7 juqZfD >D@oϋoKLjօVvg9H
-endstream
-endobj
-851 0 obj <<
-/Length 236
-/Filter /FlateDecode
->>
-stream
-xEαN0<D%oMX*E"L SۑT$ } ~=XwO}g]ϧfbj^Ͷwl$V6oоfSݣ|.Lve^r PLx5W?Jr}%i/K_ gW<GAg[*AṶ"I<(:
-EdR櫈@?97s̄6
-endstream
-endobj
-852 0 obj <<
-/Length 205
-/Filter /FlateDecode
->>
-stream
-x5;0D'ri>! TH@Q%j&\7!GH"2zf<U=8TKϴӕ {SNl6q^obYj [㠼0^Nv;> D|x +[< q
-endstream
-endobj
-853 0 obj <<
-/Length 220
-/Filter /FlateDecode
->>
-stream
-xU1j@oT4pVkYĮ"W.B*'e
-t*{#T!̮`g?kX\s߻#T3.6%='*||ڼ<&W[R1R
-Bܢf=nCGfWZ`= iTL Kw"'d kxc]T X!2KrׁK?Vv
-endstream
-endobj
-854 0 obj <<
-/Length 148
-/Filter /FlateDecode
->>
-stream
-x363T0P0bccsCB.c HrW06
-endstream
-endobj
-855 0 obj <<
-/Length 244
-/Filter /FlateDecode
->>
-stream
-x]1N@qf0nXI&ZY+؍vh#PR>:L^g .\pɯ)<ꇗw6T<r(T4wq|b{;~|fYfLnNZPwꄶ _+sO~
-endstream
-endobj
-856 0 obj <<
-/Length 185
-/Filter /FlateDecode
->>
-stream
-x3536S0P0bSCS CB.c
-endstream
-endobj
-857 0 obj <<
-/Length 210
-/Filter /FlateDecode
->>
-stream
-xuν
-@ B>yV
-~I(}񒣶$$
-ijOQ2s7Ƕ=c4k{&oY!ْ `-ZWb b*ѯEO'?ruU;MNum2ԝl T~7U7O-yY04E_UiR-
-endstream
-endobj
-858 0 obj <<
-/Length 99
-/Filter /FlateDecode
->>
-stream
-x31ѳP0P0b#S CB.c
-endstream
-endobj
-859 0 obj <<
-/Length 167
-/Filter /FlateDecode
->>
-stream
-x3331V0P0T54S05W0PH1*25(@s<LM=\
-%E\N
-\.
-\.
- (C 3bR)~(u
-endstream
-endobj
-860 0 obj <<
-/Length 110
-/Filter /FlateDecode
->>
-stream
-x33T0P
-%E\N
-\.
-\.
-nhH
-endstream
-endobj
-861 0 obj <<
-/Length 254
-/Filter /FlateDecode
->>
-stream
-xڍJPϒ"2M|
-zrbTy~mM+nTϏWʶwW\Pǂ'w
-endstream
-endobj
-862 0 obj <<
-/Length 186
-/Filter /FlateDecode
->>
-stream
-xe
-@\| 2A˛`!ST;u Q|DفfAIBe7ѓKw#M n!T[|滕m!X& ,K˞uȎu[kXрЌDz4uuɖ֯ـL;t$ۉ k{+
-endstream
-endobj
-863 0 obj <<
-/Length 249
-/Filter /FlateDecode
->>
-stream
-xE;N0`G),M#' EZHPQ *
-Ea ʰޡݠS%H 1͐'Qr5rf:뛁>BgB wd y$чIZXTZ^lQӪ|N:+/ܜ7Xt?3uv
-endstream
-endobj
-864 0 obj <<
-/Length 151
-/Filter /FlateDecode
->>
-stream
-x330U0P0bSCS CB.K
-endstream
-endobj
-865 0 obj <<
-/Length 231
-/Filter /FlateDecode
->>
-stream
-xm̱jP#Y|jAI!IvP:;4$!skutWv8|fe.=/NMhO^%XݣeU>n`z\Kj#/į\nDD+: D
-endstream
-endobj
-866 0 obj <<
-/Length 100
-/Filter /FlateDecode
->>
-stream
-x3533S0P
-endstream
-endobj
-867 0 obj <<
-/Length 249
-/Filter /FlateDecode
->>
-stream
-xڭ1n0 Eix0G0/H2`
-1? |& =T6L2@&fivщ^v8!3@KkE3b3uif@=֎МUn/K=
-endstream
-endobj
-868 0 obj <<
-/Length 97
-/Filter /FlateDecode
->>
-stream
-x3533S0P
-endstream
-endobj
-869 0 obj <<
-/Length 168
-/Filter /FlateDecode
->>
-stream
-x3530U0P0bKS CB.C
-@-\.
-?
-endstream
-endobj
-870 0 obj <<
-/Length 226
-/Filter /FlateDecode
->>
-stream
-xڭ=nA F=@rGX_
- wQh(!]'4Q5M{Jn:g 7J/F۬x8m^T]{A<^1F
-endstream
-endobj
-871 0 obj <<
-/Length 104
-/Filter /FlateDecode
->>
-stream
-x3535T0P0bSS CB.SrAɹ\N\
-\@Q.}O_T.}
-
-endstream
-endobj
-872 0 obj <<
-/Length 257
-/Filter /FlateDecode
->>
-stream
-xUбN02X%?n
-," & Eb?Zx ^ R2T &`}r|bkWz,{~hxv"n[67.\+R<>Y_FߢۍGwԝ:3
-endstream
-endobj
-873 0 obj <<
-/Length 219
-/Filter /FlateDecode
->>
-stream
-xڥ=
-@'XD4*L!he!Vjiht^+G)Bձew>w޼.ԗ&=
-ۍ џؘMx8mOgC
-2`و
-endstream
-endobj
-874 0 obj <<
-/Length 125
-/Filter /FlateDecode
->>
-stream
-x3533S0P
-endstream
-endobj
-875 0 obj <<
-/Length 229
-/Filter /FlateDecode
->>
-stream
-x}=@ FQ&G/;PĂD
-$(.%per 3c7Od_v@rS^_;3ZuQfIyfc4ՌhC)1Rk?
-endstream
-endobj
-876 0 obj <<
-/Length 219
-/Filter /FlateDecode
->>
-stream
-xuл
-0z8s}>JEBA`cC128Ck)? & 9x܎`')f`g0A5Cc =NEIxC/6ѳeco׳=?Xv6&6g͋ )vl$ƒ ZMCmH$0` o?f
-endstream
-endobj
-877 0 obj <<
-/Length 183
-/Filter /FlateDecode
->>
-stream
-xu
-P ES:Ah~@_KB`A'qRGEBcZD.g=.%Kh.>ɷ91/lhzFSv9Y4,{, _B:yDvA;5R`dV~Yj2Ͱ}s O:
-endstream
-endobj
-878 0 obj <<
-/Length 241
-/Filter /FlateDecode
->>
-stream
-xڍ=N@ria$K!pEDDYx.%f-b?iޛ^H! {YrSțO^Do*ΟeiΫ:|sy[{)^
-Z"-
-8CiPՐvwD: !&Qi3HPgvzڧN=52"-Zn#Jpf`ff>5R[(p~<P<*~__
-endstream
-endobj
-879 0 obj <<
-/Length 165
-/Filter /FlateDecode
->>
-stream
-xMͱ
-0+
-'0 P+AA>ZG蘡\|C˟ռ"M a\ j) kHVJx N]C!x!Dщ/JzB^ݥ ~'=ϐ 0rQȼq9
-endstream
-endobj
-880 0 obj <<
-/Length 100
-/Filter /FlateDecode
->>
-stream
-x3635S0P
-
-endstream
-endobj
-881 0 obj <<
-/Length 140
-/Filter /FlateDecode
->>
-stream
-x3137U0
-endstream
-endobj
-882 0 obj <<
-/Length 193
-/Filter /FlateDecode
->>
-stream
-xm1@E?RL!G`.+HHaRK v8Gd!R:k=/Bpģ!=HGNxo.wJRRGĤdԚORtt 0@n ҵZk+ JAO\ e.d?:+azqw"B_c(/,]o鹭k@ UH
-endstream
-endobj
-883 0 obj <<
-/Length 271
-/Filter /FlateDecode
->>
-stream
-xM1N@ EmM9hE[YZHPQ * eMF"| RۣU疮Żn[~nzi]unpM^F ;'$z * p+&JA$J@Te$-,V`BU?Uc{/Mу2hP{f2w"!oLc&*sΉ{k(?:iϗ k|
-endstream
-endobj
-884 0 obj <<
-/Length 183
-/Filter /FlateDecode
->>
-stream
-x]1
-` _P# SV:
-*:<JбC1""#$;1GlMئD6bWG(/,Fd&Sr1d
-^њʂ=&J (^Q
-endstream
-endobj
-885 0 obj <<
-/Length 155
-/Filter /FlateDecode
->>
-stream
-xE1
-0C-=B LҔZ NIݤhGء@,[
-DP-**.qCPw{|=7axg]e81dM`f7i|yM!.h'p?b
-endstream
-endobj
-886 0 obj <<
-/Length 187
-/Filter /FlateDecode
->>
-stream
-xm1@!$" $&ZY+hGq%a͒W$"J kTs#[rUHjrk(~M1ʂN1Eg,
-uL*c0zғ7% Tv
-endstream
-endobj
-887 0 obj <<
-/Length 195
-/Filter /FlateDecode
->>
-stream
-x==0 ` H +# & [nVnR t<w`ȧ8q7ʆc(?cu_ӒVg)r%nIn.\=s 
-AiT К@t mAрj-FL(T6=67YȢ ,$Qռ(y?a
-endstream
-endobj
-888 0 obj <<
-/Length 132
-/Filter /FlateDecode
->>
-stream
-x31ֳ0R0P0bc csCB.c3
-endstream
-endobj
-889 0 obj <<
-/Length 196
-/Filter /FlateDecode
->>
-stream
-xE1
-PЕmr 1`
-A+ RK E"7JW@FPw`f°ɣ&'(h56ec8A5Fj+dHn*uGգO Q.\C{žJ`]DM+YtF::w!OK/zSK Beh<D`5
-endstream
-endobj
-890 0 obj <<
-/Length 100
-/Filter /FlateDecode
->>
-stream
-x31ҳT0P0bcsJ1*26P0$s< =\
-%E\N
-\.
-\.
-5 szrr
-endstream
-endobj
-891 0 obj <<
-/Length 190
-/Filter /FlateDecode
->>
-stream
-xڍ1PDPl X &RheaBp4()w-hm^1Md6刧<DdJq諨sP^qY9Lq&ol,@ 5I  PAMV#h
-endstream
-endobj
-892 0 obj <<
-/Length 96
-/Filter /FlateDecode
->>
-stream
-x31ҳT0P0bcsJ1*26P0$s< =\
-%E\N
-\.
-\.
-10(r
-
-endstream
-endobj
-893 0 obj <<
-/Length 189
-/Filter /FlateDecode
->>
-stream
-xڭ;@!$pD+D
-,ZZhq@IAv5cibxNb1ĚN!^jF}x4G#cP*_8J7
-QeI0,$\e&i@(0<+ vJ!
-endstream
-endobj
-894 0 obj <<
-/Length 179
-/Filter /FlateDecode
->>
-stream
-x36ӳ4T0P0V5T06U0TH1*2 (@es< =\
-%E\N
-@QhX.O 00! 8̱?4 h:?t[>Փ+
-endstream
-endobj
-895 0 obj <<
-/Length 101
-/Filter /FlateDecode
->>
-stream
-x330S0P0bc3csCB.cc
-endstream
-endobj
-896 0 obj <<
-/Length 220
-/Filter /FlateDecode
->>
-stream
-xU1j@oT4pVkYĮ"W.B*'e
-t*{#T!̮`g?kX\s߻#T3.6%='*||ڼ<&W[R1R
-Bܢf=nCGfWZ`= iTL Kw"'d kxc]T X!2KrׁK?Vv
-endstream
-endobj
-897 0 obj <<
-/Length 235
-/Filter /FlateDecode
->>
-stream
-xՑj0x0ܢG@+y)C :Li ),?ŏQCD!tz}dgRE3z2![ѧkVTn;koGݬ bB> U[l
-endstream
-endobj
-898 0 obj <<
-/Length 205
-/Filter /FlateDecode
->>
-stream
-x5;0D'ri>! TH@Q%j&\7!GH"2zf<U=8TKϴӕ {SNl6q^obYj [㠼0^Nv;> D|x +[< q
-endstream
-endobj
-899 0 obj <<
-/Length 109
-/Filter /FlateDecode
->>
-stream
-x3135U0P0S54V01Q06WH1*@h
-Jr*
-
-endstream
-endobj
-900 0 obj <<
-/Length 119
-/Filter /FlateDecode
->>
-stream
-x3133V0P0bcKcsCB.c#
-endstream
-endobj
-901 0 obj <<
-/Length 100
-/Filter /FlateDecode
->>
-stream
-x3333S0P
-@-\.
-0?0Kqzrr
-endstream
-endobj
-902 0 obj <<
-/Length 111
-/Filter /FlateDecode
->>
-stream
-x333P0P0S54V03V06WH1*25(¤s<L͸=\
-%E\N
-\.
-\.
-0?€ iAqzrr
-endstream
-endobj
-903 0 obj <<
-/Length 157
-/Filter /FlateDecode
->>
-stream
-x330T0P0b3csCB.c
-endstream
-endobj
-904 0 obj <<
-/Length 152
-/Filter /FlateDecode
->>
-stream
-x3537Q0P0bScsCB.c I$r9yr+s{
-endstream
-endobj
-905 0 obj <<
-/Length 145
-/Filter /FlateDecode
->>
-stream
-x3ԳT0P0bcsJ1*26P0$s< =\
-%E\N
-\.
-\.
-
-endstream
-endobj
-906 0 obj <<
-/Length 176
-/Filter /FlateDecode
->>
-stream
-x]1
-@E'X f
-n!he!Vjih-GRngA +7y)%C3M&#Y MJatҢړIQEFe7?/4btD[Q
-endstream
-endobj
-907 0 obj <<
-/Length 206
-/Filter /FlateDecode
->>
-stream
-x}б
-0
-endstream
-endobj
-908 0 obj <<
-/Length 182
-/Filter /FlateDecode
->>
-stream
-xU1
-0  T NG:v(*޿\̊oV\SzP;$ܩd:l9%cw|TNēg{'
-endstream
-endobj
-909 0 obj <<
-/Length 106
-/Filter /FlateDecode
->>
-stream
-x3135R0PT06P06V03PH1*22
-2ɹ\N\
-F\@.}O_T.}
-endstream
-endobj
-910 0 obj <<
-/Length 179
-/Filter /FlateDecode
->>
-stream
-x3536S0PbscsCB. m
-$ɥs{IO_T.}
-<`;
-endstream
-endobj
-911 0 obj <<
-/Length 181
-/Filter /FlateDecode
->>
-stream
-xu0ҁ> bb::htG;c9g\7i1},sNW|KI>4 *-{~>w2a aj
-endstream
-endobj
-912 0 obj <<
-/Length 123
-/Filter /FlateDecode
->>
-stream
-x323P0P0T01V02W03PH1*22
-!2ɹ\N\
-F\@a.}O_T.}
-98
-endstream
-endobj
-913 0 obj <<
-/Length 123
-/Filter /FlateDecode
->>
-stream
-x323P0P0T01V02W03PH1*22
-!2ɹ\N\
-F\@a.}O_T.}
-endstream
-endobj
-914 0 obj <<
-/Length 93
-/Filter /FlateDecode
->>
-stream
-x3235V0P04
-f
-)\\
- 3Dr.'~9PKW4K)YKE!P E |.WO@.
-endstream
-endobj
-915 0 obj <<
-/Length 217
-/Filter /FlateDecode
->>
-stream
-xڝб
-@  Z\IDh}>BG=zJo w%;O-ORХ%W]fabID1:hFy"C1G1@,(
-SNjRCpa^P7%؉uQ_vb*cNjtbK*]ϯHh$>
-endstream
-endobj
-916 0 obj <<
-/Length 238
-/Filter /FlateDecode
->>
-stream
-xڅϽJA+#,\}/kl-XYH bB^dYp]V, ɤB cɤ7O<m8}VcN;x|t:ә<- Ky+ja
-endstream
-endobj
-917 0 obj <<
-/Length 317
-/Filter /FlateDecode
->>
-stream
-x]J@gba} h>0l8O0X`q\([nq\M3 `9?LajsR4y*- 7/13
-+Zc_g7|cKS<`1
-endstream
-endobj
-918 0 obj <<
-/Length 102
-/Filter /FlateDecode
->>
-stream
-x3230W0PP01V04S03PH1*(C$s<̹=\
-%E\N
-\.
-\.
- @Ƣ'W 
-endstream
-endobj
-919 0 obj <<
-/Length 193
-/Filter /FlateDecode
->>
-stream
-xڝ1
-@E'L#8MVDBBB6h9JBĿnkvvϛD2D'2r̸ٓḭڈX-Pger܎LbVlcvlr!!^IS zZ
-endstream
-endobj
-920 0 obj <<
-/Length 193
-/Filter /FlateDecode
->>
-stream
-xڝ=
-@_L2MI F0Xh)SHp6-efw7辞CiǚInLt?QڰI-Tv$fJx4
-! 9\@48 DBf/oZ/$-u^:Du7\f
-MYLZT
-endstream
-endobj
-921 0 obj <<
-/Length 168
-/Filter /FlateDecode
->>
-stream
-x3135R0P0U02U06W03RH1*26
-D2ɹ\N\
-Ɔ\@a.}O_T.}
-endstream
-endobj
-922 0 obj <<
-/Length 115
-/Filter /FlateDecode
->>
-stream
-x333P0P0U5S03P0PH1*25
-M 2ɹ\N\@.}0PRTʥ`ȥm``
-r.WO@.
-endstream
-endobj
-923 0 obj <<
-/Length 101
-/Filter /FlateDecode
->>
-stream
-x3230W0PP54P04S0WH1*P\.'O.ps.}0BIQi*S!BA,?((
-endstream
-endobj
-924 0 obj <<
-/Length 94
-/Filter /FlateDecode
->>
-stream
-xM=@PEx$^!R
-{ T߱4J2:*54`ƴ"f@BJJ7"i
-endstream
-endobj
-925 0 obj <<
-/Length 85
-/Filter /FlateDecode
->>
-stream
-x3230W0P
-%E\N
-\.
-\.
- Փ+
-endstream
-endobj
-926 0 obj <<
-/Length 148
-/Filter /FlateDecode
->>
-stream
-x3135R0P0U52T06W03RH1*26(XCs< =\
-%E\N
-@QhX.O Cu@\3f  X ؞rih4ƃqszrr
-endstream
-endobj
-927 0 obj <<
-/Length 93
-/Filter /FlateDecode
->>
-stream
-x3230W0P
-r{*r;8+r(D*ry(
-endstream
-endobj
-928 0 obj <<
-/Length 108
-/Filter /FlateDecode
->>
-stream
-x3230W0PP54P04S06WH1* (Ces<̹=\
-%E\N
-\.
-\.
- ;XTT|r
-
-endstream
-endobj
-929 0 obj <<
-/Length 205
-/Filter /FlateDecode
->>
-stream
-xmP10 1T'RS!" &T@0O)}#J)Rp/;;Mf*Csؾ O1\AI]S^ $u[7x= cbGȝ7%h* 849HH=LՉ -W_.n<#r\S{<iCH[2VvV
-endstream
-endobj
-930 0 obj <<
-/Length 109
-/Filter /FlateDecode
->>
-stream
-x333P0P0UT03P06VH1*25(%s<LM=\
-%E\N
-\.
-\.
-A+@sv\=
-endstream
-endobj
-931 0 obj <<
-/Length 271
-/Filter /FlateDecode
->>
-stream
-xڝ1N0D'JM
--^133M34@@@σzS=UV=8eխ ;@ZT<:;^&c-X "J.:B:|cZxE[ S%,vٴжL&L1"R6G_~ʼn+\q8HDCn<5iAU^7i{VSieB]^
-endstream
-endobj
-932 0 obj <<
-/Length 104
-/Filter /FlateDecode
->>
-stream
-x32ֳT0P0W52T02V03RH1*24(XCs< M=\
-%E\N
-\.
-\.
-?nr
-
-endstream
-endobj
-933 0 obj <<
-/Length 146
-/Filter /FlateDecode
->>
-stream
-x3135R0P0U52T06W03RH1*26(XCs< =\
-%E\N
-@QhX.OH@qA=p? ``` 0bM r
-
-endstream
-endobj
-934 0 obj <<
-/Length 103
-/Filter /FlateDecode
->>
-stream
-x32ֳT0P0T52T04W03RH1*24(XCs< M=\
-%E\N
-\.
-\.
- àqzrr
-endstream
-endobj
-935 0 obj <<
-/Length 148
-/Filter /FlateDecode
->>
-stream
-x3537Q0P04T06W01P05RH1*2
-F\@q.}O_T.}
-endstream
-endobj
-936 0 obj <<
-/Length 103
-/Filter /FlateDecode
->>
-stream
-x333P0P0W52T
-L @*ɥ`j`¥PRTʥ`ȥm`PP
-*
-endstream
-endobj
-937 0 obj <<
-/Length 185
-/Filter /FlateDecode
->>
-stream
-x3135R0P0Q52T0P03RH1*26(XCs<=\
-%E\N
-\.
-\.
- A=Xa
-endstream
-endobj
-938 0 obj <<
-/Length 96
-/Filter /FlateDecode
->>
-stream
-x3230W0PT52T04Q03RH1*2
-(XCes<L=\
-%E\N
-\.
-\.
-  \=
-endstream
-endobj
-939 0 obj <<
-/Length 185
-/Filter /FlateDecode
->>
-stream
-x3135R0P0Q52T0P03RH1*26(XCs<=\
-%E\N
-\.
-\.
-000"`Dd
-]P8C
-.WO@.
-endstream
-endobj
-940 0 obj <<
-/Length 316
-/Filter /FlateDecode
->>
-stream
-x}1N1EgJn|$` PY
-Ab $RQ *
-|Inϴփ ̲02LCNubq\Lo^x* @`Eō `<4Q1$+ytd)WDQyÉ\T'Z/z:
-endstream
-endobj
-941 0 obj <<
-/Length 177
-/Filter /FlateDecode
->>
-stream
-xڍ1
-P _: lkUp*
-vtr'uTl#tPyI &|Cij(*4cDWC gJs
-,uKAq ]YwfOy(*A!bD/xns
-endstream
-endobj
-942 0 obj <<
-/Length 197
-/Filter /FlateDecode
->>
-stream
-xڵ1@O(LtYqV$&ZY+h+pJ
-ú,?5CO9\EҝBeErQ8pHl̘Du%V,I$|(Mn ׆L%+WcTx+/!2f; E4|38ņl@Ն"l%m9NiO_v
-endstream
-endobj
-943 0 obj <<
-/Length 118
-/Filter /FlateDecode
->>
-stream
-x3135R0P0bc3S3CB.#
-endstream
-endobj
-944 0 obj <<
-/Length 219
-/Filter /FlateDecode
->>
-stream
-xu1nP (C$/ & &"R:TRh9J1µ#U?Y2>r̩Ř#^%4<
- M rof\aMn:ܜ?3@)'RiE:DmtBTgZ՗T' :çb`5_T=4pӑmUO{s8Z)z𿠧 уe
-endstream
-endobj
-945 0 obj <<
-/Length 241
-/Filter /FlateDecode
->>
-stream
-x}J@`
-2/\\*r`
-,DRP:hy}+S3O,c:K.%NwKg+Zw\Z& +k|vX
-endstream
-endobj
-946 0 obj <<
-/Length 183
-/Filter /FlateDecode
->>
-stream
-xڥ=
-@ )
-6Mb\a~{X'T + K
-Ba#c^cq-ލ-%s91 &p O3 ̙ )*a>4/C S>Gq#
-endstream
-endobj
-947 0 obj <<
-/Length 204
-/Filter /FlateDecode
->>
-stream
-xڥ=
-@i;MD),J--hA2E8Oi!6[fm>yd'Q=@Bf$E H:pڢNfCQh铷tD
-endstream
-endobj
-948 0 obj <<
-/Length 241
-/Filter /FlateDecode
->>
-stream
-xmJ@ƿpaM.hp`
-A+ RK E<Z%pa;,|.;>[pwZ.hpS^?hٓ.2~/n%疛W (d 8@edTEJQ$AHJ* EN2#g![(` ;ԣ)6#6=j\ ̸݌RZ!j4Ʃ
-endstream
-endobj
-949 0 obj <<
-/Length 176
-/Filter /FlateDecode
->>
-stream
-x3135R0P0V5T0T05QH1*26
-(Bds<M=\
-%E\N
-\.
-\.
-ND
-endstream
-endobj
-950 0 obj <<
-/Length 229
-/Filter /FlateDecode
->>
-stream
-xڍ1N0E4>dWPEZHPQ *-r!e
-+$- +͜aW|ÖKz*hXp8O/O5
-5& %PrH͞O
-endstream
-endobj
-951 0 obj <<
-/Length 248
-/Filter /FlateDecode
->>
-stream
-xu1N0oE"4>dCTE"T[ *vK
-$7*W H"0D@A[Q+>\qu Jzf[[j&^˞K-v&
-endstream
-endobj
-952 0 obj <<
-/Length 131
-/Filter /FlateDecode
->>
-stream
-x3135R0P0bc 3CCB.c3
-?lPvP\\\
-endstream
-endobj
-953 0 obj <<
-/Length 133
-/Filter /FlateDecode
->>
-stream
-x3135R0P0bc 3CCB.c3
-endstream
-endobj
-204 0 obj <<
-/Type /Font
-/Subtype /Type3
-/Name /F18
-/FontMatrix [0.01204 0 0 0.01204 0 0]
-/FontBBox [ -5 -21 77 62 ]
-/Resources << /ProcSet [ /PDF /ImageB ] >>
-/FirstChar 16
-/LastChar 255
-/Widths 954 0 R
-/Encoding 955 0 R
-/CharProcs 956 0 R
->> endobj
-954 0 obj
-[27.68 27.68 0 0 0 0 0 0 0 0 0 0 44.52 44.52 0 0 0 26.53 41.52 69.2 41.52 69.2 62.97 23.07 32.29 32.29 41.52 64.58 23.07 27.68 23.07 41.52 41.52 41.52 41.52 41.52 41.52 41.52 41.52 41.52 41.52 41.52 23.07 23.07 0 64.58 64.58 39.21 55.36 55.36 55.36 53.05 59.97 49.59 47.28 55.36 58.82 23.07 39.21 57.66 44.98 72.66 58.82 61.12 53.05 61.12 53.63 46.13 56.51 57.09 55.36 78.42 55.36 55.36 0 23.99 41.52 23.99 50.74 64.58 0 39.9 42.9 36.91 42.9 36.91 25.37 41.52 42.9 19.84 22.14 40.6 19.84 65.97 42.9 41.52 42.9 42.9 28.37 31.83 29.99 42.9 38.29 56.74 38.29 38.29 36.1 41.52 23.07 41.52 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 55.36 55.36 55.36 55.36 55.36 44.98 60.43 49.59 0 50.74 57.66 0 57.66 59.05 72.66 57.66 61.12 57.66 53.05 53.05 56.51 55.36 69.2 0 0 57.66 0 0 0 0 0 53.05 0 53.63 39.9 41.52 39.9 33.56 44.75 36.91 61.35 36.91 44.63 44.63 40.6 43.82 55.59 42.9 41.52 42.9 42.9 36.91 38.06 38.29 63.66 38.29 45.55 44.63 63.66 64.58 49.01 56.74 39.9 36.91 60.66 42.79 ]
-endobj
-955 0 obj <<
-/Type /Encoding
-/Differences [16/a16/a17 18/.notdef 28/a28/a29 30/.notdef 33/a33/a34/a35/a36/a37/a38/a39/a40/a41/a42/a43/a44/a45/a46/a47/a48/a49/a50/a51/a52/a53/a54/a55/a56/a57/a58/a59 60/.notdef 61/a61/a62/a63/a64/a65/a66/a67/a68/a69/a70/a71/a72/a73/a74/a75/a76/a77/a78/a79/a80/a81/a82/a83/a84/a85/a86/a87/a88/a89 90/.notdef 91/a91/a92/a93/a94/a95 96/.notdef 97/a97/a98/a99/a100/a101/a102/a103/a104/a105/a106/a107/a108/a109/a110/a111/a112/a113/a114/a115/a116/a117/a118/a119/a120/a121/a122/a123/a124/a125 126/.notdef 190/a190/a191/a192/a193/a194/a195/a196/a197 198/.notdef 199/a199/a200 201/.notdef 202/a202/a203/a204/a205/a206/a207/a208/a209/a210/a211/a212 213/.notdef 215/a215 216/.notdef 221/a221 222/.notdef 223/a223/a224/a225/a226/a227/a228/a229/a230/a231/a232/a233/a234/a235/a236/a237/a238/a239/a240/a241/a242/a243/a244/a245/a246/a247/a248/a249/a250/a251/a252/a253/a254/a255]
->> endobj
-956 0 obj <<
-/a16 912 0 R
-/a17 913 0 R
-/a28 952 0 R
-/a29 953 0 R
-/a33 914 0 R
-/a34 909 0 R
-/a35 915 0 R
-/a36 916 0 R
-/a37 917 0 R
-/a38 940 0 R
-/a39 918 0 R
-/a40 919 0 R
-/a41 920 0 R
-/a42 921 0 R
-/a43 922 0 R
-/a44 923 0 R
-/a45 924 0 R
-/a46 925 0 R
-/a47 926 0 R
-/a48 942 0 R
-/a49 943 0 R
-/a50 944 0 R
-/a51 945 0 R
-/a52 946 0 R
-/a53 947 0 R
-/a54 948 0 R
-/a55 949 0 R
-/a56 950 0 R
-/a57 951 0 R
-/a58 927 0 R
-/a59 928 0 R
-/a61 930 0 R
-/a62 929 0 R
-/a63 941 0 R
-/a64 931 0 R
-/a65 804 0 R
-/a66 805 0 R
-/a67 806 0 R
-/a68 807 0 R
-/a69 808 0 R
-/a70 809 0 R
-/a71 810 0 R
-/a72 811 0 R
-/a73 812 0 R
-/a74 813 0 R
-/a75 814 0 R
-/a76 815 0 R
-/a77 816 0 R
-/a78 817 0 R
-/a79 818 0 R
-/a80 819 0 R
-/a81 820 0 R
-/a82 821 0 R
-/a83 822 0 R
-/a84 823 0 R
-/a85 824 0 R
-/a86 825 0 R
-/a87 826 0 R
-/a88 827 0 R
-/a89 828 0 R
-/a91 932 0 R
-/a92 933 0 R
-/a93 934 0 R
-/a94 935 0 R
-/a95 936 0 R
-/a97 829 0 R
-/a98 830 0 R
-/a99 831 0 R
-/a100 832 0 R
-/a101 833 0 R
-/a102 834 0 R
-/a103 835 0 R
-/a104 836 0 R
-/a105 837 0 R
-/a106 838 0 R
-/a107 839 0 R
-/a108 840 0 R
-/a109 841 0 R
-/a110 842 0 R
-/a111 843 0 R
-/a112 844 0 R
-/a113 845 0 R
-/a114 846 0 R
-/a115 847 0 R
-/a116 848 0 R
-/a117 849 0 R
-/a118 850 0 R
-/a119 851 0 R
-/a120 852 0 R
-/a121 853 0 R
-/a122 854 0 R
-/a123 937 0 R
-/a124 938 0 R
-/a125 939 0 R
-/a190 910 0 R
-/a191 911 0 R
-/a192 855 0 R
-/a193 856 0 R
-/a194 857 0 R
-/a195 858 0 R
-/a196 859 0 R
-/a197 860 0 R
-/a199 861 0 R
-/a200 862 0 R
-/a202 863 0 R
-/a203 864 0 R
-/a204 865 0 R
-/a205 866 0 R
-/a206 867 0 R
-/a207 868 0 R
-/a208 869 0 R
-/a209 870 0 R
-/a210 871 0 R
-/a211 872 0 R
-/a212 873 0 R
-/a215 874 0 R
-/a221 875 0 R
-/a223 876 0 R
-/a224 877 0 R
-/a225 878 0 R
-/a226 879 0 R
-/a227 880 0 R
-/a228 881 0 R
-/a229 882 0 R
-/a230 883 0 R
-/a231 884 0 R
-/a232 885 0 R
-/a233 886 0 R
-/a234 887 0 R
-/a235 888 0 R
-/a236 889 0 R
-/a237 890 0 R
-/a238 891 0 R
-/a239 892 0 R
-/a240 893 0 R
-/a241 894 0 R
-/a242 895 0 R
-/a243 896 0 R
-/a244 897 0 R
-/a245 898 0 R
-/a246 899 0 R
-/a247 900 0 R
-/a248 901 0 R
-/a249 902 0 R
-/a250 903 0 R
-/a251 904 0 R
-/a252 905 0 R
-/a253 906 0 R
-/a254 907 0 R
-/a255 908 0 R
->> endobj
-957 0 obj <<
-/Length 238
-/Filter /FlateDecode
->>
-stream
-xeѱN0D"ݒG
-
-
-endstream
-endobj
-958 0 obj <<
-/Length 228
-/Filter /FlateDecode
->>
-stream
-xڵбJ@?Fys3 )@@+ RK E;!y4GHbfV0yZsYpcN/T~3jNdn\m2voOd d|svOv@$#F;!QS="HO],Kd
-Eus Jpǿ\γ3L~kSMz947!vj9mrVaigL
-endstream
-endobj
-959 0 obj <<
-/Length 237
-/Filter /FlateDecode
->>
-stream
-xڝѽn0
-endstream
-endobj
-960 0 obj <<
-/Length 116
-/Filter /FlateDecode
->>
-stream
-x33ճ4W0P
-@-\.
-KԠF
-endstream
-endobj
-961 0 obj <<
-/Length 99
-/Filter /FlateDecode
->>
-stream
-x32ӳT0P0b#S CB.C# I$r9yr+q{
-endstream
-endobj
-962 0 obj <<
-/Length 113
-/Filter /FlateDecode
->>
-stream
-x332T0P0bS CB.c3
-endstream
-endobj
-963 0 obj <<
-/Length 176
-/Filter /FlateDecode
->>
-stream
-xα03nXTٚ &v08)Fgx4G`d 1͡_r2YQDkwtB:[L#_sDFs]TvOD6*StA[a
-endstream
-endobj
-964 0 obj <<
-/Length 213
-/Filter /FlateDecode
->>
-stream
-x}Ͻ
-0
-endstream
-endobj
-965 0 obj <<
-/Length 117
-/Filter /FlateDecode
->>
-stream
-x33гT0P0bS J1*25" \.'O.pS.}(BIQi*S!BA,Q'habP'W 
-endstream
-endobj
-966 0 obj <<
-/Length 172
-/Filter /FlateDecode
->>
-stream
-x=@' #. # b&ZY*hͣpJ
-¸kW|o2˓y Ys7N +#tJ: -XmfxܟVnUca]숼D5Lfe9c9iI@z߭s|cKFĞ"繭ּ7
-endstream
-endobj
-967 0 obj <<
-/Length 197
-/Filter /FlateDecode
->>
-stream
-xu=
-@ )Av.IH`
-A+ RK Eh9J0esֿBfvͦ`8ǜFb:S2Ҧf,pɈ…)̗|܎f)k=mю
-endstream
-endobj
-968 0 obj <<
-/Length 182
-/Filter /FlateDecode
->>
-stream
-xڥ=
-@F'L2e*#Xuh{"dU<z2%MƆ
-MG59vdKTK)r+]'TzN{t A eCEط! UYD' HB :qasպhyJ…
-endstream
-endobj
-969 0 obj <<
-/Length 176
-/Filter /FlateDecode
->>
-stream
-x313T0P0V5T01R03PH1*2
-(Bds<-=\
-%E\N
-@BA, a Q0v"7cP=B@  w,:4#TLr
-
-endstream
-endobj
-970 0 obj <<
-/Length 197
-/Filter /FlateDecode
->>
-stream
-xuA
-P_ZJ-Pj"ZUˠ<G qy&('<
-9
-{ J؆pYF1K~{ȟl9]1T\8T14
-WZz-UR#7xojb/PA
-endstream
-endobj
-971 0 obj <<
-/Length 112
-/Filter /FlateDecode
->>
-stream
-x3232R0P0bCs3CCB.C HrW04
-\.
-? >??
-.WO@.
-endstream
-endobj
-972 0 obj <<
-/Length 99
-/Filter /FlateDecode
->>
-stream
-x3232R0P0bCs3CB.C HrW04
-endstream
-endobj
-973 0 obj <<
-/Length 176
-/Filter /FlateDecode
->>
-stream
-xՋ1
-@D'&G?*#BBBz=$ bK 6^1t?30،eNMrŮXĤfʪtٳ*ѬJYkI6\By굔j @7Uk aRɶtd/i>)n(r<x
-endstream
-endobj
-974 0 obj <<
-/Length 188
-/Filter /FlateDecode
->>
-stream
-xڝ1
-@EG,ir fITRb+PNya-BqӤy0ϛt>[,)҄Ҙ.dƔ~saaQ(Po$Fm|݊d.h(>- \(v
-endstream
-endobj
-975 0 obj <<
-/Length 186
-/Filter /FlateDecode
->>
-stream
-xڥ;
-@ a0͒IL!he!Vjihͣ,L2A-bvgodK Em_2w ՁlF樒-=+h"*&IL
-۾Q
-endstream
-endobj
-976 0 obj <<
-/Length 137
-/Filter /FlateDecode
->>
-stream
-x36г4T0P0bc TH1*22\Dr.'~)PKW4K)YKE!hL,?@# 
-endstream
-endobj
-977 0 obj <<
-/Length 189
-/Filter /FlateDecode
->>
-stream
-x51
-0[z hSSB`A'uTl֣3(!YtΚ<.4_rzN󍪆=Mcʚ +evɸ|@ёUU$"6)6q\۫@j-8@*e
-endstream
-endobj
-978 0 obj <<
-/Length 147
-/Filter /FlateDecode
->>
-stream
-x3635S0P0R5T06R0TH1*2
-(Bes<,=\
-%E\N
-\.
-\.
-70?PH?N~ .``
-endstream
-endobj
-979 0 obj <<
-/Length 207
-/Filter /FlateDecode
->>
-stream
-xMϿ@i'pt SxbwZ| t"캓@fLq6?\9N ܧYzB#Jߘ W
-Ŀl=7)&[(*!"oB:U3 {ɨIƞ iّ Æ-5l\ꊵ!-l<k; sVNϖ j! f^
-endstream
-endobj
-980 0 obj <<
-/Length 264
-/Filter /FlateDecode
->>
-stream
-xUѱN02D{"" &T@0(b`$#C~+)֧8mdqt(63<5?s% >xq&rYݕ=rX^Ka%w{VDn7;R{5*݂3W_P
-endstream
-endobj
-981 0 obj <<
-/Length 116
-/Filter /FlateDecode
->>
-stream
-x3331V0P0bS3S CB.
-
-endstream
-endobj
-982 0 obj <<
-/Length 245
-/Filter /FlateDecode
->>
-stream
-xڽj@ <hC4zSҩ!G#x> {@I__+wKJ
-(YH#_ټlfSfV^K)޸
-Q4zjK()SP:S$zd 2%}6<ϧM7
-endstream
-endobj
-983 0 obj <<
-/Length 114
-/Filter /FlateDecode
->>
-stream
-x3331V0P0bS3S CB.
-endstream
-endobj
-984 0 obj <<
-/Length 253
-/Filter /FlateDecode
->>
-stream
-xe?N0T"%GO!vTD$02P=#d=;I?<禹tq؝[Yu#KI̳=Afx[2f_E9
-DA[!Jh5]crKA@ +rbL~5/e+?dh_@;|o&|.ߩrr%fLșzz_
-endstream
-endobj
-985 0 obj <<
-/Length 278
-/Filter /FlateDecode
->>
-stream
-xU1N0Em4M
-+;^W&3=\V_ީ_;uGݯܢKfӟ_d׺#OniiػY3ORP5{!AazG"V'Py)Lv,{
-endstream
-endobj
-986 0 obj <<
-/Length 197
-/Filter /FlateDecode
->>
-stream
-xu=
-@ )Av.IH`
-A+ RK Eh9J0esֿBfvͦ`8ǜFb:S2Ҧf,pɈ…)̗|܎f)k=mю
-endstream
-endobj
-987 0 obj <<
-/Length 237
-/Filter /FlateDecode
->>
-stream
-xڝбN0C*ݒG
-endstream
-endobj
-988 0 obj <<
-/Length 173
-/Filter /FlateDecode
->>
-stream
-xmα
-0
-'D
-endstream
-endobj
-989 0 obj <<
-/Length 114
-/Filter /FlateDecode
->>
-stream
-x36ճP0P0bcc CB.#K
-endstream
-endobj
-990 0 obj <<
-/Length 146
-/Filter /FlateDecode
->>
-stream
-x35ҳ0R0P0R54V05T0PH1*2
-&\@q.}O_T.}
-endstream
-endobj
-991 0 obj <<
-/Length 197
-/Filter /FlateDecode
->>
-stream
-xuA
-P_ZJ-Pj"ZUˠ<G qy&('<
-9
-{ J؆pYF1K~{ȟl9]1T\8T14
-WZz-UR#7xojb/PA
-endstream
-endobj
-992 0 obj <<
-/Length 254
-/Filter /FlateDecode
->>
-stream
-xMN0/P<B$QQT&KHd@1QF2_͏rLxL(G?>n^~vi"L7v\=\uwxxj{vq3w;| 2hf*# \Y( ,E[#"(jH4%|Y *M'* Vf/^ 2:>dD{/dȦ~G%N;bE3GL! J\(!W
-endstream
-endobj
-993 0 obj <<
-/Length 196
-/Filter /FlateDecode
->>
-stream
-x]
-P E#,~{!BI)~ciL"r ɽ7י E4 ,1r4l{ٟ0n(r.d_r;bf$sF[Kf>#`f~+jC^p1U
-endstream
-endobj
-994 0 obj <<
-/Length 179
-/Filter /FlateDecode
->>
-stream
-x=̱
-0C>t
-
-ftr'utPtNW881Ci[~~.ENh)\2pR|KҫVxO w= eFFL6`aAϰ'p=/!=%=OyaSOE׎:ڞa]b
-endstream
-endobj
-995 0 obj <<
-/Length 221
-/Filter /FlateDecode
->>
-stream
-xu1j@1*#hNN8r\.]$$҆)}QBh2y`?0M^PFlYRU!,aUfK̓hGz{}?Y=QfM9e;ה8PNy^GZHf#
-u`btmAx_
-endstream
-endobj
-996 0 obj <<
-/Length 198
-/Filter /FlateDecode
->>
-stream
-x=ν
-0p=iiV08shGACo.C~܅a2G)g>tLDR 'ZFᗴ]r;f.xr#[)J=~
-endstream
-endobj
-997 0 obj <<
-/Length 144
-/Filter /FlateDecode
->>
-stream
-x337T0P
-endstream
-endobj
-998 0 obj <<
-/Length 202
-/Filter /FlateDecode
->>
-stream
-x]ϱ
-@ B>BUj;:9::(:_G>BJ\8?! ^
-endstream
-endobj
-999 0 obj <<
-/Length 114
-/Filter /FlateDecode
->>
-stream
-x313T0P0b#c CB.c3
-endstream
-endobj
-1000 0 obj <<
-/Length 188
-/Filter /FlateDecode
->>
-stream
-xڝ1
-@EG,ir fITRb+PNya-BqӤy0ϛt>[,)҄Ҙ.dƔ~saaQ(Po$Fm|݊d.h(>- \(v
-endstream
-endobj
-1001 0 obj <<
-/Length 114
-/Filter /FlateDecode
->>
-stream
-x313T0P0b#c CB.c3
-endstream
-endobj
-1002 0 obj <<
-/Length 186
-/Filter /FlateDecode
->>
-stream
-xڥ;
-@ a0͒IL!he!Vjihͣ,L2A-bvgodK Em_2w ՁlF樒-=+h"*&IL
-۾Q
-endstream
-endobj
-1003 0 obj <<
-/Length 182
-/Filter /FlateDecode
->>
-stream
-xڥ=
-@F'L2e*#Xuh{"dU<z2%MƆ
-MG59vdKTK)r+]'TzN{t A eCEط! UYD' HB :qasպhyJ…
-endstream
-endobj
-1004 0 obj <<
-/Length 116
-/Filter /FlateDecode
->>
-stream
-x313S0P0bcKc CB.c HrW06
-endstream
-endobj
-1005 0 obj <<
-/Length 228
-/Filter /FlateDecode
->>
-stream
-xUϽj@ p- c͐tP
-&cK_С᭫B|F)hj
-BҔ|(qQ~@ubsG X-w܀rBl( &unzp>&5
-endstream
-endobj
-1006 0 obj <<
-/Length 220
-/Filter /FlateDecode
->>
-stream
-x͒
-0O
-д*N⤎Q|>1B陶q#KQD=jǒˈv1Qv]5|_m8JPHvQ\E2G1Z)F1uL 2PhRw-4| +-qC1pdr`BmM ezrŌMA=|sGΗ7+{{IV+&L5
-endstream
-endobj
-1007 0 obj <<
-/Length 218
-/Filter /FlateDecode
->>
-stream
-x1N0Dgo|,Z:K" *
-D JnE)xƳ/.c;k~铆MAǑ
-wzKaﯟw
-LJ)1STdnF&:wN"Hhhe6L
-endstream
-endobj
-1008 0 obj <<
-/Length 123
-/Filter /FlateDecode
->>
-stream
-x3532Q0P0U54V05P0PH1*2 Rɹ\N\
-&&\@q.}O_T.}
-endstream
-endobj
-1009 0 obj <<
-/Length 131
-/Filter /FlateDecode
->>
-stream
-x334V0P0bc CB. m
-$ɥs{IO_T.}
-endstream
-endobj
-1010 0 obj <<
-/Length 117
-/Filter /FlateDecode
->>
-stream
-x331V0P0b3c CB.S
-endstream
-endobj
-1011 0 obj <<
-/Length 132
-/Filter /FlateDecode
->>
-stream
-x3735Q0P0S54V0T0PH1*23(Bs<̌=\
-%E\N
-@BA,}C=? 3?8hP iL3r
-
-endstream
-endobj
-1012 0 obj <<
-/Length 160
-/Filter /FlateDecode
->>
-stream
-x33Գ0R0P0asc CB.SC
-@-\.
- 
-U%T;0
-a{?9\=
-endstream
-endobj
-1013 0 obj <<
-/Length 159
-/Filter /FlateDecode
->>
-stream
-x313T0P0bCc CB.c
-
-endstream
-endobj
-1014 0 obj <<
-/Length 182
-/Filter /FlateDecode
->>
-stream
-xm10  $/=B|
-uTD$02`nQz;TL ycXM)x1p3y-c|AzMmx]!v+4x4ը4WDfB"hFeCȰļUj<C ꄷ.7N|I
-endstream
-endobj
-1015 0 obj <<
-/Length 100
-/Filter /FlateDecode
->>
-stream
-x3133W0
-endstream
-endobj
-1016 0 obj <<
-/Length 196
-/Filter /FlateDecode
->>
-stream
-xڽ1
-@E'X;dc$U F0Xu/Qr-SM!kWͦiiNl(YrG:A1bM2,(@> u"'
-endstream
-endobj
-1017 0 obj <<
-/Length 136
-/Filter /FlateDecode
->>
-stream
-x3133W0P0b ebUel 䃹 \.'O.pcc.}(BIQi*S!BA,ԃ@ " a"A8 +B O p"
-endstream
-endobj
-1018 0 obj <<
-/Length 233
-/Filter /FlateDecode
->>
-stream
-xuN1 }!t/P?8Ā
-#QnPa0SlNz#p.eKDE፷GYn8Yp/_7qS'3;HDQUժU% c^'auT4_X^
-endstream
-endobj
-1019 0 obj <<
-/Length 238
-/Filter /FlateDecode
->>
-stream
-xڍJ@G B &+L!he!ɣRnqwfZ 6?IR9-W^Y^^y۱՚w~{u&VRqf" 
-endstream
-endobj
-1020 0 obj <<
-/Length 184
-/Filter /FlateDecode
->>
-stream
-xڝϽ
-0
-cv+tǟDH >rF
-endstream
-endobj
-1021 0 obj <<
-/Length 210
-/Filter /FlateDecode
->>
-stream
-xڝ;j@ )a/⹀znA* N"rRHk97Qt-N惙fbI1e4Ii<0ev9|bQ},G5jKbmIo {J1B7?p^5$ڛ
-endstream
-endobj
-1022 0 obj <<
-/Length 235
-/Filter /FlateDecode
->>
-stream
-xڍбN@ `G"YHy4IHd@bFA(yC Pn@'o>iR9-g^X_xձbR+y}y{d>Zn+)[ D [ (±2Q4c24? O—7݁_>0`J0b"ELJ#΄!B Rβcl*]>C [⋎o=J
-endstream
-endobj
-1023 0 obj <<
-/Length 183
-/Filter /FlateDecode
->>
-stream
-xڕ1@!&xhEVJ--4Z/G(¸JcH,&?0c)pDфpS4m6
-ņ(ԒEDVC6ƔvLM}
-M,
-endstream
-endobj
-1024 0 obj <<
-/Length 212
-/Filter /FlateDecode
->>
-stream
-xڕ1P KHxz}# b"NI4:?Q8#־8 m̧iF!%4)) gbHi: 24+)t=h͂"4%#
-X>@-
-U64q3fku
-endstream
-endobj
-1025 0 obj <<
-/Length 234
-/Filter /FlateDecode
->>
-stream
-xڕ=N@\4
-endstream
-endobj
-203 0 obj <<
-/Type /Font
-/Subtype /Type3
-/Name /F32
-/FontMatrix [0.01204 0 0 0.01204 0 0]
-/FontBBox [ 0 -17 69 61 ]
-/Resources << /ProcSet [ /PDF /ImageB ] >>
-/FirstChar 21
-/LastChar 255
-/Widths 1026 0 R
-/Encoding 1027 0 R
-/CharProcs 1028 0 R
->> endobj
-1026 0 obj
-[45.67 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 45.67 45.67 45.67 45.67 45.67 45.67 45.67 45.67 45.67 45.67 0 0 0 0 0 0 0 60.89 0 58.36 0 0 0 60.89 65.97 26.99 0 0 48.21 0 0 0 58.36 0 58.36 0 60.89 63.43 0 0 0 0 0 0 0 0 0 0 0 43.59 0 40.6 46.59 42.44 0 0 0 21.22 0 0 21.22 71.96 0 45.67 46.59 0 30.91 35.01 33.56 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 63.43 0 63.43 0 0 63.43 65.97 63.43 0 0 0 60.89 0 60.89 0 0 0 0 0 0 0 0 0 0 43.59 45.67 43.59 35.98 52.82 42.44 66.89 40.6 49.13 49.13 44.06 49.71 61.82 46.59 45.67 46.59 46.59 40.6 40.6 41.52 69.43 41.52 52.24 49.13 69.43 72.54 0 61.82 43.59 0 0 46.13 ]
-endobj
-1027 0 obj <<
-/Type /Encoding
-/Differences [21/a21 22/.notdef 48/a48/a49/a50/a51/a52/a53/a54/a55/a56/a57 58/.notdef 65/a65 66/.notdef 67/a67 68/.notdef 71/a71/a72/a73 74/.notdef 76/a76 77/.notdef 80/a80 81/.notdef 82/a82 83/.notdef 84/a84/a85 86/.notdef 97/a97 98/.notdef 99/a99/a100/a101 102/.notdef 105/a105 106/.notdef 108/a108/a109 110/.notdef 111/a111/a112 113/.notdef 114/a114/a115/a116 117/.notdef 200/a200 201/.notdef 202/a202 203/.notdef 205/a205/a206/a207 208/.notdef 211/a211 212/.notdef 213/a213 214/.notdef 224/a224/a225/a226/a227/a228/a229/a230/a231/a232/a233/a234/a235/a236/a237/a238/a239/a240/a241/a242/a243/a244/a245/a246/a247/a248/a249 250/.notdef 251/a251/a252 253/.notdef 255/a255]
->> endobj
-1028 0 obj <<
-/a21 1015 0 R
-/a48 1016 0 R
-/a49 1017 0 R
-/a50 1018 0 R
-/a51 1019 0 R
-/a52 1020 0 R
-/a53 1021 0 R
-/a54 1022 0 R
-/a55 1023 0 R
-/a56 1024 0 R
-/a57 1025 0 R
-/a65 957 0 R
-/a67 958 0 R
-/a71 959 0 R
-/a72 960 0 R
-/a73 961 0 R
-/a76 962 0 R
-/a80 963 0 R
-/a82 964 0 R
-/a84 965 0 R
-/a85 966 0 R
-/a97 967 0 R
-/a99 968 0 R
-/a100 969 0 R
-/a101 970 0 R
-/a105 971 0 R
-/a108 972 0 R
-/a109 973 0 R
-/a111 974 0 R
-/a112 975 0 R
-/a114 976 0 R
-/a115 977 0 R
-/a116 978 0 R
-/a200 979 0 R
-/a202 980 0 R
-/a205 981 0 R
-/a206 982 0 R
-/a207 983 0 R
-/a211 984 0 R
-/a213 985 0 R
-/a224 986 0 R
-/a225 987 0 R
-/a226 988 0 R
-/a227 989 0 R
-/a228 990 0 R
-/a229 991 0 R
-/a230 992 0 R
-/a231 993 0 R
-/a232 994 0 R
-/a233 995 0 R
-/a234 996 0 R
-/a235 997 0 R
-/a236 998 0 R
-/a237 999 0 R
-/a238 1000 0 R
-/a239 1001 0 R
-/a240 1002 0 R
-/a241 1003 0 R
-/a242 1004 0 R
-/a243 1005 0 R
-/a244 1006 0 R
-/a245 1007 0 R
-/a246 1008 0 R
-/a247 1009 0 R
-/a248 1010 0 R
-/a249 1011 0 R
-/a251 1012 0 R
-/a252 1013 0 R
-/a255 1014 0 R
->> endobj
-1029 0 obj <<
-/Length 557
-/Filter /FlateDecode
->>
-stream
-xڝ1n0a pT$ Mz(NNi ڙ:Z#h %R$tF@I,%;3ުW?(᷸;>9|PA?^s9!YƘ}ҖאGՎWPI3jͲGҬ#kX&ȞHfiYC;NNv6 kX:טҙQifT!SWzZi
-!=FBCX MЧA!ϾG,P@aDy0F+'t`zYSxG@a@2k(˺MM 7jfFuQu{CneSq@#h唲t:6cH%I#i҉bT.fMT@n9-H^1'+fXZ!*Q(?tN|] 7pN-҂WL`UY+ hbkz`700e~.eEVCY 4"zȽč] 7]ʨ%pʦǓ*W
-endstream
-endobj
-1030 0 obj <<
-/Length 477
-/Filter /FlateDecode
->>
-stream
-xJ0Sr(/ 4/º=z ԣEQ=M3SiYXvLv2$x9=_dsX<k iOl7&]k ¢%Y1_<tI7*2L5(3[T*! zʎLL+^0D@=Gf8Á5;SaKxm
-\f,qLw\G),9ALMxssOLNEo̵t\Nq L8eyg#j?şgvy}c|s :zyjAHrH}#X1s"`*^ GDr_k/ˠmn[OVس;5Dz-HK~A~BF
-39w*x&6v;)i(
-endstream
-endobj
-1031 0 obj <<
-/Length 486
-/Filter /FlateDecode
->>
-stream
-xֱN0
-CA\gz($^a.!P^67D
- rMAv
-endstream
-endobj
-1032 0 obj <<
-/Length 140
-/Filter /FlateDecode
->>
-stream
-x34732U0P02&@lbUehd2
-
-endstream
-endobj
-1033 0 obj <<
-/Length 105
-/Filter /FlateDecode
->>
-stream
-x332Q0P02&
-&
-)\\F@0,ɥ`dȥU()*Mw
-pV
-(Dury(PQ4(0j
-endstream
-endobj
-1034 0 obj <<
-/Length 140
-/Filter /FlateDecode
->>
-stream
-x34636S0P02F&
-&
-)\\
- 
-%E\N
-\.
-\.
-?0AQ(g3r(0
-endstream
-endobj
-1035 0 obj <<
-/Length 303
-/Filter /FlateDecode
->>
-stream
-xԱN0Tn#Om
-ELJȀ@0'G#d؁&]b`IŊ},/ v6w7y>w`/H+H -3̍ij;J|y${L)[1eL| F,5A-nM2Sw3RRωϺE@tsH7u0ap9<f3@p8}oMtRTfQbFwT8][EM=аY! F@ GnDȑ#n2z/$
-endstream
-endobj
-1036 0 obj <<
-/Length 443
-/Filter /FlateDecode
->>
-stream
-xڵ1O0
-endstream
-endobj
-1037 0 obj <<
-/Length 149
-/Filter /FlateDecode
->>
-stream
-x=
-@w9g@VbseK+" d <uٱZ8>)heHxA J k]gHYBj+Beϣг7J_D+(ϦO2ȨvH2`7<
-endstream
-endobj
-1038 0 obj <<
-/Length 300
-/Filter /FlateDecode
->>
-stream
-x햱N02T%{HDh H01 &`d(y<J!cϱ/i/w퓜JeW;PQu/ixD#P4w[|RX>CEME9Y1bĈ o>zohZ?cFzJ3\uS|KNMyjVdDntБy:,:CB-VK/m~u׺ye(ї6HI:{qZJSAhJuu6+̂#/p|V
-endstream
-endobj
-1039 0 obj <<
-/Length 367
-/Filter /FlateDecode
->>
-stream
-xӱN0`["y#/
- Q#RIX:
-3#rD)~cK')"E+SD7R6.(kܢԑSB ᬞXry.B.1ārzZj ˜#;~2n Reҹ#=QxL234$YSuoHʪG9IkXόqN]//
-endstream
-endobj
-1040 0 obj <<
-/Length 352
-/Filter /FlateDecode
->>
-stream
-xݔJ0SzGym*lOu{AA=zP<Z%cL&i.GL&Ua
-T9%Et54'I;Q]CչUw/oZ_nԷ
-QlnCq鷕9Ȓ4}_wK/Pj牸.NLcRsA2. Bt'vW<l)ԫ}eJrKZbz+M!7I tۚY:/5% #7%%E_3ߍ֞vy<7 }}z7|N\w裡
-endstream
-endobj
-1041 0 obj <<
-/Length 378
-/Filter /FlateDecode
->>
-stream
-xձN0
- mU
-endstream
-endobj
-1042 0 obj <<
-/Length 379
-/Filter /FlateDecode
->>
-stream
-xڵj0m<hm֓ M
-ԡ
-m-<Eу;HP';[Y{}\і^ FYho|na-Vv{<nA;&MO~I~4h%f037aaP 5j1<ZeSXvXFa
-f"9F7y gD$(`[r\hWUص7 6ZOX4$<3Ox>8̷v.ˣO
-\dJyLy</ES& +Ÿm ?pyL#A̜IJk'.2=<ѨV6?*7&=y$"
-endstream
-endobj
-1043 0 obj <<
-/Length 117
-/Filter /FlateDecode
->>
-stream
-x337S0P0
-%E\N
-@ahX.O^{?"00@\=
-endstream
-endobj
-1044 0 obj <<
-/Length 102
-/Filter /FlateDecode
->>
-stream
-x337S0P0
-%E\N
-@ahX.O?F0ʸ\=
-endstream
-endobj
-1045 0 obj <<
-/Length 351
-/Filter /FlateDecode
->>
-stream
-xJ0
--!<,8IBۀHWuU2i'-DslB̋36+us)Z&nf<mfM~%;B'Sj?F+&?>N/}?[(a
-endstream
-endobj
-1046 0 obj <<
-/Length 364
-/Filter /FlateDecode
->>
-stream
-xݔN0SetK!~HNJȀbFɣQ3D1qܪ*+llG.kQBʕ0&d6ۥجvO@qg;!؋g)"#:#Z*8HAXi4fΐذvNMj֞grI䲧+#m*N4_kaSZ"tl}Jg'*)R
-S 4BS1|Cjc?Iw:]s)G=I^OLYƈ^k@w
-iBr:{ݫJ]*-ei7HN/9z1$a=M{-‹q
-</4:%
-endstream
-endobj
-1047 0 obj <<
-/Length 372
-/Filter /FlateDecode
->>
-stream
-x=N0Ji
-D (9–YmC@…ϱNΏRD8:U(J<E
-Ije>:N$1WZ}<Cqdɖ>b=cBF 6c
-#A$@eS:{\'Fg
-Ue@N$ih-4D{h
-هQc܄[y]_^0\iuYxnwJ>];:p.RjHغ[OKS
-  w!ՙ\fp 4
-endstream
-endobj
-1048 0 obj <<
-/Length 215
-/Filter /FlateDecode
->>
-stream
-xѱ10<AZBBh(>X3ߜ vV" ކ9َ-;[}R62e ewꔗ2r&/ItޅZbAAldva l,l-$BmmrGhW@kx;_l} JtH
-endstream
-endobj
-1049 0 obj <<
-/Length 374
-/Filter /FlateDecode
->>
-stream
-xmӽN0pG"y)_
-N1~S?fY,.8M0)xXls(:?(+
- )c3,Iʡl_gx]@rR}ԋ!v[ߕ9CCR:Q&A
-%+à7J[ ý ۻ?~g}2
-endstream
-endobj
-1050 0 obj <<
-/Length 206
-/Filter /FlateDecode
->>
-stream
-xڳ30W0P0Q5T0R04PH1*2
-endstream
-endobj
-1051 0 obj <<
-/Length 418
-/Filter /FlateDecode
->>
-stream
-xڅսN0aI.^N$GMd08Fg4.(P@x6Z.w4'ӥ8=Μl(g+= n$n+w },hD+ZB#hkK4׆;pd8pb8pi0! ^Gp@-ȉMx]C ˆY '{p9`ȵai#rd8<stt>Cہn1=fY,_3Xnt/n/KKv)k-4ϗN|i4ϗ.-w<i/,]"e#KͮZ+7Ȁ-G|rj5-qwX[ ?ȿ2ڎ6Ԏpc8{4<l`pg]k{9*o^h"on6
-endstream
-endobj
-1052 0 obj <<
-/Length 625
-/Filter /FlateDecode
->>
-stream
-xeֽn@p[.VƏ}|&!
-$@Q%E"m/+]n؝~ߝzy1u}생oh.ܱxÎǷ㏯v{Mvw'wdn?_âC``
-!rȩ
-
-%B*(ZaΩZ³tyjZ`(jjM2ԩ055fjHR
-@+W-&` $-R,
-GA<Ty$4x>>: > }V64ME08 UNET Nݡy nz *`/5XExu[>?⛁
-endstream
-endobj
-1053 0 obj <<
-/Length 139
-/Filter /FlateDecode
->>
-stream
-x34Գ0S0P02&@lbUe2
-@.}BIQi*S!BA, 0?|GC 4>GQ>Aopzrr
-endstream
-endobj
-1054 0 obj <<
-/Length 571
-/Filter /FlateDecode
->>
-stream
-x;n0%l!A@,6 pl [HAeI-MGX Ȉ)bWF%>gw@);7n(;7F~vs[x_>-Dw&B{'2xKgFm< Be
-V:qll0"]JLt܉@+P^vڋ.iS]҇'†eTj x %OٻgZNL -Xe=g aO@U6[  k fg]
-endstream
-endobj
-1055 0 obj <<
-/Length 134
-/Filter /FlateDecode
->>
-stream
-x34Գ0S0P02&@lbUe2
-@.}BIQi*S!BA,p`Q(?GC_ƷgW\=
-endstream
-endobj
-1056 0 obj <<
-/Length 603
-/Filter /FlateDecode
->>
-stream
-xڅ10m&GHN@APEZ)@T@I:(RnR8v=#FZieb<ǏUS]_{yVOSkrPs5;;Sڸ~|6Uk}[5觰smh娷Pрhr֎nMh
-f2r ;4gn&φVI_yѠPhqig+(@\-W:<Z!cG
-"Q]D4c\݅٩:CtqwD+'{O$EE9DEs}=NI,{FtJLBP˒hƍF0EV;m)%$Rl?c^hUloӣH\@p 51@\(^0Ɏ+!5&q NaI(74CG3~2:&v Z)/v~3yÐW»yۧ)gDeMJ`Ib Kr-N"%)ʄʅ;w}rY|*Bf4K4I4H$֐P $ZY$6ռ5
-endstream
-endobj
-1057 0 obj <<
-/Length 651
-/Filter /FlateDecode
->>
-stream
-xڅֽn@\XƏyl De)-@T@Iy3QRl<sΜ3cFYex?oφWvxҎ/u4?x3X廹;~`.77߽mGO>m_SmK2]_Rt=5۶hsQ?hR.=B6B`^{"뤹$ZC]U`ZkdmNSJLA6b+kNQUzi*tIm_m(h)iN#V`pv&XkVbmp)*Vu.(7NZ^$+IJRTYJI=Rc4D Em9+IJ`%X/͹TxX9ÖG_<(8<PU9uم?`S9}0'.tbk%k[ե)fSVwTl5 ݧb=>B]WdO)LUhofjX--hAlÁU˂5<Y#1YgmLX"Z+>BJxĤקUa
-=V_mQGU+{v"ܮùE{pbY+GJ @|+wEtxhUIKve[M+Q7gj
-endstream
-endobj
-1058 0 obj <<
-/Length 367
-/Filter /FlateDecode
->>
-stream
-xӱN0`["y#/
- Q#RIX:
-3#rD)~cK')"E+SD7R6.(kܢԑSB ᬞXry.B.1ārzZj ˜#;~2n Reҹ#=QxL234$YSuoHʪG9IkXόqN]//
-endstream
-endobj
-1059 0 obj <<
-/Length 526
-/Filter /FlateDecode
->>
-stream
-xݕn1ƽraɍ~3
-9QY
-AH@ %Q׏vrpFֱ3p'%%W|3fGѯ]ڪWZiVKM\o&>._?xǏ透WiIЉHrTH 2$H ,
- 0d`n ZtN5m%ac"ۉ 2PeHK fH?I6 a(y&{ĊȚZ e3er. H'6z0xhdp"ٌ.f3Nf25ԸicZ2RH)?4VU\Kvf#w$&R\ܾ(E8(!:GQS,ڟ"ɽ;Mg/%n=K@I
-endstream
-endobj
-1060 0 obj <<
-/Length 312
-/Filter /FlateDecode
->>
-stream
-xڭ=N0T #' 1LJȀb* (=B QvD_~yQJR'/dq!_}.eOrSPvg)eۇ(g%v%檝`<{0717ڜm= {5, .䟼?)y|kWNzj9˚kpwS =1i Ba:_lri"&,~`\<@}[OTCΧ1 *CSsG.2h]>B=?
-endstream
-endobj
-1061 0 obj <<
-/Length 124
-/Filter /FlateDecode
->>
-stream
-xڳԳ0R0P0&
-F
-)\\&@ IrW07
-s{*r;8+r(D*ry(z~00m`5٬z8(Փ+
-endstream
-endobj
-1062 0 obj <<
-/Length 239
-/Filter /FlateDecode
->>
-stream
-xӽ
-0[4 ~M?N⤎|ѡxVJSR/\UBX_ǖs+༙{]MugKhƘ`
-endstream
-endobj
-1063 0 obj <<
-/Length 379
-/Filter /FlateDecode
->>
-stream
-xڵj0m<hm֓ M
-ԡ
-m-<Eу;HP';[Y{}\і^ FYho|na-Vv{<nA;&MO~I~4h%f037aaP 5j1<ZeSXvXFa
-f"9F7y gD$(`[r\hWUص7 6ZOX4$<3Ox>8̷v.ˣO
-\dJyLy</ES& +Ÿm ?pyL#A̜IJk'.2=<ѨV6?*7&=y$"
-endstream
-endobj
-1064 0 obj <<
-/Length 618
-/Filter /FlateDecode
->>
-stream
-xڅ@![L3
-[R &r·0 xݧ1| y>~ wпsпCE7{?vÇpN)ݪ5iOM⣘v
-endstream
-endobj
-1065 0 obj <<
-/Length 384
-/Filter /FlateDecode
->>
-stream
-xڭ;N0'rM
-D GQ|) ~ĞV"6Wgjԥ:iU4;Wڽu˻eokYתN=y
-{D֣@l
-L+yK*K<۸kf΢Lс;Jx줃0uՒ=S ڄ C&|EyL20֌ }W!tBR\Om%c<0q6i3@qUԫ=gBb_yN&†Y5!G>w9: H)y) @?*[Dyg
-endstream
-endobj
-1066 0 obj <<
-/Length 314
-/Filter /FlateDecode
->>
-stream
-xuӱN0aI>kLd"^Ltr0N^Ga}y m@;eOKyyvqK+O!v(Bi+7xUɊ2+[Š8G'x *2#PZْ48&ÈatGMСk%(4x :ܣ34q:+48-4gΉMΖ1[GtBls=:9AhYm_6gY,_ݦ۹y x ]-Z,nYsa̤
-endstream
-endobj
-1067 0 obj <<
-/Length 436
-/Filter /FlateDecode
->>
-stream
-xԽn0p?AT,JeLLI~4<2 N9)g@kPIMp-,nx8ZT_ݸo˯:|h2JI
-mNٮL1йFtpYS#pk*iK;
-endstream
-endobj
-1068 0 obj <<
-/Length 410
-/Filter /FlateDecode
->>
-stream
-xu;N@`G."m#'q
-67[p|H4.Vv^iHaq3/j.u}曕ݫkN=>J_i]uSW]Ǯjdz67v~ڭ_C_g Pt@b\&9A
-ffh♙#Rf3jܥK3cܥ+bQ!i.[w
-endstream
-endobj
-1069 0 obj <<
-/Length 224
-/Filter /FlateDecode
->>
-stream
-xӱ
-0
-endstream
-endobj
-1070 0 obj <<
-/Length 395
-/Filter /FlateDecode
->>
-stream
-xڍ1O0pI>r3759Ltr0Nѹ$0dsM³}BV,т\8|9緂=0!gfc7la%,;,ۜ;Ώ`ٚ_Gf%@4
-L
-endstream
-endobj
-1071 0 obj <<
-/Length 126
-/Filter /FlateDecode
->>
-stream
-x3423U0P02
-F
-)\\ Q,ɥ`aʥU()*Mw
-pV0wQ6T0tQ
-endstream
-endobj
-1072 0 obj <<
-/Length 364
-/Filter /FlateDecode
->>
-stream
-xݔN0SetK!~HNJȀbFɣQ3D1qܪ*+llG.kQBʕ0&d6ۥجvO@qg;!؋g)"#:#Z*8HAXi4fΐذvNMj֞grI䲧+#m*N4_kaSZ"tl}Jg'*)R
-S 4BS1|Cjc?Iw:]s)G=I^OLYƈ^k@w
-iBr:{ݫJ]*-ei7HN/9z1$a=M{-‹q
-</4:%
-endstream
-endobj
-1073 0 obj <<
-/Length 125
-/Filter /FlateDecode
->>
-stream
-x3423U0P02
-F
-)\\ Q,ɥ`aʥU()*Mw
-pV0wQ6T0tQ<
-endstream
-endobj
-1074 0 obj <<
-/Length 372
-/Filter /FlateDecode
->>
-stream
-x=N0Ji
-D (9–YmC@…ϱNΏRD8:U(J<E
-Ije>:N$1WZ}<Cqdɖ>b=cBF 6c
-#A$@eS:{\'Fg
-Ue@N$ih-4D{h
-هQc܄[y]_^0\iuYxnwJ>];:p.RjHغ[OKS
-  w!ՙ\fp 4
-endstream
-endobj
-1075 0 obj <<
-/Length 352
-/Filter /FlateDecode
->>
-stream
-xݔJ0SzGym*lOu{AA=zP<Z%cL&i.GL&Ua
-T9%Et54'I;Q]CչUw/oZ_nԷ
-QlnCq鷕9Ȓ4}_wK/Pj牸.NLcRsA2. Bt'vW<l)ԫ}eJrKZbz+M!7I tۚY:/5% #7%%E_3ߍ֞vy<7 }}z7|N\w裡
-endstream
-endobj
-1076 0 obj <<
-/Length 132
-/Filter /FlateDecode
->>
-stream
-x3443T0P0bC K#CB.CCJr1
-s{*r;8+
-\=
-endstream
-endobj
-1077 0 obj <<
-/Length 481
-/Filter /FlateDecode
->>
-stream
-xڕj@:ANI
-)Sc hz \zThGv]__\\7jۮx}͓_}8gw<;lMEo SU0 u.a+1":; /%fߤ8_Qq('PP~P
- PH
-ue 3e[&
-endstream
-endobj
-1078 0 obj <<
-/Length 534
-/Filter /FlateDecode
->>
-stream
-x;N@cM
-{[7Fj&AZɆA7e1P7 5iK{|PkuѢ648 .Z#=)Y}r'o"좃i۽m}hQ0;N(R#Q.g4cs7QQDNSI=1vɒ SeVp[vwT.TOdWE+:JV*'
-' eLޮV?Tޞ*mN>||yƿF:2U`
-endstream
-endobj
-1079 0 obj <<
-/Length 447
-/Filter /FlateDecode
->>
-stream
-xuN0 ;P)=BNƐ N'ؑQ i&q'F"Һک%^^oϘ^o7ըwe+A;LݠGn w렺6'g5쵅sG,
-endstream
-endobj
-1080 0 obj <<
-/Length 144
-/Filter /FlateDecode
->>
-stream
-x;
-1*4L!he!VjihD^!Rh1'{ G)A<'(|=@5)Fp-x1<_wTwTZu 9pf8
-endstream
-endobj
-1081 0 obj <<
-/Length 184
-/Filter /FlateDecode
->>
-stream
-xԱ
-@
-endstream
-endobj
-1082 0 obj <<
-/Length 140
-/Filter /FlateDecode
->>
-stream
-x3031W0P02
-F
-)\\&f
- 1 ,ɥ
-
-endstream
-endobj
-1083 0 obj <<
-/Length 159
-/Filter /FlateDecode
->>
-stream
-x˱
-0=Ž&ةP+AAAidiS;B5™H+_ @KF2|C@1n~67P~+<ŏgp.ә+65)s*mBPPPPP[8LcXa6/
-endstream
-endobj
-1084 0 obj <<
-/Length 256
-/Filter /FlateDecode
->>
-stream
-xԽ
-0
-endstream
-endobj
-1085 0 obj <<
-/Length 240
-/Filter /FlateDecode
->>
-stream
-xұ
-0
-endstream
-endobj
-1086 0 obj <<
-/Length 359
-/Filter /FlateDecode
->>
-stream
-xڥӱN@`6<\jL0XF|º;;$5\ܿoN.63w&WojG[Oj;><Qu|v{{izCoG5LA\shP#4"J^ <Q񍈰bD| A}ʮ/@5:%76"zF-Ԭ9Ym_!͏yX.ǰ# f͝D&+CǢ2l{g}'W;!%3R2#%3R2\[֣@c,|T .pߏٱ8UÌJ2A Lhr2A L䄹xI] ND6
-endstream
-endobj
-201 0 obj <<
-/Type /Font
-/Subtype /Type3
-/Name /F31
-/FontMatrix [0.00484 0 0 0.00484 0 0]
-/FontBBox [ 2 -41 183 146 ]
-/Resources << /ProcSet [ /PDF /ImageB ] >>
-/FirstChar 65
-/LastChar 255
-/Widths 1087 0 R
-/Encoding 1088 0 R
-/CharProcs 1089 0 R
->> endobj
-1087 0 obj
-[163.09 0 155.82 0 0 0 162.59 171.25 68.24 0 0 134.36 0 0 0 156.07 0 158.76 0 167.98 167.17 0 0 0 0 0 0 0 0 0 0 0 117.45 0 108.39 126.5 108.45 0 0 0 58.76 0 0 58.76 194.25 0 121.94 126.5 0 83.58 93.49 88.07 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 169.86 0 169.86 0 0 169.86 181.53 169.86 0 0 0 163.09 0 163.09 0 0 0 0 0 0 0 0 0 0 117.45 121.94 117.45 99.82 133.39 108.45 180.7 108.39 130.58 130.58 119.73 129.95 161.76 126.5 121.94 126.5 126.5 108.39 113.79 112.95 187.47 112.95 134.03 130.58 187.47 190.92 0 167.15 117.45 0 0 126.92 ]
-endobj
-1088 0 obj <<
-/Type /Encoding
-/Differences [65/a65 66/.notdef 67/a67 68/.notdef 71/a71/a72/a73 74/.notdef 76/a76 77/.notdef 80/a80 81/.notdef 82/a82 83/.notdef 84/a84/a85 86/.notdef 97/a97 98/.notdef 99/a99/a100/a101 102/.notdef 105/a105 106/.notdef 108/a108/a109 110/.notdef 111/a111/a112 113/.notdef 114/a114/a115/a116 117/.notdef 200/a200 201/.notdef 202/a202 203/.notdef 205/a205/a206/a207 208/.notdef 211/a211 212/.notdef 213/a213 214/.notdef 224/a224/a225/a226/a227/a228/a229/a230/a231/a232/a233/a234/a235/a236/a237/a238/a239/a240/a241/a242/a243/a244/a245/a246/a247/a248/a249 250/.notdef 251/a251/a252 253/.notdef 255/a255]
->> endobj
-1089 0 obj <<
-/a65 1029 0 R
-/a67 1030 0 R
-/a71 1031 0 R
-/a72 1032 0 R
-/a73 1033 0 R
-/a76 1034 0 R
-/a80 1035 0 R
-/a82 1036 0 R
-/a84 1037 0 R
-/a85 1038 0 R
-/a97 1039 0 R
-/a99 1040 0 R
-/a100 1041 0 R
-/a101 1042 0 R
-/a105 1043 0 R
-/a108 1044 0 R
-/a109 1045 0 R
-/a111 1046 0 R
-/a112 1047 0 R
-/a114 1048 0 R
-/a115 1049 0 R
-/a116 1050 0 R
-/a200 1051 0 R
-/a202 1052 0 R
-/a205 1053 0 R
-/a206 1054 0 R
-/a207 1055 0 R
-/a211 1056 0 R
-/a213 1057 0 R
-/a224 1058 0 R
-/a225 1059 0 R
-/a226 1060 0 R
-/a227 1061 0 R
-/a228 1062 0 R
-/a229 1063 0 R
-/a230 1064 0 R
-/a231 1065 0 R
-/a232 1066 0 R
-/a233 1067 0 R
-/a234 1068 0 R
-/a235 1069 0 R
-/a236 1070 0 R
-/a237 1071 0 R
-/a238 1072 0 R
-/a239 1073 0 R
-/a240 1074 0 R
-/a241 1075 0 R
-/a242 1076 0 R
-/a243 1077 0 R
-/a244 1078 0 R
-/a245 1079 0 R
-/a246 1080 0 R
-/a247 1081 0 R
-/a248 1082 0 R
-/a249 1083 0 R
-/a251 1084 0 R
-/a252 1085 0 R
-/a255 1086 0 R
->> endobj
-1090 0 obj <<
-/Length 241
-/Filter /FlateDecode
->>
-stream
-xڅj@'*4)9 i
-HO={HHh>J!Gtv RT>ݙtTp z.=rކoZVyէ5/3WeTXD:" (ΕR]#a9Ri@G&IV>JOѯA@Mlz<uHI/+m;%Y "1Y<FD0>G//ۢ
-endstream
-endobj
-1091 0 obj <<
-/Length 251
-/Filter /FlateDecode
->>
-stream
-xڵj0/x0GȽ@*1 i
-PhS1CB2GG#x`z=T!,EX>IKȟ%YNEIeF XF9ו=j4Th^~Cz ͚6_X
-Qc^~:Ĵjo ܃ PyƏ\
-UzUw>CSu(/1_Hl;Mߵw@
-endstream
-endobj
-1092 0 obj <<
-/Length 212
-/Filter /FlateDecode
->>
-stream
-xڍͿn0/P:2{j"BRJ%2T*bFVl?Zޤ~gC]Y=U/<㒧V|( -ٟnnx 2板~dW..y[lG͒0
-endstream
-endobj
-1093 0 obj <<
-/Length 181
-/Filter /FlateDecode
->>
-stream
-xUα
-0C>%j3:9utPtG#tt-rTՒ#^8eL7J{
->W5'UI-? |dǘ邭p4Z`= ^`Vc|-Cta@8cÙjKݦan%hiO_Pp
-endstream
-endobj
-1094 0 obj <<
-/Length 145
-/Filter /FlateDecode
->>
-stream
-x3532T0
-endstream
-endobj
-1095 0 obj <<
-/Length 219
-/Filter /FlateDecode
->>
-stream
-xuϱJ0dA hZR^N⤎y>J!ci
-f '?k|p[sSCo;BܕLnws =7\?Pg$̀ȂB$È! U&c5*!N`)ESreX U&Dw5dd$T?2!DmnZ.{/yr
-endstream
-endobj
-1096 0 obj <<
-/Length 134
-/Filter /FlateDecode
->>
-stream
-x3534T0P
-endstream
-endobj
-1097 0 obj <<
-/Length 221
-/Filter /FlateDecode
->>
-stream
-xڕ0 :TG_K 9`H01@w+ɣQ;T1Ąd}8o=~RFc'~s<I3#=M~XVGFUGU(G5]N7Vs0
-endstream
-endobj
-1098 0 obj <<
-/Length 202
-/Filter /FlateDecode
->>
-stream
-xڕn@ ĀG/ P):T"3$Jgx{{ WlٟKs.R :fOtd^VdL{LrAׂ7ZL@&Ԣ( >dD/eV?pC{)ïa/D>dBL9;LpZCcG{Xi
-endstream
-endobj
-1099 0 obj <<
-/Length 95
-/Filter /FlateDecode
->>
-stream
-xI;@@T)ޮ}zBBJ^@o~̨楣a\-abXv
-Ua
-endstream
-endobj
-1100 0 obj <<
-/Length 218
-/Filter /FlateDecode
->>
-stream
-xM;0 u%GhN@X+bFzlET y%D eّ2<#Uyy 'cKs܎NVSa:3 wX̌
-endstream
-endobj
-1101 0 obj <<
-/Length 85
-/Filter /FlateDecode
->>
-stream
-x323P0PbC  CB.MrW
-%E\N
-\.
-\.
-Փ+
-endstream
-endobj
-1102 0 obj <<
-/Length 213
-/Filter /FlateDecode
->>
-stream
-xڽ;@@PL Y@+?&ZY+h x3()0bm6yl;0'M鐢N^QԞh/8KPHV<F~{Q6s
-P-hdA
-p pJLs/uhzHadkAq?Z*Kb. tBҪ&d n a
-endstream
-endobj
-1103 0 obj <<
-/Length 128
-/Filter /FlateDecode
->>
-stream
-x337U0P
-endstream
-endobj
-1104 0 obj <<
-/Length 240
-/Filter /FlateDecode
->>
-stream
-xuJ@4iy7r +PK-GHbɺ !~03l;nJN[~)XRjޓd[z%{K.>2h"Zu3\oZc(0 <M߂KN 7_@#zP:AG]s&-I)wH$-ME˗Zet]=
-endstream
-endobj
-1105 0 obj <<
-/Length 252
-/Filter /FlateDecode
->>
-stream
-xڍ1KAg"2ͶлK'IAPK EOOٟ}wI _1W]]LRH%Re2*gr=ܼY4yߟOgs)9_K)+7 !DdT4RQҪѕړ\h<l0g)pl؃[$7%QC57 w[d[v
-endstream
-endobj
-164 0 obj <<
-/Type /Font
-/Subtype /Type3
-/Name /F20
-/FontMatrix [0.01004 0 0 0.01004 0 0]
-/FontBBox [ 0 -16 60 71 ]
-/Resources << /ProcSet [ /PDF /ImageB ] >>
-/FirstChar 46
-/LastChar 245
-/Widths 1106 0 R
-/Encoding 1107 0 R
-/CharProcs 1108 0 R
->> endobj
-1106 0 obj
-[27.08 0 48.75 48.75 48.75 48.75 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 64.71 0 0 0 0 0 0 0 0 0 0 0 0 0 0 62.29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 46.68 0 46.68 0 52.21 43.33 0 0 0 0 0 51.11 0 0 48.75 0 0 43.33 44.83 0 0 44.6 ]
-endobj
-1107 0 obj <<
-/Type /Encoding
-/Differences [46/a46 47/.notdef 48/a48/a49/a50/a51 52/.notdef 194/a194 195/.notdef 209/a209 210/.notdef 224/a224 225/.notdef 226/a226 227/.notdef 228/a228/a229 230/.notdef 235/a235 236/.notdef 238/a238 239/.notdef 241/a241/a242 243/.notdef 245/a245]
->> endobj
-1108 0 obj <<
-/a46 1101 0 R
-/a48 1102 0 R
-/a49 1103 0 R
-/a50 1104 0 R
-/a51 1105 0 R
-/a194 1090 0 R
-/a209 1091 0 R
-/a224 1092 0 R
-/a226 1093 0 R
-/a228 1094 0 R
-/a229 1095 0 R
-/a235 1096 0 R
-/a238 1097 0 R
-/a241 1098 0 R
-/a242 1099 0 R
-/a245 1100 0 R
->> endobj
-1109 0 obj <<
-/Length 259
-/Filter /FlateDecode
->>
-stream
-xڥбN0 `,<BVH! &7
-endstream
-endobj
-1110 0 obj <<
-/Length 257
-/Filter /FlateDecode
->>
-stream
-xѿN@%$ (l<.Zg"VJ--4ZÛɣ#Pnqa%^N_og+nxGS ?Zz֢}=<Ӧ[KS_՛sFyw-t7JtBՁRu*U,4Xdԡ.ŒhrA)V)w`T.̫!1&0>6q `ÞpA
-ăIy M>A3Kgw:fN~.(>F
-endstream
-endobj
-1111 0 obj <<
-/Length 230
-/Filter /FlateDecode
->>
-stream
-x펿JAG8 [B:B0Xi9|Q@߈M:[ffi;w lfQ)osEƵS,ZKw;NHyPa鐈
-3\"oY{.z#}R!SeZu6W"h#;Dq?zJ
-endstream
-endobj
-1112 0 obj <<
-/Length 262
-/Filter /FlateDecode
->>
-stream
-xՑ=N@FJai!spTBp
-E!GI#tacfR ~ٟy3d(مLyrcLg'2v\'ٍ,VϜn/E9 ҐVb([Ş,U#=TjBC6ACB7k(@??v:}ѱcV{LT^ZKWAPl>wejv&_>|wq6߂2O
-endstream
-endobj
-1113 0 obj <<
-/Length 156
-/Filter /FlateDecode
->>
-stream
-x1
-@ a!s7U Fp A+ r!e
-qV ͦ 'X39Yr"'] ^5qfSlbٔr})D+T)jP1L Nc4@u"}^yQ@V
-endstream
-endobj
-1114 0 obj <<
-/Length 254
-/Filter /FlateDecode
->>
-stream
-xڍ=N@F@Gع
-
-(#(>(7")Ӽb~v~tyd&Y.kYdyK98|nxr|9ޣ̱}w[IWܮHwDTDꈂUҹA1L+5QC]"uX98so fcj L1+3ix6gk}/̙S ~xc,-P
-endstream
-endobj
-1115 0 obj <<
-/Length 222
-/Filter /FlateDecode
->>
-stream
-xѽ
-0C>uIQg|l`:2x)\ kI;g(-f#K Rv@ 3A͑!Zj/jaDlv
-z9䌩
-tNsЈ}9])ި>~7u:n΁s|n6G5ȹ >پJX(o (
-endstream
-endobj
-1116 0 obj <<
-/Length 259
-/Filter /FlateDecode
->>
-stream
-xڥбN0 `,<BVH! &7
-endstream
-endobj
-1117 0 obj <<
-/Length 224
-/Filter /FlateDecode
->>
-stream
-x}10x 5D`qRGh#02G/-m`SV `gE7C3it8!g?$6$ ? x`ErHɒi!,%Ym@
-a Ҳ.p>;{µյHY9g?=hs6nWܮzH@4 -
-E5Uhnﭳ~[Z%
-endstream
-endobj
-1118 0 obj <<
-/Length 173
-/Filter /FlateDecode
->>
-stream
-x3731Q0P0V52V03S03RH1*@ha
-Jr*
-endstream
-endobj
-1119 0 obj <<
-/Length 270
-/Filter /FlateDecode
->>
-stream
-xڕ1J@'L#d.I +Puh()S3 ظ -??yҎ::kWlziJM7/Qӣ6>o.Fwv8A`eϙ'A*f6&Ex!u9c1iA>k2hN|&a X!ȶ[_[57kW~1
-endstream
-endobj
-1120 0 obj <<
-/Length 192
-/Filter /FlateDecode
->>
-stream
-xU1@%$p.K1D+ cXXz"G,I&*b"T|Pt 7f4' &$%_/#t5cE2p<c]
-H
-X;iA)*d?GqZmF
-1>޵
-endstream
-endobj
-1121 0 obj <<
-/Length 276
-/Filter /FlateDecode
->>
-stream
-xMѽN@%[l2 >{v3D+.Wca#(^kRRÂ3*FeIxcJxʛgX7v c͝{=!7{Zyf3ahb$3K' B1 iA1Jc#8Fp; ~( eɷC*Ji
-
-V3:{tgi{i1 b?+Ԙv%Vt W[ttŸ$:[%AՖi.""̲
-endstream
-endobj
-1122 0 obj <<
-/Length 163
-/Filter /FlateDecode
->>
-stream
-x3Գ4R0P
-endstream
-endobj
-1123 0 obj <<
-/Length 272
-/Filter /FlateDecode
->>
-stream
-xm1N0PG),M#' -RYZHPQ *
-JQ)SD13q6 .FoƖK>OȢRղʇPn`@~#
- C\חGwWg|/o4{iG'ƃ#!
-sA߄01!>
-5F! 4"sP=LiҬXF" 1D#"KF`6@-`Y| 11}}
-endstream
-endobj
-1124 0 obj <<
-/Length 264
-/Filter /FlateDecode
->>
-stream
-xڭ1N0 u%G/
- =mÊB<GGm@%kzxFk?O8& &0` 
-endstream
-endobj
-1125 0 obj <<
-/Length 101
-/Filter /FlateDecode
->>
-stream
-x33Q0P04
-fF
-)\\&f@ IrW01
-s{*r;8+r(DUry(?D $H.WO@.
-endstream
-endobj
-1126 0 obj <<
-/Length 262
-/Filter /FlateDecode
->>
-stream
-xՑ=N@FJai!spTBp
-E!GI#tacfR ~ٟy3d(مLyrcLg'2v\'ٍ,VϜn/E9 ҐVb([Ş,U#=TjBC6ACB7k(@??v:}ѱcV{LT^ZKWAPl>wejv&_>|wq6߂2O
-endstream
-endobj
-1127 0 obj <<
-/Length 247
-/Filter /FlateDecode
->>
-stream
-xڭj0xG@l'CB=CȔtңQ;+w:A%]g{ZPK5-5*ĺ" kyG|}
-튶-v8 GUYB3N
-endstream
-endobj
-1128 0 obj <<
-/Length 104
-/Filter /FlateDecode
->>
-stream
-x33Գ4T0P0bSK3#CB.SS
-endstream
-endobj
-1129 0 obj <<
-/Length 299
-/Filter /FlateDecode
->>
-stream
-xmJ0
-:/=z ԣEvoCL'i~k4宂jwДRwl Kojߪ6[U*[zU
-p|G,أ;VtI9 }bԈ|d323  ^Ib1iɁpBvu68aY03Y6,8=^q0`דzbQ@6_fl~22vX˱~{;ɱD)M$⮆X#*fbuz'qN.WK˯R׭W?!
-endstream
-endobj
-1130 0 obj <<
-/Length 329
-/Filter /FlateDecode
->>
-stream
-x픱N0Se%
-endstream
-endobj
-1131 0 obj <<
-/Length 114
-/Filter /FlateDecode
->>
-stream
-x373T0P04T52V
-Ĺ
-0\.'O.pSs.}BIQi*S!BA, 1J1H~\\\
-endstream
-endobj
-1132 0 obj <<
-/Length 184
-/Filter /FlateDecode
->>
-stream
-x333P0P04f
-fF
-)\\&@ IrW0
-s{*r;8+r(DUry(o`
-endstream
-endobj
-1133 0 obj <<
-/Length 88
-/Filter /FlateDecode
->>
-stream
-x3631W0P04F&
-
-)\\@NrW
-%E\N
-\.
-\.
-!'W 
-endstream
-endobj
-163 0 obj <<
-/Type /Font
-/Subtype /Type3
-/Name /F19
-/FontMatrix [0.00697 0 0 0.00697 0 0]
-/FontBBox [ 2 -29 98 103 ]
-/Resources << /ProcSet [ /PDF /ImageB ] >>
-/FirstChar 46
-/LastChar 252
-/Widths 1134 0 R
-/Encoding 1135 0 R
-/CharProcs 1136 0 R
->> endobj
-1134 0 obj
-[37.47 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 64.68 0 0 69.4 0 0 0 0 0 0 0 0 106.87 0 0 69.4 0 45.94 51.71 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 86.01 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 64.68 0 64.68 0 70.44 59.95 0 0 72.17 0 65.66 69.92 89.92 0 67.44 69.4 69.4 59.95 61.91 61.91 103.13 0 72.69 0 0 0 0 0 64.68 ]
-endobj
-1135 0 obj <<
-/Type /Encoding
-/Differences [46/a46 47/.notdef 97/a97 98/.notdef 100/a100 101/.notdef 109/a109 110/.notdef 112/a112 113/.notdef 114/a114/a115 116/.notdef 208/a208 209/.notdef 224/a224 225/.notdef 226/a226 227/.notdef 228/a228/a229 230/.notdef 232/a232 233/.notdef 234/a234/a235/a236 237/.notdef 238/a238/a239/a240/a241/a242/a243/a244 245/.notdef 246/a246 247/.notdef 252/a252]
->> endobj
-1136 0 obj <<
-/a46 1133 0 R
-/a97 1109 0 R
-/a100 1110 0 R
-/a109 1111 0 R
-/a112 1112 0 R
-/a114 1113 0 R
-/a115 1114 0 R
-/a208 1115 0 R
-/a224 1116 0 R
-/a226 1117 0 R
-/a228 1118 0 R
-/a229 1119 0 R
-/a232 1120 0 R
-/a234 1121 0 R
-/a235 1122 0 R
-/a236 1123 0 R
-/a238 1124 0 R
-/a239 1125 0 R
-/a240 1126 0 R
-/a241 1127 0 R
-/a242 1128 0 R
-/a243 1129 0 R
-/a244 1130 0 R
-/a246 1131 0 R
-/a252 1132 0 R
->> endobj
-1137 0 obj <<
-/Length1 787
-/Length2 773
-/Length3 0
-/Length 1312
-/Filter /FlateDecode
->>
-stream
-xڭRkPWՊat|W >@,2A-(HD&tM͆&"HE)c䡈P[8>ZR(VTh-6LQ
-g}(%jogwιwwLi0$@i\
-Ē%X&P6Fu* DBx`+7FfpZjTgNP+L|N#%1xYwu2'O-oy[3)Qx͟rȰpB
-sjB3TmjNβZeH[S_vןp,S.ܙ0MCWݮ<Rh,oH5g8gA\~;k_lcYWዀm+>^+Junm⻺c'+Y6[}&5'r,=~~uycecTތViOоl:5 ;ԕ/&aG[Sw7r3;2lpNAcU-iho^3+XlrS@\xZ=/,Tw}:yo?ǶzϿrEyO8G+T bnpkfŚk 94,ܱ*Ay]F`uF@Ԏ]eqm%_ =1kFpR=k͜tSȟ ^5$Lc%./7;?v6YղC:|Ԍen=ڢdї6/Dw*[wR.ɰF|\O^>rkϨ
- <5;_VLMQLMQ:s2&(6#F<)+f~]Ăd˧sO47Z<t{+?]㑺~MѬ;Ec~SQᶓ#Y-Iχ+9RD'ݸkcᵅ}iR{߸^"^,\}]M9\&,BXՕӡv6k]￾w?
-endstream
-endobj
-1138 0 obj <<
-/Type /FontDescriptor
-/FontName /WLBROP+CMSY10
-/Flags 4
-/FontBBox [-29 -960 1116 775]
-/Ascent 750
-/CapHeight 683
-/Descent -194
-/ItalicAngle -14
-/StemV 85
-/XHeight 431
-/CharSet (/bullet/minus/similar)
-/FontFile 1137 0 R
->> endobj
-233 0 obj <<
-/Type /Font
-/Subtype /Type1
-/BaseFont /WLBROP+CMSY10
-/FontDescriptor 1138 0 R
-/FirstChar 0
-/LastChar 24
-/Widths 627 0 R
->> endobj
-165 0 obj <<
-/Type /Pages
-/Count 6
-/Parent 1139 0 R
-/Kids [158 0 R 199 0 R 212 0 R 218 0 R 229 0 R 236 0 R]
->> endobj
-259 0 obj <<
-/Type /Pages
-/Count 6
-/Parent 1139 0 R
-/Kids [240 0 R 261 0 R 266 0 R 270 0 R 274 0 R 278 0 R]
->> endobj
-286 0 obj <<
-/Type /Pages
-/Count 6
-/Parent 1139 0 R
-/Kids [283 0 R 288 0 R 292 0 R 296 0 R 300 0 R 304 0 R]
->> endobj
-315 0 obj <<
-/Type /Pages
-/Count 6
-/Parent 1139 0 R
-/Kids [308 0 R 317 0 R 322 0 R 327 0 R 331 0 R 335 0 R]
->> endobj
-342 0 obj <<
-/Type /Pages
-/Count 6
-/Parent 1139 0 R
-/Kids [339 0 R 344 0 R 360 0 R 376 0 R 385 0 R 389 0 R]
->> endobj
-396 0 obj <<
-/Type /Pages
-/Count 6
-/Parent 1139 0 R
-/Kids [393 0 R 398 0 R 402 0 R 406 0 R 410 0 R 414 0 R]
->> endobj
-421 0 obj <<
-/Type /Pages
-/Count 6
-/Parent 1140 0 R
-/Kids [418 0 R 423 0 R 427 0 R 431 0 R 435 0 R 439 0 R]
->> endobj
-446 0 obj <<
-/Type /Pages
-/Count 4
-/Parent 1140 0 R
-/Kids [443 0 R 448 0 R 453 0 R 457 0 R]
->> endobj
-1139 0 obj <<
-/Type /Pages
-/Count 36
-/Parent 1141 0 R
-/Kids [165 0 R 259 0 R 286 0 R 315 0 R 342 0 R 396 0 R]
->> endobj
-1140 0 obj <<
-/Type /Pages
-/Count 10
-/Parent 1141 0 R
-/Kids [421 0 R 446 0 R]
->> endobj
-1141 0 obj <<
-/Type /Pages
-/Count 46
-/Kids [1139 0 R 1140 0 R]
->> endobj
-1142 0 obj <<
-/Type /Outlines
-/First 7 0 R
-/Last 155 0 R
-/Count 13
->> endobj
-155 0 obj <<
-/Title 156 0 R
-/A 153 0 R
-/Parent 1142 0 R
-/Prev 151 0 R
->> endobj
-151 0 obj <<
-/Title 152 0 R
-/A 149 0 R
-/Parent 1142 0 R
-/Prev 147 0 R
-/Next 155 0 R
->> endobj
-147 0 obj <<
-/Title 148 0 R
-/A 145 0 R
-/Parent 1142 0 R
-/Prev 143 0 R
-/Next 151 0 R
->> endobj
-143 0 obj <<
-/Title 144 0 R
-/A 141 0 R
-/Parent 1142 0 R
-/Prev 123 0 R
-/Next 147 0 R
->> endobj
-139 0 obj <<
-/Title 140 0 R
-/A 137 0 R
-/Parent 123 0 R
-/Prev 135 0 R
->> endobj
-135 0 obj <<
-/Title 136 0 R
-/A 133 0 R
-/Parent 123 0 R
-/Prev 131 0 R
-/Next 139 0 R
->> endobj
-131 0 obj <<
-/Title 132 0 R
-/A 129 0 R
-/Parent 123 0 R
-/Prev 127 0 R
-/Next 135 0 R
->> endobj
-127 0 obj <<
-/Title 128 0 R
-/A 125 0 R
-/Parent 123 0 R
-/Next 131 0 R
->> endobj
-123 0 obj <<
-/Title 124 0 R
-/A 121 0 R
-/Parent 1142 0 R
-/Prev 119 0 R
-/Next 143 0 R
-/First 127 0 R
-/Last 139 0 R
-/Count -4
->> endobj
-119 0 obj <<
-/Title 120 0 R
-/A 117 0 R
-/Parent 1142 0 R
-/Prev 115 0 R
-/Next 123 0 R
->> endobj
-115 0 obj <<
-/Title 116 0 R
-/A 113 0 R
-/Parent 1142 0 R
-/Prev 107 0 R
-/Next 119 0 R
->> endobj
-111 0 obj <<
-/Title 112 0 R
-/A 109 0 R
-/Parent 107 0 R
->> endobj
-107 0 obj <<
-/Title 108 0 R
-/A 105 0 R
-/Parent 1142 0 R
-/Prev 91 0 R
-/Next 115 0 R
-/First 111 0 R
-/Last 111 0 R
-/Count -1
->> endobj
-103 0 obj <<
-/Title 104 0 R
-/A 101 0 R
-/Parent 91 0 R
-/Prev 99 0 R
->> endobj
-99 0 obj <<
-/Title 100 0 R
-/A 97 0 R
-/Parent 91 0 R
-/Prev 95 0 R
-/Next 103 0 R
->> endobj
-95 0 obj <<
-/Title 96 0 R
-/A 93 0 R
-/Parent 91 0 R
-/Next 99 0 R
->> endobj
-91 0 obj <<
-/Title 92 0 R
-/A 89 0 R
-/Parent 1142 0 R
-/Prev 39 0 R
-/Next 107 0 R
-/First 95 0 R
-/Last 103 0 R
-/Count -3
->> endobj
-87 0 obj <<
-/Title 88 0 R
-/A 85 0 R
-/Parent 79 0 R
-/Prev 83 0 R
->> endobj
-83 0 obj <<
-/Title 84 0 R
-/A 81 0 R
-/Parent 79 0 R
-/Next 87 0 R
->> endobj
-79 0 obj <<
-/Title 80 0 R
-/A 77 0 R
-/Parent 39 0 R
-/Prev 75 0 R
-/First 83 0 R
-/Last 87 0 R
-/Count -2
->> endobj
-75 0 obj <<
-/Title 76 0 R
-/A 73 0 R
-/Parent 39 0 R
-/Prev 67 0 R
-/Next 79 0 R
->> endobj
-71 0 obj <<
-/Title 72 0 R
-/A 69 0 R
-/Parent 67 0 R
->> endobj
-67 0 obj <<
-/Title 68 0 R
-/A 65 0 R
-/Parent 39 0 R
-/Prev 63 0 R
-/Next 75 0 R
-/First 71 0 R
-/Last 71 0 R
-/Count -1
->> endobj
-63 0 obj <<
-/Title 64 0 R
-/A 61 0 R
-/Parent 39 0 R
-/Prev 59 0 R
-/Next 67 0 R
->> endobj
-59 0 obj <<
-/Title 60 0 R
-/A 57 0 R
-/Parent 39 0 R
-/Prev 55 0 R
-/Next 63 0 R
->> endobj
-55 0 obj <<
-/Title 56 0 R
-/A 53 0 R
-/Parent 39 0 R
-/Prev 51 0 R
-/Next 59 0 R
->> endobj
-51 0 obj <<
-/Title 52 0 R
-/A 49 0 R
-/Parent 39 0 R
-/Prev 43 0 R
-/Next 55 0 R
->> endobj
-47 0 obj <<
-/Title 48 0 R
-/A 45 0 R
-/Parent 43 0 R
->> endobj
-43 0 obj <<
-/Title 44 0 R
-/A 41 0 R
-/Parent 39 0 R
-/Next 51 0 R
-/First 47 0 R
-/Last 47 0 R
-/Count -1
->> endobj
-39 0 obj <<
-/Title 40 0 R
-/A 37 0 R
-/Parent 1142 0 R
-/Prev 27 0 R
-/Next 91 0 R
-/First 43 0 R
-/Last 79 0 R
-/Count -8
->> endobj
-35 0 obj <<
-/Title 36 0 R
-/A 33 0 R
-/Parent 27 0 R
-/Prev 31 0 R
->> endobj
-31 0 obj <<
-/Title 32 0 R
-/A 29 0 R
-/Parent 27 0 R
-/Next 35 0 R
->> endobj
-27 0 obj <<
-/Title 28 0 R
-/A 25 0 R
-/Parent 1142 0 R
-/Prev 11 0 R
-/Next 39 0 R
-/First 31 0 R
-/Last 35 0 R
-/Count -2
->> endobj
-23 0 obj <<
-/Title 24 0 R
-/A 21 0 R
-/Parent 11 0 R
-/Prev 19 0 R
->> endobj
-19 0 obj <<
-/Title 20 0 R
-/A 17 0 R
-/Parent 11 0 R
-/Prev 15 0 R
-/Next 23 0 R
->> endobj
-15 0 obj <<
-/Title 16 0 R
-/A 13 0 R
-/Parent 11 0 R
-/Next 19 0 R
->> endobj
-11 0 obj <<
-/Title 12 0 R
-/A 9 0 R
-/Parent 1142 0 R
-/Prev 7 0 R
-/Next 27 0 R
-/First 15 0 R
-/Last 23 0 R
-/Count -3
->> endobj
-7 0 obj <<
-/Title 8 0 R
-/A 5 0 R
-/Parent 1142 0 R
-/Next 11 0 R
->> endobj
-1143 0 obj <<
-/Names [(Doc-Start) 162 0 R (Item.1) 243 0 R (Item.10) 252 0 R (Item.11) 253 0 R (Item.12) 254 0 R (Item.13) 255 0 R]
-/Limits [(Doc-Start) (Item.13)]
->> endobj
-1144 0 obj <<
-/Names [(Item.14) 256 0 R (Item.15) 257 0 R (Item.16) 258 0 R (Item.17) 264 0 R (Item.18) 311 0 R (Item.19) 312 0 R]
-/Limits [(Item.14) (Item.19)]
->> endobj
-1145 0 obj <<
-/Names [(Item.2) 244 0 R (Item.20) 313 0 R (Item.21) 314 0 R (Item.22) 363 0 R (Item.23) 364 0 R (Item.24) 365 0 R]
-/Limits [(Item.2) (Item.24)]
->> endobj
-1146 0 obj <<
-/Names [(Item.25) 366 0 R (Item.26) 367 0 R (Item.27) 368 0 R (Item.28) 369 0 R (Item.29) 370 0 R (Item.3) 245 0 R]
-/Limits [(Item.25) (Item.3)]
->> endobj
-1147 0 obj <<
-/Names [(Item.30) 371 0 R (Item.31) 372 0 R (Item.32) 373 0 R (Item.33) 374 0 R (Item.4) 246 0 R (Item.5) 247 0 R]
-/Limits [(Item.30) (Item.5)]
->> endobj
-1148 0 obj <<
-/Names [(Item.6) 248 0 R (Item.7) 249 0 R (Item.8) 250 0 R (Item.9) 251 0 R (chapter*.1) 202 0 R (chapter.1) 6 0 R]
-/Limits [(Item.6) (chapter.1)]
->> endobj
-1149 0 obj <<
-/Names [(chapter.10) 142 0 R (chapter.11) 146 0 R (chapter.12) 150 0 R (chapter.13) 154 0 R (chapter.2) 10 0 R (chapter.3) 26 0 R]
-/Limits [(chapter.10) (chapter.3)]
->> endobj
-1150 0 obj <<
-/Names [(chapter.4) 38 0 R (chapter.5) 90 0 R (chapter.6) 106 0 R (chapter.7) 114 0 R (chapter.8) 118 0 R (chapter.9) 122 0 R]
-/Limits [(chapter.4) (chapter.9)]
->> endobj
-1151 0 obj <<
-/Names [(lstlisting.6.-1) 347 0 R (lstlisting.6.-2) 379 0 R (lstnumber.-1.1) 348 0 R (lstnumber.-1.10) 357 0 R (lstnumber.-1.11) 358 0 R (lstnumber.-1.2) 349 0 R]
-/Limits [(lstlisting.6.-1) (lstnumber.-1.2)]
->> endobj
-1152 0 obj <<
-/Names [(lstnumber.-1.3) 350 0 R (lstnumber.-1.4) 351 0 R (lstnumber.-1.5) 352 0 R (lstnumber.-1.6) 353 0 R (lstnumber.-1.7) 354 0 R (lstnumber.-1.8) 355 0 R]
-/Limits [(lstnumber.-1.3) (lstnumber.-1.8)]
->> endobj
-1153 0 obj <<
-/Names [(lstnumber.-1.9) 356 0 R (lstnumber.-2.1) 380 0 R (lstnumber.-2.2) 381 0 R (lstnumber.-2.3) 382 0 R (lstnumber.-2.4) 383 0 R (page.1) 161 0 R]
-/Limits [(lstnumber.-1.9) (page.1)]
->> endobj
-1154 0 obj <<
-/Names [(page.10) 276 0 R (page.11) 280 0 R (page.12) 285 0 R (page.13) 290 0 R (page.14) 294 0 R (page.15) 298 0 R]
-/Limits [(page.10) (page.15)]
->> endobj
-1155 0 obj <<
-/Names [(page.16) 302 0 R (page.17) 306 0 R (page.18) 310 0 R (page.19) 319 0 R (page.2) 214 0 R (page.20) 324 0 R]
-/Limits [(page.16) (page.20)]
->> endobj
-1156 0 obj <<
-/Names [(page.21) 329 0 R (page.22) 333 0 R (page.23) 337 0 R (page.24) 341 0 R (page.25) 346 0 R (page.26) 362 0 R]
-/Limits [(page.21) (page.26)]
->> endobj
-1157 0 obj <<
-/Names [(page.27) 378 0 R (page.28) 387 0 R (page.29) 391 0 R (page.3) 220 0 R (page.30) 395 0 R (page.31) 400 0 R]
-/Limits [(page.27) (page.31)]
->> endobj
-1158 0 obj <<
-/Names [(page.32) 404 0 R (page.33) 408 0 R (page.34) 412 0 R (page.35) 416 0 R (page.36) 420 0 R (page.37) 425 0 R]
-/Limits [(page.32) (page.37)]
->> endobj
-1159 0 obj <<
-/Names [(page.38) 429 0 R (page.39) 433 0 R (page.4) 231 0 R (page.40) 437 0 R (page.41) 441 0 R (page.42) 445 0 R]
-/Limits [(page.38) (page.42)]
->> endobj
-1160 0 obj <<
-/Names [(page.43) 450 0 R (page.44) 455 0 R (page.45) 459 0 R (page.5) 238 0 R (page.6) 242 0 R (page.7) 263 0 R]
-/Limits [(page.43) (page.7)]
->> endobj
-1161 0 obj <<
-/Names [(page.8) 268 0 R (page.9) 272 0 R (section.2.1) 14 0 R (section.2.2) 18 0 R (section.2.3) 22 0 R (section.3.1) 30 0 R]
-/Limits [(page.8) (section.3.1)]
->> endobj
-1162 0 obj <<
-/Names [(section.3.2) 34 0 R (section.4.1) 42 0 R (section.4.2) 50 0 R (section.4.3) 54 0 R (section.4.4) 58 0 R (section.4.5) 62 0 R]
-/Limits [(section.3.2) (section.4.5)]
->> endobj
-1163 0 obj <<
-/Names [(section.4.6) 66 0 R (section.4.7) 74 0 R (section.4.8) 78 0 R (section.5.1) 94 0 R (section.5.2) 98 0 R (section.5.3) 102 0 R]
-/Limits [(section.4.6) (section.5.3)]
->> endobj
-1164 0 obj <<
-/Names [(section.6.1) 110 0 R (section.9.1) 126 0 R (section.9.2) 130 0 R (section.9.3) 134 0 R (section.9.4) 138 0 R (subsection.4.1.1) 46 0 R]
-/Limits [(section.6.1) (subsection.4.1.1)]
->> endobj
-1165 0 obj <<
-/Names [(subsection.4.6.1) 70 0 R (subsection.4.8.1) 82 0 R (subsection.4.8.2) 86 0 R]
-/Limits [(subsection.4.6.1) (subsection.4.8.2)]
->> endobj
-1166 0 obj <<
-/Kids [1143 0 R 1144 0 R 1145 0 R 1146 0 R 1147 0 R 1148 0 R]
-/Limits [(Doc-Start) (chapter.1)]
->> endobj
-1167 0 obj <<
-/Kids [1149 0 R 1150 0 R 1151 0 R 1152 0 R 1153 0 R 1154 0 R]
-/Limits [(chapter.10) (page.15)]
->> endobj
-1168 0 obj <<
-/Kids [1155 0 R 1156 0 R 1157 0 R 1158 0 R 1159 0 R 1160 0 R]
-/Limits [(page.16) (page.7)]
->> endobj
-1169 0 obj <<
-/Kids [1161 0 R 1162 0 R 1163 0 R 1164 0 R 1165 0 R]
-/Limits [(page.8) (subsection.4.8.2)]
->> endobj
-1170 0 obj <<
-/Kids [1166 0 R 1167 0 R 1168 0 R 1169 0 R]
-/Limits [(Doc-Start) (subsection.4.8.2)]
->> endobj
-1171 0 obj <<
-/Dests 1170 0 R
->> endobj
-1172 0 obj <<
-/Type /Catalog
-/Pages 1141 0 R
-/Outlines 1142 0 R
-/Names 1171 0 R
-/PageMode/UseOutlines/PageLabels << /Nums [0 << /S /D >> 1 << /S /D >> ] >>
-/OpenAction 157 0 R
->> endobj
-1173 0 obj <<
-/Author(\376\377\000V\000s\000e\000v\000o\000l\000o\000d\000\040\000S\000t\000a\000k\000h\000o\000v)/Title(\376\377\000R\000s\000p\000a\000m\000d)/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.3)/Keywords()
-/CreationDate (D:20100322194428+03'00')
-/ModDate (D:20100322194428+03'00')
-/Trapped /False
-/PTEX.Fullbanner (This is pdfTeX using libpoppler, Version 3.141592-1.40.3-2.2 (Web2C 7.5.6) kpathsea version 3.5.6)
->> endobj
-xref
-0 1174
-0000000001 65535 f
-0000000002 00000 f
-0000000003 00000 f
-0000000004 00000 f
-0000000000 00000 f
-0000000015 00000 n
-0000021509 00000 n
-0000328358 00000 n
-0000000060 00000 n
-0000000377 00000 n
-0000024624 00000 n
-0000328234 00000 n
-0000000422 00000 n
-0000000572 00000 n
-0000024685 00000 n
-0000328160 00000 n
-0000000620 00000 n
-0000000750 00000 n
-0000024746 00000 n
-0000328073 00000 n
-0000000798 00000 n
-0000000920 00000 n
-0000026563 00000 n
-0000327999 00000 n
-0000000968 00000 n
-0000001066 00000 n
-0000028151 00000 n
-0000327873 00000 n
-0000001112 00000 n
-0000001320 00000 n
-0000028212 00000 n
-0000327799 00000 n
-0000001368 00000 n
-0000001730 00000 n
-0000032417 00000 n
-0000327725 00000 n
-0000001778 00000 n
-0000002036 00000 n
-0000038917 00000 n
-0000327599 00000 n
-0000002082 00000 n
-0000002232 00000 n
-0000038978 00000 n
-0000327488 00000 n
-0000002280 00000 n
-0000002514 00000 n
-0000041632 00000 n
-0000327427 00000 n
-0000002567 00000 n
-0000002779 00000 n
-0000041693 00000 n
-0000327340 00000 n
-0000002827 00000 n
-0000003101 00000 n
-0000043673 00000 n
-0000327253 00000 n
-0000003149 00000 n
-0000003351 00000 n
-0000045505 00000 n
-0000327166 00000 n
-0000003399 00000 n
-0000003641 00000 n
-0000045566 00000 n
-0000327079 00000 n
-0000003689 00000 n
-0000003875 00000 n
-0000047776 00000 n
-0000326955 00000 n
-0000003923 00000 n
-0000004173 00000 n
-0000049789 00000 n
-0000326894 00000 n
-0000004226 00000 n
-0000004558 00000 n
-0000052801 00000 n
-0000326807 00000 n
-0000004606 00000 n
-0000004912 00000 n
-0000055345 00000 n
-0000326696 00000 n
-0000004960 00000 n
-0000005210 00000 n
-0000055406 00000 n
-0000326622 00000 n
-0000005263 00000 n
-0000005427 00000 n
-0000058178 00000 n
-0000326548 00000 n
-0000005480 00000 n
-0000005748 00000 n
-0000061496 00000 n
-0000326420 00000 n
-0000005794 00000 n
-0000005970 00000 n
-0000061557 00000 n
-0000326346 00000 n
-0000006018 00000 n
-0000006229 00000 n
-0000064861 00000 n
-0000326257 00000 n
-0000006277 00000 n
-0000006494 00000 n
-0000070418 00000 n
-0000326180 00000 n
-0000006543 00000 n
-0000006745 00000 n
-0000073279 00000 n
-0000326048 00000 n
-0000006792 00000 n
-0000007022 00000 n
-0000073341 00000 n
-0000325983 00000 n
-0000007071 00000 n
-0000007191 00000 n
-0000081325 00000 n
-0000325889 00000 n
-0000007238 00000 n
-0000007381 00000 n
-0000084318 00000 n
-0000325795 00000 n
-0000007428 00000 n
-0000007555 00000 n
-0000087194 00000 n
-0000325662 00000 n
-0000007602 00000 n
-0000007753 00000 n
-0000087256 00000 n
-0000325583 00000 n
-0000007802 00000 n
-0000008004 00000 n
-0000089504 00000 n
-0000325490 00000 n
-0000008053 00000 n
-0000008248 00000 n
-0000094099 00000 n
-0000325397 00000 n
-0000008297 00000 n
-0000008475 00000 n
-0000096739 00000 n
-0000325318 00000 n
-0000008524 00000 n
-0000008796 00000 n
-0000099197 00000 n
-0000325224 00000 n
-0000008844 00000 n
-0000008971 00000 n
-0000102782 00000 n
-0000325130 00000 n
-0000009019 00000 n
-0000009255 00000 n
-0000108961 00000 n
-0000325036 00000 n
-0000009303 00000 n
-0000009541 00000 n
-0000112898 00000 n
-0000324956 00000 n
-0000009589 00000 n
-0000009768 00000 n
-0000010135 00000 n
-0000010378 00000 n
-0000009820 00000 n
-0000010254 00000 n
-0000010316 00000 n
-0000320267 00000 n
-0000311470 00000 n
-0000323670 00000 n
-0000012128 00000 n
-0000012280 00000 n
-0000012431 00000 n
-0000012584 00000 n
-0000012738 00000 n
-0000012892 00000 n
-0000013040 00000 n
-0000013194 00000 n
-0000013348 00000 n
-0000013500 00000 n
-0000013654 00000 n
-0000013813 00000 n
-0000013966 00000 n
-0000014120 00000 n
-0000014273 00000 n
-0000014427 00000 n
-0000014580 00000 n
-0000014739 00000 n
-0000014893 00000 n
-0000015046 00000 n
-0000015205 00000 n
-0000015363 00000 n
-0000015515 00000 n
-0000015669 00000 n
-0000015823 00000 n
-0000015977 00000 n
-0000016129 00000 n
-0000016283 00000 n
-0000016435 00000 n
-0000017652 00000 n
-0000017804 00000 n
-0000017956 00000 n
-0000016648 00000 n
-0000011765 00000 n
-0000010463 00000 n
-0000304664 00000 n
-0000016586 00000 n
-0000278226 00000 n
-0000255960 00000 n
-0000018110 00000 n
-0000018264 00000 n
-0000018418 00000 n
-0000018571 00000 n
-0000018723 00000 n
-0000018876 00000 n
-0000019091 00000 n
-0000017449 00000 n
-0000016746 00000 n
-0000019029 00000 n
-0000215130 00000 n
-0000193729 00000 n
-0000021569 00000 n
-0000021328 00000 n
-0000019202 00000 n
-0000021447 00000 n
-0000189956 00000 n
-0000023465 00000 n
-0000023629 00000 n
-0000023824 00000 n
-0000024022 00000 n
-0000024201 00000 n
-0000024387 00000 n
-0000024807 00000 n
-0000023286 00000 n
-0000021667 00000 n
-0000024562 00000 n
-0000181717 00000 n
-0000323527 00000 n
-0000156064 00000 n
-0000026624 00000 n
-0000026382 00000 n
-0000024944 00000 n
-0000026501 00000 n
-0000029260 00000 n
-0000027970 00000 n
-0000026735 00000 n
-0000028089 00000 n
-0000028273 00000 n
-0000028335 00000 n
-0000028395 00000 n
-0000028457 00000 n
-0000028519 00000 n
-0000028581 00000 n
-0000028643 00000 n
-0000028705 00000 n
-0000028767 00000 n
-0000028829 00000 n
-0000028891 00000 n
-0000028953 00000 n
-0000029015 00000 n
-0000029077 00000 n
-0000029138 00000 n
-0000029200 00000 n
-0000323788 00000 n
-0000032478 00000 n
-0000032174 00000 n
-0000029371 00000 n
-0000032293 00000 n
-0000032355 00000 n
-0000035693 00000 n
-0000035512 00000 n
-0000032602 00000 n
-0000035631 00000 n
-0000037254 00000 n
-0000037073 00000 n
-0000035817 00000 n
-0000037192 00000 n
-0000039039 00000 n
-0000038736 00000 n
-0000037365 00000 n
-0000038855 00000 n
-0000041753 00000 n
-0000041451 00000 n
-0000039163 00000 n
-0000041570 00000 n
-0000120616 00000 n
-0000043734 00000 n
-0000043492 00000 n
-0000041903 00000 n
-0000043611 00000 n
-0000323906 00000 n
-0000045627 00000 n
-0000045324 00000 n
-0000043884 00000 n
-0000045443 00000 n
-0000047837 00000 n
-0000047595 00000 n
-0000045777 00000 n
-0000047714 00000 n
-0000049850 00000 n
-0000049608 00000 n
-0000047974 00000 n
-0000049727 00000 n
-0000052862 00000 n
-0000052620 00000 n
-0000049987 00000 n
-0000052739 00000 n
-0000055467 00000 n
-0000055164 00000 n
-0000052986 00000 n
-0000055283 00000 n
-0000058487 00000 n
-0000057997 00000 n
-0000055604 00000 n
-0000058116 00000 n
-0000058239 00000 n
-0000058301 00000 n
-0000058363 00000 n
-0000058425 00000 n
-0000324024 00000 n
-0000059762 00000 n
-0000059581 00000 n
-0000058624 00000 n
-0000059700 00000 n
-0000064431 00000 n
-0000061618 00000 n
-0000061315 00000 n
-0000059886 00000 n
-0000061434 00000 n
-0000064616 00000 n
-0000064922 00000 n
-0000064284 00000 n
-0000061742 00000 n
-0000064799 00000 n
-0000067802 00000 n
-0000067621 00000 n
-0000065059 00000 n
-0000067740 00000 n
-0000070480 00000 n
-0000070237 00000 n
-0000067926 00000 n
-0000070356 00000 n
-0000071548 00000 n
-0000071367 00000 n
-0000070617 00000 n
-0000071486 00000 n
-0000324142 00000 n
-0000074146 00000 n
-0000073098 00000 n
-0000071659 00000 n
-0000073217 00000 n
-0000073403 00000 n
-0000073465 00000 n
-0000073527 00000 n
-0000073589 00000 n
-0000073651 00000 n
-0000073713 00000 n
-0000073775 00000 n
-0000073837 00000 n
-0000073899 00000 n
-0000073961 00000 n
-0000074023 00000 n
-0000074085 00000 n
-0000077441 00000 n
-0000076516 00000 n
-0000074283 00000 n
-0000076635 00000 n
-0000076697 00000 n
-0000076759 00000 n
-0000076821 00000 n
-0000076883 00000 n
-0000076945 00000 n
-0000077007 00000 n
-0000077069 00000 n
-0000077131 00000 n
-0000077193 00000 n
-0000077255 00000 n
-0000077317 00000 n
-0000077379 00000 n
-0000079652 00000 n
-0000079162 00000 n
-0000077552 00000 n
-0000079281 00000 n
-0000079343 00000 n
-0000079405 00000 n
-0000079467 00000 n
-0000079528 00000 n
-0000079590 00000 n
-0000081387 00000 n
-0000081144 00000 n
-0000079776 00000 n
-0000081263 00000 n
-0000082542 00000 n
-0000082361 00000 n
-0000081511 00000 n
-0000082480 00000 n
-0000084380 00000 n
-0000084137 00000 n
-0000082666 00000 n
-0000084256 00000 n
-0000324260 00000 n
-0000085155 00000 n
-0000084974 00000 n
-0000084504 00000 n
-0000085093 00000 n
-0000087318 00000 n
-0000087013 00000 n
-0000085266 00000 n
-0000087132 00000 n
-0000089566 00000 n
-0000089323 00000 n
-0000087455 00000 n
-0000089442 00000 n
-0000092006 00000 n
-0000091825 00000 n
-0000089703 00000 n
-0000091944 00000 n
-0000094161 00000 n
-0000093918 00000 n
-0000092143 00000 n
-0000094037 00000 n
-0000096801 00000 n
-0000096558 00000 n
-0000094298 00000 n
-0000096677 00000 n
-0000324378 00000 n
-0000097812 00000 n
-0000097631 00000 n
-0000096938 00000 n
-0000097750 00000 n
-0000099259 00000 n
-0000099016 00000 n
-0000097910 00000 n
-0000099135 00000 n
-0000101036 00000 n
-0000100855 00000 n
-0000099370 00000 n
-0000100974 00000 n
-0000102844 00000 n
-0000102601 00000 n
-0000101147 00000 n
-0000102720 00000 n
-0000105545 00000 n
-0000105364 00000 n
-0000102968 00000 n
-0000105483 00000 n
-0000106674 00000 n
-0000106493 00000 n
-0000105656 00000 n
-0000106612 00000 n
-0000324496 00000 n
-0000109023 00000 n
-0000108780 00000 n
-0000106772 00000 n
-0000108899 00000 n
-0000110837 00000 n
-0000111072 00000 n
-0000110698 00000 n
-0000109134 00000 n
-0000111010 00000 n
-0000112960 00000 n
-0000112717 00000 n
-0000111183 00000 n
-0000112836 00000 n
-0000113071 00000 n
-0000113271 00000 n
-0000113642 00000 n
-0000113840 00000 n
-0000114149 00000 n
-0000114419 00000 n
-0000114660 00000 n
-0000114967 00000 n
-0000115281 00000 n
-0000115559 00000 n
-0000115883 00000 n
-0000116196 00000 n
-0000116430 00000 n
-0000116625 00000 n
-0000116916 00000 n
-0000117108 00000 n
-0000117403 00000 n
-0000117687 00000 n
-0000117884 00000 n
-0000118198 00000 n
-0000118407 00000 n
-0000118649 00000 n
-0000118937 00000 n
-0000119105 00000 n
-0000119330 00000 n
-0000119658 00000 n
-0000119948 00000 n
-0000120292 00000 n
-0000120866 00000 n
-0000121415 00000 n
-0000121805 00000 n
-0000122214 00000 n
-0000122479 00000 n
-0000122750 00000 n
-0000123049 00000 n
-0000123313 00000 n
-0000123541 00000 n
-0000123767 00000 n
-0000124075 00000 n
-0000124276 00000 n
-0000124465 00000 n
-0000124702 00000 n
-0000125001 00000 n
-0000125205 00000 n
-0000125463 00000 n
-0000125738 00000 n
-0000125989 00000 n
-0000126244 00000 n
-0000126522 00000 n
-0000126839 00000 n
-0000127044 00000 n
-0000127292 00000 n
-0000127562 00000 n
-0000127840 00000 n
-0000128147 00000 n
-0000128420 00000 n
-0000128683 00000 n
-0000128955 00000 n
-0000129223 00000 n
-0000129486 00000 n
-0000129760 00000 n
-0000130042 00000 n
-0000130277 00000 n
-0000130611 00000 n
-0000130853 00000 n
-0000131066 00000 n
-0000131316 00000 n
-0000131595 00000 n
-0000131791 00000 n
-0000132043 00000 n
-0000132279 00000 n
-0000132543 00000 n
-0000132824 00000 n
-0000133116 00000 n
-0000133355 00000 n
-0000133621 00000 n
-0000133857 00000 n
-0000134086 00000 n
-0000134353 00000 n
-0000134608 00000 n
-0000134891 00000 n
-0000135209 00000 n
-0000135466 00000 n
-0000135737 00000 n
-0000135940 00000 n
-0000136202 00000 n
-0000136501 00000 n
-0000136738 00000 n
-0000136996 00000 n
-0000137247 00000 n
-0000137447 00000 n
-0000137746 00000 n
-0000137951 00000 n
-0000138181 00000 n
-0000138453 00000 n
-0000138753 00000 n
-0000139012 00000 n
-0000139214 00000 n
-0000139454 00000 n
-0000139736 00000 n
-0000140047 00000 n
-0000140315 00000 n
-0000140577 00000 n
-0000140881 00000 n
-0000141162 00000 n
-0000141388 00000 n
-0000141641 00000 n
-0000141843 00000 n
-0000142107 00000 n
-0000142305 00000 n
-0000142586 00000 n
-0000142849 00000 n
-0000143056 00000 n
-0000143374 00000 n
-0000143674 00000 n
-0000143957 00000 n
-0000144176 00000 n
-0000144406 00000 n
-0000144610 00000 n
-0000144865 00000 n
-0000145107 00000 n
-0000145374 00000 n
-0000145633 00000 n
-0000145897 00000 n
-0000146095 00000 n
-0000146359 00000 n
-0000146622 00000 n
-0000146816 00000 n
-0000147065 00000 n
-0000147397 00000 n
-0000147725 00000 n
-0000147954 00000 n
-0000148227 00000 n
-0000148495 00000 n
-0000148747 00000 n
-0000148944 00000 n
-0000149161 00000 n
-0000149345 00000 n
-0000149525 00000 n
-0000149763 00000 n
-0000149951 00000 n
-0000150187 00000 n
-0000150435 00000 n
-0000150678 00000 n
-0000150869 00000 n
-0000151189 00000 n
-0000151384 00000 n
-0000151617 00000 n
-0000151814 00000 n
-0000152032 00000 n
-0000152217 00000 n
-0000152473 00000 n
-0000152650 00000 n
-0000152902 00000 n
-0000153246 00000 n
-0000153518 00000 n
-0000153802 00000 n
-0000154024 00000 n
-0000154327 00000 n
-0000154634 00000 n
-0000154896 00000 n
-0000155184 00000 n
-0000155506 00000 n
-0000155770 00000 n
-0000156315 00000 n
-0000157313 00000 n
-0000158157 00000 n
-0000159978 00000 n
-0000160138 00000 n
-0000160496 00000 n
-0000160829 00000 n
-0000161182 00000 n
-0000161592 00000 n
-0000161994 00000 n
-0000162515 00000 n
-0000162853 00000 n
-0000163166 00000 n
-0000163503 00000 n
-0000163755 00000 n
-0000164139 00000 n
-0000164334 00000 n
-0000164514 00000 n
-0000164773 00000 n
-0000165088 00000 n
-0000165415 00000 n
-0000165659 00000 n
-0000165992 00000 n
-0000166243 00000 n
-0000166648 00000 n
-0000167010 00000 n
-0000167441 00000 n
-0000167795 00000 n
-0000168081 00000 n
-0000168284 00000 n
-0000168694 00000 n
-0000168896 00000 n
-0000169100 00000 n
-0000169540 00000 n
-0000169878 00000 n
-0000170274 00000 n
-0000170563 00000 n
-0000170758 00000 n
-0000171018 00000 n
-0000171355 00000 n
-0000171796 00000 n
-0000172135 00000 n
-0000172433 00000 n
-0000172781 00000 n
-0000173122 00000 n
-0000173374 00000 n
-0000173729 00000 n
-0000173930 00000 n
-0000174245 00000 n
-0000174444 00000 n
-0000174771 00000 n
-0000175073 00000 n
-0000175276 00000 n
-0000175649 00000 n
-0000176040 00000 n
-0000176402 00000 n
-0000176613 00000 n
-0000176838 00000 n
-0000177066 00000 n
-0000177344 00000 n
-0000177604 00000 n
-0000177924 00000 n
-0000178243 00000 n
-0000178426 00000 n
-0000178596 00000 n
-0000178834 00000 n
-0000179213 00000 n
-0000179612 00000 n
-0000179926 00000 n
-0000180265 00000 n
-0000180649 00000 n
-0000180950 00000 n
-0000181314 00000 n
-0000181968 00000 n
-0000182688 00000 n
-0000183408 00000 n
-0000184378 00000 n
-0000184590 00000 n
-0000184990 00000 n
-0000185336 00000 n
-0000185625 00000 n
-0000186048 00000 n
-0000186299 00000 n
-0000186764 00000 n
-0000187274 00000 n
-0000187652 00000 n
-0000188072 00000 n
-0000188591 00000 n
-0000188947 00000 n
-0000189431 00000 n
-0000190207 00000 n
-0000190671 00000 n
-0000190851 00000 n
-0000191060 00000 n
-0000191262 00000 n
-0000191571 00000 n
-0000191887 00000 n
-0000192156 00000 n
-0000192463 00000 n
-0000192787 00000 n
-0000193065 00000 n
-0000193411 00000 n
-0000193977 00000 n
-0000194051 00000 n
-0000194144 00000 n
-0000194284 00000 n
-0000194600 00000 n
-0000194928 00000 n
-0000195255 00000 n
-0000195571 00000 n
-0000195811 00000 n
-0000196039 00000 n
-0000196370 00000 n
-0000196617 00000 n
-0000196825 00000 n
-0000197050 00000 n
-0000197423 00000 n
-0000197737 00000 n
-0000198090 00000 n
-0000198378 00000 n
-0000198689 00000 n
-0000199027 00000 n
-0000199253 00000 n
-0000199550 00000 n
-0000199930 00000 n
-0000200305 00000 n
-0000200529 00000 n
-0000200878 00000 n
-0000201231 00000 n
-0000201573 00000 n
-0000201867 00000 n
-0000202112 00000 n
-0000202465 00000 n
-0000202709 00000 n
-0000203044 00000 n
-0000203419 00000 n
-0000203697 00000 n
-0000204042 00000 n
-0000204312 00000 n
-0000204522 00000 n
-0000204802 00000 n
-0000205079 00000 n
-0000205421 00000 n
-0000205700 00000 n
-0000205982 00000 n
-0000206308 00000 n
-0000206583 00000 n
-0000206839 00000 n
-0000207140 00000 n
-0000207373 00000 n
-0000207662 00000 n
-0000207894 00000 n
-0000208199 00000 n
-0000208477 00000 n
-0000208691 00000 n
-0000209002 00000 n
-0000209369 00000 n
-0000209672 00000 n
-0000209923 00000 n
-0000210156 00000 n
-0000210390 00000 n
-0000210644 00000 n
-0000210919 00000 n
-0000211170 00000 n
-0000211445 00000 n
-0000211724 00000 n
-0000211899 00000 n
-0000212069 00000 n
-0000212383 00000 n
-0000212625 00000 n
-0000212933 00000 n
-0000213260 00000 n
-0000213558 00000 n
-0000213855 00000 n
-0000214189 00000 n
-0000214454 00000 n
-0000214793 00000 n
-0000215381 00000 n
-0000216104 00000 n
-0000216702 00000 n
-0000217701 00000 n
-0000218026 00000 n
-0000218317 00000 n
-0000218624 00000 n
-0000218901 00000 n
-0000219092 00000 n
-0000219280 00000 n
-0000219593 00000 n
-0000219778 00000 n
-0000219947 00000 n
-0000220160 00000 n
-0000220490 00000 n
-0000220670 00000 n
-0000220982 00000 n
-0000221251 00000 n
-0000221581 00000 n
-0000221830 00000 n
-0000222192 00000 n
-0000222482 00000 n
-0000222810 00000 n
-0000222995 00000 n
-0000223244 00000 n
-0000223569 00000 n
-0000223951 00000 n
-0000224309 00000 n
-0000224619 00000 n
-0000224883 00000 n
-0000225144 00000 n
-0000225404 00000 n
-0000225672 00000 n
-0000225946 00000 n
-0000226160 00000 n
-0000226475 00000 n
-0000226697 00000 n
-0000226873 00000 n
-0000227082 00000 n
-0000227359 00000 n
-0000227529 00000 n
-0000227775 00000 n
-0000227993 00000 n
-0000228264 00000 n
-0000228534 00000 n
-0000228804 00000 n
-0000229018 00000 n
-0000229287 00000 n
-0000229501 00000 n
-0000229709 00000 n
-0000229972 00000 n
-0000230289 00000 n
-0000230575 00000 n
-0000230876 00000 n
-0000231105 00000 n
-0000231430 00000 n
-0000231696 00000 n
-0000231987 00000 n
-0000232167 00000 n
-0000232415 00000 n
-0000232606 00000 n
-0000232941 00000 n
-0000233208 00000 n
-0000233538 00000 n
-0000233770 00000 n
-0000234082 00000 n
-0000234263 00000 n
-0000234593 00000 n
-0000234771 00000 n
-0000235020 00000 n
-0000235327 00000 n
-0000235512 00000 n
-0000235850 00000 n
-0000236150 00000 n
-0000236356 00000 n
-0000236666 00000 n
-0000236966 00000 n
-0000237230 00000 n
-0000237552 00000 n
-0000237798 00000 n
-0000237979 00000 n
-0000238200 00000 n
-0000238474 00000 n
-0000238826 00000 n
-0000239090 00000 n
-0000239326 00000 n
-0000239594 00000 n
-0000239870 00000 n
-0000240083 00000 n
-0000240360 00000 n
-0000240541 00000 n
-0000240812 00000 n
-0000240989 00000 n
-0000241259 00000 n
-0000241519 00000 n
-0000241701 00000 n
-0000242002 00000 n
-0000242317 00000 n
-0000242603 00000 n
-0000242793 00000 n
-0000242993 00000 n
-0000243174 00000 n
-0000243366 00000 n
-0000243604 00000 n
-0000243837 00000 n
-0000244063 00000 n
-0000244320 00000 n
-0000244607 00000 n
-0000244870 00000 n
-0000245057 00000 n
-0000245317 00000 n
-0000245579 00000 n
-0000245783 00000 n
-0000245987 00000 n
-0000246161 00000 n
-0000246459 00000 n
-0000246778 00000 n
-0000247176 00000 n
-0000247359 00000 n
-0000247633 00000 n
-0000247907 00000 n
-0000248156 00000 n
-0000248352 00000 n
-0000248534 00000 n
-0000248709 00000 n
-0000248875 00000 n
-0000249104 00000 n
-0000249278 00000 n
-0000249467 00000 n
-0000249753 00000 n
-0000249943 00000 n
-0000250295 00000 n
-0000250480 00000 n
-0000250707 00000 n
-0000250891 00000 n
-0000251120 00000 n
-0000251304 00000 n
-0000251570 00000 n
-0000251747 00000 n
-0000252013 00000 n
-0000252410 00000 n
-0000252668 00000 n
-0000252946 00000 n
-0000253145 00000 n
-0000253445 00000 n
-0000253767 00000 n
-0000254031 00000 n
-0000254316 00000 n
-0000254638 00000 n
-0000254895 00000 n
-0000255205 00000 n
-0000255534 00000 n
-0000255746 00000 n
-0000256211 00000 n
-0000257291 00000 n
-0000258196 00000 n
-0000260251 00000 n
-0000260570 00000 n
-0000260879 00000 n
-0000261197 00000 n
-0000261394 00000 n
-0000261574 00000 n
-0000261768 00000 n
-0000262025 00000 n
-0000262319 00000 n
-0000262517 00000 n
-0000262770 00000 n
-0000263048 00000 n
-0000263311 00000 n
-0000263568 00000 n
-0000263846 00000 n
-0000264039 00000 n
-0000264219 00000 n
-0000264476 00000 n
-0000264745 00000 n
-0000265012 00000 n
-0000265230 00000 n
-0000265500 00000 n
-0000265728 00000 n
-0000266016 00000 n
-0000266361 00000 n
-0000266558 00000 n
-0000266884 00000 n
-0000267079 00000 n
-0000267413 00000 n
-0000267772 00000 n
-0000268050 00000 n
-0000268368 00000 n
-0000268622 00000 n
-0000268817 00000 n
-0000269044 00000 n
-0000269322 00000 n
-0000269657 00000 n
-0000269934 00000 n
-0000270194 00000 n
-0000270496 00000 n
-0000270775 00000 n
-0000271000 00000 n
-0000271283 00000 n
-0000271478 00000 n
-0000271748 00000 n
-0000271943 00000 n
-0000272211 00000 n
-0000272475 00000 n
-0000272673 00000 n
-0000272983 00000 n
-0000273285 00000 n
-0000273585 00000 n
-0000273790 00000 n
-0000274003 00000 n
-0000274202 00000 n
-0000274416 00000 n
-0000274658 00000 n
-0000274899 00000 n
-0000275163 00000 n
-0000275345 00000 n
-0000275623 00000 n
-0000275841 00000 n
-0000276156 00000 n
-0000276476 00000 n
-0000276742 00000 n
-0000277034 00000 n
-0000277351 00000 n
-0000277616 00000 n
-0000277910 00000 n
-0000278479 00000 n
-0000279242 00000 n
-0000279954 00000 n
-0000280947 00000 n
-0000281586 00000 n
-0000282145 00000 n
-0000282713 00000 n
-0000282935 00000 n
-0000283122 00000 n
-0000283344 00000 n
-0000283729 00000 n
-0000284254 00000 n
-0000284485 00000 n
-0000284867 00000 n
-0000285316 00000 n
-0000285750 00000 n
-0000286210 00000 n
-0000286671 00000 n
-0000286870 00000 n
-0000287054 00000 n
-0000287487 00000 n
-0000287933 00000 n
-0000288387 00000 n
-0000288684 00000 n
-0000289140 00000 n
-0000289428 00000 n
-0000289928 00000 n
-0000290635 00000 n
-0000290856 00000 n
-0000291509 00000 n
-0000291725 00000 n
-0000292410 00000 n
-0000293143 00000 n
-0000293592 00000 n
-0000294200 00000 n
-0000294594 00000 n
-0000294800 00000 n
-0000295121 00000 n
-0000295582 00000 n
-0000296282 00000 n
-0000296748 00000 n
-0000297144 00000 n
-0000297662 00000 n
-0000298154 00000 n
-0000298460 00000 n
-0000298937 00000 n
-0000299145 00000 n
-0000299591 00000 n
-0000299798 00000 n
-0000300252 00000 n
-0000300686 00000 n
-0000300900 00000 n
-0000301463 00000 n
-0000302079 00000 n
-0000302608 00000 n
-0000302834 00000 n
-0000303100 00000 n
-0000303322 00000 n
-0000303563 00000 n
-0000303901 00000 n
-0000304223 00000 n
-0000304919 00000 n
-0000305599 00000 n
-0000306239 00000 n
-0000307121 00000 n
-0000307444 00000 n
-0000307777 00000 n
-0000308071 00000 n
-0000308334 00000 n
-0000308561 00000 n
-0000308862 00000 n
-0000309078 00000 n
-0000309381 00000 n
-0000309665 00000 n
-0000309842 00000 n
-0000310142 00000 n
-0000310309 00000 n
-0000310604 00000 n
-0000310814 00000 n
-0000311136 00000 n
-0000311723 00000 n
-0000312207 00000 n
-0000312497 00000 n
-0000312756 00000 n
-0000313097 00000 n
-0000313436 00000 n
-0000313748 00000 n
-0000314092 00000 n
-0000314330 00000 n
-0000314666 00000 n
-0000314970 00000 n
-0000315311 00000 n
-0000315617 00000 n
-0000315872 00000 n
-0000316224 00000 n
-0000316498 00000 n
-0000316856 00000 n
-0000317101 00000 n
-0000317455 00000 n
-0000317801 00000 n
-0000317984 00000 n
-0000318328 00000 n
-0000318657 00000 n
-0000318843 00000 n
-0000319224 00000 n
-0000319635 00000 n
-0000319831 00000 n
-0000320097 00000 n
-0000320521 00000 n
-0000321054 00000 n
-0000321456 00000 n
-0000321853 00000 n
-0000323284 00000 n
-0000324598 00000 n
-0000324718 00000 n
-0000324806 00000 n
-0000324879 00000 n
-0000328431 00000 n
-0000328605 00000 n
-0000328776 00000 n
-0000328945 00000 n
-0000329114 00000 n
-0000329282 00000 n
-0000329453 00000 n
-0000329643 00000 n
-0000329828 00000 n
-0000330060 00000 n
-0000330287 00000 n
-0000330498 00000 n
-0000330669 00000 n
-0000330839 00000 n
-0000331010 00000 n
-0000331180 00000 n
-0000331351 00000 n
-0000331521 00000 n
-0000331688 00000 n
-0000331872 00000 n
-0000332069 00000 n
-0000332267 00000 n
-0000332479 00000 n
-0000332638 00000 n
-0000332758 00000 n
-0000332877 00000 n
-0000332992 00000 n
-0000333107 00000 n
-0000333216 00000 n
-0000333256 00000 n
-0000333442 00000 n
-trailer
-<< /Size 1174
-/Root 1172 0 R
-/Info 1173 0 R
-/ID [<0E8EE6013E45B2563724A39F5DF447FF> <0E8EE6013E45B2563724A39F5DF447FF>] >>
-startxref
-333903
-%%EOF
diff --git a/doc/rspamd.texi b/doc/rspamd.texi
deleted file mode 100644
index 48e5740fa..000000000
--- a/doc/rspamd.texi
+++ /dev/null
@@ -1,1969 +0,0 @@
-\input texinfo
-@settitle "Rspamd Spam Filtering System"
-@titlepage
-
-@title Rspamd Spam Filtering System
-@subtitle A User's Guide for Rspamd
-
-@author Vsevolod Stakhov
-
-
-@end titlepage
-@contents
-
-@chapter Rspamd purposes and features.
-
-@section Introduction.
-Rspamd filtering system is created as a replacement of popular
-@code{spamassassin}
-spamd and is designed to be fast, modular and easily extendable system. Rspamd
-core is written in @code{C} language using event driven paradigma. Plugins for rspamd
-can be written in @code{lua}. Rspamd is designed to process connections
-completely asynchronous and do not block anywhere in code. Spam filtering system
-contains of several processes among them are:
-@itemize @bullet
-@item Main process
-@item Workers processes
-@item Controller process
-@item Other processes
-@end itemize
-Main process manages all other processes, accepting signals from OS (for example
-SIGHUP) and spawn all types of processes if any of them die. Workers processes
-do all tasks for filtering e-mail (or HTML messages in case of using rspamd as
-non-MIME filter). Controller process is designed to manage rspamd itself (for
-example get statistics or learning rspamd). Other processes can do different
-jobs among them now are implemented @code{LMTP} worker that implements
-@code{LMTP} protocol for filtering mail and fuzzy hashes storage server.
-
-@section Features.
-The main features of rspamd are:
-@itemize @bullet
-@item Completely asynchronous filtering that allows a big number of simultenious
-connections.
-@item Easily extendable architecture that can be extended by plugins written in
-@code{lua} and by dynamicaly loaded plugins written in @code{c}.
-@item Ability to work in cluster: rspamd is able to perform statfiles
-synchronization, dynamic load of lists via HTTP, to use distributed fuzzy hashes
-storage.
-@item Advanced statistics: rspamd now is shipped with winnow-osb classifier that
-provides more accurate statistics than traditional bayesian algorithms based on
-single words.
-@item Internal optimizer: rspamd first of all try to check rules that were met
-more often, so for huge spam storms it works very fast as it just checks only
-that rules that @emph{can} happen and skip all others.
-@item Ability to manage the whole cluster by using controller process.
-@item Compatibility with existing @code{spamassassin} SPAMC protocol.
-@item Extended @code{RSPAMC} protocol that allows to pass many additional data
-from SMTP dialog to rspamd filter.
-@item Internal support of IMAP in rspamc client for automated learning.
-@item Internal support of many anti-spam technologies, among them are
-@code{SPF} and @code{SURBL}.
-@item Active support and development of new features.
-@end itemize
-
-@chapter Installation of rspamd.
-
-@section Obtaining of rspamd.
-
-The main rspamd site is @url{http://rspamd.sourceforge.net/, sourceforge}. Here
-you can obtain source code package as well as pre-packed packages for different
-operating systems and architectures. Also, you can use SCM
-@url{http://mercurial.selenic.com, mercurial} for accessing rspamd development
-repository that can be found here:
-@url{http://rspamd.hg.sourceforge.net:8000/hgroot/rspamd/rspamd}. Rspamd is
-shipped with all modules and sample config by default. But there are some
-requirements for building and running rspamd.
-
-@section Requirements.
-
-For building rspamd from sources you need @code{CMake} system. CMake is very
-nice source building system and I decided to use it instead of GNU autotools.
-CMake can be obtained here: @url{http://cmake.org}. Also rspamd uses gmime and
-glib for MIME parsing and many other purposes (note that you are NOT required
-to install any GUI libraries - nor glib, nor gmime are GUI libraries). Gmime
-and glib can be obtained from gnome site: @url{http://ftp.gnome.org/}. For
-plugins and configuration system you also need lua language interpreter and
-libraries. They can be easily obtained from @url{http://lua.org, official lua
-site}. Also for rspamc client you need @code{perl} interpreter that could be
-installed from @url{http://www.perl.org}.
-
-@section Building and Installation.
-
-Build process of rspamd is rather simple:
-@itemize @bullet
-@item Configure rspamd build environment, using cmake:
-@example
-$ cmake .
-...
--- Configuring done
--- Generating done
--- Build files have been written to: /home/cebka/rspamd
-@end example
-@noindent
-For special configuring options you can use
-@example
-$ ccmake .
- CMAKE_BUILD_TYPE
- CMAKE_INSTALL_PREFIX /usr/local
- DEBUG_MODE ON
- ENABLE_GPERF_TOOLS OFF
- ENABLE_OPTIMIZATION OFF
- ENABLE_PERL OFF
- ENABLE_PROFILING OFF
- ENABLE_REDIRECTOR OFF
- ENABLE_STATIC OFF
-@end example
-@noindent
-Options allows building rspamd as static module (note that in this case
-dynamicaly loaded plugins are @strong{NOT} supported), linking rspamd with
-google performance tools for benchmarking and include some other flags while
-building.
-@item Build rspamd sources:
-@example
-$ make
-[ 6%] Built target rspamd_lua
-[ 11%] Built target rspamd_json
-[ 12%] Built target rspamd_evdns
-[ 12%] Built target perlmodule
-[ 58%] Built target rspamd
-[ 76%] Built target test/rspamd-test
-[ 85%] Built target utils/expression-parser
-[ 94%] Built target utils/url-extracter
-[ 97%] Built target rspamd_ipmark
-[100%] Built target rspamd_regmark
-@end example
-@noindent
-@item Install rspamd (as superuser):
-@example
-# make install
-Install the project...
-...
-@end example
-@noindent
-@end itemize
-
-After installation you would have several new files installed:
-@itemize @bullet
-
-@item Binaries:
-@itemize @bullet
-@item PREFIX/bin/rspamd - main rspamd executable
-@item PREFIX/bin/rspamc - rspamd client program
-@end itemize
-@item Sample configuration files and rules:
-@itemize @bullet
-@item PREFIX/etc/rspamd.xml.sample - sample main config file
-@item PREFIX/etc/rspamd/lua/*.lua - rspamd rules
-@end itemize
-@item Lua plugins:
-@itemize @bullet
-@item PREFIX/etc/rspamd/plugins/lua/*.lua - lua plugins
-@end itemize
-
-@end itemize
-For @code{FreeBSD} system there also would be start script for running rspamd in
-@emph{PREFIX/etc/rc.d/rspamd.sh}.
-
-@section Running rspamd.
-
-Rspamd can be started by running main rspamd executable -
-@code{PREFIX/bin/rspamd}. There are several command-line options that can be
-passed to rspamd. All of them can be displayed by passing --help argument:
-@example
-$ rspamd --help
-Usage:
- rspamd [OPTION...] - run rspamd daemon
-
-Summary:
- Rspamd daemon version 0.3.0
-
-Help Options:
- -?, --help Show help options
-
-Application Options:
- -t, --config-test Do config test and exit
- -f, --no-fork Do not daemonize main process
- -c, --config Specify config file
- -u, --user User to run rspamd as
- -g, --group Group to run rspamd as
- -p, --pid Path to pidfile
- -V, --dump-vars Print all rspamd variables and exit
- -C, --dump-cache Dump symbols cache stats and exit
- -X, --convert-config Convert old style of config to xml one
-@end example
-@noindent
-
-All options are optional: by default rspamd would try to read
-@code{PREFIX/etc/rspamd.xml} config file and run as daemon. Also there is test
-mode that can be turned on by passing @option{-t} argument. In test mode rspamd
-would read config file and checks its syntax, if config file is OK, then exit
-code is zero and non zero otherwise. Test mode is useful for testing new config
-file without restarting of rspamd. With @option{-C} and @option{-V} arguments it is
-possible to dump variables or symbols cache data. The last ability can be used
-for determining which symbols are most often, which are most slow and to watch
-to real order of rules inside rspamd. @option{-X} option can be used to convert
-old style (pre 0.3.0) config to xml one:
-@example
-$ rspamd -c ./rspamd.conf -X ./rspamd.xml
-@end example
-@noindent
-After this command new xml config would be dumped to rspamd.xml file.
-
-@section Managing rspamd with signals.
-First of all it is important to note that all user's signals should be sent to
-rspamd main process and not to its children (as for child processes these
-signals may have other meanings). To determine which process is main you can use
-two ways:
-@itemize @bullet
-@item by reading pidfile:
-@example
-$ cat pidfile
-@end example
-@noindent
-@item by getting process info:
-@example
-$ ps auxwww | grep rspamd
-nobody 28378 0.0 0.2 49744 9424 rspamd: main process (rspamd)
-nobody 64082 0.0 0.2 50784 9520 rspamd: worker process (rspamd)
-nobody 64083 0.0 0.3 51792 11036 rspamd: worker process (rspamd)
-nobody 64084 0.0 2.7 158288 114200 rspamd: controller process (rspamd)
-nobody 64085 0.0 1.8 116304 75228 rspamd: fuzzy storage (rspamd)
-
-$ ps auxwww | grep rspamd | grep main
-nobody 28378 0.0 0.2 49744 9424 rspamd: main process (rspamd)
-@end example
-@noindent
-@end itemize
-
-After getting pid of main process it is possible to manage rspamd with signals:
-@itemize @bullet
-@item SIGHUP - restart rspamd: reread config file, start new workers (as well as
-controller and other processes), stop accepting connections by old workers,
-reopen all log files. Note that old workers would be terminated after one minute
-that should allow to process all pending requests. All new requests to rspamd
-would be processed by newly started workers.
-@item SIGTERM - terminate rspamd system.
-@end itemize
-
-These signals may be used in start scripts as it is done in @code{FreeBSD} start
-script. Restarting of rspamd is doing rather softly: no connections would be
-dropped and if new config is syntaxically incorrect old config would be used.
-
-@chapter Configuring of rspamd.
-
-@section Principles of work.
-
-We need to define several terms to explain configuration of rspamd. Rspamd
-operates with @strong{rules}, each rule defines some actions that should be done with
-message to obtain result. Result is called @strong{symbol} - a symbolic
-representation of rule. For example, if we have a rule to check DNS record for
-a url that contains in message we may insert resulting symbol if this DNS record
-is found. Each symbol has several attributes:
-@itemize @bullet
-@item name - symbolic name of symbol (usually uppercase, e.g. MIME_HTML_ONLY)
-@item weight - numeric weight of this symbol (this means how important this rule is), may
-be negative
-@item options - list of symbolic options that defines additional information about
-processing this rule
-@end itemize
-
-Weights of symbols are called @strong{factors}. Also when symbol is inserted it
-is possible to define additional multiplier to factor. This can be used for
-rules that have dynamic weights, for example statistical rules (when probability
-is higher weight must be higher as well).
-
-All symbols and corresponding rules are combined in @strong{metrics}. Metric
-defines a group of symbols that are designed for common purposes. Each metric
-has maximum weight: if sum of all rules' results (symbols) is bigger than this
-limit then this message is considered as spam in this metric. The default metric
-is called @emph{default} and rules that have not explicitly specified metric
-would insert their results to this default metric.
-
-Let's impress how this technics works:
-@enumerate 1
-@item First of all when rspamd is running each module (lua, internal or external
-dynamic module) can register symbols in any defined metric. After this process
-rspamd has a cache of symbols for each metric. This cache can be saved to file
-for speeding up process of optimizing order of calling of symbols.
-@item Rspamd gets a message from client and parse it with mime parsing and do
-other parsing jobs like extracting text parts, urls, and stripping html tags.
-@item For each metric rspamd is looking to metric's cache and select rules to
-check according to their order (this order depends on frequence of symbol, its
-weight and execution time).
-@item Rspamd calls rules of metric till the sum weight of symbols in metric is
-less than its limit.
-@item If sum weight of symbols is more than limit the processing of rules is
-stopped and message is counted as spam in this metric.
-@end enumerate
-
-After processing rules rspamd is also does statistic check of message. Rspamd
-statistic module is presented as a set of @strong{classifiers}. Each classifier
-defines algorithm of statistic checks of messages. Also classifier definition
-contains definition of @strong{statistic files} (or @strong{statfiles} shortly).
-Each statfile contains of number of patterns that are extracted from messages.
-These patterns are put into statfiles during learning process. A short example:
-you define classifier that contains two statfiles: @emph{ham} and @emph{spam}.
-Than you find 10000 messages that are spam and 10000 messages that contains ham.
-Then you learn rspamd with these messages. After this process @emph{ham}
-statfile contains patterns from ham messages and @emph{spam} statfile contains
-patterns from spam messages. Then when you are checking message via this
-statfiles messages that are like spam would have more probability/weight in
-@emph{spam} statfile than in @emph{ham} statfile and classifier would insert
-symbol of @emph{spam} statfile and would calculate how this message is like
-patterns that are contained in @emph{spam} statfile. But rspamd is not limiting
-you to define one classifier or two statfiles. It is possible to define a number
-of classifiers and a number of statfiles inside a classifier. It can be useful
-for personal statistic or for specific spam patterns. Note that each classifier
-can insert only one symbol - a symbol of statfile with max weight/probability.
-Also note that statfiles check is allways done after all rules. So statistic can
-@strong{correct} result of rules.
-
-Now some words about @strong{modules}. All rspamd rules are contained in
-modules. Modules can be internal (like SURBL, SPF, fuzzy check, email and
-others) and external written in @code{lua} language. In fact there is no differ
-in the way, how rules of these modules are called:
-@enumerate 1
-@item Rspamd loads config and loads specified modules.
-@item Rspamd calls init function for each module passing configurations
-arguments.
-@item Each module examines configuration arguments and register its rules (or
-not register depending on configuration) in rspamd metrics (or in a single
-metric).
-@item During metrics process rspamd calls registered callbacks for module's
-rules.
-@item These rules may insert results to metric.
-@end enumerate
-
-So there is no actual difference between lua and internal modules, each are just
-providing callbacks for processing messages. Also inside callback it is possible
-to change state of message's processing. For example this can be done when it is
-required to make DNS or other network request and to wait result. So modules can
-pause message's processing while waiting for some event. This is true for lua
-modules as well.
-
-@section Rspamd config file structure.
-
-Rspamd config file is placed in PREFIX/etc/rspamd.xml by default. You can
-specify other location by passing @option{-c} option to rspamd. Rspamd config file
-contains configuration parameters in XML format. XML was selected for rather
-simple manual editing config file and for simple automatic generation as well as
-for dynamic configuration. I've decided to move rules logic from XML file to
-keep it small and simple. So rules are defined in @code{lua} language and rspamd
-parameters are defined in xml file (rspamd.xml). Configuration rules are
-included by @strong{<lua>} tag that have @strong{src} attribute that defines
-relative path to lua file (relative to placement of rspamd.xml):
-@example
-<lua src="rspamd/lua/rspamd.lua">fake</lua>
-@end example
-@noindent
-Note that it is not currently possible to have empty tags. I hope this
-restriction would be fixed in future. Rspamd xml config consists of several
-sections:
-@itemize @bullet
-@item Main section - section where main config parameters are placed.
-@item Workers section - section where workers are described.
-@item Classifiers section - section where you define your classify logic
-@item Modules section - a set of sections that describes module's rules (in fact
-these rules should be in lua code)
-@item Metrics section - a section where you can set weights of symbols in metrics and metrics settings
-@item Logging section - a section that describes rspamd logging
-@item Views section - a section that defines rspamd views
-@end itemize
-
-So common structure of rspamd.xml can be described this way:
-@example
-<? xml version="1.0" encoding="utf-8" ?>
-<rspamd>
- <!-- Main section directives -->
- ...
- <!-- Workers directives -->
- <worker>
- ...
- </worker>
- ...
- <!-- Classifiers directives -->
- <classifier>
- ...
- </classifier>
- ...
- <!-- Logging section -->
- <logging>
- <type>console</type>
- <level>info</level>
- ...
- </logging>
- <!-- Views section -->
- <view>
- ...
- </view>
- ...
- <!-- Modules settings -->
- <module name="regexp">
- <option name="test">test</option>
- ...
- </module>
- ...
-</rspamd>
-@end example
-
-Each of these sections would be described further in details.
-
-@section Rspamd configuration atoms.
-
-There are several primitive types of rspamd configuration parameters:
-@itemize @bullet
-@item String - common string that defines option.
-@item Number - integer or fractional number (e.g.: 10 or -1.5).
-@item Time - ammount of time in milliseconds, may has suffixes:
-@itemize @bullet
-@item @emph{s} - for seconds (e.g. @emph{10s});
-@item @emph{m} - for minutes (e.g. @emph{10m});
-@item @emph{h} - for hours (e.g. @emph{10h});
-@item @emph{d} - for days (e.g. @emph{10d});
-@end itemize
-@item Size - like number numerci reprezentation of size, but may have a suffix:
-@itemize @bullet
-@item @emph{k} - 'kilo' - number * 1024 (e.g. @emph{10k});
-@item @emph{m} - 'mega' - number * 1024 * 1024 (e.g. @emph{10m});
-@item @emph{g} - 'giga' - number * 1024 * 1024 * 1024 (e.g. @emph{1g});
-@end itemize
-@noindent
-Size atoms are used for memory limits for example.
-@item Lists - path to dynamic rspamd list (e.g. @emph{http://some.host/some/path}).
-@end itemize
-
-While practically all atoms are rather trivial to understand rspamd lists may
-cause some confusion. Lists are widely used in rspamd for getting data that can
-be often changed for example white or black lists, lists of ip addresses, lists
-of domains. So for such purposes it is possible to use files that can be get
-either from local filesystem (e.g. @code{file:///var/run/rspamd/whitelsist}) or
-by HTTP (e.g. @code{http://some.host/some/path/list.txt}). Rspamd constantly
-looks for changes in this files, if using HTTP it also set
-@emph{If-Modified-Since} header and check for @emph{Not modified} reply. So it
-causes no overhead when lists are not modified and may allow to store huge lists
-and to distribute them over HTTP. Monitoring of lists is done with some random
-delay (jitter), so if you have many rspamd servers in cluster that are
-monitoring a single list they would come to check or download it in slightly different
-time. The two most common list formats are @emph{IP list} and @emph{domains
-list}. IP list contains of ip addresses in dot notation (e.g.
-@code{192.168.1.1}) or ip/network pairs in CIDR notation (e.g.
-@code{172.16.0.0/16}). Items in lists are separated by newline symbol. Lines
-that begin with @emph{#} symbol are considered as comments and are ignored while
-parsing. Domains list is very like ip list with difference that it contains
-domain names.
-
-@section Main rspamd configuration section.
-
-Main rspamd configurtion section contains several definitions that determine
-main parameters of rspamd for example path to pidfile, temporary directory, lua
-includes, several limits e.t.c. Here is list of this directives explained:
-
-@multitable @columnfractions .2 .8
-@headitem Tag @tab Mean
-
-@item @var{<tempdir>}
-@tab Defines temporary directory for rspamd. Default is to use @env{TEMP}
-environment variable or @code{/tmp}.
-
-@item @var{<pidfile>}
-@tab Path to rspamd pidfile. Here would be stored a pid of main process.
-Pidfile is used to manage rspamd from start scripts.
-
-@item @var{<statfile_pool_size>}
-@tab Limit of statfile pool size: a total number of bytes that can be used for
-mapping statistic files. Rspamd is using LRU system and would unmap the most
-unused statfile when this limit would be reached. The common sense is to set
-this variable equal to total size of all statfiles, but it can be less than this
-in case of dynamic statfiles (for per-user statistic).
-
-@item @var{<filters>}
-@tab List of enabled internal filters. Items in this list can be separated by
-spaces, semicolons or commas. If internal filter is not specified in this line
-it would not be loaded or enabled.
-
-@item @var{<raw_mode>}
-@tab Boolean flag that specify whether rspamd should try to convert all
-messages to UTF8 or not. If @var{raw_mode} is enabled all messages are
-processed @emph{as is} and are not converted. Raw mode is faster than utf mode
-but it may confuse statistics and regular expressions.
-
-@item @var{<lua>}
-@tab Defines path to lua file that should be loaded fro configuration. Path to
-this file is defined in @strong{src} attribute. Text inside tag is required but
-is not parsed (this is stupid limitation of parser's design).
-@end multitable
-
-@section Rspamd logging configuration.
-
-Rspamd has a number of logging variants. First of all there are three types of
-logs that are supported by rspamd: console loggging (just output log messages to
-console), file logging (output log messages to file) and logging via syslog.
-Also it is possible to filter logging to specific level:
-@itemize @bullet
-@item error - log only critical errors
-@item warning - log errors and warnings
-@item info - log all non-debug messages
-@item debug - log all including debug messages (huge amount of logging)
-@end itemize
-Also it is possible to turn on debug messages for specific ip addresses. This
-ability is usefull for testing.
-
-For each logging type there are special mandatory parameters: log facility for
-syslog (read @emph{syslog (3)} manual page for details about facilities), log
-file for file logging. Also file logging may be buffered for speeding up. For
-reducing logging noise rspamd detects for sequential identic log messages and
-replace them with total number of repeats:
-@example
-#81123(fuzzy): May 11 19:41:54 rspamd file_log_function: Last message repeated 155 times
-#81123(fuzzy): May 11 19:41:54 rspamd process_write_command: fuzzy hash was successfully added
-@end example
-
-Here is summary of logging parameters:
-
-
-@multitable @columnfractions .2 .8
-@headitem Tag @tab Mean
-@item @var{<type>}
-@tab Defines logging type (file, console or syslog). For each type mandatory
-attriute must be present:
-@itemize @bullet
-@item @emph{filename} - path to log file for file logging type;
-@item @emph{facility} - syslog logging facility.
-@end itemize
-
-@item @var{<level>}
-@tab Defines loggging level (error, warning, info or debug).
-
-@item @var{<log_buffer>}
-@tab For file and console logging defines buffer in bytes (kilo, mega or giga
-bytes) that would be used for logging output.
-
-@item @var{<log_urls>}
-@tab Flag that defines whether all urls in message would be logged. Useful for
-testing.
-
-@item @var{<debug_ip>}
-@tab List that contains ip addresses for which debugging would be turned on. For
-more information about ip lists look at config atoms section.
-@end multitable
-
-@section Metrics configuration.
-
-Setting of rspamd metrics is the main way to change rules' weights. You can set
-up weights for all rules: for those that have static weights (for example simple
-regexp rules) and for those that have dynamic weights (for example statistic
-rules). In all cases the base weight of rule is multiplied by metric's weight value.
-For static rules base weight is usually 1.0. So we have:
-@itemize @bullet
-@item @math{w_{symbol} = w_{static} * factor} - for static rules
-@item @math{w_{symbol} = w_{dynamic} * factor} - for dynamic rules
-@end itemize
-Also there is an ability to add so called "grow factor" - additional multiplier
-that would be used when we have more than one symbol in metric. So for each
-added symbol this factor would increment its power. This can be written as:
-@math{w_{total} = w_1 * gf ^ 0 + w_2 * gf ^ 1 + ... + w_n * gf ^ {n - 1}}
-Grow multiplier is used to increment weight of rules when message got many
-symbols (likely spammy). Note that only rules with positive weights would
-increase grow factor, those with negative weights would just be added. Also note
-that grow factor can be less than 1 but it is uncommon use (in this case we
-would have weight lowering when we have many symbols for this message). Metrics
-can be set up with config section(s) @emph{metric}:
-@example
-<metric>
- <name>test_metric</name>
- <action>reject</action>
- <symbol weight="0.1">MIME_HTML_ONLY</symbol>
- <grow_factor>1.1</grow_factor>
-</metric>
-@end example
-
-Note that you basically need to add symbols to metric when you add additional rules.
-The decision of weight of newly added rule basically depends on its importance. For
-example you are absolutely sure that some rule would add a symbol on only spam
-messages, so you can increase weight of such rule so it would filter such spam.
-But if you increase weight of rules you should be more or less sure that it
-would not increase false positive errors rate to unacceptable level (false
-positive errors are errors when good mail is treated as spam). Rspamd comes with
-a set of default rules and default weights of that rules are placed in
-rspamd.xml.sample. In most cases it is reasonable to change them for your mail
-system, for example increase weights of some rules or decrease for others. Also
-note that default grow factor is 1.0 that means that weights of rules do not
-depend on count of added symbols. For some situations it useful to set grow
-factor to value more than 1.0. Also by modifying weights it is possible to
-manage static multiplier for dynamic rules.
-
-@section Workers configuration.
-
-Workers are rspamd processes that are doing specific jobs. Now are supported 4
-types of workers:
-@enumerate 1
-@item Normal worker - a typical worker that process messages.
-@item Controller worker - a worker that manages rspamd, get statistics and do
-learning tasks.
-@item Fuzzy storage worker - a worker that contains a collection of fuzzy
-hashes.
-@item LMTP worker - experimental worker that acts as LMTP server.
-@end enumerate
-
-These types of workers has some common parameters:
-@multitable @columnfractions .2 .8
-@headitem Parameter @tab Mean
-@item @emph{<type>}
-@tab Type of worker (normal, controller, lmtp or fuzzy)
-@item @emph{<bind_socket>}
-@tab Socket credits to bind this worker to. Inet and unix sockets are supported:
-@example
-<bind_socket>localhost:11333</bind_socket>
-<bind_socket>/var/run/rspamd.sock</bind_socket>
-@end example
-@noindent
-Also for inet sockets you may specify @code{*} as address to bind to all
-available inet interfaces:
-@example
-<bind_socket>*:11333</bind_socket>
-@end example
-@noindent
-@item @emph{<count>}
-@tab Number of worker processes of this type. By default this number is
-equialent to number of logical processors in system.
-@item @emph{<maxfiles>}
-@tab Maximum number of file descriptors available to this worker process.
-@item @emph{<maxcore>}
-@tab Maximum size of core file that would be dumped in cause of critical errors
-(in mega/kilo/giga bytes).
-@end multitable
-
-Also each of workers types can have specific parameters:
-@itemize @bullet
-@item Normal worker:
-@itemize @bullet
-@item @var{<custom_filters>} - path to dynamically loaded plugins that would do real
-check of incoming messages. These modules are described further.
-@item @var{<mime>} - if this parameter is "no" than this worker assumes that incoming
-messages are in non-mime format (e.g. forum's messages) and standart mime
-headers are added to them.
-@end itemize
-@item Controller worker:
-@itemize @bullet
-@item @var{<password>} - a password that would be used to access to contorller's
-privilleged commands.
-@end itemize
-@item Fuzzy worker:
-@itemize @bullet
-@item @var{<hashfile>} - a path to file where fuzzy hashes would be permamently stored.
-@item @var{<use_judy>} - if libJudy is present in system use it for faster storage.
-@item @var{<frequent_score>} - if judy is not turned on use this score to place hashes
-with score that is more than this value to special faster list (this is designed
-to increase lookup speed for frequent hashes).
-@item @var{<expire>} - time to expire of fuzzy hashes after their placement in storage.
-@end itemize
-@end itemize
-
-These parameters can be set inside worker's definition:
-@example
-<worker>
- <type>fuzzy</type>
- <bind_socket>*:11335</bind_socket>
- <count>1</count>
- <maxfiles>2048</maxfiles>
- <maxcore>0</maxcore>
-<!-- Other params -->
- <param name="use_judy">yes</param>
- <param name="hashfile">/spool/rspamd/fuzzy.db</param>
- <param name="expire">10d</param>
-</worker>
-@end example
-@noindent
-
-The purpose of each worker's type would be described later. The main parameters
-that could be defined are bind sockets for workers, their count, password for
-controller's commands and parameters for fuzzy storage. Default config provides
-reasonable values of this parameters (except password of course), so for basic
-configuration you may just replace controller's password to more secure one.
-
-@section Classifiers configuration.
-
-@subsection Common classifiers options.
-
-Each classifier has mandatory option @var{type} that defines internal algorithm
-that is used for classifying. Currently only @code{winnow} is supported. You can
-read theoretical description of algorithm used here:
-@url{http://www.siefkes.net/papers/winnow-spam.pdf}
-
-The common classifier configuration consists of base classifier parameters and
-definitions of two (or more than two) statfiles. During classify process rspamd
-check each statfile in classifier and select those that has more
-probability/weight than others. If all statfiles has zero weight this classifier
-do not add any symbols. Among common classifiers options are:
-@multitable @columnfractions .2 .8
-@headitem Tag @tab Mean
-@item @var{<tokenizer>}
-@tab Tokenizer to extract tokens from messages. Currently only @emph{osb}
-tokenizer is supported
-@item @var{<metric>}
-@tab Metric to which this classifier would insert symbol.
-@end multitable
-
-Also option @var{min_tokens} is supported to specify minimum number of tokens to
-work with (this is usefull to avoid classifying of short messages as statistic
-is practically useless for small amount of tokens). Here is example of base
-classifier config:
-@example
-<classifier type="winnow">
- <tokenizer>osb-text</tokenizer>
- <metric>default</metric>
- <option name="min_tokens">20</option>
- <statfile>
- ...
- </statfile>
-</classifier>
-@end example
-
-@subsection Statfiles options.
-
-The most common statfile options are @var{symbol} and @var{size}. The first one defines
-which symbol would be inserted if this statfile would have maximal weight inside
-classifier and size defines statfile size on disk and in memory. Note that
-statfiles are mapped directly to memory and you should practically note
-parameter @var{statfile_pool_size} of main section which defines maximum ammount
-of memory for mapping statistic files. Also note that statistic files are
-of constant size: if you defines 100 megabytes statfile it would occupy 100
-megabytes of disc space and 100 megabytes of memory when it is used (mapped).
-Each statfile is indexed by tokens and contains so called "token chains". This
-mechanizm would be described further but note that each statfile has parameter
-"free tokens" that defines how much space is available for new tokens. If
-statfile has no free space the most unused tokens would be removed from
-statfile.
-
-Here is list of common options of statfiles:
-@multitable @columnfractions .2 .8
-@headitem Tag @tab Mean
-@item @var{<symbol>}
-@tab Defines symbol to insert for this statfile.
-@item @var{<size>}
-@tab Size of this statfile in bytes (kilo/mega/giga bytes).
-@item @var{<path>}
-@tab Filesystem path to statistic file.
-@item @var{<normalizer>}
-@tab Defines weight normalization structure. Can be lua function name or
-internal normalizer. Internal normalizer is defined in format:
-"internal:<max_weight>" where max_weight is fractional number that limits the
-maximum weight of this statfile's symbol (this is so called dynamic weight).
-@item @var{<binlog>}
-@tab Defines binlog affinity: master or slave. This option is used for statfiles
-binary sync that would be described further.
-@item @var{<binlog_master>}
-@tab Defines credits of binlog master for this statfile.
-@item @var{<binlog_rotate>}
-@tab Defines rotate time for binlog.
-@end multitable
-
-Internal normalization of statfile weight works in this way:
-@itemize @bullet
-@item @math{R_{score} = 1} when @math{W_{statfile} < 1}
-@item @math{R_{score} = W_statfile ^ 2} when @math{1 < W_{statfile} < max / 2}
-@item @math{R_{score} = W_statfile} when @math{max / 2 < W_{statfile} < max}
-@item @math{R_{score} = max} when @math{W_{statfile} > max}
-@end itemize
-
-The final result weight would be: @math{weight = R_{score} * W_{weight}}.
-Here is sample classifier configuration with two statfiles that can be used for
-spam/ham classifying:
-
-@example
- <symbol weight="-1.00">WINNOW_HAM</symbol>
- <symbol weight="1.00">WINNOW_SPAM</symbol>
-...
-
-<!-- Classifiers section -->
-<classifier type="winnow">
- <tokenizer>osb-text</tokenizer>
- <metric>default</metric>
- <option name="min_tokens">20</option>
- <statfile>
- <symbol>WINNOW_HAM</symbol>
- <size>100M</size>
- <path>/var/run/rspamd/data.ham</path>
- <normalizer>internal:3</normalizer>
- </statfile>
- <statfile>
- <symbol>WINNOW_SPAM</symbol>
- <size>100M</size>
- <path>/var/run/rspamd/data.spam</path>
- <normalizer>internal:3</normalizer>
- </statfile>
-</classifier>
-<!-- End of classifiers section -->
-@end example
-@noindent
-In this sample we define classifier that contains two statfiles:
-@emph{WINNOW_SPAM} and @emph{WINNOW_HAM}. Each statfile has 100 megabytes size
-(so they would occupy 200Mb while classifying). Also each statfile has maximum
-weight of 3 so with such weights (-1 for WINNOW_HAM and 1 for WINNOW_SPAM) the
-result weight of symbols would be 0..3 for @emph{WINNOW_SPAM} and 0..-3 for
-@emph{WINNOW_HAM}.
-
-@section Composites config.
-
-Composite symbols are rules that allow combining of several other symbols by
-using logical expressions. For example you can add composite symbol COMP1 that
-would be added if SYMBOL1 and SYMBOL2 are presented after message checks. When
-composite symbol is added the symbols that are in that composite are removed. So
-if message has symbols SYMBOL1 and SYMBOL2 the composite symbol COMP1 would be
-inserted in place of these two symbols. Not that if composite symbol is not
-inserted the symbols that are inside it are not touched. So SYMBOL1 and SYMBOL2
-can be presented separately, but when COMP1 is added SYMBOL1 and SYMBOL2 would
-be removed. Composite symbols can be defined in main configuration section. Here
-is example of composite rules definition:
-
-@example
-<composite name="ONCE_RECEIVED_PBL">ONCE_RECEIVED &amp; RECEIVED_PBL</composite>
-<composite name="SPF_TRUSTED">R_SPF_TRUSTED &amp; R_SPF_ALLOW</composite>
-<composite name="TRUSTED_FROM">R_TRUSTED_FROM &amp; R_SPF_ALLOW</composite>
-@end example
-
-Note that you need to insert xml entity (@emph{&amp;}) instead of '&' symbol;
-
-@section Modules config.
-
-@subsection Lua modules loading.
-For loading custom lua modules you should use @emph{<modules>} section:
-@example
-<modules>
- <module>/usr/local/etc/rspamd/plugins/lua</module>
-</modules>
-@end example
-@noindent
-Each @emph{<module>} directive defines path to lua modules. If this is a
-directory so all @code{*.lua} files inside that directory would be loaded. If
-this is a file it would be loaded directly.
-
-@subsection Modules configuration.
-Each module can have its own config section (this is true not only for internal
-module but also for lua modules). Such section is called @emph{<module>} with
-mandatory attribute @emph{"name"}. Each module can be configured by
-@emph{<option>} directives. These directives must also have @emph{"name"}
-attribute. So module configuration is done in @code{param = value} style:
-@example
-<module name="fuzzy_check">
- <option name="servers">localhost:11335</option>
- <option name="symbol">R_FUZZY</option>
- <option name="min_length">300</option>
- <option name="max_score">10</option>
-</module>
-@end example
-@noindent
-The common parameters are:
-@itemize @bullet
-@item symbol - symbol that this module should insert.
-@end itemize
-But each module can have its own unique parameters. So it would be discussed
-furhter in detailed modules description. Also note that for internal modules you
-should edit @emph{<filters>} parameter in main section: this parameter defines
-which internal modules would be turned on in this configuration.
-
-@section Views config.
-It is possible to make different rules for different
-networks/senders/recipients. For this purposes you can use rspamd views: maps of
-conditions (ip, sender, recipients) and actions, associated with them. For
-example you can turn rspamd off for specific conditions by using
-@emph{skip_check} action or check only specific rules. Views are defined inside
-@emph{<view>} xml section. Here is list of available tags inside section:
-@multitable @columnfractions .2 .8
-@headitem Tag @tab Mean
-@item @var{<skip_check>}
-@tab Boolean flag (yes or no) that specifies whether rspamd checks should be
-turned off for this ip
-@item @var{<symbols>}
-@tab Defines comma-separated list of symbols that should be checked for this
-view
-@item @var{<ip>}
-@tab Map argument that defines path to list of ip addresses (may be with CIDR
-masks) to which this view should be applied.
-@item @var{<client_ip>}
-@tab Map argument that defines path to list of ip addresses of rspamd clients
-to which this view should be applied. Note that this is ip of rspamd client not
-ip of message's sender.
-@item @var{<from>}
-@tab Map argument that defines path to list of senders to which this view should
-be applied.
-@end multitable
-Here is an example view definition
-@example
-<view>
- <skip_check>yes</skip_check>
- <ip>file:///usr/local/etc/rspamd/whitelist</ip>
-</view>
-@end example
-
-@chapter Rspamd clients interaction.
-
-@section Introduction.
-After you have basic config file you may test rspamd functionality by using
-whether telnet like utility or @emph{rspamc} client. For testing newly installed
-config it is possible to run config file test:
-@example
-$ rspamd -t
-syntax OK
-@end example
-
-Rspamc utility is written in @code{perl} language and uses perl modules that are
-shipped with rspamd: @emph{Mail::Rspamd::Client} for client's protocol and
-@emph{Mail::Rspamd::Config} for reading and writing configuration. The
-documentation for these modules can be found by commands:
-@example
-$ perldoc Mail::Rspamd::Client
-$ perldoc Mail::Rspamd::Config
-@end example
-
-So other way to access rspamd is to use perl client API:
-@example
-use Mail::Rspamd::Client;
-my $config = @{
- hosts => ['localhost:11333'],
-@};
-
-my $client = new Mail::Rspamd::Client(%config);
-
-if (! $client->ping()) @{
- die "Cannot ping rspamd: $client->@{error@}";
-@}
-
-my $result = $client->check($testmsg);
-
-if ($result->@{'default'@}->@{isspam@} eq 'True') @{
- # do something with spam message here
-@}
-@end example
-
-@section Rspamc protocol.
-Rspamc protocol is an extension over traditional spamc protocol that is used by
-spamassassin. This protocol looks like traditional HTTP session: first line is
-method with version, headers can be passed by next lines and the message itself
-is waited after empty line:
-@example
-<REQUEST>
-SYMBOLS RSPAMC/1.1
-Content-Length: 2200
-
-<message octets>
-
-<REPLY>
-RSPAMD/1.1 0 OK
-Metric: default; True; 10.40 / 10.00 / 0.00
-Symbol: R_UNDISC_RCPT
-Symbol: ONCE_RECEIVED
-Symbol: R_MISSING_CHARSET
-Urls:
-@end example
-@noindent
-The format of method line can be presented as:
-@example
-<COMMAND> RSPAMC/<version>
-@end example
-@noindent
-Version can be 1.0 and 1.1. The main difference that in 1.1 metrics output also
-has @emph{reject score} - hard limit of score for metric. This would be
-discussed while describing user's options. Commands are:
-@multitable @columnfractions .2 .8
-@headitem Command @tab Mean
-@item CHECK
-@tab Check a message and output results for each metric. But do not output
-symbols.
-@item SYMBOLS
-@tab Same as @emph{CHECK} but output symbols.
-@item PROCESS
-@tab Same as @emph{SYMBOLS} but output also original message with inserted
-X-Spam headers.
-@item PING
-@tab Do not do any processing, just check rspamd state:
-@example
-$ telnet localhost 11333
-Trying 127.0.0.1...
-Connected to localhost.
-Escape character is '^]'.
-PING RSPAMC/1.1
-
-RSPAMD/1.1 0 PONG
-Connection closed by foreign host.
-@end example
-@noindent
-@end multitable
-
-After command there should be one mandatory header: @strong{Content-Length} that
-defines message's length in bytes and optional headers:
-@multitable @columnfractions .2 .8
-@headitem Header @tab Mean
-@item @var{Deliver-To:}
-@tab Defines actual delivery recipient of message. Can be used for personalized
-statistic and for user specific options.
-@item @var{IP:}
-@tab Defines IP from which this message is received.
-@item @var{Helo:}
-@tab Defines SMTP helo.
-@item @var{From:}
-@tab Defines SMTP mail from command data.
-@item @var{Queue-Id:}
-@tab Defines SMTP queue id for message (can be used instead of message id in
-logging).
-@item @var{Rcpt:}
-@tab Defines SMTP recipient (it may be several @emph{Rcpt:} headers).
-@item @var{Pass:}
-@tab If this header has @emph{"all"} value, all filters would be checked for
-this message.
-@item @var{Subject:}
-@tab Defines subject of message (is used for non-mime messages).
-@item @var{User:}
-@tab Defines SMTP user (this is currently unused in rspamd however).
-@end multitable
-So rspamc protocol allows to pass many data from MTA to rspamd. This is used to
-increase speed of processing and for building filters (like SPF filter). Also
-note that rspamd support spamassassin spamc protocol and you can even pass
-rspamc headers in spamc mode, but reply of rspamd in spamc mode would be much
-shorter: it would only use "default" metric and won't show additional options
-for symbols. Rspamc reply looks like this:
-@example
-RSPAMD/1.1 0 OK
-Metric: default; True; 10.40 / 10.00 / 0.00
-Symbol: R_UNDISC_RCPT
-Symbol: ONCE_RECEIVED
-Symbol: R_MISSING_CHARSET
-Urls:
-@end example
-@noindent
-First line is method reply: @code{<PROTOCOL>/<VERSION> <ERROR_CODE> <ERROR_REPLY>}.
-Error code is 0 when no error occured. After first reply line there are metrics
-output. For @emph{SYMBOLS} and @emph{PROCESS} commands there are symbols lines
-after each metric. And for @emph{PROCESS} command there would be original
-message after all metrics results. Metric result line looks like this:
-@example
-Metric: <name>; <result>; <score> / <required_score> / <reject_score>
-@end example
-@noindent
-For 1.0 version of rspamc protocol @emph{reject_score} parameter is not printed.
-Symbol line looks like this:
-@example
-Symbol: <Name>[; param1[, param2...]]
-@end example
-@noindent
-Some symbols can have parameters attached. It is useful for example for RBL
-checks (you can insert additional data after symbol name), for statistic and
-fuzzy checks. Also rspamd inserts @emph{Urls} line in which all urls that are
-contained in message are printed in comma-separated list.
-Note that this protocol is used for normal workers. Controller, fuzzy storage
-and lmtp/smtp workers are using other protocols. For example controller's
-protocol is oriented on interactive sessions: you can pass many commands to
-controller before disconnecting. Fuzzy storage is using UDP for making
-interaction with storage faster. LMTP/SMTP workers are using lmtp and smtp
-protocols. All of these protocols would be described in further chapters about
-rspamd workers.
-
-@section Controller protocol.
-
-Rspamd controller can also be accessed by telnet, by rspamc client or by using
-perl module Mail::Rspamd::Client. Controller protocol accepts commands and it is
-possible to send several commands during a single session. Here is an example
-telnet session:
-@example
->telnet localhost 11334
-Trying 127.0.0.1...
-Connected to localhost.
-Escape character is '^]'.
-Rspamd version 0.3.0 is running on spam1.rambler.ru
-stat
-Messages scanned: 1526901
-Messages treated as spam: 238171, 15.60%
-Messages treated as ham: 1288730, 84.40%
-Messages learned: 0
-Connections count: 1529758
-Control connections count: 15
-Pools allocated: 3059589
-Pools freed: 3056134
-Bytes allocated: 98545852799
-Memory chunks allocated: 8745374
-Shared chunks allocated: 7
-Chunks freed: 8737507
-Oversized chunks: 768784
-Fuzzy hashes stored: 0
-Fuzzy hashes expired: 0
-Statfile: WINNOW_SPAM (version 186); length: 100.0 MB; free blocks: 748504; total blocks: 6553581; free: 11.42%
-Statfile: WINNOW_HAM (version 186); length: 100.0 MB; free blocks: 748504; total blocks: 6553581; free: 11.42%
-END
-@end example
-@noindent
-
-So you can see that reply from controller is ended with line that contains word
-@strong{END}. It is also possible to get summary help for controller's commands:
-@example
-help
-Rspamd CLI commands (* - privilleged command):
- help - this help message
-(*) learn <statfile> <size> [-r recipient] [-m multiplier] [-f from] [-n] - learn message to specified statfile
- quit - quit CLI session
-(*) reload - reload rspamd
-(*) shutdown - shutdown rspamd
- stat - show different rspamd stat
- counters - show rspamd counters
- uptime - rspamd uptime
-END
-@end example
-@noindent
-
-Note that some commands are privilleged ones - you are required to enter a
-password for them:
-@example
->telnet localhost 11334
-Trying 127.0.0.1...
-Connected to localhost.
-Escape character is '^]'.
-Rspamd version 0.3.0 is running on spam1.rambler.ru
-reload
-not authorized
-END
-
-password q1
-password accepted
-END
-
-reload
-reload request sent
-END
-Connection closed by foreign host.
-@end example
-@noindent
-
-This password is configured in rspamd.xml in worker section where you are
-describing controller:
-@example
-<worker>
- <type>controller</type>
- ...
-<!-- Other params -->
- <param name="password">q1</param>
-</worker>
-@end example
-
-In many cases it is more easy to use rspamc to access controller. Here is
-example of learning statfiles using rspamc CLI:
-@example
-% rspamc -h localhost:11334 -P q1 -s WINNOW_HAM learn < /tmp/exim.eml
-Results for host localhost:11334:
-
-Learn succeed. Sum weight: 1.51
-
-% rspamc -h localhost:11334 -P q1 -s WINNOW_SPAM learn < /tmp/bad.eml
-Results for host localhost:11334:
-
-Learn succeed. Sum weight: 1.51
-@end example
-
-Note that rspamc handles password issues and other things like timeouts and
-error handling inside and makes this tasks rather easy.
-
-@section More about rspamc client.
-
-Rspamc is small and simple client that allows to simplify common tasks for
-rspamd manage. Rspamc is written in perl language and requires some modules for
-its work:
-@itemize @bullet
-@item Mail::Rspamd::Client - a module that contains common function for
-accessing rspamd, shipped with rspamd and installed automatically
-@item Term::Cap - a module that allows basic interaction with terminal, can be
-obtained via @url{http://www.cpan.org, cpan}.
-@end itemize
-Rspamc accepts several command line options:
-
-@example
-% rspamc --help
-Usage: rspamc.pl [-h host] [-H hosts_list] [-P password] [-c conf_file] [-s statfile] [-d user@@domain] [command] [path]
--h host to connect (in format host:port) or unix socket path
--H path to file that contains list of hosts
--P define control password
--c config file to parse
--s statfile to use for learn commands
-
-Additional options:
--d define deliver-to header
--w define weight for fuzzy operations
--S define search string for IMAP operations
--i emulate that message was send from specified IP
--p pass message throught all filters
-
-Notes:
-imap format: imap:user:<username>:password:[<password>]:host:<hostname>:mbox:<mboxname>
-Password may be omitted and then it would be asked in terminal
-imaps requires IO::Socket::SSL
-
-IMAP search strings samples:
-ALL - All messages in the mailbox;
-FROM <string> - Messages that contain the specified string in the envelope structure's FROM field;
-HEADER <field-name> <string> - Messages that have a header with the specified field-name and that
- contains the specified string in the text of the header (what comes after the colon);
-NEW - Messages that have the Recent flag set but not the Seen flag.
- This is functionally equivalent to "(RECENT UNSEEN)".
-OLD - Messages that do not have the Recent flag set.
-SEEN - Messages that have the Seen flag set.
-SENTBEFORE <date> - Messages whose [RFC-2822] Date: header (disregarding time and timezone)
- is earlier than the specified date.
-TO <string> - Messages that contain the specified string in the envelope structure's TO field.
-TEXT <string> - Messages that contain the specified string in the header or body of the message.
-OR <search-key1> <search-key2> - Messages that match either search key (same for AND and NOT operations).
-
-Version: 0.3.0
-@end example
-@noindent
-
-After options you should specify command to execute, for example:
-@example
-% rspamc symbols < /tmp/exim.eml
-@end example
-@noindent
-After command name you may specify objects to apply to: files, directories or
-even imap folders:
-@itemize @bullet
-@item A single file:
-@example
-% rspamc symbols /tmp/exim.eml
-@end example
-@noindent
-@item A list of files:
-@example
-% rspamc symbols /tmp/*.eml
-@end example
-@noindent
-@item Directories:
-@example
-% rspamc symbols /tmp/*.eml /tmp/to_scan/
-@end example
-@noindent
-@item IMAP folder:
-@example
-% rspamc symbols imap:user:username:password::host:localhost:mbox:INBOX
-Enter IMAP password:
-@end example
-@noindent
-Note that it is possible to specify empty password and be prompted for a
-password during execution (you also need perl module Term::ReadKey for turning
-on noecho input of password).
-@end itemize
-For fetching imap messages you may also use search string by specifying -S
-option. Some examples of IMAP search strings can be found in a help message. For
-more complex things you may read rfc3501 about imap4 search strings. This may be
-found for example here: @url{http://www.faqs.org/rfcs/rfc3501.html}. IMAP access
-may be usefull for setting up automatic learning scripts. Also it is possible to
-use SSL version of imap by specifying @strong{imaps} instead @strong{imap} as
-first component. Note that for SSL access you need @emph{IO::Socket::SSL} perl
-module.
-
-@chapter Statistics and hashes storage.
-
-@section Introduction.
-First of all we need to strictly define purposes of hashes and statistic. Hashes
-are used to find very close messages (for example messages where there are only
-several words changed), while statistic can find @strong{probability} of
-belonging message to specified class of messages. So when you learn rspamd with
-message's hash you just add this hash to storage and when you learn rspamd
-statistic you add tokens from message to specified class. So statistic is
-probabilistic method to filter message, while fuzzy hashes can detect specific
-patterns in messages and filter them.
-
-@section Classifiers and statistic.
-@subsection Tokenization.
-Now rspamd supports OSB-Winnow statistic algorithm. Let's describe it in
-details. First of all message is separeted into a set of tokens. The algorithm
-of extracting tokens is rather simple now:
-@enumerate 1
-@item Extract graph symbols till first non-graph symbol (whitespace, punctuation
-etc), the group of graph symbols forms a token, non-graphs are separators.
-@item Fill an array with token till @strong{window size} is reached (currently
-this size is 5 tokens).
-@item Get pairs of tokens from array and extract their hashes:
-@itemize @bullet
-@item * . . . * -> token1 (h1, h5);
-@item . * . . * -> token2 (h2, h5);
-@item . . * . * -> token3 (h3, h5);
-@item . . . * * -> token4 (h4, h5);
-@end itemize
-@noindent
-@item Insert these tokens to statfile (indexed by first hash).
-@item Shift window on next word.
-@end enumerate
-So after tokenizing process we would have tokens each of that contains 2 hashes of 2
-words from message. This mechanics allows to count not only words itself but
-also its combinations into a message, so providing more accurate statistic.
-
-@subsection Classifying.
-For classifying process @strong{winnow} algorithm is used. In this statistic
-algtorithm we operate not with probabilities but with weights. Each token has
-its own weight and when we learn some statfile with tokens rspamd does several
-things:
-@enumerate 1
-@item Try to find token inside statfile.
-@item If a token found multiply its weight by so called @strong{promotion
-factor} (that is now 1.23).
-@item If token not found insert it into statfile with weight 1.
-@end enumerate
-
-If it is needed to lower token weight, so its weight is multiplied with
-@strong{demotion factor} (currently 0.83). Classify process is even more simple:
-@enumerate 1
-@item Extract tokens from a message.
-@item For each statfile check weight of obtained tokens and store summary
-weight.
-@item Compare sums for each statfile and select statfile with the most big sum.
-@item Do weight normalization and insert symbol of selected statfile.
-@end enumerate
-
-@subsection Statfiles synchronization.
-Rspamd allows to make master/slave statfiles synchronization. This is done by
-writing changes to statfiles to special @emph{binary log}. Binary log is a file
-on filesystem named like statfile but with @emph{.binlog} suffix. Binary log
-consist of two level indexes and binary changes to each statfile. So after each
-learning process the version of affected statfiles is increased by 1 and a
-record is written to binary log. Binary logs have fixed size limit and may have
-time limit (rotate time). The process of synchronization may be described as:
-@enumerate 1
-@item Slave rspamd periodically asks master for version of statfiles monitored.
-@item If master has version that is larger than slave's one the synchronization
-process starts.
-@item During synchronization process master looks at version reported by client
-in binary log.
-@item If version is found all records that are @strong{after} client's version
-are sent to client.
-@item Client accepts changes and apply binary patches one-by-one incrementing
-statfile's version.
-@item If version that client reports is not found in binary log the completely
-statfile is sent to client (slow way, but practically that would take place only
-once for fresh slaves).
-@end enumerate
-
-Here is example configuration for master statfile:
-@example
- <statfile>
- <symbol>WINNOW_HAM</symbol>
- <size>100M</size>
- <path>/spool/rspamd/data.ham</path>
- <normalizer>internal:3</normalizer>
- <binlog>master</binlog>
- <binlog_rotate>1d</binlog_rotate>
- </statfile>
-@end example
-@noindent
-Here we define binlog affinity (master) that automatically create binlog file
-@file{/spool/rspamd/data.ham.binlog} and set up time limit for it (1 day).
-For slaves you should first of all set up controller worker to accept network
-connections (statfile synchronization is done via controller workers). The
-second task is to define affinity for slave and master's address:
-@example
- <statfile>
- <symbol>WINNOW_HAM</symbol>
- <size>100M</size>
- <path>/spool/rspamd/data.ham</path>
- <normalizer>internal:3</normalizer>
- <binlog>slave</binlog>
- <binlog_master>spam10:11334</binlog_master>
- </statfile>
-@end example
-
-@subsection Conclusion.
-Statfiles synchronization allows to set up rspamd cluster that uses the common
-statfiles and easily learn the whole cluster without unnecessary overhead.
-
-@section Hashes and hash storage.
-@subsection Fuzzy hashes.
-Hashes that are used in rspamd for messages are not cryptoghraphic. Instead of
-them fuzzy hashes are used. Fuzzy hashes is technics that allows to obtain
-common hashes for common messages (for cryptographic hashes you usually get very
-different hashes even if input messages are very common but not identical). The
-main principle of fuzzy hashing is to break up text parts of message into small
-pieces (blocks) and calculate hash for each block using so called @emph{rolling
-hash}. After this process the final hash is forming by setting bytes in it from
-blocks. So if we have 2 messages each of that contains 100 blocks and 99 of them
-are identical we would have 2 hashes that differs only in one byte. So we can
-consider that one message is 99% like other message.
-
-@subsection Fuzzy storage.
-In rspamd hashes can be stored in fuzzy storage. Fuzzy storage is a special
-worker that can store hashes and reply about score of hashes. Inside fuzzy
-storage each hash has its own weight and list number. List number is integer
-that specify to which list this hash is related. This number can be used in
-fuzzy_check plugin inside rspamd to add custom symbol. There are two ways of
-storing fuzzy hashes: store them in a set of linear linked lists and storing
-hashes in very fast judy tree. First way is good for a relatively small number
-of fuzzy hashes. Also in this case @emph{fuzzy match} is used, so you can find
-not only identical hashes but also common hashes. But for large number of hashes
-this method is very slow. The second way requires libJudy in system (can be
-found at @url{http://judy.sourceforge.net}) and turns off @emph{fuzzy matching}
-- only identical hashes would be found. On the other hand you may store millions
-of hashes in judy tree not loosing nor memory, nor CPU.
-
-@subsection Conclusion.
-Fuzzy hashes is efficient way to make up different black or white lists. Fuzzy
-storage can be distributed over several machines (if you specify several storage
-servers rspamd would select upstream by hash of fuzzy hash). Also storage can
-contain several lists identified by number. Each hash has its own weight that
-allows to set up dynamic rules that add different score from different hashes.
-
-@chapter Rspamd modules.
-
-@section Introduction.
-
-This chapter describes modules that are shipped with rspamd. Here you can find
-details about modules configuration, principles of working, tricks to make spam
-filtering effective. First sections describe internal modules written in C:
-regexp (regular expressions), surbl (black list for URLs), fuzzy_check (checks
-for fuzzy hashes), chartable (check for character sets in messages) and emails
-(check for blacklisted email addresses in messages). Modules configuration can
-be done in lua or in config file itself.
-
-@subsection Lua configuration.
-You may use lua for setting configuration options for modules. With lua you can
-write rather complex rules that can contain not only text lines, but also some
-lua functions that would be called while processing messages. For loading lua
-configuration you should add line to rspamd.xml:
-@example
-<lua src="/usr/local/etc/rspamd/lua/my.lua">fake</lua>
-@end example
-@noindent
-It is possible to load several scripts this way. Inside lua file there would be
-defined global table with name @var{config}. This table should contain
-configuration options for modules indexed by module. This can be written this
-way:
-@example
-config['module_name'] = @{@}
-local mconfig = config['module_name']
-
-mconfig['option_name'] = 'option value'
-
-local a = 'aa'
-local b = 'bb'
-
-mconfig['other_option'] = string.format('%s, %s', a, b)
-@end example
-@noindent
-In this simple example we defines new element of table that is associated with
-module named 'module_name'. Then we assign to it an empty table (@code{@{@}})
-and associate local variable mconfig. Then we set some elements of this table,
-that is equialent to setting module options like that:
-@example
-option_name = option_value
-other_option = aa, bb
-@end example
-@noindent
-Also you may assign to elements of modules tables some functions. That functions
-should accept one argument - worker task object and return result specific for
-that option: number, string, boolean. This can be shown on this simple example:
-@example
-
-local function test (task)
- if task:get_ip() == '127.0.0.1' then
- return 1
- else
- return 0
- end
-end
-
-mconfig['some_option'] = test
-@end example
-In this example we assign to module option 'some_option' a function that check
-for message's ip and return 1 if that ip is '127.0.0.1'.
-
-So using lua for configuration can help for making complex rules and for
-structuring rules - you can place options for specific modules to specific files
-and use lua function @code{dofile} for loading them (or add other @code{<lua>}
-tag to rspamd.xml).
-
-@subsection XML configuration.
-
-Options for rspamd modules can be set up from xml file too. This can be used for
-simple and/or temporary rules and should not be used for complex rules as this
-would make xml file too hard to read and edit. Thought it is surely possible but
-not recommended from points of config file understanding. Here is a simple
-example of module config options:
-@example
-<module name="module_name">
- <option name="option_name">option_value</option>
- <option name="other_option">aa, bb</option>
-</module>
-@end example
-@noindent
-Note that you need to encode xml entitles like @code{&} - @code{&amp;} and so
-on. Also only utf8 encoding is allowed. In sample rspamd configuration all
-modules except regexp module are configured via xml as they have only settings
-and regexp module has rules that are sometimes rather complex.
-
-@section Regexp module.
-
-@subsection Introduction.
-Regexp module is one of the most important rspamd modules. Regexp module can
-load regular expressions and filter messages according to them. Also it is
-possible to use logical expressions of regexps to create complex rules of
-filtering. It is allowed to use logical operators:
-@itemize @bullet
-@item & - logical @strong{AND} function
-@item | - logical @strong{OR} function
-@item ! - logical @strong{NOT} function
-@end itemize
-Also it is possible to use brackets for making priorities in expressions. Regexp
-module operates with @emph{regexp items} that can be combined with logical
-operators into logical @emph{regexp expresions}. Each expression is associated
-with its symbol and if it evaluates to true with this message the symbol would
-be inserted. Note that rspamd uses internal optimization of logical expressions
-(for example if we have expression 'rule1 & rule2' rule2 would not be evaluated
-if rule1 is false) and internal regexp cache (so if rule1 and rule2 have common
-items they would be evaluated only once). So if you need speed optimization of
-your rules you should take this fact into consideration.
-
-@subsection Regular expressions.
-Rspamd uses perl compatible regular expressions. You may read about perl regular
-expression syntax here: @url{http://perldoc.perl.org/perlre.html}. In rspamd
-regular expressions must be enclosed in slashes:
-@example
-/^\\d+$/
-@end example
-@noindent
-If '/' symbol must be placed into regular expression it should be escaped:
-@example
-/^\\/\\w+$/
-@end example
-@noindent
-After last slash it is possible to place regular expression modificators:
-@multitable @columnfractions 0.1 0.9
-@headitem Modificator @tab Mean
-@item @strong{i} @tab Ignore case for this expression.
-@item @strong{m} @tab Assume this expression as multiline.
-@item @strong{s} @tab Assume @emph{.} as all characters including newline
-characters (should be used with @strong{m} flag).
-@item @strong{x} @tab Assume this expression as extended regexp.
-@item @strong{u} @tab Performs ungreedy matches.
-@item @strong{o} @tab Optimize regular expression.
-@item @strong{r} @tab Assume this expression as @emph{raw} (this is actual for
-utf8 mode of rspamd).
-@item @strong{H} @tab Search expression in message's headers.
-@item @strong{X} @tab Search expression in raw message's headers (without mime
-decoding).
-@item @strong{M} @tab Search expression in the whole message (must be used
-carefully as @strong{the whole message} would be checked with this expression).
-@item @strong{P} @tab Search expression in all text parts.
-@item @strong{U} @tab Search expression in all urls.
-@end multitable
-
-You can combine flags with each other:
-@example
-/^some text$/iP
-@end example
-@noindent
-All regexp must be with type: H, X, M, P or U as rspamd should know where to
-search for specified pattern. Header regexps (H and X) have special syntax if
-you need to check specific header, for example @emph{From} header:
-@example
-From=/^evil.*$/Hi
-@end example
-@noindent
-If header name is not specified all headers would be matched. Raw headers is
-matching is usefull for searching for mime specific headers like MIME-Version.
-The problem is that gmime that is used for mime parsing adds some headers
-implicitly, for example @emph{MIME-Version} and you should match them using raw
-headers. Also if header's value is encoded (base64 or quoted-printable encoding)
-you can search for decoded version using H modificator and for raw using X
-modificator. This is usefull for finding bad encodings types or for unnecessary
-encoding.
-
-@subsection Internal function.
-Rspamd provides several internal functions for simplifying message processing.
-You can use internal function as items in logical expressions as they like
-regular expressions return logical value (true or false). Here is list of
-internal functions with their arguments:
-@multitable @columnfractions 0.3 0.2 0.5
-@headitem Function @tab Arguments @tab Description
-@item header_exists
-@tab header name
-@tab Returns true if specified header exists.
-
-@item compare_parts_distance
-@tab number
-@tab If message has two parts (text/plain and text/html) compare how much they
-differs (html messages are compared with stripped tags). The difference is
-number in percents (0 is identically parts and 100 is totally different parts).
-So if difference is more than number this function returns true.
-
-@item compare_transfer_encoding
-@tab string
-@tab Compares header Content-Transfer-Encoding with specified string.
-
-@item content_type_compare_param
-@tab param_name, param_value
-@tab Compares specified parameter of Content-Type header with regexp or certain
-string:
-@example
-content_type_compare_param(Charset, /windows-\d+/)
-content_type_compare_param(Charset, ascii)
-@end example
-@noindent
-
-@item content_type_has_param
-@tab param_name
-@tab Returns true if content-type has specified parameter.
-
-@item content_type_is_subtype
-@tab subtype_name
-@tab Return true if content-type is of specified subtype (for example for
-text/plain subtype is 'plain').
-
-@item content_type_is_type
-@tab type_name
-@tab Return true if content-type is of specified type (for example for
-text/plain subtype is 'text'):
-@example
-content_type_is_type(text)
-content_type_is_subtype(/?.html/)
-@end example
-@noindent
-
-@item regexp_match_number
-@tab number,[regexps list]
-@tab Returns true if specified number of regexps matches for this message. This
-can be used for making rules when you do not know which regexps should match but
-if 2 of them matches the symbol shoul be inserted. For example:
-@example
-regexp_match_number(2, /^some evil text.*$/Pi, From=/^hacker.*$/H, header_exists(Subject))
-@end example
-@noindent
-
-@item has_only_html_part
-@tab nothing
-@tab Returns true when message has only HTML part
-
-@item compare_recipients_distance
-@tab number
-@tab Like compare_parts_distance calculate difference between recipients. Number
-is used as minimum percent of difference. Note that this function would check
-distance only when there are more than 5 recipients in message.
-
-@item is_recipients_sorted
-@tab nothing
-@tab Returns true if recipients list is sorted. This function would also works
-for more than 5 recipients.
-
-@item is_html_balanced
-@tab nothing
-@tab Returns true when all HTML tags in message are balanced.
-
-@item has_html_tag
-@tab tag_name
-@tab Returns true if tag 'tag_name' exists in message.
-
-@item check_smtp_data
-@tab item, regexp
-@tab Returns true if specified part of smtp dialog matches specified regexp. Can
-check HELO, FROM and RCPT items.
-
-@end multitable
-
-These internal functions can be easily implemented in lua but I've decided to
-make them built-in as they are widely used in our rules. In fact this list may
-be extended in future.
-
-@subsection Dynamic rules.
-Rspamd regexp module can use dynamic rules that can be written in json syntax.
-Dynamic rules are loaded at runtime and can be modified while rspamd is working.
-Also it is possible to turn dynamic rules for specific networks only and add rules
-that does not contain any regexp (this can be usefull for dynamic lists for example).
-Dynamic rules can be obtained like any other dynamic map via file monitoring or via
-http. Here are examples of dynamic rules definitions:
-@example
-<module name="regexp">
- <option name="dynamic_rules">file:///tmp/rules.json</option>
-</module>
-@end example
-@noindent
-or for http map:
-@example
-<module name="regexp">
- <option name="dynamic_rules">http://somehost/rules.json</option>
-</module>
-@end example
-@noindent
-Rules are presented as json array (in brackets @emph{'[]'}). Each rule is json object.
-This object can have several properties (properties with @strong{*} are required):
-@multitable @columnfractions 0.3 0.7
-@headitem Property @tab Mean
-@item symbol(*)
-@tab Symbol for rule.
-@item factor(*)
-@tab Factor for rule.
-@item rule
-@tab Rule itself (regexp expression).
-@item enabled
-@tab Boolean flag that define whether this rule is enabled (rule is enabled if
-this flag is not present by default).
-@item networks
-@tab Json array of networks (in CIDR format, also it is possible to add negation
-by prepending @emph{!} symbol before item.
-@end multitable
-Here is an example of dynamic rule:
-@example
-[
- {
- "rule": "/test/rP",
- "symbol": "R_TMP_1",
- "factor": 1.1,
- "networks": ["!192.168.1.0/24", "172.16.0.0/16"],
- "enabled": false
- }
-]
-@end example
-Note that dynamic rules are constantly monitored for changes and are reloaded
-completely when modification is detected. If you change dynamic rules they
-would be reloaded in a minute and would be applied for new messages.
-
-@subsection Conclusion.
-Rspamd regexp module is powerfull tool for matching different patterns in
-messages. You may use logical expressions of regexps and internal rspamd
-functions to make rules. Rspamd is shipped with many rules for regexp module
-(most of them are taken from spamassassin rules as rspamd originally was a
-replacement of spamassassin) so you can look at them in ETCDIR/rspamd/lua/regexp
-directory. There are many built-in rules with detailed comments. Also note that
-if you add logical rule into XML file you need to escape all XML entitles (like
-@emph{&} operators). When you make complex rules from many parts do not forget
-to add brackets for parts inside expression as you would not predict order of
-checks otherwise. Rspamd regexp module has internal logical optimization and
-regexp cache, so you may use identical regexp many times - they would be matched
-only once. And in logical expression you may optimize performance by putting
-likely TRUE regexp first in @emph{OR} expression and likely FALSE expression
-first in @emph{AND} expression. A number of internal functions can simplify
-complex expressions and for making common filters. Lua functions can be added in
-rules as well (they should return boolean value).
-
-@section SURBL module.
-
-Surbl module is designed for checking urls via blacklists. You may read about
-surbls at @url{http://www.surbl.org}. Here is the sequence of operations that is
-done by surbl module:
-@enumerate 1
-@item Extract all urls in message and get domains for each url.
-@item Check to special list called '2tld' and extract 3 components for domains
-from that list and 2 components for domains that are not listed:
-@example
-http://virtual.somehost.domain.com/some_path
--> somehost.domain.com if domain.com is in 2tld list
--> domain.com if not in 2tld
-@end example
-@noindent
-@item Remove duplicates from domain lists
-@item For each registered surbl do dns request in form @emph{domain.surbl_name}
-@item Get result and insert symbol if that name resolves
-@item It is possible to examine bits in returned IP address and insert different
-symbol for each bit that is turned on in result.
-@end enumerate
-All DNS requests are done asynchronously so you may not bother about blocking.
-SURBL module has several configuration options:
-@itemize @bullet
-@item @emph{metric} - metric to insert symbol to.
-@item @emph{2tld} - list argument of domains for those 3 components of domain name
-would be extracted.
-@item @emph{max_urls} - maximum number of urls to check.
-@item @emph{whitelist} - map of domains for which surbl checks would not be performed.
-@item @emph{suffix} - a name of surbl. It is possible to add several suffixes:
-@example
-suffix_RAMBLER_URIBL = insecure-bl.rambler.ru
-or in xml:
- <param name="suffix_RAMBLER_URIBL">insecure-bl.rambler.ru</param>
-@end example
-@noindent
-It is possible to add %b to symbol name for checking specific bits:
-@example
-suffix_%b_SURBL_MULTI = multi.surbl.org
-then you may define replaces for %b in symbol name for each bit in result:
-bit_2 = SC -> sc.surbl.org
-bit_4 = WS -> ws.surbl.org
-bit_8 = PH -> ph.surbl.org
-bit_16 = OB -> ob.surbl.org
-bit_32 = AB -> ab.surbl.org
-bit_64 = JP -> jp.surbl.org
-@end example
-@noindent
-So we make one DNS request and check for specific list by checking bits in
-result ip. This is described in surbl page:
-@url{http://www.surbl.org/lists.html#multi}. Note that result symbol would NOT
-contain %b as it would be replaced by bit name. Also if several bits are set
-several corresponding symbols would be added.
-@end itemize
-
-Also surbl module can use redirector - a special daemon that can check for
-redirects. It uses HTTP/1.0 for requests and accepts a url and returns resolved
-result. Redirector is shipped with rspamd but not enabled by default. You may
-enable it on stage of configuring but note that it requires many perl modules
-for its work. Rspamd redirector is described in details further. Here are surbl
-options for working with redirector:
-@itemize @bullet
-@item @emph{redirector}: adress of redirector (in format host:port)
-@item @emph{redirector_connect_timeout} (seconds): redirector connect timeout (default: 1s)
-@item @emph{redirector_read_timeout} (seconds): timeout for reading data (default: 5s)
-@item @emph{redirector_hosts_map} (map string): map that contains domains to check with redirector
-@end itemize
-
-So surbl module is an easy to use way to check message's urls and it may be used
-in every configuration as it filters rather big ammount of email spam and scam.
-
-@section SPF module.
-
-SPF module is designed to make checks of spf records of sender's domains. SPF
-records are placed in TXT DNS items for domains that have enabled spf. You may
-read about SPF at @url{http://en.wikipedia.org/wiki/Sender_Policy_Framework}.
-There are 3 results of spf check for domain:
-@itemize @bullet
-@item ALLOW - this ip is allowed to send messages for this domain
-@item FAIL - this ip is @strong{not} allowed to send messages for this domain
-@item SOFTFAIL - it is unknown whether this ip is allowed to send mail for this
-domain
-@end itemize
-SPF supports different mechanizms for checking: dns subrequests, macroses,
-includes, blacklists. Rspamd supports the most of them. Also for security
-reasons there is internal limits for DNS subrequests and inclusions recursion.
-SPF module support very small ammount of options:
-@itemize @bullet
-@item @emph{metric} (string): metric to insert symbol (default: 'default')
-@item @emph{symbol_allow} (string): symbol to insert (default: 'R_SPF_ALLOW')
-@item @emph{symbol_fail} (string): symbol to insert (default: 'R_SPF_FAIL')
-@item @emph{symbol_softfail} (string): symbol to insert (default: 'R_SPF_SOFTFAIL')
-@end itemize
-
-@section Chartable module.
-
-Chartable is a simple module that detects different charsets in a message. This
-module is aimed to protect from emails that contains symbols from different
-character sets that looks like each other. Chartable module works differently
-for raw and utf modes: in utf modes it detects different characters from unicode
-tables and in raw modes only ASCII and non-ASCII symbols. Configuration of whis
-module is very simple:
-@itemize @bullet
-@item @emph{metric} (string): metric to insert symbol (default: 'default')
-@item @emph{symbol} (string): symbol to insert (default: 'R_BAD_CHARSET')
-@item @emph{threshold} (double): value that would be used as threshold in expression
-@math{N_{charset-changes} / N_{chars}}
-(e.g. if threshold is 0.1 than charset change should occure more often than in 10 symbols),
-default: 0.1
-@end itemize
-
-@section Fuzzy check module.
-
-Fuzzy check module provides a client for rspamd fuzzy storage. Fuzzy check can
-work with a cluster of rspamd fuzzy storages and the specific storage is
-selected by value of hash of message's hash. The available configuration options
-are:
-@itemize @bullet
-@item @emph{metric} (string): metric to insert symbol (default: 'default')
-@item @emph{symbol} (string): symbol to insert (default: 'R_FUZZY')
-@item @emph{max_score} (double): maximum score to that weights of hashes would be
-normalized (default: 0 - no normalization)
-@item @emph{fuzzy_map} (string): a string that contains map in format @{ fuzzy_key => [
-symbol, weight ] @} where fuzzy_key is number of fuzzy list. This string itself
-should be in format 1:R_FUZZY_SAMPLE1:10,2:R_FUZZY_SAMPLE2:1 etc, where first
-number is fuzzy key, second is symbol to insert and third - weight for
-normalization
-@item @emph{min_length} (integer): minimum length (in characters) for text part to be
-checked for fuzzy hash (default: 0 - no limit)
-@item @emph{whitelist} (map string): map of ip addresses that should not be checked
-with this module
-@item @emph{servers} (string): list of fuzzy servers in format
-"server1:port,server2:port" - these servers would be used for checking and
-storing fuzzy hashes
-@end itemize
-
-@section Forged recipients.
-
-Forged recipients is a lua module that compares recipients provided by smtp
-dialog and recipients from @emph{To:} header. Also it is possible to compare
-@emph{From:} header with SMTP from. So you may set @strong{symbol_rcpt} option
-to set up symbol that would be inserted when recipients differs and
-@strong{symbol_sender} when senders differs.
-
-@section Maillist.
-
-Maillist is a module that detects whether this message is send by using one of
-popular mailing list systems (among supported are ezmlm, mailman and
-subscribe.ru systems). The module has only option @strong{symbol} that defines a
-symbol that would be inserted if this message is sent via mailing list.
-
-@section Once received.
-
-This lua module checks received headers of message and insert symbol if only one
-received header is presented in message (that usually signals that this mail is
-sent directly to our MTA). Also it is possible to insert @emph{strict} symbol
-that indicates that host from which we receive this message is either
-unresolveable or has bad patterns (like 'dynamic', 'broadband' etc) that
-indicates widely used botnets. Configuration options are:
-@itemize @bullet
-@item @emph{symbol}: symbol to insert for messages with one received header.
-@item @emph{symbol_strict}: symbol to insert for messages with one received
-header and containing bad patterns or unresolveable sender.
-@item @emph{bad_host}: defines pattern that would be count as "bad".
-@item @emph{good_host}: defines pattern that would be count as "good" (no strict
-symbol would be inserted), note that "good" has a priority over "bad" pattern.
-@end itemize
-You can define several "good" and "bad" patterns for this module.
-
-@section Received rbl.
-
-Received rbl module checks for all received headers and make dns requests to IP
-black lists. This can be used for checking whether this email was transfered by
-some blacklisted gateway. Here are options available:
-@itemize @bullet
-@item @emph{symbol}: symbol to insert if message contains blacklisted received
-headers
-@item @emph{rbl}: a name of rbl to check, it is possible to define specific
-symbol for this rbl by adding symbol name after semicolon:
-@example
-rbl = pbl.spamhaus.org:RECEIVED_PBL
-@end example
-@end itemize
-
-@section Multimap.
-
-Multimap is lua module that provides functionality to operate with different types
-of lists. Now it can works with maps of strings for extracting MIME headers and match
-them using lists. Also it is possible to create ip (or ipnetwork) maps for
-checking ip address from which we receive that mail. DNS black lists are also
-supported.
-Multimap module works with a set of rules. Each rule can be one of three types:
-@enumerate 1
-@item @emph{ip}: is used for lists of ip addresses
-@item @emph{header}: is used to match headers
-@item @emph{dnsbl}: is used for dns lists of ip addresses
-@end enumerate
-Basically each rule is a line separated by commas containing rule parameters.
-Each parameter has name and value, separated by equal sign. Here is list of
-parameters (mandatory parameters are marked with @strong{*}):
-@itemize @bullet
-@item @strong{*} @emph{type}: rule type
-@item @strong{*} @emph{map}: path to map (in uri format file:// or http://) or
-name of dns blacklist
-@item @strong{*} @emph{symbol}: symbol to insert
-@item @emph{header}: header to use for header rules
-@item @emph{pattern}: pattern that would be used to extract specific part of
-header
-@end itemize
-@noindent
-Here is an example of multimap rules:
-@example
-<module name="multimap">
- <option name="rule">type = header, header = To, pattern = @(.+)>?$, map = file:///var/db/rspamd/rcpt_test, symbol = R_RCPT_WHITELIST</option>
- <option name="rule">type = ip, map = file:///var/db/rspamd/ip_test, symbol = R_IP_WHITELIST</option>
- <option name="rule">type = dnsbl, map = pbl.spamhaus.org, symbol = R_IP_PBL</option>
-</module>
-@end example
-
-@section Conclusion.
-
-Rspamd is shipped with some ammount of modules that provides basic functionality
-fro checking emails. You are allowed to add custom rules for regexp module and
-to set up available parameters for other modules. Also you may write your own
-modules (in C or Lua) but this would be described further in this documentation.
-You may set configuration options for modules from lua or from xml depends on
-its complexity. Internal modules are enabled and disabled by @strong{filters}
-configuration option. Lua modules are loaded and usually can be disabled by
-removing their configuration section from xml file or by removing corresponding
-line from @strong{modules} section.
-
-@bye
diff --git a/doc/why-rspamd.html b/doc/why-rspamd.html
deleted file mode 100644
index aceb1228c..000000000
--- a/doc/why-rspamd.html
+++ /dev/null
@@ -1,392 +0,0 @@
-<html><head><title>&#1060;&#1080;&#1083;&#1100;&#1090;&#1088;&#1072;&#1094;&#1080;&#1103; &#1089;&#1087;&#1072;&#1084;&#1072; &#1087;&#1088;&#1080; &#1087;&#1086;&#1084;&#1086;&#1097;&#1080; &#1089;&#1080;&#1089;&#1090;&#1077;&#1084;&#1099; rspamd.</title>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" >
-</head>
-<body class='pod'>
-<!--
- generated by Pod::Simple::HTML v3.13,
- using Pod::Simple::PullParser v3.13,
- under Perl v5.010000 at Thu Feb 4 17:55:58 2010 GMT.
-
- If you want to change this HTML document, you probably shouldn't do that
- by changing it directly. Instead, see about changing the calling options
- to Pod::Simple::HTML, and/or subclassing Pod::Simple::HTML,
- then reconverting this document from the Pod source.
- When in doubt, email the author of Pod::Simple::HTML for advice.
- See 'perldoc Pod::Simple::HTML' for more info.
-
--->
-
-<!-- start doc -->
-<a name='___top' class='dummyTopAnchor' ></a>
-
-<h1><a class='u' href='#___top' title='click to go to top of document'
-name="(1060)(1080)(1083)(1100)(1090)(1088)(1072)(1094)(1080)(1103)_(1089)(1087)(1072)(1084)(1072)_(1087)(1088)(1080)_(1087)(1086)(1084)(1086)(1097)(1080)_(1089)(1080)(1089)(1090)(1077)(1084)(1099)_rspamd."
->&#1060;&#1080;&#1083;&#1100;&#1090;&#1088;&#1072;&#1094;&#1080;&#1103; &#1089;&#1087;&#1072;&#1084;&#1072; &#1087;&#1088;&#1080; &#1087;&#1086;&#1084;&#1086;&#1097;&#1080; &#1089;&#1080;&#1089;&#1090;&#1077;&#1084;&#1099; rspamd.</a></h1>
-
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="1._(1048)(1089)(1090)(1086)(1088)(1080)(1103)_(1080)_(1087)(1088)(1077)(1076)(1087)(1086)(1089)(1099)(1083)(1082)(1080)_(1089)(1086)(1079)(1076)(1072)(1085)(1080)(1103)."
->1.
-&#1048;&#1089;&#1090;&#1086;&#1088;&#1080;&#1103; &#1080; &#1087;&#1088;&#1077;&#1076;&#1087;&#1086;&#1089;&#1099;&#1083;&#1082;&#1080; &#1089;&#1086;&#1079;&#1076;&#1072;&#1085;&#1080;&#1103;.</a></h2>
-
-<p>&#1052;&#1099; &#1076;&#1086;&#1083;&#1075;&#1086;&#1077; &#1074;&#1088;&#1077;&#1084;&#1103; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1083;&#1080; &#1076;&#1083;&#1103; &#1092;&#1080;&#1083;&#1100;&#1090;&#1088;&#1072;&#1094;&#1080;&#1080; &#1089;&#1087;&#1072;&#1084;&#1072; spamassassin,
-&#1086;&#1076;&#1085;&#1072;&#1082;&#1086;,
-&#1087;&#1088;&#1080; &#1085;&#1072;&#1096;&#1080;&#1093; &#1086;&#1073;&#1098;&#1077;&#1084;&#1072;&#1093; &#1087;&#1086;&#1095;&#1090;&#1086;&#1074;&#1086;&#1075;&#1086; &#1090;&#1088;&#1072;&#1092;&#1080;&#1082;&#1072; (9-10 &#1084;&#1080;&#1083;&#1083;&#1080;&#1086;&#1085;&#1086;&#1074; &#1087;&#1080;&#1089;&#1077;&#1084; &#1074; &#1089;&#1091;&#1090;&#1082;&#1080;) spamassassin &#1085;&#1077; &#1086;&#1073;&#1077;&#1089;&#1087;&#1077;&#1095;&#1080;&#1074;&#1072;&#1083; &#1076;&#1086;&#1089;&#1090;&#1072;&#1090;&#1086;&#1095;&#1085;&#1086;&#1081; &#1087;&#1088;&#1086;&#1080;&#1079;&#1074;&#1086;&#1076;&#1080;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086;&#1089;&#1090;&#1080;.
-&#1055;&#1086;&#1089;&#1083;&#1077; &#1072;&#1085;&#1072;&#1083;&#1080;&#1079;&#1072; &#1080;&#1089;&#1093;&#1086;&#1076;&#1085;&#1086;&#1075;&#1086; &#1082;&#1086;&#1076;&#1072; &#1080; &#1087;&#1088;&#1080;&#1085;&#1094;&#1080;&#1087;&#1086;&#1074; &#1088;&#1072;&#1073;&#1086;&#1090;&#1099; &#1073;&#1099;&#1083;&#1086; &#1074;&#1099;&#1103;&#1074;&#1083;&#1077;&#1085;&#1099; &#1089;&#1083;&#1077;&#1076;&#1091;&#1102;&#1097;&#1080;&#1077; &#34;&#1074;&#1088;&#1086;&#1078;&#1076;&#1077;&#1085;&#1085;&#1099;&#1077;&#34; &#1087;&#1088;&#1086;&#1073;&#1083;&#1077;&#1084;&#1099; SA:</p>
-
-<ul>
-<li>&#1086;&#1073;&#1088;&#1072;&#1073;&#1086;&#1090;&#1082;&#1072; &#1087;&#1080;&#1089;&#1100;&#1084;&#1072; &#1086;&#1089;&#1091;&#1097;&#1077;&#1089;&#1090;&#1074;&#1083;&#1103;&#1077;&#1090;&#1089;&#1103; &#1085;&#1072;&#1073;&#1086;&#1088;&#1086;&#1084; &#1088;&#1077;&#1075;&#1091;&#1083;&#1103;&#1088;&#1085;&#1099;&#1093; &#1074;&#1099;&#1088;&#1072;&#1078;&#1077;&#1085;&#1080;&#1081;,
-&#1086;&#1076;&#1085;&#1072;&#1082;&#1086;,
-&#1082;&#1086;&#1083;&#1080;&#1095;&#1077;&#1089;&#1090;&#1074;&#1086; &#1101;&#1090;&#1080;&#1093; &#1074;&#1099;&#1088;&#1072;&#1078;&#1077;&#1085;&#1080;&#1081; &#1089;&#1083;&#1080;&#1096;&#1082;&#1086;&#1084; &#1074;&#1077;&#1083;&#1080;&#1082;&#1086; &#1080; &#1103;&#1074;&#1083;&#1103;&#1077;&#1090;&#1089;&#1103; &#1082;&#1083;&#1102;&#1095;&#1077;&#1074;&#1099;&#1084; &#1084;&#1086;&#1084;&#1077;&#1085;&#1090;&#1086;&#1084; &#1079;&#1072;&#1076;&#1091;&#1084;&#1095;&#1080;&#1074;&#1086;&#1089;&#1090;&#1080; SA (&#1085;&#1072;&#1087;&#1088;&#1080;&#1084;&#1077;&#1088;,
-&#1076;&#1083;&#1103; &#1080;&#1079;&#1074;&#1083;&#1077;&#1095;&#1077;&#1085;&#1080;&#1103; received &#1079;&#1072;&#1075;&#1086;&#1083;&#1086;&#1074;&#1082;&#1086;&#1074; &#1087;&#1080;&#1089;&#1100;&#1084;&#1072;,
-SA &#1087;&#1088;&#1086;&#1074;&#1077;&#1088;&#1103;&#1077;&#1090; &#1086;&#1085;&#1099;&#1077; &#1085;&#1072; &#1089;&#1086;&#1086;&#1090;&#1074;&#1077;&#1090;&#1089;&#1090;&#1074;&#1080;&#1077; &#1074;&#1089;&#1077;&#1084; &#1077;&#1084;&#1091; &#1080;&#1079;&#1074;&#1077;&#1089;&#1090;&#1085;&#1099;&#1084; MTA,
-&#1086;&#1095;&#1077;&#1074;&#1080;&#1076;&#1085;&#1086;,
-&#1095;&#1090;&#1086; &#1090;&#1072;&#1082;&#1086;&#1077; &#1076;&#1077;&#1081;&#1089;&#1090;&#1074;&#1080;&#1077; &#1085;&#1077; &#1103;&#1074;&#1083;&#1103;&#1077;&#1090;&#1089;&#1103; &#1086;&#1087;&#1090;&#1080;&#1084;&#1072;&#1083;&#1100;&#1085;&#1099;&#1084;);</li>
-
-<li>&#1085;&#1077;&#1090; &#1074;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1086;&#1089;&#1090;&#1080; &#1103;&#1074;&#1085;&#1086; &#1087;&#1086;&#1083;&#1091;&#1095;&#1080;&#1090;&#1100; ip &#1072;&#1076;&#1088;&#1077;&#1089;,
-&#1089; &#1082;&#1086;&#1090;&#1086;&#1088;&#1086;&#1075;&#1086; &#1085;&#1072;&#1084; &#1086;&#1090;&#1087;&#1088;&#1072;&#1074;&#1080;&#1083;&#1080; &#1087;&#1080;&#1089;&#1100;&#1084;&#1086; (&#1074; SA &#1101;&#1090;&#1086; &#1076;&#1077;&#1083;&#1072;&#1077;&#1090;&#1089;&#1103; &#1087;&#1072;&#1088;&#1089;&#1086;&#1084; received &#1079;&#1072;&#1075;&#1086;&#1083;&#1086;&#1074;&#1082;&#1086;&#1074;,
-&#1095;&#1090;&#1086; &#1103; &#1083;&#1080;&#1095;&#1085;&#1086; &#1085;&#1077; &#1089;&#1095;&#1080;&#1090;&#1072;&#1102; &#1087;&#1088;&#1072;&#1074;&#1080;&#1083;&#1100;&#1085;&#1099;&#1084;,
-&#1072; &#1090;&#1077;&#1084; &#1073;&#1086;&#1083;&#1077;&#1077; &#1086;&#1087;&#1090;&#1080;&#1084;&#1072;&#1083;&#1100;&#1085;&#1099;&#1084; &#1089;&#1087;&#1086;&#1089;&#1086;&#1073;&#1086;&#1084;,
-&#1090;&#1072;&#1082; &#1082;&#1072;&#1082; MTA &#1074;&#1089;&#1077;&#1075;&#1076;&#1072; &#1079;&#1085;&#1072;&#1077;&#1090;,
-&#1086;&#1090;&#1082;&#1091;&#1076;&#1072; &#1077;&#1084;&#1091; &#1087;&#1088;&#1080;&#1096;&#1083;&#1086; &#1076;&#1072;&#1085;&#1085;&#1086;&#1077; &#1087;&#1080;&#1089;&#1100;&#1084;&#1086;)</li>
-
-<li>&#1085;&#1077;&#1090; &#1074;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1086;&#1089;&#1090;&#1080; &#1087;&#1077;&#1088;&#1077;&#1076;&#1072;&#1095;&#1080; &#1089;&#1087;&#1072;&#1084; &#1092;&#1080;&#1083;&#1100;&#1090;&#1088;&#1091; &#1076;&#1072;&#1085;&#1085;&#1099;&#1093; SMTP &#1076;&#1080;&#1072;&#1083;&#1086;&#1075;&#1072;</li>
-
-<li>MIME &#1087;&#1072;&#1088;&#1089;&#1080;&#1085;&#1075; &#1087;&#1080;&#1089;&#1077;&#1084; &#1086;&#1095;&#1077;&#1085;&#1100; &#1084;&#1077;&#1076;&#1083;&#1077;&#1085;&#1085;&#1099;&#1081;,
-&#1090;&#1072;&#1082; &#1082;&#1072;&#1082; &#1086;&#1087;&#1103;&#1090;&#1100; &#1078;&#1077; &#1089;&#1076;&#1077;&#1083;&#1072;&#1085; &#1085;&#1072; &#1073;&#1072;&#1079;&#1077; &#1088;&#1077;&#1075;&#1091;&#1083;&#1103;&#1088;&#1085;&#1099;&#1093; &#1074;&#1099;&#1088;&#1072;&#1078;&#1077;&#1085;&#1080;&#1081;</li>
-</ul>
-
-<p>&#1042; &#1080;&#1090;&#1086;&#1075;&#1077; &#1084;&#1086;&#1078;&#1085;&#1086; &#1089;&#1082;&#1072;&#1079;&#1072;&#1090;&#1100;,
-&#1095;&#1090;&#1086; &#1086;&#1089;&#1085;&#1086;&#1074;&#1085;&#1072;&#1103; &#1087;&#1088;&#1086;&#1073;&#1083;&#1077;&#1084;&#1072; SA - &#1101;&#1090;&#1086; &#1080;&#1079;&#1083;&#1080;&#1096;&#1085;&#1103;&#1103; &#1091;&#1074;&#1083;&#1077;&#1095;&#1077;&#1085;&#1085;&#1086;&#1089;&#1090;&#1100; &#1072;&#1074;&#1090;&#1086;&#1088;&#1086;&#1074; &#1088;&#1077;&#1075;&#1091;&#1083;&#1103;&#1088;&#1085;&#1099;&#1084;&#1080; &#1074;&#1099;&#1088;&#1072;&#1078;&#1077;&#1085;&#1080;&#1103;&#1084;&#1080; &#1080; &#1086;&#1090;&#1089;&#1091;&#1090;&#1089;&#1090;&#1074;&#1080;&#1077; &#1086;&#1087;&#1090;&#1080;&#1084;&#1080;&#1079;&#1072;&#1094;&#1080;&#1080;.
-&#1042; &#1080;&#1090;&#1086;&#1075;&#1077;,
-&#1074; &#1082;&#1072;&#1095;&#1077;&#1089;&#1090;&#1074;&#1077; &#1073;&#1072;&#1079;&#1086;&#1074;&#1099;&#1093; &#1087;&#1088;&#1080;&#1085;&#1094;&#1080;&#1087;&#1086;&#1074; &#1089;&#1086;&#1079;&#1076;&#1072;&#1085;&#1080;&#1103; rspamd &#1073;&#1099;&#1083;&#1080; &#1087;&#1088;&#1080;&#1085;&#1094;&#1080;&#1087;&#1099; &#1086;&#1087;&#1090;&#1080;&#1084;&#1080;&#1079;&#1072;&#1094;&#1080;&#1080; &#1074;&#1088;&#1077;&#1084;&#1077;&#1085;&#1080; &#1086;&#1073;&#1088;&#1072;&#1073;&#1086;&#1090;&#1082;&#1080; &#1087;&#1080;&#1089;&#1077;&#1084;,
-&#1074; &#1095;&#1080;&#1089;&#1083;&#1077; &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1093;:</p>
-
-<ul>
-<li>&#1087;&#1086;&#1083;&#1085;&#1086;&#1089;&#1090;&#1100;&#1102; &#1072;&#1089;&#1080;&#1085;&#1093;&#1088;&#1086;&#1085;&#1085;&#1072;&#1103; &#1088;&#1072;&#1073;&#1086;&#1090;&#1072; &#1089; &#1089;&#1077;&#1090;&#1100;&#1102; (&#1085;&#1072; &#1073;&#1072;&#1079;&#1077; libevent),
-&#1074; &#1090;&#1086;&#1084; &#1095;&#1080;&#1089;&#1083;&#1077; DNS &#1079;&#1072;&#1087;&#1088;&#1086;&#1089;&#1099; &#1080; &#1088;&#1072;&#1073;&#1086;&#1090;&#1072; &#1089; http</li>
-
-<li>&#1073;&#1099;&#1089;&#1090;&#1088;&#1099;&#1077; &#1084;&#1077;&#1093;&#1072;&#1085;&#1080;&#1079;&#1084;&#1099; &#1074;&#1099;&#1076;&#1077;&#1083;&#1077;&#1085;&#1080;&#1103; &#1087;&#1072;&#1084;&#1103;&#1090;&#1080;</li>
-
-<li>&#1082;&#1086;&#1084;&#1087;&#1080;&#1083;&#1103;&#1094;&#1080;&#1103; &#1074;&#1089;&#1077;&#1093; &#1088;&#1077;&#1075;&#1091;&#1083;&#1103;&#1088;&#1085;&#1099;&#1093; &#1074;&#1099;&#1088;&#1072;&#1078;&#1077;&#1085;&#1080;&#1081; &#1080; &#1074;&#1099;&#1079;&#1086;&#1074; &#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1090;&#1077;&#1093; &#1080;&#1079; &#1085;&#1080;&#1093;,
-&#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1077; &#1085;&#1072;&#1080;&#1073;&#1086;&#1083;&#1077;&#1077; &#1074;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1099; (&#1090;&#1086; &#1077;&#1089;&#1090;&#1100;,
-&#1080;&#1084;&#1077;&#1077;&#1090;&#1089;&#1103; &#1084;&#1077;&#1093;&#1072;&#1085;&#1080;&#1079;&#1084; &#1074;&#1077;&#1076;&#1077;&#1085;&#1080;&#1103; &#1089;&#1090;&#1072;&#1090;&#1080;&#1089;&#1090;&#1080;&#1082;&#1080; &#1089;&#1088;&#1072;&#1073;&#1072;&#1090;&#1099;&#1074;&#1072;&#1085;&#1080;&#1103; &#1088;&#1072;&#1079;&#1083;&#1080;&#1095;&#1085;&#1099;&#1093; &#1087;&#1088;&#1072;&#1074;&#1080;&#1083;,
-&#1080; &#1087;&#1088;&#1080; &#1086;&#1073;&#1088;&#1072;&#1073;&#1086;&#1090;&#1082;&#1077; &#1089;&#1083;&#1077;&#1076;&#1091;&#1102;&#1097;&#1077;&#1075;&#1086; &#1087;&#1080;&#1089;&#1100;&#1084;&#1072; &#1091;&#1095;&#1080;&#1090;&#1099;&#1074;&#1072;&#1077;&#1090;&#1089;&#1103; &#1086;&#1073;&#1088;&#1072;&#1073;&#1086;&#1090;&#1082;&#1072; &#1087;&#1088;&#1077;&#1076;&#1099;&#1076;&#1091;&#1097;&#1080;&#1093;,
-&#1095;&#1090;&#1086; &#1087;&#1086;&#1079;&#1074;&#1086;&#1083;&#1103;&#1077;&#1090; &#1084;&#1072;&#1082;&#1089;&#1080;&#1084;&#1072;&#1083;&#1100;&#1085;&#1086; &#1073;&#1099;&#1089;&#1090;&#1088;&#1086; &#1087;&#1088;&#1086;&#1074;&#1077;&#1089;&#1090;&#1080; &#1086;&#1089;&#1085;&#1086;&#1074;&#1085;&#1099;&#1077; &#1090;&#1077;&#1089;&#1090;&#1099;)</li>
-
-<li>&#1088;&#1072;&#1089;&#1096;&#1080;&#1088;&#1103;&#1077;&#1084;&#1072;&#1103; &#1072;&#1088;&#1093;&#1080;&#1090;&#1077;&#1082;&#1090;&#1091;&#1088;&#1072;: &#1074;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1086;&#1089;&#1090;&#1100; &#1085;&#1072;&#1087;&#1080;&#1089;&#1072;&#1085;&#1080;&#1103; &#1087;&#1083;&#1072;&#1075;&#1080;&#1085;&#1086;&#1074; &#1085;&#1072; &#1089;&#1080;,
-lua,
-&#1074;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1086;&#1089;&#1090;&#1100; &#1076;&#1086;&#1073;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1103; &#1085;&#1086;&#1074;&#1099;&#1093; &#1090;&#1080;&#1087;&#1086;&#1074; &#1092;&#1080;&#1083;&#1100;&#1090;&#1088;&#1086;&#1074;,
-&#1088;&#1072;&#1089;&#1096;&#1080;&#1088;&#1077;&#1085;&#1080;&#1081; &#1087;&#1088;&#1086;&#1090;&#1086;&#1082;&#1086;&#1083;&#1072; rspamc,
-&#1074;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1086;&#1089;&#1090;&#1100; &#1076;&#1086;&#1073;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1103; &#1085;&#1086;&#1074;&#1099;&#1093; &#1090;&#1080;&#1087;&#1086;&#1074; &#1089;&#1090;&#1072;&#1090;&#1080;&#1089;&#1090;&#1080;&#1095;&#1077;&#1089;&#1082;&#1080;&#1093; &#1072;&#1083;&#1075;&#1086;&#1088;&#1080;&#1090;&#1084;&#1086;&#1074;,
-&#1072;&#1083;&#1075;&#1086;&#1088;&#1080;&#1090;&#1084;&#1086;&#1074; &#1085;&#1086;&#1088;&#1084;&#1072;&#1083;&#1080;&#1079;&#1072;&#1094;&#1080;&#1080; &#1080; &#1087;&#1072;&#1088;&#1089;&#1080;&#1085;&#1075;&#1072; &#1090;&#1077;&#1082;&#1089;&#1090;&#1086;&#1074;</li>
-
-<li>&#1074;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1086;&#1089;&#1090;&#1100; &#1076;&#1080;&#1085;&#1072;&#1084;&#1080;&#1095;&#1077;&#1089;&#1082;&#1086;&#1081; &#1079;&#1072;&#1075;&#1088;&#1091;&#1079;&#1082;&#1080; &#1088;&#1072;&#1079;&#1083;&#1080;&#1095;&#1085;&#1099;&#1093; &#1085;&#1072;&#1089;&#1090;&#1088;&#1086;&#1077;&#1082;,
-&#1089;&#1087;&#1080;&#1089;&#1082;&#1086;&#1074; ip &#1072;&#1076;&#1088;&#1077;&#1089;&#1086;&#1074; &#1080; &#1087;&#1088;&#1086;&#1095;&#1077;&#1081; &#1080;&#1085;&#1092;&#1086;&#1088;&#1084;&#1072;&#1094;&#1080;&#1080; &#1095;&#1077;&#1088;&#1077;&#1079; HTTP &#1087;&#1088;&#1086;&#1090;&#1086;&#1082;&#1086;&#1083; &#1089; &#1087;&#1086;&#1076;&#1076;&#1077;&#1088;&#1078;&#1082;&#1086;&#1081; &#1076;&#1072;&#1090;&#1099; &#1084;&#1086;&#1076;&#1080;&#1092;&#1080;&#1082;&#1072;&#1094;&#1080;&#1080; &#1090;&#1072;&#1082;&#1080;&#1093; &#1089;&#1087;&#1080;&#1089;&#1082;&#1086;&#1074;</li>
-
-<li>&#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1085;&#1080;&#1077; &#1074;&#1077;&#1079;&#1076;&#1077;,
-&#1075;&#1076;&#1077; &#1074;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1086;,
-&#1089;&#1087;&#1077;&#1094;&#1080;&#1072;&#1083;&#1080;&#1079;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1085;&#1099;&#1093; &#1082;&#1086;&#1085;&#1077;&#1095;&#1085;&#1099;&#1093; &#1072;&#1074;&#1090;&#1086;&#1084;&#1072;&#1090;&#1086;&#1074; &#1076;&#1083;&#1103; &#1088;&#1072;&#1079;&#1073;&#1086;&#1088;&#1072; &#1080; &#1072;&#1085;&#1072;&#1083;&#1080;&#1079;&#1072; &#1090;&#1077;&#1082;&#1089;&#1090;&#1086;&#1074;</li>
-
-<li>&#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1085;&#1080;&#1077; &#1073;&#1099;&#1089;&#1090;&#1088;&#1086;&#1075;&#1086; mime &#1087;&#1072;&#1088;&#1089;&#1077;&#1088;&#1072; gmime</li>
-</ul>
-
-<p>&#1042; &#1088;&#1077;&#1079;&#1091;&#1083;&#1100;&#1090;&#1072;&#1090;&#1077; &#1087;&#1077;&#1088;&#1077;&#1093;&#1086;&#1076;&#1072; &#1089; SA &#1085;&#1072; rspamd &#1087;&#1086;&#1089;&#1083;&#1077;&#1076;&#1085;&#1080;&#1081; &#1087;&#1086;&#1082;&#1072;&#1079;&#1072;&#1083; &#1074; &#1089;&#1088;&#1077;&#1076;&#1085;&#1077;&#1084; &#1074; 10 &#1088;&#1072;&#1079; &#1073;&#1086;&#1083;&#1077;&#1077; &#1073;&#1099;&#1089;&#1090;&#1088;&#1091;&#1102; &#1086;&#1073;&#1088;&#1072;&#1073;&#1086;&#1090;&#1082;&#1091; &#1089;&#1086;&#1086;&#1073;&#1097;&#1077;&#1085;&#1080;&#1081;.
-&#1042; &#1076;&#1072;&#1085;&#1085;&#1099;&#1081; &#1084;&#1086;&#1084;&#1077;&#1085;&#1090; rspamd &#1080;&#1084;&#1077;&#1077;&#1090; &#1089;&#1090;&#1072;&#1090;&#1091;&#1089; &#1073;&#1077;&#1090;&#1072; &#1074;&#1077;&#1088;&#1089;&#1080;&#1080;,
-&#1085;&#1086; &#1074;&#1087;&#1086;&#1083;&#1085;&#1077; &#1087;&#1088;&#1080;&#1075;&#1086;&#1076;&#1077;&#1085; &#1076;&#1083;&#1103; &#1088;&#1072;&#1073;&#1086;&#1090;&#1099;.</p>
-
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="2._(1059)(1089)(1090)(1072)(1085)(1086)(1074)(1082)(1072)_(1080)_(1085)(1072)(1089)(1090)(1088)(1086)(1081)(1082)(1072)_rspamd"
->2.
-&#1059;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1082;&#1072; &#1080; &#1085;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1072; rspamd</a></h2>
-
-<p>&#1044;&#1083;&#1103; &#1089;&#1073;&#1086;&#1088;&#1082;&#1080; rspamd &#1074;&#1072;&#1084; &#1087;&#1086;&#1090;&#1088;&#1077;&#1073;&#1091;&#1102;&#1090;&#1089;&#1103;:</p>
-
-<ul>
-<li>libevent <a href="http://www.monkey.org/~provos/libevent/" class="podlinkurl"
->http://www.monkey.org/~provos/libevent/</a> - &#1073;&#1080;&#1073;&#1083;&#1080;&#1086;&#1090;&#1077;&#1082;&#1072; &#1076;&#1083;&#1103; &#1072;&#1089;&#1080;&#1085;&#1093;&#1088;&#1086;&#1085;&#1085;&#1086;&#1081; &#1086;&#1073;&#1088;&#1072;&#1073;&#1086;&#1090;&#1082;&#1080; &#1089;&#1086;&#1073;&#1099;&#1090;&#1080;&#1081;</li>
-
-<li>glib <a href="http://library.gnome.org/devel/glib/" class="podlinkurl"
->http://library.gnome.org/devel/glib/</a> - &#1073;&#1080;&#1073;&#1083;&#1080;&#1086;&#1090;&#1077;&#1082;&#1072; &#1086;&#1073;&#1097;&#1077;&#1075;&#1086; &#1085;&#1072;&#1079;&#1085;&#1072;&#1095;&#1077;&#1085;&#1080;&#1103;,
-&#1089;&#1086;&#1076;&#1077;&#1088;&#1078;&#1072;&#1097;&#1072;&#1103; &#1084;&#1085;&#1086;&#1075;&#1080;&#1077; &#1074;&#1077;&#1097;&#1080;,
-&#1086; &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1093; &#1088;&#1072;&#1079;&#1088;&#1072;&#1073;&#1086;&#1090;&#1095;&#1080;&#1082;&#1080; libc,
-&#1091;&#1074;&#1099;,
-&#1079;&#1072;&#1073;&#1099;&#1083;&#1080; (glib &#1085;&#1077; &#1103;&#1074;&#1083;&#1103;&#1077;&#1090;&#1089;&#1103; &#1075;&#1088;&#1072;&#1092;&#1080;&#1095;&#1077;&#1089;&#1082;&#1086;&#1081; &#1073;&#1080;&#1073;&#1083;&#1080;&#1086;&#1090;&#1077;&#1082;&#1086;&#1081;,
-&#1093;&#1086;&#1090;&#1103; &#1080; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1077;&#1090;&#1089;&#1103;,
-&#1085;&#1072;&#1087;&#1088;&#1080;&#1084;&#1077;&#1088;,
-gtk)</li>
-
-<li>gmime <a href="http://spruce.sourceforge.net/gmime/" class="podlinkurl"
->http://spruce.sourceforge.net/gmime/</a> - MIME &#1087;&#1072;&#1088;&#1089;&#1077;&#1088; &#1085;&#1072; &#1073;&#1072;&#1079;&#1077; &#1073;&#1080;&#1073;&#1083;&#1080;&#1086;&#1090;&#1077;&#1082;&#1080; glib</li>
-
-<li>lua <a href="http://www.lua.org/" class="podlinkurl"
->http://www.lua.org/</a> - &#1074;&#1089;&#1090;&#1088;&#1072;&#1080;&#1074;&#1072;&#1077;&#1084;&#1099;&#1081; &#1089;&#1082;&#1088;&#1080;&#1087;&#1090;&#1086;&#1074;&#1099;&#1081; &#1103;&#1079;&#1099;&#1082; (&#1074; &#1087;&#1088;&#1080;&#1085;&#1094;&#1080;&#1087;&#1077;,
-&#1085;&#1072;&#1083;&#1080;&#1095;&#1080;&#1077; lua &#1085;&#1077;&#1086;&#1073;&#1103;&#1079;&#1072;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086;,
-&#1085;&#1086; &#1073;&#1077;&#1079; lua &#1084;&#1085;&#1086;&#1075;&#1080;&#1081; &#1092;&#1091;&#1085;&#1082;&#1094;&#1080;&#1086;&#1085;&#1072;&#1083; rspamd &#1086;&#1089;&#1090;&#1072;&#1085;&#1077;&#1090;&#1089;&#1103; &#1085;&#1077;&#1088;&#1077;&#1072;&#1083;&#1080;&#1079;&#1086;&#1074;&#1072;&#1085;&#1085;&#1099;&#1084;)</li>
-
-<li>perl <a href="http://www.perl.org/" class="podlinkurl"
->http://www.perl.org/</a> - &#1085;&#1072; &#1087;&#1077;&#1088;&#1083;&#1077; &#1085;&#1072;&#1087;&#1080;&#1089;&#1072;&#1085;,
-&#1085;&#1072;&#1087;&#1088;&#1080;&#1084;&#1077;&#1088;,
-&#1082;&#1086;&#1085;&#1089;&#1086;&#1083;&#1100;&#1085;&#1099;&#1081; &#1082;&#1083;&#1080;&#1077;&#1085;&#1090; rspamc,
-&#1088;&#1072;&#1089;&#1087;&#1086;&#1079;&#1085;&#1072;&#1074;&#1072;&#1090;&#1077;&#1083;&#1100; &#1088;&#1077;&#1076;&#1080;&#1088;&#1077;&#1082;&#1090;&#1086;&#1074; &#1074; URL&#39;&#1103;&#1093;,
-&#1087;&#1086;&#1101;&#1090;&#1086;&#1084;&#1091; &#1085;&#1072;&#1083;&#1080;&#1095;&#1080;&#1077; &#1087;&#1077;&#1088;&#1083;&#1072; &#1074; &#1089;&#1080;&#1089;&#1090;&#1077;&#1084;&#1077; &#1082;&#1088;&#1072;&#1081;&#1085;&#1077; &#1078;&#1077;&#1083;&#1072;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086;</li>
-
-<li>cmake <a href="http://www.cmake.org/" class="podlinkurl"
->http://www.cmake.org/</a> - &#1089;&#1080;&#1089;&#1090;&#1077;&#1084;&#1072; &#1089;&#1073;&#1086;&#1088;&#1082;&#1080;,
-&#1082;&#1086;&#1090;&#1086;&#1088;&#1072;&#1103; &#1087;&#1086;&#1079;&#1074;&#1086;&#1083;&#1103;&#1077;&#1090; rspamd &#1089;&#1086;&#1073;&#1080;&#1088;&#1072;&#1090;&#1100;&#1089;&#1103; (&#1087;&#1086; &#1082;&#1088;&#1072;&#1081;&#1085;&#1077;&#1081; &#1084;&#1077;&#1088;&#1077;,
-&#1074; &#1090;&#1077;&#1086;&#1088;&#1080;&#1080;) &#1085;&#1072; &#1074;&#1089;&#1077;&#1093; Posix &#1089;&#1086;&#1074;&#1084;&#1077;&#1089;&#1090;&#1080;&#1084;&#1099;&#1093; &#1089;&#1080;&#1089;&#1090;&#1077;&#1084;&#1072;&#1093;.
-&#1048;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1100; &#1089;&#1090;&#1072;&#1085;&#1076;&#1072;&#1088;&#1090;&#1085;&#1099;&#1077; &#1074; &#1076;&#1072;&#1085;&#1085;&#1086;&#1081; &#1089;&#1080;&#1090;&#1091;&#1072;&#1094;&#1080;&#1080; autotools &#1103; &#1085;&#1077; &#1089;&#1090;&#1072;&#1083;,
-&#1090;&#1072;&#1082; &#1082;&#1072;&#1082; &#1089;&#1095;&#1080;&#1090;&#1072;&#1102; &#1080;&#1093; &#1089;&#1072;&#1084;&#1086;&#1081; &#1085;&#1077;&#1091;&#1076;&#1086;&#1073;&#1085;&#1086;&#1081; &#1074; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1085;&#1080;&#1080; &#1089;&#1080;&#1089;&#1090;&#1077;&#1084;&#1086;&#1081; &#1089;&#1073;&#1086;&#1088;&#1082;&#1080; &#1080;&#1089;&#1093;&#1086;&#1076;&#1085;&#1080;&#1082;&#1086;&#1074;,
-&#1082;&#1086;&#1090;&#1086;&#1088;&#1091;&#1102; &#1084;&#1086;&#1078;&#1085;&#1086; &#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1087;&#1088;&#1080;&#1076;&#1091;&#1084;&#1072;&#1090;&#1100;.</li>
-
-<li>mercurial <a href="http://mercurial.selenic.com/" class="podlinkurl"
->http://mercurial.selenic.com/</a> - &#1089;&#1080;&#1089;&#1090;&#1077;&#1084;&#1072; &#1091;&#1087;&#1088;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1103; &#1074;&#1077;&#1088;&#1089;&#1080;&#1103;&#1084;&#1080; (SCM),
-&#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1077;&#1084;&#1072;&#1103; &#1076;&#1083;&#1103; &#1088;&#1072;&#1079;&#1088;&#1072;&#1073;&#1086;&#1090;&#1082;&#1080; rspamd.
-&#1058;&#1072;&#1082; &#1082;&#1072;&#1082; &#1074; &#1085;&#1072;&#1089;&#1090;&#1086;&#1103;&#1097;&#1077;&#1077; &#1074;&#1088;&#1077;&#1084;&#1103; rspamd &#1085;&#1072;&#1093;&#1086;&#1076;&#1080;&#1090;&#1089;&#1103; &#1074; &#1089;&#1086;&#1089;&#1090;&#1086;&#1103;&#1085;&#1080;&#1080; &#1073;&#1077;&#1090;&#1072;-&#1074;&#1077;&#1088;&#1089;&#1080;&#1080;,
-&#1090;&#1086; &#1088;&#1077;&#1083;&#1080;&#1079;&#1099; &#1074;&#1099;&#1093;&#1086;&#1076;&#1103;&#1090; &#1085;&#1077;&#1095;&#1072;&#1089;&#1090;&#1086; &#1080; &#1079;&#1072;&#1095;&#1072;&#1089;&#1090;&#1091;&#1102; &#1103;&#1074;&#1083;&#1103;&#1102;&#1090;&#1089;&#1103; &#1084;&#1077;&#1085;&#1077;&#1077; &#1089;&#1090;&#1072;&#1073;&#1080;&#1083;&#1100;&#1085;&#1099;&#1084;&#1080;,
-&#1095;&#1077;&#1084; &#1090;&#1077;&#1082;&#1091;&#1097;&#1072;&#1103; &#1074;&#1077;&#1088;&#1089;&#1080;&#1103; &#1074; &#1088;&#1077;&#1087;&#1086;&#1079;&#1080;&#1090;&#1086;&#1088;&#1080;&#1080;,
-&#1087;&#1086;&#1101;&#1090;&#1086;&#1084;&#1091; &#1076;&#1083;&#1103; &#1091;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1082;&#1080; rspamd &#1083;&#1091;&#1095;&#1096;&#1077; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1100; &#1074;&#1077;&#1088;&#1089;&#1080;&#1102; &#1085;&#1077;&#1087;&#1086;&#1089;&#1088;&#1077;&#1076;&#1089;&#1090;&#1074;&#1077;&#1085;&#1085;&#1086; &#1080;&#1079; &#1088;&#1077;&#1087;&#1086;&#1079;&#1080;&#1090;&#1086;&#1088;&#1080;&#1103;.</li>
-</ul>
-
-<p>&#1055;&#1086;&#1089;&#1083;&#1077; &#1091;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1082;&#1080; &#1074;&#1089;&#1077;&#1093; &#1090;&#1088;&#1077;&#1073;&#1091;&#1077;&#1084;&#1099;&#1093; &#1087;&#1088;&#1086;&#1075;&#1088;&#1072;&#1084;&#1084; &#1080; &#1073;&#1080;&#1073;&#1083;&#1080;&#1086;&#1090;&#1077;&#1082; &#1084;&#1086;&#1078;&#1085;&#1086; &#1087;&#1088;&#1080;&#1089;&#1090;&#1091;&#1087;&#1080;&#1090;&#1100; &#1085;&#1077;&#1087;&#1086;&#1089;&#1088;&#1077;&#1076;&#1089;&#1090;&#1074;&#1077;&#1085;&#1085;&#1086; &#1082; &#1091;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1082;&#1077; rspamd.</p>
-
-<dl>
-<dt><a name="1_(1089)(1082)(1072)(1095)(1080)(1074)(1072)(1077)(1084)_(1090)(1077)(1082)(1091)(1097)(1077)(1077)_(1089)(1086)(1089)(1090)(1086)(1103)(1085)(1080)(1077)_(1088)(1077)(1087)(1086)(1079)(1080)(1090)(1086)(1088)(1080)(1103):_$_hg_clone_http://rspamd.hg.sourceforge.net:8000/hgroot/rspamd/rspamd"
->1 &#1089;&#1082;&#1072;&#1095;&#1080;&#1074;&#1072;&#1077;&#1084; &#1090;&#1077;&#1082;&#1091;&#1097;&#1077;&#1077; &#1089;&#1086;&#1089;&#1090;&#1086;&#1103;&#1085;&#1080;&#1077; &#1088;&#1077;&#1087;&#1086;&#1079;&#1080;&#1090;&#1086;&#1088;&#1080;&#1103;: $ hg clone http://rspamd.hg.sourceforge.net:8000/hgroot/rspamd/rspamd</a></dt>
-
-<dd>
-<dt><a
->2 &#1082;&#1086;&#1085;&#1092;&#1080;&#1075;&#1091;&#1088;&#1080;&#1088;&#1091;&#1077;&#1084; rspamd: $ cd rspamd &#38;&#38; cmake .
-(&#1087;&#1088;&#1080; &#1085;&#1077;&#1086;&#1073;&#1093;&#1086;&#1076;&#1080;&#1084;&#1086;&#1089;&#1090;&#1080; &#1080;&#1079;&#1084;&#1077;&#1085;&#1080;&#1090;&#1100; &#1087;&#1072;&#1088;&#1072;&#1084;&#1077;&#1090;&#1088;&#1099; &#1084;&#1086;&#1078;&#1085;&#1086; &#1074;&#1085;&#1072;&#1095;&#1072;&#1083;&#1077; &#1074;&#1086;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1100;&#1089;&#1103; &#1082;&#1086;&#1084;&#1072;&#1085;&#1076;&#1086;&#1081; ccmake .)</a></dt>
-
-<dd>
-<dt><a name="3_(1089)(1086)(1073)(1080)(1088)(1072)(1077)(1084):_$_make"
->3 &#1089;&#1086;&#1073;&#1080;&#1088;&#1072;&#1077;&#1084;: $ make</a></dt>
-
-<dd>
-<dt><a name="4_(1091)(1089)(1090)(1072)(1085)(1072)(1074)(1083)(1080)(1074)(1072)(1077)(1084):_#_make_install"
->4 &#1091;&#1089;&#1090;&#1072;&#1085;&#1072;&#1074;&#1083;&#1080;&#1074;&#1072;&#1077;&#1084;: # make install</a></dt>
-</dl>
-
-<h3><a class='u' href='#___top' title='click to go to top of document'
-name="(1050)(1086)(1085)(1092)(1080)(1075)(1091)(1088)(1080)(1088)(1086)(1074)(1072)(1085)(1080)(1077)"
->&#1050;&#1086;&#1085;&#1092;&#1080;&#1075;&#1091;&#1088;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1077;</a></h3>
-
-<p>&#1042; &#1087;&#1088;&#1086;&#1094;&#1077;&#1089;&#1089;&#1077; &#1091;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1082;&#1080; &#1089;&#1090;&#1072;&#1074;&#1103;&#1090;&#1089;&#1103; &#1082;&#1086;&#1085;&#1092;&#1080;&#1075;&#1091;&#1088;&#1072;&#1094;&#1080;&#1086;&#1085;&#1085;&#1099;&#1077; &#1092;&#1072;&#1081;&#1083;&#1099; &#1087;&#1086; &#1091;&#1084;&#1086;&#1083;&#1095;&#1072;&#1085;&#1080;&#1102; &#1074; &#1082;&#1072;&#1090;&#1072;&#1083;&#1086;&#1075; {PREFIX}/etc.
-&#1055;&#1088;&#1080; &#1101;&#1090;&#1086;&#1084;,
-&#1074; &#1082;&#1072;&#1090;&#1072;&#1083;&#1086;&#1075; etc/rspamd &#1091;&#1089;&#1090;&#1072;&#1085;&#1072;&#1074;&#1083;&#1080;&#1074;&#1072;&#1102;&#1090;&#1089;&#1103; &#1087;&#1088;&#1072;&#1074;&#1080;&#1083;&#1072; &#1087;&#1086; &#1091;&#1084;&#1086;&#1083;&#1095;&#1072;&#1085;&#1080;&#1102; (headers,
-html,
-drugs,
-loto &#1080;.&#1090;.&#1087;.),
-&#1072; &#1074; &#1082;&#1072;&#1090;&#1072;&#1083;&#1086;&#1075; etc/rspamd.conf.sample &#1091;&#1089;&#1090;&#1072;&#1085;&#1072;&#1074;&#1083;&#1080;&#1074;&#1072;&#1077;&#1090;&#1089;&#1103; &#1082;&#1086;&#1085;&#1092;&#1080;&#1075;&#1091;&#1088;&#1072;&#1094;&#1080;&#1086;&#1085;&#1085;&#1099;&#1081; &#1092;&#1072;&#1081;&#1083; &#1087;&#1086; &#1091;&#1084;&#1086;&#1083;&#1095;&#1072;&#1085;&#1080;&#1102;.
-&#1045;&#1075;&#1086; &#1084;&#1086;&#1078;&#1085;&#1086; &#1089;&#1082;&#1086;&#1087;&#1080;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100; &#1074; &#1092;&#1072;&#1081;&#1083; etc/rspamd.conf &#1080; &#1086;&#1090;&#1088;&#1077;&#1076;&#1072;&#1082;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100; &#1074; &#1089;&#1086;&#1086;&#1090;&#1074;&#1077;&#1090;&#1089;&#1090;&#1074;&#1080;&#1080; &#1089; &#1089;&#1086;&#1073;&#1089;&#1090;&#1074;&#1077;&#1085;&#1085;&#1099;&#1084;&#1080; &#1087;&#1088;&#1077;&#1076;&#1087;&#1086;&#1095;&#1090;&#1077;&#1085;&#1080;&#1103;&#1084;&#1080;.
-&#1050;&#1086;&#1085;&#1092;&#1080;&#1075;&#1091;&#1088;&#1072;&#1094;&#1080;&#1086;&#1085;&#1085;&#1099;&#1081; &#1092;&#1072;&#1081;&#1083; &#1087;&#1086; &#1091;&#1084;&#1086;&#1083;&#1095;&#1072;&#1085;&#1080;&#1102; &#1089;&#1085;&#1072;&#1073;&#1078;&#1077;&#1085; &#1082;&#1086;&#1084;&#1084;&#1077;&#1085;&#1090;&#1072;&#1088;&#1080;&#1103;&#1084;&#1080; &#1082; &#1082;&#1072;&#1078;&#1076;&#1086;&#1081; &#1076;&#1080;&#1088;&#1077;&#1082;&#1090;&#1080;&#1074;&#1077;,
-&#1072; &#1090;&#1072;&#1082;&#1078;&#1077; &#1087;&#1086;&#1076;&#1088;&#1086;&#1073;&#1085;&#1086; &#1086;&#1087;&#1080;&#1089;&#1072;&#1085; &#1074; &#1076;&#1086;&#1082;&#1091;&#1084;&#1077;&#1085;&#1090;&#1072;&#1094;&#1080;&#1080; &#1082; rspamd,
-&#1085;&#1072;&#1093;&#1086;&#1076;&#1103;&#1097;&#1077;&#1081;&#1089;&#1103; &#1074; &#1082;&#1072;&#1090;&#1072;&#1083;&#1086;&#1075;&#1077; &#1080;&#1089;&#1093;&#1086;&#1076;&#1085;&#1080;&#1082;&#1086;&#1074; doc/rspamd.pdf.
-&#1042; &#1076;&#1072;&#1085;&#1085;&#1086;&#1084; &#1078;&#1077; &#1088;&#1091;&#1082;&#1086;&#1074;&#1086;&#1076;&#1089;&#1090;&#1074;&#1077; &#1087;&#1086;&#1076;&#1088;&#1086;&#1073;&#1085;&#1086; &#1080;&#1079;&#1083;&#1086;&#1078;&#1077;&#1085; &#1087;&#1088;&#1080;&#1085;&#1094;&#1080;&#1087; &#1088;&#1072;&#1073;&#1086;&#1090;&#1099; rspamd &#1080; &#1085;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1080; &#1074;&#1089;&#1077;&#1093; &#1084;&#1086;&#1076;&#1091;&#1083;&#1077;&#1081; &#1089;&#1080;&#1089;&#1090;&#1077;&#1084;&#1099;.
-&#1044;&#1083;&#1103; &#1073;&#1072;&#1079;&#1086;&#1074;&#1086;&#1081; &#1088;&#1072;&#1073;&#1086;&#1090;&#1099; &#1076;&#1086;&#1089;&#1090;&#1072;&#1090;&#1086;&#1095;&#1085;&#1086; &#1080;&#1089;&#1087;&#1088;&#1072;&#1074;&#1080;&#1090;&#1100; &#1087;&#1091;&#1090;&#1080; &#1082; &#1092;&#1072;&#1081;&#1083;&#1072;&#1084; &#1083;&#1086;&#1075;&#1086;&#1074;,
-&#1087;&#1080;&#1076;&#1092;&#1072;&#1081;&#1083;&#1091;,
-&#1072; &#1090;&#1072;&#1082;&#1078;&#1077; &#1086;&#1073;&#1088;&#1072;&#1090;&#1080;&#1090;&#1100; &#1074;&#1085;&#1080;&#1084;&#1072;&#1085;&#1080;&#1077; &#1085;&#1072; &#1088;&#1072;&#1079;&#1076;&#1077;&#1083;&#1099; factors &#1080; classifiers.
-&#1054;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1083;&#1102;&#1089;&#1100; &#1085;&#1072; &#1101;&#1090;&#1086;&#1084; &#1085;&#1077;&#1089;&#1082;&#1086;&#1083;&#1100;&#1082;&#1086; &#1087;&#1086;&#1076;&#1088;&#1086;&#1073;&#1085;&#1077;&#1077;.</p>
-
-<p>&#1042;&#1089;&#1077; &#1076;&#1080;&#1088;&#1077;&#1082;&#1090;&#1080;&#1074;&#1099; rspamd &#1080;&#1084;&#1077;&#1102;&#1090; &#1092;&#1086;&#1088;&#1084;&#1072;&#1090; param = value; &#1075;&#1076;&#1077; &#1089;&#1080;&#1084;&#1074;&#1086;&#1083; &#39;;&#39; &#1103;&#1074;&#1083;&#1103;&#1077;&#1090;&#1089;&#1103; &#1087;&#1088;&#1080;&#1079;&#1085;&#1072;&#1082;&#1086;&#1084; &#1086;&#1082;&#1086;&#1085;&#1095;&#1072;&#1085;&#1080;&#1103; &#1076;&#1080;&#1088;&#1077;&#1082;&#1090;&#1080;&#1074;&#1099;.
-&#1058;&#1072;&#1082;&#1078;&#1077; &#1092;&#1072;&#1081;&#1083; &#1088;&#1072;&#1079;&#1073;&#1080;&#1090; &#1085;&#1072; &#1089;&#1077;&#1082;&#1094;&#1080;&#1080;,
-&#1082;&#1072;&#1078;&#1076;&#1072;&#1103; &#1089;&#1077;&#1082;&#1094;&#1080;&#1103; &#1080;&#1084;&#1077;&#1077;&#1090; &#1080;&#1084;&#1103; (&#1085;&#1072;&#1087;&#1088;&#1080;&#1084;&#1077;&#1088; worker {}) &#1080; &#1074;&#1085;&#1091;&#1090;&#1088;&#1077;&#1085;&#1085;&#1080;&#1077; &#1076;&#1080;&#1088;&#1077;&#1082;&#1090;&#1074;&#1099; &#1074;&#1085;&#1091;&#1090;&#1088;&#1080; &#1092;&#1080;&#1075;&#1091;&#1088;&#1085;&#1099;&#1093; &#1089;&#1082;&#1086;&#1073;&#1086;&#1082;.
-&#1055;&#1086;&#1089;&#1083;&#1077; &#1082;&#1072;&#1078;&#1076;&#1086;&#1081; &#1089;&#1077;&#1082;&#1094;&#1080;&#1080; &#1090;&#1072;&#1082;&#1078;&#1077; &#1086;&#1073;&#1103;&#1079;&#1072;&#1090;&#1077;&#1083;&#1077;&#1085; &#1089;&#1080;&#1084;&#1074;&#1086;&#1083; &#39;;&#39;.
-&#1058;&#1072;&#1082;&#1078;&#1077; &#1082;&#1072;&#1078;&#1076;&#1099;&#1081; &#1084;&#1086;&#1076;&#1091;&#1083;&#1100; &#1080;&#1084;&#1077;&#1077;&#1090; &#1086;&#1089;&#1086;&#1073;&#1099;&#1081; &#1092;&#1086;&#1088;&#1084;&#1072;&#1090; &#1089;&#1077;&#1082;&#1094;&#1080;&#1080;:</p>
-
-<pre>
-.module 'name' {
- param = value;
-};
-</pre>
-
-
-<p>&#1042;&#1089;&#1077; &#1101;&#1090;&#1086; &#1084;&#1086;&#1078;&#1077;&#1090; &#1087;&#1086;&#1082;&#1072;&#1079;&#1072;&#1090;&#1100;&#1089;&#1103; &#1089;&#1083;&#1086;&#1078;&#1085;&#1099;&#1084; &#1085;&#1072; &#1087;&#1077;&#1088;&#1074;&#1099;&#1081; &#1074;&#1079;&#1075;&#1083;&#1103;&#1076;,
-&#1085;&#1086; &#1101;&#1090;&#1086; &#1087;&#1086;&#1079;&#1074;&#1086;&#1083;&#1103;&#1077;&#1090; &#1083;&#1091;&#1095;&#1096;&#1077; &#1089;&#1090;&#1088;&#1091;&#1082;&#1090;&#1091;&#1088;&#1080;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100; &#1092;&#1072;&#1081;&#1083; &#1080; &#1086;&#1073;&#1083;&#1077;&#1075;&#1095;&#1072;&#1077;&#1090; &#1088;&#1072;&#1089;&#1096;&#1080;&#1088;&#1103;&#1077;&#1084;&#1086;&#1089;&#1090;&#1100; rspamd.
-&#1044;&#1083;&#1103; &#1087;&#1077;&#1088;&#1074;&#1086;&#1085;&#1072;&#1095;&#1072;&#1083;&#1100;&#1085;&#1086;&#1081; &#1085;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1080; &#1076;&#1086;&#1089;&#1090;&#1072;&#1090;&#1086;&#1095;&#1085;&#1086; &#1086;&#1073;&#1088;&#1072;&#1090;&#1080;&#1090;&#1100; &#1074;&#1085;&#1080;&#1084;&#1072;&#1085;&#1080;&#1077; &#1085;&#1072; &#1088;&#1072;&#1079;&#1076;&#1077;&#1083; factors,
-&#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1081; &#1086;&#1087;&#1080;&#1089;&#1099;&#1074;&#1072;&#1077;&#1090; &#1074;&#1077;&#1089;&#1072; &#1088;&#1072;&#1079;&#1083;&#1080;&#1095;&#1085;&#1099;&#1093; &#1087;&#1088;&#1072;&#1074;&#1080;&#1083;,
-&#1088;&#1072;&#1079;&#1076;&#1077;&#1083; metric,
-&#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1081; &#1086;&#1087;&#1080;&#1089;&#1099;&#1074;&#1072;&#1077;&#1090; &#1084;&#1072;&#1082;&#1089;&#1080;&#1084;&#1072;&#1083;&#1100;&#1085;&#1099;&#1081; &#1074;&#1077;&#1089;,
-&#1095;&#1090;&#1086;&#1073;&#1099; &#1087;&#1080;&#1089;&#1100;&#1084;&#1086; &#1089;&#1095;&#1080;&#1090;&#1072;&#1083;&#1086;&#1089;&#1100; &#1089;&#1087;&#1072;&#1084;&#1086;&#1084;,
-&#1072; &#1090;&#1072;&#1082;&#1078;&#1077; &#1085;&#1072; &#1088;&#1072;&#1079;&#1076;&#1077;&#1083; classifiers.
-&#1056;&#1072;&#1079;&#1076;&#1077;&#1083; classifiers &#1086;&#1073;&#1077;&#1089;&#1087;&#1077;&#1095;&#1080;&#1074;&#1072;&#1077;&#1090; &#1088;&#1072;&#1073;&#1086;&#1090;&#1091; &#1089;&#1090;&#1072;&#1090;&#1080;&#1089;&#1090;&#1080;&#1095;&#1077;&#1089;&#1082;&#1080;&#1093; &#1072;&#1083;&#1075;&#1086;&#1088;&#1080;&#1090;&#1084;&#1086;&#1074;.
-&#1042; rspamd &#1074; &#1085;&#1072;&#1089;&#1090;&#1086;&#1103;&#1097;&#1077;&#1077; &#1074;&#1088;&#1077;&#1084;&#1103; &#1088;&#1077;&#1072;&#1083;&#1080;&#1079;&#1086;&#1074;&#1072;&#1085; &#1072;&#1083;&#1075;&#1086;&#1088;&#1080;&#1090;&#1084; winnow,
-&#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1081; &#1088;&#1072;&#1073;&#1086;&#1090;&#1072;&#1077;&#1090; &#1089;&#1083;&#1077;&#1076;&#1091;&#1102;&#1097;&#1080;&#1084; &#1086;&#1073;&#1088;&#1072;&#1079;&#1086;&#1084;:</p>
-
-<dl>
-<dt><a name="1_(1090)(1077)(1082)(1089)(1090)_(1088)(1072)(1079)(1073)(1080)(1074)(1072)(1077)(1090)(1089)(1103)_(1085)(1072)_(1089)(1083)(1086)(1074)(1072),_(1090)(1072)(1082)(1078)(1077)_(1074)(1099)(1076)(1077)(1083)(1103)(1077)(1090)(1089)(1103)_(1086)(1082)(1085)(1086)_(1074)_(1087)(1103)(1090)(1100)_(1089)(1083)(1086)(1074)"
->1 &#1090;&#1077;&#1082;&#1089;&#1090; &#1088;&#1072;&#1079;&#1073;&#1080;&#1074;&#1072;&#1077;&#1090;&#1089;&#1103; &#1085;&#1072; &#1089;&#1083;&#1086;&#1074;&#1072;,
-&#1090;&#1072;&#1082;&#1078;&#1077; &#1074;&#1099;&#1076;&#1077;&#1083;&#1103;&#1077;&#1090;&#1089;&#1103; &#1086;&#1082;&#1085;&#1086; &#1074; &#1087;&#1103;&#1090;&#1100; &#1089;&#1083;&#1086;&#1074;</a></dt>
-
-<dd>
-<dt><a name="2_(1086)(1082)(1085)(1086)_(1087)(1077)(1088)(1077)(1084)(1077)(1097)(1072)(1077)(1090)(1089)(1103)_(1087)(1086)_(1089)(1083)(1086)(1074)(1072)(1084),_(1087)(1088)(1080)_(1101)(1090)(1086)(1084)_(1074)(1099)(1076)(1077)(1083)(1103)(1102)(1090)(1089)(1103)_(1089)(1083)(1086)(1074)(1086)(1089)(1086)(1095)(1077)(1090)(1072)(1085)(1080)(1103)_(1087)(1086)_(1086)(1087)(1088)(1077)(1076)(1077)(1083)(1077)(1085)(1085)(1086)(1084)(1091)_(1072)(1083)(1075)(1086)(1088)(1080)(1090)(1084)(1091)_(1080)_(1074)(1099)(1095)(1080)(1089)(1083)(1103)(1077)(1090)(1089)(1103)_(1080)(1093)_(1093)(1077)(1096)"
->2 &#1086;&#1082;&#1085;&#1086; &#1087;&#1077;&#1088;&#1077;&#1084;&#1077;&#1097;&#1072;&#1077;&#1090;&#1089;&#1103; &#1087;&#1086; &#1089;&#1083;&#1086;&#1074;&#1072;&#1084;,
-&#1087;&#1088;&#1080; &#1101;&#1090;&#1086;&#1084; &#1074;&#1099;&#1076;&#1077;&#1083;&#1103;&#1102;&#1090;&#1089;&#1103; &#1089;&#1083;&#1086;&#1074;&#1086;&#1089;&#1086;&#1095;&#1077;&#1090;&#1072;&#1085;&#1080;&#1103; &#1087;&#1086; &#1086;&#1087;&#1088;&#1077;&#1076;&#1077;&#1083;&#1077;&#1085;&#1085;&#1086;&#1084;&#1091; &#1072;&#1083;&#1075;&#1086;&#1088;&#1080;&#1090;&#1084;&#1091; &#1080; &#1074;&#1099;&#1095;&#1080;&#1089;&#1083;&#1103;&#1077;&#1090;&#1089;&#1103; &#1080;&#1093; &#1093;&#1077;&#1096;</a></dt>
-
-<dd>
-<dt><a
->3 &#1082;&#1072;&#1078;&#1076;&#1099;&#1081; &#1087;&#1086;&#1083;&#1091;&#1095;&#1077;&#1085;&#1085;&#1099;&#1081; &#1090;&#1072;&#1082;&#1080;&#1084; &#1086;&#1073;&#1088;&#1072;&#1079;&#1086;&#1084; &#1093;&#1077;&#1096; &#1087;&#1088;&#1086;&#1074;&#1077;&#1088;&#1103;&#1077;&#1090;&#1089;&#1103; &#1074; &#1092;&#1072;&#1081;&#1083;&#1077; &#1089;&#1090;&#1072;&#1090;&#1080;&#1089;&#1090;&#1080;&#1082;&#1080;,
-&#1074; &#1082;&#1086;&#1090;&#1086;&#1088;&#1086;&#1084; &#1093;&#1088;&#1072;&#1085;&#1103;&#1090;&#1089;&#1103; &#1093;&#1077;&#1096;&#1080; &#1080; &#1080;&#1093; &#1074;&#1077;&#1089;&#1072;,
-&#1077;&#1089;&#1083;&#1080; &#1093;&#1077;&#1096; &#1085;&#1072;&#1081;&#1076;&#1077;&#1085;,
-&#1090;&#1086; &#1077;&#1075;&#1086; &#1074;&#1077;&#1089; &#1076;&#1086;&#1073;&#1072;&#1074;&#1083;&#1103;&#1077;&#1090;&#1089;&#1103; &#1082; &#1089;&#1091;&#1084;&#1084;&#1072;&#1088;&#1085;&#1086;&#1084;&#1091; &#1074;&#1077;&#1089;&#1091; &#1076;&#1072;&#1085;&#1085;&#1086;&#1075;&#1086; &#1092;&#1072;&#1081;&#1083;&#1072;</a></dt>
-
-<dd>
-<dt><a name="4_(1092)(1072)(1081)(1083),_(1085)(1072)(1073)(1088)(1072)(1074)(1096)(1080)(1081)_(1074)_(1089)(1091)(1084)(1084)(1077)_(1073)(1086)(1083)(1100)(1096)(1077)_(1074)(1077)(1089)(1072)_(1089)(1095)(1080)(1090)(1072)(1077)(1090)(1089)(1103)_(1082)(1083)(1072)(1089)(1089)(1086)(1084)_(1087)(1080)(1089)(1100)(1084)(1072)"
->4 &#1092;&#1072;&#1081;&#1083;,
-&#1085;&#1072;&#1073;&#1088;&#1072;&#1074;&#1096;&#1080;&#1081; &#1074; &#1089;&#1091;&#1084;&#1084;&#1077; &#1073;&#1086;&#1083;&#1100;&#1096;&#1077; &#1074;&#1077;&#1089;&#1072; &#1089;&#1095;&#1080;&#1090;&#1072;&#1077;&#1090;&#1089;&#1103; &#1082;&#1083;&#1072;&#1089;&#1089;&#1086;&#1084; &#1087;&#1080;&#1089;&#1100;&#1084;&#1072;</a></dt>
-</dl>
-
-<p>&#1054;&#1089;&#1085;&#1086;&#1074;&#1085;&#1072;&#1103; &#1080;&#1076;&#1077;&#1103; &#1090;&#1072;&#1082;&#1086;&#1075;&#1086; &#1087;&#1086;&#1076;&#1093;&#1086;&#1076;&#1072; &#1074; &#1086;&#1087;&#1088;&#1077;&#1076;&#1077;&#1083;&#1077;&#1085;&#1080;&#1080; &#1087;&#1086; &#1089;&#1083;&#1086;&#1074;&#1086;&#1089;&#1086;&#1095;&#1077;&#1090;&#1072;&#1085;&#1080;&#1103;&#1084;,
-&#1082; &#1082;&#1072;&#1082;&#1086;&#1084;&#1091; &#1082;&#1083;&#1072;&#1089;&#1089;&#1091; &#1087;&#1088;&#1080;&#1085;&#1072;&#1076;&#1083;&#1077;&#1078;&#1080;&#1090; &#1076;&#1072;&#1085;&#1085;&#1086;&#1077; &#1087;&#1080;&#1089;&#1100;&#1084;&#1086;.
-&#1042; SA &#1076;&#1083;&#1103; &#1101;&#1090;&#1086;&#1081; &#1094;&#1077;&#1083;&#1080; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1077;&#1090;&#1089;&#1103; &#1074;&#1077;&#1088;&#1086;&#1103;&#1090;&#1085;&#1086;&#1089;&#1090;&#1085;&#1099;&#1081; &#1072;&#1083;&#1075;&#1086;&#1088;&#1080;&#1090;&#1084; bayes,
-&#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1081; &#1076;&#1086;&#1089;&#1090;&#1072;&#1090;&#1086;&#1095;&#1085;&#1086; &#1087;&#1086;&#1093;&#1086;&#1078; &#1085;&#1072; &#1074;&#1099;&#1096;&#1077;&#1086;&#1087;&#1080;&#1089;&#1072;&#1085;&#1085;&#1099;&#1081;,
-&#1085;&#1086; &#1089;&#1095;&#1080;&#1090;&#1072;&#1077;&#1090; &#1085;&#1077; &#1074;&#1077;&#1089;&#1072;,
-&#1072; &#1074;&#1077;&#1088;&#1086;&#1103;&#1090;&#1085;&#1086;&#1089;&#1090;&#1080;.
-&#1069;&#1092;&#1092;&#1077;&#1082;&#1090;&#1080;&#1074;&#1085;&#1086;&#1089;&#1090;&#1100; &#1082;&#1072;&#1078;&#1076;&#1086;&#1075;&#1086; &#1080;&#1079; &#1072;&#1083;&#1075;&#1086;&#1088;&#1080;&#1090;&#1084;&#1086;&#1074; &#1087;&#1088;&#1080;&#1084;&#1077;&#1088;&#1085;&#1086; &#1086;&#1076;&#1080;&#1085;&#1072;&#1082;&#1086;&#1074;&#1072; &#1080; &#1079;&#1072;&#1074;&#1080;&#1089;&#1080;&#1090; &#1074; &#1086;&#1089;&#1085;&#1086;&#1074;&#1085;&#1086;&#1084; &#1086;&#1090; &#1101;&#1092;&#1092;&#1077;&#1082;&#1090;&#1080;&#1074;&#1085;&#1086;&#1089;&#1090;&#1080; &#1086;&#1073;&#1091;&#1095;&#1077;&#1085;&#1080;&#1103;.
-&#1054;&#1076;&#1085;&#1072;&#1082;&#1086;,
-&#1074; &#1086;&#1090;&#1083;&#1080;&#1095;&#1080;&#1077; &#1086;&#1090; SA,
-rspamd &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1077;&#1090; &#1085;&#1077; &#1086;&#1090;&#1076;&#1077;&#1083;&#1100;&#1085;&#1099;&#1077; &#1089;&#1083;&#1086;&#1074;&#1072;,
-&#1072; &#1089;&#1083;&#1086;&#1074;&#1086;&#1089;&#1086;&#1095;&#1077;&#1090;&#1072;&#1085;&#1080;&#1103;,
-&#1095;&#1090;&#1086; &#1087;&#1086;&#1074;&#1099;&#1096;&#1072;&#1077;&#1090; &#1077;&#1075;&#1086; &#1101;&#1092;&#1092;&#1077;&#1082;&#1090;&#1080;&#1074;&#1085;&#1086;&#1089;&#1090;&#1100;.
-&#1042; &#1089;&#1077;&#1082;&#1094;&#1080;&#1080; classifiers &#1084;&#1086;&#1078;&#1085;&#1086; &#1091;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1080;&#1090;&#1100; &#1088;&#1072;&#1079;&#1083;&#1080;&#1095;&#1085;&#1099;&#1077; &#1082;&#1083;&#1072;&#1089;&#1089;&#1099; &#1087;&#1080;&#1089;&#1077;&#1084;,
-&#1072; &#1076;&#1072;&#1083;&#1077;&#1077; &#1074; &#1089;&#1077;&#1082;&#1094;&#1080;&#1080; factors &#1091;&#1082;&#1072;&#1079;&#1072;&#1090;&#1100; &#1080;&#1093; &#1074;&#1077;&#1089; (&#1079;&#1072;&#1076;&#1072;&#1074;,
-&#1085;&#1072;&#1087;&#1088;&#1080;&#1084;&#1077;&#1088;,
-&#1076;&#1083;&#1103; &#1079;&#1072;&#1074;&#1077;&#1076;&#1086;&#1084;&#1086; &#1073;&#1077;&#1079;&#1074;&#1088;&#1077;&#1076;&#1085;&#1099;&#1093; &#1087;&#1080;&#1089;&#1077;&#1084; - ham - &#1086;&#1090;&#1088;&#1080;&#1094;&#1072;&#1090;&#1077;&#1083;&#1100;&#1085;&#1099;&#1081; &#1074;&#1077;&#1089;).
-&#1056;&#1072;&#1079;&#1084;&#1077;&#1088; &#1092;&#1072;&#1081;&#1083;&#1086;&#1074; &#1089;&#1090;&#1072;&#1090;&#1080;&#1089;&#1090;&#1080;&#1082;&#1080; &#1076;&#1086;&#1083;&#1078;&#1077;&#1085; &#1073;&#1099;&#1090;&#1100; &#1088;&#1072;&#1079;&#1091;&#1084;&#1085;&#1086; &#1073;&#1086;&#1083;&#1100;&#1096;&#1080;&#1084; &#1076;&#1083;&#1103; &#1093;&#1088;&#1072;&#1085;&#1077;&#1085;&#1080;&#1103; &#1082;&#1072;&#1082; &#1084;&#1086;&#1078;&#1085;&#1086; &#1073;&#1086;&#1083;&#1100;&#1096;&#1077;&#1075;&#1086; &#1095;&#1080;&#1089;&#1083;&#1072; &#1093;&#1077;&#1096;&#1077;&#1081;.
-&#1054;&#1076;&#1085;&#1072;&#1082;&#1086;,
-&#1085;&#1077;&#1086;&#1073;&#1093;&#1086;&#1076;&#1080;&#1084;&#1086; &#1091;&#1095;&#1080;&#1090;&#1099;&#1074;&#1072;&#1090;&#1100;,
-&#1095;&#1090;&#1086; &#1101;&#1090;&#1080; &#1092;&#1072;&#1081;&#1083;&#1099; &#1094;&#1077;&#1083;&#1080;&#1082;&#1086;&#1084; &#1079;&#1072;&#1075;&#1088;&#1091;&#1078;&#1072;&#1102;&#1090;&#1089;&#1103; &#1074; &#1087;&#1072;&#1084;&#1103;&#1090;&#1100; (&#1093;&#1086;&#1090;&#1103;,
-&#1088;&#1077;&#1072;&#1083;&#1080;&#1079;&#1072;&#1094;&#1080;&#1103; &#1086;&#1090;&#1086;&#1073;&#1088;&#1072;&#1078;&#1077;&#1085;&#1080;&#1103; &#1092;&#1072;&#1081;&#1083;&#1072; &#1074; &#1087;&#1072;&#1084;&#1103;&#1090;&#1080; &#1074; &#1088;&#1072;&#1079;&#1083;&#1080;&#1095;&#1085;&#1099;&#1093; &#1054;&#1057; &#1076;&#1086;&#1087;&#1091;&#1089;&#1082;&#1072;&#1077;&#1090; &#1079;&#1072;&#1075;&#1088;&#1091;&#1079;&#1082;&#1091; &#1080; &#1074;&#1099;&#1075;&#1088;&#1091;&#1079;&#1082;&#1091; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094; &#1101;&#1090;&#1086;&#1075;&#1086; &#1092;&#1072;&#1081;&#1083;&#1072; &#1074; &#1089;&#1074;&#1086;&#1087; &#1089;&#1080;&#1089;&#1090;&#1077;&#1084;&#1099;,
-&#1085;&#1086; &#1101;&#1092;&#1092;&#1077;&#1082;&#1090;&#1080;&#1074;&#1085;&#1086;&#1089;&#1090;&#1100; &#1101;&#1090;&#1086;&#1075;&#1086; &#1076;&#1086;&#1074;&#1086;&#1083;&#1100;&#1085;&#1086; &#1085;&#1080;&#1079;&#1082;&#1072;),
-&#1087;&#1086;&#1101;&#1090;&#1086;&#1084;&#1091; &#1085;&#1077;&#1086;&#1073;&#1093;&#1086;&#1076;&#1080;&#1084;&#1086; &#1089;&#1086;&#1080;&#1079;&#1084;&#1077;&#1088;&#1103;&#1090;&#1100; &#1088;&#1072;&#1079;&#1084;&#1077;&#1088; &#1086;&#1087;&#1077;&#1088;&#1072;&#1090;&#1080;&#1074;&#1085;&#1086;&#1081; &#1087;&#1072;&#1084;&#1103;&#1090;&#1080; &#1080; &#1092;&#1072;&#1081;&#1083;&#1086;&#1074; &#1089;&#1090;&#1072;&#1090;&#1080;&#1089;&#1090;&#1080;&#1082;&#1080;.</p>
-
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="4._(1055)(1086)(1076)(1082)(1083)(1102)(1095)(1077)(1085)(1080)(1077)_(1080)_(1087)(1088)(1086)(1074)(1077)(1088)(1082)(1072)_(1088)(1072)(1073)(1086)(1090)(1086)(1089)(1087)(1086)(1089)(1086)(1073)(1085)(1086)(1089)(1090)(1080)_rspamd"
->4.
-&#1055;&#1086;&#1076;&#1082;&#1083;&#1102;&#1095;&#1077;&#1085;&#1080;&#1077; &#1080; &#1087;&#1088;&#1086;&#1074;&#1077;&#1088;&#1082;&#1072; &#1088;&#1072;&#1073;&#1086;&#1090;&#1086;&#1089;&#1087;&#1086;&#1089;&#1086;&#1073;&#1085;&#1086;&#1089;&#1090;&#1080; rspamd</a></h2>
-
-<p>&#1044;&#1083;&#1103; &#1087;&#1088;&#1086;&#1074;&#1077;&#1088;&#1082;&#1080; &#1088;&#1072;&#1073;&#1086;&#1090;&#1099; &#1089;&#1080;&#1089;&#1090;&#1077;&#1084;&#1099; rspamd &#1087;&#1088;&#1086;&#1097;&#1077; &#1074;&#1089;&#1077;&#1075;&#1086; &#1074;&#1086;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1100;&#1089;&#1103; &#1082;&#1086;&#1084;&#1072;&#1085;&#1076;&#1086;&#1081; rspamc:</p>
-
-<pre>
-hostname:~> rspamc stat
-Do rspamc command stat
-Messages scanned: 1234040
-Messages learned: 59151
-Connections count: 1176623
-Control connections count: 59152
-Pools allocated: 2530714
-Pools freed: 2530699
-Bytes allocated: 66991793394
-Memory chunks allocated: 6453232
-Shared chunks allocated: 3
-Chunks freed: 6453090
-Oversized chunks: 468849
-Statfile: WINNOW_HAM (version 69); length: 100.0 MB; free blocks: 4563488; total blocks: 6553581; free: 69.63%
-Statfile: WINNOW_SPAM (version 36383); length: 100.0 MB; free blocks: 760504; total blocks: 6553581; free: 11.60%
-</pre>
-
-
-<p>&#1042; &#1076;&#1072;&#1085;&#1085;&#1086;&#1084; &#1089;&#1083;&#1091;&#1095;&#1072;&#1077; &#1074;&#1099;&#1074;&#1086;&#1076;&#1080;&#1090;&#1089;&#1103; &#1086;&#1073;&#1097;&#1072;&#1103; &#1089;&#1090;&#1072;&#1090;&#1080;&#1089;&#1090;&#1080;&#1082;&#1072;.
-&#1058;&#1072;&#1082;&#1086;&#1075;&#1086; &#1078;&#1077; &#1101;&#1092;&#1092;&#1077;&#1082;&#1090;&#1072; &#1084;&#1086;&#1078;&#1085;&#1086; &#1076;&#1086;&#1089;&#1090;&#1080;&#1075;&#1085;&#1091;&#1090;&#1100; &#1082;&#1086;&#1084;&#1072;&#1085;&#1076;&#1086;&#1081; telnet &#1085;&#1072; &#1087;&#1086;&#1088;&#1090; &#1087;&#1088;&#1086;&#1094;&#1077;&#1089;&#1089;&#1072; controller (&#1086;&#1085; &#1086;&#1087;&#1080;&#1089;&#1072;&#1085; &#1074; &#1082;&#1086;&#1085;&#1092;&#1080;&#1075;&#1091;&#1088;&#1072;&#1094;&#1080;&#1086;&#1085;&#1085;&#1086;&#1084; &#1092;&#1072;&#1081;&#1083;&#1077; &#1074; &#1089;&#1077;&#1082;&#1094;&#1080;&#1080; worker,
-type &#1091; &#1082;&#1086;&#1090;&#1086;&#1088;&#1086;&#1075;&#1086; controller).
-&#1055;&#1086; &#1091;&#1084;&#1086;&#1083;&#1095;&#1072;&#1085;&#1080;&#1102; &#1101;&#1090;&#1086; &#1087;&#1086;&#1088;&#1090; 11334 &#1085;&#1072; &#1072;&#1076;&#1088;&#1077;&#1089;&#1077; 127.0.0.1.
-&#1056;&#1072;&#1073;&#1086;&#1090;&#1091; &#1087;&#1088;&#1072;&#1074;&#1080;&#1083; &#1080; &#1089;&#1090;&#1072;&#1090;&#1080;&#1089;&#1090;&#1080;&#1082;&#1080; &#1084;&#1086;&#1078;&#1085;&#1086; &#1090;&#1072;&#1082;&#1078;&#1077; &#1087;&#1088;&#1086;&#1074;&#1077;&#1088;&#1080;&#1090;&#1100; &#1087;&#1086; &#1082;&#1086;&#1084;&#1072;&#1085;&#1076;&#1077; rspamc:</p>
-
-<pre>
-~> rspamc symbols /tmp/mailman.eml
-Processing /tmp/mailman.eml
-Process file: /tmp/mailman.eml
-Sending 4950 bytes...
-RSPAMD/1.1 0 OK
-Metric: default; False; -3.35 / 10.00 / 0.00
-Symbol: WINNOW_HAM; 5.00
-Symbol: RECEIVED_RBL; pbl.spamhaus.org,insecure-bl.rambler.ru
-Urls:
-</pre>
-
-
-<p>&#1042; &#1076;&#1072;&#1085;&#1085;&#1086;&#1084; &#1089;&#1083;&#1091;&#1095;&#1072;&#1077; &#1087;&#1086;&#1082;&#1072;&#1079;&#1099;&#1074;&#1072;&#1102;&#1090;&#1089;&#1103; &#1073;&#1072;&#1083;&#1083;&#1099;,
-&#1085;&#1072;&#1073;&#1088;&#1072;&#1085;&#1085;&#1099;&#1077; &#1087;&#1080;&#1089;&#1100;&#1084;&#1086;&#1084;,
-&#1072; &#1090;&#1072;&#1082;&#1078;&#1077; &#1076;&#1086;&#1087;&#1086;&#1083;&#1085;&#1080;&#1090;&#1077;&#1083;&#1100;&#1085;&#1072;&#1103; &#1080;&#1085;&#1092;&#1086;&#1088;&#1084;&#1072;&#1094;&#1080;&#1103;.
-&#1055;&#1086;&#1076;&#1088;&#1086;&#1073;&#1085;&#1077;&#1077; &#1086; &#1087;&#1088;&#1086;&#1090;&#1086;&#1082;&#1086;&#1083;&#1077; rspamc &#1074; &#1076;&#1086;&#1082;&#1091;&#1084;&#1077;&#1085;&#1090;&#1072;&#1094;&#1080;&#1080; (doc/rspamd.pdf).
-&#1044;&#1083;&#1103; &#1087;&#1086;&#1076;&#1082;&#1083;&#1102;&#1095;&#1077;&#1085;&#1080;&#1103; rspamd &#1082; MTA &#1083;&#1091;&#1095;&#1096;&#1077; &#1074;&#1089;&#1077;&#1075;&#1086; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1100; milter,
-&#1077;&#1089;&#1083;&#1080; &#1074;&#1072;&#1096; MTA postfix &#1080;&#1083;&#1080; sendmail.
-&#1042; &#1082;&#1072;&#1095;&#1077;&#1089;&#1090;&#1074;&#1077; milter&#39;&#1072; &#1084;&#1086;&#1078;&#1085;&#1086; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1100;,
-&#1085;&#1072;&#1087;&#1088;&#1080;&#1084;&#1077;&#1088;,
-rmilter: <a href="https://www.milter.org/milter/71/" class="podlinkurl"
->https://www.milter.org/milter/71/</a>.
-&#1054; &#1085;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1077; postfix + rmilter &#1084;&#1085;&#1086;&#1081; &#1073;&#1099;&#1083;&#1072; &#1085;&#1072;&#1087;&#1080;&#1089;&#1072;&#1085;&#1072; &#1089;&#1083;&#1077;&#1076;&#1091;&#1102;&#1097;&#1072;&#1103; &#1079;&#1072;&#1084;&#1077;&#1090;&#1082;&#1072;: <a href="http://cebka.pp.ru/blog/2009/02/-nginxpostfixrmilter.html" class="podlinkurl"
->http://cebka.pp.ru/blog/2009/02/-nginxpostfixrmilter.html</a> &#1044;&#1083;&#1103; MTA exim &#1084;&#1086;&#1078;&#1085;&#1086; &#1074;&#1086;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1100;&#1089;&#1103; &#1092;&#1072;&#1081;&#1083;&#1086;&#1084; local_scan.c &#1074; &#1082;&#1072;&#1090;&#1072;&#1083;&#1086;&#1075;&#1077; contrib/exim.
-&#1048;&#1085;&#1089;&#1090;&#1088;&#1091;&#1082;&#1094;&#1080;&#1080; &#1087;&#1086; &#1077;&#1075;&#1086; &#1091;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1082;&#1077; &#1086;&#1087;&#1080;&#1089;&#1072;&#1085;&#1099; &#1074; &#1089;&#1072;&#1084;&#1086;&#1084; &#1092;&#1072;&#1081;&#1083;&#1077;,
-&#1086;&#1076;&#1085;&#1072;&#1082;&#1086;,
-&#1101;&#1090;&#1086; &#1090;&#1088;&#1077;&#1073;&#1091;&#1077;&#1090; &#1087;&#1077;&#1088;&#1077;&#1089;&#1073;&#1086;&#1088;&#1082;&#1080; MTA.
-&#1058;&#1072;&#1082;&#1078;&#1077; rspamd &#34;&#1087;&#1086;&#1085;&#1080;&#1084;&#1072;&#1077;&#1090;&#34; &#1087;&#1088;&#1086;&#1090;&#1086;&#1082;&#1086;&#1083; SA,
-&#1087;&#1086;&#1101;&#1090;&#1086;&#1084;&#1091; &#1076;&#1083;&#1103; &#1087;&#1086;&#1076;&#1082;&#1083;&#1102;&#1095;&#1077;&#1085;&#1080;&#1103; rspamd &#1084;&#1086;&#1078;&#1085;&#1086; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1100; &#1090;&#1077; &#1078;&#1077; &#1089;&#1088;&#1077;&#1076;&#1089;&#1090;&#1074;&#1072;,
-&#1095;&#1090;&#1086; &#1080; &#1076;&#1083;&#1103; &#1087;&#1086;&#1076;&#1082;&#1083;&#1102;&#1095;&#1077;&#1085;&#1080;&#1103; &#1082; MTA SA.</p>
-
-<p>&#1055;&#1086;&#1076;&#1088;&#1086;&#1073;&#1085;&#1077;&#1077; &#1086; &#1082;&#1086;&#1084;&#1072;&#1085;&#1076;&#1072;&#1093; rspamc &#1080; &#1087;&#1088;&#1086;&#1090;&#1086;&#1082;&#1086;&#1083;&#1077; rspamc &#1085;&#1072;&#1087;&#1080;&#1089;&#1072;&#1085;&#1086; &#1086;&#1087;&#1103;&#1090;&#1100; &#1078;&#1077; &#1074; &#1076;&#1086;&#1082;&#1091;&#1084;&#1077;&#1085;&#1090;&#1072;&#1094;&#1080;&#1080;.</p>
-
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="5._(1054)(1073)(1091)(1095)(1077)(1085)(1080)(1077)_rspamd"
->5.
-&#1054;&#1073;&#1091;&#1095;&#1077;&#1085;&#1080;&#1077; rspamd</a></h2>
-
-<p>&#1055;&#1088;&#1086;&#1094;&#1077;&#1089;&#1089; &#1086;&#1073;&#1091;&#1095;&#1077;&#1085;&#1080;&#1103; &#1074;&#1072;&#1078;&#1077;&#1085; &#1076;&#1083;&#1103; &#1082;&#1086;&#1088;&#1088;&#1077;&#1082;&#1090;&#1085;&#1086;&#1081; &#1088;&#1072;&#1073;&#1086;&#1090;&#1099; &#1089;&#1090;&#1072;&#1090;&#1080;&#1089;&#1090;&#1080;&#1082;&#1080;.
-&#1044;&#1083;&#1103; &#1086;&#1073;&#1091;&#1095;&#1077;&#1085;&#1080;&#1103; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1077;&#1090;&#1089;&#1103; &#1082;&#1086;&#1084;&#1072;&#1085;&#1076;&#1072; rspamc learn.
-&#1044;&#1083;&#1103; &#1091;&#1082;&#1072;&#1079;&#1072;&#1085;&#1080;&#1103; &#1092;&#1072;&#1081;&#1083;&#1072; (&#1082;&#1083;&#1072;&#1089;&#1089;&#1072;) &#1087;&#1080;&#1089;&#1100;&#1084;&#1072; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1077;&#1090;&#1089;&#1103; &#1082;&#1083;&#1102;&#1095; -s.
-&#1055;&#1088;&#1080;&#1084;&#1077;&#1088; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1085;&#1080;&#1103;:</p>
-
-<pre>
-~> rspamc -s WINNOW_HAM learn /tmp/mailman.eml
-Processing /tmp/mailman.eml
-Process file: /tmp/mailman.eml
-Do rspamc command learn
-Sending 4950 bytes...
-Learn succeed. Sum weight: 128.48
-</pre>
-
-
-<p>&#1042; &#1082;&#1072;&#1095;&#1077;&#1089;&#1090;&#1074;&#1077; &#1087;&#1072;&#1088;&#1072;&#1084;&#1077;&#1090;&#1088;&#1086;&#1074; &#1084;&#1086;&#1078;&#1085;&#1086; &#1091;&#1082;&#1072;&#1079;&#1099;&#1074;&#1072;&#1090;&#1100; &#1085;&#1077;&#1089;&#1082;&#1086;&#1083;&#1100;&#1082;&#1086; &#1092;&#1072;&#1081;&#1083;&#1086;&#1074;,
-&#1094;&#1077;&#1083;&#1099;&#1077; &#1082;&#1072;&#1090;&#1072;&#1083;&#1086;&#1075;&#1080;,
-&#1072; &#1090;&#1072;&#1082;&#1078;&#1077; imap &#1087;&#1072;&#1087;&#1082;&#1080;:</p>
-
-<pre>
-~> rspamc -s WINNOW_SPAM learn imaps:user:cebka:password::host:somehost.rambler.ru:mbox:abuse.spam
-Processing imaps:user:cebka:password::host:mailsupport.rambler.ru:mbox:abuse.spam
-Enter IMAP password:
-Process imap: host: somehost.rambler.ru, mbox: abuse.spam
-Do rspamc command learn
-Sending 382650 bytes...
-Learn succeed. Sum weight: 1850.24
-<skipped>
-</pre>
-
-
-<p>&#1055;&#1088;&#1080; &#1086;&#1073;&#1091;&#1095;&#1077;&#1085;&#1080;&#1080; &#1085;&#1077;&#1086;&#1073;&#1093;&#1086;&#1076;&#1080;&#1084;&#1086; &#1091;&#1095;&#1080;&#1090;&#1099;&#1074;&#1072;&#1090;&#1100;,
-&#1095;&#1090;&#1086;&#1073;&#1099; &#1082;&#1086;&#1083;&#1080;&#1095;&#1077;&#1089;&#1090;&#1074;&#1086; spam &#1080; ham &#1087;&#1080;&#1089;&#1077;&#1084; &#1073;&#1099;&#1083;&#1086; &#1087;&#1088;&#1080;&#1084;&#1077;&#1088;&#1085;&#1086; &#1088;&#1072;&#1074;&#1085;&#1099;&#1084;.
-&#1042;&#1077;&#1089; &#1087;&#1086;&#1082;&#1072;&#1079;&#1099;&#1074;&#1072;&#1077;&#1090; &#1089;&#1091;&#1084;&#1084;&#1072;&#1088;&#1085;&#1099;&#1081; &#1074;&#1077;&#1089; &#1089;&#1083;&#1086;&#1074;&#1086;&#1089;&#1086;&#1095;&#1077;&#1090;&#1072;&#1085;&#1080;&#1081; &#1090;&#1077;&#1082;&#1089;&#1090;&#1072;,
-&#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1081; &#1073;&#1099;&#1083; &#1076;&#1086; &#1086;&#1073;&#1091;&#1095;&#1077;&#1085;&#1080;&#1103; &#1076;&#1072;&#1085;&#1085;&#1099;&#1084; &#1087;&#1080;&#1089;&#1100;&#1084;&#1086;&#1084; (&#1090;&#1086; &#1077;&#1089;&#1090;&#1100;,
-&#1090;&#1086;,
-&#1085;&#1072;&#1089;&#1082;&#1086;&#1083;&#1100;&#1082;&#1086; &#1074;&#1077;&#1083;&#1080;&#1082;&#1072; &#1074;&#1077;&#1088;&#1086;&#1103;&#1090;&#1085;&#1086;&#1089;&#1090;&#1100; &#1087;&#1088;&#1080;&#1085;&#1072;&#1076;&#1083;&#1077;&#1078;&#1085;&#1086;&#1089;&#1090;&#1080; &#1076;&#1072;&#1085;&#1085;&#1086;&#1075;&#1086; &#1087;&#1080;&#1089;&#1100;&#1084;&#1072; &#1082; &#1101;&#1090;&#1086;&#1084;&#1091; &#1082;&#1083;&#1072;&#1089;&#1089;&#1091;).
-&#1055;&#1088;&#1080; &#1086;&#1073;&#1085;&#1072;&#1088;&#1091;&#1078;&#1077;&#1085;&#1080;&#1080; &#1085;&#1077;&#1074;&#1077;&#1088;&#1085;&#1099;&#1093; &#1089;&#1088;&#1072;&#1073;&#1072;&#1090;&#1099;&#1074;&#1072;&#1085;&#1080;&#1081; &#1089;&#1090;&#1072;&#1090;&#1080;&#1089;&#1090;&#1080;&#1082;&#1080; &#1084;&#1086;&#1078;&#1085;&#1086; &#1085;&#1077;&#1089;&#1082;&#1086;&#1083;&#1100;&#1082;&#1086; &#1088;&#1072;&#1079; &#1087;&#1088;&#1080;&#1084;&#1077;&#1085;&#1080;&#1090;&#1100; learn &#1082; &#1079;&#1072;&#1076;&#1072;&#1085;&#1085;&#1086;&#1084;&#1091; &#1087;&#1080;&#1089;&#1100;&#1084;&#1091;,
-&#1087;&#1088;&#1086;&#1074;&#1077;&#1088;&#1103;&#1103; &#1077;&#1075;&#1086; &#1089;&#1091;&#1084;&#1084;&#1072;&#1088;&#1085;&#1099;&#1081; &#1074;&#1077;&#1089;.</p>
-
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="6._(1055)(1086)(1076)(1076)(1077)(1088)(1078)(1082)(1072)_(1080)_(1076)(1072)(1083)(1100)(1085)(1077)(1081)(1096)(1080)(1077)_(1076)(1077)(1081)(1089)(1090)(1074)(1080)(1103)"
->6.
-&#1055;&#1086;&#1076;&#1076;&#1077;&#1088;&#1078;&#1082;&#1072; &#1080; &#1076;&#1072;&#1083;&#1100;&#1085;&#1077;&#1081;&#1096;&#1080;&#1077; &#1076;&#1077;&#1081;&#1089;&#1090;&#1074;&#1080;&#1103;</a></h2>
-
-<p>&#1045;&#1089;&#1083;&#1080; &#1074;&#1099; &#1088;&#1077;&#1096;&#1080;&#1083;&#1080; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1100; rspamd &#1076;&#1083;&#1103; &#1086;&#1073;&#1088;&#1072;&#1073;&#1086;&#1090;&#1082;&#1080; &#1074;&#1072;&#1096;&#1077;&#1081; &#1087;&#1086;&#1095;&#1090;&#1099;,
-&#1090;&#1086; &#1083;&#1091;&#1095;&#1096;&#1080;&#1084; &#1080;&#1089;&#1090;&#1086;&#1095;&#1085;&#1080;&#1082;&#1086;&#1084; &#1080;&#1085;&#1092;&#1086;&#1088;&#1084;&#1072;&#1094;&#1080;&#1080; &#1073;&#1091;&#1076;&#1077;&#1090; &#1103;&#1074;&#1083;&#1103;&#1090;&#1100;&#1089;&#1103; &#1076;&#1086;&#1082;&#1091;&#1084;&#1077;&#1085;&#1090;&#1072;&#1094;&#1080;&#1103; &#1082; rspamd,
-&#1072; &#1090;&#1072;&#1082;&#1078;&#1077; &#1087;&#1088;&#1080;&#1084;&#1077;&#1088;&#1099; lua &#1087;&#1083;&#1072;&#1075;&#1080;&#1085;&#1086;&#1074;: etc/plugins/lua.
-&#1062;&#1077;&#1083;&#1100;&#1102; &#1078;&#1077; &#1076;&#1072;&#1085;&#1085;&#1086;&#1081; &#1089;&#1090;&#1072;&#1090;&#1100;&#1080; &#1103;&#1074;&#1083;&#1103;&#1077;&#1090;&#1089;&#1103; &#1086;&#1079;&#1085;&#1072;&#1082;&#1086;&#1084;&#1083;&#1077;&#1085;&#1080;&#1077; &#1089; &#1086;&#1089;&#1085;&#1086;&#1074;&#1085;&#1099;&#1084;&#1080; &#1087;&#1088;&#1080;&#1077;&#1084;&#1072;&#1084;&#1080; &#1087;&#1086; &#1091;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1082;&#1077;,
-&#1082;&#1086;&#1085;&#1092;&#1080;&#1075;&#1091;&#1088;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1102; &#1080; &#1086;&#1073;&#1091;&#1095;&#1077;&#1085;&#1080;&#1102; rspamd,
-&#1072; &#1090;&#1072;&#1082;&#1078;&#1077; &#1086;&#1087;&#1080;&#1089;&#1072;&#1085;&#1080;&#1077; &#1087;&#1088;&#1077;&#1080;&#1084;&#1091;&#1097;&#1077;&#1089;&#1090;&#1074; rspamd &#1087;&#1086; &#1089;&#1088;&#1072;&#1074;&#1085;&#1077;&#1085;&#1080;&#1102; &#1089; SA.
-&#1045;&#1089;&#1083;&#1080; &#1085;&#1072; &#1083;&#1102;&#1073;&#1086;&#1084; &#1101;&#1090;&#1072;&#1087;&#1077; &#1088;&#1072;&#1073;&#1086;&#1090;&#1099; &#1089; rspamd &#1091; &#1074;&#1072;&#1089; &#1074;&#1086;&#1079;&#1085;&#1080;&#1082;&#1072;&#1077;&#1090; &#1087;&#1088;&#1086;&#1073;&#1083;&#1077;&#1084;&#1072;,
-&#1090;&#1086; &#1084;&#1086;&#1078;&#1085;&#1086; &#1086; &#1085;&#1077;&#1081; &#1089;&#1086;&#1086;&#1073;&#1097;&#1080;&#1090;&#1100; &#1084;&#1085;&#1077;: <b>vsevolod@highsecure.ru</b> &#1080;&#1083;&#1080; &#1078;&#1077; &#1074; &#1089;&#1087;&#1080;&#1089;&#1086;&#1082; &#1088;&#1072;&#1089;&#1089;&#1099;&#1083;&#1082;&#1080; rspamd &#1085;&#1072; sourceforge (&#1072;&#1085;&#1075;&#1083;&#1086;&#1075;&#1086;&#1074;&#1086;&#1088;&#1103;&#1097;&#1080;&#1081;): <b>rspamd-devel@lists.sourceforge.net</b>.
-&#1057;&#1072;&#1084;&#1072; &#1089;&#1080;&#1089;&#1090;&#1077;&#1084;&#1072; rspamd &#1085;&#1072;&#1093;&#1086;&#1076;&#1080;&#1090;&#1089;&#1103; &#1074; &#1089;&#1086;&#1089;&#1090;&#1086;&#1103;&#1085;&#1080;&#1080; &#1073;&#1077;&#1090;&#1072;-&#1074;&#1077;&#1088;&#1089;&#1080;&#1080;,
-&#1087;&#1086;&#1101;&#1090;&#1086;&#1084;&#1091; &#1074;&#1072;&#1096;&#1072; &#1087;&#1086;&#1084;&#1086;&#1097;&#1100; &#1074; &#1090;&#1077;&#1089;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1080; &#1080; &#1079;&#1072;&#1087;&#1088;&#1086;&#1089;&#1099; &#1092;&#1091;&#1085;&#1082;&#1094;&#1080;&#1086;&#1085;&#1072;&#1083;&#1100;&#1085;&#1086;&#1089;&#1090;&#1080; &#1073;&#1091;&#1076;&#1091;&#1090; &#1085;&#1077;&#1086;&#1094;&#1077;&#1085;&#1080;&#1084;&#1099; &#1074; &#1088;&#1072;&#1079;&#1074;&#1080;&#1090;&#1080;&#1080; rspamd.</p>
-
-<!-- end doc -->
-
-</body></html>
diff --git a/doc/why-rspamd.pod b/doc/why-rspamd.pod
deleted file mode 100644
index 0b2c71cb8..000000000
--- a/doc/why-rspamd.pod
+++ /dev/null
@@ -1,333 +0,0 @@
-=encoding utf8
-
-=head1 Фильтрация спама при помощи системы rspamd.
-
-=head2 1. История и предпосылки создания.
-
-Мы долгое время использовали для фильтрации спама spamassassin, однако, при
-наших объемах почтового трафика (9-10 миллионов писем в сутки) spamassassin
-не обеспечивал достаточной производительности. После анализа исходного кода и
-принципов работы было выявлены следующие "врожденные" проблемы SA:
-
-=over
-
-=item *
-обработка письма осуществляется набором регулярных выражений, однако,
-количество этих выражений слишком велико и является ключевым моментом
-задумчивости SA (например, для извлечения received заголовков письма, SA
-проверяет оные на соответствие всем ему известным MTA, очевидно, что такое
-действие не является оптимальным);
-
-=item *
-нет возможности явно получить ip адрес, с которого нам отправили письмо (в SA
-это делается парсом received заголовков, что я лично не считаю правильным, а тем
-более оптимальным способом, так как MTA всегда знает, откуда ему пришло данное
-письмо)
-
-=item *
-нет возможности передачи спам фильтру данных SMTP диалога
-
-=item *
-MIME парсинг писем очень медленный, так как опять же сделан на базе регулярных
-выражений
-
-=back
-
-В итоге можно сказать, что основная проблема SA - это излишняя увлеченность
-авторов регулярными выражениями и отсутствие оптимизации. В итоге, в качестве
-базовых принципов создания rspamd были принципы оптимизации времени обработки
-писем, в числе которых:
-
-=over
-
-=item *
-полностью асинхронная работа с сетью (на базе libevent), в том числе DNS запросы
-и работа с http
-
-=item *
-быстрые механизмы выделения памяти
-
-=item *
-компиляция всех регулярных выражений и вызов только тех из них, которые наиболее
-возможны (то есть, имеется механизм ведения статистики срабатывания различных
-правил, и при обработке следующего письма учитывается обработка предыдущих, что
-позволяет максимально быстро провести основные тесты)
-
-=item *
-расширяемая архитектура: возможность написания плагинов на си, lua, возможность
-добавления новых типов фильтров, расширений протокола rspamc, возможность
-добавления новых типов статистических алгоритмов, алгоритмов нормализации и
-парсинга текстов
-
-=item *
-возможность динамической загрузки различных настроек, списков ip адресов и
-прочей информации через HTTP протокол с поддержкой даты модификации таких
-списков
-
-=item *
-использование везде, где возможно, специализированных конечных автоматов для
-разбора и анализа текстов
-
-=item *
-использование быстрого mime парсера gmime
-
-=back
-
-В результате перехода с SA на rspamd последний показал в среднем в 10 раз более
-быструю обработку сообщений. В данный момент rspamd имеет статус бета версии, но
-вполне пригоден для работы.
-
-=head2 2. Установка и настройка rspamd
-
-Для сборки rspamd вам потребуются:
-
-=over
-
-=item * libevent
-L<http://www.monkey.org/~provos/libevent/> - библиотека для асинхронной
-обработки событий
-
-=item * glib
-L<http://library.gnome.org/devel/glib/> - библиотека общего назначения,
-содержащая многие вещи, о которых разработчики libc, увы, забыли (glib не
-является графической библиотекой, хотя и используется, например, gtk)
-
-=item * gmime
-L<http://spruce.sourceforge.net/gmime/> - MIME парсер на базе библиотеки glib
-
-=item * lua
-L<http://www.lua.org/> - встраиваемый скриптовый язык (в принципе, наличие lua
-необязательно, но без lua многий функционал rspamd останется нереализованным)
-
-=item * perl
-L<http://www.perl.org/> - на перле написан, например, консольный клиент rspamc,
-распознаватель редиректов в URL'ях, поэтому наличие перла в системе крайне
-желательно
-
-=item * cmake
-L<http://www.cmake.org/> - система сборки, которая позволяет rspamd собираться
-(по крайней мере, в теории) на всех Posix совместимых системах. Использовать
-стандартные в данной ситуации autotools я не стал, так как считаю их самой
-неудобной в использовании системой сборки исходников, которую можно только
-придумать.
-
-=item * mercurial
-L<http://mercurial.selenic.com/> - система управления версиями (SCM),
-используемая для разработки rspamd. Так как в настоящее время rspamd находится в
-состоянии бета-версии, то релизы выходят нечасто и зачастую являются менее
-стабильными, чем текущая версия в репозитории, поэтому для установки rspamd
-лучше использовать версию непосредственно из репозитория.
-
-=back
-
-После установки всех требуемых программ и библиотек можно приступить
-непосредственно к установке rspamd.
-
-=over
-
-=item 1
-скачиваем текущее состояние репозитория: $ hg clone http://rspamd.hg.sourceforge.net:8000/hgroot/rspamd/rspamd
-
-=item 2
-конфигурируем rspamd: $ cd rspamd && cmake .
-(при необходимости изменить параметры можно вначале воспользоваться командой
-ccmake .)
-
-=item 3
-собираем: $ make
-
-=item 4
-устанавливаем: # make install
-
-=back
-
-=head3 Конфигурирование
-
-В процессе установки ставятся конфигурационные файлы по умолчанию в каталог
-{PREFIX}/etc. При этом, в каталог etc/rspamd устанавливаются правила по
-умолчанию (headers, html, drugs, loto и.т.п.), а в каталог
-etc/rspamd.conf.sample устанавливается конфигурационный файл по умолчанию. Его
-можно скопировать в файл etc/rspamd.conf и отредактировать в соответствии с
-собственными предпочтениями. Конфигурационный файл по умолчанию снабжен
-комментариями к каждой директиве, а также подробно описан в документации к
-rspamd, находящейся в каталоге исходников doc/rspamd.pdf. В данном же
-руководстве подробно изложен принцип работы rspamd и настройки всех модулей
-системы. Для базовой работы достаточно исправить пути к файлам логов, пидфайлу,
-а также обратить внимание на разделы factors и classifiers. Остановлюсь на этом
-несколько подробнее.
-
-Все директивы rspamd имеют формат param = value; где символ ';' является
-признаком окончания директивы. Также файл разбит на секции, каждая секция имеет
-имя (например worker {}) и внутренние директвы внутри фигурных скобок. После
-каждой секции также обязателен символ ';'. Также каждый модуль имеет особый
-формат секции:
-
-=begin html
-
-<pre>
-.module 'name' {
- param = value;
-};
-</pre>
-
-=end html
-
-Все это может показаться сложным на первый взгляд, но это позволяет лучше
-структурировать файл и облегчает расширяемость rspamd. Для первоначальной
-настройки достаточно обратить внимание на раздел factors, который описывает веса
-различных правил, раздел metric, который описывает максимальный вес, чтобы
-письмо считалось спамом, а также на раздел classifiers. Раздел classifiers
-обеспечивает работу статистических алгоритмов. В rspamd в настоящее время
-реализован алгоритм winnow, который работает следующим образом:
-
-=over
-
-=item 1
-текст разбивается на слова, также выделяется окно в пять слов
-
-=item 2
-окно перемещается по словам, при этом выделяются словосочетания по определенному
-алгоритму и вычисляется их хеш
-
-=item 3
-каждый полученный таким образом хеш проверяется в файле статистики, в котором
-хранятся хеши и их веса, если хеш найден, то его вес добавляется к суммарному
-весу данного файла
-
-=item 4
-файл, набравший в сумме больше веса считается классом письма
-
-=back
-
-Основная идея такого подхода в определении по словосочетаниям, к какому классу
-принадлежит данное письмо. В SA для этой цели используется вероятностный
-алгоритм bayes, который достаточно похож на вышеописанный, но считает не веса, а
-вероятности. Эффективность каждого из алгоритмов примерно одинакова и зависит в
-основном от эффективности обучения. Однако, в отличие от SA, rspamd использует
-не отдельные слова, а словосочетания, что повышает его эффективность. В секции
-classifiers можно установить различные классы писем, а далее в секции factors
-указать их вес (задав, например, для заведомо безвредных писем - ham -
-отрицательный вес). Размер файлов статистики должен быть разумно большим для
-хранения как можно большего числа хешей. Однако, необходимо учитывать, что эти
-файлы целиком загружаются в память (хотя, реализация отображения файла в памяти
-в различных ОС допускает загрузку и выгрузку страниц этого файла в своп системы,
-но эффективность этого довольно низка), поэтому необходимо соизмерять размер
-оперативной памяти и файлов статистики.
-
-=head2 4. Подключение и проверка работоспособности rspamd
-
-Для проверки работы системы rspamd проще всего воспользоваться командой rspamc:
-
-=begin html
-
-<pre>
-hostname:~> rspamc stat
-Do rspamc command stat
-Messages scanned: 1234040
-Messages learned: 59151
-Connections count: 1176623
-Control connections count: 59152
-Pools allocated: 2530714
-Pools freed: 2530699
-Bytes allocated: 66991793394
-Memory chunks allocated: 6453232
-Shared chunks allocated: 3
-Chunks freed: 6453090
-Oversized chunks: 468849
-Statfile: WINNOW_HAM (version 69); length: 100.0 MB; free blocks: 4563488; total blocks: 6553581; free: 69.63%
-Statfile: WINNOW_SPAM (version 36383); length: 100.0 MB; free blocks: 760504; total blocks: 6553581; free: 11.60%
-</pre>
-
-=end html
-
-В данном случае выводится общая статистика. Такого же эффекта можно достигнуть
-командой telnet на порт процесса controller (он описан в конфигурационном файле
-в секции worker, type у которого controller). По умолчанию это порт 11334 на
-адресе 127.0.0.1. Работу правил и статистики можно также проверить по команде
-rspamc:
-
-=begin html
-
-<pre>
-~> rspamc symbols /tmp/mailman.eml
-Processing /tmp/mailman.eml
-Process file: /tmp/mailman.eml
-Sending 4950 bytes...
-RSPAMD/1.1 0 OK
-Metric: default; False; -3.35 / 10.00 / 0.00
-Symbol: WINNOW_HAM; 5.00
-Symbol: RECEIVED_RBL; pbl.spamhaus.org,insecure-bl.rambler.ru
-Urls:
-</pre>
-
-=end html
-
-В данном случае показываются баллы, набранные письмом, а также дополнительная
-информация. Подробнее о протоколе rspamc в документации (doc/rspamd.pdf). Для
-подключения rspamd к MTA лучше всего использовать milter, если ваш MTA postfix
-или sendmail. В качестве milter'а можно использовать, например, rmilter:
-L<https://www.milter.org/milter/71/>. О настройке postfix + rmilter мной была
-написана следующая заметка: L<http://cebka.pp.ru/blog/2009/02/-nginxpostfixrmilter.html>
-Для MTA exim можно воспользоваться файлом local_scan.c в каталоге contrib/exim.
-Инструкции по его установке описаны в самом файле, однако, это требует
-пересборки MTA. Также rspamd "понимает" протокол SA, поэтому для подключения
-rspamd можно использовать те же средства, что и для подключения к MTA SA.
-
-Подробнее о командах rspamc и протоколе rspamc написано опять же в документации.
-
-=head2 5. Обучение rspamd
-
-Процесс обучения важен для корректной работы статистики. Для обучения
-используется команда rspamc learn. Для указания файла (класса) письма
-используется ключ -s. Пример использования:
-
-=begin html
-
-<pre>
-~> rspamc -s WINNOW_HAM learn /tmp/mailman.eml
-Processing /tmp/mailman.eml
-Process file: /tmp/mailman.eml
-Do rspamc command learn
-Sending 4950 bytes...
-Learn succeed. Sum weight: 128.48
-</pre>
-
-=end html
-
-В качестве параметров можно указывать несколько файлов, целые каталоги, а также
-imap папки:
-
-=begin html
-
-<pre>
-~> rspamc -s WINNOW_SPAM learn imaps:user:cebka:password::host:somehost.rambler.ru:mbox:abuse.spam
-Processing imaps:user:cebka:password::host:mailsupport.rambler.ru:mbox:abuse.spam
-Enter IMAP password:
-Process imap: host: somehost.rambler.ru, mbox: abuse.spam
-Do rspamc command learn
-Sending 382650 bytes...
-Learn succeed. Sum weight: 1850.24
-<skipped>
-</pre>
-
-=end html
-
-При обучении необходимо учитывать, чтобы количество spam и ham писем было
-примерно равным. Вес показывает суммарный вес словосочетаний текста, который был
-до обучения данным письмом (то есть, то, насколько велика вероятность
-принадлежности данного письма к этому классу). При обнаружении неверных
-срабатываний статистики можно несколько раз применить learn к заданному письму,
-проверяя его суммарный вес.
-
-=head2 6. Поддержка и дальнейшие действия
-
-Если вы решили использовать rspamd для обработки вашей почты, то лучшим
-источником информации будет являться документация к rspamd, а также примеры lua
-плагинов: etc/plugins/lua. Целью же данной статьи является ознакомление с
-основными приемами по установке, конфигурированию и обучению rspamd, а также
-описание преимуществ rspamd по сравнению с SA. Если на любом этапе работы с
-rspamd у вас возникает проблема, то можно о ней сообщить мне:
-B<vsevolod@highsecure.ru> или же в список рассылки rspamd на sourceforge
-(англоговорящий): B<rspamd-devel@lists.sourceforge.net>. Сама система
-rspamd находится в состоянии бета-версии, поэтому ваша помощь в тестировании и
-запросы функциональности будут неоценимы в развитии rspamd.
diff --git a/doc/why-rspamd.txt b/doc/why-rspamd.txt
deleted file mode 100644
index dd0b09637..000000000
--- a/doc/why-rspamd.txt
+++ /dev/null
@@ -1,240 +0,0 @@
-Фильтрация спама при помощи системы rspamd.
- 1. История и предпосылки создания.
- Мы долгое время использовали для фильтрации спама spamassassin, однако, при
- наших объемах почтового трафика (9-10 миллионов писем в сутки) spamassassin
- не обеспечивал достаточной производительности. После анализа исходного кода
- и принципов работы было выявлены следующие "врожденные" проблемы SA:
-
- * обработка письма осуществляется набором регулярных выражений, однако,
- количество этих выражений слишком велико и является ключевым моментом
- задумчивости SA (например, для извлечения received заголовков письма, SA
- проверяет оные на соответствие всем ему известным MTA, очевидно, что
- такое действие не является оптимальным);
-
- * нет возможности явно получить ip адрес, с которого нам отправили письмо
- (в SA это делается парсом received заголовков, что я лично не считаю
- правильным, а тем более оптимальным способом, так как MTA всегда знает,
- откуда ему пришло данное письмо)
-
- * нет возможности передачи спам фильтру данных SMTP диалога
-
- * MIME парсинг писем очень медленный, так как опять же сделан на базе
- регулярных выражений
-
- В итоге можно сказать, что основная проблема SA - это излишняя увлеченность
- авторов регулярными выражениями и отсутствие оптимизации. В итоге, в
- качестве базовых принципов создания rspamd были принципы оптимизации времени
- обработки писем, в числе которых:
-
- * полностью асинхронная работа с сетью (на базе libevent), в том числе DNS
- запросы и работа с http
-
- * быстрые механизмы выделения памяти
-
- * компиляция всех регулярных выражений и вызов только тех из них, которые
- наиболее возможны (то есть, имеется механизм ведения статистики
- срабатывания различных правил, и при обработке следующего письма
- учитывается обработка предыдущих, что позволяет максимально быстро
- провести основные тесты)
-
- * расширяемая архитектура: возможность написания плагинов на си, lua,
- возможность добавления новых типов фильтров, расширений протокола
- rspamc, возможность добавления новых типов статистических алгоритмов,
- алгоритмов нормализации и парсинга текстов
-
- * возможность динамической загрузки различных настроек, списков ip адресов
- и прочей информации через HTTP протокол с поддержкой даты модификации
- таких списков
-
- * использование везде, где возможно, специализированных конечных автоматов
- для разбора и анализа текстов
-
- * использование быстрого mime парсера gmime
-
- В результате перехода с SA на rspamd последний показал в среднем в 10 раз
- более быструю обработку сообщений. В данный момент rspamd имеет статус бета
- версии, но вполне пригоден для работы.
-
- 2. Установка и настройка rspamd
- Для сборки rspamd вам потребуются:
-
- libevent <http://www.monkey.org/~provos/libevent/> - библиотека для
- асинхронной обработки событий
- glib <http://library.gnome.org/devel/glib/> - библиотека общего назначения,
- содержащая многие вещи, о которых разработчики libc, увы, забыли (glib не
- является графической библиотекой, хотя и используется, например, gtk)
- gmime <http://spruce.sourceforge.net/gmime/> - MIME парсер на базе
- библиотеки glib
- lua <http://www.lua.org/> - встраиваемый скриптовый язык (в принципе,
- наличие lua необязательно, но без lua многий функционал rspamd останется
- нереализованным)
- perl <http://www.perl.org/> - на перле написан, например, консольный клиент
- rspamc, распознаватель редиректов в URL'ях, поэтому наличие перла в системе
- крайне желательно
- cmake <http://www.cmake.org/> - система сборки, которая позволяет rspamd
- собираться (по крайней мере, в теории) на всех Posix совместимых системах.
- Использовать стандартные в данной ситуации autotools я не стал, так как
- считаю их самой неудобной в использовании системой сборки исходников,
- которую можно только придумать.
- mercurial <http://mercurial.selenic.com/> - система управления версиями
- (SCM), используемая для разработки rspamd. Так как в настоящее время rspamd
- находится в состоянии бета-версии, то релизы выходят нечасто и зачастую
- являются менее стабильными, чем текущая версия в репозитории, поэтому для
- установки rspamd лучше использовать версию непосредственно из репозитория.
-
- После установки всех требуемых программ и библиотек можно приступить
- непосредственно к установке rspamd.
-
- 1) скачиваем текущее состояние репозитория: $ hg clone
- http://rspamd.hg.sourceforge.net:8000/hgroot/rspamd/rspamd
- 2) конфигурируем rspamd: $ cd rspamd && cmake . (при необходимости изменить
- параметры можно вначале воспользоваться командой ccmake .)
- 3) собираем: $ make
- 4) устанавливаем: # make install
-
- Конфигурирование
- В процессе установки ставятся конфигурационные файлы по умолчанию в каталог
- {PREFIX}/etc. При этом, в каталог etc/rspamd устанавливаются правила по
- умолчанию (headers, html, drugs, loto и.т.п.), а в каталог
- etc/rspamd.conf.sample устанавливается конфигурационный файл по умолчанию.
- Его можно скопировать в файл etc/rspamd.conf и отредактировать в
- соответствии с собственными предпочтениями. Конфигурационный файл по
- умолчанию снабжен комментариями к каждой директиве, а также подробно описан
- в документации к rspamd, находящейся в каталоге исходников doc/rspamd.pdf. В
- данном же руководстве подробно изложен принцип работы rspamd и настройки
- всех модулей системы. Для базовой работы достаточно исправить пути к файлам
- логов, пидфайлу, а также обратить внимание на разделы factors и classifiers.
- Остановлюсь на этом несколько подробнее.
-
- Все директивы rspamd имеют формат param = value; где символ ';' является
- признаком окончания директивы. Также файл разбит на секции, каждая секция
- имеет имя (например worker {}) и внутренние директвы внутри фигурных скобок.
- После каждой секции также обязателен символ ';'. Также каждый модуль имеет
- особый формат секции:
-
-.module 'name' {
- param = value;
-};
- Все это может показаться сложным на первый взгляд, но это позволяет лучше
- структурировать файл и облегчает расширяемость rspamd. Для первоначальной
- настройки достаточно обратить внимание на раздел factors, который описывает
- веса различных правил, раздел metric, который описывает максимальный вес,
- чтобы письмо считалось спамом, а также на раздел classifiers. Раздел
- classifiers обеспечивает работу статистических алгоритмов. В rspamd в
- настоящее время реализован алгоритм winnow, который работает следующим
- образом:
-
- 1) текст разбивается на слова, также выделяется окно в пять слов
- 2) окно перемещается по словам, при этом выделяются словосочетания по
- определенному алгоритму и вычисляется их хеш
- 3) каждый полученный таким образом хеш проверяется в файле статистики, в
- котором хранятся хеши и их веса, если хеш найден, то его вес добавляется к
- суммарному весу данного файла
- 4) файл, набравший в сумме больше веса считается классом письма
-
- Основная идея такого подхода в определении по словосочетаниям, к какому
- классу принадлежит данное письмо. В SA для этой цели используется
- вероятностный алгоритм bayes, который достаточно похож на вышеописанный, но
- считает не веса, а вероятности. Эффективность каждого из алгоритмов примерно
- одинакова и зависит в основном от эффективности обучения. Однако, в отличие
- от SA, rspamd использует не отдельные слова, а словосочетания, что повышает
- его эффективность. В секции classifiers можно установить различные классы
- писем, а далее в секции factors указать их вес (задав, например, для
- заведомо безвредных писем - ham - отрицательный вес). Размер файлов
- статистики должен быть разумно большим для хранения как можно большего числа
- хешей. Однако, необходимо учитывать, что эти файлы целиком загружаются в
- память (хотя, реализация отображения файла в памяти в различных ОС допускает
- загрузку и выгрузку страниц этого файла в своп системы, но эффективность
- этого довольно низка), поэтому необходимо соизмерять размер оперативной
- памяти и файлов статистики.
-
- 4. Подключение и проверка работоспособности rspamd
- Для проверки работы системы rspamd проще всего воспользоваться командой
- rspamc:
-
-hostname:~> rspamc stat
-Do rspamc command stat
-Messages scanned: 1234040
-Messages learned: 59151
-Connections count: 1176623
-Control connections count: 59152
-Pools allocated: 2530714
-Pools freed: 2530699
-Bytes allocated: 66991793394
-Memory chunks allocated: 6453232
-Shared chunks allocated: 3
-Chunks freed: 6453090
-Oversized chunks: 468849
-Statfile: WINNOW_HAM (version 69); length: 100.0 MB; free blocks: 4563488; total blocks: 6553581; free: 69.63%
-Statfile: WINNOW_SPAM (version 36383); length: 100.0 MB; free blocks: 760504; total blocks: 6553581; free: 11.60%
- В данном случае выводится общая статистика. Такого же эффекта можно
- достигнуть командой telnet на порт процесса controller (он описан в
- конфигурационном файле в секции worker, type у которого controller). По
- умолчанию это порт 11334 на адресе 127.0.0.1. Работу правил и статистики
- можно также проверить по команде rspamc:
-
-~> rspamc symbols /tmp/mailman.eml
-Processing /tmp/mailman.eml
-Process file: /tmp/mailman.eml
-Sending 4950 bytes...
-RSPAMD/1.1 0 OK
-Metric: default; False; -3.35 / 10.00 / 0.00
-Symbol: WINNOW_HAM; 5.00
-Symbol: RECEIVED_RBL; pbl.spamhaus.org,insecure-bl.rambler.ru
-Urls:
- В данном случае показываются баллы, набранные письмом, а также
- дополнительная информация. Подробнее о протоколе rspamc в документации
- (doc/rspamd.pdf). Для подключения rspamd к MTA лучше всего использовать
- milter, если ваш MTA postfix или sendmail. В качестве milter'а можно
- использовать, например, rmilter: <https://www.milter.org/milter/71/>. О
- настройке postfix + rmilter мной была написана следующая заметка:
- <http://cebka.pp.ru/blog/2009/02/-nginxpostfixrmilter.html> Для MTA exim
- можно воспользоваться файлом local_scan.c в каталоге contrib/exim.
- Инструкции по его установке описаны в самом файле, однако, это требует
- пересборки MTA. Также rspamd "понимает" протокол SA, поэтому для подключения
- rspamd можно использовать те же средства, что и для подключения к MTA SA.
-
- Подробнее о командах rspamc и протоколе rspamc написано опять же в
- документации.
-
- 5. Обучение rspamd
- Процесс обучения важен для корректной работы статистики. Для обучения
- используется команда rspamc learn. Для указания файла (класса) письма
- используется ключ -s. Пример использования:
-
-~> rspamc -s WINNOW_HAM learn /tmp/mailman.eml
-Processing /tmp/mailman.eml
-Process file: /tmp/mailman.eml
-Do rspamc command learn
-Sending 4950 bytes...
-Learn succeed. Sum weight: 128.48
- В качестве параметров можно указывать несколько файлов, целые каталоги, а
- также imap папки:
-
-~> rspamc -s WINNOW_SPAM learn imaps:user:cebka:password::host:somehost.rambler.ru:mbox:abuse.spam
-Processing imaps:user:cebka:password::host:mailsupport.rambler.ru:mbox:abuse.spam
-Enter IMAP password:
-Process imap: host: somehost.rambler.ru, mbox: abuse.spam
-Do rspamc command learn
-Sending 382650 bytes...
-Learn succeed. Sum weight: 1850.24
-<skipped>
- При обучении необходимо учитывать, чтобы количество spam и ham писем было
- примерно равным. Вес показывает суммарный вес словосочетаний текста, который
- был до обучения данным письмом (то есть, то, насколько велика вероятность
- принадлежности данного письма к этому классу). При обнаружении неверных
- срабатываний статистики можно несколько раз применить learn к заданному
- письму, проверяя его суммарный вес.
-
- 6. Поддержка и дальнейшие действия
- Если вы решили использовать rspamd для обработки вашей почты, то лучшим
- источником информации будет являться документация к rspamd, а также примеры
- lua плагинов: etc/plugins/lua. Целью же данной статьи является ознакомление
- с основными приемами по установке, конфигурированию и обучению rspamd, а
- также описание преимуществ rspamd по сравнению с SA. Если на любом этапе
- работы с rspamd у вас возникает проблема, то можно о ней сообщить мне:
- <mailto:vsevolod@highsecure.ru> или же в список рассылки rspamd на
- sourceforge (англоговорящий): <mailto:rspamd-devel@lists.sourceforge.net>.
- Сама система rspamd находится в состоянии бета-версии, поэтому ваша помощь в
- тестировании и запросы функциональности будут неоценимы в развитии rspamd.
-