From ca42e028a7f3693dc2a1005b33e05d4eaa07d1db Mon Sep 17 00:00:00 2001 From: apprenticeharper Date: Thu, 14 Jan 2016 17:15:43 +0000 Subject: [PATCH] Regression bug fixes --- .../DeDRM.app/Contents/Info.plist | 4 ++-- .../DeDRM.app/Contents/Resources/__init__.py | 3 ++- .../DeDRM.app/Contents/Resources/ineptepub.py | 13 ++++--------- .../DeDRM.app/Contents/Resources/ineptpdf.py | 10 +++------- .../DeDRM.app/Contents/Resources/wineutils.py | 8 ++++---- .../DeDRM_App/DeDRM_lib/DeDRM_App.pyw | 3 ++- .../DeDRM_App/DeDRM_lib/lib/__init__.py | 3 ++- .../DeDRM_App/DeDRM_lib/lib/ineptepub.py | 13 ++++--------- .../DeDRM_App/DeDRM_lib/lib/ineptpdf.py | 10 +++------- .../DeDRM_App/DeDRM_lib/lib/wineutils.py | 8 ++++---- DeDRM_calibre_plugin/DeDRM_plugin.zip | Bin 344915 -> 344949 bytes DeDRM_calibre_plugin/DeDRM_plugin/__init__.py | 3 ++- .../DeDRM_plugin/ineptepub.py | 13 ++++--------- DeDRM_calibre_plugin/DeDRM_plugin/ineptpdf.py | 10 +++------- .../DeDRM_plugin/wineutils.py | 8 ++++---- Obok_calibre_plugin/obok_plugin.zip | Bin 64301 -> 64300 bytes Obok_calibre_plugin/obok_plugin/__init__.py | 2 +- Obok_calibre_plugin/obok_plugin/obok/obok.py | 2 +- 18 files changed, 45 insertions(+), 68 deletions(-) diff --git a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Info.plist b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Info.plist index c9919f8..c36a4c0 100644 --- a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Info.plist +++ b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Info.plist @@ -24,7 +24,7 @@ CFBundleExecutable droplet CFBundleGetInfoString - DeDRM AppleScript 6.3.5 Written 2010–2016 by Apprentice Alf et al. + DeDRM AppleScript 6.3.6 Written 2010–2016 by Apprentice Alf et al. CFBundleIconFile DeDRM CFBundleIdentifier @@ -36,7 +36,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 6.3.5 + 6.3.6 CFBundleSignature dplt LSRequiresCarbon diff --git a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/__init__.py b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/__init__.py index 3254222..ceef266 100644 --- a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/__init__.py +++ b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/__init__.py @@ -47,6 +47,7 @@ __docformat__ = 'restructuredtext en' # 6.3.3 - Bug fix for Kindle for PC support # 6.3.4 - Fixes for Kindle for Android, Linux, and Kobo 3.17 # 6.3.5 - Fixes for Linux, and Kobo 3.19 and more logging +# 6.3.6 - Fixes for ADE ePub and PDF introduced in 6.3.5 """ @@ -54,7 +55,7 @@ Decrypt DRMed ebooks. """ PLUGIN_NAME = u"DeDRM" -PLUGIN_VERSION_TUPLE = (6, 3, 5) +PLUGIN_VERSION_TUPLE = (6, 3, 6) PLUGIN_VERSION = u".".join([unicode(str(x)) for x in PLUGIN_VERSION_TUPLE]) # Include an html helpfile in the plugin's zipfile with the following name. RESOURCE_NAME = PLUGIN_NAME + '_Help.htm' diff --git a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/ineptepub.py b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/ineptepub.py index 5987b8c..5c135ad 100644 --- a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/ineptepub.py +++ b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/ineptepub.py @@ -3,7 +3,7 @@ from __future__ import with_statement -# ineptepub.pyw, version 6.3 +# ineptepub.pyw, version 6.4 # Copyright © 2009-2010 by i♥cabbages # Released under the terms of the GNU General Public Licence, version 3 @@ -40,13 +40,14 @@ from __future__ import with_statement # 6.1 - Work if TkInter is missing # 6.2 - Handle UTF-8 file names inside an ePub, fix by Jose Luis # 6.3 - Add additional check on DER file sanity +# 6.4 - Remove erroneous check on DER file sanity """ Decrypt Adobe Digital Editions encrypted ePub books. """ __license__ = 'GPL v3' -__version__ = "6.3" +__version__ = "6.4" import sys import os @@ -171,14 +172,9 @@ def _load_crypto_libcrypto(): def __init__(self, der): buf = create_string_buffer(der) pp = c_char_pp(cast(buf, c_char_p)) - rsa = self._rsa = d2i_RSAPrivateKey(None, pp, len(der)) + rsa = self._rsa = d2i_RSAPrivateKey(None, pp, len(der)) if rsa is None: raise ADEPTError('Error parsing ADEPT user key DER') - # check if pointer is not NULL - try: - c = self._rsa.contents - except ValueError: - raise ADEPTError('Error parsing ADEPT user key DER') def decrypt(self, from_): rsa = self._rsa @@ -326,7 +322,6 @@ def _load_crypto_pycrypto(): except ValueError: raise ADEPTError('Error parsing ADEPT user key DER') - def bytesToNumber(self, bytes): total = 0L for byte in bytes: diff --git a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/ineptpdf.py b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/ineptpdf.py index 3967647..839297f 100644 --- a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/ineptpdf.py +++ b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/ineptpdf.py @@ -3,7 +3,7 @@ from __future__ import with_statement -# ineptpdf.pyw, version 8.0.2 +# ineptpdf.pyw, version 8.0.3 # Copyright © 2009-2010 by i♥cabbages # Released under the terms of the GNU General Public Licence, version 3 @@ -55,6 +55,7 @@ from __future__ import with_statement # 8.0 - Work if TkInter is missing # 8.0.1 - Broken Metadata fix. # 8.0.2 - Add additional check on DER file sanity +# 8.0.3 - Remove erroneous check on DER file sanity """ @@ -62,7 +63,7 @@ Decrypts Adobe ADEPT-encrypted PDF files. """ __license__ = 'GPL v3' -__version__ = "8.0.2" +__version__ = "8.0.3" import sys import os @@ -201,11 +202,6 @@ def _load_crypto_libcrypto(): rsa = self._rsa = d2i_RSAPrivateKey(None, pp, len(der)) if rsa is None: raise ADEPTError('Error parsing ADEPT user key DER') - # check if pointer is not NULL - try: - c = self._rsa.contents - except ValueError: - raise ADEPTError('Error parsing ADEPT user key DER') def decrypt(self, from_): rsa = self._rsa diff --git a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/wineutils.py b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/wineutils.py index f2f8edc..fff8016 100644 --- a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/wineutils.py +++ b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/wineutils.py @@ -41,15 +41,15 @@ def WineGetKeys(scriptpath, extension, wineprefix=""): print u"{0} v{1}: Wine subprocess call error: {2}".format(PLUGIN_NAME, PLUGIN_VERSION, e.args[0]) if wineprefix != "" and os.path.exists(wineprefix): cmdline = u"WINEPREFIX=\"{2}\" wine C:\\Python27\\python.exe \"{0}\" \"{1}\"".format(scriptpath,outdirpath,wineprefix) - else: + else: cmdline = u"wine C:\\Python27\\python.exe \"{0}\" \"{1}\"".format(scriptpath,outdirpath) - print u"{0} v{1}: Command line: “{2}”".format(PLUGIN_NAME, PLUGIN_VERSION, cmdline) + print u"{0} v{1}: Command line: “{2}”".format(PLUGIN_NAME, PLUGIN_VERSION, cmdline) - try: + try: cmdline = cmdline.encode(sys.getfilesystemencoding()) p2 = Process(cmdline, shell=True, bufsize=1, stdin=None, stdout=sys.stdout, stderr=STDOUT, close_fds=False) result = p2.wait("wait") - except Exception, e: + except Exception, e: print u"{0} v{1}: Wine subprocess call error: {2}".format(PLUGIN_NAME, PLUGIN_VERSION, e.args[0]) # try finding winekeys anyway, even if above code errored diff --git a/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/DeDRM_App.pyw b/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/DeDRM_App.pyw index 0aa55d3..18d9af8 100644 --- a/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/DeDRM_App.pyw +++ b/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/DeDRM_App.pyw @@ -20,8 +20,9 @@ # 6.3.3 - Version bump to match plugin # 6.3.4 - Version bump to match plugin # 6.3.5 - Version bump to match plugin +# 6.3.6 - Version bump to match plugin -__version__ = '6.3.5' +__version__ = '6.3.6' import sys import os, os.path diff --git a/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/__init__.py b/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/__init__.py index 3254222..ceef266 100644 --- a/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/__init__.py +++ b/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/__init__.py @@ -47,6 +47,7 @@ __docformat__ = 'restructuredtext en' # 6.3.3 - Bug fix for Kindle for PC support # 6.3.4 - Fixes for Kindle for Android, Linux, and Kobo 3.17 # 6.3.5 - Fixes for Linux, and Kobo 3.19 and more logging +# 6.3.6 - Fixes for ADE ePub and PDF introduced in 6.3.5 """ @@ -54,7 +55,7 @@ Decrypt DRMed ebooks. """ PLUGIN_NAME = u"DeDRM" -PLUGIN_VERSION_TUPLE = (6, 3, 5) +PLUGIN_VERSION_TUPLE = (6, 3, 6) PLUGIN_VERSION = u".".join([unicode(str(x)) for x in PLUGIN_VERSION_TUPLE]) # Include an html helpfile in the plugin's zipfile with the following name. RESOURCE_NAME = PLUGIN_NAME + '_Help.htm' diff --git a/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/ineptepub.py b/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/ineptepub.py index 5987b8c..5c135ad 100644 --- a/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/ineptepub.py +++ b/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/ineptepub.py @@ -3,7 +3,7 @@ from __future__ import with_statement -# ineptepub.pyw, version 6.3 +# ineptepub.pyw, version 6.4 # Copyright © 2009-2010 by i♥cabbages # Released under the terms of the GNU General Public Licence, version 3 @@ -40,13 +40,14 @@ from __future__ import with_statement # 6.1 - Work if TkInter is missing # 6.2 - Handle UTF-8 file names inside an ePub, fix by Jose Luis # 6.3 - Add additional check on DER file sanity +# 6.4 - Remove erroneous check on DER file sanity """ Decrypt Adobe Digital Editions encrypted ePub books. """ __license__ = 'GPL v3' -__version__ = "6.3" +__version__ = "6.4" import sys import os @@ -171,14 +172,9 @@ def _load_crypto_libcrypto(): def __init__(self, der): buf = create_string_buffer(der) pp = c_char_pp(cast(buf, c_char_p)) - rsa = self._rsa = d2i_RSAPrivateKey(None, pp, len(der)) + rsa = self._rsa = d2i_RSAPrivateKey(None, pp, len(der)) if rsa is None: raise ADEPTError('Error parsing ADEPT user key DER') - # check if pointer is not NULL - try: - c = self._rsa.contents - except ValueError: - raise ADEPTError('Error parsing ADEPT user key DER') def decrypt(self, from_): rsa = self._rsa @@ -326,7 +322,6 @@ def _load_crypto_pycrypto(): except ValueError: raise ADEPTError('Error parsing ADEPT user key DER') - def bytesToNumber(self, bytes): total = 0L for byte in bytes: diff --git a/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/ineptpdf.py b/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/ineptpdf.py index 3967647..839297f 100644 --- a/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/ineptpdf.py +++ b/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/ineptpdf.py @@ -3,7 +3,7 @@ from __future__ import with_statement -# ineptpdf.pyw, version 8.0.2 +# ineptpdf.pyw, version 8.0.3 # Copyright © 2009-2010 by i♥cabbages # Released under the terms of the GNU General Public Licence, version 3 @@ -55,6 +55,7 @@ from __future__ import with_statement # 8.0 - Work if TkInter is missing # 8.0.1 - Broken Metadata fix. # 8.0.2 - Add additional check on DER file sanity +# 8.0.3 - Remove erroneous check on DER file sanity """ @@ -62,7 +63,7 @@ Decrypts Adobe ADEPT-encrypted PDF files. """ __license__ = 'GPL v3' -__version__ = "8.0.2" +__version__ = "8.0.3" import sys import os @@ -201,11 +202,6 @@ def _load_crypto_libcrypto(): rsa = self._rsa = d2i_RSAPrivateKey(None, pp, len(der)) if rsa is None: raise ADEPTError('Error parsing ADEPT user key DER') - # check if pointer is not NULL - try: - c = self._rsa.contents - except ValueError: - raise ADEPTError('Error parsing ADEPT user key DER') def decrypt(self, from_): rsa = self._rsa diff --git a/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/wineutils.py b/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/wineutils.py index f2f8edc..fff8016 100644 --- a/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/wineutils.py +++ b/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/wineutils.py @@ -41,15 +41,15 @@ def WineGetKeys(scriptpath, extension, wineprefix=""): print u"{0} v{1}: Wine subprocess call error: {2}".format(PLUGIN_NAME, PLUGIN_VERSION, e.args[0]) if wineprefix != "" and os.path.exists(wineprefix): cmdline = u"WINEPREFIX=\"{2}\" wine C:\\Python27\\python.exe \"{0}\" \"{1}\"".format(scriptpath,outdirpath,wineprefix) - else: + else: cmdline = u"wine C:\\Python27\\python.exe \"{0}\" \"{1}\"".format(scriptpath,outdirpath) - print u"{0} v{1}: Command line: “{2}”".format(PLUGIN_NAME, PLUGIN_VERSION, cmdline) + print u"{0} v{1}: Command line: “{2}”".format(PLUGIN_NAME, PLUGIN_VERSION, cmdline) - try: + try: cmdline = cmdline.encode(sys.getfilesystemencoding()) p2 = Process(cmdline, shell=True, bufsize=1, stdin=None, stdout=sys.stdout, stderr=STDOUT, close_fds=False) result = p2.wait("wait") - except Exception, e: + except Exception, e: print u"{0} v{1}: Wine subprocess call error: {2}".format(PLUGIN_NAME, PLUGIN_VERSION, e.args[0]) # try finding winekeys anyway, even if above code errored diff --git a/DeDRM_calibre_plugin/DeDRM_plugin.zip b/DeDRM_calibre_plugin/DeDRM_plugin.zip index 05cfb8fececaf3a57d4484e4d5371b4309303eb3..8c0dceacec67f827399d6146157467f0e48a11ec 100644 GIT binary patch delta 29821 zcmV(xK>zyJKp)SFDaOPMN4Co+&;DrX`OXEG7ll@ysw z7O9Bl{NwEpJ`r!rP$pg=KFTM7KNZLRREAS&**-^vUc1VFvUqoE>-P56y$o|VN-nno zf=p$)^}1sAKGdH3U`F!%{^L*hc#gzMqlFyj@eDeq1F`RW@xJr|h~tGbu@}b)6bC7> z7tHHqUQlFS1er4AJ6;mYL~;Gh4`M)7&BWY)Pw=lF!ten!XYYv}_a!1I1i7lBv2rgf4PIdod9$t8NqnHbl`P{dVjRY< zAl^j&ERDUXBwRPY-cppd7SSvZWa_3@*&=u{UQU_F>%v)h*HWZ8G{_<*XM`ko6)u5_ zC87JS5U1XaRLZ8)#E(hCKngEq8r6Vexn~i)EjOos@Zq%p89xINHLN4?xkro^$}?^&Ma-EV=oV9Brv>Oh->f*NSP!s7*u658Ay`< z5aLd=Wh_$z&6o4}t;Ri$h@xfP2^3Y@+vuhZ&!EjJ@RYhNKIqeEBmV zgFFdSn0a6BpS({cAO^vSANbi)ljFetEK070KNn}$M`T=qqO~QmCB_t(jYM7z~NsMYbG?(Jt2xdFZO+k8*Lwj#FqkmZQNi8o>xkGWie{iBmre0VQ z?s;|xY0G&O$|z4)AU*!r#>U3ukL{~41hZ%&F$7-v8F(EiuBi!3Ib(UnB#N$6mr;qr zc&tWRnl+3>@9mF{#m#d)YS#(I?HiDd!Bxaj78lihn|;ql(t!M?($l9wT6z`&5029a{2 z{*63zWtK?k9t1oCI>UDwQ@Bx&@QD`-Po!w^7N{&3JUr->XK|j1ONq)g5AyU%&cI|L zXH@+I@)r+uUI2t*RAp4OFHNKpRmhVP9iXTx1Aj`YHf|&`4q&ehF;UZs+r-b*v_dZ6 zplN{d2IJyfeiBad`CKM)hQUPOZzkuM?fHm;@z_aaFdt|I`UIf=sNL0ijdXvl*Oa}Y zzi6?5{=5!55+5KmHK#6m8(c*<3VB&OsfDHNXHhK=KjpayCWj974zvmTH8xx~M*N|; zF_#On0w8|^mnWgnU`~mehNVzL>DMR}y{5Xl(}>m1QWL~}daDOLe2vn(#~+h-Q_NZv zvh60HEmIfDW{94J3o1#LQk8dl0O=_W6pdA|GcO@}6&k*VJh2vh1R;M8-}hNOj6HwR8!VU|9?vdmkO~yjXfOp@NBe7nsHPo0DZ$ zk#>6Jq2y(dPLb@r(PPOKjB&P_8xYCVT!mPlrie=1T4C}Bd`xmPSSb+;HWyF42@abX(fSRsOsc=AyDIl1k zvt8}DK}VCZ1De|N4q^BEl`=?8?u{4ZQoMgIwrj=jNj*6*;V@Jm~_#y)au$fb)EYcJjL>n8wAz-yGy+AQaa3JP~u@7VJYSt z<(1fmhLAxjcdIrmjVL5!n&C(5AjQzD$0!5R9HN@~5=Dmsgq+kTdS*akDfKVz9h85` z_Sr~iDOaHjiYYUo@9krScR;Ho=YR`4>Y6FDF#t>*9@9p^SS@SD#R7*baz|ZxYybGT zNCGM-v^pHe^o{BizL_F31#yg(;w!8BX_n+u+C8G)Ty;+|gk^H9O7d9ELD1@@SwjXl z&-}m$GDm8Y$cdL=s@zONGd^DW1w_<1zrZ6bw16h^}8T_siVHw{$_@bTA82cJ#!7Lq9 z$#r_kY6PXkxF*bvl`j^$NNysqMPgIOk1^*cxk@+TInH2etw}e<7xIBL1A| zG)s4P3Fi-#zJylVs)sk41pN2BALI*f?)n-r` zcrEGXkTH}PTATrR3`huykM;hlV^PDbiv4S1do7!Sn6VN+Ch)LHGwZcZ86oNUE)l<| zn|TcV0v(UWzV)4kvGO*Jf4=P=x5dLL5c&<0@HvO`!sQH?b~_2yYIQ3zF5m;(2?e3NffKlhc4D-O}ACr3BCw-{$5NE z>ORLxr>#O8V+<;m!6f13foQW42(2BAha7#Bb-sG20@IKTMEIWMf3~|%_K!CFy7HHV zXOz0Yq_(s1)!p{?29&D#sl`V1@kDKO5$k~{m<+7N2VgM}+pTsQjn*_2c&?qbki<>A zTe6;Q{N7KNRbVEU0?e~<>)*efMCfevfytmeG9j_?sE%cNEqEJ$njirRtwqGC$gtWDgD zxZuwY7%Xih?cZ%b{#cXSrBpG^@pGA7wQ=(2WkSztNbx#-QN^VpWHX|yEjRcB+|_zl zIb@@yq_EJ9W?mjoG4;=Afvk26sUnZ-Xu;Hv%lG8K;_^L3B_(nnrBOtAo^;tOR!xEDApZHeCj1lC62qiVA)w+DDWz1 zU2+(3Yq+w>x{ZA7r`6ClpVZMRBrQv~FT^t?xc2C~vys;%*&usLWB8a{k#!ZHnt6sls2!&*v4$Fed+Q44d$bz2SN`WkXuo(nAo$!wisJ@$@P(**2T)<3g~{* z(BFeBqewN!-_`{{c?KNo`AQ+|t`_y8VaBQm+L&=ob9LJ3Sj*m_oxy*3)|ytLa@ zz{`-2Kek4^E5(fj6?vW(+jlP=c5;fFe}()J_Yyky5j>h(@yf^z<*h@jKlSVV5BCqo zZ@u{z_8e)Y*?VUA;v+0?l_HjxYfuRIFWgPk`vf+O&ZA`J-1Up>Af$_a8`3#GT%D1G zqLQpYG>;dD1Mz(SqLqN1WuHYK zKU|IYP+qY|^~v#Z6;_}1sQpdLyNAS!j_B29@an9G_>^?#TD*(Kb=LV0-|?(iYE>oA zBAh3q)!cET;xPh@s}KvkCa$Bty!M)Sxi6k&@U{q5@P9JCVclwcKWIav*v9~r+M3nd zhpJTp1!~Icv_GUBwC|Ag&GX3Be+PFA|0cI4)h4s@14-i~>ZfoGOZ32`J6er_z*OPZ zxBMp9D7)58Hfo(C-nrpW9F(HdYGk)wR(Qm6uR4Z1-#<9Rp7!4R>>Q`J@E4LE#r04h zscZA-gTpPpz>v~0+)8uxgf1n-2dD4veFQq+^`Io4;_Ql^K3^Z=$vqvXe?*!tw$NF7 z#M1*UhPJ2iZ=d5M{J1kQ+}eJA3mgFRWbX(2hYS zF`0QH^DZIDcTc51JeBsa-g8*1a~APpK;6)^WwhZ@OEa<%C5`}5rzdHLP3?&~wzomF zIA;pH^7j;DXPN$8oS?Pme{MaM(tlcLV4#Q@w0)#)4|}29sx}c-)BVprN+>51`?vTl zd!@Zwb>182K`9?fAwh=-aHiNH`I-SsQwGN3sX*_OlcU~%t3qQ2qkx-_FPilD!<=H& zr_P(xH)~5o*nyHf6-0aT1*jcXicr8w4P|Fqu!Z1U#yzwNe>QwE#w;JHMe}cVL$+InvRc9 z&_JRy9G$Lda;k^g+AA~V2S{2vNXxIv=Ig55O;kvA|H8XD$|+%5svIkW5pL$RN?v;q zq>OuiJ!Y_KMQ+waQw|x}=@q_wj~;6cs%U1EAk3coH72Ewf0B}G8J&$+#SB=@{XtXt zd6!}M(hh91)~13zj9mJAl8D|)+Sm_fIFhTvbwC%U@`a>3RCFz(lXlZ-k3UwVy^34= zEKvm}KQ^N;_JlHxXX~8r$~TG|IQFuUy16%z=0+TNIZ^6zp`G9g8&NSOrF~0bSRHr?f!Nz=TvdQVE;r$$ zt`7a~|DVP8X7Ll{EMDbN4ge2vH^uqB^1#8v#e?14bahj&@`6ma;j!X9r?ts-L-*Z9~% zE^Y+Tc}CFs6QgFGc*o)7PxCEDotgdw^!@AhrqS(;~CdSV^LtItm1Hin+4d41=WbS;GmT~Pi~MEazK) zP*jI<6!qI5k5b-s4CT#5h$T#Dn&PUYEW@pplBSp_l=TynV}TNoT+OSV2WMehCe~EA ze?Jc~yPM~MPDh3GSEb;iq~SwT@z18?-=30xHZA{5YTlck)fBxyO^Y$PnAntdCHgJP zr3XwwFb>fB6C^G=@-1_7dTsZs@Vg=U@12(n>_u!1ItGzqWzn3g*k5#H%Pha}LX0t8 ztv5U3<^~q5F{)lmc5F|-0*YJgbx_*_e^7HPYgD;)N*(&09;6nW+|ZQZaEJtub~4P3 zJQIE%0@sb5r+9PCE-d_mcn$L=sxvO6cwM~ahcuUR=`tFAK?nP@Ftw3IGi=U!L6RhF ztWP04%Q`f>NO}>8cAh^OJYFlR0^K(bN%H{3V!dUsF+_oe=QS->IL)V1RBaTxe_&|{ z%bAKhnysxFV2utVM!y_PS{4&emw73k8e@Vv_IY;A#j2&fxGLS~%dX#-Df#!!=+1UF zUrNx(NGq$2_S)mn{o?TKK8_hjmyQkJx z*E!{w(HC@%y@?DoIxQDR@Ujf>e|$l`s6@S`qfla_lP0+oCu4vVj7r9KKOfM_7H82% z!^X;WhB&S&#DcWIJ(zf!;dMNUyahiH&sKha*23sA@$twg3i3q=z`1{!C;Zs>R?@P1 zv{U6%Gb2$b%!uVW+i;`LM4cqM9c{PSPbYE776&1MTT{FBXW7;0xmB1YfBFNVWFHL& z+6E)_(cAzqSt#!?`%AI0#rq9vb)9UOxa;KUhbShQ1CDjf`W2xpi^7s}Z*oJ`R<7%A z49peekvaV~*1TFNwkZ7&?;M4AMMuLwZHI}V=_9&FA(p7G>zzMiGe2CzWWz@>*@t=7 zX0x3()ltzO(P$d8ME{?#e;T;1VKytuPAg=(Ry|`-T`wE8u3ZHU)udABr3ab~W8C3( zO-o(GTNx@@=*2{p@_Kx5cvgk4X{Uv-Jp1cYn&gkF>c_diLeFo|+hDaq$&;hE-#Kd@ z?z7dW^|Yt0+1WL1XQ|QM_0nsammx*e#HQ`xExjplq^>Pyeiq1Lf5fe9r+(F=V)|8& zIH{B?J-oJ(^83+f`4iH%97qvX3n-J|TgM|@zb-MN(>U^gI(bwU@)Vske7a!4wdD!khTA|MJ>Dr0?XZ)vC+il%L?DAlJOl%I+ zkLE*zXq||bwY{jLes!0x!vZFMd*t~ZT}VL`#d69ooh?QJytqoL2XRbwW4#NxN)-0Cj53r^_wfxx;ECjE6_#w3_IVqUdr3D>ZVNLq2lQUIf^OrW=?5( ze1^q>?QnUJ!J@tX2;S^C;i>nHTQ+0qm7M)DA?&jG-+B`eqvJFKb%v%4fOod?3n-r3 z-Y)KwH}|!8uWIdW8YWDa)5HQEFFl4E$-|N-sGZ(`?AU!d#l-ep=B1uL08mQ<1QY-O z00;nbH!eu>RYxv*NB{sVmmtLg6@OA2%kkY+{)dezXIBRy5MakgWt?EZ4haWSfD5M$Jw5l8?|JL9 zEM4!#llAFCev?d|KU?wEzFG77$snFwcf46XTzi8l&!0ViHcXST*X<5x`F|{px?L|G zPm?tF?&JKXo8@61jiX5pfIuUjMALja7`CPl_f79EO0zhbcyC%8tu4&nOQsKLe0`I9 zfB&1exv}x>+U7=k!|OeG@jw3Z*M8XRh1XHWNS#KbD9oaPH=7Ki)XQ%oFOSl3<|RY= z@$vYx_c5A8X*lvuX1!6|_kWJ!el+Pvs$eSg?MA|$poqZM1PDkZ<;38X*h0r z56R3M&$8Sb#wq+8PeAV@kee#c+id*+33?vZlp!yxT@o3}nv9Zgu>KC22h_dvVVWm| zL)Zr5T@nwnY1oetw>7)vcCtQB2D4F=wX&OhJX)DP^ohtjFBpfnk(bRtf;=H|f=R3_ zSs@^z#&o0Qd1v8W#D9d%`e{5x2}h9^W`c&YCt`b$KvhR;eW<`&52(aBlm|+~Z!N%~ zS_u2zr!(&h*KBDK26bTN7og;RI6-O%&R7t2Kzbrs`pI~Vtc(EN3z%N+4O$Hk#Oys7 z%tD=Vk)Y+=M8x?G@X(9kdzfWOKL#TkP^;o9Itpi#{!Ns&M1O<0i%E&VTArj29Y(M1 zt$Bx&IFF$nq^!-bj7`iK1N(PCb`W9Xi6>zW6tD^1Mh|P(*nC(@IJ!agBZ~*lJ!nVMPFakdS^p8=_gzy|87-sL+P^L_}Pg1Nv zA|FqtGcq-g{T(N{_YeW>Yzl4>B|!;hIY4(2&GgiHK%kDU zbxY^#1CT-E#jX|=3<9PJ@H9u^V$ocKEDF>9jenQNQ0OSka-j}MiaS_f8k!6178*A1 z*uX+G0%4p~-lu6aIXgQdzZp$OA&4gYI8+yj38^`nL}nBR?UA~A;BWVIZyU-7pE5*z zz~odl1Yl|opx|_%(EMSVWP-2PyaDs}vU_mG8XZ(*N>~~5wkm$uZf(C2*w}tQO=S0( zr+*K!Gh=!{Vp7UUG|vSlL^Q06elU3FIs#h)RkG+tqI?S|?`PM@6)KMc0uO8$`9dGc z3@>Bta1>2~UXt8Gdc%8%Kdea`A{yx8kvaCk?0Z0II)9p7#}gtIjbiE7>*1aKj$tfe4ONq@To z>>vg)^ST~%wk)dHKRD%1DxB!0x3)yz7AXx>pyB^sym;~a**@#sGVW`3_YY3a*P;m} zMg#0w2{CICJfd~GEJnqEd&l!Xo*a31TRx`qRzc}6h$%wgQF-=|$?u8!nnv>LZ@~Z* zc%IJsIsZu!$qi*w`-?%ld6JAW-hU`SQmCsYC>(i{Nb~Wi6@gohS_jNQoWpmFuPBiR zyJ3go075Gd{(lDGlDpj) z>ayDfk31SSxd06W;D4Cj;&Scqd@Gk2f+A(UOi_UG(1zXdj={iqNoDk2&`9ltw2 zIJ0Q=#HuPI&L}L0cqhQzCRbs@Du&w24t=oFh@>jHDYe=t)I^K1f%qi=RNX;CS2R># znCGd~HU7{UOCuP7PCO14Xn)i=EH#7dp1YA9Yzr;Xm9;1Y$}pM;d;swq2%BW{D!4(I zA}A3C9t|HBAZuK!vQUlN74I{~I$+bI(bi@QBF;TFa5w@lxeEk-4!#$Kq2iGuHkr^H zL3EG4^fN0-D8^TVWa7)HlvBeVKoyrv6n_~x9Bop-g^hy^ zyhjgEq;$=@Cx1P69N zJU%}-Z9>qRMqmT|!Ds~kLLlLiB5#LRl?mpHX}U zQ4i+MST+o!f$1*m4Z195fm9eJIy|&yFoG0}48f})%YSKzb19Dg}g_*3^}cYpuz_#W6^$V@+=o zj^SU?FKXmy&JAerm{OSt!)cg+TF1!0nfZFpD}TP)E|dUu`|J1mT|N>7v=0H8Jn-sU zS$^|ExeM`4`2BN)7-giRs8Go!jY?dNimLg|xC@qWlE!!7B!9|zB3l6|tz6^{&`SR<7@lhPq7@3R zF@GN?G7VLVM8C-i=+IMEw9vDO=;ky2DmW}vNfV2cO4C^w!l+y~HIb(HEoh8v7F9Hz zlF>1Y7wnNFbWc!LQI{1Uv2uGng@*sn2~6{3%gCcd5|FhvUMcerQ@ zEF6H z0yVK!xG8t$vrIW5w~C#XMFUPQocJk%regiaI2RJ%Sq21&MIl=ts@te42!FEQGIinn`q+-i$hjMgjpUY$`kf<*|;_abQ9nqP9q zmNvo(P>xc|XDg7x?1~r}rpeV1)G=Sm1*@XZ5||j~<>$=A-O{cjZsdIVxu~Rgs1sV{ zkZi@8c~6H)*9?^|U(g4X&gS`8g}f;6nZ&e{%yy2z%tek9gKVPIy_#(ewoCw4 zbcqnKAHfyksH_%LaY`06JOiza4*{+er>m@7$wzT!nzs1Fj6x=HrfTEL`$mH+w!XQt zJeQO`&NcPFRZ}!0 z&NRD+8$D{a5Gr(}(3Yqz)v^VqN-5+p()nBH{R=o_zn*}TJek_8lypFW=D*hLf*N3& z4xe9ZsV=)={xrWQ9!Q3 zVG*&_c9D&Z!}Ru$hjmj{;S6Z8YVdC<%`j4K|64d}&?Dd}k5?qK9nR{NqehbjuFR<= zIoqvy#Cb0fFMl5DU~hNYn?LB3IdC2F`Li1K&IA`682o(S+nE30LupA<*OC9HXa8Ws z@HPO@K&pk*o_=-?i+JSh8!uMTX$c&HUUH5MM}RHy`!U*m{Crs$Wr6`D>d<>ibw}Bg zXgkUbWk2ES4$a2uKH?%t2f@4{T^}M{6;423z((=x81lZB%p>+ z=gBec#t-gT$#*~ip#+{gUr%!rt$s3L8(@Qi8Beyamo^L~v|U^-8GJrEGGK8JdVzQ8 z>#I3fRt~$4GRra1JcRc%l$|=-4kXr@`B{Di%Ft9*H=QSNZVQL%M^1M}2%ubsDDhm} zfPH!U)_;4`@Ky=D$U+(X^JiaW-=JO7zH3ZzsR=G?UJGH_iWzePMgwH9BR04Rinjta zizm(+%kQ@_OLM8Zh3Pw7M2%rS+U`W72ZfZIuF@8hpHr~CVGm|XZ+Vh3c~2q zn!zf$)KuGoO0xMdL={`I82f71(-}?N9)1!thJWJs^JknvjXxc+9FOf^-%q^zNF4u( z?6YI;ai$|i*r0n2LH$1xzb(Iul_7ek>Vif&)9KX;I)f~ieN4qHm0*N2ROBRJWHc{4c>n0&lu_|M z=Xi1>jxyfd06dwZ@dXo{0RN4!2;cWVLNU|KLrpz+uyvE2B9JG25vc`W++NgfTiID4 zJ$;*4E1bgdAM90FqM8EPpZe>?*BQNiRVi&B)pOF3J(x>`*9_r|m*Q zM=a?nz)csB^?)rdi~sJ&KGaVGrekc}t;M)Ufa_n*H#Yp$LK55cNEoY|rg`cAT{X=>6)mB=vxjjn zVOGiYXC`U`D2sCjD??+lQgX)&*Fa$3ZofvS1AH+D~_}w3@WCjg6^rccS ztQtxb91kf8fMju|F{4j_Vt+*D1wzXvqdd8bptxifYXDjF03NVxAutUEF&zlNnzbae zp$Mt+Vo;e4pht($gA_Zb=g)rn^L@ya;8y0rFMj^%bie!lba(Hd`~KkL;V}RMO5p#_ zZ`k<<$NM7p4|?wI>FMq-OzaCMU&p@EbN8VGG?CxFwexl4ckg_)3x7cP`7SCS;;D`v zpy;Ow=S`&`%W7C3tkTqo*60X*jx7&NLtmbvH=8#qjY!22Jl<0)w$z5XB*K-|lZ4mi zBPHS3{|ZUKA5jbgoqojTTrlPNvx84Zv@N}b=cZ!}WBrTE^m0O`aCWk1XI^HQas27H zDDMpOethu7p}4X3ZGX5n++F)XWWi{<&^8WEcipmA)?Z#;TwVo@x9@)Uhs#XD1Jy37 z@%W>I@~g|tq>r#CyN9P0Z2WHX55I2-+Q*;2dw<|U{|dlm`P}Mj^IO7e(70@GZ4=a| zy>kKO^7#Ws=xk4c{Lb@xe&-DY%DLb97Ct6^r@aB6L-^c;&wms?x8O7IJKLDvfX_C3 zUS0zHruPRKsu^Zb-UWRJk)hYKgTyIeu`UTVyWwmE+r!5}b38mB|CTPhu)E{;pFf-( z{t{%_-uU))MMpK9I-S%IR!<<^O3k9^7S0HMO`q+*)wO{wu8Et^;o6CvmxFiM`U1`X z-+#q2^&=zf41an_0XkfNlw^?&$EY$Am6GIes~a(f6Ra17)?#1(Qajyo74=Kq#dYp$TQR{O=6FXn+1h+J8d7u46c-h?udkcZFR~ zXy6IvREQW}iZ-Kp5xRZ^FN)H1FO|zw4gb1XkZzW%ssP8bwTh(%?37Dl<6M;b)x{e) zEHFZ52b-(3K7`pMVArwccxdwcR@+)O14v0q$uW%b{tYsYBc|EpwpFY!*Q8zDnMOrF zn8$J&fPX|P>eKmf-~S9uO`|?u)B(T!MxAlErfhu&VhE)Fs zopN@bOsBFRaU0Z1VS~Df=JlGBn1uj@1#JqHr&UzF#%0u$Q=m~>wy?1&ER0xNaGfR8 zTAvOhk!FRcxKVJkObx4bJhGvN*m7NxR)3{s^l#Dtf^*4K6VFruoyDa>iI$>NCs$$7 zYGD4aH)zJpzr&s@I`4W_>Ga<2V!UhJvgVX^mv1C-7u;*M1zEw0(f^YAMP8n+3$S!c z#Gk@<@VKc;XKEtqU#~RI&XcJPSW^Jh7+?iAvfBgCwe}xJBNuxJtB9rOA273G(tlJz zVlbsBmv<0f)q%69w4!F!l;OX=Vi_|}R<9M_?((wG-6j3JUiZz9Q?{2JN&qrrwf%Lz zcEMPpQBnAsDqNwde2!R~xuqC14R_h_lao@`tEyp{h(^tByMc``0t{@nN(^L~8tS&) zs74a1AJqVG6Sf^TYL*IR7R&~yDS!Kg1uM{tKJIm`Q=&DV)5fIBR1OaH>6ZQgubelc z&&88O5d2AY>JPD%J-X|Q_SSuBx;1Rojw{swdMRbFk^3@SgSUQ4oKI@ii(yfb7({$MVYsQb7lOnc~}|xoJvu(h?#KHp7fI2O=G^eVa&m|<>a^p<>=j*+?giRf@L!XstKr; zArQHAapVI|!Nb;+kWIrQ0$U%9@aD`2_I!%__%AP0a5(T$wp2pMY%<Qe|Yg4 zQ~)|MKu<;T<^oJzA1{*eGdTL;W8CwWy?2Dd`5xxjmf>?Gk)v;D1X8G`xQ1cUh#+o zkjUvbR1kY?WeCZ&7Cm7Qv7{6d>tf^HMO;+}D< zhPCQltT!NOD1RI++R+QA!z);6X^>d6y$Hs_@5&uy)Pu7Pdkm59k>8Mrg$zw4ZOsgRd^M03J1;Di+VA8bS#bGn6S57oT1-5AAvah02@Ra zVJ2?e&tS7F9)@$NI?}jfE7h1R6AF|@WmP%5o2;E@41bB?G^<;Kd+VUK6PPG8aaTM} zuN3#WE;z0uEQQd6Cw7*Bhk9KGTy4uPI()JM6_COUa7@J|kuLQbdQB+3scC&VqhGLX zy|Cb31TRoAQ!FW0`Ab%~ANos_3{x#d<)UlTOI>`B+tdSnlkO2&vUpOky-K&LJgjKvO35y3)~Qa0_R`ywcUqPFG5_%5 za3Y_VRNQ*v_Nz4HW%My3z7B={@J9RDD zefTM#jUC{d&=923v#xa1$Z`odiwyr->6{tHl$A%!Lmqv8<(U_u!_LcrXPk54ic$qO ztZ9&BbQhHnmZAYB4pTIW!g2+L=g%~9?O^U4B0i-o92Ibtw!Fik=rkdfg<=rTYJYta zAF{--1O{0dzJg0$GlbZdJ;54Jm{$}dApV%Beo#pcF|5OVLSY6P5q+mUX&J%4bia@kOuqk2fb4qTY z0F0n3h5yExv#Wi6aSKyNR+(-E@{5J&K4}6HKTMy}^r~xCV0m9`%{mfgMbB4C0)bts zXq>~0KXLa=+(Z@%GucNg5u&&~MqtL8q#Qzn%Bl@Gc|A5G~cyASR zkCQ^n@E*8|2j^WV(qmM-v6g`8unUCN#Ux6!+m z!mc-Zbfv&W%e5-w;;K+4bblI4$>g}9M>moExL=F&-~FM~j-qg>HsW-zXGG$$0!RXN zq>#YD@BYvP3oG!yD==%@kK;G5=u%()Of!?!%|NEbx@J!ua!h7o?R)cK|M`U!|EMS`L98U9)ULWd_|=-RrckJ>H`~jo z0+xJX|3&Gwe(K#2IgnGcYh}GTouQ%yLKeJga)SKkpJ5Y7+LW z#=mtcAs!m)|k7 z%Yf1p>-(ghEPuBz(V>%9tymMxcv(=PGjlQk?K)5<>%49LW48A&nuw>K6o4Xb(kPh) zY7(&9lj_%nYQ>kd3i?=qRp)5RZ|lWL2}daZLp*|!pila6?+q(zjEY8aV;5?5SA8Y* zyvTl3+K_n4^qa~ApWMk6M{*p`98|%Gb58?tr7nL; zt(DGT{eE$2d|rKFiEiXtNE^FXeGQ{@PPlBE+h3=(4PKM9<8mV3JMz&lMs<#x*2ef6 z`S1SFaQQkBJR^IYPEi2>X2gID@>D;#@uLUxtlx*%^k3CmXfIfH51T!jpZ#q-4N%ohEK#{& z_kWLXi$^d9R8eUPsMtZXZOe4tdnX6no zBN!JI3aez6Rj&CY^mK8pWgojF8VLu zP62Z&XZcv$PeG3Zl*6MAbm)`aj|b(@Cvc&&4SiM(p6T#=yXU({pFURX27&4xCD*>T z?EyJtRjrKRi@8BSBpEkbE_^k48W#h#aejci5hKdtW z=ZI>Z#Dm~Ql#)Ux+h}F5zYXGH&wrJbOlU|Gcbm1vJ!cG)o`&#bE-eIfsK_0@iJtMz zYqn9#68ME+6S4Vn98U2FZ&Qvp>RvKa%DC8fNL($)Gej<|L8(wrFian-jP1@+driBw zEx(5KKV1u0%7h#<+FFV?Q6u;Zl?=^@F3qi7G0KVXu6~x0LWf0cVkYoNmwz1>Zh&-s z+XdA+ZtbA+XZ->x|b<(u_#Tp#V4 zo-(=H`++hz>kxyxz68(^1~Sy& zbN}5T?^w@Cq;5A@6&oJIz;BE;zu`VfG365;D3jU!Wc0>*!jky@%CooBaNgn>o=A<8 zVjap!AC4+}x)@XylCySf!>lB!y*PT1U-d{$<$&#DJNJx!G_OZkuUj}Ywz zZyaPMvOi@CU2 zmYv80$%Ckd?sq$dY^&n=Ay9QpF0mqK`swPdtx*x32Ya*;Y%TT7zTkXq%N3_D(GWBA zVuoth}o`A1t>7{ zCtZ~cx$5YCSQE%^)^CQ<>-}uGDE(PnjupWaNm@9x-3u^K&o|aYWapB59iKE8+bCXp zVR?SmfftK59CJ|+&LU78+~G}rw-`nlF{3vHO+I}I)4A)h=7OkA1`6W9-GGo_v_zO>BLP1>tdmuF2*k-69CIA~B6F2o+7gH@HhUdA z(MDmK5h3uD8V4N3CG?l&R?TM0ZKY_i7Z>^Z|Gg)7`D-=@3ZpzV?7!*ulu~ZalmVcXoi})b{_|Ud#vqNzG?hiPz`OVe18z&9 zK3Q$srXrJI0#M7pUeL14wwHN1FPM7JshVA+zrD&c>yeCq951ZZ@7#%X&gq8mCUpZLhFc2uP+#P7L@bdh0!7t z>QDU~zj{ev{6`)SQb50*q(`>{q?=5Z2kW5mS}zqx{?sGn`GwirsV2nb7Fj)6bA=zQ z!_sV*vC{8@(m8^*P7Yv!fEyUT`HgR`**$LV$9pf(_TYx860U|}TS z>2mdH`TTL-(U%QxWMR9P?`3-WBc7QHL&)Jek&E@ z4i&)pR3sjkZ_;v7IujCGKKanQen&gpP5ErC(*oY?LYsX$+!jo!iV-&0%LzSO) zeNVlGRejtKctl|h?W%77b`Y?zuE3=_qJ;ZGJ~lRc{`n~?m63KU_g5Y4t<#rZ#pQ{m zfndY-h2vB7mAm{2jN>$@$^0?(1tNWxj_mO*A4Z3@iD$)it6HLKG@u0TLEx;eb+b`o zfH`!6(N^%P0GS`YS@g`AaZni4w_<`@Q~D~5^i4=>5N<5WSw4e(nCo_aO zm29_vGX1{)LbB@#PuJY=?G%Z!r14H%-1c!+eF^R3U!# zfU-_-Pc#aSh#Wm0`q#VMBf&USi>rRQ5(UDm7lBsezmSOya{?|nh?=rHe#2x<_KbRY zRUy@rtW^*qR`;uqVPu(Q#r7z>yL*|)eFTBM>14KjW%9vQD8YUrEK76EX$C@#G%!Y2 z5krI(pHqa5`RijqGj1X~m`OJWv+skEpA2{OqTP&N!ZE%7kjn8p!vZ(+2Pu4M?!u97 z3`aBE#hX99MF_Qk4lo9k+oh? za%^_9qZLl(j%wiymOa&m=|C^kK)OvM!*AUnx?TrwJbwB|djV>DjRB-wYl1wO@T5Px zE;_Q9nbzb;qbpKi1}5H*JmNlX`V!3&Zt0u<|1knX>M18Ff7hy;%_jZ|nd6AQy*iP4 z`GAN0w;Y7BWta#VPrRxaSzv^ds5@Drp4UDrv1S#6ffP>2WJ}W}&qd<>5(e)Qwq^Cw z)Y;V%8wmddCJs1$2kC8yC@#W_B*hUE$-&_m8aR67_KmTa*T5|pxTxsiI9pq6&E&N+ zGj{E4Q%r)zpfp3UA(evu5!M}o7@8I)g2|lN_18U(k%_H{(T-U+6QeAcR(Hoz*F)&n zraeHYYnd0lG(-M%gTvFa_469zzi!rvp_)$xhQx(7*r+uFsT z*eq+H9^)wNRuM*9z9lhKh4(<+aL$K8?^m17ah3Kxrk;k2|SHZKWakxAk<# z-g2JGj6Hx#UzZ3NZNST2SnbNWBu`|+yI0{xGu8wcUuDuXw`ND$@Nx;90k3jR0Neuf z7U-}x*_3f;a#_3E(SShC+gJsoTVR8y@>fZdpiQ{S#_4LU`|f1K&XYQd(G*j5P$3mk zoys*KK|Z1S)F6%6Rg`P`d}z{M6`8X(SV9pNk{{rC(1u|Y#-ZF=F3>LE!;9NT=(4(Q zKW2kt6tT2A0zA_Hi$ok2$M6>kkVz$+s$_$|eEW9=3IZZHg%M>YSr8{lF8>eC0O}v1 zGgEJQJa-*)UQ*AbQu_s;R)FjYmoZ#WiaY}2+#~2 zdc5p;8;%?b);a0Sq6L|+A!dBafalZacWi2CkpXXQUr3{+NT?mhS5hJJ9}vargF}VJ4yg%& ztG_VDR9=ZeBFmsTMV^)2MrA}D1=a0XSw6TpAprCrp+a?zoYmyIb|Q)G1pgUfE(QO0 zHvdDOZugXar(vQ^Pd#qA1mnE5Xo4k~UBwQ!+Ot5TMJ60{k(>+`cNfVDU3cpb5kWG6 z`WAGl=TH{;BYD2r4uB)b_8FlEChHL7;V6xh!UMB=0^YzvChZ;>q|Z8*KU@h1afS(+ zzh3J>^%p;@Ld!Xw-T8ScFryGE}XVOI1UMZjT& zL)w~VMfUU3tf%zxCqVnsUg_8|Wn+A^H4D$v&f@Ld_Hf(yH{gp=PO`@4{3?BG@e#K3 zi69^Aio)w|JAE`3_I1HD~x;3;;r4(rS>DQDL75_2kxBk3dnq zVw9UE`)dapf>2e!Adh76-@;wEM0aX;Tva?_x1P=C3N9ZKHqcCP4#0@#PJS)MBtDHW!9V9*92Xt zf$)@z?E~c=#l=DPw1z9wWHZV#s>-R0&w2s)dXdLso4-qJj!mv`)EcV*$64DVdIk6m zOj&*)Gq8;E+7Bzxt9VPYu$ya9QKGfD)d|CT5}p0xnpbSvY@?Gr zIc9N)n`84&DfLb)?x!c@r!h$QN?W=29_VtdR6961p7E%8zOOE-ku5v)V(tW%_4d9s zA^w!N<}sX`d;oagoFrtJ?wrkBKxq0z((!K#5Ln0)IKDd5psFB83!U}mVfRf?aC>xP z6##yv>M)x_$3~w{O^#==`*Vfg)>xHZvbqnkez zD=@I{f>$Omc|DpT?jP~Uu70(yLuxOK3Q8=K2fPr8Dp5fC#=2jLpEBv;ZPl2n$0&cTgMHBoOdF-${{OVi~M?wxDRJ86NE!BxQqg-|@a#0UZDn3p+qgcrCm0e_C@ zzFS;?=6&IbYq(Huz=`-PCU=}&7NsyW`_V<&S)9<$#&n8c@hWR;lqkUN+zc~VX_s~P z#9XB|MA1>LGNPPmGslK7%}onu2C&QkBjD6})n*OGTCm|+uhsW7sVwD?t!?UoDD=}f zX&ox8Jd|!={OSmlPis_n?nlSwgic*nTLb4ve&nk}Kfr1!w)z33cXl*Bo}Nzz;?g@! zeNCcjs8vPIu_~jcOLidsnET4z>^4$7K>~@)bdWsZa1Ar+l1@wcKprv78c$lwL6pQ8mSv$Jh`TH=HbCoq0HY?X&X9nmyBnUa`<{wi3~2I|Ox%rvDfnc{tz z3}av-TcTPp5G0fwJ--2?2f`+zXPzWCaEvJ~TphQIx5*p)MTK9v%wNf$T=HQJ+`*8$oM_7fQVpo{62UG{J z*NPF1ZZ_wPRe9o~0O9SYu&5C4+Lpzkd@GVhZ-3oKm`GI2mTSMP<{$;rgh_@KroE%_$EL{7$q z0St2ZGwZlF0IJKUo_awEou|L*v>{TMB{aWS|?`W5s0dATtcHpI%>!Gl?9*EUM4U^%=?of3q*YLjzRwM#i*U>tU- zWniF!#hKoT^zirr8OD+QvfZ8L4-604sxu zTIj@vQK!66zi;OW1z&o|3lgVl0u{}2OGq-2$f>*@CYn|f{oPyRH!%?mW1$O>bYp4D zQ*&_x>{^;u7WHBG#c84dIoxd)n&l>4{8EOIx00VXdk(KSpM-|pxy+=Ile>~at#8Sy zKFjtdd~v7p8;hK+1eeCi;e*J9G;^CJ4!h1YX>lM0keVKL30~~7G)^q6iwBv!n}b}} zQsGDW%d&h#niWl$W6J8A|zK;X_Y?k zEq}?`TxMp)=|xEEhBdd@fq|=n0`?vp;^Zwe;iD&hT`-m~73ac;a^yPQvU2_`1%)Qy z1V5R+?@}VTZ{H_G(i5XXR`d8th{uw=sJWI2!}C`L#QLK)^N0&G1yNGE53Li`Ucx7` z?JVDisChiXE`5`M4C-s9$hAy+1vNjAJ$#ttA=+W0yPqwg_+C&>tSMk#96;wQBYC|U z)WC$2xf9XbXo}YL&CL&Tr^kMs{fhW8-UcGdJm`V zhj@5^n?Rnjx@n|6GQ?GqGo9D-{JJ!L@qD1y&JJxbVHAG{E<#If)PK-pcR&U|S!73R zQR2$9W0)P52b^D1(F#331+LT>Rd7GwO%b^0h%Uhq5S^z~cX z91)C`Fmc`=`s0$UywA0eKnv8oH_x4sNX3!Oe*Pmykq@Ev0tABu?}t=&jJQ{A8-)ZX zg8-c66uJ(5i?MKa>F~y#F;M^1GdPyN3B8P)Y$OlMBIW9tc1>eFW}liEjbnYvl33>x zDU=|T?IAZkHESwtTWS~tiHfqOfl|`7CM{fh=jz0xVmUi4F`mk_RGgDJvHn98thc}% zy@iqO>lheOpAWKZWMY;=URZCQxhK#htp)@j`K!*{5oSwc*qacq@%>BENk>Lm9bh7R ztEdoUTfosbx{Vi0q11c+g0B#*0UxrI@wo`AhB{>jOM6W|BV;Yo>;SiJ(v`-M7Bkpv<@L zZmf8fNcZxLV)(-Lghg&6a=eHa8CXnoqY5jN4N6@^7Hxl>@(i4pY|44r`Cwx-6g-p()2? z%lArujQV7A4H=FP5#|R}TfxQE$J$@km?cn`Eh~)#*WGq+gj1+wBeXvh7?gn?adt1u zMcK@SGoybmnmJ(vVc07eo7@YnK-TujFG4*y7+^w5m?!m|;y zNyCbl%HSC`oFOg{RsvSlUE2U2Nl9*Wbzux+HikHRl|c^(o>%ro7uw|=B4%EZMks+}*$EoK_3r^VW!@&@O2MoY@T zLHMhzdYFV?Zh_MmY$5jb1dW7`kP5kNp zOMz#U7TQy@EN#mHL}`&~NJ2kq4f*3(o%U5!)>uKr zEk*7RkK~$4@5NIg$|IXSNNTCcX36kWaHg=DulCI@OLm_HbFP>oETSFeH~tO?eH?LP zG-bRAu71S&@Rd{~;q4W%WBrb7WYOXQLwd2;t3eHw>cO#N)!8}zNUSk?sa-Zp_Mgyu zqtXu4TrZa>BPO#m$vECU8IeMO zfNZz1uRuJ20i2d!zSS*By+`lR!+=`QPgUgiI<996>i16kPepNc{}qQF(!<|SC|T^$ ze5L_Y%LnyhCVJtF2XF)7eS1Sg9c@U>f02ptCFJ5EL4c%QrDwUf`agAw1leQ$fTU&J zyS5@xLh8blm|N+w6)a2gYqOVs-=q8|{bqtKZ|w|JH@J#>vNPb(v7}I*CdOr8ueg6+ zvZSOBMzq4lfH$o!-_R#VILRH+U0O7_K^Gee-HTVCr>j%|?U;KWZxx>yF~>5YG4Qiy z`n`5ic~*g&KUC~hjcjcU8Ctl_dL6=+AArZhBy(s!7d?Xo0#X$K0s{YSH=+sKtxY>zW> zhnjgLZ^nR}|%P>_lIou5p3K7x0+2 zGW?XiZi@3J%F)YwXW#rmWZ?6dre%anc`NboRxB`yzIq*F%odlTpbxQXBRt)$pk$uf z^D5Uz3?+_Rx+oDDF#mFJ(!jHQK1V1_6u)P_XVD(PAEnSlL5wCSoC3^DREdxxhLZl0ixKBo zu0DLu%nT2Q@yEMzD~<4H4Z0tTH!Bx^q(U1@6L_1j$e4?ot^}+E9225a?{VPdPYf*) z5``Ax1YeS%@9*eKk;O>ftT+LXdItLOLlUuH_UvwaPAIKNemtMB^<|3Kh8USNT? znWol;Q4NsYsf&6jid}ni&CpjQy)`>c@=rh#RwBIZPk=`IlIsMo*!weTh-Sj)6iIzc zlKM(V16(iqM}8)FYbau#4}eZeNT>M8yeG;M7h%PQUQ7ak%a+bF%hKU?Bt#`A3PBr6 z>Z=c%n39Cd3B~4Npf$8gYquTaPR#yeLH;!!O%@3>TZedPo(AVQ3Md-!?`5KbAP*J+ zQCCVT7h_WnQId`w&6W;I%M=EmcL5Dc585YdIAtg7v{RA;+9$nm1u#sz2*5lZDo~$B zKHR;<*6U={Q;Pgz*LKs&yjLNUW+SyzY!jx?mEOQ0CW0i5)K{FAv6;m*Dl)JL#oG=9 zfyax%DRTQ|K#d@Zz7T{pRL+(Y%@WD-CexuJfC<~s6d=bZ2fjTPcfs*<6@4uC*%SRz! z!rkZ+tUWTN82}GOq>Q1+obLq2evHUQ?$B}Nqt+__O<1`ON_aSnZn!h`hVQz2t83@} zl`T;K#5@Z;3n6Rde$yg@!9u9%S}0DL&e>#EafYRN7EYE|=8+mFAH41N*TwU59Q8(! z);LV@&xMUXG-m~1#?HuWZ{YX)O;5x%JYfZ`Y@*>}2zbv>B1s=0D%0YSqo7pK%Zw+r z^SL=38Qb!K{|*5drA&c#j_w!8LPg(R+*7UU09NO#6-a+^=}vMys-EE>$~ zvg0!jwBYtbd66Y}1~W^HlYTM(Isb=eYMd$Nb83%UF1u`=BwrzOgykWbq^mLR8jo-m z{}iJk0T5=fetoLUsmk_iB%yQQYAGkc69!sGI@O5JUOay^MEmELm&2FW#K&<D7Vl_GNS|z1;bXMr) zLiTGsgqes8eey9{L;ve&_jX~n*Z*~CjEnu$aI8so0<9tca*~)A3gB7Xh>RtdY zk#B0X^2usaF-d;++09{xEgx|bnPmig~F*sk;jqT}>DSIKf%UcTFg#_M% z?0_^BZ2QyoZD=*!0UL-6+blRN2I#+6gOi0h$rb%=eowQ`Nad@Ga5Ep!L)x zq5Q%q+~SM3hMb7bz$(F>0203AmIGU!_66GQvY+;w0K7Qmk>dNz2WOUNavj{Gh z_YzZ3DSmO?mT7|)IG-x+Or};^q*^K7#{%}y6u74r)Y#_7Ax_yQLKC~SYLZC#6uQ}~ zb7(-@>8XR(Vk7BF&AMmGw`BgMqHaE*R>}O+i^>UC9#6*^L-m=LM8n8zuxq}-=*gE1 z@t4p6)(!pGMSDbG?Dz=ePTL)uzc>CkA@007JH0%AYw4Oo31_&%*0LWoR(I-R&I6EG z&5<(}wGCtb)f`}+RkF3T5w+C3#2MTAOBCKH??uQsZs>s134Qh;A2&jAIi^Iqw52cG z9*ua`R{(0)vrZ3>r~A;zKx?i@JP}KY7G_N0-sBjS<*4UY>A1woL5l=s`c#gGj9^4( zRvcFLFvxnTt-6<_`h39Iqr0gtUkY#(5sifyHR;i+%gRwDl?ZpLWI|6H9w?(5zqF;T zKp3sI{c|l|fvd4ok#~HrBqOgniki!FXvF91uB5KTJnEY7e2$As+V(^F4qALH2;;Tj z`MCn9V6ivVsF+eQrQ~9r+_q|RR7+4f`z>`Hrw$;jf6aob(exr{i23prQwA{dWd2t6 zM|6R)jU@mJCiF!;)C5PjS>mJXp+Jxu|5YVbOtM|x$x!1Wqha>XM_TD#bo5l=1NCbX zKrQ~xA9Qva@_N|QuKcy7()YAj*LF*v-FuQ_oe)*ryJsUsWJKMuSS5`%lnOsRaj|v9 z^dh(GUsercNF&VbM|cPNwhOp{+XAPs2yP}*M>|u8Xht7l(Kqr5wZal!QT2|-{7Di4 zArGPfiJe+ADX+_^ae6smy=Nl^FFG%Oeo)DBHYHDU1b9ik2um?SMX?{?<~QWoTco<` zZ-fpMIaG|@x*bzplwwue!>%#FDFd1-8kxQ1&!8Oa^NA3lqMF1)y6iUur^fKUY zi799cwRK#V*kKitr6n&lqSK-$26p#HZ}h9>8E9)G6-I;Ey?jdr@q(FT65VjeU2}25 zwDvIe($qyzO<7tr5mr+hY327pHH~ehSwS)Pd4fDU_84xWbadhEq22P@GHfuw8^cUS zD&)n~R*Mv=a{T4F=>g05T_ppOF@bkz?GkG>s7zCkfU4tKe! z>39B&lQF(!<+-kG^22t;R2J8F0t7rFNuhFJsU0 z?1N9axVq0(1@qs z-(NBBy&v=UZ2+*LF;U92oBy`^NLFK1>D8{CouvO!lAg*KyXZeDOGioDHRGiz+aWv8 zE7|l(S3RIHH(=Ma%^g;0wnH~W8M4Y{-feEzi*5cHf1v6GN~`x;I}Cxv!{58mf#dF5 z>TB*0Zn;=9=@D{+47Bbmti?ufV1)#BoP?}8*7aN%as%+iL!;Ay&JiKs2p+ArrlqwGS}j`hpwW9MMopYR{H2ttpl5{9^GY#IQK8)+l__nP>c zEdo)OU!?`;%rX|VUY28uW;T`1luhJ|p)qZZ^u0A0!n0UrBo2vI%p%yi$gRzlrMdKC&ij;5$$oUaP%+=tD}cbdZYPUDAt4OdF7bAxU*uoVt zL9GQ}*U6E_q5FvXrl2eQ_TlKmkJEmkq z?9^v^n?X zNe{f+FnC)2=q;;4g|wO9jYDn^H{6A;;$Ju49yK7 zze)Sse?1X}vOt3e4T1sDDp+g{dwG~|H@^FHf0fZAp;cN(uFCY?j3-iPMC2H5D22K2 zUEgU05P#xjcBGe0qWE*s@M1zw2r#AV2v8v3*m->p9jl4QwD1O*6fcc;O4>iC2^p9s zQ(AwGmX)_B?UFoqbOOZ#vAGc%M4MrOAJ>Zy4|8(aMb8ZA&45RYuBG$7XUsDKC4I~r~+Y#8(=5RZ#&{|*1Exh0MNoqZo+)x z=N9Ds_d91Iq_O%~*JD0|q{+eufxD8Dt%;x`Hu}v#e96^O8X<`8O@@;x}66u|4j@KGfY3T;hlk2U{0K`##he0x>~J`Q_4VW)P3}h=h8OC ziS;|>uu0p_Bn6cZ&%E(j8FWVasq=iEhtWm)XFTOl!|z)Fq@zF@@KGU`vIWhB!{$CP z3XNm19F70E%dJXg4*)pbV8++CLlViX4hOCtSu=72GIw>e0NZ8#x;c$b@XJ`#pARGf zX*qvMZREeoZVb5EfuL&+B&Zh%+h7n1Msf`mI|ASG&R2klHzI{?&(xD9`^HjZZ&a*T zsac!r9e@Vh@pN~ZeQ#OBIfUU3K%vbcVSP+Kzy-sXtD14ebH8s5UT_Og_RiG$;!fO6 zOH*@jT=~ThSk7B3s~SG?&^dp#cT1m>(_Im-L*+H|tpvxthh+SNEgLIrBj)RAYx7Bb z=g8l8?y4o;oj-*0D^Qy=`c%HfLZoBkkR3ib;h7XS2kRS_7({POLYQk2`ibXuv}j)f zJ}L!zDOJf^uy6KUb_VBha_uT_vlE+u=dvmx>g?+appb65hOPGS^m{}aSseXmv`+BU zJMR!Y>_{`N8EUlZgV|C{0!>F?Uvuu_P zru7-rS!IHxSyPv_q+WIY%Twl^>b}yJsl^xYemKy!GTi#b*zU=$;D?&$Am~p>;HQS; zDgNFG2sdzoXxl=u3`p_zfUnjK`;%6VX-F5_DJo$Qr>Ny}`jqjYxHGRf{;}fLVd9|2*99U2vQuo$3b{fI5idHq4qo#^^uADkc^sbZ zflVzW_>_!tF%3Rc@=2=K2({NdNbvg0)TzJxwCdByyVN8rBm(0Gi3)NpWFZnmQqT~@ zPS4|CP<&Z`dcWZ@7|~Xv4R={$Kkw{Pdhs#9{ClmIK*=A)TM8GQ1(R3@0cqjcRVvUN-T2;j3YqQjB?xPR`GU7*gX4ol1HQT$%7I(4Pufmix?pS&m>FQDnG$x7qlg+%aTz;z0g(ealvOc$ofKARp^q{Us|VZ0%a_|m;`-?ups=xW!9RgDJuPA9l9@RpD!Tf*4I8MD5G z?3F@4L0U`^n=oWN&L;nnf zoo5qS>CLKq*Q~soteGOOE3Mo9QOZzJyq&jLQPBA9sl5Gh*7d9NNy({bTiTIT}ju56O8rY547$bb0pPC?s zp>A#C*Smb~aTZx21?PG3mPv;IV#4 zzV2$m%UsOI%+CCTxv3`Lnhy@BLj{~P!EVvO>&@i&LQ)cQ|96)npkGnvKCkvWU(!m& zA618G*RGc5HwR#B7Uq@K!Iw-Iq2Z7ICeq)xaBDi1__4Z= zX>vlZ^iQvk&bR%Hr4i$!Z_+G@%N|gD0Ulp+K7zgAzQ34Lz7NFbZSYTa(k35!PEZ;T z%Qbm7jK72#QQs}E-%?s7;-gjoL%^!wj?wlR>IHq!^CdodOAY5F?&ZT|uTOrnu3hCu zI!?`&bCrSUqf=WABjjKB|Mlz2WL`){=nO=qlMJPKpbIl3p~!!jUJHPJBj^<082W#2 zB;Py6Fc^r9qlL4(v$^Fro(}ha4uXJyg5ZGsc^)Os{C~3mMff0zK-+*ue2_+<8o)k2 zNd50Xzz=Bvng#Uz4qzbuz*T-oQ_w!3fWUY70nGmnh%62eAP!EZHs%)Qt`5MTB9Pp` zu1E+Z#Q%8-eL!Qu?^*u>`voB#K+%9qLXbM37Qjd$NaOF(sSu2iyfd}X!0%?rY+6e*T=3#2$=HqB)BS+*pk^5%zpMUVS6DdD delta 29807 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 P6o;mOsb+%yH!%MPeLX{w diff --git a/DeDRM_calibre_plugin/DeDRM_plugin/__init__.py b/DeDRM_calibre_plugin/DeDRM_plugin/__init__.py index 3254222..ceef266 100644 --- a/DeDRM_calibre_plugin/DeDRM_plugin/__init__.py +++ b/DeDRM_calibre_plugin/DeDRM_plugin/__init__.py @@ -47,6 +47,7 @@ __docformat__ = 'restructuredtext en' # 6.3.3 - Bug fix for Kindle for PC support # 6.3.4 - Fixes for Kindle for Android, Linux, and Kobo 3.17 # 6.3.5 - Fixes for Linux, and Kobo 3.19 and more logging +# 6.3.6 - Fixes for ADE ePub and PDF introduced in 6.3.5 """ @@ -54,7 +55,7 @@ Decrypt DRMed ebooks. """ PLUGIN_NAME = u"DeDRM" -PLUGIN_VERSION_TUPLE = (6, 3, 5) +PLUGIN_VERSION_TUPLE = (6, 3, 6) PLUGIN_VERSION = u".".join([unicode(str(x)) for x in PLUGIN_VERSION_TUPLE]) # Include an html helpfile in the plugin's zipfile with the following name. RESOURCE_NAME = PLUGIN_NAME + '_Help.htm' diff --git a/DeDRM_calibre_plugin/DeDRM_plugin/ineptepub.py b/DeDRM_calibre_plugin/DeDRM_plugin/ineptepub.py index 5987b8c..5c135ad 100644 --- a/DeDRM_calibre_plugin/DeDRM_plugin/ineptepub.py +++ b/DeDRM_calibre_plugin/DeDRM_plugin/ineptepub.py @@ -3,7 +3,7 @@ from __future__ import with_statement -# ineptepub.pyw, version 6.3 +# ineptepub.pyw, version 6.4 # Copyright © 2009-2010 by i♥cabbages # Released under the terms of the GNU General Public Licence, version 3 @@ -40,13 +40,14 @@ from __future__ import with_statement # 6.1 - Work if TkInter is missing # 6.2 - Handle UTF-8 file names inside an ePub, fix by Jose Luis # 6.3 - Add additional check on DER file sanity +# 6.4 - Remove erroneous check on DER file sanity """ Decrypt Adobe Digital Editions encrypted ePub books. """ __license__ = 'GPL v3' -__version__ = "6.3" +__version__ = "6.4" import sys import os @@ -171,14 +172,9 @@ def _load_crypto_libcrypto(): def __init__(self, der): buf = create_string_buffer(der) pp = c_char_pp(cast(buf, c_char_p)) - rsa = self._rsa = d2i_RSAPrivateKey(None, pp, len(der)) + rsa = self._rsa = d2i_RSAPrivateKey(None, pp, len(der)) if rsa is None: raise ADEPTError('Error parsing ADEPT user key DER') - # check if pointer is not NULL - try: - c = self._rsa.contents - except ValueError: - raise ADEPTError('Error parsing ADEPT user key DER') def decrypt(self, from_): rsa = self._rsa @@ -326,7 +322,6 @@ def _load_crypto_pycrypto(): except ValueError: raise ADEPTError('Error parsing ADEPT user key DER') - def bytesToNumber(self, bytes): total = 0L for byte in bytes: diff --git a/DeDRM_calibre_plugin/DeDRM_plugin/ineptpdf.py b/DeDRM_calibre_plugin/DeDRM_plugin/ineptpdf.py index 3967647..839297f 100644 --- a/DeDRM_calibre_plugin/DeDRM_plugin/ineptpdf.py +++ b/DeDRM_calibre_plugin/DeDRM_plugin/ineptpdf.py @@ -3,7 +3,7 @@ from __future__ import with_statement -# ineptpdf.pyw, version 8.0.2 +# ineptpdf.pyw, version 8.0.3 # Copyright © 2009-2010 by i♥cabbages # Released under the terms of the GNU General Public Licence, version 3 @@ -55,6 +55,7 @@ from __future__ import with_statement # 8.0 - Work if TkInter is missing # 8.0.1 - Broken Metadata fix. # 8.0.2 - Add additional check on DER file sanity +# 8.0.3 - Remove erroneous check on DER file sanity """ @@ -62,7 +63,7 @@ Decrypts Adobe ADEPT-encrypted PDF files. """ __license__ = 'GPL v3' -__version__ = "8.0.2" +__version__ = "8.0.3" import sys import os @@ -201,11 +202,6 @@ def _load_crypto_libcrypto(): rsa = self._rsa = d2i_RSAPrivateKey(None, pp, len(der)) if rsa is None: raise ADEPTError('Error parsing ADEPT user key DER') - # check if pointer is not NULL - try: - c = self._rsa.contents - except ValueError: - raise ADEPTError('Error parsing ADEPT user key DER') def decrypt(self, from_): rsa = self._rsa diff --git a/DeDRM_calibre_plugin/DeDRM_plugin/wineutils.py b/DeDRM_calibre_plugin/DeDRM_plugin/wineutils.py index f2f8edc..fff8016 100644 --- a/DeDRM_calibre_plugin/DeDRM_plugin/wineutils.py +++ b/DeDRM_calibre_plugin/DeDRM_plugin/wineutils.py @@ -41,15 +41,15 @@ def WineGetKeys(scriptpath, extension, wineprefix=""): print u"{0} v{1}: Wine subprocess call error: {2}".format(PLUGIN_NAME, PLUGIN_VERSION, e.args[0]) if wineprefix != "" and os.path.exists(wineprefix): cmdline = u"WINEPREFIX=\"{2}\" wine C:\\Python27\\python.exe \"{0}\" \"{1}\"".format(scriptpath,outdirpath,wineprefix) - else: + else: cmdline = u"wine C:\\Python27\\python.exe \"{0}\" \"{1}\"".format(scriptpath,outdirpath) - print u"{0} v{1}: Command line: “{2}”".format(PLUGIN_NAME, PLUGIN_VERSION, cmdline) + print u"{0} v{1}: Command line: “{2}”".format(PLUGIN_NAME, PLUGIN_VERSION, cmdline) - try: + try: cmdline = cmdline.encode(sys.getfilesystemencoding()) p2 = Process(cmdline, shell=True, bufsize=1, stdin=None, stdout=sys.stdout, stderr=STDOUT, close_fds=False) result = p2.wait("wait") - except Exception, e: + except Exception, e: print u"{0} v{1}: Wine subprocess call error: {2}".format(PLUGIN_NAME, PLUGIN_VERSION, e.args[0]) # try finding winekeys anyway, even if above code errored diff --git a/Obok_calibre_plugin/obok_plugin.zip b/Obok_calibre_plugin/obok_plugin.zip index c42dfb4d5ab251631b08fc3b36e2da56f8d3a6b2..c8fe1f81f954a412ad7d1605950e1174ba75744d 100644 GIT binary patch delta 2447 zcmV;A32^qU_5-Z;1F-m73DJozNLf7Vm8FvbTZ&s^C)f^N5ub!f8D@84`;{lJQ|ssJ zd00rXNHY=ROJ0a;4WBN=mr*iLZ*s9O^Q$6Vi*UUTsMA@wUZ+_hK24{on9J*ECUX%b zqF73Bv08=6T*Of#4KC_bXXUf#TWA}9#p}UNjT~lmq)>d()|S4e+aZ;{oS24BMiq;o zgbMQ%dO*g$LBMx!9gG?FSVLE>#UjA{>+UtFQ_%3qMOW8%Ky7sIylIx#Hx-f+kTUP|FT!nX*^xEOm|y!6a^rr zG-%~_366V!L;{hj>X1I|CFj+Dw=0|FEU1v2uR+(>#QD#J8q983?M@v((O4SC;GzZN z`_^;(UT7UO`n2GH*1q2Z&DAT8<`A~)&-1-C|A8&F$^;Ulw{`kd9H*xoa+>iGQ4yi> zi3^Ppy@o@fvD^Qu8xZQd^R%uEZ;MLLoL?~x zv|FCPCHSFGLBQQ&cF}ks4ylycyuVCGCJVJ3cEh!-f@W<#XpDAaDTDz#OCiszi_5M6 zU2@6ibAA3fjMvMMH4@GAT}CW&`AwaI>NM9O`W3o3>a8|?hQrM&`V~(B zy?=AjmYW$?zfFpkiu#gOnAddFJnVdljkBA%-*?#h4eh^Dxz(Q|OwcQEtgqPRLzJ+! z>7RMW@Xyu#9<TdUWN zSHgJi;hCz0*7;R~=5?8{R(oVY-GB@>^RJF`_zikZHL45nh+V>V_qQPBJb$IQJ8$;v4Q}%oHiR@s6}Jb#ZHa&2hl3Y}NUFX8rGqZN$+{#m}s*dg1vuDnn8T$lgvK$mr zA?nQJQcvFA-F|xddf?sLmjgHFe_jmG(~0j0d3;n@Q$m^+wXZFvDaf)i)Cp=1`jE?+bkgWPh_N%O_Lw%o{o^Be;D4yB)Skd~=4oZ`_~`g3CCCi5qs=JbEkvJ3 z7chGf@sr$Sg|VgZ^o*WZbl%n(Gs`_LJfMyk;^Z+7f`O5$Cr_n@v2X~P63#suc<C zlpI@3vf6o5%D=c0c&JI&LS%Rvq)+9|;iE++YKkzwWGQh$_q zX05SpY(>oB zjgB7CNWqxE6$%Av3=<};7($alVE@=IWD}aB%c!1=u@kyq#Ab!7D}S~y<|)

C#Zjum0M3NuN} z@|HnK69mTC&}>@TZ-%v)NdReiq)iT6%0;a(?K77|Pj)T-BuYdu)nIM1Q3!6V7Pa~@ z6-p*u%{DPs7&}x2`*5{k6h-TcMs1eFv^iC5U!pLHQ zmR@h@p1vD3864hh6MKU&7qO6&bT0D=`v21%mX*R1wFlo34`XV;zX!jam|^PBdn&Q} z%_Uiy+P2Q2ggU62UNE9ftff%fCcj(?WhPX&gF5v=lE^C}NY@*}5#+ZYA(13_rb&uM zy@n}K>j3G72`w(vDu0a`*&r7l<6h%jFYd{)+JLZ=n)hl3G7-th(3r2mh)s#Pq@`qY zQIJ8{h?F7y$mrdEPqXSv0w1PAPtXw@WnNW^EJ~>aOrzCu1FqopEv+^&7s|G!$*|!5 z2`xoI!kHj8=c7&G!Nwe$fljuXZYW&>cbj8{Vh!5=E+wAkL-VD+G?cRT| z?QdvhDAa0oH)Kh=uAX!0r`wPZh_w^6&5TI@1G6jf^#Tdei7rT4JnNOElPUBu2KrDA z3GYsmVDvlzy_22vVF6i_|MX-5x07V`asl>}*Y#cjA(J-tV*!Sfn)YJ?Q;w5xjuev< z_f7%NlVbN{0h*J>_hlP~yV0Wg!3_+tS%llS;z0lJf0`C|crlfU_60qc_^`eOl> zlZX002)BtYNHWE{pp(w}79lb0003WKX>MtBUtcb8c?tj^000000096P02N#}?e0#K N1^XffD)9gS001#~*LnZ| delta 2461 zcmV;O31arF_5-c<1F-m731c)XNOOr3l%|sbTZ&!c^O?(n2WtiQG?N^?>POYD> z=V2kmBF#jMFL@!ZHGH}dUq;D1y~)MC%&&@cEyDFWpiXDydYxv4_%xlSVlJ&2V*kcV{wHAv2_piIxq)tJ@Cl_5^-vPDJz4w9@U{_jL$j1y> z^&bs2qT!SNMdxmSL-*X+O0z+=EtFTPgR;-xZLZN>92{3=qT!8X+Hy0OS7&iFS$~Dd zd;9jTBfZZ^#olrAwwJ^@A-&|&S|>0q^JdlTlGkdvd1a@v9(C9qLbNY%33fH)3Agyj z6fVcKZwG*DT0d8*k1O8?n(|ov=~wXw80y5Z;CsU%7kDX!_Xyu2EaPJAZSm4$i>lL- zZ_%KY-z7Ni0TKyBs;Wc!w3nP$-+!)bmb0Kja=r##UlZp)6KXKKVYNGT{6u4E9D|D% zjPF~|@q3|l(CE{G16uoj4>VV=IGRJ)u0PNB*8B&y)G8B5jNaDiQ*oT0a>!}MM?^)0 z#wRW`M)VpEg~o3Gt8PH3@6OY@GQ2^$OFNxqPcQ7ak1kvXK_E!1txXqd*MEV-;d6e) zIM8l+{+8f}LInYLi`hlvfjFd6X7m0s9hofDa@Y;mvI?5D`Jge{jinF<>@0;muP!dT z0(8kGpU?IA=P+I`L)J(%({~xM$mKV63aZmwhv--6;*cx(5*oEMP^t>3WMsK^)r9Zz z?`|%roG|gKs>53ec%Srhynm_@7w7xcH_`A=?yWpJsnuTp%u|>?1FN^%^cfB}tLRre z1@!*SMO$uWSp7CBS}N*GR$*S#QS-3#B{t4(=6>H{>o>IjO6696jxa&5z_Gq!mk&|G z)~0{v9m79Y_j}M<&mwe}Y63B#Z!=CKHt#w91cp0o3s1FG-Sh^o^?&eWvVZX5XY`KR z_FkDaI1Gc!K=hsJjW*zKm`rRr$sp*Q+iK`phYwaY?D}uq)!|!%Q2X;e94@Nw4{ohq zH(m+jxrb+}5?be14Vu?w!dmT-1$6^5*v!8=&fz!cHPxstz$1!TIo4Qgg4Ykvw%p9U z@FOp0Gx(I7Z2u)csed`gE01}Bgp0hR2S;J@g~tj4+;ZA%e4!SNO&2>g)*nO*J&?vu zhYS7mLQalW+Njt*^&0{c$`0&nRk_&5e7n?2W9QfJQGQSCO(q;WC!AtUCT872DGv@% zVhrQ@`zCzX(yxKaENg@MJ8^F1sa93T_Uzd+XU>d$0y9|- z3aJovW^$<~Z*FfsK7KXu?#=UooAW;}2I%R;cZ57XDy%6XO^e#s7Sj}DSsCjguC*ix zOqKL#g>rq!x`M@9v2=^M+|ZD5C_4)NY#_aQo~p{giHzN9t^xy zHWNyYEhbs*yeZ{hTnRkXq-!BEJPp#kBL=+4+vT8S z2>N_6V*__s)nf-j=Sg_Q>v+)v@)s;vk3(R;2;%eE`RL>De4Y887>_8&�dQ{7)7zWRmsi)k z<*7D0dO#xuV**zw6sR#we850GvO{ACO$LGeW4n+|XpSzUdNRgN=zbBK6|Sy-*ut2n zRCmt}>)I7Rqq)?%nL9RuaSJ{vsp~}qznZn8_ETf;Bi8BIM9dN(Y5Rm6H&K)aZiiKHUzXqTwKQ7z=z;c*uY7UgzYNK zBr(fd1|>}p7-K`TX=%S1)?y|Bq~(z|IczBxwZgQ|ToOInwfLhb5y4c0waG>yxUpK) z>c>_t& ziv?PGy`g*jcGP5Wc(YCH4Z>W+LQc}T%qQsoPj^^W3QN=;d`CQtsR92U{B~l7sYCCn z#O^njWNB*KI)@VKplW)-h&Hj7LT#J;aw(LVP~8sd)CWl-uZSRBZwN<_-+qKdlHi#p zDH`<}rbMj+q#Gu*xKOKqG-hOjTzHIojdQ)YBgbk3!cJ=5s~N~dBqKv(z6K*UCFYWr zlFday24N#ohV&z&cl#a9sxJw=p9(!eM{tyRRVlJ4r4lfWR?7{zg4egS+QeKa+mcBd=(y=VgiAmr5s~uSr`lL}G4#fL;<@N{CBzPE4>* zmZ6qcuGeR1#}ZTTk2`6pe2&K8lCl$y;O4?=f@rHs9$1URsfUZonvCH0p~N_h)g3F~ z#^*`rgpeH3-m<0@(vjpB#t%Ekgb#%d&>0vnxf4XKJk>jJ+tG{=E90D`W=wW_qpKSC zPO>#?y-E^v7Y03ZMW b0000102lyXE$}McNs|QoA_gn*00000kKwd5 diff --git a/Obok_calibre_plugin/obok_plugin/__init__.py b/Obok_calibre_plugin/obok_plugin/__init__.py index 730d38a..5a52b40 100644 --- a/Obok_calibre_plugin/obok_plugin/__init__.py +++ b/Obok_calibre_plugin/obok_plugin/__init__.py @@ -19,7 +19,7 @@ except NameError: PLUGIN_NAME = 'Obok DeDRM' PLUGIN_SAFE_NAME = PLUGIN_NAME.strip().lower().replace(' ', '_') PLUGIN_DESCRIPTION = _('Removes DRM from Kobo kepubs and adds them to the library.') -PLUGIN_VERSION_TUPLE = (6, 3, 5) +PLUGIN_VERSION_TUPLE = (6, 3, 6) PLUGIN_VERSION = '.'.join([str(x) for x in PLUGIN_VERSION_TUPLE]) HELPFILE_NAME = PLUGIN_SAFE_NAME + '_Help.htm' PLUGIN_AUTHORS = 'Anon' diff --git a/Obok_calibre_plugin/obok_plugin/obok/obok.py b/Obok_calibre_plugin/obok_plugin/obok/obok.py index 26d1e38..9720dcf 100644 --- a/Obok_calibre_plugin/obok_plugin/obok/obok.py +++ b/Obok_calibre_plugin/obok_plugin/obok/obok.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Version 6.3.5 January 2016 +# Version 3.2.0 January 2016 # Update for latest version of Windows Desktop app. # Support Kobo devices in the command line version. #