% -*- mode: LaTeX; coding: koi8-r -*-
% $Id: rm_serve_cfg.tex,v 1.36 2004/04/29 04:12:21 cher Exp $
% Copyright (C) 2003,2004 Alexander Chernov <cher@unicorn.cmc.msu.ru>

\section{Конфигурационный файл сервера турнира \V{serve.cfg}}
\hypertarget{F:serve.cfg}{}

В данной главе описывается формат конфигурационного файла сервера
турнира. Он используется программами
\hyperlink{P:serve}{\S{serve}},
\hyperlink{P:compile}{\S{compile}},
\hyperlink{P:run}{\S{run}}.

\subsection{Общая структура}

Конфигурационный файл \V{serve.cfg} представляет собой текстовый файл
в формате, похожем на формат \V{.ini}-файлов. Комментарии в
конфигурационном файле начинаются с символа \V{\#} или \V{;} и
продолжаются до конца строки. Использование символа начала комментария
\V{\#} не рекомендуется, если конфигурационный файл предполагается
препроцессировать перед чтением (см. ключ \V{-E} программ
\hyperlink{P:serve}{\S{serve}},
\hyperlink{P:compile}{\S{compile}},
\hyperlink{P:run}{\S{run}}). В этом случае начало комментария,
например
{\small
\begin{verbatim}
# include some more information
\end{verbatim}
}
может совпасть с какой-либо директивой препроцессора Си\footnote{%
Судя по всему, использование препроцессора --- не очень удачная
возможность. Текущая версия системы \S{ejudge} позволяет в большинстве
случаев не использовать препроцессор.
}.
Кроме того, в конфигурационном файле игнорируются пустые строки.

Конфигурационный файл разбивается на секции. Каждая секция начинается
со строки вида
{\small
\begin{verbatim}
[SECTION_NAME]
\end{verbatim}
}
где \V{SECTION\_NAME} --- имя секции, например \V{problem}. В начале
конфигурационного файла находится секция глобальных параметров,
которая не имеет заголовка.

Каждый конфигурационный параметр задаётся в отдельной строке в одной
из следующих форм.

{\small
\begin{verbatim}
NAME = VALUE
\end{verbatim}
}
Перед именем конфигурационной переменной, перед и после знака
равенства и после значения параметра может находиться произвольное
число пробельных символов. Имя переменной \V{NAME} состоит из
латинских заглавных и строчных букв, цифр, знака
подчёркивания. Значение \V{VALUE} состоит из произвольных непробельных
символов. Данная форма задания конфигурационных переменных может
использоваться, когда значение переменной не содержит пробельных символов.

{\small
\begin{verbatim}
NAME = "VALUE"
\end{verbatim}
}
Перед именем конфигурационной переменной, вокруг знака равенства и
после закрывающей кавычки может находиться произвольное количество
пробельных символов.  Имя переменной \V{NAME} состоит из латинских
заглавных и строчных букв, цифр, знака подчёркивания. Значение
конфигурационной переменной \V{VALUE} может содержать произвольные
символы (включая пробельные) кроме символа двойной кавычки. Данная
форма задания конфигурационной переменной может использоваться, если
значение переменной содержит пробельные символы, но не содержит
кавычек.

{\small
\begin{verbatim}
NAME
\end{verbatim}
}
Перед именем конфигурационной переменной и после него может находиться
произвольное количество пробельных символов. Данная форма задания
параметра эквивалента форме
{\small
\begin{verbatim}
NAME = 1
\end{verbatim}
}

Конфигурационный файл \V{serve.cfg} состоит из глобальной секции, в
которой задаются значения глобальных конфигурационных параметров,
одной или нескольких секций описания задач \V{problem}, одной или
нескольких секций описания поддерживаемых языков программирования
\V{language} и одной или нескольких секций описания процедуры
тестирования решений \V{tester}.

\subsection{Форматные подстановки}
\hypertarget{F:serve.cfg,S:format_substitutions}{}
\label{sectionFormatSubstitutions}

Некоторые конфигурационные переменные определяют не
непосредственно значения, используемые при работе сервера
турнира, а \I{шаблоны} значений. Например, конфигурационная
переменная
\hyperlink{F:serve.cfg,T:team_info_url}{\V{team\_info\_url}}
определяет шаблон URL, который используется при генерации строки
таблицы результатов для каждой команды. Этот URL содержит ссылку
на страницу с подробной информацией о соответствующем
участнике. Поскольку URL зависит от некоторых атрибутов
участника (например, от его идентификатора), шаблон URL перед
использованием должен быть подвергнут преобразованию.

Другой случай, когда выполняется подстановка шаблонов, возникает
при наследовании свойств задачи или тестера от абстрактной
задачи или тестера соответственно. Например, конфигурационная
переменная
\hyperlink{F:serve.cfg,T:input\_name}{\V{input\_name}} описания
задачи задаёт имя файла с входными данными для решения
задачи. Это имя файла может быть как фиксированным (например,
\V{input.txt}), так и зависеть от имени задачи (например,
\V{a.in}, \V{b.in} и т. д.). В последнем случае в описании
абстрактной задачи удобно указать шаблон имени входного файла,
который автоматически будет раскрыт при наследовании свойств
абстрактной задачи конкретной задачей.

В обоих случаях в необходимый момент выполняются
\I{форматные подстановки}, которые описываются ниже. Аргументами
форматной подстановки являются: форматная строка, определяющая
выполняемые подстановки; информация о текущей задаче (если
доступна); информация о текущей команде (если доступна);
информация о текущем тестере (если доступна). Результат
форматной подстановки записывается в выходную строку.

Форматная строка состоит из символов, копируемых в выходную
строку без изменений, и спецификаций форматного
преобразования. Спецификация форматного преобразования
начинается со знака <<процент>> (\V{\%}) и имеет следующий вид:
{\small
\begin{verbatim}
%[<флаги>][<ширина>][.<точность>]<спецификатор>
\end{verbatim}
}
Здесь в квадратных скобках записаны необязательные элементы
спецификации.

Элемент \V{<флаги>} позволяет использовать дополнительные
возможности преобразования. Элемент \V{<флаги>} --- это
последовательность односимвольных флагов, перечисленных в
таблице \ref{tableFormatSpecificationFlags}. Если в одной
спецификации форматного преобразования указаны конфликтующие
флаги (например, \V{l} и \V{u}), действует флаг, указанный
последним.

\begin{table}[htp]
\begin{center}
\begin{tabular}{|l|p{13cm}|}
\hline
\V{e} &
  Если форматное преобразование даёт пустую строку, она
  заменяется на строку \V{\&nbsp;}. Этот флаг может
  использоваться для генерации содержимого ячеек html-таблиц.\\
\V{u} &
  Преобразовать строку, полученную в результате форматного
  преобразования, к верхнему регистру. Например, если короткое
  имя (\V{short\_name}) задач в турнире имеет вид \V{a}, \V{b} и
  т. д., а URL, по которому находятся их условия, имеет вид
  \V{A.html} и т. д., то флаг \V{u} вместе с преобразованием
  \V{Ps} (то есть спецификация форматного преобразования
  \V{\%uPs}) даст необходимый результат.\\
\V{l} &
  Преобразовать строку, полученную в результате форматного
  преобразования, к нижнему регистру. Например, если короткое
  имя задачи (\V{short\_name}) задач в турнире имеет вид \V{A},
  \V{B} и т. д., а имя входного файла --- \V{a.in} и т. д., то
  спецификация форматного преобразования \V{\%lPs} даст
  необходимый результат.\\
\V{r} &
  Выровнять строку, полученную в результате форматного
  преобразования, по правому краю, дополняя её слева пробелами
  при необходимости.\\
\V{0} &
  Выровнять строку, полученную в результате форматного
  преобразования, по правому краю, дополняя её слева необходимым
  количеством нулей.\\
\V{c} &
  Выровнять строку, полученную в результате форматного
  преобразования, по центру, дополняя её слева и справа
  пробелами при необходимости.\\
\hline
\end{tabular}
\end{center}
\caption{Флаги спецификации форматного преобразования}
\label{tableFormatSpecificationFlags}
\end{table}

Элемент \V{<ширина>} задаёт \I{минимальную} ширину поля. Элемент
представляет собой последовательность цифр, формирующих целое
число в десятичной записи. Данный элемент работает аналогично
элементу, задающему ширину в форматном преобразовании в функциях
семейства \V{printf} языка \S{Си}. Если не указаны флаги \V{r},
\V{0} или \V{c}, форматная строка, полученная в результате
форматного преобразования, выравнивается по левому краю. Если
длина строки, полученной в результате форматного преобразования
и отсечения по максимальной длине, задаваемого элементом
\V{<точность>}, меньше указанной в элементе \V{<ширина>}, строка
дополняется справа необходимым количеством пробелов. Если указан
какой-либо из флагов \V{r}, \V{0} или \V{c}, и длина строки,
полученной в результате форматного преобразования и отсечения по
максимальной длине, задаваемого элементом \V{<точность>}, меньше
указанной в элементе \V{<ширина>}, строка выравнивается согласно
указанному флагу. Если длина строки, полученной в результате
форматного преобразования и отсечения по максимальной длине,
задаваемого элементом \V{<точность>}, больше указанной в
элементе \V{<ширина>}, никакого выравнивания не происходит. Если
элемент \V{<ширина>} не указан, его значение подразумевается
равным нулю.

Элемент \V{<точность>} задаёт \I{максимальную} длину строки,
получаемой в результате раскрытия спецификатора форматного
преобразования. Элемент представляет собой последовательность цифр,
формирующих целое число в десятичной записи. Данный элемент работает
аналогично элементу, задающему точность в форматном преобразовании в
функциях семейства \V{printf} языка \S{Си}. Раскрытие спецификатора
форматного преобразования даёт строку, которая подвергается
ограничению на максимальную длину. Например, спецификатор форматного
преобразования \V{Ps} раскрывается в строку короткого имени
(\V{short\_name}) текущей задачи. Если результат раскрытия
спецификатора длиннее, чем указано в элементе \V{<точность>}, он
обрезается по заданной длине. Если результат раскрытия спецификатора
короче, чем указано в элементе \V{<точность>}, он сохраняется
неизменным. Строка, полученная после применения ограничения на
максимальную длину, подвергается преобразованиям выравнивания до
минимальной длины, как описано выше. Если элемент \V{<точность>} не
задан, его значение подразумевается неограниченным.

Элемент \V{<спецификатор>} (спецификатор форматного преобразования)
указывает данные, которые подставляются вместо спецификации форматного
преобразования. Спецификатор состоит из двух букв, где первая буква
--- это секция, из которой берётся информация: \V{P} --- текущая
задача, \V{T} --- текущий тестер, \V{M} --- текущий участник. Вторая
буква определяет поле секции. Все поддерживаемые спецификаторы
форматного преобразования перечислены в таблице
\ref{tableFormatSpecificationSpecifiers}.

\begin{table}[htp]
\begin{center}
\begin{tabular}{|l|p{13cm}|}
\hline
\multicolumn{2}{|c|}{\B{Текущая задача}
  (секция \hyperlink{F:serve.cfg,S:problem}{\V{problem}})}\\
\hline
\V{Pi} & Идентификатор задачи
  (поле \hyperlink{F:serve.cfg,S:problem,T:id}{\V{id}})\\
\V{Ps} & Короткое имя задачи
  (поле \hyperlink{F:serve.cfg,S:problem,T:short_name}{\V{short\_name}})\\
\V{Pl} & Полное имя задачи
  (поле \hyperlink{F:serve.cfg,S:problem,T:name}{\V{name}})\\
\hline
\multicolumn{2}{|c|}{\B{Текущий тестер}
  (секция \hyperlink{F:serve.cfg,S:tester}{\V{tester}})}\\
\hline
\V{Ti} & Идентификатор тестера
  (поле \hyperlink{F:serve.cfg,S:tester,T:id}{\V{id}})\\
\V{Tn} & Имя тестера
  (поле \hyperlink{F:serve.cfg,S:tester,T:name}{\V{name}})\\
\V{Tj} & Идентификатор задачи, которую проверяет тестер
  (поле \hyperlink{F:serve.cfg,S:tester,T:problem}{\V{problem}})\\
\V{Tp} & Короткое имя задачи, которую проверяет тестер
  (поле \hyperlink{F:serve.cfg,S:tester,T:problem_name}{\V{problem\_name}})\\
\V{Ta} & Архитектура, на которой работает тестер
  (поле \hyperlink{F:serve.cfg,S:tester,T:arch}{\V{arch}})\\
\V{Tk} & Ключ тестера
  (поле \hyperlink{F:serve.cfg,S:tester,T:key}{\V{key}})\\
\hline
\multicolumn{2}{|c|}{\B{Текущий участник}}\\
\hline
\V{Mi} & Идентификатор участника\\
\V{Mn} & Имя участника\\
\V{Ml} & Регистрационное имя (login) участника\\
\V{Mc} & Поле <<город>> (city) регистрационной формы участника.
         Если данное поле не заполнялось, заменяется на пустую строку\\
\V{MC} & Поле <<город (англ.)>> (city\_en) регистрационной формы участника\\
\V{Mo} & Поле <<страна>> (country) регистрационной формы участника\\
\V{MO} & Поле <<страна (англ.)>> (country\_en) регистрационной формы
         участника\\
\V{Mt} & Поле <<краткое название учебного заведения>> (inst\_short)
         регистрационной формы участника\\
\V{MT} & Поле <<краткое название учебного заведения (англ.)>> (inst\_short\_en)
         регистрационной формы участника\\
\V{Mu} & Поле <<название учебного заведения>> (inst)
         регистрационной формы участника\\
\V{MU} & Поле <<название учебного заведения (англ.)>> (inst\_en)
         регистрационной формы участника\\
\hline
\end{tabular}
\end{center}
\caption{Спецификаторы форматного преобразования}
\label{tableFormatSpecificationSpecifiers}
\end{table}

%\subsection{Наследование}
%
\subsection{Список глобальных параметров}

\noindent
\begin{longtable}{|>{\ttfamily\small}l|>{\small}l|>{\small}p{8.5cm}|}
\hline
\rmfamily\normalsize Название & Стр. & Описание\\
\hline
\endhead

\hline
\multicolumn{3}{|r|}%
{\small\itshape Продолжение на следующей странице}\\
\hline
\endfoot

\hline
\endlastfoot

\strut\hyperlink{F:serve.cfg,T:a2ps_args}{a2ps\_args}
  & \pageref{descServeCfgA2psArgs}
  & Дополнительные аргументы программы \S{a2ps}.\\
\strut\hyperlink{F:serve.cfg,T:a2ps_path}{a2ps\_path}
  & \pageref{descServeCfgA2psPath}
  & Путь к программе \S{a2ps}.\\
\strut\hyperlink{F:serve.cfg,T:accept_sound}{accept\_sound}
  & \pageref{descServeCfgAcceptSound}
  & Звуковой файл, проигрываемый при успешной сдаче решения.\\
\strut\hyperlink{F:serve.cfg,T:archive_dir}{archive\_dir}
  & \pageref{descServeCfgArchiveDir}
  & Каталог для хранения архивов турнира.\\
\strut\hyperlink{F:serve.cfg,T:auto_short_problem_name}{auto\_short\_problem\_name}
  & \pageref{descServeCfgAutoShortProblemName}
  & Флаг автоматической генерации короткого имени задачи.\\
\strut\hyperlink{F:serve.cfg,T:autoupdate_standings}{autoupdate\_standings}
  & \pageref{descServeCfgAutoupdateStandings}
  & Флаг автоматического обновления таблицы результатов.\\
\strut\hyperlink{F:serve.cfg,T:board_fog_time}{board\_fog\_time}
  & \pageref{descServeCfgBoardFogTime}
  & Время заморозки таблицы результатов.\\
\strut\hyperlink{F:serve.cfg,T:board_unfog_time}{board\_unfog\_time}
  & \pageref{descServeCfgBoardUnfogTime}
  & Время разморозки таблицы результатов.\\
\strut\hyperlink{F:serve.cfg,T:charset}{charset}
  & \pageref{descServeCfgCharset}
  & Кодировка генерируемых html-страниц.\\
\strut\hyperlink{F:serve.cfg,T:checker_dir}{checker\_dir}
  & \pageref{descServeCfgCheckerDir}
  & Каталог для запуска проверяемых программ.\\
\strut\hyperlink{F:serve.cfg,T:checker_real_time_limit}{checker\_real\_time\_limit}
  & \pageref{descServeCfgCheckerRealTimeLimit}
  & Ограничение времени на работу проверяющей программы.\\
\strut\hyperlink{F:serve.cfg,T:clar_archive_dir}{clar\_archive\_dir}
  & \pageref{descServeCfgClarArchiveDir}
  & Каталог для хранения сообщений участников и судей.\\
\strut\hyperlink{F:serve.cfg,T:clar_log_file}{clar\_log\_file}
  & \pageref{descServeCfgClarLogFile}
  & Файл журнала сообщений участников и судей.\\
\strut\hyperlink{F:serve.cfg,T:compile_dir}{compile\_dir}
  & \pageref{descServeCfgCompileDir}
  & Каталог обмена программ \S{serve} и \S{compile}.\\
\strut\hyperlink{F:serve.cfg,T:compile_real_time_limit}{compile\_real\_time\_limit}
  & \pageref{descServeCfgCompileRealTimeLimit}
  & Ограничение времени на компиляцию программ.\\
\strut\hyperlink{F:serve.cfg,T:compile_work_dir}{compile\_work\_dir}
  & \pageref{descServeCfgCompileWorkDir}
  & Рабочий каталог программы \S{compile}.\\
\strut\hyperlink{F:serve.cfg,T:conf_dir}{conf\_dir}
  & \pageref{descServeCfgConfDir}
  & Каталог конфигурационных файлов.\\
\strut\hyperlink{F:serve.cfg,T:contest_id}{contest\_id}
  & \pageref{descServeCfgContestId}
  & Идентификатор турнира.\\
\strut\hyperlink{F:serve.cfg,T:contests_dir}{contests\_dir}
  & \pageref{descServeCfgContestsDir}
  & Каталог описания турниров.\\
\strut\hyperlink{F:serve.cfg,T:contest_time}{contest\_time}
  & \pageref{descServeCfgContestTime}
  & Продолжительность турнира.\\
\strut\hyperlink{F:serve.cfg,T:corr_dir}{corr\_dir}
  & \pageref{descServeCfgCorrDir}
  & Каталог с правильными ответами к тестам.\\
\strut\hyperlink{F:serve.cfg,T:corr_sfx}{corr\_sfx}
  & \pageref{descServeCfgCorrSfx}
  & Суффикс файлов с правильными ответами к тестам.\\
\strut\hyperlink{F:serve.cfg,T:cr_serialization_key}{cr\_serialization\_key}
  & \pageref{descServeCfgCrSerializationKey}
  & Ключ сериализационного семафора.\\
\strut\hyperlink{F:serve.cfg,T:diff_path}{diff\_path}
  & \pageref{descServeCfgDiffPath}
  & Путь к программе сравнения файлов \S{diff}.\\
\strut\hyperlink{F:serve.cfg,T:disable_auto_testing}{disable\_auto\_testing}
  & \pageref{descServeCfgDisableAutoTesting}
  & Флаг отключения автоматического тестирования.\\
\strut\hyperlink{F:serve.cfg,T:disable_clars}{disable\_clars}
  & \pageref{descServeCfgDisableClars}
  & Флаг полного запрета сообщений.\\
\strut\hyperlink{F:serve.cfg,T:disable_team_clars}{disable\_team\_clars}
  & \pageref{descServeCfgDisableTeamClars}
  & Флаг запрета вопросов от участников турнира.\\
\strut\hyperlink{F:serve.cfg,T:disable_testing}{disable\_testing}
  & \pageref{descServeCfgDisableTesting}
  & Флаг отключения тестирования.\\
\strut\hyperlink{F:serve.cfg,T:enable_continue}{enable\_continue}
  & \pageref{descServeCfgEnableContinue}
  & Флаг разрешения продолжения турнира.\\
\strut\hyperlink{F:serve.cfg,T:enable_l10n}{enable\_l10n}
  & \pageref{descServeCfgEnableL10n}
  & Флаг включения локализации сообщений.\\
\strut\hyperlink{F:serve.cfg,T:enable_printing}{enable\_printing}
  & \pageref{descServeCfgEnablePrinting}
  & Флаг разрешения печати на принтер участниками турнира.\\
\strut\hyperlink{F:serve.cfg,T:enable_report_upload}{enable\_report\_upload}
  & \pageref{descServeCfgEnableReportUpload}
  & Флаг разрешения загрузки протокола тестирования
    привилегированным пользователем.\\
\strut\hyperlink{F:serve.cfg,T:enable_l10n}{enable\_runlog\_merge}
  & \pageref{descServeCfgEnableRunlogMerge}
  & Флаг включения средств слияния журнала посылок.\\
\strut\hyperlink{F:serve.cfg,T:ignore_compile_errors}{ignore\_compile\_errors}
  & \pageref{descServeCfgIgnoreCompileErrors}
  & Флаг игнорирования ошибок компиляции.\\
\strut\hyperlink{F:serve.cfg,T:ignore_duplicated_runs}{ignore\_duplicated\_runs}
  & \pageref{descServeCfgIgnoreDuplicatedRuns}
  & Флаг игнорирования дублирующих посылок.\\
\strut\hyperlink{F:serve.cfg,T:inactivity_timeout}{inactivity\_timeout}
  & \pageref{descServeCfgInactivityTimeout}
  & Тайм-аут программы \S{serve}.\\
\strut\hyperlink{F:serve.cfg,T:info_dir}{info\_dir}
  & \pageref{descServeCfgInfoDir}
  & Каталог с дополнительной информацией о тестах. \\
\strut\hyperlink{F:serve.cfg,T:info_sfx}{info\_sfx}
  & \pageref{descServeCfgInfoSfx}
  & Суффикс файлов с дополнительной информацией о тестах. \\
\strut\hyperlink{F:serve.cfg,T:internal_sound}{internal\_sound}
  & \pageref{descServeCfgInternalSound}
  & Звук, проигрываемый при внутренней ошибке тестирования.\\
\strut\hyperlink{F:serve.cfg,T:l10n_dir}{l10n\_dir}
  & \pageref{descServeCfgL10nDir}
  & Каталог файлов локализации.\\
\strut\hyperlink{F:serve.cfg,T:lpr_args}{lpr\_args}
  & \pageref{descServeCfgLprArgs}
  & Дополнительные аргументы программы \S{lpr}.\\
\strut\hyperlink{F:serve.cfg,T:lpr_path}{lpr\_path}
  & \pageref{descServeCfgLprPath}
  & Путь к программе \S{lpr}.\\
\strut\hyperlink{F:serve.cfg,T:max_clar_num}{max\_clar\_num}
  & \pageref{descServeCfgMaxClarNum}
  & Квота вопросов от одной команды.\\
\strut\hyperlink{F:serve.cfg,T:max_clar_size}{max\_clar\_size}
  & \pageref{descServeCfgMaxClarSize}
  & Максимальный размер одного вопроса от команды.\\
\strut\hyperlink{F:serve.cfg,T:max_clar_total}{max\_clar\_total}
  & \pageref{descServeCfgMaxClarTotal}
  & Квота суммарного размера вопросов от одной команды.\\
\strut\hyperlink{F:serve.cfg,T:max_cmd_length}{max\_cmd\_length}
  & \pageref{descServeCfgMaxCmdLength}
  & Максимальный размер включаемых в протокол тестирования
    аргументов командной строки. \\
\strut\hyperlink{F:serve.cfg,T:max_file_length}{max\_file\_length}
  & \pageref{descServeCfgMaxFileLength}
  & Максимальная длина включаемого в протокол тестирования файла.\\
\strut\hyperlink{F:serve.cfg,T:max_line_length}{max\_line\_length}
  & \pageref{descServeCfgMaxLineLength}
  & Максимальная длина строки в протоколе тестирования\\
\strut\hyperlink{F:serve.cfg,T:max_run_num}{max\_run\_num}
  & \pageref{descServeCfgMaxRunNum}
  & Квота количества решений от одной команды.\\
\strut\hyperlink{F:serve.cfg,T:max_run_size}{max\_run\_size}
  & \pageref{descServeCfgMaxRunSize}
  & Максимальный размер одного решения от команды.\\
\strut\hyperlink{F:serve.cfg,T:max_run_total}{max\_run\_total}
  & \pageref{descServeCfgMaxRunTotal}
  & Квота суммарного размера решений от одной команды.\\
\strut\hyperlink{F:serve.cfg,T:min_gzip_size}{min\_gzip\_size}
  & \pageref{descServeCfgMinGzipSize}
  & Минимальный размер архивного файла для сжатия.\\
\strut\hyperlink{F:serve.cfg,T:plog_file_name}{plog\_file\_name}
  & \pageref{descServeCfgPlogFileName}
  & Имя файла с публичным журналом посылок.\\
\strut\hyperlink{F:serve.cfg,T:plog_footer_file}{plog\_footer\_file}
  & \pageref{descServeCfgPlogFooterFile}
  & Файл-подвал публичного журнала посылок.\\
\strut\hyperlink{F:serve.cfg,T:plog_header_file}{plog\_header\_file}
  & \pageref{descServeCfgPlogHeaderFile}
  & Файл-заголовок публичного журнала посылок.\\
\strut\hyperlink{F:serve.cfg,T:plog_update_time}{plog\_update\_time}
  & \pageref{descServeCfgPlogUpdateTime}
  & Период обновления публичного журнала посылок.\\
\strut\hyperlink{F:serve.cfg,T:presentation_sound}{presentation\_sound}
  & \pageref{descServeCfgPresentationSound}
  & Звук, проигрываемый при presentation error.\\
\strut\hyperlink{F:serve.cfg,T:priority_adjustment}{priority\_adjustment}
  & \pageref{descServeCfgPriorityAdjustment}
  & Базовый приоритет тестирования.\\
\strut\hyperlink{F:serve.cfg,T:prob_info_url}{prob\_info\_url}
  & \pageref{descServeCfgProbInfoUrl}
  & Шаблон URL текста задачи.\\
\strut\hyperlink{F:serve.cfg,T:prune_empty_users}{prune\_empty\_users}
  & \pageref{descServeCfgPruneEmptyUsers}
  & Флаг игнорирования <<пустых>> пользователей.\\
\strut\hyperlink{F:serve.cfg,T:report_archive_dir}{report\_archive\_dir}
  & \pageref{descServeCfgReportArchiveDir}
  & Каталог архива протоколов тестирования.\\
\strut\hyperlink{F:serve.cfg,T:report_error_code}{report\_error\_code}
  & \pageref{descServeCfgReportErrorCode}
  & Флаг разрешения печати кода возврата в протокол участника.\\
\strut\hyperlink{F:serve.cfg,T:root_dir}{root\_dir}
  & \pageref{descServeCfgRootDir}
  & Корневой каталог файлов турнира.\\
\strut\hyperlink{F:serve.cfg,T:run_archive_dir}{run\_archive\_dir}
  & \pageref{descServeCfgRunArchiveDir}
  & Каталог архива посылок.\\
\strut\hyperlink{F:serve.cfg,T:run_check_dir}{run\_check\_dir}
  & \pageref{descServeCfgRunCheckDir}
  & Рабочий каталог для проверки решений.\\
\strut\hyperlink{F:serve.cfg,T:run_dir}{run\_dir}
  & \pageref{descServeCfgRunDir}
  & Каталог обмена программ \S{serve} и \S{run}.\\
\strut\hyperlink{F:serve.cfg,T:run_log_file}{run\_log\_file}
  & \pageref{descServeCfgRunLogFile}
  & Файл журнала посылок.\\
\strut\hyperlink{F:serve.cfg,T:runtime_sound}{runtime\_sound}
  & \pageref{descServeCfgRuntimeSound}
  & Звук, проигрываемый при runtime error.\\
\strut\hyperlink{F:serve.cfg,T:run_work_dir}{run\_work\_dir}
  & \pageref{descServeCfgRunWorkDir}
  & Рабочий каталог программы \S{run}.\\
\strut\hyperlink{F:serve.cfg,T:score_system}{score\_system}
  & \pageref{descServeCfgScoreSystem}
  & Тип турнира.\\
\strut\hyperlink{F:serve.cfg,T:script_dir}{script\_dir}
  & \pageref{descServeCfgScriptDir}
  & Каталог скриптов компиляции и запуска.\\
\strut\hyperlink{F:serve.cfg,T:serve_sleep_time}{serve\_sleep\_time}
  & \pageref{descServeCfgServeSleepTime}
  & Период опроса каталогов обмена программой \S{serve}.\\
\strut\hyperlink{F:serve.cfg,T:serve_socket}{serve\_socket}
  & \pageref{descServeCfgServeSocket}
  & UNIX-сокет команд программе \S{serve}.\\
\strut\hyperlink{F:serve.cfg,T:show_astr_time}{show\_astr\_time}
  & \pageref{descServeCfgShowAstrTime}
  & Флаг астрономического времени при печати журнала посылок.\\
\strut\hyperlink{F:serve.cfg,T:show_deadline}{show\_deadline}
  & \pageref{descServeCfgShowDeadline}
  & Флаг печати крайнего времени сдачи в меню задач.\\
\strut\hyperlink{F:serve.cfg,T:sleep_time}{sleep\_time}
  & \pageref{descServeCfgSleepTime}
  & Период опроса каталогов обмена.\\
\strut\hyperlink{F:serve.cfg,T:socket_path}{socket\_path}
  & \pageref{descServeCfgSocketPath}
  & UNIX-сокет для связи с программой \S{userlist-server}.\\
\strut\hyperlink{F:serve.cfg,T:sound_player}{sound\_player}
  & \pageref{descServeCfgSoundPlayer}
  & Программа, которая проигрывает звуковые файлы.\\
\strut\hyperlink{F:serve.cfg,T:stand2_file_name}{stand2\_file\_name}
  & \pageref{descServeCfgStand2FileName}
  & Имя вторичного файла с таблицей текущих результатов.\\
\strut\hyperlink{F:serve.cfg,T:stand2_footer_file}{stand2\_footer\_file}
  & \pageref{descServeCfgStand2FooterFile}
  & Файл-подвал вторичного файла таблицы текущих результатов.\\
\strut\hyperlink{F:serve.cfg,T:stand2_header_file}{stand2\_header\_file}
  & \pageref{descServeCfgStand2HeaderFile}
  & Файл-заголовок вторичного файла таблицы текущих результатов.\\
\strut\hyperlink{F:serve.cfg,T:standings_charset}{standings\_charset}
  & \pageref{descServeCfgStandingsCharset}
  & Кодировка файла таблицы результатов.\\
\strut\hyperlink{F:serve.cfg,T:standings_file_name}{standings\_file\_name}
  & \pageref{descServeCfgStandingsFileName}
  & Файл основной таблицы результатов.\\
\strut\hyperlink{F:serve.cfg,T:standings_locale}{standings\_locale}
  & \pageref{descServeCfgStandingsLocale}
  & Язык файла таблицы результатов.\\
%\strut\hyperlink{F:serve.cfg,T:standings_real_team_color}{standings\_real\_team\_color}
%  & \pageref{descServeCfgStandingsRealTeamColor}
%  & Цвет действительных участников виртуального турнира.\\
%\strut\hyperlink{F:serve.cfg,T:standings_team_color}{standings\_team\_color}
%  & \pageref{descServeCfgStandingsTeamColor}
%  & Цвет участников турнира.\\
%\strut\hyperlink{F:serve.cfg,T:standings_virtual_team_color}{standings\_virtual\_team\_color}
%  & \pageref{descServeCfgStandingsVirtualTeamColor}
%  & Цвет виртуальных участников турнира.\\
%\strut\hyperlink{F:serve.cfg,T:start_sound}{start\_sound}
%  & \pageref{descServeCfgStartSound}
%  & Звуковой файл, проигрываемый при начале тестирования.\\
\strut\hyperlink{F:serve.cfg,T:stand_extra_attr}{stand\_extra\_attr}
  & \pageref{descServeCfgStandExtraAttr}
  & Атрибуты дополнительной пользовательской колонки таблицы результатов.\\
\strut\hyperlink{F:serve.cfg,T:stand_extra_format}{stand\_extra\_format}
  & \pageref{descServeCfgStandExtraFormat}
  & Формат вывода в дополнительной пользовательской колонке таблицы
    результатов.\\
\strut\hyperlink{F:serve.cfg,T:stand_extra_legend}{stand\_extra\_legend}
  & \pageref{descServeCfgStandExtraLegend}
  & Заголовок дополнительной пользовательской колонки таблицы результатов.\\
\strut\hyperlink{F:serve.cfg,T:stand_footer_file}{stand\_footer\_file}
  & \pageref{descServeCfgStandFooterFile}
  & Файл-подвал основного файла таблицы текущих результатов.\\
\strut\hyperlink{F:serve.cfg,T:stand_freeze_time}{stand\_freeze\_time}
  & \pageref{descServeCfgStandFreezeTime}
  & Синоним для \V{board\_fog\_time}.\\
\strut\hyperlink{F:serve.cfg,T:stand_header_file}{stand\_header\_file}
  & \pageref{descServeCfgStandHeaderFile}
  & Файл-заголовок основного файла таблицы текущих результатов.\\
\strut\hyperlink{F:serve.cfg,T:stand_melt_time}{stand\_melt\_time}
  & \pageref{descServeCfgStandMeltTime}
  & Синоним для \V{board\_unfog\_time}.\\
\strut\hyperlink{F:serve.cfg,T:stand_penalty_attr}{stand\_penalty\_attr}
  & \pageref{descServeCfgStandPenaltyAttr}
  & Атрибуты колонки <<штраф>> таблицы текущих результатов (в режиме
    турнира \I{ACM}).\\
\strut\hyperlink{F:serve.cfg,T:stand_place_attr}{stand\_place\_attr}
  & \pageref{descServeCfgStandPlaceAttr}
  & Атрибуты колонки <<место>> таблицы текущих результатов.\\
\strut\hyperlink{F:serve.cfg,T:stand_prob_attr}{stand\_prob\_attr}
  & \pageref{descServeCfgStandProbAttr}
  & Атрибуты колонок <<задача>> таблицы текущих результатов.\\
\strut\hyperlink{F:serve.cfg,T:stand_r_row_attr}{stand\_r\_row\_attr}
  & \pageref{descServeCfgStandRRowAttr}
  & Атрибуты строки таблицы текущих результатов для невиртуальных участников
    виртуальных турниров и для участников невиртуальных турниров.\\
\strut\hyperlink{F:serve.cfg,T:stand_score_attr}{stand\_score\_attr}
  & \pageref{descServeCfgStandScoreAttr}
  & Атрибуты колонки <<очки>> таблицы текущих результатов (в режимах
    турнира \I{kirov} или \I{olympiad}).\\
\strut\hyperlink{F:serve.cfg,T:stand_self_row_attr}{stand\_self\_row\_attr}
  & \pageref{descServeCfgStandSelfRowAttr}
  & Атрибуты строки таблицы текущих результатов, соответствующей текущей
    команде при выводе текущих результатов данной команды в виртуальном
    турнире (только для виртуальных турниров).\\
\strut\hyperlink{F:serve.cfg,T:stand_solved_attr}{stand\_solved\_attr}
  & \pageref{descServeCfgStandSolvedAttr}
  & Атрибуты колонки <<количество решённых задач>> таблицы
    текущих результатов.\\
\strut\hyperlink{F:serve.cfg,T:stand_table_attr}{stand\_table\_attr}
  & \pageref{descServeCfgStandTableAttr}
  & Атрибуты тега \V{<table>} таблицы текущих результатов.\\
\strut\hyperlink{F:serve.cfg,T:stand_team_attr}{stand\_team\_attr}
  & \pageref{descServeCfgStandTeamAttr}
  & Атрибуты колонки <<команда>> таблицы текущих результатов.\\
\strut\hyperlink{F:serve.cfg,T:stand_time_attr}{stand\_time\_attr}
  & \pageref{descServeCfgStandTimeAttr}
  & Атрибуты для вывода затраченного времени в ячейке таблицы
    текущих результатов (в режиме турнира \V{ACM}).\\
\strut\hyperlink{F:serve.cfg,T:stand_u_row_attr}{stand\_u\_row\_attr}
  & \pageref{descServeCfgStandURowAttr}
  & Атрибуты строки таблицы текущих результатов для участников виртуального
    турнира с неопределённым статусом.\\
\strut\hyperlink{F:serve.cfg,T:stand_v_row_attr}{stand\_v\_row\_attr}
  & \pageref{descServeCfgStandVRowAttr}
  & Атрибуты строки таблицы текущих результатов для виртуальных участников
    виртуальных турниров.\\
\strut\hyperlink{F:serve.cfg,T:status_dir}{status\_dir}
  & \pageref{descServeCfgStatusDir}
  & Каталог файлов состояния программы \S{serve}.\\
\strut\hyperlink{F:serve.cfg,T:team_download_time}{team\_download\_time}
  & \pageref{descServeCfgTeamDownloadTime}
  & Период скачивания участником своих решений.\\
\strut\hyperlink{F:serve.cfg,T:team_enable_ce_view}{team\_enable\_ce\_view}
  & \pageref{descServeCfgTeamEnableCeView}
  & Флаг разрешения просмотра участником протокола компиляции программы
    в случае ошибки компиляции.\\
\strut\hyperlink{F:serve.cfg,T:team_enable_rep_view}{team\_enable\_rep\_view}
  & \pageref{descServeCfgTeamEnableRepView}
  & Флаг разрешения просмотра участником протоколов тестирования.\\
\strut\hyperlink{F:serve.cfg,T:team_enable_src_view}{team\_enable\_src\_view}
  & \pageref{descServeCfgTeamEnableSrcView}
  & Флаг разрешения просмотра участником исходного текста решений.\\
\strut\hyperlink{F:serve.cfg,T:team_extra_dir}{team\_extra\_dir}
  & \pageref{descServeCfgTeamExtraDir}
  & Каталог для сохранения состояния клиента турнира.\\
\strut\hyperlink{F:serve.cfg,T:team_info_url}{team\_info\_url}
  & \pageref{descServeCfgTeamInfoUrl}
  & Шаблон URL с информацией об участнике.\\
\strut\hyperlink{F:serve.cfg,T:team_page_quota}{team\_page\_quota}
  & \pageref{descServeCfgTeamPageQuota}
  & Квота количества напечатанных страниц для участника турнира.\\
\strut\hyperlink{F:serve.cfg,T:team_show_judge_report}{team\_show\_judge\_report}
  & \pageref{descServeCfgTeamShowJudgeReport}
  & Флаг доступа участников к судейскому протоколу тестирования.\\
\strut\hyperlink{F:serve.cfg,T:team_report_archive_dir}{team\_report\_archive\_dir}
  & \pageref{descServeCfgTeamReportArchiveDir}
  & Каталог архива протоколов тестирования, предназначенных для участников.\\
\strut\hyperlink{F:serve.cfg,T:test_dir}{test\_dir}
  & \pageref{descServeCfgTestDir}
  & Каталог с тестами к задачам.\\
\strut\hyperlink{F:serve.cfg,T:test_sfx}{test\_sfx}
  & \pageref{descServeCfgTestSfx}
  & Суффикс имён файлов с тестами.\\
\strut\hyperlink{F:serve.cfg,T:tests_to_accept}{tests\_to\_accept}
  & \pageref{descServeCfgTestsToAccept}
  & Количество тестов для принятия задачи в режиме \I{OLYMPIAD}.\\
\strut\hyperlink{F:serve.cfg,T:tgz_dir}{tgz\_dir}
  & \pageref{descServeCfgTgzDir}
  & Каталог с архивами рабочих каталогов для тестирования
    решений. \\
\strut\hyperlink{F:serve.cfg,T:tgz_sfx}{tgz\_sfx}
  & \pageref{descServeCfgTgzSfx}
  & Суффиксы архивов рабочих каталогов. \\
\strut\hyperlink{F:serve.cfg,T:timelimit_sound}{timelimit\_sound}
  & \pageref{descServeCfgTimelimitSound}
  & Звук, проигрываемый при истечении лимита времени.\\
\strut\hyperlink{F:serve.cfg,T:user_priority_adjustment}{user\_priority\_adjustment}
  & \pageref{descServeCfgUserPriorityAdjustment}
  & Спецификации изменения приоритета тестирования в зависимости
    от идентификатора пользователя.\\
\strut\hyperlink{F:serve.cfg,T:use_dir_hierarchy}{use\_dir\_hierarchy}
  & \pageref{descServeCfgUseDirHierarchy}
  & Флаг хранения архивных файлов в иерархической структуре каталогов.\\
\strut\hyperlink{F:serve.cfg,T:use_gzip}{use\_gzip}
  & \pageref{descServeCfgUseGzip}
  & Флаг сжатия архивных файлов.\\
\strut\hyperlink{F:serve.cfg,T:variant_map_file}{variant\_map\_file}
  & \pageref{descServeCfgVariantMapFile}
  & Путь к файлу с распределением вариантов между участниками.\\
\strut\hyperlink{F:serve.cfg,T:var_dir}{var\_dir}
  & \pageref{descServeCfgVarDir}
  & Каталог рабочих файлов турнира.\\
\strut\hyperlink{F:serve.cfg,T:virtual}{virtual}
  & \pageref{descServeCfgVirtual}
  & Флаг виртуального турнира.\\
\strut\hyperlink{F:serve.cfg,T:work_dir}{work\_dir}
  & \pageref{descServeCfgWorkDir}
  & Рабочий каталог.\\
\strut\hyperlink{F:serve.cfg,T:wrong_sound}{wrong\_sound}
  & \pageref{descServeCfgWrongSound}
  & Звук, проигрываемый при неправильном ответе тестируемой программы.\\
\end{longtable}

\newpage
\subsection{Глобальные параметры}

В данном разделе рассматриваются глобальные конфигурационные
переменные конфигурационного файла
\hyperlink{F:serve.cfg}{\V{serve.cfg}}.

\subsubsection{Переменная \V{contest\_id}}
\label{descServeCfgContestId}
\hypertarget{F:serve.cfg,T:contest_id}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{contest\_id} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используется:          & \S{serve} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{нет}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.}
Данная конфигурационная переменная задаёт идентификатор
обслуживаемого турнира. Идентификатор турнира --- целое число
больше нуля. Название турнира и информация общего характера о
турнире берётся из конфигурационного файла турнира
\hyperlink{F:contest.xml}{\V{contest.xml}}.

\B{Пример.}
{\small
\begin{verbatim}
contest_id = 20
\end{verbatim}
}

\subsubsection{Переменная \V{contests\_dir}}
\label{descServeCfgContestsDir}
\hypertarget{F:serve.cfg,T:contests_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{contests\_dir} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используется:          & \S{serve} \\
Тип содержимого:       & \I{путь к каталогу}\\
Может отсутствовать:   & \I{нет}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

Данная конфигурационная переменная задаёт путь к каталогу, в
котором находятся файлы описания турниров
\hyperlink{F:contest.xml}{\V{contest.xml}}.
Каждое описание турнира находится в отдельном файле с именем,
равным шестизначному номеру турнира, например, \V{000000.xml}.
Используемое описание турнира определяется с помощью
конфигурационной переменной \V{contest\_id}.

\B{Пример.}
{\small
\begin{verbatim}
contests_dir = "/var/ejudge/contests"
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{socket\_path}}
\label{descServeCfgSocketPath}
\hypertarget{F:serve.cfg,T:socket_path}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{socket\_path} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используется:          & \S{serve} \\
Тип содержимого:       & \I{путь к UNIX-сокету}\\
Может отсутствовать:   & \I{нет}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная задаёт путь к
UNIX-сокету, который используется для связи с сервером
информации о пользователях
\hyperlink{P:userlist-server}{\S{userlist-server}}.
Когда программа \hyperlink{P:serve}{\S{serve}} стартует,
UNIX-сокет должен существовать и быть доступным для
пользователя, от имени которого запускается программа.

\B{Пример.}
{\small\begin{verbatim}
socket_path = "/var/ejudge/userlist-socket"
\end{verbatim}}

\subsubsection{Переменная \V{sleep\_time}}
\label{descServeCfgSleepTime}
\hypertarget{F:serve.cfg,T:sleep_time}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{sleep\_time} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используется:          & \S{serve}, \S{compile}, \S{run} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & 1000 \\
Может повторяться:     & \I{нет}\\
\end{tabular}

Программа \S{serve} обменивается с программами \S{compile} и \S{run}
посредством разделяемых файлов в общей файловой системе. Например,
чтобы отправить полученное от участника решение на компиляцию,
программа \S{serve} записывает служебный файл и файл решения в
специальные каталоги обмена с программой \S{compile}. Все три
программы периодически проверяют, не появились ли новые файлы в
каталогах обмена, и в случае появления новых файлов выполняют
соответствующие действия. Переменная \V{sleep\_time} позволяет
задать интервал времени в миллисекундах между опросами каталогов
обмена для программ \S{serve}, \S{compile} и \S{run}. Для программы
\S{serve} интервал времени может переопределяться с помощью переменной
\hyperlink{F:serve.cfg,T:serve_sleep_time}{\V{serve\_sleep\_time}}.
Значение конфигурационной переменной \V{sleep\_time} по умолчанию
равно 1000 (миллисекунд), что соответствует задержке в 1 секунду.

\newpage
\subsubsection{Переменная \V{serve\_sleep\_time}}
\label{descServeCfgServeSleepTime}
\hypertarget{F:serve.cfg,T:serve_sleep_time}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{serve\_sleep\_time} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используется:          & \S{serve} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & равно значению \V{sleep\_time} \\
Может повторяться:     & \I{нет}\\
\end{tabular}

Данная переменная задаёт интервал времени между опросами каталогов
обмена программы \S{serve}. Интервал времени задаётся в
миллисекундах. Если конфигурационная переменная \V{serve\_sleep\_time}
не установлена, используется значение конфигурационной переменной
\hyperlink{F:serve.cfg,T:sleep_time}{\V{sleep\_time}}, а если и эта
переменная не установлена, используется значение по умолчанию 1000,
что соответствует одной секунде задержки.

\subsubsection{Переменная \V{contest\_time}}
\label{descServeCfgContestTime}
\hypertarget{F:serve.cfg,T:contest_time}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{contest\_time} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используется:          & \S{serve} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{нет}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

Данная конфигурационная переменная задаёт время турнира в
секундах. Время в секундах должно быть целым значением, больше или
равно 0. Если время равно 0, продолжительность турнира
\B{не ограничена}. В этом случае параметры \V{board\_fog\_time},
\V{board\_unfog\_time} не используются. Турнир продолжается до тех
пор, пока не будет остановлен администратором.

\B{Пример.}
{\small
\begin{verbatim}
contest_time = 0
\end{verbatim}
}
Здесь задаётся неограниченная продолжительность турнира. Обратите
внимание, что в этом случае следует изменить значения
конфигурационных переменных \B{TODO} --- каких?

{\small
\begin{verbatim}
contest_time = 300
\end{verbatim}
}
В данном случае продолжительность турнира устанавливается равной 5
часам.

\newpage
\subsubsection{Переменная \V{board\_fog\_time}}
\label{descServeCfgBoardFogTime}
\hypertarget{F:serve.cfg,T:board_fog_time}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{board\_fog\_time} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & 60 \\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} По регламенту проведения командных соревнований по программированию
ACM таблица текущих результатов <<замораживается>>, то есть перестаёт
обновляться за 60 минут до конца соревнования. С помощью переменной
\V{board\_fog\_time} можно установить любое другое время заморозки
таблицы результатов. Время задаётся в минутах, то есть, например,
значение 60 означает заморозку таблицы результатов за час до
конца. Значение переменной должно быть больше нуля. Значение 0
означает отсутствие заморозки, то есть текущие результаты
турниру будут обновляться до самого последнего момента.
Заморозка действует только на автоматические обновления таблицы
результатов. Ручное обновление таблицы возможно вне 
зависимости от времени заморозки (с помощью CGI-программы
\S{master}). Если после того, как заморозка вступила в действие,
турнир был продлён так, что согласно новой продолжительности турнира
заморозка в действие не вступила, таблица результатов будет обновлена,
как только поступит новое решение или по команде обновления от
администратора турнира.

Данная конфигурационная переменная имеет синонимичную ей
глобальную конфигурационную переменную
\hyperlink{F:serve.cfg,T:stand_freeze_time}{\V{stand\_freeze\_time}}.
Эти две конфигурационные переменные являются синонимами и взаимозаменяемы.

\B{Пример.} Приведённый ниже пример включает заморозку результатов за
30 минут до конца турнира.
{\small
\begin{verbatim}
board_fog_time = 30
\end{verbatim}
}

\subsubsection{Переменная \V{stand\_freeze\_time}}
\label{descServeCfgStandFreezeTime}
\hypertarget{F:serve.cfg,T:stand_freze_time}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{stand\_freze\_time} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & 60 \\
Может повторяться:     & \I{нет}\\
Версия \S{ejudge}:     & начиная с 2.1.24\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная является
синонимом конфигурационной переменной 
\hyperlink{F:serve.cfg,T:board_fog_time}{\V{board\_fog\_time}}.
Для дальнейшей информации обратитесь к описанию этой переменной.

\newpage
\subsubsection{Переменная \V{board\_unfog\_time}}
\label{descServeCfgBoardUnfogTime}
\hypertarget{F:serve.cfg,T:board_unfog_time}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{board\_unfog\_time} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & 120 \\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная задаёт время в минутах после
окончания турнира, после которого снова возможны автоматические
обновления таблицы результатов. Ручное обновление таблицы результатов
после окончания турнира возможно вне зависимости от значения этой
конфигурационной переменной. Значение переменной должно быть больше
или равно 0. Если указано значение 0, автоматическое обновление
результатов возможно сразу же после окончания турнира.

Данная конфигурационная переменная имеет синонимичную ей
глобальную конфигурационную переменную
\hyperlink{F:serve.cfg,T:stand_melt_time}{\V{stand\_melt\_time}}.
Эти две конфигурационные переменные являются синонимами и взаимозаменяемы.

\B{Пример.} Приведённый ниже пример отключает заморозку результатов
после окончания турнира.
{\small
\begin{verbatim}
board_unfog_time = 0
\end{verbatim}
}

\subsubsection{Переменная \V{stand\_melt\_time}}
\label{descServeCfgStandMeltTime}
\hypertarget{F:serve.cfg,T:stand_melt_time}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{stand\_melt\_time} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & 60 \\
Может повторяться:     & \I{нет}\\
Версия \S{ejudge}:     & начиная с 2.1.24\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная является
синонимом конфигурационной переменной 
\hyperlink{F:serve.cfg,T:board_unfog_time}{\V{board\_unfog\_time}}.
Для дальнейшей информации обратитесь к описанию этой переменной.

\newpage
\subsubsection{Переменная \V{max\_run\_size}}
\label{descServeCfgMaxRunSize}
\hypertarget{F:serve.cfg,T:max_run_size}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{max\_run\_size} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & 65535 \\
Может повторяться:     & \I{нет}\\
\end{tabular}

Данная конфигурационная переменная устанавливает максимальный размер
программы, принимаемой на проверку. Если размер программы превышает
лимит, программа к проверке не принимается, а участнику выводится
сообщение об ошибке. При увеличении максимального размера программы
учтите, что действует ограничение размера данных, принимаемых от
клиента, равное 128 килобайт. Чтобы изменить это ограничение исправьте
значение константы \V{MAX\_VALUE\_SIZE} в исходном файле \V{cgi.c} и
перекомпилируйте систему \S{ejudge}.

\B{Пример.} Данный пример устанавливает максимальный размер программы
равным 100 килобайт.
{\small
\begin{verbatim}
max_run_size = 102400
\end{verbatim}
}

\subsubsection{Переменная \V{max\_run\_total}}
\label{descServeCfgMaxRunTotal}
\hypertarget{F:serve.cfg,T:max_run_total}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{max\_run\_total} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & 2097152 \\
Может повторяться:     & \I{нет}\\
\end{tabular}

Данная конфигурационная переменная устанавливает максимальный
суммарный размер всех решений от одного участника (квота
размера). Если размер очередной присланной на проверку программы
таков, что в сумме с предыдущими программами того же участника он
превышает квоту, программа на проверку не принимается, а участнику
выдаётся сообщение об ошибке. Размер квоты по умолчанию --- 2
мегабайта, чего более чем достаточно для обычного использования.

\newpage
\subsubsection{Переменная \V{max\_run\_num}}
\label{descServeCfgMaxRunNum}
\hypertarget{F:serve.cfg,T:max_run_num}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{max\_run\_num} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & 200 \\
Может повторяться:     & \I{нет}\\
\end{tabular}

Данная конфигурационная переменная устанавливает максимальное
количество присылаемых на проверку программ от одного
участника. Количество присланных программ суммируется для каждого
участника по всем задачам. Если максимальное количество присылаемых
программ превышено, очередная программа будет отвергнута, а участнику
будет выдано сообщение об ошибке. Значение по умолчанию --- 200, чего
должно быть достаточно для разумного использования.

\subsubsection{Переменная \V{max\_clar\_size}}
\label{descServeCfgMaxClarSize}
\hypertarget{F:serve.cfg,T:max_clar_size}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{max\_clar\_size} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & 1024 \\
Может повторяться:     & \I{нет}\\
\end{tabular}

Данная конфигурационная переменная устанавливает максимальный размер
сообщения или вопроса от участника. Если размер текста вопроса
превышает лимит, вопрос не принимается, а участнику выводится
сообщение об ошибке. При увеличении максимального размера сообщения
учтите, что действует ограничение размера данных, принимаемых от
клиента, равное 128 килобайт. Чтобы изменить это ограничение исправьте
значение константы \V{MAX\_VALUE\_SIZE} в исходном файле \V{cgi.c} и
перекомпилируйте систему \S{ejudge}.

\B{Пример.} Данный пример устанавливает максимальный размер сообщения
равным 2 килобайта.
{\small
\begin{verbatim}
max_clar_size = 2048
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{max\_clar\_total}}
\label{descServeCfgMaxClarTotal}
\hypertarget{F:serve.cfg,T:max_clar_total}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{max\_clar\_total} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & 40960 \\
Может повторяться:     & \I{нет}\\
\end{tabular}

Данная конфигурационная переменная устанавливает максимальный
суммарный размер текста всех сообщений от одного участника (квота
размера). Если размер очередного сообщения таков, что в сумме с
предыдущими сообщениями того же участника он превышает квоту,
сообщение не принимается, а участнику выдаётся сообщение об
ошибке. Размер квоты по умолчанию --- 40 килобайт, чего более чем
достаточно для обычного использования.

\subsubsection{Переменная \V{max\_clar\_num}}
\label{descServeCfgMaxClarNum}
\hypertarget{F:serve.cfg,T:max_clar_num}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{max\_clar\_num} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & 50 \\
Может повторяться:     & \I{нет}\\
\end{tabular}

Данная конфигурационная переменная устанавливает максимальное
количество сообщений от одного участника. Если максимальное количество
сообщений превышено, очередное сообщение будет отвергнуто, а участнику
будет выдано сообщение об ошибке. Значение по умолчанию --- 50, чего
должно быть достаточно для разумного использования.

\newpage
\subsubsection{Переменная \V{charset}}
\label{descServeCfgCharset}
\hypertarget{F:serve.cfg,T:charset}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{charset} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{iso8859-1} \\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная задаёт
кодировку, в которой генерируются все html-страницы,
передаваемые клиентам \S{team}, \S{master}, \S{judge}. В этой
кодировке также сохраняются базы дампы баз данных.

\B{Внимание.} В текущей версии системы \S{ejudge} поддержка
разных кодировок реализована неудовлетворительно. Не
гарантируется корректная работа системы, если кодировки,
заданные в параметрах \V{charset} конфигурационных файлов
CGI-программ \S{team}, \S{master}, \S{judge}, и кодировка,
заданная в этом файле, не совпадают. Кроме того, в
действительности поддерживаются только две кодировки:
\V{iso8859-1} и \V{koi8-r}. Корректная работа с другими
кодировками также не гарантируется.

\B{Пример.}
{\small
\begin{verbatim}
charset = koi8-r
\end{verbatim}
}

\subsubsection{Переменная \V{standings\_charset}}
\label{descServeCfgStandingsCharset}
\hypertarget{F:serve.cfg,T:standings_charset}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{standings\_charset} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & совпадает со значением \V{charset}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная задаёт
кодировку, в которой генерируется статическая таблица
результатов турнира. Статическая таблица результатов --- это
html-файл, генерируемый в каталоге файлов состояния сервера
турнира, который обновляется после каждой посылки участника.
Назначение этого файла --- дать возможность всем желающим
просматривать текущие результаты турнира. По умолчанию
предполагается, что кодировка этого файла совпадает с глобальной
кодировкой сервера турнира (см. конфигурационную переменную
\hyperlink{F:serve.cfg,T:charset}{\V{charset}}). Если переменная
\V{standings\_charset} задаёт другую кодировку, выполняется
перекодирование файла.

\B{Внимание.} Корректная работа системы \S{ejudge} в случае,
если переменная \V{standings\_charset} задаёт кодировку,
отличную от \V{cp1251}, не гарантируется.

\B{Пример.}
{\small
\begin{verbatim}
charset = cp1251
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{enable\_l10n}}
\label{descServeCfgEnableL10n}
\hypertarget{F:serve.cfg,T:enable_l10n}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{enable\_l10n} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{false}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная включает
локализацию сообщений во фрагментах html-файлов, генерируемых
программой \S{serve} для CGI-программ \S{team}, \S{judge},
\S{master}. Если локализация включена, требуемый язык сообщений
определяется клиентом. Чтобы включить локализацию, достаточно
написать в конфигурационном файле имя переменной
\V{enable\_l10n}.

\B{Замечание.} В настоящее время только CGI-программа \S{team}
поддерживает локализацию сообщений. CGI-программы \S{judge} и
\S{master} выводят сообщения только на английском языке. В
настоящее время поддерживаются два языка: английский и русский
(в кодировке koi8-r). Поскольку для локализации используются
стандартные средства локализации (функция \V{gettext(3)},
доступная на Linux), добавление новых языков является достаточно
простой задачей, если существующие проблемы с кодировками будут
решены.

\subsubsection{Переменная \V{l10n\_dir}}
\label{descServeCfgL10nDir}
\hypertarget{F:serve.cfg,T:l10n_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{l10n\_dir} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{путь к каталогу}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & (пустая строка)\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Переводы сообщений находятся не в исполняемом
файле программы, а в отдельном каталоге. Чтобы сервер турнира
\S{serve} мог использовать их, необходимо указать полный путь к
каталогу сообщений (message catalog), в котором находятся файлы
c переведёнными сообщениями. По умолчанию после выполнения
команды \V{make install} каталоги сообщений помещаются в
каталог, определяемой переменной \V{INST\_LOCALE\_PATH} в
\V{makefile}. Если каталог не указан, или указан неправильно,
локализация сообщений работать не будет, даже если параметр
\V{enable\_l10n} установлен в \I{true}.

\B{Пример.}
{\small
\begin{verbatim}
enable_l10n
l10n_dir = "/usr/share/locale"
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{standings\_locale}}
\label{descServeCfgStandingsLocale}
\hypertarget{F:serve.cfg,T:standings_locale}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{standings\_locale} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{строка}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & (пустая строка)\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная позволяет
локализовать статическую таблицу результатов турнира. По
умолчанию все элементы таблицы выводятся на английском языке
(например, ``Place'' в заголовке столбца таблицы). Установка
значения данной конфигурационной переменной в имя другого
локального окружения (locale) позволяет изменять язык. Например,
если включено русское локальное окружение \V{ru\_RU.KOI8-R}, тот
же заголовок столбца таблицы будет называться
\V{<<Место>>}. Перекодировка таблицы, управляемая
конфигурационной переменной
\hyperlink{F:serve.cfg,T:standings_charset}{\V{standings\_charset}},
выполняется после генерации таблицы результатов.

\B{Внимание.} В настоящее время поддерживается только русское
локальное окружение \V{ru\_RU.KOI8-R}.

\B{Пример.}
{\small
\begin{verbatim}
standings_locale = "ru_RU.KOI8-R"
\end{verbatim}
}

\subsubsection{Переменная \V{root\_dir}}
\label{descServeCfgRootDir}
\hypertarget{F:serve.cfg,T:root_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{root\_dir} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve}, \S{compile}, \S{run} \\
Тип содержимого:       & \I{путь к каталогу}\\
Может отсутствовать:   & \I{нет}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная позволяет
задать путь к каталогу, в котором находятся конфигурационные и
рабочие файлы системы \S{ejudge}. В подкаталогах этого каталога
рекомендуется размещать конфигурационные файлы \S{serve}, тесты,
правильные ответы, проверяющие программы. Кроме того, в
подкаталоге \V{var} этого каталога будут размещаться рабочие
файлы турнира: архив посылок участников и их вопросов, архив
протоколов запуска и временные файлы. Переменная должна быть
обязательно задана в конфигурационном файле.

\B{Пример.}
{\small
\begin{verbatim}
root_dir = /home/judges/20
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{conf\_dir}}
\label{descServeCfgConfDir}
\hypertarget{F:serve.cfg,T:conf_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{conf\_dir} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve}, \S{compile}, \S{run} \\
Тип содержимого:       & \I{путь к каталогу}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{conf}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная позволяет
задать каталог, в котором находятся конфигурационные файлы,
тесты, проверяющие программы, ответы к тестам. Если эта
переменная не задана, конфигурационным каталогом является
подкаталог \V{conf} каталога, заданного в переменной
\V{root\_dir}. Если конфигурационная переменная \V{conf\_dir}
задана, полный путь к каталогу конфигурационных файлов
образуется конкатенацией пути, указанного в переменной
\V{root\_dir} и пути, указанного в переменной \V{conf\_dir}.

\subsubsection{Переменная \V{script\_dir}}
\label{descServeCfgScriptDir}
\hypertarget{F:serve.cfg,T:script_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{script\_dir} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{compile}, \S{run} \\
Тип содержимого:       & \I{путь к каталогу}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{scripts}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная определяет путь
к каталогу скриптов компиляции и запуска программ. В этом
каталоге находятся программы (обычно это скрипты на языке bash),
вызываемые для компиляции посылок участников, а также
вспомогательные программы, назначение которых --- запустить
проверяемое решение участника. Полный путь к каталогу скриптов
определяется по следующим правилам:
\begin{itemize}
\item
Если значение переменной не задано, используется значение
\V{scripts}.
\item
Если значение переменной начинается с символа \V{'/'}, то есть
значение переменной задаёт полный абсолютный путь к каталогу
скриптов, этот путь используется без изменений.
\item
Если значение переменной не начинается с символа \V{'/'}, полный
путь к каталогу скриптов образуется конкатенацией значения
переменной \hyperlink{F:serve.cfg,T:conf_dir}{\V{conf\_dir}} и
значения переменной \V{script\_dir}.
\end{itemize}

\B{Пример.}
{\small
\begin{verbatim}
script_dir = /usr/share/ejudge/scripts
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{test\_dir}}
\label{descServeCfgTestDir}
\hypertarget{F:serve.cfg,T:test_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{test\_dir} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{путь к каталогу}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{tests}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
путь к каталогу, в котором хранятся тесты для всех задач данного
турнира. Сами тесты находятся в подкаталогах этого
каталога. Тесты для некоторой задачи с кратким именем \V{A}
(задаваемом конфигурационной переменной
\hyperlink{F:serve.cfg,S:problem,T:short_name}{\V{short\_name}})
находятся в подкаталоге \V{A} тестового каталога. Полный путь к
каталогу с тестами определяется по следующим правилам:
\begin{itemize}
\item
Если значение переменной \V{test\_dir} не задано, используется
значение \V{tests}.
\item
Если значение переменной \V{test\_dir} начинается с символа
\V{'/'}, то есть значение переменной задаёт полный абсолютный
путь к каталогу скриптов, этот путь используется без изменений.
\item
Если значение переменной \V{test\_dir} не начинается с символа
\V{'/'}, полный путь к каталогу скриптов образуется
конкатенацией значения переменной
\hyperlink{F:serve.cfg,T:conf_dir}{\V{conf\_dir}} и значения
переменной \V{test\_dir}.
\end{itemize}

\B{Пример.} В следующем примере путь к каталогу тестов
устанавливается в \V{\$\{root\_dir\}/conf/../tests}, где
\V{\$\{root\_dir\}} --- значение конфигурационной переменной
\V{root\_dir}. Этот путь эквивалентен пути
\V{\$\{root\_dir\}/tests}.
{\small
\begin{verbatim}
script_dir = ../tests
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{corr\_dir}}
\label{descServeCfgCorrDir}
\hypertarget{F:serve.cfg,T:corr_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{corr\_dir} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{путь к каталогу}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{correct}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
путь к каталогу, в котором хранятся правильные ответы к тестам
для всех задач данного турнира. Сами правильные ответы находятся
в подкаталогах этого каталога. Правильные ответы для некоторой
задачи с кратким именем \V{A} (задаваемом конфигурационной
переменной
\hyperlink{F:serve.cfg,S:problem,T:short_name}{\V{short\_name}})
находятся в подкаталоге \V{A} каталога правильных
ответов. Полный путь к каталогу с правильными ответами
определяется по следующим правилам:
\begin{itemize}
\item
Если значение переменной \V{corr\_dir} не задано, используется
значение \V{correct}.
\item
Если значение переменной \V{corr\_dir} начинается с символа
\V{'/'}, то есть значение переменной задаёт полный абсолютный
путь к каталогу скриптов, этот путь используется без изменений.
\item
Если значение переменной \V{corr\_dir} не начинается с символа
\V{'/'}, полный путь к каталогу скриптов образуется
конкатенацией значения переменной
\hyperlink{F:serve.cfg,T:conf_dir}{\V{conf\_dir}} и значения
переменной \V{corr\_dir}.
\end{itemize}

\B{Пример.} В следующем примере путь к каталогу тестов
устанавливается в \V{\$\{root\_dir\}/conf/../tests}, где
\V{\$\{root\_dir\}} --- значение конфигурационной переменной
\V{root\_dir}. Этот путь эквивалентен пути
\V{\$\{root\_dir\}/tests}. Таким образом, тесты к задачам и
правильные ответы к тестам находятся в одном каталоге.
{\small
\begin{verbatim}
script_dir = ../tests
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{checker\_dir}}
\label{descServeCfgCheckerDir}
\hypertarget{F:serve.cfg,T:checker_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{checker\_dir} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{путь к каталогу}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{checkers}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
путь к каталогу, в котором хранятся проверяющие программы для
всех задач данного турнира. Полный путь к проверяющей программе
является конкатенацией имени каталога, определённого в данной
конфигурационной переменной, и имени самой программы,
определённого в конфигурационной переменной
\hyperlink{F:serve.cfg,S:tester,T:check_cmd}{\V{check\_cmd}}.
Полный путь к каталогу с проверяющими программами определяется
по следующим правилам:
\begin{itemize}
\item
Если значение переменной \V{checker\_dir} не задано, используется
значение \V{checkers}.
\item
Если значение переменной \V{checker\_dir} начинается с символа
\V{'/'}, то есть значение переменной задаёт полный абсолютный
путь к каталогу скриптов, этот путь используется без изменений.
\item
Если значение переменной \V{checker\_dir} не начинается с символа
\V{'/'}, полный путь к каталогу скриптов образуется
конкатенацией значения переменной
\hyperlink{F:serve.cfg,T:conf_dir}{\V{conf\_dir}} и значения
переменной \V{checker\_dir}.
\end{itemize}

\B{Пример.} В следующем примере путь к каталогу тестов
устанавливается в \V{\$\{root\_dir\}/conf/../checkers}, где
\V{\$\{root\_dir\}} --- значение конфигурационной переменной
\V{root\_dir}. Этот путь эквивалентен пути
\V{\$\{root\_dir\}/checkers}.
{\small
\begin{verbatim}
script_dir = ../checkers
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{var\_dir}}
\label{descServeCfgVarDir}
\hypertarget{F:serve.cfg,T:var_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{var\_dir} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{путь к каталогу}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{var}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
путь к каталогу, в котором хранятся архивные и рабочие файлы
турнира. Если переменная в конфигурационном файле не
установлена, её значение полагается равным \V{var}. Полный путь
к каталогу получается конкатенацией значения переменной
\hyperlink{F:serve.cfg,T:root_dir}{\V{root\_dir}} и данной
переменной.

\B{Внимание.} Изменять значение по умолчанию данной переменной
не рекомендуется. Изменение должно быть согласовано с
конфигурационными файлами CGI-программ.

%\newpage

\subsubsection{Переменная \V{archive\_dir}}
\label{descServeCfgArchiveDir}
\hypertarget{F:serve.cfg,T:archive_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{archive\_dir} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{путь к каталогу}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{archive}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
путь к каталогу, в котором размещаются архивы турнира. 
Полный путь к каталогу с проверяющими программами определяется
по следующим правилам:
\begin{itemize}
\item
Если значение переменной \V{archive\_dir} не задано, используется
значение \V{archive}.
\item
Если значение переменной \V{archive\_dir} начинается с символа
\V{'/'}, то есть значение переменной задаёт полный абсолютный
путь к каталогу скриптов, этот путь используется без изменений.
\item
Если значение переменной \V{archive\_dir} не начинается с символа
\V{'/'}, полный путь к каталогу скриптов образуется
конкатенацией значения переменной
\hyperlink{F:serve.cfg,T:conf_dir}{\V{var\_dir}} и значения
переменной \V{archive\_dir}.
\end{itemize}

\newpage
\subsubsection{Переменная \V{clar\_archive\_dir}}
\label{descServeCfgClarArchiveDir}
\hypertarget{F:serve.cfg,T:clar_archive_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{clar\_archive\_dir} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{путь к каталогу}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{clars}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
путь к каталогу, в котором размещается архив сообщений турнира. 
Полный путь к каталогу с архивом сообщений определяется по
следующим правилам:
\begin{itemize}
\item
Если значение переменной \V{clar\_archive\_dir} не задано, используется
значение \V{clars}.
\item
Если значение переменной \V{clar\_archive\_dir} начинается с символа
\V{'/'}, то есть значение переменной задаёт полный абсолютный
путь к каталогу скриптов, этот путь используется без изменений.
\item
Если значение переменной \V{clar\_archive\_dir} не начинается с символа
\V{'/'}, полный путь к каталогу скриптов образуется
конкатенацией значения переменной
\hyperlink{F:serve.cfg,T:conf_dir}{\V{archive\_dir}} и значения
переменной \V{clar\_archive\_dir}.
\end{itemize}

%\newpage

\subsubsection{Переменная \V{run\_archive\_dir}}
\label{descServeCfgRunArchiveDir}
\hypertarget{F:serve.cfg,T:run_archive_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{run\_archive\_dir} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{путь к каталогу}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{runs}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
путь к каталогу, в котором размещается архив посылок от
участников турнира. Полный путь к каталогу с архивом посылок
определяется по следующим правилам:
\begin{itemize}
\item
Если значение переменной \V{run\_archive\_dir} не задано, используется
значение \V{runs}.
\item
Если значение переменной \V{run\_archive\_dir} начинается с символа
\V{'/'}, то есть значение переменной задаёт полный абсолютный
путь к каталогу скриптов, этот путь используется без изменений.
\item
Если значение переменной \V{run\_archive\_dir} не начинается с символа
\V{'/'}, полный путь к каталогу скриптов образуется
конкатенацией значения переменной
\hyperlink{F:serve.cfg,T:conf_dir}{\V{archive\_dir}} и значения
переменной \V{run\_archive\_dir}.
\end{itemize}

%\newpage

\subsubsection{Переменная \V{report\_archive\_dir}}
\label{descServeCfgReportArchiveDir}
\hypertarget{F:serve.cfg,T:report_archive_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{report\_archive\_dir} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{путь к каталогу}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{reports}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
путь к каталогу, в котором размещается архив протоколов запусков
решений участников турнира. Полный путь к каталогу с архивом
протоколов определяется по следующим правилам:
\begin{itemize}
\item
Если значение переменной \V{report\_archive\_dir} не задано,
используется значение \V{reports}.
\item
Если значение переменной \V{report\_archive\_dir} начинается с
символа \V{'/'}, то есть значение переменной задаёт полный
абсолютный путь к каталогу скриптов, этот путь используется без
изменений.
\item
Если значение переменной \V{report\_archive\_dir} не начинается
с символа \V{'/'}, полный путь к каталогу скриптов образуется
конкатенацией значения переменной
\hyperlink{F:serve.cfg,T:conf_dir}{\V{archive\_dir}} и значения
переменной \V{report\_archive\_dir}.
\end{itemize}

%\newpage

\subsubsection{Переменная \V{team\_report\_archive\_dir}}
\label{descServeCfgTeamReportArchiveDir}
\hypertarget{F:serve.cfg,T:team_report_archive_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{team\_report\_archive\_dir} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{путь к каталогу}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{teamreports}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
путь к каталогу, в котором размещается архив протоколов
участников запусков решений участников турнира. Полный путь к
каталогу с архивом протоколов определяется по следующим
правилам:
\begin{itemize}
\item
Если значение переменной \V{team\_report\_archive\_dir} не
задано, используется значение \V{teamreports}.
\item
Если значение переменной \V{team\_report\_archive\_dir}
начинается с символа \V{'/'}, то есть значение переменной задаёт
полный абсолютный путь к каталогу скриптов, этот путь
используется без изменений.
\item
Если значение переменной \V{team\_report\_archive\_dir} не
начинается с символа \V{'/'}, полный путь к каталогу скриптов
образуется конкатенацией значения переменной
\hyperlink{F:serve.cfg,T:conf_dir}{\V{archive\_dir}} и значения
переменной \V{team\_report\_archive\_dir}.
\end{itemize}

%\newpage

\subsubsection{Переменная \V{status\_dir}}
\label{descServeCfgStatusDir}
\hypertarget{F:serve.cfg,T:status_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{status\_dir} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{путь к каталогу}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{status}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
путь к каталогу, в котором находятся файлы состояния турнира. К
таким файлам относятся таблица текущих результатов и файл
статуса сервера. Полный путь к этому каталогу определяется по
следующим правилам:
\begin{itemize}
\item
Если значение переменной \V{status\_dir} не
задано, используется значение \V{status}.
\item
Если значение переменной \V{status\_dir}
начинается с символа \V{'/'}, то есть значение переменной задаёт
полный абсолютный путь к каталогу скриптов, этот путь
используется без изменений.
\item
Если значение переменной \V{status\_dir} не
начинается с символа \V{'/'}, полный путь к каталогу скриптов
образуется конкатенацией значения переменной
\hyperlink{F:serve.cfg,T:var_dir}{\V{var\_dir}} и значения
переменной \V{status\_dir}.
\end{itemize}

\B{Внимание.} Изменять значение по умолчанию данной переменной
не рекомендуется. Изменение должно быть согласовано с
конфигурационными файлами CGI-программ.

\newpage
\subsubsection{Переменная \V{work\_dir}}
\label{descServeCfgWorkDir}
\hypertarget{F:serve.cfg,T:work_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{work\_dir} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{compile}, \S{run} \\
Тип содержимого:       & \I{путь к каталогу}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{work}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
путь к каталогу, используемому для временных файлов программами
\S{compile} и \S{run}. Каждая из этих программ использует свой
подкаталог в этом каталоге. Например, программа \S{compile}
копирует в рабочий каталог файл исходного текста, компилирует
его в исполняемый файл в рабочем каталоге, который затем
копируется в каталоги обмена с программой \S{serve}. Полный путь
к этому каталогу определяется по следующим правилам:
\begin{itemize}
\item
Если значение переменной \V{work\_dir} не
задано, используется значение \V{work}.
\item
Если значение переменной \V{work\_dir}
начинается с символа \V{'/'}, то есть значение переменной задаёт
полный абсолютный путь к каталогу скриптов, этот путь
используется без изменений.
\item
Если значение переменной \V{work\_dir} не
начинается с символа \V{'/'}, полный путь к каталогу скриптов
образуется конкатенацией значения переменной
\hyperlink{F:serve.cfg,T:var_dir}{\V{var\_dir}} и значения
переменной \V{work\_dir}.
\end{itemize}

\B{Внимание.} Если планируется параллельная работа нескольких
программ \S{compile} или нескольких программ \S{run} на
нескольких компьютерах с обменом через каталоги, монтируемые с
сервера, один и тот же рабочий каталог компиляции и запуска
программ не должен разделяться несколькими работающими
программами.

\newpage
\subsubsection{Переменная \V{compile\_work\_dir}}
\label{descServeCfgCompileWorkDir}
\hypertarget{F:serve.cfg,T:compile_work_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{compile\_work\_dir} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{compile}, \S{run} \\
Тип содержимого:       & \I{путь к каталогу}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{compile}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
путь к каталогу, используемому для временных файлов программой
\S{compile}. Программа копирует в рабочий каталог файл исходного
текста, компилирует его в исполняемый файл в рабочем каталоге,
который затем копируется в каталоги обмена с программой
\S{serve}. Полный путь к этому каталогу определяется по
следующим правилам:
\begin{itemize}
\item
Если значение переменной \V{compile\_work\_dir} не
задано, используется значение \V{compile}.
\item
Если значение переменной \V{compile\_work\_dir}
начинается с символа \V{'/'}, то есть значение переменной задаёт
полный абсолютный путь к каталогу скриптов, этот путь
используется без изменений.
\item
Если значение переменной \V{compile\_work\_dir} не
начинается с символа \V{'/'}, полный путь к каталогу скриптов
образуется конкатенацией значения переменной
\hyperlink{F:serve.cfg,T:work_dir}{\V{work\_dir}} и значения
переменной \V{compile\_work\_dir}.
\end{itemize}

\B{Внимание.} Если планируется параллельная работа нескольких
программ \S{compile} на нескольких компьютерах с обменом через
каталоги, монтируемые с сервера, один и тот же рабочий каталог
компиляции программ не должен разделяться несколькими
работающими программами. Наилучший способ добиться этого ---
расположить рабочий каталог на локальном диске.

\B{Пример.}
{\small
\begin{verbatim}
compile_work_dir = /tmp/compile
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{run\_work\_dir}}
\label{descServeCfgRunWorkDir}
\hypertarget{F:serve.cfg,T:run_work_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{run\_work\_dir} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{compile}, \S{run} \\
Тип содержимого:       & \I{путь к каталогу}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{runwork}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
путь к каталогу, используемому для временных файлов программой
\S{run}. В этом каталоге хранится временная копия тестируемой
программы, а также файлы протокола запуска тестируемой
программы. Тестируемые программы запускаются в другом каталоге,
задаваемом конфигурационной переменной \V{run\_check\_dir}.
После завершения проверки программы рабочий каталог очищается.
Полный путь к этому каталогу определяется по следующим правилам:
\begin{itemize}
\item
Если значение переменной \V{run\_work\_dir} не
задано, используется значение \V{runwork}.
\item
Если значение переменной \V{run\_work\_dir}
начинается с символа \V{'/'}, то есть значение переменной задаёт
полный абсолютный путь к каталогу скриптов, этот путь
используется без изменений.
\item
Если значение переменной \V{run\_work\_dir} не
начинается с символа \V{'/'}, полный путь к каталогу скриптов
образуется конкатенацией значения переменной
\hyperlink{F:serve.cfg,T:work_dir}{\V{work\_dir}} и значения
переменной \V{run\_work\_dir}.
\end{itemize}

\B{Внимание.} Если планируется параллельная работа нескольких
программ \S{run} на нескольких компьютерах с обменом через
каталоги, монтируемые с сервера, один и тот же рабочий каталог
запуска программ не должен разделяться несколькими
работающими программами. Наилучший способ добиться этого ---
расположить рабочий каталог на локальном диске.

\B{Пример.}
{\small
\begin{verbatim}
run_work_dir = /tmp/runwork
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{run\_check\_dir}}
\label{descServeCfgRunCheckDir}
\hypertarget{F:serve.cfg,T:run_check_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{run\_check\_dir} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{путь к каталогу}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{runcheck}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
путь к каталогу, используемому для тестирования программой
\S{run}. Для запуска проверяемой программы на каждом тесте в
этот каталог копируется сама программа, затем входной файл
теста. В каталоге создаются пустые выходные файлы. После этого
запускается тестируемая программа. После каждого запуска и
проверки результатов содержимое каталога очищается.
Полный путь к этому каталогу определяется по следующим правилам:
\begin{itemize}
\item
Если значение переменной \V{run\_check\_dir} не
задано, используется значение \V{runcheck}.
\item
Если значение переменной \V{run\_check\_dir}
начинается с символа \V{'/'}, то есть значение переменной задаёт
полный абсолютный путь к каталогу скриптов, этот путь
используется без изменений.
\item
Если значение переменной \V{run\_check\_dir} не
начинается с символа \V{'/'}, полный путь к каталогу скриптов
образуется конкатенацией значения переменной
\hyperlink{F:serve.cfg,T:work_dir}{\V{work\_dir}} и значения
переменной \V{run\_check\_dir}.
\end{itemize}

\B{Внимание.} Если планируется параллельная работа нескольких
программ \S{run} на нескольких компьютерах с обменом через
каталоги, монтируемые с сервера, один и тот же каталог запуска
программ не должен разделяться несколькими работающими
программами. Наилучший способ добиться этого --- расположить
рабочий каталог на локальном диске.

\B{Пример.}
{\small
\begin{verbatim}
run_check_dir = /tmp/runcheck
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{compile\_dir}}
\label{descServeCfgCompileDir}
\hypertarget{F:serve.cfg,T:compile_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{compile\_dir} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve}, \S{compile} \\
Тип содержимого:       & \I{путь к каталогу}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{compile}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная переменная задаёт каталоги обмена между
программами \S{serve} и \S{compile}.
Полный путь к этому каталогу определяется по следующим правилам:
\begin{itemize}
\item
Если значение переменной \V{compile\_dir} не
задано, используется значение \V{compile}.
\item
Если значение переменной \V{compile\_dir}
начинается с символа \V{'/'}, то есть значение переменной задаёт
полный абсолютный путь к каталогу скриптов, этот путь
используется без изменений.
\item
Если значение переменной \V{compile\_dir} не
начинается с символа \V{'/'}, полный путь к каталогу скриптов
образуется конкатенацией значения переменной
\hyperlink{F:serve.cfg,T:var_dir}{\V{var\_dir}} и значения
переменной \V{compile\_dir}.
\end{itemize}

Каталог обмена содержит в себе несколько подкаталогов,
назначение которых описывается ниже.
\begin{itemize}
\item
Подкаталог \K{queue} используется для передачи информации от
программы \S{serve} к программе \S{compile}. Программа \S{serve}
помещает в этот каталог небольшие файлы, содержащие служебную
информацию о программе, которую необходимо скомпилировать (так
называемый <<пакет задания компиляции>>). Программа \S{compile}
периодически просматривает этот каталог и при появлении в нём
новых пакетов задания компиляции выполняет их. Этот каталог
может использоваться совместно несколькими программами
\S{serve}, обслуживающими разные турниры, и несколькими
программами \S{compile}, например, работающими на разных
компьютерах в сети. Этот каталог имеет специальную структуру,
чтобы предотвратить синхронизационные ошибки при одновременном
доступе нескольких программ.
\item
Подкаталог \K{src} используется для передачи информации от
программы \S{serve} к программе \S{compile}. Программа \S{serve}
помещает в этот каталог файл исходного текста программы, которую
необходимо скомпилировать. Файл с текстом программы имеет то же
самое имя, что и пакет задания компиляции для этой
программы. Программа \S{compile} считывает файл исходного текста
после файла пакета задания компиляции. Этот каталог может
использоваться совместно несколькими программами \S{serve},
обслуживающими разные турниры, и несколькими программами
\S{compile}. Синхронизация доступа поддерживается в каталоге
\V{queue}, поэтому никакой дополнительной синхронизации в
каталоге \V{src} не требуется.
\item
Подкаталог \K{status} используется для передачи информации от
программы \S{compile} к программе \S{serve}. В этот каталог
программа \S{compile} помещает небольшой файл с информацией о
результате компиляции (так называемый <<пакет результата
компиляции>>). Программа \S{serve} периодически просматривает
данный каталог и при появлении в нём новых файлов обновляет своё
внутреннее состояние. Поскольку каталог может использоваться
одновременно несколькими программами \S{compile} и одной
программой \S{serve}, он имеет специальную структуру для
предотвращения синхронизационных ошибок.
\item
Подкаталог \K{report} используется для передачи информации от
программы \S{compile} к программе \S{serve}. В этот каталог
программа \S{compile} помещает список ошибок, выданных при
неуспешной компиляции, или скомпилированный исполняемый файл в
случае успешной компиляции. Каталог может использоваться
одновременно несколькими программами \S{compile} и одной
программой \S{serve}, но синхронизация доступа ведётся с помощью
каталога \V{status}, поэтому никакой дополнительной
синхронизации в каталоге \V{report} не требуется.
\item
Символическая ссылка \K{<номер>}, где \V{<номер>} ---
четырёхзначный идентификатор турнира. Эта символическая ссылка
создаётся в каталоге, задаваемом переменной \V{compile\_dir},
программы \S{compile}, и указывает на каталог, задаваемый
переменной \V{compile\_dir}, программы \S{serve}. Если эти
каталоги совпадают, символическая ссылка указывает на каталог, в
котором она находится. С помощью этой символической ссылки
программа \S{compile} может обслуживать одновременно несколько
турниров, записывая результаты компиляции в каталог обмена
только соответствующего турнира.
\end{itemize}

\B{Пример.}
С помощью задания каталога обмена можно добиться того, что
несколько одновременно работающих серверов турнира будут
использовать одну программу компиляции \S{compile}. Для этого
создаётся отдельный каталог для программы \S{compile}, например
\V{/var/ejudge/compile}. Этот каталог указывается в качестве
коревого в конфигурационном файле программы \S{compile} c
помощью строки
{\small
\begin{verbatim}
root_dir = /var/ejudge/compile
\end{verbatim}
}
Программа \S{compile} запускается в каталоге
\V{/var/ejudge/compile}. Теперь во всех конфигурационных файлах
серверов турниров для использования этой программы компиляции
достаточно установить переменную \V{compile\_dir} в следующее
значение:
{\small
\begin{verbatim}
compile_dir = /var/ejudge/compile/var/compile
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{run\_dir}}
\label{descServeCfgRunDir}
\hypertarget{F:serve.cfg,T:run_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{run\_dir} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve}, \S{run} \\
Тип содержимого:       & \I{путь к каталогу}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{run}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная переменная задаёт каталоги обмена между
программами \S{serve} и \S{run}.
Полный путь к этому каталогу определяется по следующим правилам:
\begin{itemize}
\item
Если значение переменной \V{run\_dir} не
задано, используется значение \V{run}.
\item
Если значение переменной \V{run\_dir}
начинается с символа \V{'/'}, то есть значение переменной задаёт
полный абсолютный путь к каталогу скриптов, этот путь
используется без изменений.
\item
Если значение переменной \V{run\_dir} не
начинается с символа \V{'/'}, полный путь к каталогу скриптов
образуется конкатенацией значения переменной
\hyperlink{F:serve.cfg,T:var_dir}{\V{var\_dir}} и значения
переменной \V{run\_dir}.
\end{itemize}

Каталог обмена содержит в себе несколько подкаталогов,
назначение которых описывается ниже.
\begin{itemize}
\item
Подкаталог \K{queue} используется для передачи информации от
программы \S{serve} к программе \S{run}. Программа \S{serve}
помещает в этот каталог небольшие файлы, содержащие служебную
информацию о программе, которую необходимо протестировать (так
называемый <<пакет задания тестирования>>). Программа \S{run}
периодически просматривает этот каталог и при появлении в нём
новых пакетов задания тестирования выполняет их. Этот каталог
может использоваться совместно несколькими программами
\S{serve}, обслуживающими разные турниры, и несколькими
программами \S{run}, например, работающими на разных компьютерах
в сети. Этот каталог имеет специальную структуру, чтобы
предотвратить синхронизационные ошибки при одновременном доступе
нескольких программ.
\item
Подкаталог \K{exe} используется для передачи информации от
программы \S{serve} к программе \S{run}. Программа \S{serve}
помещает в этот каталог исполняемый файл программы, которую
необходимо протестировать. Исполняемый файл программы имеет то
же самое имя, что и пакет задания тестирования для этой
программы. Программа \S{run} считывает исполняемый файл после
файла пакета задания компиляции. Этот каталог может
использоваться совместно несколькими программами \S{serve},
обслуживающими разные турниры, и несколькими программами
\S{run}. Синхронизация доступа поддерживается в каталоге 
\V{queue}, поэтому никакой дополнительной синхронизации в
каталоге \V{exe} не требуется.
\item
Подкаталог \K{status} используется для передачи информации от
программы \S{run} к программе \S{serve}. В этот каталог
программа \S{run} помещает небольшой файл с информацией о
результате тестирования (так называемый <<пакет результата
тестирования>>). Программа \S{serve} периодически просматривает
данный каталог и при появлении в нём новых файлов обновляет своё
внутреннее состояние. Поскольку каталог может использоваться
одновременно несколькими программами \S{run} и одной программой
\S{serve}, он имеет специальную структуру для предотвращения
синхронизационных ошибок.
\item
Подкаталог \K{report} используется для передачи информации от
программы \S{run} к программе \S{serve}. В этот каталог
программа \S{run} помещает судейский вариант протокола
тестирования. Каталог может использоваться одновременно
несколькими программами \S{run} и одной программой \S{serve}, но
синхронизация доступа ведётся с помощью каталога \V{status},
поэтому никакой дополнительной синхронизации в каталоге
\V{report} не требуется.
\item
Подкаталог \K{teamreport} используется для передачи информации
от программы \S{run} к программе \S{serve}. В этот каталог
программа \S{run} помещает пользовательский вариант протокола
тестирования, если эта опция включена в конфигурационном файле
турнира. Каталог может использоваться одновременно несколькими
программами \S{run} и одной программой \S{serve}, но
синхронизация доступа ведётся с помощью каталога \V{status},
поэтому никакой дополнительной синхронизации в каталоге
\V{teamreport} не требуется.
\item
Символическая ссылка \K{<номер>}, где \V{<номер>} ---
четырёхзначный идентификатор турнира. Эта символическая ссылка
создаётся в каталоге, задаваемом переменной \V{run\_dir},
программы \S{run}, и указывает на каталог, задаваемый переменной
\V{compile\_dir}, программы \S{serve}. Если эти каталоги
совпадают, символическая ссылка указывает на каталог, в
котором она находится. С помощью этой символической ссылки
программа \S{run} может обслуживать одновременно несколько
турниров, записывая результаты тестирования в каталог обмена
только соответствующего турнира.
\end{itemize}

\B{Пример.}
С помощью задания каталога обмена можно добиться того, что
несколько одновременно работающих серверов турнира будут
использовать одну программу тестирования \S{run}. Для этого
создаётся отдельный каталог для программы \S{run}, например
\V{/var/ejudge/run}. Этот каталог указывается в качестве
корневого в конфигурационном файле программы \S{run} c помощью
строки
{\small
\begin{verbatim}
root_dir = /var/ejudge/run
\end{verbatim}
}
Программа \S{run} запускается в каталоге \V{/var/ejudge/run}.
Теперь во всех конфигурационных файлах серверов турниров для
использования этой программы тестирования достаточно установить
переменную \V{run\_dir} в следующее значение:
{\small
\begin{verbatim}
run_dir = /var/ejudge/run/var/compile
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{serve\_socket}}
\label{descServeCfgServeSocket}
\hypertarget{F:serve.cfg,T:serve_socket}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{serve\_socket} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{путь к UNIX-сокету}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{serve}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
путь к UNIX-сокету, который используется программой \S{serve}
для взаимодействия с CGI-программами. Программа \S{serve}
создаёт UNIX-сокет при запуске и удаляет при завершении, если
только в командной строке не был задан ключ \V{-S}. Полный путь
к сокету определяется по следующим правилам.
\begin{itemize}
\item
Если значение переменной \V{serve\_socket} не задано,
используется значение \V{serve}.
\item
Если значение переменной \V{serve\_socket} начинается с символа
\V{'/'}, то есть значение переменной задаёт полный абсолютный
путь к каталогу скриптов, этот путь используется без изменений.
\item
Если значение переменной \V{serve\_socket} не начинается с
символа \V{'/'}, полный путь к каталогу скриптов образуется
конкатенацией значения переменной
\hyperlink{F:serve.cfg,T:var_dir}{\V{var\_dir}} и значения
переменной \V{serve\_socket}.
\end{itemize}

\B{Внимание.} Изменять значение данной конфигурационной
переменной не рекомендуется.

%\newpage

\subsubsection{Переменная \V{run\_log\_file}}
\label{descServeCfgRunLogFile}
\hypertarget{F:serve.cfg,T:run_log_file}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{run\_log\_file} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{путь к файлу}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{run.log}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
путь к файлу, в котором программа \S{serve} хранит базу посылок
пользователей. Полный путь к файлу определяется по следующим
правилам.
\begin{itemize}
\item
Если значение переменной \V{run\_log\_file} не задано,
используется значение \V{run.log}.
\item
Если значение переменной \V{run\_log\_file} начинается с символа
\V{'/'}, то есть значение переменной задаёт полный абсолютный
путь к файлу, этот путь используется без изменений.
\item
Если значение переменной \V{run\_log\_file} не начинается с
символа \V{'/'}, полный путь к файлу образуется конкатенацией
значения переменной
\hyperlink{F:serve.cfg,T:var_dir}{\V{var\_dir}} и значения
переменной \V{run\_log\_file}.
\end{itemize}

\B{Внимание.} Изменять значение данной конфигурационной
переменной не рекомендуется.

%\newpage

\subsubsection{Переменная \V{clar\_log\_file}}
\label{descServeCfgClarLogFile}
\hypertarget{F:serve.cfg,T:clar_log_file}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{clar\_log\_file} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{путь к файлу}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{clar.log}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
путь к файлу, в котором программа \S{serve} хранит базу
сообщений. Полный путь к файлу определяется по следующим
правилам.
\begin{itemize}
\item
Если значение переменной \V{clar\_log\_file} не задано,
используется значение \V{clar.log}.
\item
Если значение переменной \V{clar\_log\_file} начинается с символа
\V{'/'}, то есть значение переменной задаёт полный абсолютный
путь к файлу, этот путь используется без изменений.
\item
Если значение переменной \V{clar\_log\_file} не начинается с
символа \V{'/'}, полный путь к файлу образуется конкатенацией
значения переменной
\hyperlink{F:serve.cfg,T:var_dir}{\V{var\_dir}} и значения
переменной \V{clar\_log\_file}.
\end{itemize}

\B{Внимание.} Изменять значение данной конфигурационной
переменной не рекомендуется.

%\newpage

\subsubsection{Переменная \V{cr\_serialization\_key}}
\label{descServeCfgCrSerializationKey}
\hypertarget{F:serve.cfg,T:cr_serialization_key}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{cr\_serialization\_key} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{compile}, \S{run} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{нет}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная позволяет
установить идентификатор SYSV IPC семафора, который будет
использоваться для сериализации работы программ \S{compile} и
\S{run}. Если эта конфигурационная переменная не установлена,
сериализация запуска проводится не будет, то есть, если
несколько программ \S{compile} и (или) несколько программ
\S{run} работают на одной машине, возможен случай, когда все
программы будут работать одновременно. Если сериализация
включена, то не более одной программы будет выполняться в каждый
момент времени.

\B{Пример.}
{\small
\begin{verbatim}
cr_serialization_key = 12345
\end{verbatim}
}

%\newpage

\subsubsection{Переменная \V{inactivity\_timeout}}
\label{descServeCfgInactivityTimeout}
\hypertarget{F:serve.cfg,T:inactivity_timeout}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{inactivity\_timeout} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve}, \S{run} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{120}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная действует, если
программа \S{serve} запущена с ключом \V{-S} в командной
строке. Данный ключ передаёт программе \S{serve} файловый
дескриптор UNIX-сокета, который будет использоваться как сокет
команд программы \S{serve}. Этот аргумент командной строки
используется, когда сервер турнира запускается по требованию
программой \S{super-serve}. Конфигурационная переменная
\V{inactivity\_timeout} задаёт время в секундах, после которого
программа \S{serve} завершает свою работу, если за указанный
промежуток времени к ней не было ни одного обращения. Если
значение конфигурационной переменной не установлено,
предполагается значение 120 секунд (2 минуты). Если значение
переменной установлено в 0, значение тайм-аута полагается
неограниченным. 

Для программы \S{run} данная конфигурационная переменная
действует, если эта программа запущена с ключом \V{-S} в
командной строке. Этот аргумент командной строки используется,
когда сервер проверки решений запускается по требованию
программой \S{super-serve}.  Конфигурационная переменная
\V{inactivity\_timeout} задаёт время в секундах, после которого
программа \S{run} завершает свою работу, если за указанный
промежуток времени к ней не было ни одного обращения. Если
значение конфигурационной переменной не установлено,
предполагается значение 120 секунд (2 минуты). Если значение
переменной установлено в 0, значение тайм-аута полагается
неограниченным. 

\B{Пример.}
{\small
\begin{verbatim}
inactivity_timeout = 300
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{score\_system}}
\label{descServeCfgScoreSystem}
\hypertarget{F:serve.cfg,T:score_system}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{score\_system} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{score\_system}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{ACM}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная переменная определяет тип турнира.
Поддерживаются три типа турниров, описываемых ниже.
\begin{itemize}
\item Тип турнира \I{ACM}. Этот тип задаётся строкой
{\small
\begin{verbatim}
score_system = acm
\end{verbatim}
}
в конфигурационном файле турнира. Данный тип турнира
соответствует регламенту проведения чемпионата мира среди
студенческих команд ACM. Он имеет следующие характеристики:
\begin{enumerate}
\item
Проверка решений ведётся непосредственно по ходу турнира.
На каждую свою посылку участники немедленно получают ответ с
результатами её тестирования.
\item
Участники ранжируются по числу решённых задач. Чем больше решено
задач, тем выше место участника. Среди участников, решивших
одинаковое количество задач, участники ранжируются по количеству
штрафных очков. Чем меньше штрафных очков, тем выше место
участника.
\item
Участник считается решившим задачу, если решение этой задачи,
посланное участником, успешно прошло все тесты. Частичные
решения не засчитываются.
\item
Штрафные очки для участника считаются как сумма штрафных очков
по всем задачам, решённым участником. Нерешённые задачи не дают
вклада в штрафные очки. Для решённой задачи штрафные очки по ней
вычисляются как количество минут, прошедших от начала турнира до
момента сдачи задачи, плюс по 20 минут за каждую предыдущую
неуспешную попытку сдачи задачи. Попытки сдачи программы после
успешной не учитываются.
\end{enumerate}

\item
Тип турнира \I{KIROV}. Данный тип турниров придуман
В. Матюхиным. Этот тип задаётся строкой
{\small
\begin{verbatim}
score_system = kirov
\end{verbatim}
}
в конфигурационном файле турнира. Он имеет следующие
характеристики:
\begin{enumerate}
\item
Проверка решений ведётся непосредственно по ходу турнира.
На каждую свою посылку участники немедленно получают ответ с
результатами её тестирования.
\item
Участники ранжируются по числу набранных баллов. Чем больше
баллов набрал участник, тем выше его место.
\item
Баллы, набранные участником, считаются как сумма баллов по
каждой из задач турнира. Количество баллов, полученных
участником за задачу, вычисляется как максимальное количество
баллов, полученных участником за все попытки сдачи задачи.
\item
Баллы, полученные участником за попытку вычисляются следующим
образом:
\begin{itemize}
\item
Если решение участника прошло все тесты, оно получает полный
балл за эту задачу (см. конфигурационную переменную
\hyperlink{F:serve.cfg,S:problem,T:full_score}{\V{full\_score}})
за вычетом произведения штрафных баллов за попытку
(см. конфигурационную переменную
\hyperlink{F:serve.cfg,S:problem,T:run_penalty}{\V{run\_penalty}})
помноженных на количество предыдущих попыток сдачи решения. Если
в результате получается число, меньшее нуля, количество баллов
полагается равным нулю.
\item
Если решение участника прошло часть тестов (либо не прошло ни
одного теста), оно получает частичный балл за эту задачу в
зависимости от конфигурационных переменных
\hyperlink{F:serve.cfg,S:problem,T:test_score}{\V{test\_score}},
\hyperlink{F:serve.cfg,S:problem,T:test_score_list}{\V{test\_score\_list}},
\hyperlink{F:serve.cfg,S:problem,T:test_sets}{\V{test\_sets}}
за вычетом произведения штрафных баллов за попытку
(см. конфигурационную переменную
\hyperlink{F:serve.cfg,S:problem,T:run_penalty}{\V{run\_penalty}})
помноженных на количество предыдущих попыток сдачи решения. Если
в результате получается число, меньшее нуля, количество баллов
полагается равным нулю.
\end{itemize}
\end{enumerate}

\item
Тип турнира \I{OLYMPIAD}. Этот тип задаётся строкой
{\small
\begin{verbatim}
score_system = olympiad
\end{verbatim}
}
в конфигурационном файле турнира. Данный тип турнира
соответствует регламенту проведения российских и международных
олимпиад по информатике. Он имеет следующие характеристики.
\begin{enumerate}
\item
Полная проверка решений участников ведётся после окончания
основного времени турнира. Во время турнира присылаемые решения
проверяются на нескольких первых тестах (см. конфигурационную
переменную
\hyperlink{F:serve.cfg,T:tests_to_accept}{\V{tests\_to\_accept}}).
Если решение участника прошло все предварительные тесты, оно
принимается для последующей проверки, а если решение не прошло
хотя бы один тест, оно для проверки не принимается и в
окончательной проверке решений по окончанию турнира не
участвует.
\item
Участники ранжируются по числу набранных баллов. Чем больше
баллов набрал участник, тем выше его место.
\item
Баллы, набранные участником, считаются как сумма баллов по
каждой из задач турнира. Количество баллов, полученных
участником за задачу, вычисляется как максимальное количество
баллов, полученных участником за все попытки сдачи задачи.
\item
Баллы, полученные участником за попытку вычисляются следующим
образом:
\begin{itemize}
\item
Если решение участника прошло все тесты, оно получает полный
балл за эту задачу (см. конфигурационную переменную
\hyperlink{F:serve.cfg,S:problem,T:full_score}{\V{full\_score}})
за вычетом произведения штрафных баллов за попытку
(см. конфигурационную переменную
\hyperlink{F:serve.cfg,S:problem,T:run_penalty}{\V{run\_penalty}})
помноженных на количество предыдущих попыток сдачи решения. Если
в результате получается число, меньшее нуля, количество баллов
полагается равным нулю.
\item
Если решение участника прошло часть тестов (либо не прошло ни
одного теста), оно получает частичный балл за эту задачу в
зависимости от конфигурационных переменных
\hyperlink{F:serve.cfg,S:problem,T:test_score}{\V{test\_score}},
\hyperlink{F:serve.cfg,S:problem,T:test_score_list}{\V{test\_score\_list}},
\hyperlink{F:serve.cfg,S:problem,T:test_sets}{\V{test\_sets}}
за вычетом произведения штрафных баллов за попытку
(см. конфигурационную переменную
\hyperlink{F:serve.cfg,S:problem,T:run_penalty}{\V{run\_penalty}})
помноженных на количество предыдущих попыток сдачи решения. Если
в результате получается число, меньшее нуля, количество баллов
полагается равным нулю.
\end{itemize}
\end{enumerate}
\end{itemize}

%\newpage
\subsubsection{Переменная \V{virtual}}
\label{descServeCfgVirtual}
\hypertarget{F:serve.cfg,T:virtual}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{virtual} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{false}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная позволяет
устанавливать режим виртуального турнира. Виртуальный турнир
поддерживается только для типа турнира \I{ACM}. Виртуальный
турнир отличается тем, что отчёт времени для каждого участника
ведётся независимо от других участников. Каждый участник
получает возможность начать турнир в произвольный удобный для
него момент времени. По истечении заданной продолжительности
турнира (см. параметр
\hyperlink{F:serve.cfg,T:contest_time}{\V{contest\_time}})
турнир для этого участника автоматически завершится.

\B{Пример.} Данный пример устанавливает режим виртуальности
турнира.
{\small
\begin{verbatim}
virtual
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{test\_sfx}}
\label{descServeCfgTestSfx}
\hypertarget{F:serve.cfg,T:test_sfx}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{test\_sfx} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{""} (пустая строка)\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
суффикс имён файлов, в которых хранятся входные данные тестов.
Полный путь к очередному тесту определяется следующим образом:
{\small
\begin{verbatim}
path=${prob.test_dir}/${prob.short_name}/${test_num}${prob.test_sfx}
\end{verbatim}
}
Здесь \V{prob} --- это задача, решаемая тестируемой
программой. \V{test\_num} --- это номер теста с тремя десятичными
цифрами (включая ведущие незначащие нули).
\V{\$\{prob.test\_dir\}} --- это значение конфигурационной
переменной
\hyperlink{F:serve.cfg,S:problem,T:test_dir}{\V{test\_dir}}
задачи. Если описание задачи не устанавливает эту переменную,
используется глобальная переменная
\hyperlink{F:serve.cfg,T:test_dir}{\V{test\_dir}}.
\V{\$\{prob.short\_name\}} --- это короткое имя задачи
(значение конфигурационной переменной
\hyperlink{F:serve.cfg,S:problem,T:short_name}{\V{short\_name}})
описания задачи. \V{\$\{prob.test\_sfx\}} --- это значение
конфигурационной переменной
\hyperlink{F:serve.cfg,S:problem,T:test_sfx}{\V{test\_sfx}}
описания задачи. Если в описании задачи эта переменная не
установлена, используется глобальная переменная \V{test\_sfx}.

\B{Пример.}
{\small
\begin{verbatim}
test_sfx = ".dat"
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{corr\_sfx}}
\label{descServeCfgCorrSfx}
\hypertarget{F:serve.cfg,T:corr_sfx}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{corr\_sfx} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{""} (пустая строка)\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
суффикс имён файлов, в которых хранятся правильные ответы к
тестам. Полный путь к очередному правильному ответу определяется
следующим образом:
{\small
\begin{verbatim}
path=${prob.corr_dir}/${prob.short_name}/${test_num}${prob.corr_sfx}
\end{verbatim}
}
Здесь \V{prob} --- это задача, решаемая тестируемой
программой. \V{test\_num} --- это номер теста с тремя десятичными
цифрами (включая ведущие незначащие нули).
\V{\$\{prob.corr\_dir\}} --- это значение конфигурационной
переменной
\hyperlink{F:serve.cfg,S:problem,T:corr_dir}{\V{corr\_dir}}
задачи. Если описание задачи не устанавливает эту переменную,
используется глобальная переменная
\hyperlink{F:serve.cfg,T:corr_dir}{\V{corr\_dir}}.
\V{\$\{prob.short\_name\}} --- это короткое имя задачи
(значение конфигурационной переменной
\hyperlink{F:serve.cfg,S:problem,T:short_name}{\V{short\_name}})
описания задачи. \V{\$\{prob.corr\_sfx\}} --- это значение
конфигурационной переменной
\hyperlink{F:serve.cfg,S:problem,T:corr_sfx}{\V{corr\_sfx}}
описания задачи. Если в описании задачи эта переменная не
установлена, используется глобальная переменная \V{corr\_sfx}.

\B{Пример.}
{\small
\begin{verbatim}
corr_sfx = ".res"
\end{verbatim}
}

%\newpage
\subsubsection{Переменная \V{sound\_player}}
\label{descServeCfgSoundPlayer}
\hypertarget{F:serve.cfg,T:sound_player}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{sound\_player} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{путь к файлу}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{не установлено}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная задаёт полный
путь к программе проигрывания звуковых файлов. Если переменная
установлена, программа \S{run} проигрывает звуковые файлы, пути
к которым установлены в конфигурационных переменных
\hyperlink{F:serve.cfg,T:accept_sound}{\V{accept\_sound}},
\hyperlink{F:serve.cfg,T:runtime_sound}{\V{runtime\_sound}},
\hyperlink{F:serve.cfg,T:runtime_sound}{\V{timelimit\_sound}},
\hyperlink{F:serve.cfg,T:runtime_sound}{\V{wrong\_sound}},
\hyperlink{F:serve.cfg,T:runtime_sound}{\V{presentation\_sound}} и
\hyperlink{F:serve.cfg,T:runtime_sound}{\V{internal\_sound}}
в зависимости от результата тестирования. Звуковое
оповещение о результате тестирования поддерживается только в
режиме турнира \I{ACM}.

\B{Пример.}
{\small
\begin{verbatim}
sound_player = /usr/bin/artsplay
\end{verbatim}
}

%\newpage
\subsubsection{Переменная \V{accept\_sound}}
\label{descServeCfgAcceptSound}
\hypertarget{F:serve.cfg,T:accept_sound}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{accept\_sound} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{путь к файлу}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{не установлено}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Если установлена данная конфигурационная
переменная и установлена конфигурационная переменная
\hyperlink{F:serve.cfg,T:sound_player}{\V{sound\_player}}, при
успешном завершении тестирования, то есть если тестируемая
программа успешно прошла все тесты, будет воспроизведён звуковой
файл, путь к которому указан в данной конфигурационной
переменной. Звуковое оповещение о результате тестирования
поддерживается только в режиме турнира \I{ACM}.

\B{Пример.}
{\small
\begin{verbatim}
accept_sound = /usr/share/ejudge/sound/accept.wav
\end{verbatim}
}

%\newpage
\subsubsection{Переменная \V{runtime\_sound}}
\label{descServeCfgRuntimeSound}
\hypertarget{F:serve.cfg,T:runtime_sound}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{runtime\_sound} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{путь к файлу}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{не установлено}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Если установлена данная конфигурационная
переменная и установлена конфигурационная переменная
\hyperlink{F:serve.cfg,T:sound_player}{\V{sound\_player}}, при
возникновении ошибки времени выполнения (runtime error)
тестируемой программы будет воспроизведён звуковой
файл, путь к которому указан в данной конфигурационной
переменной. Звуковое оповещение о результате тестирования
поддерживается только в режиме турнира \I{ACM}.

\B{Пример.}
{\small
\begin{verbatim}
runtime_sound = /usr/share/ejudge/sound/runtime.wav
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{timelimit\_sound}}
\label{descServeCfgTimelimitSound}
\hypertarget{F:serve.cfg,T:timelimit_sound}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{timelimit\_sound} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{путь к файлу}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{не установлено}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Если установлена данная конфигурационная
переменная и установлена конфигурационная переменная
\hyperlink{F:serve.cfg,T:sound_player}{\V{sound\_player}}, при
превышении максимального времени, отведённого на работу
тестируемой программы, (time limit exceeded) будет воспроизведён
звуковой файл, путь к которому указан в данной конфигурационной
переменной. Звуковое оповещение о результате тестирования
поддерживается только в режиме турнира \I{ACM}.

\B{Пример.}
{\small
\begin{verbatim}
timelimit_sound = /usr/share/ejudge/sound/timelimit.wav
\end{verbatim}
}

%\newpage
\subsubsection{Переменная \V{wrong\_sound}}
\label{descServeCfgWrongSound}
\hypertarget{F:serve.cfg,T:wrong_sound}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{wrong\_sound} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{путь к файлу}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{не установлено}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Если установлена данная конфигурационная
переменная и установлена конфигурационная переменная
\hyperlink{F:serve.cfg,T:sound_player}{\V{sound\_player}}, если на
некотором тесте тестируемая программа дала неправильный ответ
(wrong answer), будет воспроизведён звуковой файл, путь к
которому указан в данной конфигурационной переменной. Звуковое
оповещение о результате тестирования поддерживается только в
режиме турнира \I{ACM}. 

\B{Пример.}
{\small
\begin{verbatim}
wrong_sound = /usr/share/ejudge/sound/wrong.wav
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{presentation\_sound}}
\label{descServeCfgPresentationSound}
\hypertarget{F:serve.cfg,T:presentation_sound}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{presentation\_sound} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{путь к файлу}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{не установлено}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Если установлена данная конфигурационная
переменная и установлена конфигурационная переменная
\hyperlink{F:serve.cfg,T:sound_player}{\V{sound\_player}}, если
на некотором тесте тестируемая программа дала ответ, нарушающий
формат результата, (presentation error), будет воспроизведён
звуковой файл, путь к которому указан в данной конфигурационной
переменной. Звуковое оповещение о результате тестирования
поддерживается только в режиме турнира \I{ACM}. 

\B{Пример.}
{\small
\begin{verbatim}
presentation_sound = /usr/share/ejudge/sound/presentation.wav
\end{verbatim}
}

%\newpage
\subsubsection{Переменная \V{internal\_sound}}
\label{descServeCfgInternalSound}
\hypertarget{F:serve.cfg,T:internal_sound}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{internal\_sound} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{путь к файлу}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{не установлено}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Если установлена данная конфигурационная
переменная и установлена конфигурационная переменная
\hyperlink{F:serve.cfg,T:sound_player}{\V{sound\_player}}, и если
при тестировании возникает внутренняя ошибка программы,
проверяющей ответ тестируемой программы, будет воспроизведён
звуковой файл, путь к которому указан в данной конфигурационной
переменной. Звуковое оповещение о результате тестирования
поддерживается только в режиме турнира \I{ACM}. 

\B{Пример.}
{\small
\begin{verbatim}
internal_sound = /usr/share/ejudge/sound/internal.wav
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{autoupdate\_standings}}
\label{descServeCfgAutoupdateStandings}
\hypertarget{F:serve.cfg,T:autoupdate_standings}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{autoupdate\_standings} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{true}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная управляет
автоматическим обновлением таблицы текущего положения участников
турнира. Если данная конфигурационная переменная установлена в
\I{true}, то таблицы текущего положения участников автоматически
обновляются, когда становятся известными результаты тестирования
очередной программы, а также в некоторых других случаях, за
исключением времени <<заморозки>> (см. конфигурационные
переменные
\hyperlink{F:serve.cfg,T:board_fog_time}{\V{board\_fog\_time}},
\hyperlink{F:serve.cfg,T:board_unfog_time}{\V{board\_unfog\_time}}).
Кроме этого администратор турнира имеет возможность в любой
момент обновить таблицу результатов. Если значение данной
конфигурационной переменной установлено в \I{false} с помощью
строки
{\small
\begin{verbatim}
autoupdate_standings = 0
\end{verbatim}
}
то таблица текущего положения никогда не обновляется
автоматически. Возможность обновлять таблицу текущих результатов
с помощью программы-администратора турнира сохраняется.

%\newpage
\subsubsection{Переменная \V{standings\_file\_name}}
\label{descServeCfgStandingsFileName}
\hypertarget{F:serve.cfg,T:standings_file_name}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{standings\_file\_name} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{имя файла}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{standings.html}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная определяет имя
файла, в который выводится таблица текущего положения участников
в турнире. Файл таблицы результатов таким образом создаётся с
полным путём
{\small
\begin{verbatim}
${status_dir}/dir/${standings_file_name}
\end{verbatim}
}
Где \V{\$\{status\_dir\}} --- значение конфигурационной
переменной \hyperlink{F:serve.cfg,T:status_dir}{\V{status\_dir}}.
Чтобы сделать таблицу текущих результатов доступной для
участников и зрителей, нужно создать символическую ссылку из
дерева каталогов html-сервера на этот файл. При этом http-сервер
должен поддерживать символические ссылки в том каталоге, в
котором создана ссылка на таблицу текущих результатов. Например,
для сервера Apache это достигается заданием опции
\V{FollowSymlinks} в его конфигурационном файле или в файле
\V{.htaccess}.

{\small
\begin{verbatim}
standings_file_name = "standings.shtml"
\end{verbatim}
}

%\newpage
\subsubsection{Переменная \V{stand\_header\_file}}
\label{descServeCfgStandHeaderFile}
\hypertarget{F:serve.cfg,T:stand_header_file}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{stand\_header\_file} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{имя файла}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{не установлено}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Если данная конфигурационная переменная
определена, то при генерации таблицы текущего положения
участников в начало генерируемого файла будет помещаться текст,
находящийся в файле-заголовке, полный путь к которому задаётся в
этой конфигурационной переменной. Содержимое файла-заголовка
считывается один раз при старте программы \S{serve}.

{\small
\begin{verbatim}
stand_header_file = "/home/httpd/ssi/stand_head.shtml"
\end{verbatim}
}

%\newpage
\subsubsection{Переменная \V{stand\_footer\_file}}
\label{descServeCfgStandFooterFile}
\hypertarget{F:serve.cfg,T:stand_footer_file}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{stand\_footer\_file} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{имя файла}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{не установлено}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Если данная конфигурационная переменная
определена, то при генерации таблицы текущего положения
участников в конец генерируемого файла будет помещаться текст,
находящийся в файле-подвале, полный путь к которому задаётся в
этой конфигурационной переменной. Содержимое файла-подвала
считывается один раз при старте программы \S{serve}.

{\small
\begin{verbatim}
stand_footer_file = "/home/httpd/ssi/stand_foot.shtml"
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{stand2\_file\_name}}
\label{descServeCfgStand2FileName}
\hypertarget{F:serve.cfg,T:stand2_file_name}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{stand2\_file\_name} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{имя файла}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{не установлена}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Если значение данной конфигурационной переменной
определено, программа \S{serve} генерирует второй файл таблицы
текущего положения участников турнира. Второй файл таблицы
результатов создаётся со следующим полным путём:
{\small
\begin{verbatim}
${status_dir}/dir/${stand2_file_name}
\end{verbatim}
}
Где \V{\$\{status\_dir\}} --- значение конфигурационной
переменной \hyperlink{F:serve.cfg,T:status_dir}{\V{status\_dir}}.
Чтобы сделать таблицу текущих результатов доступной для
участников и зрителей, нужно создать символическую ссылку из
дерева каталогов html-сервера на этот файл. При этом http-сервер
должен поддерживать символические ссылки в том каталоге, в
котором создана ссылка на таблицу текущих результатов. Например,
для сервера Apache это достигается заданием опции
\V{FollowSymlinks} в его конфигурационном файле или в файле
\V{.htaccess}. Необходимость двух отдельных файлов текущего
положения команд обосновывается тем, что каждый из этих файлов
может иметь независимое друг от друга дизайнерское
оформление. Например, главный файл (см. переменную
\hyperlink{F:serve.cfg,T:standings_file_name}{\V{standings\_file\_name}})
может быть оформлен в контексте сайта олимпиады, а
вспомогательный --- чтобы демонстрироваться с помощью
проектора.

{\small
\begin{verbatim}
stand2_file_name = "standings2.shtml"
\end{verbatim}
}

%\newpage
\subsubsection{Переменная \V{stand2\_header\_file}}
\label{descServeCfgStand2HeaderFile}
\hypertarget{F:serve.cfg,T:stand2_header_file}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{stand2\_header\_file} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{имя файла}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{не установлено}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Если данная конфигурационная переменная и
переменная
\hyperlink{F:serve.cfg,T:stand2_file_name}{\V{stand2\_file\_name}}
определены, то при генерации вспомогательной таблицы текущего
положения участников в начало генерируемого файла будет
помещаться текст, находящийся в файле-заголовке, полный путь к
которому задаётся в этой конфигурационной переменной. Содержимое
файла-заголовка считывается один раз при старте программы \S{serve}.

{\small
\begin{verbatim}
stand2_header_file = "/home/httpd/ssi/stand2_head.shtml"
\end{verbatim}
}

%\newpage
\subsubsection{Переменная \V{stand2\_footer\_file}}
\label{descServeCfgStand2FooterFile}
\hypertarget{F:serve.cfg,T:stand2_footer_file}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{stand2\_footer\_file} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{имя файла}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{не установлено}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Если данная конфигурационная переменная и
переменная
\hyperlink{F:serve.cfg,T:stand2_file_name}{\V{stand2\_file\_name}}
определены, то при генерации вспомогательной таблицы текущего
положения участников в конец генерируемого файла будет
помещаться текст, находящийся в файле-подвале, полный путь к
которому задаётся в этой конфигурационной переменной. Содержимое
файла-подвала считывается один раз при старте программы
\S{serve}.

{\small
\begin{verbatim}
stand2_footer_file = "/home/httpd/ssi/stand2_foot.shtml"
\end{verbatim}
}

%\newpage
\subsubsection{Переменная \V{plog\_file\_name}}
\label{descServeCfgPlogFileName}
\hypertarget{F:serve.cfg,T:plog_file_name}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{plog\_file\_name} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{имя файла}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{не установлено}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная позволяет
задать имя файла, для генерируемого html-файла с журналом
посылок. Журнал посылок содержит информацию о каждой посылке,
которая включает в себя номер посылки, участника, задачу, язык и
результат. Если значение переменной установлено, журнал посылок
генерируется в файл со следующим путём:
{\small
\begin{verbatim}
${status_dir}/dir/${plog_file_name}
\end{verbatim}
}
Где \V{\$\{status\_dir\}} --- значение конфигурационной
переменной \hyperlink{F:serve.cfg,T:status_dir}{\V{status\_dir}}.
Чтобы сделать журнал посылок доступным для участников и
зрителей, нужно создать символическую ссылку из дерева каталогов
html-сервера на этот файл. При этом http-сервер должен
поддерживать символические ссылки в том каталоге, в котором
создана ссылка на журнал посылок. Например, для сервера Apache
это достигается заданием опции \V{FollowSymlinks} в его
конфигурационном файле или в файле \V{.htaccess}.

{\small
\begin{verbatim}
plog_file_name = "log.shtml"
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{plog\_update\_time}}
\label{descServeCfgPlogUpdateTime}
\hypertarget{F:serve.cfg,T:plog_update_time}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{plog\_update\_time} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{30}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Если установлена конфигурационная переменная 
\hyperlink{F:serve.cfg,T:plog_file_name}{\V{plog\_file\_name}},
данная конфигурационная переменная позволяет задать период в
секундах обновления журнала посылок турнира. В отличие от
таблицы положения участников турнира, которая обновляется при
поступлении новой информации, журнал посылок турнира обновляется
всегда через один и тот же промежуток времени, задаваемый данной
конфигурационной переменной.

\B{Пример.}
{\small
\begin{verbatim}
plog_update_time = 60
\end{verbatim}
}

%\newpage
\subsubsection{Переменная \V{plog\_header\_file}}
\label{descServeCfgPlogHeaderFile}
\hypertarget{F:serve.cfg,T:plog_header_file}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{plog\_header\_file} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{имя файла}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{не установлено}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Если данная конфигурационная переменная и
переменная
\hyperlink{F:serve.cfg,T:plog_file_name}{\V{plog\_file\_name}}
определены, то при генерации журнала посылок турнира в начало
генерируемого файла будет помещаться текст, находящийся в
файле-заголовке, полный путь к которому задаётся в этой
конфигурационной переменной. Содержимое файла-заголовка
считывается один раз при старте программы \S{serve}.

{\small
\begin{verbatim}
plog_header_file = "/home/httpd/ssi/plog_head.shtml"
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{plog\_footer\_file}}
\label{descServeCfgPlogFooterFile}
\hypertarget{F:serve.cfg,T:plog_footer_file}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{plog\_footer\_file} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{имя файла}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{не установлено}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Если данная конфигурационная переменная и
переменная
\hyperlink{F:serve.cfg,T:plog_file_name}{\V{plog\_file\_name}}
определены, то при генерации журнала посылок турнира в конец
генерируемого файла будет помещаться текст, находящийся в
файле-подвале, полный путь к которому задаётся в этой
конфигурационной переменной. Содержимое файла-подвала
считывается один раз при старте программы \S{serve}.

{\small
\begin{verbatim}
plog_footer_file = "/home/httpd/ssi/plog_foot.shtml"
\end{verbatim}
}

%\newpage
%\subsubsection{Переменная \V{standings\_team\_color}}
%\label{descServeCfgStandingsTeamColor}
%\hypertarget{F:serve.cfg,T:standings_team_color}{}
%
%\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
%Имя переменной:        & \K{standings\_team\_color} \\
%Содержится в:          & \strut%
%  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
%Используются:          & \S{serve} \\
%Тип содержимого:       & \I{HTML цвет}\\
%Может отсутствовать:   & \I{да}\\
%Значение по умолчанию: & \I{не установлено}\\
%Может повторяться:     & \I{нет}\\
%\end{tabular}
%
%\B{Описание.} Данная конфигурационная переменная устанавливает
%цвет фона для строки результатов команды в таблице текущего
%положения турнира. Цвет должен задаваться в формате HTML, то
%есть \V{\#\I{RR}\I{GG}\I{BB}}, где \I{RR}, \I{GG}, \I{BB} ---
%компоненты красного, зелёного и синего цветов, записанные в
%шестнадцатеричном виде. Если данный турнир работает в режиме
%виртуального турнира, то этим цветом будут выделены команды, для
%которых неизвестно, являются ли они виртуальными или реальными
%участниками, то есть команды, не пославшие ни одного решения.
%
%\B{Замечание.} Данная конфигурационная переменная устарела и не
%должна использоваться. Рекомендуется использоваться таблицами
%стилей.
%
%\B{Пример.}
%{\small
%\begin{verbatim}
%standings_team_color = "#cc88cc"
%\end{verbatim}
%}
%
%\newpage
%\subsubsection{Переменная \V{standings\_virtual\_team\_color}}
%\label{descServeCfgStandingsVirtualTeamColor}
%\hypertarget{F:serve.cfg,T:standings_virtual_team_color}{}
%
%\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
%Имя переменной:        & \K{standings\_virtual\_team\_color} \\
%Содержится в:          & \strut%
%  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
%Используются:          & \S{serve} \\
%Тип содержимого:       & \I{HTML цвет}\\
%Может отсутствовать:   & \I{да}\\
%Значение по умолчанию: & \I{не установлено}\\
%Может повторяться:     & \I{нет}\\
%\end{tabular}
%
%\B{Описание.} Данная конфигурационная переменная устанавливает
%цвет фона для строки результатов виртуальной команды в таблице
%текущего положения турнира. Цвет должен задаваться в формате
%HTML, то есть \V{\#\I{RR}\I{GG}\I{BB}}, где \I{RR}, \I{GG},
%\I{BB} --- компоненты красного, зелёного и синего цветов,
%записанные в шестнадцатеричном виде. Если данный турнир не
%работает в режиме виртуального турнира, то данная
%конфигурационная переменная не используется.
%
%\B{Замечание.} Данная конфигурационная переменная устарела и не
%должна использоваться. Рекомендуется использоваться таблицами
%стилей.
%
%\B{Пример.}
%{\small
%\begin{verbatim}
%standings_virtual_team_color = "#88cccc"
%\end{verbatim}
%}
%
%\newpage
%\subsubsection{Переменная \V{standings\_real\_team\_color}}
%\label{descServeCfgStandingsRealTeamColor}
%\hypertarget{F:serve.cfg,T:standings_real_team_color}{}
%
%\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
%Имя переменной:        & \K{standings\_real\_team\_color} \\
%Содержится в:          & \strut%
%  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
%Используются:          & \S{serve} \\
%Тип содержимого:       & \I{HTML цвет}\\
%Может отсутствовать:   & \I{да}\\
%Значение по умолчанию: & \I{не установлено}\\
%Может повторяться:     & \I{нет}\\
%\end{tabular}
%
%\B{Описание.} Данная конфигурационная переменная устанавливает
%цвет фона для строки результатов реальной команды в таблице
%текущего положения турнира. Цвет должен задаваться в формате
%HTML, то есть \V{\#\I{RR}\I{GG}\I{BB}}, где \I{RR}, \I{GG},
%\I{BB} --- компоненты красного, зелёного и синего цветов,
%записанные в шестнадцатеричном виде. Если данный турнир не
%работает в режиме виртуального турнира, то данная
%конфигурационная переменная не используется.
%
%\B{Замечание.} Данная конфигурационная переменная устарела и не
%должна использоваться. Рекомендуется использоваться таблицами
%стилей.
%
%\B{Пример.}
%{\small
%\begin{verbatim}
%standings_real_team_color = "#cccc88"
%\end{verbatim}
%}

\newpage
\subsubsection{Переменная \V{team\_info\_url}}
\label{descServeCfgTeamInfoUrl}
\hypertarget{F:serve.cfg,T:team_info_url}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{team\_info\_url} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{шаблон URL}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{не установлено}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная задаёт шаблон
URL, по которому находится более подробная информация об
участнике. Этот шаблон раскрывается в момент генерации таблицы
положения участников в турнире и формирует гиперссылку от имени
участника и его идентификатора к отдельной странице с подробной
информацией о команде. Подробная информация о поддерживаемых
форматных преобразованиях дана в разделе
\ref{sectionFormatSubstitutions}.

\B{Пример.}
{\small
\begin{verbatim}
team_info_url = "http://www.contest.ru/users/%Mi"
\end{verbatim}
}

%\newpage
\subsubsection{Переменная \V{prob\_info\_url}}
\label{descServeCfgProbInfoUrl}
\hypertarget{F:serve.cfg,T:prob_info_url}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{prob\_info\_url} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{шаблон URL}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{не установлено}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная задаёт шаблон
URL, по которому находится текст условия задачи. Этот шаблон
раскрывается в момент генерации заголовка таблицы текущего
положения участников в турнире и формирует гиперссылку от
идентификатора задачи к отдельной странице с текстом этой
задачи. Подробная информация о поддерживаемых форматных
преобразованиях дана в разделе
\ref{sectionFormatSubstitutions}.

\B{Пример.}
{\small
\begin{verbatim}
prob_info_url = "http://www.contest.ru/problems/%lPs.shtml"
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{team\_enable\_src\_view}}
\label{descServeCfgTeamEnableSrcView}
\hypertarget{F:serve.cfg,T:team_enable_src_view}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{team\_enable\_src\_view} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{false}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Если данная конфигурационная переменная
установлена в \I{true}, участники турнира получают возможность
просматривать текст программ, посланных ими на проверку и
хранящихся в базе данных системы \S{ejudge}.

\B{Пример.}
{\small
\begin{verbatim}
team_enable_src_view
\end{verbatim}
}

%\newpage
\subsubsection{Переменная \V{team\_enable\_rep\_view}}
\label{descServeCfgTeamEnableRepView}
\hypertarget{F:serve.cfg,T:team_enable_rep_view}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{team\_enable\_rep\_view} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{false}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Если данная конфигурационная переменная
установлена в \I{true}, участники турнира получают возможность
просматривать сокращённую версию протокола тестирования для
программ, посланных ими на проверку и хранящихся в базе данных
системы \S{ejudge}. Сокращённая (пользовательская) версия
протокола тестирования содержит только информацию о прохождении
программой каждого теста, но не содержит самих тестов,
результатов, выдаваемых программой, и правильных ответов.

\B{Пример.}
{\small
\begin{verbatim}
team_enable_rep_view
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{report\_error\_code}}
\label{descServeCfgReportErrorCode}
\hypertarget{F:serve.cfg,T:report_error_code}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{report\_error\_code} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{false}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Если данная конфигурационная переменная
установлена в \I{true}, и конфигурационная переменная
\hyperlink{F:serve.cfg,T:team_enable_rep_view}{\V{team\_enable\_rep\_view}}
установлена в \I{true}, то сокращённая версия протокола
тестирования будет содержать значение кода возврата,
выработанное тестируемой программой на каждом тесте. В противном
случае в сокращённом протоколе тестирования будет просто стоять
отметка о том, был ли код завершения нормальным (0) или нет
(любой ненулевой код). Информация о выработанном коде возврата
может быть тривиальным образом использована для угадывания
теста, поэтому по умолчанию эта информация отключена.

\B{Пример.}
{\small
\begin{verbatim}
report_error_code
\end{verbatim}
}

%\newpage
\subsubsection{Переменная \V{enable\_continue}}
\label{descServeCfgEnableContinue}
\hypertarget{F:serve.cfg,T:enable_continue}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{enable\_continue} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{false}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Если данная конфигурационная переменная
установлена в \I{true}, и продолжительность турнира не ограничена
(см. конфигурационную переменную
\hyperlink{F:serve.cfg,T:contest_time}{\V{contest\_time}}),
администратор турнира получает возможность продолжить турнир
после того, так он был остановлен. Во всех других случаях
остановленный или завершившийся турнир не может быть продолжен.

\B{Пример.}
{\small
\begin{verbatim}
enable_continue
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{show\_astr\_time}}
\label{descServeCfgShowAstrTime}
\hypertarget{F:serve.cfg,T:show_astr_time}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{show\_astr\_time} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{false}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Если данная конфигурационная переменная
установлена в \I{true}, в таблице текущих посылок интерфейса
администратора генерируемой программой \S{master} время посылки
участником решения будет выведено как астрономическое время, а
не как время от начала турнира. Данная конфигурационная
переменная предназначена в первую очередь для использования в
турнирах, продолжительность которых не ограничена
(см. конфигурационную переменную
\hyperlink{F:serve.cfg,T:contest_time}{\V{contest\_time}}).

\B{Пример.}
{\small
\begin{verbatim}
show_astr_time
\end{verbatim}
}

%\newpage
\subsubsection{Переменная \V{team\_download\_time}}
\label{descServeCfgTeamDownloadTime}
\hypertarget{F:serve.cfg,T:team_download_time}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{team\_download\_time} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{30}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная задаёт, как
часто участники турнира могут скачивать архив своих решений.
Если значение переменной установлено в 0, загрузка архива
своих решений участниками отключена.

\B{Пример.}
{\small
\begin{verbatim}
team_download_time = 600
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{tests\_to\_accept}}
\label{descServeCfgTestsToAccept}
\hypertarget{F:serve.cfg,T:tests_to_accept}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{tests\_to\_accept} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{1}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная определяет,
на ?сколько?? тестах должна быть проверена программа участника,
чтобы быть принятой на проверку. Конфигурационная переменная
действует только в режиме турнира \I{OLYMPIAD}. Во всех других
режимах турнира её значение игнорируется. Если значение этой
переменной установлено в 0, для принятия задачи на проверку
прохождение ею тестов не требуется. Значение данной
конфигурационной переменной может быть переопределено в описании
задачи с помощью конфигурационной переменной
\hyperlink{F:serve.cfg,S:problem,T:tests_to_accept}{\V{tests\_to\_accept}}.

\B{Пример.}
{\small
\begin{verbatim}
tests_to_accept = 2
\end{verbatim}
}

%\newpage
\subsubsection{Переменная \V{disable\_clars}}
\label{descServeCfgDisableClars}
\hypertarget{F:serve.cfg,T:disable_clars}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{disable\_clars} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{false}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Если данная конфигурационная переменная
установлена в \I{true}, возможность участников турнира и судей и
администраторов писать сообщения друг другу отключена.

\B{Пример.}
{\small
\begin{verbatim}
disable_clars
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{disable\_team\_clars}}
\label{descServeCfgDisableTeamClars}
\hypertarget{F:serve.cfg,T:disable_team_clars}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{disable\_team\_clars} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{false}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Если данная конфигурационная переменная
установлена в \I{true}, участники турнира не могут писать
сообщения судьям, но судьи и администраторы турнира имеют
возможность отправлять сообщения всем участникам или некоторому
участнику.

\B{Пример.}
{\small
\begin{verbatim}
disable_team_clars
\end{verbatim}
}

%\newpage
\subsubsection{Переменная \V{ignore\_compile\_errors}}
\label{descServeCfgIgnoreCompileErrors}
\hypertarget{F:serve.cfg,T:ignore_compile_errors}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{ignore\_compile\_errors} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{false}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Если значение данной конфигурационной переменной
равно \I{true}, если программа, посланная участником, не может
быть скомпилирована (например, из-за синтаксических ошибок),
такая программа не засчитывается, то есть за неё не начисляется
штраф.

\B{Пример.}
{\small
\begin{verbatim}
ignore_compile_errors
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{ignore\_duplicated\_runs}}
\label{descServeCfgIgnoreDuplicatedRuns}
\hypertarget{F:serve.cfg,T:ignore_duplicated_runs}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{ignore\_duplicated\_runs} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{false}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Если данная конфигурационная переменная имеет
значение \I{true}, в последовательности из нескольких идущих
подряд (для одного участника) посылок одной и той же программы
для решения одной и той же задачи учитывается только первая
посылка. Все остальные посылки игнорируются. Идентичность
программ определяется с помощью сравнения их хэш-кода,
полученного с помощью алгоритма SHA1.

Данная конфигурационная переменная может использоваться для
удобства участников, работающих через очень медленный канал
связи, так как нажатие кнопки ``Reload'' браузера в некоторых
(редких) случаях может приводить к повторной посылке решения.

\B{Пример.}
{\small
\begin{verbatim}
ignore_duplicated_runs
\end{verbatim}
}

%\newpage
\subsubsection{Переменная \V{max\_line\_length}}
\label{descServeCfgMaxLineLength}
\hypertarget{F:serve.cfg,T:max_line_length}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{max\_line\_length} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{4096}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная задаёт
ограничение на максимальную длину строки в файле протокола
тестирования программы. Если длина какой-либо строки в файле,
который копируется в файл протокола тестирования, превышает это
значение, такая строка заменяется на строку \V{<string is too long>}.
Ограничение максимальной длины строки действует для файлов с
входными данными тестов, файлов с правильными ответами к тестам,
файлов с выводом тестируемой программы, файлов с выводом в поток
ошибок тестируемой программы и программы, проверяющей
правильность решения.

\B{Пример.}
{\small
\begin{verbatim}
max_line_length = 1024
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{max\_file\_length}}
\label{descServeCfgMaxFileLength}
\hypertarget{F:serve.cfg,T:max_file_length}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{max\_file\_length} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{65535}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная задаёт
максимальный размер файла, копируемого в протокол тестирования
программы. Если длина какого-либо файла превышает этот предел,
содержимое файла заменяется на строку \V{<file is too long>>}.
Ограничение максимальной длины файла действует для файлов с
входными данными тестов, файлов с правильными ответами к тестам,
файлов с выводом тестируемой программы, файлов с выводом в поток
ошибок тестируемой программы и программы, проверяющей
правильность решения.

\B{Пример.}
{\small
\begin{verbatim}
max_file_length = 131072
\end{verbatim}
}

%\newpage
\subsubsection{Переменная \V{auto\_short\_problem\_name}}
\label{descServeCfgAutoShortProblemName}
\hypertarget{F:serve.cfg,T:auto_short_problem_name}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{auto\_short\_problem\_name} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{false}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная позволяет
установить режим, в котором короткое имя задачи будет
генерироваться по её идентификатору. Если данная
конфигурационная переменная имеет значение \I{true}, для каждой
задачи короткое имя задачи строится по идентификатору задачи как
запись идентификатора в десятичной системе с пятью цифрами,
включая незначащие нули. Так, для задачи с идентификатором
задачи \V{53} будет автоматически сгенерировано короткое имя
\V{00053}.

\B{Пример.}
{\small
\begin{verbatim}
auto_short_problem_name
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{checker\_real\_time\_limit}}
\label{descServeCfgCheckerRealTimeLimit}
\hypertarget{F:serve.cfg,T:checker_real_time_limit}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{checker\_real\_time\_limit} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{30}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная задаёт
ограничение астрономического времени на проверку результата
работы тестируемой программы на очередном тесте. Другими
словами, эта переменная ограничивает максимальное время работы
проверяющей программы. В случае, если максимальное время работы
проверяющей программы превышено, проверка программы участника
завершается со статусом ``Check failed''
(<<Проверка не удалась>>). Значение 0 означает отсутствие
ограничения времени.

\B{Пример.}
{\small
\begin{verbatim}
checker_real_time_limit = 60
\end{verbatim}
}

\subsubsection{Переменная \V{compile\_real\_time\_limit}}
\label{descServeCfgCompileRealTimeLimit}
\hypertarget{F:serve.cfg,T:compile_real_time_limit}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{compile\_real\_time\_limit} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{compile} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{30}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная задаёт
ограничение астрономического времени на компиляцию программы
участника. В случае, если максимальное время компиляции
превышено, проверка программы участника завершается со статусом
``Check failed'' (<<Проверка не удалась>>). Значение 0 означает
отсутствие ограничения времени.

\B{Пример.}
{\small
\begin{verbatim}
compile_real_time_limit = 60
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{show\_deadline}}
\label{descServeCfgShowDeadline}
\hypertarget{F:serve.cfg,T:show_deadline}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{show\_deadline} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{false}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Если данная конфигурационная переменная
установлена в \I{true} и описание некоторой задачи содержит
крайнее время сдачи (параметр
\hyperlink{F:serve.cfg,S:problem,T:deadline}{\V{deadline}}), то
крайнее время сдачи будет показано в меню выбора задачи,
показываемое CGI-программой \S{team}.

\B{Пример.}
{\small
\begin{verbatim}
show_deadline
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{variant\_map\_file}}
\label{descServeCfgVariantMapFile}
\hypertarget{F:serve.cfg,T:variant_map_file}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{variant\_map\_file} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{путь к файлу}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{не установлено} \\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
путь к файлу, в котором находится отображение регистрационных
имён участников турнира в номера вариантов для всех вариантных
задач данного турнира (см. конфигурационную переменную
\hyperlink{F:serve.cfg,S:problem,T:variant_num}{\V{variant\_num}}).
Если в турнире есть хотя бы одна вариантная задача, параметр
\V{variant\_map\_file} должен быть установлен в имя корректного
файла. Полный путь к файлу вариантов формируется по следующим
правилам: если значение переменной \V{variant\_map\_file} начинается с
символа \V{'/'}, то есть является абсолютным путём, используется
значение этой переменной. В противном случае полный путь к файлу
вариантов получается конкатенацией значения конфигурационной
переменной \hyperlink{F:serve.cfg,T:conf_dir}{\V{conf\_dir}} и
значения переменной \V{variant\_map\_file}.

Текущая версия системы \S{ejudge} поддерживает следующий формат файла
отображения вариантов. Файл имеет следующую структуру.
{\small
\begin{verbatim}
<variant_map version="1">
VARIANT_MAP_LINE*
</variant_map>
\end{verbatim}
}
Здесь первая и последние строки должны присутствовать точно в
указанном виде, \V{VARIANT\_MAP\_LINE} --- строка отображения
вариантов для одного пользователя. Комментарии в файле начинаются с
символа \V{\#} и оканчиваются концом строки. Пустые строки в файле
игнорируются. Файл вариантов может содержать произвольное количество
строк отображения вариантов, однако участник, не упомянутый в файле
отображения вариантов, теряет возможность сдавать вариантные
задачи. Попытка сдачи им вариантной задачи завершится ошибкой
недопустимой задачи. Каждый участник может быть упомянут в файле
вариантов не более одного раза.

Строка отображения вариантов одного пользователя имеет следующий вид:
{\small
\begin{verbatim}
LOGIN VARIANT*
\end{verbatim}
}
Здесь \V{LOGIN} --- это регистрационное имя пользователя, \V{VARIANT}
--- номер варианта. Номера вариантов должны быть перечислены для всех
вариантных задач турнира и в том же порядке, в котором заданы
вариантные задачи. Количество номеров вариантов в строке отображения
вариантов должно совпадать с количеством вариантных задач турнира.
Вариант задачи --- это целое число от 1 и до значения конфигурационной
переменной
\hyperlink{F:serve.cfg,S:problem,T:variant_num}{\V{variant\_num}}
соответствующей задачи включительно.

\B{Пример.}
{\small
\begin{verbatim}
variant_map_file = "variant.map"
\end{verbatim}
}

Если в турнире определены три вариантные задачи, каждая из которых
имеет по 4 варианта, то следующий пример задаёт отображение вариантов
для пользователей \V{user1}, \V{user2}, \V{user3}.

{\small
\begin{verbatim}
<variant_map version="1">
# Задачи: A, B, C
user1     1  3  2
user2     3  4  1
user3     4  2  4
</variant_map>
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{disable\_auto\_testing}}
\label{descServeCfgDisableAutoTesting}
\hypertarget{F:serve.cfg,T:disable_auto_testing}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{disable\_auto\_testing} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{false} \\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Если данная конфигурационная установлена в
\I{true}, автоматическое тестирование решений задач, посылаемых
участниками, отключено. В этом случае решение участника получает
статус ``Accepted for testing'' и не отправляется на компиляцию
и тестирование. Администратор турнира должен явно запустить
тестирование решения участника, выбрав пункт ``Rejudge'' для
данного решения.

Данная конфигурационная переменная устанавливает значение,
используемое в случае, если описание задачи не определяет
конфигурационную переменную
\hyperlink{F:serve.cfg,S:problem,T:disable_auto_testing}{\V{disable\_auto\_testing}}
самостоятельно.

\B{Пример.}
{\small
\begin{verbatim}
disable_auto_testing
\end{verbatim}
}

\subsubsection{Переменная \V{enable\_runlog\_merge}}
\label{descServeCfgEnableRunlogMerge}
\hypertarget{F:serve.cfg,T:enable_runlog_merge}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{enable\_runlog\_merge} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{false} \\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Если данная конфигурационная переменная
установлена в \I{true}, для администратора турнира становятся
доступными средства слияния журналов посылок. В этом случае
появляется новый элемент управления, генерируемый программой
\S{master}. Используя его, администратор задаёт имя файла,
содержащего журнал посылок в формате XML. Этот журнал посылок
далее пересылается серверу турнира, который сливает его с
текущим журналом посылок. Импорт возможен, только если в текущий
момент в турнире нет непроверенных посылок. При импорте
корректно объединяются идентичные записи в текущем и
импортируемом журналах. При этом если некоторая запись имеет
флаг <<локальной>>, её данные (результат тестирования,
количество набранных баллов) имеют приоритет над данными
импортируемой записи. Если импортируемая запись имеет флаг
<<авторитетной>>, то её данные имеют приоритет над локальными
данными. Если некоторая запись не является ни локальной, ни
авторитетной, локальные данные имеют приоритет.

В результате импорта идентификаторы посылок могут измениться.
При этом идентификатор с большим номером всегда имеет время
отправки не меньшее, чем идентификатор с меньшим номером. Если
несколько посылок имеют одинаковое время отправки, они
упорядочиваются в порядке возрастания идентификаторов
пользователей. Проимпортированные записи помечаются символом
\V{*} рядом с номером посылки.

При экспорте журнала посылок локальные записи помечаются как
авторитетные, что позволяет по ходу турнира обмениваться
текущими журналами посылок.

\subsubsection{Переменная \V{max\_cmd\_length}}
\label{descServeCfgMaxCmdLength}
\hypertarget{F:serve.cfg,T:max_cmd_length}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{max\_cmd\_length} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{256} \\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
максимальный размер аргументов командной строки для добавления в
протокол тестирования. Если размер аргументов командной строки
превышает это значение, они не добавляются в протокол
тестирования.

\newpage
\subsubsection{Переменная \V{info\_dir}}
\label{descServeCfgInfoDir}
\hypertarget{F:serve.cfg,T:info_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{info\_dir} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{путь к каталогу}\\
Может отсутствовать:   & \I{да}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
путь к каталогу, в котором хранится дополнительная информация к
тестам для всех задач данного турнира. Сами файлы с
дополнительной информацией находятся в подкаталогах этого
каталога. Дополнительная информация для некоторой задачи с
кратким именем \V{A} (задаваемом конфигурационной переменной
\hyperlink{F:serve.cfg,S:problem,T:short_name}{\V{short\_name}})
находятся в подкаталоге \V{A} каталога дополнительной
информации. Формат файлов с дополнительной информацией о тестах
описывается в разделе \ref{sectionTestInf}. Полный путь к
каталогу с дополнительной информацией определяется по следующим
правилам:
\begin{itemize}
\item
Если значение переменной \V{info\_dir} не задано, используется
значение \V{info}.
\item
Если значение переменной \V{info\_dir} начинается с символа
\V{'/'}, то есть значение переменной задаёт полный абсолютный
путь к каталогу скриптов, этот путь используется без изменений.
\item
Если значение переменной \V{info\_dir} не начинается с символа
\V{'/'}, полный путь к каталогу скриптов образуется
конкатенацией значения переменной
\hyperlink{F:serve.cfg,T:conf_dir}{\V{conf\_dir}} и значения
переменной \V{info\_dir}.
\end{itemize}

\B{Пример.} В следующем примере путь к каталогу тестов
устанавливается в \V{\$\{root\_dir\}/conf/../tests}, где
\V{\$\{root\_dir\}} --- значение конфигурационной переменной
\V{root\_dir}. Этот путь эквивалентен пути
\V{\$\{root\_dir\}/tests}. Таким образом, тесты к задачам и
дополнительная информация о тестах находятся в одном каталоге.
{\small
\begin{verbatim}
info_dir = ../tests
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{tgz\_dir}}
\label{descServeCfgTgzDir}
\hypertarget{F:serve.cfg,T:tgz_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{tgz\_dir} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{путь к каталогу}\\
Может отсутствовать:   & \I{да}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
путь к каталогу, в котором хранятся архивы рабочих каталогов для
тестирования программ в формате \V{.tgz} для всех задач данного
турнира. Непосредственно архивы рабочих каталогов находятся в
подкаталогах этого каталога. Архив рабочего каталога для
некоторой задачи с кратким именем \V{A} (задаваемом
конфигурационной переменной
\hyperlink{F:serve.cfg,S:problem,T:short_name}{\V{short\_name}})
находятся в подкаталоге \V{A} каталога архивов. Полный путь к
каталогу с дополнительной информацией определяется по следующим
правилам:
\begin{itemize}
\item
Если значение переменной \V{tgz\_dir} не задано, используется
значение \V{info}.
\item
Если значение переменной \V{tgz\_dir} начинается с символа
\V{'/'}, то есть значение переменной задаёт полный абсолютный
путь к каталогу архивов, этот путь используется без изменений.
\item
Если значение переменной \V{tgz\_dir} не начинается с символа
\V{'/'}, полный путь к каталогу скриптов образуется
конкатенацией значения переменной
\hyperlink{F:serve.cfg,T:conf_dir}{\V{conf\_dir}} и значения
переменной \V{tgz\_dir}.
\end{itemize}

\B{Пример.} В следующем примере путь к каталогу архивов
устанавливается в \V{\$\{root\_dir\}/conf/../tests}, где
\V{\$\{root\_dir\}} --- значение конфигурационной переменной
\V{root\_dir}. Этот путь эквивалентен пути
\V{\$\{root\_dir\}/tests}. Таким образом, тесты к задачам и
архивы рабочего каталога тестирования находятся в одном
каталоге.
{\small
\begin{verbatim}
tgz_dir = ../tests
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{info\_sfx}}
\label{descServeCfgInfoSfx}
\hypertarget{F:serve.cfg,T:info_sfx}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{info\_sfx} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{.inf}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
суффикс файлов с дополнительной информацией о тестах. Эти файлы
находятся в подкаталогах каталога, задаваемого конфигурационной
переменной \hyperlink{F:serve.cfg,T:info_dir}{\V{info\_dir}}.
Формат файла с дополнительной информацией о тесте описан в
разделе \ref{sectionTestInf}.

\subsubsection{Переменная \V{tgz\_sfx}}
\label{descServeCfgTgzSfx}
\hypertarget{F:serve.cfg,T:tgz_sfx}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{tgz\_sfx} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{.tgz}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
суффикс файлов с архивами рабочего каталога тестируемых
программ. Эти файлы находятся в подкаталогах каталога,
задаваемого конфигурационной переменной
\hyperlink{F:serve.cfg,T:tgz_dir}{\V{tgz\_dir}}.

\newpage

\subsubsection{Переменная \V{prune\_empty\_users}}
\label{descServeCfgPruneEmptyUsers}
\hypertarget{F:serve.cfg,T:prune_empty_users}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{prune\_empty\_users} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{false}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Если данная конфигурационная переменная установлена в
\I{true}, участники турнира, которые не сделали ни одной попытки
решения задачи, будут исключены из таблицы результатов. Если данная
конфигурационная переменная установлена в \I{false} (значение по
умолчанию), все участники турнира отображаются в таблице текущих
результатов. Данная конфигурационная переменная может использоваться в
турнирах с открытой регистрацией (в интернет-турнирах или виртуальных
турнирах), чтобы исключить участников, которые зарегистрировались, но
так и не приняли участие в турнире.

\newpage
\subsubsection{Переменная \V{stand\_table\_attr}}
\label{descServeCfgStandTableAttr}
\hypertarget{F:serve.cfg,T:stand_table_attr}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{stand\_table\_attr} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{"{}"{}} (пустая строка)\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная позволяет определить
дополнительные атрибуты элемента \V{<table>} таблицы текущих
результатов. Значение данной переменной и элемент \V{table} не
разделяются дополнительными пробелами, поэтому значение данной
переменной должно начинаться с пробельного символа.

\B{Пример.}
{\small
\begin{verbatim}
stand_table_attr = " width=100%"
\end{verbatim}
}
Такое значение данной конфигурационной переменной приведёт к тому,
что таблица текущих результатов будет открываться тегом
{\small
\begin{verbatim}
<table width=100%>
\end{verbatim}
}

\B{Обратите внимание,} что в текущей версии системы \S{ejudge}, к
сожалению, невозможно использовать знак <<кавычки>> (\verb|"|) в
значении конфигурационной переменной.

\subsubsection{Переменная \V{stand\_place\_attr}}
\label{descServeCfgStandPlaceAttr}
\hypertarget{F:serve.cfg,T:stand_place_attr}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{stand\_place\_attr} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{"{}"{}} (пустая строка)\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная позволяет
определить дополнительные атрибуты столбца <<место>> (1-й
столбец) таблицы результатов турнира. Значение данной переменной
добавляется к элементу \V{<th>} заголовка столбца таблицы и к
каждому элементу \V{<td>}, находящемуся в столбце <<место>>.
Значение данной переменной и элементы \V{td} или \V{th} не
разделяются дополнительными пробелами, поэтому значение данной
переменной должно начинаться с пробельного символа.

\B{Пример.}
{\small
\begin{verbatim}
stand_place_attr = " class=st_place"
\end{verbatim}
}
Такое значение данной конфигурационной переменной приведёт к
тому, что заголовок столбца <<место>> таблицы будет открываться
тегом \V{<th class=st\_place>}, а каждая ячейка первого столбца
таблицы --- тегом \V{<td class=st\_place>}.

\B{Обратите внимание,} что в текущей версии системы \S{ejudge}, к
сожалению, невозможно использовать знак <<кавычки>> (\verb|"|) в
значении конфигурационной переменной.

\newpage
\subsubsection{Переменная \V{stand\_team\_attr}}
\label{descServeCfgStandTeamAttr}
\hypertarget{F:serve.cfg,T:stand_team_attr}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{stand\_team\_attr} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{"{}"{}} (пустая строка)\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная позволяет
определить дополнительные атрибуты столбца <<команда>> (2-й
столбец) таблицы результатов турнира. Значение данной переменной
добавляется к элементу \V{<th>} заголовка столбца таблицы и к
каждому элементу \V{<td>}, находящемуся в столбце <<команда>>.
Значение данной переменной и элементы \V{td} или \V{th} не
разделяются дополнительными пробелами, поэтому значение данной
переменной должно начинаться с пробельного символа.

\B{Пример.}
{\small
\begin{verbatim}
stand_team_attr = " class=st_team"
\end{verbatim}
}
Такое значение данной конфигурационной переменной приведёт к
тому, что заголовок столбца <<команда>> таблицы будет открываться
тегом \V{<th class=st\_team>}, а каждая ячейка второго столбца
таблицы --- тегом \V{<td class=st\_team>}.

\B{Обратите внимание,} что в текущей версии системы \S{ejudge}, к
сожалению, невозможно использовать знак <<кавычки>> (\verb|"|) в
значении конфигурационной переменной.

\subsubsection{Переменная \V{stand\_prob\_attr}}
\label{descServeCfgStandProbAttr}
\hypertarget{F:serve.cfg,T:stand_prob_attr}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{stand\_prob\_attr} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{"{}"{}} (пустая строка)\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная позволяет
определить дополнительные атрибуты столбцов <<задача>>
(каждой задаче турнира соответствует один столбец)
таблицы результатов турнира. Значение данной переменной
добавляется к элементу \V{<th>} заголовка столбцов таблицы и к
каждому элементу \V{<td>}, находящемуся в столбцах <<задача>>.
Значение данной переменной и элементы \V{td} или \V{th} не
разделяются дополнительными пробелами, поэтому значение данной
переменной должно начинаться с пробельного символа.

\B{Пример.}
{\small
\begin{verbatim}
stand_prob_attr = " class=st_prob"
\end{verbatim}
}
Такое значение данной конфигурационной переменной приведёт к
тому, что заголовок столбцов <<задача>> таблицы будет открываться
тегом \V{<th class=st\_prob>}, а каждая ячейка столбцов задач
таблицы --- тегом \V{<td class=st\_prob>}.

\B{Обратите внимание,} что в текущей версии системы \S{ejudge}, к
сожалению, невозможно использовать знак <<кавычки>> (\verb|"|) в
значении конфигурационной переменной.

\subsubsection{Переменная \V{stand\_solved\_attr}}
\label{descServeCfgStandSolvedAttr}
\hypertarget{F:serve.cfg,T:stand_solved_attr}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{stand\_solved\_attr} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{"{}"{}} (пустая строка)\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная позволяет
определить дополнительные атрибуты столбца <<решённые задачи>>
таблицы результатов турнира. Значение данной переменной
добавляется к элементу \V{<th>} заголовка столбцов таблицы и к
каждому элементу \V{<td>}, находящемуся в столбцах <<решённые задачи>>.
Значение данной переменной и элементы \V{td} или \V{th} не
разделяются дополнительными пробелами, поэтому значение данной
переменной должно начинаться с пробельного символа.

\B{Пример.}
{\small
\begin{verbatim}
stand_solved_attr = " class=st_solved"
\end{verbatim}
}
Такое значение данной конфигурационной переменной приведёт к
тому, что заголовок столбцов <<решённые задачи>> таблицы будет открываться
тегом \V{<th class=st\_solved>}, а каждая ячейка столбцов задач
таблицы --- тегом \V{<td class=st\_solved>}.

\B{Обратите внимание,} что в текущей версии системы \S{ejudge}, к
сожалению, невозможно использовать знак <<кавычки>> (\verb|"|) в
значении конфигурационной переменной.

\subsubsection{Переменная \V{stand\_score\_attr}}
\label{descServeCfgStandScoreAttr}
\hypertarget{F:serve.cfg,T:stand_score_attr}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{stand\_score\_attr} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{"{}"{}} (пустая строка)\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная позволяет
определить дополнительные атрибуты столбца <<баллы>>
таблицы результатов турнира. Данный столбец присутствует только
в турнирах, проводимых по системе \I{OLYMPIAD} или \I{KIROV}.
Значение данной переменной добавляется к элементу \V{<th>}
заголовка столбцов таблицы и к каждому элементу \V{<td>},
находящемуся в столбцах <<баллы>>. Значение данной переменной и
элементы \V{td} или \V{th} не разделяются дополнительными
пробелами, поэтому значение данной переменной должно начинаться
с пробельного символа.

\B{Пример.}
{\small
\begin{verbatim}
stand_score_attr = " class=st_score"
\end{verbatim}
}
Такое значение данной конфигурационной переменной приведёт к
тому, что заголовок столбцов <<баллы>> таблицы будет открываться
тегом \V{<th class=st\_score>}, а каждая ячейка столбцов задач
таблицы --- тегом \V{<td class=st\_score>}.

\B{Обратите внимание,} что в текущей версии системы \S{ejudge}, к
сожалению, невозможно использовать знак <<кавычки>> (\verb|"|) в
значении конфигурационной переменной.

\subsubsection{Переменная \V{stand\_penalty\_attr}}
\label{descServeCfgStandPenaltyAttr}
\hypertarget{F:serve.cfg,T:stand_penalty_attr}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{stand\_penalty\_attr} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{"{}"{}} (пустая строка)\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная позволяет
определить дополнительные атрибуты столбца <<штраф>> таблицы
результатов турнира. Данный столбец присутствует только в
турнирах, проводимых по системе \I{ACM}. Значение данной
переменной добавляется к элементу \V{<th>} заголовка столбцов
таблицы и к каждому элементу \V{<td>}, находящемуся в столбцах
<<штраф>>. Значение данной переменной и элементы \V{td} или
\V{th} не разделяются дополнительными пробелами, поэтому
значение данной переменной должно начинаться с пробельного
символа.

\B{Пример.}
{\small
\begin{verbatim}
stand_penalty_attr = " class=st_penalty"
\end{verbatim}
}
Такое значение данной конфигурационной переменной приведёт к
тому, что заголовок столбцов <<штраф>> таблицы будет открываться
тегом \V{<th class=st\_penalty>}, а каждая ячейка столбцов задач
таблицы --- тегом \V{<td class=st\_penalty>}.

\B{Обратите внимание,} что в текущей версии системы \S{ejudge}, к
сожалению, невозможно использовать знак <<кавычки>> (\verb|"|) в
значении конфигурационной переменной.

\subsubsection{Переменная \V{stand\_time\_attr}}
\label{descServeCfgStandTimeAttr}
\hypertarget{F:serve.cfg,T:stand_time_attr}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{stand\_time\_attr} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{"{}"{}} (пустая строка)\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная позволяет
определить атрибуты, с которыми выводится время сдачи задачи в
таблице результатов турнира по системе \I{ACM}. Значение данной
переменной добавляется к элементу \V{<div>} элементов
таблицы. Значение данной переменной и элементы \V{div} не
разделяются дополнительными пробелами, поэтому значение данной
переменной должно начинаться с пробельного символа.

\B{Пример.}
{\small
\begin{verbatim}
stand_time_attr = " class=st_time"
\end{verbatim}
}
Такое значение данной конфигурационной переменной приведёт к
тому, что время сдачи задачи будет открываться тегом
\V{<div class=st\_time>}.

\B{Обратите внимание,} что в текущей версии системы \S{ejudge}, к
сожалению, невозможно использовать знак <<кавычки>> (\verb|"|) в
значении конфигурационной переменной.

\subsubsection{Переменная \V{stand\_extra\_format}}
\label{descServeCfgStandExtraFormat}
\hypertarget{F:serve.cfg,T:stand_extra_format}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{stand\_extra\_format} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{"{}"{}} (пустая строка)\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная позволяет
установить содержимое столбца <<дополнительная информация>>
таблицы результатов турнира. Вывод дополнительного столбца
активируется, если значение данной конфигурационной переменной
не пусто. Значение данной переменной определяет
\hyperlink{F:serve.cfg,S:format_substitutions}{форматную подстановку}
(см. раздел \ref{sectionFormatSubstitutions}), выполняемую при
генерации значений данного столбца.

\B{Пример.}
\B{Пример.}
{\small
\begin{verbatim}
stand_extra_format = "%Mc, %Mo"
\end{verbatim}
}

\subsubsection{Переменная \V{stand\_extra\_legend}}
\label{descServeCfgStandExtraLegend}
\hypertarget{F:serve.cfg,T:stand_extra_legend}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{stand\_extra\_legend} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{"{}"{}} (пустая строка)\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная позволяет
установить название столбца дополнительной информации таблицы
результатов турнира. Столбец дополнительной информации
активируется, если значение конфигурационной переменной
\hyperlink{F:serve.cfg,T:stand_extra_format}{\V{stand\_extra\_format}}
не пусто.

\B{Пример.}
{\small
\begin{verbatim}
stand_extra_legend = "Город, Страна"
\end{verbatim}
}

\subsubsection{Переменная \V{stand\_extra\_attr}}
\label{descServeCfgStandExtraAttr}
\hypertarget{F:serve.cfg,T:stand_extra_attr}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{stand\_extra\_attr} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{"{}"{}} (пустая строка)\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная позволяет
определить атрибуты, с которыми выводится столбец дополнительной
информации в таблице результатов турнира. Столбец дополнительной
информации активируется, если значение конфигурационной
переменной
\hyperlink{F:serve.cfg,T:stand_extra_format}{\V{stand\_extra\_format}}
не пусто. Значение данной переменной добавляется к элементу
\V{<th>} заголовка столбцов таблицы и к каждому элементу
\V{<td>}, находящемуся в столбцах
<<дополнительная информация>>. Значение данной переменной и 
элементы \V{td} или \V{th} не разделяются дополнительными
пробелами, поэтому значение данной переменной должно начинаться
с пробельного символа.

\B{Пример.}
{\small
\begin{verbatim}
stand_extra_attr = " class=st_extra"
\end{verbatim}
}
Такое значение данной конфигурационной переменной приведёт к
тому, что заголовок столбцов <<дополнительная информация>>
таблицы будет открываться тегом \V{<th class=st\_extra>}, а
каждая ячейка столбцов задач таблицы --- тегом
\V{<td class=st\_extra>}.

\B{Обратите внимание,} что в текущей версии системы \S{ejudge}, к
сожалению, невозможно использовать знак <<кавычки>> (\verb|"|) в
значении конфигурационной переменной.

\subsubsection{Переменная \V{stand\_self\_row\_attr}}
\label{descServeCfgStandSelfRowAttr}
\hypertarget{F:serve.cfg,T:stand_self_row_attr}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{stand\_self\_row\_attr} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{"{}"{}} (пустая строка)\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная позволяет
установить дополнительные атрибуты строки таблицы результатов
виртуального турнира, соответствующей текущему виртуальному
участнику. Значение данной переменной добавляется к элементу
\V{<tr>} этой строки.

\B{Пример.}
{\small
\begin{verbatim}
stand_self_row_attr = " bgcolor=#ffeeff"
\end{verbatim}
}
Такое значение данной конфигурационной переменной приведёт к
тому, что строка таблицы результатов будет открываться тегом
\V{<tr bgcolor=\#ffeeff>}.

\B{Обратите внимание,} что в текущей версии системы \S{ejudge}, к
сожалению, невозможно использовать знак <<кавычки>> (\verb|"|) в
значении конфигурационной переменной.

\subsubsection{Переменная \V{stand\_v\_row\_attr}}
\label{descServeCfgStandVRowAttr}
\hypertarget{F:serve.cfg,T:stand_v_row_attr}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{stand\_v\_row\_attr} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{"{}"{}} (пустая строка)\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная позволяет
установить дополнительные атрибуты строк таблицы результатов
виртуального турнира, соответствующих виртуальным участникам
виртуального турнира. Значение данной переменной добавляется к
элементу \V{<tr>} этой строки.

\B{Пример.}
{\small
\begin{verbatim}
stand_v_row_attr = " bgcolor=#eeffff"
\end{verbatim}
}
Такое значение данной конфигурационной переменной приведёт к
тому, что строки таблицы результатов будет открываться тегом
\V{<tr bgcolor=\#eeffff>}.

\B{Обратите внимание,} что в текущей версии системы \S{ejudge}, к
сожалению, невозможно использовать знак <<кавычки>> (\verb|"|) в
значении конфигурационной переменной.

\subsubsection{Переменная \V{stand\_r\_row\_attr}}
\label{descServeCfgStandRRowAttr}
\hypertarget{F:serve.cfg,T:stand_r_row_attr}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{stand\_r\_row\_attr} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{"{}"{}} (пустая строка)\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная позволяет
установить дополнительные атрибуты строк таблицы результатов
виртуального турнира, соответствующих невиртуальным участникам
виртуального турнира. Значение данной переменной добавляется к
элементу \V{<tr>} этой строки.

\B{Пример.}
{\small
\begin{verbatim}
stand_r_row_attr = " bgcolor=#ffffee"
\end{verbatim}
}
Такое значение данной конфигурационной переменной приведёт к
тому, что строки таблицы результатов будет открываться тегом
\V{<tr bgcolor=\#ffffee>}.

\B{Обратите внимание,} что в текущей версии системы \S{ejudge}, к
сожалению, невозможно использовать знак <<кавычки>> (\verb|"|) в
значении конфигурационной переменной.

\subsubsection{Переменная \V{stand\_u\_row\_attr}}
\label{descServeCfgStandURowAttr}
\hypertarget{F:serve.cfg,T:stand_u_row_attr}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{stand\_u\_row\_attr} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{"{}"{}} (пустая строка)\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная позволяет
установить дополнительные атрибуты строк таблицы результатов
виртуального турнира, соответствующих участникам виртуального
турнира с неопределённым статусом. Значение данной переменной
добавляется к элементу \V{<tr>} этой строки.

\B{Пример.}
{\small
\begin{verbatim}
stand_u_row_attr = " bgcolor=#ffffff"
\end{verbatim}
}
Такое значение данной конфигурационной переменной приведёт к
тому, что строки таблицы результатов будет открываться тегом
\V{<tr bgcolor=\#ffffff>}.

\B{Обратите внимание,} что в текущей версии системы \S{ejudge}, к
сожалению, невозможно использовать знак <<кавычки>> (\verb|"|) в
значении конфигурационной переменной.

\newpage
\subsubsection{Переменная \V{use\_dir\_hierarchy}}
\label{descServeCfgUseDirHierarchy}
\hypertarget{F:serve.cfg,T:use_dir_hierarchy}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{use\_dir\_hierarchy} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{true}\\
Может повторяться:     & \I{нет}\\
Версия \S{ejudge}:     & начиная с 2.1.24.\\
\end{tabular}

\B{Описание.} Если данная конфигурационная переменная
установлена в значение \I{true}, для оптимизации доступа к
архивным файлам с посылками участников турнира, судейскими
протоколами тестирования и протоколами тестирования для
участников они организуются в иерархическую структуру каталогов.
Если же данная конфигурационная переменная установлена в
\I{false}, каждая категория архивных файлов будет храниться в
одном каталоге. Например, все протоколы тестирования будут
размещены в каталоге \V{var/archive/reports} каталога турнира.

При иерархическом хранении файлов файлы каждой архивной
категории структурируются в дерево таким образом, чтобы каталог
на каждом уровне содержал не более 32 записей. Максимальное
количество файлов в архиве ограничено примерно 1 миллионом,
поэтому для размещения всех файлов достаточно 3 уровней
подкаталогов. Например, протокол тестирования для посылки с
номером 1905 будет размещён в файле
\V{var/archive/reports/0/1/R/001905}. Данная оптимизация
позволяет существенно увеличить скорость открытия файлов для
файловых систем, в которых записи в каталоге хранятся в
неупорядоченном виде (например, ext2/ext3). По умолчанию
поддержка иерархической структуры архивных каталогов включена.

Старый (до версии 2.1.24) и новый форматы хранения архивных
файлов совместимы снизу вверх, то есть новая версия системы
\S{ejudge} будет корректно открывать архивы, созданные в
системах предыдущих версий. Однако если поддержка иерархической
структуры включена, то все последующие посылки уже будут
сохраняться в иерархической системе каталогов и таким образом
станут недоступными для системы \S{ejudge} предыдущих версий.

\B{Пример.}
{\small
\begin{verbatim}
use_dir_hierarchy = 0
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{use\_gzip}}
\label{descServeCfgUseGzip}
\hypertarget{F:serve.cfg,T:use_gzip}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{use\_gzip} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{true}\\
Может повторяться:     & \I{нет}\\
Версия \S{ejudge}:     & начиная с 2.1.24.\\
\end{tabular}

\B{Описание.} Если данная конфигурационная переменная
установлена в \I{true}, все архивные файлы, размер которых
превышает значения, установленного в глобальной конфигурационной
переменной 
\hyperlink{F:serve.cfg,T:min_gzip_size}{\V{min\_gzip\_size}} (по
умолчанию размер равен 4096 байт),
будут сжиматься алгоритмом \S{gzip} и сохраняться в файле с
суффиксом \V{.gz}. Размер по умолчанию в 4 килобайта выбран,
исходя из того, что 4 Кб --- размер минимальной единицы
выделения дискового пространства в современных версиях ext2/ext3
на архитектуре ia32 (этот размер совпадает с размером страницы
виртуальной памяти). Сжимать файлы меньшего размера
бессмысленно, так как размер занимаемой дисковой памяти от этого
не уменьшится. Если значение конфигурационной переменной
установлено в \I{false}, то все файлы независимо от размера
будут храниться в архиве в несжатом виде. По умолчанию режим
сжатия включён.

\B{Пример.}
{\small
\begin{verbatim}
use_gzip = 0
\end{verbatim}
}

\subsubsection{Переменная \V{min\_gzip\_size}}
\label{descServeCfgMinGzipSize}
\hypertarget{F:serve.cfg,T:min_gzip_size}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{min\_gzip\_size} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{4096}\\
Может повторяться:     & \I{нет}\\
Версия \S{ejudge}:     & начиная с 2.1.24.\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная задаёт
максимальный размер архивного файла, который не будет сжиматься
алгоритмом \S{gzip}, если режим сжатия включён (см. глобальную
конфигурационную переменную 
\hyperlink{F:serve.cfg,T:use_gzip}{\V{use\_gzip}}). Значение по
умолчанию является наилучшим для \S{Linux} на архитектуре
\S{ia32} и файловой системы \S{ext2} или \S{ext3}.

\newpage
\subsubsection{Переменная \V{team\_enable\_ce\_view}}
\label{descServeCfgTeamEnableCeView}
\hypertarget{F:serve.cfg,T:team_enable_ce_view}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{team\_enable\_ce\_view} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{false}\\
Может повторяться:     & \I{нет}\\
Версия \S{ejudge}:     & начиная с 2.1.24.\\
\end{tabular}

\B{Описание.} Если данная конфигурационная переменная
установлена в значение \I{true}, а глобальная конфигурационная
переменная
\hyperlink{F:serve.cfg,S:global,T:team_enable_rep_view}{\V{team\_enable\_rep\_view}}
установлена в \I{false}, участникам предоставляется доступ к
протоколу компиляции их посылки в случае, если компиляция
завершилась из-за ошибки. Для всех статусов посылки, кроме
ошибки компиляции, протокол тестирования участникам недоступен.
Если глобальная конфигурационная переменная
\V{team\_enable\_rep\_view} установлена в \I{true}, значение
данной конфигурационной переменной не используется.

Для каждой задачи режим показа ошибок компиляции может быть
переопределён с помощью конфигурационной переменной 
\hyperlink{F:serve.cfg,S:problem,T:team_enable_ce_view}{\V{team\_enable\_ce\_view}}
секции описания задачи.

\subsubsection{Переменная \V{team\_show\_judge\_report}}
\label{descServeCfgTeamShowJudgeReport}
\hypertarget{F:serve.cfg,T:team_show_judge_report}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{team\_show\_judge\_report} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{false}\\
Может повторяться:     & \I{нет}\\
Версия \S{ejudge}:     & начиная с 2.1.24.\\
\end{tabular}

\B{Описание.} Если данная конфигурационная переменная
установлена в значение \I{true}, и глобальная конфигурационная 
переменная
\hyperlink{F:serve.cfg,S:global,T:team_enable_rep_view}{\V{team\_enable\_rep\_view}}
тоже установлена в \I{true}. Вместо сокращённой версии протокола
тестирования (так называемой версии участника) участникам
предоставляется доступ к полной судейской версии протокола
тестирования. Судейский протокол тестирования в дополнение к
протоколу тестирования для участника содержит тексты тестов,
результат, выведенный программой, вывод программы на стандартный
поток ошибок, вывод проверяющей программы. Если конфигурационная
переменная \V{team\_enable\_rep\_view} установлена в \I{false},
значение данной конфигурационной переменной не используется.

Для каждой задачи режим показа полного протокола может быть
переопределён с помощью конфигурационной переменной 
\hyperlink{F:serve.cfg,S:problem,T:team_show_judge_report}{\V{team\_show\_judge\_report}}
секции описания задачи.

\newpage
\subsubsection{Переменная \V{team\_extra\_dir}}
\label{descServeCfgTeamExtraDir}
\hypertarget{F:serve.cfg,T:team_extra_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{team\_extra\_dir} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{путь к каталогу}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{\$\{var\_dir\}/team\_extra}\\
Может повторяться:     & \I{нет}\\
Версия \S{ejudge}:     & начиная с 2.1.26.\\
\end{tabular}

\B{Описание.}
Данная конфигурационная переменная содержит путь к каталогу, в
котором размещаются файлы сохраняемого состояния клиентов
участников турнира. В настоящее время сохраняется статус
просмотра каждым участником сообщений, адресованных ему или всем
участникам турнира.

По умолчанию значение этой переменной равно
\V{\$\{var\_dir\}/team\_extra}, где \V{\$\{var\_dir\}} ---
значение глобальной конфигурационной переменной
\hyperlink{F:serve.cfg,T:var_dir}{\V{var\_dir}}. Если значение
этой переменной не начинается с символа `\V{/}', то есть
представляет собой относительный путь, полный путь к каталогу
вычисляется относительно каталога \V{\$\{var\_dir\}}. Если
значение переменной \V{team\_extra\_dir} начинается с символа
`\V{/}', то есть является абсолютным путём, используется
указанный абсолютный путь.

Каталог с файлами сохраняемого состояния клиентов участников
турнира имеет иерархическую структуру. В каждом каталоге может
находиться не более чем 32 подкаталогов или непосредственно
файлов состояния. Дерево имеет высоту 4 (то есть три каталога,
затем файл состояния). Таким образом максимальный идентификатор
участника равен примерно 100000. Значения конфигурационной
переменной \V{team\_extra\_dir}, устанавливаемого по умолчанию
должно быть всегда достаточно, таким образом необходимость в
явном задании этой переменной не должна возникать.

\newpage
\subsubsection{Переменная \V{disable\_testing}}
\label{descServeCfgDisableTesting}
\hypertarget{F:serve.cfg,T:disable_testing}{}

\begin{tabular}{@{}>{\bfseries}lp{10.4cm}}
Имя переменной:        & \K{disable\_testing} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve}, \S{run} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{false} \\
Может повторяться:     & \I{нет}\\
Версия \S{ejudge}:     & начиная с 2.1.25.\\
\end{tabular}

\B{Описание.}
Если данная конфигурационная переменная установлена в \I{true},
тестирование всех задач, решения которых могут посылать
участники, отключено. При приёме программы на проверку, посылка
получает статус ``Accepted for testing'' и не отправляется на
компиляцию и тестирование. В отличие от флага запрещения
автоматического тестирования
\hyperlink{F:serve.cfg,T:disable_auto_testing}{\V{disable\_auto\_testing}}
данная конфигурационная переменная запрещает всякое
тестирование. Посылки по задачам с запрещённым тестированием не
могут быть явно или неявно пересужены.

Данная конфигурационная переменная предназначена для того, чтобы
вести учёт задач, автоматическая проверка которых по тем или
иным причинам невозможна. Администратор турнира может явно
выставить для посылок по этим задачам любой статус и установить
любой балл. Выставленная таким образом информация будет
отображена в таблице текущих результатов турнира.

Данная конфигурационная переменная обрабатывается также и
программой \S{run}. Для задач, тестирование которых запрещено, в
процессе инициализации программа \S{run} не проверяет наличия
тестов, правильных ответов, проверяющих программ и т. д.

Данная глобальная конфигурационная переменная устанавливает флаг
запрета тестирования для всех задач одновременно. Для каждой
конкретной задачи флаг запрета тестирования может быть
переопределён с помощью конфигурационной переменной 
\hyperlink{F:serve.cfg,S:problem,T:disable_testing}{\V{disable\_testing}}
раздела описания задачи.

\B{Пример.}
{\small
\begin{verbatim}
disable_testing
\end{verbatim}
}

\subsubsection{Переменная \V{enable\_printing}}
\label{descServeCfgEnablePrinting}
\hypertarget{F:serve.cfg,T:enable_printing}{}

\begin{tabular}{@{}>{\bfseries}lp{10.4cm}}
Имя переменной:        & \K{enable\_printing} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{false} \\
Может повторяться:     & \I{нет}\\
Версия \S{ejudge}:     & начиная с 2.1.26.\\
\end{tabular}

\B{Описание.}
Если данная конфигурационная переменная установлена в \I{true},
участники турнира получают возможность печатать тексты программ,
посылаемых ими на проверку, на принтере. Для печати вызывается
сначала программа \S{a2ps}, которая генерирует PostScript-файл,
содержащий заглавную страницу и текст программы, затем программа
\S{lpr}, ставящая PostScript-файл в очередь печати. Для
участников турнира устанавливается максимальное число страниц,
которые могут быть напечатаны (см. конфигурационную переменную
\hyperlink{F:serve.cfg,T:team_page_quota}{\V{team\_page\_quota}}).

Пользователь, для которого установлен бит привилегий
\V{PRINT\_RUN} и который имеет привилегии запускать программу
\S{judge} или \S{master} и просматривать текст решения
участника, может выводить текст программы на принтер вне
зависимости от значения данной конфигурационной переменной.

\subsubsection{Переменная \V{team\_page\_quota}}
\label{descServeCfgTeamPageQuota}
\hypertarget{F:serve.cfg,T:team_page_quota}{}

\begin{tabular}{@{}>{\bfseries}lp{10.4cm}}
Имя переменной:        & \K{team\_page\_quota} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{50} \\
Может повторяться:     & \I{нет}\\
Версия \S{ejudge}:     & начиная с 2.1.26.\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
максимальное число страниц, которые могут быть напечатаны на
принтере непривилегированным участником турнира. Переменная
действует, только если глобальная конфигурационная переменная
\hyperlink{F:serve.cfg,T:enable_printing}{\V{enable\_printing}}
установлена в \I{true}.

Количество страниц занимаемых распечаткой текста программы
вычисляется по результату работы программы \S{a2ps} с помощью
анализа диагностики, выводимой программой на стандартный поток
ошибок. В количество страниц распечатки включается и
обязательная заглавная страница, содержащая информацию о данной
посылке. Таким образом, минимальное количество страниц,
занимаемых распечаткой равно 2. Если при генерации очередного
PostScript-файла обнаруживается, что общее количество
напечатанных страниц с учётом данного файла превышает квоту,
выдаётся сообщение об ошибке превышения квоты печати.

\B{Пример.}
{\small
\begin{verbatim}
team_page_quota = 20
\end{verbatim}
}

\subsubsection{Переменная \V{a2ps\_path}}
\label{descServeCfgA2psPath}
\hypertarget{F:serve.cfg,T:a2ps_path}{}

\begin{tabular}{@{}>{\bfseries}lp{10.4cm}}
Имя переменной:        & \K{a2ps\_path} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{путь к программе}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{/usr/bin/a2ps} \\
Может повторяться:     & \I{нет}\\
Версия \S{ejudge}:     & начиная с 2.1.26.\\
\end{tabular}

\B{Описание.}
Данная конфигурационная переменная позволяет задать путь к
программе \S{a2ps}, которая используется для преобразования
текста программы в формат PostScript для печати на принтере.

\B{Пример.}
{\small
\begin{verbatim}
a2ps_path = "/usr/local/bin/a2ps"
\end{verbatim}
}

\subsubsection{Переменная \V{a2ps\_args}}
\label{descServeCfgA2psArgs}
\hypertarget{F:serve.cfg,T:a2ps_args}{}

\begin{tabular}{@{}>{\bfseries}lp{10.4cm}}
Имя переменной:        & \K{a2ps\_args} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{см. ниже} \\
Может повторяться:     & \I{да}\\
Версия \S{ejudge}:     & начиная с 2.1.26.\\
\end{tabular}

\B{Описание.}
Данная конфигурационная переменная позволяет задать
дополнительные аргументы для вызовы программы \S{a2ps}, которая
используется для преобразования текста программы в формат
PostScript для печати на принтере. В конфигурационном файле
может присутствовать несколько определений этой переменной.
Каждое определение задаёт очередной аргумент для передачи
программе \S{a2ps}. Если эта переменная не установлена,
программа \S{a2ps} будет вызвана со следующими аргументами:
{\small
\begin{verbatim}
/usr/bin/a2ps -1 -E -o PSFILE FILES
\end{verbatim}
}
Здесь \V{PSFILE} --- это путь ко временному PostScript-файлу,
который далее будет отправлен на печать, а \V{FILES} ---
временные файлы, созданные программой \S{serve}. Первый файл ---
это титульная страница, а второй файл --- файл с текстом
программы.

\B{Пример.}
{\small
\begin{verbatim}
a2ps_args = "-2"
a2ps_args = "-E"
a2ps_args = "-X"
a2ps_args = "koi8-r"
\end{verbatim}
}
В данном случае программа \S{a2ps} будет вызвана следующим
образом:
{\small
\begin{verbatim}
/usr/bin/a2ps -2 -E -X koi8-r -o PSFILE FILES
\end{verbatim}
}

\subsubsection{Переменная \V{lpr\_path}}
\label{descServeCfgLprPath}
\hypertarget{F:serve.cfg,T:lpr_path}{}

\begin{tabular}{@{}>{\bfseries}lp{10.4cm}}
Имя переменной:        & \K{lpr\_path} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{путь к программе}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{/usr/bin/lpr} \\
Может повторяться:     & \I{нет}\\
Версия \S{ejudge}:     & начиная с 2.1.26.\\
\end{tabular}

\B{Описание.}
Данная конфигурационная переменная позволяет задать путь к
программе \S{lpr}, которая используется для постановки
PostScript-файла в очередь печати на принтер.

\B{Пример.}
{\small
\begin{verbatim}
lpr_path = "/usr/local/bin/lpr"
\end{verbatim}
}

\subsubsection{Переменная \V{lpr\_args}}
\label{descServeCfgLprArgs}
\hypertarget{F:serve.cfg,T:lpr_args}{}

\begin{tabular}{@{}>{\bfseries}lp{10.4cm}}
Имя переменной:        & \K{lpr\_args} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{не установлено} \\
Может повторяться:     & \I{да}\\
Версия \S{ejudge}:     & начиная с 2.1.26.\\
\end{tabular}

\B{Описание.}
Данная конфигурационная переменная позволяет устанавливать
дополнительные параметры, которые будут переданы программе
постановки задания в очередь печати \S{lpr}. Если данная
переменная не установлена, программа \S{lpr} запускается
следующим образом:
{\small
\begin{verbatim}
/usr/bin/lpr PSFILE
\end{verbatim}
}
Здесь \V{PSFILE} --- имя временного PostScript-файла с заданием
печати (см. описание глобальной конфигурационной переменной
\hyperlink{F:serve.cfg,T:a2ps_args}{\V{a2ps\_args}}).
Определение переменной \V{lpr\_args} может повторяться несколько
раз. Каждое определение задаёт один аргумент командной строки
для передачи программе \S{lpr}.

\B{Пример.}
{\small
\begin{verbatim}
lpr_args = "-P"
lpr_args = "myprinter"
\end{verbatim}
}
В данном случае программа \S{lpr} будет вызываться следующим образом:
{\small
\begin{verbatim}
/usr/bin/lpr -P myprinter PSFILE
\end{verbatim}
}

\subsubsection{Переменная \V{diff\_path}}
\label{descServeCfgDiffPath}
\hypertarget{F:serve.cfg,T:diff_path}{}

\begin{tabular}{@{}>{\bfseries}lp{10.4cm}}
Имя переменной:        & \K{diff\_path} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{путь к программе}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{/usr/bin/diff} \\
Может повторяться:     & \I{нет}\\
Версия \S{ejudge}:     & начиная с 2.1.27.\\
\end{tabular}

\B{Описание.}
Данная конфигурационная переменная позволяет задать путь к
программе \S{diff}, которая используется для сравнения текстов
двух посылок.

\B{Пример.}
{\small
\begin{verbatim}
lpr_path = "/usr/local/bin/diff"
\end{verbatim}
}

\subsubsection{Переменная \V{enable\_report\_upload}}
\label{descServeCfgEnableReportUpload}
\hypertarget{F:serve.cfg,T:enable_report_upload}{}

\begin{tabular}{@{}>{\bfseries}lp{10.4cm}}
Имя переменной:        & \K{enable\_report\_upload} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{false} \\
Может повторяться:     & \I{нет}\\
Версия \S{ejudge}:     & начиная с 2.1.28\\
\end{tabular}

\B{Описание.}
Если данная конфигурационная переменная установлена в \I{true},
пользователь с помощью CGI-программ \S{master} или \S{judge}
получает возможность загружать на сервер турнира протокол
тестирования. Для этого пользователя в соответствующем турнире
должен быть установлен бит полномочий \V{EDIT\_RUN}. Если в
турнире включена поддержка протоколов тестирования участников
(см. глобальную конфигурационную переменную
\hypertarget{F:serve.cfg,T:team_enable_rep_view}{\V{team\_enable\_rep\_view}}
при загрузке протокола на сервер можно выбрать, заместит ли
загружаемый протокол протокол участника, судьи или сразу оба.

\subsubsection{Переменная \V{priority\_adjustment}}
\label{descServeCfgPriorityAdjustment}
\hypertarget{F:serve.cfg,T:priority_adjustment}{}

\begin{tabular}{@{}>{\bfseries}lp{10.4cm}}
Имя переменной:        & \K{priority\_adjustment} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{0} \\
Может повторяться:     & \I{нет}\\
Версия \S{ejudge}:     & начиная с 2.1.29\\
\end{tabular}

\B{Описание.}
Данная конфигурационная переменная позволяет установить базовый
приоритет проверки решений. Приоритет проверки решений
изменяется от -16 (самый высокий приоритет) до 15 (самый низкий
приоритет). Значение, установленное в данной конфигурационной
переменной применяется как базовое значение приоритета для всех
посылок данного турнира. Базовое значение приоритета может
модифицироваться в зависимости от идентификатора пользователя
(глобальная конфигурационная переменная
\hyperlink{F:serve.cfg,T:user_priority_adjustment}{\V{user\_priority\_adjustment}}),
сдаваемой задачи (конфигурационная переменная
\hyperlink{F:serve.cfg,S:problem,T:priority_adjustment}{\V{priority\_adjustment}}
секции описания задачи), используемого языка программирования
(конфигурационная переменная
\hyperlink{F:serve.cfg,S:language,T:priority_adjustment}{\V{priority\_adjustment}}
секции описания языка программирования) и тестировщика для
данной комбинации задачи и языка (конфигурационная переменная
\hyperlink{F:serve.cfg,S:tester,T:priority_adjustment}{\V{priority\_adjustment}}
секции описания тестировщика). Полное значение приоритета
получается сложением глобального приоритета, приоритета задачи,
приоритета языка программирования и приоритета тестировщика.

Программа \hyperlink{P:run}{\S{run}} выбирает запросы на
тестирование из каталога запросов в зависимости от приоритета
запроса. Более приоритетный запрос обрабатывается первым. Если
во время тестирования некоторой посылки поступает более
приоритетная посылка, тестирование текущей посылки доводится до
конца. Обратите внимание, что приоритет тестирования не имеет
отношения к приоритету процесса (т. н. nice), с которым работает
программа тестирования.

\subsubsection{Переменная \V{user\_priority\_adjustment}}
\label{descServeCfgUserPriorityAdjustment}
\hypertarget{F:serve.cfg,T:user_priority_adjustment}{}

\begin{tabular}{@{}>{\bfseries}lp{10.4cm}}
Имя переменной:        & \K{user\_priority\_adjustment} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:global}{\V{global}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{спецификация приоритета}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{не установлено} \\
Может повторяться:     & \I{да}\\
Версия \S{ejudge}:     & начиная с 2.1.29\\
\end{tabular}

\B{Описание.}
Данная конфигурационная переменная позволяет задать изменение
приоритета тестирования (см. описание глобальной
конфигурационной переменной
\hyperlink{F:serve.cfg,T:priority_adjustment}{\V{priority\_adjustment}})
для некоторого пользователя. Определение данной переменной может
быть повторено несколько раз, задавая таким образом изменения
приоритета для нескольких пользователей.

Спецификация приоритета имеет следующий вид:
\begin{verbatim}
LOGIN PRIO-CHANGE
\end{verbatim}
Здесь \I{LOGIN} --- это регистрационное имя пользователя, а
\I{PRIO-CHANGE} --- целое число, изменение приоритета.
Отрицательное изменение приоритета означает повышение приоритета
относительно базового значения, а положительное --- понижение
приоритета.

\B{Пример.}
{\small
\begin{verbatim}
user_priority_adjustment = "admin -10"
user_priority_adjustment = "vasya 5"
\end{verbatim}
}

%%%% END OF GLOBAL CONFIGURATION VARIABLES

\newpage
\subsection{Параметры задачи}
\hypertarget{F:serve.cfg,S:problem}{}

Каждая задача описывается в отдельной секции с именем \V{problem}.
Система \S{ejudge} в настоящее время поддерживает до 100 задач.
Чтобы увеличить максимальное число одновременно поддерживаемых
задач необходимо изменить константу \V{MAX\_PROBLEM} в файле
\V{prepare.c}.

Все конфигурационные переменные, доступные в описании задачи,
перечислены ниже.

\noindent
\begin{longtable}{|>{\ttfamily\small}l|>{\small}l|>{\small}p{8.5cm}|}
\hline
\rmfamily\normalsize Название & Стр. & Описание\\
\hline
\endhead

\hline
\multicolumn{3}{|r|}%
{\small\itshape Продолжение на следующей странице}\\
\hline
\endfoot

\hline
\endlastfoot

\strut\hyperlink{F:serve.cfg,S:problem,T:abstract}{abstract}
  & \pageref{descServeCfgProblemAbstract}
  & Флаг абстрактной задачи. \\
\strut\hyperlink{F:serve.cfg,S:problem,T:accept_partial}{accept\_partial}
  & \pageref{descServeCfgProblemAcceptPartial}
  & Флаг приёма задач на тестирование даже если решение не проходит
    обязательные тесты.\\
\strut\hyperlink{F:serve.cfg,S:problem,T:checker_real_time_limit}{checker\_real\_time\_limit}
  & \pageref{descServeCfgProblemCheckerRealTimeLimit}
  & Ограничение времени работы проверяющей программы. \\
\strut\hyperlink{F:serve.cfg,S:problem,T:corr_dir}{corr\_dir}
  & \pageref{descServeCfgProblemCorrDir}
  & Каталог с правильными ответами к тестам. \\
\strut\hyperlink{F:serve.cfg,S:problem,T:corr_sfx}{corr\_sfx}
  & \pageref{descServeCfgProblemCorrSfx}
  & Суффикс файлов с правильными ответами к тестам. \\
\strut\hyperlink{F:serve.cfg,S:problem,T:date_penalty}{date\_penalty}
  & \pageref{descServeCfgProblemDatePenalty}
  & Штраф в зависимости от времени сдачи. \\
\strut\hyperlink{F:serve.cfg,S:problem,T:deadline}{deadline}
  & \pageref{descServeCfgProblemDeadline}
  & Крайний срок сдачи задачи. \\
\strut\hyperlink{F:serve.cfg,S:problem,T:disable_auto_testing}{disable\_auto\_testing}
  & \pageref{descServeCfgProblemDisableAutoTesting}
  & Отключение режима автоматической проверки решения. \\
\strut\hyperlink{F:serve.cfg,S:problem,T:disable_language}{disable\_language}
  & \pageref{descServeCfgProblemDisableLanguage}
  & Запрет использования указанных языков. \\
\strut\hyperlink{F:serve.cfg,S:problem,T:disable_testing}{disable\_testing}
  & \pageref{descServeCfgProblemDisableTesting}
  & Запрет проверки решения средствами \S{ejudge}. \\
\strut\hyperlink{F:serve.cfg,S:problem,T:full_score}{full\_score}
  & \pageref{descServeCfgProblemFullScore}
  & Количество баллов за полное решение задачи. \\
\strut\hyperlink{F:serve.cfg,S:problem,T:hidden}{hidden}
  & \pageref{descServeCfgProblemHidden}
  & Флаг <<скрытой>> задачи. \\
\strut\hyperlink{F:serve.cfg,S:problem,T:id}{id}
  & \pageref{descServeCfgProblemId}
  & Идентификатор задачи. \\
\strut\hyperlink{F:serve.cfg,S:problem,T:info_dir}{info\_dir}
  & \pageref{descServeCfgProblemInfoDir}
  & Каталог файлов с дополнительной информацией о тестах. \\
\strut\hyperlink{F:serve.cfg,S:problem,T:info_sfx}{info\_sfx}
  & \pageref{descServeCfgProblemInfoSfx}
  & Суффикс файлов с дополнительной информацией о тестах. \\
\strut\hyperlink{F:serve.cfg,S:problem,T:input_file}{input\_file}
  & \pageref{descServeCfgProblemInputFile}
  & Имя входного файла для решений задачи. \\
\strut\hyperlink{F:serve.cfg,S:problem,T:long_name}{long\_name}
  & \pageref{descServeCfgProblemLongName}
  & <<Длинное>> имя задачи. \\
\strut\hyperlink{F:serve.cfg,S:problem,T:output_file}{output\_file}
  & \pageref{descServeCfgProblemOutputFile}
  & Имя выходного файла для решений задачи. \\
\strut\hyperlink{F:serve.cfg,S:problem,T:priority_adjustment}{priority\_adjustment}
  & \pageref{descServeCfgProblemPriorityAdjustment}
  & Поправка к приоритету тестирования для задачи. \\
\strut\hyperlink{F:serve.cfg,S:problem,T:real_time_limit}{real\_time\_limit}
  & \pageref{descServeCfgProblemRealTimeLimit}
  & Лимит астрономического времени на 1 тест для решения. \\
\strut\hyperlink{F:serve.cfg,S:problem,T:run_penalty}{run\_penalty}
  & \pageref{descServeCfgProblemRunPenalty}
  & Штраф за попытку решения задачи. \\
\strut\hyperlink{F:serve.cfg,S:problem,T:short_name}{short\_name}
  & \pageref{descServeCfgProblemShortName}
  & <<Короткое>> имя задачи. \\
\strut\hyperlink{F:serve.cfg,S:problem,T:super}{super}
  & \pageref{descServeCfgProblemSuper}
  & Имя наследуемой абстрактной задачи. \\
\strut\hyperlink{F:serve.cfg,S:problem,T:team_enable_ce_view}{team\_enable\_ce\_view}
  & \pageref{descServeCfgProblemTeamEnableCeView}
  & Флаг разрешения просмотра участником протокола компиляции программы
    в случае ошибки компиляции.\\
\strut\hyperlink{F:serve.cfg,S:problem,T:team_enable_rep_view}{team\_enable\_rep\_view}
  & \pageref{descServeCfgProblemTeamEnableRepView}
  & Флаг разрешения просмотра участниками протокола тестирования. \\
\strut\hyperlink{F:serve.cfg,S:problem,T:team_show_judge_report}{team\_show\_judge\_report}
  & \pageref{descServeCfgProblemTeamShowJudgeReport}
  & Флаг доступа участников к судейскому протоколу тестирования.\\
\strut\hyperlink{F:serve.cfg,S:problem,T:tester_id}{tester\_id}
  & \pageref{descServeCfgProblemTesterId}
  & Идентификатор задачи для передачи на тестирование. \\
\strut\hyperlink{F:serve.cfg,S:problem,T:test_dir}{test\_dir}
  & \pageref{descServeCfgProblemTestDir}
  & Каталог с тестами к задаче. \\
\strut\hyperlink{F:serve.cfg,S:problem,T:test_score}{test\_score}
  & \pageref{descServeCfgProblemTestScore}
  & Количество баллов за один тест. \\
\strut\hyperlink{F:serve.cfg,S:problem,T:test_score_list}{test\_score\_list}
  & \pageref{descServeCfgProblemTestScoreList}
  & Спецификация баллов за тесты. \\
\strut\hyperlink{F:serve.cfg,S:problem,T:test_sets}{test\_sets}
  & \pageref{descServeCfgProblemTestSets}
  & Спецификация баллов за множество тестов. \\
\strut\hyperlink{F:serve.cfg,S:problem,T:test_sfx}{test\_sfx}
  & \pageref{descServeCfgProblemTestSfx}
  & Суффикс имён файлов с тестами. \\
\strut\hyperlink{F:serve.cfg,S:problem,T:tests_to_accept}{tests\_to\_accept}
  & \pageref{descServeCfgProblemTestsToAccept}
  & Количество тестов для принятия задачи в режиме турнира \I{OLYMPIAD}. \\
\strut\hyperlink{F:serve.cfg,S:problem,T:tgz_dir}{tgz\_dir}
  & \pageref{descServeCfgProblemTgzDir}
  & Каталог архивов рабочего каталога тестируемых программ. \\
\strut\hyperlink{F:serve.cfg,S:problem,T:tgz_sfx}{tgz\_sfx}
  & \pageref{descServeCfgProblemTgzSfx}
  & Суффикс файлов архивов рабочего каталога тестируемых программ. \\
\strut\hyperlink{F:serve.cfg,S:problem,T:time_limit}{time\_limit}
  & \pageref{descServeCfgProblemTimeLimit}
  & Лимит виртуального процессорного времени на 1 тест для решения. \\
\strut\hyperlink{F:serve.cfg,S:problem,T:use_corr}{use\_corr}
  & \pageref{descServeCfgProblemUseCorr}
  & Флаг использования правильных ответов к тестам. \\
\strut\hyperlink{F:serve.cfg,S:problem,T:use_info}{use\_info}
  & \pageref{descServeCfgProblemUseInfo}
  & Флаг использования файлов с дополнительной информацией о
    тестах. \\
\strut\hyperlink{F:serve.cfg,S:problem,T:use_stdin}{use\_stdin}
  & \pageref{descServeCfgProblemUseStdin}
  & Флаг использования стандартного потока ввода для входных данных. \\
\strut\hyperlink{F:serve.cfg,S:problem,T:use_stdout}{use\_stdout}
  & \pageref{descServeCfgProblemUseStdout}
  & Флаг использования стандартного потока вывода для ответа. \\
\strut\hyperlink{F:serve.cfg,S:problem,T:use_tgz}{use\_tgz}
  & \pageref{descServeCfgProblemUseTgz}
  & Флаг использования файлов архивов рабочего каталога
    тестируемой программы. \\
\strut\hyperlink{F:serve.cfg,S:problem,T:variable_full_score}{variable\_full\_score}
  & \pageref{descServeCfgProblemVariableFullScore}
  & Флаг переменного максимального балла за задачу. \\
\strut\hyperlink{F:serve.cfg,S:problem,T:variant_num}{variant\_num}
  & \pageref{descServeCfgProblemVariantNum}
  & Общее количество вариантов данной задачи. \\
\end{longtable}

\newpage
\subsubsection{Переменная \V{id}}
\label{descServeCfgProblemId}
\hypertarget{F:serve.cfg,S:problem,T:id}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{id} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:problem}{\V{problem}} \\
Используются:          & \S{serve}, \S{run} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
идентификатор задачи. Идентификатор задачи --- это целое число в
интервале от 1 до константы \V{MAX\_PROBLEM}, которая
определяется в исходном файле \V{prepare.c} системы \S{ejudge}.
Идентификатор задачи присваивается только неабстрактным задачам.
Абстрактные задачи не имеют идентификатора. Каждая неабстрактная
задача должна иметь уникальный идентификатор. Таким образом,
одновременно поддерживается до неабстрактных 100 задач. Для
увеличения количества одновременно поддерживаемых задач система
\S{ejudge} должна быть перекомпилирована с большим значением
константы \V{MAX\_PROBLEM}.

Если в описании задачи её идентификатор явно не указан,
идентификатор задачи назначается автоматически. Автоматически
назначаемый идентификатор на 1 больше идентификатора предыдущей
неабстрактной задачи. Такая политика автоматического назначения
идентификаторов задачи может привести к ошибке из-за повторного
использования одного и того же идентификатора для разных задач.

\subsubsection{Переменная \V{tester\_id}}
\label{descServeCfgProblemTesterId}
\hypertarget{F:serve.cfg,S:problem,T:tester_id}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{tester\_id} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:problem}{\V{problem}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная переменная задаёт идентификатор задачи для
сервера тестирования \S{run}, если этот идентификатор отличается
от идентификатора задачи в сервере турнира \S{serve}. По
умолчанию основной идентификатор задачи и идентификатор задачи
для тестирования совпадают. Данная конфигурационная переменная
может применяться, если сервер тестирования настроен на
тестирование задач нескольких турниров одновременно. В этом
случае идентификатор задачи в конфигурационном файле сервера
тестирования и идентификатор задачи в конфигурационном файле
сервера турнира могут не совпадать. Конфигурационная переменная
\V{tester\_id} позволяет в этом случае установить идентификатор
задачи для тестирования в описании задачи.

Эта конфигурационная переменная не наследуется от абстрактного
описания задачи, поэтому её использование в абстрактных задачах
не имеет смысла.

{\small
\begin{verbatim}
tester_id = 20
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{short\_name}}
\label{descServeCfgProblemShortName}
\hypertarget{F:serve.cfg,S:problem,T:short_name}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{short\_name} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:problem}{\V{problem}} \\
Используются:          & \S{serve}, \S{run} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
короткое имя задачи. Для абстрактных задач короткое имя задачи
должно быть установлено и должно быть уникально среди всех
абстрактных задач. Для неабстрактных задач короткое имя должно
быть установлено, кроме случая, когда значение глобальной
конфигурационной переменной
\hyperlink{F:serve.cfg,T:auto_short_problem_name}{\V{auto\_short\_problem\_name}}
установлено в \I{true}. В этом случае если короткое имя задачи
не задано, оно будет сгенерировано автоматически из
идентификатора задачи, используя форматное преобразование
\V{\%05d} функции \V{snprintf}. Короткое имя неабстрактной
задачи не обязано быть уникальным. Оно может совпадать с другим
коротким именем абстрактной или неабстрактной задачи.

Короткое имя неабстрактной задачи является, по сути,
идентификатором задачи для участников турнира и зрителей.
Короткое имя задачи отображается в таблице текущего положения
участников, в журнале посылок, в меню сдачи программы на
проверку CGI-программы \S{team} и т. д. Традиционно короткое имя
задачи --- это заглавная латинская буква \V{A}, \V{B} и т. д.
для основных задач турнира и \V{Z}, \V{Y} для пробных задач
турнира.

Короткое имя абстрактной задачи используется для идентификации
абстрактной задачи при наследовании её свойств с помощью
конфигурационной переменной
\hyperlink{F:serve.cfg,S:problem,T:super}{\V{super}}.
Короткое имя не наследуется.

{\small
\begin{verbatim}
short_name = "A"
\end{verbatim}
}

\subsubsection{Переменная \V{long\_name}}
\label{descServeCfgProblemLongName}
\hypertarget{F:serve.cfg,S:problem,T:long_name}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{long\_name} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:problem}{\V{problem}} \\
Используются:          & \S{serve}, \S{run} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
<<длинное>> имя задачи, то есть её содержательное название.
Описание абстрактной задачи не может устанавливать длинное имя
задачи, длинное имя задачи не наследуется. Если описание
неабстрактной задачи не устанавливает длинное имя задачи, оно
генерируется автоматически по шаблону \V{"Problem \%d"} по
идентификатору задачи.

{\small
\begin{verbatim}
long_name = "За пивОм"
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{abstract}}
\label{descServeCfgProblemAbstract}
\hypertarget{F:serve.cfg,S:problem,T:abstract}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{abstract} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:problem}{\V{problem}} \\
Используются:          & \S{serve}, \S{run} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{false}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Если данная конфигурационная переменная
установлена в \I{true}, текущее описание задачи является
описанием абстрактной задачи. Абстрактная задача не может иметь
идентификатора задачи
(\hyperlink{F:serve.cfg,S:problem,T:id}{\V{id}}) или длинного
имени задачи
(\hyperlink{F:serve.cfg,S:problem,T:long_name}{\V{long\_name}}),
но должна иметь короткое имя
(\hyperlink{F:serve.cfg,S:problem,T:short_name}{\V{short\_name}}),
уникальное среди всех абстрактных задач. Абстрактная задаче
не может наследовать свойства другой абстрактной задачи, то есть
в абстрактных задачах запрещено использование конфигурационной
переменной \hyperlink{F:serve.cfg,S:problem,T:super}{\V{super}}.
Значения конфигурационных переменных, установленные в некоторой
абстрактной задаче, наследуются конкретной задачей, указавшей
данную абстрактную задачу в значении своей конфигурационной
переменной \V{super}. 

Конкретная задача наследует следующие конфигурационные
переменные из описания абстрактной задачи:
\hyperlink{F:serve.cfg,S:problem,T:accept_partial}{\V{accept\_partial}},
\hyperlink{F:serve.cfg,S:problem,T:checker_real_time_limit}{\V{checker\_real\_time\_limit}},
\hyperlink{F:serve.cfg,S:problem,T:corr_dir}{\V{corr\_dir}},
\hyperlink{F:serve.cfg,S:problem,T:corr_sfx}{\V{corr\_sfx}},
\hyperlink{F:serve.cfg,S:problem,T:disable_auto_testing}{\V{disable\_auto\_testing}},
\hyperlink{F:serve.cfg,S:problem,T:disable_testing}{\V{disable\_testing}},
\hyperlink{F:serve.cfg,S:problem,T:full_score}{\V{full\_score}},
\hyperlink{F:serve.cfg,S:problem,T:hidden}{\V{hidden}},
\hyperlink{F:serve.cfg,S:problem,T:info_dir}{\V{info\_dir}},
\hyperlink{F:serve.cfg,S:problem,T:info_sfx}{\V{info\_sfx}},
\hyperlink{F:serve.cfg,S:problem,T:input_file}{\V{input\_file}},
\hyperlink{F:serve.cfg,S:problem,T:output_file}{\V{output\_file}},
\hyperlink{F:serve.cfg,S:problem,T:real_time_limit}{\V{real\_time\_limit}},
\hyperlink{F:serve.cfg,S:problem,T:run_penalty}{\V{run\_penalty}},
\hyperlink{F:serve.cfg,S:problem,T:team_enable_ce_view}{\V{team\_enable\_ce\_view}},
\hyperlink{F:serve.cfg,S:problem,T:team_enable_rep_view}{\V{team\_enable\_rep\_view}},
\hyperlink{F:serve.cfg,S:problem,T:team_show_judge_report}{\V{team\_show\_judge\_report}},
\hyperlink{F:serve.cfg,S:problem,T:test_dir}{\V{test\_dir}},
\hyperlink{F:serve.cfg,S:problem,T:test_score}{\V{test\_score}},
\hyperlink{F:serve.cfg,S:problem,T:test_sfx}{\V{test\_sfx}},
\hyperlink{F:serve.cfg,S:problem,T:test_to_accept}{\V{test\_to\_accept}},
\hyperlink{F:serve.cfg,S:problem,T:tgz_dir}{\V{tgz\_dir}},
\hyperlink{F:serve.cfg,S:problem,T:tgz_sfx}{\V{tgz\_sfx}},
\hyperlink{F:serve.cfg,S:problem,T:time_limit}{\V{time\_limit}},
\hyperlink{F:serve.cfg,S:problem,T:use_corr}{\V{use\_corr}},
\hyperlink{F:serve.cfg,S:problem,T:use_info}{\V{use\_info}},
\hyperlink{F:serve.cfg,S:problem,T:use_stdin}{\V{use\_stdin}},
\hyperlink{F:serve.cfg,S:problem,T:use_stdout}{\V{use\_stdout}},
\hyperlink{F:serve.cfg,S:problem,T:use_tgz}{\V{use\_tgz}},
\hyperlink{F:serve.cfg,S:problem,T:variable_full_score}{\V{variable\_full\_score}},
\hyperlink{F:serve.cfg,S:problem,T:variant_num}{\V{variant\_num}}.

При этом при наследовании конфигурационных переменных
\hyperlink{F:serve.cfg,S:problem,T:corr_dir}{\V{corr\_dir}},
\hyperlink{F:serve.cfg,S:problem,T:info_dir}{\V{info\_dir}},
\hyperlink{F:serve.cfg,S:problem,T:input_file}{\V{input\_file}},
\hyperlink{F:serve.cfg,S:problem,T:output_file}{\V{output\_file}},
\hyperlink{F:serve.cfg,S:problem,T:test_dir}{\V{test\_dir}}
\hyperlink{F:serve.cfg,S:problem,T:tgz_dir}{\V{tgz\_dir}}
выполняется
\hyperlink{F:serve.cfg,S:format_substitutions}{форматная подстановка}
(см. раздел \ref{sectionFormatSubstitutions}).

\B{Не наследуются} следующие конфигурационные переменные
абстрактной задачи:
\hyperlink{F:serve.cfg,S:problem,T:abstract}{\V{abstract}},
\hyperlink{F:serve.cfg,S:problem,T:deadline}{\V{deadline}},
\hyperlink{F:serve.cfg,S:problem,T:id}{\V{id}},
\hyperlink{F:serve.cfg,S:problem,T:long_name}{\V{long\_name}},
\hyperlink{F:serve.cfg,S:problem,T:short_name}{\V{short\_name}},
\hyperlink{F:serve.cfg,S:problem,T:super}{\V{super}},
\hyperlink{F:serve.cfg,S:problem,T:tester_id}{\V{tester\_id}},
\hyperlink{F:serve.cfg,S:problem,T:test_score_list}{\V{test\_score\_list}},
\hyperlink{F:serve.cfg,S:problem,T:test_sets}{\V{test\_sets}}.

%\B{Пример.}
%{\small
%\begin{verbatim}
%abstract
%\end{verbatim}
%}

\subsubsection{Переменная \V{super}}
\label{descServeCfgProblemSuper}
\hypertarget{F:serve.cfg,S:problem,T:super}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{super} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:problem}{\V{problem}} \\
Используются:          & \S{serve}, \S{run} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{не установлено}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Если данная конфигурационная переменная
установлена, описание задачи наследует свойства от указанной
абстрактной задачи. Значение данной конфигурационной переменной
должно быть коротким именем абстрактной задачи.

Конфигурационные переменные, значения которых наследуются,
перечислены в описании конфигурационной переменной
\hyperlink{F:serve.cfg,S:problem,T:abstract}{\V{abstract}}.

\B{Пример.}
{\small
\begin{verbatim}
super = "Generic_Files"
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{test\_dir}}
\label{descServeCfgProblemTestDir}
\hypertarget{F:serve.cfg,S:problem,T:test_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{test\_dir} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:problem}{\V{problem}} \\
Используются:          & \S{serve}, \S{run} \\
Тип содержимого:       & \I{путь к каталогу} или \I{шаблон}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
путь к каталогу, в котором находятся тесты для данной задачи.
Полный путь к каталогу с тестами для каждой неабстрактной задачи
определяется по следующим правилам:
\begin{enumerate}
\item
Если конфигурационная переменная \V{test\_dir} задачи
не определена, и эта задача наследует свойства некоторой
абстрактной задачи, у которой конфигурационная переменная
определена, то выполняется
\hyperlink{F:serve.cfg,S:format_substitutions}{форматная подстановка} 
с форматом, определяемым значением переменной \V{test\_dir} этой
абстрактной задачи, и результат помещается в переменную
\V{test\_dir} данной неабстрактной задачи.
\item
Если после предыдущего шага конфигурационная переменная
\V{test\_dir} всё ещё не определена, её значение устанавливается
в короткое имя данной задачи (см. переменную
\hyperlink{F:serve.cfg,S:problem,T:short_name}{\V{short\_name}}).
\item
Если после предыдущего шага значение конфигурационной переменной
не начинается с символа \V{'/'}, то есть не является абсолютным
путём к каталогу, значение данной конфигурационной переменной
добавляется к значению глобальной конфигурационной переменной
\hyperlink{F:serve.cfg,T:test_dir}{\V{test\_dir}}, и результат
помещается в конфигурационную переменную \V{test\_dir}
задачи. Таким образом, глобальная конфигурационная переменная
\hyperlink{F:serve.cfg,T:test_dir}{\V{test\_dir}} содержит
первые компоненты пути к каталогу тестов, а конфигурационная
переменная \V{test\_dir} описания задачи --- последние
компоненты пути к каталогу тестов.
\end{enumerate}

\B{Пример.} Следующий пример отключает распределение тестов по
подкаталогам каталога, определяемого глобальной переменной
\hyperlink{F:serve.cfg,T:test_dir}{\V{test\_dir}}.
{\small
\begin{verbatim}
test_dir = "."
\end{verbatim}
}

Следующий пример для описания абстрактной задачи задаёт
использование подкаталога, имя которого получается
преобразованием к строчным буквам короткого имени задачи
(\hyperlink{F:serve.cfg,S:problem,T:short_name}{\V{short\_name}}),
в каталоге, определяемом глобальной переменной
\hyperlink{F:serve.cfg,T:test_dir}{\V{test\_dir}}, для тестов
каждой задачи, наследующей свойства данной абстрактной задачи.
{\small
\begin{verbatim}
test_dir = "%lPs"
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{corr\_dir}}
\label{descServeCfgProblemCorrDir}
\hypertarget{F:serve.cfg,S:problem,T:corr_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{corr\_dir} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:problem}{\V{problem}} \\
Используются:          & \S{serve}, \S{run} \\
Тип содержимого:       & \I{путь к каталогу} или \I{шаблон}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
путь к каталогу, в котором правильные ответы к тестам для данной
задачи. Полный путь к каталогу с правильными ответами к тестам
для каждой неабстрактной задачи определяется по следующим
правилам:
\begin{enumerate}
\item
Если конфигурационная переменная \V{corr\_dir} задачи
не определена, и эта задача наследует свойства некоторой
абстрактной задачи $A$, у которой конфигурационная переменная
определена, то выполняется
\hyperlink{F:serve.cfg,S:format_substitutions}{форматная подстановка} 
с форматом, определяемым значением переменной \V{corr\_dir}
абстрактной задачи $A$, и результат помещается в переменную
\V{corr\_dir} данной неабстрактной задачи.
\item
Если после предыдущего шага конфигурационная переменная
\V{corr\_dir} всё ещё не определена, её значение устанавливается
в короткое имя данной задачи (см. переменную
\hyperlink{F:serve.cfg,S:problem,T:short_name}{\V{short\_name}}).
\item
Если после предыдущего шага значение конфигурационной переменной
не начинается с символа \V{'/'}, то есть не является абсолютным
путём к каталогу, значение данной конфигурационной переменной
добавляется к значению глобальной конфигурационной переменной
\hyperlink{F:serve.cfg,T:test_dir}{\V{corr\_dir}}, и результат
помещается в конфигурационную переменную \V{corr\_dir}
задачи. Таким образом, глобальная конфигурационная переменная
\hyperlink{F:serve.cfg,T:test_dir}{\V{corr\_dir}} содержит
первые компоненты пути к каталогу тестов, а конфигурационная
переменная \V{corr\_dir} описания задачи --- последние
компоненты пути к каталогу тестов.
\end{enumerate}

\B{Пример.} Следующий пример отключает распределение правильных
ответов к тестам по подкаталогам каталога, определяемого
глобальной переменной
\hyperlink{F:serve.cfg,T:test_dir}{\V{corr\_dir}}.
{\small
\begin{verbatim}
corr_dir = "."
\end{verbatim}
}

Следующий пример для описания абстрактной задачи задаёт
использование подкаталога, имя которого получается
преобразованием к строчным буквам короткого имени задачи
(\hyperlink{F:serve.cfg,S:problem,T:short_name}{\V{short\_name}}),
в каталоге, определяемом глобальной переменной
\hyperlink{F:serve.cfg,T:test_dir}{\V{corr\_dir}}, для
правильных ответов к тестам для каждой задачи, наследующей
свойства данной абстрактной задачи.
{\small
\begin{verbatim}
corr_dir = "%lPs"
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{test\_sfx}}
\label{descServeCfgProblemTestSfx}
\hypertarget{F:serve.cfg,S:problem,T:test_sfx}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{test\_sfx} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:problem}{\V{problem}} \\
Используются:          & \S{serve}, \S{run} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная задаёт суффикс
файлов с тестами к задаче. Полный путь к очередному тесту
определяется следующим образом:
{\small
\begin{verbatim}
path=${test_dir}/${test_num}${test_sfx}
\end{verbatim}
}
Здесь \V{\$\{test\_dir\}} --- значение конфигурационной
переменной
\hyperlink{F:serve.cfg,S:problem,T:test_dir}{\V{test\_dir}},
\V{\$\{test\_num\}} --- номер теста, записанный с тремя цифрами,
включая незначащие нули, \V{\$\{test\_sfx\}} --- значение данной
конфигурационной переменной.

Значение переменной \V{test\_sfx} определяется по следующим
правилам:
\begin{enumerate}
\item
Если описание задачи не устанавливает переменную \V{test\_sfx},
но наследует свойства некоторой абстрактной задачи $A$, которая
устанавливает переменную \V{test\_sfx}, то используется
значение, установленное в описании абстрактной задачи $A$.
\item
Если после предыдущего шага значение переменной всё ещё
не определено, используется значение глобальной конфигурационной
переменной \hyperlink{F:serve.cfg,T:test_sfx}{\V{test\_sfx}}.
\item
Если после предыдущего шага значение переменной всё ещё
не определено, значение полагается равным пустой строке \V{""}.
\end{enumerate}

\B{Пример.}
{\small
\begin{verbatim}
test_sfx = ".dat"
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{corr\_sfx}}
\label{descServeCfgProblemCorrSfx}
\hypertarget{F:serve.cfg,S:problem,T:corr_sfx}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{corr\_sfx} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:problem}{\V{problem}} \\
Используются:          & \S{serve}, \S{run} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная задаёт суффикс
файлов с правильными ответами к тестам к задаче. Полный путь к
очередному правильному ответу к тесту определяется следующим
образом:
{\small
\begin{verbatim}
path=${corr_dir}/${test_num}${corr_sfx}
\end{verbatim}
}
Здесь \V{\$\{corr\_dir\}} --- значение конфигурационной
переменной
\hyperlink{F:serve.cfg,S:problem,T:corr_dir}{\V{corr\_dir}},
\V{\$\{test\_num\}} --- номер теста, записанный с тремя цифрами,
включая незначащие нули, \V{\$\{corr\_sfx\}} --- значение данной
конфигурационной переменной.

Правильные ответы к тестам при тестировании решения участника
используются, только если конфигурационная переменная
\hyperlink{F:serve.cfg,S:problem,T:use_corr}{\V{use\_corr}}
установлена в значение \I{true}. В этом случае проверяющей
программе третьим аргументом командной строки передаётся полный
путь к файлу с правильным ответом к тесту. Если значение
конфигурационной переменной \V{use\_corr} установлено в
\I{false}, то путь к каталогу с ответами к тестам никак не
используется, и третий аргумент в тестирующую программу не
передаётся.

Значение переменной \V{corr\_sfx} определяется по следующим
правилам:
\begin{enumerate}
\item
Если описание задачи не устанавливает переменную \V{corr\_sfx},
но наследует свойства некоторой абстрактной задачи $A$, которая
устанавливает переменную \V{corr\_sfx}, то используется
значение, установленное в описании абстрактной задачи $A$.
\item
Если после предыдущего шага значение переменной всё ещё
не определено, используется значение глобальной конфигурационной
переменной \hyperlink{F:serve.cfg,T:corr_sfx}{\V{corr\_sfx}}.
\item
Если после предыдущего шага значение переменной всё ещё
не определено, значение полагается равным пустой строке \V{""}.
\end{enumerate}

\B{Пример.}
{\small
\begin{verbatim}
corr_sfx = ".res"
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{use\_stdin}}
\label{descServeCfgProblemUseStdin}
\hypertarget{F:serve.cfg,S:problem,T:use_stdin}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{use\_stdin} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:problem}{\V{problem}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Значение по умолчанию: & \I{false}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Если данная конфигурационная переменная
установлена в \I{true}, решение данной задачи должно считывать
входные данный со стандартного потока ввода. Если же
конфигурационная переменная установлена в \I{false}, решение
должно считывать входные данные из файла, задаваемого с помощью
конфигурационной переменной
\hyperlink{F:serve.cfg,S:problem,T:input_file}{\V{input\_file}}.

Если значение данной переменной в описании неабстрактной задачи
не определено, то наследуется значение переменной из описания
соответствующей абстрактной задачи (если таковая есть). Если и
после этого значение переменной не определено, используется
значение по умолчанию \I{false}.

\B{Пример.}
{\small
\begin{verbatim}
use_stdin
\end{verbatim}
}

\subsubsection{Переменная \V{use\_stdout}}
\label{descServeCfgProblemUseStdout}
\hypertarget{F:serve.cfg,S:problem,T:use_stdout}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{use\_stdout} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:problem}{\V{problem}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Значение по умолчанию: & \I{false}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Если данная конфигурационная переменная
установлена в \I{true}, решение данной задачи должно выводить
результат вычислений на стандартный поток вывода. Если же
конфигурационная переменная установлена в \I{false}, решение
должно выводить результат вычислений в файл, имя которого
задаётся с помощью конфигурационной переменной
\hyperlink{F:serve.cfg,S:problem,T:output_file}{\V{output\_file}}.

Если значение данной переменной в описании неабстрактной задачи
не определено, то наследуется значение переменной из описания
соответствующей абстрактной задачи (если таковая есть). Если и
после этого значение переменной не определено, используется
значение по умолчанию \I{false}.

\B{Пример.}
{\small
\begin{verbatim}
use_stdout
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{input\_file}}
\label{descServeCfgProblemInputFile}
\hypertarget{F:serve.cfg,S:problem,T:input_file}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{input\_file} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:problem}{\V{problem}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Значение по умолчанию: & \V{input}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
имя файла, из которого программы-решения данной задачи должны
считывать входные данные согласно условию задачи. Эта переменная
используется только, если значение конфигурационной переменной
\hyperlink{F:serve.cfg,S:problem,T:use_stdin}{\V{use\_stdin}}
равно \I{false}. Значение конфигурационной переменной
\V{input\_file} устанавливается по следующим правилам:
\begin{enumerate}
\item
Если значение данной переменной в описании неабстрактной задачи
не установлено, и эта неабстрактная задача наследует свойства
некоторой абстрактной задачи $A$, в описании которой данная
переменная установлена, то используется значение переменной из
описания абстрактной задачи $A$, при этом выполняется
\hyperlink{F:serve.cfg,S:format_substitutions}{форматная подстановка}.
\item
Если после предыдущего шага значение переменной всё ещё не
задано, используется значение по умолчанию \V{input}.
\end{enumerate}

\B{Пример.} Данная строка позволяет установить имя входного
файла для абстрактной или неабстрактной задачи в \V{input.txt}.
{\small
\begin{verbatim}
input_file = "input.txt"
\end{verbatim}
}

Следующий пример, может устанавливать имя входного файла в
описании абстрактной задачи. Для всех неабстрактных задач,
наследующих свойства данной абстрактной задачи, имя входного
файла будет зависеть от короткого имени неабстрактной
задачи. Например, для задачи с коротким именем \V{A} имя
входного файла будет установлено в \V{a.in}.
{\small
\begin{verbatim}
input_file = "%lPs.in"
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{output\_file}}
\label{descServeCfgProblemOutputFile}
\hypertarget{F:serve.cfg,S:problem,T:output_file}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{output\_file} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:problem}{\V{problem}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Значение по умолчанию: & \V{output}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
имя файла, в который программы-решения данной задачи должны
записывать результат вычислений согласно условию задачи. Эта
переменная используется только, если значение конфигурационной
переменной
\hyperlink{F:serve.cfg,S:problem,T:use_stdin}{\V{use\_stdout}}
равно \I{false}. Значение конфигурационной переменной
\V{output\_file} устанавливается по следующим правилам:
\begin{enumerate}
\item
Если значение данной переменной в описании неабстрактной задачи
не установлено, и эта неабстрактная задача наследует свойства
некоторой абстрактной задачи $A$, в описании которой данная
переменная установлена, то используется значение переменной из
описания абстрактной задачи $A$, при этом выполняется
\hyperlink{F:serve.cfg,S:format_substitutions}{форматная подстановка}.
\item
Если после предыдущего шага значение переменной всё ещё не
задано, используется значение по умолчанию \V{output}.
\end{enumerate}

\B{Пример.} Данная строка позволяет установить имя входного
файла для абстрактной или неабстрактной задачи в \V{output.txt}.
{\small
\begin{verbatim}
output_file = "output.txt"
\end{verbatim}
}

Следующий пример, может устанавливать имя входного файла в
описании абстрактной задачи. Для всех неабстрактных задач,
наследующих свойства данной абстрактной задачи, имя входного
файла будет зависеть от короткого имени неабстрактной
задачи. Например, для задачи с коротким именем \V{A} имя
входного файла будет установлено в \V{a.out}.
{\small
\begin{verbatim}
output_file = "%lPs.out"
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{use\_corr}}
\label{descServeCfgProblemUseCorr}
\hypertarget{F:serve.cfg,S:problem,T:use_corr}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{use\_corr} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:problem}{\V{problem}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Значение по умолчанию: & \I{false}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Если значение данной конфигурационной переменной
установлено в \I{true}, при проверке решения участника турнира
используется файл с правильными ответами на тесты. Полный путь к
этому файлу передаётся в качестве третьего параметра при вызове
программы, сравнивающей ответ, полученный программой участника,
и правильный ответ. Если значение данной переменной установлено
в \I{false}, файлы с правильными ответами не используются. В
этом случае программе проверки решения передаётся только два
аргумента.

Если значение данной конфигурационной переменной в описании
неабстрактной задачи не установлено, оно наследуется из
абстрактной задачи (если таковая определена). Если и абстрактная
задача не устанавливает значение переменной \V{use\_corr}, то
используется значение по умолчанию, равное \I{false}.

%\B{Пример.}
%{\small
%\begin{verbatim}
%use_corr
%\end{verbatim}
%}

\subsubsection{Переменная \V{team\_enable\_rep\_view}}
\label{descServeCfgProblemTeamEnableRepView}
\hypertarget{F:serve.cfg,S:problem,T:team_enable_rep_view}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{team\_enable\_rep\_view} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:problem}{\V{problem}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Значение по умолчанию: & \I{false}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Если данная конфигурационная переменная
установлена в \I{true}, участники турнира получают возможность
просматривать протокол тестирования своей программы. Для
участников генерируется специальная версия протокола
тестирования, которая не содержит тестовых данных, вывода
проверяемой программы на тестовых данных, вывода проверяющей
программы и т. д.

Значение данной переменной для неабстрактной задачи определяется
по следующим правилам:
\begin{enumerate}
\itemsep=0pt\parsep=0pt
\item
Если значение данной переменной не определено, но абстрактная
задача $A$, свойства которой наследуются данной задачей,
устанавливает значение данной переменной, используется значение
из описания абстрактной задачи $A$.
\item
Если после предыдущего шага значение данной переменной всё ещё
не определено, используется значение глобальной конфигурационной
переменной
\hyperlink{F:serve.cfg,T:team_enable_rep_view}{\V{team\_enable\_rep\_view}},
если оно определено.
\item
Если после предыдущего шага значение данной переменной всё ещё
не определено, используется значение по умолчанию \I{false}.
\end{enumerate}

\newpage
\subsubsection{Переменная \V{team\_enable\_ce\_view}}
\label{descServeCfgProblemTeamEnableCeView}
\hypertarget{F:serve.cfg,S:problem,T:team_enable_ce_view}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{team\_enable\_ce\_view} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:problem}{\V{problem}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Значение по умолчанию: & \I{false}\\
Может повторяться:     & \I{нет}\\
Версия \S{ejudge}:     & начиная с 2.1.24\\
\end{tabular}

\B{Описание.} Если данная конфигурационная переменная
установлена в \I{true}, а конфигурационная переменная 
\hyperlink{F:serve.cfg,S:problem,T:team_enable_rep_view}{\V{team\_enable\_rep\_view}}
установлена в \I{false}, участники турнира получают возможность
просматривать протокол компиляции своей программы в случае, если
соответствующая посылка имеет статус <<Ошибка компиляции>>. Во
всех остальных случаях протокол тестирования участнику будет недоступен.

Значение данной переменной для неабстрактной задачи определяется
по следующим правилам:
\begin{enumerate}
\itemsep=0pt\parsep=0pt
\item
Если значение данной переменной не определено, но абстрактная
задача $A$, свойства которой наследуются данной задачей,
устанавливает значение данной переменной, используется значение
из описания абстрактной задачи $A$.
\item
Если после предыдущего шага значение данной переменной всё ещё
не определено, используется значение глобальной конфигурационной
переменной
\hyperlink{F:serve.cfg,T:team_enable_ce_view}{\V{team\_enable\_ce\_view}},
если оно определено.
\item
Если после предыдущего шага значение данной переменной всё ещё
не определено, используется значение по умолчанию \I{false}.
\end{enumerate}

\subsubsection{Переменная \V{team\_show\_judge\_report}}
\label{descServeCfgProblemTeamShowJudgeReport}
\hypertarget{F:serve.cfg,S:problem,T:team_show_judge_report}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{team\_show\_judge\_report} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:problem}{\V{problem}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Значение по умолчанию: & \I{false}\\
Может повторяться:     & \I{нет}\\
Версия \S{ejudge}:     & начиная с 2.1.24\\
\end{tabular}

\B{Описание.} Если данная конфигурационная переменная
установлена в \I{true} и конфигурационная переменная 
\hyperlink{F:serve.cfg,S:problem,T:team_enable_rep_view}{\V{team\_enable\_rep\_view}}
также установлена в \I{true}, участники турнира получают доступ
к полной версии протокола тестирования, обычно доступной только
привилегированным пользователям.

Значение данной переменной для неабстрактной задачи определяется
по следующим правилам:
\begin{enumerate}
\itemsep=0pt\parsep=0pt
\item
Если значение данной переменной не определено, но абстрактная
задача $A$, свойства которой наследуются данной задачей,
устанавливает значение данной переменной, используется значение
из описания абстрактной задачи $A$.
\item
Если после предыдущего шага значение данной переменной всё ещё
не определено, используется значение глобальной конфигурационной
переменной
\hyperlink{F:serve.cfg,T:team_show_judge_report}{\V{team\_show\_judge\_report}},
если оно определено.
\item
Если после предыдущего шага значение данной переменной всё ещё
не определено, используется значение по умолчанию \I{false}.
\end{enumerate}

\newpage
\subsubsection{Переменная \V{time\_limit}}
\label{descServeCfgProblemTimeLimit}
\hypertarget{F:serve.cfg,S:problem,T:time_limit}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{time\_limit} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:problem}{\V{problem}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Значение по умолчанию: & \V{0}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная задаёт
процессорное виртуальное время в секундах, отведённое на работу
проверяемой программы с одним тестом. Если по истечении этого
времени программа не завершила работу, она убивается, и для
данного теста проверяемой программы диагностируется ошибка
``Time-limit exceeded''. Виртуальное процессорное время --- это
время, в течении которого процессор выполнял (в режиме
пользователя или в режиме ядра) данную задачу. Время,
затраченное в ожидании событий ввода/вывода в данном параметре
не учитывается. Значение 0 данной конфигурационной переменной
означает, что время выполнения тестируемой программы не
ограничивается.

Данный параметр соответствует ограничению времени работы
программы на одном тесте, которое указывается в условии
задачи. Однако, если тестируемая программа не занимает процессор
а находится в ожидании события ввода-вывода, например, выполняя
чтение из стандартного потока ввода вместо чтения из файла или
выполняя системный вызов \V{pause}, она не тратит виртуальное
процессорное время. Поэтому реальное астрономическое время
выполнения тестируемой программы может быть сколь угодно больше
виртуального процессорного времени. Для ограничения реального
астрономического времени используется конфигурационная
переменная
\hyperlink{F:serve.cfg,S:problem,T:real_time_limit}{\V{real\_time\_limit}}.

Если данная конфигурационная переменная неабстрактной задачи
не определена, её значение наследуется от абстрактной задачи,
если абстрактная задача указана. Если и после этого значение
переменной не определено, устанавливается значение по умолчанию
\V{0} (отсутствие ограничений на максимальное время
выполнения).

\B{Пример.}
{\small
\begin{verbatim}
time_limit = 5
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{real\_time\_limit}}
\label{descServeCfgProblemRealTimeLimit}
\hypertarget{F:serve.cfg,S:problem,T:real_time_limit}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{real\_time\_limit} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:problem}{\V{problem}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Значение по умолчанию: & \V{0}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная задаёт
ограничение на астрономическое время выполнения тестируемой
программы на одном тесте. Ограничение астрономического времени
выполнения программы должно быть больше ограничения виртуального
процессорного времени (см. переменную
\hyperlink{F:serve.cfg,S:problem,T:time_limit}{\V{time\_limit}}).
Оно должно учитывать время выполнения операций ввода-вывода и
загруженность тестирующей машины.

Если данная конфигурационная переменная неабстрактной задачи
не определена, её значение наследуется от абстрактной задачи,
если абстрактная задача указана. Если и после этого значение
переменной не определено, устанавливается значение по умолчанию
\V{0} (отсутствие ограничений на максимальное время
выполнения).

\B{Пример.}
{\small
\begin{verbatim}
real_time_limit = 30
\end{verbatim}
}

\subsubsection{Переменная \V{tests\_to\_accept}}
\label{descServeCfgProblemTestsToAccept}
\hypertarget{F:serve.cfg,S:problem,T:tests_to_accept}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{tests\_to\_accept} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:problem}{\V{problem}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Значение по умолчанию: & \V{1}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная определяет,
сколько тестов должны быть успешно пройдены программой для того,
чтобы она была принята на проверке. Конфигурационная переменная
действует только в режиме турнира \I{OLYMPIAD}. Во всех других
режимах турнира её значение игнорируется. Если значение этой
переменной установлено в 0, для принятия задачи на проверку
прохождение ею тестов не требуется.

Если данная конфигурационная переменная неабстрактной задачи
не определена, её значение наследуется от абстрактной задачи,
если абстрактная задача указана. Если после этого значение
данной переменной не определено, используется значение глобальной
конфигурационной переменной
\hyperlink{F:serve.cfg,T:tests_to_accept}{\V{tests\_to\_accept}}.
Значение глобальной конфигурационной переменной устанавливается
в 1 по умолчанию, поэтому если ни глобальная переменная, ни
переменная описания задачи не определены, используется значение 1.

\B{Пример.}
{\small
\begin{verbatim}
tests_to_accept = 2
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{full\_score}}
\label{descServeCfgProblemFullScore}
\hypertarget{F:serve.cfg,S:problem,T:full_score}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{full\_score} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:problem}{\V{problem}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Значение по умолчанию: & \V{25}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
количество баллов, начисляемых за полное решение задачи, то есть
за решение, которое успешно прошло все тесты. Переменная
используется только в режимах турнира \I{KIROV} и
\I{OLYMPIAD}. Полное описание правил начисления баллов за
решение задачи см. в описании конфигурационной переменной
\hyperlink{F:serve.cfg,T:score_system}{\V{score\_system}}.

Если данная конфигурационная переменная неабстрактной задачи
не определена, её значение наследуется от абстрактной задачи,
если абстрактная задача указана. Если и после этого значение
переменной не определено, устанавливается значение по умолчанию
\V{25}.

\B{Пример.}
{\small
\begin{verbatim}
full_score = 50
\end{verbatim}
}

\subsubsection{Переменная \V{variable\_full\_score}}
\label{descServeCfgProblemVariableFullScore}
\hypertarget{F:serve.cfg,S:problem,T:variable_full_score}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{variable\_full\_score} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:problem}{\V{problem}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Значение по умолчанию: & \I{false}\\
Может повторяться:     & \I{нет}\\
Версия \S{ejudge}:     & начиная с 2.1.25.\\
\end{tabular}

\B{Описание.}
Если данная конфигурационная переменная описания задачи
установлена в \I{true}, изменяется правило вычисления баллов за
полностью решённую задачу в режимах турнира \I{OLYMPIAD} или
\I{KIROV}. В обычном режиме за полностью решённую задачу (то
есть за посылку, которая имеет статус OK) даётся количество
баллов, определённое в конфигурационной переменной
\hyperlink{F:serve.cfg,S:problem,T:full_score}{\V{full\_score}}
описания задачи (далее из этого числа вычитаются штрафные баллы
и т. д.). В режиме, включаемом данной конфигурационной
переменной, за удачную посылку (то есть посылку, имеющую статус
OK) даётся столько баллов, сколько указано в поле \V{score} этой
посылки. Данная конфигурационная переменная удобна в случаях,
если статус OK выставляется вручную (например, по результатам
ручного тестирования), и необходимо ранжировать принятые решения
по баллам.

Если данная конфигурационная переменная неабстрактной задачи
не определена, её значение наследуется от абстрактной задачи,
если абстрактная задача указана. Если и после этого значение
переменной не определено, устанавливается значение по умолчанию
\I{false}.

\newpage
\subsubsection{Переменная \V{run\_penalty}}
\label{descServeCfgProblemRunPenalty}
\hypertarget{F:serve.cfg,S:problem,T:run_penalty}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{run\_penalty} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:problem}{\V{problem}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Значение по умолчанию: & \V{1}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
штраф за каждую попытку решения задачи. Например, количество
баллов, полученное за пятую попытку сдачи некоторой задачи,
будет на \V{4*run\_penalty} баллов меньше, чем если то же самое
решение было послано с первого раза. Переменная используется
только в режимах турнира \I{KIROV} и \I{OLYMPIAD}. Полное
описание правил начисления баллов за решение задачи см. в
описании конфигурационной переменной
\hyperlink{F:serve.cfg,T:score_system}{\V{score\_system}}.

Если данная конфигурационная переменная неабстрактной задачи
не определена, её значение наследуется от абстрактной задачи,
если абстрактная задача указана. Если и после этого значение
переменной не определено, устанавливается значение по умолчанию
\V{1}.

\B{Пример.}
{\small
\begin{verbatim}
run_penalty = 2
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{test\_score}}
\label{descServeCfgProblemTestScore}
\hypertarget{F:serve.cfg,S:problem,T:test_score}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{test\_score} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:problem}{\V{problem}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Значение по умолчанию: & \V{1}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает,
сколько баллов получает решение участника за успешное
прохождение одного теста. Баллы, полученные за успешно
пройденные тесты, суммируются. Количество баллов для каждого
теста может быть определено индивидуально с помощью
конфигурационной переменной
\hyperlink{F:serve.cfg,S:problem,T:test_score_list}{\V{test\_score\_list}}.
Количество баллов, назначаемых за пройденное множество тестов,
может быть определено с помощью конфигурационной переменной
\hyperlink{F:serve.cfg,S:problem,T:test_sets}{\V{test\_sets}}.
Суммарное количество баллов за все тесты задачи не может
превосходить значения конфигурационной переменной
\hyperlink{F:serve.cfg,S:problem,T:full_score}{\V{full\_score}}.

Данная конфигурационная
переменная используется только в режиме турнира \I{KIROV} или
\I{OLYMPIAD} (см. конфигурационную переменную
\hyperlink{F:serve.cfg,T:score_system}{\V{score\_system}}).

Если данная конфигурационная переменная неабстрактной задачи
не определена, её значение наследуется от абстрактной задачи,
если абстрактная задача указана. Если и после этого значение
переменной не определено, устанавливается значение по умолчанию
\V{1}.

\B{Пример.}
{\small
\begin{verbatim}
test_score = 2
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{test\_score\_list}}
\label{descServeCfgProblemTestScoreList}
\hypertarget{F:serve.cfg,S:problem,T:test_score_list}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{test\_score\_list} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:problem}{\V{problem}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{нет}\\
Значение по умолчанию: & \V{"{}"{}} (пустая строка)\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная позволяет
устанавливать число баллов, назначаемое за успешное прохождение
тестов, индивидуально для каждого теста. Данная конфигурационная
переменная используется только в режиме турнира \I{KIROV} или
\I{OLYMPIAD} (см. конфигурационную переменную
\hyperlink{F:serve.cfg,T:score_system}{\V{score\_system}}).
Если число баллов, назначаемое за успешное прохождение
некоторого теста, в конфигурационной переменной
\V{test\_score\_list} не определяется, для этого теста
используется значение конфигурационной переменной
\hyperlink{F:serve.cfg,S:problem,T:test_score}{\V{test\_score}}.
Количество баллов, назначаемых за пройденное множество тестов,
может быть определено с помощью конфигурационной переменной
\hyperlink{F:serve.cfg,S:problem,T:test_sets}{\V{test\_sets}}.

Значение данной конфигурационной переменной
\V{test\_score\_list} --- это спецификация баллов за тесты,
которая имеет следующий формат (грамматика записана в нотации
EBNF).
{\small
\begin{verbatim}
test_score_list_spec = { test_score_spec } ;
test_score_spec = [ "[" test_number "]" ] test_score ;
test_number = NUMBER ;
test_score = NUMBER ;
\end{verbatim}
}
Другими словами, спецификация баллов за тесты --- это список
спецификаций баллов за отдельные тесты. В спецификации баллов за
тест в квадратных скобках может указываться номер теста. Если
номер теста не указан, используется номер предыдущего теста,
увеличенный на 1. Если номер теста не указан в первой
спецификации баллов, спецификация относится к первому тесту.

Значение данной конфигурационной переменной \B{не наследуется}.

\B{Пример.} Первый пример устанавливает количество баллов за
тесты с первого по пятый в 1, 2, 3, 4, 5 баллов
соответственно. Количество баллов за оставшиеся тесты (если они
имеются) задаётся с помощью конфигурационной переменной
\hyperlink{F:serve.cfg,S:problem,T:test_score}{\V{test\_score}}.
{\small
\begin{verbatim}
test_score_list = "1 2 3 4 5"
\end{verbatim}
}

Второй пример устанавливает следующее количество баллов: за первый тест ---
3 балла, за 10 тест --- 4 балла, за 11 тест --- 5 баллов, за 15
тест --- 6 баллов.
{\small
\begin{verbatim}
test_score_list = "3 [10] 4 5 [15] 6"
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{test\_sets}}
\label{descServeCfgProblemTestSets}
\hypertarget{F:serve.cfg,S:problem,T:test_sets}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{test\_sets} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:problem}{\V{problem}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{нет}\\
Значение по умолчанию: & \V{"{}"{}} (пустая строка)\\
Может повторяться:     & \I{да}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная позволяет
задавать количество баллов, которое получает решение задачи,
давшее правильный ответ на заданном множестве тестов. Данная
конфигурационная переменная используется только в режиме турнира
\I{KIROV} или \I{OLYMPIAD} (см. конфигурационную переменную
\hyperlink{F:serve.cfg,T:score_system}{\V{score\_system}}).

Данная конфигурационная переменная призвана бороться с
угадыванием ответов. Например, если по условию задачи требуется
дать ответ в форме \V{"YES"} или \V{"NO"}, решение участника
может всегда давать ответ \V{"YES"} или всегда давать ответ
\V{"NO"}, и такое <<решение>> может получить частичный балл
(иногда довольно большой). Тогда чтобы бороться с такими
программами, множество ответов \V{"YES"} и множество ответов
\V{"NO"} могут быть указаны, как множества тестов, оцениваемые в
0 баллов. Теперь чтобы получить ненулевой балл решение участника
должно хотя бы один раз правильно ответить \V{"YES"} и хотя бы
один раз правильно ответить \V{"NO"}.

Каждое значение конфигурационной переменной \V{test\_sets}
задаёт одно множество тестов, но переменная \V{test\_sets} может
быть повторена в описании задачи несколько раз, задавая
несколько множеств тестов. Значение данной конфигурационной
переменной \B{не наследуется}.

Значением одной конфигурационной переменной \V{test\_sets}
является строка-спецификация множества тестов, имеющая следующий
формат (грамматика записана в нотации EBNF).
{\small
\begin{verbatim}
test_set_spec = test_num_list "=" set_score ;
test_num_list = { test_score } ;
set_score = NUMBER ;
test_score = NUMBER ;
\end{verbatim}
}
Другими словами, спецификация множества тестов состоит из
перечисления номеров тестов, за которым после знака \V{"="}
следует число баллов, назначаемое за данное множество
тестов. Такое правило срабатывает только если множество тестов,
на которых решение участника дало правильный ответ, в точности
совпадает с указанным множеством тестов.

\B{Пример.} В следующем примере за успешное прохождение только
тестов 2, 4, 5 решение участника получает 1 балл, а за успешное
прохождение тестов 1, 4, 6 --- 2 балла.
{\small
\begin{verbatim}
test_sets = "2 4 5 = 1"
test_sets = "1 4 6 = 2"
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{checker\_real\_time\_limit}}
\label{descServeCfgProblemCheckerRealTimeLimit}
\hypertarget{F:serve.cfg,S:problem,T:checker_real_time_limit}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{checker\_real\_time\_limit} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:problem}{\V{problem}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Значение по умолчанию: & \V{30}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная задаёт
ограничение на астрономическое время проверки результата работы
тестируемой программы. Другими словами, эта переменная
ограничивает максимальное время работы проверяющей программы.
В случае, если максимальное время работы проверяющей программы
превышено, проверка программы участника завершается со статусом
``Check failed'' (<<Проверка не удалась>>). Значение 0 означает
отсутствие ограничения времени.

Если значение данной конфигурационной переменной в описании
неабстрактной задачи не определено, но данная неабстрактная
задача наследует свойства некоторой абстрактной задачи $A$,
которая определяет данную переменную, используется значение,
определённое в описании абстрактной задачи $A$. Если после этого
значение данной конфигурационной переменной всё ещё
не определено, используется значение глобальной конфигурационной
переменной
\hyperlink{F:serve.cfg,T:checker_real_time_limit}{\V{checker\_real\_time\_limit}}.
Значение последней по умолчанию равно 30, следовательно и
значение конфигурационной переменной уровня задачи также равно 30.

\B{Пример.}
{\small
\begin{verbatim}
checker_real_time_limit = 60
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{deadline}}
\label{descServeCfgProblemDeadline}
\hypertarget{F:serve.cfg,S:problem,T:deadline}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{deadline} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:problem}{\V{problem}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{календарное время}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{нет}\\
Значение по умолчанию: & \I{не установлено}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная позволяет
установить крайнее время, после наступления которого
прекращается приём указанной задачи. Данная конфигурационная
переменная позволяет избирательно прекращать приём определённых
задач в определённое время. Её использование имеет смысл только
для турниров, продолжительность которых не ограничена.
Календарное время задаётся в одном из следующих форматов:\\
\V{$Y$/$M$/$D$ $H$:$I$:$S$},\\
\V{$Y$/$M$/$D$ $H$:$I$},\\
\V{$Y$/$M$/$D$ $H$},\\
\V{$Y$/$M$/$D$},\\
где $Y$ --- год в диапазоне от 1970 до
2038, $M$ --- номер месяца в диапазоне от 1 до 12, $D$ --- номер дня в
месяце в диапазоне от 1 до 31, $H$ --- час в диапазоне от 0 до 23,
$I$ --- минуты в диапазоне от 0 до 59, $S$ --- секунды в диапазоне от
0 до 60. Значение отсутствующих компонент времени полагается равным 0.

\B{Пример.}
{\small
\begin{verbatim}
deadline = "2003/10/01 00:00:00"
\end{verbatim}
}

Следующая запись полностью эквивалентна предыдущей:
{\small
\begin{verbatim}
deadline = "2003/10/01"
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{variant\_num}}
\label{descServeCfgProblemVariantNum}
\hypertarget{F:serve.cfg,S:problem,T:variant_num}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{variant\_num} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:problem}{\V{problem}} \\
Используются:          & \S{serve}, \S{run} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Значение по умолчанию: & \I{не установлено}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
количество вариантов задачи. Если значение данной переменной не
установлено или явно установлено в 0, текущая задача не является
вариантной, то есть предусматривается только один набор тестов,
правильных ответов и одна проверяющая программа. Невариантными
являются, как правило, все задачи в турнирах.

В некоторых случаях (например, при проведении самостоятельных работ с
автоматической проверкой решений) желательно, чтобы у разных учащихся
были бы разные задачи. Для этого можно использовать вариантные
задачи. Вариантная задача --- это семейство задач, у которых совпадают
все параметры, кроме каталога с тестами, каталога с правильными
ответами и проверяющей программы. Вариант задачи --- это целое число,
начиная от 1. Переменная \V{variant\_num} задаёт количество вариантов
задачи, которые, таким образом, нумеруются 1, 2 и до \V{variant\_num}.

Все параметры, необходимые для тестирования вариантной задачи,
получаются из невариантных параметров следующим образом. Каталог с
тестами для варианта $n$ должен находиться по пути
\V{\$\{test\_dir\}-$n$}, где \V{\$\{test\_dir\}} --- значение
конфигурационной переменной
\hyperlink{F:serve.cfg,S:problem,T:test_dir}{\V{test\_dir}} данной
задачи. Другими словами, к пути к каталогу с тестами, который был бы у
данной задачи, если бы она не была вариантной, приписывается номер
варианта, отделённый знаком <<минус>>. Каталог с правильными ответами
к тестам для варианта $n$ должен находиться по пути
\V{\$\{corr\_dir\}-$n$}, где \V{\$\{corr\_dir\}} --- значение
конфигурационной переменной
\hyperlink{F:serve.cfg,S:problem,T:corr_dir}{\V{corr\_dir}} данной
задачи. Проверяющая программа должна располагаться по пути
\V{\$\{check\_cmd\}-$n$}, где \V{\$\{check\_cmd\}} --- значение
конфигурационной переменной
\hyperlink{F:serve.cfg,S:problem,T:check_cmd}{\V{check\_cmd}} данной
задачи. 

Если значение переменной \V{variant\_num} в описании задачи не
установлена, но данная задача наследует свойства абстрактной задачи, в
которой значение переменной установлено, будет использовано значение
переменной, установленное в описании абстрактной задачи.

\B{Пример.}
{\small
\begin{verbatim}
variant_num = 4
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{disable\_auto\_testing}}
\label{descServeCfgProblemDisableAutoTesting}
\hypertarget{F:serve.cfg,S:problem,T:disable_auto_testing}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{disable\_auto\_testing} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:problem}{\V{problem}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Если значение данной конфигурационной переменной
задачи установлено в \I{true}, автоматическое тестирование
решений данной задачи отключено. Принимаемые программой
\S{serve} решения добавляются в базу решений участников в
состоянии ``Accepted for Testing'' и не передаются на компиляцию
и тестирование. Администратор турнира может запустить компиляцию
и тестирование решения, выбрав пункт меню ``Rejudge''.

Если значение данной конфигурационной переменной не установлено,
но описание данной задачи наследует свойства некоторой
абстрактной задачи, в которой значение данной переменной
установлено, используется значение из описания абстрактной
задачи. Если после этого значение данной переменной всё равно
не определено, используется значение глобальной конфигурационной
переменной
\hyperlink{F:serve.cfg,T:disable_auto_testing}{\V{disable\_auto\_testing}}.

\B{Пример.}
{\small
\begin{verbatim}
disable_auto_testing
\end{verbatim}
}

\subsubsection{Переменная \V{disable\_testing}}
\label{descServeCfgProblemDisableTesting}
\hypertarget{F:serve.cfg,S:problem,T:disable_testing}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{disable\_testing} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:problem}{\V{problem}} \\
Используются:          & \S{serve}, \S{run} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Может повторяться:     & \I{нет}\\
Версия \S{ejudge}:     & начиная с 2.1.25.\\
\end{tabular}

\B{Описание.}
Данная конфигурационная переменная раздела описания задачи
позволяет переопределить значение глобальной конфигурационной
переменной
\hyperlink{F:serve.cfg,T:disable_testing}{\V{disable\_testing}}
для каждой конкретной задачи. Если значение данной
конфигурационной переменной задачи установлено в \I{true}, любое
тестирование задачи средствами системы \S{ejudge} отключено.
Администратор турнира может выставить любой необходимый статус
посылки по такой задаче с помощью редактирования базы посылок.

Если значение данной конфигурационной переменной не установлено,
но описание данной задачи наследует свойства некоторой
абстрактной задачи, в которой значение данной переменной
установлено, используется значение из описания абстрактной
задачи. Если после этого значение данной переменной всё равно
не определено, используется значение глобальной конфигурационной
переменной
\hyperlink{F:serve.cfg,T:disable_testing}{\V{disable\_testing}}.

\newpage
\subsubsection{Переменная \V{use\_info}}
\label{descServeCfgProblemUseInfo}
\hypertarget{F:serve.cfg,S:problem,T:use_info}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{use\_info} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:problem}{\V{problem}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Значение по умолчанию: & \I{false}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Если значение данной конфигурационной переменной
установлено в \I{true}, для запуска решений участников на
проверку и для проверки решений используются файлы с
дополнительной информацией о тесте. В противном случае никаких
дополнительных файлов не используется. Файлы с дополнительной
информацией о тестах содержат аргументы командной строки для
запуска тестируемой программы, комментарии к тестам и т. д.
Такие файлы находятся в каталоге, определяемом конфигурационной
переменной
\hyperlink{F:serve.cfg,S:problem,T:info_dir}{\V{info\_dir}}, имеют
стандартное базовое имя, получаемое форматным преобразованием
\V{\%03d} функций семейства \V{printf} из номера теста, и
суффикс, определяемый конфигурационной переменной
\hyperlink{F:serve.cfg,S:problem,T:info_sfx}{\V{info\_sfx}} (по
умолчанию \V{.inf}). Формат файлов с дополнительной информацией
описан в разделе \ref{sectionTestInf}.

В случае использования \V{.inf}-файлов проверяющая программа
получает дополнительный аргумент командной строки, содержащий
путь к \V{.inf}-файлу для данного теста.

Если значение данной конфигурационной переменной в описании
неабстрактной задачи не установлено, оно наследуется из
абстрактной задачи (если таковая определена).

\newpage
\subsubsection{Переменная \V{use\_tgz}}
\label{descServeCfgProblemUseTgz}
\hypertarget{F:serve.cfg,S:problem,T:use_tgz}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{use\_tgz} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:problem}{\V{problem}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Значение по умолчанию: & \I{false}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Если значение данной конфигурационной переменной
установлено в \I{true}, для запуска решений участников на
проверку создаётся рабочий каталог, и тестируемая программа
запускается в этом файле. Исходное состояние рабочего каталога
получается разархивированием архивного файла. Такие архивные
файлы находятся в каталоге, определяемом конфигурационной
переменной
\hyperlink{F:serve.cfg,S:problem,T:tgz_dir}{\V{tgz\_dir}}, имеют
стандартное базовое имя, получаемое форматным преобразованием
\V{\%03d} функций семейства \V{printf} из номера теста, и
суффикс, определяемый конфигурационной переменной
\hyperlink{F:serve.cfg,S:problem,T:tgz_sfx}{\V{tgz\_sfx}} (по
умолчанию \V{.tgz}).

Для теста с номером $i$ \V{.tgz}-архив должен содержать
единственный каталог с именем полученным форматным
преобразованием \V{\%03d} из номера теста $i$. Кроме этого, в
каталоге \hyperlink{F:serve.cfg,S:problem,T:tgz_dir}{\V{tgz\_dir}}
должно находиться разархивированное содержимое этого архива, то
есть каталог с именем $\langle\V{\%03d},i\rangle$. При запуске
тестируемой программы соответствующий \V{.tgz} архив
разворачивается в каталоге тестирования
(\hyperlink{F:serve.cfg,T:check_dir}{\V{check\_dir}}) и текущий
каталог запускаемой программы устанавливается на этот
подкаталог. Файл с кодом программы, файлы входных и выходных
данных таким образом оказываются на один уровень выше текущего
каталога.

В случае использования \V{.tgz}-файлов проверяющая программа
получает дополнительный аргумент командной строки, содержащий
путь к развёрнутому содержимому соответствующего \V{.tgz} файла,
то есть к каталогу с именем $\langle\V{\%03d},i\rangle$ в
каталоге, определяемом конфигурационной переменной 
\hyperlink{F:serve.cfg,S:problem,T:tgz_dir}{\V{tgz\_dir}}.

Если значение данной конфигурационной переменной в описании
неабстрактной задачи не установлено, оно наследуется из
абстрактной задачи (если таковая определена).

\newpage
\subsubsection{Переменная \V{info\_dir}}
\label{descServeCfgProblemInfoDir}
\hypertarget{F:serve.cfg,S:problem,T:info_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{info\_dir} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:problem}{\V{problem}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{путь к каталогу} или \I{шаблон}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
путь к каталогу, в котором находится дополнительная информация о
тестах к данной задаче. Файлы с дополнительной информацией о
тестах далее кратко называются \V{.inf}-файлы. Полный путь к
каталогу с \V{.inf}-файлами для каждой неабстрактной задачи
определяется по следующим правилам:
\begin{enumerate}
\item
Если конфигурационная переменная \V{info\_dir} задачи
не определена, и эта задача наследует свойства некоторой
абстрактной задачи $A$, у которой эта конфигурационная
переменная определена, то выполняется
\hyperlink{F:serve.cfg,S:format_substitutions}{форматная подстановка} 
с форматом, определяемым значением переменной \V{info\_dir}
абстрактной задачи $A$, и результат помещается в переменную
\V{info\_dir} данной неабстрактной задачи.
\item
Если после предыдущего шага конфигурационная переменная
\V{info\_dir} всё ещё не определена, её значение устанавливается
в короткое имя данной задачи (см. переменную
\hyperlink{F:serve.cfg,S:problem,T:short_name}{\V{short\_name}}).
\item
Если после предыдущего шага значение конфигурационной переменной
не начинается с символа \V{'/'}, то есть не является абсолютным
путём к каталогу, значение данной конфигурационной переменной
добавляется к значению глобальной конфигурационной переменной
\hyperlink{F:serve.cfg,T:info_dir}{\V{info\_dir}}, и результат
помещается в конфигурационную переменную \V{info\_dir}
задачи. Таким образом, глобальная конфигурационная переменная
\hyperlink{F:serve.cfg,T:info_dir}{\V{info\_dir}} содержит
первые компоненты пути к каталогу \V{.inf}, а конфигурационная
переменная \V{info\_dir} описания задачи --- последние
компоненты пути к каталогу \V{.inf}-файлов.
\end{enumerate}

\B{Пример.} Следующий пример отключает распределение
\V{.inf}-файлов по подкаталогам каталога, определяемого
глобальной переменной
\hyperlink{F:serve.cfg,T:info_dir}{\V{info\_dir}}.
{\small
\begin{verbatim}
info_dir = "."
\end{verbatim}
}

Следующий пример для описания абстрактной задачи задаёт
использование подкаталога, имя которого получается
преобразованием к строчным буквам короткого имени задачи
(\hyperlink{F:serve.cfg,S:problem,T:short_name}{\V{short\_name}}),
в каталоге, определяемом глобальной переменной
\hyperlink{F:serve.cfg,T:info_dir}{\V{info\_dir}}, для
\V{.inf}-файлов для каждой задачи, наследующей свойства данной
абстрактной задачи.
{\small
\begin{verbatim}
info_dir = "%lPs"
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{tgz\_dir}}
\label{descServeCfgProblemTgzDir}
\hypertarget{F:serve.cfg,S:problem,T:tgz_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{tgz\_dir} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:problem}{\V{problem}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{путь к каталогу} или \I{шаблон}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
путь к каталогу, в котором находится архив рабочего каталога для
тестирования решения участника. Архивы рабочих каталогов далее
кратко называются \V{.tgz}-файлы. Полный путь к каталогу с
\V{.tgz}-файлами для каждой неабстрактной задачи определяется по
следующим правилам:
\begin{enumerate}
\item
Если конфигурационная переменная \V{tgz\_dir} задачи
не определена, и эта задача наследует свойства некоторой
абстрактной задачи $A$, у которой эта конфигурационная
переменная определена, то выполняется
\hyperlink{F:serve.cfg,S:format_substitutions}{форматная подстановка} 
с форматом, определяемым значением переменной \V{tgz\_dir}
абстрактной задачи $A$, и результат помещается в переменную
\V{tgz\_dir} данной неабстрактной задачи.
\item
Если после предыдущего шага конфигурационная переменная
\V{tgz\_dir} всё ещё не определена, её значение устанавливается
в короткое имя данной задачи (см. переменную
\hyperlink{F:serve.cfg,S:problem,T:short_name}{\V{short\_name}}).
\item
Если после предыдущего шага значение конфигурационной переменной
не начинается с символа \V{'/'}, то есть не является абсолютным
путём к каталогу, значение данной конфигурационной переменной
добавляется к значению глобальной конфигурационной переменной
\hyperlink{F:serve.cfg,T:tgz_dir}{\V{tgz\_dir}}, и результат
помещается в конфигурационную переменную \V{tgz\_dir}
задачи. Таким образом, глобальная конфигурационная переменная
\hyperlink{F:serve.cfg,T:tgz_dir}{\V{tgz\_dir}} содержит
первые компоненты пути к каталогу \V{.tgz}-файлов, а
конфигурационная переменная \V{tgz\_dir} описания задачи ---
последние компоненты пути к каталогу \V{.tgz}-файлов.
\end{enumerate}

\B{Пример.} Следующий пример отключает распределение
\V{.tgz}-файлов по подкаталогам каталога, определяемого
глобальной переменной
\hyperlink{F:serve.cfg,T:tgz_dir}{\V{tgz\_dir}}.
{\small
\begin{verbatim}
tgz_dir = "."
\end{verbatim}
}

Следующий пример для описания абстрактной задачи задаёт
использование подкаталога, имя которого получается
преобразованием к строчным буквам короткого имени задачи
(\hyperlink{F:serve.cfg,S:problem,T:short_name}{\V{short\_name}}),
в каталоге, определяемом глобальной переменной
\hyperlink{F:serve.cfg,T:tgz_dir}{\V{tgz\_dir}}, для
\V{.tgz}-файлов для каждой задачи, наследующей свойства данной
абстрактной задачи.
{\small
\begin{verbatim}
tgz_dir = "%lPs"
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{info\_sfx}}
\label{descServeCfgProblemInfoSfx}
\hypertarget{F:serve.cfg,S:problem,T:info_sfx}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{info\_sfx} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:problem}{\V{problem}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
суффикс файлов с дополнительной информацией о тестах. Если
неабстрактная задача не устанавливает непосредственно данную
переменную, но наследует абстрактную задачу, устанавливающую эту
конфигурационную переменную, используется значение из описания
абстрактной задачи. Если после этого значение конфигурационной
переменной \V{info\_sfx} всё ещё не определено, используется
значение глобальной конфигурационной переменной
\hyperlink{F:serve.cfg,T:info_sfx}{\V{info\_sfx}}, которая по
умолчанию равна \V{.inf}. Таким образом можно считать, что файлы
с дополнительной информацией о тесте имеют по умолчанию суффикс
\V{.inf}.

\subsubsection{Переменная \V{tgz\_sfx}}
\label{descServeCfgProblemTgzSfx}
\hypertarget{F:serve.cfg,S:problem,T:tgz_sfx}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{tgz\_sfx} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:problem}{\V{problem}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
суффикс файлов архивов рабочего каталога для тестирования
программ. Если неабстрактная задача не устанавливает
непосредственно данную переменную, но наследует абстрактную
задачу, устанавливающую эту конфигурационную переменную,
используется значение из описания абстрактной задачи. Если после
этого значение конфигурационной переменной \V{tgz\_sfx} всё ещё
не определено, используется значение глобальной конфигурационной
переменной
\hyperlink{F:serve.cfg,T:tgz_sfx}{\V{tgz\_sfx}}, которая по
умолчанию равна \V{.tgz}. Таким образом можно считать, что файлы
с архивами рабочего каталога имеют по умолчанию суффикс
\V{.tgz}.

\newpage
\subsubsection{Переменная \V{hidden}}
\label{descServeCfgProblemHidden}
\hypertarget{F:serve.cfg,S:problem,T:hidden}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{hidden} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:problem}{\V{problem}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Значение по умолчанию: & \I{false}\\
Может повторяться:     & \I{нет}\\
Версия \S{ejudge}:     & начиная с 2.1.26.\\
\end{tabular}

\B{Описание.}
Если данная конфигурационная переменная описания некоторой
задачи установлена в \I{true}, эта задача помечается как
<<скрытая>>. Скрытые задачи не отображаются в таблице текущих
результатов турнира, однако доступны участникам турнира для
сдачи решений.

Если в описании неабстрактной задачи данная конфигурационная
переменная не была определена, используется значение переменной
из абстрактной задачи, наследуемой данной задачей. Если после
этого значение данной конфигурационной переменной не определено,
используется значение по умолчанию \I{false}.

\subsubsection{Переменная \V{accept\_partial}}
\label{descServeCfgProblemAcceptPartial}
\hypertarget{F:serve.cfg,S:problem,T:accept_partial}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{accept\_partial} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:problem}{\V{problem}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Значение по умолчанию: & \I{false}\\
Может повторяться:     & \I{нет}\\
Версия \S{ejudge}:     & начиная с 2.1.26.\\
\end{tabular}

\B{Описание.}
Данная конфигурационная переменная действует только в турнирах,
проводимых по системе \I{OLYMPIAD}. Когда турнир находится в
режиме приёма решений на проверку, каждое решение, присылаемое
участниками турнира, компилируется и запускается на нескольких
первых тестах из набора тестов (количество таких тестов задаётся
с помощью конфигурационной переменной
\hyperlink{F:serve.cfg,S:problem,T:tests_to_accept}{\V{tests\_to\_accept}}).
Если данная конфигурационная переменная \V{accept\_partial}
равна \I{false} (значение по умолчанию), чтобы решение было
принято для последующей проверки необходимо, чтобы оно прошло
все эти предварительные тесты. Если данная переменная
установлена в \I{true}, решение принимается на проверку в любом
случае кроме ошибки компиляции.

Если в описании неабстрактной задачи данная конфигурационная
переменная не была определена, используется значение переменной
из абстрактной задачи, наследуемой данной задачей. Если после
этого значение данной конфигурационной переменной не определено,
используется значение по умолчанию \I{false}.

\subsubsection{Переменная \V{date\_penalty}}
\label{descServeCfgProblemDatePenalty}
\hypertarget{F:serve.cfg,S:problem,T:date_penalty}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{date\_penalty} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:problem}{\V{problem}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{спецификации штрафа}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{нет}\\
Значение по умолчанию: & \I{не установлено}\\
Может повторяться:     & \I{да}\\
Версия \S{ejudge}:     & начиная с 2.1.28\\
\end{tabular}

\B{Описание.}
Данная конфигурационная переменная позволяет назначать штраф за
посылку в зависимости от времени сдачи задачи. Например,
посылка, принятая раньше определённой даты, не штрафуется, а
после этой даты накладывается некоторый штраф и т. д. (см.
пример ниже). В рамках описания одной задачи определение
переменной \V{date\_penalty} может повторяться несколько раз.
Каждое новое Каждое определение добавляет новую спецификацию
штрафования к уже существующим. Значение переменной
\V{date\_penalty} не наследуется от абстрактных задач.
Спецификации \V{date\_penalty} одной задачи не зависят от
\V{date\_penalty} других задач. Спецификации упорядочены и
проверяются в порядке их задания в конфигурационном файле.

Каждая спецификация штрафа имеет вид
\begin{verbatim}
DATE ADD-VALUE
\end{verbatim}
где \I{DATE} --- календарная дата, задаваемая в стандартном для
\S{ejudge} формате \V{YYYY/MM/DD [hh[:mm[:ss]]]}, \I{ADD-VALUE}
--- значение, прибавляемое к количеству баллов, полученному в
результате тестирования. Получившееся значение не может быть
меньше 0 (в этом случае оно устанавливается в 0) и больше
максимального значения баллов за данную задачу (в этом случае
оно устанавливается в максимальное количество баллов).
Штрафование в зависимости от времени работает только в режиме
турнира KIROV.

\B{Пример.}
{\small
\begin{verbatim}
date_penalty = "2004/04/05 0"
date_penalty = "2004/04/12 -1"
date_penalty = "2005/01/01 -2"
\end{verbatim}
}
В данном примере если попытка по задаче послана до 5 апреля 2004
г., она не получает штрафных очков, если она послана 5-11
апреля, она получает одно штрафное очко, а если 12 апреля и
позднее - 2 штрафных очка.

\subsubsection{Переменная \V{disable\_language}}
\label{descServeCfgProblemDisableLanguage}
\hypertarget{F:serve.cfg,S:problem,T:disable_language}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{disable\_language} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:problem}{\V{problem}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Значение по умолчанию: & \I{не установлено}\\
Может повторяться:     & \I{да}\\
Версия \S{ejudge}:     & начиная с 2.1.29\\
\end{tabular}

\B{Описание.}
Данная конфигурационная переменная позволяет указать языки
программирования, которые не могут использоваться для посылок по
данной задаче. Каждый раз указывается только одно короткое имя
(\hyperlink{F:serve.cfg,S:language,T:short_name}{\V{short\_name}})
языка программирования, но переменная \V{disable\_language} может
быть использована несколько раз в описании одной задачи.

\B{Пример.}
{\small
\begin{verbatim}
disable_language = "gcc"
disable_language = "g++"
\end{verbatim}
}
Запрещает для некоторой задачи использование языков с коротким
именем
(\hyperlink{F:serve.cfg,S:language,T:short_name}{\V{short\_name}})
\V{gcc} и \V{g++}.

\subsubsection{Переменная \V{priority\_adjustment}}
\label{descServeCfgProblemPriorityAdjustment}
\hypertarget{F:serve.cfg,S:problem,T:priority_adjustment}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{priority\_adjustment} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:problem}{\V{problem}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Значение по умолчанию: & \V{0}\\
Может повторяться:     & \I{нет}\\
Версия \S{ejudge}:     & начиная с 2.1.29\\
\end{tabular}

\B{Описание.}
Данная конфигурационная переменная позволяет задать поправку к
приоритету тестирования для данной задачи. Значение поправки
будет прибавлено к базовому значению приоритета тестирования
(см. описание глобальной конфигурационной переменной
\hyperlink{F:serve.cfg,T:priority_adjustment}{\V{priority\_adjustment}})
при вычислении приоритета тестирования посылки. Положительное
значение поправки уменьшает приоритет, а отрицательное ---
увеличивает.

\B{Пример.}
{\small
\begin{verbatim}
priority_adjustment = 2
\end{verbatim}
}

%%%% END OF PROBLEM CONFIGURATION VARIABLES

\newpage
\subsection{Параметры языка}
\hypertarget{F:serve.cfg,S:language}{}

Каждый поддерживаемый язык программирования описывается в секции
с именем \V{language}. Система \S{ejudge} в нестоящее время
поддерживает до 31 языка программирования. Чтобы увеличить
количество одновременно поддерживаемых языков программирования
необходимо изменить константу \V{MAX\_LANGUAGE} в файле
\V{prepare.c} в исходных текстах системы и перекомпилировать
систему.

Название секции \V{language} можно считать не очень удачным, так
как каждая секция описывает не язык программирования, а
компилятор языка программирования. Например, конфигурационный
файл может содержать 4 секции, соответствующие языку
\S{Паскаль}: для \S{GNU Pascal}, \S{Free Pascal}, \S{Delphi},
\S{Borland Pascal}.

Для секций описания языка наследование свойств не
поддерживается.

Все конфигурационные переменные, допустимые в секции описания
языка программирования, приведены ниже.

\noindent
\begin{longtable}{|>{\ttfamily\small}l|>{\small}l|>{\small}p{8.5cm}|}
\hline
\rmfamily\normalsize Название & Стр. & Описание\\
\hline
\endhead

\hline
\multicolumn{3}{|r|}%
{\small\itshape Продолжение на следующей странице}\\
\hline
\endfoot

\hline
\endlastfoot

\strut\hyperlink{F:serve.cfg,S:language,T:arch}{arch}
  & \pageref{descServeCfgLanguageArch}
  & Архитектура компилятора. \\
\strut\hyperlink{F:serve.cfg,S:language,T:binary}{binary}
  & \pageref{descServeCfgLanguageBinary}
  & Флаг бинарного режима языка программирования. \\
\strut\hyperlink{F:serve.cfg,S:language,T:cmd}{cmd}
  & \pageref{descServeCfgLanguageCmd}
  & Команда запуска компилятора. \\
\strut\hyperlink{F:serve.cfg,S:language,T:compile_dir}{compile\_dir}
  & \pageref{descServeCfgLanguageCompileDir}
  & Каталог обмена программ \S{serve} и \S{compile}. \\
\strut\hyperlink{F:serve.cfg,S:language,T:compile_id}{compile\_id}
  & \pageref{descServeCfgLanguageCompileId}
  & Идентификатор языка для передачи программе \S{compile}. \\
\strut\hyperlink{F:serve.cfg,S:language,T:compile_real_time_limit}{compile\_real\_time\_limit}
  & \pageref{descServeCfgLanguageCompileRealTimeLimit}
  & Ограничение времени на работу компилятора. \\
\strut\hyperlink{F:serve.cfg,S:language,T:disabled}{disabled}
  & \pageref{descServeCfgLanguageDisabled}
  & Флаг запрета использования данного компилятора. \\
\strut\hyperlink{F:serve.cfg,S:language,T:exe_sfx}{exe\_sfx}
  & \pageref{descServeCfgLanguageExeSfx}
  & Суффикс исполняемых файлов, генерируемых компилятором. \\
\strut\hyperlink{F:serve.cfg,S:language,T:id}{id}
  & \pageref{descServeCfgLanguageId}
  & Идентификатор языка. \\
\strut\hyperlink{F:serve.cfg,S:language,T:key}{key}
  & \pageref{descServeCfgLanguageKey}
  & Ключ (дополнительный параметр выбора). \\
\strut\hyperlink{F:serve.cfg,S:language,T:long_name}{long\_name}
  & \pageref{descServeCfgLanguageLongName}
  & Длинное (полное) имя компилятора. \\
\strut\hyperlink{F:serve.cfg,S:language,T:priority_adjustment}{priority\_adjustment}
  & \pageref{descServeCfgLanguagePriorityAdjustment}
  & Поправка к приоритету тестирования для данного языка. \\
\strut\hyperlink{F:serve.cfg,S:language,T:short_name}{short\_name}
  & \pageref{descServeCfgLanguageShortName}
  & Короткое имя компилятора. \\
\strut\hyperlink{F:serve.cfg,S:language,T:src_sfx}{src\_sfx}
  & \pageref{descServeCfgLanguageSrcSfx}
  & Суффикс исходных файлов для компилятора. \\
\end{longtable}

\newpage
\subsubsection{Переменная \V{id}}
\label{descServeCfgLanguageId}
\hypertarget{F:serve.cfg,S:language,T:id}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{id} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:language}{\V{language}} \\
Используются:          & \S{serve}, \S{compile} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
%Наследуется:           & \I{да}\\
%Значение по умолчанию: & \V{30}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
идентификатор языка программирования. Идентификатор является
целым числом от 1 и до максимального количества поддерживаемых
языков, задаваемого константой \V{MAX\_LANGUAGE} в исходном
файле \V{prepare.c} (значение в стандартной поставке --- 31).
Никакие два языка программирования не могут иметь одинаковые
идентификаторы. Если идентификатор явно не задан, он назначается
автоматически. Для этого берётся идентификатор предыдущего языка
и увеличивается на 1. Если при этом получится уже использованный
идентификатор, диагностируется фатальная ошибка. Если
идентификатор первого языка не задан, он устанавливается равным
1.

\B{Пример.}
{\small
\begin{verbatim}
id = 10
\end{verbatim}
}

\subsubsection{Переменная \V{compile\_id}}
\label{descServeCfgLanguageCompileId}
\hypertarget{F:serve.cfg,S:language,T:compile_id}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{compile\_id} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:language}{\V{language}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
%Наследуется:           & \I{да}\\
%Значение по умолчанию: & \V{30}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная позволяет
установить дополнительный идентификатор языка для передачи
решения участника на компиляцию. Переменная предназначена для
случаев, когда одна и та же программа \S{compile} обслуживает
сразу несколько турниров (см. также конфигурационную переменную
\hyperlink{F:serve.cfg,T:compile_dir}{\V{compile\_dir}}). В этом
случае идентификатор языка программирования для сервера
компиляции \S{compile} может отличаться от идентификатора языка
сервера турнира \S{serve}. Данный конфигурационный параметр
используется программой \S{serve} и позволяет задать
идентификатор языка, соответствующий идентификатору языка у
программы \S{compile}. Если данная переменная не указана, она
полагается равной значению переменной
\hyperlink{F:serve.cfg,S:language,T:id}{\V{id}}, то есть в
случае, если \S{serve} и \S{compile} используют один
конфигурационный файл, установка переменной \V{compile\_id} не
требуется.

\B{Пример.}
{\small
\begin{verbatim}
id = 10
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{disabled}}
\label{descServeCfgLanguageDisabled}
\hypertarget{F:serve.cfg,S:language,T:disabled}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{disabled} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:language}{\V{language}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
%Наследуется:           & \I{да}\\
Значение по умолчанию: & \I{false}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Если данная конфигурационная переменная
установлена в \I{true}, то участники не могут использовать
данный язык программирования для посылки решений. Данный
параметр может оказаться полезным, когда по ходу турнира
необходимо запретить какой-либо язык программирования. Если
просто удалить соответствующую запись, то, во-первых, могут
измениться идентификаторы оставшихся языков, что приведёт к
проблемам с базой решений участников турнира, и, во-вторых,
возникнут проблемы с решениями участников, уже сданных на
удалённом языке (вторичный ключ <<язык программирования>> в базе
решений участников турнира будет указывать <<в никуда>>).
Поэтому в таких случаях следует устанавливать конфигурационную
переменную \V{disabled}.

\B{Пример.}
{\small
\begin{verbatim}
disabled
\end{verbatim}
}

\subsubsection{Переменная \V{short\_name}}
\label{descServeCfgLanguageShortName}
\hypertarget{F:serve.cfg,S:language,T:short_name}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{short\_name} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:language}{\V{language}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
%Наследуется:           & \I{да}\\
%Значение по умолчанию: & \I{false}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
<<короткое имя>> языка программирования. Короткое имя
используется в таблице решений участников в CGI-программе
\S{master}, в таблице решений в CGI-программе \S{team}, а также
для выбора языка программирования для отсылки решения. Если эта
конфигурационная переменная не установлена, она автоматически
устанавливается в значение \V{lang<id>}, где \V{<id>} --- это
идентификатор задачи, преобразованный в строку с помощью
спецификации формата \V{\%d}.

\B{Пример.}
{\small
\begin{verbatim}
short_name = "gcc"
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{long\_name}}
\label{descServeCfgLanguageLongName}
\hypertarget{F:serve.cfg,S:language,T:long_name}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{long\_name} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:language}{\V{language}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
%Наследуется:           & \I{да}\\
%Значение по умолчанию: & \I{false}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
<<длинное имя>> языка программирования. Длинное имя может
содержать дополнительную информацию о языке программирования,
например, версию компилятора. CGI-программа \S{team} использует
значение этой переменной в меню выбора языка для отсылки решения.
Если эта конфигурационная переменная не установлена, она
автоматически устанавливается в значение \V{"Language <id>"},
где \V{<id>} --- это идентификатор задачи, преобразованный в
строку с помощью спецификации формата \V{\%d}.

\B{Пример.}
{\small
\begin{verbatim}
long_name = "GNU C 3.3.1"
\end{verbatim}
}

\subsubsection{Переменная \V{key}}
\label{descServeCfgLanguageKey}
\hypertarget{F:serve.cfg,S:language,T:key}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{key} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:language}{\V{language}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
%Наследуется:           & \I{да}\\
Значение по умолчанию: & \V{"{}"} (пустая строка)\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
<<ключ>> для выбора языков программирования, обслуживаемых
программой \S{compile}. Программа \S{compile} поддерживает опцию
командной строки \V{-k} с помощью которой можно указать ключ
языков программирования. Тогда из всех языков программирования,
описанных в конфигурационном файле, будут обслуживаться только
те, ключ которых совпадает с ключом, заданным в командной
строке. В этом случае значение по умолчанию (пустая строка)
переменной \V{key} является значимым, и такой язык
программирования будет обслуживаться, только если в командной
строке в качестве параметра опции \V{-k} указана пустая строка.
Если опция \V{-k} не задана, отбор языков по значению переменной
\V{key} не производится, и значение этой переменной может быть
произвольным (в частности, переменная может быть не
установлена).

\B{Пример.}
{\small
\begin{verbatim}
key = "langs_1"
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{arch}}
\label{descServeCfgLanguageArch}
\hypertarget{F:serve.cfg,S:language,T:arch}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{arch} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:language}{\V{language}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
%Наследуется:           & \I{да}\\
Значение по умолчанию: & \V{"{}"} (пустая строка)\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная задаёт
<<архитектуру>>, для которой предназначен данный язык
программирования. Архитектура является одним из двух параметров,
по которому выбирается тестировщик для данной
программы. Например, значение архитектуры \V{dos} может
соответствовать компиляторам для \S{DOS} (например,
\S{Borland C 3.1}), а неустановленное значение архитектуры
(пустая строка) может соответствовать компиляторам для \S{Linux},
которые генерируют статический исполняемый модуль (например,
\S{GCC}). Процедура запуска скомпилированной программы для этих
архитектур существенно отличается, поэтому для каждой из них
должен использоваться отдельный тестировщик. Исполняемый файл,
полученный в результате компиляции исходного файла, будет
направлен на тестирование к тестировщику с соответствующей
архитектурой.

\B{Пример.}
{\small
\begin{verbatim}
arch = "dos"
\end{verbatim}
}

\subsubsection{Переменная \V{src\_sfx}}
\label{descServeCfgLanguageSrcSfx}
\hypertarget{F:serve.cfg,S:language,T:src_sfx}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{src\_sfx} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:language}{\V{language}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
%Наследуется:           & \I{да}\\
Значение по умолчанию: & \V{"{}"} (пустая строка)\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
суффикс, который должны иметь файлы, подаваемые на компиляцию
данному компилятору языка программирования. Например, компилятор
\S{GCC} требует, чтобы файл программы на языке \S{Си} имел
суффикс \V{.c}.  а файл программы на языке \S{Си++} имел суффикс
\V{.cpp}, \V{.cc} или \V{.C}.

\B{Пример.}
{\small
\begin{verbatim}
src_sfx = ".c"
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{exe\_sfx}}
\label{descServeCfgLanguageExeSfx}
\hypertarget{F:serve.cfg,S:language,T:exe_sfx}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{exe\_sfx} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:language}{\V{language}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
%Наследуется:           & \I{да}\\
Значение по умолчанию: & \V{"{}"} (пустая строка)\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
суффикс исполняемых файлов, получаемых в результате компиляции
данным компилятором. Как правило, суффикс исполняемых файлов
зависит от архитектуры. Например, исполняемые файлы для
\S{Linux} обычно не имеют никакого суффикса, а исполняемые файлы
для \S{DOS} имеют суффикс \V{.exe}.

\B{Пример.}
{\small
\begin{verbatim}
exe_sfx = ".exe"
\end{verbatim}
}

\subsubsection{Переменная \V{cmd}}
\label{descServeCfgLanguageCmd}
\hypertarget{F:serve.cfg,S:language,T:cmd}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{cmd} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:language}{\V{language}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{нет}\\
%Наследуется:           & \I{да}\\
%Значение по умолчанию: & \V{"{}"} (пустая строка)\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
программу, которая запускается для компиляции решения участника
турнира. Как правило, эта программа не является непосредственно
компилятором, а представляет собой скрипт, запускающий
компилятор с необходимыми параметрами.

Программа компиляции,
задаваемая этой переменной, запускается с двумя параметрами:
первый параметр --- имя исходного файла программы, второй
параметр --- имя файла, в который должен быть помещён результат
компиляции. Программа запускается с текущим каталогом,
установленным на рабочий каталог, в котором находится исходный
файл, и должен находиться файл-результат. Стандартный поток
вывода и стандартный поток ошибок перенаправляются в файл,
который в случае неудачи компиляции будет использоваться как
протокол запуска решения пользователя. Программа компиляции
должна завершаться с кодом возврата 0, если компиляция
завершилась успешно, и с любым другим кодом возврата в случае
ошибки при компиляции.

Если значение конфигурационной переменной \V{cmd} начинается с
символа \V{'/'}, то есть задаёт абсолютный путь к программе, то
используется этот путь. В противном случае полный путь к
программе компиляции получается добавлением значения данной
конфигурационной переменной \V{cmd} к значению глобальной
конфигурационной переменной
\hyperlink{F:serve.cfg,T:script_dir}{\V{script\_dir}}. Файл
программы компиляции должен допускать выполнение, то есть иметь
установленным бит \V{x} прав доступа.

\B{Пример.}
{\small
\begin{verbatim}
cmd = "gcc"
\end{verbatim}
}

\subsubsection{Переменная \V{compile\_dir}}
\label{descServeCfgLanguageCompileDir}
\hypertarget{F:serve.cfg,S:language,T:compile_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{compile\_dir} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:language}{\V{language}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
%Наследуется:           & \I{да}\\
%Значение по умолчанию: & \V{"{}"} (пустая строка)\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная позволяет
установить каталог обмена программ \S{serve} и \S{compile} для
данного языка программирования. Если переменная не установлена,
используется значение глобальной переменной
\hyperlink{F:serve.cfg,T:compile_dir}{\V{compile\_dir}}. Данная
переменная может использоваться, когда необходимо явно назначить
сервер компиляции для некоторого языка программирования. При
обычном использовании, когда один сервер компиляции поддерживает
компиляцию всех определённых в турнире языков программирования,
данная конфигурационная переменная не должна использоваться.

\subsubsection{Переменная \V{compile\_real\_time\_limit}}
\label{descServeCfgLanguageCompileRealTimeLimit}
\hypertarget{F:serve.cfg,S:language,T:compile_real_time_limit}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{compile\_real\_time\_limit} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:language}{\V{language}} \\
Используются:          & \S{compile} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
%Наследуется:           & \I{да}\\
%Значение по умолчанию: & \V{30} \\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная задаёт
ограничение астрономического времени на компиляцию программы
участника. В случае, если максимальное время компиляции
превышено, проверка программы участника завершается со статусом
``Check failed'' (<<Проверка не удалась>>). Значение 0 означает
отсутствие ограничения времени. Если данная конфигурационная
переменная не установлена, используется значение глобальной
конфигурационной переменной
\hyperlink{F:serve.cfg,T:compile_real_time_limit}{\V{compile\_real\_time\_limit}}.

\B{Пример.}
{\small
\begin{verbatim}
compile_real_time_limit = 60
\end{verbatim}
}

\subsubsection{Переменная \V{binary}}
\label{descServeCfgLanguageBinary}
\hypertarget{F:serve.cfg,S:language,T:binary}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{binary} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:language}{\V{language}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{false} \\
Может повторяться:     & \I{нет}\\
Версия \S{ejudge}:     & начиная с 2.1.27\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная указывает, что
текст посылки с данным языком программирования должен
обрабатываться в бинарном режиме. По умолчанию обработка ведётся
в текстовом режиме, то есть программа, принимаемая на проверку,
рассматривается как текстовый файл, представляющий собой
последовательность ненулевых байтов. Нулевой байт
рассматривается как признак конца файла. Таким образом,
для текстовой посылки могут использоваться строковые функции
языка Си. При приёме посылки в текстовом режиме проводятся
дополнительные проверки, что в принимаемом файле отсутствуют
нулевые байты. Если обработка посылки ведётся в бинарном режиме,
никаких ограничений на содержимое посылки не накладывается.

Бинарный режим приёма посылок должен использоваться для <<языков
программирования>> (а точнее, форматов файлов), которые могут
содержать нулевые байты. К таким форматам файлов относятся все
архивы (\V{.tar}, \V{.tar.gz}, и т. д.), некоторые форматы
документов (\V{.doc}, \V{.sxw}, и т. д.). Во всех остальных
случаях, например, для приёма исходных текстов программ,
рекомендуется использовать текстовый режим.

\subsubsection{Переменная \V{priority\_adjustment}}
\label{descServeCfgLanguagePriorityAdjustment}
\hypertarget{F:serve.cfg,S:language,T:priority_adjustment}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{priority\_adjustment} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:language}{\V{language}} \\
Используется:          & \S{serve} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \V{0} \\
Может повторяться:     & \I{нет}\\
Версия \S{ejudge}:     & начиная с 2.1.29\\
\end{tabular}

\B{Описание.}
Данная конфигурационная переменная позволяет задать поправку к
приоритету тестирования для данного языка программирования.
Значение поправки будет прибавлено к базовому значению
приоритета тестирования (см. описание глобальной
конфигурационной переменной 
\hyperlink{F:serve.cfg,T:priority_adjustment}{\V{priority\_adjustment}})
при вычислении приоритета тестирования посылки. Положительное
значение поправки уменьшает приоритет, а отрицательное ---
увеличивает.

\B{Пример.}
{\small
\begin{verbatim}
priority_adjustment = 2
\end{verbatim}
}

%%%% END OF LANGUAGE CONFIGURATION VARIABLES

\newpage
\subsection{Параметры тестировщика}
\hypertarget{F:serve.cfg,S:tester}{}

Разнообразные архитектурно-зависимые параметры тестирования
решений задач описываются в секции тестировщика \V{tester}. Для
каждой пары задача-архитектура должен быть описан тестировщик.
Все параметры, относящиеся непосредственно к задаче, описываются
в секции \hyperlink{F:serve.cfg,S:problem}{\V{problem}}. Ключом
для выбора тестировщика являются либо идентификатор задачи,
задаваемый с помощью конфигурационной переменной
\hyperlink{F:serve.cfg,S:problem,T:id}{\V{id}}, либо короткое
имя задачи, задаваемое с помощью конфигурационной переменной
\hyperlink{F:serve.cfg,S:problem,T:short_name}{\V{short\_name}}.
Архитектура определяется конфигурационной переменной
\hyperlink{F:serve.cfg,S:language,T:arch}{\V{arch}} секции
описания языка программирования
\hyperlink{F:serve.cfg,S:language}{\V{language}}. При этом
несколько языков программирования могут иметь одну и ту же
архитектуру. Поскольку секция \V{language} описывает, скорее, не
язык программирования, а компилятор языка программирования, то и
параметр \V{arch} описывает архитектуру, для которой генерирует
код данный компилятор.

В секции тестировщика поддерживается наследование свойств
неабстрактного тестировщика от абстрактного тестировщика
аналогично тому, как наследуются свойства в секции задачи.
При наследовании свойств в некоторых случаях выполняются
форматные подстановки. Допускаются тестировщики по умолчанию,
которые предназначены для проверки всех задач, не проверяемых
явно заданными тестировщиками, для некоторой архитектуры. В
тестировщиках по умолчанию могут использоваться форматные
подстановки.

Текущая версия системы \S{ejudge} поддерживает до 100
неабстрактных тестировщиков одновременно. Каждый тестировщик по
умолчанию считается за один тестировщик независимо от количества
задач, для которых он предназначен. Ограничение на максимальное
количество тестировщиков задаётся константой \V{MAX\_TESTER} в
исходном файле \V{prepare.c} системы \S{ejudge}. Чтобы изменить
это ограничение нужно изменить значение константы и
перекомпилировать систему \S{ejudge}.

Все конфигурационные переменные тестировщика перечислены ниже.

\noindent
\begin{longtable}{|>{\ttfamily\small}l|>{\small}l|>{\small}p{8.5cm}|}
\hline
\rmfamily\normalsize Название & Стр. & Описание\\
\hline
\endhead

\hline
\multicolumn{3}{|r|}%
{\small\itshape Продолжение на следующей странице}\\
\hline
\endfoot

\hline
\endlastfoot

\strut\hyperlink{F:serve.cfg,S:tester,T:abstract}{abstract}
  & \pageref{descServeCfgTesterAbstract}
  & Флаг абстрактного тестировщика. \\
\strut\hyperlink{F:serve.cfg,S:tester,T:any}{any}
  & \pageref{descServeCfgTesterAny}
  & Флаг тестировщика по умолчанию. \\
\strut\hyperlink{F:serve.cfg,S:tester,T:arch}{arch}
  & \pageref{descServeCfgTesterArch}
  & Архитектура тестировщика. \\
\strut\hyperlink{F:serve.cfg,S:tester,T:check_cmd}{check\_cmd}
  & \pageref{descServeCfgTesterCheckCmd}
  & Путь к программе проверки ответа. \\
\strut\hyperlink{F:serve.cfg,S:tester,T:check_dir}{check\_dir}
  & \pageref{descServeCfgTesterCheckDir}
  & Рабочий каталог тестирования. \\
\strut\hyperlink{F:serve.cfg,S:tester,T:clear_env}{clear\_env}
  & \pageref{descServeCfgTesterClearEnv}
  & Флаг очистки переменных окружения перед запуском тестируемой программы. \\
\strut\hyperlink{F:serve.cfg,S:tester,T:errorcode_file}{errorcode\_file}
  & \pageref{descServeCfgTesterErrorcodeFile}
  & Файл, содержащий код завершения тестируемой программы. \\
\strut\hyperlink{F:serve.cfg,S:tester,T:error_file}{error\_file}
  & \pageref{descServeCfgTesterErrorFile}
  & Файл, содержащий вывод на стандартный поток ошибок тестируемой
    программы. \\
\strut\hyperlink{F:serve.cfg,S:tester,T:id}{id}
  & \pageref{descServeCfgTesterId}
  & Идентификатор тестировщика. \\
\strut\hyperlink{F:serve.cfg,S:tester,T:is_dos}{is\_dos}
  & \pageref{descServeCfgTesterIsDos}
  & Флаг DOS-формата текста для тестируемых программ. \\
\strut\hyperlink{F:serve.cfg,S:tester,T:key}{key}
  & \pageref{descServeCfgTesterKey}
  & Дополнительный параметр выбора --- <<ключ>>. \\
\strut\hyperlink{F:serve.cfg,S:tester,T:kill_signal}{kill\_signal}
  & \pageref{descServeCfgTesterKillSignal}
  & Сигнал принудительного завершения тестируемой программы. \\
\strut\hyperlink{F:serve.cfg,S:tester,T:max_data_size}{max\_data\_size}
  & \pageref{descServeCfgTesterMaxDataSize}
  & Максимальный размер данных тестируемой программы. \\
\strut\hyperlink{F:serve.cfg,S:tester,T:max_stack_size}{max\_stack\_size}
  & \pageref{descServeCfgTesterMaxStackSize}
  & Максимальный размер стека тестируемой программы. \\
\strut\hyperlink{F:serve.cfg,S:tester,T:max_vm_size}{max\_vm\_size}
  & \pageref{descServeCfgTesterMaxVmSize}
  & Максимальный размер виртуальной памяти тестируемой программы. \\
\strut\hyperlink{F:serve.cfg,S:tester,T:name}{name}
  & \pageref{descServeCfgTesterName}
  & Имя тестировщика. \\
\strut\hyperlink{F:serve.cfg,S:tester,T:no_core_dump}{no\_core\_dump}
  & \pageref{descServeCfgTesterNoCoreDump}
  & Флаг запрета дампа памяти при фатальных сигналах у тестируемой
    программы. \\
\strut\hyperlink{F:serve.cfg,S:tester,T:no_redirect}{no\_redirect}
  & \pageref{descServeCfgTesterNoRedirect}
  & Флаг отключения перенаправления у тестируемой программы. \\
\strut\hyperlink{F:serve.cfg,S:tester,T:prepare_cmd}{prepare\_cmd}
  & \pageref{descServeCfgTesterPrepareCmd}
  & Команда подготовки тестируемой программы. \\
\strut\hyperlink{F:serve.cfg,S:tester,T:priority_adjustment}{priority\_adjustment}
  & \pageref{descServeCfgTesterPriorityAdjustment}
  & Поправка к приоритету тестирования. \\
\strut\hyperlink{F:serve.cfg,S:tester,T:problem}{problem}
  & \pageref{descServeCfgTesterProblem}
  & Идентификатор тестируемой задачи. \\
\strut\hyperlink{F:serve.cfg,S:tester,T:problem_name}{problem\_name}
  & \pageref{descServeCfgTesterProblemName}
  & Имя тестируемой задачи. \\
\strut\hyperlink{F:serve.cfg,S:tester,T:run_dir}{run\_dir}
  & \pageref{descServeCfgTesterRunDir}
  & Каталог обмена программ \S{serve} и \S{run}. \\
\strut\hyperlink{F:serve.cfg,S:tester,T:super}{super}
  & \pageref{descServeCfgTesterSuper}
  & Абстрактный тестировщик, свойства которого наследуются. \\
\strut\hyperlink{F:serve.cfg,S:tester,T:start_cmd}{start\_cmd}
  & \pageref{descServeCfgTesterStartCmd}
  & Вспомогательная команда для запуска тестируемой программы. \\
\strut\hyperlink{F:serve.cfg,S:tester,T:start_env}{start\_env}
  & \pageref{descServeCfgTesterStartEnv}
  & Переменные окружения для тестируемой программы. \\
\strut\hyperlink{F:serve.cfg,S:tester,T:time_limit_adjustment}{time\_limit\_adjustment}
  & \pageref{descServeCfgTesterTimeLimitAdjustment}
  & Поправка на время тестирования. \\
\end{longtable}

%\newpage
\subsubsection{Переменная \V{id}}
\label{descServeCfgTesterId}
\hypertarget{F:serve.cfg,S:tester,T:id}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{id} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:tester}{\V{tester}} \\
Используются:          & \S{serve}, \S{run} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{нет}\\
%Значение по умолчанию: & \V{30} \\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
идентификатор тестировщика. Идентификатор тестировщика, в
отличие от идентификатора задачи или языка программирования, не
является ключом при поиске, а используется просто для указания
элемента массива тестировщиков, в котором хранится описание
данного тестировщика. Поэтому в большинстве случаев явное
указание идентификатора тестировщика не требуется. Каждый
тестировщик должен иметь уникальный идентификатор в пределах от
1 до \V{MAX\_TESTER}. Если идентификатор тестировщика явно не
задан, он назначается автоматически. Для этого берётся
идентификатор предыдущего тестировщика и увеличивается на
1. Данная процедура автоматического назначения тестировщика
может приводить к ошибке повторяющегося идентификатора, которая
приведёт к ошибке запуска системы.

Абстрактные тестировщики не могут устанавливать переменную
\V{id}. Если переменная \V{id} у абстрактного тестировщика
установлена, выдаётся сообщение об ошибке. Идентификатор
тестировщика не наследуется от абстрактных тестировщиков
неабстрактными тестировщиками.

\B{Пример.}
{\small
\begin{verbatim}
id = 10
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{name}}
\label{descServeCfgTesterName}
\hypertarget{F:serve.cfg,S:tester,T:name}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{name} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:tester}{\V{tester}} \\
Используются:          & \S{serve}, \S{run} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{нет}\\
%Значение по умолчанию: & \V{30} \\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная задаёт
символическое имя тестировщика. Для неабстрактных тестировщиков
оно никак не используется. Если имя тестировщика не задано,
автоматически устанавливается имя \V{tst\_\%d}, если архитектура
тестировщика не задана, и \V{tst\_\%d\_\%s}, если архитектура
тестировщика задана. Форматное преобразование \V{\%d}
применяется к идентификатору тестировщика
\hyperlink{F:serve.cfg,S:tester,T:id}{\V{id}}, а форматное
преобразование \V{\%s} применяется к архитектуре тестировщика
\hyperlink{F:serve.cfg,S:tester,T:arch}{\V{arch}}.

Для абстрактных тестировщиков имя тестировщика является ключом,
по которому находится тестировщик для выполнения операций
наследования свойств неабстрактным тестировщиком от данного
абстрактного тестировщика. В абстрактных тестировщиках
конфигурационная переменная \V{name} должна быть задана и должна
быть уникальна среди всех абстрактных тестировщиков.
Естественно, переменная \V{name} не наследуется.

\B{Пример.}
{\small
\begin{verbatim}
name = "Dos_tester"
\end{verbatim}
}

\subsubsection{Переменная \V{problem}}
\label{descServeCfgTesterProblem}
\hypertarget{F:serve.cfg,S:tester,T:problem}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{problem} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:tester}{\V{tester}} \\
Используются:          & \S{serve}, \S{run} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{нет}\\
%Значение по умолчанию: & \V{30} \\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
идентификатор задачи, тестируемой данным тестировщиком. Если
значение переменной установлено, задача с таким идентификатором,
задаваемым конфигурационной переменной
\hyperlink{F:serve.cfg,S:problem,T:id}{\V{id}},
должна существовать. Абстрактные тестировщики и тестировщики по
умолчанию не могут устанавливать данную конфигурационную
переменную. Для прочих тестировщиков для идентификации задачи,
тестируемой данным тестировщиком, должна быть задана либо
конфигурационная переменная \V{problem}, либо конфигурационная
переменная
\hyperlink{F:serve.cfg,S:tester,T:problem_name}{\V{problem\_name}},
но не обе одновременно. Конфигурационная переменная \V{problem}
не наследуется.

\B{Пример.}
{\small
\begin{verbatim}
problem = 10
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{problem\_name}}
\label{descServeCfgTesterProblemName}
\hypertarget{F:serve.cfg,S:tester,T:problem_name}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{problem\_name} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:tester}{\V{tester}} \\
Используются:          & \S{serve}, \S{run} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{нет}\\
%Значение по умолчанию: & \V{30} \\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
короткое имя задачи, тестируемой данным тестировщиком. Если
значение переменной установлено, задача с таким коротким именем,
задаваемым конфигурационной переменной
\hyperlink{F:serve.cfg,S:problem,T:short_name}{\V{short\_name}},
должна существовать. Абстрактные тестировщики и тестировщики по
умолчанию не могут устанавливать данную конфигурационную
переменную. Для прочих тестировщиков для идентификации задачи,
тестируемой данным тестировщиком, должна быть задана либо
конфигурационная переменная
\hyperlink{F:serve.cfg,S:tester,T:problem}{\V{problem}}, либо
конфигурационная переменная \V{problem\_name}, но не обе
одновременно. Конфигурационная переменная \V{problem\_name} 
не наследуется.

\B{Пример.}
{\small
\begin{verbatim}
problem_name = "A"
\end{verbatim}
}

\subsubsection{Переменная \V{any}}
\label{descServeCfgTesterAny}
\hypertarget{F:serve.cfg,S:tester,T:any}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{any} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:tester}{\V{tester}} \\
Используются:          & \S{serve}, \S{run} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{нет}\\
Значение по умолчанию: & \V{false} \\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Если данная конфигурационная переменная
установлена в \I{true}, данный тестировщик считается
тестировщиком по умолчанию. Такой тестировщик используется для
тестирования решений всех задач, для которых не задан явный
тестировщик. Тестировщик по умолчанию не может устанавливать
конфигурационные переменные
\hyperlink{F:serve.cfg,S:tester,T:problem}{\V{problem}} и
\hyperlink{F:serve.cfg,S:tester,T:problem_name}{\V{problem\_name}}.
Тестировщик по умолчанию может иметь абстрактный тестировщик,
свойства которого наследуются. Процедура наследования свойств
выполняется при тестировании решения задачи, подходящей под
данный тестировщик по умолчанию. При наследовании некоторых
переменных выполняются форматные подстановки, для которых
используются значения конфигурационных переменных описания
задачи, соответствующие той неабстрактной задаче, решение
которой тестируется. Таким образом, при каждом наследовании
свойств значения переменных, зависящие от параметров задачи,
будут принимать значения, соответствующие текущей задаче.

Абстрактные тестировщики не могут устанавливать переменную
\V{any}. Значение этой конфигурационной переменной не
наследуется.

\B{Пример.}
{\small
\begin{verbatim}
problem_name = "A"
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{abstract}}
\label{descServeCfgTesterAbstract}
\hypertarget{F:serve.cfg,S:tester,T:abstract}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{abstract} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:tester}{\V{tester}} \\
Используются:          & \S{serve}, \S{run} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{нет}\\
Значение по умолчанию: & \V{false} \\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Если данная конфигурационная переменная
установлена в \I{true}, текущее описание тестировщика является
описанием абстрактного тестировщика.

Абстрактный тестировщик не имеет идентификатора (то есть не
может использовать параметр
\hyperlink{F:serve.cfg,S:tester,T:id}{\V{id}}), не может быть
тестировщиком по умолчанию (то есть не может устанавливать
параметр \hyperlink{F:serve.cfg,S:tester,T:id}{\V{any}}), не
может устанавливать тестируемую задачу с помощью
конфигурационных переменных
\hyperlink{F:serve.cfg,S:tester,T:problem}{\V{problem}} или
\hyperlink{F:serve.cfg,S:tester,T:problem\_name}{\V{problem\_name}}.
Абстрактный тестировщик не может наследовать свойства другого
абстрактного тестировщика, то есть использование
конфигурационной переменной
\hyperlink{F:serve.cfg,S:tester,T:super}{\V{super}} в описании
абстрактного тестировщика не допускается.

Описание абстрактного тестировщика должно устанавливать параметр
\hyperlink{F:serve.cfg,S:tester,T:name}{\V{name}}, который
используется для идентификации абстрактного тестировщика. Имя
абстрактного тестировщика должно быть уникальным среди всех
абстрактных тестировщиков.

Описание абстрактного тестировщика устанавливает значения
конфигурационных переменных. Неабстрактный тестировщик указывает
имя абстрактного тестировщика в конфигурационной переменной
\hyperlink{F:serve.cfg,S:tester,T:super}{\V{super}}, при этом
значение некоторой переменной наследуется из абстрактного
тестировщика только в том случае, если эта переменная не
установлена в самом неабстрактном тестировщике.
% Неабстрактный
%тестировщик может указывать несколько абстрактных тестировщиков
%для наследования свойств. В этом случае, если значение некоторой
%конфигурационной переменной в самом неабстрактном тестировщике
%не установлено, абстрактные тестировщики будут просматриваться в
%порядке их указания в описании данной неабстрактной задачи.

Конкретный тестировщик может наследовать следующие
конфигурационные переменные из описания абстрактного
тестировщика: 
\hyperlink{F:serve.cfg,S:tester,T:arch}{\V{arch}},
\hyperlink{F:serve.cfg,S:tester,T:check_cmd}{\V{check\_cmd}},
\hyperlink{F:serve.cfg,S:tester,T:check_dir}{\V{check\_dir}},
\hyperlink{F:serve.cfg,S:tester,T:clear_env}{\V{clear\_env}},
\hyperlink{F:serve.cfg,S:tester,T:errorcode_file}{\V{errorcode\_file}},
\hyperlink{F:serve.cfg,S:tester,T:error_file}{\V{error\_file}},
\hyperlink{F:serve.cfg,S:tester,T:is_dos}{\V{is\_dos}},
\hyperlink{F:serve.cfg,S:tester,T:key}{\V{key}},
\hyperlink{F:serve.cfg,S:tester,T:kill_signal}{\V{kill\_signal}},
\hyperlink{F:serve.cfg,S:tester,T:max_data_size}{\V{max\_data\_size}},
\hyperlink{F:serve.cfg,S:tester,T:max_stack_size}{\V{max\_stack\_size}},
\hyperlink{F:serve.cfg,S:tester,T:max_vm_size}{\V{max\_vm\_size}},
\hyperlink{F:serve.cfg,S:tester,T:no_core_dump}{\V{no\_core\_dump}},
\hyperlink{F:serve.cfg,S:tester,T:no_redirect}{\V{no\_redirect}},
\hyperlink{F:serve.cfg,S:tester,T:prepare_cmd}{\V{prepare\_cmd}},
\hyperlink{F:serve.cfg,S:tester,T:run_dir}{\V{run\_dir}},
\hyperlink{F:serve.cfg,S:tester,T:start_cmd}{\V{start\_cmd}},
\hyperlink{F:serve.cfg,S:tester,T:start_env}{\V{start\_env}},
\hyperlink{F:serve.cfg,S:tester,T:time_limit_adjustment}{\V{time\_limit\_adjustment}}.

При этом при наследовании конфигурационных переменных
\hyperlink{F:serve.cfg,S:tester,T:check_cmd}{\V{check\_cmd}},
\hyperlink{F:serve.cfg,S:tester,T:check_dir}{\V{check\_dir}},
\hyperlink{F:serve.cfg,S:tester,T:errorcode_file}{\V{errorcode\_file}},
\hyperlink{F:serve.cfg,S:tester,T:error_file}{\V{error\_file}},
\hyperlink{F:serve.cfg,S:tester,T:prepare_cmd}{\V{prepare\_cmd}},
\hyperlink{F:serve.cfg,S:tester,T:run_dir}{\V{run\_dir}},
\hyperlink{F:serve.cfg,S:tester,T:start_cmd}{\V{start\_cmd}}
выполняется
\hyperlink{F:serve.cfg,S:format_substitutions}{форматная подстановка}
(см. раздел \ref{sectionFormatSubstitutions}).

\B{Не наследуются} следующие конфигурационные переменные
абстрактной задачи:
\hyperlink{F:serve.cfg,S:tester,T:abstract}{\V{abstract}},
\hyperlink{F:serve.cfg,S:tester,T:id}{\V{any}},
\hyperlink{F:serve.cfg,S:tester,T:id}{\V{id}}),
\hyperlink{F:serve.cfg,S:tester,T:name}{\V{name}},
\hyperlink{F:serve.cfg,S:tester,T:problem}{\V{problem}},
\hyperlink{F:serve.cfg,S:tester,T:problem\_name}{\V{problem\_name}},
\hyperlink{F:serve.cfg,S:tester,T:super}{\V{super}}.

\B{Пример.}
{\small
\begin{verbatim}
abstract
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{super}}
\label{descServeCfgTesterSuper}
\hypertarget{F:serve.cfg,S:tester,T:super}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{super} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:tester}{\V{tester}} \\
Используются:          & \S{serve}, \S{run} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{нет}\\
Значение по умолчанию: & не установлено \\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная определяет имя
абстрактного тестировщика, свойства которого наследует данный
неабстрактный тестировщик. Значением переменной должно быть имя
(см. конфигурационную переменную
\hyperlink{F:serve.cfg,S:tester,T:name}{\V{name}}) абстрактного
тестировщика. Если абстрактного тестировщика с таким именем не
существует, программы \S{serve} и \S{run} не запускаются.
Неабстрактная задача может наследовать свойства единственной
абстрактной задачи. Если конфигурационная переменная \V{super}
не установлена, никакого наследования свойств не происходит.

\B{FIXME}. Вроде бы абстрактная задача может наследовать
свойства нескольких других абстрактных задач. Надо проверить!

Наследование некоторой конфигурационной переменной заключается в
копировании её значения из описания абстрактной задачи в
описание неабстрактной задачи. Для некоторых конфигурационных
переменных при этом выполняются форматные подстановки. Значение
переменной наследуется только тогда, когда значение переменной в
неабстрактной задаче не определено. Если неабстрактная задача
устанавливает значение некоторой переменной, всегда используется
это значение данной переменной.

{\small
\begin{verbatim}
super = "DOS_Tester"
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{arch}}
\label{descServeCfgTesterArch}
\hypertarget{F:serve.cfg,S:tester,T:arch}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{arch} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:tester}{\V{tester}} \\
Используются:          & \S{serve}, \S{run} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Значение по умолчанию: & \V{"{}"} (пустая строка)\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная задаёт
<<архитектуру>>, для которой предназначен данный тестировщик.
Архитектура является одним из двух параметров, по которому
выбирается тестировщик для тестируемой программы (вторым
является идентификатор задачи). Например, значение архитектуры
\V{dos} может соответствовать компиляторам для \S{DOS}
(например, \S{Borland C 3.1}), а неустановленное значение
архитектуры (пустая строка) может соответствовать компиляторам
для \S{Linux}, которые генерируют статический исполняемый модуль
(например, \S{GCC}). Процедура запуска скомпилированной
программы для этих архитектур существенно отличается, поэтому
для каждой из них должен использоваться отдельный
тестировщик.

Данная конфигурационная переменная соответствует переменной
\hyperlink{F:serve.cfg,S:language,T:arch}{\V{arch}} секции
описания языка. Тестировщик с некоторой архитектурой
предназначен только для программ, скомпилированных под ту же
самую архитектуру. Пустое значение переменной \V{arch} является
значимым, то есть в этом случае тестировщик будет тестировать
только программы, скомпилированные компилятором с пустым
значением переменной
\hyperlink{F:serve.cfg,S:language,T:arch}{\V{arch}}.

\B{Пример.}
{\small
\begin{verbatim}
arch = "dos"
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{no\_redirect}}
\label{descServeCfgTesterNoRedirect}
\hypertarget{F:serve.cfg,S:tester,T:no_redirect}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{no\_redirect} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:tester}{\V{tester}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Значение по умолчанию: & \I{false}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Если данная конфигурационная переменная
установлена в \I{true}, у программы, запускаемой на тестирование
данным тестировщиком, не будут перенаправляться стандартные
потоки вывода и ошибок. Весь вывод тестируемой программы в эти
потоки будет потерян. Если данная переменная не установлена или
установлена в \I{false}, стандартные потоки вывода и ошибок
перенаправляются в файлы и затем включаются в протокол
тестирования и/или проверяются на соответствие правильному
ответу. Стандартный поток ввода в любом случае перенаправляется
из устройства \V{/dev/null}.

Данная переменная предназначена для случая, когда программа
запускается не непосредственно, а через какую-нибудь
вспомогательную программу (например, эмулятор DOS). В этом
случае вывод вспомогательной программы может не представлять
интереса и поэтому может игнорироваться.

\B{Пример.}
{\small
\begin{verbatim}
no_redirect
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{is\_dos}}
\label{descServeCfgTesterIsDos}
\hypertarget{F:serve.cfg,S:tester,T:is_dos}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{is\_dos} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:tester}{\V{tester}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Значение по умолчанию: & \I{false}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Если значение данной конфигурационной переменной
равно \I{true}, программы, тестируемые данным тестировщиком,
работают с текстовыми файлами в формате \S{DOS}. В таких файлах
строки текста завершаются двумя символами \verb|\r|, \verb|\n|.
Если значение данной переменной не установлено или установлено в
\I{false}, тестируемые программы работают с текстовыми файлами в
формате \S{Unix}, в которых строки текста завершаются символом
\verb|\n|. Как правило, формат текстового файла, подаваемого на
вход тестируемой программе, должен соответствовать требуемому.
Например, некоторые стандартные функции языка \S{Borland Pascal}
могут работать некорректно, если программе на вход подаётся
текстовый файл в формате \S{Unix}, и наоборот, не все программы,
написанные для формата \S{Unix}, правильно обрабатывают
дополнительный символ \verb|\r| в конце строки.

В случае одновременной поддержки языков программирования с
текстовыми файлами и в формате \S{DOS}, и в формате \S{Unix},
тесты для каждой задачи должны быть записаны в текстовом формате
\S{Unix}, а для тестировщиков, запускающих программы, требующие
\S{DOS}-формат, должен быть установлен флаг \V{is\_dos}. В этом
случае при копировании тестового файла в рабочий каталог будет
выполнено его перекодирование в формат \S{DOS}. Обратное
перекодирование результатов работы программы из формата \S{DOS}
в формат \S{Unix} не выполняется, поэтому проверяющая программа
должна корректно обрабатывать оба текстовых формата.

\B{Пример.}
{\small
\begin{verbatim}
is_dos
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{key}}
\label{descServeCfgTesterKey}
\hypertarget{F:serve.cfg,S:tester,T:key}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{key} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:tester}{\V{tester}} \\
Используются:          & \S{serve}, \S{run} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Значение по умолчанию: & \V{"{}"} (пустая строка)\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
<<ключ>> для выбора тестировщиков, обслуживаемых программой
\S{run}. Программа \S{run} поддерживает опцию командной строки
\V{-k} с помощью которой можно указать ключ тестировщика. Тогда
из всех тестировщиков, описанных в конфигурационном файле, будут
обслуживаться только те, ключ которых совпадает с ключом,
заданным в командной строке. В этом случае значение по умолчанию
(пустая строка) переменной \V{key} является значимым, и такой
тестировщик будет обслуживаться, только если в командной строке
в качестве параметра опции \V{-k} указана пустая строка. Если
опция \V{-k} не задана, отбор языков по значению переменной
\V{key} не производится, и значение этой переменной может быть
произвольным (в частности, переменная может быть не
установлена).

Значение данной конфигурационной переменной наследуется из
описания абстрактного тестировщика, если конкретный тестировщик
указал имя этого абстрактного тестировщика в переменной
\hyperlink{F:serve.cfg,S:tester,T:super}{\V{super}}, конкретный
тестировщик не определяет переменную \V{key}, а абстрактный ---
определяет.

\B{Пример.}
{\small
\begin{verbatim}
key = "langs_1"
\end{verbatim}
}

\subsubsection{Переменная \V{no\_core\_dump}}
\label{descServeCfgTesterNoCoreDump}
\hypertarget{F:serve.cfg,S:tester,T:no_core_dump}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{no\_core\_dump} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:tester}{\V{tester}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Значение по умолчанию: & \I{false}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.}
Если данная конфигурационная переменная установлена в значение
\I{true}, при запуске тестируемой программы запрещается
генерация дампа памяти (core dump) при аварийном завершении
тестируемой программы.

\newpage
\subsubsection{Переменная \V{kill\_signal}}
\label{descServeCfgTesterKillSignal}
\hypertarget{F:serve.cfg,S:tester,T:kill_signal}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{kill\_signal} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:tester}{\V{tester}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Значение по умолчанию: & \V{term}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
имя сигнала, который будет послан тестируемой программе при
истечении времени её работы, определяемом с помощью
конфигурационной переменной
\hyperlink{F:serve.cfg,S:problem,T:real_time_limit}{\V{real\_time\_limit}}.
Поддерживаются следующие имена сигналов:

\begin{center}
\begin{tabular}{|p{4cm}|p{4cm}|}
\hline
Имя в конфигурационном файле & Системное имя сигнала \\
\hline
\V{kill} & \V{SIGKILL} \\
\V{term} & \V{SIGTERM} \\
\V{int} & \V{SIGINT} \\
\hline
\end{tabular}
\end{center}

Текущая версия системы \S{ejudge} ограничивает время выполнения
программы на одном тесте (параметр
\hyperlink{F:serve.cfg,S:problem,T:time_limit}{\V{time\_limit}})
с помощью установки ограничения процессорного времени программы
с помощью системной функции \V{setrlimit} (см. также команду
интерпретатора \S{bash} \V{ulimit}). Такой подход имеет
следующие особенности:
\begin{enumerate}
\item
По истечении добавленной одной секунды тестируемая программа
всегда снимается с выполнения посылкой ей сигнала \V{SIGKILL}.
\item
Если тестируемая программа не занимает процессор, например,
выполняя системный вызов \V{pause}, её истраченное процессорное
время не увеличивается, поэтому программа может находиться в
таком состоянии сколь угодно долго.
\end{enumerate}

Для борьбы с последней особенностью используется ограничение
астрономического времени работы программы, задаваемое с помощью
конфигурационной переменной
\hyperlink{F:serve.cfg,S:problem,T:real_time_limit}{\V{real\_time\_limit}}.
Данный параметр \V{kill\_signal} влияет на сигнал, посылаемый
тестируемой программе по истечении астрономического времени
работы, но не влияет на сигнал, посылаемый программе по
истечении процессорного времени работы.

\B{Пример.}
{\small
\begin{verbatim}
kill_signal = "kill"
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{max\_stack\_size}}
\label{descServeCfgTesterMaxStackSize}
\hypertarget{F:serve.cfg,S:tester,T:max_stack_size}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{max\_stack\_size} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:tester}{\V{tester}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Значение по умолчанию: & \I{не установлено}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
максимальный размер сегмента стека для тестируемой программы.
Размер задаётся в байтах (так, 8388608 байт --- это 8 Мегабайт).
Если размер стека превышен, программа, как правило, получает
фатальный сигнал \V{SIGSEGV} (Segmentation fault) и снимается с
выполнения. В этом случае тестирование программы завершается с
ошибкой ``Runtime error''.

Использование данной конфигурационной переменной имеет смысл,
если тестируемая программа запускается непосредственно, а не с
помощью эмулятора или интерпретатора, так как в этих случаях
данная конфигурационная переменная будет ограничивать размер
стека эмулятора или интерпретатора.

Если данная конфигурационная переменная не установлена ни в
самом неабстрактном тестировщике, ни в абстрактном тестировщике,
свойства которого он наследует, ограничение размера стека при
запуске программы явно не устанавливается. В этом случае
работает ограничение на размер стека, действительное для
программы \S{run} в момент её запуска. Ограничение на размер
стека можно просмотреть с помощью команды \V{ulimit -s}
командного интерпретатора \S{bash}.

\B{Пример.}
{\small
\begin{verbatim}
max_stack_size = 8388608
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{max\_data\_size}}
\label{descServeCfgTesterMaxDataSize}
\hypertarget{F:serve.cfg,S:tester,T:max_data_size}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{max\_data\_size} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:tester}{\V{tester}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Значение по умолчанию: & \I{не установлено}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
максимальный размер сегмента данных для тестируемой программы.
Размер задаётся в байтах (так, 8388608 байт --- это 8 Мегабайт).
К сожалению, современные библиотеки поддержки языка Си выделяют
динамическую память таким образом, что ограничение на
максимальный размер сегмента данных обходится, поэтому для
ограничения максимального размера данных программы приходится
использовать конфигурационную переменную
\hyperlink{F:serve.cfg,S:tester,T:max_vm_size}{\V{max\_vm\_size}}.
Использование данной конфигурационной переменной
\V{max\_data\_size}, по-видимому, не имеет смысла, и она
сохранена для симметрии с
\hyperlink{F:serve.cfg,S:tester,T:max_vm_size}{\V{max\_stack\_size}}.

Если данная конфигурационная переменная не установлена ни в
самом неабстрактном тестировщике, ни в абстрактном тестировщике,
свойства которого он наследует, ограничение размера стека при
запуске программы явно не устанавливается. В этом случае
работает ограничение на размер стека, действительное для
программы \S{run} в момент её запуска. Ограничение на размер
стека можно просмотреть с помощью команды \V{ulimit -d}
командного интерпретатора \S{bash}.

\B{Пример.}
{\small
\begin{verbatim}
max_data_size = 8388608
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{max\_vm\_size}}
\label{descServeCfgTesterMaxVmSize}
\hypertarget{F:serve.cfg,S:tester,T:max_vm_size}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{max\_vm\_size} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:tester}{\V{tester}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Значение по умолчанию: & \I{не установлено}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
максимальный размер виртуальной памяти процесса, исполняющего
тестируемую программу. В размере виртуальной памяти учитываются
сегмент кода (\V{.text}) самой программы и всех библиотек,
используемых программой, сегмент инициализированных статических
данных самой программы и всех используемых библиотек
(\V{.data}), сегмент нулевых статических данных программы и
библиотек (\V{.bss}), динамически растущий сегмент динамической
памяти (<<кучи>>), динамически растущий сегмент стека. Размер
задаётся в байтах (так, 16777216 байт --- это 16 Мегабайт).

Если данная конфигурационная переменная не установлена ни в
самом неабстрактном тестировщике, ни в абстрактном тестировщике,
свойства которого он наследует, ограничение размера стека при
запуске программы явно не устанавливается. В этом случае
работает ограничение на размер стека, действительное для
программы \S{run} в момент её запуска. Ограничение на размер
стека можно просмотреть с помощью команды \V{ulimit -v}
командного интерпретатора \S{bash}.

\B{Пример.}
{\small
\begin{verbatim}
max_vm_size = 16777216
\end{verbatim}
}

\subsubsection{Переменная \V{clear\_env}}
\label{descServeCfgTesterClearEnv}
\hypertarget{F:serve.cfg,S:tester,T:clear_env}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{clear\_env} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:tester}{\V{tester}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Значение по умолчанию: & \I{false}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Если данная конфигурационная переменная
установлена в \I{true}, при запуске тестируемой программы на
выполнение сбрасываются все переменные окружения, и тестируемая
программа получает пустое окружение. После сброса всех
переменных можно установить новые переменные окружения с помощью
конфигурационной переменной
\hyperlink{F:serve.cfg,S:tester,T:start_env}{\V{start\_env}}.

\B{Пример.}
{\small
\begin{verbatim}
clear_env
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{time\_limit\_adjustment}}
\label{descServeCfgTesterTimeLimitAdjustment}
\hypertarget{F:serve.cfg,S:tester,T:time_limit_adjustment}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{time\_limit\_adjustment} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:tester}{\V{tester}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Значение по умолчанию: & \V{0}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
<<поправку>> к ограничению времени тестирования на одном тесте
для всех программ, тестируемых данным тестировщиком. Данная
переменная задаёт дополнительное время в секундах и должна быть
не меньше нуля. Ограничение времени тестирования на одном тесте
определяется как сумма значения переменной
\hyperlink{F:serve.cfg,S:problem,T:time_limit}{\V{time\_limit}}
описания задачи и значения данной конфигурационной переменной
\V{time\_limit\_adjustment}. Если значение переменной
\hyperlink{F:serve.cfg,S:problem,T:time_limit}{\V{time\_limit}}
не установлено, то и переменная \V{time\_limit\_adjustment} не
используется.

Данная конфигурационная переменная может оказаться полезной,
когда тестируемая программа запускается не непосредственно, а из
под эмулятора. Тогда во времени тестирования необходимо учесть
время старта самого эмулятора. Например, для \S{dosemu} это
время составляет примерно 0.5 сек. Секундная точность поправки
может казаться недостаточной, но, к сожалению, таково
ограничение операционной системы (ограничение на процессорное
время задаётся с секундной точностью).

\B{Пример.}
{\small
\begin{verbatim}
time_limit_adjustment = 1
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{run\_dir}}
\label{descServeCfgTesterRunDir}
\hypertarget{F:serve.cfg,S:tester,T:run_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{run\_dir} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:tester}{\V{tester}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{путь к каталогу}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание}. Данная конфигурационная переменная задаёт путь к
каталогам обмена между программами \S{serve} и \S{run}. Она
используется только программой \S{serve}, и позволяет для
некоторых тестировщиков переопределять путь к каталогу обмена с
программой \S{run}, устанавливаемый глобальной переменной
\hyperlink{F:serve.cfg,T:run_dir}{run\_dir}. Каждая программа
\S{run} может иметь единственный каталог обмена, который она,
однако, может разделять с другими программами \S{run}. Если
одновременно несколько программ \S{run} (например, находящихся
на разных компьютерах в локальной сети) используют один и тот же
каталог обмена, расположенный на сетевом диске, запросы на
тестирование будут распределяться между ними случайно. Но для
того, чтобы часть запросов на тестирование программой \S{serve}
отдавались одному процессу (или группе процессов, использующих
один и тот же каталог обмена), а часть --- другому, может
использоваться данная конфигурационная переменная.

\B{BUG}. Текущая версия системы \S{ejudge} никак не использует
данную конфигурационную переменную.

\B{Пример.}
{\small
\begin{verbatim}
run_dir = /var/ejudge/run/var/compile
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{check\_dir}}
\label{descServeCfgTesterCheckDir}
\hypertarget{F:serve.cfg,S:tester,T:check_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{check\_dir} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:tester}{\V{tester}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{путь к каталогу}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
путь к рабочему каталогу, в котором тестируется решение
участника. В этот каталог копируется исполняемая программа и
входные данные для неё, в нём же создаются выходные файлы
нулевого размера. Решение участника запускается с данным
каталогом установленным в качестве текущего каталога. После
каждого запуска этот каталог полностью очищается. Для того,
чтобы ограничить максимальный размер выходных файлов,
создаваемых программой участника, рекомендуется разместить этот
каталог на файловой системе ограниченного размера, отдельной от
основных файловых систем. Для этого можно использовать,
например, loopback-устройство, указав в качестве флагов
монтирования \V{-o loop}.

Если данная переменная не установлена в описании неабстрактного
тестировщика, но абстрактный тестировщик, указанный в переменной
\hyperlink{F:serve.cfg,S:tester,T:super}{\V{super}},
устанавливает данную переменную, используется значение,
указанное в абстрактном тестировщике, при этом выполняются
\hyperlink{F:serve.cfg,S:format_substitutions}{форматные подстановки}.
Если после этого значение данной переменной всё равно
не определено, используется значение глобальной конфигурационной
переменной \hyperlink{F:serve.cfg,T:run_check_dir}{\V{run\_check\_dir}}.

\B{Пример}. Для создания небольшой файловой системы, монтируемой
с помощью устройства-петли (loopback), можно воспользоваться
следующей последовательностью команд.
\begin{itemize}
\item
Создаём файл требуемого размера (в нашем случае --- 32 Мб).
{\small
\begin{verbatim}
dd if=/dev/zero of=/var/ejudge/image bs=1M count=32
\end{verbatim}
}
\item
Создаём на нём файловую систему.
{\small
\begin{verbatim}
mke2fs -f /var/ejudge/image
\end{verbatim}
}
\item
Создаём каталог монтирования.
{\small
\begin{verbatim}
mkdir /var/ejudge/disk
\end{verbatim}
}
\item
Монтируем новую файловую систему.
{\small
\begin{verbatim}
mount /var/ejudge/image /var/ejudge/disk -o loop
\end{verbatim}
}
\item
Создаём в нём нужный каталог и устанавливаем его права.
{\small
\begin{verbatim}
mkdir /var/ejudge/disk/work
chown user:user /var/ejudge/disk/work
chmod 755 /var/ejudge/disk/work
\end{verbatim}
}
Здесь \V{user} --- пользователь, из-под которого будет
проводиться тестирование решений.
\end{itemize}

После этого в конфигурационном файле турнира \V{serve.cfg} можно
установить глобальную конфигурационную переменную
\hyperlink{F:serve.cfg,T:run_check_dir}{\V{run\_check\_dir}}
следующим образом:
{\small
\begin{verbatim}
run_check_dir = /var/ejudge/disk/work
\end{verbatim}
}

\subsubsection{Переменная \V{errorcode\_file}}
\label{descServeCfgTesterErrorcodeFile}
\hypertarget{F:serve.cfg,S:tester,T:errorcode_file}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{errorcode\_file} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:tester}{\V{tester}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{имя файла}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание}. Данная конфигурационная переменная устанавливает
имя файла, в котором после завершения выполнения тестируемой
программы находится код завершения программы. В этом случае код
завершения процесса программы решения участника игнорируется
программой \S{run}. Эта переменная может оказаться полезной,
когда тестируемая программа участника запускается не
непосредственно, а из-под эмулятора, который не обеспечивает
передачу в вызвавшую эмулятор программу кода завершения
эмулируемой программы. Эмулятор \S{DOS} \S{dosemu} --- это
пример такого эмулятора. Естественно, в случае использования
файла кода завершения решение участника должно запускаться
специальной программой (также работающей под эмулятором),
которая обеспечит помещение кода завершения программы в
требуемый файл.

Если переменная \V{errorcode\_file} установлена, файл с таким
именем будет размещаться в рабочем каталоге тестирования,
задаваемом переменной
\hyperlink{F:serve.cfg,S:tester,T:check_dir}{\V{check\_dir}}.
Значение переменной \V{errorcode\_file} не должно содержать
символа \V{'/'}, то есть должно быть именем файла в текущем каталоге.

\B{Пример.}
{\small
\begin{verbatim}
errorcode_file = error.out
\end{verbatim}
}

\subsubsection{Переменная \V{error\_file}}
\label{descServeCfgTesterErrorFile}
\hypertarget{F:serve.cfg,S:tester,T:error_file}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{error\_file} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:tester}{\V{tester}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{имя файла}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Значение по умолчанию: & \V{error}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание}. Данная конфигурационная переменная устанавливает
имя файла, в который перенаправляется вывод на стандартный поток
ошибок тестируемой программы. После окончания тестирования
содержимое этого файла вставляется в протокол тестирования.
Переменная не используется (то есть перенаправления не
происходит), если конфигурационная переменная
\hyperlink{F:serve.cfg,S:tester,T:no_redirect}{\V{no\_redirect}}
установлена в значение \I{true}. Файл перенаправления потока
ошибок создаётся в рабочем каталоге тестирования, задаваемом
конфигурационной переменной
\hyperlink{F:serve.cfg,S:tester,T:check_dir}{\V{check\_dir}}.
Значение переменной \V{error\_file} не должно содержать
символа \V{'/'}, то есть должно быть именем файла в текущем
каталоге.

\newpage
\subsubsection{Переменная \V{prepare\_cmd}}
\label{descServeCfgTesterPrepareCmd}
\hypertarget{F:serve.cfg,S:tester,T:prepare_cmd}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{prepare\_cmd} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:tester}{\V{tester}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{путь к файлу}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Значение по умолчанию: & \I{не установлено}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
путь к программе, которая подготавливает выполнение тестируемой
программы. В качестве параметра подготавливающей программе
передаётся имя исполняемого тестируемого файла (без полного
пути). Подготавливающая программа запускается в каталоге
временных файлов тестировщика, задаваемом глобальной
конфигурационной переменной
\hyperlink{F:serve.cfg,T:run_work_dir}{\V{run\_work\_dir}}. Её
вывод добавляется в протокол тестирования. Подготавливающая
программа должна завершаться с кодом возврата 0, или в противном
случае тестирование завершится ошибкой ``Check Failed''.
Подготавливающая программа запускается один раз перед
тестированием программы, а не перед каждым запуском программы на
очередном тесте.

Если данная переменная в описании тестировщика не определена, но
абстрактный тестировщик, указанный в переменной \V{super}
определяет эту переменную, используется значение из абстрактного
тестировщика, при этом выполняются
\hyperlink{F:serve.cfg,S:format_substitutions}{форматные подстановки}.
Неопределённое значение переменной допускается, и в этом случае
подготавливающая программа не запускается. Если значение данной
переменной не начинается с \V{'/'}, то есть является
относительным путём, оно добавляется к значению глобальной
конфигурационной переменной
\hyperlink{F:serve.cfg,T:script_dir}{\V{script\_dir}}.

\B{FIXME.} Нужно, чтобы в программу подготовки передавались бы
более вразумительные параметры. Текущий каталог должен
устанавливаться, по-видимому, в каталог тестирования
\hyperlink{F:serve.cfg,S:tester,T:check_dir}{\V{check\_dir}}.

\B{Пример.}
{\small
\begin{verbatim}
prepare_cmd = "set_perms"
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{check\_cmd}}
\label{descServeCfgTesterCheckCmd}
\hypertarget{F:serve.cfg,S:tester,T:check_cmd}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{check\_cmd} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:tester}{\V{tester}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{путь к файлу}\\
Может отсутствовать:   & \I{нет}\\
Наследуется:           & \I{да}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает
путь к проверяющей программе, которая запускается каждый раз
после завершения работы тестируемой программы на очередном тесте
и проверяет правильность ответа тестируемой программы.
Проверяющая программа запускается только если тестируемая
программа уложилась в отведённое на работу над одним тестом
время (см. переменную
\hyperlink{F:serve.cfg,S:problem,T:time_limit}{\V{time\_limit}})
и завершилась успешно, то есть выработав код возврата 0.
Проверяющей программе передаются два или три параметра в
зависимости от того, установлена ли переменная
\hyperlink{F:serve.cfg,S:problem,T:use_corr}{\V{use\_corr}}
описания задачи, то есть используется ли при тестировании
решения заранее заготовленный файл с правильным ответом.
\begin{itemize}
\item
Первый параметр (\V{argv[1]}) проверяющей программы --- путь к
файлу, в котором находятся входные данные текущего теста.
Передаётся путь к файлу, находящемуся в тестовом каталоге
(см. переменную
\hyperlink{F:serve.cfg,S:problem,T:test_dir}{\V{test\_dir}}), а
не к файлу, скопированному в каталог тестирования перед запуском
тестируемой программы. Таким образом, вне зависимости от
значения переменной
\hyperlink{F:serve.cfg,S:tester,T:is_dos}{\V{is\_dos}}
проверяющая программа работает с непреобразованным входным
файлом.
\item
Второй параметр (\V{argv[2]}) проверяющей программы --- путь к
файлу, в котором находится результат работы тестируемой
программы. Преобразования формата файла не выполняется, поэтому
проверяющая программа должна обрабатывать концы строк в и стиле
\S{DOS} (\verb|'\r'|, \verb|'\n'|) для проверки решения \S{DOS}-
или \S{win32}-программ, и в стиле \S{Unix} (\verb|'\n'|) для
проверки решения \S{Linux}-программ.
\item
Если установлена конфигурационная переменная 
\hyperlink{F:serve.cfg,S:problem,T:use_corr}{\V{use\_corr}},
третий параметр (\V{argv[3]}) проверяющей программы --- путь к
файлу, содержащему правильный ответ на текущий тест
(см. переменную
\hyperlink{F:serve.cfg,S:problem,T:corr_dir}{\V{corr\_dir}}).
Если конфигурационная переменная \V{use\_corr} не установлена,
третий параметр в проверяющую программу не передаётся.
\end{itemize}
Проверяющая программа запускается с текущим каталогом,
установленным в рабочий каталог тестирования. Вывод проверяющей
программы на стандартный поток вывода или стандартный поток
ошибок сохраняется и добавляется в файл протокола. Результат
тестирования определяется по коду возврата, выработанному
проверяющей программой.

\begin{center}
\begin{tabular}{|l|p{12cm}|}
\hline
0 & OK --- тестируемая программа выдала верный ответ.\\
4 & ``Presentation error'' \\
5 & ``Wrong answer'' \\
\hline
\end{tabular}
\end{center}

Если проверяющая программа выработала любой другой код
завершения, завершилась из-за прихода сигнала (любого), или
превысила отведённый ей лимит времени (см. переменную
\hyperlink{F:serve.cfg,S:problem,T:checker_real_time_limit}{\V{checker\_real\_time\_limit}}),
тестирование программы участника завершается со статусом
``Check failed''.

Если данная конфигурационная переменная не установлена, но
абстрактный тестировщик, указанный в переменной
\hyperlink{F:serve.cfg,S:tester,T:super}{\V{super}},
устанавливает эту переменную, используется значение переменной
из описания абстрактного тестировщика, при этом выполняются
\hyperlink{F:serve.cfg,S:format_substitutions}{форматные подстановки}.
Если после этого значение данной переменной \V{check\_cmd} всё
ещё не определено, программа \S{run} выдаёт ошибку и отказывается
запускаться. Если значение переменной \V{check\_cmd} не
начинается с символа \V{'/'}, то есть является относительным
путём, оно добавляется к значению глобальной конфигурационной
переменной \hyperlink{F:serve.cfg,T:checker_dir}{\V{checker\_dir}}.

\B{Пример.}
{\small
\begin{verbatim}
check_cmd = "check_a"
\end{verbatim}
}

\subsubsection{Переменная \V{start\_cmd}}
\label{descServeCfgTesterStartCmd}
\hypertarget{F:serve.cfg,S:tester,T:start_cmd}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{start\_cmd} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:tester}{\V{tester}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{путь к файлу}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Значение по умолчанию: & \I{не установлено}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная устанавливает путь к
вспомогательной программе, используемой для запуска тестируемой
программы участника. Эта вспомогательная программа должна выполнить
необходимые подготовительные операции, а затем вызвать тестируемую
программу с помощью системного вызова \V{execv} или \V{execve}. Полный
путь к тестируемой программе передаётся первым аргументом командной
строки, а дополнительные аргументы для тестируемой программы ---
последующими параметрами. Простейший способ вызова тестируемой
программы из вспомогательной программы заключается в вызове функции
\V{execv} со следующими параметрами.

{\small
\begin{lstlisting}[print]
  execv(argv[1], argv + 1);
\end{lstlisting}
}

Идентификатор процесса тестируемой программы должен быть равен
идентификатору процесса вспомогательной программы (то есть не
допускается использование \V{fork}, \V{system}, \V{popen} и т. д.),
так как в противном случае не гарантируется корректное завершение
тестируемой программы по истечению лимита времени.

Если данная конфигурационная переменная не установлена, но
абстрактный тестировщик, указанный в переменной
\hyperlink{F:serve.cfg,S:tester,T:super}{\V{super}},
устанавливает эту переменную, используется значение переменной
из описания абстрактного тестировщика, при этом выполняются
\hyperlink{F:serve.cfg,S:format_substitutions}{форматные подстановки}.
Если значение переменной \V{start\_cmd} не начинается с символа
\V{'/'}, то есть является относительным путём, оно добавляется к
значению глобальной конфигурационной переменной
\hyperlink{F:serve.cfg,T:script_dir}{\V{script\_dir}}.
Если после всех указанных выше действий значение переменной
\V{start\_cmd} не определено, никакая вспомогательная программа
запускаться не будет, а программа \S{run} будет запускать тестируемую
программу непосредственно.

\B{Пример.}
{\small
\begin{verbatim}
start_cmd = "capexec"
\end{verbatim}
}

\newpage
\subsubsection{Переменная \V{start\_env}}
\label{descServeCfgTesterStartEnv}
\hypertarget{F:serve.cfg,S:tester,T:start_env}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{start\_env} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:tester}{\V{tester}} \\
Используются:          & \S{run} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Значение по умолчанию: & \I{не установлено}\\
Может повторяться:     & \I{да}\\
\end{tabular}

\B{Описание.} Данная конфигурационная переменная позволяет задавать
переменные окружения, передаваемые в тестируемую программу. Каждая
спецификация переменной окружения имеет вид
\begin{verbatim}
NAME=VALUE
\end{verbatim}
С помощью конфигурационной переменной \V{start\_env} можно
устанавливать по одной переменной окружения за раз. Чтобы установить
несколько переменных окружения, конфигурационная переменная
\V{start\_env} должна использоваться требуемое число раз.

Если и абстрактный тестировщик, указанный в переменной
\hyperlink{F:serve.cfg,S:tester,T:super}{\V{super}} для данного
тестировщика, и сам тестировщик устанавливают переменные окружения,
спецификации переменных окружения объединяются так, что переменные
окружения из абстрактного тестировщика идут первыми, а за ними ---
переменные окружения из неабстрактного тестировщика.

\B{Пример.}
{\small
\begin{verbatim}
clear_env
start_env = "LD_BIND_NOW=1"
start_env = "LD_PRELOAD=/usr/lib/ejudge/libdropcaps.so"
\end{verbatim}
}

\subsubsection{Переменная \V{priority\_adjustment}}
\label{descServeCfgTesterPriorityAdjustment}
\hypertarget{F:serve.cfg,S:tester,T:priority_adjustment}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя переменной:        & \K{priority\_adjustment} \\
Содержится в:          & \strut%
  \hyperlink{F:serve.cfg,S:tester}{\V{tester}} \\
Используются:          & \S{serve} \\
Тип содержимого:       & \I{integer}\\
Может отсутствовать:   & \I{да}\\
Наследуется:           & \I{да}\\
Значение по умолчанию: & \V{0}\\
Может повторяться:     & \I{нет}\\
Версия \S{ejudge}:     & начиная с 2.1.29\\
\end{tabular}

\B{Описание.}
Данная конфигурационная переменная позволяет задать поправку к
приоритету тестирования для данного тестировщика. Значение
поправки будет прибавлено к базовому значению приоритета
тестирования (см. описание глобальной конфигурационной
переменной
\hyperlink{F:serve.cfg,T:priority_adjustment}{\V{priority\_adjustment}})
при вычислении приоритета тестирования посылки. Положительное
значение поправки уменьшает приоритет, а отрицательное ---
увеличивает.

\B{Пример.}
{\small
\begin{verbatim}
priority_adjustment = 2
\end{verbatim}
}

\clearpage

% Local variables:
%  compile-command: "make"
% End:

