From ec4a192d6b4ebeee9761edd14946a774694b3e67 Mon Sep 17 00:00:00 2001 From: Tim Waugh Date: Wed, 22 Jul 2009 14:25:19 +0000 Subject: [PATCH] - 1.1.10: - New udev rules for adding/enabling/disabling USB printers automatically. - Now uses gnome-packagekit utility to install packages instead of the D-Bus API. - Fixed detection of stopped jobs with CUPS 1.4. - Fixed tracebacks when adding a new printer and when receiving IPP notifications. - Fixed 'location' field for printers added on remote CUPS servers. - Fixed handling of incorrect authentication. - Some UI and troubleshooter fixes have been made. --- .cvsignore | 1 + sources | 2 +- system-config-printer-1.1.10.tar.bz2.sig | Bin 0 -> 65 bytes system-config-printer-arrows.patch | 79 ------------------ system-config-printer-bug507489.patch | 15 ---- system-config-printer-gutenprint.patch | 14 ---- system-config-printer-https.patch | 29 ------- system-config-printer-incorrect-auth.patch | 12 --- ...onfig-printer-ipp-nonfatal-exception.patch | 12 --- system-config-printer-nmblookup-failure.patch | 14 ---- system-config-printer-packagekit.patch | 77 ----------------- system-config-printer-properties-cancel.patch | 12 --- ...config-printer-remote-location-field.patch | 18 ---- system-config-printer-stopped-jobs.patch | 15 ---- system-config-printer.spec | 58 +++++++------ upstream-key.gpg | 66 +++++++-------- 16 files changed, 68 insertions(+), 356 deletions(-) create mode 100644 system-config-printer-1.1.10.tar.bz2.sig delete mode 100644 system-config-printer-arrows.patch delete mode 100644 system-config-printer-bug507489.patch delete mode 100644 system-config-printer-gutenprint.patch delete mode 100644 system-config-printer-https.patch delete mode 100644 system-config-printer-incorrect-auth.patch delete mode 100644 system-config-printer-ipp-nonfatal-exception.patch delete mode 100644 system-config-printer-nmblookup-failure.patch delete mode 100644 system-config-printer-packagekit.patch delete mode 100644 system-config-printer-properties-cancel.patch delete mode 100644 system-config-printer-remote-location-field.patch delete mode 100644 system-config-printer-stopped-jobs.patch diff --git a/.cvsignore b/.cvsignore index cfd21f2..5498935 100644 --- a/.cvsignore +++ b/.cvsignore @@ -201,3 +201,4 @@ system-config-printer-1.1.6.tar.bz2 system-config-printer-1.1.7.tar.bz2 pycups-1.9.46.tar.bz2 system-config-printer-1.1.8.tar.bz2 +system-config-printer-1.1.10.tar.bz2 diff --git a/sources b/sources index 3a9fa6f..35e7fe9 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ ac8f98a40b0fc4b6ab4470f10489887a pysmbc-1.0.6.tar.bz2 895d4170542ec80c74d41746a9474409 pycups-1.9.46.tar.bz2 -fa520cbf9cd86dc6fa8becd872bbbfa9 system-config-printer-1.1.8.tar.bz2 +18d7455f832a9bc5b72d15e5e38913cd system-config-printer-1.1.10.tar.bz2 diff --git a/system-config-printer-1.1.10.tar.bz2.sig b/system-config-printer-1.1.10.tar.bz2.sig new file mode 100644 index 0000000000000000000000000000000000000000..6ffcf3b705af010a9549a49537f5bf2601e3eab2 GIT binary patch literal 65 zcmV-H0KWf-KLZ5-N@pNW1hg7`no8Q&5dyA#0HDXR?=-!Wv%}#n3ecP9lF+)7<%0m9 XTq~0)+=5SK{fU^%|L)Z7V`f?Vv$G*Q literal 0 HcmV?d00001 diff --git a/system-config-printer-arrows.patch b/system-config-printer-arrows.patch deleted file mode 100644 index d04e80f..0000000 --- a/system-config-printer-arrows.patch +++ /dev/null @@ -1,79 +0,0 @@ -diff -up system-config-printer-1.1.8/glade/NewPrinterWindow.glade.arrows system-config-printer-1.1.8/glade/NewPrinterWindow.glade ---- system-config-printer-1.1.8/glade/NewPrinterWindow.glade.arrows 2009-06-03 09:20:26.000000000 +0100 -+++ system-config-printer-1.1.8/glade/NewPrinterWindow.glade 2009-07-03 18:18:50.640997051 +0100 -@@ -3662,6 +3662,7 @@ DTR/DSR (Hardware) - False - False - False -+ - - - -@@ -3693,6 +3694,7 @@ DTR/DSR (Hardware) - - - True -+ False - True - True - GTK_RELIEF_NORMAL -@@ -3771,6 +3773,7 @@ DTR/DSR (Hardware) - - - True -+ False - True - True - GTK_RELIEF_NORMAL -@@ -3823,6 +3826,7 @@ DTR/DSR (Hardware) - False - False - False -+ - - - -diff -up system-config-printer-1.1.8/system-config-printer.py.arrows system-config-printer-1.1.8/system-config-printer.py ---- system-config-printer-1.1.8/system-config-printer.py.arrows 2009-07-03 18:18:36.478996538 +0100 -+++ system-config-printer-1.1.8/system-config-printer.py 2009-07-03 18:18:50.643996718 +0100 -@@ -174,7 +174,6 @@ def moveClassMembers(treeview_from, tree - for row in rows: - path = row.get_path() - iter = model_from.get_iter(path) -- - row_data = model_from.get(iter, 0) - model_to.append(row_data) - model_from.remove(iter) -@@ -3547,6 +3546,8 @@ class NewPrinterGUI(GtkGUI): - "entNPTDevice", - "tvNCMembers", - "tvNCNotMembers", -+ "btnNCAddMember", -+ "btnNCDelMember", - "ntbkPPDSource", - "rbtnNPPPD", - "tvNPMakes", -@@ -4089,11 +4090,23 @@ class NewPrinterGUI(GtkGUI): - moveClassMembers(self.tvNCNotMembers, self.tvNCMembers) - self.btnNPApply.set_sensitive( - bool(getCurrentClassMembers(self.tvNCMembers))) -+ button.set_sensitive(False) - - def on_btnNCDelMember_clicked(self, button): - moveClassMembers(self.tvNCMembers, self.tvNCNotMembers) - self.btnNPApply.set_sensitive( - bool(getCurrentClassMembers(self.tvNCMembers))) -+ button.set_sensitive(False) -+ -+ def on_tvNCMembers_cursor_changed(self, widget): -+ selection = widget.get_selection() -+ model_from, rows = selection.get_selected_rows() -+ self.btnNCDelMember.set_sensitive(rows != []) -+ -+ def on_tvNCNotMembers_cursor_changed(self, widget): -+ selection = widget.get_selection() -+ model_from, rows = selection.get_selected_rows() -+ self.btnNCAddMember.set_sensitive(rows != []) - - # Navigation buttons - diff --git a/system-config-printer-bug507489.patch b/system-config-printer-bug507489.patch deleted file mode 100644 index 29e8121..0000000 --- a/system-config-printer-bug507489.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff -up system-config-printer-1.1.8/system-config-printer.py.bug507489 system-config-printer-1.1.8/system-config-printer.py ---- system-config-printer-1.1.8/system-config-printer.py.bug507489 2009-06-17 18:39:51.000000000 +0100 -+++ system-config-printer-1.1.8/system-config-printer.py 2009-06-23 12:23:49.888572438 +0100 -@@ -6644,6 +6644,11 @@ class NewPrinterGUI(GtkGUI): - - iter = model.iter_next (iter) - -+ # Load information about the printer, -+ # e.g. self.mainapp.server_side_options and self.mainapp.ppd -+ # (both used below). -+ self.mainapp.fillPrinterTab (name) -+ - if check: - try: - self.checkDriverExists (name, ppd=checkppd) diff --git a/system-config-printer-gutenprint.patch b/system-config-printer-gutenprint.patch deleted file mode 100644 index f3f35ad..0000000 --- a/system-config-printer-gutenprint.patch +++ /dev/null @@ -1,14 +0,0 @@ -diff -up system-config-printer-1.1.8/cupshelpers/cupshelpers.py.gutenprint system-config-printer-1.1.8/cupshelpers/cupshelpers.py ---- system-config-printer-1.1.8/cupshelpers/cupshelpers.py.gutenprint 2009-06-17 18:39:51.000000000 +0100 -+++ system-config-printer-1.1.8/cupshelpers/cupshelpers.py 2009-07-03 18:09:03.598995561 +0100 -@@ -736,8 +736,10 @@ def missingPackagesAndExecutables(ppd): - # IJS servers (used by foomatic) - 'hpijs': 'hpijs', - 'ijsgutenprint.5.0': 'gutenprint', -+ 'ijsgutenprint.5.2': 'gutenprint', - # CUPS filters - 'rastertogutenprint.5.0': 'gutenprint-cups', -+ 'rastertogutenprint.5.2': 'gutenprint-cups', - 'commandtoepson': 'gutenprint-cups', - 'commandtocanon': 'gutenprint-cups', - } diff --git a/system-config-printer-https.patch b/system-config-printer-https.patch deleted file mode 100644 index 25185a6..0000000 --- a/system-config-printer-https.patch +++ /dev/null @@ -1,29 +0,0 @@ -diff -up system-config-printer-1.1.8/system-config-printer.py.https system-config-printer-1.1.8/system-config-printer.py ---- system-config-printer-1.1.8/system-config-printer.py.https 2009-06-24 10:46:14.873192155 +0100 -+++ system-config-printer-1.1.8/system-config-printer.py 2009-06-24 10:46:25.057317039 +0100 -@@ -5431,7 +5431,13 @@ class NewPrinterGUI(GtkGUI): - (host, port) = urllib.splitnport (host, defport=port) - - try: -- c = cups.Connection (host=host, port=port) -+ if self.device.type == "https": -+ encrypt = cups.HTTP_ENCRYPT_ALWAYS -+ else: -+ encrypt = cups.HTTP_ENCRYPT_IF_REQUESTED -+ -+ c = cups.Connection (host=host, port=port, -+ encryption=encrypt) - printers = c.getPrinters () - del c - except cups.IPPError, (e, m): -@@ -5492,6 +5498,10 @@ class NewPrinterGUI(GtkGUI): - self.entNPTIPPHostname.set_text (match.group (2)) - self.entNPTIPPQueuename.set_text (match.group (3)) - -+ if self.device.type == "https" and uri.startswith ("ipp:"): -+ # Use https in our device URI for this printer. -+ uri = "https:" + uri[4:] -+ - self.lblIPPURI.set_text (uri) - self.lblIPPURI.show() - self.setNPButtons() diff --git a/system-config-printer-incorrect-auth.patch b/system-config-printer-incorrect-auth.patch deleted file mode 100644 index c5989e1..0000000 --- a/system-config-printer-incorrect-auth.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -up system-config-printer-1.1.8/authconn.py.incorrect-auth system-config-printer-1.1.8/authconn.py ---- system-config-printer-1.1.8/authconn.py.incorrect-auth 2009-06-18 16:45:49.000000000 +0100 -+++ system-config-printer-1.1.8/authconn.py 2009-06-25 17:51:23.943329108 +0100 -@@ -389,6 +389,8 @@ class Connection: - _("The password may be incorrect.")) - if self._lock: - d.connect ("response", self._on_not_authorized_dialog_response) -+ d.show_all () -+ d.show_now () - gtk.gdk.threads_leave () - else: - d.run () diff --git a/system-config-printer-ipp-nonfatal-exception.patch b/system-config-printer-ipp-nonfatal-exception.patch deleted file mode 100644 index 66038d9..0000000 --- a/system-config-printer-ipp-nonfatal-exception.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -up system-config-printer-1.1.8/system-config-printer.py.ipp-nonfatal-exception system-config-printer-1.1.8/system-config-printer.py ---- system-config-printer-1.1.8/system-config-printer.py.ipp-nonfatal-exception 2009-06-24 10:28:47.773317435 +0100 -+++ system-config-printer-1.1.8/system-config-printer.py 2009-06-24 10:29:24.339192122 +0100 -@@ -4167,6 +4167,8 @@ class NewPrinterGUI(GtkGUI): - self.entNPDescription.set_text (info) - if len (location) > 0: - self.entNPLocation.set_text (location) -+ except RuntimeError: -+ pass - except: - nonfatalException () - diff --git a/system-config-printer-nmblookup-failure.patch b/system-config-printer-nmblookup-failure.patch deleted file mode 100644 index 20e9cca..0000000 --- a/system-config-printer-nmblookup-failure.patch +++ /dev/null @@ -1,14 +0,0 @@ -diff -U0 system-config-printer-1.1.8/ChangeLog.nmblookup-failure system-config-printer-1.1.8/ChangeLog -diff -up system-config-printer-1.1.8/troubleshoot/CheckPrinterSanity.py.nmblookup-failure system-config-printer-1.1.8/troubleshoot/CheckPrinterSanity.py ---- system-config-printer-1.1.8/troubleshoot/CheckPrinterSanity.py.nmblookup-failure 2009-05-12 10:36:36.000000000 +0100 -+++ system-config-printer-1.1.8/troubleshoot/CheckPrinterSanity.py 2009-06-25 17:49:39.628328710 +0100 -@@ -99,7 +99,8 @@ class CheckPrinterSanity(Question): - if line.startswith ("querying"): - continue - spc = line.find (' ') -- if spc != -1: -+ if (spc != -1 and -+ not line[spc:].startswith (" failed ")): - # Remember the IP address. - self.answers['remote_server_name'] = line[:spc] - break diff --git a/system-config-printer-packagekit.patch b/system-config-printer-packagekit.patch deleted file mode 100644 index 9ba4fc8..0000000 --- a/system-config-printer-packagekit.patch +++ /dev/null @@ -1,77 +0,0 @@ -diff -up system-config-printer-1.1.8/installpackage.py.packagekit system-config-printer-1.1.8/installpackage.py ---- system-config-printer-1.1.8/installpackage.py.packagekit 2009-05-12 10:36:36.000000000 +0100 -+++ system-config-printer-1.1.8/installpackage.py 2009-07-03 18:07:09.560995667 +0100 -@@ -2,8 +2,8 @@ - - ## system-config-printer - --## Copyright (C) 2008 Red Hat, Inc. --## Copyright (C) 2008 Tim Waugh -+## Copyright (C) 2008, 2009 Red Hat, Inc. -+## Copyright (C) 2008, 2009 Tim Waugh - - ## This program is free software; you can redistribute it and/or modify - ## it under the terms of the GNU General Public License as published by -@@ -19,53 +19,18 @@ - ## along with this program; if not, write to the Free Software - ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - --import dbus --import xml.etree.ElementTree --from dbus.mainloop.glib import DBusGMainLoop --DBusGMainLoop (set_as_default=True) -+import os -+import glib - - class PackageKit: - def __init__ (self): -- bus = dbus.SessionBus () -- obj = bus.get_object ("org.freedesktop.PackageKit", -- "/org/freedesktop/PackageKit") -- -- # Find out which API is required. -- num_args = -1 -- introsp = dbus.Interface (obj, "org.freedesktop.DBus.Introspectable") -- api = introsp.Introspect () -- top = xml.etree.ElementTree.XML (api) -- for interface in top.findall ("interface"): -- if interface.attrib.get ("name") != "org.freedesktop.PackageKit": -- continue -- -- for method in interface.findall ("method"): -- if method.attrib.get ("name") != "InstallPackageName": -- continue -+ for dir in os.environ.get ("PATH", "").split (":"): -+ path = dir + os.path.sep + "gpk-install-package-name" -+ if os.access (path, os.X_OK): -+ self.gpk_install_package_name = path -+ return - -- num_args = len (method.findall ("arg")) -- break -- -- if num_args == -1: -- raise RuntimeError, "Introspection failed for PackageKit" -- -- self.proxy = dbus.Interface (obj, "org.freedesktop.PackageKit") -- self.num_args = num_args -+ raise RuntimeError, "No gpk-install-package-name program available" - - def InstallPackageName (self, xid, timestamp, name): -- proxy = self.proxy -- if self.num_args == 3: -- return proxy.InstallPackageName (xid, timestamp, name, -- reply_handler=self.reply_handler, -- error_handler=self.error_handler) -- else: -- # Old PackageKit interface -- return proxy.InstallPackageName (name, -- reply_handler=self.reply_handler, -- error_handler=self.error_handler) -- -- def reply_handler (self, *args): -- pass -- -- def error_handler (self, *args): -- pass -+ glib.spawn_async ([self.gpk_install_package_name, name]) diff --git a/system-config-printer-properties-cancel.patch b/system-config-printer-properties-cancel.patch deleted file mode 100644 index 7127a08..0000000 --- a/system-config-printer-properties-cancel.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -up system-config-printer-1.1.8/system-config-printer.py.properties-cancel system-config-printer-1.1.8/system-config-printer.py ---- system-config-printer-1.1.8/system-config-printer.py.properties-cancel 2009-06-25 17:50:16.256328643 +0100 -+++ system-config-printer-1.1.8/system-config-printer.py 2009-06-25 17:50:37.650328968 +0100 -@@ -1045,7 +1045,7 @@ class GUI(GtkGUI, monitor.Watcher): - - if ((response == gtk.RESPONSE_OK and not success) or - response == gtk.RESPONSE_CANCEL): -- del self.printer -+ self.printer = None - dialog.hide () - - def dests_iconview_selection_changed (self, iconview): diff --git a/system-config-printer-remote-location-field.patch b/system-config-printer-remote-location-field.patch deleted file mode 100644 index bef4b98..0000000 --- a/system-config-printer-remote-location-field.patch +++ /dev/null @@ -1,18 +0,0 @@ -diff -up system-config-printer-1.1.8/system-config-printer.py.remote-location-field system-config-printer-1.1.8/system-config-printer.py ---- system-config-printer-1.1.8/system-config-printer.py.remote-location-field 2009-06-25 17:46:36.895328974 +0100 -+++ system-config-printer-1.1.8/system-config-printer.py 2009-06-25 17:46:52.622454030 +0100 -@@ -5791,8 +5791,12 @@ class NewPrinterGUI(GtkGUI): - try: - if len (location) == 0 and self.device.device_class == "direct": - # Set location to the name of this host. -- u = os.uname () -- location = u[1] -+ if (self.mainapp.connect_server == 'localhost' or -+ self.mainapp.connect_server[0] == '/'): -+ u = os.uname () -+ location = u[1] -+ else: -+ location = self.mainapp.connect_server - - # Pre-fill location field. - self.entNPLocation.set_text (location) diff --git a/system-config-printer-stopped-jobs.patch b/system-config-printer-stopped-jobs.patch deleted file mode 100644 index a0e0c1f..0000000 --- a/system-config-printer-stopped-jobs.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff -up system-config-printer-1.1.8/jobviewer.py.stopped-jobs system-config-printer-1.1.8/jobviewer.py ---- system-config-printer-1.1.8/jobviewer.py.stopped-jobs 2009-06-17 18:39:51.000000000 +0100 -+++ system-config-printer-1.1.8/jobviewer.py 2009-07-03 18:08:28.040995881 +0100 -@@ -1375,7 +1375,10 @@ class JobViewer (GtkGUI, monitor.Watcher - self.notify_completed_job (jobid) - - # Look out for stopped jobs. -- if (self.trayicon and eventname == 'job-stopped' and -+ if (self.trayicon and -+ (eventname == 'job-stopped' or -+ (eventname == 'job-state-changed' and -+ event['job-state'] == cups.IPP_JOB_STOPPED))and - not jobid in self.stopped_job_prompts): - # Why has the job stopped? It might be due to a job error - # of some sort, or it might be that the backend requires diff --git a/system-config-printer.spec b/system-config-printer.spec index f42a5e8..4ac1d6f 100644 --- a/system-config-printer.spec +++ b/system-config-printer.spec @@ -6,25 +6,14 @@ Summary: A printer administration tool Name: system-config-printer -Version: 1.1.8 -Release: 6%{?dist} +Version: 1.1.10 +Release: 1%{?dist} License: GPLv2+ URL: http://cyberelk.net/tim/software/system-config-printer/ Group: System Environment/Base Source0: http://cyberelk.net/tim/data/system-config-printer/1.1/system-config-printer-%{version}.tar.bz2 Source1: http://cyberelk.net/tim/data/pycups/pycups-%{pycups_version}.tar.bz2 Source2: http://cyberelk.net/tim/data/pysmbc/pysmbc-%{pysmbc_version}.tar.bz2 -Patch1: system-config-printer-bug507489.patch -Patch2: system-config-printer-ipp-nonfatal-exception.patch -Patch3: system-config-printer-https.patch -Patch4: system-config-printer-remote-location-field.patch -Patch5: system-config-printer-nmblookup-failure.patch -Patch6: system-config-printer-properties-cancel.patch -Patch7: system-config-printer-incorrect-auth.patch -Patch8: system-config-printer-packagekit.patch -Patch9: system-config-printer-stopped-jobs.patch -Patch10: system-config-printer-gutenprint.patch -Patch11: system-config-printer-arrows.patch BuildRequires: cups-devel >= 1.2 BuildRequires: python-devel >= 2.4 @@ -32,6 +21,7 @@ BuildRequires: libsmbclient-devel >= 3.2 BuildRequires: desktop-file-utils >= 0.2.92 BuildRequires: gettext-devel BuildRequires: intltool +BuildRequires: libusb-devel, libudev-devel BuildRequires: xmlto BuildRequires: epydoc BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) @@ -73,22 +63,22 @@ Provides: pysmbc = %{pysmbc_version} The common code used by both the graphical and non-graphical parts of the configuration tool. +%package udev +Summary: Rules for udev for automatic configuration of USB printers +Group: System Environment/Base +Requires: system-config-printer-libs = %{version}-%{release} +Obsoletes: hal-cups-utils <= 0.6.20 +Provides: hal-cups-utils = 0.6.20 + +%description udev +The udev rules and helper programs for automatically configuring USB +printers. + %prep %setup -q -a 1 -a 2 -%patch1 -p1 -b .bug507489 -%patch2 -p1 -b .ipp-nonfatal-exception -%patch3 -p1 -b .https -%patch4 -p1 -b .remote-location-field -%patch5 -p1 -b .nmblookup-failure -%patch6 -p1 -b .properties-cancel -%patch7 -p1 -b .incorrect-auth -%patch8 -p1 -b .packagekit -%patch9 -p1 -b .stopped-jobs -%patch10 -p1 -b .gutenprint -%patch11 -p1 -b .arrows %build -%configure +%configure --with-udev-rules pushd pycups-%{pycups_version} make @@ -133,6 +123,11 @@ rm -rf %buildroot %{python_sitelib}/cupshelpers/ppds.py* %{python_sitelib}/*.egg-info +%files udev +%defattr(-,root,root,-) +%{_sysconfdir}/udev/rules.d/*.rules +/lib/udev/* + %files %defattr(-,root,root,-) %doc ChangeLog README @@ -188,6 +183,19 @@ rm -rf %buildroot exit 0 %changelog +* Wed Jul 22 2009 Tim Waugh 1.1.10-1 +- 1.1.10: + - New udev rules for adding/enabling/disabling USB printers + automatically. + - Now uses gnome-packagekit utility to install packages + instead of the D-Bus API. + - Fixed detection of stopped jobs with CUPS 1.4. + - Fixed tracebacks when adding a new printer and when receiving + IPP notifications. + - Fixed 'location' field for printers added on remote CUPS servers. + - Fixed handling of incorrect authentication. + - Some UI and troubleshooter fixes have been made. + * Mon Jul 6 2009 Tim Waugh 1.1.8-6 - Requires gnome-packagekit for gpk-install-package-name. diff --git a/upstream-key.gpg b/upstream-key.gpg index 9e01c60..b9adba8 100644 --- a/upstream-key.gpg +++ b/upstream-key.gpg @@ -1,36 +1,36 @@ -----BEGIN PGP PUBLIC KEY BLOCK----- -Version: GnuPG v1.4.7 (GNU/Linux) +Version: GnuPG v1.4.9 (GNU/Linux) -mQGiBEa5fNcRBACJCPsz2q0hj0p5pJABzMKTb4r5lko0upe6ZYOQ2NFZw61upKzI -uFanlwDVi3MaEHIGf8hsYr82GxTFUc+O2DFskKwEuZ3O4Q50qqkHAnMLZ2VFKXyF -VJRPUrezpiXifbRjdV3ED0ikc7+ANArUStqbaIvjM3zJOo5GuEcO7AAPiwCgofNk -1DG1GNH8cBxqGQoEPYrm/pkD/1e7OsMk50XXTQd77hZW1ViIQK8P4tkj65FWBgNg -d5PyXNqGfOcskn+iVbx9cGsTgAbfP5IVlnxCmf3QE2rLelJtX++aCUmM4irDclTv -9hn5UQf1QPqvwHFr+h6FHAg8WjHhdORc8hDlWMntmAArjmqFY4FcF/DZMzddZNgf -jklwA/0aOef82dkwMbgmtLMcx1m0QTSBV04x2z3UIuBLdG9klhzTSCzr0EbtoSWe -8JN5LdZr//BDJV5elyEWuiQP5uMhXkrVWCZlt3hJ8zvncO/1gnPQPzRty3IuoAyO -j4uIWLupjdHVqqBDhJEmc+MvjRgQvUkdt07PEm5ehaRxaB36I7QdVGltIFdhdWdo -IDx0d2F1Z2hAcmVkaGF0LmNvbT6IZgQTEQIAJgUCRrl9JAIbAwUJA8JnAAYLCQgH -AwIEFQIIAwQWAgMBAh4BAheAAAoJEGklkaMet5kjzfYAoIjd5Y/5+BKxYMXndh4a -54MVmEXoAJ0f1pdb+zMVcCMs/lyB2oF/+nMWwYhGBBARAgAGBQJGuX11AAoJEO3n -xuaBAwm9DF0AnAnBbra0+WvYa1TLgdIA/ME9r/NNAJ9hXtoFm8s/rAw3YUM79wK1 -8P1RIrQcVGltIFdhdWdoIDx0aW1AY3liZXJlbGsubmV0PohmBBMRAgAmBQJGuXzX -AhsDBQkDwmcABgsJCAcDAgQVAggDBBYCAwECHgECF4AACgkQaSWRox63mSPQowCg -jEKmAQght3t/7JVPX6H29kZyqFYAni3DbBuKULwKMuL71PA556bVbdsMiEYEEBEC -AAYFAka5fXUACgkQ7efG5oEDCb3VrwCfft0SMdCYReiyNoazvWmVvfPk1hgAn2JH -1pdBUCMeMVrxbIBfngNM6Me0uQINBEa5fNcQCACqm3SBctiw150XfY5AWUFPwmJB -xX2YTG867RiuaXntFCdERybikjmgNVVlCRudufdqs2bqeqY+oFvS3TMz7SOQmSwv -QJbEx7WrR7RWU9l0UWMPmiOZ6ZMZjwl2qArvR28RME+n2ooFjuOV3xzb1f4itbo0 -KDshdhoXvcr93z7+vSMjAGLwrLButh1BwbadSAFyIkIyguakKak+vY5kcBPbYUh6 -AnLKWZJF/UNzC6gU4fqc1kLM7RbPLO8oXMgghqcEDK7AVQoXD13xXL6+oDCtwv1u -zZ6HTYK4l7Dcnpr9nQALF/yepD0xqpRcAA5GFrElFxdVoF24kRKy56+eOOkTAAMG -B/9npM+/tnF49zw4onQjqEtie1lxDKZAgOmbu34aaH0udF8n37XQdmd4z7M2/Jf8 -qFBqeO01MfYmuAfZ9esM+Sneh3/Nvmi5++kz7IKS4V6EE4DndLZW+hnO09i498Fe -dwEkhsxpU3YqB9IL6iNjKjQgYtfYBlDJvBwtlgUzKK80toAH6XPA6j/SBjJM6vZb -P1XpZajWbkvhKzYfqXtjXZ2dqIGbtSW8uJr1Ighr9ZYQvK0r6XkhZBoUorteQUS4 -IrweKXRGnUeOHuUXr8d7rzsufSP6ZNhQQvwG80vr8V4Z++8YKpfyv8uOwAc3GK/u -9O+CLk4lvD4SBCVoZaSCv/9aiE8EGBECAA8FAka5fNcCGwwFCQPCZwAACgkQaSWR -ox63mSPTcgCfUiOr+XPLLhqJEQLQHp+Y8FvU7voAnRQuODX6A2Siap8Aw09esWVq -L7PW -=wzDO +mQGiBEpnDbARBADRsKGwS54yxqAoniGaI8X+saG4ezdZ1OmPr9f7L4PugzjjL7qR +p9O7hj+RZNVM7QR9nPUFTawBTfWQisyS8/a3xiBbQxlhW8uuORhM2gTkVGGlGbCc +jH+RT0T8t/75m6n2IXKATqugrMH60NXreQQuCKWgCrT6TroMldlVQpBaFwCgx/s0 +1KlfCY42Er0YA/DDpMgTYhUEAI0PgOpD6C8ncEpqvSYSs1qyvRsrpp86M/nyi+pm +15+7IZhlXE53gXeSLT+dTutvVQtbXbf2DwJmAKdjQw1Y4esjxwH1bPYnPnTlIlZ6 +CHQbYO0n6u2pDnSF8sxi3ene6BSuL7NvKpejwXqLEQFGjaop5eAdDs6YvHNU3Yev +os0UA/4t9TstI4laLwvCqZ7npwsNxT/1sXa5F09d26oTSZlJwSEmGe6+tOqAbDYn +1mrCajNt40pGPBKXhE2UNJIBrrWSjZCAp4LSmj6KCEXs35fpmUhUp54V79cC4AI/ +rezLlZIB6l4Dey1is5bkw1yOsBT6Qf4lGJHkggyUfW/ymGZfqbQdVGltIFdhdWdo +IDx0d2F1Z2hAcmVkaGF0LmNvbT6IZgQTEQIAJgUCSmcOPwIbAwUJA8JnAAYLCQgH +AwIEFQIIAwQWAgMBAh4BAheAAAoJEAS0Gn2aStrXYHMAoLxVaLxFP6P6rRlQtla+ +NO1KSkMBAJ9jNppMaAf2pHi1b9CoD4f4MEvOS4hGBBARAgAGBQJKZxDHAAoJEO3n +xuaBAwm91N0AoJROznoZyHKXRxgzLyXemIA4TYMAAJ9Y9HdZOenEMw9HMg36guZK +dBIVLLQcVGltIFdhdWdoIDx0aW1AY3liZXJlbGsubmV0PohmBBMRAgAmBQJKZw2w +AhsDBQkDwmcABgsJCAcDAgQVAggDBBYCAwECHgECF4AACgkQBLQafZpK2tet4gCf +VKhWbUJAcIlNpWpYD0kYgGty/ucAoIfsKq9FNBPw9pQPaDnxbKDyserxiEYEEBEC +AAYFAkpnEMcACgkQ7efG5oEDCb0RvACePTmfisPxeKkGo6QoA42MFH5wtPIAn329 +9ur6BKDz/QrKVT13CxRoKosLuQINBEpnDbAQCACCZaJHH6EctIyz+PYBCzz889PR +iLAOyKlbrgaR4KhVGBFttKyOJkEk+UvxLUuRkOOY6i6TWbT3qNUnZT6QkftGulal +8MAtBf2xnJXEsyKgPkRkeDAx3uvMBfrW0wgxcFw9K6E+p8x76bFFD+FtrduDRfxk +2jDwJgyYubnM3+nPZzZXfuFnxSRYjJcoAq4O61YdH8O79TElEGqTwd/BHeIexEf2 +BkBAscE4GCmGXTYCsLByY8sGD13U7OO3Kk4ul4FgI/mzM25zgqqhbAObjsIwJqE+ +6MXqkkylmo+noTe3zlfNdnR1xkmYUCfUc4+WeFyziHRiXMkt5OYY5wDW5WGnAAMF +B/4gvjt8SXekSxgdFCuEOQ0J2YM4DElQkaf+Tggbr9F3hnsWfJ49gEipCWEhKPt2 +ks4kDexO/Cn6SI7SQUPiNUWylm80G1Dd+xaQ9qrN1KTsReACXOCKoRgz64MooSOj +Qs8YIGI/ejLzPkn6mUEmFRHssd4jmmSCbF99AmVh6Z4VnkKLTG+z3KQUymF0ng5b +AAcwTOJhlAR7xrBJGfhnRUTIaNtD+UnBsoxApeUJie2lc84Pc10p56TGomkEy3Ib +se1kk4w3mZ8kkR57voh/PovSl/8NyPmv81oVHbJnGLKAVku4XT0IBQOBdDKeRKHB +tlPLsK9KFx2LxhtAmQN4C/j5iE8EGBECAA8FAkpnDbACGwwFCQPCZwAACgkQBLQa +fZpK2teQogCgg68475moQ7dh/HIUHRNJKZJfmoQAoIw92pM7V5VYMpz9kW+701Fu +JofS +=vrpj -----END PGP PUBLIC KEY BLOCK-----