Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » FAR Manager (часть 5)

Модерирует : gyra, Maz

Maz (15-01-2020 17:38): FAR Manager (часть 6)  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200

   

Maz



Дед Мазай
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

 
Предыдущие топики:  1 2 3 4
 
Где взять последнюю версию?
На странице загрузки скачайте MSI-инсталлятор стабильной сборки нужной вам разрядности (32 или 64 бита) или дистрибутив в виде 7z-архива и установите/распакуйте в любую папку (FAR портабелен и может работать без установки).
Там же на свой страх и риск можно взять наиболее свежую "ночную" сборку (в ночных сборках устраняются выявленные недоработки, добавляются новые функции, но могут содержаться и серьёзные ошибки).
Архив всех предыдущих ночных сборок FAR
Last release на github - собирается практически сразу (в течение получаса) после каждого коммита.
 
Общие сведения о совместимости FAR и плагинов
 
Можно воспользоваться одной из пользовательских сборок FAR Manager
Вопросы, касающиеся сборок, следует задавать непосредственно их авторам, а не на официальном форуме.
 
Где взять дополнительные плагины, скрипты и макросы?
Плагринг. В настоящее время большинство авторов (возможно, уже и все) выкладывают плагины здесь. Кроме плагинов здесь появляется всё относящиеся к FAR: дополнения, консольные шрифты, скрипты и пр.
Анонсы плагинов на официальном форуме. Даже если автор не выкладывает по каким-либо причинам плагин на плагринге, он может дать анонс в этой теме.
Полезные скрипты и макросы.
 
Инструкции по сборке ФАРа из исходников
Набор для самостоятельной сборки ФАРа
Как собрать FAR самостоятельно (старая инструкция)  
 
Ссылки на устаревшие версии
Выдержка из Far Manager Site and Forum ‹ FAQ :
Отличия FAR 3 от FAR 2
Отличия FAR 2 от FAR 1.7
 
Примечания
 
* 13 декабря 2008 г. произошло переименование веток: ANSI-ветка 1.71 превратилась в 1.75, а Unicode-ветка получила номер версии 2.0 (вместо 1.80). Т.е. версии 1.хх это ANSI ("старый" FAR), а версии 2.хх – Unicode ("новый" FAR). Эти ветки сильно различаются по способу взаимодействия с плагинами и системой!
* При обновлении ANSI-ветки 1.хх более старые версии плагинов могут работать в более новом FAR, но более новые плагины в большинстве случаев требуют обновления FAR (см. документацию).
* Unicode-плагины в ANSI-версии FAR не работают – у них иной способ взаимодействия (API) с Far.exe, поэтому даже не пытайтесь их использовать в FAR версии ниже 1.80.
* При обновлении Unicode-версии FAR 1.80/2.0/3.0 обращайте внимание на номер сборки: следует обязательно обновить все плагины для сборок 677/680/684, иначе они не будут работать. ANSI-плагины (кроме тех, которые работают в редакторе) можно применять в Unicode-версии FAR, в меню плагинов (вызываемом по F11) они будут помечены значком [A] справа от их имени. Unicode-плагины в FAR 1.80/2.x/3.х никаким значком после имени не помечаются.
* Unicode-версия FAR 1.80/2.x/3.х требует как минимум Windows 2000, т.е. она работает только в Windows 2000/XP/2003/Vista/2008/7/8/10.
* Плагины от FAR 2 несовместимы с FAR 3 и не запустятся.
* В FAR 3 выборочно могут работать плагины от FAR 1, однако не стоит брать от FAR 1 плагины для редактора или работающие с дисками: первые портят текст в Юникоде, вторые – файловую систему.
* В любом случае разрядность плагинов должна совпадать с разрядностью FAR, иначе плагин не будет загружен.
* Блондинку на скриншоте зовут Tommie Jo.

 
Принципиальные различия между hard link, symlink и junction
Как устранить взаимное влияние запущенных копий FAR в памяти
Как запустить Lua/MoonScript из FAR
Как правильно добавить в программу нужную DLL (или иную зависимость), чтобы при обновлении ОС или иных программ она не перестала работать
Патч для ansi-плагинов для хранения настроек плагинов в папке профиля, а не в реестре
Как распаковать UUE/XXE файлы патчей и использовать их?
 
ВНИМАНИЕ!
 
Правильное (корректное) завершение Far: всегда завершайте сеанс работы с Far по F10! Подробнее на форуме - Различие выхода из Far по F10 и крестиком
 
Общие правила обращения за помощью
  1. Решаете задачу самостоятельно, при необходимости ищете ответы в теме и других источниках. Предварительное изучение документации обязательно!
  2. Если ваших знаний не хватает, то задаёте вопрос в форуме и строго следуете инструкциям тех людей, которые вам помогают.
  3. Если решить задачу, следуя пунктам 1 и 2, не удалось, то задаёте вопрос разработчикам.

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

Всего записей: 39137 | Зарегистр. 26-02-2002 | Отправлено: 18:55 23-11-2017 | Исправлено: Victor_VG, 10:00 09-09-2019
shmuz

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
skipik, вы сказали "ночная сборка", вот я и сравнил с ночной сборкой.
А насчёт кто виноват, пока не знаю, можете обращаться к DrKnS.
 
 
Добавлено:
Alexyz21
Кто-то из нас кого-то не понимает.
Используя существующую ф-цию panel.SetSelection, напишите вашу желаемую ф-цию на Lua.
 
Я не спрашиваю у вас, как писать ф-цию на Си, или как передавать Far API в Lua.
На данный момент ничего не покоцано, LuaFAR точно передаёт в Lua возможности Far API.

Всего записей: 1905 | Зарегистр. 09-03-2012 | Отправлено: 22:09 16-08-2019
Alexyz21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ну так:  

Код:
panel.BeginSelection (handle, whatpanel)
panel.SetSelection (handle, whatpanel, items1, selection)
panel.SetSelection (handle, whatpanel, items2, not selection)
panel.EndSelection (handle, whatpanel)

 
только ввиде
Код:
panel.SetSelection (handle, whatpanel, items1, selection, items2)

 
Или я чего-то не понимаю? Если это конфликтует с обрезанием 2-го selection, то пусть он будет
 

Код:
panel.SetSelection (handle, whatpanel, items1, selection1, items2, selection2)

 
 
Добавлено:
Я думал только кацапы знают смысл слова "покоцано" ))) каламбурчик

Всего записей: 3693 | Зарегистр. 16-06-2007 | Отправлено: 22:30 16-08-2019 | Исправлено: Alexyz21, 22:37 16-08-2019
shmuz

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alexyz21
Я хочу видеть рабочую ф-цию на Lua, целиком, + с описанием каждого аргумента.
Имя этой функции не имеет значения, например MySetSelection.
Вы можете использовать в ней любую ф-цию LuaFAR + весь арсенал Lua.

Всего записей: 1905 | Зарегистр. 09-03-2012 | Отправлено: 22:42 16-08-2019
Alexyz21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
shmuz, вы хотите сказать, что есть объективные препятствия желаемому? И предлагаете мне в этом убедиться, скурпулёзно разобрав функцию на части? Меня должно беспокоить возвращаемое значение SetSelection(), которое непонятно какое должно быть, учитывая 2 SetSelection или необходимость его обработки пред 2-ым SetSelection?

Всего записей: 3693 | Зарегистр. 16-06-2007 | Отправлено: 22:50 16-08-2019 | Исправлено: Alexyz21, 22:52 16-08-2019
Victor_VG



Tracker Mod
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Немного переделал PugVerG()/PlugVerN() - не зачем плодить сущности коли можно обойтись семафором и сделать так:

Код:
-- Функция PlugVer(plug,mod) возвращает версию плагина в формате Major.Minor.Build.Revision
-- Плагин должен быть установлен в Вашей копии Far!
--
-- Использование:
--
-- PlugVer("GUID",1) получение версии плагина с указанным GUID;
-- PlugVer("Path",2) получение версии плагина с полным путём к DLL
--
-- Примеры:
--
-- far.Message(PlugVer("9D4A59D9-AD2D-478C-8F66-7D233CBB788D",1),"Version:")
-- far.Message(PlugVer(win.GetEnv("FARHOME").."\\plugins\\imageview\\ImageView.dll",2),"Version:")
--
-- v1.0, VictorVG, 16.08.2019 22:53:34 +0300
 
local function PlugVer(PId,Mod)
local Info,PVer,A,P
  if not (Mod == 1 or Mod == 2) then return -1 end
  if Mod == 1 then P=far.FindPlugin("PFM_GUID",win.Uuid(PId)) else P=far.FindPlugin("PFM_MODULENAME",PId) end
       Info=far.GetPluginInformation(P);
           A=Info.GInfo.Version;
           PVer=A[1].."."..A[2].."."..A[3].."."..A[4]
  return PVer
end


----------
Жив курилка! (Р. Ролан, "Кола Брюньон")
Xeon E5 2697v2/C602/128 GB PC3-14900L/GTX 1660 Ti, Xeon E5-2697v2/C602J/128 Gb PC3-14900L/GTX 1660 Ti

Всего записей: 34420 | Зарегистр. 31-07-2002 | Отправлено: 23:03 16-08-2019
Alexyz21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
function MySetSelection(handle, whatpanel, items1, selection, items2)
  local res=panel.BeginSelection (handle, whatpanel)  
  if res and items1 then res=panel.SetSelection (handle, whatpanel, items1, selection)
    if res and items2 then res=panel.SetSelection (handle, whatpanel, items2, not selection)  
      if res then res=panel.EndSelection (handle, whatpanel) end
    end
  end
  return res
end

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

Всего записей: 3693 | Зарегистр. 16-06-2007 | Отправлено: 23:06 16-08-2019 | Исправлено: Alexyz21, 23:17 16-08-2019
shmuz

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
вы хотите сказать, что есть объективные препятствия желаемому?

Да никаких препятствий нет.
Я только не знаю, что такое "желаемое", и почему у вас проблема с написанием на Lua этого желаемого, используя "имеющееся".

Цитата:
Меня должно беспокоить возвращаемое значение SetSelection(), которое непонятно какое должно быть, учитывая 2 SetSelection или необходимость его обработки пред 2-ым SetSelection?  

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

Всего записей: 1905 | Зарегистр. 09-03-2012 | Отправлено: 23:13 16-08-2019
Victor_VG



Tracker Mod
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
При любом втором параметре (mod) отличном от 1 или 2 функция вернёт флаг ошибки -1, но эту проверку можно убрать закомментировав или удалив строку if not (Mod == 1 or Mod == 2) then return -1 end, но тогда проверка правильности задания режима ложится на пользователя. Если плагин не существует или не сообщает Far-у свою версию, то PlugVer() вернёт nil .

----------
Жив курилка! (Р. Ролан, "Кола Брюньон")
Xeon E5 2697v2/C602/128 GB PC3-14900L/GTX 1660 Ti, Xeon E5-2697v2/C602J/128 Gb PC3-14900L/GTX 1660 Ti

Всего записей: 34420 | Зарегистр. 31-07-2002 | Отправлено: 23:14 16-08-2019
shmuz

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alexyz21
Не вижу описания аргументов (на русском).

Всего записей: 1905 | Зарегистр. 09-03-2012 | Отправлено: 23:15 16-08-2019 | Исправлено: shmuz, 23:16 16-08-2019
Alexyz21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Не вижу описания аргументов (на русском)

Так эта... в мануале они же описаны знающим программистом.
 
ВотЪ

Код:
Parameters:
  handle:       panel handle, or nil
  whatpanel:    1=active_panel, 0=inactive_panel
  items:        integer (1-based item index),
                or table (array of item indexes)
  selection:    boolean

 
или нужен перевод?  

Всего записей: 3693 | Зарегистр. 16-06-2007 | Отправлено: 23:18 16-08-2019 | Исправлено: Alexyz21, 23:21 16-08-2019
shmuz

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alexyz21
Тяжело с вами. У вас же есть отличия в аргументах от функции из мануала.

Всего записей: 1905 | Зарегистр. 09-03-2012 | Отправлено: 23:21 16-08-2019
Alexyz21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я вас совершенно не понимаю - где отличия??? - Лопни мои глаза ))) items1 и items2 на items совершенно не похожи?

Всего записей: 3693 | Зарегистр. 16-06-2007 | Отправлено: 23:23 16-08-2019 | Исправлено: Alexyz21, 23:24 16-08-2019
shmuz

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Я вас совершенно не понимаю - где отличия??? - Лопни мои глаза )))

Ну, например, дополнительный (пятый) аргумент.
 
Добавлено:
Чтобы закруглить этот разговор, такой ф-ции (которую можно написать на Lua в 5 строчек), в LuaFAR не будет.

Всего записей: 1905 | Зарегистр. 09-03-2012 | Отправлено: 23:24 16-08-2019 | Исправлено: shmuz, 23:30 16-08-2019
Alexyz21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Так это же очевидно и по названию, и по использованию в SetSelect() - тип items integer, либо array.
 
Непонятно зачем 2-ой SetSelect() вообще нужен? - Так это очевидно - у нас selection boolean имеет 2 состояния, которые определяют состояние элементов панели, соответственно, чтобы установить состояние группы элементов, имеющих оба состояния, требуются 2 вызова SetSelection с 2-я массивами элементов, каждый со своим состоянием boolean.
 
Добавлено:

Цитата:
ф-ции (которую можно написать на Lua в 5 строчек), в LuaFAR не будет.

нет и нет, переживу. Но вот то, что теперь надо во всех скриптах и своих, и чужих обрамлять SetSelect() в begin/end, чтобы быстро вернуть им адекватное поведение - вот это радует.

Всего записей: 3693 | Зарегистр. 16-06-2007 | Отправлено: 23:31 16-08-2019 | Исправлено: Alexyz21, 23:36 16-08-2019
shmuz

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Так это же очевидно и по названию, и по использованию

Когда изначально вас просили дать описание параметров, надо было это просто сделать.
 
Ещё раз, овчинка выделки не стоит. В LuaFAR есть куча ф-ций, которые можно было бы подобным образом "усовершенствовать". Какой смысл делать это для одной из них.
 
Спокойной ночи.

Всего записей: 1905 | Зарегистр. 09-03-2012 | Отправлено: 23:36 16-08-2019
Alexyz21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Спокойной ночи.

Вам тоже.

Всего записей: 3693 | Зарегистр. 16-06-2007 | Отправлено: 23:37 16-08-2019
Victor_VG



Tracker Mod
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Упростим PlugVer() - выкинем лишнюю проверку mod:

Код:
local function PlugVer(plg,mod)
local Info,PVer,A,P
  if mod == 1 then P=far.FindPlugin("PFM_GUID",win.Uuid(plg)) else P=far.FindPlugin("PFM_MODULENAME",plg) end
       Info=far.GetPluginInformation(P);
           A=Info.GInfo.Version;
           PVer=A[1].."."..A[2].."."..A[3].."."..A[4]
  return PVer
end

пример использования:

Код:
far.Message(PlugVer("9D4A59D9-AD2D-478C-8F66-7D233CBB788D",1),"Image Viewer version:")
far.Message(PlugVer(win.GetEnv("FARHOME").."\\plugins\\emenu\\EMenu.dll",2),"EMenu version:")

 
Добавлено:
Ну и используя чёрную магию добавим мозгов SV_Review.lua:  
 
Если версия установленного ImageView 3.46.8.4362 или новее, то для просмотра .PCX/.PSD зовём его, если ниже - Review (должен быть установлен).
SV_Review.lua v1.3:

Код:
-- Open current graphics or video file at active panel in to Review.
--
-- v1.0, Initial version
-- VictorVG, 14.08.2019 01:07:44 +0300
-- v1.1, Refactoring
-- VictorVG, 14.08.2019 06:41:47 +0300
-- v1.2, Add on/off flags (bulean): on=true , off=nil
-- VictorVG, 14.08.2019 16:43:23 +0300
-- v1.3, Refactoring
-- VictorVG, 17.08.2019 06:51:16 +0300
 
local function PlugVer(plg)
local Info,PVer,A,P
  P=far.FindPlugin("PFM_GUID",win.Uuid(plg))
       Info=far.GetPluginInformation(P);
           A=Info.GInfo.Version;
           PVer=A[1].."."..A[2].."."..A[3]
  return PVer
end
 
local IVId,RVId="9D4A59D9-AD2D-478C-8F66-7D233CBB788D","0364224C-A21A-42ED-95FD-34189BA4B204"
local MaskG,MaskV="/.+\\.(pcx|psd)/i","/.+\\.(3gp|avi|flv|m2t|mkv|mov|mp4|mp4v|mp4a|mpg|mpeg|mts|ts|wbem|wmv)/i"
local FV=true
local sem="3467"
local ver=mf.replace(PlugVer(IVId),".","",0,0)
 
Macro{
  id="12FA2EAA-E5B0-4F4B-8C02-E8B008490D47";
  area="Shell Viewer";
  key="F3 Enter NumEnter MsM1Click";
  description="Review: Open graphics files";
  condition=function() return (ver <= sem and Plugin.Exist(RVId) and mf.fmatch(APanel.Current,MaskG)==1) end;
  action=function()
  Far.DisableHistory(-1) Plugin.Command(RVId,APanel.Current);
end;
}
 
Macro{
  id="3A7772FB-E33D-4239-A67F-4B4800787C16";
  area="Shell";
  key="F3 CtrlPgDn";
  description="Review: Open video files";
  priority=60;
  condition=function() return (FV and Plugin.Exist(RVId) and mf.fmatch(APanel.Current,MaskV)==1) end;
  action=function()
  Far.DisableHistory(-1) Plugin.Command(RVId,APanel.Current);
end;
}

собственно для чего возня с PlugVer() и затевалась.
 
P.S.
 
Порция поправок, номер версии увеличивать не стал, но часть логики в скрипте новая и основана на коде PlugVer() 1.2, а он умеет много больше чем начальный вариант (скрипт доступен у меня на Git вместе с demo.lua).

----------
Жив курилка! (Р. Ролан, "Кола Брюньон")
Xeon E5 2697v2/C602/128 GB PC3-14900L/GTX 1660 Ti, Xeon E5-2697v2/C602J/128 Gb PC3-14900L/GTX 1660 Ti

Всего записей: 34420 | Зарегистр. 31-07-2002 | Отправлено: 23:41 16-08-2019 | Исправлено: Victor_VG, 10:34 17-08-2019
Victor_VG



Tracker Mod
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DrKnS
skipik

 
О default.farconfig - строки вида <settings value name="settings" type="hex"/> случайно не попали под проверку ошибок. Исправлено, попадёт в новый коммит. Спасибо что заметили ошибку.

----------
Жив курилка! (Р. Ролан, "Кола Брюньон")
Xeon E5 2697v2/C602/128 GB PC3-14900L/GTX 1660 Ti, Xeon E5-2697v2/C602J/128 Gb PC3-14900L/GTX 1660 Ti

Всего записей: 34420 | Зарегистр. 31-07-2002 | Отправлено: 01:53 17-08-2019
citPiks



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
shmuz
 
Камрад ImBringingTaxicab поместил на форуме Фара комплект макросов с навигацией по панели в стиле hjkl, применяемом в Vim`е. И среди прочих следующий:

Код:
Macro {
description="Input on Command Line";
area="Shell"; key="i";
condition=function() return CmdLine.Empty and APanel.Visible end;
action=function() Keys("i ShiftLeft") end;
--Presses i, then selects it. The next text that is typed replaces the i.
}

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

Всего записей: 373 | Зарегистр. 26-06-2016 | Отправлено: 09:58 17-08-2019 | Исправлено: citPiks, 10:04 17-08-2019
shmuz

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
citPiks
Не советую использовать данные макросы, т.к. они слишком примитивные и не учитывают разные ситуации (как это видно по приведенному макросу).

Всего записей: 1905 | Зарегистр. 09-03-2012 | Отправлено: 10:20 17-08-2019
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200

Компьютерный форум Ru.Board » Компьютеры » Программы » FAR Manager (часть 5)
Maz (15-01-2020 17:38): FAR Manager (часть 6)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru