Полезная информация

Хотите узнать больше о расширениях? Посмотрите ролики, рассказывающие о работе с расширениями Firefox.

№25111-05-2018 21:32:56

suz191
Участник
 
Группа: Members
Зарегистрирован: 03-01-2017
Сообщений: 61
UA: Firefox 59.0

Re: [CB]Memory Monitor

Coroner пишет

Про стиль в "справке" не забыли? Без него не прокатит.

скрытый текст

Выделить код

Код:

#id .toolbarbutton-text {
  color: #00FF00 !important;
  font-weight: bold !important; 
  font-size: 10px !important;
  Min-height: 23px !important;
  display: block !important; 
}


#id .toolbarbutton-icon {
  display: none !important;
}

в firefox 60+ Всё прописал сейчас работает!
А без стиля можно?
Получается все назад собирать постепенно?
С ней проще разобраться...
Сброс вставил
тут полностью готовый https://forum.mozilla-russia.org/viewto … 39#p758039
Изменено дабы не вносить путаницу...
картинка

скрытый текст
69d395e27b29.jpg

работает как старая на один процесс, а вторая на все процессы. :)

Отредактировано suz191 (17-05-2018 23:08:12)

Отсутствует

 

№25211-05-2018 21:52:16

Coroner
Участник
 
Группа: Members
Зарегистрирован: 29-10-2012
Сообщений: 4001
UA: Firefox 60.0

Re: [CB]Memory Monitor

suz191 пишет

А без стиля можно?

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

На форуме

 

№25311-05-2018 21:57:13

suz191
Участник
 
Группа: Members
Зарегистрирован: 03-01-2017
Сообщений: 61
UA: Firefox 59.0

Re: [CB]Memory Monitor

Coroner пишет

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

Я думаю примерно так как-то.
https://forum.mozilla-russia.org/viewto … 39#p758039
Спасибо, получилось все работает:D

Отредактировано suz191 (17-05-2018 23:06:12)

Отсутствует

 

№25412-05-2018 09:40:54

Garalf
Участник
 
Группа: Members
Зарегистрирован: 19-09-2017
Сообщений: 316
UA: Firefox 60.0

Re: [CB]Memory Monitor

suz191
А где разместить этот код
memoryDisplay.style.cssText = "-moz-appearance: none; padding: 0; background-image: -moz-linear-gradient(#FF0, #0000E8, #FF0); margin-left: 1px; border: 0; color: #fff"; //
в коде кнопки?
Что-то с ним у меня кнопка не работает(

Отредактировано Garalf (12-05-2018 10:17:35)

Отсутствует

 

№25512-05-2018 13:52:04

suz191
Участник
 
Группа: Members
Зарегистрирован: 03-01-2017
Сообщений: 61
UA: Firefox 59.0

Re: [CB]Memory Monitor

Garalf пишет

suz191
А где разместить этот код
memoryDisplay.style.cssText = "-moz-appearance: none; padding: 0; background-image: -moz-linear-gradient(#FF0, #0000E8, #FF0); margin-left: 1px; border: 0; color: #fff"; //
в коде кнопки?
Что-то с ним у меня кнопка не работает(

Это было предположение, её просто нужно сейчас собрать потихоньку обратно отключая места которые её ломают и доработать...
Вот со стилем сразу в коде... вроде работает!
Черным запуск программы и стиль...
Если запуск какой либы программы не нужен выкинте его (первый черный отрезок)
Но этот счетчик, память показывает не правильно и он собственно на данный момент подходит именно для очистки т.к. это прикручено...
Счетчик просто для показа памяти ... На мой взгляд более правильной тут https://forum.mozilla-russia.org/viewto … 42#p757742
Второй черный отрезок это стиль :)
в firefox 60+ https://forum.mozilla-russia.org/viewto … 39#p758039
Спасибо Coroner и Dumby ещё бы всё это собрать в единое целое то цены бы не было :rolleyes:

Отредактировано suz191 (17-05-2018 23:05:47)

Отсутствует

 

№25612-05-2018 14:07:18

Garalf
Участник
 
Группа: Members
Зарегистрирован: 19-09-2017
Сообщений: 316
UA: Firefox 60.0

Re: [CB]Memory Monitor

suz191
Спасибо, так работает.

Еще бы Autocopy+3 оживить...

Отсутствует

 

№25712-05-2018 16:08:48

Coroner
Участник
 
Группа: Members
Зарегистрирован: 29-10-2012
Сообщений: 4001
UA: unknown 0.0

Re: [CB]Memory Monitor

suz191 пишет

её просто нужно сейчас собрать потихоньку обратно отключая места которые её ломают и доработать...

Её у меня ломал код, отвечающий за показ дискового кэша в подсказке. Код убрал, подсказку оставил.
У меня там было ещё очистка кэша, но я её давно уже выключил.
Все мои "нажатия", в том числе и по "Long Click" работают. Но это у меня, а как в оригинале было — я не помню. Может там и про кэш ничего и небыло... :angel:

На форуме

 

№25812-05-2018 21:23:44

suz191
Участник
 
Группа: Members
Зарегистрирован: 03-01-2017
Сообщений: 61
UA: Firefox 59.0

Re: [CB]Memory Monitor

Coroner пишет

Все мои "нажатия", в том числе и по "Long Click" работают. Но это у меня, а как в оригинале было — я не помню. Может там и про кэш ничего и небыло... :angel:

Да и пусть так остается... Показывает чистит и хорошо... Все равно не правильно показывает :D Самое главное память сбрасывает :)
По-моему это был оригинал и он тоже работает, с вашим заголовком вставленным сверху и подсказки нету, она и не нужна:
в firefox 60+ https://forum.mozilla-russia.org/viewto … 39#p758039

Отредактировано suz191 (17-05-2018 23:04:43)

Отсутствует

 

№25913-05-2018 06:42:29

Coroner
Участник
 
Группа: Members
Зарегистрирован: 29-10-2012
Сообщений: 4001
UA: Firefox 60.0

Re: [CB]Memory Monitor

suz191, без подсказки можно запутаться, если нажатий всяких много определено. :)
А вляпать её несложно. Вставляем после

Выделить код

Код:

sss.loadAndRegisterSheet(uri, 0);

и описываем по вкусу.

скрытый текст

Выделить код

Код:

self.onmouseenter = function() {
     self.tooltipText = "Left               => Настройки Mozilla FireFox\n" +
                   "Middle         => Дополнения\n" +
                   "Ctrl+Right   => Информация для решения проблем и плагины\n" +
                   "Alt+Right    => Vacuum очистка баз places.sqlite и Brief,\n" +
                   "                            удаление Flash-кукисов и запуск Afom.exe или Firemin\n" +
                   "Right            => About:About\n\n" +
                   "Long Left    => Производительность\n" +
                   "Long Right  => Открыть значение (выделенное или из буфера) в About:Config\n\n" +
                   "Shift+Right  => Меню кнопки\n\n";
                   };

На форуме

 

№26016-05-2018 05:23:44

JKT
Участник
 
Группа: Members
Зарегистрирован: 14-01-2016
Сообщений: 81
UA: Firefox 52.0

Re: [CB]Memory Monitor

Народ, так готовый хэппи энд будет, для "особо одаренных", вроде меня :)? Чтоб код копирнул и всё.
А то "вставь сюда","вляпай туда"...
Вообще мёртвая кнопка. Код взял с предпоследнего поста от suz191
Пробовал вставлять описание кликов с предыдущего от Coroner - результат тот-же.
W7x64  FF_ESR-52.7.4 (x32)

Отсутствует

 

№26116-05-2018 09:10:21

Coroner
Участник
 
Группа: Members
Зарегистрирован: 29-10-2012
Сообщений: 4001
UA: Firefox 60.0

Re: [CB]Memory Monitor

JKT пишет

W7x64  FF_ESR-52.7.4 (x32)

Так и берите готовую кнопку. Вы же берёте всё после сообщения

suz191 пишет

в 60 firefox перестало работать и кнопка и строка состояния

Чего бы ему работать на 52?

Вам в самое начало темы, на страницу номер 1. https://forum.mozilla-russia.org/viewto … 30#p528430
Остальные переделки рассматривать не стоит.

Отредактировано Coroner (16-05-2018 09:11:09)

На форуме

 

№26217-05-2018 21:10:32

JKT
Участник
 
Группа: Members
Зарегистрирован: 14-01-2016
Сообщений: 81
UA: Firefox 52.0

Re: [CB]Memory Monitor

Coroner
Спасибо. Всё работает.

Отсутствует

 

№26317-05-2018 23:03:08

suz191
Участник
 
Группа: Members
Зарегистрирован: 03-01-2017
Сообщений: 61
UA: Firefox 59.0

Re: [CB]Memory Monitor

Memory Monitor Firefox 60+

1. Старый Код с не правильно отображающейся памятью и использованием запуска внешней программы для очистки памяти
     Л: Открыть about:memory
     П: Очистка Кеш и удаление Flash-кукисов
(подсказка есть, очистка выделена черным и если не используете можете удалить эти строки):

скрытый текст

/*Initialization Code*/

// ====================================================================================
// Memory Monitor ................................
// https://forum.mozilla-russia.org/viewtopic.php?id=52237
// ====================================================================================
var idbut=this.id;
var urlbar = document.getElementById("page-action-buttons");
var button = document.getElementById(idbut);
urlbar.insertBefore(button, urlbar.lastChild);

var style = custombutton.buttonGetHelp(self).replace(/id/g, _id);
var uri = makeURI('data:text/css,'+ encodeURIComponent(style));
var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
sss.loadAndRegisterSheet(uri, 0);

// Подсказка кнопки ................................
this.tooltipText = "Л:  Открыть about:memory\nП: Очистка Кеш и удаление Flash-кукисов";       

                   
// Настройка функций кликов мыши для кнопки ................................
this.onclick = function(e) {
     if ( e.button == 0 ) {
          var memoryTab = gBrowser.getBrowserForTab( gBrowser.selectedTab = gBrowser.addTab("about:memory") );
         
          // oбработчик ждет пока откроется "about:memory", удаляет себя и нажимает кнопку на странице
          memoryTab.addEventListener("pageshow", function c(e) {         
             this.removeEventListener( e.type, c );           

             setTimeout(function() { try { e.originalTarget.getElementById('measureButton').click() } catch(e) {} }, 0);     
          });
          }
         
     if ( e.button == 1 ) gShowPopup(this);
     
     if ( e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey ) {
          e.preventDefault();   
         
          // очистить кэш ....
          try {
              Services.cache.evictEntries(Ci.nsICache.STORE_IN_MEMORY);
              Services.cache.evictEntries(Ci.nsICache.STORE_ON_DISK);
              }
          catch(e) { Services.cache2.clear() }

          // Удалить Flash кукиси ....
          var dir = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties).get("Home", Ci.nsIFile);
          dir.append("Application Data");
          dir.append("Macromedia");
          if ( dir.exists() ) dir.remove(true);
          if ( !dir.exists() ) dir.create(Ci.nsIFile.DIRECTORY_TYPE, 0777);

          // Всплывающее сообщение ....
          var alertService = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService);
          alertService.showAlertNotification('chrome://global/skin/icons/information-16.png', 'Показывать потребление памяти', 'Очистил кеш и удалил Flash кукиси');
          setTimeout(function() { alertService.closeAlert() }, 2500);
          }
};

// Показывать потребление памяти на текущей кнопке
(function () { 
   self.timer = setInterval(function() {
   var memory = getMemory();
   self.label = getMemory() + ' mb'
     
       if ( memory < 300 ) return;
       var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
        file.initWithPath('буква диска:\\путь\\до\\файла.расширение');
       file.launch();

      
   }, 2000 );
 
// Получить всю занимаемую оперативную память в MB ....
   function getMemory() {           
      var reporterManager = Cc["@mozilla.org/memory-reporter-manager;1"].getService(Ci.nsIMemoryReporterManager);
      try {
          var e = reporterManager.enumerateReporters();
          while ( e.hasMoreElements() ) {
                  var mr = e.getNext().QueryInterface(Ci.nsIMemoryReporter);
                  self[mr.path] = mr;
                  }
          var memory = self["resident"].amount;
          }
      catch(e) { var memory = reporterManager.resident; } // FF26 - Nightly
     
      return ( Math.round( memory/1048576 ) );
   };     

// Стиль добавляет текст на кнопку ....
   var uri = makeURI('data:text/css,'+ encodeURIComponent('\
   %button% .toolbarbutton-icon {\
     display: none !important;\
   }\
   %button% .toolbarbutton-text {\
     display: -moz-box !important;\
   }\
   %button% {\
     -moz-box-orient: horizontal !important;\
   }\
   '.replace(/%button%/g, "#" + _id) ));
   const sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
   sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
   
// Удалять счётчик памяти и другие изменения ....
  addDestructor(function() {
      try { window.clearTimeout( self.timer ) } catch(e) {};
   });
})();


2. Код кнопки в строке с просто правильно отображающейся памятью и без прибабахов тут: https://forum.mozilla-russia.org/viewto … 42#p757742

Отсутствует

 

№26418-05-2018 02:32:07

Coroner
Участник
 
Группа: Members
Зарегистрирован: 29-10-2012
Сообщений: 4001
UA: Firefox 60.0

Re: [CB]Memory Monitor

suz191, парочка вопросов:
1. Стиль в код перенесён — даёт это какую пользу, или просто так удобнее?
2. Нажатие в about:memory можно переделать на "Garbage Collection", или сразу на "Minimize Memory Usage"?

На форуме

 

№26518-05-2018 21:35:59

suz191
Участник
 
Группа: Members
Зарегистрирован: 03-01-2017
Сообщений: 61
UA: Firefox 59.0

Re: [CB]Memory Monitor

Coroner пишет

suz191, парочка вопросов:
1. Стиль в код перенесён — даёт это какую пользу, или просто так удобнее?
2. Нажатие в about:memory можно переделать на "Garbage Collection", или сразу на "Minimize Memory Usage"?

Добрый день...
1. Удобнее в плане лени :)  (скопировал и вставил) :)
2. Я не знаю! Но, попробовать наверное можно... Я просто собрал её из старой, по вашим исходникам :)
И сделал одно сообщение тут, а старые сообщения с кодом поправил ссылкой на это сообщение, чтоб не создавалось в теме хаоса, а то было в каждом сообщении по кусочку кода... :)

Отредактировано suz191 (18-05-2018 21:39:04)

Отсутствует

 

№26619-05-2018 16:11:12

drage2
Забанен
 
Группа: Members
Откуда: Донецк
Зарегистрирован: 23-11-2017
Сообщений: 392
UA: Firefox 60.0

Re: [CB]Memory Monitor

del

Отредактировано drage2 (20-05-2018 17:58:17)

Отсутствует

 

№26725-05-2018 00:30:49

suz191
Участник
 
Группа: Members
Зарегистрирован: 03-01-2017
Сообщений: 61
UA: Firefox 59.0

Re: [CB]Memory Monitor

Coroner пишет

suz191, парочка вопросов:
Нажатие в about:memory можно переделать на "Garbage Collection", или сразу на "Minimize Memory Usage"?

Идея понравилась...
Можно попробовать совместить с этим! http://custombuttons.sourceforge.net/fo … f=4&t=3556
Тогда по сути наверное и сброс памяти не нужен будет никакой внешней программой...
Как вам такой Вариант?

Отсутствует

 

№26825-05-2018 00:50:39

Coroner
Участник
 
Группа: Members
Зарегистрирован: 29-10-2012
Сообщений: 4001
UA: Firefox 60.0

Re: [CB]Memory Monitor

suz191 пишет

Как вам такой Вариант?

Хороший вариант. :) Главное что реализуется легко. :D

скрытый текст

Выделить код

Код:

if ( e.button == ... { // по вкусу

doMMU();
function doMMU() {
    let gMgr = Cc["@mozilla.org/memory-reporter-manager;1"]
        .getService(Ci.nsIMemoryReporterManager);
    Services.obs.notifyObservers(null, "child-mmu-request", null);
    gMgr.minimizeMemoryUsage(null, false, false);
}

};

Отредактировано Coroner (25-05-2018 00:51:20)

На форуме

 

№26911-11-2018 18:06:15

suz191
Участник
 
Группа: Members
Зарегистрирован: 03-01-2017
Сообщений: 61
UA: Firefox 59.0

Re: [CB]Memory Monitor

Добрый день! В новом Firefox
Перестал работать правильный монитор от Dumby
из поста https://forum.mozilla-russia.org/viewto … 42#p757742
Они что-то сделали с адресной стройкой и больше он там не отображается!
Не мог ли бы кто-нибудь помочь заставить его отображаться? У меня не получается.
Спасибо! :)

Dumby пишет

suz191
Ну, я попробовал просто вывести в адресную строку лейбл,
отображающий расход памяти. (типа как на странице about:performance)

Вроде что-то показывает на Firefox 60, и, даже, на Nightly 62 (2018-05-10).

скрытый текст

Выделить код

Код:

setTimeout(url => {
    var mode = "rss"; // "rss" - Resident Set Size, "uss" - Unique Set Size
    var interval = 1500; // ms

    var before = null;
    var parent = before ? before.parentNode : document.getElementById("page-action-buttons");
    var lab = parent.insertBefore(document.createElement("label"), before);

    var nsvo = Cu.import(url, {});
    if (!("labels" in nsvo)) {
        nsvo.labels = new Set();
        var mb = 1024 * 1024, gb = mb * 1024;
        var format = num => num < gb
            ? Math.round(num / mb) + "MB"
            : (Math.round(100 * num / gb) / 100).toFixed(2) + "GB";
        var updateLabels = bytes => {
            if (bytes) for(var lab of nsvo.labels)
                lab.setAttribute("value", format(bytes));
        }
        if (Services.ppmm.childCount == 1) {
            var mrm = Cc["@mozilla.org/memory-reporter-manager;1"]
                .getService(Ci.nsIMemoryReporterManager);
            var prop = "resident" + (mode == "uss" ? "Unique" : "");
            var tick = () => updateLabels(mrm[prop]);
        } else {
            var tick = async () => {
                var res = await nsvo.Memory.summary(), bytes = 0;
                for(var prop in res) bytes += res[prop][mode];
                updateLabels(bytes);
            }
        }
        tick(); nsvo.intId = nsvo.setInterval(tick, interval);
    }
    nsvo.labels.add(lab);
    addDestructor(reason => {
        nsvo.labels.delete(lab); lab.remove();
        if (reason[5] == "e" && !nsvo.labels.size)
            nsvo.clearInterval(nsvo.intId), Cu.unload(url);
    });
}, 500, "resource://gre/modules/Memory.jsm?" + _id);

Отсутствует

 

№27011-11-2018 20:58:52

suz191
Участник
 
Группа: Members
Зарегистрирован: 03-01-2017
Сообщений: 61
UA: Firefox 59.0

Re: [CB]Memory Monitor

suz191 пишет

Добрый день! В новом Firefox
Перестал работать правильный монитор от Dumby
из поста https://forum.mozilla-russia.org/viewto … 42#p757742

Разобрался вроде! отсуцтвует вот это resource://gre/modules/Memory.jsm

А где он теперь лежит? :|

Отсутствует

 

№27113-11-2018 03:54:36

suz191
Участник
 
Группа: Members
Зарегистрирован: 03-01-2017
Сообщений: 61
UA: Firefox 59.0

Re: [CB]Memory Monitor

Подскажите пожалуйста как впендюрить resource://gre/modules/Memory.jsm
Обратно? :D
Спасибо :)

Отсутствует

 

№27213-11-2018 08:45:56

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2249
UA: Firefox 52.0

Re: [CB]Memory Monitor

suz191 пишет

как впендюрить resource://gre/modules/Memory.jsm
Обратно?

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

скрытый текст

Выделить код

Код:

((g, id) => {
    // Resident Set Size: "resident"
    // Unique Set Size:   "residentUnique"
    var mode = "resident";

    var mm = g[id] || (g[id] = ({
        init() {
            var mb = 1024 * 1024, gb = mb * 1024;
            this.format = num => num < gb
                ? Math.round(num / mb) + "MB"
                : (Math.round(100 * num / gb) / 100).toFixed(2) + "GB";
            this.ppmm.addMessageListener(id, this);
            this.timer.initWithCallback(
                this, 1500, this.timer.TYPE_REPEATING_SLACK
            );
            this.notify();
            return this;
        },
        destroy() {
            delete g[id];
            this.timer.cancel();
            this.ppmm.removeMessageListener(id, this);
        },
        url: `data:,
            sendAsyncMessage(
                "${id}",
                Cc["@mozilla.org/memory-reporter-manager;1"]
                    .getService(Ci.nsIMemoryReporterManager)
                    .${mode}
            )
        `.replace(/\s/g, ""),
        ppmm: Services.ppmm,
        timer: Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer),
        notify() {
            this.total = this.count = 0;
            this.childCount = this.ppmm.childCount;
            this.ppmm.loadProcessScript(this.url, false);
        },
        receiveMessage(msg) {
            this.total += msg.data;
            if (++this.count != this.childCount) return;
            var val = this.format(this.total);
            for(var lab of this.labels)
                lab.setAttribute("value", val);
        },
        labels: new Set(),
        register(doc, before) {
            var parent = before ? before.parentNode
                : doc.getElementById("page-action-buttons");
                var lab = doc.createElement("label");
                this.labels.add(lab);
                lab.id = id;
                doc.defaultView.setTimeout(() =>
                    this.labels.has(lab) && parent.insertBefore(lab, before)
                , 500);
                return lab;
        },
        unregister(lab) {
            lab.remove();
            this.labels.delete(lab);
            this.labels.size || this.destroy();
        }
    }).init());
    var lab = mm.register(document);
    addDestructor(() => mm.unregister(lab));
})(ChromeUtils.import("resource://gre/modules/Services.jsm", null), "CBMemoryMonitorIndicator");


Вобще, nsIMemoryReporterManager.getReports() показывал бы
и подробнее и точнее (как минимум, плюс GPU процесс), но
метод тормозной и сильно напрягает браузер, так что не подходит.

Отсутствует

 

№27315-11-2018 19:18:19

suz191
Участник
 
Группа: Members
Зарегистрирован: 03-01-2017
Сообщений: 61
UA: Firefox 63.0

Re: [CB]Memory Monitor

Dumby пишет

Или сначала напиши что-нибудь простенькое, вдруг сойдёт.

Огромное спасибо! :) Работает!
По поводу nsIMemoryReporterManager.getReports() не очень понял! Но, в этом коде его нет значить тормозить не должен!
Ещераз огромное спасибо! :)

Отсутствует

 

№27402-10-2020 23:04:38

suz191
Участник
 
Группа: Members
Зарегистрирован: 03-01-2017
Сообщений: 61
UA: Firefox 78.0

Re: [CB]Memory Monitor

Перестала работать. :/
Нет ли версии для нового браузера?
Спасибо.

Отсутствует

 

№27517-02-2021 10:07:46

Grishanenko
Участник
 
Группа: Members
Зарегистрирован: 02-04-2014
Сообщений: 7
UA: Firefox 68.0

Re: [CB]Memory Monitor

Подскажите, нужен ли для FF45+ участок кода:

Выделить код

Код:

try {
          var e = reporterManager.enumerateReporters();
          while ( e.hasMoreElements() ) {
                  var mr = e.getNext().QueryInterface(Ci.nsIMemoryReporter);
                  self[mr.path] = mr;
                  }
          var memory = self["resident"].amount;
          }

Или достаточно только:

Выделить код

Код:

catch(e) { var memory = reporterManager.resident }; // для Nightly

Как здесь можно получить объем виртуальной памяти?
Тупая замена resident на private не помогает.
Нужно для FF52 и ниже.

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]