From d79db9d142f47af42dc3aad893e135234720c063 Mon Sep 17 00:00:00 2001 From: Grant Sanderson Date: Tue, 14 Apr 2015 17:55:25 -0700 Subject: [PATCH] starting main moser video --- Images/simple_face.png | Bin 0 -> 32446 bytes Images/speech_bubble.png | Bin 0 -> 64842 bytes Images/thought_bubble.png | Bin 0 -> 34272 bytes Images/video_icon.png | Bin 0 -> 12232 bytes animation.py | 1 + constants.py | 6 +- generate_logo.py | 35 +++++----- helpers.py | 15 +++-- mobject.py | 6 ++ moser/intro.py | 36 +++++----- moser/main.py | 137 ++++++++++++++++++++++++++++++++++++++ moser/moser_helpers.py | 34 ++++++++++ scene.py | 1 + 13 files changed, 225 insertions(+), 46 deletions(-) create mode 100644 Images/simple_face.png create mode 100644 Images/speech_bubble.png create mode 100644 Images/thought_bubble.png create mode 100644 Images/video_icon.png create mode 100644 moser/main.py create mode 100644 moser/moser_helpers.py diff --git a/Images/simple_face.png b/Images/simple_face.png new file mode 100644 index 0000000000000000000000000000000000000000..4646e4678494dc688717b8032662f3fa3975c755 GIT binary patch literal 32446 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 {=KE3BUiMyqQqzrS{OYS7I4*7;v=^$R#O zRZjRx^)`ou@Q88Q6!ATtF~NH6?haCYmXCYE*8^CM5zUxdy2Ff; zwafoj@+0;oJLgx_r5aT;W_!9qugY!5wyK*F`58ZfSj%8e-`0QLr^&q}@qAi;&=O>H z!5uRh*K{hwq<^skW?Enu)We)v8^X0D_Su=cw|~caW@#Y#VEfr%&v9fdIXF$SH$=Hu z;Pl~x5+R+v_zo2`?|+PgpA+XGy1q2f$iWR&wGFE}Ry>?uy_Ql>M+DKtr22x^IxwF4 zi6sBF53PV{MM%WNPQ?_fzZXA7f&Q=K)fAw(JUO)nYL#B=^7rb9hEDF1 zsMnrk{Gbb{2<_;G*P$d*ZHdCYj0z8@1g$0bH#_JI!Hw>dgPZ}L ze1$(~7!tP@n$w@|o|JSSWU)^E?^$YK2!_#AX3dXvmTSF_qKGJOKfqSD8uXthzIT3% z3(9BK;ioyWh^_VSf913J#tD!%`ds6Hqn9@RSXmn~(ENTJgNsv{%l|wqNv-K1EW~qa zJ05gdm$OCzWl#@3_meXtR7`OYJVjqyBraPQTkP27J4D1ojNaX2bb`saqpCsKI+ zKenzqF3Rld4?~IwDy1Odq8Lah-D81Bi6|YTC?UvDL)R=Ts7OnobP!h9Jj`UY9-f^{4>)w@WjPHSxni~D4mFqA!T;; z#oB5*hxTlcuso``4=Z8tE|!~Z{Glpzid{xLogxYt<;)9QbkMa!w4Wujs>nKDvLY@TG1dJ zC_BU^hz(#8-@9hwVlT5?CE7&0K^RDov7B~vwkdr)?tEg>t`@U8?!6lHy@6cgqhr@V zVxDqVFau;X@*8`PmJQ{lcu5n+xLz%T4g#}rSZdcGvnQL9kGLcft)0rc_-V5n5$U#x zuyE9{JsFV&c!K$7G+pqp;NXaF1TrlDTzo70$8AwX8#h8{!xyAeaqg=F#koVDr&g!B z7<8`Q7m>RVs|{?sCCqt|Zlf^rWjBR!>_(Gn8|4tfWH=4?|Em4hAFw1Szp4R#P|LDc zStj7+wM(<_9)MIOtJdrlhzw7Dg&k>r%kCtp`hGb+L$aIW2txz9nu6<^WlaTl*?R?c zr2gu`ZQc1C`0}s?jEDue4Cc#mU;AR+U$I{S4E6ZOq|VuivKg&-qVsr;V(51d+K=nk z@*lhq&nz4kVkgH9l;1LSw&Z3P#|s|y;hf1+J21(_(7!OCvEk?nSm+(qS9k1;#1~?{ z-dT=-$nb0snwyIS8|)n=+YDMP5xi!Jvu*o540zf|chO(HYe$|36>9ElPW`FXPxJ6k zo|enWsckWCXJe2--?M{alCS>(_K;=te45T?LP{TR)E?Z%AJW#@6O@%oNJ0pzo9yAU zJ*2za+zZvh3j8PmNwo8VR|GQf^?_v7|%?>DljIvilj*S>5-W`(r>YSR9Hc{n)}iI%-I zT0@^X#OPR$S>2C2d*1;96s?}iMVw3AXW0gg6r+&W>K?k^s>agCy}mBys3Y!R4Ntx zhs%Mf*gz>hOORD5uyM-S`Y5xERvTl*D3RAWlZ{p1DGePT zebe|nJ~9g#OQ2H$i?V*~({Lble{!2)OHplg?!+WlD2nP`79>J8xyfX>(5_%uW(S>C zjwkZOAgKQ1^Wl7S@ovS~dFu(Oy+4sv;|frolV|iv1T@-IEUKXS3VgerLYv+SBAyz_#nEde3tL>R|)kf z+zyxmyd8y`6&Go?PRkl=<6RcgQ)eEN2w>;6-?Xr3JNRHorzZR`f1Duvuz)?P%n-(Q zqVKC+_PK9%UQDNhY6QsS)FI6rt)cnf+4~z_NQyd1B?ajb9Vtjx1$x=}(|jFdL1~3b z;SPUs9rR`}K=QNV;`$1LkQ&7sG8w-=N45WWjNEBkk?V{@(-)=Qmlv4L*7e{FB1mk4IjGdtpA`B z=xe21iU|of$cYO#Iap_!U4E0l_{gK?*VE}QmcIG>W#lnWlVaB8Y=S6`7`DSjf#V1%oNCqTttPY=<& zjFd6MSgm@LcLZrQ1X)IpJ8Um@oU0wqv5?qt?Ue7R^Itw9|A$|qm% z--I0W6OQ5nlSjU*d8*D`Nh*+JIHN}*5Eh_p(UCao+ABXvDUWY4cRZT!2j4wlax~+b z9p$Bz)h`7{{evFGME#sT={pBH%xr$w58K}YZa&1)<UGfz|Y9_ z$T0wMgC|3mT1z~J(S6zRUWt~&;I%U-G$*yEQ;p$`o-I@KUIAvgj$$?NS0DEg`4k{W zom*EI-FH1;h%!(K2{35A6?QiM@Ja2Lbcz-u=(#~z4l<7yoOD-?JoPK9)k*(J(IZx< za*BC))y?KX*F`4j;&T} z44+}N6uUMydn%+m(gKtU`UNPdrVj3Z z&>0o69d=Q(jWT-=t>lHIHllQR!EDJc(b40Cimp-yiLPHq?PKO5-2W|Y{F^Lt zJj*>4a_$>3!ljC&PWKY8qa;F$G}T8MbT9mr6$-Q)-k+HN52kLfMAwIWT{;~;D;CN` z8#NaJ+cKwKU!g)v8lPm=wdEAV9Sp7a-g@p)SJMMvnh0o%;W2yAraJ@ zA|#dOq@OHtKhXDyh0jz0zG%!DkKjyYqK$jud6Rk#T6q=1Ju6MG+j432$3*VzRwvs= zrY_+EVF@o$4kCdg(zYkNQvg4_k|W#I0Bifx4SsdkL^uyeECEyn7axd{ikD8jw^zcK zI{nXt;Shb*hvubH|mkdbHR}2HF1!hM@Lb zNgp@t^~q+Blf^6vm+^fh3ht>2&M(JNbo4cup-*JIl6yF#PO@xyBBHVwbuRfIX8%Xg z7Vs{ICU2$tt5@9F9W9(VXE*v9#!u~;riD10U2bQgQM{r7nRmQ6LzKk?SU35U>E6pY zidBoB@Xr)ylG}ZOC(*fZnt8zy=_c%fuAT)tp1>DAv>+!P9Z1balE6aRJz<8_KpZo4 z#XPD}#qSvYb<}^U8Pthm7|st|f^A!(LZj~uN5xGZ8+d^5s)`cY!VFoH8y54|XNIV% z(((>{Nu@+wxpMlSE&WeR*+O~GDcL!gd%@Po(HS3DFWJvIK6c{^-3yUuy}3oiJ>dF$ z4*p?HQe`KLZ7X|^f@~Kck7|;t_~Xps7l{RF9dL~SbaYN^nssviJI~>HN;1vdCb4Ss z_iI(b#~)g^-*(Qh?MP}ins&JJL|7;A2tH+>jyAWSQP<}PetWROHVuFy2p0t!XgEwc z7bHaky%;1IOv@l=!lfk&BA0fP)?|rI^I?Y$CnY0W=nkFk_Z#XF4#nr571lBgbU#x) z>|ilao5oBA@Jjh=653^OB*&@k+^l}|G+OqO3$BkRkVgTHccW4pgBZ=lX{x8;)$7HH z5C7y$Fu~llE|5-a#LU)%+36_9msoAh8n)IhXf3Nupi8p9DVMsPWOztea%X-K`d@hlv?)x z4fFs02szpCMXp*^(ntA2CS!qhI^#9-A92(|nvi!ByrmD z1C7sUMApWM%vvbC7xArT>gp<1a7~Jc1Tc6hRG-7nE;7c=DRhz>QR+@zpamH!H2R*! z-_XCZjQs5|)y8zq_Apn9sv}a$vnsD~%daUtNJs+*)IMlzQLbd=+GIAj)}-BVgHQ}W zY9FYAjGFu#ZJHv7s$gk%DqWpDZmO5T6zF%1WmMm@mJ24^E(fRFjl2(Lf8oy@Q6^{N zVZdX^;;$B|5*}H3t;++kKcLt*xVn;RU!n3F%hBj2V4-8(HcV5`y_GHO(vKGa{kMB= zJv-BX;t)QSfYN9NGFruGkH}l)ie{@*ijn;l2TZ0ZkcjWLvAepd5C?I$G;n6hL`+I! z$Z5h67psO-t>=0Slq-32-kveF=h^jcdgj>4vECW%(EcJ7TKK{K(VB}x@+;jPOIJ5T zuK3xz(f8Dvyl7=SUhoJk&u`1?(U_`E?k5Vu^#So_Wt!QQ@GQqzH2aChq=YnYb z!oCfTkx{`FqN{990Xr1F1yWvdYPM(=fAzM!NL4j8_&~*zdY;R)h91WFc_ONF`i zE&oOj!a-^z%ltYUorl!0s2U`uoaA0Fq73oQq>%Lr5#Ip4-&^>aRTR$o>MWIz8l+h) zJE+f@VnW}LxmtPhU<>Q=V~vQ+;8KRl)r9&b-^a$RrTU!rdM)Kplm@k@e)Z2XoR{vG zs|A;dKcbGhE!n!~ZAsR#!V;mjMeXVFD(g6cI1c*NFD}Wt5)p|kv6n}31$t=hnYGa< zCximd@5S#ewrgap5S%!mXywV7GVUKp&9R}5k9=-d+VHg%J@+}lI#WP-86eq$Ue7%Cc0&pgBRJUkf^B z${>9ktj)94oz5m^zmWcpY*s4+ttvRt?;Gnxy@u3}kNg@aR9g18GPvP{nLG2lwr$qo z48J5P=!SdRbCA_D`q(D2s6}IMIDnKMd}y1F%|!zGH^dX+ag9MyeC7<%++I97bTy3N zrzN)a1^PH^q?Fxn$93YEof{jPNBG(K&|}Bnl|r`n&OLS6|4Uk!=+YXriTJ~M!>rB^`#U7gH~{Ym*2thYy{f7_fh9H29#idZ?Yo zfS>~6@PL}{C153LLrsKKhV3{HA2C|k9a>G2Snjz<#JDgxFG??E9wW6=UuY09Ot0T- zW-QuqYP0J(iPf}!WqDSH!+&t3-!VJw^uE&T$7g|pZvvte`dl8Ovh0_9g-|SD@LH%o z6U3o;a-hgyg-WPB83sb1SV^YY)qu|viNARfrr>Q}p&GSD(-g|dLL?}@BxW?je5SUj8a3zQ_5AJz#$;`yRoCv~=j0iXhwMKgw1MEgDMn*L zWT{NkhXy5;T}rrI-yYnH|~Jt zC^*}nw>*8kKXl9yg7_fp)Bczwr%AN)O=)`TS@T=l{|q1b|JdcwhM4f$Yv-GJdPH2Y zdkh(>x~(D#nLSCIRr5su`SKsudS5X5*b8&U$T&|qdWB56P6nOVg; zNfg}4@mb+^rsG-vthQ@7EHN8bO~*zuLo_pW3biTnCkrSFUfZV!TmBE9{@*h!xY|D1 z@9Ph-*wD}Yv%=T_qLigy9dwSQ!`=}E*H`_$?>CPME^*m)!+Wi zHF+S7;bk&b=Hdon{b1J57=>pAu|s|`A{Q1;$$tgX>iE3vLpdL{r*898`0@20&l%lN z1r@|MTPI6kzZ3?N6#;C%of>4wj(S4teuxR*bK^B)CIeGM+Mh3cz?QYVORN7e49IH| zVARb*ti#&XffO)hoGVgKkP1J9o)jx#-CxWJV0nySOM0KfFZcFab6%jSD? zMxja7-kQ^5j9~tjPTTIHxS)%y12e(0&w!|F;1w4{zT$?9Y1UnmoDJ5r=Zuv;NIpt} z-+?Lv1S+i1w};YlqtcinDi%5h(~K$jjZqj)wILR6V?AA2U16l=Y7h&317`gW<^l}^HL~o zWCQAGycZ(c2rBZFsS_C-D=2DWd{NaVftT7dlc$k4eI`V&c$Zi}y{{a8w9HblS-8ik z=kK3Vd&X8@`AFm#80#fGU${kLMLp_D?Wtb!@B~qP$;mSXXzvsGnh=ZEvRPTW0FAaf zNC$Vy&s_Qiv4a%Bj#6f!{kRbseZohkQor~z#Gor;ZP)MjfENaT360KLsJ&iokBb=W zbtOdsO53u$v+d?%glKjz6VaNpJsJ>uthDk;gUKW`AH;}_MPLOw#;B=hZEa)j#0CQshpNPzk2IeD zVmcv!r(p3_rZQHg0wN~gziRc696jqM%lf}DDgW4!2ntk~1Bv|!w3#Diriix&_&fqQ z(cL3t?nE3xwtG^`VHlYmt<-~vP;QD+u6d&B(3?r^X(IXzNgwFF{hN*Nxtdd}W5|a0 zrS_Z}zvUfO0@Y*NgGxR}`RGtf{6TJ6(Xdk|tlJdTQc@?hwor5xQdB`Prflq< zNlIW-0M(osfn65nF!9?Q5DWHMsk%z>|^!zZZcmo5Tf|;`1 zo{vg#1G%uMMPD_sUk#-0bf1kfztYT3m~iy56V{t$k+ncZwOcar5ynfg#@~on{gh0H zoy76(>HUqT!9s00WIBuxkM4*@Gqj(kC$UVU$jNmKNS9-HvP#Cs$$=k}Kn{Mcs~G|? zb7qP&F@%zX?xHS`g0^qqQ`TR014m<*3LUL7yDM~!m@WFCqUI4*SiJBz4wGI$>8@^q zhLA(+2RDNj>kQ0u#g=cJjpkx|SC@5K3;&tp(r)M3*@e7s&h!f#pIc*~uA#5u|23As z3^|IHtViErSUIGw^n|)Kwbku?Yx`jg6ZSH?Rsc^hN zYB#%XjtZ@iy>e`$HyI)(S`^kxGGu(Ks*I?P3Z(8d5Z{!4T5~$08#>lgqobTh z%!0O-svkR_IfrV z$ie${t8;ZUy6Y=+gozVIG>2(c@@UcK(v8R{pr8))MR_1oIUSu}T?}qNm4}FY`z_G6 z5=IRgE)+N7KS0Es*4}LNWdOo|jaRWq?wy}e&DwcyLUhIea*fP#Fu6Bf;-LSr?5^1W zK!Jv+no&77oiixc2Cge{^5$d&v#A@|7~M4eikKUi%;3ojN{B2qrejkPp)7`lUZv_|2aQ<7{7L7#qE)+6&S9`kiGU11qXh zf3}GGrEhOKrMC-Fk#&m%@%>eBLGZF!xaD%v&Lf4R& zku?^G8^%U0#5r!V9`5B-a~Er9wwnjkZRP{Wb3@05N~(LU_PYzQ5D^2CGNM>ikgt80 z3Mla_9;8K8$L_5Z$+Qh2A*uVymX3tlCP5Pw6RAaM65B6U9l{DS^w$r|u49q*=kjx> z2$cuWgFur>@LN=+Fkf2UPb9j7FW9e2NyJFp*Q_}aG8g)2!*yB_Y`kl&wIC4PJad)Rd(5{JahJL z+i%pVyPVT`X3#*Xv!36WdkrKSok*$)~7kXN>m%1H?R7k)N zxPQ3ulcTd$pXQj)PAr-`wI~vj2m~C~R6|$%EG7KCnfs^2BbO+BV|pzP2WRfrd{+n4 zGo!WU2p<7O5}5(GJ$t?u`yJRqawQoESv*G-TbcRJFR8UTr=PPgpZvu7Yk(4g+`xGc zIX??u92P35%#T!qC>8DmC%BhipZEU{-$6hZnz^LVUdAM-YhM1-v>ZU|`BiTqAr6)$ z>~_TR)f@%P5ex$Oy>})__!e|Efy3d{49^x&8e$UhEC#k9dTi z!)u+Ty9tx5FOgmo8Xix-R*y<|Z(&tSRELR+qw=p<;p=K-_`;u+msr!5#RtMv$=XiGnz^^b?g{wH*p0iuqq5}L4dTikKGWSY%G zr0n1nhgG0s*h2(!f>;whL#D&wxtwPwdx(-lYqtZwwN#5Iy{ENbXvHvEVFwVrc)5@gKGWi14{P7tojmCtL!EJ>yzEP zCyLv1bVjK#>}hp~(g#m}+d8=I7`w@%=l;liS;YPoM7>XfB za^jmTr9|}R*-mBF0IVQjTsKnGBDJS2g`ovJ_eD5eO#1ii-I(~_v16i(F?{4Xojy5kA-)9q*Dt9P29lX0Q1 ziG6p@oQJ3wGslSnwQy;3akf~+?8lY0LPo%@T9_xdMz5?_^zHf!NuLWVm*e6mU;#iC zuhZLW&&mxZ-s$7BSEx<9-9R=?{9TexV)KT}R_UDUgb=Zkp;AJ@=qOp(1j+rqa{$cv zaZe7zI!C$Ed$H^XIcon=;I~O;wABdUg;ozI=ekEkid=U2NeLjndDE1Cu zE{HW>4ReWycaHYN6W7ny_%g)h_Ln3Ak7uvq*oNCv%5ZCsW)Xe=absG;)K~1a9x%g6 zc}3{-Oc6wE`bU{W<;_*c2T8~z;v0GR7*ssRw1(zMd|gcm=Rt8*?=7Q0`xmRWpktRL zwWPC1`@Z~k`G4jUI;(L{&d(Na(OQu4M}nCgxidc`E@ES~sSZG|kycrP>+s*467>Wh zQePPnB?;|-`{1ew{<$;UB*Dl3MNX52NyxR{n#{8B$f{aG@r0n5pyCOi_;@!zF}Y>; zO#5i=4QC5-gPgaOrT)2*FA`>MS?-i%4~bp^?V=kVtjVkMfy@M-VZ5d8fK zzNAdS{O0hm+?cy5O7P3%Xs(HoUHfjAkIvQI?=wAWi2dC|s98IL0rt1vGuGpzq#eFWwzcS)=p%SV z5*~Q#7)=U9thj8X^UDhtS6qb8R1ZlsQJDi;iAw59l7+sgn51|?Rrpt>jQK>GybV^H zG?k?`C^H{2@l>0~V1WbvRB_sGnPU|06u4A-| zzIR2Wsc5nwVm>`J!=8v(J@&qu`|tln9sE1j)2_lvN!5KeOw~O6OQ>{w3~8!=<*KOc z$q4#0FG!X@VLaq0&3~Ao*)qtk5Gqep9ke_ZuPfA=SmuE^l$zV9n@kY(mMXC@>7gG} ziD|2d?w`(~zXs48c~U?eHLa4BF1%@X*T89-#c<=R(s7zRaOia-BVVEhImOqlULz|Hm;qCGmrA9$XP{S5WO;ZMm z5Z#)!K7dmeIjDAfgadx~t)h_x)kV^yD(WGK%3|uQ#WD+qI2mig+sV_l36}fU;N=$#~#s09KIo)Uz$wPTVte$a%8H$rRY49H`0JF;w_7Gvm`;_J@=hJXo z%RZwduZSpw?m8}&8giH{#UV2z zW_Xf`d8440hVOTrOK#5n(J8FUgZjb@nI5D4Zo~*eY1LLA7#%a-V&OMJwLm?F8^>r{ zP-@k)p!nMEngAmx;p_Kcnc$MN${O^*KL?UYEQV*iV6^+CZc%RAXAbK=5jvpmGg2Cr z2HfM!qF(#FU4vjcFRVQ%>LsSs59$h`mQ2wB?(pt`W8$215zj%3P$Yds3OLV|sbt!o zv9QLU$JqX(Q1LIQ_}Db)=gj4@u(_yQ`TXK>UHc-k6i~A8d23P|S$U3p+ha8`=Z8gQ z=(}ID_Wu2}QYCuy`CqK|0^jpPK(d>X=jr7uO3EZwwEJUHas4DX-ryQTyZ_+VQ&bpO zd~|YTs$W8yn$SwoIVxo9WtNUQ3o0d0*pI-iZ@7*>MFKwrR>Rm4fFr1_H+w|>Nz zHsvAw#c|J_q>{_#^P`g5<_=2id&vKI*!)xjN~*ZwT3cyYKljFJ>8vSU0htm%OCK=+ zvH_o+71=!o8(+9+%SegL|5v91v!jB+i0MMU(tLL@29_$w-4pGfq5}U6zC9s!$vh*R zdPk&j@~rw6?F~*Mh4maN?rAbeGaDI8gZ+wGiBhpS>}X0U1AA8a3~@BLgiZB_Rv29R ztOh}eBZWmpYE%vdmw;{KBlKIY4@p;DHto1M&| z6@QNr{Wq9Fy`f5We?WQP?TXr6G<%9es{3*YJ7{FdAy2_kp>?EpjCQoyX=k53ei569;fZRL9db7V>Y0UH8V0#fzRHQgGr{^)w(LK<|OHv1c7k7AVEq_IUsIRLz2DHVc}UnZYD?Ye#Lv6ZL#M>dGS=1^xal%DjsVO4l2-IH@`sm7jGXuF zKZNI#(<#S}JqdZ-K3H(Px$Bf?;f*zUyZh`TYO)SD4s2yCM6kbcEJ~Z+QJ-Q6AZ4v$ z#%HRvT_{!H6@r?O7(q8AJAb6-($lg}x8E67M4WB;d(7RxI^rGhRxnbRGo|5nyjdk5 zYi!0k95jaBQcz`Z3)rTD`*K+i3?*jTq!mB1z0$E>eH+(+4K(_#Xv-MYMJ}SkJgRIV zIF-dT=-N$Dr2KMh&sQJqO2)(^kPaxJI;^ti;QNYY%@vz^;K5 z4_1~whfbvapl+T&n)yWYcyjkPS(Li;P;=}}F-k0EX zOk#$7!#}1kJfzx2xDV27>v+Q)lEEmLF8ADgix2x@QF!I@b3I5sFeKBGj17d|gh++i+VQ3l&m=TPe z2+*|?`sAT>VhoQ3?Vun_pu|Co_3ffDuqy2l{Jo@)Uf!2ph zkbQ3NQD0dyX{=YinL1I~y>Xc#5|`sV66>>MSCFz8t;gP}Ci9ReD)M4#K#6!nkw_Ki z->kSw$*te6tAVV6RBxZyh0DrgE+i!2E zF!VA~`JGWNBIQRJnbt4~=v~SH_h&H^EgX8FomEC-;iIsD12-=FBkxm7LKO;wlc1(2 zOXJ>pgpMmR;+eG6<5+wFqJ-v?7Ccp#&ll@AanwmJQ=~tQ(vxT9iJuLE_V;F+<6;93 zLC%$)78&JbS7R?obWoyB&!n|?yZT`Qmaq!r3oZ1e&QMBB&5O=-*-4_l+C$@o`0gsr zi04z4;n#b%Xv`&W8bGU<->AB*8f)E>8ZB*`zP^uWaqhiN$cA9lAnm7}res_~Ylkc+ zC8t|veoV69B4W*|CKuKS_5DlH92HPLG+p?k!Mq}u*u_Ckjsf1Ar+!0E7VG>aA z;zLiWte|&&2Z-OrL^WiaEiTEd4|E^{5pHr=-mo?dQm$9Km{u0x;i5f93l#?K_oznh%F5(wH%T$g z>@oIxc+^7MT;77YN1&4ZW-MJ$nbk}XfD{PMkBMq6YVx@^d~1lPki=Mnb8mswc)6b2 zexBxMd83KXe7WI}wn0ba;bQoozM7^heCy$J?P-rft4*if=9Gf{Cw@Y1Zcjru1#2R} zSm&T=bw<2|TYa;Z4!DHIP`BZ^AAMPHdBb|mCP<-WlX*wLsW(}ola7!ZXB0U1uv;oJ z@roIv>IRLI==p5f%0q@sf>L`bYOU-%aB?>u^*9FPq(_2$TXijQ)mOnTg^p+y0MM)x zTXtZm+I2$EB??R+aA>Y7YqH-c&@dKb23vVKSuKZH)?7)+Fq=3;2T z?QnGrQOfsWK1J<5nxk9-9_he&0qR3i-oDOp10P&#Q1hMQZOEzkH#mbCSz^^Wb?C2DA#tqOTKPAKL(%FrCv;3Si5OE zcf7^ngm>#)vwXW zv?0uFAMJWZCwt;i58<_N0mJsR-H6f3QgkD>TIcIbG&+im;cd?aTi&)*s_m6#8+2iF z&-f%|YA18iZ#;e&E{;tGnc)$2{q;8nvq)dDhwFS<3M;LsrF!=m;7;(2wNR?+n~!aO zd#TahEXGtR* z+(Gd@-hAOx0J4j^e~r?>Vc4ycI{Iw=IP%f>&7Hsk|N6vqWde4KNQSZL_ZqEatL(Vt zjgMX!rQX%?_Z)Ax>B=f?9-T_VS59@d#5>));dpoL8c}m7S=g08Qr)=scMS`gYwIif zcpmPjD|$sz+3|uY9;Y(nTsem&mEB}=M_xyrdn|}d9hb+D&fZRX@j#M5gZ&yO*E@3l z!1a3W%7tCsryPbY`&*5;&5Me9t@8j4ZHx+iDrlMx*C*6Hu~3B__zThEGxbtl=--i8 zf0G84d;FQKy|3Lv%KUY${q%C&B4GW^Vic_$fF%<9qoLFocRc{P<~Nd3cDuu6?Pvdl zk1;}HmB1{6tWdv4rgJUoO(ttQMurTHSzKFLzc_QUMpY0IftM zma!s?E>ri}3gV(=$)Cn`g)@<6j;XGu2TLUq?f*>f{9jH9ls|1IAp&=*---($T01%+wPXn4EQ* ze098fpf(@>etgtg|JfhMpiK-`C(zHo@;=XXjaUfYkqyy80E`dQ5uT2=DqDFTl~0Pp z1TO+J;(8i!t18xF+_~1N>`3LWvH5L!@+47IG#ZC6T3X1Rgl&tmw3%VaOAS7Y zw9?#{E)g(FgbHfjXGDriQs{^IO15Rf&Y9ZkSyz0^z^8L0Vu`|WbVVmRx>MkLoIthbg{;XosV!NG zy_8pm04pz-&&js{m*z@UF1V~k0OSskAebT~VN+geGXQg+X9j>}wB!Zbw+EDtN&PR;MHSaUQwrdU~(kAS8qtHAw{k`{ZAe zHziYPF`snnr;a+a^}!|CYgYh3SRc)~pn|9|o+0=Uig<|*Ir+gpM90v?RO>kF%O)MJ z_6KNCu`o7GnoXUJELp2zv8(RmGYqDyFhJ<#^<9r3#Nm=S)ljt@68wGeG*a+8durL@ zs6juoOx_{o;1>_o><`^9c{^j}H<|FxPoo)y1Y7T7y_SycjJZsUN&X--97@%&O%(oG z(!S{j%fNo@dUii0uKd@=Lczwe?jT+@O_44en2p=MF_4Au-?JuqO>A}A!CZBdns|XhR_Qi_}fplSI?C>^x`Gex;vVU;&6kFa& zCcN}IlLOnlgos+lz8{G5^{B3Xk~%)>IcoZ_TI0}LzR0pigAZjN5#2Nh8~qZdz24wz zipbsPzIGH^8cZJI4m@aR5u6IRShVOkAAX_OO?`jQsb2iPANnnMkD>K(7Ofzd%rm|= zpYb}gEkyUR7pT2Fz224Bkw;fna zi{B3b?*r`j^lPYSAYJtF&hK2Os|}pYjm)2v7wrEirCZ5Get1G44rhvBo2;VWsc04F zyLRs3F6~WF+QlWUgAt0rVYu*)2XTQzLROiFPI2FIGSe^fRhe0%%i5EwpMB2lgz+g2 za0Y#`7k7#;vbXPW&KZZdElA1Fo;ni=N|qZgYmPj4>uIRO<59jERyXi<#Oz?fmSfIn z;oiSPB@Z=>fEcQ*^Qpv}A&}OQ`s>`$S z#K4KD)d;;rZj;d9yLNj?z8heYvWL1Y8S1{UG!`@}3q}{M(?SPq{%OHGke%Lm-5Y~c z=OrmFL?WpRG3cs*0cyTl23#Kp_rWWqGfOs#jqw{-cr5Rdl2Kd+xVL#pI_M2@B96mr20Xpbn2sfSLy21XQrHyOO_~`3VNEGXP zFh68EormMWlHyx@ms8Y+%x6hb*`hTmqB>ZvlMT4h5i?_|)B_y1lg7%@{3#k;dNK+g z;BJs)l(~YOM5an^rtjxXsqW$T?2&XmbX$ZIIY6ww1MQa|mR9t*kh`*~8`%(Ct;kQ; zATu}3-4U%qWp_9kz+bb~^~FxkXY9N*ul4-CZLCaBAvIm(UVMUz`gIMB{TlT>$ZpcJQVc6Fj$j;B4hHMgoBCXz0hyG5~_Rqm|}SuQ`yl&79vo3cd4Jn zuP;V!sK04pF1-i3*c)VK1$DU-5Kw7=hPGKC!W5(^W3}|Yf9@W7MAnM`oCA25`l>dHur+c=j=M&e<;xbqFlEP0MB6EYO640?b5%PlyGL9TEOjs2~tY6V& zP_ey+&X6ESnIVf)6AOV~2a=M{IP6mG*5BM&qWti_Ui5T1Knoq(t-a%k<^YJ}R-Q|L zxdwJ`FyZVWX}#e!m)4%=u0d=ZGDkJjvlGjidY$LEqr62k;F)eKRJ7?I3N2r1!p8pMwEN zasg`)hN#B4+ObX5lu(x-RHTr0nf{p{%MNypR-fqgJ|zr>VD-@cQCC=pq?Glre`kzp zX4cJW^G(re3H)Cmoso6uUZ%Uy%oV$q=*RsPA0%c0d4q^J2jIpV=qUoz8IG!PfqZB` z!Uawt3+9at&m_@`sO?AhJ7l2v<$!{^exI!^gsxOEWQ3j`nbT|hJ zEONnCG(Jg%(p|mknL(!%{ZYce;NDKm@C9xaz{qQx)HYOZp}zSKjKTO{iNdv_raaX^7uDDyqm&b>|ty8RP|nJtEmd1 zuk#)7-X8!J-YV$9?Py+(aXRHz5XfG?0Md5uIulUurk4VTP;32efZrT%I*rLWkGdM~gk-0)Phx1RAS&uP2X>W(O~MG2$uKL_$n`K$dRa>f<|!kFIDua$vtr ztyr>db1r95+N~r&P3!2~q~;jd=858lgn)ZP<}j~pF5F`HLCq4~;g@DqfXg|Y8T{kY zd%EveaouRr89I6>`WX?;{Sn+sr@>5D9$5}hx6NWkz;J&p*setz0t zD>0Re)>B04X<+PEzLMhzn1xoxUI=H4s)mFtE|F>$CcCqa=6p1Hp=vB0+4j z*%;`rWFeD~s2`)Zg~W_{_C!3QJP-Kzb+=I2g|+j$!K=g)C)y30AFUd_H5mgH&|LzG3JZCWrGMtULZ37U{c>x{lWn&^ ze(w#zeJ}a|wlg)U!Ao3gwN{(x)i8p%tByO+t)iu4d+)T%yUdUkA-&paiG{7(6J`bg ziRuwagHRF_$)I1wnHBQWQ1*H<>q{wt9e1fxMCkSX7jl~MPmX$OWA{-5vfugRmFDdx zLu$5v<|Xe4)mA^rxTa032^gqG-+`-1%8=nPmAlFKbuM$e8z*9;EH@jOYc(%*#u^-v zF3$FN*ygOgl7>8(t7~X)-ZB$hv0F0VDZb#4sbp{=$L0`&a>#0#7gJN@Pc|e#nudkS zSind>^B1>W+}i!>xaGMTMj&W%V8U3UPfB7Nca~@{#iibR!^=s03+q9R$h1q)d>#PV zoL|0}Ewbu5(=&|Xh!tCZ!M~0NbDHB`Hf_AXjZhVVO-zU9fX)>b8|L9<)jkW zsmlvPoFRQS``8ShN^3x?`(O}hv;Ox($AiVwOCLF*=(^a1@#v@tsq1a()4@H|aW}0} zQeoAlV>#Lf3gbe}XTOZhk_{{|Ok&XJSa8yI%%0EgzS0Cf2qvFWp^rVK`9k_|#`)ZU-ObZko$icy z@1iM;BqNA&)N@(nWnY*6G3IQxv;Qq$ZnQ>AH-o<>8`ESR@NQzl=;#o2z`7Bhu!Yg& z=0bh1qK8jq5k2Z%w~>mcjeP~t*3zgogrJTZ#}$RunLaf4_%1w8Z#x{A^b5QNwV8< zc6|NEg@bL^pZoT&8=H;{xkB{=q*JZo;jNc%+$gUuuVD_*^S-fS?T0hUUH}P7HGb^x z!MU@VmPBG0e`Y)=2`P>Cne?45p9t?DC==2E&PaA<=hr817U*xs;6xQPSC-zN=jJzo zc5(}RyVY8d>GkE^C5|D4QeK;~o=ik?_WgDHom@-WRTE9=!&zbfvi>^2(G1(;PUq+L z*4f{4w;9!6$*$fCduI&BeOuZ09^}cz(JhNU`%)&je6i_8!on@l`&&qTG;^Wy?WH5H z0k_YbdpsVon*J(77C*(yJT|wVY4z^!nQcYh4@A=(0~0X3H8wB%MDc%=?i`^!jZ}Vn zUS&z4!y}UaVK1rcv#J=qK>PI~oudXA+~*XR*&1h(UR%s*xa%CV5TY>m zlQwV0y1U^GS^zNxuSEV4NVmycj}Hy+YzzXSepYaca7uhrTlvZlc8&bZ9PoDp=vUD$0t znm=2eyFHxm--A0Dp@y259lm2Ww?cbW|`enGLw7Ghi z?k;3cxGH&gxK)4msQ&uYwwj2)oZhPZIiT;-8%mMedw?w7Y8J8n3#6~Y5y?lMb&NXn5n!u*o z0N(~vPS^a|@bgO_;zQm=<&$v!1vi1N1f-+No(p6!Fx#K!+tTRvH)*kVU&_Qgj%u+^ z&X9dSFn?K?p}Pb9n(pvq6a7N=mZ<)sT1pHL&=svcJJy1IZZrD|;s=k$PAXH=>!-ut zW;RSH<{wNo9SwJZs-o;Bs^}g*l zTlZJ09LI{TeRW0M%l6v-;TBWFI%;D^$g27~>=caz)2Ijdhz%9z#BKc*!wx$OWj4VR z9x7j92KK_MBHo2j={l<+z1gJylK4zc9@!QhY{p(Pp^M%i?z`~#2eo=+y;J!gCL?%H zJg9Z~^4{84Cw=dvyWwt5z^Gd9@b(@2Ojjiord=i?&4{MCm2%~WUB>{J>Av$SdI$@gz&Ej- zPu+T7x#|6ubnO!8Dle6vz}?1U7*S#R0!-AoOmuDkR{c_)o0^9wdHn;@BM5fsD(mj$ zUDHxguDpsDy{<_=UT|yy3n0GV6+a5gXa>lFqG(YaDbdPv=eWz8qjjb1mZh2+Q|aS$ zTtg9j%8reogVNe>b!G&C^hWiv4Z0aa^aCsWFMg}7;WCKbk8Y|TjM*Tgd<6WF@Adlm z*`yQxPsjJ}ijp`FTu?o=-H;Nt7ry#qyYnY!{ucKf(BoSG+mvkv_jR+{e;Ve=w7wZC z9NcvgT!Ig1o2>Hb?%6H+71O8peV4ZC6sbFHCk7T68XOB{m+B;sMslLBqUIX97!cR0 zq3yxphwe0oX-h4S<)O5|jkrhfStFdTF{dZ# z>Io<%xvfelEs{Mp)Jw9vv6f5C4p^2ASl!R>NMe;(4G|=7S6#V0zFk6hIP67Sc6{>E zE13SLz4))vPdMoE2Z;2R@gPHIh;a3oxTj zH|K>%ZmLSUOG;gSyiPZ>9<%*X>W#vp_>tFhBNIrkS?}e*?m&c#Oxa|>#MbnjpPP$` z50(;Nm@vJ6&HQ$B7*j5yI-d8|o#n-M=yJ@$WhK!j)}Th;k8;%OMMrD~6pGx$^T$A{ zhx*hEcKu-C%@%h1ZW!~gF}w^qs~71S>AGFNeGNjxw1@7B^2{YDRmYth5i0*8f9@z( z%8lTfbRS)9YBpTVZ@mtt)AD};oG4Ve;&*xNG-39ZV@)00H)6A7qTJcQQ{$x<7@z0N zv+8ox>X0UKse~=vc84U8hh6WJ{u$d3 z?%^7P+*?HGb%|!xTSq=6M|Y%5xTb63mAKPbUa#j)5?2*2f&j%!GyqL)>OPlg0h50{ zcMvmGg?=pYBrmURIlxWVbE@xn<&hC^2v^ixoMqUh*_*7mlD3Blr?~v!W}aj5C!d6Z z3|uBKIiw)v72B)N6cZHl)6MR~b<6&S=9Eu|By^dh0$+H_TV8$er75^aF$0Y$PdE{_8Pz;q`NQV+VS#@Irn4waNtn2VTRK6&rr zy7QegTUsx@kVSta!0eN`71`a|{MAli8eCApDh)@~XA1DnkPg+RT6%?UqN|x;oveIZ z=;ry-D@k#{l#)U5chNLvj_j z+^+t1!@I~z$5soZ6=ok6muo7`_gjOo@`K3?KJjsRDv7rpEoLVZEnI5x&8%({tT9L5 zLb(yLgrcmHwmzOdX}cdVvyBc{hYs+KE;^BG7qb2PFUM8z)SR_EkI(O+J$+kDC**T@ zCu_*Lkv72~5)Om7vIl4Ci~HzjDGwbvq{GgQSZTSoX;E(6hKWx4XNE;Ob}0AX1=!_vly8i_ z2fV^zmu=^eYIOwT@=l9wd`;@xvpp0UoCV-E1UTH)@Y)KaKll=vTc0H01~FxpmlBF? z><3eqGQgnCC1JF3e>%sJj{O=uOF!yU`g!{IH&z+*p@Xn#HKW1PSJRdkGNkS{Won?@ zWEUd4PTm@*>^v>^N^21M!xZhaYUa6}ai;s^5qHQF3|qdD;JzAO&+OQ`aX|Jz3X^Rm zp<1-^HrKBx*<%tW)KlR6naXyRtcAN_qj(Gdt7WMrYY z+R#(oryJzId;*+)w%#S|2NVRLiQSya2Sn}ap%vC0-NZ9%Gia8F?4z&HxKjD6M+Ru5 z$%Eo|+f|+NiMG>Kua7^+oCnUF-0O_M%+vC0OZyDp6JUO-KM3-rGn7|wO)xk}&T zC{S4*Jp5b1U(y=E#Vk95PG3r^^CD>uV0IG*0q&Tjd@NOp0r0GK+9OHWLX@t>9}U^w_@5sInT4M8P*y zA0p}Z-|d@p}MSZy!u4AEOrNSNgPcT-5w$N#L|RfFnFKSL2cF z3d4}-JHxT&>LMmx2iNqsizefvon%-l28Qh4`QvH#M#2Ld-ap=Pys0|=3h@2^;{Oxh zsxSi`UW@W?`nl5fRcf>If=MQ#Y<_}iX?FF9*-@rvyKQz--zm@xzFTJyKCfZ}1y&s} zoL2in_1;6cp^354H5yC#70UL-=1A8U1 z6pL%-#N%3z8o?SDYr$1;HEl|FWanhjNqGey*m$b%hvnKGvNF=mis@t}#Z0 zUQM%kX2H}ExH_8+t7#@~J0Qc7-n$q@_b;!c>5OOuHfUiNhl+ky@g*MvO7o6I^Ec5~$Jhsu9PA@VaY($iGN61Sx#5>y@SB>&N@GoYH`_&>>P{8o_O$r^s+ z9i4GI&1Ji!dVFtOlrO}g5Z^!nL1yAJ@*Z8Tx8Q(Q?RhFBIS4nFkz5WuO}MGpr51K1 zl6Z}7%a-Jrll{-?Jk(8);%N=d*Mm@yH8X8*q*iWt!t{7Aw*^RT&Ii0-h~G;*t-zP~ z?j7U5UNk0x)I{R&Cd1dq=*YubeMiE)POr8^YOPP;O_K~<+dW96E?Iyct6_ZYS-gh7Tx|zp_RUe3}y*j`=3q|o>G{*%swun^bho)W~gk>EUo1z zva|7vflE7O{Yt@!mPmcc5uBvJAp*Ua*-Q@b3>{Hmm4~-D5d;s*npA*W|dFMi*EXvp z)1gk6TgTipc;)2wV9;P?mNmF3{F52=E?he7&Ex$ez1Z6CvGy+^wc5}vFkQ0*{h|an zrJt2yC^G!qzpL%#Z2aaZxBG{em!B28w$;(y96a#q&u%Lr;W()p9}$>C$05SBGjAT8y1zI4@&uoKdk%;074YZasC*3Xd%_|t2+12wQJNeXRgs*vtDsfI4D6I z0&QV5rgDurVBj|pT^*5P3K$FR6{*Hok)psjJz%P-klq!A*7Jm%Gh$kHh^lLXO$Ald zph`UVCwABB-WR=oDnE8WmgIR%5B=>QS5OI!*%b=9cqaIV_{?F)FWUx&&!!@KfP0Ba zg{lu^d1H%Ue2QZG$opG{6ElunLm^``snZdc_}u|3OpY0{@Q+? z$7Djlx78t(!yI?$R*1*M60O|uP#Nov8CRu7PL23uB{!R^pA-e`eMYmG9-He#yTfp8 zIlicW-#nDmll?lq-ZyP5s)U~{t_GvO;2_NIu;IeRF8~}JY{}xmmF0qG62$qs2dS0z zMq^Ce$%*eKdn>R0lk=8{C~fL#3aj8sjNWp7Q!1g-n)28ex*}a>=eyffM;z$qju`T6 z`_%^^8s8BQ8iJGs++q31GVY#1sM8(3E6CUe(=WK`>omt?A_CtiO0;O){dH^%0$Rva z>aOm7>rLq=>+-vO!%d4MoI|nmL5BGov4-h)SQpXdzK(;9`9JJs#cNE59BUrOJgX+7 zq^|)R;X9NiOQ0+*_jJQ{qUwSMIkARU;aqRubDeDU?a1FzRK59Y8$>=pus)6tQsUhx>60q^T=GEG|e(I!_(uN<-mz6USLoA-5udA|sM)&oHEDrl*@nboR0)QW3T-SXW zl}J=rtA-_TcN(KXOTd*Z=*l?wSYk3BjD+^eXZ@>kQQ2h8R>p&HRjrQvpbfo+6TKes zro(EX^FcekmrWs0iN-nwb8y1UeQnxQy22lhH|B( zo!`*vJV%W<_0q`ogftB~(*Jp$Ck%B<{kU%GSbA!mx|Eh7nXc_H!@P7 z${OcFHd`u$A{vnV@ePwz-Jb###FIlHsF~AX6nN{p`5kEFrI5g2@pHC|br)fd`cIA( zRbcjnU5CN~(>l$fY8!tF2WF1UWcP7Xz|I%+g`I9?Y`v6z#K|D}F67JLucdM{B+AEV z8(kkor5X|q^>m7^c=WwSQt!YKMs9#y<3-(qC|Pn7_SA*z8(VcU9Hk5stbH8%hm4-` zV+m;ELc$;QY*sx!2ETUFA(||GHS6*fSv)L_4s7Tfjb+R~e3p{}8IG9`(!ff_X}i!i z?q(jqs$0*0a3^sd;#+*%_Nzpg-Um>Q{uH7j330v9nfD%Dc$R`W8v)#V^Zb1dQ9fVuLeqT$LK zgOD4B70sXJK799EJ;;1hiUysS@zneH%3L0LlRM-@Sm3uI4H%#DfLnxBo4g*}G#+Uc zO_8L)bCBYi3(eu>`Q7NqP8>Y zj#204e~3ICt856SEpiQrrS@JZb7^q)l$L0#9Gz_w+0M1*C{ixHp=$B1LIt3YKj1ta z9pPI>B1DB9>T-~t%-Ue39Emt`c19!HTW-+S3Dbg%t{AR}LBp}RVE&DH5@ zht24^LDacSAu5BU`9K>mpTG>x#;=`xaAPNH(-Jo$>@3sexfBPCKYRrcw{EDfY%&~W zSverIy{A9+8vWWptOEXRHLQ6QeTq{$G4S2aKdL`RmbL#JvSn-#hIFy93Lap+f42hj z!+Bc>EefBNVZq6;E5m@`zR&C4njmwmxb2AK!RSr7FU37KSOZ;zKfwT342g#eplV4? zj!kYTY&=Jo`w!jpQK($J&Zp#pG#Pn~X19!3uPQY8*`6^R*67f{H8bA^+vS)oQps6VW$ic%P`=mGz17Hl54$Tqny@f zWfY9#Y}iR^1}GNn+UAJZ?mq1D6j~0gb1gzSjCnnY`t?k%^A1reU>$RFQgty`h;o+8 zGz}E%8D3nH>g^FTD^|9!VnbEt2Y+2fLM?D#N(l7w3HM?2AUZHYDjt zm#1Mj>q(89Msz+R@`#wsqSwKm*n1%IEgSK_P!8~mtkC7fjVIA0@Yz@o$6L`{?6zv< zSI*fPl?u#SLOY{@?#r*x@U&EF;VbF&Y}?5basff^?`P~Y<*fw3pTH;rL@ zw+5VF7}FzKk>x5t_r-2q6&c`VK(wm=0tqYtq@DR_y4kxPNSDP@Z1fjcIPKOG@x7$F z-NHaM>`S4*+eQmgIRX~W1O#Hs3fE=tcwUX2dyR27SSdsHJWZelR+bS4fbKB^XLUGe zWd9*Bj>Pn=XZUxk>G2t{!}5w@IJG9_o{q@Kz2*<&uQ-3!@amW)Sh9EN9;@KUn%)el zYoSg%fX+sY_`pa^cE=?4---?dtcWfZn;72cVdip#F5Ks7L}AE*^Q%qz2&A0cWDg09 z?@xVOqa-Ocs^Xq-I_VqItZM0-3lTap z_s;}j_DUebudMvV&6|rMs6FK_1|b=xfd@n_0p=az`@2E9`7+F!K7DKmqZM$la8WEf zXl+K-Sl>$P{NbQswHIAp@cwZnL`Gp18EgAlptnH6vvTn9uWreEvaG|~*e2CY)j0vW z^(0i|@ro7U#pHH^#xPAQ9=_?$tetdjMB6uY9 zMu<4g@_HceE*Wxe+{%gL57bT$f=Ws+&pb;x)?kr~1QtIiz8!GftrA+Qf+16fH^?04 zPkcPBio7#&fG+o0T1<0_H)gnd@K8kYlZdB1N5Rvc@hLs{8_;bc5)J}RlA?+r zFfWU;+#BE>loDNzsN;gox%5qsaFK&TYI4h1 zHIMbx9Woe-x{Sl_(U{kDeV6NO+>{n^E21UJ1~OMVnua^ri-x2NO5>|;dLfd)g}LX^ z>4IblT9hSeH}P$K);(P`30FMx*=J;`H7cG+`w_EQ0Y>kV`{sE60>uDpbbONVaW@@3 z2-95azoLfS5TYs*L4^xmqk#;E&c7Ho=x;9Cb2(@oidvQ_hxxE@1zQ!h^3HOwJO(|m zx5^B{)(f)aOT?XdcZ3hhs_z#QP zCDrAj8R1IMdJx{byi;GNS2%CGASO<49=9zaDfVIW2_1OTdEX|!^W(PE4`m}-AZ})M zxr{<6Zn{R|Z-YX0;!;}zXq?Knt)E~eEc_7-v?gTBO@vSG`Qt|J@VPQ<^@^i&!-Ur1>v9A5m1=3+ z!G^7XmJ)`tAnVwu7}9H7?r}G#B102Qi%PN5w_rbA#&5+GwWU7xy)LTAP8Uma86WG# zfXC#j_nHrrWD4_{9p%q&@zl2G43fo11q{8)xH{6zLejDPc^5lcYo@cdr zBADZlECcxepa%_d8=?y^11CGLbU5p0={ZOV~OE-UtKNg6vV z>*D9cd;*(d=fl?BUgt9}#!mm}!i=I+q{qv{&1tM$xhIqijO?Wj1eKX|Lak6c&ROYu z^M|U$I{mp-N-QsTKm9uBB@k0BEATfX!zYzk-X0Xcmd_5kXf2U){2KGdsc<*_;K{Fz z#4|R2lB^$qFPaQp*}sEb&@1__EhFJlW$P=fA7(ETDkf&<^oCb?Wveb6h7_Xh{0jZL zc?~TtRTgwI{wsG9iJqAe9PV;qOXl*VA154yQ2%+7x#0!g1ugG&mxRsMvmskBjKyv8 z#7(DfpT5Tx589ADVh>qNYUx}};+nM|y0E6XrJBil+$oE_XE?^m<|PNk5at}Ns^=*U zge5Lx)9bM*WcceC(yH9?^PcxB;qKvY&NY<+x>DIG%^s2WN&}Gz)RyNE$=3j}Pinu6 zAO*doSQ&MYF0Di83&aaCwpl8a#L}8-OBQGw4s(*x{$8Vm9SvVW75w)C5Ee>82+;=5_9C(EyU+0sF z?%zr)r`52M_v91sBwt?c4auFtixDVlsg}u$B6g4;u;N{aXy}KFC`6~pB`@e4Zq(Io zABf$5`|0a$n#!t&$yhJ&DZ7f@P!|iQ)zHUa$d+=&sNp*-ij(`xA5B&k-Az_^FY&h3 zNHlCvF#X`5fj}pL`CUbW{~UlJ_Jddawb+&f(0V*Y4F2mpx3Sb&-Xrg)-UQL^sfbvr zw*15_3i65FQ7-4#)$FCp%`CmzH8v6a%1H=!Z8u3Z?7GCcVJf;Hmlw`>C#`~GHUlHa zk(F$Dw;DlXb||sjnv=g8Ijq#rxmul3bjMu6G_Ew}UhZa}R=M0gzUsar4>m;d2N3XD z)no;ccVAxq_i6@Mikzz>Db#u=-IZ2qv`|7qa#pt5ZjJ|2mU9Q^WbhU@70T@ZJLOKZ zu}}uuAMKaQN2lo}2ia$(#1ADo8A>0jCUx1aR`*|WpO14gA4?3Mb-cB^ZB@VCb3K81 z?-N^)z@ncV*WxMr$lb%hsbNPj5}mZU5}2UPHADme#%`f3pXDZPI4Ir`SQ?4_(YpopBR{0^W)97zYD)g(bes;N#^u$kfB{hjAGe$9u*%r#xG+ zwoLBeRXF(_Lb?biv?G#Tmozc8?L7=S%cbv@LJSo*7ZvYxEJl=OUK(&6s$raZB~CrZ z2isIEyJ<%md8PY=-hqVO?H)&WPe&Qk{b3#j=BVizUjZ3;>HdbL$^}ABd83tbkrERSQ0X7IP~ zISrCF5&Kj6SdAXngs*!MtznX^4sCOn;4_rbxrADG&!IuF^YUAbmG z=as?C$PD&1+(UMmSbvuMm8VjU<|0`n$d~F*M5ySq5z>aZ=_ql1M_gSlbvE6$b=Z^= zw1?w1);^&oZCJq~_VM|)sm0d^Ma!>$iu&}-bU~_6bY``MOypL6UApW3Ld#BGTlLPV zI%QauQVCCyc5~1izE423DflK`gWY=YO;1slIo+YCQ@8F2*ydjcA=UzVl)qr7o0{#x za)hL|D9ETdnHYIup`17vjp-tt5Gvx$wQagivpM_j0Z!AS`i934|NV0XI;e7M90}fX zb)>CmZ=Y-$R$*G-=>iz6d0r4`jhA)1@RO~(KfHek3sk=?Of-z`IW%>Xx|IFH@L}fs z7_z=FvJ~XEu;blDhPU|Vy8=O!WpQ_?7t+O+<`^y(Wz9+r?JOkX{SsEvq5m0^luy0B z>lV7C{qk7{Kawq^4Raz)eo*th%ICogcDOpXP@4m_(R1h1Xvpp*zO9MhvK?!8BkrNn z5E5$HPw4g(la_iX_fZYiq_?ZtEY7b6%sfX+y3T=86B_RKGv{7shh<2Z%Istr?qByp zPylk#&h7vQ3sVBT*gTc~UMUczaHrPeP=em%xqaiKA!pWYr@L=duH+5lrd;y!RCPXo zG&K7(xK4WP{@rrSz?5!+i|gujnl0t zZt!&q3OGNYg_}+{`VQ>qt{DKNEf@;|Mz#V)*WgQwbm!{xTXB2$s*>d}GpZA_>DrI;Z(j1(o^)`wvLkwa@8?V#sOGknphg^xZ2=Vyc zI1im~?hhYCJ-fQM(xXp9U>LV`d&s6n&j6O9djYq$|M>B6N3lqumbt{61@gV{(2@)` z;G1v&wa&o{V$O)a$*r2Vu zwYInSitYSIM8MOpQ;oilJv*=Kn;R8-g^Q^p|m_Ih;hRTl=qMBAq4!S2T z37m;&x5%zg&ooZbiK5pB;qS;%yPUJDwZ--*an7xE^s!auoJ9;;RW}&1yEgMG5@CZ%;RHY1bVUsyjjA?U6HrN%+EO~`eeeEfyx+^Fvy zYD9;DFsy=QM49!Q#B8j2V(k0K>~s2`-PH0OAh^{B2ixYKu7j9kb%Ja&%gko?ULaQZ zK?gKuDKc&*Htx~=a~G0HzFeLkv4k+m31k{ z)R+Td#6?s%>WDk;*7o5$Pw;xpHuxmGL4Fwp3tMWK9HZbqE9PEMd#2gp#{N{@IR5NU zeNLynZdx>>JbWc~esNsPw&Z@k!R4jhFh@*9J%X?%z2sa}CNN{-cQh@% zz@Ii=dFCl5Zo8`^$*LwtIwYYccji~OuwQ&9EX_blfqw6&;Fu)Pwh{_L+?K zfD@mJ5Fxe+LoLRFF#Zs_{9*L3WV~X^42?P5ozEAx+{NwOUP4x}OU?Od21JEYYEhS+ zl*X>0E7oGo8l1abYx3@I$5u|s$OK6i1Ym6~%OVd41y?z^OMi7XWZFk?s5~tl zcsv65HVYtS5Nt{xix8p4-AQ!iG{08;CXZ#@ew6j6qi@s;F*Esc!M2OaLvv|&v{0|m z2n*>A$|xe=P?VH;r;Pow5i`K8fb*)0TX9_JS9=@1u8w8i%T_B9{pesGAYqbo05f`) z5qqv61aQmM3qSi>qb`DX5~u9F!rcq+x?l0_{OWmj>C$b{*^Ew?so<5}TMkQnx=vbc zDk+Fk7LmrXSwVK>9is%(_Wlktg-qOx=$AZlRDRoVYv#q4%Q)krVl~mO51()KpZT3kjX4n#Bw$D-Asy_AxiU{IqX0cy6b!FeQnZ z^UhjV8P_z;-0@fG7y*8F-0^hlGbC?*!3 z9Ey0J_-=v-UW9=O<@s=RzA_+fP6Sk)%YDiY>Sr)Iz%X(yvbRmTt}nAxjh5hY*-M&C zHT}8i4f6Pe?X2&c&+F)5!;L{Z+n_F1ClXOgXPrcZTc}l4uq@2E`Oxt-i|I58*U84= zQC-FRFI)%r<}J|7i{$s@Bo^WY+)cTS1^Eae{y?SU2hIQqM;OIGdfO|lXmi<*O$Ad| zt_#K$(&H1llvG9r?2(pl$UTx2&qgJzP^>&U$FGjEgm-b*swzrev}+0#k=_sN9xNUX zaWX!TR@IxcH8wa@)APh4x#Vm*xfLEY1T;{6uF7TDK5hWq<)!R)0z9N#0)9i!jf}<6 zjFe-Gkr`t~Qf5C7=m0@pS4%L^k=yKE-}U&;OC#0x22pzI;QaUyJ_6?E^rm6#&bQeo zS&VaMBe#P0=6hNk^N=q$FA8-w+&s4{@GS`~Ji7iRe6&$y9q0nq@lJ~3o=mlytkZYax$ zA>Nb>?~$shH+dQwa>Ty`aRyS;d`@#NE;!$`peiYyYu0crBb0gr}oU3-A~u zFVOELp*JTM_uo9Hjk{RP9EBAzm|m}M(-e3*JmDdaPZs#6Am|J!xTZ91R>ll$+w`pc zs5o+K;c0Ll>@+Dp2T2Q-!T8jTUF~zVc=^=DUetju2ssd644L;5XWD9`Zd05KT}twn z)tOk!Zr&Wmrxpn3Wz+RfwN_O(PI8Is0pmj|eA5x$m)%OLlnHn=B2VWNxF<|8h~*%& z1KzzvtrFF`RCW{x_iuqy7rey$*xpXPPP1Db3#5arS2qubiXl~ci>N-d2}emuEJs{t zVtaHq9zzr}pIqlTDKxgb>R(s%GSd&fk?5IM)KD({n1&GN3kRA<3k-5CgGl=0r5?0N z?tQTzZgSZ(!iWZXcv(&E6#kJE1i>%Nx{EHiXpZUia!Z>{9}AZO4LBwwYVuBOZ2>o} z668cgcbLw~oRp3QcW3sMHB$7;r}xyNxx*6ivuUgq@L?iV(*=G*ZmMZ@kiP>Gm48lf zq<@7FF}H~>EmiK~u3NS9+nZZ^jYraH^^r9bO}TYLmO3fZtoUxy|w$F2^!c;AuU8J`_-ml zTZjD>bUF%6D?fppBI@;t#}OYRZrZ1 zSRLbBGqqm@mxz%WZjO)63MO3?UiK~TMC_~j)hN#=W>J=O&$n!EE`QXD>!d^V5JA0i z^Ft1P9_kXrxwAm?WU=S0sD`Sd6uTzjXd*WwU`i3qWa;va`IvI?D4HF2A)AL635r2@ z{5mQIyOttkvXA*}bINYI`jn=jaDnru@Ek*8X^}(g>Y7pJlAFo8goH*#iYWqk!{m`H ztIfGmB^FgB&GR~_k&$l=FMRH^BSx@L>#vD6sTW4FgBPToVnlO9r^-RpSb$;zxtDom z0;dj7kDrlwct~|N@9Nj6iQz8QU?aM$=TbuyZYM6tpx`OdlGI< zVREBWp*sRfzk=IYU3!iR^Yv?Zm|BZd^M zahp!h77s_&2e;LXBkN1SrT9@%5=b8ps=%`h@aG`T#w*in0uq#NZq|#hb^`D0-&$_v zW<))v%_v&4j@G1E>z-e1yLWKj=A=8HAwM9CrH;|$`o=TKvF1DO34XbZ5SuSG%lV5p zv&%X7uMiTBOw2L;Dt0)2gVjc-^b3N9REu6m(@gOA$6DFj)4L=-4{$k{z?r@D%pK|K z#q+c!ADI^(!i6A2-NVlw2 z{x#uFG9EEBEh)0ub`pA#Bd6WAp-Uxmr_4@MKVRq+Xu3kt#aNKkcIUaP4^H%l%X1f+ zjeV!v&M6Ms_`70luS6KII4Xo+R8N09i~QD;h}ds?b8V$>C1&GpCl%?!j1ZPoMYNa6?jT09E9eRO3!JX$BbE6JC$E_5-@F+$x= zEi}dDl@H^OHAFs9V$-CwFnuS1#tC5q?;Au9#`YM7U{emK7f#!&7+nTD+fjDre@U?4 zy%0l^JT3Y@{I<4NNXcpGYUx=ZHSIB4-QkxZ5P>oxnrsol|=e`vUZO^6%&n?Xn9X%zX{tv z6SI6dLs$zA%rx93w+6ZnKApjeQP7rMXxpoL=Cv+NBLdOjV+Ed-3?adjE7oG$;Q<0adg)5Rf~3HD5pk;NOxfFVK^l8Y(Sd zoD`ZB41zD;`|A0YY_3ccg1wMuz+M-@UVU#x|L8|RN$-d7#_U*QU>X+cu7TsxLGOYv z@F%!-u*g^!EaC=>zM6_Y{`q15Y)1bc)4T~~jvCjZ+$y$X@%$RRxfyeaCL_d=6k9?; zN9-?ME#II0$`ko@Bydeo=))wG$f^`->TRHDW(!w)YcbQxmeLlgjE@$g(*G^a1_;VN z6aGs7M+fi&fIr8xovTcOsIKrQb}q9KT|M0W(@>Sh_V>ZoPVBHp+88;netpJ-->Lt2 zmWUwbARUmw!ggC_#O(ung zYT`JX!wI>OuxDPLV)3s7t|q$!4X|sGdhHJ~L<^#J^2(JyRI@DYb*-jZ?u^Ig2@y7M z&Wpk5C<#>D$Sxl}3SNU=3gKVE4Ct|(k`~ddO}27^&`l~~L{Hg>u~R+LKoESNET6`| z{T$(j9QF`a+nTuyR$FKDIOKx8u?Cb^o^&fcPS9(L`jI|ZvqL`fXIC-OW@>rLvZvOG z@poVKx%cSj@!lJ$eC8F!yEl`lkZc7`(vM4#IJyZ?o9W>6xlbB8GFR1A<5p!ITD3<| zlD3*xG4Ip9o_9Z*xOSdUCUdNn@eVK3YnG(kkilKl&CCLMUhf zHS`nR9?ZsfB~may+DX(ggCr(UF6DNLB83)GfbkHVZLV^J=6KUC641ly$?CJN-b{FN zc~kcZiaVrET7Vo@TWkw#?I!>gMSB#Y{#tb&LU!y_D`LH=7U)fnH&I;BOMHx|R)7r> z74~P26u078oPtiCa+>7YWZR}08DU$(;U}pugdR9}Y0ov$zy3D|9DK70)FbeycFR4t zdP-3#RDq-OUQF7xb|ovmI0CQzj|>o?LMb@f%kxf#vD!x6%TY>5>=Q86(;h*7_`sp! zZ>&{w+LFDU0UX0D@>a@U+u1|NN<6eu;3Iv~bm?icIhaB9Qa`B5m+q3Q7(c{4oG+jm zBQ90(FCL;rK~e9!P!}e?elF~~k?EsedI-y~wST{5$&_7@OgZiCwMa1c@xn~#zx?y_ zhth4<``D2vpNo_OmfpF=_S0=?F`uX*Lw)KRE^Pc!UIezhG`l~c{`WeRAxxffD`!qp z0;%*hot$MoUS(tlza-LTP+Hc>-79>;Q7P8rx~)FJV&HKfgKU?(+)8Zo5x?BYz@%klglpGSQ)Xm`CSuhx-kOx3Tw3A==sih&n zl!G%fA%C99-T+X~I;L*6YbMi5Lgw|h@<^eiCDI$SJGE&We2)JNiZg|wC*w~>0+Q|r zrS{%WwdN!pxI#w*Nep$d%xde;QnKD{cJ^;ROq5pb8t9|7CH_Aksa+BE?17@tyKs%E z)Q!0x94xV2@Tco9o_W2ODsB>njKe4ig4+5*|7MJJpaiXB^z)Uv`AB3;t15QwSF>Z9 z6=9H}@97FLivJ%#GN9lf&0!(cjVwQpysZk~t!l=7CL_$BpV?E&Rs%wkLXpDr7q?KQ!Nuwz+$Pk-YSQlERgB}BiF8^=0l3`J&mCv}WOLS~ z5WutUPb`$pfyTJQQraYlE}{lb`6GO@a>5aLofAi!8{roR+yZyY%iwBiu4(S4#$*;S z?s2|BoR@7R!B{fwnsO*$y_dB8cm4!pL=qr0Z;P9XNa-T z{>gfj^gx^E7?K-AmUAFSj6557JwrW$0l&rst>+H<6443|#P$5e2857RTKPw%BI~1) zqgOK7HMCoIzsyS(RCg{J!X7eXRTRZ%%DsdLDyqFfM)VPT1CT@Hd!uiZQna;;ER~Xbf%3qw_7Maz0($db=Dz=Zk$~vjq=J7jO zsS?hSz<& z^Ll1RIzFtUps%7@pS{8j%n+lfZHbd>j#S$I`VY)aQjSLwVyE(1C^ChPiT1xp588Rn z(n4tPs^HruBJwYyh~W zT^9wl(oPF%h9)NNRCHCr5}SFi9HhgP@)Sxa4o>^BsEZcds z#E@y_E4FskH*1l|4GH-gN4H|qHsc3)ga!AA_Ae?Ti~$ehlqz3kc4y9WeIGjYWNt@( zDGL7G=bGwm1c8{Wn;+L-0=B~kbXIzEVJq>ySAF-d3RO!qNC~lxRB+k5`6VO+u<_nH zsr=XXDFp*iYcMHIf7_}&FZMd7MzldnSau`{wT#G3^JQ1_=SSksrp= zd7qRK7*$zSf=l z{xV6S<-n@9_P2Lcnmv&T4}7=UHmTFV5wQ1#K6vJ~@oAvgsQO?3CHRDpU=BbxJLad? zXO%P4rN52)*&hZAwyKd4)`+DpAMXtD3MLROroa0~n{Ye~a6AJ{o-RL^Bz_tBgZ|D& zqkweM((<0b*(SF7OF#+*d?Y|#`ER=6H#RbcQh)6xyT_-jA0ht8II#lLP%YCY!O1qk zMB!GQF3bgZ)l#gfQVC{ZVHLYR$^g)ot_ z^3$K*03LI1;+I8DT_H&|h}>DJm-J+3(IXsxMaC4|-#F#$|mAdsRB$A>m(m1Y$fX>%!vyIokxDWdo`xH007m7;6b_8lxMypp_4x z#*9zuAkq-Y2S%U%aIEp_=q68y(E=_r1hFCW(s(&tVoc7*@BSK{BmxbB_U)fAUfo?SD9mf(oF-Gs%2! zOt`uttzbQI;%d=cKIM`zW7+V6FW}r0Jic20VUHAmEoC^1n!=zP$g2LX-?m-E!YU$Fb^Ag9|q$s@PVUoXZ|wR z0m2jmF{%1CawStkUGLQEUOl1umq4)ipS?RSU;<2x5ZMzyD-Vvc)bvZRM!(Yn#K~@& z$FZ&H*C5=?y)hDg{E=+F9N^=qQ}6%hNcuG3NMAC zmkepQ+*JFo11fMqT>is)$%~L{k za6&8JbZ~DJ@(>#FMRlkChej!|?{%z8)%F|kOqpAhI#?@q;06cLe_uLEeO3U$sA_V{ z2b5cjcFxGF7>nK6&aagq>YwvW`agfkMDzU_YeDs?rFh`S&rWwqbd(Ylz?xDO{sIXv z#4aR`5^9jxn=4Q0q_JBxXW$3HEab)n{g=WNm-tC51;WL-fol?%c#k9wM&MxEQLOYI zvU&ruCVZQU?PAD$yE^S`#k@+FDau7!X~7)48RASzN-%|*VEg-QcxM`5EebpJ2+jrF zoBJ3%8*>cY0pcU)-_q{|dQ*!ClDe_B>>EX#j!#_r(?(rWGGhN3N0U*l5|AAklrpB@wugGL!yO3zCK~XG zVBcS`F6l8$2?Jo@L!wCrr~wTc20YE&!*g*W*9b?_ww?d%6OXqPFfX8!RM4TgYc;}1JAe>3 zyKYYT(GWOzko~Q90SRn?5h!8mYoTtI8rdq)f3eWU`6|Yy&2G4Bk(xkdKZ)Q!Cj?O+ z=FtF5t>dw30oi0j^2Cx<2u7Da??13lTFkdZDr>Z_Zkupo>+Ob_VB$$4uW>tv(|;e0 z0L6wkd#_we3D|Ce_ zq_Ku^luO}78_I)VNf*xtvi~mO1`%72OA`Zk_H`OXgo@l)qZSo&RVcSsW85{6Yy|OH zKScg7$^$noOgAwhs|fNwF=koy=?6hzI0(H@pS(&SCah@n=5LM#5#^tsf0bH;@H>DP{6RbVx|sYzf|!-=*q=L|K2Yv^Q$#h zOqeTrqx-CTL-ocUHS}gO&<35xmiqH&Bl10L^+M&j|DD=!Y~B$IrURZUtbxl`QGydV zW%U_YQ_P>QrtcX$d6$LbgSBVPZQYxh4p;`f0j+01Q*QvQTPrfwUDs#Zudeu@o$dGT zB29)jr@USw4&Z=kNmv9lIDQIS+@z}VrUR?hZ=G?IiDB3w7$Jw=?FPE|E)yrCxch?* zSGKL>SLN8VxKxla;kEV>dvw<_G(H1$aJ+(n@gKcp-vnTR|7_NrOb><|uTH(_hFJ}F z_JYdBnZ``=^WF0OIVzI7dAS*)V?=E+OP3N*$NyPoMWNGy-O<@G3^#6dy#TFxL<=k6 z#ObTer+_nxm}#a;3)p3Ud1w~uar5BbNF%T-`pX(r^Pm}cAsINJ(l37f3Z`+u;{7i# zSU0Mk7aM`SkK^6hSy-IF((sQBi%DN1fa6$?kD7uv)1kS7$)TPZi%C^FK+k-9Gz)!1 z1>^6ii2 zYCo_gi>(_0v`2yAi#cWxJ1jWP#B@MTf89#VNC%ES{*p!u5Kv%{6)gw;Gda3WSj*2J R@sj}vJYD@<);T3K0RW_urV0Q6 literal 0 HcmV?d00001 diff --git a/Images/thought_bubble.png b/Images/thought_bubble.png new file mode 100644 index 0000000000000000000000000000000000000000..f939c2c2f34eadc1ce1a0f7db22aad74f8317d35 GIT binary patch literal 34272 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 0) - mob.highlight("black", lambda point: np.linalg.norm(point) < size/2) + mob.highlight("black", lambda point: np.linalg.norm(point) < 0.55*LOGO_RADIUS) - #TODO, reimplement all of this. - name = tex_mobject("3Blue1Brown").center() + name = tex_mobject(r"\text{3Blue1Brown}").center() name.highlight("gray") - # name.highlight(DARK_BROWN, lambda (x, y, z) : x < 0 and y > 0) name.shift((0, -2, 0)) - create_eye = Transform( + sc = Scene() + sc.animate(Transform( circle, iris, - run_time = DEFAULT_ANIMATION_RUN_TIME, - name = "LogoGeneration" - ).then( - Animation(name, dither_time = 0) - ).drag_pixels() - create_eye.write_to_movie() - index = int(DEFAULT_ANIMATION_RUN_TIME / DEFAULT_ANIMATION_PAUSE_TIME) - create_eye.frames[index].save(LOGO_PATH) + run_time = DEFAULT_ANIMATION_RUN_TIME + )) + sc.add(name) + sc.dither() + sc.frames = drag_pixels(sc.frames) + sc.write_to_movie("LogoGeneration", end_dither_time = 0) + + + # index = int(DEFAULT_ANIMATION_RUN_TIME / DEFAULT_ANIMATION_PAUSE_TIME) + # create_eye.frames[index].save(LOGO_PATH) diff --git a/helpers.py b/helpers.py index ff286c70..fd060610 100644 --- a/helpers.py +++ b/helpers.py @@ -4,6 +4,7 @@ from PIL import Image from colour import Color from random import random import string + from constants import * def hash_args(args): @@ -25,13 +26,13 @@ def to_cammel_case(name): ] return "".join(parts) -def drag_pixels(images): - curr = np.array(images[0]) - new_images = [] - for image in images: - curr += (curr == 0) * np.array(image) - new_images.append(Image.fromarray(curr)) - return new_images +def drag_pixels(frames): + curr = frames[0] + new_frames = [] + for frame in frames: + curr += (curr == 0) * np.array(frame) + new_frames.append(np.array(curr)) + return new_frames def invert_image(image): arr = np.array(image) diff --git a/mobject.py b/mobject.py index 9cec9f93..237c0a28 100644 --- a/mobject.py +++ b/mobject.py @@ -4,6 +4,7 @@ import os from PIL import Image from random import random from copy import deepcopy +from colour import Color from constants import * from helpers import * @@ -264,6 +265,11 @@ class Vector(Arrow): class Dot(Mobject1D): #Use 1D density, even though 2D DEFAULT_COLOR = "white" def __init__(self, center = (0, 0, 0), radius = 0.05, *args, **kwargs): + center = np.array(center) + if center.size == 1: + raise Exception("Center must have 2 or 3 coordinates!") + elif center.size == 2: + center = np.append(center, [0]) self.center = center self.radius = radius Mobject1D.__init__(self, *args, **kwargs) diff --git a/moser/intro.py b/moser/intro.py index 1c5d1426..db3ae295 100644 --- a/moser/intro.py +++ b/moser/intro.py @@ -17,27 +17,15 @@ RADIUS = SPACE_HEIGHT - 0.1 CIRCLE_DENSITY = DEFAULT_POINT_DENSITY_1D*RADIUS -#### -def moser_function(n): - return choose(n, 4) + choose(n, 2) + 1 - -def choose(n, r): - if n < r: return 0 - r = min(r, n-r) - if r == 0: return 1 - numer = reduce(op.mul, xrange(n, n-r, -1), 1) - denom = reduce(op.mul, xrange(1, r+1), 1) - return numer//denom -#### - - def logo_to_circle(): - from generate_logo import LIGHT_BROWN + from generate_logo import DARK_BROWN, LOGO_RADIUS sc = Scene() small_circle = Circle( density = CIRCLE_DENSITY, color = 'skyblue' - ).highlight(LIGHT_BROWN, lambda (x, y, z) : x < 0 and y > 0) + ).scale(LOGO_RADIUS).highlight( + DARK_BROWN, lambda (x, y, z) : x < 0 and y > 0 + ) big_circle = Circle(density = CIRCLE_DENSITY).scale(RADIUS) sc.add(small_circle) sc.dither() @@ -102,7 +90,7 @@ def summarize_pattern(*radians): new_lines = CompoundMobject(*[ Line(points[x], points[y]) for y in xrange(x) ]) - num = tex_mobject(str(moser_function(x + 1))) + num = tex_mobject(str(moser_function(x + 1))).center() sc.animate( Transform(last_num, num) if last_num else ShowCreation(num), FadeIn(new_lines), @@ -270,6 +258,7 @@ def next_few_videos(*radians): return sc + if __name__ == '__main__': radians = [1, 3, 5, 2, 4, 6] more_radians = radians + [10, 13, 20, 17, 15, 21, 18.5] @@ -282,13 +271,20 @@ if __name__ == '__main__': # connect_points(*radians).write_to_movie("moser/ConnectPoints") # response_invitation().write_to_movie("moser/ResponseInvitation") # different_points(radians, different_radians).write_to_movie("moser/DifferentPoints") - next_few_videos(*radians).write_to_movie("moser/NextFewVideos") - + # next_few_videos(*radians).write_to_movie("moser/NextFewVideos") + # summarize_pattern(*different_radians).write_to_movie("moser/PatternWithDifferentPoints") #Images # tex_mobject(r""" # \underbrace{1, 2, 4, 8, 16, 31, \dots}_\text{What?} - # """).save_image("moser/NumberList") + # """).save_image("moser/NumberList31") + # tex_mobject(""" + # 1, 2, 4, 8, 16, 32, 63, \dots + # """).save_image("moser/NumberList63") + # tex_mobject(""" + # 1, 2, 4, 8, 15, \dots + # """).save_image("moser/NumberList15") + diff --git a/moser/main.py b/moser/main.py new file mode 100644 index 00000000..e37654a4 --- /dev/null +++ b/moser/main.py @@ -0,0 +1,137 @@ +#!/usr/bin/env python + +import numpy as np +import itertools as it +import operator as op +from copy import deepcopy + + +from animation import * +from mobject import * +from image_mobject import * +from constants import * +from region import * +from scene import Scene + +from moser_helpers import * + +RADIUS = SPACE_HEIGHT - 0.1 +CIRCLE_DENSITY = DEFAULT_POINT_DENSITY_1D*RADIUS + + +class CircleScene(Scene): + def __init__(self, radians, *args, **kwargs): + Scene.__init__(self, *args, **kwargs) + self.radius = RADIUS + self.circle = Circle(density = CIRCLE_DENSITY).scale(self.radius) + self.points = [ + (self.radius * np.cos(angle), self.radius * np.sin(angle), 0) + for angle in radians + ] + self.dots = [Dot(point) for point in self.points] + self.lines = [Line(p1, p2) for p1, p2 in it.combinations(self.points, 2)] + self.add(self.circle, *self.dots + self.lines) + + +################################################## + +def count_lines(*radians): + sc = CircleScene(radians) + text = tex_mobject(r"\text{How Many Lines?}", size = r"\large") + text_center = (sc.radius + 1, sc.radius -1, 0) + text.scale(0.4).shift(text_center) + x = text_center[0] + new_lines = [ + Line((x-1, y, 0), (x+1, y, 0)) + for y in np.arange( + -(sc.radius - 1), + sc.radius - 1, + (2*sc.radius - 2)/len(sc.lines) + ) + ] + sc.add(text) + sc.dither() + sc.animate(*[ + Transform(line1, line2, run_time = 2) + for line1, line2 in zip(sc.lines, new_lines) + ]) + return sc + + +def count_intersection_points(*radians): + radians = [r % (2*np.pi) for r in radians] + radians.sort() + sc = CircleScene(radians) + intersection_points = [ + intersection([p[0], p[2]], [p[1], p[3]]) + for p in it.combinations(sc.points, 4) + ] + intersection_dots = CompoundMobject(*[ + Dot(point) for point in intersection_points + ]) + how_many = tex_mobject(r""" + \text{How many}\\ + \text{intersection points?} + """, size = r"\large") + text_center = (sc.radius + 1, sc.radius -1, 0) + how_many.scale(0.4).shift(text_center) + new_points = [ + (text_center[0], y, 0) + for y in np.arange( + -(sc.radius - 1), + sc.radius - 1, + (2*sc.radius - 2)/choose(len(sc.points), 4) + ) + ] + new_dots = CompoundMobject(*[ + Dot(point) for point in new_points + ]) + + sc.add(how_many) + sc.animate(ShowCreation(intersection_dots)) + sc.add(intersection_dots) + sc.animate(Transform(intersection_dots, new_dots)) + sc.add(tex_mobject(str(len(new_points))).center()) + return sc + +def non_general_position(): + radians = np.arange(1, 7) + new_radians = (np.pi/3)*radians + sc1 = CircleScene(radians) + sc2 = CircleScene(new_radians) + center_region = reduce( + Region.intersect, + [ + HalfPlane((sc1.points[x], sc1.points[(x+3)%6])) + for x in [0, 4, 2]#Ya know, trust it + ] + ) + center_region + text = tex_mobject(r"\text{This region disappears}", size = r"\large") + text.center().scale(0.5).shift((-sc1.radius, sc1.radius-0.3, 0)) + arrow = Arrow( + point = (-0.35, -0.1, 0), + direction = (1, -1, 0), + length = sc1.radius + 1, + color = "white", + ) + + sc1.highlight_region(center_region, "green") + sc1.add(text, arrow) + sc1.dither(2) + sc1.remove(text, arrow) + sc1.reset_background() + sc1.animate(*[ + Transform(mob1, mob2, run_time = DEFAULT_ANIMATION_RUN_TIME) + for mob1, mob2 in zip(sc1.mobjects, sc2.mobjects) + ]) + return sc1 + + +################################################## + +if __name__ == '__main__': + radians = np.arange(0, 6, 6.0/7) + count_lines(*radians).write_to_movie("moser/CountLines") + count_intersection_points(*radians).write_to_movie("moser/CountIntersectionPoints") + non_general_position().write_to_movie("moser/NonGeneralPosition") diff --git a/moser/moser_helpers.py b/moser/moser_helpers.py new file mode 100644 index 00000000..e1ba9b6f --- /dev/null +++ b/moser/moser_helpers.py @@ -0,0 +1,34 @@ +import numpy as np +import operator as op +import itertools as it + +def choose(n, r): + if n < r: return 0 + if r == 0: return 1 + denom = reduce(op.mul, xrange(1, r+1), 1) + numer = reduce(op.mul, xrange(n, n-r, -1), 1) + return numer//denom + +def moser_function(n): + return choose(n, 4) + choose(n, 2) + 1 + +def intersection(line1, line2): + """ + A "line" should come in the form [(x0, y0), (x1, y1)] for two + points it runs through + """ + p0, p1, p2, p3 = map( + lambda tup : np.array(tup[:2]), + [line1[0], line1[1], line2[0], line2[1]] + ) + p1, p2, p3 = map(lambda x : x - p0, [p1, p2, p3]) + transform = np.zeros((2, 2)) + transform[:,0], transform[:,1] = p1, p2 + if np.linalg.det(transform) == 0: return + inv = np.linalg.inv(transform) + new_p3 = np.dot(inv, p3.reshape((2, 1))) + #Where does line connecting (0, 1) to new_p3 hit x axis + x_intercept = new_p3[0] / (1 - new_p3[1]) + result = np.dot(transform, [[x_intercept], [0]]) + result = result.reshape((2,)) + p0 + return result diff --git a/scene.py b/scene.py index da1ca609..1ea1f4cb 100644 --- a/scene.py +++ b/scene.py @@ -36,6 +36,7 @@ class Scene(object): ) self.background = self.original_background self.shape = self.background.shape[:2] + #TODO, space shape self.name = name def __str__(self):