From 7187f25ed3c1cb21aa131c9ddf2fe847bd7b578b Mon Sep 17 00:00:00 2001 From: spuds <71292624+bananaturtlesandwich@users.noreply.github.com> Date: Mon, 21 Aug 2023 10:50:04 +0100 Subject: [PATCH 01/14] unreal_asset: add BP_PlayerGoatMain test --- .../pseudoregalia/BP_PlayerGoatMain.uasset | Bin 0 -> 122054 bytes .../pseudoregalia/BP_PlayerGoatMain.uexp | Bin 0 -> 429431 bytes unreal_asset/tests/general/pseudoregalia.rs | 6 +++++- 3 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 unreal_asset/tests/assets/general/pseudoregalia/BP_PlayerGoatMain.uasset create mode 100644 unreal_asset/tests/assets/general/pseudoregalia/BP_PlayerGoatMain.uexp diff --git a/unreal_asset/tests/assets/general/pseudoregalia/BP_PlayerGoatMain.uasset b/unreal_asset/tests/assets/general/pseudoregalia/BP_PlayerGoatMain.uasset new file mode 100644 index 0000000000000000000000000000000000000000..f86799db5d56825ebfba04afc549ee2ca2d2b475 GIT binary patch literal 122054 zcmbR}37pN<_m{HoM7A##`o@!I&|NEqUI|d}rqI=DqQj86(M-J!Dr&mZYeZ zeTkw7C0eWrp+eSdA^zu_`~803_rCYW`2YII$Gi8OyPkXQxo7)+HMaG;cOE``$O8Pg z>(?@@4U`9Wwd6~|>3LRXc8cV5IqbnHHcPSO4A!TZ`MnQd~y^1E2|yFY(do_H3KP+HV{6Sq-JmmF`H)wL6>= zyVt}y8pls4LSrv?k84CV+1W{!f&!~O*Wj?brD1M1@2SuJtc5sG<0zE!VHk<_0*{+5 zY#R1zO{lQsxFx3**VEvz!O#K!OdX{>5zAo!X$6)dJIi`~epgzhTxcahvgYQw**A-p ztWnESE!kF&i$z~@^>2uMCIUfbNwCDY1J-Ml;tb4so}hb^1^`OsD!7ssOFCfjYr?7KDpR6>e^;_k4{EULUy zU(Nfwhc(~oW+Bg?TZf|spj0Uf*27uMwrqMY9%zs0Y_^_`Y}m?&b^p{;2R1j1PjAT@ zl4G+Lux}eR4Wht{QS_>paboL-I^biD!C+g5GN^i zF27P-3uITrM_e zr|Df93zT4Ecof*#?B9FRqC#Ps+bLz`v9dK*&aH=S6%^QtQze^JXtBG~B)1zna

g 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 literal 0 HcmV?d00001 diff --git a/unreal_asset/tests/assets/general/pseudoregalia/BP_PlayerGoatMain.uexp b/unreal_asset/tests/assets/general/pseudoregalia/BP_PlayerGoatMain.uexp new file mode 100644 index 0000000000000000000000000000000000000000..d1303427481ba0fe1e30a64703371ea68194df72 GIT binary patch literal 429431 zcmeEv2fQ6c_5Tg+1*8hzfC>1LJWQwo=_=$A5{f1QiU=0iP#-@96;MPFB8m#qqzQ<0 z0YQosr7D6-F^GT#K{Ns?f+eVkqLTml&YbV;xwCin&OU8fS@qz^l-o*~>|2IxZA>xYuV=Ev6zAbf()Mcbz z8F88{eJBB8Y5DL5p}LOLb)~K+b$zL8OPwNh1F0KIeUlO*qJC_(#>>e&QYYUj)U6Ju zi%u^}-#n>H3F0WJn@W4G)Fq|;lpH@Ub#tjtOWjQBZ>9c1>YJqQCiPcRcaXZYz>k;X zs#5!W8KNN$O0gZQz$Dl{!c2Nm9Qn^&3*ZBK0__UzEC+)Y($MC-s|B zFO_<{)U%}CDfI@a7fb!D)H9@hNa}%7@0NPA)XSxwAoU!ncS*fb>LpS?C-qFJdq{ns z)b~pLzSNtfUMBVPQqPupo7AhNep%`#rJgMHJ5sNgdXd!6NIhNZ?NYCidY;r{q@E)6 z7O7v8`X#AHOFdEQ2c*7V>i#rEcL5W?~!_i)YnSgQtBkB>qwm-b-7Wk)(_=4Aa$J7XQe(P z^$@8)lDdV|C!}sKb$6+6l=>T~YfBv~wI%p(m&046{z2+4QhzV?cT(4vy1LXOrEV*A ziqtnqT}*IRljB6GpOCty)NQ0rmpWDIMpAz+^^a0#NPV}|cS^li>eEsWSVI0t`L-TM zwfZ4OYejVS_v5dWkR@*W&w>R^G7}c}Cy6pzJ}%K3Efpo8d|0vyQT`rrNuYehpgi6j zrQKYx-$7?7J#;zK2)0w6UPCxLjgTev+rlsRm`&JTBHRJ2uzlu{^ zo+;E)&4fBP;?hH?vm@|Kp_XhW6fzhJjoU-0ojr5_&k$;-2!$ENcXxH)7bDdZLNNr- z$^&Nzo*sc`=ztIe7Oj+_!>JJ${iwzWYEy^P^1!LX$q{&_4#)@%bT}#ElF)%deLe!u z6bgx?fl$XsTzUxg*$6ySD1bE(>hg$7523yifoBSZ;K>l`1ts@r#062iq!92Wgdo9> z)QoO9bOEQgw~eM3(Cq?#q^w7XGQT;B$`sU2aQUR+@`pSwK%wf}MJPQi^;|P>g$_FO zp#E$gb*|X@)t^1w_Ai+pxs?234^MzuyQ7&VGwJr%|4 zd=+bsBO2oMTOt-wmW#xyK`9&++22K6vPAnsgjB7@qzS5Af@8GEH7Es)z|S+=hk?kn2_2~Nnt9+HSl^9;K0%!p z`fX&Pnq*Cs2O@!LqKQ^|F5;3vIZ3QUlutx@IFza%eq>M{=!Vi-T0Ih6haGvLotx^B zi4GLH1W4y-zcC7tETrQi;cAgMI{qFZCG19Ro{h|0%Y#V2Yl6fW=*y1*qO>DE;NQj6 z-!VyOkBE!vqecl1?exz3hJ&= zT^?yuD;`JXaC52+uBsHX*Qk9sie9%| zZ;e{f-@pn>1l;bT@+(Iu39k@*-#lAUhsPu8H9FAezlczrK-F~psL6`Iico4jLQUpH zND0L$)^{Rrc<{=UaJY%9dm^7FI8dO?^8_OJZ<>KWod-^J7j%=o>V=2Q$h$Q{NqAw7 zSct2i-$z2h#$8rF6zWfTKG;`;BFZ20P|g+<3bg{psT2;?gi!Ru$MQx51-dh`QX(i0 z6@kcM)yPT-6oMa>ClJ+rDx#iHm-5f2H<71bR z+_^cO8}X?{qTB9|kP^Z%lAez&Rm+3+dNk4|VK4HyG#V4NJc#uECV~;Eh?LLbw0{#M z#=xXVyu{3n-5F7^2ZTUOoHZyk^nQ`$dKmf`p^ichwd#|{m3ce}j^~6>$Ri;V^Wm2x z>Mk6s6D4++%((YL?A{y*K0oqALLiQh{>a;j@j<6;6;V$(4XaG5Jll&OER^8zQ8Nv1 z(;VeLk(Cl$K4rMPl#fF7@$?r8y`A7)8H3|~Qnaqwf^BhI)5Ump0{h>6d~#UPhB1MfAmQSj*v;-t~tg;*gw0eUJc3z zO@!SZq11YW>hG;GGm>kO=$E_m+{m$y`3kNfkAxfT*ar%1oPk22-WPd4!G+m=p9mbr z>yj!6{z#;95AfeXcqx>>2lzA1!1wgTdr>bG?DLWAwLT`&=b9kV2YW?EP56M|W21=e z0X{8KI{{7&wv2?SRhz4liFux&1}{e736Ti?$;hY)a1Na1BZU)b<}O(?Q0e0%4z)^? z&x}Y55bH7)aFa|Wa&Hj)Skdm4&IxL4%=3F{8&7@zQ02i>;QOk(@l^N(ZR08NPfA6> zQ{xvZJXVMIYkRu1=W2T!X%9(7!BgjhDg$QZ{m?08qEtL7kAkPvZ&F@(YW+yp>z`sj zSlf82{XwOVr`+GHGy%K0!r&?R4{IAw#qXvx@s#}gwEcT&zfN_>GpMt*A5YcKSNd;} z_R0!_r|!R@Ffx|illIc(p2|NE4Jm6&-Bn?JBki-54xZxQNa^e@?Ps)qduh*9_$Q=& zmiBKU?d7!pN77zeb;Mf&duabN(k`@(w+LWIlyOq`cP;;x!IBDtw+^1rHr_&bufj}_ z<3ZZSTMGZDZOoqMsytgt+r51tNBHVXD$f`?{wWNN~wftKaAJR7N3BF(3ljV4*wsFJk0Byfsj!P;12c&(B%5$2u z57G9q(mqw&7fSmQZC@wt>$QD{wC8C13)23uwm&89Q?z})v@g>3wbK5&w((ZUDdKCW z3|pct|DEh;0}Q$zsqiOC`#^0UE$tJujki|L)ArY-eU-Lvk@nHrK1JFe()KaZK3Us% z3+6&?UnA{nwSBv^Kc(%{rG2QjKO^naw0)7ZzoPByrG108za#CVw0*L)Kd9|bO8X>j ze_7fWX!~kuU!(2Yr2RQY?G@y>r?yv= zV0e2X`)m8vavYL+vh=SkN92zaq`it9_ty4nCZR4%Re=5vQ(*KaQx0Ci?6$WoXPSN(`(!ZIue<|&AmDiQh-cI{}E$#Pf|54Ij zTib_Ad!oWTD(&Z#*IT8%viAQ}+P7=}*3y1a+dE79d2PQ<+JDjZOlcphxPOxNMdEjq z4@+G|`+p|wm9+h1Y5zlUca-+;wI6SdKCNxMMS7LC7YNK;ZR0J|`?Za?PQR~hYzCheOQW^p;cuJ#`x{nx542TOZ-?f;0hzoK*o zrTv8V|3KQm*7kkU{(;iOTeaU(_-WF=x6*u%w8tp?N2UE5g?~ia6BTAxX}?`Pmj>`OT zX}?Wjo|5*h+QwVai)(wX^q;P{n@ane+CNJAZqqj2s@_)H^8{vz(VuReFBcA`s_fF` z)(}6IKD0sZC#LzBsXZD-v*ryqXM>;n(jd)IvrK6KxY%{*ZL zp+j5W!)YnpX=2S_%Ep76s?!nxy9{oj5yC4T`q2}4qkbw3P2W63-TNM;AJ8t9-QpGs zUPWUJksjX!=9ZN5KdNL27mg&r_dbY-L5%W~Ac+6m^Dp1jAfeA7w55F1j1u3Ye<$gQ zt_J&*vgdULBh8$te^O_4IVrm>)tGX;U)lZCkm!)(B|VYwtb8j$F90`+g=UfhjeU%& zyeP`HTf%NXTLkPjCt>@yI13_>mYuMo~+~snMxOYwJve2s3);G zL(x=Wrh*y%M61wadBB1JrEq`kp9fW*N|pxDp;2_MshHUFbuHMOqI9LkTycX+-W6yM zPoVWym5b>zY$giaV{xxOEcn`<7>$c@i1qebDfvy*%<2)`~J7Wc@+Dw3-0eVUVw>#yT~=Su;<^N_S54J~DVu{XDzz z;O4ayT3ZeBMb7RlTJxv!g~SSgUkYtF$X5_6k#Vlv8e6rV|KWpty|6;wTYL22Vzq-p z1bnC$0AICBusC3lFV}SkxMQzDzE0O2pf&&72i42)^wdYx4wb|pBX=vlAjf!Fc%zo@ z(G_KQyVj`I{q>I7c#toxRU{U_Po0z)Ye22UcQyjBtYr;fjKramxh@2Rujd8|AkHD@Yc4JbNbkY)J% zKS__Q>*r79y8ex7-b#WQknDVct}-eovFAN0brQEvKdnwE^jIG7^cYIKeO^ohw6(Z4 z-ss_4tLo>l&nDm~ZTv-5pnE4M;;ZynIUJ!qMdb{w(y!^IqBwLT5U`g?B>Eon;lLe0 zw#5=f|H*3IE`#ZqX{V%5Ub{7KZ&zgBPZsQ-Q=Ww$%LAScN1+w}uGVG0KWqM8twL0; zxcop*T&qV?JXa}Rqy2`KZ?2}soTO*?>=g;Pr^X4y&aIT{YZbXd_575ak158gdW<7- zS*6@sP8;-5lH&Eb6qnDXc!UbS@MJt%S@)!vE#n6kI>mc*L@zuUf0Rox_BDMT9~ovd zRrxOCv^97``sD2CztUjog1P;)d8w1Po;Wad3st6yIcMqVo1{-pn7(oHWb2;kTh^SM zh6jvMy6}9{jF0+rT~4;zGgeNW#C`(r51>@Zw(gm>ZrXe+Zv7n{8C@_h*!l-)Ra%2< zs%@D;xPI-Cv%R1#bLHW)+EwV0hf%G)l4rI{p7~7j%q-Q00>4)wXKKHGEDtMbvx{ve zPvgR>%gMoQwpGlcB<5P9!mPJp+9}&_^Qk2IvB@(WS>$+`I<_)@;Y*?}Po0D*mQFaf z$Hrvf4$pe};0CS1@vRGfbQ|8}Kq=hc@=s|6_I*R;;gofOo}jDT9+yDuMO3Npkv$9-tcA|`%d*oIVBe(Wv@Sn`+b~sh5GV{&P7XCxf0=& z^74ki%lz!(EsJ-be|zXC8yjtOz1t0yJ-$U9c|`9bqN_$%EHOUIsd38;Y_&qM=2S6- zb0CinYjCQ#eOP`yUD;*FFb6He)x8!H$1rbrC1Y3>66O`Dy%{Rqkdsd1(e}md*s1pc zKuWfv7kc=x5olpN#)^JGfs%@9f>N-KgPdCCXA@c%S2yB%nkKc_3z%Ie{mmliCzQKy#plEP~hskMeSlG7*Oi=}6h>^_^rZfq}hcs&>E zwS~iO^&ED18@MOCqZW#Gd=Yu!uFm zF)XWG>4mv1o`P6?lRwH=3ph--AZviR-37zNocKr{Cgx#|FFwhJK2%(o=DyWf3E!bR zAg4Bvx)0#y>bP)^e4vAb#!1_o;Mniwi6aPZB?7a1%uAmbF6MmsViYxdxObc9um>7o zVnc}9hiPh3Mts0Pg;bRC8@Ij1ajuKS{nw4-(#!{?u7WQg38>EYwqra%R&y}>ND~Dx zkkNwS2e~^4RXTu`p%3)tZudKS;T4QfVfWL+J2k=h_$eTw+}0IE@LUNf=NXi5bw#0% z0}8nC@u}M*6l}!17`pIWTW{4P^}w+Uc;|1U9H_f{BFz^h`97M_a~!cC7JiHLDCv4s zsvADHIv2KDVffIB69{or3_+s>h+AR^+9*KW97E6~0pgo61g#JtZZizY(WlqVxDH7MH)^+TmP_x#N$ z?Sh)(P9(&yV+cwYAfAsQC=4LH;ST!?4Oc(CKx00{^hbPvkeniRk5Cy}S&pEs%LIG-*L3Wgk7y9s)NZ}eE7D5f>-;vuBTsnWz;Xh4~ za4q^KsV-Xn7@L=d!DBHF;`cEG?GPZIiXo_WfcR$&K`jHsi!lUM0)%(--7n<1SrDQ* zdHoZIi+RQs!^PZS*gQAN#Dv8-UyO-zIX-rYO-BEDYVC~Z$1R$-OLejE@7PP^yEY-7 ziy_Dg5Z;eRJdkHoP~zD8X*7@$qvB{Y_NE9r3U#a*dmTFdCf0zw*AZgQ3QxokWCaMX z<0YAK14?vCpR`dZa3VV*B{9Fadrbx~gxB#64dRqD zz}d>UhmHh4D-XQGe}7h-AUS!iN8SDuLy!$1ylxw2>IOaNjB!yCu5m`k4ENVq91>bT zi1WoK@`enCJ;Mpx9h4rXw&8S;NCGdQ8l{QCNFtXS6kItuQ>qKe zCu2KNLkvF$@rM|K3I&K~VhG9~AQ1Q{A$%w=r-DtDF5@|C`2EW(b2erfL)^2ub4U(KZq#UH~5-n!5fkx zqBVRNG1qehGL=0RQQ32vFAYdV=5+J;jr(`-AWOyCOV@`UO(c1KC&I|I* zqB+-rU~o>*k-32huq@WM%Xidb>B&5MmAV{z_@#UY_hf;iV? zinFX>@UgNxB5`o8OQ>?l{Y_4zKqFL!C;H3F&x-B@(9kU}Em$xO zY_?Qc5xyx}7SmrNd|a_GKykg6W!#y0bXV&?LIC-YHL%Bx7wue-zDb8CXt(k8+by~< z=xaMx2et#_019BXqXgqf2w=8jwcbWqUidjjfzay{?0~2PX24V6H%q1F;K5mzfzrAmK8zgZqSh zLhc3bByy#a7;$*fSkla&<6!k;TIQ;{^I)ED%Y(QAl}#K0G&1Alx_P zQuFmnmcrCr!XV1lk&iP_?h}qEmW%JfUxsxH_qPk}ZR3mjTSu^pvP=0I?lIeWYaRw|#Q6iuH@UEaSc^%c$`WYFs-xEX|zpig@C6 z(lcNSDL9~FHt8}z2rkzWT(RKVC5PZWf$$-IH~ z!Feh0JQpSW@rrPV-*z}+)ECsfizs8@XFG=e$wjM`0`rC|X-W7i89@@;;Tc=m(u6FO zn?7uZQ_0GkIei?j@?RfiBbd93_dgM5>+dPvJ3$9XB($ZpeRBNs#d*mQu4A}>5(QsL_4vOM~5t=xg_qs9g$rzPVj$Ywi+7MJwo z@TLho3h-36(K@>@Mgj%fG4#A7obCczMowbJCJ5<=_{$fg0rcAxth%3;$$K-8S+#_hRzSh_iYO;52svb;xS$bKpw*!8{>o8^S}Ej`xWB>+N-=n1QE;A2 zYUJ<|B1;nJjWe_aq)0zp{F*DP!e4HGV1^2>~E#I z!Aa*2f)dbd$Iy*3fy$L52T7j?NZT=PJ5j*H(a{0Ub_|UXILF6gPZYjgOGyz{9|R0! z1Vwf{)B zftSGyH6fTq`B5Gh(y22>BKVmRj~?K>&)0)GmF8VQ zf@dgwVI&Yx%MvMF=$VW3NItbln;-(ETbCWeF&qUg0xISxB@N zpGzT9!dhIvZ>5qDJfZ$xZCUD1lqd7{l!n`*a^b%<)Bv{a82a@~3l{k6O@n(5x+_ce zN|fJgaxV}l*p8v)WT;i>dPFYo1ETHlcenTj*m$&JtO{tM#_oV1lrnx7ZFth$1_aW! zqe^-ip#a@2)VK>ocTepeaF7zH*^Z&*siDQ5;4$>?oLvX`xs(qA2a3RDN4C8xc(1_wqt0X7{Hmul5-u_!=4haSOiM8qrBi?edj1yhV2z-BzKA- z4U(HL;ewApa8T;6iTcpW83 zU_1QvyYkse!E>d2kke}FSX+y_4sPMVpgpu62deFMa2G1=Ajm~=$F*_CC2 zM4^NGozTJEOz5~KCd!>ifZ#qObX*>zTpV|BClFA$)(;(A&4&)I*Fy(aPO)u0?)W0?~vlJ^_o~ z)kn#njL}~qw-nw-9f@hNo|&5$otWlQ9X|G68Ye9{+nyQMFNws>m+!~)BE=m5X2)y0 z?`wFKY6!=r(VWD81>4$|a*cQ@#jTzhoR)94>;6U#M#ZWB`P9Vy)135?39(*8t#=3BZNL zB9#snLR54vA+TOxYAKf-cJbK>kCg=B&60y%eJ`#kMjIv70**w|q8CYF8OYq=yoMD5 zJ9HUXE;;DrwVgKp&y0ihL(P(d1S?C9krjtG-XfJ^!iuBAZCF>Zqq^eYncNk}NJ4Oq zU-bO`f{x}One7<5jkn(H%D6preYl5ap(k}*L6_%s?|Oc6cn#h^uPeX($Ghw8kwxgD zmXKLmpzM%jD?O7Qw3hXL?d|+xvSrS3hQCfGBBkuY6!raz6 zLZ1KTBS5@UO_anVKo;C`=mE~Vh?&#@-heu9b!Soscm{R*uonzR>Z4US^qGg_&XbFi zlYC!`cXf$^&4+LVrj%fRa)`kd&O?{rF$b$dg2VAj0~{i1*%IKJ;xn_E*uLn_puLe88ju3LinqK;h86CQ>~ybVnYjcXpy-6Y<1x!AEdJx>}oAyA#bUReU7Qqq9lA?DDMj+@LI8mbWsx|&V|=TND09Ren}oUV;57WRXZaP zF?BXX!PMCh1yg4x3gZ`3r$tG`Z#;EopdjSQ1^d)03VDTqjNe7GD9Z|ovIG?SE?NdS zBlij+Wx*2xLU25v+5j9=X9hUq2~(#9&xj{XotY?wfTCdPv?y7l?{1G9a#bzTfA@{F zY+dYoToy_5u4)(}Dt`0LX7^h48SK1224GYl=9OUo@4u0TAg55ZniK+v!Ux0}BUv-o za^e8P63vR27>@;{l7baVHV+OnthX#u%`khzYVwSgtO#aKk;csZBm~?ACN96GK?dk$ zJL=!z0S3^_J3L$h1!}g#d{+q9Jps;kxHn!l1ND}?ujLyZZ@M_axef{>Y)AR7jul{{ zqgna0JHH%+%My@`-km|0d3VNAbyl;?U58buVpsd_48|g;4|wxi89Ht#xUbZ0{PiHt zRJa7Un6h!Q*pBk07+&pyG!D#mlwe#T1u)y;FG=$03VWvd?hFW+cV{SJ=eslPbply> z=G_^>IAyKS6)h^-&zvMrkLO&1hp^qr;ra|Eh+cnTw?n+pz`2f#;tnqH0QAfDBtqW#RrMLXDb)%~Dm9c#cwLzf-QawG~)0@&*7cVnU)T>YonFbm)r~kD*2`o zPF9~jMsM_{lH=umU};S`$x?m)8gMR@Dhu3^1*lkNp)WvJpevlw`I-^D(D^9PV$y@& zPIx>G%roXuAkYMG-?6Wfzeo%g(9J*C(xU*(LD-J`Hi;2i^U}Eji_a3f7_~sITM^=Ug%A~;OA5ZZ1c#SP z5W5)dgvZK4F8sP^GD{FlBOuXtH*OYj2|~b;NLutFDJ%=cp`FV@c65Dn2~J*HDogq1 zlJhzrm*-85Sa~Q2v1~)tB zY?Pa)PF_2FU+qMXxW}MB?h=jz^1HiOV_FHSi;FOkQI;@~v7N3_y2#A&b7a;(*VaX|K!HMeV}f}Ulq>(y88Wd=Wdzx z0wu`3S}J(@pNKv0AHvMNdRhO2-c`(thmHBC74v=}4m$F&&#BlgNI@U!XsKO(CHG4* zR0rhL22$Nmh~KSa?w!)%5J_lT`Rq;b=o5J+fCPM|{a7VSaU@4~6Nl3ORZgQ29MYF1 zJRA$@3+-?8bm-><=_aZEN)NehCq3gf#REP5c?pt4e|b^QLbv;lm2*x^3!EbBAIj_p ziWHb+oNM_%`Wx;aA5u zKsh;|%V;q^(%y`RRGBq^+n#Z*ejHe)J>xXCN43XZq0aJ;(9G0Nr%6cpsJlR6@k<6v z3nhHCQ0`8Z?LeyZKYqC~I7_J~W}zH0+u?+FYsED&^m`JsP>z`GnBXZ?|AxzLIJE=* zKuauOQPAO+&<>6<72s^g(BI{eImh@&wImLHAw77s{wOlTEKsl=L%$RX75?5k_d*;g z0nv7pzgS@f@`wz%fM`3)-%GG^I1wy;Pl=HjDA|tkDMU+uq8B>)JNUuD_Sj`~wsFiX zrAd?8GfricuH+}q#qeZ}D5q+%MC5OP*C%xUJ>j0@f z>l5{@(lgYO(c;2DqrfHYfu-7gyUJNd*@6cJ+Tbvuf3ehZz%SuFcY}&j zKN>BRQ=rnZp9$NVCP z3OAe$P`D*+fWl2{1`6GHO{6*<=(~eY;&=OSnp_en@wd z+m`{(cZs<1rVa^@6P(-fOmJ@6dw?@Iu5&7t2F-{kZu-fg28F9N{(=)xXnoH-_`rg@ zOe5!kk^rX;oXbePMxerTbm_oy0BTu+K-F}Rjl}VdbYPJZ-X=KGK?XQg=Q|`BsuKn2 zz;dXu7EzE68loT_WTMz~U{MlYkJCX0N}LX=DC8A9AEyJ0l93KFz&XB=4lH;gKnTuz z3-ovoaHN9_>hv_yfd$V94y1!j6prs(1qFpV(E7eN_<-QI`Tkt++w;H+1-np=SgcYQ z9Lo}fsiuN#B#v#Q0*jPz9l?qZ-g-Qlnl%oe~RWJAzQKO@~nI=oE^*dJpTcY3-v=FcTwEI6?%Zc#7okS##M0#*U$llE9B6@^>66FX19arWpT$> z3W#t?M+a9*0Rk@RfVe8|;94f2aHSGDxDE*&a7hPIxTK>4F6roiOFB9( zjypJq2QHkYLkH*K(7~BDbZ{O;hrh(fX)=J=j-em&!m{;%^P)`&o)Tx!K*@Ft-9t*& zSZj>==7XDiY)+;D+jf+fn=MTzhaJP766e@J$##^Nn=5X$3{ALNY{!uka-h#CH*|1P zMTeJ(^JW0C9p&YFtDQ&W>=_VkNBN__y=Ag)^`tq=2GX`;Xeka?E2-YB*3wqxu=7!p$Y|0G=G#?G9nc5<0H)pUVzpIut;($L+u%wbF!88W@Ft8j!qe5J=k& z|J@q?o_k>;cW6KujOo8z?jyS(wm1`<99{mnc;+8@3V&_6fmJXZGQM&fB;O|$l18^~ zd)yuBKVcAe%g$8|SeMg^Ep3ms|e!+jMu;`b>hg_JgiBiLbC`^exP_VNpoCdAdnt+u; z6#eKs%YCfhrjXAwdYVX?q9Nn;K(XJjx|hmAl!VRpH8z81GPu}q;k-;P8M<)JZh!)d zH5BYEk@^{eE!7+aQPxl}SS%BT1MIOVU>NwmJA^;u3kGh;;b(aq3I*FfvXp+*vq7NF zu*dL1ase=E!XxqUvYOQL;Z=Y=6^eW`2MR}&Al$2DpMIBEa^`4hxJ@jxrQ--}+u=lJ z$BuGx=4(V5hi9K}NiS_Ilv~Nzj{ovwG0+e?IHfqa&|w~n;Q$J7wqxjV?ieh#*)ecn z1Z>;k_8ZOyG$;fz*bMl9Z99fWalK$Aa;jJ+e%Z;u4wP)i&=RC%>FYY0F%Hb3Ur}9) zzL}hnRquX-PL=z0;)E*gzI_pOh#^a66(1e_(v1ShrKJLFu44a7By!|z$0QeKP!1)i zVmo@8l({`%+m4}Sg{{Qkueb45V^$Bqwxhb=3t*O}r*yKHxfI%Vl>0qPf1;vv9%NON zc)SSQWx=!%Y{UgX(8qR^n=Wg24Hm8gfH`g(MwLaM++M}`^*Hq+oIh#Cv6`HGD7EHI zo!s_coP}Y95=5~bW|V>jNCi0CQHpG_+kS=2^#L%4PL%i_(?6S0&P8BXs_LKlQw32< zd7Lz9prwA`k}wdk9YYTbpKwi5Ri8g~n1ds_rpfFN&YLgp#+K#XxjS&W``y9W+#Oim zCpZne{BautN8IvrSsXisS;HOalU)>J7@-8~*$$4?_H-ZeaBW8f*bWmZT-^kswqxk8 zbiKu{r06m`ba3R7#+h>-DOvi?R91^JJ9JPw*(lSQ9SGJvJG74LmK})0>|k|s64{Pd z#8eoK$n3%Bwxb-L)>I~=Q2x%0LVA6I1F=ZQ>ZW(MnWl5?G2WyJ|O@I z0JAEF93mvHSa~&w2nnAM{1PSD1Dr0rDgv)@AyIg(i5xOecr~g43a?jXpwRQzM7kt) zLh%yMPK=)ruw0f^LH!}1j66H&{E!h(ys}LnWT0>n*#KoX zz)ER=f+-560m@H3MiZ0?kzn(c#2j}F@nmnAkB?CFqap^B&P_R|?grX$`P%@6(|Q9G zOq3`+P~xiv76qtfi45>B+4Y~cjPBq$|Lg>CpxF-hg|Tiabgxpxyu3Qveig$hHDFgd zEIGHrvy>{NodlLf&1&+`I#+~!W2NJD3IUT}qRw}V!XgwnK`Sf;*uh2U zJzJamAb&8NoDLTX21+1tk^fwFTpM?AZVM=!y+Q})rqIEeCv}Igbrr> z&~bSz*u`$geg9IA94-z`Ai&1zV1Q6xg8c+d;Nevz4&by+sbxygq?x4iPLb%|>KOaUx9==KW{M1&pdl zTr&Hfs3i(7Pk5Ixa$6&pLYzTpB^`Pi*TG7>5XmKb4{*AT3wnZQj6N>; z8=!EZ-2jD4oCYYIA{wA@tIz-if+5d0K!ISGCmNt|-PZ$U*cT5bOBfx>#|D^!cScZw zqwV05aC>vN25}Dp0Z=<=({7H+vI~m4IzK%Eg_fSqY|6BaDYYi36llBTK*g`eoj+-4=Hwjm2Gb zdm6j?^0~x5^IW34Vq{I`WVan7vE31ci&$(UgpigyVu~H*D6z3!@o+gxi0D9=@m+L= z7Y!^!GfJ4agB-S_a|cf*(GDJ%)g3%~bq8-ByLuT(T9gaGH&(){nb*Jm+HTp>l=^D_RL|{e^nhUIu8?=l-uz^3TMz&{73y8)=j(0 z-ieE$wG@>oi3RB`veVjA=o}(-##xFpFseQK)m)pQkNn>u?J+L9kUV;vShi#6CSJ#~ zh;H*W**%rv{&*uC6Yk9gH9*poPV;R&FVB4QMSiX$$3*6XYF!?@=Iy|H1^mqdLem8a zolrr{hR%7HILC5$Q!@@wfdVDmA9Hx4LCMeoQ%yq-TNsoK4zPPe4x1a43=T^g@C++` zLW7(_B{*nyU#gu*B|s^Z&Rjhb1;?@k9sJ!-K3IKpq2h?O zC>ar(0Zz3Mu@)TWflj^zf#Qg@=`0Z%al~3n)jH6IUU_O_fcF-Ur$6_|cQ>9cokz?)DxM^>2D^Q;S&lG4AgOU))a)6^Keb2EacHQ+`UWL~!wLpGLk9$g%}NOlcFknLGiD%6S~gAApm2rH=W}Q&pqC}g z5fqB=UlY8BgH6VEb(xX7ZKBKow`nW^PWiE_v^lB2)KywR-FS|+CXaoue%{ z+Q=Th1cBl?+Ikr%W$8dEw12J~Z7jikWeF(NRb?z%7bNRvn~W1;S@4BVy-)!$M`tT+ zgTuyBf2pmsf|cUnuqYY9kpXUl!-B(JiQp(yR(RS5N3EyH2g~VCWqG>lnf3qCVi2~VNHXQ!C^H6p2=arpk#2sccwJZ0g28I zrv!&WsG=azW#p317c;Qnwu7nPk>Z~)%HuVaMbWIMI03~jxHG_+sc=!uf@2IqD_;V2 ztaUiLp@X$kKcU?*pu{>@lnfm*z^x7zyhevYWt}TWi-IsIOVFWnmI9KsRV|XW7Sv@R z_Lpp=6*$G#vM3qW$^f_4vfwq=A_^A70HY3QmnG;BUk0^PK&`Fp8Wf|h2OkS=FPtRA zvf!^Q^@hSU1kaGYP_L}4=B6PRruE4K3!`ig6A4MP@kSIY5W6+0ndr#}!r6$eHGmCs zyP!zK)83K`?e!w0OBxyjt1Mw;*buZA;u0JzxV@^D0d6;08Q^xulmTwHKM8Pa8SCkU zWvuP($}B-0wznuYEHY6thEdEVW1z+;8D0iTp}~T9wV{_CuNmQipV6~6%Loym*ah%J z5tAVf`;{ex_&gOEJB+b%p5U2Fy9ov*gTpujp2=anLCN5-x&hDR&~H#OIN;%xhE{r= zLCN4?!83Hg0@$u^GB{Y3GdSRyj#WFs!G@moLjv4}p7nC3KsJ^#IM_(d^>{n0A@QGB~Vlz%w|&N&xG@!3KuCf|?J+UQzXFc7_iI2gzar|oFb;+2+Qy; z2Blr#W^mY`IS0Gy&fu_Na}JJ?;&LZto@Ls|hTwv|Q6 zuvG@QwUq_Wuoe7`(ohGBlA%KexYfae*XU3HP70i7XSiDD6~K@JBs*YhktiG{N4w%k zL{|Jbf?d5PQ0(-zNP*k6eM0sE_LPDvC)p;o3TN6YMa}I*h#7bKk@C+Rg7?8V% zAGj)8UQ+?VYgT22P(>LNq3B0{vRpQFt~FlL(+&8n+JsL*`iKxI=; z!BWe~1|_~0o8r|tl)~W#Ts9vfovoUYPpxo7f*Bfff_QdRW^saejXABTq;X(XHRTW{ zx6T{wqeQlB@i-`+QL^NcF(@G1ur$gR&L-MH5s<mgjyxR-AQh5{v4Sv0QuUQ7d?FfP7&gDCtxCUQui;5(+dOS?gZCJLsevIIQ{ ze!ZT{1ivv4obn$CvQkLBMt-7fk%s~+%~MdU<^~Oyn%qJz$o@8JGX#VCGEl7h_$wTc z6Sam5{Q>t`E*b7?01o$MfYVA)*$&f${8r_+Lr*C^R0c}n02}^N6p^MxeDtG|3}Nnb zqRk*%3kZcvWDxQ|3biY{S{}67XoVt=gw5;!h9 zg!nx|d`>ez6QLx`Y$NMmf?^$6gHkB-zd#WwRK3<-yfg4|H4u>!_Tt3(=ZHtbUIhPB z9yq-*FAv;$19k!y<*%_5xy*0QrC)7HE(PoyO7Qu2jL)$E$P|oWvR=exzH*r3j)4ol zADt)nhApsA6X1nf0xN0^AcEsqmdH+4i-v&$TUkCeij&LVRSt@l zf%30>6q@(32qj@J3Izvd`kWk2$m2lpTbqI3)(rgiX5iasJkSR{tOGCGNwdafR2Tai z8%qfe1c!ARfWtZsz+s&R;0Nbfhq7a6HlV(3GwKMlhSVE?pD5H(AQNg2H~ki{QZm62 zW(|Zv%-BJgAxs8!JH#_nm0jykGwLSR`s8r3vrTE8nqfkebzn&;G-%C4%W#90tR4v~ z6^^b@7K_^J^~zAsCT0TM7__&#`W4(C0#bZ))1pAcvIG>aj`1x=8Q@$g;YP3phtkre zB~Zt`w|S}|Ru|I*fTpckUCN%N|=W-)TTg~p&Ni>hHe0k89D=;>f-x88mfz#&Z6`%=wbOBI9p(w zk?}MZb(kaIR-l?>Lm%J^)$G%`2_1Mj`W}#%BC3SyI^3U-G>?>YMwD;op?p$M3MGXt znbiZ_$`ZJA-qCs?;)8hAE@=fMdmZBM%~Af5kHUHBKM_h|8lw}RjleN~qic>-qlf(= zF-*udf7IHGe)(R+CxP?{@yn2k{0}EW>G?!_6$%D7+7X!G;N55g(mwK@2uSjP>h}4E zS{@c@84(h|tkTpHLZx%dkNfZ22nZ1pD>q(yIznwm@PyZ?Hj*l~|UVx5EM{0fI4l*JGB`3I$>XCsqZB$$z6)gn=KWL;qvka}1O zhRp!yst`|PWjq~hpU8qQGFDQQAA7qDfeMiu1%|a(nzC$!1-)H*C2VB!lpcb` zwkLRcJSU+1#dvETms3GKI@RLTK96Ni7n?pTF%*PKnT@HsE2Oc(3Kb zu(>zVCc`@jn}!ZW3|Q~faA9`2H5vk5d72<(N&HSNQEuvrq6(HVfZGN{xuq*gS1z0& zZjMkA69m2T%?LcpE4M{RH47WAe=+CU#FUtGnUp{gg|U?o>m6p^Lf}KL9w?nd46nLp z4>5Y>$C3K<2Lv|jx?dXM9*a;C`gq~U=ivw`!RJ>IpKK#=kUb+(Tcn!sCkpntcCnU$ zg3CsBKJJIHLJ1=#zHDSs60ywXIW8MzfYZFVY-GV+6# zxWWVh7{Q4}xxK=4zY0v03_pA~A7!3~DOQm)j9`gXg?(EDZ(3Mg60vLFw7>)bm8pv| zmmZYh4?jj|GX$dD0Av^d;hvf8tpTVom0G3sSfT0|!!Ag``ZR{gu)@m?^d{*NH z6EK4DNSOss7#TAP6YJA}m(oM5w;N49(nOQOQ5X7RVf*%9t@<1{8qY|Yq ziS)owf!_f_@S0GeKv;d->x&722#$+|mO}!Z0v#scnSn?Y{-kAw4mNhTGioPdHy*rJ zu!J5MycBG19PQtVyrQb94T3InqAPYbh7%~A%P5R?JC$Z3 z;iVw!&@3cyLIeYtHR)0&in}5+K)kI-{f(5%Ai1(3@*^c4l#T2 zq-Ka&6uYUdL7^^%2v$veG(zwT#=b?d2qrs~b{K;~xRF{P|^Vf)0D5dW=;bV*S>c08+$O$p0?|V>YJw}QHWyQE&m)W$ zY@mqp6XoB7!$lEFMzR1(q13Ufx1kSiWeI|H&S5~ZuB=6(k+G?@Cg?BONGouPH?9110a8*SN+CWL{PPzER?$m-Oc;JO64kxVf?K-k1Z4(8%I%}~E6kH*;g4Lk# zs_MUW3_%Cf#GvIUd@ce{WJavKs0Xe=+jLzc6#cOeB#}a);14OI=eR=%M{H zvagMh5`q!@l00x)>Z%C5CQyj-wdN>SH%GZLABE%Ong}H^PWF;sx0K*mEIApb*v{B_K7nFy zC}7zMuq@6+mnc3FaFICoty z=Nf?Dm=hB`K6790TypZF34 z!iKESPCWNvJuM$i2`D~S+U-)t-ra&X++AS~gea_~Op!=b{U-up^+*iac;{~KE7z)C zs02u=2n`BWi^M>|Q^FasWgjxdbJUqAGy$%6!P^iC)ti8Z2zJBuu6Z~w1?lvyawJMk zIxPS%W|Xy%f{=EzzDFtOes;@Gj%BPk&dHvqpe51igW z9=00P*r^c8D9B+px@wgsAGpvibP{}GuiIr#1`1xdurAC%fnWfG7N{90696ZLC^Z|} z!U48g<0BOPsAt27>>S2RM@S$B?R*JHxRq3BCvNCl17z`OM|?6&fOU}#${G|-OL&pQ zMp_~%5&X7h;CPWFgF3?zQ-lStk-reiC`fj8TCFv0;ZQu1ow~D;RtHB@m7W}e-+izY zdIl4P)u@&e&4A#yS--{%oc0Pqu@`(3(;n`lQ8a9)8qZ-5s9rQejcC*cC^q=R9OEjFw12)R=0B!Wwh)0c$IFN9&Fhh$6qk&{Sk)?@? zZ{bDt6TT?aBp(9_q=em$ z5&u{et5GJ3)h7exPik};JAv})NU)3%4_){g*$WYu#A=uW;Lj0wzkc?IFvzeuC&~}x zoV8Yh1D=U3lo~GkEF*2IUh7B><(n0mNC|rp{FXd$YH_cC+c2pa`9#6u$>x?Cl!C&D zq3jR$)GBU~>`xHYB2hRj3GAM(MmUE3-OyhO=%XeKY<~x<5IBH!q7X5Ji+vggmmI9s z2rS)F0*bw`2wm)wtwxu^QSrYj`YLHtFdWMgxcIdfcXW7K)y9CPP{j*K7TgAY0=!Us zEIj+Aoh1@|g0B@rAyUFx_BJKHR?MR8F_^T~;Pa;UQc2QX`wa zpi^0bV4dq>%q}*uW+B1U;{_4GtVvGPXpXS4?yNCFp~Rq(jb-pEOQg~9JR?kOlqHbx zHXko({46qdBE|mLtTAwxCEM7HHt26nkcc+>=d}S62<{Ffr3lUi~(q4hjWcKM0rLi+vHS(QV1vt3;;ELx>OCF$%mq0v6UHXM8O(hoS;#(8f}Pzn*o^-Kxg7+fEBF9Gld!kbIk-J7z8X! zWHZahidMsi>sh?YUPU3Nz=z7?-hqu}&!GZtUl2izS(FSD<7F2+GBZ%X#l~0$3KrT8 z1;ee_hCvA~!w}5g3(L?2f;H3y7R%&PsDts8fK3YaK2UV#t`2d`&nf$t-*=^`N(y@3&# z>A*t8g(lWcwVKS+v$&r-(`Zt2KbN8*y;`p)G>Oxz-I8Y53l~%~xKJqE4Y8xXh67O$ zikT+1)|%DZT6n~oTrd*tvk5hVF@iDOSzQtaE<_L%Z(C7*nADDq1P6jYA~I(T)@Zh=K%>X;dyQ7e{nRVUT#E(zHRSqs)|si8C_| z9q(wjT8GPcwE?0`^=#mRF99sHbBe%Z4`CVrOpqF=O@_@@7uXCGdx_~D6|n~wpzwk@ zo|v-X0*++~1|T?|m}&ryC#EvMX(c={WkWq-CCFc>ka%Ls1|w82OOU^FnT+dd8K$+D z;t=!*KF~)^h-Og`^qKP&4S)!4I4dGwHRJ-pGN(B!Si=GQA(%-D4yYWu=rb2$?JFlA z?utUh;7q)7QaCF9rjoUoQqZ#jrE^z}?@(xrgmIsdDmpn~Qndr1Ry-OTdj^Y?5o_2a z+xwB3DE%THL_*C#!PUEr@rgmeG+qeGGKPzHX2qrUQYa>z9O~2`F3}n2ThxS6?III%lbv5{Q09T86kJZ&QI6!2xSU`w7UKOdyR+&Colt@<@%v#G zrH8kF6>&&_)3|s)%u09uOB}Jhu=gQG8kk!_)Kz<5ii1#TJJ&{nF z;c=f(%Urip3tYjp;gJYJa=@}B^Sg6mZG>nj!l8Z|YpZba9)|<54r1 zejTA?2=;t)6fD6qeM0r05)?3^E(yVqdWZrpNH;xDkQf+S*x18LL`lRJ!I5nnfFs*x zfKz@vU}E=98EZm3U}90AM_IxM_XCQ2kkvDSF}{FcHL2xOs06sRVbf17lAS-SMv3`@ zx*+G;O=^Fsy|jV>;+$(ydiWeUHv^nw5INU^!)l0QUxGmY-JEN;Keb+KL z-IvH@Sh&%+*w)%`?BNS+Ya4)LTblt+`LW%!DWXPxq9FY2o~2(nmL(WB4nK?1LuG_t z2DlAB3tkg`g$jy|hfQ*|zP3TwFNgp}^`l!Ft^~y`c*dMwC_ZA=ULdIziN3())`@~h zkrM910-AhQQo=;hk19pb!jBD_xDY5iVSCkSfPjR=M)k2jspdjuQ;u+If+c~?w>6p& zWr2hV(hN1(iNxJ82xVVM#D)VGi;0rK1tuP7hJxo_?0PG~CB8hCc|notzY9wA7R+*a zbA(bj0{jy!W`BO*EIDh9OrLwCfPyVep@cAX+UY=<>e+zO8DYPX(;0kzY9b7Y*P1yY z8e&ioa-k+7E8fLhZzO~w2Mj7Z zq16m3j`R~nkc^Q|aBN=UbS)ILgz%t17=LTZ$qbc=0v)VCH98c^7MHKAP~cXUAe4_; z@_}ft7pMlJ{awJVd21XjvmlmdF5wp20L~!!Zj9 zYxwmA5x}fUPYwxA_zn?kw^~ki#9Q$ap>Mx>09QUUP~t0}jTf7^yp$bpg_;NZtn3x4 zMY2uUWA59Ui0A`h@mdHmO*jS{G7Z4&O%v~rITwS$s4YaaEJUAGz-nK(KF&Gfp z6bmUfBkvO&T1*f*dT2p#P|wKulpiT$lA)fE-(K;=m0LS9Gf;4mwBdDCtc+fhCm4qp zt`tE3JZ4ccbcs{nibj`O zGZzAgf~nSC!LLQK!ey8s7S1lIYxxvTH1WM8z73=eU{*aPhbV9gJ%b-UXq?HgjkeQ9 zzY_C@z$xBFTNEV1vIG=fXuvi)1DqztRU8YBkbzdd1nTxG4wiB;3K5L8m@6Bm)`s&5 zHqhB|W%Kc5L8PxUlIvZnAyMY*=Q-{e>}0=c;(HMaP|Fffd^#%h%!P84zzU*eAzjo2 ziGgx$gw!LhF3AI@iLZ*lGfe!o<|tP;N4YW|g=6HJ2qlqL_cCeqvOJXd=}_x=&xO1~ zxWrF~S`Cg;t-axuSNLlbifDrsE&A>0s17|#47lCKQ)7P7$V4=2_pkdUZ zW^g%Kz#3j$dWR0`9$f4-oXHVNP5Pn5fPzd;E*U6Le{F-3p+2^@2n=$`K*845##IIi zwze5uU@?XxZhzVhKq7i+t$T!nwN^qX>yve%vlOacV_=RzysENSn(RsZj`e4EU8dE_#A2WBe*2mc)O4LmUhisD_kMKC_u7C$U=g- z?KrGO;#`Qk*mfj(bJOU-N7()m;`lFX1@{D$tx}0mw{6L8!819!NQlKoWo{~eL-nn;&rQTo=fLN9qq>TiMT(XcL zo^@d@5>4;{g~9431@qOv^m=j6m3% zpoulTz3h%1&^m%fJ{c&uhHl@Nt3hG77lLA!Yu>apaL@)1R!|oRwr(@QurtlPxX-+c zZ>_e2D&a&51r7~W$L#|FH7)hXZpt`EIWP*C5PbNRNCOcs;A^o!>RGc5}Y~ngh23-!7*pJ0iF&0UWmj z3+=~m8CecWNzVq9&isTgeXLFa^c7 zYri1~HmTLjfJDLfkY}LS%WXI1q1f3R8)9p*LP^L$O0byS5aV)^9mI*)jV~wJ%vEb> zE&*_Rdo|%j?uVz62Z}6@TBLb;7K!K` zhEq)D>ki&ffVpml)Bb`Bl0cGc^gn{D$W#@L4Q3#=gxbg`# z@X^SlCJ8=|n8c0iCCdm!qSW%C3Hk*}CdGhMNV_aSxcGM(EJ}^l$OZW^10~Ln87MYC zzDhNw0Wt)`y(>Ea5-3(MY>@2QD}e&R3biDjOKj{J>_#&A(9HNkJv%aML?g-sL9sbz zzKT4@9fSYvg8=wS0E;3YO$jJIo|%}oQYaiy6YkSf7{~Qf3z8O2-CnaP_+U0d%6e%bYDW`(5nECsn>u*_6*A~BBw{f zBqEaF>o)_R+6)}RSXFxn18}Qq0-T2Yu38u}q4tQGJM+Nb@|sbtZ9g}vHFG;@yv-3F zqwaa9P*`QPQQ)K6{NPv!08aRx*?4<<@#y<_xQt;6l-9u!;k< zU6cB5705~cgjH?wtZLsR?Xy;ywBzJ1RA*`6JpeJJ!0ZgXx452G>tF_+?U>|)qF?ZU z6KrZbyhp7`IIml%ap#L^+Iu>U&r+5kH?+R+9n=4m{B`Fn&OmESd$sgl-RA+ZEySO4A|OfzozyWCf{6)?DY`C^x6`y42QcP+`*c#(!89 zJC6>s9WvPGOw~bUb-;xOmT_l^{*x!QHC%AP=k;>VN%E+iat7E|LmCzvXtn#k6c$Ye z+=o^Mfl=+g1sFCE-GXNmSghSQ|78(ayxsSeuqhdi3QM&6Zg^P)mTdRk^|A;o)$aRY z*oqBDg}!#*rr~1oa0rZU_s!@=VAhO3YfwsV+fbfja3S;=?L!FpdBXNgo^hIk+Go>%h-)IyAO;C zVj*DH6oAeF0%9mQVt|}z4MXrUzS%PrMpy>{86ZD@Sp;N&936JhM&N7-WPtqaWf73* zni4i+!;xUwcHdSni@+(CwZNoGJ8)Q8iv;aMOt zCBd@^NHnYyz7ldc1SHpd>SYlSQ?5DQn35{Y>bpyxb#udVR~-R3%s5jAR!NZXE~c|zJzvJ5L~c}lqE(V>j(7#btW zI7CZ-qM&ps2Mo5yE+fI=3M_3YO`7D{;Vv}x7C~^^F>bqHJN{f^fU_M#bE%-kPKdR` zpe_q>;~1d;l0zp7g)#jfARSA6f}HPKltFbJKWWlHYthgT<~RBcEp+`>P|F}9U2NKp z)iH!-%;I=+>s;<%P7~MqW$gus4Jnu_xl6E6j;!s#j&rIbHd6;eJuwUAh}n)c?w>n% zD@SZim9w6hg>uAfM-(bs3_>rI8OJK|&HU$iQz!fQw~K2>&UU!1_0V+)O^CVWl-uQs zX1`E)&%4LV*ZiL|z1U>@1U12!4Rrl}lANd8-B7h1L#v9B9UshuD8X@i`p>RI7fc(7 zXK>y{&@&>2!~CxL%P~gVGEhw1^<(}VYLn-2F{WkE_8V-A=~s0YYjT;rXMR~W9e&1| zC3Kmy$_0>JmJN(j@)mT)MQXeDtgxUP814OHy_ybF3)L$ab{`a*xZ>6Nokj#?nCt=& zcBHw3=h#tt&e|Ve5u#HTUrz`bveIGcJBF50ch_1Pv!7Opoou+9^fqA*c4Hhh+$_TQ z4FcGXp_`a`EaDpHoW0sslU9z2wy2s-HBy89CJ(A@y64Ei~t8=JBEHJyu-kA z6rVLLJkuu~OC!DQ82Trrw{$l<=WLXlrz-9FQ`=#jJ0UEINp0`;+l|}hii(rw808Ix zC(XV)HuFsB?ldzlHg=eq9i3(-qGNI;s7t}Yntaxb=Mh9wWEi{{n$D~UFGv%3*^Y7B z%DDE%yT{=hINLF_yudkoSnLUk;tzB78|3Hq(8`3jR2+dD1gOK!*T)?-lMy50MF6?!JO=% zE8DsqxL1HX0?u{}Eho|AbeOg{MDyd(djzhO%}ePK+u?lc5G(rwOTVN<2RL~_i5+E> zSo#&UqQ$$VFiE04?42~)Z_xBozk0GzP8r)FZkj!P>=jC=%%z%MC2fgMk90;uvhqU{ zuS5k;JSU^sk=@Q1*L93FX;+s57BdQ!rEod&zo6o*8Qa=qzlX*vhNN842Hg1#<-zSt|JeTk+k}i#Y=lv*OAsU)d7Qv9@1K< zZVtU?8#jRX^OGUj*p9Jpq07Ty!$T(l7Nd_HZm>B<14jM!&`M0omavoXR>AHVj<>}f zx0?<>elVgs<{8`JhOi@DMMU0ZG&&I55v6ge>G_ke_RK%@H%N=3p#a27`riKC&GS%L?F}ZMS0SD6>$GaHV5S z6Ag~AU7Du}TPR1^c1#fSnX=0uKR5<<4oWkyP>zA^z|^%>IdysR*cw*pr6;H|VLGu^ zP$3Zrj-l;X9YI}g$o&l;ENMFii0yD|XGdonlR-Dz&y}A})$JZq=`unZF*p>Gu)4&p zIGy+ZAA8>cCTUfr-K1{vfIy8nJ=ind*v$|{WiUWDp)hreAnI>q3J?p!imtALqGMWJ z6DsC73>i^WL_t7MRwNlQzzVJbT|iw~1;ei4KkvEsz4yJ}S5;lz1^fKZkN26W>N?*^ z_ndRjjo*g-`t_Dvu)jbfzB1B?y1&cQ>+i}pVr~VgS_hJaWlm*Z8I6B6?J+_jDcF; z{4ERGBi+Zi@e0L5;ceFCj2+KT`5o~R7J63js7V)%^2va}PCh4wrhI)Z$ZHu>n9t>n z8|Sfgwn*aEz31dvueo*_mYnwfbJZ%_-OR&-EsC*!r9EnUuQzLEPQ`NF6>x7ZQSC89 z%idD~=j#7Z0^1oMWPqY$R6zTu43Sq!BM!s9yfAA9`vZ;ZnEsFHDJ@w+G!eI!~#lBs|^L{LqFvUt)P z1J;EopnXG9cId9@nhp+7RRc>59+*TOMFI0n99V}2`-xz|gN-E$s<-dPZna~@H||s1 zk5kN970~_(ji{_@6%G~H&o~ubkOJC2%Qgu&oVaGrN+kwX7-1B)P(V56DbQ46W$L3G zkSE_5vtW$Ew3e&U;@T--fEW+mpt`-U2-Uc%*?qx*mX%;L&Pu4H+%&^_F4QK4M-Af) z(d2QZfKEFG*wevYVQOg#2wOyB%-p8SX2xT}p_zq9(UBueiZ*aEKCHagnuD(tIn`U5z-`#eFHwMe2nf;fG6^}xpH*C3;P~n#*0Q-tcxgs zt@P>xgDdc;V5G6s`V_EZh?kS1GDwn)mp$>r3ZB~H@uC2PG-#C9=sGjE?0)DqN5<|4 z4dH+bs(=dx5VXf0MKMNGK)2lw3JEOkFs7X0x>yBN(iH9~ONK(4BA`rD1v@oomL=d_EeLIk~k@#{T;R!HF8a{?jf^R zHDnYJ6nIos0R^;gr2<+(S3vdb+E8OAz$sy9f=b5o(%Wo!KGFmtflSCt)+m!H#mz*D;}KxpES6iTYcDc+QnggLOl$$?ZrVn9@~TB z*0|GJzxOn^qrb8OYRsJC2@y=wFcwS6O94J1bn5>W>NuOTJ{^KoS_sweM)`Q?;(_>E z0ZxObHWsx|p+0On0hg^L9tx=ONQW-AcX=lYaSeCsNXL13FPv4b!|{URGzzHkU2#N2 zciL^Dy^{V4sL{sc`|KI7^AI-`j+k*?Kd9PM0X1F|VW#uKsLc;7Nr%lD4JeLB6wCdr zfEsJpX4JHSzA0c7P#vXnKov*nr|Kx3Ojd?U*FVF|+gDj}(HB_5q#lno;CN*07>jV% z40ru=w&A)fAO&qg#fU#u0;mMkQ918PTnUJ%e+(xN!30k#D7X?(=UR+DKubVE&9&V; zvK>3xYMa5dZw1Vul-nj_bK9c=rp+82RuFDBaa^Ej4{@*>L&}@(#6~gO;B6xuOnL|% z6GI=^Zfu+v!;fSZ1=Mm=A_1F%gn-T@`^Hw1NEFcioSE&oO@_X^i!lYFs^Ho1^}M2v zz|e8%y?TY-T#gEzrB@gd%c17QdWCVd-0U!PonE2kT_sE?IB*S#6j_lFM^S+1W`}A; zQ|Q!O5m;VhD$rX_tbn{it%9PTe`J*OV*9V`RdzQh3a+?Kf*4FwP}}4T1%$C~ryCkv!JLl6e(S&RwY4xS@9_`_F_*U{v2cX`xDAJ%vzswD8AF;brf%IeLN%dJKGSfmt>Vi`&{o;@y{&G+DNIx78=<6=q;p3HlUa0RX+`80rxRXly$`EgWtR z2)TC|%wz=$hMxNpc&jjp%mxGL?QPHbp5l5Jq;qK1EN-Vf=YPv8a9_LL>` zrC|&h1nAWX!(dsqFB-8G&n72D#n9HRZ^rD~zqrc_E-2k)@G9)eGI~05i7v2p30Lfr zdrCMdDh63@j~W0EL4TB81ja&W9=QmbM=XNo;gP0T{7!r63(-NE8ofyK>a}&{VloFj*DDWyeMYtV2EhYfEMHsqE6vr`o0_yyYr}D>BqNs4-+-W(or=b9*=yEgjiW-ON&CEwB2cl;c2+1lG z4D9B*jtoSF9cn7TV<`AWCElqj5IwJc0u2uKdR}Ya1aL9t_yZdc_KSbDD`qywo*3TS z-Gg4Q=#vy6-QXQYR}5+tP+7>J3>S)gNkHzAl)9#P=-W;d-cRBngTM~`vSAfO#wTOz0%AA)527G zWpp{05VeXiJ>fne6lmDSjYdwcYS#EQMy`LTVS`Yq=dVeP_3Z16QBZtm2HzZ2X&m+FxR9sKR46n873V<290QHf$fxJRGge3ceyD zHnCHRN!#Bl%pIisWc!{j>fr3#bxrRf$YjE8PERhF!IRD@VOb_I!jx(=( zn4!Qn7-te)26;w7+!T7fmDf}6i*ewN zSek*yrhxZmaNgejB6}%i+ZcI1W^ZtpBDdbe3gOCSrqky3jmTO0%rIkDCWt)Xy)qKv zA*ZgY0vtm*wO&z`!3gdp;{{b23P>`@srCM<44R{tjJH;0C?Lror`9=D86$nz>Z4T| z3P>`@sdZ6R1{Z&N)#JRX3R09tfTtanExxnNmP` z-!BRMp#gfYuQU3Fv4y%|?W!rDy*VT5KVp^8N+*GUC7n*N+Tpg@Rnn94_h$0Li% z*VAU~5oc~sy%#C0cdr9GEBZtW#qt)b0Ne*3_LcPbVRvSV<;)bYG6?7A6K42V_0-~> zd4SK7E(mZStG#KJRPVPE% zEwZRe$GSbFCbI~7&=dgJWA8=K*eI@IkAiJSIeRUFX3t2|*&g%D+#|`fKSDtZ**`WD zm^$8La74Te8++rzE(8j2yp<{-@1!WJn1tk3fkyK~kxh-oIQVudyuTPjTGp@}46|2~ z!7veBj8fJItL!&rFieJCag2S5io$p^2cD9pv0em#J?*b4~98PavBVVNfXAM zm@mV5@K+o2@5P>WtJ7gP%hLR)I#h)=Ms}ID#9;tIA1-NA#YM3eH z6c8BS0xMVnDYU01$10ci$7NuzvKtT z>HA~!gPZnt+<%po#@t{WajR|^{^LnZ&M_?htPr`rW?1v^at}j%yx0E2k_fH1h5DcN zCkjAeyst=@3xH6uM$d-7Jyic-mry|LcnWA=YIrs3M*9K-hlOj!o-9_IZ9VzQyQi?^ z?CZ{9J$Yy*&wBcK}>Y?9l&q1=RVY<-+08|JL{uC-LtJ$o(&U=``qn$u+P0@J^4s z?o(ZQdfY*#8KMJAPehlcr!l((>>KD=1wy(ou*cC3#=zFD z24i54TON#oJ;Agi1F<5yzS4@`s11s5Ea1IKtw{82MMAO_3kLQy*p3Y1!v*d}@LK^* z^9k`soUMym}?XO%xQ393>XWc*=-Rt zyDoxe)gowiAx&@*mhn*B$5`|8o_|F&9?Twhj0(gsu6ggG$2HS_F8ZVQL$~A8>rao!a1(~`EX!_+7uW&8 zc|az_+v~vI11el(fej#-OnxqF|h8Z zBZGL$;jzesRuBzS!(Tasp#Wu>t8(3{UF$a=YhB7M3HW-6y-6*eb4eUwp zg>e?l!20IF7}%>224i5I`(O-gYiuwEwl&s~!Cdp=7+kXPgdV3ydK%g7aWSHh%ZMCu zrslEEX>j&2Mjf1wSI3}0R($UZUIv2#5MK}jG$ukpBZz27Z*2QzVr07Pl^97`Ph8A# zk{HSG-b#!${$2B6EmQVLjO3bI-fq#-x$RdI)AnUU~ggQs6m{8 z=tg^p^Y587wvBe@efGOJ=fLb|C{H|sW01jkauz$Da`Eq{yvT#W;75V|Sdp zG`g=#CR{DnZFLVe1=KjTURagEU7cPsbX(nJC?Lror`Fr5GPn!WONMT%y9@;+8RXRZ zSXBnwLN6J*t?n`ukYtck>yuR(dz#mfN_xrAZFQHSfFy&Q@_yAe^4br1KFtwP2V?|$ z^%u{s+AlAoE4YvR{Fpl&G4&!0L>G+VH36#w{ifljPF&gEAgEkIB_N^>Wz-$2s02h* zxdX9LMI|7j-WfKPaaWD~%L*vK&8T+_d-bs6zO9ldK==ChpRxCt4nNUQkx7-YFW!Fb z(0Bz#pmx3>ev@8d6_>-nztk(V({i}#FM5T>cEK3dpwYs{VQpORMD|;H72q_uHJN>^ z1GJ8A1-%p5c_^U9Bi@>P&UBAklPRy)t;xh$$gRnwSyv#9ToHYWwd@SwTZyxC zy;kRNzkutX`5j%G*eGFcxR~f!5X$`-^3L)%cAreglg?ZQ-D_^4~e!gE?(!(L!v*^Wv3y?$n@5_oc5WVj znzwl{zm_uwvX%8)BDP*%b;T~UiJZzMgM~E>a%#P_Duc`O>h7uxZ3%8>1tbrWQ|pwf z3@+#QlA$fZWhfxYAg9(DRT&TJ!&cf7T!sRY4039Ht}0{aK4fT1a2X0nGRUc)xJ07N zaS6ZoNZbECZ(MFm21VK?TZu~|wq9Me!$b!=kO97-u})gu4hl$iAg9)gsxrp=kfCAd zG8B+xkW=d&RT(S$kfCAdG8B+xkW*`2RmO@wWM~+=3@iUKmH?SxaZLaxo$stbe=kZYrS zlOWb1aMEdL_jzfdt;$-!yp%lpd1MxGd(BIUvygcyX%;gtCG9vIYtIRp@vp_rOUWxf zGE1kS-T)Nfj>F;riNc_1xkSfQo}k7(zg>WA1yMLTx8vBq*z5(p7t82_EMAw6ebn~- z{Y>Ic_MR&4;`6B*c=!i*fWzZdR>iuLOa5M&|1AHC6!ScW^?D;pqKbR`Sm|DyFQi5^WeR zIzRUux|4ToWH<4ZDA+C`Q{QZH&X`W4pb8#$M@mpdi-VFqc&1c-PFZZzUPj3KmL+BQ!S5p-TDz!`{I<$?KgsgJPdrlocB*l;T{JI=D^hxK)aaB%> zfr0c9$9;$uQqG=f-W++meI!Q$6DAf%5>z-c0p~_8Bt5)FxHyua$&m2$7=!qhSi!e1 zq;K_1{E8<5$;tq}^@_rADVF^0F6%9Uy2T241HDa#ev6OT@P`k2vcefE?lZeOH2@A( zp^ol|1<Q@7x!ed5& z3g_*Wp~f&IEx-Wj&}pJ!pOOq+03g@=R55gc0$mFLXt2;$I;TMCNQ2YhplNM`oPh!h zVtwq1_Khp~g}0oZI|>#?2q+guNa&G!0oYkFhQ*s$-4wbd<=6_SNy%=TzgoP-yl~r( z)`;8Y=kWkjxilwZFuAP&zy&)lg695cHIv0QzxPYWO)Vu|X|X4yqj}k1(aOz*b??>`)=UWDkuyj73oONLVt@A zT&Jpbv4&Ho2?}uFB$nnx{43t_^y~N&6$^FJ2Q9#`5TID2?>8G&%=1k(&;MA(YgF}$ zvr)&2D~nulB87^NnJOr$;!5Nh`>WA3KT9q;CXhG{U8GoUQ3V7msQpNGRb+k(J*xm0 zzfX*Z-r^O@#Veq@_|=hl60ZOke|1z4_Ho7v=+2l}iLnBl@xBu0&R7B6851ipRzR2y zY+@=yUBsV0ATwOOAv({abLQE zs2d0y`IV!1Noeu5=(*-4W)_sjTsF5*T{8apzRQ& zM<|nPj-$P!VR9T*L-`@c!3FqlE+M*v@;)^V)nmW!P!2@TDiD%YC>YqW-;NAKh1E3` zP*D_o<9zR>ssho&sPRTaK{G&jcs&)+`SCGeU}e*pm>ID=!(nAUSHo`1b%6nuairYS z;AmVB-o`uoLe@XVexiUBVF_v-BzTKZKzB0j+?`ATvdozDPY*y;-CP5$rciPaUM^6Q zpUb>ECJ@x8F|z9mW0kOwN$Nbb-XdgxpTj9uK;ujl5ItZE59PZPy*VB#Ms>v%knd>x zt&O8R`K0B?AQ;aDVu$GD3h*ZrEz;WE$<&oK-v+G^Jd70AN&z0GHC>(4vpoEQ83U)E z!m3tMz$>8r-xh>5{((7xLUU82T)^wY$Qv%F0h1eR9`#8DK`Uc#Zg3iA1p ze^Sd=a;N;O*flOmD`jrG+XX+M!O^B(M+M{-ct^bj zwl<2X!pSheI6SJC2N+vMh@)VDK|ndcAfdN$J$1CiNQN+;K&{{nucHELoMnK)A#gds zFfMMym>2OlOd>in3{42=Yk)z9u58btvGZ4qI{&3nI~gn2_!B3w>k8;Gz#!M$yFV<7 z&b@n#|IjzvNO#K@846s20S3`S-;Bx^saOH+NeiF&R=Kwuc@c05$h-R5g}6xN7eZH2 zJT4UAG|D2<~vl7z#fXYuV}K;L`pIW>%6k z1=KkrR>4uRM)x*RQ6C(kM*+J!HT6-fdD^v!xewVh|e79mX0ZMS%jsTNsvY6;Of>dOh@`jk!bXRz{kF8T0{aZc_#1 zIxur&BNQ_}nS=VjKby!@YHuYwnlfGAl;0rEbUouG!|DIhfP z6(Ss}x#B`LdaBL%fcSY_O+Z+sxCEl(Jk8;EB5&QQt%o-x6GI*7iT0&8J5%4 ze5*p-qnc!&R3M;ty@@6DKG|(3)>c4%$BYUck0h0^<7VO$(pE~vEaRp!`cYa@WrUZ< z>?-EBpq;(ygcuDF%yyq@OF-}15=&}}j+On*t=H ze{Z%bl7a%-chP)Gos?s>LOB0Vm6HN`B*&@fyR?Rb}1eF|e=S_NDtfS}WURh<-&A9%b_)+Q$uSo38fBbr@XwVVCrg5#A@K>KTE zo6x3p+|3c;0Z~?J5(;o;S}6ypN|phyJ|I{_2?vp<%7;Dy>$@naAt)d}ie9^%81|O6 z-9iYkB6<|iJK>S6lJMBsxJ3}q1V}1C8%IfcE1*nxq;__yT+koM0VQ!#z&(-h$XpWM z4_%_jR6v=?NbTCIYT5cl+d>5i=xu#siS^%B)k^{G2e5^!w$kubw5xkbl^q&BO0qQ? zJ_-P#LP&fl2}J=pGpk}TAk&l1@9deG+1;h+A|OOp&SQu?UQ5+s$T|SkDFCPr0iilC zsa8h;?Q57@YqHdqffE`gdAoE4cuRGts*nIQXy9~6RVM}Hn|M@H=cJwpoZy8*Ck5nq zQBAW71tC-*AgiG4=;fGpuo8)q;zR+y>ghUb)e?Y$f-a~QA*r4O% zI9GI!C@H2CFi2-V9{6_nghW*h3r*4f2Sjvuv%CEj%k8fKx4%{*8LtR2KnbAn3^eqM zs6n!a0tSgiSM+NTVFi*?EK-eoF%}^XHHybIb<(*duEjF?0c&ehSO?h!4cCgUgD`Ho z1g7O~Q3{x1FXQ(m2GZk_(jHUv66nQiE?WDtB~74Rpow?F6v`_s|;W?)O9 zHxI*I16xbI{dI#>!5)rx{Xh)1X^d>!i9uY9#ljPe?QZxlYcbxmqp$qRYP-YJ z$_>+vk#osNse(5E0oA;Ger9|=tb9ndeaMl=7!wpI#fjL5@xuzv2D^R=n3`)|h6u4@ z4SbPICg+;BcZk|tH?Z$fw`0A0e_EFFNYVUK(r)(U7EFQX4r=#bceMLOJH7Fjhh6lI z>D9kF41a!mdU7(dS7NQaw-lUoqD}LGEJU2hGJir^px zDVwjgA1Jnnx8WP?bW?}aF#K}s|GNL+GfE7*}vD;H0%e&zO`dh}0D{MXV7 zB<^ShYS!5bUZ>)vi$N#UiEQ(+Fj#~9dRc>%VvWESy$Bg}&v$cgF$N~eI~}6;&A>XH z;eQ^4fhA11Zt)sa6Xt@eP)%10W?*j<`05)wR3YZOJz-oc9&tFd=+1l<#8|;sY#mRV zi7~De`LGb8{3HJ|G?d>i4|;H&7|L&#C(I3sIU)hF5`yJ6f*nr*dG$`I#{)(6^9Y{l z+(%fpKW~-HFL>`N$wmJ)+5z>*?{?q8eubJj(!+#%@wT1Cz1w|c#LVc7Rc#;WVw;-* z;1~+X#|#{Ic@xeL@X0FRyei;RRlp~zfb*+>v#Nk|s(`brfYYjg zbE|+es(>@AfX`L|pAkTC=p(BRRY3dabZD)L>UVLjQYYtfmD~YvZUKOE2?#o2CwADN zXf;lw0N>+X0BZ(PU_H4pc!u!u+@*k;tguLofJI5_C?K?rGP(<7M0Wvz0SW*NKtMJC zAxS9$x@~gv`a&v7nov>C1O`eKRe;WnVE_z?5~2cPwg77{u-;)}LRo&mb?|UGhYOBZ zS^@3vGZIx)XAi0{TTnRu0NM7Z#JugVQZU_}juB#~U8Y_xJrS8%bS?B4J|7hG8zHSi(wExvCGWJ@#^~|jRJQRF4+Lzh2&}*p@H6E+>ywd1# z%PtmP@E{uf*bB8D3aY5q&PD+hBXF61++)lKPz>kz0AN%$6jg*t@u7Hh5{9o)>_S;Y&FAgJwCQ)oV4UE9!^pN z;OOOy@j{CU2Ckvh0H8U5G|k=#OE z#tLY^i=MgJ2=5osf*aPFFy8&{!fF8Jw8Vwr1J=YD?s5BuP`PW80$ef0sS(uxb^a42 z|9_VXB>u!n?79N-N$?#bU#G!clhnGtYCC4AEX_a0aEddAGL@Ltb2!< z6gK^l*%ZYz8ftz35GxZKTCjd2{@{ux*4Kdr>-*%=t8z6!RseN|MRo~yiYsOFBicTc zTIB$zlyiAiPW+X@1*txUJk3-U$HAVv|<^ zi8L%>{w}ddQj0-4NC`*^lN73<0*RC({-iJg<3Yh&r}-Tg2Y;VQi=G@(2^bHkznJEC zt**uR45S34y3$NkJSmLMys$6LoD@bAEEFc7x56iwkd2g70p5l#kVe&vRTw&MtD(y+wRjLI#l+Bt z1Veptp4ebp1=|(Zbz;LY1+zg+Y_z9>8QT*Z@2_CS?ZhT?3T8}B3_nxBjJJuA=PQ`8 zG_mQ43TB*4Z1yh-W(-Vh{s9HkzY|-WrC|DQV$07fn0|5F!9uhKdn+utvMbL^uIh#f zTQQws(pU7nDo`|91yogF4(ntE zGFhAo#c&@g5KvWti7~2ho?3x4i&KGVF*$;OstWKiI-{t<$5jQ=EJy|2!5IGP$u_Z& z0k>WZBiMg7^Pp^K|0i2lAudn=#kjR;-%zi^xYeM3DUMq&6-FKm7^Z?N$eo`8%5f{D zI2y*SD4^3Dqh;p68xN6>+0*3w51}ad#u0-(R{46Fk=W*{$E2Qruj)`1Mhz&emi2l9e-Adecz23s{oUh~mG;=m@r zU+7eYx!FC8Z&=Y7GXW@QJm?5mnh%VBHJTrZ4b<9J8s(02GQw|8QX0)S#+;I-&Qp!% zk_c?OV%Y1W`l1)6ZR z>}aYI-v#-)cm;f$7p04-e`C7vjDpUEfNEw31Ig?k)67nql~kkpU95A5E;eaUtl&Wd z0)hsPx1WJIrEpCZ;CE*vcU1p)LR{5;VU>jf%57^ZP?HoNq=@ImCv&{r)+d*a9m`cp z<=WL8?ZkhrVRRWhfxYAg9*ZRT*&SeD%W~($~KV~>j46St5 z9X|3#5ElWwD#%|1R5K`D701SBX$B=tS9xq+^00KT{_wPoiSy_$&BaoOqHE|FKAyDR zY6BZ!_(=4=8QAb~Fa|dEdgZBuXka6s4LUK9^P$WVeoM25^`m19B9a}jEcS!|#3lC+ z+MjH(`5Yb2iISgFYELew3Q1WF*ECzP16bab{l>(gAUfR-3TU6~y~%6sGX&UmhQzpW zYz5@KG3C){Z)5RWLw3N$5Nag}|6=&~&IrOHj$~*p;qyu#uD00Lo+brqivj{45mS$u=1F-}5r7(wMP$ z#(V8!dE>4t-_+r0#^^yFYS&TSyk4Pvtxq0#=oxkyu2=Nj;mpIp(tSq;@nsqpMvLQX zQl8g>!Cd_WSOI4+#$IU+a67>sU18m= z3x2-DIk$^;lziHGRR9Qzwd}0OMxs}*kG%10Yo?&mQBH;)EB45>-Jn{L>N3hNsg-9C z`<)=wqu#|Tpgn8>?@(nYcg>)qMe50S%_w=i4dL3V2nDpa3~lP_gYF44U~vrvI=S8o z$cuYw21iqkf*vOu19aGllLGSnD$0KxLhI#(nLN#MVamy-S941e4YdCOq*{UC!@q0B z={^kF%Ms=NeFcsQQ0HVP(u3L2IbU^KLUzwBJMUZR-W{P`sia5La^Wk8pBY7om z5Q;ti-SVkJmCurZY@cu^(mt!VZ+M-jvKaZng&h#X5ykzYD11#;`l#>5YfyZTAN8k( zp?XE58p>j1SF32!mx#mHnR0bq;=8Et1ez77;G_!J(IH^jWE%3J9~<`T$|6 z5wJ85jkRW(i%cgd4O6h5Q->3(KA2piP~tiv|}lR<9LDM0BU!2Ar%Un<$`0J06gqJrll+0}&>jqp zslT%38orZT5?2G?iD3*>2@c=!Fb|t!>`xSc_x8WSNAo580jZjiYw9^bTe<@@*kjA= zZ`J)^lLrNdvC8At!r=?5?YtF`Ph;RtWo+YsI3%037CZ%E4WOLLt_F7@?-;qsoyrv8 ziYbmO))P?Y|A3M|?o_VvCr;wu6_C>tnK%vZR3;$g4lK|TlD99aFL*c}XHDRIMW35J z(ZIvwbPe3TMXZG*D?ko*{LpaFe&8F&Q-D7S*`u*`zCqc=ZVivvO3VAd;Yxt=b5{Rg z{zHNP8zWD+#J*4&rJmi{pd(xI(o2m3M9?vga}+dr=u|M@%LH$7Zseh)S9qjX&}8%L zP{2xT4tQoQkMO!~3h;;H)+!RS^qrT7_*U!uFIoS=u?{d&`}R)OuT`Zn^2AFG8-z+d zJ8967t$7KiW`v0K2`a3gfO8}JkRGNcT&z#fWb^uD{n-~7QQeo(y@k&^a1yk{JRXbq zCBnxFVs5gz8!qE78#TKp_3~7@Y=i227=F`6b6KFWw`^^38PC%n6JcO{|M)k)n!k&c z!ts&)Y$+GP6v`fps^3l5vFAtQsUizw*$uRo*veYE!EfaW9s+4Cy zWckgFb!yiN2tyjjL!{DLDN+dtc_Kd|4YdTrRpAL~*V>;L?FD-&jy|2s6(f+vJ()n zoopaEZJ|8NyAo|HD#YVTQ5T|E{OP@un3vWfd8*Gyp6Xziv9!CK>6iLM0$RocCwp*%GgcIVmZi0B=XTLuD(7+Yp|x3kQ0g?Q+~kLtA~t@Dbk1(C-5H zG2<2$pjLRo+0bwG3ahppf;T2NwU4v+uEa1V7E1-)V^Jj+dvngcu2qpsIsDm?fa`xSu3~L@={$kmPCM{Sndf01hQkm#R^1| ztmn(M=k%dK**2SpZtl>iR|*CNr1u!F@@?XDA}o;dE!e%Qq*z`h1;hcZ4J^_j7Y}^& zl=rg=Can|@#uZ_@v&Ik^HQ^2qm+_TYEB6onR{E9pyJO*AxZLg0yd!d&40Q${#({fG z0jk(hkI&^@QMh#M zr}o(hi;H@-Xb4BLA;e+j(9q0u9#*clX0iOw2S4f!#jrA?&Scc@oBZW3yzWzPDNsYd zeV+R%#PnqD4`BjVH{DiKouoe9?LNr z+4JpV7}tVcuZS#wFd5%1@XrPV9sX}_|5--gV;)ZfavRskfc$?9Y5CRbuYFZvj@dn~ zGLb9oql?I?C{iE4hkCP&e$YflKs|ICgHg}k-xLdh*R{&;_9|y2C|0veKpKA52W+r( zxe?&_`>Y&)|FM~S`SY$h?A?WNf&=F48hnrf!~OOp@tb>ABPI3`O6gffacV?0wsC}j zNZVfJ*C;X4``FhE1t~z$Lr(zFOj(YifOwNjzL^M1RvZ^PHdgmgS=8SFSf?Q%B&kD8 z0#$Sr1?1Q6C?~JP8=!FHmN_*Hl7xX10hyEXuT?2?!a9DziGY$5`MXZ9Rh>duog|Z zwxRuf(|%bS&h=M7do$}3^V4EKeeM&ccgi0__Q;yO;*|9Fu_J)WWA>kA^h`@=D{ha* z@@lDoNPWv9sYhf!9lD`;kWTT$?N)`pV3Hz40r#4PC~Vr1j%?IO&06)>!zuE9cG9eWlWds}p@H;E637umNimOKdW8W-~k51r#|)DE?2 z|IqaHI(|dy=z8C+dWXYON*M-aid17$Hx)V@7GIXBNwVSS^w(|rH) z?Uq(5bEr6;Kp>`>^*iY@Y-X_wj~gG@3MHcZLn)WAE`9|wW~?JaDcQUtLswjJYD6_a zo&RXbADdS-{=`Y_x&rd%6`42<7 zi1JWQTbQa_Tv@%z-a+>C8w?Yns8k_Yeb1oDN1bo5_$9NxC!f507TN zPObG-8T<4hqrc<9Ff`>oJs%HyaC6_b>7kYp6N@r5^zLp zy{=lp{X0~U3>Fq} zK7gly_8&P6QC({6ZcQkEm(4>{( zU_LFcjHVhRyMCXuB3RKIwUN{rN5O5R)j}FRcPD6F|^uKhvq8QGh?( zaemh5XssM^MPPYA_~|iOw>BeJv3x9|0GFwnc=mZvUyK#Y87m;FdfT)t<1?hX9N1XW z7YMoh?fmONrY}Ma5h@4s%R%LK;tXDny8wZh-C!fb!5U>S!R45?dO?O3X52$5G zhu^Wk3PJ^x_aYNb1}lo}Vlh}L5;g`a1>iyf1Qjr(fSI6_Gf_ad!3ufGV1;2_4pzu{ zDqsi1qUR9{nYy~@014oTg|}9t7o@6=tbp99s$Xh6gOyG; zDXgKRC?Fs8RQ}^eQZGM#W2c+z$Qn0ChrR(Way!MFRc02_>V>%+>j9170_eNmt2QW_$pT*5iJjhymN5r7C!df*I#ZZ zFo&X7mJV;U*2V^R_zl)ucw*LRNoiRu9Wv1N4L6%Bi;-17iZT^3-f*snMfdpvqd{rp z(^)ZX91t!HGK%UPoyPZ`8cn&yz6Lv6fi0ae<_2v4?gRydQGW>Q6_FCLS|2E4Ko11P z8f}`NYCOZMB3BBxbc-td&&cZ@E(c;<401)65#n;Y1SPw3c>Sfqf#`9+>4|m;1qQ-g zgC(8|YCaWFWrb z4Au3jL%srJN~f#bZYu?NAShwb4a?q`tatI^JV?PjBU}E|I6$#4gN+qv>Z*U!{-Dzx zLjje|tS3JCxaplvdFL~yce?Dw2Zq7)A~&-radDej6>3-rom>|S&F*cL&t~d~smI22 z2OUkAWwh7>N0#6lG;e`IR-nLq6m!i_M(oC%Zz&!cRMUk4j^1@m#luAb!!Ov+wuL@n zbsIi>hLfr9nFa_JxYy?=tK6qwgJxC$HpSxs(@q-#9D0^>6S9=`St7Rn#WI~2gctUf zxK5|zU@~CM`kR-KQ|rX4jO|PoD$`3wfAbP@YJIRO1BqZh8U4*m$f@;-stlgx?NyKd z<|X9R`eIeaHht8izj+Bc&CShTcWcZaH^A*yKE{EJ0{p(P{DfgSe~NpAmd`!wXXh4& zszUdS@eGOw@n5Z9@z~!z0KJhdM?A+-|A!*nv3FoMtvsB3Ni>U7dggneX^vkY^j4yP z&?xnoD_83jYjmAy7Y6Zo`UXTKZVHg+eGJ`sd0Y#!^Rcj<>K|BP{fW1jI*J1F(wGWJ zEYlzI))F?pb~p$AT+`Xv-iq2=Nh)jAYJ%fiN`hfDM~*p@@KNSSH~cA*9Op~-MTV_Y zhgsTRqP(QG0@{~Y?Un{R;xHoX?$uF1K53}r(R>e`2^^jU2U$s?6wv-A4XJzsAs)HT zd6$b;fIlGKp~{Y)%i$6CfzO%F8^Yzx;2ENxJnNl;7vd^cNBJ$tRdwp@s-lU()&x{t z#rtxc8B9t*=_-;(dp%rS#Y@Sy1eC5K-|VU)O5iF2N>`Cx2Umq>9A7z|Zgr|W!yl$4 zxwwjQ7Ue4PTb!#B^<4XY%-yx&=;uBBr2%}Q3b;rB!JybfDKen~@}`Qi_NM;o$O(!$ zV4Y@;JaePsc}}JR@|=u#HYc0??j3fI&$Br2>i9aZQ%r3XyOF9no-jW`=$3M8w09p^ z8>0I>;1s~cqCMk%!PgjaVG{-TBb>a(2i7_%Ecz6EfdYJ$$q8#uE>LBHTR@26SIT7y z$m>apX22Lj%7q%fsQ9!v~MSZH?85t?n@SiN! zTCcJzULXgf;vMW8YK0S5&o?k)EIC5~?QfXeB&Mc7C9~jFlMJnxS(KT_>Mn*uvwF=H zP#*B2o{pxxi^E=FgXDEq0~GjWD&2K8G?dTIKixE2KK93Rk0^$D!+$ozxnkci%EAr` zXm8HE^dG386$lD3i2i}W<*F*cJB(<+O=tYF@(mndq{1c&a2L4cUjdm`{L4s&R8ZiA z9WGo>&QyROG;>Y|8VX9{qyihwkAXP~zLkT$YB1fM7`jy)szf_T0&4)AvfMvn%nd(a zCs`p|p@di=BOt7h#fLbbZFkVSCW^7rNIMqeZ*xj{pD!NbTzS#K@FRY0Ie5L--n=-x z4nNZ}%J4<@(?eqCn0rq#=ZEIM4i>S36&?5-KNZWZtAMV0x&YJ&7|D7Hki!AD8VfNmQqlkEXEcpOJ0+$H2zAicgFrqg6l-)}%MhWVKqJIN;-&ysvCfjY<(*NJ_p;s*2^#A>8M8=2QKhUgSiUp5<9KlraWC7=cWi*y(MDnjj^#idyG@L$EholWWWZ}-|8(nwf?Cp zW5;OLUNZVyy(OpCd#f_;--nF;R&U9vbyiiz(mrJLw|YxXt|Y za1dGc>+HmP_3NZuVkQX1nu{L-=+Li|;l0(b*Z6ns#y!k2kRV2new|#0XD+uE{3>g~ zaf)Nl$dQKyykv!qWsZFLp>xF)Crprzjh=BfXXF_E*rSR5%t56Vg=c)y}faD%P4~cpm2NLhAHJ>rIyFX zZPM{Y>8TIoK*?F4KOw;TKsSUgfP@Jg9vJN$t})q6M9x70`6<}SH}_NA<#9svNCfm) zLQ(#?cPYAI^acdv-bMM38%Di!UicsU`?qDMYZ2F= z+n_PL_aC(~tLBye48u>AA^P0#@dh5=*goc2_JwJZlfPg;3cy7I2#sU&Sfxaxfcjt? zBS26n*63<8N8om?UE;XS@f6_W_ZoE|95befill}DcIfC=h}%7mGi|!5$(Ou+|wvlCr)D5 z6_AJYMH<6W9k~ua%$DlnYdoKW3~U9l5|66bYPJmUU%kQx_&YrFH|6txhJSt=yJHxS zeN}08&XRhWos@O6(4=B^GQ79UUgJMzbxXkyw{`{eFgv*pf9z5|DB>H&7bWplK;HPd zF@`yu6FL=)@7ZU1EGQr^rYXDCE@|kt>A>Ob_7nV)Xa%%)(h1)^_H9aOabfPCoZuVrYfErPl z;V*|iR#5NB=9mj7~Rh;AJbKlTUf zSTdNs{@Cvg9AXE9GRCPV20gMGD8FZnxOLlk!{E3LhfdrmMwc?2I+{@IVN&|!ixo;$ z-7RSJ6y+NbJ~HjJ=|Hmb$T(>mBY(jg!{KRUG$Oa&OmE-{HXbd@fmwjp-^K$u zwN9wY;Hqyg8U1ZMkW=deRT*6W?j@tYjR$gSom-WG6*dG_FB$!9JdjiC;;IbZ%-2gs ze;W_v6vF)R=19nb{_UHs|ER@!BXq4A{_cIHl>4N+VPjv@PBz@Pc6O%I&SE;6i`lmwMlztb@@73idoid~P_rc6|%9!4Il z3z`~!>EmskZ~cGR2kw7Cy9)*F2wTk%1|RIZv5R_ZLy zh5%DhigQpv9AenzP@vYo#=l*yjcP*6I((%!atOAs3R3$D3$~>-MLGji6~|C<6B~s| zI8rGW?I%Kpx>5vA<_Ed@`6yiSENUP2AXmL=7cP3|f8Z55@_d4IGjUD3sKxFU!LE^t za=@v^pI&vq`YPblRlw<0z$dGK^QwSPRRN!<0?w}j&Z+{=sRGWf0#2&}&aDE@r~=Nc z0zO*>d`1AF%_AarF(@L=O{RdbSggwHSeaxpRzBI7@SY{-rhvS3sxrnQxLzJBO=y)} zF7zWnBxBHQ!I<$BP>#|`T~jcR(u*L%h?; zr~=wsGv<}uN<+^@7TV@pR{IDiEh;0l=-rTptU!(UzI9#O^GvCLFrCr`JPuVhN3E@# zzz#$5l#545chEx?k2raB(_-0)l)w!I6~H>p3i}4NEFO`er+3A1c0B=g z{;ZdG?g$;MB(XJsK6+XB zZ)rqudESs!sa}I;qg7jhh(_~+QAhVBaLJ+3JUS}DA%kJ_0CWP`Hh4Pt9IB)5h1(r+ zVrgDIud#6w9VOLT0kM+zH+`9wg1~jL2H16g`SDY+mYosn(HMD`IlXp09|zq)cXP3| z`<}?UyQ8j*7)fOX7>5tU>)7`g-QP5vY|Or5E1R+Y93RJRZ690Oi-|(p`ZFqT#T~fH zknJY90I^Rnx+&HK2zx-JLzS$=$I~W84A+xDcp0{`$WOE-QaD|z0bP?j{O6;2C-c#! z6P)V$zRfcB*m3sZL8iw*(}Z-~a66Wj9iaxC7@C@#!0Qp~v4u{YrMXKq3~qo}JKdOl zv>A5fTjuTVp4+w>Yzk;LB11b)ut*kD@sXUrjY`5uqi2|XDn9+UD9L^LD*9BZ>OMtw z5}zuI>{B9z*!r8O(SEO~;f__xvFDla*vhaBz)@0OGf*CKP?3n9jMv6i4)t7w0`|P< zFBTtmVRCA(g{c*vm7*G8ot0%7vKGqNtE_66l-GraLCo<{zn55LgJ%zo5cq*0FvA;|1RnTQo-gb6ax;{DH-DqQ`X-TuPC6r$w4Km|J6TfrGclm@pLE?f3$)wUQ!U z0qw7M3XnPQ$%eCo;whklaveVYYi8IZe_{6A;z=8|s1Pj!fCmLDkT4W5u|dLt#sv-m6C0*^mF=aSWN0pk)&$Lz z4HW_u%t<);QibC0#GmyApb^LXIvU}~@aNG->7m*R=)rtx?9O4LNZEnc1n{Zu&0 z%I)FHIfEode1z7xLm5!c!=1`tlLVzt^tT7>`OqJ48k}a<^zfy5o=Q0i@S{`RXO$;K zBVc~-;}Zphv`zaY_6lg<&3vyyoztr$YyU#^=@&2xtZB={S^=)P8$tyJLRvKuDj@Gg zDZACdvJKcm^y z?*B{vTphC$nnL#mqgd`w1=Rf6N1{W_>|y`+w*Mm-_s6`hYub6NV#_*@GX3y=+Wq=T zqX@w@_8;Z*u|YBw;k)aoVZtu%W&e)>mcEqG>qu5lvx|pdOt$>4Ypqdxb@Q3+lsgSU z3+BOF+y6j$g$+6Tp@e&wRdGrIg;hb1(4i_sXA@I&r}vMfCeeQuug!!0YeRdE;ml&r zGK*1ObN6WCMtCj<YLa4=lWUEHE9eN<_xTlkr1)!F%YJ&iX4@U0{SZdb34TY@^WKOH!Kv`v#l;FTGGK`_K!|vf3su6d3eE!hjbF z40<79zzYQiy#S2hg(Dw#ANK+#1+}*DZ1qBcK`$f>c%i_c7ZL`%P+-stzzAOW&qMCx zUchLi=7l5G3k3$fkTBqd0)t*i81O=YK`#I!c;QmpAh=Iwq+%tF8EK7rp}?RQ5(d0b zV9*N*170XF=mlT|FZ{{2lkd}Bz%;Mc7Fq^O{X&63FC+|jp}?RQ5(d0bV9*P|2wu4H zq4)8Ow0S2l9Hm|;FzAJZ0WTC7^g_ab7YYn|0T{sx53*U@eY!1d-^mL{s}~9kdLd!J z3k3$fkTBqd0)t)vM)1NFU%!ugVTVp$I7YotV9*N*170XF=!Jvu0?1FNv{ZGAffk7`M z40xfypcfJbyij1!3&03oc-UR{aW8PYvsl4+u6m)spcfJbyij1!3kd^WC@|;+U<5Cm zxcz;6q{_obg%{fDg#v?KNEq-!fk7`M40xfypcjAI9sNPNs#;f3SW3k3$f zkTBqd0)t*i81O=YK`#I!c;Ph{-^aaRmZ;C#o~K?YFzAJZ0WTC7^g_ab7YYn|0T{sx zyZ*y{+zT+#lVPL{>_2aoJ zH7~qCy-;A#3kd^WC@|=SgaI!U81w=#f)}1^!=?MQ7e+dH;f3mj0)t*i81O=YK`$f> zc%i_c7l0AGaNL3SaW8Du$qSaIb4DsK=!JvF90KW;Z1+Jk9%R$PF^@(y-;A#3kd^WC@|=SgaI!U z81w=#f)^h4sQ$cQ1pbW5W%ex(fA}W49V;d%b}zjT9b#?qxHuBAo4UN<3;%JeLoR9a z`wBZmz;h#)#OowM<#I_RM87m%>l6L5g`vN_KXk1w%tU4Stge#uQQZZgqq=>duZh*% z6N+1*{_$r3<|7v2NHjgbQ)VRUQiC;-3+_ijA$m_4Jo|wM>L^i=K}jhnUTtSTc)H}j z14WXK@!5 z_qk1mhVHfj&+OyukJ(A9aX2zgC%(j_=0|#60E<|`7ar;L1i0F(9DNS-z8ToVwT~W% zfjtv!Fb(XPV1qH(cu)qL49Z}5PzLr`v%zd&k2M>N!DfRp*nCh1b~|0iD$Fghcn$?o z&K8R(kI(^^Aex}Mv1qM!v z;-_&H;L??~R|EYz7$@NhSoXLmv(etx>g^o#x&zS77aY)$7XbEMkP&YPW&Z?F`%GY;Ox6m&7-b9d&eY80palJC#A|*3q>d^*64%j zToqW+h5d}{vT==v>%zV?>7syqZe3YLH{Tf_KFjVkaZo^hw=;*939V*vl^hz!O|c_g zYn2U;E>ah47VV-~Zg2&7tyQDBkr!LX=6J_M_OP`Z15FJj>8OCt%{o1Fb|KA~GQva7 zRE?=&XxGPSVX(NL{l_FQ%rtJhic^H%=hsg%ib?yAf;*s55MKDdjr})k#NkdFr*R}$ zMei~!Lc)EEaY9)QwpJ)1{tUo8s>N@P*RG8hNz!AyrX=v<0!VPnElM9GYAu!0hqV;F zhqYLblY>tED5VBgDY06SQF0-EvmSp1z7+(;r`7HwNSFm!?LJ8Ea64s7^&nx@VJ%gxOV!o5ir&MxYoaozR+Q>OQrHVQI*gsi8?_pe$oVRe2Pc59}6aAAgg3qszbcx`jtc{T5to}%l zOi6N1M-s|P{y5P{9*_29A3B5M zvla9{;^{LBCqd%TT-ApZWOZ%hJxFwk1G=GY<3D{2m@GiB>X5KNr5+a31|{6-oQH{wnso6C(K$is6P**rdC+NA1c|z@kC;;QF1l+> zU2A65cF`k1s1yb-O43Cs9lR(ys-8;<4U7!wHncuX2R)P`$sNXWfh5R>!}g!P=tBw= z)4KFQ0x2U4lL8XBZUKscgi~FR^`RKrh6YO?B*%ia6)M(8vwd!bB>oJ1s@a6jL~S+~ zIXzTc6FHq~-|GLKa!9m(Aw(R&e!4=0{E|zGXQH2O*Hp1C=&U-%yNceU>LkHa{zm8rP^IQPV_St zhK}*BD$|8Kg9GDTMeie?Fy37t2^#Dc_8+Yd|9ePb$I0bolF(sBZ6&#l=;&uvsd>=3 z;ye#`S_$J^<=#hP!#Gz-ASsume>u*5e#F8T{&%Uxn#gE}3VQq*uU2Ge_l%&Rj6S+& zMeia5-7|ai)rO6doNdu#MR+1h8LK5_~s#qT+2t%}GD1`rgkihe*Sf8F(5=hFW z;*~Y=%Bl9fV50R4A!3Jv{z)ZuNf1Ooy+3q%1^tt9@599CpB6}h{%L_E=%4x|(f&zE zy0pe>|I`ObwSTIUP*w_;YX77pee_R#ptHk4|D@<$0)*)3pB8|Q{;3ai#uNG{Meie? z&_DG_!rtSDMuLK-ivP4eU>!P}9|ZV(=xZVx()5D60&bSgqY|6xmntfCaT+TO?yAx} z6$ZMRvJRi`klTkG0R3nVgg`Q3l?0ZsbD zSpZI}0?w@hxX6>lB5xKvxKNWYxC{e;oYSjS5iTh>aj7J6;$nz%@*vRD>PzG_(2G|_L-C=(h_Evx-VI(Kgy4DIP^J>9P70THVBl4s(k`e(q zcPamI!>E@lm<`dci(!=lq{D%r&Fz07nSd-=slBSIV6FpJ2n$XGbmr8(4k7Zm0tc3r zVI~m9EToog(N9f$^yXq+|C2f zQ=x#BByD~8odM``Q4$9FT$BVrpNo0-(=DNr3ai?+ieni;^(V=b|J4 z`dpL*I4%6nfOD$=^tmXB1br?_0-(=DNdWY@C;)UhCyh({ZX6C^zas_TJ!U)%nlcADCLg#s>Ix0z3=cUF~BKvIf96{Tcz77#$YzfF2vDU6sVCGcx+Q`-fWKMvRzYElyQZe}zhKu3>lwUnf zQ{J9N}v28I=Y+FvdvOw>LZrT|<4Dk~s#4AsB^Nb&SwPVrQK zB2cMH_e4(L+Inf1t`+l~-n=V@O?b+~>$ZgAC~28L{PfQU+9#L6(LbZ$3;%m8gHHm_ z3eEA};lF zKtL%m=pw5miRhkSE}BnfmL@CK}9KD zNYExJ<(!UENSORl-Az;}DJeOtMDq93-R_4TA@~RQ$qJW|=W!d+e-NnV^YWUA#sw8} zk3!?sVK^ z_7DlcJ|F>@;S+%QI{}!T6X5)yM%IH9%7nqZnE+>3NlvQ*&aDE@r~){lOiVeUOaM+O z0SGb4@@$0LM70{jW ztE-F^;EZ8%80F>m-*r(y`v%K;DU$MpyO++Iw~OPNDX?tUihJ~s+IJ5VFh$oaqmDil;S}FZjwFWGb>;m_?#p< zGp-cN<4OVD#XltQ&f*o2JOZS`BLoDGeCUHH=ddH>>km7HKL!sdsk#cNtQxabLh`<0 z)tFfWpirq>Vq1lW@N^m$f3v6iPuVm^K46I5&GFT$dJ1TMAs7^8c^s_q}^8elvHYein82l9jVmU@#G^#rz1+J+Umg z5xQ@fmYZj;Z0)QmppJGb{;-k&>%;F1;4)>xIK7I&oRu(`krIIUCIOgD5`eiP0k}+= z09>X_fU~Q5oK^*JnKF@ZnKA*`ni7ERB>~tP00^UR275wLK>HVrEUjXko&Y0q{7X;b|y2EzGkB5NEOKmm;Z-{TN`q}&oVOy&%P)yk0-xCnHTp8)7I zfPn5~O%VmP7=E06jNqeoDLkA{k*6HH4xjAfd3_@$VvYSrc>uJqf-nAefPYkKwI*Hx z5!*)JM2`oi6%xds0a&%)nh1s@m}o&nAB@C(5wU|kI_g8B(802sO@?@mjblmD>W}1u zMzWuo>*w}=_7V0G#{9I$iKcD)W(!*P`rWb1f_Y=AWOW>|Va(hbO74_@l~8Joybd;i zeo7q#(|gYEixm7v6+GhS6G5)XbF)7(NM>R`hI%kL)a8Q#5yQMoC2bup`scEnB5LDE zuaM%cn#*EQ&r<9kRQD{Fh(W9(^%ARitLBdMN-#KF?Ay#_W6z`AelN0DFigg!TE(9$ zi(mY)_9-(HLsOFzLz5k-c+2j`Uq%P=6?1cX(c=W_gg=;^zD?rAAk!XoL*cTtqxP; z|NZTMho*pcWH3md9t}Ve{OmxokAV-j|HlCDTFA8WWPCUv%00<`JH~ZY42l6psNb*e z>aTv=8^v4fKgyFT^@HpV%Dz@6Hh5Y%3cm0kCdq}_b_gb+6<@k=lI8u8V8%tme=cf4 z#iAb~G$}^(3l@fcVSnhX^27Vre+@Zz@I}02UrGP+IN;6|Iq_$t>q2xhCE7Qw6+!k@ zA^LG-d0C7=5+ICnNkmVv{6r%l5u=cVBewueBwsWqt_iRqs0KkKi5%k9L=udkswq(q z)z(B#$n;9mQ;yb0iTbDyKt#w=6yQ=6uo?=X%pPmPbH@!F2+bY0 z>V}T{GeB{p+8;#kn}NOa#1Gdmnt{FVQl_kBD9 z)9yvvz~1-q!+{uVIcOEO8kE8P8Y8Q4q^W9yIGVohXpe*KYnK*21^glR?^QF}y;@^|Nfs88cB5EC^~qwSKY$P!UN&>%AmyD$W!r~$!U5OBd2w^3Zj zg)u6BjSIi?J@g@O2b5Gs6RrTBi>byh>UJZ>1nAja# z^U)@{;SEM{2qk@Zp5xX;z>*_{cej5(`CnCw#}vR*9;fC>jRSbv0zi_;GZRONfc_7} ze|ti2{ZECISfmMpXC2_NXCMCWz=Or~bu!=oQ~Y zcV$|W_(AB#iQwQd>nMcopb!Tfs?5hK3uUdGda6i7vyAwX^sCdH5hIqyR|IJ9=y1Sw z6SQV#5lfjxfHGS-{kui6fB;YJv^%(}YUw~zpCpj6I|N??1O*Ek(2D|skfH)9F^~#m zZVcoNf^%aaaW^*x@&>`VF_1S1&W(YbQOu2joKeh;fz*L>V<2_l+!$;>R|Zl@&P@X; zBnL9!>~SK7f;7ZGw+6n$2E(09i4ibiX9CEEXgUr(dFIQ}Pht%k(c6|I3s4HQMaJzK zX~M?NGPLHb6R|YwM8KY%nZKG!mnNF;{y;g&{nk&jR09}3*q;41`K0E{L*w#$fBERr z=}qEl;5`LMAR?1j%in3~^a0Olw{*HOR5?tfR#cgBRd)O7{He10AXQ%Dsyy!a`BP=5 zL8`pgRe9A3^QQ`GkxB=>&Q6yJV0m|L&@Mv^RgTf{R8Kubl6yoG_0agzKmk zRo>;QTrrO`^AUqoxxiI9?gR7JL7NX!WtFRP@I21UiwCK)+Eux29t+C-2dQ$Qt1>;0 zGxLK6sj|jZ*=rtWW|{7)Bj_SmyV#e!T+ZvX=-O&Cq)~0Yk}ba;VU##m;7-KnZjYDT`p4o*C664fV$oUVoc*yxa}j{+eXT`qs8YUf!}gC%uV3{*!DwP8se3n^&a z^G9{?Jz!b>m0_bN??H(q%1i%q`^&psdFRVWM7%80iii&8rFIhCztBzoa`pZ)|i2#)n0S7~6wCRV4&c$_dSOKBMb@Hg&xLoEw+I=MgiQbxl zT;@J*P7LHS_uLrBMdp(SX%O~1!Y^ef#6BID%>uYdF9nQw9q5GzIsj!#EWOl ziGg@gcfDxL&&C9~*8d{V&6P!fhhHJo64}>qIbytRsPAiuj zB~#V-0{rVvectf*OnC9w^it6y^&K<1cD~>E_){6`Xpqt^ZXU!>Ag1fp5$OQ}W!wEB zrkqHgIZVYv=RzJ3%kq9USRN6RyoiL^o2|G7$005oj`!*Sc*#W@3@>P9d?C%SXl0-HLG zGq@^-eGt_R3*1+6gbgihOwbe@0pnX*Fhzz{UZu^L{;W#fDbeD_GlczImvj+cmDA~W z3ow;v-#Nibv=C1|KMNMy#!zKam{nA{Qh-U7Z=O1Ts_ZdHm8)EpOM3IC%KZkZves2O zavnPfkzeVct6h~d=5gsoPJybb-~kgBD>uzw2O*(XymF1Jvir&NrwUFTDykqqC$C&{ z{QRl%@Ik6z?ntWaKaWc<%Lb|PURPzyd0cuCtE(OKK3C=K^SJbK&>&T=byeOrk4rCm z4^rj*uF7rmxb*U8gH(}qTnpP@A2EL;Xoo?ne9%?-#5^Yc!w0GIU#`mk%;U_ABD<2} zu5(r1+?&4++GUU`*SjkF&0_~G8l=jHT$R6{$C+8OX|;oHa8-``%=~rGmV;Ee(N(!; z9=)>LAXPr>s+>KKGxGt1RQZUjvdcWq%oBrD`KYV%qah33f~akQ{6E+8phpRhN?!Sx z08_p4%6Xibv3yri<>Ri(KhERKyw4z2KH;idGmkT~bU@WBpLA8eK4fM-&@OGDTIb69 z&+H5y@q-V_XI$ElFKK?78=o)o)6q%pYEQzaGQ1vIN~2=n*hIQvy(oyK@X0;~2lrF{ry^{61i)dQ=q{X{dbc9Lw-qHDA>c0(~+9+@p&f zJ8ugRn!7&z)c;{DDtWY5W&YVwV4~Poda$78liG50!%Nr&`uP$f42`?&AbVh`{Z3!5 z-v{I}6G?8)NNTR*#Ay0-MglvE=2C9Rq@WL|Sc4QkJRjvN8cAx*Cpt<@v?1s;o6qbd zdJBb~3Ebfls1OQGG)fqvKZ-%Lmgp$h&|0EDx}EOPJ1x5_l3+|wp%xC+OG1I9#zT~F zH|&+xLIN+l9-NtNKNFu~2;n!S@b2aoQsTId-fA(fBYKV5aakvv)`MLW(gBU_Nr z4!#qbBsF%>xj8z>isotHn2?{4Y+42hl|mMbBsEIKq#4m$Iu|uJ&2EU?=-k+aElHwc zElBivmO-%%=G__nb_d5dW*%gnKwE11BweDWHJCM`HA|I0|8qHU)<8hYCFfCmhFK#@ zK}QzNrNmidy&b1D4L)Pm#jFvf)bu~mF>ACyr>FQfyb%;S(z<{oH40GzhHcA{P8%R$ z1REfsWw=KPF?L(nFk)~#CG%24Pe)IUi7j+&3lel+^i%^0(+^*wOer<#C+5T`!ORjh z(LBgwPDFpep_I^|6ix3NTavU$3@^w?>?gF6=8C1nz3x#MSkl=bVS_=|R&}$Qglhnl2rguV=99t7l_vv>+?2V|9#^7j?rS{55>}TSW zXDNm{s)U$F8b(LV>TyDAk<}x5jao6QW2%WH4NB1tOa$De0SPTgP=<{-2V(As-fGb+ zm^&f~lq;Giw{lSl)kd7wzH3auADRcrCm*U0~A^As0}96JK~ZxKAz zKl14Icf@ih)Q!jr;A)Vw<9ZJON#ZljPDhD={%0w%O31|#CyapN#j25=?NyC0R#orZ zc;;j}^u*W8>s}Rv|DYLr4N~mIa8ZuB_>tDL%}=qM2ox&~l$cnOby=71np;Krpq=N19|Wn!VdKbeboju-*`U&e@_821~^ zN``Ww&N)Ru@tDKNKRo6TR3!ls(BD=RmP_^<4o{+xq$pgqiGYEbuY`?cMnF095t?N_ zf>jn*G~7)&-}MbS^G{b-^j}*9^1{zLW;qf>X)Cpdp~l zi2^;TW|@-{7<91A8JVeBTtILaL_q%wjH?(U>Vn97A6QUre3v{|4_rh9^w&{D6s#hE zPs5XM&JYN*rJ_VYe{swQBviC0uv_GfNUeB0Z+A_3X6^u zoT#i*x@1`o(2^;d7X_qOUGaDRKmabOn#0 zIbH;mJAmv42gl4YlS%S=;YO`gas(_{DK>W>u5c_Uu~Wwv9H2JxWWm*mfFiOY%Ze+C z$ig{4!JJ(tDgH`_u>HozQOb1Yc7nt|J3JSG zh>h{?yJL7R6m>7cNTd{wQ4bk_VZ?losKElJdocn+7_A3KX^s~GsnflGOL*`<0pC!RQk^?Tw z0hi{03va8|%{_r(+s z1wGh^U3dia-zzy*?!zjk35W#hcqdI07�>RWJfVTEe(stSepw6vHP{4<0@<$J|&X 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 literal 0 HcmV?d00001 diff --git a/unreal_asset/tests/general/pseudoregalia.rs b/unreal_asset/tests/general/pseudoregalia.rs index b11d2877..01e79a6c 100644 --- a/unreal_asset/tests/general/pseudoregalia.rs +++ b/unreal_asset/tests/general/pseudoregalia.rs @@ -15,7 +15,7 @@ macro_rules! assets_folder { }; } -const TEST_ASSETS: [(&[u8], &[u8]); 2] = [ +const TEST_ASSETS: [(&[u8], &[u8]); 3] = [ ( include_bytes!(concat!(assets_folder!(), "Zone_Library.umap")), include_bytes!(concat!(assets_folder!(), "Zone_Library.uexp")), @@ -24,6 +24,10 @@ const TEST_ASSETS: [(&[u8], &[u8]); 2] = [ include_bytes!(concat!(assets_folder!(), "Zone_Caves.umap")), include_bytes!(concat!(assets_folder!(), "Zone_Caves.uexp")), ), + ( + include_bytes!(concat!(assets_folder!(), "BP_PlayerGoatMain.uasset")), + include_bytes!(concat!(assets_folder!(), "BP_PlayerGoatMain.uexp")), + ), ]; #[test] From 5e1a59620f7f31b5df6b2b94171d0a74d82630db Mon Sep 17 00:00:00 2001 From: spuds <71292624+bananaturtlesandwich@users.noreply.github.com> Date: Thu, 28 Sep 2023 07:47:35 +0100 Subject: [PATCH 02/14] unreal_asset: add UI_HUD --- .../assets/general/pseudoregalia/UI_HUD.uasset | Bin 0 -> 24855 bytes .../assets/general/pseudoregalia/UI_HUD.uexp | Bin 0 -> 43878 bytes unreal_asset/tests/general/pseudoregalia.rs | 6 +++++- 3 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 unreal_asset/tests/assets/general/pseudoregalia/UI_HUD.uasset create mode 100644 unreal_asset/tests/assets/general/pseudoregalia/UI_HUD.uexp diff --git a/unreal_asset/tests/assets/general/pseudoregalia/UI_HUD.uasset b/unreal_asset/tests/assets/general/pseudoregalia/UI_HUD.uasset new file mode 100644 index 0000000000000000000000000000000000000000..58ae27a1f748b5c9e78d48be5167e99921517aa5 GIT binary patch literal 24855 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 J)080Z{{jxoeZT+! literal 0 HcmV?d00001 diff --git a/unreal_asset/tests/assets/general/pseudoregalia/UI_HUD.uexp b/unreal_asset/tests/assets/general/pseudoregalia/UI_HUD.uexp new file mode 100644 index 0000000000000000000000000000000000000000..3cc28b592d0196af3750f033ffe5d21818876f15 GIT binary patch literal 43878 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 DNy(t} literal 0 HcmV?d00001 diff --git a/unreal_asset/tests/general/pseudoregalia.rs b/unreal_asset/tests/general/pseudoregalia.rs index 01e79a6c..537e8ca9 100644 --- a/unreal_asset/tests/general/pseudoregalia.rs +++ b/unreal_asset/tests/general/pseudoregalia.rs @@ -15,7 +15,7 @@ macro_rules! assets_folder { }; } -const TEST_ASSETS: [(&[u8], &[u8]); 3] = [ +const TEST_ASSETS: [(&[u8], &[u8]); 4] = [ ( include_bytes!(concat!(assets_folder!(), "Zone_Library.umap")), include_bytes!(concat!(assets_folder!(), "Zone_Library.uexp")), @@ -28,6 +28,10 @@ const TEST_ASSETS: [(&[u8], &[u8]); 3] = [ include_bytes!(concat!(assets_folder!(), "BP_PlayerGoatMain.uasset")), include_bytes!(concat!(assets_folder!(), "BP_PlayerGoatMain.uexp")), ), + ( + include_bytes!(concat!(assets_folder!(), "UI_HUD.uasset")), + include_bytes!(concat!(assets_folder!(), "UI_HUD.uexp")), + ), ]; #[test] From 4a8418d7c323b2528b4684d2526758dad4b33e71 Mon Sep 17 00:00:00 2001 From: spuds <71292624+bananaturtlesandwich@users.noreply.github.com> Date: Mon, 8 Apr 2024 17:44:00 +0100 Subject: [PATCH 03/14] unreal_asset: fix expression docs --- unreal_asset/unreal_asset_kismet/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/unreal_asset/unreal_asset_kismet/src/lib.rs b/unreal_asset/unreal_asset_kismet/src/lib.rs index bc589847..b581b7ac 100644 --- a/unreal_asset/unreal_asset_kismet/src/lib.rs +++ b/unreal_asset/unreal_asset_kismet/src/lib.rs @@ -380,7 +380,7 @@ macro_rules! declare_expression { $v:ident: $t:ty ),* ) => { - /// $name + #[doc = stringify!($name)] #[derive(FNameContainer, Debug, Clone, PartialEq, Eq, Hash)] pub struct $name { /// Kismet token From 8bae4f673a882ef4a58f3dab3b0f5b96d2c5a95c Mon Sep 17 00:00:00 2001 From: spuds <71292624+bananaturtlesandwich@users.noreply.github.com> Date: Mon, 8 Apr 2024 20:16:17 +0100 Subject: [PATCH 04/14] unreal_asset: publicise FScriptText --- unreal_asset/unreal_asset_kismet/src/lib.rs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/unreal_asset/unreal_asset_kismet/src/lib.rs b/unreal_asset/unreal_asset_kismet/src/lib.rs index b581b7ac..dbd07f14 100644 --- a/unreal_asset/unreal_asset_kismet/src/lib.rs +++ b/unreal_asset/unreal_asset_kismet/src/lib.rs @@ -505,24 +505,24 @@ macro_rules! implement_value_expression { pub struct FScriptText { /// Literal type #[container_ignore] - text_literal_type: EBlueprintTextLiteralType, + pub text_literal_type: EBlueprintTextLiteralType, /// Localized source - localized_source: Option, + pub localized_source: Option, /// Localized key - localized_key: Option, + pub localized_key: Option, /// Localized namespace - localized_namespace: Option, + pub localized_namespace: Option, /// Invariant literal string - invariant_literal_string: Option, + pub invariant_literal_string: Option, /// Literal string - literal_string: Option, + pub literal_string: Option, /// String table asset this text is localized from #[container_ignore] - string_table_asset: Option, + pub string_table_asset: Option, /// String table id in the string table asset - string_table_id: Option, + pub string_table_id: Option, /// String table key in the string table asset - string_table_key: Option, + pub string_table_key: Option, } impl FScriptText { From 2c893d87789aeff70acf0703e1d5e68230a61a46 Mon Sep 17 00:00:00 2001 From: spuds <71292624+bananaturtlesandwich@users.noreply.github.com> Date: Mon, 8 Apr 2024 20:26:51 +0100 Subject: [PATCH 05/14] unreal_asset: allow raw exports for widget --- .../general/pseudoregalia/BP_looseWeapon.uasset | Bin 0 -> 30875 bytes .../general/pseudoregalia/BP_looseWeapon.uexp | Bin 0 -> 52113 bytes unreal_asset/tests/general/pseudoregalia.rs | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 unreal_asset/tests/assets/general/pseudoregalia/BP_looseWeapon.uasset create mode 100644 unreal_asset/tests/assets/general/pseudoregalia/BP_looseWeapon.uexp diff --git a/unreal_asset/tests/assets/general/pseudoregalia/BP_looseWeapon.uasset b/unreal_asset/tests/assets/general/pseudoregalia/BP_looseWeapon.uasset new file mode 100644 index 0000000000000000000000000000000000000000..1d016e94294ef6861ff23937d357e21006042766 GIT binary patch literal 30875 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 literal 0 HcmV?d00001 diff --git a/unreal_asset/tests/assets/general/pseudoregalia/BP_looseWeapon.uexp b/unreal_asset/tests/assets/general/pseudoregalia/BP_looseWeapon.uexp new file mode 100644 index 0000000000000000000000000000000000000000..a33b95a09627aa087c63638ad9d68c0bab2230b9 GIT binary patch literal 52113 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 Result<(), Error> { )?; shared::verify_binary_equality(test_asset, Some(asset_bulk), &mut asset)?; - assert!(shared::verify_all_exports_parsed(&asset)); + // assert!(shared::verify_all_exports_parsed(&asset)); } Ok(()) From 9e98ce0ce6c3805097e0964555befe4c3f9efa7f Mon Sep 17 00:00:00 2001 From: spuds <71292624+bananaturtlesandwich@users.noreply.github.com> Date: Mon, 8 Apr 2024 20:59:33 +0100 Subject: [PATCH 06/14] move chain tests to tests module --- unreal_asset/tests/chain.rs | 36 +++++++++++++++++++ .../unreal_asset_base/src/containers/chain.rs | 34 ------------------ 2 files changed, 36 insertions(+), 34 deletions(-) create mode 100644 unreal_asset/tests/chain.rs diff --git a/unreal_asset/tests/chain.rs b/unreal_asset/tests/chain.rs new file mode 100644 index 00000000..5a0b0247 --- /dev/null +++ b/unreal_asset/tests/chain.rs @@ -0,0 +1,36 @@ +use std::io::{Read, Seek, SeekFrom}; +use unreal_asset_base::containers::Chain; + +#[test] +fn read() { + use std::io::Cursor; + let mut v = Vec::with_capacity(12); + Chain::new( + Cursor::new(vec![0, 1, 2, 3, 4, 5, 6, 7]), + Some(Cursor::new(vec![0, 1, 2, 3])), + ) + .read_to_end(&mut v) + .unwrap(); + assert_eq!(v, [0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3]); +} + +#[test] +fn seek() { + use std::io::Cursor; + let mut chain = Chain::new( + Cursor::new(vec![0, 1, 2, 3]), + Some(Cursor::new(vec![4, 5, 6, 7])), + ); + let mut read_at = |pos| { + use byteorder::ReadBytesExt; + use Seek; + chain.seek(pos)?; + chain.read_u8() + }; + assert_eq!(read_at(SeekFrom::Start(0)).unwrap(), 0); + assert!(read_at(SeekFrom::Start(8)).is_err()); + assert_eq!(read_at(SeekFrom::Current(-1)).unwrap(), 7); + assert_eq!(read_at(SeekFrom::Current(-5)).unwrap(), 3); + assert_eq!(read_at(SeekFrom::End(-4)).unwrap(), 4); + assert!(read_at(SeekFrom::End(-12)).is_err()); +} diff --git a/unreal_asset/unreal_asset_base/src/containers/chain.rs b/unreal_asset/unreal_asset_base/src/containers/chain.rs index 87705274..d961de4d 100644 --- a/unreal_asset/unreal_asset_base/src/containers/chain.rs +++ b/unreal_asset/unreal_asset_base/src/containers/chain.rs @@ -89,37 +89,3 @@ impl Seek for Chain { } } } - -#[test] -fn read() { - use std::io::Cursor; - let mut v = Vec::with_capacity(12); - Chain::new( - Cursor::new(vec![0, 1, 2, 3, 4, 5, 6, 7]), - Some(Cursor::new(vec![0, 1, 2, 3])), - ) - .read_to_end(&mut v) - .unwrap(); - assert_eq!(v, [0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3]); -} - -#[test] -fn seek() { - use std::io::Cursor; - let mut chain = Chain::new( - Cursor::new(vec![0, 1, 2, 3]), - Some(Cursor::new(vec![4, 5, 6, 7])), - ); - let mut read_at = |pos| { - use byteorder::ReadBytesExt; - use Seek; - chain.seek(pos)?; - chain.read_u8() - }; - assert_eq!(read_at(SeekFrom::Start(0)).unwrap(), 0); - assert!(read_at(SeekFrom::Start(8)).is_err()); - assert_eq!(read_at(SeekFrom::Current(-1)).unwrap(), 7); - assert_eq!(read_at(SeekFrom::Current(-5)).unwrap(), 3); - assert_eq!(read_at(SeekFrom::End(-4)).unwrap(), 4); - assert!(read_at(SeekFrom::End(-12)).is_err()); -} From 2653585b863e253b007a44e3575f1b18d4010b97 Mon Sep 17 00:00:00 2001 From: spuds <71292624+bananaturtlesandwich@users.noreply.github.com> Date: Tue, 9 Apr 2024 08:06:23 +0100 Subject: [PATCH 07/14] unreal_asset: take into account new ecasttoken --- unreal_asset/unreal_asset_kismet/src/lib.rs | 71 +++++++++++++++++++-- 1 file changed, 67 insertions(+), 4 deletions(-) diff --git a/unreal_asset/unreal_asset_kismet/src/lib.rs b/unreal_asset/unreal_asset_kismet/src/lib.rs index dbd07f14..860d899f 100644 --- a/unreal_asset/unreal_asset_kismet/src/lib.rs +++ b/unreal_asset/unreal_asset_kismet/src/lib.rs @@ -223,9 +223,18 @@ pub enum EExprToken { } /// Kismet cast token +#[derive(Debug, PartialEq, Eq, Hash, Copy, Clone)] +pub enum CastToken { + /// Old kismet cast token + Old(OldCastToken), + /// New kismet cast token + New(NewCastToken), +} + +/// Old kismet cast token #[derive(Debug, PartialEq, Eq, Hash, Copy, Clone, TryFromPrimitive, IntoPrimitive)] #[repr(u8)] -pub enum ECastToken { +pub enum OldCastToken { /// Cast object to interface ObjectToInterface = 0x46, /// Cast object to bool @@ -236,6 +245,52 @@ pub enum ECastToken { Max = 0xFF, } +/// New kismet cast token +#[derive(Debug, PartialEq, Eq, Hash, Copy, Clone, TryFromPrimitive, IntoPrimitive)] +#[repr(u8)] +pub enum NewCastToken { + /// Cast object to interface + ObjectToInterface = 0x00, + /// Cast object to bool + ObjectToBool = 0x01, + /// Cast interface to bool + InterfaceToBool = 0x02, + /// Cast double to float + DoubleToFloat = 0x03, + /// Cast double to float array + DoubleToFloatArray = 0x04, + /// Cast double to float set + DoubleToFloatSet = 0x05, + /// Cast float to double + FloatToDouble = 0x06, + /// Cast float to double array + FloatToDoubleArray = 0x07, + /// Cast float to double set + FloatToDoubleSet = 0x08, + /// Cast vec2 to vec3 + VectorToVector3f = 0x09, + /// Cast vec3 to vec + Vector3fToVector = 0x0A, + /// Cast float to double keys map + FloatToDoubleKeysMap = 0x0B, + /// Cast double to float keys map + DoubleToFloatKeysMap = 0x0C, + /// Cast float to double values map + FloatToDoubleValuesMap = 0x0D, + /// Cast double to float values map + DoubleToFloatValuesMap = 0x0E, + /// Cast float to double keys float to double values map + FloatToDoubleKeysFloatToDoubleValuesMap = 0x0F, + /// Cast double to float keys float to double values map + DoubleToFloatKeysFloatToDoubleValuesMap = 0x10, + /// Cast double to float keys double to float values map + DoubleToFloatKeysDoubleToFloatValuesMap = 0x11, + /// Cast float to double keys double to float values map + FloatToDoubleKeysDoubleToFloatValuesMap = 0x12, + /// Max + Max = 0xFF, +} + /// Kismet instrumentation type #[derive(Debug, PartialEq, Eq, Hash, Copy, Clone, TryFromPrimitive, IntoPrimitive)] #[repr(u8)] @@ -2576,7 +2631,7 @@ declare_expression!( ExPrimitiveCast, /// Conversion type #[container_ignore] - conversion_type: ECastToken, + conversion_type: CastToken, /// Cast target target: Box ); @@ -2587,7 +2642,12 @@ impl ExPrimitiveCast { ) -> Result { Ok(ExPrimitiveCast { token: EExprToken::ExPrimitiveCast, - conversion_type: asset.read_u8()?.try_into()?, + conversion_type: match asset.get_object_version_ue5() + >= ObjectVersionUE5::LARGE_WORLD_COORDINATES + { + true => CastToken::New(asset.read_u8()?.try_into()?), + false => CastToken::Old(asset.read_u8()?.try_into()?), + }, target: Box::new(KismetExpression::new(asset)?), }) } @@ -2598,7 +2658,10 @@ impl KismetExpressionTrait for ExPrimitiveCast { asset: &mut Writer, ) -> Result { let mut offset = size_of::(); - asset.write_u8(self.conversion_type.into())?; + asset.write_u8(match self.conversion_type { + CastToken::Old(token) => token.into(), + CastToken::New(token) => token.into(), + })?; offset += KismetExpression::write(self.target.as_ref(), asset)?; Ok(offset) } From d1d974dd7240033c527ddb88609f21cca3f89f92 Mon Sep 17 00:00:00 2001 From: spuds <71292624+bananaturtlesandwich@users.noreply.github.com> Date: Tue, 9 Apr 2024 20:43:34 +0100 Subject: [PATCH 08/14] fix resolver warning --- Cargo.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/Cargo.toml b/Cargo.toml index f2bd2a61..70960998 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,4 +1,5 @@ [workspace] +resolver = "2" members = [ "dll_injector", "github_helpers", From da6bc4c1581ed9682c66645ff9ca0683c53ba3b4 Mon Sep 17 00:00:00 2001 From: spuds <71292624+bananaturtlesandwich@users.noreply.github.com> Date: Wed, 10 Apr 2024 22:04:21 +0100 Subject: [PATCH 09/14] unreal_asset: fix chain read impl --- .../unreal_asset_base/src/containers/chain.rs | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/unreal_asset/unreal_asset_base/src/containers/chain.rs b/unreal_asset/unreal_asset_base/src/containers/chain.rs index d961de4d..73aaf323 100644 --- a/unreal_asset/unreal_asset_base/src/containers/chain.rs +++ b/unreal_asset/unreal_asset_base/src/containers/chain.rs @@ -42,13 +42,20 @@ impl Read for Chain { let len_read = match self.pos >= self.first_len { true => sec.read(buf)?, false => { - let len = buf.len(); - let to_end = (self.first_len - self.pos) as usize; + let len = buf.len() as u64; + let to_end = self.first_len - self.pos; match to_end >= len { true => self.first.read(buf)?, false => { - let mut first = vec![0; to_end]; - let mut second = vec![0; len - to_end]; + let mut first = vec![0; to_end as usize]; + let excess = len - to_end; + let mut second = vec![ + 0; + match excess > self.second_len { + true => self.second_len, + false => excess, + } as usize + ]; self.first.read_exact(&mut first)?; sec.read_exact(&mut second)?; first.append(&mut second); From 8d4c03fc12d82858ad678c7b40ab02417626f12e Mon Sep 17 00:00:00 2001 From: spuds <71292624+bananaturtlesandwich@users.noreply.github.com> Date: Wed, 10 Apr 2024 22:18:20 +0100 Subject: [PATCH 10/14] unreal_asset: remove redundant imports --- unreal_asset/unreal_asset_properties/src/array_property.rs | 2 -- unreal_asset/unreal_asset_properties/src/cloth_lod_property.rs | 2 -- unreal_asset/unreal_asset_properties/src/color_property.rs | 2 +- unreal_asset/unreal_asset_properties/src/date_property.rs | 2 -- unreal_asset/unreal_asset_properties/src/delegate_property.rs | 2 -- unreal_asset/unreal_asset_properties/src/empty_property.rs | 2 -- unreal_asset/unreal_asset_properties/src/enum_property.rs | 2 -- .../unreal_asset_properties/src/float_range_property.rs | 2 -- .../unreal_asset_properties/src/font_character_property.rs | 2 -- .../src/game_framework/unique_net_id_property.rs | 2 -- .../src/gameplay_tag_container_property.rs | 2 -- unreal_asset/unreal_asset_properties/src/guid_property.rs | 2 -- unreal_asset/unreal_asset_properties/src/int_property.rs | 2 -- unreal_asset/unreal_asset_properties/src/map_property.rs | 2 +- .../unreal_asset_properties/src/material_input_property.rs | 2 -- unreal_asset/unreal_asset_properties/src/movies/mod.rs | 2 -- .../src/movies/movie_scene_eval_template_ptr_property.rs | 2 -- .../src/movies/movie_scene_evaluation.rs | 1 - .../movies/movie_scene_evaluation_field_entity_tree_property.rs | 2 -- .../src/movies/movie_scene_evaluation_key_property.rs | 2 -- unreal_asset/unreal_asset_properties/src/object_property.rs | 2 -- .../src/slate_core/font_data_property.rs | 2 -- 22 files changed, 2 insertions(+), 41 deletions(-) diff --git a/unreal_asset/unreal_asset_properties/src/array_property.rs b/unreal_asset/unreal_asset_properties/src/array_property.rs index e1348ef8..5c62eb09 100644 --- a/unreal_asset/unreal_asset_properties/src/array_property.rs +++ b/unreal_asset/unreal_asset_properties/src/array_property.rs @@ -1,7 +1,5 @@ //! Array property -use unreal_asset_base::types::PackageIndexTrait; - use crate::property_prelude::*; /// Array property diff --git a/unreal_asset/unreal_asset_properties/src/cloth_lod_property.rs b/unreal_asset/unreal_asset_properties/src/cloth_lod_property.rs index 177f1454..cb94c9b1 100644 --- a/unreal_asset/unreal_asset_properties/src/cloth_lod_property.rs +++ b/unreal_asset/unreal_asset_properties/src/cloth_lod_property.rs @@ -1,7 +1,5 @@ //! Cloth lod property -use unreal_asset_base::types::PackageIndexTrait; - use crate::property_prelude::*; use crate::vector_property::Vector4Property; diff --git a/unreal_asset/unreal_asset_properties/src/color_property.rs b/unreal_asset/unreal_asset_properties/src/color_property.rs index 33f87179..385646d7 100644 --- a/unreal_asset/unreal_asset_properties/src/color_property.rs +++ b/unreal_asset/unreal_asset_properties/src/color_property.rs @@ -1,6 +1,6 @@ //! Color properties -use unreal_asset_base::types::{vector::Color, PackageIndexTrait}; +use unreal_asset_base::types::vector::Color; use crate::property_prelude::*; diff --git a/unreal_asset/unreal_asset_properties/src/date_property.rs b/unreal_asset/unreal_asset_properties/src/date_property.rs index fbbb9cc9..bea001c1 100644 --- a/unreal_asset/unreal_asset_properties/src/date_property.rs +++ b/unreal_asset/unreal_asset_properties/src/date_property.rs @@ -1,7 +1,5 @@ //! Date properties -use unreal_asset_base::types::PackageIndexTrait; - use crate::property_prelude::*; /// Time span property diff --git a/unreal_asset/unreal_asset_properties/src/delegate_property.rs b/unreal_asset/unreal_asset_properties/src/delegate_property.rs index 55ad3fcf..a0934d79 100644 --- a/unreal_asset/unreal_asset_properties/src/delegate_property.rs +++ b/unreal_asset/unreal_asset_properties/src/delegate_property.rs @@ -1,7 +1,5 @@ //! Delegate properties -use unreal_asset_base::types::PackageIndexTrait; - use crate::property_prelude::*; /// Delegate diff --git a/unreal_asset/unreal_asset_properties/src/empty_property.rs b/unreal_asset/unreal_asset_properties/src/empty_property.rs index 9f955c5e..08b86b95 100644 --- a/unreal_asset/unreal_asset_properties/src/empty_property.rs +++ b/unreal_asset/unreal_asset_properties/src/empty_property.rs @@ -1,7 +1,5 @@ //! Empty unversioned property -use unreal_asset_base::types::PackageIndexTrait; - use crate::property_prelude::*; /// Empty unversioned property diff --git a/unreal_asset/unreal_asset_properties/src/enum_property.rs b/unreal_asset/unreal_asset_properties/src/enum_property.rs index 9654be3a..67abdeb0 100644 --- a/unreal_asset/unreal_asset_properties/src/enum_property.rs +++ b/unreal_asset/unreal_asset_properties/src/enum_property.rs @@ -1,7 +1,5 @@ //! Enum property -use unreal_asset_base::types::PackageIndexTrait; - use crate::property_prelude::*; /// Enum property diff --git a/unreal_asset/unreal_asset_properties/src/float_range_property.rs b/unreal_asset/unreal_asset_properties/src/float_range_property.rs index b6b524ed..4adf561d 100644 --- a/unreal_asset/unreal_asset_properties/src/float_range_property.rs +++ b/unreal_asset/unreal_asset_properties/src/float_range_property.rs @@ -1,7 +1,5 @@ //! Float range property -use unreal_asset_base::types::PackageIndexTrait; - use crate::property_prelude::*; /// Float range property diff --git a/unreal_asset/unreal_asset_properties/src/font_character_property.rs b/unreal_asset/unreal_asset_properties/src/font_character_property.rs index f2ca9118..6728e45a 100644 --- a/unreal_asset/unreal_asset_properties/src/font_character_property.rs +++ b/unreal_asset/unreal_asset_properties/src/font_character_property.rs @@ -1,7 +1,5 @@ //! Font character property -use unreal_asset_base::types::PackageIndexTrait; - use crate::property_prelude::*; /// Font character diff --git a/unreal_asset/unreal_asset_properties/src/game_framework/unique_net_id_property.rs b/unreal_asset/unreal_asset_properties/src/game_framework/unique_net_id_property.rs index 505c3d55..75764b6d 100644 --- a/unreal_asset/unreal_asset_properties/src/game_framework/unique_net_id_property.rs +++ b/unreal_asset/unreal_asset_properties/src/game_framework/unique_net_id_property.rs @@ -1,7 +1,5 @@ //! Unique network id property -use unreal_asset_base::types::PackageIndexTrait; - use crate::property_prelude::*; /// Unique network id diff --git a/unreal_asset/unreal_asset_properties/src/gameplay_tag_container_property.rs b/unreal_asset/unreal_asset_properties/src/gameplay_tag_container_property.rs index b8e9f44b..e963d48d 100644 --- a/unreal_asset/unreal_asset_properties/src/gameplay_tag_container_property.rs +++ b/unreal_asset/unreal_asset_properties/src/gameplay_tag_container_property.rs @@ -1,7 +1,5 @@ //! Gameplay tag container property -use unreal_asset_base::types::PackageIndexTrait; - use crate::property_prelude::*; /// Gameplay tag container property diff --git a/unreal_asset/unreal_asset_properties/src/guid_property.rs b/unreal_asset/unreal_asset_properties/src/guid_property.rs index d926c383..4e4088f4 100644 --- a/unreal_asset/unreal_asset_properties/src/guid_property.rs +++ b/unreal_asset/unreal_asset_properties/src/guid_property.rs @@ -1,7 +1,5 @@ //! Guid property -use unreal_asset_base::types::PackageIndexTrait; - use crate::property_prelude::*; /// Guid property diff --git a/unreal_asset/unreal_asset_properties/src/int_property.rs b/unreal_asset/unreal_asset_properties/src/int_property.rs index cf19b0dd..e3dd96f7 100644 --- a/unreal_asset/unreal_asset_properties/src/int_property.rs +++ b/unreal_asset/unreal_asset_properties/src/int_property.rs @@ -1,7 +1,5 @@ //! Int properties -use unreal_asset_base::types::PackageIndexTrait; - use crate::property_prelude::*; /// Implement a simple integer property diff --git a/unreal_asset/unreal_asset_properties/src/map_property.rs b/unreal_asset/unreal_asset_properties/src/map_property.rs index 09e3a717..7d6871a0 100644 --- a/unreal_asset/unreal_asset_properties/src/map_property.rs +++ b/unreal_asset/unreal_asset_properties/src/map_property.rs @@ -2,7 +2,7 @@ use std::hash::Hash; -use unreal_asset_base::{containers::indexed_map::IndexedMap, types::PackageIndexTrait}; +use unreal_asset_base::containers::indexed_map::IndexedMap; use crate::property_prelude::*; diff --git a/unreal_asset/unreal_asset_properties/src/material_input_property.rs b/unreal_asset/unreal_asset_properties/src/material_input_property.rs index 678b9664..aba95b2f 100644 --- a/unreal_asset/unreal_asset_properties/src/material_input_property.rs +++ b/unreal_asset/unreal_asset_properties/src/material_input_property.rs @@ -1,7 +1,5 @@ //! Material input property -use unreal_asset_base::types::PackageIndexTrait; - use crate::color_property::ColorProperty; use crate::property_prelude::*; use crate::vector_property::{Vector2DProperty, VectorProperty}; diff --git a/unreal_asset/unreal_asset_properties/src/movies/mod.rs b/unreal_asset/unreal_asset_properties/src/movies/mod.rs index c8ea241b..82d7c531 100644 --- a/unreal_asset/unreal_asset_properties/src/movies/mod.rs +++ b/unreal_asset/unreal_asset_properties/src/movies/mod.rs @@ -1,7 +1,5 @@ //! Unreal movies -use unreal_asset_base::types::PackageIndexTrait; - use crate::property_prelude::*; use crate::rich_curve_key_property::RichCurveTangentWeightMode; diff --git a/unreal_asset/unreal_asset_properties/src/movies/movie_scene_eval_template_ptr_property.rs b/unreal_asset/unreal_asset_properties/src/movies/movie_scene_eval_template_ptr_property.rs index 2c288233..1a43da5a 100644 --- a/unreal_asset/unreal_asset_properties/src/movies/movie_scene_eval_template_ptr_property.rs +++ b/unreal_asset/unreal_asset_properties/src/movies/movie_scene_eval_template_ptr_property.rs @@ -1,7 +1,5 @@ //! Movie scene evaluation template pointer property -use unreal_asset_base::types::PackageIndexTrait; - use crate::property_prelude::*; /// Movie scene evaluation template pointer property diff --git a/unreal_asset/unreal_asset_properties/src/movies/movie_scene_evaluation.rs b/unreal_asset/unreal_asset_properties/src/movies/movie_scene_evaluation.rs index 056c6255..9479bd06 100644 --- a/unreal_asset/unreal_asset_properties/src/movies/movie_scene_evaluation.rs +++ b/unreal_asset/unreal_asset_properties/src/movies/movie_scene_evaluation.rs @@ -4,7 +4,6 @@ use std::fmt::Debug; use std::hash::Hash; use unreal_asset_base::types::movie::FFrameNumberRange; -use unreal_asset_base::types::PackageIndexTrait; use crate::property_prelude::*; diff --git a/unreal_asset/unreal_asset_properties/src/movies/movie_scene_evaluation_field_entity_tree_property.rs b/unreal_asset/unreal_asset_properties/src/movies/movie_scene_evaluation_field_entity_tree_property.rs index d0eb2a29..aaac41c1 100644 --- a/unreal_asset/unreal_asset_properties/src/movies/movie_scene_evaluation_field_entity_tree_property.rs +++ b/unreal_asset/unreal_asset_properties/src/movies/movie_scene_evaluation_field_entity_tree_property.rs @@ -1,7 +1,5 @@ //! Movie scene evaluation field entity tree property -use unreal_asset_base::types::PackageIndexTrait; - use crate::property_prelude::*; use super::movie_scene_evaluation::MovieSceneEvaluationFieldEntityTree; diff --git a/unreal_asset/unreal_asset_properties/src/movies/movie_scene_evaluation_key_property.rs b/unreal_asset/unreal_asset_properties/src/movies/movie_scene_evaluation_key_property.rs index 328e1a93..647a7aba 100644 --- a/unreal_asset/unreal_asset_properties/src/movies/movie_scene_evaluation_key_property.rs +++ b/unreal_asset/unreal_asset_properties/src/movies/movie_scene_evaluation_key_property.rs @@ -1,7 +1,5 @@ //! Movie scene evaluation key property -use unreal_asset_base::types::PackageIndexTrait; - use crate::property_prelude::*; use super::movie_scene_sequence_id_property::MovieSceneSequenceId; diff --git a/unreal_asset/unreal_asset_properties/src/object_property.rs b/unreal_asset/unreal_asset_properties/src/object_property.rs index 732de674..ee4a0377 100644 --- a/unreal_asset/unreal_asset_properties/src/object_property.rs +++ b/unreal_asset/unreal_asset_properties/src/object_property.rs @@ -1,7 +1,5 @@ //! Object properties -use unreal_asset_base::object_version::ObjectVersionUE5; - use crate::property_prelude::*; /// Object property diff --git a/unreal_asset/unreal_asset_properties/src/slate_core/font_data_property.rs b/unreal_asset/unreal_asset_properties/src/slate_core/font_data_property.rs index a003f221..c829ac8f 100644 --- a/unreal_asset/unreal_asset_properties/src/slate_core/font_data_property.rs +++ b/unreal_asset/unreal_asset_properties/src/slate_core/font_data_property.rs @@ -1,7 +1,5 @@ //! Font data property -use unreal_asset_base::custom_version::FEditorObjectVersion; - use crate::property_prelude::*; /// Font hinting From e8154e613fbafc24bf53ee37d56a75592b813c3c Mon Sep 17 00:00:00 2001 From: spuds <71292624+bananaturtlesandwich@users.noreply.github.com> Date: Wed, 10 Apr 2024 22:39:28 +0100 Subject: [PATCH 11/14] unreal_asset: fix clippy warnings --- .../unreal_asset_base/src/compression/mod.rs | 14 ++-- .../src/containers/indexed_map/mod.rs | 12 +--- .../unreal_asset_base/src/types/fname.rs | 5 -- .../unreal_asset_base/src/types/mod.rs | 6 +- .../unreal_asset_base/src/unversioned/mod.rs | 8 +-- .../src/unversioned/properties/mod.rs | 66 +++++++++---------- .../src/enum_property.rs | 2 +- .../src/objects/depends_node.rs | 12 ++-- 8 files changed, 54 insertions(+), 71 deletions(-) diff --git a/unreal_asset/unreal_asset_base/src/compression/mod.rs b/unreal_asset/unreal_asset_base/src/compression/mod.rs index d0255fe4..e7d7e68b 100644 --- a/unreal_asset/unreal_asset_base/src/compression/mod.rs +++ b/unreal_asset/unreal_asset_base/src/compression/mod.rs @@ -35,14 +35,14 @@ impl CompressionMethod { } } -impl ToString for CompressionMethod { - fn to_string(&self) -> String { +impl std::fmt::Display for CompressionMethod { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { - CompressionMethod::None => String::from("None"), - CompressionMethod::Zlib => String::from("Zlib"), - CompressionMethod::Gzip => String::from("Gzip"), - CompressionMethod::Lz4 => String::from("LZ4"), - CompressionMethod::Unknown(e) => e.to_string(), + CompressionMethod::None => f.write_str("None"), + CompressionMethod::Zlib => f.write_str("Zlib"), + CompressionMethod::Gzip => f.write_str("Gzip"), + CompressionMethod::Lz4 => f.write_str("LZ4"), + CompressionMethod::Unknown(e) => write!(f, "{e}"), } } } diff --git a/unreal_asset/unreal_asset_base/src/containers/indexed_map/mod.rs b/unreal_asset/unreal_asset_base/src/containers/indexed_map/mod.rs index eb77ebcd..0a6d8072 100644 --- a/unreal_asset/unreal_asset_base/src/containers/indexed_map/mod.rs +++ b/unreal_asset/unreal_asset_base/src/containers/indexed_map/mod.rs @@ -695,11 +695,7 @@ where /// references to it, the Some((index, key, value)) pair is returned, /// otherwise, None is returned. pub fn remove_by_index(&mut self, index: usize) -> Option<(usize, K, V)> { - let Some(store_place) = self.index_map.get(&index) else { - return None; - }; - - self.remove_by_store_place(*store_place) + self.remove_by_store_place(*self.index_map.get(&index)?) } /// Removes a value by key @@ -711,11 +707,7 @@ where KeyItem: Borrow, Q: Hash + Eq + ?Sized, { - let Some(store_place) = self.key_map.get(key) else { - return None; - }; - - self.remove_by_store_place(*store_place) + self.remove_by_store_place(*self.key_map.get(key)?) } pub fn contains_key(&self, key: &K) -> bool { diff --git a/unreal_asset/unreal_asset_base/src/types/fname.rs b/unreal_asset/unreal_asset_base/src/types/fname.rs index b99ac5db..5da31691 100644 --- a/unreal_asset/unreal_asset_base/src/types/fname.rs +++ b/unreal_asset/unreal_asset_base/src/types/fname.rs @@ -243,11 +243,6 @@ impl std::cmp::PartialEq<&str> for FName { } } -impl std::cmp::PartialEq for FName { - fn eq(&self, other: &String) -> bool { - self == other - } -} /// A trait that can be implemented for structs that contain an FName /// /// This trait will be typically used to traverse the whole asset FName tree diff --git a/unreal_asset/unreal_asset_base/src/types/mod.rs b/unreal_asset/unreal_asset_base/src/types/mod.rs index cf32e700..f202f243 100644 --- a/unreal_asset/unreal_asset_base/src/types/mod.rs +++ b/unreal_asset/unreal_asset_base/src/types/mod.rs @@ -116,9 +116,9 @@ impl PackageIndexTrait for PackageIndex { } } -impl ToString for PackageIndex { - fn to_string(&self) -> String { - self.index.to_string() +impl std::fmt::Display for PackageIndex { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{}", self.index) } } diff --git a/unreal_asset/unreal_asset_base/src/unversioned/mod.rs b/unreal_asset/unreal_asset_base/src/unversioned/mod.rs index f0cbd490..af9e4f6e 100644 --- a/unreal_asset/unreal_asset_base/src/unversioned/mod.rs +++ b/unreal_asset/unreal_asset_base/src/unversioned/mod.rs @@ -220,13 +220,9 @@ impl Usmap { } // this name is not an actual property name, but an array index - let Ok(_) = property_name.get_content(|name| name.parse::()) else { - return None; - }; + let _ = property_name.get_content(|name| name.parse::()); - let Some(parent) = ancestry.get_parent() else { - return None; - }; + let parent = ancestry.get_parent()?; self.get_property_with_duplication_index( parent, diff --git a/unreal_asset/unreal_asset_base/src/unversioned/properties/mod.rs b/unreal_asset/unreal_asset_base/src/unversioned/properties/mod.rs index 627e1404..9b077e0f 100644 --- a/unreal_asset/unreal_asset_base/src/unversioned/properties/mod.rs +++ b/unreal_asset/unreal_asset_base/src/unversioned/properties/mod.rs @@ -90,39 +90,39 @@ pub enum EPropertyType { Unknown = 0xFF, } -impl ToString for EPropertyType { - fn to_string(&self) -> String { - match *self { - EPropertyType::ByteProperty => "ByteProperty".to_string(), - EPropertyType::BoolProperty => "BoolProperty".to_string(), - EPropertyType::IntProperty => "IntProperty".to_string(), - EPropertyType::FloatProperty => "FloatProperty".to_string(), - EPropertyType::ObjectProperty => "ObjectProperty".to_string(), - EPropertyType::NameProperty => "NameProperty".to_string(), - EPropertyType::DelegateProperty => "DelegateProperty".to_string(), - EPropertyType::DoubleProperty => "DoubleProperty".to_string(), - EPropertyType::ArrayProperty => "ArrayProperty".to_string(), - EPropertyType::StructProperty => "StructProperty".to_string(), - EPropertyType::StrProperty => "StrProperty".to_string(), - EPropertyType::TextProperty => "TextProperty".to_string(), - EPropertyType::InterfaceProperty => "InterfaceProperty".to_string(), - EPropertyType::MulticastDelegateProperty => "MulticastDelegateProperty".to_string(), - EPropertyType::WeakObjectProperty => "WeakObjectProperty".to_string(), - EPropertyType::LazyObjectProperty => "LazyObjectProperty".to_string(), - EPropertyType::AssetObjectProperty => "AssetObjectProperty".to_string(), - EPropertyType::SoftObjectProperty => "SoftObjectProperty".to_string(), - EPropertyType::UInt64Property => "UInt64Property".to_string(), - EPropertyType::UInt32Property => "UInt32Property".to_string(), - EPropertyType::UInt16Property => "UInt16Property".to_string(), - EPropertyType::Int64Property => "Int64Property".to_string(), - EPropertyType::Int16Property => "Int16Property".to_string(), - EPropertyType::Int8Property => "Int8Property".to_string(), - EPropertyType::MapProperty => "MapProperty".to_string(), - EPropertyType::SetProperty => "SetProperty".to_string(), - EPropertyType::EnumProperty => "EnumProperty".to_string(), - EPropertyType::FieldPathProperty => "FieldPathProperty".to_string(), - EPropertyType::Unknown => "Unknown".to_string(), - } +impl std::fmt::Display for EPropertyType { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.write_str(match *self { + EPropertyType::ByteProperty => "ByteProperty", + EPropertyType::BoolProperty => "BoolProperty", + EPropertyType::IntProperty => "IntProperty", + EPropertyType::FloatProperty => "FloatProperty", + EPropertyType::ObjectProperty => "ObjectProperty", + EPropertyType::NameProperty => "NameProperty", + EPropertyType::DelegateProperty => "DelegateProperty", + EPropertyType::DoubleProperty => "DoubleProperty", + EPropertyType::ArrayProperty => "ArrayProperty", + EPropertyType::StructProperty => "StructProperty", + EPropertyType::StrProperty => "StrProperty", + EPropertyType::TextProperty => "TextProperty", + EPropertyType::InterfaceProperty => "InterfaceProperty", + EPropertyType::MulticastDelegateProperty => "MulticastDelegateProperty", + EPropertyType::WeakObjectProperty => "WeakObjectProperty", + EPropertyType::LazyObjectProperty => "LazyObjectProperty", + EPropertyType::AssetObjectProperty => "AssetObjectProperty", + EPropertyType::SoftObjectProperty => "SoftObjectProperty", + EPropertyType::UInt64Property => "UInt64Property", + EPropertyType::UInt32Property => "UInt32Property", + EPropertyType::UInt16Property => "UInt16Property", + EPropertyType::Int64Property => "Int64Property", + EPropertyType::Int16Property => "Int16Property", + EPropertyType::Int8Property => "Int8Property", + EPropertyType::MapProperty => "MapProperty", + EPropertyType::SetProperty => "SetProperty", + EPropertyType::EnumProperty => "EnumProperty", + EPropertyType::FieldPathProperty => "FieldPathProperty", + EPropertyType::Unknown => "Unknown", + }) } } diff --git a/unreal_asset/unreal_asset_properties/src/enum_property.rs b/unreal_asset/unreal_asset_properties/src/enum_property.rs index 67abdeb0..f292a187 100644 --- a/unreal_asset/unreal_asset_properties/src/enum_property.rs +++ b/unreal_asset/unreal_asset_properties/src/enum_property.rs @@ -129,7 +129,7 @@ impl PropertyTrait for EnumProperty { Some(value) => info .iter() .enumerate() - .find(|(_, e)| value == *e) + .find(|(_, e)| value == e.as_str()) .map(|(index, _)| index as u8) .ok_or_else(|| { Error::invalid_file( diff --git a/unreal_asset/unreal_asset_registry/src/objects/depends_node.rs b/unreal_asset/unreal_asset_registry/src/objects/depends_node.rs index 50328646..4430fda6 100644 --- a/unreal_asset/unreal_asset_registry/src/objects/depends_node.rs +++ b/unreal_asset/unreal_asset_registry/src/objects/depends_node.rs @@ -159,7 +159,7 @@ impl DependsNode { /// Read `DependsNode` dependencies fn read_dependencies>( asset: &mut Reader, - preallocated_depends_node_buffer: &Vec, + preallocated_depends_node_buffer: &[DependsNode], flag_set_width: i32, ) -> Result { let mut sort_indexes = Vec::new(); @@ -244,8 +244,8 @@ impl DependsNode { writer: &mut Writer, flag_set_width: i32, flags: &BitVec, - hard_dependencies: &Vec, - soft_dependencies: &Vec, + hard_dependencies: &[DependsNode], + soft_dependencies: &[DependsNode], ) -> Result<(), Error> { let dependencies_length = hard_dependencies.len() as i32 + soft_dependencies.len() as i32; let mut out_flag_bits = BitVec::::new(); @@ -301,7 +301,7 @@ impl DependsNode { /// Read `DependsNode` dependencies without flags fn read_dependencies_no_flags>( asset: &mut Reader, - preallocated_depends_node_buffer: &Vec, + preallocated_depends_node_buffer: &[DependsNode], ) -> Result, Error> { let mut pointer_dependencies = Vec::new(); let in_dependencies = asset.read_array(|asset: &mut Reader| Ok(asset.read_i32::()?))?; @@ -341,7 +341,7 @@ impl DependsNode { /// Write `DependsNode` dependencies without flags fn write_dependencies_no_flags>( writer: &mut Writer, - dependencies: &Vec, + dependencies: &[DependsNode], ) -> Result<(), Error> { writer.write_i32::(dependencies.len() as i32)?; for dependency in dependencies { @@ -371,7 +371,7 @@ impl DependsNode { pub fn load_dependencies>( &mut self, asset: &mut Reader, - preallocated_depends_node_buffer: &Vec, + preallocated_depends_node_buffer: &[DependsNode], ) -> Result<(), Error> { let identifier = AssetIdentifier::new(asset)?; From 631dcc63e5031fda77cda2505ed26b326bdda5ab Mon Sep 17 00:00:00 2001 From: spuds <71292624+bananaturtlesandwich@users.noreply.github.com> Date: Wed, 10 Apr 2024 22:50:15 +0100 Subject: [PATCH 12/14] allow unused_io_amount --- unreal_asset/unreal_asset_base/src/containers/chain.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/unreal_asset/unreal_asset_base/src/containers/chain.rs b/unreal_asset/unreal_asset_base/src/containers/chain.rs index 73aaf323..46529497 100644 --- a/unreal_asset/unreal_asset_base/src/containers/chain.rs +++ b/unreal_asset/unreal_asset_base/src/containers/chain.rs @@ -36,6 +36,8 @@ impl Chain { } impl Read for Chain { + // this is an implementation of read so clippy complaining about use of read is stupid + #[allow(clippy::unused_io_amount)] fn read(&mut self, buf: &mut [u8]) -> Result { match self.second.as_mut() { Some(sec) => { From c7196787e9a8f9b60d07cff48bf4f6504cb883f0 Mon Sep 17 00:00:00 2001 From: spuds <71292624+bananaturtlesandwich@users.noreply.github.com> Date: Wed, 10 Apr 2024 22:56:20 +0100 Subject: [PATCH 13/14] unreal_mod_integrator: fix clippy warnings --- unreal_mod_integrator/build.rs | 1 + unreal_mod_integrator/src/lib.rs | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/unreal_mod_integrator/build.rs b/unreal_mod_integrator/build.rs index 5aa0552b..06c54651 100644 --- a/unreal_mod_integrator/build.rs +++ b/unreal_mod_integrator/build.rs @@ -50,6 +50,7 @@ fn download_release(out_dir: &Path) { .write(true) .read(true) .create(true) + .truncate(true) .open(project_dir.join(file_name)) .expect("Could not open file"); diff --git a/unreal_mod_integrator/src/lib.rs b/unreal_mod_integrator/src/lib.rs index d514f310..f2668ac1 100644 --- a/unreal_mod_integrator/src/lib.rs +++ b/unreal_mod_integrator/src/lib.rs @@ -191,7 +191,7 @@ fn bake_mod_data(asset: &mut Asset>, mods: &Vec) -> Resu let tab = data_table_export .table .data - .get(0) + .first() .ok_or_else(IntegrationError::corrupted_starter_pak)?; let struct_type = tab.struct_type.clone(); let columns: Vec = tab.value.iter().map(|e| e.get_name()).collect(); From 471a7af26eb65607a085ed8c09f0900040c02f86 Mon Sep 17 00:00:00 2001 From: spuds <71292624+bananaturtlesandwich@users.noreply.github.com> Date: Wed, 10 Apr 2024 23:07:50 +0100 Subject: [PATCH 14/14] unreal_cpp_bootstrapper: fix clippy warnings --- unreal_cpp_bootstrapper/build.rs | 2 ++ unreal_cpp_bootstrapper/src/lib.rs | 1 + unreal_mod_manager/src/game_platform_managers/proton.rs | 1 + 3 files changed, 4 insertions(+) diff --git a/unreal_cpp_bootstrapper/build.rs b/unreal_cpp_bootstrapper/build.rs index e8e82502..a8a06120 100644 --- a/unreal_cpp_bootstrapper/build.rs +++ b/unreal_cpp_bootstrapper/build.rs @@ -86,6 +86,7 @@ fn download(mod_loader_dir: &PathBuf) -> Result<(PathBuf, PathBuf), Box Result<(PathBuf, PathBuf), Box for Pr let file = std::fs::OpenOptions::new() .create(true) .write(true) + .truncate(true) .open(registry_path)?; let mut writer = std::io::BufWriter::new(file);