(*CacheID: 234*) (* Internal cache information: NotebookFileLineBreakTest NotebookFileLineBreakTest NotebookDataPosition[ 0, 0] NotebookDataLength[ 279557, 6286] NotebookOptionsPosition[ 269401, 6113] NotebookOutlinePosition[ 269852, 6131] CellTagsIndexPosition[ 269809, 6128] WindowFrame->Normal*) (* Beginning of Notebook Content *) Notebook[{ Cell[BoxData["\[IndentingNewLine]"], "Input", CellChangeTimes->{ 3.729862966064434*^9},ExpressionUUID->"9bdc9215-ff8a-4959-b601-\ 155c0a1fcfa7"], Cell[BoxData[Cell[GraphicsData["PDF", "\<\ 9E14ARda;S<:9LCUl^G[Yo>PdEM3gc3EDL20_AVU/M6Eb82m6K65dIDAUHfmT I@Xn?PYcM79UHFd:N07]O@MLDe^j[oO=WG?VcWC]cCbnFLncm :584@^m=;635gW__ahJ5g^b:8XXR2QI046UR@`FB47X99K@4O?nM[M^@k6a2211` lE_jFmWINiGoG^^OKgg[FmoGmTKFAQ91P210420840@80P@1PP11P210420840@8 0P@1PP11P210420840@80P@1PP11P210420840@80P@1PP11P2104>Sk2;ailhIH @a4420840Ge3@=3@/_1N^DML:DWMRX3?oO:PicGjm_Jk^cghhI?om[EfMdFTo7j9 0;nQiGm>5olfA?SKD059gHE0/>2c2j:IZIGmLPRYjaAhjNj3e?/YZL:R8SU7T@<; 187>8@1fn/m`hH10`H0PT[X=PD3n_ilCCDnYDSNAnmUeVX]2cUb`mUiT?6=^n9GX O]I1dYfN@N0m>`D;1Y3DC@P4lOoSW6QVofNWEZP`IC;YZh:2Xn6WGNH_6licn]k4 I/Vf?FUIfORZIhHdZJGO843HZBLhnL=PYmHfFKfThO7cg<]AeYkSS>fWFd QI>iiic]QhoGe]GeVeU3>]8c211f8^bTTi5F9AKWi;hlMNFJ`kbUGdfa66o]bZC_ SFd=Y/e9CT/SfRNM@?gQ54;HRK1CedNk[;GUHTb/dl9EGaUHS^@i<;`de]9UW9G[ J6]gnhD[XB4Wk=AeZ3nX4PPk4GKZhX07iiAGE_`lJn7oC;76DPkDQ?m1BV>]G8NK >eS>lPVkL;U:G4fXZH/hOh2?4gHRk=CeH@oV^GD_JLkZcD=[_oe/_/_GSelTJVY^ KVfCjZAlD/P7R01Q9l9>>QWfT8k::RY^g;VkI<^^[:O?/4=7N4TW`7k8QO@SM^8? 2>@?2519^1R4e:_FG1n6AH6/EEYKEil_;6aYJNWF>BEO:J[nAnbYI:ZPh8Y^g`EK 5Mf5O=mV9g0>[=cUS?BKThF3;QI?^5Xb9JKDn7ZYDDcYi6]D6QaIm=598DE@^8df RNlVTd^>H[^7WJQaele9LF1[EQLcN3]^Vf;Qg7VVJYQj=SHg@S2[[:iRDUEeMFeM KG=c4`YQkZ@c[Bmm52clm5CQT8^R LE75aWL[]fOFQ;jX>o^ZoV9NoHFlnU<_ZK@[DfadYg;L]M8AUhZn>2_j[KV0WJF^;^:KfI@4oSbo/SU@P:2`Y:fM6:C:=CDd2DM6[0X5>ZR/@RQZK6QC; EiN7^D9UMOE[_R3[jH_Tm:aK3e:^9MbmN>ICilWIe3PdeE4b:^8S;dYAch]kO7CibmORhY; j^[[FI^ZgLDnbDi1P]l7lOleE33/H_7>S9ZWUDgd3cH@J9JeeD_KJU_JJY[K95;l N;gm`eNUTYHc;n]WgZgh=4;hYa18Dnm>eGD77BVEZG]fJZf][knMV3QSaOY5jkMe AeZaIEO0bK>0SaiGb;`Fl3LNl9fcIY=>ZU^kHenn@n@d5W;/@U9EN:ZiCDGnS8/K1CbkO^D]N; 1N^fG;Ui^eWSaBT:?18D[U[Jc1G[WkejeOZ6Q@C`b>FK]nN/ETIbeX[ebNWYMODM 6mES3j:bFYcim2Vj>FoeIT?WVMPTE@L;[WlW]hmeGkQb`mi38FL_a=e?cK h[5XR==_L=^>M?4O/MJSE59bSU8R4ieok0IfZQJ;cdI5ogFR>J`OMIj6la`Vf;P] fk:KPANIalnNVLaHl:fQMMN[@oWVW_=bG[aDadj]KJd=CDfH@J^fkok[A;>1aUHS c>g7F[T`MYkZH7Y13aSdJkBebg0cNmJ>O6iP 1=86/eBJUFUU?38o^2CgaUI:CGPZimi <@Ug8GhX=USYFGc4CVSFdjNcUZgoWlTF?aQIXB=S;9gE0J9hOAC?HK29cMNC;CjO a7=L]5YM;OB?`XGX64?WjF0T4=4X74Zbi08O=RASN4h3SJfoV/b3WE_0VO>2XV:8 M^ZZD>dDjiDnaTk@7@D9HP/K81LY3N`JZNcCblD3o?T3SQL<>57`=W=LN2DOl[gb kaM0`oeoa?dd@NVLSY@:k0ifZZViN>djiZ3Rl==EOZbUllnf7Z[/I>K]OQThN692/IIGK7_ BRDXODB1lmI/6JO2W:bedloRTDcEMH6e Glc5DAJ>IQjcMoWjXaVZOFVA]V@lNN8dKmVGTgUS;9aYle[VFDdbN;UO6eQ4Lk8C1;2XYgW3Xn=N6=_PE 7Zn6@cZL9^HJM_ `;G? Gon`FUSO[?XDmF2;M=AE^@@5j]<]8bVFA]RYoB3WIZLiJkNL]OOhZC`]f`_702MI^GKhX`3bki2h0>=46gN_5N^E:V:MRJ`Gn`Hk1@Tn2N@7 ?ZeSYBIIVnaaAMm4n_:3P WBJUiCUZRKYadlaccW0cmPDMFXEWX@cifX07RgBTK`ahS;Kf^bVFM7FDg/W8I]VF W@G2@RgH2O=^]8Gc9NAcCi/eL<=Bd0nAY1O/D9loa =Vi@;:1lK4Kl==D>`d2YHCB<4nfWGHRnYURG>RAE[oL1MZ948?hO`XDESNe4M:H_ ;JfbZoVBgm6BTZ;4@^N3n;lk;KYG1]V9oG5a/faIJQFUYnXnlJTKI2M/RjAUINhi 7W`P85AM>Q@Dc_>H0offh[31V85/_fc[kUl2@Ph4Q;4nnh]ob>6P/^gDV>RKXG2BZFkog`>`EjbLkC=_SjhLmKZGgSXid^;83 G?SM7f?Uh[eR0h<0c/nGeZnM@mn14MK>2XmRh]H Q8;dU43Cl6>OH:OO10]h=iE7<]=1Z:72GmCo5U`4PV9SY`6Q`X@BK9f`/aW5jcagWaDCKMdEe`8H<92J;UbkTO]GJ5]38eBVRRnU]EiBKnSV?LX2lUjk 7B9BE 1hlbi;_cRUE@VkbJ/1=@X]IgMQiiO3j4LfJ`ZFI@H0n`DfiNg^XmQkhgD]h46F?Q 11GgVYd78V?RW^Jna>Z?QPG]K94f0n7JfUYHIXZ:Ro4F7ZAWG[mc;nQ/i=gDQj0k i^ERJQBGUAVhN]54YlP`:=o0JLKf`bMRh^nR3N8J:W877Z@ClPd=3K2QBTY;m`dn 2CN3:06SXUd9URk3c1giQ@8h9eA5So]:7f2W@<4oQ`[3GZPe0VUZUOTo[Oe47C]1 8PXB91B[IBOP4b>X]hh]je?/A;eXc8/>oj2F13]QXS431Q[;kjMH?G[l6?Ih7Ck> 31kLbLY>47;0CS2:6:Bm>SA65_gTCa:35=^/@G ZkGJA@WYY@g;4b^XXbhjTIAD2m6mk:CAca16SSYf^YNBbSgY50L9lRR:VifDk]OR 8jY8C4f5VT9aLH4OHRAXCU8bG;j:]AEFF8XC7k[[DIH^Sg9b5=^SAAiM>7dYNYb=^c;b4;?= k5l;1:f]T3oKRJ2Z]J0@n6fN93OEH32Tl;R/gb2=EK1kgoj8FM2iA/A6BEYD;^[PP9kP9e>Q9ffmej/a4kHf]RjohR`Z1R2 SNH8Z=j9;^`lLQcZ?TDI6cQPKf;CgX?RfU[EAeR_h?L^j=AIf8f3SQPFACUHZ/<< 7/KW[4maG=AgMY:[a3lk9`:0jW[ALWMi2;dgf]HMbi3gf7;;>@LkMn_ZnbdO?^N/G8]h_^nbc4iOoFjiZ`RTlW^ Yj@C`ic570b_R:MRoX=PY`3nmXcZimG/e8gA]NEIgDO@R^=/RnZR C2MGbcDY=LA`RSaOAFn`46NW;BKc2dY:maoa=G6La1d?X5MlP4f^8CcRgbkZj jEef>QlESC==GINME=V9TQ^WF5f;^beOD6^TBI2e]Sk:b/;6HS]f`^;>`]EbYPmQ 9gIj2N;o:D:hlc7;`G<<[ICR9^MKi@?lniJmTdJS1Kg[FgZWGV@WV0Jmi_=O5aCH N2onbJCM6A=/81XhDmIIn/Q>Ejif7c]QmnCJ[OS>/E=f=P/kFKYHcU`06aRUgj<> ?gh@/Q?TWb3nOed@7LZ][Fa^]mDEcjlgRbWkBkR8gAY19h:C_?INRKKIKmQYcLim L1OChF3Fi0IPX[ZbPi`0MT:@d:JVY_en`EHcib_][OmXHX/S7W8C2fD=0`[/aIGM NL9>^YZTFYBS4kdCEBneJQ]n]GCY@o7N5gEG2aX^iD/fIhY]H/_n>KB@lTZWAM/d On@3F=W9MiaIg:VY^jk:99SVjVBWmK]ojAUf`^HDc:DFKMke@g_;8VbDCe^biW[2 ?CABZNF4WAQ0Z9DMTIgJ:c4jeXXc=18Pn5E@hIl_5?=Rbn4llamaJUS^m:1kZ@Ve memf`XUn0lMYSinmP4/gcAa5fD_g=HS3Y13]AA05W_nmlSd<=cVYNc[2I[S;mU9fHoIe]1gao>A6XHMYg?>3J [M^=SLZ>SoB4WM2G[h^:_JDd5?6A[>cXbDQT9hJDV4cW f4UGQ=>YL_Xk>l7`1V/O3M9djihM8c]e:P<9>c5@47IRX60bQ9dH:9@bQ9fD0<57 H<:aIbLo/T5IJl1k;ObI`fV`4_72S]g8cE^aF<9>31Z4WAPXV0aQ9`H:Y@aQ9bE0 l553M/:M=KEeV`oh@UiB?=/2MQY[hgHZMZSJfdidC/YJ:D66U[_d6>mTl9LJgW5;h1_LeQ3n>DHbQT]Ci]:CEc]Zade]ZDZU;]GJeEgA:D?fMWAI_g;5RfikUFgM[TYI/ gPWI@mEb6?=MKoA>KdgaLOQRgMj3`gV>R^5PL<@Ej_7XVflgkhS/e5OIBLhB7ilD nJAD[Ll@/jMdlMCH/To?`2/hfc4gN@VM>`DL9?SOhL:Y=l[HZe?GS?KGoaPV3gSG ZHdiSY_k:C]A?TH/GGjfMhM[//BdAhT?=Dg`Q2JE:/NDe4=f@^SQ1nWY?n7@_M:a ET/WSjE[/;F7RDWHZ@ncDb3omaN;nI9fidO`@QGoSSlAShiBhiYB:gKjjaWATI`J aBXjVoo/]3b60POQM>Z[o/]>FW^OHhHdTl4kdSOI2Fe3V18hWZESX33[>jce/>:3 le_HU:;Ia=j9OXUmK6D7K/72kEaAPHC[e:[>fNWCdhDkdZ^HHJm5Q[2C4VRHPkgX @FGM[_dmMY95]N=`fSoFaQeQHQQfP_H9@@Cf7Po02EW2CPaRQ9dH:9R9TjgfS]QILO8C/c[d3Z3eZZCWII_f]F]oYfHDl2M53O_`5A` ^R8@RA2fV=5b4WIB63ChBMU;5Q;kBKmRY9dl1Zh8964mORS9ameJ:HhF?]5TY HBLJ=<9>ZX>7/9/3SZGGH2V4d]C@j;E`i^7g@0X]@GDbb59LD;eVeS 5WeoFZgPW_E=fdkO0jdC/Y@@@`NdO_Q@S>Z:9[KQBDGSZlXeKdiN]DhZ:PY0Ual=>^RmL?/WNPn4U>]@GLJJ/XQ8SGJW1WOZ8gZWjaPCg8[1Yf;U8EM/?MHE;IK;hnhW3N4k]o8XS8Yj5 Tog/AG[W6k>Gf>WO8XAckiCM4CE4lbEdZVQBg[mFA;RZBIYCfLcLS`kn8]>o>5QEeWYme7oBOH:DLm66W^^7SccRZ=?KXSj/[^ 8lM7FCX[fJo24o:RmE]E_E9dn1:kecMV[k1C/>3G8@8@e3OWAInOUJOCQ@o:^;b6 IUDfKTTGOgjjn>gmIdFDjbLd_U=V0a`gO`0F1Af>]0i_06nTIVI>]?MDg1fSZF2@ TMGUf5/hF/;Z>iNeI9B6?mF_L54;f@WUh<7kZHnFK]VU93k1Sh6B][`kI:N;Ejo? F;YFRIg0SD=hC[LOYk>TVm[5FZ=>bk`4i]22Z:62G:k=@n?2DSFNUFM[ZGT[9X `oIQY^el9Z0^A0MN]Wg_kL@7LXld7B?O;6e21:PjBEf;k7ed>F2BVI6[;Qeh^=bmohbnngaWI:0Y>J25NRLi1A5KU=i5Qaok 9c/YRC617DCKA3bkYBTTWQgGh<40I]Dk`CNVZLM/a:;5h=@l?GnEUeLPJ6QBo/V0 jJ>Yie`UddMj_Plb/UjaHeoTmKS7cg<;RhY;:bX@98E>b2>R4bkV2h@8P9kai5UB I^KYjhQYoTB^Xb`LUfkMQA3TCg=O0HB:ZRX6VO;:bY:bbZZ^ NJo70bH8LFk/=W/D3c7RgalZY>_jg/Ajhbm7K]bimoaeOVUINDe];D@Y67Xe=3G1 3@jZ0>c9jEV7@R=n=;G5N50DW50JA:UAeZj5aDE]n5=h4I[T2C/19L9>7@hEEWIR IX[[P^F8E:]iLU^`78Z8e`EDo6_5ZU7;aWf7YcS=I9gn45Z@C=aVKCe`i4ChVO2; UnV4o47oh:fo75VjJHO;P^EHB_c]Io?O3YnlkM2aXY9BeEF]QNONBPkaj1Yo<[GkdLcNM_JRk@N?8L9MnG@c_mnBB;?h`dl=ZljmW;Ud2K0AoieC_gCgBHQW/DNo6f O6SKK3gL5jhl71Qj9OHVCRdU?D[7omSA@aE;]^bJi3CSRlTFZPn2VZ0QWkIhUF9M C:DMIPPk0B;2CQf>4h`^EMV96HfSN0i`SjUi6/ic99D=7`>Q2O M<]>`1onQ=O^g8l3b0c/RQU:B^4iXmN:/20oa<@65k4d1ShdXd:a_g3CCW2;8V

/;F8cDS@k6^ 3PLKL`=Q9d11f8TI3nXb65dLk:@hCCC9SkE`=Yo>`TjX7AG]?A74lib[Y07FY5S5 Nc0IKFKiH;6SLgK2^^Ide5G4NU>/CSF_FgH2K=N 8[VEV?CGWldI@HRUhfZdmgDeRFJD`9VVAn <;8bm_16L<2VY_OZMgFSBmee`Ti0Q[2C^^71G>m9MT9Mf6i;cTQgGkCZVdTl[FOR ]iXhQHbW7@Hm:kF4nPYdn[bTjXX[6YlEF1h618a9N65ZQ2EDW>U:<^PoL5 i=O/>WSg@IYZK0/6@ddbQ9f0DSmV9hm5ZhJK>`ha/HDlCjO19SJOSSFinb2U^HG; @UEYl=3/==;Enm>9ITaAFVL66m/J>/m0k6lU_I=RYI962AACPFL_>@KffCHUo/Ae^IVLZ[QacaB2=Vca 2oe<1DTlL^UF@Uem_F:3VJNH308F0c[Od9n<0=2G]Z?`2IbKaA=^i[maaBEd^;]:Vh_3`^jL76OHM0@ElKFZZ[HYcEFn@1nf0C fbl=;=1gT7o`6[O/a>Ah;3encjING>oJ_N9NCWK]Sn ?>neE=H9M/;j:4lPF7OTa;a=>eO]fb4mb9]U@Z;RZ;S h_L4Q:0R[iDK`5@lbSIk1V@6F20S8O>c[K^AldcHK3_?F`Z=b/:=>eO]?[3SA=29 TnNP5Fm^`L[R_E41YVC`f@][mQiL^D<1TagkgMM^:BXYDHd1ZVhZXIcMao`i^^ni O^_SEbnU[J`P]dKNCYRgNJOBhgSThN>LQTHHF[a_<5/3:;^SE`GlDiNS]al;Q;gC k5FKG7fFlccW0@[`2NR8@/K:MI;m=6S7k8B=hnbWCaECe]>W 6HmcjQ[ZFmlXFbZZ6bCdMES8?<_=cLaiXUQJEo;@XW2c4nX52N0?MU0icim7ghb7 :;GG;fSe[P;fO7RmN_j1_a`8g8jo[FK 8kSbV/m7JHX]e`8CU2PF8iR_Wc/:cM_nIll^og`2EA18hoo5foL^OGPDMoPR3>GXnlVY`8@ nQ7l[jkSWKY>f0U`mEMf@]NHdJ:DjM@PHFiF:ZB;7iUR=LUd]Rj><]DEaO48jeOZ bV6^/ci5GjCiPKVCbG0l`_XElj3V6MIb>2iZGS;^i2Q7Rjl8>`6dO/a>FP`9lPQ1 @4l@8>b45d7HBDm68fT6@D0A0L9>@8>`Tn:@87V2P9hP@=P9;j87f>VKLhG[Dg2n _PUi6ROh1Nl^nTk9NYegdD1?:o?E^hTK0C8FN2 @6L@Z97:?RG/e=dNE0;i@b:;mfAB8OJHg`FB8@P@1;PA@PObQ UhYobJh5>G6oSPoeFlZlD7gZ^l_QO]VY7WdMWidD4WKZKWHJNKW4=`N>Ig_dcOJ9 jW0ZY;Vi6LLgh=I<;1IGR/GEn:^YTK]`U<3;VHcMg5[OTDBcVi^KL8h6;][@8JYO B3De]OGel;n]j[BcCkb/7VhTeQZOWI=7iMJ][eYJndCdCS@>0Gb3JjFWGgI`OZXk GWeINFE9NCUL4/6E92J5KZ/0/ABEU/6OKDUYNGe3PdcF2N=c=0KlPgPR1HFR]XFQIL99_KYj2DYkbNLocB7Y`;BknG=CElidlMYef7FWIVKUiQO0gG5eKBd>cFUMUkX7PI>lkc@8e?mXT[ZKmOTjaDjGRbTe LQ1OFIV/Z=oF;ToHjAdklF9:HUkg]>b4Ul^K5>lX?eN`nJNLkic]3b[a?=4ELGg/`@@0eA R^R4ljZhl^DTlonJJ3K@foHM2c]e8n5NLATlGZYU3la4^6RKh^AYj3aM `fCTX0EjNfngP5Nhl5h93eIF?N]e5>HJ >?>;BCch[/B3WD[P]456=_3jjk9h]JYc=XhGQA3Sj5[_OXDf;dRZnT]4hH30KYRKA7JRfLV_H>JMR^ME>UiHMCQbl7;1C_2N>/SD [__H2HjShNTXC0=fP]@4JQX8g^2i`7/KY/m08a]h;c7el5jnNANROQl92XGP@BNh 2]nbolS/eA]hjj3i`kO4abe<>3SWYMiNN]nlOg1e06a[Q2b0F`00FVP/KGm WF<2RhbaMlO2eWR]D^PkPW bFUYPjKJPIgP1]aUh@XCmmWXe11CNdAMdM0oS7IEMlMC`?K`hiZoW/Jf7F6WKT3P 7C/]B:hD=K8jde0[XWOmMN?Ud^b44=_MbTkOJD15KcEa01ok0PVkIe]eGKlGW 2HC@`8S5D9KDHE7f?]GERf_Zh4H9^RUX]b2Ig4i<3SdO6G[^8_O:SV6W8LHfQ`92 dc:cABFUQBG570WAaW<;2VkN_@m?85P5`oN8V:7b;J2=^:mH?/g8I COVHL_k2`0ZNG^:CD`BRX_:ZZVYaCDeM?M7KjW1@N?R5b=DkmR8ob];UL51XLg=?Sl2^Sn78 Ei:_cXX617C3g2Bbdc]fF_>`^QVRPgY]BGMlYEO/1:n`bHoBhAM^[:D[g;[^?Q6H lcbg]ZiF`md[?2jAB41F5IEEb7?0aK0CPTb5GkPTdT`KQRdfk1_V_/iO]OfFWES_f8DdTC6SPZo7;dbg`n56]@cW]kUii<][RKLbLek7G[a<_;0O:cS]3Y9Cn/F>9ZZ hEN9AHdoW1<=l2O/e0d8d>`D:]b@e@^VV7[5C_3V573b3;`/8X;]>7^?]:c7l=ZT i7b9Ll@Zf@jYUCTEfBWTO6AQ4M?^JM:mYlE U8X@OU<5YnYHSO/EUINl<]iQR>C:]T/J6BcORS5fmX8WjdMCNLL6b :g7aWH7UON5BVOCadfNDjd^NldCW6FTiCh1i@W8ZPUfRl2nWF3k9OMVYOEG=@7_O P>jhGeSGeEFRkeF[/>b3Z[JiE]g `o97^dien9@R>`FN?RLX;=BHWN0>Z`gRg:kSP@RiP]GF85?kg;`lMNXJ50/?Wn=/ g11NHH;3]?VKMYJFUFWaUVT_iCnJ>D1JPkbgiM0a^77CPZ2`K=aea8ob6faR]ng` dL9RJP/E;SCW[=b48<;Pfn>Q9f6BdB60NWF3A2HK4edf8:0KS]ZAUAgH:I1_7E/F 8nRZSfD]aXaN/A>DBhPJ3:Nb@lg/8DCQIef;7VWbB5OHRBkoH704=?3@K`oW>Cg: cYK1EX1]B@kFHhbU:hS5IogfNagY^mXm oZi]/6ZcW3TO6hD`lhR9CjR]Xnc[X>>2bm1_3BeagGgaZXZZJ]IWmOHR^V0HFoJA o5MNabI?Q9f0JP1oMG95EUT_;?WeRYf:blXA/A5N[b4NG;ei2dKPgC@S^/Q>0>e@ l2U=f:VjE_c]E2RdWJ5XD75foLlK>=a`RNXn?L9@4WFL8iLIN< D0Di^Bn`/`Tenl2Y]Zl5O6SBd1bH>V@mNojiP@Ef<65GmXYO86_Sd]Yaem;cg`:I GITePk6hdoVf7F4W/=>9PX1W]LFBWSHW`432VmFO?C_/^b4d;LE>QUJaMnkZg72M VCPm`dk0=Rd[2e]k4;70C_/2@^EZ=2fE<2P]o7cT90M?A3Y6i8:UFgKQ2]`X`1EU/n6kIERMl_W65VKc=k4Db`1QYIWHbl39]h;IJ=6[A1bkigF78d Gf9j0h/kGJ^52C_9fBVnZ;]F/TW kNHbW[fCV3C1OQY/4V2^jKU/GBM;JdEd;HAGa/HO;56Eb1n7S8;?G:1]A:L]F@e= O]mRYiOR5Zmk5@?l2/S:C]L8l?m`__QN>FAYM]d5=kedlE^mHRNLODUm5`mIS/M3Tf3VKNH2L/VP;?G>`TWbRcDe9JfTCkJMPeX=U9leN?NZ74RkUc kgmP>F3U2WJZZVVWG8:9i_?G[f34SZIRRANOnU0Y0ZWVMOG:WM;F=f_Ca4AfdS4e bIE>La:[G]Of`[8>0dV_f:VT_<;0dA<7D_0S7QdKYlmjYog19a4hTU/[3Vaao0C/ Q;DHE3e1GFJWSf7eJciL]f0TWCMjbTjWm]4jbdkWXjaKCiX`d Maa/kP1_3e9Y>l4P[NPmVdGRPQR?oI>@B=ED_eL:0GV2gn188:K/KoZRV@We3LZ6i]QH8OUCOY g[lCeG;103on`k:VYUH^/n7^nf7B:gJ2_M>LeA_dgmjYDUbemJSo=eoD^>f7de]CE@RN?Tg@``QaTkU1DFRZ?`m^>X63lT?g/fF0c1mb38gjnhFLJZ03^ k5JVgCLP]Bhi[jIUOeJ]SVdbFN:/Z]KbYZJbaYIDWVSK7^VNT]dD=LiIocFlD5SOKYaXoH:dN52_f0WV=g^>nOeXJXO5WK77k1Mi nMP4ej9C7CkB5KdC4<]hlPBa_g4lNKB5ba2N8bbAf_3gcZJ8bNP=>keiVY^kO>On KjI@AhA`iQL=Ha[9I70AFhZS:JfkbmMC[=K/>i`_d?jl35=/SfDPPE`C=_b3Gb6; k:4ZSFQhQI8On0?22`oUe9ehFW?l2G/bS2_kec>X]m]TYf3nh^A:MKGSnY[DJ/>H <]f_J_giW1N8^0A_YJZQWmWYjlnK?WNT^@>fcacW;VFMk7P:eoE3MWX3WeB^?/]Q B33Nc_e`H2Q7Pn4`HJ`=]L?X/GSEQNPHMGLZHJ8?7l6hBAD]OhT/HEmQJDQ7k;Oa HO=3BBKZ4^@[l1S[/g9njn[:3RGk5e1RXKX6h3[[^Y:eBAYNA<^?5e`[`?C[WFDM ?H?dQig@7Yb=oMWNPo8IH^GjcA@;clF[`liOb/g?Pnl2>>mEIi;MfMW1/==PnQA` LC4Uo:So`n5/E0egLfPN=6V][Sg=a@JkMDmOkjm8BMd7:H7h2JL9YVS:ek m]>WjSP7en?^9Dj`m`3adRIEjTkXM1K`W[Vo[;7UF4hMaB@JC/0N^4eGk=@3CEFZ @/i>eLfmATdHV0h_lo>n=[HMIVh?PX8O0:a7X7lfMYUi:2P<> ;Naef@U]N?c/VLD/WaoUO_b_ d4C150N7f[hc]GMN/?aP@?2=n0BhMPD;`dkShN2>icCDg768V@=GDmfmO8?2^K72]l^gkh4_ GncLVDnK4g:^BcIJWGXY>[Vi[:7E=5Zn^<=?_i8`d2/OnjS/52ChOB3o@DV3]0_n lk_n@S4JmHfMZ4je]F4Ymb0mONOQhbKCi/9C;Ua[HWiQa@NVX_T:=]R3HKeSjkiV mbog7ZA8ILgLldhAZoO/9?Og2bnAl5g/Y[]i`b0UIR3Mc@DI>3SM:n3HQ<@TWQM5Uf4^HCio;OKlRZ_Z@Ki19 XoJ41Z A^Ih^GTi:7gFbPf0E6T0Z7j/[Q4knR`7Vd5?=MK>oOV[EagRZEY8KeeYOB<[UC>nT[BdeMGE59JE?LenUI6I6 aMf63V[AQQeVdnK06OQPHa_@a@Qc9b?GFC>G[klH4`_c7^h9aK0C_94L3XihV9W= 5hXhDX5@U5LPN?hZ;cD[9oC29C__QG2:0XU[^;VSdOAi;ejoI]DNX`fmcThkSo[1 ^a@L>]W=G^@GXI5K0oAUbn7SF0b>h3VmlXkFf2OH2MdBRhA@BRRM7ChLLmmWGOg`L?C DMMfW`QJ_7WWcgK^D>A2U88UYmL:RZ0dI2NhJXU0;8IBB5cb9bRiZh<4Ai[W[ejO ^fHc9CkaW0NKf?oR7lcZSQ/UmRhk`CF:QONRM7M8]<7ajGOLkWK=CT>3oQ0WoMZI`l0GA/SnR0kOA`R71T5ghHMS9hU:Ra451TIIPhe]Mah=::^/@>>E6ZWj4OO03mFZOHNn=Z:LOhigm1CG m[j@[mY>kR^OA@So5cM_<>:=IYToQhRLKeL4?:_3/A5n@d]6FN>>m:ZoWACnRW/9 fNOH:E3`em>5_SUjlLHa5?/L>bT=Bg@1Ol5WcR>b`1Q;IbRgcCgWaMa>`4FU>iV? R^cDFLnm:0@UUiJGWkibkB/S7?UgnN]4/oBLaj[1iW1K;k8CJ[mhk@Kf3TJI>b:T I/C5:ab0<]HOMn0QK]e_gkWGZFJJ@G/`LcJV1Z:>[aMg7o_ac[bCR IWREKbM62QYJ_[QHa4E@OHfMoS50>?5:FJg:/1 f@UAKWLL?bWl3P0E]hU4N56cME?BZP0Kg8C]SgM5^dH[bUjb1S Vdgk3co:NPbCNlgoX>eO]64K5/_SKE`GKMk10FJ_S=/>:jfAbSj=40h8e8EM@@1o IDYeCGA2bH00j>7Ij^YKk1C0ag5V76[FTmN=I_@KMSYm:LYRnSa4 C827:9PTLB2/4gJRWKW9oDUJ`gDK7;Pa8iK>X06maTi]KC0^oLK43PHHf3GHiN]o ;NkfoI@DcM>UV>/8N`N[9ePSO3756UJJB[gCohnKdZ[nli@^HPBO:7QDdBaCFKWC 260m?bjQHP2HT3EDN]mR9coQdPOEELg:>X[NN]OmRIg^9Cn`W;D0QSYHKEW>V=oM k8@=A1^_1O[9CS0C?GOUfU0NX72U;Dja_MRY15:RW`Fo`@ceN/9MZJi?>gKgV1Lg ]hbj@S/KIc^Obb[Z:5fDL`]>0NMcW]?OWUTcD9eGL`gH2CIJJe8Z?`JihFJU1_CT Akl2ln^UEoQ`dZ]F9M;M[dbYo?k4CZWYjE>miV>W2GYPHcOfToQdmgDR>lWIbDM3 MX;eMMP5K@>bb7nelJHdmnl4FeK[F@]PH0nOW70g2_49?^EP9:IiPPN68LJfN1HU 84hjPXZZ>ZaC6T]jn?5@C/d`n3K14E[]YSWX@^i1YD329DhLOB8NaN7O:ISofJDR S]m:66BkaiEna:eMejkmWGR:3a?FTjmZ:oDY67AoHZN76AVFGP/YmhlFc]`7bWZ< WF14BWW^aFJRYG?0j@/L@kC3ZHeWTajV`Jlh56^dKdaeYLUJIBobl[jBQeCndMAf hkk3^ggm/KS[K=YanVM k5C0:C^mmCh76`IE=Y2;@imMiP[WF]_Bm/didOoZGMTYX<0PZSRk/_M]W1A7BcmS 9mj/1G0?YCo/57O_?QgeH929kI4^Ace0JA>Pm[M`P^64mjY=j]P9nWV`8P;nPQEQ X@[3/Z[_okAV;9J@[5F0WD84WdFYIBO:^;eNA_5WKk4CaL3`d<8?OU9CdJQO kkLo/E=:N[ZIe`8h400kZO>aATnX7Y>Mh5l5BQ^XKQ04O7M0F5MV=mhDE4WSiI^B Tn`mEfcKZhjMa;Fe6oHL`4TOV=0_fkb[FUb3>kGkPbmUjnWchNlGYNdi5P3gP?[? B4X];:ZG1Sj_obBX2ekYo0X^2bC`KZMD<_?aHYk4n7ZY>WKjEJSPjn]U`9niGc5C 9iD6_91kOI5;FMYCZ8IdO[=WUi2HK3E[0KJI X2ZamEjTKSbPncYQYbNi[baWc:?eCV7W8Z7ZD@@FNC@0gUOP005VX[0jF;gW85B8IIg3_2GnYlna5XEC?`QH06_cWJ7EWN@7[7K/BXF[ n`SGOgBHH9AVh3Z;GePTJn>B8]BEdh_G`@[IhYHAQ` Ze`M>odQG6QiYiceIF4O<:m>mTeDBNl:C[l?h2LG=cJ[YmoNNWd0[Mn`DlSIlnJN Lf1l>B7X24D@]gDoG]FkP1RBVDo8IeiJDZBk1N2N2W E:Qeo_m:g>am]g:07i_9Dj3P?dlFKW[d?[2Y8SSUSBd1cnYkcB6EO4ggDA2h]k9g oCPYHZ:HkcO/1;M@LeI_VVCWgKZY>MN6Se9TbCfO];OOnJ1 ;_kK`3cahL@0Gd aBB;;DOlZlCEZ^F0=oR5X[DkOh402I]iN5eXK>ZZ9Z6lZ/YUoU:@<7c8k3ib@UAL d^OH2I0FeCO_OURU?@l4l;n;;TV[Y0:kZkhP_8P=R:K76^/cP?o3NE5BUe?B_b3dXKiRMF3SPQmmcbUT?T3Pe216=_UV4a[=CUNYU/@fKekg7FYR/B GAO9:U3`Ua1A35mI8j7De5kl2:PIMS;cmWT/McZ=Re[l/OJRY[jNWUIH5hC16d09 OWVEgaCc85H=TMM^P6N`R]6l0CRMTIbF=];6KHbU:iHcf6>J]Va]Rha;IV1U9`e[ U3A:cUnii[ih=KKQ8Z`ACPINl@]fn_YmKF`3JX;m4XjUg4Y:AQ^DJi4cWU0T2SUkPFJW_aW`ZV_[E6o[ k1D/38G58SY<<7`0GXZ=HaGK>U]/cmoOg2I;:VoZRV>jg`@9o^FLR9MDFM@48J[M <6j2@mLJjMKd6YQ^DQ8JJ2Z@?cjjm?2Cf[bjMSjel>2S/RK3V=8oQ/V=ZK[8<5Xo 7/SoLkS@neiUHjoji^DN1/2:IRO/Da/hCenaOBnLh^hjLZ9CJOoa@3R_ISF6jA@k 5IJF3>@iDB:@gCBGnL_g7?_;>QXdjRmSL:QDe]c_HoP/B3;eBlX[CDX;YFVmU67K2[9UPkFKX=6>Z ViNAbdc=daCW6I

  • GV`cIhW5^f@mIhW=kGZ_f_ShaG==YVY9FOWeQ7]; ]^gmJXX5cPkCNfZ06Sib[K`FXV]fliKA_DF93Oj2amECgfIM^ gX9W68iM/a>W;`b3iBO?nDMCn`N?7[6n4DDL=<`SL3321b>8<4`ea]Yk19joY4VG =Bbl9fnC]KDn[FXIMUkdJjf=Ro1P8?nS@<6@BlFckeF/ba9OhMLoZF`^JVRYTm9N b>CHP;BX_kI6FF]iTaBT5<>_GiMA?N]^nCnM5Pd8P8UA5nb_]6HTi/50hDmAYO^O e:Z;;mbC;hFS;R0hb=[]Fd=[R053C>cP20Rokie:gdjan_AWGWaR4^/i[9ZjnSn= W89]YWlKJnagmP8R1E3_k=g?SD86lIRJG`[h/cK]W;Ih5GSbNoWQ2k@4JaTLZD33 OS2bnMk8VTk83c:fAI_QmA6I7da/WNH]FKggl?f7jE0kMhPiF_D_Xhg@:WV_DH:= QUgn7_FJfV5Wd6_UQVfnO[O^9l^k`2;9:7B=9^gFlZY:=6n;[ioWdSFHi^PPJ0X= T6=^PgDRdcGj;N3h2Bh>]g2fW^VcH]L_Ijk4`>fNJPaO^R:0bRl/G;Ggl7m?=4>I XjaM:j^[eMf/dSJFWaG5Ne0>7?AmJnH0a?k_Q:T[3a`]:H<1CmoC?Z5C67hkdZ[n 50:BjL:Q=[TnVE:3Q`W=Hd/fYHWmWmMMi4/BRYXBRY/BBY^YE=:4Sm72QY1GMC/c JVa^UU96SgQ4Jf9T^:F;VB31Ya55Vm=ZH0VVn9Ke<8nGaE^dN^Z/Q@P?Y5gRNBdJ ?m?WDEHfZ`:fC]8`c=GKdW_A:?OIIjkM:9IkXEB70b;o?Wgil_CUjK^H: YUFMjS8]_3T/G[GkV7m/`]e>aNRDMaTJjUHXKB9SHV7YcI^m69K]R7/2VLg@JNHD YkNm@cOAFALi9J7QCaedn2[SlI<]Qdm15Wg8f[]Z_hM4U7f=]eLEYCSd^Egf3LbQMTecM 1?:9::@B_Z:_hgnX_[6La1DMe=P5DYGGoY4oOf=:IDii4lM`DTF/]ji0Qh>`IEe9 D9F`jVWA8ba3V9:[JlD@T;Rk2LCX?aChk>E;Z5oPQ2Cdgoa@?P]^AHG3bd=bZBOhRjLnEJaEDcc^3<5@P6]n5;DIS<5MRY3=eDP:[ck81Dk QXL2@kLM?;YbagjjJnPV>X/^abKL@JF=cHfJM0ggE8_5XY8Rm0;];=O<3JKVcDKi :1`/JFlEN:OmdElDTMcd10XZBSgWHh`=Xl]2f0?cbV=:>: gCA2gehCfTNeRoHQk/<?O53/]DM`=g/IYoZjklm]Lk/GYZ oj3^ZD>Qo4jdBW=0N_S>>hF=M[4Ek2JD[5>k7eb421L1Kc0MB0Pmo298M@@1PX0B 0];F=eOi3CJaYNaFU?f0RaBk@4]do_c4LYSWMZ1VE0::O2@840Aj7X46VBbnY>W; bkB7^ZkZLoA1YjBf3F2Whl:[1A8HZ?LlcZA6PP11@0/4VUZU:AF=U0UUehbPe=:2 XP3CFoTP`BN1QLMbjWXm]ZlF;hPl@Q3hT16@b:AWnA9Z^eloEMUMi;A0`Cl5lgdB ZlXK>mk;oY270NTk@D0o4L1N//o3ZXlYgkUj^MNV=D5Ae2@`_5JFG0;kPOj`Uj6O hhNdRR3@O@SPS71aTgAlMMWW2N[Go_`aDLFnCjP3mMd=7BVO840@j6h4@51SXhXY P/8B[blC5?bm3;aB4_AJ@ZRY^lL<:IlPd6<8h<@^c^[fKB>X4`Fd[k`>3icf6:ZT 8X80@J3[2<3QBEi]ll7/6[TScKhV@D5S1VZjD_ZbEPIoaEe7PiA04208j1D2V=LU 3BeQ^OEbEgEmIaL_B?1[o`:KVnF_2CFaN44QG4d@j2L8h9ahJF>;Kdi]KdJJjiCR :e3`fb2n@ec5lfXYhnm>[cRO=8HP@13@5@:Hhh:jiYEYEAn7b/DWOCHc21Clkc2A EFaI[121PHSEICoiRMCEB2KUm5L449k0<;J3?hB;SJnEAnFB7 S_0B@N33@Z1F:Q/IFoI9Z>0Om92MPPCo9jA`eYfZU>:nhDf^_oj:TGhA17X;0EP= fMf[n9NC`UoY2D7APU`@oin2n4LNeaKDBXUMDfn=3E8_@J3G4L3d?oZTKUaDfLL1 lUENYeCF^[fIYRH4bP`G9UDd=T7?A3g@HD;kUN; FhS?0L;<1062@3/48:hPe18EEQQacjT8D3fhTAO0ooaMN^EN@S@H0P @12P4FQZUBFD=m_7EO`fB>iGDkNJ9MGBi6hC[>mDG1M9:Y[JQChWKh@P@10P22PQ 05gd3D73k?]Eo`[7_`QgdWgQjP84OcmCI1mO7Ub_jEHR^mo;Nk/d9?SmMk9=DNJnh@KD1i0Y1P2104>10@2:CkLn]noa: bImX?Z7oEefMMNZ:_13HOojoL67hReZiXXWXVXSLB10P26R1@6^AA;HmXoX?L5]7 >Jo[f[6G85m4nHH2@GE:F69^ aX?no7l>5XBl84igfl7;8KjB[`P2184>4H2m0BbAMVJ8oa@/XUCUWO<0c8N9`Vo2 2lO7Ecb[JLJfH8OETA/80P@1PT2W410gBe<[VdK7UGlL9Y@k0MK0abKFPoklADWE ]dA=aHf]a;=UY`0W=a<420:J8h0X`iWRU]2GTVT95Fl=biVeVf:6dU11I19>_UYj >ZonMEec_EBZNBgTCX80@H0PX1d2X9[l^^HX@OgDjhRT86`G3igFW`LDO7:^:>Qi GDjE]54V8nOV]<>I?4D@80QXQ`22XEo>Ula>Z_kg/j9o211@78DD`?mc^=3YM_Vf IkFU3I2Gb;TiXVLS2104NPF1=oVBUYTYED3 1062P1hP0=_bYiE=4n<[eZJ;7iK11gR_l2BYU210420840@80P@1PP11P2104208 40@80P@1PP11P210420840@80P@1PP11P210420840@80P@1PP11P210420840@8 0P@1PP11P210420840@80P@1PP11@2d2oam2H/;f2VE^I7=dLVEQK@YUKVA_HVX: >20`86mRJPXa>3Tc<0YUKVA_HVX:C@P;dQUJFMX M20a=S@P;d=_K6mbDg1QHfD:;dAUMVUSIDMbHGTP;dU^M6EbL6m/HGAU87AbMFDP ;d9YM7=@IG93Kfe`KfiUKW@P>20_AVU/M6Eb82m6K65dIDAUHfmTIB0n?PYcM79U HFd:N07]d3410000`Z3nZFL;;hQ0HL200@<631P`H<200@<631P`H<200@<631P` H<200@<631P`H<200@<631P`H<200@<631P`H<200@<631P`H<200@<631P`H<20 0@<631P`H<200@<631P`H<200@<631P`H<200@<631P`H<200@<631P`H<200@<6 31P`H<200@<631P`H<200@<631P`H<200@<631P`H<200@<631P`H<200@<631P` H<200@<631P`H<200@<631P`H<200@<631P`H<200@<631P`H<200@<631P`H<20 0@<631P`H<200@<631P`H<200@<631P`H<200@<631P`H<200@<631P`H<200@<6 31P`H<200@<631P`H>0o83dPE1569BH1@0XJ49WI41DHD4BUFI5C0 0DN78V=550^3PV;G2O8@D<1:5LV2GPIj=l1fFm E4VJ0>Gg:=?Cn9a<030DVEoRoTiJ9h0N:IW i8X4RDURYQ7GV6WUjg]FMKVJ?VofMlNOU?m?LQjneGa9^c?WT6b/;kdF0?HTFY/M/kjE E@2dK@I0iN6/CnlP0?850;CNW??PSI`1U`4El0=L0/Y1^iSDRALN@31XNQHIPH 5/HIhhMIS>5REV7FHTX`eIQSV5I<5nHfIQ0cPOV2YF;E/JIH9j`oMPTf4I^=;LAF H8mPFk2G/@?HHN`k70k7`1WR771n^1QLn2 3l5cl69l8Kh:Oaao7]n?7lJo9i09FPA[PPlQUR0TK2AD41X8i`SmQ172=561Z4md 8XH@NLALHRVaS]Q1_4TL9TjC54V691MB92VI]85DBFXRGBHm9[dQTlTjI4Mb65U0 GTn^99lPGbD?TSm@U2PV54m:74E2fDhiB[U0ND1i@jEB3JQ^e5RZV;ZMFTnmA7e: OBm7Tc>GliOSbJfCZi5[UN^GNbE?U=NGMiMO;YlWGb5oB_jVo;P2DL50`E>1Xk1F XDKQ]<8mQDU5VZ:EHXQRVV:9HX?R=LEA9KbBPI:g4TnY@>V`dRFU8AY2djEid[Rd CK@jfVGJ<1e7=jCkdi?YaO@Oj;gd2FDUIE_U:>DLiA[U/lYB1/8`H?PcDQVUS9>< ^hb?lcCV^LoScm/f[fUNok`YUOTZKRYlUB:EIYD1UHnZC5E_eACEWJY]ZToD<6XV JV5ZfF[keBj[SLnWcgNNcieO=?oTo8OZ/;Z9N[SjJ_G3jSgZTaZJ6[hJ6AYE6YLd aSDIVVjJbI[UV^LdakAXFP^e15[UF^NeGS2EVNkX/eQWXdjccQ=MTRiK=d6gG;MCMd9?BbmH;en_DNnQ?U6O[InT_dNoFgo:`=0P fV2;@I_1Z:6:XKmQWV6ShFd/Dbg[;1mI:ET5F6fdj[3j`m[4VV]MHgg7QV[SHk?>Y]gV]JfY;Mmf_nem>iYM /=dF^djkcoH>mR;k9_/a1cf7N8Nm3_OHM7HX^hAmeA7[j>6hc_63LjS2``Gl1OD;AQbdG7Q^1abTBiT;XaON72Qe5GKUN=Jjo[8:hnh^kQo^BilH[ihgaGOQUo944UhBbQ=54UlAMRF=9[TTEBN<2Cd6eh7FbGo:1i:VD T9BS:C>YdJW=JHBdn;CC@REQR[0[GCjbVWEkUDCXT3ATD`XLeUV ^iR>oTceB8`TVbF3F@^cJ[;NIdMUWlYAc17Vm>BJi6k;7LWcbO]n=FHeMgEW_WKn Q_c1=Ni[3Zf5eZiLfkU>Meg1^^7e_^^?KB1]B=W`bdK;SFDKgfj:g]AAX56`_V1X /noVaT:i@U7Q_Bg>F`i/aF`EK>gMI[>]J]^G8UkAmF;;hX[RCbGLT^_OFGeGnMg< mXC]_JGfYO]gh7H8MmcMjK[cF9URFEkId:kPGJgUc?:Rl[NkEnbnEV5KLF0?JHmT Sk@bZ;:mBZmZAmFWjZCZPAZ?V^JmjW^gkIgJam_G_mm]Om<1S@?51chN51blOlSg D6^]@Fg5HMcQ[e8lI7?AhE7YLO2SgGE>mCG=jPgU3K2SI;6 /N=aafomh?E3Na>[jE0cXkWh13PQ>O7RaoPOkihM7LhM;CnKogcdS?JIV[?:Id_?TLhEW9/iWgMnlT;6QO6; RAN7>UMd?[Zdi=:M[[2^g/^1UjmNlKUbZM^mnoaEUj]W[SUM>gfMOKg]Q_f=eQjk WYIOk7iYjKG_KKgYL;?mU^>]S[h5ONOjGO/_g_JjONF>oidK0h/6n^h^_W_oG]`m jGgNoM47Z@mN?laj>?eXoF?/hj8W2TlZWZXo[OgEn=MVZKgdk:3GHCCMfW_YZN:gZ^n?oJ1oJ7kHoC7TNW/CoQ? UIn=?gMl2OcbN2I]I^KOmhCcn`YUKVAcM79UHFd:IFiTKf9Z2S4c830PKf9Z2S8f 30bC@d<3MJ<30W<30W:@YUKVA_HVX: CPP<30`<30PKR0:<30`<30`<30bCD`>B0`<30`<21^80X`<30`<38`<30f830`<30`86hP2S0`<30`3Pa830`<30`86hP 2S0`<30`20`<30`<21^80YdLV5YK6Eb 2S`l82mCJGYU834g82mBKfmd834d830PDR0_BFiVKb0a830PDR0_BD@PFb0lHS8i >CHd3TfIVDn2SaRCIVIChPGB0n?PYcM65bM7QbIFH:"], "Graphics", ImageSize->{394, 164}, ImageMargins->0, ImageRegion->{{0., 1.}, {0., 1.}},ExpressionUUID-> "d4699448-a936-422b-a96f-dd6c77cb8dae"]], "Input", CellChangeTimes->{{3.728058151655451*^9, 3.7280582039027777`*^9}, 3.7280582479309607`*^9},ExpressionUUID->"b67ca86d-b18d-432b-947d-\ f041068166db"], Cell[CellGroupData[{ Cell["Cryptography and Security Protocols", "Chapter", CellChangeTimes->{{3.7280582612197733`*^9, 3.728058304007764*^9}},ExpressionUUID->"c3f2b3c5-8143-40c6-b38b-\ 06d752a6ae62"], Cell["\<\ Paulo Mateus MMA\[Dash]MEIC \ \>", "Text", CellChangeTimes->{{3.728058310970299*^9, 3.7280583251576*^9}},ExpressionUUID->"fae26818-847e-48b7-90e3-71a922ef5cdd"], Cell[CellGroupData[{ Cell["Discrete log problem", "Section", CellChangeTimes->{{3.730701391810192*^9, 3.7307014019614162`*^9}, { 3.732259304144038*^9, 3.7322593079905977`*^9}, {3.732514621900153*^9, 3.732514627507069*^9}},ExpressionUUID->"a0e6765b-bffb-44d7-af0a-\ bbae47c5ef30"], Cell[TextData[{ "Let p be a prime number \[Alpha] a primitive element (generator of ", Cell[BoxData[ FormBox[ SubsuperscriptBox["\[DoubleStruckCapitalZ]", "p", "\[Cross]"], TraditionalForm]],ExpressionUUID->"8646d7e0-8bd2-4ab4-b6a3-531f2fbcfe69"], ") and \[Beta] an element of ", Cell[BoxData[ FormBox[ SubsuperscriptBox["\[DoubleStruckCapitalZ]", "p", "\[Cross]"], TraditionalForm]],ExpressionUUID->"f9b971c2-24dd-4f66-9c01-91bfe9b37147"], ".\n\n", StyleBox["Objective: ", FontWeight->"Bold"], "Find a, with 0 \[LessEqual] a \[LessEqual] p-2, such that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Alpha]", "a"], "=", RowBox[{"\[Beta]", " ", "mod", " ", "p"}]}], TraditionalForm]], ExpressionUUID->"920bb489-7d42-46f4-83f5-eabb3e1228cf"], ", such a is denoted by\n", Cell[BoxData[ FormBox[ RowBox[{"a", "=", RowBox[{ SubscriptBox["log", "\[Alpha]"], "\[Beta]"}]}], TraditionalForm]], ExpressionUUID->"8be5fcfa-4f99-4440-b7af-ff82efa791c1"], " mod p (sometimes we drop the \[OpenCurlyDoubleQuote]mod p\ \[CloseCurlyDoubleQuote] whenever it is obvious from context).\n\n", StyleBox["Exercise", FontWeight->"Bold"], ": Show that the Discrete Log problem is NP (and also that it is co-NP).\n\ Show that \nA={(p,\[Alpha],\[Beta],k):", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["log", "\[Alpha]"], "\[Beta]"}], TraditionalForm]], ExpressionUUID->"44d76a2d-5969-4ac2-84a9-7394cdb8755f"], " mod p < k} \[Element] NP\n\n\n\nB={(p,\[Alpha],\[Beta],k,a):", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Alpha]", "a"], "=", RowBox[{"\[Beta]", " ", "mod", " ", "p"}]}], TraditionalForm]], ExpressionUUID->"360c4861-2090-4bcb-ac1e-5819bbe9042b"], " and a < k} \[Element] P the complexity depends only on the first 4 \ inputs,\n\nFirst a < k can be tested in O(|k|)\n\n", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[Chi]", "B"], "(", RowBox[{"p", ",", "\[Alpha]", ",", "\[Beta]", ",", "k", ",", "a"}], ")"}], TraditionalForm]],ExpressionUUID-> "691eeda4-6d1b-4fc2-907c-2d50fecf064d"], " =1 iff a "7b7b3d90-cdb2-466a-ab71-23dd8f499dbe"], " can be computed in PT on |p,\[Alpha],\[Beta],k| (note that && is lazy)\n\n\ Thus, A is in NP since A is a projection of B in the first 4 components.\n\n\ \n\nAs we shall see, there are several primes for which the problem is known \ to be polynomial-time. This idea is also the basis of ", StyleBox["Elliptic Curve crypto", FontWeight->"Bold"], " and cryptography based on ", StyleBox["Galois Fields", FontWeight->"Bold"], ".\n" }], "Text", CellChangeTimes->{{3.732259312864345*^9, 3.732259326454741*^9}, { 3.732259417950569*^9, 3.7322594364466467`*^9}, {3.7325146571401463`*^9, 3.732514899867502*^9}, {3.732515051716547*^9, 3.7325150525394373`*^9}, { 3.732515098891602*^9, 3.732515173523673*^9}, {3.732524634605754*^9, 3.732524680692481*^9}, {3.73252471818039*^9, 3.732525052746332*^9}, { 3.7325251072936296`*^9, 3.7325251074424257`*^9}, {3.732525182245288*^9, 3.7325251845685177`*^9}},ExpressionUUID->"a587fa19-579e-4c0d-b0ab-\ 6188fd61bf54"] }, Open ]], Cell[CellGroupData[{ Cell["El Gamal Cryptosystem - basic setting", "Section", CellChangeTimes->{{3.730701391810192*^9, 3.7307014019614162`*^9}, { 3.732259304144038*^9, 3.7322593079905977`*^9}, {3.732514621900153*^9, 3.732514627507069*^9}, {3.732515056380571*^9, 3.732515061331009*^9}, { 3.732515219243328*^9, 3.7325152210509653`*^9}},ExpressionUUID->"1ba38c7d-2854-4f81-9fa3-\ 47679dcfa236"], Cell[TextData[{ "Let p be a prime number for which the Discrete Log problem is hard (p=2q+1) \ and \[Alpha] a public known primitive element for ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], TraditionalForm]], ExpressionUUID->"3c7e6e2a-ef16-4748-a6e3-c08c45ac8cfc"], ". \n\n\[Bullet] X=", Cell[BoxData[ FormBox[ SubsuperscriptBox["\[DoubleStruckCapitalZ]", "p", "\[Cross]"], TraditionalForm]],ExpressionUUID->"5597a028-1a5f-496b-af34-ed0e66d7155f"], " (plaintext space)\n\[Bullet] Y=", Cell[BoxData[ FormBox[ SubsuperscriptBox["\[DoubleStruckCapitalZ]", "p", "\[Cross]"], TraditionalForm]],ExpressionUUID->"dbfe2339-cc05-424a-b780-8e3600da0ce4"], "\[Cross]", Cell[BoxData[ FormBox[ SubsuperscriptBox["\[DoubleStruckCapitalZ]", "p", "\[Cross]"], TraditionalForm]],ExpressionUUID->"e41c0560-ab80-455e-9c63-0655150bb7d7"], " (ciphertext space)\n\[Bullet] K={ (a,\[Beta]) :", Cell[BoxData[ FormBox[ RowBox[{" ", RowBox[{ SuperscriptBox["\[Alpha]", "a"], "=", RowBox[{"\[Beta]", " ", "mod", " ", "p"}]}]}], TraditionalForm]], ExpressionUUID->"8c9f7f83-7648-440f-a0dd-8eef0c200350"], " } (key space - note that the space is very easy to sample)\n\[Bullet] u:K\ \[RightArrow]", Cell[BoxData[ FormBox[ SubsuperscriptBox["\[DoubleStruckCapitalZ]", "p", "\[Cross]"], TraditionalForm]],ExpressionUUID->"55f0d9e8-2eb5-46c8-b858-56bd51ee0aeb"], " where u(a,\[Beta])=\[Beta] (publication map)\n", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[Bullet]", " ", RowBox[{ SubscriptBox["e", "\[Beta]"], "(", "x", ")"}]}], "=", RowBox[{"(", RowBox[{ SubscriptBox["y", "1"], ",", SubscriptBox["y", "2"]}], ")"}], " "}], TraditionalForm]], ExpressionUUID->"a9dbd106-e28c-4fb7-8cd3-b5b39559a532"], "with (encryption random map)\n\t-", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["y", "1"], "="}], TraditionalForm]],ExpressionUUID-> "fea6e34d-8f49-4e44-957f-a38c339cd00e"], Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["\[Alpha]", "k"], "mod", " ", "p"}], ","}], TraditionalForm]],ExpressionUUID->"2b551d2f-e3e7-4215-aee1-b40c8f936365"], "\n\t-", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["y", "2"], "=", "x"}], TraditionalForm]],ExpressionUUID-> "20896e4a-fb7d-42b2-b37c-6c319c032b7d"], Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Beta]", "k"], "mod", " ", "p", " "}], TraditionalForm]], ExpressionUUID->"541a77c1-273c-406b-b06e-35c5f4a533a7"], "\n\t- and k randomly chosen in ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", RowBox[{"p", "-", "1"}]], TraditionalForm]],ExpressionUUID-> "ee31340a-28d6-4f0e-9e66-3583aabc2160"], "\n", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[Bullet]", " ", RowBox[{ SubscriptBox["d", RowBox[{"(", RowBox[{"a", ",", "\[Beta]"}], ")"}]], "(", RowBox[{ SubscriptBox["y", "1"], ",", SubscriptBox["y", "2"]}], ")"}]}], "=", RowBox[{ SuperscriptBox[ RowBox[{ SubscriptBox["y", "2"], "(", SubsuperscriptBox["y", "1", "a"], ")"}], RowBox[{"-", "1"}]], " ", "mod", " ", "p", " "}]}], TraditionalForm]], ExpressionUUID->"7231bc00-3349-46ec-b17c-3e893b5fd8e1"], " (decryption map)\n\n", StyleBox["Exercise", FontWeight->"Bold"], ": Show that ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["d", RowBox[{"(", RowBox[{"a", ",", "\[Beta]"}], ")"}]], "("}], TraditionalForm]], ExpressionUUID->"ef985a5f-070f-4c14-a1d1-a99ce835c5e9"], Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["e", "\[Beta]"], "(", "x", ")"}], TraditionalForm]], ExpressionUUID->"e7ea2348-fa89-4cd0-a778-ee8019d56580"], ")=x.\n\n", Cell[BoxData[ FormBox[ SuperscriptBox[ RowBox[{ SubscriptBox["y", "2"], "(", SubsuperscriptBox["y", "1", "a"], ")"}], RowBox[{"-", "1"}]], TraditionalForm]],ExpressionUUID-> "01a21a98-7fb9-47a6-8252-8fd3dadaf74b"], "=", Cell[BoxData[ FormBox["x", TraditionalForm]],ExpressionUUID-> "eb7508ef-e5ac-45b0-a23d-c42aa9ea9bc5"], Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox[ RowBox[{ SuperscriptBox["\[Beta]", "k"], "(", SuperscriptBox["\[Alpha]", RowBox[{"k", " ", "a"}]], ")"}], RowBox[{"-", "1"}]], "=", RowBox[{ SuperscriptBox[ RowBox[{ SuperscriptBox["x\[Beta]", "k"], "(", SuperscriptBox[ RowBox[{"(", SuperscriptBox["\[Alpha]", "a"], ")"}], "k"], ")"}], RowBox[{"-", "1"}]], "=", RowBox[{ SuperscriptBox[ RowBox[{ SuperscriptBox["x\[Beta]", "k"], "(", SuperscriptBox["\[Beta]", "k"], ")"}], RowBox[{"-", "1"}]], "=", RowBox[{"x", " ", "mod", " ", "p", " "}]}]}]}], TraditionalForm]], ExpressionUUID->"b85613ff-e48b-4c6c-a54b-f1fe5c8201e2"], "\n\nWe now look at how hard is it to find a generator using a result that \ we prove later on.\n\n", StyleBox["Theorem: ", FontWeight->"Bold"], "A finite cyclic group of order m contains \[Phi](m) generators.\n\nSo how \ many primitive elements are in ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], TraditionalForm]], ExpressionUUID->"83aeadfe-0793-4496-aae2-2edb8cec7b4e"], " if p=2q+1 with q prime?\n\np-1=2q which is the order (number of elements) \ of (", Cell[BoxData[ FormBox[ SubsuperscriptBox["\[DoubleStruckCapitalZ]", "p", "\[Cross]"], TraditionalForm]],ExpressionUUID->"0e9113e7-8eb3-432d-9948-58ab3a01e4ad"], ",\[Cross]), by the above theorem, the number of generators of ", Cell[BoxData[ FormBox[ SubsuperscriptBox["\[DoubleStruckCapitalZ]", "p", "\[Cross]"], TraditionalForm]],ExpressionUUID->"1f0e6a8c-3c3c-4674-b269-1bfef8bdc7a5"], " (which is the number of primitive elements) is \[Phi](2q)=(2-1)(q-1)=q-1 \ (which is a lot!! its half minus one)\n\n\n\nThere is another reason why we \ should use p=2q+1\n\n", StyleBox["Exercise", FontWeight->"Bold"], ": Implement the ElGamal Cryptosystem. Trival stuff..." }], "Text", CellChangeTimes->{{3.732259312864345*^9, 3.732259326454741*^9}, { 3.732259417950569*^9, 3.7322594364466467`*^9}, {3.7325146571401463`*^9, 3.732514899867502*^9}, {3.732515051716547*^9, 3.7325150525394373`*^9}, { 3.732515098891602*^9, 3.732515173523673*^9}, {3.732515212349008*^9, 3.732515261276664*^9}, 3.732515304052153*^9, {3.7325166761837397`*^9, 3.732517180423069*^9}, {3.732517211280773*^9, 3.7325172196390657`*^9}, { 3.7325172999067698`*^9, 3.732517442783338*^9}, {3.7325174759915648`*^9, 3.7325175546154337`*^9}, {3.732520555139822*^9, 3.732520573848466*^9}, { 3.73252527872959*^9, 3.732525284229698*^9}, {3.732525657384472*^9, 3.732525657842205*^9}, {3.732525811166429*^9, 3.7325259341912537`*^9}, { 3.732525994968933*^9, 3.732525995345933*^9}, {3.732526036542506*^9, 3.732526130432908*^9}, {3.732526166662574*^9, 3.732526186053451*^9}, { 3.732526258346284*^9, 3.7325262702054*^9}, {3.732526322258852*^9, 3.732526355029942*^9}, {3.8292957817895813`*^9, 3.8292957937481537`*^9}},ExpressionUUID->"a5fc8e38-0b17-4d72-abab-\ e0a640e56950"] }, Open ]], Cell[CellGroupData[{ Cell["Pohlig-Hellman Theorem", "Section", CellChangeTimes->{{3.730701391810192*^9, 3.7307014019614162`*^9}, { 3.732259304144038*^9, 3.7322593079905977`*^9}, {3.732514621900153*^9, 3.732514627507069*^9}, {3.732515056380571*^9, 3.732515061331009*^9}, { 3.732515219243328*^9, 3.7325152210509653`*^9}, {3.732517565440033*^9, 3.732517596151044*^9}},ExpressionUUID->"bc4c0fd5-91d0-4902-b055-\ 164f16f9fe12"], Cell[BoxData[""], "Input", CellChangeTimes->{{3.732517967606881*^9, 3.732517969336219*^9}},ExpressionUUID->"be10a119-a320-4519-8d2c-\ cdbc1ad26f9a"], Cell[TextData[{ StyleBox["Definition", FontWeight->"Bold"], " A number n is said to be", StyleBox[" k-smooth", FontWeight->"Bold"], ", if the prime numbers in their prime number decomposition of n are not \ larger than k.", StyleBox["\n\n\n", FontWeight->"Bold"], " Example: \n* ", Cell[BoxData[ FormBox[ SuperscriptBox["2", "k"], TraditionalForm]],ExpressionUUID-> "546cb6fa-b078-4a19-89bc-709d527e5f51"], " is 2-smooth\n * Babylons liked 5-smooth numbers and that is why an hour \ has 60 minutes \n (and we divide the circle in 360 degrees) both 60 and 360 \ are 5-smooth.\n * 5-smooth numbers are also important in music theory and are \ in the basis of five-limit tuning of a musical instrument \n ", StyleBox["\n", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"O", "(", RowBox[{ SuperscriptBox["log", "k"], "(", SubscriptBox["p", "n"], ")"}], ")"}], "\[Subset]", RowBox[{"O", "(", RowBox[{"polylog", "(", SubscriptBox["p", "n"], ")"}], ")"}]}], TraditionalForm]], ExpressionUUID->"9ac902e7-1fb3-4ce2-b422-5c67c5e6f162"], StyleBox["\n\n", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"p", "-", "1"}], "=", RowBox[{ SuperscriptBox["2", "k"], SuperscriptBox["3", "e"]}]}], TraditionalForm]],ExpressionUUID-> "f5a7be9f-8456-4d62-b263-74bb28790af9"], " then I can compute the discrete log for p\n\np=", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"2", "q"}], "+", "1"}], TraditionalForm]], FormatType->"TraditionalForm",ExpressionUUID-> "5f48f93a-305e-480b-b791-d0ae60c455d6"], " not smooth and so (nobody knows how to break it)", StyleBox["\n", FontWeight->"Bold"] }], "Text", CellChangeTimes->{{3.7325176239775553`*^9, 3.732517711206893*^9}, { 3.732517970679549*^9, 3.73251799847162*^9}, {3.732518048848629*^9, 3.7325184318491173`*^9}, {3.732518524809135*^9, 3.732518778467321*^9}, { 3.73251881999253*^9, 3.732518857968169*^9}, {3.732518907242944*^9, 3.732519091928854*^9}, {3.732520094951518*^9, 3.7325200957933817`*^9}, 3.732520143248212*^9, {3.7325204579722424`*^9, 3.732520463376029*^9}, 3.7325211924598827`*^9, {3.732526404402631*^9, 3.7325264049786253`*^9}, { 3.732526671041101*^9, 3.732526691090971*^9}, {3.732526732541068*^9, 3.732526770519252*^9}, {3.732526830389448*^9, 3.732526858029443*^9}, { 3.732526894559614*^9, 3.732526968792119*^9}, {3.7325271171566687`*^9, 3.732527128032353*^9}, {3.732527167361121*^9, 3.732527364307815*^9}, { 3.73252740936411*^9, 3.732527428132976*^9}, {3.732527492828794*^9, 3.732527551370727*^9}, {3.732527632660304*^9, 3.7325276739080753`*^9}, { 3.732527716701976*^9, 3.732527736982596*^9}, {3.7325278004604883`*^9, 3.732527899056054*^9}, 3.732528035475174*^9, {3.73252807669298*^9, 3.7325280826571617`*^9}, {3.732528117105032*^9, 3.732528128918502*^9}, { 3.732528161238327*^9, 3.732528286848319*^9}, {3.732528322797016*^9, 3.7325285060349627`*^9}, {3.732528559801032*^9, 3.732528569600626*^9}, 3.7637164384557323`*^9, {3.829291176447296*^9, 3.829291199480283*^9}, { 3.82929622348114*^9, 3.829296506976095*^9}},ExpressionUUID->"1c77ae01-c030-4fc7-bfc5-\ 9c94351ee27e"], Cell[TextData[{ StyleBox["Theorem[PH] ", FontWeight->"Bold"], " Let ", Cell[BoxData[ FormBox[ SubscriptBox["p", "n"], TraditionalForm]],ExpressionUUID-> "7ee0ed80-e2e9-4765-a084-2961f07a3447"], " be a sequence of prime numbers such that (", Cell[BoxData[ FormBox[ SubscriptBox["p", "n"], TraditionalForm]],ExpressionUUID-> "11ee9730-cc66-4995-93a3-40819f3f9202"], "-1) is ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"O", "(", RowBox[{"polylog", "(", SubscriptBox["p", "n"], ")"}], ")"}], "-", "smooth"}], TraditionalForm]],ExpressionUUID->"ca2ec88b-ff93-433a-adcd-a5afdbe82523"], ". Then there is a polynomial algorithm to compute the discrete log of ", Cell[BoxData[ FormBox[ SubscriptBox["p", "n"], TraditionalForm]],ExpressionUUID-> "ca44f29c-48ae-4927-9ede-e70683c12eac"], ".\n\n", StyleBox["Proof", FontWeight->"Bold"], ": Goal compute a=discrete log of \[Beta], where \[Beta] is an input\n\nLet \ p-1 =", Cell[BoxData[ FormBox[ RowBox[{ UnderoverscriptBox["\[Product]", RowBox[{"i", "=", "1"}], "k"], SubsuperscriptBox["q", "i", SubscriptBox["e", "i"]]}], TraditionalForm]], FormatType->"TraditionalForm",ExpressionUUID-> "5b248f90-7f72-4c26-bbd5-0dd0bbe3f2da"], " where all ", Cell[BoxData[ FormBox[ SubscriptBox["q", "i"], TraditionalForm]], FormatType->"TraditionalForm",ExpressionUUID-> "b2de9218-c1b3-4a69-8480-905981749b71"], "are small (polylog bounded) thank to the Chinese Remainder Theorem (note \ that a, the discrete log of \[Beta], takes values from 0 to p-2 so a \ \[Element] ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[DoubleStruckCapitalZ]", RowBox[{"p", "-", "1"}]], "=", RowBox[{ SubscriptBox["\[DoubleStruckCapitalZ]", SuperscriptBox[ SubscriptBox["q", "1"], SubscriptBox["e", "1"]]], "\[Cross]"}]}], TraditionalForm]], FormatType->"TraditionalForm",ExpressionUUID-> "397af36a-d0ce-4560-b70e-7dc36852b40e"], "...\[Cross]", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", SuperscriptBox[ SubscriptBox["q", "k"], SubscriptBox["e", "k"]]], TraditionalForm]],ExpressionUUID-> "a5343336-c55b-4aa9-9df5-218e27d2473c"], "\n essentially, finding a mod p-1 is equivalent of finding a mod ", Cell[BoxData[ FormBox[ SuperscriptBox[ SubscriptBox["q", "i"], SubscriptBox["e", "i"]], TraditionalForm]], FormatType->"TraditionalForm",ExpressionUUID-> "92d931c0-f3fc-47af-93c2-38f889152077"], " for all i \n\nNote that p-1 = 0 mod ", Cell[BoxData[ FormBox[ SubsuperscriptBox["q", "i", SubscriptBox["e", "i"]], TraditionalForm]],ExpressionUUID-> "868c967d-144b-4bfd-a10e-9b547a8cf4eb"], " and so a mod ", Cell[BoxData[ FormBox[ SubsuperscriptBox["q", "i", SubscriptBox["e", "i"]], TraditionalForm]],ExpressionUUID-> "f600af0f-7608-456f-a2c0-3389be280815"], " can be written in base ", Cell[BoxData[ FormBox[ SubscriptBox["q", "i"], TraditionalForm]], FormatType->"TraditionalForm",ExpressionUUID-> "9b55c7b4-81b7-47da-966a-553de4a279ed"], "with at most ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["e", "i"], " "}], TraditionalForm]], FormatType->"TraditionalForm",ExpressionUUID-> "ed08a90a-bd93-40d7-a151-dd81c25b4dfa"], " symbols ", Cell[BoxData[ FormBox[ RowBox[{"a", "=", RowBox[{"(", RowBox[{ RowBox[{ SubscriptBox["a", RowBox[{ SubscriptBox["e", "i"], "-", "1"}]], "..."}], SubscriptBox["a", "1"], SubscriptBox["a", "0"]}]}]}], TraditionalForm]], FormatType->"TraditionalForm",ExpressionUUID-> "aa2e6822-f45c-4559-82f6-8acc46ceb17d"], ")=", Cell[BoxData[ FormBox[ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"j", "=", "0"}], RowBox[{ SubscriptBox["e", "i"], "-", "1"}]], RowBox[{ SubscriptBox["a", "j"], SuperscriptBox[ SubscriptBox["q", "i"], "j"]}]}], TraditionalForm]], FormatType->"TraditionalForm",ExpressionUUID-> "c8508a8a-2ad6-4869-ae1f-0abf22c6452f"], " note that ", Cell[BoxData[ FormBox[ SubscriptBox["e", "i"], TraditionalForm]], FormatType->"TraditionalForm",ExpressionUUID-> "a37f8261-ece2-4024-b396-5c9fe1a0a602"], "\[Element]O(log(p)) and also, by hypothesis ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["q", "i"], "\[Element]", " ", RowBox[{ RowBox[{ RowBox[{"O", "(", RowBox[{"polylog", "(", "p", ")"}], ")"}], " ", "as", " ", "p"}], "-", "1", " "}]}], TraditionalForm]], FormatType->"TraditionalForm",ExpressionUUID-> "cc1f6ef9-ec27-4fa5-a664-c644438b3b03"], "is polylog smooth.\n\nNow it remains to find all these ", Cell[BoxData[ FormBox[ SubscriptBox["a", "j"], TraditionalForm]], FormatType->"TraditionalForm",ExpressionUUID-> "53a4112e-a9b6-4f8d-8044-bf519bfa889e"], " for q (we are going to drop the i in the q) \n \n Recall that Power Mod \ can be computed in PT!\n \n" }], "Text", CellChangeTimes->{{3.7325176239775553`*^9, 3.732517711206893*^9}, { 3.732517970679549*^9, 3.73251799847162*^9}, {3.732518048848629*^9, 3.7325184318491173`*^9}, {3.732518524809135*^9, 3.732518778467321*^9}, { 3.73251881999253*^9, 3.732518857968169*^9}, {3.732518907242944*^9, 3.732519091928854*^9}, {3.732520094951518*^9, 3.7325200957933817`*^9}, 3.732520143248212*^9, {3.7325204579722424`*^9, 3.732520463376029*^9}, 3.7325211924598827`*^9, {3.732526404402631*^9, 3.7325264049786253`*^9}, { 3.732526671041101*^9, 3.732526691090971*^9}, {3.732526732541068*^9, 3.732526770519252*^9}, {3.732526830389448*^9, 3.732526858029443*^9}, { 3.732526894559614*^9, 3.732526968792119*^9}, {3.7325271171566687`*^9, 3.732527128032353*^9}, {3.732527167361121*^9, 3.732527364307815*^9}, { 3.73252740936411*^9, 3.732527428132976*^9}, {3.732527492828794*^9, 3.732527551370727*^9}, {3.732527632660304*^9, 3.7325276739080753`*^9}, { 3.732527716701976*^9, 3.732527736982596*^9}, {3.7325278004604883`*^9, 3.732527899056054*^9}, 3.732528035475174*^9, {3.73252807669298*^9, 3.7325280826571617`*^9}, {3.732528117105032*^9, 3.732528128918502*^9}, { 3.732528161238327*^9, 3.732528286848319*^9}, {3.732528322797016*^9, 3.7325285060349627`*^9}, {3.732528559801032*^9, 3.732528569600626*^9}, 3.7637164384557323`*^9, {3.829291176447296*^9, 3.829291199480283*^9}, { 3.82929622348114*^9, 3.829296767760222*^9}, {3.82929680529758*^9, 3.829296936368515*^9}, {3.829297000959444*^9, 3.829297170077903*^9}, { 3.829297242744936*^9, 3.8292972689985313`*^9}, {3.829297312924926*^9, 3.829297346205996*^9}, {3.82929737997325*^9, 3.8292977631742973`*^9}, { 3.829297850707663*^9, 3.829297850947049*^9}},ExpressionUUID->"2e60ff40-b573-4167-bd8b-\ ac773ca00073"], Cell[TextData[{ StyleBox["Lemma ", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{" ", RowBox[{ RowBox[{ SubscriptBox["a", "0"], " ", "is", " ", "the", " ", "element", " ", "such", " ", "that", " ", SuperscriptBox["\[Beta]", FractionBox[ RowBox[{"p", "-", "1"}], "q"]]}], "=", SuperscriptBox["\[Alpha]", FractionBox[ RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], SubscriptBox["a", "0"]}], "q"]]}]}], TraditionalForm]],ExpressionUUID-> "c2b94a00-6658-4f8d-b10b-bdab32c9b683"], "mod p" }], "Text", CellChangeTimes->{{3.7325176239775553`*^9, 3.732517711206893*^9}, { 3.732517970679549*^9, 3.73251799847162*^9}, {3.732518048848629*^9, 3.7325184318491173`*^9}, {3.732518524809135*^9, 3.732518778467321*^9}, { 3.73251881999253*^9, 3.732518857968169*^9}, {3.732518907242944*^9, 3.732519091928854*^9}, {3.732520094951518*^9, 3.7325200957933817`*^9}, 3.732520143248212*^9, {3.7325204579722424`*^9, 3.732520463376029*^9}, 3.7325211924598827`*^9, {3.732526404402631*^9, 3.7325264049786253`*^9}, { 3.732526671041101*^9, 3.732526691090971*^9}, {3.732526732541068*^9, 3.732526770519252*^9}, {3.732526830389448*^9, 3.732526858029443*^9}, { 3.732526894559614*^9, 3.732526968792119*^9}, {3.7325271171566687`*^9, 3.732527128032353*^9}, {3.732527167361121*^9, 3.732527364307815*^9}, { 3.73252740936411*^9, 3.732527428132976*^9}, {3.732527492828794*^9, 3.732527551370727*^9}, {3.732527632660304*^9, 3.7325276739080753`*^9}, { 3.732527716701976*^9, 3.732527736982596*^9}, {3.7325278004604883`*^9, 3.732527899056054*^9}, 3.732528035475174*^9, {3.73252807669298*^9, 3.7325280826571617`*^9}, {3.732528117105032*^9, 3.732528128918502*^9}, { 3.732528161238327*^9, 3.732528286848319*^9}, {3.732528322797016*^9, 3.7325285060349627`*^9}, {3.732528559801032*^9, 3.732528569600626*^9}, 3.7637164384557323`*^9, {3.829291176447296*^9, 3.829291199480283*^9}, { 3.82929622348114*^9, 3.829296767760222*^9}, {3.82929680529758*^9, 3.829296936368515*^9}, {3.829297000959444*^9, 3.829297170077903*^9}, { 3.829297242744936*^9, 3.8292972689985313`*^9}, {3.829297312924926*^9, 3.829297346205996*^9}, {3.82929737997325*^9, 3.82929775957732*^9}},ExpressionUUID->"f0b67366-beb7-4aaa-85db-\ 2b078c29522c"], Cell[TextData[{ "\n", StyleBox["Proof:\n", FontWeight->"Bold"], Cell[BoxData[ RowBox[{" ", SuperscriptBox["\[Beta]", FractionBox[ RowBox[{"p", "-", "1"}], "q"]]}]],ExpressionUUID-> "74b97025-7f51-4b17-9eb7-e9cd6a9aca92"], StyleBox["=", FontWeight->"Bold"], Cell[BoxData[ RowBox[{ SuperscriptBox["\[Alpha]", RowBox[{"a", FractionBox[ RowBox[{"p", "-", "1"}], "q"]}]], "=", RowBox[{ SuperscriptBox["\[Alpha]", RowBox[{ FractionBox[ RowBox[{"p", "-", "1"}], "q"], RowBox[{"(", RowBox[{ RowBox[{"d", " ", SuperscriptBox["q", "e"]}], "+", FormBox[ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"j", "=", "0"}], RowBox[{"e", "-", "1"}]], RowBox[{ SubscriptBox["a", "j"], SuperscriptBox["q", "j"]}]}], TraditionalForm]}], ")"}]}]], "=", SuperscriptBox["\[Alpha]", RowBox[{"p", "-", RowBox[{"1", RowBox[{"(", RowBox[{ RowBox[{"d", " ", SuperscriptBox["q", RowBox[{"e", "-", "1"}]]}], "+", FormBox[ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"j", "=", "1"}], RowBox[{"e", "-", "1"}]], RowBox[{ SubscriptBox["a", "j"], SuperscriptBox["q", RowBox[{"j", "-", "1"}]]}]}], TraditionalForm]}], ")"}]}], "+", FractionBox[ RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], SubscriptBox["a", "0"]}], "q"]}]]}]}]],ExpressionUUID-> "c799e84f-17da-4179-b473-aca467ba97f8"], "=", Cell[BoxData[ RowBox[{ SuperscriptBox["\[Alpha]", RowBox[{"p", "-", RowBox[{"1", RowBox[{"(", RowBox[{ RowBox[{"d", " ", SuperscriptBox["q", RowBox[{"e", "-", "1"}]]}], "+", FormBox[ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"j", "=", "1"}], RowBox[{"e", "-", "1"}]], RowBox[{ SubscriptBox["a", "j"], SuperscriptBox["q", RowBox[{"j", "-", "1"}]]}]}], TraditionalForm]}], ")"}]}]}]], SuperscriptBox["\[Alpha]", FractionBox[ RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], SubscriptBox["a", "0"]}], "q"]]}]],ExpressionUUID-> "9883f086-3a33-4884-aad9-8e48806bdbbc"], "=1\[Cross]", Cell[BoxData[ SuperscriptBox["\[Alpha]", FractionBox[ RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], SubscriptBox["a", "0"]}], "q"]]],ExpressionUUID-> "3d276b86-c1c2-4b6d-b260-f99b48f98753"], StyleBox["\n\n", FontWeight->"Bold"], "We just need to range over all ", Cell[BoxData[ FormBox[ SubscriptBox["a", "0"], TraditionalForm]], FormatType->"TraditionalForm",ExpressionUUID-> "b736dd26-dd64-46c5-bbc8-ddadda5793a7"], " from 0 to q-1 and test whether ", Cell[BoxData[ RowBox[{" ", RowBox[{ SuperscriptBox["\[Beta]", FractionBox[ RowBox[{"p", "-", "1"}], "q"]], "=", SuperscriptBox["\[Alpha]", FractionBox[ RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], SubscriptBox["a", "0"]}], "q"]]}]}]],ExpressionUUID-> "7b8c688f-d81b-4d15-96f9-f5589f5e4f2b"], ".", StyleBox["\n", FontWeight->"Bold"], "\n\nThe next step is to remove ", Cell[BoxData[ FormBox[ SubscriptBox["a", RowBox[{"0", " "}]], TraditionalForm]],ExpressionUUID-> "66d90af6-64fe-4cba-899a-1e452bec4405"], " from the exponent and divide by q and get the next ", Cell[BoxData[ FormBox[ SubscriptBox["a", "i"], TraditionalForm]],ExpressionUUID-> "37a145e8-bd91-4e55-8213-c8f0a98102c9"], ", iteratively, this can be seen as\n\n", StyleBox["Lemma", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox[ RowBox[{" ", RowBox[{ SuperscriptBox[ SubscriptBox["\[Beta]", "i"], FractionBox[ RowBox[{"p", "-", "1"}], SuperscriptBox["q", "i"]]], "=", RowBox[{ SuperscriptBox["\[Alpha]", FractionBox[ RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], SubscriptBox["a", "i"]}], "q"]], " ", "mod", " ", "p", " "}]}]}], TraditionalForm]],ExpressionUUID->"63e9ec25-dd79-4bf2-8b23-f35fee9037d3"], " where \n\n", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[Beta]", "0"], "=", "\[Beta]"}], TraditionalForm]], ExpressionUUID->"2dd95a1f-28c1-41e3-bb98-ad6dd5f16bb6"], " and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[Beta]", RowBox[{"i", "+", "1"}]], "=", RowBox[{ SubscriptBox["\[Beta]", "i"], ".", SuperscriptBox["\[Alpha]", RowBox[{ RowBox[{"-", SubscriptBox["a", "i"]}], SuperscriptBox["q", "i"]}]]}]}], TraditionalForm]],ExpressionUUID-> "24b4304a-d4c1-44e8-ab15-ff80a7c01e15"], " \n\nThe proof is exactly as in the previous case by noticing that ", Cell[BoxData[ FormBox[ SubscriptBox["\[Beta]", "i"], TraditionalForm]], FormatType->"TraditionalForm",ExpressionUUID-> "7a02408e-a764-44ed-b3df-d7e883086380"], " is number where the its discrete log mod ", Cell[BoxData[ FormBox[ SuperscriptBox["q", "e"], TraditionalForm]], FormatType->"TraditionalForm",ExpressionUUID-> "bacc5d98-7843-463c-8ceb-7b20f2be2615"], " has the last i significant qdigits 0\n\nThew overall complexity\ \[LineSeparator]1) So the number of primes k is clearly O(log(p))\n2) Each \ ", Cell[BoxData[ FormBox[ SubscriptBox["e", "i"], TraditionalForm]], FormatType->"TraditionalForm",ExpressionUUID-> "b5813233-5b15-4c00-8851-e63cd2509ad8"], "\[Element]O(log(p)) \n3) By hypothesis ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["q", "i"], "\[Element]", " ", RowBox[{ RowBox[{ RowBox[{"O", "(", RowBox[{"polylog", "(", "p", ")"}], ")"}], " ", "as", " ", "p"}], "-", "1", " "}]}], TraditionalForm]], FormatType->"TraditionalForm",ExpressionUUID-> "e8dcf494-f982-4cf0-8643-c7afb6740e39"], "is polylog smooth.\n\nClearly the overall complexity is polynomial on the \ number of bits of p\n\n \n", StyleBox[" Exercise: ", FontWeight->"Bold"], "Write the PH algorithm for discrete log...\n" }], "Text", CellChangeTimes->{{3.7325176239775553`*^9, 3.732517711206893*^9}, { 3.732517970679549*^9, 3.73251799847162*^9}, {3.732518048848629*^9, 3.7325184318491173`*^9}, {3.732518524809135*^9, 3.732518778467321*^9}, { 3.73251881999253*^9, 3.732518857968169*^9}, {3.732518907242944*^9, 3.732519091928854*^9}, {3.732520094951518*^9, 3.7325200957933817`*^9}, 3.732520143248212*^9, {3.7325204579722424`*^9, 3.732520463376029*^9}, 3.7325211924598827`*^9, {3.732526404402631*^9, 3.7325264049786253`*^9}, { 3.732526671041101*^9, 3.732526691090971*^9}, {3.732526732541068*^9, 3.732526770519252*^9}, {3.732526830389448*^9, 3.732526858029443*^9}, { 3.732526894559614*^9, 3.732526968792119*^9}, {3.7325271171566687`*^9, 3.732527128032353*^9}, {3.732527167361121*^9, 3.732527364307815*^9}, { 3.73252740936411*^9, 3.732527428132976*^9}, {3.732527492828794*^9, 3.732527551370727*^9}, {3.732527632660304*^9, 3.7325276739080753`*^9}, { 3.732527716701976*^9, 3.732527736982596*^9}, {3.7325278004604883`*^9, 3.732527899056054*^9}, 3.732528035475174*^9, {3.73252807669298*^9, 3.7325280826571617`*^9}, {3.732528117105032*^9, 3.732528128918502*^9}, { 3.732528161238327*^9, 3.732528286848319*^9}, {3.732528322797016*^9, 3.7325285060349627`*^9}, {3.732528559801032*^9, 3.732528569600626*^9}, 3.7637164384557323`*^9, {3.829291176447296*^9, 3.829291199480283*^9}, { 3.82929622348114*^9, 3.829296767760222*^9}, {3.82929680529758*^9, 3.829296936368515*^9}, {3.829297000959444*^9, 3.829297170077903*^9}, { 3.829297242744936*^9, 3.8292972689985313`*^9}, {3.829297312924926*^9, 3.829297346205996*^9}, {3.82929737997325*^9, 3.829297816504003*^9}, { 3.829297948958209*^9, 3.829297997075715*^9}, {3.829298046748723*^9, 3.82929818442348*^9}},ExpressionUUID->"754ba1d3-0c8d-4f60-8802-\ f5aa8d8bffc1"] }, Open ]], Cell[CellGroupData[{ Cell["Partial knowledge attacks ", "Section", CellChangeTimes->{{3.730701391810192*^9, 3.7307014019614162`*^9}, { 3.732259304144038*^9, 3.7322593079905977`*^9}, {3.732514621900153*^9, 3.732514627507069*^9}, {3.732515056380571*^9, 3.732515061331009*^9}, { 3.732515219243328*^9, 3.7325152210509653`*^9}, {3.732517565440033*^9, 3.732517596151044*^9}, {3.732520467401287*^9, 3.732520485847355*^9}},ExpressionUUID->"29ef5b0e-d353-4e3d-9b32-\ ddbc641d1296"], Cell[TextData[{ "Let p be a prime number \[Alpha] a primitive element (generator of ", Cell[BoxData[ FormBox[ SubsuperscriptBox["\[DoubleStruckCapitalZ]", "p", "\[Cross]"], TraditionalForm]],ExpressionUUID->"37dca53c-0299-43f5-b15b-6227b0236a90"], ") and \[Beta] an element of ", Cell[BoxData[ FormBox[ SubsuperscriptBox["\[DoubleStruckCapitalZ]", "p", "\[Cross]"], TraditionalForm]],ExpressionUUID->"a0d01a3d-9af0-4111-9b93-d5e5cdfa6854"], ".\n\n", StyleBox["Objective: ", FontWeight->"Bold"], "Find a, with 0 \[LessEqual] a \[LessEqual] p-2, such that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Alpha]", "a"], "=", RowBox[{"\[Beta]", " ", "mod", " ", "p"}]}], TraditionalForm]], ExpressionUUID->"82476a16-f35b-4143-9656-e825efa7410b"], ", such a is denoted by\n", Cell[BoxData[ FormBox[ RowBox[{"a", "=", RowBox[{ SubscriptBox["log", "\[Alpha]"], "\[Beta]"}]}], TraditionalForm]], ExpressionUUID->"009d02ee-046b-4038-94dc-3e8019d65df6"], " mod p (sometimes we drop the \[OpenCurlyDoubleQuote]mod p\ \[CloseCurlyDoubleQuote] whenever it is obvious from context).\n\nWe have \ seen that if p=2q+1 with q prime, then p is a safe prime against PH, note \ that p=3 mod 4 in this case.\n\nLet ", Cell[BoxData[ FormBox[ SubsuperscriptBox["L", "\[Alpha]", "i"], TraditionalForm]],ExpressionUUID-> "71684076-01f9-43d8-94a5-fd43b2905763"], "(\[Beta]) mod p be the i-th (less significant) bit of the discrete lo", Cell[BoxData[ FormBox[ SubscriptBox["g", "\[Alpha]"], TraditionalForm]],ExpressionUUID-> "a75c876c-c062-45b6-b8f1-8aa9f69f0ab8"], " mod p.\n\n", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["log", "\[Alpha]"], "\[Beta]"}], TraditionalForm]], ExpressionUUID->"bd8a24d2-8b48-43c5-935b-a20391fbceba"], "=", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["a", "n"], "..."}], SubscriptBox["a", "1"]}], TraditionalForm]],ExpressionUUID-> "3d73cd4a-a3c0-4e5c-bd62-9c4dda1ee46f"], " then ", Cell[BoxData[ FormBox[ SubsuperscriptBox["L", "\[Alpha]", "i"], TraditionalForm]],ExpressionUUID-> "57885c04-3981-4b20-bc79-664c7fec1a0c"], "(\[Beta])=", Cell[BoxData[ FormBox[ SubscriptBox["a", "i"], TraditionalForm]],ExpressionUUID-> "e5cb36f5-f034-41d1-b466-5ff0bc477f1c"], "\n\n", StyleBox["Exercise", FontWeight->"Bold"], ": Show that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubsuperscriptBox["L", "\[Alpha]", "1"], "(", "\[Beta]", ")"}], " ", "can", " ", "be", " ", "found", " ", "in", " ", "polynomial", " ", RowBox[{"time", "."}]}], TraditionalForm]],ExpressionUUID-> "cc71cbc4-4ba3-4ffb-99cd-9bdf24c74173"], "\n\n[Euler criterion], ", Cell[BoxData[ RowBox[{ SubsuperscriptBox["L", "\[Alpha]", "1"], RowBox[{"(", "\[Beta]", ")"}], " "}]],ExpressionUUID-> "c71d292d-5d87-4708-9855-5da7706f007b"], "=0 iff \[Beta] is quadratic residue iff ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Beta]", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], "/", "2"}]], "=", RowBox[{"1", " ", "mod", " ", "p", " ", RowBox[{"(", RowBox[{ RowBox[{"SQ", " ", "&"}], " ", "M"}], ")"}]}]}], TraditionalForm]], ExpressionUUID->"556a6b0f-b5c9-44f1-bb29-24b18d717a79"], "\n\n", StyleBox["Lemma ", FontWeight->"Bold"], " Let p=3 mod 4, and \[Beta] a quadratic residue mod p, then ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[PlusMinus]", SuperscriptBox["\[Beta]", RowBox[{ RowBox[{"(", RowBox[{"p", "+", "1"}], ")"}], "/", "4"}]]}], " ", "are", " ", "the", " ", "two", " ", "square", " ", "roots", " ", "of", " ", "\[Beta]", " ", "mod", " ", "p"}], TraditionalForm]],ExpressionUUID-> "a986a019-6f46-49f2-827a-b55ef7b4f045"], ". (the expression ", Cell[BoxData[ FormBox[ SuperscriptBox["\[Beta]", RowBox[{ RowBox[{"(", RowBox[{"p", "+", "1"}], ")"}], "/", "4"}]], TraditionalForm]], ExpressionUUID->"4f0b8957-5d24-49da-9312-5be3e50336f6"], " makes sense only if p=3 mod 4)!\n\n-1=", Cell[BoxData[ FormBox[ SuperscriptBox["\[Alpha]", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], "/", "2"}]], TraditionalForm]], ExpressionUUID->"5a39d1f0-a064-4c12-858f-de6f2277b95a"], "\n", StyleBox["Exercise", FontWeight->"Bold"], ": Show that if p=3 mod 4, and \[Beta] an element in ", Cell[BoxData[ FormBox[ SubsuperscriptBox["\[DoubleStruckCapitalZ]", "p", "\[Cross]"], TraditionalForm]],ExpressionUUID->"b0bc7afd-70b4-46f2-a52a-c10a6f96930c"], ", then either ", Cell[BoxData[ FormBox["\[Beta]", TraditionalForm]],ExpressionUUID-> "58ebd6fb-97f9-40ab-99f2-f237659779f0"], " or - \[Beta] is quadratic residue mod p.\n\n", StyleBox["Theorem", FontWeight->"Bold"], " Let p=3 mod 4, then knowing the discrete log problem for p is reducible to \ knowing ", Cell[BoxData[ FormBox[ RowBox[{ SubsuperscriptBox["L", "\[Alpha]", "2"], "(", "\[Beta]", ")"}], TraditionalForm]],ExpressionUUID->"3b2f11ce-6e8b-4c3c-8c4f-2ba07b95e243"], " problem for any \[Beta].\n\n", StyleBox["Proof:\n", FontWeight->"Bold"], "The idea is the following let ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["log", "\[Alpha]"], "\[Beta]"}], TraditionalForm]], ExpressionUUID->"c7d77cfc-965a-4d40-a30a-d6696eff47f6"], "=", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["a", "n"], "..."}], SubscriptBox["a", "1"]}], TraditionalForm]],ExpressionUUID-> "38134e48-bd6c-4633-a493-e55f21f2cc06"], "\n\n", StyleBox["Case \[Beta]", FontSlant->"Italic"], StyleBox[" ", FontWeight->"Bold", FontSlant->"Italic"], StyleBox["is a quadratic residue", FontSlant->"Italic"], "\nif ", Cell[BoxData[ FormBox[ SubscriptBox["a", "1"], TraditionalForm]],ExpressionUUID-> "048763ca-cd34-4eb1-987d-5bd7c01eb225"], "=0 then \[Beta]", StyleBox[" ", FontWeight->"Bold"], "is a quadratic residue, and one of its square roots is going to be\n\n\ \[Beta]\[CloseCurlyQuote]=", Cell[BoxData[ FormBox[ SuperscriptBox["\[Alpha]", RowBox[{ RowBox[{ SubscriptBox["a", "n"], "..."}], SubscriptBox["a", "2"]}]], TraditionalForm]],ExpressionUUID-> "e69ab5af-85bd-49a5-8830-f678688c8ef5"], "\n\nthe other is going to be ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"-", RowBox[{"\[Beta]", "'"}]}], "=", SuperscriptBox["\[Alpha]", RowBox[{ RowBox[{ SubscriptBox["a", "n"], "..."}], SubscriptBox["a", "2"]}]]}], TraditionalForm]],ExpressionUUID-> "cb7ddc48-8194-4fca-bb30-81a1237b074f"], "\[Cross]", Cell[BoxData[ FormBox[ SuperscriptBox["\[Alpha]", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], "/", "2"}]], TraditionalForm]], ExpressionUUID->"9c1a8979-28e9-4edf-a145-079fec2025c6"], "\n\nso one of them is ", Cell[BoxData[ FormBox[ SuperscriptBox["\[Beta]", RowBox[{ RowBox[{"(", RowBox[{"p", "+", "1"}], ")"}], "/", "4"}]], TraditionalForm]], ExpressionUUID->"d546e020-e1bc-48f2-8e3c-573e1ab25d42"], " this can be verified by checking if ", Cell[BoxData[ FormBox[ RowBox[{ SubsuperscriptBox["L", "\[Alpha]", "2"], "(", "\[Beta]", ")"}], TraditionalForm]],ExpressionUUID->"1a2908bf-f9b0-44e7-be04-60a07b3cb276"], "=", Cell[BoxData[ FormBox[ RowBox[{ SubsuperscriptBox["L", "\[Alpha]", "1"], "(", RowBox[{"\[Beta]", "'"}], ")"}], TraditionalForm]],ExpressionUUID-> "fef52200-4571-4a60-8397-06c4f6f0908d"], " moreover\n\n", Cell[BoxData[ FormBox[ RowBox[{ SubsuperscriptBox["L", "\[Alpha]", "1"], "(", RowBox[{"\[Beta]", "'"}], ")"}], TraditionalForm]],ExpressionUUID-> "5d5f6ad6-5408-465a-8511-cc3f51f057e1"], "\[NotEqual]", Cell[BoxData[ FormBox[ RowBox[{ SubsuperscriptBox["L", "\[Alpha]", "1"], "(", RowBox[{"-", RowBox[{"\[Beta]", "'"}]}], ")"}], TraditionalForm]],ExpressionUUID-> "c2cb2214-1a5f-45c7-97b7-fd5a75b99dcc"], "\n\nso we just need to compute ", Cell[BoxData[ FormBox[ RowBox[{ SubsuperscriptBox["L", "\[Alpha]", "1"], "(", SuperscriptBox["\[Beta]", RowBox[{ RowBox[{"(", RowBox[{"p", "+", "1"}], ")"}], "/", "4"}]], ")"}], TraditionalForm]], ExpressionUUID->"12f7c581-a60d-4ecb-91c6-39b9bf0ec8a1"], " and if it is equal to ", Cell[BoxData[ FormBox[ RowBox[{ SubsuperscriptBox["L", "\[Alpha]", "2"], "(", "\[Beta]", ")"}], TraditionalForm]],ExpressionUUID->"a77c6224-5109-4753-9ee3-85a6002eafac"], ", then \[Beta]\[CloseCurlyQuote]=", Cell[BoxData[ FormBox[ SuperscriptBox["\[Beta]", RowBox[{ RowBox[{"(", RowBox[{"p", "+", "1"}], ")"}], "/", "4"}]], TraditionalForm]], ExpressionUUID->"e22818e0-c1d5-4ad2-a558-ef6896d39f6b"], " else \[Beta]\[CloseCurlyQuote]=", Cell[BoxData[ FormBox[ RowBox[{"-", SuperscriptBox["\[Beta]", RowBox[{ RowBox[{"(", RowBox[{"p", "+", "1"}], ")"}], "/", "4"}]]}], TraditionalForm]], ExpressionUUID->"2fc0aa9e-edb0-4a88-bd5a-8198ce364f96"], StyleBox["\n\n", FontWeight->"Bold"], StyleBox["Case \[Beta] is a not a quadratic residue\n\n", FontSlant->"Italic"], Cell[BoxData[ FormBox[ OverscriptBox["\[Beta]", "_"], TraditionalForm]],ExpressionUUID-> "648fbe0e-f8b2-4573-aa29-ad0f94f055f7"], StyleBox["=", FontSlant->"Italic"], "\[Beta]\[Cross]", Cell[BoxData[ FormBox[ SuperscriptBox["\[Alpha]", RowBox[{"-", "1"}]], TraditionalForm]],ExpressionUUID-> "06831188-9f69-43c7-91db-00e92f547e6b"], " and now notice that ", Cell[BoxData[ FormBox[ OverscriptBox["\[Beta]", "_"], TraditionalForm]],ExpressionUUID-> "f4c94a28-debf-4ec9-acaf-b2294e68aff8"], " is a quadratic residue and moreover ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["log", "\[Alpha]"], OverscriptBox["\[Beta]", "_"]}], TraditionalForm]],ExpressionUUID-> "4bd101bd-4dd4-410e-9df1-d83ea336e062"], "=", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["a", "n"], "..."}], SubscriptBox["a", "2"], "0"}], TraditionalForm]],ExpressionUUID-> "8ab93ddf-8daf-4496-aaef-e682cb828a1f"], "\nand then we proceed as above", StyleBox["\n\n", FontWeight->"Bold"], "import ", Cell[BoxData[ FormBox[ RowBox[{ SubsuperscriptBox["L", "\[Alpha]", "2"], "(", "\[Beta]", ")"}], TraditionalForm]],ExpressionUUID->"752d56f7-4022-4fe3-ae16-ea75deada6ef"], " // our oracle, somebody has to give access to this\n\nint Log(\[Beta],\ \[Alpha],p,\[Eta]){ // p=3 mod 4\n\tbit a[]=new bit[n]; // we are going to \ start indexing in 1 like in old languages\n\t a[1]= ", Cell[BoxData[ FormBox[ SubsuperscriptBox["L", "\[Alpha]", "1"], TraditionalForm]],ExpressionUUID-> "c9352fdf-645c-4a8e-86eb-3e9f2ac539f2"], "(\[Beta]); // using Euler Criterion SQ & M\n\t a[2]= ", Cell[BoxData[ FormBox[ SubsuperscriptBox["L", "\[Alpha]", "2"], TraditionalForm]],ExpressionUUID-> "58c26bf6-1097-4515-8c90-4dbd5abd0eb6"], "(\[Beta]); // O(1)\n\t i=1;\n\t while(\[Beta]!=1){\n\t \tif(a[i]==1) then \ \[Beta]=\[Beta]\[Cross]", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Alpha]", RowBox[{"-", "1"}]], " ", "mod", " ", "p"}], TraditionalForm]], FontWeight->"Plain",ExpressionUUID-> "8429f15a-4911-4521-89be-a72250e19632"], "; // if \[Beta] is not a QR, we compute the inverse with EEA\n\t \t\ \[Beta]=", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Beta]", RowBox[{ RowBox[{"(", RowBox[{"p", "+", "1"}], ")"}], "/", "4"}]], " ", "mod", " ", "p"}], TraditionalForm]],ExpressionUUID->"f3976d8e-8479-4e69-8abc-49c51132a7c3"], " // this is one of the square roots, we need to choose the right one SQ &M\n\ \t \tif(", Cell[BoxData[ FormBox[ SubsuperscriptBox["L", "\[Alpha]", "1"], TraditionalForm]],ExpressionUUID-> "3fb5ac88-baad-45e2-b4fb-c2d023aa85f4"], "(\[Beta])!=a[i+1]) then \[Beta] =-\[Beta] mod p\n\t \ti++\n\t }\t\n\t \ return converbin(a);\n}\t \t", StyleBox["\n", FontWeight->"Bold"], "\n\nHoliday homework (try to do the same ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubsuperscriptBox["L", "\[Alpha]", "3"], "(", ".", ")"}], ")"}], TraditionalForm]],ExpressionUUID->"e8d72132-3ca5-4150-9d9a-4b26f581e6b6"], "\n\n" }], "Text", CellChangeTimes->{{3.732259312864345*^9, 3.732259326454741*^9}, { 3.732259417950569*^9, 3.7322594364466467`*^9}, {3.7325146571401463`*^9, 3.732514899867502*^9}, {3.732515051716547*^9, 3.7325150525394373`*^9}, { 3.732515098891602*^9, 3.732515173523673*^9}, {3.732524634605754*^9, 3.732524680692481*^9}, {3.73252471818039*^9, 3.732525052746332*^9}, { 3.7325251072936296`*^9, 3.7325251074424257`*^9}, {3.732525182245288*^9, 3.7325251845685177`*^9}, {3.732862108789407*^9, 3.7328621457653217`*^9}, { 3.732862194134354*^9, 3.732862196029224*^9}, {3.7328840004747562`*^9, 3.732884037929282*^9}, {3.7328841147854013`*^9, 3.732884177616659*^9}, { 3.732884271043117*^9, 3.732884273889221*^9}, {3.73288434654819*^9, 3.7328843709242153`*^9}, {3.732884404772669*^9, 3.732884451810544*^9}, { 3.732884489209744*^9, 3.732884751499596*^9}, {3.732884790063821*^9, 3.732884831466263*^9}, {3.73288486729891*^9, 3.7328848755976973`*^9}, { 3.7328849207091846`*^9, 3.732885068393799*^9}, {3.7328851061642017`*^9, 3.732885156324679*^9}, {3.732885213415235*^9, 3.732885224447394*^9}, { 3.7328852895866537`*^9, 3.7328853134750757`*^9}, {3.732885439690771*^9, 3.7328856382216387`*^9}, {3.7328856737354794`*^9, 3.732885806189312*^9}, { 3.732885839411705*^9, 3.732885849061035*^9}, {3.732885978654728*^9, 3.732886005965591*^9}, {3.73288603984067*^9, 3.7328861512411127`*^9}, { 3.732886294184431*^9, 3.732886297545478*^9}, 3.763972295527755*^9, { 3.763973744604658*^9, 3.7639740498088617`*^9}, {3.763974154461632*^9, 3.763974216579835*^9}, {3.763974286509521*^9, 3.76397428682163*^9}, { 3.763974428103595*^9, 3.763974429429208*^9}, {3.7639744619906607`*^9, 3.76397509678913*^9}, {3.763975238095344*^9, 3.7639752565740767`*^9}, { 3.797230489815453*^9, 3.797230513399293*^9}, {3.797237639877036*^9, 3.797237674307687*^9}, {3.797237852152125*^9, 3.797237863938633*^9}, { 3.797237922525013*^9, 3.797238892250785*^9}, {3.797238958176628*^9, 3.7972389834166718`*^9}, {3.797239201590206*^9, 3.797239204031148*^9}, { 3.832821907175065*^9, 3.832821946091857*^9}},ExpressionUUID->"871b431b-0076-4056-a82a-\ ceb00fa36fbc"] }, Open ]], Cell[CellGroupData[{ Cell["Signature scheme", "Section", CellChangeTimes->{{3.730701391810192*^9, 3.7307014019614162`*^9}, { 3.732259304144038*^9, 3.7322593079905977`*^9}, {3.732514621900153*^9, 3.732514627507069*^9}, {3.732515056380571*^9, 3.732515061331009*^9}, { 3.732515219243328*^9, 3.7325152210509653`*^9}, {3.732862474332458*^9, 3.732862476410837*^9}, {3.7328626596676893`*^9, 3.7328626646346827`*^9}},ExpressionUUID->"ef7dc7c5-eae0-43ac-8629-\ 974f3059df7e"], Cell[TextData[{ StyleBox["\nDefinition ", FontWeight->"Bold"], "The family ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", RowBox[{"(", RowBox[{ "X", ",", " ", "S", ",", " ", "K", ",", "sig", ",", "ver", ",", "u", ",", "U"}], ")"}], "}"}], "\[Theta]"], TraditionalForm]], ExpressionUUID->"079ac48c-681d-45aa-9a24-f2cab8dc4a64"], " is a signature scheme with security parameter \[Eta]=|\[Theta]| where:\n1) \ X is the set of messages\n2) S is the set of signatures\n3) K is the set of \ keys\n4) u: K\[RightArrow] U is a PT publication function u(k) is called the ", StyleBox["public key of k", FontSlant->"Italic"], ".\n5) ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ RowBox[{"{", RowBox[{ SubscriptBox["sig", "k"], ":", RowBox[{"X", "\[RightArrow]", "S"}]}], "}"}], "\[Theta]"], " ", "is", " ", "the", " ", "signing", " ", "function"}], TraditionalForm]], ExpressionUUID->"127300df-c55b-4870-88f8-cc2ab257bf85"], " (might be a random variable)\n6) ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ RowBox[{"{", RowBox[{ SubscriptBox["ver", RowBox[{"u", "(", "k", ")"}]], ":", RowBox[{ RowBox[{"X", "\[Cross]", " ", "S"}], "\[RightArrow]", "2"}]}], "}"}], "\[Theta]"], " ", "is", " ", "the", " ", "verification", " ", "function", " ", "such", " ", "that"}], TraditionalForm]],ExpressionUUID-> "2f8850d5-303a-411c-9845-dd4509259c1e"], "\[LineSeparator]\ti) ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["ver", RowBox[{"u", "(", "k", ")"}]], "(", RowBox[{"x", ",", "s"}], ")"}], "=", RowBox[{ RowBox[{"1", " ", "iff", " ", "s"}], "=", RowBox[{ SubscriptBox["sig", "k"], "(", "x", ")"}]}]}], TraditionalForm]], ExpressionUUID->"876be4f5-ff88-44dd-b171-f6af81a776a0"], " (sometimes s\[Element] ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["Sig", "k"], "(", "x", ")"}], TraditionalForm]], ExpressionUUID->"f47fa18d-4cf9-469e-9f5c-2423a07cdfd1"], " )\n ii) given x and u(k), it is hard to find s such that ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["ver", RowBox[{"u", "(", "k", ")"}]], "(", RowBox[{"x", ",", "s"}], ")"}], TraditionalForm]],ExpressionUUID-> "b2867c51-c410-44f0-9bbb-bbf225951ac6"], "=1\n", StyleBox["7) It should be efficient to sample K as |\[Theta]| grows.\n\n\n", FontColor->RGBColor[1, 0, 0]], StyleBox["Proposition ", FontWeight->"Bold", FontColor->GrayLevel[0]], StyleBox["Let ", FontColor->GrayLevel[0]], Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", RowBox[{"(", RowBox[{ "X", ",", " ", "Y", ",", " ", "K", ",", "e", ",", "d", ",", "u", ",", "U"}], ")"}], "}"}], "\[Theta]"], TraditionalForm]], FontColor->GrayLevel[0],ExpressionUUID-> "97a65958-3195-4e16-a8c9-e888e6453ffd"], StyleBox[" be an asymmetric crypto\n\n", FontColor->GrayLevel[0]], Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["d", "k"], "(", RowBox[{ SubscriptBox["e", RowBox[{"u", "(", "k", ")"}]], "(", "x", ")"}], ")"}], "=", "x"}], TraditionalForm]],ExpressionUUID->"fa19414e-1465-43bd-8871-1dc7bed5d707"], " ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"//", " ", RowBox[{ SubscriptBox["d", "k"], "\[EmptySmallCircle]", " ", SubscriptBox["e", RowBox[{"u", "(", "k", ")"}]]}]}], "=", RowBox[{ SubscriptBox["id", "X"], " ", "the", " ", "decription", " ", "function", " ", "is", " ", "the", " ", "left", " ", "inverse", " ", "of", " ", "the", " ", "encryption"}]}], TraditionalForm]],ExpressionUUID-> "cd8493c6-fcd1-4633-87be-aaf59432641d"], StyleBox["\n\n such that \n", FontColor->GrayLevel[0]], Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["e", RowBox[{"u", "(", "k", ")"}]], "(", RowBox[{ SubscriptBox["d", "k"], "(", "y", ")"}], ")"}], "=", "y"}], TraditionalForm]],ExpressionUUID->"cbb0859b-1a77-4f9b-b179-010945082afd"], " ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"//", " ", RowBox[{ SubscriptBox["e", RowBox[{"u", "(", "k", ")"}]], "\[EmptySmallCircle]", " ", SubscriptBox["d", "k"]}]}], "=", RowBox[{ SubscriptBox["id", "Y"], " ", "the", " ", "decription", " ", "is", " ", "the", " ", StyleBox["right", FontSlant->"Italic"], StyleBox[" ", FontSlant->"Italic"], StyleBox["inverse", FontSlant->"Italic"], StyleBox[" ", FontSlant->"Italic"], StyleBox["of", FontSlant->"Italic"], StyleBox[" ", FontSlant->"Italic"], StyleBox["the", FontSlant->"Italic"], StyleBox[" ", FontSlant->"Italic"], StyleBox["encryption", FontSlant->"Italic"]}]}], TraditionalForm]],ExpressionUUID-> "c61ff016-79a1-4861-918f-b6b97850516c"], "\nthen \n", StyleBox[" ", FontColor->GrayLevel[0]], Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", RowBox[{"(", " ", RowBox[{ "Y", ",", " ", "X", ",", " ", "K", ",", "d", ",", "ver", ",", "u", ",", "U"}], ")"}], "}"}], "\[Theta]"], TraditionalForm]], FontColor->GrayLevel[0],ExpressionUUID-> "129f54aa-f612-4780-9bd0-d3f591bd3262"], " is a signatures scheme where\nver(y,x)=1 iff ", Cell[BoxData[ FormBox[ RowBox[{"y", "=", RowBox[{ SubscriptBox["e", RowBox[{"u", "(", "k", ")"}]], "(", "x", ")"}]}], TraditionalForm]], ExpressionUUID->"bb2533a6-97a9-4f3b-8015-d2141a885937"], ". (verification only uses the public key)\n\n", StyleBox["Exercise: ", FontWeight->"Bold", FontColor->GrayLevel[0]], StyleBox["Show that RSA can be used as signature scheme.\n\nn=pq\nY=", FontColor->GrayLevel[0]], Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "n"], TraditionalForm]], ExpressionUUID->"c9f27d5d-330d-4de0-a554-53a6e706de53"], "\nS=", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "n"], TraditionalForm]], ExpressionUUID->"9d8b51d1-4302-47a3-8440-5ff8a6f8b375"], "\nK={(a,b): ab=1 mod (p-1)(q-1)}\nu(a,b)=a\n", Cell[BoxData[ FormBox[ SubscriptBox["sig", RowBox[{"(", RowBox[{"a", ",", "b"}], ")"}]], TraditionalForm]],ExpressionUUID-> "8b164a4c-3402-42f6-a1c9-80d026327b3a"], "(y)= ", Cell[BoxData[ FormBox[ SuperscriptBox["y", "b"], TraditionalForm]],ExpressionUUID-> "9fbadfb6-bd13-458e-be66-2c936414b145"], " mod n\n", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"ver", "(", RowBox[{"y", ",", "x"}], ")"}], "=", RowBox[{"(", RowBox[{ RowBox[{ SuperscriptBox["x", "a"], " ", "mod", " ", "p"}], "\[Equal]", "y"}], ")"}], " "}], TraditionalForm]],ExpressionUUID-> "682ebb81-b6d6-47a1-a86b-ec1700d5b6a7"], StyleBox["\n\nNote that this has too much information, as the signature \ recovers the full message..\n\nx=dec(y)", FontColor->GrayLevel[0]], "\nx*t= dec(y*enc(t)) So you can generate a lot of valid signatures, \ although most of them and noise" }], "Text", CellChangeTimes->{{3.732862674429185*^9, 3.73286278420261*^9}, { 3.7328628228609333`*^9, 3.732863016146555*^9}, {3.732863071954163*^9, 3.732863275370387*^9}, {3.732875716540165*^9, 3.7328757338519287`*^9}, { 3.732886430719219*^9, 3.732886448600389*^9}, {3.732886626817585*^9, 3.732886860277203*^9}, {3.7328869022801523`*^9, 3.732887038284973*^9}, { 3.763972266889333*^9, 3.76397228445107*^9}, {3.763975699436445*^9, 3.763975711322839*^9}, {3.763975751899642*^9, 3.7639757639601088`*^9}, 3.763975834462408*^9, {3.763975889105061*^9, 3.763975910143014*^9}, { 3.763975957334969*^9, 3.763976035599814*^9}, {3.763976070419478*^9, 3.763976070782531*^9}, {3.763976816157875*^9, 3.763976866874803*^9}, { 3.763976922217317*^9, 3.763976992747137*^9}, {3.763977042742938*^9, 3.763977062574668*^9}, {3.763977108621533*^9, 3.763977261628668*^9}, { 3.763977311807795*^9, 3.7639773612980547`*^9}, {3.7639775367147493`*^9, 3.76397753912608*^9}, 3.7972305380399017`*^9, 3.797230587345462*^9, { 3.797239311031864*^9, 3.7972393429737053`*^9}, {3.797239464647937*^9, 3.797239491468051*^9}, {3.797239555673314*^9, 3.797239595793747*^9}, { 3.797239647152144*^9, 3.797239662253134*^9}, {3.797239721368284*^9, 3.797239926488476*^9}, {3.7972402979160213`*^9, 3.797240340477778*^9}},ExpressionUUID->"38253c17-ba7a-4d5a-ae9c-\ 7dd1442aee5e"] }, Open ]], Cell[CellGroupData[{ Cell["El Gamal (and DSS) signature scheme", "Section", CellChangeTimes->{{3.730701391810192*^9, 3.7307014019614162`*^9}, { 3.732259304144038*^9, 3.7322593079905977`*^9}, {3.732514621900153*^9, 3.732514627507069*^9}, {3.732515056380571*^9, 3.732515061331009*^9}, { 3.732515219243328*^9, 3.7325152210509653`*^9}, {3.732862474332458*^9, 3.732862476410837*^9}, {3.7328626596676893`*^9, 3.7328626646346827`*^9}, { 3.732864378624559*^9, 3.7328643861196127`*^9}, {3.732876168075222*^9, 3.732876169139079*^9}},ExpressionUUID->"92f9b37a-8cf5-4f43-a336-\ 5a2ecbc541dd"], Cell[TextData[{ "Let p be a prime number such that the discrete log is hard and \[Alpha] a \ primitive element\n\np=2q+1, where q is prime and moreover p=1 mod 4\np-1=2q \ all odd number with exception of q are invertible mod p-1\n\n\[Bullet] ", Cell[BoxData[ FormBox[ RowBox[{"X", "=", SubsuperscriptBox["\[DoubleStruckCapitalZ]", "p", "\[Cross]"]}], TraditionalForm]],ExpressionUUID->"b46ab593-61ba-4f9c-878d-704b1cffc934"], "\n\[Bullet] S= ", Cell[BoxData[ FormBox[ SubsuperscriptBox["\[DoubleStruckCapitalZ]", "p", "\[Cross]"], TraditionalForm]],ExpressionUUID->"b2ba07df-a3cd-40b1-b5e9-59b5743b8cf6"], "\[Cross]", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", RowBox[{"p", "-", "1"}]], TraditionalForm]],ExpressionUUID-> "373c8d37-5c6a-4138-8d79-84a0eafeb3e9"], "\n\[Bullet] ", Cell[BoxData[ FormBox[ RowBox[{"K", "=", RowBox[{"{", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"a", ",", "\[Beta]"}], ")"}], ":", "\[Beta]"}], "=", SuperscriptBox["\[Alpha]", "a"]}]}]}], TraditionalForm]],ExpressionUUID-> "d4299a61-947c-41fa-a78b-7a5043b196b5"], "mod p)\n\[Bullet] u(a,\[Beta])=\[Beta] // publication function - public key \ is \[Beta], and private is a the discrete log of \[Beta]\n\[Bullet] ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["sig", "a"], "(", "x", ")"}], TraditionalForm]], ExpressionUUID->"b9535dbb-6870-4856-9926-b493b034bfe9"], "=(\[Gamma],\[Delta]) where\n -", Cell[BoxData[ FormBox[ RowBox[{"\[Gamma]", "=", RowBox[{ SuperscriptBox["\[Alpha]", "k"], " ", "mod", " ", "p"}]}], TraditionalForm]],ExpressionUUID->"51c5d3ee-1d63-442b-9e65-946a35e4b309"], "\n -", Cell[BoxData[ FormBox[ RowBox[{"\[Delta]", "=", RowBox[{ RowBox[{"(", RowBox[{"x", "-", "a\[Gamma]"}], ")"}], SuperscriptBox["k", RowBox[{"-", "1"}]], " ", "mod", " ", RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}]}]}], TraditionalForm]],ExpressionUUID-> "259bf2a2-6bd2-44f1-80d9-96aa9f12fd8f"], "\n for some random k\[Element] ", Cell[BoxData[ FormBox[ SubscriptBox[ SubsuperscriptBox["\[DoubleStruckCapitalZ]", RowBox[{"p", "-", "1"}], "\[Cross]"], OverscriptBox[ SuperscriptBox["", "\.08"], "\.08"]], TraditionalForm]],ExpressionUUID-> "29e4139b-0ba8-48a1-825f-4365dc53e2a9"], "(so gcd(k,p-1)=1) (this means k odd and \[NotEqual] q)\n \[Bullet] ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["ver", "\[Beta]"], "(", RowBox[{"x", ",", StyleBox["\[Gamma]", FontWeight->"Bold"], StyleBox[",", FontWeight->"Bold"], StyleBox["\[Delta]", FontWeight->"Bold"]}], ")"}], "=", RowBox[{ RowBox[{"1", " ", "iff", " ", SuperscriptBox[ OverscriptBox["\[Beta]", "\.08"], "\[Gamma]"], SuperscriptBox["\[Gamma]", "\[Delta]"]}], "=", RowBox[{ SuperscriptBox["\[Alpha]", "x"], "mod", " ", "p"}]}]}], TraditionalForm]],ExpressionUUID->"37d4888f-75a2-4a45-a859-cd148491c616"], "\n \n ", StyleBox["Exercise: ", FontWeight->"Bold", FontColor->GrayLevel[0]], StyleBox["Check the soundness of ElGamal signature scheme!\n \n", FontColor->GrayLevel[0]], Cell[BoxData[ RowBox[{ SuperscriptBox[ OverscriptBox["\[Beta]", "\.08"], "\[Gamma]"], SuperscriptBox["\[Gamma]", "\[Delta]"]}]],ExpressionUUID-> "e19d8c39-075d-4ac3-9aa5-39c6406d507e"], "=", Cell[BoxData[ RowBox[{ RowBox[{ SuperscriptBox[ OverscriptBox["\[Beta]", "\.08"], "\[Gamma]"], SuperscriptBox["\[Gamma]", RowBox[{ RowBox[{"(", RowBox[{"x", "-", "a\[Gamma]"}], ")"}], SuperscriptBox["k", RowBox[{"-", "1"}]]}]]}], "="}]],ExpressionUUID-> "9123c986-f33c-435e-b153-cdeccb4084a1"], Cell[BoxData[ RowBox[{ SuperscriptBox["\[Alpha]", "a\[Gamma]"], SuperscriptBox["\[Alpha]", RowBox[{"k", RowBox[{"(", RowBox[{"x", "-", "a\[Gamma]"}], ")"}], SuperscriptBox["k", RowBox[{"-", "1"}]]}]]}]],ExpressionUUID-> "ddbb2e5e-4c47-4214-a637-6e242039e850"], "=", Cell[BoxData[ RowBox[{ RowBox[{ SuperscriptBox["\[Alpha]", "a\[Gamma]"], SuperscriptBox["\[Alpha]", RowBox[{"(", RowBox[{"x", "-", "a\[Gamma]"}], ")"}]]}], "="}]],ExpressionUUID-> "e9cf67f9-7dd0-4f28-8f9d-44c32ea8e0de"], Cell[BoxData[ RowBox[{ RowBox[{ SuperscriptBox["\[Alpha]", "a\[Gamma]"], SuperscriptBox["\[Alpha]", "x"], SuperscriptBox["\[Alpha]", RowBox[{"-", "a\[Gamma]"}]]}], "=", SuperscriptBox["\[Alpha]", "x"]}]],ExpressionUUID-> "3d3a4005-081c-4508-9b96-728261fc2a4a"], "\n\nIt works\n " }], "Text", CellChangeTimes->{{3.732875638897417*^9, 3.732876056459296*^9}, { 3.732877025675644*^9, 3.732877049298724*^9}, {3.732877121218758*^9, 3.732877265850955*^9}, {3.73287769779539*^9, 3.7328777534235764`*^9}, { 3.732877792838135*^9, 3.732877846262341*^9}, {3.7328778782031183`*^9, 3.7328778820832148`*^9}, {3.732878096563192*^9, 3.732878148315502*^9}, 3.7328782665473003`*^9, {3.732887139456153*^9, 3.732887155685932*^9}, { 3.732887192278283*^9, 3.732887197385984*^9}, {3.732887276156149*^9, 3.732887594707328*^9}, {3.73288764279545*^9, 3.732887876884034*^9}, { 3.732888003804265*^9, 3.732888016736759*^9}, {3.732888070430265*^9, 3.732888072256954*^9}, {3.7328885702856827`*^9, 3.7328885810915747`*^9}, { 3.763972307655723*^9, 3.7639723621451178`*^9}, {3.763977583163698*^9, 3.763977593033146*^9}, {3.763977822978858*^9, 3.763977963483654*^9}, { 3.763977998169456*^9, 3.763978064313994*^9}, {3.7639780983071203`*^9, 3.763978307362884*^9}, {3.763978421049231*^9, 3.763978459606022*^9}, { 3.763978550315091*^9, 3.763978557924543*^9}, {3.7972306007908573`*^9, 3.797230602680943*^9}, {3.797239956611945*^9, 3.797239959030169*^9}, { 3.7972402167526217`*^9, 3.797240216901105*^9}, {3.797240281722961*^9, 3.79724029008568*^9}, {3.797240411239856*^9, 3.79724043206695*^9}, { 3.797240525862273*^9, 3.797240672065216*^9}, {3.797240739698998*^9, 3.797240740132043*^9}, {3.797240802660574*^9, 3.797240825076497*^9}, 3.8328219893034983`*^9},ExpressionUUID->"c343636a-d8dd-4b11-8d4a-\ ce8a402b7c9e"], Cell[CellGroupData[{ Cell["Forging signatures", "Subsubsection", CellChangeTimes->{{3.832821995863823*^9, 3.832822020750663*^9}},ExpressionUUID->"26febc96-93c0-4084-953c-\ 5810f6a92534"], Cell[TextData[{ StyleBox["\n Breaking discrete log \[DoubleRightArrow] signing ElGamal \ obvious...\n \n", FontColor->GrayLevel[0]], StyleBox["Exercise:", FontWeight->"Bold", FontColor->GrayLevel[0]], StyleBox[" Show what happen if, for a given x, one fix \[Gamma] or fix \ \[Delta] and try to finish the signature.\n\n1) Fix x and \[Gamma] and try to \ find \[Delta] such that (x,\[Gamma],\[Delta]) is a signature\n\n", FontColor->GrayLevel[0]], Cell[BoxData[ RowBox[{"Solve", " ", "[", RowBox[{ SuperscriptBox["\[Gamma]", "\[Delta]"], "=", SuperscriptBox["\[Alpha]", "x"]}]}]],ExpressionUUID-> "05ddddd7-3c5c-47e7-8d5d-84f139994f45"], Cell[BoxData[ SuperscriptBox[ OverscriptBox["\[Beta]", "\.08"], RowBox[{"-", "\[Gamma]"}]]],ExpressionUUID-> "4222eda4-cf02-4692-be4a-b98c6e318000"], " mod p,\[Delta]] No one knows, unless computing ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["log", "\[Gamma]"], "("}], TraditionalForm]],ExpressionUUID-> "24f72f59-8665-4d82-977a-7a27ce6108a0"], Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["\[Alpha]", "x"], SuperscriptBox["\[Beta]", RowBox[{"-", "\[Gamma]"}]]}], ")"}], TraditionalForm]],ExpressionUUID-> "19c0ee19-5319-43fa-9e5f-c5a466f54a14"], "\n\n2) ", StyleBox["Fix x and \[Delta] and try to find \[Gamma] such that (x,\[Gamma],\ \[Delta]) is a signature\n\n", FontColor->GrayLevel[0]], Cell[BoxData[ RowBox[{"Solve", " ", "[", RowBox[{ SuperscriptBox["\[Gamma]", "\[Delta]"], "=", SuperscriptBox["\[Alpha]", "x"]}]}]],ExpressionUUID-> "cc7556b9-2b1a-49b6-9d51-1b50e89ec3f8"], Cell[BoxData[ SuperscriptBox[ OverscriptBox["\[Beta]", "\.08"], RowBox[{"-", "\[Gamma]"}]]],ExpressionUUID-> "2878c2fb-8393-4bfa-a335-6af8f7896a3a"], StyleBox[",\[Gamma]] nobody knows as well, but if you can I can make you \ rich\n \n ", FontColor->GrayLevel[0]], Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "a"], "=", RowBox[{"b", " ", SuperscriptBox["\[Beta]", RowBox[{"-", "x"}]], " ", "mod", " ", "p"}]}], TraditionalForm]], ExpressionUUID->"b60b0371-c7f8-4cff-9983-435c9af2a469"], StyleBox["\n \n ", FontColor->GrayLevel[0]], StyleBox["Proposition: ", FontWeight->"Bold", FontColor->GrayLevel[0]], StyleBox[" Let 0\[LessEqual]i,j\[LessEqual]p-2 such that gcd(j,p-1)=1 \ (notice that if p=2q+1 then j is odd and \[NotEqual] q). Then\n\n ", FontColor->GrayLevel[0]], Cell[BoxData[{ FormBox[ RowBox[{"\[Gamma]", "=", RowBox[{ SuperscriptBox["\[Alpha]", "i"], SuperscriptBox["\[Beta]", "j"], " ", "mod", " ", "p"}]}], TraditionalForm], "\[IndentingNewLine]", FormBox[ RowBox[{ RowBox[{"\[Delta]", "=", RowBox[{ RowBox[{ RowBox[{"-", "\[Gamma]"}], " ", SuperscriptBox["j", RowBox[{"-", "1"}]], "mod", " ", "p"}], "-", "1"}]}], " "}], TraditionalForm], "\[IndentingNewLine]", FormBox[ RowBox[{"x", "=", RowBox[{ RowBox[{ RowBox[{"-", "\[Gamma]"}], " ", "i", " ", SuperscriptBox["j", RowBox[{"-", "1"}]], " ", "mod", " ", "p"}], "-", "1"}]}], TraditionalForm]}],ExpressionUUID-> "6eacec07-2fcc-40bf-9588-08f84ad83c25"], StyleBox[" ", FontColor->GrayLevel[0]], StyleBox[" ", FontWeight->"Bold", FontColor->GrayLevel[0]] }], "Text", CellChangeTimes->{{3.732875638897417*^9, 3.732876056459296*^9}, { 3.732877025675644*^9, 3.732877049298724*^9}, {3.732877121218758*^9, 3.732877265850955*^9}, {3.73287769779539*^9, 3.7328777534235764`*^9}, { 3.732877792838135*^9, 3.732877846262341*^9}, {3.7328778782031183`*^9, 3.7328778820832148`*^9}, {3.732878096563192*^9, 3.732878148315502*^9}, 3.7328782665473003`*^9, {3.732887139456153*^9, 3.732887155685932*^9}, { 3.732887192278283*^9, 3.732887197385984*^9}, {3.732887276156149*^9, 3.732887594707328*^9}, {3.73288764279545*^9, 3.732887876884034*^9}, { 3.732888003804265*^9, 3.732888016736759*^9}, {3.732888070430265*^9, 3.732888072256954*^9}, {3.7328885702856827`*^9, 3.7328885810915747`*^9}, { 3.763972307655723*^9, 3.7639723621451178`*^9}, {3.763977583163698*^9, 3.763977593033146*^9}, {3.763977822978858*^9, 3.763977963483654*^9}, { 3.763977998169456*^9, 3.763978064313994*^9}, {3.7639780983071203`*^9, 3.763978307362884*^9}, {3.763978421049231*^9, 3.763978459606022*^9}, { 3.763978550315091*^9, 3.763978557924543*^9}, {3.7972306007908573`*^9, 3.797230602680943*^9}, {3.797239956611945*^9, 3.797239959030169*^9}, { 3.7972402167526217`*^9, 3.797240216901105*^9}, {3.797240281722961*^9, 3.79724029008568*^9}, {3.797240411239856*^9, 3.79724043206695*^9}, { 3.797240525862273*^9, 3.797240672065216*^9}, {3.797240739698998*^9, 3.797240740132043*^9}, {3.797240802660574*^9, 3.797240825076497*^9}},ExpressionUUID->"60be0d85-6471-42fa-8bde-\ a094992c516e"], Cell[TextData[{ "then (x,\[Gamma],\[Delta]) is a valid signature.\n\n", Cell[BoxData[ RowBox[{ SuperscriptBox[ OverscriptBox["\[Beta]", "\.08"], "\[Gamma]"], SuperscriptBox["\[Gamma]", "\[Delta]"]}]],ExpressionUUID-> "58a9ad99-1053-4fde-9eef-b5f8538f21df"], "=", Cell[BoxData[ RowBox[{ RowBox[{ SuperscriptBox[ OverscriptBox["\[Beta]", "\.08"], "\[Gamma]"], SuperscriptBox["\[Gamma]", RowBox[{ RowBox[{"-", "\[Gamma]"}], " ", SuperscriptBox["j", RowBox[{"-", "1"}]]}]]}], "="}]],ExpressionUUID-> "f2204afc-5cc7-4765-9691-3b34db47668d"], Cell[BoxData[ RowBox[{ SuperscriptBox[ OverscriptBox["\[Beta]", "\.08"], "\[Gamma]"], SuperscriptBox[ RowBox[{"(", RowBox[{ SuperscriptBox["\[Alpha]", "i"], SuperscriptBox["\[Beta]", "j"]}], " ", ")"}], RowBox[{ RowBox[{"-", "\[Gamma]"}], " ", SuperscriptBox["j", RowBox[{"-", "1"}]]}]]}]],ExpressionUUID-> "bd5324fb-affd-4382-955c-639d5a83da9d"], "=", Cell[BoxData[ RowBox[{ RowBox[{ SuperscriptBox[ OverscriptBox["\[Beta]", "\.08"], "\[Gamma]"], SuperscriptBox["\[Alpha]", RowBox[{ RowBox[{"-", "\[Gamma]i"}], " ", SuperscriptBox["j", RowBox[{"-", "1"}]]}]], SuperscriptBox["\[Beta]", RowBox[{ RowBox[{"-", "\[Gamma]"}], " ", SuperscriptBox["j", RowBox[{"-", "1"}]], "j"}]]}], "=", RowBox[{ RowBox[{ SuperscriptBox[ OverscriptBox["\[Beta]", "\.08"], "\[Gamma]"], SuperscriptBox["\[Alpha]", RowBox[{ RowBox[{"-", "\[Gamma]i"}], " ", SuperscriptBox["j", RowBox[{"-", "1"}]]}]], SuperscriptBox["\[Beta]", RowBox[{"-", "\[Gamma]", " "}]]}], "="}]}]],ExpressionUUID-> "ed9940fc-0312-45f0-aa95-faf594c7640e"], Cell[BoxData[ SuperscriptBox["\[Alpha]", "x"]],ExpressionUUID-> "c1a491d1-4d54-4606-91cd-a44cd3048a4e"], "\n\nSo we can sign a lot..." }], "Text", CellChangeTimes->{{3.732878135899129*^9, 3.732878138507248*^9}, { 3.732878269450597*^9, 3.732878269618487*^9}, {3.732878365874571*^9, 3.732878380858542*^9}, {3.732888083700576*^9, 3.7328884217679367`*^9}, { 3.732888784617859*^9, 3.732888789291695*^9}, 3.76397236485367*^9, { 3.76397867059621*^9, 3.76397872010331*^9}, {3.763978756471239*^9, 3.7639790435427847`*^9}, {3.7972306260670033`*^9, 3.797230627499981*^9}, { 3.79724094676011*^9, 3.797241091355686*^9}, {3.7972411213836203`*^9, 3.797241130906262*^9}, 3.797241169282834*^9},ExpressionUUID->"d06f28b5-281a-4dae-9690-\ f301ca5dfb96"], Cell[TextData[{ StyleBox["Exercise", FontWeight->"Bold"], ": Show that if", StyleBox[" k is revealed then one can get the discrete log a", FontSlant->"Italic"], " in PT.\n\nIf k is revealed and since we know \[Delta] = ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"x", "-", "a\[Gamma]"}], ")"}], SuperscriptBox["k", RowBox[{"-", "1"}]], " ", "mod", " ", RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}]}], TraditionalForm]],ExpressionUUID-> "121e5b9e-fa39-4a51-bab5-12fdbe1eeb5f"], " and \[Gamma], we obtain a from \[Delta], so we just need to compute a=", Cell[BoxData[ FormBox[ SuperscriptBox["\[Gamma]", RowBox[{"-", "1"}]], TraditionalForm]],ExpressionUUID-> "b451aea3-c266-4aaa-acb7-9ace9f2ffdc6"], "(x-\[Delta] k) mod p-1 (note here that \[Gamma] needs to be invertible) now \ if \[Gamma] is even this might be problem!\n\n\[Gamma] is not invertible it \ means that gcd(p-1,\[Gamma])=d>1 (because we chose p-1=2q), so d=2 or d=q\n\n\ assume d =2 because for the other case is very improbable\n (that is, \ \[Gamma]=2\[Lambda] )\n\nx-k \[Delta] = ", Cell[BoxData[ FormBox[ RowBox[{"a\[Gamma]", " ", "mod", " ", "2", "q"}], TraditionalForm]], ExpressionUUID->"8ef3f779-77c5-416b-8caa-bed04cdc0183"], " it follows x-k \[Delta] = ", Cell[BoxData[ FormBox[ RowBox[{"a\[Gamma]", " ", "mod", " ", "q"}], TraditionalForm]], ExpressionUUID->"4f331fd5-4fdd-4fe1-a6de-69205533c03d"], " and now \[Gamma] is invertible mod q\n\nand you can compute the solution ", Cell[BoxData[ FormBox[ SuperscriptBox["\[Gamma]", RowBox[{"-", "1"}]], TraditionalForm]],ExpressionUUID-> "3930725c-fb08-4600-8db7-c74d4d16d5f7"], "(x-k \[Delta]) = ", Cell[BoxData[ FormBox[ RowBox[{"a", " ", "mod", " ", "q"}], TraditionalForm]],ExpressionUUID-> "bab2ac11-ca3e-490c-84e6-9bdd44015315"], "\n\na=", Cell[BoxData[ FormBox[ SuperscriptBox["\[Gamma]", RowBox[{"-", "1"}]], TraditionalForm]],ExpressionUUID-> "7014be39-436b-4c5c-a105-9514830c3e1b"], "(x-k \[Delta]) or a=q +", Cell[BoxData[ FormBox[ SuperscriptBox["\[Gamma]", RowBox[{"-", "1"}]], TraditionalForm]],ExpressionUUID-> "9115a707-b792-496f-8126-b7333f8aa84c"], "(x-k \[Delta]) mod 2q (and we check which is the correct one!!)\n\n(assume \ p= d\[Cross]q+1, with even d, a=i q +", Cell[BoxData[ FormBox[ SuperscriptBox["\[Gamma]", RowBox[{"-", "1"}]], TraditionalForm]],ExpressionUUID-> "71f96ca3-d0af-4c16-b128-e926ead516ec"], "(x-k \[Delta]) mod d q where i=0...d-1)\n", StyleBox["\nTheorem", FontWeight->"Bold"], "[PS3 hack, putty hack] If k is used twice, then k is revealed up to \ negligible probability.\n\n", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["sig", "a"], "(", "x", ")"}], TraditionalForm]], ExpressionUUID->"66f82d74-5585-4227-ae4e-b1727b6cca8e"], "=(\[Gamma],\[Delta]) where\n -", Cell[BoxData[ FormBox[ RowBox[{"\[Gamma]", "=", RowBox[{ SuperscriptBox["\[Alpha]", "k"], " ", "mod", " ", "p"}]}], TraditionalForm]],ExpressionUUID->"aa749a5f-04e6-4a4a-8b20-70d1b395217a"], "\n -", Cell[BoxData[ FormBox[ RowBox[{"\[Delta]", "=", RowBox[{ RowBox[{"(", RowBox[{"x", "-", "a\[Gamma]"}], ")"}], SuperscriptBox["k", RowBox[{"-", "1"}]], " ", "mod", " ", RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}]}]}], TraditionalForm]],ExpressionUUID-> "60563667-8094-47e2-8563-13c2cfca022e"], "\n\n", StyleBox["Proof: ", FontWeight->"Bold"], "Assume we has two messages ", Cell[BoxData[ FormBox[ SubscriptBox["x", "1"], TraditionalForm]],ExpressionUUID-> "199f480c-ec74-4ef8-af35-d5179e54cd73"], " and ", Cell[BoxData[ FormBox[ SubscriptBox["x", "2"], TraditionalForm]],ExpressionUUID-> "a5f8abaf-e6ad-4c06-8d97-2def7c186b90"], " are signed with the same k, so\nwe\n\n", Cell[BoxData[ FormBox[ RowBox[{"sig", "(", SubscriptBox["x", "1"], ")"}], TraditionalForm]],ExpressionUUID-> "f0fb173c-5751-4ad2-a1cf-f9b7f780bc26"], "=(\[Gamma],", Cell[BoxData[ FormBox[ SubscriptBox["\[Delta]", "1"], TraditionalForm]],ExpressionUUID-> "59ed5701-086a-4c6a-a18d-0b66ebf40cd6"], ") and ", Cell[BoxData[ FormBox[ RowBox[{"sig", "(", SubscriptBox["x", "2"], ")"}], TraditionalForm]],ExpressionUUID-> "cee7a38f-fd78-447f-88c2-aa7aa99f5bb3"], "=(\[Gamma],", Cell[BoxData[ FormBox[ SubscriptBox["\[Delta]", "2"], TraditionalForm]],ExpressionUUID-> "01e10408-086f-4ae8-87ab-3781ac05a249"], ") (see how this is trivial to check!)\n\n(1) ", Cell[BoxData[ RowBox[{ RowBox[{ SuperscriptBox[ OverscriptBox["\[Beta]", "\.08"], "\[Gamma]"], SuperscriptBox["\[Gamma]", SubscriptBox["\[Delta]", "1"]]}], "=", SuperscriptBox["\[Alpha]", SubscriptBox["x", "1"]]}]],ExpressionUUID-> "b61df98f-3a9a-47ba-ade4-704a3c3b5a4d"], " \nand we also have ", Cell[BoxData[ RowBox[{ RowBox[{ SuperscriptBox[ OverscriptBox["\[Beta]", "\.08"], "\[Gamma]"], SuperscriptBox["\[Gamma]", SubscriptBox["\[Delta]", "2"]]}], "=", SuperscriptBox["\[Alpha]", SubscriptBox["x", "2"]]}]],ExpressionUUID-> "4550b6ca-024b-42c4-89af-958df882a805"], " and so \n(2) ", Cell[BoxData[ RowBox[{ RowBox[{ SuperscriptBox[ OverscriptBox["\[Beta]", "\.08"], RowBox[{"-", "\[Gamma]"}]], SuperscriptBox["\[Gamma]", RowBox[{"-", SubscriptBox["\[Delta]", "2"]}]]}], "=", SuperscriptBox["\[Alpha]", RowBox[{"-", SubscriptBox["x", "2"]}]]}]],ExpressionUUID-> "511b005f-35c2-46bc-9650-68d8669ab89d"], " mod p by multiplying (1) with (2)\n\nwe obtain\n\n", Cell[BoxData[ RowBox[{ SuperscriptBox["\[Alpha]", RowBox[{ SubscriptBox["x", "1"], "-", SubscriptBox["x", "2"]}]], "="}]],ExpressionUUID-> "b4e55938-52b4-4592-b329-3fbb3cedbb26"], Cell[BoxData[ SuperscriptBox["\[Gamma]", RowBox[{ SubscriptBox["\[Delta]", "1"], "-", SubscriptBox["\[Delta]", "2"]}]]],ExpressionUUID-> "3fa1a342-fbc2-4fca-9820-eece6c86cbae"], "= ", Cell[BoxData[ RowBox[{ SuperscriptBox["\[Alpha]", RowBox[{"k", RowBox[{"(", RowBox[{ SubscriptBox["\[Delta]", "1"], "-", SubscriptBox["\[Delta]", "2"]}], ")"}]}]], "mod", " ", "p"}]], ExpressionUUID->"a044c4f0-17e5-41aa-9e29-6ac42dc39b54"], " iff ", Cell[BoxData[ RowBox[{ SubscriptBox["x", "1"], "-", SubscriptBox["x", "2"]}]],ExpressionUUID-> "3d5571fb-1f40-4001-b273-0930954f16e4"], "=", Cell[BoxData[ RowBox[{"k", RowBox[{"(", RowBox[{ SubscriptBox["\[Delta]", "1"], "-", SubscriptBox["\[Delta]", "2"]}], ")"}]}]],ExpressionUUID-> "3eadba66-b6c6-498a-ac48-33e11f6e412c"], " mod p-1\n\nso if gcd(", Cell[BoxData[ RowBox[{"(", RowBox[{ SubscriptBox["\[Delta]", "1"], "-", SubscriptBox["\[Delta]", "2"]}], ")"}]],ExpressionUUID-> "45d863ae-c135-46e9-a53b-99ab33a7ebfe"], ", p-1)=1 we are done because we find k=(", Cell[BoxData[ RowBox[{ SubscriptBox["x", "1"], "-", SubscriptBox["x", "2"]}]],ExpressionUUID-> "7ced126a-1f03-46ab-be8f-7b04582b2d5c"], ")", Cell[BoxData[ RowBox[{ RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{ SubscriptBox["\[Delta]", "1"], "-", SubscriptBox["\[Delta]", "2"]}], ")"}], RowBox[{"-", "1"}]], " ", "mod", " ", "p"}], "-", "1"}]],ExpressionUUID-> "78d80447-407c-439c-b6c6-f36d8edec12c"], " and we can now use the exercise above\n\nif gcd(", Cell[BoxData[ RowBox[{"(", RowBox[{ SubscriptBox["\[Delta]", "1"], "-", SubscriptBox["\[Delta]", "2"]}], ")"}]],ExpressionUUID-> "ce2244cc-683d-4637-a0ad-80121f11fbcb"], ", p-1)=2 (since p-1=2q and being equal q is negligible)\n\nBut now (", Cell[BoxData[ RowBox[{ RowBox[{ SubscriptBox["x", "1"], "-", SubscriptBox["x", "2"]}], ")"}]],ExpressionUUID-> "2b510cf9-7705-40a1-8b1a-b29a7a7e0adf"], "=", Cell[BoxData[ RowBox[{"k", RowBox[{"(", RowBox[{ SubscriptBox["\[Delta]", "1"], "-", SubscriptBox["\[Delta]", "2"]}], ")"}]}]],ExpressionUUID-> "d504c8c0-3333-4dfb-b4b3-bd0e9d14b3ea"], " mod q and now ", Cell[BoxData[ RowBox[{ RowBox[{"(", RowBox[{ SubscriptBox["\[Delta]", "1"], "-", SubscriptBox["\[Delta]", "2"]}], ")"}], " ", "is", " ", "coprime", " "}]],ExpressionUUID->"50c7bc96-c012-47a8-aa66-91b13574d151"], "with q and so invertible\n\n (", Cell[BoxData[ RowBox[{ RowBox[{ RowBox[{ SubscriptBox["x", "1"], "-", SubscriptBox["x", "2"]}], ")"}], SuperscriptBox[ RowBox[{"(", RowBox[{ SubscriptBox["\[Delta]", "1"], "-", SubscriptBox["\[Delta]", "2"]}], ")"}], RowBox[{"-", "1"}]]}]],ExpressionUUID-> "f7d89098-bd6d-4d0e-b949-db1bb02318d8"], "=", Cell[BoxData["k"],ExpressionUUID->"0f7cee25-b601-4d2a-874c-deb3150b146c"], " mod q and k might be either\n \nk=(", Cell[BoxData[ RowBox[{ RowBox[{ RowBox[{ SubscriptBox["x", "1"], "-", SubscriptBox["x", "2"]}], ")"}], SuperscriptBox[ RowBox[{"(", RowBox[{ SubscriptBox["\[Delta]", "1"], "-", SubscriptBox["\[Delta]", "2"]}], ")"}], RowBox[{"-", "1"}]]}]],ExpressionUUID-> "b6824d87-a8cf-4d2b-93c8-12cc1baa502d"], "mod p-1 or k=(", Cell[BoxData[ RowBox[{ RowBox[{ RowBox[{ SubscriptBox["x", "1"], "-", SubscriptBox["x", "2"]}], ")"}], SuperscriptBox[ RowBox[{"(", RowBox[{ SubscriptBox["\[Delta]", "1"], "-", SubscriptBox["\[Delta]", "2"]}], ")"}], RowBox[{"-", "1"}]]}]],ExpressionUUID-> "c1488883-ca17-41bb-93bf-af96f2c45a01"], "+q mod p-1 and we are done!\n\n\n\n" }], "Text", CellChangeTimes->{{3.7280583414563026`*^9, 3.728058462580943*^9}, { 3.728193115110723*^9, 3.72819313469374*^9}, {3.728193242458645*^9, 3.728193245001767*^9}, {3.728289410312669*^9, 3.7282894103773327`*^9}, { 3.7288079201168423`*^9, 3.728807925669174*^9}, {3.728807984843732*^9, 3.728807994300358*^9}, {3.72889793260644*^9, 3.7288979352910843`*^9}, { 3.728916481371737*^9, 3.728916482537751*^9}, {3.728916607225511*^9, 3.728916619862644*^9}, {3.7289166896901493`*^9, 3.72891675651685*^9}, { 3.7289167928489637`*^9, 3.728916796747527*^9}, {3.729672147388921*^9, 3.729672166493443*^9}, {3.729863380873126*^9, 3.7298633840918207`*^9}, { 3.73003521129165*^9, 3.730035281728448*^9}, {3.730453428325799*^9, 3.730453440335281*^9}, {3.730710391597732*^9, 3.730710404108861*^9}, { 3.730715241837376*^9, 3.7307152638663*^9}, 3.73165431635573*^9, 3.732259198977976*^9, {3.732259258584063*^9, 3.732259264559121*^9}, { 3.732514528031044*^9, 3.73251456320287*^9}, {3.7328619905825233`*^9, 3.7328619959573317`*^9}, {3.732862029973773*^9, 3.732862091156824*^9}, { 3.732878944100665*^9, 3.732879034459071*^9}, 3.732881459325012*^9, { 3.763979065425102*^9, 3.763979072601803*^9}, {3.7639791035374203`*^9, 3.763979185130471*^9}, {3.7972306494712467`*^9, 3.7972306498595123`*^9}, { 3.7972411820108433`*^9, 3.7972411843896503`*^9}, {3.79724131472013*^9, 3.797241754233049*^9}, {3.7972418261854258`*^9, 3.797241852301091*^9}, { 3.7972418982288103`*^9, 3.79724196354185*^9}, {3.797242024437294*^9, 3.7972420920847588`*^9}, {3.797242122467237*^9, 3.797242224054603*^9}, { 3.7972422692339973`*^9, 3.797242288126244*^9}, {3.797242336958826*^9, 3.797242358730351*^9}, {3.79724240425731*^9, 3.7972424233331127`*^9}, { 3.797242470840211*^9, 3.797242485091696*^9}, {3.797242532963455*^9, 3.797242542942108*^9}, {3.797242576484823*^9, 3.797242604925148*^9}, { 3.797242659691037*^9, 3.797242866437253*^9}, {3.797242910983514*^9, 3.7972430363563967`*^9}, {3.7972430697526627`*^9, 3.797243153110821*^9}, { 3.797243237190036*^9, 3.797243394485269*^9}, {3.797243429396056*^9, 3.797243434889641*^9}},ExpressionUUID->"5903d543-cd00-4455-b7c2-\ b25ac16899dd"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["Other discrete log cases", "Section", CellChangeTimes->{{3.733120103919099*^9, 3.733120122976994*^9}},ExpressionUUID->"917d32b6-aec2-417b-b571-\ 54dbeb67105c"], Cell[TextData[{ "One can ", StyleBox["generalize ElGamal", FontWeight->"Bold"], " as follows.\n\nLet (G,\[Cross]) be a commutative group such that H is a \ cyclic subgroup with order n (|H|=n)and generator \[Alpha]. \n\n\[Bullet] \ X=", Cell[BoxData[ FormBox["G", TraditionalForm]],ExpressionUUID-> "ad1bbb7f-fafa-4a31-9fa8-5e71a7f12c92"], " (plaintext space)\n\[Bullet] Y=H\[Cross]G (ciphertext space)\n\[Bullet] \ K={ (a,\[Beta]) :", Cell[BoxData[ FormBox[ RowBox[{" ", RowBox[{ SuperscriptBox["\[Alpha]", "a"], "=", "\[Beta]", " "}]}], TraditionalForm]],ExpressionUUID->"7a1a84b9-d7c5-4de4-9e57-da6f5d227dbb"], " } \[Subset] ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "n"], TraditionalForm]], ExpressionUUID->"af87ab64-5bca-4ef9-9c5e-6c22bf96fe02"], "\[Cross]H (key space)\n\[Bullet] u:K\[RightArrow]H where u(a,\[Beta])=\ \[Beta] (publication map)\n", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[Bullet]", " ", RowBox[{ SubscriptBox["e", "\[Beta]"], "(", "x", ")"}]}], "=", RowBox[{"(", RowBox[{ SubscriptBox["y", "1"], ",", SubscriptBox["y", "2"]}], ")"}], " "}], TraditionalForm]], ExpressionUUID->"dd44d6bf-7a52-4469-aa15-a6487dd9a1f2"], "with (encryption random map)\n\t-", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["y", "1"], "="}], TraditionalForm]],ExpressionUUID-> "30d04b02-6368-49a6-9aa1-7635082525ee"], Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Alpha]", "k"], ","}], TraditionalForm]],ExpressionUUID-> "84b38231-8a0f-40c4-b75c-5819413ab42b"], "\n\t-", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["y", "2"], "=", "x"}], TraditionalForm]],ExpressionUUID-> "80513417-d0a4-48ba-935e-676a34e31007"], Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Beta]", "k"], " "}], TraditionalForm]],ExpressionUUID-> "5b9becbc-c196-4ab8-a225-2b292410cae1"], "\n\t- and k randomly chosen in ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "n"], TraditionalForm]], ExpressionUUID->"9f5f717f-c42d-49ca-8e85-1ea1dcb3f3ee"], "\n", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[Bullet]", " ", RowBox[{ SubscriptBox["d", RowBox[{"(", RowBox[{"a", ",", "\[Beta]"}], ")"}]], "(", RowBox[{ SubscriptBox["y", "1"], ",", SubscriptBox["y", "2"]}], ")"}]}], "=", SuperscriptBox[ RowBox[{ SubscriptBox["y", "2"], "(", SubsuperscriptBox["y", "1", "a"], ")"}], RowBox[{"-", "1"}]], " "}], TraditionalForm]],ExpressionUUID-> "10557da1-b167-422b-a98e-5f2388ccdc3d"], " (decryption map)", StyleBox["\n\n\nDefinition[Ring of polynomials mod p]", FontWeight->"Bold"], ": Let p be prime, then ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], "[", "x", "]"}], ",", RowBox[{"+", RowBox[{",", "x"}]}]}], ")"}], TraditionalForm]],ExpressionUUID-> "4627ff1a-ddfb-4ff8-98e0-4a68dd2664cf"], " denotes the ring of all polynomials with coefficients in ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], TraditionalForm]], ExpressionUUID->"705abea1-45d3-4757-8c9c-0b3ec78b9b6a"], ". Note that multiplication and summation are defined as usual but mod p." }], "Text", CellChangeTimes->{{3.733120314035529*^9, 3.73312042305156*^9}, { 3.733120462001706*^9, 3.733120517808963*^9}, {3.7331214033614883`*^9, 3.733121662159181*^9}, {3.733121696679447*^9, 3.73312174693554*^9}, { 3.7331311051493263`*^9, 3.733131106276277*^9}, {3.7331311412882853`*^9, 3.7331311443149443`*^9}, {3.733131271609787*^9, 3.733131272336117*^9}},ExpressionUUID->"b33ad63c-0533-4cfe-9611-\ f5eed6032fc4"], Cell[BoxData[{ RowBox[{"Clear", "[", "x", "]"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"x", "^", "2"}], "+", "3"}], ")"}], RowBox[{"(", RowBox[{ RowBox[{"x", "^", "3"}], "+", RowBox[{"3", "x"}], "+", "5"}], ")"}]}]}], "Input", CellChangeTimes->{{3.733131483497756*^9, 3.7331314871245623`*^9}},ExpressionUUID->"ceff9bb0-4226-4049-abe0-\ fda4f30fc0b0"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"Expand", "[", RowBox[{ RowBox[{"(", RowBox[{"3", "+", SuperscriptBox["x", "2"]}], ")"}], " ", RowBox[{"(", RowBox[{"5", "+", RowBox[{"3", " ", "x"}], "+", SuperscriptBox["x", "3"]}], ")"}]}], "]"}]], "Input", CellChangeTimes->{{3.7331314915082197`*^9, 3.7331314964892187`*^9}},ExpressionUUID->"cd1b70f8-7eb5-41c2-a81c-\ 02f534409d11"], Cell[BoxData[ RowBox[{"15", "+", RowBox[{"9", " ", "x"}], "+", RowBox[{"5", " ", SuperscriptBox["x", "2"]}], "+", RowBox[{"6", " ", SuperscriptBox["x", "3"]}], "+", SuperscriptBox["x", "5"]}]], "Output", CellChangeTimes->{ 3.733131496727309*^9},ExpressionUUID->"d5b770fe-07f7-46c1-a1ec-\ 15103fbbed1e"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"PolynomialMod", "[", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"x", "^", "2"}], ")"}], RowBox[{"(", RowBox[{ RowBox[{"x", "^", "3"}], "+", "2"}], ")"}]}], ",", "3"}], "]"}]], "Input", CellChangeTimes->{{3.733120520898446*^9, 3.733120521088891*^9}, { 3.7331205571616793`*^9, 3.73312058381777*^9}, {3.733131532546183*^9, 3.733131538718961*^9}},ExpressionUUID->"17d2a008-069a-4854-aa40-\ 20e89f5a1dc6"], Cell[BoxData[ RowBox[{ RowBox[{"2", " ", SuperscriptBox["x", "2"]}], "+", SuperscriptBox["x", "5"]}]], "Output", CellChangeTimes->{{3.7331205794434643`*^9, 3.733120584326454*^9}, { 3.733131510996111*^9, 3.733131539415629*^9}},ExpressionUUID->"4f441733-0c67-43f5-b445-\ da8c45f5f861"] }, Open ]], Cell[TextData[{ "Note that if p is a prime, it is always possible to divide a polynomial \ D(x) by another polynomial d(x) such that\n\nD(x)=d(x)q(x)+r(x) (for integer \ D=d q+r)\n\nand the degree of r(x) < degree of d(x).\n\n", Cell[BoxData[ FormBox[ SuperscriptBox["x", "2"], TraditionalForm]],ExpressionUUID-> "abe8310e-e657-4149-a282-36d136b8d004"], "+1 =2x*2x+1 this means that ", Cell[BoxData[ FormBox[ SuperscriptBox["x", "2"], TraditionalForm]],ExpressionUUID-> "dfb92c42-792f-4fcb-b80e-1d2d7d9c449e"], "+1 \[Divide]2x=2x=q(x) with remainder r(x)= 1 mod 3\n\n\n", Cell[BoxData[ FormBox[ SuperscriptBox["x", "2"], TraditionalForm]],ExpressionUUID-> "7e770d83-fbd3-4cba-a1b9-256e98a75af1"], "+1 \[Divide] 2x we cannot define this division mod 4\n(Why do we need p to \ be prime?) ", Cell[BoxData[ FormBox[ SuperscriptBox["x", "2"], TraditionalForm]],ExpressionUUID-> "d45bfbea-9b99-420f-9463-3ff0ea694803"], "\[Divide] 2x mod 4" }], "Text", CellChangeTimes->{{3.733120617895781*^9, 3.733120781856224*^9}, { 3.733120860416151*^9, 3.733120889408448*^9}, {3.733120996542028*^9, 3.733121011280212*^9}, {3.733131608453396*^9, 3.7331317095959263`*^9}, { 3.733131761272195*^9, 3.7331318308010807`*^9}, {3.733131990947528*^9, 3.7331320081130943`*^9}},ExpressionUUID->"61a2efba-ace3-4bfa-bc6a-\ cb2b1027a8ea"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"PolynomialQuotient", "[", RowBox[{ RowBox[{"x", "^", "2"}], ",", RowBox[{"2", "x"}], ",", "x", ",", RowBox[{"Modulus", "\[Rule]", "5"}]}], "]"}]], "Input", CellChangeTimes->{{3.733120891569666*^9, 3.7331209049924297`*^9}, { 3.7331319010920973`*^9, 3.73313192765353*^9}},ExpressionUUID->"471c7e2e-8eaf-4c59-a2de-\ 4e09475d0533"], Cell[BoxData[ RowBox[{"3", " ", "x"}]], "Output", CellChangeTimes->{{3.73312090017704*^9, 3.733120905308152*^9}, 3.733131873098991*^9, {3.733131904696906*^9, 3.7331319284566*^9}},ExpressionUUID->"f051f1e1-9d2f-4bf3-9d5f-\ 54fa916dccd7"] }, Open ]], Cell[BoxData[ RowBox[{"PolynomialRemainder", "[", RowBox[{ RowBox[{ RowBox[{"x", "^", "3"}], "+", RowBox[{"x", "^", "2"}]}], ",", RowBox[{ RowBox[{"2", RowBox[{"x", "^", "2"}]}], "+", "2"}], ",", "x", ",", RowBox[{"Modulus", "\[Rule]", "5"}]}], "]"}]], "Input",ExpressionUUID->\ "3638883f-9f12-4164-bc59-b362e2b6efd8"], Cell[TextData[{ "Now we can also reduce a polynomial modulo another polynomial \n\n", StyleBox["Definition[Ring of polynomials mod q(x) and p]", FontWeight->"Bold"], ": Let p be prime and q(x) a polynomial in ", Cell[BoxData[ FormBox[ RowBox[{" ", RowBox[{ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], "[", "x", "]"}]}], TraditionalForm]],ExpressionUUID->"f1c1dae3-255a-43f2-88d6-be16059d8c50"], " , then ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{ RowBox[{ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], "[", "x", "]"}], "/", RowBox[{"q", "[", "x", "]"}]}], ",", RowBox[{"+", RowBox[{",", "x"}]}]}], ")"}], TraditionalForm]],ExpressionUUID-> "84bf2b55-b13a-4784-bf97-3962f41079be"], " denotes the ring of all polynomials with coefficients in ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], " ", "modulo", " ", RowBox[{"q", "(", "x", ")"}]}], TraditionalForm]],ExpressionUUID-> "0b96562b-2de9-471d-8bd3-4009c3770102"], ". Note that multiplication and summation are defined as usual but mod \ q(x)." }], "Text", CellChangeTimes->{{3.733121047524539*^9, 3.733121145660638*^9}, { 3.733121967791053*^9, 3.7331219744653893`*^9}, {3.733122026391024*^9, 3.733122043102907*^9}, {3.7331320350351763`*^9, 3.733132035135427*^9}},ExpressionUUID->"6f466fbc-aa95-43a9-96b6-\ c280b26cbb6f"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"\[IndentingNewLine]", RowBox[{"PolynomialRemainder", "[", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"x", "^", "3"}], "+", RowBox[{"x", "^", "2"}]}], ")"}], "*", RowBox[{"(", RowBox[{ RowBox[{"2", RowBox[{"x", "^", "3"}]}], "+", "1"}], ")"}]}], ",", RowBox[{ RowBox[{"2", RowBox[{"x", "^", "4"}]}], "+", "2"}], ",", "x", ",", RowBox[{"Modulus", "\[Rule]", "5"}]}], "]"}]}]], "Input", CellChangeTimes->{{3.733132069387361*^9, 3.733132115012497*^9}, { 3.7331321576968193`*^9, 3.733132166247953*^9}},ExpressionUUID->"fb546f4b-e4a1-44c5-9551-\ 588c978ffad7"], Cell[BoxData[ RowBox[{ RowBox[{"3", " ", "x"}], "+", RowBox[{"4", " ", SuperscriptBox["x", "2"]}], "+", SuperscriptBox["x", "3"]}]], "Output", CellChangeTimes->{{3.733132158171672*^9, 3.7331321667287073`*^9}},ExpressionUUID->"814fb62c-542d-4ce8-868a-\ 8a134ff51bb9"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"Expand", "[", RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"x", "^", "3"}], "+", RowBox[{"x", "^", "2"}]}], ")"}], "*", RowBox[{"(", RowBox[{ RowBox[{"2", RowBox[{"x", "^", "3"}]}], "+", "1"}], ")"}]}], "]"}]], "Input", CellChangeTimes->{{3.733132123237596*^9, 3.7331321311428137`*^9}},ExpressionUUID->"6cdd99d5-335e-4d4a-ab78-\ 6a30832e1d4f"], Cell[BoxData[ RowBox[{ SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "3"], "+", RowBox[{"2", " ", SuperscriptBox["x", "5"]}], "+", RowBox[{"2", " ", SuperscriptBox["x", "6"]}]}]], "Output", CellChangeTimes->{{3.7331320993596697`*^9, 3.733132131481001*^9}},ExpressionUUID->"04944b9f-2b8d-4654-a246-\ 056beb2ea09a"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"PolynomialRemainder", "[", RowBox[{ RowBox[{ RowBox[{"x", "^", "3"}], "+", RowBox[{"x", "^", "2"}]}], ",", RowBox[{ RowBox[{"2", RowBox[{"x", "^", "3"}]}], "+", "2"}], ",", "x", ",", RowBox[{"Modulus", "\[Rule]", "5"}]}], "]"}]], "Input", CellChangeTimes->{{3.733121180129013*^9, 3.733121233487772*^9}, { 3.733121847767314*^9, 3.733121855287109*^9}, {3.733132153729738*^9, 3.7331321542911463`*^9}},ExpressionUUID->"47f4dd75-e1e1-46dc-93f2-\ 02c29915f19e"], Cell[BoxData[ RowBox[{"4", "+", RowBox[{"4", " ", "x"}]}]], "Output", CellChangeTimes->{{3.733121192523843*^9, 3.733121233931389*^9}, { 3.733121848053135*^9, 3.7331218556937037`*^9}},ExpressionUUID->"91164dc5-1129-4046-8d97-\ 7c8ccdea8284"] }, Open ]], Cell["\<\ so, d(x) | q(x) iff q(x)=0 mod d(x) and so we can also define GCD between \ polynomials q(x) and t(x)! q(x)=r(x) mod d(x) iff q(x)-r(x)=0 mod d(x)\ \>", "Text", CellChangeTimes->{{3.733121265724078*^9, 3.733121268104796*^9}, { 3.733121757110973*^9, 3.7331218126496983`*^9}, {3.7331218676871157`*^9, 3.733121868118869*^9}, {3.733121906471732*^9, 3.733122017454749*^9}, { 3.733122048014641*^9, 3.73312207387097*^9}, {3.733132198108362*^9, 3.733132215976582*^9}},ExpressionUUID->"8ddcdfa6-ebc2-46d1-9974-\ 7e9013b6d69c"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"PolynomialGCD", "[", RowBox[{ RowBox[{ RowBox[{"x", "^", "3"}], "+", RowBox[{"3", RowBox[{"x", "^", "2"}]}]}], ",", RowBox[{ RowBox[{"2", RowBox[{"x", "^", "2"}]}], "+", "2"}], ",", RowBox[{"Modulus", "\[Rule]", "5"}]}], "]"}]], "Input", CellChangeTimes->{{3.733122081769479*^9, 3.733122152383008*^9}, { 3.733122249432116*^9, 3.7331222495987167`*^9}},ExpressionUUID->"de180903-eed0-4f93-9620-\ 2a1af56ca390"], Cell[BoxData[ RowBox[{"3", "+", "x"}]], "Output", CellChangeTimes->{{3.733122097790979*^9, 3.733122152743548*^9}, 3.7331222173727093`*^9, 3.73312224987514*^9, 3.733132257194812*^9},ExpressionUUID->"7a020483-23e9-4181-8715-\ 19f94d87f44a"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"Factor", "[", RowBox[{ RowBox[{ RowBox[{"x", "^", "3"}], "+", RowBox[{"3", RowBox[{"x", "^", "2"}]}]}], ",", RowBox[{"Modulus", "\[Rule]", "5"}]}], "]"}]], "Input", CellChangeTimes->{{3.733122187466498*^9, 3.733122204119151*^9}},ExpressionUUID->"0b413141-9052-4386-bab4-\ 0b2c8da071ff"], Cell[BoxData[ RowBox[{ SuperscriptBox["x", "2"], " ", RowBox[{"(", RowBox[{"3", "+", "x"}], ")"}]}]], "Output", CellChangeTimes->{{3.733122199541238*^9, 3.7331222046087637`*^9}, 3.733132261024952*^9},ExpressionUUID->"1535610b-5abf-48dc-a1fe-\ cf74d8e1987d"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"Factor", "[", RowBox[{ RowBox[{ RowBox[{"2", RowBox[{"x", "^", "2"}]}], "+", "2"}], ",", RowBox[{"Modulus", "\[Rule]", "5"}]}], "]"}]], "Input", CellChangeTimes->{{3.733121819818983*^9, 3.733121843951489*^9}},ExpressionUUID->"a026b677-5c8e-4caa-8a97-\ dc97148c280b"], Cell[BoxData[ RowBox[{"2", " ", RowBox[{"(", RowBox[{"2", "+", "x"}], ")"}], " ", RowBox[{"(", RowBox[{"3", "+", "x"}], ")"}]}]], "Output", CellChangeTimes->{{3.7331218301158323`*^9, 3.733121844234212*^9}, 3.73312221366336*^9},ExpressionUUID->"28a04f7f-4b06-4461-be00-\ 5ab036071dc9"] }, Open ]], Cell["", "Text", CellChangeTimes->{{3.733121265724078*^9, 3.733121268104796*^9}, { 3.733121757110973*^9, 3.7331218126496983`*^9}, {3.7331218676871157`*^9, 3.733121868118869*^9}, {3.733121906471732*^9, 3.733122017454749*^9}, { 3.733122048014641*^9, 3.733122069638522*^9}, {3.73312226868738*^9, 3.7331225521344557`*^9}, {3.733122588046359*^9, 3.733122885190557*^9}, 3.733122955723157*^9},ExpressionUUID->"682ba761-6f38-49d6-a1f4-\ 03adff6e9623"], Cell[TextData[{ "Note that we can represent the elements of ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], "[", "x", "]"}], "/", RowBox[{"q", "[", "x", "]"}]}], TraditionalForm]],ExpressionUUID-> "6a7fa895-3653-46f6-8285-7d45dd0ff548"], " as a list of coefficients in ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], TraditionalForm]], ExpressionUUID->"40ffdfa7-edd7-4b5e-9669-b0a070bdaf78"], " with length degree of q(x)." }], "Text", CellChangeTimes->{{3.733121265724078*^9, 3.733121268104796*^9}, { 3.733121757110973*^9, 3.7331218126496983`*^9}, {3.7331218676871157`*^9, 3.733121868118869*^9}, {3.733121906471732*^9, 3.733122017454749*^9}, { 3.733122048014641*^9, 3.733122069638522*^9}, {3.73312226868738*^9, 3.7331225521344557`*^9}, {3.733122588046359*^9, 3.733122885190557*^9}},ExpressionUUID->"d5c21e81-d7a5-4e37-b324-\ 4f36db3479df"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"PolynomialGCD", "[", RowBox[{ RowBox[{ SuperscriptBox["x", "2"], "+", "x", "+", "1"}], ",", RowBox[{"(", RowBox[{"1", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "4"], "+", SuperscriptBox["x", "5"], "+", SuperscriptBox["x", "8"], "+", SuperscriptBox["x", "10"], "+", SuperscriptBox["x", "11"], "+", SuperscriptBox["x", "12"]}], ")"}], ",", RowBox[{"Modulus", "\[Rule]", "2"}]}], "]"}]], "Input", CellChangeTimes->{{3.733122961086907*^9, 3.733122978558874*^9}, { 3.733132401121273*^9, 3.733132476676321*^9}, {3.7331325089793873`*^9, 3.733132539417407*^9}, {3.733132886563809*^9, 3.733132906715918*^9}},ExpressionUUID->"4547e3b0-fb9f-4ba8-941a-\ cc5f132cfa70"], Cell[BoxData["1"], "Output", CellChangeTimes->{ 3.73313253983258*^9, 3.733132701187479*^9, {3.73313289301443*^9, 3.733132907501936*^9}},ExpressionUUID->"99bce78b-53fc-4f2c-b65b-\ e25d9553f206"] }, Open ]], Cell[BoxData[ RowBox[{"1", "=", RowBox[{ RowBox[{"p", RowBox[{"(", "x", ")"}], RowBox[{"(", RowBox[{ SuperscriptBox["x", "2"], "+", "x", "+", "1"}], ")"}]}], "+", RowBox[{"q", RowBox[{"(", "x", ")"}], RowBox[{"(", RowBox[{"1", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "4"], "+", SuperscriptBox["x", "5"], "+", SuperscriptBox["x", "8"], "+", SuperscriptBox["x", "10"], "+", SuperscriptBox["x", "11"], "+", SuperscriptBox["x", "12"]}], ")"}]}]}]}]], "Input", CellChangeTimes->{{3.733133010218843*^9, 3.733133028142077*^9}},ExpressionUUID->"01746cd5-1abf-400d-9118-\ 8a4686436ad6"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"Factor", "[", RowBox[{ RowBox[{"(", RowBox[{"1", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "4"], "+", SuperscriptBox["x", "5"], "+", SuperscriptBox["x", "8"], "+", SuperscriptBox["x", "10"], "+", SuperscriptBox["x", "11"], "+", SuperscriptBox["x", "12"]}], ")"}], ",", RowBox[{"Modulus", "\[Rule]", "2"}]}], "]"}]], "Input", CellChangeTimes->{{3.7331324282338667`*^9, 3.7331324331753902`*^9}, { 3.733132737344512*^9, 3.7331327699911947`*^9}},ExpressionUUID->"d18069dd-3630-4998-9327-\ 45ec7bb031da"], Cell[BoxData[ RowBox[{"1", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "4"], "+", SuperscriptBox["x", "5"], "+", SuperscriptBox["x", "8"], "+", SuperscriptBox["x", "10"], "+", SuperscriptBox["x", "11"], "+", SuperscriptBox["x", "12"]}]], "Output", CellChangeTimes->{{3.733122971735834*^9, 3.733122978897314*^9}, 3.73313229848101*^9, {3.733132402589245*^9, 3.7331324220745153`*^9}, { 3.733132745455439*^9, 3.7331327707206*^9}},ExpressionUUID->"e2ffa9f0-3674-47d3-95c5-\ fa71acc2c16a"] }, Open ]], Cell[TextData[{ "This representation is particularly relevant when p=2, as in this case this \ list can be represented as a bit string!\n\nIf a polynomial cannot be \ factored, then it is said to be irreducible\n\n", StyleBox["Definition: ", FontWeight->"Bold"], "An element q(x) with degree d in ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], "[", "x", "]"}], TraditionalForm]],ExpressionUUID->"5d9469f8-e152-4762-9fb1-045eec6f7d8f"], " is said to be ", StyleBox["irreducible", FontSlant->"Italic"], " if there is no polynomial d(x) with degree between [1,d-1] such that \ d(x)|t(x) mod p. In other words, t(x) cannot be factored properly in \ polynomials with smaller degree. \n\nWhich elements in ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], "[", "x", "]"}], "/", RowBox[{"q", "(", "x", ")"}]}], TraditionalForm]],ExpressionUUID-> "3d667f93-45a2-4955-a00c-59ee03c84ef6"], " are invertible? Similarly to the case of ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "n"], TraditionalForm]], ExpressionUUID->"4a5b250b-7362-4e9b-97fa-e01022709963"], ", we have\n\n", StyleBox["Theorem: ", FontWeight->"Bold"], " An element t(x) in ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], "[", "x", "]"}], "/", RowBox[{"q", "(", "x", ")"}]}], TraditionalForm]],ExpressionUUID-> "57ccb1a5-6a9a-47fc-b7f5-aa09c3950c36"], " is invertible iff gcd(q(x),t(x))=1 mod p. Moreover, if q(x) is irreducible \ all elements in ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], "[", "x", "]"}], "/", RowBox[{"q", "(", "x", ")"}]}], TraditionalForm]],ExpressionUUID-> "03999add-6063-43eb-a22e-6a0e84c58f77"], " are invertible with exception of 0 (and therefore form a field).\n\nFor \ each prime p and k, there is always an irreducible polynomial of degree k.\n\ \n\nImpressively, Galois [22 years old] showed the following result:\n\n", StyleBox["Theorem[Galois]: ", FontWeight->"Bold"], " If (F,+,\[Cross]) is a finite field, then |F|=", Cell[BoxData[ FormBox[ SuperscriptBox["p", "k"], TraditionalForm]],ExpressionUUID-> "b7a1faa2-6574-4e5b-bffb-8b096ba854a0"], " for some prime p and positive integer k and moreover F is isomorphic to ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], "[", "x", "]"}], "/", RowBox[{"q", "(", "x", ")"}]}], TraditionalForm]],ExpressionUUID-> "ea0c691b-fddd-4f57-b1fb-d0a7f1fc231b"], " for an irreducible polynomial q(x) of degree k.\n\nAs corollary one can \ use (F,\[Cross]) as the group for the ElGamal elements;\n\n", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", SuperscriptBox["p", "k"], ")"}], TraditionalForm]],ExpressionUUID-> "f66d8f3e-84bf-4777-b818-1bd3ee7c7054"], " in computer science and crypto ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", SuperscriptBox["2", "k"], ")"}], TraditionalForm]],ExpressionUUID-> "0eea4aac-2215-4aea-92ff-024238d4362d"], " \n\[LineSeparator]", StyleBox["Exercise: ", FontWeight->"Bold"], "Implement the ElGamal for the multiplicative group of a Galois Field.\n\n\ Let (G,\[Cross]) be a commutative group such that H is a cyclic subgroup with \ order n (|H|=n)and generator \[Alpha]. \n\n\[Bullet] X=", Cell[BoxData[ FormBox["G", TraditionalForm]],ExpressionUUID-> "db665ab8-25df-4e29-bbb7-b4a292c14cf6"], " (plaintext space)\n\[Bullet] Y=H\[Cross]G (ciphertext space)\n\[Bullet] \ K={ (a,\[Beta]) :", Cell[BoxData[ FormBox[ RowBox[{" ", RowBox[{ SuperscriptBox["\[Alpha]", "a"], "=", "\[Beta]", " "}]}], TraditionalForm]],ExpressionUUID->"4957fc9f-a22b-46a3-b362-f0f65542fd34"], " } \[Subset] ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "n"], TraditionalForm]], ExpressionUUID->"86e155bf-440a-414b-ac01-21497a025038"], "\[Cross]H (key space)\n\[Bullet] u:K\[RightArrow]H where u(a,\[Beta])=\ \[Beta] (publication map)\n", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[Bullet]", " ", RowBox[{ SubscriptBox["e", "\[Beta]"], "(", "x", ")"}]}], "=", RowBox[{"(", RowBox[{ SubscriptBox["y", "1"], ",", SubscriptBox["y", "2"]}], ")"}], " "}], TraditionalForm]], ExpressionUUID->"bcd35fc0-382e-4f0a-bf7f-88d3e19d2d9b"], "with (encryption random map)\n\t-", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["y", "1"], "="}], TraditionalForm]],ExpressionUUID-> "5203743a-5b3b-4a50-94c1-91bfec6e615c"], Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Alpha]", "k"], ","}], TraditionalForm]],ExpressionUUID-> "2747043d-dc2a-4963-afa3-08d1ebef149a"], "\n\t-", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["y", "2"], "=", "x"}], TraditionalForm]],ExpressionUUID-> "a4a5360f-a7db-4150-bd51-c54921eec1db"], Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Beta]", "k"], " "}], TraditionalForm]],ExpressionUUID-> "1f5692c6-1f08-42f5-b970-937208907eb0"], "\n\t- and k randomly chosen in ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "n"], TraditionalForm]], ExpressionUUID->"e53ecdb1-3ca0-4433-bdbf-8e7458ab5ac3"], "\n", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[Bullet]", " ", RowBox[{ SubscriptBox["d", RowBox[{"(", RowBox[{"a", ",", "\[Beta]"}], ")"}]], "(", RowBox[{ SubscriptBox["y", "1"], ",", SubscriptBox["y", "2"]}], ")"}]}], "=", SuperscriptBox[ RowBox[{ SubscriptBox["y", "2"], "(", SubsuperscriptBox["y", "1", "a"], ")"}], RowBox[{"-", "1"}]], " "}], TraditionalForm]],ExpressionUUID-> "97f8d150-1fec-4ec2-95c4-3c550db7e793"], " (decryption map)\n" }], "Text", CellChangeTimes->{{3.733121265724078*^9, 3.733121268104796*^9}, { 3.733121757110973*^9, 3.7331218126496983`*^9}, {3.7331218676871157`*^9, 3.733121868118869*^9}, {3.733121906471732*^9, 3.733122017454749*^9}, { 3.733122048014641*^9, 3.733122069638522*^9}, {3.73312226868738*^9, 3.7331225521344557`*^9}, {3.733122588046359*^9, 3.733122885190557*^9}, { 3.7331230273832083`*^9, 3.7331232024625387`*^9}, {3.7331235435267143`*^9, 3.733123563901602*^9}, {3.733123831549487*^9, 3.733123859229739*^9}, { 3.733123971638166*^9, 3.733124012309598*^9}, {3.733133068057826*^9, 3.733133073537262*^9}, {3.7331333607437773`*^9, 3.733133362094473*^9}, { 3.733133463536749*^9, 3.7331335262801523`*^9}, {3.733135000600645*^9, 3.733135003602064*^9}},ExpressionUUID->"c62f35e0-6230-41c9-aa6c-\ 7ed8b75ba6e7"], Cell[BoxData[ RowBox[{"<<", "FiniteFields`"}]], "Input", CellChangeTimes->{{3.733120145235265*^9, 3.733120156801218*^9}},ExpressionUUID->"60e662b0-1814-432f-acf8-\ f2fe2fed9659"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"GF", "[", RowBox[{"2", ",", "8"}], "]"}]], "Input", CellChangeTimes->{{3.7331201267019873`*^9, 3.733120129041299*^9}, { 3.733120247217403*^9, 3.7331202500732527`*^9}, {3.733123865853733*^9, 3.733123867173575*^9}, {3.733133539662097*^9, 3.733133540758505*^9}, { 3.7331344961897783`*^9, 3.7331345259213247`*^9}, 3.733134969124951*^9},ExpressionUUID->"6b4060c0-f7f3-4896-94ed-\ 1c0ef2fb2e0e"], Cell[BoxData[ RowBox[{"GF", "[", RowBox[{"2", ",", RowBox[{"{", RowBox[{ "1", ",", "0", ",", "1", ",", "1", ",", "0", ",", "0", ",", "1", ",", "0", ",", "1"}], "}"}]}], "]"}]], "Output", CellChangeTimes->{{3.733134516428647*^9, 3.733134526608371*^9}, 3.733134969966136*^9},ExpressionUUID->"1dedb252-7215-44ea-a7e1-\ 3876df23dcce"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{ RowBox[{ RowBox[{"GF", "[", RowBox[{"2", ",", RowBox[{"{", RowBox[{ "1", ",", "0", ",", "1", ",", "1", ",", "0", ",", "0", ",", "1", ",", "0", ",", "1"}], "}"}]}], "]"}], "[", RowBox[{"{", RowBox[{"1", ",", "1", ",", "0", ",", "0", ",", "1", ",", "1"}], "}"}], "]"}], "*", RowBox[{ RowBox[{"GF", "[", RowBox[{"2", ",", RowBox[{"{", RowBox[{ "1", ",", "0", ",", "1", ",", "1", ",", "0", ",", "0", ",", "1", ",", "0", ",", "1"}], "}"}]}], "]"}], "[", RowBox[{"{", RowBox[{"1", ",", "1", ",", "0", ",", "0", ",", "1", ",", "1"}], "}"}], "]"}]}]], "Input", CellChangeTimes->{{3.733134177822049*^9, 3.733134181860087*^9}},ExpressionUUID->"2386c596-e5af-4a3d-ade5-\ 7c09d831d80b"], Cell[BoxData[ SubscriptBox[ RowBox[{"{", RowBox[{ "1", ",", "0", ",", "0", ",", "0", ",", "1", ",", "1", ",", "0", ",", "0"}], "}"}], "2"]], "Output", CellChangeTimes->{{3.7331341789828033`*^9, 3.733134182350277*^9}},ExpressionUUID->"172dab8e-3913-45ba-ac83-\ cfc4ed63b465"] }, Open ]], Cell[BoxData[ RowBox[{"Length", "[", RowBox[{"Union", "[", RowBox[{"Table", "[", RowBox[{ RowBox[{ RowBox[{ RowBox[{"GF", "[", RowBox[{"2", ",", RowBox[{"{", RowBox[{ "1", ",", "0", ",", "1", ",", "1", ",", "0", ",", "0", ",", "1", ",", "0", ",", "1"}], "}"}]}], "]"}], "[", RowBox[{"{", RowBox[{"1", ",", "1", ",", "0", ",", "0", ",", "1", ",", "1"}], "}"}], "]"}], "^", "i"}], ",", RowBox[{"{", RowBox[{"i", ",", "0", ",", "255"}], "}"}]}], "]"}], "]"}], "]"}]], "Input", CellChangeTimes->{{3.7331336687483187`*^9, 3.733133707616982*^9}, { 3.733133795708666*^9, 3.7331338429443407`*^9}},ExpressionUUID->"7c678795-43b6-4364-baa2-\ be88fd0e2b8b"], Cell[BoxData[ RowBox[{ RowBox[{"H", " ", "=", RowBox[{"Table", "[", RowBox[{ RowBox[{ RowBox[{ RowBox[{"GF", "[", RowBox[{"2", ",", RowBox[{"{", RowBox[{ "1", ",", "0", ",", "1", ",", "1", ",", "0", ",", "0", ",", "1", ",", "0", ",", "1"}], "}"}]}], "]"}], "[", RowBox[{"{", RowBox[{"1", ",", "1", ",", "0", ",", "0", ",", "1", ",", "1"}], "}"}], "]"}], "^", "i"}], ",", RowBox[{"{", RowBox[{"i", ",", "0", ",", "51"}], "}"}]}], "]"}]}], ";"}]], "Input", CellChangeTimes->{{3.733133864296359*^9, 3.733133901102231*^9}},ExpressionUUID->"0412c9f3-8cca-4bce-b991-\ 984c0545d284"], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{"\[Alpha]", "=", RowBox[{ RowBox[{"GF", "[", RowBox[{"2", ",", RowBox[{"{", RowBox[{ "1", ",", "0", ",", "1", ",", "1", ",", "0", ",", "0", ",", "1", ",", "0", ",", "1"}], "}"}]}], "]"}], "[", RowBox[{"{", RowBox[{"1", ",", "1", ",", "0", ",", "0", ",", "1", ",", "1"}], "}"}], "]"}]}], "\[IndentingNewLine]", RowBox[{ RowBox[{"a", "=", "13"}], ";"}]}], "Input", CellChangeTimes->{{3.7331339080836163`*^9, 3.733133910945394*^9}, { 3.733133992439292*^9, 3.733134000405128*^9}},ExpressionUUID->"4bab6335-e61c-4bed-9356-\ b5c7dd3a0a9f"], Cell[BoxData[ SubscriptBox[ RowBox[{"{", RowBox[{ "1", ",", "1", ",", "0", ",", "0", ",", "1", ",", "1", ",", "0", ",", "0"}], "}"}], "2"]], "Output", CellChangeTimes->{ 3.733134001040666*^9},ExpressionUUID->"ab696979-02fd-48ee-8c10-\ 23d038819b62"] }, Open ]], Cell[BoxData[ RowBox[{ RowBox[{"\[Beta]", "=", RowBox[{ RowBox[{ RowBox[{"GF", "[", RowBox[{"2", ",", RowBox[{"{", RowBox[{ "1", ",", "0", ",", "1", ",", "1", ",", "0", ",", "0", ",", "1", ",", "0", ",", "1"}], "}"}]}], "]"}], "[", RowBox[{"{", RowBox[{"1", ",", "1", ",", "0", ",", "0", ",", "1", ",", "1"}], "}"}], "]"}], "^", "13"}]}], "\[IndentingNewLine]"}]], "Input", CellChangeTimes->{{3.7331338971646347`*^9, 3.733133930358232*^9}, { 3.733133974096443*^9, 3.7331339752895403`*^9}},ExpressionUUID->"60768c2f-05c4-49bc-a8e6-\ 9ff7df99e474"], Cell[BoxData[ RowBox[{ RowBox[{ RowBox[{"GF", "[", RowBox[{"2", ",", RowBox[{"{", RowBox[{ "1", ",", "0", ",", "1", ",", "1", ",", "0", ",", "0", ",", "1", ",", "0", ",", "1"}], "}"}]}], "]"}], "[", RowBox[{"{", RowBox[{"1", ",", "1", ",", "0", ",", "0", ",", "1", ",", "1"}], "}"}], "]"}], "^", RowBox[{"-", "1", " ", RowBox[{"(*", " ", RowBox[{"EuclideExtended", " ", "Algorithm"}], " ", "*)"}]}]}]], "Input", CellChangeTimes->{{3.733134124006857*^9, 3.733134124306807*^9}, { 3.73313422078133*^9, 3.7331342285519257`*^9}},ExpressionUUID->"a2cbe3e0-d916-4554-aa16-\ 34b5db2fba5c"], Cell["El Gamal generalized encryption scheme", "Text", CellChangeTimes->{{3.7331346821929007`*^9, 3.733134691744443*^9}, 3.733134982183961*^9},ExpressionUUID->"645499f3-4193-4a1d-98a7-\ 4326e34b75a5"], Cell[BoxData[{ RowBox[{ RowBox[{"enc", "[", RowBox[{"x_", ",", "k_"}], "]"}], ":=", RowBox[{"{", RowBox[{ SuperscriptBox["\[Alpha]", "k"], ",", RowBox[{"x", "*", SuperscriptBox["\[Beta]", "k"]}]}], "}"}]}], "\[IndentingNewLine]", RowBox[{ RowBox[{"dec", "[", RowBox[{"y_", ",", "a_"}], "]"}], ":=", RowBox[{ RowBox[{"y", "[", RowBox[{"[", "2", "]"}], "]"}], "*", SuperscriptBox[ RowBox[{"(", RowBox[{ RowBox[{"y", "[", RowBox[{"[", "1", "]"}], "]"}], "^", "a"}], ")"}], RowBox[{"-", "1"}]]}]}]}], "Input", CellChangeTimes->{{3.73313404799016*^9, 3.733134102827136*^9}, 3.733134239399331*^9, {3.7331342697419577`*^9, 3.7331342760171003`*^9}, { 3.733134323972356*^9, 3.733134329276582*^9}, {3.733134376334055*^9, 3.7331344133042183`*^9}, {3.7331346728329067`*^9, 3.733134677788027*^9}, { 3.7331349432509613`*^9, 3.733134944549667*^9}},ExpressionUUID->"d051aa69-e538-4e2a-898e-\ dadb1f1f9af2"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"dec", "[", RowBox[{ RowBox[{"enc", "[", RowBox[{ RowBox[{ RowBox[{"GF", "[", RowBox[{"2", ",", RowBox[{"{", RowBox[{ "1", ",", "0", ",", "1", ",", "1", ",", "0", ",", "0", ",", "1", ",", "0", ",", "1"}], "}"}]}], "]"}], "[", RowBox[{"{", RowBox[{ "1", ",", "0", ",", "0", ",", "1", ",", "0", ",", "1", ",", "0", ",", "1"}], "}"}], "]"}], ",", "8"}], "]"}], ",", "a"}], "]"}]], "Input", CellChangeTimes->{{3.7331342420547*^9, 3.733134312571797*^9}, { 3.7331344190112247`*^9, 3.733134455317136*^9}},ExpressionUUID->"9730756d-d9f1-422e-b768-\ 75295c70f1ef"], Cell[BoxData[ SubscriptBox[ RowBox[{"{", RowBox[{ "1", ",", "0", ",", "0", ",", "1", ",", "0", ",", "1", ",", "0", ",", "1"}], "}"}], "2"]], "Output", CellChangeTimes->{{3.733134255815287*^9, 3.733134313004924*^9}, { 3.7331344292377787`*^9, 3.733134455859314*^9}},ExpressionUUID->"2dedf19c-3c10-4fdc-bfb1-\ bb57e15d9452"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{ RowBox[{"GF", "[", RowBox[{"2", ",", RowBox[{"{", RowBox[{ "1", ",", "0", ",", "1", ",", "1", ",", "0", ",", "0", ",", "1", ",", "0", ",", "1"}], "}"}]}], "]"}], "[", RowBox[{"{", RowBox[{ "1", ",", "1", ",", "0", ",", "1", ",", "1", ",", "0", ",", "0", ",", "1"}], "}"}], "]"}]], "Input", CellChangeTimes->{{3.733134345858233*^9, 3.733134366437583*^9}},ExpressionUUID->"70ce00cc-b63c-48fb-8ef9-\ e46ed5d3204d"], Cell[BoxData[ SubscriptBox[ RowBox[{"{", RowBox[{ "1", ",", "1", ",", "0", ",", "1", ",", "1", ",", "0", ",", "0", ",", "1"}], "}"}], "2"]], "Output", CellChangeTimes->{{3.7331343361465197`*^9, 3.733134366654785*^9}},ExpressionUUID->"fa7f7dfa-870b-4b5c-9de3-\ f9b9b7d8f16a"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["El Gamal on Elliptic curves", "Section", CellChangeTimes->{{3.730701391810192*^9, 3.7307014019614162`*^9}, { 3.732259304144038*^9, 3.7322593079905977`*^9}, {3.732514621900153*^9, 3.732514627507069*^9}, {3.732515056380571*^9, 3.732515061331009*^9}, { 3.732515219243328*^9, 3.7325152210509653`*^9}, {3.732862474332458*^9, 3.732862476410837*^9}, {3.7328626596676893`*^9, 3.7328626646346827`*^9}, { 3.732864378624559*^9, 3.7328643861196127`*^9}, {3.732876168075222*^9, 3.732876169139079*^9}, {3.7334803550675497`*^9, 3.73348035629834*^9}, { 3.797231257619308*^9, 3.797231263208311*^9}},ExpressionUUID->"50a148d5-5fb3-428d-a0b0-\ 056f28594eab"], Cell[TextData[{ "One can ", StyleBox["generalize ElGamal", FontWeight->"Bold"], " as follows.\n\nLet (G,\[Cross]) be a commutative group such that H is a \ cyclic subgroup with order n (|H|=n)and generator \[Alpha]. \n\n\[Bullet] \ X=", Cell[BoxData[ FormBox["G", TraditionalForm]],ExpressionUUID-> "7d7e7737-9c12-445e-8be7-32eed6a84ebb"], " (plaintext space)\n\[Bullet] Y=H\[Cross]G (ciphertext space)\n\[Bullet] \ K={ (a,\[Beta]) :", Cell[BoxData[ FormBox[ RowBox[{" ", RowBox[{ SuperscriptBox["\[Alpha]", "a"], "=", "\[Beta]", " "}]}], TraditionalForm]],ExpressionUUID->"b95ef378-2d03-4db0-a4b2-f939fd94c29e"], " } \[Subset] ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "n"], TraditionalForm]], ExpressionUUID->"b9cd7ead-08a8-4060-adb1-f68d628c749c"], "\[Cross]H (key space)\n\[Bullet] u:K\[RightArrow]H where u(a,\[Beta])=\ \[Beta] (publication map)\n", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[Bullet]", " ", RowBox[{ SubscriptBox["e", "\[Beta]"], "(", "x", ")"}]}], "=", RowBox[{"(", RowBox[{ SubscriptBox["y", "1"], ",", SubscriptBox["y", "2"]}], ")"}], " "}], TraditionalForm]], ExpressionUUID->"ebb01e20-58e7-478e-9510-690d938e1293"], "with (encryption random map)\n\t-", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["y", "1"], "="}], TraditionalForm]],ExpressionUUID-> "8b7f1b7f-9886-4ca5-8092-986d35dc9713"], Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Alpha]", "k"], ","}], TraditionalForm]],ExpressionUUID-> "e356a856-f901-4eab-afb0-36069346cd7b"], "\n\t-", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["y", "2"], "=", "x"}], TraditionalForm]],ExpressionUUID-> "6012b0ce-a522-4d17-ae89-f90361f4b2b2"], Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Beta]", "k"], " "}], TraditionalForm]],ExpressionUUID-> "ef23fe13-016c-4c34-a0fd-4838bac83e37"], "\n\t- and k randomly chosen in ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "n"], TraditionalForm]], ExpressionUUID->"13ab1062-0c8f-4993-bd3f-87636ab7e6f7"], "\n", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[Bullet]", " ", RowBox[{ SubscriptBox["d", RowBox[{"(", RowBox[{"a", ",", "\[Beta]"}], ")"}]], "(", RowBox[{ SubscriptBox["y", "1"], ",", SubscriptBox["y", "2"]}], ")"}]}], "=", SuperscriptBox[ RowBox[{ SubscriptBox["y", "2"], "(", SubsuperscriptBox["y", "1", "a"], ")"}], RowBox[{"-", "1"}]], " "}], TraditionalForm]],ExpressionUUID-> "a5793cf0-000b-4d63-8b8b-75eeb60ab2ed"], " (decryption map)", StyleBox["\n\n\nDefinition[Elliptic curve mod ", FontWeight->"Bold"], Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], TraditionalForm]], ExpressionUUID->"f9a18ed6-0e0d-4960-9227-5f526388c3a2"], StyleBox["]", FontWeight->"Bold"], ": \nLet p be prime >3, then and Elliptic curve ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["y", "2"], "=", RowBox[{ SuperscriptBox["x", "3"], "+", RowBox[{"a", " ", "x"}], " ", "+", "b"}]}], TraditionalForm]], ExpressionUUID->"cb136f49-2e51-489b-b967-98d45c6e4644"], " over ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], TraditionalForm]], ExpressionUUID->"183d283a-e9c1-443e-8614-ec81fb7f4ce2"], " is the set of solutions E \[SubsetEqual] ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], TraditionalForm]], ExpressionUUID->"d4558af2-7acd-4c9a-9586-06fdf767d10d"], "\[Cross]", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], TraditionalForm]], ExpressionUUID->"05b90203-394a-4ef7-9d97-135b519af4b3"], " such that (x,y) \[Element] E such that\n ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["y", "2"], "=", RowBox[{ SuperscriptBox["x", "3"], "+", RowBox[{"a", " ", "x"}], " ", "+", "b"}]}], TraditionalForm]], ExpressionUUID->"e947f903-d0be-46ad-b7c8-6cb74e42d88b"], " mod p\n and ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"4", SuperscriptBox["a", "3"]}], "+", RowBox[{"27", SuperscriptBox["b", "2"]}]}], "\[NotEqual]", RowBox[{"0", " ", "mod", " ", RowBox[{"p", "."}]}]}], TraditionalForm]],ExpressionUUID-> "efaf4b4a-c13a-44cd-ae8d-49ddde91021d"], "\n \n " }], "Text", CellChangeTimes->{{3.733120314035529*^9, 3.73312042305156*^9}, { 3.733120462001706*^9, 3.733120517808963*^9}, {3.7331214033614883`*^9, 3.733121662159181*^9}, {3.733121696679447*^9, 3.73312174693554*^9}, { 3.7331311051493263`*^9, 3.733131106276277*^9}, {3.7331311412882853`*^9, 3.7331311443149443`*^9}, {3.733131271609787*^9, 3.733131272336117*^9}, { 3.733479947451993*^9, 3.733479968294528*^9}, {3.7334799991228037`*^9, 3.733480190658696*^9}, {3.73348027074751*^9, 3.733480305451003*^9}},ExpressionUUID->"2aeff8f7-fa87-4ce2-a0e3-\ 8362af7ac294"], Cell[CellGroupData[{ Cell["Examples", "Subsubsection", CellChangeTimes->{{3.733480635155545*^9, 3.7334806364183617`*^9}},ExpressionUUID->"af1ed942-50ff-4f6e-a308-\ bb464a380ea7"], Cell[BoxData[ RowBox[{ RowBox[{"curves", "=", RowBox[{"{", RowBox[{ RowBox[{ RowBox[{"x", "^", "3"}], "-", "1"}], ",", RowBox[{ RowBox[{"x", "^", "3"}], "+", "1"}], ",", RowBox[{ RowBox[{"x", "^", "3"}], "-", RowBox[{"3", "x"}], "+", "3"}], ",", RowBox[{ RowBox[{"x", "^", "3"}], "-", RowBox[{"4", "x"}]}], ",", RowBox[{ RowBox[{"x", "^", "3"}], "-", "x"}]}], "}"}]}], ";"}]], "Input",Expressi\ onUUID->"21796be4-826d-41fa-827c-1b7dd2f187be"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"Factor", "/@", "curves"}]], "Input",ExpressionUUID->"4ac33d7a-d726-4e1d-9cc9-46021723faca"], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"-", "1"}], "+", "x"}], ")"}], " ", RowBox[{"(", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "2"]}], ")"}]}], ",", RowBox[{ RowBox[{"(", RowBox[{"1", "+", "x"}], ")"}], " ", RowBox[{"(", RowBox[{"1", "-", "x", "+", SuperscriptBox["x", "2"]}], ")"}]}], ",", RowBox[{"3", "-", RowBox[{"3", " ", "x"}], "+", SuperscriptBox["x", "3"]}], ",", RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"-", "2"}], "+", "x"}], ")"}], " ", "x", " ", RowBox[{"(", RowBox[{"2", "+", "x"}], ")"}]}], ",", RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"-", "1"}], "+", "x"}], ")"}], " ", "x", " ", RowBox[{"(", RowBox[{"1", "+", "x"}], ")"}]}]}], "}"}]], "Output", CellChangeTimes->{ 3.733480402082015*^9},ExpressionUUID->"09ecc782-6231-4a31-a546-\ cb05508ece8a"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"GraphicsGrid", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{ RowBox[{"ContourPlot", "[", RowBox[{"#", ",", RowBox[{"{", RowBox[{"x", ",", RowBox[{"-", "3"}], ",", "3"}], "}"}], ",", RowBox[{"{", RowBox[{"y", ",", RowBox[{"-", "3"}], ",", "3"}], "}"}], ",", RowBox[{"PlotLabel", "->", "#"}], ",", RowBox[{"ContourStyle", "\[Rule]", "Red"}], ",", RowBox[{"BaseStyle", "\[Rule]", "9"}], ",", RowBox[{"FrameTicks", "\[Rule]", "None"}], ",", RowBox[{"Axes", "\[Rule]", "True"}], ",", RowBox[{"AspectRatio", "\[Rule]", "1"}]}], "]"}], "&"}], "/@", RowBox[{"(", RowBox[{ RowBox[{ RowBox[{ RowBox[{"y", "^", "2"}], "\[Equal]", "#"}], "&"}], "/@", "curves"}], ")"}]}], "}"}], ",", RowBox[{"ImageSize", "\[Rule]", "400"}], ",", RowBox[{"Spacings", "\[Rule]", RowBox[{"-", "15"}]}]}], "]"}]], "Input",ExpressionUUID->"2783ebdf-a928-\ 41b9-b845-3e8565fb0646"], Cell[BoxData[ GraphicsBox[{{}, {InsetBox[ GraphicsBox[GraphicsComplexBox[CompressedData[" 1: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 Vn+D/gcb/6cm "], {{}, {}, TagBox[ TooltipBox[ {RGBColor[1, 0, 0], AbsoluteThickness[1.6], LineBox[{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143}]}, RowBox[{ SuperscriptBox["y", "2"], "\[Equal]", RowBox[{ RowBox[{"-", "1"}], "+", SuperscriptBox["x", "3"]}]}]], Annotation[#, $CellContext`y^2 == -1 + $CellContext`x^3, "Tooltip"]& ]}], AspectRatio->1, Axes->True, BaseStyle->9, DisplayFunction->Identity, Frame->True, FrameTicks->{{None, None}, {None, None}}, GridLinesStyle->Directive[ GrayLevel[0.5, 0.4]], Method->{"DefaultBoundaryStyle" -> Automatic}, PlotLabel->FormBox[ RowBox[{ SuperscriptBox["y", "2"], "\[LongEqual]", RowBox[{ SuperscriptBox["x", "3"], "-", "1"}]}], TraditionalForm], PlotRange->{{-3, 3}, {-3, 3}}, PlotRangeClipping->True, PlotRangePadding->{{ Scaled[0.02], Scaled[0.02]}, { Scaled[0.02], Scaled[0.02]}}, Ticks->{Automatic, Automatic}], NCache[{Rational[345, 2], -172.5}, {172.5, -172.5}], ImageScaled[{0.5, 0.5}], {360, 360.}], InsetBox[ GraphicsBox[GraphicsComplexBox[CompressedData[" 1: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 "], {{}, {}, TagBox[ TooltipBox[ {RGBColor[1, 0, 0], AbsoluteThickness[1.6], LineBox[CompressedData[" 1:eJwl1FV4EAQUBeCNbbCgS6S7Q1RCujtHpzJEJEdII0qn0t3d3Y3S0qmE0qV0 GyD/Ph7+c5/O47kZoqIjOwYGBATEEzE3FkEEE0Js4hBKGOFEEDemQ3wSkJBE JCYJSUlGcj4gBR+SklSkJg1pSUd6MpCRTGQmC1nJRnZykJNc5CYPecnHR+Tn Yz7hUwpQkEIU5jOKUJRiFKcEJSlFacpQlnKUpwIVqURlqlCValSnBjWpRW0i qUNd6lGfBjSkEY1pQlOa0ZzP+YIWRNGSL2nFV7Tma9rQlna0pwMdiaYTnelC V76hG93pQU960Zs+9OVb+vEd39OfAQxkEIMZwlCGMZwRjGQUP/AjoxnDWMYx nglMZBKTmcJUpjGdGcxkFrOZw1zmMZ8FLGQRi1nCUpaxnBWsZBWrWcNa1rGe DWxkE5vZwla2sZ0d7GQXu9nDT/zMXvaxnwMc5BCH+YUjHOUYxznBSU5xmjOc 5Rzn+ZXfuMBFLnGZ3/mDK1zlGte5wU1ucZs73OUef/IX93nAQx7xmCc85RnP ecFLXvGav/mHf/mPN7zlf2LGH0gsgggmhNjEIZQwwokgbuD7n/EOGJSBqw== "]]}, RowBox[{ SuperscriptBox["y", "2"], "\[Equal]", RowBox[{"1", "+", SuperscriptBox["x", "3"]}]}]], Annotation[#, $CellContext`y^2 == 1 + $CellContext`x^3, "Tooltip"]& ]}], AspectRatio->1, Axes->True, BaseStyle->9, DisplayFunction->Identity, Frame->True, FrameTicks->{{None, None}, {None, None}}, GridLinesStyle->Directive[ GrayLevel[0.5, 0.4]], Method->{"DefaultBoundaryStyle" -> Automatic}, PlotLabel->FormBox[ RowBox[{ SuperscriptBox["y", "2"], "\[LongEqual]", RowBox[{ SuperscriptBox["x", "3"], "+", "1"}]}], TraditionalForm], PlotRange->{{-3, 3}, {-3, 3}}, PlotRangeClipping->True, PlotRangePadding->{{ Scaled[0.02], Scaled[0.02]}, { Scaled[0.02], Scaled[0.02]}}, Ticks->{Automatic, Automatic}], NCache[{Rational[1035, 2], -172.5}, {517.5, -172.5}], ImageScaled[{0.5, 0.5}], {360, 360.}], InsetBox[ GraphicsBox[GraphicsComplexBox[CompressedData[" 1:eJxdWQlYTdsXPycJocjLwzPL8EdkyMw6KTKPxTP2RKMMoUQoGUI8Q3nPGJIo kiFCWIckiWcIIZUGzXG7t3u7de+t/313733fp76+73ynzjl77bXX+q3f+q1u zmvmuBhwHBfPc9y/133JsfVDMwwETvfTVDS34Yd0eGcgOKX33HJF2UTcnTvo nz/WGwiTj1hof5uIq+J9T/SeZSBkZsVe9XxnJPbfci9SZmYg6P492Uis1/3w Qv+5pwbM7WgkLv693aDYFF4IWOoY0yyqsTjmMBiiKy+0nxSb4/POUPxz3Ywc v0m80FO3gKEo9X/3VTWWF/yd8vbn+BmKk3Qf5oUejnUSP8FQ9Pk7QZDmcMLq zNurMm83Er2+16wbFscJoa2NDqTOaiTGz/AosdzICXdW/fuAgXhYZxcnbA7a V7DL10Ds/N20cllXTtgwbOS5x30MxETDTdsNm3MCr9u/gViYNFAdcL0eSt45 ZinCePHtdeO7v0XVw4KhY6aU7OXFjoYR4s1R9TCF2CWW9Lh7aUGnerBKsJ51 qhEv3tKtWwdfg5rNXCpyYs092+z18+sglNghHh15UTZcqoGP50w3n39SjxMC rwzyf6OB24uWn5m3px67FWcENvLWALG/DjXhn2yf/66BRst63be+WIfEHxoI O6WJC7apw78XWdmufKAG1bN2M++GaHBZ4vzTLbaqqX0aPBf03NK7qxp2Pk1R ZHir0cSiNWd/QwWtyRVNL05J6RCigqx/3blKhf5B62zOBapgTJm7z4uFKvxM /g43Gt2+82y4CnM220SGf6kFz1/zI2X2tbh61YksL/9aWKs7jxpcku805x/r WghIb7m3eHgNJk/aqfJR1cBd3X6U6EWeA+ewnr45nkrM6vo/99MhNXD43oHG 4/opsfuF3z1Gra4BA915KNGl2MwiP18JqhaLbzexrEab6MfBw7KUgPPG+qV2 r0bibyUUV3vsVXSpxmYxLiduj1dCmM7fCtz8aZXN6d5KaDc1c1ZwNwXW6eKz GvzCizaFF8lxRe7ZtD7nqun+5dh2AxyQelWDyfs5f8/rKUd7nR+rYbbSfmuz lCrMzAxN7lKtgF66eK3CsZfbFZVFK2DT48evtg+qwkNkXficlKdElKHbsSMQ LChgjW7fMnSfkpJzUSEHe946cekKGQaOnjs894scUue9aX3dXkb3IwfvXv8r M54oQ1x86qODj5zGgxR3hvY1ivKWg8nhzvu3ZUjp+cgh/ENh5JR0KW5s47Hq bGM5fNH9XYoDSrq8eGUghysvp5sWeUpxa789qeZPqmBRnjzyxSAp9iD7gO2q zrLThlL0ijndadT+KiD5IMX9Ka+Xbfi1CvLaFDZ3O1NJz08Gi7Ltr/g5VqK6 x8MrH91kNN4q0WHwhPYpZjLtevcKR1RI8DaxG/hnFQnWqRKcv/Kv63YDpVB2 MMfWw0+CBC8qwWJURI9RzhL808fBKKq8EgzjqkK2LZbgIsPzW+ZerqT5I6Hx XwnmIVN3teoiwUCPbOtmUgm8UBkEnGwrwYAj5g/W75PAhdtb3N43kSDJfwkY 3v1qdp6XoF18uG80JwF7csW0pmfrhrn/gKYZrt/RQILxOnu/g+ybzRRn7fvl C+Y+X+z+HeI6NO54ylSCnnPkjza6VcD2J1/fX+8twYk6eyrAJOfzDPUACQrD +w1sri6HVhunNc4dKsGXR7cVWe0s19vv/2qJsmdcGXyzetT1i4cEP+ocVAaJ zse9X2+QYJl94GXv96XQ7Av0tT8qwaaLBharNpbCshW7XsVHa9fX+b8EMiwS Dxz5IMGNy93GJUUW6/3fwjptgt3IYnjb39hrqI32fHT+LYK5iWa3+s2uxEOn 5r2ZzRUBZ7fpD4/ISrySNWD3NYtCOPRFWpNcUYnddPFQACX/pt0WKTab0SG9 S/8C6L+2i8mCS1KE6JOpCXfy9fEYlxDkUjkhD1YFGk/o5CVDI8tPn/v8lauP d+KfXLhueXJD+28yPPaL8slRr68w03hL3pRhVagy/XXqjTk5+nwaHL/HzGxE FmxtukCaYyjH9ySAoLP55qILXnJMy5oz2dYjU5+v6yrOXjoY8QlGS48mL/wg x1rdfjNgX6xiT+wwBfa6tufy6psZejzgDN9OlbX5ANPatO94MFqBnXXrvoOM tuEVp+oV6LLHvfs7t9d6/GlXUbzuRc1LSHP9cSNothJf6dZNg8a9urkPO6FE yw9my2crHunxr+mRDgl93RAsor0vr1PU4FbTqknNRh7V4+tqs8Ah/Igd0Cjh XVavMBWSunvn/uG3qw0j41XYdoSHKnloIjL87lfxyNjXIRELZwyc16uXBmc/ 7d0/atR9FIZYjVs2SINFxB5s55O0c9bmOlxbMM2e6/ISm+xx2mt3QVsvuOCY WX++QlZPfrjeqml96QN+FiM3rjTixFziX2wx1ne3xpkTp7vP9KoblYMdFzed XxLDiVmzK5wvBeYjq3chM0zyw4YVYOWhXQsCRvNibxIvCG6xmSV2vGgS/otF wNJvuLN349Qz83mR+LEY22ijL/GI9nnDkH43HEpQOa6TT3oML95oEeBj7VCK vo47o87c5cVskg/odNpnlZY3iLuix+y+ObAcf7ed9j7wFS+ee7i30aZ533F0 WL/0x9m8SOrKd/zH/VaMXy4v/ur6fEMnhx9YarOz1TvtfbPAiI/4VYK5iocp bbXPszyxyUp4UJfJi9uTx9c+86lE18K1F1dk8OKlzXc/11ysRMcHiyvU6bzI cDBGttL07gteLC13/LVkmRRPwthrY5N4Uezh7romUIrdv6dNe4a8qM+LWw8d 78fz4pwPlU0bt5bh+q2nX/4Sy4unlg72fRQvw0PBDl3nhfIiy5PpzyICNFr/ BIVzhbkJMrzWN+GPF9r7qLa7j7ndkyHJD15keZJ21XNfuCsvyiKW7LAqr8JB sE+5azYvznp7tEX1WDke3nnIat0YXmR5Iqn8ND11IC86pSs7/y9Urj9P0+Op K8c3VmDwiwLrcwa8yPLkUM8R3tfKOdHy8JPga9kKJHyLE79NrPXd0KQaE2+d 2zntEidOJfURzTvlGw8/zYmuLnvB1KuaxHUgJ3azKt6hDKzGbbKYuPkbOWp/ NTrnmwf3X8uJD69ZhXiUViPjR5del0TnyauxsMW4InM7TmR5+EZTvG0DcGKx 56Rg56VK1PFFM04sPLniWF9XJUYntmy0w4Sj8aNEk6RHeZ+MOdHpU/MLMalK JH6ux9U3Z55e8FaJFt36OaTE1iPjJVejv/3oE1mPznkOw7rvq9Hny5C0lEdt ztSg/5Jy46gkbX7RPHdzT599LKoO+Qvbj8+zrkUSJ3Xo2DjJ8OXiWrS6b/V1 x3MNPbdabH9RE2QUpEElZ7Ls+OtafX4/Vj/f97uJCgd+3K4ckqxGhhNP1mSH jhqgxq1d6zs81+ICu5qZvpzs9VGlf+511LK+gbPV6JwWcz/yRC1O2/E96PMy Na4uLR8SuqkWu5d16Pbjvlpv94S2CxIn5qpxpVNZzsH1NXo7bCuaWLTTUpbj UfuHntmuQeb3HtniiJW5Gly19tt2TeNqzNqcXOtxV7vvMZe+Touvwuw+b1b4 J9chi8udszxk69LqUNqv67IZQVV6Py7JnrqtxcwqfN2q67hw23pkefJ30usZ pWvq8dOvhZ0rJ0pxzvjmARkH6rHA1aG1+kMl3twaHC6/WY8sbxeUqXc9ya/H rUMPxrT0lWDbuO/uqzT1WDGr9d9HtPU756ySe9mC0+PCQX/rYZ/bcWJ06v6J dh2+Y5ZU1XLecE68vTWiXBJfhhuvDoifMIrT4w6LQ6tr99q59SnF1mGyiA6L OVH1IHr8x6nFuHbhjb5dnDg9rkmyjL3Oa3HzYIeaY4YnirBLhzLb5Vs5PS6K p9SnNbs50dv9ibzgRD4+KpOFLTzMiU3iXs31nJCH47aPX1D/FydOI3USjdTm oS3OcyLnkRdSsCkHLf448fFsFCd6hla3PL4gG9MO3vGUXf4Pt6dfj+g14I7W vqtLU44af8TlTl0cnLX3zl8TXzyTZWDKhOl+cJ8T+5I6h64T465yyZzYvLRo 1v2jbzDXtc2B3U85MWGYMGPkxdc46DwXlJ/CiayuOFwvSVS91O7vIjaZYfgU Zwncb+tecaK5SjUzu2kSNr/0NjjnH06U6Z5PxGmTjpzLf8uJ4zdalOQOv469 3/omb0znxOdN15adnRiJDg5Je4e80e6P1j32fw/yf2DvtyHvA/t+Evk+sPU1 tbr1gdnnR+yDwdR+VqeH93w58cZjTlTbrgvMTH4NzB+s7o98FipMidfimGvR X75lGcD8y3hHb1P7zcPPcGLpqwVzDhzLAXZejNeEjlk/58ufnGgnfTHZe3Qe dKXnz3gUi489JD6AxQ/jZWY0vhQkvqBB/IEfjU/GE1n8XiXxCyy+L5D4Bhb/ jMey/Cgl+QEsf/xJ/gDLL8arWf7lkfyDYzQ/P5D8BJa/jNc3yG9g+f+D5D/k UHxgfUYOxQ/1aB1+gAXFF0+CL3CS4g/r0xg+jSf4BBMpfrkT/AILim+sr5xJ 8c+d4B+8ofj4B8FH+IXiJ+trt1Fc9SdXPU9LIvgLDJ8tCT6Da028MupZrb4P n0fxfgDBe2hE6wGxX6Pnhe6kXsCmwWJ5RHgNPnxSYG2dVAcutN4w3aBBPYLN M2NjLLX1yvLBnmUnY+vBpvC36s6prI+u1/NU+XJQLAdOCEu7eexvbf1caHx+ qcSWE3bGKsfFlVQj00FYve44ItqzxWlOKKb1/B6p58IQWu/J9zkhJMvufc0e BRYlDDV9+kH7/Z/5gdD6Z/4guFB+wXSbk6oznNEWOV6Mf5B5tx8vMD7Sv1za PXMgL9hTvhJK+IqgoHzGivAZoQHfEVqvPHbB2bEK2y80//Z+PS/EUX5kQfiR sHHAE/8vWv50SXrscqr2nvGrI8MCPNTa+3Yhow0ytPxrZuXMhVNDeYHVoTmW rayD43khdpp58SMnKW7+capd38e80ID/CQU91mSM9KvEwQmfR/T/wAsN+KTQ 8me+KbSifLSE8FGB1SW3C+GL2mvvo3/ms0IA5bvzCd8VGvBhIfFnvix0+5lP Cw34ttCB8vFdhI8LDfi6sJvyeQnh88I/lO+z87P9uR8QGvQLQuHP/YRgQfsN Fs/OtB8xIv0INOhX4BntZyaQfgY60X7nG+l3QDGc9EMs3xr0S9C/DemnDEg/ BfNakX6L5Xcv2o91J/0YsLogRt71MTuqhNyh6X0ilC9BjLvisWS2Enxp/8fw p0F/CE1p/ziF9I8Q8Wak+4CnGcB0H1Y3zvcNy7d3l8MI2s9uIf0sNGlF+l2G h6yO7OmdHeGYK4ObtJ/2Iv002NF+m+EtqyulpD+Hq7R/P0j6d9hN+/tGpL+H Bv0/uKwJC8seWQya1NWh220qYRvVDxj+N9AXwPhn/QEKqD7RnOgT0EC/gG1U 3ygg+gZ8ovoH02EO/LAffVddDtbpC5uPsJYA009ajXB7c26ABHoFl7r4ulRA t76FO270kQCrY3bzH77YZqRd32WKd4jBf1f23YGW4s3LnAS6Ok+0e7FHAgZF U79uaSaBBnoROFI9ib23/2e9CRZSfaqc6FN6v1P9CuZQfesy0beghupfbJ0G +hiEUP0sl+hn4En1NaZ7sTgIJPobHKH63Gqiz4El1e8uE/0OmN63Y3t3r8Hp UthB9cCWRA+EJ8Wbthr4yPV295XHd2qbKYeOp9f02zJZpo/TNb94Tu2fKIP1 Qd9t3C4pQCgr32A0pAqcGocHPy9V6O1yOlxWn7WyGh4nRFms7CXX5wXaBfS+ /E0OflRfbUv0VXhiIoqp45T6dQSq194nei0soXruD6LnQkU7O58qjxr9d79Q PfhPogdDA70YkqiezHTfxVRv3kL0ZnC5cPzet121+vfIPmphYH8vn0+pNZBN 9Wt3ol+DesXTJmubqvTPMdz44fQ+6/wIFWymevgooodDS6qXs+eMqZ7Ormep 3h5E9Hb4g+rxDL/+onp9LdHrYbrJpuYVGjUwvsCeKzb79NcN2zpQU/2fJ/o/ XDd5bzJogwYYvo6n84NrZH4AYXS+8IHMF6Cazh9Y/Wfv5ZD5hFBM5xcDyfxC +I3ONxj+/0PnH45k/iEU0PlIMZmPCPfo/ITNfTrR+cp6Ml8RGsxfhJt0PkPi 00BYSec3R8j8RthA5zvk/BoJDeY/gmzNkKJdY3nBb+WO3Y6bDAU2PyLnZyiM ovMlczJfEhbR+dM2Mn/S20nnU0KD+ZXQYL4lNJiHCaO7RPp7/zcvE/4PCPJL GA== "], {{}, {}, TagBox[ TooltipBox[ {RGBColor[1, 0, 0], AbsoluteThickness[1.6], LineBox[CompressedData[" 1:eJwl1fOfEAYYBvC7bNuXbdvmZddlXrZt27btGmoIW8ZQW3Zbxlbf+/TD93n/ gud5g0JCg7sHBgQE7BFhNxzhiUBEIhGZKEQlGtGJQUxiEZs4xCUe8UlAQhKR mCQkJRnJSUFKUpGaNASRlnSkJwMZyURmspCVbGQnBznJRW7ykJd85KcABSlE YYpQlGIUpwQlKUVpylCWcpSnAhWpRGWqUJVqVKcGNalFbeoQTF3qUZ8GNKQR jWlCU5rRnBa0pBWtCaENbWlHezrQkU50pgtd6UZ3QulBT3rRmz70pR/9GcBA BjGYIQxlGMMZwUhGMZoxjGUc45nARCYxmSlMZRrTmcFMZjGbOcxlHvNZwEIW sZglLGUZy1nBSlaxmjWsZR3r2cBGNrGZLWxlG9vZwU52sZs97GUf+znAQQ5x mCMc5RjHOcE3fMt3fM9JTvEDP/ITP3OaM5zlHL/wK+e5wEUucZkrXOUa17nB b/zOH/zJTW7xF39zmzvc5R73ecBDHvGYJzzlGc95wT/8y0te8Zo3vOUd7/nA Rz7xH//zmbDyBxKO8EQgIpGITBSiEo3oxCAmsYhNHOISj/gkICGJSEwSkpKM 5KQgJalITRqCSEs60pOBjGQiM1nISjayk4Oc5CI3echLPvJTgIIUojBFKEox ilOCkpSiNGUoSznKU4GKVKIyVahKNapTg5rUojZ1CKYu9ahPAxrSiMY0oSnN aE4LWtKK1oTQhra0oz0d6EgnOtOFrnQjbLxD6UFPetGbPvSlH/0ZwEAGMZgh DGUYwxnBSEYxmjGMZRzjmcBEJjGZKUxlGtOZwUxmMZs5zGUe81nAQhaxmCUs ZRnLWcFKVrGaNaxlHevZwEY2sZktbGUb29nBTnaxO/DrP/sCNjrCQA== "]]}, RowBox[{ SuperscriptBox["y", "2"], "\[Equal]", RowBox[{"3", "-", RowBox[{"3", " ", "x"}], "+", SuperscriptBox["x", "3"]}]}]], Annotation[#, $CellContext`y^2 == 3 - 3 $CellContext`x + $CellContext`x^3, "Tooltip"]& ]}], AspectRatio->1, Axes->True, BaseStyle->9, DisplayFunction->Identity, Frame->True, FrameTicks->{{None, None}, {None, None}}, GridLinesStyle->Directive[ GrayLevel[0.5, 0.4]], Method->{"DefaultBoundaryStyle" -> Automatic}, PlotLabel->FormBox[ RowBox[{ SuperscriptBox["y", "2"], "\[LongEqual]", RowBox[{ SuperscriptBox["x", "3"], "-", RowBox[{"3", " ", "x"}], "+", "3"}]}], TraditionalForm], PlotRange->{{-3, 3}, {-3, 3}}, PlotRangeClipping->True, PlotRangePadding->{{ Scaled[0.02], Scaled[0.02]}, { Scaled[0.02], Scaled[0.02]}}, Ticks->{Automatic, Automatic}], NCache[{Rational[1725, 2], -172.5}, {862.5, -172.5}], ImageScaled[{0.5, 0.5}], {360, 360.}], InsetBox[ GraphicsBox[GraphicsComplexBox[CompressedData[" 1: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 ORm+pWZeK2ieh/8PVTZXOA== "], {{}, {}, TagBox[ TooltipBox[ {RGBColor[1, 0, 0], AbsoluteThickness[1.6], LineBox[{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129}], LineBox[CompressedData[" 1:eJwt0+N6FgAAhuFv2baXbbuW3bJrmQtnkLVcy7Zt27Zt23V3Xf24j+B53+Cw 8NA+QYFA4D0DGcRghjCUYQxnBCMZxWgiGMNYxjGeCUxkEpOZQiRTmcZ0ZjCT WcxmDnOZx3wWsJBFLGYJS1nGclawklWsZg1rWcd6NrCRTWxmC1vZxnZ2sJNd 7GYPe9nHfg5wkEMc5ghHOcZxTnCSU5zmDGc5x3kucJFLXOYKV7nGdW5wk1vc 5g53ucd9HvCQRzzmCU95xnNe8JJXvOYNb3n3v+EHPvKJz3zhK9/4zg9+8ovf /CFgAEFEISrRiE4MYhKL2MQhLvGITwISkojEJCEpyUhOClKSitSkIS3pSE8G MpKJYDKThaxkIzs5yEkucpOHvOQjPwUoSCEKU4SiFKM4JShJKUpThrKUozwV qEglKhNCFapSjerUoCa1qE0d6lKP+jSgIaE0ojFNaEozmtOClrSiNW1oSzva 04EwOtKJznShK93oTg960ove/DtuOH3pR38G8BcDf3vn "]]}, RowBox[{ SuperscriptBox["y", "2"], "\[Equal]", RowBox[{ RowBox[{ RowBox[{"-", "4"}], " ", "x"}], "+", SuperscriptBox["x", "3"]}]}]], Annotation[#, $CellContext`y^2 == (-4) $CellContext`x + \ $CellContext`x^3, "Tooltip"]& ]}], AspectRatio->1, Axes->True, BaseStyle->9, DisplayFunction->Identity, Frame->True, FrameTicks->{{None, None}, {None, None}}, GridLinesStyle->Directive[ GrayLevel[0.5, 0.4]], Method->{"DefaultBoundaryStyle" -> Automatic}, PlotLabel->FormBox[ RowBox[{ SuperscriptBox["y", "2"], "\[LongEqual]", RowBox[{ SuperscriptBox["x", "3"], "-", RowBox[{"4", " ", "x"}]}]}], TraditionalForm], PlotRange->{{-3, 3}, {-3, 3}}, PlotRangeClipping->True, PlotRangePadding->{{ Scaled[0.02], Scaled[0.02]}, { Scaled[0.02], Scaled[0.02]}}, Ticks->{Automatic, Automatic}], NCache[{Rational[2415, 2], -172.5}, {1207.5, -172.5}], ImageScaled[{0.5, 0.5}], {360, 360.}], InsetBox[ GraphicsBox[GraphicsComplexBox[CompressedData[" 1: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 3v/wFJ9hXz9Zg1HKf4xSPmS07Te8GnYhDbtib1m07ixBB/a5dLwUosvPKinB RSYWsiVHMjDz9RWfp76lGBBvnSnwy0LOX1oCPZdND8zCqj0J8ROMJcj5Qnyg qQrOkGDNvbeb7oiz8OEipgbnD/gTW3cO8vSc7ByFEhxazWSaROWgrf5xt56P EgxI9t3Vs/FfVGHrK0N19pqLH64Jwx9OK8P92k7b+2W5yNs8W9DgUYbGYwc/ BfiM7V8ZWt0JNjnmVICafh/OalSXIedryY4RM2LryrDb/3Sfz+2B/9M8rX9s K0ODvnObXtYUYaAh393KSYqJ7NeLUe5UuUXLW4qZI4Rf95uVYvTr8a1xt6RY Mm8mBriU4pTX6cyhCKkCh2i1ox1z/5ZitmNj1PE6Cf51MhlXv5Mq6tqrlps6 LEuKdZuufv322f+unM+/kdvmbw+T4vBjdiGpJRW4eGSu6G9LKXK5Ydo+czXT qVIMK39s2uRfiSkzljrNGylF6bK+n5vrKhXv4XLIxZMmRWNXlOEZYYn6AVE1 /mupumJ4gQRJLqrGXPN3Y4qSJGjgueik+a0axTmqPvqm8qNq8NXx8gcJehIk ubIGfzU7EuqvI0FX89FvIoM+YyhbVymCULTD+8xnjDrjlWdvWYrtKfm1HUtr FThyOcoAdVR8jxSjloGdU9IXdQjBxh/fPy3EH2adnG+wr07RJ1JHPV5/6qMT Oj0PfdRrOoatrkeX6iC3Fo9cnL/3m6CaO/U41WJUgGN/DrYFeBd1GTUoeCcI 2nl4zpoGfHEoIS4nOBO5HHhTKAna7pCGdXO/tBBObsQnBWtkKSEfcG7zryKx aSNy+eR+XXNOmF0jGj4f+VNZxFv8prhtzZrgRpzF7v8Pfms5ImBSZCO6fRdw TSgXY6lo57a45Ebk8klw12OPtsJG3LDivv/ujY9RTWi2Z6OsEfssj8fNd7jF 5RPk8ok6Xb9F1uE0fd6YPA9bwoK1t8Q1IpdPzOj7bcn7IZLWq0Hqhe/pebg8 onR+UKX4PCH4QCfFj8sjDMVXh+ALvhR/B4I/cP25RvoDFrR/XD4ZRfv7A+mv IkdPJP2HFS1XDyeurcXQSrP+fY+LoYfyJYbwBRZTPj0gfAKOf9lbGlCgI4Fa ys8kwk+4lrSKOXejBrm8c4HyPZvwHZTmAWR0XkheKIOuv4wKjxyuRL3qZ7x3 2lJFTs+59Ht3kZEUIkYlJlplV+DNo9tO2zlIYeLCPRL+3Ap85PHce8phqSKn i06PLsgOl4LBtlpdjenl6MnWPfD8urLZk98MzC25wq6Vkyvqb0vRc5NNW8pb KSjpA6ikWImPTShDz9s9M9z+lcIZYYRQKpFgqdGI5+0D60p6A/lUjwyJHkEB 1asYolegpGfwNdW7E0TvQOsQ0cN3RA9BSS/BguqpOtFTGEn1lsNvN9Xjvk2s HgOn17XFR77dbVgGAqrv1kTfQSOC+EEc8QNQ8guoo35SQfwEMh513x/rm6Xo LzlPBr6Pu1vfd7kU5lF/SiP+BPaxIns3lQw8R/QJOD+zdx4dU1RZAkOp38mJ 38GdkesPnX6TquDfe6/k9Q27PuLCkGh5el6R4nfLjic+i3ZIC2GLas+9M7Vv ccz5KT7vZxaC9YsFc6bvTVHwX6ETY89eabPMgz36G7IebX2Fa8foRdiF5kLG /ctGVdv/xi42n/yr+F2Td+xrcEvNApslKY/NNJ+jZvjBhvuRWZBTLtw3QvxM MZ8Lr17OGf3sKcYmrbvtbpgFHXuGeL48IsQl5Jyg7Sl0P1gXgzejN9sZu6TB sPjB/SOxBSZ6bdrxEdZlBds1Xryn0AdhzLOyVRNvYfRQLDMwTIZt+x227NE/ j2qhfJ9VPgjW7PcDFfpj5D7aUd/+OOYYL9dukSbABHZ9K0ay65GK311ug5cj XRbMi5gtKsd+TuSuPNWIBWZ3tS247014Se5rLtjc3BKbnMjd/2MQnsO9iWK6 P3eOTfT9feT9eIXWx+EYQeu3IvXjOIdxc71OXFPo9wd6XjE5L56geHB95t7T SvDCiRTPCIInnqb4pxH8MV1P9+GFpGcK/1lH+zeK9E9RVz7pL1bQ/nNz4k/5 4U74gUr8QTfKL24uG5qm+gW0vsX1V89rORoXohI/MZfydwnhL4opvzkdUM57 /wVWO6Gc "], {{}, {}, TagBox[ TooltipBox[ {RGBColor[1, 0, 0], AbsoluteThickness[1.6], LineBox[{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163}], LineBox[CompressedData[" 1:eJwN0GciFgAAANBP0VAaCplFaFCIjCThBo7gAFzJj6QdKcoolRVNSkIiFKWy KqL0frwLvMSKqvLKoEAgUM0FarhILZe4zBWuco3r3OAmddRziwZuc4dGmrjL PZppoZU27vOAdh7yiMd00EkX3fTwhF76eMoznvOCl7yinwFe84ZB3jLEO4YZ YZT3jPGBcSb4yCRTTPOJz8wwyxe+Msc3vvODeRZYZIllfvKL36ywyh/WWOcv /9ggID6ITWwmmBC2sJVtbCeUHewkjF3sZg97CWcf+4kgkigOEE0MscQRTwIH OUQiSRwmmRRSOcJRjnGcNNI5wUkyyCSLU2STw2lyySOfAs5QyFmKOEcx5ymh lDL+AwKJVsg= "]]}, RowBox[{ SuperscriptBox["y", "2"], "\[Equal]", RowBox[{ RowBox[{"-", "x"}], "+", SuperscriptBox["x", "3"]}]}]], Annotation[#, $CellContext`y^2 == -$CellContext`x + $CellContext`x^3, "Tooltip"]& ]}], AspectRatio->1, Axes->True, BaseStyle->9, DisplayFunction->Identity, Frame->True, FrameTicks->{{None, None}, {None, None}}, GridLinesStyle->Directive[ GrayLevel[0.5, 0.4]], Method->{"DefaultBoundaryStyle" -> Automatic}, PlotLabel->FormBox[ RowBox[{ SuperscriptBox["y", "2"], "\[LongEqual]", RowBox[{ SuperscriptBox["x", "3"], "-", "x"}]}], TraditionalForm], PlotRange->{{-3, 3}, {-3, 3}}, PlotRangeClipping->True, PlotRangePadding->{{ Scaled[0.02], Scaled[0.02]}, { Scaled[0.02], Scaled[0.02]}}, Ticks->{Automatic, Automatic}], NCache[{Rational[3105, 2], -172.5}, {1552.5, -172.5}], ImageScaled[{0.5, 0.5}], {360, 360.}]}, {}}, ContentSelectable->True, ImageSize->400, PlotRangePadding->{6, 5}]], "Output", CellChangeTimes->{ 3.733480404084436*^9},ExpressionUUID->"c4d69138-3e99-4ca1-938f-\ b90ab7b65943"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["\<\ Elliptic curve group operation \ \>", "Subsubsection", CellChangeTimes->{{3.733480836141667*^9, 3.7334808936661663`*^9}, { 3.7334809370751257`*^9, 3.733480938602078*^9}},ExpressionUUID->"932fb221-322f-479f-b17c-\ 24f532d9a2f0"], Cell[TextData[{ "We enrich E with a neutral element \[ScriptCapitalO], such that \n\nP+\ \[ScriptCapitalO]=\[ScriptCapitalO]+P=P\n\nGiven P = ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{ SubscriptBox["x", "1"], ",", SubscriptBox["y", "1"]}], ")"}], " "}], TraditionalForm]], ExpressionUUID->"45acc3c1-b27e-4471-84dc-952d27d8b2db"], " and ", Cell[BoxData[ FormBox[ RowBox[{"Q", "=", RowBox[{"(", RowBox[{ SubscriptBox["x", "2"], ",", " ", SubscriptBox["y", "2"]}], ")"}]}], TraditionalForm]],ExpressionUUID-> "8252be6b-2f7f-40c0-95d0-68413f1938b8"], ", if ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["x", "1"], "=", SubscriptBox["x", "2"]}], TraditionalForm]],ExpressionUUID-> "703ad763-abf2-4605-a95b-c316528a3343"], " and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["y", "1"], "=", RowBox[{"-", SubscriptBox["y", "2"]}]}], TraditionalForm]],ExpressionUUID-> "01ba5d76-61cd-4f84-8bb2-f233d7c8ec38"], " then P+Q=\[ScriptCapitalO], that is, Q=-P\n\notherwise\n", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"P", "+", "Q"}], "=", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{ SubscriptBox["x", "3"], ",", SubscriptBox["y", "3"]}], ")"}], " ", "where", " ", SubscriptBox["x", "3"]}], "=", RowBox[{ SuperscriptBox["\[Lambda]", "2"], "-", SubscriptBox["x", "1"], "-", SubscriptBox["x", "2"]}]}]}], TraditionalForm]],ExpressionUUID-> "9e33dd39-a054-4c3e-9f8a-716c496f90ff"], " and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["y", "3"], "=", RowBox[{ RowBox[{"\[Lambda]", " ", RowBox[{"(", RowBox[{ SubscriptBox["x", "1"], "-", SubscriptBox["x", "3"]}], ")"}]}], "-", SubscriptBox["y", "1"]}]}], TraditionalForm]],ExpressionUUID-> "a7a9d0eb-6d20-463c-b10e-5f388238abcb"], "\n\nwith ", Cell[BoxData[ FormBox[ RowBox[{"\[Lambda]", "=", FractionBox[ RowBox[{ SubscriptBox["y", "2"], "-", SubscriptBox["y", "1"]}], RowBox[{ SubscriptBox["x", RowBox[{"2", "-"}]], SubscriptBox["x", "1"]}]]}], TraditionalForm]],ExpressionUUID-> "fbd09e82-f6ea-400c-aa37-30f6ef313312"], "if P\[NotEqual]Q (the slope of the secant passing over P) or ", Cell[BoxData[ FormBox[ RowBox[{"\[Lambda]", "=", FractionBox[ RowBox[{ RowBox[{"3", SubsuperscriptBox["x", "1", "2"]}], "+", "a"}], RowBox[{"2", SubscriptBox["y", "1"]}]]}], TraditionalForm]],ExpressionUUID-> "140f6c44-c3f6-42b8-9755-d21b177445bd"], " if P=Q (the slope of the tangent in P)" }], "Text", CellChangeTimes->{{3.7334809402745333`*^9, 3.733481030210217*^9}, { 3.7334810730997953`*^9, 3.733481087794415*^9}, {3.733481118363235*^9, 3.73348144843468*^9}, {3.7334891757532063`*^9, 3.73348917836721*^9}},ExpressionUUID->"01d9d58f-3203-4dd0-aa9c-\ ce30e129b44d"], Cell[BoxData[ GraphicsBox[ TagBox[RasterBox[CompressedData[" 1:eJzsXQd8VMX6Xdtr/l79v+Z7TxGkhfQGIUivgtKl2UARO4KKiogFUJGigvSW kIQWQkKXpoiCNAFFiiBKLwES0rbv3vOfb+bO3dnNBlDAZMM9Ouxmy91b5p45 881Xqj76fOd+N1oslhd/x/7p3OeVpi+80Gdwl7+wP+7v/+JTT/R/vO89/V96 /InHX0h69Cb24mM3WCyPs3Yzew4FmqbBhIlQgNfr5Y+7du1Cjx490KxZM97u vvtuvPXWWygpKSnzOyZMhApMTjZR0eHxeIzndrsdkydPRvPmzdGkSRPeWrRo gQceeABff/01XC4X3G43byZMhCJMTjYRCpB699ChQ3jiiSeQnJyMxo0bc24m Tq5fvz6mTp0a9DsmTIQSTE42UdFB3ErN4XBgzZo1nH8bNGiA1q1bcz5u2rQp f3z88cdx4MABrqulTiZdbcJEKMHkZBOhAJvNhsLCQjz//POGPiYubtSoEbcp 02v0PDs72/hOcXFxOe6xCRO/DCYnm6jokDaI7du3c+4ljUycXLduXbRp04Zr 5IYNG3JOHjRoEHJzc/l3VDu0CROhApOTTVR00Lod2S3efvtt1KtXj/Nu//79 0blzZ8OG8dJLL6Fnz57czrxx40bju6ZN2USoweRkE6GAc+fOYdSoUdixYwcK CgqQnp7O9TH5wXXq1Alr167FkSNHsGzZMixdupR/hmD2bxOhBrPPmqjoIBsE 9VPyP5b2iJkzZ6Jly5ZcJ7dt2xZbtmzhr5PdmTQ1gfS1qZNNhBpMTjZR0UE8 LLmY+qvT6cTcuXO5TiZO7t69O/fHkCBONv0tTIQqTE42EYqYMWMGWrVqxdf8 2rVrh82bN3Mulppawlznq/jQAprfGwwevWllfSHoly/yIxUcJiebCAVQP1X7 alpaGrddkK9F+/btsWHDBr/3Az9vomKCrpAHXrhZc+rNeEMTDzb2r5U1l0rS bt9n4PaIptF3g7QyuLuiUrTZb02EAkxOrpxQOdl+OZzMORiCl/WPwVOakzW9 +XGyfFvZdkXsIWa/NREKMDm58oK406M0/UWDMN1685O/IK4WTdOIjz38DbkN t/6oqdsL4OSKCrPfmggFmJxcmRHE1qBCiGkfOXuFZi7QmwsezsuBNhBnMI5X ObmCdg+z35oIBZicXJlBPOymAB/RFHuvfJtzsUs0uq5kz8hjL+azZtfVseRj u9LcXCvjl60LlhPMfmsiFGBycmWFV9iBiZM9Pk6W0phD4WO4haXYyl4sZC8U s+YNopOlbdrgZEII8DHB7LcmQgEmJ1dWlOZkuYxnZMAmLnbqL3g09r8bbq+D /c2a0y7W9zzCnixtym4/m7KOEOBjgtlvTYQCTE6urFA42SueE/VSJKbByVIn c9plmtjrFFxcbAUKbICdven0+HS24nehBdqTTV84EyauCkxOrqyQa3t88Y5z KPExRWHSI7+CDjfnY83rhsfN3iGNfOI4jqfNx4nUBbBv3wPY2DaK2es2xtcO p7+vchl8XCoWpYLA7LcmQgEmJ1dW+HMycaRdbzIsRBCocLzQHEVA3llYP9+A mU3bYWREEtKeehHfZK8ErOwzDq/O4ezRI7ZZFh9LN+eK1kvMfmsiFGBycmWF tDW4dTuw0MfUfHzJXnfZxKuOAuDYEewZOQYpMUmYHdcIL8TejU2z5gOFpJM9 /nYMzVvKSBHoWlfReonZb02EAkxOrrzwxYz4tKvkY3EFdab2lgAlecCWTZja qDEWxSRiYd0mGJzUHLZvDwJFTiawGQe7vAH2i8DfM3WyCRNXCpOTKydkbLXk 5NJXjF4n1cx0sjUfOHUE+957F5OjI7CyfhIm1KiNL94bK+zJtN5HfEwaWY/r 03S/i2BhKOYanwkTvxwmJ1dOqJxs2I7VGGj+uotxbSFQzDh54waMi49FelwU 5oZXR2pyEnDkONPPTuF/4fKtFdq9TjiZGq6oergsmP3WRCjA5OTKCdX/gUMu 9xmGXsapnhLGx+eB08ew662h+KBGVWTVi0NGXA2c/2gkUFgErbDY8IOT+YyK GSPbdT8OP7txBfdTNvutiVCAycmVF37UqHIy18peeF2Mb61kR96Ad+tUw+Kk ushKiMHclncDe79mfF3E+djtcsDhsnNtLPmYHv3XC2FysgkTVwEmJ1dmBCR8 IwKluD0Zv+diOvnCSWwY8ChmRd2FZVF1MKN2LXw/cQKQd47xtzuoX0XptcIA VNDuYfZbE6EAk5MrK7zwOOw8jo+syh7ylZBkyt0t2N+2Ang2r8OYiDuwIjkK y2IjsLp9B+CHH4GSkgrLrb8UZr81EQowObmyQo/t0IRG9uoiV5MGYKsVyD2J NQOewvTwqlhWLwZTw2vizMSJwJlc/bvluf9XH2a/NREKMDm5koIbFvTYDiW3 sdutG5ZLCuBa8wmmN6iL7PhozI8Ox/Ke3YDdu5h+ZnztcZmcbMJEOcDk5MoM r88HThNP3V7iWhtw/AA2PNkPqRFhyAqvg7T4OBydOR04fZLnhdMcVpOTTZgo B5icXJnh9VuYcxEvU56h4tM4v2weFt6dhGUxsViSWA+fP/IYsHcv4CwBOB+b tgsTJsoDJidXXng8Lngo1kPPyUm1nOApAg7sxJZBT2NhZC2sio3BrPi6ODsr DSgq0Q3Obj0PRuWC2W9NhAJMTq7EIPux06XnR6YX2POC09DW5CCzaT0sjwpD dmQElvR4kPH0Ie5rQZF6mmZ8oVLB7LcmQgEmJ1dSsEvkpNz0lDrI5YHTwXSv h7UD32Dbs49jbvhdWBEbjunhtXFsNtPIxTbunGGn6wtKce8q7yO46jD7rYlQ gMnJlRS6HdmRX6znu2Acm3scrhU5SGNcvCIuEllx0VjZoxtw4gT3tSCrBeVX Li4uRtA61yEOs9+aCAWYnFxJwX2QdVsy/VN8Dti7C2sf7oXM6NrIYbw8vMpt sOUsAgouADyXBXtKNfi4UDY52YSJ8oDJyZUUMr8FOVvYCoELp5E7YxI+qH47 cpg+TgmvjSUPPwicZBrZ6eT0W0S2C/quyckmTJQbTE6upKBLREmCqDYIcfK+ rzGzYV3MjQ9HTnIiPooOB7ZuJUMFz4vs9mhGiiKHzV5h8whdCcx+ayIUYHJy 5QUPqy5h/HrmJPYMfx3To6ohM74Oxte5C9++8QZw9jzjbDe8dqchi2024QPn 8Xguuu1QhNlvTYQCTE6unJAymXPy5s0YU+tOzI+phqykCKS1bMxe+4pxcp7I ESdjr51uI94vlHLVXy7MfmsiFGByckWFrK/k8xP2Nyf4EiKXqu9k5DD28pyb n/bti9SImpgXXROTIqvh5PRJwInjQEExI27NP6Un+47b6zE52YSJcoLJyRUT Gq+t5OCN06vmS0kvXiCBa2P8WcQ+4aKqeqIWk1N/YmMquegMSlYswMyYSCyO S0BqVBTW9e0H7ZsdgLWQkl8YMX7+JBy8Bmqow+y3JkIBJidXTAhOLmHNJl8I 4GS93jT7DHFyoV6Lib9HHEtx0j99i00DenONnBUTh6lx9XB8+kymj88LTvfq OZV1TpY2C5OTTZgoP5icXFHhZhxpY81h5Hbzq69HnEpxeV5iZCcoKtom33cw 5j57DqemfIQJMdWxMDEec+omYsOzzwEH9jEOLobDLuo6cer1+LbPOd/kZBMm yg0mJ1dUECeS8nX51Zs2bMqUK8jt4nmOvW4P59JCxqolzmJyngC2bcO6Xt2R Fl0H8xgnT66XiAtZmUIju61iu5qSyxO6HxzfvsnJJkyUF0xOrqjwCt71uv04 mZphX3B5RA0n3e5QRNVLvYyTz5/CobFjkBoRgZX16mNqTAy2DH6VaecTXCOT zcNjFEsVoG069OYxOdmEiXKDyckVFNy46xVN5WQo9gtZ85Rc2Dzko0G6uRDY uBbZ7dsiKzIG2TGJmFS/PrQNnzIhfYZ9nuKoHZyThV+Hz2YhmyfA36OywOy3 JkIBJidXUPCiIHrj9OhzWDPsF4otmGtmsi8f+x7bBw9ASmwdLE2oj+lhMfhm 2HDg3EnAehYeyp/MuNvtdXDeVflYul6YnGzCRPnB5OQKCqU+iAjI8xG0+hal rPdwfzamkQsvQFu7HClJkVgQG45FSQ0wKTEZOPA94+N8th3y03DA67HzHMkq 7XuU3w30i64sMPutiVCAyckVFHLtTdfIGrc1iEYgDiU/C8oZRDEeKGb69/sD +PSRB5BS6w4sT4rHm1WroSBrEXD2DPtQif4Nl7BRa14/TjZ0t/F7FYOTvV4v 3G43b4H9juK/6X1q9B59xuFwGHHh9LcKs9+aCAWYnFyBoRsphI3BxRvnZN3/ QuTWJI5l7UI+jn0wDpNrVcfa5ATMjqyFZY8/AexnGtlFNZ2s0BwlIqhEt1NL TvazT/M/KgYnB+PgYNxMIF6+VI4Os9+aCAWYnFyBYfi+CU5267wsuVrUBGHc WZQP7PoaY2qHITMiiufiTGtYHyXrP2Mfsvl834i7qRaUQ+RV9uNkdU1Rqzh+ F9TXpA4OfE1yND2XUJ+TZg7clgkTFR0mJ1dcyLU8D4/pc/E4a4OTPbpxo+gC cOoE1jz/HCaH1cKi6FhMYY8H3h0BnM3l/nR2R7Gur73CAO30+c/562SdkyuI L5zKrxIqH8u/y/pMsNdNmKjoMDm54qI0J7sYUxInMz6ieiB2O3AhD1i1AsOr 3Y75CfE8PmTVI48A27YCeXm63dgrfI6ljZo7W/ivFYo4FFUjlz8nS0gOpqb2 vWD6mB6PHDmCTZs2ISMjw287Zr81EQowObliw5+TnT5OJj8Litfb9x2WdrwP 82KjeZtZvy6Ozp4FFBYCJTajrJ7kXc5dXk3Xwz5O9s9zUTE4ORgPE+hvub4n cejQIWRnZ2P06NF44YUX0L9/f8yYMaPU90yYqOgwObniQ3Cy4GOKC9E4JzuB 48dxYvx4ZMVEY0lEbSxIjMGnTz0GnPiJ6efzIp6ETKpKLgtKN+QijaxfQtX3 wq3r6YoWWy11srQry/bDDz9g9uzZnH8feOABvPbaa5yXd+3ahZMnT5bajtlv TYQCTE6+hjCCO/xfKvNzgW/qf3sNjcxIVtObzQqs/xxZrVphRUwEVsZFYHbD BOTlzAPyc4V/hUszHN2cXp7NyPB78yqc7IsbqXic7GLzAafTafy9Z88eroU7 duyI5s2bcx7+4osvcOzYMTY1KOSfKat/mv3WRCjA5OQrQ1lrTGfP5OLJvo+j VbPmuO1f/8bf/vY3/O73t6J56zb44MNx+OnwUZ6WjUjR6/AY5gJNGhmITm3C 8OB2O7k+9lC8B+WzcBYBRw5jzwsvY2F0DFbEhmN2dA1sfmsQcO4Y4+uSUvHY ZdF+4Hs/58qWdeyBr0sbg/STUD9L7xHvSg0cuHZHvhP79+/H66+/jttvvx3V q1fH8OHDuRZWNbPafs7+mjBR0WBy8pXhYpx8k8WC1s1b4IUBAzF06FC88+5I 3NuxEyw33wKL5UYsXbxMaFnWNKfXELFup8cgSKdD8LLmJV62M5K6ABSdQ25a KhYkJGJOtSpYnBCFBW2bAN9/zfg4X/gel0M5PRnfIXlV+qKpfmsq5xIX09+k g9U1uhMnTmDz5s148sknER0djdjYWIwdO5a/ruLn8LH8vAkTFR0mJ18ZyuLk 3Nxc/IZx72uvDja0odPlgc3uxPIVn6BWrTC0aNYSP+w7aJRxkjzqcLoNewKX zS49P5yD6WMXm59v/RI5XTshvXYtfJJYF6Oq3Q5rZgZw4YzIeeFw/DzBewW4 WByHhOonHNh/iI8vXLjAfSWWLFnCbcP3338/+vTpg5SUFG4zVn9Lff5z+Fj+ tgkTFR0mJ18ZLsrJv/kNBgwYYNg53W6fjXbyxClMR9+IZdlLfbmRNcHbMm9m oSYyavIaTcUl7E3Gt0d/wq43BmNSZC0sTYxDWlQ4Vvd9TPgi0/tupqW9nl+N k4P5REiodmAVxKeHDx/m/mrU3+gc9e3bFyNGjEBOTg5/L9i2JeQY8HP4+GLb M2GiIsHk5CvDxTiZ7BOvDRmKgsJixkPicy6HyIe8JGsxbrbcgGU5i3lOelp0 o9U1p1fwsJX9VcSanciVvmNn7UwubIsyMSM+EpmxYVgQE4b0xg14DB/Pd+Hx im3RWp3H9aueB7JDUJOQtgiVlw8ePIisrCyMGTMGzzzzDAYPHoypU6di3bp1 OH78uGHHkLpa9bWQf6u/8XP7odlvTYQCTE6+MpTFyWeYbr3hFqaTXxqEEqtd +J7pMRv2QisGPN0fSQmJ2Pvtbl0j+zIM2b1unsuiRH/OfYlLGE/t/BaL2rXF 3PDqWBRbC9NYOz31YyA/j8QjHDYn96cQfPjr+E0E+g8TZ0pbDe3H119/zXmX fIYffPBBvPnmm1i7di127tyJc+fOBf2e3K58pPcCz3NgfqHLgdlvTYQCTE6+ MlyMky033oghw4Yxieth2s/F1/KOHTqCkcNG4BamkadNmoySomLxHdDbXlF/ SfNw24VVJkcuKABO5+Lgq69jds0aWBUfhYzomlj7VG/gh++ERtY53+rw/mz/ iauB4uJi4/mOHTvwzjvvoHXr1ujRowdGjhyJL7/8ktsk8vLyjFxuBOl3IaFy c2BOoWD5LX4OzH5rIhRgcvKV4aI6+Xe/w2//9CfcXrUaatasjeg6Uaj6r/+h Sd36WJqVDY/DycnTw7iY+NjmcjL+dom8yHouTZQwrrOytmoVJt1VDWsT4rE4 LgIzk2JhX7+CvX+e5xai3SCzBT1SPuVfSFs/G9K+sG/fPr4+989//pP7Srz9 9tt8fa6AjSfyHKlcHKiL5XmTCMw7pHL4L9HIgds3YaKiwuTkX46NGzfyuAU6 T927d0fnzp2RnJzM3+M6+aYbkdCoIZ5+5jm8OfQt9H24N2reXoXx8n+wcvFS uJ1CH8p8FNTclLuNnrudglh5/PRezG/XDktjY7E8OhLpibE4lzpN8LGnGF7N KTLdK/YRaboItPHKaycfA/2Fy+JF1S5cVFTEdsuGlStX4qGHHsI//vEPftzT p09Hfn6+8d2KBrPfmggFmJz8y0HnpkuXLjyulx7Jh4seiQdzz52F5eabMej1 17n/m8clApzPHzmB5Jh4RNUJ55wu4uj0+DlN2CrcViu3D4N4MPcsvn3jDcyO i0FOVDjmRNTB+meeAL7/lvvFOTU7XHDCLbO7ycA8WjZ0a6Xm/ypXBtoMJFR7 sHykNUvSwhS7/MQTT/D+0a9fP6Snpxt+w9wmfgW2hWsNs9+aCAWYnPzLEWgL JUifgdO5Zzgnv/DyKygsLBa5MUvs/HHrl5twg8WCt4e/hWJHCY9ptjkox7Hu h0z2Y7I/FxXg7KJMLGraHJmREVicVBc5HdrBun4Ne7+Yx087edS1W+dkr+Hr LDbl08TqdVPX5VT9K+t5yNfJ/kvjBuXyGThwII/hoBg68iOmfBIq99LnVc1d EXnZ7LcmQgEmJ/9ySA0q49RKSkqMvzkn33AjXnp1MIoLS4wcmd5iG0oKCvHn P/8Zjz7xGPYfPcQ5mXtcuOwi3oN83/LygW+3I+fhB7AgNhbLEhIwhWnlw5Mn AMUX2LYcYkzg64IePY+nkhRZiUGRNojA3JbyOkq/BuJUimPOzMzEuHHj8Oyz z/J8EsTJX331FV+fk/F3amweQeX4ito/Kup+mTChwuTkqwvJ0+fPn8dvfvt7 vD70TeTn5sFjcxk1posLi/DUM08jJjkROw/ugY0ncNOLndoZJxezduwEvh0+ FNMSIzA3MhxpMTHI6d0HOHyIgq/h0dwikZBX4zYPL+dlXf/y5G8Q64eK7YLe kzpe6nviUPJXmzRpkhG78e6773It/O233+Ls2bPGdy+2thaYp+JSdZjKA2a/ NREKMDn5l0PqTpWviIuI906fPs1jRgYMeAFu4mP6qNUBzSHqhMzPWgjLzRbM W5HNbQ82exHjWsqJzPg5rwQly1Yio1E9pIRXwYLEOLxV/S5g1zfCrkE2Z568 CLKUNedll15FFWSzMAqfCsjcEgSr1cr91d566y1uA+/atSsmT56M7du38zzE 0q8t0C6jIjBGT/pUqDHPFQ0VcZ9MmAiEyclXBjoXkuuk7YJAuSNvueW36Nf3 CRTnFTIS0wydTHy2a+93sPzWgt79n8DJgjPgJEocWGhD8Vc78XGrtkirfRvW 1K+N8ZE1sW3EMOA006wuL2wlVvEjMiEy52VNl8eaWB90uf04mfhyzZo1PI9E VFQU6tevjwkTJnCbMXGv3W43/MzKsnHIY1Wvf2CuN/laRewjFXGfrnsYzvSB 9RRkokT1M5eRv1Ar/adc9vZ9L9hvBf9+0Je1y2hlHc9lxHIZHKtvK312Bto0 b43GDZuYnHwJBJvLB+pREQwC0SnI9033Oy7xijg9yoSRqz/n3HqmAAteGoL3 EhKREx+BeVHVsbz3A8D5fK6hNYewGfPccdxu7DU6HPExecVxTnY7YS0uwfLl y7kWtlgsuO+++5Camsp9hgmq37CE3Hc1p0RZ9T4kgvnVVUSY/bb84cenhu8m ca++vq02TXe017zGl7i/qF+eb/hzoZKjVtNlEFnr7PqjuFVkxKza5BigjAXK bhr10WTtNE+Q50bTj0czqkjov+7y/y39GERTDkM9DrbtBSlzcV+ze9AyuRk6 3NfR5OQrALf50omlfJwUH+KlnuGCzevlfeQCO9+HioAvzwGbGeUeZC1rVjae jYjDpPoN8FFENLK69AC+/oaRtsvPTmwkpvdSzIYbxdYinDh7Cnv378Pc1DT0 6/0okpPqc11M/muUe41wPV+76/nYKwIUN80AXpYcptdWp0bPAzlZC8LJgVys 5g3XfEveDvg42ePHyQoXK78TjJM9+q76cbDByZrevL7jMX5D1AcyOFnz/a7k ZA8CRgjluOYyTr6XcXKzBiYnXwk03ZeCXwvum8wzDKHQbePaeOMRO8Zk70Py M1Nh6TgUlnYvo0rHwWjWtj+eb9wTo5p2wuiWXXBi/jKmkZmKtrqNvmC3Cpu0 3WrDTz8dwoYvP8fkGVPwxLNP4pE+vTFm5PtYuWQFigoKuU3C2Cfl2l2P1/B6 POaKBMltMgetr8kVaneAhi3bfuF7onOgV2lSo2qSB318WMrucQlOl7wu99vB tuOAiAlw6Z6oXr0uG6+VGcCxciyw63/zffXo+6n/mBxn7HqzsS1Qk3WBUtIz 0KxVazRsZNourgQaP88UJ+0S/hSayCd0nr33CePjdqOWwHL/WFg6j2dtAixd JsPSbQb+0+Z9NGn5Jnq0eB5LP5oLHM8DbGLNzm138Lyf3+7ajWVLlmLs+6Pw 4sAXMGjQIEyfOQObNn+Fk6dPCftDwCWidUd1Xa4i+g9fa5j9tvyh0qvgLa/O am6/5tPCF7Edc0hu82lSn63Axr5MjXxRWdMcup8SSnOwOkgo0tmr+atdJ9uu ExRTYOONMtNQ04wVdq+xGfk9ycvuUvvsqynvOw9evlVqdv3v6XNS0ahNcyQ3 uRv3dTA5+ZeCzrVDH0npzNM1IivuYXbq2gzPgKXtm0wfT4LlgXmszYfl4UWw tE9lr0/H39tOQO1mQ/DJyt38QhbnW7F50zZMmzYNL730Ap7o1xdjx4zCquUr sH3rNpw/m6f8rmhOt6vMGI7AnJfXC8x+W84I5EJNahfBPXa/5uMxdX3On89h fM/B/nJwPndxLaRJTqbmtYlaDx4HdX7FzqA2j2gBXCn4Uqhhtx/nK7aIQF2v Hm+A3rbrexV4fOrYoslayPqcISVjFpq1booGTZIZJ99rcvIvBOdFY8wT14Ey QczadBCW1oNguZdp5B7ExzlMH7PHroynO6XD0j2TcfUs3NRuJHoMnozHXxmB +3r0QecHHsbkqVOwY+dW/HhoP1xOWj/0+F1zGUttxGrr+6Lm/pF/X48w+205 Q3KypD7d9iD5T+pEVVeq9meVjyUn23nz53OnbgsxbCB+64eX4GRNHTTE9/3s KV49jkDaHzR/zVtqDVPV4Rp8OXiVY9TkZ6VNW9rU9d9MS5+JFq2boGHjZLRv b3LyLwWdIYqxozNL5588fk+zdt/rTBu3eZ3x8HTGvbNhuZ9x8MML2d9psDzI HnvOYXp5CiwdRuPfnV/E4Bk52H2mGLlWN0qoVrU+L3O56blXmNCU4Zr7Suta weVxGn4TgTq5IsZ0XGuY/baccQm7rfoxvz8032eD2aMDNXQw/laX4rTAffAz NmhGjUyeaFFtLo+IsaVG9TP1dSIjr2MQfV/KXq0pHBz4aDSPaPpNnZ42C61a NkXjRiYnXyn0lEJ8WC1izylTz109B8PSZSTj44lME8+H5R7Gvw8wPn44nduT Lb1mseeMq9u9zd7rj3m7z4Iyvxcbp5y4tpDPzRxep7juXvj87fg1d/PcRIav ULB9uw6v4fV4zBUWZZFoWS69Rt8uzcWlthnE90JTSVpyLjWKG3CQgGXNxt4s ZKxawPTOBWolouXLVuR7jfIlUD02K5sB22287prmEit50pei1PpksOMKevy6 dtc/lJ6Wyji5OePku801viuBYvQicxa5FZ9kf1bvNZTp4GGMfxkXd54Jy0NM J3djPNyTuJhp5IcyYOk6Saz/tR2InINWnHKJsVfUdRJ2MqpEYuV6GP4dleo/ aU5o+hpwYB7iS/kaV2Zcj8dckSDteT77gs++ZnCUnPOp2lV/z8u4k3SORzdB kPnA7dH8bM58nUS1kUgTMPnzUw6w/AKRS+bseSaSTgE/HgEO/ADs2AV8sxvY ugP4YhOwYSOwnrW1G1hbD6xjj2s+Ze+x1z5jj9u2Al+ztnMbcHAveM6D87mM qy+w3ykipygeI2D4V8i1RdL6qj9rgF+dl2q8STr3iO9RHF+LVi3RqEnjSs/J ar60wGMMrMUc7LgD86z55YSgcY7OaZELR/ecxdYtJ/D2pOWo2ullWDq8xfQw 08n3T2caeS57Po9pZ9LKyxgnL2GczLi6w1hUf+h9rP/Rg0I/s5Wde8rQ+q+c KxlaWV5foyNen3bjslBZ+m2ogrqn8PXy6mtmQThZ9X3g3CpyXrm9ej4VPTWM 32cYSXsoryJvpGHzGO8yzj3PZpinGO8e+pHx59dwrVvHeHUNHDnZODTuQ+x+ 7x2see4ZrHv6acxs2xYzW7XAtMaNMCoqHG9XuxPv3sVa1SoYcft/8c7tt2Hk nf/BsDv+hffD7sT8Vs0wv20rLO3eFZ899SR2Dx+GHydNQF7WQtjWfQpt5072 u4ynz54TdSnsej150tX6sTqL7cZxaGQLKUNDz56djpYtW6NZsxaVnpMDEczu qoL6BvmTqXkuJGTeNfI5O8X6wc4d27EiawE+HPEOBjz5Kl5+6QOMmbQUM1Yd xF/avgJLp5GMf5k2fjAdlh5MHz+ylD0uZ1zM+PnB+UxLj8IzH3+OH/NEqJ6v D7r8OJnWDg2tbFxLk5ODobL221CBkIXSnyG43YHni2X8S7WCnXw2KDicvM9K iJBVNwfiMdJADnYXFDHtW8RulsOkeTfDu2YZijJm4MjIYdj13BNY360DFjdr gOm1qyC19p2YE1kDKfQYVZO3+TFhyEmK4W1BTE3MjboL2YnhWNkgFkvqRmBR XG3+90L2flp8OBbVT8CcmHCkR4QhI7IO0urUwaw6YZhYswbSkupjeedO2DHw BZxg3F+yYB7T1muB/bspuBeg+C2bXew7E80eW7HP0BnkvMxJnYvWzdqgSYPG 6HBf5edk6gNS56pzejW3pdS/wfLBy89TvU+qOTdz5kwMGTIEj/frg/Efv4es RXOwd98PcLMh0smmNIe+L0aDRk8g7t438IdOo4VvctcZjItTGE9nwtIzC5bu M3HHU6n4dK+Xu+74hWRy33Q79/mROtl/7RbwxRCZnKyiMvXb0EWAnVWH/FPU bfdyz/5izYYir5XxsZ1WT4R/G2lN0peFjNsKGJflMj383R6cW7QIez8Yg+2v vYLVD/fEvOYNMT22FmaE34F5MXdhcXxtLIyqiqWx4VgWF4FsxsHZceFYnBCJ rMQIpIRXw4yIqphY4zZMi6yKyeFV8FGt/2Bc7f/yRs8/CrsdH0bXxOg61fFR eE2kJsZhNtPUi+smYlFUFJbFxiGHHhMSsCg2Bql1amJaWHX2uRis69weu14e iJ1jP4B78xbg5Em272dE3l0X+VCJ2GsNIhe6YGiN18KYPSONx/E1b9j0uuDk QG0cmG8nmFaWfEzxG8uWLeMcTDWZqf7GlClTsGXLFhw9/hMKbbns3JZwX2Ee G32mBNMHDsfjDR9EjxbPIar5i0wzvwlLlw8ZN09kvDwVlhbv448Pjcfs79zI lyHyRqi8z8ve5zOpxKoa/TzAT9IER2XqtyEJLpS9vhwtih+CGmNh87A5oNvK +7kR++GmPF4FojblsaPA19twbt58bHrxZSxq3xULGjXD/Ph6yIyKwcKIcCyN j8Un9eOxhHEu6d75sYxDY8MwqkZVDLnzdrzN9Oyr1aogpW0bzO/eFV+9/gp2 vPMWdn/0Pk7MnYWC5Qtxfnkm8ldmIX91Ns6uyMLJJZk4szwb36fNxJbRI7Fh 6BBkPfQg5rZri4/Yb75f5b+YUrM65kdHIicumvF+HSxNiMLyutFYFF0baYyf 0xLqYnG7DljT5zHsHzMG2L4ZyDvNuJnyi+VDrBU5dD9rL+fl1OkpaNOoOVok V36drGpjmas9WB4daZMgUO63hQsX8nrMMTEx6N27N7KysnDgwAGea9jII0xR Pp4icG9EGgfP5WLta4PxTnwSPki+D4PqdsUz3QejaedBqNp2AH5z9+No+Og4 vJ22A5vY8EmZ4jQ1PInmdUxD+HKWmJz7c1FZ+m3IIpCTdT72j3WTC+MuYR++ kCfWzYoYJ586iSPTJ2LVE70xtWkDTKwbi6kxkUiPjcWi+ERkRcViGePlRdGx yIiIwLTwMEyMDMO05ESs6NUVO4e+ityMDGDDl8Du76hoJq8Hz22+pxkvUi3J s+zOK2K/Zy0UdukCpsOtbCywl+j2aquwVdPnTp0QWvf0KeCnn6hgO8D0+tER w7GyayfMTIzFFNLT0eGYGxeJhfHRWMz2dUEE/c32nY0bU5o1xPrBL8K6YQ37 XVojZM2WD6/jArwemgV7MSc9A61atESzJk0rvT1ZPQ617hFBzQdMtejmzJmD xo0b409/+hM6duyIpUuX8lwSgTXtfPYOvW+V5HM+3vXhKExNikI6GzfTkhpj bMP22DpvLe+ix+3CT87ytwicdwhf5iK+RggZ5KP7x2v+dgp1LQA+vVHKR8gE R2XptyEL1ecLcs3PiLbTY4+9us21WPifHWWc9+kmbBkwGG/dWQ2zopjWDP8f z5e4qG4UMhOjMJvp0bTEOMxr2hjz27bFJ48+hp0j3sE5ppXw7TeUOJfx7xmR ezyf8W0x+7USm/Bls7EbrqBI1JIgv2PKX25lz+0e4SMnG99R9hrlQqfP0n1P uWSIo0tIw1vFvV5M9zv7rXzG82dOQtv0JXZ//DFynnka6R3uw+KGSVgYWR0L ompiUSLT0my8+DisBt6reRcWdesuxosjbH8LCoX/hseFtIwU1G/ZGHGNktGu ksdWB9Z0JtAaHtUIoXW69957D23ZNSY9THWQNm/eXEpHl1l/g06R1cnzIV+Y Mx8ZjRtgaWxVrK5XC6l14/HjhKnsfQ8K3SLmmqp5WG64lXO0iBsiXxoRI+Lm kfVeI/7H52cJoTl0fxuPYssotYZiotL02/LELxvv1Vg3fzc3oY31CSFpY4qL ymV3ww9H4MleirUP9cXkyATMDI/DwrgEZMVHIKduBFIi78LUyGpY2LIJ1j/6 ML5/ZzgKF8wFdjKteoZp3qJiwcHEm+Q8R/c6d6DziPtF+gBr0ucMwl9Z9cej R8o1I22HxutuI+8u9zfl1m+KCRB5L7i+pRyQtIhkZXct5Tsn37tvdqIoZTp2 PPkoVrRthdnsWNKiwrA4idYLmd6Pi8F7d96B3a8MBtZ/LrQ3myNkp81Cy1ZN UL9JfT22er3gYRiuKTC6dik7vZxTl479DnSNDrxW5QU6Nson/MMPP2DdunUY PXo0t0dQ7Y33338fmzZtYkOVWzl4GAdAtgTqW3yN2C3yJmte/bM01hbYULh4 BTLbtMN8Nn9ZFXsXUqr/H75//WU2dh/h14t4lnQx6YSbb/ktv84a5Uyhdzz0 joOvcRTyR/E5fwOcycmXC5OTrwwqn2rqi3LOpsEIXTYowsiDLOKFZRYKu6ZH ItN7Loq/yGPamM3b934DB+PWrU/2xQzGVwtiIrhddnFcBObGRmBMdARmMJ20 dkB/7J8wHiWrVwEHv6dia8K+4bQLv2CPC35x1IEEFEhGZb13qRgPDtWeqDSZ r86jNyc71gtsH48z/fz5Fzg8YQLW9X4I6ckJ7NjCMC+6JpYkxWJijf+yOXUs G2feZrr5M6wePRJ9mjVFm6REdLi3NdZ+ugoy11GJ2+1L3xsQ3Chyibh5jiSR j0lGGPqPjb6vqMZSncOVObhxqoLcR8HW5OTzYH4T0mdC/R75SVDdT6o7N2zY MDz99NN48803kZKSgm3btvnl+fc7t3qMu6aPjlZdwxaxsdEjcwQSH1Ot6vWf 4cuHeyE9JhpzIiIwOyoSXz7eD9i/j4ry8bPF7RR6P73BcrMeH+3vLK/mmjJW HIP0jeDjngkJk5OvDNL2W8p+puZSg3RT03jMMe/LRu5Mj7FkzUF8XVIgbLYH voM9ex4+f7w3JkeHIS26DuNjpiHrxWJh3WiMvv0v+PShHvhx6hTkrVoNfP+9 0NPk++t0CC3MdKnM+unL4FOB7gV1fktxgKfPAN99g5J5s7Gx3yOYGHEn9/9Y 3TQZKdE1MD68Otb37YO0+7thUFI9PJaQiD5tWmP75+v5ufToflc8nlsOlMoF En+64TbOui+vfmD+On9O1nNXK/4xKqfw2sz62puMSQtW10KuwRFkHSN+GpT7 8OjRo1i7di33V3v++efRr18/fPTRR1ixYgX27t3L64L42SIkH5dq4m1fVJ1e 34OOpbhA+Id/swurunXmfo+LEuMxp24iUpu30fPTl3DNQN+TGpno/iadk1Wd YeLqweTkK4O0/zrUFyQH6JzgYNzo0Dy6T5BQj8TNMubDWOeje4TW7vJz4Vqz Auv79cWshFjMZTo4J5HpxrhozK6XgLdrVUfWQ71gX5oN7N7FNOYxsRZnKxHb oEa6WOcQr8HFovld8fK+/PT7Dq8+aNnF2qEtX6zrHfqOabhPsLRbJ7x/53+Q VbcuFsTHYybTcenJDfAx45ARdZPwWuM2OLzmSz4/Jk4u5j6xIsMNj/Mtw5/F lyvUp4EDtZ6/Tvb3WZSc7Hb72zQCY4QJNpvNTxurte2pUa3SzMxMvPrqq3j8 8cd5bWaphalmnsz5XmobMlmJronFeOP11wf6jnr4c4+wH9Fa7aG9WP3sk5ge WRvZ8dGYFRuFGU2bAF9+AZzN5Z/TuD+8yCjIbcgeHydrJidfE5icfGXglALo +kOfN/I6Y3q+NFKomtOIC+E2PYrD05S4JrLrEqcWF3GNuPWNN5DSvAnSGOdk J9ZlurgeptcJw8jaNbH0sUfhWLtK+L7lszk/1e6l+BCXTTxSrAVxm87Hon77 Rfi4vC8/3de6HVTWvBCa1MrGliKxLvjtLuROmoRZdzdk/BGFrOQkZNaNR3pc FI9FmdbkXpzKyAHyCnjSBso6WeQp4nbswDyRKp/6cbKm8nIw+0UQe3KQ8ydr cQbqX6mh1ZzttD5HWrhLly5o2rQp9xsmP+KDBw+y7pDv+5ky7CI+G4fYN+EL LPNsw3/OJocU0unkt3PsJ+SweciEhGgsTk7GvNhYTKyXCPuSxcJe5ixiEtnK +6xX2hz07RAn89Na3n2nksLk5CuHf34dur/1Ok2l8goLzcrT/HiFSwP3V8g/ D5w8hrxZM5HauAnj33CsatAES5kGTI2Kwag6dZDd5xFgy1fCxyyX3TMXGF9Z vWKCTvqYEsgYc3AXr31GORBpTSdgyUfuNMp73UruBp9bs/PlVOcNpD2pNhw1 0v2k2/btxrahgzEyrBpSYym2JQJL4iMZnyRgWceusNK84cg+9nnyDihmw9U5 3W4TkJPOzzdL18FKXSq19lSZuZ0UBNqACWqsnVo3g3iY4jViGQfeeeedePTR R3lcnawHqsZ+qLWWA3P0SDu0W48ncht2cn/7inGc0j50/gL3n/zipf4YH14N 2cnxmB0VhWkJdVE4fx4b19h5tlKVEZsYxTWPf44U9mix3CjM1SZ1XBOYnHyF UG15xt1fmo/J70DmwBJrbPpHi5ke3LMDi3t0wHtVbsPcmBgsTaiH9FqRmB1f Hyt79caFrBxhZy24IHzi3DoX24XYJu516fEUIt7PzfNklsklfnxc/pwscjB5 fPNt9TRy86dLrE8WMM1cwPj289VY0b09MpOisSQxCpmRtZASVQujIqvhwLh3 gYNfM+5h8wh3MR8b6XTzq6DpS/+GwVhD6fzQvvWq0no5yLimvED3EvGv5FWy N5De3bNnD/eNiIyMRPXq1fHaa6/hu+++87Mtk21Dwt9/WPyAmidN5Xv6JZFP QszDDD5WbBZOh+77Tjn8TpzC12+8ickJUciuF43ZYVUxg43952ekiHxRRecg YnTYcfB8UfwCGV2Zdstyw428f2mm8eKawOTkK4S0BXulPU/VK3Idj+kNr4Ov sIB8wsi+QFx8hGne1eswIzECWQm1sDwpFgvjY5GeWA8L7+2M3aPGAT+dZJ91 iJhXyo9G+YlpvZznNBbJ4IjTrHxt3QvB/MICENQfrBQflz8nc7uO5vZxiZL7 3CNf5r4qZAdlnHz+OHZOfB/vN4rHxOQIZCRHYkHd2rx9WOvvWNenC7B1Hf8c bIVsOy5OuzJvu1tDqdizQL7VjH0LXPNTofv9KTqZ/CTI9kD+0uQnQb5q3bt3 x/Dhwzk3SwTakyVUnRxs/S8QTm4/J59gr5/sh8e3/7wPnmdj+uHDODBqNMZF 1OG2+SUJsciol4CDH34o7BkFjJOpLhjFTFJMH7fx6ydNNwPRKGK56UY+Boj9 Kt/+UxlhcvIVohQn+251433DZ4h8IShH23nuq3Z83ARMT0xETlwYsiOqIDO+ DtIbJWPTiy8Cm7aK+BC719+N1ph3Mx7wyDUYsSZOnvvBc72gFCf76hUHiSP4 VSH4OBgn85L2tEbqlLnydF5m+veTKR/isQYxeCE5Ch80jMOU+FqYl1AT2XVr ISOmCj5mrWTudODYIeEL7RI2I/Lnomr1ZCngp9bjXxtQ5V2Vl0v708oL4cbp k6ewfft2ZGdn85wSffv2xeuvv47U1FTs2rXL4Oxg9g3JwaqvhozVu5gvnQTp 1RJdJ4uNKjsrPsE6Bzvi44fw09hRmBITyfi4HnLqJWFGZBTOjZskfNepT7Jz 62En3eN1iPlDQDFb6ubUxyw3W7iSFv5D3sCBysQVwuTkK4fX48vL7XIL/pBl OPjcnOs00sgUJ3eO52jb+sJzmJdUD1nRYVjB5pEp4VWxuEs7nMqYyfTzAXYf FOtcD38/DsN/QHi3ueEKzimq3dTPfgr4apDKutjlB1+NP7d/7mjxpj8xcuEv /LoXzJ6O+5o3QoekeAxo1hjLnnsKGS0aY1ZENSxl3JzFOHlqZBUcGfEmGDHy QYumGF8ctWPG1lMYveZHjF9xGBkbTmMfk4jnNF/9KafHRzMuJtS5DyN855eu 8dGjh7HqkxWYPGk8Bj4/AAMHDsTHH3/M1+h+/PFH/t3A3MbX5vwJW7xLkrBX uL2LAYRi8dkotO9rHBr1FqbUvoPnGsmKicWH1cOQO4H1tRNndf8KF2SddLFW DT3HNgwbEr3EOfk3N/LfFH72JidfbZicfDXAuNjh9AlU3Wbg0NfyhG+Fk6/l aRvX47Mn+iC1XjRyEupgWb1YfFyzKrY8/zTw+VpGDmy+bS9g020r3F5XaX7V fPN9tx7PWma8imoMLYOT3eXOyTBqDvrqcvv7nInj0YxpMv2Zkp6BZq1ao2nD RnjsnvY4tGgxXEuXYlm3jphc87/Iiq2BnLpRmMr4Z83A1/H1wvXIXL0bXd9b AEuv4bDc9zos7d/Fv7uORLe35iL9yyM4ya5frl2Xhg6pYcU4UcKu7/6ffsL8 nBwMGvwaej7QCy8PehEL5mdgx44dOHToUKn1uF+n5rJX1LMjTeDWfOMX1Yoh P54Du7Gh/2NIrx+B1WxekVH9f5gSVhtHRn4IHDojYjLhX1OhVP9RJDj1SMtN FjGv8eo+2yaFXFWYnHwVEMCDdoewYRj5KqiWB9mEP/0CS7t0x7TIOsiIron0 2Cp4s+pfsG3Ue/Ds/kb4Tzhk/gAHt0F7NKfCoZK3gnBwMF2sausKqpPFGhX4 /Nsp+diIp5H+EMKv24gFYW1m+gK0aNEeTe9ujV5t7sfulZ+JfB1bNmLTC/0x NTEOKbH1MCOpLYY27Iknu76K+o+MgqXrCFg6vQ9L94mi/mdX9tjsRdTs8TbG f7IPR51CLxObUmzGyRPH8OGHY9HnsUfR8p62ePbFF/HJ2nU4cuwo8vPOsbHT Vuax/Tr3lnAadrsc8PmrsCfnCoDvD+DTvn0wk/W1eWzOsDCmOqaxecSpcR8B Px7Tg0B8NB5o4pLTMyPSURPHdOMNFmHbMDn5msDk5CuEyoWkTdy+Pk62Ph5P d6EIRTnLMTmhAdKi47EgNhYZiZEYUevvODLjA+DUMV/+CYrBozmnJgx5mp6j 0sGbW+ctHaXdBfxbUI2s2gsCak2VA2TMjTBZBvoT+nzTRNUKPQadtZlpC9G0 RUc0vvse9GzXE3s37RRx5GTzOX4Mm4YOw/CoJngvuQcGth6IJs0GwdL6LVju nwBL7zRRU+4B1npRHeYpsLQZgn+0fwWfs0vx7fFivPLme6hfvz7u/N9teG3w IKxf/ykuMN1Jcdt2t8gfQfZUj8eXM17mnf9VoceEuosKRB+iugCnyad7Pz59 tC+mR4VjYRxrCeEYX6cKfho1XMTd0/hl9fKv+K81qHF/MHJX8Dp7ZN9mnP97 i0U4YMi4RhNXFSYnXyECF+d1Wy/ZHrj9OC8P9uxlGFa1FtMpyciKSmT6OB6p LRrDviaL6eeT7Ht2bqPkBmhuQxaOYB69do74z6XbGbwIqom9Xv0+QZA1Pd+u +lpFzW+rinzfPsrVSNlmps9Dk1b3olHD5ri/bSdspvqA3DnAJuJMCp3I33AQ L3Z8Fc2bDkLVNu/B0plxb0/GwT2pjlEG42PWHqA6zDNhuW80fnv/u7BEdcYf atTHkHc+4OtzfJseWedVen+TC4yL25a47SDARiHtFsHW9a4WDH8N7j/sErF5 NCYVFgHr1iG9RWuer3V+dDRmRdRBWpOGODBuDBuvfuS1a7nPdxljtxwnZd4h o5Ye9U2bC3+88SbIfEIVr/+EPkxOvkLo/CjDxcjW4KR1bie7Py6cgzU7C1MT kpDJ5tErEhtiTkQclnfpBmz8knV6xh32PMNfQzPspkKDEAs5uE52+/hY5WSD YKVmUR00/JfHgvsql78vXDBbucq9huqU9mT9AGanCXtyg8aN0K1zF2z4dA34 vIJylVEuuhInvwTf7fegCuNky70fMI2cwhpxMGnkTKaP57Lns2Hpytoj89hn 3sVtXYbimEfPa0bwOETOUa7UvTxOXt03suUaHw2oBXKt4FcvlftH0Fwsn8cS nc+YjXmtmyMjPprnpM5KSMDcps1xdNJkUceFcTfZW/ixkKYOXEPWr4GRF0s/ cg4XG2MKrfjLb3/H+5y0p5kMcnVhcvKVQXKe1U26wgOnh+zBTKsUnYU3ax5W 3NMayxMTsSg8AqkREfiiT1/gy00iZ1txIZ+j8/Vr+HxdNY+idxUekr/nZ0s2 nMdckJ7J0iah2gJL+dcaXF7O6+YBx8hDG+GbL3NOlrzBA9K9fI4+b/ZMnquz QZP6aNXxHnz25TqIWhlsPHQX8jNA/m772am5oc2LTCMzTu7BuLc74+Hu8/TG uLkn+7vHQsbVpJ+Zjm41CD8wmi2QLoJe3Y5E+dQ8LmHXZvcM2TCcXk/QUyf5 MjD27qqcrsAa1jS3ovWKHw/zerSTkhN4vS5aP6YcrvMa3g3voqVMH5/lPhQ2 O9Vw9Oo86xKa2eP1t3FpAXMqw/9Hg+38Bfz9z3/i55ei2O36+oaJq4frnZPV 9Q3jBYPr/DWn1JuB37d5lJwXXsYLF84AX6zB1gd7Yn54dSyLjeJ6ZXk3po8/ /UzkR3SI2DQRKyVuCIqLUG3FbsoV70CZ94r/PF/ysVtZDwwRTlaOTXKyXMsz LkUQTm7VqhEaNqnHOXnDV+vZ5yhuj2bbJTwu8LOfjmHEiq2MZ/szTh7NNPEs pomZTr6feJnqfDJe7sUeu2UK7dxtMv7V7g0cKRYhfi7KW61JK7bL2F1JYfw8 6/YLPq4yLc/9IvUEEZeTV78MM1PwD/CaHjoPuzzCac/Kfm/zdmwdMhQj6tTE 9LoxmFs3ClPq3InMVs2AlSuBM2z8tzEetvuvk3L7mqYH53mD7Iyx2OcxbBwF Z8/j7//3V25Js+ucfH0zyNXH9c7J0nbGo1wNzabbAmSeY32NSfZnr263JX8g nonXIYjT5bYJf9BvdmB1z/uxMLIWPkmgfFsRmN66BfD1Tl7PgXKIc2dZTVon y5jvXvRmVeEbP2RMcFkt6PavMdR1r8D+xuf70pEb/mOfzH0jDk3z8QPj5LTZ KWjTphWaNG6Irh074Ztt29hnHDi0fycy5szEwKGD0fHpAej+5gTcPXA6LB3I njyZtVTGw4uENn5kMSwP5bC/2eN9M/HHe0bhnofGyrIZ7FrSPKaIry46vHax i35jiJ7vU/YVr+4crI+xtAbodjsNmzjPdeJx80bP5bHysZNytrJ+53DpsdmG HUvz+anTOF7Cfs/GvpHHBo6zxTiXuRSrO/fCzLAwZNarh5R6CRhS7XasfvZp YMc2MR+zu/SkcIHjcxCfw2D9QT/3dJ0K8i/gb3/7m36raOXstVM5YXKyT5f5 OFlf99d9fWh2VqK5jfm01JhOypvDnerdojYd+UX9eBAr+zyK2TFRyI6ohZz4 SExplMTjRHjNOrLh8XA0PY7EsAFXbsiacSrU/MLB5vvyNfk9aa+lx3nz5jGd 3ApNGzdBq+QmeOqhPni0Z3d07XQv3h4xFKs2fo5dx3Kxhw2R0zeexS1M/1ra vC/W+DqnMB5mGrk308fdZzPdnIo/3z8d0U1fR6+2L2HZ6HRg3yERa2w9DVrp 4jEV3I1GtWtTrrdiGLmVvWKtzf+6Cm6m8Zuv+UE/Js1r/O3U64BwjvbQ+qAn uFalXEaUF+Mk26fde7B75GjMbtEG86NisKJuEjLi4jAqMgLfvT8KOHgQOH2S 7ZpDXzMOPlZfLuS1uXDhAv7v//6v1DU0cfVwvZ9TOV/2RRj7bAEyyJdYWfXR FHVsPHztzSm/TTksTh7HlqFDMSU6CsuTG2AB4+V37vwf3CuXsnv7gvDDYNu0 kx+yPinnzys51Hg26ZMQ6KtAn5G+CmrtDQk1Rw/hww8/5Pl8br7xFtx6860Y /MJg7P32G1zIz0WJvQBWdp7pzFKGs28KgN5jV+PWjkwrdxgLS6fxsLT/AJYu HzJ+HsOev4NaLV5Gl8ZPY1ibZ/BuTAtk3tsZhz8aCzDdjQsn+LUjO5NMV+Sx e41rSOu6bj2m0q1UDiAedlD+VEOPeoR9yqPk7/HjXfjZ18lUY3O5udbmfhXs uJB3EnmZszG3YwseT74gOQYZifH4uE4YJicnwzp/rljLozU/KxuQeB7tKx/z 5XUhTiadrL5u4urieudkDsWeGcjJZJ+l/D6GbdNIuylttvoaUOEF5KamYNjt /0V6nTqYFxGBSVFRwOIcUfM5n6qu27jeInVN80aew/E6Of3qupSqhctaB5P3 Omlisg2VlJTwmnNUA7RGjRr45z//iSpVqqBhw8bodf+DWLvyU0Y/Ygz18GwM Ig/IBbZppnaxnxH081M24r+dR+DGdkNwY5cRTB8PY3z8Mqp3fwWtuw1EvxYP YUTSfUiJa4K5UbGYFR2JqXfXxb6PPwQO/8AInvHc+QIj3thDNWspN4XXBcHK HsXnW+hSl0cf7f1swijtR06U7RQ8T6fDbnfqAfouMd6fY9p4+5dIf7AzRkTc jrQG4UiL+S/m1quNKUnxWN2vn8hFf/gnkT9Q1jdw2f372C8Uy9Kvr7CwEH/9 619LXScTVw/XPSdLXeKVtkxfbh63HqNBTMo5Wcb+c8EscmI6HcWiLvPX2zCm dk3MjwjD2nr1MT8hHoUpKeIeIX9ZTdgebZ4iIyaabIfXC2j8KSunjnxd1clF RUU8v9pnn33Ga9A1btyY51ebNWsWcnNzkZGRgU6dOiEpKRkd2nfDhs+3iO3y a+fQc4GIOlCUd6iQtVz2k2u/d+GlyavR+bXp6PLmDLyStgorjpzGruMnsXLy LEzv1BMplI85LgFLIupgOdOgFIs8jWnQQ+8zbt6+B9j9PXA2X/iguV2GXzjp XxE3ohmmYPI7p+YN5GCZS4I7mQh7COVCtnscMCo02vKAn/YDGz7Fvldfwpg7 b+M1mhbXj0J6dFWkJd6FBW0bYveod4AjrJ+dPSNiZsh3z1qsr4UEruvCfzz4 GbxM4yNx8l/+8hfjGl73/HENcN2fU7nQEsDJHp2P5fqf8JmHb4GENC7ZD+2s /x86iLnduyE9PBybGjZCavWq2DegPxNne3RfI6GL3R6hkx1sq1YelQceE3Y9 XQGZY1jNC0wgLqP6RxSnkZ6eznP6UA2k/v3785pIlAtegvISz549G82aNUOr Vm1w771d8cUX2zgHihwhDp2XHYY/sY1d32KPiIM47RB54Sg/HFmLaQZTQp+6 cB4a05qH3hqOxY2bYA7j5KWJcVjMxtcF8QmYWDMM71Wrju0vvAIb5bT+aiO7 9j8I7VxgF/lUZU5VHgPED0x3V9R9JWQfsnuEww7xcgnl7ddtxU42gjgYFx/f i/wVC7D/vTcwLTYMaXWqYUVcFBZH10FK7TuxsFkytj73OFzLFgJ5Z/m+8/UM sldocr6g5AgESvPxZXKyeq1Ue/K18PUzYXKy30I/gnMyN1X45fPR18Jprnz6 DHYNewtpyfWwPC4eadXuxFe9ejI9tZnrZ6/XCqfbIeawuj+Hh8eCuFDkcfps IpUcai5g+ZxsxJRDbfny5TynGunhl19+GdOnT+f1QCmvj18tUIgcFIQ5c+ag efPmaNSoCTp06I71X24TPmqa9AC0cU8ZGgfJ9kHnmGQtdyVjz0s8Qp7KeDUr +ZXbioSfAhsbHJ+sxN6RIzC7dVN8WJvpUcbNy+omYl5YLcyPjsSM8DAsaNEM O156CcWp8+HKWQWwcQG7D7C50XHg3HkRU2ctFLYr0q+OEvEb1GhNmLQs5S3O yxO1vPZ8A6xbhdNTx2HTM70xp2EsJt31bzYuRPH8gVSXMS2pHtb3exLHpk1j 2vi42N/CAu5X6abf0n0hrW6nMaUz/EUUO0kp37eLQOWIs2fP4t///ndQm7+J qwOTk6HkvpKxoiJmTubA9AbqC77Iw3p8bh48n6xC9j2tMS8mnNst1txzD9yZ 81jnPQG6223cM0PPhcs3LTYi6ruLWtLXwxVQfSe+/fZbboOgehtUg27o0KHI ysri9UBJK5c1J1Zr26WlpaF169ZITr4bnbv0wPrPN4kanmTP9VJOPbJYSE8Z xlOy5p9H1N0QS7Vyn1xivKQN0Noj1eMiH5njh2H7Yi1+mDAGWZ3aYXz1/2FJ YgzXqjmxlEciCikR4Vw/p9dvhNVde2D7swPw/VvDcHzCxzibloLcBRk4uTAD JetXwr35M7a91bCzpn3Fnn+2EmcyM3Bq5hR8/87b2PjEY5jfvDGvmTI3qgYW RtfC0roxmJ8QjYmRYfjk4Ydxjs0h8N1e4VNZ4haanNcdEb4b5FMnUx5Lr+pL cvIloF6LkydP4n//+59frRMTVxehcF4Dx2RVN0mo70t/qWD+V6U3rrSAiZ3h jxEY+0s5v6kO6Z4D2Pr0AMbHkciJi8BM9vjdkCFAPptLOgoYFxcz3nWKnLSq M6qx5F4x8gWUpXeCnVP5XPWbuFjuHdKo9N7mzZt5/aMHH3wQ3bp1w8iRI3kd OrIZq7WOCPJ6B/OLkyBObtmyJdfJ7e/rjA2Mk8X7cn3WFx3Bc//r/g6Sg4z9 pb/JsCEHYFq7s+o2Bu5PwzTs+Z+AQ7tQkJWKDU89jPeq/ANTalbBvKgwLGRj MfEz5SVewtoCxqdkW5gRdifmxodjUcNELGgQhxX3NMHaDq15+6xzW3zGHpe1 vBsLGyZgSlQ1TI+8CxkR1ZETFY5V8bFYFhvHthGGt6rejvTu9+PowvnA0cPC RkE1rF3KPnsVP2coMSHQD0O1IwfkpPq5OHr0KKpVq/bLvmzishAqnCwRyB90 P6t+Upfi7otDxrUJEjbi3nRXDPIbJTsE7/GnjqFwVgZSYxKwmPHx4qQ4pLZs JnJunT3FP+PUcweJ+sneIHNGPTalnHm5LLugyoNyjAvG0yo/q/4SxLlUb6N2 7drcl3j06NFcI9M6kbw2sp6GWmcjkI8D94Xg4+RGaN++IzZs+NKfk2lBVl+U JX9hXhND2ZZfPIoIwhRN5zhyQy70CF9HTSN7wxnGh0eBI3uAr9ajZOY0rGBc +VGdWhhb/d+YXOcOzImrjYV1RZ27RQl1kB1Hero2smldLi4MS9jzRdE12d+1 kBVTk+ngGpjPnlNdwbkJEZgbG4FUxsMf3v4ffMzO2eZnBkBbvUb4GlMOV80B N8+HpI8t0gdI8x/yy6xvEDRH4M+DycnXHqHAyfI+V+9TtRYlQfpMqXUnLyen uOzLou964cuvpvCkbkfm26N1veLz8OzYgqx77kNKrdpYXDceY2rcAc+qlUxT neM++nL9XFP8nIHAe0TECV8N/9Erwc/pAxfLdUbn/osvvsADDzyA2267jftK jBkzhtuAaV1O3YbqYyH3QdZCCjZGXIyTO9zXHl98vkEYJuQAquljIUSNIjW+ kfwg5LKAV/eXcNnsOHXkBKaMm4qaVevg1t//Fbf85lb0f34g9uz9Bm6K6aO4 eSvTzUX5rBUIn7Njh1H42VJ8N20MFjIN/dE9jTD27gRMbpCIWcn1kFYvAekJ 8TyGKCM2BgvqJSKd9ZeZcdGYHh+DqUkJmJhcHyMTEzC1TVvu3+5cuQL4fh+Q exooKRD2Z1q/I584WjPWc2Zyu4XD6zfOq8sjZa7tyblC4OcuAyYnX3uEAidL qHUcAvlYrdcu1/YvB1JZiTmeblMMzHlphGR5xNrMyaP4euQIfFTtTqxq0JBp pBrY8NxThp8+fcUqbwSPz4HOWEqU94hbv7cqyCUgnpT161W9S1C5U+LMmTN8 HW7hwoXo06cP4uPj0bNnTyxYsIC/J6F+R9aaC4TKycFqz12Uk9vfiy82rIeR nE9TP+/lMx5VR1IsBo/fdInnVsZ36XPSYLFYEFarDgY++wLGjfkYr748BNGR cfz1QYNexNFjP4r4eegx99zvpkTknLKeB/IZh574ifEpaemv4F22EtY5mcib PAtHR36Ag2+/h33D3sW3b4/AnvdH4ciUKTielg5s3AocYN/LpW0wzi9mPOxi 26XajS7Gw9Z8/W8nfHnkvf5cq5BrqaW7IJwclLsvAyYnX3uEAidLe6UaZyCh amE1DlfiUtzsx8mQOhl+ndoj/6ZtnTvP1+THJcYhKyEOaVHhSG/TEti9i012 8/j9QjnDfHZoaZ8Q/hZGbkP1h8v5EgTW4yQEy0tBOpjuya8Y3xAnPv/881wT Dx48GIsXL+Zr8oHXoCw7s7pGUJa9gqB+5pKcLHNi8M/rDTByS3CPGj2XGz/9 errqjLnpuPWPv0O/Jx/HmbOn9Ust4nkK8gvxHuPRGyw3YuiQN/h7xS7hQUy2 DYd+/rjPG/fFYRstZt+9YGX8So1x+BmmsU+xvnG2ULxOsSaFJSLOnnLLF7JH uyYKhdn13KAUh8SbTTSvTf9b2GLcPP+PqPt6MbuEkW87oJmcXHERCpysgu5R sh+THyvVo6S2ZMkS7k9F9duPHz/OP0dcQLFfl8KlOJkexH3nFPfQydNY3uMh TKldAyuTEzGhdhUcnzaVisjz+FeKpaXt0a3pdeiCzCt9OYTPrJF3KGAuWd4I HN+o0Tncs2cP1qxZg/Hjx+O5557DgAEDuO8axXNQ/Iaaw139vvo80OYRuEZw qXi+y7JdqNfN66NoI9+P5lbsYOJzx46eQmRkJB54qBeOHj8Cu8cGpybqgZM/ BuXdKTxfgP5PPY+bbvgN1n++kV9fqybW0vKdDmPuo8lYECnISQ7Q+iERJ89p p+lzI4/hzOPRRBYfj9c/35ym58mQ9VY0isfz6rYYiBhSK/lUah7DXOOvgX11 ZIyOFiCgTU6umAgVTg6cM3fu3JnPKWNjYxETE4Pbb7+dx9x27dqV+1lJXI5O 9lsLkbpD/znuywoy2zl5js3C7CX4qFp1rEmqj3mR1bDpsV7A3n3s3nOKuk36 2qBdli4y9AuPXICspqMptozyvgKBdney/VLdz9TUVK6Bn3zySbzzzjs878/W rVt53EBZCPTBUO37hEBuLct+HIiLr/G119f4YFxDw1ZsfIN85PTVL01wIj3M TsnAjZZbkJmZZehKL499Z3ys6bmE2Bufrf4UNavXwjNPPQu7VeSwcJPdgl1X F439Mm+Qvg23Hmct4u9l3UOZB1BvmqzxpecDZb9Hv0n5ifjMShNrjaprPNXQ ppxFFM1t9ZSwz9jFAKMsSKu1G91QK7Qo3Aw/er5smJx87REqnEyQ+0r9Ijw8 nPuuHzt2jPtTHT58GOvWrUPTpk1x8803c/0s7ZMX3SYCfIYCtKvgZI/IAXMm F/O6dkNOfCKWRUVhRlQYPAvmiXmo1QFfPRzj9gjgZHn/CR0m75SKcAWIOymf BPmrPfTQQ9wmQbqYfCcOHDhgzDnUHEHSnhTMZqTamaRvhupLV5adOJimDva5 4H4XMHRiICd7eK5qUcNJ2p3txSXo88ijaNm8DY4fO81josmvho+XXjvncJ7j jX3+/NlzTI93ZPx9A/+uq6QQMg+csQbhFTmGXHpuKjv3cXejmD1z6LH6XpWT Sft65DjNR35Az37p1H0/ZD5p6UshXtNE/9HIeuFU5nay//l42QOlPk0AJwMm J1dEhAInB9qRqV/QfJO0Mb0m14zovic/WMpNQ41wKU6md0m12uQfupzgubsg 6rTzvl5QgKIlizEqvAaW1Y3H/IgorH/0OWD/cXbTeMsWHX4ErU4yvT9LpwTz Q5DHp/qlGMcVxK6uxm3I19auXcvtETSWEcdNmDCBr9uRFi4uLr7Mvbv2uLRO 3hDA7aIRfMft4pwpt1dcWIQbbrgBTz/9LDveQsWvj/xCHHr9U9968sMPP4xb brkFJ44dF7UIyrAJSL0t7RBqXiIEbQE6Fv6bDNZKcWxAZ/KzJ18l0Dkj7XPX XXddtW2aKI1Q4GQ1Rw3t77lz5xDFdOqf/vQn4zMy5pbun3vvvZffa6SfLwW6 b8hHgntqqZRp9Hf2gpVqAeci+4GeSEmIxLyI6phbvx5KFi4DzlnVRJ/XBKom 5ftchv5Xc2KqulSeGwL5BhN/dejQAX/4wx+43/DcuXP5vSah2nsu13/lWuPn c3LwWEBVo9OYQ/avZ555Bnl5eYYNR7XlyOOnc0m5N+jze/fuvSbHWJEhzxnd U+RvbuLaIRQ4maBy0JEjR7gd+T//+Q/ff9X3ldCkSRPcdNNN3A/gUj7KQid7 RN0mPmnU12M8OieT/3BhCawrV2IyxWo1SMDc+FrY9MTDwOFDwpffe41JOQBq 3stgPmoSZI8grqF1T8qjRjZ4ml+QzZ3WRWmtVJ2DBFun+/lxN9cGV4uTCbIv Uf8gOxfNE+g8EdQ5h9p36Hm/fv24TiZ7mfr69QB5Lmm9l/SQuvZq4uoiVM6p yg3EMcQtFJcg+VjegxSP36BBA77ed/l+F15u/+NzVYfDtwjO609auUb+4sWX kB4XhczoWphdPxLnU8czjfwjeP037drylqp5/fZd0c3yPBAPU84IWqObNGkS nnrqKXTp0gUvvfQSPvnkE+NeUu0SwXzhyvrN8sLV4mR1nKH5A80TWrRogf37 9wcdg+g1OqeUl47mFqSTCYHj1/UCisMkPXQxLWDiyhBK51TVN7Vq1eI6WYKO g+6bt99+m983xEeEy9F5ulcSX9Oh3Ah+Zr5iG7BxE7I6dcQixsmL4sKxsldH YO9XTFOTLyvl4vr1tJJqF5YcQnr3u+++w6pVqzB27FjOwy+++CImT56M9evX +80jiIfkNSeuuRQXV2bbBZ076ifUX8jXT2pedQ1Tfufzzz/n6xeUP1TF5Yz7 lQm7d+/mnEwIJe4IJYTKeVX3k2yfNH/64x//iBkzZmDmzJmYOHEi9xW48cYb uSYkHajm6b0oDD8LEY+r+RxFuX//gXHjML1eAufkjNgoHB4/hmnkw+w752HX CnVfo2sH4tTAOTLlfCeeoLyWr7zyCrd1Ul4fiqHbvn078vPz/bg1WK0ldc0v UPcF5qAvb1wJJwc7Dhn7+c033+A3v/kN9zWh+YV8T26Dvku+lzTO3Xrrrfyc S6h2+soM9byS7SI6OrrU6yauHkLlvKpzbbInJyYmcn1DttH69eujY8eOPLeC qncIl9TJ0hmO37Yunj2T/D/537SZfQfw2bPPYkZ8JBYyXp7fvDmwdZvIHU71 jPl3fh3uIh6m46Pclr179+Z1kMhPguwUtPYiNXCgTVjNGx9MF6u4WI638sTV 0MmB54ZAx/vRRx/h97//PT+fkpfpXMqaoDTW0Zox+QnK8yX71fWgk9XzSOub qj3ZxNVHqHCyBGkbshmTfzLZLqStj9Zo6P742etSfF0PYjmPfFI5y+p14S+U oHDFasxqcjfmJEVjUmQtbHj2OVHH3eHlvv02GSt9DZGdnc3Xl8hOTvkkKJ87 cTDpN+mLEmhvUHWvtIlKyPfU8xSYQ6SicfOVcPLFbON0nOTHM2zYMM67NNa/ 8cYbGMfmRsOHD8fdd9/Na7FSHFKgb+D1tL4nz6Xk5Iqy9lsZEQqcHLiPxMkR ERH4+9//fhU2Dt0vmeyMwlOZPP55DfbjJ3Fi/ARMDa+K+XXD8G7t/6EkexET rA6jIBSndKe7lG/w5ayBqPEU6udIDy9atIjnbCf/EapDRznfyR5Bn70e74er 6XcRbNsEitcfMmQIrzdH/hV07omnyTZEdlSJwLxMlR3q/ILWQilu1sS1Q6j1 K9pf8rsgm9a//vWvUrG7P3+DMOoFe3i0lV3UoqYa8Du/w4I27ZAeUR1Z9aMw mjUc+4mRplPYNRx62jdNrJcF+pZJqBotUJ8SSN+TjZxs4g0bNkTNmjV5fMLq 1av9Ph+Y/+56mj9eS06WUPMO0thHeUdHjBiBpKQkbiejRr934sQJI2f39XAN VE7et2+fscZn4togFDhZ6k7ZL8hWUadOHfzjH/+4OtvXRMyVE6Lek51qERcU 8ZiQceGxWNGwASaG3Yktb74M5J/RkzzCsEN7XBe30dK+02uST+k46L6me57W 6MgmTlqY8r9v3LiR87v0p5DfD4wbud5wLTk5mP+bBJ13irOh+HIaM3v16mW8 dzmx+5UB6r1H/j0JCQnG6yauPkLlvNJ9IzUxxVbfcccdfB08MF7k50Iu8eW7 PNyrLR+i9jyKgc9HTMG7UY0xOaEh3qgdDuzYBhRSLlu3qL3j9OWQI86lfQm2 vkavkd2BbHGkfUl7PfbYY5yDKb/azp07UVBQwL9zsfxpZZ2X6wHXWifLdYhA fzj5N11HOUaqn7keoJ5L8lOpV6+e8bqJq49QOK+q7pR5fClfL9Wcv1LwupIQ teUPs7b0kA1T1nyPWfO24sWer2Fg04cxqGF3jH2gP3DWqieHcYg4ET2vuch9 IKD6v1IeS8rrQ+tDlF+tb9++PL8ardlR3yabRVm5e4Kdgyu204QwriUnB/oB Si5WbUaBuJ7mLOq5JB+f5OTkoD4sJq4OQqVfyVqbV3t/6W4rZrfePiZ/X878 FkmD5+Of3d7Hba1eRWyT59Gq+QB0aPk8hr06jQtqjybTIrqhUe5HTeaiESAe plzOtI5POS5JD6ekpODTTz/lMbnSBhHIr2pd16D7GcALgXn+Kzt+DXuytBkF uwaqZr5e/C0k1PNItcVpzcPk5GuHULinA9e2VHvFld4fxHTHzwMvffwZLJ3e h6XdB7B0mcbaVPy++wTc0uYt/Ln160jq/QEWfpWHXLfIqkh7QPEl5D937lwu 95Mg/qU4XYr1yszMxA8//GD4q5UF4oDAWDnVHhH4XVmbSSIUrt/VwLXk5MvJ 31xWHZbrgZfUc7NlyxZeZzHQ/9LE1UMo3dPBfGgvF1oZjbh1SvYe/KHVEFi6 TYflwUxY7p8LS9d01hg3d53E2gRY2r+Lv7cfih/Z5xmF41RxMabMnIrGTRrg lltu4vl9VqxYwWMMZM25i9XPkMdj7N8lfOaCccLF6pVWNlxrnXw5dnzV3zuw XndlhnouqO4X5XU1OfnaIZQ4uSxoQYp1UJ5ct9fF81hQDmTK7M3zcjpdRti0 g/2z5YdCNBw4i3HuWFi6z4blgWxYejBe7sw4ueN00e6fyTQ04+WO76Dus+Pw 3+R2+PP/quGpp/tjy1ebf/0Dvg7xa9guTJQNOR6RTqa8iyauHSpFv/XqvAxf zJqoH0+87OCxzza33ajVIGsX099Lvz4BS4dhTB8zPu41n2nlBYKXey1kvMxe 68le6z5X8HKP8fhDlyFYc+CCyLdMtmWHs9R4YOLqw+Tk8oXkZLInk+3CxLVD pei30hDhBy+vs+N023istKiFo9dyYoRsdYnnnJPbMk7unsJaBiwPLYKlK3u8 n7Xuc/6fvfeAj6ra98U553jOefe+cz/3/3/vvveu13OeBSSEtJkUQui9gwKK oNixK4jYULFwrFhAQAhSEkiFJFSJFBXp0kXFRu8hCenJZOr3rd9ae+1ZM5lQ lMkkYX1xOZM9e/bsWbP2d//Wd/2K4OM72bbRjKuHT0fchFQcZm+scBpedLye 2tWhH4QSmpNDC8nJlN+K1vg0gofmMG7dRlE7qqfm1QSpbpPNqEUqau/UOJyo cXlt5bJqD5Z/cxwt+r/GbOJkZh8z/r2HOHmh4Oe7mI18J+Piu1eKbQPfRZcX 03EGwsaGh/LZVyDohUY0NCeHEKqPBdnJ1Oe6b4OHZtG3hp3s8ah+CkY9dm4v uwxbWbDnL0dPIn3Jcrz02rsY+sgk/G3QK4yTZzAOZrw7jDQKxsd3Mn4ebugZ pC2PZjbzrVMwZsY6UNVmquHu8ZAHRiU0JwcfmpNDB7Uvqd6lXOPTCA6aRd+y r2Cr9vr7inisWpOTqf166BdkLF6CMY8+gT79h2D8C5OwPP8LbPzuNMYmf40W Q95k9vLbjIMXMG5mHDyS+DiLNcbPo9nfQ95Hiy5j8V0ZUO6R5aip5rzWLhoC mpMbBygfAOXG0v0bPDSHfpVyBT1S3lvpo3Pw8K+YNn0qkjq2R2y8FQ88+BDW fvkVCkvKUV5lR60TvF711hMeDJgwD3/rOxF/Gf4BWgyexjiY2c0j5jFbeRZa DHoL1wyaiKkr9uG806iraqsR2rTTqZf4GgCakxsHvvjiCwwePFjHjAQRzWXc eozcbBSn8c477/B65ze1uhETnnsG+/bvhdPtEjWePEJpsBulRMh/opQ933mk Fo9MXICbu45F6wFv4qbhH6NFn3/i34dPwd+Hv4oZaw7wPBjcPqb1PfZftVPo ys2jBxs3NCc3DlB9MaofITlZ9/GVR2PoU/n7yjxbgfL4BDpPytdF+dW2b9+B V199nV+jAwcO5Dl+1Hy39cWLUOP54IQQgeqzbjw0/FmM6PcMBvR9EXc9mox3 U3bgx/PAyWrhzwyZ797NUy7zbaHvweYPzcmhg+xHeiQ7mfpb923w0BB96x8P TFDzOwTK8+B/Tclcl1Sbh2qC5efn8xpIlDvxqafGITn5U157Q0LG0TkNbaG+ Jj6MtQobzm/eg1d63YFnO47E2G73I3dGPlxV4H5zIprbSJrsdph1VD1uaFJu AGhODh00JzcsGrpv/WNYVa6uj5t//vlnfs1lZWXh+eefxyOPPMJrpFFuuMOH D5vH4fz7W74P5+RynE7PwPSOnfFJuy6Y3nkwDqatEYIz1zmcfD3Pw9jZ7XJ4 61oHiCHUuPLQnBw6aE5uWAS7bwNdGyp3So5W+ZheO3LkCM/jQzoE5fR57rnn eH1qqhtMtZ/kfvXlfLhkrYuHflAO+xL8/M7rmGsNQ3ZcND7rNwiezzYAxZV0 wiLfEK9DYtRzNkJGNCc3DDQnhw6akxsWwepbeU3I46t1Ngj+NRpov0OHDvG8 lpRneOjQobw2GuW9pO2UE149V5XXpTZCx/etsyRq5dWF27fRe4oLsWP8w0i3 XI+c6Bvx1eDBwPa95FjBa/M52L9axsd2Xo3E4z2My6M5uQGgOTl00JzcsAhG 36p8LPNPSKhaBfmtEd9SneCePXvyGntkD+/evRvFxcV16gQH0iYCXXv++ePq QuFjEoSdbN+zp7H10dFYEnsDMsL/ji133AF8d4hxsrCJRV0oO2s2Hn/ikcfx 6NxYDQHNyaGD5uSGxZXuW38+lsdX+ZR8IiZMmMBr6l177bW89sb+/fvNY5C9 K99Lz+V6nXqu8m+xjZ5fQn53c2FPcrJRK8TG7hm//Ij8UYORbm2JlMjW+PaZ iUChncjYzOnJ66d6qimLhpE/w80VDT06gw/NyaGD5uSGxZXs20B8TI381UgH Jh6mujH0m1K9SdVPgqD6Z6h1HaQ/nD+829w8N2cg+EjNdTjZLZJlME52f7MV eYN6YnF8JBbEx+LbSW8BxaIWKh2ZMmfYPYKTKVZb1lQlhtajM/jQnBw6aE5u OKh+wQTVD7i+GB3/sS7fK7Vieo3W4Ki+7bJly7ifBPmYjx8/HhkZGTh27JjP ml4of1v+2eRDYa9B4bJc5PfthaVxMUiOt+Lg7GSgpEIEl3DJ2C3qPcFtcrvM w6xHZ/ChOblxgGpJ3n333aE+jWaHQHEZ9Le6Bqe+7l9Tgfb3rytJ/mpUc27h woVcE37yyScxdepU5Obmcp9i/zqn6r03VDA5ubwUxxelYlnHDlhqjcb8zh1x NjMDqKoShrZH2NQeubonpWhoPm4oaE5uHNCcHDxIPSDQupnUDQKNa3W9jng4 OzubxzITBz/77LNITU3luaNOnjxp8rC/zX2pNY+CDZOTK0rwy5xZyIqLxfI4 C9J79kDV6lVsezXgcJmc7PLjZH4MnX+oQaA5uXFAc3JwoNqo/jXGAmkW6tje t28f3n//fdx3332499578dprr2HdunXYu3cv91cL9BkEkavN11aWtZdDBX5u 5JtcWoz9H32A1OhILIuNQWa/XsCWjYKTua+bl5P52YplRXEMzckNAs3JjQOa k4OPQOOWtqk11Q8cOMC5l+oLUN0X8pMgDqaazP7+apLbVX5Xa4VKLbkxXC8m JxcXYtc7byE1MpxzctbAPsDeXYyTq7z8q+jHqmihOblhoDm5cUBzcnDgP179 eZTsWbKHx44dy33VrFYrj2WW8XP+usal5Oyrj/tDCf75ZLufPYNtr7+KRdER yLVGYvEt/YGffwCqqn04mZ5qTg4NNCc3DmhODj5o3FZUVKCwsJCv0VEMXXh4 OPr06YO5c+fy9TlCINtW6g7+fsOqHiH1CtXuVvcNJUxOPnwQX00Yzzl5sSUS ubffApw6Jl6T2nFATlaEZY2gQnNy44Dm5OCA/CvOnDmDHTt2YNWqVXjqqacw YsQIntsnPT3dtIf9EWhNUOoR9Y1/db1Q3SaPF0peNjn54EF8Pf5pZFqikc04 OW/UMKDgjPBbplzJ9WoXMhGR5uVgQ3Ny44Dm5OBg3rx5eOKJJ/D444/jo48+ wsqVK3Hu3Lk6+0nfOHVtTo2Nbipj3v9a9XleXUOBhfiS9UWWJQoZ0eFYef9o vu6HGpsInZZpMWBU3jM5WVZb1ZwcbGhODh3UviROvv/++0M+x21s8M9vKbdd aP1M5dW1a9di8+bNOH78uLlN2rP+tqvql+GPpvK7XJiTq+HZsROr7roLufGx yLRGYvNz44DiAmYnO+C0e+pyMn8zoDm54aA5OXRQ+zInJ4frm03l2m9IqH5s hIv5sKnPa2pqzOdSi/D3UyM/ZJkTXj1+fZpyY8bFONm97Rvk3T4cubFWpFki sHPSC0DRaeGbzHO/wYeT+RFMTnZAc3LwoTk5tJB9mZmZiccee0xzsgLZNzab rY7fA2kN9eUTVqHa2aoW7M/NgT6XUN8+jRUX42Rs/wYrb78dWdHhnJM3vzQB OH+OfVEn1DzJPpzM4YDm5IaB5uTGAep3Wn9qDHG4jQVVVVU+vKxu94fkWP+8 av79GGj9TcZzqDEf6ucRmoKNTLggJ5O/25ZtyB85EtkxEUiPi8DGlxknlxWJ fHF+nFwLY52PQ3NyQ0FzcuMAxemOGzdOc7If1PwT/vpFoDqjF4LUJ9QcQjJX JoF0DjU+T83XJvdv7LgoJ2/ehrUj70BubAxSLa2xedJzQMk54XchjWPNySGF 5uTGAcpnQ3ELmpO9ULlT/k3PKT+8motCheRpf3tY5W3Js9L2pZrQFKtHOTU/ /PBDnm8zEPxrnzZGXNxO3o51jJPzYqOxILoVNnJOLqDO9crGmpNDCs3JjQNp aWk8t43mZF9IHpT8SbHPlH9izZo1Zu4fNXbDv99ULvbPBUc1RylH6ksvvYS+ ffsiKioK27ZtMz/PP166KeCCnFzJOHnTVqy9YwSyYsKQag3H168yTi4v4r5w ZqCI/xqf6Zus/S4aApqTQwvZl5Rvl3xoNSfXD+Jfso+pdp3FYuH+3FRLdM+e PTw2T10HVP3mJGg76ROU75jqQtM9sFOnTrx1796d56EvKioy+Vjl5EaTt8Kv 1bufvE7dSrOxe9KWrfjy7lHIjGmNudEtsfG1F3nNVNSw1xweeHN1qnysebih oa5xkL1G45PaoEGDsGXLFr7PhdZKNH47iGOoL0m7oFzoBN23vpC+xATqG6qd 1LFjR86lCQkJGDBgAOdpsnkpLk/uq/q0Uf4gep1yWVCON8oxRO+n2ng01inf EOn5xNXkl0h1pOkxLy+PP8rnoW65S33bRd+Tk2u2LzOysHnyP5E7qB9yE9oi rV0kFj1wNzakzMO6rCVYnbMUS/MWI2/pYvP9S/Poe4vvnpu3LOTf/2polIdb HXMvvvgievTogV69emHgwIGYMmUKf432U8cpPQ/1uTf1tnz5ct6vVKOCtOR+ /frx57SdWqjPL9SN+oDmbfRIuYvJX5BqOycnJ2P48OF8jBKXUo0l4mjqP+JV 2o94mziZ4qrpGHS/oxogSUlJ6Natm8nDNNZpXkjHIhuExjz9TTkwSM+Qj3Rs avRaKFuvPr7tou/p2ctst3XuijfZ95zXqT3n5MykGLzZuyvG9OqOkb37YUC3 nujTuzt69+luvr9P757ssaf47N59Q/79m3uj8UZjkcYcNbI3aKzSmKXtkptp OzX6m5r8O9Tn39SbvOapL2kuTnnJ6LncHurzC3WT/dC/f3/+SGNT8iM9J34l O5e20T5k+5LmRn+PHDkS7733HrcxoqOjeZ1o4m0az/KRPoOOQ8egcU12M22n Y9Df9Bodk57TPnRdEI+HsnXp5tsuuC/7Hl07e9stiUmYyPqMOHlZ+yhkd7Dg 9e4dcVu8BUM6sH7r3A3dunZE124dzWN060o5S0Xe0i5du4f8+zf3RvYFjUPJ tdRo3KlcTfvQb0t/S/tC7hfq82/qjTiBHql/IyIicMMNN5h5e4kDQn1+oW40 NmkMJiYm8vEm+0s+lzxNHKvau/Q+6kfSNQikNc+aNQujR4/m+9FrxOFyTNM2 yeVkJ9NxZaN96FHayNJeDlXr29+3XXBfun/18bY7uvXAZPZdZzIOXhLXBqlx 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 8Z22Ev5uzpMemDmY+g66BccYf7nMe7MyD/PImZERs81+36rqUjw17km0+EML 9Gf2xeCht6F//4FoddPN+EuLa9ClQ0f8dEDkz5A8rHJSff55Pt//ArYycSS9 VlVVxWM/W7RogdjYWAwfPpyvV1577bX4wx/+gF69emHNmjU+71Mhz41sZ9XO JfjbWfT6448/jn/5l3/BX//6V3Tv3p3HP/75z3/Gn/70J14X4NixY/yc5Pv9 v49GcFHffIw/wrAdSd8sZjZzURGqsjKwuHd3rOoUj9zIm5Af3xafJ1kwJ/xG zIizYt8bzKbZsQ84y7iqzC58A6jGheQbMmvsgebhXk3D7bFDJSk1O47L5GO3 wcduM464RmlVnJfdZj0PmU7B/GJuQyflOq2hcZD/rEeqs9Jfhf3f7hFzWeoH 0huoBijVOzx/lvsbZwwbjI/btsb8iDA2526PvNhoZFjaYG47Cz7u3ROFy3LZ varcW9vZpURBerz94jWa/eq2NGlI7QXe7wovJ1NPVJO/CWkQFJdEa81Hj+HH KR/ho9g4Nt+IQ1b7RLxy47U4njwVKDzBfoNySibr1aiNez7x6omCU0YGLaf3 wwhcfzZ0KPqNmb1cUlqIx598An/6639DcVklbE6vIJS3eAla3XA9unTqjLKy Mr5Z8hTBZrPhUkAcrF5f/poEobq6GqmpqZwXt23b5vMZ69at41xNfn4HDhzw eS/dk6T9rnK9fK5qEfRI32PkyJH4y1/+gqlTp/rY0/T8k08+4TxNOQFOnToV 0L9Fc3LDoE5eGkNLIv3UJvUFGs/ERTXsmjn2M35475/IGzYIs6PbYGF0OFay 6yaHXUPzIiIx9eYw7KFaxl9tYXbPGZHzoIKN4fJK4a9haMk2e42xQq82o6aF 333BP69EoOYP2p+uIvLxJYaVsRemlin9uUhvsRvzYWrsnuB0MSubchFLsZLO mTi1vFjkA1qzCkcnTcSU6/5/nrd9ldWC5XEWzI9sy30Jk7t1wPjo1niuXzf8 tG6lyOdG3GOsxtmdQjv04WMz14O419ibDSdLfR911iZr4BH1ntzG/ZD83yjv /clT2DJpEmZQ7VdrJJZ3SsBb1/8PVGemAOdOsjfX8KMTjVIqatKe+g0aiNOF J0lxhlhn9K5fiDUBed8Vukdx0TlMmPAc47xrUF5lN5YPWL/bhC/SpInP48/X /BH79+8P/M0uIddRfRqv5FM5zufOncu5l2qcqyDbl2ok0GsrVqww95faM4E4 /fPPP0d5eXnAc5D7zps3jx/ngw8+8NFiVLt79uzZfJ9JrO/pfZqTQwf/3C7m 2gGtq7DrxWFocJSXDM4qkb98327se/stZPTrhwVxcci0WJBntfCaf0siW2NG yxuw+r4HcWjOPFEj7uRpUXOzlPFaZalhk8pcj7Lyj8eHh+rjZJ8d1Lm/387S 4rXBPxZYWTsj3YSvFRk+DlynNP7mWmeJqKd08jBca5fjh1eex8peHTHn+v9A fmwkVjO7OK3tzVjaoxu+ffY5LHngfjwRE43RbN5wR7eO2EXxIDyXpR21bhuM ShrCnpHnbJ6Y2+BkJ29N+wpQNH7TlxmQtznuJweXEWlq56PArFdG66U//4i9 L09ESnwM0sOvx4r4KHzY8r+AFWzeUVrCfTZIs5D32r79e7Hp3BlIbYLXqpJ6 BZ97SRtZ5HE5X1SMZye8iBZ/+AvOnCtBjcO7dknrgNOmTuH8RLar5DXiMmlb XmjNTkK9pui9qq4sn1dWVmLWrFlcT6DPkpwtQTovaRjE26qGIo9N9jPFlZMm XVNT43N8ea7nz5+HhV2fVqs14PnIR9o2YMAAXidnx44dmpNDCH/dS4D+FpHY HjbOq10iJyPlueAXQ2Utr4ds27QdBz+eiWW3DcesyFZYHBuGzxPDsDT6BmRF hiE1Ohp5PXtg79PjUJWWCmxhtsCP3wInDgu708bu7+b143dv8Gt1XgjExSrH +a0B+mcKdrkMW0razNzfjHR0u1jjPH0M+GYDChbOxpaxY7AoKQZzW1+HZdGt sDbJwuuAfGIJx4axj+FUVhr3qdiyYCHG9BiA4UldMOrWIfhiwxrOxYJn3WZ+ ap9TM926mjknm3q51+eliM2/xH2T5k6GjkG/C2nvB/Zh93NPY1F4K+RHt8Vn MRFcy8DuXeyN53hcoIOvvbrRq3c3VFFMKnGyS+gTbuO+zzmZ7Aqek8vJ1zDK i8swfizZyX8VPjRsz0qKhWJnVl5+Dq+8/Dyb51+Dk5R/H157knhOcubF/C54 LygagMrj8pqj40pbeP369ea+tJ32J04mrTclJcVHM5HHohwfxKGyPmwgzXv5 8uX4j//4D8yYMYPb1fKzA2kfc+bM4eeycuVKzckhgLpOUee35LGwjEFcFXwe 6OS6rcHS0uWBi4Lsf6dP8zW+c3NnYO3dQzE17H8hNeYGLI+NwIqYtlgWb0Ga JQIzGEen9OyCLROexsHZM3B+5TLUfrON19cG6XblFWJNkXQOiq11+flNuNzK 9e1W6fYCTdpofmt5dO1TnC/pmHQt0udSfulzRXDs+w5nli3D9+9ORt7wfphh aY15rOXERyAvti0WRtyID278P0jr3wMFafOBX78THMLsqSULFqF/p97o2aEH tzk2btvEZwM1Sv8RU9Txt1DW9uT6ZdO/AhTtQuVkw1aWc5gqo28EgxpaMPFq 5Xlg1zbse2gMctqGY11MJK8ntebukeK+TvdzI061e89usFVWmGuGZCe7eE1J ycm1XIcW44lNf85XYuwTz3BOLimpMW/hhcVnkZ4+D//+73/F1Kkf+viZqVxM PhFTpky5YHv33Xfx1ltv8X3l+wiqjkvcS3Yy8eDWrVt9OJz2e/nllzknb9my xexV4mZ5LNJ+KXf0LqrfAq/WrdrUpB9fc801XOOo8wspn0Vt7969/FxIX9ac 3BgRYI1GNVzJXrYb9ThrGJ8VnQCO/oDSdXnYOHEspoT9A3PZvHNhTGtkUX6j doybEyxItcZgTnQkMrt1w6rbb8eWJ57C/tfewInZybCvWgWQhkd5gwspN915 0ej4tEZWzexXihmnXGM8/6WR38YjPY0dpqbIucBprOvT+hw5HtNzio2h2s4l lKftFM+xUL1sKY5P/xh7XpyIVSPvQGqnJHzK7iF5CTHIZrZwFru/pMZF4q3W /0DasAGoXJ0HHDnAzvEk928TNpgHKanp6NpzAJI698CQIbdyjVD60an+0AHj s/3WM5s+lJujx28cGU/lWp/UlryaP/1u1ULnWrMW624djiWRUWyOEsHzsmx+ 5gnR/2xc0P5de/dHVTVjdLsgfKfTrvjiSXvdYd4bis+ex7gnJzD++TMeHPMY Hhs7Ho8+/hhG3zMKgwf3Zrbrpzh37mwdPubnzbhp6dKlePXVV+ttr732GufT iRMnIjs727RLA/kwSx2X9Af5eWfOnMHMmTPxxz/+kftKkE+ceg7StqUcH6Rd UD5/1d6VHEvbnnnmGX588oFTIc9BXYuk+lm07/vvv29qIer+GiGGv0bgF0fm zXMgtTriSsozWcn1V/ywC+XzZ2HFqGGYEt0aU1rfgHnWaCxp3w5L4uMZ1zGO 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 1Ovi8ThmZmb0Onlv2/ZS/uiE/N/QycQExsfHsXv3bnR2duLOnTs4ceKEzpNb W1u1ky9evIirV69i//796OrqwuTk5FL/yIQ8FHQyMQGJ01OnTqG6uhrr1q3D nj17dJ7c1tamaxfbt29HY2Oj9vStW7dy9zFPJqZBJ5Oo4zjeIK+bN29qF0tu vGbNGuzcuVP7WZ7ziYvls6NHj2Jqakqvl3oHIaZBJxMTkDiVevKRI0ewfv16 XUduaWnBjh07cnVleT8wMJBzePBKiEnQySTqSP1BLnGsPMsTF0sf3KZNm7SP 5bW5uRmHDh3SdWchlUqx/4IYCWOWRJ0gRsXJo6OjOHDggM6VpZYsbpZ+OKlh 9Pb2FtzLXJmYBp1MTEDy5CBWz549qz0subF4Wd7v27cPIyMj+vusXRCToZOJ ady+fRt79+7Fli1bdN1CcmbpjUskErl4zmQyjG1iJIxbEnWCGA3qw5IzHz9+ XPdbyLVr1y4MDw/rNfN7LcJ7/wgxATqZRB2JUcl7A8TJQ0NDub3VHR0d+ple sFZqFnIxtomJMG6JCYTjVPws18GDB9HU1KT38AlBTiyvrCUTU6GTSdQJ/Cr5 ceBdidtLly7pZ3yxWEx/LXMwFrqXEFOgk0nUCTwc7r0QZNZQd3e3fj8/jsXP jG1iIoxbYgLhHDj8XnothCCOw3ULWcc8mZjA/wByuxqD "], {{0, 355}, {357, 0}}, {0, 255}, ColorFunction->RGBColor], BoxForm`ImageTag["Byte", ColorSpace -> "RGB", Interleaving -> True], Selectable->False], DefaultBaseStyle->"ImageGraphics", ImageSize->{135.015625, Automatic}, ImageSizeRaw->{357, 355}, PlotRange->{{0, 357}, {0, 355}}]], "Input", CellChangeTimes->{ 3.733480927883264*^9},ExpressionUUID->"7046fde1-82e6-4459-9778-\ 73ad523ab80c"], Cell["\<\ This operations forms an abelian group (associativity is hard to check), \ moreover kP can be computed in polynomial time on |p| \ \>", "Text", CellChangeTimes->{{3.733481575107327*^9, 3.733481654874361*^9}, { 3.73348173464244*^9, 3.733481749162672*^9}, {3.7334895801939373`*^9, 3.733489580650016*^9}},ExpressionUUID->"1b999ff5-d063-464d-a81e-\ 947ccaa7e000"], Cell[TextData[{ StyleBox["Theorem", FontWeight->"Bold"], "[Hasse] Let E be an elliptic curve defined over ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], ",", " ", "then", " "}], TraditionalForm]],ExpressionUUID->"3264e16f-c602-4049-8cc3-0978cef88ae5"], "\np+1-2", Cell[BoxData[ FormBox[ SqrtBox["p"], TraditionalForm]],ExpressionUUID-> "5a45fb47-f3e7-44f6-ab13-db26e4d13597"], "\[LessEqual]|E|\[LessEqual]p+1+2", Cell[BoxData[ FormBox[ SqrtBox["p"], TraditionalForm]],ExpressionUUID-> "91172d32-6ece-446e-b3cc-0f9eb541e18e"], " , \nmoreover there is an polynomial algorithm (Schoof\[CloseCurlyQuote]s) ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"O", "(", RowBox[{"|", "p", SuperscriptBox["|", "8"]}], ")"}], " "}], TraditionalForm]], ExpressionUUID->"e6fe0d2f-0152-4b45-9c38-31cae354c86c"], "to compute |E|.\n\n", StyleBox["Theorem ", FontWeight->"Bold"], "Let E be an elliptic curve defined over", StyleBox[" ", FontWeight->"Bold"], Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], TraditionalForm]], ExpressionUUID->"2aa0bb3f-44ce-41e5-9211-c8aa1dac879e"], "then (E,+) is isomorphic to ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{ SubscriptBox["\[DoubleStruckCapitalZ]", "n1"], "\[Cross]", SubscriptBox["\[DoubleStruckCapitalZ]", "n2"]}], ",", "+"}], ")"}], TraditionalForm]],ExpressionUUID->"247615a9-ec14-4498-9828-a139c9802202"], " for integers ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["n", "2"], "|", SubscriptBox["n", "1"]}], TraditionalForm]],ExpressionUUID-> "045254fd-220d-4760-b510-5fd9d2277e03"], " and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["n", "2"], "|", RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}]}], TraditionalForm]],ExpressionUUID-> "603a0236-0d1c-4035-8475-9f6df7898aba"], "\n\n", Cell[BoxData[ FormBox[ RowBox[{"E", "\[Superset]", RowBox[{"H", " ", "\[TildeEqual]", " ", SubscriptBox["\[DoubleStruckCapitalZ]", "n1"]}]}], TraditionalForm]], ExpressionUUID->"50ecab98-4728-414f-9201-6baad5825a2b"], "\[Cross]{0}\n\n", Cell[BoxData[ FormBox[ RowBox[{"|", "H", "|", RowBox[{"\[TildeTilde]", " ", SuperscriptBox["2", "120"]}]}], TraditionalForm]],ExpressionUUID-> "27b2a9b0-97a8-4d4a-a824-b2fd4f17d06c"], "\n\nThus E as cyclic subgroup of order ", Cell[BoxData[ FormBox[ SubscriptBox["n", "1"], TraditionalForm]],ExpressionUUID-> "bcc5898c-05bb-4b0b-9296-c6a1488eb857"], " that can be used in the general ElGamal cryptosystem.\n\n", StyleBox["EC Discrete log Problem: ", FontWeight->"Bold"], "Given a element P\[Element] E, that generates a (large) cyclic subgroup \ H={kP:k\[Element]\[DoubleStruckCapitalZ]} , given Q\[Element] H find k such \ that kP=Q.\n\nPH theorem can be generalized to EC. Moreover, Discrete Log can \ be computed to several classes of EC.\n\nSignatures schemes can be also \ generalized to Elliptic Curves (this is the case o Bitcoin - the curve is \ called Koblitz c) and finite fields. " }], "Text", CellChangeTimes->{{3.733481511311531*^9, 3.733481569706586*^9}, { 3.733481685354396*^9, 3.733481919365385*^9}, {3.733482022250758*^9, 3.733482231251029*^9}, {3.73348228741893*^9, 3.733482309035057*^9}, { 3.733482430978971*^9, 3.733482449306829*^9}, {3.733489602493545*^9, 3.733489649523864*^9}, 3.733489769007588*^9, {3.733489842435465*^9, 3.733489862768249*^9}, {3.733489897676588*^9, 3.7334899031500053`*^9}, { 3.733489938019795*^9, 3.733489953024274*^9}, {3.733490041878251*^9, 3.733490078411087*^9}, {3.733490171342126*^9, 3.733490182412651*^9}},ExpressionUUID->"a279c129-b98d-432e-a8f5-\ ba16cd4d3317"] }, Open ]], Cell[CellGroupData[{ Cell["NIST standards for discrete log", "Subsubsection", CellChangeTimes->{{3.7331347183147097`*^9, 3.7331347266316757`*^9}},ExpressionUUID->"0f3284c4-a235-40de-867a-\ 3d6825b5cb44"], Cell[BoxData[{ RowBox[{"\[Bullet]G", "=", RowBox[{ SuperscriptBox[ SubscriptBox["Z", "p"], "\[Cross]"], " ", "\[Checkmark]"}]}], "\[IndentingNewLine]", RowBox[{"\[Bullet]G", "=", RowBox[{"GF", RowBox[{"(", SuperscriptBox["2", "k"], ")"}], " ", "and", " ", "some", " ", "\[Alpha]", " ", "\[Checkmark]"}]}], "\[IndentingNewLine]", RowBox[{"\[Bullet]G", "=", RowBox[{"EC", RowBox[{"(", SubscriptBox["Z", "p"], ")"}], " ", RowBox[{"(", RowBox[{ "bitcoin", " ", "and", " ", "most", " ", "of", " ", "the", " ", "cryptocurrencies", " ", "are", " ", "signed"}], ")"}], " ", "\[FreakedSmiley]"}]}]}], "Text", CellChangeTimes->{{3.733134716234488*^9, 3.733134897048737*^9}, { 3.797243611399912*^9, 3.797243617187943*^9}},ExpressionUUID->"d6f71efa-3152-4497-8567-\ b0c7a2a43acd"] }, Open ]] }, Open ]] }, Open ]] }, WindowSize->{964, 599}, WindowMargins->{{107, Automatic}, {Automatic, -1434}}, PrintingCopies->1, PrintingPageRange->{1, Automatic}, FrontEndVersion->"12.1 for Mac OS X x86 (64-bit) (June 19, 2020)", StyleDefinitions->"Default.nb", ExpressionUUID->"6e8b5748-f4c8-4d8c-b070-a6dfdb760374" ] (* End of Notebook Content *) (* Internal cache information *) (*CellTagsOutline CellTagsIndex->{} *) (*CellTagsIndex CellTagsIndex->{} *) (*NotebookFileOutline Notebook[{ Cell[400, 13, 147, 3, 52, "Input",ExpressionUUID->"9bdc9215-ff8a-4959-b601-155c0a1fcfa7"], Cell[550, 18, 32338, 499, 182, "Input",ExpressionUUID->"b67ca86d-b18d-432b-947d-f041068166db"], Cell[CellGroupData[{ Cell[32913, 521, 182, 3, 69, "Chapter",ExpressionUUID->"c3f2b3c5-8143-40c6-b38b-06d752a6ae62"], Cell[33098, 526, 176, 5, 58, "Text",ExpressionUUID->"fae26818-847e-48b7-90e3-71a922ef5cdd"], Cell[CellGroupData[{ Cell[33299, 535, 264, 4, 67, "Section",ExpressionUUID->"a0e6765b-bffb-44d7-af0a-bbae47c5ef30"], Cell[33566, 541, 3334, 79, 595, "Text",ExpressionUUID->"a587fa19-579e-4c0d-b0ab-6188fd61bf54"] }, Open ]], Cell[CellGroupData[{ Cell[36937, 625, 381, 6, 67, "Section",ExpressionUUID->"1ba38c7d-2854-4f81-9fa3-47679dcfa236"], Cell[37321, 633, 7230, 193, 735, "Text",ExpressionUUID->"a5fc8e38-0b17-4d72-abab-e0a640e56950"] }, Open ]], Cell[CellGroupData[{ Cell[44588, 831, 412, 6, 67, "Section",ExpressionUUID->"bc4c0fd5-91d0-4902-b055-164f16f9fe12"], Cell[45003, 839, 152, 3, 30, "Input",ExpressionUUID->"be10a119-a320-4519-8d2c-cdbc1ad26f9a"], Cell[45158, 844, 3235, 74, 356, "Text",ExpressionUUID->"1c77ae01-c030-4fc7-bfc5-9c94351ee27e"], Cell[48396, 920, 6801, 182, 418, "Text",ExpressionUUID->"2e60ff40-b573-4167-bd8b-ac773ca00073"], Cell[55200, 1104, 2370, 46, 44, "Text",ExpressionUUID->"f0b67366-beb7-4aaa-85db-2b078c29522c"], Cell[57573, 1152, 8185, 237, 644, "Text",ExpressionUUID->"754ba1d3-0c8d-4f60-8802-f5aa8d8bffc1"] }, Open ]], Cell[CellGroupData[{ Cell[65795, 1394, 465, 7, 67, "Section",ExpressionUUID->"29ef5b0e-d353-4e3d-9b32-ddbc641d1296"], Cell[66263, 1403, 14528, 406, 1506, "Text",ExpressionUUID->"871b431b-0076-4056-a82a-ceb00fa36fbc"] }, Open ]], Cell[CellGroupData[{ Cell[80828, 1814, 459, 7, 67, "Section",ExpressionUUID->"ef7dc7c5-eae0-43ac-8629-974f3059df7e"], Cell[81290, 1823, 8528, 240, 885, "Text",ExpressionUUID->"38253c17-ba7a-4d5a-ae9c-7dd1442aee5e"] }, Open ]], Cell[CellGroupData[{ Cell[89855, 2068, 575, 8, 67, "Section",ExpressionUUID->"92f9b37a-8cf5-4f43-a336-5a2ecbc541dd"], Cell[90433, 2078, 6262, 163, 516, "Text",ExpressionUUID->"c343636a-d8dd-4b11-8d4a-ce8a402b7c9e"], Cell[CellGroupData[{ Cell[96720, 2245, 169, 3, 45, "Subsubsection",ExpressionUUID->"26febc96-93c0-4084-953c-5810f6a92534"], Cell[96892, 2250, 4894, 122, 482, "Text",ExpressionUUID->"60be0d85-6471-42fa-8bde-a094992c516e"], Cell[101789, 2374, 2592, 76, 135, "Text",ExpressionUUID->"d06f28b5-281a-4dae-9690-f301ca5dfb96"], Cell[104384, 2452, 11924, 335, 1167, "Text",ExpressionUUID->"5903d543-cd00-4455-b7c2-b25ac16899dd"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[116357, 2793, 169, 3, 67, "Section",ExpressionUUID->"917d32b6-aec2-417b-b571-54dbeb67105c"], Cell[116529, 2798, 3772, 107, 410, "Text",ExpressionUUID->"b33ad63c-0533-4cfe-9611-f5eed6032fc4"], Cell[120304, 2907, 407, 12, 52, "Input",ExpressionUUID->"ceff9bb0-4226-4049-abe0-fda4f30fc0b0"], Cell[CellGroupData[{ Cell[120736, 2923, 400, 12, 33, "Input",ExpressionUUID->"cd1b70f8-7eb5-41c2-a81c-02f534409d11"], Cell[121139, 2937, 326, 10, 34, "Output",ExpressionUUID->"d5b770fe-07f7-46c1-a1ec-15103fbbed1e"] }, Open ]], Cell[CellGroupData[{ Cell[121502, 2952, 462, 13, 30, "Input",ExpressionUUID->"17d2a008-069a-4854-aa40-20e89f5a1dc6"], Cell[121967, 2967, 299, 8, 34, "Output",ExpressionUUID->"4f441733-0c67-43f5-b445-da8c45f5f861"] }, Open ]], Cell[122281, 2978, 1357, 31, 265, "Text",ExpressionUUID->"61a2efba-ace3-4bfa-bc6a-cb2b1027a8ea"], Cell[CellGroupData[{ Cell[123663, 3013, 371, 9, 30, "Input",ExpressionUUID->"471c7e2e-8eaf-4c59-a2de-4e09475d0533"], Cell[124037, 3024, 246, 5, 34, "Output",ExpressionUUID->"f051f1e1-9d2f-4bf3-9d5f-54fa916dccd7"] }, Open ]], Cell[124298, 3032, 352, 10, 30, "Input",ExpressionUUID->"3638883f-9f12-4164-bc59-b362e2b6efd8"], Cell[124653, 3044, 1427, 37, 110, "Text",ExpressionUUID->"6f466fbc-aa95-43a9-96b6-c280b26cbb6f"], Cell[CellGroupData[{ Cell[126105, 3085, 678, 20, 52, "Input",ExpressionUUID->"fb546f4b-e4a1-44c5-9551-588c978ffad7"], Cell[126786, 3107, 283, 8, 34, "Output",ExpressionUUID->"814fb62c-542d-4ce8-868a-8a134ff51bb9"] }, Open ]], Cell[CellGroupData[{ Cell[127106, 3120, 408, 13, 30, "Input",ExpressionUUID->"6cdd99d5-335e-4d4a-ab78-6a30832e1d4f"], Cell[127517, 3135, 342, 10, 34, "Output",ExpressionUUID->"04944b9f-2b8d-4654-a246-056beb2ea09a"] }, Open ]], Cell[CellGroupData[{ Cell[127896, 3150, 518, 13, 30, "Input",ExpressionUUID->"47f4dd75-e1e1-46dc-93f2-02c29915f19e"], Cell[128417, 3165, 250, 6, 34, "Output",ExpressionUUID->"91164dc5-1129-4046-8d97-7c8ccdea8284"] }, Open ]], Cell[128682, 3174, 539, 11, 81, "Text",ExpressionUUID->"8ddcdfa6-ebc2-46d1-9974-7e9013b6d69c"], Cell[CellGroupData[{ Cell[129246, 3189, 477, 14, 30, "Input",ExpressionUUID->"de180903-eed0-4f93-9620-2a1af56ca390"], Cell[129726, 3205, 248, 5, 34, "Output",ExpressionUUID->"7a020483-23e9-4181-8715-19f94d87f44a"] }, Open ]], Cell[CellGroupData[{ Cell[130011, 3215, 339, 10, 30, "Input",ExpressionUUID->"0b413141-9052-4386-bab4-0b2c8da071ff"], Cell[130353, 3227, 272, 7, 34, "Output",ExpressionUUID->"1535610b-5abf-48dc-a1fe-cf74d8e1987d"] }, Open ]], Cell[CellGroupData[{ Cell[130662, 3239, 314, 9, 30, "Input",ExpressionUUID->"a026b677-5c8e-4caa-8a97-dc97148c280b"], Cell[130979, 3250, 304, 8, 34, "Output",ExpressionUUID->"28a04f7f-4b06-4461-be00-5ab036071dc9"] }, Open ]], Cell[131298, 3261, 462, 7, 35, "Text",ExpressionUUID->"682ba761-6f38-49d6-a1f4-03adff6e9623"], Cell[131763, 3270, 953, 22, 38, "Text",ExpressionUUID->"d5c21e81-d7a5-4e37-b324-4f36db3479df"], Cell[CellGroupData[{ Cell[132741, 3296, 805, 20, 33, "Input",ExpressionUUID->"4547e3b0-fb9f-4ba8-941a-cc5f132cfa70"], Cell[133549, 3318, 200, 4, 34, "Output",ExpressionUUID->"99bce78b-53fc-4f2c-b65b-e25d9553f206"] }, Open ]], Cell[133764, 3325, 733, 22, 33, "Input",ExpressionUUID->"01746cd5-1abf-400d-9118-8a4686436ad6"], Cell[CellGroupData[{ Cell[134522, 3351, 637, 17, 33, "Input",ExpressionUUID->"d18069dd-3630-4998-9327-45ec7bb031da"], Cell[135162, 3370, 563, 14, 34, "Output",ExpressionUUID->"e2ffa9f0-3674-47d3-95c5-fa71acc2c16a"] }, Open ]], Cell[135740, 3387, 6692, 174, 907, "Text",ExpressionUUID->"c62f35e0-6230-41c9-aa6c-7ed8b75ba6e7"], Cell[142435, 3563, 183, 4, 30, "Input",ExpressionUUID->"60e662b0-1814-432f-acf8-f2fe2fed9659"], Cell[CellGroupData[{ Cell[142643, 3571, 431, 8, 30, "Input",ExpressionUUID->"6b4060c0-f7f3-4896-94ed-1c0ef2fb2e0e"], Cell[143077, 3581, 358, 9, 34, "Output",ExpressionUUID->"1dedb252-7215-44ea-a7e1-3876df23dcce"] }, Open ]], Cell[CellGroupData[{ Cell[143472, 3595, 803, 24, 30, "Input",ExpressionUUID->"2386c596-e5af-4a3d-ade5-7c09d831d80b"], Cell[144278, 3621, 293, 8, 34, "Output",ExpressionUUID->"172dab8e-3913-45ba-ac83-cfc4ed63b465"] }, Open ]], Cell[144586, 3632, 777, 22, 30, "Input",ExpressionUUID->"7c678795-43b6-4364-baa2-be88fd0e2b8b"], Cell[145366, 3656, 701, 20, 30, "Input",ExpressionUUID->"0412c9f3-8cca-4bce-b991-984c0545d284"], Cell[CellGroupData[{ Cell[146092, 3680, 618, 17, 52, "Input",ExpressionUUID->"4bab6335-e61c-4bed-9356-b5c7dd3a0a9f"], Cell[146713, 3699, 267, 8, 34, "Output",ExpressionUUID->"ab696979-02fd-48ee-8c10-23d038819b62"] }, Open ]], Cell[146995, 3710, 629, 17, 52, "Input",ExpressionUUID->"60768c2f-05c4-49bc-a8e6-9ff7df99e474"], Cell[147627, 3729, 650, 18, 30, "Input",ExpressionUUID->"a2cbe3e0-d916-4554-aa16-34b5db2fba5c"], Cell[148280, 3749, 205, 3, 35, "Text",ExpressionUUID->"645499f3-4193-4a1d-98a7-4326e34b75a5"], Cell[148488, 3754, 990, 27, 55, "Input",ExpressionUUID->"d051aa69-e538-4e2a-898e-dadb1f1f9af2"], Cell[CellGroupData[{ Cell[149503, 3785, 684, 19, 30, "Input",ExpressionUUID->"9730756d-d9f1-422e-b768-75295c70f1ef"], Cell[150190, 3806, 342, 9, 34, "Output",ExpressionUUID->"2dedf19c-3c10-4fdc-bfb1-bb57e15d9452"] }, Open ]], Cell[CellGroupData[{ Cell[150569, 3820, 483, 14, 30, "Input",ExpressionUUID->"70ce00cc-b63c-48fb-8ef9-e46ed5d3204d"], Cell[151055, 3836, 293, 8, 34, "Output",ExpressionUUID->"fa7f7dfa-870b-4b5c-9de3-f9b9b7d8f16a"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[151397, 3850, 666, 10, 67, "Section",ExpressionUUID->"50a148d5-5fb3-428d-a0b0-056f28594eab"], Cell[152066, 3862, 4984, 145, 505, "Text",ExpressionUUID->"2aeff8f7-fa87-4ce2-a0e3-8362af7ac294"], Cell[CellGroupData[{ Cell[157075, 4011, 161, 3, 45, "Subsubsection",ExpressionUUID->"af1ed942-50ff-4f6e-a308-bb464a380ea7"], Cell[157239, 4016, 527, 17, 30, "Input",ExpressionUUID->"21796be4-826d-41fa-827c-1b7dd2f187be"], Cell[CellGroupData[{ Cell[157791, 4037, 115, 1, 30, "Input",ExpressionUUID->"4ac33d7a-d726-4e1d-9cc9-46021723faca"], Cell[157909, 4040, 956, 33, 37, "Output",ExpressionUUID->"09ecc782-6231-4a31-a546-cb05508ece8a"] }, Open ]], Cell[CellGroupData[{ Cell[158902, 4078, 1071, 29, 94, "Input",ExpressionUUID->"2783ebdf-a928-41b9-b845-3e8565fb0646"], Cell[159976, 4109, 33801, 637, 101, "Output",ExpressionUUID->"c4d69138-3e99-4ca1-938f-b90ab7b65943"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[193826, 4752, 243, 7, 71, "Subsubsection",ExpressionUUID->"932fb221-322f-479f-b17c-24f532d9a2f0"], Cell[194072, 4761, 2977, 95, 256, "Text",ExpressionUUID->"01d9d58f-3203-4dd0-aa9c-ce30e129b44d"], Cell[197052, 4858, 67082, 1106, 147, "Input",ExpressionUUID->"7046fde1-82e6-4459-9778-73ad523ab80c"], Cell[264137, 5966, 375, 8, 58, "Text",ExpressionUUID->"1b999ff5-d063-464d-a81e-947ccaa7e000"], Cell[264515, 5976, 3775, 99, 436, "Text",ExpressionUUID->"a279c129-b98d-432e-a8f5-ba16cd4d3317"] }, Open ]], Cell[CellGroupData[{ Cell[268327, 6080, 186, 3, 45, "Subsubsection",ExpressionUUID->"0f3284c4-a235-40de-867a-3d6825b5cb44"], Cell[268516, 6085, 845, 23, 91, "Text",ExpressionUUID->"d6f71efa-3152-4497-8567-b0c7a2a43acd"] }, Open ]] }, Open ]] }, Open ]] } ] *)