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

В мире Mozilla происходит много интересных событий. Но вам не нужно постоянно посещать новостные сайты, чтобы быть в курсе всех изменений. Зайдите на ленту новостей Mozilla Россия.

№450107-08-2012 10:17:37

seven.ap
Участник
 
Группа: Members
Зарегистрирован: 02-07-2012
Сообщений: 58
UA: Firefox 14.0

Re: Custom Buttons

okkamas_knife пишет

ну вот ещё один искатель телепатов.:dumb:
намёк понят?

выложить пункты 2.2 с подпунктами?
или версия браузера? у меня 14

Отсутствует

 

№450207-08-2012 10:39:31

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 14.0

Re: Custom Buttons

okkamas_knife пишет

А можно поправить Undo Close Tabs List 0.3.0pre7 (2012-07-31) чтоб работала под симанки?

Ай, давно в SeaMonkey не проверял. :)

Undo Close Tabs List 0.3.0pre8 (2012-08-07)
x Исправлено восстановление закрытых вкладок в SeaMonkey
x Исправлено отображение иконки кнопки при открытии диалога настройки панелей инструментов

Session Bookmarks 0.2.0pre31 (2012-08-07)
x Исправлена инициализация в SeaMonkey


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№450307-08-2012 12:53:24

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 14.0

Re: Custom Buttons

okkamas_knife пишет

кстати вопрос как к знатоку, реально сделать добавку в контекстное меню всех кастомных кнопок "Редактировать во вкладке", чтоб редактор открывался не отдельным окном ?

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

Вот прототип:

Выделить код

Код:

const editId = "custombuttons-contextpopup-edit";
const editInTabId = editId + "-inTab";
var editInTab = document.getElementById(editInTabId);
if(editInTab)
    editInTab.parentNode.removeChild(editInTab);
var editItem = document.getElementById(editId);
editInTab = editItem.cloneNode(true);
editInTab.id = editInTabId;
editInTab.setAttribute("label", "Edit in tab…");
editInTab.setAttribute("oncommand", "editCustomButtonInTab();");
editItem.parentNode.insertBefore(editInTab, editItem.nextSibling);

window.editCustomButtonInTab = function() { // Should be global to work in cloned menus
    var btn = custombuttons.popupNode;
    if(!btn)
        return;
    var link = custombuttons.makeButtonLink("edit", btn.id);
    var cbService = Components.classes["@xsms.nm.ru/custombuttons/cbservice;1"]
        .getService(Components.interfaces.cbICustomButtonsService);
    var param = cbService.getButtonParameters(link);
    var editorUri = "chrome://custombuttons/content/editor.xul";
    if(cbService.mode & 64)
        editorUri += "?editorId=custombuttons-editor@" + cbService.getWindowId(document.documentURI) + ":" + btn.id;
    var tab = gBrowser.selectedTab = gBrowser.addTab(editorUri);
    var browser = tab.linkedBrowser;
    browser.addEventListener("DOMContentLoaded", function load(e) {
        var doc = e.target;
        if(doc.location != editorUri)
            return;
        browser.removeEventListener(e.type, load, false);
        doc.defaultView.arguments = [param];
        var iconLink = doc.createElementNS("http://www.w3.org/1999/xhtml", "link");
        iconLink.rel = "shortcut icon";
        iconLink.href = "chrome://custombuttons-context/content/icons/default/custombuttonsEditor.ico";
        iconLink.style.display = "none";
        doc.documentElement.insertBefore(iconLink, doc.documentElement.firstChild);
    }, false);
};

Только это все очень криво. И ?editorId= вручную собирается, и никто не гарантирует, что редактор потом не захочет запускаться до DOMContentLoaded. Да и иконка, кажется, только в тестовой версии по такому пути доступна.


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№450407-08-2012 14:15:16

SendAbuse
Участник
 
Группа: Members
Зарегистрирован: 08-03-2012
Сообщений: 113
UA: Firefox 11.0

Re: Custom Buttons

okkamas_knife,  Отлично, очень познавательно, забрал 3.6.28,
настроил как ты сказал, всё работает, спасибо :beer:
Только консоль ошибок там какая-то молчаливая, может поделишься
своим опытом в отладке, что используешь ?

okkamas_knife пишет

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

У меня там ещё меньше - всего 4 звёздочки. Но это дело мы постараемся исправить.
Вот кнопка ( если надоели звёздочки - переключи custombutton.CustomIconsForCBEditor[all].hideStandardIcons )

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3ECustomIcons%20for%20CBE%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACPjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf/W1qf//////////////////////4+PEf////////////////////////////////+PjxH/j48R/4+PEf+PjxH///////////////////////////+PjxH/////////////////////////////////j48R/4+PEf+PjxH/j48R////////////j48R/4+PEf+PjxH/j48R/4+PEf+PjxH///////////+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf///////////4+PEf+PjxH/j48R/4+PEf+PjxH/j48R////////////j48R/4+PEf+PjxH/j48R/4+PEf+PjxH///////////+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf///////////4+PEf+PjxH/j48R/4+PEf+PjxH/j48R////////////j48R/4+PEf+PjxH/j48R/4+PEf+PjxH///////////+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf///////////////////////////4+PEf////////////////////////////////+PjxH/j48R/4+PEf+PjxH/1tan//////////////////////+PjxH/////////////////////////////////j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bconst%20%20thisButtonImageOn%20%3D%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACPjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf/W1qf//////////////////////4+PEf////////////////////////////////+PjxH/j48R/4+PEf+PjxH///////////////////////////+PjxH/////////////////////////////////j48R/4+PEf+PjxH/j48R////////////j48R/4+PEf+PjxH/j48R/4+PEf+PjxH///////////+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf///////////4+PEf+PjxH/j48R/4+PEf+PjxH/j48R////////////j48R/4+PEf+PjxH/j48R/4+PEf+PjxH///////////+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf///////////4+PEf+PjxH/j48R/4+PEf+PjxH/j48R////////////j48R/4+PEf+PjxH/j48R/4+PEf+PjxH///////////+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf///////////////////////////4+PEf////////////////////////////////+PjxH/j48R/4+PEf+PjxH/1tan//////////////////////+PjxH/////////////////////////////////j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ%3D%3D%22%3B%0A%0Aconst%20thisButtonImageOff%20%3D%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACbm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P/JyfD//////////////////////5ub4P////////////////////////////////+bm+D/m5vg/5ub4P+bm+D///////////////////////////+bm+D/////////////////////////////////m5vg/5ub4P+bm+D/m5vg////////////m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D///////////+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P///////////5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg////////////m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D///////////+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P///////////5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg////////////m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D///////////+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P///////////////////////////5ub4P////////////////////////////////+bm+D/m5vg/5ub4P+bm+D/ycnw//////////////////////+bm+D/////////////////////////////////m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ%3D%3D%22%3B%0A%0Avar%20pattern%20%3D%20/chrome%3A%5C/%5C/custombuttons%5C/content%5C/editor.xul/%0Avar%20icons%20%3D%20this.Help.split%28%22%5Cn%22%29%3B%0A%0A//%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%0A%0Avar%20cbIdNumber%20%3D%20this.id.replace%28%22custombuttons-button%22%2C%20%22%22%29%3B%0A%0Avar%20prefs%20%3D%20Components.classes%5B%22@mozilla.org/preferences-service%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIPrefService%29%0A%20%20%20%20%20%20%20%20%20%20%20%20.getBranch%28%22custombutton.CustomIconsForCBEditor%5B%22%20+%20cbIdNumber%20+%20%22%5D.%22%29%0Athis.prefs%20%3D%20prefs%3B%0Atry%20%20%20%20%20%20%7B%20var%20off%20%3D%20prefs.getBoolPref%28%22off%22%29%3B%20%7D%0Acatch%28e%29%20%7B%20prefs.setBoolPref%28%22off%22%2C%20false%29%3B%20var%20off%20%3D%20false%20%7D%3B%0A%0Aif%20%28off%29%20%7B%20this.image%20%3D%20thisButtonImageOff%3B%0A%20%20%20%20%20%20%20%20%20%20%20/*this.checked%20%3D%20false%3B*/%20%20%20%20%20%20%20%20%20%20%20%20%20return%3B%20%7D%0A%20%20%20%20else%20%7B%20/*this.checked%20%3D%20true%3B*/%0A%20%20%20%20%20%20%20%20%20%20%20this.image%20%3D%20thisButtonImageOn%3B%20%7D%0A//---------------------------------------------------------------------------%0A%20%20%20%20prefs%20%3D%20Components.classes%5B%22@mozilla.org/preferences-service%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIPrefService%29%0A%20%20%20%20%20%20%20%20%20%20%20%20.getBranch%28%22custombutton.CustomIconsForCBEditor%5Ball%5D.%22%29%0A%0Atry%20%20%20%20%20%20%7B%20var%20hideStandardIcons%20%3D%20prefs.getBoolPref%28%22hideStandardIcons%22%29%3B%20%7D%0Acatch%28e%29%20%7B%20prefs.setBoolPref%28%22hideStandardIcons%22%2C%20false%29%3B%20var%20hideStandardIcons%20%3D%20false%20%7D%3B%0A%0A%0A//%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%0A%0Afunction%20moveIcons%28aDoc%2C%20remove%29%20%7B%20%0A%0Avar%20menupopup%20%3D%20aDoc.getElementById%28%22image%22%29.firstChild%3B%0A%0A//-------------------------------------------------------------------%0A%0Afor%20%28var%20h%3D0%3B%20h%3C5%3B%20h++%29%20%7B%20%0A%0Avar%20mi%20%3D%20menupopup.children%5Bh%5D%3B%20if%20%28%21mi%29%20break%3B%0Avar%20val%20%3D%20mi.getAttribute%28%22value%22%29%3B%0Avar%20isStd%20%3D%20val.substring%280%2C%2022%29%20%3D%3D%20%22custombuttons-stdicon-%22%3B%0A%0Aif%20%28hideStandardIcons%20%26%26%20isStd%29%20mi.hidden%20%3D%20true%3B%0Aif%20%28%21hideStandardIcons%20%7C%7C%20%21isStd%29%20mi.hidden%20%3D%20false%3B%20%7D%0A%0A//------------------------------------------------------------------%0A%0Aif%20%28remove%29%20%7B%20%0A%0Avar%20count%20%3D%20menupopup.childElementCount%3B%0Avar%20itemsToRemove%20%3D%20%5B%5D%3B%0A%0Afor%20%28var%20i%3D1%3B%20i%3Cmenupopup.childElementCount%3B%20i++%29%20%7B%20%0A%0A%20%20if%20%28menupopup.children%5Bi%5D.getAttribute%28%22fromCusomIcons%22%20+%20cbIdNumber%29%29%20%7B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20itemsToRemove.push%28menupopup.children%5Bi%5D%29%3B%20%7D%7D%0A%0Afunction%20rem%28element%29%20%7B%20menupopup.removeChild%28element%29%3B%20%7D%0AitemsToRemove.forEach%28rem%29%3B%0A%0Areturn%3B%20%7D%0A%0A//--------------------------------------------------------------%0A%0Aconst%20%20kXULNS%20%3D%20%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%3B%0A%0Afor%20%28var%20i%3D0%3B%20i%3Cicons.length%3B%20i++%29%20%7B%20%20%0A%0Aif%20%28icons%5Bi%5D%20%3D%3D%20%22%22%29%20continue%3B%0A%0Avar%20%20menuitem%20%3D%20document.createElementNS%28kXULNS%2C%20%22menuitem%22%29%3B%0A%20%20%20%20%20menuitem.setAttribute%28%22label%22%2C%20icons%5Bi%5D%29%3B%0A%20%20%20%20%20menuitem.setAttribute%28%22value%22%2C%20icons%5Bi%5D%29%3B%0A%20%20%20%20%20menuitem.setAttribute%28%22src%22%2C%20icons%5Bi%5D%29%3B%0A%20%20%20%20%20menuitem.setAttribute%28%22fromCusomIcons%22%20+%20cbIdNumber%2C%20%22true%22%29%3B%0A%0Amenupopup.appendChild%28menuitem%29%3B%20%7D%0A%0A%7D%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%0Avar%20ww%20%3D%20Components.classes%5B%22@mozilla.org/embedcomp/window-watcher%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIWindowWatcher%29%3B%0A%20%20%20%20%20%20%20%20%20%0Afunction%20setForEachWin%28remove%29%20%7B%20%0A%0A%20%20var%20enumerator%20%3D%20ww.getWindowEnumerator%28%29%3B%0A%20%20var%20win%20%3D%20true%3B%0A%20%20while%20%28win%29%20%7B%20win%20%3D%20enumerator.getNext%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%21win%29%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20doc%20%3D%20win.document%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%21RegExp%28pattern%29.test%28doc.location.href%29%29%20continue%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28win.opener%20%21%3D%20window%29%20continue%3B%0A%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20moveIcons%28doc%2C%20remove%29%3B%20%20%7D%7D%0A%0A//%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%0A%0Avar%20oSvc%20%3D%20Components.classes%5B%22@mozilla.org/observer-service%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIObserverService%29%3B%0A%0A%0A%0Avar%20observer%20%3D%20%7B%20//%20thanks%20for%20Infocatcher%0A%0Aobserve%3A%20function%28subject%2C%20topic%2C%20data%29%20%7B%0A%20%20%20%20%20%20%20%20%20subject.addEventListener%28%22load%22%2C%20this%2C%20false%29%3B%20%7D%2C%0A%20%20%20%20%20%20%0AhandleEvent%3A%20function%28e%29%20%7B%0A%20%20%20%20var%20doc%20%3D%20e.target%3B%0A%20%20%20%20var%20win%20%3D%20doc.defaultView%3B%0A%20%20%20%20%20%20%20%20win.removeEventListener%28%22load%22%2C%20this%2C%20false%29%3B%0A%20%20%20%20if%20%28%21RegExp%28pattern%29.test%28doc.location.href%29%29%20return%3B%0A%0A%0AmoveIcons%28doc%2C%20false%29%3B%0A%0A%20%20%7D%7D%0A%0A//%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%0A%0A%20%20%20%20%20%20%20oSvc.addObserver%28observer%2C%20%22domwindowopened%22%2C%20false%29%3B%0A%20%20%20%20%20%20%20setForEachWin%28false%29%3B%0A%0A//%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%0A%0Athis.onDestroy%20%3D%20function%28%29%20%7B%20setForEachWin%28true%29%3B%0A%0AoSvc.removeObserver%28observer%2C%20%22domwindowopened%22%29%3B%20%7D%0A%20%20%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bthis.prefs.setBoolPref%28%22off%22%2C%20%21this.prefs.getBoolPref%28%22off%22%29%29%3B%0A%0Atry%20%7B%20this.onDestroy%28%29%3B%20%7D%20catch%28e%29%20%7B%7D%3B%0A%0Athis.init%28%29%3B%0A%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wD/AP8A/wD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wD/AP8A/wD/AP8A/wD/AP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8AAAD/AAAAAAAAAAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAAAP8A/wD/AP8A/wD/AP8A/wD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AP8A/wD/AP8A/wD/AP8A/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wD/AP8A/wD/AP8A/wD/AP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8A/wD/AP8A/wD/AP8A/wD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AP8A/wD/AP8A/wD/AP8A/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wD/AP8A/wD/AP8A/wD/AP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8A/wD/AP8A/wD/AP8A/wD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AP8A/wD/AP8A/wD/AP8A/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wD/AP8A/wD/AP8A/wD/AP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAA/n+sQfw/rEH4H6xB8A+sQeAHrEHAA6xBgAGsQfgfrEH4H6xB+B+sQfgfrEH4H6xB+B+sQfgfrEH4H6xB+B+sQQ%3D%3D%0Adata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/zAD//8wA///MAP//zAD//8wA///MAP//zAD/AAAAAAAAAAD/zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA/wAAAAAAAAAA/8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP8AAAAAAAAAAP/MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD/AAAAAAAAAAD/zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA/wAAAAAAAAAA/8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP8AAAAAAAAAAP/MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD/AAAAAAAAAAD/zAD//8wA///MAP//zAD//8wA///MAP//zAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/zAD//8wA///MAP//zAD//8wA///MAP//zAD/AAAAAAAAAAD/zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA/wAAAAAAAAAA/8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP8AAAAAAAAAAP/MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD/AAAAAAAAAAD/zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA/wAAAAAAAAAA/8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP8AAAAAAAAAAP/MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD/AAAAAAAAAAD/zAD//8wA///MAP//zAD//8wA///MAP//zAD/AYCsQQGArEEBgKxBAYCsQQGArEEBgKxBAYCsQf//rEH//6xBAYCsQQGArEEBgKxBAYCsQQGArEEBgKxBAYCsQQ%3D%3D%0Adata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBjP+TAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEj///NEX//3F9//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0gf//MEH//yg6//80Rf//fYn//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBjP//M0P//yg6//8oOv//KDr//zRF//90gf//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANrg/41UYv//M0T//yg6//8oOv//KDr//yg6//8oOv//MEH//0hX///W3P+NAAAAAAAAAAAAAAAAAAAAANbc/40xQv//LD3//ys8//8rPP//Kzz//ys8//8rPP//Kzz//ys8//8rPP//Kzv//9bc/40AAAAAAAAAAAAAAABBUP//MEP//zJF//8yRf//MkX//zJF//8yRf//MkX//zJF//8yRf//MkX//zFE//84SP//AAAAAAAAAAC0vP+NOUn//zxQ//88UP//PFD//zxQ//88UP//PFD//zxQ//88UP//PFD//zxQ//88UP//OEn//52n/40AAAAAl6H/jTpO//9GXf//Rl3//0Zd//9GXf//Rl3//0Zd//9GXf//Rl3//0Zd//9GXf//Rl3//zlN//97h/+NAAAAAKSt/40/Uf//UWr//1Fq//9Rav//UWr//1Fq//9Rav//UWr//1Fq//9Rav//UWr//1Fq//8+U///jpj/jQAAAADR1/+NNEb//1t2//9bdv//W3b//1t2//9Ycv//OUv//1hy//9bdv//W3b//1t2//9bdv//PU///7rC/40AAAAAAAAAAGZ0//9GXP//Y3///2N///9ge///QVT//4GN/404Sv//X3r//2N///9jf///Rlz//1xr//8AAAAAAAAAAAAAAAAAAAAAXGv//ztN//9AU///MEH//3yI/40AAAAAhJD/jTFC//9AU///OUr//1po///a4P+NAAAAAAAAAAAAAAAAAAAAAAAAAADDyv+Ntr7/jQAAAAAAAAAAAAAAAAAAAAAAAAAAtr7/jcrR/40AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//+sQf9/rEH+P6xB/B+sQfgPrEHgA6xBwAGsQcABrEGAAKxBgACsQYAArEGAAKxBwAGsQeCBrEHz56xB//+sQQ%3D%3D%0Adata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACPuI/88MFn/IhRD/yIUQ/8iFEP/IhRD/yIUQ/8iFEP/IhRD/yIUQ/8iFEP/IhRD/zwwWf8j6yP/AAAAAAAAAAA8MFn/I7Ij/yPiI/8j4iP/I+Ij/yPiI/8j4iP/I+Ij/yPiI/8j4iP/I+Ij/yPiI/8jsyP/PDBZ/wAAAAAAAAAAIhRD/yPbI/8juCP/I7gj/yO4I/8juCP/I7gj/yO4I/8juCP/I7gj/yO4I/8juCP/I9sj/yIUQ/8AAAAAAAAAACIUQ/8j1CP/I60j/yOOI/9mVlP/ZlZT/yOOI/8jjiP/ZlZT/2ZWU/8jjiP/I60j/yPUI/8iFEP/AAAAAAAAAAAiFEP/I84j/yOkI/9mVlP/3Nzc/9zc3P9mVlP/ZlZT/9zc3P/c3Nz/ZlZT/yOkI/8jziP/IhRD/wAAAAAAAAAAIhRD/yPJI/8jnCP/I4gj/2ZWU//c3Nz/3Nzc/9zc3P/c3Nz/ZlZT/yOII/8jnCP/I8kj/yIUQ/8AAAAAAAAAACIUQ/8jxSP/I5gj/yOYI/8jhiP/ZlZT/9zc3P/c3Nz/ZlZT/yOGI/8jmCP/I5gj/yPFI/8iFEP/AAAAAAAAAAAiFEP/I+sj/yPPI/8jzyP/I5wj/2ZWU////////////2ZWU/8jnCP/I88j/yPPI/8j6yP/IhRD/wAAAAAAAAAAIhRD/yPwI/8j1yP/I6Aj/2ZWU///////////////////////ZlZT/yOgI/8j1yP/I/Aj/yIUQ/8AAAAAAAAAACIUQ/8j8yP/I9wj/2ZWU////////////2ZWU/9mVlP///////////9mVlP/I9wj/yPzI/8iFEP/AAAAAAAAAAAiFEP/I/Yj/yPgI/8jpCP/ZlZT/2ZWU/8jpCP/I6Qj/2ZWU/9mVlP/I6Qj/yPgI/8j9iP/IhRD/wAAAAAAAAAAIhRD/yP4I/8j5CP/I+Qj/yPkI/8j5CP/I+Qj/yPkI/8j5CP/I+Qj/yPkI/8j5CP/I/gj/yIUQ/8AAAAAAAAAADwwWf8jvyP/I/sj/yP7I/8j+yP/I/sj/yP7I/8j+yP/I/sj/yP7I/8j+yP/I/sj/yO/I/88MFn/AAAAAAAAAAAj7iP/PDBZ/yIUQ/8iFEP/IhRD/yIUQ/8iFEP/IhRD/yIUQ/8iFEP/IhRD/yIUQ/88MFn/I+4j/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//+sQYABrEGAAaxBgAGsQYABrEGAAaxBgAGsQYABrEGAAaxBgAGsQYABrEGAAaxBgAGsQYABrEGAAaxB//+sQQ%3D%3D%0Adata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM/Pz3ShoaHco6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+hoaH/np6e/56env+enp7/nJyc/5mZmdzMzMx0AAAAAAAAAAChoaHcpqam/6urq/+tra3/ra2t/6urq/+rq6v/qKio/6ampv+jo6P/np6e/5ycnP+ZmZn/mZmZ3AAAAAAAAAAAo6Oj/6urq/+wsLD/tbW1/8zMzP/19fX////////////y8vL/x8fH/6Ghof+enp7/nJyc/5ycnP8AAAAAAAAAAKioqP+wsLD/tbW1/9vb2///////5ubm/8fHx//Hx8f/5ubm///////W1tb/np6e/56env+cnJz/AAAAAAAAAACrq6v/tbW1/9HR0f//////z8/P/7W1tf+ysrL/sLCw/6urq//Hx8f//////8TExP+hoaH/np6e/wAAAAAAAAAAsLCw/7i4uP/39/f/5ubm/7q6uv+4uLj///////////+tra3/qKio/+Pj4//y8vL/o6Oj/6Ghof8AAAAAAAAAALKysv+9vb3//////8/Pz/+6urr/uLi4////////////q6ur/6ioqP/CwsL//////6ampv+jo6P/AAAAAAAAAAC1tbX/vb29///////Pz8//urq6/7i4uP///////////6urq/+oqKj/wsLC//////+oqKj/pqam/wAAAAAAAAAAurq6/8LCwv/6+vr/4+Pj/7q6uv+4uLj///////////+rq6v/qKio/+Dg4P/19fX/q6ur/6ioqP8AAAAAAAAAAL29vf/ExMT/1tbW///////MzMz/uLi4/7W1tf+ysrL/ra2t/8TExP//////x8fH/62trf+oqKj/AAAAAAAAAAC/v7//zMzM/8fHx//b29v//////+Dg4P/Hx8f/xMTE/+Dg4P//////1tbW/62trf+tra3/qKio/wAAAAAAAAAAxMTE/9HR0f/MzMz/x8fH/9bW1v/6+vr////////////39/f/0dHR/7Kysv+ysrL/ra2t/6ampv8AAAAAAAAAAMnJydzZ2dn/0dHR/8nJyf/Hx8f/xMTE/8LCwv/CwsL/v7+//729vf+6urr/srKy/62trf+jo6PcAAAAAAAAAADg4OB0ycnJ3MLCwv+/v7//vb29/7q6uv+4uLj/uLi4/7W1tf+ysrL/srKy/62trf+oqKjc0dHRdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//+sQYABrEGAAaxBgAGsQYABrEGAAaxBgAGsQYABrEGAAaxBgAGsQYABrEGAAaxBgAGsQYABrEGAAaxB//+sQQ%3D%3D%0Adata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMWM7ADJmogA0aOMANGn/ADVq/wA1av8ANGnrADNnvwAyZXsAMWMfAAAAAAAAAAAAAAAAAAAAAAAAAAAAMmZvATdt/zZ0of9jpcv/fcDi/4PF5f+Exub/cbLW/1WUvf8rZpb/ATZr+wAyZYcAMGEEAAAAAAAAAAAANGsjADdv+1mcxP+Axeb/frzZ/3210P99ss3/fbLO/3630/+HxeT/hMfo/2Wpzv8KQnf/ADNojwAAAAAAAAAAADpzYCJglP9/xOb/VoGt/yY3d/8tP4H/Kjl+/zZJiP8nNnf/LkF7/12Irf9/weL/XaDI/wA3b/sAM2kQAAAAAAAxZGc3eKr/gsbn/01upf+Vz+3/odjz/6fc9f+p3fb/pdr0/4m73v8+WJX/WIOx/3/E5v8JRX7/ADlyHwAkSiAHMlfzIF+U/4XI6P+Rz+3/k8rj/05vc/+cx9r/tOP6/32ls/+bz+j/l9Lv/2qbx/+Axeb/B0WB+wA3cRAAKlWPJ2CD/wA1av94udz/kc/t/1GDf/8FJgX/Wnx8/3Gamf8AHAD/VXuB/5fS7/+MzOv/V5rF/wQ4Z/8AIkZTBDVky0GBpv8AOnX/bq/S/4/N6/9gmI3/XH1c/12Khv9mmIv/TW5N/017d/+V0e7/iMfm/xFKfv8jXIH/ASpTsgU7b9thpcj/AECA/22x1/+Ky+r/hcPX/0+MfP+a0ej/hL7F/z51VP+Cu83/js3r/36+3v8DPnj/Onif/wo7aN8AOnSmHluP/wNFhv9KkcL/g8fn/4vL6/+Sz+3/iMXn/5XQ7v+U0e7/j83s/4fJ6f9coMv/A0KA/2GlyP8CN2rLADt3FAA/fXgAQYN/Dleb/3C33f+Cxuf/fb/j/x5oqv9Plcf/icrq/4XI6P9+w+X/HmWj/w1Mh/8hXpH/ADdwgwAAAAAAAAAAAAAAAABIka8IU5v/H2qr/wdRmf8ATJf/AU6a/0OLwf9Xn83/IGqp/wBGjcMAPXxbADt3gwA5dAwAAAAAAAAAAAAAAAAARo0MAEmTqwBMlv8ASZL/ADt2/wA6dP8AQoT/AEqT/wBFiv8APn6LAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASJJbAEyX5wBLlf8APXv/ADt2/wA9fP8ARYuPAESJvwA/gCMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHkAgATJdbAEmTvwBDhv8APnz/AD9/ogAAAAAAPXwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASJAbAEWLbwBBgsMAPXwIAAAAAAAAAAAAAAAA4AesQcABrEGAAaxBgACsQYAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEHgAKxB4AesQfgDrEH8C6xB/4esQQ%3D%3D%0Adata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABjY9//RUXb/xsb5f8FBeH/BQXh/wUF4f8FBeH/BQXh/wgI1v8ICNb/CAjW/wgI1v8ICNb/CgrM/xIS1P81Ncv/JSXj/5qa+v+amvr//////////////////////////////////////////////////////2Nj3/9jY9//EhLU/w0N6f+lpf//Y2P///////9DQ+f/Q0Pn/0ND5/9DQ+f/Q0Pn/0ND5/9DQ+f/Q0Pn//////9BQfH/Y2Pf/woKzP8NDen/paX//2Nj////////s7Pp/7Oz6f+zs+n/s7Pp/7Oz6f+zs+n/s7Pp/7Oz6f//////S0vv/2tr5/8ICNb/DQ3p/6Wl//9jY////////0ND5/9DQ+f/Q0Pn/0ND5/9DQ+f/Q0Pn/0ND5/9DQ+f//////0tL7/9ra+f/CAjW/w0N6f+trf//Y2P///////////////////////////////////////////////////////9JSfn/c3Pv/wgI1v8NDen/ra3//2Nj//9jY///Y2P//2Nj//9jY///Y2P//1NT9/9TU/f/U1P3/1NT9/9TU/f/U1P3/3Nz7/8ICNb/DQ3p/7q6/P9jY///Y2P//2Nj//9jY///Y2P//2Nj//9jY///U1P//1NT9/9TU/f/U1P3/1NT9/97e/f/CAjW/w0N6f+/v///Y2P//2Nj//9jY///Y2P//2Nj//9jY///Y2P//1NT//9TU/f/U1P3/1NT9/9TU/f/hob0/wUF4f8NDen/v7///2Nj//9BQfH/QUHx/0FB8f9LS+//S0vv/0tL7/9BQfH/QUHx/0FB8f9BQfH/U1P3/4aG9P8FBeH/DQ3p/8fH//9jY////////////////////////////////////////////////////////1NT//+Pj/3/BQXh/w0N6f/Hx///Y2P/////////////QUHx//////////////////////////////////////9jY///mpr6/wUF4f8bG+X/x8f//2Nj/////////////0FB8f//////////////////////////////////////Y2P//7q6/P8FBeH/JSXj/8fH//9jY/////////////9BQfH//////////////////////////////////////62t//+trf//Gxvl/1lZ4f/Hx///x8f///////////////////////////////////////////////////////+trf//QUHx/4OD1/95edn/Y2Pf/y8v4f8bG+X/DQ3p/w0N6f8NDen/DQ3p/w0N6f8NDen/DQ3p/w0N6f8bG+X/Ojre/5ub0f8AAAAAAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAAGsQQ%3D%3D%0Adata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAABILAAASCwAAAAAAAAAAAAAAVrh+AFa45wBWuP8AVrj/AFa4/wBWuP8AVrj/AFa4/wBWuP8AVrj/AFa4/wBWuJb///8A////AABs5gAAbOYABVq55wBq4v8AbOb/AGzm/wBs5v8AWub/AFnm/wBe5v8Aa+b/AGzm/wBs5v8DYMj/BVq5e////wAAbOYAAGzmAAxfuv8Acen/AHHp/wBx6f9gpvH/8/j+/+31/f9Fl+//AGHp/wBx6f8Acen/AW/k/wxgvP8MX7oPAHHpAABx6QAUZb3/AHft/wB37f8Geu3/9vr+/4G89v+Nwvf/5/L9/wBo7f8Ad+3/AHft/wB37f8LbdT/FGW9igB37QAAd+0AHWzA/wB/8v8Af/L/AH/y/wB/8v8Af/L/eLv4//////8AdfL/AH/y/wB/8v8Af/L/AX7w/xpuxf8dbMA8AH/yACZ0w/8Ah/f/AIf3/wCH9/8Ah/f/AIf3/3i/+///////AIP3/wCH9/8Ah/f/AIf3/wCH9/8NgOX/JnTDpQCH9wAxfMf/AJD7/wCQ+/8AkPv/AJD7/wCQ+/94xP3//////wCQ+/8AkPv/AJD7/wCQ+/8AkPv/AJD7/yWB0/8xfMdmO4XM/wCX/v8Al/7/AJf+/wCX/v8Al/7/eMj+//////8Al/7/AJf+/wCX/v8Al/7/AJf+/wCX/v8LlPX/O4XMz0aO0P8In///CJ///wif//8In///CJ///3zM////////CJ///wif//8In///CJ///wif//8In///FJz2/0aO0M9Rl9X/jdP///////////////////////////////////////////////////////+N0///Gab//0Sb3/9Rl9VmW6DZ/2bE////////////////////////////////////////////////////////ZsT//z2p8v9boNmlLa7/AGWo3v9Ctf//0+7/////////////////////////////////////////////0+7//0S0/f9hqeH/ZajePEK1/wBur+L/Vbv//2PB///Z8P//////////////////////////////////2fD//2PB//9itfD/bq/iilW7/wBVu/8Adrbl/2vE//9rxP//a8T//6bc///X7///8fn////////X7///ptz//2vE//9swvz/drbm/3a25Q9rxP8Aa8T/AHy86OSLz/3/jdH//43R//+N0f//jdH//63e///R7f//jdH//43R//+N0f//gsPw/3y86Hj///8AjdH/AI3R/wCBwOp7gcDq5IHA6v+BwOr/gcDq/4HA6v+BwOr/gcDq/4HA6v+BwOr/gcDq/4HA6pb///8A////AI3R/wCN0f8AAA8AAAAHAAAAAwAAAAMAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAMAAAADAAAABwAAAA8AAA%3D%3D%0Adata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMAAAATAAAAEwAAABMAAAATAAAAAAAAAAAAAAAAAAAAEwAAABMAAAATAAAAEwAAAAAAAAAAAAAAAAAAAL8AAADEAAAAxgAAAMYAAADGAAAAEwAAAAAAAAAAAAAAvwAAAMQAAADGAAAAxgAAABMAAAAAAAAAAAAAAAAAAAC/wP/M/wD/AP8A/wD/AAAAxgAAABMAAAATAAAAEwAAAMQA/wD/J/9U/wAAAMYAAAATAAAAAAAAAAAAAAAAAAAAv6b/wP+m/8D/VP+G/wAAAMYAAADGAAAAxgAAAMYAAADGAP8A/wD/Lf8AAADGAAAAEwAAABMAAAATAAAAAAAAAL8AAAC/AAAAvwDzAP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AAAAxgAAAMYAAADGAAAAEwAAAAAAAAAAAAAAAAAAAL8A4AD/APMA/wDzAP8A8wD/APMA/wDzAP8A8wD/AP8A/wD/AP8A/wD/AAAAxgAAABMAAAAAAAAAAAAAAAAAAAC/AMwA/wDgAP8A4AD/AOAA/wDgAP8A4AD/AOAA/wDgAP8A4AD/AP8A/wAAAMYAAAATAAAAAAAAAAAAAAATAAAAxACzAP8AzAD/AMwA/wDMAP8AzAD/AMwA/wDMAP8A/wD/AP8A/wD/AP8AAADEAAAADwAAAAAAAAC/AAAAxAAAAMYAoAD/ALMA/wCzAP8AswD/ALMA/wCzAP8AswD/AP8A/wAAAMYAAADEAAAAkQAAAAAAAAAAAAAAvwD/R/8A/0f/AP9H/wCgAP8AoAD/AKAA/wCgAP8AoAD/AKAA/wD/AP8AAADGAAAAEwAAAAAAAAAAAAAAAAAAAL8A/zT/AIYA/wCGAP8AhgD/AIYA/wCGAP8AhgD/AIYA/wCGAP8A7AD/AAAAxgAAABMAAAAAAAAAAAAAAAAAAAC/AP8g/wD/IP8A/yD/AP8g/wD/IP8AegD/AP8g/wD/IP8A/yD/AP8A/wAAAMQAAAATAAAAAAAAAAAAAAAAAAAAvwAAAL8AAAC/AAAAvwAAAL8A/w3/AGcA/wD/Df8AAADGAAAAxAAAAL8AAAC/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC/APMA/wDzAP8A8wD/AAAAxAAAABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkQAAAL8AAAC/AAAAvwAAAL8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwcOsQYGDrEGAA6xBgACsQYAArEHgAKxB4ACsQcAArEGAAaxBgAOsQYADrEGAA6xBgAesQfgfrEH4P6xB//+sQQ%3D%3D%0Adata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAGABoAwAAFgAAACgAAAAQAAAAIAAAAAEAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADo6OjZ2dnm5uYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADZ2dmmpqa4uLjj4+Po6Ojm5ubw8PAAAAAAAAAAAAAAAAAAAAAAAAAAAADm5ubj4+Pb29v39/d6enqMjIyUlJScnJzMzMwAAAAAAADw8PDj4+Po6Ojj4+O6urrR0dGjo6Po6Ojwd2z85+b////////////MzMwAAAAAAADe3t64uLiysrKtra2hoaH19fV1dHTo6OjtWU7wZVvyiID3t7Lo6OjZ2dkAAAAAAADw8PD19fW6urrCwsLa9+L///+MjIzMfHboU0jtVErtVEr///+AgIDZ19cAAAAAAADo6Oj///9s4Imk67ZD2Wn///9ua2tzUVCtPDTZTUPoU0jwx8XZ2dm6uroAAAAAAADo6Oj8/PxD2WlD2WlD2Wmk67b///+Pj4+AMi2yS0TMfHbJjone3t66uroAAAAAAADR0dH///9D2WlD2WlD2WlD2WmM5qL///+1sLBua2uMjIvb29u6urro6OgAAAAAAADg4OCo7bqX6KuF5p1D2Wn///+6urp7YNvRxvf////Dtffm5ubCwsIAAAAAAAAAAAAAAAAAAAAAAAAAAABi3oHw8PCysrJ0U+1tSu15WfC3pveysrLMzMwAAAAAAAAAAAAAAAAAAAAAAADo6Oj////U1NSTf9ttSu1tSu1tSu3TyPp1dHSysrIAAAAAAAAAAAAAAAAAAAAAAAAAAADo6Ojw8PD39/eBYvBtSu1tSu15WfD///+cnJzm5uYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADm5ua9rfeXfvL////////////m5ubo6OgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADw8PD////////Pz8/o6Ojw8PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg4ODt7e0AAAAAAAAAAAAAAAAAAAAAAAD+P6xB/gOsQfgDrEEAA6xBAAOsQQADrEEAA6xBAAOsQQADrEEAB6xB8AesQeAHrEHwA6xB/AOsQfwPrEH/P6xB%0A%0A%0Adata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADzYUL/82FC//NhQv/zYUL/82FC//NhQv/zYUL/82FC//NhQt/zYUKf82FCQAAAAAAAAAAAAAAAAAAAAAAAAAAA82FC//RrTv/2iXH/9olx//aJcf/2iXH/73NW/+lePP/wYED/82FC//NhQv/zYUKv82FCEAAAAAAAAAAAAAAAAPNhQv/1h3D//83M///NzP//zcz//83M///NzP//zcz//83M//CkkP/uXz//82FC//NhQs/zYUIQAAAAAAAAAADzYUL/8oRt///NzP//zcz//83M///NzP//zcz//83M///NzP//zcz//83M/+18Yf/zYUL/82FCzwAAAAAAAAAA82FC/++Bav//zcz//83M///NzP//zcz//83M///NzP//zcz//83M///NzP//zcz/7GhJ//NhQv/zYUJgAAAAAPNhQv/0hm///83M/8xmZv//zcz//83M///NzP//zcz/zGZm///NzP//zcz//83M///NzP/zYUL/82FCvwAAAADzYUL/9olx///NzP/MZmb/zGZm///NzP//zcz//83M/8xmZv/MZmb//83M///NzP//zcz/7l8///NhQv8AAAAA82FC//aJcf//zcz/zGZm/8xmZv/MZmb//83M///NzP/MZmb/zGZm/8xmZv//zcz//83M/+xoSf/zYUL/AAAAAPNhQv/2iXH//83M/8xmZv/MZmb/zGZm/8xmZv//zcz/zGZm/8xmZv/MZmb/zGZm///NzP/vc1b/82FC/wAAAADzYUL/9olx///NzP/MZmb/zGZm/8xmZv//zcz//83M/8xmZv/MZmb/zGZm///NzP//zcz/7l8///NhQv8AAAAA82FC//aJcf//zcz/zGZm/8xmZv//zcz//83M///NzP/MZmb/zGZm///NzP//zcz//83M//NhQv/zYULPAAAAAPNhQv/2iXH//83M/8xmZv//zcz//83M///NzP//zcz/zGZm///NzP//zcz//83M/+pmR//zYUL/82FCYAAAAADzYUL/9olx///NzP//zcz//83M///NzP//zcz//83M///NzP//zcz//83M/+t5Xv/zYUL/82FCzwAAAAAAAAAA82FC//aJcf//zcz//83M///NzP//zcz//83M///NzP//zcz/8KSQ/+5fP//zYUL/82FCz/NhQhAAAAAAAAAAAPNhQv/0a07/9olx//aJcf/2iXH/9olx/+9zVv/pXjz/8GBA//NhQv/zYUL/82FCv/NhQhAAAAAAAAAAAAAAAADzYUL/82FC//NhQv/zYUL/82FC//NhQv/zYUL/82FC//NhQt/zYUKf82FCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+sQQAHrEEAA6xBAAOsQQABrEEAAaxBAAGsQQABrEEAAaxBAAGsQQABrEEAAaxBAAOsQQADrEEAB6xBAB+sQQ%3D%3D%0Adata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPNhQkDzYUKf82FC3/NhQv/zYUL/82FC//NhQv/zYUL/82FC//NhQv/zYUL/AAAAAAAAAAAAAAAA82FCEPNhQr/zYUL/82FC//BgQP/pXjz/73NW//aJcf/2iXH/9olx//aJcf/0a07/82FC/wAAAAAAAAAA82FCEPNhQs/zYUL/7l8///CkkP//zcz//83M///NzP//zcz//83M///NzP//zcz/9olx//NhQv8AAAAAAAAAAPNhQs/zYUL/63le///NzP//zcz//83M///NzP//zcz//83M///NzP//zcz//83M//aJcf/zYUL/AAAAAPNhQmDzYUL/6mZH///NzP//zcz//83M///NzP//zcz//83M///NzP//zcz//83M///NzP/2iXH/82FC/wAAAADzYULP82FC///NzP//zcz//83M///NzP/MZmb//83M///NzP//zcz//83M/8xmZv//zcz/9olx//NhQv8AAAAA82FC/+5fP///zcz//83M///NzP/MZmb/zGZm///NzP//zcz//83M/8xmZv/MZmb//83M//aJcf/zYUL/AAAAAPNhQv/vc1b//83M///NzP/MZmb/zGZm/8xmZv//zcz//83M/8xmZv/MZmb/zGZm///NzP/2iXH/82FC/wAAAADzYUL/7GhJ///NzP/MZmb/zGZm/8xmZv/MZmb//83M/8xmZv/MZmb/zGZm/8xmZv//zcz/9olx//NhQv8AAAAA82FC/+5fP///zcz//83M/8xmZv/MZmb/zGZm///NzP//zcz/zGZm/8xmZv/MZmb//83M//aJcf/zYUL/AAAAAPNhQr/zYUL//83M///NzP//zcz/zGZm/8xmZv//zcz//83M///NzP/MZmb/zGZm///NzP/0hm//82FC/wAAAADzYUJg82FC/+xoSf//zcz//83M///NzP/MZmb//83M///NzP//zcz//83M/8xmZv//zcz/74Fq//NhQv8AAAAAAAAAAPNhQs/zYUL/7Xxh///NzP//zcz//83M///NzP//zcz//83M///NzP//zcz//83M//KEbf/zYUL/AAAAAAAAAADzYUIQ82FCz/NhQv/uXz//8KSQ///NzP//zcz//83M///NzP//zcz//83M///NzP/1h3D/82FC/wAAAAAAAAAAAAAAAPNhQhDzYUKv82FC//NhQv/wYED/6V48/+9zVv/2iXH/9olx//aJcf/2iXH/9GtO//NhQv8AAAAAAAAAAAAAAAAAAAAAAAAAAPNhQkDzYUKf82FC3/NhQv/zYUL/82FC//NhQv/zYUL/82FC//NhQv/zYUL/+ACsQeAArEHAAKxBwACsQYAArEGAAKxBgACsQYAArEGAAKxBgACsQYAArEGAAKxBwACsQcAArEHgAKxB+ACsQQ%3D%3D%0A%0A%0Adata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALOzs/9NTU3/gICA/4CAgMaBgYGygICAoICAgI2AgIB6fn5+Z4ODg1SAgIBCgoKCL4SEhBtxcXEJAAAAAAAAAABoaGj/+/v7/01NTf+AgID/s7OzvLKysqO1tbWJsrKycbGxsVixsbE+s7OzJaqqqgwAAAAAAAAAAAAAAAAAAAAAw8PD/2lpaf/5+fn/TU1N/4CAgP/Ly8vLy8vLnsvLy3HOzs5D0dHRFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDw8P/cXFx/+/v7/9NTU3/gICA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMXFxf95eXn/5OTk/01NTf+AgID/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx8fH/4KCgv/Z2dn/TU1N/4CAgP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADJycn/iYmJ/87Ozv9NTU3/TU1N/01NTf9NTU3/TU1N/05OToAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMvLy/+Ghob/x8fH/7Ozs/+zs7P/s7Oz/7Ozs/9NTU3/Tk5OgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjY2N/8fHx//Hx8f/gICA/01NTf+zs7P/s7Oz/01NTf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJOTk//Hx8f/hYWF/01NTf8AAAAAgICA/7Ozs/92dnb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACbm5v/x8fH/01NTf8AAAAAAAAAAAAAAACAgID/gICA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoaGh/8fHx/+AgID/TU1N/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMjIz/s7Oz/4CAgP9NTU3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJSUlP+UlJT/lJSU/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//+sQYABrEGAB6xBgB+sQcH/rEHg/6xB8H+sQfgDrEH8AaxB/gGsQf4RrEH+OaxB/h+sQf8PrEH/j6xB//+sQQ%3D%3D%0Adata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///Ozv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA///Ozv//AAD//wAAAAAAAAAAAAAAAAAAAAAAAP//zs7//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//zs7//wAA//8AAAAAAAAAAAAAAAAAAAAAAAD//87O//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//87O//8AAP//AAAAAAAAAAAAAAAAAAAAAAAA///Ozv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA///Ozv//AAD//wAAAAAAAAAAAAAAAAAAAAAAAP//zs7//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//zs7//wAA//8AAAAAAAAAAAAAAAAAAAAAAAD//87O//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//87O//8AAP//AAAAAAAAAAAAAAAAAAAAAAAA///Ozv//zs7//87O///Ozv//zs7//87O///Ozv//zs7//87O///Ozv//AAD//wAAAAAAAAAAAAAAAAAAAABaWv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//2lp//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/gID//83M///NzP//zcz//83M///NzP//zcz//4CA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/4CA//+sq///gID//8DA///Cwf//gID//6yr//+AgP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+AgP/wvr3/8L69//DBwP/wvr3/8L69//C+vf//gID/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/gID/wIKB/wAAAP+yj47/wJua/wAAAP/AgoH//4CA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/4CA/8iLi/8AAAD/vJeW/8ihoP8AAAD/yIuL//+AgP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+AgP/wvr3/8L69//C+vf/wvr3/8L69//C+vf//gID/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/gID//83M///NzP//zcz//83M///NzP//zcz//4CA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7W5u//+AgP//gID//4CA//+AgP//gID//4CA//Bxcf8AAAAAAAAAAAAAAAAAAAAAwAOsQcADrEHAA6xBwAOsQcADrEHAA6xBwAOsQcADrEHwD6xB8A+sQfAPrEHwD6xB8A+sQfAPrEHwD6xB8A+sQQ%3D%3D%0Adata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////YP///8D/////////////////////////wP///2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8g////0M/gv/+Hsl////////////+30Z//P4UA/3qrT//P4L//////0P///yAAAAAAAAAAAAAAAAD///8g////8JO6b/8/hQD/n8J/////////////VpQf/z+FAP8/hQD/P4UA/5O6b//////w////IAAAAAAAAAAA////0JO6b/8/hQD/P4UA/+fw3///////w9mv/z+FAP8/hQD/P4UA/z+FAP8/hQD/k7pv/////9AAAAAA////YM/gv/8/hQD/P4UA/26jP////////////+fw3//P4L//z+C//3qrT/8/hQD/P4UA/z+FAP/P4L//////YP///8B6q0//P4UA/z+FAP+30Z/////////////z9+//q8mP/8PZr///////eqtP/1aUH/+fwn//q8mP/////8D/////SowP/z+FAP9KjA//8/fv///////n8N//SowP/z+FAP8/hQD/t9Gf/+fw3////////////////////////////z+FAP8/hQD/h7Jf////////////h7Jf/z+FAP8/hQD/P4UA/z+FAP///////////5/Cf/9KjA////////////8/hQD/P4UA/8PZr///////8/fv/z+FAP8/hQD/P4UA/z+FAP+Hsl///////+fw3/8/hQD/P4UA////////////SowP/1aUH////////////6vJj/8/hQD/P4UA/z+FAP8/hQD/z+C///////+Hsl//P4UA/0qMD///////////wIeyX/9uoz//2+jP//////9WlB//P4UA/z+FAP8/hQD/bqM////////z9+//P4UA/z+FAP+Hsl//////wP///2Db6M//P4UA/z+FAP8/hQD/P4UA/z+FAP8/hQD/P4UA/7fRn///////n8J//z+FAP8/hQD/2+jP/////2AAAAAA////0J/Cf/8/hQD/P4UA/z+FAP8/hQD/P4UA/z+FAP8/hQD/VpQf/z+FAP8/hQD/n8J//////9AAAAAAAAAAAP///yD////wn8J//z+FAP8/hQD/P4UA/z+FAP8/hQD/P4UA/z+FAP8/hQD/n8J///////D///8gAAAAAAAAAAAAAAAA////IP///9DP4L//h7Jf/0qMD/8/hQD/P4UA/0qMD/+Hsl//2+jP/////9D///8gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////YP///8D/////////////////////////wP///2AAAAAAAAAAAAAAAAAAAAAA8A+sQcADrEGAAaxBgAGsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBgAGsQYABrEHAA6xB8A+sQQ%3D%3D%0Adata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAurq6Eri4uBS4uLgUuLi4FLi4uBQRERFnICAgaCEhIWghISFoy8vLLri4uBS4uLgUuLi4FLi4uBR9fX0Eurq6CFtbW++cnJz2n5+f9p+fn/afn5/2jY2N/pmZmf9gYGD/YGBg/1dXV/l9fX32nZ2d9m5ubvZeXl72ysrKXnZ2dgIsLCx2QEBAd0FBQXhBQUF4QUFBeK+vr9i9vb34pKSk/Lu7u9+mpqaQPj4+d0ZGRng8PDx3Ojo6dqysrCoAAAAAAAAAAAAAAAAAAAAAAAAAAD09PQUdHR1Ci4uL4oWFhe8mJiZTGxsbHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABra2tf7u7u/c7Ozv/CwsL/6+vr/4iIiLp/f38CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ2dnAoiIiKq2trb/paWl/6Ojo+o1NTUuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADc3N0tVVVWGVVVVhlVVVYZmZmaTvr6+/q+vr/+BgYHFVVVVhlVVVYZVVVWGQEBAaz09PQoAAAAAAAAAAH9/fwPBwcHzwsLB/8bEwv/X1dP/4+Hf/+Ph3//j4d//4+Hf/+Ph3//j4d//4uHg/9XV1f8lJSU/AAAAAAAAAAB/f38EwsLC/JV8ZP/NoHT/zaB0/82gdP/NoHT/zaB0/82gdP/NoHT/zaB0/9aykP/Q0ND/Ly8vSwAAAAAAAAAAf39/BLS0tPyNblX/vIZa/7yGWv+8hlr/vIZa/7yGWv+8hlr/vIZa/7yGWv/GmnX/xMTE/yoqKksAAAAAAAAAAH9/fwSoqKj8iGlT/7eCW/+rbkH/q2w//6tsP/+rbD//q2w//6tsP/+rbD//uIVf/7y8vP8kJCRLAAAAAAAAAAB/f38Ep6en/IRlUf/GnoT/wph8/7SAXv+pbUX/n10x/5pTJf+aUyX/mlMl/6pwSv+8vLz/Hx8fSwAAAAAAAAAAf39/BKioqPyDZVP/0rWk/9Cxn//Orpv/zKuX/8unk//Hooz/wpmB/72Rd/+yg2f/vb29/x4eHksAAAAAAAAAAH9/fwStra38gmRU/93Guv/dxrr/3ca6/9zFuP/aw7b/2cG0/9i/sf/Xva//sIlz/729vf8eHh5LAAAAAAAAAAB/f38EtLS0+4p7cv+We2z/lnts/5Z7bP+We2z/lnts/5Z7bP+We2z/lnts/4t2af/Ozs7/Hh4eSQAAAAAAAAAAAAAAAGVlZYuUlJTOlJSUzpSUlM6UlJTOlJSUzpSUlM6UlJTOlJSUzpSUlM6UlJTOc3NzsIuLixAAAAAAgACsQQAArEEAAKxB+B+sQfgPrEH4H6xBwAGsQYABrEGAAaxBgAGsQYABrEGAAaxBgAGsQYABrEGAAaxBwAGsQQ%3D%3D%0Adata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATU1NgE1NTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATU1NQE1NTb9NTU2ATU1NQF5eXv9eXl7/TU1NQE1NTYBNTU2/TU1NQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE5OTkBfX1//cnJy/19fX/+VlZX/lZWV/19fX/9ycnL/X19f/05OTkAAAAAAAAAAAAAAAAAAAAAAUVFRQFFRUUBRUVG/dnZ2/5qamv+ampr/mpqa/5qamv+ampr/mpqa/3Z2dv9RUVG/UVFRQFFRUUAAAAAAAAAAAFRUVL9nZ2f/enp6/42Njf+ZmZn/k5OT/5OTk/+Tk5P/k5OT/5mZmf+NjY3/enp6/2dnZ/9UVFS/AAAAAAAAAABYWFiAgICA/6Ghof+UlJT/jo6O/4mJif+JiYn/iYmJ/4mJif+Ojo7/lJSU/6Ghof+AgID/WFhYgAAAAAAAAAAAXFxcQHFxcf+Xl5f/gICA/4CAgP+AgID/gICA/4CAgP+AgID/gICA/4CAgP+Xl5f/cXFx/1xcXEAAAAAAX19fgHZ2dv+jo6P/lZWV/3d3d/93d3f/d3d3/3d3d/93d3f/d3d3/3d3d/93d3f/lZWV/6Ojo/92dnb/X19fgGRkZIB7e3v/q6ur/6+vr/+qqqr/v7+//8vLy//S0tL/0tLS/8vLy/+/v7//qqqq/6+vr/+rq6v/e3t7/2RkZIAAAAAAaGhoQIGBgf/Z2dn/3Nzc/9zc3P/c3Nz/3Nzc/9zc3P/c3Nz/3Nzc/9zc3P/Z2dn/gYGB/2hoaEAAAAAAAAAAAGtra4CxsbH/4uLi/+Li4v/i4uL/4uLi/+Li4v/i4uL/4uLi/+Li4v/i4uL/4uLi/7Gxsf9ra2uAAAAAAAAAAABwcHC/j4+P/7e3t//Nzc3/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/zc3N/7e3t/+Pj4//cHBwvwAAAAAAAAAAcnJyQHJyckBycnK/urq6/+7u7v/u7u7/7u7u/+7u7v/u7u7/7u7u/7q6uv9ycnK/cnJyQHJyckAAAAAAAAAAAAAAAAAAAAAAdnZ2QJqamv++vr7/mpqa//T09P/09PT/mpqa/76+vv+ampr/dnZ2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHd3d0B3d3e/d3d3gHd3d0CcnJz/nJyc/3d3d0B3d3eAd3d3v3d3d0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd3d3gHd3d4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/n8AAOAHAADgBwAAgAEAAIABAACAAQAAgAEAAAAAAAAAAAAAgAEAAIABAACAAQAAgAEAAOAHAADgBwAA/n8AAA%3D%3D%0Adata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOnp6Xva2tp709PTe9PT03vT09N709PTe9PT03vT09N709PTe9PT03va2tp76enpewAAAAAAAAAAAAAAAAAAAACjo6P/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/6Ojo/8AAAAAAAAAAAAAAAAAAAAAf39///Dw8P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs//Dw8P9/f3//AAAAAAAAAAAAAAAAAAAAAIGBgf/u7u7/6urq/+rq6v/q6ur/6urq/+rq6v/q6ur/6urq/+rq6v/u7u7/gYGB/wAAAAAAAAAAAAAAAAAAAACEhIT/8PDw/+3t7f/t7e3/7e3t/+3t7f/t7e3/7e3t/+3t7f/t7e3/8PDw/4SEhP8AAAAAAAAAAAAAAAAAAAAAh4eH//Pz8//w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Pz8/+Hh4f/AAAAAAAAAAAAAAAAAAAAAIqKiv/09PT/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/09PT/ioqK/wAAAAAAAAAAAAAAAAAAAACOjo7/9/f3//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9vb2/46Ojv8AAAAAAAAAAAAAAAAAAAAAkpKS//r6+v/5+fn/+fn5//j4+P/4+Pj/+Pj4//j4+P/39/f/9/f3//n5+f+SkpL/AAAAAAAAAAAAAAAAAAAAAJaWlv/7+/v/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/7+/v/lpaW/wAAAAAAAAAAAAAAAAAAAACZmZn//Pz8//v7+//7+/v/+/v7//v7+//7+/v/+fn5//b29v/19fX/+Pj4/5iYmP8AAAAAAAAAAAAAAAAAAAAAnJyc//39/f/8/Pz//Pz8//z8/P/8/Pz//Pz8//f39//u7u7/6+vr/+/v7/+enp7/AAAAAAAAAAAAAAAAAAAAAJ+fn//9/f3//f39//39/f/9/f3//f39//39/f/39/f/xMTE/8TExP/Jycn/ra2t/wAAAAAAAAAAAAAAAAAAAAChoaH//v7+//39/f/9/f3//f39//39/f/9/f3/+fn5/8nJyf/z8/P/s7Oz/9LS0v8AAAAAAAAAAAAAAAAAAAAApKSk///////+/v7//v7+//7+/v/+/v7//v7+//39/f/Pz8//tra2/83Nzf8AAAAAAAAAAAAAAAAAAAAAAAAAAMTExP+mpqb/pqam/6ampv+mpqb/pqam/6ampv+mpqb/t7e3/9bW1v8AAAAAAAAAAAAAAAAAAAAAwAOsQcADrEHAA6xBwAOsQcADrEHAA6xBwAOsQcADrEHAA6xBwAOsQcADrEHAA6xBwAOsQcADrEHAB6xBwA+sQQ%3D%3D%0Adata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAb3vj/wAk2f8AK9n/ACvZ/wAr2f8AMNv/ADPb/wAw2/8AMNv/ADTe/wA33v8ANN7/ACze/2h56P8AAAAAb3vj/wA73v8ASOP/AEDg/wA73v8AROP/AFDm/wBR6P8ASOP/AETj/wBM5v8AWej/AFXo/wBI4/8AO97/aHno/wAk1v8AQOP/d5Xm/9HX6P+WpeP/ADPb/wBE4/+EoOP/19rg/36V3v8AQOD/KWfj/9PW2//Fy9v/AEDg/wAs3v8AKNn/AEDj/93g7f/t7e3/6+vr/wA33v8EQ+D/qrrj/+Pj4/9th97/AETj/0Z74//e3t7/v8fe/wBA4P8ANN7/ACjZ/wBA4/+YsOv/6+vt/7XD6P8HROD/OWbj/9/g5v/h4ub/PGTe/wBI4/9tkuP/3t7e/6Cv3v8AQOD/ADTe/wAo2f8JR+P/AEDj/wBA4P8HROD/FEre/7O+6P/o6Oj/qLbj/wlG4P8FS+P/rLzj/+Dg4P9vi97/AEjj/wA03v8AKNn/LmPo/wlC4P8CNd7/PF/e/7fA6P/t7e3/1dro/zZj4P8AROP/RnXj/97e4//V2eD/MV/e/wBI4/8ANN7/ACjZ/1qE7f+ou+3/vsft/+vs8P/w8PD/2Nzr/0934/8AROP/FE/j/7PA4//m5ub/lqjg/wRG4P8ATOb/ADTe/wAo2f9che3/9fTy//Xy8//t7vL/ucbt/0x35v8HReP/B0Tg/4+j4//o6Oj/1dnm/y1d4P8ASOP/AEzm/wA03v8AJ9b/ZIjt/7bG8v+jt/D/gJ3t/1uC6/9PeOj/T3Xo/6Cx6P/r6+v/6Ojr/2uJ4/8OTuP/CU/m/wdS6P8AMN7/ACfW/2uN7f9kiO3/Vnro/09z6P9Kb+j/e5Po/8zT7f/w7+3/7evt/5Ko6P9Dcuj/P3br/zty6/82b+v/ADDb/wAn1v9vke3/gJvt/4GY6/+Yqe3/x87w//Ly8v/y8vL/5Obw/42k6/9LeOv/Snvt/0R56/9CdOv/PXTr/wAw2/8AJNb/dZbw//X19//6+Pf/9/X1//f29f/t7vL/vcnw/3WV6/9VgO3/U4Ht/05+7f9Ke+3/RHbr/z1x6/8ALNv/ACDU/32Z8P/t8Pf/5ur1/87W9f+vwPD/gp/t/2aK7f9ki+3/X4ft/1iC7f9Tge3/S3vr/0Z46/9Ccuv/ACjZ/3F54/+Fmu3/lKvy/5Gr8v+PqfL/jajy/4qo8v+FpPL/gaHw/32d8P96nPD/dZjw/3OW8P9rkO3/Z4br/2974/8AAAAAcXnj/wAg1P8AJNb/ACfW/wAn1v8AJ9b/ACfW/wAo2f8AKNn/ACjZ/wAo2f8AKNn/ACTW/2974/8AAAAAgAGsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBgAGsQQ%3D%3D%0Adata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////7b///+J8P//f+v//4fw///N//////////////+Dslb/brQ6/3m2PP96tjr/drU6/3u0Ov8AAAAA/////5nx//9G4f//UOv//0/s//9V7f//WOT//7b+////////8f/j/2uwPf91vTv/ebw9/3i3Ov94tDr/fbM6//////9V3P//SvP//0bz//9J7///Sez//1Xt//9p5f////////////+Ev1f/c8A6/3u/PP92wDr/ero8/3e1Ov//////ceD//zru//88////RP3//0P4//865P//hOr/////////////j8tf/27DOv91xzr/d8A6/327P/94tzv///////////9y6v//ROr//zrv//886P//ZOP//////////////////3nAR/9zyjr/dsY9/3fDPP94vzr/eLs6///14P/////////////////q////0P///////////////////6fgg/9kxzv/cs06/3XKOv9zxTz/dsI6/3a/Ov/Ig1z/15hy/+y4kP/6yqj//////////////////////6XigP9nxzv/dtA6/3XNOv91zTr/d8k6/3fEOv93vjr/3JNh/96PVv/YhEL/0oJL/////////////////4vUYP9nzjr/c9E8/3XRPP9yzjr/dcw8/3fJO/93xTz/csM6/+KQT//WiUr/4Kl8//jcvv//////////////+f9ZsTz/b9U6/3HTOv9x1Dr/ds47/3bOO/9yyTr/d8U7/3jBO//ZmGH///jm//////////////na////////////0/K//2a8Ov911D3/dNI9/3HQOv9z0Dr/dMs7/3nNOv98wTv/////////////////76Zi//WOOv/zl0j////z///////V69P/WqpX/3HPOv930D3/dc06/3DDQ/9nn3T/SWXE/////////////+O8//ONOv//nj7/95I8///Kk////////////2Jj//9AU/z/S2Dr/0ta8P8/Sv//Ojz//zo7//////////////i2df//lzz//6A8//6UPP//yJH///////////+Kjf//Pjr//zo7//89Ov//Ojv//zo6//89PP/////////////wpl7//506//+gOv/7kzr//+m9////////////gID//zs6//86Pf//Ozv//z06//86O///Ojr/////////////8r2K//OROv//nTz/9pxI/////////////////0RG//86Ov//PTv//zo7//86O///Pjr//zo8//8AAAAA///////////gmVr/24Y+///mwP///////////3R5/f86O///PDz//zo6//88Ov//Ojv//zo6//8AAAAAgAGsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBgAGsQQ%3D%3D%0Adata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAObm5rpTU8n/UFC6/2ZSUv+tra3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5ubmuoKCgv9VVeb/WVn//1lZ//9OTpH/oaGh/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALq6uv9OTpH/WVn//1lZ//9TU8n/VH/W/3V1df////8HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWVlZ/8nJyfrm5ua6Tk6R/1NTyf9ZWf//WVn//1lZ//9PT4L/urq6/////wcAAAAAAAAAAAAAAAAAAAAAAAAAAP///wdZWVn/UmZS/1VV5v9ZWf//WVn//1lZ//9ZWf//ZmZm/1FRdf+hoaH/urq6/39U1v9PgoL/1tbW4wAAAABZWVn/5ubmt2ZSUv9TU8n/WVn//1lZ//9ZWf//U1PJ/1NTyf9ZWf//WFj1/1NTyf9QUK3/urq6/1F1Uf+tra3/AAAAAHV1df9RUXX/VVXm/1lZ//9OTpH/U1PJ/1lZ//9ZWf//UFC6/05Okf9OTpH/urq6/39/rf9VVeb/UFCt/1lZWf/Jycn7VFTW/1lZ//9ZWf//UFC6/1lZ//9ZWf//WVn//09Pgv9mUlL/oaGh/1lZ//9ZWf//WVn//39/rf8AAAAAZlJS/05Okf9Zg///WVn//1RU1v9ZWf//WVn//1lZ//9QULr/VVXm/1lZ//9ZWf//WVn//1VV5v91dXX/WVlZ/8nJyfpZWVn/VVXm/1lZ//9ZWf//UFC6/1BQof9Zg///VVXm/1lZ//9ZWf//WFj1/1BQrf/m5ua6AAAAAAAAAABZWVn/WVlZ/1BQof9ZWf//WFj1/1mD//9VVeb/UFC6/4NZ//+hoaH/dXV1/1VV5v////8gAAAAAAAAAAAAAAAA1tbW41lZWf9QUKH/VVXm/1BQof9QULr/WYP//1BQuv9QUKH/dXV1/1JSZv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///9GgoKC/05Okf9ZWf//VVXm/1lZ//9QUK3/Tk6R/05Okf/m5ua6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wfJycn7dXV1/05Okf+CgoL/ycnJ+ubm5rf///8dAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//+sQfB/rEHAf6xBwD+sQQAfrEEAAaxBAACsQYAArEEAAKxBgACsQQABrEGAA6xBgA+sQcAPrEHgH6xB//+sQQ%3D%3D%0Adata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMyZmRDMmZkRzJmZD8yZmRHMmZkQAAAAAAAAAADMmZkSzJmZFMyZmRIAAAAAAAAAAAAAAAAAAAAAAAAAAMyZmSbMmZndzJmZ9cyZmfXMmZn3zJmZ4MyZmSPMmZkMzJmZ3MyZmfrMmZnezJmZEgAAAAAAAAAAAAAAAMyZmSbMmZndzJmZ/8yZmf/MmZn0zJmZ98yZmf/MmZndzJmZJMyZmfHMmZn/zJmZ9cyZmQ8AAAAAAAAAAMyZmQvMmZndzJmZ/8yZmf/MmZnYzJmZH8yZmSLMmZnizJmZ3MyZmSPMmZnszJmZ/8yZmezMmZkJzJmZCcyZmRHMmZkKzJmZ88yZmf/MmZnvzJmZIgAAAAAAAAAAzJmZEsyZmQ3MmZkLzJmZ7syZmf/MmZntzJmZOcyZmdnMmZn3zJmZB8yZmfDMmZn/zJmZ7syZmQwAAAAAAAAAAAAAAAAAAAAAzJmZD8yZmffMmZn/zJmZ8MyZmfTMmZn/zJmZ98yZmQfMmZnwzJmZ/8yZme7MmZkMAAAAAAAAAAAAAAAAAAAAAMyZmRDMmZngzJmZ3syZmTzMmZndzJmZ38yZmSLMmZkKzJmZ88yZmf/MmZnvzJmZIgAAAAAAAAAAzJmZEsyZmRIAAAAAzJmZEsyZmRAAAAAAzJmZEMyZmRIAAAAAzJmZC8yZmd3MmZn/zJmZ/8yZmdjMmZkfzJmZIsyZmeLMmZnjzJmZEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMmZkmzJmZ3cyZmf/MmZn/zJmZ9MyZmffMmZn/zJmZ5MyZmRMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMyZmSbMmZndzJmZ9cyZmfXMmZn3zJmZ4MyZmSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzJmZEMyZmRHMmZkPzJmZEcyZmRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//+sQf//rEHgx6xBwAOsQYADrEEAAKxBBgCsQQeArEEHgKxBBkmsQQA/rEGAP6xBwH+sQeD/rEH//6xB//+sQQ%3D%3D%0Adata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3po+/96aPv/emj7/3po+/96aPv/emj7/3po+/96aPv/emj7/3po+/96aPv/emj7/3po+/96aPv8AAAAA3po+/96aPv/dmT113Zk9Sd6aPknemj5J3po+Sd6aPknemj5J3po+Sd6aPknemj5J3po+Sd6aPm3emj7/3po+/96aPv/alDtt2JE5SdSMNSHRhzIY0YcyGNGGMhjQhTEV04kzFdWNNhXVjTYV2pQ6Fd6aPhremj5H3po+bd6aPv/emj7/2ZM6ZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANePNwnclzwN3po+HN6aPknemj7/3po+/9iROVUAAAAAmTMA/5kzAP+ZMwD/mTMA/wAAAACZMwD/mTMA/wAAAAAAAAAA2ZM6CN2ZPRnemj5J3po+/96aPv/XjzhJAAAAAAAAAACZMwD/mTMA/wAAAAAAAAAAmTMA/5kzAP8AAAAAAAAAANCGMgfZkzkY3po+Sd6aPv/emj7/1Y02SQAAAAAAAAAAmTMA/5kzAP8AAAAAAAAAAJkzAP+ZMwD/AAAAAAAAAAAAAAAA0YcyGNWNNknemj7/3po+/96aPkkAAAAAAAAAAJkzAP+ZMwD/AAAAAAAAAACZMwD/mTMA/5kzAP+ZMwD/AAAAAAAAAADQhTFJ3po+/96aPv/emj5JAAAAAAAAAACZMwD/mTMA/wAAAAAAAAAAmTMA/5kzAP8AAAAAmTMA/5kzAP8AAAAAy34tSd6aPv/emj7/1Y02SQAAAAAAAAAAmTMA/5kzAP8AAAAAAAAAAJkzAP+ZMwD/AAAAAJkzAP+ZMwD/AAAAAMt+LUnemj7/3po+/9WNNkkAAAAAAAAAAJkzAP+ZMwD/AAAAAAAAAACZMwD/mTMA/wAAAACZMwD/mTMA/wAAAADLfi1J3po+/96aPv/VjTZJAAAAAJkzAP+ZMwD/mTMA/5kzAP8AAAAAmTMA/5kzAP+ZMwD/mTMA/wAAAAAAAAAA0IUxSd6aPv/emj7/2JE4SQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANiROEnemj7/3po+/9qUO23YkThC1Is1GtKIMxnRhzMY0YczGNGHMxjRhzMY0YczGNGHMxjUijQY1483HdqUOkLemj5t3po+/96aPv/emj7/3po+bd6aPknemj5J3po+Sd6aPknemj5J3po+Sd6aPknemj5J3po+Sd6aPknemj5t3po+/96aPv8AAAAA3po+/96aPv/emj7/3po+/96aPv/emj7/3po+/96aPv/emj7/3po+/96aPv/emj7/3po+/96aPv8AAAAAgAGsQQAArEEAAKxBP+CsQSEwrEEzMKxBMzisQTMMrEEzJKxBMySsQTMkrEEhDKxBP/ysQQAArEEAAKxBgAGsQQ%3D%3D%0A%0A%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Отсутствует

 

№450507-08-2012 14:47:12

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 14.0

Re: Custom Buttons

okkamas_knife пишет

а в фф 3.6 к сожалению в табе не открывается, открывается обычный редактор

Там сразу две проблемы, как оказалось: если оставить оригинальный атрибут observes, то oncommand не отрабатывает, вообще. А без него сломаются кнопки, которые так или иначе клонируют меню. Но observes можно удалить, только тогда состояние кнопки не будет обновляться. Впрочем, в данном случае это не критично.
Вторая проблема в том, что вместо нормального объекта window обработчик события DOMContentLoaded получает обертку вокруг него.

Выделить код

Код:

const editId = "custombuttons-contextpopup-edit";
const editInTabId = editId + "-inTab";
var editInTab = document.getElementById(editInTabId);
if(editInTab)
    editInTab.parentNode.removeChild(editInTab);
var editItem = document.getElementById(editId);
editInTab = editItem.cloneNode(true);
editInTab.id = editInTabId;
editInTab.setAttribute("label", "Edit in tab…");
editInTab.setAttribute("oncommand", "editCustomButtonInTab();");
editInTab.removeAttribute("observes");
editItem.parentNode.insertBefore(editInTab, editItem.nextSibling);

window.editCustomButtonInTab = function() { // Should be global to work in cloned menus
    var btn = custombuttons.popupNode;
    if(!btn)
        return;
    var link = custombuttons.makeButtonLink("edit", btn.id);
    var cbService = Components.classes["@xsms.nm.ru/custombuttons/cbservice;1"]
        .getService(Components.interfaces.cbICustomButtonsService);
    var param = cbService.getButtonParameters(link);
    var editorUri = "chrome://custombuttons/content/editor.xul";
    if(cbService.mode & 64)
        editorUri += "?editorId=custombuttons-editor@" + cbService.getWindowId(document.documentURI) + ":" + btn.id;
    var tab = gBrowser.selectedTab = gBrowser.addTab(editorUri);
    var browser = tab.linkedBrowser;
    browser.addEventListener("DOMContentLoaded", function load(e) {
        var doc = e.target;
        if(doc.location != editorUri)
            return;
        browser.removeEventListener(e.type, load, false);
        var win = doc.defaultView;
        if(win.wrappedJSObject) // Firefox 3.6 and older
            win = win.wrappedJSObject;
        win.arguments = [param];
        var iconLink = doc.createElementNS("http://www.w3.org/1999/xhtml", "link");
        iconLink.rel = "shortcut icon";
        iconLink.href = "chrome://custombuttons-context/content/icons/default/custombuttonsEditor.ico";
        iconLink.style.display = "none";
        doc.documentElement.insertBefore(iconLink, doc.documentElement.firstChild);
    }, false);
};

Добавлено 07-08-2012 14:51:20

SendAbuse пишет

Только консоль ошибок там какая-то молчаливая

Можно поставить Console².
А так, там, вроде бы, javascript.options.showInConsole выставлено по умолчанию в false.

Отредактировано Infocatcher (07-08-2012 14:51:20)


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№450607-08-2012 15:18:52

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 14.0

Re: Custom Buttons

okkamas_knife
Новая версия работает и в новых, и в старых.
Просто удаление атрибута observes ломает шаманство для клонированных меню из custombutton.setContextMenuVisibility(). Хотя там только показ/скрытие делается, так что пункт меню будет просто всегда виден. К тому же, редактирование и так всегда доступно, вроде бы.


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№450707-08-2012 15:36:13

SendAbuse
Участник
 
Группа: Members
Зарегистрирован: 08-03-2012
Сообщений: 113
UA: Firefox 11.0

Re: Custom Buttons

seven.ap,  действительно, надо писать подробнее.
Однако, исходя из твоего скудного описания, рискну предположить:
Описанный тобой симптом может наблюдаться если ты вводишь
свой адрес в окне CustomButtons-редактора в поле   URL кнопки:  ,
чего делать не следует. Нужно править текст во вкладке  Код (C)  .

Имхо, не проще ли сделать обычную закладку ?

Отсутствует

 

№450807-08-2012 15:50:51

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 14.0

Re: Custom Buttons

С переходом на открытую ранее вкладку:

Выделить код

Код:

const editId = "custombuttons-contextpopup-edit";
const editInTabId = editId + "-inTab";
var editInTab = document.getElementById(editInTabId);
if(editInTab)
    editInTab.parentNode.removeChild(editInTab);
var editItem = document.getElementById(editId);
editInTab = editItem.cloneNode(true);
editInTab.id = editInTabId;
editInTab.setAttribute("label", "Edit in tab…");
editInTab.setAttribute("oncommand", "editCustomButtonInTab();");
editInTab.removeAttribute("observes");
editItem.parentNode.insertBefore(editInTab, editItem.nextSibling);

window.editCustomButtonInTab = function() { // Should be global to work in cloned menus
    var btn = custombuttons.popupNode;
    if(!btn)
        return;
    var link = custombuttons.makeButtonLink("edit", btn.id);
    var cbService = Components.classes["@xsms.nm.ru/custombuttons/cbservice;1"]
        .getService(Components.interfaces.cbICustomButtonsService);
    var param = cbService.getButtonParameters(link);
    var editorUri = "chrome://custombuttons/content/editor.xul";
    if(cbService.mode & 64)
        editorUri += "?editorId=custombuttons-editor@" + cbService.getWindowId(document.documentURI) + ":" + btn.id;

    // Search for already opened tab
    var rawParam = unwrap(param);
    var ws = Components.classes["@mozilla.org/appshell/window-mediator;1"]
        .getService(Components.interfaces.nsIWindowMediator)
        .getEnumerator("navigator:browser");
    while(ws.hasMoreElements()) {
        let gBrowser = ws.getNext().gBrowser;
        let tabs = gBrowser.tabs || gBrowser.tabContainer.childNodes;
        tabsLoop:
        for(let i = 0, l = tabs.length; i < l; ++i) {
            let tab = tabs[i];
            let win = tab.linkedBrowser.contentWindow;
            if(win.location != editorUri)
                continue;
            win = unwrap(win);
            if("arguments" in win && win.arguments.length) {
                let winParam = unwrap(win.arguments[0]);
                for(let p in rawParam)
                    if(!(p in winParam))
                        continue tabsLoop;
                for(let p in winParam)
                    if(!(p in rawParam))
                        continue tabsLoop;
                gBrowser.selectedTab = tab;
                return;
            }
        }
    }

    // Or open new tab
    var tab = gBrowser.selectedTab = gBrowser.addTab(editorUri);
    var browser = tab.linkedBrowser;
    browser.addEventListener("DOMContentLoaded", function load(e) {
        var doc = e.target;
        if(doc.location != editorUri)
            return;
        browser.removeEventListener(e.type, load, false);
        var win = unwrap(doc.defaultView);
        win.arguments = [param];
        var iconLink = doc.createElementNS("http://www.w3.org/1999/xhtml", "link");
        iconLink.rel = "shortcut icon";
        iconLink.href = "chrome://custombuttons-context/content/icons/default/custombuttonsEditor.ico";
        iconLink.style.display = "none";
        doc.documentElement.insertBefore(iconLink, doc.documentElement.firstChild);
    }, false);
};
function unwrap(o) {
    return o.wrappedJSObject || o; // Firefox 3.6 and older
}

А вот нужно ли искать открытые окна, я не знаю. Все равно оригинальная команда редактирования вкладки не ищет.
Если только ее переопределить.


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№450907-08-2012 17:57:16

SendAbuse
Участник
 
Группа: Members
Зарегистрирован: 08-03-2012
Сообщений: 113
UA: Firefox 11.0

Re: Custom Buttons

okkamas_knife,  глянуть то гляну, но ты же помнишь - moz'г... :)
Насчёт отдельной темы - полностью поддерживаю,
если осилишь - это будет круто!
[часто кнопкой удобнее чем лезть в закладки] - это да,
просто лично для меня нет понятия  "лезть в закладки".
Все закладки на панели, в папочках, и больше нигде с ними не встречаюсь.

Infocatcher,  спасибо за ссылки, действительно
вторая консоль хороша, и конечно спасибо за код
открытия CB-редактора во вкладке   -   высший пилотаж!
И не слушай okkamas_knife, любое обоснованное улучшение полезно.

Отсутствует

 

№451007-08-2012 20:01:50

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 14.0

Re: Custom Buttons

okkamas_knife пишет

надо просто отслеживать адрес не только среди окон но и среди табов.

Там есть такая тонкость, что много лишнего отслеживается типа загрузки about:blank при открытии вкладок и всяких там фреймов.
Хотя альтернатива тоже так себе: можно обрабатывать событие TabOpen и ждать загрузки документа в открытой вкладке. Но там есть один сюрприз: если по ссылке файл, и его перехватит менеджер загрузок, то событие load у документа никогда не произойдет. А обработчики, вроде как, рекомендуется снимать, чтобы сборщик мусора гарантированно отработал, так что понадобится какой-нибудь таймер приделывать.

Вот пример с первым вариантом:

Выделить код

Код:

addEventListener("load", function(e) {
    LOG("load: " + e.target.location);
    var doc = e.target;
    if(doc.location.href.substr(0, 41) != "chrome://custombuttons/content/editor.xul")
        return;
    alert("Opened CB editor!");
}, true, gBrowser);

Отредактировано Infocatcher (07-08-2012 20:02:29)


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№451107-08-2012 21:24:21

SendAbuse
Участник
 
Группа: Members
Зарегистрирован: 08-03-2012
Сообщений: 113
UA: Firefox 11.0

Re: Custom Buttons

okkamas_knife,  начнём с малого, попробовал доделать CustomIcons for CBE.
Проверь. ( это всё я делал до того, как прочёл пост Infocatcher'а, там скорее
похоже на первый вариант с полной корзиной отслеживания лишних событий,
альтернативный вариант сложен для меня...)
да, и [11 141] - я в шоке :O

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3ECustomIcons%20for%20CBE%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACPjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf/W1qf//////////////////////4+PEf////////////////////////////////+PjxH/j48R/4+PEf+PjxH///////////////////////////+PjxH/////////////////////////////////j48R/4+PEf+PjxH/j48R////////////j48R/4+PEf+PjxH/j48R/4+PEf+PjxH///////////+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf///////////4+PEf+PjxH/j48R/4+PEf+PjxH/j48R////////////j48R/4+PEf+PjxH/j48R/4+PEf+PjxH///////////+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf///////////4+PEf+PjxH/j48R/4+PEf+PjxH/j48R////////////j48R/4+PEf+PjxH/j48R/4+PEf+PjxH///////////+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf///////////////////////////4+PEf////////////////////////////////+PjxH/j48R/4+PEf+PjxH/1tan//////////////////////+PjxH/////////////////////////////////j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bconst%20%20thisButtonImageOn%20%3D%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACPjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf/W1qf//////////////////////4+PEf////////////////////////////////+PjxH/j48R/4+PEf+PjxH///////////////////////////+PjxH/////////////////////////////////j48R/4+PEf+PjxH/j48R////////////j48R/4+PEf+PjxH/j48R/4+PEf+PjxH///////////+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf///////////4+PEf+PjxH/j48R/4+PEf+PjxH/j48R////////////j48R/4+PEf+PjxH/j48R/4+PEf+PjxH///////////+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf///////////4+PEf+PjxH/j48R/4+PEf+PjxH/j48R////////////j48R/4+PEf+PjxH/j48R/4+PEf+PjxH///////////+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf///////////////////////////4+PEf////////////////////////////////+PjxH/j48R/4+PEf+PjxH/1tan//////////////////////+PjxH/////////////////////////////////j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/j48R/4+PEf+PjxH/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ%3D%3D%22%3B%0A%0Aconst%20thisButtonImageOff%20%3D%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACbm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P/JyfD//////////////////////5ub4P////////////////////////////////+bm+D/m5vg/5ub4P+bm+D///////////////////////////+bm+D/////////////////////////////////m5vg/5ub4P+bm+D/m5vg////////////m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D///////////+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P///////////5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg////////////m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D///////////+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P///////////5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg////////////m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D///////////+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P///////////////////////////5ub4P////////////////////////////////+bm+D/m5vg/5ub4P+bm+D/ycnw//////////////////////+bm+D/////////////////////////////////m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ%3D%3D%22%3B%0A%0Avar%20pattern%20%3D%20/chrome%3A%5C/%5C/custombuttons%5C/content%5C/editor.xul/%0Avar%20icons%20%3D%20this.Help.split%28%22%5Cn%22%29%3B%0A%0A//%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%0A%0Avar%20cbIdNumber%20%3D%20this.id.replace%28%22custombuttons-button%22%2C%20%22%22%29%3B%0A%0Avar%20prefs%20%3D%20Components.classes%5B%22@mozilla.org/preferences-service%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIPrefService%29%0A%20%20%20%20%20%20%20%20%20%20%20%20.getBranch%28%22custombutton.CustomIconsForCBEditor%5B%22%20+%20cbIdNumber%20+%20%22%5D.%22%29%0Athis.prefs%20%3D%20prefs%3B%0Atry%20%20%20%20%20%20%7B%20var%20off%20%3D%20prefs.getBoolPref%28%22off%22%29%3B%20%7D%0Acatch%28e%29%20%7B%20prefs.setBoolPref%28%22off%22%2C%20false%29%3B%20var%20off%20%3D%20false%20%7D%3B%0A%0Aif%20%28off%29%20%7B%20this.image%20%3D%20thisButtonImageOff%3B%0A%20%20%20%20%20%20%20%20%20%20%20/*this.checked%20%3D%20false%3B*/%20%20%20%20%20%20%20%20%20%20%20%20%20return%3B%20%7D%0A%20%20%20%20else%20%7B%20/*this.checked%20%3D%20true%3B*/%0A%20%20%20%20%20%20%20%20%20%20%20this.image%20%3D%20thisButtonImageOn%3B%20%7D%0A//---------------------------------------------------------------------------%0A%20%20%20%20prefs%20%3D%20Components.classes%5B%22@mozilla.org/preferences-service%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIPrefService%29%0A%20%20%20%20%20%20%20%20%20%20%20%20.getBranch%28%22custombutton.CustomIconsForCBEditor%5Ball%5D.%22%29%0A%0Atry%20%20%20%20%20%20%7B%20var%20hideStandardIcons%20%3D%20prefs.getBoolPref%28%22hideStandardIcons%22%29%3B%20%7D%0Acatch%28e%29%20%7B%20prefs.setBoolPref%28%22hideStandardIcons%22%2C%20false%29%3B%20var%20hideStandardIcons%20%3D%20false%20%7D%3B%0A%0A//%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%0A%0Afunction%20moveIcons%28aDoc%2C%20remove%29%20%7B%20%0A%0Avar%20menupopup%20%3D%20aDoc.getElementById%28%22image%22%29.firstChild%3B%0A%0A//-------------------------------------------------------------------%0A%0Afor%20%28var%20h%3D0%3B%20h%3C5%3B%20h++%29%20%7B%20%0A%0Avar%20mi%20%3D%20menupopup.children%5Bh%5D%3B%20if%20%28%21mi%29%20break%3B%0Avar%20val%20%3D%20mi.getAttribute%28%22value%22%29%3B%0Avar%20isStd%20%3D%20val.substring%280%2C%2022%29%20%3D%3D%20%22custombuttons-stdicon-%22%3B%0A%0Aif%20%28hideStandardIcons%20%26%26%20isStd%29%20mi.hidden%20%3D%20true%3B%0Aif%20%28%21hideStandardIcons%20%7C%7C%20%21isStd%29%20mi.hidden%20%3D%20false%3B%20%7D%0A%0A//------------------------------------------------------------------%0A%0Aif%20%28remove%29%20%7B%20%0A%0Avar%20count%20%3D%20menupopup.childElementCount%3B%0Avar%20itemsToRemove%20%3D%20%5B%5D%3B%0A%0Afor%20%28var%20i%3D1%3B%20i%3Cmenupopup.childElementCount%3B%20i++%29%20%7B%20%0A%0A%20%20if%20%28menupopup.children%5Bi%5D.getAttribute%28%22fromCusomIcons%22%20+%20cbIdNumber%29%29%20%7B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20itemsToRemove.push%28menupopup.children%5Bi%5D%29%3B%20%7D%7D%0A%0Afunction%20rem%28element%29%20%7B%20menupopup.removeChild%28element%29%3B%20%7D%0AitemsToRemove.forEach%28rem%29%3B%0A%0Areturn%3B%20%7D%0A%0A//--------------------------------------------------------------%0A%0Aconst%20%20kXULNS%20%3D%20%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%3B%0A%0Afor%20%28var%20i%3D0%3B%20i%3Cicons.length%3B%20i++%29%20%7B%20%20%0A%0Aif%20%28icons%5Bi%5D%20%3D%3D%20%22%22%29%20continue%3B%0A%0Avar%20%20menuitem%20%3D%20document.createElementNS%28kXULNS%2C%20%22menuitem%22%29%3B%0A%20%20%20%20%20menuitem.setAttribute%28%22label%22%2C%20icons%5Bi%5D%29%3B%0A%20%20%20%20%20menuitem.setAttribute%28%22value%22%2C%20icons%5Bi%5D%29%3B%0A%20%20%20%20%20menuitem.setAttribute%28%22src%22%2C%20icons%5Bi%5D%29%3B%0A%20%20%20%20%20menuitem.setAttribute%28%22fromCusomIcons%22%20+%20cbIdNumber%2C%20%22true%22%29%3B%0A%0Amenupopup.appendChild%28menuitem%29%3B%20%7D%0A%0A%7D%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%0Avar%20ww%20%3D%20Components.classes%5B%22@mozilla.org/embedcomp/window-watcher%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIWindowWatcher%29%3B%0A%20%20%20%20%20%20%20%20%20%0Afunction%20setForEachWin%28remove%29%20%7B%20%0A%0A%20%20var%20enumerator%20%3D%20ww.getWindowEnumerator%28%29%3B%0A%20%20var%20win%20%3D%20true%3B%0A%20%20while%20%28win%29%20%7B%20win%20%3D%20enumerator.getNext%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%21win%29%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20doc%20%3D%20win.document%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%21RegExp%28pattern%29.test%28doc.location.href%29%29%20continue%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28win.opener%20%21%3D%20window%29%20continue%3B%0A%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20moveIcons%28doc%2C%20remove%29%3B%20%20%7D%7D%0A%0A//%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%0A%0Avar%20oSvc%20%3D%20Components.classes%5B%22@mozilla.org/observer-service%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIObserverService%29%3B%0A%0Avar%20observer%20%3D%20%7B%20//%20thanks%20for%20Infocatcher%0A%0Aobserve%3A%20function%28subject%2C%20topic%2C%20data%29%20%7B%0A%20%20%20%20%20%20%20%20%20subject.addEventListener%28%22load%22%2C%20this%2C%20false%29%3B%20%7D%2C%0A%20%20%20%20%20%20%0AhandleEvent%3A%20function%28e%29%20%7B%0A%20%20%20%20var%20doc%20%3D%20e.target%3B%0A%20%20%20%20var%20win%20%3D%20doc.defaultView%3B%0A%20%20%20%20%20%20%20%20win.removeEventListener%28%22load%22%2C%20this%2C%20false%29%3B%0A%20%20%20%20if%20%28%21RegExp%28pattern%29.test%28doc.location.href%29%29%20return%3B%0A%0A%0A%20%20%20%20%20moveIcons%28doc%2C%20false%29%3B%0A%0A%20%20%7D%7D%0A%0A//%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%0A%0Afunction%20setForEachTab%28remove%29%20%7B%20%0A%0Avar%20tabContainer%20%3D%20gBrowser.mTabContainer%3B%0Avar%20tabs%20%3D%20tabContainer.childNodes%3B%0A%0Afor%20%28var%20t%20%3D%200%3B%20t%20%3C%20tabContainer.itemCount%3B%20t++%29%20%7B%0A%0Avar%20doc%20%3D%20tabs%5Bt%5D.linkedBrowser.contentDocument%3B%0Aif%20%28%21RegExp%28pattern%29.test%28doc.location.href%29%29%20continue%3B%0A%0AmoveIcons%28doc%2C%20remove%29%3B%20%20%7D%7D%0A%0A//-----------------------------------------------------------------------------------%0A%0Afunction%20alsoForTabs%28evt%29%20%7B%20var%20doc%20%3D%20evt.target%3B%0A%0A%20%20%20%20if%20%28%21RegExp%28pattern%29.test%28doc.location.href%29%29%20return%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20moveIcons%28doc%2C%20false%29%3B%20%7D%0A%0A//%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%0A%0A%20%20%20%20%20%20%20oSvc.addObserver%28observer%2C%20%22domwindowopened%22%2C%20false%29%3B%0A%20%20%20%20%20%20%20window.addEventListener%28%22DOMContentLoaded%22%2C%20alsoForTabs%2C%20false%29%0A%20%20%20%20%20%20%20setForEachWin%28false%29%3B%0A%20%20%20%20%20%20%20setForEachTab%28false%29%0A%0A//%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%0A%0Athis.onDestroy%20%3D%20function%28%29%20%7B%20setForEachWin%28true%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20setForEachTab%28true%29%3B%0A%0AoSvc.removeObserver%28observer%2C%20%22domwindowopened%22%29%3B%0A%0Awindow.removeEventListener%28%22DOMContentLoaded%22%2C%20alsoForTabs%2C%20false%29%20%7D%0A%20%20%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bthis.prefs.setBoolPref%28%22off%22%2C%20%21this.prefs.getBoolPref%28%22off%22%29%29%3B%0A%0Atry%20%7B%20this.onDestroy%28%29%3B%20%7D%20catch%28e%29%20%7B%7D%3B%0A%0Athis.init%28%29%3B%0A%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wD/AP8A/wD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wD/AP8A/wD/AP8A/wD/AP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8AAAD/AAAAAAAAAAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAAAP8A/wD/AP8A/wD/AP8A/wD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AP8A/wD/AP8A/wD/AP8A/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wD/AP8A/wD/AP8A/wD/AP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8A/wD/AP8A/wD/AP8A/wD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AP8A/wD/AP8A/wD/AP8A/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wD/AP8A/wD/AP8A/wD/AP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8A/wD/AP8A/wD/AP8A/wD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AP8A/wD/AP8A/wD/AP8A/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wD/AP8A/wD/AP8A/wD/AP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAA/n+sQfw/rEH4H6xB8A+sQeAHrEHAA6xBgAGsQfgfrEH4H6xB+B+sQfgfrEH4H6xB+B+sQfgfrEH4H6xB+B+sQQ%3D%3D%0Adata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/zAD//8wA///MAP//zAD//8wA///MAP//zAD/AAAAAAAAAAD/zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA/wAAAAAAAAAA/8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP8AAAAAAAAAAP/MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD/AAAAAAAAAAD/zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA/wAAAAAAAAAA/8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP8AAAAAAAAAAP/MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD/AAAAAAAAAAD/zAD//8wA///MAP//zAD//8wA///MAP//zAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/zAD//8wA///MAP//zAD//8wA///MAP//zAD/AAAAAAAAAAD/zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA/wAAAAAAAAAA/8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP8AAAAAAAAAAP/MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD/AAAAAAAAAAD/zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA/wAAAAAAAAAA/8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP8AAAAAAAAAAP/MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD//8wA///MAP//zAD/AAAAAAAAAAD/zAD//8wA///MAP//zAD//8wA///MAP//zAD/AYCsQQGArEEBgKxBAYCsQQGArEEBgKxBAYCsQf//rEH//6xBAYCsQQGArEEBgKxBAYCsQQGArEEBgKxBAYCsQQ%3D%3D%0Adata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBjP+TAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEj///NEX//3F9//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0gf//MEH//yg6//80Rf//fYn//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBjP//M0P//yg6//8oOv//KDr//zRF//90gf//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANrg/41UYv//M0T//yg6//8oOv//KDr//yg6//8oOv//MEH//0hX///W3P+NAAAAAAAAAAAAAAAAAAAAANbc/40xQv//LD3//ys8//8rPP//Kzz//ys8//8rPP//Kzz//ys8//8rPP//Kzv//9bc/40AAAAAAAAAAAAAAABBUP//MEP//zJF//8yRf//MkX//zJF//8yRf//MkX//zJF//8yRf//MkX//zFE//84SP//AAAAAAAAAAC0vP+NOUn//zxQ//88UP//PFD//zxQ//88UP//PFD//zxQ//88UP//PFD//zxQ//88UP//OEn//52n/40AAAAAl6H/jTpO//9GXf//Rl3//0Zd//9GXf//Rl3//0Zd//9GXf//Rl3//0Zd//9GXf//Rl3//zlN//97h/+NAAAAAKSt/40/Uf//UWr//1Fq//9Rav//UWr//1Fq//9Rav//UWr//1Fq//9Rav//UWr//1Fq//8+U///jpj/jQAAAADR1/+NNEb//1t2//9bdv//W3b//1t2//9Ycv//OUv//1hy//9bdv//W3b//1t2//9bdv//PU///7rC/40AAAAAAAAAAGZ0//9GXP//Y3///2N///9ge///QVT//4GN/404Sv//X3r//2N///9jf///Rlz//1xr//8AAAAAAAAAAAAAAAAAAAAAXGv//ztN//9AU///MEH//3yI/40AAAAAhJD/jTFC//9AU///OUr//1po///a4P+NAAAAAAAAAAAAAAAAAAAAAAAAAADDyv+Ntr7/jQAAAAAAAAAAAAAAAAAAAAAAAAAAtr7/jcrR/40AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//+sQf9/rEH+P6xB/B+sQfgPrEHgA6xBwAGsQcABrEGAAKxBgACsQYAArEGAAKxBwAGsQeCBrEHz56xB//+sQQ%3D%3D%0Adata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACPuI/88MFn/IhRD/yIUQ/8iFEP/IhRD/yIUQ/8iFEP/IhRD/yIUQ/8iFEP/IhRD/zwwWf8j6yP/AAAAAAAAAAA8MFn/I7Ij/yPiI/8j4iP/I+Ij/yPiI/8j4iP/I+Ij/yPiI/8j4iP/I+Ij/yPiI/8jsyP/PDBZ/wAAAAAAAAAAIhRD/yPbI/8juCP/I7gj/yO4I/8juCP/I7gj/yO4I/8juCP/I7gj/yO4I/8juCP/I9sj/yIUQ/8AAAAAAAAAACIUQ/8j1CP/I60j/yOOI/9mVlP/ZlZT/yOOI/8jjiP/ZlZT/2ZWU/8jjiP/I60j/yPUI/8iFEP/AAAAAAAAAAAiFEP/I84j/yOkI/9mVlP/3Nzc/9zc3P9mVlP/ZlZT/9zc3P/c3Nz/ZlZT/yOkI/8jziP/IhRD/wAAAAAAAAAAIhRD/yPJI/8jnCP/I4gj/2ZWU//c3Nz/3Nzc/9zc3P/c3Nz/ZlZT/yOII/8jnCP/I8kj/yIUQ/8AAAAAAAAAACIUQ/8jxSP/I5gj/yOYI/8jhiP/ZlZT/9zc3P/c3Nz/ZlZT/yOGI/8jmCP/I5gj/yPFI/8iFEP/AAAAAAAAAAAiFEP/I+sj/yPPI/8jzyP/I5wj/2ZWU////////////2ZWU/8jnCP/I88j/yPPI/8j6yP/IhRD/wAAAAAAAAAAIhRD/yPwI/8j1yP/I6Aj/2ZWU///////////////////////ZlZT/yOgI/8j1yP/I/Aj/yIUQ/8AAAAAAAAAACIUQ/8j8yP/I9wj/2ZWU////////////2ZWU/9mVlP///////////9mVlP/I9wj/yPzI/8iFEP/AAAAAAAAAAAiFEP/I/Yj/yPgI/8jpCP/ZlZT/2ZWU/8jpCP/I6Qj/2ZWU/9mVlP/I6Qj/yPgI/8j9iP/IhRD/wAAAAAAAAAAIhRD/yP4I/8j5CP/I+Qj/yPkI/8j5CP/I+Qj/yPkI/8j5CP/I+Qj/yPkI/8j5CP/I/gj/yIUQ/8AAAAAAAAAADwwWf8jvyP/I/sj/yP7I/8j+yP/I/sj/yP7I/8j+yP/I/sj/yP7I/8j+yP/I/sj/yO/I/88MFn/AAAAAAAAAAAj7iP/PDBZ/yIUQ/8iFEP/IhRD/yIUQ/8iFEP/IhRD/yIUQ/8iFEP/IhRD/yIUQ/88MFn/I+4j/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//+sQYABrEGAAaxBgAGsQYABrEGAAaxBgAGsQYABrEGAAaxBgAGsQYABrEGAAaxBgAGsQYABrEGAAaxB//+sQQ%3D%3D%0Adata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM/Pz3ShoaHco6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+hoaH/np6e/56env+enp7/nJyc/5mZmdzMzMx0AAAAAAAAAAChoaHcpqam/6urq/+tra3/ra2t/6urq/+rq6v/qKio/6ampv+jo6P/np6e/5ycnP+ZmZn/mZmZ3AAAAAAAAAAAo6Oj/6urq/+wsLD/tbW1/8zMzP/19fX////////////y8vL/x8fH/6Ghof+enp7/nJyc/5ycnP8AAAAAAAAAAKioqP+wsLD/tbW1/9vb2///////5ubm/8fHx//Hx8f/5ubm///////W1tb/np6e/56env+cnJz/AAAAAAAAAACrq6v/tbW1/9HR0f//////z8/P/7W1tf+ysrL/sLCw/6urq//Hx8f//////8TExP+hoaH/np6e/wAAAAAAAAAAsLCw/7i4uP/39/f/5ubm/7q6uv+4uLj///////////+tra3/qKio/+Pj4//y8vL/o6Oj/6Ghof8AAAAAAAAAALKysv+9vb3//////8/Pz/+6urr/uLi4////////////q6ur/6ioqP/CwsL//////6ampv+jo6P/AAAAAAAAAAC1tbX/vb29///////Pz8//urq6/7i4uP///////////6urq/+oqKj/wsLC//////+oqKj/pqam/wAAAAAAAAAAurq6/8LCwv/6+vr/4+Pj/7q6uv+4uLj///////////+rq6v/qKio/+Dg4P/19fX/q6ur/6ioqP8AAAAAAAAAAL29vf/ExMT/1tbW///////MzMz/uLi4/7W1tf+ysrL/ra2t/8TExP//////x8fH/62trf+oqKj/AAAAAAAAAAC/v7//zMzM/8fHx//b29v//////+Dg4P/Hx8f/xMTE/+Dg4P//////1tbW/62trf+tra3/qKio/wAAAAAAAAAAxMTE/9HR0f/MzMz/x8fH/9bW1v/6+vr////////////39/f/0dHR/7Kysv+ysrL/ra2t/6ampv8AAAAAAAAAAMnJydzZ2dn/0dHR/8nJyf/Hx8f/xMTE/8LCwv/CwsL/v7+//729vf+6urr/srKy/62trf+jo6PcAAAAAAAAAADg4OB0ycnJ3MLCwv+/v7//vb29/7q6uv+4uLj/uLi4/7W1tf+ysrL/srKy/62trf+oqKjc0dHRdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//+sQYABrEGAAaxBgAGsQYABrEGAAaxBgAGsQYABrEGAAaxBgAGsQYABrEGAAaxBgAGsQYABrEGAAaxB//+sQQ%3D%3D%0Adata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMWM7ADJmogA0aOMANGn/ADVq/wA1av8ANGnrADNnvwAyZXsAMWMfAAAAAAAAAAAAAAAAAAAAAAAAAAAAMmZvATdt/zZ0of9jpcv/fcDi/4PF5f+Exub/cbLW/1WUvf8rZpb/ATZr+wAyZYcAMGEEAAAAAAAAAAAANGsjADdv+1mcxP+Axeb/frzZ/3210P99ss3/fbLO/3630/+HxeT/hMfo/2Wpzv8KQnf/ADNojwAAAAAAAAAAADpzYCJglP9/xOb/VoGt/yY3d/8tP4H/Kjl+/zZJiP8nNnf/LkF7/12Irf9/weL/XaDI/wA3b/sAM2kQAAAAAAAxZGc3eKr/gsbn/01upf+Vz+3/odjz/6fc9f+p3fb/pdr0/4m73v8+WJX/WIOx/3/E5v8JRX7/ADlyHwAkSiAHMlfzIF+U/4XI6P+Rz+3/k8rj/05vc/+cx9r/tOP6/32ls/+bz+j/l9Lv/2qbx/+Axeb/B0WB+wA3cRAAKlWPJ2CD/wA1av94udz/kc/t/1GDf/8FJgX/Wnx8/3Gamf8AHAD/VXuB/5fS7/+MzOv/V5rF/wQ4Z/8AIkZTBDVky0GBpv8AOnX/bq/S/4/N6/9gmI3/XH1c/12Khv9mmIv/TW5N/017d/+V0e7/iMfm/xFKfv8jXIH/ASpTsgU7b9thpcj/AECA/22x1/+Ky+r/hcPX/0+MfP+a0ej/hL7F/z51VP+Cu83/js3r/36+3v8DPnj/Onif/wo7aN8AOnSmHluP/wNFhv9KkcL/g8fn/4vL6/+Sz+3/iMXn/5XQ7v+U0e7/j83s/4fJ6f9coMv/A0KA/2GlyP8CN2rLADt3FAA/fXgAQYN/Dleb/3C33f+Cxuf/fb/j/x5oqv9Plcf/icrq/4XI6P9+w+X/HmWj/w1Mh/8hXpH/ADdwgwAAAAAAAAAAAAAAAABIka8IU5v/H2qr/wdRmf8ATJf/AU6a/0OLwf9Xn83/IGqp/wBGjcMAPXxbADt3gwA5dAwAAAAAAAAAAAAAAAAARo0MAEmTqwBMlv8ASZL/ADt2/wA6dP8AQoT/AEqT/wBFiv8APn6LAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASJJbAEyX5wBLlf8APXv/ADt2/wA9fP8ARYuPAESJvwA/gCMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHkAgATJdbAEmTvwBDhv8APnz/AD9/ogAAAAAAPXwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASJAbAEWLbwBBgsMAPXwIAAAAAAAAAAAAAAAA4AesQcABrEGAAaxBgACsQYAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEHgAKxB4AesQfgDrEH8C6xB/4esQQ%3D%3D%0Adata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABjY9//RUXb/xsb5f8FBeH/BQXh/wUF4f8FBeH/BQXh/wgI1v8ICNb/CAjW/wgI1v8ICNb/CgrM/xIS1P81Ncv/JSXj/5qa+v+amvr//////////////////////////////////////////////////////2Nj3/9jY9//EhLU/w0N6f+lpf//Y2P///////9DQ+f/Q0Pn/0ND5/9DQ+f/Q0Pn/0ND5/9DQ+f/Q0Pn//////9BQfH/Y2Pf/woKzP8NDen/paX//2Nj////////s7Pp/7Oz6f+zs+n/s7Pp/7Oz6f+zs+n/s7Pp/7Oz6f//////S0vv/2tr5/8ICNb/DQ3p/6Wl//9jY////////0ND5/9DQ+f/Q0Pn/0ND5/9DQ+f/Q0Pn/0ND5/9DQ+f//////0tL7/9ra+f/CAjW/w0N6f+trf//Y2P///////////////////////////////////////////////////////9JSfn/c3Pv/wgI1v8NDen/ra3//2Nj//9jY///Y2P//2Nj//9jY///Y2P//1NT9/9TU/f/U1P3/1NT9/9TU/f/U1P3/3Nz7/8ICNb/DQ3p/7q6/P9jY///Y2P//2Nj//9jY///Y2P//2Nj//9jY///U1P//1NT9/9TU/f/U1P3/1NT9/97e/f/CAjW/w0N6f+/v///Y2P//2Nj//9jY///Y2P//2Nj//9jY///Y2P//1NT//9TU/f/U1P3/1NT9/9TU/f/hob0/wUF4f8NDen/v7///2Nj//9BQfH/QUHx/0FB8f9LS+//S0vv/0tL7/9BQfH/QUHx/0FB8f9BQfH/U1P3/4aG9P8FBeH/DQ3p/8fH//9jY////////////////////////////////////////////////////////1NT//+Pj/3/BQXh/w0N6f/Hx///Y2P/////////////QUHx//////////////////////////////////////9jY///mpr6/wUF4f8bG+X/x8f//2Nj/////////////0FB8f//////////////////////////////////////Y2P//7q6/P8FBeH/JSXj/8fH//9jY/////////////9BQfH//////////////////////////////////////62t//+trf//Gxvl/1lZ4f/Hx///x8f///////////////////////////////////////////////////////+trf//QUHx/4OD1/95edn/Y2Pf/y8v4f8bG+X/DQ3p/w0N6f8NDen/DQ3p/w0N6f8NDen/DQ3p/w0N6f8bG+X/Ojre/5ub0f8AAAAAAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAAGsQQ%3D%3D%0Adata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAABILAAASCwAAAAAAAAAAAAAAVrh+AFa45wBWuP8AVrj/AFa4/wBWuP8AVrj/AFa4/wBWuP8AVrj/AFa4/wBWuJb///8A////AABs5gAAbOYABVq55wBq4v8AbOb/AGzm/wBs5v8AWub/AFnm/wBe5v8Aa+b/AGzm/wBs5v8DYMj/BVq5e////wAAbOYAAGzmAAxfuv8Acen/AHHp/wBx6f9gpvH/8/j+/+31/f9Fl+//AGHp/wBx6f8Acen/AW/k/wxgvP8MX7oPAHHpAABx6QAUZb3/AHft/wB37f8Geu3/9vr+/4G89v+Nwvf/5/L9/wBo7f8Ad+3/AHft/wB37f8LbdT/FGW9igB37QAAd+0AHWzA/wB/8v8Af/L/AH/y/wB/8v8Af/L/eLv4//////8AdfL/AH/y/wB/8v8Af/L/AX7w/xpuxf8dbMA8AH/yACZ0w/8Ah/f/AIf3/wCH9/8Ah/f/AIf3/3i/+///////AIP3/wCH9/8Ah/f/AIf3/wCH9/8NgOX/JnTDpQCH9wAxfMf/AJD7/wCQ+/8AkPv/AJD7/wCQ+/94xP3//////wCQ+/8AkPv/AJD7/wCQ+/8AkPv/AJD7/yWB0/8xfMdmO4XM/wCX/v8Al/7/AJf+/wCX/v8Al/7/eMj+//////8Al/7/AJf+/wCX/v8Al/7/AJf+/wCX/v8LlPX/O4XMz0aO0P8In///CJ///wif//8In///CJ///3zM////////CJ///wif//8In///CJ///wif//8In///FJz2/0aO0M9Rl9X/jdP///////////////////////////////////////////////////////+N0///Gab//0Sb3/9Rl9VmW6DZ/2bE////////////////////////////////////////////////////////ZsT//z2p8v9boNmlLa7/AGWo3v9Ctf//0+7/////////////////////////////////////////////0+7//0S0/f9hqeH/ZajePEK1/wBur+L/Vbv//2PB///Z8P//////////////////////////////////2fD//2PB//9itfD/bq/iilW7/wBVu/8Adrbl/2vE//9rxP//a8T//6bc///X7///8fn////////X7///ptz//2vE//9swvz/drbm/3a25Q9rxP8Aa8T/AHy86OSLz/3/jdH//43R//+N0f//jdH//63e///R7f//jdH//43R//+N0f//gsPw/3y86Hj///8AjdH/AI3R/wCBwOp7gcDq5IHA6v+BwOr/gcDq/4HA6v+BwOr/gcDq/4HA6v+BwOr/gcDq/4HA6pb///8A////AI3R/wCN0f8AAA8AAAAHAAAAAwAAAAMAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAMAAAADAAAABwAAAA8AAA%3D%3D%0Adata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMAAAATAAAAEwAAABMAAAATAAAAAAAAAAAAAAAAAAAAEwAAABMAAAATAAAAEwAAAAAAAAAAAAAAAAAAAL8AAADEAAAAxgAAAMYAAADGAAAAEwAAAAAAAAAAAAAAvwAAAMQAAADGAAAAxgAAABMAAAAAAAAAAAAAAAAAAAC/wP/M/wD/AP8A/wD/AAAAxgAAABMAAAATAAAAEwAAAMQA/wD/J/9U/wAAAMYAAAATAAAAAAAAAAAAAAAAAAAAv6b/wP+m/8D/VP+G/wAAAMYAAADGAAAAxgAAAMYAAADGAP8A/wD/Lf8AAADGAAAAEwAAABMAAAATAAAAAAAAAL8AAAC/AAAAvwDzAP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AAAAxgAAAMYAAADGAAAAEwAAAAAAAAAAAAAAAAAAAL8A4AD/APMA/wDzAP8A8wD/APMA/wDzAP8A8wD/AP8A/wD/AP8A/wD/AAAAxgAAABMAAAAAAAAAAAAAAAAAAAC/AMwA/wDgAP8A4AD/AOAA/wDgAP8A4AD/AOAA/wDgAP8A4AD/AP8A/wAAAMYAAAATAAAAAAAAAAAAAAATAAAAxACzAP8AzAD/AMwA/wDMAP8AzAD/AMwA/wDMAP8A/wD/AP8A/wD/AP8AAADEAAAADwAAAAAAAAC/AAAAxAAAAMYAoAD/ALMA/wCzAP8AswD/ALMA/wCzAP8AswD/AP8A/wAAAMYAAADEAAAAkQAAAAAAAAAAAAAAvwD/R/8A/0f/AP9H/wCgAP8AoAD/AKAA/wCgAP8AoAD/AKAA/wD/AP8AAADGAAAAEwAAAAAAAAAAAAAAAAAAAL8A/zT/AIYA/wCGAP8AhgD/AIYA/wCGAP8AhgD/AIYA/wCGAP8A7AD/AAAAxgAAABMAAAAAAAAAAAAAAAAAAAC/AP8g/wD/IP8A/yD/AP8g/wD/IP8AegD/AP8g/wD/IP8A/yD/AP8A/wAAAMQAAAATAAAAAAAAAAAAAAAAAAAAvwAAAL8AAAC/AAAAvwAAAL8A/w3/AGcA/wD/Df8AAADGAAAAxAAAAL8AAAC/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC/APMA/wDzAP8A8wD/AAAAxAAAABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkQAAAL8AAAC/AAAAvwAAAL8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwcOsQYGDrEGAA6xBgACsQYAArEHgAKxB4ACsQcAArEGAAaxBgAOsQYADrEGAA6xBgAesQfgfrEH4P6xB//+sQQ%3D%3D%0Adata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAGABoAwAAFgAAACgAAAAQAAAAIAAAAAEAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADo6OjZ2dnm5uYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADZ2dmmpqa4uLjj4+Po6Ojm5ubw8PAAAAAAAAAAAAAAAAAAAAAAAAAAAADm5ubj4+Pb29v39/d6enqMjIyUlJScnJzMzMwAAAAAAADw8PDj4+Po6Ojj4+O6urrR0dGjo6Po6Ojwd2z85+b////////////MzMwAAAAAAADe3t64uLiysrKtra2hoaH19fV1dHTo6OjtWU7wZVvyiID3t7Lo6OjZ2dkAAAAAAADw8PD19fW6urrCwsLa9+L///+MjIzMfHboU0jtVErtVEr///+AgIDZ19cAAAAAAADo6Oj///9s4Imk67ZD2Wn///9ua2tzUVCtPDTZTUPoU0jwx8XZ2dm6uroAAAAAAADo6Oj8/PxD2WlD2WlD2Wmk67b///+Pj4+AMi2yS0TMfHbJjone3t66uroAAAAAAADR0dH///9D2WlD2WlD2WlD2WmM5qL///+1sLBua2uMjIvb29u6urro6OgAAAAAAADg4OCo7bqX6KuF5p1D2Wn///+6urp7YNvRxvf////Dtffm5ubCwsIAAAAAAAAAAAAAAAAAAAAAAAAAAABi3oHw8PCysrJ0U+1tSu15WfC3pveysrLMzMwAAAAAAAAAAAAAAAAAAAAAAADo6Oj////U1NSTf9ttSu1tSu1tSu3TyPp1dHSysrIAAAAAAAAAAAAAAAAAAAAAAAAAAADo6Ojw8PD39/eBYvBtSu1tSu15WfD///+cnJzm5uYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADm5ua9rfeXfvL////////////m5ubo6OgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADw8PD////////Pz8/o6Ojw8PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg4ODt7e0AAAAAAAAAAAAAAAAAAAAAAAD+P6xB/gOsQfgDrEEAA6xBAAOsQQADrEEAA6xBAAOsQQADrEEAB6xB8AesQeAHrEHwA6xB/AOsQfwPrEH/P6xB%0A%0A%0Adata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADzYUL/82FC//NhQv/zYUL/82FC//NhQv/zYUL/82FC//NhQt/zYUKf82FCQAAAAAAAAAAAAAAAAAAAAAAAAAAA82FC//RrTv/2iXH/9olx//aJcf/2iXH/73NW/+lePP/wYED/82FC//NhQv/zYUKv82FCEAAAAAAAAAAAAAAAAPNhQv/1h3D//83M///NzP//zcz//83M///NzP//zcz//83M//CkkP/uXz//82FC//NhQs/zYUIQAAAAAAAAAADzYUL/8oRt///NzP//zcz//83M///NzP//zcz//83M///NzP//zcz//83M/+18Yf/zYUL/82FCzwAAAAAAAAAA82FC/++Bav//zcz//83M///NzP//zcz//83M///NzP//zcz//83M///NzP//zcz/7GhJ//NhQv/zYUJgAAAAAPNhQv/0hm///83M/8xmZv//zcz//83M///NzP//zcz/zGZm///NzP//zcz//83M///NzP/zYUL/82FCvwAAAADzYUL/9olx///NzP/MZmb/zGZm///NzP//zcz//83M/8xmZv/MZmb//83M///NzP//zcz/7l8///NhQv8AAAAA82FC//aJcf//zcz/zGZm/8xmZv/MZmb//83M///NzP/MZmb/zGZm/8xmZv//zcz//83M/+xoSf/zYUL/AAAAAPNhQv/2iXH//83M/8xmZv/MZmb/zGZm/8xmZv//zcz/zGZm/8xmZv/MZmb/zGZm///NzP/vc1b/82FC/wAAAADzYUL/9olx///NzP/MZmb/zGZm/8xmZv//zcz//83M/8xmZv/MZmb/zGZm///NzP//zcz/7l8///NhQv8AAAAA82FC//aJcf//zcz/zGZm/8xmZv//zcz//83M///NzP/MZmb/zGZm///NzP//zcz//83M//NhQv/zYULPAAAAAPNhQv/2iXH//83M/8xmZv//zcz//83M///NzP//zcz/zGZm///NzP//zcz//83M/+pmR//zYUL/82FCYAAAAADzYUL/9olx///NzP//zcz//83M///NzP//zcz//83M///NzP//zcz//83M/+t5Xv/zYUL/82FCzwAAAAAAAAAA82FC//aJcf//zcz//83M///NzP//zcz//83M///NzP//zcz/8KSQ/+5fP//zYUL/82FCz/NhQhAAAAAAAAAAAPNhQv/0a07/9olx//aJcf/2iXH/9olx/+9zVv/pXjz/8GBA//NhQv/zYUL/82FCv/NhQhAAAAAAAAAAAAAAAADzYUL/82FC//NhQv/zYUL/82FC//NhQv/zYUL/82FC//NhQt/zYUKf82FCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+sQQAHrEEAA6xBAAOsQQABrEEAAaxBAAGsQQABrEEAAaxBAAGsQQABrEEAAaxBAAOsQQADrEEAB6xBAB+sQQ%3D%3D%0Adata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPNhQkDzYUKf82FC3/NhQv/zYUL/82FC//NhQv/zYUL/82FC//NhQv/zYUL/AAAAAAAAAAAAAAAA82FCEPNhQr/zYUL/82FC//BgQP/pXjz/73NW//aJcf/2iXH/9olx//aJcf/0a07/82FC/wAAAAAAAAAA82FCEPNhQs/zYUL/7l8///CkkP//zcz//83M///NzP//zcz//83M///NzP//zcz/9olx//NhQv8AAAAAAAAAAPNhQs/zYUL/63le///NzP//zcz//83M///NzP//zcz//83M///NzP//zcz//83M//aJcf/zYUL/AAAAAPNhQmDzYUL/6mZH///NzP//zcz//83M///NzP//zcz//83M///NzP//zcz//83M///NzP/2iXH/82FC/wAAAADzYULP82FC///NzP//zcz//83M///NzP/MZmb//83M///NzP//zcz//83M/8xmZv//zcz/9olx//NhQv8AAAAA82FC/+5fP///zcz//83M///NzP/MZmb/zGZm///NzP//zcz//83M/8xmZv/MZmb//83M//aJcf/zYUL/AAAAAPNhQv/vc1b//83M///NzP/MZmb/zGZm/8xmZv//zcz//83M/8xmZv/MZmb/zGZm///NzP/2iXH/82FC/wAAAADzYUL/7GhJ///NzP/MZmb/zGZm/8xmZv/MZmb//83M/8xmZv/MZmb/zGZm/8xmZv//zcz/9olx//NhQv8AAAAA82FC/+5fP///zcz//83M/8xmZv/MZmb/zGZm///NzP//zcz/zGZm/8xmZv/MZmb//83M//aJcf/zYUL/AAAAAPNhQr/zYUL//83M///NzP//zcz/zGZm/8xmZv//zcz//83M///NzP/MZmb/zGZm///NzP/0hm//82FC/wAAAADzYUJg82FC/+xoSf//zcz//83M///NzP/MZmb//83M///NzP//zcz//83M/8xmZv//zcz/74Fq//NhQv8AAAAAAAAAAPNhQs/zYUL/7Xxh///NzP//zcz//83M///NzP//zcz//83M///NzP//zcz//83M//KEbf/zYUL/AAAAAAAAAADzYUIQ82FCz/NhQv/uXz//8KSQ///NzP//zcz//83M///NzP//zcz//83M///NzP/1h3D/82FC/wAAAAAAAAAAAAAAAPNhQhDzYUKv82FC//NhQv/wYED/6V48/+9zVv/2iXH/9olx//aJcf/2iXH/9GtO//NhQv8AAAAAAAAAAAAAAAAAAAAAAAAAAPNhQkDzYUKf82FC3/NhQv/zYUL/82FC//NhQv/zYUL/82FC//NhQv/zYUL/+ACsQeAArEHAAKxBwACsQYAArEGAAKxBgACsQYAArEGAAKxBgACsQYAArEGAAKxBwACsQcAArEHgAKxB+ACsQQ%3D%3D%0A%0A%0Adata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALOzs/9NTU3/gICA/4CAgMaBgYGygICAoICAgI2AgIB6fn5+Z4ODg1SAgIBCgoKCL4SEhBtxcXEJAAAAAAAAAABoaGj/+/v7/01NTf+AgID/s7OzvLKysqO1tbWJsrKycbGxsVixsbE+s7OzJaqqqgwAAAAAAAAAAAAAAAAAAAAAw8PD/2lpaf/5+fn/TU1N/4CAgP/Ly8vLy8vLnsvLy3HOzs5D0dHRFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDw8P/cXFx/+/v7/9NTU3/gICA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMXFxf95eXn/5OTk/01NTf+AgID/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx8fH/4KCgv/Z2dn/TU1N/4CAgP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADJycn/iYmJ/87Ozv9NTU3/TU1N/01NTf9NTU3/TU1N/05OToAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMvLy/+Ghob/x8fH/7Ozs/+zs7P/s7Oz/7Ozs/9NTU3/Tk5OgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjY2N/8fHx//Hx8f/gICA/01NTf+zs7P/s7Oz/01NTf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJOTk//Hx8f/hYWF/01NTf8AAAAAgICA/7Ozs/92dnb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACbm5v/x8fH/01NTf8AAAAAAAAAAAAAAACAgID/gICA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoaGh/8fHx/+AgID/TU1N/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMjIz/s7Oz/4CAgP9NTU3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJSUlP+UlJT/lJSU/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//+sQYABrEGAB6xBgB+sQcH/rEHg/6xB8H+sQfgDrEH8AaxB/gGsQf4RrEH+OaxB/h+sQf8PrEH/j6xB//+sQQ%3D%3D%0Adata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///Ozv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA///Ozv//AAD//wAAAAAAAAAAAAAAAAAAAAAAAP//zs7//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//zs7//wAA//8AAAAAAAAAAAAAAAAAAAAAAAD//87O//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//87O//8AAP//AAAAAAAAAAAAAAAAAAAAAAAA///Ozv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA///Ozv//AAD//wAAAAAAAAAAAAAAAAAAAAAAAP//zs7//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//zs7//wAA//8AAAAAAAAAAAAAAAAAAAAAAAD//87O//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//87O//8AAP//AAAAAAAAAAAAAAAAAAAAAAAA///Ozv//zs7//87O///Ozv//zs7//87O///Ozv//zs7//87O///Ozv//AAD//wAAAAAAAAAAAAAAAAAAAABaWv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//2lp//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/gID//83M///NzP//zcz//83M///NzP//zcz//4CA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/4CA//+sq///gID//8DA///Cwf//gID//6yr//+AgP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+AgP/wvr3/8L69//DBwP/wvr3/8L69//C+vf//gID/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/gID/wIKB/wAAAP+yj47/wJua/wAAAP/AgoH//4CA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/4CA/8iLi/8AAAD/vJeW/8ihoP8AAAD/yIuL//+AgP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+AgP/wvr3/8L69//C+vf/wvr3/8L69//C+vf//gID/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/gID//83M///NzP//zcz//83M///NzP//zcz//4CA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7W5u//+AgP//gID//4CA//+AgP//gID//4CA//Bxcf8AAAAAAAAAAAAAAAAAAAAAwAOsQcADrEHAA6xBwAOsQcADrEHAA6xBwAOsQcADrEHwD6xB8A+sQfAPrEHwD6xB8A+sQfAPrEHwD6xB8A+sQQ%3D%3D%0Adata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////YP///8D/////////////////////////wP///2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8g////0M/gv/+Hsl////////////+30Z//P4UA/3qrT//P4L//////0P///yAAAAAAAAAAAAAAAAD///8g////8JO6b/8/hQD/n8J/////////////VpQf/z+FAP8/hQD/P4UA/5O6b//////w////IAAAAAAAAAAA////0JO6b/8/hQD/P4UA/+fw3///////w9mv/z+FAP8/hQD/P4UA/z+FAP8/hQD/k7pv/////9AAAAAA////YM/gv/8/hQD/P4UA/26jP////////////+fw3//P4L//z+C//3qrT/8/hQD/P4UA/z+FAP/P4L//////YP///8B6q0//P4UA/z+FAP+30Z/////////////z9+//q8mP/8PZr///////eqtP/1aUH/+fwn//q8mP/////8D/////SowP/z+FAP9KjA//8/fv///////n8N//SowP/z+FAP8/hQD/t9Gf/+fw3////////////////////////////z+FAP8/hQD/h7Jf////////////h7Jf/z+FAP8/hQD/P4UA/z+FAP///////////5/Cf/9KjA////////////8/hQD/P4UA/8PZr///////8/fv/z+FAP8/hQD/P4UA/z+FAP+Hsl///////+fw3/8/hQD/P4UA////////////SowP/1aUH////////////6vJj/8/hQD/P4UA/z+FAP8/hQD/z+C///////+Hsl//P4UA/0qMD///////////wIeyX/9uoz//2+jP//////9WlB//P4UA/z+FAP8/hQD/bqM////////z9+//P4UA/z+FAP+Hsl//////wP///2Db6M//P4UA/z+FAP8/hQD/P4UA/z+FAP8/hQD/P4UA/7fRn///////n8J//z+FAP8/hQD/2+jP/////2AAAAAA////0J/Cf/8/hQD/P4UA/z+FAP8/hQD/P4UA/z+FAP8/hQD/VpQf/z+FAP8/hQD/n8J//////9AAAAAAAAAAAP///yD////wn8J//z+FAP8/hQD/P4UA/z+FAP8/hQD/P4UA/z+FAP8/hQD/n8J///////D///8gAAAAAAAAAAAAAAAA////IP///9DP4L//h7Jf/0qMD/8/hQD/P4UA/0qMD/+Hsl//2+jP/////9D///8gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////YP///8D/////////////////////////wP///2AAAAAAAAAAAAAAAAAAAAAA8A+sQcADrEGAAaxBgAGsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBgAGsQYABrEHAA6xB8A+sQQ%3D%3D%0Adata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAurq6Eri4uBS4uLgUuLi4FLi4uBQRERFnICAgaCEhIWghISFoy8vLLri4uBS4uLgUuLi4FLi4uBR9fX0Eurq6CFtbW++cnJz2n5+f9p+fn/afn5/2jY2N/pmZmf9gYGD/YGBg/1dXV/l9fX32nZ2d9m5ubvZeXl72ysrKXnZ2dgIsLCx2QEBAd0FBQXhBQUF4QUFBeK+vr9i9vb34pKSk/Lu7u9+mpqaQPj4+d0ZGRng8PDx3Ojo6dqysrCoAAAAAAAAAAAAAAAAAAAAAAAAAAD09PQUdHR1Ci4uL4oWFhe8mJiZTGxsbHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABra2tf7u7u/c7Ozv/CwsL/6+vr/4iIiLp/f38CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ2dnAoiIiKq2trb/paWl/6Ojo+o1NTUuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADc3N0tVVVWGVVVVhlVVVYZmZmaTvr6+/q+vr/+BgYHFVVVVhlVVVYZVVVWGQEBAaz09PQoAAAAAAAAAAH9/fwPBwcHzwsLB/8bEwv/X1dP/4+Hf/+Ph3//j4d//4+Hf/+Ph3//j4d//4uHg/9XV1f8lJSU/AAAAAAAAAAB/f38EwsLC/JV8ZP/NoHT/zaB0/82gdP/NoHT/zaB0/82gdP/NoHT/zaB0/9aykP/Q0ND/Ly8vSwAAAAAAAAAAf39/BLS0tPyNblX/vIZa/7yGWv+8hlr/vIZa/7yGWv+8hlr/vIZa/7yGWv/GmnX/xMTE/yoqKksAAAAAAAAAAH9/fwSoqKj8iGlT/7eCW/+rbkH/q2w//6tsP/+rbD//q2w//6tsP/+rbD//uIVf/7y8vP8kJCRLAAAAAAAAAAB/f38Ep6en/IRlUf/GnoT/wph8/7SAXv+pbUX/n10x/5pTJf+aUyX/mlMl/6pwSv+8vLz/Hx8fSwAAAAAAAAAAf39/BKioqPyDZVP/0rWk/9Cxn//Orpv/zKuX/8unk//Hooz/wpmB/72Rd/+yg2f/vb29/x4eHksAAAAAAAAAAH9/fwStra38gmRU/93Guv/dxrr/3ca6/9zFuP/aw7b/2cG0/9i/sf/Xva//sIlz/729vf8eHh5LAAAAAAAAAAB/f38EtLS0+4p7cv+We2z/lnts/5Z7bP+We2z/lnts/5Z7bP+We2z/lnts/4t2af/Ozs7/Hh4eSQAAAAAAAAAAAAAAAGVlZYuUlJTOlJSUzpSUlM6UlJTOlJSUzpSUlM6UlJTOlJSUzpSUlM6UlJTOc3NzsIuLixAAAAAAgACsQQAArEEAAKxB+B+sQfgPrEH4H6xBwAGsQYABrEGAAaxBgAGsQYABrEGAAaxBgAGsQYABrEGAAaxBwAGsQQ%3D%3D%0Adata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATU1NgE1NTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATU1NQE1NTb9NTU2ATU1NQF5eXv9eXl7/TU1NQE1NTYBNTU2/TU1NQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE5OTkBfX1//cnJy/19fX/+VlZX/lZWV/19fX/9ycnL/X19f/05OTkAAAAAAAAAAAAAAAAAAAAAAUVFRQFFRUUBRUVG/dnZ2/5qamv+ampr/mpqa/5qamv+ampr/mpqa/3Z2dv9RUVG/UVFRQFFRUUAAAAAAAAAAAFRUVL9nZ2f/enp6/42Njf+ZmZn/k5OT/5OTk/+Tk5P/k5OT/5mZmf+NjY3/enp6/2dnZ/9UVFS/AAAAAAAAAABYWFiAgICA/6Ghof+UlJT/jo6O/4mJif+JiYn/iYmJ/4mJif+Ojo7/lJSU/6Ghof+AgID/WFhYgAAAAAAAAAAAXFxcQHFxcf+Xl5f/gICA/4CAgP+AgID/gICA/4CAgP+AgID/gICA/4CAgP+Xl5f/cXFx/1xcXEAAAAAAX19fgHZ2dv+jo6P/lZWV/3d3d/93d3f/d3d3/3d3d/93d3f/d3d3/3d3d/93d3f/lZWV/6Ojo/92dnb/X19fgGRkZIB7e3v/q6ur/6+vr/+qqqr/v7+//8vLy//S0tL/0tLS/8vLy/+/v7//qqqq/6+vr/+rq6v/e3t7/2RkZIAAAAAAaGhoQIGBgf/Z2dn/3Nzc/9zc3P/c3Nz/3Nzc/9zc3P/c3Nz/3Nzc/9zc3P/Z2dn/gYGB/2hoaEAAAAAAAAAAAGtra4CxsbH/4uLi/+Li4v/i4uL/4uLi/+Li4v/i4uL/4uLi/+Li4v/i4uL/4uLi/7Gxsf9ra2uAAAAAAAAAAABwcHC/j4+P/7e3t//Nzc3/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/zc3N/7e3t/+Pj4//cHBwvwAAAAAAAAAAcnJyQHJyckBycnK/urq6/+7u7v/u7u7/7u7u/+7u7v/u7u7/7u7u/7q6uv9ycnK/cnJyQHJyckAAAAAAAAAAAAAAAAAAAAAAdnZ2QJqamv++vr7/mpqa//T09P/09PT/mpqa/76+vv+ampr/dnZ2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHd3d0B3d3e/d3d3gHd3d0CcnJz/nJyc/3d3d0B3d3eAd3d3v3d3d0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd3d3gHd3d4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/n8AAOAHAADgBwAAgAEAAIABAACAAQAAgAEAAAAAAAAAAAAAgAEAAIABAACAAQAAgAEAAOAHAADgBwAA/n8AAA%3D%3D%0Adata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOnp6Xva2tp709PTe9PT03vT09N709PTe9PT03vT09N709PTe9PT03va2tp76enpewAAAAAAAAAAAAAAAAAAAACjo6P/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/6Ojo/8AAAAAAAAAAAAAAAAAAAAAf39///Dw8P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs//Dw8P9/f3//AAAAAAAAAAAAAAAAAAAAAIGBgf/u7u7/6urq/+rq6v/q6ur/6urq/+rq6v/q6ur/6urq/+rq6v/u7u7/gYGB/wAAAAAAAAAAAAAAAAAAAACEhIT/8PDw/+3t7f/t7e3/7e3t/+3t7f/t7e3/7e3t/+3t7f/t7e3/8PDw/4SEhP8AAAAAAAAAAAAAAAAAAAAAh4eH//Pz8//w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Pz8/+Hh4f/AAAAAAAAAAAAAAAAAAAAAIqKiv/09PT/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/09PT/ioqK/wAAAAAAAAAAAAAAAAAAAACOjo7/9/f3//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9vb2/46Ojv8AAAAAAAAAAAAAAAAAAAAAkpKS//r6+v/5+fn/+fn5//j4+P/4+Pj/+Pj4//j4+P/39/f/9/f3//n5+f+SkpL/AAAAAAAAAAAAAAAAAAAAAJaWlv/7+/v/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/7+/v/lpaW/wAAAAAAAAAAAAAAAAAAAACZmZn//Pz8//v7+//7+/v/+/v7//v7+//7+/v/+fn5//b29v/19fX/+Pj4/5iYmP8AAAAAAAAAAAAAAAAAAAAAnJyc//39/f/8/Pz//Pz8//z8/P/8/Pz//Pz8//f39//u7u7/6+vr/+/v7/+enp7/AAAAAAAAAAAAAAAAAAAAAJ+fn//9/f3//f39//39/f/9/f3//f39//39/f/39/f/xMTE/8TExP/Jycn/ra2t/wAAAAAAAAAAAAAAAAAAAAChoaH//v7+//39/f/9/f3//f39//39/f/9/f3/+fn5/8nJyf/z8/P/s7Oz/9LS0v8AAAAAAAAAAAAAAAAAAAAApKSk///////+/v7//v7+//7+/v/+/v7//v7+//39/f/Pz8//tra2/83Nzf8AAAAAAAAAAAAAAAAAAAAAAAAAAMTExP+mpqb/pqam/6ampv+mpqb/pqam/6ampv+mpqb/t7e3/9bW1v8AAAAAAAAAAAAAAAAAAAAAwAOsQcADrEHAA6xBwAOsQcADrEHAA6xBwAOsQcADrEHAA6xBwAOsQcADrEHAA6xBwAOsQcADrEHAB6xBwA+sQQ%3D%3D%0Adata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAb3vj/wAk2f8AK9n/ACvZ/wAr2f8AMNv/ADPb/wAw2/8AMNv/ADTe/wA33v8ANN7/ACze/2h56P8AAAAAb3vj/wA73v8ASOP/AEDg/wA73v8AROP/AFDm/wBR6P8ASOP/AETj/wBM5v8AWej/AFXo/wBI4/8AO97/aHno/wAk1v8AQOP/d5Xm/9HX6P+WpeP/ADPb/wBE4/+EoOP/19rg/36V3v8AQOD/KWfj/9PW2//Fy9v/AEDg/wAs3v8AKNn/AEDj/93g7f/t7e3/6+vr/wA33v8EQ+D/qrrj/+Pj4/9th97/AETj/0Z74//e3t7/v8fe/wBA4P8ANN7/ACjZ/wBA4/+YsOv/6+vt/7XD6P8HROD/OWbj/9/g5v/h4ub/PGTe/wBI4/9tkuP/3t7e/6Cv3v8AQOD/ADTe/wAo2f8JR+P/AEDj/wBA4P8HROD/FEre/7O+6P/o6Oj/qLbj/wlG4P8FS+P/rLzj/+Dg4P9vi97/AEjj/wA03v8AKNn/LmPo/wlC4P8CNd7/PF/e/7fA6P/t7e3/1dro/zZj4P8AROP/RnXj/97e4//V2eD/MV/e/wBI4/8ANN7/ACjZ/1qE7f+ou+3/vsft/+vs8P/w8PD/2Nzr/0934/8AROP/FE/j/7PA4//m5ub/lqjg/wRG4P8ATOb/ADTe/wAo2f9che3/9fTy//Xy8//t7vL/ucbt/0x35v8HReP/B0Tg/4+j4//o6Oj/1dnm/y1d4P8ASOP/AEzm/wA03v8AJ9b/ZIjt/7bG8v+jt/D/gJ3t/1uC6/9PeOj/T3Xo/6Cx6P/r6+v/6Ojr/2uJ4/8OTuP/CU/m/wdS6P8AMN7/ACfW/2uN7f9kiO3/Vnro/09z6P9Kb+j/e5Po/8zT7f/w7+3/7evt/5Ko6P9Dcuj/P3br/zty6/82b+v/ADDb/wAn1v9vke3/gJvt/4GY6/+Yqe3/x87w//Ly8v/y8vL/5Obw/42k6/9LeOv/Snvt/0R56/9CdOv/PXTr/wAw2/8AJNb/dZbw//X19//6+Pf/9/X1//f29f/t7vL/vcnw/3WV6/9VgO3/U4Ht/05+7f9Ke+3/RHbr/z1x6/8ALNv/ACDU/32Z8P/t8Pf/5ur1/87W9f+vwPD/gp/t/2aK7f9ki+3/X4ft/1iC7f9Tge3/S3vr/0Z46/9Ccuv/ACjZ/3F54/+Fmu3/lKvy/5Gr8v+PqfL/jajy/4qo8v+FpPL/gaHw/32d8P96nPD/dZjw/3OW8P9rkO3/Z4br/2974/8AAAAAcXnj/wAg1P8AJNb/ACfW/wAn1v8AJ9b/ACfW/wAo2f8AKNn/ACjZ/wAo2f8AKNn/ACTW/2974/8AAAAAgAGsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBgAGsQQ%3D%3D%0Adata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////7b///+J8P//f+v//4fw///N//////////////+Dslb/brQ6/3m2PP96tjr/drU6/3u0Ov8AAAAA/////5nx//9G4f//UOv//0/s//9V7f//WOT//7b+////////8f/j/2uwPf91vTv/ebw9/3i3Ov94tDr/fbM6//////9V3P//SvP//0bz//9J7///Sez//1Xt//9p5f////////////+Ev1f/c8A6/3u/PP92wDr/ero8/3e1Ov//////ceD//zru//88////RP3//0P4//865P//hOr/////////////j8tf/27DOv91xzr/d8A6/327P/94tzv///////////9y6v//ROr//zrv//886P//ZOP//////////////////3nAR/9zyjr/dsY9/3fDPP94vzr/eLs6///14P/////////////////q////0P///////////////////6fgg/9kxzv/cs06/3XKOv9zxTz/dsI6/3a/Ov/Ig1z/15hy/+y4kP/6yqj//////////////////////6XigP9nxzv/dtA6/3XNOv91zTr/d8k6/3fEOv93vjr/3JNh/96PVv/YhEL/0oJL/////////////////4vUYP9nzjr/c9E8/3XRPP9yzjr/dcw8/3fJO/93xTz/csM6/+KQT//WiUr/4Kl8//jcvv//////////////+f9ZsTz/b9U6/3HTOv9x1Dr/ds47/3bOO/9yyTr/d8U7/3jBO//ZmGH///jm//////////////na////////////0/K//2a8Ov911D3/dNI9/3HQOv9z0Dr/dMs7/3nNOv98wTv/////////////////76Zi//WOOv/zl0j////z///////V69P/WqpX/3HPOv930D3/dc06/3DDQ/9nn3T/SWXE/////////////+O8//ONOv//nj7/95I8///Kk////////////2Jj//9AU/z/S2Dr/0ta8P8/Sv//Ojz//zo7//////////////i2df//lzz//6A8//6UPP//yJH///////////+Kjf//Pjr//zo7//89Ov//Ojv//zo6//89PP/////////////wpl7//506//+gOv/7kzr//+m9////////////gID//zs6//86Pf//Ozv//z06//86O///Ojr/////////////8r2K//OROv//nTz/9pxI/////////////////0RG//86Ov//PTv//zo7//86O///Pjr//zo8//8AAAAA///////////gmVr/24Y+///mwP///////////3R5/f86O///PDz//zo6//88Ov//Ojv//zo6//8AAAAAgAGsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBgAGsQQ%3D%3D%0Adata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAObm5rpTU8n/UFC6/2ZSUv+tra3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5ubmuoKCgv9VVeb/WVn//1lZ//9OTpH/oaGh/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALq6uv9OTpH/WVn//1lZ//9TU8n/VH/W/3V1df////8HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWVlZ/8nJyfrm5ua6Tk6R/1NTyf9ZWf//WVn//1lZ//9PT4L/urq6/////wcAAAAAAAAAAAAAAAAAAAAAAAAAAP///wdZWVn/UmZS/1VV5v9ZWf//WVn//1lZ//9ZWf//ZmZm/1FRdf+hoaH/urq6/39U1v9PgoL/1tbW4wAAAABZWVn/5ubmt2ZSUv9TU8n/WVn//1lZ//9ZWf//U1PJ/1NTyf9ZWf//WFj1/1NTyf9QUK3/urq6/1F1Uf+tra3/AAAAAHV1df9RUXX/VVXm/1lZ//9OTpH/U1PJ/1lZ//9ZWf//UFC6/05Okf9OTpH/urq6/39/rf9VVeb/UFCt/1lZWf/Jycn7VFTW/1lZ//9ZWf//UFC6/1lZ//9ZWf//WVn//09Pgv9mUlL/oaGh/1lZ//9ZWf//WVn//39/rf8AAAAAZlJS/05Okf9Zg///WVn//1RU1v9ZWf//WVn//1lZ//9QULr/VVXm/1lZ//9ZWf//WVn//1VV5v91dXX/WVlZ/8nJyfpZWVn/VVXm/1lZ//9ZWf//UFC6/1BQof9Zg///VVXm/1lZ//9ZWf//WFj1/1BQrf/m5ua6AAAAAAAAAABZWVn/WVlZ/1BQof9ZWf//WFj1/1mD//9VVeb/UFC6/4NZ//+hoaH/dXV1/1VV5v////8gAAAAAAAAAAAAAAAA1tbW41lZWf9QUKH/VVXm/1BQof9QULr/WYP//1BQuv9QUKH/dXV1/1JSZv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///9GgoKC/05Okf9ZWf//VVXm/1lZ//9QUK3/Tk6R/05Okf/m5ua6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wfJycn7dXV1/05Okf+CgoL/ycnJ+ubm5rf///8dAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//+sQfB/rEHAf6xBwD+sQQAfrEEAAaxBAACsQYAArEEAAKxBgACsQQABrEGAA6xBgA+sQcAPrEHgH6xB//+sQQ%3D%3D%0Adata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMyZmRDMmZkRzJmZD8yZmRHMmZkQAAAAAAAAAADMmZkSzJmZFMyZmRIAAAAAAAAAAAAAAAAAAAAAAAAAAMyZmSbMmZndzJmZ9cyZmfXMmZn3zJmZ4MyZmSPMmZkMzJmZ3MyZmfrMmZnezJmZEgAAAAAAAAAAAAAAAMyZmSbMmZndzJmZ/8yZmf/MmZn0zJmZ98yZmf/MmZndzJmZJMyZmfHMmZn/zJmZ9cyZmQ8AAAAAAAAAAMyZmQvMmZndzJmZ/8yZmf/MmZnYzJmZH8yZmSLMmZnizJmZ3MyZmSPMmZnszJmZ/8yZmezMmZkJzJmZCcyZmRHMmZkKzJmZ88yZmf/MmZnvzJmZIgAAAAAAAAAAzJmZEsyZmQ3MmZkLzJmZ7syZmf/MmZntzJmZOcyZmdnMmZn3zJmZB8yZmfDMmZn/zJmZ7syZmQwAAAAAAAAAAAAAAAAAAAAAzJmZD8yZmffMmZn/zJmZ8MyZmfTMmZn/zJmZ98yZmQfMmZnwzJmZ/8yZme7MmZkMAAAAAAAAAAAAAAAAAAAAAMyZmRDMmZngzJmZ3syZmTzMmZndzJmZ38yZmSLMmZkKzJmZ88yZmf/MmZnvzJmZIgAAAAAAAAAAzJmZEsyZmRIAAAAAzJmZEsyZmRAAAAAAzJmZEMyZmRIAAAAAzJmZC8yZmd3MmZn/zJmZ/8yZmdjMmZkfzJmZIsyZmeLMmZnjzJmZEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMmZkmzJmZ3cyZmf/MmZn/zJmZ9MyZmffMmZn/zJmZ5MyZmRMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMyZmSbMmZndzJmZ9cyZmfXMmZn3zJmZ4MyZmSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzJmZEMyZmRHMmZkPzJmZEcyZmRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//+sQf//rEHgx6xBwAOsQYADrEEAAKxBBgCsQQeArEEHgKxBBkmsQQA/rEGAP6xBwH+sQeD/rEH//6xB//+sQQ%3D%3D%0Adata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3po+/96aPv/emj7/3po+/96aPv/emj7/3po+/96aPv/emj7/3po+/96aPv/emj7/3po+/96aPv8AAAAA3po+/96aPv/dmT113Zk9Sd6aPknemj5J3po+Sd6aPknemj5J3po+Sd6aPknemj5J3po+Sd6aPm3emj7/3po+/96aPv/alDtt2JE5SdSMNSHRhzIY0YcyGNGGMhjQhTEV04kzFdWNNhXVjTYV2pQ6Fd6aPhremj5H3po+bd6aPv/emj7/2ZM6ZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANePNwnclzwN3po+HN6aPknemj7/3po+/9iROVUAAAAAmTMA/5kzAP+ZMwD/mTMA/wAAAACZMwD/mTMA/wAAAAAAAAAA2ZM6CN2ZPRnemj5J3po+/96aPv/XjzhJAAAAAAAAAACZMwD/mTMA/wAAAAAAAAAAmTMA/5kzAP8AAAAAAAAAANCGMgfZkzkY3po+Sd6aPv/emj7/1Y02SQAAAAAAAAAAmTMA/5kzAP8AAAAAAAAAAJkzAP+ZMwD/AAAAAAAAAAAAAAAA0YcyGNWNNknemj7/3po+/96aPkkAAAAAAAAAAJkzAP+ZMwD/AAAAAAAAAACZMwD/mTMA/5kzAP+ZMwD/AAAAAAAAAADQhTFJ3po+/96aPv/emj5JAAAAAAAAAACZMwD/mTMA/wAAAAAAAAAAmTMA/5kzAP8AAAAAmTMA/5kzAP8AAAAAy34tSd6aPv/emj7/1Y02SQAAAAAAAAAAmTMA/5kzAP8AAAAAAAAAAJkzAP+ZMwD/AAAAAJkzAP+ZMwD/AAAAAMt+LUnemj7/3po+/9WNNkkAAAAAAAAAAJkzAP+ZMwD/AAAAAAAAAACZMwD/mTMA/wAAAACZMwD/mTMA/wAAAADLfi1J3po+/96aPv/VjTZJAAAAAJkzAP+ZMwD/mTMA/5kzAP8AAAAAmTMA/5kzAP+ZMwD/mTMA/wAAAAAAAAAA0IUxSd6aPv/emj7/2JE4SQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANiROEnemj7/3po+/9qUO23YkThC1Is1GtKIMxnRhzMY0YczGNGHMxjRhzMY0YczGNGHMxjUijQY1483HdqUOkLemj5t3po+/96aPv/emj7/3po+bd6aPknemj5J3po+Sd6aPknemj5J3po+Sd6aPknemj5J3po+Sd6aPknemj5t3po+/96aPv8AAAAA3po+/96aPv/emj7/3po+/96aPv/emj7/3po+/96aPv/emj7/3po+/96aPv/emj7/3po+/96aPv8AAAAAgAGsQQAArEEAAKxBP+CsQSEwrEEzMKxBMzisQTMMrEEzJKxBMySsQTMkrEEhDKxBP/ysQQAArEEAAKxBgAGsQQ%3D%3D%0A%0A%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Отсутствует

 

№451207-08-2012 22:08:46

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 14.0

Re: Custom Buttons

okkamas_knife пишет

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

А все потому, что вкладки не очень-то приспособлены под такие дела.
А еще событие TabClose, судя по chrome://browser/content/tabbrowser.xml, нельзя отменить:

Выделить код

Код:

evt.initUIEvent("TabClose", true, false, window, aTabWillBeMoved ? 1 : 0);
            aTab.dispatchEvent(evt);

Так получше:

Выделить код

Код:

const editId = "custombuttons-contextpopup-edit";
const editInTabId = editId + "-inTab";
var editInTab = document.getElementById(editInTabId);
if(editInTab)
    editInTab.parentNode.removeChild(editInTab);
var editItem = document.getElementById(editId);
editInTab = editItem.cloneNode(true);
editInTab.id = editInTabId;
editInTab.setAttribute("label", "Edit button in tab…");
editInTab.setAttribute("oncommand", "editCustomButtonInTab();");
editInTab.removeAttribute("observes");
editItem.parentNode.insertBefore(editInTab, editItem.nextSibling);

window.editCustomButtonInTab = function() { // Should be global to work in cloned menus
    var btn = custombuttons.popupNode;
    if(!btn)
        return;
    var link = custombuttons.makeButtonLink("edit", btn.id);
    var cbService = Components.classes["@xsms.nm.ru/custombuttons/cbservice;1"]
        .getService(Components.interfaces.cbICustomButtonsService);
    var param = cbService.getButtonParameters(link);
    var editorUri = "chrome://custombuttons/content/editor.xul";
    if(cbService.mode & 64)
        editorUri += "?editorId=custombuttons-editor@" + cbService.getWindowId(document.documentURI) + ":" + btn.id;

    // Search for already opened tab
    var rawParam = unwrap(param);
    var ws = Components.classes["@mozilla.org/appshell/window-mediator;1"]
        .getService(Components.interfaces.nsIWindowMediator)
        .getEnumerator("navigator:browser");
    while(ws.hasMoreElements()) {
        let gBrowser = ws.getNext().gBrowser;
        let tabs = gBrowser.tabs || gBrowser.tabContainer.childNodes;
        for(let i = 0, l = tabs.length; i < l; ++i) {
            let tab = tabs[i];
            let win = tab.linkedBrowser.contentWindow;
            if(win.location != editorUri)
                continue;
            win = unwrap(win);
            if("arguments" in win && win.arguments.length) {
                let winParam = unwrap(win.arguments[0]);
                if(winParam.buttonLink == link) {
                    gBrowser.selectedTab = tab;
                    return;
                }
            }
        }
    }

    // Or open new tab
    var tab = gBrowser.selectedTab = gBrowser.addTab(editorUri);
    var browser = tab.linkedBrowser;
    browser.addEventListener("DOMContentLoaded", function load(e) {
        var doc = e.target;
        if(doc.location != editorUri)
            return;
        browser.removeEventListener(e.type, load, false);

        var win = unwrap(doc.defaultView);
        win.arguments = [param];

        var iconLink = doc.createElementNS("http://www.w3.org/1999/xhtml", "link");
        iconLink.rel = "shortcut icon";
        iconLink.href = "chrome://custombuttons-context/content/icons/default/custombuttonsEditor.ico";
        iconLink.style.display = "none";
        doc.documentElement.insertBefore(iconLink, doc.documentElement.firstChild);

        function checkUnsaved(e) {
            if(!doc.documentElement.cancelDialog())
                e.preventDefault();
        }
        win.addEventListener("beforeunload", checkUnsaved, false);
        win.addEventListener("unload", function destroy(e) {
            win.removeEventListener(e.type, destroy, false);
            win.removeEventListener("beforeunload", checkUnsaved, false);
        }, false);
    }, false);
};
function unwrap(o) {
    return o.wrappedJSObject || o; // Firefox 3.6 and older
}

Но при нажатии отмены на вопрос, не сохранить ли изменения, вывалится еще и стандартный вопрос на прерывание beforeunload.
И нам еще повезло, что там не простой confirm() выдается.

Добавлено 07-08-2012 22:17:57
Упс, там неправильная проверка на наличие уже открытой вкладки – можно открыть только одну вкладку. :)
Добавлено 07-08-2012 22:25:40
Ну, вроде, теперь работает.

Отредактировано Infocatcher (07-08-2012 22:25:41)


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№451308-08-2012 00:14:08

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 14.0

Re: Custom Buttons

okkamas_knife пишет

как всегда с  3.6 проблема - не спрашивает. но в принципе ну его нафиг, в см и 10 работает и ок, а кнопкописателей сидящих на 3.6 вроде меня не так уж и много так что можно обойтись.

Да просто – опять из-за обертки проблема – нельзя было вызывать функцию диалога во вкладке.

Выделить код

Код:

const editId = "custombuttons-contextpopup-edit";
const editInTabId = editId + "-inTab";
var editInTab = document.getElementById(editInTabId);
if(editInTab)
    editInTab.parentNode.removeChild(editInTab);
var editItem = document.getElementById(editId);
editInTab = editItem.cloneNode(true);
editInTab.id = editInTabId;
editInTab.setAttribute("label", "Edit button in tab…");
editInTab.setAttribute("oncommand", "editCustomButtonInTab();");
editInTab.removeAttribute("observes");
editItem.parentNode.insertBefore(editInTab, editItem.nextSibling);

window.editCustomButtonInTab = function() { // Should be global to work in cloned menus
    var btn = custombuttons.popupNode;
    if(!btn)
        return;
    var link = custombuttons.makeButtonLink("edit", btn.id);
    var cbService = Components.classes["@xsms.nm.ru/custombuttons/cbservice;1"]
        .getService(Components.interfaces.cbICustomButtonsService);
    var param = cbService.getButtonParameters(link);
    var editorUri = "chrome://custombuttons/content/editor.xul";
    if(cbService.mode & 64)
        editorUri += "?editorId=custombuttons-editor@" + cbService.getWindowId(document.documentURI) + ":" + btn.id;

    // Search for already opened tab
    var rawParam = unwrap(param);
    var ws = Components.classes["@mozilla.org/appshell/window-mediator;1"]
        .getService(Components.interfaces.nsIWindowMediator)
        .getEnumerator("navigator:browser");
    while(ws.hasMoreElements()) {
        let gBrowser = ws.getNext().gBrowser;
        let tabs = gBrowser.tabs || gBrowser.tabContainer.childNodes;
        for(let i = 0, l = tabs.length; i < l; ++i) {
            let tab = tabs[i];
            let win = tab.linkedBrowser.contentWindow;
            if(win.location != editorUri)
                continue;
            win = unwrap(win);
            if("arguments" in win && win.arguments.length) {
                let winParam = unwrap(win.arguments[0]);
                if(winParam.buttonLink == link) {
                    gBrowser.selectedTab = tab;
                    return;
                }
            }
        }
    }

    // Or open new tab
    var tab = gBrowser.selectedTab = gBrowser.addTab(editorUri);
    var browser = tab.linkedBrowser;
    browser.addEventListener("DOMContentLoaded", function load(e) {
        var doc = e.target;
        if(doc.location != editorUri)
            return;
        browser.removeEventListener(e.type, load, false);

        var win = doc.defaultView;
        unwrap(win).arguments = [param];

        var iconLink = doc.createElementNS("http://www.w3.org/1999/xhtml", "link");
        iconLink.rel = "shortcut icon";
        iconLink.href = "chrome://custombuttons-context/content/icons/default/custombuttonsEditor.ico";
        iconLink.style.display = "none";
        doc.documentElement.insertBefore(iconLink, doc.documentElement.firstChild);

        function checkUnsaved(e) {
            if(!unwrap(doc).documentElement.cancelDialog())
                e.preventDefault();
        }
        win.addEventListener("beforeunload", checkUnsaved, false);
        win.addEventListener("unload", function destroy(e) {
            win.removeEventListener(e.type, destroy, false);
            win.removeEventListener("beforeunload", checkUnsaved, false);
        }, false);
    }, false);
};
function unwrap(o) {
    return o.wrappedJSObject || o; // Firefox 3.6 and older
}

Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№451408-08-2012 02:03:51

SendAbuse
Участник
 
Группа: Members
Зарегистрирован: 08-03-2012
Сообщений: 113
UA: Firefox 11.0

Re: Custom Buttons

Infocatcher,  всего лишь наблюдение:

Firefox 10.0, открываю кнопку через Edit button in tab
Что-то печатаю
Жму "Отмена"
Появляется окошко "Код кнопки был изменен. Сохранить сделанные изменения?"
Жму "Не сохранять"
И тут оно появляется снова
Со второй попытки нажать "Не сохранять" наконец закрывается.

Отредактировано SendAbuse (08-08-2012 02:05:18)

Отсутствует

 

№451508-08-2012 09:56:41

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 14.0

Re: Custom Buttons

SendAbuse
Странно, что на Отмена – Сохранить запрос не двоится.
Но, вроде бы, удалось приделать распорку: editCustomButtonInTab.js
И заодно добавил русскую локализацию.


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№451608-08-2012 15:58:59

SendAbuse
Участник
 
Группа: Members
Зарегистрирован: 08-03-2012
Сообщений: 113
UA: Firefox 11.0

Re: Custom Buttons

okkamas_knife,  да-да, попытался доделать олдскульную версию, проверяй.

Там, в начале кода,    this.allowChecked   и   allowSelection   у меня стоит  false ,
но для себя, конечно, измени на  true :)
В каком виде выкладывать, если всё работает, - решай сам.

Для работы с режимом установки курсора ничего менять не надо - он просто есть.
Во всяком случае задуман, напомню идею:
Если в тексте вставки присутствует специальный символ (или несколько подряд),
который задается в коде кнопки в константе cursorIndex,
то, после вставки, курсор будет помещён в эту позицию, выделение вставленного
при этом, естественно, не происходит.  Кому это понадобиться - тот поставит.
Если Указатель курсора отсутствует, не поставлен, значит в этой конкретной вставке не нужен,
и выделение вставленного целиком зависит от значения константы allowSelection

Но это всё теория, может ещё и не работает, вобщем погляди...

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3ECustomPaste%20for%20CBEditor%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//rq7///////////////////////9eXv////////////9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7/////////////////////////////Xl7/////////////Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e/////////////15e//9eXv//Xl7//15e/////////////15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv////////////9eXv//Xl7//15e//9eXv////////////////////////////+urv//Xl7//15e//9eXv//Xl7/////////////Xl7//15e//9eXv//Xl7/////////////3Nz//9jY/////////////15e//9eXv//Xl7//15e/////////////15e//9eXv//Xl7//15e/////////////15e//9eXv////////////9eXv//Xl7//15e//9eXv////////////////////////////9eXv/////////////c3P//2Nj/////////////Xl7//15e//9eXv//Xl7//66u////////////////////////Xl7/////////////////////////////rq7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.allowChecked%20%3D%20false%3B%0Aconst%20allowSelection%20%3D%20false%3B%0A%0Avar%20theSeparator%20%3D%20%22%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%22%3B%0A%0Aconst%20cursorIndex%20%3D%20%22%60%22%3B%0A%0Aconst%20insertButtonImage%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3D%20%20%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABfV1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/8AAABfV1dX/wAAACsAAAArAAAAKwAAACsAAAArAAAAKwAAACsAAAArAAAAKwAAACsAAAArAAAAKwAAACsAAAArV1dX/1dXV/8AAAArAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK1dXV/9XV1f/AAAAKwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACtXV1f/V1dX/wAAACsAAAAA/////////////////////wAAAAD//////////wAAAAAAAAAAAAAAAAAAAAAAAAArV1dX/1dXV/8AAAAr//////////////////////////8AAAAA//////////8AAAAAAAAAAAAAAAAAAAAAAAAAK1dXV/9XV1f/AAAAK///////////AAAAAAAAAAAAAAAAAAAAAP//////////AAAAAAAAAAAAAAAAAAAAAAAAACtXV1f/V1dX/wAAACv//////////wAAAAAAAAAAAAAAAAAAAAD//////////////////////////wAAAAAAAAArV1dX/1dXV/8AAAAr//////////8AAAAAAAAAAAAAAAAAAAAA//////////8AAAAAAAAAAP//////////AAAAK1dXV/9XV1f/AAAAK///////////AAAAAAAAAAAAAAAAAAAAAP//////////AAAAAAAAAAD//////////wAAACtXV1f/V1dX/wAAACv//////////////////////////wAAAAD//////////wAAAAAAAAAA//////////8AAAArV1dX/1dXV/8AAAArAAAAAP////////////////////8AAAAA//////////////////////////8AAAAAAAAAK1dXV/9XV1f/AAAAKwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACtXV1f/V1dX/wAAACsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArV1dX/1dXV/8AAAArAAAAKwAAACsAAAArAAAAKwAAACsAAAArAAAAKwAAACsAAAArAAAAKwAAACsAAAArAAAAK1dXV/8AAABfV1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/8AAABfAACsQQAArEE//KxBP/ysQSE8rEEBPKxBDzysQQ8ErEEPMKxBDzCsQQEwrEEhBKxBP/ysQT/8rEEAAKxBAACsQQ%3D%3D%22%3B%0Aconst%20insertButtonImageOnSelf%20%20%20%20%20%20%20%20%3D%20%20%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABfV1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/8AAABfV1dX/wAAACsAAAArAAAAKwAAACsAAAArAAAAKwAAACsAAAArAAAAKwAAACsAAAArAAAAKwAAACsAAAArV1dX/1dXV/8AAAArAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK1dXV/9XV1f/AAAAKwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACtXV1f/V1dX/wAAACsAAAAA//////////////////////////////////////////8AAAAAAAAAAAAAAAAAAAArV1dX/1dXV/8AAAArAAAAAP///////////////////////////////////////////////wAAAAAAAAAAAAAAK1dXV/9XV1f/AAAAKwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////8AAAAAAAAAAAAAACtXV1f/V1dX/wAAACsAAAAAAAAAAAAAAAD/////////////////////////////////////AAAAAAAAAAAAAAArV1dX/1dXV/8AAAArAAAAAAAAAAD/////////////////////////////////////AAAAAAAAAAAAAAAAAAAAK1dXV/9XV1f/AAAAKwAAAAAAAAAA//////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACtXV1f/V1dX/wAAACsAAAAAAAAAAP//////////////////////////////////////////AAAAAAAAAAAAAAArV1dX/1dXV/8AAAArAAAAAAAAAAAAAAAA/////////////////////////////////////wAAAAAAAAAAAAAAK1dXV/9XV1f/AAAAKwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACtXV1f/V1dX/wAAACsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArV1dX/1dXV/8AAAArAAAAKwAAACsAAAArAAAAKwAAACsAAAArAAAAKwAAACsAAAArAAAAKwAAACsAAAArAAAAK1dXV/8AAABfV1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/8AAABfAACsQQAArEE//KxBP/ysQSAcrEEgDKxBP8ysQTgMrEEwHKxBM/ysQTAMrEE4DKxBP/ysQT/8rEEAAKxBAACsQQ%3D%3D%22%3B%0Aconst%20insertButtonBackgroundColor%20%20%20%20%3D%20%20%20%22rgb%28205%2C109%2C252%29%22%3B//%22rgb%28130%2C130%2C255%29%22%3B%0A%0Aconst%20insertButtonTooltip%20%20%20%20%20%20%20%20%20%20%20%20%3D%20%20%20%22T%20E%20S%20T%22%3B%20//%22%u041D%u0430%u0431%u043E%u0440%20%u043D%u043E%u0432%u0438%u0447%u043A%u0430%22%3B%0Athis.tooltipText%20%3D%20%22test%22%3B%20//%27%u0412%u0441%u0442%u0430%u0432%u043A%u0430%20%u043A%u043E%u0434%u043E%u0432%20%22%27+insertButtonTooltip+%27%22%20%u0434%u043B%u044F%20%u0440%u0435%u0434%u0430%u043A%u0442%u043E%u0440%u0430%20%u0421ustom%20buttons%27%3B%0A%0A//%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%0A%0Aconst%20editor%20%3D%20%22chrome%3A//custombuttons/content/editor.xul%22%3B%0A%0AtheSeparator%20%3D%20%22%5Cn%22%20+%20theSeparator%20+%20%22%5Cn%22%3B%0A%0Avar%20items%20%3D%20this.Help.split%28theSeparator%29%3B%0A%0Avar%20thisCB%20%3D%20this%3B%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0Athis.imageOn%20%3D%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//rq7///////////////////////9eXv////////////9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7/////////////////////////////Xl7/////////////Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e/////////////15e//9eXv//Xl7//15e/////////////15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv////////////9eXv//Xl7//15e//9eXv////////////////////////////+urv//Xl7//15e//9eXv//Xl7/////////////Xl7//15e//9eXv//Xl7/////////////3Nz//9jY/////////////15e//9eXv//Xl7//15e/////////////15e//9eXv//Xl7//15e/////////////15e//9eXv////////////9eXv//Xl7//15e//9eXv////////////////////////////9eXv/////////////c3P//2Nj/////////////Xl7//15e//9eXv//Xl7//66u////////////////////////Xl7/////////////////////////////rq7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ%3D%3D%22%3B%0A%0Athis.imageOff%20%3D%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACbm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P/JyfD//////////////////////5ub4P///////////5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D///////////////////////////+bm+D///////////+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg////////////m5vg/5ub4P+bm+D/m5vg////////////m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P///////////5ub4P+bm+D/m5vg/5ub4P///////////////////////////8nJ8P+bm+D/m5vg/5ub4P+bm+D///////////+bm+D/m5vg/5ub4P+bm+D////////////o6Pr/5ub6////////////m5vg/5ub4P+bm+D/m5vg////////////m5vg/5ub4P+bm+D/m5vg////////////m5vg/5ub4P///////////5ub4P+bm+D/m5vg/5ub4P///////////////////////////5ub4P///////////+jo+v/m5vr///////////+bm+D/m5vg/5ub4P+bm+D/ycnw//////////////////////+bm+D////////////////////////////JyfD/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ%3D%3D%22%3B%0A%0Athis.image%20%3D%20this.imageOn%3B%20if%20%28this.allowChecked%29%20this.checked%20%3D%20true%3B%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%0Avar%20cbIdNumber%20%3D%20this.id.replace%28%22custombuttons-button%22%2C%20%22%22%29%3B%0Avar%20insertButtonId%20%3D%20%22custom-paste-by-cb%22%20+%20cbIdNumber%3B%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0Avar%20prefs%20%3D%20Components.classes%5B%22@mozilla.org/preferences-service%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIPrefService%29%0A%20%20%20%20%20%20%20%20%20%20%20%20.getBranch%28%22custombutton.CustomPasteForCBEditor%5B%22%20+%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20cbIdNumber%20+%20%22%5D.%22%29%3B%0Atry%20%20%20%20%20%20%7B%20var%20pref%20%3D%20prefs.getBoolPref%28%22off%22%29%3B%20%7D%0Acatch%28e%29%20%7B%20prefs.setBoolPref%28%22off%22%2C%20false%29%3B%20%7D%3B%0A%0Athis.off%20%3D%20prefs.getBoolPref%28%22off%22%29%3B%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%0Afunction%20setButtonDesign%28aDoc%29%20%7B%0A%0A%20%20var%20button%20%3D%20aDoc.getElementById%28%22custom-paste-by-cb%22%20+%20cbIdNumber%29%3B%0A%20%20%20%20%20%20button.tooltipText%20%3D%20insertButtonTooltip%3B%0A%20%20%20%20%0A%20%20var%20image%20%3D%20aDoc.getAnonymousNodes%28button%29%5B1%5D%3B%0A%20%20%20%20%20%20image.style.backgroundColor%20%3D%20insertButtonBackgroundColor%3B%0A%20%20%20%20%20%20image.style.MozMarginEnd%20%3D%20%220px%22%3B%0A%20%20%20%20%0A%20%20var%20dropmarker%20%3D%20aDoc.getAnonymousNodes%28button%29%5B3%5D%3B%0A%20%20%20%20%20%20dropmarker.hidden%20%3D%20true%3B%20%20%7D%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%0Aconst%20%20kXULNS%20%3D%20%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%3B%0A%0A%20%20var%20place%20%3D%20null%3B%0A%20%20var%20focusedElement%20%3D%20null%3B%0A%0A//%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%0A%0Afunction%20createButton%28aDoc%29%20%7B%0A%0Avar%20%20button%20%3D%20document.createElementNS%28kXULNS%2C%20%22toolbarbutton%22%29%3B%0A%20%20%20%20%20button.setAttribute%28%22image%22%2C%20insertButtonImage%29%3B%0A%20%20%20%20%20button.setAttribute%28%22id%22%2C%20insertButtonId%29%3B%0A%20%20%20%20%20button.setAttribute%28%22type%22%2C%20%22menu%22%29%3B%0A//-------------------------------------------------------------%0A%0A%20%20%20%20%20button.onmouseover%20%3D%20function%28%29%20%7B%20place%20%3D%20aDoc.commandDispatcher.focusedElement%3B%20%7D%0A%20%20%20%20%20%0A//--------------------------------------------------------------%0Avar%20%20menupopup%20%3D%20document.createElementNS%28kXULNS%2C%20%22menupopup%22%29%3B%0A%20%20%20%20%20button.appendChild%28menupopup%29%3B%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%0Avar%20onSelf%20%3D%20false%3B%0A%0Aif%20%28aDoc.location.href.split%28%22custombuttons-button%22%29%5B1%5D%20%3D%3D%20cbIdNumber%29%20%7B%0A%0A%20%20%20%20onSelf%20%3D%20true%3B%0A%20%20%20%20button.setAttribute%28%22image%22%2C%20insertButtonImageOnSelf%29%3B%0A%0A%20%20%20%20%20%20if%20%28items%5B0%5D%20%21%3D%20%22%u0421%u0435%u043F%u0430%u0440%u0430%u0442%u043E%u0440%22%20+%20theSeparator%20%29%20%7B%0A%0A%20%20%20%20%20%20%20%20%20%20items.unshift%28%22%u0421%u0435%u043F%u0430%u0440%u0430%u0442%u043E%u0440%22%20+%20theSeparator%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%u0423%u043A%u0430%u0437%u0430%u0442%u0435%u043B%u044C%20%u043A%u0443%u0440%u0441%u043E%u0440%u0430%22%20+%20%22%5Cn%22%20+%20cursorIndex%20+%20cursorIndex%29%3B%20%7D%7D%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%0Afor%20%28var%20i%20%3D%200%3B%20i%20%3C%20items.length%3B%20i++%29%20%7B%0A%20%20%20%20%20%0A%20%20var%20label%20%3D%20items%5Bi%5D.split%28%22%5Cn%22%2C1%29%3B%0A%20%20var%20insertText%20%3D%20items%5Bi%5D.replace%28label%20+%20%22%5Cn%22%2C%20%22%22%29%3B%0A%20%20%0A%20%20var%20%20menuitem%20%3D%20document.createElementNS%28kXULNS%2C%20%22menuitem%22%29%3B%0A%20%20%20%20%20%20%20menuitem.setAttribute%28%22label%22%2C%20label%29%3B%0A%20%20%20%20%20%20%20menuitem.insertText%20%3D%20insertText%3B%0A%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20if%20%28insertText%20%3D%3D%20theSeparator.substring%281%2C%20theSeparator.length%29%20%7C%7C%0A%20%20%20%20%20%20%20%20%20%20%20insertText%20%3D%3D%20cursorIndex%20+%20cursorIndex%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menuitem.style.fontWeight%20%3D%20%20%20%22bold%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menuitem.style.color%20%20%20%20%20%20%3D%20%20%20%22rgb%28183%2C53%2C47%29%22%3B%20%20%7D%0A%20%20%20%20%20%20%20%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%0A%20%20%20menuitem.inserter%20%3D%20function%20inserter%28aText%29%20%7B%0A%0A%20%20%20%20%20var%20firstPart%20%3D%20aText.split%28cursorIndex%29%5B0%5D%3B%0A%20%20%20%20%20var%20cursorPosition%20%3D%20place.selectionStart%20+%20firstPart.length%3B%0A%20%20%20%20%20var%20cursorIndexPresent%20%3D%20aText.length%20%21%3D%20firstPart.length%3B%0A%20%20%20%20%20aText%20%3D%20aText.replace%28cursorIndex%2C%20%22%22%29%3B%0A%20%20%20%20%20if%20%28aText%20%3D%3D%20cursorIndex%29%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20cursorPosition%20%3D%20place.selectionStart%20+%20cursorIndex.length%3B%0A%0A//-----------------------------------------------------------------------------------%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A//http%3A//forum.mozilla-russia.org/viewtopic.php%3Fpid%3D450336%23p450336%0A%0A%20%20var%20cmd%20%3D%20%22cmd_insertText%22%3B%0A%20%20var%20controller%20%3D%20aDoc.commandDispatcher.getControllerForCommand%28cmd%29%3B%0A%20%20%0A%20if%28controller%20%26%26%20controller.isCommandEnabled%28cmd%29%29%20%7B%0A%0A%20%20%20%20controller%20%3D%20controller.QueryInterface%28Components.interfaces.nsICommandController%29%3B%0A%20%20%20%20var%20params%20%3D%20Components.classes%5B%22@mozilla.org/embedcomp/command-params%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.createInstance%28Components.interfaces.nsICommandParams%29%3B%0A%20%20%20%20params.setStringValue%28%22state_data%22%2C%20aText%29%3B%0A%20%20%20%20%0A%20%20%20%20controller.doCommandWithParams%28cmd%2C%20params%29%3B%20%7D%0A//------------------------------------------------------------------------------------%20%20%20%20%0A%0Aif%20%28allowSelection%20%26%26%20%21cursorIndexPresent%29%0A%20%20place.setSelectionRange%28place.selectionStart-aText.length%2C%20place.selectionStart%29%3B//%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u0438%u0435%20%u0432%u0441%u0442%u0430%u0432%u043B%u0435%u043D%u043D%u043E%u0433%u043E%0A%0Aelse%20place.selectionStart%20%3D%20place.selectionEnd%20%3D%20cursorPosition%3B%0A%0A%20%20%20%7D%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%0A%20%20var%20%20commandString%20%3D%20%22inserter%28event.target.insertText%29%22%3B%0A%20%20%20%20%20%20%20menuitem.setAttribute%28%22oncommand%22%2C%20commandString%29%3B%0A%20%20%20%20%20%20%20menupopup.appendChild%28menuitem%29%3B%0A%20%7D%0A%20%0A%20if%20%28onSelf%29%20items%20%3D%20thisCB.Help.split%28theSeparator%29%3B%0A%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20button%3B%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A//%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%0A%0Afunction%20isButtonAlredyPresent%28aDoc%29%20%7B%20//%20advice%20by%20Inforcatcher%0A%20%20%20%20%20%20%20%20%20%20%20%20%20return%20%21%21aDoc.getElementById%28insertButtonId%29%3B%20%7D%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0Avar%20oSvc%20%3D%20Components.classes%5B%22@mozilla.org/observer-service%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIObserverService%29%3B%0A%0Avar%20observer%20%3D%20%7B%20//%20thanks%20for%20Infocatcher%0A%0Aobserve%3A%20function%28subject%2C%20topic%2C%20data%29%20%7B%0A%20%20%20%20%20%20%20%20%20subject.addEventListener%28%22load%22%2C%20this%2C%20false%29%3B%20%7D%2C%0A%20%20%20%20%20%20%0AhandleEvent%3A%20function%28e%29%20%7B%0A%20%20%20%20var%20doc%20%3D%20e.target%3B%0A%20%20%20%20var%20win%20%3D%20doc.defaultView%3B%0A%20%20%20%20%20%20%20%20win.removeEventListener%28%22load%22%2C%20this%2C%20false%29%3B%0A%0A%20%20%20%20if%20%28doc.location.href.substring%280%2C%2041%29%20%21%3D%20editor%29%20return%3B%0A%0A%20%20%20%20if%20%28%21isButtonAlredyPresent%28doc%29%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20tabs%20%3D%20doc.getElementsByTagName%28%22tabs%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tabs%5B0%5D.appendChild%28createButton%28doc%29%29%3B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20setButtonDesign%28doc%29%20%20%20%20%20%20%7D%7D%7D%3B%0A%20%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%0Avar%20ww%20%3D%20Components.classes%5B%22@mozilla.org/embedcomp/window-watcher%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIWindowWatcher%29%3B%0A%0Avar%20activeWin%20%3D%20null%3B%20%20%20%20%20%20%20%20%20%0Athis.onmouseover%20%3D%20function%28%29%20%7B%20activeWin%20%3D%20ww.activeWindow%3B%20%7D%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%0Afunction%20alsoForTab%28evt%29%20%7B%20var%20doc%20%3D%20evt.target%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28doc.location.href.substring%280%2C%2041%29%20%21%3D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22chrome%3A//custombuttons/content/editor.xul%22%29%20return%3B%0A%0A%20%20%20%20%20if%20%28%21isButtonAlredyPresent%28doc%29%29%20%7B%20var%20tabs%20%3D%20doc.getElementsByTagName%28%22tabs%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tabs%5B0%5D.appendChild%28createButton%28doc%29%29%3B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20setButtonDesign%28doc%29%3B%20%7D%7D%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%0Athis.run%20%3D%20function%28%29%20%7B%0A%0A%20%20if%20%28%21this.off%29%20%20%7B%20oSvc.addObserver%28observer%2C%20%22domwindowopened%22%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20window.addEventListener%28%22DOMContentLoaded%22%2C%20alsoForTab%2C%20false%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20prefs.setBoolPref%28%22off%22%2C%20false%29%3B%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20if%20%28this.off%20%29%20%20%7B%20oSvc.removeObserver%28observer%2C%20%22domwindowopened%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20window.removeEventListener%28%22DOMContentLoaded%22%2C%20alsoForTab%2C%20false%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20prefs.setBoolPref%28%22off%22%2C%20true%29%3B%20%7D%0A%0A//------------------------------------------------------------------------------%0A%0A%20%20var%20tabContainer%20%3D%20gBrowser.mTabContainer%3B%0A%20%20var%20tabs%20%3D%20tabContainer.childNodes%3B%0A%0A%20%20for%20%28var%20t%20%3D%200%3B%20t%20%3C%20tabContainer.itemCount%3B%20t++%29%20%7B%20%0A%0A%20%20var%20pageDoc%20%3D%20tabs%5Bt%5D.linkedBrowser.contentDocument%3B%0A%20%20%0A%20%20if%20%28pageDoc.location.href.substring%280%2C%2041%29%20%21%3D%20editor%29%20continue%3B%0A%0A%20%20%20%20%20%20%20%20if%20%28%21this.off%29%20%7B%20if%20%28isButtonAlredyPresent%28pageDoc%29%29%20%20continue%3B%20%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20tbs%20%3D%20pageDoc.getElementsByTagName%28%22tabs%22%29%3B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tbs%5B0%5D.appendChild%28createButton%28pageDoc%29%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20setButtonDesign%28pageDoc%29%3B%20%7D%0A%0A%0A%20%20%20%20%20%20%20%20if%20%28this.off%29%20%7B%20var%20b%20%3D%20pageDoc.getElementById%28insertButtonId%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20while%20%28b%29%20%7B%20b%20%3D%20pageDoc.getElementById%28insertButtonId%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28b%29%20%7B%20b.parentNode.removeChild%28b%29%3B%20%7D%7D%7D%0A%20%20%7D%0A%0A//------------------------------------------------------------------------------%0A%0A%20%20var%20enumerator%20%3D%20ww.getWindowEnumerator%28%29%3B%0A%20%20var%20win%20%3D%20true%3B%0A%20%20while%20%28win%29%20%7B%20win%20%3D%20enumerator.getNext%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%21win%29%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20doc%20%3D%20win.document%3B%0A%0A%20%20%20%20%20%20%20if%20%28doc.location.href.substring%280%2C%2041%29%20%21%3D%20editor%29%20continue%3B%0A%0A%20%20%20%20%20%20%20%20if%20%28%21this.off%29%20%7B%20if%20%28isButtonAlredyPresent%28doc%29%29%20%20continue%3B%20%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20tbs%20%3D%20doc.getElementsByTagName%28%22tabs%22%29%3B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tbs%5B0%5D.appendChild%28createButton%28doc%29%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20setButtonDesign%28doc%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28win%20%3D%3D%20activeWin%29%20win.focus%28%29%3B%20%7D%0A%0A%20%20%20%20%20%20%20%20if%20%28this.off%29%20%7B%20var%20b%20%3D%20doc.getElementById%28insertButtonId%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20while%20%28b%29%20%7B%20b%20%3D%20doc.getElementById%28insertButtonId%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28b%29%20%7B%20b.parentNode.removeChild%28b%29%3B%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28win%20%3D%3D%20activeWin%29%20win.focus%28%29%3B%20%20%7D%7D%0A%20%20%20%20%7D%7D%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%0Aif%20%28this.off%29%20%7B%20this.image%20%3D%20this.imageOff%3B%20this.checked%20%3D%20false%3B%20return%3B%20%7D%0A%0Athis.run%28%29%3B%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%0Athis.onDestroy%20%3D%20function%28%29%20%7B%20//%20thanks%20for%20Infocatcher%2C%20again%0A%0A%20%20%20%20var%20on%20%3D%20%21this.off%3B%0A%20%20%20%20if%28on%29%20this.off%20%3D%20true%3B%0A%20%20%20%20this.run%28%29%3B%0A%20%20%20%20if%28on%29%20%7B%20this.off%20%3D%20false%3B%20prefs.setBoolPref%28%22off%22%2C%20false%29%3B%20%7D%7D%3B%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bthis.off%20%3D%20%21this.off%3B%0A%0Aif%20%20%28this.off%29%20%7B%20this.image%20%3D%20this.imageOff%3B%20this.checked%20%3D%20false%3B%20%7D%0A%0Aif%20%28%21this.off%29%20%7B%20this.image%20%3D%20this.imageOn%3B%20if%20%28this.allowChecked%29%20this.checked%20%3D%20true%3B%20%7D%0A%0Athis.run%28%29%3B%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5Bconsole%0A%0Avar%20aConsoleService%20%3D%20Components.classes%5B%22@mozilla.org/consoleservice%3B1%22%5D%0A%20%20%20%20.getService%28Components.interfaces.nsIConsoleService%29%3B%0Afunction%20c%28any%29%20%7B%20aConsoleService.logStringMessage%28any%29%3B%20%7D%0A%0Ac%28%22this%20%3D%20%22%20+%20this%29%3B%0A%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0A%u043A%u0443%u0440%u0441%u043E%u0440%u0447%u0438%u043A%0A%0A%u0437%u0434%u0435%u0441%u044C%3D%3E%60%3C%3D%u0437%u0434%u0435%u0441%u044C%0A%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0A%u0438.%u0442.%u0434%0A%u0438%20%u0442%u0430%u043A%20%u0434%u0430%u043B%u0435%u0435%2C%0A%u0438%20%u0442%u043E%u043C%u0443%20%u043F%u043E%u0434%u043E%u0431%u043D%u043E%u0435...%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Отсутствует

 

№451708-08-2012 23:51:13

SendAbuse
Участник
 
Группа: Members
Зарегистрирован: 08-03-2012
Сообщений: 113
UA: Firefox 11.0

Re: Custom Buttons

Infocatcher,  очередное наблюдение:

Запускаю Firefox 3.6.28, после старта - только одна пустая вкладка (Без имени)
Открываю кнопку через   Редактировать во вкладке...
Ничего не делаю - сразу закрываю эту вкладку
и тут закрывается весь Firefox

Если сделать тоже самое, но при двух открытых сначала пустых вкладках
то вкладка с кнопкой закрывается нормально
но эти две и некоторые из открытых после уже не закрыть

Отсутствует

 

№451809-08-2012 03:15:09

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 14.0

Re: Custom Buttons

SendAbuse пишет

Ничего не делаю - сразу закрываю эту вкладку

Видимо, с этим ничего не сделать – это происходит из-за обхода обертки для объекта window содержимого вкладки.
Для проверки можно закомментировать

Выделить код

Код:

unwrap(win).arguments = [param];

(будет открываться пустой редактор)


Undo Close Tabs List 0.3.0pre9 (2012-08-09)
x Исправлено обновление меню после очистки списка закрытых вкладок
x Исправлено применение стилей кнопки (в SeaMonkey стили применялись к кнопкам с тем же id в окнах почты)


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№451909-08-2012 05:34:35

SendAbuse
Участник
 
Группа: Members
Зарегистрирован: 08-03-2012
Сообщений: 113
UA: Firefox 11.0

Re: Custom Buttons

okkamas_knife,  вот захотелось, чтобы при открытии кнопки
через   Редактировать во вкладке... ,  в адресной строке  и  во вкладке отображалась
иконка самой редактируемой кнопки.  Оказалось, достаточно заменить

        iconLink.href = "chrome://custombuttons-context/content/icons/default/custombuttonsEditor.ico";

на    iconLink.href = rawParam.image;

Как думаешь - хорошая идея ? ( себе-то точно так оставлю )

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

Да, и как там CustomPaste, работает ?

Отредактировано SendAbuse (09-08-2012 05:51:27)

Отсутствует

 

№452009-08-2012 09:05:42

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 14.0

Re: Custom Buttons

okkamas_knife пишет

а если при открытии в табе скрывать кнопку отмена? чтоб хоть както обезопаситься от подобных закрытий.

Да там не в отмене дело – из-за вмешательства в содержимое вкладки ломается встроенный механизм закрытия вкладок:

chrome://browser/content/tabbrowser.xml

Выделить код

Код:

<method name="removeTab">
        <parameter name="aTab"/>
        <body>
          <![CDATA[
            this._endRemoveTab(this._beginRemoveTab(aTab, false, null, true));
          ]]>

        </body>
      </method>

=>

Выделить код

Код:

<method name="_beginRemoveTab">
        ...
            // Remove the tab's filter and progress listener.
            const filter = this.mTabFilters[aTab._tPos];
            browser.webProgress.removeProgressListener(filter);

=>

Выделить код

Код:

Ошибка: browser.webProgress is undefined
Источник: chrome://browser/content/tabbrowser.xml
Строка: 1524

SendAbuse пишет

Оказалось, достаточно заменить

        iconLink.href = "chrome://custombuttons-context/content/icons/default/custombuttonsEditor.ico";

на    iconLink.href = rawParam.image;

Как думаешь - хорошая идея ? ( себе-то точно так оставлю )

Я про это думал, было лень разбираться со стандартными цветными звездочками. :)

Добавлено 09-08-2012 09:29:09
Пожалуй, с разными иконками и правда удобнее: editCustomButtonInTab.js

Отредактировано Infocatcher (09-08-2012 09:29:09)


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№452109-08-2012 10:24:21

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 14.0

Re: Custom Buttons

okkamas_knife пишет

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

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

okkamas_knife пишет

иконка для него

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

Отредактировано Infocatcher (09-08-2012 10:25:13)


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№452209-08-2012 11:03:04

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 14.0

Re: Custom Buttons

okkamas_knife пишет

а можно сделать чтоб перед закрытием если это единственная вкладка то сначала открывается пустая а потом уже идёт закрытие?

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

okkamas_knife пишет

глянь такой вариант для тёмных тем

Да лично мне не надо, это все темный фон при открытии картинок – вот и обратил внимание. :)
Просто удобнее универсальную иконку.
Мне вообще некликающиеся кнопки не по душе, если уж на то пошло. :D


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№452309-08-2012 12:31:04

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 14.0

Re: Custom Buttons

okkamas_knife
Можно, только код не будет работать в Linux. Если не починили еще, конечно.
См. console2-0.9-fx+tb+sb+sm+fn.xpi\chrome\console2.jar\content\console2\console2.js
Переключатель:

Выделить код

Код:

var xulWin = window.QueryInterface(Ci.nsIInterfaceRequestor)
    .getInterface(Ci.nsIWebNavigation)
    .QueryInterface(Ci.nsIDocShellTreeItem)
    .treeOwner
    .QueryInterface(Ci.nsIInterfaceRequestor)
    .getInterface(Ci.nsIXULWindow);
xulWin.zLevel = xulWin.zLevel > xulWin.normalZ ? xulWin.normalZ : xulWin.raisedZ;

А код для добавления кнопок в редактор уже есть.

Добавлено 09-08-2012 12:34:17
Теперь работает при восстановлении закрытых вкладок: editCustomButtonInTab.js
Только упорно не желает при восстановлении сессии делать активной последнюю вкладку с редактором.

Добавлено 09-08-2012 12:51:42
Ах да, и пламенный привет разработчикам SeaMonkey:
Using the session store API in SeaMonkey

Отредактировано Infocatcher (09-08-2012 12:51:42)


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№452409-08-2012 13:54:41

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 14.0

Re: Custom Buttons

Infocatcher пишет

Ах да, и пламенный привет разработчикам SeaMonkey:
Using the session store API in SeaMonkey

Ладно хоть в данном случае можно обойтись без полной эмуляции события SSTabRestoring.
Вроде, заработало: editCustomButtonInTab.js


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№452509-08-2012 14:26:31

SendAbuse
Участник
 
Группа: Members
Зарегистрирован: 08-03-2012
Сообщений: 113
UA: Firefox 11.0

Re: Custom Buttons

okkamas_knife,  посмотрел немного кнопку Make icons line  -  понравилась.

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

Из субъективных мелочей:  себе что-то захотелось иконки чуток раздвинуть.
Визуальная разница:

vZjFqdA

Выделить код

Код:

const fiveAlphaPixels = "data:image/x-icon;base64,AAABAAEABQEAAAEAIABAAAAAFgAAACgAAAAFAAAAAgAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjgrEE=";
var datahtm = datahtm + arrayOfStrings[i] + "><img src=" + fiveAlphaPixels + "><img src=data:image/";

Не знаю стоит ли обдумывать фичу, чтобы кнопка ещё и переписала
буфер обмена, в смысле сама расставила нужные BBCode-теги, или чего ещё...
(да, кстати, какой тег для спойлера ?)

(UPD:  :dumb: del UPD)

Отредактировано SendAbuse (09-08-2012 15:45:54)

Отсутствует

 

Board footer

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