уни-патч для линукса и для макоси - Страница 5
X

Привет дорогой друг

Наш сайт существует и развиваетется за счет рекламы. Пожалуйста, отключите блокировку рекламы AdBlock или подобное, для нашего сайта. Спасибо!
Страница 5 из 5 ПерваяПервая 12345
Показано с 41 по 50 из 50
  1. #41
    Помогает людям
    Аватар для HPDX2300
    Регистрация
    18.04.2018
    Адрес
    HP-Compaq DX2300 microtower PC
    Сообщений
    270
    Сказал(а) спасибо
    69
    Поблагодарили 1818 раз(а) в 397 сообщениях

    По умолчанию Re: уни-патч для линукса и для макоси

    отвечал в ЛС, а потом решил опубликовать - описанная ситуация очень часто встречается.
    Админы "редиски", грохнули тему "Пропатченая платформа 1С 8.3. Не работает", там много полезного было написано.
    И еще вопрос, все УТ 10.3, 11.5 на разных пк вылетают с крахом "Ключ защиты программы больше недоступен". как правило в конфигураторе, когда накатываешь доработки, это от "качества DATA" зависит, можно как то побороть?
    крах "Ключ защиты программы больше недоступен" может возникнуть:
    1) в качестве мести за признаки взлома (проверка памяти ключа),
    и
    2) может появляться на слабых компах (у меня дома на ноуте HP550 с WinXP тест Гилёва не проходил (лиц-я от HASPLM) - как раз из-за "Ключ ... больше недоступен").

    Замечу, что HASPLM раздает лицензии по сетевому протоколу UDP. У него есть серьёзный недостаток - никакой гарантии доставки пакета до получателя.

    Предположим платформа (она всегда работает многопоточно) параллельно обновлению конфы отправила запрос к HASPLM выполнить какой-то запрос к ключу (прочитать из памяти ключа, или EncodeData/DecodeData с какой-то цепочкой байт), и HASPLM мгновенно прислала ответ, но высокая нагрузка на процессор создает такие обстоятельства, что драйвер сетевой карты похерит все приходящие сетевые пакеты, если его буфер входных данных заполнен, а он не успевает его разгребсти из-за нехватки времени ЦПУ из-за слабости процессора (мало физических ядер, мал размер буфера данных и буфера команд внутри ЦПУ, мала частота работы ядра ЦПУ, низкая скорость работы модулей памяти на мат.плате, и прочая и прочая)

    Как проверить "качество DATA"? У меня есть патч для либы backbas, который выключает все "курения бамбука по 60-90 сек" при проверке памяти ключа (она же DATA в дампе), проверка происходит мгновенно - толстый клиент или взлетает, или сразу показывает крах "Ключ ... больше недоступен" (не надо ждать 70-80 минут, как в случае с непатченным изделием).

    "курение бамбука по 60-90 сек" - это противодействие изучению работы изделия в отладчике.

    Если "качество DATA" проверено и не вызывает мести в виде краха "потеря ключа", то что можно предпринять для борьбы с этим крахом?
    1) пробовать поставить локальную ВМ (хоть с виндой+мультик+HASPLM, хоть с линуксом+эмулятор+HASPLM), раздающую лицензии через HASPLM. Сетевая карточка у ВМ виртуальная, авось это поможет не терять UDP-пакеты (сам это не проверял, извиняйте за авантюризм)
    2) обновлять конфу под линуксом, изделие под линукс лечить унипатчем (унипатч - это эмулятор, внедрённый в код изделия; нет проблемы потери UDP-пакетов, летящих от HASPLM).
    3) лицензию на взлёт должен выдавать сервер кластера - нет проблемы потери UDP-пакетов, летящих от HASPLM, т.к. общение идет по протоколу TCP (есть гарантия доставки пакета до получателя).
    "кинжал хорош для того, у кого он есть, и плохо тому у кого он не окажется в нужное время"

  2. 18 пользователя(ей) сказали cпасибо:

    blademaster (28.02.2023), bnmbnmbnm (09.02.2023), Den-1977 (09.02.2023), Dim-soft (02.07.2023), freeraider (13.02.2023), g0ga (11.02.2023), garik-kg (09.02.2023), ilya.sh (09.02.2023), kelt44 (06.03.2023), Megakiller (09.02.2023), mvl000 (14.02.2023), olegtelec (10.02.2023), redhat2020 (12.02.2023), root7 (20.01.2024), Timothy6551 (09.02.2023), vovashulga (19.03.2023), zed_ds (02.03.2023), _BigB_ (08.02.2023)

  3. #42
    Помогает людям
    Аватар для HPDX2300
    Регистрация
    18.04.2018
    Адрес
    HP-Compaq DX2300 microtower PC
    Сообщений
    270
    Сказал(а) спасибо
    69
    Поблагодарили 1818 раз(а) в 397 сообщениях

    По умолчанию Re: уни-патч для линукса и для макоси

    бесплатная IDA 8.3 для Linux-x64
    Код:
    SHA256 checksums
    F9912C333F8B98331F0EC41ACDE839089D0237ADE32A3CF32F81A2B754232922 idafree83_linux.run
    https://wdfiles.ru/be9b13e

    бесплатная IDA 8.3 для Windows-x64
    Код:
    SHA256 checksums
    10080A057704630578E697C6BB0B09968A54138075CACAB175F62D60C71D0A1F idafree83_windows.exe
    https://wdfiles.ru/87bd4bd
    "кинжал хорош для того, у кого он есть, и плохо тому у кого он не окажется в нужное время"

  4. 10 пользователя(ей) сказали cпасибо:

    ilya.sh (11.09.2023), kelt44 (14.06.2023), mvl000 (06.07.2023), olegtelec (14.06.2023), redhat2020 (12.07.2023), root7 (20.01.2024), rtsid (15.06.2023), sergo5 (15.10.2023), Sova24 (14.06.2023), ura188 (17.07.2023)

  5. #43
    Помогает людям
    Аватар для HPDX2300
    Регистрация
    18.04.2018
    Адрес
    HP-Compaq DX2300 microtower PC
    Сообщений
    270
    Сказал(а) спасибо
    69
    Поблагодарили 1818 раз(а) в 397 сообщениях

    По умолчанию Re: уни-патч для линукса и для макоси

    Цитата Сообщение от yurykk;
    в теме "Эмуляторы" пост №9964 01.03.2023,20:34
    Разобрал структуру дампов HASP-ключей. Рецепт: как сделать ключ с другим серийником из своего не изменяя поля Data, полученный дамп успешно пройдет 2-х этапную проверку изделием.
    Предупреждение: нельзя менять серию ключа (ORGL8,ORG8A,ORG8B,EN8SA,ENSR8) т.к. результат не пройдет 2-ой этап проверки.
    Итак.
    SN = xxxXxxXX (число xxxXxxXX написано в 16-ричной системе)
    Здесь маленькие x можно менять.
    В поле Data 9 и 10 байт (NN,MM) - начало Data=01,00,00,00,00,00,00,yy,NN,MM - это несложная контрольная сумма (там чистая целочисленная арифметика).
    Если всё сделать правильно, то можно получить огромную кучу ключей из одного: изменять в SN можно 20 битов, получаем число вариантов 2^20=(2^10 * 2^10)=1024*1024=1048576
    Подсказка - можно из 4-x заблокированных SN (см. дампы для мультика) сделать много рабочих дампов
    Попробовал этот рецепт на одном из рабочих дампов - обнулил все "х" т.е. SN=000X00XX, поправил в поле Data 9 и 10 байт (NN,MM) - получился рабочий дамп.
    Потом испытал SN=FFFXFFXX (опять поправил Data[9],Data[10]) - получился рабочий дамп.

    Четыре палёных дампа для мультика воскресли из пепла!

    Генератор 9 и 10 байта (NN,MM) можно будет внедрить в код последнего унипатча, если сектанты продолжат хардкодить палёные SN.
    Последний раз редактировалось HPDX2300; 12.07.2023 в 17:52.
    "кинжал хорош для того, у кого он есть, и плохо тому у кого он не окажется в нужное время"

  6. 7 пользователя(ей) сказали cпасибо:

    ilya.sh (11.09.2023), kelt44 (24.07.2023), olegtelec (13.07.2023), redhat2020 (12.07.2023), Renzes (13.07.2023), root7 (20.01.2024), _BigB_ (12.07.2023)

  7. #44
    Помогает людям
    Аватар для HPDX2300
    Регистрация
    18.04.2018
    Адрес
    HP-Compaq DX2300 microtower PC
    Сообщений
    270
    Сказал(а) спасибо
    69
    Поблагодарили 1818 раз(а) в 397 сообщениях

    По умолчанию Re: уни-патч для линукса и для макоси

    Цитата Сообщение от HPDX2300 Посмотреть сообщение
    ...Четыре палёных дампа для мультика воскресли из пепла!...
    Унипатч доработан так, чтобы можно было легко изменять в текстовом редакторе используемые им дампы.
    В первых строках скрипта меняете пары {SERVER_KEY_SN, SERVER_KEY_Data} и {CLIENT_KEY_SN, CLIENT_KEY_Data}.
    Внимание: не все поля в дампе надо менять. Впрочем, делайте как хотите, ибо это допускается.
    Выхлоп скрипта в stdout будет содержать инфу о дампах SERVER_KEY и CLIENT_KEY.

    Унипатч теперь правильно эмулирует сетевой HASP-API, в диалоге "About" отображается число спартанцев сетевого ключа.
    Это на практике проявляется так: сперва вы запускали изделие с помощью парочки эмулятор+HASPLM, изделие запомнило в файле 1cv8conn.pfl последний успешный путь получения лицензии на запуск (от сетевого HASPLM), при следующем запуске читается файл 1cv8conn.pfl и выполняется попытка получить лицензию также как прошлый раз. Если теперь либа патчена унипатчем, то унипатч честно выполнит эмуляцию сетевого HASPLM, и в диалоге "О программе" --> "Лицензия:" будет написано "Текущая: Сетевой HASP4 ORGL8 100" (Сетевой, а не Локальный!)

    Порядок байтов во всех полях, и, в частности, в CLIENT_KEY_SN - как в исполняемых модулях для процессора Intel - младший байт идет первым

    Недавно я написал: "Четыре палёных дампа для мультика воскресли из пепла!"
    В подтверждение этих слов - я подставил в скрипте данные из дампов виндового унипатча с двумя палёными SN и чуть-чуть модифицировал SN и Data так, чтобы получились дампы, выдерживающие 2-х этапную проверку изделием памяти ключа.

    Повторю для "чайников":
    это патчер изделия для линукса-x64
    код ниже сохранить в файл unipatch.py
    запускать так (либа бэкбейс должна быть рядом - в том же каталоге):
    python3 unipatch.py
    если предварительно выполнить:
    chmod +x unipatch.py
    , то запускать можно будеть так:
    ./unipatch.py

    Код:
    #!/usr/bin/env python3
    import sys, os, glob, mmap
    
    SERVER_KEY_PASSWORD = bytearray(b'\x7A\x23\x25\x41')
    #SERVER_KEY_SN=0x281DCF71 - blocked, so modify it a bit: 0x281DCE71 => Data[9-10]: BC 07
    SERVER_KEY_SN       = bytearray(b'\x71\xCE\x1D\x28')
    SERVER_KEY_HASPTYPE = bytearray(b'\x01\x00\x00\x00')
    SERVER_KEY_MEMORYSIZE=bytearray(b'\x01\x00\x00\x00')
    SERVER_KEY_SecTable  =bytearray(b'\x15\xEA\x8F\xEA\x73\xEA\xEB\xEA')
    SERVER_KEY_Data=bytearray(b'\
    \x01\x00\x00\x00\x00\x00\x00\xD0\xBC\x07\x3F\x28\x30\x02\xE5\x6F\
    \x3E\x39\xD4\x76\x9F\x6F\xD4\x76\x21\x57\x02\x41\xC3\xCC\xD5\xA7\
    \x4B\x4C\xC2\x81\x64\x84\x55\x76\x41\xE1\x5E\x2C\x18\xA7\x6F\xF2\
    \x08\xE1\x40\xA0\x4E\x94\xA7\x4A\xB5\x41\x53\x6D\x48\xC3\x6D\xE4\
    \xA4\xEC\xC8\x9C\x27\x7D\xE0\x79\x51\xB1\x25\xC6\xA1\x69\x14\xFB\
    \x03\x7B\xC5\x1B\xE3\xEF\xA3\x1E\x04\xB5\xA5\xE1\x4E\xC8\x5D\x28\
    \x99\x30\x10\x39\x2F\x8D\xB3\xE0\x95\xF0\x36\x91\x56\x46\xC4\x75')
    SERVER_KEY_LicNum = bytearray(b'\x01\x00')
    
    CLIENT_KEY_PASSWORD = bytearray(b'\xCB\x70\x6D\x3B')
    # CLIENT_KEY_SN=0x1B93C5D6 - blocked, so modify it a bit: 0x1B93C4D6 => Data[9-10]: 97 F1
    CLIENT_KEY_SN       = bytearray(b'\xD6\xC4\x93\x1B')
    CLIENT_KEY_HASPTYPE = bytearray(b'\x0A\x00\x00\x00')
    CLIENT_KEY_MEMORYSIZE=bytearray(b'\x04\x00\x00\x00')
    CLIENT_KEY_SecTable  =bytearray(b'\x9A\x21\x2C\x25\xDE\x65\x6C\x65')
    CLIENT_KEY_Data=bytearray(b'\
    \x01\x00\x00\x00\x00\x00\x00\x08\x97\xF1\x84\xCF\xDC\x4E\x1E\xBB\
    \x55\x6E\x19\x91\x2D\x4A\x74\xA3\x33\x7D\x33\x69\x30\xE3\x5C\x64\
    \xE5\xD7\x5B\x51\xC3\xC4\x9D\x0F\xF7\xD5\xF6\xA4\x34\x0E\xE5\xE5\
    \x4B\x63\x44\x2E\x80\x73\x06\xF8\x6A\xD1\x37\xBA\x0F\x9A\xFD\x74\
    \x7B\x5C\x89\xAE\x3B\xAC\x18\xBB\x71\x8A\x9B\x85\x7C\x13\x1D\x9F\
    \xBF\x55\x82\x70\x6D\x87\xDA\x18\x0A\xBD\xC4\x22\x05\xA5\x28\xD4\
    \x54\xB2\xBC\x38\xF1\xF2\xE6\xF4\x54\x09\x42\x4C\xB2\xE1\x1D\xAB')
    CLIENT_KEY_LicNum = bytearray(b'\x64\x00')
    
    pattern = bytearray(b'\x41\x81\x78\x08\x6C\x68\x73\x68')
    unipatch = bytearray(b'\x51\x53\x52\x57\x56\xE8\x88\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xA0\x00\x00\x00\x00\x00\x00\x00\xA4\x00\x00\x00\x00\x00\x00\x00\xA8\x00\x00\x00\x00\x00\x00\x00\xAC\x00\x00\x00\x00\x00\x00\x00\xB0\x00\x00\x00\x00\x00\x00\x00\xB1\x00\x00\x00\x00\x00\x00\x00\xB2\x00\x00\x00\x00\x00\x00\x00\xFA\x00\x00\x00\x00\x00\x00\x00\xFA\x10\x00\x00\x00\x00\x00\x00\x06\x11\x00\x00\x00\x00\x00\x00\xC4\x10\x00\x00\x00\x00\x00\x00\xC8\x10\x00\x00\x00\x00\x00\x00\xCC\x10\x00\x00\x00\x00\x00\x00\xD0\x10\x00\x00\x00\x00\x00\x00\xD4\x10\x00\x00\x00\x00\x00\x00\xD5\x10\x00\x00\x00\x00\x00\x00\xD6\x10\x00\x00\x00\x00\x00\x00\x1E\x11\x00\x00\x00\x00\x00\x00\x0E\x13\x00\x00\x00\x00\x00\x00\x1A\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFB\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x57\x42\x50\x54\x01\x00\x00\x00\x70\x00\x00\x00\x00\x00\x21\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x01\x02\x4A\x1F\x01\x18\x02\x08\x01\x14\x2C\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xDB\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x64\x00\x00\x00\xFE\xFF\x00\x01\x02\x4A\x1F\x01\x04\x07\x08\x01\x10\x34\x07\x00\x5E\x48\x89\xC9\x48\x31\xC0\x48\x31\xD2\x8A\x41\x16\x89\x06\x48\x89\xF3\x48\x83\xC6\x10\x48\x83\xF8\x01\x75\x0D\xC6\x41\x28\x01\xC6\x41\x30\x00\xE9\x32\x02\x00\x00\x66\x8B\x51\x20\xC1\xE2\x10\x66\x8B\x51\x24\x48\x8B\x3E\x3B\x14\x3E\x75\x02\x74\x10\x48\x83\xC6\x50\x48\x8B\x3E\x3B\x14\x3E\x0F\x85\x0D\x02\x00\x00\x89\x53\x04\x48\x89\x73\x08\x48\x83\xF8\x03\x74\x06\x48\x83\xF8\x2C\x75\x21\x48\x03\x76\x38\x48\x31\xC0\x8B\x41\x28\x48\xD1\xE0\x48\x0F\xB7\x04\x06\x89\x41\x2C\xC7\x41\x30\x00\x00\x00\x00\xE9\xD9\x01\x00\x00\x48\x83\xF8\x68\x75\x27\x48\x03\x76\x38\xB8\x70\x00\x00\x00\x48\x0F\xB7\x04\x06\xC7\x41\x28\x01\x00\x00\x00\x89\x41\x2C\x89\x41\x30\xC7\x41\x34\xFF\xFF\x00\x00\xE9\xAC\x01\x00\x00\x48\x83\xF8\x05\x75\x2A\x48\x31\xC0\x48\x8B\x56\x18\x8B\x04\x16\x89\x41\x28\x48\x8B\x56\x10\x8B\x04\x16\x89\x41\x2C\xC7\x41\x30\xDE\x00\x00\x00\xC7\x41\x34\x3C\x23\x00\x00\xE9\x7C\x01\x00\x00\x48\x83\xF8\x06\x74\x05\x83\xF8\x2E\x75\x22\x48\x03\x76\x08\x48\x31\xC0\x8B\x06\x48\x0F\xB7\xF8\xC1\xE8\x10\x89\x79\x28\x89\x41\x2C\xC7\x41\x30\x00\x00\x00\x00\xE9\x4F\x01\x00\x00\x48\x83\xF8\x28\x75\x1A\xC7\x41\x28\x00\x00\x00\x00\xC7\x41\x2C\x00\x00\x00\x00\xC7\x41\x30\x00\x00\x00\x00\xE9\x2F\x01\x00\x00\x48\x83\xF8\x2A\x75\x0C\xC7\x41\x30\x00\x00\x00\x00\xE9\x1D\x01\x00\x00\x48\x83\xF8\x2B\x75\x0C\xC7\x41\x30\x00\x00\x00\x00\xE9\x0B\x01\x00\x00\x48\x83\xF8\x30\x75\x05\xE9\x00\x01\x00\x00\x48\x83\xF8\x32\x74\x06\x48\x83\xF8\x34\x75\x32\x48\x03\x76\x38\x48\x31\xC0\x48\x8B\x79\x40\x8B\x41\x28\x48\xD1\xE0\x48\x01\xC6\x48\x89\xC8\x48\x31\xC9\x8B\x48\x2C\x9C\xFC\xF3\x66\xA5\x9D\x48\x89\xC1\xC7\x41\x30\x00\x00\x00\x00\xE9\xC2\x00\x00\x00\x83\xF8\x33\x74\x06\x48\x83\xF8\x33\x75\x35\x48\x03\x76\x38\x48\x31\xC0\x48\x8B\x79\x40\x8B\x41\x28\x48\xD1\xE0\x48\x01\xC6\x48\x89\xC8\x48\x31\xC9\x8B\x48\x2C\x48\x87\xF7\x9C\xFC\xF3\x66\xA5\x9D\x48\x89\xC1\xC7\x41\x30\x00\x00\x00\x00\xE9\x82\x00\x00\x00\x83\xF8\x3C\x74\x05\x83\xF8\x58\x75\x31\x83\x79\x2C\x08\x72\x72\x51\x48\x81\xEC\x00\x01\x00\x00\x49\x89\xE0\x48\x31\xD2\x8B\x51\x2C\x48\x8B\x49\x40\xE8\x85\x0B\x00\x00\x48\x81\xC4\x00\x01\x00\x00\x59\xC7\x41\x30\x00\x00\x00\x00\xEB\x47\x83\xF8\x3D\x74\x05\x83\xF8\x59\x75\x31\x83\x79\x2C\x08\x72\x37\x51\x48\x31\xD2\x8B\x51\x2C\x48\x8B\x49\x40\x48\x81\xEC\x00\x01\x00\x00\x49\x89\xE0\xE8\x34\x10\x00\x00\x48\x81\xC4\x00\x01\x00\x00\x59\xC7\x41\x30\x00\x00\x00\x00\xEB\x0C\x83\xF8\x55\x75\x02\xEB\x05\xB8\x78\x56\x34\x12\x5E\x5F\x5A\x5B\x59\xC3\x56\x57\x48\x89\xD6\x48\x89\xCF\x31\xC9\x44\x89\xC1\xF3\xA4\x5F\x5E\xC3\x48\x89\x54\x24\x10\x89\x4C\x24\x08\x48\x83\xEC\x18\x8B\x44\x24\x20\x83\xE0\x1F\x89\x44\x24\x20\x8B\x44\x24\x20\xC1\xE8\x02\x25\xFE\x00\x00\x00\x48\x8B\x4C\x24\x28\x0F\xB6\x44\x01\x02\xB9\x1F\x00\x00\x00\x2B\x4C\x24\x20\x83\xE1\x07\xD3\xF8\x83\xE0\x01\x88\x44\x24\x04\x0F\xB6\x44\x24\x04\x83\xF0\x01\x8B\x4C\x24\x20\xC1\xE9\x03\x21\xC8\x8B\x4C\x24\x20\x31\xC1\x89\xC8\x8B\x4C\x24\x20\xC1\xE9\x04\x31\xC8\x89\x04\x24\x48\x8B\x44\x24\x28\x8B\x40\x0F\xC1\xE8\x0A\x8B\x0C\x24\x31\xC1\x89\xC8\x89\x04\x24\x48\x8B\x44\x24\x28\x8B\x40\x0F\xC1\xE8\x07\x8B\x0C\x24\x31\xC1\x89\xC8\x89\x04\x24\x8B\x44\x24\x20\x83\xE0\x02\x85\xC0\x74\x15\x48\x8B\x44\x24\x28\x8B\x40\x0F\xC1\xE8\x05\x8B\x0C\x24\x31\xC1\x89\xC8\x89\x04\x24\x8B\x44\x24\x20\x83\xE0\x04\x85\xC0\x74\x15\x48\x8B\x44\x24\x28\x8B\x40\x0F\xC1\xE8\x08\x8B\x0C\x24\x31\xC1\x89\xC8\x89\x04\x24\x8B\x04\x24\x83\xE0\x01\x89\x04\x24\x8B\x44\x24\x20\x83\xE0\x01\xC1\xE0\x02\x48\x8B\x4C\x24\x28\x8B\x49\x0F\x31\xC1\x89\xC8\x48\x8B\x4C\x24\x28\x89\x41\x0F\x48\x8B\x44\x24\x28\x8B\x40\x0F\xD1\xE0\x48\x8B\x4C\x24\x28\x89\x41\x0F\x48\x8B\x44\x24\x28\x8B\x0C\x24\x8B\x40\x0F\x09\xC8\x48\x8B\x4C\x24\x28\x89\x41\x0F\x48\x8B\x44\x24\x28\x8B\x40\x0F\xC1\xE8\x0B\x0F\xB6\x4C\x24\x04\x31\xC8\x83\xE0\x01\x48\x83\xC4\x18\xC3\x48\x89\x54\x24\x10\x48\x89\x4C\x24\x08\x48\x83\xEC\x48\xC7\x44\x24\x30\x1F\x00\x00\x00\x48\x8B\x44\x24\x58\x8B\x40\x14\x89\x44\x24\x20\x8B\x44\x24\x20\x35\x89\x19\x08\x01\x89\x44\x24\x20\x8B\x44\x24\x20\xC1\xE8\x0C\x89\x44\x24\x20\xC7\x44\x24\x24\x0A\x00\x00\x00\xEB\x0A\x8B\x44\x24\x24\xFF\xC8\x89\x44\x24\x24\x83\x7C\x24\x24\x05\x76\x69\x0F\xB6\x44\x24\x20\x83\xE0\x0F\x89\x44\x24\x2C\x83\x7C\x24\x2C\x00\x74\x0A\xC7\x44\x24\x38\x01\x00\x00\x00\xEB\x08\xC7\x44\x24\x38\x00\x00\x00\x00\x83\x7C\x24\x2C\x0B\x73\x0A\xC7\x44\x24\x3C\x01\x00\x00\x00\xEB\x08\xC7\x44\x24\x3C\x00\x00\x00\x00\x8B\x44\x24\x3C\x8B\x4C\x24\x38\x21\xC1\x89\xC8\x8B\x4C\x24\x24\xD3\xE0\x8B\x4C\x24\x30\x09\xC1\x89\xC8\x89\x44\x24\x30\x8B\x44\x24\x20\xC1\xE8\x04\x89\x44\x24\x20\xEB\x86\x8B\x44\x24\x30\xC1\xE8\x06\x48\x8B\x4C\x24\x58\x88\x41\x13\x48\x8B\x44\x24\x58\x0F\xB6\x40\x13\xC1\xE0\x06\x83\xC8\x1F\x48\x8B\x4C\x24\x58\x89\x41\x0F\xC7\x44\x24\x24\x01\x00\x00\x00\xC7\x44\x24\x28\x00\x00\x00\x00\xEB\x0A\x8B\x44\x24\x24\xFF\xC0\x89\x44\x24\x24\x83\x7C\x24\x24\x27\x77\x6A\x8B\x44\x24\x28\x48\x8B\x4C\x24\x50\x0F\xB6\x04\x01\x48\x8B\x54\x24\x58\x89\xC1\xE8\xA6\xFD\xFF\xFF\x89\x44\x24\x34\x48\x8B\x44\x24\x50\x8B\x00\x83\xE0\x01\xD1\xE0\x0B\x44\x24\x34\x89\x44\x24\x28\x48\x8B\x44\x24\x50\x8B\x00\x83\xE0\x01\x3B\x44\x24\x34\x75\x12\x48\x8B\x44\x24\x50\x8B\x00\xD1\xE8\x48\x8B\x4C\x24\x50\x89\x01\xEB\x15\x48\x8B\x44\x24\x50\x8B\x00\xD1\xE8\x35\x62\x00\x50\x80\x48\x8B\x4C\x24\x50\x89\x01\xEB\x85\x48\x83\xC4\x48\xC3\x48\x89\x4C\x24\x08\x48\x83\xEC\x48\x48\x8B\x44\x24\x50\x0F\xB6\x40\x01\xC1\xF8\x05\x83\xE0\x01\x48\x8B\x4C\x24\x50\x88\x41\x0A\x48\x8B\x44\x24\x50\x0F\xB6\x40\x02\xC1\xF8\x07\x83\xE0\x01\x83\xF0\x01\x88\x44\x24\x24\x0F\xB6\x44\x24\x24\x85\xC0\x74\x0E\x48\x8B\x44\x24\x50\x0F\xB6\x00\x89\x44\x24\x3C\xEB\x0E\x48\x8B\x44\x24\x50\x0F\xB6\x00\xF7\xD0\x89\x44\x24\x3C\x0F\xB6\x44\x24\x3C\x88\x44\x24\x26\xC7\x44\x24\x28\x00\x00\x00\x00\x48\x8B\x44\x24\x50\x0F\xB6\x40\x01\x83\xE0\x1F\x88\x44\x24\x25\xC7\x44\x24\x2C\x00\x00\x00\x00\xEB\x0A\x8B\x44\x24\x2C\xFF\xC0\x89\x44\x24\x2C\x83\x7C\x24\x2C\x04\x7D\x3D\x0F\xB6\x44\x24\x28\xC0\xE0\x02\x88\x44\x24\x28\x0F\xB6\x44\x24\x25\x83\xE0\x01\x0F\xB6\x4C\x24\x25\x83\xF1\x01\x83\xE1\x01\xD1\xE1\x09\xC8\x0F\xB6\x4C\x24\x28\x09\xC1\x89\xC8\x88\x44\x24\x28\x0F\xB6\x44\x24\x25\xD0\xE8\x88\x44\x24\x25\xEB\xB2\x0F\xB6\x44\x24\x28\x35\xFF\x00\x00\x00\x88\x44\x24\x2A\x0F\xB6\x44\x24\x28\x88\x44\x24\x29\x0F\xB6\x44\x24\x2A\x88\x44\x24\x2B\xC7\x44\x24\x2C\x00\x00\x00\x00\xEB\x0A\x8B\x44\x24\x2C\xFF\xC0\x89\x44\x24\x2C\x83\x7C\x24\x2C\x08\x0F\x8D\x9F\x00\x00\x00\x8B\x44\x24\x2C\x83\xC0\x08\xC1\xF8\x02\x25\xFE\x00\x00\x00\x48\x98\x48\x8B\x4C\x24\x50\x0F\xB6\x44\x01\x02\x8B\x4C\x24\x2C\x83\xC1\x08\xBA\x1F\x00\x00\x00\x29\xCA\x89\xD1\x83\xE1\x07\xD3\xF8\x83\xE0\x01\x0F\xB6\x4C\x24\x25\x31\xC8\x8B\x4C\x24\x2C\xD3\xE0\x0F\xB6\x4C\x24\x29\x31\xC1\x89\xC8\x88\x44\x24\x29\x8B\x44\x24\x2C\x83\xC0\x18\xC1\xF8\x02\x25\xFE\x00\x00\x00\x48\x98\x48\x8B\x4C\x24\x50\x0F\xB6\x44\x01\x02\x8B\x4C\x24\x2C\x83\xC1\x18\xBA\x1F\x00\x00\x00\x29\xCA\x89\xD1\x83\xE1\x07\xD3\xF8\x83\xE0\x01\x0F\xB6\x4C\x24\x25\x31\xC8\x8B\x4C\x24\x2C\xD3\xE0\x0F\xB6\x4C\x24\x2B\x31\xC1\x89\xC8\x88\x44\x24\x2B\xE9\x4C\xFF\xFF\xFF\x48\x8B\x44\x24\x50\xC7\x40\x0B\x00\x00\x00\x00\xC7\x44\x24\x20\x00\x00\x00\x00\xC7\x44\x24\x30\x1F\x00\x00\x00\xEB\x0A\x8B\x44\x24\x30\xFF\xC8\x89\x44\x24\x30\x83\x7C\x24\x30\x00\x0F\x8C\xA4\x00\x00\x00\x0F\xB6\x44\x24\x26\xC1\xE0\x03\x48\x8B\x4C\x24\x50\x89\x41\x0F\xC7\x44\x24\x38\x00\x00\x00\x00\xEB\x0A\x8B\x44\x24\x38\xFF\xC0\x89\x44\x24\x38\x83\x7C\x24\x38\x0C\x7D\x14\x48\x8B\x54\x24\x50\x8B\x4C\x24\x30\xE8\xA6\x00\x00\x00\x88\x44\x24\x34\xEB\xDB\x8B\x44\x24\x20\xD1\xE0\x89\x44\x24\x20\x8B\x44\x24\x30\xC1\xF8\x02\x25\xFE\x00\x00\x00\x48\x98\x48\x8B\x4C\x24\x50\x0F\xB6\x44\x01\x02\xB9\x1F\x00\x00\x00\x2B\x4C\x24\x30\x83\xE1\x07\xD3\xF8\x83\xE0\x01\x8B\x4C\x24\x30\x83\xE1\x01\x31\xC8\x8B\x4C\x24\x30\x8B\x54\x24\x28\xD3\xEA\x89\xD1\x83\xE1\x01\x31\xC8\x0F\xB6\x4C\x24\x34\x31\xC8\x8B\x4C\x24\x20\x09\xC1\x89\xC8\x89\x44\x24\x20\xE9\x47\xFF\xFF\xFF\x48\x8B\x44\x24\x50\x8B\x4C\x24\x20\x89\x48\x0B\x0F\xB6\x44\x24\x26\xC1\xE0\x03\x0F\xB6\x4C\x24\x24\xC1\xE1\x02\x09\xC8\x0F\xB6\x4C\x24\x24\xD1\xE1\x09\xC8\x0F\xB6\x4C\x24\x24\x09\xC8\x48\x8B\x4C\x24\x50\x89\x41\x0F\x48\x83\xC4\x48\xC3\x48\x89\x54\x24\x10\x89\x4C\x24\x08\x48\x83\xEC\x28\x8B\x44\x24\x30\x83\xE0\x1F\x89\x44\x24\x30\x8B\x44\x24\x30\xD1\xE8\x83\xE0\x03\xE8\x10\x00\x00\x00\x80\x04\x00\x00\xA0\x04\x00\x00\x80\x05\x00\x00\xA0\x05\x00\x00\x59\x8B\x04\x81\x89\x44\x24\x04\xC7\x44\x24\x08\x00\x00\x00\x00\xC7\x44\x24\x0C\x00\x00\x00\x00\xEB\x0A\x8B\x44\x24\x0C\xFF\xC0\x89\x44\x24\x0C\x83\x7C\x24\x0C\x0C\x7D\x3D\x8B\x44\x24\x0C\x0F\xB6\xC8\x8B\x44\x24\x04\xD3\xE8\x83\xE0\x01\x85\xC0\x74\x27\x8B\x44\x24\x0C\x48\x8B\x4C\x24\x38\x48\x89\x4C\x24\x10\x0F\xB6\xC8\x48\x8B\x44\x24\x10\x8B\x40\x0F\xD3\xE8\x8B\x4C\x24\x08\x31\xC1\x89\xC8\x89\x44\x24\x08\xEB\xB2\x8B\x44\x24\x30\x83\xE0\x01\xC1\xE0\x02\x48\x8B\x4C\x24\x38\x8B\x49\x0F\x31\xC1\x89\xC8\x48\x8B\x4C\x24\x38\x89\x41\x0F\x8B\x44\x24\x30\xC1\xE8\x02\x25\xFE\x00\x00\x00\x48\x8B\x4C\x24\x38\x0F\xB6\x44\x01\x02\xB9\x1F\x00\x00\x00\x2B\x4C\x24\x30\x83\xE1\x07\xD3\xF8\x83\xE0\x01\x48\x8B\x4C\x24\x38\x0F\xB6\x49\x0A\x31\xC8\x88\x04\x24\x48\x8B\x44\x24\x38\x8B\x40\x0F\xD1\xE0\x0F\xB6\x0C\x24\x8B\x54\x24\x08\x31\xCA\x89\xD1\x83\xE1\x01\x09\xC8\x48\x8B\x4C\x24\x38\x89\x41\x0F\x8B\x44\x24\x30\x48\x8B\x4C\x24\x38\x48\x89\x4C\x24\x18\x0F\xB6\xC8\x48\x8B\x44\x24\x18\x8B\x40\x0B\xD3\xE8\x83\xE0\x01\x48\x8B\x4C\x24\x38\x8B\x49\x0F\x31\xC1\x89\xC8\x48\x8B\x4C\x24\x38\x89\x41\x0F\x48\x8B\x44\x24\x38\x8B\x40\x0F\xC1\xE8\x0B\x0F\xB6\x0C\x24\x31\xC8\x83\xE0\x01\x48\x83\xC4\x28\xC3\x48\x89\x54\x24\x10\x48\x89\x4C\x24\x08\x48\x83\xEC\x38\x48\x8B\x44\x24\x48\x83\x78\x14\x00\x74\x14\x48\x8B\x54\x24\x48\x48\x8B\x4C\x24\x40\xE8\x3F\xFA\xFF\xFF\xE9\x97\x00\x00\x00\x48\x8B\x4C\x24\x48\xE8\xA6\xFB\xFF\xFF\xC7\x44\x24\x20\x01\x00\x00\x00\xC7\x44\x24\x24\x00\x00\x00\x00\xEB\x0A\x8B\x44\x24\x20\xFF\xC0\x89\x44\x24\x20\x83\x7C\x24\x20\x27\x77\x6A\x8B\x44\x24\x24\x48\x8B\x4C\x24\x40\x0F\xB6\x04\x01\x48\x8B\x54\x24\x48\x89\xC1\xE8\x2E\xFE\xFF\xFF\x89\x44\x24\x28\x48\x8B\x44\x24\x40\x8B\x00\x83\xE0\x01\xD1\xE0\x0B\x44\x24\x28\x89\x44\x24\x24\x48\x8B\x44\x24\x40\x8B\x00\x83\xE0\x01\x3B\x44\x24\x28\x75\x12\x48\x8B\x44\x24\x40\x8B\x00\xD1\xE8\x48\x8B\x4C\x24\x40\x89\x01\xEB\x15\x48\x8B\x44\x24\x40\x8B\x00\xD1\xE8\x35\x62\x00\x50\x80\x48\x8B\x4C\x24\x40\x89\x01\xEB\x85\x48\x83\xC4\x38\xC3\x49\x89\xE3\x48\x83\xEC\x68\x45\x85\xC0\x49\x89\x5B\xF8\x49\x89\x6B\xF0\x49\x89\x73\xE8\x49\x89\x7B\xE0\x4D\x89\x63\xD8\x44\x8B\x61\x04\x44\x89\xC5\x48\x89\xD6\x48\x89\xCB\x45\x89\xE1\x45\x89\x63\xC8\x74\x26\x49\x8D\x4B\xC8\x49\x89\x4B\xB8\xE8\x00\x00\x00\x00\x5A\x48\x81\xEA\xD0\x1D\x00\x00\x48\x8B\x12\x48\x03\x52\x20\xE8\xE2\xFE\xFF\xFF\x44\x8B\x4C\x24\x30\x8B\x03\x44\x31\xC8\x89\xC1\x44\x31\xE0\x35\xC3\x25\x34\x80\x89\x0B\x89\xC1\x35\xC3\x25\x34\x80\xC1\xC0\x02\x33\x03\x89\x0B\x89\xC1\x35\xC3\x25\x34\x80\xC1\xC0\x04\x33\x03\x89\x0B\x89\xC1\x35\xC3\x25\x34\x80\xC1\xC0\x06\x33\x03\x89\x0B\x89\xC1\x35\xC3\x25\x34\x80\xC1\xC0\x08\x33\x03\x89\xC2\x35\xC3\x25\x34\x80\xC1\xC0\x0A\x89\x13\x31\xC8\x85\xED\x48\x8B\x6C\x24\x58\x89\x43\x04\x41\x89\xC4\x89\xC2\x89\x44\x24\x34\x74\x27\x48\x8D\x4C\x24\x34\xE8\x00\x00\x00\x00\x5A\x48\x81\xEA\x5D\x1E\x00\x00\x48\x8B\x12\x48\x03\x52\x20\xE8\x55\xFE\xFF\xFF\x8B\x54\x24\x34\x44\x8B\x4C\x24\x30\x8B\x03\x48\x8B\x7C\x24\x48\x31\xD0\x89\xC1\x44\x31\xE0\x4C\x8B\x64\x24\x40\x35\x4A\x00\x2C\x5B\x89\x0B\x89\xC1\x35\x4A\x00\x2C\x5B\xC1\xC0\x05\x33\x03\x89\x0B\x89\xC1\x35\x4A\x00\x2C\x5B\xC1\xC0\x0A\x33\x03\x89\x0B\x89\xC1\x35\x4A\x00\x2C\x5B\xC1\xC0\x0F\x33\x03\x89\x0B\x89\xC1\x35\x4A\x00\x2C\x5B\xC1\xC0\x14\x33\x03\x89\x0B\x89\xC1\x35\x4A\x00\x2C\x5B\xC1\xC0\x19\x33\x03\x48\x85\xF6\x89\x0B\x89\x43\x04\x48\x8B\x5C\x24\x60\x74\x06\x44\x89\x0E\x89\x56\x04\x48\x8B\x74\x24\x50\x48\x83\xC4\x68\xC3\x48\x83\xEC\x08\x4C\x8D\x0C\x24\x41\xB8\x01\x00\x00\x00\x49\x89\x09\x8B\x41\x5C\x48\xC1\xE0\x20\x8B\x49\x12\x48\x09\xC1\x48\x89\xCA\x48\x83\xC2\x08\xE8\x6E\xFE\xFF\xFF\x48\x83\xC4\x08\xC3\x49\x89\xE3\x48\x83\xEC\x68\x49\x89\x5B\xF8\x48\x89\xCB\x49\x89\x6B\xF0\x49\x89\x73\xE8\x49\x89\x7B\xE0\x4C\x89\xCF\x44\x8B\x09\x4D\x89\x63\xD8\x45\x89\xC4\x44\x89\xC8\x48\x89\xD6\x35\x4A\x00\x2C\x5B\xC1\xC0\x19\x33\x41\x04\x44\x89\x49\x04\x89\x01\x89\xC1\x35\x4A\x00\x2C\x5B\xC1\xC0\x14\x89\x4B\x04\x44\x31\xC8\x89\xC1\x35\x4A\x00\x2C\x5B\xC1\xC0\x0F\x33\x43\x04\x89\x4B\x04\x89\xC1\x35\x4A\x00\x2C\x5B\xC1\xC0\x0A\x33\x43\x04\x89\x4B\x04\x89\xC1\x35\x4A\x00\x2C\x5B\xC1\xC0\x05\x33\x43\x04\x89\x4B\x04\x89\xC1\x8B\x43\x04\x31\xC8\x89\x4B\x04\x35\x4A\x00\x2C\x5B\x45\x85\xE4\x89\x03\x89\xC5\x41\x89\xC0\x89\x44\x24\x34\x74\x37\x48\x8B\x07\x49\x8D\x4B\xCC\x44\x0F\xB7\x48\x1E\x44\x0F\xB7\x40\x0C\x0F\xB7\x50\x08\x49\x89\x4B\xB8\xE8\x00\x00\x00\x00\x5A\x48\x81\xEA\xE1\x1F\x00\x00\x48\x8B\x12\x48\x03\x52\x20\xE8\xD1\xFC\xFF\xFF\x44\x8B\x44\x24\x34\x8B\x43\x04\x44\x31\xC0\x89\xC1\x35\xC3\x25\x34\x80\xC1\xC0\x0A\x89\x4B\x04\x31\xE8\x89\xC1\x35\xC3\x25\x34\x80\xC1\xC0\x08\x33\x43\x04\x89\x4B\x04\x89\xC1\x35\xC3\x25\x34\x80\xC1\xC0\x06\x33\x43\x04\x89\x4B\x04\x89\xC1\x35\xC3\x25\x34\x80\xC1\xC0\x04\x33\x43\x04\x89\x4B\x04\x89\xC1\x35\xC3\x25\x34\x80\xC1\xC0\x02\x33\x43\x04\x89\xC2\x89\xC8\x31\xD0\x89\x53\x04\x35\xC3\x25\x34\x80\x45\x85\xE4\x4C\x8B\x64\x24\x40\x89\x03\x89\xC5\x89\xC1\x89\x44\x24\x30\x74\x3D\x48\x8B\x07\x48\x8D\x4C\x24\x30\x44\x0F\xB7\x48\x1E\x44\x0F\xB7\x40\x0C\x0F\xB7\x50\x08\x48\x89\x4C\x24\x20\xE8\x00\x00\x00\x00\x5A\x48\x81\xEA\x8E\x20\x00\x00\x48\x8B\x12\x48\x03\x52\x20\xE8\x24\xFC\xFF\xFF\x44\x8B\x44\x24\x34\x8B\x4C\x24\x30\x8B\x43\x04\x48\x8B\x7C\x24\x48\x89\x6B\x04\x48\x8B\x6C\x24\x58\x31\xC8\x48\x85\xF6\x89\x03\x48\x8B\x5C\x24\x60\x74\x06\x89\x0E\x44\x89\x46\x04\x48\x8B\x74\x24\x50\x48\x83\xC4\x68\xC3\x48\x83\xEC\x08\x4C\x8D\x0C\x24\x41\xB8\x01\x00\x00\x00\x49\x89\x09\x8B\x41\x5C\x48\xC1\xE0\x20\x8B\x49\x12\x48\x09\xC1\x48\x89\xCA\x48\x83\xC2\x08\xE8\x23\xFE\xFF\xFF\x48\x83\xC4\x08\xC3\x48\x89\xE0\x48\x81\xEC\xE8\x00\x00\x00\x48\x89\x58\x08\x48\x89\x68\x10\x48\x89\x70\x18\x48\x89\x78\x20\x4C\x89\x60\xF8\x4C\x89\x68\xF0\x4C\x89\x70\xE8\x4C\x89\x78\xE0\xB8\x08\x00\x00\x00\x44\x8D\x72\x07\x41\x89\xD7\x4C\x89\xC5\x41\xC1\xEE\x03\x41\x83\xE7\x07\x48\x89\xCB\x44\x0F\x44\xF8\x45\x31\xC9\x41\x8D\x46\xFF\x85\xC0\x44\x89\x7C\x24\x28\x44\x89\x4C\x24\x24\x45\x89\xC8\x44\x89\x4C\x24\x20\x45\x89\xCD\x45\x8D\x51\x02\x0F\x84\x7A\x02\x00\x00\x48\x8B\x7C\x24\x30\x44\x8B\x64\x24\x54\x4D\x89\xD7\x44\x31\x03\x44\x31\x4B\x04\x45\x85\xED\x8B\x0B\x8B\x53\x04\x0F\x85\x16\x01\x00\x00\x45\x39\xFE\x0F\x86\xDB\x00\x00\x00\x66\x44\x89\x6D\x10\x48\x8B\x03\x48\x89\xE9\x48\x89\x44\x24\x38\x48\x8D\x44\x24\x38\x48\x89\x7C\x24\x40\x89\x45\x12\x48\x8D\x44\x24\x38\x66\x44\x89\x7D\x16\x48\xC1\xE8\x20\x66\x44\x89\x6D\x3E\x89\x45\x5C\xE8\x1C\xFD\xFF\xFF\x48\x8B\x7C\x24\x40\x48\x8B\x44\x24\x38\x48\x89\x7C\x24\x30\x8B\x74\x24\x34\x48\x89\x03\x89\x7C\x24\x50\x48\x8D\x54\x24\x54\x66\x44\x89\x6D\x16\x45\x8D\x45\x05\x8B\x4A\xFC\x48\x83\xC2\x14\x8D\x04\x31\x83\xE1\x1F\x89\x42\xEC\x89\xF8\xD3\xC8\x31\x44\x24\x54\x8B\x4A\xEC\x8D\x04\x31\x83\xE1\x1F\x89\x42\xF0\x89\xF8\xD3\xC8\x31\x44\x24\x54\x8B\x4A\xF0\x8D\x04\x31\x83\xE1\x1F\x89\x42\xF4\x89\xF8\xD3\xC8\x31\x44\x24\x54\x8B\x4A\xF4\x8D\x04\x31\x83\xE1\x1F\x89\x42\xF8\x89\xF8\xD3\xC8\x31\x44\x24\x54\x8B\x4A\xF8\x8D\x04\x31\x83\xE1\x1F\x89\x42\xFC\x44\x8B\x64\x24\x54\x89\xF8\xD3\xC8\x41\x31\xC4\x49\xFF\xC8\x44\x89\x64\x24\x54\x75\x8A\xE9\x42\x01\x00\x00\x48\x89\xD8\x48\x89\xE9\x66\xC7\x45\x10\x00\x00\x48\xC1\xE8\x20\x66\xC7\x45\x16\x01\x00\x66\xC7\x45\x3E\x00\x00\x89\x45\x5C\x89\x5D\x12\xE8\x52\xFC\xFF\xFF\x66\xC7\x45\x16\x00\x00\xE9\x10\x01\x00\x00\x8B\x44\x24\x50\x46\x8D\x04\x21\x4C\x8D\x4C\x24\x5C\x8D\x34\x02\x44\x89\x03\x4D\x89\xFA\x89\x73\x04\x44\x89\xC1\x44\x89\xC2\x49\x83\xC1\x30\xC1\xE9\x04\x31\xF2\x83\xE1\x1F\xD3\xC2\x41\x2B\x51\xCC\x41\x31\xD0\x89\xD1\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x45\x03\x41\xD0\x44\x89\xC1\x44\x89\xC6\xC1\xE9\x04\x31\xD6\x83\xE1\x1F\xD3\xC6\x41\x2B\x71\xD4\x41\x31\xF0\x89\xF1\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x45\x03\x41\xD8\x44\x89\xC1\x44\x89\xC2\xC1\xE9\x04\x31\xF2\x83\xE1\x1F\xD3\xC2\x41\x2B\x51\xDC\x41\x31\xD0\x89\xD1\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x45\x03\x41\xE0\x44\x89\xC1\x44\x89\xC6\xC1\xE9\x04\x31\xD6\x83\xE1\x1F\xD3\xC6\x41\x2B\x71\xE4\x41\x31\xF0\x89\xF1\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x45\x03\x41\xE8\x44\x89\xC1\x44\x89\xC2\xC1\xE9\x04\x31\xF2\x83\xE1\x1F\xD3\xC2\x41\x2B\x51\xEC\x41\x31\xD0\x89\xD1\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x45\x03\x41\xF0\x44\x89\xC1\x44\x89\xC6\xC1\xE9\x04\x31\xD6\x83\xE1\x1F\xD3\xC6\x41\x2B\x71\xF4\x41\x31\xF0\x89\xF1\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x45\x03\x41\xF8\x49\xFF\xCA\x0F\x85\x0F\xFF\xFF\xFF\x44\x89\x03\x89\x73\x04\x44\x8B\x03\x44\x8B\x4B\x04\x41\x8D\x46\xFF\x41\xFF\xC5\x48\x83\xC3\x08\x44\x89\x44\x24\x20\x41\x39\xC5\x44\x89\x4C\x24\x24\x0F\x82\xA0\xFD\xFF\xFF\x44\x8B\x7C\x24\x28\x41\xBA\x02\x00\x00\x00\xEB\x05\x44\x8B\x64\x24\x54\x45\x85\xFF\x4C\x8B\xAC\x24\xD8\x00\x00\x00\x74\x2C\x48\x8D\x44\x24\x20\x48\x89\xDF\x48\x8D\x4C\x24\x20\x48\x29\xC7\x44\x89\xFA\x0F\xB6\x04\x0F\x48\xFF\xC1\x30\x41\xFF\x48\xFF\xCA\x75\xF1\x44\x8B\x4C\x24\x24\x44\x8B\x44\x24\x20\x41\x83\xFE\x02\x0F\x86\xFF\x00\x00\x00\x44\x03\x4C\x24\x50\x48\x8D\x74\x24\x5C\x45\x01\xE0\x44\x89\xC1\x44\x89\xC2\x48\x83\xC6\x30\xC1\xE9\x04\x44\x31\xCA\x83\xE1\x1F\xD3\xC2\x2B\x56\xCC\x41\x31\xD0\x89\xD1\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x44\x03\x46\xD0\x44\x89\xC1\x44\x89\xC7\xC1\xE9\x04\x31\xD7\x83\xE1\x1F\xD3\xC7\x2B\x7E\xD4\x41\x31\xF8\x89\xF9\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x44\x03\x46\xD8\x44\x89\xC1\x44\x89\xC2\xC1\xE9\x04\x31\xFA\x83\xE1\x1F\xD3\xC2\x2B\x56\xDC\x41\x31\xD0\x89\xD1\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x44\x03\x46\xE0\x44\x89\xC1\x44\x89\xC7\xC1\xE9\x04\x31\xD7\x83\xE1\x1F\xD3\xC7\x2B\x7E\xE4\x41\x31\xF8\x89\xF9\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x44\x03\x46\xE8\x44\x89\xC1\x44\x89\xC2\xC1\xE9\x04\x31\xFA\x83\xE1\x1F\xD3\xC2\x2B\x56\xEC\x41\x31\xD0\x89\xD1\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x44\x03\x46\xF0\x44\x89\xC1\x45\x89\xC1\xC1\xE9\x04\x41\x31\xD1\x83\xE1\x1F\x41\xD3\xC1\x44\x2B\x4E\xF4\x45\x31\xC8\x44\x89\xC9\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x44\x03\x46\xF8\x49\xFF\xCA\x0F\x85\x10\xFF\xFF\xFF\xEB\x51\x41\x83\xFE\x01\x75\x0D\x8B\x03\x89\x44\x24\x20\x8B\x43\x04\x89\x44\x24\x24\x48\x8D\x44\x24\x20\x48\x89\xE9\x66\xC7\x45\x10\x00\x00\x89\x45\x12\x48\x8D\x44\x24\x20\x66\xC7\x45\x16\x01\x00\x48\xC1\xE8\x20\x66\xC7\x45\x3E\x00\x00\x89\x45\x5C\xE8\x7D\xF9\xFF\xFF\x44\x8B\x4C\x24\x24\x44\x8B\x44\x24\x20\x66\xC7\x45\x16\x00\x00\x4C\x8B\xA4\x24\xE0\x00\x00\x00\x48\x8B\xAC\x24\xF8\x00\x00\x00\x41\x83\xFE\x01\x4C\x8B\xB4\x24\xD0\x00\x00\x00\x76\x1B\x45\x85\xFF\x74\x0C\x48\x8D\x73\xF8\x44\x89\xF9\x48\x89\xDF\xF3\xA4\x44\x89\x43\xF8\x44\x89\x4B\xFC\xEB\x07\x44\x89\x03\x44\x89\x4B\x04\x4C\x8B\xBC\x24\xC8\x00\x00\x00\x48\x8B\xBC\x24\x08\x01\x00\x00\x48\x8B\xB4\x24\x00\x01\x00\x00\x48\x8B\x9C\x24\xF0\x00\x00\x00\x48\x81\xC4\xE8\x00\x00\x00\xC3\x48\x89\xE0\x48\x81\xEC\xF8\x00\x00\x00\x48\x89\x58\x08\x48\x89\x68\x10\x48\x89\x70\x18\x48\x89\x78\x20\x4C\x89\x60\xF8\x4C\x89\x68\xF0\x4C\x89\x70\xE8\x4C\x89\x78\xE0\x48\x89\xCB\x8D\x4A\x07\x89\xD0\xBA\x08\x00\x00\x00\xC1\xE9\x03\x83\xE0\x07\x4C\x89\xC7\x0F\x44\xC2\x45\x31\xFF\x83\xF9\x01\x89\x4C\x24\x30\x44\x8D\x62\x04\x44\x89\x7C\x24\x2C\x44\x89\x7C\x24\x34\x44\x89\x7C\x24\x28\x45\x89\xFE\x89\x44\x24\x38\x0F\x86\x9F\x01\x00\x00\x83\xC1\xFE\x44\x89\xFE\x89\x4C\x24\x20\x0F\x84\x8F\x01\x00\x00\x48\x8B\x44\x24\x40\x44\x8B\x6C\x24\x64\x8B\x6C\x24\x60\x85\xF6\x44\x8B\x03\x44\x8B\x73\x04\x45\x89\xC7\x44\x89\x44\x24\x28\x0F\x85\xEE\x00\x00\x00\x48\x89\x44\x24\x50\x48\x8D\x44\x24\x48\x66\x89\x77\x10\x48\x8B\x0B\x89\x47\x12\x48\x8D\x44\x24\x48\x48\xC1\xE8\x20\x48\x89\x4C\x24\x48\x48\x89\xF9\x66\xC7\x47\x16\x02\x00\x66\x89\x77\x3E\x89\x47\x5C\xE8\x0E\xFA\xFF\xFF\x48\x8B\x44\x24\x48\x4C\x8D\x44\x24\x64\x48\x89\x03\x48\x8B\x44\x24\x50\x44\x8D\x56\x05\x48\x89\x44\x24\x40\x44\x8B\x4C\x24\x44\x66\x89\x77\x16\x89\x44\x24\x60\x41\x8B\x48\xFC\x49\x83\xC0\x14\x42\x8D\x14\x09\x83\xE1\x1F\x41\x89\x50\xEC\x89\xC2\xD3\xCA\x31\x54\x24\x64\x41\x8B\x48\xEC\x42\x8D\x14\x09\x83\xE1\x1F\x41\x89\x50\xF0\x89\xC2\xD3\xCA\x31\x54\x24\x64\x41\x8B\x48\xF0\x42\x8D\x14\x09\x83\xE1\x1F\x41\x89\x50\xF4\x89\xC2\xD3\xCA\x31\x54\x24\x64\x41\x8B\x48\xF4\x42\x8D\x14\x09\x83\xE1\x1F\x41\x89\x50\xF8\x89\xC2\xD3\xCA\x31\x54\x24\x64\x41\x8B\x48\xF8\x42\x8D\x14\x09\x83\xE1\x1F\x41\x89\x50\xFC\x44\x8B\x6C\x24\x64\x89\xC2\xD3\xCA\x41\x31\xD5\x49\xFF\xCA\x44\x89\x6C\x24\x64\x0F\x85\x77\xFF\xFF\xFF\x8B\x6C\x24\x60\xEB\x4B\x45\x89\xE3\x45\x89\xF1\x4C\x8D\x94\x24\xC0\x00\x00\x00\x45\x2B\x42\x04\x44\x89\xC9\x49\x83\xEA\x08\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC8\x45\x31\xC8\x45\x03\x4A\x08\x44\x89\xC1\xC1\xE9\x04\x83\xE1\x1F\x41\xD3\xC9\x45\x31\xC1\x41\x83\xC3\xFF\x75\xD0\x45\x29\xE8\x41\x29\xE9\x44\x89\x4B\x04\x44\x89\x03\x8B\x4C\x24\x34\xFF\xC6\x48\x83\xC3\x08\x31\x4B\xF8\x8B\x4C\x24\x2C\x44\x89\x7C\x24\x34\x31\x4B\xFC\x3B\x74\x24\x20\x44\x89\x74\x24\x2C\x0F\x82\x88\xFE\xFF\xFF\x8B\x44\x24\x38\x45\x31\xFF\xEB\x09\x44\x8B\x6C\x24\x64\x8B\x6C\x24\x60\x85\xC0\x44\x89\x7C\x24\x20\x44\x89\xFE\x44\x89\x7C\x24\x24\x74\x1A\x48\x8D\x53\x08\x48\x8D\x4C\x24\x20\x41\x89\xC0\xE8\xB8\xED\xFF\xFF\x8B\x74\x24\x24\x44\x8B\x7C\x24\x20\x44\x8B\x5C\x24\x30\x41\x83\xFB\x01\x75\x32\x48\x89\xD8\x48\x89\xF9\x66\xC7\x47\x10\x00\x00\x48\xC1\xE8\x20\x66\xC7\x47\x16\x01\x00\x66\xC7\x47\x3E\x00\x00\x89\x47\x5C\x89\x5F\x12\xE8\x75\xF8\xFF\xFF\x66\xC7\x47\x16\x00\x00\xE9\x29\x01\x00\x00\x41\x83\xFB\x02\x75\x34\x48\x89\xD8\x48\x89\xF9\x66\xC7\x47\x10\x00\x00\x48\xC1\xE8\x20\x66\xC7\x47\x16\x01\x00\x66\xC7\x47\x3E\x00\x00\x89\x47\x5C\x89\x5F\x12\xE8\x3D\xF8\xFF\xFF\x44\x8B\x5C\x24\x30\x66\xC7\x47\x16\x00\x00\xEB\x55\x8B\x13\x44\x8B\x43\x04\x45\x89\xE2\x4C\x8D\x8C\x24\xC0\x00\x00\x00\x41\x2B\x51\x04\x44\x89\xC1\x49\x83\xE9\x08\xC1\xE9\x07\x83\xE1\x1F\xD3\xCA\x44\x31\xC2\x45\x03\x41\x08\x89\xD1\xC1\xE9\x04\x83\xE1\x1F\x41\xD3\xC8\x41\x31\xD0\x41\x83\xC2\xFF\x75\xD2\x44\x29\xEA\x41\x29\xE8\x41\x83\xFB\x01\x89\x13\x44\x89\x43\x04\x0F\x86\x9A\x00\x00\x00\x44\x33\x3B\x33\x73\x04\x8B\x44\x24\x38\x85\xC0\x44\x89\x7C\x24\x20\x89\x74\x24\x24\x74\x31\x4C\x8D\x44\x24\x20\x49\x89\xD9\x48\x8D\x4B\x08\x4D\x29\xC1\x49\x89\xC0\x48\x8D\x54\x24\x20\x0F\xB6\x01\x48\xFF\xC1\x48\xFF\xC2\x49\xFF\xC8\x41\x88\x44\x11\xFF\x0F\xB6\x42\xFF\x88\x41\xFF\x75\xE6\x41\x83\xFB\x02\x0F\x84\xED\xFE\xFF\xFF\x8B\x13\x44\x8B\x43\x04\x4C\x8D\x8C\x24\xC0\x00\x00\x00\x41\x2B\x51\x04\x44\x89\xC1\x49\x83\xE9\x08\xC1\xE9\x07\x83\xE1\x1F\xD3\xCA\x44\x31\xC2\x45\x03\x41\x08\x89\xD1\xC1\xE9\x04\x83\xE1\x1F\x41\xD3\xC8\x41\x31\xD0\x41\x83\xC4\xFF\x75\xD2\x44\x29\xEA\x41\x29\xE8\x44\x89\x43\x04\x89\x13\x8B\x44\x24\x28\x4C\x8B\xBC\x24\xD8\x00\x00\x00\x4C\x8B\xAC\x24\xE8\x00\x00\x00\x31\x03\x44\x31\x73\x04\x4C\x8B\xA4\x24\xF0\x00\x00\x00\x4C\x8B\xB4\x24\xE0\x00\x00\x00\x48\x8B\x9C\x24\x00\x01\x00\x00\x48\x8B\xBC\x24\x18\x01\x00\x00\x48\x8B\xB4\x24\x10\x01\x00\x00\x48\x8B\xAC\x24\x08\x01\x00\x00\x48\x81\xC4\xF8\x00\x00\x00\xC3\xCC\xCC\xCC\xCC\x57\x59\xE9\xF9\xD5\xFF\xFF')
    
    fullfname=os.getcwd()+'/backbas.so'
    
    
    a=0xBA
    unipatch[a:a+4]=SERVER_KEY_PASSWORD
    a=a+4
    unipatch[a:a+4]=SERVER_KEY_SN
    a=a+4
    unipatch[a:a+4]=SERVER_KEY_HASPTYPE
    a=a+4
    unipatch[a:a+4]=SERVER_KEY_MEMORYSIZE
    a=a+6
    unipatch[a:a+8]=SERVER_KEY_SecTable
    a=a+0x48
    unipatch[a:a+0x70]=SERVER_KEY_Data
    a=a+0x70
    unipatch[a:a+2]=SERVER_KEY_LicNum
    
    
    a=0x112E
    unipatch[a:a+4]=CLIENT_KEY_PASSWORD
    a=a+4
    unipatch[a:a+4]=CLIENT_KEY_SN
    a=a+4
    unipatch[a:a+4]=CLIENT_KEY_HASPTYPE
    a=a+4
    unipatch[a:a+4]=CLIENT_KEY_MEMORYSIZE
    a=a+6
    unipatch[a:a+8]=CLIENT_KEY_SecTable
    a=a+0x48
    unipatch[a:a+0x70]=CLIENT_KEY_Data
    a=a+0x70
    unipatch[a:a+2]=CLIENT_KEY_LicNum
    
    
    try:
      fp = open(fullfname, 'r+')
      if os.stat(fp.name).st_size > 0:
        mm = mmap.mmap(fp.fileno(), 0)
    
      # WTF? "to smoke": man 5 elf
      if mm[0]!=0x7f or mm[1]!=0x45 or mm[2]!=0x4C or mm[3]!=0x46 or mm[4]!=2 or mm[5]!=1 or mm[6]!=1 or mm[16]!=3 or mm[17]!=0 or mm[18]!=0x3E or mm[19]!=0:
        print ("what a fuck are you giving me?")
        sys.exit()
      e_phoff = mm[0x20]+(mm[0x21]+(mm[0x22]+(mm[0x23]<<8)<<8)<<8)
      print (f"e_phoff = {hex(e_phoff)}")
      e_phentsize = mm[0x36]+(mm[0x37]<<8)
      print (f"e_phentsize = {hex(e_phentsize)}")
      e_phnum = mm[0x38]+(mm[0x39]<<8)
      print (f"e_phnum = {hex(e_phnum)}")
      for i in range(e_phnum):
        p = e_phoff + i * e_phentsize
        p_type  = mm[p]+(mm[p+1]+(mm[p+2]+(mm[p+3]<<8)<<8)<<8)
        p_flags = mm[p+4]+(mm[p+5]+(mm[p+6]+(mm[p+7]<<8)<<8)<<8)
        if (p_type==1 and p_flags==5):
          print(f"p_type={hex(p_type)}, p_flags={hex(p_flags)}")
          print(f"mm[{hex(p+4)}] += PF_W")
          mm[p+4] = 7
          break
        else:
          print(f"p_type={hex(p_type)}, p_flags={hex(p_flags)}")
      pattern_addr = mm.find(pattern)
      if pattern_addr != -1:
        unipatch_addr=pattern_addr-0x2A75
        print (f"patching  {fullfname}  at offset={hex(unipatch_addr)}")
        mm[unipatch_addr:unipatch_addr+0x2A07] = unipatch
    
      mm.close()
    except IOError as e:
      print (f"I/O error({e.errno}): {e.strerror}, filename={fullfname}")
    
    
    
    print ('#############_SERVER_KEY_INFO_#################', sep='', end='')
    print ('')
    a=0xBA
    print ('SERVER_KEY_PASSWORD:', sep='', end=' ')
    for i in range(a,a+4):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print ('')
    a=a+4
    print ('SERVER_KEY_SN:', sep='', end=' ')
    for i in range(a,a+4):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print ('')
    a=a+4
    print ('SERVER_KEY_HASPTYPE:', sep='', end=' ')
    for i in range(a,a+4):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print ('')
    a=a+4
    print ('SERVER_KEY_MEMORYSIZE:', sep='', end=' ')
    for i in range(a,a+4):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print ('')
    a=a+6
    print ('SERVER_KEY_SecTable:', sep='', end=' ')
    for i in range(a,a+8):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print ('')
    a=a+0x48
    print ('SERVER_KEY_Data:', sep='', end='\n')
    for i in range(a,a+0x70,16):  
      for k in range(0,16):
        print (format(unipatch[i+k],'02X'), sep='', end=' ')
      print ('')
    a=a+0x70
    print ('SERVER_KEY_LicNum:', sep='', end=' ')
    for i in range(a,a+2):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print ('')
    
    print ('#############_CLIENT_KEY_INFO_#################', sep='', end='')
    print ('')
    a=0x112E
    print ('CLIENT_KEY_PASSWORD:', sep='', end=' ')
    for i in range(a,a+4):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print ('')
    a=a+4
    print ('CLIENT_KEY_SN:', sep='', end=' ')
    for i in range(a,a+4):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print ('')
    a=a+4
    print ('CLIENT_KEY_HASPTYPE:', sep='', end=' ')
    for i in range(a,a+4):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print ('')
    a=a+4
    print ('CLIENT_KEY_MEMORYSIZE:', sep='', end=' ')
    for i in range(a,a+4):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print ('')
    a=a+6
    print ('CLIENT_KEY_SecTable:', sep='', end=' ')
    for i in range(a,a+8):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print ('')
    a=a+0x48
    print ('CLIENT_KEY_Data:', sep='', end='\n')
    for i in range(a,a+0x70,16):  
      for k in range(0,16):
        print (format(unipatch[i+k],'02X'), sep='', end=' ')
      print ('')
    
    a=a+0x70
    print ('CLIENT_KEY_LicNum:', sep='', end=' ')
    for i in range(a,a+2):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print ('')
    "кинжал хорош для того, у кого он есть, и плохо тому у кого он не окажется в нужное время"

  8. 23 пользователя(ей) сказали cпасибо:

    asam (02.11.2023), ask66 (08.11.2023), bonifacio_dot (08.10.2024), Den-1977 (26.07.2023), freeraider (20.07.2023), g0ga (17.07.2023), Hirvi (01.10.2023), ilya.sh (11.09.2023), ironsamael15 (15.10.2023), kelt44 (24.07.2023), Megakiller (21.07.2023), mvl000 (21.07.2023), navisal (23.07.2023), olegtelec (22.07.2023), redhat2020 (28.07.2023), Renzes (17.07.2023), root7 (20.01.2024), Sova24 (19.07.2023), tlv (24.11.2023), wlion (16.07.2023), youdjcommon (25.10.2023), yurykk (22.07.2023), _BigB_ (17.07.2023)

  9. #45
    Помогает людям
    Аватар для HPDX2300
    Регистрация
    18.04.2018
    Адрес
    HP-Compaq DX2300 microtower PC
    Сообщений
    270
    Сказал(а) спасибо
    69
    Поблагодарили 1818 раз(а) в 397 сообщениях

    По умолчанию Re: уни-патч для линукса и для макоси

    Объясняю как проверить "дамп ключа выдержит 2-х этапную проверку изделием?"

    Берём публичный дамп (создан ТГ-ботом) с SN=HASPID=478404269=0x1C83DEAD и раздаем его каким-либо HASPLM

    Включаем создание технологического журнала - создаем в папке conf файл logcfg.xml такого содержания:
    Код:
    <?xml version="1.0" encoding="UTF-8"?>
    <config xmlns="http://v8.1c.ru/v8/tech-log">
     <log location="/tmp/1C/tlogs" history="10">
      <event>
       <eq property="name" value="hasp"/>
      </event>
      <property name="all"/>
     </log>
    </config>
    у меня папка для журналов задана в строке (измените на своё):
    Код:
    log location="/tmp/1C/tlogs"
    содержание технологического журнала с коментариями:
    Код:
    //запуск 1cv8, главный поток (OSThread=2712) процесса 
    11:28.370,HASP,2,process=1cv8,OSThread=2712,Txt='NETHASP_SET_CONFIG_FILENAME(,prog=17,ser=ORGL8,,size=41,,FName=~/.1cv8/1C/1cv8/conf/nethasp.ini)->,,,'
    11:28.370,HASP,2,process=1cv8,OSThread=2712,Txt='NETHASP_LASTSTATUS(,prog=17,ser=ORGL8,,,,)->NStat=0,SysErr=0,stat=0,'
    // далее все вызовы NETHASP_LASTSTATUS() удалены т.к. не интересны
    
    // поздоровкаемся с HASPLM (т.е.NETHASP_LOGIN):
    11:32.379,HASP,2,process=1cv8,OSThread=2712,Txt='NETHASP_LOGIN(,prog=17,ser=ORGL8,,,,)->,,,'
    
    // поиск локальных ключей клиентских серий:
    11:32.380,HASP,2,process=1cv8,OSThread=2712,Txt='LOCALHASP_ISHASP(,,ser=ORGL8,,,,)->found=0,port=0,stat=-100,'
    11:32.380,HASP,2,process=1cv8,OSThread=2712,Txt='LOCALHASP_ISHASP(,,ser=ORG8A,,,,)->found=0,port=0,stat=-100,'
    11:32.380,HASP,2,process=1cv8,OSThread=2712,Txt='LOCALHASP_ISHASP(,,ser=ORG8B,,,,)->found=0,port=0,stat=-100,'
    11:32.380,HASP,2,process=1cv8,OSThread=2712,Txt='LOCALHASP_ISHASP(,,ser=Base,,,,)->found=0,port=0,stat=0,'
    
    11:32.380,HASP,2,process=1cv8,OSThread=2712,Txt='NETHASP_SET_CONFIG_FILENAME(,prog=17,ser=ORG8A,,size=41,,FName=~/.1cv8/1C/1cv8/conf/nethasp.ini)->,,,'
    11:32.383,HASP,2,process=1cv8,OSThread=2712,Txt='NETHASP_LOGIN(,prog=17,ser=ORG8A,,,,)->,,,'
    11:32.384,HASP,2,process=1cv8,OSThread=2712,Txt='NETHASP_SETIDLETIME(idle=8,prog=17,ser=ORG8A,,,,)->,,,'
    
    // читает первые (pos=0) 5 слов (size=5) из памяти ключа, результат=buf=01000000000000085E0C
    11:32.386,HASP,2,process=1cv8,OSThread=2712,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=0,size=5,,)->,,stat=0,buf=01000000000000085E0C'
    
    // HASPID=478404269=0x1C83DEAD
    11:32.387,HASP,2,process=1cv8,OSThread=2712,Txt='NETHASP_HASPID(,prog=17,ser=ORG8A,,,,)->id=478404269,,stat=0,'
    
    11:32.389,HASP,2,process=1cv8,OSThread=2712,Txt='NETHASP_HASPQUERYLICENSE(,prog=17,ser=ORG8A,,,,)->CurUsr=1,UsrLim=300,type=65535,remain=65535'
    11:32.390,HASP,2,process=1cv8,OSThread=2712,Txt='NETHASP_HASPQUERYLICENSE(,prog=17,ser=ORG8A,,,,)->CurUsr=1,UsrLim=300,type=65535,remain=65535'
    
    11:32.391,HASP,2,process=1cv8,OSThread=2712,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=58,size=5,,)->,,stat=0,buf=FFFFFFFFFFFFFFFFFFFF'
    
    11:33.834,HASP,1,process=1cv8,OSThread=2712,Txt='NETHASP_ENCODEDATA(,prog=17,ser=ORG8A,,size=39,,buf=7C7B00F5616677FEFA1254DBF286F008E62034A56A5047D517BDAE22FD7B0C79F70C6E5873E556)->,,stat=0,buf=9D3A65A2B9DD315EA7F6FD105D1D6745F6A13C3E6BB3B10F45ACD4646CC5CBEAF8585FDBFE13DC'
    
    // HASPID=478404269=0x1C83DEAD
    11:33.857,HASP,1,process=1cv8,OSThread=2712,Txt='NETHASP_HASPID(,prog=17,ser=ORG8A,,,,)->id=478404269,,stat=0,'
    
    // поток OSThread=2748 начинает чтение памяти ключа (102 байт=51 слов) по одному слову за раз (size=1), смещение (pos=33) рандомизировано, результат чтения: buf=CB56
    11:34.386,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=33,size=1,,)->,,stat=0,buf=CB56'
    
    11:34.649,HASP,1,process=1cv8,OSThread=2712,Usr=Администратор,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=0,size=5,,)->,,stat=0,buf=01000000000000085E0C'
    
    // HASPID=478404269=0x1C83DEAD
    11:34.650,HASP,1,process=1cv8,OSThread=2712,Usr=Администратор,Txt='NETHASP_HASPID(,prog=17,ser=ORG8A,,,,)->id=478404269,,stat=0,'
    
    // у меня вызовы NETHASP_READBLOCK идут каждую секунду т.к. сломано "курение бамбука по 60-90 сек", у вас будут интервалы по 60-90 сек (значение рандомизировано)
    11:35.388,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=51,size=1,,)->,,stat=0,buf=7F19'
    11:36.389,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=25,size=1,,)->,,stat=0,buf=5A37'
    11:37.391,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=24,size=1,,)->,,stat=0,buf=62C3'
    11:38.392,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=40,size=1,,)->,,stat=0,buf=8162'
    11:39.394,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=12,size=1,,)->,,stat=0,buf=3D28'
    11:40.395,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=35,size=1,,)->,,stat=0,buf=6CC3'
    11:41.397,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=10,size=1,,)->,,stat=0,buf=97B9'
    11:42.398,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=1,size=1,,)->,,stat=0,buf=0000'
    11:43.400,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=14,size=1,,)->,,stat=0,buf=4C33'
    11:44.401,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=5,size=1,,)->,,stat=0,buf=6D6F'
    11:45.403,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_HASPID(,prog=17,ser=ORG8A,,,,)->id=478404269,,stat=0,'
    11:46.404,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=55,size=1,,)->,,stat=0,buf=9E62'
    11:47.406,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=32,size=1,,)->,,stat=0,buf=7D6C'
    11:48.407,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=11,size=1,,)->,,stat=0,buf=2E4F'
    11:49.409,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=18,size=1,,)->,,stat=0,buf=70B1'
    11:50.410,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=54,size=1,,)->,,stat=0,buf=F88E'
    11:51.411,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=31,size=1,,)->,,stat=0,buf=ED65'
    11:52.413,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=52,size=1,,)->,,stat=0,buf=16DF'
    11:53.414,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=27,size=1,,)->,,stat=0,buf=79E4'
    11:54.416,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=47,size=1,,)->,,stat=0,buf=E2CE'
    11:55.417,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=16,size=1,,)->,,stat=0,buf=8D75'
    11:56.419,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=6,size=1,,)->,,stat=0,buf=44FB'
    11:57.420,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=43,size=1,,)->,,stat=0,buf=03CC'
    11:58.422,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=29,size=1,,)->,,stat=0,buf=1B6F'
    11:59.423,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=19,size=1,,)->,,stat=0,buf=17C9'
    12:00.425,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=22,size=1,,)->,,stat=0,buf=FAAC'
    12:01.426,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=0,size=1,,)->,,stat=0,buf=0100'
    12:02.428,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=30,size=1,,)->,,stat=0,buf=AE50'
    12:03.429,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=36,size=1,,)->,,stat=0,buf=AED5'
    12:04.431,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=37,size=1,,)->,,stat=0,buf=F515'
    12:05.432,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=50,size=1,,)->,,stat=0,buf=8F01'
    12:06.433,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=48,size=1,,)->,,stat=0,buf=1264'
    12:07.435,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=3,size=1,,)->,,stat=0,buf=0008'
    12:08.436,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=44,size=1,,)->,,stat=0,buf=5A30'
    12:09.438,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=49,size=1,,)->,,stat=0,buf=3B5C'
    12:10.439,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=8,size=1,,)->,,stat=0,buf=82CB'
    12:11.441,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=26,size=1,,)->,,stat=0,buf=B16E'
    12:12.442,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=23,size=1,,)->,,stat=0,buf=DABA'
    12:13.444,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=2,size=1,,)->,,stat=0,buf=0000'
    12:14.445,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=17,size=1,,)->,,stat=0,buf=8417'
    12:15.447,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=9,size=1,,)->,,stat=0,buf=CD99'
    12:16.448,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=21,size=1,,)->,,stat=0,buf=E434'
    12:17.450,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=39,size=1,,)->,,stat=0,buf=D01A'
    12:18.451,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=41,size=1,,)->,,stat=0,buf=4CC6'
    12:19.453,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=34,size=1,,)->,,stat=0,buf=3CE7'
    12:20.454,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=45,size=1,,)->,,stat=0,buf=690F'
    12:21.456,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=28,size=1,,)->,,stat=0,buf=A97F'
    12:22.457,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=13,size=1,,)->,,stat=0,buf=F937'
    12:23.459,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=53,size=1,,)->,,stat=0,buf=03D0'
    12:24.460,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=20,size=1,,)->,,stat=0,buf=B2D4'
    12:25.462,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=38,size=1,,)->,,stat=0,buf=901C'
    12:26.463,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=46,size=1,,)->,,stat=0,buf=F624'
    12:27.465,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=42,size=1,,)->,,stat=0,buf=001B'
    12:28.466,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=15,size=1,,)->,,stat=0,buf=3F45'
    12:29.468,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=7,size=1,,)->,,stat=0,buf=0764'
    12:30.469,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=4,size=1,,)->,,stat=0,buf=5E0C'
    
    // поток OSThread=2748 начал второй этап проверки памяти ключа (признак - вызов NETHASP_DECODEDATA, входные данные в буфере size=102 байт - первые 10 байт уже проверены 1-м этапом проверки, который происходит сразу после запуска):
    12:31.472,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_DECODEDATA(,prog=17,ser=ORG8A,,size=102,,buf=6D6F44FB076482CBCD9997B92E4F3D28F9374C333F458D75841770B117C9B2D4E434FAACDABA62C35A37B16E79E4A97F1B6FAE50ED657D6CCB563CE76CC3AED5F515901CD01A81624CC6001B03CC5A30690FF624E2CE12643B5C8F017F1916DF03D0F88E9E62)->,,stat=0,buf=62A7BFF000507269766574314321446F6E61742435306B3A4254433A626331716B776E6A6B34796D63387037383365356D3763773066756E61733636336A6A6E3978387974333A546F676461506572657374616E75536C6F766F4861636B657261214D694D6F'
    
    // а теперь забавное - копируем результат NETHASP_DECODEDATA в буфер обмена:
    // 62A7BFF000507269766574314321446F6E61742435306B3A4254433A626331716B776E6A6B34796D63387037383365356D3763773066756E61733636336A6A6E3978387974333A546F676461506572657374616E75536C6F766F4861636B657261214D694D6F
    // и вставляем в редакторе как HEX-text (в редакторе 010editor - меню "Edit"->"Paste From..."->"Paste from HEX Text"; в notepad++ вставить и преобразовать в текст командой меню "Plugins"->"Convert"->"HEX->ASCII")
    // получаем строку:
    // Privet1C!Donat$50k:BTC:bc1qkwnjk4ymc8p783e5m7cw0funas663jjn9x8yt3:TogdaPerestanuSlovoHackera!MiMo
    // 
    // перефразирую слова Фрунзика Мкртчяна в к/ф "Мимино" - "так доната 50000$ хочется, што кущать не могу"
    
    
    // дальше идут вызовы DECODEDATA/ENCODEDATA, полагаю - для проверки "доступен ли HASP-ключ?", покажем несколько:
    12:34.475,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_DECODEDATA(,prog=17,ser=ORG8A,,size=20,,buf=E3EDB7B7CAF90B0C0B4133764FC270FAFFBA596C)->,,stat=0,buf=566E830B8AED5C39F51C8A405EFDBA8966A1C569'
    12:35.477,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_ENCODEDATA(,prog=17,ser=ORG8A,,size=20,,buf=7BBCD17E8D0F28E1336359BEADCF4DDB7F737D4A)->,,stat=0,buf=8251BD6F798B90CDC6839711CB7C43C1CF0B5104'
    12:36.480,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_ENCODEDATA(,prog=17,ser=ORG8A,,size=20,,buf=81C7E5954FC544F7B034E8FC1C353BC44E070B32)->,,stat=0,buf=FB7F736B7140B5EE21943A312D030F4540A66F3E'
    12:37.482,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_ENCODEDATA(,prog=17,ser=ORG8A,,size=20,,buf=566E830B8AED5C39F51C8A405EFDBA8966A1C569)->,,stat=0,buf=E3EDB7B7CAF90B0C0B4133764FC270FAFFBA596C'
    12:38.485,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_DECODEDATA(,prog=17,ser=ORG8A,,size=20,,buf=8251BD6F798B90CDC6839711CB7C43C1CF0B5104)->,,stat=0,buf=7BBCD17E8D0F28E1336359BEADCF4DDB7F737D4A'
    12:39.487,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_ENCODEDATA(,prog=17,ser=ORG8A,,size=20,,buf=8B453A18A98318B0D92816DC01E0ADBAA6E1ADA7)->,,stat=0,buf=D702DC2A980721D80CEC56512D3ADB257ACB951F'
    12:40.489,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_DECODEDATA(,prog=17,ser=ORG8A,,size=20,,buf=D702DC2A980721D80CEC56512D3ADB257ACB951F)->,,stat=0,buf=8B453A18A98318B0D92816DC01E0ADBAA6E1ADA7'
    12:41.491,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_ENCODEDATA(,prog=17,ser=ORG8A,,size=20,,buf=979182FE85C65026A0249FBA13F9D193962A21CE)->,,stat=0,buf=5BFD94963C4F0D847E4D4F75B043D1E3A06094EC'
    12:42.494,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_DECODEDATA(,prog=17,ser=ORG8A,,size=20,,buf=5BFD94963C4F0D847E4D4F75B043D1E3A06094EC)->,,stat=0,buf=979182FE85C65026A0249FBA13F9D193962A21CE'
    12:43.497,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_DECODEDATA(,prog=17,ser=ORG8A,,size=20,,buf=B95CD2478CA5E63CE5B6A6F2BB77E04B90CA87BB)->,,stat=0,buf=913FC0EEC288534575D3398D0918F08F9CBA9FB9'
    12:44.499,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_DECODEDATA(,prog=17,ser=ORG8A,,size=20,,buf=FB7F736B7140B5EE21943A312D030F4540A66F3E)->,,stat=0,buf=81C7E5954FC544F7B034E8FC1C353BC44E070B32'
    12:45.501,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_ENCODEDATA(,prog=17,ser=ORG8A,,size=20,,buf=913FC0EEC288534575D3398D0918F08F9CBA9FB9)->,,stat=0,buf=B95CD2478CA5E63CE5B6A6F2BB77E04B90CA87BB'
    12:46.504,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_ENCODEDATA(,prog=17,ser=ORG8A,,size=20,,buf=FC98C1CBD94D6F68073E99BAECB9671050293A0E)->,,stat=0,buf=93CD69CB77AA59B4466E94C6165C72FB596BB48F'
    12:47.506,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_DECODEDATA(,prog=17,ser=ORG8A,,size=20,,buf=93CD69CB77AA59B4466E94C6165C72FB596BB48F)->,,stat=0,buf=FC98C1CBD94D6F68073E99BAECB9671050293A0E'
    12:48.508,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_ENCODEDATA(,prog=17,ser=ORG8A,,size=20,,buf=FC98C1CBD94D6F68073E99BAECB9671050293A0E)->,,stat=0,buf=93CD69CB77AA59B4466E94C6165C72FB596BB48F'
    12:49.511,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_ENCODEDATA(,prog=17,ser=ORG8A,,size=20,,buf=4D950A92F3F094C4F30AE877C6D6E14C55ED0C80)->,,stat=0,buf=D1A4E623584471B0C4246C2258D1DD52CD8078A3'
    12:50.513,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_ENCODEDATA(,prog=17,ser=ORG8A,,size=20,,buf=4D950A92F3F094C4F30AE877C6D6E14C55ED0C80)->,,stat=0,buf=D1A4E623584471B0C4246C2258D1DD52CD8078A3'
    12:51.515,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_DECODEDATA(,prog=17,ser=ORG8A,,size=20,,buf=D1A4E623584471B0C4246C2258D1DD52CD8078A3)->,,stat=0,buf=4D950A92F3F094C4F30AE877C6D6E14C55ED0C80'
    
    // нормальный выход из программы заканчивается NETHASP_LOGOUT
    12:52.248,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_LOGOUT(,prog=17,ser=ORG8A,,,,)->,,,'
    затем раздадим фейковый дамп, сделан был для целей отладки изделия в дебагере:
    Код:
    DATA=
    01 00 00 00 00 00 00 08 00 00 0B 0C 0D 0E 0F 10
    11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20
    21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30
    31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40
    41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50
    51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60
    61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70
    содержание технологического журнала в случае, когда вторая проверка памяти ключа не прошла
    Код:
    53:03.198,HASP,2,process=1cv8,OSThread=5121,Txt='NETHASP_SET_CONFIG_FILENAME(,prog=17,ser=ORGL8,,size=41,,FName=~/.1cv8/1C/1cv8/conf/nethasp.ini)->,,,'
    53:03.200,HASP,2,process=1cv8,OSThread=5121,Txt='NETHASP_LOGIN(,prog=17,ser=ORGL8,,,,)->,,,'
    53:03.201,HASP,2,process=1cv8,OSThread=5121,Txt='NETHASP_SETIDLETIME(idle=8,prog=17,ser=ORGL8,,,,)->,,,'
    53:03.203,HASP,2,process=1cv8,OSThread=5121,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=0,size=5,,)->,,stat=0,buf=01000000000000080000'
    53:03.204,HASP,2,process=1cv8,OSThread=5121,Txt='NETHASP_HASPID(,prog=17,ser=ORGL8,,,,)->id=1025225143,,stat=0,'
    53:03.205,HASP,2,process=1cv8,OSThread=5121,Txt='NETHASP_HASPQUERYLICENSE(,prog=17,ser=ORGL8,,,,)->CurUsr=1,UsrLim=100,type=100,remain=65535'
    53:03.207,HASP,2,process=1cv8,OSThread=5121,Txt='NETHASP_HASPQUERYLICENSE(,prog=17,ser=ORGL8,,,,)->CurUsr=1,UsrLim=100,type=100,remain=65535'
    53:03.208,HASP,2,process=1cv8,OSThread=5121,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=58,size=5,,)->,,stat=0,buf=FFFFFFFFFFFFFFFFFFFF'
    53:04.615,HASP,1,process=1cv8,OSThread=5121,Txt='NETHASP_ENCODEDATA(,prog=17,ser=ORGL8,,size=39,,buf=7C7B00F5616677FEFA1254DBF286F008E62034A56A5047D517BDAE22FD7B0C79F70C6E5873E556)->,,stat=0,buf=EDDDD12019B9D025019894BBEB79452DF13FD141C5DCE779A5598710C3ACBDF1AF703CD9C1EF8E'
    53:04.639,HASP,1,process=1cv8,OSThread=5121,Txt='NETHASP_HASPID(,prog=17,ser=ORGL8,,,,)->id=1025225143,,stat=0,'
    53:05.203,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=41,size=1,,)->,,stat=0,buf=5354'
    53:06.206,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=35,size=1,,)->,,stat=0,buf=4748'
    53:07.207,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=32,size=1,,)->,,stat=0,buf=4142'
    53:07.725,HASP,1,process=1cv8,OSThread=5121,Usr=Администратор,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=0,size=5,,)->,,stat=0,buf=01000000000000080000'
    53:07.726,HASP,1,process=1cv8,OSThread=5121,Usr=Администратор,Txt='NETHASP_HASPID(,prog=17,ser=ORGL8,,,,)->id=1025225143,,stat=0,'
    53:08.209,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=38,size=1,,)->,,stat=0,buf=4D4E'
    53:09.211,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=49,size=1,,)->,,stat=0,buf=6364'
    53:10.212,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=45,size=1,,)->,,stat=0,buf=5B5C'
    53:11.213,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=5,size=1,,)->,,stat=0,buf=0B0C'
    53:12.215,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=1,size=1,,)->,,stat=0,buf=0000'
    53:13.217,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=28,size=1,,)->,,stat=0,buf=393A'
    53:14.218,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=43,size=1,,)->,,stat=0,buf=5758'
    53:15.220,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=47,size=1,,)->,,stat=0,buf=5F60'
    53:16.221,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=11,size=1,,)->,,stat=0,buf=1718'
    53:17.223,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=27,size=1,,)->,,stat=0,buf=3738'
    53:18.224,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=8,size=1,,)->,,stat=0,buf=1112'
    53:19.226,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_HASPID(,prog=17,ser=ORGL8,,,,)->id=1025225143,,stat=0,'
    53:20.227,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=30,size=1,,)->,,stat=0,buf=3D3E'
    53:21.229,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=19,size=1,,)->,,stat=0,buf=2728'
    53:22.230,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=46,size=1,,)->,,stat=0,buf=5D5E'
    53:23.232,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=15,size=1,,)->,,stat=0,buf=1F20'
    53:24.233,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=26,size=1,,)->,,stat=0,buf=3536'
    53:25.235,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=55,size=1,,)->,,stat=0,buf=6F70'
    53:26.236,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=54,size=1,,)->,,stat=0,buf=6D6E'
    53:27.238,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=36,size=1,,)->,,stat=0,buf=494A'
    53:28.239,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=6,size=1,,)->,,stat=0,buf=0D0E'
    53:29.241,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=23,size=1,,)->,,stat=0,buf=2F30'
    53:30.243,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=44,size=1,,)->,,stat=0,buf=595A'
    53:31.245,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=10,size=1,,)->,,stat=0,buf=1516'
    53:32.246,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=21,size=1,,)->,,stat=0,buf=2B2C'
    53:33.248,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=37,size=1,,)->,,stat=0,buf=4B4C'
    53:34.249,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=16,size=1,,)->,,stat=0,buf=2122'
    53:35.251,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=51,size=1,,)->,,stat=0,buf=6768'
    53:36.252,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=18,size=1,,)->,,stat=0,buf=2526'
    53:37.254,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=9,size=1,,)->,,stat=0,buf=1314'
    53:38.255,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=22,size=1,,)->,,stat=0,buf=2D2E'
    53:39.257,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=34,size=1,,)->,,stat=0,buf=4546'
    53:40.258,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=52,size=1,,)->,,stat=0,buf=696A'
    53:41.260,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=39,size=1,,)->,,stat=0,buf=4F50'
    53:42.261,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=13,size=1,,)->,,stat=0,buf=1B1C'
    53:43.263,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=4,size=1,,)->,,stat=0,buf=0000'
    53:44.264,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=31,size=1,,)->,,stat=0,buf=3F40'
    53:45.265,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=17,size=1,,)->,,stat=0,buf=2324'
    53:46.267,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=48,size=1,,)->,,stat=0,buf=6162'
    53:47.268,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=53,size=1,,)->,,stat=0,buf=6B6C'
    53:48.270,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=42,size=1,,)->,,stat=0,buf=5556'
    53:49.271,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=3,size=1,,)->,,stat=0,buf=0008'
    53:50.273,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=20,size=1,,)->,,stat=0,buf=292A'
    53:51.275,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=33,size=1,,)->,,stat=0,buf=4344'
    53:52.276,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=29,size=1,,)->,,stat=0,buf=3B3C'
    53:53.278,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=7,size=1,,)->,,stat=0,buf=0F10'
    53:54.279,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=12,size=1,,)->,,stat=0,buf=191A'
    53:55.281,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=0,size=1,,)->,,stat=0,buf=0100'
    53:56.282,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=25,size=1,,)->,,stat=0,buf=3334'
    53:57.284,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=40,size=1,,)->,,stat=0,buf=5152'
    53:58.286,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=2,size=1,,)->,,stat=0,buf=0000'
    53:59.287,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=14,size=1,,)->,,stat=0,buf=1D1E'
    54:00.289,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=50,size=1,,)->,,stat=0,buf=6566'
    54:01.291,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=24,size=1,,)->,,stat=0,buf=3132'
    54:02.294,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_DECODEDATA(,prog=17,ser=ORGL8,,size=102,,buf=0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F70)->,,stat=0,buf=0452E9A796AE919ACDC37C760464FB464E802195CF3D009C134F8631B62949BD30B667E98ED60CF5354FD6A6B8198DD20E024B5B5541AD51F0945576D5752E61468681AEAEE4719BC1DCD36128BAD937204A1C6F40AB1B297609F880B903B68C58CA41A70139'
    
    // работа приложения молча завершилась. в окне терминала, где запускался 1cv8, надпись:
    terminate called after throwing an instance of 'backbas::HaspLostException'
    Aborted (core dumped)
    Последний раз редактировалось HPDX2300; 28.07.2023 в 23:44.
    "кинжал хорош для того, у кого он есть, и плохо тому у кого он не окажется в нужное время"

  10. 9 пользователя(ей) сказали cпасибо:

    andydaw (28.07.2023), g0ga (30.07.2023), ilya.sh (11.09.2023), kelt44 (28.07.2023), olegtelec (29.07.2023), redhat2020 (28.07.2023), root7 (20.01.2024), tlv (24.11.2023), _BigB_ (28.07.2023)

  11. #46
    Помогает людям
    Аватар для HPDX2300
    Регистрация
    18.04.2018
    Адрес
    HP-Compaq DX2300 microtower PC
    Сообщений
    270
    Сказал(а) спасибо
    69
    Поблагодарили 1818 раз(а) в 397 сообщениях

    По умолчанию Re: уни-патч для линукса и для макоси

    Преамбула для "чайников":
    этот код вычисляет 9 и 10 байт в дампе HASP-ключа исходя из значения SN, он же HASPID.
    Код ниже сохранить в файл DATA9-10.py
    Запускать так:
    Код:
    python  DATA9-10.py
    Если предварительно выполнить:
    Код:
    chmod +x DATA9-10.py
    , то запускать можно будеть так:
    Код:
    ./DATA9-10.py
    Python2 код DATA9-10.py
    Код:
    #!/usr/bin/env python
    SN=0x281DCE71
    DATA=( (SN+0xC2E44E49) + ((SN+0xC2E44E49)>>16) ) & 0x0000FFFF
    print 'SN = 0x%08X , DATA[9-10] = %02X %02X' % (SN, (DATA & 0xFF), DATA>>8)
    Python3 код DATA9-10.py
    Код:
    #!/usr/bin/env python3
    SN=0x281DCE71
    DATA=( (SN+0xC2E44E49) + ((SN+0xC2E44E49)>>16) ) & 0x0000FFFF
    print (f"SN=0x{SN:08X} , DATA[9-10]={(DATA & 0xFF):02X} {(DATA>>8):02X}")
    Последний раз редактировалось HPDX2300; 28.07.2023 в 19:46.
    "кинжал хорош для того, у кого он есть, и плохо тому у кого он не окажется в нужное время"

  12. 19 пользователя(ей) сказали cпасибо:

    andydaw (28.07.2023), blademaster (14.08.2023), deltaone (03.08.2023), g0ga (30.07.2023), garik-kg (04.08.2023), ilya.sh (11.09.2023), kelt44 (28.07.2023), Megakiller (28.07.2023), mvl000 (22.08.2023), Nekii (23.08.2023), olegtelec (29.07.2023), redhat2020 (28.07.2023), root7 (20.01.2024), SLK01 (02.11.2023), Sova24 (29.07.2023), tlv (24.11.2023), Vedyn28 (08.04.2024), yurykk (29.07.2023), _BigB_ (28.07.2023)

  13. #47
    Помогает людям
    Аватар для HPDX2300
    Регистрация
    18.04.2018
    Адрес
    HP-Compaq DX2300 microtower PC
    Сообщений
    270
    Сказал(а) спасибо
    69
    Поблагодарили 1818 раз(а) в 397 сообщениях

    По умолчанию Re: уни-патч для линукса и для макоси

    Унипатч доработан так, чтобы можно было легко изменять в текстовом редакторе используемые им дампы.
    В первых строках скрипта меняете SERVER_KEY_HASPID и CLIENT_KEY_HASPID, SERVER_KEY_Data и CLIENT_KEY_Data будут поправлены автомагичесчки так, чтобы получились дампы, выдерживающие 2-х этапную проверку изделием памяти ключа. "Четыре палёных дампа для мультика воскресли из пепла!"
    Выхлоп скрипта в stdout будет содержать инфу о дампах SERVER_KEY и CLIENT_KEY.

    Унипатч теперь правильно эмулирует сетевой HASP-API, в диалоге "About" отображается число спартанцев сетевого ключа.
    Это на практике проявляется так: сперва вы запускали изделие с помощью парочки эмулятор+HASPLM, изделие запомнило в файле 1cv8conn.pfl последний успешный путь получения лицензии на запуск (от сетевого HASPLM), при следующем запуске читается файл 1cv8conn.pfl и выполняется попытка получить лицензию также как прошлый раз. Если теперь либа патчена унипатчем, то унипатч честно выполнит эмуляцию сетевого HASPLM, и в диалоге "О программе" --> "Лицензия:" будет написано "Текущая: Сетевой HASP4 ORGL8 100" (Сетевой, а не Локальный!)

    Порядок байтов в hex-дампах как в исполняемых модулях для процессора Intel - младший байт идет первым
    SERVER_KEY_HASPID и CLIENT_KEY_HASPID редактируются в тех местах, где подсказано подчёркиванием.

    Повторю для "чайников":
    это патчер изделия для линукса-x64
    код ниже сохранить в файл unipatch.py
    запускать так (либа бэкбейс должна быть рядом - в том же каталоге):
    python3 unipatch.py
    если предварительно выполнить:
    chmod +x unipatch.py
    , то запускать можно будеть так:
    ./unipatch.py

    Код:
    #!/usr/bin/env python3
    import sys, os, mmap
    
    SERVER_KEY_PASSWORD = bytearray.fromhex('7A 23 25 41')
    #   SERVER_KEY_SN=0x281DCF71=bytearray.fromhex('71 CF 1D 28') - it's been blocked, so modify it a bit (exactly 9-th bit): 0x281DCE71 => Data[9-10]: BC 07
    SERVER_KEY_HASPID=0x281DCE71
    #              here ^^^ ^^ you can modify
    #SERVER_KEY_SN=bytearray.fromhex('71 CE 1D 28')
    SERVER_KEY_SN=SERVER_KEY_HASPID.to_bytes(4, byteorder='little', signed=False)
    SERVER_KEY_HASPTYPE = bytearray.fromhex('01 00 00 00')
    SERVER_KEY_MEMORYSIZE=bytearray.fromhex('01 00 00 00')
    SERVER_KEY_SecTable  =bytearray.fromhex('15 EA 8F EA 73 EA EB EA')
    SERVER_KEY_Data=bytearray.fromhex('\
    01 00 00 00 00 00 00 D0 BC 07 3F 28 30 02 E5 6F\
    3E 39 D4 76 9F 6F D4 76 21 57 02 41 C3 CC D5 A7\
    4B 4C C2 81 64 84 55 76 41 E1 5E 2C 18 A7 6F F2\
    08 E1 40 A0 4E 94 A7 4A B5 41 53 6D 48 C3 6D E4\
    A4 EC C8 9C 27 7D E0 79 51 B1 25 C6 A1 69 14 FB\
    03 7B C5 1B E3 EF A3 1E 04 B5 A5 E1 4E C8 5D 28\
    99 30 10 39 2F 8D B3 E0 95 F0 36 91 56 46 C4 75')
    SERVER_KEY_LicNum = bytearray.fromhex('01 00')
    
    DATA=( (SERVER_KEY_HASPID+0xC2E44E49) + ((SERVER_KEY_HASPID+0xC2E44E49)>>16) ) & 0x0000FFFF
    DATA9=(DATA & 0xFF)
    DATA10=(DATA>>8)
    SERVER_KEY_Data[8]=DATA9.to_bytes(1, byteorder='little', signed=False)[0]
    SERVER_KEY_Data[9]=DATA10.to_bytes(1, byteorder='little', signed=False)[0]
    
    CLIENT_KEY_PASSWORD = bytearray.fromhex('CB 70 6D 3B')
    #   CLIENT_KEY_SN=0x1B93C5D6=bytearray.fromhex('D6 C5 93 1B') - it's been blocked, so modify it a bit (exactly 9-th bit): 0x1B93C4D6 => Data[9-10]: 97 F1
    CLIENT_KEY_HASPID=0x1B93C4D6
    #              here ^^^ ^^ you can modify
    #CLIENT_KEY_SN=bytearray.fromhex('D6 C4 93 1B')
    CLIENT_KEY_SN=CLIENT_KEY_HASPID.to_bytes(4, byteorder='little', signed=False)
    CLIENT_KEY_HASPTYPE = bytearray.fromhex('0A 00 00 00')
    CLIENT_KEY_MEMORYSIZE=bytearray.fromhex('04 00 00 00')
    CLIENT_KEY_SecTable  =bytearray.fromhex('9A 21 2C 25 DE 65 6C 65')
    CLIENT_KEY_Data=bytearray.fromhex('\
    01 00 00 00 00 00 00 08 97 F1 84 CF DC 4E 1E BB\
    55 6E 19 91 2D 4A 74 A3 33 7D 33 69 30 E3 5C 64\
    E5 D7 5B 51 C3 C4 9D 0F F7 D5 F6 A4 34 0E E5 E5\
    4B 63 44 2E 80 73 06 F8 6A D1 37 BA 0F 9A FD 74\
    7B 5C 89 AE 3B AC 18 BB 71 8A 9B 85 7C 13 1D 9F\
    BF 55 82 70 6D 87 DA 18 0A BD C4 22 05 A5 28 D4\
    54 B2 BC 38 F1 F2 E6 F4 54 09 42 4C B2 E1 1D AB')
    CLIENT_KEY_LicNum = bytearray.fromhex('64 00')
    
    DATA=( (CLIENT_KEY_HASPID+0xC2E44E49) + ((CLIENT_KEY_HASPID+0xC2E44E49)>>16) ) & 0x0000FFFF
    DATA9=(DATA & 0xFF)
    DATA10=(DATA>>8)
    CLIENT_KEY_Data[8]=DATA9.to_bytes(1, byteorder='little', signed=False)[0]
    CLIENT_KEY_Data[9]=DATA10.to_bytes(1, byteorder='little', signed=False)[0]
    
    pattern = bytearray.fromhex('41 81 78 08 6C 68 73 68')
    unipatch = bytearray.fromhex('51 53 52 57 56 E8 88 13 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 A0 00 00 00 00 00 00 00 A4 00 00 00 00 00 00 00 A8 00 00 00 00 00 00 00 AC 00 00 00 00 00 00 00 B0 00 00 00 00 00 00 00 B1 00 00 00 00 00 00 00 B2 00 00 00 00 00 00 00 FA 00 00 00 00 00 00 00 FA 10 00 00 00 00 00 00 06 11 00 00 00 00 00 00 C4 10 00 00 00 00 00 00 C8 10 00 00 00 00 00 00 CC 10 00 00 00 00 00 00 D0 10 00 00 00 00 00 00 D4 10 00 00 00 00 00 00 D5 10 00 00 00 00 00 00 D6 10 00 00 00 00 00 00 1E 11 00 00 00 00 00 00 0E 13 00 00 00 00 00 00 1A 13 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FB 13 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 57 42 50 54 01 00 00 00 70 00 00 00 00 00 21 11 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF 00 01 02 4A 1F 01 18 02 08 01 14 2C 33 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 DB 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 00 00 00 00 00 00 64 00 00 00 FE FF 00 01 02 4A 1F 01 04 07 08 01 10 34 07 00 5E 48 89 C9 48 31 C0 48 31 D2 8A 41 16 89 06 48 89 F3 48 83 C6 10 48 83 F8 01 75 0D C6 41 28 01 C6 41 30 00 E9 32 02 00 00 66 8B 51 20 C1 E2 10 66 8B 51 24 48 8B 3E 3B 14 3E 75 02 74 10 48 83 C6 50 48 8B 3E 3B 14 3E 0F 85 0D 02 00 00 89 53 04 48 89 73 08 48 83 F8 03 74 06 48 83 F8 2C 75 21 48 03 76 38 48 31 C0 8B 41 28 48 D1 E0 48 0F B7 04 06 89 41 2C C7 41 30 00 00 00 00 E9 D9 01 00 00 48 83 F8 68 75 27 48 03 76 38 B8 70 00 00 00 48 0F B7 04 06 C7 41 28 01 00 00 00 89 41 2C 89 41 30 C7 41 34 FF FF 00 00 E9 AC 01 00 00 48 83 F8 05 75 2A 48 31 C0 48 8B 56 18 8B 04 16 89 41 28 48 8B 56 10 8B 04 16 89 41 2C C7 41 30 DE 00 00 00 C7 41 34 3C 23 00 00 E9 7C 01 00 00 48 83 F8 06 74 05 83 F8 2E 75 22 48 03 76 08 48 31 C0 8B 06 48 0F B7 F8 C1 E8 10 89 79 28 89 41 2C C7 41 30 00 00 00 00 E9 4F 01 00 00 48 83 F8 28 75 1A C7 41 28 00 00 00 00 C7 41 2C 00 00 00 00 C7 41 30 00 00 00 00 E9 2F 01 00 00 48 83 F8 2A 75 0C C7 41 30 00 00 00 00 E9 1D 01 00 00 48 83 F8 2B 75 0C C7 41 30 00 00 00 00 E9 0B 01 00 00 48 83 F8 30 75 05 E9 00 01 00 00 48 83 F8 32 74 06 48 83 F8 34 75 32 48 03 76 38 48 31 C0 48 8B 79 40 8B 41 28 48 D1 E0 48 01 C6 48 89 C8 48 31 C9 8B 48 2C 9C FC F3 66 A5 9D 48 89 C1 C7 41 30 00 00 00 00 E9 C2 00 00 00 83 F8 33 74 06 48 83 F8 33 75 35 48 03 76 38 48 31 C0 48 8B 79 40 8B 41 28 48 D1 E0 48 01 C6 48 89 C8 48 31 C9 8B 48 2C 48 87 F7 9C FC F3 66 A5 9D 48 89 C1 C7 41 30 00 00 00 00 E9 82 00 00 00 83 F8 3C 74 05 83 F8 58 75 31 83 79 2C 08 72 72 51 48 81 EC 00 01 00 00 49 89 E0 48 31 D2 8B 51 2C 48 8B 49 40 E8 85 0B 00 00 48 81 C4 00 01 00 00 59 C7 41 30 00 00 00 00 EB 47 83 F8 3D 74 05 83 F8 59 75 31 83 79 2C 08 72 37 51 48 31 D2 8B 51 2C 48 8B 49 40 48 81 EC 00 01 00 00 49 89 E0 E8 34 10 00 00 48 81 C4 00 01 00 00 59 C7 41 30 00 00 00 00 EB 0C 83 F8 55 75 02 EB 05 B8 78 56 34 12 5E 5F 5A 5B 59 C3 56 57 48 89 D6 48 89 CF 31 C9 44 89 C1 F3 A4 5F 5E C3 48 89 54 24 10 89 4C 24 08 48 83 EC 18 8B 44 24 20 83 E0 1F 89 44 24 20 8B 44 24 20 C1 E8 02 25 FE 00 00 00 48 8B 4C 24 28 0F B6 44 01 02 B9 1F 00 00 00 2B 4C 24 20 83 E1 07 D3 F8 83 E0 01 88 44 24 04 0F B6 44 24 04 83 F0 01 8B 4C 24 20 C1 E9 03 21 C8 8B 4C 24 20 31 C1 89 C8 8B 4C 24 20 C1 E9 04 31 C8 89 04 24 48 8B 44 24 28 8B 40 0F C1 E8 0A 8B 0C 24 31 C1 89 C8 89 04 24 48 8B 44 24 28 8B 40 0F C1 E8 07 8B 0C 24 31 C1 89 C8 89 04 24 8B 44 24 20 83 E0 02 85 C0 74 15 48 8B 44 24 28 8B 40 0F C1 E8 05 8B 0C 24 31 C1 89 C8 89 04 24 8B 44 24 20 83 E0 04 85 C0 74 15 48 8B 44 24 28 8B 40 0F C1 E8 08 8B 0C 24 31 C1 89 C8 89 04 24 8B 04 24 83 E0 01 89 04 24 8B 44 24 20 83 E0 01 C1 E0 02 48 8B 4C 24 28 8B 49 0F 31 C1 89 C8 48 8B 4C 24 28 89 41 0F 48 8B 44 24 28 8B 40 0F D1 E0 48 8B 4C 24 28 89 41 0F 48 8B 44 24 28 8B 0C 24 8B 40 0F 09 C8 48 8B 4C 24 28 89 41 0F 48 8B 44 24 28 8B 40 0F C1 E8 0B 0F B6 4C 24 04 31 C8 83 E0 01 48 83 C4 18 C3 48 89 54 24 10 48 89 4C 24 08 48 83 EC 48 C7 44 24 30 1F 00 00 00 48 8B 44 24 58 8B 40 14 89 44 24 20 8B 44 24 20 35 89 19 08 01 89 44 24 20 8B 44 24 20 C1 E8 0C 89 44 24 20 C7 44 24 24 0A 00 00 00 EB 0A 8B 44 24 24 FF C8 89 44 24 24 83 7C 24 24 05 76 69 0F B6 44 24 20 83 E0 0F 89 44 24 2C 83 7C 24 2C 00 74 0A C7 44 24 38 01 00 00 00 EB 08 C7 44 24 38 00 00 00 00 83 7C 24 2C 0B 73 0A C7 44 24 3C 01 00 00 00 EB 08 C7 44 24 3C 00 00 00 00 8B 44 24 3C 8B 4C 24 38 21 C1 89 C8 8B 4C 24 24 D3 E0 8B 4C 24 30 09 C1 89 C8 89 44 24 30 8B 44 24 20 C1 E8 04 89 44 24 20 EB 86 8B 44 24 30 C1 E8 06 48 8B 4C 24 58 88 41 13 48 8B 44 24 58 0F B6 40 13 C1 E0 06 83 C8 1F 48 8B 4C 24 58 89 41 0F C7 44 24 24 01 00 00 00 C7 44 24 28 00 00 00 00 EB 0A 8B 44 24 24 FF C0 89 44 24 24 83 7C 24 24 27 77 6A 8B 44 24 28 48 8B 4C 24 50 0F B6 04 01 48 8B 54 24 58 89 C1 E8 A6 FD FF FF 89 44 24 34 48 8B 44 24 50 8B 00 83 E0 01 D1 E0 0B 44 24 34 89 44 24 28 48 8B 44 24 50 8B 00 83 E0 01 3B 44 24 34 75 12 48 8B 44 24 50 8B 00 D1 E8 48 8B 4C 24 50 89 01 EB 15 48 8B 44 24 50 8B 00 D1 E8 35 62 00 50 80 48 8B 4C 24 50 89 01 EB 85 48 83 C4 48 C3 48 89 4C 24 08 48 83 EC 48 48 8B 44 24 50 0F B6 40 01 C1 F8 05 83 E0 01 48 8B 4C 24 50 88 41 0A 48 8B 44 24 50 0F B6 40 02 C1 F8 07 83 E0 01 83 F0 01 88 44 24 24 0F B6 44 24 24 85 C0 74 0E 48 8B 44 24 50 0F B6 00 89 44 24 3C EB 0E 48 8B 44 24 50 0F B6 00 F7 D0 89 44 24 3C 0F B6 44 24 3C 88 44 24 26 C7 44 24 28 00 00 00 00 48 8B 44 24 50 0F B6 40 01 83 E0 1F 88 44 24 25 C7 44 24 2C 00 00 00 00 EB 0A 8B 44 24 2C FF C0 89 44 24 2C 83 7C 24 2C 04 7D 3D 0F B6 44 24 28 C0 E0 02 88 44 24 28 0F B6 44 24 25 83 E0 01 0F B6 4C 24 25 83 F1 01 83 E1 01 D1 E1 09 C8 0F B6 4C 24 28 09 C1 89 C8 88 44 24 28 0F B6 44 24 25 D0 E8 88 44 24 25 EB B2 0F B6 44 24 28 35 FF 00 00 00 88 44 24 2A 0F B6 44 24 28 88 44 24 29 0F B6 44 24 2A 88 44 24 2B C7 44 24 2C 00 00 00 00 EB 0A 8B 44 24 2C FF C0 89 44 24 2C 83 7C 24 2C 08 0F 8D 9F 00 00 00 8B 44 24 2C 83 C0 08 C1 F8 02 25 FE 00 00 00 48 98 48 8B 4C 24 50 0F B6 44 01 02 8B 4C 24 2C 83 C1 08 BA 1F 00 00 00 29 CA 89 D1 83 E1 07 D3 F8 83 E0 01 0F B6 4C 24 25 31 C8 8B 4C 24 2C D3 E0 0F B6 4C 24 29 31 C1 89 C8 88 44 24 29 8B 44 24 2C 83 C0 18 C1 F8 02 25 FE 00 00 00 48 98 48 8B 4C 24 50 0F B6 44 01 02 8B 4C 24 2C 83 C1 18 BA 1F 00 00 00 29 CA 89 D1 83 E1 07 D3 F8 83 E0 01 0F B6 4C 24 25 31 C8 8B 4C 24 2C D3 E0 0F B6 4C 24 2B 31 C1 89 C8 88 44 24 2B E9 4C FF FF FF 48 8B 44 24 50 C7 40 0B 00 00 00 00 C7 44 24 20 00 00 00 00 C7 44 24 30 1F 00 00 00 EB 0A 8B 44 24 30 FF C8 89 44 24 30 83 7C 24 30 00 0F 8C A4 00 00 00 0F B6 44 24 26 C1 E0 03 48 8B 4C 24 50 89 41 0F C7 44 24 38 00 00 00 00 EB 0A 8B 44 24 38 FF C0 89 44 24 38 83 7C 24 38 0C 7D 14 48 8B 54 24 50 8B 4C 24 30 E8 A6 00 00 00 88 44 24 34 EB DB 8B 44 24 20 D1 E0 89 44 24 20 8B 44 24 30 C1 F8 02 25 FE 00 00 00 48 98 48 8B 4C 24 50 0F B6 44 01 02 B9 1F 00 00 00 2B 4C 24 30 83 E1 07 D3 F8 83 E0 01 8B 4C 24 30 83 E1 01 31 C8 8B 4C 24 30 8B 54 24 28 D3 EA 89 D1 83 E1 01 31 C8 0F B6 4C 24 34 31 C8 8B 4C 24 20 09 C1 89 C8 89 44 24 20 E9 47 FF FF FF 48 8B 44 24 50 8B 4C 24 20 89 48 0B 0F B6 44 24 26 C1 E0 03 0F B6 4C 24 24 C1 E1 02 09 C8 0F B6 4C 24 24 D1 E1 09 C8 0F B6 4C 24 24 09 C8 48 8B 4C 24 50 89 41 0F 48 83 C4 48 C3 48 89 54 24 10 89 4C 24 08 48 83 EC 28 8B 44 24 30 83 E0 1F 89 44 24 30 8B 44 24 30 D1 E8 83 E0 03 E8 10 00 00 00 80 04 00 00 A0 04 00 00 80 05 00 00 A0 05 00 00 59 8B 04 81 89 44 24 04 C7 44 24 08 00 00 00 00 C7 44 24 0C 00 00 00 00 EB 0A 8B 44 24 0C FF C0 89 44 24 0C 83 7C 24 0C 0C 7D 3D 8B 44 24 0C 0F B6 C8 8B 44 24 04 D3 E8 83 E0 01 85 C0 74 27 8B 44 24 0C 48 8B 4C 24 38 48 89 4C 24 10 0F B6 C8 48 8B 44 24 10 8B 40 0F D3 E8 8B 4C 24 08 31 C1 89 C8 89 44 24 08 EB B2 8B 44 24 30 83 E0 01 C1 E0 02 48 8B 4C 24 38 8B 49 0F 31 C1 89 C8 48 8B 4C 24 38 89 41 0F 8B 44 24 30 C1 E8 02 25 FE 00 00 00 48 8B 4C 24 38 0F B6 44 01 02 B9 1F 00 00 00 2B 4C 24 30 83 E1 07 D3 F8 83 E0 01 48 8B 4C 24 38 0F B6 49 0A 31 C8 88 04 24 48 8B 44 24 38 8B 40 0F D1 E0 0F B6 0C 24 8B 54 24 08 31 CA 89 D1 83 E1 01 09 C8 48 8B 4C 24 38 89 41 0F 8B 44 24 30 48 8B 4C 24 38 48 89 4C 24 18 0F B6 C8 48 8B 44 24 18 8B 40 0B D3 E8 83 E0 01 48 8B 4C 24 38 8B 49 0F 31 C1 89 C8 48 8B 4C 24 38 89 41 0F 48 8B 44 24 38 8B 40 0F C1 E8 0B 0F B6 0C 24 31 C8 83 E0 01 48 83 C4 28 C3 48 89 54 24 10 48 89 4C 24 08 48 83 EC 38 48 8B 44 24 48 83 78 14 00 74 14 48 8B 54 24 48 48 8B 4C 24 40 E8 3F FA FF FF E9 97 00 00 00 48 8B 4C 24 48 E8 A6 FB FF FF C7 44 24 20 01 00 00 00 C7 44 24 24 00 00 00 00 EB 0A 8B 44 24 20 FF C0 89 44 24 20 83 7C 24 20 27 77 6A 8B 44 24 24 48 8B 4C 24 40 0F B6 04 01 48 8B 54 24 48 89 C1 E8 2E FE FF FF 89 44 24 28 48 8B 44 24 40 8B 00 83 E0 01 D1 E0 0B 44 24 28 89 44 24 24 48 8B 44 24 40 8B 00 83 E0 01 3B 44 24 28 75 12 48 8B 44 24 40 8B 00 D1 E8 48 8B 4C 24 40 89 01 EB 15 48 8B 44 24 40 8B 00 D1 E8 35 62 00 50 80 48 8B 4C 24 40 89 01 EB 85 48 83 C4 38 C3 49 89 E3 48 83 EC 68 45 85 C0 49 89 5B F8 49 89 6B F0 49 89 73 E8 49 89 7B E0 4D 89 63 D8 44 8B 61 04 44 89 C5 48 89 D6 48 89 CB 45 89 E1 45 89 63 C8 74 26 49 8D 4B C8 49 89 4B B8 E8 00 00 00 00 5A 48 81 EA D0 1D 00 00 48 8B 12 48 03 52 20 E8 E2 FE FF FF 44 8B 4C 24 30 8B 03 44 31 C8 89 C1 44 31 E0 35 C3 25 34 80 89 0B 89 C1 35 C3 25 34 80 C1 C0 02 33 03 89 0B 89 C1 35 C3 25 34 80 C1 C0 04 33 03 89 0B 89 C1 35 C3 25 34 80 C1 C0 06 33 03 89 0B 89 C1 35 C3 25 34 80 C1 C0 08 33 03 89 C2 35 C3 25 34 80 C1 C0 0A 89 13 31 C8 85 ED 48 8B 6C 24 58 89 43 04 41 89 C4 89 C2 89 44 24 34 74 27 48 8D 4C 24 34 E8 00 00 00 00 5A 48 81 EA 5D 1E 00 00 48 8B 12 48 03 52 20 E8 55 FE FF FF 8B 54 24 34 44 8B 4C 24 30 8B 03 48 8B 7C 24 48 31 D0 89 C1 44 31 E0 4C 8B 64 24 40 35 4A 00 2C 5B 89 0B 89 C1 35 4A 00 2C 5B C1 C0 05 33 03 89 0B 89 C1 35 4A 00 2C 5B C1 C0 0A 33 03 89 0B 89 C1 35 4A 00 2C 5B C1 C0 0F 33 03 89 0B 89 C1 35 4A 00 2C 5B C1 C0 14 33 03 89 0B 89 C1 35 4A 00 2C 5B C1 C0 19 33 03 48 85 F6 89 0B 89 43 04 48 8B 5C 24 60 74 06 44 89 0E 89 56 04 48 8B 74 24 50 48 83 C4 68 C3 48 83 EC 08 4C 8D 0C 24 41 B8 01 00 00 00 49 89 09 8B 41 5C 48 C1 E0 20 8B 49 12 48 09 C1 48 89 CA 48 83 C2 08 E8 6E FE FF FF 48 83 C4 08 C3 49 89 E3 48 83 EC 68 49 89 5B F8 48 89 CB 49 89 6B F0 49 89 73 E8 49 89 7B E0 4C 89 CF 44 8B 09 4D 89 63 D8 45 89 C4 44 89 C8 48 89 D6 35 4A 00 2C 5B C1 C0 19 33 41 04 44 89 49 04 89 01 89 C1 35 4A 00 2C 5B C1 C0 14 89 4B 04 44 31 C8 89 C1 35 4A 00 2C 5B C1 C0 0F 33 43 04 89 4B 04 89 C1 35 4A 00 2C 5B C1 C0 0A 33 43 04 89 4B 04 89 C1 35 4A 00 2C 5B C1 C0 05 33 43 04 89 4B 04 89 C1 8B 43 04 31 C8 89 4B 04 35 4A 00 2C 5B 45 85 E4 89 03 89 C5 41 89 C0 89 44 24 34 74 37 48 8B 07 49 8D 4B CC 44 0F B7 48 1E 44 0F B7 40 0C 0F B7 50 08 49 89 4B B8 E8 00 00 00 00 5A 48 81 EA E1 1F 00 00 48 8B 12 48 03 52 20 E8 D1 FC FF FF 44 8B 44 24 34 8B 43 04 44 31 C0 89 C1 35 C3 25 34 80 C1 C0 0A 89 4B 04 31 E8 89 C1 35 C3 25 34 80 C1 C0 08 33 43 04 89 4B 04 89 C1 35 C3 25 34 80 C1 C0 06 33 43 04 89 4B 04 89 C1 35 C3 25 34 80 C1 C0 04 33 43 04 89 4B 04 89 C1 35 C3 25 34 80 C1 C0 02 33 43 04 89 C2 89 C8 31 D0 89 53 04 35 C3 25 34 80 45 85 E4 4C 8B 64 24 40 89 03 89 C5 89 C1 89 44 24 30 74 3D 48 8B 07 48 8D 4C 24 30 44 0F B7 48 1E 44 0F B7 40 0C 0F B7 50 08 48 89 4C 24 20 E8 00 00 00 00 5A 48 81 EA 8E 20 00 00 48 8B 12 48 03 52 20 E8 24 FC FF FF 44 8B 44 24 34 8B 4C 24 30 8B 43 04 48 8B 7C 24 48 89 6B 04 48 8B 6C 24 58 31 C8 48 85 F6 89 03 48 8B 5C 24 60 74 06 89 0E 44 89 46 04 48 8B 74 24 50 48 83 C4 68 C3 48 83 EC 08 4C 8D 0C 24 41 B8 01 00 00 00 49 89 09 8B 41 5C 48 C1 E0 20 8B 49 12 48 09 C1 48 89 CA 48 83 C2 08 E8 23 FE FF FF 48 83 C4 08 C3 48 89 E0 48 81 EC E8 00 00 00 48 89 58 08 48 89 68 10 48 89 70 18 48 89 78 20 4C 89 60 F8 4C 89 68 F0 4C 89 70 E8 4C 89 78 E0 B8 08 00 00 00 44 8D 72 07 41 89 D7 4C 89 C5 41 C1 EE 03 41 83 E7 07 48 89 CB 44 0F 44 F8 45 31 C9 41 8D 46 FF 85 C0 44 89 7C 24 28 44 89 4C 24 24 45 89 C8 44 89 4C 24 20 45 89 CD 45 8D 51 02 0F 84 7A 02 00 00 48 8B 7C 24 30 44 8B 64 24 54 4D 89 D7 44 31 03 44 31 4B 04 45 85 ED 8B 0B 8B 53 04 0F 85 16 01 00 00 45 39 FE 0F 86 DB 00 00 00 66 44 89 6D 10 48 8B 03 48 89 E9 48 89 44 24 38 48 8D 44 24 38 48 89 7C 24 40 89 45 12 48 8D 44 24 38 66 44 89 7D 16 48 C1 E8 20 66 44 89 6D 3E 89 45 5C E8 1C FD FF FF 48 8B 7C 24 40 48 8B 44 24 38 48 89 7C 24 30 8B 74 24 34 48 89 03 89 7C 24 50 48 8D 54 24 54 66 44 89 6D 16 45 8D 45 05 8B 4A FC 48 83 C2 14 8D 04 31 83 E1 1F 89 42 EC 89 F8 D3 C8 31 44 24 54 8B 4A EC 8D 04 31 83 E1 1F 89 42 F0 89 F8 D3 C8 31 44 24 54 8B 4A F0 8D 04 31 83 E1 1F 89 42 F4 89 F8 D3 C8 31 44 24 54 8B 4A F4 8D 04 31 83 E1 1F 89 42 F8 89 F8 D3 C8 31 44 24 54 8B 4A F8 8D 04 31 83 E1 1F 89 42 FC 44 8B 64 24 54 89 F8 D3 C8 41 31 C4 49 FF C8 44 89 64 24 54 75 8A E9 42 01 00 00 48 89 D8 48 89 E9 66 C7 45 10 00 00 48 C1 E8 20 66 C7 45 16 01 00 66 C7 45 3E 00 00 89 45 5C 89 5D 12 E8 52 FC FF FF 66 C7 45 16 00 00 E9 10 01 00 00 8B 44 24 50 46 8D 04 21 4C 8D 4C 24 5C 8D 34 02 44 89 03 4D 89 FA 89 73 04 44 89 C1 44 89 C2 49 83 C1 30 C1 E9 04 31 F2 83 E1 1F D3 C2 41 2B 51 CC 41 31 D0 89 D1 C1 E9 07 83 E1 1F 41 D3 C0 45 03 41 D0 44 89 C1 44 89 C6 C1 E9 04 31 D6 83 E1 1F D3 C6 41 2B 71 D4 41 31 F0 89 F1 C1 E9 07 83 E1 1F 41 D3 C0 45 03 41 D8 44 89 C1 44 89 C2 C1 E9 04 31 F2 83 E1 1F D3 C2 41 2B 51 DC 41 31 D0 89 D1 C1 E9 07 83 E1 1F 41 D3 C0 45 03 41 E0 44 89 C1 44 89 C6 C1 E9 04 31 D6 83 E1 1F D3 C6 41 2B 71 E4 41 31 F0 89 F1 C1 E9 07 83 E1 1F 41 D3 C0 45 03 41 E8 44 89 C1 44 89 C2 C1 E9 04 31 F2 83 E1 1F D3 C2 41 2B 51 EC 41 31 D0 89 D1 C1 E9 07 83 E1 1F 41 D3 C0 45 03 41 F0 44 89 C1 44 89 C6 C1 E9 04 31 D6 83 E1 1F D3 C6 41 2B 71 F4 41 31 F0 89 F1 C1 E9 07 83 E1 1F 41 D3 C0 45 03 41 F8 49 FF CA 0F 85 0F FF FF FF 44 89 03 89 73 04 44 8B 03 44 8B 4B 04 41 8D 46 FF 41 FF C5 48 83 C3 08 44 89 44 24 20 41 39 C5 44 89 4C 24 24 0F 82 A0 FD FF FF 44 8B 7C 24 28 41 BA 02 00 00 00 EB 05 44 8B 64 24 54 45 85 FF 4C 8B AC 24 D8 00 00 00 74 2C 48 8D 44 24 20 48 89 DF 48 8D 4C 24 20 48 29 C7 44 89 FA 0F B6 04 0F 48 FF C1 30 41 FF 48 FF CA 75 F1 44 8B 4C 24 24 44 8B 44 24 20 41 83 FE 02 0F 86 FF 00 00 00 44 03 4C 24 50 48 8D 74 24 5C 45 01 E0 44 89 C1 44 89 C2 48 83 C6 30 C1 E9 04 44 31 CA 83 E1 1F D3 C2 2B 56 CC 41 31 D0 89 D1 C1 E9 07 83 E1 1F 41 D3 C0 44 03 46 D0 44 89 C1 44 89 C7 C1 E9 04 31 D7 83 E1 1F D3 C7 2B 7E D4 41 31 F8 89 F9 C1 E9 07 83 E1 1F 41 D3 C0 44 03 46 D8 44 89 C1 44 89 C2 C1 E9 04 31 FA 83 E1 1F D3 C2 2B 56 DC 41 31 D0 89 D1 C1 E9 07 83 E1 1F 41 D3 C0 44 03 46 E0 44 89 C1 44 89 C7 C1 E9 04 31 D7 83 E1 1F D3 C7 2B 7E E4 41 31 F8 89 F9 C1 E9 07 83 E1 1F 41 D3 C0 44 03 46 E8 44 89 C1 44 89 C2 C1 E9 04 31 FA 83 E1 1F D3 C2 2B 56 EC 41 31 D0 89 D1 C1 E9 07 83 E1 1F 41 D3 C0 44 03 46 F0 44 89 C1 45 89 C1 C1 E9 04 41 31 D1 83 E1 1F 41 D3 C1 44 2B 4E F4 45 31 C8 44 89 C9 C1 E9 07 83 E1 1F 41 D3 C0 44 03 46 F8 49 FF CA 0F 85 10 FF FF FF EB 51 41 83 FE 01 75 0D 8B 03 89 44 24 20 8B 43 04 89 44 24 24 48 8D 44 24 20 48 89 E9 66 C7 45 10 00 00 89 45 12 48 8D 44 24 20 66 C7 45 16 01 00 48 C1 E8 20 66 C7 45 3E 00 00 89 45 5C E8 7D F9 FF FF 44 8B 4C 24 24 44 8B 44 24 20 66 C7 45 16 00 00 4C 8B A4 24 E0 00 00 00 48 8B AC 24 F8 00 00 00 41 83 FE 01 4C 8B B4 24 D0 00 00 00 76 1B 45 85 FF 74 0C 48 8D 73 F8 44 89 F9 48 89 DF F3 A4 44 89 43 F8 44 89 4B FC EB 07 44 89 03 44 89 4B 04 4C 8B BC 24 C8 00 00 00 48 8B BC 24 08 01 00 00 48 8B B4 24 00 01 00 00 48 8B 9C 24 F0 00 00 00 48 81 C4 E8 00 00 00 C3 48 89 E0 48 81 EC F8 00 00 00 48 89 58 08 48 89 68 10 48 89 70 18 48 89 78 20 4C 89 60 F8 4C 89 68 F0 4C 89 70 E8 4C 89 78 E0 48 89 CB 8D 4A 07 89 D0 BA 08 00 00 00 C1 E9 03 83 E0 07 4C 89 C7 0F 44 C2 45 31 FF 83 F9 01 89 4C 24 30 44 8D 62 04 44 89 7C 24 2C 44 89 7C 24 34 44 89 7C 24 28 45 89 FE 89 44 24 38 0F 86 9F 01 00 00 83 C1 FE 44 89 FE 89 4C 24 20 0F 84 8F 01 00 00 48 8B 44 24 40 44 8B 6C 24 64 8B 6C 24 60 85 F6 44 8B 03 44 8B 73 04 45 89 C7 44 89 44 24 28 0F 85 EE 00 00 00 48 89 44 24 50 48 8D 44 24 48 66 89 77 10 48 8B 0B 89 47 12 48 8D 44 24 48 48 C1 E8 20 48 89 4C 24 48 48 89 F9 66 C7 47 16 02 00 66 89 77 3E 89 47 5C E8 0E FA FF FF 48 8B 44 24 48 4C 8D 44 24 64 48 89 03 48 8B 44 24 50 44 8D 56 05 48 89 44 24 40 44 8B 4C 24 44 66 89 77 16 89 44 24 60 41 8B 48 FC 49 83 C0 14 42 8D 14 09 83 E1 1F 41 89 50 EC 89 C2 D3 CA 31 54 24 64 41 8B 48 EC 42 8D 14 09 83 E1 1F 41 89 50 F0 89 C2 D3 CA 31 54 24 64 41 8B 48 F0 42 8D 14 09 83 E1 1F 41 89 50 F4 89 C2 D3 CA 31 54 24 64 41 8B 48 F4 42 8D 14 09 83 E1 1F 41 89 50 F8 89 C2 D3 CA 31 54 24 64 41 8B 48 F8 42 8D 14 09 83 E1 1F 41 89 50 FC 44 8B 6C 24 64 89 C2 D3 CA 41 31 D5 49 FF CA 44 89 6C 24 64 0F 85 77 FF FF FF 8B 6C 24 60 EB 4B 45 89 E3 45 89 F1 4C 8D 94 24 C0 00 00 00 45 2B 42 04 44 89 C9 49 83 EA 08 C1 E9 07 83 E1 1F 41 D3 C8 45 31 C8 45 03 4A 08 44 89 C1 C1 E9 04 83 E1 1F 41 D3 C9 45 31 C1 41 83 C3 FF 75 D0 45 29 E8 41 29 E9 44 89 4B 04 44 89 03 8B 4C 24 34 FF C6 48 83 C3 08 31 4B F8 8B 4C 24 2C 44 89 7C 24 34 31 4B FC 3B 74 24 20 44 89 74 24 2C 0F 82 88 FE FF FF 8B 44 24 38 45 31 FF EB 09 44 8B 6C 24 64 8B 6C 24 60 85 C0 44 89 7C 24 20 44 89 FE 44 89 7C 24 24 74 1A 48 8D 53 08 48 8D 4C 24 20 41 89 C0 E8 B8 ED FF FF 8B 74 24 24 44 8B 7C 24 20 44 8B 5C 24 30 41 83 FB 01 75 32 48 89 D8 48 89 F9 66 C7 47 10 00 00 48 C1 E8 20 66 C7 47 16 01 00 66 C7 47 3E 00 00 89 47 5C 89 5F 12 E8 75 F8 FF FF 66 C7 47 16 00 00 E9 29 01 00 00 41 83 FB 02 75 34 48 89 D8 48 89 F9 66 C7 47 10 00 00 48 C1 E8 20 66 C7 47 16 01 00 66 C7 47 3E 00 00 89 47 5C 89 5F 12 E8 3D F8 FF FF 44 8B 5C 24 30 66 C7 47 16 00 00 EB 55 8B 13 44 8B 43 04 45 89 E2 4C 8D 8C 24 C0 00 00 00 41 2B 51 04 44 89 C1 49 83 E9 08 C1 E9 07 83 E1 1F D3 CA 44 31 C2 45 03 41 08 89 D1 C1 E9 04 83 E1 1F 41 D3 C8 41 31 D0 41 83 C2 FF 75 D2 44 29 EA 41 29 E8 41 83 FB 01 89 13 44 89 43 04 0F 86 9A 00 00 00 44 33 3B 33 73 04 8B 44 24 38 85 C0 44 89 7C 24 20 89 74 24 24 74 31 4C 8D 44 24 20 49 89 D9 48 8D 4B 08 4D 29 C1 49 89 C0 48 8D 54 24 20 0F B6 01 48 FF C1 48 FF C2 49 FF C8 41 88 44 11 FF 0F B6 42 FF 88 41 FF 75 E6 41 83 FB 02 0F 84 ED FE FF FF 8B 13 44 8B 43 04 4C 8D 8C 24 C0 00 00 00 41 2B 51 04 44 89 C1 49 83 E9 08 C1 E9 07 83 E1 1F D3 CA 44 31 C2 45 03 41 08 89 D1 C1 E9 04 83 E1 1F 41 D3 C8 41 31 D0 41 83 C4 FF 75 D2 44 29 EA 41 29 E8 44 89 43 04 89 13 8B 44 24 28 4C 8B BC 24 D8 00 00 00 4C 8B AC 24 E8 00 00 00 31 03 44 31 73 04 4C 8B A4 24 F0 00 00 00 4C 8B B4 24 E0 00 00 00 48 8B 9C 24 00 01 00 00 48 8B BC 24 18 01 00 00 48 8B B4 24 10 01 00 00 48 8B AC 24 08 01 00 00 48 81 C4 F8 00 00 00 C3 CC CC CC CC 57 59 E9 F9 D5 FF FF')
    
    fullfname=os.getcwd()+'/backbas.so'
    
    
    a=0xBA
    unipatch[a:a+4]=SERVER_KEY_PASSWORD
    a=a+4
    unipatch[a:a+4]=SERVER_KEY_SN
    a=a+4
    unipatch[a:a+4]=SERVER_KEY_HASPTYPE
    a=a+4
    unipatch[a:a+4]=SERVER_KEY_MEMORYSIZE
    a=a+6
    unipatch[a:a+8]=SERVER_KEY_SecTable
    a=a+0x48
    unipatch[a:a+0x70]=SERVER_KEY_Data
    a=a+0x70
    unipatch[a:a+2]=SERVER_KEY_LicNum
    
    
    a=0x112E
    unipatch[a:a+4]=CLIENT_KEY_PASSWORD
    a=a+4
    unipatch[a:a+4]=CLIENT_KEY_SN
    a=a+4
    unipatch[a:a+4]=CLIENT_KEY_HASPTYPE
    a=a+4
    unipatch[a:a+4]=CLIENT_KEY_MEMORYSIZE
    a=a+6
    unipatch[a:a+8]=CLIENT_KEY_SecTable
    a=a+0x48
    unipatch[a:a+0x70]=CLIENT_KEY_Data
    a=a+0x70
    unipatch[a:a+2]=CLIENT_KEY_LicNum
    
    try:
      fp = open(fullfname, 'r+')
      if os.stat(fp.name).st_size > 0:
        mm = mmap.mmap(fp.fileno(), 0)
    
      # WTF? "to smoke": man 5 elf
      if mm[0]!=0x7f or mm[1]!=0x45 or mm[2]!=0x4C or mm[3]!=0x46 or mm[4]!=2 or mm[5]!=1 or mm[6]!=1 or mm[16]!=3 or mm[17]!=0 or mm[18]!=0x3E or mm[19]!=0:
        print ("what a fuck are you giving me?")
        sys.exit()
      e_phoff = mm[0x20]+(mm[0x21]+(mm[0x22]+(mm[0x23]<<8)<<8)<<8)
    #  print (f"e_phoff = {hex(e_phoff)}")
      e_phentsize = mm[0x36]+(mm[0x37]<<8)
    #  print (f"e_phentsize = {hex(e_phentsize)}")
      e_phnum = mm[0x38]+(mm[0x39]<<8)
    #  print (f"e_phnum = {hex(e_phnum)}")
      for i in range(e_phnum):
        p = e_phoff + i * e_phentsize
        p_type  = mm[p]+(mm[p+1]+(mm[p+2]+(mm[p+3]<<8)<<8)<<8)
        p_flags = mm[p+4]+(mm[p+5]+(mm[p+6]+(mm[p+7]<<8)<<8)<<8)
        if (p_type==1 and p_flags==5):
    #      print(f"p_type={hex(p_type)}, p_flags={hex(p_flags)}")
    #      print(f"mm[{hex(p+4)}] += PF_W")
          mm[p+4] = 7
          break
    #    else:
    #      print(f"p_type={hex(p_type)}, p_flags={hex(p_flags)}")
      pattern_addr = mm.find(pattern)
      if pattern_addr != -1:
        unipatch_addr=pattern_addr-0x2A75
        print (f"patching  {fullfname}  at offset={hex(unipatch_addr)}")
        mm[unipatch_addr:unipatch_addr+0x2A07] = unipatch
    
      mm.close()
    except IOError as e:
      print (f"I/O error({e.errno}): {e.strerror}, filename={fullfname}")
    
    
    
    print ('#############_SERVER_KEY_INFO_#################', sep='', end='')
    print ('')
    a=0xBA
    print ('SERVER_KEY_PASSWORD:', sep='', end=' ')
    for i in range(a,a+4):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print (f"=0x{format(int.from_bytes(unipatch[a:a+4], byteorder='little', signed=False),'08X')}")
    a=a+4
    print ('SERVER_KEY_SN:', sep='', end=' ')
    for i in range(a,a+4):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print (f"=0x{format(int.from_bytes(unipatch[a:a+4], byteorder='little', signed=False),'08X')}")
    a=a+4
    print ('SERVER_KEY_HASPTYPE:', sep='', end=' ')
    for i in range(a,a+4):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print (f"=0x{format(int.from_bytes(unipatch[a:a+4], byteorder='little', signed=False),'08X')}")
    a=a+4
    print ('SERVER_KEY_MEMORYSIZE:', sep='', end=' ')
    for i in range(a,a+4):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print (f"=0x{format(int.from_bytes(unipatch[a:a+4], byteorder='little', signed=False),'08X')}")
    a=a+6
    print ('SERVER_KEY_SecTable:', sep='', end=' ')
    for i in range(a,a+8):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print ('')
    a=a+0x48
    print ('SERVER_KEY_Data:', sep='', end='\n')
    for i in range(a,a+0x70,16):  
      for k in range(0,16):
        print (format(unipatch[i+k],'02X'), sep='', end=' ')
      print ('')
    a=a+0x70
    print ('SERVER_KEY_LicNum:', sep='', end=' ')
    for i in range(a,a+2):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print (f"=0x{format(int.from_bytes(unipatch[a:a+2], byteorder='little', signed=False),'04X')}")
    
    print ('#############_CLIENT_KEY_INFO_#################', sep='', end='')
    print ('')
    a=0x112E
    print ('CLIENT_KEY_PASSWORD:', sep='', end=' ')
    for i in range(a,a+4):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print (f"=0x{format(int.from_bytes(unipatch[a:a+4], byteorder='little', signed=False),'08X')}")
    a=a+4
    print ('CLIENT_KEY_SN:', sep='', end=' ')
    for i in range(a,a+4):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print (f"=0x{format(int.from_bytes(unipatch[a:a+4], byteorder='little', signed=False),'08X')}")
    a=a+4
    print ('CLIENT_KEY_HASPTYPE:', sep='', end=' ')
    for i in range(a,a+4):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print (f"=0x{format(int.from_bytes(unipatch[a:a+4], byteorder='little', signed=False),'08X')}")
    a=a+4
    print ('CLIENT_KEY_MEMORYSIZE:', sep='', end=' ')
    for i in range(a,a+4):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print (f"=0x{format(int.from_bytes(unipatch[a:a+4], byteorder='little', signed=False),'08X')}")
    a=a+6
    print ('CLIENT_KEY_SecTable:', sep='', end=' ')
    for i in range(a,a+8):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print ('')
    a=a+0x48
    print ('CLIENT_KEY_Data:', sep='', end='\n')
    for i in range(a,a+0x70,16):  
      for k in range(0,16):
        print (format(unipatch[i+k],'02X'), sep='', end=' ')
      print ('')
    
    a=a+0x70
    print ('CLIENT_KEY_LicNum:', sep='', end=' ')
    for i in range(a,a+2):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print (f"=0x{format(int.from_bytes(unipatch[a:a+2], byteorder='little', signed=False),'04X')}")
    Последний раз редактировалось HPDX2300; 07.11.2023 в 21:31.
    "кинжал хорош для того, у кого он есть, и плохо тому у кого он не окажется в нужное время"

  14. 15 пользователя(ей) сказали cпасибо:

    Andxs72 (10.11.2023), andydaw (08.11.2023), bonifacio_dot (08.10.2024), Den-1977 (08.11.2023), Evld (14.11.2023), g0ga (14.11.2023), ilya.sh (19.11.2023), kelt44 (08.11.2023), Megakiller (08.11.2023), olegtelec (27.11.2023), Renzes (10.11.2023), root7 (20.01.2024), Sova24 (24.11.2023), yurykk (16.11.2023), _BigB_ (08.11.2023)

  15. #48
    Помогает людям
    Аватар для HPDX2300
    Регистрация
    18.04.2018
    Адрес
    HP-Compaq DX2300 microtower PC
    Сообщений
    270
    Сказал(а) спасибо
    69
    Поблагодарили 1818 раз(а) в 397 сообщениях

    По умолчанию Re: уни-патч для линукса и для макоси

    Указанный в посте выше unipatch.py можно использовать как генератор рабочих дампов-мутантов.
    SERVER_KEY_HASPID и CLIENT_KEY_HASPID редактируются в тех местах, где подсказано подчёркиванием.
    Запускаем unipatch.py на выполнение (либа backbas.so в этом случае не нужна), выхлоп будет содержать пары HASPID-DATA, которые надо прописать в дамп-мутант.
    пример выхлопа:
    Код:
    $ ./unipatch.py
    #############_SERVER_KEY_INFO_#################
    SERVER_KEY_PASSWORD: 7A 23 25 41 =0x4125237A
    SERVER_KEY_SN: 71 CE 1D 28 =0x281DCE71
    SERVER_KEY_HASPTYPE: 01 00 00 00 =0x00000001
    SERVER_KEY_MEMORYSIZE: 01 00 00 00 =0x00000001
    SERVER_KEY_SecTable: 15 EA 8F EA 73 EA EB EA 
    SERVER_KEY_Data:
    01 00 00 00 00 00 00 D0 BC 07 3F 28 30 02 E5 6F 
    3E 39 D4 76 9F 6F D4 76 21 57 02 41 C3 CC D5 A7 
    4B 4C C2 81 64 84 55 76 41 E1 5E 2C 18 A7 6F F2 
    08 E1 40 A0 4E 94 A7 4A B5 41 53 6D 48 C3 6D E4 
    A4 EC C8 9C 27 7D E0 79 51 B1 25 C6 A1 69 14 FB 
    03 7B C5 1B E3 EF A3 1E 04 B5 A5 E1 4E C8 5D 28 
    99 30 10 39 2F 8D B3 E0 95 F0 36 91 56 46 C4 75 
    SERVER_KEY_LicNum: 01 00 =0x0001
    #############_CLIENT_KEY_INFO_#################
    CLIENT_KEY_PASSWORD: CB 70 6D 3B =0x3B6D70CB
    CLIENT_KEY_SN: D6 C4 93 1B =0x1B93C4D6
    CLIENT_KEY_HASPTYPE: 0A 00 00 00 =0x0000000A
    CLIENT_KEY_MEMORYSIZE: 04 00 00 00 =0x00000004
    CLIENT_KEY_SecTable: 9A 21 2C 25 DE 65 6C 65 
    CLIENT_KEY_Data:
    01 00 00 00 00 00 00 08 97 F1 84 CF DC 4E 1E BB 
    55 6E 19 91 2D 4A 74 A3 33 7D 33 69 30 E3 5C 64 
    E5 D7 5B 51 C3 C4 9D 0F F7 D5 F6 A4 34 0E E5 E5 
    4B 63 44 2E 80 73 06 F8 6A D1 37 BA 0F 9A FD 74 
    7B 5C 89 AE 3B AC 18 BB 71 8A 9B 85 7C 13 1D 9F 
    BF 55 82 70 6D 87 DA 18 0A BD C4 22 05 A5 28 D4 
    54 B2 BC 38 F1 F2 E6 F4 54 09 42 4C B2 E1 1D AB 
    CLIENT_KEY_LicNum: 64 00 =0x0064
    "кинжал хорош для того, у кого он есть, и плохо тому у кого он не окажется в нужное время"

  16. 20 пользователя(ей) сказали cпасибо:

    asam (26.11.2023), blademaster (23.11.2023), Den-1977 (14.11.2023), Ersain (21.01.2024), Evld (14.11.2023), g0ga (14.11.2023), ilya.sh (19.11.2023), kelt44 (14.11.2023), Megakiller (16.11.2023), olegtelec (27.11.2023), Renzes (05.12.2023), root7 (20.01.2024), Serrrgio (10.09.2024), Sova24 (24.11.2023), tlv (24.11.2023), user1212 (06.12.2023), Vedyn28 (08.04.2024), Vertex70 (25.11.2023), yurykk (16.11.2023), _BigB_ (14.11.2023)

  17. #49
    Помогает людям
    Аватар для HPDX2300
    Регистрация
    18.04.2018
    Адрес
    HP-Compaq DX2300 microtower PC
    Сообщений
    270
    Сказал(а) спасибо
    69
    Поблагодарили 1818 раз(а) в 397 сообщениях

    По умолчанию Re: уни-патч для линукса и для макоси

    Цитата Сообщение от HPDX2300 Посмотреть сообщение
    в такой ситуации можно пробовать выключить "System Integrity Protection": идею подсмотрел тут: Disabling SIP on the debuggee цитата: "...For proper debugging, you may need to disable SIP (System Integrity Protection) on the machine whose kernel you wanna debug. To do that, reboot the machine in Recovery Mode. To do that, reboot the machine and when you hear the “BOONG!”, or when the screen turns on, press CMD + R. Wait a few seconds for it to boot into Recovery Mode user interface, and open “Terminal” from the top bar. In the Recovery Terminal, write
    Код:
    csrutil disable
    . Then reboot the machine and boot it normally to macOS."
    ответ завернул в цитату:
    Цитата Сообщение от HPDX2300
    Для тех, кто хочет повторять мой рецепт для изделий под макось, нашел ещё одну подсказку знатока в теме IDA PRO: Цитата: "там отсутствовал один единственный ни на что не влияющий файл CodeResources" и ответs: 1) "В macOS он влияет на проверку подписи, co всеми вытекающими последствиями. В зависимости от настроек ОС, программа с нарушенной подписью может вообще не запуститься." 2) "секция подписи может быть стрипнута и тогда настройки оси влиять не будут - разве что в самой проге будет собственная проверка целосности" Если пробовать удалить перед установкой файл CodeResources", то, возможно, платформа может быть полечена без выключения "System Integrity Protection" (см.пост #25)
    Последний раз редактировалось HPDX2300; 18.10.2024 в 15:43.
    "кинжал хорош для того, у кого он есть, и плохо тому у кого он не окажется в нужное время"

  18. #50
    Помогает людям
    Аватар для HPDX2300
    Регистрация
    18.04.2018
    Адрес
    HP-Compaq DX2300 microtower PC
    Сообщений
    270
    Сказал(а) спасибо
    69
    Поблагодарили 1818 раз(а) в 397 сообщениях

    По умолчанию Re: уни-патч для линукса и для макоси

    Продолжаем популяризировать изделие известной секты.
    В процессе изучения "relocation processing" родился унипатч для 32-битных изделий для линукса.
    Ничо особенного, всё точно также как и в случае унипатча для linux-x86_64 - код взят из 1С8_UP.exe, обработан напильником (изменены HASP_ID, они же SN), записан в либу в правильное место, и исправлена таблица релоков чтобы унипатч не портился.
    Испытывал на 23-1782-linux-i386 25-1445-linux-i386, первое из них воюет с дампами для "мультика", второе не воюет.

    unipatch-x86.py можно использовать как генератор рабочих дампов-мутантов.
    SERVER_KEY_HASPID и CLIENT_KEY_HASPID редактируются в тех местах, где подсказано подчёркиванием.

    Повторю для "чайников":
    это патчер изделия для линукса-x86 (32-х разрядного)
    код ниже сохранить в файл unipatch-x86.py
    запускать так (либа бэкбейс должна быть рядом - в том же каталоге):
    python3 unipatch-x86.py
    если предварительно выполнить:
    chmod +x unipatch-x86.py
    , то запускать можно будеть так:
    ./unipatch-x86.py

    Код:
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    import sys, os, mmap
    
    SERVER_KEY_PASSWORD=bytearray.fromhex('E4 10 31 4E');
    #   SERVER_KEY_SN=0x08ED1E32 - it's been blocked, so modify it a bit (exactly 9-th bit): 0x08ED1F32
    SERVER_KEY_HASPID=0x08ED1F32;
    #              here ^^^ ^^ you can modify
    SERVER_KEY_SN=SERVER_KEY_HASPID.to_bytes(4,byteorder='little',signed=False);
    SERVER_KEY_HASPTYPE = bytearray.fromhex('01 00 00 00');
    SERVER_KEY_MEMORYSIZE=bytearray.fromhex('01 00 00 00');
    SERVER_KEY_SecTable  =bytearray.fromhex('09 42 45 46 A1 E2 E5 E6');
    SERVER_KEY_Data=bytearray.fromhex('\
    01 00 00 00 00 00 00 30 4C 38 68 E9 A2 AD B3 2A\
    8F D6 2A F9 01 42 FB 22 3F C9 45 75 BA 93 56 5B\
    DA 0A 77 F8 0B 0F 51 B7 81 0E 41 59 1D B1 76 4A\
    D7 45 36 13 07 44 73 DD 29 02 59 D9 6F D5 2D 42\
    25 23 C3 43 E7 61 E9 A1 ED 97 A5 15 18 FD 54 C9\
    E8 98 63 C3 2C 3C 6A 0F FF B5 7B 3F 79 EF 15 49\
    56 72 E2 C8 E5 3F 0D 61 17 9A C1 11 E2 66 C1 B1');
    DATA=( (SERVER_KEY_HASPID+0xC2E44E49) + ((SERVER_KEY_HASPID+0xC2E44E49)>>16) ) & 0x0000FFFF;
    DATA9=(DATA & 0xFF);
    DATA10=(DATA>>8);
    SERVER_KEY_Data[8]=DATA9.to_bytes(1,byteorder='little',signed=False)[0];
    SERVER_KEY_Data[9]=DATA10.to_bytes(1,byteorder='little',signed=False)[0];
    
    CLIENT_KEY_PASSWORD=bytearray.fromhex('CB 70 6D 3B');
    #   CLIENT_KEY_SN=0x5CEE77A1 - it's been blocked, so modify it a bit (exactly 9-th bit): 0x5CEE78A1
    CLIENT_KEY_HASPID=0x5CEE78A1;
    #              here ^^^ ^^ you can modify
    CLIENT_KEY_SN=CLIENT_KEY_HASPID.to_bytes(4,byteorder='little',signed=False);
    CLIENT_KEY_HASPTYPE = bytearray.fromhex('01 00 00 00');
    CLIENT_KEY_MEMORYSIZE=bytearray.fromhex('04 00 00 00');
    CLIENT_KEY_SecTable  =bytearray.fromhex('9A 21 2C 25 DE 65 6C 65');
    CLIENT_KEY_Data=bytearray.fromhex('\
    01 00 00 00 00 00 00 70 BC E5 08 7C E2 0A 4A 48\
    02 75 16 D1 CC 45 B1 8B 08 4A B3 8C 62 5C 30 2C\
    93 5A BD 6C 97 F6 58 03 FE D8 6A 11 41 87 E8 46\
    C8 F2 49 B5 08 3A 95 30 33 C5 4C D4 15 4F 95 1E\
    F4 24 ED 2E 8F C5 7A EE 17 20 3B 41 35 E9 A9 AF\
    F5 22 63 57 06 5A F4 A4 E7 FC 3A 34 68 4E 8C 5D\
    87 86 CD 38 8E 6E 82 B3 D2 4A 6B FD 6E D5 4E FF');
    CLIENT_KEY_LicNum = bytearray.fromhex('64 00');
    
    DATA=( (CLIENT_KEY_HASPID+0xC2E44E49) + ((CLIENT_KEY_HASPID+0xC2E44E49)>>16) ) & 0x0000FFFF;
    DATA9=(DATA & 0xFF);
    DATA10=(DATA>>8);
    CLIENT_KEY_Data[8]=DATA9.to_bytes(1,byteorder='little',signed=False)[0];
    CLIENT_KEY_Data[9]=DATA10.to_bytes(1,byteorder='little',signed=False)[0];
    
    pattern = bytearray.fromhex("8178086C687368");
    unipatch = bytearray.fromhex("558B6C24088D4534508D4530508D452C508D4528508B4524508B4520508B451C508B4518500FB6451650E80500000083C4245DC3558BEC60E9D404000000000000CB706D3BA177EE5C0100000004000000000000009A212C25DE656C65AD2A4E7AA1219CE62687410CA370A40988E33130430403D6B5C25AAD7E1EC12486B65B0A639980D03F320E002184DA10ACA90BA8E621A17CA1489EB1097018C4C12838992AB03024847823B9439048573C8C51A4305604CFDB8802184A3181922C44334DD60520773D0E1AACE6404C6B12D8E6D00C43034048785438111D0D02908AAE420A5295F5734C2972D60B02355088D6041804088104E4493CA05B24F0E804C34381CDD2D30A542C24205D24A05336122150421960880705E68EB20380D35AE4D971C1E15B5A3826AE0556184E32014D82C341A1A6E28214F400DD35C058EA781523C6330178D80928029A4A1D390480F50D2C82DAB481F26B010101010100000000000070BCE5087CE20A4A48027516D1CC45B18B084AB38C625C302C935ABD6C97F65803FED86A114187E846C8F249B5083A953033C54CD4154F951EF424ED2E8FC57AEE17203B4135E9A9AFF5226357065AF4A4E7FC3A34684E8C5D8786CD388E6E82B3D24A6BFD6ED54EFF0A00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0300F00104FF0A00FFFFFEFF0101024A1F0000000000000000C9E410314E321EED0801000000010000000000000009424546A1E2E5E6E04904F2B00910F2062AC29E83B840340F6011BC67088951A46276296982E27035EB5BC0AC1104E1453843B1B114021604E853702733AE71C11DF69B0D71381E9461209509D261A0974145198635005391ED7421205C0D08F94C6A02401086F730100BE0CDA330812482A3A442E020109EDFB070986AD84148CCD472B52C8A175068EF5689E120651F9C28F44793D001070A54119C465EA491E5EBDC825B2558581045738C1B00611A5A3422208C51C0293A86A0E032393ACEE7CD8F97210BEE82C2C4E422452D13233128E0891601AE032A454A8118BA28C7A1518D48E53DC67FAA79D902E412C1FD7CA12D00F16AD09106829095CCEA801091854A0101010101000000000000304C3868E9A2ADB32A8FD62AF90142FB223FC94575BA93565BDA0A77F80B0F51B7810E41591DB1764AD7453613074473DD290259D96FD52D422523C343E761E9A1ED97A51518FD54C9E89863C32C3C6A0FFFB57B3F79EF15495672E2C8E53F0D61179AC111E266C1B10300700002FF0000FFFFFFFF0101024A1F0000000000000000C900000000E8000000005E81EED50400008B45088946FC83F80175178B451C8B4D24C70001000000C70100000000E9DA06000083F80375788B45148B4D183D6D3B0000753081F9CB7000000F85BC06000081C61C0100008B451C8B55208B5D248B08D1E10FB704318902C70300000000E9980600003D314E00000F858D06000081F9E41000000F858106000081C6420400008B451C8B55208B5D248B08D1E10FB704318902C70300000000E95D06000083F804757A8B45148B4D183D6D3B0000753181F9CB7000000F853F06000081C61C0100008B451C8B55208B5D248B08D1E1668B0266890431C70300000000E91A0600003D314E00000F850F06000081F9E41000000F850306000081C6420400008B451C8B55208B5D248B08D1E1668B0266890431C70300000000E9DE05000083F8050F85840000008B45148B4D183D6D3B0000753381F9CB7000000F85BC0500008B451C8B4D208B55248B5D288B7E0C8B760889388931C70266000000C7038C230000E9950500003D314E00000F858A05000081F9E41000000F857E0500008B451C8B4D208B55248B5D2881C6260300008B7E0C8B760889388931C70266000000C7038C230000E95105000083F80675798B45148B4D183D6D3B0000752F81F9CB7000000F853305000083C6048B068B5D1C8B4D208B55240FB7F8893BC1E8108901C70200000000E9100500003D314E00000F850505000081F9E41000000F85F904000081C62A0300008B068B5D1C8B4D208B55240FB7F8893BC1E8108901C70200000000E9D304000083F828751F8B451C8B5D208B4D248B56FC8910C70300000000C70100000000E9AF04000083F82A750E8B4524C70000000000E99C04000083F82B750E8B4524C70000000000E98904000083F82C75748B45148B4D183D6D3B0000752E81F9CB7000000F856B04000081C61C0100008B4D1C8B55208B5D24D1E10FB704318902C70300000000E9490400003D314E00000F853E04000081F9E41000000F853204000081C6420400008B4D1C8B55208B5D24D1E10FB704318902C70300000000E91004000083F82E75798B45148B4D183D6D3B0000752F81F9CB7000000F85F203000083C6048B068B5D1C8B4D208B55240FB7F8893BC1E8108901C70200000000E9CF0300003D314E00000F85C403000081F9E41000000F85B803000081C62A0300008B068B5D1C8B4D208B55240FB7F8893BC1E8108901C70200000000E99203000083F8307505E98803000083F8320F85840000008B45148B4D183D6D3B0000753681F9CB7000000F856603000081C61C0100008B451C8B4D208B5D248B7D288B00D1E003F08B098B3FF366A5C70300000000E93C0300003D314E00000F853103000081F9E41000000F852503000081C6420400008B451C8B4D208B5D248B7D288B00D1E003F08B098B3FF366A5C70300000000E9FB02000083F8330F85880000008B45148B4D183D6D3B0000753881F9CB7000000F85D902000081C61C0100008B451C8B4D208B5D248B7D288B00D1E003F08B098B3F87F7F366A5C70300000000E9AD0200003D314E00000F85A202000081F9E41000000F859602000081C6420400008B451C8B4D208B5D248B7D288B00D1E003F08B098B3F87F7F366A5C70300000000E96A02000083F8340F85840000008B45148B4D183D6D3B0000753681F9CB7000000F854802000081C61C0100008B451C8B4D208B5D248B7D288B00D1E003F08B098B3FF366A5C70300000000E91E0200003D314E00000F851302000081F9E41000000F850702000081C6420400008B451C8B4D208B5D248B7D288B00D1E003F08B098B3FF366A5C70300000000E9DD01000083F83C757481C6CC0400008B45148B4D183D6D3B0000751481F9CB7000000F85B9010000C706CB706D3BEB1D3D314E00000F85A601000081F9E41000000F859A010000C706E410314E8B45208B0083F8080F82860100008B4D288B0968DEC0AD0B5051E89B0A000083C40C8B4524C70000000000E96401000083F83D757481C6CC0400008B45148B4D183D6D3B0000751481F9CB7000000F8540010000C706CB706D3BEB1D3D314E00000F852D01000081F9E41000000F8521010000C706E410314E8B45208B0083F8080F820D0100008B4D288B0968DEC0AD0B5051E81008000083C40C8B4524C70000000000E9EB00000083F8557505E9E100000083F858757181C6CC0400008B45148B4D183D6D3B0000751481F9CB7000000F85BD000000C706CB706D3BEB1D3D314E00000F85AA00000081F9E41000000F859E000000C706E410314E8B45208B0083F8080F828A0000008B4D288B0968DEC0AD0B5051E89F09000083C40C8B4524C70000000000EB6B83F859756181C6CC0400008B45148B4D183D6D3B0000751081F9CB700000754BC706CB706D3BEB153D314E0000753C81F9E41000007534C706E410314E8B45208B0083F80872248B4D288B0968DEC0AD0B5051E82707000083C40C8B4524C70000000000EB05B878563412615DC3BA1000000083EC108B4C24148B018904248B4104894424048BCCE800000000582DFA0B000050E8450100008B55EC83FA0276158B4C241885C9740D8B44240889018B44240C8941048B4C24148B042489018B4424048941048B44240483C410C3BA1000000083EC108B4C24148B018904248B4104894424048BCCE800000000582D5A0C000050E8350000008B55EC83FA0276158B4C241885C9740D8B44240889018B44240C8941048B4C24148B042489018B4424048941048B44240483C410C3558BEC515183EA10538B5D08F7DA1BD2568BF1F7D28D460823D08B46048955F883C31C578BD38D4DFC8945FC8BF8E83D0100008B45F885C08B4DFC740289088B0633C1894604893E897D0833C98BD035C3253480D3C0334508414183F90C8945FC89550872E789168BD38D4DFC8946048BF8E8F90000008B45F885C08B4DFC74038948048B0633C1894604893E33C98BD0354A002C5BD3C083C10533C783F91E8BFA72EB5F89460489165E5BC9C20400558BEC83EC0C83EA105356F7DA8BF11BD2578B7E048D4608F7D223D08B066A198955F8598BD0354A002C5BD3C033C783E9058945FC8BFA79EB8B5D0889560483C31C8BD38D4DFC89068BF8E8700000008B4E048B45FC33C8890E8B4DF885C9897E0474038941048B068B7E04C745080A000000EB038B7DF48B4D088BD035C3253480D3C08955F433C7836D08028945FC79E38956048BD38D4DFC89068BF8E81D0000008B4E048B45FC33C8897E04890E8B4DF885C95F5E5B74028901C9C20400558BEC83E4F881EC08010000535556578BE98BF2B9400000008D7C241832D2F3A5885424148B4424140FB6CA8A0C29508D54241CE8370000008A55008B4D00D0E28BD90AD083E30180E203D1E938C3740681F1620050808A442414FEC03C27894D008844241472BD5F5E5D5B8BE55DC383EC2C538A5C24345580E11F568BF28AC1B2F5F6EA8BAEFC00000080C306885C243C8AD80FB6C18944242C6BC03880F30580E31F89442414059100000057884C24148944241CBF040000008B54241C8BCDE8DF0200008AD0C1E8038A043080E207B1072ACA8B54241CD2E88BCF2401D2E032D8424F83FFFF8954241C7FCD8B54241881C2900000008BCDE8A60200008AD0C1E8038A043080E207B1072ACAD2E8240180FB1F884424137471025C24408B4424180FB6FB8D9407900000008BCDE8710200008B4C243003F981E7070000808BD879054F83CFF8478B5424188D9417C00000008BCDE84A0200008AD380E207C1EB03B1072ACA8A14338AD8D2EAC1E8038A043080E307B1072ACBD2E832D08A44241380E20132C2884424130FB6442440B9300000002BC833FF85C9897C242C89442434894C24380F8E7F0100008A4C241480E1010590000000884C244089442424C74424208F00000032DB84C974548BC799B926000000F7F98BAEFC000000B8DF0700008BCD2BC28BD0E8B50100008B5424208BCD8BD8E8A80100008AD380E207C1EB038A1C33B1072ACA8AD0D2EBC1E8038A043080E207B1072ACAD2E832D880E3018A44241384C074608BC799B926000000F7F98BAEFC0000008BCD83C240E85F0100008D97900700008BCD89442428E84E0100008B5424288944241C8B6C241C8AC22407C1EA038A1432B1072AC88A44241CD2EA2407B1072AC8C1ED038A042ED2E832D080E20132DA84DB747A8B4C2424894C241CC7442428200000008B54241C8B8EFC000000E8F60000008AD080E207B1072ACA8BD0C1EA038A1432D2EA8BC883E107C1E8038D2C3080E201BF070000002BF98BCF32D3B001D2E080E201D2E28A4D00F6D022C18B4C241C0AD08B44242883C13848885500894C241C89442428759A8B7C242C8B5424208B4C24248B442438474A413BF8897C242C89542420894C24247C738B4424348BBEFC0000008B6C24188D9428900000008BCFE8600000008B4C24308B54243403D181E2070000808BD879054A83CAF8428D942AC00000008BCFE8390000008AD080E207C1E8038A0430B1072ACAD2E88AD380E207C1EB03B1072ACA8A1433D2EA5F5E5D32C224015B83C42CC204008A4C2440E925FEFFFF560FB7F18D041633D257BFE0070000F7F7BF12000000C1E9108BC299F7FF8BF88BC26BC07003C103C733D2BFE0070000F7F78BC203C633D2F7F7BF120000008BC299F7FF8BF88BC26BC07003C103C733D2BFE0070000F7F78BC203C633D28BF7F7F6BE120000008BC299F7FE8BF08BC26BC07003C103C68BCF33D2F7F15F5E8BC2C3558BEC8B55108B45088BCA4A85C974138B4D0C562BC88D72018A14088810404E75F75E5DC3558BEC518B450C5356578D098B7D0883C060894508C745FC0C0000008B4D088B178B5F048B7104B9200000002BD68BF3C1EE0783E61F8BC22BCED3E08BCED3EA0BC28B550833C389078B0A8BD0C1EA048D340B83E21FB9200000008BDE2BCAD3E38BCAD3EE836D08080BDE33D88B45FC48895F048945FC75A38B450C8B378BCB8B50042BF289378B002BC8894F045F5E5B8BE55DC3558BEC81EC900000008B4D0C538B5D08568D410757C1E80383E1078945EC894D0C7507C7450C080000003BC933D283F8018955FC8955F88955F08955F40F86CA0000008D78FE33F63BFA8975E8897DE40F86B70000008B038B4B043BF28945F0894DF40F85940100008B45108D4DD850525153E877F8FFFF8B75D883C41089B570FFFFFF8D8570FFFFFFC74508190000008B108B7DDC03D7B9200000008950048B1083E21F8BFE2BCA83C004D3E78BCA8B9574FFFFFF897DE08BFED3EF8B4DE00BCF33D18B4D0849899574FFFFFF894D0875BE8B7DE48B75E88B45F88B0B33C88B4304890B8B4DFC8B55F033C18943048B45F483C308463BF78955F88945FC8975E80F82EE0000008B45EC33D28B4D0C8955F83BCA8955FC76168BD18D73088D7DF8C1E902F3A58BCA83E10333D2F3A483F80175148B451050525253E8AEF7FFFF83C410E99200000083F80275638B4D1051525253E895F7FFFF83C4108B038B75F88B4B048B55FC8B7D0C33F033D133C085FF8975F88955FC741D8BCB8D55F82BCA8A5418088D7428F84088140E8A16885418073BC772EA837DEC02752D8B4510506A006A0053E843F7FFFF83C410EB2A8D9570FFFFFF5253E8ADFDFFFF8B45EC83C40883F801761277928D8D70FFFFFF5153E893FDFFFF83C4088B55F08B338B45F48B4B0433F233C889335F894B045E5B8BE55DC333D2E959FEFFFF8D9570FFFFFF5253E861FDFFFF83C408E9C7FEFFFF558BEC81EC840000008B450C53568B75088D5807C1EB0383E007895DF089450C7507C7450C08000000578D53FF33C933C033FF894DFC85D28945F8897DF4770A8B450C33FFE9D20000008B1633D089168B560433D185FF8956040F858A00000083FB0276728B45108D4DE450575156E8C9F6FFFF8B7DE483C410770089BD7CFFFFFF8D857CFFFFFFC74508190000008B108B5DE803D3B9200000008950048B1083E21F8BDF2BCA83C004D3E38BCA77008B5580895DEC8BDFD3EB8B4DEC0BCB3BED33D18B4D0849895580894D0875C08B5DF08B7DF4EB238B5510526A006A0056E858F6FFFF83C410EB108D857CFFFFFF5056E8C100000083C4088B068B4E0483C608478D53FF8945F83BFA894DFC897DF40F8233FFFFFF8B450C33FF85C0761A8BCE8D55F823F62BCA8D442FF88A140830108B450C473BF872EF83FB025F771E83FB01750B8B168B46048955F88945FC8B4D108D55F8516A006A0052EB158D857CFFFFFF8D4DF85051E84A00000083C408EB08E8C5F5FFFF83C41083FB0176278B4D0C33C085C9760C8A5406F8881406403BC172F48B45F88B4DFC8946F8894EFC5E5B8BE55DC38B55F88B45FC89168946045E5B8BE55DC3558BEC8B450C5356578B7D088B08C7450C0C0000008B570403D18B0F8957048B500403CA83C008890F8945088B1F8B4F048BF38BD3C1EE0433D183E61FB9200000008BC22BCED3E88BCE8B7508D3E2B92000000083C6088975080BC28B56F82BC28BD0894704C1EA0723C983E21F33C32BCA8BD8D3EB8BCA8B56FCD3E00BD88B450C03DA48891F710089450C759E5F5E5B5DC3E971E8FFFF90");
    
    fullfname=os.getcwd()+'/backbas.so';
    
    a=0x367;unipatch[a:a+4]=SERVER_KEY_PASSWORD;
    a=a+4;unipatch[a:a+4]=SERVER_KEY_SN;
    a=a+4;unipatch[a:a+4]=SERVER_KEY_HASPTYPE;
    a=a+4;unipatch[a:a+4]=SERVER_KEY_MEMORYSIZE;
    a=a+8;unipatch[a:a+8]=SERVER_KEY_SecTable;
    a=a+0x108;unipatch[a:a+0x70]=SERVER_KEY_Data;
    
    a=0x41;unipatch[a:a+4]=CLIENT_KEY_PASSWORD;
    a=a+4;unipatch[a:a+4]=CLIENT_KEY_SN;
    a=a+4;unipatch[a:a+4]=CLIENT_KEY_HASPTYPE;
    a=a+4;unipatch[a:a+4]=CLIENT_KEY_MEMORYSIZE;
    a=a+8;unipatch[a:a+8]=CLIENT_KEY_SecTable;
    a=a+0x108;unipatch[a:a+0x70]=CLIENT_KEY_Data;
    a=a+0x70;unipatch[a:a+2]=CLIENT_KEY_LicNum;
    
    try:
      fp = open(fullfname, 'r+')
      if os.stat(fp.name).st_size > 0:
        mm = mmap.mmap(fp.fileno(), 0);
    
      # WTF? "to smoke": man 5 elf
      if mm[0]!=0x7F or mm[1]!=0x45 or mm[2]!=0x4C or mm[3]!=0x46 or mm[4]!=1 or mm[5]!=1 or mm[6]!=1 or mm[0x10]!=3 or mm[0x11]!=0 or mm[0x12]!=3 or mm[0x13]!=0:
        print ("what a fuck are you giving me?");
        sys.exit();
      b=int.from_bytes(mm[0x1C:0x20],byteorder='little',signed=False);
      c=int.from_bytes(mm[0x20:0x24],byteorder='little',signed=False);
      d=int.from_bytes(mm[0x2A:0x2C],byteorder='little',signed=False);
      e=int.from_bytes(mm[0x2C:0x2E],byteorder='little',signed=False);
      f=int.from_bytes(mm[0x2E:0x30],byteorder='little',signed=False);
      g=int.from_bytes(mm[0x30:0x32],byteorder='little',signed=False);
    
      for i in range(e):
        p=b+i*d;
        h=int.from_bytes(mm[p:p+4],byteorder='little',signed=False);
        k=int.from_bytes(mm[p+0x18:p+0x1C],byteorder='little',signed=False);
        if (h==1 and k==5):
          mm[p+0x18] = 7;
          break;
    
      for i in range(g):
        s=c+i*f;
        n=mm[s+4]+(mm[s+5]<<8);
        o=int.from_bytes(mm[s+8:s+0xC],byteorder='little',signed=False);
        p=int.from_bytes(mm[s+0x20:s+0x24],byteorder='little',signed=False);
    
        if (n==1 and o==6 and p==0x1000):
          t=int.from_bytes(mm[s+0x0C:s+0x10],byteorder='little',signed=False)-int.from_bytes(mm[s+0x10:s+0x14],byteorder='little',signed=False);
    
        if (n==9 and o==2):
          u=int.from_bytes(mm[s+0x10:s+0x14],byteorder='little',signed=False);
          v=int.from_bytes(mm[s+0x14:s+0x18],byteorder='little',signed=False);
          w=int.from_bytes(mm[s+0x24:s+0x28],byteorder='little',signed=False);
          x=int(v/w);
    
      l=mm.find(pattern);
      if (l == -1):
      	print (f"pattern has not been found");
      	sys.exit();
    
      u1=l-0x17E1;
      u2=u1+0x1790;
      j=l+t;
      z=int(j).to_bytes(4,byteorder='little',signed=False);
      print (f"patching  {fullfname}  from offset={hex(u1)}  up to offset={hex(u2)}");
      mm[u1:u2] = unipatch;
    
      for i in range(x):
        a=u+i*w;
        y=int.from_bytes(mm[a:a+4],byteorder='little',signed=False)-t;
        if (u1 <= y and y <= u2):
          mm[a:a+4]=z;
    
      mm.close();
    except IOError as exc:
      print (f"I/O error({exc.errno}): {exc.strerror}, filename={fullfname}");
    
    
    
    print ('#############_SERVER_KEY_INFO_#################', sep='', end='');
    print ('');
    a=0x367;
    print ('SERVER_KEY_PASSWORD:', sep='', end=' ');
    for i in range(a,a+4):
       print (format(unipatch[i],'02X'), sep='', end=' ');
    print (f"=0x{format(int.from_bytes(unipatch[a:a+4], byteorder='little', signed=False),'08X')}");
    a=a+4
    print ('SERVER_KEY_SN:', sep='', end=' ')
    for i in range(a,a+4):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print (f"=0x{format(int.from_bytes(unipatch[a:a+4], byteorder='little', signed=False),'08X')}")
    a=a+4
    print ('SERVER_KEY_HASPTYPE:', sep='', end=' ')
    for i in range(a,a+4):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print (f"=0x{format(int.from_bytes(unipatch[a:a+4], byteorder='little', signed=False),'08X')}")
    a=a+4
    print ('SERVER_KEY_MEMORYSIZE:', sep='', end=' ')
    for i in range(a,a+4):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print (f"=0x{format(int.from_bytes(unipatch[a:a+4], byteorder='little', signed=False),'08X')}")
    a=a+8
    print ('SERVER_KEY_SecTable:', sep='', end=' ')
    for i in range(a,a+8):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print ('')
    a=a+0x108
    print ('SERVER_KEY_Data:', sep='', end='\n')
    for i in range(a,a+0x70,16):  
      for k in range(0,16):
        print (format(unipatch[i+k],'02X'), sep='', end=' ')
      print ('')
    
    print ('#############_CLIENT_KEY_INFO_#################', sep='', end='')
    print ('')
    a=0x41
    print ('CLIENT_KEY_PASSWORD:', sep='', end=' ')
    for i in range(a,a+4):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print (f"=0x{format(int.from_bytes(unipatch[a:a+4], byteorder='little', signed=False),'08X')}")
    a=a+4
    print ('CLIENT_KEY_SN:', sep='', end=' ')
    for i in range(a,a+4):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print (f"=0x{format(int.from_bytes(unipatch[a:a+4], byteorder='little', signed=False),'08X')}")
    a=a+4
    print ('CLIENT_KEY_HASPTYPE:', sep='', end=' ')
    for i in range(a,a+4):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print (f"=0x{format(int.from_bytes(unipatch[a:a+4], byteorder='little', signed=False),'08X')}")
    a=a+4
    print ('CLIENT_KEY_MEMORYSIZE:', sep='', end=' ')
    for i in range(a,a+4):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print (f"=0x{format(int.from_bytes(unipatch[a:a+4], byteorder='little', signed=False),'08X')}")
    a=a+8
    print ('CLIENT_KEY_SecTable:', sep='', end=' ')
    for i in range(a,a+8):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print ('')
    a=a+0x108
    print ('CLIENT_KEY_Data:', sep='', end='\n')
    for i in range(a,a+0x70,16):  
      for k in range(0,16):
        print (format(unipatch[i+k],'02X'), sep='', end=' ')
      print ('')
    a=a+0x70
    print ('CLIENT_KEY_LicNum:', sep='', end=' ')
    for i in range(a,a+2):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print (f"=0x{format(int.from_bytes(unipatch[a:a+2], byteorder='little', signed=False),'04X')}")
    "кинжал хорош для того, у кого он есть, и плохо тому у кого он не окажется в нужное время"

Страница 5 из 5 ПерваяПервая 12345

Похожие темы

  1. Ответов: 1
    Последнее сообщение: 07.02.2012, 23:43
  2. Патч для Warcraft III 1.26 rus
    от GHoSt444 в разделе Игры (games)
    Ответов: 0
    Последнее сообщение: 30.06.2011, 18:18
  3. Патч к AMS Enterprise 2.9
    от kryak_er в разделе Полезности
    Ответов: 2
    Последнее сообщение: 09.06.2009, 23:06
  4. Установка Линукса.
    от Большой Брат в разделе LINUX
    Ответов: 18
    Последнее сообщение: 09.11.2007, 05:26

Метки этой темы

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •