From 8a05711e998131b6c1e66c6812ca43606db8f07b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Novomesk=C3=BD?= Date: Wed, 15 Jan 2025 18:59:44 +0100 Subject: [PATCH] jxl: refactor image loading --- CMakeLists.txt | 6 +- .../write/format/jxl/Format_CMYK8888.jxl | Bin 97561 -> 3523 bytes src/imageformats/CMakeLists.txt | 11 +- src/imageformats/jxl.cpp | 428 +++++++++++++++--- src/imageformats/jxl_p.h | 4 +- 5 files changed, 376 insertions(+), 73 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9a9a11b..17dc5a7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -72,9 +72,9 @@ add_feature_info(LibHeif LibHeif_FOUND "required for the QImage plugin for HEIF/ option(KIMAGEFORMATS_JXL "Enable plugin for JPEG XL format" ON) if(KIMAGEFORMATS_JXL) - pkg_check_modules(LibJXL IMPORTED_TARGET libjxl>=0.7.0) - pkg_check_modules(LibJXLThreads IMPORTED_TARGET libjxl_threads>=0.7.0) - pkg_check_modules(LibJXLCMS IMPORTED_TARGET libjxl_cms>=0.9.0) + pkg_check_modules(LibJXL IMPORTED_TARGET libjxl>=0.9.4) + pkg_check_modules(LibJXLThreads IMPORTED_TARGET libjxl_threads>=0.9.4) + pkg_check_modules(LibJXLCMS IMPORTED_TARGET libjxl_cms>=0.9.4) endif() add_feature_info(LibJXL LibJXL_FOUND "required for the QImage plugin for JPEG XL images") diff --git a/autotests/write/format/jxl/Format_CMYK8888.jxl b/autotests/write/format/jxl/Format_CMYK8888.jxl index fd68a735ea67c65d4a469aa16e6aeaef2896a3b1..a67f93e5b04668596b04212316d3d25cf291f2b7 100644 GIT binary patch delta 26 icmbRFi}kSd1VtVO-o;rJIm!RI!W~q$H|H}>;{^bS%?YLe delta 94802 zcmV(xKyd zEidCu6P8J*+}U)NVHw)Z(lKJGG&h6X5sN$&oyHbT(-BS6w1ub$p@>THEUrZ%6j7;M zgb-y#R-TnYE4P1ph0<=1Cxg9N*H+5KWb$WB;@FtwiG9zZlee;$l2Vky;j1CEjgJST zhCasgbB2ffBEs;{$s_V}8q{)oP-JPksX^VxgA-$uf=Q*I&VU2$y_CFmUj>WB%b}6! z@MZL~{|@}!dkO5l0u7Y8%5`eXgug)a$uC9x9^VT(o6&z1h~BhE&(QO^fd%x}a$o=Y zl?BF5F4!?Ck!W$BTm%q@6SqLfG#$_K({5{hV)Cd}CWXkO zQ7<0A*4MRET)T7gg_?YYNhMl<2b4iQ)Imx4SGh@-DTWSE1NBlNMN=h3{+A#8e=9et zqSAA~P@;dADaEP-pD)NtRH_5|v;*37y-$8XlW%ZZlscj5fF;XgvM4nsrC#n?AS|p2 z%+mCmns0o$Q7boo)=o2BTKM5J|M%ng5Ar|I4}{y4O_R~uuYp(2i~o{-@4X}5u(!_V z?Nj`z{G@&ihryw4$Qb0u!!c|mj%wf6FX#*Sl7D}FC)rd#Wlc7-u37jDdL}#HoG+iF z<|>OHi_%5qB6VT8Y+jZwW0n@H(^cpSyV6{LUSrpswaBJ@T)3&+q;4Fy&D+v#&emh6 zV2dV+dLJ@h@EUG-hT zU5H&WUEY0yzM?*IpIql#XF+FmXGEuN?}vY0M6azktJk1=uX|~?zniq%s{gz{sGrnN z-)}n5G7vt1IiNIPKO!5c9Knxh4!sT)4;2k14e5{Vj4d7WkFkzf4R!>hf~=rI&^FpQ zS~AKVRU3W_mxSxXAz|tG#`v;v^El7z397FANe0PYnNl{=&-E~!riB8y2X`}g$ z`M`PLywHLcP_&?CLD~YJ6+IQP6{vp|awRV%kP>qVZHZycP)$+|zDBudyJ&S0r%0j5 zyh>aJR7F*}l%1DFmO;zp>R#(Gb@n>qI?ux9!otFgLiNgn%9u)ArBLZxX>n;~X=tfm z?NDt}Ex%T}c&|917*?!P{j<8Xy0AL4+OB-4JgYpQT)Te1KBOL3uhj6X0nmR?+rZmk z+0ool+L6-X&~nle*aB@4?0MgV>tXcp_josnn~8z|w8WwFFvh zJvtA9N5}NR#9{)Q)Lnh9Ojn-E)uyu{*mQg!eLOz2&%oGi%r<5kt(^u=9H*Lf#~N#8 zuo`*CYs+fWi+>eki;>03)g9G&)p^yn<=S$Ta zq+_H6Bo-tus0&aOR5n)I0)@rG5(L`?iv=S9vq2j}t3ZoIGl#Q)w9Sx3#LBmhu%_HZ5cmjFMh(?IAh!Tk8nGTu4n3zm@R3E5-R1hiw zDt9go7sVCHWk)tdmPQsqrq6cF7RSb9)1!M&2c(103DBAIDfl41Kt40V0m3B0077xb z1I8dmAfp)N3nhpWK*>$%%PHfm=gi{tA?+d!Cxs@JW!-;dUCl~jRiXVsTS!|-8%pcP zJI0&G8^J42d`KKcOe9ugeqjbN`kF5Dg5!Q8mqn&h9zq2v^D0djM8 zIXl80$L>VmNgq!SO)ty8#lM)J!!N<_E?^;m5s*^&tiYqdRS=ixkVuk9l5o?wqCsgS zYuJmJh+uz2q*Oksu&7{Fq-9QJQe;wOoODKYDs)11jD?g!^+Fm-f0Up~G$lc)9jQ1e zw3ND5hgOnSj+T|!s93&Oq?oIkLXA~pmuquk_s7w?RjTJRk)u?~6s^qHfvU*tnSq0rUU63wCS4Q}+ zFi@BzET#Nj8LUiGR+IiDjhE(03uRrx*nD0!;9 zs{WpSls;8o)!@V+-C%;ljzgY9w8cjYehW&EUmkoOQ6A7T!NgFsD z1D}6OJ|;f0MgvBrM#G#=o${R~SZ!M+S;cz2cyW4Vd6}D8oAJ#I-B!3E-8}5B+S%CY z`VIJ1`b{!CG|V*&cl=1?Ceji8E$xv3NJHidCXwj?y#%#@N>aP1HPji{ZEOxUll#Wy z;YM&R!6slN*nxb7>_8SoccAmp`Rq?@ZZ>}#+Z=8SN5ie?Gjt=mF1{OIg&)G-=4bE; z`TmVtltl~BShVZw=j-k(GQW4{%TD0W`^kIq8|cmX*8jZwJpPn?XdmW}$*?g@4v7PF z;2*rk{c+8xAK9bM==rVqF8&(7Az#6-`_wW;O^AtZ(w_aDJ)9NH&}P&#oB8&9!90I? zPM*umJr@;=)eGw)XCb=$ksZX`CDM|1>9N{aO|NoS;FZkEb6vAuzc#O_*1DVDn`fJf z4Q@levDzMNmu*ekh^^q(ey4F`>IP|pcf)0Cduz#-VT-?|wq?HAv>Ca{*`(cc+1}n> zvhCOo*p}ON-)Y>Ly92euykoStzqfyG&$gGcC%XG<_t|dAE^=34*KxmMKVaX#&$q9C z@adrVApHP;Aa`JY)O_X+#z`;z)hI?p>JJE5I=z3+Nay?|csUfXU-cX4-4w?+SHe`G(jUvS|4 z0B!&=KtEtTA|4?|(ng$ydWSNG=tIh5dt(t}xG|~0KS4~;ALI@iN2R00XxymRaDO-{ zoDi0eACCu)Q^z$gYzV6bmLPwm{82y(LE%^2pB+f0lq$CaMdDYn$$ z!-lHb{NmSQo??8lQT3&2x>~1vvpl$*r`)k#Sr1dM*l^O2){xj>-eJ~3>=1A1Zz*X> z?|JFr>B09nHC=4to1}lb_PR2>5FfC*T~iw(dgGX*NM|9+S<{Y z-J0C{CzdCcA8Qso6KoT#8Ql?`9-STj63!N$5$+hTjt7gEPUuf4Nr=yQRd6X16mF6k ziHk&0bE-+z#ERZTcoAG=q`IoIQ0d7|WSO#9-J6a4wl>Kuj)PYiiQqDx*^^1-offfa`;-zEL4k$ z=hDZ`1x@FsbW^F1--OS|r)%st)*0tGcb#d@SnD4vn>EI2>ou$8 z*7_7*FZL-Gt{#7=uB@I^epsGbo?ZW;p1Yo{-X5R>Km>p(f*ArB!3ts)0uRCf;}V7m zhAhYcNGZrLlv9*^lnF4~Fj+9UIIlRYIAJ*UKplV*fIN|`kg!NbP*YG~Q0iFYSO{2> zV4Yx9U~|xp&{EOD;Xc9f!!hFh#ACus!Se+)1VjUxA>Df-YznL|t|2ZN*9&+O7!6n-`2w;7vLtjTbQSa%?0xJ+>}c@! z;LPA`;P&YD=mF@C@Fws~coY1q_%`^u1RVq!1Q7%t44n*F3^5Eo6ay5Q6j2mj9HSiR z9C;juBv*e(5Ryz1R~9h~#}drqOrxVIreUY?=P}?x;L#xZMFb<_5D788W5P1gnB=H7 zs3NGCRH|INT!CCMoXG)_6v4bliwCaHfY>n>{?E16ZA_JlT?7M|9Cw}&@} zH-y)PxSu$YIEmPcd62o9Igi zTA-Susx13a79s1BO_EjD-MHP@sGFrLFT5$dO4ulzB`mMJrMyVlryQj$F8x^=A#IY5 zkrvi|uU)F0ubrT+DgI0Rv3Q|4SzJrpT)kO+zB-_~g1V=CT4_4W3J_rczQ!QamE&ce>bPN&|k-q>EyUa{`q z-NoH?-GSXs{eAtx{iywN11|%J0qa2MfZIs_NX7_yM0DuW5N?Pt#69FX);^XwmNBM2 zcn}N;!h$lN6l%JB}Gw7&pHl7Z4#$FjD%Icm-NfmA0hC z5=hdJ{AD_=OpDa)#335wl3P>ZmHX3ct#tthX$) zEUe70?ou69m;6z+z7V5Ort-BCT?wqzEZr{+Eyb5Q)b`dU)`r#k6<;gHild9&t1YS_ z)k5VT%JJpQa@~LW!}{=gih7%dk%sJ#d%JchI^Yh0mR~Kv7T9O7-{}eLf%h0Rbv7k7 zg*6#=UF-t8!rNLFsEyR7*0K%=>|_^ZsBD7nuMVwa>ZFAo!Zcx;&{L^W0w{H)AEiuE zwA4X6piS4NYR$zqVv<-;y{`^ev#8DF*W{>tg8oI1*JJhShE7AWA=6;(FmaF^f|dhI zyoJYN=ed9Ep*)nGPs{`*>Lf= zHo$+wz!-2m@*iY4G8S1Lx*IwjIu_a<+YB3rEen1Mo(3KVZi}u)M?qJE--C~aXMuOS zxd7vf5WFKm5`YL~7=AN=7!V8!4E_{qied_G3TF-l2gi}hVM-z*AxQE_+*k%#N?DRv zd}z99l4vq$9C$i-!g;`Xw26+00*SChs!V^|Oc6}Ln++eRuv8=}9j@P8AT9)#0GB

%EquIviZ@C(&f@6(fRQ8^5yU)@aYqt5rz_i31t~~7(;Gfu15Ku5_$7M zg!3mSfU}&Fo70(8P70AmlKQcZvgWb|vD(n~(PrEoggEaJZx}C>SCRNLF_@S{tiyl& ziy3hb~&^*_S z)`Zp+7TpsK5e15>slHRisX|m0RPAMTvW2p#vX;8dy0yANx+cOs!qLLW!m@wLo65_T zQOYvXKc$PMOQmC_9kpAvGqpps4aASdkMld5ur+t5?;D`DLtq7}BD{C*k7l@aV*+(-LGpw1m+qqkgTacTX z-32?yF4)f8&%h7FPsi}RA>I&aDC>B%d_4it1KE#EMW(I6{u&cwCNs^UYA6C!g!+ey zq_U`T*bQt57K+v79&uy2=v;kp4>$!J0=6L!kTc0yWHa>e^80~kOSXTE4Y5<%ws1Kd zgeSwT=_-0Hot$ot*W#=3^mu#zG{2tD&-ZWapgCyO*V!xSmG$y`tKJB2rO(DE@WcQ3 z4C6!D5I_D&m#2>E-`;QbH#Pmc)kK?AXJ@mlS=!7tRSq+kTkJ357eoug<;>DyDYe>M z#jZ$JX6vhKe66$D*hGJBA~s&zi(7gtv-5d_aU)^FYU|<_y(P1`ar^6xO|$LG+x)iD z&gM?=4$Y3?-proIp4#sIZpLobuIoL#N7~msI6Fu@h&(VqGCLw3X&?3;792(&|Gr1{ z=wp|Y@msl5&Nj|M&r;3|Pv=fyP8H8j&hySA&)qwWI#?ZwJqLe1@jWa(W?k31(5?x6 zFMasiUDZ1~J99fDJDqzCdU1O7x_7&yyIH!;`Y-mg{SpK323Q8j0}dl2BLySDL+uoB zh&QA=c0QIjmN(`*s1E`K1)~R}38O@#j`wigAuJW&9FHC67&p6cQJ@7G<&(mv1Sn3@ zB?*;gXdg5#jjw+hiC08aoS}Yrs*$f6$(LkSR?$D{jCzFbmAIPV6GEBIrz_HA3{z86 zAX9R42e)5MoAaHtm}E`L&UVb^&ZbVc^U!JPw88w)eAWDb1@9K%7f=^SuQ;#Bs)(vE zEV=wqpF+*w8gLD=M!4v-D5)r_$nZ1rhN~pXUdr%g)G~kVx~|Wl8dv99s4IjhRI2=3 z$yQ0P^e7!FttbsH^*=Bk8adl15AYbFF{0EUlt=UmPvw5Id>I)m7?n`A<1e zj+3kEkM$Y)AibU8qJcFiI9?oh2h|~N>9b^hhSa_uwFku`X4*D|ni5P#u5nkLE8h0o zhPFX%;=ay5x*f_W={$7iIJ2CdR-F~YD(2m(jjm;>wJW|{%oht)Z&gQDM^t;2Uo5A~ zb?SdN>LYKrGXod{$h!w!d4!`|bwmU;h*t;{1Ob8_!Wlz~L13g|Sb=ndq=4{2v{4RF zqELt^axm{~e)g%^tF2`B<200RO25XTYI5z`Re zAO|6fA+sR8Fvsp8b`+)+=n!ZsXcVXw>JVxwY8I*&>=F_h4?OB&GD??BfjOByuW|w$Tbm0n!{&{d+)P&Wd5BXLY4* zrOl$H)2i}*<|^hiW*h2L>M&{^wGOpEw}O8g;7;Op zAU`AzA!m_`+@o(PdpUa!yFUE^eFQy$3pTln;up_WWz#?nUsBNk(P|H`ttEs7(%eBdc%8}%V<$Uz^^cLxP^djzI zdmHq=V7MTdAh)2E;*sJ)MW14fqN?PZ`ECjLC|oFnSROL83=#q`xy)yU|Ey>N%PGjeAi@=s&q+f!cli?*p)Nq93J0c4aO|*YN4k1gB*~~X4mdRvl zL;Ik)&`_v3)rbnCiek^OSxW+3xmqp^R}Q=j4hQpq{m9qJJXr|6feu6`pqJ2_O-X0C)pXctQWUX~}%$bS_w`)s%7star*v$`O$0bl}R7 zfkHTcEH{X=6nX!00t`VRwSNxe_$xlm+~PwV`ZOF3j3uB52Ii+KChfHP_5_*uMs-cYlWD8yHkA2lVRbe(sLY zLW7-4(IdPHZj_p(_tLK`-80u2)s@Ik9}Wk zi8a?Rq;!W3BIRYJ113+X8I;0KH0O?0iZcqBhocmJgbLv2(iq8@6)U}m$)eT|@iL(& zkMCIQ6ph1*28+MANV^#-xi~@W64K|zQrrDAIHwOXVIwlW<(6&T*(h~Wd}sEKo4>b zauA@&IKY@2q;SxN7`M5ObO{tg7Z^tm^Ro~ZW&mObZxG6cc#|AnD5q$pXup6!up;vf z7#T>~00+VVv&-Ng2QbE7CjCJ9_?J~@;*@`Z50ROMnSp-5nu}74i=^lPDFmI2RfiFQ zXr1l`Ap#e=zJf3sYIf{BfD4oui%B@pOp>DSVHEOQ6LCbrB-!S~0wE$GBZ$RNMSp|Z zVr+l|X6GR;VXm~=im(tZYrqWP0t{v_6lWFbK*=MRUdHPZ%~5vQ5*hafsb*RNzZHMR zdXiuuAqXUV)Z}0SEwIdD8Gsm|ZNIvn4F^S@8>dHMq2PTK8}b5$TObm=bc7`sgD9!c ziy@rYMsScIPH41q%Lrxg+QnsnR?y7;;ra~Fmg)mxc2paySC0}a^p`&>h);0(nw0WKs{i-CXrw!lF~hRZjB(h#qPan^Mzw-AM_s7KEXlB3nY zwgpCVNr7fNu^C;f!FQ+6zFvYTv8LVE(K2G5DIgXhkpK_#z&V*9NYbp&3V}t0jG68}PR^Pu0VP}{J zNp3&`!g3KPyoGG%X%EmKnb=tDu~00+pd(N#7((mCfRNBzr7}!5Z2o`37|3^c(7iwi z%V72wbPA|R9xvg7x5=wdiift0(?f#50;Lmz)Il;}A}+@U>f&%o;=;6X_SeZW2ry53 z5dc(xLiD}|)YFkyz`^?@VUY6|S^;}K#nxEkd3QsML&{=wtB%HzrZUR0qy%DsSUAYI zA9id%C;%eVk=!RhKZ<`L0$RB3wNQ+TXd5zn3~E?Y{6>I_kyOmbiZgK-jGZZ-6g!&3 z3u_tgp~s;(05o82%?Ri%{cM0fG-zpB=0V`TQp${ARD;@Iko%ZLwe0diz#heQDJ7|f4Kz13sa93lv8BkHXApCy-mqX5g053)Y?1V_q zxdn59xU#MnDIUSQKMTqdggH_lp=09>VZRHk2G_$^2@3_|#5V$s$653bp%+kXaf!eR(Y=+MmP$s3MO(4+bd!b+zV9isA8g)nfzeGLh5n! zLs~eBx1n#G-2!RXp#)D@Rd;Kpg*pGV_b+qeLN7qa7;>2Bd2NzSUGV==@WV4LFJj# zfk}|1q<4Wj@SN%VS0U3D68#-*8_5R$Y>hbP3hJd^4+L$b6oqPJoY)JgAntjc9U3f9 zQU!e6K*)a@?y)#yc#NzNMV>G+-A(X5QW?kbH8qqia5aWjLY%^?6PUz;Rf(MmNnu-= zK1GV)N@)~pjV>-V$9O`&*OnFmV{?mN1|uShRxe&M2qs=m*&Bd!03eJ19m#TxI7UZ` zR}elV)A)rDt*9(;ECg?q0LU2#gKF@p+6bJ%Fo=KA2wY2CVcikvI;mmO5yIJ-IqK0= z3CkGj!SobE;F+;bKs&KDk&HkRfGL3lOQ5Njan_9$0;GqDS|Vn}gXngmqljVjl2=ox z;m+}$5b&T5Ga&HaV@^Z5VP8g^gV6;10xz*53W|>w85#>bg<@Kf!+MQF+gXb;2NFfS zKSh5Jf-1IPf=lpM3AWKmut^bVp!tzEAck?>Vb>N!K~FI+M{dh=jW@o44GIK`rpp>+ z8cGE-h{2pGKUo_7bQ%kIVf3XO`GDon2?S{f$8oQNcg~k&k^(D6uH&7+EL`vxQhc-_ zJzHQ1!R+yxF&L3jQTgHX5`v&tqJKk%fOmfd`T!#O=GGYo#CKujDxaNj%` z5)5Ew&&C)!oF3X-iXZ8{GZo>_pzgwUM*q%Q6Kw*rGohn$4p=s>CD~cbcPz(o>bMl} z(ep}3{g^;~$q>5$6|hPecGH<9n!*>6h=(QvcV`!ZIUuX@Qs1mAV+>AaM2b*hhWUTs zUI?7eO8}|DcK5PCs37TZ^3jD=@?&ba)RjZYLqtcVN32W|MJduOK#*R0IXTL9FFp?I z!FE+AOz-2dmb-Kv0*wODGFr1ufY_VmB^5ZtQrzu%IwFjM%HW7YK&jQk7eUC%b+9D} zqObxg9YXnZ9bO4SNY`f^jR>lQY-E3=V2~VMOp;jZVfUc{gxWz`O|d5szcej>2k0f$ z2$~ybFN%r!9wo^1UpUPmh&{wG+7Rx16UqKY1yiIkUBDz!lUY0wg8{9gXvEvHl8K)U zcP(=h^Z-~!P!Kc&Y17$bG!LAqo@1B+40Admmm9hd0~8TEwjU@bOBHe;P7r^?P~0_@ zFX^73Q8Ty6sE8IpSD2mQu1qe67KF5UhgXzx5H~U}u2~ujf+!*x$+wtrEFBD2VD4n_ z!GB*kO!tGK1FQ#59P@t%85VZN=YYn0+5S zDH1wje~7>YLYxjo_V93Y^I5FmejfM;V&p}5t2sriYS6T@yfGsZL+T#-5oJF-+IeH0>#SYf5M-Ql0ok_FYt3I-$0%;CH55+by1%w`M z80k+C3|P5*WC-H*DO{Hjyh}D>P!Ni9E+yQ60I}Wx9e@xuH3P{b=yxO`9fvq0aO6#l zB>@Y=IRVuKYlBV`iK2g;f+`OPToIolg2R^r9smQQxxRwTMiH3ta1;Rn>(~d1$2iBg zikxV*=J!kep3|4RTWo85Y2M~C}Iq7yaNqV%n6(z`@M*RswDz$g^Z83{qKxL4AN zN{4@>QczLmdjwvgStThXia@a}&K&Xq9lh=+wsu&(i=vi2cu?m#FtcF{u@n@R^0F|b zsjW!sOAk`#2|@A~xoi&m5Sj1lPe+@Gu^qNB$-at^n_a$H zi>#DbJ-EVQhDbF~o@%;aHD2@u-ig)QMa+NaX_iy0z)Zoe*Ss)qjf!y8^AWE$#7htx zH8qs5+Jiz^AmJ5YBiJyA^6^U?||bJf`UF;RXgzC4~hO4X{gl#VT9?M?s2o{laF( zJvdi;T7zk$EC5-mbshSj(u!k#1-?|EJYX93EX^`nin(L(D9%Vk-hj-oS9mcCHl#QP zTYq7`Zv@g0=U1VOQLHdVOJNb{lYU6Oc75xQBluKUT~L z!;f6QQIa)ujunFe4?!ibEOIS`>pTYl3BlMyBoLAzU0Zo@#s$J#@^R@9WYbxQx#c`g zu}cVd;aIwU=cK;yT`OYv8r)Y`CQLo?==wO2D1b;UGv_)BBeqynn_jtKYNa)h z8hUT3BV!iTgxXAupCMh>x=hv903gKi^*!^Az+jS8cI^=jdj zmvQaL7gfg5I*Fi5Cs@lMzLbVQ9hZ!H$$?%XESo7&m`6vebur$&_UeBo=r!8vx(V!8 zE#-x4!EWlR!ZhrA8uyixOfbBf(lv<7iW%$9G<|@Vc?)U5m|1lo2+3)>EIkOQOk5_M zqOT-S7ZNd#IHztJAAm%yFpa%ATE5C_;C~A)S(hSbt!MC}fH{m{7F(mF^Qo)K3Z2xo zD;o+#7wRwL3e%(Ysk?s?vYADU4~ax zO_0gHui_2Qm*JFM%=KnXC?k%9p!i(Jn|6SeTzDa-NBWR+G5)}6VJkdzZ9lkp9tgz) zv?^fQKB9b8FoTXntg4Jg1aXFx<%FvU+UnM7p`qUDe8pvDi;aJ?Lwc4ESLHCp9HG*oc)>vK;DUVml8e zW4pkX>YsvvDT|#Lj6z@6H{%T?WL?HcRFJqrCx14EN@Wx&45O67>7zYTe(5FI>Aavn4LewK%Or1|4MYy}wR9gtK0on)pD7Q<;)1e}`LDhi&jGzu_5sV4p3ecyiH~?W7 zw8e}73=pj$G=L5WHsyT?I$&+Ba)=&SYj#5fE~pWi6T*KMqzQB}04bmV${|1^oH26? zKo=I&;y%AV(CEmzdL+n+?j(X32ZE9X!V(4%cNf4AcrmUY036s`0dv=T1LwowuIEOL zN*wJ+0F+y5?l;Ba_gB|{K;cw1AT-d~geg;Roxb_K>c3TbV$5{W&nRQg3}rn_2ODrS#PheRq?S@luzIX z!^|)5B;Kk1xcrTA$TH-nrCG7`vYUtgF;uO(9?KxOIbQ6lKQrRM1yqfS9RiarLyd{U zLe%9zGoVHba{woRNGs`7s2KO!4lC;^Mb$rzoMMF4|0)*;?hIgDK@;s)eGt+SEVg=X zl4O4+HopLrD-Fk;4I?Nh?6AOhP*Z|oB*${*P+-hwM_gF#v`(UX+Wl)}l zLPCn8AS1;Ctw+2Aq~Xl34u#njW@65+l$j_E3)>i*fV4x;ApU}=u2lv0BdT@!Stv_P zFrix{a>(lpe*>umOvM|GlMP2Ko`RVKBglX0hDbr3t;1!^VgpXi6p$Ow9^608{gbc*9PNI5l zoOqFNC_IIG9s_BfoP@~}hsukBR)Zm>bc7P4&}{W}D3CQgZ{igowBQj}RT6H1w(1V3 z??!sB0fo9P6-*0)^r~WkNDqfypbCFE5vG881Ei}cLDJ>Q7#KEeA@Ro{5;?k7?FBFZ z{ybo{z7L91!v$BS=q#5JRlMp)ls-(GDi3xoc_~5Klo?;x5J1(v0T2jM$ANisB965d$736I=+q8004~ zN$mF}DJU~;cx*9_6Xg08BPf5sly$ix_(VZxro+5S`H+nP5rnRYAPj#`gGvi>CEA`e zIUxkWwkTLCB2mAhdkm%K6ycVw=!XE|$@RS;%wU`nr(u3YZba6LxSrUD{{x;H(w~5y z(3tq55Y$+~R7(nuk|;=4hyIH*fa6zSAZM7@J8c1&fFgNsK=xLN;`$%rPlX@wUpy4~ zX}qP;vS@b%@PU=ccr<^%f>caZ71@f(AP`xh#gKu$*u5D*9nv1Ws|dcW(TXC1e=E{Q zhsS2EO5z0|kCjCL2(Za@dVLGCvv6eR4zHp#tDp+&aIsKd5zP1XVXPVOqSdTSzrjOS zPXqq~TBo`W?h^3L)#&;ORPSn^^dKa=JUkE_CshA?0ThZ+uhf6H0!0guO!^1iG!6w% zD)z20$)Qn@HDOM{ba1m!Jk@)HrT}rsUQe6|5*jxg_YuS9yd07sgn8c!5ORoq${6%D zNJthwb~B#iJ^6VD_Y}(!mIh3**bekPR`p~V@febA+!w75&@b~pkcLofy68d9Fv1xB z11cvjS%<>M9O;B?l53Um$;zghzzEI%qGJGHU#6H4X+G zTu&TC8B7D29h-xgh+sAH2+{z|Xj~w|4HyVef3A>)>BusgofDn&RxwzD?z3{Czn(3| z`GjbuD+OU14iXnJc9B3H{unX=c@`uGH-mQ;N&=`DrFLBf@^7|!c|&l{G_V+W)&~5g zSyLD`(BOYQb%YwAR3k@Qpz*7sgS}d6K zr2_Zd;U25s9hPy{*2fb8@i0~Y0+(f(FE#;OLg6dk5@Ry{;_5S1l5CG^q_j%#&*jG< zc+8LG0p`5XM%EAO5QHHC@Z#yBp@NCU-X&R&G6jFmoWT=H7epw$4uo2y%6wKF6XOa=F$)M+1DK8Dj%I_+A{YXN2S`AFgS1<7OlAV) zOzMB5+Q5|t!~w0bJWiov1p{3_-y6gy$Oy+7%RYfDZaoDwJQfxmz6^L*eK$5`Aq-3iUVg^Yy;KpO{W&EUj$O{O5lz7IC8>Y89>9oo)#e3u6{l zm~bs>4%kI99n=g#l4ud;7iC}}YZ1FrWdWz~YJCPay-gNGl@?UYWQ7e-3*q78x22H)iQ+=*^JTm(_0P z!O%|mKsZp~AxZc~3D1!Rx!!-1=`XkCxnVl2F^uqK>5~8>K-|B02rs}e7ixw61+HPG z3{wbp>T;G@6yAsP3n1Gtd5C5@Q`*cxr&Layb=Bi&9QmBo{EYC$6`q%eC(@9G7LbQB z^sh{0T9A`22btYN96tBPfX3OzQ4&C@0s^>DmzT}?98%-U^wkxCpgIQ0SXM!QVNMrX z3SjBGDj2)BrqiOS5WS)k0p*k`K8QP<|+_wGEiJG$Vo<8 zk_96_$T}kwM)|59cqhi>H9Sv$P6+4I&`2B*bTB9E%fM3Wdw5I0{#jNUnTPc@`E#0f zsNIa;L0XYM2bqab1Nyzl4SNMl=(QLPvmxN$IsYO@GjnINGK{}2j)tvcYCWBCeEaq&ji5{4o<-qy7HA6n5N5s%y4V^Pa5wJhwJkpeJj!!g6i68V;*>&? zbp@UshV;~lX)ne1E*w?RB_|gK_mO7SRE8A8hZWWSYnqv3UGeyT@oD6!@}Z}+aK8Y; z7U$6+EtjdGpYgX`BKK%IeR*g`OmI+nZCqMpd^zG`=&Z#0bJO4y$pHTuHwlaf;CmVk z?FYn8aj1+5=15J}gyATOslnmMAYvH^xnm$J;!+Z?V{EY)GHMw{(ljVT9EN^;7%mjX zn$umuJ~6Hp|5B-cjrO*tYk(w{{{0coN~rl6@v+@VN^uN2v%j zq@?kWs5Nk|o-K()0uoT$uVD@CsH8Bz5ZIVGG}#i?O#&!?X)WmDu;FnSkXwsia@68c zOmD+Of|U)&nwA3XbAk<20FqOxIb(+6SIK@n7XJH89m(V1*$KBfC6MvLaMQ$K`PTZx z7+|7I@1U#W#Sd$FDnRj{P~xzm%$6dJU?B3T08V#h>6W-pFdfCGcu$;1@U&s$X}j20 z*ILGm3{vLe}^6GdgW+7P6X&Md+=1OUNL?_+a3R!w9RcfL~@F$+T@dT7u98qCk zgaP8OT#HX3gQlLo489sD=Y=jyE4Yx3opAJUR(eb?TWE+I>Q=Yo&>GWGN9TE$DqlEh zx)R}8=E?7WLO_qaIFfz&b?Mf7g z27GvbHO#;*^j}3@aZ7M+lm%fo=YHceAaO2+atdIWhahX^F~+2g@?`?R#MBB1@i^?Z z72)7LY#1f1n5oj!-=@^n z8J2E4K*_w5@0i_2q*CCU3WH@S84A3N(6|OZDL3z?3n<{)(vXjm$~tgRx|Vc7l*pcc zH1AY~Bwb;W2d{p<>X2w2`~vp)O4NV~ui!TT|1}ALQ)$aw7gO$C3iVwkN5@brF<70F z=Kv1r@>5~~atnmH!vPK|B!jlWQ!P4xH%4+9*p&&K28&goD(nJ^>jj$F7dR2u-@+UKwL=VSxPx z#JwZmmdhb5)EZeUhj`APUONEKkr7{;4i1$9t=0;yA8~c@AuP7)v|>HfksM)vvmMa! z!gp>pD7^jB<#P~1QWK?J*mCUrr6TBH!p%};a27#q?GM-scpSB>Fyo3(YKZ_HbB@iE zXkqKlo6V4hx<6HW067w>FZ~=7g4?$AI3$_QQ+hICUHp;KID81)R4D^{dFfu>54fT! zXS{5Xk<04LYA{3Roa#W7N|}^@%IeH()LNxWUN+g>O7tuVbdE}$96d1A(v1w9N@8m{ z9xP*__aLt1DlM-U;BKc(u>lOb%1Pz>c!R{6m7CE4T!obfQw6~XDwigHiB(<+m?d6_ z?lez{nE+bKK+jyYt#=saM%@X;aX?;?x56NENO*}0WoG14ohuZLuf+a;Z(+dXOHfGV z+06Mm9w%PdX}oQzC}Q%mOzW0h>w)xIQK&Hy3MBIM-@&Xv1M&;9T5*OH=)?11b}3oG zng;W}#-UM$a#}?w_yclU__>OSaiSFecpt=AHKqgyj!&US>^hu-mDiFc!PHjk~0hl=pJ2`f|UI&$Eg|h!5++uwtP#v@;bnhq&{k0ph40r64w1kSd2M#(7{7PN`D z&_}zJpO3*fjWe_F0KyLpMSQhjfARHmxIzKZk#Uuf1hHeG>Ve>a1&e!dvS82T%3)40 z&%^22_m5Qk`WU8_F=3P0H*ta8>Kg1w;j81q3#0-3QP;RxVRG8I-vVe(mi z$}~$k#Mg}4XOsX>nqG#022|?HtJmP%rjo_lV6VrQLDFQ_!BhfbV+Dp0#7SZNcVRfp z4wpyfCCI`o)IrgVcj!N-vk)#}F4g_6o`!IL%w>WMnY|nE4)`oRk+~J@`uuSiPf){( zO5?7`Cndhhcb@Vh-==z4Z5{AUeWdrL`i}5`_?JInatA&sr}6Tp$bUiA3vQhXJI5XQSc(!~*JKIsq(y z02zk-4RF5w~GIc!f-$UO>W3eu8m`LE9q-;Rs>Iasl-{q-SIuOc_K? zxDSx`01*&~03+bGFY1HqLK9}4h4o^8u|xoo0+Cwg%rGM`1U;h=%P|@`qCv~S>w&W{ z??79CsUX4wX96JbBw)vC0%>C~#gdX(WW>V&Gmsh@z?2^fHd0gv5rG_J6~z(Ik32Zo z4IyPn{$SNdJVW4LZ;V%ozH5mktrR*w2Zwcp`zHVjs)PJtN*&5)FldJtp&uoGf*>A~ znQeQgN!D3Fy94@TjH~_y&Ia4x0zMd%XevV<6+q!!{{yEYbl_AG$SXw8F2?|e zI85-26vNqnF;x&;OP>TPN1vL1Pi?NmK3*}W7Xq&<*-jBo{ZSOVybVZR$9n_H%d<4~ zTP>KWavt<90*$gG4dJ1gb%Ql|HWCnwP#-ZbHaw zxO$QEB`CCd2W&=sy!wlPEzpVU7o!ZquB$IEEdlRRADKND+f|PdFNOJkyWZXEI^50x zf{8V(;sFTG!9WBN2B7EQS#S*S%D{)=#DLJD(O?uR=eYhb^~s)8GZbR{JIIG9|1Nfd zy9#o{#HbSwM(8;UqzhsN^8e5y0V2Ugg8vWC8phpu!r>Jz;+{cUl>7o(fwfKeB19>a zX7N2*El}3=p+?3qPtIe1F={au;PRsfB6HFDuq$z=LewB%K;6C05(~$)&oyCggXj>A z4rqW^zLpr~2DbLP%SZ+UKJSC@0Xc+S3%(5pJ(eo=8-X8$MZnSUAIgfbeb`G=8<|qz z_FxCV1k_(^Z^McJ3D-M)M6nj1zk*l_vODS|hkWhpc= z^O3vae+D1nc|emaWnwviYFxJUF@pQ=IUhn2iV5gB_*GIC2^>0=@yGfN@GZ8WqDxd4 zrtm~~qyULy>^!_2e5R#6EFj?8%gi={fRX2M2nR4^c$;Ky*(sQFOu^}-W^fkIf^&yw zgpUeHSqXltngyMI7-*HMpt`N8#)WS$#`=xbEL!V3RVnWsxtwy-c{;?iY>e?cqMT3$?O7h1i+897cDz!aDt)%x-VkQX%Sn&IFm^lFLY0k=Q&&G0Khw8%VD$NUN4Iy-oU!ynvvIPoQ=g7f(J5i%QLq=nE>OiW2Ul$eq`}+2MrXwcm3g)U zMlpy84g-xhQMCF{4it+{*}{OM6spPLaC&^k38WM@Ft%9k7G!Sz@5^SEKxU2AqC zf^#@s0?`U{s2YkHJ{`>m82T~afxbSkvS4G`W7gA>DZO)ONNao>>Juu#8phe_FQ4_j9E6G6VfvTyY(ciX!S)A+%S?LaSU?zgs|BDYBxA zOj{gqARZ6k4)JFoZ8UsbPP zv4*h(uy;YgaRtD@vvQzRgv45PRwb0Gs&RpT6)2_I)3c00=t)6xWI%vJfir?ZX4fyo zS7Pk9fC`rr1MdQgVF<>%Gc+6+2*6qlQXVjns<}KIu%PUUtS_;^lMZ5pp$J0HBeId8 z%Pr_RK(+-s*qJ!LEQ)4$t6Bl!}4 z$l;)tgTh(Cm=;`vy#jUV!i$|1obVGi6b1~#O3};+@MATialO#R$v=~<0@tRPr%Z>P zioBTcIi}?DDfkBB*}OmML^R;IFBF|Y&Y13sb$SzXJ1LsmGC2^xEmbVhh& z9Z}+t%U1ZgRW5Q)A!kQ*T2f_HU4G7&rT$ai;5~~I4XWGjmy@2&V(|i)l)%M%mpe_x zi*_#ekwP9DR!#~HPAn_WibxK7QEtC(V9LmPkSTC)49Ox;HF?f0%Nd-cv z!Yutg*zZi~U>mHcjLk#kP!^Gtd8?4v0rE*cK%C1=GeY9fPt9U;!GH_`SxTXtoQMI% zV2CP6;d_uKnFzsu5M?s*GNS-rMJC4C-~s}8l6ug(mbpYYV$GeJhqgd}T0VH&Q5{D5 zm=5O8 z!3=?+FwY8MPM~DxZ<)-0r-_~zl{%k8EPm@TTShFA^)9xc)~05LYpu35Uu zE*c-ZOe>#Tr;PTez87mPZky^)-*lCYIh}u_?W^F?0u-BK&`1S;zYh<)w&tY~j!;sR z=VX;d+2(i;SC%_R%#Z`f#ed3+6j$W#LZH`>%04GRv(l#n5Ejw=kROBa3Mx~f25buO zUh@>NO;)Lk2H;(&Y8(Xs3`o>Y11#11I`t3jslpbywXhvd>+E+_7?Ox|Gf5TmN5NH) zLb*%HXO8NmJrfas#eP{@Um@hch->K_!tQFy%+FwXe&1Ak?!Orw=aN&$DI&6qnU@eR z=6@s}SFfsgh2zT!@C;*>EsM7aas;|Blul$+Y857a7t&APnOU4bMtC`OQ~m*gS~3Xy z8eYfr5c0X=YX#L*aLS-Z2ClgZ*p|TR?Q<_}h14qrOXyqqP02%W%;g~$LT^_{*MzUX- z7sENhiBsu+a>2j`lB*L%E05(wQR4BF74QK>tMW|wRM{co!VXkh(P8bMypYM>O8ql4 zhhfzI&Gkr6s;$kAg)!A~<*PYs%^M{%g4xA-RV%9c-9m*(himIwJf8--FwS!`x3G|H z+KehI+{X2rEmWy>?T50gG06+M#MdL|@ zoTXLOpeZ!DRl_;nxY#mBpEVhq*LB6%tN4t|D3Q@TmEaKIHQe4ojC^-W^?wjFvX|H3 zLU$Q|k&8B%S4g~zn21ua3#){{6ENjvi*dptt*;xF9Q{q9CP`*ZzZC|<*NIq+2;s#| zTmsBL<>RmEqmNR!*5qOT1oc-02?j*DTxCGDs!6ipk;1_Nh39dUOJbe&Bvjv`;cpt+#JR{DDz)2z2usI zu?ni{PA$a+i4s>~MCV-(>x9vl*%^=r!O1;D#zUNEzal~-q{<(4=&=3^&=!!jEE9O_*r5Pj|D(b!waMXs3;mkfB{%i_D{ndz-}F2=N4eQ z5~u(Upud)?cLw0b^0%a`>l=z)L{sX2w~M*JNy-h1J@8t-VV>Zp<8+Mf)aNbhP3;2++i zoCUp6s-~9;w>L_|+z0u7`cd(JqF|$4N7XqfUvmMLVkW8)6qPdLE`i#WB1XaCP?hq; z2vu@fMI)Fp*}Z4z8d0ZSSls^UCB^6PIQjyL_kf|I3M;)79mii>dMcJ5Gr9C#qzVi{ z>2MrdsA!E!O32)>!e+1sg?PWk2A+^^qbAcHs*FVN{qvm*d3L z{NR9LwkmpcGGq3u(v&XBxw@C8`;flM)4L}a8?{AUJ0Yl+U%F?oz)Rif>0v}`BOx^~ zZ)&MfXi-Xv|64dhEEfZRB`#v@SS^Y9nsHQZKba2VQuzjbE(pikz9Kv!u0iKAOInQWOEb&+?UX$ zAbvCgyh99^d%CKG5rRdj%0|RP#iad!xC-PSk&IA@bAHYnAOp&O=f1OgABaK@0LUEh zTHwtv2w(-#*fDlcPZ01RurND|k_r1G)@MZ$9B^YJ4gtDY&~tkLBREz)1@$c$PKJFj zvN?dbfe>2}2!Vw_sNfF)EJD}$H3Y z%o+Rv2wGNIP+f=)N;D)F1avz6@_mHAR1qtD0cvRgaytAz46n=e`j;X9bLw6>I-pAT zX0<%f5y3jlwzLpxHssmFG}KkVPN~c6Wq4J|r4BJIBOOS8g3D5>=qnc@6%-L~@Y}c) zCch8D@GYjodqK=7c**nu1gZE5@`|^zpshm1#q#bUx+4VH;@0mK;#7b>r^7S)F2&fX-w0VxZ&$8m{M zznFp|1G6`Q<3SCQ*mE3V24X7kT`*46D`?wc*ve` z62=HjfAI;W7wXdWtvxDm_ByTrtb?%bQ;8{`f1_w_{%8-rmwKG%z)m_a{coidg~y@RSjS6Cm46iGF%$PCoM zbCem5QKfKO`#(C-pU{10VV!WX{BsQlCy!T&!C0g_VvCDMla3$d=5O~n`hwY1$2OZ`miHIuATSj+0%qO143aj=wX45uRA6|W|AnXr(FZmF6%H~K z;}Ynnh&`1^$Oyct`RTxZxS}LIt{1I;b$NuHUpOP-Gbahym@wMbYJEq%Ter5iWv! zf@A}l&N2`{3et&!ye^dZ9$!AYhIaw|Pl|ckII?5dVAQ6thRZI4-XOAF+t(z28W!d0 z6aW~AA&@erKHH~yqmVdMhhoFna4B!F82CC-CMX8%%d1>CJfPy&l1wh4 zH9p<1H${m9!b&rf_m9~M$LB`$$;lU|rV^>~OF3hO#IRt>&?VJFLVdZ^G*m=v8^32%qOg()p;84A5r>$hf} z=T_`_CAimiIo63j$~6EOp@Ly@{ff#6ykdQ6#U=RfdbN4}$hP$(qJ?39tLpa(iC`WF zSh3^|?-ziX3(i)0g!gAxKr#^k07L`|I8%jAbWxm{0uQt=3?gqi_##YA^d;01l)(|e z$jc}v2SX0V2BpPH zh?pRnA$hL=(JFy{y0SHY@`56Jwi@F<828K9;MW3!%kIG_}4xs6?QHV&44XdxhufTArY;0p2-Ywe*Yy^&!^$U9! z`YjfSDa5S^cnMsHx&4Yhu=9AZ7wCPepulG@2sS}Tim$<6;PI`0`eHM%#3svtQ7QbA z`l;gh?xA6rr{LJ@Rd}|*o)!ROX+g4Gc(I8NHsC}Ep$lcWs5(-Ux3xS=8bT(nE;mV^ zTh_h-3w8ET7g&O1erD-N`drD#%{tthRf;E#3>hnhUmqeJl;hNJ2lC{D$**T^Ti{dX zm1ABJwLP1psph|bUDpFDiy}(#;VoPJO$*qomD#h{cp}ADjvaw|>S=4v^N#Aa)Ob;q zb=$}m$FK_Fx;-eID%Un;@{dZVN*AL;Yx5>&p}rQ!9Zd?yTTXs*5k~>&U9vuH-*V&R zO_COs2W2s)gq3d*9nC;pe;l-kzGwZ&mD`bV>t!e7F>L{V#*XsQco9CFXorbH7*f*4 za)eTlTpx4^#XjpSWFd+=cs2nK%65z-+ysPnB_J3XByO?@^M4rbM-jnPFqWQFq7*~$ zDvq)Yz?gEWast4*l9(C!SlHk!{IO6ZF;(!_NF*zRxO0I}COaY5;rwH?Cf3#{9gepG z$-=l?pk=*(fI3UHjhT$elVcqb1M*Vr7Wi9$s4*Yd+;A2v-*bO~InIF*{XxZ#24WT9 zq#tjI5eUO0UnuGlxc&X_&8I_~~( z$EXkL2-eIQ0I?y;%FGR-@iSLR?6FpilAr!op$YcyC(YqSs zy=_^B6GEW9rSNZbv5d>dWF{qV7c7=Eq>3y4(|d_=xa4(@OxQj(^R>}IT}9$0ArZc^ zeJ&S&c;BuhI-`!6UmS7F2bBWw-%Ma`cU^_#KbaxwL|e78|s5xR=)embfgr7n~CDFSITe82#X{r9|^^Zt0`{@*)z(boV)f{ zin{t=OYZai>d~&U8)E^aj06E1B3wM32{ami;%8#j)Vm;@87mT*AZ4L%)6zjMge;P@ zhheysIV2W?e}x!c8w2(7pzq2UIU_UiyfI#!{K46Q;7sfc?Zzrf*q+cM6jY>V*l45) zAtgcQfee=dXTSgrujq{5zzMiqZ#y4mbOapE93=fA6ACfLf;_3rpP0J|JbZ|Vr;&7j zS(SM7kV`oe;7%^BjmQKOTA@Z?gLUq5nC;I<`y-Ta{V>Fb8Xy)J26@XO-$U;ujM0(e z7DtXnk)bY*7#ov@S-bRAf)wKXiW;~YZj;LauFY6tLs4isK=micAmkttX@-e$_~r3? zuo-~MM!rw73>_JfkOGWrvC=i+HR}3*6;}2xkWp8Mnbx4~KNJbf8wt?Sg_3~cuf)!c zFR2dSO~w^1NOR2&E33k1<$n~0rDZ7~(4t#=EI@KhL2}h;3sJO-al{6Aw5B$u_Oj00 zL|8dRvQ{RwemqM$cf_z3o}Mh|poe`-H{;1MjyK4;rUc_Pq&~c=H{WReb@Y9I?YsJi zN_Up0HAZet-W4mCgilnoqNDj!`MjT?_>=j)EOlV|PV@TsYb7(>Zx#i(wsgZgfu(Ex zKS;z&dPi}~!IX)_A2}7}DDgO0G_yc|am#Tl^Ri&(I3rX4!_rx`FD55hMn5lz;S5+3Ys#iv z>3fFKh;R9?X9)1c7@1SZ(BmZCNg!NX)HG>CR0Wum%xz{`(J$H%K!V_9`D~cM3UrSF z2(QPf@;!r-{anHdCIp{zM(7k&3d9`fh;^VnS#$V(Ad-o*Y^4%+?F+7dTr5Vq8!~sr zUC(;h-LAJn^$;y?hWKjMSUR)>KSCOY3n>l5P$2!Y-hxzNpym~a%v5Y6&Ex+!G=_X7 zch?m&EV(?-J~xFgnEKRH!o}$W*vtu`%!3KGQ&yxlA?}ux9XJ4jC(R{`r(#p7n-U#q zug(T%Sy5!U!+g{0v@Q>S^j~WJDlA1#+HO^q8c2Y3RYH|6Qo5{I7|RH)>(lyG_h9jZ2m_+3esctn<3iG~`V-->iJ{Rp z!nCY2-w0?^FOV(eb8;Vpub!_yXO%1X?2C|uRgh^s1^1~~Vr27w)|BX+MS#+pJnLuu ziEG?y-Wc1r#C&qWyvitdMdzzxymBK>?esYW8V^Z2AHf>?Wj+Ui4~?(Dg8*0VSz=Ex zr2p3wm(VBhU$!Db=e%s8Eg)?J0l7N8fVB$jU_LTxRW-h% zhcupSYN2rqsNl@YGxXAM2 z^nxoui{w|!F78U$S|)7P_B3K05~rpoxONZYFI}zF!jM}OWw~Dm7{RVhuK3)3iObGq zht=N5pAAmT{lc*vx@i>GLj$g!ephCSV)Y=DqC>LC@-rEK^Kcno0WAQ>96;wz5j7q`zu#1AGg#| zJe8SN`zPBy#-uhZpJa6NQdcAj_b|`Y`1LrtOE%}t4Xd3iryaUbAFUo?T3Q%oJEh|l zQrdEfV+)Oa9~5|{%{SPGZT)TZr<1Ub%?z+9MCzLUVIWD-N#t%1hAIHQza)2 zgx;^hC&j?UlpTWzA&SeSIF42AK2T0qmZlL0GZE3&sSa_T{Hm>w;p>`F9fyGB;412Z zE&`T+7x|F6Xs1>0h=m9zRcbuSqMtTfxOYhbeWb9nh?UNRB#gPV(utV59zd}$1UZ9g zjVRzZtiu`@dfP&IQ5U+lp1;Tv{G>$IrA`G&`eTcV^bo*dtiu_m2A5tZt=%D790u}l z0!1YhQDUe?C6jXwq1M*uGv=1V6s-t|snBqLU84tcF4$toe+NuH=gf+!h)N#XR?kFj zW0Z7!QpriAEoj%0t~?ylwURxu%&WcC@C98i*w_>x!!~7_YY1LzeWI_8J824|a+K%V zWm+qTnZy8vB9TB1iwVM%!pVxqaL)SAUk3w|hh|A;yiHxM5h2pDtLhISu2opx;C7II zE4%W(1i@TOgHMF7GNQGON?uAHlX+7Sj=j#K`-R%JO*`DFgQ9jY8AL9iUK+-G&4 zU9moP<`e(xUdA!1PX@RN9aW9QS&p}7wGqx=D3z-VV6aNBx+kIRpZ=e_I*K}ePBkQm z+G2jUABNe4Djo|V+V`a~X9Kf~gAj}1+KS)f8Dhv655uigsAY~r>rJLM!(e%Thet2g zxhJJf?rT8e#JzMR3Q12-`8o&ytVwMexE)NT_5$+q5Sg`=xYjzKmw+0U3-!`t?njFk ze*zR)JHU(sCVicb-T@-*_)%>hgA5g>lq!Y;tE?20k$^B#N)eD+)?=Mb2T8^Cc0gxD z|D#q6mcMq&>xk&bm)|!$4V8vRVw2w;)wKUJ7 z+@7RJ%{E^K`jstF8ILKg$hi6g;;}6EO*Vu@@fhe8thcF$Bn7C2xv%_xsYt$Lu!#f& zot`D!m=mfXzt;!DFVU)`rG!+CzbfKkQJL}f4a8uzJ!BTr%NiiiMWAU#|FR$9Fcb-T z5HJ>1`obTW{kr2;D$0dIv&zemho!lfUs+fcBb|F8l+=F%XpIx1I16Svj9T%E;yqz% zi)%~JD5b^o^Ois+R0oEC{=kS^&03hncu~%B)x=`AKC_1pAO^4wuLb59$_YvViXLQA zEeVJ;NLfWYWFDj|?Fz#jLoKooVTVz%ZimlZjN4r$b65>g(?b9lLP$Xy4q^kB3i3}7 zHnel4OBpl4b_zNeOR@fuwMAG)G7OwSTmvFoS5GK_+3~8GK?I0@Nyk_{JVZ2D2*#Gc zI0$@oF@?wxW zq*)O1R6zh;5Vv`MGRn3hD3Qcxj}pQduBWU4&`0MATMFn#j$5^dpA)n8nhb6SW`7#E zysaPw^$V(}1OtFW(7qHA8x9g9>rHGBXpsjc`OUkN8rfy14Q6{6L7;Fe9IgcU#FZ(% zga)}#+yW>OlbnffmxjEUx~{7j$ez4HJAyZreyq4avoE-R+O!)>r-Z18jFeY3{?cWe zl`FyCoMKd$|Aq;Rn5HD%%>j(B`D|jt?OVf^=Ac1U^$H@u{!u30G=rK~_+?Qb=zMA4 zC1e-o;_5SC2eq|?Lek3tfQ7U9tDcCI5LJoI;}olL&)hY z-@jCDqFq0KcFF_s0w4l%8g5SraBVFb8iZQOBM$1|9$zXn`6q(k^G^uu2z3y9p=o0ARl36*Kv7kUvo0gG&9f%)kUm8R03rdJ2nl@d zo0(nWM5#d8<9y(j@|ptUS)9=viYm zVKktBnF5e0>9E6Az%ghLfi4g^AYw6{u++B^+|+vGC(oEP?Zee`&b8)fqpT*)O|Da( zVkZZ+GBu(+1sRd;c^e34Rjl91M}%CBeWh z$=*K@&SVvISNjs>B@5nPiiwclHNDF9J(hGq8LuUN74&oJe=L87en*x7{Lu9w@Sk;MBFMp z9$E@mp0+Wv1@Cvbd%$xvsVEcN0a(p{T02V+N_|!UNF0cC7}uo&=Hf|1ge4efi*T@| z(DrN~CL3@_+67_(Y+m?DyxE}DQ4zFu$b_};SQqeQXRCom!7_)dO{M^WoGb<4V>r}M zQ&kwclX;n+@%OUAfr8*-(baI8(9uDXFm+tmrIaWN&}*}QaE#$$jk1GGL**TRX98@4 zXG4}7BgofN1)%0BROko<9NV=#6|U4aJ$@tDi!kIbkQ4NPs0+&Q}=MJb$h<5 z!V#>t$<0lgmRTkHCS^Vqy+53RH@Uly4UeAwr@oXOUock%$^|b`zu{-eUKV(20$NOI z?W^5jOzQupddzVtFjD1Y7%K*UwzCqvl?3TKg4-5}%3F|ys@SVmV2{+H-Y{`YF8$xR z6R_dphKKYhb^t@E%VJD*TZy}W$|Lsr_A2Y@Z5ql+w{;5^XM+5S5G#=|Lm%cxjt)KtihT4Q_*xWn6frprrEYZqc0I^`i?WcT zL9izB?V3S;ja@)mi=jAf$G8mPn)n*w18ykA29Jz(8jOY=0Cpg1DOiYgV)bgO8tTZR zE69I=!cBy^;c$Y+UIU?jpwu3xK^QS^=M^LjLbXmYr6+;L#O@9~4l+GRj|+s@x7Z5` zjhD4%7vdc$o;YpR4+?nf97h!g=9mY;2g4>!CE*fw_Y79J6Ldzb2RQ?{J}4495jJHp zkLd~exkfn<9dZ1+kJ%_%{MZW)1nJJnYXlu2r5Rg?p5^>$^&Pl>KFQoP6qcGMslFA2 zm`Giv9TJ#JyPJn!ng92tYsQ2%l!p@$=M*x&LWcTO&X6%b@-TI)6*3MWRlG+&iZyw@ z*g6K4zF)-@!Cw$}SB5^hX8RJYFLW94@qIwSQkhpQKnC?l8E}DH6-!#rhA~&5_LL_5 zQlg-kDrIHO;HrXugcDW8cUOb=)%h;Xv%OyW_3>Q1&v5o|CC)SerUW%Q_&UZ;{;bt? z(LH@RT!rh3H5ofrHdW2@g-d7e4r2dZtLGB3sX_J1ehFNC{mnxg7+nN}1Pr#!^6w&3 zqkgH58vb1pDBCJ9hGWFzA`p0L)B500k1h=$D#hA`=Ydkt#0OQw!$AmM>+C~g?& z<7kX=koVz{nBD^`3_M8Tg`J7$7jX?VyEX_P2bsRegWe7hX_6AQ7H-w0WW!vn(*qRL zS3sZ7pcwB!wAkm;AbMd4SLaP>KcUdd92V>YnwL6%P4p3BF*VO9ry&b0N*N%+VHp2{4 zaRFVCt&e)>Md@$zA+J$9KutszEF;u(01uf{WEu}7&0=?X5D*eq`F=K>Xs3)JoofA6 z=Y|D;e`=h0*?ZV4gWVpiKG8$vTTEQ>*UDdkd&?+vZ;w}#<6&P3P?LtYSLUBq_Oa8( zxye8I=hGTXEd6#JI~OMQ7n8omG9bO=k&2E1nu7f?-UiSJ8cNC}r>=ZvRu6_J+eBDS zp^PgOZwnbWU0m`WA>R>Qm;u9eHl}a>P`y_X*JfPpe^b%yB)l z|I!J<%EFSxJ*4E>_=;-GXvbllIl_|gW#F;|JxNt)7`_}=Gx`E{cPPGiL*(Vf(wu)` z6(*m^K$)wCRRaY(Y}#NUNhUNag_v$OvCYA1D{#vcd5j+Lc-4w7O1*U@ONHHb< z&?vVWdwR&GO36&R($uc6eMkDun>Lky%%;T$E){Q33Y4Xh>n^(s5J=uqmjw!yzNy6J z0O#XsNu3prGiv|LftLLXd^Q2OusvpX{}d|su^q6vpT84gD$4xIaflyDU1B+mtjW#s z^icG(mz&y*|IweisD!hQ%f4_=15=-~`=&%4f;Xh6tCm;o!Lv4Px_32rPvU8RuQ8xl zCZksxBsJG;4la{Z7nuj;MdCHHsT{g)RbGe9^9Oq zK=c;aqAVKM10Xdoj>=t=t=yYACMiYC1!Rc$Y2bxfO|ci@fxtUHRBC7B5U?`_a~i=e zNf{ghhjlHfK>|{Jc$xR?I`}Gok3cl=3lq46 z1E>Qj6KOFd@1z$=T;-8zS7OwPMTKY)LpjT|jr5X$|LHGcai>aZth|4Bcr7HQSTne* zQ*8yn%G5b`_rnS+yei1lyBCsc7Fl4q;GIT9X2eQeS4|AQ7JVa zxM-E?+-J7TSC)^YU4<@x>INF#|idK2v=+#|$CaNOTmTy~Ht~X{FLGA#cqE_<*gzCEL zy|D4}S2>RoFBaV5jKDBdth1i*E-mp}h2-)cC2wK^u4=XU+-e|yUyb|t%nKRJKH39Z zY*8PCoRkfPpv0p|$6|a$Da)s2Y?Qt_mWUYHGL~utLp*TN5F%{#Up6_yZWH8W4SIBnE4G3QJpC8s%ZNP=*snk%3$7uUIBF!2)?KoHW^ z(ONqnK^8VP6$6Za1D2dS9~%p?F1rNktt*v}LlWiU8`6Pc;Vqd5*S2;WlM8G7ItwSu z!8r%7&B6E<^<$>Bj5w_7+#dp}AY4s`=&@yG@_(@pQU&yk;PL1s6)8~ewWX%}z@6(^ zTmeesJgsyeNI2;G%xzXBsD@NoP%OYiZkrUMDtPts2wUoZ5&ciRvtaFtKWOf?KRgDZ ztFQlrd7wd@7nPbR)v!JFxuN~A)%EYAhafu2y%PS^?b{u5?zOl5f6{Q>fcpN_UzHL3 zHR;nYGVt0(;cqSg%&&a`eNe0=%|sE3r_(M0z+!#k2^W=FCN);6?A}b4YL2M3<+Dpy z*}tnwI3<6!1fmOWQTv z?7%gDzE+rI-Ot8QB)W?TC?f{)ysuakLKBLuf|#FyuulmHT(OYEQ-^k>PcqekUnTu^ zsh}do;n--AWy|(6uEkYf)S>T4z^A3fZ5X>F`LFnpg9F&PB7cZ(9k)d-;zRmRj|%@% z&LSpVwn<#N?I71;*)rc4WaqVe#S6>(^m}c8G!Sd7VK|3E^9eIy=%QB?Uc>|wuB4Ap zSaSL`D=FWlrM6KZRjJ3T`WcM*@2=>y&@TW*K)SzTd6|c>QEeHL7i2rf0}uf6K8ws| z$FR#ISASsWPkoWV7`Kzrx|9&2`6X3Vh|Ze3m(U$l>oDKMB1{!);!q%9w{V$YM7>DmbQ74Lu{5h@|N1<&7MJXJ}n(JJl51*VJD~eQ)Qg7sT_IXVlYTXzXS6f1}piA0-CZzGQ}b19a;7rT#g98wOkP z01jNKsW}+V-o0Mg7{+&^w7U~#C!C^sDGDKk+l>LDzGld+j$wW&0=@vk>D;|M+^reD zEA>m1uY~qi0-h*v_2!3D$Wt@-q18l>C{6&|3OO+IL6t0-$EL>Z(FFlU7E}=Fne*`v?v$%I6ly92Ph6oZbHKAYy&WQZD)AwB1 zt6pDC82H+a%V&dO=AhVySe{t})NHKtyeiQU)P>Amy>CdDljG}oIfnVs1%NO~HO1$9 zL8$7qUTQ($R!w`d191D7at^f5`52 ze$Isd^;LdqZ2_(>h@ka=Az{p`i zfZ?!ji;n1CJ{qj5>SJQF}HHi zdd!I9X}Xm%IJZ>pTgG6YfBCLXX#goyA-*^R5iLfo0LK#N1ZWRHQL`3k%#ad!G0p!( z{E^Alvyj)Eyt?upZDqdh9uEq>ru^gwAN_^Buh2kVt9=yYLLs@)(oaayUZ%N?nT>Ch{eFYMSe?%X=XmJ-z@UdGxJI2!7 z!?1AZ?yUQ;z-r-~NCCKi$EgKm>t5g>_HLtm%nA)4W^lF9SCIxlJ1Hi79&G|kA zhOas}XEtIcf2X8<4m?ZNlE#^Ajl9?nRq}i$ed!4nIk~2yh6%_gxeDtCQX_sM2kVU7kO3&R5dCF3gGt}w898uGlRKXN)_)eSdI5Z_3PDA zFSzohBVXc>)KeZRLO3JzPC&sPs80#5!5t5<6^2h;10Y|&Hrw1j(@+rIHoqExXvYG zd6KB&1fMgH_YSuAf?W3Vi%@M9w+?pVrPW>hz66L--XEzSm70^^qnQJql~lcXh<#pn ze;rZ6(#-e*bMzF+2zP*-5%TrUD}Y`t${sX;%d5Qj;$Iw1^=FakL2px)dty>($$zUw zB8=Iby5)RfzOrBjwpj(}oeJMsMcwE1A!+J>k6uH2T`PWo1d|GIJdi1-u;R-WgA9+7 zm+GGZvNb(*zvv-~a0?Kj3(KzDsjzJ>e>^--jd)f{e{={7yqe}f4kZHN=RlE=UF$rw zphZ*_-YOR6V^#hs3jnXI+_zvl@=@*E4BYiZ@!Ys8;InG&-dZT|da46+5F3PPftNC% z^1nhD6TU1zTg;3fEH7F%ggsv_x*#2Q=lU))ji!g{T`nB?y$3MW%Y_7uPKP1i=FBk_>#GYVW|2U% zy6bRW!;~C1BP3$%N4GHHZVYKgQp)MRMY)Gb?|b=>a?@V>m$erYb0mYLRoWWa22C6K zAaUEhO>3AI{eeG~63(|_$Faom&J54PucVk#KPKqQ`osyH^QAN8WKi)-f76vk!u_*n zG`&-2I~s24OF%A)17n4RpP%W76WFVT!E1$Ts7sl@L|4uK6$42)Tfk_X(4;Jx!m~0> z)6$*}ZIq4ho_@uwGyc6`ox9m7Pj*zZ?GSDmSnHc7CWY>9d>jLxy<2#_khehdVv zw2PW02+3fb=w}Zp%;4K^9;SYet5GeqqIcn~NJ}B_RF|)qq-46x}|G zbe2^j@o~Zf+=Z?Kh^Z-kC>BsINALN4 zJMmb%PRX8JU4o=}HAIz#tsn5XicfCnb2XMXZ^LVuDp%saPcms222DxJP#}^x5@SVO zZr0Qg*+2u6I7^wLaFR=l<;uA&s|;J*d5=AIVekJcjcVnwe;qO+l#`HGbEa#BIb2z} zYN&ZP4_hCs4^r;!&v$r{zcc{bUT^q@ter>iGfHdBamYsDST&Ns+61|(K1@%} zU)yc#`l?)CiTsA}kFlhG``lw^WOa-Fo>lTjD6_qJ*m+B3w0#Cx3%<8H0q}FwOd&t;i(J=c`uzgutsLhMgiQ^t1zkd`3Z4a& zgV7!z40KQ!DtW^xOTMG}7{d~tk%*ztE$&edK@zSPAzp;?DO;frz#23{APlqv%OG|I ziaPy8$9t)p<)D0Ac|uP+-)< zz{;qYf8SR`Xe$Zs{Zj_;@U{b|UNg0q1U3uH>SV}D8{=y6UsvH4Z2HdN}B#tZP-Hc+t+D<_1 zyOymSN^YMN&n=xSB+m8J$PMyh9p7-taA#}3e`SdUSJ~;>aba8)1%r%J--;Gb7puXk zr=dFBDfmRko=mepHPMt~*%2>w4V96|SJ^i2^k_geh7@*tn5|n^%eXG@_U9dIFl$-Bb2b zC4fGXM*s@xfLR8-N8t{1J!7bwbx+F~_-#gTk#R3jwsjF*L!UHH!H;*Y92tkj0O zOEkE)s^X2ZoLgG~bG*PuS7Se4vPj8wg?b=b5G{#`Qe7)BtxB%PY@+r}IoyjvIL}=D zm-N|%g~4xMs$&%UgMiY94Eg4LfAaYq&L*MbqGz=S+)(QjZXjrJY(I#>Wa5Y6?bQBA`ADv2l3UieC^`e?t&GuZVg} z_HdCAOfNkH2?_b9^NJ$?W&zA4#?UGXhe<zt7{R-~J+G6SQ@5*9PHmPisvU+tPIFLyMlweKC!YqX5P|Br zjQe|ui0Ku|=?Vsy!RbCrf3I!BI8i+mCkiLg6Z7|^>)6<|Sn&{fL9j;pC>AUN z)d0g>zT_v5JdXE*6DCZOIMFRNf$Y}%)l0^x`ZNL4aXk7-Kwj*nv{!(d;mN^20BWUJ z8wvoqX+sLa05Hk1r!x!!OZZ=X0*F#tZ(mSr8f{(H?mkNRnH||3e=dbvWajqHa@G4* z{yfpG9?y=E>%U-1`Njnv&PUc$s%T!?09>fup}4$|S%znFvTg~P#q3rqsfI?_Tbew# zb=&Kk|5)zO3{`<$&{Z8=WO!b`JfJZB4SRh_bx-XtWkquTny5Ys1DBT42yPjX*f~Qz z)XtUGpIn>rpH^*~f5v@;TKCGg^MR@t)}l@?l(#F#EPXQ_`O+*f7l=_#3U0%8N+=wC zldV;aDr2kn=;|=1!0SE#QR>CLdq01=V|o4g7v&f0S1*LOyaI|ULOnwOXA%3t%x$R0|3qeST6+37}9ne{GmT1r=Ph=p@HPOb-i4 zH{o(oAJ9gaxeLRYTpZ%NftfJfTDT|W*?36lE)0g#{^|*YzGau>8#6Ka%MH6DXXH(^ z01$u08>nID0fm8@oN1KBJGLCww$nWd?~vw?|0o4w)F-=Cp~evTs( zXDge+X^*W5KMm6@+%@VoW+;WZ6oyie_tiaZ5U^zKbHNyJH51=&0})=kTXYVIjsBAy z9+E6xFRKI+o&wjs97LR@Yifi1CsDF;TZXITx0^p9e~b&_oXoLkt=jgLM+ETVloAvn zIEz-xOYqFYi^d?nPVHz;LD)9gyoW;&N@u8yAP_48?rnk)S~T~hpTlXP{Oef&$!hY7 z8T+=`VWiNXwo#+e`3F{P^up9@mvFR*_|=P+6o&cL%lhxFso%IT&Pii~gWBQ~LV)vf zlY)4&e?%3mlFMCHcSr)|RwA9>zBqRtFhzq1b7{i$ALW@p-Wz2jgsd>kO- zd|J5{fI_yM(TQ^@Z%OL_MmNEsR1T9JS>WwPe~}N6_F|zdTvum)0YW`BS}cX(JQ$aT z!T5d3T^@!oCwtdN16-4~tC7LGns93+9@iUaVm*V|2gI>*un5;}de=Z5n<_5e0D3=Y z1olE22=vxReK(kA#e#4d;@ETo3Y1y(vsna2ZaoEs5`*L`Ybz==(T*A`gVMHnd3JcR2< zM&#KmPE^ByY6QO@!LX>+NIbz629Hb;poPSz2bX}|OabUx$GVtRQC)$0m55OE0`isI zeI3)Mr@-$_I!axc<^>Alb8+0Xv@DV&e=h|oiXktf7mCD|iQR+)Qpz(3;~KvZ)r{Cloou^qlDqEkgK(&z-wIA ze4w0Eab2c0*(uCF6As~03wL~ukXK)wb)EB|hEZ?;v!Dv5wTn_!HooTyq)nY+e{CA% zOyyfiT?VK$;&OlmeeuU3Ai}t6?-S1e1OSV2_NBb6?TlXs!YR&+bTIa)9tlBWtf;0f zl}GSb8!lOaC@%+IK5}5J4<6bCFa#Jp+q0gD@IB{@0f3LJxhF)LlwHCbq~_=%06t_$+%AB% zh)od?zdvBr(is0_ILsw~{6@j(E+_LMr1AGk`X4Zk57o-=ADar@kNz=Ae^;Lp*)j4@ zi%~9GaP;C>YIVHys!3*4PToy-z;ucISB%_n(%+5>BY723e5;2-RE!!5LRJqpjJv{> z<6DLFP`6TGYsHzvSuRDg#7l{*-&BG#Nv^$g!E3{cq{F9y)+w|7J{t&qHB+P>cP}Zs z%?c%^xpY(_shJmRCjh7Be?k`J@%~D`b`t{3sp9m~HLG;h-@}@5)>S%RInpEX}Vfor+Vg=qh@n-KjacIf0d_s<`xTBOiqsho``NsP%FL3ZYo9 z8VG_Es*vnj3DnhW)=-1vR@Ii)(0(X$R>Q|CEj)P76De#Z=M`_Ce>t`J{ih&)<*$d* z2#x?b;xvgr3iUTh;iyZe8a8OZYH>>svJi_utr0^VD3+U31p=t1ykcrIrhIOH49Ncg zj*jmeB?vBY>v%GN_MjNrL4*tIS7d=80I#$_T|wxyW<6*F1gAMIoOp=WOG}q}5Xbu~ zF|I*mj_&}VLM#X~f29F&3}T#Eq(B$ePedIB+FD5ha>C(TGssyMr+-cXCJM%N>68fq zN?kt-q6DP+cn$D@2o!c1)&dPYrV<5#J6Qh{6dx_z$}G-YFx55hF+Q-U=jc%|pdv24 z^-us>+pj_x2J>=gxE=>1HDrwxJ7f#|FRF09CBO--)<(o6h(!l2-X-8~e7J>gbR{V)B~|P%vY>BP0bfkq z<|@0XP_o8JM?+r~;>R|zTe&qUU?5-OmC(>tCjK^9Q z^u2isy1s;PmCUiX>c`m~w9dlFV}2mV;@gAEAbkKy0smtk7bw@_k_k#M%j~#tMduX) z)CE;EH@6@;>sDNi@#C)CJsX3yUu|ul7mj*)*8wm_e?P*i_3`Aey2G_O+)WERmQAF( zRc2O%F?CAoZvGRIy%y^#ryW$W!YBlkTzN$2O&D!}pGOk}GlKPcS6s~U(X|(_ca~=? zqk=}%zgz)_TwYI~v%YW2oL(h&3j^Sfav)J7tmx`gznYjx-EUr!|NP%G*QYTYOU)e4(`J zD(tvm;0O`c-RVXd_K#0b-oxr%ocG}S z5uZg~kn4i}t1IK6#r;*vdSycAv@CM*ZqaNH!EQ>IA*1?lT_6w4jotE8-(T+)mGyW> ze~>*_$JS2+ivngkeo=x49a;dbMSU=jlUlB~s_J6DlyIqxr1-C_p3#2&dUb^r@qVfb z$*d1NvvhqY15RZ52k$;eT?E2wT3Ow-!t6+n?JP3S2@eUESHE9dtNQHLb{W4I#qE7s zRh41)z#13cg}|e&TRR!zgE73`4F4h()<5D-x2`Bq< zRqcHU;~8?*FG3Z}oJEE3lThszmY@$Iye-xN-YL7*(2Q!4n$T6wOb(tB+Xj(ef9fDv z4Fg{mDg^{xKL4+%4&xt~vo-2Nw4vUws~)i#z>2l@fSM{!y(%3w)1e6+y*}6}ayM zW~cJVz@Z$zdX;*w_xVn`G|C4he-?*d40Hr>C4|MsmTROGwGXaQ6wyn5=zQw}RL!jm zq}j>?h1_yRwae87476wH?O-ME%;oh)dTNGa!h&P74BbD&{U)xkG${yD7#Y5(P`pj& zO5tC6jfEXz9gFeR2jrox%iEH|G;aV}LKvJnnDRcdL?86}#Tpl6b?mnrf0e|k$dX}C z+r}cDn4!-bGZR&$|CMvhaY}6N?lhWfNrpg<%;XtuvjxlSyya%vl;P!WXP4 z-MBB5DBYW|Ojl`bo_g^Y0O!`7#n*}2i=kFWG!p&+aW^Q7Frad;4;9gJBe&uSm>l_b zegvwxE=?C9dRej16#%^!f3hAOPcs>P}pWu9PdZBCugcuCZVpcwOfBo@#C;a8I`W_kl zZL&^ZFBv@LYVVD(Gr~RzE?}lEdn*ILSzqi{O-B7Vm#EqjQU~OkI;VOZU`cL#hog<9 ze(4G&mXW7+Zl_>1ytO|L+RyS{vo5-6+Eb~x(g_UI@B5~AaeCbz7|JZ6#$$V0UUu)* zsyRw~dr)q-cC`W`e<;pgEZXcdBqA5e)YyB@)SQ=2FlSHe8@F15N=k@E2Dl{BOwLgj zse6c3<~ogXUty~fw106bQM}zVpw5(UQv=~xV1c^SNuk>a-ochidND9AhR@3#N--f2 zR5X?!@GZ8eS`NvnJb7(DsMt;6t#7@MDo=aWdW&tkruRO2p{H{EX&c*H5b|<<`K7|C z?t{sGeWET%IYz6CdRV`8dx@MJ%!-Sx?<`J5MCIrv0wL~w%DQtk+4;UoZ%@zH`0A|E zH{O+rfB6bzkE1lE=!4d@7)zEeNtdq|4sUccv}nt!hgc%z>iZ2<<(9hhfg6P(|_7)_|1oi#ye?y5^_@KF7C-J4ygeyfmH%9^NORwp7!Dj6<(S%nb{phBaGrH% z!*dxYj=~vNB?bew3e(73o+*Fhq-n{Qf1R{WYpd^0Emdt@)8zIBhErD3nYVKC?ln}O z%M>`5SgtM@`a-kbrE=1=Y3lBy5_7uLTlqvzzL#!S!H9K6iuXOzMi~)Y<*U=R5b<6{ zZEN590}AZKeY3inUrm*-FRgbZC_jt!c|I!)%acsH&Tzw#3$^2?BY;h>?xQE3 zam}r^vHdtbre{?$Gxzj{=B(1P!3;dF+ynT^h%VWF)1FAn^P}j0N z3!eMO)NU1w+iMUIl(ie3brq`s{K;0Yl4o$_T@ku4RwZ0cT_0f_=t``E;0!pI+aSu8 zIUTKtf~mJ6ZHRVE9y}!woyZr5BAia{EE<4Wr_GUV$5M}n&Rm8X9eAcqe+d~ z;)<7r>AkSBslRJ>NMeK8*e)2=6NK887>&6*0%9$9Qe7o{9HQIag>WHkwKgQeVJLk0 zCBjR1fJMoKpK=^szlo{Ze~D!f)>nAGzkyI$dQ{45j*PR3zINw@a=SaK?V=T;DC}1< z-c(n$Tawr{Zg#yy#_NTATlx=Y>eTO5)bj!i0Jyd?v&Tph^rx6O3Q#py20X+ z9%ExL`B<&3)0tsu$uujbh5oWTORKU!by}TN8Tfjme!ILQZ{Omh*AVy?89At}C9ZbQ ze$T8e-jrM0;B&ermMk%j@&R1tK&zenrS}Uw5z1S0 z9P0rzLuNf~08dL1O(lS7E5vNWfZZ;Kf+E7Zq1aL>!o=Cf)u0HINzq~i5^gwsIwHs? zkkBv;x+!8yM-&eD(tJ+=#%YCws}pm68IgmdY!79X9%qQ2e=Mp#2eB|`mNpz1A3mEM z#~T&6OujuXX#}GIh{muq+A<4Uvtq1i6)NX45hf1;7@Dsnz-%337b{^5CM*KAWId)A z5h*aHw@U&95jR$U$f1orUPpy-jvq6;wQ zSJ;|I5e-Fde{!c7M^9d!4H=nnrS3CGR?@uN=orR{>}&HpEa{fRQz3MVXuc-NDGVe=le10Xwaj*KF z;+SJWJ!?HptZ*rnE1?g~s%7(N3AOHRd@TOuU0%3xRgG7&((vwZu}AIDC3-rzSZ?5b z`O|W@e-oJcP5_)xSEC;{ZJ41^*d7(JmGh##+gep8t^atDt97tnKKn&&Nc{$vDp;UpXg2MX1&mPT>zr_no51Mxgi@DCBFwKP%LYi)K5!DIK%#OUoeC*WOr7 zAiV>NiYH@)A3K+KfoKZ-$yE>bL)gdVA2t;+e{3sbO(F8b@;bc!C-6|W%qeliCL#_ zf86G@d*;m36OG36KOB4j6R%qNJpx0sm@;G>Hxll?-WYa2L%P%y#Ym#5Dk4qItG|C0 zsAnqRjXfXE^n=qLHcLwK4#IbLwaR zbvq0UNq*_|&;7(DVW&r%AeU_%w8IE2e?9+dA;K2*e*@fuIFkd*PjLRGo38Xn0T+ZW zBBZP-0o}$2;VH_yp6Ov;=JT|H$600G(Rzr(#Q=xb5dHxC3RsNMm26ub9%5HyQAr4S zEvr>zVR-AvZr5P^Tp0VhZwus7jMF9#zQxmfff44)u@8L#IwSmE?->$SYN_r=f0)(= zTbYWuQ0%#A5n)#K(&;_~VzvKuUk;(=1BcBFjO(-ZiUCvs3_LEVpNXKkz8-;xK)?Do z;XVY!%1%Hzgwvv9z;%pIr`G`-#u&VA_}rWse*^HrxZmqnF96|r?4mvo0BDgDb=aL>+Pk7}l2DBh!!i{drwOPbVdw$ZH{zF~B^7BcLe`p|ORqggY zHwr{`?@C4NaCo;>rqs3!>q{G>u&+IIs@UwX<6rBt(X=mbZp zaNUankg)QOl@cZ~>%0mBd4D9a0+4u=`uFY!PbArX-N=nDzx&dG7f;FjDPW|(Wxzu^ znDSEC3j>U`^_>gB#0$B%e^k8&F3YA=ti|n;PjFKlExLl`y0Vu-jmo87C#SNhQ^Ghv zm05@8pu8(Ke>4rT1OT)!me-1_7Hx=|sF5n3cf=GWzbT1@S(bWzyj5S}%O!-7ztZ5` zK1@jQ{k}7hKjo&6pb<(CC<`lKBMT#o=E6oR(<RBsj`rEH;}SAAK?le*8yeY?aqkW zRB9!Vho(07ChZBj7FsG}=$2f|s<)FP9Iz{cb6uwX4hY&MN41ZsYy1Wf5%#7Rr0TU3 z(LN|q>odHqYaOjPm2noT={{>CUCpVU;i!8*s|wV|jznGje@9>fh<3S_MAnWFVW$f9 z0J{=(b9C^XnNnfr%=UHJ(z;0^H%G_S{o+p7=z)}?ChNa}b{Bq@#^v0vy)7o)rc)VrB(oMVzh@kyk=QS{tXH5|k9qhqUO^Sb+&Ch1xqD zv{IY^f1Pl7^*TNg$I~6;+ZK{5vXa&@UGvH+!Hq@ts`r$UFEugU@{e!tSI)bP zLAfIHnkM*}W257+ZByMiq4wf)!EyNVj4w1Vl2sGCj6xPw^dGHZE%>EqqSVp)_N&50 z#_upxL0tX7)zV?w3U(7qXS%3Ln%|t8HmKh%e_k&Ws;5k|pO~;FOUXB2U+S%QGr7LC ztShvhgft2;P%bd9jOmol^F*~3i-VLDohb6m{-2}E3s$zwRIpp>O7e8}F6|Y>a!upX zxA)4(ygnG$RS}l%7wH2t0p4`%XeG^LFd#RE35+3)4hu8ut8al4KblW!3&}QkTVg1-m7?q zOV&!pvy3lU)E)=zca#VsS>7K~VDfk2@*#nJ# zG>rNi#k=XQI&5!`Cj*%%Pg5fy#&6%z7W#P2E8}*pHzYck`baFTG=IS8DHWtd6BS|f z9V-^NREkGb#lDHVd*z-x&reqnD(}S;-$E5Pcws^druC;mf7fMexe(sCf5^IZKRY&H zZ9!NMn;-hODa$tf0tS9#23ty;a%znA-A7t>mZ1&vOmR6vE}Ir^~zBCG^w6A zQ98Y$cvsf?2yz;M^`i(yN}^i^t7`AXdt zdAF7e?R>sxTlcOIM^Eear7k_=f}AN~S-+0y+-N1Y-0O{Vb=NYbe+#0+Y+9;LR_^z; zO0`n@*6Hqd$<@0vV#MXk6~4+^L!?Um-twY@T9}iW+}4hmukniW3%Br?Ni5r+C7+38 z1e;0kWnLwCz4VFhDs2nDHd1(_uv~sayTC2&l52){C*?4L$@@*`+VE02OK^W&TDa6# z(MfnuGox8k+SlqJe;X8EYuOdr$m0sX5O)|1?f?RUrsQ+nDm-J~+niF7`Dg`3b8r47 zW&8Gp1xm?LfouhHr?n=KXQyLA*1-f-H!4lB-M?d6uP}O@^Ddg{{qITDQnOpKU}n1!4d-KR_POSm4oA4nw-uYDEH*nmZfT`}NgA!PxWAEwTeKS2Bsq9KaMY zb6$1VpBMfRhnELvicvKiCfl^T1uBR-t-ELzyYBkce?X?i3RTT`+aFbc>x)3OHt!5Z z?NLepE5!24mF=|L(qG+LlKyDJ_74vxWXmW#n)LJlBFbV+N0e?@&8P=O8+!den1Fu& zkwlf~uGyD`)it$*)GV1m#Vc_YdeC+EqNk!NH=EwXMzpiFMsi^_ehG^s+aS0M0ZE(Q zoiSQie{MW|T~>@MHpvXp)T-$Ud(~vQe5;s_+_0plN&2-zrZz;3_EeNy)BCv6F1wg6 z<6mdI)>T?}c^zH6ro1e%L=anLsJNMs~sOvs6ymX_r~ypX|}! zcNvIy^;;WyR}~W=J4S1R0hrV3n^S-Y@uKm+U?NAhDFiUTLvD+lDJe_AI$ntO3I}aC zB<6AiaLnKuDy+JU*y$v@_8SEAwAZcLJgoS%XfE7dprjxVY(Rvu#)<`43MDH>ty!^+ ze>4GPbs4R`mNPb_QA9^sd50ZK83(f{y%}rAw3pQGxxT6I{usZI?Hh)e1L6h>8O^q_ ziRL-0Q8UJ_)#J#CL5DBaFHmsd+kOC4m1&|1o4x5u_k=orn|d3Fv99&I`atMQ zuR7gOWf)jCW*M{a+%+o-H)&p5%U$y=eO#$@)@u85N_Bp@NW!l~UmmYcH7S${x`#^~ z;o?5A(~8WaBQFYXH>+dr zNmrVIi&ezIW|LJKa#DBR?6`^wfBP5LmO`8QZwDR~F6*~F4pRLQz<)S)(sjy|zyMhu zjaVs0(Ra)tVD+VUXFbBB-+-hRJe~A!T zYY7Z6p9LSq5PNmQftROwe|O2KC~Pv5m>N8i?Gm3{SM z7a+ZOR-B#@UIWte&ZtRMU+ro{=uGNdoG8)-717p2@fNpUY6bFlJ)f%Br0B}gH|4Ox zF)w`T>B_glR9pzs%$712M7*%N!1h~yv#!>*m*GP}+`>c4_8ojOf7@ic@GE<>ZkeM> z#rCzeN3Qj^^#x&5ELjfD4l&O=OPFFSkBVtc-3gPl3#LG`Y}RIbCm82pB)aeirS`FV zS$wCu@^Hs;rvRf-+J+C#upK=O6Rg*YtsRtB^)f??t#{^vv?6r#vKb;q;hrAXtvs@` zb&u5|)jJ+@%BK)^f1xfHlb))lw$z_X+crVYXalUMT#M8H||q- z0ik!ZrA~{FI2zP8B0=x|GMHs|^>aMkhkm{7+%3wr&5>*ulfg^9K01qK6bMP%s zgx<-77XcmO3jT8v1B_=Lq@o)oZzgjzs=Kbw66Fch!SEV0M4OWVuuR z!dv0>XBBW4>-gTHsgqSazmD~ocD-S3-qDr-BkHMZf3Mqb&2KE^xwk4dige9LJim;DrSc{zWEI0D?Mb%?<#G@3gG`z;Jfb@?n_@b@b^qimPg|H^)d7Vf^N=olO;D|G@DDwp=h*$oC-6k7paXxlR@VpaF!RmK2eGyt~zoA3&X3D{v{uT zXEk>Xj>Mg(Q&0soDbxJ!3mk>y$UDbv0bj3=_xWT7=kgpO8IUq#&F$?J5?4*g-{ozEut#7K2L=>ucaBOK&YY-wr~%ahGywCR+Ek^IH63ytrSM@0NGQoBS61ynM<(b)USC z&2Tz|4Y)yOa37^(^_ViMfA_wtf4`J3{nvJCp2{Ztq&xdO!_E9N;+f%mWS%ic&m|Y{ z7np^4!Mbo;b}!?Xz)Qi^>k6{+u1HsI>+W^@8hEX^dAGrA+#A}B-*#Y|vSn{YcRp?4 zHV7Nk8>U;WTX|anThg05o2&2Gj0&6H+tTgw?VxRoos*rg9pH}C-mkslf4$1R%ssc= z{yXLad{=gVV}I>FWnW<5`apV6e-L$Ga&&$adIUYvJA8MDIs_b2AG#h3j%$x&jvY=; zPU23OCvs=6XP`6x8TXm(spPc!H0adi{QNxj9QItY<5LH+gVLeU;ohU@fqDY(I1mF} zNnHV5;(Z5wL4CwNwa(X0e^e);lfKisSKiC?2KJhDk922sM|A7=pY#XzQ~MZzF(_>JjP@-y!J`GL$!DHa2v}gh&~)xZ^lS2eE^~(OaV&C64M1e+)yzps-B* z*EnPxFiw9bYf=e?Labn_h!jG}Q{1F6DOC!RY_wi2M~l!5#B(uRe*_n`)k8H>1*^L9 zt{f#pWleos57CLbVqzl^kl-csGM_T=3@#&=`Z$H2qD`sIeVjwj;pXHfKTX0Xd6Rmx zpJy3nfp@az&FPS7=CtVi-h9+Nc3yYE!Gg#I=mpv~u7)E1T(@>l+-gj6yrRZ9Pq z;z~)SQnepy(Y3f*!Q!prm||$LZ1sM1WHq{4y!@;@{*#>9qQ0*_t3IaQs9~rfw;`>; zuH!-n(vjKW+9GcOTcTUcd$c|EJqk@fn?OyNCY`R=E^HUAe@m`yqb;Nj+9un#-xt}( z?o)3(Z%p_kWHjmQ?o8~A>hx+IZOv~@Z1wCF#$vI-vDU%L;PPOB=pWITXiBus9kU4= zP79Zd--r*1hsMh$93+G$uoKiX&J`Jo426rNUy><_`Xp=`)&QDFjj2d10!7IpZ_f7}a;dFY!En$ohDwI_oC?l0@rMUD|n(&Fs?4j+{W@&S@ zM&coHt~g9=_emg8piWeK%7t=D9xFH2YxJl-TW@aA8p;j)j#i9tARHQ&Ulx=FW6|-v zcz_;~N6Pfxgf+oTYOaqixQpk~vu)S{Y($%)Z_^jzWBN3W+kc;>E2vS_x#zrp7P?c_ zx@!%yVy&{?-P*8PY^`kZZgE&Kwpg}$w>qpETP<6@TOL+UEmy7ItB;n0Ta37Nnp?z zXcBNg;Sg{HI0d}62LKNMj~~w;P!CuRNDpX_s70(sWWQrODItp?xgotVb(p1?(U{ht z8c-568Pph6feNDLqWZ$hVKLZPSX*2vE`^(lYYHp`hJS!F?|2d-WCS_#PS`AgCZH3c z4Y4m^1K5GshT!Ai`QUlre(2-q`RIA*e(>Y)`S5x0e)!|~`S^MGegxwL1q6Wvh71=N z0ER>cM+ylAK@mw|$syukI5O`zPeKxiB=wQ}5o5_^@ugAFkTl6O);ubnS{`y9cOorO zIT1gRKYx<}69SV2)f*Lvib5sB^_L6CMdFeodryWY!;$H+ZLx*0LD^L4_UQuY&~)N_ zXMFK@j3*DmUcx-WBtkF7QO116L`F|aF(pVDP3g|5=S1KXA^k&&B!!X6v2L*jv2yQE zR(V1jPfJ1T!aKm5%bUk*Nh~D>iNlHgnN656%zsMMAE`O0q13|MC)^3#9Na$SW90ed zndH9gI(7hdkvpjqn4U|MFHxi@O;l2KS2b1@U)4jlUp84b@Q&x8(4}=1gntVog=xZy z%6rO@%5-H1>0aqf>9jk6lT@434i|6Zf`7z8;#%sT)p^vh>eBM3@)`0e@<#fD`t|ym z`nCod1KL2q;mrZ(fO1f?*sut);95v~oOvX8aCq35jF=>w9^vU=*4Ch1ifIUc$2V>Ys9W}pO-+(Xft2Vu#pc81)nf;!DW{8=>ynRwU zubz|7trwaFxX4|&E`>{G8M$;^30C#1w3XRKaY#H=yfZgM924(k%UdTQC&&}Yv(2-Z zGv=L~apyGXlzOUqzIz^a&VN1E?KtQN>>zh2_Z;@b_F(sjcb#=bcfoh*_nr48^fB}~ zbar*-bcS@A^!E0q_2%>%-7cQl9o6mCKiFU0AJ^|UaAANLh#c@75sqLZxg*9ynjv&3 ze8_!FegB+Xg~6XeP>>STiN20PM`5FK!yDm{Ff*(g-ye@0hmXr&=zkDWgb=|-8BubT zG{sQ5BvDeXWUVQ+dQCz6CE`SqD5ic=IaH`BD<8?hGQ8}dcj{?+l5Un5PgEpA6TTT$ zrZ~f&`Z%tSY&(&9bO6@Fxb; zXx+h<%!kdyR38vjrI*!gp=XX;okAO_~Ll-c=rTtLU{sxf_;WsQLf-u_@}5P z{y+*C6)_<^T%tcC3t%zFWtWu~zRj$faCX_LyBFdPC7bBn?PSrRR7o)J%$C&8m`I)5@nnTQ`{zq&v!fQ#JaYm?dP zZBaHGUym=^2ka9yel}u_7^8yG+^KLf&N!!&wbPnl#r~*!t9EfMr&glYy;xC<6sHv% zRrghgR|8jTmVYV-mNUxf%Z=-0_mX8$y#>G-KpX%PKn>w90tCU0K#bsd-|1Kh5dxuq zujPuuAb(>>80t>q{QHqKiXF`xP6Nlmg~D0l3GmAC z!tku_tPE*@DS#e`J&5s$@QC7&hmetwTu52W9e>OiOd_Tr=qFG#C=65z^%WI}%0X3u z{RNAGMZhZHwq43`%W>Ip&4G2mrNGI+#>jGH3^^6q6ZUo;Cp9Y@-?}FcnpMxKPZ$Z#QkU)S>pwDp15X}J2AWm^i5qc+$Qsy|| zh=1e2a>$bGkpz)2Ni5s(N(q{H-w3C2WW z5~2D}2L_O14@yYBp;+4IN1rOlQm|=i~Tt?_|$n zLW(ez(3DZg2r*{fY8O!=l#!Ht$S8y=m`bdlSd>VWu+dm^zJDSL z5l|#p#92k7LaIcoSj(tnYGt@(ymgd1#X96V?n2r-_7l61y^>m~{EqePFQu2Nm*UrI zTLQEIv;@T3m;f;ZF$J|BY6vxgnu6R9Imn&JQ9|#h9z>6!ry=+zh!JE6iYWe41Svuk zRV05)q9iGjGMaxhVVWFGoja)$P=6F8Dx~_Vid03ZO5HJ?u(B{&G2M^4XkDDHp74fn zfG|;5Qh8fBNSUfEE4?orC{31@);`gW)`r*C7w-^H5zi1eQSVmIQxCdhH;u_>%g4zZ z>R-`k^h0k3$PGw?XajQx^&P`m!Q#yVWPz~|@_6;YdeA)dOg2nHOrR#RE`R$jkuGc( zb(?dW44Vua7oUEgOrIJ;u|Z)ISGVWr~r*9+pkx$8o|09r^c zPnKEByruEVV#QjCuFuwK>%6t`#$tooXl_roN!zro?T&f_XG3pme=A{&Xv=VOV$)z# zXnW&UIe*({XMCq@Cw}ku9{P53@!h`N)ZN5g<9&mDoPD{2orBl|iUX&k@uRY%^uxD9 zOwN_V zWHWtGuh!Fax5Q{7JrS3%%M54AGjSQa)bLdKRNR!^-0)oaT-==7M|tTQYeEle#8Ds-vrs*JA$uM{rb zD-9{-m1@<#)PiaWwd}Rd#o}V5IIh^Ly1P218ec74zJFUDQcf#Zs{dUNs4uSPt@mtb zZm4VsX)x$G?g;B3c4)QyX+gA@TWDJxd)j)^dIEa1oA#R4H<6k&n%ukOT|`$_mrL7u zTVxyalW_TOAEM9O$J*!DIMSHYNN?2b-0ZwR15u|yr**6FKy1H%MdL2q9Bm5~W7M2QA zg^tQrWu`Jk=^#Cm21=n)LG1@E@UzB1Kx-~mh<_<@qS#G6qRvt$sMY0%@-R74E~kH| z$LSe*e!aIrVSo&Q1~bQqBg>KCP`4af!YoLOp69&>=YeX=U<)CED2B*^ zu)sLOxbMTjkh@>t00IGkaNp{epcJFzpjg11!Q3BD1fz%Z4hMw;z~RR61rh;O0|fzj zAe|zGB2ke9q2AvEJpzgy${9mWlR9Wh()#F06eCZIi_;h@-{!l-+w zA*ei5G1zyoI9Ld*1gt-<7Pk~P7}ph82223Q0h=KYAtxfoAbUXfK*vMFLyKb{Vt)r> zbFo#ycfe!7iQt0hpV8syG;}fe_wZ176uc7t3qBB^gRevImjFh9xsy8oVSq7U7-T5^ zQs5{!6ha&?97qlnhZf0u5-X2eCe0pA7!8<4ndg}2{sdV(4n%!-hNc`M zC#Er`bf!QiPbx7LNR@rZi!|WE;D3@Kdm+Q#{$7!7=g!WAW>cr@pv$3)p|j!}FQcY4dlf59z$mYsg>uPlYbTx$k+`b+rtaoQ_2vWu>D@z|s zM@!>NTWEJ`r)dXiJBg2pXN$*)8>(MYXVgR0ZRO?ipnS5twZ2ZjSbv{g-`+rNP=62h zZDE81;db?(77z=Bg@ngX4~PfCL&D^z3B-h8qHrf`2DkvY@ZbJkZBuPSZsYBvx)U@8 z`}i7(jVPl~BTFZV6W|o*Ale7C^ z2esqasrdc8lQviTQGfdx8%hlk!@N6n!w4~rn6U=^Gh`?di_~OpFc&jPOcm%4(_&~T zG!|+}ZKvi^bEqEJb8ILUi|;N|%T{184EUw?(~-~21{q<&^yw1w#V2# z>^<$>Gndoe)3no=Q=9YtJ2rIAxlzYJM}J~RQioH|NKa-@RF75HP*-kO zR+m@bU|(@xSf5+x=$+v)uG6k}xVOAFuh*}8yt|+~u-mZzNF>CcYj5zR4ep~y`+}vC4R|YW}pFR0^*O02$3Kvs6SPRicmG=HyI;CWD)(Bj?yW* zO5#rfmcS%rGJi9;3@0O$dYJ-Fk*1XH)D6%%)ST4h`#XChYf@|W!z_3fHmf%MaT-01 zo0gmZG>@O>&Fd}LSP-xPxIl2lRz*Ywu|l$BvwtL{gju3lvt1KZ1O0GiuPCaBTBKUF zTNPG?tciese0{MZFntw zt$gumar{Rd^s76n6RHWS9m;#kGs+`A;Xqe?PJKqbM?+sj(x*c)>FDjq`lM^LY3XiB zYk$dU@#*RR1P?(yMoj}vnN3MePF+J?sa;W@B+_GTxou%>W_^Qw)qQDwZjGaj>5XxX zcAev$`JH*4hOHM`fzO!0u~!m{#74$i28)83;LL|SK+&PmuHn*fDm*saHeMW$#plNR zCdltJ4#5e=85#wtNLE-&RFYCjw!~Yb(|^=z$RF}hEn*kBtJJD;6}`$oO)smL3FulU zKnI{x_{5b)2oXXF$xv!Ye@Q`7h*U-UTZ__Cv@+s9pWuNb)=~de1Jxk4ko;AS zl#}FAA9g_XD7}{9y#Z^08N?hP9B2p4p=SAHfm?8&j^ncj@8Nj_O&g|wPvD^F+JAC| zxR5SM+qNy{!wpT}jxWdu^{E>7j8R6cQP#QZjB|3Gy4C}0pcQNt_8!$n){<+biw}!K zi`m86)yH>c2k>g~^0V^ja`bZb`qTRGdiZ*MfOCNR(>4JZAao#PAS56-Ky*Q*Kt$ZU z=)=gt$hZ>|bb=&-q=2}f^rEDp#DAdJ!1Tl9!Q{aB;0)j-;soJ10gV7<0!0B?Aq^qr zB4yp_8wa6^p~9fdutu@6vC^>Yz=pxf!ScZT(8kdU&;rp6;V!@taEWk^cp^LmFY=Bt zEdyi#Ljg?@g@_blDxxc-6cU4sg|x+#V{(|en8u(AQ1A{3oKZEXC~7pSHGixMwicEf z)*DxeTZ~JN>kh01t_G$DwntVY*CX>I`$OxY0iXr2+cpSn0=5G9PjCo00$c?05Xsmlqg;)kQ68iDUNp>SPs_RL43G7 z2pEYP%SRS83+>M0_~{N3cz-l{JfC?Ocz`^DL|a4=L_{JOAToY9sD}JLN+Xw-fmgc`A7nxfS~udoFtxyBYl;eKCC+ zy&M1NoisX*-%em$AYUL)z)#_V0-zA6;3y%HAS5CsEHy+Lj7Fx0r-<+l4MIgsRirAE zN~(&jj93Pf$(8Zdk$>xeI>C1~D2)&)lq}?|q*5wXidOQL(n-}ykxQ9tDYdG#*tOin z)MDjg^kVjEdbN5r{yTjmKn_4oLGOniLJy%QA^7tl2pWoS4?z(52ZDfm2*S%P2qaad zTM(eKC|NDt_qteJn68-c2Vw9%PEb?+cxQURDa+j%pW5t=8-LmX+C*(d@h$O)JJo}v z`sN)bFx55XcjSZQq2FY0#Oli$>>7j_a1C@F_8kHpzz)I|M;4J5=NyQ?40~Y{4)KL{HzRz3{wrW480u3 zh{?n-q8V}&nTS%Mq)j=GA_f-br>K!nC%SLz)5)YCgTG)-G3Xe#24eq@$URtel?$+Z_oFC z<{ATN02=Vsz5p+Pm%zJyL%a!Zh0l)+90(tU;m3d&2!q1-V?>OEQQ`aJ3;80x64TEK zG9f03+0PjyLk5ZY&pBj{m`f~vE+7lWLSy;1#4H(0jn&%v4C!7EBb_Dd$w@{N)^Y4u3iq>Uik@c7QsBdR}^fJ)j<;u9q%g z7pP0wIX$`&)VuP%pR`mTSc9b=$HT*t|4YR^p@%MKMC)l{y zg?|qMSbzy)$_E9kz!Wj*g9Mgfl9={E18Xo%P5daLMVhFlepJyaO;wXW%4nG;tLYzg zv`*9I5}y+A1TG=>qaN^S3O1_sbuYDZAdM$RyP!ZdhAd5 zaBPS*U>md@$BtMBxI^4>VhOf@Tf{vlo?s8SN8EH`3O0e8#9b$@U>CSc-G6pwi?*TL z)O}~4&;i}2Zagza8_|vG&NFAU6Wu9qJ++2g;jQxC)7tP__*(hm)8g=A_+t6$(>rW{ zua+-AFOM(BFW0X>uaB?C|Aqnh0Qv~$2=NH`2>K8m5D5?jcbdlzj06mVJIzxENCF4} zhyhB+{gO@s6oY%rkO7kb<9~qDgOh=ifa3tv1C#-j0OWwwgOq`kfaCzxb%zTPP!?ES zSSeT$SQdA%kOCF~W`Wj)mVy?6W&zg+mjjmp=YiLUmvf7P2Vfsy4q(PTUg$&2LCiq( zfb4`!f((H)!R*9L!VI|sg-*~U&=61))K1hS)DTn?*k0Hy*c4b7+<#u&EZh`a7vNst zEZ`Ji7vx^#EaVhq7wB&2H0T&;8|-fEH0&5`8}RNs^HU7C4SF|v8hQ-6%^fP_!RNsH z;P>CzoOAGf2>J=~2yzH~82TCV7;+w2ArmQrD2zA;I1)L6IE+XJND@hcNQ_tpSQ1%+ zSd3^!XfkP%Xqf-DxGFxUB9} z&Z%TkWL9iLY^iKfY*u$_$XvQCIxoI4zFfX6J}<&C!d$|vduCvaF_$rm(Tj4BvY0ZA z(u{MEvzRlC(~NYGw3sxE)QokIwU{-G)$H4`!YFSxZyK)~@qZ|BHgOuU8}sO$88VI8 zje7V_;T(5oeH!L2=Z@pHBOfL&CyyhyV;{b=NBkZujDIs$80XKw(?0oq+X;*-3^guj02+ZBhW88sAQC8IsB%FCPzh8ql(`~9$Rx@*>PU15oy1!skO&b% zi9(J_5+y<@QGdx%N+g9yMM_y}iL?-{NG(e-kr;AkaJEzvsUd2SYL;>`IYus1&QnjO z$LMA1c?!w|8Np0JPeqv`qnN4aDJhhMBts=lHHDgxW~ipAs8AFV4HY$26{beR`g(=}wVOM3TGNqiV>?$pm#((aVPqx}(ZA?2>+g4mGj)}*L z+p3GzG4!NtoI|dIuZ6+_vE^Q zCJGbKB-q5*MRCs<1iKj9XlzKEWE*E6%^g4_-x(h@Mx;@)k+YM=iF8VKa<)=gm0CsL zX`fVHrGH-0Ue;zRvr@BYGix`MTd7;Lo3)+JuGWs*&f8DtSL?^^=WVDntTp5|^mfz{ zYl+-MZ=@1gj3h^zGnLF@COOj_s)QCp$)V;{CAFAJPBq7BvDH|1tUFiBt>&_G-N9OL zHJBajPS%pEFS7>f&8&f%UCyRw+r!oHayUKQo`0^Um(%I#_J1*J@LlGo|JPsr{{GuN zo0SKTjzEHXU-;C#HoY(0C;`3c3+K%vmVaR&t)S@(e}3Wo#4n@>o|E%8!UT&A{z9^- z9p#Jo%=WH(XD#~k6Nk<{^#zQs{QG|aGaeV_7tqs#JADD4kC)>KfB)mRW})^crGkeq ze1DIw6a0n8rm(5LaI}(p?-!Qh@C^Qd@aFVg{g{9G-v;r)^_%FnH zgy#Q+!Y&fpkEXDz@WZBT3yZe1%_Oz;#i7&kQO=$UryRSe;Us&gfkL3&F<5OMC>j=@@eN@XO2W`~=5A#tx z!@t1X8|jf}uPjS>Aa0)NZ;-3wAH^}Fqk24$)Zc$WVUgD-c0S#oKcN}|RJm!Po4?DY z-1RRUDC2+Rr#yLLv6?6H1bE{2?0+d4U*P9sb^U^Zo05VD0%a6Fx1zj0v6S<~l4lPv z{rwl6ETaPL@4q-!rwT#`2`KY%asGqMld2uwmQjaNzGB z8|+C*;5Dls@6XRcE-^&EEaSXAU5~plsID_ytkpj>qNE>vOivgKBUH@&z5>v(SLQx(>W-%X%n&{-l8n zcv^+1e^w4ETa!+i!o(dqB+?4|f9tK7fFtO%lrF-4SrHMq|M&_-)GRINNZIO zn?zZ@eTE`jV4?5+{HAaGD;Jy2k15s%_xCrO(cI5(wM#>DiSf&-=6^u$EB#}Sh#zX7=|NFn!VtYMSw!&yiP^7&6^o z2p98dJ27K_zMQ+pSyIb~{(Rj8&1~$ad@s$UyoSn*=C? z9amGcIemYBZducb?=BR&nZDYeFXy+}mnCQ|>YhmZ`wJy}9w5VM4#(c#Un5&{GK*7a z@%IOOe^R(cKcVI73Fp%v3~b@6(9WxYkJlk+;I_)-H?nA1@P9B56!1yu75sT|PzN_v z^Ig=znnD(zXY~8b6^xs$4xjmLk)GJ|{D~Dh_V=d``&H-78|nL@qvog7%Pm|s^yYln z3~ea)Y~ynXe_`}lU**Gw-Hbf)e>cyj!p@@|bx-*5v2C@pMTeRGnW5@X!n64_x8G8loiiQCfVf)fB%N2jmw?TM?>_5RZ8`czp+j5 zX~i0Uuh%`=T-7IK!_|j-!JoC_7PW+aDW2B=Q`59`_AIMdIsgl~X;a=I;+2qY1_B?+@>!31j-HdTB^Qb<@}VQ$~6s zk=dtN@bpB2`{&kkr~lpjI~?SA0s`{+(;sBHlk=Xm=+{m0tW19EQdaDX2XwS_U!z6q z=EC0}>wm_de-3OW4bQ#j?>%rr&4({MQ;yg9Xf^&JABP!q9aZp!xq2CskMrW-S$lEx zmVW$=ZZ&fr>WhEZm}BpUlV?qwd*}-YM^E)3#^I8D@Bj<$;~Nfk{EmYig;k#R_kYPi zwu?S#C3Jq_V>zu2UpT{s4S1;DEgJlB^?qaNzJHLQ3f>P7wOzq^sIJ~MfN%J7bMWZN z!5!ycz^x*L|1TUQPy=RtfubA2l`oL6{QbMM%`V*^F6U{MBA%2Qy1(!hPWeOi&lNsZ zciJAqgSKz`%+BUL<|ZT_em-GHdW>03R)6RdYH95&3W7b#(aUP?s=uDQk3C8 zuz&uZy=FE{c>c6%s;bXv8hy{@zYl)FO7h^}pIlEfB%`ZX9K@5?QF$e z@t>59?%(sLR#WJ;RpN&|Pl%Ll{@{;z{(r?U^oh?uX+~dn zTHf7zDAMu^D;122e>5v;xl51B6Ef3O%AjvJc;T#oNy&ph0wWVPer^S&{{si>|9`;2 zi&gZiQcHS2DQi+K>+1UZujV&1xBK&##`!Z38>Je$UO)NMd=SIy!+UQr`{Yn0A%iIv z3eTnub2(V?TUJv!Jtt8V56;A1^|&ljM)MC&swA2q`G&;$ujC%Ztjn?#`lLi^mLc|@ zJo>dN2mhp`I$iR_cy2{Yope59lYi8Wzkl=S$P?xV#Z+2{T&vx9p79P(+Qo}C@{c1- z5AJmAiF)wIQUD5Ll6T-PpEO?6r&UUfrVYg3-)m5lZLMtM%OtLmtLx61 zYC7g&JkwqGF}ZI}iTwu-RyVJ+p^I8HFSAYP#cEzk6>U<%y;V+U^rFwD`B3qtr+x=L+ zL-VJ5PnzP?=6ZHmYIn`iRJPLO=32HG8C7#f+3nyaPxFU)vZ#NaG}1WVl;Ebh5%Ot1 zL3(QKL+vrqFZn+4Loce&ruS({OqoaT8AX7i>B#rwN|tmCjYZvk>3;+JW@C1s0{)v( z^`F~A3Z6L6|Akwbai0|=>-LSu>iUHH;DWf#NpEo!!@jALT;w@xYT)mFe`d2juN9NSyT#3E=+9RcHgqrE^q6*@Xw;N@NwVV6 zv`=qV1o({s^kCx>Ys#M1Eb;Oi7qi6z9)rrp;`w$(D*8{I0T%HQtE}%8L8@H&okyB15eQ_uNFjdvfStyl=d<{zVYx|W0n%TwEe8`3`hz!b|hm2++sC@De^85*u zkPkk6`tt_^os^EkxNJo)1N;05BK44EJ8j`ZEDR4RngS2$c=RHQVwfJacjJkSYy^?d z=7r@^_y)+MNstEd2^xoA;4*?7 z_XW1vXHC;lZ#xt4xzc5bsF8~#kFvzjh#s%aqplkz%+bZctu*+Yq=)tD*9DDrB6+eNr#dPuvZx%agJ=>VNZc1&sKE6c*NIkdbY*M96+WIqcJ_0N4_+ z>DRtNV?8REcdYnwF+~Y_W$eHFh2nD)#xbDItp| zM7sL>N3ouigu=P>+L^c~tyur0p#^K!=co?eMN`Dr(^0x*KgNM*@;+s6%xVsK<9`|Z z5BOoqQZKw$DLrcTdPZc|vi*6KaFMX?m2qK~H~D3IhC@Lx*!zi5|UKl8(V0 z;z<+r-i%My+QumISW@ye7itt`=v_)EsfCyfwQbe7s`7X38Ij`Zf2t zo(0avJgWzw;7>hahk9B_jc&eYe=h&M`LYvL{c?rQwT8biZO#qxQ2Xt$Lx0X1nR+@` zzlJ{WPfPtWJmhdylSKa)7&-l(_wkk&uagxPnrLO?WGFi-hWcU zReq=&4)hrF9NnMzxD-q7o_P0^MEdi8-Bq7{<8q!e4>fV!A7mpoPm?_Zm714J+32_5 z@7P4l029opX_h>KJZK8#nZpM3_a`=Q=+C#v-B4Pizkfr+j_Uhddw;Zfp6Y*)un6%d z-eavhv7eQ?S?L?y*`BqKmG4L3#x9b5r}j04{2Azm##$<8^<{cnnx=OsOS&}7>s!5A zv#5PTd*-WIP~mR|w9Zh!LEtBrJ$~Y*x)UE;`*;5A8$Gea{t3iL-yCb+{fBk7Zkw#1 z)CGm)p|2fP;OwJ=SAXL%MHT$rG-zkw{UT%K!ep#R1C4O8a|1b}}T~zG#2zM4a zqCJA<-M@Ic5B>y&yL49#AL1NRSvuWn`{o0}>}Pjwn3k)tU|&r3X#cgNv@P zwI6&~bvr)kN$Ds|$ZPy_I@#;)N&DMQ-h_p_$m*$L&__2qL>u_QyU91<#t+pCW3zrC zWB}BM6h_zXr`Rd>>)>SSILXs|yGA~cz)TnJU`_#lbgigNxJwrXy$WA*^fP5f_Ho;} zzV{9RnxOoHxPMyvJT8t=@V#eu{pP^hTM3Wz+D9dY)I-9K@xKYfaOY}Y|1aJEFC~cPdN>T2K(d_#P{#y_&hQk&0;RclQQi3XYcS! z*$MKbywOOWW_bUzSt|~Y-pm1=+rwLWWQBNekd^r%gN^O-a$BNY_-aU<@n58z=Me5O zT_R$X6Fg+Nw&uZMDldsT4_>dcnnyh;7hj!}PA5-F2e(=O<4FyYecq2)lB(%7-f1R& zc%wy|Cx3?vsh4>0Fub-DcA}zBo=|WfwA@e&A6z!AeOx9=ugQ<;9H;+;M_5exGWORO z2q)fk8R~lu9?V|zO8qb|c{iWD*_qdCc4*T8=I=lH@r`#Fy(fjoJ&QfAW27gFy5Aw4 zlHo}o1B=>Nh$rn^x}t~AiuP=3Or?rg?obcb}XN8Wp_uG)1!dYk!x-$&^nS47~JP zTDMD^X{%0}Cl^H`PcR?0}4cIwkT zH{v9b{-(suOYU&m#K}HI`k~pBMam(Y`+wO$wL&&$Q#^IB&AC*Uh_mKU@=0M%P!Q`u9UZf;Lx&iKRo; zq)yKv;Jj&*4T}1Cv;XQ{9o5a)G^6G<`_ha!K(i^S!~>fpsWjTfzw%j63i_*WB!8&K zH|qP|(Avj0>T4#}x2$76W)?OMZOzcThn@$2@=ZR@PkOGT$N85n14V4IX2XJ>({xML zf5};&P&aqxH93$scbc2|88YyUZ8ql*zwj*Xg7toyF>cOCId((!os9(XJrT*;Q|-x~ z9{f>vQ}_#eo8jYcpt1*-mq!JxeSb7pexc{56DLJlBIh%&o!HdOa1^AzNtf3G?Y8Ok zC!!Bcnxvtw{+pu1HzSDS{}PT?z4k;gKTmXM!r@1-*vG(f6gb=x;&{soPUP?e8Z21 zz8x8?XYz?Kv7Xqg=7|x%9(;~=KKHcl#p4+*###!CIeubd zQ#+ODCwMl2x7H>AHa5Hes(+=O25sVJ4>T(B_p+%(XJC)kDcoavV&;!0?wfn!rI~-n z!A~bGdNvn6Nc;rC*e6&vU9rN3mk!n6pNl{5zJE5BP0071?z*Ns_>sTfqnCK=r0ns* z_f!n9_xnOrO5uVg9|Iq8Ac@2Cz^Q}MLJksOOm$k}*52vnC`4~Q(a`-I#=i@6Llc~k~&u+XA zJJRD>*E9x^@No9?=}zVk6=gl0`p~@+;2Ia{s7adoxRCWWOy*~UeX9{*l`|x1UUtIt zd)a7zC+c%>aU-LjtACLX`@)s`7+6mZj&c5!Fl1v#eavG%POGT{G@7RsAmiO0GFtm7 z)ktXB@aV3m*;wKKi#f~$*oO`Tv>Mhhad?*hAa&51i`n8nOeO0&S7~+AjD8HH;xTwU z4gmFV?#qm)p1PBn4fo_A`eoRewiNmOlLD9cDPt%-o;(I9gMT$)C&~fCAQe)EJpMO4UR;CW|DKiP6<4KFt^zsM5Bwv1E*X^vMnFaE|_mJf3mE+~gKc;6~ z9_b$wZW7PWlZOw1H}Q=(dU&GH%MV$Bz4y;(wu6jwyRPhhCEQ9)h)EAhkbD_u6-Z_?vK9Dy zus{Oi1K&$`cMfs#j<=JS*cZP4>Ty)fT2DT60;HnuKO^NnqxepxBJeQQ-+r&*XR4v&|FMoJ5iv2Il53F*S88OA1br`Z+N?+K^m z4Ta5qQ*xEK5&FwR~K)*JojTmrn?MJYnO#A@VPO|Au_c5RxJa zpSE1};5W86lh&71RvzjuoJ)TUU)zT zN07h?n*`~Zke7xDxY5H{H}3Hi{Ma3pXMa5TW@xMYiP6n8;Ywz}{=zcc?{~e9kgxed zikWJeuRSyl1)E&T$TOWLx0tr zFFIVmk&CoXOxzB!GtgaBz0}QXA3jx zilQg}mca*B9$sO}`D566AHK=M~2#{Tgmzf&m3-*9Q zs+?vw1m1C^?D3!xQJX-*C|TzvJM+*Ari3x?il_^o*rvPe6Nn zf^*ZmNO$15rI+-|O;ALdhai&}SiguU0Jc71eF3(Am%V{G=Ir>5r!nFmsye5r<`I64`K^5DV4J`4W>VMZVY7{WMS0?0fk6@K?gmo~?e$BkT)qDY9G?=1RW>TmNG@T>=yuk5Bf08K!$zyHR4GnJ1?)K-6H|6`KX zN5#`yRCQ1+^Q08G+bi-5iLhzYPqX=&Awouk$cKDoI>~v+bBQPZgHpB5|6r7#DbMrd zw+8$Nind4PG*y0d-%l$Q+J58g1%pTRthB~?SluTw)a@7Q2EhUH4ZHGpStC!pd0c_Y zd+4Nfkc@}wil-n?eQqzZe&T;qcd(N(5TJQl@ku+H9Q+Wl@1<5Z^7lb~75XpSk%fDV zKc>axUhFv#FZ4qn?0pN`Qv9Na;bxF{=zyRRxgJqJ3^I7^hu0d6_z2r^+@tV36ooFo z*c{gKPE&!Ol^VFmdS97?I-=KfDm#t0#w4jq^{eeS$ z{wzZuC7fw@a~pM9O~ zsODYvZHnu#U)cb4CVs;^zfbUQniBnHNY1_b>)?%cn75H0B#(bjkTib7fp`tYj}u>S zX!um_aWlyq5T8G%<6~Z}t8!TQ38SZG;T*AQ+!rNCIt{(MW^>jBx07Z~dVJcU&HeNw zoE@6eITdCM)?Cf+9|>PK7gNKhTchdJn?G=HBR@QwXqZNrhSZ13E)79LnMF3_l6BlE zt_4Zr+hMK=V0nMN_%3`wm>8Tz96SA{_V7jdow=dWH|9$YL7wT2dJKH?n%?Kbsb0Y6 zsm#$d8?!$sS#<5J>+*h0#B7;mu9jeFRrQ=Ek(K8ecS(QGk6_o-$S5hs3XL&08ZLRS zhSuIyEgG`UoOCwyi*FvUppU{QWp)#-{`RQ+80w#I&i4nK%F`dsCve7Nc*ewwd@Lqe zIS$BLa;K}TSoF5Z<<%XQnAw3uCS3}4`haR#OwMwKuO>!tDM@id+C7)(hJ>y?oeN4m z^XE4taQ=V9wAfFa1~)Gi;v#l;P0 zayC)}mgNbtO&j*~{ny+<_WV%qC;8uB7v7LlhZTQFL%o2{M|G?`vAg4)26gh+qCD{d z1D-xwT|7y6!{>Jff)=R+a4yd{TZTB5ynM*T)*pe0Wy!(81n2n|^lB-fwy6my_<* zJ$kd*Y?Y5;MW4?~=?9OoD<1rb9!(Q=QaXP-n{7PJR)sz>W)t>xvNbL}%_W1?AJMs) z<+%?+KPm50k$2MHbcfAw?Pr~(51zbL__X5QkA)B3tod30;PPhcEstSUpSvNC-8J>B zeJmr#7qfZ2Gx_Dh#ogf21FzaWoNeTZ$U{0VCtn=#>Cme+;rXI9Se)RWl%u-lt8;%f zt~TA~ms7y*7hZ|4d)V+NVbNLxPgZhkm0|2Au5lu<^Aa z=00ZF7qyRId74evRK+q6ks=STkvl2z3xRY0;3fSV8(o_dz;Al1#)=O;;U8AM7mj_{ z@oCna$NbY!yUK??*T+QeqqwwI6G?x!eVk;9$H9*%c|r!6*(Z-TYpjc{pvrvaH#&P_ zoJKwpRxR~zu4d<^S2EkpUc~t+Z`XOt@o(ZEi*NbQNlWxwU6Qg&8sVZAvHsF ziuBaemIti3<4NhP zZ|GW`D11~3WoXHxvM`~OA9^Cr3csf|_BLtq4G*Qw2RXT3J!*NAVQJ{b zizgIL2Xoq7o&L*qb;*V%1x|mjH`0=gagJ}rU6&h{o|`da`tsZ`{bPBU78-qN>Xg&M zOuxa^H^A@7<+XKBEPMXM3ja^sRTz1pKY!`yCsKm_p%+f~1n9_y^5U_^8Zw3e`P0k` z$u}Hi$GM)lVFBe(LNFb|5e#moQ;=3nU zH%*>1&o{QcWIJjjgE`rs0ND(S83s4RcF3vL&=euj*%0g!H-2-QCU8Y}rRycvmC?oJ|f;tgVxp zzHbBFGQ5!vkPZJx5;lL7R?dpo5EL(Spdp<;&7Fokx3ra-H;}mf_2kV|kENC)lLw?| z!wSMhr)h?B7rV2v=|$@aW5bqaIhO>dXv$=ugw@zg&w&x?yxE)q%-3SW*gx^UX-1~R zqAjhkawF0d&KpvTd<{4h-IsY(CSGJw^M*{83_2TPjHb=*Jz9UZq$oDd!i>=qN7Q%p|r1T^xSE}!-<`1db#Z$|DR-RVd@s^O|NEx2}eM-^s7x$AVb3S3-#)@|n`jm&wwBV=fZ8W*&ZPbCuuXk(ZvHv?ERL`FY*jk6C|)8<%DtXMMiz3gbgcaaE6Qy^qkchYWR9 zwW#oSbNh3l#!r3B_^&ybqVweNZVtXM7ntpFNv2ZJI6SuoYKF$E)>QK3WkY}dVd`(Z z!)BEK1E1Ww@T6V8^PtHgACuX0LUSJa^}t7g`|j=NYqkFJAkU5`zGL|Q93(UNVY`1R zdEy_VlnhsK(a$S4P%}prm=rwxsM(6=a(?h9R1+@7FPZGyEJpNgc-Xb+bvtG?4|2Al zkJ=odk2ihQtdQHg`z-dHE2w6d`+bYzc5j+9cdHR$RFmg4L*07zIxvKo=mPLOL9!FI_ykwothr^rZaAh;>yu9g0mSLZWwQ9&8 zd0f8bBUYz@E9QU6W%A6pyEdlsMN>`gjff!V>!6x6UWo7?J6ydg-sp|vywgS}Ze^Bcp|IalC8vL?bz_(DsmWIP zTjpkiD4e(~%}79H)@5T(jZ4|v$CxRx5Lg-tvZ3fDiou3>nmN52IvL?#-4JE2_H7tm zZ}fw{W3fTS=8~ZUZFQnpi%?DY+O;%lXAXu+*4(=dNp^Nzy>o7ny^5I_C7 zO};uldR+YFUq3a?8S?I}36qul{TI$8_j*O&&Wu{v&Ynp#EPiw5VUTLyhGwVS!3~M7 z$sjj0si`}tApi~jt6^d%dU;&z8};x02M%tAM{}E+uJQAStFXB`TF8IFzx<&$bmKqh zrj__nUZ+Em+=hQNl|)M$LPWD7YS%XNy zr`HFW1-{`R!xJq#TN&*$hQ}o%VCuVh4xlDJqUh-3@Q)0%>?&h(J z=5DSJ>Xv^$5wugVp~@%vg?yr2ynj#mu~XzzzwLF6?^%0!%;xX8`QtIkTW#d$2MQg& zf86emdHhGDJ>X3r;~_P_1G#+6f&9_9Ii&oj()2eb*_!b1S4fi&4t`j@z@JTb{^t4L zY2TXp{RhE5JffjzD(pPCJHhAchcwT{y?gLCkkxl4BVG|!{w?cdhEW*hicwCH_89J`;S};7HA$H7_HAQDA4(JCIWML z!42#t=fmvX7cAiAK38!)Ggtuos6=Kr%;Ya5#c=yPxm@k=H$st)i=;)n$qsmKeQMpy zvrsShiT;hZn(EvT{f24gLSb_;Nec;GUqyfUn**?b5^2(H!HNY1G_)(aoqz=k&<~ev zW`f-2;VVqGTD_nk?jhxnpX(d%h^1Iu`x_9h7CuHRwMkYz`j28KOCCCM^@_q?+YHaI z^9J$1+Y$F!7A?h|a*g`?U!lH#rMicK3aZdtnW$HNJyLnVJ% zjQIkC3Lqig_}2x1QJ!n}f+5%{<3+X!3SIN_ra!=7cYgxf?KfDrkQaGcC~vaI+J(OH zlLjv2v{rSt5Kj&V)X*sos%b+LJ?Q1lkN)c6u-p!y7c7YNKywKTFIW(>8g~d5ZNY-o zCooP$?*#_kWOa8~nrOA`$`K}npxJ+sejY&DT#fZTn&2kv#Koio+?Yyqt9hE|d041v zzHr$>JXtXONBQx=?;DaxGI1NWS7!w@jBuI<+}s{6YhRCjc7MTwVS)vN5&9M^7+|0i zmdII9(6yB7(>7LsmmH~mhm)G|=;wg9)aDZ_bw9B%mu_+@=KE(|tm)~$PH2Cjo(?>% zNBKMOSq)Wq$WA>~w_C)9m6gXlw$58rtZqK9z23>&x{j+0ZulkbE;lc{U_p~pEn&@c zO_Q^NDX*quh?oDQbJf?7Dy_R5dZ?0Zbt+cVBWK#?TbdN7U)O8XkX45Z{Xzo@RO> zhqtUa(rwx*{tDDc&D7riP9*Vif%jbwk}V?vn}Q}-My!sr@%w{0YKRpB-MgWVTe5`> zDFXAxX;|)Zj&{RB_}qeq8HJm@G+e3eU$e9Mmkno@Z*(VA!Z&KV`7eL!ZXM`}teqLJ zpq(4REgRnv%nNwXQ}sk$8-l1}^?g=iM2ih$Ys^(QtctK3OvBwu=X*c)`wtv^-D2A8 ziNZ~I$F@LWM≤2xRghB?^=ZO^^ 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 diff --git a/src/imageformats/CMakeLists.txt b/src/imageformats/CMakeLists.txt index c062daf..8a0d082 100644 --- a/src/imageformats/CMakeLists.txt +++ b/src/imageformats/CMakeLists.txt @@ -74,16 +74,9 @@ endif() ################################## -if (LibJXL_FOUND AND LibJXLThreads_FOUND) +if (LibJXL_FOUND AND LibJXLThreads_FOUND AND LibJXLCMS_FOUND) kimageformats_add_plugin(kimg_jxl SOURCES jxl.cpp microexif.cpp) - target_link_libraries(kimg_jxl PRIVATE PkgConfig::LibJXL PkgConfig::LibJXLThreads) - if(LibJXL_VERSION VERSION_GREATER_EQUAL "0.9.0") - if(LibJXLCMS_FOUND) - target_link_libraries(kimg_jxl PRIVATE PkgConfig::LibJXLCMS) - else() - message(SEND_ERROR "libjxl_cms was not found!") - endif() - endif() + target_link_libraries(kimg_jxl PRIVATE PkgConfig::LibJXL PkgConfig::LibJXLThreads PkgConfig::LibJXLCMS) endif() if (OpenJPEG_FOUND) diff --git a/src/imageformats/jxl.cpp b/src/imageformats/jxl.cpp index ad970f1..e847c13 100644 --- a/src/imageformats/jxl.cpp +++ b/src/imageformats/jxl.cpp @@ -13,13 +13,10 @@ #include "microexif_p.h" #include "util_p.h" +#include #include #include -#if JPEGXL_NUMERIC_VERSION >= JPEGXL_COMPUTE_NUMERIC_VERSION(0, 9, 0) -#include -#endif - #include // Avoid rotation on buggy Qts (see also https://bugreports.qt.io/browse/QTBUG-126575) @@ -29,12 +26,10 @@ #endif #endif -#if JPEGXL_NUMERIC_VERSION < JPEGXL_COMPUTE_NUMERIC_VERSION(0, 9, 0) #ifndef JXL_HDR_PRESERVATION_DISABLED // Define JXL_HDR_PRESERVATION_DISABLED to disable HDR preservation // (HDR images are saved as UINT16). -#define JXL_HDR_PRESERVATION_DISABLED -#endif +// #define JXL_HDR_PRESERVATION_DISABLED #endif #ifndef JXL_DECODE_BOXES_DISABLED @@ -66,9 +61,11 @@ QJpegXLHandler::QJpegXLHandler() , m_decoder(nullptr) , m_runner(nullptr) , m_next_image_delay(0) + , m_isCMYK(false) + , m_cmyk_channel_id(0) + , m_alpha_channel_id(0) , m_input_image_format(QImage::Format_Invalid) , m_target_image_format(QImage::Format_Invalid) - , m_buffer_size(0) { } @@ -257,7 +254,6 @@ bool QJpegXLHandler::countALLFrames() bool is_gray = m_basicinfo.num_color_channels == 1 && m_basicinfo.alpha_bits == 0; JxlColorEncoding color_encoding; if (m_basicinfo.uses_original_profile == JXL_FALSE && m_basicinfo.have_animation == JXL_FALSE) { -#if JPEGXL_NUMERIC_VERSION >= JPEGXL_COMPUTE_NUMERIC_VERSION(0, 9, 0) const JxlCmsInterface *jxlcms = JxlGetDefaultCms(); if (jxlcms) { status = JxlDecoderSetCms(m_decoder, *jxlcms); @@ -267,7 +263,7 @@ bool QJpegXLHandler::countALLFrames() } else { qWarning("No JPEG XL CMS Interface"); } -#endif + JxlColorEncodingSetToSRGB(&color_encoding, is_gray ? JXL_TRUE : JXL_FALSE); JxlDecoderSetPreferredColorProfile(m_decoder, &color_encoding); } @@ -279,7 +275,6 @@ bool QJpegXLHandler::countALLFrames() m_input_pixel_format.endianness = JXL_NATIVE_ENDIAN; m_input_pixel_format.align = 4; - m_input_pixel_format.num_channels = is_gray ? 1 : 4; if (m_basicinfo.bits_per_sample > 8) { // high bit depth #ifdef JXL_HDR_PRESERVATION_DISABLED @@ -288,21 +283,21 @@ bool QJpegXLHandler::countALLFrames() bool is_fp = m_basicinfo.exponent_bits_per_sample > 0 && m_basicinfo.num_color_channels == 3; #endif + m_input_pixel_format.num_channels = 4; + if (is_gray) { + m_input_pixel_format.num_channels = 1; m_input_pixel_format.data_type = JXL_TYPE_UINT16; m_input_image_format = m_target_image_format = QImage::Format_Grayscale16; - m_buffer_size = ((size_t)m_basicinfo.ysize - 1) * (((((size_t)m_basicinfo.xsize) * 2 + 3) >> 2) << 2) + (size_t)m_basicinfo.xsize * 2; } else if (m_basicinfo.bits_per_sample > 16 && is_fp) { m_input_pixel_format.data_type = JXL_TYPE_FLOAT; m_input_image_format = QImage::Format_RGBA32FPx4; - m_buffer_size = (size_t)m_basicinfo.xsize * (size_t)m_basicinfo.ysize * m_input_pixel_format.num_channels * 4; if (loadalpha) m_target_image_format = QImage::Format_RGBA32FPx4; else m_target_image_format = QImage::Format_RGBX32FPx4; } else { m_input_pixel_format.data_type = is_fp ? JXL_TYPE_FLOAT16 : JXL_TYPE_UINT16; - m_buffer_size = (size_t)m_basicinfo.xsize * (size_t)m_basicinfo.ysize * m_input_pixel_format.num_channels * 2; m_input_image_format = is_fp ? QImage::Format_RGBA16FPx4 : QImage::Format_RGBA64; if (loadalpha) m_target_image_format = is_fp ? QImage::Format_RGBA16FPx4 : QImage::Format_RGBA64; @@ -313,47 +308,32 @@ bool QJpegXLHandler::countALLFrames() m_input_pixel_format.data_type = JXL_TYPE_UINT8; if (is_gray) { + m_input_pixel_format.num_channels = 1; m_input_image_format = m_target_image_format = QImage::Format_Grayscale8; - m_buffer_size = ((size_t)m_basicinfo.ysize - 1) * (((((size_t)m_basicinfo.xsize) + 3) >> 2) << 2) + (size_t)m_basicinfo.xsize; } else { - m_input_image_format = QImage::Format_RGBA8888; - m_buffer_size = (size_t)m_basicinfo.xsize * (size_t)m_basicinfo.ysize * m_input_pixel_format.num_channels; if (loadalpha) { + m_input_pixel_format.num_channels = 4; + m_input_image_format = QImage::Format_RGBA8888; m_target_image_format = QImage::Format_ARGB32; } else { + m_input_pixel_format.num_channels = 3; + m_input_image_format = QImage::Format_RGB888; m_target_image_format = QImage::Format_RGB32; } } } - status = JxlDecoderGetColorAsEncodedProfile(m_decoder, -#if JPEGXL_NUMERIC_VERSION < JPEGXL_COMPUTE_NUMERIC_VERSION(0, 9, 0) - &m_input_pixel_format, -#endif - JXL_COLOR_PROFILE_TARGET_DATA, - &color_encoding); + status = JxlDecoderGetColorAsEncodedProfile(m_decoder, JXL_COLOR_PROFILE_TARGET_DATA, &color_encoding); if (status == JXL_DEC_SUCCESS && color_encoding.color_space == JXL_COLOR_SPACE_RGB && color_encoding.white_point == JXL_WHITE_POINT_D65 && color_encoding.primaries == JXL_PRIMARIES_SRGB && color_encoding.transfer_function == JXL_TRANSFER_FUNCTION_SRGB) { m_colorspace = QColorSpace(QColorSpace::SRgb); } else { size_t icc_size = 0; - if (JxlDecoderGetICCProfileSize(m_decoder, -#if JPEGXL_NUMERIC_VERSION < JPEGXL_COMPUTE_NUMERIC_VERSION(0, 9, 0) - &m_input_pixel_format, -#endif - JXL_COLOR_PROFILE_TARGET_DATA, - &icc_size) - == JXL_DEC_SUCCESS) { + if (JxlDecoderGetICCProfileSize(m_decoder, JXL_COLOR_PROFILE_TARGET_DATA, &icc_size) == JXL_DEC_SUCCESS) { if (icc_size > 0) { QByteArray icc_data(icc_size, 0); - if (JxlDecoderGetColorAsICCProfile(m_decoder, -#if JPEGXL_NUMERIC_VERSION < JPEGXL_COMPUTE_NUMERIC_VERSION(0, 9, 0) - &m_input_pixel_format, -#endif - JXL_COLOR_PROFILE_TARGET_DATA, - reinterpret_cast(icc_data.data()), - icc_data.size()) + if (JxlDecoderGetColorAsICCProfile(m_decoder, JXL_COLOR_PROFILE_TARGET_DATA, reinterpret_cast(icc_data.data()), icc_data.size()) == JXL_DEC_SUCCESS) { m_colorspace = QColorSpace::fromIccProfile(icc_data); @@ -426,6 +406,65 @@ bool QJpegXLHandler::countALLFrames() m_framedelays[0] = 0; } +#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0) + // CMYK detection + if ((m_basicinfo.uses_original_profile == JXL_TRUE) && (m_basicinfo.num_color_channels == 3) && (m_colorspace.isValid())) { + bool alpha_found = false; + JxlExtraChannelInfo channel_info; + for (uint32_t index = 0; index < m_basicinfo.num_extra_channels; index++) { + status = JxlDecoderGetExtraChannelInfo(m_decoder, index, &channel_info); + if (status != JXL_DEC_SUCCESS) { + qWarning("JxlDecoderGetExtraChannelInfo for channel %d returned %d", index, status); + m_parseState = ParseJpegXLError; + return false; + } + + if (channel_info.type == JXL_CHANNEL_BLACK) { + if (m_colorspace.colorModel() == QColorSpace::ColorModel::Cmyk) { + m_isCMYK = true; + m_cmyk_channel_id = index; + + if (m_basicinfo.alpha_bits > 0) { + if (!alpha_found) { + // continue searching for alpha channel + for (uint32_t alpha_index = index + 1; alpha_index < m_basicinfo.num_extra_channels; alpha_index++) { + status = JxlDecoderGetExtraChannelInfo(m_decoder, alpha_index, &channel_info); + if (status != JXL_DEC_SUCCESS) { + qWarning("JxlDecoderGetExtraChannelInfo for channel %d returned %d", alpha_index, status); + m_parseState = ParseJpegXLError; + return false; + } + + if (channel_info.type == JXL_CHANNEL_ALPHA) { + alpha_found = true; + m_alpha_channel_id = alpha_index; + break; + } + } + + if (!alpha_found) { + qWarning("JXL BasicInfo indate Alpha channel but it was not found"); + m_parseState = ParseJpegXLError; + return false; + } + } + } + } else { + qWarning("JXL has BLACK channel but colorspace is not CMYK!"); + } + break; + } else if (channel_info.type == JXL_CHANNEL_ALPHA) { + alpha_found = true; + m_alpha_channel_id = index; + } + } + + if (!m_isCMYK && (m_colorspace.colorModel() == QColorSpace::ColorModel::Cmyk)) { + qWarning("JXL has CMYK colorspace but BLACK channel was not found!"); + } + } +#endif + #ifndef JXL_DECODE_BOXES_DISABLED if (!decodeContainer()) { return false; @@ -450,14 +489,302 @@ bool QJpegXLHandler::decode_one_frame() return false; } - m_current_image = imageAlloc(m_basicinfo.xsize, m_basicinfo.ysize, m_input_image_format); - if (m_current_image.isNull()) { - qWarning("Memory cannot be allocated"); + if (m_isCMYK) { // CMYK decoding +#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0) + uchar *pixels_cmy = nullptr; + uchar *pixels_black = nullptr; + + JxlPixelFormat format_extra; + + m_input_pixel_format.num_channels = 3; + m_input_pixel_format.data_type = JXL_TYPE_UINT8; + m_input_pixel_format.endianness = JXL_NATIVE_ENDIAN; + m_input_pixel_format.align = 0; + + format_extra.num_channels = 1; + format_extra.data_type = JXL_TYPE_UINT8; + format_extra.endianness = JXL_NATIVE_ENDIAN; + format_extra.align = 0; + + const size_t extra_buffer_size = size_t(m_basicinfo.xsize) * size_t(m_basicinfo.ysize); + const size_t cmy_buffer_size = extra_buffer_size * 3; + + if (m_basicinfo.alpha_bits > 0) { // CMYK + alpha + QImage tmp_cmyk_image = imageAlloc(m_basicinfo.xsize, m_basicinfo.ysize, QImage::Format_CMYK8888); + if (tmp_cmyk_image.isNull()) { + qWarning("Memory cannot be allocated"); + m_parseState = ParseJpegXLError; + return false; + } + + tmp_cmyk_image.setColorSpace(m_colorspace); + + uchar *pixels_alpha = reinterpret_cast(malloc(extra_buffer_size)); + if (!pixels_alpha) { + qWarning("Memory cannot be allocated for ALPHA channel"); + m_parseState = ParseJpegXLError; + return false; + } + + pixels_cmy = reinterpret_cast(malloc(cmy_buffer_size)); + if (!pixels_cmy) { + free(pixels_alpha); + pixels_alpha = nullptr; + qWarning("Memory cannot be allocated for CMY buffer"); + m_parseState = ParseJpegXLError; + return false; + } + + pixels_black = reinterpret_cast(malloc(extra_buffer_size)); + if (!pixels_black) { + free(pixels_cmy); + pixels_cmy = nullptr; + free(pixels_alpha); + pixels_alpha = nullptr; + qWarning("Memory cannot be allocated for BLACK buffer"); + m_parseState = ParseJpegXLError; + return false; + } + + if (JxlDecoderSetImageOutBuffer(m_decoder, &m_input_pixel_format, pixels_cmy, cmy_buffer_size) != JXL_DEC_SUCCESS) { + free(pixels_black); + pixels_black = nullptr; + free(pixels_cmy); + pixels_cmy = nullptr; + free(pixels_alpha); + pixels_alpha = nullptr; + qWarning("ERROR: JxlDecoderSetImageOutBuffer failed"); + m_parseState = ParseJpegXLError; + return false; + } + + if (JxlDecoderSetExtraChannelBuffer(m_decoder, &format_extra, pixels_black, extra_buffer_size, m_cmyk_channel_id) != JXL_DEC_SUCCESS) { + free(pixels_black); + pixels_black = nullptr; + free(pixels_cmy); + pixels_cmy = nullptr; + free(pixels_alpha); + pixels_alpha = nullptr; + qWarning("ERROR: JxlDecoderSetExtraChannelBuffer failed"); + m_parseState = ParseJpegXLError; + return false; + } + + if (JxlDecoderSetExtraChannelBuffer(m_decoder, &format_extra, pixels_alpha, extra_buffer_size, m_alpha_channel_id) != JXL_DEC_SUCCESS) { + free(pixels_black); + pixels_black = nullptr; + free(pixels_cmy); + pixels_cmy = nullptr; + free(pixels_alpha); + pixels_alpha = nullptr; + qWarning("ERROR: JxlDecoderSetExtraChannelBuffer failed"); + m_parseState = ParseJpegXLError; + return false; + } + + status = JxlDecoderProcessInput(m_decoder); + if (status != JXL_DEC_FULL_IMAGE) { + free(pixels_black); + pixels_black = nullptr; + free(pixels_cmy); + pixels_cmy = nullptr; + free(pixels_alpha); + pixels_alpha = nullptr; + qWarning("Unexpected event %d instead of JXL_DEC_FULL_IMAGE", status); + m_parseState = ParseJpegXLError; + return false; + } + + const uchar *src_CMY = pixels_cmy; + const uchar *src_K = pixels_black; + for (int y = 0; y < tmp_cmyk_image.height(); y++) { + uchar *write_pointer = tmp_cmyk_image.scanLine(y); + for (int x = 0; x < tmp_cmyk_image.width(); x++) { + *write_pointer = 255 - *src_CMY; // C + write_pointer++; + src_CMY++; + *write_pointer = 255 - *src_CMY; // M + write_pointer++; + src_CMY++; + *write_pointer = 255 - *src_CMY; // Y + write_pointer++; + src_CMY++; + *write_pointer = 255 - *src_K; // K + write_pointer++; + src_K++; + } + } + + free(pixels_black); + pixels_black = nullptr; + free(pixels_cmy); + pixels_cmy = nullptr; + + m_current_image = tmp_cmyk_image.convertedToColorSpace(QColorSpace(QColorSpace::SRgb), QImage::Format_ARGB32); + if (m_current_image.isNull()) { + free(pixels_alpha); + pixels_alpha = nullptr; + qWarning("ERROR: convertedToColorSpace returned empty image"); + m_parseState = ParseJpegXLError; + return false; + } + + // set alpha channel into ARGB image + const uchar *src_alpha = pixels_alpha; + for (int y = 0; y < m_current_image.height(); y++) { + uchar *write_pointer = m_current_image.scanLine(y); + for (int x = 0; x < m_current_image.width(); x++) { +#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN + write_pointer += 3; // skip BGR + *write_pointer = *src_alpha; // A + write_pointer++; + src_alpha++; +#else + *write_pointer = *src_alpha; + write_pointer += 4; // move 4 bytes (skip RGB) + src_alpha++; +#endif + } + } + + free(pixels_alpha); + pixels_alpha = nullptr; + } else { // CMYK (no alpha) + m_current_image = imageAlloc(m_basicinfo.xsize, m_basicinfo.ysize, QImage::Format_CMYK8888); + if (m_current_image.isNull()) { + qWarning("Memory cannot be allocated"); + m_parseState = ParseJpegXLError; + return false; + } + + m_current_image.setColorSpace(m_colorspace); + + pixels_cmy = reinterpret_cast(malloc(cmy_buffer_size)); + if (!pixels_cmy) { + qWarning("Memory cannot be allocated for CMY buffer"); + m_parseState = ParseJpegXLError; + return false; + } + + pixels_black = reinterpret_cast(malloc(extra_buffer_size)); + if (!pixels_black) { + free(pixels_cmy); + pixels_cmy = nullptr; + qWarning("Memory cannot be allocated for BLACK buffer"); + m_parseState = ParseJpegXLError; + return false; + } + + if (JxlDecoderSetImageOutBuffer(m_decoder, &m_input_pixel_format, pixels_cmy, cmy_buffer_size) != JXL_DEC_SUCCESS) { + free(pixels_black); + pixels_black = nullptr; + free(pixels_cmy); + pixels_cmy = nullptr; + qWarning("ERROR: JxlDecoderSetImageOutBuffer failed"); + m_parseState = ParseJpegXLError; + return false; + } + + if (JxlDecoderSetExtraChannelBuffer(m_decoder, &format_extra, pixels_black, extra_buffer_size, m_cmyk_channel_id) != JXL_DEC_SUCCESS) { + free(pixels_black); + pixels_black = nullptr; + free(pixels_cmy); + pixels_cmy = nullptr; + qWarning("ERROR: JxlDecoderSetExtraChannelBuffer failed"); + m_parseState = ParseJpegXLError; + return false; + } + + status = JxlDecoderProcessInput(m_decoder); + if (status != JXL_DEC_FULL_IMAGE) { + free(pixels_black); + pixels_black = nullptr; + free(pixels_cmy); + pixels_cmy = nullptr; + qWarning("Unexpected event %d instead of JXL_DEC_FULL_IMAGE", status); + m_parseState = ParseJpegXLError; + return false; + } + + const uchar *src_CMY = pixels_cmy; + const uchar *src_K = pixels_black; + for (int y = 0; y < m_current_image.height(); y++) { + uchar *write_pointer = m_current_image.scanLine(y); + for (int x = 0; x < m_current_image.width(); x++) { + *write_pointer = 255 - *src_CMY; // C + write_pointer++; + src_CMY++; + *write_pointer = 255 - *src_CMY; // M + write_pointer++; + src_CMY++; + *write_pointer = 255 - *src_CMY; // Y + write_pointer++; + src_CMY++; + *write_pointer = 255 - *src_K; // K + write_pointer++; + src_K++; + } + } + + free(pixels_black); + pixels_black = nullptr; + free(pixels_cmy); + pixels_cmy = nullptr; + } +#else + // CMYK not supported in older Qt m_parseState = ParseJpegXLError; return false; +#endif + } else { // RGB or GRAY + m_current_image = imageAlloc(m_basicinfo.xsize, m_basicinfo.ysize, m_input_image_format); + if (m_current_image.isNull()) { + qWarning("Memory cannot be allocated"); + m_parseState = ParseJpegXLError; + return false; + } + + m_current_image.setColorSpace(m_colorspace); + + m_input_pixel_format.align = m_current_image.bytesPerLine(); + + size_t rgb_buffer_size = size_t(m_current_image.height() - 1) * size_t(m_current_image.bytesPerLine()); + switch (m_input_pixel_format.data_type) { + case JXL_TYPE_FLOAT: + rgb_buffer_size += 4 * size_t(m_input_pixel_format.num_channels) * size_t(m_current_image.width()); + break; + case JXL_TYPE_UINT8: + rgb_buffer_size += size_t(m_input_pixel_format.num_channels) * size_t(m_current_image.width()); + break; + case JXL_TYPE_UINT16: + case JXL_TYPE_FLOAT16: + rgb_buffer_size += 2 * size_t(m_input_pixel_format.num_channels) * size_t(m_current_image.width()); + break; + default: + qWarning("ERROR: unsupported data type"); + m_parseState = ParseJpegXLError; + return false; + break; + } + + if (JxlDecoderSetImageOutBuffer(m_decoder, &m_input_pixel_format, m_current_image.bits(), rgb_buffer_size) != JXL_DEC_SUCCESS) { + qWarning("ERROR: JxlDecoderSetImageOutBuffer failed"); + m_parseState = ParseJpegXLError; + return false; + } + + status = JxlDecoderProcessInput(m_decoder); + if (status != JXL_DEC_FULL_IMAGE) { + qWarning("Unexpected event %d instead of JXL_DEC_FULL_IMAGE", status); + m_parseState = ParseJpegXLError; + return false; + } + + if (m_target_image_format != m_input_image_format) { + m_current_image.convertTo(m_target_image_format); + } } - m_current_image.setColorSpace(m_colorspace); if (!m_xmp.isEmpty()) { m_current_image.setText(QStringLiteral(META_KEY_XMP_ADOBE), QString::fromUtf8(m_xmp)); } @@ -473,23 +800,6 @@ bool QJpegXLHandler::decode_one_frame() exif.toImageMetadata(m_current_image); } - if (JxlDecoderSetImageOutBuffer(m_decoder, &m_input_pixel_format, m_current_image.bits(), m_buffer_size) != JXL_DEC_SUCCESS) { - qWarning("ERROR: JxlDecoderSetImageOutBuffer failed"); - m_parseState = ParseJpegXLError; - return false; - } - - status = JxlDecoderProcessInput(m_decoder); - if (status != JXL_DEC_FULL_IMAGE) { - qWarning("Unexpected event %d instead of JXL_DEC_FULL_IMAGE", status); - m_parseState = ParseJpegXLError; - return false; - } - - if (m_target_image_format != m_input_image_format) { - m_current_image.convertTo(m_target_image_format); - } - m_next_image_delay = m_framedelays[m_currentimage_index]; m_previousimage_index = m_currentimage_index; @@ -1216,7 +1526,6 @@ bool QJpegXLHandler::rewind() return false; } -#if JPEGXL_NUMERIC_VERSION >= JPEGXL_COMPUTE_NUMERIC_VERSION(0, 9, 0) const JxlCmsInterface *jxlcms = JxlGetDefaultCms(); if (jxlcms) { status = JxlDecoderSetCms(m_decoder, *jxlcms); @@ -1226,7 +1535,6 @@ bool QJpegXLHandler::rewind() } else { qWarning("No JPEG XL CMS Interface"); } -#endif bool is_gray = m_basicinfo.num_color_channels == 1 && m_basicinfo.alpha_bits == 0; JxlColorEncoding color_encoding; diff --git a/src/imageformats/jxl_p.h b/src/imageformats/jxl_p.h index 1b30d44..0156d4d 100644 --- a/src/imageformats/jxl_p.h +++ b/src/imageformats/jxl_p.h @@ -79,6 +79,9 @@ private: QImage m_current_image; QColorSpace m_colorspace; + bool m_isCMYK; + uint32_t m_cmyk_channel_id; + uint32_t m_alpha_channel_id; QByteArray m_xmp; QByteArray m_exif; @@ -86,7 +89,6 @@ private: QImage::Format m_target_image_format; JxlPixelFormat m_input_pixel_format; - size_t m_buffer_size; }; class QJpegXLPlugin : public QImageIOPlugin