From 5f8cb8739fc1a7551f31efbd5089241cdf276a58 Mon Sep 17 00:00:00 2001 From: Aolin Date: Fri, 1 Nov 2024 17:38:36 +0800 Subject: [PATCH] tiproxy: add docs for label-based balance (#19288) --- media/tiproxy/tiproxy-balance-label.png | Bin 0 -> 86358 bytes tiproxy/tiproxy-configuration.md | 7 ++ tiproxy/tiproxy-grafana.md | 3 +- tiproxy/tiproxy-load-balance.md | 90 ++++++++++++++++++++---- 4 files changed, 86 insertions(+), 14 deletions(-) create mode 100644 media/tiproxy/tiproxy-balance-label.png diff --git a/media/tiproxy/tiproxy-balance-label.png b/media/tiproxy/tiproxy-balance-label.png new file mode 100644 index 0000000000000000000000000000000000000000..c291c40ba05ce5f4e2dc38cc3d5f87d8680d836d GIT binary patch literal 86358 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˾l=6kbiwe%`&*B|o3t`(?$^KkF5xZ)X)97C*>epoR<0&j|+J7hN< zJYebvpHNQ3%qkxT@C$aV69rPqtgtm8T5W&?r(PXML;pU2LgAe#RtixDl&*rw`e^bm z>SfO^{Y==pQ(ZJ1U9EPpjCDvbCuk~V{c$vO46+x~k?2yQ;4dK%VjxN#PLR5owGGXy zX2{6Q&R&apXM1ZuTDIUa5S02UpT`pBwH-*J1P@#dN*l0Xm_RJM;Ep366Chx_jR2}v zIP-#hyRa5-`S_Vd3wk6XhdqZKkvuz}u8sr+5@ag7)`NW6jl;P=%)&kBV(E301{zw?ExaWH{&UP}>@0Fje z=Ly_qXY2hGo*_^D+Z8zlG>)C@Ej1bf4#!J~rnnF6u#Z7z6GCqVu38LCzese~=^cva zux3e7M1zPu)`F}TGcVT6C(A%(qzUNK;2!zG9vFK`9$`?nMkT*@HwDdjLAsY_WH)<) zc(cqjJV0h0nUe;o3J{AuZJ%ydkwFO_my?IAU}QS0WN@NHmSGt?qr)2*xl*M@K0^Lc zVE18tm?=C*pT@;1TpxJ&5J7&aqHHOd{?w!QP;{mQ{)%4a=F*&wuXc@UOc=srqvl%5 zkOF4HVN(OnY28UGw!x!H{ykp1aki=nBg>PyRC@KzyiS3lDM4TC3tP(M^Xl3!A7zt( z)RoDzxl@(xN@O!l&^uC|K_^Y~8#GGOx@UwDv$WxE254y6^Z4n=s=HRu$km~tp@G@f zN#tvW-|trL6z5-cxVbJd=R8k<_G!@S*Pf5i9Lvy2OOwbLuhqS6CiC|+4wyeE)snGa zJ#$eW-l=M@>+e6*-|qijW=n5t0y`u{d&OR?($EE(`oRwT-5M^$e}Q0af-5v)Pkt}x zd3EqU#$=ZE;d9XgILoihuIeOq`@!{Yna z8Eytvf1rPx44 zK%_*acabJ7TSY{qi-Jgrihy(h0jW`>BZLkCAxbX+gb+ePviDi>dEW25=R5Cr$GCUg z;U6*>Bzx_-=KRgF=KQTWhZJ~pq{>{Kde9J|o+}Oloegu#$Z}0)cUC6CdR!!Fwfx*` zY`q|5z0MnVbE?+28VzRuLYhnHWa=*ig8$8aFi5oi%t=){lMw0cMggQS02s*zN?N91 zCx7bmad8y<(Q7hj>lj)t5FtU!D@LA(I~wJD!%?P1dyoKPXk5s$sII%zrgn@$9Z(>FiXR=i9`dhCI%PMG<5X zFmBw}M;M_xR7{Uz6PsL^z2XN*)*m!Erl>GI5EGmiD=dZca99Zj<#x-n@jEm)qlovZ z!WR*$c9BffUWCIWrn$O?$_O&VD48)!UG*;ErtOxv!MNpL?O=8_V}2-lFfjW_BZ-J8m(%Z^e7_bd-f0dO);q~E^!$AYzq}oXN?mO~<{$8$PI(%d znTJ(P!FQEND6Uy4;u| z7W(;x>nOn>y|x@&9kXWe)GXkNCENA=v)F2%7SO7JhfWlgu=McND7L&Dmk*1Yngabk zfmg_;_5*@6yBQK-D^kTB0-erQl{feh*k{GA+2a__5OS}nm5OTOY=b!Y%@40{B{K^FDE+b@K2!0|)IA-d zWkGlIV{an2Q!swai*cE@`GjAa&2cUsLp*x#0pkSP(tjz$Xlagcg1l|XKe;vkv&J7* z09Gc!sY30JN-{R6*3eL{i9rUeNf~na)^W)E7_9;-cCjMP(oN??GBW`6N*Co1Gts81NsQMjVNT1rtIPSyZ#b_-YOsdP490NsQyx zmWdVkATQ$h#>YAspA_Py;;DjXIkT)7{N47c$6&Dh%lLPt^=A7R5%>FK0i#pcN(jN1 zywk!sEOCa*4|a1%u!h0JH~)C>=K}!g1NLdpyT#gygpvKdwmT9I$^b%I*=bVaEQkIA zv>iT#?HfDx->zPpN(yC0ivS{zu%j4uGJX=w(9hl+r!|1N&0V2*PIvWarEj&vhbifDY@*M?4~6o=mTk_oL^eNzxu(+8 zPky^r5eM1b+x*$HF{f)0H|i@Kn&mcf&kZ}czTIf-n2UiLEG@MykY?PMYzmJ{Cv%vM zlB^ZEX(EJEa-N0mj2JZXG?JQq_+x zpaJp(r|?8e0#6%j3gb3zXw?X_5sy1}``v{_f=_NkhX-+pcCYtab;wA+2lsGwEc z3gNTNi(d$bm61!)CGT*n2YY&&;Au^| zAv}P`R7w7S*`pV6Bfph+)08nf#jZniH#se2$ZQI(os8_@P(uk&i*aLDgmOhZ_Ev9t zkL!+czbE#YE@`ykvPdWS^?^*)YNR4dB;TbY)w^BZ1^#k}Jt0h((XB zD0N*{tt#;N;13rs_U0$CNC(YgOq*qzGBq*VH+T(pkq_y6S&=#2ve9^!t2 zt2(OHgfOcgPN%46g3d6AeMMUcX5=mnj0FG+0_>-W=r&p?zd&L~FSxuzQWh@?*c_I# z)QYE~{V;beQ&5UgjOc0Lp*!QrcrATzAs_IqrMh z>Vr+gKS{jF6y#KT>DOP+-83QTj+SYp#7-v!AL-f#8)`9Z{Qo_!Hs4fwFsA{-VF5J1 zP!iV)LL*)^^X--xm~j_s%1vH?yyMFKC(dc68!v|C=jV~Xd>5{vskf`K?FEIKX>+e@ z8Y_0PXehU;aZ5o%%_G%Lftm;@sgg;U5UC^vO?GpUjm$K8YGx~J7n|}YTNQBhID!(r zIcGM*XT*p^6Y2CT&@>CFSA&DtG}Xu!C+i4{9hTnnf<~B8`q39S z5;!;{1#Q8ueCz2gmw+VY3ENypPzA+_Da50UVhZ;!25ad{5Xx*V;2_Pt(3Nd>!wfcV zpedQ+9NxiMsr!kDY=Hu%>MEl9qoL#gDJc6%*PkRN!O8ycm`h~O-baJ_CHA+%_x;@m zHFT`e-phi`_-P;6g<&PV%2c0Y=4jYm{gBkrYPIJcqKV9P^_z}oHd1-(8CkzVQOsBT zl;*XWk`ll?W{8#rgj&_u3i#w|HvNkH*gK~G(y=(gGlj~LirC>5&0k_$R&o~U1@Ng8 zVg?bPK_3CPUiz4&BPY+u9R5j|JwI`F>e<8;zGWYteyjvwBjGCDoF3#Qo=kI}b`2^T zibp7_TLfh#M3{_TH`4c1cw;L~gv3b#(st$k$#qJd9Da^*qD(Lj%;|zwhCOJFPux25 z`UgONmv)ChCTeYpe%S7t8UbIy6rQZ=H_NR!lWl!Du`f%S9`F-Q?xbbP$Gr*gW(n_j27O%yQs_QUxm4=7k0%K$Z&{ z#}!Yy91~lZ1_ASSdtnyU)Ck3@`v&|wa+lgDV88TRvB(}j;Am}ArqG_Wtj^|Iod+ZU zC%}ej7bs2%3Xy1;750Q{l@oRg^{6|wO{tmtF0(~%?wlfIcn`ICbJ{a1Z@>89y6+7j z4R1wmiogsRTF3aoGT-H~UaA(g{Q#gGdFSqx=P!XSa9mPtbz!J#qWU1jmZ^6F^x-O3 z!%sPJ;GC&tf!!zNYXQe9f4yC6RBXLB@%*UeN>o5(sfBA*ZmHVE)%YqWB)X-Qk~5DU(PK; z-H9{pWbo*&15_DZa4tqW%Wu18Z@pR@PA+Ejc;mLO9L=l}=Sv_dUjanIlR*Rc2d)G;{5C)ON$S5YVdE=tmZi1%FHf{{-PF@{e<3`y!l$ce)JD;X_-Q=RG*tJAE^cDieQSJ-NxpoTEQ9NNV* zMR-y)Gp)#JbrHRKVL)I9n9qCA`!#)ji74fR8#p9VO!`v8%x-lqXc@RMnq92l%u6c9 z3=XfbPO!%Y7k{w6)_aSPgc4>|P4`wW?3JwCe6>K6lTEA+>hu@v9CANgGuJQrK8X5P zqyPsS=&c=p^)7Za*7ssDugp;}W81X1G{JHC@G9j@O;iXNeVv{>LhNp6(xR;>btlj@ z<4RH9*O@=;wdQq6Z&8OdP7UAxR$}h9W$N;EC?#~lk>*@b=|OeO>H@4yORg0#Df#ut z(~5`ioi{ido7PJXJgAQN&E;60;=JPgtI=6Gpnu*Eov5$omkN@4iYMUo@MS^f5c>Dw}y{NLQ?A zS(j*m!>2X_hBsq&)|#=@ilQ8jrHoN$Y)oTCQMNCzo3ba|8T1U*cX^u&4s?Kxs{!4I zsiCJi1(s?w*V3RQNcIM;d+VRBuBnpBOjC4Tp91Vyvauu-rCtA|nO;pkoL7-Im9ff5 z0E?lH`%NXk%rBo^eqptO#3P5&JpdT&n4-(_}CJd zFmu*jOG9Ledzg_aWIt@#%gw56b@#CO;|Tv%%o-dc+mQ3|De={k>s6lZ0i7Mg&ve;I z)>QbXRo<8}I{G{}W~H$FZXeN~`u+Ed!6_`>;pJ_tWfIZC9`E~gd?=`U>O5fi(Gwjo zc?cxsYSi&lZ%8;xGpHoiiTFj}_GW0fEl(Kv%PV!e<&Tw&V^}QV{CDc`eKvCHB{EFc`uIFNqC3ejAYc%o6gzVAp^Ng(YN?uAFX489 zBx=EM3h%ob@B3D@TzvIRIq_;A2!>+^)S$XyE)ZL2gITa$J&B&ef2yNLJ~cw5vSB+S zR=v>{@Nr3~BRt6SaQS2n6v+HSt-dKl-e8w$Et6(iuml-S9VfHh;14Hf4rRHr3iWwW zat82we*ZF}h4??Pwa*V+B@qzP3Maw~<_@~IYyhY;VIMLmQsAcDEdDM+CcHDZw|0J? zmpP<(`tO1Yhl0aiG_M=`Bgyx;eJYr>PIV}aF0o?GZF5q=_%5&tq%V$uWTknJUX7#r z-Jf6TepuStOeMv!oWdj38ZR{%8&-|KGPU$D^KbO)Zg7GZy(I(IuOheZ)J+d_-Lex~2TQseYhloMSjuN&nFI8icnT^Rt4QX)mzz>iu3go8)a=6RW#qI2n z%e>VkT8_Hw0}kKcTl#Eu zS9#?9X6%w(bWt94JW2LnPx+7-IUvCGyj7!x`SB4@D)VkGSB#=USk|tRRYrfwHH@cn zXUAL9XV*b3M)hmnVn3%WO}9)FEg<&k&xeQOVn92mbJPAaU>?|o%iYR)2C@PT%VrqZ zTdC4t?-p*WKJJ|=CdFv@Ac&-?>wDeH=cC$0GL9h!=dzDO^Yx|)E;_cWq9jIGBCF@F zZG(yA^5w=#`SOoSyaCp!k#GWb%!95;zbw>B3tZ-Hqh4a@s2aCg$zF?Wwp$H#tM;UZ zqH>T__ubUM#hUSVZPI0e)$NC)n>|K+zg;%J--MV9_gMKa>70tyEIZwgg}Ph8Jxp^+ zR%ty`s0bH%sW78Qr!h=yb4#N_#%?6=NlO7bM{LuFk4=UmrU5~;`AQ(QBa0PkqCqRG z9Jb^3NN*Z{g6t`%m(b}=dzp|4Sc1pmw{KcDJCQU%lP<~hJKjoo)>+ro&V7gie0}v8 z%d<53A>U$?Sg70j%dH#_LEtN2?FChhpz?n_1g95RCi-nRnCDk_#!1dVxEt~3x_;vE z@r=R#RX|Y&X95y51<#sgbxeYvp(yGZ%_Z$dIF6!#&;zaG-Eqs^XDl^CG>Q7Tu(@VJ zRg~*cltaYjo$D`oQt&qPrs~??PbICMmx>m;Ht(^SacWdCFoHs_)PaKeh5s{u9r!J; zsnoV!*m%&H+)b>y|HM29eoc2O3d8}*=pbH==#iT0ucYR9f~9H&?2bkA90OzgosSMY zoQ^!~FWJ~6Ao#|`KZ3GblWi#VrMb?D721moRcTrC6oi8|*S)VSg8}>ONi)=IK!p*% zF$HEWMY+f_zvp*jF&|NVj7F5wWf(AxmzFbF4Ns(y((-#jraRXDui8xta3m$-8piX_-MKE~LZ?!)vik6^pJCHT>+CN2LboQW=;{$IdQR(qQRy~f@%`DN~e1qO#cxN^IY8b zdj^!LjtnR@aM;Gsat>{8Pl}M<9`0RpA4kUH3^V98^y-<q9ux_RXKwyF|LL`Y=VXa5D5MnNxPjv#miD&#m-Fv(%BJ_rElmylGE1 z=lSzIhl>$_tBBK0Z!f6|u3x(j=A)6l`vjhF4rmO{=ONQHz)2TDskLkTczH|4I&2>- z32vC)^~MsRS{&Ccm41CTG97HlzO;Y7xkf>nUhPc@0<0#b2E^~D04Y+_x2oWvLj^BDN2w3Id3zk$d(#W3azJ@f4x zxMi$;=;JII>%kcTSvBqcEm1lIg(i@*`5W_)JvJv9Q``41Pu20lLo1*rh1Kc$0U>K= z@s~KvYF;ayL*3?v(8a5}jp2}RZ=r@DcTrtDAVry%xcumahgtCukrg?2mQ zgcDqmgb0C8c*B4YIYXS7tG0CD>!upW98sd_-PI;j?*?Z#6hTI227&224d{` zX9`e^96Go^ew@rLTC{7=CM}xppV=Cx{U7X%1&dSy?C5}|*#q359tnC1zxC$3PJo~n z-ML(vfC}7#S5%6=r?mHg)wU7x?|CK9-5b#W+yhQBJxtDLoVF?w_HXoN zAN3@9f)nNcws=ptbNSEC0Tf-}@QS@StoyGE)j8a%p!IN6Xyr--u=ARyglYQgME?VjmJ`!z z{S#H*c3}48#s>h7cvkN&8{Cmiz{)05r@$15;v3-5O5+*0Kk&Xh#Y&qv!-1lkD~ZE; zkaz?ISw_-V@(@M#vEQxo>%A*_&`OWCXf@Kn{oXoS)9n{QX@rZw(2fd5Sh_VetUsvv z!;_ef@t2S=E>eLhv#Hw9$_ONKZZ`ijCBIS*f}Nd*UU51 z2s*H`LcX^{>#k+*p{lv}ZTH7!2(!$&C&(o8Ez)NFMjdAY1JI?q*GDg@u(N@cMN^|M zV@%+RPArv56b!~gxvV`wfvQY%GUMwr!rwbO2)p;XLyah3ipLDN3-ja3Jh{)l@}OkE zQ8ei@JV{1ff-u&%OoI&qsF?H6?+~JV#8McUjp;UIujGdy?f2zblU(Y1VXA5oZGt1j zDdj}k5{6K3HbuM|9XNBbTUreEVs@g2nA^Xqu&K|(aYxy$kO%S}HRU~Fn6yMyq!7XE zi}yFklYIpl1Xt99-Mxu)PJtgH!4F_8E)fFjpJg=$!B;sATVPOzip@jZh>HL&umP~~ z9ATZoeeq~eF&#;=T8~52*xh)Hy|^vJ(lg8` zfY@_f2)hwS8Td5cl%R;)xCyt`CV1~4Ys%ebt`!@J=)wpcp`p4$5r*XqKQfI<$FkD7 zj6SjKTU~+}MESdOEcyuh*UHaEDBx{k%DNtWb`+f1#N(zzafgRlUxzXTuC-x@>qJ3A z3@>k`Vm+H_sLD`nG_(Z#C^HcCfI~j&IOuuHVw8ga(KFc!I;8t z#UM8rBFr_nm9iRYF#kWgUBV`3lW#{N`HN~YY*R8RQ}2^PQQ2S91;}K%SIg1NOCTFg z!}z-}tI1HVDHL!^feIM#mhToC6C^JHUVCoS%2v}FM{W80if9oMqj{Pc*GGFAeu?7o zD;MCmqp6 z+@Eyc&%fzS9`eozh1PG+AZ!ReRXsW(zv!R6Z7FEh{p4a3{7o8v$^F#Ci{?t7;;^8_ z&4d)(Z`+_l*&7qy$}fTCiGxwadzk>m5w}jPk5ZY-+34GM>?ys>xp<_vv-b~}I(s=WFcZ~H zK*ln=1n~ov@Oatx=`=#;0TO2E^_aBb9fShWJ!krc5Jp%3qm>7m@gKuL3=+!qfkTKc zjr?*dBee()f0rHXupX|P(=SxQ7@ldHS zsjwZBnqvF3u%aJJxGDs(<-t_&dY&QDdo+?VMSv~*TZ!zrl}3nlz2f(~@a|BpHNu+o zz_E9Rh)75*J2rYGZiLZFc!B%99UEV>(xa4jYy6HffHD&>t%MOVuleHjQXxB@dk!pgBuzte~c( z0HEM7iuAAwP(kUjDaCCB`Ip$4L`d>Cgv>{$cN+$@GS3Vocj`gGszuxxFL2|b&|$#Z z6r?=tzmAlyY!?f0QJ`sq==PMwgWgDszjbWhL@PikLA8sCF0vls2u(B;HZ?+EaE0Ut z&MvFm@W|T^*xU|~IwL54cB^2NGbUD)${Opu`sCnQ;HnFa7J>OUWAnav6AM&8I~)L9 z`$g9;^Vuz)ojiq0H}?BX8yTGE`%rqg)K@y|aO&96S192*_2-evnbl5@I*fMgEY&%N z4ii4Buf4AfEt2))*!iai8Rt*ChA%w!^z4<|SYC4EOk7*_^D8Cq4qK?pGSYf(4bUUX z73rzYdF6e=o~&x?_N9fXC3Q`kh(!_ddi9tH`F_8Jr)xR3$u#29s}pBf6nhMH&zS~% z3ft6QeBB)F8&)4K5Jr_>^ImHDx%Za#^iA%K=yQEk(OMZXn*o_OjL>!hcBS~vYSF~; zx)%P{I28IhIm6FkZu7gGoa0$z!$z6wmIuCzyoNr0F+}T9QIVK2J*60!Epb{rN!uqv z+b8XnU-RP8b<2G2vA>$gbflsA3QqCU5%}x z7coX-2@GfC^kK32-vuk$tDOmk5BHxg^V#?DtPR@v%#B}Xq^>sd`<_HP7YC{I-5M?Q8If2@??=+R@LYpjhrbV-()t~zd+-2p^Fi46-snzH)MXpA| zi48VLXxrx3&@{`sQ_nvEmFoU^U0%nu-|UXrB0f0&PAJ4zbY>=Ph!5z8oP6rEc2omi zuzdMmf8c~j&0W*wD1CzAucU&Z)U7LUv0zy0kv@#(50^G=&OVr{bw!D7a)4*@21jI8 zF{>YY3Lj69pU4NQEW>)z_QtP+Cs1PNR~XR^_@y!R1N2>1s=7~?2!Y#nY(cL_YpeVf zNJH+Pd^p*;7IV<+c)u!fV-9Fr!*UFhk+rC5~lQ}>M!jt{>I=-#i@rI5P zRtF#7*1+N45!leqOH^4-K;D~YAr*ipCXHT0cuezgSywC3caag54l z2l#D>iwtum3TVsbTxekT8%86`ni{>z`2~DpEjmDAXfJI2B(zo522){e|LAcb(McVt zJ#axl%Qq99m!oe*!kUMEQHwd8*C$TrC$jj-f&jM84BO;%Fx!=j!{3P}BDiMJO z)<4~EHHS8f-aiC)vZ#3E^n)oy3I3wFb^QDlu@(Ao{2I2*hu=#yqx~Wh<+6*E!S^&s zi+g!MC?*oaUxfVR#vHOEmiKHv=>YrfD9qzhDXLNYo#mZV&n16QfUhV>+yIlpbBjF} zakWJEN>lr!QZ7{j)b1_UQL6j#I2Fo!?NwL2 zmArsF!$?F5Jpd5p>{Gs?&O_3$JZ@^J{_AGqm8QKCA{OWNZ0sWpygDt84iv8}Kny(E z-W@5t%DYc~4lmzI>1ZtTsU%@d4@{F9OEmRw>A(T(#qH>TNER> z<@@qoj&93J_cR?0agkg*DHVqZzj3_$HYRVYh_t%Sh9FpDkHOdbfi$4vAub`2Jk9&S ztA=I7q=cS)4K1ZWHEULTF%B?8FHE~M=sPfy#!qi_1ePB?FcXWCd;gs<@mM%9Eyi^V zzQJZ0yZL0^QNE&*TVsbacf28DGrt}^5M2NiJR>IWqk@D`EpzI4CtuM~oAps)_6Lc5 zSaw=WUdtYuN4j9ql$C~j*lO%o(b=opl@)8kFJ1ZljWGC~6ln zFADv=FxPY%uCwS6=JX(deaVX#L4P8>?RF`WNbeK+EpN~0amgu{E6A901-s8z(;z(+d&ve7FV zeqDPQ39?Q7M??RmPG-oDpV?0QZJ1r8?8NLzHQ+BkF#lGuG?D?rQLZ8KR-pZ;;X zOF^uEy_SZR3=`c{{n$uDdRq56BQwUb;VJa}>l@6`Kd-eA^hcz$f zR#u}LG;1V>R9D6c@^y@Je_Qc?ml5G6e0Bzkm#@D1qtY*JdX8XZQS1<1lWONcr?)&oY-)%aN1teEZ036faUqn=2k39bl_>QdC9}hKNZF-Vh z6IvWz(uk&g9IRcfS7u(-IaI^c6E}Y;GCTH{O^)@1gH52Ikltyh*E$?TQt~j!xZ32i z={OMm$H}#{7}3-FKR@0E5J_G`d@1FR%BT5Ss=;PR;KU=2&%s)xp^UeTa;(C*{H<0# z2+x09oI28}rTF=*=Ik3?4sP$leM5;TM~8q)N=NEeV2U5F7oUT3e%WX}y^6~uVq|LIIr#G(YRi7;mixx=`DZP^F^|0oKng@I1V zI}Q$n>Dk%+Ajfl_>|CNq;tzD|+lRUEvSi;;fIpfNuUVsyA+CG1= ziT^}Gd_ipAXU+n$SC1$(I!bK7_J$5etWJj|C*2(<-jh|@18Yu)33MN$~SPL zi?bC?SDRL=&o@KZr$9+UPO?8p0to3fowYkWhZnIh&U*)N)m+)A_h2Z15aa(1Ap{-} z?{UyF{j3iZaeoOAmU0Zsl4x!Ux7>_qXt z7E@;cNoHc8O@rxCBM68|t4D*S0Ej+XCs zfQ#YABIKh->9QCa=`h=wgS?HIPvZUo)$GfRndh33z}=a`jLFvutXp@o3GAoO%yO5a zwS5$N?&&7Eju%=tN~vH2XZYJ*#x%YDV)j~>CA%@paa$yGLr`5SHt&2|mw^%*`u=UT z>`zGMrVDOPUZ!6-wN9)u`TX%T%koXOn^G=E&HN`R5#w-iu(kbhz9O{sICPG}vS-2S z3ACpRP+=$68S$ZO+rFzPhPZT}eD%wH*7A3++~huCv(tjh!pMJ1ctmuryC`C1uk9|# zj*QCu6J=f&ujB#y7Mh>A)Pp(MHLumQGyTu29{EqNN>#W(yI_DpTr*A_wM&M?Md$&y+IFncX-5!`;Xz}!pYsmAd*O6QPbGvBb!q0rp;c|C zXZRV`z!LXy9LQY)<%U=v*QWMsa%}J@09}CQMJ)m)qJ50B;*}2YrN+>gP`872D%jaN zN?kih%x%*}#Y^;ei|-^&C2MM#F`MJ0!yn)B$Q5NBwW0P32%OKdZrK~_eJWHTbi0rW zcVNj50q7I`{_3CT=I@8-;?>PKa|HkcJtcEl>ro?_00gu;O=$dRM2K+A=tl&&dl&dI zyRN-3=OdL_+$|>a`^-p|cQ^aR+&0n{7YWA<2Atwl8aSfj{7oA1;4V_yjyg|xvRH0) zjXkfkiv)i(q4RORQp40DVukaS88O3koN9uXXQP$=bTLY%vC8VL3yh?ZWVk2wO>)2O>Zn2 zH8p(PFr_R5m)AY~-!D>`TcqO}>J4A{pB_4cMSw3QMGSoOE-KAl#on$*<-`Pyt|@r5&i0P3Em_}L8l9{E zo~WeY^?QM{h~2=B|0T_TEu!w2%@`O1UdFztwiV_mflK}0N&vArvZqM3haR>mz#>8( zzkhy>U%xl`-S_GFIH@r8V*7B9F=FiknP>4A-?d$&9T(Q*$NdCnto5RwzJ1FEwaANJ zhA9g?Pwx>V1MUvJIlyA}fBHRJ&I)>G4@2iC?dT&qf|iF>Tn8=esb3y$zH{phAsv4{ zZsbKzDXDns=~1H$hrI1dN0XUT8bFi(OM5H21PZZeNP7lqk+Ml3AYqxvUq#0)BGO~# zHyIlxakec&Iq-pfxV83PA4GW0v-F(td+#;wo8%zk@SrPROENxE?oF_g%Qc{=#+kJl} z?jMlw@?6K>OxU}&cZGb^W=i~kE?cQB4-RZ7h_>XnYcK-WOq=XMt}yXMJ4q9Z&}SrY z{vs#fk{gxwft6qhmqLudFfthZ;b}cwQ)9DMQBqP#KrrYvYOh4?-k9eb%*4%~or{E) z9p|e9R-f|9N>*a)q-H>>%Ol*P z6{ChR80tg~@UN@$lvat1CGSgAr~2x`m3+m~D72j1Vj_7ZGB!6x7C(@xkOuckN*f#$ z?3(%-Oq5z35A_yNaXa?#m8b!`dk8aI{FlwtZGK(05%Jx8Yy?^5-9(X~A)8A{{x%I` z%Uje+M(!ev!30i1VOeL$L1CSNJCIBTQi8gw5Uvb+gKVwPu}^pCD+rGz#VdQ!sS}k0 z`Q}v)=Y9(vIIz!i(!wcHpngw?kv<4Vh^dU-=#X=e=xxh!u*+q&nw1GEE(1N2Dg90i z;x1B&bU7w@PGjAsEKo6EtRY|}>zA#a8ja}vnWHAEl5a|pVGpHL_SD|9ysdTQEt=Hw ze_LnbqPQ{_$hz+?qmO}Yz!3tSSDyU4zqqHr*wn5SJG{`iEB%#bKs#j%hVg0qb+5DR z?JVnt-H>QB%~O|aCkVbyhMNOl@=@*{IvFGLuU-JYBC62)V>Yd%<+4qsZo{t+2>)39 z@akkC!}0g%DQ{&-pwY)_d*uGMM8DW9y+f(YsfwCe5;w<@x{e?}iu_*=sHlAy079La zPZ|Zn7i|2_j^Ox#Vb9!@?VsR>ksvu#X0@r@6AE$JX?e_F75?~|ubev>_OA(icNG@Z z2)yAky!;>r^H~bI?&|37-ffCZR9RN~hNqx?pN%y}AE8dRS6~00s#KO9^T~H{1flsP z_XCq|C<)y9U?pg+<8584h2biKv0V;vg+3{YT%0Sc4{>oc%?~1uXzr9+HXK!iaE1$U znI&pELuy7E7XzdXk{#4b`P((AN!Z2?2hY*>=OxPrN?m_@<-^7@7N7U6UDv9J3H6Q* zH)}GWpO4Qx8XCTXL@JCl49;9X4#^+n4Hv}XD?`)UhAVyh=IQ00lZR=ti-ze2y|dlX z&u3=*2XA*wXEqJ=HKr5TdLS0zf`1dI9+)B4BTp1?p1WIJ#C_nmo`NO_Z%#}~b?o1UM){Is_m@vA;i&2@;0UkqMHLBO??Vsd*m>v8Z2oOk}`17Qo0W!?2UDc}np znIsk3i7+}v(Y!-~SjCH;nyXK9ndeF^95j5E$GPhJ@~~oN0VZ3X8+zLlvhjPJ0td~b zgr*k-8x0Q<>u)tbpYw!n6s?Yrn?6@JFFnn}t(R;o2|V&GbUZpxuH4|D+TGuu!urE~3Yx)%>JX8f%C|CDj|!WF&>;#MKHn0 z91WptMcs#%1GePV(5|g-YZBxwo{1ad5~#xX&3C^z8do1L%U$-~Yt>viW%ky3&@Xoc zIP})X7#7vctN)Gjs~AlxIZ5XDqMRfWkcTj;V(7(r+>m;q0tDNR{{D4VbRC}?1j0`; z49Yj$&fbQFcuWK~<+z;gyLGIf0)OFo@yZ=HT^nBi9cPyQi8E;flJ|JT(fpT0@J;P1 zXRcXTef}MM-r|~m>M6gX7)*9N|BYhpG8cV+xka8hscN%>XrGfjuC_)J$nq8|(&3=H zUyYkzRnbWq1S#648@Ns>zSEzdqCNOZ z$-Yz#H%hLn-D%|9b0;8RLthw%~xxm|}fitrOwHI$;({YiPLHqWarVXn`u+_tjcyFLV}5gfntGa6z9 zh_6x$JVWlHAFWl^m&MUOGEtxc!Nga&zf+-OpswZ6Vq+$LWg&x%u+}Ro4OWxva7?_x z`nM5+QB!GXy5>cW%9F(syky?4V^frelFy0{?SE}2QtqN%%7^XCEw>$~@kQeO?du(P z-mT2s)UBJj6gJ~>M`LHzvM4F*ueczZ?y;4VHOzB^?JDTVf=&8CnTAJBKC7LV>&gIk zwl6qd;9sf+7iC|QIov)}=1vS^Dy|z>HYD5Pd)x(TzOT90?CcCVmAiJ-W)3@UV|fE} z;?TD3gwzhjMTs7qd_<8MEvJeUlp^h8kGXQu+1RJRZQ!nZcj%oN9C7`0ZXuiq<@Isw zmlJ{eNN$2x@eH&1+D8bL9_Egb%AfW#T-NxaCoHCRm*@6?3VRG2t*42Aio*i5(2}0% zgv3=Vl`ubI_$#}CD)PDx{N9=dOE3QVaD^@sLfNOpYr>{R?;E2>`}L(Ea6t`1+PH^6 zD3D(wxXmBy(4hRp*xg_2y?td%<}g5sDQucRu0`*IXf<;1*Ib1Z+{ z5TWAivtN0HS@{r3L*_m~E5F{R_1~5q^N~(14N$d| zUaB7E9rv^&UPyhvz;}_^<7<63k$>?uA>Y0MF?i(#`=UeM7voJNYoCEi^Hg{;tM6f8 zp24c2mSy!txPvl7Unyfg(O<7V;iRyB`MD3)qpdIB#85Aj{7E14q0*K%J5JLoS!xq( zc9CtW{E&`%RkD8TVi0DHqhi#eQEnvA;IT2%)--%-7ir;RZ`nZ; zc6anyU#YQvo%Z%qpfg8bdsW>&+VIvXzvcI$YFy@p!Jw`Z5pz>*`ySpRiOXp7<)ahn z7X#{()e}_qI7>I!ZO^Hpo3%IZQfj+=GcU%j-i@JLVj$r)R#}yKDN(Vg%EwSzb?lCm zO{*_uVYpJ-ua^DutG%w)UrhlT;;wtCHBS6r&o*htGQs zS0K$8qzi4a>K)e=&xSMa*LS6y5jPi9PoUOjLvoU~NJ8l8KyZMNGVw5FT`_Nm_1Z8?lUuDOn z1l{@A8<1-hP0D!Ro1@cZr~j-ZG!-LbP!%Xa?YRRFQngatrFZ%6zo(&WlXY57=lw&p z*3gPgK&IVwCXtuijl|Q1H}?j9YWEP-M}3_CN&YpNBMtMK#!!v+b_%A+kl20oGfpKc*jPLX&E_ zac^{xIK+v^vDFYsdzQ>l1JTZb!LpxrNKQcBDYn-u zAoJejk&z@_+z*fW*UF^rF&YBF_h;-;2fAbOfBskAXO4l-ENm z#N~Vlsd(h&4#nk}+OJ>dW#`VUW53|4Z&clnjlsNr71VMfXlp1dWFb;yab|#`-)UZB zbvQ`l&5~tzUiiz`F~c*Ct}pFQTAp3aYO$@pSWi(ej)R;6^Yk^e*uTmQ)XJX4YWq~C zW&6aS(EjIk@0l00w6uH|FzXdDsj`{}#$kH)`bw^KuW#4W(b?I&~(kmFH1!{!;`JhIK=U~+-4)pqjg-~41 zc3n_w-=*n?4J8*%v~p@t=bPG8PN$rk`9z9+6zAeK7*^Ysu74Ti4L*5Wrh0SSd4hwn zh8CX!*k_)F@sUB|#hc@9cBH6)+rh$mRas6`GaxNNCH9V zZl{h?U0N;N$!TG*dhWS(ayAc*HK>;m9*nWJ?>Tcu?CHzObMh(u-Va zT4hImYA1BQ9Yo$6Ue2^=tGSl9r1fHilyS)~XP{`}SNw{>qUG{KDaM%^HrzPe?)2%B z_zZ|Ke-IK~igONxn^6~1Rbsq&c)`tVvoxSq)VNJue%lQ0-m1nV(fXwu~aJdS7m%&eF z59{vf*Tf9}Wnxd5#Mrl66xz{dV{iB@4jxr;sR}sP@!SMm-Kgq1ZsT&Vt*yW!3yWLT z^y-2ZyKKD+EMlGS-)#+kH?>UfWp`M+%Jx6YO!YseFu>Z27PHwexQp~`NXO$wr}Xpp zq?pGp<*AhI`q%V9l4dJuXxQri(XK5!RufOZJ;bEp&&yf)mAJ2LuIVq!<2O5_naA%# zFme80?7e4HRO_}aYDPf?B#T%ADk>l%0xF>tM9df#0uoAsU?2%dkT69=KqMK6LaC^z zBmv2xRHBkal1Px8p^8*RRn7Uv1lK-$?{n^Lr@edI`|;ZOwOX?+YJPEy@r}_(?*m)( zUab7v*-17b0^@n2J~fp5iXSrNHAKZHzk*&uva#(Y+*&<9r+Jq~;lD_--``;2xlinnT@L+F(Tp*_+Nm)*z}=Hw`%Xd-N(3MCYERw+lO=?OJav4>+UmUi8}jr4M3F6|?Qw z$4(?@?uqK==o#W1BwSon66>K5gXkx^KVY*=S;Iy*MfJo$SK6HTeGYmNyvD=P`rjMR#owRPHU6$y6gPeDYA_9!4?x~(qz>jz@6SXIAJd|Z;+HRWe3@<-a|Yyw z26Y^>9PFzO*O4r;`PRFg`m-qET;Nc{cdaA8e~$LEPI?bTE$3)MSI2lw|(1<fCwq1uH*RO;09zw4pt@ zqn1=<=KPTYxP_WZ+~HDQ&S&=2GzXJ!^~LOotTq4 zLi5^lUaiRfXg^o$;EX^e@pk4c+ohlENsdHg*aW6swoy~|8Nfs3Hz-tdGU8R7w>#rC z%>EN~zJEEkEV1nH(tKES<&2db2K8%()QLQ^$uS+Cf>H}wX~%K zJN#Ih3zm4d3r}iTN+y3hf%LGbWTE4Tf$rSB8VZhqIx=SdC-v&>8x3Ift3V7oo-v3v~&y6h_*l z58>?mVSP0j))+h>+(c-8MBl%rLO96heAmqrf; zxV6}c?dc<3Y~_+9y5R*ND<-Vh*WphOqAE+mjqF(=EYgy9D^Q#6%a==QX~GFZ~6?dXqWVB!&? z*#G7z$$<(_N1?m+o3(4#eq@E6)XnejaSa7CTnq3Wcm44C^S9k9n>ZQX&1I+Oc3_jX zX*uj4#N6$8g(>i6L-|#N1r=CHa;&E+b*#KZKyBi<2?xERYqo}OmzqQp8UmK`bk>Jq zQX*)g(IovuF^uJUM02%)5|#IOv7(HoLEdXy#Bnq#u44UpYx&duDILvKBKC zy>K1vbCJ<7jVuH`eokNgbtD>97+1VLtnEc8`}VUdIH)FH< zFMCo+Vqib3xa%9bvJR)shu3Qws|OU`o=FZqVjXa2A(0ny6P-*5J;BmUaw}>+BCcX2 z4ps7rcAh3i4+W$8DKFYzjZW;#Ph>bp_lkuF9m;zPNK=VeRksaCcBsG$Ot#LKzl5+n z`@AslRlAy*_E$x%3TLf8K)WST`%JK-JcKZD_Q`keWz|F|(n!&MZgOG)$jMQ!Fsk*E z{LpDT+9dxYd^j;0*IiYb2pHqAhHxv69&_jS{xDC(RJH=v6(0}4gm8bLF@b%UB_Fia z6%ipoIXL52=3|J`yw_aQ-KjHt6CnP1l)9s|E!;aLJtS0KS(kheT*Q2gPC7p!qEM}s zWGKfI{D<1#h}KUtP?Kr z08{S?38tuLfT56&4Nue91z2*F|9k-P#&e#3lri%K&oBP+G&^LD^i(ESlnWYInG`Kt-aR{k+ow078#_#<$`P+n9w3eTQ_*g7 zQH01u^riqZ$Rsei|LIo&ET(tvP&lCB`DgtNH}`IM@UL~+^(Q&W755Jl-kJZsv`SI` zSlSq0Ya{Fe1^ah29mkjFOcJ+v)~(NgZC$=t`{TZiIbs4|!`W%n-#Uv(2joaEDU(Qh@YB5pWPd zK#*aU+K1&}KOFnawo+ZZ-@mWMF+?wL3{k9^+p}0!h{)#6o3jei@Ag+M`<+X1Ysk7JIU zc!`5djyY18bt~Z{Ys~!8FSF(-D}J)YmHV;a!0r=yZ}_g;rex+<(YNvr#{pmKt?tm; zP`3H5-Jj*-5hhVq;ig2)WMOyKhdo7`O6CW+ZY#FUc`DEl(&d{n z?u%F+>E{D8w?uSLCDD~C_-hJ=ZsUFQ=k_{QgNduw_CIJ(zwB#&)@z}a=E%i)Lq0%q zC*iOxIQY|SA7<*YtkIBdC}4bT;URRhYKMiW`NeI^2Q}`OJz5wr$N%|&6%sXOaeq7e zPyY646n??Bz>oKY6jd}1kcqSY9o%V*xkWI~dOH`!--|BVj{TUR{M$pX+k4L-+N|ks zWBdVSd|Lv5zGFgEAE=2UTIp918ESUOwVQ!ps?9BRD{!xBHc=X3Qg5^-FZBBE{Jjlz zzH8TQ#XBwP@v_OF7*95WSNb5YGC3Q)aG>SDR@Ae(eXU1Rz*zVK78n0QG1HFs<9p@s z8M%AU&Q~ba+!YDiX(1}L#QKvA)>Ud~U+ZIZm;SGwuX9<-?d|jzW_+;O!dw+jv!?wcpH2g~@d~M%b z`8vH$8P!k4_1?M@veuT{{M-lKdyN>iQKBf|6P&sQC^w)ElIHa+`kc#N_GI(<7Cog8 zlRU8uO~OGg1t!z>WKxo0{X#Q59vZ(Gp}Dqe6ft|qe<77j zkw4xJD5IGRSNAoXfzFx07OntZF4Oc z74Qp#pn*SKn|F00Hbv3Y$2?3I;JI3?=X1ox3oN?eRAka|rvizS<~JIGV?4Q`mCsjA zflm?pzwT4?uS@s+jRp80|FVb!`XB%D|6l)-2G7aFE~$1ZnGGtT2im#EDBy*{ z4Nm9{-V$c;Xv!I?HE5r^J=%eGfiYj0&+_Wj*(U8;}g92>1p4mGQUl&@Z zUUa82Hdm_SMSDi~E7S?hE|^hn!M3jcfHJ!Y>|XIt^L~9=HrRzlA5tDH7L(Mq=%KiB zx7&xmiR$b0;H`oRd%vItUwXCV`OHITqC}sikp~k3pzz~^tbEg3Zb|8=siSW{af}iIaReOJ=_PV|->iuh*&Ps# z#V)PT;U43Y){_xxZ*M5cYhzXyfB#t5=@QeD*XLE;da%K)me|v58uaxU#jE!mb;QnX zI@j)%=t_UVk+w77o5~zz!U?fy!?x9^OnA%^ z*DN#rLG0WlJmVKk5ONcagBC}(F22_A$%V&d!@lQSxd!Oz_<_U0H59j1l{Vh2@_z1W zq@Os>GLJ8Jm%`ExOp>r+isy{1HJ#t#6TN&qZic&Z2{x0eZu0m46%vAp&k)(3H#TsB zlj1zGQiUPMR)J_ah8Dt+yYsH))R?seTk-i+Dus5v>Y*C;kWgtpjfSXUEu%e!<#8Cj zn|ny2oI|8;hCuTEAnk7lJ5(+4iDf=V7$FE^bUNWY=2+88dGZSD{rY&z#+I+($<)J^ zO4tuKtq+^=IYh8XD^Dfo{^Q3N`z{C2^1Yuh6n+~p;Ru@M!Cj3XA4&Z9+yoXBwGMX= z7WX?G)@8#H$s46(5wrd7;()8^cKwDmM+Z7p?>ZRzFN~PK3OU45g{70kkRlt7~qL2e#Zv^rERlXA1>d}NKu=cmDT{;f` zJ!Qr0#Ketz;e}L7*=e4rNS@)2(bs9T3+Q3IpKZ0suibs z_r=(iAqt)R>D5$)Odc1MGUbBEbxgmRDsdY~ph(y~u&QSyAzHi{D(bdqTWR{kCbL?^ zgX-rL2E_|??3;eZXmS)=$73cnPVHf5hwb;YlKBLm=)wb3D)AML<5t`r!yBcMbxoqq z_m>RzrhZBS(yjPm5jR1Rfr&UCwF!1D-fwC|omL<&d(B&oxlWNzx{gwPt`Z)$wM-F6 zESOab_M(<@nKNw8_XGBuQH#R$u62L0=BKF#3 z-JzAub1XwYwz)DwO4ax$;64`7p>+XT#e3!n(+r^#Vl>M7S;!Xcv?zB$8L9ik-5<(f zFQ$q3y>zsy<{yZ4DWZSoMtP5HP+<@hR9VA&b}W+?YK_3g6sdt1wu?U(J)jcsqgK2J zY+6}W%M_{jLs8Deho#oXtxIAMlU~=b9<7wESH89G?MX%ykBLweuJ06CACHyJ5C`c` zAN}?9@F=2>>0{~pmHcRubxKI!HLk|{(HDMyGEh@?$_V}QB~kaBDkU=_CQJ-3gcAyV(^FUf=`(ub zAF-CHkPym9mBO8^ANY_VU+XAuM1>Je&z%)L|K+O1%~NKq{iCfFuUmTJj(xEt_8$!w zIxvn!GD1>RP3hSU6~pCUP;G*Ws6rGHAd!L{p6XoX_wAYwo100PC8jlF4o$n=6NABy z&^zh(n@d`nkOp~WUw!I&YtnVwg9Tg~h86Jtf^v@Lz$*;)u zf8$^6I!Baqm|ahkc$i42oKFZ5vx=7Fv12EimeZ>bSeS`Foc9|+>ZmcjDZd9b4&R9F zMD~AuiwwjYL<+>##n&SJgf{H?RA<=pr(&=;a2&`jBgmD?7_-Z11D&T?=XDO;o_%q-#Ku?(~jJdJ>lLBA~Jjt)f6L-(Vk@A(ITDB?en&FvKGiFpR{Oyv-@s! ziaLtVpqa0gf|QY~pChb#hH{@>>p*!WCg*|frhe5);(_vUw{~q|=+?dJXn72#DlS*V ziYWAoN+GjC##j_OOs8_7`QGT~u^A0#4<^wWjcE#@)mUK-G8T>)vx!hQ2W%3faD&Oz zzD{kdLG4y_WS!#Sf*VaT)bMOp9^DRcy2T|PuHh`@dx_fFzNYm$*W05Kjb_!Nr3*(? z!5MA)^q~sw1va2QcOcDasGLunSt>+Yu`O(ddj;!SHkC#Qbl=foj=QmmjzYr%X8VL- zhGq4JPFDZ!J-i0k=QaLKYD}`FcpFh92V<~7a)T$Tw)=qD; z#jt*^un0*!QCohNZfyVllv2;1+b9-x<-P9irj1|>UWkxb1r@E7ilK>9(`;>|?+W=V zDpfOI&LoVGT5m)Y&SYR|ey@YKO*8DI;ATnF5@QeYr&PaN6(&O2y$rg+Qu23Ajq*Eq z?z3kMfQil(_ElvUUMh{EHW4{nJtSggQXeRumfb!}97S?)htPOk>y~zD1f&n`FdrFs z7dw20HhGOQo!-w+xW0K7u<&0wVA6Yc*U>wrC58))SeESNPo5nzO2Y2*>2_ z%1RbNJ`6IYm-Bze9eX$k*$u3KoTvuB8#|Q3aarQa;{+X!?Zr1#`_vR$qB`0U#Lq(-#rwF>98dM;U#1o~? zADDGPMjoP38Yyh>I`Va_)Z~Jq9OMG=+4t&)F4)xKXkSa~hYM}8V+ZO2O-%DI?Dsr* z&pfeG>otEr?&VA|J|=_o;C!Eb7#=IPZ4n|@K<-Y-)#9>`XzLPHt_#IE61h?$l z%PaS{=Zx<@=lykIq)Es%JhnESMg(?P_-bB;C53=xc8X%(`nKgB9_-ohL_^-nT2yuK zhtEOQOX7UrnHpKx3mxF%*%;*?@wZt$M}7OL*L4JHF!)Xj>@bZMhu{ab!iSe?pt?&z z7Jp=k{)IO@wXF(SYi%znddJEXa?)H|Hb%nlkXYS9r8CV~l(4exGkOHV5L&+W^qZFq zf*rcEH)=9#m*ZE&dOJk*^k#Ypa|;2d@HsZIn8yxgv$QWh=kX|ygN8yMUm!&B^Rp5D zp6zY>s_w{l?O+9)Er-z7L+3h=u0wultuMrS`bg1^QP^WCo#6}q3hQ|MBal_k4W4aO zLDS0Z!cOda?R`j?1mt6g8GJKw}2}} z_vjBg3P5G)YWeQ1W%<|zag{Noh#F+)- z!ug+^;E&uwV;tW0PW4E?GTkP#FcGynV7B(4{&K9{Hld9xpBBHg>eJ(s!@eA|fj{1i z2+K_8J^+|NFS+)YGV_5D_E*IjCSj-9N%^)3(kS5-T}wsPjyg`+4pFC{>~O4;r` z#w&3g-J4Cj7%V#HHT^Y#3tO^z5S!M)p7^)2>a{!b6--dZ(Sx0&|MZy)6`QrT2&5x( zE{Gm$I)S)y2A&>iENyq3VQ32sJCK-!a#VU5cHqZ6tMv7wp8=_%_n*Fn^-)Ggy}f1{ z^#Zkkc#Laz&K9>_hD8dG5Ow^1s@IK;N-i8(15Vg%Y3}s?^{Nayr-F+nCop1?SdboXj z)%AFrw05sWf6o)hQMFS7tI*Z_8+}JTnX>_IQ~lf6wbja<&seo=LLPRDAg=aNb4v$X zXq6nC<|2CWF!H5k<(tIkxWRp*xs6O9iLaA3Rb<^P6>G03ucQ<_tE~K`(m@Tr$LB%H z3W?n)hj~12Yt>%ZQmgy+_fD?((nUzYZU!Vj7~3igL+%r+wUgw zxDhP1cThZtZ%n5^YIpicyoP1;(C$IFFaOCU3r0{V>SDwkE^zEd%3?7qwACe=Qb{4c zZ@+hdH6IGX=USc~(ox(6&V!$?o?UAs-WeuKl6{0;VG`zaEPJ}OuRQb0Sbgst)?Iyk zVR!{q*&azW7&4-3S3h8`Rp&PHw}Gi%$f=~riYR)Wu7p))u_9EkALe{NV_l>45I#Q zy}K}L#7Xd?vW{t2$S38AMv2y26$n;LWEJwg#PTp z5i)jOFPcL3{lRmnc!)oJ-O_!}g7Yih8g=w>A3{G9Schqv&uKa+&s+YF?zeBR?dhM! zxkL1~|C5)|>61yaO!@MO;B6xXEnUaGB9XDo=7Xb%J)5x1asE}Pm>@@YGE#utD=pcZ z3d}gZqkE^Czx*^O9+NqA)#9#37OzLyU*;pK* zV?Aa3Q|s90dA$`-w5$xI{JH^w{8x?>@Zw@h+p%s_9WLsx20s*=u}5apEj{>pUZQf8 z-jRwk>Unvt;tJet1bfJR z2sK-CwwUDQo1UGm%zI?js#U7H*WkB@__#9PqtBoJehEx+}YfDm~Qcd zcq4oy839*+Vo4-QQJ2rYg+rudAe;&mN&M+OSC9<{xORpwfq%ARZP##?t~qhIt0GKN z|3t($cW}d!r~67ti0Nc@rv|ysk+0QQV3L^BoII0YysxK+q|Xkq?f4RnR}!7|A5IrV(>dR{__rN= zhcO)~P9;U$Hyb;HhOvK4xusZk9+>_E^Qip*>H=Wt2HP&w#6e3~3^kmdjALlh-)PxCmN!F-pp->+`n8SbD{sdofqO^I$2OlcD11PCrQ zA-yDF)#>a9ABNQ#19DT~Z&%~^o{)}ha7C2d>RK=lpuZfPH1&dC#9eI2>DeA@9Lo@7 zPU49J4}1928FA)5a0ekAw^yskg9E?gB_Q{R)~McW;%-B8dc>d6M(VGi>~S5m6EJP` zq}7u8aer2p9@HTU;E#;zHM2x5o}dr}yn>d4z_>oXhs9SCBA%A&9V`6wesnAD!O0wX zwCy+d?=e9StjN4GG~6v$YR!1hyVH`O>iVHnB_mN3S-Rnf;=ZIj9n|!zkR0kEAzG<= zJ7P7gpV0uk?>N6usd7oE_BQR`Auqttt9XPTG&c3{{ju|zZ%}zKQb3(LBv)Xt=@dB7 z^`Cz1F|c6`RL4kdb{|da9m&LX($=dt29tbvo{~3QY?s15+zS-KBiH_V6<_P-O_#BT zHNWY@co34ndeYO0PjNTLh1g_xq7AP-AzQp~7**>sl^*sT2j96jG`jzN5QP;z2HpOp zINdml-qWZ@YQJ+Kv!{8h*6Rdc-MOzsnbz)7oXW#(8cL*!94(lW#{Qyth&~#268q>b z_)=AV{>v)yVQT0>pYxUW>kzlDO2X<9kaeBx5x#Wh=P3>BI-L0)Z`+v4gR|Xzf0pQGupKk&DjE?6VveJcvnpG7+$9Cv#R1H6 zBfx)-7FWH0gbSD%DC7}8PCu? z$MZ&Zr+Kk&Q^P_$dYxKuD%1oQgvG^o13pvGMb{P=jbZF5=%EW8WerYs5>PM{$+%S% z^_n~wN1tNc4<fRlp6=OUHLND(N_uk!mmE{)Ju;uhNXpDOkT1}D- zNkBVqk0fiL6a6uEXHY$+W;rR~{H5+Kb!?7}2N&n{pFU_hOGLY2ZOVeVZU{KTfK-x_ zj^=E{DOv5QS~kL^e`5hQ^^UDihZu4VqoiYcsG;=Jr#t0NFL63w?YE*v3uaJguX!hi zc5_cj_$4CKRr3)|#989o_O4V^@#rye(Wg_PtZur{D$YS>2m~{u2&)t@Y!AhRns$vs zbmgpX5M;0D>~Cb!)qS9%ShZq-F*Vx}H|X$E>%f55E>h@#5j(Ka(X+i%KzeOLPp}o1 zfhB4K_hYXiaZP6@Lv;I3pat5)B;fS5a};UUiE1-joN1Ol6}fo?C~kXccOT$OCxW=; z-pF#;JXlb1wgMP)eBHtn5>1~OZ-VEzK~;Avn`VOjU~lvm#==#^{!{~VDus-F-1~q z*TFj+2l2=ipPZb7fNaWAKm3+LhDCgb1&7hA0@-z*7)@}8@8}j}bR#gzVk2a%U=C1v zwFhrIJzSC(dT@Peyql9a&QGjz{?*InuFvtzmzWMP6B^fRnC!vRXfS0k)%r@i4sPX5W95^2;EM$oKL?NtUM(}1a$veAW1s9K8-E3S@Pgg*L`QHsL**u8yI1007T3?o?MoU( za2{Hq0mcUZ>#aa!Q9S+2X3pVNFnLel!hPE+%5#)8+r2Yn+doDNF?xbhz7cQ*Sc=E6 zLr#`uW(193^kD11YBXtqJtW~BKrG$A6jl?6rT-VB&ZOTgReMNR`Tpwea{B|^Yfiy> z>3={?6}m#;)TKqOZ^$R2z9K|m{57%1%~!RDaK}vuyinKqzt1VRxllXIkVAHdXFaQY&_O z>MnG!SzGrPPX@!#spSpWpA(A+=WprIZTSs>v#SXIv0i8YO~>|ZtUQGCT^Ceb3w^WU z0)EH(6ScbEVWuX%yUv|BxoJfnc1W`vKLDFxSIrd&_gyw&U;N2zZY6HOb54c8m&YdM zIK`PiZfHC^s3?;j5{Fnb&I9i!Wm|}Pd$Zh|(>K^DCNA_OsbRXo($ij|zlHZt@^klEnrf}68Mc-8=?a!3Nk zm4O{5QvkEgn5e;~uQim4SUu#mD%fq2`%J^RZS)v*en5)Emm2pCar_2=XtcR(cVnjL5OHL&%(P$KoK zZugtlW0a?0q5;?E(F_ny%y#LiVBx0r;6`E#>SsMh_3xv}kjVlo*0 z+pD>ELpls5Qu@uXMBAM>{sJn1I?1T7JHkalAM$FjzK@jqD?jv%b&X|VD`vpBD~rjA z9gwiid#6`0MJzn&VgFlK_5w~&d2@QOJ{(iOHN5ZU#pV??cHVc?ShRpm+$h8M7m0P1 zb%T0RJ^4Q>P(o>?ojKL4QZnW9X%;rlaRXKZS(Z(O=7VcLuE+;?v-h=A(-b$@o0>Pa~a&M6Z=Y=y}h*gH)5Aqw1#VpCr?;{_gMSdI^jw(1Dit< zawq0Px`z_xvIR04o>9hZD6*Te{K8zWlUmk{kU6!iIay{ zG3Fi*c**qF%!hm}J*BQ{-%PTtT6e8aDm-AF3q~;eI)j9J=o>IatFg3r?Gol~)R88x ztEU&y!f5HtW*y}aRJfh(cjo{$n!M69fX%&Z<{a6Up3s4@Oxp6V&wz0P@KXCEHz8t} z^IIqOZkBk`F7L3%P>1_6sP6)EIq7LaqsZL6LYe<#%=y$awHGr!dFac`V#>DyNv1nw zmO7ES{KqbGCwQ4DwRTmW8|p}R2am4O$A*%U zjc3zzn%1-iNo2A1C``m`n(ax@l3C_V_Y3-5qQWHbO;-)%{U+bWrrc!-9sco{eC_32 z*__`bw>|HUVtO4Y2X4?SGcH&s|K*j>z}#+ATJi^u8*X1W+VYzO#bU;-Mmu7W$~De$ z_paYrsVn6V#a>931eJiMh`#DAd7(H{d&k@U)^iD!Mk?YeaVIz3#@x1RJysbem>A{}Msa`H_RSVA2&Kii`YSpH|-#`mIVpK*V>#_XdJY{yKk0qSLoOCbC;2~SunpQV6=VUB*Ck;(lwz7K13YUS@`t*X+DYlqi z@Z!}em|8%viuiD&ZM z4O_E#DuV_uq<=M#S24bg`-#CYN!|x7do3WM;qzw#^L{p~(xg9~X;fz9zQH|zFz&(a zjVl5@k`_|_!O#rKpK(K&rBMQ^7ME5wnLnQL!gN&)yrw(mc-^v0uyu z&Y38YRB6h{*y5mopCpSR{z+RADQ0VeQZs}}qEaVgYTY02i#sZ?5u@%IbRQbGmbl_btxqA#b z>&9IwcOQ9iM2-@6hdl)uLv{$6Za5$e5%MUPR>c`fq+M9N45Nvl-gshPwB#U%ZN2Z0 z!^eD2y@dM+t}3T{^HG-XjtgO*X?y3s>c}J(N;>@36$p5L6>8xE#;Ie}BqWPh*0Pp> z^SD&n>X$@PJ3VIbr>#P*xaxLvuz8n|(VD+#5es>M1i9{u}ml@3xaROTJe!>XZ zYyABlJ|I88{||KzfK_sB+S67MGTsuEbl6KR7P$hf>7mc%6?!O);d=U%gjJm8r5$q1 zAP;af7!T8Ni&Xwn2bYjg__X+*(#Jk9v~kf3F=902Aw-DL-qV1LVm6vuOH^}y#g#Mq zD4?9tvgc!AJXh507wNtAK+?Nq54J(`mr8oI!c|LnlVmi;07-AP{Jyk1{e&sIN6>1k z1+4~K7$Nw|Tm=f!KUyPrHsUHOkNv$=#IAGhP7=JjU6{Zg2)de`LUO)z`YPK=+Cud}k9>V{lOrM)}{m z9j22&3?t87m9!yA;$*e1wjQD})qRY3$IkAQrhN&^zYh_HwtMg)Y$1enLZ&-Y1gvhIKE$#49tL?fg8~+9P1hyX z06|#BSXsO)3uOnYN-PM1}2^ct7a-ko+TV}jM7 z9)lz>HK?p9;!NzadC|kTSkbOuG)&oRN`o3JH5c!*wuKmtWU~CeV=|=M@i{J2Wp}1@ zGhe@8_?0!-uqy+{3A5_59kiy-h3UMbC>j(@elh)*=@kAQOfKyS?!yjPQRF}O0~~m% z`46{i3k1WiE5a*+eWbnJvVA`)EU7}Q9y zxxJ3FDv4OebI4t|?y|t@333~t1-wsMU>XvIBV?|&$sq)MO8Dk(1lDRviH24=ZO~iN|4gjgXqEoehm0qC!$s@1sSJAE3Z{&7xTsvj} zgKtwWG?6i(CCskP{&=sS?8gICyNA!PNUWOdKp&2{7oo9VkM6QSTn3-JPQ}!6N$A{^ zy*pE@RfJ52)IM-2GKa!waMw!)kS<1Ww*FxlAM)SK5s53A49%Y&VD?~0WW6koxCcFy zS26uy%keSN zI4BC;*-ct!T%hASZzM|*%rEp<4m{MzlHJ?@3P`rNDnq9A*@}zB$4#GzgyF&=R9tv# zB}sfe)g{zVSk3FSB};)soU;4R-v)o*FOzPw)D!&~obXm{@ynb4d>O#35?5}(ceA?d zGJ8T6@?j(CPo|8-yWZg17L`D9r1*^gXcR94IBobr`>dq%@aDaoIhj$^T90!ha6;W?t1jEbz4(~KJ`aW7|o{eT?LdpD4MIgRSZCxj*kK1p`Fincz` zY!1eo-9RX%@_db>@0}Q&V_%kplb)UzzJm8sbMiPI6J3Fygk;Lm8js}0>_g&hF2ReW z>yU~MyfN(cNB6@C&q^g)a#a(R8G1PH=?P|)mIXnQ+QEAVG6Jz#2! zYq`@x`cRcPfBM&@+n}%~{n_GXC?)V=saC{yemqk8&D)%WammHKly+G70-h)O?|oqg zRC?AL0X50bdxx}xL^gZf63$mrkbpXnWh$$qnr^k3vM{M}nN9!7S>qCXP#-2IdYiT& zI|BWZ-O+h~)?QF+X=Ia;XY#uH5J{^Ug zP$}5G_1uaTD|2?f8h)`C+mI+##E#5)IiS`JN*srg9ALUQ=s5OpD>l~E(#naiK&(Nx zJ0NUl#O&gU$}@5n;-W#Wg^-k4&`-iS)nh>_C%75UFeZmL|8275r`d!DjN|RSPjMHxSn~$}sMmo8#w`xZ;qY?EJ=Cz=>=)&G7FS)Vrs;bq zF-V&f3Ptb(H6mZ$C-aA$e&IF@rpAlV0e#MRf%@?uX)D@Iv`WD#8Nk$jud=`ZjUM(01MZ-%p$k%kin z*5*26cp_g`BnOxbGS_$qZ(QhGaJGTQKW=8}YjVlNykpP|&S3#1DLlCa@5YKwX=&`5vtbUXJSahZi}ZnS>E z7}$=zuU7^>u;jpJoCNT4(ITv_;I3Jh1z*zr&wddQz3MdF}=?_&} z9SJgTmliH&qMbMJL2QC+2}%ucMueJwu>Yto4J};qYKTZ-RvXoPt&LwhIj7=`ILzBE{#c zH!xD~KW6N}a}d=A7H#0GGsSeyxi8L6_4(rLK&naWTNBL9y7a}3a@8suRDL$$e{Ps5#ddQ5tC3SpHw{AOWAm)KORrZ zD_Mova1Bm1JF9Aq<-UWOg6=f@8WKOIOKnCxBeHG z7LXU!CXB)uYOSi*AIlB=y#B%)f6C?M6>+D`im#~RJe z&}|o?xFCO1tJWRwJh_Y7gHyWI|5M~R3M4`q0{9}SWR%RU27ji~aTKu~CRJ!CZKU4D zuA+@J!U;f?wkfN?8$&FWybuzl;vrG@4n6$4;#{pW$MS}-2bO^v&gV*^%l^lQ{=f6q z|L~#xCs<;yqPd(@t51ucBkiN=m47QewhvWAf8QIOr}wyLu0DwE-fvuD3AJ7l(5^oX zOw(td|t7G$x4am^dfR$KkeDUE*=RH{J+uhVswT)Po?sib~xF9POtfR^{3x7s}d zO!Eg9s`-{!ga08#oJRJ#Kss<6|MAC7+O59{z~h2sHXT&p+-M=G%d@Al*u0z~h&5<3 zaj{@6m$`ju z&U1HGD9tYrHnVlEvO^Yvh2)=cj*SN z>pr68QAJN3d{w*-C?M&eU}HnC#*ShqpOQJ5q7upkw>umghN&)aJ4-2?xq8&LyBEk8oCVTRl?M~Q)E_C(!_fBScb3XLp} z6E1B)bai9k%uQAabwwbxrz}uJ!Rofm9Xc_%8Qwg5Z~Ka^+dvgMpybC`;`oD-xK?LnDm~dgqsQ z9yy`6p%!(_%@(!!`;y~ov|A%Gb4%wz9>;F8XAVR%$^-W`vI-%2)9S`~Ku&AtTmrc|QG|qR<3PNh0<(gFwH*PG|S$eS#PL*{2wF7mdTfRmc z7Xa@gHa2Fw{mrQ;v!aj7-~&QS5^b;Qv!Lmyrf6fr)$LMeqPO1epWE87e$)Ofg1cFl zX-FmanDdxd($`;QL86!PB7ssr=W5xhD~GK?WM{v};8{a=A(Q>Nr`1*mB3fy3d*i_8 zUP@CBQ_Hh^K&G_nStWy*Pui`KrWGx?%#O-9-CC@|Z#_Yx7tn8u4w`VCPf9}H3ceu_?7vuM& z+FN(edZ(G3i9_su`>xA(zmx<#F8SiC_W&%66owUpx-JR(DG5SLaVJnHP2Mg6MHVh` zOP3Fz!gM1|(;_z**R_yIXh~G7k_?5#9O>5Y>BOtKb#-3#jg8x&Nwitcm0T=rEa+?^XgjZCLz9+TzzHQbo(9~3jbb88Rx5$D`#NpSO2$&d zp3VTi@={y@2s7~7p?tGD_q2I$HUacT)M=fslb6?e5P5^9It0k$7k1vMjXdWbQ7|p3 zHR;2#{sD*+38!sanF8duA5U5T4E>f_O(s%oe|`4h@MU%WE{@l+PBqDJ?j553>>B<- zIRn?ZmV+V5hyhoeHd#3{7bM2AA%O3cCLyOeGY*6EZ2qr2U_v%#!{ z6!9b3b)MsOZ;`4OE7EoN9sAbq=s7DkC+)iSL9>YtwOccqUXm7-n%pjfsdWRS1mncH z2|TXj)#XEGk{WBsAjYJRw--&-Y{h6x6Etgy+=EDWD+HY}iRWQ7|4(~w9uMW)_l>8N zLR6F%8cRjlm&iIIOA(cdNRtebElak+RFWiHLbfJtDn<5WnM#;qvWBr{--fY{WoFLv zInL4dy07njU(fU0_v`ojypZ)k8?>8A5xy6MtosxgWilJHtCds;d zB%CdWJ-uP>3#9Y3%|Q=d#JX*AP!1#P%yBY|5NRU-idOzlSZU$60pj%R>X1LLGiZChACGqC+V z<-O-J&UGqMR^t5R2uGkCy-S?M?i8h2j`Ny|r52O1k>9Ih7a#faA~1CJUlZJU{ zZZ_FbZbN;9)(T)+UCE?p*UpX4O0Xuo3QdGH=F1+djGep!F`pD+Xdd$t>xZyp*hK4L z$e@N({gck>YI(yamy>86=_;OA#n-0J%6T&qX&3{$TbZ`+mEi-Se?R zRQ#p!imoZfO826B_gn9YEL?rtwhqcivviH#<(~oPdP{SrUQ6nPYabl;Dz>G>U#7p| zl8&ax@7)1WGFAP$%IrsrpE+oG1Hk>r-F$n?aJTB04c)`WI~RL;B%cY}4A2`x^ z_@rr>+JFhg;%cI~P4OkmZM02pMUH-ALA?nwl^F#I4fTa zjGpyMSZdZz2jXMOd=K%*H(6ZG!k5rRzEeNWk>u!345jvEc}xn$xWuzJ`r$IubH+#v zw`D(okEb7d*sZ2D+w@D{0khLmJI=POBXh~2`9uBoww^u+8&J05{pR!=MZvt6v95tn z3J{bKdm8>nm}}|%S9COsf4xsWoN!JyjC%BJ!6jLxm}4mnf}OSTA{|XmBT8XQr)yO_>;Bb*1R;<-@FO4>51&mOSV;09?YKpBD{UcKX5-Uu$dGbA0Wenc`&&bKI0=g>ZYM!u5I>zv+=Uqtz` z=OF{t()smzjG^&92_vqii4M*C!J+2Z#a{g${zFC3m5?~04(XI!a~Du9(4<37A7kAt zXWxi)lC`<`9U~8E#@wOdu|J9Amb=tF$jZLFI-T z+BK?KoE0+G9~hgOR`yd^CrE0-yK3ck?cU0_YF!#&omyjABoleXfe+de2xGf;o!BZn?@2le=C^MM_ zD&lP{o-kL-7iTw7&P$E;O0|T(kvbC-xVCsH%7&640JvW6CowWBw5D6=Oo1{dr+%~K z%kGv>&|-(F4%bQur#I&>6-@vB_)*U{y7TGN!-UNK;oNbJn69@cNPBh zsyx*BA@f^K=~M@G(@NOVj^(rNxB~)BIc2jysNCUUep`hG@-Avz|829d(NiOr)Y<)$BOAVH8qZ#f`||D-$!tQ@lKD=$ z69$u5?DB3fHHYnes}flc(9>j(sIus+EOSl(NGX0t!_`#06$!oJuEPWj= zFF}$$&^jBZAd3Aia0^MZn`KTh$tf*{orjr#TjqV|6s25q&qtRLU$u2Jr=>^3r*MRnEvqEbqFgocfl8ZzT!#V4I8n*?v)#qydB()&!@;! zRgEtD0-gx1&|_*7X3AIaOH2C0)q9GP&t=Iemby=t7byS4;3ZzhiZDbaC9s_pc~^$+ zmsE9T-F^2s0j5abDRNJjDcK-Nos&#^u7nztn*itJ_qMSG=$yIejvOVMOa6-U5k_Y7 z<*AiZ&O0t0Jby`IX1xBT;mhh%q(r^Ev4ExyfK?R@qBEhq+MmuW-2S^-L>Uo zbkReCc_py(ih%n(bJc1(EF8|6vi+i|tUTZ-s&ir(38EWni{5f#+L$pb^x!_>=T8!S zx8~vcXW?B3v6kJ1gZ(wxxTW-jnLDlwpW$!c7)m>ZxGQ*aMGjE;YM;macEQ~D>;Gmy z{3bKRf!Z;fG?)O)A=3dPC784Q!jj8PEp#Peigx&+Ry_}4wHQBv zNz#&e;L#qbIC-RW17mKaGMuk`o|7U9*9Pq%v|p0?%3pf^g;W=ROfei9)aO`o2+lsj zhXS1geb7N{rW|&J_-yBm*!;F0Q#1EH8;1bi%wdq3KEc^NWQmh1x_rqghvlPAM&kQ| z_Uf!dV${%$1#_ZKISspe{eS5mF-Ol8lrTE|)XTS&I(3}{*w?=C>1VyB3Uq*8WlCa8 zFTOtyuDf_#!}pb&bW=gh-yI102c{Y2Tp2p$DWl8!44x)?6De?LH&8*Os&8wESbAt&b1$P<#i9eVl1d+n+<(fo-Ma zrRtftcENhV$+2$47a!edm%OKccT+CX--a$sv?U*Q>A7{#**0WV{lnF7a^EF;g_j$w%#JCK-U z>Q=G2q{w5P>84>hH)iFWCVCx+8dR2#v89FayuVb;kT|_DI5z&>^l}L(V1#Bd-?8Pw z9rP&`!nsbhWK_v3EZj_nkeOPXCYkxc19Q=_S`$^Q`cap&jSIbXBcMm3cm?31-;J+) ztsw64k$Jza#+EA>)tGc}@NJTy`kJ`S->d50YNk!LpGKGDY%>^{9MFnO|N2YZ;Iw;- zMRRt^q3Enn*4Ub8a|iLFaz;?C5!&&nIdeA-rpm&a8Gq|aeVvjL{ zxYF@!adwKJ8e^v~lKKI%tg%>b2f)3uSRrDU^hCrtdCf!B7vB+ z0v;=_lDGAZZ|g}{vcqZW_n%|w_=h(RDS}puO@j7yajhf#z{1?24lknr2!Id}fGPaj z?665iPFt891UfT(v+$s{c0~OFx5Vt5-tynS?OV10c)DkO36_`C7o!%B)|bMwxSUCI zy;qq;b)}-yi_WFOOILK_(uqFTPhC$ZTEC#a?^0iL?)KYA4hj>E~r zGNo-5(XqB6H!Q4~JR@_{yOw}`Qx(i>)*!j{1d+Q+#eZa9^`^89UXasCP+>;8B(pH_ zHzt(T!dy`;TU6QmZDvAp5BY1GlR!^QE}Z-XGVIgH5LavXuX~&+j_uTqeAYWHd3i)E z_v?LDzIp2~zRIJKuV*fOz5IdHV%fb-zFlSBzgKvY)?s8oU^mFe{np7;t|)pX;Nq|5 zb8>*(Odjufzx>kY#oD_{XJWSHMVjB{8!mVfo6h)d05hTAcBr$;AMK6fe_+4a2so?-%RjZl-k> zeAi;lTU_XJSnJJquluZPI&)8c&~k|*t*3M3`XP5!x$^ll%7+(*IC$R^P70(d-O8k% z*yQrNX?kB6b!H~3E?Pt_X}EOh(XXe!10ARC3%aCXl250-mg?w)FVSC|KYe{q7|t{M zElyR0q^X8|6sv8GrOn{4T_aG6X(kj{`L2&@N8N$ zFY@qVS9?n%l3YlJO0UFM9sKzGz1iFuzK0-ARsJlQ*L;LT(IyYeq7-Aayu?kK6#6I* zn0P13WX4VZ1)(14E+>H9Ib~&M^lAar%R%rvg64mT@r0GBrdulDF-KT>U4kClx84Aa z***z-_xwY4Y{^f$OY?7)`nvlmZ$a&^BpT%B;~#Iw*u39Vc`xl@tXrjA#o0;-Zp-Pt zoV^>RCX`)9VvaRgrWl!NrF6RlO;3dm&wFR)OK#>5nzIQuza*rlaK5g{+%M;1iIV;T zsZZarwnNw59nAxy&jY$sZ`g{BQHC6ZCe6D6RPAUqhl<0(I7_)w32xkw5-!0)x3v{G_U zdwl4D9AkItP`^;?^K6+))ZkZ5V+t=QUVS+i(%Lg(eh8reVeJB%ZUHQfcf7U`h3L45 zR?@p2WJ{_y21;VVO&OcS8>Wx^BZw@-)2C6mp(~c_`aD4dDVVos$?(Vh1M%@~WbI^a znK|FkD}?Hw2IKu7`Sn5z)Q@2!2tb+m`$Jz?I zP9DLf-`yT4#9i6iTi9mn5&~dX>PzzNF}SJO68Vi(^x5)FWglCgS-HUsJ%Yi}cBpiF zr#Twekrpzw>)5IT%$5tilLZK4$*pBs?3-=muU;6<$mJ=?93d-wCx7 zp$bZ!;g9qPB=Q6&HvG>3TSm`O_lZ{XlV-vd|!ac?}Q}X!!euZ#>}Ux@BnxvCd$RE%y7st<*K=xa`}csuu)O|iQ)IWstKY|5iIfz=7I{CFQ6+$+=euB49Ix!AkH z*{{_a5fLF4G!`6dHPf4&DJ5sqDT`u_cCE}k{?Qs|UU90f2o7#nOH(Zx%fY*?!ASow zzsTaqx9k2Cw|rsesYXAF#pUyYIttq9zi=P*_EQnEdwa!U%e7CT=*GC1&l>V&-9AuCgITeATJ#U$s>U-6tK#rBOBf>8>t3SHC zrMt}A(t#jNe{kB{`n1bLksHs7UHgdnIo@CJUYh7}F`U940Mj8d_`@Z`5?`dMcG8rW zDSkEMWJT}m?5v*n2bFsT9~Z}1;^kZtck7GUaDRU_a{RB%ehGShq9sq7jE@`s+BC}o zcU3UE_5xFR8kAYPSuwvh_)-DtfB4NnSKT(e@(5@@kt1yM1$>8=FAh}$pWq-?y7S|9 zDRY93TkE?E17WG##p=~Z((b<+RKBqjaxgchNWKrDlQzwDc-M;@)Jr(r)J1=WzVzjE z8Q%+c?2Vbcfk}c#$m~MNyIvh_-xZ1z=EqAEv~051_R=BiyS9622GYG-?s#{X@kX0Z zh=SXP^rP-Q1nsNutxCkRB4=j&)E7Rz4NcpgpD2%URCV=d#LDxr#^uu%mw9JY5t|QA z`u6z6<`(2ceZOYy?)jji6^c9KH25`{5 zw+=LnP2oS>pqPTcn@sujQ!7rJCxl{eC2=7Sdpt3>ms#Z3cAZ6Z@Gadg5z2KO!=5+ z(1=I;Rb%p`9M&XYKAkHa-+RM^lCg+pElmjIy__A@tE%I-g9Cl(1R2ds@C260TJY4?cuU-I>J7y*`{|YxHqvUm)u^)BmEL};9 zp{C8+oH-$6nDZf-f1BUg1}@MiFjdlT9KhNC3xwm`lv(EHbj7_0B*pOCO*kJY_1>GG zX`=vMhN?k%h>9G>m(PU1Y*(@G6|aLn-|LW;2O-WSYd_)yaX$hhB{2!i+A!h zXt3p?@eo?QH|WGoZW1PIZM|m+BBp~_+{1#S`Tn4ns{8Wp@=O45jqB69E0`B{({)Vc zDrics-o~|x(g%_hWx$E)J8=!?+xu{HSD|-l>a8WIWTt#d`j7ynzvQ%vSQxbd8`ERl zkz|x@Lv;Tc5iC|m*7WcVic6^N!0wKS%sj34wXz1Kq}KC+{LcDD1m(uWUU+P+EWp)U zYdn{-@f%`f1@l}UDu10u#v~$^UTFJt4ukvhbwfD|$Tri*)7M== zvS&X7MvtsicSnoMCDwh{-*t5lR>ua~$pUpqRq9tCEH}o4JUYn$nteFOwxX*tj5khO zSn|plGCFdmxn9dHQQpQK7zK$kcNOT@3=fx{htjSJ9kkFtcRHdgGH?P zq!wlH<@~K4P|&#hQpdXv65_#w((gUc0M&|lw<5jR%nKdlp}b+PbPb0B4P{i`tIIO@ zwv8i2N(O#v!1L+kgs8;M#{*|aml#RM#X1$;gb&=&Edxm%=)T?JygoAm;R?C!%=7rZ zp6^zzc|^I_B&;{3z?`~1DQq;rqnuWFv#RFyr;dO_YBEvbuN(;UTX5Zr-@7dlexdJe zebJh0SLXgmK0QE3WTTRv_U^#inH9D`9{#?|&L5dkbgUVd5F!fo60xmN{jG|x`t9%? z4iOD@?*yoIpG(amI3j&+d)R&ENqjJj+Kor}t2#0IZqcHbSP0fc`lXlO5SAJhHZ>3%i6OUi zE24B@@Rqg-L`OP!dDe9r3&8cPrUxKDT=(rb|E5}eQ--=MpX}f>Hepj|#4F*JEq{&r zuCcI!8?r)t#_>--875CK&*JDR4tb z;H3I%vA?Xr=C~u5JJ=E)d*CRD@m5!2hwDKzkkYfkKi`}c=eyHwJG#2oz5C>U<0S9U-QNF{s9kjL&rp7O z3x7vJL zK)v_)NNl%1W+M4e%*!Mc9`Lh6WQKSQ5a3oh+Z{jnU>fY&EIa)6EG*IWO+?#(rc zzn1f4ef8#kWH|@E&tJd!lUVc6;A8`m7Cjq#r@bo$Af6bxeJK+6CcmmP$qMfakK!~0~#WECFoNC_VzhH=PSDY2>4zBqx|3yu`TMzTlkDw*PS zO8>7>?-BR>T)lAW+?+TG0C~PiuvRHzYZ%t+7nW_5bp@L2$5w8C1ls0 zS= zUh(FNX4Q*ieE`>IxMoV1$Q}yyT5|>JP&4MSLv3O>2h|}e8{bN>?D+N|1tCH&=Zq@% z^3-0J+o%M*wp&Bg*#}!?(~a+vWH&=GyKD8V_@>iS`SA{r~ z`8*F^4fv`lTQ?B`+87=DH+|&J2o(t`XAXU+vrt~jlmUUY+#s|4_5l6E{*$$Wk5kJl>QpeV693W;6g&RExO22>6^IzL}#hp+37 zzgOJPw&$B)uMJ;yTbdv4eIutLq2I)Q5a|9%a`gU%BaYT9S`(oj2B4_f5v8j~imKyI zM6CCiT>1QMl*uJy`%Mt>!mROb(-VfNqYXh$ZkX2c!wv;YlB3 zS?LTu2k(jnH<$nKU6m!*9V+@JhQ5=2^b_{`Lm7MG^5ootlA7A5WIZp8sTFf7ybU_a0CTp?k5P9W1p46BYH(F zy`aWt2675s52OG_=;=F^PM_hjy^esy#~??a_WPN|8^;Q5D33cn6akn<3cDXNYaC-2VyZBjaPH_pxl28< zVu{fkK7;-&h=sW%bxUx;3%!Kv)iJVb=x7pDT zz?Jby92h}A%I(f`f-8pw01X+&56W#ED4!U>pFm>7E8Djq&MG6~H&=kvZ9BRhlYb82 z(FhY8b`=1chj1mSx+g3&FWNdBFun0t%C~5Qu)t_RD-s&ccrcl$%|NLV5caQ6Y(6bp z6l{U?DD23(sQ|7g^PS{Glk~Up=JOBWAA5is&`V)Ifqp(fKRRkhr-ETNYVdNj;&+B* zw9ZVRUm~3*OUwKYuEkUeK)g6MM_6u4$Ggt^(^i%UO-O`dwf@f5fXX4u$E!^j-2)}! zA+Z5#C9yja;b{W}xNoP|20SMTkErGac$?HpeMUMAk#1C;!9fdEgeK6}qq;Jev&Xg$ z%?)-hX8XY6Nc5fkpP<4KjCi=)6MYP1L4mb`m}2>Mle@ip0!C76_A=D(9aCDysAw|6 zFP!3(FWJm9=tsmirUi)Y<5Znh9YF_8*5QxbP5Xkn^#K~8sTJ>oD;0T@Z!Pm5mG9a? zhNm}nXs-hx8<-#{(<^qOZ!bE8JHV9=$I4!W@%Wu``x4BzFBx$;*fIv2d6I47Gp1(D5pexumG9 zs_J;&w#?eSf6z%B&OLaAWk1vQ6R=nK(>msI{bh)i8=wD8WN`4xbZP{1vGU}P z`wQ}6FM72)mTBSEe(%_yElD$kYbF7slzo28B4CjD`-e!vW&K0)Df^ue7OS}0L81V- z&LGC1^e*cpkolFcV#l{q&>Mz(QJU%|T}RF2HV~7syGsZjE(Q?8UefM6)8y$Wnkxl{ zq-l5egDsRuf$NB5v^(IQKqs>NX@lrh>cmy)PiGnp{eGAKKz(Gp7)|JrRf#F2DTcK< zg7I&BJo1DVK_LdsZu0I~7CQ2*j$g^>>F(VJz$R8HvNy4x&&x}3iF^!V^c`@hT1nDt z^4L4cT-1NBdA_CFFU++TzkmPxxZ1Wc4DSOl>rEz;QDxy`Q=*b_ zm9gx74F4e6mB>O1>;L>6vu1+*E3HJ%`;hniQVhZnMT@zpCIhrH;GeW}5dT29omHjA z2M`m#qD>v95-YCcUIRJwda>nHPYqIxMK=N0UrxsNY z@j3sMl5xg}+Aw8bW;cGXEsXtymJapYENKhM?-yx^NJ; z%Ez9Q!tw;ii9RPK$s&*}!^GYNx4ESO^T&Y5Aw`nl-(^|`P+(VxB63(7R441W_`WiX zIss2rucxz~fPvOvdUaax=(quf6SIo9x(1aFUz)Fp(Z;$jmAVZt65;ZIX(L#rpqSK# zxyriJ5f6V_u4hjC#9xK4mTE8Oq{4M*UpT%RlFzxd#K8E#`(O$@y!Bo^-iPHfg8l?Q zWx3Sjm1lB3Ej^?L4gt{qlr|#Nn*uMjp@g5k0eyg%NWM0gfu!wlp-8cfhJ!a|@Z)>F zbbRqSU%y9eFIU{SkfY7!tYo`a(1d#h5JmW5!{0GzXx>+%4Ac>hAKk#QLU+KbasV2l znYJlg49gp~7%T(Yg)6*=!(Eo}t9cs{r*w>t*#+cNM7DCP=&A)?K;6Fd@x3n;F3~;( z{22zr)FORH4Ki_SR_5yQL){-*EJ37n0iN4$NXfXn#neG@xb%Ok{DcdPL%{1dztcxP#2`Pb(S zZSY4pj)q54yYR(lPj}59R&pP_y|G!*eioH_YX0bxzx*3wM`jo(ey>?Bbv$1cxL;&l zdi6ULPCkSfoK@z~wi^5tesB>47zeSTxa0~$aMWd5@}divQ=e(k(7(kg0kQFD(sG;P ze@s&gaP5t3ZTJbh`zXRv^Fss%YI(I-j_2Q&+tNn*7$+cRW^_Od&W$*R8blqbh>A-71+JPYWQoMb!tGia{Ih?p55lZ^ zuNU@@-J?b7qoZf$Vuom)f*rnFFg+na-E<5355^c^ko(Tl44YO<`-b`r4Bq>L_1IOhv~4M0TutSt09_5 zU&^IU+-GC?mwt7qKhkcjeM>+Il!7^5jHrx;rj6t|AGouILD&-er1@$M2FH9-kdeG) ztusQ-athRBLwn#CUx*za8lOsRjK#MfyN3LZ75zpPIO*V~*!JZ)3A?^{@_AG8Y0{3h zP2RibkN)(gs0bh#(MIEX=YoM8?GW>hf_5rmq!Dj(n@7%A^u7uL)NZhT9+KP)Wi(`B zRMrjxP&KeBLd0&kooHD;e$HzA28sOkOaHo1Ml5alS2Rdph%3KxQe3i24#cte6Io}#+FOtk`_Gt+G`1NxpJ>s7 zklPiBs>;d&o)Ln161PuUei!=;g`bT0vkhMvnP`@?J?z(fQVm!_=w&6k4&sW`2}|=? z3U^$~lGq{&Z+TtMXhA;K+yP&v$Pc9>rNo1Bg+6BM;!Kwp+5j7%gP6)Uo^1 zjkv_)Vw&3;eB$@51%{=7y-QYfu`+v|k#K_)KDg=Y{vFCqU(n~ju|f)JVveR?^5!I= zWrV=m%ZH>B=E&!FA$vtul3AuK9BwK&qZ9*&qnUPdg*m~pv+>rTa@W7kQb34oPmpMR%7hgl0bcrq?8?EVvEUSfv|Z|t^>QYn`q4-k3mYiI2i9yv?wD-&rer4O1wszrRR&ICFl1Vt8Uwi)4f!WR^UG3@5>o(nEDmKOQ zL5j~r<}K6BNH z_;qcyD*>B#(^TlYII?+BtDA>0rInm=3AWDgT^RqR*v&taumkR=;TsMb^T112ug0Kt z`sb~VA-Z`~6AJ7%_l83qh>zHc_3~p&Q^34RlZrq~3^Di+W6}d(N~s7gUH;95-f8#! zUw_Q`QhFTw3s;n$)>&FF)fnmHm@`{5jksTRuC%OKv*q#eV@JTM%KnH*)x0~pZSt46TDOnI zxBA7m8=D6(T`cqMIwxUV;F6k%C(P^^h>27!mqq5~rH9O`m@q-V7FUj2JWv3C$;13$ zYv7rS*T%F0cRQzSYC^QD8T<0dxj20LMVD1$(5MM0!2V&1;_+5|e+KYht;DYyc(n03 zI5spLjXtRpC;Q0Qtoa1zcpJg>@#so?)GNppv5ffO>KCqdv|FYFQ!bW|I%?3RaLMo6 zJQ}k~Bzhn1hfJ|&$AF)H#Pbxrn@kt(3&jD21HJE;I*VaXd*^XB#*10{^UXOqHck&_NV;S4nhoa&jEpLRVmT|k;Z>%>No}!Cof!uj1$1%LkmJpD z4t@aWsM*0)0nMfpaUNtsB*e(J?WpnzS;Dkkrq+jKp<8;88TY&AIL9E8KVX z4wlx8`WhSqh>$N=mEDLoh)P7vFWV`ZL3Zjus}L*Dww+Dw=oeP|#PdU3AgCm;%>z&4 zy=H%LT?i>H{I?$%FRLK2nY28I>KPdhwr7xGjHUz0`{V6mdH^R4*T47y+YMTfrnr-| z2QEu2aGH@!5&tOkY-{EW5Z$@|$%D9AXJlv2Us~(>!fNdwLH*xK@IU_mV_Alr6LfEv z!&QGV9N&}{n~aza`C}4h0}+7e<$v^Gs2Mr(d0)oaZk)^c$4@`^o8_BHJH1SS*#kNPiF-)go|2Od0tL%ss=jY5|Vf`v1{`ADIYSkxjs+4{=vE{n_&W ztt|ZQ2evb8QVz?H)LmSA-bh~8b3~+vxFzaHl;qk$!vE;OBXc$;-0Zf?5>?y&Z?f<= zA^FsgxKC>Kb&4{d>KXIjck0;EBevUfw>j{E|Dy*72?+I?>(KtshWGdXD{J=8vVbc8 zKbkqV0nt6fLNC#+yrhj=)|qdUYl$< zj^YfI7$ACCpAZE|UdMRFyup!EH7L)12rqIoT4Rg9%Cv&pc@eT1^p4;_02G`Kfa1U> zLsZs{p(1XYf-WD!;n)f!-rHb#%T!{4e{Ff(3`SjcKLA@b7rz^;4i0<(&x?M$erJ)y z&1|$v$U6W{&*szl3l;bu$ip$mbYFo^4he7LUUn{;rTZ#wh3i%iX(=ZyaofhH%aU95 zNy4iL$YRtCx6ZA)ZK&OV!x}*qUgZG+=ig2s?fC=1Y$Psf0g~i6^%tN<406YFqRqyv zP+bo!^Z$)C2F5PG~-}7OeHYD;ty7u_uJSqg~*pxps6#f1qZi#u35o zg>pxmH31kk*dS!rp0hEfvB)u;QusWZtL7s&cJ~|nmeHsO@DJyMw*VaTHpM%2x7b2~ z`ntEHNCb#t#*977UKwCFYk>O0mc1ps~ja{vGU literal 0 HcmV?d00001 diff --git a/tiproxy/tiproxy-configuration.md b/tiproxy/tiproxy-configuration.md index 7a4b1ce2343a5..87242e84a17f5 100644 --- a/tiproxy/tiproxy-configuration.md +++ b/tiproxy/tiproxy-configuration.md @@ -112,6 +112,13 @@ Configurations for HTTP gateway. Configurations for the load balancing policy of TiProxy. +#### `label-name` + ++ Default value: `""` ++ Support hot-reload: yes ++ Specifies the label name used for [label-based load balancing](/tiproxy/tiproxy-load-balance.md#label-based-load-balancing). TiProxy matches the label values of TiDB servers based on this label name and prioritizes routing requests to TiDB servers with the same label value as itself. ++ The default value of `label-name` is an empty string, indicating that label-based load balancing is not used. To enable this load balancing policy, you need to set this configuration item to a non-empty string and configure both [`labels`](#labels) in TiProxy and [`labels`](/tidb-configuration-file.md#labels) in TiDB. For more information, see [Label-based load balancing](/tiproxy/tiproxy-load-balance.md#label-based-load-balancing). + #### `policy` + Default value: `resource` diff --git a/tiproxy/tiproxy-grafana.md b/tiproxy/tiproxy-grafana.md index b592b098910ce..2a8cf4c4a83db 100644 --- a/tiproxy/tiproxy-grafana.md +++ b/tiproxy/tiproxy-grafana.md @@ -16,7 +16,7 @@ TiProxy has four panel groups. The metrics on these panels indicate the current - **TiProxy-Server**: instance information. - **TiProxy-Query-Summary**: SQL query metrics like CPS. - **TiProxy-Backend**: information on TiDB nodes that TiProxy might connect to. -- **TiProxy-Balance**: loadbalance mertrics. +- **TiProxy-Balance**: load balancing metrics. ## Server @@ -59,6 +59,7 @@ TiProxy has four panel groups. The metrics on these panels indicate the current - Session Migration Duration: average, P95, P99 session migration duration. - Session Migration Reasons: the number of session migrations that happened every minute and the reason for them. The reasons include the following: - `status`: TiProxy performed [status-based load balancing](/tiproxy/tiproxy-load-balance.md#status-based-load-balancing). + - `label`: TiProxy performed [label-based load balancing](/tiproxy/tiproxy-load-balance.md#label-based-load-balancing). - `health`: TiProxy performed [health-based load balancing](/tiproxy/tiproxy-load-balance.md#health-based-load-balancing). - `memory`: TiProxy performed [memory-based load balancing](/tiproxy/tiproxy-load-balance.md#memory-based-load-balancing). - `cpu`: TiProxy performed [CPU-based load balancing](/tiproxy/tiproxy-load-balance.md#cpu-based-load-balancing). diff --git a/tiproxy/tiproxy-load-balance.md b/tiproxy/tiproxy-load-balance.md index 5e8b6395be193..d4ac60d04b6e5 100644 --- a/tiproxy/tiproxy-load-balance.md +++ b/tiproxy/tiproxy-load-balance.md @@ -5,16 +5,17 @@ summary: Introduce the load balancing policies in TiProxy and their applicable s # TiProxy Load Balancing Policies -TiProxy v1.0.0 only supports status-based and connection count-based load balancing policies for TiDB servers. Starting from v1.1.0, TiProxy introduces four additional load balancing policies that can be configured independently: health-based, memory-based, CPU-based, and location-based. +TiProxy v1.0.0 only supports status-based and connection count-based load balancing policies for TiDB servers. Starting from v1.1.0, TiProxy introduces five additional load balancing policies: label-based, health-based, memory-based, CPU-based, and location-based. -By default, TiProxy enables all policies with the following priorities: +By default, TiProxy applies these policies with the following priorities: 1. Status-based load balancing: when a TiDB server is shutting down, TiProxy migrates connections from that TiDB server to an online TiDB server. -2. Health-based load balancing: when the health of a TiDB server is abnormal, TiProxy migrates connections from that TiDB server to a healthy TiDB server. -3. Memory-based load balancing: when a TiDB server is at risk of running out of memory (OOM), TiProxy migrates connections from that TiDB server to a TiDB server with lower memory usage. -4. CPU-based load balancing: when the CPU usage of a TiDB server is much higher than that of other TiDB servers, TiProxy migrates connections from that TiDB server to a TiDB server with lower CPU usage. -5. Location-based load balancing: TiProxy prioritizes routing requests to the TiDB server geographically closest to TiProxy. -6. Connection count-based load balancing: when the connection count of a TiDB server is much higher than that of other TiDB servers, TiProxy migrates connections from that TiDB server to a TiDB server with fewer connections. +2. Label-based load balancing: TiProxy prioritizes routing requests to TiDB servers that share the same label as the TiProxy instance, enabling resource isolation at the computing layer. +3. Health-based load balancing: when the health of a TiDB server is abnormal, TiProxy migrates connections from that TiDB server to a healthy TiDB server. +4. Memory-based load balancing: when a TiDB server is at risk of running out of memory (OOM), TiProxy migrates connections from that TiDB server to a TiDB server with lower memory usage. +5. CPU-based load balancing: when the CPU usage of a TiDB server is much higher than that of other TiDB servers, TiProxy migrates connections from that TiDB server to a TiDB server with lower CPU usage. +6. Location-based load balancing: TiProxy prioritizes routing requests to the TiDB server geographically closest to TiProxy. +7. Connection count-based load balancing: when the connection count of a TiDB server is much higher than that of other TiDB servers, TiProxy migrates connections from that TiDB server to a TiDB server with fewer connections. To adjust the priorities of load balancing policies, see [Configure load balancing policies](#configure-load-balancing-policies). @@ -22,6 +23,68 @@ To adjust the priorities of load balancing policies, see [Configure load balanci TiProxy periodically checks whether a TiDB server is offline or shutting down using the SQL port and status port. +## Label-based load balancing + +Label-based load balancing prioritizes routing connections to TiDB servers that share the same label as TiProxy, enabling resource isolation at the computing layer. This policy is disabled by default and should only be enabled when your workload requires computing resource isolation. + +To enable label-based load balancing, you need to: + +- Specify the matching label name through [`balance.label-name`](/tiproxy/tiproxy-configuration.md#label-name). +- Configure the [`labels`](/tiproxy/tiproxy-configuration.md#labels) configuration item in TiProxy. +- Configure the [`labels`](/tidb-configuration-file.md#labels) configuration item in TiDB servers. + +After configuration, TiProxy uses the label name specified in `balance.label-name` to route connections to TiDB servers with matching label values. + +Consider an application that handles both transaction and BI workloads. To prevent these workloads from interfering with each other, configure your cluster as follows: + +1. Set [`balance.label-name`](/tiproxy/tiproxy-configuration.md#label-name) to `"app"` in TiProxy, indicating that TiDB servers will be matched by the label name `"app"`, and connections will be routed to TiDB servers with matching label values. +2. Configure two TiProxy instances, adding `"app"="Order"` and `"app"="BI"` to their respective [`labels`](/tiproxy/tiproxy-configuration.md#labels) configuration items. +3. Divide TiDB instances into two groups, adding `"app"="Order"` and `"app"="BI"` to their respective [`labels`](/tidb-configuration-file.md#labels) configuration items. +4. Optional: For storage layer isolation, configure [Placement Rules](/configure-placement-rules.md) or [Resource Control](/tidb-resource-control.md). +5. Direct transaction and BI clients to connect to their respective TiProxy instance addresses. + +Label-based Load Balancing + +Example configuration for this topology: + +```yaml +component_versions: + tiproxy: "v1.1.0" +server_configs: + tiproxy: + balance.label-name: "app" + tidb: + graceful-wait-before-shutdown: 15 +tiproxy_servers: + - host: tiproxy-host-1 + config: + labels: {app: "Order"} + - host: tiproxy-host-2 + config: + labels: {app: "BI"} +tidb_servers: + - host: tidb-host-1 + config: + labels: {app: "Order"} + - host: tidb-host-2 + config: + labels: {app: "Order"} + - host: tidb-host-3 + config: + labels: {app: "BI"} + - host: tidb-host-4 + config: + labels: {app: "BI"} +tikv_servers: + - host: tikv-host-1 + - host: tikv-host-2 + - host: tikv-host-3 +pd_servers: + - host: pd-host-1 + - host: pd-host-2 + - host: pd-host-3 +``` + ## Health-based load balancing TiProxy determines the health of a TiDB server by querying its error count. When the health of a TiDB server is abnormal while others are normal, TiProxy migrates connections from that server to a healthy TiDB server, achieving automatic failover. @@ -99,11 +162,12 @@ tidb_servers: zone: west tikv_servers: - host: tikv-host-1 - port: 20160 - host: tikv-host-2 - port: 20160 - host: tikv-host-3 - port: 20160 +pd_servers: + - host: pd-host-1 + - host: pd-host-2 + - host: pd-host-3 ``` In the preceding configuration, the TiProxy instance on `tiproxy-host-1` prioritizes routing requests to the TiDB server on `tidb-host-1` because `tiproxy-host-1` has the same `zone` configuration as `tidb-host-1`. Similarly, the TiProxy instance on `tiproxy-host-2` prioritizes routing requests to the TiDB server on `tidb-host-2`. @@ -121,9 +185,9 @@ Typically, TiProxy identifies the load on TiDB servers based on CPU usage. This TiProxy lets you configure the combination and priority of load balancing policies through the [`policy`](/tiproxy/tiproxy-configuration.md#policy) configuration item. -- `resource`: the resource priority policy performs load balancing based on the following priority order: status, health, memory, CPU, location, and connection count. -- `location`: the location priority policy performs load balancing based on the following priority order: status, location, health, memory, CPU, and connection count. -- `connection`: the minimum connection count policy performs load balancing based on the following priority order: status and connection count. +- `resource`: the resource priority policy performs load balancing based on the following priority order: status, label, health, memory, CPU, location, and connection count. +- `location`: the location priority policy performs load balancing based on the following priority order: status, label, location, health, memory, CPU, and connection count. +- `connection`: the minimum connection count policy performs load balancing based on the following priority order: status, label, and connection count. ## More resources