From da58f5c25f9b02826bdd6be425773ee8a78d3eeb Mon Sep 17 00:00:00 2001 From: NeoZeng Date: Tue, 15 Nov 2022 23:11:06 +0800 Subject: [PATCH] update doc --- .vscode/.cortex-debug.peripherals.state.json | 2 +- .vscode/launch.json | 4 ---- VSCode+Ozone使用方法.md | 13 ++++++------- assets/image-20221115215531879.png | Bin 0 -> 15439 bytes 4 files changed, 7 insertions(+), 12 deletions(-) create mode 100644 assets/image-20221115215531879.png diff --git a/.vscode/.cortex-debug.peripherals.state.json b/.vscode/.cortex-debug.peripherals.state.json index 261a57e..0637a08 100644 --- a/.vscode/.cortex-debug.peripherals.state.json +++ b/.vscode/.cortex-debug.peripherals.state.json @@ -1 +1 @@ -[{"node":"CAN1","expanded":true,"format":0,"pinned":false},{"node":"CAN1.MCR","expanded":true,"format":0},{"node":"GPIOG","expanded":true,"format":0,"pinned":false}] \ No newline at end of file +[] \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json index 1bf9f81..bedc4ae 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -31,10 +31,6 @@ "showDevDebugOutput": "none", "servertype": "jlink", "interface": "swd", - //如果在cortex-debug的设置中写入了全局路径,这里不需要再写 - "armToolchainPath": "D:\\gcc-arm-none-eabi\\bin", - //如果在cortex-debug的设置中写入了全局路径,这里不需要再写 - "gdbPath": "D:\\gcc-arm-none-eabi\\bin\\arm-none-eabi-gdb.exe", // "preLaunchTask": "build task",//先运行Build任务,取消注释即可使用 } ] diff --git a/VSCode+Ozone使用方法.md b/VSCode+Ozone使用方法.md index b90b181..efb66b5 100644 --- a/VSCode+Ozone使用方法.md +++ b/VSCode+Ozone使用方法.md @@ -303,25 +303,24 @@ Makefile的大部分内容在CubeMX初始化的时候就会帮你生成。如果 ### 简单的调试配置 > 在VSCode中调试不能像Keil一样查看变量动态变化,但是支持以外的所有操作,如查看外设和反汇编代码,设置断点触发方式等。 +> +> 用于调试的配置参考这篇博客:[Cortex-debug 调试器使用介绍](https://blog.csdn.net/qq_40833810/article/details/106713462),这里包含了一些背景知识的介绍。你也可以直接查看下面的教程。 -用于调试的配置参考这篇博客:[Cortex-debug 调试器使用介绍](https://blog.csdn.net/qq_40833810/article/details/106713462)。 - -你需要配置**arm gnu工具链的路径**(工具链包括编译器、链接器和调试器等),**OpenOCD的路径**(使得GDB调试器可以找到OpenOCD并调用它,从而连接硬件调试器如j-link等),该工作区(文件夹)的**launch.json文件**(用于启动vscode的调试任务)。 +你需要配置**arm gnu工具链的路径**(工具链包括编译器、链接器和调试器等),**OpenOCD的路径**(使得GDB调试器可以找到OpenOCD并调用它,从而连接硬件调试器如j-link等),JlinkGDBServer的路径,以及该工作区(文件夹)的**launch.json文件**(用于启动vscode的调试任务)。 VSCode `ctrl+,`进入设置,通过搜索找到cortex-debug插件的设置。 1. 搜索**armToolchainPath**,设置你的arm gcc toolchain的`bin`文件夹。bin是binary的缩写,实际上文件夹内部是一些可执行文件,整个工具链都在这里(注意该文件夹是刚刚解压的**arm gcc toolchain的根目录**下的bin文件夹,里面有很多以arm-none-eabi为前缀的可执行文件)。 2. 搜索**openocdPath**,设置你的openocd路径(需要包含到openocd的可执行文件)。 +3. 搜索**JLinkGBDServer**,设置JlinkGDBServerlCL.exe的路径(在Jlink安装目录下,CL代表command line命令行版本)。 **注意**,windows下路径需要使用两个反斜杠`\\`代表下一级文件夹。 ***其他配置需要的文件已经全部在basic_framework中提供***,包括`openocd.cfg STM32F407.svd .vscode/launch.json`。 +![image-20221115215531879](assets/image-20221115215531879.png) - -![image-20221113125439857](assets\image-20221113125439857.png) - -
主要需要配置这2个路径
+
主要需要配置这三个路径,第四个gdbPath可以选配
如果教程中的启动json文件看不懂,请看仓库里的`.vscode`下的`launch.json`,照葫芦画瓢。 diff --git a/assets/image-20221115215531879.png b/assets/image-20221115215531879.png new file mode 100644 index 0000000000000000000000000000000000000000..484cbcef11b748c1b980d390f4680a3c34f4922c GIT binary patch literal 15439 zcmcJ$WmH_-x~^Ne1Pv10lOVy}-Q5EOcMonMxVuAecXx*%Dcs$i;7;&6m~*bX&f53x z)Asps_<>e~qDJ*z-}63i4^fa4M@Ga$1c5-vk`f|HAP{6F@VPELB=BAmrTHENA^}N? z2&%ZI9jDvMXsI{s&xMP*PZ~QSrTBB?;yf~_I-ooE`$$2|usHd&k&!Q>_&4uTVNok6 zj+}LW(GCpJ$ApYZo#-KEn#qEob|l}x72?A2*?*%@7=Y-`ipCB*q1Fvv-`_yfsfr4G zxbx(Ax#8s7`!k;m(tqiN`*y==TKV*A)uXchMu&e83=`gQ9ud`u=LZUEu@^#uwp z4}O;(0}j$|o}VeyU*Ah}JhKA5-Yz)~B?I~OXRr>Fl2&XA>TGysx5GFP)7l-*QI%yB z0|tal5zH#Tw-sIP;+LHvn><%A%nG0HZE3vnic9HYmZiSPW(YhKNvDH*9z-i9sJicM zr*xw|r9W$#JFsglPJ`UzS{HVwPY|d~QQ1(i| z+lfL-3Gp;CEm3uLA&aPBpJ=C(Wb)>639cZ>DPP^K7^7ACL$bSb5$B(QH@|4-O+An! z0o>UGu+DLtgW>wl_U&Nq$ptH>$jjUEh}5ulgpQh>ie?y4_><3tXNWV}bV3BzMN9{t zj>3G>=Bevc_g9*{4yR%z)y!Z-18rdgOZ5EDM~dKkH%^!wvDuHyItRtl{%xlg>}mK9rf{7{EX-HaC9 zpNX1U$yiPW+pw0l%p90wUOG@wd7Uc7pFk*zb1`|cY%sHTncpZ(t?k=XWW7knZ2UkJ zP*wp9CynRnf>6*W#Wb0v6PaIk!Cp$98g@`^+i&1xe zoUIhqH9x1V8Az-$F@MRpsORU%>vzVWII=OU9W!ONZ_?(l?L-3ZSt}o>Iod}fcJNH| zVT*)fC~)X!-D4TvrCiGlyC)wxLYTe`9(AnU*=K(wmXfTSh@*nqO^(i5>zZXlh&iV9 z9-p%IJ}!6lN@q+K)?akC^?}x2?VfkZI1(XgdxF-}vxL+8*feH7dvpmeux$>%es@9? z-8$B1gIGQ-14DY5Q)ZD=aJn>-iT%X_O)}(LHQq!!d5O}8)k*Y2{<3d7A8YA|lOxsB zAJA>7K_EeH_D+Ovo!JwoV+!^Ll0_47(nd-C?eEY*7r*JcY_^+5y5tZM4q)f6-(O+7 zTp_--)xA}*OhNTQKi0m7%^1a2oL}uYDGo$Go^})Sldas2zQyENa>OPh$DDG)aHyC)s!`Oc zmX|MXjHV`ZqS>f_sG0Qzu1n2oOUC2(%^wRJHwcIrx0}rQA0Qnus}K;#o2Hm4#XRpG z3e={?hL=_9tKIR2SkPFY;_{@>(v@ySP*o^AR;-~h*(>77u^nRWqoEUzKq(}at=
  • 6(ffuj_u}6|C=jHYraD^YrC|SS zv-IXG`?HP0s1jJZkfQh*+;_q2!%V{^P{g?Pw#Diu#TKf2C^KfA#6Mi`3(Cnbyj9ir zWlx4$4Zm9l#DFG$J(G7L(hp7)2z=GhJU^S6>xde32unnDry8sMc_zcaLj&8)!eS>q z@kJhZj#o?Be-A5aYGZRPAuPGeF%mG^n)_J3_vgciP6;|Xy^mNBSQ$)cQ7{x1oSuxd zUH)A&iNSTvsjC0OFrUOthVNVTxI)cC;u8kTV*XVXy`bh*UQ`&A=@1z$EHjChG%3Wx zl1g?+fg$bMhMwhS9G^3xkC#HLDkMBYdrTe5^8%dKvP&n)K~N<>Ew!CMdPh-))X{^x zOk`<@!A2t4)K*2lcGLs%+g=1qcEj_h;GjD`;1`u0Ymp=%mo`>Hod?SBb3O1k8k z4t|{VHgAoK<*CmKaXwJNN-XqRo!})_!%EyMyK))}Qf*G!e&W3gIM(uhRO=V5vnyz) z_N-1VhVyc6ev2wK@C*V)YbtoUOAWEyw}#VOXfK$p)})LCgKdqOb6WhJm+50wEqwec zp!1+ah8)Vh;Va$u(aVPlz4DCldF#8-Tel!UMoCFFx7C~4%KIE{UqzfHB{=hYW5i83 zo9>QV4v3f9f-ndI%gfLsdM+OrgCe-hU`p?#9dw zI462>;J8a1@Ig||dNp+A5>BA?eU7RyR z5NOjXkd0aS;WAUSaEKyAzfCO}FXc3hZIJDmT33{A)v!W->4Y}AnA7CsO&{HL0k0*x z1TS&V(z0tg!wmm03hk=LzQUY+qX!YOZ5u)7?adC$=t2xvWo=oRxy9G~JUR1=0%MommCMg?TA$ z69}-bVJgp$M{tLslRZcg3TSJXv;E;Wy@p=B-vAjM;$yWdz91@+7kX9JJ*2b;odrzj#_NVO5FMiml6WbtR zJv*$aVN&b^*|9M*E2rLFPD#CwHa+Y3dZh36=QnvL^tQ;Ck78sB@|^D)^k!$u4y^f z?sdHuR$VI`E}h1G2Y=zwud9C+q$f&c@CoF4llDZ%kYRk$6X-wC^Wy72%tF}pDOVNS zZbBEOEXl$$flbjM!zQNCcT_5GLbsLD(q)h;;Yi-+k8<@!3Izy+DGzTHTsYCk;Sm_D z{dt&i?;{AbT`OB0m?*i(AAHA#p7(tdBFnBIThF7-qi_0vMvGadAJ3+-K@vPslu|57 zfQvxt5+DAhiZb#4LpzT)H};joE&M!N&H+WZ*;ofly}HiM|EVXQwT5c2bpNr7Di z^Reo{7&HiEqiaj+A25nC?X~ljB-8q6%d%k31fm%;pD{LP?6}?H-HIl*-M8wy_4MJ! z?prjFnFC*px}gI(do~K@dk zes8%?#-{;4f2)5nOJjvSllwez96uo7mK)|P^T1H~N%98&j879vyB=K3)GiGHrZbHy zpt94ZA%Rqunw|qLZdWZ839j}#ZHT0%A0;(V z6-Qe?RWy_Ms_LP_AyZD7KW{SqmYBU?Md!sbOEbTP-bP`iw$sMoq$S~mM=U+D7*sDG zS;5H~#z+%~^sesI44cQ?)=gfg5(a@9E6J_xvTz<0iIt)cTpzMe;s$^>{@IVG5uhyg zW@%QBRgLN5@`lL|E}9bu{Vp-#rNp6kxH9)o)P}0K*FLV&;zw>DKi4+a|6*+*Wx=Kh z8Xp{nHA?7b=pUv$&|!${`s{&>#gZbE!o(&-@6w4^Rg0IYAZ6k3-wr+hEztZet%sks4Z< z_C7+(iUPG+jMQsV+h)taLn67I(OcT29xeW|Ta`EOrhpqTOzB{)V@Jm0bFwBr1f5<% zDkPpNiZ}mqsnAjr9@koSS)Cil1KYv`58pc3>RQU~Nm2YjZ*OI4T^1&8#@JO$;YsOv zlfLyE#XV3yg`p@M$3RVVzkd%xo;7Y_@ef$jt=KnI8lrvZH^lKJYVR2u;+H~eCVs-?l zCI8lal`gKx9n+te=VN5mLHyG>A2?!0m*huEa;Qv+`?uM=m(9f?Ekkn(Ri1fbc*6)J zTk=r0J!{WfTl;aQ_DGovwH*#Egg>=Sleb0{tsO5%V!S+|o-a{V**kf{j~H1vEG9OT zT&RNPD_@{tG1ybd-@I)dRr5scbxGHc)jrTSw4yXTlRKJ^~8izj=)o=D+8)?plby_)d-5r zJU%ziOOAWXjiCAjHkaCbS>!DC0a1{WSkEb+>o~bHEI|>M2cPR%tNOukls{sr9ov!- z)T3G22yo-#8;~)F+P>_dC3y(Nt%nb%5(Rd>nV#h@2!n|#6z`TAMe!Spy>$FPWhI7i z{NKq1Tm|*H``7mW|9}jfT)&rI6oNH`vhP~+7mgv0`9yJa%zr!UFe}o?f?Q-$Jc^d! zgcGpNFZZRYWN1RcOExtGu!vF@H3XY2g#ZRuN0OrBU9!55(JzKxJ?JWNdf@-lBs_kq zB)pAFZjSkD{ISc-ftAnzuGMUW`WuxhJoFE;eD@FBv%2vR@CE}#4nffhxAh4Pp(Ypv zV1IA3(#CC{v4vWuH`DXB4v@U0uV80HrvLW(Lm{8Ud&ya0$bbmh@zt%+tsAHq2tT(3 z$#Gjf%hWuB%=(^)2pX+CAK%8Ymk@2z9tnQMG;+OGxN7erkbgUk z>~Dj^RrKN>#_hjx@DEQ(@OWgb;wa*+{R^gag&`oiDn7*AG6?Rw>F@r{QuZ87YquG+ zy*ftxlPS~)a$^|ydJzxmEadlFH);SOsRA$W(K1Dwub2KA1wT?E>lXW9%q<|+cPPN6 z6IgN4wUg`#t0eJ0lC)XBqKXhtm#K_<1;{^U2kdkrLz5;^WI_gOM%j@-;7>F%ZuVI? z>ZoRIBFl7$r((5TFYXVPJs4d)eL9Oud@9h@WQzy34c4OoH4AsOJli*ANk8be(a>^& ztfhA7-VW%vOWvPNiK{{-{jso);KR6SGvkewcOjKeQry;nsO_tG!_g^OJB9d7C;X1A zw$COHpHOif!}>b$&2vbKGWH^wz~y7 zwM3gVpGIo;#?@?dkR1CsYLa8?9>yG%Zd6I~fC8oz@pa2?&r6qi8yJ z?-y~3__D9f;W@fs8cYjLNbk>hRG{bs)cEV5Qlp64h4?;6O6we@Kft9Dj%_al(tz#a z+4~^wVaL%4x0&TUn+$s0$8Ln$)*1%SavaDm<+f3 za)lQJ8c!$lmz>PsniF0QfblL<8iIN8um5FCcyVm}0|%A$Lah_v7kl@r`M9JlZrHb5Oe<*<=FEi{~;%~&6+y4h~c8r^}H3gu> z=4%>d&S`ks#wFibaN&r(!B5FFK*VpcGi4Mq(k+J4)2z}m+9WF?BWvJ8vLJx^}AQm<9YQDaTZC@Mul$@b; zSc%aqw1tS{hbH>Bl%E>yk;{jz1ZEF^6lvvbSP`@>C_ysq)9<2hPtFZf;%nY9SKc(S z-k0s2bD3SagZi_2*w`nrK_rSB_PFTQNvvRH0@2+tjl9z_#4l>-Mi0Vf`6krKsumW^ z@3ITX1jWqs87tZT0-l=x0zA}f{{o(E4<_qYm%cfLXhNKcoKTzOh81)NJB}ndu*MH# zrnf?Aqp;DJIXFOIxxJS>!+-{9o;lUCu) zE9mThq@ku}?L-g#<%5T*0NoD*>cj9Q51@|l=IxCA0pmSlJGb_n&kCi+9za!!za|>4 z&aZOqIoN)1gbR6WbtKg;@rMC~W^THFs-#vtq8*w?iOV;sB8s-{2r`{iqFnmw7)vp6 zji#$_D4hU*KG+riBS2ybB6zT?UanwZCA@&L*seMJMkiQBn#UcF$o@&+&F08SDmgT^_g6smYv+YKzP6Uxs&t>su* z$3^EVGAqY%01wDXSziZ&N&qsE#gVc>AKJ%96^qf{0dEd#3b`v0|FN#wNb<~7M#}A* z>sg`C`$q!WxF~QJ3;ld8O**MC+mj`e>{qYZY|hfs-?41m9oruwNDy=qJIP@@;@x@V z4TZqQW3$K?Y$M!9($9*6_?MsMeHVy*vGNxir)g>#J(>Cr1nu)ZnfL0#EkC~^-Y4CLegSNZ|lMtBM+?Ehw~lKP&}nPDZy zb1=w9CzF4D_Xt%pm!qa`kON}f9F+6(XUU_H#^1YFn z#*JSCbw^JObbzW0>rUzHZV^PPgmmB;!YeyaGka8OP>>roOA_Iq^`CD~k@btAr!|Nj)8Feu?b z-VBYCI|Bqd`vmeX$wknE{({E6XtmTr>`0#4U}axV@FWe4s^goBt52tY~dHpqg%ynGryGXB}^-t*zctauJ8L&F}+p zo_>5!5eBzg>6$8#1Q%5|7r()Gn0>f1M0|aclh#NJVc-5-|2ziWuCl{9uZ(B)yy}BP znM7)Kn&QCbVBz&#@&hbPlbxAT{Ao<1dt0pjy!zd&J?@D62b0WPdLzVEo;@DJYGtNq zzP<4iaaME2H}o^aMG>$bIxTo`r(?fUWp8#_w8xgSvbG?4?Jg2t`iSFUU?;K$KW-@j^`rBFL zxIu+lxy=Weg`M7W9eR8o0>70`6gP-o@ z^&)X!X^VRenBXa#*9f&Dh4iC*kv>9Qj+APE4x`Rh);WBgpy=^eA^6ae!gAn0vwwx; zRBQ23hb+Sn9!W^`x@%-tsk+VdDr&jg(SPG73H^VQzn~6Y`Ri;8HUtn>RL#d<0kgKq z3lYPiw7J}Ift$JS76?qJ~%tzTudHhS=Xl?r~q@YYasV6vF@tAt1rVIsz5Z;5!*r_9Hf4S}1Q? zSkTJs@Wn~w`6X%c?+b>?AW?je7Spk!NTJwRic~Wr`%W;#VPu(RUg`S>v8I7A@Myk~ ziUQLOHX6$_{oMncfc|>sU!sb>xrq<{Z%vg6uog8^jf`loV2u(ck;^PI<6-vpbbpHr zzX*Y@6`!jvSAVr@EMN$QEU`kEMgHc4?`lA({V08$7)KTs zxAzC6rgC}2@NLTPvyg*|l$uxw3#FgPm+ygeM%?4Ya@lU^XkzH~t6$gsKCSHn@|fNp zOA~&n_P7sF)jfJdP))c3F$)Hj)tqjO_r1RzJSrFSf5}zPdtWu7$cS-m#37*9-8RKu zkXaC2hB0~XlZeGinwpw;m43 zqa$ejZyvq5Z2{9Ec+iu9wx_hcSAzF#pUO-Pte|S>XsXD|Y`(o4Xu8i%{_u73R2{ce z4TY0-CQ0%hc9RyprVn#z~&F z^yp2v+36(v*;Rk=IVW0>Sm9s9id+y?Litg8@8ZLQo(H;my zfcV-4AQe~=8sBWTTnQ|iQ)-Dy!Z}Gk+J_=nC8ik;z8o%Z}fx9h8>(2m9}{z&(A?#ckML_41ia2 z$KrNfd!PG<@O98B@sw_7k{%MI<;|sqkL3bUv#r~T9>WhnE4o}ppop4;X}|mWJ$Oiik_LeURsSBfsS&z9$J6a$(}u~xD-6MN!DLgoG>@)R*Q{AY&ApfUP)5TEw^utYk;z@$)7gZif^QdVnKn}JsUlT!2CC~K zE#WPFozhfotc)OPl+h^_r5&qVN&WK%N^Ro(mMn~O^5M#*!n%O=Qk|+#;MG`hURA}t zJ2|LsnbneeI6Vv@kIj;h0J?g1VuW0j zE_=~l$tNIdJ5x8JuHu!u&D>z<-14btX=n9}JTYI`F_8QAx~R)&Z<#hd0f*V>L?>1= zB(7~?@m=ONjr9XP?O2Mix@?#=5lRuFH0p}#C7|E|3cy^ZDu;4ys(Owpla{=CkLlMo zb6RuLl%~Vj!}AyIzRJMAc=}7xF_2_6ORGu?)6tAkcHEU4kr<}raRBQ1^)?QN1|b^x ziFLMLUcDn27#BnBg~=BWtep*w%6=Ii>!!e{;t3Xii$_~{Pr8FyyAEcVI7!LJGpZ-7 zL%q9!_tWlWR|fQP`nB9=k0J|o)iYZ#b^U@o@2)hFqlYATx~4I^hZDnoN_3{5IX7TW zImO(5E^p)t_|q8Dc?CI2P@ooN|9DLrMhfH48NyP6bu(`YA(^hv4$l8upw=-{I{fJ| zeEq5*m{@-eN2DKJV9tCTGTkONne$!sxYSoYd9TU6@}E|bX*RLxM^Q}3z2W!!8SPUG z^2^&^f^#EgNXJi6Qg8E5md)WSC&P}$lW6oM_+4n$Qo z%Rb70Rb)jUl9>uwphnt?UtsN0)C_NwOuwT{cQ!p zNlpXA3K6gQ>*frur#Bx_HitmR(SHyaiqG1zqvbd=O8~I?LkQS5|3Q)y$ze*tta*s` z5RRyv`iAfll{pT08X~%LMC{$F8XFtug!)YJk4*#MouPVAP6TB!j^#wVOrR0G|DBXg zpyHmWtn|5g{k%p$Y{4M;1hbV$hZChM?CVF$Z28E)4WwpjK(ch-ResJt{&Ble zZ_)WQv@)B7n;~asp+V7w$KT<%f8Bfypxoq4{S<^p4S^^+Ceu)@M*v>H^F90ZzMD2Q z_O9|9#QG!~sH)mVy`}`bE?Bdr=rran%R*H&oroGQ<%pm0>FutjKh(Ou9G2w%l2+CC z3o4ut;3uI*RQn~D`cX#PX%!!88XCpg#acD19nlS@r8m^dmht6+mu?~gpXZMj=^tBe zu{23(MXS?qz+$v~$RACU6_0;z14=Qv9bUy7Q$dP0fkDW>wH8^ojdNzv{AVIg$@)u) zOYZq1EcjFMl6nGdsYarcipv8?n7u`vCBab>YmpuhD>4{8@Gazel~Zwpa{Y zHHw0*GB8Ep@G;qrD)|xXSFz(Cfpd%8p%fLrnoxPKU%;v;6u>?8@sM!@TIm4muvt1r zJ*zWoyCU;0>AGneLf}UUysxARDtMrZhyA9d{HFvR@_C_d&FgZ*0D&$R3Z_9H0qTz? z-V{M=bcO;6Y{>vQpzCdD@r-%{_7c`NAOj+Z!1E7mn19usvj%Ja;m+r&2sKlv-yqMY zoeP&{rZrclul+Sf8$Lah4#7Y*V@9}XW<5e-wywx}%<|CV$+^w+{o*_bK#DMOEq%aZd5-2}a2nOl+QG-g}U7E7Fv!J?U5m6-lzh$WgJ0MF1!fW1FSi<--C0+QG6Rwv!H;4C*4N%#! zsv5(Ig|<&Mc)W>T!+Y?~0?Jl;36GEMyY{%}MKljh3^Olx+bp!qxemJzNQq4{T=vyk zG>(3H+1F>^Ql!5ahlBd17ar0@seopdsSzy}W3|WWNRVm(GUHgkIWUqBqR=m+r}zx8 zxNlWnsG_+}L&jhG+dTw_jYo_@l`KnZyDfqrG1+e#KRpO)IWYu@Bs5iEoq2toYv}pb z+W(z#jUXj0?Qv*?X29cp)ly^sgf3T3xz52hG03~amfcJ9tE7w<-Bk}g(;m~VY6PEh zbNzz=P8)x(+_SmCa5YK*hdLds*hvuVP00CZ(*6e#t@AKA>H) za5)-e{&M@3+GS^m)%K}sRhjmS%q_M{mkf6aL;-gE z^yd@ej;S{wG$04Hn@0Djb+xrybJG>JBGi@e*8 zov9{!Z(G5Ba_nMMHixBgFj6ju)b@IeGgTIAB=PcRq0x;9e5|joPv45nz(;#2c|h;( z?xtQLx7B)5vex&mLLm6wkgh32bg!lr9H!v=1L78_Y5E>iX!Nm?fojAv$)>h#OioPa ze(iVj`4$S%unIG%kSpaRBR!*)QL-9Y4{M-9z@D~dO{z^;mFiVc?qdNHt@^9SJFb3> zFg62}?Bf&Tk*3A`cv=cKg z_+|>E57k)swQAO7WXU2%VSA(^c4JYL1bTeOcI^ZqFhgzG9f^_l)I zltO_dM)Xg@5H+C!sL6Clo}~gGr}RI1HvJS zK+#vvNE(N_CbBp&QkD$YKpeMZGy|3BQSPWM0(g9&h#w_cGLS!fc)YZ3L?Uq4x&ZYk z*bXa;kZbP0id(+R!%+Y4h1X-sd!EQJ&>(y;oSQrZ{xK1PlkRIclvh6oa~;3QAv_$G>6)hr)r-w=<4Eeu<{=*@kSg!z+g?5HZ76 z^|_(0eiu3o1wsOZZz%yFe2bWr(D`njpF2x2#US=fZtJ)-)4E>+{>Eg%&br}UR6rHQ}3eHAmsWqmV4a8#YwWR zmOh2|RrL$F;%7*sBeWGy;_QsLjVFd(XR(i8 zp(Kxpt5E7D2Rp4kiDfF{KC%+{34B|Mgi&{h<{s5)$HT%iO3oX-dff?#_R`S3GKlaAIrEq4;4O82@9oLRlIFUu%_l-8+X|S4{C+YFJ z8gHCNGQ1qHL9fDLA~(|BzkBtYoeS9b*e=2v&21zAwYxaCm&mu( zZ%SAoZ*)YAPP})z+zW2>o)V^CEB&U*be69zR(p5S%D{7p*S1kfJ}H;Em9TPlubY&u z{Txmgw;-?a@y3%v0gkNs8i1uhh1Qn-l5Fc9NG2_lJm$lL+wjZlpcKt z&1}*czV%)b#@RRyP{@i#+&qw$5P{1klj!|q051(R^KvhLAQs?+?JtJ4ZdC`!rv470 zE|c*Bfqv?BwjCa!J3qg+5W>SJV#j!yH8KC3n*%XPtqi}NyQ;)#Y&qOdJ^FxZN?bj+ zNSlCUQE}t-`-9%MRB4D+n;M0GnC+=>^NN9TO5R;jNiE9VXyW8aqu*`JJrFR8%EHVy z;4HDuCva6uUHrEIjWV(Hr}P_Evuji{pLJ`az(w7ZmEM~9m?pH+SXhLXZ}?+R8F%XK z>bK7c9wDoXeSqz~g~fV54@rn>8Eh1#DQXYYeGRNSfE%#LRrtds`6 z=?6HiC5p6J$|-%Xy9X~S8X62`q~3*d118rs<70GP48Rn=fG1gl^Qe++W;qQc$0#6XW#gccv6 z7}I5=$hMiW@;7i^3T1CLm_m=lj44<4l_b9mjk*)jP+CnI2P>j3b5s+27Pp|!jufXu zo^TuC+bhVMeDWdV=>H`DL_a@iQ6^^K8JfVee-lg95>BRp8#?^1R$?tP<@?XduXpb2 zb?|<=G^zIzGk%&**z>krcL|yPELhB)8zJvR)0kdcKQXfifF=LhNnM)}QjIJtYHXv` zObT;%GTmV=v9K-^B=v@72*MRzYB4Z(`Hjl&Jy20<&ysv{X_^fuY|DYOJnIFnc`A^f z&~ya)9(4sfza4R0bQT}(+xWsoYC4%XAOUa3g)cA~X7Ha}tr{}dx9E(6cpb5R4CB4z zPU!!x=pbhoTYfupSAgc5;Ig&CO5eO?a$7>jqlDcDS{U%k-k^;R@bYEQcAs5xs=T53 zxbgG8@;HghfsL?iRIPHv7mTx_4z7GO%7|gcK9g}obaLE8F^kcDTO(HtlGuesfA<8? zg7^-usA7o;FrE@6{nX-gCWkDyAEd%Ejto`PPU95@f9DpsDoz$Tc9#gW6KR>)iA9UY zWNT&u&-K*ql`+T&4~?mBUVqC&J4IzYAT6EVr4!|=Z5#p%;2e#>a@+f8&;FVs4z6P! zme0UcV)7>&^KOb376{Ixb&*+cDh%FtpHD&(*q)hR-iHyHVR7}6TeBJ@_muO|U;yS} zG5*s^_Q_g^S9v5KSsjN9urWI!RJub%m%KL5rHrEO=t&k2WKG*K3=2Qq41zy#k*?nrQ}|FkAiENm z0}&_HBHv0YruUKk4MW=7xq1L_-XBl*Ggj4;Z=TB;JGLtxAuJB+9Hlp`Xn__lXr=!a z=^dRJU;Yv4*Is;_vO~jWL;r~MFGsV8D)p3vy_flH zYUNZW7-RcM0wvzLjx3SS3#gSRMml{*rn_WQHY*eJb+(fT2F8(Sa|4=)#a)Ii(&7O` z(=^zkau#D!E+d4Z!cU=56ro~UpJa7ZrP*7)#7_PsDngPhhwGELg~Rn7!uM{{pah!Q zRUaK|(L@V~f*b6G5es4!p?(1nLfvR3nF*I|s(wm~CU(0|#ADN{y({N66;}w~vhzxT1Q2!?1* z1>$!&IG<`w#~d%c_kpyauE37)2gS<1Z{A+3N7e?{e1BSfCN93t487@BuH5c+9@-S;N78)I~JL-KC^hezS ze?R7pan?O3%39&(0RS%UIaT=O#`vHY-QGO--UQ}YS^US8|VzISh5V;(7Swsplf_tqL7K6;&GRoo;s3C%jd(on^D%09 z=ZMD3tqEs4hDK1o z|FyU^Uby#|e34D(>!txT}o12aBkq;F1WKJ267XwW8+_? zWkM^e|Idll?-%kfSMou$P=EEBlY5{K|J8MV-0pln>_pLm{i_bm5QH%MuOqGhu1JTB zz#a^W{RVRZMBMsIU5(5wmBcrunt%KRK|&1w0(!ByQ!z=e zj>~{$RN}TM&%{yW^Px# literal 0 HcmV?d00001