From e4e0a23ca622955a0dd188f665745077aed9cbab Mon Sep 17 00:00:00 2001 From: Tianlong Chen Date: Thu, 15 Apr 2021 10:55:26 -0500 Subject: [PATCH] Code Upload --- Figs/nfbnn.png | Bin 0 -> 204731 bytes Figs/res.png | Bin 0 -> 96138 bytes README.md | 58 ++++- agc.py | 24 ++ dataset.py | 139 ++++++++++++ layers.py | 141 ++++++++++++ models/Qa_reactnet_18_bf.py | 137 ++++++++++++ models/Qa_reactnet_18_bn.py | 130 +++++++++++ models/Qa_reactnet_18_none.py | 126 +++++++++++ models/Qa_reactnet_A_bf.py | 172 +++++++++++++++ models/Qa_reactnet_A_bn.py | 156 +++++++++++++ models/Qa_reactnet_A_none.py | 144 ++++++++++++ models/Qaw_reactnet_18_bf.py | 137 ++++++++++++ models/Qaw_reactnet_18_bn.py | 131 +++++++++++ models/Qaw_reactnet_18_none.py | 124 +++++++++++ models/Qaw_reactnet_A_bf.py | 172 +++++++++++++++ models/Qaw_reactnet_A_bn.py | 157 +++++++++++++ models/Qaw_reactnet_A_none.py | 143 ++++++++++++ script/imagenet_reactnet_A_bf.sh | 47 ++++ script/imagenet_reactnet_A_bn.sh | 47 ++++ script/imagenet_reactnet_A_none.sh | 47 ++++ train.py | 343 +++++++++++++++++++++++++++++ utils.py | 284 ++++++++++++++++++++++++ 23 files changed, 2858 insertions(+), 1 deletion(-) create mode 100644 Figs/nfbnn.png create mode 100644 Figs/res.png create mode 100644 agc.py create mode 100644 dataset.py create mode 100644 layers.py create mode 100644 models/Qa_reactnet_18_bf.py create mode 100644 models/Qa_reactnet_18_bn.py create mode 100644 models/Qa_reactnet_18_none.py create mode 100644 models/Qa_reactnet_A_bf.py create mode 100644 models/Qa_reactnet_A_bn.py create mode 100644 models/Qa_reactnet_A_none.py create mode 100644 models/Qaw_reactnet_18_bf.py create mode 100644 models/Qaw_reactnet_18_bn.py create mode 100644 models/Qaw_reactnet_18_none.py create mode 100644 models/Qaw_reactnet_A_bf.py create mode 100644 models/Qaw_reactnet_A_bn.py create mode 100644 models/Qaw_reactnet_A_none.py create mode 100644 script/imagenet_reactnet_A_bf.sh create mode 100644 script/imagenet_reactnet_A_bn.sh create mode 100644 script/imagenet_reactnet_A_none.sh create mode 100644 train.py create mode 100644 utils.py diff --git a/Figs/nfbnn.png b/Figs/nfbnn.png new file mode 100644 index 0000000000000000000000000000000000000000..474737eeb025fc0f7430e2fbab5e3155ca411d51 GIT binary patch literal 204731 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%0D)^?w+W1Oeqx2Z)zY6bT0fST~*y` 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

*{7bqr)9{5b;`5*@@ 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 z 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 Z9pL?h{7W$9HVF7qeWLjosb~@Me*jz@;>-X5 literal 0 HcmV?d00001 diff --git a/Figs/res.png b/Figs/res.png new file mode 100644 index 0000000000000000000000000000000000000000..fb4777fc7bbf6fd4fdb1edffe9e07bab93b5de5e GIT binary patch literal 96138 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 z zFoO;u-6I4DB9=)K`hExPdWv{p{~&6Jin~6!yYsQvP8d-O+{xcJTM%I9pEkT=69>P@ zGm2kB1x!PjUqz|F;mjzR^v-3+0843AWu~Ux_GU*t)VBREpQ^PPj4qJ%#$^pJdGy^a z{E6d4lALLUR;e?LEZ$o}f{YCMH`@xcpch8c+_S7F{ka7<8@~-y;V-SmJKF0J;&Ncn z{jw5XLiWirn~0;TVvGCZc$xu#fl@8pot)5y0)NiEnOES zhPn09mxRM#dWrO0Lt<$wEH*0^Nc8;ibwJ1`lccG}e*d5=9R@0!V*wi;27SLzkXWbj zBvK6&ioc-Xxh?--zyptsNLGkEza)kfmHk<+rlyE@(Yk!Bd8NCZgP1!w$5;}sa4*l> zBzizQ^FH0zirc{j(%zFC3*rL{Ko-n|+CMi-1CHE$mq*k`d*H;csy^#zT`SHzhlSah z6*_>O-2!_L{l?lrNc@OckV}Tl7t`T= zLnIDB{?)eqq9FiPiGyhfHW`&Nqdbd62LPrpRY)XJBmxAV80gq3p`piU?fIrAp zKd9Z8AOh5>a;Y7M2o7)+KLnFn*LrK7SnQq}`;_jAflMkfd3}knq#)tJg4saUT_aWw zD`B?z7hZ@Y+gtJ~fLE&09svpeF@gjvkVL#kX+5bz$9z@VgZT{0HxZXJ%}%!pcg8$k927 zWJsH?z=-;y_V)Hv@+emsS-qZs_BcjdsfZ#&aMHjz*|hdep&+DSgro&x7X07^M?^xQ z)!VDWz}nd{NPO7mP6d$JW*h!c)_+JPS;?(Z$5W=%AqtwFb?tB9WmF50A?6e|Z6CV`F3G>5}6>JpneiO^*Bzn*`0Y z19TBQJb11{MGggltkhJp`dy5Wq7-DAzBU?aY8V?o zA-HEM@mzG6>o8zOiv4_EA^wK^Bq%h^0p8dg26nCrF6OoAURI#L^suBq6Sw(A!O$E? z9akJp;wUo8lOEP!25{ikhO(88M9nFdFkXkzJ zi=ov^ObUsg;SIb#G`!HhrwDPhC*%R}616md#*c@)WdQ66kXeL}|AlGVDB5$=bn2gv zr(+{)i7}wDKViyq;p4`te$+KwBvSDeQ0yVUyhf7zr#9uz)p%*0P_>OH^!V6p9>?v# zoSYO07)XG6GfC#l0RUhBVRW|awy8uv(ocb&6B!vPV}L2O)S_c#M4`5Xj;`v;BgR7w zAZk~Pe_^hf@wI^6)*B{kgj*kkqQ7%H`zdKrwEFq`_wSz_?Y-3an1MRS{d=>B4#rS5gxy^mD~62z7$FfCkFAQzm=r*@jo#7-+C1)8sUv4jH62aaI9dNhT zJQei&{aJSZ;i#_6do!?gdF&yKSfpIvZOWO-Yqce$w>l) z`Hx))fFJ*LIs z4vukyIcGQxgwBRi>i?)HD_>j88ai;Y#l*)uHpJnnj`6Y+SLRNFU_!p{pLeg{$5}e#9D5*1rm&=8rY#ukf-d+N1exg~H7|Tpt}=FPfGCh)}i} zPeXvlO-F(hEa()EPU3aC)(&m|Tdks}NM!CyK7Dj)Run9IVN z!^E$m^0xMMW4>}_!Qd4NO{kCt6R=DHcjxksbMNy4-z|WuF#iUL2u zJ_|mWmP9L!Ch;3R@W}a#8Gw+Ao;Ur~e)W=q?ezEk=RaDy+M343dAx+15>-II=v%f!eg=5MSCei(b!+RdeqYQ7 zqJCZ-%+9lCGG&tN->f>9rKkwV6Wbry+@1d#qkjcDWfeXptVODQyv&)9LB-{tsRCzg z7)wt#a`?1kIMM*I($Z2HUw_E!uVrPkhx1j>Wo++2?jdM@!qG&Q3KF3{AOKiVuXzvm z=v#IOLI4&TiIARrq~5p4-zc!C)zunz?R)u(x+cD*J#%-FH)Pb*k&IH)$sRnrpY?*z?B4vuG%!WNm z$}hlg*!PrC>Q|`)B)-YI*%_2r1pbRH%Jzp89?A zRBC=+TLE!4MN;pa#i&hfK3tx9A;bJ2x1gZzP)e&22yC9aW0yZ}x1Yz|)z)8EdDm?; zd9538x6dZCW>Qmln{T%T+#>=@5)0B_^JA)fJ>+ITdxL`|a;DK3#u&A3(3&tXX*VG9&3DJr=ITsE zwRtz*(VT%1Gk@i6Wfijbff9HOHX+WNEg`By-i;l3hxpawqNIsz(9$@o=xrHBVU!F* zdRkJ%+5DBhr=#bWXI?aGSJ}infy3RGm6je_BlWx6?CZEbqT_G>-k_oQjM1}Fqqjxu zbuc4+Ju+{vqv_OY#K6dUxf9{7W@O}G78`v7WhYZ8lXZ5Ed z=d@=jGZ!*8esrxav;8|4?=@H1j_U=(gS~=a9n#;x_^VsUO$10cq|=)FetjMtAm+uSS%uu=%nvkQTUEfI5DsBwnfgT9mbQK zzn)j#JG?jYAe!f%Q@2y9^s|;bFgrFIRO?&hnp5-8YBDgbv#&1pG40~Wmt5z=!@?;x z8t(UW$YoVA&cMzq$>f{t(^sAj^!B=%GcsX+sU> z8wPD~p$}HbPc1cA;_M7U!|$D+p7+%5A>fG|B4E*!-)!-*@JyQWGBt^ty~l5>*~>lc z3LBVY!-Ds|N@6ePAa$x^`fLVcSwWLt=74 z8BIvR!Uey(9Rf#rg#b4FlVc|bjXHrD_tN%TRU3<=iX zWTn?nZ-!#2JQyk7qBNWCdnX3{)M0X|IZe!Dg3MUh2sC`8?13t~_(ILZHCZE^GAxlO zee?2hx?YbZN)3a-ksE=S;eC}yJ3s~)2RJ4g3n7Q%?(AE{qAu`X!~jK`!s2^l%^A`h z5t~=(kzrw(M3NdRS2hpE(9e<-%~(`x>0KCo^=J_{A-=^XA3%i*UK|qP7`OuP`0OH( za^`CHiG;ixLH5A}c?&UkIDUx4Sl#i5Av`c+rYD)I(Gin}eBy%KV|E0X}3`{BjFy znc>;%9bO3#(6(2UA6TnPjuH}Vv+1^SH#n=O_}9I6$8eYq{v^-xKPw5`MW_(o?#4ik zUKk;rI38qq7(d+C+|KS91bkJ#g~9bg-0jJf65|*yF-ggJJZyY0cxv(3OrJdH@bItk zT$ws(YL2VztkKikgedV`gUUup3i?{V)*9(tGW6&a`EmygS_X3H%m^5y=%nTc5oU{q z1Hoyli-2s8UYCc{nmr4BJ+RMCRLcs1K#6pDCs!!M_OCu8FcCR-{~>-ancRU|hJDxr zJcHvLL>ezF1WG-N~N7} zB6gwCsa%X{7k(GsjF2AV6;?)jpn4KpN2!Sx`2NXyuX}y;*mlos@x80WYxVC`JOUA0 ze+dkhVhKCprhi@cyr86M!%I;&*kIMy%!0>y0$&t4)5xtw72kufzrZT@)1^yCJ{{KykyJCiUETIV44ddj9DM>W_Oq zf$3o07J;lKb7j-GTB=}W%<%CG^Lm7BLBdwU;rq`%t-IWHQNJL!S@WF!5hCeW|sJJ zUG^_8bZ6z8+RBSJB}Ph&??iX*716o%ZqrImsTWt zYYNa$m@PM!T1S0rSu|ItD4GKu9r2Ly zfy~Jw6`+{`h0Nt;25MbsL6!xaqj=5c644WOJYY2-~PMI>wvGBu>$Von0K!$?O-d zE}*)4h>eNI0CRj=>3?@ zKkBh$;X%i=q#*MTyzYIK4^3bZp!66TGm17I_L7TA?;6;sEI#p(OcHYAPWJM*6oM_ zkpMt8Cet3HNKsr?KL{lksyD$IV^jhN_anvEz&g?EIn5V2ZL>qO(}!GNLV0OKNZq*J zFdF6T-*IMb;d0eFy0Zh{Kn7ZzTv=R0O;K=*E? ztHB0zU!sWv&ii6xfH2u}>~hY$q5?WuWpy=nYZ@vs#HkR_yf@ZWUq3yOij9+jt%xlU z9rOlTVu2bdHuoV~$f@QDq{+k+l-jL1b)G!AcKtAv8#{t0qhbzo0^sb&VstFDlEUww zo43u3wr=JLR`}Z@c-`OlT_=!*&kFpG_W%lS`L)~NuEzppK%2#WCE_hS^_$hMUw$JK9T2OOwcwx7|}yQ-5(oi;4uQBJNrW7pYDZ zw|Q<;DvgBq6OiXP{YbVH2PcA#S)@A72Y!j}&+5i)KbbiQgbV^A2v+}=z1eeT*2CQ` zr#C@h3?l;Z>H@gyWUek)wA3#c2pt`lQ8B}-1qF%pu}1+Ky{G$2fO65(dt6v7Z+tjI zWYn$I8ZNyFs4D}UWB(8!eFll!KKYw-r>>%sppI3&ZZ*wA7Bc~TMqAcFpzAn3DMv}V z@M>hTcSu8A@6s#c8y0iYJtV`eQAg4q_6a3pjU|tsK0n(2KI)^z_S62=(c)Av6C83p zA-Wle7g&onYojO`KmLT_98o#|bPDd8d8sEM@LE57BF8Lxysm#A6}yj)^sEWa?{#*t z%pkGGkV?qUf1~Wqs$J2=!jWaPxTNcmX~NUl(qX4rz9yt=FIvk!Y2PV9$k6aO`}yKk zXVA>g zy(mU25p7bXZhk~1EQNp}7a()2Mdp;!yp3K;qheyY+V5QIx8`8|0H1ZvFTwiHo7X9q z=}Q=LHAcNXy3XiqutE`fOL+pH^c>GOKl(0)Z z+X*igkC@g8Fvl#_{<7?k=<}M`+7HPm%lWFh5191rpSkfk_<0^A^!2ko-}rsej@npS zl7l1hG5f}+PdpC(8OL^IUG(=jCUux2b~}jbJ;ijhQw=c6OtLHR43VOPlC(`nm*noW z1i7|vH>FCnqfnzzzOqokH{pa@n0`&3#ya9@X^#Ea<#bOYS@zMvh>%d55J$1fqC-=r zn=hk5qD|y0qvtOKGb76y?$yf?Bs`W97UK>d5;&BQD()*;(!f-}A?FROc|wFFCr|o5 z6NxU|a&v%gG-k-pmVd0@*>4z+TGVWOq@$@(tn~3jjXdfjFt6w$8&h3_T->k) zAgO=8)B2-`^bDDpYJ@>a^7FWk0P|rb)9J=xs_e43Q%zedY|phGsvhuD{nN{4Yw;fd zv6rm-p9%7|5FAWs32Cy1qU3GDDhcM(EVpSRV2De7(>F4Zi~(S~f+JlqzIrR%b;R-U zaiI{aO;bmd6O7HzFVYchd(p&R_<3F{w$PM(g8K2lkN2ofl%WZ}d>Nvf{58MWc-@;s z97an{HO}qYj!ws?ch3 zVxnZD+aE6PX!KpJ*6GSNfSpu=0j?n_J1mhetOQTRt)uY;{|dS&XQ=jV65K*zE*586 zQ`Y*Zair+GnyuHi>gw9)@(K{G4*;fw4(ER&KW_aBbhI1*xsdL{qmZbg3G9;@v^Zpm ztZ%dCmfZ)`>RErfj@LA!Sz9Ox@s`|BMWWQUY!B1@eAjw;rq;jF;si+$ZlkV%>P;+qmL zCFj|2Td_=oJr=3o)v6kQXjwdzszWAj`?!8O3Lm%%8OfQ>q;K(Fa+(MLn$MR7uO(4Y zu-D$Nfwzz2Yi{Gr45^&CMKy-42@DJj`!kBH*9Fd}Td|C_g@BL7UzaO^Ut-Tt{cFb)GmmbslYW3%;?_7d#Hf z6|UEdqG%F@*O%MgXWPd`>oG2wRvVTMq_V>=j*R~Zweo?XYS zb)+5B*UlWVK{u0H)~Auhi4}JKPFBR;8O{{-+Y@8Mi%YQ_NhqDn6RdhZ;tRU`!CRvZ zO}s-87ro`ZD$s7dZ?>f;8(p=SFYM1S|ES2?T|#BtZQa04_`DU4HUqG0)rN+z<|ye% zlK>i!XcJ}&P~Jyx-SDeYA?W?EH>)bDJU{=#|AWLksjO9C3>^SW;no!GfDrQqP@}_R zkud_IM@tU?yI015hvWZjXn2gStr>YTQ`yahX8legmqea_`z6{qo^S&Q@gcFfZdebm zbrHbEi~T0^yf>B~_=efJ2z^EX1!3*yUjCT=eFuh^$+cVtioYw=4bPN~#yPWeKpX}G zOaCZ4Cp@~xOWA|PF-~Dd{(e0IG%Ua<{&&N5gg7k%)f#oa(|D-~QGzc@%Xxmy;Anuo z#QlT0AY?m7tfX2xK&aA8f}cGF-jMf6xK;o_I~j)Wj=xPkT(%DP0YL((6dGj?CzL<2 zy}RQXvp}?94yhFvG~0dJaTG@N%W1s>5dTAxOPK<}o|+8&kv3WZSZn`6KzXLYKGS*D zV^|7oq;MOXnkxIALd*E43t(mfJ8_(;si*~aeiG~+`)UFQB`Mg$fF>@w16Sh}P}ObQ zOfaOpb^_S#!{A2@kL&rxeWvSA@}QMqKx|s!we54V((D0*uV;X6q@rhPmk@Nnix-=a zpp$~G6hh*+PhPq#cCTHfQ?=*lpk!8Ds>g6!>P9!But7*TMdN%9UjLYBcl`7vd8+ih z9g!pilRm+YUqK6M{+qZecSenw=sG=-6>{$d%Dlrq)(?}7;w2~@l*e9URt+8i>1Gg}J76PG*XV-y@ z#mVKvPHr9lDsIY&m>kvI3{`m@-dGgW;~*`eK%eH6 z)Q6P15pVK_o_(@`O~;ATg|t*Z8~Ku6K>xXcPFoR2J`QG#+gyEWDiu9KdaK737S{)^ z0TF49cX%*tQ=CXt7D^QD9Na*R)CHBqiF<(?D$z71h;R zJI7fz`SNF7m#9|n-_wQu0bbu%fMChw74W-%O`fxP<<1dspSXW`@Z|>k^ed~ zqal&nHWsT88~;fg3vrE?o&EDx4$0z9Ygd<&Fxu%mhIWg65RweMj&%Z|xQ46=-BDYS zh@RoNcv>L%1&+@I6@0T|&uZ|^Iv!FBuVXLYe@^N2_}h;d(4?fnaKumyAcBD!4^qMg z7R5Z;aJ8Wd#4l%_TcGN_keF~Xc2Zz-&*84QGHhmOktH)c7MxPtc_Vw)w3eP;xj=-< z4&D@0{6J}j%2yz^upErIlFV*7Tt4|xfL0|}ZXdj_wjXi_Q>1D8C*d~wfeqswuT!o- zVhl_Zv0g1`cdt&D@BQVL(NwS=UZT0or$o|Ix?-QZNN9{zwX(?}&hX(vARSApLJ(vIe18R3&7DB;Ks+uVR6EJ3%d|L93+eMH?s(nN4)slLwfVG7#UU>8nw^a zA+<-f`J`vQ5_L!pg=q%=lS1u!S*E*|Bqh!xM>(A3@^6pm2D2k4C3OPcbu_)yzkz{q zLo&l*>KZRyh65A}iPBrdAu$#5NjOMO&K$j1T~h+rsM+;k=r7QE^}oZuL&2XR`+~p6 zN+Vlh{BUjvV;?C&-pk$)kM(l~&klYu=q6RNo=ZC<=Bhl(K2#|tuvRj=Gc!X85H%}& zgrSMf^e{t&ybhTCU3Wknu|f)^$5s9q*3fy7SV_u`+YtJUDyc>Wfd0VfT*#Ohkht>hi8J+2~tDO@sJ0J3GGHOwTNU5ZE8Qth~0zslSCk=&#|k8-$Q`^a~K4xX+v&f zBa#*{JN*JpZ&5mW8h_v?@qp=-HIu{IP9-7%@;e>_p+hLha5=RU1drkGW-fkwYniQ>!#lkbH9N|E*0O{{{%+HhhF8VyX_$oa2<`QK*03|rYP6-q^#m51q)C{E^V zG;^KhRI}92T3=x)EPWI(FDgLt4F7)XHu$CDgaGN8Ncq+?9Oz;D zk1Y|APNw<8{T%rpj@)UP(1oC}32=$HCuBNEugeX^tClkapVIAT9MRSmS6F%07p;Ql zJmKnH7D<~KEuWP-(26#yAAX!9DsQGXi!OZYfm*4mMNw`8%D#$3YOuJe zHydfILBQn87O;r zlizg&9xRz`V}@6a=Sc*rdL6Zmv7l2(-a411C{jO6fLg3u7VI!;-X z6klke<)q2)+HT0<d!bb)Ez_2boD-lqNn!wyp6#uJY?idefqG*Ej z{4hB%>N$trHfAvEA9}i<(|nL^$VHej?{P)WVP*Pc@iaR@WZ6bC!d`2q==&4|IH7Gy zySCP~94$q!Mw}kyWxysE$I{Bt)6^O&{_>2++q1J)rp@e=@VU5*57cbkz<#ppYBhVK z!0Y*i*+YCz%5vN4M`UxUsAYU63PVaIcmS+(HcvvrCN#gBfNz*mH?**@{@9GqcmnJf zian6X9yUNjelSagt$1gEhK?`1a9^X*EztKWPMvT~pxnmGMW0m8e$oG4Qq`qiDCF9w z%r7_p#PszcBRl4>WAy>avuN-IRmRy-$;svGh`X6-eSYf)K+p!R$5x~PbR+;a;Nqy~ zL{Q95YAdpx8y+widjTS}S|XG2B*F&ovyD@I>%~8#5 zYx=C!#izYt!RWE)tMxT@3S=og#UX+!zzwawwoh{=TU?c8n;dwko}Kxa@!6Jx%_^MD zr0$l3TDdLti+|#cB*%96bGNn9zBxT3~I% z-H>%tCn|wkU9Z@?#_(GWZ-a5cS!;xPljc0@iQkmtvo)KA5&mKUtnSpt0%@~xfwTFV z*I2DsoqOxikJh4`<#z(hxXB(;n$KMq~c`FffE&i~G0+#|jc73#{GGNS+q)`1bSl zxlvq5G|t8&j=y@`#w6jz))O4x1e_Ml4%?yFH#`IK3BYK3Vm^N;2b}uF)eZ_`4uBwp zL)`iSoL)5xkn`;Kkol;tM}(gh7I}$LWU)mnMQv!#@{2M(-Matjj_S9v!0X#_p6eT%v0GM1uW8@G+# z1+_6$Xb?S;hw!Lc7zzbf>Ee0*Skry!gDG$8@eLkK4;!Wcye}qTA248|bDLhKmR7(j z2^gDs4Ad(IYN}!ZZ^3|CDv!JB$XMdw>@A%$Kp~{HF=~b#&Fu-`u2@ij>nHKVHwu}L zDzX-?=*vhOMSZo_F~4Ew0bg@s)T+`_!@pG$*dmzw_kB8J6l#PSI^3ZjlZo&+X?SKwORPTQ{9?g2si(w{udQypJ6F zYu|j^@#irdJW5S?ZKh3EmK$I!demRS4GE~Q31V~~O<=>@`oiJ-vBYgXtKbJ+=#&Z^ z+7bE@8g>BM0g&yBBjC8b^mlX5wY83hLK**I5a+-D3xGa?6bF%PE4FBd1DXc|mIO3y zFMF}7TKHQs(R2Q|QX>I-sMaS%)9OjN*!xfjK&WKisIf zw!^Cwas6=o;P7qRu2IKd-9%;kNU)KCMKmzJy-09nJz}&)5 zOB;=eIT+YTOa;UNq>LO5Ia#?ilh*uij%}?K6wu9}5fKpqDy~*vPhKd=z0xS0S6x$8 zS~{NYM*vke44}|h2F9U3{R#0v_=bX9eqXK3u+(`lvl-K3hQ+iew`pbFPbC2+6krcX z@Tl;7Lq=Y7e=3;d{tr!O9aU8qZE-{d6i`Cx?(R-$lF!2AT9oeY?(UNA?(XjL z?fbp={&3(J3iojCzWeMo*POq#=lO7Tu9PJF-QxCSxo5cGwHzeG{-b-$_HU~DNkORy zA-ZRA(ZKMqa)y%goIYF%S(~2^!7GW~@$qp|^a3x5saND3%=1i4zCT*+wyFI_5x~;4 zu?;y^x3x9+i19ffnviN$4l3#wW+S^pS8WYtt;)>)XEr-hc-F|z3dE0gkt+s8Jj1K` z{wXNApPo7y&n0DL5%|~7lc%PXf@ycg;2>)G+u)2tNryWniT&;EZR$mA8RfV?x?r7u zehp_F^)p^YBr)Rf-~b}GPximO!^S3MPHVxLs#3(#Bl*AlJfwM0A@j2O?`2ju^yHg3 zp5w=G5G3PDJx`1F|0%ro^60%&e|wV5<#38G%8Ng~P{T~9&eJ`@^EkJ-Av;4mO3>Gb z))#a(p61QomednV_vvpB=S>SUqYc(cG)yFh~?EQsc&iueppSjt0B;31$i zK7(v4J*jSzBFeF314~0uacg@;}ApNNyI?*GGK)>SElCG+uA(S$8n`b5Rw|OBEqWF;7NWbF#Ey z2OE+O9!lh_F&)oL=lzQe<97Wu-DZximdgJj>w>pqtY_a%zq%I)NFP<1|3|e3Io*%BWfIgQmSKv#X7y(f}xR1)a zj^=-(!@#4uMdEL453GE;Syrtzo@e?Zb2C1|lebXCmxj;Hn!wDg^;b8w-QwlxKGoDD zKipwjI6~mX#WML(Z2GHy(i73ak_CG<1N$q{wWEV05)_>DR| z2YQ%&QpHQsA`7gU?TL8aLVlkq;k&y<0u+YqjZjfx;@0BudsfDN*v{Jm^Qb|d&W+ZW z+3Db!&IN>p?y-_j{S|~`*wAETj+u7OP~Yb(&4RS7O{QnqCl03Ra8}(=GM=6^3QMid zApTQ(kgpEiZE<2I4Yc~uJAosnv5ou#t`UVb?` z(2%R8&fE5VOyp6$+10e2w`w9yv?mI>~^)MKYVdzD}l)O@y8mIjDb#& zU-az&t(sf`?x0KAHeH>|K(t>hg3B3gt+D5`V-%d`irpWRAtRz1oWlFj9|=w~QP>Jw zNW!pVzRu5UO1)I765Lz?BkNZm&9R>Z&|nObTE(1^kFJ>w8B_Ayf}kqYWSbmOT!T0 zA(WwUOcbkEBI=*ML%^`w@=?Q6T!tL*?Io6CAfOaBav<@=iCr>^HEa_=+?2qD=}6k4 zjz~#G`gYmvEhd^yJH+ky?_strKR>_!da!&36?HmATH%6;u5BHEB0O zMp;Zm2YjI3&%O}r4=>l47xOJ%?jIegg@iitX<0iiK{V9&pRZV2E=PENxDX(d7I(B< zy(V6L$h%B>?1{etf-1Z7Le)LdE%I>xIWyy=Mx7I0M}d_4f2}Map?_%lOsi=2(qO;) zU>#}5i$jjhS@srhA9OsG?zziybfqxcug=Vsw|PODJOt(CVvvDOyEOZ(>7-GT>4r=) zHeXlE=J|TIC>S}yvBgD&j)|l#J6j~D!^T#CW<3#(!OxaA z6L-L$3i)52JvsH3L&wxanOGGexRPrlGdZ2qF;4h~cVWd=M~bNhLDX z=hZdw>J}Dq83?4#fv?ukQJd`9{ySj^p7>MN=>NZK~d$-fu!&VK-f%(-|ze@FR1xEI?m# zo><46F}c4X5dg`t0_W2ehl{@yRZ&uZ$QTVK(*U)g`rpfAk=xNfhy&JPkgjg7ifdvP z7n@NJN>p5&MqCj5mpp329;nn;9C7Sc7J3Y-24jYODEL?4JkI!+iW)V-D%0<;7vA)Y zQ?oUEtum$|@)*J<0St4~%?FhO&RbxRoj7SaE$tO|e{_5RO(Ye=T%DDv`-{aNJ~VuL z;QS~B()v!zj;cM;i9Br$_i~#4fAx!?XJiB4TUOfq_=9s7)wU5rGeu`Snp%>IhKAgH zS7Sa~8JB}un4h2CN8qjX9W&7#T}q2kUjVF|LU>GzI;-WUAwDK1`4r&ty~Hi52fdKJ zy{t%Mu~b3ef+ll3O~p|vm5igmiu8UG#zGOgF2gEN;SyZ*dHZhaD94{~zz)b& zl;IM^%c6_NTyot_`D)K-(ET(0aSu_?|HE6I=PM2F5%5-dLi$yYwme`R?#HO=$p7J> zfu#)ni!>04J0F8QaPITEaxTyNErU1d<+pSdOUc7!9^Yy699AnWa_JO}At#uEqsO+8 zhiggF{N=W%%J{6SoGPabIV^r62U9mUL^85_)4#u|z3RRnY1I3Kn^f+{=?+kGaL9bQ zfp6mWaCzr>qmGg`xUq&uwiF@qsW`K_*%vNMB!)v@h`fo2ey6g4SKVx3bGby5_xZ&g zOZI?y>e~GzL8iPhXqS$6((et<_ej2p{jA7$Z)g9#xN|w~qYnDZL@#^@XZN_0f7Ri0 z97OQ7KsF7=$TIAe)8p}6*tM!GEB;&)IRpQeZ7@aI&>zaP%M6|@8g9@$y|B}LKoxiXQ$vimq>^LpPdfUg{v zg*@e$hC0Tic5BOY+YTflCSCOCSt#B9MRF4xPpp9qBeX|~^5^1A0)7(BIm983{&pS6!Y zlHlSw9(>GWTt$68e>{~`BKQ%|YVR$z{xVlx$Iro$%4T`eZEnzq)#8wTB_?I+Wif_FDZgmZ{j>TiXD>Kx20LaFQh$)MFox0AlNPxzbl z*3s0`^u5|)!fNzAoc-!OUN(5&WHnsw6s`j2$7NOSFNOhevK%tAqQ%Yt zglU(0&?#r<9NJ+j4tx_C9{uM}*XB6tOKY9#jX35%BHoT*q?;E1f9;L<9PCxpDMsV{r9Vmazry+sP_d}te`~(GBfvv)T-WkPUWp__d7{3 zA_%V=L66ZNLKowHJgWMH_9Hu#4bOq{$?pt-{9UkCmtU=6r=Ic~eT7#wSD^cxS=!Yi z$8o_lK88sc&OPp1vP&)%-#)a>;z;+>6;|WxXcq6GM;=&f%?8D+D>~G9}da6Ip#n5`G812JYoI2}6&yhDvwKq9k zFTNS2eQSZ`DV8JX)ysP*HsV=02R3V0g@3K6h{B#XzepX1(}hY{leeosBIJUSz4)KO zPC#4;+jknl1u=d^md`SQ-+x7POlc6SnVPwQ9K;mS)I*7OTw-D&sfB0BOAqZ>@Yp$% zEf=stPP4azrshOJ{6Lo!2Fn=7ii>bbOI8XU3OBED^2`VGrFvTj&@Rp=iyr5RwA#NI z=7xKV7hx0<((N|?j&t_A zXR0Huq+hO7LS`?~9M1e3$r8~3_Hp{*qENm&-5~uvxf;#447VL{1WJWi`J)}bRzP>6 zrWNT^jn}>2mR_Y=6(*NmcH28C*hIs4MhXAwuxmSH?)R9yQ%mI&-T3wte$@z_H{8Wk z-(z?$7+;Nl;}cr}PK9h4efCgCXH2|KD0&(iJ(ql>D+j#0HYLS>C97Zp+pcrX5*(9{(EP)*1yZj+e97O~#YHB(eWXTH~3a$9e= zJ1hvb@K#N<7K3Fq*`&ni&|=;mFD(6T=Y21X%K0x5pcWy2M{*wrU-iB)fUIv<{?hA6 zTJg_%l1Cq`8Aw@}4Srrf0mY4 z>rbM!B?;EA-dnA?7~k8?*BXn$GHp~?mNYjTT549+65;k;?v9$Yy-DemcMK}70){Su zy}UFhH;M32gHw(Fv`-faG~E*?B?;F_gpq5f_q?MWXbC_(jd%TCaD>VvPgK)0o4UL0 zP$XtMw}~-qbu4sW^|*JB*41V(V0{FUnutN(L=TJ z{a|zdYpSA2h7YWD)8w@ULG5j{#4aUj6~ue6ZUpvYZ~varLZ8`&d+q^kvYZYXIH0ZI z?@oXiOG#U-xPm^c^(7}S2LT=(2J}Aacicgpt(46u$#;OPwWZXS;Sc? z)Mxi-R!hiB#W@R>&YBr@7-sdtF#b~#2~==ysdiH#)HOF@eLrHwSy;qt-JH+rv2WPRr^TJTzK;8Hd0jkSh`##byXEF#^_06z%z)1p`^q~z3ntX*&> zdpA;>$wA~0+Bf)+F^SuX?&1_A2%q5JLc>DajAEjpksvOA4uGEs02b)z#6)Z->MAYF z#~9;Bjbwu@XUv(fdmHx%)#5=D_7g63HvX(0Z5IF@=(^16RaR z6dO%A_Tw{%a56dsjX-(7hpez+-)PXnkkiy0JV)-1^ACPUeEFB-TTgdP49|=;H8rV? z->1)9R(QT{5y8PVkoWJv%$C-WSSaNCTj9DaA(+63QwdOdNvA}m5>Y$DY5lKL*Di>RXX*r0?78Np z4S`Opp3YV5GQoNEgc7`IzQ+-2IMULeR<~zH$}Q#QC zH){@O6s#QRd;0p^@eydCE|Ap6ZN3AoJ{j`RoVEc@(?mAguUc)ef~dAwx*iqL0|Q=m z)AVU&UzF#@$_F6YASZdQZ?3F!kWscF>Zj@cKW*F*BC{1Xz=|AK-kJ!S=Wkh@KV#y5 z4Sah z6qakdSy>W5?+>8p#O>>GcMC@cqmn9aaUa zc>qfE>TQXMLwHgOamhQSAQ{3Abw9!2a8Vod^FU*9`wdr71 zBtNzX+~0Fv=ue-nag~H_G8TC{7iu;>_e6ZLr1RsShRBUFGBPSBfA~K9K=P@sX4Qw&(1~tEj~OkYyu^nj(imXISaS#`EopXzwGySOA1qdIszC z(^i@r-uF&WZZ}6%Vz!V}{^E?39J{8FxZ|k6zh*m57K3j1DyJ`Rp~HZH_GPNc*-uYj zcx}zU%9881lyrD*%k9WVLO?EnPN`q6_3ixI_VPf(IoZVpnv%s!D6px55+mh_nM0DH@xKoARPK9 zej|_tl9y^N!Ciz(iAK&%a@Xs`h;Uyu_^~i<6xKXKcTX835;|Ff?j-A}Pr|ct{2)00 zV}!$ch1c8S3X-db@Bu*;c=o_LGdh;q_Fy`SF+4kKVT|`D{kJZn(x)00jgg%0z>mJl`f1_B->w*S?- z9*8p)A8b3x@3i7^Ieb;-{VaL>(eIKzd35;rBq*=GKK{sdqoY3!6lUI74ES4Rr=0x% z7B`>cN!)0hA=kDK{GAyPRsx_b8As!DSm6pb9`(aKLP<&KxNd*yWP&F4SsR(*PO7a# znO*yEzA?&sDYeNu)0!?e>8LI%lg7Wyw5qWK@R3UEq$RF1hH9=0bbKZL0X4<^f!Sx^ zwjN~v!#EBk^)V51|12|l+(y{#A45~*0qrI&SRN0Ryj6{QI#}1SI(b1+SNmy3& z`;0~m^=r`F_gjCcfFtqw0In|^3!8sWHN=bJm&Njfq^!n3-WDb+qy!_jI#0Sb7;F85b*C4;+1VBwAa!EHL0{tI85 z#Vo(L z1v{T=A%5}rI+xrBC8u(08%eMz*tLN@0ER;F*VKB-SHrXW-L#@wM1oX_!Pp-ApMz4h zX_V{1!l<9nXXGs{U$Y#;)Rs_g`cnDNUWd5yF~%Ty6jHLV1X8e949tB80uficEXs$4 zeO7NTvYebAIU&DDvS@1j{t2~9MTyNmlgexb8F(G&rHji$)Ba!I9uA6#@%Jk4o}*D| zy9WmnwFZPlA1_C9mi{pVle47D@96I5>c5%%6cn+>qoqo>j}M2$sax6SpVfONA|m6^ zGrx~#Qui{2^Z#r9MIn};RjcJ%)0GXcc^vpbHiMy+a$`H1HjybS8nn#xBDIl}G&IB) zE#tCJIGilV+eT4SkI3Z(1xuKrj#l`5y&g-#X4zTP?3Ja!Bek+ND`aECBTT%yazjSu zrXYAEo@t-e*^2DL7?THo2;3<)HXC&eQo*}=0VAf|?P9NR#cSw8JSPbS#|VP7p6ASH zSVW2R-@n}gtaWt!e%qYCUrRTdEB~fZl^YwUDp3Q7d5Psvu}vq5BgbW=jPfvJujt$1 zPN7b3M+F88B;z=z!)MCM)*BUogqu_jwbG6k=&5#jGRqL0mLsD7)0xr5=C|E?2&MaS zV~?HoCt7$`ecxI-O_iJ#cQ-dyIyJeT(citC7^vmlExqA`da8Ny#q$OFM+%ssLcPSA zH6`MaoGJnw3bwX*x1*#pn6a4875VuQqa3RQ@(j@JLkWt1(GGK8ey+Yj5IT%JoSn5J zkUYQbL&C|7iA99fxTB$@OmALst=3zI?#b8Rx&g&8r9S*Z8R#bz8Zj__3qu0(uQDRe z&=Uva9g&zciQ$Z_u#-RN7-K+ zjT{!a7}))?dJnd;zg>tvPSpUo@Y-$5&sAlC9M?e*xp-)FE6gvJ`-8{}fcw$=OAS@1 zW(V{6ueQ?#eHepma=`!JdeO~{Jt9=nJ33u$Ys0o@tSvENa}g5a?dk1R0L1g_lj+6C zH?d|N;%C~g5yC9v>n$KXBMkZNF@SXE)B$-5Z2z6nB-v%Vru#P$(a|3@s@%dG@i*CE z$k!s=4YctLF&N7Ye9ghPi;H~sKVwV(2c=Q#kzhu0q7HH*o~>1G6zvA$6=~{9eRB@OXI=xVn+MhrAgmGs+u}zS?>X_eGm_(HShuU z`hBC*@j)N-D69?w?ULNb*Ep3m6Ttj03rWEECg@pWtgYEKe{(tNa2o-g=7ZkIiS)!r^&djrUHxni(7a!j^#x8v>MjRU~vwy|M4-L|Ijv&mfIV# zSxyT^8|KW4KKww_# z1NZJD`*gwRzH!ETOpX0UlwpKj8{H@M(F|#;)PjPRjHSB$mzzg?PX`mX=j&_zcH%oc zDDgUw^Y)#5eCu^<*(cPNR$Ppks+7%aZ>UpBhHsUkxU$Ne}86hB}-UK3!w=TFnFpTWkqJ@)8OJC?QpCM`cBS;k(tCA6_8(SLkS$ADI3QR=?Lb0d~Yu z$+#5T;Qqr9o*6^2toq_qf{7KxBOx4602!NB(b7F zZEg8Mz+)TqUyx=JR zW3ihI-{qUGF1y&b0mPoA#lnrgq|{SmIIa# zZ8`RhyyS13CLsTINtZIYedX9#JknP-VxMSQrmkqIx9^Zry68sFN}E_Zc3Y=YcFB%` zpdDFb_1rA8>yV0u{(xIefW!W|^L;agr_8Kn%j!&Lr<<Rx?spa{02JaPnc52}%B;ad zUB~6ze-5cH)3-`_iyF?7vuyUdhb$<%9}3*f1r+Pce}-HX+$qeJMJ{w}d%Ffxr6$H?E?36T6NdmTemlO`^Rc93y9Cyc2HW2L&7?5$VURmi`dom_0i-PLG)xaN#>=*q&zFi{(Xr*Mp%; z`4+GD`&n*YU3JIWo8LVALPO0ZDrKM#5J|vlzWi&VWKkuZ%jX?_BI=Yq2q<4B+N(O! zVRDh9#vk)USy7O`<`i=mG-a4M9^pIHs_}$H;I*hgV4r;>_*3s zpc&MvcW`sI;+Wx$i{3c-M9h)pvpDR`nRXnj3>GMBP?Gs?eSv2SkM>BokAVH63*|2W zc$+a0e}_braeeg6BZ20K+W>ruQ#0(;ecZ;S+2y;qi!-1deRZS9GTT(}Yi5j%ca-lo zS;3a@Clu~bJGW+hgP6Eik}y>4;2j$H&4YM>Ym+nFS04Z+p=g&THY50^;4|J8NfHUBv%$32uT3ZcO^0|a!G&5SWeIvLbgCef zpe8b{As$=}P|tnRX}$l^X+}Z+MAozupZtkZP${tb?j1pyc3rGpmc1*NP_4H{h9EMU z{=q8|A%ne2Cp0Ljh$WJ8Q!qg#I7yMm4s_2=M=w0EqZR@8(}u(6&{PBk+@UeAvtg~% zTpV<<*`|l0qeGg>0VR|Nx-;wD8)Wz|LLWZH zk(81AO2i&z`dOvjflNS<)fq=@RR?Ye5{?J%^ax(8ZxP8QCHqWYX@DUN#^RxioySx738u8k$~uwty8>in%2{0)XTYMQy*ugr@)f;XxxPNyr z+m_}mXk+Ti)|Xr|Y5NTi;ASPO(RY#n-|)Y&F;Fw3DEePPK(=&*%Pm%YK$Ge!<^i^& z=Vj*n`6pfo-lvT(0Ifhn{r{sfpbYUDf?O=#PYp@E9Wm&GO-!z4h5Ut#i%Xps1Webf zfq+O^N_r*BfB&QPeg~%t76>IJgg#@DfX`MEeX;VL(-gS&eJ($WphMP~>PR8=e42Hp z(9xxCD-jLQ9=Yk4Kt;pZygourDJdT%5?bj;)i(m)Zj)obJ2FDSm(266ANfPwO2a-p zKQT(RU&Y_S!K|r|6)$xpBp`hM6KwtY=8iRv4&5l?V<2fN{QP*ES2e;N+Ir`GGXgDB zw(;=zXIWZkDFvB?l(R!S^o=tO%soi}aZg6Qrf(~q0`5D@3^_{V?D{4$wV%IWgitrE zl6X(=Q-_y!S03+9_`lq^j@)}VrSX94Nx5Ghw;xHqJSZC1qWcE_0~yS$_`UG_L3BQc z@C*?CaNaY)$c0p8NifNg{#32tvfs^Kp}fRA6ds3_8~ZVm6{8$;k{L>G2gEhSL))VX z;89Yo8)jdu*R*QrVRFI2g4TywsI@#?sQ!)?QE4uy7tS`rh-(1PT55LG2uACK))3;- zv(WxocwhWMl&Rp4!V+lQ5}W*PY5-=^ChwLxyiB<^}eki_T z?D-S>QxB6O#c&Y?43NtMAC*IuhKTa=S~yU}Fy!a!g&i9?pc zA!#a0TE90e!Jyjg+VmS%kQrZwz{6hF3Bb775P02XVEXQrHQfOGaJ#nacFYNg3fsiQ z#5`#B&c%M4E^E25yq{q~DAfG-GTg1G)ESOt_?1t8&1tnI#r=MJw@cp0dpTD+K-2p< z_GH^WL{jtNZ7{Kv2|}&j*S} z*g$jqPzKNiw73_AndMrNJwml(*q}jh-ri-LIfR(e)6J2!Q^>A#u0g%($ilXnN{_6x zuyE$F%*BZejU8iUTvmPTM}$!kL?nV_)2*iZjY8|J4l_C7^?6-XPV@6nlI>g?{{m3BT1%fBvofY{ovv-AM|*0ta*d^;}xZ;(5gWw-I9*`an8{d00Pk^M{47M zd^cbeR+ulA67I|NHhMblEbS59M^g=nnFnPuLQZP=m7V$=IF$;n9bR_c@Wc;96D2>zH-D|U3rmuP&QPXg7+bv2QV3z$dfEGjdeq{R$!x^ zfs%B3hoHzw?;(vHjWn6lcQ{qMXmtqAwWT&H+?Y&+`dhm|Rt#GTg~J>Qe2<4M!V=%J z`e_MKTQ2v37;#W4UQeZT!=?4bO`rXIb2QGtWu-aiBrEd3D>>4sO$z4X1zi71XuBiG zpEZH{lnXVEiqU+A_IA!NvLM)egzpxBOO}CZn(!NgEVZKjW4l5|Pe2`H3n0G&<>{<+ z68kX3Vb)l=41fj8K<_KEQUXQ`!`mrESu%V2O&Z$$ii2AkZ*uWD$CXZe|5x5%+eVUm zhjXOQ=m$1L8VGQv9+U~%wl~2E>5)7qoOPgk-xw+IqDJB3&9Hn*0O~Ud)>S492ye6D z_m*dy`7C*C?lv~ox^^^e`L+DNB{i=ceNQgdI=Ttoqo%@CS|7Izrc@n_Y;L=qpZ;J4m`h{G3Pa+rV5p597Ae|SLcyerfb91KOuVO z71|KaUIQJL;D|d)u|o5u(ddbRH<=jnNo)PVMs0I#o*r%C7t~RNfUCp{uyFU~R=xzPdc&9yB zi0mC1=ycReQw5S&o}fP@G1$pvQeA+F+25II-)5^g1#@uSQ;*4ZgP3m9@6BNKP&{MK`zbVA;oT8Ec{;CkobM?n zBgN>&Ne$Mm2^bwhG8A0spYah^5OTNr#syXuTRmfT_S;_N!J{*javiP~DqrD%=aa~x zpy%APOp=QKn^hlcCdq@j1zt{oZZ*m!Dul#E!A!X znvE6()ae~&Ch~la2dwueB~x4jZ7o#xL9|4EJ4A@d}Uj zf`*0~?^Lw+q~h$vOmK6`df01#y>06^B~S85bi`hmgPAOdjMR4h`r!2&Vo^6^Wfttle`0#&PE5yh z4~C7-iSIL@@%iJWyuR_aP8bS8!a@JC`I?pUpmS?5yE~hrZ02w9--^OQp)#y&^ON!U zU~5vO8ikia2dLdt*{+sE(2++LPt9J(M?-R*%9d@dQ#fI>)LQ<%W0iTGW48SNildxVavF|zfUO%;x4aZ z@k57BkqqTGaWoH`o?5=ADbkt^Y_1+woV7L2#$jmvRZO(p!jaQK|F-U)U2@;bwmJ~k z^DnSsO;b7dJ4awf=UJQj03XDcJ;#7jIZfl>ke-zvAo6O z*-}$aFDc!~2hXmN4Bnnxe+M>iN#$0V$5L0T;J^f>hS9Z?%VM1u`mH^aWZOW<_P7k_ zIr!N`bVlpy8j?XrXu-9LUC+AjHJ593P0WHHuuYl z*#*)8jZsz@>P}qsVC>9Pl!s?3K7w>r^U4b!+b#NGQ~jv!Qw!UAqBU|~XWq3@y2qB_ zT$`|Whpp?%QW2FVYUoxAS>w;Q0tCICyXuz_TTRs`8K*_7-?&ut*3&N4kjX#%TOpG) zBX|C%;~lwr#*y#pjr`pWJQe;8b;)9dT;`2ew2lflXxSEF~+d^Bx7uUuo`a# zHN}U2ya^qRc^wsodhKpt7T7f&9IlPeqJ9vbUv+cnWunv#5HVwty}eeC0eG8Q63iOR zIr*q2Rc^SpyzXooc=2KWc|Ayg@XtS3e(JJSdTne;Pn7X^qiROI*Kq94tKQa$gZfg5 zZ06ZK_v2YCp(KHb^K(Ep;a~5w)0y;^;o6Sw&y3~o_rt`)co1TD15W~nS1&;9E@C#T zt?sE8U;TD_;QY|zA}&1i$2OeAGe@E;$om+i-sUBehLuOb`Tu+fYU1?$=IsDq7%?`j zg;O7dHuRp{Hr(Ni2SD*&&$GotC?JiO#^T3F_fOjl-tssPUV_NI=s67_D^E51ZBm-U z@hOL7#StJUxzz$wIla10-jIo-qyJLf+AOA@IRO?ujff4hiqvh%B0Q( zSFL@Ht_0_^!m#00;r$?z5F3nxuZF#}zg|s8l=RqwcJlste&q)e7Vp!RY|{dEpYluN zC?0^q;xixd!+fK(wTFDWuX;2>gg){EtBgqkNesXleDG-hrJ8hMLmqS@o zE2ZiRGlnaUumZ{n=hcKK-Vlj!!&n0EAzFdRywQ(=hadS-ep6{Tx^Nm6Vat<8tA=O7 zI~-_11_EieX83*E0~wO=JL;1x?Bi{Ogz08En6YohK~^6{eX?{wO}F(e7JodnSK}ud zxv3bAC<^@I&d(L9Q8__ohoSIX#UX0hz2cdBVmW1HdsgbztL@*Vu9tp|y6WwI9*J4j z;0MGHMLmP>TjMN&9A(``KwG@5Z?as=xblMZr&A2xE5sl@iEhe}&z|M6SzPQ-$gN{c zP~Sd^LS>Qk+C>@&zfHMJgn*_1FKlqi9i?dhOxM#?ByQJ)@>pZ@ zJJO&Dc)i+%LP+gvre>TKu7QQh1jAT0yic4(2@QmYaIt9Dd_AHSaJtpp`K5l1AgVW& ze{ZIiJGT3k@A-1nWM+&0y3wSNz}R}#ji#lhTWT~~*u%PFBYtG#8`l({CLWiSc{H$V zLM~)w?h7+Q6EjRD38X@0a*zLYdF5n57dExlalG7eEAvh~=Gk#D_7m}pIn7INUNj%N zKGfN{k3N<~EDjmUnoFi_;2#%o9Htn-Xb|n0fkX3Gkz<1Y}3yEPloubYB?*Io#C!wgA<4C*v{nXY%f~}y0dw( zN}xW3Dc_Z|g%Fk(#_xoGG$VsOSP~Ko!_3$vsUS2_dVo*%yiwV>^^y?$l*0F@in6Hm zQ`Uip1sm3?^M`ehYd`mTeq~!}sSYXHgA3QrT-#9v{A)&lOS`T%w!31a9(e{?t^efa+>i4 zANjPX_t6puKeNO6U?>p0$-_n@!6!iY9e&~R-}sP zh8)JZjqX8C377u!zq25LpQ|SV^;C+v^&m1gzHW33oH3F0JBV%FrGq%W0Nhp7c5@*{ zRC9ydz!XC4Lp3U&B_>Kjmz}yP7se7otmjD?BCdn>0McbU@42>+EtP;gl(;Fi1^8b@ zJGxN?hOp?P=1V{&*??c8Dgwa?~lb&Y4KRft?E4^r(WT~))4#I9lI9zt$Se+5DfI|%e-n1}EjP>D?1&e=LvS=9$ zoydwpw_`CGcG&qzT0^8p5MuB<4$%|Pvr!n#i!$5ROlxSXsfpyM_?c*Ex*2liVSIC? zlf*jFZOkq^lYeE`!VI-eL;|e^eCI~g><@g;ZlS=>`tUYOy(6Ky2FCvK)a2D@Nn?t( z`a*U5(IKJN8I~dF)v}+Fq#xM zlJ5S*MQ|f)@^HP+{A}zt(q{txJUa9|9xpX?K0h4B^|%YZ9>Q9rvRqW@FZdaWt+%fj z`m~eOC*gTOudzQHf?ojn!wH1j}=kojHPJ`{HSFpGVl69>* z4e^H);{Rs>$nU9>J0Tv;Nn_^!kv-YbaWyjFEIcY(tShr?I$6+>8H(@Jt7m!wW0H3) z=@9!b4o}5BPHTah!3uUV>aw>jycrc5vl!5ueRK|kL!X`BC0n<0v5=K6kuahGgCb7RGVf;R^VKY|x#`oahNB`)s zv}rRFtMy7}a#gorR5_PPu%7|X6(v48H7azkt?Zi_#xFhH28g~w$oa^5vS9l`3@1f* zQYMAbs4aG&(}>fN;MJwpsLJfm%`0vwKtuAdoh|OAX|^o+wk)>kNHip zi;{X!__oeWns<+q*Tq&(ubu4cYYg3?FKC)8@}SRXzv{`+)+{KY_$ZUY&2^~~|1NBv z=BL5`T?{msSye*r)n>_o9psdkve26~z>i2_aydNgXx2=W{uCe!0~Y#D0z*j9@mQ9N zT0T7d)7>UC8?EAxVjPFqvS#Ki!MHZe0CC@o=iBgb?7rBP{Nu6Be9pQV4f7naSlh7U zvBA5|vi!m-p3?=$5#oHs&D@>}r!QMH^c{!kFTCB*O=jB-kxMm9IML4f3!pdZ@m&4y ztuP)bX2){Fwh)ih`9)saoQ2LHQ-8jR5rYI@pA|6)AnNN7!|u8n88nS4Ww)}D(jEan zE2K$wXPEc`rp`F3#XN#T;WEhTA9+14t~Lrht$(2UE=iUt9P~a%A;zsBNP6!YdNX8r z3uKFCFr1DTlzF`Fj{E1qFl(l3=~Xc90+28t{}aRGfMEBBNzMggO}j#!Yy~K}Rvdnh zdW6N}539GMQ#*CGn_^b`3P&wC0Vt*`OPJsEdFy+HDSM3u0^+N|k8!U9HAG&?1u#{Y zo@2&-pDv7n5G0p;;qc?x>7u~Uh6YHq= zQ@w)3?Ens(jlfT%LGis>x2*Aix@5FJio{X$U)Ki#)A%pVz;@&I46>CWhB1fBAP$N@ z^*lgRhFIEw$>&xLTwu3;oKEkq1*H>}eo9Iujcuycem4}q--s`N+=@4BKnXSbw~Mi? zx4v0BZ;Z2UM`sT?%RGYEbs9SUL>d@5)WIV4qG?efx=@{i`hDgyQ+I+KENmol2SE60 z0-iqQWcTJw9=mrVFfHJt$#qge>vsZV>$NnXCx7eOb0mRG(Kgow4#`o!FF+fr+}&+q;I{4jJBCvL97O zUjj$_jSPXriETLR!XV7zR1cDyludaKM{u%Jxv8o#vD_N2i zVEa_7<9-Wt^(F4ZYMaSC2Kn3kWR5t|PY{&JmAG-amW& zQI|0#k_}=JT5GlQx#8~X0s9fV0JvFt__)Ox4rHdPwA1*D z{<^LiSy}t z1r-XIZxlxPHs;0SN?UoyKVrB?!7L>*@juwX?hB$;gLIlryQxL4r{V;|PJHg{j*_vY zOV!^cmtb+KKaNNtp`SLhNTwtVB{wKlr^hw4dM14V`!K>pqILOS@)D6RW>EvVJkD0c zZm9O3+{@>zn%J$nf8Lim9%4&+Wr;Idq5%(jzNChgxeZ-85&C_CE87ZSjAYd+WEVw(flx z5J5VnLqI}lq&uZSq@}yNyIT;H?h=shl#WeEE8X2Co!`076QAe(58huqm-}+Bv)0;c z%{lHE_W&s}DkKT77f@Gk{crXwM(sgAv7c8D5$Q-^$4|kzb+6;$2~LekvZO(mzu5x7 zpewO=TQb8(zCYuUy`umw!}W~7Bua8pY_~!4vhP%U{VH}V@Zn>-aKe` zD5!1K9P~W?Q_@fy_9IZ)=psQ7^fylX4L=_FKSQ_QPIroF0jany(_ct391MVR_`=z$ z?+ZEeVOhqfEGoTo2awoDW#efB;TBE4-rM{BwY-e(ZOpU;Vy@sBnD|ss`vbWOW>(bX z{23y8Jm*8%`4_>nMZZ5(uAti`?o8gP)$3}C{|z6qm(8aJtmCMm{Ns^7w-jLFv3_>s zJ+I4AJ~zXsTB$ZA+FcZ*P2!3YkE@+=vD0UesWL4qT`=EI<+;e0=f@lF%kg@JMHS8q zC2MifPWLlD5EX{0&8}q_d5bhcmTNWMuut(5b0=^%2s(cJr(0OBgl&O_;i?N77FM52s==S)5JqDep*$*<7Ben?T zJ4hX#Jq`Z!O?hG8%xax{BZl$J_5M_6@fn8PKe(pFHKF?2^7!#@R(??tMG%`&Ur4#l z{C)J>@ru>#-nyB%oOdGk;Jsyj5z~4(CyN&+?=13REC}s2tI-TFdd&*UfN<+DjHgd{ z7o&Ku5jYaP3p+}V4x8g^D0o@mSbQeEY_xT}}kiT&mpd|GC^ zT+dMrFtn%Ga$UPKSDT-_{85NZFw~mqul=&xzyzaZ__%&N94fY*ds{YogWx2k#03!B zK^}u%&b8>QY;x1dRE%LcRr*n*qVGkd(QH*74@HC#93RQJSQ93jlg7kOGmAy{*DuTk zJfX-fL{kpw3W7JrtL6unzL6s1=Uw6OzV5^R;#BWRC< zHS_B)MSLY_FSp0WKV9)%Hd;S`K!UuM%|xw0hP7>dyT(<7gdfk5_UtJxS&WqoAX96Y zY#xN)DLXXJ9Vue66_Qy*Oji0QtBA3#PFoM_=OeY-{60x3@Spa)@&yhUXXpStq6CYn z(v)h;loi>O2?rj~ao@CO%66{(V)g+hU~X^>L^C!GN1Xjyd&S&hU%V5BovDNki~Cxs zoZ;mctB}F5Z&KnFKMe?Lw#j+{O!dVM8P6Q=$3{v)Z50yjQ8puPIUSMFn=Xl z<$BCvZX6!=zK79bdXp1s1OXh~BM~)LC8_7XzJx==@bMX|#9&*eX;cmoC={V$xt@;+ zjymqk!Yy4TXMoiFIorY2&V!w~vV@YtpQBN&%=(ZZY`PK8K|K9a*#3C8#*l+C_lRj` z?^+ReU0WhxP*^#0l8zhn3^*V%=^0{*A!&<6N+bcnTDAT55qVu6jtt^N5?CDvfc$`+ z=cNAUz#Tnx)+vOE5#3RYj!<2@@jn)_&J$T3X-q&7ik>w?814@GuEXYjlIU7Z&oo zObIt2k&(W)*Jd946g|-gihG8W+2NG_>qP%OH;-3f7kpUA7HQdtV@t_*Ff#6qUUX=sjttn`HPsZ^l!1tEhc-{^n4y}%YB1JFtQc^U2=i5_Hl|X z!e4$zn&IFr20Q}B(YAu1$2|W>ns0LH+~ca@VToWEz-y|*K_Ac`VmRtUB}N$x7@Uq;I{<3Q%vo!7%( zkW0px&ML6KOe!czN%VUAc0`jrGS@KA8W#iQB`hq>-$)rNO9%6kVrv0XNH7wqZ47uM z`NGJ0yTeK`JYHM+mTillR(`<3Om5e2^N5rQqL+*VfS5t2`S)zUJTM$iUaTMG6TsmwK-W;b83Ud{=q2iSzz|g~4br@W=A_?FU?d(E&iB zLxdX@;F9^Q{WF6~_1v{YO(W9kbtvmWzdS)oxsF-0^fya8@y%4LdJHpl?CFCszekTi ztLYK%+%TaXK+IpbtAX(Iu5lAT0pELfGvZL=ca=y25g|I80UcU)(GFr^ZE=!=#$T6O z(;^!z~sEI8H@v?Q;BQS#M4+Rs?u3gOh8t>VGX1zE^Unext+kJ<8KAEtOwQH+_iX^jm&<4t zcg2_JZwxTIIc)e#`e&xPHQ;NdtG<_b^Mu}init(u`gmRlL~c0)p(;N zDqT_d%&y?X7!&q>YYF_Sl=GzX18Gp_T!ZXWt~(~TtLnyeaXHLdrlRNETg%=?iS292 z_SR)alJCTEAtCFUG-6-!)_%EIqGG3w8To5eK4P&jUY#e`TbV5aC&{NH6!{?m^r&vd zpB7Dp9fn)>MzJ&D*w13Gd-m)tkG&#k!xs-_0yV@_ zBk;kpgbySLN@;XFhfJM}m;q){*1`0WBN8dc^{})oSgDFplpq?rY00vrj3mg8#`3p$ z?@_YXx%pnRGx#-5kE=El>HB(ifj@K)%$Yk}0=-h%FQARRe4tNn5jrITuOB)Cw*k15 z;IG#4^PvM@E0C=~&teI1UWHW`d=bjBOE$8i^Cy(Rf^p)j$LkFS1B#-*zL*Kl?8z0; z0jQmu#`e+k>ge!t$?I6^2JFb8uTY8K2}XbcEW4c#VC<~)UnI)C8$-Yc=HWXqTljbpVCtjW%ftP=Ks}nj;I1q|Js+T$$MW<6n>6&y(rEPC%yc`Kdaj_JeDX-*nMsn$Zb9_YYKSkqknH&RU9T2LZto zK44BoTy=LYR0yPUSnUANF1Mw|Ui&&VAT^>*ut=}nw0ft~$jX7?YN=<^aS|fMnZ=$xZQ(4TM9xJ7v36-b51rcx>{`mi%&tm%_faPsl%VSGA-q+%_Jw1_uB5h^EUI1aa7wwa77=r zKdKF0z&RMr^|hXKIYa*H`SMJI(YrIMD(sFRM@nNK4B(p-&mR|Qr1%%cRZ1~ImuRn> zwmkwQSHZl`)xRKa8m~(g3A0Q;m*&4P?xI!2uzi}{(p(PwbiQvz2sJt82WDZ z%;8TbzN=xbzv7*RGHnu6(hdC-dSTR~UP8C#^&8W_88yG!PZlsb5L=IZjGx?U0iaHA za1ydg-vVsv#q1n_3452CW0QPe(!}cgnX|?xtOVZf-{lnpH4n zx4Ix6^?UTFDnH#an2B>iT>0+sUzoVLa_#P~&0WRp@+n#eoKqF!r&{}jmkG98r73ST z?CUe~?76u+X?QhG(CD}f*2XC%PZ<`uib_kz?mZM~7`(kujm8UHh#MHHV)(){q zxC_Dr0#CSJG(a&deK~`uX00bfN7nHNy+bS|T$Eqh8XJ>jyY%**Y;_P8yjsaNS`A#$ zXz?~nJRxKe>zC3)+1rb9zGtVjwpl(`aRUcvhp}?!2ZK|3e$NPFr{bjdWJ#|d3PW25 zF8~#I5SyY4$V%Rb?lv)1@nk=~R>(-DBPPPD2jD|v8!S6qgi2r3Pv5Oo{-z** znl;O60?7|!8K7}yPz`-wrm`qVe=+X^#DQa?+wz~e&W!0yt%52LKS0yI9OxP;~(rGp2v zs0`JoX86;Oi3N4N;i1#evu2;OfyIU8N6sp>gb`}73e|#=4lz1d3j9U)^=S2giBet( zFko24RD$_d{sZbF@SNtwQDYZJqb|DcP@kQuZ(0H+N0c_Q_dP58*c4YJ)Te5Xp`pU~Z@MJ~YI{Z!FIBb#y7~#cS0R*=)Lr4n) zFvBZew*L_jxbv8r6~NI=huJE3`7EHLcl6!99nD@ye8=FhEmsfZ{gqw#5GL| zr#{B^3P*#dBc^Qjw3Ln}m?ayI6F}h)x$NMm3|Ie>CFbhOz8X2yw}f{`MSFqckZ7gx zOgf|F7I9a}aSv%6Ied8i%R%tJhz@8(UBMEL)@4#DTr1Yge#4 zUsRQ(oCaHu4d6I{DxlVXi4-8{lREHfu~w>yYr)!Wu}-I((K}8iW)0tU5rA5K3^K1Z zC_+y&h!^j0g@U|dsTV8p#vPtZy<=7Sw4tw0}ls6y6xIn}Bdw0lNe?vNl_LrvE*&Ca0w0hB``< zW&Ikk7ZBlBpw+`k&~c|O0Cnx92FXyr)F9lqLwJ200^LRD(Ls^zfU)VrKHiK_{ z@6Q0!VvI!y#nF6&%tkI_x00*P3uEz)dy0I~AUzjw+n_9dWeGoK<4R!J;sEWF9@(33 z(lm0{y{c+zjUb_i1`1n2BBbqDwn(V>3s{;mkH5dR{9a(UrVIIHy35!0>X9ThIYq6P zu{>smV%HrEm`P34LtUMj=Cz@^po|&TJ(vMfA;~FR~d%p)_%D!750JNAr zLr44%w1im)qX_t3&Wz_t7QRpP`1N&<+V=kX)FejK^5XQ)1~T>0p-K?9x97j0LMM54 zP(>dRokefNLFE^@CrMoD2~Ztum!>9!jeO{kBmX0yRq|!=Opa(na_SZ(NU#dG~`%&;vRzdr8gY^$m<_NJC^SBJLFGhihEjJG_d20(_sbzb}12wfiQ-PC-4FAu`tcVOD zqvz)N1ZO1fYh`H+jQ3tnYQfIdnBwQypq-}v86IyBa-F~Qr z{SPu1PGZur4$DNCcA3(ogV;A{4~T${l9Hivu|d}*i>)B(oOlPFlp)RnEgZyY;blv49G_3ihR zQo?cvVCo$8Fiw(8^Y;~d?Jua$+zkM~mkSoep9E0e9D{v$E7SMZ!VOyHoM{Xcwx0G8 zF9H+8mMh4-`C4Js_Od5;1+;n}k^!~KoBYjT2QbXfLI7&Am-4|fgGP+l0<*R& zXi$h;pzrmEQ0O*rGu6KQc`>dAW)>1E>Q=AX>*XHlw78<}@tTd0T!F!)JnYLB%-n**A$dWH3)80)1-KpT(96!2TguKoNwg3_f;?sZTl(iqPSO}`Nb z)hJGNc7*<`NM(uM9+K+Mj*r!me$yQX%Ec@m&D*xvtbyMQ?I@|c7nnUGm()L~&V99q z!vT)@Y3{fm`ww6$8jX}P6TYi;8AGBCec{*2`PMj0jla<>uY)(4f>d}q*51dE5MoVU%Lswk%5o6rD7Z7FgzhZ1pgmPa^Cb8Vlfc2bL_6FeI7GgYIY52pQRtgj6IomxQmeLS7jil6 zc0|?c(V^qI16pp4M1uA#?3ubRhF4@#~TnOu+6HJl7PSRKb?K{p-SAI|UKVJG! zALUao6;fiv+jr2MV?Q?1w^#xl-iYP8^4rP|8pMXbN^BpPc`y<;m|F_LiZul_7vF}} zAAu0*ylEA8sHN7PdCc;%M<2eWE*&YQ34hW*C~Iu`puu#YYwb?T9YR{K+NSnYS9`Qt z5BFYQ6&;>7>^2j0fyC`isQ1N?68GeIb(9N~R^Ti!oT32YZ$RB80^d2A3fawW!U0tHD&J^7$$pQ z2&@)rBk+eof?en&3i#rSRiEFJcV)cgbHnQgXD&{@YHpq0@mcUMNSfMVjNjT(*Y%^# zY|HQ7%pI}2U=V~OX^0!i^)o!7bo|-Z?gI>NGT~cZqVZ}IOIN!x7hJy9(Vo75mWqhx zTH@|F1Qr&iKYNH5UkCWi=?#-!QJ}O0o7*E^HNnvH)MS~@*V~999QL<6WDb`-7%e;Di6~zxbd!QCBla z2xk%qGgY$$FhY7=?|Wg^0k6qBus{dpxrekV&wd$pOWN@65eT5Ho9Ebsq5kiRwYvFs-IX%07do-`yP5Z za-Vahp5L~4@1wgKq8uN9XM|_G3;hgT>l~S~M%!Ne5QwJZxVf8T*Kqx3Qkn~fXQl=l zXdFrwe!)>jvF>=?n8QFJCR=d;vy&ty?uf(4Jc~TbyQxx?EGYCp9euwLDB}$Er|e+5 zQuMq1mWr+u7u)fsqX=T#arRx1{iL zp}M@w6PAWAHbP)p1ga2MnqBq_TAD!|8b8YmafAgkvuLw-4t6CL$^1W8W2~7w^XU=v z=iJP*7&ZI6z{Ds2ZrlS{L=sFnh0`7e6&8{S(3=(3^czQko8s&1d7r(Izu7ER*GR;| zX9iV>*&|BHbe)0jt{p#>NBT+<+Wj8(^;S#IiMp9JV0s?;6~u}#MwOYC$QvdV$$G-% zn?v9Aep&$SbcZb2Ye;;@v2LP)hmPc7jnDGrpoY@{s7TNE>mH+|ZxdDRL(mxP{&5(r}i>u{HrRd0$Yv^@);L_osW+-JzXd z$z}?tO{zlhD*mEvwcfu2!$k7i za6C9&uV)FB(G{;*WElzMH&|Q!~OZ>-Jmjz`(HDcCPlvyzw_6!E|1@E&CQ0 z*tH75+g4_G##igX>tp{BdV&Z&jze1murPc@Ooy0H9`QNLh}-Q}5hDHB?Wx2%FzHy~ zE30YvhT=a7fS=w{UX~_qB{Lc05BKc21<6#uF}G|wUa)1w1SyR(z7+?cubfKVACecR+pf7VzoQf5}t`Q6Sm5eog2n!4S(0 zV#b2*R>TC@;_Pv-y9kkNqttnNZ^7-r0A{D^oeB0e#8-|{j%OJ?2;QQpq&M%ECmF4V;iEeq<=tos*^j7JOlIjMbv&UE ze0!F*@B7*z2Bu}TGB8EackoRiofionk6#oXBeH8V_iVr-)3;{D%(FW%pk--wpA^mc z#T56_L@3F(d$QB8dxcaTk7VxWCx1tANa|0jcG08A)l0zUR24~&>Gy%G%_zM!29ET6 z@oG7wrgk48#^0ie>jcBRmkS%o|`2@82eJQV4Lp}})-qq6Gkt!bNrv(FfTN<+3B@?c_lQ{G;j_kgDjeCivBgmu~3RP%04ze+~_-a2s z6Q6VtBFpjFOGJtfoYM{Z;cC3-;$X`aa_I}2@-R{TE|_+d<@SXagsMz~YF_FqV6&n~ zT3h;ZxFwew^?9GwO0 z=}H;B+!{ge#qqKbNrGea=N8biNHn_9Sw8lZ;XEPzW)~$wnD1^S2xAHhvQ|CU2%TjNz-NA-zZJ1yjluRKC<>gXXPNE0R)ssf~dcr$f5DKU}OS zH68l+BbxgsS^b4|)_@5t<5P+YXpv=V633@Lb*xk#cFj7k{GM{a&no?em}>;F=CSL~ z38YWzx(kI_{ESjzV|x!d$-5gDJx`+nM90x%QiEr_op!N;0S>zhOUjL&;@}+K1?gMmc^zsSX+PoR$szopH@}(6rx(cv zDIYZwG)Ykd2;dHiC}z5L%?IP(D6lW-xVY3Ez3o15C0zUc3e_VVq3*4HRkv*6YrN4k zv+kDhlLu!LgXvwj{@tU$-p$P&jKT&nd0HgXqMW1!)>pGRe;E$ExzQhYlKlLduWo*J z9sp^~nGV~rjbHhbD}=7?6#ZBA$F|D*JFt8HF$(zI4u+};-hFOQXEZB(1Zji_kVz>y zezPmqE}ZR3_sI$XHOk2N&QqL@NXI(?2KJ7BNPGb(ouvM-T1x`Bix6RV(NQz(ii)d5 zS-}}2Nj+h1v^TC(H3t5n{L7&=S1uH&NCx>^K-Vgf<-9z28xA7+N!JiX9%=zZzAFs$WL^2DVPv-#N{ zSdee_wHDD}!Q#vUFM|NfSFgsFHSyLETDtgCd>8>@r0$5`@}BL#KVXA?@c++$k?%4R z*zg@1pFqn5d~<-aZcFJdgm%I2mpAVfhmS6&6PAi1LFqD}DSmuFp8l?JO$(~TEGN?d zj17S4dCi({ntYUXSMGZq%HWvK3f3kV)z4g17E3+z|mW7 zmvn*9Lt@K!x+wsBg;&?>Us}Mz(qdCT+eZojZ`?MKC=B@uNP5Yicb=3d%^YPL2glq$ zvG4@|*Hp&vv`%~lSjE)!PJt<^c^_DL8J#Q|zW}1={r>26doP~WZ#xO&GX+_2^}2>Y zxs~sq$0oL^Rf0m@KSG4p*k+j?riMXioKmHr!Rht@unuLrfDOs0^(Y&R!=Y7>yFYSk zm+kjY;0E*I_q2cK#qhoz2NhKh=vqwU26G6o*Azch!OAWkC+ z0Mi2qyx7opa_R|iKV?_9E!I4`V0go=ARX|O)Vvo)onZVoyRixZcu&90- zy-gki#bQSf)Tt+Y3YA>`CN9cha@p+F_JD1HG&stG)pDaK*!}}H>Icpov-beYw==ot z{z}(+STw*k!9uGdz#*Tj8@vbUG!w_iKzP3a4L&$vuG{AgkiR*eD-jq$ntS*wQ-JR@ zOz2*ORxB%dAXB1qkcN}&l-HOZ2j%6hNI6mle2Ty_;BVc` z?UGnlBrQ$lXYrK?8I@l%4)}ve@R)TEjKlT-xZMvHIEHdN+y;{SKANj7SXA$KEr)@p9B+4hQX%o4UwXc%0^h~wcDFF&U`ch# zdrSnesV|!NZeGFl*OAcE&6hM#zvE!VGo?2>?_w{Ey2KsMzYCz`D-?QFQ?Tf^KQ)Y` z&Y)i3>2t1c%#~|`K`Dm+Qx9130If3pD4}yh=1sqZIG!~YC&C>3T=4Yt5!zU0IWJBo z({cbb+!H)3i+|b!paH(O)?dg3&QsxMZ;#F`CKubY?i=_(*-ZNI1b~0mJZKkLgeuq` zPv9BmMgI&YN4A4V@C+)W_aFQj@cCuaOaghXvx7)cY!tf!oOjYmK)bPsU;a;q%5X2B zLXh6Foe$O9%-=%JlR^-DQtu`5vEu%`Q)>g}fH_^`hN25z{ikOOVdOpp8?al%c0a40 z1>x&?Dy`ofc|U2#+YyF5%UO@Kw^kwVYAAX6hurB8m9LPx*U9d?3(d9hn{3jm4@M3Q zYagyaQICky1-u#-Pk{3J;^P`q^?4YYq5RzkCIjc3IotXn>8_UITrCupFn2lq(jJuB z_Vl9X7eK+V(l#;qzE{h#J8kJb(C66*xZwm2OtYq_k796|tif`^Z;N&xK{hMG>~JcF ztjP)J@-Ty|ukcTZed%Ke+By`|LH6gMAT(L)oM+TCPFg-oBohtFav>?rjI&pE8xRlm zWW}mBElDOK(reK;C#X9e1G0MDE95@tIg|NR6v*^has~~{2tUQ&h?*o+H;y+C`o9ck z?odD&4@M;zJj1mW&7Ov_YRAM5VJmRknA+1X9ztY{J{9A-EnsgF2Riww-h~ZZFv!UX!`6z%t@{;%{UymtZ<1%atO{ z9DwP6-=;+Hh*I$xu0Zue%>;sTf>AAzl;D2no}nHKe||5tmMSEUb?oRv+5oag>Z zxCV$gEjB{rZfjIXag6;Qr*|dTp1JnW?{e1cZCK%haCHZ=v!*x&E5*0^wskwdyR3-_<%L%MGR9RxH zQVNLh5_!II!F0r)CL}a35!hxktaxcy+WQSKhm$P%a^BeoJ^{AAup(C*^%|OO#(_HJ zO}r`xFM$;kC@5w&;F1-#H-WzQNpNX&?Hg|>tuuleZ*CzlC4871qkV;7yvltu&ztii z?9B_amj0{x$&okHP=c4SCEm-M_*OJIxFy>o#AF9-K)x(FceQdVbS`}nZGFb%1yFkg zKDuB`MD!VQ(tzad>yg}euP!2WQh)E;a&i^Id;S3?ZCZYE1pFmLg`2NgVIJ~FTPE)MW67)T}QCC4hw79wtreWN;*~tw2Rl=);6%}G+48A+lbWCT9 zjhC;rA@ETT-fz?iH5*T3P6F?fjbg^xs+58vXUX4fRxpp8F=t)ImW(3PO79N@GRip` zis3txxp7ifi%rSLD?)M?M?FAdeV+wqm9=yKJad0H4lhcy7&_1EQ^59KtMA&`K$3of z3^i2luUipDXc}sbEOVB>B>rF^b1DI-R)khc86=>IJb90J%8a*n;yg?3W+<=dZDLbc_S!0{UXHVRG zOT}Q8Qkj0B_F$#TE3Wz>0YZ1x@PIUza<4NoMF^n0o}QsLL-Ot8*)V|K!AeK11}#%ulr@aFfZ8wO|9 z8`@XhqZ>}7c8L7SNoU`^3X^n}!FbG0IJV3fSp1MuP$P`;!aTJBbKt zo(PA~tOsB|$#SOX?t%1>6mrunNb31VBn~4V%5rBu-+$h-EXJ+P8RMk}W;G!fFpN47&N8S&)+0 z%ENgP73Cbi@7rvK98qF*GtnAV|D3hMj1rFnngs3a(rP|VN$NjKxGm;#bJ=tzDS~m< z-ZU|NDcCrPu0+5Puh!cZWk|9B-+sqbt036gU$r>9oqiZ>bJ&9(!u0c@RlEJ*(E~x^ z{UZxa55cD__{($E#=_og?T0FYa_sq7vSSwPZXc+|QH}CTqbqiNld3sYfe4KVV}}L3B$~oX}|I7h~-qm=YBY zb4PTZ{s4u2q(j^O3SA$5l$UspO-J9_m=3ecH~(&;J>{DG$_*j)Y%D)O=P8y3#YdiDRTQIr%uFL%4pI z&3ACKrjQngren!Xsa)wW>0K4st=0GsxaaGvDsW=;ByQMS4t_@IcI~ZbZYUl^#u7)Y z1uXr=@lLl1;gR8Ghs?9^4LPB9z`zd`V%~amjixS4Q{6Khyqx(}NBT-2)Vr2t+}=F6 z6sEhe@>PHinP4s)0vX1cu>!cACBn z-fRI~?2m{KF>WUUGZx{Oo+Eb~I!Ue{rq51&=g7X*9`A&sh!ZN|N0nwiP+}?dftKd{ zL-badm^5LM=|HE|%}An@O})0|%mDni8)*)~$gZT41N;z}Qvw%%4b)p-8J}^S7dXdj z3)`Q*|0fHebu|R_%7bP}h+sosX>!?|e5G>@dpvd8Wi{p6mL;ogACk_(m)3^M^y~p~ zjgD|vQ+!L7Ol!iaHs-Onp!*x7{|Q@B2z6aF3xWB`2UFw&`uThJm^S~B=NDIvx2M1M zv#+mi^gv)8;_~rKtZ!_4);^ay;cP_Ll7!+mV4su^SpL#~dYUsEXit8KyMNH&c01w^ z^iV3lj8)7ssTvB5Hp<47R28T?#oW|gMD5ZECFs7kb>yX*Xh7L*uT|G`ePUV;P3h3o zXLX%m9+*}xgWy|azX>*FdwbV)sahr+lVOo#m;t8QqOz( zsHi4@L};y|wP+R`N)AyrW|0feun^em8fPRVP>I52w9AzAQc+95LUWC|&`17u$JVsZ zn&)hCek^lE-{Qehw!0jFkYAY}nEyCKn3@%WIk#diK4dFCB>BMo7I#WxQ=n^5X+ivk zGNAqq_fQzRE;R~X-9kv;>(r`=0o57}gos!2^(eJbJdb??uzPetm1JrCmvYx+pT^tJ zz47DT?4F98Y|#;mXK*JCx}NPc;H>+QHmt79_{s_!srb|u$w$H~6?DoMHYBXBe4 z%8PIy$>Q}}CGoM+(sh~RbldrGG!hb!SB+Wwl+z9P3i6@|dW`r)TR+8UYPDzgd=zZ@ zUzZTov$^lb@zw_Oq*5bW6tBv8;V8tC&5GvXk??#Cr{TGHjzegCZXSnvPb5j4i{V%e zlN%irbijTth_}VP2&bfW`_2RD?t`Ml3A*C!EfZwTSR{LNLbp=}Z@<_>&iAuC=3Kvi zx0i$i7sa#hqk`)dax}aO_Nl?VjhCqIsqmKuvi6V$+ z*jvvKH3{icO}3%~Z|JSlZNSafV|ilAn7r9)%+ibNuE-j?9xSq$+c84A+RFDA3#4cv zBP29}!Q`d)cGtf3Ry0CON;~42jHA~Aesa`gdU^($s{4{?iW`D8Qu|FFa z%(h=Q>%>RDJL^}Fq(vZ)dD?2$OLE0zQnVSuXJ$5tNf=vQTkcaN>ni^3wDYruGyZUX znx_5a-8s@1lnXk%0jBrzJ!e`k{zxuAzd8}kiM<+%X{K98fb85?DGzpY(dGNFxOzIZ zhx{%atNm=naQ#lH>dvU(YKlWpIqTxaly|G2E9y(dQevnd=c88Xqt^WCcdX~}2_mi7 zb7Pec`JMS2QFu%T``R)tZ!i)q;2|@ZI>v_M32zwGY{asSu`owsEgOvj3$EW^aPVOs>a2K#XIUh z+g(q$YZ&<1=$>SGq?xd0sbvvwGKTPeY&1BgE1;j~Lh3~%ZP5nt=6e`wp;|ko+zx^; z^{&B({O>>x4+ss08SJ(W9bSEzhvt=wVol@$Scxc)@6R9-iUudwJwY4r=nU_H@4OBBEfe=0<$F_^mZl zRfpJDVNVx?au*TQyshX@-Ff4svo(QqnVn>(Q(87Yq;OBzfh16{JfCA?|B71UO$E-c1uifZKuR_XC?pGu!}PsovA1AM>2~Gh?+|WsTZ%Bi|~{G_M)|e7fl=zPbYXsN~x8(#6pt-x<5> zqtMgZUnvqAcb+A*O+KzI5)>1bL21J@4f*$mhf*L`^G4}SP^wky{n-$XVUO;xjNv${ zQ@DW@pN0cvwA?RCUZv0Z`9Cor$I0(|YV(~p;PHCNz!;NYm5;-#I>0{vW>lXP{asOf z(0!GA@Fp!o$;-*NYBC~@;`$0>X$qw8Oyy#J(?4=1j`W09u7&T;CP-^Yel_w$s>-O? z?EKA85Yl~UVUox^-?9u055Y5$Q;tz~m$*av$&tADC7$HplGrRvhRW%#3KSJz_Y@Z= z=l3M5P*%;`M)W+#f8BF#FZ!#4rpMck^7Plc0d*sb%Sd``!yhaZ4}64rzo1FepN5+z zDmtxIsU3I|Fk5cs8r1)=appT3oZk-O*@CG99 z@*cZv1;&)*ha@YF^8xDgp94k>gF;Ue#hu3*{RZNnJqE#FEHT>|yx(y7tz|ITq*Muz z)e~oODlt?GwmERi?vj1%6BnI&1#6(BA?F#@dM>`!jS*ztiuvw>-dc1!WF`o)Th&9f zFr9&4v$TSt3q#@urqK)t-))ppMa+V&6}#tfH&ouYxn7@sCHFaREm{*x`PS0V((=0_4gd^LX)p4!$Z9fY6&m{~y%s2R5r1t%}?7mb^C4gXmFPB9Gi*K;mNH77I8=5 z{JFhWM637UfMNKpC!CSCDO=MC>L&8H%3zYVnL_!rf~dfgR_*EJyx#4fl_}a4x~=K< z;*`<2({cShoFH1D3VB9cdrolm1V1KvuNl)5%(?r>BjkyskMIb(C(=x1eSUB)`<|?H z#;JRJ?v&M7v)G*8fVlNs(3(gvQzh9KqzY{0$Ts>YBH<)F4sSVbKG~TA?t;5;6JCKrGLNbvQt3}i; zi@ePjPCcELe?9;FEVG9yFUFwO>i)CX+V>B4ght5a6&{5Zv{yB&ANsimjU%G;oPQ=e zKWL2bAye-mf7cqrqFpd<0D4>zvBkMXm#xyfVW+wj;>koUBDeRVc(Ehfg3-hmzU~q-Ihl;sk5WkFrtzLo( zc@#n7!Ha7;be@TPWZuSig)N!9A?xT7YB20- zdGn1{+vIFf9E+JE>Y2;1Bw40?z}s(SgC!;%Dp(Py=pI!Io#Hg(J>L`sf9RImmqlnJ zan)d6IiN}NWuyKRqs<(Y+6;eg(tjD%qMiwPD4=B}EM0~z^`N!sZ9ozisB8psr?HFC zV9k!9JCJKjYJaUff}SA@L4F*XN?dehQG^e@0sQ7#jSUy^DC&gyDiuNJjh)mOgTzz2 zu`!t)tv?E_51Hq=E=Q-g@FS9O8TFfF|Kh0sK*G|a&Tpj_ug4!&?Ma(Zvs#miy84*e zes`40P11zqO(ZFpx$zB&ETU&D2Z@l_5-?EwYsaRKA-zbhl}o#3{Uk{1xp)F7bXx7t zxcZPXJ2zR*G_`w?xn#4xE1r~Hqlc%AfT57lqnF2$28emvLADsvjk?i8W4!@i>s=Pc zCfbata!30`g>_oHY`@F>RJLxg@)+Zr1NJPcibr7FPRY(-p~iExz?8NU8}eIy+_sTW zqB?Mhc|=CSSV+Zcn6KVIm&U! zi$WadzPWj!RG0i$b-Jxu3*+l59{)jT3Nd&}gHVm|Cm1Jj^pyzjSs(+7J94hVLw`P@sN#47A{26J2a)Vs|<%0oO*{NXPuJ>7VJ z5f{i_&keMnndV^A#UsMZNV=1Q9|IbCu>o&n;dQVAzlqUD3>?8^z^6V|M*IyvHYJKE zq!%}eaLeOb*)4B5`nZWoZn{DhU3$V1Iq`(3l{R)G3>mbPObP0Tn?AbdDzmx7dQ`Im(Ur}sA z!QU$s$p^;Sa%qzu-!`c?RB>|(wfce;)88(m6psf&DU4YX5Ph+J>3e{f_~!F}K9DIW=Gg>ECkp-Mm1gzyH*Uu@Z>qMp-g>T;tdM98n^)Z&_48|TIE(v(zc8gGowC4hS^eMF;-elw=8 zWi_sKy>&=B%wP~0(E-tvlNloFZwnK7aLF^}4_;xT5PA431>ty-E4j1eSw(bfGj3v` zZU`z_UXHcQRvb|2w?yHUB>;sYH29I+D?Ulz{w)$1n3&{)MxT-iOSd4lj&t64F{L~p zH*SX@jCX+YDfk!+h}w1>!?pcW-7qtY0X+xZHY72**>rc+xfWAkELL;~vUc54&Kvd< zWQoT!4&V-LMl+2YP!R(~I>~;5x(*UysN|m|CS*MX`aDDQuS7ti9QlT?<8C?1@aG3e z9n(;TJRfqF%Fw3(TKd(|pK*X(*oxv998&XxDDmjXO|=MCv1ORA`I-yK%{$`vM;mn` z^HP?d2Mat2y>Qhphm3y`Np=-(Kb{{6zJeVe_|~Av39wvXB)$su3VM2PMg_z<{ozVL z!u(}EVgoT>&```I?__bvrUKuccu#Oq)XK<{z{*tTFW1)eN#Z`Ejr&*9@Mw}%owKX$ z&quC{?S76$<}dwKwyoY_KahA3_8a*2{3vwbgO~Qy4 zGp@wbe7^eXFzD@GNrTPRDc_`X9#+gDUNp1`+yw<=e+(x<%Q6d&{a9_XRwiqHxSDvJ zP~Jk>`Vt26?#f%L3=7{I*C*JAWzs`5W#u7;nv-FZ7SlW1A^~wRk3ue=!4u*VW5D9# z>OcyADSvQ7(e-XV|IEYYP65q$X!Jql&H$oJ0R6VL^mTN{c~XYqlQ>Ss#*zQg370Runz22 zJmVnqxT@t-<}e*eaTE`&)UJa#J%Vj05BisYn4d*gwQz?Y$NsZa{Ygr1h$T$J z90+#vlY<#K=sb=wnHe6=@7&I+mS2+pnks?y&Q*b|W_y^i>b1w?E!!+Np%I_-`5bN_ zh5XF$3>0(ur4+x*eq*&eZGqu9CqI~v`oco={Wt%CoG$X&8#F!yr`V0)@Cxjlskm|O z@~+>*X3DIZe%<-u(5H?AKMfP&leH0bBJOrbn9?HY(>^h@a6YwUClBjOcYyCN7yV zKe>%GD9zsLDV+LURVX;|7`{O;22&+f;yi~;9f;eeKkUDn-F}z=dq4)$a+Q!#bSK4r zBq-{_y1z5x-ZP@z7Tm-_qi}rm1ccOei>3*vW2MsIJZvE1BhZ>E9|e|+bUG&9h^!9* zq;s=+ZjSZA2j2E^{F+m4H7uF#o$6REb02T{c)1_?1a&=8t#JQ_<9o6>YWl4^6kmNP z89hp8u@#{y?xiTN^O`jpsYVkU!mu9;Y&M~VL#RaENRl6H3D#s@4p||X+xjmrF*e-t zyT>4WBT1NL?K@(U_wdhzyOAh#_y#!rzkw5d5CLtZlL6u6xTRXY z_RV`krSLx1(erFAv%bzZV!;inZ@wNdvwMTRlhr(%Y=R6~KaB|m0gtI!oRzGujRt`X zNV(Z7eSNH<-=KgH7ivnijw|2l5kl%OvOn0~>x~{N9Ep{F_YX1#4nZVBV9cyHr0`b< zuM*}m;AL~WKmNCspTdQRq8Xc=Jly4NVWn(!l+h=OjBYI%KD1gcS^I=qR?BuBWJn-2 zK4};XpUKH`03fBEzd5<7($Gw!e>6|r4dBgr#QqxYEYTd)3ZkU8LRnQd@kM;f z13~wFUzikVMdv5Qt%v#rzgOYi{-~n`XgUvo-%?Rnu3woy)vifYSM0-HK&aPZw-nL= zMkP4#s!rv_@wzejoGFc!8aWaar1svsoO|dQNfmR0;Zyhth+lI{u2%p`+P5=@cTwDn zO1`V}Y}q8)#($B~jUe)6ln8e7g>EJyQlAyKOYVAJ_Tp!_Xr-W9yPm|Q> z)nXecIH@AIiUYvFaP2dtClXkg3gEZR9E5>U=!8=2BxLAT{NLzRG_zL28~iGThy497 z$GP!_Z6hT|Y-#25MXD;Up2t-hiJGGMClGWSyB=7uM6;{TZqn(BodoJ+#ohcRXJTV2!<*})Z>y|$&aphR4e4aeio50a0&i_gq34jVO&(*akH z2^V{hg?#@le~nBGoWT7wnH65_%MGXbr6hli6i>ht;O#SjUb1~Sh|M4vcU|KrIL))W z`urn&C`sw+4oqsh&Ky=BvIX)IS_(12;xE_9XyOvzAL5m|T1R{}cG+FSgZ^Z<1$DLv z4@OYx7>rnN+Ivl}-EI;hw!l-~vMJAFA|vmM0tKMz_*eBL=~rg>oMrWkQu`tP&lvIk zADik}`yA*zdwM62vJ-03g;`6Zvph01@+iqOWF@Ih#f?+xjcuP{LzJV_xco1QKdXI# zIS)RwJyE^`U??nQvo&evprG$=V&S_ZRDuHR`7gV4z!3CB_@}5|?nU^IVnyqFNTIwu zSo@s-*c0Qcb*EOn=WmI`ay)y3TvEhCBg!PVVw4kT9N|W;jU1<9JUFShgcIyR>|dRq zC@q?u{t=odi%FnQBz^<_qfz<|25t;`%N12-7>_`mDF;qU-&o9%h;I0oZEuHBj@Z8? z=E-L`y&SxV;c#`Z2~jv)BzkVu2|-cw#YTTbf}6Ly-_WYWzrvi(xikf{^*BRXHXP-+ zXx6zbF2)&&kCnR{G})*vJtkzt}?I)_H2Yu_?e~|C}k{BD8(*4 zQ%A=xw2&ZQ7@*FAS4O~-*rztB>Z+LQLleVy$kNzQSC3A`&N}Ct5+LYHNAZ3mMGU)k z*Bx!%KP)3yPLu<0W%)O>053@yOSqgTrkGvppr7?S!%oM8bSM%`B=(3>=Oh0b&|L9W zaa{JJ4AJki5X= zB|qQW6wMlca<>&tfmiVP{F~e7S&KK*vir7cZi~t;c7IgAXslF7tEyAm_1sfF8Xf6} z(>%9#K~_+7v;4Z>~L-dBSgqkWIU(pJtRWee(fRj_Kw zUu0fV8toSBE`mcW2T>V!%$lUEOl*qss+HizRX(qh4B2yAN6~`=*YOm&>g0+1xR2t$udkJw)Me}!ekB~sLr$x4I-OF z_N4`5-EqTEX_00u^JX`@V=ma9f`5Hy|Ixu&INs=#2}I#%tHw1F#?+-S*39}2uqN>L zTg!xnM`_-q-fULq`iy+VVe)&8{XB)aPsch{JD%f{>~dOc9;W6WY@J?HzT>rgf?TH# zvs{W_-iX2z6FbC}Tm#eh-*3(wVyGvWnpLFpV3mp)D0L&IEg+P0I7|+^Tq*{?;MZ>% zpKU7tvi2#oTS=!78Eq!7mm?k0Ug|XRuAK<*O)6&ItCA-M|E_EES^JUbK~jvqs-*@y z3pLycNcG5U2nukh?pjK?sGdYbJEHy;n7q3>X_XDm%vt2x%*oPCVJ+1x%rZ=~hgOH@tUWmlPOI$e|z$V8i zI*Gk+0U+6ql(W;KNvFL3rm zoQPEX=-c|*Ao;>6Iqk6&d01~)VwLQMMwrI9D)?Z33sKQw`LLccF&nb}k9~NgftR~5 zEnz??Fq?1{&mHx?&A&U2K9g_Yt?zz(Sd-~)`YaG<;Y#q+DUR`DjN7p<-+Ee@3ZP8` z$yimp2XWU~PIN4aHdTrzClTiqI_+y=E`z4P(9R?<(jkgcjze)cVQ#La@!5)ul2nsl zaL;pLH2uq#KY-<8za+zz{Q`Y#N_zIt9|7Ej%(DDPllx27z7wG42IqZ9*-7E&XQ zIZG|IK3Idw)~QxYk+rh>mBa&~R%mzWqxGBa|DJIj*e_i5?E^X_=Fvp^|6Ma{m^;)f z8X1t1$5cqT%-Jy{92I~C`QQ14IOe#Xkui_0|96P~zhkeWYYsLI|97=;WPspz^5Ug? zKY1*ozvSm_Kwa6ZHpwqcN)FV-)RjRfG}4v}O~^W*RpM=^(LFIv;`&?npE;CIO(x@@ zyQ7SSm;ve>oU<@6G!#~T#wvGElKu0Y1MRF!<0rdRRDhx($t_&tEFX-tffp!@piK{d zOD>y4h#?kHZ19LGY!~quiJZ}8S%E1XZ)nS`^K?+p?5v;j6C`ODz zf>H3gvA4GX15H==e3iKl3gG|9vy1>&c(*r9q3bG0*60tpF~9urByVVgey0P^fYs)v zt*RS-or$>6N=0x5Dik$$=zBYXG;9=uh2z-}y}}`B7I1ihpQ1OltvieorN?pv*vO= zDB`YOox8gfXh#`-^Bt;{^ViDyW8L+gUAn#YBB0d>9685UnLV z{&lYEB`>NbU`JiZy3YfRcmBJ|5VWc&2BmRzlv81^v+=m)H~Q!q!kJG!oSS632KD$9 zM=rna$O-Hm*Gt`~-+rCAk^V(yI2XX8UyKO;}eeuAfYphTljqaIu$ z-fnuTmL-kXB8Y^9n^abFUngM{mo(oiUeG3C!{EcB1E^FDl1jlO={W;sD$GVnnO;Gi zpY(qBpge+AOMHPw*-kV|;;|sK$!48ZFjkW1_;-E#tUp__-^^d4lO>s@H_>YG6U_jc z=Y!KJ;@?5pDta$0lUrecXuk`sMAl)Kso|l>YAHPzPg{F33=_4BZoHOIC&;fm6Dcb1 z9t$MVXdgIVBSBFIbxqZR=u9rEW!Cms_&I+LZTW(@%_%GnM_m+rjry7YBI0H6j){$K zW{TowFM!xuejS3rXWbxa16xMw_75D>?~c2ak;}QJFFf9_FgqIf$8Ax~mnAV1qE3on z4>LO4=POZ7+a=T#Er;i=5)Ay;wFXhm{cX|KCluMps(lm8bhotRu!-lnsvd%J;FVix zbTw03pdRk$=b1^log&=Rc4>1bYcR#QlP1bGyK`Y<7gjrf90Oa|J@3WJUcy3$FVb*C zEnTZavD(t{7aw!m^-wNKQWFieNq!6s6}fKpamH=5#?dsWVaMu`HyqCAT-et2FT#Im z|3`xF-x8c~{mm1$v-uYWGe%tbKv|m}j`&|`kCPc(Ow5$Gcamjv1DQNd5S-dY9v7ou zF<%HXfB#XNOJISlkXBb0R}$UsqPyQeJ(`x(*|w2udQy1?JE)UOcl}?JIOr?uhVeu! z>=;JgG^5{Gy+yflJ(hLcvOea3ph%6Cf15+>qvxgbEBGIg9s+6<#=4PPU4E%Di6GYW z-;7TnNFd|v6&z!5SusC5!iML{X&8|=btcCf{h8NolvqKlq=1LNDXVEAL+#ln9L}QJ zzpZjXrVKKZ#?AFV957w-b6oD~YuabnN90B`(9X{=PJaa3i$ZzGXRzx#VJilnAE^^4#H#p zqoj<3wAtfDk9qu_0}ufOsu-pJ6z(7it&F9@qqfQI5{e}P8Pr=u#`PUb`x{crK0b#^ zM4y-ZLa$#hL^a%A@DK?NW)hzFU#LA59n@1B0)VA4FSy-77VB zul%H=U-?L_Tg~8FWJ;d{0S`BJa0dVWiMiZ-jd%`E8NODOPj6S8YjDLoKacF5eTxOK zkB<<=8=zg|2$dxg1Y?!}IF`MOc+6B3KfkH7t*+=dj=NYVW;u*;D~$LkqmwX43!SRz z+GZgB7vP$rI$S`e%CryMe4MiLT?j@T|BG~z8-!e67enIjAGMFUkFlFvH_-(L26jQ2 z5UoPEj6~%(1+`l5qUSsZPgxLKfdsP_ zwZ3xbz<#c~rI2x5AgUAQF1WCH?sSrQ>|<+9Kb5FJG`c6)W)RE|FrU|joaT@|+KS5W z=G!1{f~^lJers3Qmlu$4+akI=By|V+SLThy=pOcfikx+LdyBdRaTOdr%<7j`|oF&vS`BmGqZre{1o>TMPcO3NSV z!bYP%uU})oOOC@CAnd*)zNQImxC3k@xWvX0i zKg4@HTd97y4$p!>&1>8~z;b;))#$MVs+2&%LnHus;&HM)=QEoR5dV=!;4!Nsc?FR- zaf2v1JyW-VR{o}(&IDSZfx1K;3P|o_v7yf!4b2wRgIcui{;}tZ$H#wFEo0l0vBOhU zbN#$#H{xCzd>{73>irUsVe~$^$MR_om*cuyx@5?2ScF5Y*8N;U9Cf3+T0%Y2wLFOf zN|*u-Gu!2(dw9KDtBK)DlG-jb27s}DD2A`j`QP7C^pKNZ)*r-x*|TrHT4)h|?{&MZ z8kuRUHUR~-rkF1aL&CL4rE(TJv5jK9 z2y>z58K0FVD7I$^=1+&SLBW1AV;4teto?4}oJO%z2df-)-=o%YHOvw|;lZs;j}LNp zZHuDhdhe%$u741NOd}wkrr;$gZ@6lQ+}JRZO*WjF6^0ey$1-!C2^AsTK}eqa8`rTN zGMdyp6AFz<60h7EZyDx`08#=D{nn z8yowFEVxXVP@xm-BAVN_Pm4^ZFY*ISIW3qA#qXJUg83g9#k#^a|G{fsZ9=xCnUL*3 zku-%VcMu|K9Rbz?8@N*bJ0@0-~sj&08Ssjnqn{Qh@n zlb4Gp0be^friF5E+^#Fy8pPcI?KWO0jmdaV9~ldj&w-iX+PyW>_mAq`?QgM~o3GDC z$>dac+AIyXBJ-xu7c}I*L+W@$si4<2 zo7KL$G@$OM0}GmdAZ~Ch|1o;1|Ay|875w{+L8MQ0skCa2I=nW-Bvm;F-gFXxR!hVB zkFXcg!idlu-$YXaq7%EPrt?qO!ddbXdN+0`3!hDS(}aH^bu7d*=-WEI2H z!Va`pJY5r6G@XfQqSL(0wFzgfYgNpWy-!S1U7I+j&Prdg62CojfMwYJ;HB^02Lvh}@|M`TBZba0|*yA)ITcb=<>zy5yuvA<=6 zz(ud{^*fisXYzN`OE^u5$+zYS(O$t%6&4NsI*7ALtHQN`N8jZomF1{s`F|_nGbqVS zZ$dJO60So?|JJ;ZubcJcxN%f8v;=CTy^%j%GlHXPkjfq#@ZW^=Zy}x|!I;}AQrwki z$2W$V_i=hJQv&%Ii-DdzlKRjpN9l@=)grA1N2PjE!-6KL^3~n1mcObB+DG)jis3du zaRkcJ+}m@QpL%<5D$qt8VK6+G89Rw?#c_G?x7pRAA|o7t@@DDK8Q;f-;_@N#AWL6V zVZXxtpLF~cST0rS^R7sQ({HD$0v)N3oLOWiPG`d;rc|nDH1Ch~+c58JjR;Mx1ScE- zI=d^&JtoV;b{ALe6z-Hf?8J zmqWGP3O#|XXG|mly;S~tIqi1S;}@6%Kcfms%RzNg%wM05dOZn$bkO6~g9)KU!v`Y{ z5@n|>+U@}|_76+TqmR$Z4fwJj#ua+0N%QsSH|`|vrqCaw0%Ur2H${WJ6auf2-p24* z37n_eU)o51o2Xk{J|YnY5e?TV`H5EDYLlGS^ zV0%5c$J>0V!yUQ_$d7Mx;Ip2|0dKw}r70}V>Vf9A zwReU&Qa@i_W_*c0FBrZ|o1HVgBq4{5kRSL!_k6(tIxzsJq2GCTyC&IZU%PRPG6V39 zNCZ);oxg#$qb1{xduES&A`*8*F<9l87~HZwz;=E8f*^pDZMtHZM2ju>9|omDw()z= z+t)i#$gR?MGb|`X8(02cf4~kaO{*)Yq+yE12nfRX{5oN1r23M7h0+g$jGZ!9w-EA0 zlR)ZfybZ;sY%BK-C<05t)5MpT`{{cA72z817!wA?+BjvtvfLwxe*F_o?ePfw}*5h38b`0ikX zGWl&CnaDSqQcvl6Z;2cu95wIT%JBf{`HNH8N~-S9t%oNUb-$uU+PL?o zyFb`H*RE#td$|y`^@bskY_Ri~30XMTLIi23BtB+h$`6%|7G!kJ;Te!N0|v=X+{?9* zCPhJ9oc7~oB`ZE~-~bH!Qn`R7s^VH(5{mYqbg|8Of8P-wbnig)#YzD3&1=}tf?azB z1KjCc9%gmbLuSX-iJ0lyUhv})+wGR~-1xa#+er# zE~(qbtZf$~dl2)kHkqM9`)gk?2m72{TI6kG3M0B!4W@Lei}A}fCUbkiMz2?!8Q7eMBq7Yn*qgLQ<^E7K!fF@uwyJ{MjXGq4e1 zhXTnV(I{R)db;i~z)hq*-#45@rDXsFIJOC1y2w}@DXjdC@V=$nvq}k`WP#pWvhGCl zGz0v!aChV9=wo|Q>;E?r;b58knPK3a?)E0Y6%*U0{f%CjTo7k@{ zga@GwoZjFK#((I1>A}D4&gpb7`4H+V*#S5tu}UMB{&o}`L|{AFK=dOpYcm4&;*s#YiGm%1<8(c(zW8(J&Py~ywv8YverJ`>(2Q4+yMZrTi4TXI#0qQ~EWdt7NtT+^ z=(^rx%o@hSk7yKoQlG~E7Rv4C4jg!d1cWcoIpgjhgh`1KuS{63%eKjm3lITbvezdA z|Jn3UfR&#f_IK|;KjWTEWWCDPCsbf!kX(HikIWgdf4w7*J43o$Og-`J=h?<$%so;X z)s}8PGyTjVpyC_;;p9(<+dT#FfGpf^DisvcU@guorA@?)W%Rd#Jl#PI3pxZo zw^7nC02M=avm+8SiXp!P$MIgW#vhC9%Z-T~IQhYXd695dJCSeqr585J!BhSDDvzL# zc{dEP828jYkx?H0<08wJb&2>%5XSbZw2BjLMt{7R1i~!)@^9!lk9#Gppr`kY*A{xw zC+m#yR*WZwwdS#!jo(ChF49c$I0qkBDP&b{{m({zv3U!AP^7-$bgAz*octQnbWwW5 z59EK8XkXO%28U9!kJ4r+>U$vr0gVw%uaQPD z^*Hg+rOC7m$5o3~sT_Q-tB!VIJ|NA*NtrLK9#)lr`O7`_ zJU3yJmgv<5v^+5dZ(RS4Gwp@Yi%e_9mDB->o018Uzgr{O%?hkmk-0-|YjLk=&O!9O zhS}$zY=j~QSh18*KUggWl8##&Jlyib+bCDeQ4iYz2jL3TpPCz>wP31`^@Jw}T@~!7 zzi=uR$!rRe%ic8p-&eWb5JvpJKH=qwOcK*rybO%QtO@14jF}W?XQ6ru@(1i(ubFY`A`0W9SMev5CEYRo2MMo7-2dOao?{P7~EZD2+jt!^ep7T$d%gPr`Sz*|T~dU|QnrZ06wZSUv;9 z&6d71=^Pc!uay4{m*js_39M^dGdRYW6PjajA8VGZ zM*RVP%DVVq1U=;&{*L1p|R;* zAy|+f`e4K1`k^v#ZypHD_^uX(>!Ay07dQDa;JBpP<}A#LIPT|+xJXyuc7ZwY28nSr z;^!F;+Re8wj^iD7<)~XPIs1#XeL`3^DlMGTeJ%M_4$8e?>jZNIXovCPuFnd!Z?Hgp zXc^Y+B8gprb+=<8$Ye!_P0+%dGt5Oqs(da-b^V%-|Fya56>@#Z6@2{>7knMO__dzB zkvyP{twgwx&+GsJo@Y4(9{n@BR2=k^X6ayl9-`l3k|r=0aVw(zgkvMmlZlcC;pr>7 z>~{NwD;)J&Un^`bM8mep zk=wHGUW_7?&RM1_t|jZC;&9IoTT@98U&8Ht1r*qhfs|`p>x#ah@V|C2O~@;O`CT}) z(x?8l_)dgwfQ?3B1%=eTJNR5hb?aUvTAZHC(h_^I?t&9}BO2x@lu(d!<~d5b$SWN=%ZUQ6Zu^wkx-# z7C3%N8ZLg9)67%lJ0(kDVo7gPBrx2=MvuzGX&#hUG+MCqGa*;xa9E3|Qbcm^${o_z z0I~86`V8yQJGfB3Q_~-Le|CORZoN?ny~up=>~{A-*5!EU8DgQ}@n;LvMS4L~MAbfj zYTLG%)TkjH2(sjto=g6ww>lJv{jRbHD$hkr4j3QCa;STQHWWqI$kf~lf`BJ;n9k%; z-W95FG!Y<)=4zQC3JW_foD60^t31z3r2m;af` z`J_b1jie4@?zO!ZUPnDgwRQ^%%>pHT1gmE}U->Ihgg>E8lA>g*4ICc4kuJ&z@ zhq$_LVx)t~B&ev(CBXygDM9pUtByk(=I)S1A~1ysMdIsN0sno7eIZ~uK=k(*w8 z3bNy-Put74URXi>kLt#jRU2|y5_m)zw)wgw%;P#-+Y!7cv!@+!ZYH zZ>W2kZ?{a^DidmAXGSp8hhWX==Z^(sn{|UQLV7~GL?}$P2P2gqmBsZ;F41S@UboAU zuW78M>$q`$sK&8RFn*Cl1eFLY%xDl6q;G)GBQ}a^$rT+~$-QTCuiTZm|B&n!fD*6V z)R@wM8WdVLSk()r1z^tWfdTulbIX0;4J+QoXwO;y>-x!zxK&S!mBAUGi9-YX7L8z* zse(%T`kcQkf?t1x*o!|r2cRE>6vr8*@L8Ob3IP$cc{>VKO9M7)z=CDx!wC~Rn&IGn zhj)brKOE3&@Gj;Xl1=*@(haOyfX~j&=2}1xuO+;8mf?qB)uYR!0t>9EK+ImUSXE5 z*ONKhRcN&HM($-fB%K#T?L>WKToWB8Dtc-#1G4cY7-8cxiw4byzE=78-2J&GZICt* zFuBt8Sny{w#E0oMAgVR!%N;YSN{S%!X6fWN;aoE>@CO?MkY2I)nFz-k4TFEk>oJ0S zJw+e%RY__=#1N|m*K+?M#~84<+NuJ^qLdgX`^7_3OAg~VIi@=K75%K3{`QKlf5cYXDEzK|trnjT2KyR49PgG} zGyQU@dKA{T=`E{GBcC^#&r=WBp>M=(LY)>_-v%VlklxsT=AOPb%m`EfbqPKX56?n| zs2GSCU-zLsAFcW&Yt{x&FOP`#rPIkKuv+$!`9hP`b<6f$j}laR*KoFNJ1*#dM`M$) z;kg<Yc4K$h_T5Ca=pR~ANzLUnu^xVCAMj*C$J&(LPe|_Z9wp1}kfy8y} zJ4bmycCTJ8_H%L9xe3#Rkm=ynI3_Pt<*^8PrCCT`XQL#B0WDYsSvZMsSR%b{n-LxU zUVlG`X=n4~@)oDoZS8-g4<=GTgsKd~%=sOM8RyKub#(j}ek|{4DT#Km1%|#Us`YAG zpf_YcC~;yFjd|27Y%e_Pug@lJuvVXp2X3mLu#z1B&g@UJmq>-e^W7n~v1ZUbR0b6` zld~|_`(hYO|A6^l!!$45`&rLtg<%NY;W31Mu3{Q1MSL1Oc$mnL|2ZZq@&TQ}m1vKK z$Wn*KCReysA+GTrtwvK!RHNeSFJFSA=&@&UK&F6~s}?z*APBLC^hCUI7=)+Igi`MX zYab6wDVP|;0u5fEU(nzBzbt?mdqbli{~p*}5-<^WQS&hR@(}ce`GY({{YMapFR+9s z-Df(BGJ%}M<)@aO7cbY|+&^<{9{N}qL-q$W1`1xSX~2c|6raNdg^+|0YUa)IAqH_v zxDR7n90Hv#D#@43dyJko=(>qxKl&1O3GLi90F5h#22cBLa94buvfMlPUZL8TT|C|& zz>%&Cc{nk+YKb*V(izn#KVxOe8}T%LE5 zk~3}C?=(VfG1|{y`}QD)U$X?{a&jF1&ikkjRknNn6zPlDYJbp~N$$p(0Vw=Z$Aicw zg=1n{G>f7`{=w3Q0Wk6=%dO27f17Mu?gqJo%eBo}qm-Ai_)s?FVyy>fg$|Q`&6{Ep zHE16AcIREa+)vC>r}@Pw`YRp#Anc?-XNM!DY8x)`X ztQyY;{WCt1{c8gvmB@Awk2KSwHZ(eF3hZmrMHe)Vm%IUh|9{=ih z!0WQ59vJPvwr(ecuArm>4?1}u^9-3kUp;6=0@T%r?3Oot_nV# zJGpwk-k-QCZuLLn<8xjpy-7d{?U58t&s-)t<4U}DSvr}k&WCo}9Diq=tRt&v-O0V& zM6^9QNuuo9g;}Tfh5h~~U%mJUg9>6!nToRl^orneIzRY<9Jr!-^B@hrULTxyj-i-y zp9QsXo=GhIW;~tupDp%Fp9~iCrnw6vbk#ia4xY+rzDBa>Y_;}}SrG}$O}=sH_1H@F zs%3%r4=VjJ{J8}+Zhh=~wZYA0n>%Bum4D|JFX-`X@m|I=<=|uIQ(J%y{>c#3oCnPL zCB<|N{kL{ux8;XHRgmsIn`@5eYuR&bnO*Gm*Ts3IMThr`--u3$%PWbE%fZo&PR=^{ z*4L=d%~(lJbj#LV$@4wiS2!P0i%aKz_jmib04v<>7mlw z5cB5C;w0prtDd`ty4jKl+Q(o(B1`B1qrVt?kJ%)^peOIw_v|T_HN|6M_hBw^`3d(x z^$Opzdu_!0*g8K@(STVuNl<>&HGJlu6C+rUhxNC~EWTwW3G?a&jWn~VfTfe0AQXNa zp@%Xh6O#($9m3g6407R>I~5@s?|>Z|WUWHi=ZhT-#OWLGvY;WgTGSO?nA(0u2-Vq2 z)r3LKw0cjm`nO#kA$FHMIdTsgIz4PU9}-Z5b1L0yjI6Yx+p1+SCe8Pl3Xk!6WKx!* zb&JT;N2kjBXD5r8yHXitkNWRU!sQq&EjiU&B2{!V27Du&LOd`rwaKp^CtT%3s@1*4 z8P=BDmCy0ihgDXbDvN)RcVd%yE0mgx^ZKQV!jpht*%o9Mm$1D$YIw80+g+*6b?M+U z=5oD|-))GdLF$Lh1b~;|SYs{fAg6qmnWKnS^odLaKX`aBpiaRr9PF6}pQ`dxrz%^g zlsg_w|8xq(&fJjKG)JE0ED|PiS&XsBwo*-treV4F$F-il?q#m+de0(=otJKQ;PCJQYW_h>vZtn}gPnk9Q0Z|<9EQgiOdJPMDC0=XW>z*YJ9#dd2Fxjjzj7Ip;NnSMx3P^Jee*dfyL)$>Syx(X#qebpOEr z5q$w>-4`@dey_X2`3#xCx4Le{|GUZy3*E*g5c}%N#@N=i`^0C!5!A4%tP6cflIH$4 z!PsCeRp)#1;~l)6hDxg-uMz#*w_NB{iwvF=GVS8*5`o#vs^%@)Opl{9$-5Gwe{aot zr?4vMbd-P8&(}yzPrc#gBnN&i+^o&t{^e{zmc?ynqYBr>)h`)P51fh(3o2#uJDg~q z!Nmjzn@dntwycqqKmd)2?ag;F281A4SR`6DIEHeJ%)>~3w_6~VP7R+1xwrkaT77A= z!4ZIdJUFu5?D>HrRcjtuISX=Sps$2n;qBr}{}C(@@CHM29?gMtyP46P6@dU5%wiNf znlzTcPb-`G^_rW~Bb-zAD!*W602Zuw zL_2%6qT`ml9Bh)R#reMbND3ani=ERc?q7CfFmIU1tGG$)@-C%x}$?z9K{3s$qskT`7YP{92| zup6Ee(i}0vhwCG33N0eRjsW#NE}#X(UdWhQ!L{yI3|wYrmO|X1iE2i|bLYb0g=B(W z4ktPJu?QxiXmBD>;J}}LrMsjXjxcSgl9wSo2Bi?-x*MzlD?K7lj#C~-)18%2ESe81 z(!M*qn}y)=prJEjp;GQXVHK132ceNTOgwzrz1M5NYe23)(%`p`|H#8j0{sy&oLB`< z;Pm^S9IoJpez%9;ICr_FY7r2T#NuBU&lk9-DWRaWT|tN$--X*0(a*^ zlW3P?CB#ZfW+N`k4S@yrU`_)}km<-5eR^mIl5)$N`>owDMlsf<8xW&Ww)Bk@ z!Xk&2^w+S`=8LcCdPxmZ+a<|1@_Jowr!;sNS0n5RGD@{rlD!~=IbFP8O4j+^w!m)o zwXyq;PBG#gMIX&%A;M6?)SnGKQaSlHRz8Bh^0vf-D?VfObRkbYE+e%sXC=X0l`q5B z4?bq0O}fpBHgC&XCY%1Lud6+2OUhVkFFdJ!e2Y3)tropP_QSzwKWcOH0;@-dvjivz z-&V&MQS@ug`#@q3V!$uODmTHq5zrIR#cIGm+J!{s?uCL2hIefk&7m2UDihO2A~P#N zPlt0W7o&@@--L=ha$oY9G+>7U)H#$Y?lvwcvcGNW4-O*J{FMVQDn0v^BwS*r0`2ROm4xukBdsua?Yl5V4wY@ore{V- zssw~J1gdhl9fGuzW399jbfMQ3zj_3MuhC#mGxx%O1r+3+=la3em~`la@Lci`l3<0R zNj3E!0@qL>*UZn}5`6;vK^FnmalIWxUN0cldbWk|tZ^<)o}hg%`5mx=PQ#gv#&+lY z+df;h=9g>!tu88&M>o?u5UY_yH6}TzETUi zL~WHtw>B8NSn+ackdq)%M7(UA;hbfeeK#M+YvjX1$g0U`UvfI+k>AxLoY^%A7zV}c zrR%vnPFFqIx$A+&Cw*)Ndjz4|)#xA}GL+;i}XxR3tjPOtcNqH+Fi8rDsd?b~RQ|GG)d5MAlsX8ZBk80YASIb)-rNOYEOHB&}M!GQcZp(9YOF?M9|<~>@` zh&V=aoZRBxv}iE8ZhD&x^^M59gq^>kmpFX#=fY8aqdwYa3dEcQh4gxd2-%=9nR6k0 z?E;J^*+@IwmmxNI5(OiW!bzDA(aNz)cTEtrRYW`GaOt)zwC$;VQhG^C zQv!=K>WE;)nXsa_mPg{Z|wpUDa zGb^DYDGw4%AJIGNP}Zr&baH6^QsK7f)JDe}UL}G(b3k36a^Z?T_Xfe#W2ZPllX$b^ zow9Sn@l%|MJ2j)0Ny&l*kAe9*@h!A<->w3SV__FRw5iIF00Mb}IFxeqxo>|_h-~yz zeP)>N?@!f7f4Useyo5PK>ljA9FHKOQec$>_PtpL499ip#I3Y;^=W3H3ZZm#)Zr| z*kQN-av1!7v!efnM>ml0D9-u@0>(sp+P~=jUt)AMFaU|AjJ~{W^f>$<0K@Y2KiY+A zwfVxX4U#?m?;VhlVcORINE4HW2hzBqQ>w;f-(g2;ro^!5Q<$K}SQG*| zcQ8{q;0B0W5)wocfpD!dPyRqH1MlPhsDY2yK!#e}3mSWSGTFaZqotB1>_3Lv>-=RG zUxk0Z()IAHtjpG=0y(`4Al2!3FF8%A8WoCT_=Lw!?NnH+nXiatouoLAc-&G}=S)2I zeAD!|^n0KB!O$l;^jMmA*Vb(}5bR=1BI22A`H!5u$^ZcS#h*niL@AVNKqoNXktEE%fof=yEP_^OTXcv= z_!p&1>d^e?-iYmmzL?m0a>Nk@3d(`MOmsgY3>7a=4zgwCR>MfxA#zGXNA~WhQKi_Q zjwQM_FPJhUpsysDJ2Vul->LSmtflCv(>W+V#eB+!E+I$6l`EqMxgo>ku%~5`4}mCy z`+=B*K)7+l-fM^mb1OU)4HxKjz1!Sghufuw4|{Rp=ail z%CF=m=X#I3TekvPn{i%CGx;Bwoej2BQ}YePM$VEe`UD9+pCMDn8f_`Nwsyy*!JPM> zXst(WRqxwm3HtGTM*x(}F)j^t#@dKGl4k>)OsvI9%iKd0JN_}0iut#JA>S`CY+=I# zgS~FN?+wvGiPd_ww^iZ7fr2k|`%Er}U2qnSb|j>j{U;Fh0l_swxK_Dd>&><&3)MeL zj>$Z)jp+7Uzt9K3bm^}d8}bz7v8Z5Uf!X4^B$=*)Ny)1Qb9K@rb#)vemDfwh5^J)> z#S(y7Gk)aXyTm`>yXTRAUDj;zf4a}^f5KO4ELNT2jZ*E6ZT!e$5en11@mwpEDgoO- z;fnIdeV2x3l)KGnl*S{c*sztv_P_b$at7q6p6QV1*T{QsJQpBZ&SXSg^hAos zpSyH@qb7eEMZg|7t*tM#aFD;O6{NdsNac$kt@`Ylq^)B4RkkrsK<5uvlK%)lu&5L@ z4Zo<)e_B#)9R7(VC`tTJPGj8lkr^n+p*slw?)pn>OkI{#@xD-|&h=97yGLeubCv$P z{t9?JYvQBANc}mv*YLrQ`_N{COXkdXR-d5WXX!#nb9DxnX3JGJZH7!}8#4ZjlP*5# zx>tdodP|g^F|6KW0#v!kDVw7XV1mJTA@I~wS4uVWdVhVAwwEgy38ri-hp~AksQXk& zjqkL1U$sxR1EIAL#%nC9_2opSo3+g|+i{3V+R@a*1{7s$5tA)7YqpAMSgGwhmt(!@ zPUz+Q#M5x`2bt|V#X6*lUwmcp++h5)RxpVbyKkBjU1=-iVcohkfn|$BU|ddT z+=$Sa4|aOFlaL;w(8%8**+SYxToaj0u?we#m&I3TaJ7LB<$Ts@FzXQ#U}`oO%=bPYJO$?wq8Q)+`(Q zMg2gKgRcCPF9>QF_p;a=*Hge@@V{Mq2@Ibk>6*tQw-1z~f}p~~ zGdlUHr)=S=4whua zlHjP@tQpl;foG^fR*!bjN;ih4^oaLJjSp-!urwU{OdeXd+d0MU(LE9Q(X3Ewm%3*_RE2yQVi6r+dl*Lvd_>ixTzJ!=f|D}^@t@8g>(Qwx@45WzYUMaSn z3}rv4@33M#@*nxGcy?&KRJ1~_jj3x~^M+{|(M&t;H_D8Guzg+8Nwh|5T>u_zo!*qv0neyxH5 z)9Q9Y5ayZen98E&A$F>?s(_@0xRu$7{k+Tc!1)Yiu>F%Jdgwn&rey-O)gMtg1dIQe zG-GMsS9bWxLFp|X=={6OnD`-ZZlM1d?mM&5}Pw zrYSK=>M5@7CEy||XyynjyN-lWWqvaG>4z%!B?K(vaXVBjoxqZ3Y2!RpMO423UeojM z-u=bEMly;}GMw-g02?Pa8EmC0C&)>60UN<7Vw_V9DCnb6|LRHI$!G%OqTBXG;6vuO z4!muyM3VU6CzCz_j=pSncR;k)3(eh5u#~Sd5P>bNpfwGRV{hR-d>(6Z!sK+JI`i9F zP#DarRH0!s-gdjmbcgaA7-+f|Y#h!?qz}UIIa*K&UOz%bc*~uFZ1t*X2Rp>smY^z90sg4Y|M(X`<-6w@{_I zhUYjT-BUGblU`aJQAmGDRT5@s6}k8-6g(wr@JBp`>o|WxxZ}S>jx@UMi?BbG9DVx5 z5i{(Ec4Vi=UuMCncq4dH2=Qnvnw!smI-XU!(74Lq0E#gWOt}*)N@L<3H#kK&&sdcP zz-%V&+#V|wfYe^t&3hq-J8)G#@8_k!<=*NOP=eDU|3h}qrq^T@EifsG>-W(S=`DCF z?{9Z#M2w_?kManp3y)l+wdV9{-bFGg zg_TN9MdV_66v5=|tL8yhF{oV^|4wN#KBCcC>7diJeDKmL*Y@{RV*YFwMj76ljm`)*SE*P2hlhHy&P>RK`zJeoS&0G>nq-p5~k+N29wjP5rOPS0Dy z`HsQEdeOlw{JYOw4HU68eM7F{=KksON94y zT+84=ux1$l29R+aC2~tyd%EhgwAuk1Q)dgwc5N!`^Ffg$eF@x3_ZsmllT0FXmCC}C z3sVq!FAJajb@OJ>Z#ADPtt2cQ_Qv9B%VKL184*Nk>$C7N6N?jjJR*f}WNv%^$}0N3r zaV!*ToACQH<<+~@ONd_;0@5{~eGYO^ndPRP9Dk7AvR!bpz*&5xZn7Qt@R^Jg}mMAc+*rr=-zPNCmUuTRD z%;3HK>YE<}S}7m+rkpYUy~^5?jg(G=R|$Sa`-k_)(%=Kkv89L zjmo2r)o%q$p_{?l!trv*7_LbuBV?_CCP60!A}UH~D!Tr=YyyA>-aiQX>+G!eI$ouA zwOy+azJHN1`x7kwV-A3!?jo54af zYAMyw>KXiCZpC4Q&JDBppipkr_75^~L^|27x%YM;&g*>asCq|5sFyfMD5H}6mNHpo zezie9dphx>1ig%VcARZk*^BEg_w z4Cwulr~;P9&qKg<#GVnt08y9Am^R!8eibY zQn7+b8*SmA02ESGvWp*IbcM8Ql~#wwmp=Dyh%CkU2R8iprn#~HOAV3L6t}MmqiPP< zQ0uA1PF)XJ{RE>6bH%3DJIlc>`v&08e44HST%v8vfu6}N;WfzZs&Xq4*jkm|u}G&} zQ4_gV6XReWL%3K5@K!l4Sf{n`erhKG>a#I+z7@UMw`1IOo<7T47E`qO-$!v-kh)LJ zSSWDBWQ4?~Ps_)T!o=6PWG4V1&=7G?@OC zqLQSI*iU*eN0NPRDOsWD$4OBZ8{g57a^(EqYtz&M&9jG=`_2USk1c9iwTQo@{yTQ~J^i;9Do?VK7=a@R z35%WFI0OO?=i$w$kG(@qxzlPwUS>AipA*j80jj`AUvf_O*OzbMC zyut@0J>wkXPo~F*%mTvMxjW8X0lqshn{44Qa4?(+mHr5?t%&=tRcFkeaEvpb?~f|l z>%NAD=|=wM<)ABCG4ZH zqTQL67kY#MvaOs8aQ>&sDmkdhiN*EV2z?1)7bOBHCq;_(Bg*W6-e6pRB390by{nSD~6{waTwFBkYw?XCo~N1{Qk2GVee4)Indm*F;J zF>|kMszFdyc^u9BVV)*{ufqgWFy6yQ1B6*dPMnsQlYn8aJ>FjVtIpT8qo^Ra&Fjmz z9gB$`(g&?Qb*Y)u%`t?ChvYF5Mfpysjq$k8TZ;>~ z4yUyt?AQ)=<5!Tc#mo7(q$l-~71=G)5+$_OmCVks*HCQwXIb|N51*gO41d4i;_}^w z|Cr|Qvqum+3rO@SDs$_9SwGt$+cmus(rVK{3!Di*Qk7Yv7|=!X7TwF3x<~59x%SP_ zoK-8l&`E9Ap<6D})=O~^0_ZJXJ?|5dRe2{tdjngh!f%N7+qDqU4S@r_yJHMg z*1E4WqBnIo%}ow^L^JJhGU3$7{R~!uH_Iav8rXfOzg`x$ay(lKB6znq*sI6e33OoY z(5Gd+W&`dwOiMrut0p zCfCF#>K)cKGHp%tH+H|Aj7B1(c()=uZ<22paTfyd)P+<0EvG+I$-3vUV}(-TlC67^(2DZaq=qKEJt;rZ;`N za>gt=lf~qA{UjQEccKluotP%CT ze^2tN_#n)~;!P7Wr6o06hdBZNds)F9(BIXWQFs`(RQ5Uk?1|nim2^GcU0w$pYv1un zMiTF}Pp^B)2T8d^uKOFFZ2LQ z0hap2S-$pGag}XWd)#yk2Q$swol$S5Tx6*mw9dYpoW|`~(e~HtwV&sR2YSP9-Hox% zx*mxc>WpHO;?S@F_(MIoSjS{@{;Mx57~1V0@wk0`>Y;sq7^98Z`?Pt(lcda2Ce|uBJWtidvssf5rn5Br!D;bmZ>adw(4FT#Foi%J!W3ed}eg zw#=ptkKvT9m}0EynN+ki{@tvotElm%q6qV_ZLa03uJGcaVkGtuQv%Dq2O+C;_P2k5 z)SD!sHHTSQJl+1;$phczW!$IJP&zq{HK(?S2fmZq0b&JZwqYMRtca#|aPLZF$p1K# z|2DgEOaNMZOve5cbXeQ$!Q?NRs!E2n?YQ~Li3oqDzX*Wc2R~2s( z+=Uo~0Pv{G32mn+J`YRIhc@G&70mHZ?^&gp$;xb!rp=6m+D zkoK+rIFCL6njt?b=5aVFtB2mNVIsS8?rY($^MU>qc69ZqxD_UR5Uh~IHOuT)p24y5LcBXMDvJ6hyUf_wf^Zhmaa5nQ4H*rwxb ze}PM?RGzc}g1pYy4|O2l+*pp{aB4Lj9Ebce6O9`S+%+1eAF&x>foU&c-{0h6Ed&sw zt2Z4Uw_dq&-y?fCe#h)>;f!YWcUN3MifnvG99r{8sPr|4<&i(HsTrdLY7V;|J;|S~ z%%bcjG3%R-{Fr@*`bLN5ibNv{a6wwiE{JSm3=S)priWMit0OcmOk=|Ujb-DVircG9 z5r73!q@kz)#aMKj9Jdy|$aaJNpcqsm2sw|!R*=ie?usdzr78nxrgxq{Ssb@scXVB< zjnDj0mdI{4Jq9NUtk^jM{;Gt0KWCIY%GKs9r5ZXqQCLm9_ud%*#5iPkXrUDFsV82= z^s5R20Z}2=9vQ{-)Ni6cCrjA^L@#!Rsz} zmZ_|gFb(kF0d0;TS^mx^Oh2G!*i#;%7Opq)P3^-h3xJhn&4yk|j~SmsO*MloOs19D z*P1!Q;Vk6O_}OD7Ou=atPG12vlna_0&<`msu60m6L;`gbq=E%b! zL<&v5dDq~T(ZlB%?JTx;+azi2%MD;#lE zj?>pQ3m?jJ#K`b!qR$WeZwg6g_%uXNZvgq_$UhDLN~1~FZg(!lXzWK70@GaC|B%k8 zF*o6Nz*7IVbA;Q!&ohT1X`p4GE=vEtLX=dx(2Q@zxzgCNi#CHH=Ymob|vyIaPO z7-HIO?ya*p_82=ZdI3OPvVE~9a72i96wHYfl7W@&6%*wbI7Ds zH)(*OR0g2~#xtP!&B&&5ZXBN6elm_~uFZDL7}%swIPw`LSAG~~ zdxgG3qYFQ(^4`DtmR`0jirQMbwwY#W(9wPa8mmZ4mBb32lkDfxUb1-NEU@kijua-? z;%+|=6Fb>IjQyZXeIViy6tEf_)Q7LKZ2Fn{haJ6Y!A7RWbwpY5-Pl9-_VpyNh*QFX z$hwfJd%0Jc1z-|DX?FDw~B~@ZQd& zY$bk9a1=LQo+u*?zVit-xmQ5xr~IbfIXE`Y;YU?}L3onlfwG_$BKEz^M%AB#D-+wN zZUbBoRl|dZ$GMb1O8n03-UBx;4?bJ{&9K{~?JUnSf%$na8(;l0SCvcJBhEL;#6!qn z+#gqGE^T#O;e*=Mf!^J3y&scSb<0NF%8kOi z(T{vN9`D`@vz`}!hbI5+zjp1GclmQ{)-Pm{7_pNlFcAx8q$&`$@dQj{ryq`NGEQ+d zutf3}_1*a|#tEl%9|BIOu8#od%Or$mlQM{Io*N%>2#^i+colzilBNi=%>Jct7da8< z`d!v7{%Kb+EtMPrx5Mn!!e(apl3c*tb!Kfd0@WT&D(nyusBl|A0!Q z3%yK*H^jlY$~uY7w~=Ct8%&nmLDX$_2-7>M<~+78Mp_pUdl1z@jQ2X&aRh-antWn@ zNTCRGCjEN6$j5`x#_D1g*d7yB7I7Lzm^OW1npN`;8RD-83yhak$3p<=L#E?kN$k#n z7cu-2pX^Jp3ZI8q+?7wi<+%vuV;8^dRWz0ewXNr~QONt7-E|H8J1?HPK zVB#^oiEmSy)#1x_GmLGs#^#kpE5MS-TbP&A9>d%fpRU5uF~N%__vb6TeAge)jqy4* z8ud=yiu0H9#DbGJ63NgAm0asCQ08eIg>uQzieZS#JtlzA{s4-l5bCszxRzy0cHD+)tt{$eJo`$RT` zyY1}^Yre@Z{pL42%x9@myik+gTl%cvtxF;d`W|@pZP(ebi=TcQ6SMq z&`Y}OhA1ttK*r;}m%G1E#omd(>rEnUaoT{5@mIJKx&xctfhBc-H}FeXq@BI{O5z1o!*z5XAC~ygNq)u# zH~>0&+{=DC4p#jPFLetOs@#?B2XM>XVk{{FnMD>Tym=b$a-bXn15VudKkN^g6xVZ@ z-Lb4d)|6Pae|HECv91piSQjljN=%^4`9qi?W zb|^kWRJgO36QL<6%`hmDz^R2oDxSvq+K;gTmDwCCmIic2ofnpX?tqcN-J^gz)Mh&8 z)W+a<8TAO>x>5{2L-0aypW%lks9&x(AjyKdOi+d5FVvxczWu=+<9Ys3mc!MF^5G_S zrQkB{bIf-OFo6>%_ury4>C&reEkQn^7E5c|TmN5};0X#&yh&|Px;Q^|{S1_=nH+D1 zL-oM6O{WrT3z08FT5iAF%KGT29xS75`q~O7ycnT`3E!PGPkFN+-Z-+&6G1bnabK$;9%y=4$rN7<94p;{+MHPCR zbCyD)vn&?p0Z6Y(1-@VU$P`Xxg4<&V^zMZhLaMNM9#3mXNAGS6gzw5=Kh<_MY&^lU z^t>i3*=beJ)6lBZLgx_VJAMCQB@DBN-*(qnu%3KP@3gcf*M*i1XI!Vl9NyFEG8nomQKu@=t5gk0wW+2#J=e`wu8o?5Gs@~L)Io!V1by|)JgryL&9 z+n(LTaJ1b7N|-S0-AQRDUA~kHciEfE(ufTu22x^vYA0Q%n$WG)^PqkcEU4m$Nux<- zFtUe#hdXxxanb7#eOUO0y`Lj?XJ{kFno-B9Z*A}i)cnB0VB~QzLF_Ea^V~~F^VssB z<0Qc$;c~2oGo)CHEeM4biXf`08-(1)++?MaQmqE9J;I8mUdO5{Zgn&UU}BZMCti1D z8inM&o4oXWf|Ns<8o9!gb&|Id?cqIM(-GXu`!KO zCjIdAZA9(r7^=aDUE!~C7z~uJuTU71IL78-(1-cceD^!hbBZ2X!fu72?j3l^f!M7{ z68GQ}lf3lYSpuLL!Dw$@))DaBLBZ1XLmafFkEJ@ z?#Msy!$w-1DRYhvBO-f_tB%QgVE>9Pgf}!XBr|RJhhbjrFhr)-{|3F36g)4^>{WU_XZ_6h zQt=iqj{p1Gtse+q0>YL5QY=58u@To7rlNy;tHhX}q98nTO(G*N8jnDaS~lt!eBXps z5q46{R2*2wOLClyHTGc$S)BsX$!WxH*P-a^@z+5+C+=k`@6s^IOgavj`XwkBip!XN z;bsy8+d1xgh)Sy)tpU@bH}2lA?Il`4v%=HD|EdZCrLjDEx7`MK1nP_-bhdmllaQ>I zu&soiP8a2Pux5mX6w>rwH{!bU9%{srK+GX(Xwop^fHvKiO5CQeAv&5+tFRELBAX)aM@gAZ zfCTaFhPb?05qR5M5fMnrhVHXcItA6*qi~9ja&WBG?J&@U+#?|Xjv2})`p4?N8bYXF zJ_(AP!+iS5<4APC)(Frxv(+Zyg=Ec>Z0y?3deLvv<~8{q>I#S8>wzi*>m&G9%-bJ! zC;U-jeQvE=g+=iELNExtj8}jEg^a&n)is96N1|znduYK`F(vDZ+amoH&gBLF+}tOa zp7=VZ>($6*sV#jZzTA=Gy@dFsYL~*XOyolTf&_wF2*vCa&i3 zN?y$Z#^vVYEVnrL6j3oAZdVpU7^gpn^bpgPyKS&hwM1o-^nqu%D{OcDX9JHJP!hG; zxYFp{;e10Y5ZVOdWqZ^k^#}weF~KHS@=)^(Zsd!C0iR{k=KKUKwa)t-QGr(0ugZ&$ zb%%s@U}TD~^vE3Aqph=0-!O@YpOZz6^v4^=Up@qkKln=eHIF!lF716BkL6r$orWhRJeM^bS69W&6cf<9Rgz zYi38p%X0ru^7uGNz}do+^*j{iaREhQ<&{^^@5?Vy{5gNc{Ww9FJFmUYMtBl0kBi?+ zPu*8=;D;|qHD>h&qSml`<6&rMUZ-y>tM^9&ZUe%--4xySHysgLm5PWH4b8sa4Mb3r zCW*1S$+CD))e@R3$^HAz&vPlBMpm3wb2-874&y!xhj2H55X3gV8u0TRk35F5^S;>{ z&!-4<9cQfk132x!Dn;l$CqeH3MS2Y3R(8j(aPe`_{4nlK&dZx{w~?wrORkx{*tT&) zJgNOa4;(_pSiWR|tZ3(Idf@HD*gXEQ;E*0#+i)F-uUQKxB<)&G@2bFgCJ{g!=h%3E z^Ug}IIUihJV}`&U$|(T`3~mQ5-;fQ4`W*L>FzGe>5`G;149K6Gt}^xEbE3aV zdd`=2HqsD0ot9mLe^*-?cbR14gRJz}@&A}e{AcQ1xvPduI<>FLWT0@BpqrGr9&#$t zt-`|cOolephe^Lsp~0VBUS3$7bG$>n0*fyId*o^KfGLrGqtqAKLF;?q(EH!{JX~wG zC_$IMOIQH_u0Xj@;+o=LV3y)}&VRe!w}J+~M+TNd1E)hAp%LO|Oxx82Rq>R5Au)HC zIp=Y^0V|4-NCF#4K3)8%P9EUd1RWsGm>v@GdTn(MlSnzc^e>&AKk22F;rO2+lSSJX z%mFwW^@S(fm!c6?ex8DFn#xED*S$M;NiSzzuQG9{ihb3X@1u{32$Fn0T$G0>Z;+<= zq+zLUWDjzq!+hvkltTP?zT2O{>xEs>EyA`rxSaxOGcDJ>DUjNW?Ndg60aATf76}Pxq0Kswf#JVv$LNo-+nb_nq>y>h5 z9&>ozdQ#u*k-u&YW(tFA&Q=TBcR&}d-{mhuvR>fydbl=0XL>n6p@Y8*c&SBpug-7u zPWoHpBHxT557iu&y1dse&Q~KY-;Azv!_eAgU3yncM!dV)Ep~W{fC46qR$r%;O6h!MuO@o2TZ)YTHOOkS2NX6bH>yf<)L*_g-Ca<4f|3y zB#8sI7c?uS@yac8C)o_gWZN976;`sZGn-m%jx5OK9Xo9TF)-U5r1H)D_jU>$%UdLV z1TD~){Aw?}27_;Y0R-hibk~BGQBZENJ%e#XmqFbtE1Xh(-uQ>&8TcLAHiy;htnnAe zv!_$T-$j$_ZMP$yml5}c$i5rO$S{WSi9EE>q7f-9C>)l-g4nE7Wj+tB+vhh!rk9{m zVLqdMHgvJzRq-Kn&uHES6zr2B!e}RDH{Ss-gJ#5mgu?$?Ogq&kr&g5=UgZuP_0S0U zuHZKnLMygRx9p7~$S_?n(LEnyw5xdo14tyCeu~(9`Sy}yH%Z){y`xpwLwvEPi)8O* zX5RwGCOWbiKoxCh|dht+OfJXnUl|E!b9=T$zFd^Iqz2A61Ok_O`N>33K>j2 zVlYCq8}{yInaDWD69)7!GzOkOag=D1gBM4=cu(3=LEz2#*N|Ncnv=CnbGZjkBnd-U z*Y$~2rt0=8*&P8o>@Zf*>erubwyiy*=$;6EI(kUt+}mju7k{5Y1DDuT2#nOzOZ~hZ zR(Kp)Rz$maRIuX3AF+Ue<52b`Ol_Jrd|c8+w|HTE%dQiZ)!&A9UmwiQ%O;ar;!7cO zV8|ZgGWjW$2i4fVum;B!1zy(3s%im-eEc#D@E9cj-1{aL0|sX>kgVw)&dUp#1W!>& zBT*gujd0Uvaf_BFjqvo9KmYTPi%Z|34NBPBULdU2o|lq(797b|#5V?q@m6l@mCn17 zg!v6yVgtxG;w$|NY>01``c!(Ro;bsve-hxz{mY&SW(D#X<O;%Gtk;W(Q%o^NS?*=JXD@P6Z+Kr^gM1zR8 z$}3%)kh(ljiT0N6z-XKEWNq@Jz5@cnL_pcZ`?~Hs#KJuc&f2z|usZy}$AG7sK-?LP z*a>jq=(7o7B{YNLH*dN`kLiMR(ES&FX_^2kSyvpUFp(`MJXKa~gh*s-|2nxQJlXy3a`e3XpUJLKRaz~dohydamcuP*(^-WXF32it#;)~j@Ic<3Kr1OLo+N4U>S zA2-`vIAFuVuu2wDkk0a!{$Jl4Bu5Jii5Q67oJMYc`0teei`*ay89p?m^6g#X_~4%O z|NJt>DI*Xt2mgu9(WvSFUT%m$@WsE|FqOkQe2==D8e}JoLvhhRNWwll3xA)Zk_%>x z!v(KSQ|p&he$@Hmm9PuzNNW9Ped+dF6k>O!>L-X~sT4Zu^IGI*(0%j5xR1-(rYN$1(^1Q6g(?GZijXL?G`fx*) z_u@UhrS(oEqMY3E`Yf!(H50pAsSHD8PlPM2z6EYD%qF6K+l(kY4z&=nmM)$^-AAQj z9T7rW9g040;^AZt7h8fxab6X{9UfCh4b(=W*VkGfSqF3t1FerwKmI^Ya&dEYrm^(S z_>^|oQKX`QlR>IH{*2Mw)IjgXM8TwCNPAhQ(u zufp#t%^RA!R{poUCZuA20mhIl^ox$UD50F^?0$LKeCWB=JZaYM)W)9#qa%n8MUXjA z+_yoK@c5!!8jj3VNAsWj42O4Eh{iXj3E z3vHIWG<)e~6ZrByRt?ut|$O)ES_Pi|%5k<49NDP40rh-FkD+f1mSggLHaSQ?27Xt$a!g zorOb4a$39EN@0uJ2~;&jb5bgkYHjtop}KTxCJuZm^u60Tt4-|hTi?ZIQRKC_7DYHJ zMw5A(POSR^h=sah&vO;_nw1K+HSBCCc^W4EGKRjWi925Z=IC(ZAV?B6zeGVPAH+=% zF^QI$mfe0B@<4en*G?lztusaYz?@Hh?cKvG!#Y+25b$Y%H`MEWy#E)|Uu05#+JcZZ~! z=CbpQjo9c(f7+0IOKDX~z@H)78eS!6Mt zbb!EE|7FH!!<;tRQzjiG8h_3HKcJp`)X9RlC;3&+pO`%JX}hPBBD$S0!a_4 zx3Un;_r1FO{2G=Gis^0i#l(EEma{6B>L3V`kYe@2_s=|5DjIs5$O)!gip;7uro4tj znl5LNNtAmG`SVN^%fa!i47r0RNyoJrI^IrmdSF=^Eh>wr!6ppJVhDU^MtS#|`564C zXZbnY3b6|AdT{;5_@X0Wmn?c5>6*)wP^ttLG1${`ZmmMqOPF<{86oJCLk`ecB2Ocu zOM5d19rncaCO8N>r+BnMD)!S~`h;Sbx8N-?Y-cVh!-GWm#2)CTlGH-%E-)jL@CMUq z;Q3X&#c;;j_xaYmc&JHuqmSpMJ(e8IKCWu(vAzuGoOACaZY68qjii3;X?k2nn}BP? z9gz|20OcZAv~TEQ+ARLq{4z{hb0?{sSfX%q&w|OA@i?8?ELR5GZzq17$sjf~fqje{ z1LOSE1~tY0xv12i@ef}ETY3eO>l5AUMTXzHgZLcq4?u)5vr_7nyX1rV_uN?vVOwxP z!O=P8JHMu(v5Cc)6#c2JOI^)n4n;<89Txr8rk-VD&Bi}huU{jkG?^a|oRtNaU;d(C z(P~=K;-OP*BllW&(T;L8k$E*{NV-IvuKXxbxJA54bDI&_BrIkz%Rq4kI8fcSxVGrQ z^UPhCX5BB0YMJRJwrls+t`mMMG!+mHyfDH2@O2P9DKD9rR8b!YHS)JERuG%@?m&JX z5uSk>rny88g6aS;`8vxy8&0~-I30$;Qg#{MH`PcwHuoeH`ehjA zVlaxf<9!4qql3t^3Q&g=uwL|x(I8mlBlK*_A-v%WfH?J*yZkYwDM|wl1q#Lpjx(JJ zR=L=3{cO<_SW+>j%iUm7kAsZQ?cj~pEZ*cG$dCrmaSsMx(bx6ZHNJQ^P1pzslMTf- zZE&W#nbcCI7OpnH0d?Mvz=h_q1c_-Roo$dM)X4HnsB!v_jVbo~D;#cvF!?2qh(h6h zL}C^<&BFZTaNo>2x}l$Tu62UoG~b>dM?Qrn%hvFaP}101nC-D#XgtSyNl^fd8xWw- zFsK@+W%r>%kcQRZZdv!1&#dA(;BE4da}n&pgM@;2KIDDd#;t((1lPhs%#yIJNhz_- zU-x+ey8!IUMha!{+7YP)?}K1TIoN^5${m;6W~tj}iI7_EO*0$vT+tD*YvkYQG+qb= zpD%e_n!q6+OtOx^q_o+EC|RkTO+MWRwFDJ9`RH0jj6L_|3#pGN!Lab<@eSd6ik0x) zVu;ww_lWDgg_GX5Cl2Z1Tx5DFv%D5YNtu~q_JDXFgAISLwZPK~hkaI+H^eU_qYIhB zoz~rH$ob8u-@kI);_1TkOD@@p-tgpz1a$5Q7ffsOKQ!8tEZ*5|@P|$J_hAl@T*2+V zmGFpR`!BSG`Jg+wWea&Vuzq^;TJfTl%o1GJb{HXXQ#5a)xTf?_xX7;mTE5we8!T!J zi2&Q>m`RLLr`pp_*#?r#Rw#QIwaxMM5Q3pVo^S48Nnx(UHo^3d(Ms3{gL@ zrqO!1nqJK?&Q~bijI8lpi0^ucVHmeX1xxA?RB?204j(>TD;Z#56)F*bH?o~gystP2 z5DPQ2TGyB9+bziF_{M1kz0oYT+t^hoGMJQNYePKAf&P2uggnTKfD0zkk3!m}*Ewi> z=1ED9ae}{ZtrtJC5Xo_2ELMm%yw3S#5NGC4*1&E~7)vBb&%QaLUf#qx-sU-JvDGLl zxXISSBLjGqkB@d^(WkM=h}Qk@y+{6tOq-ff(n?V^(&uRVZI{`AfSZ{SkS`RX(54&z zc@u=rfe!n}{dX~=#F{1?HgCOtzq%9p%ZFjq_mxsx9yYJ?MVb8l}PA-G4qgrrkivDd;}J`AFZt}EjwIIumw zAwbr~TpiC4W5)D1V`Gj(oL1Z)l485Mf!&hmIwTchqFwNFCq^|Zl4)|H&Bb-0UtJc; zjLwD$1L(OFMoLeX(nXebO67$7K~vpd!F@G7XiN^r=as*BJ1^STa!`@iGMV`DFws;1 z_o-gpd!(N60a-sgbfG+!#TlrpC&sVPUs5z##PvK|+?JzTbrF0+&PhDY0C{bi+J~=Y z;wDElsPH5kx4ZXwK?^RB5gItmv~v<({&SyyLzBNv_;9GvmI+9k+Dt1a)^3{-pI;!v zi)6VaI@ff*O}nfTL#^oL_Tk-g2fX~DD(#e*a}>IqEtH-drg7X5pE&c=w z4i4r@hANzwgVMx14f;^I1v-N z2gXtBpv_P@U0>zZ$vXS)efB>0-II6keY@b^bI#gpub*1AYSpS$wW@v&exgBVSuGTO zRN93L7t#&_tqg%PNA&TT&wQqf9okTqjWqZ{zq>*#^7%?I+?`%E|3EAZ`RNQAJ%;um zZ9GE2$n;<;`C0!MCH8>D{x&IiRcP+o){<;0$wVujf z_8jmWyRV&SqRQ~;d^ebW7s6tmgR^09PVW3S7WwYBf4nXEK?ID^X2frSi^%t|TP7Vnvna2$m z5BwRi#15#7GwaOt)KkApBbZtkL-I|dBMW*#>=tvOwg40;2Sd31pPpS%84rbIwz2S5 z{!f1DlU=CbHjFz$HJl5Jju(V`Lua5dssalxV}g(%D=8;dsEfN>|KXW7Sx`ewm6sPl zd;w<9AR#2*Oww*b1B0o*`s-&buQ5g;3_}91*9JemTSV9zWW}zf3n_K*9c^dq6lX~5 z=b>s!VMu+kbMDTby*~&1y6dmYJX6ot1@*qLKm`Pyxqy&kca_-*NmGD0(E(id7j%YU z7U=rx8z_yHT}E$X&y6i(Fv8{#lrROCa{!HoN_9@wjXY&|89UOA^j&{2^b7TU7wYUT z>^4%c+ocQ(IzgH7r7;Ul$}9uFsXE{>cH&dn4*mR6`@KuWyV68kHvWNz@da}!cD!9^ zEpxnL*VujQ;csnhBx)fK?OI#R+EBOUTN@dAKWwC4@rqY;HVC2F>^+_TbJzCIFL^U( z>@<@fTGXE_m@}?Zbf%2{Snb;WIqhKdXQRXu%erBm3oY&LRe>F zyv5Ld@Pq$MYeNgVM%p!pI=Q>~@1C*TWaS%%Whtq(4BD+i77&YK5uXJQqp_23cN-*6 z<@cpdyFF5DNv%&l@nlXM7Lpe50#=50G}_`1U}Sa^b}Z^5xImhna0_wNknggx1te^3 zbQ4tpEk+n1WjQnnW8mF_R$HK7go{3CkA;u5Xltbk$3PqGYOlTaB^$3!J>SUO{4gFS zGXZ87uqyz4fyPd!@LlDRmc#HT84pcL3oOXboH?`p3)_kI@u9z?1wvTgdmvO~Dg6@0 z(2!j!CR2bexWlz+o?+65i9wC#)l+M`{1|$lw?`YxoyB9A%~i=1sa|(+-j5ZyS&`T2!31EmYS!Hc&m!m3l>Dpr2Ga3(!*&Pzy~U5b18NTVUK_x6-bnAm5FO1K*C{$XbMKklU=h&peD0ihi;YTY zIj8V3ryVwPG{gYUbeBgG%U zy$b1Z!=jV{1q*Wq7zH7zrg0q?4G@T3yZgircx@aPQc7CxGL&Ed#rTMkQZSuWEUfuX z2o70B8J5K2y}qq1CPo_Vv6K$MA@lj?%0Bh5faQL}@GqFo`uYEa#eEYEUGy^;!^Rj_9-oXSxi)Qs5U|qShasBs z&<*!MhK_w;rH=OGV<8+9Vx5H{4U22fs$Hz73m8J79b@S^+UHi;2Q-JSr{L>f|9TpT zF&gB8#JG+{wf+DuVq9_5#aIfx>XWgQ7OK-U*fIy;S{i!QW-ej+$taTXT?nV?0>z6U z7SMFzl;3j(RjqMq+wKr_lIGjAq3?6so<=MMo{pkY(`0}_lE$!7;MTH!f(2sGSFn1E{%~^EE;JXH$@Zr z=N){bodfE{$NKcmXszWr)xKD`(v8)eV%W!Uk`Wx92F7UHTr0y=v=9PFx_{vt+J#mb z7slNT$-6^4v$n*py2n1}w!f}ARUcPSJdUw`2<*Ry5ZcL)5wXfeq$VK0Ka26p!@{tv z{eJ(yzhAraD4!*KNQ!M$YqyU!vC3}K>N_T?-npPJmjmFdkJq*xQ_tJH?RUh9!95qS zt^NC`pUa6wWem^{f7l@*3Qf3k08^O@81h(obITaYXHK;XwR(1?LvyM>2Z!p~H4W}q zwYPJ*Uj{)~9{@U?3rErKxph^(Z8Razm{mD?>GL9j!ZslA!Cm2ITi#ut84nwuxp0{F z&n>&3k3fU(?xWxRy6X3~ah*$NTuFDK->SR)9BW76!n}r?+6=Vs4t;-~#E^K7Jy6Fu zOK=A1C}4s8V1U&)n*nDyvs66$X~wZDl}AS3e&X0Qa%O|5a~+q2&+W`NmTV^-1CBnZ z{96y8lisJL{Rc5{Vixp+Og#l;Z7BGfnQ|=i1YQu3V*SVzo=b2?j3^^24F)L_=hg^guciS z=cEfZj2-#>GUO^B=@U8}OS2aYEEpKUz_Or^AZAHkFtA`?!N7un1p_Au1EX$hC#e%l zTNey07+5f{U|_+(m5zaBLBG-|VCnyYfdvB#1{MsQ3Jfd@`l%Skr4tJV77Q#HSTJy< zV_;d(uXGAn`oCac!N7un1p}u71IvPbDu!|C#DakZ0}BQg3|#3Lczy(EID4fbK}bUP zNV_Y!?qwgsf%||(F%o#>q`NKYpF4(K7~`&OcTl@iep~;CaI&ObSr`yj7tOeryB~mO zADB38b8a6vI&Ec&`QbvVHmFv=k1oX#FwEWQ0^ZC8@kX9_;)yPStv!dbE^FRFl58Y26{pq?a`OJ%cIhFr8{~WqL?zE@54?GaPau@P8 za96N=ammWIY$xKGD>+@C8v$?fPGI*YyEl4)1p{LkaCf|W%FTf`?!s99qewqZbM7ec zaoWpprD@!Cv5GLvqg{0kYJ}`gI(+-v-#(ge=s{efw2qO0=i%k<$#-|ZdL#1S#udHd zk3;~ntV;}u5NJ1wbzQQ%;^WrHRR|z?SN_~UuP}oLv!b_ts0th?z|og#&Ots zF86y!iL-t8WuN$u_~HlnuKx7-wncQ;1zkA;H4#b$uxa6;haSpwL3UceBO~HlJ`pM2SWpZYU&p#&ppT#VT1K)vh0i*Und5 zRa)oWA<=ht+;K+^7Ub)T_90LKDqL?WZ$z}opfB3ud4xjD*y`FL&hg`qU+7->%2#Hb zb^?O7I)@j39l(vc#C48Pf0-6L{Upc;$Jd2QCdT1lP{!+39-O@FWiRi}pZ|}HpDvDesG73<5n?f8)GIq8h-Ex=^*bvy!CG*R zDmadG=c({@{q@(U@N?L)btWd}e1vvPx2%{`Zr<2u*P0EDvqT2Y>pF2GNVNyn?xO zpp9q*ePLKFooJsq%SHk{7`vNqzB#Li-ADJG?|diQZtj|g{qsLG|JAR4C2_93@Gl;- z^7^oC?#MeuTmAC7d7ryX?8{;rkwmBZ*YP$;; zE_9(%Js{MMwHL4W<~P5Y@3|7$xhVky4dVxRS@9j`tX~QI!8y8BpJx$THk&ksGqjIp z@R*mr^raj0F*X;Ef^LTR$E*JKRow?Z@PR@6xA=`+cG4PLz%ii=ow;&Yn)ac!*y(4w zv|0nuq4V+Lrx6afi*Um^Hh5s+R{U{v9^t3EM;>`3=a`L&ao+~k9cAKup<-WWHBRR~ zeJ+1Tn9>bl;fr7VV$Q8^eB&EAchO3O{9eC{=cB_2_q$Fz7GGizM1_H`U;>WPquRuS!I6$6m*#>M%KfETNGzVn@# zCY~-33s)@PK+x*l?|%1++T*s{Zp(PN5hP<31Yb?a*yZ9#i(@PP@QYsbqKq#s0~Otk zH{O`BYxU*PM;~3qqP2>NmSt-{5aLoj>JwL)dRiQF?UHuaU3X=^n276l^{qfS*I0NG zN7AU$sD>iK(JGAZvfb6UdZ#{v5v@W3%y`A(Lc_1VI=>NXSB&d|ZRLt(F8;Xo!gUyq z(8((xvy@)2{51}mMlUFQf@5jz4^PqopQZzMohCVcRlmoWW)-yRa z{}0VMbSg$RdWhgME90Xdj>h0K7K#inX-;eJHu%`bKDLTTf;r!fSM0>r@wdG<)n0s1 zJKpuKcV#uk?6aT!Y^If+jrNI0Zq7XT;DbrKV!+3ulyS+uxD99TeeZi$AN}Y@voGuy zlx3cb&BYM1XY-G3bTh_3(9jV669LUXYH2aM;iq_`H6x75Rw4YXgt{)c=bn33`l(MJ z`N&6BS6y}0>ea7)bv;i0i&r^Uhfnwdc#pY-SL6Bm?p(Z{uM6mX385<6)vDaZBR2=N zSN!=th(!)USj@F4gzi=B*4Nq2oH?@!L3jQ8xO^EsLl-+5qr$)nEIc|UF1d3L$P|3N zz@WxXHiOUCx%1hxXA^0$o2YE7koGgpU=Li1XB*$xqGrHrL6qR%<_ z%7U7IQ)Qy**hM5mX1p%V_gYKfjc^s(gXD3>@(W-1LS@_d ztOZ?S32o+`O&vI{3;O68dQ9Y0UxkDoH1!NfqgtT?|I(Mflq%QQiPqy({l$(dpQuIgdi9^$MtfLnD$$98|}^7*Z`=d+ke- zCV~;J(|y@>Y=vbNpBZpdf}dD`*Y*oF_UI%8xXf3y61(pFJw=~$@RbEM|E9|P(T{(W zv>gn#d8_L}(!WTL|CZ^ces_FQQ0nS-K9!15{|lz*Kt5{bbLT#tuRQhC@3L-mQb5g5 z4H?$DNx#MueyKp&Qq){=OolE)h|5=ZzyJ*~jMMQP9n<{A1myi(l|Y^waW2zhhI8$A7Y+Q^yyMp9%_J^?Tc= zbs~hL%!2RWla4#*0Dj^aH#D_5?s!TF99;;&NhOon-Y0KkZ>i*)3WBD&<`m=}K zy;eA5LWC_K-jD<{$@x(TDhJN9ElR-q?P8pX7yk_zDL5+u7W87`7qf4CV2I8yomXqa z>t6S|JfqskwC5l1fB*Z_P{O(BEq{MY+62^squ+?kx!I*cm1#no6m!evKRE{oJ?&y% z@0ci<-EW@w&Du9~Zkcn&7L$6x3;v>uoq6_2zku`7F>sCs*du@``aH}y%qdgdec#kt zq@8(=!4O`G&P#|Ld$*+nc`VTUWgmR-Us9ODh}jCX&|hf8KxZEjyP3f;_pbKG5n5Z! zp}+4!TZgFxV`an|yQe(g{oLn1*M(+cv?xN0@Ubnl3(3CQ%T8e%eQQ@}pE|;BXvf-S z9{4_YE*^$%R5rK#0}YD=!bluLrI2X-`1ZHIo%G6{$EJr3RjAB|UOiNrb;JD{bHThI zG~Rmatz8@uWZT%A*ev#qr`s~)C@a?+eDUsk?w&liZ{K|`zmIbMP<7^Re5^5$VnL6y zxs5DkpumV=A7Jn>ce@{L{PnMYy^m_PmdUUpjw4d4|K20t>)IWgHZk&GymP5Qk_8OV zj!U2U+5nF<9gl}qa|@3>_E=h} zmg>8Gb`;;k5GGwhcn*N6oy$<2Q}lTld`*>!rtMx>r?-IK0Oqw1Xz74uuH&3IUtI4J z=HO4?(6}AC#iPKx_uqeirqR||@WW1`9?$w5nmhZTt#)pfT9;605p*OpHovqFtvO;a z4_kl_<<4!d@o)JFA?PsB$C=;o?6bkkPU;=fIAzf*@h`fx17 zQalU|JIAmr{4MN`>*lxt!^fQZ+PV+(y^b?@Efkm^?HE_OBS)SN*0-Y+ysG@8_#9o( z&)j<^83x9|U4W|L6QB4*7uLPW>`f$0f(oUie+|OioH=kW1I|dnpDv!q`c8cexVaTn zzLF{{z1@L3n}$g308}^zK8#fII#bNZ1T`t%`qsB*9%>&~{W-fKp)0>soNZnD0>Y52 zGf8P4JU6&QgcZh3**8ZJt?DieKJr{r8>ya@N8QAik@UI^xRq6#Fk0up`bZlvr`*C} z7}Oo8#uyPaT4w&KPkt)f{=fsz3Li8JjxvmS0elT<9IC!u##X;Dr|^vEEKbIkA1J_V zjZ@XtE>uM;MQc;^IR{_WzxtdilaN5A$PMhtC!Va=a)EbVO2`96-*r47tr&khHkGf& zTt2Xk4ya|7Ma$tm$3Ey9&T5Q}voWhWmC5}tEZkH0)y@)nsXyQGjyrN5p-*l_KAjUP zKMYsBp5s;Hoe9mqp}8}cwwhw{t2+C0&M}^al&cdUfZFl#5eDW5x4Jq5&cxn7XYKkH z288K`XAB*k(e~Nx&uuR?HeP6qT>Dut%hMp-v_xd#8H^|0F=C)I zjSCHHaMrkCB#~($#jS!E(h5?&aki0G@hqX$6K68(`hAHV@+zdid^Z;Nbh&9QDp_87 z&i#Y?1@{b=@5)wQ?C!HXmenlgS!9L*L|V|Z(3FpLW1NX^)a%Ea-~8ru8|pvc-co(^ zew?wU#d$wp`#XFjvwrvtAI!9D<OLcVZ>Rc`_tZ`#O&C)J}=S48&Y-=$8 z><>>7UL4vF*Tza8%FQQs_G>ztLkF(#MeDpdSbJ+n;RcP@ShL1lJh6Z@9C{z3J8uKC+qpX9c z2p$=mjKrz-hoGNL9Ksnd3jK-&FyF_E%B5=CTvXtt(hV2eA^wq#jemXoSNhN={?C$} z2S5S$O0?HPEY7)Z;05>#S}xwreX?+DPS(}0+~8Q_%NK$};wcv7RcLJ5qSxQ!7$)7G z;XZ`IbhE}wj2-&M>(Ns|Y`)g{^*OX0^=RXhCqp}TxIwDpa$l!S0-A)_6(n;X%V?3e zSl2>6mT#AIZViPX#H2>UD`24pNGNMRGDZ6&DG+yOMAEF zol6JCs-+Q3Nt@;Xy4^Nk^-15%D`OHno5^Cg&7Gs7t(HCu@1fPn`7*cf1Tyoh-XH4N zRD0nCfAR_D@Rp%^#&8DTgqt~duX3LYx@qxW^^Sek!rVTG*Ij@xWW0_eXjki7uZ^t$ zbGh35JQc^ndF zN6*kNcNd?2`k8Zf=U!I=INu3L|4QiU(#I_rSmjjo;MzHW4M`LTh4g$_2*vHX~cfrV~nBI*jr zb}Se4D**3H7Z(gH7+5f{U|_+(kz(NVZhMauO-o@51{Mq~7+5f{VBmOTU|G + + + +## BN-Free Binary Neural Networks + + + + + +## Reproduce + +### Environment + +``` +pytorch == 1.5.0 +torchvision == 0.6.0 +timm == 0.4.5 +``` + +### Training on ImageNet + +``` +./script/imagenet_reactnet_A_bf.sh (BN-Free ReActNet-A) +./script/imagenet_reactnet_A_bn.sh (with BN ReActNet-A) +./script/imagenet_reactnet_A_none.sh (without BN ReActNet-A) +``` + + + +## Citation + +``` +TBD +``` + + + +## Acknowledgement + +https://github.com/liuzechun/ReActNet + +https://github.com/liuzechun/Bi-Real-net + +https://github.com/vballoli/nfnets-pytorch + +https://github.com/deepmind/deepmind-research/tree/master/nfnets \ No newline at end of file diff --git a/agc.py b/agc.py new file mode 100644 index 0000000..04e2099 --- /dev/null +++ b/agc.py @@ -0,0 +1,24 @@ +import torch + +def unitwise_norm(x, norm_type=2.0): + if x.ndim <= 1: + return x.norm(norm_type) + else: + # works for nn.ConvNd and nn,Linear where output dim is first in the kernel/weight tensor + # might need special cases for other weights (possibly MHA) where this may not be true + return x.norm(norm_type, dim=tuple(range(1, x.ndim)), keepdim=True) + + +def adaptive_clip_grad(parameters, clip_factor=0.01, eps=1e-3, norm_type=2.0): + if isinstance(parameters, torch.Tensor): + parameters = [parameters] + for p in parameters: + if p.grad is None: + continue + p_data = p.detach() + g_data = p.grad.detach() + max_norm = unitwise_norm(p_data, norm_type=norm_type).clamp_(min=eps).mul_(clip_factor) + grad_norm = unitwise_norm(g_data, norm_type=norm_type) + clipped_grad = g_data * (max_norm / grad_norm.clamp(min=1e-6)) + new_grads = torch.where(grad_norm < max_norm, g_data, clipped_grad) + p.grad.detach().copy_(new_grads) \ No newline at end of file diff --git a/dataset.py b/dataset.py new file mode 100644 index 0000000..89651ca --- /dev/null +++ b/dataset.py @@ -0,0 +1,139 @@ +import os +import numpy as np +from PIL import Image +from torchvision import transforms +from torchvision.datasets import CIFAR10, CIFAR100, ImageFolder +from torch.utils.data import DataLoader + +__all__ = ['cifar10_dataloaders', 'cifar100_dataloaders', 'imagenet_dataloaders'] + +#lighting data augmentation +imagenet_pca = { + 'eigval': np.asarray([0.2175, 0.0188, 0.0045]), + 'eigvec': np.asarray([ + [-0.5675, 0.7192, 0.4009], + [-0.5808, -0.0045, -0.8140], + [-0.5836, -0.6948, 0.4203], + ]) +} + +class Lighting(object): + def __init__(self, alphastd, + eigval=imagenet_pca['eigval'], + eigvec=imagenet_pca['eigvec']): + self.alphastd = alphastd + assert eigval.shape == (3,) + assert eigvec.shape == (3, 3) + self.eigval = eigval + self.eigvec = eigvec + + def __call__(self, img): + if self.alphastd == 0.: + return img + rnd = np.random.randn(3) * self.alphastd + rnd = rnd.astype('float32') + v = rnd + old_dtype = np.asarray(img).dtype + v = v * self.eigval + v = v.reshape((3, 1)) + inc = np.dot(self.eigvec, v).reshape((3,)) + img = np.add(img, inc) + if old_dtype == np.uint8: + img = np.clip(img, 0, 255) + img = Image.fromarray(img.astype(old_dtype), 'RGB') + return img + + def __repr__(self): + return self.__class__.__name__ + '()' + + +def cifar10_dataloaders(batch_size=128, data_dir = 'datasets/cifar10', worker=4): + + normalize = transforms.Normalize(mean=[0.4914, 0.4822, 0.4465], + std=[0.2470, 0.2435, 0.2616]) + + train_transform = transforms.Compose([ + transforms.RandomCrop(32, padding=4), + transforms.RandomHorizontalFlip(), + transforms.ToTensor(), + normalize + ]) + + test_transform = transforms.Compose([ + transforms.ToTensor(), + normalize + ]) + + train_set = CIFAR10(data_dir, train=True, transform=train_transform, download=True) + test_set = CIFAR10(data_dir, train=False, transform=test_transform, download=True) + + train_loader = DataLoader(train_set, batch_size=batch_size, shuffle=True, num_workers=worker, pin_memory=True) + test_loader = DataLoader(test_set, batch_size=batch_size, shuffle=False, num_workers=worker, pin_memory=True) + + return train_loader, test_loader + +def cifar100_dataloaders(batch_size=128, data_dir = 'datasets/cifar100', worker=4): + + normalize = transforms.Normalize(mean=[0.5071, 0.4865, 0.4409], + std=[0.2673, 0.2564, 0.2762]) + + train_transform = transforms.Compose([ + transforms.RandomCrop(32, padding=4), + transforms.RandomHorizontalFlip(), + transforms.ToTensor(), + normalize + ]) + + test_transform = transforms.Compose([ + transforms.ToTensor(), + normalize + ]) + + train_set = CIFAR100(data_dir, train=True, transform=train_transform, download=True) + test_set = CIFAR100(data_dir, train=False, transform=test_transform, download=True) + + train_loader = DataLoader(train_set, batch_size=batch_size, shuffle=True, num_workers=worker, pin_memory=True) + test_loader = DataLoader(test_set, batch_size=batch_size, shuffle=False, num_workers=worker, pin_memory=True) + + return train_loader, test_loader + +def imagenet_dataloaders(batch_size=128, data_dir = 'datasets/cifar100', worker=4): + + traindir = os.path.join(data_dir, 'train') + valdir = os.path.join(data_dir, 'val') + normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406], + std=[0.229, 0.224, 0.225]) + + # data augmentation + crop_scale = 0.08 + lighting_param = 0.1 + train_transforms = transforms.Compose([ + transforms.RandomResizedCrop(224, scale=(crop_scale, 1.0)), + Lighting(lighting_param), + transforms.RandomHorizontalFlip(), + transforms.ToTensor(), + normalize]) + + train_dataset = ImageFolder( + traindir, + transform=train_transforms) + + train_loader = DataLoader(train_dataset, + batch_size=batch_size, shuffle=True, + num_workers=worker, pin_memory=True) + + # load validation data + val_loader = DataLoader( + ImageFolder(valdir, transforms.Compose([ + transforms.Resize(256), + transforms.CenterCrop(224), + transforms.ToTensor(), + normalize, + ])), + batch_size=batch_size, shuffle=False, + num_workers=worker, pin_memory=True) + + return train_loader, val_loader + + + diff --git a/layers.py b/layers.py new file mode 100644 index 0000000..3d5afab --- /dev/null +++ b/layers.py @@ -0,0 +1,141 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F + + +__all__ = ['LambdaLayer', 'ScaledStdConv2d', 'HardBinaryScaledStdConv2d', 'LearnableBias','BinaryActivation', 'HardBinaryConv'] + +def get_weight(module): + std, mean = torch.std_mean(module.weight, dim=[1, 2, 3], keepdim=True, unbiased=False) + weight = (module.weight - mean) / (std + module.eps) + return weight + +# Calculate symmetric padding for a convolution +def get_padding(kernel_size: int, stride: int = 1, dilation: int = 1, **_) -> int: + padding = ((stride - 1) + dilation * (kernel_size - 1)) // 2 + return padding + +class LambdaLayer(nn.Module): + def __init__(self, lambd): + super(LambdaLayer, self).__init__() + self.lambd = lambd + + def forward(self, x): + return self.lambd(x) + + +class ScaledStdConv2d(nn.Conv2d): + """Conv2d layer with Scaled Weight Standardization. + + Paper: `Characterizing signal propagation to close the performance gap in unnormalized ResNets` - + https://arxiv.org/abs/2101.08692 + + NOTE: the operations used in this impl differ slightly from the DeepMind Haiku impl. The impact is minor. + """ + + def __init__( + self, in_channels, out_channels, kernel_size, stride=1, padding=None, dilation=1, groups=1, + bias=False, gamma=1.0, eps=1e-5, use_layernorm=False): + if padding is None: + padding = get_padding(kernel_size, stride, dilation) + super().__init__( + in_channels, out_channels, kernel_size, stride=stride, padding=padding, dilation=dilation, + groups=groups, bias=bias) + self.gain = nn.Parameter(torch.ones(self.out_channels, 1, 1, 1)) + self.scale = gamma * self.weight[0].numel() ** -0.5 # gamma * 1 / sqrt(fan-in) + self.eps = eps ** 2 if use_layernorm else eps + self.use_layernorm = use_layernorm # experimental, slightly faster/less GPU memory to hijack LN kernel + + def get_weight(self): + if self.use_layernorm: + weight = self.scale * F.layer_norm(self.weight, self.weight.shape[1:], eps=self.eps) + else: + std, mean = torch.std_mean(self.weight, dim=[1, 2, 3], keepdim=True, unbiased=False) + weight = self.scale * (self.weight - mean) / (std + self.eps) + return self.gain * weight + + def forward(self, x): + return F.conv2d(x, self.get_weight(), self.bias, self.stride, self.padding, self.dilation, self.groups) + +class HardBinaryScaledStdConv2d(nn.Module): + + def __init__(self, in_chn, out_chn, kernel_size=3, stride=1, padding=1, gamma=1.0, eps=1e-5, use_layernorm=False): + super(HardBinaryScaledStdConv2d, self).__init__() + self.stride = stride + self.padding = padding + self.shape = (out_chn, in_chn, kernel_size, kernel_size) + self.weight = nn.Parameter(torch.rand(self.shape) * 0.001, requires_grad=True) + + self.gain = nn.Parameter(torch.ones(out_chn, 1, 1, 1)) + self.scale = gamma * self.weight[0].numel() ** -0.5 + self.eps = eps ** 2 if use_layernorm else eps + self.use_layernorm = use_layernorm + + def get_weight(self): + if self.use_layernorm: + weight = self.scale * F.layer_norm(self.weight, self.weight.shape[1:], eps=self.eps) + else: + std, mean = torch.std_mean(self.weight, dim=[1, 2, 3], keepdim=True, unbiased=False) + weight = self.scale * (self.weight - mean) / (std + self.eps) + + scaling_factor = torch.mean(torch.mean(torch.mean(abs(weight),dim=3,keepdim=True),dim=2,keepdim=True),dim=1,keepdim=True) + scaling_factor = scaling_factor.detach() + binary_weights_no_grad = scaling_factor * torch.sign(weight) + cliped_weights = torch.clamp(weight, -1.0, 1.0) + binary_weights = binary_weights_no_grad.detach() - cliped_weights.detach() + cliped_weights + + return self.gain * binary_weights + + def forward(self, x): + + return F.conv2d(x, self.get_weight(), stride=self.stride, padding=self.padding) + +class LearnableBias(nn.Module): + def __init__(self, out_chn): + super(LearnableBias, self).__init__() + self.bias = nn.Parameter(torch.zeros(1,out_chn,1,1), requires_grad=True) + + def forward(self, x): + out = x + self.bias.expand_as(x) + return out + +class BinaryActivation(nn.Module): + def __init__(self): + super(BinaryActivation, self).__init__() + + def forward(self, x): + out_forward = torch.sign(x) + #out_e1 = (x^2 + 2*x) + #out_e2 = (-x^2 + 2*x) + out_e_total = 0 + mask1 = x < -1 + mask2 = x < 0 + mask3 = x < 1 + out1 = (-1) * mask1.type(torch.float32) + (x*x + 2*x) * (1-mask1.type(torch.float32)) + out2 = out1 * mask2.type(torch.float32) + (-x*x + 2*x) * (1-mask2.type(torch.float32)) + out3 = out2 * mask3.type(torch.float32) + 1 * (1- mask3.type(torch.float32)) + out = out_forward.detach() - out3.detach() + out3 + + return out + +class HardBinaryConv(nn.Module): + def __init__(self, in_chn, out_chn, kernel_size=3, stride=1, padding=1): + super(HardBinaryConv, self).__init__() + self.stride = stride + self.padding = padding + self.number_of_weights = in_chn * out_chn * kernel_size * kernel_size + self.shape = (out_chn, in_chn, kernel_size, kernel_size) + #self.weight = nn.Parameter(torch.rand((self.number_of_weights,1)) * 0.001, requires_grad=True) + self.weight = nn.Parameter(torch.rand((self.shape)) * 0.001, requires_grad=True) + + def forward(self, x): + real_weights = self.weight + scaling_factor = torch.mean(torch.mean(torch.mean(abs(real_weights),dim=3,keepdim=True),dim=2,keepdim=True),dim=1,keepdim=True) + scaling_factor = scaling_factor.detach() + binary_weights_no_grad = scaling_factor * torch.sign(real_weights) + cliped_weights = torch.clamp(real_weights, -1.0, 1.0) + binary_weights = binary_weights_no_grad.detach() - cliped_weights.detach() + cliped_weights + y = F.conv2d(x, binary_weights, stride=self.stride, padding=self.padding) + + return y + diff --git a/models/Qa_reactnet_18_bf.py b/models/Qa_reactnet_18_bf.py new file mode 100644 index 0000000..6e2b362 --- /dev/null +++ b/models/Qa_reactnet_18_bf.py @@ -0,0 +1,137 @@ +''' +React-birealnet-18(modified from resnet) + +BN setting: remove all BatchNorm layers +Conv setting: replace conv2d with ScaledstdConv2d (add alpha beta each blocks) +Binary setting: only activation are binarized + +''' + + +import torch +import torch.nn as nn +import torch.utils.model_zoo as model_zoo +import torch.nn.functional as F + +from layers import * + +def conv3x3(in_planes, out_planes, stride=1): + """3x3 convolution with padding""" + return ScaledStdConv2d(in_planes, out_planes, kernel_size=3, stride=stride, padding=1, bias=False) + +def conv1x1(in_planes, out_planes, stride=1): + """1x1 convolution""" + return ScaledStdConv2d(in_planes, out_planes, kernel_size=1, stride=stride, bias=False) + +def binaryconv3x3(in_planes, out_planes, stride=1): + """3x3 convolution with padding""" + return HardBinaryScaledStdConv2d(in_planes, out_planes, kernel_size=3, stride=stride, padding=1) + +def binaryconv1x1(in_planes, out_planes, stride=1): + """1x1 convolution""" + return HardBinaryScaledStdConv2d(in_planes, out_planes, kernel_size=1, stride=stride, padding=0) + +class BasicBlock(nn.Module): + expansion = 1 + + def __init__(self, inplanes, planes, alpha, beta, stride=1, downsample=None): + super(BasicBlock, self).__init__() + + self.alpha = alpha + self.beta = beta + + self.move0 = LearnableBias(inplanes) + self.binary_activation = BinaryActivation() + self.binary_conv = conv3x3(inplanes, planes, stride=stride) + self.move1 = LearnableBias(planes) + self.prelu = nn.PReLU(planes) + self.move2 = LearnableBias(planes) + + self.downsample = downsample + self.stride = stride + + def forward(self, x): + + residual = x + x_in = x*self.beta + + out = self.move0(x_in) + out = self.binary_activation(out) + out = self.binary_conv(out) + + if self.downsample is not None: + residual = self.downsample(x_in) + + out = out*self.alpha + residual + out = self.move1(out) + out = self.prelu(out) + out = self.move2(out) + + return out + +class BiRealNet(nn.Module): + + def __init__(self, block, layers, imagenet=True, alpha=0.2, num_classes=1000): + super(BiRealNet, self).__init__() + self.inplanes = 64 + + if imagenet: + self.conv1 = ScaledStdConv2d(3, 64, kernel_size=7, stride=2, padding=3, bias=False) + self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1) + else: + self.conv1 = ScaledStdConv2d(3, 64, kernel_size=3, stride=1, padding=1, bias=False) + self.maxpool = nn.Identity() + + expected_var = 1.0 + self.layer1, expected_var = self._make_layer(block, 64, layers[0], alpha, expected_var) + self.layer2, expected_var = self._make_layer(block, 128, layers[1], alpha, expected_var, stride=2) + self.layer3, expected_var = self._make_layer(block, 256, layers[2], alpha, expected_var, stride=2) + self.layer4, expected_var = self._make_layer(block, 512, layers[3], alpha, expected_var, stride=2) + self.avgpool = nn.AdaptiveAvgPool2d((1, 1)) + self.fc = nn.Linear(512 * block.expansion, num_classes) + + def _make_layer(self, block, planes, blocks, alpha, expected_var, stride=1): + + beta = 1. / expected_var ** 0.5 + downsample = None + if stride != 1 or self.inplanes != planes * block.expansion: + downsample = nn.Sequential( + nn.AvgPool2d(kernel_size=2, stride=stride), + conv1x1(self.inplanes, planes * block.expansion) + ) + # Reset expected var at a transition block + expected_var = 1.0 + + layers = [] + layers.append(block(self.inplanes, planes, alpha, beta, stride, downsample)) + self.inplanes = planes * block.expansion + for _ in range(1, blocks): + beta = 1. / expected_var ** 0.5 + layers.append(block(self.inplanes, planes, alpha, beta)) + expected_var += alpha ** 2 + + return nn.Sequential(*layers), expected_var + + def forward(self, x): + x = self.conv1(x) + x = self.maxpool(x) + + x = self.layer1(x) + x = self.layer2(x) + x = self.layer3(x) + x = self.layer4(x) + + x = self.avgpool(x) + x = x.view(x.size(0), -1) + x = self.fc(x) + + return x + + +def birealnet18(pretrained=False, **kwargs): + """Constructs a BiRealNet-18 model. """ + model = BiRealNet(BasicBlock, [4, 4, 4, 4], **kwargs) + return model + + + diff --git a/models/Qa_reactnet_18_bn.py b/models/Qa_reactnet_18_bn.py new file mode 100644 index 0000000..23164bf --- /dev/null +++ b/models/Qa_reactnet_18_bn.py @@ -0,0 +1,130 @@ +''' +React-birealnet-18(modified from resnet) + +BN setting: original all BN +Conv setting: original Conv2d +Binary setting: only activation are binarized + +''' + +import torch +import torch.nn as nn +import torch.utils.model_zoo as model_zoo +import torch.nn.functional as F + +from layers import * + +def conv3x3(in_planes, out_planes, stride=1): + """3x3 convolution with padding""" + return nn.Conv2d(in_planes, out_planes, kernel_size=3, stride=stride, padding=1, bias=False) + +def conv1x1(in_planes, out_planes, stride=1): + """1x1 convolution""" + return nn.Conv2d(in_planes, out_planes, kernel_size=1, stride=stride, bias=False) + +def binaryconv3x3(in_planes, out_planes, stride=1): + """3x3 convolution with padding""" + return HardBinaryConv(in_planes, out_planes, kernel_size=3, stride=stride, padding=1) + +def binaryconv1x1(in_planes, out_planes, stride=1): + """1x1 convolution""" + return HardBinaryConv(in_planes, out_planes, kernel_size=1, stride=stride, padding=0) + +class BasicBlock(nn.Module): + expansion = 1 + + def __init__(self, inplanes, planes, stride=1, downsample=None): + super(BasicBlock, self).__init__() + + self.move0 = LearnableBias(inplanes) + self.binary_activation = BinaryActivation() + self.binary_conv = conv3x3(inplanes, planes, stride=stride) + self.bn1 = nn.BatchNorm2d(planes) + self.move1 = LearnableBias(planes) + self.prelu = nn.PReLU(planes) + self.move2 = LearnableBias(planes) + + self.downsample = downsample + self.stride = stride + + def forward(self, x): + residual = x + + out = self.move0(x) + out = self.binary_activation(out) + out = self.binary_conv(out) + out = self.bn1(out) + + if self.downsample is not None: + residual = self.downsample(x) + + out += residual + out = self.move1(out) + out = self.prelu(out) + out = self.move2(out) + + return out + +class BiRealNet(nn.Module): + + def __init__(self, block, layers, imagenet=True, num_classes=1000): + super(BiRealNet, self).__init__() + self.inplanes = 64 + + if imagenet: + self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3, bias=False) + self.bn1 = nn.BatchNorm2d(64) + self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1) + else: + self.conv1 = nn.Conv2d(3, 64, kernel_size=3, stride=1, padding=1, bias=False) + self.bn1 = nn.BatchNorm2d(64) + self.maxpool = nn.Identity() + + self.layer1 = self._make_layer(block, 64, layers[0]) + self.layer2 = self._make_layer(block, 128, layers[1], stride=2) + self.layer3 = self._make_layer(block, 256, layers[2], stride=2) + self.layer4 = self._make_layer(block, 512, layers[3], stride=2) + self.avgpool = nn.AdaptiveAvgPool2d((1, 1)) + self.fc = nn.Linear(512 * block.expansion, num_classes) + + def _make_layer(self, block, planes, blocks, stride=1): + downsample = None + if stride != 1 or self.inplanes != planes * block.expansion: + downsample = nn.Sequential( + nn.AvgPool2d(kernel_size=2, stride=stride), + conv1x1(self.inplanes, planes * block.expansion), + nn.BatchNorm2d(planes * block.expansion), + ) + + layers = [] + layers.append(block(self.inplanes, planes, stride, downsample)) + self.inplanes = planes * block.expansion + for _ in range(1, blocks): + layers.append(block(self.inplanes, planes)) + + return nn.Sequential(*layers) + + def forward(self, x): + x = self.conv1(x) + x = self.bn1(x) + x = self.maxpool(x) + + x = self.layer1(x) + x = self.layer2(x) + x = self.layer3(x) + x = self.layer4(x) + + x = self.avgpool(x) + x = x.view(x.size(0), -1) + x = self.fc(x) + + return x + + +def birealnet18(pretrained=False, **kwargs): + """Constructs a BiRealNet-18 model. """ + model = BiRealNet(BasicBlock, [4, 4, 4, 4], **kwargs) + return model + + + diff --git a/models/Qa_reactnet_18_none.py b/models/Qa_reactnet_18_none.py new file mode 100644 index 0000000..1c70178 --- /dev/null +++ b/models/Qa_reactnet_18_none.py @@ -0,0 +1,126 @@ +''' +React-birealnet-18(modified from resnet) + +BN setting: remove all BatchNorm layers +Conv setting: original Conv2d +Binary setting: only activation are binarized + +''' + + + +import torch +import torch.nn as nn +import torch.utils.model_zoo as model_zoo +import torch.nn.functional as F + +from layers import * + +def conv3x3(in_planes, out_planes, stride=1): + """3x3 convolution with padding""" + return nn.Conv2d(in_planes, out_planes, kernel_size=3, stride=stride, padding=1, bias=False) + +def conv1x1(in_planes, out_planes, stride=1): + """1x1 convolution""" + return nn.Conv2d(in_planes, out_planes, kernel_size=1, stride=stride, bias=False) + +def binaryconv3x3(in_planes, out_planes, stride=1): + """3x3 convolution with padding""" + return HardBinaryConv(in_planes, out_planes, kernel_size=3, stride=stride, padding=1) + +def binaryconv1x1(in_planes, out_planes, stride=1): + """1x1 convolution""" + return HardBinaryConv(in_planes, out_planes, kernel_size=1, stride=stride, padding=0) + +class BasicBlock(nn.Module): + expansion = 1 + + def __init__(self, inplanes, planes, stride=1, downsample=None): + super(BasicBlock, self).__init__() + + self.move0 = LearnableBias(inplanes) + self.binary_activation = BinaryActivation() + self.binary_conv = conv3x3(inplanes, planes, stride=stride) + self.move1 = LearnableBias(planes) + self.prelu = nn.PReLU(planes) + self.move2 = LearnableBias(planes) + + self.downsample = downsample + self.stride = stride + + def forward(self, x): + residual = x + + out = self.move0(x) + out = self.binary_activation(out) + out = self.binary_conv(out) + + if self.downsample is not None: + residual = self.downsample(x) + + out += residual + out = self.move1(out) + out = self.prelu(out) + out = self.move2(out) + + return out + +class BiRealNet(nn.Module): + + def __init__(self, block, layers, imagenet=True, num_classes=1000): + super(BiRealNet, self).__init__() + self.inplanes = 64 + + if imagenet: + self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3, bias=False) + self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1) + else: + self.conv1 = nn.Conv2d(3, 64, kernel_size=3, stride=1, padding=1, bias=False) + self.maxpool = nn.Identity() + + self.layer1 = self._make_layer(block, 64, layers[0]) + self.layer2 = self._make_layer(block, 128, layers[1], stride=2) + self.layer3 = self._make_layer(block, 256, layers[2], stride=2) + self.layer4 = self._make_layer(block, 512, layers[3], stride=2) + self.avgpool = nn.AdaptiveAvgPool2d((1, 1)) + self.fc = nn.Linear(512 * block.expansion, num_classes) + + def _make_layer(self, block, planes, blocks, stride=1): + downsample = None + if stride != 1 or self.inplanes != planes * block.expansion: + downsample = nn.Sequential( + nn.AvgPool2d(kernel_size=2, stride=stride), + conv1x1(self.inplanes, planes * block.expansion), + ) + + layers = [] + layers.append(block(self.inplanes, planes, stride, downsample)) + self.inplanes = planes * block.expansion + for _ in range(1, blocks): + layers.append(block(self.inplanes, planes)) + + return nn.Sequential(*layers) + + def forward(self, x): + x = self.conv1(x) + x = self.maxpool(x) + + x = self.layer1(x) + x = self.layer2(x) + x = self.layer3(x) + x = self.layer4(x) + + x = self.avgpool(x) + x = x.view(x.size(0), -1) + x = self.fc(x) + + return x + + +def birealnet18(pretrained=False, **kwargs): + """Constructs a BiRealNet-18 model. """ + model = BiRealNet(BasicBlock, [4, 4, 4, 4], **kwargs) + return model + + + diff --git a/models/Qa_reactnet_A_bf.py b/models/Qa_reactnet_A_bf.py new file mode 100644 index 0000000..8bc8bb1 --- /dev/null +++ b/models/Qa_reactnet_A_bf.py @@ -0,0 +1,172 @@ +''' +ReActNet(modified from MobileNetv1) + +BN setting: remove all BatchNorm layers +Conv setting: replace conv2d with ScaledstdConv2d (add alpha beta each blocks) +Binary setting: only activation are binarized + +''' + + + +import torch +import torch.nn as nn +import torch.utils.model_zoo as model_zoo +import torch.nn.functional as F +import numpy as np + +from layers import * + +stage_out_channel = [32] + [64] + [128] * 2 + [256] * 2 + [512] * 6 + [1024] * 2 + +def conv3x3(in_planes, out_planes, stride=1): + """3x3 convolution with padding""" + return ScaledStdConv2d(in_planes, out_planes, kernel_size=3, stride=stride, padding=1, bias=False) + +def conv1x1(in_planes, out_planes, stride=1): + """1x1 convolution""" + return ScaledStdConv2d(in_planes, out_planes, kernel_size=1, stride=stride, bias=False) + +def binaryconv3x3(in_planes, out_planes, stride=1): + """3x3 convolution with padding""" + return HardBinaryScaledStdConv2d(in_planes, out_planes, kernel_size=3, stride=stride, padding=1) + +def binaryconv1x1(in_planes, out_planes, stride=1): + """1x1 convolution""" + return HardBinaryScaledStdConv2d(in_planes, out_planes, kernel_size=1, stride=stride, padding=0) + +class firstconv3x3(nn.Module): + def __init__(self, inp, oup, stride): + super(firstconv3x3, self).__init__() + self.conv1 = ScaledStdConv2d(inp, oup, 3, stride, 1, bias=False) + + def forward(self, x): + out = self.conv1(x) + return out + +class BasicBlock(nn.Module): + def __init__(self, inplanes, planes, alpha, beta1, beta2, stride=1): + super(BasicBlock, self).__init__() + norm_layer = nn.BatchNorm2d + + self.alpha = alpha + self.beta1 = beta1 + self.beta2 = beta2 + + self.move11 = LearnableBias(inplanes) + self.binary_3x3= conv3x3(inplanes, inplanes, stride=stride) + + self.move12 = LearnableBias(inplanes) + self.prelu1 = nn.PReLU(inplanes) + self.move13 = LearnableBias(inplanes) + + self.move21 = LearnableBias(inplanes) + + if inplanes == planes: + self.binary_pw = conv1x1(inplanes, planes) + else: + self.binary_pw_down1 = conv1x1(inplanes, inplanes) + self.binary_pw_down2 = conv1x1(inplanes, inplanes) + + self.move22 = LearnableBias(planes) + self.prelu2 = nn.PReLU(planes) + self.move23 = LearnableBias(planes) + + self.binary_activation = BinaryActivation() + self.stride = stride + self.inplanes = inplanes + self.planes = planes + + if self.inplanes != self.planes: + self.pooling = nn.AvgPool2d(2,2) + + def forward(self, x): + + x_in = x*self.beta1 + + out1 = self.move11(x_in) + out1 = self.binary_activation(out1) + out1 = self.binary_3x3(out1) + + if self.stride == 2: + x = self.pooling(x_in) + + out1 = x + out1*self.alpha + + out1 = self.move12(out1) + out1 = self.prelu1(out1) + out1 = self.move13(out1) + + out1_in = out1*self.beta2 + + out2 = self.move21(out1_in) + out2 = self.binary_activation(out2) + + if self.inplanes == self.planes: + out2 = self.binary_pw(out2) + out2 = out2*self.alpha + out1 + + else: + assert self.planes == self.inplanes * 2 + + out2_1 = self.binary_pw_down1(out2) + out2_2 = self.binary_pw_down2(out2) + out2_1 = out2_1*self.alpha + out1 + out2_2 = out2_2*self.alpha + out1 + out2 = torch.cat([out2_1, out2_2], dim=1) + + out2 = self.move22(out2) + out2 = self.prelu2(out2) + out2 = self.move23(out2) + + return out2 + +class reactnet(nn.Module): + + def __init__(self, alpha=0.2, num_classes=1000): + super(reactnet, self).__init__() + + self.feature = nn.ModuleList() + for i in range(len(stage_out_channel)): + if i == 0: + + expected_var = 1.0 + beta1 = 1. / expected_var ** 0.5 + expected_var += alpha ** 2 + beta2 = 1. / expected_var ** 0.5 + + self.feature.append(firstconv3x3(3, stage_out_channel[i], 2)) + elif stage_out_channel[i-1] != stage_out_channel[i] and stage_out_channel[i] != 64: + self.feature.append(BasicBlock(stage_out_channel[i-1], stage_out_channel[i], alpha, beta1, beta2, 2)) + # Reset expected var at a transition block + expected_var = 1.0 + beta1 = 1. / expected_var ** 0.5 + expected_var += alpha ** 2 + beta2 = 1. / expected_var ** 0.5 + + else: + self.feature.append(BasicBlock(stage_out_channel[i-1], stage_out_channel[i], alpha, beta1, beta2, 1)) + + expected_var += alpha ** 2 + beta1 = 1. / expected_var ** 0.5 + expected_var += alpha ** 2 + beta2 = 1. / expected_var ** 0.5 + + self.pool1 = nn.AdaptiveAvgPool2d(1) + self.fc = nn.Linear(1024, num_classes) + + def forward(self, x): + for i, block in enumerate(self.feature): + x = block(x) + + x = self.pool1(x) + x = x.view(x.size(0), -1) + x = self.fc(x) + + return x + + + + + + diff --git a/models/Qa_reactnet_A_bn.py b/models/Qa_reactnet_A_bn.py new file mode 100644 index 0000000..70d2de4 --- /dev/null +++ b/models/Qa_reactnet_A_bn.py @@ -0,0 +1,156 @@ +''' +ReActNet(modified from MobileNetv1) + +BN setting: original all BN +Conv setting: original Conv2d +Binary setting: only activation are binarized + +''' + +import torch +import torch.nn as nn +import torch.utils.model_zoo as model_zoo +import torch.nn.functional as F +import numpy as np + +from layers import * + +stage_out_channel = [32] + [64] + [128] * 2 + [256] * 2 + [512] * 6 + [1024] * 2 + +def conv3x3(in_planes, out_planes, stride=1): + """3x3 convolution with padding""" + return nn.Conv2d(in_planes, out_planes, kernel_size=3, stride=stride, padding=1, bias=False) + +def conv1x1(in_planes, out_planes, stride=1): + """1x1 convolution""" + return nn.Conv2d(in_planes, out_planes, kernel_size=1, stride=stride, bias=False) + +def binaryconv3x3(in_planes, out_planes, stride=1): + """3x3 convolution with padding""" + return HardBinaryConv(in_planes, out_planes, kernel_size=3, stride=stride, padding=1) + +def binaryconv1x1(in_planes, out_planes, stride=1): + """1x1 convolution""" + return HardBinaryConv(in_planes, out_planes, kernel_size=1, stride=stride, padding=0) + +class firstconv3x3(nn.Module): + def __init__(self, inp, oup, stride): + super(firstconv3x3, self).__init__() + + self.conv1 = nn.Conv2d(inp, oup, 3, stride, 1, bias=False) + self.bn1 = nn.BatchNorm2d(oup) + + def forward(self, x): + + out = self.conv1(x) + out = self.bn1(out) + + return out + +class BasicBlock(nn.Module): + def __init__(self, inplanes, planes, stride=1): + super(BasicBlock, self).__init__() + norm_layer = nn.BatchNorm2d + + self.move11 = LearnableBias(inplanes) + self.binary_3x3= conv3x3(inplanes, inplanes, stride=stride) + self.bn1 = norm_layer(inplanes) + + self.move12 = LearnableBias(inplanes) + self.prelu1 = nn.PReLU(inplanes) + self.move13 = LearnableBias(inplanes) + + self.move21 = LearnableBias(inplanes) + + if inplanes == planes: + self.binary_pw = conv1x1(inplanes, planes) + self.bn2 = norm_layer(planes) + else: + self.binary_pw_down1 = conv1x1(inplanes, inplanes) + self.binary_pw_down2 = conv1x1(inplanes, inplanes) + self.bn2_1 = norm_layer(inplanes) + self.bn2_2 = norm_layer(inplanes) + + self.move22 = LearnableBias(planes) + self.prelu2 = nn.PReLU(planes) + self.move23 = LearnableBias(planes) + + self.binary_activation = BinaryActivation() + self.stride = stride + self.inplanes = inplanes + self.planes = planes + + if self.inplanes != self.planes: + self.pooling = nn.AvgPool2d(2,2) + + def forward(self, x): + + out1 = self.move11(x) + + out1 = self.binary_activation(out1) + out1 = self.binary_3x3(out1) + out1 = self.bn1(out1) + + if self.stride == 2: + x = self.pooling(x) + + out1 = x + out1 + + out1 = self.move12(out1) + out1 = self.prelu1(out1) + out1 = self.move13(out1) + + out2 = self.move21(out1) + out2 = self.binary_activation(out2) + + if self.inplanes == self.planes: + out2 = self.binary_pw(out2) + out2 = self.bn2(out2) + out2 += out1 + + else: + assert self.planes == self.inplanes * 2 + + out2_1 = self.binary_pw_down1(out2) + out2_2 = self.binary_pw_down2(out2) + out2_1 = self.bn2_1(out2_1) + out2_2 = self.bn2_2(out2_2) + out2_1 += out1 + out2_2 += out1 + out2 = torch.cat([out2_1, out2_2], dim=1) + + out2 = self.move22(out2) + out2 = self.prelu2(out2) + out2 = self.move23(out2) + + return out2 + +class reactnet(nn.Module): + def __init__(self, num_classes=1000): + super(reactnet, self).__init__() + self.feature = nn.ModuleList() + for i in range(len(stage_out_channel)): + if i == 0: + self.feature.append(firstconv3x3(3, stage_out_channel[i], 2)) + elif stage_out_channel[i-1] != stage_out_channel[i] and stage_out_channel[i] != 64: + self.feature.append(BasicBlock(stage_out_channel[i-1], stage_out_channel[i], 2)) + else: + self.feature.append(BasicBlock(stage_out_channel[i-1], stage_out_channel[i], 1)) + self.pool1 = nn.AdaptiveAvgPool2d(1) + self.fc = nn.Linear(1024, num_classes) + + def forward(self, x): + for i, block in enumerate(self.feature): + x = block(x) + + x = self.pool1(x) + x = x.view(x.size(0), -1) + x = self.fc(x) + + return x + + + + + + diff --git a/models/Qa_reactnet_A_none.py b/models/Qa_reactnet_A_none.py new file mode 100644 index 0000000..50746b9 --- /dev/null +++ b/models/Qa_reactnet_A_none.py @@ -0,0 +1,144 @@ +''' +ReActNet(modified from MobileNetv1) + +BN setting: remove all BatchNorm layers +Conv setting: original Conv2d +Binary setting: only activation are binarized + +''' + + + +import torch +import torch.nn as nn +import torch.utils.model_zoo as model_zoo +import torch.nn.functional as F +import numpy as np + +from layers import * + +stage_out_channel = [32] + [64] + [128] * 2 + [256] * 2 + [512] * 6 + [1024] * 2 + +def conv3x3(in_planes, out_planes, stride=1): + """3x3 convolution with padding""" + return nn.Conv2d(in_planes, out_planes, kernel_size=3, stride=stride, padding=1, bias=False) + +def conv1x1(in_planes, out_planes, stride=1): + """1x1 convolution""" + return nn.Conv2d(in_planes, out_planes, kernel_size=1, stride=stride, bias=False) + +def binaryconv3x3(in_planes, out_planes, stride=1): + """3x3 convolution with padding""" + return HardBinaryConv(in_planes, out_planes, kernel_size=3, stride=stride, padding=1) + +def binaryconv1x1(in_planes, out_planes, stride=1): + """1x1 convolution""" + return HardBinaryConv(in_planes, out_planes, kernel_size=1, stride=stride, padding=0) + +class firstconv3x3(nn.Module): + def __init__(self, inp, oup, stride): + super(firstconv3x3, self).__init__() + self.conv1 = nn.Conv2d(inp, oup, 3, stride, 1, bias=False) + + def forward(self, x): + out = self.conv1(x) + return out + +class BasicBlock(nn.Module): + def __init__(self, inplanes, planes, stride=1): + super(BasicBlock, self).__init__() + + self.move11 = LearnableBias(inplanes) + self.binary_3x3= conv3x3(inplanes, inplanes, stride=stride) + + self.move12 = LearnableBias(inplanes) + self.prelu1 = nn.PReLU(inplanes) + self.move13 = LearnableBias(inplanes) + + self.move21 = LearnableBias(inplanes) + + if inplanes == planes: + self.binary_pw = conv1x1(inplanes, planes) + else: + self.binary_pw_down1 = conv1x1(inplanes, inplanes) + self.binary_pw_down2 = conv1x1(inplanes, inplanes) + + self.move22 = LearnableBias(planes) + self.prelu2 = nn.PReLU(planes) + self.move23 = LearnableBias(planes) + + self.binary_activation = BinaryActivation() + self.stride = stride + self.inplanes = inplanes + self.planes = planes + + if self.inplanes != self.planes: + self.pooling = nn.AvgPool2d(2,2) + + def forward(self, x): + + out1 = self.move11(x) + + out1 = self.binary_activation(out1) + out1 = self.binary_3x3(out1) + + if self.stride == 2: + x = self.pooling(x) + + out1 = x + out1 + + out1 = self.move12(out1) + out1 = self.prelu1(out1) + out1 = self.move13(out1) + + out2 = self.move21(out1) + out2 = self.binary_activation(out2) + + if self.inplanes == self.planes: + out2 = self.binary_pw(out2) + out2 += out1 + + else: + assert self.planes == self.inplanes * 2 + + out2_1 = self.binary_pw_down1(out2) + out2_2 = self.binary_pw_down2(out2) + out2_1 += out1 + out2_2 += out1 + out2 = torch.cat([out2_1, out2_2], dim=1) + + out2 = self.move22(out2) + out2 = self.prelu2(out2) + out2 = self.move23(out2) + + return out2 + +class reactnet(nn.Module): + def __init__(self, num_classes=1000): + super(reactnet, self).__init__() + self.feature = nn.ModuleList() + for i in range(len(stage_out_channel)): + if i == 0: + self.feature.append(firstconv3x3(3, stage_out_channel[i], 2)) + elif stage_out_channel[i-1] != stage_out_channel[i] and stage_out_channel[i] != 64: + self.feature.append(BasicBlock(stage_out_channel[i-1], stage_out_channel[i], 2)) + else: + self.feature.append(BasicBlock(stage_out_channel[i-1], stage_out_channel[i], 1)) + self.pool1 = nn.AdaptiveAvgPool2d(1) + self.fc = nn.Linear(1024, num_classes) + + def forward(self, x): + for i, block in enumerate(self.feature): + x = block(x) + + x = self.pool1(x) + x = x.view(x.size(0), -1) + x = self.fc(x) + + return x + + + + + + diff --git a/models/Qaw_reactnet_18_bf.py b/models/Qaw_reactnet_18_bf.py new file mode 100644 index 0000000..658a6b7 --- /dev/null +++ b/models/Qaw_reactnet_18_bf.py @@ -0,0 +1,137 @@ +''' +React-birealnet-18(modified from resnet) + +BN setting: remove all BatchNorm layers +Conv setting: replace conv2d with ScaledstdConv2d (add alpha beta each blocks) +Binary setting: only activation are binarized + +''' + + +import torch +import torch.nn as nn +import torch.utils.model_zoo as model_zoo +import torch.nn.functional as F + +from layers import * + +def conv3x3(in_planes, out_planes, stride=1): + """3x3 convolution with padding""" + return ScaledStdConv2d(in_planes, out_planes, kernel_size=3, stride=stride, padding=1, bias=False) + +def conv1x1(in_planes, out_planes, stride=1): + """1x1 convolution""" + return ScaledStdConv2d(in_planes, out_planes, kernel_size=1, stride=stride, bias=False) + +def binaryconv3x3(in_planes, out_planes, stride=1): + """3x3 convolution with padding""" + return HardBinaryScaledStdConv2d(in_planes, out_planes, kernel_size=3, stride=stride, padding=1) + +def binaryconv1x1(in_planes, out_planes, stride=1): + """1x1 convolution""" + return HardBinaryScaledStdConv2d(in_planes, out_planes, kernel_size=1, stride=stride, padding=0) + +class BasicBlock(nn.Module): + expansion = 1 + + def __init__(self, inplanes, planes, alpha, beta, stride=1, downsample=None): + super(BasicBlock, self).__init__() + + self.alpha = alpha + self.beta = beta + + self.move0 = LearnableBias(inplanes) + self.binary_activation = BinaryActivation() + self.binary_conv = binaryconv3x3(inplanes, planes, stride=stride) + self.move1 = LearnableBias(planes) + self.prelu = nn.PReLU(planes) + self.move2 = LearnableBias(planes) + + self.downsample = downsample + self.stride = stride + + def forward(self, x): + + residual = x + x_in = x*self.beta + + out = self.move0(x_in) + out = self.binary_activation(out) + out = self.binary_conv(out) + + if self.downsample is not None: + residual = self.downsample(x_in) + + out = out*self.alpha + residual + out = self.move1(out) + out = self.prelu(out) + out = self.move2(out) + + return out + +class BiRealNet(nn.Module): + + def __init__(self, block, layers, imagenet=True, alpha=0.2, num_classes=1000): + super(BiRealNet, self).__init__() + self.inplanes = 64 + + if imagenet: + self.conv1 = ScaledStdConv2d(3, 64, kernel_size=7, stride=2, padding=3, bias=False) + self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1) + else: + self.conv1 = ScaledStdConv2d(3, 64, kernel_size=3, stride=1, padding=1, bias=False) + self.maxpool = nn.Identity() + + expected_var = 1.0 + self.layer1, expected_var = self._make_layer(block, 64, layers[0], alpha, expected_var) + self.layer2, expected_var = self._make_layer(block, 128, layers[1], alpha, expected_var, stride=2) + self.layer3, expected_var = self._make_layer(block, 256, layers[2], alpha, expected_var, stride=2) + self.layer4, expected_var = self._make_layer(block, 512, layers[3], alpha, expected_var, stride=2) + self.avgpool = nn.AdaptiveAvgPool2d((1, 1)) + self.fc = nn.Linear(512 * block.expansion, num_classes) + + def _make_layer(self, block, planes, blocks, alpha, expected_var, stride=1): + + beta = 1. / expected_var ** 0.5 + downsample = None + if stride != 1 or self.inplanes != planes * block.expansion: + downsample = nn.Sequential( + nn.AvgPool2d(kernel_size=2, stride=stride), + binaryconv1x1(self.inplanes, planes * block.expansion) + ) + # Reset expected var at a transition block + expected_var = 1.0 + + layers = [] + layers.append(block(self.inplanes, planes, alpha, beta, stride, downsample)) + self.inplanes = planes * block.expansion + for _ in range(1, blocks): + beta = 1. / expected_var ** 0.5 + layers.append(block(self.inplanes, planes, alpha, beta)) + expected_var += alpha ** 2 + + return nn.Sequential(*layers), expected_var + + def forward(self, x): + x = self.conv1(x) + x = self.maxpool(x) + + x = self.layer1(x) + x = self.layer2(x) + x = self.layer3(x) + x = self.layer4(x) + + x = self.avgpool(x) + x = x.view(x.size(0), -1) + x = self.fc(x) + + return x + + +def birealnet18(pretrained=False, **kwargs): + """Constructs a BiRealNet-18 model. """ + model = BiRealNet(BasicBlock, [4, 4, 4, 4], **kwargs) + return model + + + diff --git a/models/Qaw_reactnet_18_bn.py b/models/Qaw_reactnet_18_bn.py new file mode 100644 index 0000000..ed1c854 --- /dev/null +++ b/models/Qaw_reactnet_18_bn.py @@ -0,0 +1,131 @@ +''' +React-birealnet-18(modified from resnet) + +BN setting: original all BN +Conv setting: original Conv2d +Binary setting: both activation and weight are binarized + +''' + + +import torch +import torch.nn as nn +import torch.utils.model_zoo as model_zoo +import torch.nn.functional as F + +from layers import * + +def conv3x3(in_planes, out_planes, stride=1): + """3x3 convolution with padding""" + return nn.Conv2d(in_planes, out_planes, kernel_size=3, stride=stride, padding=1, bias=False) + +def conv1x1(in_planes, out_planes, stride=1): + """1x1 convolution""" + return nn.Conv2d(in_planes, out_planes, kernel_size=1, stride=stride, bias=False) + +def binaryconv3x3(in_planes, out_planes, stride=1): + """3x3 convolution with padding""" + return HardBinaryConv(in_planes, out_planes, kernel_size=3, stride=stride, padding=1) + +def binaryconv1x1(in_planes, out_planes, stride=1): + """1x1 convolution""" + return HardBinaryConv(in_planes, out_planes, kernel_size=1, stride=stride, padding=0) + +class BasicBlock(nn.Module): + expansion = 1 + + def __init__(self, inplanes, planes, stride=1, downsample=None): + super(BasicBlock, self).__init__() + + self.move0 = LearnableBias(inplanes) + self.binary_activation = BinaryActivation() + self.binary_conv = binaryconv3x3(inplanes, planes, stride=stride) + self.bn1 = nn.BatchNorm2d(planes) + self.move1 = LearnableBias(planes) + self.prelu = nn.PReLU(planes) + self.move2 = LearnableBias(planes) + + self.downsample = downsample + self.stride = stride + + def forward(self, x): + residual = x + + out = self.move0(x) + out = self.binary_activation(out) + out = self.binary_conv(out) + out = self.bn1(out) + + if self.downsample is not None: + residual = self.downsample(x) + + out += residual + out = self.move1(out) + out = self.prelu(out) + out = self.move2(out) + + return out + +class BiRealNet(nn.Module): + + def __init__(self, block, layers, imagenet=True, num_classes=1000): + super(BiRealNet, self).__init__() + self.inplanes = 64 + + if imagenet: + self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3, bias=False) + self.bn1 = nn.BatchNorm2d(64) + self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1) + else: + self.conv1 = nn.Conv2d(3, 64, kernel_size=3, stride=1, padding=1, bias=False) + self.bn1 = nn.BatchNorm2d(64) + self.maxpool = nn.Identity() + + self.layer1 = self._make_layer(block, 64, layers[0]) + self.layer2 = self._make_layer(block, 128, layers[1], stride=2) + self.layer3 = self._make_layer(block, 256, layers[2], stride=2) + self.layer4 = self._make_layer(block, 512, layers[3], stride=2) + self.avgpool = nn.AdaptiveAvgPool2d((1, 1)) + self.fc = nn.Linear(512 * block.expansion, num_classes) + + def _make_layer(self, block, planes, blocks, stride=1): + downsample = None + if stride != 1 or self.inplanes != planes * block.expansion: + downsample = nn.Sequential( + nn.AvgPool2d(kernel_size=2, stride=stride), + binaryconv1x1(self.inplanes, planes * block.expansion), + nn.BatchNorm2d(planes * block.expansion), + ) + + layers = [] + layers.append(block(self.inplanes, planes, stride, downsample)) + self.inplanes = planes * block.expansion + for _ in range(1, blocks): + layers.append(block(self.inplanes, planes)) + + return nn.Sequential(*layers) + + def forward(self, x): + x = self.conv1(x) + x = self.bn1(x) + x = self.maxpool(x) + + x = self.layer1(x) + x = self.layer2(x) + x = self.layer3(x) + x = self.layer4(x) + + x = self.avgpool(x) + x = x.view(x.size(0), -1) + x = self.fc(x) + + return x + + +def birealnet18(pretrained=False, **kwargs): + """Constructs a BiRealNet-18 model. """ + model = BiRealNet(BasicBlock, [4, 4, 4, 4], **kwargs) + return model + + + diff --git a/models/Qaw_reactnet_18_none.py b/models/Qaw_reactnet_18_none.py new file mode 100644 index 0000000..e34920c --- /dev/null +++ b/models/Qaw_reactnet_18_none.py @@ -0,0 +1,124 @@ +''' +React-birealnet-18(modified from resnet) + +BN setting: remove all BatchNorm layers +Conv setting: original Conv2d +Binary setting: both activation and weight are binarized + +''' + + +import torch +import torch.nn as nn +import torch.utils.model_zoo as model_zoo +import torch.nn.functional as F + +from layers import * + +def conv3x3(in_planes, out_planes, stride=1): + """3x3 convolution with padding""" + return nn.Conv2d(in_planes, out_planes, kernel_size=3, stride=stride, padding=1, bias=False) + +def conv1x1(in_planes, out_planes, stride=1): + """1x1 convolution""" + return nn.Conv2d(in_planes, out_planes, kernel_size=1, stride=stride, bias=False) + +def binaryconv3x3(in_planes, out_planes, stride=1): + """3x3 convolution with padding""" + return HardBinaryConv(in_planes, out_planes, kernel_size=3, stride=stride, padding=1) + +def binaryconv1x1(in_planes, out_planes, stride=1): + """1x1 convolution""" + return HardBinaryConv(in_planes, out_planes, kernel_size=1, stride=stride, padding=0) + +class BasicBlock(nn.Module): + expansion = 1 + + def __init__(self, inplanes, planes, stride=1, downsample=None): + super(BasicBlock, self).__init__() + + self.move0 = LearnableBias(inplanes) + self.binary_activation = BinaryActivation() + self.binary_conv = binaryconv3x3(inplanes, planes, stride=stride) + self.move1 = LearnableBias(planes) + self.prelu = nn.PReLU(planes) + self.move2 = LearnableBias(planes) + + self.downsample = downsample + self.stride = stride + + def forward(self, x): + residual = x + + out = self.move0(x) + out = self.binary_activation(out) + out = self.binary_conv(out) + + if self.downsample is not None: + residual = self.downsample(x) + + out += residual + out = self.move1(out) + out = self.prelu(out) + out = self.move2(out) + + return out + +class BiRealNet(nn.Module): + + def __init__(self, block, layers, imagenet=True, num_classes=1000): + super(BiRealNet, self).__init__() + self.inplanes = 64 + if imagenet: + self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3, bias=False) + self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1) + else: + self.conv1 = nn.Conv2d(3, 64, kernel_size=3, stride=1, padding=1, bias=False) + self.maxpool = nn.Identity() + + self.layer1 = self._make_layer(block, 64, layers[0]) + self.layer2 = self._make_layer(block, 128, layers[1], stride=2) + self.layer3 = self._make_layer(block, 256, layers[2], stride=2) + self.layer4 = self._make_layer(block, 512, layers[3], stride=2) + self.avgpool = nn.AdaptiveAvgPool2d((1, 1)) + self.fc = nn.Linear(512 * block.expansion, num_classes) + + def _make_layer(self, block, planes, blocks, stride=1): + downsample = None + if stride != 1 or self.inplanes != planes * block.expansion: + downsample = nn.Sequential( + nn.AvgPool2d(kernel_size=2, stride=stride), + binaryconv1x1(self.inplanes, planes * block.expansion), + ) + + layers = [] + layers.append(block(self.inplanes, planes, stride, downsample)) + self.inplanes = planes * block.expansion + for _ in range(1, blocks): + layers.append(block(self.inplanes, planes)) + + return nn.Sequential(*layers) + + def forward(self, x): + x = self.conv1(x) + x = self.maxpool(x) + + x = self.layer1(x) + x = self.layer2(x) + x = self.layer3(x) + x = self.layer4(x) + + x = self.avgpool(x) + x = x.view(x.size(0), -1) + x = self.fc(x) + + return x + + +def birealnet18(pretrained=False, **kwargs): + """Constructs a BiRealNet-18 model. """ + model = BiRealNet(BasicBlock, [4, 4, 4, 4], **kwargs) + return model + + + diff --git a/models/Qaw_reactnet_A_bf.py b/models/Qaw_reactnet_A_bf.py new file mode 100644 index 0000000..321d42f --- /dev/null +++ b/models/Qaw_reactnet_A_bf.py @@ -0,0 +1,172 @@ +''' +ReActNet(modified from MobileNetv1) + +BN setting: remove all BatchNorm layers +Conv setting: replace conv2d with ScaledstdConv2d (add alpha beta each blocks) +Binary setting: only activation are binarized + +''' + + + +import torch +import torch.nn as nn +import torch.utils.model_zoo as model_zoo +import torch.nn.functional as F +import numpy as np + +from layers import * + +stage_out_channel = [32] + [64] + [128] * 2 + [256] * 2 + [512] * 6 + [1024] * 2 + +def conv3x3(in_planes, out_planes, stride=1): + """3x3 convolution with padding""" + return ScaledStdConv2d(in_planes, out_planes, kernel_size=3, stride=stride, padding=1, bias=False) + +def conv1x1(in_planes, out_planes, stride=1): + """1x1 convolution""" + return ScaledStdConv2d(in_planes, out_planes, kernel_size=1, stride=stride, bias=False) + +def binaryconv3x3(in_planes, out_planes, stride=1): + """3x3 convolution with padding""" + return HardBinaryScaledStdConv2d(in_planes, out_planes, kernel_size=3, stride=stride, padding=1) + +def binaryconv1x1(in_planes, out_planes, stride=1): + """1x1 convolution""" + return HardBinaryScaledStdConv2d(in_planes, out_planes, kernel_size=1, stride=stride, padding=0) + +class firstconv3x3(nn.Module): + def __init__(self, inp, oup, stride): + super(firstconv3x3, self).__init__() + self.conv1 = ScaledStdConv2d(inp, oup, 3, stride, 1, bias=False) + + def forward(self, x): + out = self.conv1(x) + return out + +class BasicBlock(nn.Module): + def __init__(self, inplanes, planes, alpha, beta1, beta2, stride=1): + super(BasicBlock, self).__init__() + norm_layer = nn.BatchNorm2d + + self.alpha = alpha + self.beta1 = beta1 + self.beta2 = beta2 + + self.move11 = LearnableBias(inplanes) + self.binary_3x3= binaryconv3x3(inplanes, inplanes, stride=stride) + + self.move12 = LearnableBias(inplanes) + self.prelu1 = nn.PReLU(inplanes) + self.move13 = LearnableBias(inplanes) + + self.move21 = LearnableBias(inplanes) + + if inplanes == planes: + self.binary_pw = binaryconv1x1(inplanes, planes) + else: + self.binary_pw_down1 = binaryconv1x1(inplanes, inplanes) + self.binary_pw_down2 = binaryconv1x1(inplanes, inplanes) + + self.move22 = LearnableBias(planes) + self.prelu2 = nn.PReLU(planes) + self.move23 = LearnableBias(planes) + + self.binary_activation = BinaryActivation() + self.stride = stride + self.inplanes = inplanes + self.planes = planes + + if self.inplanes != self.planes: + self.pooling = nn.AvgPool2d(2,2) + + def forward(self, x): + + x_in = x*self.beta1 + + out1 = self.move11(x_in) + out1 = self.binary_activation(out1) + out1 = self.binary_3x3(out1) + + if self.stride == 2: + x = self.pooling(x_in) + + out1 = x + out1*self.alpha + + out1 = self.move12(out1) + out1 = self.prelu1(out1) + out1 = self.move13(out1) + + out1_in = out1*self.beta2 + + out2 = self.move21(out1_in) + out2 = self.binary_activation(out2) + + if self.inplanes == self.planes: + out2 = self.binary_pw(out2) + out2 = out2*self.alpha + out1 + + else: + assert self.planes == self.inplanes * 2 + + out2_1 = self.binary_pw_down1(out2) + out2_2 = self.binary_pw_down2(out2) + out2_1 = out2_1*self.alpha + out1 + out2_2 = out2_2*self.alpha + out1 + out2 = torch.cat([out2_1, out2_2], dim=1) + + out2 = self.move22(out2) + out2 = self.prelu2(out2) + out2 = self.move23(out2) + + return out2 + +class reactnet(nn.Module): + + def __init__(self, alpha=0.2, num_classes=1000): + super(reactnet, self).__init__() + + self.feature = nn.ModuleList() + for i in range(len(stage_out_channel)): + if i == 0: + + expected_var = 1.0 + beta1 = 1. / expected_var ** 0.5 + expected_var += alpha ** 2 + beta2 = 1. / expected_var ** 0.5 + + self.feature.append(firstconv3x3(3, stage_out_channel[i], 2)) + elif stage_out_channel[i-1] != stage_out_channel[i] and stage_out_channel[i] != 64: + self.feature.append(BasicBlock(stage_out_channel[i-1], stage_out_channel[i], alpha, beta1, beta2, 2)) + # Reset expected var at a transition block + expected_var = 1.0 + beta1 = 1. / expected_var ** 0.5 + expected_var += alpha ** 2 + beta2 = 1. / expected_var ** 0.5 + + else: + self.feature.append(BasicBlock(stage_out_channel[i-1], stage_out_channel[i], alpha, beta1, beta2, 1)) + + expected_var += alpha ** 2 + beta1 = 1. / expected_var ** 0.5 + expected_var += alpha ** 2 + beta2 = 1. / expected_var ** 0.5 + + self.pool1 = nn.AdaptiveAvgPool2d(1) + self.fc = nn.Linear(1024, num_classes) + + def forward(self, x): + for i, block in enumerate(self.feature): + x = block(x) + + x = self.pool1(x) + x = x.view(x.size(0), -1) + x = self.fc(x) + + return x + + + + + + diff --git a/models/Qaw_reactnet_A_bn.py b/models/Qaw_reactnet_A_bn.py new file mode 100644 index 0000000..a24b255 --- /dev/null +++ b/models/Qaw_reactnet_A_bn.py @@ -0,0 +1,157 @@ +''' +ReActNet(modified from MobileNetv1) + +BN setting: original all BN +Conv setting: original Conv2d +Binary setting: both activation and weight are binarized + +''' + + +import torch +import torch.nn as nn +import torch.utils.model_zoo as model_zoo +import torch.nn.functional as F +import numpy as np + +from layers import * + +stage_out_channel = [32] + [64] + [128] * 2 + [256] * 2 + [512] * 6 + [1024] * 2 + +def conv3x3(in_planes, out_planes, stride=1): + """3x3 convolution with padding""" + return nn.Conv2d(in_planes, out_planes, kernel_size=3, stride=stride, padding=1, bias=False) + +def conv1x1(in_planes, out_planes, stride=1): + """1x1 convolution""" + return nn.Conv2d(in_planes, out_planes, kernel_size=1, stride=stride, bias=False) + +def binaryconv3x3(in_planes, out_planes, stride=1): + """3x3 convolution with padding""" + return HardBinaryConv(in_planes, out_planes, kernel_size=3, stride=stride, padding=1) + +def binaryconv1x1(in_planes, out_planes, stride=1): + """1x1 convolution""" + return HardBinaryConv(in_planes, out_planes, kernel_size=1, stride=stride, padding=0) + +class firstconv3x3(nn.Module): + def __init__(self, inp, oup, stride): + super(firstconv3x3, self).__init__() + + self.conv1 = nn.Conv2d(inp, oup, 3, stride, 1, bias=False) + self.bn1 = nn.BatchNorm2d(oup) + + def forward(self, x): + + out = self.conv1(x) + out = self.bn1(out) + + return out + +class BasicBlock(nn.Module): + def __init__(self, inplanes, planes, stride=1): + super(BasicBlock, self).__init__() + norm_layer = nn.BatchNorm2d + + self.move11 = LearnableBias(inplanes) + self.binary_3x3= binaryconv3x3(inplanes, inplanes, stride=stride) + self.bn1 = norm_layer(inplanes) + + self.move12 = LearnableBias(inplanes) + self.prelu1 = nn.PReLU(inplanes) + self.move13 = LearnableBias(inplanes) + + self.move21 = LearnableBias(inplanes) + + if inplanes == planes: + self.binary_pw = binaryconv1x1(inplanes, planes) + self.bn2 = norm_layer(planes) + else: + self.binary_pw_down1 = binaryconv1x1(inplanes, inplanes) + self.binary_pw_down2 = binaryconv1x1(inplanes, inplanes) + self.bn2_1 = norm_layer(inplanes) + self.bn2_2 = norm_layer(inplanes) + + self.move22 = LearnableBias(planes) + self.prelu2 = nn.PReLU(planes) + self.move23 = LearnableBias(planes) + + self.binary_activation = BinaryActivation() + self.stride = stride + self.inplanes = inplanes + self.planes = planes + + if self.inplanes != self.planes: + self.pooling = nn.AvgPool2d(2,2) + + def forward(self, x): + + out1 = self.move11(x) + + out1 = self.binary_activation(out1) + out1 = self.binary_3x3(out1) + out1 = self.bn1(out1) + + if self.stride == 2: + x = self.pooling(x) + + out1 = x + out1 + + out1 = self.move12(out1) + out1 = self.prelu1(out1) + out1 = self.move13(out1) + + out2 = self.move21(out1) + out2 = self.binary_activation(out2) + + if self.inplanes == self.planes: + out2 = self.binary_pw(out2) + out2 = self.bn2(out2) + out2 += out1 + + else: + assert self.planes == self.inplanes * 2 + + out2_1 = self.binary_pw_down1(out2) + out2_2 = self.binary_pw_down2(out2) + out2_1 = self.bn2_1(out2_1) + out2_2 = self.bn2_2(out2_2) + out2_1 += out1 + out2_2 += out1 + out2 = torch.cat([out2_1, out2_2], dim=1) + + out2 = self.move22(out2) + out2 = self.prelu2(out2) + out2 = self.move23(out2) + + return out2 + +class reactnet(nn.Module): + def __init__(self, num_classes=1000): + super(reactnet, self).__init__() + self.feature = nn.ModuleList() + for i in range(len(stage_out_channel)): + if i == 0: + self.feature.append(firstconv3x3(3, stage_out_channel[i], 2)) + elif stage_out_channel[i-1] != stage_out_channel[i] and stage_out_channel[i] != 64: + self.feature.append(BasicBlock(stage_out_channel[i-1], stage_out_channel[i], 2)) + else: + self.feature.append(BasicBlock(stage_out_channel[i-1], stage_out_channel[i], 1)) + self.pool1 = nn.AdaptiveAvgPool2d(1) + self.fc = nn.Linear(1024, num_classes) + + def forward(self, x): + for i, block in enumerate(self.feature): + x = block(x) + + x = self.pool1(x) + x = x.view(x.size(0), -1) + x = self.fc(x) + + return x + + + + + + diff --git a/models/Qaw_reactnet_A_none.py b/models/Qaw_reactnet_A_none.py new file mode 100644 index 0000000..0aef536 --- /dev/null +++ b/models/Qaw_reactnet_A_none.py @@ -0,0 +1,143 @@ +''' +ReActNet(modified from MobileNetv1) + +BN setting: remove all BatchNorm layers +Conv setting: original Conv2d +Binary setting: both activation and weight are binarized + +''' + + +import torch +import torch.nn as nn +import torch.utils.model_zoo as model_zoo +import torch.nn.functional as F +import numpy as np + +from layers import * + +stage_out_channel = [32] + [64] + [128] * 2 + [256] * 2 + [512] * 6 + [1024] * 2 + +def conv3x3(in_planes, out_planes, stride=1): + """3x3 convolution with padding""" + return nn.Conv2d(in_planes, out_planes, kernel_size=3, stride=stride, padding=1, bias=False) + +def conv1x1(in_planes, out_planes, stride=1): + """1x1 convolution""" + return nn.Conv2d(in_planes, out_planes, kernel_size=1, stride=stride, bias=False) + +def binaryconv3x3(in_planes, out_planes, stride=1): + """3x3 convolution with padding""" + return HardBinaryConv(in_planes, out_planes, kernel_size=3, stride=stride, padding=1) + +def binaryconv1x1(in_planes, out_planes, stride=1): + """1x1 convolution""" + return HardBinaryConv(in_planes, out_planes, kernel_size=1, stride=stride, padding=0) + +class firstconv3x3(nn.Module): + def __init__(self, inp, oup, stride): + super(firstconv3x3, self).__init__() + self.conv1 = nn.Conv2d(inp, oup, 3, stride, 1, bias=False) + + def forward(self, x): + out = self.conv1(x) + return out + +class BasicBlock(nn.Module): + def __init__(self, inplanes, planes, stride=1): + super(BasicBlock, self).__init__() + + self.move11 = LearnableBias(inplanes) + self.binary_3x3= binaryconv3x3(inplanes, inplanes, stride=stride) + + self.move12 = LearnableBias(inplanes) + self.prelu1 = nn.PReLU(inplanes) + self.move13 = LearnableBias(inplanes) + + self.move21 = LearnableBias(inplanes) + + if inplanes == planes: + self.binary_pw = binaryconv1x1(inplanes, planes) + else: + self.binary_pw_down1 = binaryconv1x1(inplanes, inplanes) + self.binary_pw_down2 = binaryconv1x1(inplanes, inplanes) + + self.move22 = LearnableBias(planes) + self.prelu2 = nn.PReLU(planes) + self.move23 = LearnableBias(planes) + + self.binary_activation = BinaryActivation() + self.stride = stride + self.inplanes = inplanes + self.planes = planes + + if self.inplanes != self.planes: + self.pooling = nn.AvgPool2d(2,2) + + def forward(self, x): + + out1 = self.move11(x) + + out1 = self.binary_activation(out1) + out1 = self.binary_3x3(out1) + + if self.stride == 2: + x = self.pooling(x) + + out1 = x + out1 + + out1 = self.move12(out1) + out1 = self.prelu1(out1) + out1 = self.move13(out1) + + out2 = self.move21(out1) + out2 = self.binary_activation(out2) + + if self.inplanes == self.planes: + out2 = self.binary_pw(out2) + out2 += out1 + + else: + assert self.planes == self.inplanes * 2 + + out2_1 = self.binary_pw_down1(out2) + out2_2 = self.binary_pw_down2(out2) + out2_1 += out1 + out2_2 += out1 + out2 = torch.cat([out2_1, out2_2], dim=1) + + out2 = self.move22(out2) + out2 = self.prelu2(out2) + out2 = self.move23(out2) + + return out2 + +class reactnet(nn.Module): + def __init__(self, num_classes=1000): + super(reactnet, self).__init__() + self.feature = nn.ModuleList() + for i in range(len(stage_out_channel)): + if i == 0: + self.feature.append(firstconv3x3(3, stage_out_channel[i], 2)) + elif stage_out_channel[i-1] != stage_out_channel[i] and stage_out_channel[i] != 64: + self.feature.append(BasicBlock(stage_out_channel[i-1], stage_out_channel[i], 2)) + else: + self.feature.append(BasicBlock(stage_out_channel[i-1], stage_out_channel[i], 1)) + self.pool1 = nn.AdaptiveAvgPool2d(1) + self.fc = nn.Linear(1024, num_classes) + + def forward(self, x): + for i, block in enumerate(self.feature): + x = block(x) + + x = self.pool1(x) + x = x.view(x.size(0), -1) + x = self.fc(x) + + return x + + + + + + diff --git a/script/imagenet_reactnet_A_bf.sh b/script/imagenet_reactnet_A_bf.sh new file mode 100644 index 0000000..cf84f1b --- /dev/null +++ b/script/imagenet_reactnet_A_bf.sh @@ -0,0 +1,47 @@ +#Binarize activation +DATADIR=data/imagenet +SAVEDIR1=ReActNet_Qa_bf +SAVEDIR2=ReActNet_Qaw_bf +BS=256 +Epoch=256 +python -u train.py \ + --data ${DATADIR} \ + --save ${SAVEDIR1} \ + --dataset imagenet \ + --batch_size ${BS} \ + --arch reactnet-A \ + --bn_type bf \ + --loss_type kd \ + --teacher dm_nfnet_f0 \ + --learning_rate 5e-4 \ + --epochs ${Epoch} \ + --weight_decay 1e-5 \ + --agc \ + --clip_value 0.02 + + +#Binarize activation and weight +python -u train.py \ + --data ${DATADIR} \ + --save ${SAVEDIR2} \ + --dataset imagenet \ + --batch_size ${BS} \ + --arch reactnet-A \ + --bn_type bf \ + --binary_w \ + --pretrained ${SAVEDIR1}/model_best.pth.tar \ + --loss_type kd \ + --teacher dm_nfnet_f0 \ + --learning_rate 5e-4 \ + --epochs ${Epoch} \ + --weight_decay 0 \ + --agc \ + --clip_value 0.02 + + + + + + + + diff --git a/script/imagenet_reactnet_A_bn.sh b/script/imagenet_reactnet_A_bn.sh new file mode 100644 index 0000000..579f22e --- /dev/null +++ b/script/imagenet_reactnet_A_bn.sh @@ -0,0 +1,47 @@ +#Binarize activation +DATADIR=data/imagenet +SAVEDIR1=ReActNet_Qa_bn +SAVEDIR2=ReActNet_Qaw_bn +BS=256 +Epoch=256 +python -u train.py \ + --data ${DATADIR} \ + --save ${SAVEDIR1} \ + --dataset imagenet \ + --batch_size ${BS} \ + --arch reactnet-A \ + --bn_type bn \ + --loss_type kd \ + --teacher dm_nfnet_f0 \ + --learning_rate 5e-4 \ + --epochs ${Epoch} \ + --weight_decay 1e-5 \ + --agc \ + --clip_value 0.02 + + +#Binarize activation and weight +python -u train.py \ + --data ${DATADIR} \ + --save ${SAVEDIR2} \ + --dataset imagenet \ + --batch_size ${BS} \ + --arch reactnet-A \ + --bn_type bn \ + --binary_w \ + --pretrained ${SAVEDIR1}/model_best.pth.tar \ + --loss_type kd \ + --teacher dm_nfnet_f0 \ + --learning_rate 5e-4 \ + --epochs ${Epoch} \ + --weight_decay 0 \ + --agc \ + --clip_value 0.02 + + + + + + + + diff --git a/script/imagenet_reactnet_A_none.sh b/script/imagenet_reactnet_A_none.sh new file mode 100644 index 0000000..55c15c5 --- /dev/null +++ b/script/imagenet_reactnet_A_none.sh @@ -0,0 +1,47 @@ +#Binarize activation +DATADIR=data/imagenet +SAVEDIR1=ReActNet_Qa_none +SAVEDIR2=ReActNet_Qaw_none +BS=256 +Epoch=256 +python -u train.py \ + --data ${DATADIR} \ + --save ${SAVEDIR1} \ + --dataset imagenet \ + --batch_size ${BS} \ + --arch reactnet-A \ + --bn_type none \ + --loss_type kd \ + --teacher dm_nfnet_f0 \ + --learning_rate 5e-4 \ + --epochs ${Epoch} \ + --weight_decay 1e-5 \ + --agc \ + --clip_value 0.02 + + +#Binarize activation and weight +python -u train.py \ + --data ${DATADIR} \ + --save ${SAVEDIR2} \ + --dataset imagenet \ + --batch_size ${BS} \ + --arch reactnet-A \ + --bn_type none \ + --binary_w \ + --pretrained ${SAVEDIR1}/model_best.pth.tar \ + --loss_type kd \ + --teacher dm_nfnet_f0 \ + --learning_rate 5e-4 \ + --epochs ${Epoch} \ + --weight_decay 0 \ + --agc \ + --clip_value 0.02 + + + + + + + + diff --git a/train.py b/train.py new file mode 100644 index 0000000..bca4f4d --- /dev/null +++ b/train.py @@ -0,0 +1,343 @@ +import os +import sys +import shutil +import numpy as np +import time, datetime +import torch +import random +import logging +import argparse +import torch.nn as nn +import torch.utils +import torch.backends.cudnn as cudnn +import torch.distributed as dist +import torch.utils.data.distributed + +import timm +from utils import * +from torchvision import datasets, transforms +from torch.autograd import Variable +import torchvision.models as models +from agc import adaptive_clip_grad + +parser = argparse.ArgumentParser("normalize free BNN") +################################# basic settings ###################################### +parser.add_argument('--data', type=str, default='../data', help='location of the data corpus') +parser.add_argument('--save', type=str, default='./models', help='path for saving trained models') +parser.add_argument('--dataset', type=str, default='imagenet', help='dataset') +parser.add_argument('--batch_size', type=int, default=512, help='batch size') +parser.add_argument('--arch', type=str, default='reactnet', help='architecture') +parser.add_argument('--bn_type', type=str, default='bn', help='[w/w.o bn or nf-module]') +parser.add_argument('--binary_w', action="store_true", help="whether binarize weight") +parser.add_argument('--resume', action="store_true", help="whether resume training") +parser.add_argument('--pretrained', type=str, default=None, help='pretrained weight') +parser.add_argument('--loss_type', type=str, default='kd', help='[kd, ce, ls]') +parser.add_argument('--label_smooth', type=float, default=0.1, help='label smoothing') +parser.add_argument('--teacher', type=str, default='resnet34', help='path of ImageNet') +parser.add_argument('--teacher_weight', type=str, default=None, help='pretrained teacher weight') +################################# training settings ###################################### +parser.add_argument('--epochs', type=int, default=120, help='num of training epochs') +parser.add_argument('--learning_rate', type=float, default=0.001, help='init learning rate') +parser.add_argument('--momentum', type=float, default=0.9, help='momentum') +parser.add_argument('--weight_decay', type=float, default=0, help='weight decay') +parser.add_argument('--agc', action="store_true", help="whether using agc") +parser.add_argument('--clip_value', type=float, default=0.04, help='lambda for AGC') +################################# other settings ###################################### +parser.add_argument('-j', '--workers', default=40, type=int, metavar='N', help='number of data loading workers (default: 4)') + +args = parser.parse_args() + +def main(): + global args + print(args) + + if not torch.cuda.is_available(): + sys.exit(1) + start_t = time.time() + + cudnn.benchmark = True + cudnn.enabled=True + + train_loader, val_loader, model_student, CLASSES = setup_model_dataloader(args) + model_student = nn.DataParallel(model_student).cuda() + print(model_student) + + # load teacher model + if args.loss_type == 'kd': + print('* Loading teacher model') + if not 'nfnet' in args.teacher: + model_teacher = models.__dict__[args.teacher](pretrained=True) + classes_in_teacher = model_teacher.fc.out_features + num_features = model_teacher.fc.in_features + else: + model_teacher = timm.create_model(args.teacher, pretrained=True) + classes_in_teacher = model_teacher.head.fc.out_features + num_features = model_teacher.head.fc.in_features + + if not classes_in_teacher == CLASSES: + print('* change fc layers in teacher') + if not 'nfnet' in args.teacher: + model_teacher.fc = nn.Linear(num_features, CLASSES) + else: + model_teacher.head.fc = nn.Linear(num_features, CLASSES) + print('* loading pretrained teacher weight from {}'.format(args.teacher_weight)) + pretrain_teacher = torch.load(args.teacher_weight, map_location='cpu')['state_dict'] + model_teacher.load_state_dict(pretrain_teacher) + + model_teacher = nn.DataParallel(model_teacher).cuda() + for p in model_teacher.parameters(): + p.requires_grad = False + model_teacher.eval() + + + #criterion + criterion = nn.CrossEntropyLoss().cuda() + criterion_smooth = CrossEntropyLabelSmooth(CLASSES, args.label_smooth).cuda() + criterion_kd = DistributionLoss() + + #optimizer + all_parameters = model_student.parameters() + weight_parameters = [] + for pname, p in model_student.named_parameters(): + if p.ndimension() == 4 or 'conv' in pname: + weight_parameters.append(p) + weight_parameters_id = list(map(id, weight_parameters)) + other_parameters = list(filter(lambda p: id(p) not in weight_parameters_id, all_parameters)) + + optimizer = torch.optim.Adam( + [{'params' : other_parameters}, + {'params' : weight_parameters, 'weight_decay' : args.weight_decay}], + lr=args.learning_rate,) + + scheduler = torch.optim.lr_scheduler.LambdaLR(optimizer, lambda step : (1.0-step/args.epochs), last_epoch=-1) + start_epoch = 0 + best_top1_acc= 0 + + if args.pretrained: + print('* loading pretrained weight {}'.format(args.pretrained)) + pretrain_student = torch.load(args.pretrained) + if 'state_dict' in pretrain_student.keys(): + pretrain_student = pretrain_student['state_dict'] + + for key in pretrain_student.keys(): + if not key in model_student.state_dict().keys(): + print('unload key: {}'.format(key)) + + model_student.load_state_dict(pretrain_student, strict=False) + + if args.resume: + checkpoint_tar = os.path.join(args.save, 'checkpoint.pth.tar') + if os.path.exists(checkpoint_tar): + print('loading checkpoint {} ..........'.format(checkpoint_tar)) + checkpoint = torch.load(checkpoint_tar) + start_epoch = checkpoint['epoch'] + best_top1_acc = checkpoint['best_top1_acc'] + model_student.load_state_dict(checkpoint['state_dict']) + optimizer.load_state_dict(checkpoint['optimizer']) + scheduler.load_state_dict(checkpoint['scheduler']) + print("loaded checkpoint {} epoch = {}" .format(checkpoint_tar, checkpoint['epoch'])) + else: + raise ValueError('no checkpoint for resume') + + if args.loss_type == 'kd': + if not classes_in_teacher == CLASSES: + validate('teacher', val_loader, model_teacher, criterion, args) + + # train the model + epoch = start_epoch + while epoch < args.epochs: + + if args.loss_type == 'kd': + train_obj, train_top1_acc, train_top5_acc = train_kd(epoch, train_loader, model_student, model_teacher, criterion_kd, optimizer, scheduler) + elif args.loss_type == 'ce': + train_obj, train_top1_acc, train_top5_acc = train(epoch, train_loader, model_student, criterion, optimizer, scheduler) + elif args.loss_type == 'ls': + train_obj, train_top1_acc, train_top5_acc = train(epoch, train_loader, model_student, criterion_smooth, optimizer, scheduler) + else: + raise ValueError('unsupport loss_type') + + valid_obj, valid_top1_acc, valid_top5_acc = validate(epoch, val_loader, model_student, criterion, args) + + is_best = False + if valid_top1_acc > best_top1_acc: + best_top1_acc = valid_top1_acc + is_best = True + + save_checkpoint({ + 'epoch': epoch, + 'state_dict': model_student.state_dict(), + 'best_top1_acc': best_top1_acc, + 'optimizer' : optimizer.state_dict(), + 'scheduler': scheduler.state_dict(), + }, is_best, args.save) + + epoch += 1 + + training_time = (time.time() - start_t) / 3600 + print('total training time = {} hours'.format(training_time)) + print('* best acc = {}'.format(best_top1_acc)) + + +def train_kd(epoch, train_loader, model_student, model_teacher, criterion, optimizer, scheduler): + batch_time = AverageMeter('Time', ':6.3f') + data_time = AverageMeter('Data', ':6.3f') + losses = AverageMeter('Loss', ':.4e') + top1 = AverageMeter('Acc@1', ':6.2f') + top5 = AverageMeter('Acc@5', ':6.2f') + + progress = ProgressMeter( + len(train_loader), + [batch_time, data_time, losses, top1, top5], + prefix="Epoch: [{}]".format(epoch)) + + model_student.train() + model_teacher.eval() + end = time.time() + scheduler.step() + + for param_group in optimizer.param_groups: + cur_lr = param_group['lr'] + print('learning_rate:', cur_lr) + + for i, (images, target) in enumerate(train_loader): + data_time.update(time.time() - end) + images = images.cuda() + target = target.cuda() + + # compute outputy + logits_student = model_student(images) + logits_teacher = model_teacher(images) + loss = criterion(logits_student, logits_teacher) + + # measure accuracy and record loss + prec1, prec5 = accuracy(logits_student, target, topk=(1, 5)) + n = images.size(0) + losses.update(loss.item(), n) #accumulated loss + top1.update(prec1.item(), n) + top5.update(prec5.item(), n) + + # compute gradient and do SGD step + optimizer.zero_grad() + loss.backward() + + # clip gradient if necessary + if args.agc: + parameters_list = [] + for name, p in model_student.named_parameters(): + if not 'fc' in name: + parameters_list.append(p) + adaptive_clip_grad(parameters_list, clip_factor=args.clip_value) + + optimizer.step() + + # measure elapsed time + batch_time.update(time.time() - end) + end = time.time() + + if i%50 == 0: + progress.display(i) + + return losses.avg, top1.avg, top5.avg + +def train(epoch, train_loader, model_student, criterion, optimizer, scheduler): + batch_time = AverageMeter('Time', ':6.3f') + data_time = AverageMeter('Data', ':6.3f') + losses = AverageMeter('Loss', ':.4e') + top1 = AverageMeter('Acc@1', ':6.2f') + top5 = AverageMeter('Acc@5', ':6.2f') + + progress = ProgressMeter( + len(train_loader), + [batch_time, data_time, losses, top1, top5], + prefix="Epoch: [{}]".format(epoch)) + + model_student.train() + end = time.time() + scheduler.step() + + for param_group in optimizer.param_groups: + cur_lr = param_group['lr'] + print('learning_rate:', cur_lr) + + for i, (images, target) in enumerate(train_loader): + data_time.update(time.time() - end) + images = images.cuda() + target = target.cuda() + + # compute outputy + logits_student = model_student(images) + loss = criterion(logits_student, target) + + # measure accuracy and record loss + prec1, prec5 = accuracy(logits_student, target, topk=(1, 5)) + n = images.size(0) + losses.update(loss.item(), n) #accumulated loss + top1.update(prec1.item(), n) + top5.update(prec5.item(), n) + + # compute gradient and do SGD step + optimizer.zero_grad() + loss.backward() + + # clip gradient if necessary + if args.agc: + parameters_list = [] + for name, p in model_student.named_parameters(): + if not 'fc' in name: + parameters_list.append(p) + adaptive_clip_grad(parameters_list, clip_factor=args.clip_value) + + optimizer.step() + + # measure elapsed time + batch_time.update(time.time() - end) + end = time.time() + + if i%50 == 0: + progress.display(i) + + return losses.avg, top1.avg, top5.avg + +def validate(epoch, val_loader, model, criterion, args): + batch_time = AverageMeter('Time', ':6.3f') + losses = AverageMeter('Loss', ':.4e') + top1 = AverageMeter('Acc@1', ':6.2f') + top5 = AverageMeter('Acc@5', ':6.2f') + progress = ProgressMeter( + len(val_loader), + [batch_time, losses, top1, top5], + prefix='Test: ') + + # switch to evaluation mode + model.eval() + with torch.no_grad(): + end = time.time() + for i, (images, target) in enumerate(val_loader): + images = images.cuda() + target = target.cuda() + + # compute output + logits = model(images) + loss = criterion(logits, target) + + # measure accuracy and record loss + pred1, pred5 = accuracy(logits, target, topk=(1, 5)) + n = images.size(0) + losses.update(loss.item(), n) + top1.update(pred1[0], n) + top5.update(pred5[0], n) + + # measure elapsed time + batch_time.update(time.time() - end) + end = time.time() + + if i%50 == 0: + progress.display(i) + + print(' * acc@1 {top1.avg:.3f} acc@5 {top5.avg:.3f}' + .format(top1=top1, top5=top5)) + + return losses.avg, top1.avg, top5.avg + +if __name__ == '__main__': + main() diff --git a/utils.py b/utils.py new file mode 100644 index 0000000..559fd5d --- /dev/null +++ b/utils.py @@ -0,0 +1,284 @@ +import os +import sys +import shutil +import numpy as np +import time, datetime +import torch +import random +import logging +import argparse +import torch.nn as nn +import torch.utils +import torchvision.datasets as dset +import torchvision.transforms as transforms +import torch.backends.cudnn as cudnn +from torch.nn import functional as F +from torch.nn.modules import loss + +from PIL import Image +from torch.autograd import Variable +from dataset import * + +# All models +#reactnet-18 +from models.Qa_reactnet_18_bn import birealnet18 as Qa_reactnet_18_bn +from models.Qa_reactnet_18_none import birealnet18 as Qa_reactnet_18_none +from models.Qa_reactnet_18_bf import birealnet18 as Qa_reactnet_18_bf + +from models.Qaw_reactnet_18_bn import birealnet18 as Qaw_reactnet_18_bn +from models.Qaw_reactnet_18_none import birealnet18 as Qaw_reactnet_18_none +from models.Qaw_reactnet_18_bf import birealnet18 as Qaw_reactnet_18_bf + +#reactnet-A +from models.Qa_reactnet_A_bn import reactnet as Qa_reactnet_A_bn +from models.Qa_reactnet_A_none import reactnet as Qa_reactnet_A_none +from models.Qa_reactnet_A_bf import reactnet as Qa_reactnet_A_bf + +from models.Qaw_reactnet_A_bn import reactnet as Qaw_reactnet_A_bn +from models.Qaw_reactnet_A_none import reactnet as Qaw_reactnet_A_none +from models.Qaw_reactnet_A_bf import reactnet as Qaw_reactnet_A_bf + + +#lighting data augmentation +imagenet_pca = { + 'eigval': np.asarray([0.2175, 0.0188, 0.0045]), + 'eigvec': np.asarray([ + [-0.5675, 0.7192, 0.4009], + [-0.5808, -0.0045, -0.8140], + [-0.5836, -0.6948, 0.4203], + ]) +} + +class Lighting(object): + def __init__(self, alphastd, + eigval=imagenet_pca['eigval'], + eigvec=imagenet_pca['eigvec']): + self.alphastd = alphastd + assert eigval.shape == (3,) + assert eigvec.shape == (3, 3) + self.eigval = eigval + self.eigvec = eigvec + + def __call__(self, img): + if self.alphastd == 0.: + return img + rnd = np.random.randn(3) * self.alphastd + rnd = rnd.astype('float32') + v = rnd + old_dtype = np.asarray(img).dtype + v = v * self.eigval + v = v.reshape((3, 1)) + inc = np.dot(self.eigvec, v).reshape((3,)) + img = np.add(img, inc) + if old_dtype == np.uint8: + img = np.clip(img, 0, 255) + img = Image.fromarray(img.astype(old_dtype), 'RGB') + return img + + def __repr__(self): + return self.__class__.__name__ + '()' + +#label smooth +class CrossEntropyLabelSmooth(nn.Module): + + def __init__(self, num_classes, epsilon): + super(CrossEntropyLabelSmooth, self).__init__() + self.num_classes = num_classes + self.epsilon = epsilon + self.logsoftmax = nn.LogSoftmax(dim=1) + + def forward(self, inputs, targets): + log_probs = self.logsoftmax(inputs) + targets = torch.zeros_like(log_probs).scatter_(1, targets.unsqueeze(1), 1) + targets = (1 - self.epsilon) * targets + self.epsilon / self.num_classes + loss = (-targets * log_probs).mean(0).sum() + return loss + +class DistributionLoss(loss._Loss): + """The KL-Divergence loss for the binary student model and real teacher output. + + output must be a pair of (model_output, real_output), both NxC tensors. + The rows of real_output must all add up to one (probability scores); + however, model_output must be the pre-softmax output of the network.""" + + def forward(self, model_output, real_output): + + self.size_average = True + + # Target is ignored at training time. Loss is defined as KL divergence + # between the model output and the refined labels. + if real_output.requires_grad: + raise ValueError("real network output should not require gradients.") + + model_output_log_prob = F.log_softmax(model_output, dim=1) + real_output_soft = F.softmax(real_output, dim=1) + del model_output, real_output + + # Loss is -dot(model_output_log_prob, real_output). Prepare tensors + # for batch matrix multiplicatio + real_output_soft = real_output_soft.unsqueeze(1) + model_output_log_prob = model_output_log_prob.unsqueeze(2) + + # Compute the loss, and average/sum for the batch. + cross_entropy_loss = -torch.bmm(real_output_soft, model_output_log_prob) + if self.size_average: + cross_entropy_loss = cross_entropy_loss.mean() + else: + cross_entropy_loss = cross_entropy_loss.sum() + # Return a pair of (loss_output, model_output). Model output will be + # used for top-1 and top-5 evaluation. + # model_output_log_prob = model_output_log_prob.squeeze(2) + return cross_entropy_loss + +class AverageMeter(object): + """Computes and stores the average and current value""" + def __init__(self, name, fmt=':f'): + self.name = name + self.fmt = fmt + self.reset() + + def reset(self): + self.val = 0 + self.avg = 0 + self.sum = 0 + self.count = 0 + + def update(self, val, n=1): + self.val = val + self.sum += val * n + self.count += n + self.avg = self.sum / self.count + + def __str__(self): + fmtstr = '{name} {val' + self.fmt + '} ({avg' + self.fmt + '})' + return fmtstr.format(**self.__dict__) + +class ProgressMeter(object): + def __init__(self, num_batches, meters, prefix=""): + self.batch_fmtstr = self._get_batch_fmtstr(num_batches) + self.meters = meters + self.prefix = prefix + + def display(self, batch): + entries = [self.prefix + self.batch_fmtstr.format(batch)] + entries += [str(meter) for meter in self.meters] + print('\t'.join(entries)) + + def _get_batch_fmtstr(self, num_batches): + num_digits = len(str(num_batches // 1)) + fmt = '{:' + str(num_digits) + 'd}' + return '[' + fmt + '/' + fmt.format(num_batches) + ']' + +def save_checkpoint(state, is_best, save): + if not os.path.exists(save): + os.makedirs(save) + filename = os.path.join(save, 'checkpoint.pth.tar') + torch.save(state, filename) + if is_best: + best_filename = os.path.join(save, 'model_best.pth.tar') + shutil.copyfile(filename, best_filename) + +def adjust_learning_rate(optimizer, epoch, args): + """Sets the learning rate to the initial LR decayed by 10 every 30 epochs""" + lr = args.lr * (0.1 ** (epoch // 30)) + for param_group in optimizer.param_groups: + param_group['lr'] = lr + +def accuracy(output, target, topk=(1,)): + """Computes the accuracy over the k top predictions for the specified values of k""" + with torch.no_grad(): + maxk = max(topk) + batch_size = target.size(0) + + _, pred = output.topk(maxk, 1, True, True) + pred = pred.t() + correct = pred.eq(target.view(1, -1).expand_as(pred)) + + res = [] + for k in topk: + correct_k = correct[:k].view(-1).float().sum(0, keepdim=True) + res.append(correct_k.mul_(100.0 / batch_size)) + return res + +def setup_model_dataloader(args): + + # Dataset + if_imagenet = False + + if args.dataset == 'imagenet': + print('* Dataset = ImageNet') + train_loader, val_loader = imagenet_dataloaders(args.batch_size, args.data, args.workers) + classes = 1000 + if_imagenet = True + + elif args.dataset == 'cifar10': + print('* Dataset = CIFAR10') + train_loader, val_loader = cifar10_dataloaders(args.batch_size, args.data, args.workers) + classes = 10 + + elif args.dataset == 'cifar100': + print('* Dataset = CIFAR100') + train_loader, val_loader = cifar100_dataloaders(args.batch_size, args.data, args.workers) + classes = 100 + + else: + raise ValueError('unknow dataset') + + # architecture + if args.arch == 'reactnet-18': + print('* Model = ReActNet-18') + if args.binary_w: + print('* Binarize both activation and weights') + if args.bn_type == 'bn': + print('* with BN') + model = Qaw_reactnet_18_bn(num_classes=classes) + elif args.bn_type == 'none': + print('* without BN') + model = Qaw_reactnet_18_none(num_classes=classes) + elif args.bn_type == 'bf': + print('* BN-Free') + model = Qaw_reactnet_18_bf(num_classes=classes) + + else: + print('* Binarize only activation') + if args.bn_type == 'bn': + print('* with BN') + model = Qa_reactnet_18_bn(num_classes=classes) + elif args.bn_type == 'none': + print('* without BN') + model = Qa_reactnet_18_none(num_classes=classes) + elif args.bn_type == 'bf': + print('* BN-Free') + model = Qa_reactnet_18_bf(num_classes=classes) + + + elif args.arch == 'reactnet-A': + print('* Model = reactnet-A') + if args.binary_w: + print('* Binarize both activation and weights') + if args.bn_type == 'bn': + print('* with BN') + model = Qaw_reactnet_A_bn(num_classes=classes) + elif args.bn_type == 'none': + print('* without BN') + model = Qaw_reactnet_A_none(num_classes=classes) + elif args.bn_type == 'bf': + print('* BN-Free') + model = Qaw_reactnet_A_bf(num_classes=classes) + + else: + print('* Binarize only activation') + if args.bn_type == 'bn': + print('* with BN') + model = Qa_reactnet_A_bn(num_classes=classes) + elif args.bn_type == 'none': + print('* without BN') + model = Qa_reactnet_A_none(num_classes=classes) + elif args.bn_type == 'bf': + print('* BN-Free') + model = Qa_reactnet_A_bf(num_classes=classes) + + return train_loader, val_loader, model, classes + + +