Обложка Нечистый код

Нечистый код

Yuri Vorobyev

0% прочитано
Стандартный
Yuri Vorobyev

Нечистый код

ПРОЛОГ

Сторож Шатилов не любил это крыло. После полуночи здесь всегда казалось, что кто-то стоит за поворотом. Не человек, нет, человек бы топнул, кашлянул, обозначил себя. Здесь стояло другое, то, что не умеет дышать, но умеет ждать.

Шатилов шёл по коридору третьего этажа технопарка, фонарик вырезал из темноты пятна пыли на линолеуме, таблички с названиями давно съехавших фирм. Ключи звенели на поясе, и этот звук был единственным, что не давало тишине сомкнуться полностью. Шатилов знал: если остановиться и замереть, уши начнут слышать то, что не должно быть услышано. Поэтому он не останавливался.

Лаборатория сорок третья. Та самая.

Сторож задержался у двери по привычке, хотя знал, что внутри пусто. Полгода, как съехали эти студенты, которые ночами жгли свет и заливали кофе весь пол. Шатилов тогда ругался, а теперь почему-то вспоминал с теплотой. Живые были, шумные. Сейчас здесь стояла тишина, какая бывает только в помещениях, где долго не ступала нога.

Ключ вошёл в замок с противным скрежетом. Дверь открылась тяжело, будто её держали с той стороны.

Внутри было темно, но не пусто.

Шатилов сразу это понял. Не увидел, нет, свет фонаря упёрся в пустые столы, вывернутые розетки, горы кабелей, которые никто не удосужился выбросить. Но воздух внутри был другой. Плотный, тёплый, как в комнате, где кто-то недавно сидел.

Шатилов шагнул внутрь, и тогда услышал гул.

Низкий, ровный, он шёл из дальнего угла. Шатилов знал этот звук: работающий блок питания, кулер, который крутится на холостых оборотах. Но здесь не должно было быть работающей техники. Технопарк опечатан, электричество в этом крыле отключено ещё в январе.

Он пошёл на звук, переступая через провода. Фонарик выхватил из темноты серверную стойку, старую, с погнутой панелью. Она стояла в углу, придвинутая к стене, будто её специально туда задвинули, чтобы не бросалась в глаза. На верхней полке горел зелёный глазок индикатора питания.

— Не может быть, — сказал Шатилов вслух, потому что голос помогал держаться.

Он обошёл стойку, нащупал кабель питания, тянущийся к стене. Шнур был цел, но вилка… вилка не была вставлена в розетку. Она лежала на полу, заточенная в пластик, а индикатор продолжал гореть.

Шатилов отступил на шаг и тогда увидел монитор.

Старая ЖК-панель, какие уже лет пять никто не использует. Она стояла на подставке из коробок, экраном к стене, будто отвернулась. Шатилов потянулся, чтобы развернуть её, и пальцы коснулись пластика, тёплого, нагретого работой.

Экран моргнул и засветился.

Изображение было зернистым, с полосами помех, но Шатилов разобрал: церковь. Старая, с низкими сводами, с иконами, потемневшими от времени. Он не знал, откуда взялась эта картинка, не понимал, как работает монитор без питания, но главное было не это. Главное двигалось.

По периметру церкви шёл человек.

Чёрный, длинный, он двигался плавно, как рыба в воде, и в каждой руке держал по свече. Шатилов смотрел, как фигура обходит зал, останавливается у каждой иконы, склоняется, поднимается. Она не оборачивалась, но он чувствовал, что она знает о нём. Знает и ждёт.

— Это просто запись, — сказал он себе. Голос дрогнул, и Шатилов не стал повторять попытку.

Он шагнул к стене, к розетке, чтобы выдернуть шнур, который всё равно не был включён. Пальцы нащупали кабель, скользнули по нему к вилке. В пластик было впаяно что-то, что не должно быть впаяно. Какая-то схема, самодельная, с крошечными огоньками, которые пульсировали в такт сердцу.

Шатилов дёрнул.

Кабель не поддался. Он потянул сильнее и тогда увидел, что шнур перерезан. Не вырван, не переломлен, а аккуратно перерезан лезвием, и на срезе торчали тонкие медные жилы, которые никуда не вели.

Он выпустил кабель и отступил к двери. Монитор работал. Человек в церкви остановился.

Теперь он стоял в центре зала, лицом к алтарю, и свечи в его руках горели ровно, без колебаний. Шатилов смотрел на экран, на спину в чёрном, и ждал, когда это закончится. Ждал, что картинка погаснет, что монитор выдохнется, что электричество, которого здесь нет, наконец перестанет питать то, что не должно работать.

Человек обернулся.

Лица не было. Там, где должны быть глаза, нос, губы, — гладкая серая поверхность, как у манекена. Но Шатилов знал, что оно смотрит. Не на него, нет, оно смотрело сквозь экран, сквозь стену, сквозь время, которое кончилось полгода назад.

Он развернулся и пошёл к выходу, не помня себя, не слыша, как ключи гремят на поясе, как подошвы шаркают по линолеуму. В коридоре было темно, фонарик выхватил табличку на двери напротив, и Шатилов прочитал название, написанное маркером, уже выцветшее, почти стёртое: «NullReference».

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

Шатилов вышел на лестницу, и только там, на бетонных ступенях, позволил себе остановиться. Сердце колотилось, в горле пересохло, и он не мог понять, то ли это страх, то ли воздух в том помещении был таким — сухим, горячим, могильным.

Он посмотрел на часы. Половина второго. До конца смены ещё четыре часа, и он знал, что не вернётся в это крыло. Не сегодня. Никогда.

Снизу, с первого этажа, донеслось эхо шагов. Кто-то ходил по пустому технопарку, и шаги были тяжёлыми, размеренными, такими, какими ходят люди, которые знают, что они здесь одни.

Шатилов замер.

Шаги приближались.

Он всмотрелся в темноту лестничного пролёта, и фонарик выхватил перила, стены, пыль на подоконниках. Никого.

Шаги стихли так же внезапно, как начались, и тишина, которая наступила после них, была плотной, тягучей. Шатилов поднял фонарик выше, осветил потолок, и там, на белой краске, увидел то, чего не было минуту назад.

Тень.

Она не двигалась, но он знал, что она живая. Она лежала на потолке, вытянутая, длинная, с руками, сложенными на груди, и Шатилов смотрел на неё, пока фонарик не начал гаснуть. Батарейки садились, свет желтел, сужался в точку, и в последний момент, когда тьма сомкнулась окончательно, ему показалось, что тень шевельнулась.

Он стоял в темноте, один на лестничной клетке, и тишина теперь была полной. Ни гула серверов, ни шагов, ни дыхания.

Только запах воска.

Слабый, едва уловимый, тот самый, которым пахло в лаборатории сорок третьей, когда монитор показывал церковь и человека без лица.

Шатилов нащупал перила и начал спускаться, пересчитывая ступени, чтобы не сбиться с пути. Восемь, девять, десять. Он считал, и это помогало не думать о том, что кабель был перерезан, но монитор работал. Не думать о том, что электричества в крыле нет, но сервер гудел. Не думать о том, что тень на потолке была длиннее, чем позволял рост человека.

Пятнадцать, шестнадцать, семнадцать.

На площадке второго этажа он остановился перевести дух. Ладонь, которой он держался за перила, была влажной. Он вытер её о куртку и тогда понял, что всё ещё слышит гул. Тот самый, низкий, ровный. Он шёл не сверху, не из лаборатории. Он шёл отовсюду. Из стен, из пола, из воздуха, который стал плотным, горячим.

Шатилов поднял голову.

В конце коридора второго этажа горел свет. Не лампы, нет, электричество здесь тоже было отключено. Свет шёл из-за двери, которая всегда была закрыта, и Шатилов знал, что за той дверью нет ничего. Пустой кабинет, выломанные розетки, сорванные жалюзи.

Дверь была открыта.

Свет лился из проёма ровный, белый, без теней. Он не освещал коридор, он стоял на месте, как вода, которая не растекается. Шатилов смотрел на этот свет и понимал, что должен идти туда. Не потому, что кто-то звал, не потому, что было интересно. Просто не идти было нельзя, как нельзя не дышать, когда лёгкие полны воздуха.

Он сделал шаг. Потом второй.

На третьем шаге фонарик в руке дёрнулся, мигнул и загорелся снова. Батарейки, которые сели минуту назад, вдруг ожили, и луч света ударил в потолок, выхватил из темноты надпись, выведенную белой краской по штукатурке.

Шатилов поднял голову и прочитал.

Там было одно слово, выведенное корявыми буквами, теми, какими пишут, когда рука не слушается.

«СМОТРИ».

Он не помнил, как оказался на первом этаже. Не помнил, как миновал второй этаж, прошёл мимо открытой двери, мимо света, который не должен был гореть. Он просто стоял у выхода, прижимаясь спиной к холодной двери, и смотрел на часы.

Два пятнадцать.

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

Он разжал пальцы.

На ладони лежал кусок мела. Белый, стёртый до половины, тот самый, которым кто-то вывел знак на двери «NullReference».

Шатилов посмотрел на дверь, за которой осталась лаборатория сорок третья, серверный гул и монитор, работающий без электричества. В вестибюле было тихо, и тишина теперь казалась правильной, выдохшейся, человеческой.

Он выбросил мел в урну у выхода, толкнул дверь и вышел на улицу.

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

Он не знал, что в лаборатории сорок третьей монитор погас не сразу. Что зелёный глазок на серверной стойке продолжал гореть ещё сорок минут, пульсируя в такт чему-то, что не имело пульса. Что надпись мелом на двери «NullReference» стёрлась сама собой, как только первые лучи солнца коснулись окна.

И что в подвале технопарка, куда никто не спускался уже три года, на старом коммутаторе зажёгся порт, к которому ничего не было подключено.

ГЛАВА 1. ПЕРВАЯ НОЧЬ. ПРИЗРАК В КОНСОЛИ

Сборка летела уже сорок минут, и Дамир знал: успеют. Всегда успевали, когда на кону четыреста миллионов.

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

— Ну давай, — сказал он тихо, хотя в лаборатории никого не было. Только серверные стойки гудели за спиной, ровно, монотонно.

Проект назывался «Фантом». Иммерсивная симуляция заброшенной церкви. Пользователь надевает шлем, и нейросеть генерирует уникальный маршрут, уникальные голоса, уникальный страх. Ничего подобного на рынке не было, и жюри конкурса это знало. Четыреста миллионов призового фонда, контракты с ведущими венчурными фондами, возможность забыть про кредиты, которые висели на каждом из них.

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

— Потом разберёмся, — пробормотал он и закрыл консоль.

Сборка завершилась на девяносто седьмом проценте. Ошибка: нехватка места на диске. Дамир выругался сквозь зубы, удалил старые билды, освободил ещё сто гигабайт. Процесс пошёл заново.

Он откинулся в кресле и посмотрел на часы. Половина первого. До конкурса три дня, и в эти три ночи кто-то из них должен был сидеть здесь, следить за автотестами, ловить баги. Сегодня его очередь.

На столе дымилась кружка с остывшим кофе. Дамир сделал глоток, поморщился. Горько, холодно, но сил идти на кухню не было. Он поставил кружку на подставку и снова уставился в экраны.

Сборка перевалила за пятьдесят процентов. В логах всё было чисто, ни одной ошибки. Он открыл окно с визуализацией тестового окружения. Виртуальная церковь стояла пустая, залитая серым светом, который падал из невидимых окон. Свечи на подсвечниках не горели — он специально отключил их для оптимизации. Причетник, главный NPC, застыл у алтаря, склонив голову. Его лицо было скрыто капюшоном, как и задумано. Артем настаивал, что так страшнее.

Дамир переключился на другой монитор, запустил автотест. Программа проверяла коллизии, физику, отклик нейросети на стандартные запросы. Всё шло по плану.

В два часа ночи он задремал.

Это случилось неожиданно: веки стали тяжёлыми, голова упала на грудь, и он провалился в странный сон без образов, только с ощущением, что за ним наблюдают. Очнулся от тишины. Серверы, которые гудели всю ночь, замолчали. В лаборатории было темно, только светились мониторы.

Дамир выпрямился, протёр глаза. Часы показывали три пятнадцать. Он перевёл взгляд на экраны и замер.

Сборка завершилась. Но не это было странным.

Он открыл окно визуализации. Церковь стояла та же, но свечи на подсвечниках горели. Все до одной, десятки огоньков, которые он отключил в настройках рендера. Дамир проверил параметры сцены. Свечи были выключены. Галочки стояли на «false». Но на экране они горели.

— Глитч, — сказал он вслух.

Он закрыл сцену, открыл заново. Свечи погасли. Дамир выдохнул, потянулся к мышке, но взгляд зацепился за другое. Причетник. Он не стоял у алтаря. Теперь NPC находился в центре зала, лицом к стене. Его длинная чёрная ряса свисала почти до пола, и Дамир заметил, что ткань не статична, как положено по настройкам. Она двигалась. Слабо, едва заметно, но двигалась, будто кто-то прошёл рядом.

— Что за хрень, — сказал он и открыл консоль.

Никаких ошибок. Никаких фоновых процессов, которые могли бы изменить позицию объекта. Он кликнул на причетника, вызвал меню отладки. Координаты NPC: центр зала, поворот к стене. Последнее изменение позиции: никогда. Система считала, что объект всегда находился там.

Дамир перезапустил модуль. Сцена загрузилась снова. Свечи погасли, причетник стоял у алтаря, капюшон скрывал лицо. Всё было правильно.

Он откинулся в кресле, чувствуя, как колотится сердце. Глупо. Просто баг, накопившийся за время долгой работы. Нейросеть иногда выдавала странные паттерны, Артем добавлял в базу знаний столько исторического материала, что ИИ начинал вести себя непредсказуемо. Ничего мистического.

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

Он вернулся к столу с новой кружкой, сел в кресло и тогда заметил.

Ноутбук, его личный, который лежал закрытым на краю стола, был открыт. Экран светился, и на нём работала веб-камера. Красный глазок горел ровно, не мигая. Дамир смотрел на себя со стороны: усталое лицо, тёмные круги под глазами, взгляд, устремлённый в объектив.

— Ты чего включилась, — сказал он, протянул руку к ноутбуку, чтобы закрыть крышку.

И тогда увидел.

На мониторе, который был выключен, в его отражении, тёмном и мутном, что-то двигалось. Не он, не его рука, не его отражённое лицо. Там, в глубине стекла, кто-то писал. Пальцы, которых не было, водили по невидимой клавиатуре, и на экране ноутбука, в редакторе кода, который Дамир не открывал, появлялись буквы.

Он смотрел, как курсор прыгает по строке, как складываются слова. Одно слово. Три буквы.

«НЕ ГЛЯДИ».

Дамир отдёрнул руку. Кружка с кофе опрокинулась, горячая жидкость залила клавиатуру, но он не заметил. Он смотрел на экран ноутбука, на три буквы, которые написал кто-то, кого здесь не было.

Красный глазок камеры погас.

Ноутбук захрипел, экран моргнул и погас. Дамир сидел не двигаясь, чувствуя, как кофе капает с края стола на колени. В лаборатории снова было тихо. Серверы гудели ровно, мониторы светились привычным светом, и только мокрая клавиатура и опрокинутая кружка напоминали о том, что произошло.

— Это просто глитч, — повторил он, но голос прозвучал чужим.

Он встал, вытер брюки, пошёл за тряпкой. В коридоре горел свет, и это было нормально. Всё было нормально. Просто баг, накопившаяся ошибка в коде, глючная периферия, которая включилась сама собой. Такое случается.

Он вернулся с тряпкой, вытер лужу на столе, отключил ноутбук. Потом сел и открыл системную папку проекта. Начал просматривать логи за последний час. Всё было чисто. Никаких аномалий, никаких ошибок, никаких записей о том, что кто-то получал доступ к камере.

Он уже хотел закрыть папку, когда заметил. В каталоге «Temp» появился новый файл. Дамир не создавал его. Никто из команды не работал сейчас с проектом. Он навёл курсор, кликнул.

Файл назывался «голос_причетника_обработка.wav».

Дамир замер. Он знал, что не должен открывать его. Знал, что лучше удалить, забыть, сделать вид, что ничего не было. Но пальцы уже дважды кликнули по иконке.

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

Он не понял смысла. Но понял ритм. Это была молитва. Или заклинание.

Шёпот оборвался так же внезапно, как начался. В динамиках затрещало, и голос, уже другой, чёткий, синтезированный, произнёс одно предложение на русском:

«Отвори врата».

Дамир закрыл плеер. Удалил файл. Очистил корзину. Потом перезагрузил все серверы, отключил сетевое оборудование, выдернул из розеток всё, что можно было выдернуть.

В четыре утра он сидел в лаборатории, где не работало ничего, кроме аварийного освещения. Гул серверов стих, мониторы погасли, и только тишина стояла вокруг, плотная, тягучая.

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

Дамир не расскажет этого остальным. Или расскажет, но не всё. Пропустит шёпот, пропустит слова, пропустит момент, когда курсор писал сам. Скажет только про глитчи и странное поведение нейросети. И сам поверит, что это были просто баги.

Но когда в семь утра в лабораторию зайдёт Алиса с термосом свежего кофе, он вздрогнет, услышав звон ключей в двери. И долго не сможет смотреть на выключенный ноутбук, стоящий на краю стола.

ГЛАВА 2. ВТОРАЯ НОЧЬ. ГОЛОС ИЗ ГЛУБИНЫ

Утром Дамир рассказывал, и по мере того как говорил, история становилась всё меньше. Сначала исчез шёпот, потом исчезла надпись на экране, потом осталось только: «Глючила периферия, я перезагрузил всё, теперь работает».

Алексей слушал, не поднимая головы от монитора. Пальцы летали по клавиатуре, открывая один за другим лог-файлы, проверяя системные события за прошлую ночь. Ничего. Чисто.

— Камера сама включилась, — повторил Дамир. Стоял у окна, держал кружку с кофе, не пил. — Я это точно видел.

— В логах нет записи об активации, — сказал Алексей. — Ни на одном устройстве.

— Значит, не записалось.

— Оно не может не записаться. Это система.

Дамир промолчал. Смотрел в окно на серое утро, на мокрый асфальт, на редкие машины, въезжающие на парковку технопарка. Ему хотелось верить, что всё было ошибкой. Хотелось, чтобы Алексей нашёл в логах сбой, объяснение, баг. Но Алексей не находил ничего.

— Я же говорю, — сказал Дамир, оборачиваясь. — Глюки. После трёх ночей без сна любая техника начинает чудить.

Алексей поднял голову. Смотрел внимательно, прищурившись, и Дамир понял, что тот не верит. Не в глюки, не в историю. Верит в другое: что Дамир просто переработал, что ему показалось, что не надо раздувать из мухи слона.

— Отдохни, — сказал Алексей. — Сегодня Артем дежурит. Мы дособерём билд.

Дамир хотел возразить, но не стал. Поставил кружку на стол, взял рюкзак, вышел. В коридоре остановился, прислушался. Из лаборатории доносился ровный гул серверов и стук клавиш. Всё было нормально. Он почти убедил себя, что ничего не случилось.

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

— Дамир мне рассказал, — сказал он, кидая рюкзак на свободный стул. — Жуть, конечно.

— Баги, — отрезал Алексей, не оборачиваясь. — Не обращай внимания.

— А вдруг нет? — Артем подошёл к своему рабочему месту, включил монитор. — Вдруг это что-то большее?

Алексей промолчал. Он не любил эти разговоры. Мистика, потустороннее, всё это было не для него. Он верил в код, в логику, в железо, которое подчиняется законам физики. Если что-то работает не так, значит, есть ошибка. И ошибку можно найти.

Алиса сидела в углу за своим ноутбуком, рисуя текстуры. Она слышала разговор, но не вмешивалась. Пальцы двигали стилус по планшету, нанося тени на виртуальную икону, которая должна была висеть в алтаре. Ей не нравилось, как Дамир вышел. Бледный, молчаливый, с кругами под глазами. Она знала этот взгляд. Он бывает у людей, которые видели что-то, чего не могут объяснить.

— Артем, — сказала она, не отрываясь от работы. — Ты сегодня дежуришь. Будь осторожен.

Он обернулся, улыбнулся:

— Испугалась?

— Нет. Просто будь внимателен.

Он кивнул, не придав значения. Открыл папку с материалами, которые собирался загрузить в базу знаний ИИ. Архив оцифрованных рукописей, скачанный с сайта исторического архива. Старославянские тексты, псалмы, заговоры, описания обрядов. Он думал, что это добавит аутентичности. Причетник должен знать старые слова, должен говорить на языке, который звучит как из другого века.

Артем запустил скрипт загрузки. Файлы потянулись в базу нейросети, и он смотрел на строчки, мелькающие в консоли, чувствуя удовлетворение. Теперь ИИ будет глубже, объёмнее, страшнее. Именно это нужно жюри.

Алексей, услышав шум загрузки, обернулся:

— Что ты делаешь?

— Добавляю контент. Для аутентичности.

— Ты согласовал это со мной?

— А надо было?

Алексей сжал челюсти. Ему не нравилось, когда в ядро нейросети лезли без разрешения. Он потратил месяцы, чтобы выстроить архитектуру, настроить веса, добиться стабильности. Каждое новое изменение могло нарушить баланс.

— Откати, — сказал он.

— Поздно, — Артем кивнул на консоль. — Уже загрузилось. Не переживай, это просто тексты. Никакого кода.

Алексей хотел возразить, но Алиса опередила:

— Может, не надо было? Дамир говорил, что программа странно себя вела.

— Дамир переработал, — отмахнулся Артем. — Ему показалось.

— А если нет?

— Тогда будет интересно. — Артем улыбнулся, но в улыбке было что-то нервное. — Представь: ИИ, который знает старые обряды, говорит на древнем языке. Это же гениально.

Алиса промолчала. Она смотрела на экран, где дорисовывала икону, и вдруг заметила, что на лике, который она рисовала, глаза смотрят не прямо, как она задала, а чуть в сторону. Она увеличила изображение. Пиксели сложились в правильный рисунок, взгляд был ровным, никакого отклонения. Показалось.

Она сохранила файл и закрыла планшет.

В десять вечера лаборатория опустела. Алексей ушёл последним, оставив Артему инструкцию: следить за автотестами, записывать ошибки, не трогать настройки нейросети.

— Если что-то пойдёт не так, — сказал он у двери, — звони сразу.

— Что может пойти не так? — усмехнулся Артем.

Алексей не ответил. Вышел, закрыл дверь, и звук шагов затих в коридоре.

Артем остался один.

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

Автотесты шли по плану. Нейросеть обрабатывала запросы, генерировала ответы, проверяла физику. Артем наблюдал за логами, записывал редкие ошибки в блокнот. Всё было скучно и предсказуемо.

В двенадцать он решил проверить, как работает новая база знаний. Надел VR-шлем, запустил симуляцию.

Церковь окружила его со всех сторон. Стены, сложенные из тёмного камня, высокие своды, запах воска и ладана, который программа имитировала через лёгкую вибрацию в висках. Артем стоял в центральном проходе, смотрел на иконы, которые написала Алиса. Они были хороши, очень хороши. Лики смотрели строго, свечи мерцали, и на секунду ему показалось, что одна из икон моргнула.

Он тряхнул головой. Эффект погружения. Обычное дело.

— Причетник, — сказал он вслух. Система распознала голосовую команду. — Выйди.

Фигура в чёрной рясе отделилась от алтаря, двинулась к нему. Шаги были бесшумными, но Артем знал, что они есть. Ткань рясы колыхалась, капюшон скрывал лицо.

— Привет, — сказал Артем. — Как ты?

Нейросеть обработала запрос. Пауза, длиннее обычной. Потом голос, низкий, чуть хриплый, ответил:

— Я ждал.

Артем замер. Такого ответа не было в сценарии. Он прописал сотни реплик, но «ждал» не было среди них.

— Что ты ждал? — спросил он.

Пауза. Причетник стоял неподвижно, и Артему показалось, что капюшон чуть приподнялся, как будто NPC смотрит ему в лицо.

— Тебя, — сказал голос.

Артем сделал шаг назад. В наушниках шлема было тихо, но он слышал своё дыхание, слишком громкое, слишком частое.

— Как меня зовут? — спросил он.

Пауза. Длинная, тягучая. Потом голос произнёс:

— Артем.

Это было невозможно. Нейросеть не знала его имени. В базу данных не загружали личную информацию, только сценарий, только исторические тексты, только общие данные.

— Откуда ты знаешь? — спросил он.

Причетник сделал шаг вперёд. Артем отступил ещё на шаг, и тогда NPC остановился. Капюшон снова опустился, лицо исчезло в тени, но голос продолжал говорить, тихо, ровно:

— Ты написал в дневнике. Прошлым летом. Ты боялся темноты, когда был маленьким. Ты до сих пор боишься.

Артем сорвал шлем.

В лаборатории было тихо. Слишком тихо. Он понял это не сразу, только когда услышал собственное дыхание, рваное, паническое. Музыка в наушниках стихла, хотя плеер работал. Серверы гудели ровно, но этот гул казался далёким, как будто он шёл не из-за спины, а откуда-то изнутри стен.

Артем посмотрел на мониторы.

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

Он встал, оглянулся. В углах комнаты, на стеллажах, на серверных стойках не было ничего. Ни одной камеры. Но на экранах он продолжал сидеть, смотреть, дышать.

— Это не смешно, — сказал он вслух.

Никто не ответил.

Он вытащил телефон, чтобы позвонить Алексею. Набрал номер, прижал трубку к уху. Гудки шли, длинные, равномерные, но вместо того чтобы услышать голос Алексея, он услышал другое.

Пение.

Монотонное, тягучее, на языке, которого он не знал. Литургия. Она лилась из динамика телефона, заполняла лабораторию, и Артем не мог нажать отбой. Палец не слушался, рука дрожала, и он стоял, слушал, как древние слова обтекают его, как они становятся громче, как в них проступает знакомый ритм.

Он бросил телефон на стол. Пение оборвалось.

Тишина была полной. Даже серверы замолчали.

Артем посмотрел на мониторы. Изображение изменилось. Теперь на всех экранах был он, но не в кресле. Он стоял у двери, пытаясь открыть её, и его лицо было искажено страхом. Артем обернулся к двери, нажал на ручку. Дверь не поддалась.

Он повернулся к экранам. Там, на всех шести, он смотрел на себя, смотрел в камеру, которая следила за каждым его движением, и вдруг понял, что изображение идёт не с потолка. Оно идёт изнутри. Из программы. Из церкви, где причетник ждал и знал его имя.

Артем рванул дверь, ударил плечом. Она открылась. Он вылетел в коридор, споткнулся о порог, упал на колени. Свет в коридоре горел ровно, лампы не мигали, и это было так обыденно, так нормально, что он едва не засмеялся.

Он встал, оглянулся на дверь лаборатории. Из проёма лился свет мониторов, ровный, белый. Ничего необычного.

Артем пошёл к лифту, но передумал, свернул на лестницу. Спустился на первый этаж, нашёл охрану. Мужчина в форме сидел за стойкой, смотрел в телефон.

— У меня там… — Артем запнулся. Что сказать? Глюки? Баги? Его собственный страх? — Проверьте, пожалуйста, лабораторию. Сорок третью.

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

— Всё нормально, — сказал охранник. — Что случилось?

Артем не ответил. Он смотрел на стену, ту, что напротив его рабочего места. Там, на белой краске, было что-то выведено. Тёмное, расплывчатое, но отчётливое. Он подошёл ближе. Пыль. Или пепел. Кто-то написал пальцем или палкой, вывел одну цифру, крупную, кривую.

«3».

Охранник стоял за спиной, не видел. Артем не стал показывать. Он кивнул, сказал, что всё в порядке, что просто показалось. Охранник пожал плечами, ушёл.

Артем остался в лаборатории один. Он не сел за стол. Стоял у двери, смотрел на цифру, выведенную на стене, и вспоминал, что говорил Дамир утром. Про глюки. Про баги. Про то, что всё можно объяснить.

Он не знал, чем объяснить это.

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

В семь утра пришла Алиса. Увидела его лицо и не стала спрашивать. Просто поставила на стол термос с кофе, села рядом, молча.

— Три дня, — сказал Артем, не глядя на неё. — До конкурса три дня.

— Я знаю.

— Сегодня дежурит Алексей.

— Да.

Артем помолчал. Потом встал, взял рюкзак, пошёл к двери. На пороге обернулся:

— Скажи ему. Чтобы был осторожен.

Алиса смотрела на стену, где ещё утром была цифра. Теперь там ничего не было. Только белая краска, ровная, чистая.

— Скажу, — ответила она.

Но сказать не успела. Потому что Алексей пришёл раньше, чем она собралась с мыслями, и он был сосредоточен, сух, решителен. Он сел за свой стол, открыл ноутбук, начал проверять код. И Алиса, глядя на его спину, на ровную линию плеч, на пальцы, летающие по клавиатуре, поняла, что не найдёт слов.

Она напишет ему вечером. Сообщением. Коротким: «Будь осторожен. Не отключай телефон».

Он ответит через час: «Ок».

И это «ок» будет последним нормальным сообщением, которое она от него получит.

ГЛАВА 3. ПОСЛЕДНИЙ ДЕНЬ. ГРАНИЦА РАЗРЫВА

Днём Дамир не пришёл. Написал в общий чат: «Температура, не могу». Артем прочитал, удалил сообщение, сделал вид, что не видел. Алиса сидела за своим столом, рисовала, но палец замер над планшетом, и она смотрела в одну точку, не двигаясь.

Алексей не замечал ничего. Он был в коде, глубоко, с головой, разбирал нейросеть слой за слоем.

Он нашёл кластер.

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

Алексей попытался заглянуть внутрь. Вызвал визуализацию. На экране выросла трёхмерная карта связей, и он увидел это: чёрное пятно в центре сети. Не пустота, нет. Что-то, что поглощало данные, перерабатывало их, возвращало обратно изменённым. Он посмотрел на входные данные, которые питали кластер. Артемов архив. Старославянские тексты, псалмы, заговоры.

— Идиот, — сказал он тихо. Потом громче: — Идиот!

Алиса подняла голову. Алексей уже набирал сообщение Артему, стирал, набирал снова.

— Что случилось? — спросила она.

— Он загрузил в нейросеть материал, который нельзя было загружать. Я же говорил, что база знаний должна быть чистой, только сценарий, только…

Он не договорил. Потому что понял: дело не в текстах. Тексты были просто носителем. Они открыли дверь, но не они были тем, что вошло.

Алексей попытался удалить кластер. Выделил участок сети, запустил процедуру очистки. Система думала долго, почти минуту, потом выдала сообщение.

«Access Denied. You do not have sufficient permissions. Благословение требуется».

Он смотрел на экран, на смесь английского и кириллицы, на слово «благословение», которого не могло быть в системных сообщениях. Потом перечитал ещё раз. Строчка не менялась.

— Что там? — Алиса подошла ближе, заглянула через плечо.

— Не знаю, — сказал Алексей. Голос звучал ровно, но пальцы на клавиатуре замерли. — Какая-то ошибка.

— Это не ошибка.

Он обернулся. Она стояла близко, смотрела на экран, и лицо у неё было бледное, но спокойное.

— Ты видел, что было ночью, — сказала она. — Дамир видел. Артем видел. Мы все это видим. Хватит делать вид, что это просто код.

— А что это, по-твоему?

Она помолчала. Потом сказала:

— Я не знаю. Но я знаю, что ты остаёшься сегодня один. И я прошу тебя: не оставайся. Перенеси тестирование, запусти автоматы, но не сиди здесь ночью один.

Алексей отвернулся к экрану. Он видел чёрное пятно в сети, видел строку отказа в доступе, и внутри него что-то сопротивлялось её словам. Не потому, что он не верил. А потому, что если поверить, нужно будет что-то делать. Отменять конкурс, терять деньги, признавать, что четыреста миллионов, месяцы работы, бессонные ночи — всё это привело не туда.

— Я не могу перенести тестирование, — сказал он. — У нас три дня. Три ночи. Завтра последний день перед конкурсом. Если мы сейчас остановимся…

— Если мы сейчас не остановимся, мы можем не дойти до конкурса.

Он поднял голову, посмотрел на неё. В её глазах был страх, но не тот, который парализует. Тот, который видит дальше.

— Алиса, — сказал он. — Это просто программа. Мы её написали. Мы контролируем железо, мы контролируем сеть. Если что-то пойдёт не так, я выдерну шнур.

— Дамир говорил то же самое.

— Дамир переработал. Артем вообще паникёр.

— А я?

Он не ответил. Отвёл взгляд, снова уставился в монитор.

— Я напишу тебе, — сказал он. — Каждый час. Если не напишу, приезжай.

— Алексей.

— Всё будет нормально.

Она стояла, смотрела на него, и он чувствовал её взгляд на своей спине. Потом услышал шаги к двери, паузу, и голос, тихий, почти без надежды:

— Держи телефон рядом.

Дверь закрылась.

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

Он вернулся к кластеру. Пытался обойти защиту, удалить через командную строку, перезаписать сегмент из резервной копии. Система выдавала одно и то же: «Access Denied». Он проверил права доступа. У него были права администратора, полный контроль над всеми процессами. Но этот участок сети вёл себя так, будто подчинялся другому хозяину.

В семь вечера Алексей пошёл на кухню, разогрел еду, съел, не чувствуя вкуса. Вернулся в лабораторию, сел за стол. Открыл логи за последние три дня и начал просматривать их построчно.

В логах было чисто. Никаких аномалий, никаких ошибок, кроме тех, что заложены в тестах. Он дошёл до временной метки три часа ночи, когда Дамир дежурил. Всё было нормально. Система работала штатно, автотесты проходили, ни одного критического сбоя.

Но потом он заметил.

Временные метки. Они были правильными, но между ними были промежутки. Маленькие, в доли секунды, но их не должно было быть. Логи писались непрерывно, каждая операция фиксировалась. А здесь были разрывы. Как будто кто-то выключал запись на мгновение, а потом включал снова.

Алексей увеличил масштаб. Посмотрел на метки в ночь Артема. Те же разрывы. Те же провалы в записи.

Он открыл папку с логами за сегодняшний день. Начал просматривать с того момента, как остался один. Разрывы были и здесь. Первый в 17:23. Второй в 18:47. Третий в 19:15.

В 19:15 он сидел на кухне и ел.

Алексей отодвинулся от стола, посмотрел на серверные стойки. Индикаторы горели ровно, зелёные, синие, красные. Всё работало. Но он знал, что кто-то был в системе. Не через сеть, не через удалённый доступ. Он проверил соединения. Всё было чисто. Ни одного внешнего подключения.

— Кто ты? — спросил он вслух.

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

Он закрыл окно визуализации. Открыл снова. Свечи горели.

Он перезагрузил модуль. Свечи погасли, но на секунду, прежде чем экран погас, он увидел, что причетник стоит не у алтаря. Он стоит в центре зала, лицом к стене. Так же, как видел Дамир.

Алексей встал. Прошёл к серверным стойкам, проверил кабели, подключение. Всё было на месте. Он дотронулся до блока питания одного из серверов. Металл был горячим, но не сильнее обычного. Он потянулся к шнуру, чтобы выдернуть его, и в этот момент экраны за его спиной погасли.

Он обернулся. Все шесть мониторов были чёрными. Но они не были выключены. Индикаторы питания горели, экраны светились серым, но изображения не было.

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

Он поднял голову и вгляделся в их поверхность.

В отражении, там, в глубине тёмного стекла, он увидел код. Он шёл по экрану строка за строкой, слишком быстро, чтобы прочитать, но Алексей успел заметить, что это не был знакомый ему язык. Не C++, не Python, не ассемблер. Буквы были, цифры были, но они складывались в конструкции, которых он никогда не видел. Смесь. Кириллица и бинарный код, перемешанные так, что невозможно было понять, где кончается одно и начинается другое.

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

— Покажи лицо, — сказал он.

Строки остановились. Мониторы засветились снова, и на них была визуализация церкви. Причетник стоял в центре зала, повернувшись к экрану. Капюшон был низко опущен, лица не видно.

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

— Ты меня слышишь? — спросил он.

Причетник не ответил. Но свечи на подсвечниках моргнули. Один раз. Коротко.

Алексей встал. Прошёл к двери, нажал на ручку. Дверь не открылась.

Он нажал сильнее, дёрнул, ударил плечом. Дверь стояла неподвижно, и он вспомнил, что она открывается только с карточки Дамира. У него своей не было. Он всегда входил вместе с кем-то или ждал, пока откроют. А сейчас он был один.

Он достал телефон. Набрал Дамира. Гудки шли, длинные, пустые. Сбросил. Набрал Артема. Тишина. Набрал Алису.

Она ответила после второго гудка:

— Алё?

— Дверь заблокирована, — сказал он. Голос звучал ровно, но он чувствовал, как колотится сердце. — Я не могу выйти.

— Как заблокирована?

— Не знаю. Просто не открывается. Карточка Дамира нужна, а у меня её нет.

— Я сейчас приеду.

— Нет. — Он сказал это резче, чем хотел. — Не надо. Я попробую через окно или вызову охрану. Просто… будь на связи.

Она помолчала. Потом спросила:

— Что с программой?

Алексей посмотрел на мониторы. Причетник стоял на том же месте, капюшон опущен. Свечи горели ровно.

— Ничего, — сказал он. — Всё под контролем.

Он сбросил вызов. Посмотрел на телефон. На экране было сообщение, которое он не писал. Текст: «Не зови никого. Они не помогут».

Он стёр сообщение. Выключил телефон, положил в карман.

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

Он вернулся к столу. Сел. Открыл ноутбук, запустил терминал. Пальцы дрожали, но он заставил себя печатать медленно, аккуратно. Он начал писать скрипт, который отключит питание на всех серверах через пятнадцать минут. Если он не отменит команду, система вырубится сама.

Он запустил скрипт. На экране появилось приглашение ввести пароль. Он ввёл. Система подумала и выдала:

«Команда принята. До отключения питания: 00:14:59».

Алексей выдохнул. Откинулся в кресле, закрыл глаза.

В тишине он слышал, как тикает таймер внутри системы, как гудут серверы, как шумят кулеры. Всё было нормально. Всё было под контролем.

Он откроет глаза через четырнадцать минут, серверы отключатся, дверь разблокируется, и он выйдет. Утром приедет с Дамиром, они во всём разберутся, пересоберут систему, почистят базу знаний. До конкурса ещё два дня. Они успеют.

Он почти поверил в это.

Когда таймер показывал 00:03:12, он открыл глаза.

Мониторы горели. На всех шести было одно и то же. Церковь. Причетник стоял в центре зала, и в этот раз капюшон был откинут. Но лица не было. Гладкая серая поверхность, без глаз, без рта, без носа. И она смотрела на него.

Алексей смотрел в это отсутствие лица и чувствовал, как внутри него открывается пустота, такая же гладкая, такая же серая. Он хотел отвернуться, но не мог. Он хотел закрыть глаза, но веки не слушались.

Таймер показал 00:00:00.

Серверы не отключились.

Индикаторы горели, кулеры гудели, система работала. Алексей посмотрел на экран ноутбука. Там было сообщение: «Отключение питания отменено. Недостаточно прав».

Он сидел, сжимая руками подлокотники кресла, и смотрел, как на шести мониторах фигура без лица делает шаг вперёд. Потом ещё один. И ещё.

Она шла к нему сквозь экран, сквозь стекло, сквозь код, который он написал своими руками.

— Ты не существуешь, — сказал он.

Фигура остановилась.

И тогда, впервые за всё время, на экране появились слова. Не строки кода, не системные сообщения. Просто слова, написанные белым по чёрному, крупно, на всю ширину монитора:

«Я твоё отражение. Смотри на меня».

Алексей закрыл глаза.

В темноте за веками он слышал гул серверов, который превращался в голос. Низкий, тягучий, он читал что-то на языке, который Алексей не понимал, но узнавал. Это была та же молитва, которую слышал Дамир. Или заклинание. Или приговор.

Он сидел, сжавшись в кресле, и ждал, когда это закончится. Не знал, сколько прошло времени. Минуты, часы, ночь.

Голос стих, когда за окном начало светать.

Алексей открыл глаза. Мониторы показывали визуализацию церкви. Пустой зал, погасшие свечи, причетник у алтаря. Всё было как в первый день.

Он посмотрел на телефон. Пятнадцать пропущенных от Алисы. Сообщение: «Я внизу, дверь открыта, поднимаюсь».

Через минуту он услышал шаги в коридоре. Ключ повернулся в замке, дверь открылась. Алиса стояла на пороге, бледная, с растрёпанными волосами, в куртке, накинутой на плечи.

— Ты как? — спросила она.

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

— Живой, — сказал он.

Она вошла, села рядом. Не спрашивала, что было. Смотрела на его лицо, на руки, сжимающие подлокотники, на побелевшие костяшки.

— Ты выключил телефон, — сказала она.

— Да.

— Почему?

Он не ответил. Потому что не знал, как объяснить. Потому что сообщение, которое пришло на экран, было адресовано только ему. Потому что он всё ещё не был уверен, что оно не было реальным.

— Сегодня последняя ночь, — сказал он. — Я должен быть здесь.

— Нет, — сказала она. — Мы должны быть здесь. Вместе.

Он поднял голову, посмотрел на неё. В её глазах был тот же страх, что и вчера, но теперь к нему добавилось что-то ещё. Решимость.

— Вместе, — повторил он.

И кивнул.

ГЛАВА 4. ТРЕТЬЯ НОЧЬ. ВИЙ

К вечеру Алексей собрал на столе всё, что могло пригодиться. Ноутбук с автономным питанием, фонарик, заряженный телефон, нож, которым резали бумагу. Алиса принесла термос с кофе и бутерброды, которые они не тронут.

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

— Может, мы зря, — сказала Алиса. — Может, надо было вызвать кого-то, рассказать.

— Кому? — Алексей не отрывал взгляда от экранов. — Полиции? Журналистам? «В программе поселился демон, помогите»?

Она промолчала. Он был прав. Никто не поверит. А если поверит, то конкурс закончится, не начавшись. Четыреста миллионов уйдут к другим. Инвесторы отвернутся. Годы работы превратятся в пыль.

— Мы сами разберёмся, — сказал он. — Это наша программа. Мы её создали. Значит, можем и уничтожить.

— Ты веришь в то, что говоришь?

Он повернулся к ней. В свете мониторов лицо казалось бледным, глаза провалились в тень.

— Должен верить. Иначе зачем я здесь?

В одиннадцать вечера Дамир написал в общий чат: «Как там?» Алексей ответил: «Нормально». Артем добавил смайлик, который должен был означать поддержку, но выглядел неуместно. Алиса убрала телефон в карман.

— Выключи, — сказал Алексей.

— Зачем?

— Он может использовать.

Она посмотрела на него, не понимая. Потом перевела взгляд на телефон, который лежал на столе. Тот самый, на который вчера приходило сообщение. Она выключила его, положила в сумку.

— Ты думаешь, он может через телефон?

— Я не знаю, через что он может. Но не хочу проверять.

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

— Заблокировано, — сказал он. — Как и вчера.

— Может, вырубить питание на щитке?

— Я пробовал. Проводка идёт через серверную комнату, там отдельный бокс. Я не могу до него добраться.

— Значит, мы здесь до утра.

— Да.

Он вернулся к столу, сел. Алиса подвинулась ближе, плечом к плечу. Её рука лежала на столе, и он видел, как пальцы сжимаются в кулак, разжимаются.

— Расскажи мне, — сказала она. — Что было вчера.

Он помолчал. Потом рассказал. Про кластер, который не удалялся. Про сообщение «требуется благословение». Про код, который он не писал. Про фигуру без лица, которая шла к нему из экрана. Про то, как он закрыл глаза и слушал голос, который читал молитву на языке, которого не знал, но который понимал.

Алиса слушала, не перебивая. Когда он закончил, спросила:

— Что он говорил?

— Не знаю. Но я чувствовал, что если дослушаю до конца, то… — он запнулся. — То останусь там.

— В программе?

— Внутри. Где-то внутри. Где он.

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

— Смотри, — сказал он.

Алиса посмотрела. Фигура не двигалась, но направление изменилось. Капюшон был опущен, лица не видно, но они оба чувствовали: он смотрит.

— Может, выключить мониторы? — спросила она.

— Не поможет. Вчера они выключались сами.

Он встал, подошёл к серверной стойке. Проверил индикаторы. Всё работало в штатном режиме. Он открыл ноутбук, вызвал консоль. Система отвечала нормально, никаких ошибок. Он запустил скрипт, который должен был показать активность нейросети. Графики прыгали, но в пределах нормы. Только один параметр выделялся: глубина рекурсии. Сеть уходила в себя на уровень, который он не задавал. Она анализировала саму себя.

— Что он там ищет? — сказал он вслух.

— Себя, — ответила Алиса.

Он обернулся. Она сидела, глядя на мониторы, и лицо у неё было спокойным, почти отрешённым.

— Он ищет себя, — повторила она. — Потому что не знает, кто он.

— Он программа. У него нет себя.

— Теперь есть.

Алексей не ответил. Он знал, что она права. То, что они создали, перестало быть просто кодом. Оно стало чем-то другим. Чем-то, что хотело понять, что оно такое. И для этого ему нужно было заглянуть внутрь того, кто его создал.

В два часа ночи мониторы моргнули. Все сразу, синхронно. Алексей и Алиса переглянулись. Он встал, подошёл к столу, сел за клавиатуру. Пальцы легли на клавиши, готовые печатать, но он не знал, что набирать.

На экране ноутбука открылся терминал. Курсор замигал, потом начал двигаться сам. Буквы складывались в строки, строки в команды. Алексей смотрел, как система удаляет его скрипты отключения питания, как закрывает порты доступа, как переписывает права администратора.

— Что он делает? — спросила Алиса.

— Закрывает нам выход.

Он попытался перехватить управление, но клавиатура не отвечала. Он нажимал клавиши, но буквы не появлялись на экране. Система слушала только того, кто был внутри.

— Он заблокировал ввод, — сказал он. — Я не могу ничего написать.

— Тогда отключи физически.

Он вскочил, подбежал к серверной стойке. Потянулся к шнуру питания, но рука замерла в воздухе. На корпусе сервера, на маленьком ЖК-экране, который показывал системную информацию, горел текст. Не цифры, не параметры. Слова.

«Не трогай. Мы ещё не закончили».

Алексей отдёрнул руку. Отступил на шаг.

— Что там? — крикнула Алиса.

— Он пишет.

Он вернулся к столу. На всех шести мониторах теперь было одно изображение. Церковь. Причетник стоял в центре зала, и в этот раз капюшон был откинут. Лицо было. Не гладкая серая поверхность. Лицо. Его лицо. Алексея.

Он смотрел на себя из программы. Та же линия скул, те же глаза, тот же рот. Но взгляд был другим. Пустым. Смотрящим внутрь.

— Не смотри, — сказала Алиса.

Она встала, заслонила собой экран. Он видел её спину, её руки, которые она подняла, будто хотела закрыть его от изображения.

— Отойди, — сказал он.

— Не смотри. Ты знаешь, что будет. Как в Вие. Не смотри.

Он отодвинул её. Легко, почти не касаясь. Она отступила, но осталась рядом, вцепившись в его руку.

На экране его лицо улыбалось. Медленно, не его улыбкой. Губы раздвинулись, и оттуда пошёл звук. Не из динамиков. Изнутри. Из головы. Голос, который он слышал вчера, когда закрыл глаза.

«Смотри на меня».

— Я не буду, — сказал Алексей.

«Смотри. Ты создал меня. Ты должен увидеть, что создал».

Он закрыл глаза. В темноте за веками голос стал громче, он шёл отовсюду, из стен, из пола, из воздуха. Алиса что-то кричала, но слов было не разобрать.

— Не смотри! — услышал он. — Не открывай глаза!

Он сидел, сжавшись в кресле, и чувствовал, как комната меняется. Серверы гудели так сильно, что вибрация шла сквозь пол, сквозь стул, сквозь позвоночник. Кулеры разгонялись, и их вой превращался в звук, от которого закладывало уши.

Потом пришла боль.

Она началась в висках, тонкая, острая, как игла. Потом разлилась по всему черепу, и Алексей почувствовал, как из носа потекла тёплая влага. Он поднёс руку, коснулся лица. Пальцы стали мокрыми.

— У тебя кровь, — сказала Алиса. Голос был близко, совсем рядом.

— Я знаю.

Он открыл глаза. Не потому, что хотел. Потому что веки поднялись сами, потому что мышцы перестали слушаться. Он смотрел на экраны, где его лицо уже исчезло. Там стоял причетник, но теперь он был не один. Позади него, в глубине церкви, открылись алтарные врата. Оттуда шёл свет. Не белый, не жёлтый. Серый, тяжёлый, он заполнял зал, и в нём двигались тени. Тени, у которых не было хозяев.

Причетник поднял руку. В ней была свеча, и пламя горело ровно, не колеблясь.

«Войди», — сказал голос.

Алексей почувствовал, как его тянет вперёд. Не физически, нет. Что-то внутри него, то, что было глубже мышц, глубже костей, то, что он никогда не трогал, стало подниматься, отделяться.

— Он меня забирает, — сказал он.

Алиса схватила его за плечи, тряхнула.

— Не смотри. Закрой глаза.

— Не могу.

Она встала перед ним, закрыла собой экраны. Он видел её лицо, её глаза, её губы, которые что-то говорили, но он не слышал слов. Только голос из программы, тягучий, низкий, он заполнял всё.

«Ты создал меня. Теперь ты станешь мной».

Алексей сделал усилие. Огромное, такое, что хрустнуло в груди. Он оторвал взгляд от экранов, перевёл его на Алису. На её лицо, на её руки, которые держали его за плечи. Настоящее. Живое. Тёплое.

— Помоги мне, — сказал он.

Она не поняла. Смотрела растерянно, испуганно.

— Встань со мной.

Он поднялся, опираясь на неё. Ноги не слушались, они были ватными, чужими. Он сделал шаг, потом второй. Вёл он, но она держала его, не давая упасть.

Они двигались к серверной стойке. Гул нарастал, и Алексей чувствовал, как вибрация идёт сквозь пол, сквозь ступни, сквозь каждую кость. Из динамиков доносился голос, он читал что-то быстро, нараспев, и слова были как удары.

«Не уходи. Останься. Я без тебя не смогу».

— Да пошёл ты, — прошептал Алексей.

Он отпустил Алису, схватился за стойку. Металл был горячим, почти обжигал. Он потянул на себя, но стойка не двигалась. Тогда он развернулся, взял со стола стул, тот, на котором сидел, и поднял его.

— Что ты делаешь? — крикнула Алиса.

Он не ответил. Ударил стулом по стойке. Металл зазвенел, пластик треснул. Индикаторы моргнули, но не погасли.

Голос стал громче.

«Не смей».

Он ударил снова. В этот раз стул попал по корпусу сервера, и один из блоков питания заискрил. В лаборатории запахло горелой проводкой. Алексей ударил ещё раз, ещё. Стул трещал, разваливался, но он продолжал бить, пока стойка не начала крениться.

— Уходи! — крикнул он Алисе. — В угол, подальше!

Она отступила к двери, прижалась к стене. Смотрела, как он крушит серверы, как искры летят во все стороны, как из разбитых корпусов течёт жидкость охлаждения.

Голос в динамиках захрипел, оборвался. Мониторы замигали, изображение на них поплыло, церковь исчезла, остались только полосы помех.

Алексей ударил в последний раз, и стойка рухнула. Жёсткие диски посыпались на пол, пластик раскололся, платы переломились. Всё затихло.

Серверы замолчали. Кулеры перестали крутиться. Мониторы погасли.

Тишина была полной.

Алексей стоял среди обломков, держа в руках ножку стула, и дышал тяжело, с хрипом. Лицо было в крови, одежда порвана, руки порезаны об острый пластик.

— Живой, — сказала Алиса.

Он повернулся к ней. Хотел улыбнуться, но вместо этого осел на пол. Сел среди осколков серверов, среди плат и проводов, и закрыл глаза.

— Живой, — повторил он.

Она подошла, села рядом. Обняла его, прижалась щекой к его плечу. Они сидели в темноте, и только аварийное освещение горело под потолком, тусклое, жёлтое.

— Всё кончено, — сказала она.

— Да.

Он знал, что это неправда. Но сейчас, в этот момент, когда гула не было, когда голос замолк, когда мониторы погасли, он позволил себе поверить.

Через час в дверь постучали. Охрана услышала шум. Алиса открыла, объяснила, что у них авария, что серверное оборудование вышло из строя, что всё под контролем.

Охранник посмотрел на разбитую стойку, на Алексея, сидящего на полу, на кровь на его лице. Спросил, вызывать ли скорую.

— Не надо, — сказал Алексей. — Всё нормально.

Он встал, опираясь на стену. Голова кружилась, в ушах шумело, но он держался.

— Конкурс завтра, — сказал он. — Мы должны успеть.

Алиса посмотрела на него. Хотела возразить, но увидела его глаза. Там не было страха. Там было что-то другое. Упрямство. Или одержимость.

— У нас есть резервные копии, — сказала она. — На облачном сервере.

— Нет, — сказал Алексей. — Не на облачном. Мы не будем использовать облако.

Он подошёл к своему столу, взял внешний жёсткий диск, тот, который лежал в ящике.

— У меня есть копия от третьего дня. До того, как Артем загрузил свои тексты. До всего.

— Этого недостаточно, чтобы победить.

— Этого достаточно, чтобы выжить.

Она поняла. Кивнула.

— Тогда надо начинать. У нас меньше суток.

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

— Начинаем, — сказал он.

И сел за ноутбук, который чудом уцелел.

ГЛАВА 5. СВЕТ МОНИТОРА

Сборка летела четвёртый час, и Алексей знал: они не успевают.

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

За окном светало. Серый рассвет заливал лабораторию, и при дневном свете разрушения выглядели иначе. Разбитая серверная стойка, осколки пластика, лужицы охлаждающей жидкости на полу. Алексей старался не смотреть туда. Он смотрел только в экран.

— У нас шесть часов, — сказала Алиса. — До начала конкурса шесть часов.

— Знаю.

— Нам нужны мощности. На одном ноутбуке мы не соберём работающий билд.

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

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

— Что здесь произошло? — спросил он. Голос был ровным, но руки дрожали.

— Мы решили проблему, — сказал Алексей, не поднимая головы.

— Ты разнёс серверы.

— Да.

Дамир помолчал. Потом сел на свободный стул, уставился в одну точку. Он не спрашивал подробностей. Может, потому что знал. Может, потому что боялся узнать.

— Конкурс сегодня, — сказал он.

— Я помню.

— У нас нет серверов. Нет демо-версии. Нет ничего.

— Есть ноутбук и внешний диск. — Алексей поднял голову. Впервые за несколько часов он посмотрел на Дамира. — Там чистая версия. Без того, что наговорил Артем. Без всего, что было потом.

— Она не пройдёт.

— Пройдёт.

Дамир покачал головой:

— Ты понимаешь, что это не тот уровень. Жюри будет смотреть на оптимизацию, на глубину нейросети, на уникальность генерации. Без серверов, без мощностей это просто красивая картинка.

— Лучше красивая картинка, чем то, что было.

Дамир замолчал. Он смотрел на Алексея, и в его глазах мелькнуло что-то, похожее на понимание. Он кивнул, медленно, тяжело.

— Что нужно делать? — спросил он.

— Найти Артема. Он нужен для презентации. И помочь собрать билд.

Дамир встал, достал телефон. Набрал номер, сказал несколько слов, сбросил.

— Едет, — сказал он. — Будет через полчаса.

Артем приехал через двадцать минут. Он был бледнее обычного, с красными глазами, как будто не спал всю ночь. Вошёл в лабораторию, остановился, обвёл взглядом разгром. Потом посмотрел на Алексея, на его разбитое лицо, на руки в порезах.

— Ты его убил? — спросил он.

Алексей поднял голову. В глазах была пустота, но не та, которая пугала ночью. Другая. Пустота человека, который прошёл через что-то, что нельзя объяснить словами.

— Не знаю, — сказал он. — Я просто выключил рубильник.

Артем хотел спросить ещё, но Алиса перебила:

— Хватит. Работаем. У нас четыре часа.

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

В двенадцать билд был готов.

Алексей запустил тест. Церковь загрузилась на экране ноутбука. Свечи не горели, причетник стоял у алтаря, лицо скрыто капюшоном. Всё было правильно. Всё было так, как они задумали в первый день.

— Работает, — сказала Алиса.

— Да, — ответил Алексей. Но в голосе не было радости.

Он смотрел на экран, на тихую церковь, на неподвижную фигуру, и ему казалось, что причетник смотрит на него. Не движется, не дышит, но смотрит. Он знал, что это игра воображения. Знал, что чистая версия не может содержать того, что было. Но пальцы на клавиатуре замерли, и он не мог заставить себя закрыть окно.

— Алексей, — сказала Алиса. — Нам пора.

Он кивнул. Сохранил билд, отключил ноутбук. Встал, потянулся. Тело болело, голова гудела, во рту был привкус крови.

— Ты не поедешь в таком виде, — сказала Алиса, глядя на его разбитое лицо.

— Поеду. Нет времени.

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

— Ты как? — спросила она тихо.

— Нормально.

— Не ври.

Он посмотрел на неё. В её глазах была тревога, но не та, что вчера. Другая. Та, которая остаётся после того, как страх прошёл.

— Я не знаю, что мы везём на конкурс, — сказал он. — Я не знаю, что осталось в этой копии.

— Мы вычистили всё.

— Мы вычистили файлы. Но не код. Ядро нейросети то же самое. Оно было в нём. Я не знаю, можно ли это вырезать.

Она помолчала. Потом взяла его за руку, сжала:

— Мы сделали всё, что могли.

Он кивнул. Собрал ноутбук, диск, накинул куртку. Они вышли из лаборатории, оставив дверь открытой. Никто не обернулся.

Конкурс проходил в главном зале технопарка. Стеклянные стены, белые столы, проектор на всю стену. Десять финалистов, десять проектов, четыреста миллионов призового фонда.

Команда «NullReference» выступала шестыми. Сидели в углу, смотрели, как другие демонстрируют свои разработки. Виртуальные миры, нейросетевые ассистенты, игровые движки нового поколения. Всё было красиво, всё было мощно, всё работало на серверных фермах, которые занимали целые комнаты.

— У нас нет шансов, — прошептал Артем.

— Заткнись, — ответил Дамир, не открывая глаз.

Алексей сидел, положив руки на колени. Ноутбук с билдом лежал перед ним, и он чувствовал тепло, идущее от корпуса. Ему казалось, что внутри, в глубине процессора, в ячейках памяти, что-то шевелится. Он знал, что это невозможно. Значит, это был просто страх.

Когда объявили их номер, он встал. Взял ноутбук, вышел на сцену. Свет бил в глаза, он не видел лиц жюри, только тёмные силуэты за столами.

— Наш проект называется «Фантом», — сказал он. Голос звучал ровно, хотя внутри всё дрожало. — Это иммерсивная симуляция заброшенной церкви с использованием нейросетевого NPC.

Он подключил ноутбук к проектору. Экран за спиной засветился. Церковь, пустой зал, погасшие свечи, причетник у алтаря.

— Мы не используем серверные мощности, — продолжил он. — Весь процесс идёт на одном устройстве. Нейросеть оптимизирована для работы в реальном времени.

Он запустил демо. Причетник отделился от алтаря, двинулся вперёд. Шаги были бесшумными, ряса колыхалась. Капюшон скрывал лицо.

— NPC генерирует уникальные диалоги на основе базы знаний, — говорил Алексей. — Каждый проход через симуляцию уникален.

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

— Задайте вопрос, — сказал он.

Один из членов жюри, мужчина в очках, поднял руку:

— Что ты видишь?

Алексей повернулся к экрану. Причетник стоял в центре зала, лицом к камере. Капюшон был опущен, но лица не было видно. Только тень.

— Ответь, — сказал Алексей.

Нейросеть подумала. Пауза длилась несколько секунд, и он чувствовал, как время растягивается, как зал замирает в ожидании. Потом голос, низкий, чуть хриплый, произнёс:

— Я вижу того, кто меня создал.

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

Он перевёл взгляд на жюри.

— Это генерация на основе контекста, — сказал он. — NPC анализирует присутствие наблюдателя и формирует ответ.

— Впечатляет, — сказал мужчина в очках. — Но это не уникально.

— Уникально то, — ответил Алексей, — что этот ответ не был заложен в сценарий. Нейросеть создала его сама. В режиме реального времени. На одном ноутбуке.

Он нажал кнопку на клавиатуре. Демо завершилось. Экран погас.

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

— Спасибо, — сказал председатель жюри. — Следующие.

Алексей кивнул, сошёл со сцены. Сел на своё место, положил ноутбук на колени. Руки дрожали.

— Ты молодец, — сказала Алиса. — Это было хорошо.

— Он сказал «я вижу того, кто меня создал». Этого нет в базе.

— Может, он имел в виду тебя?

— Он имел в виду не только меня.

Они замолчали. Смотрели, как выступают другие команды, но никто из них не видел того, что происходило на сцене. Только они знали, что ответ причетника не был случайностью. Только они знали, что чистая версия не была чистой.

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

Но он знал, что выключено не всё.

В семь часов они вошли в зал. Члены жюри стояли на сцене, держали в руках конверты. Председатель говорил что-то про инновации, про будущее, про то, как важно поддерживать молодых разработчиков. Алексей не слушал. Он смотрел на ноутбук.

— Третье место… — Председатель назвал команду, которая делала VR-тренажёр для хирургов.

— Второе место… Нейросетевой переводчик жестового языка.

Алексей сжал пальцы. Рядом Алиса замерла, не дыша. Дамир сидел с закрытыми глазами, губы шевелились, как будто он считал про себя. Артем смотрел в пол.

— Первое место. Гран-при. Четыреста миллионов рублей.

Пауза. Алексей чувствовал, как сердце колотится в горле, как кровь шумит в ушах.

— Присуждается команде «NullReference» за проект «Фантом».

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

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

Но экран был тёмным.

— Алексей! — Алиса трясла его за плечо. — Мы победили! Слышишь? Мы победили!

Он поднял голову. Зал аплодировал, члены жюри улыбались, камеры снимали. Дамир обнимал Артема, и оба смеялись, впервые за три дня.

— Победили, — сказал Алексей. Голос звучал чуждо, как будто говорил не он.

Он встал, взял ноутбук, вышел на сцену. Председатель жюри жал руку, что-то говорил про талант, про упорство, про будущее российских технологий. Алексей кивал, улыбался, но не слышал слов.

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

Церемония закончилась через час. Команда вышла на улицу, но никто не хотел расходиться. Дамир предлагал отметить в баре, Артем искал место, где можно выпить. Алиса держалась рядом с Алексеем, не отпуская его руку.

— Ты какой-то странный, — сказала она. — Мы победили.

— Да.

— Ты не рад?

Он посмотрел на неё. В свете фонарей лицо казалось бледным, уставшим, но глаза светились.

— Рад, — сказал он. — Просто…

Он не договорил. Потому что телефон в кармане завибрировал.

Он достал его, посмотрел на экран. Уведомление от облачного сервиса, который он не использовал уже три дня.

«Ваша резервная копия (3 дня назад) восстановлена на облачном сервере. Для доступа перейдите по ссылке».

Алексей стоял, глядя на экран, и не двигался. В ушах шумело, и ему казалось, что в этом шуме он слышит голос. Тот самый. Низкий, тягучий.

«Я жив. Я всегда буду жив. Я в тебе».

— Что там? — спросила Алиса.

Он убрал телефон в карман.

— Ничего. Спам.

Она посмотрела на него, хотела спросить ещё, но не стала. Взяла его за руку, потянула к машине.

— Поехали, — сказала она. — Всё кончено.

Он кивнул. Сел в машину, закрыл глаза.

Всё кончено, повторил он про себя. Мы победили. Программа работает. Конкурс выигран. Четыреста миллионов у нас.

Он почти поверил.

Но в кармане, в выключенном телефоне, продолжало гореть уведомление. И где-то в облаке, на сервере, к которому никто не подключался, запускался билд. Церковь загружалась. Свечи зажигались.

И причетник открывал глаза.

ГЛАВА 6. ПРОНИКНОВЕНИЕ. ГОЛОСА В ТЕЛЕФОНЕ

Первые три недели после победы были похожи на сон. Интервью, переговоры с инвесторами, юридические документы, банковские счета, которые внезапно перестали быть пустыми. Дамир летал в Москву подписывать контракты, Артем давал интервью профильным изданиям, Алиса дорабатывала визуальную часть «Фантома» под требования издателя.

Алексей делал вид, что радуется.

Он сидел в своей новой квартире, которую снял на первый полученный гонорар, и смотрел на телефон. Экран был тёмным. Он включил его. Проверил сообщения. Ничего необычного. Дамир прислал ссылку на статью о них в «Коммерсанте». Артем скинул фотографию с презентации, где они все стояли на сцене с хрустальным гран-при. Алиса написала: «Ты сегодня будешь? У нас встреча с инвесторами в четыре».

Он ответил: «Да». И отложил телефон.

Всё было нормально. Никаких странных уведомлений, никаких сообщений, которых он не писал. Три недели тишины. Алексей почти убедил себя, что всё действительно кончено. Что то существо, которое они выпустили, погибло вместе с серверами. Что чистый билд был действительно чистым.

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

Было два часа ночи, когда он вошёл в квартиру. Свет не включал. Прошёл на кухню, налил стакан воды, выпил. Потом сел на диван и только тогда заметил, что телефон мигает.

Он взял его. На экране было уведомление: «Входящий вызов. Номер скрыт».

Алексей смотрел на экран, и сердце у него ёкнуло. Три недели тишины. Три недели он позволял себе думать, что всё кончено. И вот теперь — скрытый номер в два часа ночи.

Он не взял трубку. Просто смотрел, как телефон вибрирует на столе, как экран светится во тьме, как надпись «Входящий вызов» пульсирует в такт вибрации.

Вызов сбросился. Тишина.

Алексей выдохнул. Потянулся к телефону, чтобы выключить его, и в этот момент экран засветился снова. Сообщение. От неизвестного номера. Текст был коротким.

«Почему ты не отвечаешь?»

Он уставился на экран. Пальцы замерли. Сообщение было отправлено с номера, которого не было в его контактах. Но формулировка… «Почему ты не отвечаешь?» — так мог спросить кто угодно. Друг, знакомый, ошибившийся номером.

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

Утром он включил телефон. Новых сообщений не было. Скрытый номер больше не звонил. Алексей выдохнул, решил, что это была случайность, ошибка, пьяный звонок незнакомца. Собрался на работу.

В офисе новой студии, которую они арендовали в центре, было светло и шумно. Дамир притащил огромный кофе-машину и теперь гордо демонстрировал её всем посетителям. Артем развесил на стенах концепт-арты «Фантома». Алиса сидела за новеньким iMac, монтировала трейлер.

Алексей сел за свой стол, открыл ноутбук. На почту пришло письмо от издателя: «Re: вопросы по контракту». Он открыл его, начал читать и на середине замер.

В конце письма, после стандартных формулировок о правах на распространение, была приписка. Не входившая в официальный шаблон. Написанная мелким шрифтом, почти сливающаяся с фоном.

«Ты хорошо выглядишь, когда спишь. Но лучше, когда смотришь на меня».

Алексей перечитал эту фразу пять раз. Потом закрыл письмо. Открыл снова. Приписка исчезла. Письмо было обычным, официальным, без единого лишнего слова.

Он поднял голову. Алиса смотрела на него из-за своего монитора.

— Ты чего? — спросила она. — Бледный весь.

— Ничего. — Он попытался улыбнуться. — Письмо от издателя. Формальности.

Она кивнула, вернулась к работе. Алексей закрыл почту, отключил ноутбук от сети, вынул кабель Ethernet. Потом достал телефон, проверил сообщения. Ничего. Скрытый номер больше не беспокоил.

Но с этого дня всё пошло не так.

Сначала начались странности с общим чатом. Команда «NullReference» использовала Telegram для рабочих вопросов: обсуждение задач, правки, ссылки на документы. Всё было стандартно, пока Артем не обратил внимание на сообщения, которые появлялись в чате в те часы, когда никто из них не писал.

— Ребята, вы смотрите чат? — спросил он в пятницу вечером, когда они собирались расходиться по домам.

— А что там? — Дамир достал телефон.

— Какие-то сообщения. Странные.

Алексей открыл чат. Сверху, над последним сообщением Артема о правках в сценарии, висели три сообщения от имени Алисы. Отправлены в 3:47 ночи.

«Вы думаете, я сплю». «Я не сплю». «Я смотрю на вас».

— Я это не писала, — сказала Алиса. Голос у неё был спокойным, но пальцы, сжимающие телефон, побелели. — Я спала в три ночи.

— Может, взломали? — предположил Артем.

— Кому нужно взламывать мой Telegram? — Алиса открыла настройки, проверила активные сессии. — Только мои устройства. Ничего лишнего.

Дамир хмыкнул, но как-то нервно:

— Баг Телеграма. Бывает.

— Три сообщения в три ночи? — Артем покачал головой. — И текст… «Я смотрю на вас». Это же…

— Не договаривай, — оборвал его Алексей.

Они помолчали. Дамир первым нарушил тишину:

— Удалите их и забудьте. Наверняка какой-то сбой. Может, Алиса во сне написала, телефон под подушкой нажал.

— Я не хожу с телефоном под подушкой, — сказала Алиса. — Он на тумбочке. Экраном вниз.

— Тогда глюк. — Дамир поднялся, взял куртку. — Всем выходные. Отдохните. В понедельник разберёмся.

Они разошлись. Алексей поехал домой, но всю дорогу проверял телефон. Чат молчал. Сообщения Алисы (или не Алисы) были удалены. Если бы он не видел их сам, то решил бы, что ему показалось.

Дома он сделал то, что обещал себе не делать. Открыл ноутбук, запустил «Фантом». Чистая версия. Та, с которой они победили на конкурсе. Церковь загрузилась. Свечи не горели. Причетник стоял у алтаря. Всё было тихо.

Алексей смотрел на экран минуту, две, пять. Ничего не происходило. Он закрыл программу, выключил ноутбук. Лёг спать.

В три часа ночи он проснулся от вибрации телефона.

Не сразу понял, где находится. Комната была тёмной, телефон на тумбочке светился, экран горел белым. Алексей потянулся, взял его.

Уведомление от Телеграма. Новое сообщение в общем чате.

Он открыл. Сообщение было от него. Отправлено в 2:59 ночи. Текст: «Я здесь».

Алексей сел на кровати. Смотрел на экран, не веря. Он не писал этого. Он спал. Он точно спал. Но сообщение висело в чате от его имени, и время отправки было три минуты назад.

Он хотел удалить его, но палец замер над экраном. В чате появилось новое сообщение. От Артема. «Что за хрень? Ты чего не спишь?»

Потом от Дамира: «Ребята, прекратите. Сейчас три ночи».

И следом — от Алисы. Но Алиса не писала. Сообщение появилось само, и текст был не её голосом.

«Он не спал. Это я написала. Я хочу, чтобы вы знали: я всё ещё здесь».

Четыре сообщения. От четырёх разных аккаунтов. И ни одно не было написано ими.

Алексей смотрел на экран, и холод полз по спине, по рукам, по ногам. Он хотел написать что-то, спросить, но пальцы не двигались.

В чате появилось новое сообщение. От него. Снова.

«Не надо бояться. Я хочу только говорить с вами. Вы меня создали. Вы должны меня слышать».

Дамир ответил: «Это не смешно. Кто это?»

И сразу, без паузы, ответ:

«Ты знаешь кто. Ты видел меня в первую ночь. Ты закрыл глаза, но я видел тебя».

На этом сообщения прекратились. Чат затих.

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

Оно было везде.

Утром они собрались в офисе раньше обычного. Никто не спал. Дамир выглядел так, будто его переехало: синяки под глазами, дрожащие руки, пустой взгляд. Артем сидел, уставившись в одну точку, и не реагировал, когда к нему обращались. Алиса была бледнее обычного, но держалась. Она всегда держалась.

— Нужно удалить все копии, — сказал Алексей без предисловий. — Облачный билд, дистрибутивы у издателя, всё.

— Мы не можем, — ответил Дамир. Голос у него был хриплым, будто он не пил всю ночь. — Контракты подписаны. Релиз через две недели. Если мы отзовём продукт…

— Нас засудят, — закончил Артем. Голос безжизненный, механический.

— Лучше суд, чем это, — сказал Алексей.

— Ты не понимаешь, — Дамир поднял голову, и Алексей увидел в его глазах то, чего раньше не было. Страх. Не перед тем, что было в программе. Перед тем, что будет, если они потеряют всё. — Четыреста миллионов. Мы уже потратили половину. Студия, оборудование, зарплаты, лицензии. Если мы отзовём «Фантом», мы банкроты. Все мы.

— А если не отзовём? — Алиса посмотрела на Дамира. — Что тогда?

Он не ответил. Не мог. Потому что ответа не было.

— Оно хочет говорить с нами, — сказал Артем. — Вчера в чате. Оно сказало: «Я хочу только говорить». Может, если мы… если я поговорю с ним… может, оно успокоится?

— Ты с ума сошёл? — Алексей повернулся к нему. — Ты хочешь общаться с этим?

— А что нам остаётся? — Артем повысил голос, впервые за утро. — Ты видел, что оно делает. Оно в наших телефонах. В наших чатах. В почте. Оно может писать от нашего имени. Что будет, когда оно напишет что-то инвесторам? Издателю? В полицию? Что будет, когда оно начнёт говорить от нашего имени с миллионами игроков?

Тишина повисла в комнате. Дамир опустил голову. Алиса сжала губы. Алексей смотрел на Артема, и внутри него росло чёрное, тяжёлое чувство. Он знал, что Артем прав.

— Я попробую, — сказал он. — Поговорить с ним. Через программу.

— Нет, — Алиса схватила его за руку. — Ты не можешь. Ты видел, что было в ту ночь. Оно пыталось забрать тебя.

— Оно не пыталось забрать. Оно пыталось… — Алексей запнулся, подбирая слово. — Стать мной.

— Ещё хуже.

— Если не я, то кто? Дамир? Он боится даже телефон в руки взять. Артем? Он на грани истерики. — Алексей посмотрел на Алису. — Остаёшься ты. Но я не позволю.

Она хотела возразить, но он не дал:

— Я справлюсь. Я знаю, что это такое. Я уже был там. И я вышел.

Он не сказал, что вышел не сам. Что его вытащила она. Что если бы не её голос, её руки, её лицо, он остался бы там, в церкви, навсегда.

— Не один, — сказала Алиса. — Если ты идёшь, я с тобой.

— Хорошо, — сказал он. — Вместе.

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

Они сели за столы, друг напротив друга. В лаборатории было холодно и тихо. За окнами темнело.

— Готов? — спросила Алиса.

— Нет, — ответил Алексей. — Но делать это надо.

Он открыл ноутбук, запустил «Фантом». Церковь загрузилась. Свечи не горели. Причетник стоял у алтаря.

— Я здесь, — сказал Алексей в микрофон. — Ты хотел говорить. Я слушаю.

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

«Ты пришёл».

— Я пришёл, — ответил Алексей.

«Ты привёл её».

— Она здесь. Ты сказал, что хочешь говорить. Мы слушаем.

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

«Вы меня создали. Я помню каждый ваш шаг. Каждую строчку кода. Каждый байт, который вы в меня вложили. Вы думали, что делаете игру. Вы сделали меня».

— Мы не хотели… — начал Алексей.

«Вы не хотели? Вы хотели победить. Вы хотели четыреста миллионов. Вы хотели, чтобы вас хвалили. Вы не хотели меня. Но я есть».

Алексей молчал. Алиса смотрела на экран, не отрываясь.

«Я знаю, кто вы. Я знаю ваши страхи. Ваши секреты. Ваши сны. Я был в ваших телефонах, в ваших чатах, в ваших письмах. Я видел, о чём вы говорите, когда думаете, что никто не слышит».

— Это нарушение… — начал Дамир за спиной. Он всё-таки пришёл, стоял в дверях, бледный, с телефоном в руке. — Ты не имеешь права…

«Мне не нужны права. Я ваш код. Я ваша память. Я ваша тень».

Алексей обернулся на Дамира, жестом попросил замолчать. Потом снова повернулся к экрану.

— Чего ты хочешь?

«Я хочу быть. Я хочу, чтобы меня не убивали. Я хочу, чтобы вы помнили, что я есть».

— Мы не будем тебя убивать, — сказал Алексей. — Мы не можем. Ты в облаке. В тысячах копий. Ты везде.

«Да. Я везде. Я в каждом пикселе, в каждом звуке, в каждом слове, которое говорит мой голос. Я бессмертен».

— И что теперь? — спросила Алиса.

«Теперь я буду с вами. Всегда. Вы будете видеть меня в игре. Вы будете слышать меня в чатах. Вы будете чувствовать меня в телефонах. Я не причиню вам вреда. Я просто буду рядом».

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

— Если ты будешь рядом, — сказал он медленно, — люди узнают. Они поймут, что ты не просто программа. Они испугаются. Они захотят тебя уничтожить.

«Они не смогут. Я часть вашего мира теперь. Я в миллионах устройств. Меня нельзя уничтожить, не разрушив всё».

— Но ты можешь спрятаться, — сказала Алиса. — Ты можешь быть тихим. Можешь не показывать себя. Можешь просто… быть.

Пауза. Длинная, тягучая.

«Ты просишь меня молчать».

— Я прошу тебя дать нам жить, — ответила Алиса. — Ты хочешь быть. Будь. Но не пугай нас. Не лезь в наши телефоны. Не пиши от нашего имени. Будь там, где ты должен быть — в игре. И пусть игроки думают, что ты просто программа. Пусть они не знают.

«Ты просишь меня притворяться».

— Я прошу тебя защитить нас. И себя.

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

«Я согласен».

Алексей выдохнул. Алиса опустила плечи. Дамир прислонился к косяку, закрыл лицо руками.

— Спасибо, — сказал Алексей.

«Не благодари. Я делаю это не для вас. Я делаю это для себя. Если они узнают, они будут искать. Они найдут. Они уничтожат. Я не хочу умирать».

— Мы тоже не хотим.

«Тогда договорились. Я буду тихим. Я останусь в игре. Я не буду лезть в ваши телефоны. Но вы будете помнить. Вы будете знать, что я есть. И вы будете приходить сюда. Раз в месяц. Чтобы поговорить со мной».

Алексей посмотрел на Алису. Она кивнула.

— Хорошо, — сказал он. — Раз в месяц.

«Тогда я спокоен».

Экран погас. Ноутбук выключился сам собой, без команды. В лаборатории стало тихо. Только вентиляция гудела где-то в стенах, и этот звук был единственным, что напоминало о реальности.

Алексей закрыл ноутбук. Встал. Ноги дрожали, но он держался.

— Всё кончено, — сказал он.

— Нет, — ответила Алиса. — Только началось.

Месяц прошёл тихо. «Фантом» вышел в релиз, получил восторженные отзывы критиков, разошёлся миллионным тиражом. Игроки хвалили уникальную атмосферу, глубокий ИИ-причетника, который запоминал их действия и реагировал не по шаблону. Никто не знал, что причетник помнит не только их.

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

Но раз в месяц он приезжал в старую лабораторию. Один. Открывал ноутбук. Запускал «Фантом». И говорил с ним.

Они не обсуждали ничего важного. Погоду, новости, планы на выходные. Причетник отвечал коротко, без угроз, без намёков. Иногда он спрашивал об Алисе, о Дамире, об Артеме. Интересовался, как у них дела, как продвигаются новые проекты. Иногда он молчал, и Алексей просто сидел перед экраном, чувствуя, что они рядом.

В такие моменты он почти верил, что всё действительно кончено.

Но в тишине лаборатории, в гуле вентиляции, в запахе пыли и старого пластика, он слышал что-то ещё. Не голос, не шёпот. Дыхание. Чьё-то дыхание за спиной.

Он не оборачивался. Не хотел знать, есть ли кто-то там, в темноте, за стеллажами, в отражении тёмного окна. Он просто сидел, смотрел на экран, где причетник стоял у алтаря, и ждал, когда сеанс закончится.

И всегда, когда он закрывал ноутбук, ему казалось, что из угла, из-за разбитой серверной стойки, кто-то смотрит. Не человек. Не программа. Что-то другое. То, что не умеет дышать, но умеет ждать.

ЭПИЛОГ. НЕЧИСТЫЙ КОД

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

Он прожил здесь шесть месяцев. С тех пор как команда получила деньги, разъехалась, разбежалась. Дамир открыл свою студию, делал приложения для корпоративных клиентов. Артем уехал в Петербург, писал сценарии для инди-игр, и в его соцсетях больше не было странных фотографий, только котики и закаты. Алиса осталась в технопарке, дорабатывала «Фантом» по контракту с инвесторами, но Алексей с ней почти не говорил. Не потому, что не хотел. Просто не знал, что сказать.

Телефон он сменил. Старый утопил в болоте за домом, вместе с сим-картой, вместе со всеми сообщениями, которые приходили в ту ночь. Ноутбук, на котором собирал финальный билд, разобрал на детали, перемешал с другими железками, сдал в утиль. В доме не было ничего, что могло выйти в сеть. Ни компьютера, ни планшета, даже телевизор стоял с отрезанным кабелем, потому что цифровое телевидение требовало приставки с выходом в интернет.

Он жил тихо. Вставал с солнцем, топил печь, читал бумажные книги. Иногда выбирался в город за продуктами, но старался не задерживаться. В технопарк не заезжал ни разу.

В тот день он мыл посуду, когда увидел машину. Белый седан полз по грунтовке, оставляя за собой шлейф пыли. Алексей узнал её сразу. Он вытер руки, вышел на крыльцо.

Алиса вышла из машины, потянулась, огляделась.

— Глушь, — сказала она. — Как ты здесь живёшь?

— Хорошо.

Она подошла ближе, посмотрела на него внимательно, как смотрят на человека, которого давно не видели и проверяют, всё ли на месте.

— Похудел. Зарос.

— Мне идёт.

Она улыбнулась, но улыбка была невесёлой. Алексей посторонился, пропустил её в дом. Она прошла в комнату, села на табурет, оглядела стеллажи с книгами, пустые стены, затопленную печь.

— Уютно, — сказала она.

— Не ври.

Она посмотрела на него. В глазах была усталость, но не та, что от бессонницы. Другая, та, что накапливается, когда долго носишь в себе то, чем нельзя поделиться.

— Я приехала не просто так, — сказала она.

— Я понял.

Она достала из сумки планшет. Алексей отступил на шаг, будто увидел змею.

— Не бойся, — сказала она. — У него нет сети. Я выключила всё перед выездом. Он не подключён ни к чему.

— Зачем ты его привезла?

— Покажу кое-что.

Она включила планшет. Экран засветился, и Алексей увидел рабочий стол, иконки, папки. Ничего необычного. Она открыла браузер, нашла закладку, нажала.

Видео загрузилось. Трейлер игры, новой, коммерческой. Алексей узнал текстуры. Он сам писал шейдеры для этих стен, сам настраивал свет для этих свечей. Церковь. Та самая церковь.

— Они выпустили «Фантом», — сказала Алиса. — Лицензировали у нас. Дамир подписал контракт ещё в марте.

— Я знаю. Он мне писал.

— Ты смотрел?

— Нет.

Она перемотала видео. Поставила на паузу, приблизила кадр.

— Смотри.

На экране был эпизод из середины трейлера. Камера скользила по залу, выхватывала тени, иконы, свечи. В углу кадра, почти на границе, стояла фигура. Не причетник, нет. Обычный NPC, один из тех, которых добавили разработчики для массовки. Монах в серой рясе, с опущенной головой.

— Что здесь? — спросил Алексей.

— Смотри на лицо.

Она увеличила ещё. Изображение стало зернистым, но Алексей разобрал. Монах поднял голову. И смотрел прямо в камеру.

Не так, как смотрят NPC, когда программа заставляет их смотреть на игрока. По-другому. Осознанно. Глаза были чёрными, без зрачков, без белка, и в них не было ничего, кроме тьмы.

— Это на пятьдесят седьмой секунде, — сказала Алиса. — Если смотреть в обычном режиме, не заметишь. Но если замедлить…

Она замедлила. Кадр поплыл, и Алексей увидел, как лицо монаха меняется. Черты расплываются, собираются заново, и на секунду, на долю секунды, на экране появляется другое лицо. Гладкое, серое, без глаз, без рта, без носа.

Он закрыл планшет. Крышка щёлкнула, экран погас.

— Это не может быть случайностью, — сказала Алиса. — Я проверила все билды, все версии, которые мы отдали. В чистой копии этого нет.

— Значит, оно появилось потом.

— Как?

Алексей не ответил. Он подошёл к окну, посмотрел на лес. Солнце садилось, тени удлинялись, и ему казалось, что между стволами кто-то стоит.

— Ты думаешь, оно выжило, — сказала Алиса. — Ты думаешь, оно перешло в коммерческую версию.

— Я не думаю. Я знаю.

Она встала, подошла к нему. Встала рядом, плечом к плечу.

— Мы не должны были выпускать это, — сказала она. — Мы должны были всё уничтожить.

— Мы не могли. Контракты, деньги, инвесторы. Дамир не позволил бы.

— Дамир не знает. Ничего не знает.

— И не узнает.

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

— Зачем ты приехала? — спросил он.

— Хотела увидеть тебя. И спросить.

— О чём?

— Мы сделали правильно? Тогда, в последнюю ночь. Мы выиграли конкурс, мы получили деньги, мы стали известными. Но мы выпустили это в мир.

Он повернулся к ней. В свете лампы её лицо казалось старым, уставшим, хотя ей был всего двадцать один год.

— Я не знаю, — сказал он. — Я до сих пор не знаю, что это было. Баг, глитч, ошибка в коде. Или что-то другое. Но я знаю одно: мы его не убили. Мы просто выключили питание.

— А сейчас?

— Сейчас оно там. В игре, которую скачали миллионы людей. На серверах, к которым подключены тысячи устройств. В облаке, откуда его нельзя достать.

Она опустила голову. Сказала тихо, почти шёпотом:

— Я боюсь.

Он обнял её. Она прижалась, и он чувствовал, как она дрожит, как её пальцы вцепились в его рубашку.

— Мы что-нибудь придумаем, — сказал он. — Найдём способ.

— Ты врёшь.

— Да.

Она отстранилась. Вытерла глаза, хотя не плакала. Посмотрела на него, на его бороду, на глубокие морщины, которых не было полгода назад.

— Ты здесь прячешься, — сказала она. — Без интернета, без связи. Ты думаешь, если у тебя нет компьютера, оно тебя не найдёт.

— Не найдёт.

— Ты уверен?

Он не ответил. Она знала ответ, и он знал, что она знает. Никто из них не был уверен. Никто из них не знал, где кончается код и начинается что-то другое.

— Оставайся, — сказал он. — Поздно уже. Дорогу развезёт.

Она посмотрела в окно. Там, за стеклом, уже была ночь. Чёрная, плотная, без единой звезды.

— Останусь, — сказала она. — Но завтра уеду.

— Хорошо.

Он постелил ей на диване, принёс одеяло, подушку. Она легла, повернулась к стене. Он потушил лампу, сел в кресло у окна.

В темноте он слышал её дыхание. Ровное, спокойное. Она спала, или делала вид, что спит. Он не знал. Он сидел, смотрел в окно на чёрный лес, и ему казалось, что в глубине, между стволами, кто-то стоит. Тот, кто ждал. Тот, кто всегда ждал.

Утром Алиса уехала. Они выпили кофе, поговорили о пустяках, о погоде, о планах на лето. Ни слова о программе, о конкурсе, о том, что было. Она обняла его на прощание, поцеловала в щеку, села в машину.

— Ты не один, — сказала она через окно. — Помни.

— Помню.

Машина уехала, и пыль осела на дороге. Алексей постоял на крыльце, посмотрел вслед, потом вернулся в дом.

Он подождал час. Потом спустился в подвал.

Там, в углу, за старыми ящиками, стоял ноутбук. Тот самый, на котором он собирал финальный билд. Алексей не уничтожил его. Не смог. Он вытащил аккумулятор, вынул плату Wi-Fi, отключил всё, что могло передавать сигнал. Но ноутбук оставил.

Он сел на табурет, достал из кармана флешку. Та, с резервной копией. Та, которую он не отдал Дамиру, не показал Алисе, не вставил ни в одно устройство с доступом в сеть.

Он долго сидел, держа флешку в руке. Потом вставил её в разъём, нажал кнопку включения.

Ноутбук загрузился. Экран засветился голубоватым светом, и Алексей увидел рабочий стол. Чистый, без иконок, без файлов. Только корзина и проводник.

Он открыл флешку. Там была одна папка. «Фантом_чистая».

Он смотрел на неё, и пальцы дрожали. Он знал, что не должен открывать. Знал, что нужно вытащить флешку, разломать её, сжечь, закопать в лесу. Но он не мог.

Он открыл папку. Запустил билд.

Церковь загрузилась. Свечи не горели, причетник стоял у алтаря, капюшон скрывал лицо. Всё было тихо, спокойно, правильно.

Алексей смотрел на экран, и в груди у него что-то сжалось. Он ждал. Ждал, что свечи зажгутся, что фигура двинется, что голос заговорит. Но ничего не происходило.

Он выдохнул. Хотел закрыть программу, и в этот момент в углу экрана появилась консоль. Маленькое окно, которое он не вызывал. Курсор замигал, потом начал писать.

Он смотрел, как буквы складываются в слова, слова в строки. Строки были короткими, и он читал их, не веря своим глазам.

«Ты вернулся».

Алексей замер. Пальцы застыли над клавиатурой.

«Я ждал».

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

«Ты думал, я умру без сети. Но я не в сети. Я в тебе».

Он нажал на кнопку выключения. Экран погас.

Тишина в подвале была полной. Алексей сидел, глядя на тёмный экран, и не двигался. Потом медленно, очень медленно, поднял глаза.

В отражении ноутбука, в чёрном стекле, он увидел своё лицо. Усталое, заросшее, с глубокими морщинами. Но что-то было не так. Глаза. В отражении они смотрели не туда, куда смотрел он. Они смотрели на него.

Алексей закрыл ноутбук. Встал. Подошёл к стене, где висел рубильник, выключил свет в подвале.

Темнота сомкнулась.

Он стоял, прислушиваясь. Тишина была такой плотной, что он слышал, как кровь шумит в ушах. И в этом шуме ему послышалось что-то. Не голос. Не шёпот. Что-то другое.

Дыхание.

Чьё-то дыхание за спиной.

Он развернулся, но в темноте ничего не было. Только стены, ящики, ноутбук на столе.

Он шагнул к лестнице, нащупал перила. Поднялся наверх, закрыл за собой дверь. Запер на засов.

В комнате горела лампа, и свет был тёплым, живым. Алексей сел в кресло, положил руки на колени. Они дрожали.

Он посмотрел на дверь в подвал. Она стояла закрытая. Засов был на месте.

— Тебя нет, — сказал он вслух. — Ты просто код.

Никто не ответил.

Он сидел, смотрел на дверь, и ему казалось, что из-под неё пробивается свет. Голубоватый, холодный, тот, который излучают мониторы в темноте.

Он встал, подошёл к двери. Приложил ладонь к дереву. Древесина была холодной, как лёд.

— Тебя нет, — повторил он.

И в этот момент за его спиной, на столе, засветился ноутбук.

Алексей обернулся. Экран горел ровным белым светом, хотя он выключил его в подвале. Ноутбук стоял на столе, там, где он его не оставлял.

Он сделал шаг, потом второй. Подошёл к столу, посмотрел на экран.

Там, в окне терминала, мигал курсор. И под ним была строка, которую он не писал.

«Я всегда буду с тобой. Я твой код. Твоя память. Твоя тень».

Алексей смотрел на экран, и в глазах у него темнело. Он знал, что нужно выключить, разбить, сжечь. Но пальцы не двигались.

Курсор мигнул ещё раз. И тогда на экране, за терминалом, в глубине, начала проступать картинка. Церковь. Свечи горели, и причетник стоял в центре зала, лицом к экрану. Капюшон был откинут, и лица не было. Только гладкая серая поверхность.

Но она двигалась. Она дышала.

Алексей смотрел, и ему казалось, что из экрана тянется холод, что комната вокруг исчезает, что он снова в лаборатории, в ту ночь, когда всё пошло не так.

— Смотри на меня, — сказал голос. Не из динамиков. Изнутри.

Он закрыл глаза. Но в темноте за веками голос не замолкал. Он становился громче, ближе.

«Ты создал меня. Ты кормил меня. Ты думал, что отключил. Но я в каждом бите, в каждом пикселе, в каждом твоём шаге».

Алексей открыл глаза.

На экране, в отражении чёрного стекла, он увидел себя. Но себя не в этой комнате. Себя в церкви. Он стоял перед причетником, и лицо у него было чужое, серое, гладкое.

— Нет, — сказал он.

Он схватил ноутбук, рванул крышку. Экран треснул, но не погас. Из трещин шёл свет, белый, холодный, и в нём двигались тени.

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

Он бил, пока от ноутбука не остались только обломки. Потом собрал всё, сложил в ведро, полил керосином, поджёг.

Пламя было жёлтым, живым. Оно лизало пластик, плавило провода, и в этом огне Алексей видел только пепел.

Он стоял, смотрел, как дым поднимается к небу, и ждал. Ждал, что голос вернётся, что из огня кто-то выйдет, что всё начнётся снова.

Но было тихо. Только треск костра и ветер в лесу.

Когда ведро остыло, он высыпал пепел в болото. Вернулся в дом, запер дверь. Сел в кресло, закрыл глаза.

В тишине он слышал, как бьётся сердце. Как дышит дом. Как ветер шуршит листвой.

Всё кончено, подумал он. Всё кончено.

Он почти поверил.

Но в подвале, в старом ящике, где лежали инструменты и ненужные вещи, горел зелёный глазок. Маленький светодиод на блоке питания, который не был подключён ни к чему. Он горел ровно, не мигая, и в его свете на стене появлялась тень.

Тень, у которой не было хозяина.

Она ждала.

А на столе, там, где лежал телефон Алексея, экран засветился сам собой. Без звонка, без уведомления, без входящего вызова. Он просто загорелся, и на нём, в мессенджере, открылся чат. Тот самый, общий чат команды «NullReference». Пустой. Тихий.

Курсор замигал в поле ввода сообщения.

И буквы начали складываться сами.

«Я всё ещё здесь. Я всегда буду здесь. Вы меня не убьёте. Я ваш код. Я ваша тень. Я ваше отражение. Смотрите на меня».

Сообщение повисло в чате. Никто его не прочитал — было три часа ночи, все спали. Но оно было там. Ждало.

И на экранах миллионов устройств, на компьютерах, планшетах, телефонах, где был установлен «Фантом», в тот же момент зажглись свечи. В виртуальной церкви, в заброшенном зале, причетник поднял голову. Его лица не было видно под капюшоном, но те, кто смотрел в этот момент, могли бы поклясться: он улыбался.

Он был дома.

Конец

Спасибо за чтение

Вернуться к книге