From 11b1b4bfb100b81173011a20f946a9e9abab0025 Mon Sep 17 00:00:00 2001 From: Shadow15510 Date: Tue, 1 Jun 2021 11:36:26 +0200 Subject: [PATCH] First epidemic model --- Old assets/bground.png | Bin 0 -> 18592 bytes Old assets/convert_world.py | 39 ++++++++++++++ Old assets/world.png | Bin 0 -> 2216 bytes Plague.g1a | Bin 56796 -> 90388 bytes README.md | 2 +- assets-fx/bground.png | Bin 18592 -> 18445 bytes assets-fx/dna.png | Bin 9522 -> 9750 bytes src/core.c | 10 +++- src/core.h | 5 +- src/data.c | 105 +++++++++++++++++++----------------- src/display_engine.c | 14 ++++- src/epidemic_engine.c | 82 +++++++++++++++++++++++----- src/epidemic_engine.h | 12 +++-- src/main.c | 8 ++- 14 files changed, 199 insertions(+), 78 deletions(-) create mode 100644 Old assets/bground.png create mode 100644 Old assets/convert_world.py create mode 100644 Old assets/world.png diff --git a/Old assets/bground.png b/Old assets/bground.png new file mode 100644 index 0000000000000000000000000000000000000000..174080c9a26023ccb0eee8c433072007f3e029c8 GIT binary patch literal 18592 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 R 52: return 1 + if 24 < index < 40: return 3 + else: return 2 + + +def show(): + img = Image.open("world.png") + data = np.array(img) + + rslt = "" + for index, line in enumerate(data): + for pxl in line: + rslt += f"{analyse(index, pxl)}" + rslt += "\n" + print(rslt) + + +def get_tabular(): + img = Image.open("world.png") + data = np.array(img) + + rslt = "const unsigned int world[64][128] =\n{" + for index, line in enumerate(data): + rslt += "\n {" + for pxl in line: + rslt += f"{analyse(index, pxl)}, " + rslt = rslt[:-2] + "}," + rslt += "\n};" + print(rslt) + + +get_tabular() diff --git a/Old assets/world.png b/Old assets/world.png new file mode 100644 index 0000000000000000000000000000000000000000..359c314c739d98eb09b02d21081b6d153413e81d GIT binary patch literal 2216 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 delta 7707 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 diff --git a/README.md b/README.md index 713f60c..fddbdf3 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ Dans ce jeu, vous aurez le choix entre plusieurs mutations pour faire le plus de Toutes les mutations ont plusieurs spécificités : - Contagion qui détermine la proportion de personnes infectées - - Sévérité touche la recherche, on peut la comprendre de la manière suivante : si la sévérité est élevée, la maladie est grave, elle entraine par conséquent une recherche active de la part des Humains. Néanmoins, votre compteur de points ADN, augmente plus vite… + - Sévérité touche la recherche, on peut la comprendre de la manière suivante : si la sévérité est élevée, la maladie est grave, elle entraine par conséquent une recherche active de la part des Humains. - Létalité détermine le taux de mortalité parmi les infectés… Une létalité élevée fera de votre maladie une veritable machine à tuer, mais cela vous dévoile au grand jour et accèlere la recherche ! - le coût en points ADN. diff --git a/assets-fx/bground.png b/assets-fx/bground.png index 174080c9a26023ccb0eee8c433072007f3e029c8..3547c43cf7d60bf48f08a7c155e7587f10d33921 100644 GIT binary patch delta 14779 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 VVupY!**X9K002ovPDHLkV1oDOkOTk# delta 15113 zcmX}SWl$VU6D_>U;_mM5?m-rJSR}Z+1`nRa-95Ow6WldG@ZiCNyF27Q@4a7r^W)TX zbyd%qs_vei>4{4O79;@^X<+CRlISR)c5b9X$zlKg;=02+#_tR2P94Czzde&DTV`l6 zH}jver%6Xm#-jFbZ0%mT9RB-w?EJUWr|s^sYR}SxI|J=FBu9YSecWz&L*etc@-O=? zDXuR~dM~w~UmW%vb{$@PrJjA?A0LNi;KWSeq0N1U6}9yglP1vF+d~J(KBFV(X-M(~ z<4wl9XW@ruA+ESMq6qm6&c$QJ-os(V+uM0tK}o%- zQ1A7rb$Wh1^zB=NxO1? z{Tr4dQ~uaGSU=(X_wxSz#ir={>+u`GE!ry-o-*i^n4+5iMl)Lax~u$>C*l6wH=R`q8n5n8x#YD8(BV1_%~V) z?VjyXe8%*DJ;SjZ2#`4!Y%3f)Rx_3X557;+_>sK5pFaM>U6zJDcXGD~8k(7*D+{Y% z*B~z?I2uNYtIuyj^n@A(X74n|Wg|r)K4B+^Vf)85hWCr{@A9-mifwmkVFy^hTyP(x zA`jT9=TG_Bd)LR|i*G^Un-N1xlbH*T?J%oR8{}M}4bDA(EVwmm>pM-gY|18x0^^sI>U-`te{M@5=#Y2&T?KPl=hz+CHBSov zIdf;7x7oLEYEx< zuSAYnFJ%(^#Aq(fnU8rMp1<W}lE`xieAijKJM>U)>5$D|=;!-8BNorXnCqtY{vsj$_yT37nl zPhSmiwUGjb^+?RVv@{%U#O7n7Q3#;i^c*upoId&gB0Xns|M#L1-pI4eAqG9V^+JAM z$r)YLtR7}c5K=m@w<-O4gZ35Ybx}$1BEZ>~yko?e@)Eux9j} zEzW$uy=rt&>S)&3U~(|lI1g=^I-piS)ZI*4EXV4I`tv8g@ZMWVOz1$w`R0{>Q&(Yb z`aR$7OMWM|88qLK2e`GpG$DF+FrGflpYn7{k2fdX5X!~ktlIqA5W%Ngd(NjIA3RWd z;rlk}Kc=U@BwX0Y{v~9xwLvi?*t;BoiKGvmsFsDpLVP#goleJr(DPFAAi2PAxc_H@ z%HY$VL$*C|KCSPqBdq%4zVxqRxUYO|IOX-D!VyY86QH^HVV-UX5s?BdhJOmfmzqWm z(&S*)q~kG5-A358Ky5pzXR_-t3zuiprD7FAy|Maw9Dn|FoE>1Cv?NTu z-{;PSM(hJIwYFCc5q&%&7s*PTj|-b}9gnj%r!P9nWS;4YwGLxVCnj1z^2asy51q(0@j%A z$nBpU=@wM?Xpz<@#(40sQuSzN2Jq@;FT}oG_fE*>_Fk-bk`Yj*sm#TG*+%RvV^sGu zVMP1ol(2b^CO&Q}<~*q-AkY0Js_nB?TvefS#yAvMhgd_XboP3q&U(DmYF|KTBXSnJ z-_0)o8pel^5RuuKxJV9$AR3a^>!1vwQG6T84A7k-F5VN+C49uC#C>Td4AIHpxQ zazS;K%R+|i;7v=UIlJ&b{W?&G+fubPU@hZCRhRKIt!SA0%j!^JyiT2GDTwSG=$OG= zQrB^AJdbaEA0yOG_QYr1GLh zlf8Q`CQiB?v5?%KSogR!z$=e zFp$Ay7M|OQc^+Q%c^W3>$BpSs4}4N|;!2aR=z? zwd5|8Ao;P#Z}vftUvKc}K)0lIa@+2VawuUK4SB49s>^N?A(>hQWY=cApqg4&mf~9c zUYYSV_$}l;8f2!V3Qk;4B>4Jh7jR&|ppW-vnc4wfbO5gpRyf*;L_G=;_8`UI-^-cQKFs3LNS z_WARE=1Z7N#a>mtQ!K*uY?8`F$sUtE9O5V9E7%gU!fOrmXmr0(flcPqj-nBgEEn9h z6?|_cnuHY{e1&~)_Bd8X!$_!#)XXJzDTPWjvY7;OGG~zFsAsVWe(cw@;o0*siPQr2qZdWJ;7;p@_@#XAeF^wLPZCEM&n-5EGh2tHhu&3(>~*q;W0@&P-5E6n#_owhi<2J1pMK5N_;+?t`@{oldzdaN_O z4Hid;@)V}d!BA?vko4Hi5dWRy5$&LfZs?$$zlgM7`P&rQiBu7u0jVIh)`yG?O#>D$ zP2q+mIid_j_(=qJYb(LMygA%`WIwQyF&|5RETbG|r8{Z|NXhST zLKk;=bDOIW#x<<_sMlkFt+}D$kF!~BsK1BHn`5ZVQ_jS5ByQTBkqE= z<{}*-)V_ndts@s*Oj4qqk#-wG?JWZjfgfMV;32z%S(D0#-{MCGod?le5TW@spcz+5 zZG=imf`8k?m?ReJ;I~%*N&v_mLLMQQAdP&Y+9zK6kDt0Jp83P}RF+>Xejt5K4D0tW z|D5D(MdZci!C@188|k?4Asw~4dFOsd#0eOMN-fxHHbgSKmT{Db+9%#^$FJgR;WxUI z^yDUJ#3{m2GGW~@JJ$&IN0pq{E@RGF4f`c#J6>3-w;PyRy8mG%P5e6Rs%Q>1$GJn# zLHSA`1`sbzco}-w0TKDXs$;gOPoxLpx{=8$Xjos=xVetwkr5~zC7WJFb9L$z;>P5p}-vy;x4=M!vE|M2QIUvJ#N z4v0Fd<}0mrJ5O>@Vs?m$dLI$?gkZF)Reg9SB8tS1>{!}%1R_URSAz(~*vK?^l|WoA z{&;iNhhYW6iX^ub{ZFPZ!1c=flPE9_6lt5CDzh3tHY4bBc4V4`7Q0vhEkDJJi$CRH z3tI~eq{^!;OHJTAae#pM-( zXmK)OeUml_KSU?yxpF&t0+(1R6YTJojKK~?-K8&wZL$S^Ae?s~l9x!zap?7Qm3?bCC)ehi!Q1VH%L|e3!-A(zXsvEkXjX`u9;uJ;LKlzZT=Fiy# zWRy{!p7{=Hau?60Ok}=J#VHKcjYg?_SpG~bX|5$bT7Hejfg3W!Oicz|r-viwY2tp< zxxj=Qgn7t^6X%3sg=uJ9)qEaW+JFhdT#vKN2%>z|`!YJLwa5E7J75$8OWp$d42g6U z273N1X<}|7N`npIV`OB74Muegui|FrE;`?rEcb112P?-J$`9;2>b7Hw-uqbElFQaR%SQcKO1y$Ds|%dy_v(w6XY-FMApu&Ua> zqo0kU)e}TgBh8uG^M7YaCX>Rh@Y)pA36JkoIr|xTKX?XF#MFF}F$a+bOW?D^MXb~7 z1!1g2Vm3(7Bt!^*Q2$l1S%ekX`P{^Zk3J`^?!YLsv8n9 z9D?b#Gif?am(c8MhFOk$y?~P{1tvZHi2j2b^LT1~A;DAPj%xjctP%LXUBfRzstaUq zDucT=u9a~4X7y$lATkAth$Y?{=V3(;A=CqSoHd+6+|x<_99M)QJaPlYZVXina+Srn z#=dUk($`CBVqic&!A#e1{+z>{I%%I=Q1T#(>YC$_PxiZMj&2`pJ{0{%i#2k+ z{i9t4OWl*vV{%hVt_^XS8^YV}TwU^{g-ex5jOZCrQ7H*+nfd)!wBW{e z?rKbvh_6+Kr2%o5qy>bUjJw`CeVT~$&d1pA>H^~z%szaeRo_fwXdc$gmiOVC6q19R zRY)lR4a+R)B79w*#*T`TbWrc4;-MJ}%^snHY>q6|LreX%n_w&UWX6qwyMw_V+BqQ^ zhjpKXi9!qAp$bYmVvy-Avgi3Mi*5c%MTIjtO~7b8sTFY?f0-3OGpJBaQ-dM){&!$W~xzNu@nY`=t_Pq_45TC}~jUTB|W`YTvlP57}KHL%B~0 z!4=%dk^5PJ1qP$2mD{!HVQR4XWb49RPa@tn(g_X47ubkoDq$DbCk+L!6G%zCh@>o4 zn#Lcf|DafuN>UKG824~XgTootqt@)dTAPIo1^#T1^M(Nvqza{CWl@Y%=KXk&_pqLI zMOcHIWY=tUsOT8HNS&+xLYq8)GN1Tx6dQ=3nz>GY5H`Oz=)p?5a4Bg-=crBgEHvF( zAe%-$ua~4qw`@8nmhJ za*;OGq+7z_k;$Xc?rpeR+O({frm7W7tupPP7IT`5_S(&)JkgUso01Uo{AK*y)PzfZMd^QK zK>bkTCMNHP7NNEoG)eEM`BTJbO@}Nc zyRn7Jx^%DWQ0*Y6Cq*zU>Rz2EQy=D!eUp*TJk~AJJ>++1aM=YSE+J5LbFuxY<+8}?7Bg= z5z06BF_idx|G|lCEAJ|(!0%Br#L!HSjNN`ljDkqQrHTHv)Ikyqh#PF5mDL165yj|i z%(8dnFIB$-dWCI2W&6hCAluuv^AYcbGXZc=11NJ;>{lq25=KMYd&dyTG}moY*;7T; z4;o{f+Gel!uL3o;)7g9Y_I9o!lohvIZugh4H?efn)*0YGvr3ynvb`1Ib^>m~s%ZBvkZk2+rC> zo186NxqI=jL7VC5mI%?2p=agRIm*>V3RTK+vW)LViXD14yA9N+@HJglaEEZKh3%31 zqPnKJ9(Al&48MXVgEnmq5fiHDwKIrJrN$KzYjEd4uF<+RZmuM$`uaLhS%;w#@}Ea# zh%9C4vwysu{R1B7gU&uxGO0%|Xhc%6-tX;ydlnxjp5k9gyhF|X{XM2Mwpq4+@LCv+ zlJ0a?=dQn2F8Jv$=U840?n7>8!2=GUXp*CiG~;G?0*5)3FJ6tF&kL?VWc2%S&04Y*HyS>UsUnj?)IBw>;0%+YM) z4MdMdB=v~{6RVT|z#NxLMuDHl^wHJIKFH4MvFH`h36(b zllYOR<3w9uWwW#m)xDDZO^y~$n7ELb$dYzEAT34w;o1_? z-V}R)yr42*jHc%q+dNW3xQ?f48Ld1sFalF)MFiJWnw$ExFo9)tZH~uL(dcxo(xKuAeXnA(l@1qE>2Vy0xgF9OzNa-3Dm!C+MhGU z!^=U+jQibB3gctegetJE3{p_(4{>zc&~bnTm94fG6xphZ7INhisKpP!#Y&n*TAz44 zyds^S=Z$*ChrKH0Jw$N`5fw2!NE7P=S)xlSn_^tkXqZZs0 z{wfh*zV(j&1%}j=EqqgCUgAP>KHe(m-}Z&B7!9Ytg5@&q$9EVx=vP6`0?S7bF+e7NY;XJD~@w0R~@;2R+_QaSV-c%82 zb^iwDA(}4F%9nzfaX6mP5O~7bb}78Vg?$ikEoN#>cs1;shkoQV7$yW}##F=f$r4l7 zLad%-_x@Wc=7`~@@^|<#PG^aq)p|BlGI4lQFPYXb6p))7kC~j!!7Hp9EahVF^kRFWX7N>wO<%6vczLp*;hK= z`CtdM%=NS7MVo2BV(rH4Aauz<5=EL;Zps_1k%+$4g5})LP9(R_FHYbLwEZo`20y{$ zdGF5xY%iPRYDdOX?Ksr}io;gA3Lts^WQv^SDH~P7?^@ivh8z79HAC^*FIomw;E5j3 zqSp*Q@WM|9@Uz#?wdH|7O}xU=ZvADH!&==CrkIaf2E^bOh1GO#6JvqF=U~n%bZt{I z+=-48{Wwa_qUaMxRSivzg+!B;lp!*tSZ|>JuUGXR^3EZn{zpWzD`dp^0nAicqM!`n z{E7>+q-1iYqL8Tja4}_fqA{rcEG_xMG%w_!fL#|(yA1Y>qV1-Tpo9dm(g!5u*P@v? zi7TK1wJ;;$moL_+>Z%1%8_B2e1V)uft>kUyNBO958MgWptnzpYLz;ZES*s>k6OrLi z3y3dMIr*zEFOW!uJqv-JrFg$$55RbHE3;X@vN;zh0~=737g*T{cA(>?u!@cLL zJ1-X$Yf11j@YOrql+Zn*7Vo>K`Je&mRNigP072MK%Q!DSQhaufxRxS&0y5$L5yd;7 zi{8@777~b4ufEYJDOkmL$nATIqL@89+-Gu-X5uI4bNC0!D)O5O^8KsIbFnHfo0d}- z$~vRAF>Mw24fEUnZKsifc(lR@`*vjx(5(G4z@cG6>8O>?rWxvKXn9$p{kuo~qcxLc z8-vKQ)Ea=F9%WcycY%k3^!H>|DJ1-fW-4=+vY{mIY+(q+0ftrPN4KG$1x40W=d0{h zS=Hw-_~mB$WG&BOfda5ZLx(T5jBT*_D2xu-c;dGtl;Z^~a_u(Nzkcgtt~gY7^s2R@ zwdTE~v`z-j%+}CQ5FKoN5Xo?w%4*hJv|BbxHRa{%V*2z<%CJMNd?<`avW-Cl1`jrX zi{dSQVX4p?J}7sT98OdP4OM$hj0%Is zUFbb7rAA&^C~$sY>iy1^*t_WMnTaDBg`hC(zaU}GP(Kx+TGrD+ISE|9W zK;dRrFIP-dHBn+q%wcLVnWa%MAnI8*g~M6`;V^Xk9oJ+n#C()C^QZpHK_!fT>A2%< zN^8ka$y6+2i7n0k5HQtz3FE*y1yv&k5M_RVerdBKr6sZcZR zhJ4sUqNFpA0xK&qpE%uZ&xD+4&NoI@8kap?QPJ%WBXD?`&NhV13L_%vzhXy$YJ1gw z`KpaLZ5eJ#YAW&iRQQQ872$uK2Aj5*Rv|2k#1EJ~^|J@rUaAT@qhumBRR;f-E<$ z{(5pn)AGAWP^Je#2B8AZS~ZMZ)()lqwxFBv^oA~>8(~=f{CTrKy4Yl)9hA316$XvJ z(Bd3sT2v9664;4u%%{G~XB0?XLlCE6XDo<1mR#@~h$KvcX2c5E8J8;6X$ z|B0{j*V9T_IGVO3)?XP-jA)}uHU8dn{+u%&?Uea(+uG&@J7twT+Qc8WaAK-?iaoZb zau{U8LNN8g4vUbJ0->bxC8$3aGpa+EI=n=&J7Q@R@x0c9y4Rk2XE{1WpN-7ua%p(e zG)5&|9d1hY*&WrCnFpF?1%;Hp;}pdpn*B$dK{NR;dtoiWmIr@ziu#1kb3qFB*hXz? zHu)1PexYHpzWirhh2mCRq9rjV4uCizA}wpR-JUwW3-##SwFE=)IMnWotn1-@lv>Pc zJ0pLeA~t<4TD3%u2Vs$Xvv|v5QJKvAg>$9bozK^v*i2si%4TH4ye8Wd7hwg>emp>X zVW0kh4#fcKRw4SF-i`A4(W`M>MS&2XiO15$n?Ht3h_H)>voHFf_ET?H6#^g`ejyR8 z#RG$AS1-2L1dJK`47En*7W024Q=5 z#|8?gB5Y+@Y=$lFCKxC5N_JoV$>mWS8f*R=gh%pxv=F*{1@)XKwe3u!-O7EJ9nvDJ z+6Ktm0Ae(jch!F!eM1W|m$_e0*YD^u{I6H-WuiAEkiFS+l#fC|m=J0^Z*;;~gxkM@ zbh}?Rq>MHNI4(%REM8R}%w%_zno9N=$H1{-x$roXs)EU% zmOklhnzrcP6dDaLbss2y$%vK7b2M4u&fzy$tGCtGDys@${H+g3anmM7pKFvOZ0_#}zY5ycbOP@32-J@#l@m7-@5Zt+96tM3oQwO3(M1FN|RKPpL(6_ zN?i^iTx8DACyO`gB1?p_JvGj8hSyrZMgujpa%mxzwCaUg|PA zbO5$z$G$r~d`4$6ZDf{p#c(pAuxL}gk3Lxv?S0=}i7x9I%Sb5>`Z_+i*Gxji z^x)C6r{ny9QY(K%qPDOKe|=CU`iZ$0L1ZtXFaK`d$j%eUbOw}e-!ciZh8JQf zQs1@DdW7$}Q-vMMW^&O2`p7j=-BDR&QUJJNG3GO;z#nq9ye&l9;O< zYVmquJuG2h(X;tYB|!XD(OK=LsY8hz%0c$s!k>!3&1-;8IDlMD5?qZ)9!F!Yjygw7 z+nnJ0y&r9%OFyBQBSH>K^jL!CE||V6$w*fpcN_MG7gO2z0w8LCB0TaqJla^2BI?m> zy-$0+?%RyAd1{M|2O0bvaW+tw7lsafjnA9&omn~YDO25;s%s{BBUT1~4o1*{;+4~w z9sSV6NLTqg%T%R11cKT)!-<7dvyIB{!0)~&Cg853PMc7jrQ;#2;hd>t-;EjA} z>&1|5afihLly?E?USp>|SI5CthIN*6b0Ydc3P0KhvZAW2ky2uv8hRfaFajDAi@ zom?oahl%I9z>HfcS%IhT$=LzD!^q;LWnzyHb{H7QAE^q7X|6-B3#NPm?H(MI98uGK z%fQti_I6nx@_X!k-0%vVt>BzGAx7Zc;Qu`ynmJV)y-|;7Mu-LY&D|U;q@Xz9<-bAG zzuYA_b0hwEc%*rY4}zh-X5~@N_72(VvLnfPj4H07tsXucwxGw8e;b2(j{FsvmdSw2 zBjV#Z_St1@)IBpT4bdB4h%Aq^s4CO!O}y9L?;g>sUeK*p{TOsHHqko}o}!{{jHHvt zEG!7;W^TYL|I9EVne~7p_93y%k)%YWLljGjQXv^~_A>Bq+snCja4$3iR~1l5@bj4v z*y$Byz2VxMKvwPp1DkIc#L{zK&mZ_*ZT{4W?JMk^Gl*c>No5tp?iCosAjNN`gFKIm z47dFr+slL?{UvCVuim*fAV&;9bn^KGUQiHLHYT;_;`SnMy7%3$Y_X5RH`=XA5b53v z06=?h&ZLilp)u#;vF5k7WV7bx=40a(H2>o$?Ybhia5BwB4G@^Z^ZlLXx#qB5g5=7a=STHV zuLE2CKOdXtopo{FcNP`uv9NDRd6Y!&%SEJD-xoe){KfRR zp_G~0(0}q8ddj}jk6v{6PCZ&{Y<{(1$$uZ$SCnO@G}$qvFaBbpw!Fp2)bxT*JSovD zp|B%9Dl8gCdg>5~;cA=^p4C~Y>ILGoy5@nH@_#&Ap#9stzj3|8fD>^YL7ZUzr>2Da z^I*fAPbq>o9Ry!IzJ~k}a`eWbo%+YT1*K_)C3X4re8$|0v`)pAGw>Xmlhp1jLQ`4x z-x(5i7spDm^o_P)E1S+oic@)4W>Q)^3hP28px2smFJwGTaD`LIPb^<837vbK0&7|N?p!nOHP+K(h^ai0kSfoZ9aVJjlpwN@FYMj~(2CA?; zT~kzD9M%(at#i9NH2~|SGNC`^N+unnWQRP}WlK z>-z=C*QKOFrtmrGRvwFPeKwy+f+D`m!5<0L9SSR{w3okYYpRiZ6l>HEUyNK0~4|&MDUssgomqK zVHoKx!V_(*seDR(e5fHYA{f+xyh}P^S_co0gDPHooRc|C<69hHiR;ZP{EL&Qg;R00J3o*YL$ug7A;dt3^g@|dvd3v%O z$04316u0G_noic`&%F}HzL0xK^6f)xPMLqBqS_W}-FRme-Qt{*`pU`Fh7k?~u91Ce zlH+_lv283QOf$PFs7E7&N7sLN)_PuAuHN@w-FvW9;)tAqZ^S=g147>ejlDRI5=e8v zkQg+V(g3j&^Xrcye2K?8C`m)a_Z4g|fS-;ibpx8xMRbL)ZGt-pcEka0qf1EtR}$t+ zHXdDIrF&K4fGFr#XR^6)i`uU-(72zv?SQ~a-OJJc;l~o_w$|M@^*Fqq#wqK zm&%{i1-l=@yN3~^snDM#ThZ4daqcke@l4O93?Gh5#ZGj3B-6C(=} zMo>fg2ei@u1C4)zxGtQu?|l$hWWl>)zW%pyg(7C^{Z!|0 zXyG4>+gG6BQ3wSbDK6oEHkJQ>Km8w<7sl-Z%$(Vlp8o_@eWc6Zg@IDgvy+0rAzPaN zSV+D|CMuqEQyZ;|2LIGTt zqy7H>cFYCRXAFZu$8%1AK`(X!APW`*g8m0XnGoqT@nvUvcAb78QZ_wUz?*33GMB|> z-HvIY?(}9H%4XdGiXSGXbv3Vk@CV#(K1Fc}<8|ZNkjfxkU3a5ki+7vQA>1bSTKlKV zZzs^xm@DfkJTS$J=(3B73Os+Sd%=ob7pa}-pLZs;f=5)1`U=<6h+QE(Dm5E}Bdxjq zG-?h;rFovA5kBn=n1jEXQYaT2yu?0|_Lg{I9<#fI3J{}mEQgthq1&k>8`?Rmdy8G6 zSBMWSe3HNtU3gGX11a>NIreKQ5KOB}^b+bcq|MUAy5x9zhp$H5-P>9?^-E4GJEL%E zy!sHk^H?;uV6nT_WK!ZlVfD0z(r)(X>v3;)pVq$Lk2+v{VSK3a=9W|0uC* z!_O-&`!terI3T@Cz`|Xh!`62SMDvyy`I>KN>dvkloAlFR%=yBWw>ms}%@jardW2Ua zcw-BHXHahFx;KYfpm}RQHTzkXd?4^~0E1c^N+Tc8v^xgMn(-O%Fw|_dY~LN*08uqf zu(8QiXOQ^(Kx6E!_GYdXYzji#u2(&pw;fE9;{kWS6kepwaB?SdCUO!J0^keKEWy8` zE3{{PWLuK}W%cy^eATgU=zC~SJ#bqzvT3&oq>i6Rt_`x&)pOch(~=M}D(*T2#(Jdx zd#R{;mLrEkE||-B&MgPZ$b`PX$F5YYWfBeU zK@;rYO0Z|59|eG#upw!ZQvTiOpZ+2nL!A2%Q46{YWW5=YWCC9lEY~nHf`D)w6<)|_ zoRloUODWa&uPyy3MYR3*CQ|Sq(%NgNU-@kN#uehzWS;`*6)nZ(KFYq^7RAS>GNEn2 zA0i>0izBHHG77&#!=yMG?~5GIz?R5MGL95ke>&s6zk35?Y3pS?c8=c%&a!`~1wd2- zOBKnS*DuJCcd>_?y$FsPc$)CJMCGZnvRt* zy2h9cE}092m!SqS^_7G8o)-pQQcmM~YQzR^=kotFYWmUno_x$&sf}*wk(16`SlK1@P?t&t}Vlle!bA>eB zl&dxZSwESP1QC(iQdO1f%J{XR2f+lPOKoNrOT4=PbOUzu}* z`ZDf=WA{OY;nZqltUHEIEICx6e#w3LAHQ+}J@`<_?=IlJ*`?Q$WciPn3sPOEX^P8P z1^WyL>Wgd-#Z+N$-;H%(_InzM5eOBOi{R+al?vDnP@7}NEz}3^GE?S5BU#shrAHM_ z;GamNRIO93Z}agK2qMu&io2l_k}#1QT9YZk7i|E@x!|}{YA!8h<$mP%>^Ip?3;|q; zBXi(Ana^f)yc+GYw5Jbb9q#Ygz1S{wfX+)t!dUk*@n0yxE3AQ#`+Lf=`#(C%!Kl{k z8PG5`T&@s&Vr4s0Ihz1<`c^f86!S#M5j5$8*&WD`v(CIRh3h}aRMOI_9ZV~*N*q!K z>!NIu3@g+#hY>UNdsG47jv}K&niv|F!wU9)Gwe#;wLprjuLfV@X^`u~*#S2||ZIyoDssSzrXyTZpK)Zqcx{^ce<<8|R(|`=lG9CjU;} zNQs_K`!c-td9;rY-x62TQ*}T5!@@XL{kL3no1nKS3HDc^=)()WEDD}0$^tXOH|kl% zrawp0eeY~RjmXqLAnXOKog5)9#p=Yl(Je_L~-Xyr{1 zzeuCda+Iph5Q_a>@R#q{^3-M#3o(4hL{M6AAc$V>`E&<>juFkMoahp%F4@EsIGNC0q_lhHcJ*#}1g=j}mqC<3dhBf>-xRfg z0bc-5HsqpCMu#j<=SCr4Lkaz0Ttf5{dZx<1io=3DGK7kJiL+3EK4Uu}I;0KQDpXOP z2Jn{X2SWRSiGd+5fj;;T?ylf8C#{*mZ^-ClD#of#0Bc_?F0sttDD$a--6A~sua z2XatSHsAA_2^;7Q@!knCs593!pXS%8eA5@eDcQg?-xpZY0jv z2L)cL@A@(s$U?px)i36s=8vBMilN^T>YB>*`RcSY22%YXn(u-5-9eS1~*6-lQ8gq`?EFeFGK}* zZ?=k0|8EV}v0m|_w57ROfh{-c6jH?ZKd;4sL!@YQ$~6^n)MEVSNV#sV{d*M6>zB)9 zFVeM)pW*^M^7of&ieGL$XZqkF`F3vh`7Iaq7_-20$&pg%FNfDFl+!uB84Ih#5Gyuj3f1%)nq-*z;uj2yxZxfc0Ix7NeWjDCg-Z2>N}@ zyE}Iy3kK=+szTkKHDf@ow(H&f?yDms(0^m&RrqK6nKei-&!iUihv61B0t6c(6R-y3 zV6;Voz)Ar{(I-ZDladkQuq|xZ4HpC~P*{K_90q5_ji4EibgBcuo<>kNoXS37V26nrDETFK2)py2H5Qz= z1bEO!4wn*0QX9Fm%#AO7o|j1z-nIG-4u^c{`97-88w95eSBtB*i>kr)7v1eviW=P6E0Bx+%8-+khVuf?&+k!+MH^ zcz0^_inx3CI$Al4-Gu+*)|HhW1~c~WgUYc+5C|3#eDIwt46pqZ__@-iaBkuI}<}fGV+| zZ@4)cI1)5`+hZ%Q+6vU%{=Yc`Cns@00q@Ux?U#f%hc8pV&GKgu#=E9|{7ayTzq=1H zDyS!b?fk>PfCT~thU!EaoLhp@&HB?XR$q(1K(?e|$Q#4a0W3#?&Rf@n zlNcq8M2Tp$-j>q+2o1gG?wx%dr8=Th80hhX51Z`9MNl*HV?emVkdeN+%h={10BWkFp@|Y{|dzUVvO&^5f{`(j{ z4kLz@8`3wQDvF=GaofIU!@lk(=K0i+Zp|QxrH5D2v?Xoz2%VVYFIX~z-crg1z)Is0 zQa*fc5GkMsvSA58`oVM~~_*IfWFCjb=;0`&uakP%T<|M;P8 oV9IfjE&_h>t)S#R%yIt*+(g6BU#8XP1^hP@WK^Z=Bu#_=56E9cIRF3v diff --git a/assets-fx/dna.png b/assets-fx/dna.png index 5d515bd681fc919fe9dbce1bb1bca3b29197adf7..07127be892581f1b528da5bc2c768a57464d3427 100644 GIT binary patch delta 6233 zcmV-f7^dg4N|sEJBmqm2B_Mx}Bsp@0|ML_&0*$NjI9vhUK*!hjJhNNVGd+L+sj@3F zD#90%_UtY64)?$Q^M(K5PwAzEQoFa&TI5d|Wu(a)k3WCr_iC|xuRnkM_nrOq^N@bO zkBN^mzw__$?dP}s@%bMY`u%N_cl94GmVQ2-{9CVl{W}sCjueO2uJeNl4zIU?}EUl+6e`TK7_ zxBB;sAHF62hdbx}`!0X|_4Crq{&_lo{C)3uc<=tqZkEQ9w%YTXa;%D2iL|L8{J2vgv{eExT46&q}I=@reR6?J5?rEf*W1yHt zKlW13BcJS4Yg69Lr|HkJ*mvLY-ENz6<6|6|jEfm(q@b7okDq^kd!hFPc^25e(%V-b zO9CpxQ04T>QRN33KRBx20{`*z&wo_cOa<$=%+3U7TtAms)qb%h9ObXjnFA}of7-(O z`Mm&3#Jwwnu}lSGvs|rN>?w6K*3qfY)?7=iwbfp|jyhXzrPbD2Zz8|hb1%L2)_eCp`t%aW`@2h5iR4sj# z(t-WYs&Q)Xe_X;uCsj40VyPGv@2UWRPO4dSD7iak9X5%9{sg&Y`0dqGV8~L#@;72ee_rlNz^{0Qc!4cbCG)c>}8e1 z(mzTu+KScheIbw70LxmP_B>@!U3!Q&=%0jLX_F++bbGa}NAs`TR~zxpnDW|Gsxhs)hF!+gxroi|y|Pw02MA}^)w@8= zomZyTb+6gC;Krm>@v$iD##k)oT80+$oVWFs0{Lz5QCWAjlUL2F`KnSDnAUxsQ++^S zIX{2iLSnvGE6E#WN!Hh+!3tgB>jJtL=4mfoKPUGyLGWn%YRQd~6)=>ekJaDUYXOVN zN^|M)dTMi*_IO$G&=X-nnP((GPUkJo9;i-U?-m2**5lzazR;?>YO2gBom(kJXU&;- zVW5T9L)TK@Z=g@Ewlc;OYq{~AzB&!V>8*bs1bcPAd|4;=Y(8ck<=!~yOpbO7<39dV zsUO`rI#WLddv(|J19)dCyitRm9;d*0Z#!#@igG%apu=8CJ*>mp(>tJt=4^Wco$e2Z zT3tlRSr^zv21KoIpE!|Xid$@lK zxMvSuUxf&|^?N4eD3&kx4Y&4jq0BLlmg#XYeFZo{Q!j}o98rwuuWT9U%p$$1)oz11 z->py9zTu@a(^)nqReH2|NxVtb9xY{t>e(vsl??ynI?ih_42xvk)K?z`>cgV6z}v;- zMq=i0JEd{+kva=qaXU~5kf@-g!*qYJOP5RGYCYmZCiSNyaKJY}B}nYb5Y+_N8Kk@| zj@^f~yD&)EnzX$=V}o8cb(710X0lKD`F8#l5fe>(A#0qfVS~jn#&=j;F zK!OwE&A1cK&^nw@8bo~SI;Xq1(xyF|)J~3#5MtMAAI- zMr%WrvTgBPtj64NZ}o#8 z3n#AevKV6DXOWl> zJvwto@zh$p)BzQ#I;C(c)yaRM>6Xv#r_VnJwPQ0aHiaK=LyQS3(D&S`fEVW90B75QZ0S9G94dVs8+z>@B0i>t<4^ zqd!Ot3Xf;oEWX!mcX)v82{6(4grcSmDZjf_!*@>_yYx&A=cWVw&{cnQB#NDvygB-m zXv#cjfRLFqbKf1S4P~4;wy65NdLl5#6P#oRmIS{uH!7Q*o96|9{icB)HHxxA?{=mS zV=xoAPy(~o&<6x4A)c@#`T+w}-59~{Q^Dk*d;|2}u4*vUAT3fgKh|M=keQsof~fc` z2x!v%j6za;!Q_}|QTKlYRUY^rjt9Pm9Bt|c2d*8_SG8n%d+o;MsB}RS7fOPbDj70w zYS8O{u4(mupt25wq=*t<);}Y3mr$HeZ zGl{?ADrk5{2BTe^8{~pjYV(QlE*^}6T==g7$nn0RMzF`=Iz|&!cXck=-%PjJSTv>} zDNDG#@)9T&0V03*U|b%J1ZmJ0o@plp8BL>~`d!faz0l}ky$)P?OP_;Dp_$D$)x*)? z$yhga;il{(3C4DO&rh4ARyt= znz$OqwW)!;@OIb}?+BqBl&{0#(^)Y<({O#hxm~K_PO5)!#F2afLq@r8ykf=u4`bHQ zD%3)5g*Ctlph0HQYr4wR>(uK>;8FpT5FYj^0Z24((xwS3g)fge5yP>(ta?V;91(ZFpLdM!mU7!8bCMz z1EloI$g6)$1Bee`PYqHw;%*Ib#UST-2RG-i+qf+hP6Sc?yV?M4lkqg1lq9{PdDjWY zmuga~gNc$^;|y4BaT*GD2F-#dVGK5MgxDfcrWV8G7kHL;OK$cyJS4|096_Q_XpsF9 z281S%I5;+n`EZfEyY`g;Kt6cFm$Bu<7l??tCIWv{IFJV3^T0(*i3h(zo?^Hd*1J9n zh9E+*y^`^Q4LOp*XLIDL_S91AmK6%G<}r zwQv<`UbH(B=|*%`r45RT^&SM{&}TAOc(dbj13&;%3CCnYOp4$E7zj^K4)>rMSOMTz zWX8hfG`bAJCOQ)~>%@k143pdysSC^~Vo-IFZu=ExVl!PY)I-|v^90!->S8D%_NRZK zNHgQ4oMO=fPg_wNi=F5}Zbr_uc+o(h~B!<=nGt3Z5 z!ay1s7#buFHMvDx3Tqxf+xCdP`kpz!b{i5(qJFGa8qh7R`{kb~8lgMjb<&T^6gSA8 zCMLwzz#@<@0UZD)jL;^#6i9yx-~)WgCqNtQaP?;RJ(0S~`;gI%85_qXt=7^$behuiFq z>&MDq>ZZv>ATHZtArEw_KsB|~1_K-=NjQw2K~V@(0gr=YiE{DyZcXnM1MmWm?xtC1qs)#B@P&pzCE}$E#TSeFkm7>6aJYzTqS?Ijp!jUQN0UXJCnhV zXsZBMi!x;Ot`sosKu(72nvxRBRFY?P9DR#sL;ZY94OwLE36V7`s)3oJFP-3ofd#Vk zO0}T;imk>kFYRkpX!#RoZEaq;`CL$J+8VpJD^|F$+9OUZnZ~M}W1Q73fs&Ednznl5 z(ym436;DfWX)u2R1{pMJ+ZHnGxNZ6Qx#7rLP*k+_XhX85fN>}X?~9(xQ^Ll;r~{%# zR0H4*WV5_ORE~WV93T%4l+g1fegg!Y9?XaW5xX)FEJ%?BmaPH^e6e!VRxdFf0%xI) z0|z2st&x}yt-?XTpI&GIenqvI$`T##F=$r&az^!=tDArDvsQy$ zG76Bu6)FHElD?Dez_XJ3lY>Nee1a89Cpf`!7=ff+yVl8N79x?QN~eLqGh{?h`fv`k z7AI>s&$woF=J0(R$`9BS;B#S|t(j>n$v5iy>wE4ps;conAzK{gHiMwyw zzu@ehwWDpH(_c-G_Y8Rt61AyEecTNlX2q08U3+C9-cX~OXp4&3FS#qPu0%JHt$Np! zB|4T=m|5(zl@73(_$ygvAdlXVcb*B0c&R0ih24Jw%#kn$|KgT#{__#?AMH<@w-8@W z+Hb|)QThh4;h!($BC*X%?7b))-no#h!lBwkfp~!Q=eignG&Y07rIDBhcpn_v&s{GAz8?FKAaZaqH$&m?HWENBGk z2nK&oBLYt1H#QG+;y9W-bJ(PuHxyOA2i*ybDH0wc7A-k3NlcVc!Gr!w_}T&B?%xi1 z*SLkXn56RzEplOc7t>Z58liy}l?STaTuzGx+`(6vzlv(16Z_D%v;&;WlRM6YI1&KJ?W8HQwPoDNWp?+KTN9)h-o z^`YHUBG)*~q^Ctr%Rf%MiiBVj`JK2a;?Ex8dXa7Z8iJf&KZ`FvdN4Redxq9wdF}hL zFpQMdM2ITYeKLtKBxk%4WCfOdFC7WfJ$3ZP(_v57H}+~%q37Fy&)SW_L~q;;hJk+& zoS7Ro6FDNsLkn<+;WMhD6Q^xbUCH#=R+w3BBb|tq9t}iO0Eie`%~Aw}@c5a5g`kQ19WB_?NR zId2V^MJpHMn?VU4O3H`L;%0H+GXcYyaM`*|kNt4redvGFm>1?APqbTxo95o35fY#f zJ*c$rp(-|-%u}>M#xMq6ShSYN)p~{pRp30AoQa;f9zE+mHD>Y}VA^EFO$%Vu6Qj|S z2zZ;+N8Jo-oIcC^`qd5wob!;^@ZXcg$ZIq3Jj#=G6eE8sf_4xQ%ut;yii(JnR-p(L zLaorMgUR(vXws0RxHt-~1qVMCs}3&Cx;nTDg5U>;o12rOix`&UicTt|@eeTcEna!CD z@QK7TOgDcl;&tN5O-tvzPaI}NIZJ#_JZ#Vfi66PHxctVs;IP0m!$vAOM;s;=3oWd) zFe@4=@dR-st7?=lq+QN(-r}s5Dy(r&{=!gBTVCQi&3?qOfJI0Up`d~dlwcuBt44~6 zB<;sM{C$pJB9}t04KQ-dqYM?Y;|KqP-`$$|@iBilDHH<&FSh+L2n2V5deyeSk8Qht z0{EYSE3N4-*MO-{(yL7^as+g30~gm#P1yr3cYxj}T{dJ#^3xRZdEotwz9|Fr+yWh| zZf}i!oIU_4>MC&q92^2e1Gc96aFf%PPVPa)AHDWS2 zH)Ca!Wg1HgF;p@zIyEplGBUHe8g2*#t;sx*lPn`3e;*Pu7EHl@761SN#7RU!RCwC$ zozaqmAPhyzO#c6u?SnHNnm|M=G|1s;SMF>v!JDH}Hf`JXqS0vIP1NrxCFfGvduy8f zxYelM{fDCd)0=A|2oBGpB@Qi-9FU8%@y|681cztwV=m-Etcx0TL}_fVGuHfw3Q$); zK4xd+e|{YDb5Y|2rMF-okAG!$jdhQC zukzw}fAO=5t}#GRn;UU*A$ZKxeoyV~lncRQ#?Sk?YOmF-Pg1doC5e^;ozXYYFjkAd&0y|!2I7@n=|7XPHy* z82BFMEH4Rx@8NrxQ$vB>2cR~BDZb->dCWlsPs)Wer{nLpFxgru_#WmQ!<<5_;rquk zXJ^f=qO6sI@8SEuJX3Z!ww8;eJ{7)S;a)2^-?!YQ^v(tQO2PLqC;Ljl_b_K$F4$KJ zzVFNTuSwqLDi3P?T2dkNGpyTWF>=}yW<1>?)G|lO* zsjkWdB0PLSG2H+9&lmoKKhztdk3WCr_dUh>egFC6zaFK(J|FV0 z-^a{Tg`efu>-*2o^!xeW7y9)xO&+yBUC8&ZU#!3WV$@&P_rG1}*NuOQR-{#&Ul$s` zE>!Z*FVe3I%%5$=KHUDig>`>^p7_UBzrR7>ihbAq<060mH^m(FG@dLu-;zq?doJ~7 z0Y!gPD3b?`@1^L4sW^`_Uz5lE*GeeJKh-JzX;tB0x)T4nE9w1nQ@Gjpiog?pEoT4Y z=RZE5+CLXRd?o(Voy&jz^(g=K`Px$Y`*wc+eeZa9@BZv=)=o+LuTA~l;`fLbE-qER zw{^aZzm3QCeGR@mfZk1aPTXoERVcP z4D_bzE4^%Gltb5Y*|fLtZ2n^{>AUavZnu+jn~8Q0GxR!hIIB^;Hn(S;W_ ze*TO_vh(W#l!$vb7Ly7ch&`2-dWx2_r9>T_{!A|93{76NAhnhctIV~OPIEl#-n_@s z_uAa@&(m-gjc9+R7o#c7{n+s{&b;XYrCV>i{o3_A?tDP)l~-ST{n>x>H{SfCYbpG+^4o-3*LbVh?@J`nNmI}0SgwhVn>qlXvw9Xi)tZA^r=G=;nTnQKWm9ubQpf0E zy(zbs{^;HRbnY*G3$^~A`j&rpE~s_?ADs(o-M{JFzxM4Px^|>CJC^WuNMop?#=`hL zmVT_fRl9$Uczo~u$}X0&&`&v-TstSNlGmyf&Z$HWQ*AYv>#@Gm);#8C*VgNNRuZyy za%Mky?p^u!@wXbv!}V?%@8-=u?DcTc?!9qk>c@u0-Y0iG^{7WFEaQwuL!rUVMcTD# zb=5=ZAFUXD#pd_EP)6*4Wi4YoPaSlZ8R7x@m&SjvGWWS>(ZVb_MO!zpa zi%F%q^mvy0+_gWxt$3J;u%OH{G9YL27VjRYPFe5P1k97g!)1J-Rd==A*i$~Y(F~*J zY`n72%IKkM+4dXglWVLJ>xr%2_>L`OV0eFfw^Mss=9gc#$vwM|*+#uLP9~FAdkW(| z{!^aW-pNhS@Yx)7avsNBxK##>KaNgU`8l$0{&LxY+NXF%%d_rUd&tpPS9jEGlV0G5&hLI16?T6o2qsn z?D=jzv-S-ypPA1}W74I^h}X=6+|pyDQbP68s`1qV|CBb)>o5#OO5D_!jSBT)QF`Fv zVsj(2bGV(>c=C~rLO0wF6apj~Xfc174t6oQ6s~3wA2R7b6M+N10V+XaSAnP|xGo^& zZE@^A)b7F{b!*eH;^Q*^>sAN>*F~%V_q~_oEmwwu z5d=tZLc9fc;ssiV6KaQuZ(HZo7ohScul3f!A)K@CNat|RnY`Lsy<^N$UWk7MQUoFy zo_R`T%%QV2rzn$o3y4K72dBr18|>Uhd}9va@lY_o2S^A@Fn4FPp-S1dcrI3B?zp$+ z!A}Y&uJMW(c}6fv&uz1&O+;vbx#0o%*IWQ`Z(|@Qd_Swt4)(m>N;MZV5pX}a{OJ^l z{V=1m7>cLS;#(U~k-AeWw^Dzf9GdRsY&$j|gXk1{)-gkGy8E<&$-JE@C3iricw4}k zYlrRUSPMK^-0T+b|-Is@eEDP8&ZCEtB3ENJa)B059ekA{V;!3OeBh3mb^Lo zlo`r07=TdNG<)BM)rK<899vX}D# zM`AG(xX^->dPg4+pp1CJlIRBv&~#%2+dy-LC#Wary{2xk)F3TVH$T>)KFCbTU_n%T z76dezepVqVzF=}pw8(!vLzM@YLt<-mKmC4w6mtZlm4%4G$BV@X^YZpwUD&JR5FmBQXO1K_7oHX9B<)h~Awipms|< zf&*gPW#PFFQgg?9+>uRVZ!jUa$0d`%4BH^k4uyUI}IAi zno0Z(SHZxuG8paR+#naMQlC$Zcky5}nZ560!uNRSEo!ZYoRAfsu_lidZa-wTZ%>UH4CTWt^ zC!=nf!cE&p7zkWvI+1glhKpLe9yFAI%k5DCdS|+2!irvmuVYhSd*68Qn|VEzK|sP~ zG;uYoYtsXH;q9;|-Vs7MD4)UM)2SGs>9{`M+%7k9CtZIy;z)i0Lq@r8ykf)skHoH_ zRj7sB3TuE9K!ePp*GyH?tkbV2fy)(4LU`Dx3?R|K$(UxW6uvx`Obo~JQuTtgIV3~3m3AX|@dH~@7 z43J`tl{bHx1`r>>o(80D#65My6@y&n9o(Fk-Og>Ha3YBMZyE!%O~y0fq$KGL&AU!G zzI2mT9ZZzW8t;JB7H>o0&R|&3B#gmEju2ZUDrv+p`4yh!(UP0J9S_Ot7LFh@Ck)7b z83V!)NE{p+#eTR**`{+P08kE|@D*%1@dYAcubF=U6%M3<_dIaXQsTj{kf&HKhV`z` zf+2`dEs|GHzRcvrLc?H;YB_o*)_2FyCDD*!bc{0s@}#F}M@(!43P&pWhJa|$YKCX% zaFMIXloL#<;}BwK?3!@1@JkTVot9rk3G(Z5%b7{QH)GYEfWEf3%B#q3ked@EU>7k9 z;}d_dZ6;v_VMp%1F;rtwr-!Adc?03;>{I2M_DNW!8Xa+rPI5ynC9t6oD=)xUXB_iab2cY1w zM(WN~6l{D~CZ*8G4J;Jb7Y$XwIu*3Q&>Pz~5q%%J#8w zEnJ13SDlVTrV*W0YlEUGm7s1IfC_N91W*GsKnsH9^BOy4T+gI>q9~6BlqmrpGjo6}$ zHtjm^<5`1J*~*A{BIYgNB|r|bC6j+h5}6H}CM@IEDxNUI$Bd9;yKZZE3H8Au+L#u^ zwLW0X$v_04p({any|uFUIIJ3{OU>%zjhIjLntSTV5Oa>>z~MvS4Er(AOk0$e1H+CY z`2zT~0>;XWNCC4DD*C($he%+B--*QuKE_F~y^Md{ zfNR#dBE|sw^rR_sB0DsEr_S_OLOt@_bYv*mMVRE0nkSj*!31IjRzwBBtnvJc$UguA z8tnO^6u7Pz7>WK}^T-51n>v5c&2Zg@d|(gQ5>^9T2ZAhBK@FpZdywxmRT198+XT9t zmkw6CglrJy2xS<_Z$O-|2N>TLO*S^`go%v zvh#~jNk=AZWXhbQ`ESz=WF75{@j95g$O0Nj%)0nv{40jOH*T3B3pRfpE8LP`6yOUa zHyj7{vN7#aY6yftPlLa$<#`;=CYjNEulUQpvNLSyaL0Qgn1v%CTR>FT32RL$hafPd zd^#sN46Y8(yoak}g?!_#8G?sHDy9X+W@ky+O!SzLF}drgU~okPceW3sKB7+Ocw2Cy z$dr(36udJjWC9#H%!PlCAfUkq{2mDDIccP$V_g1o2A`twHmI zF5E6QfR-_y?3C^=jc^{IeZlfjE!Q*pI;mRGJMh62GaXrO#2bHd9%N=sFvMOyqt%of z@C|J#P{{BtJY?5tI2}NBbzDBbk1>vPA8(0`nfx}LsL0cnBoc;j1c|klS#^Mz6~)03 zmXV-`YgT9>u8N$KGS0jjZFF}kg%p%8Bb}abc2HfzL6buC(SpwNEyxOBNO{a;W3801 z53_}nW0~*bu=Rhz3i*XNS1@_L*TTCTnGWn0PGAg6GmNTZE+lIc2uHtgvMe?*VxL?3 z2)Ze6eIoRwQ(+9!L~M~(6jX;L&yMGD+1{DsZIf}WlVdAcA$E4X*UjI^ip!0yE(}sr8rfZ;W8|fKaxy!d-XoBf< zyhOut@$QbpPP~{3;3RaE1gQmDgoFXj0*j%>R|n8K8ul&3M-++LS1y}%Sfb3@MrE3a z8~8V7h{`aDVLlkFu}$Dk+?UXMLvwTx?80KyK{z)` z{@7lxG#K@&I?-(=-;3n3+}X;cWd3vj9VvDD&L#;aI#_~=#1b&%sj#W*lM>^7N1yZ} z-)j+mrZ6`Z)ex!BO0!QxH~kEB%Q@J@o;3B-F^t40_b=h z6T%$52PBa=4?q!LH~6y@|a_}AO?7ena~F)AlA>5qjn-G_!xV< zK(o?iCXZ%)w)9b#;>U$GFey5gMrHBbV4;70=bKPPiIU;{o$g*zXW07O!7wN~JfNT^ zq#dPU9V8~D^NPNay%~3mv(DqyjgH~hNp|fF`l~sZ$MQ1_WL2$o%aIZ{`y|OGv?H^A zFfAU7@GtY1;X)hO#3(n6j`OdO5A$3w2QSfXYJIa#3#qc!o}m_C$1d70dNE);drE1+_obQj)` zPTbkbFL&VA9<0LrJN14&=BFcLUO9hKf#4N3=_RTQgt*X+%FPr|$B>C>qn+vDK>0V0 zply5{n(7}b8g7}P(jF;p(PjEel&+-DFfm=F6f3G62FE;^ce!8z|gQ=r7=8X)xLk50KMth zXLtiqWYWe;vsaF~-#0}UveL;gX`_`d%iUIIC8(QR9VIs~E`8G4GJJG(JT)kL)PWG5 zA9ogICLurEWogmSckB%@uIu1T(YDC<=b3dPvung~Ss+l-G`NxdVx<(#z7yn$gICwQ zA+NwgJdJ(V(Q@2VhmN`nq=|nSqETB)i>Q$D@dN{`5$XsK5Sv4DRVPRT31{SWn%SX3 z2EzyTo`9;LNJFEsk#HE;r1Kd&`u{gFJWMu)9>q*JnN8Gyg0fBz5MQ0Dkz8aHnJcUu z<;*Tu5YY)c1|coZXlst$G#5y{XxSr8QwC#^yeDui00 zRR@zxKZGU?NsEi4;979-W3lSs;;gHKs~`w|fVjCiDY{6B|4RxjVmvtR$GdxvyLW(4 zFEP#P7zH%FVx|&tF_T>pgRcl+2tAlaRA!bjD@jRsj<0+8_<9%PS>EUV9NlWpVt`L1 zo?(W6Ss`90p4_Y$ocD>ttSGC*=foo>U6A;Z>x#>7oC^*MJTq*jQ**>&VzJQ1N*lAH zsS!^QM^sIxd?Dkq%6W^kR;se*J^2emIemGF>of3>PSS&Ewsj?Y;ebrrF;Q)P8c#ps%AZ000ddX;fHrSWQeiV{dJ< z7#4p5Bx7b}GBsjjHZ3_dVPP#aV>vi2I5IdmEi+_hH!@>0GdDIcW0SiWs0=eXF*h?e zI59OeFf_Ao8C(Igt{Y$oe`R;7KL7v#32;bRa{vGf6951U69E94oEQKA00(qQO+^Rg z1s)I<5twzk7ytkP#z{m$RCwC$ozaqmAPhxiCjbA-_Q9DB4G_>48sPA>D|fb-;LTAf z8_x4QXf)bq6ZLxt!MIee-jXIho@!L@^+Q(w?u|7b1l6->i9<^ye+T5^Zv1172SN2L zzRZO@h;>$@jwnsqYm7BMq5{-a5RcgyxgCf2xG}REuZjV=$ZDz_(OdBI^SYZ0X^*v` zdH2TWoYfdX=`Fa%V_%tFW8GuktGpQApZ%1&@L6sl92h;4wT~qxO1PD+S+Ed!5%_!DHZiYVU8>O5ri^{qnU}@EG`h=h|CY zD}~3v_e<8^$IK~s419m=w??pP)`G{t_b_LENeFxo-@}|5e+trl07@g6;yeD2$LvI~ zQZ9@+?SH?8$<|82_b}%e<`iNL-!IRcCAadjRtmm{@Bi{l+2GhxE`s`0_dna <= 100) current_game->dna += 1; current_game->research += current_game->priority; - // if (current_game->research > current_game->limit) ; game over + if (current_game->research > current_game->limit) + { + const char *msg[5] = {"Vous avez", "perdu.", "", "", ""}; + message(msg); + current_game->research = 0; + } - // Epidemic propagation simulation to add here + epidemic_simulation(current_game); } } diff --git a/src/core.h b/src/core.h index e2bb6be..9b9c2b1 100644 --- a/src/core.h +++ b/src/core.h @@ -16,7 +16,7 @@ struct grid { - int width, height; + int height, width; // Use grid.data[i + j * grid.width] instead of grid.data[i][j] uint8_t *data; @@ -39,6 +39,9 @@ struct game // Research data int research, limit, priority; + // Humans stats : healthy, infected, dead, healed + long long int humans[4]; + // Time int time; diff --git a/src/data.c b/src/data.c index bbc937a..1dc55cc 100644 --- a/src/data.c +++ b/src/data.c @@ -1,5 +1,6 @@ #include "mutation_engine.h" + const struct mutation symptoms_data[14] = { {1, 1, 0, 2, 0, "NAUSEE"}, @@ -51,36 +52,42 @@ const struct mutation transmissions_data[13] = const struct mutation default_value = {0, 0, 0, 0, 0, "NONE"}; -const unsigned int world[64][128] = +/* Encoded data for the world + 0: water + 1: low temperature + 2: temperate + 3: hot +*/ +const unsigned int world[64][128] = { - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 2, 2, 0, 2, 0, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 2, 0, 0, 0, 2, 0, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 2, 2, 0, 2, 0, 2, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0}, - {0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0}, - {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0}, - {0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}, - {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0}, - {0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0}, - {0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 2, 2, 2, 0, 0, 2, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0}, - {2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0}, + {0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0}, + {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, + {0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0}, + {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0}, + {1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 0, 0, 3, 3, 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 0, 0, 0, 0, 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 3, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 3, 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 3, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 3, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 0, 3, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, @@ -93,28 +100,28 @@ const unsigned int world[64][128] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 3, 3, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 3, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 2, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, }; diff --git a/src/display_engine.c b/src/display_engine.c index 560d009..1c83ed9 100644 --- a/src/display_engine.c +++ b/src/display_engine.c @@ -1,4 +1,5 @@ #include +#include #include "mutation_engine.h" #include "display_engine.h" @@ -24,11 +25,12 @@ void display_foreground(const int background, const struct game *current_game) { dsubimage(current_game->planes[i]->x - 4, current_game->planes[i]->y - 4, &img_planes, 0, 8 * (current_game->planes[i]->direction - 1), 8, 8, DIMAGE_NONE); } + break; case 2: for (int i = 0; current_game->planes[i]; i++) { - if (current_game->planes[i]->y + 8 < 53) dsubimage(current_game->planes[i]->x - 4, current_game->planes[i]->y - 4, &img_planes, 0, 8 * (current_game->planes[i]->direction - 1), 8, 8, DIMAGE_NONE); + if (current_game->planes[i]->y + 8 < 57) dsubimage(current_game->planes[i]->x - 4, current_game->planes[i]->y - 4, &img_planes, 0, 8 * (current_game->planes[i]->direction - 1), 8, 8, DIMAGE_NONE); } int length = 74 * current_game->research / current_game->limit; @@ -58,7 +60,15 @@ void display_foreground(const int background, const struct game *current_game) if (current_game->mutations_selected[2]) dsubimage(65, 15, &img_mutations, 32, 16 * (current_game->mutations_selected[2] - 1), 15, 15, 0); break; - // case 6: statistics about humans + case 6: + for (int i = 0; i < 4; i ++) + { + length = floor(63 * current_game->humans[i] / 8192); + dline(61, i*8 + 31, 61 + length, i*8 + 31, C_BLACK); + dline(61, i*8 + 32, 61 + length, i*8 + 32, C_BLACK); + + } + break; } } diff --git a/src/epidemic_engine.c b/src/epidemic_engine.c index 8e46036..9ef4ad2 100644 --- a/src/epidemic_engine.c +++ b/src/epidemic_engine.c @@ -1,25 +1,81 @@ +#include #include "epidemic_engine.h" -int * count(const int epidemic_grid[64][128], int counter[4]) + +int can_become_infected(const struct grid epidemic_grid, const int mutations_selected[3], const int i, const int j) { - for (int i = 0; i < 64; i ++) - { - for (int j = 0; j < 128; j ++) - { - counter[epidemic_grid[i][j]] ++; - } - } - return counter; + extern const unsigned int world[64][128]; + + // In case of water, low or high temperature + if (world[i][j] == 0 && mutations_selected[2] != 3) return 0; + if (world[i][j] == 1 && mutations_selected[1] != 0 && mutations_selected[1] != 4) return 0; + if (world[i][j] == 3 && mutations_selected[1] != 1 && mutations_selected[1] != 4) return 0; + + // return (epidemic_grid.data[i-1 + j * epidemic_grid.width] - 1) * (epidemic_grid.data[i+1 + j * epidemic_grid.width] - 1) * (epidemic_grid.data[i + (j-1) * epidemic_grid.width] - 1) * (epidemic_grid.data[i (j+1) * epidemic_grid.width] - 1) == 0; + + if (i == 0 && j == 0) return (epidemic_grid.data[i+1 + j * epidemic_grid.width] - 1) * (epidemic_grid.data[i + (j+1) * epidemic_grid.width] - 1) == 0; + if (i == 0 && j == epidemic_grid.width - 1) return (epidemic_grid.data[i+1 + j * epidemic_grid.width] - 1) * (epidemic_grid.data[i + (j-1) * epidemic_grid.width] - 1) == 0; + if (i == 0) return (epidemic_grid.data[i + (j-1) * epidemic_grid.width] - 1) * (epidemic_grid.data[i + (j+1) * epidemic_grid.width] - 1) * (epidemic_grid.data[i+1 + j * epidemic_grid.width] - 1) == 0; + + if (i == epidemic_grid.height -1 && j == 0) return (epidemic_grid.data[i-1 + j * epidemic_grid.width] - 1) * (epidemic_grid.data[i + (j+1) * epidemic_grid.width] - 1) == 0; + if (i == epidemic_grid.height - 1 && j == epidemic_grid.height - 1) return (epidemic_grid.data[i-1 + j * epidemic_grid.width] - 1) * (epidemic_grid.data[i + (j-1) * epidemic_grid.width] - 1) == 0; + if (i == epidemic_grid.height) return (epidemic_grid.data[i-1 + j * epidemic_grid.width] - 1) * (epidemic_grid.data[i + (j-1) * epidemic_grid.width] - 1) * (epidemic_grid.data[i + (j+1) * epidemic_grid.width] - 1) == 0; + + return (epidemic_grid.data[i-1 + j * epidemic_grid.width] - 1) * (epidemic_grid.data[i+1 + j * epidemic_grid.width] - 1) * (epidemic_grid.data[i + (j-1) * epidemic_grid.width] - 1) * (epidemic_grid.data[i + (j+1) * epidemic_grid.width] - 1) == 0; } -int can_become_infected(const int epidemic_grid[64][128], const int i, const int j) + +int bernoulli(const float p, const int seed) { - - return 0; + srand(seed); + return rand() > p; } void epidemic_simulation(struct game *current_game) { - + float contagion_rate = current_game->contagion / 100; + float lethality_rate = current_game->lethality / 100; + float healed_rate = current_game->research / current_game->limit; + + for (int i = 0; i < current_game->grid.height; i ++) + { + for (int j = 0; j < current_game->grid.width; j ++) + { + switch (current_game->grid.data[i + j * current_game->grid.width]) + { + // Healthy + case 0: + if (can_become_infected(current_game->grid, current_game->mutations_selected, i, j) + && bernoulli(contagion_rate, current_game->time)) + { + current_game->grid.data[i + j * current_game->grid.width] = 1; + current_game->humans[0] --; + current_game->humans[1] ++; + } + break; + + // Infected + case 1: + + // Become healed + if (bernoulli(healed_rate, current_game->time)) + { + current_game->grid.data[i + j * current_game->grid.width] = 3; + current_game->humans[1] --; + current_game->humans[3] ++; + } + + // Become dead + else if (bernoulli(lethality_rate, current_game->time)) + { + current_game->grid.data[i + j * current_game->grid.width] = 2; + current_game->humans[1] --; + current_game->humans[2] ++; + } + break; + } + + } + } } \ No newline at end of file diff --git a/src/epidemic_engine.h b/src/epidemic_engine.h index e71bff7..6916b9a 100644 --- a/src/epidemic_engine.h +++ b/src/epidemic_engine.h @@ -1,14 +1,16 @@ #ifndef _EPIDEMIC_ENGINE_H #define _EPIDEMIC_ENGINE_H -// humans per case of the epidemic grid -#define HUMAN_PER_CASE 1000000 +#include "core.h" -// count : return an int *counter[4] of the form {healthy, infected, healed, dead} -int * count(const int epidemic_grid[64][128], int counter[4]); +// humans per case of the epidemic grid +#define HUMANS_PER_CASE 1000000 // can_become_infected : return 0 if the case (i, j) isn't infectable, 1 else -int can_become_infected(const int epidemic_grid[64][128], const int i, const int j); +int can_become_infected(const struct grid epidemic_grid, const int mutations_selected[3], const int i, const int j); + +// bernoulli : simulate a random event +int bernoulli(const float p, const int seed); // epidemic_simulation : simulate the propagation of the virus void epidemic_simulation(struct game *current_game); diff --git a/src/main.c b/src/main.c index 9903088..27a6009 100644 --- a/src/main.c +++ b/src/main.c @@ -3,7 +3,7 @@ Version ...........: - dev - Last modification .: 29 May 2021 - code provided with licence : + code and assets provided with licence : GNU General Public Licence v3.0 */ @@ -17,7 +17,6 @@ #include "core.h" #include "display_engine.h" #include "mutation_engine.h" -#include "epidemic_engine.h" // title_screen : display the title screen @@ -56,12 +55,13 @@ int main(void) .research = 0, .limit = RESEARCH_LIMIT, .priority = 0, + .humans = {8191, 1, 0, 0}, .time = 0, .planes = {&plane_1, &plane_2, &plane_3, &plane_4, &plane_5, NULL}, - .grid = {128, 64, NULL}, + .grid = {64, 128, NULL}, }; /* allocate memory */ @@ -81,8 +81,6 @@ static void title_screen(void) extern bopti_image_t img_title; extern bopti_image_t img_explosion; - extern const unsigned int world; - static volatile int tick_250 = 1; static volatile int tick_100 = 1; int t_250 = timer_configure(TIMER_ANY, 250000, GINT_CALL(callback_tick, &tick_250));