From 7617073add3809bda5cb6ccb1f42417aec5bf1e6 Mon Sep 17 00:00:00 2001 From: Martin Thoma Date: Mon, 20 Mar 2017 11:46:34 +0100 Subject: [PATCH] vgg 16: Add visualization --- tikz/vgg-16/Makefile | 35 ++++++++++++++++++++ tikz/vgg-16/README.md | 3 ++ tikz/vgg-16/vgg-16.png | Bin 0 -> 27054 bytes tikz/vgg-16/vgg-16.tex | 73 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 111 insertions(+) create mode 100644 tikz/vgg-16/Makefile create mode 100644 tikz/vgg-16/README.md create mode 100644 tikz/vgg-16/vgg-16.png create mode 100644 tikz/vgg-16/vgg-16.tex diff --git a/tikz/vgg-16/Makefile b/tikz/vgg-16/Makefile new file mode 100644 index 0000000..e5fa246 --- /dev/null +++ b/tikz/vgg-16/Makefile @@ -0,0 +1,35 @@ +SOURCE = vgg-16 +DELAY = 80 +DENSITY = 300 +WIDTH = 512 + +make: + pdflatex $(SOURCE).tex -output-format=pdf + make clean + +clean: + rm -rf $(TARGET) *.class *.html *.log *.aux *.data *.gnuplot + +gif: + pdfcrop $(SOURCE).pdf + convert -verbose -delay $(DELAY) -loop 0 -density $(DENSITY) $(SOURCE)-crop.pdf $(SOURCE).gif + make clean + +png: + make + make svg + inkscape $(SOURCE).svg -w $(WIDTH) --export-png=$(SOURCE).png + +transparentGif: + convert $(SOURCE).pdf -transparent white result.gif + make clean + +svg: + make + #inkscape $(SOURCE).pdf --export-plain-svg=$(SOURCE).svg + pdf2svg $(SOURCE).pdf $(SOURCE).svg + # Necessary, as pdf2svg does not always create valid svgs: + inkscape $(SOURCE).svg --export-plain-svg=$(SOURCE).svg + rsvg-convert -a -w $(WIDTH) -f svg $(SOURCE).svg -o $(SOURCE)2.svg + inkscape $(SOURCE)2.svg --export-plain-svg=$(SOURCE).svg + rm $(SOURCE)2.svg diff --git a/tikz/vgg-16/README.md b/tikz/vgg-16/README.md new file mode 100644 index 0000000..42504d2 --- /dev/null +++ b/tikz/vgg-16/README.md @@ -0,0 +1,3 @@ +Compiled example +---------------- +![Example](vgg-16.png) diff --git a/tikz/vgg-16/vgg-16.png b/tikz/vgg-16/vgg-16.png new file mode 100644 index 0000000000000000000000000000000000000000..76be2bd1212e581b9a08f97871c3ef6429b951e2 GIT binary patch literal 27054 zcmZs@cRZH;8$N#7vX$%=g=8h0?2u$7WUr9DSGKI|BuPjJS;^jeWrxU??CiaN=ly)X z-|t_)=hY)_*L`2t^}f#cc^>C+9B1LG%JPJG)OZMj5I$6pRYwqX_!g68~P*j}6#7)K<*oopp#?@Hj4U zEuQ36D`qzGG!f)LbSs9mM~VCDD2W%{{qqNy_l6=`vvKR9Q!mtml2#u4vH$OT&Hr9E z{O_14MZvH_C633?OE3?psRAIfUBHnXktEZxLkKZhb1Xn`2Bc3?~Xj`sGAc=v*K&90wIr0qk0-67N5`)V^)7%G$TT4>f7m^7k|Cb7@cAMzh zI2HyQujyNG}PR!2fI7A~np+918DO~;dyokC{1K0MMRV(_eazi;nNtDj%F7_6K z#9Qz5GFOrPn<|mymV+y@@oM>pdf-n1k4h_1%;qbf-edhh!xb+~(9r74*Zxo`qV={s zpskECA*APZ)|LM)4jSqRjXV4vs^i$iUl|GM-d!}H4Tf0E0^p|<*@0}lpuE^$d=q$zkcg9vqAX4*cicgWWSYRfnJ z22aMZ$=R#_V8C7K<*2PT1+88Z(^vFAX_ye4u8I%CZcOvF#o|}FANvgn)1Q7q)F_5J zRk}`YQ_u$kDzO|Mt1X8SH%g7sr;HCnoI`c7kf*q|Rd+to`p-(kIsdypd3oU zwnph2x(w;?t0s)%q5urI1fgX{b8R6wx>5S6dQ;HX%s?F1nG;;N=@=WK7PS_}6ZPBZ zGStYyo;7D!+3Icd&^1PWEB2>G>DUN1@sFwQ|r4<2Y(S$(w|`TF$h$%$9G2K$2Dbgd^Z3roBA#o4hC zQn^`w+TPyL(bC=B-BtSZ=~FcdZUb3qY4kB00a>QO7t~Sa?vIn-y!otK=T-JKJza_| zPN9-U(C%$VTU!#BUL}dOK=KL>5iMoP`}eqa?%auR%e1wzA=^7V+yWR{N>E4Q5}@6fX?`)yNtx=~}#5nJAuP+nG+;CHh3qP3$VsC$8liRn)fc|_Ym zBL;CKdxGL(nf0g%oSCq#t?l)%Uz)z|?t(Lp({J9qp)Ans7W3Hpq*S1JuSl z%=-GnhYv$gzl@S=5p!9NRmvFTQB+hkX)`G{ZV4fLeQ@CBYhl5fbdcC^woo>6zTwX5 zJxuP9n+Z2KlN9oa{A<@2(Rqc1 zh4r1)hpQ$#BY<6^ZI&wN2aS?@0hr_ysd*BqPcLgA~cwk^s){1U%$ zaAgz~Ney>AE{>NjnH#@M?Vqi}BfGHoJDo^7^%&bk6B9f?xx9Zk>HJ~SXY*wP?zb22 z_x+Aq7z|F@xP7;oC5WDydVL+2A-=yi506(+;!6H=cZs69gYj;O<1Uqp-WZusG!6`Z zI#IW?qZIe)^wPShiW%S2u?X(^qkM+Ya*R$a|AaeQ7f10b;;3I9PQTo2b+6y0ldqF? zMZ+Ymz->&I2|bZ{-kH+l+<$*`vBTJo)IXHLw~|%$fa6xG@5u|l>eR`_T#17*Q+_nQ z7hMi}%W8fbRSuOsPyDu;aJn%p27k_V#xY;Ghz`#F#QNsC_Un7&vr-o!@1t)M@99w) z(~d|I@{_pPyU8ZYGMx~H(5e^7sj12@*3dErm-~0uMc#OMoS*Cu>sb*~5@7q4J`U+d ze+0KYV2M1|;XTT=^c9xyXW^t${wNf;0CyEMY~Zz$bv@v_#qI5j)6MMuG%IYopgRq_ zDVzC3Z|^?}AIer?MZH)!P6Ur)M)x|~%Xe2T`cqv~J}3(#Qq5)RYZyi*yh-J%RL-o| z7#NDSw_|OP=$s}YL^!L!0y5iTUU{P}5t5>uUAiyn?OppTre%^A!45JegwMZHto=_# zwtu}o>j!54WTCABo&V1Ov|2SSoV=;iXL?={x5CJ=BB`DrX`YKo8zjHc!({`1{7{5^ z-)PC#mppC6^Qpd`o{nzU-iR$hQB6}5JHAWSSM%AkD`h%SU%!6!jFIr#%PBhdxmW4~ z;U-f)^k-{}$8NGR;N3fNOTOLF3iA>wLPA1ITiX=D_1RfQC@h~wMbm!6Ni6xOA@ciP zopxyyt>*vJUm>xQlNQcTI3p?0bBST5Mw?S%SWhJezKUKTJ!os5Z>{)nt_?7=Y0#f{Bt*7(!y!-k%|Hg@U zCQ&1=I0JSBmRtlDb^H~@3{uS+x+mBeUkI>~#C7DsMlO3Z>0L%S0sf;x}q^klAfNPe`~|d|CFbB zJ%65MRM?6g6fpeDMxe!*MzsAFC# zZ=~6bH*Up6gieF~`f+`JKEd6)cZGaT_&A0LgHaD@zcb9aE+3iUvhJA?}!wR z8`OJK0ce6Wdm;Jd8eZ_HK}!Q+64)D`J+Jk)+7kLhLAUI47Akc;bN~CKKr^0tGJ496 zb>DfG%@pnP$HBFIl5kl{I=Wzmo6@qfn58-e6a2K}A9`B_NNjCwzv&dP-MQ0pv`6Mq zrbAfp4wtve>gCGMTlu;bL`Ahbc%EG35m<=9i;3~^)dR767LO|5?j#>i`j5DC)`@+gQ>?}OhKx2vkE zO6VaIGcXDYQe3}&{ivCu-XFGfb*b$ON;H^kE|id2BH%v0VG}=a0fE6Em|T+$qusc&@WQhE_PRJCWP8_X9r? z7Um+&`da7 zZBUbu5dgx!OArHWfMnG4^a%WOGT{_|%2fIJ`Trb0>20(X9*L2-5Na9uGEwC?k4=D$ zk*R*0-eVRGa2^H#QV1v^_YGRqbwO2OzI&Gxu*U-k71$KMyU8=CrOWyHHBgeVF@%uD zVRiWS-=(D%8v#=X2a+21O}D=oCdHIXeJL&TF%r=L#2J~HG4!}7AVNKk=0cn19KP93 z2*4%)6vUGxJ4k;0dN5o%GY1Djo|b6MB!kbM+VIFooELz&qfA>sl=;LTL>wXz@4Z3! z-!*RQANU<@Z8_o5zg4_-urU<@Oa5=H7=t|l&(+m+tjwB1IaMqiP~X4Fs%wBaA=4bq zT%H@Ex|K@LT^17)lW*p|)ZQm6*=+3W&5%@Jr+ccDm6tc0m&`5pCVTvilXsYJCnO^$ zZ?@$7Tu?v=)tuzWTl`mnE)HT;tUc=#UhGCnN?Pf%a<#doW$xtc{>gI2^73*cV0AQv zlaq6-+BI*KiJy;8wii{C57!$dF1BMPTSAHZKU8L91VyUaO_UQtxL00YoZd)K9Gskt ze7RXi(GkNS@9Qg$T6*Y>AZgT|?Q{!y?Xhtg)P)D>TN=T@$O((tJ-lWbhM@?4wXxacc5V92-$zdnlzZ5F@RQ0YNDwvvP=w{4DQ(`bKZhwpH#}VWp za6@i0k-m8)of9c{^GfiiAxn~P+9bu=VRKH#mAf@)=B4VpySuDQBB;%K<;oQjykLdL zkAn@0LYs^lhlk0&eEAZalyoIsHSFxnd&@(X=LRqDRVaSi5bV`8HFw3tB6D)scD_7< zHw{|8Qp{p1g3KQG{(Ts9k&rcI<>Vkg8v{5uQWAaYRznBc_uO!UkzU*O{)=}V`pN@l6w zxPAKyv|0*}9tBBC3UxBY;lfXyy}fOXjR@=!h#bcFE>$h9P>3#s@xEKJHi1ZrvXwO- z^^L3HMts!8p1bC+f`j7@0FP9^=!Q?u9x~>mhLG>LDk3f}E{1IWKt=}R=g?4-c}dsS3vaPGW|o^bV@GG5s=iIEk9{)^ zN;Zd;5_0;B`}=jq(2Ch`_x2mS!O2OenRk6|Ztm023T!#_v`vCSsBE*v9rVmKrvTrCXo=n` zX6cF~C}IUQNs4GqYbX`kz*YCXv?HG^?d|JJEuk^~{rx#fMBD7{F`PAI$}Uto-Cr&v zKrt&&m8~_JP830ki(eIWm=wo;{1`brtO1u@T2a9aPgJLX9CD9>f`X)r3!jK+`0tA7 zQvoh6qLq~uSR5zfH)Dg!l|4B1%aD4prRE@g~2YE($IXM6vo+KqGCiF#fmUY3Qq0GWbVV@y?eJ(5{ znwpyO*y&5#b{9UYffR+=Em zKYPzkhF4lvHaCzigTks$o?I)ppNY=T=in0*lwl+R=*cW5Mk|*=3I)+dAbD6bdnmo8 zh6d2VvuDpBSyIx{%6fVVL$k6KW$zs{Yz4>w9>Vha`U6e!ZA*hHC#;N&3~j)^z)W;% z{%UQ-gt#{2rF!Q7(xmP6^$VpK7aGIuks@E$K0C|;O?>Jo>;Oss`g-wizinWj{hS6O z2;dDH8D3;$q!ENW5{6e_N+cpFab?ed95+un1~1F}ATGK*8h}FK(y4jMff%#FfY_A;F-grnbDX!Lqq+Jz8jN zWP|`g0{Qs?JmI9&mN_F!OI%3C^iE2#$;madO?l9V|M?iicO4H4(Ca@pQEVI>Xer>F zjAVGIoCL%eWHTO00s4#0|w16rh0aQIcu9L40bCg99lx zEIL}w&rbq2!-_Nh^mV^dAK<49&kp@A4=;D-VwI5SrmyVC=R|1d2U*j+cmC3L97W1y zG;Pm!Z2v3if0OQIm|IvVr=dXx1qX%O$c?w*Q_i9~4{SsNdH>g#=lkhq1>@VvraeWVZz|$9JOA_zFWl)Dnx3KJ&&Ri6xi&Lhd3V^HUwDSXoD&l*@q)U6r2r?ye|UFT=yP^D(W(9>duzK#^-?ezldahe~l}##>ke==P=r? zFnBh*yxxoJwu9!y6GWq~uC64s{p?kn38%KMJXt?!xDIZ>zyZLSZ>?LE__IsKw~hRC zoW;4Y{;5s$x2QK>Sgv)bH{Nsm`Vw$zjd%T)eu%{QNio?Lf$il=+C}cv68_Bdql|Ua znESsr=WpCAJ^!Iq|MSmo@Fwrs;5!{Wp`)Jn=(xzRdSmLg<87muarH-NFWY0X{4K~b zVWU-}h@~ylDxHeo*O70&=U#r~*K~H^sTrP5nom|hx(4P2DI;^(O1g_hg5+fR-=CjX zZ=^5FdWU`x$?yoRruPXBVs+c7{|K%rvTijObp+~)Y5lX)e7$UEIdnu+AEDte#28yy zy-@5wswCsdDj@#v=)ku+cw_f`Ik3cJbpP*15OgH4UlVh#DYr|(4PsB&h%YRRDJ4 zFVOcE>Ty{Bu6_JCd&m*kivWe2-wSmsltm$}{`&PxfO#FjCBKcpgr>SW6B%CcFQAC6 zpYuM`hT_3`@7_@CyLaYRmX@t?8-5=^X8DUD7Q)2tGW~k*XPryC1vCOSjQv2++4XdG@(2hDIsDip>C8E7sn;T zm5F)nSxy}`T>9Ai;l=19+_hWMZJnJ8y?W)Y#&~F)tZ}+F9sk z8537hL%?Ri<+96XYeUyRwL~C zN=lJg`T3Fd0?98#-TtZOX|T&ZeR`ey#*HQyXq1l=O+Ly`q+OmZUB?Ul%>KR{)SqO) zrF(Ee`9Q-}l*(nqm0OQ;xjuisFdiKpy#)&Zgm{e_OZ>Cb)6-|c!NJwgKRtTz086E4 zbO@-ltY21TdyweswK)Wew2K49Hlg2f1$6KZyz_RO9rbZu!y$np&E`Kw7Qo9e?Q6 z9QAH%Z~uUgkH3F@em)1+Y@>1vxK4KjLW2|+bFA*AdxRdBVD*=RuV4S+ku`O5|7*6kBSltH+Lyk568`!gL0>q>`(_>-KLfz5KTg=rJL)2c-Z6 zPoR%+e*BnFD_xZb6t%+giFLDa{TjF9vbu^jJ**p(*~DJ=Oybd&=;vLKz=?WiSJ|s* zW7(HyNyOBOJF}(w;wm~g#wE3jEmbQ~4NH|i(cz74;x)ue4c8R>hwPZWlbfWIl^Mj( zQ;Gc7+Z>5F={kA^cP5_d`n`Ki$Y1gR@B9Dt0#FOBt0b`&+z}JW^5RmFAv&Yw+~Cmd)!F(k(~^iCqCBzD&XqO8*NUtMq<6I6^p*|*}FH{w;yY^SA??|xoBB9Hz!%xRDXp{ zJb%agCVA`mDRmgH2^T&3mNU|DI4|N(J6-zOOUgsro5VTjrBrF^G9x>W7Aq5-YFbI@wQtKCirR45=k+fhjE!|1Yz z2;t6hJ8-=%8Ge6PWvY8#PD-p_0D(UBmvG`{1{#^a<#RbShgXcr*+nIOBE3Gy^!Ct! zXbPE7+Vks(y_RKZW1aLPob5AF5;Sd`Kb{JRgZ0Vo_R1O}TeW`4{?J{#*rEJKFXInM z!#Ip1a$NbY;$9ZwSEf3|pKmOTS#9c*Ow~Rzc^4o^>hDHUkamfsmTr$Zcb<cU2HibMiZ`%_eQU9VN$Mu>3 zs`DHJUi8m9!dIBok6w~s<;qMvB*EG>Kpi`p{Y7c8~3^Lrl?8kpBLNuIas z$G~l3F!I*YzjAj${HYsNq%;m_g*q@ZgTlziB+1626}RLWb#S~$5+qDTdS4*@O*I!| zHE4#qxne@PY0Su^!;-@dXNjWKfm3D(E157h^BT~C4z=; z*dAk|xv?naFXJ#?&(d1%@yCuHa||zgO7u)9b!q1V;pUEVP)V8Vsj!%%ATj#c^^fH* z?;V&42yNMiJ2r{U%=88!ml(e3~(;!DKH$Y^#4iahn=!*+~0SB%z}^X{XBfB?E8+|_I=(;>V+?cYCfAhu-dt3m}x|_Kv zNC7j@*4)rfS7nKRs#odIG@)76p}BgnKB4s`D=XL=c?L^H)8kMs8s}3Z)U2j)srw8MwkYg!*{glRHA16)CUxQ&`VX+|6PD}fMeFSE zpSe7mj|p`VY@EQwxqHBviJ}&{{g-7@BlLu7q(dBa_m~6)52v$Jy;dd6X|L<}QdwaD zuX5l+a{kXb4tt4@h2L(?4~V&`UFd)3m1)+t)N=@he9w*^;kzOrAePS`FQpM5-}9j1 z4jK24XH}{H7lbi;SBaAhuVOM_Jf!wa!gY1{E(0wRb6B8obNr~q@M24O$jw;v3YP!j zw8!SFJPgSKOiCegUd0p>JG;?e^z1V4crFf}Jn13+&l{wVfO0AXMj(_oh{A6v_lZY` zG<@w*{)CO@%LR6sM$(+y{$%%_Et5&UuG)4_6=^$bZ5EClM&G2+{`{Un0N00(pyyp| z^F7oDu%a@{=>bc3~6>BRWw6fG6il17QQN#H%S^N*jKcKXzz7x&75g;^8+V=yM zR8Mn6MMZDKDNL5~C-(v=Mql!Vgv-;QN5wuH0usoR|^614F(h&G$uN zGauI($PZ_k$5T<4IrmhptsUc5VmN@RfuayZMQK2@z9k`;q*Up#&Ge(Y8w~;Oh*glhq%uLMUqB%6|b0b=Yw_@B~vGoko#C@oN{?Ez3sp;_X!-v2&lP1t@ zK_QHiw6GWWBgyd-jfCFUo>9fFVq*Jbt%&)~9ei3M9AKK58k~EVvK}S!h>J%<(0&Gn z4H!f4aZoZabO5amdK|P6>6&@lF@9$lK<-!io>xz}>Rn>^gKYQw`K^m1`K7(*z~upD z3M9tx@KIUSTW*Kh=}_t|+{U${hG^ifLG188NOIoVMx9ASZ&wp}Px8VhPmU=im zX}F*C(o!;~D%zl+ARzeQ^uTd8Cf&0b7#$5&kvM-VmY992m8jnB4tve$gry~``ChK?v!~_}j-+iU1 zEDNmuF-Q4>~@U8%FNXcf(1ABSy z>WMntVzF7GMj%Q;{+O6Z1cRmI{aNkj&*;X+#$jQMzvQW?sL&F-+m@HvfZzj~58MF2 z)PFN+!-EHHW^VqbBPKffb6MH-l#~=oN(Z-nv8_f7RW>rS@xnqbl(q?6x?bTLHJ4Od zS@1ZH$wG<$;LHp$QE1TCmV>OUtkI14QtIu(T47PjOgF zJ|cJ~Qt$om3J755jo=Z5VgLtuy6L__`gZ`tVrGzIz|TVrQXhC8FzI7LD=URSa7D5D z_wUoe2?HS}F^I+d!8`$e+}NeBMMa^&)k6C@_nv~|YWO$1DG?C!V?S_xFDDA*Rd}2+ zXasy4Xih*QfenwbAtExe6)Z}hM%QkT;oZ1ON`nC<@`kW*QvUnZwY9joxB%#~ax~a! z#XLwbFfiCSIBxcXT<~gp+wtwYcW>fu!zzK}4kh=3reLN+9aTOyj@^dFliZ8qXhBE^ zvXY2iOu?6x46oRtpB~HyzzECAUA2t|UhyU?D@v?%a=N;|zu(!@Bm3+b72Gar5f!r3 zfu{T*rUj-dc&_a1?48RuQj|MDXl7E<_&i|zV`jN{GwS8-+0O9d-}S{4{N?+^-d zPh&>O$++n8DRL)%F8@ppTW~vk+u#MM0}i8@*hjK%{xfslBoZ2$i0Eh{pbaEJ3S)_H zva1N{Uo!RfriEk(A_eSPV1_O2?OE-=fY76)tPJk6fdXE2_5{Ed@<1~q7HHL-nEbN6 z^V^fv%6hJ@z};Y>L?@6hfjZu(J2ZIv_H844E;u|2G+WGg1DcHBWJcipv@7WO{F&(^ zWD{U$FjJH#so|^;GC&xE4Fsfv&c40_k8?&+4O?N_Xx+}APjy36Rm8S2fe7a1<=yIH zO#`0`Bb<!`1wt1XYe26EQep|x=8(g67!fcE8m3Kni=hQ~Km^x3 z`S}?V3#t0c7Z$Oztrig70p$7rCu*SuH8sMv2Dv#DX!^Jg4#Rp{xC1GO>?3cJ4)c=V z1h94gryoIa7om!X?0_EBxHp79OqV?L`NQr{AJqf9K2}xEl-EtDdX`+p%EMQvdl1J| zVTbWB1~c9?Uc1cqdSAUeIS4eKcXkJUjbW>0;);nAXS8InHRuq<4`S9#MH4G~`|s=i zGM#$os?en%rD;Ge?!6=<+wq{qs`$^(sz;p$se}OoRYK-|?h@_t9e2fe2%;1*YI=#1 zd$HBt;zE3zI@w&E`{=NRDc1Vh)bXIM@{}PB@5GbbLRYl20K-7&-Ou)wJ#Pjj+pajCPv%5P;_K(W}mqBe9;F0QU|q$sHdWoR=g_J_dDQjaU(2bUXI zhbp$wq!@FE{3RJB!K?D&!-s*1iM2)Kqp&kJkkly80T~_^l|DNc7XS$y@L2(E=D*OL zm;vPt{1zb6vfaMj)Y#~sTn-QhCEs;zp!-*5TU%Q{%(emZXMX0%>FHevn!FMUqd?vS zc3@PYodJPR9xj{e7zw+38ww5RDE{iXH*0d)@7w{QCjh_*Bs*}k;s6OXR{G)^Xf=ff zb+GDq>8c8;c|h&Qi0$A)?O$PwiHXVh{{1R|EfBmQ>zcKov}F*qB1W|6-lDyO3^`G5 zD+9)hlarIqP8`X|WDt_%tgP6Ft@weTyUWM-s=ZxKuf~lK6{=27yucuW9{25eH#z7- zdJVpGz=oMUAV%3EP!1OW9m4Go(p5hJ<^gaDnH&rhlA7ejV!nok3;;%qc__c(9(m7v zh-B$x{ky#W?*Rm$$-F6~J*n|K4-73BLU2Ov-lPij){Aa^E35D_OQF}r!2IxHijs;_ z%Hk0#Akf&Pt6=CZY6Pxj> zD}r28jo(}-yWhM^KeG~co2-*9ORp%QpuRrX_U2teNP@LivsE!u z1tZ1l+gO=(>iIL@>05ppQ|@8^^D*MS`sC{1$arwGYjDZK*$`dlWAHm4Tw+??l8o>A zOYVh%+Yg98wxGKTmL^kBf+D(!3*=8omXK5GW(4}%ySW?AP{unyLHRetvy&L-YluPJ z{U$JioyG?jVlGGcHl9&?IoBI7LmOjJ3ewl!gUtC9A6pSc- zD}Z$?20MS%Vb{YOlBf6lTZPh`@W)Rl2Sw`YMnuv=O6IzKx{Y`mL8#T$jVQCm zsQ7UV7jEc#ypVX=8JOlch-!Wj&l|XFv-!=kcHsw^DV@B5C&xeiO z2nN1q&mOv+Vx!zpbf*A1FY+lKiq6@1+Xi%-tBY>V9CwDRD4*Hha2wVfmZrQRt2y0M z=NF01tZnlyG=m%maw6m&bINPbTlDa-fUf|`P7lky=4YvXr>Oq2)jjp3Pp#vnpTPPS zo{FHM_WMH`bx-GO=(3$@ZA`vlB*7{H4?dv(zr~%e&|punJ0Fi|{cO2*8`DFy@NmyN zI8QL4Va-#6{V7{1*5p#IF6k@J)e5aMqO;sj$jqj0oq5x@6{^f?D&_=Y(}|%o)inJniq|G_xR7XgM&rau&AR1tQR)JKM5o0j6hzH zC1zoCx_CC2jUu>e5;IFCK3Jo%2TUb@mvX@?UPSjDi6^jl`!wK|kV;CI852MivczbN zyE3?p*!nS;C+Hg%J$1uG1P=jmMsFqC&9Z_xN4!e zFc0+qW@^T<{i#e5a!1n8tiaJH$ZcDnke>oaJ)$ZpKY!UT>Klcl{&GdwY?pwDs06d# zHl&6hs#F+=ND3DSKFcbIWX2!?ND-H0z|Tk)jcWC5mub>0?fVKK zoXBy%>3tTfnDsLTNPgjGv-vwQ8yg!H5FHc|kz(z$BI$IV%$n7tUUU1;KF%VA^FOyE~*G{E9ee4x5jnXc5eYJuH1~IbhlBI3By>VwtM~Ix5y67Hpek`A+ zG10AUdO8tCGVzC#*>QUuy0-J$=Trw-%ZhNvIO zh1Mr&O?1sAqtLV|=Nz~rb9`4Dr7((#{V^0L8n5knuBMq<;{K$^CqrPw2Q9z}A(tcn zSYRpa-$gS1eOLh@Ek+RLoKP`Jj$_Z&8#l@OR+`8$jZ;sSCF+k#T)?eg63Aor9n0&8shFE;pW(WEC-EAj~$-|f`W z8Mrblr5wP-Wj<&NANuK>S$EA2d+;QPg?o3hB|@Jp)u|)_YdVP zBqx0#f`yUl>-})yTevH-ap#~^ zzdmy$P&+JI;(X?b4z}KpTY@;V%Yzx0b-+7hTadb_0nT&j(0s#39o1r9f+O>S7y-<< zD$(~*cvqL$&~r-B=TA7RZ>9ZAJq5aTl0EnsKdcF)&=Rr!<&1Y;>O22)emHZ<4M*~W zhD*dCepVDpM0X-(#JNk?p;?MFnwRLl;L}lHWiqUEm?H)oLSKaQ%_Mh;eVI@qpLK8+ zNZ{u`uQ%nP#EkZwvJp5XkCMY**&6{ZPjK3Mx7WTu&ddO376RGx51`(U)`^1;z$CLp zH~w8azuQIRerEI<3>QtmJl`L^d>(ysm#A>E+I5qn;qv^_i}UW?5pp^@>&^A`Olv-N z9jPX(JJ1_AJJSVqTpPQ0&)L@L7}M6_TUzS-_a@K|lpOB64vtvevOV5;swt8Zu(+s$ z9oi!A=9cPeW%WjYXFy&>L7}{@HEjLrLqYvqjh+wXB_&TODOkb3z`?>I*AIo=+SfNd zp^E_gHiSVfb2mgqXTGX-zEFR`4dQJVJq3k*yyDAcyf!jUZu=~Lv5&#+?N->yy$_W8 zobuF#AH*woEt@!g*5@!VhvQc8fB7E@W3$>hw5KUDT*1ezgyM1{K-j}C_ ze(mY;$rvPbbhaP|dv?0r+C~T^JJ;uSk4vuqH4sJ60~&opU*J!ojT;jYbU$2_|(+<*5jR>mf%#3-+c0b#wYceKcRKM35o(N@5f(T*I&Abmdd z>qxbXWw(0J6~?KB`~299LaIJ6PY9!oJ$dWJrVPW}Z#dnrL&t8^vwt6EAXN&x*Q7|! zxyb@<(6zq5;!in8vy-s=j%`?Me^!bRoq&E<1hMF=bDqFVM@$$sGyV~IbK(q&l6i?#p8i|Olr^#a+uq9L+B%s|S_Dgx z4EM~#iOemQ)YN2%LF`o9IPq<_^T&S<%_dA@p!}9V&u{hI`|B@*>PLa61ivTZ50hA! z;DrK1TYydh#3A?#0)N|t=oEx#u(ze&f4Nv|03Im-swjm0<_&s8TVQG`Js{u=fS9le z@m$F1j(D*gn)JXy53)R}uYg`4sR(TSV46i4!@$hd2Avno@tByJf^*ZjJa2KXA__WS*62ypa<#wYe4sLjd2g}VS#78qu5UEC<1PCyeU z#YPs`GWQAPB^EzoL}I;olayc@0?cxzmlx;ISb~Q)2z+$L#y7zC19~)A5P$ysIWRbg zmN)VmIu)>3_j~CFHTlD=9|18j>Rkw~tyaEv0HAK*JD`&h(Ee@kR(uug&|oM7!h?^W ze-82q;t!K4aH9GDInYtOD!te84Iq}KxDrt`2nyFj8v!SkWg@+L?b_hb5C#HdiZ)2~ z`J-jp9F{gVuasC?Kv%&LNr?s?5D2VK85tPB@{QFBTRtk`eqElB&{}T`o@kV5v4vQI z06~3Ipj+VpqcBXs)TH^I+^*lt;x>lv4U7krR8&nMdk;=c5vC~PK+^@Bg2K(KV4j7G z%BZaL__a2^?gln+Ak&TeQ}3H4kpV#g4H%4VnvNFgH~lEjD-U}A{OdZ*iqY~+L6Y)4 zo421!yF8|$qyF z<><<`3&g2lGSGuC$?$Lrqv!JrAn?@;4P*GNe=%}%6W`Gk zI+S)CdBR3!0!s>JS|ONgfm6d~2~1DF0p>_Z&op40qNJomLR-+1d)vVP<5>t#9LgMc zJgOh4z`lS+RN7A83S4~j^wGdH1NV%JStnIFpYVUZ0B^o)bHEgd42(a3+@+?i4OAQn z?l+*~THD%SE4<;{-Po`L`tZ}&uXxaGF8}){>*gjPA}R`PBqp#;0g^~k&+kU($s*`n z&GuUDDwrXLpc~CBhmHk^M4&fens?PaaJuJ-AqlV;s8w@xyzAuTgfjQ5Rww`rCSWJ8renaYt+w|&8KU@!?kW`^iCOGHg@->ncX8SfRx#~`_4qNrrCnjm z>?cfpeOpUw>sOk2O>Get1HXQSg@*%E=v7)FD8;`1Kue3p>!qmU{;DTi!V{0(UI`P+ z&KDPOWNbNtz zE&xPBW3cmji!%^l2jyqN3@q?dV5=m7pAO@=piwidl zL>>=ylwH4S?3HTg=K?iFDGOdReP7mrp1Tp>^$jdeAa#Ig7l?oO3cC}sBgldT(&^4; zddkW~%4y=L92ekEDIo{j6mkWS?j^sK+P*a0ji#kc+`xH5+<0p z8t1o37#N7*@xiLY=n1IUXfOc*^FhbO zX?-_96gZBBx^QU!ffz0M9oZzcRQ&`l8%8=IS?3fKU`YzShruuuDXUZPpY^z^s(pF?iPOP}iHONbJxH9Wxh2$m3z*_k+KCB_ zz&8#!<5vIB&`=P#*?^RTS`1$L@W_vxf#p(Z`lR&qL@-(cL6h9ONPfK_Hx~_r-ZF=` zsQLp_W9TS8--Qq8${+wZe-{^F%mqrCge;5>*-ceHNVWc-vl|pdR=+$b3gB=@dD~G0 z-0*eDZ?0Ii!v}-%4dc|E5h8qGXKOFFefedx-%|EL8+?>xdTdZXMYG9Wl|+1LhbnK% zC~OFaEe~|mFbJ6wd<6Xv5w65X2Z`mSrKpk%Ji8<~F@d*)vA=INzj;y92cS)&-sD*b zgF{ecQL{rpLn~)z0GtC7cdW*p8)fUC!C+*UkzX4jy^D(oJBWPYMSe)8cnG9=E>c1H zlwu^Qj0%M~2TB)p7D$rgpL|pm zEE)M8UbDoOw!HeM^`V&PI}6?NEbZ?$*5BI?LqB)9T@_u{ZXZu8(_U7Pm)E74E9tiv z(c=OqLTqX(YUly@a)^rgxljfox=1S;NS}9Y`hNK$WQa zf;E1O#wse%Hwu7x7e-08G8oR;T=IK*dIq+q>;z%%b!T@seP~5hN9T2Itr$1~LVPn= z;%~bYH>q0BMMk0>!M~ai13(vYECAuqR6~$9L2}(*xA&s~Q~=|V#OFSbVQdR}1DJP# ztP83=;OE$s6v8B>koNZWoEcjfa)8sne*KyUv`?-?e3);AI+CmL8vf;o&tJc?zm=~u zh{3`qZ(MPaW-~K$-RPWIe~v%;DP<;E2OGa1M$VuI; zoE!#SOih(J^t7WF7e!oL%jN=bE^s`=#9gZ8Y^J=pZ(hBvsQ9jVZQsbn1;A20|Em3p zd&4QCj&3sidjoag8!{>puDm!&9{m0L_4EJ1?WT zU6?8$ZDf2%e9C?uSj*vyCYGO_Ux0L_t7hk?j#Bfp41DSr+3R6frMHn;Md-WvsdJM? zSQ9kB2W4W94<_&z1$JItOPYYE3!^2W2KePHJeG3G>NWzR>{?Ruelc-=_)Pedvt8_L zpb)RD#JL9&F1_nskh}hq^lzFv5UP@|j)t2CW+$4|`4{>IJip!a?GP7gm{?TgU zs8OK+8%6y|22L`TA^iIz*Q!hX8y`siok_Yw$QB)Ud*L8Gw4CdBD9x?oFGki+GnfJq zSgkrc+qz7%a-E%gUNHfqNf>217~&EGKMgdv0jcwGH|Oy?Jv}4Fk*6 zcyl@>t{|_64B6(bw>0|y3j6A)D8DG$50Gw^kS0eKm?Q& z5D`%jB&2g_lr9PBmQLw-XZ*dl-XHI+_tu)lVrIT?=9{_qo_o$dd++IXvC|T=;MdW( zb^8aG@66qoB=pjEU#Rn8bDR(5eXd#W%hho|mAg!TP4%Ky^k*$3UuWeKT02lDIWU4A zEz-v<&a=39+hTS%Ss&jRPxU}i#O$}Z3z4yZSn?M;S^xI?sjQa>CM0`Eb&a{=6c9Eg z7NZhk-#F~|3_Q3D^n@OlbrUs^QWBSyMqX8zUuxbORmYEJ@;yj z80lra8%0w-nS>J|^F0w(3G(GnI%Ayg+`+ob%NmDmo^J+88<>bS$b z83!>hEN3-wKBiiV;k2S73Etl9{MIrv_3PKKp!t(n0Af3#PnKHt{IX(t0k4UWU}*}H zoZ#>0=U3srK#f3dLGwW~NgQwd52B>?GBH>NF{Pa$G_wR4}b}h`{ z$T&J~R<8Q-M>!^-)$i>NgV?caFm|jbM)Y{8n&;$zdt$T>gjhh4AqpB zlzzccPFNd-snuTI4&595rzgzd)?#GwEpx~?=d0NJ-ckLe?ir zRY&VSWeqkpKR{X$&&kc*QsKJFY5MFhp@+PD#B?*gy}(5(p8QoH|L#ID=ySBoT%6Rw z2}Uo>mRi>$Y)=k5f|r)~=155wx-vb2V|xl2iagK&AUU+W8K zdV5j!hM~{a$I1KUZzTrW&RruhK78yN^aK8lnR%{Fen4!BGx9* zcSKO`nl6I|6U#dX5@|06^Csw$vM5Pf| z7OHa%G!>^<(8;}JW;drjeB(VC8^eOz3`3jNBZ}7^TN(ToA>@>=x6@E9f)6AKS|l7h z=T|mG>m5(KFprQDw6qU(T*;++hNWsGr;e4(8Z(k8Yk;(;jS7Z1(VJ=^s?2IwW@K}5 z9y375lYVA{nS{bMY|WWSf)rgwCqpaGcCYMqeGP#p!*;CGCVS>Yvp@H&(c5u=faAjVP&*zWcr#wdLUi$9L6D z*okEvdiDhPT|&g<)cQ$2jtX88EUhL`y})VIlUzYlOY(u!YW~&wS?X5oBBR@= z+xqJl%6)yHME2Cz(b;E;Z;MzKu3cJMss`D4&;HY*z6xSvP!-(J&NDnY8B!E|0fYhy ze0%$(`1rkG8J7GOq4$vD1wfn4{n=<=-!)_as4O)fKTbzu4u;<5)4Gu{tK#1i;Z4(J zyrg5@-5Yrr+nOfFyLXq}DxJn!W8Gey<)$`@eqXfCwH_!l@Jnhk)OHx#?w#FNFR&3C zahWIQJDEzH6on5fkBd0x-Ym_^%DM@d(!?uAi9Ya5xl~@xYUp?l=qta}wswl_wAka@ zL<;#!muIMyV8gXanq7QK1z0D`bLx3lwW?_XI!4A68~xTIr?xrA!jkbqk+pJ0iw9LW z4mS-no5pPTkaLLCOE(J2R(7VYpwlzPglRcNA(pM0&(5r+g}-8Gu-N*jAL(n_nQ}i~ z%SXL6e~wj)yRqty?|8{M4cAz&3a9KhI;o%lNRm@rt(&6}6l+1YhK6Yg7U{}u2y;KYDt5{6x;%3T1+i(+D8EU~wtvI2r2 zK6-*YZ!kPLnE?oz&`Sjvjs5cFxvSc<5j&@KkPDCMD1AeD@1wTDwkBOrn%|4edQFq_#DJiN10{Z_ zmVZ5N(A%{eRCe+75>oc{+f1eSN7AE_;%hbROCAPq$%3|td-|Z|)es5?T2^-B4JHt8 z-&trdDXEpP48Ep^8?7TeRW_qZgQ!><=Fy0|tu+G0TEKo>0{V5`)=;g>1Epx(bD0N9 zeo*PlW!#$r{1T(gH~dF>0Q>?fNFWiwtboQdakO$E4u1Wf5FG=O2y%~2jAs=tW^3C+}tTqI+89`2=^K1es zu>0A`9&qv^|M~tzfC~Xe4GbO{z~b8nCbfJE5!0Ymas8A7g1}e+Jr5{nw5_FZd5~yU z8S-_eqDLdn=MC?BEWP5(-&v48y95F*3?|k-zp)|+wJP9BD=RCR>z;tLfZ2ozfFpo3 zK(Xt9VgQD(9MnqSR7MUCN#s%lk(Ffg15*yQR-~gz9m{_|!i0k+eajz9<8L4e7yS>P z_JXE+!RgoNa*-+SQI6Mqlj(V1$eS)Vm3hzo%^z6-b+Ln3a+LDrGRv};BoFY!M#QeX z@UeF0Ug{i3GkZ!{bf8OnNV?%!?J$Ict`u0H_3t|!<-H-nL@r_16*y?~kRDcu)WQDS z?t)cOasT@UC*IPE!RgD}vNJ5Fr>7GFW^{66!(z1fuTV#Gj~Ir1&Naw4WJ+sCMot{j zs=VPy!2cpT5=Df(=>|Rv*j~twEDwfQB-jpr$AzV_z0jouyb-7dfOZ}XdO{fbo!wnX zoT1&z3idEikwamDA?pAQ%TM;Uj?70bFD${I2@}Z#=zaOr>sH zoyfZ$Y>cj1!f=0yQ?L~3MF1a+yf$$G?AFPVX=nuIIv7VlWSDfVgc>9YWX%AT0sfw& zTTBF9!6qo?Nk@oiMCdS-Tz zZG-L><1|JPRNuV^W`;sA9e}+v>3{+Z0&_Ak4KIQ`%rgY*t7|!rF1#oFvwfiP;6V^T z67p<>IekrFlHvfk^xPI<`Ni-iRj;vxGrPNt;z1WuQ)KKd_&OP+1LA#7wgO+AE|;Il zJ-;LFT2+oy_v}38iRm{ch%cL(-xKb*sfM#XRxuYw)U%a~-bdjRAG528nQOLL$-G<; zrBlaqJ|3%lf7Vx9rhFKhCr-C+V1{gLb!>lU=5CKxU*LR&x!1u#yrs2WLoRxy{*-(# zy)>I@z%m9_7 z02rmmfAf4u8Selu(MD8BL=Q}9Lvm~3drRuIm^&H!eN{*Z+>hF$=>uiB$^G_z+UaP)qfg|)7N%LkN=qjooR z_4IlmMOY#-{_%=h+e=DX>pFH%`RekryrH4tpGKxx7%gxC0arnJj`L}NApr~oB|qE% zr9(aZrW*tjyr6OR*xOf*?K;ebAV$?LY-6sqvs2x&_|4@0L*4-X(7&yCol8BGdM{Tw`Re`3Vx;4%VqbX1BuL6D!_tZ|=pz6u0rmngdM zrh0H<(l9WH0QGRD_nfiRAQ1Eb<_lH8PVag7?j0Sl@g`v;fs_e10QNBZB9!<*Xantg z!DD&%l*@1+DZMDrOam(rund9;3V)%olJn3yGs6OKG6-%=kyql3+?p4%CP3*5t6UB= z8(_60-?cD5{}D)XrK3*7Ko)@$Vb=lJ0bo>La7Mre5;y>i(7e<6Zbk^<1XzARV20^h z(Om#@)A4Av6o{@N?~VdYp8(1S$OFKJuou(neFg4ww6Yv}lQ#5`ounPPpw^{7i+}u7 zdF9m&$@EQmIaJ1(us^@M6F^aO@&qult#PrDx<4&RN^F`}FCv z@uJ$Dg4yQFf2@}4Kiekp#`|9_bfjQm6LSW=B>=Mn>O0-hI&-Q=~|D^^tbaB7wp>A;F0-LlzKQAndVdGijk~C|SPd+hAJ<{^C)%Cjo0p|}mcTBc zN~INj-j(vh)>i11pS0m^>#iq^jz*5}9JLS%L1Km71woF->tC2Wf?7WWUe6s`xwLpo zeP}xDsW6^zRAUqt3rfIUaX#w`1*LD%OIzJcPS^7#4k?6i@*7&VypKBxejZDN98P|h zg?xKZ&4PnwY!3HPhyxbwOVjJlWK>8X2cGVol$-qu9m$(Gh^ZJ4XHO3;vQ=y$nv?=L z1=``SWa1NH&JSyY09L1rSnF%KE3TEMqO-0J4*XpU+nWfiJ{PC*(E|78^ucBH*7|_Zd;znhgYa6p z2pO$&H4`5*a&a-t&QFHFn97s3_p^2Q^1=nd_yhLSM3fOvjdzHHO;_X1IP1r=%hhF)QAJqDxjkFDGY$iL!*M-2-&$*Mv z=-A_rVOzKQN&9#v zX54&E?=<~Froc*p+em+lK%8IC z28;xZ^kd5q2-)EpN4QbM=Y+XS(C8u$v9DGw84Aq|yljEu_Xb=3@tRFO@APJolb!~D z7sZUueBjm=eS7o>OqKdqW1D1?g7b3HOO^lqgSDZEDTbfU?Ph)PzM-f4(mZy0`j#fm zWnqG-s765=^?QZC^snZcXTuT07OCy!hlZgG8&fYXMPsf-d4(a&4Y}VjEVi`QY#b3 zoM=j7E2~bKYq6|CLd1!Qj|xyL=Kx*$F-MfImFSercX_l8R5| zJM?f!sz3->1KYXiZ+LT?TO0f^bMo43l8uR{CwaE$x(niPwKV(TR7NLeHJ3Yo(aSa375iBc#^3UTaQ&%gBh2Bv>j_ zYZw}^;Z54IhK4;?0E|pxulrw9A#{$VHfzgW0#ttsn?Kmkxci^*SMOEU&24>r?_6mx zxw&6JM5(4$j7G1PeAjraV1NWt$j!%)OSwCrs``BHT4;*n*{fZsERlUabN3W6@!Z1q z{ry{rOEdLSU-||3G99VG(B{BPw*B2wqM$dIF@)Jb3c)Wfu7}Py8H!rOUk?X2)fWyA z=X~)W>Bp7%H$CSQuM};*ek@9dzQ_;T59SRA28dhTTlncCjEE8-xDv2Bw;H%f4qaTQ zHBbMhx4sxL`dQ%Lkr&YuU1QZpmYdmmHDy=D#k-Do`q1{z7c(ZzehsERwEyj5v0P$H zP9nKGR2{CU7<|hfUA?}OD0D?3ujUX<^Tfis1GJM?BfwiPswmmj8mM?SVN7tsg*21sb3wO=)9u<}Ymn1~3?uC)h zNrO;q?2}ZTZ|Mh6s#p)&)o_dJ^=UtNrtjRwLoZgdSFMDX>TYrb?6c$@U?Uk88%}h9 zrEzNP6Z5Yjsn6FUdGgSw{vf?Z{~%mDntgjF>SOtX!(%Z+I+c-5un_!{e>!E{6WKc6 zw$}&sDvc0WKz}tT{`!5}51*-efA%eTJ2Rc&ZSar!Tlg?L9PF|rD|FI+FuXXJlTPWk z)S1ubjKWNMBNZIvEW_s^Y@CFd#J=#5iVVaoc!m(On-Q>bU}<8(@C0(O=n^GR$o#!$-Rya*nSl$~A8iom#-8`-au zll@P{RH@Hgy))eLat2gV-HyE6*No1>Jl7nQ@H=<+aFEw~JClW->h34r$t$Z((j&ho zcibIr=d~2%@(zuzalMfGcO~cjeH;AruQuL`B_i(Yd+c1;Ki|d@IysC zxNW&<>NQyc0~y2GAKyV{S_z;0YDVzFjQgsk14XPbm@rZkFGVQ6@{m9c{0b6Fr<L zwKzOI4?*@F120j=x0;8?QXnxZ{*AvR4^QUWa>MbCi`UQ)D#HtsOBl#BhUF!> zzDbsQfpSF&s&FXhSe}o|MJ_p3R8H-in}^YqR~6V0B&5k-j-wtv_bkU1Qww<<_1#?) zO;0f?8!P|5nYvp^q%9Q{4i$OiA~-lhd3{sGeP1*)H9owsB* z3P1mLc9ZSFLDa?pybP@q3PGgM%-(QAs0Ix}+^nqy_;`4B#?@}!LcPcuskJPun|ATX ztzC14m?_&hhmmwIZ(|{i5=`)=ons*DZ8RA*dWc7sL|WPvQUz^$`27WPQrX5C*86OA zW8u_wi-b8;vs<3&Gc^~r{p7I1`v}uJf|Eq(hQ{n@a~|sF-K$&QGp)61^55Cvn)7%5 zYXGYuDlbwl$fTz_BV(jlT6+Gke}_rk)TRtitQ_k_6Eho_tK z`R%m0+i7a*WYyB4E%JVHexK`P3HT)A!WC$l=o`K!GoY#s-Myq>5=Dh8Ogf|B9L*0J zGPR^RmDHiWJxg_^R_7Ot6xg z>Z|&-l=opix?g>8EsY|y7CT?{n_{p6cF0Hs6Lc4rsJcDQvA}VT*eR&%#t76ytzr{=Ll8C z|0`Pj&z$4Zw!4c@PVVXbsu|R`K_Bb(Wi>3{>7t_QrzQog?>B`>$p)IYw+Z1JRp{}p z{Vnf}a8EO|o%^>XK+L&@Nj9R+VKVSQiZ{NQ$p1eq{O^GE-^oLn=Qi+s)#5!QX=rcFgJt^#)+ANNVtC*Aik3a3KXUxBtTJs;97QqiKA&AN?b%k6xWB>mF7dmJI literal 0 HcmV?d00001 diff --git a/tikz/vgg-16/vgg-16.tex b/tikz/vgg-16/vgg-16.tex new file mode 100644 index 0000000..3cce319 --- /dev/null +++ b/tikz/vgg-16/vgg-16.tex @@ -0,0 +1,73 @@ +\documentclass{article} +\usepackage[pdftex,active,tightpage]{preview} +\setlength\PreviewBorder{2mm} + +\usepackage{amsmath} +\usepackage{tikz} +\usetikzlibrary{shapes, calc, shapes, arrows, snakes} +\newcommand{\width}{0.2} +\begin{document} +\begin{preview} +\tikzstyle{input}=[draw,fill=red!50] +\tikzstyle{conv}=[draw,fill=black!20] +\tikzstyle{max}=[draw,dashed,fill=black!10] +\tikzstyle{dropout}=[draw,dashed,fill=blue!10] +\tikzstyle{fc}=[draw,fill=green!10] +\tikzstyle{output}=[draw,fill=red!50] +\def \coldist {2.5} +\def \widthb {2} + +\tikzstyle{stateTransition}=[->, very thick] + +\begin{tikzpicture}[scale=2] + \draw[->, line width=5pt] + (1.0+0*\coldist, 0.5) --(1.0+0*\coldist, -2.2) --(2.1+0*\coldist, -2.2) --(2.5+0*\coldist, 0.5) + -- (1.0+1*\coldist, 0.5) --(1.0+1*\coldist, -2.2) --(2.1+1*\coldist, -2.2) --(2.5+1*\coldist, 0.5) + -- (1.0+2*\coldist, 0.5) --(1.0+2*\coldist, -2.9) --(2.1+2*\coldist, -2.9) --(2.5+2*\coldist, 0.5) + -- (1.0+3*\coldist, 0.5) --(1.0+3*\coldist, -2.9) --(2.1+3*\coldist, -2.9) --(2.5+3*\coldist, 0.5) + -- (1.0+4*\coldist, 0.5) --(1.0+4*\coldist, -2.9) --(2.1+4*\coldist, -2.9) --(2.5+4*\coldist, 0.5) + -- (1.0+5*\coldist, 0.5) --(1.0+5*\coldist, -4.5); + % \draw[->, line width=5pt] (6.5, -2.8) + % -- (1.0, -2.8) -- (1.0, -6.5) -- (2.0, -6.5) -- (3.0, -3.0) + % -- (4.0, -3.0) -- (4.0, -6.5) -- (5.0, -6.5) -- (6.0, -3.0) + % -- (7.0, -3.0) -- (7.0, -7.0); + + \draw[draw=none] (0*\coldist,-0.5) rectangle (1.0,-0.7) node[pos=.5] {$224 \times 224$}; + \draw[input] (0*\coldist, 0.0) rectangle (2.0,-0.5) node[pos=.5] {Input}; + \draw[conv] (0*\coldist,-0.7) rectangle (2.0,-1.2) node[pos=.5] {C $64@3 \times 3 / 1$}; + \draw[conv] (0*\coldist,-1.4) rectangle (2.0,-1.9) node[pos=.5] {C $64@3 \times 3 / 1$}; + + \draw[draw=none] (1*\coldist,-0.5) rectangle (1*\coldist+\widthb/2,-0.7) node[pos=.5] {$112 \times 112$}; + \draw[max] (1*\coldist, 0.0) rectangle (1*\coldist+\widthb,-0.5) node[pos=.5] {max pooling $2\times 2 / 1$}; + \draw[conv] (1*\coldist,-0.7) rectangle (1*\coldist+\widthb,-1.2) node[pos=.5] {C $128@3 \times 3 / 1$}; + \draw[conv] (1*\coldist,-1.4) rectangle (1*\coldist+\widthb,-1.9) node[pos=.5] {C $128@3 \times 3 / 1$}; + + \draw[draw=none] (2*\coldist,-0.5) rectangle (2*\coldist+\widthb/2,-0.7) node[pos=.5] {$56 \times 56$}; + \draw[max] (2*\coldist, 0.0) rectangle (2*\coldist+\widthb,-0.5) node[pos=.5] {max pooling $2\times 2 / 1$}; + \draw[conv] (2*\coldist,-0.7) rectangle (2*\coldist+\widthb,-1.2) node[pos=.5] {C $256@3 \times 3 / 1$}; + \draw[conv] (2*\coldist,-1.4) rectangle (2*\coldist+\widthb,-1.9) node[pos=.5] {C $256@3 \times 3 / 1$}; + \draw[conv] (2*\coldist,-2.1) rectangle (2*\coldist+\widthb,-2.6) node[pos=.5] {C $256@3 \times 3 / 1$}; + + % second line + \draw[draw=none] (3*\coldist,-0.5) rectangle (3*\coldist+\widthb/2,-0.7) node[pos=.5] {$28 \times 28$}; + \draw[max] (3*\coldist,-0.0) rectangle (3*\coldist+\widthb,-0.5) node[pos=.5] {max pooling $2\times 2 / 1$}; + \draw[conv] (3*\coldist,-0.7) rectangle (3*\coldist+\widthb,-1.2) node[pos=.5] {C $512@3 \times 3 / 1$}; + \draw[conv] (3*\coldist,-1.4) rectangle (3*\coldist+\widthb,-1.9) node[pos=.5] {C $512@3 \times 3 / 1$}; + \draw[conv] (3*\coldist,-2.1) rectangle (3*\coldist+\widthb,-2.6) node[pos=.5] {C $512@3 \times 3 / 1$}; + + \draw[draw=none] (4*\coldist,-0.5) rectangle (4*\coldist+\widthb/2,-0.7) node[pos=.5] {$14 \times 14$}; + \draw[max] (4*\coldist,-0.0) rectangle (4*\coldist+\widthb,-0.5) node[pos=.5] {max pooling $2\times 2 / 1$}; + \draw[conv] (4*\coldist,-0.7) rectangle (4*\coldist+\widthb,-1.2) node[pos=.5] {C $512@3 \times 3 / 1$}; + \draw[conv] (4*\coldist,-1.4) rectangle (4*\coldist+\widthb,-1.9) node[pos=.5] {C $512@3 \times 3 / 1$}; + \draw[conv] (4*\coldist,-2.1) rectangle (4*\coldist+\widthb,-2.6) node[pos=.5] {C $512@3 \times 3 / 1$}; + + \draw[draw=none] (5*\coldist,-0.5) rectangle (5*\coldist+\widthb/2,-0.7) node[pos=.5] {$7 \times 7$}; + \draw[max] (5*\coldist,-0.0) rectangle (5*\coldist+\widthb,-0.5) node[pos=.5] {max pooling $2\times 2 / 1$}; + \draw[fc] (5*\coldist,-0.7) rectangle (5*\coldist+\widthb,-1.2) node[pos=.5] {Fully Connected 4096}; + \draw[dropout] (5*\coldist,-1.4) rectangle (5*\coldist+\widthb,-1.9) node[pos=.5] {Dropout $0.5$}; + \draw[fc] (5*\coldist,-2.1) rectangle (5*\coldist+\widthb,-2.6) node[pos=.5] {Fully Connected 4096}; + \draw[dropout] (5*\coldist,-2.8) rectangle (5*\coldist+\widthb,-3.3) node[pos=.5] {Dropout $0.5$}; + \draw[output] (5*\coldist,-3.5) rectangle (5*\coldist+\widthb,-4.0) node[pos=.5] {Fully Connected 1000}; +\end{tikzpicture} +\end{preview} +\end{document}