From 37271c0ec49d5c19c74ba3eefdc0200a84d61d29 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E5=AD=99=E6=98=A5=E9=98=B3?= Date: Tue, 23 Dec 2025 15:05:10 +0800 Subject: [PATCH] =?utf8?q?=E7=BB=99=E7=BC=96=E8=AF=91=E8=84=9A=E6=9C=AC?= =?utf8?q?=E6=B7=BB=E5=8A=A0=E6=97=A7=E7=89=88=E6=9C=AC=20mkyaffs2image.ol?= =?utf8?q?d=E7=9A=84=E5=88=87=E6=8D=A2=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../build/config/target_config/brandy/config.py | 2 ++ .../brandy/mk_fs_image/mkyaffs2tool.py | 13 ++++++++++++- code/sdk/build/script/cmake_builder.py | 5 ++++- .../mkyaffs2image/mkyaffs2image.old | Bin 0 -> 37504 bytes 4 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 code/sdk/tools/bin/platform_tool/mkyaffs2image/mkyaffs2image.old diff --git a/code/sdk/build/config/target_config/brandy/config.py b/code/sdk/build/config/target_config/brandy/config.py index 8fedf75d8..124949c39 100644 --- a/code/sdk/build/config/target_config/brandy/config.py +++ b/code/sdk/build/config/target_config/brandy/config.py @@ -1384,6 +1384,7 @@ target = { 'fs_image_path':'leiniao', 'ssb_version': 'brandy-native-js-ln-ssb', # 'fs_image_path':'evb', + # 'mkyaffs2image_old': True, 'fs_image': True }, 'brandy-native-js-ln-r': { @@ -1573,6 +1574,7 @@ target = { 'fs_image_path':'leiniao', 'ssb_version': 'brandy-native-js-ln-ssb', # 'fs_image_path':'evb', + # 'mkyaffs2image_old': True, 'fs_image': True }, 'brandy-native-js-lnppp-r': { diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/mkyaffs2tool.py b/code/sdk/build/config/target_config/brandy/mk_fs_image/mkyaffs2tool.py index 198d43f67..97f76781f 100644 --- a/code/sdk/build/config/target_config/brandy/mk_fs_image/mkyaffs2tool.py +++ b/code/sdk/build/config/target_config/brandy/mk_fs_image/mkyaffs2tool.py @@ -20,7 +20,6 @@ root_path = os.path.join(os.path.split(os.path.realpath(__file__))[0], '..', '.. cur_dir = os.path.dirname(os.path.abspath(__file__)) image_tool_path = os.path.realpath(os.path.join(root_path, 'tools', 'bin', 'platform_tool', 'mkyaffs2image')) -# 配置生成文件镜像工具路径 mkyaffstool = os.path.join(image_tool_path, 'mkyaffs2image') image_name = "file" @@ -78,6 +77,17 @@ if __name__ == "__main__": if sys.argv[3] == 'False': single_user_partition = False fs_image_path=sys.argv[4] + elif len(sys.argv) == 6 : + out_path = os.path.join(sys.argv[1], "%s.bin" %image_name) + if sys.argv[2] == '128' : + cfg_obb_size = 128 + if sys.argv[3] == 'False': + single_user_partition = False + fs_image_path=sys.argv[4] + if sys.argv[5] == 'True': + mkyaffstool = os.path.join(image_tool_path, 'mkyaffs2image.old') + else: + mkyaffstool = os.path.join(image_tool_path, 'mkyaffs2image') else: print("need give parms output path and oobsize!") sys.exit(1) @@ -101,6 +111,7 @@ if __name__ == "__main__": os.remove(tmp_file) if os.path.exists(image_file): os.remove(image_file) + # 配置生成文件镜像工具路径 if single_user_partition : for partition in partition_list_single: if (partition[1] != "null"): diff --git a/code/sdk/build/script/cmake_builder.py b/code/sdk/build/script/cmake_builder.py index 8ce1e2c09..ee0675ebc 100644 --- a/code/sdk/build/script/cmake_builder.py +++ b/code/sdk/build/script/cmake_builder.py @@ -134,10 +134,13 @@ class CMakeBuilder(BuildEnvironment): defines = env.get("defines") if "CFG_DRIVERS_NANDFLASH" in defines: print("fs img nandflash mode") + mkyaffs2image_old = 'False' if env.get('fs_image_path'): fs_image_path = os.path.join(root_path, 'files', env.get('fs_image_path')) else: fs_image_path = os.path.join(root_path, 'files', 'fd230') + if env.get('mkyaffs2image_old'): + mkyaffs2image_old = 'True' # 创建文件校验表,方便检验文件完整性。 create_fs_checksum_script_path=os.path.join(root_path, 'build', 'config', 'target_config', env.get('chip'),'mk_fs_image', 'create_fs_checksumfile.py') errcode = exec_shell([self.python_path, create_fs_checksum_script_path, fs_image_path], None, True) @@ -160,7 +163,7 @@ class CMakeBuilder(BuildEnvironment): else : oobsize = '64' - errcode = exec_shell([self.python_path, fs_script_path, output_path, oobsize,single_user_partition,fs_image_path], None, True) + errcode = exec_shell([self.python_path, fs_script_path, output_path, oobsize,single_user_partition,fs_image_path,mkyaffs2image_old], None, True) if errcode != 0: print("creat fs image error!") self.print_build_result(target, errcode) diff --git a/code/sdk/tools/bin/platform_tool/mkyaffs2image/mkyaffs2image.old b/code/sdk/tools/bin/platform_tool/mkyaffs2image/mkyaffs2image.old new file mode 100644 index 0000000000000000000000000000000000000000..086d8c50f11b33bd1ab95e1ece13af5a7e9f58b9 GIT binary patch literal 37504 zcmeHwe|(h1x$kVU3rir`MM+C7%Bu}6ScuseJV8m_O*Y|;EEt6-RB;K(hD0{IF}tf^ ztqpFXyj@r6X|1)|bLp*~qo>Eur9HQbwAu|=0+hDVW35)(M(dB=Vl_rZL}c&xnRjOM z?o0NxpL6g1+&^vxvNO+jo_S{Gncwri^Ul{AeN9Cc3zMdpeTfm(U#TN*;gR~faKLi2 zT2_kR`Rp7v4YZYGy1!eu;H#S#it=r{z>8s1xVhw*#Ga?aOxiMqWK+08CVhtPBW>o? zX$of}r$Rq43jfX7gB3b0ZDTkdUyI;3*-Dv?OWPQZbh9U@`|r6W-(ELer#Idx93q{h zE(&*0ggYq0NqdYk0wZmyPf8>G)e3!@Z3TX06#mPYIovuC&TM-HzqBb1GHYIscKlc3 zYZ2i#uGi(5?ISwOq%GsS0^vw6f3FehWLJv#3YCK@@-1zlUUosSd(%ZV7X&+&1iM4A ztxLAnUbN(*n#xGHvYID>(nWDlom#QFm7&~Hgb8uHEanKB{NH)$8>Jnwi_U%XJ7=A6 z{=~BGUE6`9QU=9IJY*=mXfiqa^KcOl&%b3m2xk#t3poeuv+tbuOyJi&%f=J3xd@*L z>kn{>rZEA+wZ8ycmYfn?;P+?hQC#S|5yS1*9Gu@Er4$=fPc9F z-dq5GvH;#*0RLJ6d`1C1TvCAl@dEh01@NW<@=q4v|2Fs)_?gWO046K1e<&coq5%KQ z0yxQ@OunOl{7VbqH3j6%FMxkg0DqtW{t)6-;Ab|A3Z!Q@7-zGym@=S;kp1pi;6KkS z1oZQQ-)-V&=#Sc|`?-j9b_QdSF6Q_5_H~D%o&NT&EiACLJIeY3Z5QFw)QO)%HP@69Rv{E3MdLkTO<_ z6@lCPb$^LVdZP(H=L(&#*MwhsrH=QTaIe63n(#jfIlD}Fli=TN!eEbxscJXg<6_zc0{Z^Co++=Tx|@b5C=r2^k=!gKZ9gg+DR8F=m-SFF;eQnTRVMsX0`E29?tVSK9R=`R1@Juu z@R0&|x&Uq;$j|Rrw^ckWkfz#Tbm#@q&6 zt|`e|HQ=)i{4ECj3yK z1HRLM8yAz`G2mw#_;(rba}4;y27JB&-)+DZ1HQ+ApKHKV2K+n&e$aq_&VY{?@C62Z z$~mQhDGf|%U`hj18ko|+lm@0WFr|Sh4NPg^|91_%=Q!tt8h^{KCTuVIv8)|TMT@c{ zYW!*Yey*DA((hi!*m!oq{jePK8S!_K&v@pQY&N@-)3nhro_Qum(+0zMW++F~#=>~! zM>(1{6vi{(&(XArF`oHGj;4);@yzxdO`8YfnHzF6Z6u6m+Hy2)AdF|O$kDWMFrM+` zXxcCs&$x0lZ4``W&dt%ZK`@?~oug@EU_4{V(X=5jo_Y6_%r9*OApbdej@X)aQYQVqjo&Hfog}B@%jNec5Oc0W1<5l zdV`5>HPNd~bfbx`Gto;;^b!-jz(k*IqRUNmsfo6k=ufW6&+i8&`mZMXbrbyu6a8Bg z{VNmw3lsgMiT;U+e$+%iWTL-kqVF-$NfSM2qQ7dQV@BF@m8aFSwsnoV{VjSXrN(Df zFq3->HL62RSQpS0?F*gcn@OS84e2E^X>zGe_Cw&r} zd;1X%>;o}$Oiy{xd%?$*N{_(Lr~QRXRg+6=7c-{W{{3c3So%TuC6@j(h{0oy9cQ5j zQWJF!w1Qz<3?TJr>R>injhN=D$+JH|eL3nx|EVUv;#A}No#a{W)8064e@ev-wH>)Dc~-s@Z;h zWI9uS${#E$6n^QFDpFRk!l^4syS8GkI_#}bNY#n8cRCa9S!!aHQ!9UvLMB>~$A5wg z3T#JVV$it-)Dx#LK&Z)|RZuNRI9(|&(U%NX*xyrssFF|=h`MKe)0#EsUgfHy`Y}qZ zwld0J@_~vIpeEw=4mh=MRiuFp4^+Gbt7zKirXvg&Z~G%&0Rizo@bn))rV@U~m;5&_ zF#T)LYO-|be8%=t38>niRLxi61omTK%~~p9`zM4a5XD+r{Y8p@=`j2VQUKizcl`Kt zA{T%uTLgbC+&2ri8}6;-hWb=QjXLUk+R0;2*gj8jCQGjsycG3S zaL13^R4q!;F1<{6QJnSUMx1jsh%TR;%(hE$yg>*t!bK&iHJcU^SqVg46e2X&a{m>6Z@Pue{*E7!(7%;O>(O~aO z+Acwayi%mMp>ce9y=IHuq_?t%5h8JR;_!6lP1rgJe918|giudVq}23|?WGxnI-DYb zr~+PXI2}2W&4T}01am!`s9OhH)edMccs?BST83TEYD3!ChaY;hBiguZu=k@g@hp1U zm1@*pNxz5ijf1Z_cGM$!Px9Id6!elGgCkn+nD1tZy5HZ3WR)|>MYAj}fA7$Amj0)Y zvRPi}8BoQxKjF7|St@E*(Q{l0zxYv0{NrqF9};#yf>Sy_Cb(_~C^V&i#BX{AkVJU| z2>P-s5ToWy--Fa7>e_*&zY8Za&5Izt0fflDHmup2h+!MT8@izrROhrI6qEwy%uQ5< z6M=<#eN8U)e}Q!PX8H%mc^5c%1lb+7{WYdP4$6!m3{v|p=tSu|_;saFJ3f!D4gCX1 zy~qwA%FMM;ey&$de-4u-&GsX(WG+SDrzT1*=z;d0g&gvvBX7-!I{gymwoU_IIt3@- zZy>?x3M6OPb{$|U+RSEZXo=FN)HiL{?h zl;)*YX`2T~7WcWx1mS2Mw)=p4cr!$21o|U9J0m|d58L~~jh1K|7j85W+n8{>_fX`y zcG&D_O2tpu^yZkfJtw#*_9MbgG42;`ifylOQ*1vHZi?*@;jZ1odjm()K9w3din0~z zQ4{*G*P&jhkAt!E)$LD@DQM>hv)63!TrFqi=p%e%{30N=FY90k=XaK{}KVVQfXB{${ES(KnO_pzj(p)LMB2syQ;ghRT z2oFQX-eshdMCn@qWO;XiKYf(PTlX9>evKH>+KF+$f${MQc<$2~e@Kj15#th_@w*1b zt4QK~I^%7`xP%x{t|ajW1LFo_?A0096Qh+F(YAeLXRL08gmrkHFI!F#;rszcMg(6XOw`@h8N%(ID|b10&bt z4|K*miSZu{j9)P@ZYGI0>x}KhSVoLO;a3_MTRsQRD|E(-iShLhz*wWFagl+sjwCMB z8D|sY&kT&r!002!EIg6xbSvE7b{!a8K z>k$JQ)0Jc`J02~^ETRm4v~-=39d*p_C&~MT4gN)(f9ZK-Ejp!YW9rb`m#Ra@i&e`3 z^_f%AIS}xAi!Q*P9qr`n7#W_{xBYczBP@%3u@!Tvec(h_@_G~#o4Nxa(jSeZ`E?+P z2W%g#MK`+vVRP|Q_{>f46zOSIwNKI?A_Rtz1Ul4fdm-VD_tDGQTH)LfKUk#MR>HMk zPX~op6Q9}x30Za7r~BsZL4VF}LZ(;S1$eo=Z<^!Yl;g3~{?45(>yYCwDo7&6=5!?q zt~(h<7xEj6R`(tp>GOe2lmOE6y60-l(6#3=N!NbmS?kf>UxUC~6KB7_Z@O_(-gppW zh4zY?Y;dSUX{$OkYE`v;>h@RJ7}B=r8C5&1E_)8;A*cCwRvf35Gr-u<1z9-NMNgxY z9D^4i4^VnPwe`IC*L8;mn+Fyt<3+=;(kaa$RrSyZj@0g$^Liv~H0e{eQ?=heMYxJiw~SJjSYeOX{cdPF`|JU$l@WQsYqhW& zgKC1yNYvdO;=xqyjZQ~6$z#UYb4G#-cFguw6oEV|?S7ZabbqW;O*9^y==B@aWZ(r? z>KeVn_xO2zQsX}Bah5rNp*KC3#@}RVH+t>8dr6harI%vK4i%`d((55MU4tK**G!b} zDNk#&_FK=|HQIY9-i6w#pC!u6kPEN2Y7bKCOMKO7Sb_1vPSzVrdPv>=ieA#cR<(E4 zWk)6}=_96+eiXAosXd?8xVu?zfhTeTiUqy+UyrqIK3=Yt^O#KZeIfqot?~ADPVAMq)Z6BggLz!Ys8J{4hPy0>! zhmafp80)ArkQ7g%QE5)J&c&Q|4*Z)FjjD>J!YsJOG#Ai1IOplUU2rP8b0M5Gmx_OE ziQNpYD$o_6(UB-{(s_)8?dw54#T~SPdV*?`>shbHhwE=)QmrO7P%+Qri(JRxlb8un zQ5y=nb7%Ucw|Qm07qg;ahH;an4`Hr!RQ5;lkBegW`m_^?5;eZhn%tf}b?VfI&zyU3 zK|f41qYVvZoR9SPLwVjIHF;T)>hM0J9dNS)YW(-bzD3yU+ehl%1;LIx<|75Gk^>cs zkz7}*87r_FxSF9=LddA`H;?<^bC0`>~;^z-Eq(ZwUM94@hf6;!r6$Wq*eDJl3*$)9U&JXd^N&D zlZy~4EuDv4gixXB2)PKMveFT95kf_#Bjh4vVGbb|AxCluxd<7_A><&p@hklJ7skn}$yCA25?KhWqBgX;ik`?Mj9o+FH*zw1Y3{MJ5nu^9Wef5hBG z4$U|W4)nSl!iWdRemLe_z;@GimI7eV4oxM>TU9aT_h}gn2ijb8RJJpbSxd6sqTREc zVzX6&2}^siAKMHyC6X$<)WnmN=vD2%ZybEqao3An`7dIfk+i)GF4B*hw3g9m zA0IuXKJypVGSZy1rqoMn`$CR8`k`FkC91t|ljDvk+=&+F;Ip^3AsyvN2iJourQNd- zQSkDhf?K7Hd9{xc9K4=Ag<8Q9Pf{{H+B0h69mk>}$O4&*+LP_Ya=q$787L?PsxKDuE|hiT%JL9^6B+B)0` zD)T&VsYp(rCG#qJ+=+Q_&!-T{otQgkzM#jNCE)%v_GnP6nO*{v09~SpUXS^DeZ6*_ zKXW7GBgHNXdnpME0PrOTM~BXm=iZ0v@o5MZ)k6eK`=AubjHHP~iK>Ai6;)UJ=qWTIY+fM;>3LYOdA{tqCd0Sx z5_Q35iZsKQsI;|Fel8{aDoBl&zSn`>hhf|6umG~m{YWWN@!!jHsYw3{X`QH^6J>%V zi~TK8CJ&oFf9<3u>JgTn$W(YY7Z$ST5tH+SvAa}{tNTv=rp}k=G$>J z1%GHRq^GNqR9)MHsclP9M5pjrDgD5Eh&aLH&-@g7J-{C(d;oanUjd*^+o6EW5h_J>-OVUxLS?YTvU{RubQ%7U|WVq^P}#C#jHq+M^syJW4I^=y{&_0gG3A z8$GF48&Cg$5+bI~)Vco08=UrOZ+NwA+J>00i8Yw|+9AY55ke@*Mobi;FTrJ_cm5)T zp^#=E6QZi57b38pgme;8GqX@D(hVd(S@$xYwWaUHH2vr>mgCp0Kc?jedHKRl`G(m9y00 z2I|h47EuOMThCSzVD7|nX%lTrUnA$o8Wso*q$0K*6(Z{xZlLKNf-ck!45iPGk6MP_ zK1XY)(njKMShl}PEJNveT4b@-P=g5L$F0#>+Cf!os6BcwjeFWk_tCr3Z~PhcgzKO3 zPxG2)?Gw-1X6-qyOK4It>mhz|HcD0GqMuUycqpY((|9NSQ{-CP;522Tg=a$U@nQeK zmyA}-;w6B_<9f-57G=S(+?-rn;q+)A#;xJj1IL{TAL$76G*d+;;c;~I&-YKcyF z4S8JqK70nfp+&7@&`IoNuQuZOa3nt3?};BQ*7kXKG!?}Uy9W+A)P35%_+iC!Y@gfF z$lcCkL(*vntO(e8Y)Cqb06PV2IW|Pjz5OWO4@Y)1p<6;UcH!$jHYA-Cg;l_aLOLmm zA^{@`=`8XfCjz#_Um+)?PdiPYo~s;>m0>>G>UBJJV-a6;w>lmRS=LmSxT~+Xc&q!0 zw8Jz0;*5$3SQY{T4&57tGj>kSqUxNAq)qkSxPglVSou0Dn zPcMMe@($0a(q7kCe01&dwXw&v^n!lyky_pEW4};Tkqrfe zT@udt>sT-93bzj&QbjqCk|kUO-AOl8P~^o<07499Z1GpD+Tr+N6vF`&$zgI^Jn=W| zaP#^3f4o{XXZjv$3z;?4>O}oPep;Dl$D9gsSUfw{R#?bYM6RM-jwU)}s?USRqAlL! zb(nrMx(>OH@p@POO^o74tvglipyRPwRP|<+c%ao+EK$41HRL+rLETHLmS*g?yyQux zi?lwgcL&mcnH^n+n?Vxf7yzUIPhR_}$~cE@99 zRL|Bv^3KSh#K*le-i_8ZY8k}nS@sc%bOc3;`d7ZZJX)2e=d)hz9Teww?)ng=c{N53#@Kqlw(WGByw@zx_h5B$GIa zo-$J!n9{(M2BtJHrGY68Ole?B15+B9(!l?H4Os9#mj0EUo-NzjIy)oP-92ra1C{M8 zg0Ja>I~Shc8(pL@vY?}ce@}>i`X{ojM|z*PAaY&_ z>+B8&7AyJ(hZb}w9c|GzrM)W_+7eMH{n0?EME@#KB;39QpDOC??hLbb#M9P}ul6V% zfg8Kq18ft%T(m_J_yQ3!67JiE^syqCUn6uG#B zHEwO|=?wXmC2L^e?V+vx*G zB`k^$E7c(@(O&v(kK9aFFDFV%SbbZE0<~@q`Jwn|w40K#h03HvFE3pK^aZC<%6A|C z9+T1?Y7bK?@ztc&;ZT6NHsQNawe{Pgfe5Rv0TH>twUX6TN!LX=Y^kf7Rl{o~t6j-l z7p-JaZ76(Gi1GZzdVBG$B_-O0ZucH6c%uvX4pK%`fo&75`|q|RZ|PrWf!qp*RpElJt%6WAsmYKg@ZxV3A{>NC0p2Plvp4Xj&1Iun%*9OCS|>B>+5UV#$P!Ab6zXC zSmBLD*%a#zc65g}qcVqsN@uuFS?_6TT2swEqROhaZHlW}sjjNNFh4ximL-ZuiAB4E z-O+8-7JAyY1fb@CqBll8f|3%}8bPbPSjmfC`3h>-SCy~uM8NI^3)K)f1MTfpi@%DH zx&f!68xo$YnM$-TfcV17rhp=zlv|YQEjm@bQsFffHB8S4Bul<(@YSr;DcGm+i422*($(0|z+3U@ z(dWrS-6T4O&!Z{S5H3I?P$0<=Zw;l7{3IVIE^uv;e0e2;3Z+zD&=(FzJ0ps2`D?cD zAeFp8m1?Di>npz`FLM38;qp2XeDy7Y=Czp0#n07Ur%*2nGtoEEx7P9skoqa~4iif1 z4xw-tLk+wNQ}qaRw#9-`<;J#PERfR-FSpBcU5)H$DofC9>0LN__Ye}0t6trK2zjpd ztoG_R7lSvS=|CtP$YqWRb2IzPlIjhr^q= zoMQaaW+pv}{7;R=Qe-JADyF}p;$o|`$z5!<+RU`X$V z922DT`D}I_a5rpvpQ0D`4%oY3KM1@3g>3dY*kdnevsQ%LjYmB-uv4&8uy?)&f7m0i z>GhD2*R$Ehu>0{utQYn!*aNUfVSfkq7@mUu8|)T5B|ix}1>1>-e!KpX&2EJ4#0w)2 z!zRO@%)z$c!+DmiPRnO!O}FnvS_r2X`KzAGW-oxvywjazRp74%e|vtB%_>L}D|0rL z&ArSq^Co*gyY#G!&%dzZJfJ-MwXk;&BW?nOA-PffJxn--7l!nCC;oOLzViw5lsRuN z@|V%0KMMaa{+@=PZ1=?fGyIJLqqo0_-&1B^SqA3CAYZ`W`|zXJvvgSvrPI837vE)V zOxhan#3T6W#b39SAh+I`#BT@RgD8(S(hHB!X4t@z4zyM1N5>Wf>8%O0-xm+h`^D%(@>eZphIC0UQXL=7W`D^Mlrd~O%Hn?_eg8mMBkA5- zHaA|}RHm#dDVwV+w|*wDRb0P$5hh-wmQ@vfy@Ye9GnpIsM({j<$Fh$S z&qN*@DUV3u?KUsv(OcG1)POW2*Tyt^XY%wu2pM*?1*$t_C=Yvp%>l;KE3hNL+`z2J z9~mG1Mu9CyySa)m9{&o`@ntz3H&XmX{*wHd8)p_B$VU*I;;lk^@}d3V4L5Em4ll5W zfxSq`L>#;vc^+5tIM$isXqZ{lShjGLp^Qit{=NlywP?!$A@A;@=CZkW6+>r9D?;2! zI=g+ET2>pMzM{+>Dyv03f#wijuC#etUxu8GkR$6HiJLN08ko|+lm@0WFr|Sh4NPfZ zN&{0Gn9{(M2BtJHrGfvK8j$x?$a^Wo5}xnLQo3fz#3{O?RM1;#!3={lV%*64FFq@1 z{^~f~^j!-w@*WJ@+ae?VKRA`e0b}fuVa-fNu9+X^$6mx;O~6NlzrKqs&M*MicUSa% zK?;wzSM!Vr#`fH*!`PPKX0Gs%dmAD;hPSu58FA>g#F>a#rh7yrbcW!keK9gPILwXY z!x;>oKj@W1c;A@QDG?B_@JfFk4ySB6-6i~Sbc@q+zeR}uKW54M(98m>6diF3yG7U= zh21Oceqrwv_AX)X7IsS5Bf=gP_L#8Qxr`g9uoYof3EM5~7GZA`cCWDeg}qbQyM(=4 z*ePL;2zyl6W5Sk~2RYBv)1e5vO4vI3_y5}aC+D?TCdVZz>!qwe5|_5TA4Age{ufDm z#r+C08hPJ~q~$#?l9u;g$av+wE|Qk_xky^x<05H!e~YB${TH&m$@^L)E$?ZOw7j21 z((+ywNy~dMXj_~Cw7hSn5H0Ulk^POlS4GnI3Hg$i_ozr(-k&0A zd2b4BOOuiJrAS)dlOkz(KZ>N~y(p5_rRd);Be%Ky<-I79&s_fU9u!&L^8OP^o6BF` zcOuJE-g6>pbNRj~^drkl-e)3dbNR{pOJsS-drKrO^C9&q>70#(Q`#v#Zu;xT4;g_| zyzB61#z}s^2`3r!XXYo2(*+#5K~j>TBPHXNy*3PW-2*e8GYy;t6HgWg9qJkwQf?}%5Iqyx8=rPgBVDe zmK%5T@###C&-u8W$#E+mpTXpKmycsml>@rLqZp&Q9DfZk(u3KEVnlRzF>X;+CdJE` z`@G5c9js+i+{rdpOvXQ($@z}ax0s!QhkZswcNeoWnY@qF=v$1Zb5&n9B9gy6cYm1C zw;0E3<-92$|1_Iy+%Cq`Q8~}a=f^Cq--zh$V#9rUM&Dv4XK@oKwLL3)mrl6mnc1L< z@YJLC0v$eI_|m~(3*?XfHyxn%L*`uk5&oJ9{{nE5vrEX4&l@ik_=vzi51LFP{)nGH zM1z|@Z-jjX{zyK1PoKHTdDwLVPn+WH6!=>vyocjwu!UE{0VC(Zx5G{Gj=DI^_;X7* zzl%SL_hpluM+AS%MLIu!ZVBg41^<|dpZXXJX4OhR957OEzk!?Nzi;CIt-#qXILNHg z^ZiFSNzTSNNBMJHa*c8PEM^z_k@BaZfF~_q;FRCpvOsik>`Z}=n()sHT&^bsJ6jH% z(ytEa2uN;La{Tmq-Y4Y9^@(6-w{rf|+spTWPnP~4asD${t*IR8EZt=MhXwye!H-09 z^GX5!ze;`@OvniSLi)5|FtMN?m`4@TWF||Gg9ab0YRvtB!sVRa4=fV=ay=%apl8Nx zl78uOF6Z=q<0J;+qDlJO0Qk>9edzV-lI3_E6F770xLmIca$LuZzuy=9&N>~Ha_Ex; z=v7ZM&lkYoFM!X$IH#N@g|P*|C%Z?q83|BmHQS#bXqn(2F||8-_Dp(c@#y^gIX9eF z30x8RlF#~Y;CQ}lqT&VcZx_Jd!~}6N{m^?SlpeQRk3&9-|0!@M^5qomPWNSOA8^vc zEK@%~>+H$ozg_?jlm3fNA0Lkw;GbokT>g0l@Glj>uPA^AIqqatU($1WLS&c@-&1~_ zru=@hfSi9RfYVomXG5R%0bQ^hU!E<%pDuuZEabTRbvcS|vFWIXlj;961@KyqV?4T4 z7a;dDRsg4RXZ=F3u+|ok69P{9nPbw=R^Up$2u|HmK+gRnrwID#&kyu4myeu@`4Y0v z&Ep(Di@jiKUk3}w|3d+Moa2}ecy+k}A-||Vd-)W{oor0BQ`ujA7WLT)Jp3oCo3O9t@-dFzreidI zlL;2!zqJ7Vj|K35mh$_#SnBk-`3c9*V$Ye%<>y=u<^%OQU$+SMTmkuS6u?iAeAE-O zex_miGFkmU7q}wgGFq1aKhFpV_tjhu`T@}{_@jkDgUhu`457vpJ7Qsrq9Uh7H_JwO^<7nE73h2G%C^~fz(Hm+T}-rv-^x?yee<*WVv z%B3~c)k1*&(y+e^ry&BkrdmH$;isFS+d>Rc(Tl?V+*`sd}khK*b^z5^aurO?~6vFc%c{hpSaoCAMNqucIgmLct_a3IT+s57W8-E zgh<5S7Tbyx>PIU&Dr>7Qav^t?*cHlP)&Tm6ly zkf37k#=pXMdA-NyzZ}OM8rS;Qdg^_RB$Z#Y-5!Z?b>t`g!fN;%@B4PU#>k9$5QZ+?en?$#q;?PdZ|vFcEMflo%|SCzVB&Q!{>YJc@eFz z78Q=lLcjPO#Kisd6QQUwPaK*v-4u`Fh=zj`%(^B!B4NLN2n|=sUk>RwROF}ADWZZ! zahNTDd+Q@x5GTLbK3@V=BlMT~prJ8Rhr@7;Ar|S%=h1UFQBI6^SJ2drh-edfVZ8(B zY3mLF=mkn8q33uS`$3w?pj7)}Cx2tfnFTHdqz z{q0-Zs6)e;a&sVG_~}*Mm{h%&5UE9}BFFi`(IFN}539scNObM6QD?Z_C0!_nKwmGb z#1Xwf<>pYVlE!D8Ox$LG_}R227%FuxPkr+e^reimci~(dtL)eoLKM0k?bCf^r616^VS?CO9tN$E25 zp->MY-H58KryIib;HZiWGm)Mi46VjV&41lZ(_Rby#Pl(@UoH2o<#S&d1MwQo=Rjbp zl?yNTwWX~Xnc(zt)^fcQnH?hL`)~(pF6T=J2##bPUgG zW&U@G_@!MX!eiRYjXC{oKOkJ3oGli}raXPSo-iwrOK=cUcR(+7WP z%=*6p9`r0)hL`*J(!Npzlt-fapmpKnOp`8VQ!!W3SvPo-V1=<&&48Ly;& z4u>)Q@_C80<$EKN->ko1i14{&wg^sPZ=4}R>b8@{-)#)f`UPjNZqqq9qfv|m z+_MmvWXbrI0iD4q#;4;UnQ|RhbSw8eTf|?LLv)7>|3wo{X(eN{W!=$z^k27#f48W> wX9He=KbddY|5EjoY1c#Qzhm2V`$zf7&&4ZwXTvdB`0r~v2YpA`XiOygU(6(Z3IG5A literal 0 HcmV?d00001 -- 2.17.1