From e3c64d4384fc657dbe88969363ec881ea99f94a5 Mon Sep 17 00:00:00 2001 From: Simon Let Date: Wed, 18 Dec 2019 16:13:57 +0100 Subject: [PATCH] update examples section --- README.md | 62 ++++++++++++++++++++++++++++++++++++++++++ img/screen-recall.png | Bin 0 -> 19412 bytes scripts/install.sh | 6 ++-- 3 files changed, 65 insertions(+), 3 deletions(-) create mode 100644 img/screen-recall.png diff --git a/README.md b/README.md index 9eb255c..23e58ca 100644 --- a/README.md +++ b/README.md @@ -55,6 +55,10 @@ Imagine being able to search your shell history based on both the command itself - :x: allow searchnig by metadata - :x: app contians different search modes +- :heavy_check_mark: Provide a `reshctl` utility to control and interact with the project + - :heavy_check_mark: zsh completion + - :heavy_check_mark: bash completion + - :x: Synchronize recorded history between devices - :x: Provide an API to make resh extendable @@ -63,6 +67,8 @@ Imagine being able to search your shell history based on both the command itself - :heavy_check_mark: Be compatible with Linux and macOS +- :heavy_check_mark: Require very little prerequisite software + - :white_check_mark: Show cool graphs based on recorded history - :heavy_check_mark: Provide a tool to sanitize the recorded history @@ -103,6 +109,8 @@ curl -s https://raw.githubusercontent.com/curusarn/resh/master/scripts/rawinstal ## Examples +### View the recorded history + Resh history is saved to `~/.resh_history.json` Each line is a JSON that represents one executed command line. @@ -113,6 +121,60 @@ You can install `jq` using your favourite package manager or you can use other J ![screenshot](img/screen.png) +*Recorded metadata will be reduced to only include useful information in the future.* + +### Update + +Check for updates and update + +```sh +reshctl update +``` + +### Arrow key bindings + +Resh provides arrow key bindings. + +These bindings do regular stepping through history and prefix search. + +They allow resh to record bindings usage metadata. + +![bindings metadata](img/screen-recall.png) + +*In example above I pressed UP, pressed DOWN, pressed UP (prefix search `make`) and the command line after the last command line retrieved from history was `make build` so we see that I executed the retrieved command without editing it.* + +Arrow key bindings are enabled by default in zsh and they are disabled by default in bash because there are some performance issues. + +Enable/disable arrow key bindnigs for THIS shell session: + +```sh +reshctl enable arrow_key_bindings + +reshctl disable arrow_key_bindings +``` + +Enable/disable for FUTURE shell sessions: + +```sh +reshctl enable arrow_key_bindings_global + +reshctl disable arrow_key_bindings_global +``` + +See what your current setting is: + +```sh +reshctl status +``` + +### Graphs + +:clock10: *coming soon* + +Sneak peak + +![graph of command sequences](img/graph-command-sequences.png) + ## Known issues ### Q: I use bash on macOS and resh doesn't work diff --git a/img/screen-recall.png b/img/screen-recall.png new file mode 100644 index 0000000000000000000000000000000000000000..021e4f11fdc274fa33dfd67641db5cae7429383a GIT binary patch literal 19412 zcmb5W1yo~CpRJ8G?(Xi;xVyVUH}39@yE~1$yVJNe?(XjH?oQyN`# z-NjYqThG(=rHly^8S^m|6)9-}MT|g<0j-Lvpq`?N+Ve4W%S*@3McL^Ib<1g4>qB@4 zWO(G48eaq8*e_qepvJ)p0#Rp93&xF@m{T8K4Ur*Buvr4Ke9ve|dm)=Yt7 zEf3>7(~GhVDF5zjd27ST>#WX*c9h&s3>N79(I~#=j08L=vp*#>_-~mk5?JkuN^yjd&)Oapo0pB=7FV=kwugdz(I5zE&CdfP<^rdPiU1 z(j7Ok$+!>>N>p+?mh`a=_IG}HZGDynjQ>psPD`eh)i54-+Yn94f$Ta{w!UohA8iybsd&W|DdHG zhaq}Q3~_xrJ>e^;z~~icI2+fK;ci#Z&dWPbC&A1&fWjpoY_sPMx?I==YMVg`YvD%E zCjDw(2xnOnHGuG-+^#4uKO8qe!Qg1eRok#S7e05~hQw1er!kYK-1A~mi4#jfhjr3HKC6d3oK52 zL^gG3O};_2&!+N&7)cTr&Q_O>b(h7_O!!^wY|9=uJil_t%K>QtO~-C>$cW;Eyuhr^ zP8=fILuLpS;MN5F#G67s~ivffi z`>)-jI5qltB&Hn$E834Q@Q4*{stYqDzS6=mP7*8Uk;!|~l-+x^w#&>y zTX1n)H6_yPj4W!U)yZ5Pj=)eRl3KEl^zaJ#qR%(HA}cpk^Tqz0r#(G(LmhcxU7>zy z;}l$heI4q`2=a#)qM-$X{)1uX2{p)W_Gf*K=BzU9%D7)%Cy4JjVwv{rOCJB$pmg`M z)q%Ms!9&2HvYKq!u3EO`-Aap`87Rf;VZAmGXB_9g>)@1EaiHC?lt3dc24;>RvPV7> zK}hNVlyMtQvvMkkE*nQyqXKHxs(ex|C^Fv<+Tae>)4i%v14VG(_dRF5Dw!Zn*QzVn z{570bln~Hrt{*!;_Up#|Q0Utd&h_j4z}8bmx_;=QZd11zA(Lw4h{T%AD4R$GknW+$lfncQcU1@E4k=U8zDmWh+tk^am( zx|!Z--|HcjQ{k>eJ(d$)o$8~Faw&yXE^Lb`*XCz2IN_~*!KQZ7W4*zzEe1@0AiKGz zZcUo+= z8PuW|O`J2g-|GTW5zHbhW)3r9$R8j_p*Dd=`E$H=W!W$7uqkc4d@;-(ya&x4$ZQ?ydm<{n4|=$Yz>87BDttpta=}|6 zhDuhwrj=^;RXM3-V;|m!X2!sX(!9#4@Y%KC@gpF|qXiZeo=fB&herk7{m4xKl^O2T ziF!B}@_=o&cYMg;&{T!`kQ4nu#x7&u-?8!fs0nQZS6nxLt5B5XAaNH~Mm!xcK&2^h z;O$_e(^Kn9OH+11ZZ&!_Il675a)*`Eq%s2)L~ewXfYTcV{Ievlp;#Kf8_0UM!P$F0 zR0c~(OgVY3<13(^3wxs_KCbHH=P+)lNgt`_ZvM5!ig0h^x>pMJNEiLGxEb4Ge0%W` z58wTQ^6L{_8Y@&^MO#t=JJZzOdHxS`(1I`b9F=paJ}En*a3vopqORfPC-q((nQcA^ zM9uD~*95X8#@8G@#U=Z%bMY5 zh}>xAUyV-|y89sDSW*_94I>vU>Pnsjs~2=;$}Gw$zdmxJ`dE-`J(t3M*q{%)d~qy5 zot>#btx86|+nF!$<^bOeXjUP(;gCEZOTb7nv={hc0n+WY9`RQtw#ShcM^-z=1wIYKPSxkOF!p48|q`Z7}X}_={`?{jyXM9VjC1s0}{f zR%1og?S1}{{K6jmb(DN}`AbGyZ8>fjY|Kz>#_&i>_ot9D#_!l(VO|QwnQ%*$g2ej( zDsS@Y9S|4GtjPRldXB|O;cc47Db;E~>N&_C$ChidmUZcI-6L#q`H1W;N6+7mU}xI` z({V@mJfm2^jrd8UXn%k25d>iI_qpp>_A9pNv$=>&Gi=aGc!evc=%iODmH>Xx$Jm#^ zhzSw2oWALlXzx*jGPbkslcS{=RP~w5&=gh}YZ(rm2NT-DR&zA~k5f=Zr9|<%;9mXk zlSnX$^5_ptYKHw^c{lO&4C?Noo9erwUG3bV_{-Oig4FQufrT~F49^N6CiH|X4wxI> z77X+Hbni(gO-Tj}po}mQZg1bCs$hR*Nv_qVR&M%u`>(MtfC_@~*G3IJK|7ABl4RS{ ztO!t8ceaTSa}yX|sNo49`#Zm6L$!L+O8Ia)uM^$jZ04MV2z!~Sjr>=!YZ2WfFvQC9 zd^uXGb;px#0?16~+5ESDp}A(UCN;)I>$I;H`5g%N9~tSisD$0P*p+AebU4QVNSF@IGtpwAYP?-+{`^*46Y3xLJu9hTk+8hCf+ zsunNb?NsL%kTID=j&chzWEub`t?q8iI#P8LoGLbhp_5Q?15&YM;BkF95n|V4@VfhkC~AcmTEkTsW_v zZN=rFyC-oG)_G53GQ0b#G^1pZ{mMIEc)lLW#EI-1sva117g9t|>3xC)`&}SidX2_M znAwU{g+ zHZKoM|DX1OqeQzI0^3{nKKKve=x(uArT`xWw8C(%BX{l+w1np?6IPHv*rJa!Ptz#4 zb@x1yg#1F zdT$gXOPrT8g+%xKWH&M(wMV#Lz%{$$ugdY?s(dGKC|{Lx5bs6rGUl3AYHvWtgfrz75NTZp5Z_qR69_Zx1LrEy{!c?x3WpwCj=tj&!JW z-KBk$X4kIpkbKI6n{Sy%=7IB2PcyagJFdR8upWP1^mZZf2wvrmh!1|nLW{TBIlo+z z`rGqwzHk{4sxKCe`SdRLBP);I(bJqro4#Nw*k<=Xpuv^5(Kl$$gjv4)U4u{5yxYPw zs<)i4$4jiH2f(#X854Bd%@p6)YXFh{)+m>AcWpt?zs0mav{FF^Ey9y7;a3UP=8g^J zjF08c)P6WW(kICZwhIZEb+T+ccMWYzD~H1Mz)I_jEn&9pqPV4=vz;h1%09Hs;q+Kb zE_iLToLsD9FcJQX0Ji<@CQPJ%B)uAs~m=31EbfahQbHbFBup)k7i z{4T^w2fjk+=2ifSq-Y{;XVLf-bXrQKB@d_6R;4aA64^TqFYV{mDhF1-s`W9lCn1k- zcA7Q9BLhDbXtIsdjH(<2R~5TE4aBmi&*YxP^li=cKo0(3NLBYrd44(bR3Hya#w0Dc zHiKj?>oytmZ(}|+aJwk`B~}!%J-X*Hks|}~y>**jQCW29Z-m&~lhbAe+DZSZJ$YrmBBdldP$UYgAFP?+w@o>61 z^`OC*!bei#i>CYvM&V_46&v0?9qz^I*tCkK{L~nMrQQ!ghhJYrcYYM4n5jQfRp1vw z5&EY30BBqarK-8P6@&4X*c_I+Md6&+GrIkf~G$1{$1Rq;xe$igerO0G*vC?<1VIE@bRn zM$37o89}EP*EJX9ykPSmgw5OU#W1S{O3N*g(|FB^S#i-RD*X*UycGr}*W$M|%G_Fi zv<|fkPcoj(<9DIQ==?DaCYL5W^etYYaq@iL`KdGIY}#yaUF3+B`8qZ^NB5DkFuhf# z!WiIJ_P8*mWG#}#61gSGj+nvM7XV%umW1}vTSL!2YXK#ei5p$u&EA4=aj^85h+hm1 z`xfUFXyU-T>=FLLRwkI)-%CKd(~Iyvab~6v`Jv1AriVnp#~sj3@r6ZMM=fd?xVsbz z?9o{F?*yYY_XmyjQOazC?DUf%bWG9+UNSt#e$8}u`sdhl z29RttTY~=c;jJ3K=C{hLQ&gs)FHKLk0K@3&y~FqH3bnsr%}*Xy`tKDchzJhLNc*?_ z!2~fGM0UUb^YVY$1UK1rUJ?qXA0^MBveedExs{I~GT)&F2g#0#XjP0(g&y7Xfh&T; zm}VEcFoy&HPWx?T`dgR;x!a?xkyVCRk1jX~zfUa6O0x@Xv{%w6H6)z~1@8LDvSLc| z>dUFF!>nV@T@?ikM3=7G`Ql^zbfSRum8TZG)gd_!y2R|*gP74#8=m5R$LNfqE6@ER zPjQpv_7rT{x+&+wmHc`#&RL1G5@H(rEX1-U{Y2p)`CHJ=*_re=QOeaKJsIizsi$}! z$%8-iN$0QoA76SZy)(@_Q`}@FNp7HVoP5-zC(yXf`8JWTb5tCdprR}DjV3hg2di@R z#zm{6-1m{9v|56DC+G5ia|Xl&UIc`lE;chWaA%gWD>a`OQ+F=gdG6Qo1reom@wZKE zN$x5PIo0Fy%4li=rAgb8=pA*9aS37`oh^q@J*yHG-Qpo_XT$}S#m>#?4>fH$W?U}8 zYHdtwWVp>A(Tpu=uKZA=kAq6JVq0lk)DsJ$z4H_oJL)vG=tXCGdry^c(9Nghj|`DTZuX6tPAvgR;K06}wpEvz59U>i&bBHTit`rl`=xGX*mGUW zZb-E*+k0|YN@L|D%5@G;Tr4|4!GxQt5!|cbM`enZnC&LrWLlb?AUc8C zs4=7ddGcna4bfiLEi|OF@&Z8PMfTrOW7Ol6M+ zEm5@=z=)OW8$(2;hFHjK#`Vgn_F{y=Dmy+F*}x8xFTgdGMR}QTPVi9)shAB~pX><*IftR=AbD`F;`d3iv)2oI8l5GL*=scb^3gzqxp`+ z5>wjlBpiNo)R?$d=SjAXaQES%<#VLYNDqHjpKNkH!amjEQVD@Mk1v6tW=lWq;%-xs9W#4V_>3sm6K|& z#slYbxjb*D1wodmrwHBahbQbyIqjYX2mz+-(;Q)2rq~?~jNI(@ED8ZQz!W@|3eQJZ z?BHAFrbgC>e?EcBTrD#%T^eM2%op>Ye)d(?^nD$@t5tAr?8^T@gWonRfd4zu5V}_{iKX~5UB(!6- zVkr!6ac@JzZdwnnopdQS2PH)@{0|aab)TL_P$)UxJoZvnu)KITi8Ts6OS+5dsV&;wE7 zqBl-X*(1XnW_>&L!0>1D;J<=xTJ#1;k#Ee|f*f#S3W||l_rMG+I`e*bd1MHyEV8)S%O^Fn2UUPFx4(pQLbOKSV;{;5nj9tVB^308Fs40fLmNQYXudYb}+?ZskDXc z@ShD@YH`*0U`itdnLr)8}QZqSj4 z!0BIg4x(6U%fC~Isb=IOhibARFE`>!U6%FD6bW#0p*sa)pf0U#!223WQTt7LO~!5> z#YW&t?!?suT7Sgd;8N71#_^XSLXx@PlA?Y*az1Bk14ZL|(EKa{iHf539acBu+XT!P zFWS2>pWj#xBKt%q4IDNq)lP=rq{#%ool4>EpO!rB?{TdfHnS(@z3P)PGUs2dIR0vn z-Iwi(=&p96h_qq1S}&ipnP+5=%G8++@^C^sTHKY+y8WQzPIf3jIN6qxN!Nn2QSVF$0-Jvu4NJAiJ;{ZeQ}x*W z=rR@w-rbIeBVqlpMPn7{Vs;4Chv4T|a+WG#=BLA^KYO#|u;VIleU`{gPdiw+mp;O< zVYSI@rne`3?Av@ntDAmARnw3fR^ch zq44vEI57)_IGjuG9_QH|$9ypzf#Jy`44l3r?J8PWvS;_gF%|sbaMji$g}3I5wd4@% zW1Gla69kQ?Krvz#R~D87)%me(%nGaF&k`<3)cH4wOd96`(}LIs+ClPp&=2+Q8EopZ zjATDYRy`VFG1;(I_@M~*CLn)}b`~00$DekV!7DfNgx8-MD0tczv3>rqu+vNTR*p4XSt=D9o7l?ygBg%;I{c!rb{9g2WH`OhL4Z#y?F40o+Rsvi$uUWHr>4bYtD}V?^<(7l`=Rvj1N$q-}75k`m z?K(EAvafMEyUQnYJ2hx`;_4z7H$_YXgZWC|d{g5yLL9i2{>D(DB|lHMnA-YK zD*R-N>4ZK&`!H!|CwLfL2c--g2%y8;>R^ zvItK*4u|+(usV__2=&&!J(*09SoE=YZnj45;CZ>$ZwSBNskW?*9CqbW76^>P-=R6@ zpaD9xIqHhC>UC!q=ow|(G3JlTr+--pdq`p`i0wwd@=7}lK0r5J>F8&7oTR=DJix&C z{(Egf@cVMYApxaAR?|%q0_YYPO;vX6cn| z;%3KOv|9noydW0yg$igAr)go0tHmp)3Qm9*v+YoZ5bz@RL7yB@kM%`QFpNt*Y!@T* zbZ71GvmY=xyKj$#uS4p*ZwP#_+04Tf#ooOt>qc0;znY?Yol4$DdQ-tPjRNXD6-5G$ z%LnAV*u^vuG-Jsvwb?^6g&x%|d>vGQ@8?xfJS))GU%^oq2l7g3ay<{j+UzJ0JYZ>H!p2JtC}AngSk1G`#+w(8 z&yV;6%SsZr1FGg5Pvqg{I%IYiWKY_!nhD%Vt{c*8!tbt0m08V+lgRXo+NOu+TrJDO z>+Exf0EB>eie3KRU^YZbK-z#kJBdRFhkUZ8g^*5~OyCRVewFd8l0mnPD&oxzYoHX@ ze9Hi|lA4|%WTlo}VcYX? z309}I?8WWv5LLTNoN!Hzv)3-{hA6Kom9vahYa`pXa_69SM=w{uEBQxy*6lCLZOTld z_u;p!3cRgJ0!#+-+&fczj|EdYmgY;54ovVLlIWUFg3|}(s*dgRE1i!DWjtg(gn^%T zp=05p$#xo`MCd7Vj|sF1Oq;lOZ-XI@gNiYp9%r1=dUhEfdnf63(65F#LmDx;0|A4F(z zw^;|2O;t@SlSW3>deUk|3F-I!-j+>^;?KPiO+=JR2hRCZ+j{ey)^R4&anr2f23DsW z0RlbXLID%ai2<_aS86!ZhV?zWF+Ybowije!Y1ZLUfa}o|eGD*?!x*3m=qmNYWdHCj zoQG1YVP$EdE^j*78$^D1VB}$P8+7Vn&MG)%d9|m>wv?{n5X9p`KhGgcvD`BgkGME! zTN9XFAPAGl66k7JB%agk4 zRaZG{L5c;-!y*#>SkgIhX)?`NBj`trL3J4hF2|akK$hW_F43+ed4FYmGL6`p6BcJGUDv|^w(f0m3Sm~7mIf{0>^8G3mKnw?(qUk<3r2jtC% zgQ6jmIeNI9d~eRCI|rxT-^xY~O$dL;R}J72jmj_R-%WNJ(?y@QcYzjUm%jcvulTq> z3=pt6+&-S!ms`KuTjKo6eo~gcCf$l6E(>?RssY(fjA%>U${&(>?baLMxa`DYV&$5@|(}6M22-AyH{e7 z?5J+=5>VFzD$B|0AQUW%-7z~JeQwQ;`U%77L;7B_({&XMIQseO9T{&19-ms2OM3{} zfYEgd+bMQv1AbFGKX;%buQDK#m#rbWHBEeWqlY?OS`slj{OSSh{C}(cDR_r|Kc!{a zP(^fp^;Bt5cq2D$U>|Ey(bxr!n9qU25q=7o+)|$N?QKI?Kar)7vnhrliR`*;p$JXe z2rMkaEFXq2)&kMtFdu!s-a9o==0vBVY^Ol7>%_B;#2V?ywLc|##76q;F^;eH6xlfJ zNQ|o2^MEyI>%m1$v`JM6C;%bB-kc2Xo47=hoOH5?Rv~ zJr<8-piK;=%J~p4JtZF~9aI6!osFN`OPnE}-ttfd*Eo~#YLD&&I^uQX$R&zoIk(P} zr5CkxLZvoEX$U&pUsvvS2-*NNyS6~g^ z%?qsD(9r8}`%BbVS^z56bv=#6f-v@*E$CY$=2O4Gk4}$cx zEW2zP^lcm6)GmspJz(z3si8cKz!W*rEgn`BWX6pYYLV6*(6Sa^TMQieO&Inj!>Sz+ z?pd=an*U4&>}x#E?uT;P=RR^j@%Co22II1>-SQERnHH6wkAUk5OpqPwqTbNlGnN<* zSaRD~fsff&8L-mKZH7p1lqkldS?ei^I!A;;Y-E|cZ|R75ToCTRZ9J`K`wvX7>)}JC zy;hQ4qknlR?kwDLkPo4}U$nE!JwPB#B)qoQJ5}E84507ydXdG)ClPKkAzExtnJr!x zq;o#}(G&i^Lc77smH)Zg`LGdwP(`WPhU-=MW&igoBtCO!5`u2dFo;=j9+&ykH=>5i zHW_6*xVUZHY?qpME^XY8z2!N?$wzrT&GnBe3SK1OoMhk$&>z*Nq;F7bMfBpsZ z+hs*=;YuivId*rv4IzhD=qto8ies+xPo;VYj-9k7e($G*%NO zJdem)8FZQcB}r(r-%!vN>ql-&5G0L5`1R@mU7U?WRvC5;NUc|Z~%yjuE| z^CuF2WaDI0{9`l|scJOwd%k%AExz~@Dy#J~1$3XfdqNNQ<1{knVff?CwTNuu?04%& zGwzGJsjCydJ8wx+Z{~C)ZktaqyV34*?)l$}s)H&g7s;>3vo-*x^q#`Vl6Quzgh}t- znDR`PcSD@S*VmbwrkVOi+>kNJ+eKsic8P`VOvig2_BC$jwe8PNWh++>YQ+1vazE&n zPk(HGKv3kW2ztVAf|Rw>LYnSV*;@qM`@q%Z@12fM@5K9+6VG(wof?Lss8Ewiho0=H zzg!aV1GWRgp_Fe<*eoBdRXg}{pUCDix9**bj&ANvkX$r8p4l=ojf$RjaL;#Z4y@(U z8QGmgQVx$KI8ZB)lvwYUS9caY1WSHYrOUvvEVFAlOS$gT zaln8U_%r!YHXhSip5}|{r3gK~@{J?aomVzlcFXey8RK&WjaMXE&%2=`@EMV z&~HpS`0+`Rv;$EBaCWbPmOVZ2d$0S^jqC`IoWHhk5JN5~D=cW5Ug_qVKAuG|yyh2j zt12mE=LyNVf&I71gFkW;W3h3v6vSDR|Ep=lJ*aAN3=s0 zv7V}kKJhSGo`|7U;p$({^x)Ig=gfl#0V*CRp`(^^IjkFi`@P zu0^%KQwCexDmU9;uu%}Uho>}U4@{c(>fG}t+VV*XH*k!BZLh^5KF#17(AoCB?Gl9( za0`{IF{^Rtw)KX&a|5sLXseu`H7)N2RSFf|j^G$_zPy~$F6$gFWXSiF{tE@}gC6>) z*4g7rg#B4j|LfHG*G)zSoTg7^=&87e%+l%5qrp#4!e&#Gr#S09y;|QAJwZx#!=cv#h z-S$;>{|^;%3LX~<8HoP*K00$-u#Zz8g$Guh|EPt}g2j=<0wZ%GS9M&J5KtB|*DLSx zdmSSb@V)}qI27mc;Ghg;?s64*xuU1ii-2|n`YM81%r7ia_luDj_nA;FXc~9+QF$MUOo0Ap z8|LZt@Y?@ESsg15Xr)^NhRoxy!(hdWlC~LC^hVT0_bGJsP97yE3e9E)i3*Xtw91**te~~bCfUMul4;8P4vrS2^(qAgx zObn)Q7nLO%K1;-aL@JOwv`xJG9ZK!@FGqwQ_Pf&Dq zh+%W5`H2MU?F1$G(!_c5=)zHIRuCVmego_6Hfguj&x${`PeEb*Uf0G#AGoH9zq4Ic zzW#m?G(y80TheNHEjdH1x>AjPYWAkbKaX>tdDEXAI=`5s(*Ue3!iB^vtWbih=5k7Tc13caDLUCe1Zu8ETU`Qa#JP16`+jRoLJO>-)GD{FsdVgjjFm zb({*LFwIF_5Mn5NtdO?FNPrQ48=JRR3O>G1XRDl(ui<^Hh#Z^{IitQ-UGfflxx9L_ zO2R7;r(8(1-covZinDuei-_ndyEubbKQf0*l-s^D^k&82wliP040d+cRR8hNf(^+> zYV3@>&R-*Y~u~9Wjs4~Rd)v8^sldBwGC7{ni-+| zuM?rJQmDcr=UxJMB1aKyy*4FfIG{B!^1u0PkFMqC>vV`;%0^?cyoH*)$?o|Hf=Xaf zi`|HK6Y38u`yJm%9bRfFyHvno!v&Wcih>4mV*DFu2_UlO82>RfKpUKuEb%2bwNHl@ zPJnY%tKw8+Pi!vBA?NjU+%gpUyhrsquqn3;$aQs6FhA8QU-Evt9Yo%t+*^{>jp248 zA=|_}($JQ}5c57)+qs15dz<(UzgZt!dr1oRekw&AEa@kvVQ*Cu0^t;2#a9wS!?>T} z&d9AiQyzECU7Oy!=-ut-@iTUkKzRnl*0j;{no1%L}W2|IQZmy_nh$*7#W zoePKi2B3pArvh_Q*Q?^+B}t8w(!1u1dNW~#ASmm3eW(eHJbIB;yZ}Anxc}e$!`_is zq}jj)!^3@FWyM=gLge5yul`Woe0??5Gs4SYCtR;akmd8;u=ei5f=gYAMUdQ&-~ZL@ z+fm&0AFdAVK&IwXpokRFBMBd~7yq5&tZuz8_04_lH|#9R2YG-Ks5@u4_gNbuqA#nJ zLAYKXb>-r!Y>=W|VZ3Rbt?2>f=|9TeVxLQ5_M{cpJ@7Vq>lA*C6zX1{Lzr&kK%yS# z@q7=hxo1O_OwPT34=-W^`ZW1hN1mXq5?b-4*_pdG;0ZMCe9@3wi49n&pr0CX4VD=a zn$|9tbwJBSA?{WexW8>uRJQ52JgX~MV?`RDOINUUPhHscBTHHMTHxr#2|WuLS0yim zhKDc*LY)vm;>#w}nymb)P2>zgs7%bc|67iDFWMH75J4CX<;wwxMd!!p;fu|9Qq z@Ej4PzX0cj_6|9m&`0)i0(WpuS6J>ZpsRu?)|-8p$^0zbvDhl-O#AL1s;4uNxK^tlB4-oO&l8p?pwaDoNfWp!-$a%qY|0U&*D76S*8j$8aV;v%sqFcQ6F^S%`~SQm;VR9Ot$A?+4boo z7}X5DFmV0;p@9?Xw2~eLgBR?I5ti($wJ*2b1x0LFCH_>}`O&C0Z^lFWrlF%;A3Gs% zBDh9$Qwm=Fd_rpvrZxsmY1wYnyomGz+u3K~tlf^xTv^(jx8>(S1G$x*GcZh~aK zcIQgDx##7i3f={W-GdH##r|`b87h*uS=>yFd8QdkT+FFqjDlb3*zLWD>>tzh)NYmb z@Bi+w-kMvn8m~BYs<{3<(|Mubv#ODqbRhr65o1BEIi1w-p#}559QKKT43@`e*<%I} zVK&qy1q*x0n?#4-r$lcSa?~U=5Mot`0%zJR00rO!5KQ$yvamz<3+MChT=YgP`L2EL zBU4VcMfg?u2a9`_%uC|XT9Mk`+WjUXHAR|1K@T_@xa~NA%0VgMGn~5)y23DY@N6ww z(vc5;nz|Huqft%lTY{_&`SN!qIuTi8~rY z4uc$Vb6XO~Rri(-Ytiwo6QQGbR{w+Vapw#Pg4ab{s%2CB^}W@5(k;zqyb%u}R@H&k z&yZd?o&(wG0Pe|1C+KB-IpOTobFnkMmY+}J^r$$j^&T3;raAgRIC^?5T+?`)aU2zgeNY;z4ATM2?gKkg z|3aRH)rnLPgoClI#V^iUn?B;fo1m6R%XMPe3hI;aEoR2`gxd9{t9UKE*ST}bzCP+P z0io(s*8%@yj*4obg%QP?;q#`T?71K6I2SKVYL^Dcb1pHny6CEF^=y+5pA`DjZ#2oPNYUcMUr@x_H?0`Ke`;nvuGv1YNt#0uOOu?@5p ztZb}z4@ju)D$=oV$#TziF{2sIEv3cLH6ton>}SIdURD}{{HrjmJui2lD`9Th{kbkV z=7X=3ikXYxX;gs#@@Xf0`(oNMXoh9MSWdV^1OD;N{V8-_KVJz}m3_mLmxoZC|1{9^ z9ZH>2#0jvF6ddudNdqp(X&cC`+|j~`2xIRbgEo8%aaE}NGT}YpPEa|cYS9-*g`>DM z;D@fT(nEFi&>{&`_3-fouYUN@@}IhAsuwV~c0&Vi;1VPjPvt>hlIwYXdh2a9M-<3j zwrE*1X6o|V+>nn~O%Rz2C*!X(oBcF&zS-bD+88ua89%xV2aYODUeM z7N>tVLjlUUOIbyj_rh{rUBJw3dQ?aR6Lb1?YzG#ei@R5f*_uU|Qxpy3q0pFv0Mr?g zSkkSkjcF@ur(q+X=^Ggd&z9~=Uh7_aaE$=f9Z-=6+pIhZp`BIP9@eWX3@A2Wg-NkkMIF8UW1Mr z)*EY(XS`la!H<0sG`Tj3h1-E3Jk9v40y-g?6v%lDt&rCuyc`kuiC0?1UilvKJ|hGulj_085>$x_N^56BRc6LYuo8LH5`Fcy!gNSe*hure zOSeve9cN)TLUt>SKN!U3SxGnVgn#{N7bss<_!5Jf{gE8}y{ELDJdKi=pt8TQ4L_I+ z#k(+bpfkx4YVkTReC$4N`V^#cE-yzRP`|4U^4Ey(sRqNL2)}UycvK8@1)}&=wxuK`Q)6mv(~HN z#8SwTxX!?V6(bzmS7V#M??E|2{H%G6CjT*mD^!^lID^wAG8+D|y_B48-T;;_7bULL ziL(yj;&A3M3BS0Hke$O>&HR|gt)$?57LANAnCoA;kn^xJQ3(8e7k45`Vn5G?Em=Ap4-2vN3 zqjS4seP_u{vMg$w2cIr2cFF#JU%ewu|7jsuyDMucK~(pn9^Jh5fKAru%PbQ8C*+v5 zTWRui{#V3ivGBiyEo_hVX^IVt+NyEmLH(6cATN5+10AH}GPn*FH~Bu3J7i=5`XAT% zOqMioype{dRSXzJe-@*14e4G!R2SKB;WsTDVfOsxF8~g}x0`1wQSC@6dn45LwHq zy}9Z36QA)_m$1J(x#TBOR{Qajf0O?KQrer(r+g3U;uab{%yY+6TnLd)4H>GwQEzQF zqM{g>2Y_}!Y_#kdT6US{j&MY$sDnYFcwzdjlc2bhtwMbHYWeYu$`TLg(oGAuFXeA; z0})KWizB3t>~D(UGbp@F_MbfJ|A0^}->+|2#-0iP14B9BWJ_l`@Ar~8yj~^gqfh^= z8+J8?66|OXL6;-{$7^`S4e@&OdI)FKfxT)A(ec1nT?2yKF@J8Y-x7%4lLL)b#Tul0dm> zS76doq7?-^M&~)LeEPA=c5*yZ;L4HMHZ{cdcjF<0pCM$sA)_R{kNiso>gV2N7QNVf6W~up3*rR)0gDDkFF>uZGl1DKUNrQmVDc*;=6?s z7X6zXyueOT_WNdAU_UPgnI6q%$+6zpvOuYA? z?H08(;AjKD4ql}Z5qyjKWxK7~l%R<8)pJnjk115{sB_@FItaGYhkRyjk#a4nCaM##& zK&d4?cz#k@^+;o1E6Eumc9wh>1uIJCYp;GuS3+I*h! zHo%--S+CaH*LmBo{d(XA=rK1>6|OE;D!lQ(jhVGOKiYlswof7apqyv zBcbh<@gQosdc6$iA}*foLtQ5gL+FAA;reQkm!4|P^iNRwqsirRS~1B5WU!NYcr7l~ z$i$w6NYx$zk#f3AP=T%mx`7S^y7-~&`=pI^(^(Dv;>!HI;d;`_f<`p@YD*9DI&{gX z6tq;Cf{h{xlezm!%g4~3P+Au(WtMUFBqt{Y^X-9G_Mulc=X3ky ztw;7@zX;D@{*-oc@1qS#Wd!cntxALnZtgw8cYgsDb6_ll14K3f95%HfE!D>}8ge;;!pG@U z%l!ZkG`tRmROa!4)w1sIU;T>Tz{fs3c}p#k6-McB(M-vcTG0Q*6Gsuhi{xY0Y~dXZ zTw(*7Q0iTF@s7wC)?MG*F5?_L_}+uPV88qL>*5h`Nq`hV_=qp8pqY8yFGZTWc4NUlkc}u~BJl}5_DvdedRfatJ>Vf4tzH9 z-7MS}+O|d{Z|*tfs1x8**MRplcUJIL2(b zg&mf0=6GhXp05X~rq){{&R7|qhP+QY)gv8j7@=lq%N&O-iT;e>MEdt@BMtn;HO@N? zhKJy|%+|lo3O75T)S!-w=1Y9Z^5V~{tHp^lB@#V_nKnKE2Ix0NN~~-nezf14_WhD8 zu(Q24mTx)Vc)-8U-F)r*xM0!bz~rPMp~8Do+%->#VeNf##46eKBZ9>JRcJY*>-w0{ zXFs?Z-_{2yPK$B&)xsO76G|lpdBj^CY z*vDbf>-eA3me2Q^p*f0lmKpzD2mUD*Sk#0_18A4)psnqqr*nEght;o_2|_yw`iH@5 zwS@r(*HnlLPts4ZZ}$IR044|7_#YW}t|2Bd=E7b%ef$@YL>x|eJPe;Wj5K#ShPx`5 zyQUL&b2auu6%d?}JlFbMdA$OK2vb0COJ6j9pH zHU={Z_ZMQCABQGYM^v-|g#kD-rKKuU$#@|HWy~;^rr`@y77Qk0(m}mx1*PjJy{}S% z(vAiq3vOG6aE~8A!qa3&QEosBQ*Nd{X9fdWV-Qc1ed0aq5FRUBMt`&*2!bF0pGR=( z^G@4Srcj0+*&3|Ia-wlczM&Pj7bb!?dFB{y);(n1zX6@XiRb8Vu{Lxe8CH_EX*DWY zo^tGPhAyvgcr(oM_>Mk8Q{Sza7vF%s;7i0T+DPo8TZnma106NtK84kT&kCf*p-oSM z#*6jdPA7DJ6^ikfW3FtOx?os4kZ0H?yteUw$yhs%A?dl*q{W=2`}q?LcX*K`4N1Sa zjbz1?7OwDPf9fEEoe^p11|25mtOMI{_zPOhRo|z))n-N_cG}GP>NG z*t|NC#=UQItS92|@3WyWqhF}R@%SfLKMI`_l@U!ADB7n4w~~dSDjSZY$LTM-nXD)K zaBpeDCj)jHo<0S}d;`+k{Z}3f7MO`qwlbQwszg^9kKEQip3WmV{ZOn%MW{zuV?Z}e z9xMQEKS6XTv@laXkmL@4Hi{^wd_$cMMyyKog>i5wlwe{up-Z^J`U!#{2>-8Ly;1zG z-SpS4Cu6}%GM}!%+}wtwN<@=cg3h&rrhh$ygcIAlyGSY7jC$!$DV}o@mqmdpy#)Ea zO|<;U1Kka{{p--Hmow|z_oA~T6Tf11r|hgqK3&2N#OT7$FgEPl5J?REKp#K^fR59HXo@%lll zUPam#2}9oqbiK>@Lk-BtxGSH>w)k0$=GA0Avz#>BFv@r{%1<8;Ke#Xkg?MLN)HK-E+(hHhQ1H&1T-<|7NlWL=%?+a^O2P+E{n7+J#@Z41oKKr zyBQo$bdKlSdg?4lU(Y4=_I`RBl*E2*E(QhDUxOwqF5e;&?n%P+juXirK(YresF%0S zinKYKr1BmHTK&i)J_4>FV8OD-PU1b+ky`sP)*dzSTZ+*K!5vwR1VIo4Vcb<*p=^M` zm+z)i)MA<%O@bE|D)BgmUpXbbTFEG^9jchK(ke`jxa)_apP+p#W zFI_L~z;WJ-cFDI$EKgy0`&MjTKtBiF1#2I)(*L_(U~BI~k-if1s*NNrTQnu24`&-d zn}RkYAKmy*E-Fp<at6$kqnzjgdUHeh$kkPchiqkF3u@%@MkPzkB8> zm}aW`I2ZOmK8dBi9m#k-=2e?Wx@8sGu%Ay0uWf|S$zM-2Vjr<`;^Ve2aMasD|BtJ& z>+{L2_%g-6S%AK&hSqI^FgIbwyi&R4H0>`867#*Kq!y2UMSX7_q3MY(6t|X<_xf6j zUs^)y%`x~|BF~ZyzE{V9wus#S`Z9%&CNc8j2eemC+=T=`tfS*i5Bi5!QS@>daV@p< z*3Gc9!FIZy>Oi^vMoRXtqx6*`rp~({{rM#AZw4^^Yz^}dtfS}w(^yUMY&%4IrILi7 z-%82$a^mW1>1~L(N`fE=f-p`|R8lT7-ULAq1VIplYr<9RxfKLK5ClOGgwK}