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

Будьте в курсе последних изменений в мире Mozilla, следя за нашим микроблогом в Twitter.

№1657610-10-2022 19:46:13

ВВП
Участник
 
Группа: Members
Зарегистрирован: 13-03-2021
Сообщений: 336
UA: Firefox 105.0

Re: Custom Buttons

Dumby
Класс ! Про кавычки то забыл...Да, не посмотрите ,где косяк в 105, после перетрубаций почто любых , то пункт двоится, то икона пропадает

Выделить код

Код:

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%3E%u041F%u043E%u0438%u0441%u043A%20%20Image%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAGABoAwAAFgAAACgAAAAQAAAAIAAAAAEAGAAAAAAAQAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACJWQB9QgCGZACCSACPRgB1TwCDYgB+UQCMVwB3WgCNRQCBTgB2WACDagAAAACRSgD/mRf/pyj/pAr/mSD/nCL/ph//nBz/mhv/mhH/mRz/mhn/mif/oyH/nBxxUAD/jhP/hwr/jwX/hQH/iQj/fgD/hQv/ggH/jgftgwDofgD/iAP/iQb/fQH/igb/gwz/iAL/jxz/jxj/kA//jhH/zH7/15z/y5f/1Yv/6pT/nirVZwD/hQj/iAX0fwD/hgD/lg//mA7/kQ3/mBT/3YL/ulv7WQDJSQDfYQD/giD/zKX/ty7yhQD/hQf/gAD/ihD/oBX/nRr/lhP/t2P/wnyjQAC6UQC1VQC7UgDMZQD/dAv/3LjldQD/igL/hgv/kgD/nRf/oyf/mw3/0ZnfZQCGPACmQQDBSwC2RgDDTADTVQD/t3n/nDr/hAL8hQD/hQf/piL/ohv/nR//3m2sYAB/LACaKwC3QwCySACxRQDcUgD/tln/pCr/iwH/hgD/iQH/pB3/qS3/niL/y33kcAB0LwBnJwCEOgCfTACgSAC7TAD/uG7/nRz/hAj/iAP/iAD/rC//rS7/qxj/uTz/xpdhLQBwKgBsLABvOACXNwDnXQD/2qf/lgj/mET/t2r/gxP/tTf/tif/qTP/riD/1Hv/2Xa1WAB/KgBuJgD1cAD/3Zj/r03/mwP/x3f/+OT/jAwAAAD/wTn/ty3/rzv/syb/uV//4qX/6p//4q//24X/qzL/oBP/lwr/kQz/igIAAAAAAAAAAAAAAAAAAAD/tzT/oyf/sSn/sCL/pyj/mx7/mSX/lAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/sSr/riX/qTj/qRf/oxH/pBUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAAgAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQAA8A8AAPgfAAD//wAA%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E2%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u043F%u043E%u0434%u043C%u0435%u043D%u044E%20%22%u041F%u043E%u0438%u0441%u043A%20%u0438%u0437%u043E%u0431%u0440%u0430%u0436%u0435%u043D%u0438%u044F%20%u0432%22%20%u0432%20%u043A%u043E%u043D%u0442%u0435%u043A%u0441%u0442%u043D%u043E%u043C%20%u043C%u0435%u043D%u044E%20%u0438%u0437%u043E%u0431%u0440%u0430%u0436%u0435%u043D%u0438%u0439%2C%20%u043E%u0442%2002.06.2019.%20.............%0A%28%28%29%3D%3E%20%7B%0A%20%20%20var%20copyimage%20%3D%20document.getElementById%28%22context-copyimage-contents%22%29%3B%0A%20%20%20var%20contextMenu%20%3D%20copyimage.parentNode%3B%0A%0A%20%20var%20array%20%3D%20%5B%0A%20%20%20%20%20%20%5B%27Google%27%2C%20%27https%3A//www.google.lv/favicon.ico%27%2C%20%27http%3A//www.google.com/searchbyimage%3Fimage_url%3D%27%5D%2C%0A%20%20%20%20%20%20%5B%27%u042F%u043D%u0434%u0435%u043A%u0441%27%2C%20%27http%3A//yastatic.net/morda-logo/i/favicon_islands.ico%27%2C%20%27https%3A//yandex.com/images/search%3Frpt%3Dimageview%26img_url%3D%27%5D%2C%0A%20%20%20%20%20%20%5B%27Bing%27%2C%20%27https%3A//www.bing.com/s/a/bing_p.ico%27%2C%20%27https%3A//www.bing.com/images/searchbyimage%3FFORM%3DIRSBIQ%26cbir%3Dsbi%26imgurl%3D%27%5D%2C%0A%20%20%20%20%20%20%5B%27Tineye%27%2C%20%27http%3A//tineye.com/favicon.ico%27%2C%20%27http%3A//tineye.com/search%3Fpluginver%3Dbookmark_1.0%26url%3D%27%5D%2C%0A%20%20%20%20%20%20%5B%27SauceNao%27%2C%20%27https%3A//saucenao.com/favicon.ico%27%2C%20%27https%3A//saucenao.com/search.php%3Furl%3D%27%5D%2C%0A%20%20%20%20%20%20%5B%27IQDB%27%2C%20%27https%3A//iqdb.org/favicon.ico%27%2C%20%27https%3A//iqdb.org/%3Furl%3D%27%5D%2C%0A%20%20%20%5D%3B%0A%20%20%0A%20%20%20var%20menu%20%3D%20contextMenu.insertBefore%28document.createXULElement%28%22menu%22%29%2C%20copyimage%29%3B%20%0A%20%20%20menu.setAttribute%28%22label%22%2C%20%22%u041F%u043E%u0438%u0441%u043A%20%u0438%u0437%u043E%u0431%u0440%u0430%u0436%u0435%u043D%u0438%u044F%20%u0432%20...%22%29%3B%0A%20%20%20menu.setAttribute%28%22class%22%2C%20%22menu-iconic%22%29%3B%0A%20%20%20menu.setAttribute%28%22image%22%2C%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAGABoAwAAFgAAACgAAAAQAAAAIAAAAAEAGAAAAAAAQAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACJWQB9QgCGZACCSACPRgB1TwCDYgB+UQCMVwB3WgCNRQCBTgB2WACDagAAAACRSgD/mRf/pyj/pAr/mSD/nCL/ph//nBz/mhv/mhH/mRz/mhn/mif/oyH/nBxxUAD/jhP/hwr/jwX/hQH/iQj/fgD/hQv/ggH/jgftgwDofgD/iAP/iQb/fQH/igb/gwz/iAL/jxz/jxj/kA//jhH/zH7/15z/y5f/1Yv/6pT/nirVZwD/hQj/iAX0fwD/hgD/lg//mA7/kQ3/mBT/3YL/ulv7WQDJSQDfYQD/giD/zKX/ty7yhQD/hQf/gAD/ihD/oBX/nRr/lhP/t2P/wnyjQAC6UQC1VQC7UgDMZQD/dAv/3LjldQD/igL/hgv/kgD/nRf/oyf/mw3/0ZnfZQCGPACmQQDBSwC2RgDDTADTVQD/t3n/nDr/hAL8hQD/hQf/piL/ohv/nR//3m2sYAB/LACaKwC3QwCySACxRQDcUgD/tln/pCr/iwH/hgD/iQH/pB3/qS3/niL/y33kcAB0LwBnJwCEOgCfTACgSAC7TAD/uG7/nRz/hAj/iAP/iAD/rC//rS7/qxj/uTz/xpdhLQBwKgBsLABvOACXNwDnXQD/2qf/lgj/mET/t2r/gxP/tTf/tif/qTP/riD/1Hv/2Xa1WAB/KgBuJgD1cAD/3Zj/r03/mwP/x3f/+OT/jAwAAAD/wTn/ty3/rzv/syb/uV//4qX/6p//4q//24X/qzL/oBP/lwr/kQz/igIAAAAAAAAAAAAAAAAAAAD/tzT/oyf/sSn/sCL/pyj/mx7/mSX/lAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/sSr/riX/qTj/qRf/oxH/pBUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAAgAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQAA8A8AAPgfAAD//wAA%22%29%3B%0A%20%20%20menu.onclick%20%3De%3D%3E%20%7B%20e.target.nodeName%20%3D%3D%20%27menu%27%20%26%26%20search%28array%5B0%5D%5B2%5D%29%3B%20setTimeout%28%28%29%3D%3E%20contextMenu.hidePopup%28%29%2C%2020%29%20%7D%3B%0A%20%20%20addEventListener%28%22popupshowing%22%2C%20%28%29%3D%3E%20menu.hidden%20%3D%20copyimage.hidden%2C%20true%2C%20contextMenu%29%3B%0A%20%20%20addDestructor%28%28%29%3D%3E%20menuitem.remove%28%29%29%3B%0A%0A%20%20%20var%20menuPopup%20%3D%20menu.appendChild%28document.createXULElement%28%22menupopup%22%29%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20array.forEach%28m%3D%3E%20%7B%0A%20%20%20%20%20%20var%20mItem%20%3D%20menuPopup.appendChild%28document.createXULElement%28%22menuitem%22%29%29%3B%0A%20%20%20%20%20%20mItem.setAttribute%28%22label%22%2C%20m%5B0%5D%29%3B%20%20%20%20%20%20%20%0A%20%20%20%20%20%20mItem.setAttribute%28%22image%22%2C%20m%5B1%5D%29%3B%0A%20%20%20%20%20%20mItem.setAttribute%28%22class%22%2C%20%22menuitem-iconic%22%29%3B%0A%20%20%20%20%20%20mItem.onclick%20%3D%28%29%3D%3E%20search%28m%5B2%5D%29%3B%0A%20%20%20%7D%29%3B%0A%20%20%20%0A%20%20%20%20%20%20%20%0A%20%20%0A%20%20%20%0A%20%20%20function%20search%28finder%29%20%7B%20gBrowser.selectedTab%20%3D%20gBrowser.addTrustedTab%28finder%20+%20encodeURIComponent%28gContextMenu.MediaURL%29%29%20%7D%3B%0A%20%20%0A%20%20%20var%20mItem%20%3D%20menuPopup.appendChild%28document.createXULElement%28%22menuitem%22%29%29%3B%0A%20%20%20mItem.setAttribute%28%22label%22%2C%20%27%u0418%u0441%u043A%u0430%u0442%u044C%20%u0432%u043E%20%u0432%u0441%u0435%u0445%20%u043F%u043E%u0438%u0441%u043A%u043E%u0432%u0438%u043A%u0430%u0445%27%29%3B%0A%20%20%20%20%20mItem.setAttribute%28%22class%22%2C%22menuitem-iconic%22%29%3B%0A%20%20%20%20%20%20%20%20mItem.setAttribute%28%22image%22%2C%20%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADZElEQVR42oXSe0xbVRwH8N8597a35e7SAmUFukGhY66AMiNzw4GvTCQLCssc4pQsmTOa+ERMlrktW1zigpnEuWn8x2eMmiVGMBDCFjS+cJHEDIk8RoSNV1+3tLWX3t72nnO8sETJFrfvP7/k5Pw+Ob9fDoLrYi8ow9GFUbq+5aRLrGraqQcX6hlF2wkFEWn6EDIJAyQy9+3VT58cWb6PrmvmjGZS/FSHlxbXtbtLobGqJlPKMhNepWb0V8hKpi8FNd/gzCCogbdmvtg/8C9gz9+Eor5x5nn2tDOZ98Dx2i3C/uYai9mOGCxiDQIIg1/PgUCEhyvDMox9PXYBkPzaaoAzAFL0yle7ShtqO/eWJ9w1vJ1oGsVzYhTNATMQG4Q1G40ldDw6PB339fs7VgMmA0jnHfioo6F9Z3tDYYJzKSZKMYcDvAILiICfZUNYEYFixMKpKBk8MfTTasBsACnngU/6Wg4+VL/VFSOmBHAYY1BAhzAvgmyMEIkh0EUOBD1Eu49eStwA5D3z4TcPv9TYdHvxEhXSGgaEIMkJkKAS+ONmSKYolOVqMBlRSd8bv8v/AQXlJoiHUE5rZ1tFa/Nhj1uVrCaNMoQxYSaIqDxAGqAuQ2XZ1iS8HUTpkZMXe1eATOdtiCcJblGe1a3PnWp0uEvfv3tbeX5RhSet/q3wxh6xgAncZUmw2hxEryQx9/LHE7I2RV5HNudGFAtcZsuQd919u/kiz56JOwobcjd6xerqKnB4HIB4RvMzCM1DGj8X0GD64pL2Xdf850z+4djKC8wl24XUpj1P75sdfe/+sSHoq3uQnSuwa+s2Vy5uubd2jQWUTAYchJK8HpyIzvv7p/rMkV/OzPeeGEWi+x6LufiR573h8VO7Zr4n9fEZNeiqXHOofFvPsKPkS1fKsX5JU6uNZQh8Wh/hRcuvOC3/fLXrcGj52yOo7zzU9udvbzbN9uglggK2MhsnvfiE0tY9tfed7vM98D+x53tx1DdG0Z2b97Ejf3SRSiGGCysyENvdoipZa4+/8NmPp8+N+Ei2ZEVpQhG71rdcqFFozD+xcoQugFUvlDS8wWsl8Uebk5C79ujjHwyc6R/309ysDBRauEzhJkG9ErAdG0xEe6yVkwqcr+549/zZgcmQ7pAEkH2TDG6RfwCoJI0uEWJP5QAAAABJRU5ErkJggg%3D%3D%22%29%3B%20%20%20%0A%20%20%20mItem.onclick%20%3D%28%29%3D%3E%20%7B%20array.forEach%28m%3D%3E%20%7B%20%20gBrowser.selectedTab%20%3D%20gBrowser.addTrustedTab%28m%5B2%5D%20+%20encodeURIComponent%28gContextMenu.MediaURL%29%29%20%7D%29%20%7D%3B%0A%20%20%0A%7D%29%28%29%3B%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5C%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Отсутствует

 

№1657710-10-2022 20:37:51

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

Re: Custom Buttons

ВВП пишет

то пункт двоится, то икона пропадает

Ты прикалываешься? :)
Объяснял в сообщении прямо перед твоим вопросом про setToolbarVisibility.

Отсутствует

 

№1657810-10-2022 20:52:13

ВВП
Участник
 
Группа: Members
Зарегистрирован: 13-03-2021
Сообщений: 336
UA: Firefox 105.0

Re: Custom Buttons

Dumby

Dumby пишет

про setToolbarVisibility.

Да я за кнопку Искать изображение , и там кавычки ?

Отсутствует

 

№1657910-10-2022 21:28:56

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

Re: Custom Buttons

ВВП пишет

Да я за кнопку Искать изображение

А я за сообщение, которое прямо перед твоим вопросом про setToolbarVisibility.

Отсутствует

 

№1658011-10-2022 00:04:01

kazarin
Участник
 
Группа: Members
Зарегистрирован: 23-11-2016
Сообщений: 85
UA: unknown 0.0

Re: Custom Buttons

Dumby

Dumby пишет

Вот это новость.

Так я впервые вижу, чтоб кнопка себя дублировала))

Dumby пишет

Заметил что у дублката нет иконки?
Это, как говорится, «здесь вам не XBL». Вот так лучше уже не делать

А начиная с какой версии так не делать? Или в принципе вообще ни на какой?
Огромное спасибо за объяснение и поправки! Всё переделал, больше не двоится, иконка на месте)) код в сообщении выше тоже поправил.
И можно ещё один вопрос по картинкам в контекстном меню? Есть старый код для [firefox], работает в PM. Иконку для menu я ему сделал без проблем, а вот для menuitem идёт перебор объектов, или как он правильно называется, не знаю, вот то, что вы сделали в расширении, ${id}. И у меня не получается его сделать, пробовал варианты из других скриптов и из работающих вариантов OpenWith, или меню совсем пропадает, или вот такой вариант выдаёт:

скрытый текст
N4YYNe5m.png

Весь скрипт

Выделить код

Код:

/* OpenURLWith.uc.js
* Open an application with the current page's URL.
*/

(function OpenURLWith() {
    if (location != "chrome://browser/content/browser.xul") return;
    const MENU_LABEL = "Открыть в...";
    const MENU_ACCESSKEY = "ö";

    const FIREFOX_PATH = "H:\\Browsers\\mypal-68.12.4.en-US.win32\\mypal\\mypal.exe";
    const IE_PATH = "E:\\Portable\\Browsers\\360 Extreme Explorer\\X-360cse.exe";
    const OPERA_PATH = "E:\\Portable\\Browsers\\palemoonNM28XP\\nm\\palemoon.exe";
    const CHROME_PATH = "E:\\Portable\\Citrio50Portable\\Citrio.exe";
	
    var mMenus = [
        {
            label: "mypal-68 (Link)",
            accesskey: "F",
            application: FIREFOX_PATH,
            get url() { return gContextMenu.linkURL; },
            get shouldDisplay() { return gContextMenu.onLink; }
        },
        {
            label: "360 Extreme Explorer (Link)",
            accesskey: "I",
            application: IE_PATH,
            get url() { return gContextMenu.linkURL; },
            get shouldDisplay() { return gContextMenu.onLink; }
        },
        {
            label: "NewMoon 28 (Link)",
            accesskey: "O",
            application: OPERA_PATH,
            get url() { return gContextMenu.linkURL; },
            get shouldDisplay() { return gContextMenu.onLink; }
        },
        {
            label: "Citrio (Link)",
            accesskey: "C",
            application: CHROME_PATH,
            get url() { return gContextMenu.linkURL; },
            get shouldDisplay() { return gContextMenu.onLink; }
        },
        {
            label: "-",
            get shouldDisplay() { return gContextMenu.onLink; }
        },
        {
            label: "mypal-68 (Seite)",
            accesskey: "F",
            application: FIREFOX_PATH,
            get url() { return content.location.href; },
        },
        {
            label: "360 Extreme Explorer (Seite)",
            accesskey: "I",
            application: IE_PATH,
            get url() { return content.location.href; },
        },
        {
            label: "NewMoon 28 (Seite)",
            accesskey: "O",
            application: OPERA_PATH,
            get url() { return content.location.href; },
        },
        {
            label: "Citrio (Seite)",
            accesskey: "C",
            application: CHROME_PATH,
            get url() { return content.location.href; },
        },
        {
            label: "-",
            get shouldDisplay() { return gContextMenu.inFrame; }
        },
        {
            label: "mypal-68",
            accesskey: "F",
            application: FIREFOX_PATH,
            get url() { return document.commandDispatcher.focusedWindow.location.href; },
            get shouldDisplay() { return gContextMenu.inFrame; }
        },
        {
            label: "360 Extreme Explorer",
            accesskey: "I",
            application: IE_PATH,
            get url() { return document.commandDispatcher.focusedWindow.location.href; },
            get shouldDisplay() { return gContextMenu.inFrame; }
        },
        {
            label: "NewMoon 28",
            accesskey: "O",
            application: OPERA_PATH,
            get url() { return document.commandDispatcher.focusedWindow.location.href; },
            get shouldDisplay() { return gContextMenu.inFrame; }
        },
        {
            label: "Citrio",
            accesskey: "C",
            application: CHROME_PATH,
            get url() { return document.commandDispatcher.focusedWindow.location.href; },
            get shouldDisplay() { return gContextMenu.inFrame; }
        }
    ];

    init: {
        let parentMenu = document.createElement("menu");
        parentMenu.setAttribute("label", MENU_LABEL);
        parentMenu.setAttribute("id", "ucjs_openurlwith-menu");
		parentMenu.setAttribute("class", "menu-iconic");
		parentMenu.setAttribute("image", "about:logo");
        if (typeof MENU_ACCESSKEY != "undefined" && MENU_ACCESSKEY)
            parentMenu.setAttribute("accesskey", MENU_ACCESSKEY);
        document.getElementById("contentAreaContextMenu").insertBefore(
            parentMenu, document.getElementById("context-sep-properties"));

        let parentPopup = document.createElement("menupopup");
        parentPopup.id = "ucjs_openurlwith-popup";
        parentPopup.addEventListener("command", openApplication, false);
        parentMenu.appendChild(parentPopup);

        for (let i = 0, menu; menu = mMenus[i]; i++) {
            let menuItem;
            if (menu.label == "-") {
                menuItem = document.createElement("menuseparator");
            } else {
            menuItem = document.createElement("menuitem");
            menuItem.setAttribute("label", menu.label);
            menuItem.setAttribute("id", "ucjs_openurlwith-"+menu.label.replace(/[()\s]/g,""));
	    menuItem.setAttribute("class", "menuitem-iconic"); 
	    menuItem.setAttribute("image", "moz-icon://file://" + menu.label.Path); 
		
            if ("accesskey" in menu)
                menuItem.setAttribute("accesskey", menu.accesskey);
            menuItem.ouwMenu = menu;
        }
        parentPopup.appendChild(menuItem);
    }

    parentMenu.parentNode.addEventListener("popupshowing", setMenuDisplay, false);
}

function openApplication(aEvent) {
    var menu = aEvent.target.ouwMenu;

    var app = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
    app.initWithPath(menu.application);
    if (!app.exists()) {
        alert("Die Datei existiert nicht: " + menu.application);
        return;
    }

    Cc["@mozilla.org/browser/shell-service;1"]
    .getService(Ci.nsIShellService_MOZILLA_1_8_BRANCH || Ci.nsIShellService)
    .openApplicationWithURI(app, menu.url);
}

function setMenuDisplay() {
    var menuItems = document.getElementById("ucjs_openurlwith-popup").childNodes;
    for (var i = 0, menu; menu = mMenus[i]; i++)
        menuItems[i].hidden = "shouldDisplay" in menu && !menu.shouldDisplay || menu.application=='';
}

})();

Отредактировано kazarin (12-10-2022 21:00:36)

Отсутствует

 

№1658111-10-2022 13:26:56

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

Re: Custom Buttons

kazarin пишет

А начиная с какой версии так не делать? Или в принципе вообще ни на какой?

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

идёт перебор объектов, или как он правильно называется, не знаю

Идёт перебор элементов массива, а каждый из элементов
этого массива является объектом, так что да, «перебор объектов» подходит.

Иконку для menu я ему сделал без проблем, а вот для menuitem

Вот, например, если заменить эту странную строку

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

Выделить код

Код:

/*
	    menuItem.setAttribute("image", "moz-icon://file://" + menu.label.Path); 
*/
	    menuItem.setAttribute("image", menu.image || "moz-icon://file://" + menu.application);


то будет так: если в каком-то объекте (тех, которых идёт перебор, кроме сепараторского, конечно)
прописать свойство image, то на menuitem будет установлен атрибут image
со значением этого свойства (если значение не какое-нибудь falsy, разумеется),


иначе, как видимо и было задумано, автоматически, то есть moz-icon://file:…
и браузер сам притащит иконку из приложения, если получится.

Отсутствует

 

№1658211-10-2022 14:49:15

kazarin
Участник
 
Группа: Members
Зарегистрирован: 23-11-2016
Сообщений: 85
UA: unknown 0.0

Re: Custom Buttons

Dumby пишет

Вот, например, если заменить эту странную строку

Да это я её придумал)) изначально никаких иконок в скрипте не было.
Спасибо за разъяснение!

Отсутствует

 

№1658317-10-2022 03:19:03

brake
Участник
 
Группа: Members
Зарегистрирован: 05-05-2022
Сообщений: 14
UA: Firefox 106.0

Re: Custom Buttons

Dom inspector can not be enabled in firefox 106

ReferenceError: getDocument is not defined

Отредактировано brake (17-10-2022 03:19:39)

Отсутствует

 

№1658419-10-2022 09:09:13

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

Re: Custom Buttons

Родили, наконец-то, AppConstants.sys.mjs. Оставили var AppConstants.
Антиподписячий код, чуть стройнее, надеюсь.

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

Выделить код

Код:

//
try {(jsval => {
	var dbg, gref, genv = func => {
		var sandbox = new Cu.Sandbox(g, {freshCompartment: true});
		Cc["@mozilla.org/jsdebugger;1"].createInstance(Ci.IJSDebugger).addClass(sandbox);
		(dbg = new sandbox.Debugger()).addDebuggee(g);
		gref = dbg.makeGlobalObjectReference(g);
		return (genv = func => func && gref.makeDebuggeeValue(func).environment)(func);
	}
	var g = Cu.getGlobalForObject(jsval), o = g.Object, {freeze} = o, disleg;

	var lexp = () => lockPref("extensions.experiments.enabled", true);
	var MRS = "MOZ_REQUIRE_SIGNING", AC = "AppConstants", uac = `resource://gre/modules/${AC}.`;

	if (o.isFrozen(o)) { // Fx 102.0b7+
		lexp(); disleg = true; genv();

		dbg.onEnterFrame = frame => {
			var {script} = frame;
			try {if (!script.url.startsWith(uac)) return;} catch {return;}
			dbg.onEnterFrame = undefined;

			if (script.isModule) { // ESM, Fx 108+
				var env = frame.environment;
				frame.onPop = () => env.setVariable(AC, gref.makeDebuggeeValue(freeze(
					o.assign(new o(), env.getVariable(AC).unsafeDereference(), {[MRS]: false})
				)));
			}
			else { // JSM
				var nsvo = frame.this.unsafeDereference();
				nsvo.Object = {freeze(ac) {
					ac[MRS] = false;
					delete nsvo.Object;
					return freeze(ac);
				}};
			}
		}
	}
	else o.freeze = obj => {
		if (!Components.stack.caller.filename.startsWith(uac)) return freeze(obj);
		obj[MRS] = false;

		if ((disleg = "MOZ_ALLOW_ADDON_SIDELOAD" in obj)) lexp();
		else
			obj.MOZ_ALLOW_LEGACY_EXTENSIONS = true,
			lockPref("extensions.legacy.enabled", true);

		return (o.freeze = freeze)(obj);
	}
	lockPref("xpinstall.signatures.required", false);
	lockPref("extensions.langpacks.signatures.required", false);

	var useDbg = true, xpii = "resource://gre/modules/addons/XPIInstall.";
	if (Ci.nsINativeFileWatcherService) { // Fx < 100
		jsval = Cu.import(xpii + "jsm", {});
		var shouldVerify = jsval.shouldVerifySignedState;
		if (shouldVerify.length == 1)
			useDbg = false,
			jsval.shouldVerifySignedState = addon => !addon.id && shouldVerify(addon);
	}
	if (useDbg) { // Fx 99+
		try {var exp = ChromeUtils.importESModule(xpii + "sys.mjs");}
		catch {exp = g.ChromeUtils.import(xpii + "jsm");}
		jsval = o.assign({}, exp);

		var env = genv(jsval.XPIInstall.installTemporaryAddon);
		var ref = name => {try {return env.find(name).getVariable(name).unsafeDereference();} catch {}}
		jsval.XPIDatabase = (ref("lazy") || {}).XPIDatabase || ref("XPIDatabase");

		var proto = ref("Package").prototype;
		var verify = proto.verifySignedState;
		proto.verifySignedState = function(id) {
			return id ? {cert: null, signedState: undefined} : verify.apply(this, arguments);
		}
		dbg.removeAllDebuggees();
	}
	if (disleg) jsval.XPIDatabase.isDisabledLegacy = () => false;
})(
	"permitCPOWsInScope" in Cu ? Cu.import("resource://gre/modules/WebRequestCommon.jsm", {}) : Cu
);}
catch(ex) {Cu.reportError(ex);}

Отсутствует

 

№1658519-10-2022 15:49:03

kokoss
Участник
 
Группа: Members
Зарегистрирован: 15-02-2018
Сообщений: 1736
UA: Firefox 106.0

Re: Custom Buttons

Dumby
:beer:, этот код для [firefox] 106+ ?

Отредактировано kokoss (19-10-2022 15:49:43)


Win7

Отсутствует

 

№1658619-10-2022 16:41:49

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

Re: Custom Buttons

kokoss пишет

этот код для [firefox] 106+ ?

Хотелось бы думать, что это неважно.
Теоретическая совместимость кода где-то 65+.


Просто предыдущий вариант был записан в авральном порядке, на коленке,
и главная интрига виделась в том, будет ли var, или const (AppConstants).
Теперь, покамест, видно var.

Отсутствует

 

№1658719-10-2022 18:02:44

kokoss
Участник
 
Группа: Members
Зарегистрирован: 15-02-2018
Сообщений: 1736
UA: Firefox 106.0

Re: Custom Buttons

Dumby пишет

Теоретическая совместимость кода где-то 65+.

Просто предыдущий вариант был записан в авральном порядке, на коленке,
и главная интрига виделась в том, будет ли var, или const (AppConstants).
Теперь, покамест, видно var.

Даже так. Спасибо за инфу!


Win7

Отсутствует

 

№1658820-10-2022 13:45:04

Deriax
Участник
 
Группа: Members
Зарегистрирован: 27-03-2021
Сообщений: 37
UA: Yandex 22

Re: Custom Buttons

Нужно закрыть открывшееся окно (время от времени окно открывается). Пожалуйста, подскажите код (всё остальное сам напишу).

Отредактировано Deriax (20-10-2022 13:54:34)

Отсутствует

 

№1658920-10-2022 14:29:25

brake
Участник
 
Группа: Members
Зарегистрирован: 05-05-2022
Сообщений: 14
UA: Firefox 107.0

Re: Custom Buttons

Dumby пишет

Родили, наконец-то, AppConstants.sys.mjs. Оставили var AppConstants.
Антиподписячий код, чуть стройнее, надеюсь.

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

Выделить код

Код:

//
try {(jsval => {
	var dbg, gref, genv = func => {
		var sandbox = new Cu.Sandbox(g, {freshCompartment: true});
		Cc["@mozilla.org/jsdebugger;1"].createInstance(Ci.IJSDebugger).addClass(sandbox);
		(dbg = new sandbox.Debugger()).addDebuggee(g);
		gref = dbg.makeGlobalObjectReference(g);
		return (genv = func => func && gref.makeDebuggeeValue(func).environment)(func);
	}
	var g = Cu.getGlobalForObject(jsval), o = g.Object, {freeze} = o, disleg;

	var lexp = () => lockPref("extensions.experiments.enabled", true);
	var MRS = "MOZ_REQUIRE_SIGNING", AC = "AppConstants", uac = `resource://gre/modules/${AC}.`;

	if (o.isFrozen(o)) { // Fx 102.0b7+
		lexp(); disleg = true; genv();

		dbg.onEnterFrame = frame => {
			var {script} = frame;
			try {if (!script.url.startsWith(uac)) return;} catch {return;}
			dbg.onEnterFrame = undefined;

			if (script.isModule) { // ESM, Fx 108+
				var env = frame.environment;
				frame.onPop = () => env.setVariable(AC, gref.makeDebuggeeValue(freeze(
					o.assign(new o(), env.getVariable(AC).unsafeDereference(), {[MRS]: false})
				)));
			}
			else { // JSM
				var nsvo = frame.this.unsafeDereference();
				nsvo.Object = {freeze(ac) {
					ac[MRS] = false;
					delete nsvo.Object;
					return freeze(ac);
				}};
			}
		}
	}
	else o.freeze = obj => {
		if (!Components.stack.caller.filename.startsWith(uac)) return freeze(obj);
		obj[MRS] = false;

		if ((disleg = "MOZ_ALLOW_ADDON_SIDELOAD" in obj)) lexp();
		else
			obj.MOZ_ALLOW_LEGACY_EXTENSIONS = true,
			lockPref("extensions.legacy.enabled", true);

		return (o.freeze = freeze)(obj);
	}
	lockPref("xpinstall.signatures.required", false);
	lockPref("extensions.langpacks.signatures.required", false);

	var useDbg = true, xpii = "resource://gre/modules/addons/XPIInstall.";
	if (Ci.nsINativeFileWatcherService) { // Fx < 100
		jsval = Cu.import(xpii + "jsm", {});
		var shouldVerify = jsval.shouldVerifySignedState;
		if (shouldVerify.length == 1)
			useDbg = false,
			jsval.shouldVerifySignedState = addon => !addon.id && shouldVerify(addon);
	}
	if (useDbg) { // Fx 99+
		try {var exp = ChromeUtils.importESModule(xpii + "sys.mjs");}
		catch {exp = g.ChromeUtils.import(xpii + "jsm");}
		jsval = o.assign({}, exp);

		var env = genv(jsval.XPIInstall.installTemporaryAddon);
		var ref = name => {try {return env.find(name).getVariable(name).unsafeDereference();} catch {}}
		jsval.XPIDatabase = (ref("lazy") || {}).XPIDatabase || ref("XPIDatabase");

		var proto = ref("Package").prototype;
		var verify = proto.verifySignedState;
		proto.verifySignedState = function(id) {
			return id ? {cert: null, signedState: undefined} : verify.apply(this, arguments);
		}
		dbg.removeAllDebuggees();
	}
	if (disleg) jsval.XPIDatabase.isDisabledLegacy = () => false;
})(
	"permitCPOWsInScope" in Cu ? Cu.import("resource://gre/modules/WebRequestCommon.jsm", {}) : Cu
);}
catch(ex) {Cu.reportError(ex);}

try this? I havn't test

const temp = Object.assign({}, Constants.AppConstants);
temp.MOZ_REQUIRE_SIGNING = false
delete Constants.AppConstants;
Constants.AppConstants = Object.freeze(temp);

Отсутствует

 

№1659020-10-2022 16:56:29

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

Re: Custom Buttons

Deriax пишет

подскажите код (всё остальное сам напишу)

window.close();


brake пишет

try this?

Yes.


Add at the start of config.js (first line stays as comment, of course).
And (if any) disable dbg-code, add if(0), for example.


And instead of temp.MOZ_REQUIRE_SIGNING = false
make temp.MOZ_REQUIRE_SIGNING = null;


Restart, and get AppConstants.MOZ_REQUIRE_SIGNING from Browser console.
I got false, not null. So, code is not working, right?

Отредактировано Dumby (20-10-2022 16:57:15)

Отсутствует

 

№1659120-10-2022 17:20:11

Deriax
Участник
 
Группа: Members
Зарегистрирован: 27-03-2021
Сообщений: 37
UA: Yandex 22

Re: Custom Buttons

Не то.
window.close();

Отсутствует

 

№1659220-10-2022 19:16:33

ВВП
Участник
 
Группа: Members
Зарегистрирован: 13-03-2021
Сообщений: 336
UA: Firefox 106.0

Re: Custom Buttons

Dumby
До сих пор использую это :(пароли)

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

Выделить код

Код:

var u = gBrowser.currentURI;
var host = u.asciiHost && u.displayHost;
host = host?.includes(".") ? host.replace(/^www\./, "") : "";
window.openDialog("chrome://passwordmgr/content/passwordManager.xhtml", "SignonViewerDialog", '', {filterString: host});


Вопрос : почему куки падают при открытии этого кода ? И предупредилку не могу сделать на простое удаления пароля (на все там встроено)
passwordManager.xhtml и passwordManager.js - могу дать,или поганка в другом ?

Отсутствует

 

№1659320-10-2022 22:22:03

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

Re: Custom Buttons

ВВП пишет

passwordManager.xhtml и passwordManager.js - могу дать

Сомневаюсь, что здесь смогу чем-то помочь, ситуация довольно пограничная.


Но да, passwordManager.xhtml и passwordManager.js, разумеется, нужны бы были,
и даже passwordManager.css и тому подобное, если есть таковые, не помешали бы.


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

Отсутствует

 

№1659420-10-2022 22:42:52

ВВП
Участник
 
Группа: Members
Зарегистрирован: 13-03-2021
Сообщений: 336
UA: Firefox 106.0

Re: Custom Buttons

Dumby

Dumby пишет

Плюс, дело ещё в том, что я без понятия, что могло бы означать «куки падают».

Да любой сайт - пропадает авторизация , стоит только окно открыть с паролями, то бишь куки исчезают...Да и пароль на удаление без prompt.confirm не камильфо...
Может сам браузер выложить ?

Отредактировано ВВП (20-10-2022 22:43:43)

Отсутствует

 

№1659520-10-2022 23:42:03

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

Re: Custom Buttons

ВВП пишет

Может сам браузер выложить ?

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

Отсутствует

 

№1659621-10-2022 10:16:56

ВВП
Участник
 
Группа: Members
Зарегистрирован: 13-03-2021
Сообщений: 336
UA: Firefox 106.0

Re: Custom Buttons

Dumby
Благоволите посмотреть. Ссылка в ЛС.

Отсутствует

 

№1659721-10-2022 16:18:01

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

Re: Custom Buttons

ВВП пишет

Благоволите посмотреть.

Посмотрел.
Окно «Сохранённые логины» есть, и даже логин для какого-то фильмикса там видно.
Страница about:logins не работает, чтобы логинов добавить, но ничего, добавил кодом.


Насчёт «предупредилки», даже не представляю в чём может быть проблема,
вроде как даже что-то тупо-простенькое не отказывается работать,
то есть, например, добавить confirm первой строкой в функцию DeleteSignon(), вот так

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

Выделить код

Код:

function DeleteSignon() {
  if (!Services.prompt.confirm(null, null, "???")) return;


А вот с кукой, увы, как я и опасался, никакого «падения» не случилось.
Сколько бы раз я не открывал это окно — кука никуда не исчезает. Вот она:
скрытый текст

Выделить код

Код:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAn0AAAOZCAIAAADkswG6AACFaUlEQVR42uydCXwlRbm3e5DdBUWQTWAQJy5ocFdccObeq8M1uEdFURF0EhVwzRHDvgdIxAWCJFERceFqFFDjZUa+m6gIiAsaxSURHVnFywU3tgGZ753zkpeaqu4+52Q5XafzPPw8Vqqra+uq+vdbVT215K9//WsCAAAATWEJugsAANA0lnz+858/6KCDis4GAPj84x//eOQjH1l0LgBgrqyr8ohHPELc559/ProLECnoLkA5QHcBWgN0F6AcoLsArcHf//73Rz3qUUXnAgDmCroL0BqguwDlQET33nvv1ekrdBcgXtBdgGhZX0Ucm2yyibm9P5dUeeCB9VXdvWebbbZJ0F2AmPnb3/6mHRUAYuP++//1r389IOq6+eabbrJkSVawB9avl5D3rVt39z33bPfYbRN0FyBm0F2AaHF1Vyxa+VP9t9xis3X33f/AA2oKL9l004fVr7u3r3rhMz5z5Q3i2nWfd/38ipFt687N7b//zv5vv+jbV4wkM4767wUA469//eujH/1ox+OhXpkkz55e/5MnFp1DgEXLfaq769dvsflmDzzwwH0zurvVlpvfu+4+093NNt1UdHfdunvvvufu7bfbLjHdPfDAt97/rwcsutuv++/n7/Xq913y68NXPlH/XP37ZW9e2UAfv/Ssd7+28jlxnDETCQA0xGabPux/b/s/eUG2vik98VPfSY4//D/FfdahL/jUtc/40cS5vNQCNB/pniK5Irzr1yee7orWqugqS5Ys2WTJkpq6e/t7lz/3Kb2r0UuAAqnq7m3bPfax7juxcd3qT+7X9xt0F6AQcnRXr653Aj/sYZvcdeddd9199+O2d3T3LaK7M/fcft2lL3jaCf9995V7+gld9+Ktnvqzquvxzz/kqolPb/tg4FffWPU8/WIxbfesBlt59K+u3m/PbS896z2v+8h3v1F1S9hDlz/vvB/dUA155W/73qjuKs/65d1fPKiuyAEWC5tvtumtf/nL9ttvf7/Tn42zDtvnt086bvDw/dwe57olwBGf3dClnvXO/svPfl9WMKeXSTeUXp8a7I7UTh3cC7BYkO4pWvsv+d8D67fcYvMkEQ1+8P1YBHjThz1s8803tcAS5q67RHnv3uFx2br7+nde8vWq8m2M2wnfev6DXfSpb6oqYrUHHvapjbroHW9afsg1P7qp6pmI6CavP7s6TIQRblt35Lzcw2IhVXdN6g4+45KZ3pQuqDN3pGhnqud1qz915lTb4OHLcoO5nTq8d7/GSwnQkqju3l+1d8W9ySab2KV77l0nv5tttqlYveK4/18PiFm8bt26u/J1t6a9e/pDcvhQSHm/Tl75xcNXJtobpz/ekbzy+P96zaHifl5ydVqc3nhRT+S8UsNiYYvNN73lz7c+7nGPS7V3q3bnz2cs1Af7TpVdvzGjhU9/TcXxucNeZK3rVTvmg1NKyYOWcUdabHdkdGrv3vcVXWcATUK6pxi4qrtZbL75ZptssuSee9Y97GGbpOnuWw505qZvP3TF85/80UsDkbvuxVvvd8wvfyTeh6543as+843nJlfv8/QTv3PXFQ9K4+EvTPa/YIPubr3foRedcMm3b7vwrA69xQsZRLht3ZGju7BY2GKLzW655dYdHrf9fWm663SZO8J+5HSf27VDydXVZ4tUnzdz+67fSO+Yqb3yjro7NcCiQLrnBt29/1/rc4R3hk03fdi6e++98867dtzxcUmG7ibyptz+2o+cdtG1qnNielb3MyeONKowi89eb6oGkzAznVD66l7XVHu1MyJsuCV5/VmDh208z5yuuzmRAywWQt1dffbxyX++r9pftJNeOPlgj/P70RN//8VXnPabK8c/nWzoO4d/6sGrhiuoe+19xsVOx8zS3bBTh/cCLBake1a/3/2Xu3U5i8023fTedaK7d+604w6J6e6bRXfvu98NJ1L3wvbX6iTS459/8BX/c862yXUvefjTrqn6PPOQM35w1uEbB3v81ycf7KsSbO/TLzp7Q28U935HO/56+2kX/eqwl++ZdTU3coDFwpZbbH7TzbfsuOMO1jevW3PW3q/9yMz1Z/3izh9W30S9fqTu5LB/e/7nf3Tj45//qmcmt75j5Bue7totbk+vdr1XpMV2R2qnDu49vOg6A2gS0j1Fduu0dzfb9GH33rvuzrs21t0D3vwWT3cBoFi22nKLG2+62dVdAIgE6Z4iuvdvsHcfqBl4s802XXfvun/e+c+dd9oxQXcBogXdBYgW6Z733S/Upbubb75Bd//xzzt32dnV3QPesu6++4ouCAA8xNZbbXHDjTfvtOOO9E2A2JDueZ/Yu/fd/0A988xi766795//vGsj3X3TAW9et46+DRARW2+95Q033LTTTjvSNwFiQ7rnhtMO7rs/a33X9Xd1d8mSJeguQKSguwDRIt3zz3/+8/oH1oe6qz6u/yYP20T/Rcmlu+8muvuFL3xhg+4+97nPLboUAAAALcOjHvUoz8dV3PXrfUnedNNNd9ppJ9HdCy64QM9FOLDoIgCAj/TbJdnnaQNAgXjd05Vbw/yXVBHpld8vfelLG3T39ftcv3zimInlJ/HLL7/88ssvvw3/jh/9Py896d8mjrps35MvnXzS3VXuuece71dYuXLlg7r7+iP//PVTd+SXX3755Zdffmfx+7WTd+g86pYLT9xhzS+fXFt3v3jxFUWb7AAAAK3LQzPNq978H6a7H/rQh4455pgU3f3CN35QdI4BAABal6rubvhZ333gSpXY9773vaeccspRRx3V09Pj6+55X5soOscAAACty0O6+963v0L09eCDDz7zzDPV0j3ppJMOO+ywjXT3sxdeVnSOAQAAWpcZ3V2//rBDXnXAAQecc8457sruwMDAO9/5zod0d+TLq4vOMQAAQOvykO6+712vrb2v6twLvlN0jgEAAFqW6gyz/vfBrs7aunvO5785L+ke+Kap9737V+q+ZGzpqQPPcq++4Lm3fvKMH95y69avOYCDsgEa40fj35Df93/kRVf9eIei89JiSNWF9XZkz88ev8s/3/vBfWvefvGFl+60w13uwKU+4pjFaOZlRkfFrMfqjqjPX/G6RgueH/m8UGDlSOCf/nw77wnKY311x9omd5NzPv79G258RN/AM8XcPaBzqvvga7/1ra/U1t2zPnvR3NN+6wG//8B7rz2sZ5+rrn6c/Pmtr6750U8ed/IZz9hQfc/7y9kDV97y561e+caXN60uAMrET75/yXP2fXXRuaidSRsB4iHMlYxIR/X8vP7hyGLQoewT5+z1xQufqPE88Ql/V/e8V5GmpQ99Fgk1jUIqRwOLppwy8Aw3vHjKb/Mb4Tf/a001J9vrRPNHDjuwtu5+cmR07gmPjf6/C7++9IKv7Kl/7vO8vwyeefWzXrx/eAkAGuVnl39be1PMSCYP/dDzroxMd8NcHXPEL+T3pNP3bjSGuQ9l9VfR29583QGvX9vR+e8FV1+UlaOBf/Kzx95w09b2HKXGXrLPX57zrP9rfiN86wHXvej5f3n3B16gunvCEd13b8xdd91155133lXl5S9/+Qbd/fi5F3qxvKrjZc9+5tOPO/nMHB+XfZ5/26c/8ZNn7LPRrMJ3LvreSaftdeWPtvv5lZd+45uPf92rbhRPcZzY9zS5tPOOd8uf7/nAcySAF4+6NTa5V8OI48c/23aXne/WG90wAKVH2r+2duk7V139WOlEb3/LHw94w/WveO1L5dKZZz3pQ4f/LpnpX3qL9TK5+oUv7+F2LvXRaL2+meUZ9k0vCc2AIP101aHPU/fI4NU/+OH2lpb2ZYnqkLf/QcJop37us26XCCWkONzbU8uV6hnmzXy0IN44Y0NTVmG9qtOcy5/hKKek1m1WhbsDmlaCVUs4+rkPNMkYIbUOb/7zVhd+bTdNxW0bVvac9pA1kEZeOXLJTVQfq/joLaktKixOGCy18eTUvPwpV4+sXLv/6/dV3T3pyENr6+7A4Je8mnr1/i8/+diei7+95pgTB+zPS7695ujqnyEvfMFtx/X+ZuWrX+J6rr7kB1/56q5T1z1i6FPXfP3iXY4/9ani+curv/uxTy77/JeWqrv7fc+84qqH+oP5vOPAtUt3v0tuUR+JXKLSu1JvBCg30uaf/ryXuW7zEcfNt2wpvU+6ofQ17RrS+6780WO109ld2vXcYOL5458+5pD3PEd63IffP20Rpnp6fTM1Ca9jSuB9X3ybRvXmN96g4Y8/8tdySXu3jQxhJKnlyvIMxw0trKT1+tfcFI4zbmV6hbU8e1kSRzjK5ddtqqc3oLnl9UqRVEfRnXe6Jxwz3ZJqHbrZ/tynf/L9y7eTWyx8zsNykwvLFW3lqM+7DlqrJTUNypGV1IadGixsPDk1r7f//Mrv7v2C/1DdPfWY99XW3TM+dX5YWa955cpTjj/iom9e+pOf/UIcF39r9VHHn541KLxon/8bPntyr2evcD2/++0rjz+lTRzupROO/u2GJ3Tyk+X32p+OW2AJoJGYz9U/efTB3c+UMNLNrrjqMXqLIp5dh7X/8MrH1hqsAEqCtHnrRO942/WVD1zX/4k9P3/BbsnG3eG8oWu+d/ljp3//cK8/ej1Ug8nt7r3mDj2Tai+22KRvfubzu4VdPuyYku7xR029bP99NMUD33STuHVk8BLSQuldYTZSM+wW1subJpqVK7cyswo7etFONua4/l6Rs+rWewRu/r0BLauGZfRz45fHHZZUR0g3/5qi1LAWPyvnqYNtaquLtnLsktvA3BaS36KyglmEdWbA2tWll1x5wqnLrrhqW1HevuM/VFt3T/vE51K7+mtftd+pJ/SK4+JvXdp7bF+Sy//7zo++eOHO531h15nqvv0z5/zqKc/csNnsN9d8Xx3CicdMye+xJ7Wp/7ve+7QfXrnt+SO/+NP1W62+bDu7xZAwN9+yxY03bXnQqr1dT70xAVgcuJ3o4Lff8JEP/vGMj++h3c3tDtoNp6Yf7nUltz8K0uMmfrCt3O7ea+7QUxz5EVomw44pWTr2pGUnHjP97694vut2w7uxaRgvGza81FlYSyI1V25lptZAUh2p3vC6P2slm783yuXUrZcrt8K9AS2rhl0kM7vvdvfw53bNr3MdXRV3jK3z8aW2umgrx0v3rQfc7DYq95bUFpUVrFo6v/HkZ0D//NVPvv+0Z79E/4Xm00/sqa27p3xsJKveX/fq/3zec5710WNOSWrxzoNuOuLDa9vaX6R/Tk3+8Ktf3+HoEzZsZrvgs78UWVW3+J/+saWfPX8XdR/y7qdefsVjLIB7l8UjYbrfeaPF4N5YM1cA5UDavNu5xG0+1mte/MI7Pnfur9Vz/NKf/PDKR3tdSbueG8ztSubO8vT6ZmoSYcc8+bjfv2ifv2pIcYt+uKOBhpfR461vvmXFfs/RvHkpehnO8QwLKym+8fW3ermSnB9z4p5eAcP8y73yq+OS5VNGORvBJA9PWnaXuLPqNqvC3QEtq4Ylrd9Nb62ZsarOGiE1mCR00rEbTDepSe9q6sPyokptdXFWjtd4JF27qv6SdGqL8oqTFSxsPDVr/vijrvuPVzxbdXfglCNq6+5JZ3x6XoaGd73jlo9Wrlf3af27febzO9ml31/7I3X81+j2Rx33BM9TeOJeG94vXvKiv543/ODujKuufuRbD36qhDm460k/+OGjv/fda8TzpS97pt6onvOSbYD4kTavfUQ6wuVXbCOd6JQT/vDiF/5NeoRcks7yguf9I9m431n/Uk+3c1n3cbuSuVM9w74ZJvHF834t2bCrit7oRpKaupRrl53X3XTz5uI++vg9NBthuVI9w7zZWCQDzps6/9cbLqTq5FcHorCwT1p2t41jUueWMR183LRSPS22/Aq3AS2nhq16rUpzRkj1lGhvuHELq3+vdFntQaKa+N5j3nbgn7U4bquLuXLcxmM5dyMJW1RqWl6w1MaTn4F3HnTLvi+546B3PUWPJDqz76jaunv8aWc3ZegAgFnyx9/8ZI+nPCfr0kHvWvb9H25TdB7nv8hhuealsPu+6G+nnvinF/97e9FFjIivnP+7/5nYZuS8HYvOSERIOzn/M9NZ/c7lB5dNHnns7j+44lGqu588/djaunvsKZ8suoAAkMefpjZYAG87ZM/vX/6o8FKqf6uTWq75KuxpJ1+/dPd7D3jbsqJLGQtSsbu3PXPu8ZSJCy+Y3vXx6160Yq+awURu3/x2aUvrDznoLz0fuPmyyy6urbtHn/ixogsIALPkhut++dZ3LP3eDx5ZdEaaUa6yFhbi4crv//bxu9yn7l33fHojtz747zMPfvyU2rrbe9wZRZcUAACg1dlwPMK5n+qrrbtHHNM399QAAAAWNxt0d/jsM2rrbuXIk/4wftATVpzPL7/8RvUr/TiGbPDLL785v9f9z9v3/Lcv/G7NW5/08gt+OfaWq/70nNq6e9a9B00sP2n5xDH88ssvv/zyy29jv+NH/799T/y3iSPXvOTkl41/5LjdLqutuwcddNACmdznn3/+wkUOAABQOOvXr39ghvvvv/+yywrVXQAAgHITl+5i7wIAQLmJS3cBAADKTVy6i70LAADlJi7dBQAAKDdx6S72LgAAlJu4dBcAAKDcxKW7OfbukiVLzD0+Pr58+fJUT/H54x//uHTpUvdG16dSqchvf3+/utva2latWqWXJiYmxsbGJicn16xZI0VdvXq1eq5YsUIDDA8PW+DU/KTipuiycuVKSUgcllaWf2oxzUdLJ6kMDAy48bu5hcWGtaL11ZPGACAe4tLdHEw+165du8cee+hoUlNlPR+5t7u7WxxDQ0Pio0JriijS1dHR4Yq3iq7dLmNZZ2enipkXJmt081I0TymCqfXaKuLO8s8p1MjIyOjoqCvbYWBYbEirmJqakoZtjqJzBAAPEZfu5tu7JifmblR3ZRgyf5FPV8I1pCfnIrS9vb1my2ZJfo7UeSmqw4vWyPLPL5R3Fd0Fa0heCweAGIhLd3Nw7UszUhvVXRmPxO4Uh9igaiPaCBVGK45wzNIYXMmXG/v6+lyLMwzvppg1FOYMkeguNESdL4UAUAhx6a7au+FvsvEap2uhep6uj2ET1K7cqnyqPSqWqE0yJ47uWnjDdNoS6unpyZrHS03R9cwK7JFaTOaZIQubuUloDwDxEZfu5uCt785intkkNnEWwEztTBeTRuzd1DBGVorzYu+6jzA/MCw2sHcBYiYu3a1zfdc1OuvX3dAUVsXS2Ny54obWd11xDfOck+J8re/WDAyLDXdyhfVdgNiIS3dzmKO9K3d5q7AmciKcXV1d3jdCqXuVxd+C1TQpwnVfdy1Zog33LWf5o7vQEOxnBoiZuHS3zu93XcEzT1XELIkaHBx0P9VNgolf15jO+n7X/U7X2ybtLbImwcfBborJjOms/u73u6n+9RTTKy+6u8jxmjEAxENcugsAAFBu4tLdlv73mb3VXBbVAAAgJC7dBQAAKDdx6W5L27sAAAA1iUt3AQAAyk1cuou9CwAA5SYu3QUAACg3ceku9i4AAJSbuHQXAACg3MSlu9i7AABQbuLSXQAAgHITl+5i7wIAQLmJS3cBAADKTVy6i70LAADlJi7dBQAAKDdx6W6d5+/aObihZ80j4iuVivzqIbjeEbkTExNjY2OTk5NZ5+/aofdZ+Zldnt1MZkWrx6kmM4fySs4HBgbctNy8pWbAAjRUIs+zr6/PrZys04J7enrcs9Y5Erj56FOm2gEiJC7dzcHGbh3r9ZS9mirr+ci93d3d4hgaGhIfFVpTCBGzjo4OV7y9wUvEr7OzU4XKC5N66l9qmFQRcnXXu6rlNSFcW8X0OF/SwquNliinPjVjdlVqT2tSAkhD6e3trTOTMO/IY21vb5c3M6odIELi0t18e9cGkRyVyvcZGRkxfxEbV8I1pCc2Mn65+pEl+Vm6Umee8696echJop6rjZYopz6zMiYB1DJW87dmJmGBoNoB4iQu3c3BtcbMSG1Ud0UqxNIVh1i9qgomHmG04nBVWdEYXEGSG12NycqzhWlId703g5wk6rmaGlt+ibLqM7Vy3ACDg4M2h48AFALVDhAncemu2rvhb7LxQqNroXqero9h86Ku3KrYqAUs8mCTzIkjLRbeMJ22hLy1TJfUMFkFCdd35aqb56wk8nXX3GKDSrBGS5Raw17lSB12dXVZPYfvEAhAIVDtAHESl+7mkLqs2JC9axKbVKViampK1MWEzZQ4acTeTbLNvqx4Ird3a+Y2q+BhEWwKAQEoBKodIE7i0t0613ddE61+3Q1NYZUNjS11PbKe1VBXzrPy7IaJf303P7dZWU311+TYWFsI6C5AnMSluznM0d6Vu7xVWFMgnSb1vqhJ3ass/hZsHvdV5a+nah7mdz9z/SXKnz+QekudKnc3kOuHRghA80F3AeIkLt2t8/tdVx7MU/UjSyfcbT6KO9Xsfg+jX8qmfr/rflDrbZMeHR0NV2FTw3h5dldGU0uUZHwmGyaRWmnh1YZK5OVHPGt+3OwlqvKMADQT+9o7CRoMABROXLoLAABQbuLS3Zb+95m99eOczVBlzQAAANQkLt0FAAAoN3HpbkvbuwAAADWJS3cBAADKTVy6i70LAADlJi7dBQAAKDdx6S72LgAAlJu4dBcAAKDcxKW72LsAAFBu4tJdAACAchOX7mLvAgBAuYlLdwEAAMpNXLqLvQsAAOUmLt0FAAAoN3Hpbp3n79qpsaFnzjnt+melUpHf/v5+dbuH8k5MTIyNjU1OTtY8YjYrP7PLc7LxofGp0dqJqpoxyfnAwICblps3AGswWY0TAIoiLt3NwZRJD4HXQ+5qqqznI/d2d3eLY2hoSHxUaFWDk6oMd3R0uOKtomu3y1jW2dnpne6uYVIP3UsNk3oWvau73lUtr42ea6ukHlYPoEh7W1olp3ECQFHEpbv59q4JTI5K5fuMjIyYv8inK+Ea0pNGEdre3l4TuSzJzxK/OvOcf9XLQ04SACG0EIDYiEt3c3BtRzNSG9Vd0TCxdMUhVq9OI5uqhdGKw1VlRWNwBVJu7Ovr09hy8mxhGtJd780gJ4nmPxGIH53gSW2cAFAUcemu2rvhb7LxsqhroXqero9hE9Su3Kp8qgUstq9NMieO7oZjlum0JdTT02Mz1R6pYbIKEq7vytWa4ya6CznkT5YAQCHEpbs5eOu7s5hnNolNqhPOU1NTooUmbKbESSP2bmoYL2kvDPYuNAd3CyEAxENculvn+q5rdNavu6EprHqmsblzxQ2t77pynpVnNwzru9AE7M2y6IwAgE9cupvDHO1ductbhTU9kxGqq6vL+0Yoda+y+FuwedxXlb/6q3lgPzPUT86eAwAonLh0t87vd10xM09VxCzdHRwcdD/VTTaeajYhT2Y+fEz9ftf9FNLbJj06OhoOc6lhvDyL5OeXKJmxs9XTMhYmAaDYx7sKn/ACREVcugsAAFBu4tLdlv73mb31Y/6xAgAACIlLdwEAAMpNXLrb0vYuAABATeLSXQAAgHITl+5i7wIAQLmJS3cBAADKTVy6i70LAADlJi7dBQAAKDdx6S72LgAAlJu4dBcAAKDcxKW72LsAAFBu4tJdAACAchOX7mLvAgBAuYlLdwEAAMpNXLpb5/m7dp5o6Jl1/q75VCoV+e3v71e3eyjvxMTE2NjY5ORk1vm7diBuVn7CPLtJuyf7yqWenh7NhjEyMtLV1SW3dHd3a8j29vaBgQE3jJuH1MqxAA3l3PPs6+tzKyH1AOCwCBwGHAlZh0YDQAzEpbs52JiuGqCn7NVUWc9H7hVJE8fQ0JD4qNCacogMd3R0uOKt45fdLsLZ2dmpAuaFST31Lycz4pDa1Gy4V+XXArj35ktaeLXRnOdkVSvcrkotaY1pEXp7e21YR3cjQR6ZPoWcxgkARRGX7ubbuzamu+rVkO6KQWn+IkKuhGtIT4RErlxdyZL8LL3J110xFkNrW6zbedHdRnOek1UvKjeAWsZq/tbMJBSCtWoAiIS4dDcH10ozI7VR3RUJERNTHGL1qlqYqITRisNVZUVjcIVKbnS1JzXPoY863Pg1ZrMs56K73vtEPTnPympqJbgBBgcH7e0B3Y0NedGcmpryljMAoFji0l21d8PfZOMFSNdC9TxdH8PmS125VRFSC1hkwyaZE0dyLLxhOm0Jhcu0Rk3dFdHSRC1vWQZoTd01t9igEqzRnKfWpFcJuvycBDPhOUYzFIVuJshpnABQFHHpbg6py40N2bsmsYljB5jgmRInjdi7SbY5mNShu8mMqoVLywtt73o5r9/eDXNoUwXobmywvgsQIXHpbp3ru67pVr/uhqawjkcaW+o6ZT2rpK6c5+Q5zIybRDjf24T1XTfn9WQ1x1+Tc3dyQSTwMgQQG3Hpbg5ztHflLm8V1pRJp0+9L21S9yqLvwWb+74qN4kw2nnZz1x/zvPnCaR+QsvY2yiuHxoxxEdFzuYDACiKuHS3zu93XdkwT9WVLP1wt/8o7lSz+52M+5Vtkv0ppLdNenR0NBzdvOxJGPf7XTdFz9S273fr3CqcerWhnOdkNcn4FNhL1D4+RncLR9uwuplkBoiNuHQXAACg3MSluy397zN768cLZ2c0LSEAAJh34tJdAACAchOX7ra0vQsAAFCTuHQXAACg3MSlu9i7AABQbuLSXQAAgHITl+5i7wIAQLmJS3cBAADKTVy6i70LAADlJi7dBQAAKDdx6S72LgAAlJu4dBcAAKDcxKW72LsAAFBu4tJdAACAchOX7tZ5/q6dJht65pzfrn9WKhX57e/vV7d7KO/ExMTY2Njk5GTNo2ez8jO7PCcbHyafGq2dqKoZk5wPDAy4abl5s5KmhsnJuVs5Ll7qXq3K1fb2drkr9XHUrCVYILTpciIyQGzEpbs52ECvx9Tr4Xc1VdbzkXu7u7vFMTQ0JD4qtCYzojodHR2ueHsjlwhMZ2end+q7hkk9jC81TOoZ9a7uele1vCZaa6ukHmJfs+pychVWTn7qFon77pJT+Tm1BAuEvnihuwCxEZfu5tu7NoLkqFS+z8jIiPmLVLgSriE9aRSh7e3tNZHLkvws8aszz/lXvTzkJJFFlu7mV05+6nrjd7/73ampKXtxya/8erIK84W86ExPT3d1dVHnALERl+7m4FpOZqQ2qruiImLMiUMMO50vNV0JoxWHq8qKxuAKpNzY19enseXk2cI0pLvem0FOEvVUXU6uUisnJ3WJZHh4eHR01C14vr2bVUuwEMjTlNrmXQcgQuLSXbV3w99k42VR10L1PF0fwyaoXblV+VQjT8w7m2ROHN218IbptCXU09MTLoh62XPDZBUkXN+Vq26es5KYhe6GuUqtnJzUNRJvyTbnceTUEsw79hKJ7gJESFy6m4O3vjuLeWaT2KQ6p6oTpCYtJjZJI/ZuahgvaS9MJPaul6usysmxd0V0vW07WZWfX0sw74SzMkXnCAAeIi7drXN91zU669fd0BRWJdDY3FnQhtZ3XcXKyrMbJp71XS9XOZWTtb4rFeLulqrzpQcWGu9pIr0AURGX7uYwR3tX7vLWF01RRBK6urq8b4RSd+HqomYon3PcV5W/+qt5WIj9zPVUTlbqrqDaKi/7qmKDOgeIkLh0t87vd92h3Dzt49TUoX9wcND9VDcJZlNdYzrr+113OdPbCeztMMoJ4+VZJD+/RMmMna2elrEwiSxydFdz1d7enlU5Wam7kVQqlcnJybBo3uPIqiVYONBdgAiJS3cBAADKTVy629L/PrO3qNb8bUSFZwAAAGoSl+4CAACUm7h0t6XtXQAAgJrEpbsAAADlJi7dxd4FAIByE5fuAgAAlJu4dBd7FwAAyk1cugsAAFBu4tJd7F0AACg3cekuAABAuYlLd7F3AQCg3MSluwAAAOUmLt3F3gUAgHITl+4CAACUm7h0t87zd+0c3NAz/+j1pHpYrPzqybLids+dnZiYGBsbm5yczDp/1w7EzcpPmOfU00/dPFjSloo8EgkwMDDg3uImDZBPzoHNAFA4celuDqZhOqboIXc1VdbzkXu7u7vFMTQ0JD4qtKZ/onYdHR2ueKsc2u0rV67s7OxU/fPCpB66l6q7Xh6SmVFSY1hbxVScc8thFrgtCgBiIy7dzbd3TYHM3ajujoyMmL/Ipzc8SUhPzkVoe3t7TQWzJD9LHVP9vTwkVWO3r68v1ShBd2EWoLsAMROX7ubg2pdmpDaqu6KjYmWKQyxO1TlT1jBacYSDl8bgSn6jqhnmQUOmziSjuzAL3Hlm2g9AbMSlu2rvhr/JxuuproXqebo+hk1Qu3Kr8qnWpwieTTInju660qiYTltCPT097kqtS6iaqXmwmNesWeMtFaO7MBekeXd1dWH4AkRFXLqbg7e+O4t5ZpPYpDoeTU1NiV6aELoqWL+9mxomJzOpebCrWjRXetFdmCM0IYDYiEt361zfdY3O+nU3NIVVLzU2d664ofVdV0pz8mw+qXkwPDFm0IQ5QhMCiI24dDeHOdq7cpe3CmuaqnNx3jdCqXuV3VXYWeyrCleCNQ/iWFol2XjLdMKgCXOjUqlMTk7yHRFAVMSlu3V+v+sKnnmqImbp7uDgoPupbrLxVLMJeTKzzpr6/W7WDLBENTo6Go5uXvYkuaw8ZK0Wo7swC7QNJ3y8CxAlcekuAABAuYlLd1v632f21m7ZRAoAACFx6S4AAEC5iUt3W9reBQAAqElcugsAAFBu4tJd7F0AACg3cekuAABAuYlLd7F3AQCg3MSluwAAAOUmLt3F3gUAgHITl+4CAACUm7h0F3sXAADKTVy6CwAAUG7i0l3sXQAAKDdx6S4AAEC5iUt36zx/187BDT2zzt81n0qlIr96xq243QNxJyYmxsbGJicns87ftUPvs/Izuzy7mcyK1jtRVXI+MDDgpuXmzUqaGiYn527luITnubq1Klfb29vdU4Tdx1GzlrKSlnuzTiMOz12u2Way2kDWk0qtvdHRUW0bUt6cqzVbzkKfsqxHSqubI3gBYiMu3c3BxiYdU/SUvZoq6/nIvd3d3eIYGhoSHxVaGwFlqO3o6HDFW4dOV2A6Ozt1APXCpJ76lxomdZB1FcW7quU10VpbxQSsniHbC5OVc69y8lO3SNx3l5zKz6mlrKTlXmlwvb29YWHdhEIZC1MfGRkRUVT5yUorK59ZtVdP3Wa1nKxyNd4t0nH7CADERly6m2/vukNtlkrl+8j4a/4yCHrDk4T0pFGGS3d8zJL8rHGzzjznX/XykJNEFjlSkVM5+anrjd/97nenpqZM8/IrPyerqUlLeNH7vr4+M9dSaylHY1JTz0orK5+z+zO/5WSVK5kn0F2AmIlLd3NwLQkzUhvVXRkNxcoRh1g8OurZ+BhGK45w8NIY3KFfbnTH0Kw8W5iGdLfmADpHe9fNeVg5+ZKmM6tuwfPt3axaSk3a7h0cHAztaS+h/JcDT01z0krN5yx0t56Wk1quZJ5w55nnN2YAmDtx6a7au+FvsvEKnGuhep6uj2ET1K7c6iCo1o8MfzbJnDijpzs0KzbEW0JZk5xuZtwwWQUJVy7lqpvnrCRmobthrlIrJyd1jcRbss15HDm1lJp0kqays9Zdm2fOSSsrn7PT3fyWk1+ceUQK3tXVheELEBVx6W4O3vruLOaZTWKT6nikE6Q2EIcjflKH1ZIaxkvaCxOJvevlKqtycuxdEV13CTOn8vNrKTXpZGMbVKcicnTXXax1Uze3pp6fVmo+F8jeTS1XsgAsaOQAMAvi0t0613dD0yE1mOcTmsI6Mmpsqett9azvukN5Vp7dMPGs73q5yqmcLFNSKsTdhVTnS08YVWrS4RM3mZ/F+m6daYX5XIj13axyJQsAugsQG3Hpbg5ztHflLm/dzkZGnYvzvvRI3d2qi5qhfM5xX1X+6q/mYSH2M9dTOVmpp24VnsW+qnA9NfWlyhYsU/cz53zH5aZYZ1rzsq+qzpbjlcvNvEl16Kivx2ygUqlMTk7yHRFAVMSlu3V+v+sOkeZpH6emDv3uNhbFm011TZCsrzDd8d3bCeztMMoJ4+VZJD+/REnu55hz1F3NVXt7e1blZKXuRmKDe/7jSK0l7xNqN2kv2/p6FE5d5BQ//HS7nrS8fHrmqds28q/W03K8crmZn4vuht9bA0A8xKW7AAAA5SYu3W3pf5/ZWzts/ibSwjNQbCZbovglzj8A1ElcugsAAFBu4tLdlrZ3AQAAahKX7gIAAJSbuHQXexcAAMpNXLoLAABQbuLSXexdAAAoN3HpLgAAQLmJS3exdwEAoNzEpbsAAADlJi7dxd4FAIByE5fuAgAAlJu4dBd7FwAAyk1cugsAAFBu4tLdWdu7qcfQ1nM2LUAp0dN/5/H8Xe+Y6vmlZv/Vk5LF4Z2grOgZxvWf4KRHP82uLAtaD/VUS+Ic7axFXrlyZWdnZ1gtEC1x6e6sQXcBXKTxj4+PL1++fO7xNKET5fdfkbru7m59gRCNGRoammNPl/CNHrNYyGCSn6hbilmUCAokLt3F3gWYF+ar8cegu2LOyp9qz4mpNzY21t/f74VsSHXQXSiWuHQ3h0qlMjAwII6enh7tdTrhI47h4eGuri57NQ49i65kgKai86hJtReIXLnDt7nFoX3EguktYlCuWbNGHGIu62RmMtPpXANUe5kGU6s6K0JlLv3XtXFd29ct76x1NzXbXm6tPt16kGz09vZq2eVtoK+vT3Ll1kyYJbdu5cbUasyvFjdadLd1iUt31d4Nf90w7sChjVVXd3I8i65kgGaTqrXJxt1HVUQXC7NWCrPudZUjJ8KcjNXffz1R8f7UPMxFd3Oy7ebWqwdJ1yxv0emOjg7JtgWT2Kanp92aTK3b1GpMrYEwWrcUqdPvEC1x6W4OtpUgqW6IkF/3tVfbZaonbREWIfXorucpjlDAagYLJSdJ63pz6b+e0HoaM7tJY1d3w2x7uU2tLjdjkiXP2E0cyz5JeznwfLQaJc7UakmNNv91BGImLt3NWt9126j2ugTdBcgmKt2dY/9daHs3p4Cm8aml04VnRWzQnJzMXXfDaLF3W5e4dDcLb/mEeWaAfFydkEFZVyLVjMsx4GY3z6yjf47uzrH/LvT6bjiBnJrbsHSaGfFxlTJc21ZqzjNbNaZWSxgt67utS1y6m7OfWbckSA7ErZ3Q5oLcDQipnkVXMkCzcXXCOkVPT8/AwECOkCTOniwd/XWHUc6+qnyr2vIzl/67oPuZs94/vNym1oOWq7293ZtPVrc7z2xpuXWbWo2pNZAaLbrbusSluwAAHjF8vxsh6G7rEpfu8u8zA0CI/XtVgmdEJs3996pigH+vqtWJS3cBAADKTVy6i70LAADlJi7dBQAAKDdx6S72LgAAlJu4dBcAAKDcxKW72LsAAFBu4tJdAACAchOX7mLvAgBAuYlLdwEAAMpNXLqLvQsAAOUmLt0FAAAoN3HpLvYuAACUm7h0FwAAoNzEpbsLZO96x4S5x1mnBja3HpPpXs2/FyAS9Mga6bHeEfGzpsCWH0P/tQOR2trawpN/mnkgUjMfRNYBixyINEfi0t0FoqHjORs9y3PuNwLMO9IaQ9WZXTyFt+rC+28MBwAX8iDyE+UA4FkTl+42x96dx8DzciPAvDNfrTGGVl14/xVzVn7VnhNTb2xszDsDuFHVQXcXOXHpbj7yprlmzZpkZvpI51v0kr3ap3pa6xFHT0+P9BnzccNru/Gamk2hSH/r6+uTd14L4OZHZ10Ejd/LaiHVBYsWm2sdHh6Wpus2abcvyNWuri4LprfktOrUXuP2stQIjdbtv66N69q+boXPWndT661SqQwMDLg1Hz4IyUZvb69WkZUurJBZPwLNVVY9J+juHIhLd9XeDX+TtCUEm0lzFzyyPL1m6vZkdUjDnZ6e1kHKrZ1kpklZw9JbJH7vtdeNKnwjBmgmqVqbpGmYrtVlLdRl3Zvay8IIjZbuv56oeH9qVueiuzn1FpY0tQii0x0dHVI5YYXM+hHoonVWPXulSJ1+hyzi0t0swpbt+Wizk6ceempblKy7bU6bkTjsJS4JXurNX/uD9/at97rv9d47eOorP0BzqEd3Pc+k2qSzxv2sYOGInwRGZ6v3X09oPY2Z3aSxq7thvdnGpWRm+1XWQ7QXJs/YtQpp9BG41nxOPSe1Xkcgh7h0N2t9d176bXt7u7XCOgcaJbXfagB9JdRL3o3upaY+UoAy6m6B/Xeh7d2cGjaNT61eXXhW5C0hJydz190wWuzdWROX7uZQc5LEJpFSPaX1DA4O2jcA3ipX1sSa+YTzVG7/TKqNPrzR3Y4B0Ezc1ih9R2doVYFy7KfZzTOH/SLsCy3dfxd6fTecQHYXa3Oel2ZGfFylzJppa/QRePPMYbSs786auHQ3fz+zrdyEmwKsRaZ6usNKUm2jqfsyvC0MSXVnwejoqDZWaYXitnvlRpsI0ganWyEkEnlt9C4BNBl3mLZJS2mc0kRzxvEk6GXWqrN2M+Vb1V6W3JhbqP8u6H7mrBegNWvWyIArnir5qQ8iqaqpOxMQVkijj8BaS9a+qtR5ZnS3IeLSXQCA2Ijh+90IQXdnTVy6y7/PDAARYv9elRB+qtDMf68qBvj3quZIXLoLAABQbuLSXexdAAAoN3HpLgAAQLmJS3exdwEAoNzEpbsAAADlJi7dxd4FAIByE5fuAgAAlJu4dBd7FwAAyk1cugsAAFBu4tJd7F0AACg3cekuAABAuYlLd7F3AQCg3MSluwAAAOUmLt1dIHvXO6XLPU16oeoVoFBa/cSbAmn0UL+keiCPHpdr58+rjzhcz9llIGe88s4FcmNIePqzYl6efk3i0t14qhKgpWmJ81Dj7Jizy5XdpTKpB8snVdUU1L1AGQifNU+/yblq9K64dLc59i5A6WHkbXKu7C6xfnp7exsS2jlmAN0tPFetobsSyfe+973zzjsvxyfEpm70XVLfK/WS+3YZelqliKOnp6e/v997ObW6CFOZY0kBCsFGXjuTfGJioq+vb/Xq1XJJ2rbOTw4PD9tx5fX0L7lXbunq6nLvTfUMe5aXhGZA0C6p7kql0tHR4XVbiWpwcFC7rQQeGBiQCCWkONzbU8uV6hnmzXy0IN4YmlpAr7o0t/KnxJOqeQs0XiW5usvTb+bTbwHdPfjgg9/xjneo0OqfEq1UkPyq1ev+ug3IrQ63iVhLTfUUR3d3t72Hui1bHdIup6enly1bNjY2Zu0AoEVxx2J1m484dC3K7SP19y8d6XRl0SJM9XR7lsScmoQ3Wklg7YCqExp+ZGRELolDR0A3hmTjvhyWK8vTy5sVVtJKHXm9Alo+vWyIQ8aZ1HW+hRivTF1y7F2eftOefuy6mzjS+9KXvlRFV3yyAmutuW3L89EXJSl26KkvI5J196m7L6cWp1TuoYceKj7h0wVoLdyRV8eL0JxKMjpOktG/vPf6UAySWj0rlAdvtJJ0Vbc0RTXRZMgeGhryErItRcnMBqKwXF6G3cJ6eXPFMsxVVgHdgSLf3l2g8cpMvRzd5ek37em3gO4mM9IrDhPdrPXdedHd9vZ2e0PJ7yT61sM8M7QudY68uhi5QCNvToSWyXC00nFWh0LX7YZ3Y0sdl22Rtc7CNjryqtsdKPLXdxd0vJq17vL05/3p19k9C95XJbFJs8ixdN3nkT8TYvMbqZ5SKYODg21tbTYzY40m1bq1yY35KilAM8mfadQ2741fdfavekbe1J5Vz0xjUu16o6OjNsc4NTUVdltbrfTmD8Ny5XuGhc2aaUwdeRNnoHDz5uqc7WdeuPGq0Xlmnv4CPf1k5oXDkkt94UgK112P/P3M+lFakrbyb3WR6um+isqfurkg3KfQ09Mjr3U2fRH/hkCALMKdNTqiaePX/SnJxpsH6+lf9Y+8Xs+yGVE3Cd0d4+6sSTb+XNX7dNUzX/SjSXGbxROWK9UzzJvNW2btrPHyIDG4A4X3Bacbf6rnfI1X7jyzqRFPv6inLzlpSd0FgHkh50uSOL/fmJcih+Uqa2G9MuoWX3czME8/5sLGpbv8+8wA88KS7H+xKNrBaO5FbqGRd15w/70qb2454elHXNi4dBcAFppoB6OFKFdZCztrylohrfX049Jd7F0AACg3cekuAABAuYlLd7F3AQCg3MSluwAAAOVmNrq7//77L1Buvv3tbzcUeaPhAQAAisXT3Wuuuaa27n75W1cXnW0AAIBWpfrR13rl8He8orbufvHiKxYoK299zQsbirzR8AAAAIXj6u773/mq2rr7hW/8oOg8AwAAtCqu7n5w1Wtr6+55X5tYoKwc/IblDUXeaHgAAIDi2SC861V5P/zuztq6+9kLLys6ywAAAC3Lg7or//9A5dADauvuyJdXL1BOVr1lZUORNxoeAACgeBzdPeLwA2vr7rkXfKfoLAMAALQsju4e+YG319bdcz7/zQXKyXvf8aqGIs8J/4svnXPvzjuI43krXt/0GgUomKvHvy6/TznsyEde+7ui89JiSNU1Wm862mxx8617H/he10ccrufsMvCPvZ70m7NPTc3SX1718rUf7E4Y5VoRPT2qur579IcPrq27Z332oqKzXIPr3/+ue3fdZVnPCeYoOkcATeWn37/42fu+puhc1M7kk9770Uf86rdFZ2QecmV3/fNpT/7dOaft9rFPb3/JhiUw+fPuPXdX9wJloCWeNQQ8JLzHVd5VW3c/OTK6QBl5/6rOhiLPCn/tV0d2+PI3trv4v6XRT5/b/8wXv7KIagUojGsu/1b8zV4yuezdldh0d3a5srts8GlaBlriWUPAQ7p7whHdtXX34+de2OQM3v6/N/3z77fvtufTc3xcfnHlfz+x60MP/+VvPDfAIkGa/d77/Kc4fjP6uUddcfUuZ55722tf8b8Hdj6l8xC5tMsZZ930kcPl6nZfu0Qu6S0Sct0uO4lDrm530XfufPpTfj98pl5SH41WbrntDa927031dG/XnHhJaAaER1710yd88Gh1/+HjJz/q+1dYWtpzJapbDzlQwoiPBP7HC54tEUpIcbi3p5Yr1TPMm/loQbwRI7WAXnVpbuVPicfK65Jan1mVrBnQ8mrBrSrCWrVnDS3FQ7p70pGH1tbdgcEvLVBGeg49MDXyO267+aY/Xvvo7XZ+/B57PfTnY3f6xMf6JLze5f7+6uo1T3vey/VecT/hnR/Y+pe/LrqWAZqH1wXEbT7i2PymW9pee9BdT3/qHz77Ce0dUxed/4jLf7Tzx85xY9j5tE9u+40xN5h4PuLKnyx9/5G3v67j5o++3yJM9dRbxPOePXaXmFOT8PqmBP77S1+kUd32tjdq+Js/vGF9VBwSftv/utiNwY0ktVxZnl7erLCS1u1veo2Xq7CAlk8vG+K48cQjJLnUJ5Jan6me4pB4trvgq3LJK6OXc+9ZQ+vwkO6eesz7auvuGZ86v/l5/Ov/3XLzn367zbY7PvyRj1bHLkufkhX41z/9n6UHH7715LWeG2CRIM3+qc/+N3Xf/vpX/vnID+546se3/fq3ko17xJ/OPv2R45dvOf2HteedZeGFu9r3cn00mNye2rNCT3HI7Rbbw6/88fbDX/CSSNL6pqR700m9y179Vk3x/97+JnFPX/LFXY7p8xLSQuldYTZSM+wW1subJpqVq6wCbnvhN3bsP9sNo/5eMbPq06t2N8+b3XjzIy+/KjVyN+e7H3aE96yhdVg/89/6vuM/VFt3T/vE5xYoIx/9wCE5kf/t9j/fcv2UOLbZdoeddntSTvjrvvWVnY4+eetfXHvX3ntd//lznvzMlxZdxQBN5bfXfM+a/R2dr7r1qA/vcMrHHjP6Tb202zveK70jqfaUbc//yhbT13ndxOs4Nwz2P2L8B3K7e6+5Q09x5EdombQbDe28t5x89J6vfLPrdsO7sVlnD8vlZTinsJZEaq5SSy3uWz/yvjve/HqtWPO3pN1CpdanlxO3kkV3N7/+xl0PrbgZCGs1fNbQSsxYvKef2FNbd0/52EhR+fz7Hbfe9c+/77jrsvxgf/noB+7bfddd3vNhcxSVYYBCmJ68fFn7i123+Yhjmy+PPu60T9y999NuvOBc9Vz7na9u/f0rxNONYfuTBh79tYvdYOL5+Le9e6tf/Mp1Z3lqKhZhahJ2oyF99q59X6ghtf9u9qcb9C4L/9c3vOavB79l6SveqHnzUvQynOMZFlZS/NtbOr1cpRbQciu/EpWbt/89pkdjk0uS7r1tTxR3Vn1mVfLt7z44LHiYc+9ZQysxo7sDpxxRW3dPOuPTC5SNYz7ynoYizwn/p0u/fv+uu2x6w02778eXbbDouO7aq/bc6wVJtSM8/Ps/3O7UM2878kN37vsi6Q5yaavLr7r7xRuubnfC6dt89SK7RR3qec8znn7Tlx58w97lwFVb/vyXGiZ0p3q6t0tyO3d/IEzi5qFPSDbsqqI3upGkpm4dXNw7fPR4zUZYrlTPMG9/e+Nrbztuw5ztNl/66t8OfKOlYjXj5UGkVMMLUs/eaOPGn+ppseVXskQrf+ojy69VfdbQajwovGf2HVVbd4/vO7vo7AJAHmt/++OlT35u1qUd3/zOLa+ZLDqP81/ksFxlLaxXxqxnDXHzoO5+8oxja+vusad8coFyceJR728o8kbDAywSrp/6mfzu8KZ3bBFIjlxK9W91UstV1sIq/zig844TN+yp3q3tWUXnBWbBgxurzho4obbuHn3ix4rOLgDMkhuvm9z+DW/b4me/KDojzShXWQsLpeBB3R38+Cm1dbf3uDMWKBd9J3ykocgbDQ8A0DTuW3f/nf+4WxwPf+RWm22+adHZgQjZMNV87qf6auvuEcf0FZ1XAIDY+dsdd939j+vFsdUjd9vmMVsXnR2IkA26O3z2GbV1t3LkSQuUhf5Tj2ko8kbDAwA0jdtvu/v+ezfsuN50i1223W6rorMDEbJhonnk02fW1t3999+/6LwCAMTODju3m+7eenM593bBLBAj94EZ7r///muuuaa27h500EFzTziV888/v6HIFzo8AMCsEbk13VUHQBLo7mWXXVak7gIAlAZXd+X3P/79JSeecMTznvvMovMFBROX7mLvAkBp8OzdH//458ccd9pl/+8HCPAiJy7dBQAoDeE8swnwPi/uEPX93Gc+sfPOOxadTWg2ceku9i4AlIYs3ZXRdvOtdv3e+EUnnXwm0rsIiUt3AQBamv1ecYDNJL/wxfuHurvu7htktN3y4bv//Y7pq6/+2WlnnH3pdy4sOtfQVOLSXexdAGhpRFmvX7vhH8c+5J3vFwH2tjHrUPuvf/3r4Y96wu3/+xtxbL/j09jqvNiIS3cBAFoasXc/99lP7rzTDknw+ZCJriCjrf7u9PhnoLuLjbh0t0B7d2JiYsWKFVYp5l+pVOS3v7/ffJYsWdLT0+P6CCMjI11dXX/84x+XLl0qAcx/fHx8+fLlXuQrV65cs2aN1GZ7e/vAwIAbz/Dw8KpVq8IYvNyGeRAfTd0ri0ZY866aKUJroW0s2bgxQxO4+sfXHHvc6Sq9Rx3dd8rJveqfKrrCrkufg+4uNuLS3aJYu3btHnvsoSPU2ioqPOLo7u4Wx9DQkEpaUtUqqQjXRz3l1zTMJDArci9M/p8hmofe3l4TSLtFRddul/G3s7NTpTfnrpopQgshb4FTU1PygmWOonO0uPjceV+5+JL//ubFX/jxj3/+3Oc+I8kWXWGPJ74A3V1sxKW7Rdm7olV9fX2rV6/2/GXYMrdnNba1tZmP3D42NiaWa6qGpUY+d90Vq9SN1m4RoXWV1VX9nLvQ3TJhbcB9+tBMnvikF3zli+fWFN2fXfPLo48945c/nyg6v9BU4tLdAhHhcadkFRm/xK4Vh1i9nla5w5kGE58sDQsjn7vuSoDBwUGTf/URRzjOavYsY+Fd6G7JcJ8mT7YQzOTNEV1xD3/myxL41JOPLDq/0FTi0t3m2Lvhr17VJTFb3dRJZpVbk67E0byOjg41KTRY6lqpq81u5DV1N4zBJdRL0133FcGSVusn666sPEOLIk/THiK6Wwjr1q176tP3/dIF5zz7We1Zoiu/+3W8dfSrn3nG3k8rOr/QVOLS3cLReTlVR51kVrvQXSfzFK5SqagA17Qd3cjnxd7V1dyxsTHJWP32bngX9m7JwN6NATV5v/ZfI1mi+/NfXHvCSR9nknkREpfuxvD9rkmsawJaZSXBSqotl9ajYW7k86K7yYw5a3up8td3s+5idC4T9qbF+m6BqMl73mc+sffeTw1FV37Pv+DrCZPMi5K4dLcoxP5bWiWZ2QC8bNkybzNUOFurO4dt4TZLd8PI9Uuh+dJdHVuTmd3Umit3mjHMYXgXulsm2M8cCWLy/v66P1Y+/J5QdIVXvfYQJpkXJ3HpboH2rlm3+oVrpVJxdywnGaaq6Gjq3mC7y/seVyO373fDe73MJBt/gOvm1g3vfj2cbPz9rvsxbs5dNVOE1iJsY9B81OS98vJvhaIrA+4rX3PwH3//46LzCAUQl+4CAJQJ/eeaUy/9x7+/hH+ZeXESl+7GsL4bId5KM8t1AACtS1y6CwAAUG7i0l3sXQAAKDdx6S4AAEC5iUt3sXcBAKDcxKW7AAAA5SYu3cXeBQCAchOX7gIAAJSbuHQXexcAAMpNXLoLAABQbuLSXexdAAAoN3HpLgAAQLmJS3exdwEAoNzEpbsAAADlJi7dLdDedc+sdQ/80XNMxWFHmYZHxKeevKsH34qPnrnrppV18K17Vm4YeZiWF7NdCsvipTI2NjYwMOCmwpm7JcPaLadXAcRGXLpbFGvXrt1jjz10hFpbRfRPPU0LzT9fd8NLUmtDQ0Oep/xm3eKRo7sSc29vr3esvTjCsmSlUjN1aEXkxW5qakreycxRdI4A4CHi0t2i7F0xEPv6+tScNcRicFXNaFR3xSpta2sza1LSUnNz7ror7wRutvWSCG1YFnR3UWFN132hBIBIiEt3C0QUyJ1rzRmwGtVd8XGjkjFRzF/xmbvuimNwcNBE3b3kzRuju4sK97HyiAFiIy7dbY69G/7qVV0S04ll0d3u7m7PalTctVIjXKy1hVVVx46ODjfa1CXhemQ+1PhU1XfL4uXZTYVBuZTIY7WnzCMGiI24dLdwbE1Xxql5tHfFoXJbqVRUgHNuyU8uvFEnrvv7+72Q7vo09u6iAnsXIGbi0t0Yvt+1rSjztb6rPhqbrbzWr7s6L60B3Nlvz7qVyFesWOFFZWVBdxcV1mZY3wWIkLh0tyjEZFxaJamOWZ2dnatWrdKvcea+n9n9tseWXevXXTGRJycnVa3FLb+6PdW9UYfXpDrdLe6wLOjuooL9zAAxE5fuFmjv2gqo+1Gs6VnS+Pe7KrGeVertPU69Jcxb+A1xmI3Ub4KtLFmpoLtlRduM22AAIBLi0l0AAIByE5fuxrC+WyzeZmlW5gAASkZcugsAAFBu4tJd7F0AACg3cekuAABAuYlLd7F3AQCg3MSluwAAAOUmLt3F3gUAgHITl+4CAACUm7h0F3sXAADKTVy6CwAAUG7i0l3sXQAAKDdx6S4AAEC5iUt3sXcBAKDcxKW7AAAA5SYu3S3Q3tVz6a1SzN89al5ZsmSJe0avknr8rTA+Pr58+XIvcjsbtb29fWBgwI3HTu31YvBym3VurpdbSbevr89OYJWrbW1tqUf8QsnQJsfhygAREpfuFoWeb69yu7aKSp04uru7xTE0NGTjl2ieVITrk8yc32e66453qZF7YfL/DEkNkJpb0dqOjg5JUa9yCvpiQF7s9JUO3QWIkLh0tyh717MLDbFizW1motq7ruEot4+Njdkw54liauQLobupuTW5NQGe4zOCVqFmKwKAQohLdwtEBimd43U9xW4Q21EcrqWow5mZsBZMfFJ1NzXyhdDd1NwmVT0eHR0VA8ibG4dyg+4CxElcutscezf81au67Grrqe7ErEqaDmE6nA0ODnrztzbMuauzrja7kdfU3TAGl3BIzcptVngoPTx0gDiJS3cLR9diVR112laNVHFPTU2pvajDWTJjVtr8rau7qeOdG/m827tZuU1mNltNTk6yuLuoQHcB4iQu3Y3h+10TLdfotMpKnOFMzMre3l5bu62pu17k86u7Wbm11WXNLeu7iwd0FyBO4tLdohBxWlolqU7SdnZ2Llu2zNsMZbplw5l+qmELt1m6G0auXwrNo+6GW7cstzbn7G6rhsUAugsQJ3HpboH2rtmL+m1u+Klrqqkqqubtt/LWd73vcTVy+343vNfLjMWQlVsNIBlLza26vQlndleVHm1g6nabGQDEQFy6CwAAUG7i0t0Y1ncjxFu7Za4YAKB1iUt3AQAAyk1cuou9CwAA5SYu3QUAACg3ceku9i4AAJSbuHQXAACg3MSlu9i7AABQbuLSXQAAgHITl+5i7wIAQLmJS3cBAADKTVy6i70LAADlJi7dBQAAKDdx6S72LgAAlJu4dBcAAKDcxKW7Bdq7eoi9VYr521Gmdo5peJx46sm74+Pjy5cvFx89c9dNa2RkpKurK+sWL2NZyQ0ODg4MDLgh9SDe0NM9AFjgLPTFgLZnnjVAhMSlu0Wxdu3aPfbYQ+V2bRXRP/U0LTT/fN0NL0mtDQ0NeZ7JjP6Ft3jkJJcVICeMSP7o6CgHoZcbeVlsb2+XNzB0FyBC4tLdouxdMQ76+vo8NZLBq7e3t34DNEt3xd5ta2sTo9PSGhsbszGxybqbFR7KBw8aIE7i0t0CkUFKp2T1T9cCDkM2pLvi40Ylci7mr/igu7Cg8KAB4iQu3W2OvRv+6lVdytWJZdHd7u7u1PlYd63UCBdrVWhtLbajo8ONNnVJOEvms5KzAMwzQwi6CxAncelu4diaroxW82jvikPltlKpqADn3FJ/clkBUsPYpdRCQflAdwHiJC7djeH7XbEIp6am+vv752t9V300NltFbr7uMgQvNnjoAHESl+4WxcTExNIqSXW2ubOzc9WqVfolxtz3M6uPxmZLyOguLDQ8dIA4iUt3C7R3bSbW/dxWp53V3ej3u/bhrAUWRbeF1Zxbwoyhu9AQ9tF54rRbAIiEuHQXAACg3MSluzGs7xaLt3uZPVAAACUjLt0FAAAoN3HpLvYuAACUm7h0FwAAoNzEpbvYuwAAUG7i0l0AAIByE5fuYu8CAEC5iUt3AQAAyk1cuou9CwAA5SYu3QUAACg3ceku9i4AAJSbuHQXAACg3MSlu9i7AABQbuLSXQAAgHITl+4WaO/qufRWKeZfqVTk107kTapHBrln9CojIyNdXV3hkbrj4+PLly/3ItfjUaU229vbBwYG3Hjs1F4vhvzcSibrjMeStjNZ7axW9cyKajaPE4rDHmtq+wGAAolLd4tCz7dXuV1bRYcqcXR3d4tjaGjIPUNeKsL1SWbO7zPddQ+ZT408/1z6/GPqs3KbE4/qtN5inhqPjcv5UUELIY97aRX3uQNAJMSlu0XZuzI89fX1mQloiBVrbrP51N5ta2szH7l9bGxMzMRU3U2NfC66m5Xb/HjMbQ4xiXp7e7OMIXS3HPAcAWIjLt0tEBmewglVUSaxa8UhVq/pnA5kZnFaMPFJ1d3UyOeiu1m5TXLtXZNq9RSHW4TUJBivWx2dsEl9RQOAoohLd5tj74a/elWXxNx5VxuzVFldw3FwcLCjo0NCWjDXoHTrNzXymrobxuDhRZgfj7sgbbqbPyKjuyUgf0oDAAohLt0tHHfJUyeZ1aYU99TUlEqXp1uVSkUFOJzIzYl8jvZuGGFOPMnGpi327iIh3BIIADEQl+7G8P2uSaxrdFplJY4gqTHhzd/m6K4X+dx1N9n4hSAnHvcdgvXdxYDXMAAgHuLS3aKw/Z9JdWqus7Nz2bJl3t4lUylvk7Cts2bpbhi5fuEzl31VYYQ14wmzp/lnP3P5yNl5BwCFE5fuFmjvekuhlUrF3bGcZJiqInvefitvfdf7jlYjDz+izVnfzdo/5Ubo+mfpruR/dHRUHG7SOlOtgd38JOhuK2Mf7yp8wgsQFXHpLgAAQLmJS3djWN+NEG+lmX8GAQCgdYlLdwEAAMpNXLqLvQsAAOUmLt0FAAAoN3HpLvYuAACUm7h0FwAAoNzEpbvYuwAAUG7i0l0AAIByE5fuYu8CAEC5iUt3AQAAyk1cuou9CwAA5SYu3QUAACg3ceku9i4AAJSbuHQXAACg3MSluwXau3oIvFWK+dtRpnY8bXgwberJu3roqfh4R+Qm1aNwu7q6sm7xMpaV3ODg4MDAgBtyeHh4amoq9HQPABYstqwiQwmwdsvhuwCxEZfuFoUe/67as7aKDFXqacOW+efrbnhJam1oaMjzTGb0r+bx8jnJZQXICSOSPzo6Ki8QqUUu+jnA/CBvVEur6KsVL1UAURGX7hZl78rw1NfXp+asIRZDb29v/QZolu6KvdvW1iZGp6U1NjYmVmkhumtuEdqwyFA+ajYwAGgycelugcjwpFOy+qdrDoYhG9Jd8XGjEjkX81d8itVdTdotMpQPacbd3d28XQFERVy62xx7N/zVq7okphPLOQOWu1ZqhIu1KrS2FtvR0eFGm7oknCXzWclZgFnMM4dFnpcnCFGRNWcDAAUSl+4Wjq3pikTNo70rDpXbSqWiApxzS/3JZQVIDWOXvEJ5y9hQGqSxya+3pw8ACicu3Y3h+12xCKempmS0mq/1XfXR2GxJtfm6m5OKFbnBxwXxwjMFiJa4dLcobP9nUp2a6+zsXLVqle4Fnft+ZvXR2Gw9tXDdTS1y0c8B5ofUfYIAEAlx6W6B9q7NxLqf2+ocrLob/X7XPpy1wCJvNhTm3BJmbIHs3dQiQwmwj3cVFhEAoiIu3QUAACg3celuDOu7xeLtXuZfPAAAKBlx6S4AAEC5iUt3sXcBAKDcxKW7AAAA5SYu3cXeBQCAchOX7gIAAJSbuHQXexcAAMpNXLoLAABQbuLSXexdAAAoN3HpLgAAQLmJS3exdwEAoNzEpbsAAADlJi7dxd4FAIByE5fuAgAAlJu4dLdAe1fPpbdKMX87yrTR83f10FPxCU+3HRkZ6erqyrrFy5h3QO/o6KjkRzOTmpP82GDxoE06PHcZAIolLt0tCj3fXuV2bRVRLPU09TL/fN0NL0mtDQ0NheqYdYtHo8kxzoJSqVQGBgZoDwCxEZfuFmXvimXQ19en5qwhlm5vb2+qAdqQEIq929bWtmrVKktrbGzMBkR0FxYCaWbT09M2rVJ0dgDgIeLS3QIRxRoeHjZ1dC3gMGSjQuhGJXIu5q/4oLuwcEgzS12JAIDCiUt3m2Pvhr96VZdydWJZdLe7u9uzgBV3DdUIF2tVaHXgGxwc7OjocKNNXRLOknlz25pxju7mxwaLAZ1T6e/vR3cBIiQu3S0cW9OVoWoe7V1xqNxWKhUV4Jxb5p4c4+wiR+dU6mldANB84tLdGL7fHRkZmZqaElthvtZ31Udjs1VkdBcWDm9KhiYBEBVx6W5RTExMLK2SVG2Fzs7OVatW6WcYc9/PrD4amy0ho7vQBGgPABESl+4WaO+aieB+bqvTzupu9PtdlVg3sG51qXlLmDE3OV2Etu93w+TyY4NFBboLECFx6S4AAEC5iUt3Y1jfLRZvZY49yQAAJSMu3QUAACg3ceku9i4AAJSbuHQXAACg3MSlu9i7AABQbuLSXQAAgHITl+5i7wIAQLmJS3cBAADKTVy6i70LAADlJi7dBQAAKDdx6S72LgAAlJu4dBcAAKDcxKW72LsAAFBu4tJdAACAchOX7pbD3tVTexs697RSqQwMDLg+w8PDL3vZyxqNB0CZmJhYsWKF23jUJ3FOkq7pY38K4+Pjy5cvD0+kTj2jOozZDtpyj6Nes2aNxVxnGPOxo7rq8QlrA6BA4tLdlmZezhjnoHKYOyI87e3t8iZnbSl8F6zTR92qWzJYaBj3eMosHzceea1sa2tbtWrVyMjI6OioKvrSKhazhRGfvr6+1DBy+9TUVH9/f0OOsDYAiiUu3W1pexfdhahw25Kpml2tx8eLrU7dDePRe8NcuT7d3d1DQ0PiLxGKW63kMExvb6+Z3RKnaGpNn6x0AYoiLt0tFm9SSzpqT0+PvCbbcGNVljgzwxJG3qltisz+1E7u3ujOpw0PD3d1dSXV+WRvhHJHB/tTHHK7zt2JY3p62rs9zCEscty25DY5a941fSwqsx3dZha2cGurYczuJLDqov5pKmtGrTZ1N3UL45VI3K5hneUTugGKJS7dbY69G/4m1eGgs7PTk0BTNeu0MjqI5qUqZWont0HEnXxTRZdRzMaaMLYwcnfJTTPm3p6TQ1ichLrrtpl6fJKZl1Ftrm7kosSirG7TNZ8wHutc6uPKqivD4bqsFya0m0OLNsvGRXchHuLS3aII58oSp6O6b/TJjEXrbjnJ0l1xuNGKidzR0aHDR9ZwkKO7OW/xmpCXw6IrFQomq82ojLn7jLJ8TB3DF8Qke8bYtTg1HnFr+5SWOTk5qfPJSbVHyK+2VUvRS8sNg70L5SAu3S1qfbce3c1a05LxQseRwnWX6WVwydFdabGeOqb6hJpaj09OPG7Hsblru9edi9a7vDDm767m1vTJyi1AUcSluwWSOs8cTtPpJdty6c0e15xn9uaEk3nSXVtUY3oZDG9fVVK1Gt39wzV9LCpr8OYjgcVyTfXJicedcPYiDHtKGGZ2+5nD2gAolrh0t9j9zLY3yjaDeJ9h6FWdxdW1KKkR8dH3a91plbOvqp7pr1nrbpjDBXpGED+2UJo4X9CaZ/h1bJaPG4+73JsarfmE8VjPsldDN+ak2uNsLjqZ6YBhGPMM08rxSa0NgAKJS3cBAADKTVy629Lf7wIAANQkLt0FAAAoN3HpLvYuAACUm7h0FwAAoNzEpbvYuwAAUG7i0l0AAIByE5fuYu8CAEC5iUt3AQAAyk1cuou9CwAA5SYu3QUAACg3ceku9i4AAJSbuHQXAACg3MSlu9i7AABQbuLSXQAAgHITl+62lr3rHnq/QBUCMDv0zHnvLGd1uIc3ez7eXRbADeaFcQ9+ttNtNYzrE6Zlx+LqwbpFVxhA84hLdwFg7oiktbe3DwwMmMhVKpW2trZVq1aNjIyMjo6KFpqPaGRfX5/4hHcZOWFUd2UcscDh+2iYukS4tIoqtHs7QOmJS3dby94FiBkxMV3L1bRN/bu7u4eGhuSqyKS41Sr17jJMOMMwoe56gVNTd+NPTRGgxMSluwXiTpdJpch7fWdnp2sNyOgwPj6us2fDw8M6rNiQIY6enh6xA+ReL6qEKTUogizdldbY29srDjU0tWFbs0xVQc8z1F31t74gHaSrqyuZafBh6pacp/oAi4G4dLc59m74mzhDiQjt9PS0yKoOFjZkiEMXq9xpNFd3QzHWqJYtWzY2Ntbf379wTxEgxFVH9z1S5Fbl0F4HXWs11F179cwJI4yMjIjWapfRvmBzyKmp612eDAMsBuLS3aJw39kFsVxFJr0xwh1rKpVKR0eHvsh7AhxGdeihh4qPqTJAc0i1SqVBTk5ODg0NiZWpguetsIaamjpvnDozrP7u4q7Kqri91K0fyS+vpLDYiEt3i1rfDdeokpk9mam6ay/pWbob7hNRa4B5Zmgaqepo7dOb+zUtrGf9tSHdtZiTjTua9IipqSlEFxYhcelugbgTxebjzTNrAHfsCHU3NSpFBhr5xeqF5pCqjjbla8u63puid5ftQK4ZsxivYsvqTumkasWGe5XDbRNFVxJAAcSluwXuZ3bnh3U2TAcIG3ds51TibI9K1V0vqo6ODt2NlWy8kAawQNjCbTLzBa19PmtvhG4r9ZZ7E+e7W1PKrJjNx25xg1nv8FJ340nYbwiLjLh0N2b42gEAAOZOXLob8/e76C4AAMyduHQ3ZtBdAACYO3Hpbsz2LgAAwNyJS3cBAADKTVy6i70LAADlJi7dBQAAKDdx6S72LgAAlJu4dBcAAKDcxKW72LsAAFBu4tJdAACAchOX7mLvAgBAuYlLdwEAAMpNXLqLvQsAAOUmLt0FAAAoN3HpbmvZu3qCKYclQITomfNu47RDcM0z9PHusgBuMC+Me46vHcGrYVyfMC07gpfDd2GxEZfuAsDcEUlrb28fGBgwkatUKm1tbatWrRoZGRkdHRUtNB/RyL6+Pj3B3rvLyAmjuivjiAUO30fD1CXCpVVUod3bAUpPXLrbWvYuQMy4J1eK27RN/bu7u4eGhuSqyKS41SpNMs67NOEMw4S66wVOTd2NnxM2YbERl+4WiDtdJpUi7/WdnZ2uNSCjw/j4uM6eDQ8P67BiQ4Y4enp6xA6QOurt7dV5M7u36MLBYiRLd6VtSxMVhxqa2rBtpjdVBT3PUHfV3/qCdJCurq5kZg45TN2S81QfYDEQl+42x94NfxNnKBGxnJ6eFlnVwcKGDHHoYpU7jebqroqx3D42Ntbf359UX/w7OjpYu4JCcNXRfY8UuVU5tBVW11oNdTd8fUzV5pGREdFa7TLWF1TaU1PXuzwZBlgMxKW7ReG+swtiuYpwemOEO9aYoLq6G9oWMqbwIg9FkWqVStuenJwcGhoSK1MFz1thDTU1dd44dWZY/d3FXZVVcXupWz+SX31JBVg8xKW7Ra3vhmtUycyezFTdtZf0VN2VF3+LxB2tAJpJqjpaU/fmfk0L61l/bUh3LeZk444m3WRqagrRhUVIXLpbIDY55vp488wawB07UnVXl6zE4Y44AE0mVR1tyteWdb2XTu8u24FcM2YxXsWW1Z3SSdWKDfcqh9smiq4kgAKIS3cL3M/sTjXrbJgOEDbu2M6pxPniMFV3EybQoFBs4TaZ+YLWPp+1l0u3wXvLvYnz3a0pZVbM5mO3uMGsd3ipu/EkfMILi4y4dDdmGvragR1VAACQSly6G/P3u/XrLp9GAABAFnHpbszUqbs6gca/AwAAAKnEpbsx27sAAABzJy7dBQAAKDdx6S72LgAAlJu4dBcAAKDcxKW72LsAAFBu4tJdAACAchOX7mLvAgBAuYlLdwEAAMpNXLqLvQsAAOUmLt0FAAAoN3HpLvYuAACUm7h0FwAAoNzEpbsF2rsNHfMHEDnSnqVv628zE21aJyqkgADzQly6WyCzHjIQbIiQlStXrl69ulKp9Pf3N3TjXNpzM/vCrAsIUDhx6W4r2rvoLkSIClKJdXfWBQQonLh0t0BkyBgfH1+xYoW4h4eHV61alVRPsN9jjz00gFxdvnx5MnPCrvpoeKGnp4f+D/Ej7Vza6sDAgE7Smkyq21q7tmc3sCicOJKNm7rbF6R3WIR6owRze5BOCLtxqn9qL3ODWQDpmF1dXbzmQqsTl+42x94Nf5NqP5firV69emJiQtTUxggdCLTnS4cXx9jYmCux2LvQQkhztdfKUHdVMl1PC+zGoAFEdDs7O92reqm7u7u3t9fkUwNLt5qenpbAYZxhL9NsuPnUACMjI+gulIC4dLdAwjFIHDIK2Fu5vO93dHRIAPF0Bw50F1qIVK1NsnXX3Po+qpGEvcMilzHCxNg1ZBPHhnb7i4bxeplrOksAEXJ5IQ7zD9CixKW7kazv5uiuvsXre7c3t7ZAdQIwj8xOd111FDN3aGgoydbd9vZ2nRDyNDXMQILuwqIkLt0tkKwxyJ0Bc0cQkV751XkzBgKInFRZFQXVCWG1ZXN0VwL09fWJ+LlTwVnzzIODg21tbTZFHM4qewml9jIvG8wzQ5mIS3ejsnftNV8D2ABks206QOh+E/ZVQcyk6q41Zt3BpP5ue/ZEes2aNTIEiFvsXespGr839yOBxdN0WsN4ceb0siRjipt9VVAO4tJdAIAsUieuAVqOuHSXf58ZALIQW3xyctLWegFalLh0FwDAw74STmYWdwBamrh0F3sXAADKTVy6CwAAUG7i0l3sXQAAKDdx6S4AAEC5iUt3sXcBAKDcxKW7AAAA5SYu3cXeBQCAchOX7gIAAJSbuHQXexcAAMpNXLoLAABQbuLSXexdAAAoN3HpLgAAQLmJS3eLsnfd07y9S3bCaFI9/tM9wXvu5KQLAAClJC7djRD3/G1xc749tARuuwWAqIhLdyNc33XHL47dhlYB3QWIlrh0t0BsnLLDPsfHx5cvX+6NX3K1t7dX/FWD1VNDaiTiXrFihXpOT093dXUlzgR1pVIZGBgQh9nNFr84JJgXHmAW2OKINjOdp5GGJ73dm79Rt9uYea0EWGji0t3m2LvhbzIzBskANDY25s4kZ+muSqwJsGmn1NHq1asnJiZEfVU+1e0NZ67cmkNHydTwAA3h6au9yaXqrjmk7cnLIu98AAtKXLpbIDr0iENE1DU3Q90dGhrSYCaNYsV2dHR4xnGqWzVV7wp1N/VegFlQsykmG7d5u5EdDAALTVy6W+D6rjsejYyMdHV1hfPMtr7rLfTWqbuJo9aq3+guLBCN6i7zKwBNIy7dLRBP6kR65VesXm+c8pZybZ5Zh638AU5C9vX1rV692puaRndh3slqTrZQolMv7t4CppcBmkNculu4vSuKaPPAJqUWxtVCdytKnYaFbdqSehRP7F1YOHQHn+2rsuZkKx260yrcV8U8M8BCE5fuAgAAlJu4dDfC73cBAADmkbh0FwAAoNzEpbvYuwAAUG7i0l0AAIByE5fuYu8CAEC5iUt3AQAAyk1cuou9CwAA5SYu3QUAACg3ceku9i4AAJSbuHQXAACg3MSlu9i7AABQbuLSXQAAgHITl+5i7wIAQLmJS3cBAADKTVy6W5S96x5E710Kj8Kd9eG4dvSpUPOYcY7ghbmgjU167OrVq8OrtC6AAolLdyMkR3cbOqlex0ELs3Llys7OzhzpZWSEuSDtZ3x8fPny5VlXaV0ARRGX7ka4vjtfuitC29vba+OgWthS+/WnC1A/+e2H1gVQIHHpboHYSCQCuWbNGvFRcyFLd0U19c+enp6BgQFz9/f3q6mhU8o6n5yqspLQ0NCQ6rcE6+rqSpz5Z02lu7vb1Fos5r6+vtRpQwAXaTzq0OZUqVS0iWr7TLJbuzZUvTfnpRAA5kJcutscezf8TWZGIhl3xsbGdGxSbAhzybd3xa3rarZsLJ6ioJ5kmgUs4XVA1LloHe/C/Mjo2dHRkTVzCOCSatF6UzWprV0DSFOcnp7O34IAALMjLt0tEB1xxCFK6W56msU8s+tWsRR3vr0b3us69EYJj7ELdeI2KndDn9u6ko1bu2vsJo5xDADzS1y6W+D6rjtOjYyMdHV15c8z16m7ZtTmrO/m665kxpLG/oA6sfbjtrTUVz1r7alvhwAw78SluwXi6auqnejc7HQ3XNZ155DdMEkt3ZVIuru75ZKOmEXXE7QG7oyxbgtwP5bLae01v3ADgDkSl+4Wbu/K2GQzcqEx6oYUH92uotNxrlvXa3Uni/sthzvd5/rn625SnayWXyb9oH68SZc1a9ZI701m3t6yWrs71cw8M8ACEZfuloN5/0iDHVUAAKUhLt2N8PvdWTC/uqvzzOyoAgAoB3HpbjmYR93VGUL+iQMAgNIQl+6Ww94FAADIIi7dBQAAKDdx6S72LgAAlJu4dBcAAKDcxKW72LsAAFBu4tJdAACAchOX7mLvAgBAuYlLdwEAAMpNXLqLvQsAAOUmLt0FAAAoN3HpLvYuAACUm7h0FwAAoNzEpbtF2bvukeDeJffQXDu1HiBytN1Kj009yWrej6oEgPqJS3djQ/XYjgQXOAQXWgJR1vHx8azmiu4CFEhcuhvb+q4YDX19fZx9Cy1HvrKiuwAFEpfuFoiNRHrkrfiouSD+w8PDq1atspBqBFv1qSO8y8Y1c4ujp6dnYGBA7kqNBGBekJamDm26lUpFWp38Kc2vv78/yW7tNEuAJhCX7jbH3g1/k5mRSMadsbExHZsMHZts1s7GLLGGp6enZVyTAJ2dna42Z+muSXgYyQJVKSxOUi1atymmtnaaJUATiEt3C0RHHHHI+75n4CYzNq5IrwxJZhAkVQPi0EMPtTVgL7ZQd9XhWhWJY4UAzBduC3T3BrpNMdm4tdMsAZpDXLpb4PquO06NjIx0dXV521LEc2pqKlRZd+9VamxZuss8HiwcqY1t5cqVQ0NDblNMnNau75Q0S4CFJi7dLRBvXk4GI/ldtmzZ0ipJdczSyeRwxTecZxaf3t5ekW01NTzd1eRCqxpgvnBnjHVvoPuxXGprT23bADDvxKW7hdu7MjZ5X+vaFhWbdnOn49yNKuqjVrLN7OlGqnCwS40EYL5wG5tuUJDeK27X3g1bO80SoAnEpbsAAADlJi7dje37XQAAgPklLt0FAAAoN3HpLvYuAACUm7h0FwAAoNzEpbvYuwAAUG7i0l0AAIByE5fuYu8CAEC5iUt3AQAAyk1cuou9CwAA5SYu3QUAACg3ceku9i4AAJSbuHQXAACg3MSlu9i7AABQbuLSXQAAgHITl+4WZe+6R4J7l+wk3WTmjNKGyIkZYOHQdis9dvXq1eFV79x7AGgmcelubKhq2pHgwvLly4vOFEBtRFnHx8ezmiu6C1AgcelubOu7YjT09fWlWgwAMZOvrOguQIHEpbsFYiPRypUr16xZIz5qLoj/8PDwqlWrLKQawVZ98uvdEsagMbs3mi2i8Xd1dYnbSwhgdkijUoe2qEqlMjAwIH/29PT09/cn2a09bNsAMO/EpbvNsXfD32RmJJJxZ2zs/7d3x9qJY1sax9XrzoN0B3boZ3AH1w5IeQVwUCkERN0VEZjUAfAKlRLYN6DWrJkXcGiCqTVPMnvYy/tunyMJbIO1Ofx/gZdKFpLAR+fTPhKllfZNRvsmn5TaZ0k1vNlsLi4u/EtkZrIGW96G/vxFX5mpvaFekKOzw0HUVrS+Kda29qRtcxYIHEOs3O2Q9jgyIYmY152alJKa0iVZQVBtC4hv3775l+iSfg1+zRarUoL0ej1fDVeM/uFwfFvy9wb63K3etnZf7FauOAZwWLFyt8Pru76fWi6Xw+EwuS1FZr68vGjK5lVp8hL/T3IXXy+5umEXRObzueVu0tr1nJIRF+DYYuVuh5LMk85Ifl5cXPy+VW37rH6/L5VBfsXXv8Tm2z+bxpm1gyN3cQx+xFjvDUyubuStvaVtAzigWLnbeb0rfVPybV27RcWG3fxwnMyUstW/JP++b+19VbVZS+7iUHxb0hsU5OiVaV/v5q09aduMMwPHECt3AQAoW6zcjfb9XQAADitW7gIAULZYuUu9CwAoW6zcBQCgbLFyl3oXAFC2WLkLAEDZYuUu9S4AoGyxchcAgLLFyl3qXQBA2WLlLgAAZYuVu9S7AICyxcpdAADKFit3qXcBAGWLlbsAAJQtVu52/vzdjz37djwey89uH1bKs3vh6XOgfZOwJ0PLYfz4+LjPHP8w6fV6fX197R/Qq8vkc2rXbM+xTp4KbGvecxmbow8M/vAcoEOxcrdD++dWsqT0O3d3d9XrE8Xj7z+KJzFzdXU1m82sSWg6Ju12nzk6rTkqnYUu49OraY5fj5yYXl5eDgaD5XL548cPTfTft2zNtozMmU6ntcvIy19eXuQE95MTXf99cO5i5e5J1LvJknIw26+k1zjSJ/PevQJ8k7BUs9/uMydZ2565m69HX5vvlZ8jJ6965qonslol58tMJhMru2WdcobxgTld/2Vw7mLlboesO5BeQwoFmTMajfTU2A922bCb/630FzKRdBYtQ2T5kJ32BckCO5e3OYvFYjgckrvwfMLJtDaS6rU57TPHVmWVom+EuvJ8Tu2a/ZCvpqD+01LWilpZONm6LZO8I5n2hfX+czhM0K1Yufs19W7+s2o+DZdjfrVa+bEpv6Q/N9cAtutS/X7fn/Lnc2w90uNsNpuLiwu/IZnZtF1dXlZlPZR0i+QuEnnu6iiuxdvOOdXruaCdZRptcr52tDn5eqzx6xwfqz6Gm67C2jJ53ezr1/3ncJigW7Fyt0M+1ayolTnyU45b7UeSJavXQWb9VVIT7HMNzP4p/dq3b9/8hnSB5J/J8r7CpkNBIq8O7aRQYszfddU0x9LRJ3Ht+v0cX1/qemRaW6+02+fnZzs99Tck2haTbfllqHdRhli52/n13Wqbsnambx2EnsvboJk/jPMPdP/czS81+Q35f2rPlayB3EWLltyVhp2kY+2cPFP3mdOyHt/sk7uckrFofVWyjM33124/MKfrvwzOXazc7ZCNKuu9lPk9mVba+spYF7aV2Dn7nuPMvow2voZOtpsszzgzWiT3VVXbqtHfP7xzjq0qb+qysFSutXNa1uMHnJMVWmO2dMyX4X5mlCFW7nZe70onpReZ5K1W268GSS9gw87ag+iNV6PRSKaT+zb9gW2lcP71xPw+KVlbr9fzG/LD3cldVNXrXV22DPdVwbMLpZX7Bq3NzL8d2zTHrye59S9frc3J12Mt304c/Zqr7RFhY9FVdl9hPjPf1nvnAB2KlbsAAJQtVu7y/zMDAMoWK3cBAChbrNyl3gUAlC1W7gIAULZYuUu9CwAoW6zcBQCgbLFyl3oXAFC2WLkLAEDZYuUu9S4AoGyxchcAgLLFyl3qXQBA2WLlLgAAZYuVu9S7AICyxcpdAADKFit3qXeBg/jtt9/k2NaflXu8dLLMoZ7ZrA+HbtlEsj/AOYuVuwAO4vb29vHxcTwe39/fV8fP3Sa2iWR/gHMWK3epd4GD0ISLk7vJ/gDnLFbudkg6iMViMRwOZVomBoNBte28ZrOZTIxGI+u/1uv1n3/+KdMysdlskpfogJt9uF2/LeD/+XZrbbV2ZsLasx4dNmhsge1HknWi9iVdfwBAILFy92vq3fxnte0+NFx//vwpPVESmb5zkU/h8fFRF9Peyr/ElpSZksq1fRnwxazd+guxtTPzF0o2X19fL5fLPXO39iVdfwBAILFyt0O1XYkGqi7Q0uPYtExYsVu5Khnolm+r4/G41+tJLtbO9K+SPL67u5NgTlbSkrsyp/YlXX8AQCCxcrfD67tNIapV7O3t7Xw+3zN3GV5GNL6tSmOeTCZJ7tpM/ypyFziGWLnbobwrkU5nOp3mQ3MtuasLNF0qA7pizVIbs10TyWfmL8wHjS2kdUCIcWbgXWLlbqh6V/uXp6cnedsyc596199UUjHOjDD09gW9SVBDsWlmwi61+JukbKa+PMnd2pd0/QEAgcTKXQAxtdTEAN4lVu7y/V2gQ1Kz+n/6lB2Px8/Pz3bhFsCHxcpdAKHopRadptgFDiJW7lLvAgDKFit3AQAoW6zcpd4FAJQtVu4CAFC2WLlLvQsAKFus3AUAoGyxcpd6FwBQtli5CwBA2WLlLvUuAKBssXIXAICyxcpd6l0AQNli5S4AAGWLlbth6119CFrTk0Tbf2vG47H8fNcTef2a/eN+gXb6ZKGWBpM3pz2b8U72/N1q+wjewWBw8C3aJnhUA05RrNw9rL///tt+dk66mLu7O5mYz+fWy/ieaGes7p+7JDSkDbRn0ucbSe0aNBFt/u3tbb/f1+g9+BZ3vkcgpli5e9j6VRL3+/fvf/31l0Vvh9d3l8ulTddWAOQuDqir3JWgnUwm19fX+k+taHVPyF1AxcrdgxuPx7PZzEdvE+0gdHq9XmvHIQf2aDSSNcjHZMe8LblYLIbDYTIILBM6v3o7yCb9kVS6MiFVrz483J4xrpuw6fv7+9rtyoTsmA6v2Zrz5LZ3oavy70s7KXuiqr1NlMdnUlPbbmlOebOp3rYcG0nWZuY3lGShtvydDfgDWyR3caJi5e4xrtf66NXl85/VazckXVJySTXvIGxJKWFrc1f7BR1w035BB5k1bq0bqprr3abtyh9AVtJ00dcvmc+U/dlsNhcXF6vV6l3XmHGKfCY1te2W5pQ0G2mKfsTYVptfr7V2bqwCPvgWyV2cqFi5ewzfv3+XxG0veZPzdInqXq+nPUUSYJUrWKu6qKvNPB1k1h5Epl9eXuyEvSl329O0ZQ/9kr6GqLaFwrdv32SOL8RRJMukfdp2MlPm1DabJOSa7pNqqXcPu0VyFycqVu4evN6VSleOcAvdpuWPnbs2pOw/9+oTuetriJ25m/dNWqkzzlywd+Vu0pyqbQr6ZlPbkD5zffcgWyR3caJi5e5hJaHbLhmLa8nFnePMyUtkhdPp1A++tadmy3a1TvV7aKvy95E2DVl7vgRHeVrGma1t580pb2y2wn3GmavX+5n9pv0Vk8NukdzFiYqVuwe/n7l6+z2iluX9kGx7/tl3B5vuq0pe8vDwcHl56bsPG2rWa896PdhPN+Wu3YFlpartjP5Kl/Sr8u9L5kitY/en0GcVrOm+Kt+u8uZUe4XC38ekc3R538z8pv33d/2YysG3SO7iRMXK3dPSNIoLdO5jmfT1SfaZLZK7OFGxcjfs/1dVS86+n5+fk7s3gQh2/n9VOalTkwsix/bhLfL/VeGkxcrdk2DfKaw47FEEG+P9sv9u5eu3CMQRK3dPq94FAOC9YuUuAABli5W71LsAgLLFyl0AAMoWK3epdwEAZYuVuwAAlC1W7lLvAgDKFit3AQAoW6zcpd4FAJQtVu4CAFC2WLlLvQsAKFus3AUAoGyxcve06t3a534DEegz8pIn5f38+XO1Wt3f3+vzfOR4PvbTh2yLtfsDnKdYuRtf7RPpu94pIHV7eyuZOh6P/UPpZeZ8PpcWK03XP5H+qLuhW6zdH+A8xcrd+PUuuYuToAnnc+7Xr18PDw/6z69pun6L+f4AZytW7nZIKwB9mPZisRgMBtW2s5jNZjIxGo10rEwXtn/mLwFiWi6XFxcXUuNaM9ZGa4/CFVYEyzLSyKXx6+Bwfq7pG79MbDab4XBYvT0QbItdv3Uglli5+zX1bv6z2nYoerlLu6GkGvDdje+D9CV6tYwLV4jMX1tNmrHGrW/5MtMStCl3fePXhZMDgau5QK1Yudsh37lImdvr9aQn0n5EF6jNXcaccRKkJUtJapWoNVfNWktHa/k72/nOBZItAjCxcrfD67u+77i9vZ1MJjJtXZK/IYXcxcmxBqz//ILcTbYIwMTK3Q7ZwJr1RHLCPp1Ok5Fnchcnx9/fpFrGmTWD89NQG/7Z50CQiWSLAEys3O223tUbSSp3d4n0OE9PT/K2ZVpP3vVOK7uvitxFfPn9Tb65+vuqatuzXW3RA2Sf3P3Xv/7FHVVAk1i52yGCE6XS786WvUXghMTK3SDXdwEAOJJYudshchcA8AVi5W78/68KAIDPiJW7AACULVbuUu8CAMoWK3cBAChbrNyl3gUAlC1W7gIAULZYuUu9CwAoW6zcBQCgbLFyl3oXAFC2JHf/59f//uMf//iPLZn47bffZL4t89//9Z/UuwAAfFys3KXeBQCULVbuAgBQtli52229a88ZFYvFYjAYHOp92XN8P/9wNN3Jg6wKBTt4O9HH9H7m2SHnc3wtl8uXlxeZuLy8zN+m/HY4HEqvuufapBeu3KOR3+Xzf7X9NT1axv7u+pblj9Xv9w/41z9FsXK3Q9o4rN0cvHG0P+9o/6chyZLr9ZoniqPdodrJoZ7TdT7Hl0Td3d2dxra8zfl8nmz3vR+pLL9/SH9sEwex809g7+ID76gwsXK3w3pXjpDJZGLHm54nHrBxHLBf4HmF2OlQ7eRQ6zmf40vKWfmppxRytrFare7v75NNvOuNk7vliZW7XantBexc1bcnm9aX2IeovxqNRrPZ7ObmxroYOfCm06mc/NoLZWKxWAyHw+p1tE3HkYS8XA7RljXbvukLx+OxztQX2m4/PT3JhJ6252tD8axFWQPLG3DeDvUlvv3YsLA2sNrGb9Vh0wqrMzu+fI3ra1//1/lw7tZ+yMl+Ju9XPxnZjfxDa+8cWt6p/dFtpu5V09+uInffipW7X1Pv5j9rDw87Q2/qtnRCGvFms9HDW48Ef5Irh0Sv1/Mr0YNcfqsjb3bk55vI11w1nFTazHz4Ll/bkf52CKW2RVVvG3DeDlvaT/Ja3xe3rFCd1fGVhEryzw8U+kliNX3ItZ+ezZTttnxoeedQ+05r/+g6Uy9aN/3tkndRO/x+VmLlblfeez4uE3ZCV2XVQOUamaxEu5uWQ8LP9KeKTWu2aX+jiu1VfpAna+v6w8ZX2Cd3a1t1U1fetFjeiVdZep3V8ZUEbZIxHxs09rlbewLh97PlQ/AfWkvnkP+9kjn6R5d1+tOplr9d/sbPvOSNlbsxr+9+oIfSazwqOY/ep1/Y2fclS+qxXTX0C+fcvs9WqNytzun4Ona92/JZtQ/dJx9ay558Pnfz1VLverFyt0PJuI0ferIuw9+T6Rewl1hb14E1mbDmtWe/kGw6X7M/yfUXaVrGwQ77nQ2cBN9mmhpw3qg+Ns7cMpZr6zmf4+vY13fzAeR8P5vOJPRD80nZ1DnsHGe2P3rtOHO+Wq7verFyN+b3d22+3nyRD1jlo1XV9pRQfuoYi/9+Ye0hoXdG5Pd9tI+D2Wqrtx2Qvja/G4Jx5vNRO17qG3BLQaxr0PbjW2btaG17Ve136UyOr6Pez9x0tpTsZ+1fTd/R1dVVMp7sdz7ZbtM7zZtW031VtePM5G6s3A3iIN99tPG3rt8NEEvZx1eE7+8GRO56sXI3zv/PrOd6Hx6hrR1fAqDKPr7s/6uqXivy5Ldf9v9VRcD/V5WLlbtl0GGf0z1OgMg4vnDqYuVunHoXAIBjiJW7AACULVbuUu8CAMoWK3cBAChbrNyl3gUAlC1W7gIAULZYuUu9CwAoW6zcBQCgbLFyl3oXAFC2WLkLAEDZYuUu9S4AoGyxchcAgLLFyt1TrHfzp3q99zlfwMHpo9a+5oFrX9ngv/J9AUcSK3dP0Sdzl5DGMdze3j4+Po7H4/w5dLU+0w6/sg2/930BAcXK3TOsd8ldHIMmU3m5+973BQQUK3c7JG91NBrNZjN5t3JUy4TMlDl6kPd6vevr68p1Mb9+/Xp4eJDftuSuLPPHH3/ozPV6rWvQp4fqHH0ctG2o688AxfLN27dYnbZWqu2w5VjQxXwbllZtK9QXymK+5euAsF+nzq89OvxitsBisRgOh5yeohixcvdr6t38Z7U94OXwHgwGfnntUOT4X61W0pv8/PlzOp32+31ZbLlcygIyIcvkG7JuSDsU7UH8qpJN0KHgqHzzznNX26qf2XQsyAISunoIJL+6u7ubTCbJ6akcMpvNRg+TZJ350aG74fdTF5BjjdxFSWLlbod8vyOdhVWiMlN+Sp+iV5Wk8JXolWnpfebzedJh+VXJhPQmdnavr5XFZKbvgMhdfIHarK2ac7flWPCt2lZ+c3NjYewL2crV0L6d6zLJ0eFLZ1lAD7p8/4FTFyt3O7y+mwwOa49g4aoT2hH46ar5+m5Vl7taDej5ezJGd6SPFKg+mrv5sVA15+7V1ZUO5CSZmu9ARe7ivMXK3Q75kTGtaP3wlyTljx8/bIT55eXl8vIyH7VLVpWMpPmeyA9T06Hg2HwzkwTVAWGtZVtyt/ZYaBpnfnh48AdFPqqcbKj26Eh2g3FmFClW7kaod6vX20bkFF6mtd71/Y6frlpz1w+4WUdmo3ba0eh9K9xXhaOqHTrWO5h0vm+H7ceCrk1Xm4zZyMIy03Jal0nW2XJ0NO0n91WhMLFyFwAStQPXwOmKlbun+P1dAEcltfjz87Nd6wVOXazcBQBl3xKuXi/KAGWIlbvUuwCAssXKXQAAyhYrd6l3AQBli5W7AACULVbuUu8CAMoWK3cBAChbrNyl3gUAlC1W7gIAULZYuUu9CwAoW6zcBQCgbLFyl3oXAFC2WLkLAEDZYuVuYfVu8rTd5MG9wPHYQwV4ogAQTazcLYl/aOivrevra/utf743cFjL5fLl5eX+/t4mut4jAP8WK3dLqnel2J1Op00PDSV3cTxS7E4mEznP44nxQECxcrdDNi63Xq+lwxqPx7PZTP45Go20XJDPQn6l48YysdlshsOhTC8Wi8FgUL0WuPax6kvst0rj1hbTlecvBD7Dn9VxhgdEEyt3v6bezX9KbbparWqH46zbkombmxupX/WqrQaqTlvK6pIyU1JZ41bjXLM8WVveM/oXAh8mLcpO4MhdIJpYudsVrTh9bepviWpJSpuWCatZK1cl28o1evPc9cVu8kLgY6h3gchi5W6313eXy+VwOJSAlE7KropJwTqfz/fM3aZRYru9pSl3GV7GAVmjpXUBAcXK3c5JQMrPi4sLvSXKf/OnPXd1gaRi/n2r2vaD/X5fftU0zpxcBgY+g/uZgchi5W5X9W7yRdvq9brszc2NTO9T7yYjxjpcLL/y//QL631b+X1VjDPjIKwBN91RD6ArsXIXAICyxcrdkr6/CwBALlbuAgBQtli5S70LAChbrNwFAKBssXKXehcAULZYuQsAQNli5S71LgCgbLFyFwCAssXKXepdAEDZYuUuAABli5W71LsAgLLFyl0AAMoWK3epdwEAZYuVuwAAlC1W7kaud/0zdw9L1pw/dne5XA6HwyNtEcXTR0rTfoCAYuVuZEfN3Zubm/l87lcuM+Un/SY+4Pb29urqajab0X6AgGLl7jnXu5eXl4PBQOdIsbJareg38RnHa7EAPiNW7nZISoSnpyeZWK/X19fX+Rz5LGTizz//lDmLxUIz8tevX3/88Yd9lNW2s7PFZGKz2QyHw50vkf5RZuo/ddNS/soc7TfH47FksMy34ejanQE8cheIKVbufk29m//U+tJfYZXk6/f7Ps90NPjx8VGvnPnIlK5NZkrEyvLJYhqKO18icx4eHnq9ngS8BPPd3Z2sIe83bY5tRVOc7hU5cheIKVbudkXTKylJrfpUvhfTaZmwyrV6LUbzxfZ8ifxT41aqWw1gn9Ba2lavV3z9mm35rj9FxELuAjHFyt1ur+/qLcTr9Vq6qv1zd+di+79EiuzJZDKdTiV9a1+i489J7uqryF0kyF0gpli52zmJXvkpVW/tOHMeqDKRXF5tz932l/ihaZsvxbcmsR9StpXUluZARe4CUcXK3a7qXT+Qaxmm3+Sp3H1VeYj6m6T2GWfe+RLJey12q7d18NPT083Njcy0eldeqzdb2Y1ggLJbAoXeB9D1HgH4t1i5iz1RygDAiYqVu5G/vxsKuQsAJypW7mJP5C4AnKhYuUu9CwAoW6zcBQCgbLFyl3oXAFC2WLkLAEDZYuUu9S4AoGyxchcAgLLFyl3qXQBA2WLlLgAAZYuVu9S7AICyxcpdAADKFit3qXcBAGWLlbsAAJQtVu4Gr3d5GgFOhbRVOW71Z8syeXuufRb1nq9V4/FYft7f3++zk7YS/1xqfWaw7Ml0OrWHB8tqLy8vLy4u8pn//Oc/5bW6qn3eONCtWLkbHLmLU3F7eyvhJLHUkn95e9bw08T6tXV9fb3na20Nd3d3MjGfz3ceKbYS3a6t0HZbJnq9nuyDrlbjtnbmu9440K1YuUu9CxyEBs97czcpMVs0HQvL5dKmB4PBniuRsJxMJnnGW7Ja1jbNfNcbB7oVK3e74g9763rk0J3NZjJnNBrpMWzdhO90knN2+1i7fk/Av1njXCwWw+HQmvF6vdZRZZmvMSkzbVo1LZbPrLaHklS6MuEr0dqtV6/HjkxYkZ2TIP/x48fV1ZXP0Xwm58Q4IbFy92vq3fynZO1qtUqGtuxVedzW5q5NyNo2m83Ok33gy2hMSquWxPK5q1dSk2Feyc6npyddXl+bL2Yz9XqwDU1b3GoA2zGSb71yuWuv0gVkwodobaYmM8ldnJBYudshuxFDrw9Vb28w2Zm71fac3dZmJTLQueQ6aG0zTk43NWI1LGsXqz311EFmPeOU6ZeXFzkKmrZeNde7yRbl5/Pzsx/9zmeSuzghsXK3w+/jJtel/A0mdua+M3cZXkZA++RufoXVgrN2saYhn2TTckTszN1kT/x8u+hTeyXIzyR3cUJi5W6H7D5MK3b12E7G1pLbQLQmtt8mF8aAIJrGmbXF2lmmtOfft6ptxPb7ffltvlhVF5/y2+SeLB/S+db9PVw6305b/YGmp7y158FN+wMEFyt3u/3/p+R49ndq6FWum5ub6vVLEf40XIegR6PRbDbL76tinBmhWItN7qvSBizz/dVcfYm/nbB2sSR3Hx4eLi8v/XmnVcz51vVI8UnpL+tozCffA9Z/qmRmUpQDwcXKXQDH9t6IOmykEZBArNzl/1sGjo3cBboVK3cBHBu5C3QrVu5S7wIAyhYrdwEAKFus3KXeBQCULVbuAgBQtli5S70LAChbrNwFAKBssXKXehcAULZYuQsAQNli5S71LgCgbLFyFwCAssXKXepdAEDZYuUuAABli5W7B6x3/RPpv/xTBTqmj9Gl/X/AB57cYM/qfnx89HNkws/82A7og71rd8keWix9dNcfG94hVu62+/vvv+1nO32CvT2RvpO9BTokh278vjjms4k+tlf2Ko3J9Xp9fX1dbVNT6PSRduAk/tbwYuVue70rifv9+/e//vrLord9+ZhHNfAFTqIvjnmEfjJ35aR/Mpm8K2g/uQMn8beGFyt3dxqPx1LF+uhtEfOoBr6A9cUSA/1+fzAY/Pz5czqdPj4+yq+kGtPxycViIb/Sl9jQqNZqWrfpr6x6k9fKS4bDoX9t7Uz/cksFvwndATEaje7v73VaDvBer2fbsgry4eFBlpE5srD0ALJC7Qr8y2vfV+3MfN9sjr6RpN+ofYPJx6V7K/+U9dSmYO3n2fQh6w7o+9U37ovp5FMld09OrNzd5/quj15dPv+pS5K7OFu+L9ZpmyMTetHRXzi0ePZr8AGcJIFeWbQV1s7Ul8jMzWYja67dRHKEysKr1UpXJWcJuvxyuZRfyYTmn19D9Tal8vfVNDPZN3uzsq3a3E3eoO1nshsycXd3V3tBt+nzrJ0pE7Ieq5v9e0z2vCJ3T1Cs3N3H9+/fJXH3KXnJXZwt3xdrWuTlVPVaX8p0UqVpDNgcK0P9a/MwqFz8WFlWbUvSb9++5YVgfoTKdjW3dItaoEtgz+fzZEN2S1H1evtY/r6SHfZvNtk3H5b5XjW9QX8S0F7v1n6eycfu91nOFfw5StOnaoU+uXtaYuXuznpXKl1pnYwzA+32zF29GHmk3G1Zoe1kfoRqymoQ+unq7cizra02le0i655v9r25q9NaHPtx5qbrux/I3aurK6un20Od3D05sXK33btCtyJ3ccbax5m1UEvSq32cORk9rlpzV2cmY8L7jDNX2zD78eOHjTC/vLxcXl7agKqNsmopnAzP5u+rfWb+ZpvGmWtzV/e2eh0Dt33zZzl2P3PT59n0IT88PORvvGmkndw9LbFyd+f9zNXe3yPSWx6qD31/Djh1+X1Vmmd6X5XenVS5e3mq16/8VnX3VdWmTnvu+pf7EVG/Cb1Xw99XVb39umry1dWkeNWvzMq01bv5+6qdme+bjVo33VeV7IOswUa55XNOvr/r118709bW/iHLauWf+idr/1TJ3dMSK3cBHERLX1zqOFDt+yr1zSbvkdw9LbFyl/9vGTiIlv+vqtQoOsPc5f+rOlGxchfAsZUaRWeYuzhRsXKXehcAULZYuQsAQNli5S71LgCgbLFyFwCAssXKXepdAEDZYuUuAABli5W71LsAgLLFyl0AAMoWK3epdwEAZYuVuwAAlC1W7lLvAgDK9t7c/T/aGtpHA8TWtAAAAABJRU5ErkJggg==


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

Отредактировано Dumby (21-10-2022 17:58:35)

Отсутствует

 

№1659821-10-2022 17:58:12

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

Re: Custom Buttons

Dumby пишет

Сколько бы раз я не открывал это окно — кука никуда не исчезает.

Вау! Это я отдельную кнопку создал с предложенным кодом.
А, оказывается, есть и существующая, у которой этот код открытия passwordManager.xhtml
лежит во вкладке Код. Называется кнопка «ПАРОЛИ/КУКИ».


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

Отредактировано Dumby (21-10-2022 18:07:33)

Отсутствует

 

№1659921-10-2022 18:10:29

ВВП
Участник
 
Группа: Members
Зарегистрирован: 13-03-2021
Сообщений: 336
UA: Firefox 106.0

Re: Custom Buttons

Dumby

Dumby пишет

у этой кнопки код ... удаляющий куки.

Понятно, и что делать ? Что же сразу удаляет ? Может перелопатить , типа
this.onclick = this.oncontextmenu = function(event) {

Отсутствует

 

№1660021-10-2022 19:06:53

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

Re: Custom Buttons

ВВП пишет

Что же сразу удаляет ?

В каком смысле? Так уж она сделана.


Можно, например, заменить onclick на onauxclick
и не будет ничего удалять, а неиспользуемый код останется на память.
Ну или да, перелопатить полностью.


И, хорошо бы удалить .QueryInterface(Ci.nsIPlaintextEditor)
нет такого интерфейса уже давно.

Отсутствует

 

Board footer

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