From e549416d9405f6b2d2d17d8baecf96548d937d2f Mon Sep 17 00:00:00 2001 From: lejianwen <84855512@qq.com> Date: Fri, 7 Feb 2025 15:54:55 +0800 Subject: [PATCH] docs: Up readme --- README.md | 13 ++++++------- README_EN.md | 20 +++++++++----------- docs/init_admin_pwd.png | Bin 0 -> 19260 bytes 3 files changed, 15 insertions(+), 18 deletions(-) create mode 100644 docs/init_admin_pwd.png diff --git a/README.md b/README.md index 32c523f..d8e387e 100644 --- a/README.md +++ b/README.md @@ -46,6 +46,7 @@ ## 功能 + ### API 服务 基本实现了PC端基础的接口。支持Personal版本接口,可以通过配置文件`rustdesk.personal`或环境变量`RUSTDESK_API_RUSTDESK_PERSONAL`来控制是否启用 @@ -70,23 +71,20 @@ * 使用前后端分离,提供用户友好的管理界面,主要用来管理和展示。前端代码在[rustdesk-api-web](https://github.com/lejianwen/rustdesk-api-web) -* 后台访问地址是`http://[:port]/_admin/`初次安装管理员为用户名密码为`admin` `admin`,请即时更改密码 +* 后台访问地址是`http://[:port]/_admin/` +* 初次安装管理员为用户名为`admin`,密码将在控制台打印,可以通过[命令行](#CLI)更改密码 + + ![img.png](./docs/init_admin_pwd.png) 1. 管理员界面 ![web_admin](docs/web_admin.png) 2. 普通用户界面 ![web_user](docs/web_admin_user.png) - 右上角可以更改密码,可以切换语言,可以切换`白天/黑夜`模式 - - ![web_resetpwd](docs/web_resetpwd.png) - 3. 每个用户可以多个地址簿,也可以将地址簿共享给其他用户 4. 分组可以自定义,方便管理,暂时支持两种类型: `共享组` 和 `普通组` 5. 可以直接打开webclient,方便使用;也可以分享给游客,游客可以直接通过webclient远程到设备 - ![web_webclient](docs/admin_webclient.png) 6. Oauth,支持了`Github`, `Google` 以及 `OIDC`, 需要创建一个`OAuth App`,然后配置到后台 - ![web_admin_oauth](docs/web_admin_oauth.png) - 对于`Google` 和 `Github`, `Issuer` 和 `Scopes`不需要填写. - 对于`OIDC`, `Issuer`是必须的。`Scopes`是可选的,默认为 `openid,profile,email`. 确保可以获取 `sub`,`email` 和`preferred_username` - `github oauth app`在`Settings`->`Developer settings`->`OAuth Apps`->`New OAuth App` @@ -127,6 +125,7 @@ ![api_swag](docs/api_swag.png) ### CLI + ```bash # 查看帮助 ./apimain -h diff --git a/README_EN.md b/README_EN.md index 0960522..6d81403 100644 --- a/README_EN.md +++ b/README_EN.md @@ -69,23 +69,22 @@ Basic implementation of the PC client's primary interfaces.Supports the Personal * The frontend and backend are separated to provide a user-friendly management interface, primarily for managing and displaying data.Frontend code is available at [rustdesk-api-web](https://github.com/lejianwen/rustdesk-api-web) -* Admin panel URL: `http:///_admin/`. The default username and password for the initial -installation are `admin` `admin`, please change the password immediately. +* Admin panel URL: `http:///_admin/` +* For the initial installation, the admin username is `admin`, and the password will be printed in the console. You can change the password via the [command line](#CLI). + + ![img.png](./docs/init_admin_pwd.png) + 1. Admin interface: ![web_admin](docs/en_img/web_admin.png) 2. Regular user interface: ![web_user](docs/en_img/web_admin_user.png) - In the top right corner, you can change the password, switch languages, and toggle between `day/night` mode. - ![web_resetpwd](docs/en_img/web_resetpwd.png) 3. Each user can have multiple address books, which can also be shared with other users. 4. Groups can be customized for easy management. Currently, two types are supported: `shared group` and `regular group`. 5. You can directly launch the client or open the web client for convenience; you can also share it with guests, who can remotely access the device via the web client. - ![web_webclient](docs/en_img/admin_webclient.png) 6. OAuth support: Currently, `GitHub`, `Google` and `OIDC` are supported. You need to create an `OAuth App` and configure it in the admin panel. - ![web_admin_oauth](docs/en_img/web_admin_oauth.png) - For `Google` and `Github`, you don't need to fill the `Issuer` and `Scpoes` - For `OIDC`, you must set the `Issuer`. And `Scopes` is optional which default is `openid,email,profile`, please make sure this `Oauth App` can access `sub`, `email` and `preferred_username` - Create a `GitHub OAuth App` @@ -97,16 +96,15 @@ installation are `admin` `admin`, please change the password immediately. 8. Connection logs 9. File transfer logs 10. Server control + - `Simple mode`, some simple commands have been GUI-ized and can be executed directly in the backend + ![rustdesk_command_simple](./docs/en_img/rustdesk_command_simple.png) -- `Simple mode`, some simple commands have been GUI-ized and can be executed directly in the backend - ![rustdesk_command_simple](./docs/en_img/rustdesk_command_simple.png) - -- `Advanced mode`, commands can be executed directly in the backend + - `Advanced mode`, commands can be executed directly in the backend * Official commands can be used * Custom commands can be added * Custom commands can be executed - ![rustdesk_command_advance](./docs/en_img/rustdesk_command_advance.png) + ![rustdesk_command_advance](./docs/en_img/rustdesk_command_advance.png) diff --git a/docs/init_admin_pwd.png b/docs/init_admin_pwd.png new file mode 100644 index 0000000000000000000000000000000000000000..c44ff0b10558ea9e181334911675ae4ccac14452 GIT binary patch literal 19260 zcmc$lcQ~Bg+V&+PT0%$=i6MgMBtdi%C5YbZ5WROsoe@EX2%>iqz4u855e^Q{T{&4PH5{B< z_p#Tp1UIq&gKjd-Bl6C+xMkb?Z(A<2{0qJm11yBd5JqSI35N zLb(QI5Au&+&P%*6aTapZA?KSL9DBQB%;G;GH?U9t{r6;;6r=d(CC>8A7~DTEUq52O z|MThtuL{XO-nRZm^N*`BS$6!bG1ma+P~!snG}HzajuE$ptX%2I`lH+e)A@#a4T}!{ zKDkdD2xyCjn93VL{9@)*jmt*|K}tj|MB%9=1?){rQT`*M1SMIQ2z_xuw3ho!rFeMEd$m5PB zjWPOVJV32Xd0pgnWxH0Q^lr4xx}V795wPv@^cB;V<0=fqplPVClL3d#spFp2} z<8y};*OPA&6n=$^gWHM?UFgM6p(~Ji!>xpjsD%=v3Dm++*nX`&6`S%Xy|$5EvKXc` zb+?e-7e8fqI|NL23#sA;YFz9~S3KJOeBUI8V@Sr$FxLX?U378q+bF5+2*t zci!1-eSo)3TnUaC*}i}4sAssmFo2zBh}B>CG2V70W5r<3i_|M~Q?Jj1N$KT$rHPn% zUhsr9A0T#9W}bwM0s@{{bJ+Tv>G^G3ba=(_l)wnR$}a3Hi?;6B7Ep21$@liDOR{Z2 z5gd50b<`1d8~^na9}s>--p*e-$S^wkxX=S7Dt^f8K+StHS|v{5i>M#YN_ULgJ3efz z<_K}2|jGPkeZy+OX&B0ozcTV0w0~kM-&vc(v)y-5VNvKmGVcsp0NyST7>g(XKdm0 z@yM{?muOE=cn(_+6+fj=`j;)w{M(=(?MY5eu~WlaWyir7XGwc~@jyMBI;^Z{~ZG zlPEb7l>~P(MD@jCReMc{yQB|_?8^URptj;8qovO%=_)*#&uMUW zKVNfbgc-ye0Oii4={zu=zqPt7d9idS3luQ1=LsuCQhjmJ0gH<8sd~>ZUAK?te=oPj zN0d#=PN`2Hy6I?Lz+nk5`;n43`;YcwB-fh-?ZHB|Oec$Q?^6mti?#UCv&EmjN$iyF zt6>Myy7wwmHPWb!Nwrdz(>3lXBab*`XXOfax7lNP@b&aMKGKd$Z0m}@5I#(5xf)wj z*&57bN^^Mvq@qYV^=xYr$@t=4qadwur(|2N0@SSlzuHI2cGF9Z3Y5PD#?#s?wFByG z5kKs51Fko|uNxtpN%T4Tjel*#<%+Y7bF}}E7Ni+;1_0FDI!l2`0aSJ6n{@9^{F678 z@aEM?G`vGm?%LypCx|{_T{I9@JxOogz(*ojz`4shojms0JsMEfc(`DA|g1 z$QPY!5G{6=E-h%D$^`224@ZdBKeT7(9#8{~SZNQPQy^cvLKrW;Ab(XG_uyL(>UP_N zM~~P7UYt(FdMHsJ7dAxpNRNU>W%n(W$wt!iwnED1tiv~@3S@i-!f9BwN=Nva1)GM- zy4%hThcjqLKz1Cp=}WT%1Flfq%))N*h{=@sS@ML0YbQ60uB_>1Iy+V&>&M|L^sG$E zyp=-HyO;Av`Wt2_{d=HY)bfRSfb)9SP(La)@+k#JD@^P~E>G!J75FYy#9VV&{g_Zi zl?kS)CFe1cBf^7rm*7mYE`rfd7If?A=efeEF8ygtBSAe&FX zUAYl;4r=;k%hKj;R!C(IcoYCp6h~z-PElI6c~_Z+QSrC=-m|8Yb$$Xn4Z1eDBA8`{ z(bqCFHuWk)zz-bxtqfZk7E2FiOV6J7w;jWWMeR>DXA@u9>jRUga%gTLd7$^;tU7*) zhZ0wzlj>^VwIW@bsi|kdzy~;DZI2PlRq-SO3k?N(O;S7zdnqIVHF5T29Ji?Qk<`j8 zBVWqGlJ!5`9ghMvY+J<1llBY8TcXgEB4rHhe%1yK0toM-%G4*Jw{d|wzG zLcLVWnuIQf>uPFV&Z|8b3VV>fO-3g#JFVdru8$oMSC)c}*lYBX%_>zaTI5 zf~8f|F=4YILsm&8rfS6Z=R|hd9Io<$kE zB3P7(5@!_VeL)%&i#w_;0Xb(Q3Gb(0)>usrn@yGzcFa5bx)s@MXrRf+WU=@QIRA(x ztcv!jP6X)AA)GsfG!W(g0KWpfbjA&j_y*1ZNcc#!H)0;-M`$JQo(dQ7O+&&)TDp2N zXa=|1i)yGfO^@70f+~^nuMn@xxM`G=bo>af?r-Nif#;nQlp0P@N8>kr%Wk1k7TEBG zGOCP9eVn?_n|=yK38>E3o}Ysn_GR1ieSbvC)|hnWW+B9Bc#1p>-Oh!&@RX6!PCZIy z)!hP ztu&rR;4Ear9ox~#O&!?^x_c?i_tQPC!**Lw?v8k@jtp&!IteW90Zcs8e3D%5otB^( zBysOv-jBk7VNQtKqMj2oE4J$@}?xl{`ML(mByg^}S2#F6K}YzcoIQP8MSYKZ zlh(*=K)=QhqSgDwf%8Co$+{vefpbpLenX(LoZoUP-N?A~RH~~GsXZ-Ny-eq}Bl}gI zdFWJTUn~kkKl`1~OIC}-1af#ZuI*gLj?eZSiJHJ40_?Vx5qv!9O(Ky3}%J zoSn#=@xGEebF zM1>D>yX0&$KUT zs&sLJA$)-!RUm|X(R7x{Be$M6SA1~UpP@6P0fF%PZTZsQ+BJ*SI+MnBtZ`FcK|?jf z7Zt=crjU6w5H@+S2LM}yQ=a=;xktb8^K`JVStoU0CFdMX$#yELf)j?I0Ywnpm>JlyS3(olwS024pC*>0oCWH9o!9O zLMrV$?O0ozjUD-4i95EiRHDvD5t%~c-E$$M8wIb-jgw3-$q!}D{yCItBvp0kO_*a% znxcMxuW1{MnZe$`T^E5M6=8+@Taof&j1#SMJM}jF(nnil9z=%o!RXgkzk9`OE_hA6 zk1p!J)^yt{q^B8TzXb1KfsVp|ew%>jRD5~9wR1l;(B)n@vtnLrRo=D4NsJDiJ>Ema zas`GE$H)J)-=9c<1#Inko$(a*>e>Bk?>BiERb7nKw}`b`xj~ zS~5kv4x+l`)i~9kbi zFfS`6T23Bbeg4Ug~lKMWnz2+ z7mQLnWj?sdwOiBY??iMSjcE$X0^^V747UQM1qF)LHu7jXF)Ph{lwWWu5~fQ4T$X;n zhR)-(E}o2U<~3`PxSf?2d=KCRs`a;7e>zU*3s@ZaO1WjdgXhV4C6{f{So@3R!sB&# zKgTGX=biEqzwoEBn2}w#bK0baiGfmXt$&O}Ik^+ZmQGorbGjYXFx|R${La!-sOA^y z+}+NX436dAQcn+RK$)eTXw_LI8Wzx}szNn5qCTjup+4-pO)j<6{4}e9VIS8kk7=VP zzQtyM6{aadaH7CHfyOvuF(sZGsVEPwdgiT#KK7KF!0Rhqb1@19mXE-1! z2I_XU#4xu-Wbt8mZ6$gL-F*k;_(B|w-YgUl7WHIi zVm5rpKUWLvH1b-?j{p?{B0z=!;?H-1keB;gnNE%Lu)W|D+uo0Jw5 zQCg7b%vkSh72f~tv2DZGsFajBfr=Vf8t1ck(dv=fCl1iL#|alwj$4E7sjUN0uYJm) zch?!a6hMy~M-QI}No_Uk@C@#3zgE9tJbJixE1WoNTxpL+_KIMJzSBR$lubswX}egE zAwJi@hW5onTA-7IGpLxRx3J=6f7{{dN?`%+>Z)45KQOjh9_`cKCuuD$PU=<9#$KNL zJwTEnvFtg|oQ2+%iNpiIBdb|j&m4Pq_Z_9f@^AON6!$VTLige)D=@}IFT@4K zU)#Fb9B^7LCDbKG4l=&IwJMHoY8Oom79TX!RV_94N#&PxKAr1B-v<`F+T@EM8dHxN znQqp3NvipBU?6y!f&5BWnR5E}q21*RTWAPwEt{?Xc0mzF#F8{}ddT+?%bZuiki(s? zOAt%!E~-fOor=MB!ot|Zv&y+d>h!{-S5wLs-ML%jr<^X7{0v&d!@<=N3ApNeHq(nD z!^-i@7|kicRz3~uRH!RF>3lV%fR}IAtO{e&QHMqXgYv}NPb1ez`$!afC5Z{ED?iPa zv>&f!rF4^Z*vtt&b9f4Q=@WD~&g|@@r_cKQ$RA|8_EuzR1E5UsyMfB@+*u9enWFBV zN}O#!30`2j$8RF`bq>Ex;2!d#*Dpg{>f)AgAS&=k>syOYN_r7s`drq5zw;cR*4k~k z1ea7HF~j!Ewe(OP+5Pl6b`|BI?M%S+F|@Kf(gY>rf-|Guq)zhrLT|&!rF`h@dpK)B zf>Gd$(oM?SNyM2m%=b+Y=G4>aip}H6+LSp$g%2=$48YWbpJIe>gta7y&b75Q5;K$s z1Q>RvZz^q6i_THjb6pjHhF>L44XFx##jMPcg#`GyEndDs`UH6C3NPrUl5M>Vp09R! za!pQ?OOv;%4H>iQjK!^FXFRACE})a?Ce8C9(PANKJge77e8rwd5s=N@%1}bJNIXF0 zy5jf-AM&W%())li-2yVOV|ZO;>~0DiS67EMz$f72qw%zgoDRMgJEyT_qIvsX(%vtl z#0N_<>ydin84WP=h1~^5sy;fQFF?_sWz`KYm()EBE%fiIWYI=`!@vuB6kxlD4=bbHP|51)B0lof0iYSUEC z(xb7*Hf${b$$DAUFR~+}ceWCF3LfVoPmT04UATs!~1kx;&|E%<9+_n~F4AlX)FT97&r#+WB*b=TB z?ZB9U4z@C78|laPzMk`mT~N?fxZJB5iJ|X|*6_o-+)!fHQ6@Zzq~~b#>KD0qK5*d9 z^@lRnb{vuz$uoH`A`4UVP2!#R?55V+h?s!&6Vm8t{IvL^R$UlF-nW#19X18=y6-ei z0f)qq(r*ET$0K$|>5e8X=QBoE)>miu*mzgh%ifd%iWN|YTF>~b?s5+RZ|#dcg-6Jo zs&)>a;_|mQKCQ_pB=!ODN9_2lT#La~AvfhvOlizqqNBeQl2Gjg{Amj~Wj^yNBr+Lw zn*yWEjJb0DrNsTpl*5X(pQ~F=;{%BV+loUTaAp3MCL!OU^+5?wujLc`Yaj1$e={8) zXrz4A7`O=amHYjbXg-UPyEm*EH1XF)rH0f^YGagjC8Rp(B6c%_Q}>ACEjyxi+~-BA z_wuhVf@RQzjI*VlpIA#$;$2$-w|-E)))U0pACeqRB#o=(A4wT0r96=a!|bkzF3ba;yIXqSdcSMrE95x|HwPq!MUY&CF8P|Jm2*5J5VD;bz&3Pjx3G&b)K(WvjOH#nw76H>1jm2y;CE9Cmk>ZG+B z#)vAvQlxX&Qw$$c7bF+6@JRdT+(+ zofKClj~Z8AO~IDB@}FokjUIK9U88tp-iOYH+E4jDgdoASa`ATOvfkv(m6XVd)=Bw> zg9^{w$nD+#nT8zu>wlvmN5ph&%E>{HybNE7*;29+6c355DTamR*f`{D%C_IIK6xd zoShZN<9yiUAT_8zl%?pGwQ!f_iBXZ*;Tb>9xJ7GzJ1=quWp=w{9sVjyI_xfhvB_ra z?3_}L(I-&&6iEIjOgOttA~x(<8DPP8_I=3TCUExiiXXTBI*dy-nR4>3VBEo5i)Ckw}Jm-$i&Ohj%a`w)8P3wQ8%SMNQE4TQ&vDuNRzE zX(#t98A>;|xfMyWheh<@e@Kkqy&|Xv2N?QwEC)2Cx|SPCm~1VJp6rq?g`3exJP5nb zKJLEx9mP5C->5}02ogH;qqVuxq}?d%%AolKaqv3Nd^z;=jzLUE8_l#TnY0WBmM!S% z|Cspdy9Qld;;zPz`-po+{HHAl*a_kIDh;&Fe5QUbU@!h|cOn%(`&>P3J||%X7*P3#u}k4h1%|+D+Tb;5HcZEfQO-JvEgu-H2|W?e^|$&S2bE2SKI1g@+ob7 zlw4~>rGmr!^b2UR$Y_*=cS8o2uG(c_4batl0WmZh4+F*Z%po#Jd_XmCN=!^YJ0ghd5XOK<0mw3>^89fjnY;u6IH zlvB-x=G6BWzow5(mEV~FE(Iq=9CwC6RUIvvK3ct^)g~qKIL= zh&DWhlx6?Qx~#rKPbYhtN)%^gpN`$#X}iN(K85x$9YwE=j2>?{!=yXbcLo{?WE!$T zTw;Gp=~_DwLbTU0tZX%uBL@^QNn?ps4h00*@Z}3Vx6(k!6Qt+CGl@LFy*~Xmkaf=^ zZikQPCu6&j@Yhv)#MfOIvI^y@RpX068n_qaaGN3jIy+pOGxZb9p{;RsB^w&0S* zuvOWl6)tI`Er&{!Bsh3b)T-b`f8DjknlI)u#X(|gd%u&5XouV}CScr9XxVMMpyh~s z==i4~;I=)d@L2UdgRGh*YY8ulLF4)Pmv#wpRpUVZ%3Di^!Zh27;1)d6o!)+S?#_n0v)P44Kj+UN>;P16Av{+9xzbFV{uJ0eAGqPmF}$IwkK#d;{PIlsJETDu3Zl z*S%{-yV_hmBae8Fl7G{uyp`;CR-Z{jesu&t;Z96Jh+pqst}F`X-gIEc&pDz!{~7DY zh}ebuntrl3b+Wi9fMD9tFjy*7|Dqt!Xq=?1g7hNN@4y*(h194W@a-DH|wG1 zB7nRhLX_XOv2YBo)Xhj$(|jplK*3P45cPvS!jg(UKOQ`O#n$B=kv zna=UT7S|WX>t|S7a{u}D^H^4H5pt$@@yX}c`8@IRq<^UR=JAE!y!zWrK#H*&IzO0{ z4R(SjJlOOE9g+$@S8P~*z@VCpbGAP}6?~&QCU*2jJ-*$6Y8ZbETpOcYUkLPe=N6Vu zbIPfZx833nd0!j4VD!c>>QU9Uqh`=1D=V6Ft4ncP_TwKX&q4k6%cp4SM*u4Bh(Zn5 zqf-v4Aavx>(l~Z5LqDj8Ili)Re1;ThT9$Oc4?K!{RwXZd+v@=PFo{N)&$zQKj@aXb z%ulh=@E&9(KblpIuK1Nlx8Mu+==Bg=)Ck8&zMK5K)tibXkBWMu1Ny4M-)GLOkdydj z@$xjH=^g-dGfUr5T%7XKBaj<@a@qUnue2D}{A^D|GqVQ1XMpf0#}D_2^5>l#=jO z8+W6~ZQC2hex4xEa+iOUcERnpGS$ygbL7b2ZWCDc6Jqr8sUPyuxrfcSZ4v17RCUxt z2wOR-4lCCC;{ms$&3i5{D>NJWgtl|vJV?a~J|O;M+3glAGZwwYqd=^mY;8I&^mHd3!yhZjt4(yS%Auibz=g;0fZ)x-oQc9bL}dcRywiX%U-$NF7(ujF#o34ekgBo5W@AY z)z&4`!fNPLD|VWeUnjW(A6&~fZ&!v9Dui;-&^ZUj1eB!@=toy6|JMAc|yQPx;t^AKv5Zq>7jnjOF} zPRiWwaSmVFTn`#ik0|Z@bPF%gaw;ro>inIAjw90rSO&!@76^*9GZIMS{eCr;adm$y z|25c+EC2|H=jc z{}(n;-E)%aa#m<>yl&XUlqOSp@)%l5TfOMf1x9N1;O#nHoHj~u9=;d5c-2Q#YVP)E zrQUa_y+?1c_t{E=wU7Okx!23n7N)b93Lgu_*0%Lr>$ycqnfQn;g~yJ}Z_^85F+tX- z3zoW6qQXbs(jVmRx?L7`@h2kK@G8L+XYj zgqHope-yrNgph{iYL{;uW4|tk2YzAuY#2I6N=fhwCG>VSC4a1WpsHp1FPfNuO9;~+ zD4@Yqae13zC6cASiNBw|61-rFcydd+hm|iK%9iN-!9FxvoMbNO$lq;g_Hgbo3gvoq zv>y7>wv^k&F9;*oyt*9G)nae>z;ki)AG;Sd^TP;alOe~orVrMvd!Ko zcOr&|`~e@-qP2xm^y07@xQ6GbvZQ-!tf)s4ed^x1>#6TNZ!9v|^6T zMlnxKkdIU(lDO-hT^A#ySni}Fi zmOkQc1os?FnK<(0cBN?K1^Z@1G6PQwAjyN<4i$1Lj|Ca6>xBY3u^mz!vvpaAmO|=| zs%OKjw=NhYgrB6<@|FVON^PN!U(gXCX<136F0e!Si?r>pp_KbLajkaadrzj)y4$Zi zrth`~T{a<0U5Ah^=+6=u@%|2RPxP}C`FX$Z-tUScYHkj8R$iHuzyAn?XS;mEJayF^ z7+|Pf3n$g^OzN%!pY-_zv%XaXUf1TQ2Vr)r~N_=!p~NbEA{@YB2tu-lAMBT?eXx-OzV zcKB44y}_mGr^c>sYO>0?=20@dV7jB?W|I0--%~Brj=$HITGY-fbzslV(wk&x$&SwM zfVpw}3V2dJGfqX`Q8&)S&+)KF6J79yiI;%Z>kBMDr^4uuYf^0^@xafz z{@kS0ckH%knXJ~Br61kbdSQ{$aGyP!CZ#3mtIEw4zX-cR_JkXBu10Bgu-yK8{X788 zTJWc1+*DhzrE~pa=Nv4og?vNCT-ZyZoF@w@%7tIrq90tCJom5wlqA;$PHms$p6y!S zJtqznP)G zV>$4b9BJ1cyxdBhCHQX#nM&7Xy{7#hg3+OPBro_msF?A>CRYx7<`*TVGt%T)m32Y? zq=|jQKjlWxBq&(xY-V3As$aG4X_fByW}c*$|M_Xi;zZ)MkY7CM(GS+7*e2-(_J-Y? zZ?E1$vCIo>5evRFWqZP*mzMIw`MWc0a~8Lc?uKxnfX>@jv6*y>CsQer1L|CS5fAS~ za0yIT0om~n3yQvAwKwot!Pbwnx)_)D+U7{Lt2C!W6}{0BNyC!t=(97{9b1u+)tocG?)s#IPouh z>&!jOtX#DuR$(=?r=5H!J%XCnHuHT}=&n!BM{|utqsSXnjarM`5%F}Vrz3mgT*V~V z9`M54;;h)EFz6)@MkBtCs_vs$G@Rk%azPQJczxx}A*g+hdMqwdB_EbGEy5$vp`_rKtdwnSi<&n2sr%NSr{>J=G=9jJzmK@0A~=;~EHI=RbIdqgV19#;IVv)FXrN6v^JJ4A9AWcXH3B-Tfo7C`a2gA3A-Ps3q9WHYTh z_s(8phjS>W;cMyxrGH@?vcAQgEy*tRtqm8O;hI;J}2TF|Cv zEo|(SFJvLv;3#02^IP}TDpN2SmmhDjL3Vi+^Le(1XzfTN*W3?y1`SK=+188bnnscC z7BjYO=4gu?&Q#F3Tz2~bA46*k&tt@C4!;Z_iUicdn`aW6kU}LPW z>mbJmRd?px^bwY8XqEDNN-ShCl$j>9z^A}7(SmB^-@BXzk zhJJ>5hRi-a|1WUm-0Y`(6g}Hj81eM76z^JHk>{Cx@jR=8@RaAJSo-B>(t04p|C#0N z3+}Swk2705>(`JJapX(orvfq?)Jv2u91`k1Frfq!Qb{B!u zLNt%jvp#haMNpK-zG%h4Y-daGIFLL(hK=@{ajOgEzp?ey-93Ero{sDQ`Y+fAhCY|S zM<%>PYPg0p>=|OXFg$CG@Qg`+9R&{A2$5Ij6^hPje*W=PlX;&Liw77~=Xqm(-H#d% z_%V%#U?$$kq3+UK@{pGZN?D$gB8pcvVxwbe{n;@up%8h^G>ExvM1_ewrlmg|-jILl z+57;^xaHPY@9C(P^asb`*f*bOc><5P?D#Zud{`1R#P$6&Ypj93`-0sKQO>Z)~fsqvBoe1s7{zSb$NjTIY= zxQ+e9z9!CZ421unDjmypnvLt7AiUU@Ka}454Q;N<-dqpU>G;hxWnL>oe!KTSl;Zt< zqviXzOTEnw(c|xXH=68!-=~`4f5LQpDQJX&n%XI}XW441e=4<0k9`2O%{8PrIM+^C z`sM{rc8wTb;m>N7u3P#V_wVL?6oNnNFULNW5bKQa$G^Z0vN-Ek@MrCG-fEYt5^$UL z)mi^=E&e}gk3`tW-@W><15Fx{>Q!sB--EwFoF9r<^Y6IFYDytKMZuZ=iG`sf7Qmjq zGN`(K`@~&Awa;Oi+vZ|-{q5OY4RLJludjvNHHvgs)8T7-ir!{Mx84XpNL?uLIJ6wc zG{6HBSmlq%Qm6BEmlh2mS!F@Jq1$khJN-7JNk(zfb32~95h^q+dWOPCvyHCm=Nm_H z$6i@94eSPsuP}?x(H+VBAV>qva7>oz^>{JbSOv|z-TnPA4fiB>7TM#sJs}WR`#4L2 z98#!#d1iz8&~Wiy_uM$Xhu=m`*fG`G@Hz#%7Oe{)_uLjwG!^$2czR|JKT{%M zm98k7xTWM-4XRIPJ~lG9jKwQ8y({Gn!{Ynx9D;j>M*UQUpZ2~??shwm4@0op88==k zj?1KKjjJX?I+4Q(M6F_WF8uCYsv+%4l( zj{lJ{koqpa|J#9H=5qnRYK$n|IlC8s6*~KLf(}iI?X2p;S%*<419<)1LZ#q$wr8EZ zANJ7iP@J09oC~URwi^^|e z;~e}Kv8fe%K@`;`CC#KoYCj@U_kPv~lc(-$z&ZZL5_WtZ5*L~;Cr9<@({WBN-WT%9 z#nb7#iKq)&cX&d&eW#_PQpSl2(dWw5EpEa=uF6_s4T2D!6xO{&Kns){ zavKm~HrTCMP@DUxa#md`aHgx(YCZ)+RW14PpV@=q{=jm&zwsJ67Fo~9tb-HI#@^Yx z9~q>T|6sZu(51A-Wp|pEFE00bezUp&Qly_L!HH4(*$wIq~i$fxPOA+2h+kbcfnw%gP0oVvoM&z$|vK#Z&RGOSW`5=-Pss~uNJum%MMPl^`Szj^H{4QG=$)l+GeUU^HDms7 z@d?iECV5{huHiH57wJQgkR2ZVPESxt4e}_VfRv{FRL)KsBym&A6QW4i_S`{@bJmj> z4*6NpOd#L3b`|arI&xlE?HQf-cE1qs?aL&{j+|T(=P=46AlcEO$1|DqKc+mYQyIJb zt(K^+LeUIZjSwpA=(Q2^rnTU)m%#(hN51R#MvkI2=z`9HW9C&!2(P^k&f^t^ z57YflublQ$)Njakxg?UpQw-{SbMb`@J1Fp<%qtVWv_M%mwp3~aR645*hZW~ z2f&g1R{Uwe#aa1b*S~0l5BZb-$BY3$_20qIRAffBZ$A(@R_HU!dKkzP3)EBhle^U@ z%Cc9lI|q!V^mzHKz6^=%St)qv{ND&h@0Z^MW9ar!*>e|m<;brwuG^FA@3e0u^JJ0T zZX5aetIpHQAUi3!)`Fhx3pgH;{CA|`3|GH5;Pvn1NP2Lb(pHQkycYN`IfeF?$6rKs zMV}VYc>YEo0|f5>ombKPJ-#sK6-vPxGJChy{o{#h!!`Uw#uvp-VmL#_ zppI_Xq;GHcAAFSLx7l&EMTh2u#D$osU)&SI)CP}5H*!=Xw>xpm9=VDjCW zkfN!FxsQUiktRQXn{u_6BVTXiKDqHZPH@%Don~6-n4-Rg@*WCmX^C%0!{U`~^WIIv zcFa2I0Xx~wd_rVQgFHH6H6CeMwyNxKsg43NmW$YFLXnLr-1%h+5kV%+fVNF?5X}@ z#pO|@#JV1bJIXh=@0Cf79e;J|>R|U`imo3d2t4MT0iQ$_Zl~z&lL~9^%94#$zkCmH&5Jj7f%NOlt)i!zG&{e&>5ZZ%Z(N~1 z?>Rmiy$^0h4yQQ)E1!Mhqr+mAQP6L!GLGU3V%p#O_RVFv$4G#VgF(Yyo(P#fT47^t z&8my|iZ*X)2Tt0mhgvB+t3F9^NG8-lecuhK_(+LPJB>P=+#|gWZT;8A5Azmk{%i+ww*T#NR zxmLb#2s+wpoIzl^!OI~{wua5^8Pj9^1{qB;0Vd}Vcirnf+ z-h}oy0Af3o&HJDkro}WQ)!`z(xinWc`U&+^jv*VPwwG@&g6FMoHNCp75Scw#XkhO5 zueYt38O+$SI4LsD=Jc^l3s^UN#r}wsk=BwT>7*%ukJXt_I+gv|WOk!t4?lm{xL5+WboJ7mfdofdml4aW0FQBW5bPh(`*v3!HexA z+6Ukquf7=@{T|l0g3aiRm}1+{7qH@R;(5@82ht9WyzA3gj`li|PIRB31&S5$*f*s< z1ee&TQ|1Uxant*$?FpQjmOK7~V+s3(NOi5VmTr_C83)Qd{GFCS&0~`k% zW^Vr8l?M{YvY=)4{@p~r%iE0$RrbQA>i?CTh<UEOMzAvPa4~;&F!@?x;z^HIR+7OtSbpbMyT; zd*w3pvsH})kG@pvO>#Cr4N404P89dJ#K{Ba2uECHDd&!7UIqpl&!>63ES7|Y@8m1G zCa*H75l_#oG`l`AjDIq5u-&oFAG`BGrwnn@OV=hKV6sWCC6uz%zE|$@tvwX-sNkY_ zr+)m-rth>2Kum*#*|BAT*M9Tvv*xxYhYCMDv&T1jelrRK+F4(q)bA?jY zgIKH`G>4C?_-@Q>E}y!a6yn#$Ra9A34h6I{K%{1s1SD=hb?YtWsWU^W_RnyFT>WVS z+J%GIj`MMeD}OE(=54;5z6vK9`6k13y;Pt{`LLSvcC5R^+Q zuTafX$@u*lpy8*8KS_k1)kHgtjMliUu@`a(bHyG=3TU1^8t!I_6(3LZ4o$$Ds#7PZ z>A2G645jN%B2ptyMB=3uE`~MLtM9|#4&t{H#6H0PTgKvf1>*`3a!9t<%6O5P8g=mi zzZ6NZL0<|9shsYA!+7-o@JF&D;q)T`4r`MJNsN(MiH(=nTHO3W8@c29!TNjY;Ogjm zTz)OURvS)7>KL=CUrcF3K33_0!2pos@}}0Mo>2(Cykr9#e*U%#WNyGWAKuiEtvthm$V9}}bsk8z1|6&FVO`SsDOVx}1h7G`3zf8+>xfx;4 zx*7if9Xpm(hZ|XHl?(cvO&R4g|KJE;0?$BJ-&KiinK65j_U?E*uWM&UAQjdW>2Qcz zyf@Y}!SC#pvT+X#tSkX%-Aj6J3I#aZTv_zMzg(xH&=d+{0$}87cW@ZpZ?pW{yuiQA z^0%<%HZU?f^@FKu&qt4|6E1P;`Q275ks`mK_&u2G^sSItGLh1+E>9+Hjs0Z3hIh!r zTFswKR9WrTEjIvg)0s$-pWFPWho)}kyNMj>lhmX9!@$-O(WKd=`ogl2Gv?wPo5$2W8WDaF;KuV|v0S~x zBw8MUl8;-l09r z*3KBa5K}jbN1fN2JBObu37DoD+odJ~Xdd-x;9FR1DGV4XOa_x6;v&g{u?$m|K|_Kj z7=?|&jnZX+KLXl&qmHz+CTwR6JrZVjq#+d`gWvwIrzbKXb*>#F8j(s#wpLe);ge7| zLkD4H!JnPpiigmz8)^rq%6ENmJQh$lZRK`C#%DBw>?p~> z_*?z+&)}EzT844Xm$MVX&0gll1(omUuK-z8|B49oy0M6WO$dt!fH}SHky_Q2vu1ku zGKkmz2@!l6(B^8?CRsE3xEh1&j_Fr^6jtZ*9u&lQ1(G>g?LE8UKGH_iWlSZ$fIZaJ z_*8Ef*(1c*P;s9wg7`9A_K)M2f9>zUcC804Crdf<=1RIMmEDRMAh~D4n2*VqO%-F> z+psu|Mj!eva57hG(|Q=dI1p2n+U4H4XEASZxiL!yJq#_S<*{xYFx>%j+NReljK?Vn zUuLPToOy?(Zw$UgH*XH9LegdM`iS*=mbMZm2`7t73M+;;6&kwgEvt1=6z}s^XYX!x zAx?(s+s+F}pp&waQK7=mEZuk5zAECOQ1nl}7n%A>TVk3VbS94{*~4ddzG6Z+ekJfZ zCW)0=r}K-AHx_xbE|a#A$O-C{oW8qYZ1i6Lvej+v)BFtGMA)UZFe{UFjXzo-Voy9aGW7D7kQ=5*UB8u@b7^ny-)$$OTx=5Ot4 zi;xqXdA>^uB)=~G)cA?p_KfZkk)QGReDptDb-d`l$Zz_b&1VmO;3#u@5ElQ@KGjn| zu>Os_*^y<_%XM?gIQOO(A3s;#dSbVu<2U5N{rfzLUE0r|Cha$6Y_PZl+&00`ARbWi ztoi9%-_PmIc^^|RFD>}!f12TRxXCB6C)%Ine{wQ>01d5!0rsgTe~DWM4f DD*j5E literal 0 HcmV?d00001