From d6c3ffde87fd0ca6e87ea987ebacd42b25ee6694 Mon Sep 17 00:00:00 2001 From: jrandom Date: Sat, 17 Sep 2005 07:31:48 +0000 Subject: [PATCH] 2005-09-17 jrandom * Added the natively compiled jbigi and patched java service wrapper for OS X. Thanks Bill Dorsey for letting me use your machine! * Don't build i2p.exe or i2pinstall.exe when run on OS X machines, as we don't bundle the binutils necessary (and there'd be a naming conflict if we did). * Added 'single user' functionality to syndie - if the single user checkbox on the admin page is checked, all users are allowed to control the instance and sync up with remote syndie nodes. * Temporarily disable the x-i2p-gzip in i2ptunnel until it is more closely debugged. --- .../i2p/i2ptunnel/I2PTunnelHTTPClient.java | 2 +- .../java/src/net/i2p/syndie/BlogManager.java | 21 ++++- .../src/net/i2p/syndie/sml/HTMLRenderer.java | 2 +- .../java/src/net/i2p/syndie/web/PostBean.java | 2 +- apps/syndie/jsp/admin.jsp | 17 +++- apps/syndie/jsp/post.jsp | 2 +- apps/syndie/jsp/remote.jsp | 2 +- build.xml | 20 ++++- history.txt | 14 +++- installer/lib/jbigi/README.txt | 5 +- installer/lib/jbigi/jbigi.jar | Bin 900344 -> 930924 bytes installer/lib/jbigi/jbigi.jar.sig | Bin 172 -> 65 bytes installer/lib/wrapper/macosx/i2psvc | Bin 72608 -> 72616 bytes .../lib/wrapper/macosx/libwrapper.jnilib | Bin 10004 -> 10004 bytes installer/lib/wrapper/macosx/readme.txt | 6 ++ installer/lib/wrapper/macosx/wrapper.c.diff | 78 ++++++++++++++++++ .../lib/wrapper/macosx/wrapper_unix.c.diff | 60 ++++++++++++++ installer/resources/postinstall.sh | 2 +- 18 files changed, 216 insertions(+), 17 deletions(-) create mode 100644 installer/lib/wrapper/macosx/readme.txt create mode 100644 installer/lib/wrapper/macosx/wrapper.c.diff create mode 100644 installer/lib/wrapper/macosx/wrapper_unix.c.diff diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java index d0932e587e..e4d42ef161 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java @@ -371,7 +371,7 @@ public class I2PTunnelHTTPClient extends I2PTunnelClientBase implements Runnable if (line.length() == 0) { String ok = getTunnel().getContext().getProperty("i2ptunnel.gzip"); - boolean gzip = true; + boolean gzip = false; if (ok != null) gzip = Boolean.valueOf(ok).booleanValue(); if (gzip) diff --git a/apps/syndie/java/src/net/i2p/syndie/BlogManager.java b/apps/syndie/java/src/net/i2p/syndie/BlogManager.java index bbc0423119..8c3fe86347 100644 --- a/apps/syndie/java/src/net/i2p/syndie/BlogManager.java +++ b/apps/syndie/java/src/net/i2p/syndie/BlogManager.java @@ -240,11 +240,22 @@ public class BlogManager { File cfg = getConfigFile(); return (cfg.exists()); } + + /** + * If true, this syndie instance is meant for just one local user, so we don't need + * to password protect registration, remote.jsp, or admin.jsp + * + */ + public boolean isSingleUser() { + String isSingle = _context.getProperty("syndie.singleUser"); + return ( (isSingle != null) && (Boolean.valueOf(isSingle).booleanValue()) ); + } public String getDefaultProxyHost() { return _context.getProperty("syndie.defaultProxyHost", ""); } public String getDefaultProxyPort() { return _context.getProperty("syndie.defaultProxyPort", ""); } public boolean authorizeAdmin(String pass) { + if (isSingleUser()) return true; String admin = getAdminPasswordHash(); if ( (admin == null) || (admin.trim().length() <= 0) ) return false; @@ -252,15 +263,20 @@ public class BlogManager { return (hash.equals(admin)); } public boolean authorizeRemote(String pass) { + if (isSingleUser()) return true; String rem = getRemotePasswordHash(); if ( (rem == null) || (rem.trim().length() <= 0) ) return false; String hash = Base64.encode(_context.sha().calculateHash(DataHelper.getUTF8(pass.trim())).getData()); return (hash.equals(rem)); } + public boolean authorizeRemote(User user) { + if (isSingleUser()) return true; + return (!user.getAuthenticated() || !user.getAllowAccessRemote()); + } public void configure(String registrationPassword, String remotePassword, String adminPass, String defaultSelector, - String defaultProxyHost, int defaultProxyPort, Properties opts) { + String defaultProxyHost, int defaultProxyPort, boolean isSingleUser, Properties opts) { File cfg = getConfigFile(); Writer out = null; try { @@ -277,6 +293,7 @@ public class BlogManager { out.write("syndie.defaultProxyHost="+defaultProxyHost.trim() + "\n"); if (defaultProxyPort > 0) out.write("syndie.defaultProxyPort="+defaultProxyPort + "\n"); + out.write("syndie.singleUser=" + isSingleUser + "\n"); if (opts != null) { for (Iterator iter = opts.keySet().iterator(); iter.hasNext(); ) { String key = (String)iter.next(); @@ -327,7 +344,7 @@ public class BlogManager { public String register(User user, String login, String password, String registrationPassword, String blogName, String blogDescription, String contactURL) { System.err.println("Register [" + login + "] pass [" + password + "] name [" + blogName + "] descr [" + blogDescription + "] contact [" + contactURL + "] regPass [" + registrationPassword + "]"); String hashedRegistrationPassword = getRegistrationPasswordHash(); - if (hashedRegistrationPassword != null) { + if ( (hashedRegistrationPassword != null) && (!isSingleUser()) ) { try { if (!hashedRegistrationPassword.equals(Base64.encode(_context.sha().calculateHash(registrationPassword.getBytes("UTF-8")).getData()))) return "Invalid registration password"; diff --git a/apps/syndie/java/src/net/i2p/syndie/sml/HTMLRenderer.java b/apps/syndie/java/src/net/i2p/syndie/sml/HTMLRenderer.java index 57607ac760..ac31b4492a 100644 --- a/apps/syndie/java/src/net/i2p/syndie/sml/HTMLRenderer.java +++ b/apps/syndie/java/src/net/i2p/syndie/sml/HTMLRenderer.java @@ -351,7 +351,7 @@ public class HTMLRenderer extends EventReceiverImpl { _bodyBuffer.append(getSpan("blogArchive")).append(" Archives: "); for (int i = 0; i < locations.size(); i++) { SafeURL surl = (SafeURL)locations.get(i); - if (_user.getAuthenticated() && _user.getAllowAccessRemote()) + if (_user.getAuthenticated() && BlogManager.instance().authorizeRemote(_user) ) _bodyBuffer.append("").append(sanitizeString(surl.toString())).append(" "); else _bodyBuffer.append(getSpan("blogArchiveURL")).append(sanitizeString(surl.toString())).append(" "); diff --git a/apps/syndie/java/src/net/i2p/syndie/web/PostBean.java b/apps/syndie/java/src/net/i2p/syndie/web/PostBean.java index 597c897b38..fbc3d03587 100644 --- a/apps/syndie/java/src/net/i2p/syndie/web/PostBean.java +++ b/apps/syndie/java/src/net/i2p/syndie/web/PostBean.java @@ -97,7 +97,7 @@ public class PostBean { _filenames, localStreams, _fileTypes); if (_log.shouldLog(Log.DEBUG)) _log.debug("Posted the entry " + uri.toString() + " (archive = " + _archive + ")"); - if ( (uri != null) && (_user.getAllowAccessRemote()) ) { + if ( (uri != null) && BlogManager.instance().authorizeRemote(_user) ) { PetName pn = _user.getPetNameDB().get(_archive); if (_log.shouldLog(Log.DEBUG)) _log.debug("Archive to petname? " + pn + " (protocol: " + (pn != null ? pn.getProtocol() : "") + ")"); diff --git a/apps/syndie/jsp/admin.jsp b/apps/syndie/jsp/admin.jsp index 59eb76dd02..7fd2ae6715 100644 --- a/apps/syndie/jsp/admin.jsp +++ b/apps/syndie/jsp/admin.jsp @@ -25,11 +25,18 @@ if (!user.getAuthenticated()) { String proxyHost = request.getParameter("proxyhost"); String proxyPort = request.getParameter("proxyport"); String selector = request.getParameter("selector"); + boolean isSingleUser = BlogManager.instance().isSingleUser(); + String singleSet = request.getParameter("singleuser"); + if (singleSet != null) + isSingleUser = true; + else + isSingleUser = false; + if (configured) { - if ( (adminPass != null) && (BlogManager.instance().authorizeAdmin(adminPass)) ) { + if (BlogManager.instance().authorizeAdmin(adminPass)) { int port = -1; try { port = Integer.parseInt(proxyPort); } catch (NumberFormatException nfe) { port = 4444; } - BlogManager.instance().configure(regPass, remotePass, adminPass, selector, proxyHost, port, null); + BlogManager.instance().configure(regPass, remotePass, adminPass, selector, proxyHost, port, isSingleUser, null); %>Configuration updated<% } else { %>Invalid admin password. If you lost it, please update your syndie.config.<% @@ -37,11 +44,15 @@ if (!user.getAuthenticated()) { } else { int port = -1; try { port = Integer.parseInt(proxyPort); } catch (NumberFormatException nfe) { port = 4444; } - BlogManager.instance().configure(regPass, remotePass, adminPass, selector, proxyHost, port, null); + BlogManager.instance().configure(regPass, remotePass, adminPass, selector, proxyHost, port, isSingleUser, null); %>Configuration saved<% } } else { %>
+Single user? />
+If this is checked, the registration, admin, and remote passwords are unnecessary - anyone +can register and administer Syndie, as well as use any remote functionality. This should not be checked if untrusted +parties can access this web interface.
Registration password:
Users must specify this password on the registration form to proceed. If this is blank, anyone can register.
diff --git a/apps/syndie/jsp/post.jsp b/apps/syndie/jsp/post.jsp index f92a7716dd..0afc1cc315 100644 --- a/apps/syndie/jsp/post.jsp +++ b/apps/syndie/jsp/post.jsp @@ -97,7 +97,7 @@ if (!user.getAuthenticated()) { post.renderPreview(out); %>
-Please confirm that the above is ok<% if (user.getAllowAccessRemote()) { %>, and select what additional archives you +Please confirm that the above is ok<% if (BlogManager.instance().authorizeRemote(user)) { %>, and select what additional archives you want the post transmitted to. Otherwise, just hit your browser's back arrow and make changes. diff --git a/build.xml b/build.xml index a11e2e2b3d..a4c7e37d19 100644 --- a/build.xml +++ b/build.xml @@ -46,6 +46,12 @@ + + + + + + @@ -115,8 +121,8 @@ - - + + @@ -199,7 +205,7 @@ - + @@ -289,7 +295,7 @@ - + @@ -341,6 +347,12 @@ + + + + + + 1yCJ9*EWc|1PE>cg1b8ecMI+woQpemLI}YnXmCi75Fpsa;o|P@?(TY#&G)@; z?f$j9Gd(lUbGoaa(_K?N)o0HAgTV2=5RRq_BGOwpw0|d#KNs(J9ATvYeX3{(3lY8D zE?^Pb+apR&Eg(8z^4q09a=7%k@PLQYR6#`>%~>#!hl7LrpX>kWm;Xg+33~AFYSQ*@T>qEW|D%MU|G<(S_&U%3Kx<(Hb@%_Y*Z+Y?U%&VV;kVEK z!Aofn|I6$D)!%{e{zv4W{QrGWq`3(rkktF4AyIhzr^~beq)gQRg{f^=r1ctKki>)j zQs|1{EOM$`GPQ>B?`vtIv^4ts-s82BIP8H3*aUlq|O z^sfK-mi7|o_+{v&3aD1v=YJybB8(5S?BgMP{r8R{x;xCQ& z`b?pi1`;<-e+carsJkFD$CLUM%U&n-{Tq=>gB8#d#l9>p*K_=umCifH3p=i9rkP)Q zg}n@(5&QT`jAaRXj;8b4jbgRDPJl?Q?RYOhBu_g$soBW6cU`%$RWV;4uEc9t#o1nR zN6NuC;cd>3HdlLd95~Ztas)@Y{$Cb2@N;8q2X$g?nY|rT*^C+;7do5&>{XPt+F44I z*8!y(Ou3};L zdfxz>+AcC-==Pnnd;s`?ZH$ed@ZjCrJ@6Lt`KDUV9Ex0vsbf%fScCAW^H|619aQ=! zn0blm&H2@sjgSFX?*5-5pDyplpt#p<}1GDU+Sh{n7Cisur`eT#!|LEHe zof_o?v6**r_dn<_Ri;DJhI7v{JUx4kFNHlgT+F_0zn9?bZlw4--6f#VVUG6%#J0Xv zXQ5YD9nxc-nKW$2(d#ca2B8P_6^PxJZtuuvd9t(CU+Dd9v7H%Q>>2v&#ctSO)e)tu zzglV4QQfoF;M6mjqQBa(E=d%$Q^X48(Ej^0xJk&G2Df7-9DOOPKY#jm!c{6JxFdC7 zsnu>LiZ$Q*iNMrE%LiGt5iV>CuwbiU-wzpst0~8TE5+!%`+lx49HCa!M!pV0?yGl+ zjDD?S@2S@3T@o)p_s?259bfk>3{mPPWDRTM#zLR>3D4ay*>gRSuyOk zlAjj5V@Zv_2&Wq#LgYdY)Q0uewwZn#r!@lfKhl_in#@|Zz!hI&WEQI`(*W_d--5x+ z$%Y~|ZLUhYL~P*?l45T}Nvo@}QX{LFQcXRXtcM`{!+O>BlgWtzyPth>%EQN4Gf6UQ zvk5J7>iQ?XK1-7m@RMJqsoI!11MCp*n%-lU7C7RrmdTW4;3+ z?E~{#idP?vhznao z9O$opG<%`6r=*iIE%Z}#Ec`7Vq24l}+ezHa3!d*1iuO@q}G8H0(bp)IT zkcPVNtvBR^xc39xtkxJ4KgcXq)wqh@T+g6!ed{(bDA{+~oK0e5 zoJM_~I4cfZhbf6BYpf|GKcao0mfDw@+O7JmhjPR7jZg-F-{*{g(Co47i%Y)AXs1vX z&Slfb5A#=MGsdy@@tdE=XDX)onS{cgGV^b_levEyGKhr;=dV~q_VVPlIe+E<0e_X%@hy-C2fMv^gm2X2OP3`TUGju< zrE!X_C6*C-owX;d zQz7@?kBH8v@C>zz3`0oT`vMt#`qan{iuU1c-15 zzsSNlS}OV{tZ5`lQm*1*wW|o1?Kk37*EVqC(z#Np@ei)*zeu^{`*BkN+qcQdJ?fhc zp)qP9Ps-oT`H&@8OVkM=hJ_m<#5>kcf%3bdG+BY4vB9GB&PZ2pJJ}~=2sY3@&EL|R zxsS5%|H2)ln7rr^Qlsj;6?4A#xj*gTj(Ac%-g_4`=HWangt8`1D~>pHmnLLY#cw20 zH}%0~aXk>uvfHCZ00B1(=zCP=`J5JAl`?gwED?t;)`qdq%lade^mAh;Ps)>ES>~G{ zg`hAGVamXKSF9s65-aiEC!1VZzu&Kw2r2|A7axI$r9TbAG=BG48Ws}RuW$?$b7g2l z@Hs-*vq+r|U&5y1^xIXeGx~xcy}|Eto8I34QN5R*$7OD_H9T%J0m9POrGs=c)-l?R zqzzhw*mq8aWL`(B|DJR85qc-_V8lT7>?{I;7O{E1G?F6ce-BcXAWPzO4+>IE;VR1G zE-I5p-U}|exMtdNpY&@X@)L|7bK-`w*aqnmZIxD&nCoU-=rZ%A+XSV%5IJRZ9ax5= ztOwTKO9b%;;id|G0A4?jS&*`(di|-WL1SG%N~|(d1bwO6*#JGM3w3kH_wao#j(o(B zYD5rcN9=`nI2T3AlccxulY{+WmLxupt1H&(?vQ=+|gjlML-m*g_D9e??Fu?q&-k!RToT}UJ z7tvO%bhiDU3)*=84*a*amn*v$m?T##TzY{bVt%B3bfY&?p*RNIvs%}QI)2ARPh>w~ zMu`MJ%ysc#?`h|l=gg;$FwBzvjw7FVe}D2-_D2pXg#&CIG5!}RStpnU-mG_5`6Z5s zPGV1LYy4FgOewL~os1w6owF=O0wPZK)8U(VPW@ew1r`-V@^TO*zWX+#0S^g9**3!? zQz32e!`R~r*zG2mF4G3(P9{^8IlkjBrTAXp5}9{rwVB?6s=pdbx*Mf3lAg6&rJ2G5 z+OmQBXi9IvjA-f4C2uwqd-M}>;V70Y&Z-b^sa7iQ_Cs3xINJR=ub0$Bx;ZvWm%iB6 zwT{mrQ`Ld^Pw1K~;waFT$mTsm*oNm46kNJn?-oEzVkmc{;tT;&rcT5MJ3^~wlUv_E z`6P3V51el8Xrb;CHHkSD_$25f6Taw&o}&X#HaE0u9&8iGED^vap_&(f2*9nqo`-G#$;^(ee5lqXkhVv>ZG1n`i#2c;nBWyo;*qLoJ9vY=!SwlbZjeEoYwxYqdBSfdI$y4*ZA>CH|`@Ky4L#4 z>(zG$by5qG2dyj0RC~e&ca8;jC^FqZbONVxz|S#9g4KG`rr7e3%LWc97)i-p9@Q>r zn~%>KWdiH4Q=HFiI?3&CDPC@tM%4s-M#Uk1)v0@h7WP&HoL}fKFaGlojP(akc~8TT zE0d2Xo+cf8~$;sryx7{Z-+#xXSr&E)I=ZA%Vn zzTqn&+&>IvC7rQc_rF~Lv1goVO>-ffzznF4+2Dypjlj9T^kO|^PP17!i(`))bwX@0 z&-eUxJrHfy;G?*g_VEu#L7i(&S4r87m?YHsoX-_mSCJ8;M?;YcZsfEJCDn?O3MBK3 zCv2Y|bM*vDGUHKQoNXiP@-!)d@h}X|b|I2L?*4kB1WFv?Px0-4->-#yg{R57fE$3o7oxA|G~z z;XraMfV^;+54XBtqlcOGbI>d6;8(RHYag;g%TZYf#+mIcAzf0)*sZ7*! zsn$lLrD;x7a0`c|;x}a|o9%Db6fDZ9Y_i=7_}z-{N5+*vCx7f#*9|;iC%tADFb|&q z+&V!FO~%f!N2}R6)5E+#+ZPXp*Z_G5&M&yW%nyBts-?N@cbT#3OZ^L>pE)JL;`1KT zSDek2 ztkHYWzO|y?XqZHvDHw{_Fj2RJkyW=`J_v>H&4xktms0!u3xG;qB~rGXc`C9!%FnpX zmUQG2A0RA!kvq3;F!(1eGsV=t3-lKc^vhOCDjzHU{@NKXYDv0>*%9x^Nm!}w}Gnjy*rDFXj?7=>vVLLFcTb%i@ksZmm@XMWc{)ubei7U2)t>`$(xmYp# z9>tg9KVXz`5@0>03+~DqUdCYiDp>2s_NN3tKQsy6b%H*;_Y_~@psL&GK_Jau9zIAL z9EXME`nw04y&WWww5UaB_>O9qk0MYi4;K6CZ6aZ_h(yIaO2u*T_B;n(B)>dt2=v)B z=j?rd&P;zzh#tXQP1>Yqgy7Fr!&n$`JN)J(>q+>BJ0P5Y`oJMBtIpE%hM#78gd+@W zOqju}&`2{&FujK30!4ShsyvLESKwp`kZr7fl`<-mUsMRtz4xpK>wOJm@5uFi1DtLJ zcT&J-sqYWT1yzd)iScTV9Yl1AuMY5>Kh4|1kLmPhTE%qf-7t6U71sUPI=4RNZ&EtV z+IErg2cT=o!D#6-?2EIo<^29Ks>2!u;hK`!f^74Ch2y1YPpb(aK8JHwv)*3&tW<&2 zT<~Tl*ztaB5e_n0y57lZQ@Prv&{37oW0FTXe ze+=G*MogQK%=_rkLM+A=lcb{h^MnhwwLI?{0R~kmy!lO{#CN*8cVC^pn({8C*yobf z@w(FO?O|sXM+uVAtw zdJmHcb6AoZZvyy=1X;vZHM}<8@D2S{)~Eq;(X0soT;;)@V_A zLgIpT?X*cjU<*0onUqc}tOTU5X|CXt>)Rj=@Gy&b91p!$%Z(Nre|s1LnN z^p5%SiV8cH2O_s%xeKJ{o&ZE+x2PECXO;6|eZ z87i&7P|$<|ZaZvX>-Z1|Ub55x)8)M4`k8+_t3oA#ZIT0RxF;$1u=iIQ`#atg- zqhj?R&4@6XCl{XSF%A15)V#(@U47-1;JhbPjjpu-r~t~|o-^QJw+HR-T+<7^<*56d zA7OFM%B6#VC1ucMfO?Bh9V3D)B+~zKh`T{WE|Gmqja!g+g~KXxmI*Ji=A(yr1q%0< zdj30~R7GOziGASJuQA?M)O!*Erhh-!9zZPtCl->%>5di8?0=rgT~9}F;@wkFp}Nr& z){*w-cNRNTEe8nSd+1TL<9yxT8vLlK*mCJeOHA7@$#nbkmCytaw4Bifo>P` z02xBLtf&EOZ62mijc7&i!6?FKhCkNKB;$|t;oVn<9vl;{sKgMPl6IyE^^k^Nrt)XD zGucN!dh7>k-gTvlZAh=9d)`0jB;=NZ*6lKT{fC(+!+}G_SP7ECq|y1XEhc7BYvO}U z@b#QDn6=k;mqV)9?lyUG0d2I|BP2XVR`j~cRxdc&&yZ;S<>kFUX+ph?hrm#_?wD9d zdAc!#&A#UKPpfy_Cie|7x1Qj#p=LFcPxWv|6j`;w?4xR`Zr|TUaZ@LAL}y%DyP&jC+W~N%gB0dCgN9BTp>!y6h1pwWcm} zCm8l_sE@}xX#+&{R36esVGKVr@Fx>#?J94rmMcxL^A5eodKTJ#d6?RHhq(?jW|QoP zqnZ#%HrE^v!b=r58V?drg;iQS)28B93e1T00X%apnT@uy!CV5LL+(ni>6bdVx8}c? z8DkFHwfV0MddE5GUMQ8&K+P3Bsx>Ee+*gPam+x2u`)KJ~jg%A`L;aH))x4~+f@w6( z)OxQz704Lj_H^PV-1W@`@_?}|cz)c8Y4E)+TFA&totMWT|Gan_rRNzo6dZ?95Vp zJEN8XG^v)JY3ht0Guv@FW3zw57M((l}ER84d~U)Sx^P6h>R1FOqBAfXNZ zy$tq_<97)Rm80)O5f3oO2t={Py-6-h)uHADk5PxYN3>0j`uoahA$g4JIdjE88Xio% zrEgjtCZ3k`?Be9M@sOo4*!*UD=!jO-kba`+JXhry_wHB%S}br3b(F}V+-m%q6qM$+ zrmOTwzj#?CamW45n@LIM=SL#EnBYugX<`GigsL#N_sHX%YdW{Aat1L2mPyt<;_p*XS03GJTfPZJ%jLPje2gi&r*L| zVbR;`y~nXHIX2+}^3vpl)13Q(%V)1OO`IyZNwz7uwA4P>DY!>GJxp{DRW#NpeeokZ z?DrSV+EXz@!-vcdb8<=Oa%uWk(E!b1U zr9mmP)kEFBCI=6r&0CRY4XW2G>0i#qn_ly#e`XE(+BDXD>@*_6E!BOU4cepDU=1oB z?=}~KU&AcGhU>Ne{<@d_gi~=Y?%q96BKs10l3h6D#=VDw+0yv&9NB&=TOWV%4P@D& zgZ$5fuzQQ72{w>TIhTMXC-M8SOE;;)*!v^Ua1GOo^_t|`FTfjD`jwZo*%Zn0Xg@u! zP&2;z^+on0^$m+(M8UXBYXE5o=$bHwL}Y4-fZeOe)Zt#XyPL6vK?0AIHkT4Z$95feFF9q!Wqz6pD0QDnDEu|`Ae2R%qLP% zIbQS8`7^WP4QJS+oMUkRnBEb*SYN)_XlaY&lCtN|IjI~iJeWUy%?OyGc9qIJwqyf-%i)uEv8o=}{DWoVq_XX**McyA_> zoh8Ajy)!6Q&|<`SqWjrIZshXCYqrWM;b`7u)Qa+Mjv4Zo z8M5({AHx<$th@}5xLiwhtzcMp{yi}rgMXrx3kA?XxGwRtELNEir(aUzgc`ipd*d{t zvAlSo@GSmTLI0v9WVSba%qV#RR>*^kYc)JE?R4JNSj11_T`d@&Y2(k=L-zIZxkkI+ zgIB$57NyQog?8u{(UDAdPej_zOh&_-wlbl^&kzDQAL1V}oWG8>e7wnu@k`UxOIZ5H07xYUuzB=LNE zH=>Q1VxBilu#1en+{PUk(SV!bMy(nTdoE>Lcb(o)2Pzm2#0m2@(8k@~+LJs4EhRkB z;`zwL$sUNViaHdYxr&^Dke+JcgKdNtp!MEQ<==$g_?nETRgDb1RDSJceWuBJ1cE(& zv5m@zCTIU0MqGp~CHt>?sLdAo+cUNZPKc4T^@v%RMEe~1-*>rY&tmyW%kst|+y=*M zlM<)6Guxu=1|NNFKmKUplWu|YuV5qWUJ#uN*_YQvH|{sxj-QC7boB!|{Yd>+wY2{;E;N!@&^c)6;S5^V{9xK`XG>;<_~x{VEOb z`6|QqVoo1@?sS8sy}Z;x=lsA|2&R9=RFeC9nQm1Q%5~pg{w*DM%} zI8jm{GCVkM4l9a0u$42|<_s``etA(9FE9))X|(9nHRc|*2tYxgFB*_n*$o2kB%>0U z)Ruu|?=(H6!>oEFxOmvnX$$*ji5KPO+Ja2MgC=vsN7%-HTl2QF}iNqsuoxT*%yHLCnUhh4V3(dOFutYYhVgPo|woku)!|3 zkVNdXx!Rm|{w{4C zsCE0xlh6GOXo=c~zdLY^_I}G1+dOMU*_eG?ukEl5CKIgFx2=jp7!>(a_^7LXJLn$$ zh!67F%!ic(wY5*3oj*03bR-%5T_ZUn_q`$!PW7k$DQT1ZsC9OHR_xw)@iFE?rY?hN zg!q^rfbp#y#o|+hx`yw*XR%m#<>`4Mm0lsJQQ74NB>PJaCug!y!y?WU8Y$#fEBa}! zQNseTrS|qeuiq)0>Fxd=3=C7Pa8EV=odgN`&NVk(0CC7i%dL)Lw{3UDLm< zE7bcJpk!%^HLqf?{q9o2UgE;6bz6VwBP%&GtwCP9BL8fWJEJUFKCR&t1*T3&E*DJQd{(c=^lCC2Ke+uoe5UqutTrL8;Jd_}$|J?0nWbFr)EULc zrs+K+#oVnsx}9LqYR>o`nViVnUIvqRrWcgzXR&y<3^`i3I7W6qL_Arqbi9m>SaZ^* zG4JQt08Fb{kzqiV)D7yvl(wF@ylNElh}0* zfP*E=Zdh2t1x~6Qh5K{WTHr2S?4(|Vv_(6j=8e;m)*_jME#4j|rgSegniGzs$&h-o zpU|450|;}U!eMZ=GCTV=^~HJ(+q`#&FTT9i>|Cc(ePL)P*_(_9PP zbtfABsBU%MR7O9p(D&Yyju3544oSTLR?+SyCvZ>Cf)fp@2h`?&Bb$vE-aFm!t6aUU z|EBdylfEL&(~SH$wtEMW6Wx58|4B8%nG75#k!fIdhzjfa!|&x%<-tlF27|ps`%hV7 zO3j-xDymR6McJc{XZ>+j0x?OdVJnO&jmO**j`7Il0_}brbw8%$waH_Z7Jm~0E-ilT zUnKc5?kgG;%;YcLhm~O_#nP%)qpgKcZ!}`IA0&<<~YHpY|B3xrBEZeukF} zzHU%rencM0f*3@sQoI1+M zwPADzMBxu@D|={b_-3b{OH9xPf!bs&3)M<}ty4&pM{eW=ulfDyKz}+4SD*}m$MWWB zZ)Q8S=d#k4XZh&Gk0n$gF~X`lLCt56T8ZSFA7@kO*(;80V<5`I#ypc~nHa(_J6-Hf zqJ}NG9u5u{1e_|496-2(A$~1srDP$av2dH+JvVQ)&tQcXbw%I8&|9Slcstif;l&wZ z8wtZmkU*U*P4NPoTPnNT3k~7l5yqT_LX8>DF0Yz31&Sm4hPXYb*!-SGvo%LuH!lK& z`zykOiq8Ee>$yhbW3er9bVw-1Ul^!z6Y3>V9Qc_Q(;$O`$mJ&rB!fv)e{7eCqniM+ zl36*C$|7ynr{hZO9W?@gUY>Fl+a=#mN>OItj=X41n-8xowl4=U8`Sct8{)**_ivwC zMm0I|T_L&D`{Iiy;Ln>PUVvX3=)(vPMt42i+ z-%+OU2}KJYHzf;w!QX2r;^IhSr2;MWVw#*AVB^F!W5boUgXkWn;KW_q z6eMAI_Z|$>1ZO1uBnh#Q-0y9s@274=i1vcjfAsZvx1q7I-a6x4)?#W8!&3_6Q%f{! z_|Gx0IV3y^f-?bFc&p8(|5ig`c!JS@Jb!CWtpD0;AJ3R$=;04Sb%Hp0{b4(ZjGGjQKV-RyRk5$#yUC$N~sq- zW<8*VHC=hrc*$Fn6eo^+Ho^62@!(>*GPy56^{by5N+lrPI=bD~@BZN;dz(_ugn+TZ zS#y-IFjtNl>iz-xg&|A0QBC$9YjNC8b80O!k|s!TNsaG}X0v4H+F1M1Nyo~eVc3m{ zTU16Gcf)BNVr6zDA;El#x)nUUKJ+gp%H z(cDE6tr-vCRr$~GMNO@9bj(A))D5a|Yoy`@0+@omkEjctByCG0RnH0$z8yj))h(ff zNw~)}lkVYU1UK(uE)pt_Bp*;N;M1J-f00mUi0SWw(Nf(takMDjMhc>yv{}Y_yXbAl zL|>~nPb%cT+=hq^nT^~!(dH?NJyw$d#huEK;CsJf24$xUBBU5x6joe&FczZ0 z1KO4-&Sp!?s4J?$L6hc27rNsY?FZpo8ztBnREhDFYd83n_issB-$qZBPryDPrEwyg zxRPF(bne(Z94=GoJYmIYE?N$RA2CXilZu%|Z$%@Xt)Tj~BAqF{F<~kWk|kHr)L)lS z{LY5EL;3w8;D(zF9EKiDdK6BnlB(e}05D%^xSvksB3qwQeiIg^wb|xem5jX!1u+Dq z+=QOER2oRGHr&u%FgT;PgACe!N>VYH+U#@nOx35^7n|gRP$vW*&r?~wbU5tQis{0o z6?jtf%r8=+$aC@gm|cT}^lhwbS)DpnoDk-2M8;EObWR-?fm;VO$qRZWU!=hi;EMQ<6P^39?DO828Ie z@_EJ0T01J_pz>-C1SHPhh6>&F9v*n))z1i^gmrAP z^EjcHt8NF`cH^9kwFQyMbJ1tlbLJ~i84WSjfVNEMCa_qhM|Iy?MK}a_^e?LZruuur z`+Lk6D;L=;+zcRsJFE56L)TI#Kilma@S<-(=+3VlDg?{y!hZFG8eYTB{BuKQnHyjD z5RguXQ0vX+3&rFb4fxiwEITxmloz7?p{0od$Go>SbE*TKS}>ONciArsmLO)xQSozN zd7er(IFxz6K6SrdZ{rBSub2C@%yKmB=c!f3ooQ_?Po=@wnznvE>8q9mi$%9dv&H7^ zmq%Kw`7}-iO+EAOCjaSyyQX+C>vVHv|9w?<&%~YpE070*P9|yY`lDkDS7}LnJIRGA zSWSj+_00}Hlik}V!PIQ}Q!Q(w8VQD5*+Hy9gFj2#Jc((3*D&5+Gy)Cj6^BEq+Uv>g>? z+qjSQm=9CXoTu`q_gB%$-eb1-<$=jcU?$1TQ54wQ#;Ak+u`Nc@&A4T6;5ua;ysQ1>5_6My`e*%8i~K_0H9TSu z-aWuMVs}{z{0`?~H=(G{1>!GEZ5#ArD~V(2^mxE>$oL01-}d08?!AKujdII#U2gK| zStUxMU$W%Kg|6}TzQ8nhBVXzzRG$?T&E3XVBL94?!U$48TgyXyxi+lDS`cDCI_FOw znhWL4$63)zwB_3xO_VvVdSO^~)^$_8rqsTP)K2Dp;)rH=Dsqd>8`Ba#Q24zhk{ld5 z9se_mV)G18CMcIDeE4EZ8x<7EbV;wu6;AlD$#rdzIW|zoMziEdeLx@HWA;$otfb&Q zkyB1_`G_QWe~>izG$hpK?!_=z%Q5ARlAn|^WirQdbH^$Gxxe^G8CHQCyu2wee%v6g&E!qgC-)h~(8S#7V%{+&q%L+iZ|LxmDf|O0>eMM;!5O zZxI93j*Osq+sRvA?_-j-`ek@(Oh!?ksq|@`8C+zY<^>)Z)#?-#UNaE*DJP+_bysAk zODPO-zscgct{HOs9L1q|5p+yzbD63^fjk2=%ZSq$R4%N^7hX4l+;U=FWLvE$+N4=RT{IYsB`)Q`uZBR?jl3U%#Uej zY($x`xiYKsA`wZyl7e>|PwRz~2>xKr%`lPZ>xOJ}P&op-e@JSO(getyEv^W3zuZr})9( z+}N8tB7c)BG)e1fg5!HL(1%e=#g@5fn0fQ{km_9BGNU4y_G&iwU6MvyjSLY8-WV#! zwmPwXCK28p*q!orZ;6U+C@8^Vms<_Vq^|W-K#gNs8s{$|c+w~B%k7wi2!Ob>E%^8i z6rZOE&fHg-;#S(WMRdAWKH&R$cDwI>mY6GhqPPMl-JDo`QiS-|#?}VtO^rkJ?Z|Uq zPZ238C!@tEV=3R~=Y;a2-?Rd5Y(0;)VoS64&=z})aZ_zB-+yU8qAF0C@TOY2{f3_? zTX2B}6K{J^m`_H-$XZ9_?|_fwv7V3NYj9$}TnQ7;NXIt0?;A%xp#P9@cdu|#7Xhc(nRvHY?IO|*Ew_#O;y%Vls`-i1v?p!Ra)I+vBEq1AJp#~nv`Z8t_!%f; zFPR9Xs&zDudaBTIJJnjkB?SqpnCKU^dv`vVQykm6L+RbEORhX9zUe&8m;#u0N574O zj6a-ThJz-zNYVTYHyxtBOeI8cUY~nyKGS#)_rn_FqnJ%EaYtp;Dm9nbTU>Bd{Oqdh zyp2VB(>_|@UlFWkKme+8-dGrE>}qLCd5B$YEDauG7597RwtWR1WEOPRuS8YB|dtI|4FGc=TuRTv40iw^j5Fs?%(D4h4 z-XEj)mlJQ-130agWL3q!)K{>F1+0a%m48@TuB&@lXsDL{#844^=6B?6T=3kbB`I?s zm$4%-5}YDTy=A0mz!}ePa%Aahfi%0h*x8pOPG9BLdU zm+r(Y*p-_Iwkq22=<$ti!~M$+AA}i*)=TK2)BU35_$_vdVYsADeH;PkB78_(9Caj$ z1?}By0Z=IMWB}d`)te)J*VrN7O}Zv?p@*?AaSM+Q=X6mjg!p321hy94-AP7-R0Wss zi5HYz3fhEH8r>YP5}|ZCd2LK$%#ImJ5&RmCIdAp#%67KBFP=?XPwxt!fAr1p_yNlX z?qX_6y@!yzW*h678!g*1wVSJkvZQl?LMkVFAi!kdzKUTsmi*}MurMCuVqB5zg;ZMHEleR#p#a!?M9X85-!^sgz)d`rAm zlkO%3t1bJI>}m9gyRZ0bG-_Rjo8`i{1i5sp6?DU|UaLR*GJajk1Wkz+^#3GEq&|EO z1sGydC|lrdBK-6@5gNSVG;r_9HA1Ih}VqvUx zDH<7hmX3R=L5HJ{y-17~7iEC;K$GKpL!hDKzQbrDmsRH8#4zf*^J9Wa;K$usD?|DO zUw6QhNnFsihY-cTY}w*@`Dl4N;?M-|-6p)+zsI>pFPG3pcdDR2E`o_!oq(sO82KIf zt@rn$LDan9<2CYakbSPSWMk7SHEVl@sSX)hg zvD->7yy|@a$-~@jbRX`}s=?>Gz~|!Y6k1o7JWe{!&MTG%lSFXVz94Z?t94t_jHDXW zizn6ptvkZO4TgzUQWlerm4UqML+vH_-^Y8c4~EO^BCF~mlq~Rj45-CTC{x-O6bio< z2%(-~biwF|U$SsD79TC5_O=3Q@))F1H+C8fm zs#+gN7arq7|8_OJ0J4TB6iMY3^dn|9J&?AKcNy#sxBBeUdqwZ-B*GCubSonSTa}-O ztf=Xi%-ip@ln$ewlU(A*cSaLU7})b3 zX(p$-iULLkSLs!~IRqEx$dpj{25Y}wAvp!UmK<&>JL8XZMO74u;~e0f-7qf+Chc=T&j+`Mh%J#4$qz)^kj^CZP{h{wvt^A7C9Cie~n^t>`Q6 zds|wYNcK@0P9HW>q_Q=ls&a_p`MQ2(^^n?`lJ-6jl?#U_t%xdrr(Z_Zmt-|2@fBcQ z`?_wsO_~}-O_O;VtmjZ+u(0G10LFj9zM*7K&~h1h2f*O$C`az&O5OFPR-$P%mgv?8 zlbdiP$3ibpP~r!$n5<|Cv0JP`=Jix`y_Upn4pMe zxyEU9sB{NLsf_rEbF)xYa4%DzYF^V%4+QFF2&)+#F!=eP85LYHtb5y-r}+8}DOHF7 zN&?(_CAUg`+n`uQa@L?Tz564aOK$grgUb_ihj>Df_lpPH*+a@bef+|wVJ}@eeeD->-(AMF^Z0*U$NFxGK5QrnkRwu@c85;y=I9RnxxA}mu| zmdQ>}iK^KViecM^^p1fOd|YDeyNk1A?)ND=)3zzToWk$#y=g#=)awQUhz+u2Ae};p z%%e1w<$605KT}3&j7mVOX$KStE?nU$o@kN9uW$XDP;aAr#RrbCW6g~Av1B$4y5_&% z5QFQbASJo%=fX0tQqd&IG_`=4UjIab2hKX>7ner&h?|VfIk+pbrjMx#hKQ3I(qSvq zsLcuf)j`@(mzIT3+%y2pS?pG{eL~KuEqd*2sr{ziT8wg1`fBr(fA;rz`Yo>Ci_cf+ zmB9;*WwDFyE$)*Gyd1Hk_ATzmH3$7$+)1$e*WE+335VLAmyVcv$LMF7K$GAO>P6W# z5!I6@@T@#n?SV*sBelDvI`6^j@~A!@Y=vPGK#X!VN=FDk=>&XukQ#O`4Aij;Sl5F# zgBJ-9Bn6Vw7}c)g>KKzJ{^cV`4ouOo_q1dNqrKTBDDnr*SQ1~Y=2)#7JFt}#U4g&s zK6k&{Z9M=SRx>BZV64Vd!_9;^;UZ^@DgKhAoOcrPjg&mud&v7@6(OTnd?I7fB>FR0k%LY4*p`bN?|lHUrlR zSRJ9eKu$1R>TkZd)~j4(a};~Vc|1Q!ABS*Jh1Y<;m51L-Y>Fe})Rc$Y{D|P@>zEz7 zdB(0=#n0Dotir9zh1^_vG97#JdmdeA<|-K10)O!sM`u-z#>)F1@(kR)%;S!U>&$w< zA&()Uz-^XmRmIK);y{t*QqS{xUfieS(i^b_+%?3FW;bH}Hzv>}>;MAq6j2>~34Zl_ z$FtwkPwg)veKCmM6+1S*W%$;;4J%dfQ3HDdx0cbax)%F*dmiTlW79DKgQAPBRcGd6 ztlX(wsR|Se0Wr@eK^ge^VQa)&S5FShy2LGGK#+d+UT}c#%)=w;vFXiEU`!;0VeGxP24C{#{S&3vda`hNdx&}?IR!S$Py zn{;EvfTW_R7^Kz?#QMjo{FX_!uzfS8xuLY@N@MtAx$3kHr>e_=mPu1Fl)hunIA=9` zhwOX2+fgAv$YV4XJFVElI|yEz*l@j#{$4|EHZ+p2IFI)*9-wHA!StXF=DiJ2`YnyT z%ZSXvfxzz?wsR9MUGs;VGJDA65r60Vo0!iGkLv-a&wTR?9Wq}g5A-6vQXJDqb66_I zL4ZdmjN)PG{S4!sZqX=u# zUiyg9uC+3m2be3JNfHtXk0YXiwhKA03wdljvUB1aVPp0gj#am*D z{HJgmy~#Pg$U!Ir|!=gG}wJ@ABN9(OK&rqFtR&1siw+ z)N3}1UGKz7zGv?fMBZgE_stycHQ?<1$|fr5)XR&_#(4-SeKL077;JpCP*Lu4g|}H& zQkz@pTQg)wjAf*W%o;CNv-bh^wWqXe?r*Zm&u*;|kRQ+j3k<#(SNKocDh7!D?u50v z#&(73;YYb7tk37JACT8^U=6DVF(QppIac{+_u(qjB>4-lBUb zv+PH>41@Xhjg7~mB3YI0+0;30Hy3T=DfRCW)a5BfbbRB53iid+3tk@^)z^RSg_S)E z0$7HN6MWsSVBQF-yq+9z&)FAWR$US7j(ceqAJnJ#$?4YJp=vMm_5h?j6rjEo)Jr0GH3gwbxmU-22lt0z6oeLYz~<=tQKsI?d= z_S~-=Fwzfg>b(?DUw_m4d{?5!nzqNd$^676DbD!gVo7Z0X0)i#B5eWXiIxmHr zFThFb)LoJ22%LaiOa5NqOO4LNXfQ~@7^GYYGfgyqQOgC^)NDxjTq9J<1}ac5Pcpq) z)Kk7`ym(|1U&vcf|7f+2urrEJZi!_JQ=6U^Fk=rJy%lzz6q;bI=XVpf`r0DSX3R}m zJ6cJdgu`ftd(*HfY2nf?qKK0xhWz{qK^XrQ6%|jT zs7A&0Yu{Ma`7+_Vj!}d2Mzrgc4NpMp6lWF}SI~N`b2$-!^Yr&|&dD69CF^`BKC!y1 z($?K*xkpNV_T{{Yu6*5fvj~pX36cTY#jIF_RMCfXsi!l9{(4BoE<)IoT6P6JQe7c` zEE1G3kjZ;MIaZ@I%wx*r|BQEoP9!v}HazSYe{$3Ry(yroB{IVEgI9}BK09fI@GM`I zzUpqIpD6@5W`8|yCNbb6u~HY_Y;6QD-#t!y+FP$?Af<}E2dEum((9ftaPDg$NOB8G zDXF|+3O2!JnFr(AncLtbJxkhT3oQeKpM%hfaNFNEhMxFe`2>NxsjIu$g)!!R0c~F- zl-z7!FpT4~|Hu~{e;8POvIlkh0`fyPC2js5x$Op6aNE=(BBV1J%hU7V)<6+uRvK zLa1iaOh%H-(2ZGd+eIU;MI&D%U(PzEVe`k5Sl_c20WI6COS-DVw7&AGJ|1;^8K7q) z@LY)qV2LIkc4xx-nbC~pPs?`P^VjdkLm}wwk0ZR!zMM=hW)gI!G%x1E?O&~%Ch1L3 zajL{iWfyKr3M^eDGjpM~&BM(X@6XgXCNO!dtcR~Yl)NY>_i>61ymUtypqHp94&bJW^8o4-K=yS!7_R&3MlkvlTo2XaKJH!7=)!4@H!OC3 zL>LG`O6Di4WaLt_yd&T&JVFKsVItes1 znRp}dyNSQUxt>}I%^&A)ela%1eo`KNg{KyUB-Ci|hAvPYwpZQQfx0xsiJLYifuDuc zAuraz^&3?VeH`&A?`Ut5Z9jtLiDL#yAtS8MxOYDp5_J}tYZ2k`v)G%QZgwLEiHC8i zr5dkaJ$5kwkt?wM|FNudhGQ&!Ofy9GfJ5M%#hSOD}VBrX!fgJ z-N0(rFB$-U2mISJqJR_0Q29$y{#$rI9ypwJ-8sgsWcd5$^}D(&rwk_w^oIhzD$~km zSgc&RN{h53X$Svp&&84N5zR$(j>%zYGt2WW;kq7sE1@oI-&es0C-|DeP zDQwB4@SRzOW@v9{eU(S>Ir()Om2LBYcS4R?GYf#XG(Y+8Aqd|+{wp!MI`~(hQ=#P0 z2U{(pyn`TxJ}cpozV8rC)nm2TTr?FeC~cYG9U^V=^-Q7jT6la(Ddk2>j{=Yc8!~9* z`e|kLNkIhKkf9XywQWa5sW9?X!S86g;I>bRY`1w3N>;)$pygDZJ)-1Z(#C5DpeM@+ z9uvt<6Is!WP}|6lnBL`PNjR(hh8D?16f>N8YJ=FHgR056P>xm|^CYW?E!QXHUwGmW z?lKGW7^2c_n%klrH2rQz)2VLfnc+_;>4E~n6`|t4rHwHSVDTbZG~u6)?LbC2klorZb-}}$bFGAyey|TS?RCz6a6)=6B&lK5?eQur`sxx8>B5K z+0_gTpj^x|kDANxqmAIY0oOcwsOdM@o)#qg(n6~ped%-T>O*kGcIt~nfI~Q=)w^2` zH{f0VUCNT9^JW4pU7KTRTI$!NG2YyKonJv2WY>~Rp{Y-}I>b!Kn1M2+e$#o!{pHtt zbfw+XNoM0((=^*YuH(kbkWbZgc6rC{nWBH%puq+~CB{J|`awehCwo)ws`|9gcRTU< z`)86(THNbgF(3R2AF-6E0V%Xm6qGn%#WT}oJyIhT;~dyKw0tH46Mc!?;ys?)Xv)2F zI5(&m1J!;kyCFto-q?YI@IzxWqR2Jy*BY=n+}H*AhJe&`K|)56`YxjLIAm^3$UDn- zpeM45g1<#Spbm@(>;oT8sTIBPmPmxI++~<}*RdP*}sU0`cbL z8j#U8@%vZw>G?>L7g%6n?+pyAoZWw-O!8G=t;PM_T1)v>NtmY)?Ot#Bz-y-7WeM=m zK35aTNGJETa==_{ETmDcyDtn!rn+R~t56+^|CQtzwno=@VLJrc6}#B*;Un=S3c-h8 zCGGeojDK_uU{aaHcHj&H^;RFJ?UF_|jvwpx8bs#DO6xwX)-voBkE0 zo;NEN(yV*s6?cK$S^8@|XSeWUz0JQ*uZxIXix6s+1eQ~TKt8(5;cD>vPh)BsWwJ}; zN9CImef)(`d5Pr$WbRY7K1Pf_)m>0S-zeMVjZN7YXat~}PR$XDj;-YB zk*hN4r?2rEood3tf9|Vx$&G&r-ir4Rojq+{pbN^VmsI5VePROqtZnw{{OJcd3kBz$Nn7Qw!@izVoWe4Q+h5$wDa0cm zcHN4yQIRJ|U_E%*?&s44G+wv++5l9$^?0eW4u2mI@l>7vpivnYE3Q%IRPJT0WT;__ zm3TQ{dx;p_?!UkN@STpbemC8=#q_k_N}%b1x4H|n)q1$>O~rbixCg~|S0wJ02*MuA zF;PJu3(hGc9fD|I)MoG@f~hcEiGFk;DsQWwWU#QLeJzfH$WWl|vmRUeQ<9>AsU?%E z!x57o$t$Jay*lws+2r3EEyfu+2aD+;_IJy0X;i~9{LN!!ks~?Cl18PuFE0R+IP>C0 zz2&>mLaw`x^dch;tS|VVp{Obm7L7Y1_9|b+JS%xD&6zW@YIIPZ?>`XbR)L~Ls^%EWdVbF z8mH6Uuq?C&5emdI1$^WFEmLBY-wwB&k8%I~Rj>2=t5w|IHy83IS#Ni}HX;#+J)nr) zdD&`3k-@j$Ys^w0YZwH15EPaXzVxD-wJBZ7n{FpolS*smHW9HGbn8Nv))3|VYE)4I#O>`w*?PQGy2=pUSTx| zqnN9@?>WwKv%2}Zrplx9hSC+wI?ZgPcPcCNoHuG29EL;X#}3~juldd&HQYjabnudm zr>5h)ugj2*RY3e*`pidw0jko;+4BS#>s>w>wSDV=srHMtJRSGy)asEG#XaU-WsfO{ zJXvjCv6lVz%8@c0Ui>Ni#Y7fvENdOIY8dTaGXDaH%55KddOrN(%vZoWlrXTg_-6Ym z%?`zkBBvk68ShY2IIIv*7CaIRGYNsi1h=)$I zSIYY9-MWU?EIPiP@Ifs7yX{${Uf+A4%gCCaBc;PJ>5t_*W4oM^NF$)ZTM*OOm_5VH zjHE5yh0|UFuqud6v+Xa@+$y?SbabQWDES@xkVe2WM`wo&33Kns&Z|?FtR{4)X(rS6 z*jSy`rGhcHsa0bY0~BN2iofhzo5W<3Gu(PiveuKoRk0wJfgEO=-hY*j+;G|ag=hVl ztg`e?67w7lQUkstZ2Q9erYSs@9n1&L*E`Ffft z-eL1GcARE<$4zTe)7$j6uCzJqc3G|4&dVmgA8kSwj(X!di55{T)hbyNxxeU4UO1<} zYRKWq24)>cyY4JfTY#MS*vm9_;GWMQ%vomZ;kGgPbq;#?#E+agt~R0Kk)wWz_Q6{SpQiH@j(^i z_=HBI^9`@^Mm_N`I%=~!Pj`;r?J7k3MF?OSbXEnk`*qvJwWM9lN^6Q^h&fsaaxjw2#lO+ z_-T}Z8=kUGRo`gVlc3$CCJN$Yrxj87G!RRyT0GZo8aCO74{(Nsp|<;+jvdJf>lIBJ z{qje4?Y`%?@|oRszTn*L`#4__IJ!m4`}QLHd-LTWT9lYS0!^Q$YN3~18{V>mm{|&R zuGzP!F`o!LHX1B?eHr>~PsoiG;N8$xYQ>!Zq*Sf!v**%@Q-ksbA~B^I?oP8Zr7x`#-5NJ z4eQV?$8b}Gs4iX-_UUFU>jVxECB;MFwbv$j)e+yY+@lt7;o2WLY|It@xUZB?>oL@nc z4piMH+$TqyR+AFl1PE85PiB5e-54j*r?CUK&Af;fS&bMJ@Eyd}L1bRk`K$7K9);hyoU zo8(^SQNp9}rvT!U57DP9_UplCAw=#Vr_Tcom{uy`P#m8nj<2%YzdyRHrIz5Lm4NvC zm`G5v+xN-sL8~U9;`ulKBnt3!}mZ^mF-*|*fIv-L>17@2_a7`sxq(WR$3H#!B zWxIXst2KnrU5)chalDz`K9Ajgl{mgx96u-Tqg*eb$lX z)6wOIk!9xm9#Pc{VE3aq{sQ>RYAPS{p$4p~9|1zu{Fs&khJ!aZ@qN4dbGl8w=kY6Q z_HdzZ=KBL3_w@&fCua9c+v7vk38y~?Ja(k&N~*v}3;ceA{f_odu`;zi^9)?r+#8sP z&^yfjtnGBtaiq=?XXxFr_VJBkpB5c5OK4*() zDG;`k+5CKE%VATrVFRlL7C$X+AY!M~YR>n1@YK)EVY_W9%m7C1$QiiR?7VW4QZdhZ z(E6jMyrglny51*g)_sVA9>AWXU7!m)Vng-2hu{JH>}>LFXFQskb!eylyg+TxAbwjc zb{*w}GkSovz|gko=4%q?GO=kTr@fU=Rr}ypA;4{%jQuL7l5UbU!e|QuTRB-P5U~ra zY)pX;fuU{Zbf97Y5J5nF&v%Kzm2qN6yN}V+C}-$?Cg?c_ix`0)8B|Fp21fJ|TaVQ3 zUE2HQubiz8LW&@jr(FeaCeGF;wztoBjxd!5RkIl`$If;qyXAf6UQHhg*9TuIi_DNliBXXw_@GnxF1!AFr71>dT^LI<%5DOBQsa*E*?df;ms8*Pb}vo zow{DE@x@7ES|%H3YBbM&PN2_br@d_Cc0SXTs5dG=q6>bua)8A)9>(dfUp2)J=%^v9 zAq2fqAP>h1Nm!~x{vuXajWgKQmHHl#MHwo5YGEqXQlzq7jeJ{Nn&`2h2~f!d^zCeFiPjo3MZkuk?s%a-BL+ z5iyxsHS}7Iw8d1ykC@OXJs*o+L`j-Nm4n;s9Qi0B>>?@U3h+siSbE5grZwZ#n5jFk zZ2$yEBF_EM-J<5NCF+OD*0qMT7VYG_b_r&qr8P+sAisGV+w&^J9Nu4yIcI;wfGR0q z)%E!796mGAbfl~(HCmd+llD>{^E6#th<~i=%wgIKuz4NixFqsx+jZgDJ0l#B z4FhEDJHtWhiwe`dXF74!i?cu+9A@dTn`zGkI#i0B(r(H9Lb{EN86Hk;-7qU=8S?m!GT|{#46p#uIlK{OhX=6euajd2knvdpOTE zPbL>tIlkBny$C_?T8tLh-*fv^nORnfSZ|!80W$VeL9?z6HS`2b!HLq(bIfq7rvV%U z(2~`Wyyv(KYMOiGdExD3*?^2QiRd#Z!DeEwk~wzQxb(CGX^!ixqdg+Pru?{_P}QGz zm|>?Q)OpW={WRc82KNqLMy7(e1}Lz~Ja|Pt=&P6`U+pSY|8Wo3UBDV3W4UNkwBLOA#Zh%M78B+7H?Z-;2Igwy9MmbyH zd_1evk%D4v1saQQ%q=p z5()sMYJ7*Ixt-dM17Zd_$6U`QvH=s1CGog%-0}oF2tjO_E15rRr~||Faww$6m67=T zFuv6?e&Y}nz1>)V$_{kvrv^BsZlP5$L+sh~PK{(epgX0Imk&BNhGwWX;N$;n+e*r> zAaSRWE_GHxs%d^sef%H+|JH#?W~9jrV8`uTPIqDGllQ{sW=_%Y@7gbsFF-$zJM2Wj=G=D?V(4@^O!@h=!82pDB5EH6Lg3pVk_&0K(cwVlE_HD_ zWi!5x2FgK>?((wk0m z(TzzG0of+o{C8GrtZ7 z8mk{}(FSZu9i0u`jMMj60fvwb7SFsDtb|eW2^NPskfkI861lVW)w4z7(`Z_!AXmWp$X08V}{^uWJkxqUUqrVD#G~ z$rzYMj?>jA*tOWk?WBSvANe}-oKT|M!AO1+4-z;UBZS@`KhwzxZT9J$^V;Ddo)6}g z5FBS*=>$&d&Hmxt#b2v~?iM7s*^vyI$iZkF5$ z1H^{<72**{e0Gg;YC{2f9Bm4HduDH}NP1qT< znn%h9Fv>9tFx#W7Bd!%%;_;Nlf=Hblvomj?dJY&TCm!S)0L`$A8?ewT)1h`}yX>H_ z0bAjqY`g%-{q~3KOqm4xfFz(3fLoko^Jc`H7W6G{4bczaKI}zuJ4LP8%wR;L<`3`` zto{ngcSiIzEu0?M`};?H&t25tq5E6=~;4(Peq3);qXe_Aq?0;blI9gcaMe~ zns+ul9zC0uT@yC->`JrBr|Bc^@3p;Q-`Pg_I<(CaSptsZG6oO3{kVk{5$`J}PB;{h zb|<#Z!l_;Z4O{JyZOBScNxwO+8@~pTBt`_3xQADQp&P7QK;8R+SWWv+)l%wlZY} z(ERaOVI93@^Tm4A!=Ietl|@Dq^In8g=Iue-YCV(KkCiGS@A@6Qr)yxREtu%(0B)xc zY>LVmwkMu-uaTfu2d=1~uq)*%y$yUbkqI2B1 z_=!PZ?DqY}w?n(Tx!6l)JB0B$jnNXBwZ%v?ycXi@C|q^)TzYSEu|njwY|Xjtnl)8s z1$JJP69&xs!O4gL)_6v7&ZF(7;Y=Fnp*Ay%hxZ`o(4Rd zcCvDr)z%^v8wzPh!{0NeQtpJ7vfD?a$jj-Su^ z0&M~li=j^NhpsGt{OQv-lSdSvY(S8zuEc{*AAZ(Ei607coRcEWPA4;Ea~sqFh}H6k z%|P$b$pq~VGEHzx|13Q8^r+vute3J z3J<>+W<9DBEStv7RX)7%DvJ8OXOW!~8B_1$u9#}CNY2^G=`V$IBdthhr0r9*4E5}4 z-F-Dj)5BFk19-4hXx(KmdHB4v@dI}V7<+eayzwjbkjIn*r+T${hJ^;>wO$s{Cdixj z&u8z%h~E}FoFRtwnK$0@BD_(zd&#al4z=qVh(;CndRiA3vc`#>I{+f5&{+f9YT5f& zJ6RH&0&(gix!DmfM27kf$kW$COsngDHG3~gWj@Z^rOlyWs;o95t{T$($ zvp$aJ4r>JP$+g~0MPm;SFGm~Hk4zW7O2GAYG;6hO0Kc{%eGz4Vw*&b!NFuAW*Vcx zejl+`{vH?1*wHMjP~Kwc)x~fxn+t zx#ASh3%fRCskQH6V_I2*V-NFkgB9#n9U<;(0I0yaxA_Ij!Qt;U0-*3~)A#9%qRLNw zA3(#<#YG2~=%R-L0fK^4)jgB@!yyu}IcsO7X%GO?yxE1Lulym|``Vjdx!nY(s%Gcuk5hi=y!~;u|?vuloEM_yQmkPbTw!I4KFCjMj z+04ZdQ}iR2)1gxy_*{+fR{Bz?m`p5dVpGa*zczXkO@+ga6nT@=Ngr!Bqb@I~CoQ_p z5OC5ya(LBHRnzOwekSAwuQQ3H>~uBync$OG16%F==ychJmcPSkcdK{H-O0(+Ccw;K z)1;5R*`}=q#`7+@yd(j48dC&@10Ivp1btp8pSux`7&DtuiP7((zHC#%Zzt;Flu~-E ziDQr6&GZ)M5c1rR84c#&tZs1QRyQsm%=As@S^-j{+sBRa?!qgZlZ4dm`96}z#=vregmNa;ls!+>V~h~06%R^ zI_6#+YbS57xq(uJ$YZM74d}s|5JAjZI7p4)w0ILk-hOlw_ zcWMFCPIgi_T{E+*#KK@8{KhWXt!*Z3O=d)Kvq#aZ>}Dwof;{K+cTOIRf0jCQlOm=y z@1#uLZ`EFIU)d=E!Q-Vn-BW+F(>C$N`&RVir5MZ+JJdKmioUf3rz^cnUOlF@R?8Wc z-<-Vk^cH9m=u?q{+yPPUjer*d9k6xWSC?lmqs7NlyTg4 zFn*JHr>iI{!_mCvVl$dfg;=;7t6bXhk~ArTPJy{(`jEaigcId9dwmVcV40ra1W4~j zV7cR#p5a>W#+?2kXs*6fKn4!J!ZZ}|M6Uv!7|bqwkLteSiJP)S#xRjNCwf&#b9U`-!e zERy_~HAd|2FE4k;&g5gQ80ZcD>~cV6FxV~j-l8wd#jYz!OYX@P)8lNE_M|?%*A6zP z-AySlS~G~H&>KpXZ89*b-rsL;eyFb$lPON4oa~*6MH)T7y<}xgyo88-`LPS^yn+(( zI=G9xvR`HDLvsxIJ<3MBynW-~rsZDGw>Gwtw(2$qW#`SVqzy;sd$Zu%VX`L3=V%nP1!1Ty%q82JO9*0XR0Q$v-|h zE@YSpx_SpPZgTzo8iU!B@+ zy3C@^wsI7&DKrLvKBf4Q=EmmW=-Rt(be%8tYw|0^91FZeD4$Gbj{i2JO|Inl5r|iYYLw-AUvBCC$=( z?$lFF{tmL2LS!2e<;qm@U#E3?m+n8D?49qX$l05_|I263Z$PdSVV4#AM}fSnUTUd1 z#KV#7vuuiVj7-1s6u+DMSLEW94~}$J>kD$x$OGRfvZN3d#|*uBs05UQztDaawW?GG zbyg^^gM9O@LOBiY;O;{dOka3q#e6s+kz*Nxd;n)*r`RXWO4hqn!76x@Ir)<8iulb5 zZDN(i8r*9SQXl6z{rp=+irY-q^%(N$O7c0B#@bQT%x$dan@!+G>JQ4Hm)CeRMCht% z4wv?Qv#y_TOlMh*)&s-7hknw!Yo2!xT2i@&tZ>Ygep^(Yd$R`j#^@J`nrk%u60N9CG+A^rRiwU$tW7=omYLo?Jx(?g|H6;|`L_`7-t5K%?%#^Y{=CKnp5Lv$ zA21|q*E??ukz2i^hfQSjuXOB(Qf;;RM!H>fdKjy`OeyTjq5c)vH`AzjG2B{pC)Ts^ z!nuhANN;4BAQu^XCE9bOm8e|#?lH13WD9j|#E8Xm=2!E#Fetc_yMnY6`}7{*_x|8Z z(OcblM!L;EJ}BAe8&((aRxwL({7Ff5vw5z$V2DAt_cvX3DM?&_RKnt`e1D&BpSb9pvd zO&^8Ud4N8r@;dK7Rv^c6Si~Jr4xvBC54K)3OU%?Jk$Ff;`H{jgQIT?k@KKqe#Oi^T z%*G$04tFx>VJ&6hos5LID&fmVW||{1UEJl0*G@_!_W>A7*7aTHxr@q{&qp|CYkXDL zxR=gap+@u$*4K82l`z<=k^PtLqPnzxw_<~bHQug0rf+k0j^8C2&k>$}f|wzzBDbd% zCt3V?XT8q?Vs-h~lP_FfTrNE#UHx-mhuWktBEuh^pyz*B<4f6}e61pE zC2;Ov4h(*x_XPVwig6}q1#CAGm`@%}&QhX>bjAz1T<(4pR32C!#7CwMMGQWrR6y9*K zF4F~V1IAVC3mdtUz#XaFP=d&^%XMLRKw#rt6;{1h{(i{_196=g`VrG)&7CJHVcYM% zD!}8BR;g0`QhBfZzZJd|=EM>nOp(ZZxbk!oI0?O0BDSvb28RLyemOCwb7(35>MQhy z|DnAk9Ne)`Ei;?@G-VwZp}=QLsJo=-`WeG~2?%U=RO-3w@!7~VlC;%w|7vSso1nS` zC7a%&ugb|$&|niLYyV)Td_xQG%N@ig_b06Su>H2dV@t(1p`=-}%lkikL`uH1 z$(nBNk5lRAzdIE4c~dp9L@iL0s}0wv^QdLHo86?|n=v7V%ANfqdzH;Oa!NE_we<9v zPBrjG^@jhDB6$|d-aEoR1tnT6FIK$eO4ZiO_|=s%+>|o-d47A zZgs3!V5N(SXo>i6XB!8X*(P0K6083#3vPP`zV zQkfPq82Bcl)4kHj>S9QQYe(GEQQsJP8$1PY$9|sM@~9>EejZxa{UuuH{t3jn*AFV?O%v^-2oR;Uq+`a)PZ>Vi-d&YeCa~My=$bXkgVz! zAR>D2WATTgr$J?9Ejjv@S9(loOz+L=I+T`d%2iIc+k36zJ029)a=*_A1P2E4{DHjt zho1F?G{B;>TN*JOZ}-xlOjgd#zAKF66mX&qOjmUj*B`9EF_ zX(9EXZ=;wE{dq|rz5kP+mL{22oJY+*sUJBzf!09YiqfxTd&*v z8rvDODct^wANSn!%JfgO#CwTqpJ-y0zg_R9PBhaBeV6Czvt;xBjyLSinEhEtY&n2u8%u z`E)*f&0`Z#L0lSQ>>{Suo_c)JFa9N5J@|coF)-Oe^N&BgC}J4S^70d*mMrwj zZ`PWwHG4w=d+G#MYf4dlw3{oC_eMxSo#AS!yXeY|tWFg!BLOklf@dI+xf_=itrK}b z8c}D|e@Q!M`(5VV@FpR_1^*@W{4agzzr>bnymM)iFaNDq48Kq!W~kvSq>-llTQVB{ zrh-O_<}dN+|5S#C=T*>1{8JcJLBm4Y5qGh8LtBlMjDh4I$?3l+4Q^p#TbwSWhMP$) z(Et8<3x85c!$b8~A=QWMy71yk8Ya?r@Zd_CyZ?~>sH9;b57H-vBlJm`;B%EU*Z#qG zE^yLRI8_x5??1r9s*8fJWys)`RF|0G)>Sk&xc*`-BU88hc+pOhUnC?f|J^c4-jDw% zTTn$q_YX(QUmQMM5qI{7dbH?6qqx4edYpzy(g~49~2kx&L1PSw}G(aq+`LF%b`!e-AjQTYps2 z{i4%HNJ!ZJ%h<&gn;_Lc^cr>la^14-!fbllf8g*snw$SvDZ0Q(z2V(;H2in|>LAEn zs+%7!8u5PM-$#*k6kMmChF;|V@I?D9#^wD*uRgozRmT6}i4a`7p62e~0sj9N!a81s z(>Yybf)~{PE07KK7jD(V$Ls$U65<6w{@Q>VPK&(8O#grQ0KeEmmW5OqZrMO1_)pXR z0?5;zUHiKV{6eq$(*FwCvefm$ZZ{H=@ZoS(V0 zE%E)|@9zH@Z`)j&|F7Wpzen-r8`?Vk%OoUn*Z+OgB(Yupo5jl2%g$QZS6Wi|t-FoQ x8xLy{4|ql+4b4BTEdI;6M?BZzT!l2uOxkJ`7hEJHcQ3x0yrZJn|O zVHOIhf6OCP{bTF2lu|4OzrluBr_PCXkB*Kpg@Ri`LgG z@(qA$4 z<^*jo&h=0?ukxr#_v0a9CI@v_@Dz-KqN~_0?fg^sZnxM%|6^gwwM)0} z6sP;vaOi5=(6GYp8+xmBEUNz`DR}VWHB#RVy}SRB55EK%m1f%vbs{Js$RO|%Ug@PC z8sRmLtYasO#Oc_s4vnl17^-K@My``p4Zv6RtWms+(Zwnh*N)Fuy29-WWhoKr;_n+R zU&>tS!V)hMjOKo?LCnP*HV%3!u>RS(m;jk`F=RiScd;rv2d$l}`{2Jp>4*Z(L=+a# zyO}{0RO!ZohM~#Lszu;M45)UrC?V0JtoT=zlgf@g0|)Ws&k3o>E8rYVyO~pP{LDFe z?JCY;@rS&x95_&T-KAYa+os~kaJi7^Y3TH1iH>-Xs7*^{BAE2BwKgu?3-QZ|of=HW zMp^Qz7=XJTyooGngBPz>2en@2v~f+(oSn~Tx(RWAR+yEBxEHfzjo-m6)vcHs5?-8u zPrb|}YaQfx!~9B|`IyPZg`YlkHe81HxH3aXd0r{Qu*t`2?R+E_63@?hQ-qA)B&0GA zw0x-uW_-*FXMC(g%*><@%Z|fMA9IO$;Q{5f3Alx;FXT1rsP%eewke5k@+Beb z^61yYZa>oSiGqwDX-*Hr9$ew7pFJk@{w=zS*Wq_Rs}%uz02}b?pbp*|)S2@Hz=tWk zcPV}po7jd;%vYcXjs#eh?f*f)!gLmN=&r3X(nrX?#lq+K5NHseLmqQa5Ube{)k7kx zuQ27_T;Bc&w-s9<6GX+V22`io3>;s^=h!4y^j$L>zn&oE*cXLzyAQTdHn}5&hbaR_ zk^E)|d&CDFZu9uQ_l@u%#H#K5oUhd-=ZaB*yG(_}({UrTHZU7=5C<935wd;Ch;Q-_ DvG;&I diff --git a/installer/lib/jbigi/jbigi.jar.sig b/installer/lib/jbigi/jbigi.jar.sig index a70946bc86698389bf62b0a083652b17c4f43e73..30942d2fd3d474a812a792fa8347d8e53906d8a2 100644 GIT binary patch literal 65 zcmV-H0KWf-KLZ5-Ln}EQS%=x)v*#Rr5dwq=0GkEK?CJV6DG!U8KC)+pxpqU Xa^=atcQ^z$ZOr|;idga$q(ZyeWNIDD literal 172 zcmZvWK?{N~7>4ir72d-v6Um^%xAiqloVuytF<6Eu8XJ-H>nqQ_$LBdbuj_tCk;lTx zdG4r~3n(jzKkSnFW^6Z&hsEvJTSB@5Ja|=5D2+@$W)+!6uQHCs#cP4xjcr77e(nNl v^VRGRpvENfGGM8NQC>4; diff --git a/installer/lib/wrapper/macosx/i2psvc b/installer/lib/wrapper/macosx/i2psvc index 51be9c749fca9b41984519860c11022f2e855c52..79b975516d5482b047f9c7f5c9eede4877a33cb5 100644 GIT binary patch delta 25189 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 KKi$_b<^LC&AsR6N delta 24404 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 diff --git a/installer/lib/wrapper/macosx/libwrapper.jnilib b/installer/lib/wrapper/macosx/libwrapper.jnilib index 09da61d86dcf3428e25bc285135bee2d5d4bd4ee..3e09fa4907c8314ec50d9ee9e3325a1e173e3458 100644 GIT binary patch delta 74 zcmbQ@H^ool-`ij37#J9YfEWZgfS8SefjMQP#0@46XD*Td4DO7~lYcOEZ*CE2W!%ic ZD#OZSE6>2t(7~o-k-)&e*?{Yb3;@Tp5@`Sc delta 92 zcmbQ@H^ool-`ij37#J9YfEWZgfS8?ufkkAa#0@46hpq1_7~B~dC;wpT7GwoVZ2)3M nAl6`DVCC4{$Xvp>nS)h^mB%81f!|i1fuW&;O=q(K*Ap24-Ody5 diff --git a/installer/lib/wrapper/macosx/readme.txt b/installer/lib/wrapper/macosx/readme.txt new file mode 100644 index 0000000000..722642d4b1 --- /dev/null +++ b/installer/lib/wrapper/macosx/readme.txt @@ -0,0 +1,6 @@ +The wrapper in here is built with an osx patch, backported from +the 3.1.2 per + http://sourceforge.net/tracker/index.php?func=detail& + aid=1262323& + group_id=39428& + atid=425187 diff --git a/installer/lib/wrapper/macosx/wrapper.c.diff b/installer/lib/wrapper/macosx/wrapper.c.diff new file mode 100644 index 0000000000..e6abc048df --- /dev/null +++ b/installer/lib/wrapper/macosx/wrapper.c.diff @@ -0,0 +1,78 @@ +--- wrapper_3.1.1_src/src/c/wrapper.c Fri Jul 16 10:29:10 2004 ++++ wrapper_3.1.1_src_modified/src/c/wrapper.c Fri Sep 16 14:55:23 2005 +@@ -312,7 +312,13 @@ + #include + #include + #include ++ ++#ifdef MACOSX ++#include ++#else + #include ++#endif ++ + #include + #include "wrapperinfo.h" + #include "wrapper.h" +@@ -760,16 +766,28 @@ + int len; + int pos; + int err; ++ ++ #ifdef MACOSX ++ struct timeval timeBuffer; ++ #else + struct timeb timeBuffer; ++ #endif ++ + long startTime; + int startTimeMillis; + long now; + int nowMillis; + long durr; + ++#ifdef MACOSX ++ gettimeofday(&timeBuffer, NULL); ++ startTime = now = timeBuffer.tv_sec; ++ startTimeMillis = nowMillis = timeBuffer.tv_usec / 1000; ++#else + ftime( &timeBuffer ); + startTime = now = timeBuffer.time; + startTimeMillis = nowMillis = timeBuffer.millitm; ++#endif + + /* + log_printf(WRAPPER_SOURCE_WRAPPER, LEVEL_DEBUG, "now=%ld, nowMillis=%d", now, nowMillis); +@@ -900,9 +918,15 @@ + } + + /* Get the time again */ ++#ifdef MACOSX ++ gettimeofday(&timeBuffer, NULL); ++ now = timeBuffer.tv_sec; ++ nowMillis = timeBuffer.tv_usec / 1000; ++#else + ftime( &timeBuffer ); + now = timeBuffer.time; + nowMillis = timeBuffer.millitm; ++#endif + } + /* + log_printf(WRAPPER_SOURCE_WRAPPER, LEVEL_DEBUG, "done durr=%ld", durr); +@@ -2250,10 +2274,15 @@ + * Calculates a tick count using the system time. + */ + DWORD wrapperGetSystemTicks() { ++#ifdef MACOSX ++ struct timeval timeBuffer; ++ gettimeofday(&timeBuffer, NULL); ++ return (timeBuffer.tv_sec * 1000 + timeBuffer.tv_usec/1000) / WRAPPER_TICK_MS; ++#else + struct timeb timeBuffer; +- + ftime( &timeBuffer ); + return (timeBuffer.time * 1000 + timeBuffer.millitm) / WRAPPER_TICK_MS; ++#endif + } + + /** diff --git a/installer/lib/wrapper/macosx/wrapper_unix.c.diff b/installer/lib/wrapper/macosx/wrapper_unix.c.diff new file mode 100644 index 0000000000..60053ed5c7 --- /dev/null +++ b/installer/lib/wrapper/macosx/wrapper_unix.c.diff @@ -0,0 +1,60 @@ +--- wrapper_3.1.1_src/src/c/wrapper_unix.c Fri Jul 16 10:29:10 2004 ++++ wrapper_3.1.1_src_modified/src/c/wrapper_unix.c Fri Sep 16 14:45:48 2005 +@@ -309,7 +309,13 @@ + #include + #include + #include ++ ++#ifdef MACOSX ++#include ++#else + #include ++#endif ++ + #include + #include + #include +@@ -1056,7 +1062,11 @@ + ssize_t bytesRead; + char readBuf [1025]; + int readBufPos, childOutputBufferPos; ++#ifdef MACOSX ++ struct timeval timeBuffer; ++#else + struct timeb timeBuffer; ++#endif + long startTime; + int startTimeMillis; + long now; +@@ -1064,9 +1074,15 @@ + long durr; + + if (jvmOut != -1) { ++#ifdef MACOSX ++ gettimeofday(&timeBuffer, NULL); ++ startTime = now = timeBuffer.tv_sec; ++ startTimeMillis = nowMillis = timeBuffer.tv_usec / 1000; ++#else + ftime( &timeBuffer ); + startTime = now = timeBuffer.time; + startTimeMillis = nowMillis = timeBuffer.millitm; ++#endif + + /* + log_printf(WRAPPER_SOURCE_WRAPPER, LEVEL_DEBUG, "now=%ld, nowMillis=%d", now, nowMillis); +@@ -1159,9 +1175,15 @@ + } + + /* Get the time again */ ++#ifdef MACOSX ++ gettimeofday(&timeBuffer, NULL); ++ now = timeBuffer.tv_sec; ++ nowMillis = timeBuffer.tv_usec / 1000; ++#else + ftime( &timeBuffer ); + now = timeBuffer.time; + nowMillis = timeBuffer.millitm; ++#endif + } + } + diff --git a/installer/resources/postinstall.sh b/installer/resources/postinstall.sh index 606e75c970..998e493487 100644 --- a/installer/resources/postinstall.sh +++ b/installer/resources/postinstall.sh @@ -19,7 +19,7 @@ fi chmod 744 ./i2prouter # chmod 744 ./install_i2p_service_unix chmod 744 ./osid -chmod 744 ./startRouter.sh +chmod 744 ./runplain.sh # chmod 744 ./uninstall_i2p_service_unix ERROR_MSG="Cannot determine operating system type. From the subdirectory in lib/wrapper matching your operating system, please move i2psvc to your base I2P directory, and move the remaining two files to the lib directory."