><3
zPJZ~{ve}7F>Po#T_eruZ_tL%GzJnt#*Nx$4d6jrFa_{4?X?`BoC=4UiltVE(799wNeOEyW4o}Bj4
z;?&x`v-~?SpO)_f8JBk@PJHe2Xe#;+V_qKY#0{bQyMM?v_F0HP+~&A!q;qp$P-WVROI+0++t#roDO|;o@y?{NrpvsN
zVebA%CAM1GJ2y*mQP%Qocfi#5VJYq0YTTYvMOQBE+GN{1*|f=pyJPf3GJa16tyz1y
zq-vEwwP*>_x@c(7oD>+DAh>@==u~sVKTHqIHQsiK_*A76McwMK4r&25jr=?~=Imfb
zgM$ZPoIT$#4n$}c#`y~bBi1GU7Z$*4eCOQaaEPkckKQ|cWP8T}pa`T@DGZFGqu3C+
zfk|2eDnT^1f&<~ev;*7?*+AtC{L=;*0DyfW!od4Jpe;i{>Wr%8x~ZVQ
zgVH}EtAOYAK%oX=W1tVvy%!lWKBmwO-1dhq+Kr+7V@jhz{D)Eu1G#|xAqfC30@Tp}
z{~;rRtOImxkajTD(M;?QX$oL`AP7L}hjJLG{LT%~eI*sqLUqyRphsk?pdl{-qz{Jx
zjWo~`42(biO(xA4CWWe_$BRIG2TTC~f941zra<~Hbr1aoFBZ)V0uZ70RDKSukown2
zQ?>(qh`bd$Ve+y`is`O5>7Uw-krbkcx*|eq$8r)ezRBrZ{W;YH`9wa6H=2oLU};&r
z+N8j^95odrU4o*_NzmsKdCb*RZNkl)yoe8RkweN&cc1a{?RaKcZN1W_AvL@D_5nV1
z8}{>2eMt#!xnZkUW(4$N9D^-XJ+5%vKeg?d8M{VyUuFps@HKnoVvH>g>mhVpVuC^t
zmJPj-%-i~QLn~2*xHJUS7D~FzXI2LBDN?m>SV^+hledg(e-WzOY
z&PRRthZa$0O2>Gfx@YwYenuL^DA*5{2}PT@i?u~5br>=&fa7GPy_lXxa-naiDgM}A
ztZqbNV%%ezk%?D1`(-<1Pjj(_`zLbY7NHa*&KDt@iXek(ilrvnRztYdV6G4Cc-cqo
zenz&uhK0fgWeFH>FN-Wgc9X0(9&C0d1PX^D;*#O}+wIfEAYRdbB|6c7^n=-iAcY1h
zw5|cp3-JdWoDsMniAQS~;L;GmnCj$U^cL5GA7tSx%sxY@Oj!^F!w(?;g=hwW1R@s1
zABaVuwKYHxW<>-fun;-+NVo`4
z4+GgspMzJ!3-y3tMWg6IE?NbGxpi*9oPymdVLSxzwlE-KrY#o~%%EBZ5i^s+g@6yg
z3Pl|~=J*VTYS|4=E;<@S(jZx8(6}H-rh__}QM0KBT{38!W%5hmISV$C^*_2%v+S|+a)Nsuus6n^i(@HVsiJO
zn5y;#hpEkZjzK>yt2?{B#O-+Sc$n8ULT5^gqm6Fafeb4fyXD$jL!P=ucwH3XI}p_%
z|Ac}S=OeU#MNar0OyHE!kKO4Tf7@@`f0?Hf-Vsorir_!IZBpv|PkJBP&D?SJ-s%|>-y+9%e2
zkhtO6GHGLu4I76a<~u(ms|7?+r9^$-v$KiBiro!ik&SC5iT+D
z?dhfo!YABFW}M36?eXV&b>(*CU38Z-<&L3ba4Xp8wo8f^6O4?BK^BuXOOu}N$7;X-
zRC@SMhj{V9b+~FjvjvV(@=3-z&Yl^VsEB|}%%@TR?E*JA9^0s_Xzwy1WKkSAcy~}U
z($_gg#ic4{4d36#d+c+-ktL3bNj2r|vkhRDSTW>^7#Jl(1F2Id=o)h;hK3Q(nx~Y6lTvN
z`xu0M@n>@GoMxkqzf|s$y!AJ(@4Edsa-C@5rOK}@&*S#JtZ9zeptx#u>8%?=h(Nvf
zS!ha$^4W_$Bug&69V8WY$tCdqg@MO=>zlru6u57HNnd?$sl_F?C$lwqh;K*|
zd>#?XZA5s38wC7NCnudU-%G!3Q^IVXm{xWItxYw@O1f{p->)TkPTh
z>7Q<`L@eY5#pQ5H6l1Z~W)>JvcS-D<^piN-u02mnAB7TvjZMw$v@Pu8pJ|U0)&`gy
zQS>h-yEn;T?wgYuSCwdDNJT|AE7hu{Q^Ljaa=fl4#716|?%;52Uv#MFzy-?+_F(ze
zrl`K9D+7{0YlP|@L}-{RbzGT}DkUC4IDMCS!L>I0i-mXyokkay2TQn=2?_?R&E$LL
zg}muWZ%A-55EZsYtd<{{zF;cA8|k}2)p1!;(sSC|x)h_;++rz?A~94h{tF@RIWs;L
zuinVsKVLaF?)#&wN8hoD>WmKyR1zc@~zbwzslr7H!C#}ZU^C$ounKb(xY
zUb}vd`6JSSEzUw98u^>6y2-i0261yBI_h!#L#
zabWcrut36J)&lsIzxEiw77aZOzLa0pyC^amZGa|Y5+@!()w_onUHgtDy}8=N?_CG$
z!FC#W@Fx;W#QT@MjaV1{%>t-DF-JP?|9#g1s)h%Dy5EyA+40Sve7lc)SHUDJZTRj_
zoTxuBGk2DRmvvwL#Vx?h+{K|q8DSF^(yeOnyS$&Epkt%j=x>-RCbxo}@b*#1A*@n-
zzq^B++(H
zOzj-;48Bx7@*wt?&$&grUluEqf@9V4e7E5y@7(wJP#it6&l#tBKk@uAG4XxF+mkb?
zBkQ0=d186%BNt`I(FsaMGx3hElH`tusiLWzq=PpPjXpSBS{@^vYBXtabd%gE3%S$|
zu8^_~rZ-xgvI^wXrgk{3SD8M9e`i6Q|ClaX@p8nPU11
z{%++`D}U~n0g!%)9lECDsS!6=K@F_CjvWc8t<|Z0(9|LG{9f|NvR#Yn`zFmpj#sU@
zcjEL8moLKGwwg+gTyzLK=YQ<;ljR#SGaiM0Z&6mc@4)0r85>0XfHqJ(Wu*##@o@B4
zzI?pF@AQZv4dmaa3io>&r@An_sK6H;^rMQ4Va_MfmK7pfo(}4yFo@IxXp6r+qzmb2
z`pxtymd5w5d|&;QuN@kA&=$*Y8ea`}5`{55D@xUu(SHExLgWM`g=8r7)FLzB`=SK-
z!De9gTz_TunEFK~xd*+*P}KrH4<+>MDuKa+mSSMrfUE;P2xvWEz<@Dg_9;MHFr#x<
z3rIg8wt$`k5)ZgI-~*vGIT(06;PT*?>2QDnAo_r%1I`fWKH%=)86ez%b_0@)h<=FS
zz$l{XMqv47TTmX2F+?3mFc3QeStkqa55V-Hqj*(-OpAsYzTa6sU=)G4gD24`!zw<&
z$e|iUgCZag;my!)2-sz5yb_2(7z7;tUDW{NfYHWib1JZE&o0$B&c
ze}Rw$ZVe^^Lw^J?Yrx$BlLiBSfp~;YXJ9E|1Tb7W@OaFoXW;Z;Ffp)dZLqf#n2V|h
z*9K#bVe&7iCt>C<4F5%SoWL&1>cQAwpxt2RFYt%xEZ~+o#@Jsl3|wn8ba24+0UroV
zAkdFMVE&cw^#7%6hy38S?g|leHnd0Czx~MNKIsI!jzvr+$RXOGy4q!4H>G&(HDtdeK`FB7nU&;%
zfSPIFpC%HrMF`yP%iEv0W_#P-p>5M;KT^K-n9(niq`K=e3pa;6ex7}@S7L44s7d~r
z$JWTE2L-&Vh?~4GD`(d!c0JkOrzl-3qZmOhkHbb!St;*H-)25QG^~nB=ftpOFS4>Q
zvl!EPa@fr!=tSxUrQsVp3})7#$VgmY=z(AsiH^@`qD1nj;Q4
zfvPf!Bj!?tJ8~s(WMm8H6$&=;D(2?VxD1zUnkBm=2p6xVM0g5E=eI(jqDPbB$e90egpYcfM7lk}gr&iE2!2C=D0RgIDbS%=+AimwIM
z3{}jP$E5F_HF{W4OyjcDm#xX$S(8anQhOd|L>rStY!__*{J8FjvZ4zThcqN*@ZM?a
zw(9;;Q`yXQsNEmgLm70)IR8;y?U-`!+v@ZnOs#S)qVM2~q;F3!6H&*ED4rO5C>MZi
z=;}Us?$h?q_f0FXp~BT-%l$Z0{nPy%a*ah_I2jS{O($i$yAD6xJztR3L$qga-!BvV
zwIfj;^U04xY=LQ+AdO(zG-xX15O7;Q@J+fYXYEdmxomir%KMup#Le#qEmTgtzh$HM
z>iundbIlJ!&TgAO47&%P_;AN7`l2N1=QB-FqYG_2nnVKXb$8tLmL@Xy$y^P-q`}-o
zho$rSUy3WN!~R(;fM58d;)=uk+5^2QxuN6=?4ap&KQ999fmYZm{ktKFOa#T;HwUs1
zxLQCj0Ez(KKpPa`0zgmzRscQ$3IbdNa0pNhz#g>4iLp@*W8Q-u+7E>UqdimfS->f<
z@B?T8OvM0B09Ev$B?$lwKo|G{5EK)P0fK@KCfI!ejtY1TnwZe$DHtYU0J||TFcP{O
z0SZx|MF~)r7Bnsah+^zY$>_?I1&qY#z;Z*|ouD}s_DetzCd>d(1g%B@=g@5!7@!Ey
z7vLg5eJJ80sxT);pbbs1gAWX%Fd#y25uhM|M(DT*DiL~`0M`NdVUCVKfzTXt4;?r=
z1L&v%yvE%80B{b&7~Oym;V+8wD#rovFaR66xhFJ3{aNm$zvg)Yf?~sq;L#xvY*QM8
zq;?BQ4mJU?3vUvODF?*0GJCg{PqfGBCI?8X(MSR!LThRis~k(Z5aIin$aB1qceM7#8
z+^Qwmbi-zvOM}nC(XUTG)LLe3U_(OI?U>~_zOg|=m1~-^J|!F@9%3EXW6HhooWI7+
z5ry$w*@X&E?bEUR>`GR?e^yA
z(?JrnlgMan;Q0%MXD3AVM=2tNQ@72-THGAYPxH~5*T=EZ=H<0&rMGom+_OzQ!AU#V
z@J!ojP9N`v=Era97nX)^SyQr!SD-b((@<2rLI}eV8f`DKA!~ZfZz84AXD7Z{QA%p5
zh^~j>(NK%KaYBJOib&D}P8Vl+>6<$fmJ;cdu-dYD
za(hmo@=@%{W_w9tj&+=qhgUbIV_mM4i@M;AZv^>S+rBI_4qbt@H`x>MA*ySqOk(t;
zDOXwEp9yeH<}daQa3WTXhbzB
zg%4KTaVB)E7kdY;K1v&@_CIsQ#$YtUzEUaQFz^uRz@D4-u0bxGS0%2cBnWTuUq%(R
zSCu6S&s#9jA-nHdhGXIIAPI&|AIUM5(?%QK<0q2q1K9)Nzr`4j*%~n
zLs|hs1jrm9O#nd{qz{lFxG^*ephJK(0Fn-v69IxS0Mf8+m>%rVhGr;pF#SOmvJN;L
z5ykKzF9QJ2MDGCIp?V1wOXiq2$X_5&0c8N7`EfW0Mr{^`O#oa+#R{_{ATNVGHz6N^
zoz-BZ1mq)-HNaMCu#XxuAAyb2K$q}s<21-2V52q0E^e?v8l)$%Wg6rtU<24Ajgc&%
z`?`UQj9JcQq$=i+EHHLKLyNkw5gMcqkjX$I0yS1hSU|i6R$)EU{G$j7G@eB6qAX1N{;Rw=EPFDN|Hi71mrYxqUCy}l
z`auKTm$(`!
z^P(VORJ^2=bL+ZK4OhFiD%>i6o@j|6T*tXbSGI2VtVy!l=PKP;+ttmNVBz)R?)Km@
z3B&O0DkH-#EpnGdvAUu0>_nm8ZvM4D(_Uq*EY#)r35f}>^T?gI%6{!#@}?Yrpwihf
z+FCfl;l#Us^>wQ#;~JR4v}A($fqEY$LChZe-fl;)%NIYo?)}+T1mWFY-qnudy29zU
zeM%Fbxp!D;T9)F?YcXNV5kKUc)VSC}%7S1Pkl?@_OTC#gmq8s(ZSoH)
z%lG$^nF!n~^ck1utCLT9oFFbLk!QBU%EB)z+?A_+od*U#u|;C+&fN^r9coCasLtb|
z%%r_I^0vpOZ##VRwmfySvL-7&wb60rrm+Vc>=_q0YNUiAl2&1Ewi7mp7_#s4UEw~+
zk$ov0%Uv@WmSigVnOno?M+-KDOdAN9xxW+B{+7RjFbOdV0w+XG2&E7sA!ITuG!Q%x
z*v1j{7a|lKAP_=8fe17XzYkM%5OauO5Q;#Sh1Oc&FS-}97RrNxf)+hY8-!I$!K~V$>9!&ih&|kp$KnVvzCIn9)r5LpwbjS|MM4?pJw@?kQWAb1SakUtQA4W+g
z91VNGeKANdD2ISh78oiZ!BEBTND-7sK=ccR8K9)1K?w#7l?u>t(ZGzgz>)xgKe#2j
zWd`(b5Z9?h#0MxTV6apSU~mu=dw^nM&JF^iESj-bCL@qTOhtE2Mwf`076|GnQKkhn
z6&0-p6^-Pk6#-q=HbXa08vw2hibKGa!7>76At1_t9|O`1=rX7dfrJ=k%s@g6HYEn5
zajBW)&`^*uxI0yP&yhPNXs38NuzGC7D4Sw
zOAF=DU}dPJf=S`J4Nx)-wqFj;g|h@E4c$O9yakvvs3)Oon_E2)YejH{uu-ZVTmWN>
zW*EIXTaQWs8QhvrcoFE0q1pu1HCRc|&+1S3fRL%gb%2(_j^gxX;x2J(D-sBCAF2to
z8w>Xn1i3@n}vRDzhXprqitw_P_m3WNHL2rfth4-!-}}=#Us0uZ*7)
zjF@?qBZyn}Nt7EWv&WfT!22zgM)~>e%=o?~{5>SEWlyRm4kP;FxA>G5b^Q_z*GE(K
z5H2D@f`?<-$2{yQP2wgN7l??Ml*K2(
znf#l)LVKbRHwj$E4Bv4RiS{hS*B>uqLkdtaxfH8dkc=S+2F0%F?0u5I=F-k5<-Y`S
zm!&68OCak~ujZuFcAJ^@E?B4ganx{L?bDl#7*5TC^dkx~y2IvOw(8{az=E;rqh!ga
z)#XNajd(0vhr`s3s^0bHrB?@WBb#K!@^A7R?5WmcuY#MJ^$&)eiq*sBp
zwKB3M&F(q@>McjPe(?+J#=LwdG2idCWG>~b7%fk0nM|6O9Hib4#@{!iaL*v+jvxsTW814C+ka(
zZksqBJRds7nUNW;HXzd!WA-%Aerr1=P*TSzCO$e9m(zW4=PTWPuXfKI4Hwvje3|@E
zu6pG(-+VV-sqI4h4YoAG$qDbXcV3MSjGQlc&ON{U(QCH!JR6JDho6%&S8d5xcf#Js
z+VP50Dg&lBV?yqHt)rfQx%lA!*WQ)KL%H_v$Cxo=Y$L`X%OHCq$<`@Dgi>T1`%?B2
zIhE>EhDcc=vPBFPLuE;#MMhbQI!HA|3tDKUIw#fXcz*XYL#OvF@8^9x@8|b9<(d9y
z%#_b_f1l^N@B6yG*Y|rb!EP1Y+wt?+Q}ULS%v`|?mTKjA-bhR>#8!5GtHiof5=O8!
zZ^n?4x0=riR9wk?q2boFKD^q0!e50#(td0X84N6d>}&+*NHT=ON2rmxJDr#p=8YLt
z>l55BZXC+or@AA487XhCNBUxkjDq9{PA79o%EjEL2CNt;-OeU`gQd0r!&MVXkQdJ(
z5oTy9*{{AQqDz(NX2d%Wmnf!-M&)%;U#D7O*`j)e?YB3x3?$fB&2L89Ucg$2JMr&P
zn-?X>vK0x8cNUbfwpyroP2CkQo_2(!EYns!L)k|dQt7VOb`l8Ei_c>y6kbX;zoZ1s
zrnRcLDed;bGRb>yUEK4Iw%cz%Nhv%8>rfcdl1nO8yUlMY?dreBJ*q8VTT{h|kCZTP
zoAOG3yH=TWnM9W4BMp6m_)aa4jp+=C>kZ>JcX9+0M9QQD0cLYlzxxW8H1v}H2N59X
zeoAa&KTB*D*z8ljkSq-vSYGP!Yvneuyj>FjVJ7$1Tp15Nob-PXfAm*;{ShGOPhlwT
zkL6f`VqxDI)7Wik{BwDpK>qzh{(rfk`yFb
z2q6Xh5YR@z{s2b;!X6->pq~gJQwZgR?12=Aurj(jV39`PE%-llKn)Rp0k8uABLJX~
zfUABI0u_Vn0Ym)M5Cl*{Ko0?jZRZJopbtn_BGCK*Jp_Uu&y2w3P@{mW0>T^tOaWbp
z2uM$?2fP@ffW{|?0TWPWM8E^&nu4%PMc*PonE_1$#11e~Kr@ksFI{Osx&uD|zKL*5
z7->-pWJsV#BHgJ*K@_@%yPCLttkM9(1&vMs+XjOHEEzCdpd;QdqXV)Deji}C?VM52
z#ia@~tEJF6MF`&n$|C5FOEH@~!2%v`N;Co;VcK(ot>N)eKrI1z2TT*N@(2p(R}~Ra
zRNqw=44R$*hMwkYlxD98NH?JBpwS7UDFV|dL{9@vYe!+w1_iL=w60O`9Z(!O;KU2i
zlO?AMxFmq?2)qeEC;;jsa>vlue-Ht#M*w@s5^0kra@Rd-ccYpuhcFb3L3g%>r}Ql);nXCTo?)3vrG1e
z01e``fp|^hBh(KKZw8$Xo8e3&oo)=0tmoIheIEKI$o-gDdj>gV0P2YsO$$3|5xdH%
zOo=Ay*GFc@p9|$TCiQX#^VMeYAN{#Jx8_z$DkU@E*;}2~1UHk0>f|?mQdrsX*LOon
z?fj{HOZ7CKcmL#mxk|}wiMD&V=T4&3^ME@;@#ey2AtzYc5PwoPUT|!`$;a_miS#x(
zuZ$&+3(e()9p_%l2^z0qU7h$byK&p&aK6*g$rK$ZS>nJ9JGt46JItt2`^RhI2QM-U
z^vC4acZ=TNQ>Ng)FCo}3VE@BDFQ2e7Li7myDg6aO^XrspjT7-ami9a-h5JD1E&!Bj^?cEYhwbz?7
z(3|r1hVx*8shZI&=>5iqmDc;xi#`F
zUA}SFYflOFd+P}n`x)7#t4SwLm*gijhjIwYYx4rLqWgBMLeG^Rb~|ihI1I=wlebJ%
zOjSN}I7^^n%gB~Zg0y(jMA*{ZVbH>xc)Ar~InAa#B-g}SHR3>r^5*3$G-Zz3ohE8$
zLAPXlFbyAaLyzLkKa@(!513w7-IaZ2pj?l<(8$Zny#Z;$L+EFu{faX#@T>t?mhdr$Wi
zsYF$e+STOQFACMHpjdMg7F%|=sQKWNmI^h~Ih#}3-bS>iZ~t!0PFc}Q0Z$XY)JG17
zx*1-2Lj9wy^H+ZyYKz*n;Lzd)o!D?ImHx8g3j%ZRu&_SW#R0zLwQPofw!!RL+rXlO
zrz#BUQVl~E*13qcJ62g|P5fZoS|56IV_1lOht_y&f`WpicuVK&Yw34OHCYRfJs?=k
zsif^!3@}O9)Gk;Z+h~H7TXAvEM8R1?KK5j{_oG<63uarS>>5$G^tJqpvR!_#Xz)G1
zz@qW{9gM}Bd!LgU8_qxK4#tm55-NS@tv{Epgie*x)E;bTj?)(@?0#FGEgbt6>KCEC
z(t2!3e{K1mjPWoXZ}GL#j83pUaf6b(&}JZ$^XujNi}$~~M9F5J6vieIQygcjFa#ql
z3{&(ZAgLaSCPAin%m`5!;#+W=%-Tc^g~S?yGw#b<#+P18!dVzwNamRfCJ`26$P)YZ
z%(9%N5yh7Ij*(XwvP#78rhb9ajC$h;oS%S9_wMKCRV8LA2kg-y3eU)T$EaEUJjv}!
ziPU;!BYB&>YlC_jl&V`+mp^x8m;t5t1T_D%^N3-vJ^~#TtfTgb=MIrnA$tyo1DDyu
zWgu||zDHkZ1irNhfMt|h?L$S9V_II)>;dy#Lh=>`Bk2Pz@nobqKn-ZNA)xCxTf@=+
zQihsp$yx$(!ndA%rKL@jT4$_b=*ohErSLB7=tsJdoi)3??yzU{x;ynw
zt#5Ub>hc(C
z?4ByROXqnx*`G#Q1JX{VE<8K_wEwV)S!E-oF5-3@pLSXPcduU!9}z6de%@fvH^eSJ
zx=z8X^5>DW@I=`7Rr&f2Z|*m*j&{HIaZBIrtW(xkvLjxIE{@eZpWTD&
zqs4tBmEV;_7l=0u#Y??bFG+mx^DY0qa*N1^(k!JyAMUeJD}R__XZYk{ro$4=NBf;!
zLmy?i1(iR__EIiqKz_S4ALj;Sn*`-}=9ND_5TM0)oFCbyIb5*eX6W$2&81cl|CY8b
zGz{UVJ!*Uc!VV0kw}KuUVklRr7AMO-4arVg(l>J0#X`3HaIT~KlhT|`#3QBoQCd$k
zi?U^(mM_cjs3<2M(>l#Qdc<%ni02%@gXep8666obK?=Od5t$ZY80=7u(qORb2XrFM
z2q6-{30!0iSB-+S)whNTbUbJTxDg;!b0^10Cd7vWljCO6;DtoNnWphJ;tU2BC+Zr%
z*@2HQb*7A(v>)|BOS%9~gY@pztfk2+xNPkE6DrNwx;P&>T4d?6BtxMg%hU6UyK?Xt
z4eyHmv=vzXTz#EA&K1sOO2r-rJ*WZKj@#8ZUMFtSbV>5R|4+r9
zXZVJs3X+YW{@CbW1l-cotNa9T{6Y$L-D9g-Fl5~zVfL$lmJD?ZO9(M=#V3;Kb=
z_C?5{jG${O`a&b{^+W*daB!dMnTeMmW-+&(xxfZ#elc50ndUDWNqyU7NXcTR8PkI@-3V)!)g
z{^5g;ol(t$yv;&0*ZtCP;&N-oOwW5>b5A_HT(Edq%SZRxke))bor`o1oDAzdrd{SL
z&xYb}<$L$;V0aq(_hp2SZ#oAxgx$M{o9E#7v3Bg?wqzqXMQ-ceN4*D)s(t8NH(eHO
zm~*yuV&S_@uU0qa=*lTH(qBIlnrS?`4wR!cVV$aQb
zg@de@D>ONSSX*;v5Dqd;(5>O7XxKU!wx%Pq1CYj=V&MBgFKmZnntq!*tRvv|G-TpH
zbVQ^o8SX;oj;{wd=#@@Ifbd~*1~HGNd^*yEyu_G0gJ7tZcP@!5<5H-L6}ENP1YE`|
zYaW>FG6H50+uG8r`NrRWK7&ZIAz`abjGmvlW)B~ZM2gh9PGdlVEKI^ymkQS+*Q!;&
zc4QuPs|xsj7kPo+a-R{3Sd@ZlHT*;hTp
z?qjiSwL9kO&czs?ECg(BqOf7KqWJXAUl7c=P3EWrmK18YZH!#_J>FQ
zaBAII{MxD?f6dp4xOP6dR%FG2hNzl$RrQ!Tu5poV5-jb?^m$b7hGLQx1OQeb$JohrHlhd=fFAbFsBSgdM%*HpL&|mzrXSb5OR5}
zfEr6cSb+w+`9h+QAhOz*w8mmESn0@~63bM{1&gk*)*rG-P+Yd_JKOXC+sxUx(ru?R
zxZ25&E$+1smKT`lzQp!P4B0cy6-BMKve~U*XQAdLTUXx0T4^%JiwS8vl@W`#W)T_B
zZdD1k76v+WKX*SVeScM;cK2~FrYj$-vGe9jZ>EUwckiB&EqD~3yLKl*pMkZh2_EhO
zc`=aQLy~DAL)Zia%_fiwggK*d6XIO_%5MpJ`Dg_GJOYHANwD(qbHVDzM!kP9eCXyhe08tsM%Qz<
z=8f1VnCuiVc3`j^i=;9a1rlpUdLe6^8ZFXA-6g^Gtis*C`6Kk~z$`5d8^hzAQvQo)
zypLub^{kD2bkDp0?YeFpPWoMA1(mn3{t>IA0G$AsJfH%wqU+|L-&ge0Z!ZFbw11J?
zjF|{lag$i(|3a*;kkfK3UxAUzG`*YG&AwhHcEl%eY4=l?V}f-%9ue8k=+y#Urh#Fu
z$L&~{)-%U%-F)E*MZF-h){KYq)>Ayv9WV(B1Y6&kQ{4f-z1X88LL=~>M1T;2RB+ow
zQXz;diANSM-h~%mRG^_(VwohWW7tCIQMOKyRoO9HI_kkCNY$#)E;K`BS=Jn1pTimw
zk6RAt%p1BQ7&UyQa8XQ#u-0|z%0hCQluOt=&E8@=&m{>aH&i+*L~1;Qr=)BEzGNr}
zk_CUjNmt{b-7T_*Mc2jue|m5&8=CYf%3J!?eb@kORp
zV#(|<17)WJibWH%b~{(tmM_A)wk{Q4(*t=n6303W{%WHNoH65oQ348iA07tgO7J5P
zgHZqCxAnxKqxrK45Hffh)d2>NR6>XXgqNoBNF@fV@ns5-hx6dd!?qH068cW6IbqJFyo6YF0rq{~eNy-j2uMYn{BXy0`YOhMU;d}Fi#w**VDlPsf)K*m?
zf)5~-^`KjAJ6zQSx8H}W>fzybxCx|shhbpa2I3Gvaucvsqc1c9-%bPwMN@ndkL*?5
z1`wFyNHje}s0DoVQ+?oyJ3o0aMOlDOmagKF1_QX!l;%=zrr
zJ$2OEb;cB?i_mzWXKci?^ZT_kEAM55znRd{GmEh4JoP2#mq{i6mH9E_w@?t`34
zFvy_7!HIA%NTRmGiNT+!R)HvVK&sS`Bt6HOde+A0-g==FdNPH@Yi1)*Lhr^Q!HsI*UfpV&>vB&
ztBbg(>Vsi3T^N)@>6*d1bnpR8*9HD5(9<0OG>7Z4ifKY@=Aev7*BACJ1Lle8eaq3&
zfAtX{luV+Q!9}gH-v#bUtH(fATK+HI5N~BRBP*@(|i*0Ty6h&6w9cO|ar
zKw}5hAFQ;BhjBub;n-9B_it|3q%->(H@$j_^KyLYdqG!KkI9hMjA#62jr^D7sF)by
zi&Pgw>O9(ESWF#s?19CMU?VZOiazO!1c$H#L<1}Xbc>n6W;rlurGpwFzxu~^x)0zJ
zY#}1DLAIfBVJocXfWQ{Wzn>4_Mt-+WvcZ2+IU@MQnRz2>|V5_3XU`Riige^A*
z^P3Ee$0IVZA|A#Y!FWa32)r?y?)MTM|Fnq!VGB8r@;s+Lfz)pe0#P#g+4Ev~C
zf4V%u(_@^3{3)FBI4VyKmZs7EE=NVw;NNV!OY9g~<-PF^XP4rrjH7N$yd-1c%#G&F
zC)Vawv`W_>H?Q5ezLYF&SmoKUWuLx7H&xFSKUsD2$Lvi^459>gmBDE-i0)g~1;?bp
zG2kQ{paBCAmrXkDt2i)djLoTnV}K{W9W~oej|ci2A0+`)-6BpSCPNS*r^Y;TN-|EL
z#H-#Hl2ayPv*$OM)RZWQrliD=`&?5Z=T|@XC=k6Cw>??n8LfVUZyT9q7;(2|^RL+{
z{q(U;0*)%ZnCqK>m;^c}gJRk#(>+MGf)-W4CehUOjo&(Sc+)ikghC!@
zseD*&%9YBkjUh;Loe?1A8o62gOKM|G2e_b>u5K_0bJ|TTS#t19WGr;t?x5BcqLd~l
z&Zl$NavN8j?pjRm8C5M;zy8z4T^+5RPS3s1>z2L5eavW%ZHiweOPDeha+_Rywl79q
z_tW)(MaTWmblr=gu6y*+L?bX6f&X{c{qGk@)a{Eti_O)>aIL;gKu|($`qTAc{&vSrD45iXxLHvzVB#l
zSog$ %s].\nRelease notes: %s.\nUpdate now?",
+ v.Version, Version,
+ v.ChangelogURL)
+
+ qs = append(qs, &survey.Question{
+ Name: "shouldUpdateNow",
+ Prompt: &survey.Confirm{
+ Message: shouldUpdateNowMsg,
+ Help: ignoreUpdatesMsg,
+ },
+ Validate: survey.Required,
+ })
}
- format += "Update now?[%s]: "
+ // firs time and update available is not relative because if no update often server will decide when to ask this,
+ // so separate the actions and if statements here.
+ if v.FirstTime {
+ // if first time that this server was updated then ask if enjoying the framework.
+ qs = append(qs, &survey.Question{
+ Name: "enjoyingIris",
+ Prompt: &survey.Confirm{
+ Message: "Enjoying Iris Framework?",
+ Help: "yes or no",
+ },
+ Validate: survey.Required,
+ })
+ }
- // currentVersion.LessThan(latestVersion)
- updaterYesInput := [...]string{"y", "yes"}
+ // Ask if should update(if available) and enjoying iris(if first time) in the same survey.
+ ans := struct {
+ ShouldUpdateNow bool `survey:"shouldUpdateNow"`
+ EnjoyingIris bool `survey:"enjoyingIris"`
+ }{}
- golog.Warnf(format, v.Version, Version,
- v.ChangelogURL,
- updaterYesInput[0]+"/n")
+ survey.Ask(qs, &ans)
- silent := false
-
- sc := bufio.NewScanner(os.Stdin)
-
- shouldUpdate := silent
-
- if !silent {
- if sc.Scan() {
- inputText := sc.Text()
-
- for _, s := range updaterYesInput {
- if inputText == s {
- shouldUpdate = true
- }
+ if ans.EnjoyingIris {
+ // if the answer to the previous survey about enjoying the framework
+ // was positive then do the survey (currently only one question and its action).
+ qs2 := []*survey.Question{
+ {
+ Name: "starNow",
+ Prompt: &survey.Confirm{
+ Message: "Would you mind giving us a star on GitHub? It really helps us out! Thanks for your support:)",
+ Help: "Its free so let's do that, type 'y'",
+ },
+ Validate: survey.Required,
+ },
+ /* any future questions should be here, at this second survey. */
+ }
+ ans2 := struct {
+ StarNow bool `survey:"starNow"`
+ }{}
+ survey.Ask(qs2, &ans2)
+ if ans2.StarNow {
+ starRepo := "https://github.com/kataras/iris/stargazers"
+ if err := open.Run(starRepo); err != nil {
+ golog.Warnf("tried to open the browser for you but failed, please give us a star at: %s\n", starRepo)
}
}
}
- if !shouldUpdate {
- golog.Infof("Ignore updates? Disable version checker via:\napp.Run(..., iris.WithoutVersionChecker)")
- return
- }
-
- if shouldUpdate {
+ // run the updater last, so the user can star the repo and at the same time
+ // the app will update her/his local iris.
+ if ans.ShouldUpdateNow { // it's true only when update was available and user typed "yes".
repo := "github.com/kataras/iris/..."
cmd := exec.Command("go", "get", "-u", "-v", repo)
cmd.Stdout = os.Stdout
@@ -109,6 +156,8 @@ func checkVersion() {
return
}
- golog.Infof("Update process finished.\nManual rebuild and restart is required to apply the changes...")
+ golog.Infof("Update process finished.\nManual rebuild and restart is required to apply the changes...\n")
+ } else {
+ golog.Infof(ignoreUpdatesMsg)
}
}