aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/phpbb/passwords/driver
diff options
context:
space:
mode:
authorMarc Alexander <admin@m-a-styles.de>2014-05-29 16:33:35 +0200
committerMarc Alexander <admin@m-a-styles.de>2014-06-01 21:31:05 +0200
commitcf61d35d75bc8b608fb1ee4f5313e797af7ea584 (patch)
treee5f857cb712ff87fa55fa033123f9a1d0604f3b9 /phpBB/phpbb/passwords/driver
parent2d7593995ee888da709e21051c4566b3740ef7f2 (diff)
downloadforums-cf61d35d75bc8b608fb1ee4f5313e797af7ea584.tar
forums-cf61d35d75bc8b608fb1ee4f5313e797af7ea584.tar.gz
forums-cf61d35d75bc8b608fb1ee4f5313e797af7ea584.tar.bz2
forums-cf61d35d75bc8b608fb1ee4f5313e797af7ea584.tar.xz
forums-cf61d35d75bc8b608fb1ee4f5313e797af7ea584.zip
[ticket/12352] Add driver for woltlab community framework 1 passwords
PHPBB3-12352
Diffstat (limited to 'phpBB/phpbb/passwords/driver')
-rw-r--r--phpBB/phpbb/passwords/driver/sha1_wcf1.php67
1 files changed, 67 insertions, 0 deletions
diff --git a/phpBB/phpbb/passwords/driver/sha1_wcf1.php b/phpBB/phpbb/passwords/driver/sha1_wcf1.php
new file mode 100644
index 0000000000..4c1b449c0a
--- /dev/null
+++ b/phpBB/phpbb/passwords/driver/sha1_wcf1.php
@@ -0,0 +1,67 @@
+<?php
+/**
+*
+* @package phpBB3
+* @copyright (c) 2014 phpBB Group
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
+*
+*/
+
+namespace phpbb\passwords\driver;
+
+/**
+* @package passwords
+*/
+class sha1_wcf1 extends base
+{
+ const PREFIX = '$wcf1$';
+
+ /**
+ * @inheritdoc
+ */
+ public function get_prefix()
+ {
+ return self::PREFIX;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function is_legacy()
+ {
+ return true;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function hash($password, $user_row = '')
+ {
+ // Do not support hashing
+ return false;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function check($password, $hash, $user_row = array())
+ {
+ if (empty($hash) || !isset($user_row['user_passwd_salt']))
+ {
+ return false;
+ }
+ else
+ {
+ // Works for standard WCF 1.x, i.e. WBB3 and similar
+ return $hash === sha1($user_row['user_passwd_salt'] . sha1($user_row['user_passwd_salt'] . sha1($password)));
+ }
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function get_settings_only($hash, $full = false)
+ {
+ return false;
+ }
+}
VsYι ڬS|f{d^ǔ_] }>⤳B~ ,a-0~o̐dyw0U/\)W~-<^p1>2GBԇKf$VO(3mmH{2;z P{ 8U ЦǴHXKrpe~tp60uZF^STot/HdiG5@2Ԉ(3oC m*Rm (d"J}򙉻\k$I`D+ yR1!,)|FjF,H(󼵢k-6gTb"@O3 l;Γylg6~(>#wa1.-92E;\S-{;Aéj0̈́e GB]XY7I, 9T ;BHJ=qm%ZcuIS%;?jr)H5\4QJrW6F^~:~v)l/KUzIWI1Ȋ{!觭c+'\e$wXB^tJY׏21N]ߏ0ۺGU Vͦ'QWK2@rxRxV^@9Nd~H t0tۖ~3[1j#/0T,_j %yq16tai$s;1k_,tJ(_F_^;"{*}W'P eĶwtnCIƠp6b1K%aXS;αort]pfbM@Wv*̄:;jY "10J7-~\X dyil_.OV쑢:/--}׷ 7QRMY8*cf11>*UW 888 >bMK-9fX`?MP^C?O|o27D$ jM.gw1) "yHe*ԋ_U3 7Mk`'\{uNc?u='y7d9ǛD] 91:cM[lz!O:ՍO`es^c\sP$w>]j Z΢krE=R`WW&£j0*8ѝA'y*ymJ"p~8tp(_o)gQrˆ>Nz±/lKVp&[y}#~MF$3y\t̯{;ǟţ7.9NE1e=M"6-Xna? é^gce֎-5_R ᝑG8 v 7n$6XXg6u P;ۈo%0&)=F}]['sTB`DO} ёIcru՝a:Smz9jAA8NFEM@ȴ}3f.CuK5\-håH}'TI#  G{fe .ȿv2K$2^F^-Yʭ1!/|uxEGS cbW?JGmv~H^O/6cOߗqvRYAf-`w-QVND>. k wiMYO[Em),H@a$W;f+{$ 4T,ͪk{Y\8b [@o rZy"vIx8jp',|4_6)od\7qOg"wӃ D.j$L_^ '_s) FJuEx!.Yɖ>%jAyLR >ω`,3` 2&q-.@$w-{VdM1y FDP+yz֝_ObםΩd~-q vxK|0_Xv)RiK Aժ7&o$3%[]E ]ߢ:rd#љ)/:۸*ͨQxSWAj u̫yeA\['0Mԋ)b1ܚ8O?ػҕ׫yW'#C;\}D7Vk;?(N\+ Nw8xۦ<_y,c o-/ ewFݏ< Ǜrza4i wo7ZҐZmisL#?|Z2y^Fs.Lp͕i[f'j@ H) 2麠7jy=$wMMFڷrSUs¢N&x%ҐG)odbы9E$[L9"[9Ď F$\ KN=#wmj6u%p:#aՉ+N>'6㼩3qp=)zYgV]*aG Q Y#n5ج!]C'V!XG\ 'XM.&iYő/ W;{1~ 4Zi&J>N얒UǴ*}5sǕ*פ`0dl*;& RW:jC…F?/F)) :e{Ul""jao͖o%e೨9 !!/>:fJ";M+$#8g :,`3l mbv$;rލd6"mqيᐮ*1p)Jħך'_i HWCڦDnӭnK^.^ ] o$#П@}Z+6x{7HP!5m~5_ 6^:ɪXjP ODE.TW`xi% EաFSjR7>"ֈw NƢV ;j @6@sT!Ovꨦj=Ofer;ڢe`#y]fM!X9ze;2y$D0O?j7qiy.7<æBwxY6NU똈úͅ?kSzd}ټV [#3qmIy񧿚N'Gl#zG.n-T*̊;?Oz+.ݧ5۳X=~&1k_]ЗbQ=E~Cb>YՄmnIq/߁:T|-3? p!/)?^u+[,2gLL[y݄xQP4ng !CƋ 9*pXs,Zo{MG@5]U۱̯Z"[03W [~Y+Lv(Ls7r0H$a/~Ӎ焒k qp~u>qFTbso?TkӺlccEcxMNNB:%3^bw3|9ZaTHa/we8 : P?lV畴 ֟/wC@6J`u\3bf7Ft7ᕂ^L.;K!΅TA ZEF?Ϣ&cT39?]]C@9=,j/&sgtr+ךXMHV/]r敞fߡ~P NƯ{9On9)4uOraidӆ9/T$[O?cZ·~gx|Ηۈ+nKd !W> SbFޯY?R0,V b-ۚceT::<Ѷ/;,8٦GbZ (Ǯ=!nY*lym@Ino|߽tqqz eNHJП}ݠLfOl[q|(Iсh(*!YU{Cg#"Xn \Y1yyH)܊NcOW]n6w0]/QR:<X~ɾz(G>R(X0>:=Tb$vהZ#ÿjAF` įty ~+6f[ ;{>'O7|3 D֮I&I;`2 ۍNsNϸ߸0ϥG2䷺a+`TȚ}﫞ȵIƢYoW>}"oZ@39+2-*|Vj^ 1 &Ԭ$ ;_Hւɑ: o9ޣEBRx3bT1?5|G?HcTZZO FlYIAG &?9#!Ufmu^g)0I#n]C hϟj@?nX25q~DsP>I DDڽ˴ǚNY!|%v6Y&7;QWrUcPhzݠPϬiks:#y}kHg]ȎqZ Ήe@[Uh]_͊h4XnNL(R'(1J4iQhP+ EnճRS)}O]$.ŧxڎ$~.vJ"!+H&(nȒN)Wi}/lيvrD97O@ sD.i5R$,M.ޖ5͛ts׼ϏM5xp`2m_klvWv_&.~`cpޙBzihX*emZ}DӚ? b@>T>PE)B`˓=YY7~8 vR-X)33k'&e(quX{ۉ.zc,X JG36?Ę:i%/\څ4Niv[#v <7窚"@) ZcmyQ G`˻ot_55uI˦!޴#1,/ڣRe4j/\7VE&,,[.w-{ P|Y:_f;cl !zzA@_ Y=C>GNoCVg $7a3F"\ԩBnj)\5ƞؖC4Tż&]hH&qBԭB[qs(QU{mB!K!v Q>Bx P= Uĥd(:-La xdDaBjn>@ij >ET~t:RZ[){*(с:Ăz5C%n/|||==VI&y;xX#=GO)_95ґ%?[ptįމB[KH'qC|Z) 4Hh]lf9s9_)F3I!{#N7Hg[txM|0an]ZSR lRI ߭PhBO8P{-{8~0>%vk%\(<6r*eMO }_z߼r7Lc +^K A |Fs}E#1~P(-n~WMKA`r~D^2;t†A%F*|>gדc>f7՜ܴR8O>M_Ws1ow}b?)K!|diDX<1rڢ~NjAKWL]AO82'TI.Q 5^Qp`a0 &*<L["4!T!ϴ HhYU%$fu,_ _#L#^p$EvQ1gFE#"w2@13Ao1f?39Buv]DfxDC ?RDZ&}i4OPlFX ;Z1RovTUg%( `{2̉j+O -XnZsX`{V[Ye-7ݭjb{TmߙV$ 'B N7h+t?Hms?ry6n6n ̡ೌ\7"a[5EzV+YuFߊu vzZRNϼchc":Mbm}- +7⢍٨2N̄˦-a.5$0kGd [x_‘DPs];uz_e:5[WwB $E&SvN3 2i3dHewOD Kܱ׹r$EGYtM0$gBjA„)$k|aYKB |?W_No5) Xxh|6*V/|[e$訴M7AH4d),L;$B3π(XODy1n$) ob#}=j!J&NɍJNGZ|4Ӕ``coqhF @5뼽lΰ4sczxU}.& Y'a1Iב$P$-@`ᴞc|Ww `Px4n!c+5FJ~JX\y x$4S0ha檡;X"6Hz8%alAxexL >\詘)*ͬONIbdZ)=pe̿wP$j  Hx>v6| t" kKS?1 }Ml*B&>C43Q)7/,T-U_Sb!a 8fL$$k_}*w?m m,9d,ݦV=%[inrj⬀}GɫG>[=_N&lF̓//'ѕО~H8v;X7bXt%6E}5'!4Z$'s"B&h]oY 2nnOBKVmA%6t+S!R|Y?x.IBwыTDKE.AHۆv2x*jXicFgʩlՈ(bq`$0=rrgM~̷*kmxtXXhM&k[ҪLAQ<3`g"Xjj~o>TeiGjwfyo>7[DtRteE, UEbJΓiDY5ikObU|}nEG=Gu?'I+3t"#=JZqM+T̻$)[ U2$Y(趸C Tn1|r.*qTGB,@4dc'8è$\#䂒wdDڌiɗ w{~fWJLn#I$;B)1͟E{5zRrp,7tM%#t;uZlYi,ºP-Bg5L'?ޡʺM rc_NCήkӚK: #Gʧ)nݷ{؏n!Q=U@ɏ;7܁80ٮ=ymdV"RX_"1ҧ %*!`w,ט0 TH=>bH 0ʩ(-w1*s3woFF1~tBd8c"oN fdV.#u{mup4ǘ Da+~#Fzi(ڰ7@NnU߽JyL_l@Uz5fE`i\5?0/QjW:kv@X\F{w2dO;':f}fU3oEw%4ɩpfxEOg@Qz(3뚻QM$p2=k.]`>b|M:%h!|.[pIib%Kj#ftܨ\g:y}a\~4x̒SkF$_pL @ ,eh_]͝ۥWp2u9@"ɷK2j@MXWC[=ҍs"`t4n}52"ݟoݨ^[uHlgh_؂TZwnQ>[P}pRd1|e@āHb%='Yׂ c֍ӛ-w@mI?jx>ޒ^_wA%pn]UKzWݍ|]gkSOBI^m׌m!?|Hno@yقeDmf-?yLeSZ?ϩr8guzd2׊PmʏNgS:$0I N+]ݹ<" )!5IN>&\9;I8:'AHgr{v,ڢm8/#uqNƋHolUe߱E=w %kVS,_VFTN=6MU{Pd8Gc jIlV}vjHՅRͱubS]8,VwTGdaB,`fjbu+ڵ !61›L22> +&iEIɵPU}jeg -ҀJhmhɯJL.YI@EJtRz3q$0@"lEcC4qa:7C:iD" OuϷ?dYu\T>_.[5[THxWCppLj~PZ2f)dXÝk(U_/5b4]܌湺cd9ƞ"Tew5lG7ʛpKi'.ic: 6ns%tw,;Kei؊\5ϝ3 黷Q d^8mTd )½7ogx=Jnj[l<lrS|ΫIZ!FP$}dcy3]G/+mG䤄Kfǥ,a(ÞT?]zU2r`k;CNb,[9TiWqmʟ;i;D~Ps>ҶI8W p*(H+?_ܲF/cGc|>”߿\ I_- xfzJz)V)Oc n aB7 ;[>`Z1ګa$,+$-xЫ6gVx"x]%J qA%|`S7}DENȱr,?ڰ}iL]b&I*H\B',=x+b S"CzI]X0 #*"h؟o="JRƜu `s4PٮM}-΢i#TxR\̚. ?V5QX!^括 9fe*ğ!_Xtpțu{G9g$ Skz* Y s#$U$'`Ӧ[qv%o|GlLJoK<tRN="4*^tAy50VȕG`/.& ʧngjk9*aEq蘶V\\aXD|xI-VFBNEfwi,\8IA:x%{]G'k/OK R8:Lbcx)nTy19l :"rَC"?)58/I=ǰJ@U7V66 6Qd >=YaH++^7OWYҁE Vbv#&;b59yˤ>{tAnE˄;^%|r?Ȟ[.ܷIxLMVIM .d{19@Ն˷^W~=U Gܡ[w7\ќ-WE絺6m`}ב] gg&Ⱦnz][ Q3b8K^,Z\G|>9w@g!SXOܡZe@GEݪ:fRR@Xr$\)L"|~eyU7l䌘 m/&VNVE]VZ3{k7FyaFH }BN5%DQ3GLw ='>RQS6`i8UN؏IA_VϯFOK ެ NqPy{F2n +[2U/ A‰}n_Gq>C y_vjRE-ƍ`X3/<'Qw1Ǻ Zw&Ϩ}a!XSDUv"h)=Zj.JfOeJ**o䰳Gb; #˂9>?}z Fqbߠ/H;!ؾwZcr5)6e~Ď]dƇxT3ag?e* 7+Yo͗Eƹ #'59 hЪ0{^ /QVtby%x`Iɗr}Ǘh6qL'rHETpoll8 Ltk#RӾ& D XWįޑQ~%^vgR|{xk# 輠6p۶FC&ǬyƔU*5,;+#Ftޓ NjXر QggmV1YD]=v`vTQ.9\ri?7W,"-%K 0f`H֣ovPy̒DNhM >smVz1Z fԮߐN 9xeoⓠ%A9_qj[)q}5>$`vgzYVR#~RZczęVӜ1bkWPw+3v`jCZI<|ymǭ :b$4 fMY776D .L'ߠwzr}OI۬(yI~kAư'@UĮ 0PC/ }9E.R(?*[0#kZxOO2}+(A ;jI%Qҹk#ϛtQc,edm&JK GK6awu *d&}Fm +k$I9g\i6}o_S+/HS2.#A8?Wӓ>i2 ?s>El6],z+,p%l-z=%15F:h0e2rr]MCǔ|mGfƉ ~@n>(r'GBاLQ|Eܳ}}Vpd&5A^+ѾJ/Ť9D {:(c>62ՉCN-yY ,hlA.$/ٻ^=5n W\%/"Jc4V$ET} ^{nЊiÂ4i/dt@ȭ"E+ŪWV.и\DP 3VtsI]%2AD52xS=mP!(: fvayL!ouҾϩHr.EV?+ܵ>)*<'U@)|dY:XvXAk0 l !/:`GcAZJ%-xk:H(,%@n- d"Oɍ{f@Y>ȡ2T&ș#g]'%A/,Ԩsa[%!A5 -7BΆH(CQXawtwBޛN"[-q^5 jQ;$7q \Jꑈ@3fo{p 2:)*RqX.,"n#cS&V6kAeIGhG5&2dJ4i{ r^6SJ8x {}AXiF>9IKQUK"T\$x3dfDfNS5t(sMFqv уE>(DdQy51nx^o9v#rT?;yi*nF@)ʹV[419= b 0cZ#Dv>7xPp   zg^զ/R-jPِiFzFHqS x~tj8b bdgJ#V Ků7(F<Zi@ڸ[^yi 仔8жXJFria U*Pā t}uIOGQpRwVƭT"a0vzBí١nAi$Լ +/Ih U^'ūT[0yJneַjX'}Bqp%/͖ P,^®~,P+!|ےu|~zD/GeJuAwE`UUZF{ؑ /kT= 놝TsW{,QAk"笴P5`܁U@fYNP͂ _`wA+2Sz hpv0J}=Qjδ|L{Q:Xz&jk#4[ FW4|!GaSU2 !!͢W,[w+FApq9W:f!z4$l4~CrJ2hC>bb2ZDx(Ŵ(r>>"s料D QH2K/I$sGRA.?.6!]rgma$t:gd*8$ZUqSF)g~;k(L1.] _}Zc[N ā Z" ؆)lAP;` LQPVEd~寀ҍ^>W+{Fx3o_!(GYt)eF u2\̟OȓQHN-떳Zx^8sӺKG{uo+&Q6y9ܔv{tܣY/bb}\ai/']B;I%6/m.L1zS= ь~d$V@+|uG!!̪!h<WzV^\x]\ZM 'B|R*!q֍8^Z!XfD0]K̳+ ;/  n)]r [91kPp!7E>buOn:"zkL2\#gJ,\D,hW"mj\sxmɱ~A i?pZ.PLuǶeȾ~%EQV.*{q[sii-Ö02-WʝJ*_e Z$]ЁͽY! 8mU$(]f)B<̩{qRVi=<<=ؤ&/LJ(fm`"WWk$"i/‴ue1qGb|́fܪǫ˗#NeܹdV4+Vu<,[VBe8+RZ8hYD.Rz^gHZf iB#^ڇ] QB'Eϔ`BWE]DdShj[c bQ{}ғŤ|{O1]#܂,>|>֡pxsۤhM hO@xқZ1a,CY33T x|U *MtLUT䎂qmMӿc, + n& &DUt%~M|o)CgܶW^/W'Tex.{q:6+q-qMd(64MwYL>}7TAw+NLY/*[k^ݿXؙ((E{grl 9Ӿri dwY9 ky/z9gیk0JٜW(OSӰIʬ9H nip3y¡Ļ9+FJyX[WMW&h 4 37`j+`-}Z,EȼoN~kEg^d6۾$4LVBpxAbmyPXf~/Dj"fKфlc$*Aҭ"50S0[ EOGw5ZeeP?DŽh^s.)0C>qm +@"TQ}&rF!Nj 5䇔kz|{1]aIx*ʥibʁ;DOq:0.Xb4-LT_"xf!1o6ES]8. 0pYƴ#P0ЖQ:zr V}8oOY.&G*0"gB '&E]tmI19dNM{GmЂ{H|q +QF !QCŭ7៓;j,i-aб)b]\VY\ Bm3 ;+^!0݉]>ESA: ;{hzQ20UY+]x ^=|at@Cq<;EK&9$AJ4415`EOA'>r{GÁSA _=L^qܰAS6򰍰U ӫBPRL{X2:YrÊل=kǛQZaͼ)܍zko嵏!p;.v!e6Kz{TЁ}rbHsBvHvRQbE,z|'t%4Q}F86+do#HaeܿPh!#vD/f3 {H%; Kfu% SBjf;z,3Κn_7@]]* ]?rV[tOc_^z<]hM^(oDX B :OJ5.() ki={:3!&1NP1eyU x~{Dď:!EYKSĂ%!{!@ vrQZH{#&B,/._;ɟæ'$II@>'#ɢ;햴Y^#D<2*TN,Jb<~~(xWV!&zs`o{BmtPCϰ͊h{ZO6cpGC1-nG ".aWQLtU4y2 , i @MfgChzUVB4;E)&whnQ||,[pެOI.jq5FU7؊hWvx/ޝ 7%q& ph/VHJ6h=IS:r&&/-{RmWAW+ʃIp-4@'+ E WB{Ή"K9'삅d`YjLl,ZmdyQIrkiINO\p,^3~lvUZ|@J>zzSMkqV2+4/J_qL825wGvE'SS[Dsi~-gЂ@pd+CshdcHPê+pA? Y$sKʹ6vE{"@!vM.\oTp1a]ʿR+?kdjrGdƔf&iA4U !euicr csF];{YK4-?e+1QZqkJ2=sY_#POat?$oVȝ741ُǤkPދH!pv__Õ8ؖ~Kg ѹe+31;3sNZر7Q9A8ŎU+^/Q $ f93 wQDiT&sAi, Mc{Bc8jX%DK(.oŞL`cɶC-({ S ɥ8-ql2q }1$Gk^Н[n`f|ibTf 3u6dh0 ;9LvrCbfUP跃q ZrVuoVFV YZݘegaƢ+6p3 ^^z& :!a{iaEXbUXy!UWv 0? +5{}`/|AwI(bs {&}N@ N{$ 7/?%BdB mgVg(JASaE9b*ç aɊpg{ 36?x:Qam{ٙ)S9Er#n90F>9/Ğ~ 8U}yJoSͰ¸}d,z. 1,6ŧCPk਍7CYbPz[Nq & 1]&7 N_Ǩh-].f!τeq9EŨNv xYHWU2<~(%'KV#jͽC0 K .j6_9W7%żw5H$6h_{ÂQJqY:Dd޻O'iASE0:?<2].z7Tه9Bs;ⴙ_o2/tkqZhPrj]g>*^5?Z()pIIv5DCeXR0w Y):jc+v"vu zB7%aM<*So!`S_,VU!̠,_ % .hCrm1H;@746ŋ^6,SfRchV o겻Xʏ֖qdMbwb3W7ޫg5`FZysn0^X]ܢy:ۤlq5!îR|fP}S7AL*ɛ3q]axx* `d/vYq!P̾5,ªn/@62h 3'Z5 f eԖF/=XN,G̼LS)%W' gU*}IgUHoISQD^l8 'ck w \t0@t.~s XOfa-ABSɳ}f.k4Yv1FxcMuLcwItp< W@~B0%3'!,22t Nԏuւ>MH; @kY)4S)ZJRg)@Iem ~/6^ `P'ZčCgd];rlZ'2A=h)_l7 1E&rc̡ TԵ *Z ?}l5}v+Tئ|'&ԬK>Hcprt^aQ =)4ä87[(+zO_͆\{av"Un4\ 1<ū:Eah pQkM﷗rv{zkf ^h9~eʃ^b~>B +Fs]UTwD|J5FʥzQCw_߀Ș] Ga7ug. Lk0\r=:,WOHG )kuY-=g`lp aL=ԧAH#hw˘uZZF_(HKpHԝ`h]I#h,̖zӁ^&5R--_Os0K 6/t`2ܥU _Ww d8 b+:${gMBnRX' Sk[PWa<(ױٟA^~IΈ9KZ2;jàҧª֜_YY.Uݽ|l[=v/cT7E>34omnR@f3Lfl1'UP4)`ٓr34@>\'9(b} s4.CA,_J;6)VVvyD"1?EeGJ尴Kt \`#<&gLZyнWPK[2B,o;4Nf U#~,ӆˁiQY8]ʀ$T 9G+@MSK |_lV Y$OQ5֩'/g$+^\-,icjل\4nxABV`1;rxgg.Rǯg4 T ǔ!׋w!ũ N\DTH%o5ez Thw{e[ 5gpj! ;fTx%Y&ɠퟓ 5_ vʠL0 75m3jH/X$,tYERD5| &Ͳ![lL Y/Yޏ"%ҺW3]8YL{ vo6*ͣkD`o{EbigA[K֚T/ݕE Q$j$ mb,C~4жt XeKXS:^]eI `]4l5tR! 5J[zA 2lf~7̱| p_R^Kd7>%8+,yM1 :ylnn'fI4 岺vtD<5- e}VpvVTi.5'{cGxzFR;@{YGb315M~†K ѵP\C29_}Bĝ4L!-ͯIR8 xehzMd{&d 0R9.`ϨpL\rO+sd`!BF:Vv1̩tdFQܨw2-{,SW913^ÁM i<˷ɟr$ds4\}CAwOEF7[ 1;Ǹ.nYug 83ip0 fX/Cn Mrb]ZY:gɲמ VfbB:iqH."ZИD$,fzbPOErd Ä=N~^;ضJuJv{/f̆ Ye`׾ *Y0]yQHNzD@P[P\)rolva27TJb,'6?ztt3Ht]A}xk3d:rmmwnBAxJ-{= +7(Ne|Oy = +^Sd=&Py{IÝnݖRVu*` ZB y?׬mBǍ8]/o"ki`r0M^W^ve;"#^"ո{l\F˲Xe~< 0D0 2%Q@dlz"Dj``Mߞ){[8F˵-Usr;ݼ r!4$^8BguTرUDzg#Ae5:lơc-ѰlǏq9 )z U&o+{Ο f! 1挨q+QI|$+q=,#Ap/ TE.^ٮ8?*ϑV}BO̹S27D~UMsJ;Lch75eF1)b$(ȓil$њ|scW79X. uPmUTNAЇ#w=[B$={fïW" n )yA7Ѥ>+0K%#[0^F)@6w4ꄏLXʵU>2)e=OܬvȵBEśkv)i \G4Yac@"YT/k2l(ƀ&*hM צ,[RQ4V豔.t5]K4Lv0/aN0M7W?×ןFdIQX@Kԫ o?-Gخ_ۭ&)b+zoLy9lx=ٌW[>*A =X.5H; sgžj˚'2v̂c6=C]0zJ.m8$z2>9kf -*fL!&"p묗Dbv ^\Ų i{~RS"RI+ꢄIIqoHRoÎ:6AaxF:j3Gó誊RT>W͘{3XN1"ρ=FJRLN#T֑xzB+=9q~w{ypwV/ziUBCbbK*YQƢUVHeϗHj%zJ:5tb H%񿪜r sI‘'4*;.  y'fK'#\2_-Ӓ_i34{>d TE^ [/z6DmWerKN]N+wZy`% 6&[#osmQ It:G^NHYx'm\dCCر9Ɗҥc$*X&in۸m U r1$/ ^`pNG\v'Afdjw GPz\L:P[h{Qnnno)\v gݽ906rOG^Ghs~e猲x zd0_N@m6%xaxR=fO5PG{=*E xti.٫!WΌ'%7_-scizq(LJ^`_K* vK|h91%,K|W+/آ/dOOifFCM]ț8/u)cS7ʙsZ_46ՏPA3,Х4]xAK aZD"fHc-y@6mga 4U8TQ. rR{=>v)v6w8X#Y;d-E켧vS5*S'T|T&n?r*I~T]Qiٴ/`GZdlCJoM Z|i1qq@hmQB[%S KLTQZו?C ]l?MY2 &AClX8o5nuq>yC!Ƚ<^GG)ҽ^aql}f/w8>VOJbq$jQφ ά2a=/J;%f,Bf~_/(L.B.]n0s9^[[_PR}o ڷ #tAUs@}c KsSzD1ژ5i9Bxٗa羗puh[N(<&giIi"cpwgA?2f۱:բ_al yvFLZ>n2u,ؾP.v`kYKyio0YXF9J XWHZ9"b}a Eth%Ԇm ^cR 儻/)>2~n[J5<68DiSbVhIzDFSj4W"jh8;G-?Tg/dۚzܫކzGDjup(&)lK^ 6YE#>kѹ^@+ :-m>oZ#)?VP]I>ak8 Z0 VԹa%#޹:2EiBBb   !XR%;WT"k1C$zH2y,6/E}%q6Gz֛mZ}śOzWTջ30pJ .WÉOYIIJgI:[PW<-I4/DP2wτ'5ޘ^ ezgżϽQA]#MPFmm#F=ò[Y4,C\gR O$>8698s.~ir90M;RMrZ28<5ʐ֪ÏH܎3 mў&"3i7$Kydw Ik%Utȼ'*lu]S9 °2'NqV!ǽ~C>`l0HՇ%njeE_/Y$Z~v{N+b1DfȠ9|~.*l5*_mh0ɜt/Վylh J.s6HBC!|l\! ̚E]4_DR\1\L<j'4rAB9{?csO9PO,EI6|o~r,rL,K"XtUHiڹ4uIndx*}*.rOԵp0U%˚&EcLQ a+~*Ls E˒ bf㭦{ 6hgdҚ(9ګ˰3šUNl8|sPَ>aȘi2;{UV>:JG3+1:ҙxB LHfPz;*yNQcۗ!A"ےoR芛|^V ōCI ` p[[fPeKyʽגD/ Q`#e|RqY4+o f =ᵜƏG<3O 7>kA (X4ntv((zhV:`[sMWBI=+ܿ`Rr%~^ Vߕ; PKʪ Jv~5%ִNF#M rr d;4$t ,~X2.>X(({B-=:7ڨ*wLWe,Xi&p%>xX-cI*k]85^ g! nث^ =sClG>H5 -0PWcbŖPq3#zH 5ü f`‰pP {҆1|C8wۈϿCfoPo9d_Iɫ%j I]@י =WZH;`5ov/'tYC+=֋1 .Nrsah2#N ]aƛX<#0I廆ia6W:EF& bZ8L~1k}DFDYRд1`&C 5NOT-E YQ"ߐ!mz,a2?$Z/$Hȁ rXC`zm v # fq<ؗO lPO_śxe1@G$6.4ڽh;2uho`v:fR}x +H`ژpp9FZyœ Z5rCDg\Ra/|D ՈOqK)'z?oavXk7G-ϡZ݁]L's0ߣy[+xIǐ#NPBt%CJ %7/͆W׊ VUlnyF~K?Rny1`^V\@e M` ̊$3|zA'HhĔz*0 MԂ:P̊Ey38|^?M#@s.AAnG4Ia %Q\h*_ Y&CnECrtϚլqxga3 hg3Qd{(PMqǞte׿7:O$ XZ( M"wB娡u<9=&ԂrЉX=VےJ s؀"~|K_ę$~rN`?nZW;[8Ѧ+0BONJ zKi8|1' KTqH@Ip{  i;kc55A'7$ѫ5+?}I [S:H=A^}of5T$<שÊ4Ц c~5;yo9cd}K?f%X im{j>oޣ Q3wSwC\jV ӟM<ѭT{/4t񸧣 5gЏ/68lO ?N@|w(Ĵ7QG#CYgDfL*Mzǿ6Fep58=噑QK9_6ElxC3HEЃ>hvj*B .rǽI;9^Ӂᡤi޳LyU,˗~4ԧ t{SS»$]NIϸUn{4$]16븻+g.G:Tъ&rT[Կyv.zyC) iB(ZY wR(!EpˎvNXA;ɳbi8|=Zzȟp-ӗFGXV:\?>7ܸD;tJ<3i B@FcYji~| -ߡ%'Rb }V8w2]O}{udbubFT/bHwXD̔zT"|@>@zH7ŘmeE$(&}x}B:7(|!{~ =I3+U HbHJh;ˬ( ]\h1ba=a!@=Ar&mx%M8yӽW)x]|Ǟjj7uN_h ([s='>y5)G#H`VrNNQ~?G+uʒz蝎]@96?${iJVV1{8ʄ>*WFlROqOҹq(,jr.,\5Uuog_'N;joڽی3I߁r\7 :l UR,1:h#[o/*`+a=n:5,d)hx<90ym7.&>$pX)a\ϴS/bMRMUyC:&`^0C Pf wऴ3^>hu0Q_yA^Vӛbv5ߞO@l^:nylX@KfiUo '^&,3F[ #$%(-jiG*:āϓuC-{p'\!K Lgkc @7'XV]GQMAwsBk1 ŀ1$UO,K'T(gE;<0V2"gSɖo-ZR*PULT8j] uKr춧pXѰCVj YZ+)۠?=vɸsۯl| F!w3f g9xRhw_%O7Gb|U-8I)H qԨ`LH~ [B,iJMI|[Q'NUeY > [1ElдDv"tӀil@LeF^j0\hD2=[WzG2zt]`ZHCБAv{)LkiZB0jeFOqZs uO &q!,0?p ç8 \Ӳ"Lϑ< mOpۜhGU{1IyNշ ]iq v^>S|WP75rv'GaŴT~gl+˂έQH қsk*^^y/' c@,Ml8J>53wK2._Iw w),l{<}V?ᫌHbڨGa?zp 1E cP6CXܳ Ś ~/% FpWRaUGEЦ6* ୵Jfk0!~8zʜT5vEY5kb8.#n3g#էW$u1D=5VmGqtРS$DG]m1HQN/F\>oFVN)etgmr\5dA)E_r׶mu MذT6&K=Bx+zc=mڡb׶y̭ѻVY~5-h5ʹ,GT̶wGVQM EaQwyL|8߮ds@O -edx]spB&e$>+ BITj@:޹E3}u_ Fċ̺U!'۲&\ާg'tiH|_y01ah~A8|$Ib"<B6Fb]PDZE˛Ʋa9{hRЙ2_n$yXQsEWQ}M]% '8G'@oJCמ[eG BU賓>fمFN]m/{YBQT xl0q32G9M\\]?fB9%]eӧ=}/!{ɓ1Tߟ]&JOA2D =SoP>T|3r\+@r]I4ݼ5߮ Op5pͦUKBX%$ -uiўcoQyb^qMe+ '  x7hKׁJ2)Z Zc9,D@B`JT\%d b-գ<% 9̯AㄣNгteJ?1vc2 :uG<y3j׆>؎O{"WְEod npPTX70O] E쇎^V1 fp_Vݍkc x|PV z),C7y=z\*r8}]W\`Xzv8¤D䯱EކI}n|ueqgJr}L Jcw-_dԎxg"9x'9e=e ~ aL`_g„wq9¶S)["t*BE5p/݂"hzYjFv5hc}+HOge&oe =fǗ4Y+TLw&Md`պ03o^$s/){Q֖ R6\u'ܔ*r_"0cj^l?<6H)l\R3ɩa\1~W, >S.C[S=ݭ ќ`gs"Z=گRśsPWyr-c(qO9|tv>R;'xNV^J}41lP& /!NyXC-7!̙Le/g3HadۅC$t`wxC=(~h(NXB'*ȗk*><:f"c>T`@~i 2f"*_IhKCk ׍n ֵUoעd#1txw#6sm{/Y>\UZ8kFqҾ)'˔YH!q6 zJF%05*~^c>HM5gY#ݜ #R\}dO'`})8y [Gj%;`!Nz=;Sʈ PyF3X+%a%ZJE3,9t4JM^>dl)*JҔ"|~aB]\^}^# Oe'Ҙ?o&X9-8m\AqeN efTcrLm|\NE$2T[~@H!m^-OJ  J66+n`<>/₺){F<7EaS  ї#A rA>zSPMܬb^&w~G:*GT{wb;Gm5#J2IPM-@PD3{o L3[w;o-J@DĽϦt4*:F㥃O\O\Z돏m M)_BZqӕY"+ͧrK8[Iu@PIlb6thxѓڭ"ϛ #%@e\: !0:\-iK; ȫ+r]1@uޝ6aA)lB)mJ;irj.\tȄ}GG~0DmxDO勘Yr{O)JjK8[n9_fN=F_8c*P0իN|Hl&*"wGJ5r|"q" #`d!׉=.%7@@BBu\Ud Qb =ɯ5%O&; jP-/ry|:{e'eB;{jh<nl|+rlzBw\R+C?k{+: !5&o= 2A|JN~Vl8)G82yh`èN6+bjU>ێAOG(ۨuaȬaxrk;H*j!&u1=U#V3+JpZ63_e˾"%vJ)0qHbwA}bHo<8[MxЅ.ջ1Lª#wpSiΎ~xE$Y9دa<.-ł[wt:)&OCcsohfBfaҖx}X)~$|9 $lw|gBGU&c->VSS^A¶ F`/:`ӆXq.,u 79̩Ee| `c ;/8i%sCN/Z}3ߤv&g{_!2,GIF^Xr☵@m\U@Y.T.AkZe-/JFtpoQu+9 otiPC1S<`++ij},<mE MS۪i ,|wv\,ȃ`:F4Jh=4éhO!Q>7-~!;חnQG㘳(&4sl|e9?q}(Nb8>d=nv|:f+nZsWґ3R1iS!HO osqEAEc=ڧ  5+(""7l NZT=zbUgx#J^%SXPЅX5U&䱊VkQ:`4^q_WľO|!,q'. ,fy,deڇ$?U%ޅ Ϡ^{,GI'rN)ّ9/5E5׺kHkH~~kT-;F֦gr`>}\e[,ה.28Vsg$k sG&oX߷[Y)1PV"b5Coᘢ\prxj΍LHkOy/GPy^AQYh:GNo:b.g5;j.R U߀KwE\4!kՆN}xFA:PqN2\J7xȸ~aopCҰ.KNR an.Y!NBa\dbӶ¸YtjT8Ug|C;Hȋ_+Ʉ&FRcfg&G/RDMtzLЈŐnyEX2/{H=k_9`ZFSeaKM;+Ў7XNasfﱍ¬m"@cwlHstv,Xsٕ׽Nwp`$(:sA&Zf2^t;GYy.־HѾhWsa#S 8juUK[E/KF-V q .5m+Lx'cO&TB(Z$WO~8/Q]}:~H @AT.Mn) Zvo 5e9])_F`, >D@}p]H:O&@fzPk_v/:9(_LWݧ 5KO:w+ >۞apUz( jdQiꇍ*KT (J1PH?EZ4:I+̕8!Ŗ׷4E u ~@|K N?Y=1?ri36x{cؙ)`;P2ʯ7ۨ94V?[Tl"=]+78/2ҎgifB,'n\t8_+isfA7?U1V4ϰ8EnYM|)aX_O4J&~T0Zy$4*)Rym/{ڳ[t|2Ұ-'96UtDޠY;FI0LM4יFru5UvOĞ묡u:j7u O-19q>>yXᡱ4UFpwu=>àCKrX'תˆ%_pfx&kV17> bal薏 Uq^} ϙ -;:n.n/"mm幚Q, o!l6P^y"4)sq*^O1jh+ ,t]_%Po a%k̫vWG^b*R@&j]f2H2#N?Q,zn9ѕLH\!s~ 4z Qqۼ"1sXA9HҶ[4t)\*sŽIi_ }ԅh+f`S-bpKsOttYٹ֋0tBGueVꘆr1W` ֓M6ٰ^/'zL̡;#nֽBNQH REyiOciH*eόMtu;zg4KPc)qua'?K8 ?4E-eMyz.+m*:ϠnR&H\dq"Noʟo8lwldۑOu*Qp6]ۑ^kscI t#Euv#>֬ߞpHqY!"%.-cy h){"=-j\([=!WCq4ws=JʅGDi%Z2.ߌA%a0G6 1IC*3{ťj׏9Σ*=vkTT-UnvH~ij>[S,zԕ-S'N\6\>lIc/ ~Ūj1|HMmњB1cm}P3ia5Ϧ|^j\(3ݸGC$$Bop/Θ(eaSt\&<2\ w% .#Bs#ckɼq oG182 ?1L0^єI Ɂ|I̪%IDv-Iaڴ``_ Zt*b֏|WSb7{_:"V1~!Wr6 >VP(:/ bq~?-DR. a mZ"@d1x1(7L6 e)}D@=?LxEbU #`E#z_{ʗSl|q''jB%5 WSc55duqlEB$V*)$u'.U_z hMWַMok,] Dow>*lj|[R4YpC, z泦ֺWD?-.>1T)Ձ Ge͜!M8CP/,Zz>#6pH6vmdd=as% "q:DaWR]3!D'n)½?̤44ipɮ\`3^"(S,j N rqcJHfD'go\aOg/73 Cb1O2c=RK/~eHEl䉓j8Ĩz^ѶWC'w2RwmH5@I+)G/X!ourĔcҵ O@,%jҷJoӠ݃;38ѱC]p:\/5wI|OּE'."6ƃ, Ɯ][5|YA/zYIdx޶ЗB߽{pNbSL0U_#݃k*?7KCj[hAkS'Ȧ[X|S~#?h6#fTpOeR,lF7d@JCkPX/bBT]b?k>V݌ys ܯ;EͺMNt6g-h+QcAD(aQc yfYPmJpK9x\}Iw쪸6ˑ(}69Om-]BUxBu+:@3Q7n