36>PS=mZÞ}JC71P41Ql^lwn6EQJD}xq)׮=sV s>.߈kky%g S^\@VA_3]?_)H 4B Ug5ߋ$zWz϶D#V8>٤#ۿQe:L_64(#bnco,褵Ox1X§}@iLJ8&7/!흱%v%Qf$hҾAl}[B(&y=lu O-y櫴Zf2}~90\^hsp6I>qβb w'P5:;&3XvHޏx`G czk!,h3 xߪk ).nSeoxۈ / XsUrgJLW\G-Y="kXXo c%*IlcݶfRSdwL{ tiȢѦDՎM[l8UN >Eߕ$=L@9w5| LRozq IK{lKӥȮPK>6JIfTC \Ayxk;됫EaR*H/7vf1n_*D4d#22%f}GVirբhI"KFU ('!bwCOioQOiܗ܀ezk'+",7ʙ;[B0N2R0ú},.[璫#6Y *O5שq|O^-\Yl*DE9R%A9죶5ol Ap޳t#/t}a8[n׼~stc23 3ǼxmOԋ.qeT*ryqWC3I@"" mѐǪOY2s!j^_c )8F|N_:Bdmh4 XcO +5#5L:WjVEY2u1ZDHXH\}m>Է ].PayZ̤\-$Eh4o8LnH®Zb?YIA9״P CcCN˫rLz4#N +r`)nv $H܁Zhu]G'hF vjqb,J#͠Ţ?v>1${)Ɂ:}2WF#ѱwbb ^Xs7"mZ0BI"MqQn,ȡfѫR vwɩ7,rY>6i7JicF5c3XtPd.qoPa}392 Eiʮni,5LP#S|dVۖjU)ŊÙhje'fhJsp@Z_vEM]Ǎ9Ib-[vja\\Y.u1ni϶Ma8^2l(Dz(Uq.gVsi ¤br-5A/%VN^]fRh;p "5nEhTGCeNLL  knl-T'LE~[ζU\}*>k'zɛ*hq%Bab6gdX/VMb~1ñ|q6b-jXkRVt9,9cl>Jx|M.*.%2:Dj!s+ MKK􍭭.`C9D|O>6:]I|JS~7Yi[)J¾'r\S$p9ʵu*c,,2 hh앐&ٺn|=E_BnWfR1tD4`xC]R2>2\/xH,J"d oe:ZHV*C  a7.\[+eZT-8 0]|5ɀNC&bRfcϱYy`<zݒ&Zڌt+-rG@zRҿ1v4M|]侩3t5' $ƦϮF® d̼3lN+FG] ,7cy]fh^Cleeᄂ dM b);.]3fw.T^D)iJ@Ӽlj(`"$u9Š !Y<8OOyrѹYP\bЪ hHrJ+!bNm֜* _k6QYyyG]붤gAR1 { #"'>:һZa]c! h{<?$rxGJ4 64 ҿ8Uw+7,}ūAxxY% @ng ElmykHn'x߾ic0 .J/WN.'Al"샖.\C_"Ds')j}CiaC$BiⰝ8[JS" `rR|vR'B-5>KcbjgAԲXXwʙywP:5nJo}1wS׼Y'=R% 0m&4 0yaHr jSð0Zoq\G%爊 jћEhx{rYuo \,Pb/~T%;JX[SBxXp>e"V`݅@l_9/°7ogdG]AJk/t=pX$a7Y]U* EZ3׫ڣ\E1'g[P DC$Ns (GaN[y3h?i[`8(7 ~b0r3A^6T1qi?r G{}c-/YsE9H1 F%3rz\~ RZUm<i| ӫzSUTr;AwlqB9P45soq-CXrGtT qܯe$w >; d:܆Rߟ^N_'ST}!b&D4 ѕe@NreZR(b!=ظ݁yKAY&S(uzYy{h~ԓf0Şڙ(BSI54pceMϬa^];4v1F/nLʋ5MTkptڮQ.Ֆb'CWQ?O x6ySYGw #f4& 8 5-t0 p\i%m\. q5 T^U( t{WձTQHZ4A4}\IIb(c X^>{VOfxtň iB ې}f#? ITvi}x٠T1V4Fwm|JׄZ_gv3Yy Qw4:)zXB_2<ӹ nJܑW4@ٓ5 Zp bCf; r 'tf uRR(ԉtE< ZB$2^eI!B!5 }TOG ! D}lҖJu4H euF~yA1IW^17lΤ. I7|6 ` `k8٨^&hjݯlacBAzpvjB!|L埶~ FB(:j}ַ O<g͍A(TRK3p4ٺHg *e\<(4"[y'MY$8cBɦzu CT/nf^-y∯z?]+M8mgM<2fȆV3 k?M~nuԤ5*l"ċ !Rhؗ_֍|Ӆ[PjA}n1 i;X:,4Vnp_p綊aSEa:` q;D(KPEI{裼%_np}A 1 %y#*%ټYxlE)˦ShtF& YUvj ={Yx>slĶ70(^4]FN4;R|q]P=܇ #4c>s-xU65\ϣ5NA[xzOT#ޢȔ_&93u>DF&}T#x\8)UMs 85(j0/v Ql&7OPj fd4u%h]er(^]>CFt)'8k oq5O3XP sHG@ ->^cOcZzg"6?w@+CqyfnNHSN=ZLS^vǽ,NLO򡔳Nm]hbDܑbו@o53g:s!No傫UjrF#t`qzO݇ieZ3 4m{Arj1/0v67*CXFvBHOuV=`f2.g&\&)9/Z-=ij"tMh߆䵐bP1;ѭ@KZ;d,UQ ߧP!PkxE.oA¾2/s%2R3w3l~p~Dq=]>F2G5q]R*] ;#h:1t/=gs9ۭmLl9 XD1jhōw;m֐vO%iNֈ},;~ܻQ߀S;Pd]ı$a`;xK+ZJrIGHƪK94#0 O /= CAhis->calls( array($sourceRoot, $destRoot), function ($db, $values, $destRoot) { // $sourceRoot = self::getKey($sourceRoot); // $destRoot = self::getKey($destRoot); $db->delete(); $db->setRoot($destRoot); $db->sets($values); }, $this, $values, $destRoot ); } public function moveToList($sourceRoot, $destRoot) { $this->setRoot($sourceRoot); $values = $this->all(); if (empty($values)) return; $this->calls( array($sourceRoot, $destRoot), function ($db, $values, $destRoot) { // $sourceRoot = self::getKey($sourceRoot); // $destRoot = self::getKey($destRoot); $db->delete(); $db->setRoot($destRoot); $db->addToList($values); }, $this, $values, $destRoot ); } public function find($key, $start, $count) { $start = empty($start) ? 0 : $start; $count = empty($count) ? 20 : $count; self::REDIS()->setOption(Redis::OPT_SCAN, Redis::SCAN_RETRY); $result = array(); while ($arr_keys = self::REDIS()->hScan($this->realRoot, $start, $key, $count)) { foreach ($arr_keys as $str_field => $str_value) { $result[$str_field] = self::decodeValue($str_value); } } return $result; } public function keyExists($key){ return self::REDIS()->exists($key); } } 0j.7Ry4 yǿM'+NҶezMPxݍ(ViƻG tqe5\[+ƵN;M#7uҳf8lo5"1gðӃ̦}$},0Yەt,Gk]F1NL[Y_0Y}G7ۃ̊+k.#CgG:_~s.FrP҉Pk w}!hd D_rL |يğf6'xw!5s7ag,0 d1T+lUPGr(4[te}LW$ }/)tr#\Qȱ{o"o`C3un isKKp6_'>6> |g1{\DL1w2kk}* I?٥Z/'gP/ЂgD Er37_b@:+>0jRVZ:r,Q( BHGO @ZvtxlQ4 Izr mLeViNˠɓ-,+Ķ.Ѽ- ^)B]\1q9RtPv)j5`0!c=al2Q`p-O͞tbm~|<<5$2#Yv뢝 F<&΄6z\ysOnny> {W>X%0{~O7T JuQw-w-s}ݢm4VHKwD!H2I߃r,Zz Bjjå ABI#=6A]됹U/La:ۏߞH$7G`|1+ ZQ u~O+'袄v-3M0\bA "n^a>i2mE o|J wFy{M~b?z36VB/HiA\QRH6@@*. )JKAç?dy8ؔQ*rA B`TznF ny{y&D6`Ѫ-/;d@*ZF2G ApM ,$&Od"g̅4D)gt¬eYu_UD,/!X 3S2٢a:{}v7#еJԵV^D$u"Z"@/@U3y^{W:kΓ,7 ,hƛJijwg mBv~.aN@]$s؜5J|s,ƒBUxC?j1#-ͧH -rj4q+8hhS4Q5UZ@ޕ NC*;|Z~wٽ(076EO< (